<?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>78801</bug_id>
          
          <creation_ts>2012-02-16 05:26:56 -0800</creation_ts>
          <short_desc>Select best target for tap gesture.</short_desc>
          <delta_ts>2012-03-19 11:30:29 -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>UI Events</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</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>
          <dependson>79476</dependson>
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Allan Sandfeld Jensen">allan.jensen</reporter>
          <assigned_to name="Allan Sandfeld Jensen">allan.jensen</assigned_to>
          <cc>abarth</cc>
    
    <cc>benjamin</cc>
    
    <cc>commit-queue</cc>
    
    <cc>darin</cc>
    
    <cc>dglazkov</cc>
    
    <cc>efidler</cc>
    
    <cc>fsamuel</cc>
    
    <cc>gmak</cc>
    
    <cc>gustavo</cc>
    
    <cc>hausmann</cc>
    
    <cc>hyatt</cc>
    
    <cc>kenneth</cc>
    
    <cc>klobag</cc>
    
    <cc>luiz</cc>
    
    <cc>menard</cc>
    
    <cc>ossy</cc>
    
    <cc>pnormand</cc>
    
    <cc>rjkroege</cc>
    
    <cc>tonikitoo</cc>
    
    <cc>vestbo</cc>
    
    <cc>webkit.review.bot</cc>
    
    <cc>xan.lopez</cc>
    
    <cc>zoltan</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>558100</commentid>
    <comment_count>0</comment_count>
    <who name="Allan Sandfeld Jensen">allan.jensen</who>
    <bug_when>2012-02-16 05:26:56 -0800</bug_when>
    <thetext>All the mobile browsers use area-based hit testing for the tap-gesture (touch click). The code for the rect-based hit testing is already in WebCore, but the code for selecting which of the returned nodes should be the target is not.

Since there are different philosophies and implementations for this, the code should be flexible enough to accommodate different approaches and be skippable by those that have existing implementations on a different layer.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>558101</commentid>
    <comment_count>1</comment_count>
      <attachid>127359</attachid>
    <who name="Allan Sandfeld Jensen">allan.jensen</who>
    <bug_when>2012-02-16 05:28:26 -0800</bug_when>
    <thetext>Created attachment 127359
Math patch

An extension of the math for the graphics classes.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>558106</commentid>
    <comment_count>2</comment_count>
      <attachid>127359</attachid>
    <who name="Kenneth Rohde Christiansen">kenneth</who>
    <bug_when>2012-02-16 05:34:47 -0800</bug_when>
    <thetext>Comment on attachment 127359
Math patch

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

&gt; Source/WebCore/platform/graphics/FloatPoint.h:246
&gt; +inline float FloatPoint::distanceToPoint(const FloatPoint&amp; p) const

wouldnt calling it &apos;other&apos; be more consistent?

&gt; Source/WebCore/platform/graphics/FloatQuad.h:92
&gt; +    FloatPoint center() const { return FloatPoint((m_p1.x()+m_p2.x()+m_p3.x()+m_p4.x())/4., (m_p1.y()+m_p2.y()+m_p3.y()+m_p4.y())/4.); }

There are some coding style violations here. Did you run the script locally?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>558107</commentid>
    <comment_count>3</comment_count>
      <attachid>127360</attachid>
    <who name="Allan Sandfeld Jensen">allan.jensen</who>
    <bug_when>2012-02-16 05:43:00 -0800</bug_when>
    <thetext>Created attachment 127360
Meat Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>558121</commentid>
    <comment_count>4</comment_count>
      <attachid>127364</attachid>
    <who name="Allan Sandfeld Jensen">allan.jensen</who>
    <bug_when>2012-02-16 05:53:01 -0800</bug_when>
    <thetext>Created attachment 127364
Math Patch2

Coding style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>558122</commentid>
    <comment_count>5</comment_count>
    <who name="Allan Sandfeld Jensen">allan.jensen</who>
    <bug_when>2012-02-16 05:53:57 -0800</bug_when>
    <thetext>(In reply to comment #2)
&gt; There are some coding style violations here. Did you run the script locally?

Yes, but apparently it doesn&apos;t quite work in git mode. I needed to check the changes in work-dir.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>558262</commentid>
    <comment_count>6</comment_count>
    <who name="Kenneth Rohde Christiansen">kenneth</who>
    <bug_when>2012-02-16 09:24:57 -0800</bug_when>
    <thetext>Adam, if anyone working on Chrome are interested in this, can you cc them?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>558281</commentid>
    <comment_count>7</comment_count>
    <who name="Simon Hausmann">hausmann</who>
    <bug_when>2012-02-16 09:50:37 -0800</bug_when>
    <thetext>*** Bug 49057 has been marked as a duplicate of this bug. ***</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>558317</commentid>
    <comment_count>8</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2012-02-16 10:43:00 -0800</bug_when>
    <thetext>@Grace, I wanted to CC olilan, but I didn&apos;t know his bugzilla account.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>559931</commentid>
    <comment_count>9</comment_count>
      <attachid>127360</attachid>
    <who name="Antonio Gomes">tonikitoo</who>
    <bug_when>2012-02-19 12:26:14 -0800</bug_when>
    <thetext>Comment on attachment 127360
Meat Patch

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

Good stuff. See Webkit/blackberry/WebKitSupport/FatFingers.cpp|h for reference.

see some comments bellow...

&gt; Source/WebCore/page/EventHandler.cpp:2400
&gt; +    HitTestRequest::HitTestRequestType hitType = HitTestRequest::ReadOnly | HitTestRequest::Active;
&gt; +    IntRect touchRect(center-radius, IntSize(radius.width()*2, radius.height()*2));

is not it better to use this (HitTestResults.h):

154	// Formula:
155	// x = p.x() - rightPadding
156	// y = p.y() - topPadding
157	// width = leftPadding + rightPadding + 1
158	// height = topPadding + bottomPadding + 1
159	inline LayoutRect HitTestResult::rectForPoint(const LayoutPoint&amp; point) const

&gt; Source/WebCore/page/EventHandler.cpp:2411
&gt; +    HitTestResultMetrics::HitList hitlist;
&gt; +    HitTestResultMetrics::compileHitList(result, hitlist, HitTestResultMetrics::nodeRespondingToTapGesture);
&gt; +    if (HitTestResultMetrics::findClosestNode(targetNode, targetPoint, center, touchRect, hitlist)) {

could not this part be encapsulated withing HitTestResultMetrics?

&gt; Source/WebCore/platform/HitTestResultMetrics.cpp:44
&gt; +            // ### implement hasDefaultEventHandler and use that instead of all of these above calls?

Use FIXME.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>560184</commentid>
    <comment_count>10</comment_count>
    <who name="Allan Sandfeld Jensen">allan.jensen</who>
    <bug_when>2012-02-20 04:48:41 -0800</bug_when>
    <thetext>(In reply to comment #9)
&gt; (From update of attachment 127360 [details])
&gt; &gt; Source/WebCore/page/EventHandler.cpp:2411
&gt; &gt; +    HitTestResultMetrics::HitList hitlist;
&gt; &gt; +    HitTestResultMetrics::compileHitList(result, hitlist, HitTestResultMetrics::nodeRespondingToTapGesture);
&gt; &gt; +    if (HitTestResultMetrics::findClosestNode(targetNode, targetPoint, center, touchRect, hitlist)) {
&gt; 
&gt; could not this part be encapsulated withing HitTestResultMetrics?
&gt; 

It could, but the point was to allow for a configurable combination of NodeFilters and Metrics to use. By exposing the step-wise functions I believe it would be easier to reuse the code for different heuristics.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>560235</commentid>
    <comment_count>11</comment_count>
    <who name="Antonio Gomes">tonikitoo</who>
    <bug_when>2012-02-20 08:32:50 -0800</bug_when>
    <thetext>(In reply to comment #10)
&gt; (In reply to comment #9)
&gt; &gt; (From update of attachment 127360 [details] [details])
&gt; &gt; &gt; Source/WebCore/page/EventHandler.cpp:2411
&gt; &gt; &gt; +    HitTestResultMetrics::HitList hitlist;
&gt; &gt; &gt; +    HitTestResultMetrics::compileHitList(result, hitlist, HitTestResultMetrics::nodeRespondingToTapGesture);
&gt; &gt; &gt; +    if (HitTestResultMetrics::findClosestNode(targetNode, targetPoint, center, touchRect, hitlist)) {
&gt; &gt; 
&gt; &gt; could not this part be encapsulated withing HitTestResultMetrics?
&gt; &gt; 
&gt; 
&gt; It could, but the point was to allow for a configurable combination of NodeFilters and Metrics to use. By exposing the step-wise functions I believe it would be easier to reuse the code for different heuristics.

Do you have any other use in mind? Otherwise, it would be better to move it, I would say.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>560236</commentid>
    <comment_count>12</comment_count>
      <attachid>127360</attachid>
    <who name="Antonio Gomes">tonikitoo</who>
    <bug_when>2012-02-20 08:35:00 -0800</bug_when>
    <thetext>Comment on attachment 127360
Meat Patch

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

&gt; Source/WebCore/platform/HitTestResultMetrics.cpp:62
&gt; +Node* nodeRespondingToTapGesture(Node* node)
&gt; +{
&gt; +    for (; node; node = node-&gt;parentOrHostNode()) {
&gt; +        if (node-&gt;isLink()
&gt; +            || node-&gt;isContentEditable()
&gt; +            || node-&gt;isMouseFocusable())
&gt; +            // ### implement hasDefaultEventHandler and use that instead of all of these above calls?
&gt; +            return node;
&gt; +        if (node-&gt;hasEventListeners() &amp;&amp;
&gt; +                (node-&gt;hasEventListeners(eventNames().clickEvent)
&gt; +                || node-&gt;hasEventListeners(eventNames().DOMActivateEvent)
&gt; +                || node-&gt;hasEventListeners(eventNames().mousedownEvent)
&gt; +                || node-&gt;hasEventListeners(eventNames().mouseupEvent)
&gt; +                || node-&gt;hasEventListeners(eventNames().mousemoveEvent)
&gt; +                 // Checking for focus events is not necessary since they can only fire on
&gt; +                 // focusable elements which have been captured above.
&gt; +            ))
&gt; +            return node;
&gt; +        if (node-&gt;renderStyle()) {
&gt; +            // Accept nodes that has a CSS effect when touched.
&gt; +            if (node-&gt;renderStyle()-&gt;affectedByActiveRules() || node-&gt;renderStyle()-&gt;affectedByHoverRules())
&gt; +                return node;
&gt; +        }
&gt; +    }
&gt; +    return 0;

can not traversing the DOM tree upwards like this be expensive and repetitive?

Also the event handling does bubble up and bubble down in the hierarchy to find an event target that can handle an event, iirc.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>560286</commentid>
    <comment_count>13</comment_count>
    <who name="Allan Sandfeld Jensen">allan.jensen</who>
    <bug_when>2012-02-20 10:52:17 -0800</bug_when>
    <thetext>(In reply to comment #12)
&gt; (From update of attachment 127360 [details])
&gt; can not traversing the DOM tree upwards like this be expensive and repetitive?
&gt; 
It can. The problem is that we need figure out if an element responds to touch-events or not, and since they can be handled by ancestors that requires checking them. It can be optimized to not check common ancestors more than once, or do width-first checking. There are several good options for optimizing this, but before doing that I want to ensure the functionality is correct and acceptable.

&gt; Also the event handling does bubble up and bubble down in the hierarchy to find an event target that can handle an event, iirc.

The problem is that very little event-handling on the web cancels the events they handle. So just emitting them on the best target and set default to re-emit the event on the second best target would probably cause a lot of event-handlers to see multiple events. Alternatively we would need something to tell us if any handlers have been activated on the event, and use that to determine if it should be re-emitted on more targets. 

This code though is more similar to what I have seen in our N9 code, and in the Chromium, Android and Blackberry codebases.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>560291</commentid>
    <comment_count>14</comment_count>
    <who name="Allan Sandfeld Jensen">allan.jensen</who>
    <bug_when>2012-02-20 10:56:15 -0800</bug_when>
    <thetext>(In reply to comment #11)
&gt; (In reply to comment #10)
&gt; &gt; (In reply to comment #9)
&gt; &gt; &gt; (From update of attachment 127360 [details] [details] [details])
&gt; &gt; &gt; &gt; Source/WebCore/page/EventHandler.cpp:2411
&gt; &gt; &gt; &gt; +    HitTestResultMetrics::HitList hitlist;
&gt; &gt; &gt; &gt; +    HitTestResultMetrics::compileHitList(result, hitlist, HitTestResultMetrics::nodeRespondingToTapGesture);
&gt; &gt; &gt; &gt; +    if (HitTestResultMetrics::findClosestNode(targetNode, targetPoint, center, touchRect, hitlist)) {
&gt; &gt; &gt; 
&gt; &gt; &gt; could not this part be encapsulated withing HitTestResultMetrics?
&gt; &gt; &gt; 
&gt; &gt; 
&gt; &gt; It could, but the point was to allow for a configurable combination of NodeFilters and Metrics to use. By exposing the step-wise functions I believe it would be easier to reuse the code for different heuristics.
&gt; 
&gt; Do you have any other use in mind? Otherwise, it would be better to move it, I would say.

Yes, one more at least. For scroll gestures I expect to filter on scrollable first, and then choose the most intersecting or smallest containing qualified node.

Of course you could still move the different combination of calls and just do the code reuse internally. I have no strong preference either way.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>560300</commentid>
    <comment_count>15</comment_count>
    <who name="Antonio Gomes">tonikitoo</who>
    <bug_when>2012-02-20 11:18:09 -0800</bug_when>
    <thetext>(In reply to comment #13)
&gt; (In reply to comment #12)
&gt; &gt; (From update of attachment 127360 [details] [details])
&gt; &gt; can not traversing the DOM tree upwards like this be expensive and repetitive?
&gt; &gt; 
&gt; It can. The problem is that we need figure out if an element responds to touch-events or not, and since they can be handled by ancestors that requires checking them. It can be optimized to not check common ancestors more than once, or do width-first checking. There are several good options for optimizing this, but before doing that I want to ensure the functionality is correct and acceptable.

Alternatively, you could considering doing this:

HitTestResult::addNodeToRectBasedTestResult instead of stopping the rect-hittest if current node rect contains the &quot;finger rect&quot;, you just keep going up in the *render* tree hierarchy.

HitTestResult::addNodeToRectBasedTestResult(..)
{
    (...)
    return !rect.contains(rectForPoint(pointInContainer)); &lt;---!
}

Traversing the render tree can (should?) be faster than DOM tree.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>560329</commentid>
    <comment_count>16</comment_count>
    <who name="Allan Sandfeld Jensen">allan.jensen</who>
    <bug_when>2012-02-20 13:04:33 -0800</bug_when>
    <thetext>(In reply to comment #15)
&gt; (In reply to comment #13)
&gt; &gt; (In reply to comment #12)
&gt; &gt; &gt; (From update of attachment 127360 [details] [details] [details])
&gt; &gt; &gt; can not traversing the DOM tree upwards like this be expensive and repetitive?
&gt; &gt; &gt; 
&gt; &gt; It can. The problem is that we need figure out if an element responds to touch-events or not, and since they can be handled by ancestors that requires checking them. It can be optimized to not check common ancestors more than once, or do width-first checking. There are several good options for optimizing this, but before doing that I want to ensure the functionality is correct and acceptable.
&gt; 
&gt; Alternatively, you could considering doing this:
&gt; 
&gt; HitTestResult::addNodeToRectBasedTestResult instead of stopping the rect-hittest if current node rect contains the &quot;finger rect&quot;, you just keep going up in the *render* tree hierarchy.
&gt; 
&gt; HitTestResult::addNodeToRectBasedTestResult(..)
&gt; {
&gt;     (...)
&gt;     return !rect.contains(rectForPoint(pointInContainer)); &lt;---!
&gt; }
&gt; 
&gt; Traversing the render tree can (should?) be faster than DOM tree.

The render tree does not necessarily have the same structure as the DOM tree, so it can not make the same guarantees. As long as there are fast options for traversing the DOM tree, there is no reason to traverse the wrong tree.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>561849</commentid>
    <comment_count>17</comment_count>
      <attachid>128178</attachid>
    <who name="Allan Sandfeld Jensen">allan.jensen</who>
    <bug_when>2012-02-22 04:31:01 -0800</bug_when>
    <thetext>Created attachment 128178
Patch

Combined patch, which also improves API and algorithmic performance.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>561855</commentid>
    <comment_count>18</comment_count>
      <attachid>128178</attachid>
    <who name="Kenneth Rohde Christiansen">kenneth</who>
    <bug_when>2012-02-22 05:02:35 -0800</bug_when>
    <thetext>Comment on attachment 128178
Patch

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

&gt; Source/WebCore/page/EventHandler.cpp:2368
&gt; +        nodeForTapGestureAtTouchPoint(gestureEvent.position(), IntSize(gestureEvent.area().width() / 2, gestureEvent.area().height() / 2), adjustedPoint, targetNode);

Can you split out IntSize(gestureEvent.area().width() / 2, gestureEvent.area().height() / 2) to give it a proper name such as &apos;center&apos; point. We might not always want to use the exact center as people tend to believe that they hit a tad higher.

&gt; Source/WebCore/page/EventHandler.cpp:2383
&gt; +bool EventHandler::handleGestureScrollUpdate(const PlatformGestureEvent&amp; gestureEvent)

Why is this part of this patch?

&gt; Source/WebCore/page/EventHandler.cpp:2385
&gt; +    const float tickDivisor = (float)WheelEvent::tickMultiplier;

c++ casts?

&gt; Source/WebCore/page/EventHandler.cpp:2395
&gt; +void EventHandler::nodeForTapGestureAtTouchPoint(const IntPoint&amp; center, const IntSize&amp; radius, IntPoint&amp; targetPoint, Node*&amp; targetNode)

what node? activeableNode? targetNode ? It could be a bit more clear

&gt; Source/WebCore/page/EventHandler.cpp:2398
&gt; +    IntRect touchRect(center-radius, IntSize(radius.width()*2, radius.height()*2));

style spaces around *, - etc

&gt; Source/WebCore/page/EventHandler.cpp:2401
&gt; +    HitTestResult result = hitTestResultAtPoint(center, /*allowShadowContent*/ false, false, DontHitTestScrollbars, hitType, radius);

What does the second false represent?

&gt; Source/WebCore/platform/HitTestResultMetrics.cpp:39
&gt; +// Takes non-const Node* because isContentEditable is a non-const function.
&gt; +bool nodeRespondsToTapGesture(Node* node)

what about drag and drop?

&gt; Source/WebCore/platform/HitTestResultMetrics.cpp:64
&gt; +static inline void appendAbsoluteQuadsForNodeToHitList(Node* node, HitList&amp; hitlist)

append AbsoluteNodeQuadsToHitList?

&gt; Source/WebCore/platform/HitTestResultMetrics.cpp:73
&gt; +    const Vector&lt;FloatQuad&gt;::const_iterator itend = quads.end();

we normally just call it &apos;end&apos; - let&apos;s be consistent

&gt; Source/WebCore/platform/HitTestResultMetrics.cpp:89
&gt; +    const HitTestResult::NodeSet::const_iterator itend = intersectedNodes.end();

end*

&gt; Source/WebCore/platform/HitTestResultMetrics.cpp:96
&gt; +        Node* responder = 0;

respondee ?

&gt; Source/WebCore/platform/HitTestResultMetrics.cpp:137
&gt; +// Returns the distance squared to the bounding box centerline..

trailing .

&gt; Source/WebCore/platform/HitTestResultMetrics.cpp:140
&gt; +    // Using the bounding box means the distance to centerline is less meaningfull for transformed rectangles

meaningful has only one l

&gt; Source/WebCore/platform/HitTestResultMetrics.cpp:142
&gt; +    // but calculating the distance to quads can be very expensive.
&gt; +    IntRect rect = hitTestQuad.boundingBox();

Did you measure this? Is it really a problem? This is not that common anyways

&gt; Source/WebCore/platform/HitTestResultMetrics.cpp:148
&gt; +float overlapWithHitTestQuad(const LayoutPoint&amp;, const LayoutRect&amp; touchRect, const HitTestQuad&amp; hitTestQuad)

Can the name make the return value more obvious? overlapRatio ?

&gt; Source/WebCore/platform/HitTestResultMetrics.h:62
&gt; +
&gt; +typedef bool (*NodeFilter)(Node*);
&gt; +bool nodeRespondsToTapGesture(Node*);
&gt; +
&gt; +void compileHitList(const HitTestResult&amp;, HitList&amp;, NodeFilter);
&gt; +
&gt; +typedef float (*Metric)(const LayoutPoint&amp;, const LayoutRect&amp;, const HitTestQuad&amp;);
&gt; +float distanceToHitTestQuad(const LayoutPoint&amp; touchHotspot, const LayoutRect&amp; touchArea, const HitTestQuad&amp;);
&gt; +float overlapWithHitTestQuad(const LayoutPoint&amp; touchHotspot, const LayoutRect&amp; touchArea, const HitTestQuad&amp;);
&gt; +
&gt; +bool findNodeWithLowestMetric(Node*&amp; targetNode, LayoutPoint&amp; targetPoint, const LayoutPoint&amp; touchHotspot, const LayoutRect&amp; touchArea, HitList&amp; hitlist, Metric);
&gt; +bool findNodeWithHighestMetric(Node*&amp; targetNode, LayoutPoint&amp; targetPoint, const LayoutPoint&amp; touchHotspot, const LayoutRect&amp; touchArea, HitList&amp; hitlist, Metric);
&gt; +

Are all these supposed to be exposed?

&gt; Source/WebCore/platform/graphics/FloatSize.h:101
&gt; +    float area() const
&gt; +    {
&gt; +        return m_width * m_height;
&gt; +    }

I don&apos;t know if area is a good name...</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>561863</commentid>
    <comment_count>19</comment_count>
      <attachid>128178</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-02-22 05:07:28 -0800</bug_when>
    <thetext>Comment on attachment 128178
Patch

Attachment 128178 did not pass chromium-ews (chromium-xvfb):
Output: http://queues.webkit.org/results/11558469</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>561887</commentid>
    <comment_count>20</comment_count>
    <who name="Allan Sandfeld Jensen">allan.jensen</who>
    <bug_when>2012-02-22 05:38:40 -0800</bug_when>
    <thetext>(In reply to comment #18)
&gt; (From update of attachment 128178 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=128178&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/page/EventHandler.cpp:2368
&gt; &gt; +        nodeForTapGestureAtTouchPoint(gestureEvent.position(), IntSize(gestureEvent.area().width() / 2, gestureEvent.area().height() / 2), adjustedPoint, targetNode);
&gt; 
&gt; Can you split out IntSize(gestureEvent.area().width() / 2, gestureEvent.area().height() / 2) to give it a proper name such as &apos;center&apos; point. We might not always want to use the exact center as people tend to believe that they hit a tad higher.
&gt; 
The code is ready for changing the IntSize touchArea to an IntRect touchSurface later, but at the moment the hotspot is the center, and no additional information is currently available from touch points.

&gt; &gt; Source/WebCore/page/EventHandler.cpp:2383
&gt; &gt; +bool EventHandler::handleGestureScrollUpdate(const PlatformGestureEvent&amp; gestureEvent)
&gt; 
&gt; Why is this part of this patch?
&gt; 
Because I refactored handleGestureEvent to separate handleGestureTap out, this is a byproduct of the refactoring.

&gt; &gt; Source/WebCore/page/EventHandler.cpp:2385
&gt; &gt; +    const float tickDivisor = (float)WheelEvent::tickMultiplier;
&gt; 
&gt; c++ casts?
&gt; 
Why would you object cast an integral type? Besides it is not part of my patch, it has only been moved.

&gt; &gt; Source/WebCore/page/EventHandler.cpp:2395
&gt; &gt; +void EventHandler::nodeForTapGestureAtTouchPoint(const IntPoint&amp; center, const IntSize&amp; radius, IntPoint&amp; targetPoint, Node*&amp; targetNode)
&gt; 
&gt; what node? activeableNode? targetNode ? It could be a bit more clear
&gt; 
&gt; &gt; Source/WebCore/page/EventHandler.cpp:2398
&gt; &gt; +    IntRect touchRect(center-radius, IntSize(radius.width()*2, radius.height()*2));
&gt; 
&gt; style spaces around *, - etc
&gt; 
Good catch, for some reason this was not caught by the style-checker.

&gt; &gt; Source/WebCore/platform/HitTestResultMetrics.cpp:39
&gt; &gt; +// Takes non-const Node* because isContentEditable is a non-const function.
&gt; &gt; +bool nodeRespondsToTapGesture(Node* node)
&gt; 
&gt; what about drag and drop?
&gt; 
Will be handled later. This is a patch for handling the tap gestures. Also to be handled later is scroll gestures and rotate gestures.


&gt; &gt; Source/WebCore/platform/HitTestResultMetrics.cpp:64
&gt; &gt; +static inline void appendAbsoluteQuadsForNodeToHitList(Node* node, HitList&amp; hitlist)
&gt; 
&gt; append AbsoluteNodeQuadsToHitList?
&gt; 
Sure.

&gt; &gt; Source/WebCore/platform/HitTestResultMetrics.cpp:73
&gt; &gt; +    const Vector&lt;FloatQuad&gt;::const_iterator itend = quads.end();
&gt; 
&gt; we normally just call it &apos;end&apos; - let&apos;s be consistent
&gt; 
Isn&apos;t that name likely to cause name collisions?

&gt; &gt; Source/WebCore/platform/HitTestResultMetrics.cpp:89
&gt; &gt; +    const HitTestResult::NodeSet::const_iterator itend = intersectedNodes.end();
&gt; 
&gt; end*
&gt; 
&gt; &gt; Source/WebCore/platform/HitTestResultMetrics.cpp:96
&gt; &gt; +        Node* responder = 0;
&gt; 
&gt; respondee ?
&gt; 
No it is the respondingNode, or responder for short.

&gt; &gt; Source/WebCore/platform/HitTestResultMetrics.cpp:142
&gt; &gt; +    // but calculating the distance to quads can be very expensive.
&gt; &gt; +    IntRect rect = hitTestQuad.boundingBox();
&gt; 
&gt; Did you measure this? Is it really a problem? This is not that common anyways
&gt;
It is mathematically complicated and computationally much more expensive. On top of that the results returned from hittestresult which are the input to these functions are not based on quad-based hit-testing anyway. So if we desire better accuracy for transformed objects ALL rect-based hit-testing in the render-tree needs to rewritten. 
 
&gt; &gt; Source/WebCore/platform/HitTestResultMetrics.cpp:148
&gt; &gt; +float overlapWithHitTestQuad(const LayoutPoint&amp;, const LayoutRect&amp; touchRect, const HitTestQuad&amp; hitTestQuad)
&gt; 
&gt; Can the name make the return value more obvious? overlapRatio ?
&gt; 
AreaOfIntersection would perhaps be more accurate.

&gt; &gt; Source/WebCore/platform/HitTestResultMetrics.h:62
&gt; &gt; +
&gt; &gt; +typedef bool (*NodeFilter)(Node*);
&gt; &gt; +bool nodeRespondsToTapGesture(Node*);
&gt; &gt; +
&gt; &gt; +void compileHitList(const HitTestResult&amp;, HitList&amp;, NodeFilter);
&gt; &gt; +
&gt; &gt; +typedef float (*Metric)(const LayoutPoint&amp;, const LayoutRect&amp;, const HitTestQuad&amp;);
&gt; &gt; +float distanceToHitTestQuad(const LayoutPoint&amp; touchHotspot, const LayoutRect&amp; touchArea, const HitTestQuad&amp;);
&gt; &gt; +float overlapWithHitTestQuad(const LayoutPoint&amp; touchHotspot, const LayoutRect&amp; touchArea, const HitTestQuad&amp;);
&gt; &gt; +
&gt; &gt; +bool findNodeWithLowestMetric(Node*&amp; targetNode, LayoutPoint&amp; targetPoint, const LayoutPoint&amp; touchHotspot, const LayoutRect&amp; touchArea, HitList&amp; hitlist, Metric);
&gt; &gt; +bool findNodeWithHighestMetric(Node*&amp; targetNode, LayoutPoint&amp; targetPoint, const LayoutPoint&amp; touchHotspot, const LayoutRect&amp; touchArea, HitList&amp; hitlist, Metric);
&gt; &gt; +
&gt; 
&gt; Are all these supposed to be exposed?
&gt; 
Sort of. They are not currently used and could be hidden, but it does serve a purpose of making it possible for fat-finger code for other platforms to use it, even if they want to do these tests higher in the API. 

&gt; &gt; Source/WebCore/platform/graphics/FloatSize.h:101
&gt; &gt; +    float area() const
&gt; &gt; +    {
&gt; &gt; +        return m_width * m_height;
&gt; &gt; +    }
&gt; 
&gt; I don&apos;t know if area is a good name...

What else would just call the area of a rectangle?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>561898</commentid>
    <comment_count>21</comment_count>
      <attachid>128178</attachid>
    <who name="Simon Hausmann">hausmann</who>
    <bug_when>2012-02-22 05:55:22 -0800</bug_when>
    <thetext>Comment on attachment 128178
Patch

I would love to see layout tests for this, too, to cover at least the basics. You could use Internals.idl for this, similar to what I tried when I looked at this issue:

https://github.com/tronical/webkit/commit/e80076f360e69511ce9291b98cb16228c06b4ac0</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>561909</commentid>
    <comment_count>22</comment_count>
    <who name="Allan Sandfeld Jensen">allan.jensen</who>
    <bug_when>2012-02-22 06:06:58 -0800</bug_when>
    <thetext>(In reply to comment #21)
&gt; (From update of attachment 128178 [details])
&gt; I would love to see layout tests for this, too, to cover at least the basics. You could use Internals.idl for this, similar to what I tried when I looked at this issue:
&gt; 
&gt; https://github.com/tronical/webkit/commit/e80076f360e69511ce9291b98cb16228c06b4ac0

Sounds like a good idea. I will add layout tests and fix the coding style, hopefully clarify the code too.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>561950</commentid>
    <comment_count>23</comment_count>
    <who name="Antonio Gomes">tonikitoo</who>
    <bug_when>2012-02-22 07:01:46 -0800</bug_when>
    <thetext>When adding layout tests, it would be great to consider this codepath, and custom touch target detection, platform specific.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>563139</commentid>
    <comment_count>24</comment_count>
      <attachid>128484</attachid>
    <who name="Allan Sandfeld Jensen">allan.jensen</who>
    <bug_when>2012-02-23 08:50:23 -0800</bug_when>
    <thetext>Created attachment 128484
Patch

Added automatic testing as suggested by Simon Hausmann. 

Corrected several cases of coding style problems, and removed functions not used outside of the code from the header file as suggested by Kenneth Rohde. 

Renamed the new file to better describe its new function.

Made the feature a compile-time define to avoid accidentally breaking other platforms with similar features implemented elsewhere and to fix compilation issues as reported by ReviewBot.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>563161</commentid>
    <comment_count>25</comment_count>
      <attachid>128484</attachid>
    <who name="Antonio Gomes">tonikitoo</who>
    <bug_when>2012-02-23 09:22:51 -0800</bug_when>
    <thetext>Comment on attachment 128484
Patch

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

did not yet review the code change, just some questions after a brief look

&gt; Source/JavaScriptCore/wtf/Platform.h:1039
&gt; +#if PLATFORM(QT)

I think it should be like #if  !defined(ENABLE_TOUCH_ADJUSTMENT) &amp;&amp; PLATFORM(QT) ?

&gt; Source/WebCore/ChangeLog:25
&gt; +        * Target.pri:

you are only adding it to one build system. I know it has the compile flag, but maybe it is a practice to add to all build systems?

&gt; Source/WebCore/page/EventHandler.cpp:-2353
&gt; -    case PlatformEvent::GestureTap: {
&gt; -        // FIXME: Refactor this code to not hit test multiple times once hit testing has been corrected as suggested above.
&gt; -        PlatformMouseEvent fakeMouseMove(gestureEvent.position(), gestureEvent.globalPosition(), NoButton, PlatformEvent::MouseMoved, /* clickCount */ 1, gestureEvent.shiftKey(), gestureEvent.ctrlKey(), gestureEvent.altKey(), gestureEvent.metaKey(), gestureEvent.timestamp());
&gt; -        PlatformMouseEvent fakeMouseDown(gestureEvent.position(), gestureEvent.globalPosition(), LeftButton, PlatformEvent::MousePressed, /* clickCount */ 1, gestureEvent.shiftKey(), gestureEvent.ctrlKey(), gestureEvent.altKey(), gestureEvent.metaKey(), gestureEvent.timestamp());
&gt; -        PlatformMouseEvent fakeMouseUp(gestureEvent.position(), gestureEvent.globalPosition(), LeftButton, PlatformEvent::MouseReleased, /* clickCount */ 1, gestureEvent.shiftKey(), gestureEvent.ctrlKey(), gestureEvent.altKey(), gestureEvent.metaKey(), gestureEvent.timestamp());
&gt; -        mouseMoved(fakeMouseMove);
&gt; -        handleMousePressEvent(fakeMouseDown);
&gt; -        handleMouseReleaseEvent(fakeMouseUp);
&gt; -        return true;

maybe one patch to move it to its own method , and them adding the #if touch_adjustment bits?

&gt; Source/WebCore/page/EventHandler.cpp:-2361
&gt; -        const float tickDivisor = (float)WheelEvent::tickMultiplier;
&gt; -        // FIXME: Replace this interim implementation once the above fixme has been addressed.
&gt; -        IntPoint point(gestureEvent.position().x(), gestureEvent.position().y());
&gt; -        IntPoint globalPoint(gestureEvent.globalPosition().x(), gestureEvent.globalPosition().y());
&gt; -        PlatformWheelEvent syntheticWheelEvent(point, globalPoint, gestureEvent.deltaX(), gestureEvent.deltaY(), gestureEvent.deltaX() / tickDivisor, gestureEvent.deltaY() / tickDivisor, ScrollByPixelWheelEvent, gestureEvent.shiftKey(), gestureEvent.ctrlKey(), gestureEvent.altKey(), gestureEvent.metaKey());
&gt; -        handleWheelEvent(syntheticWheelEvent);

ditto

&gt; Source/WebCore/page/EventHandler.cpp:2407
&gt; +    HitTestResult result = hitTestResultAtPoint(touchCenter, /*allowShadowContent*/ false, /*ignoreClipping*/ false, DontHitTestScrollbars, hitType, touchRadius);

side note: &quot;AtPoint&quot; of this method does not make total sense anymore with the &apos;padding&apos; addition</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>563182</commentid>
    <comment_count>26</comment_count>
      <attachid>128484</attachid>
    <who name="Kenneth Rohde Christiansen">kenneth</who>
    <bug_when>2012-02-23 09:56:30 -0800</bug_when>
    <thetext>Comment on attachment 128484
Patch

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

&gt; Source/WebCore/page/EventHandler.cpp:2368
&gt; +    #if ENABLE(TOUCH_ADJUSTMENT)

These are never indended! accoding to coding style... not even if nested. Also maybe it should be a USE as it is a feature, but you should probably verify that with someone else

&gt; Source/WebCore/platform/TouchAdjustment.cpp:34
&gt; +namespace WebCore {

It has namespace WebCore and it is in platform. WebCore/platform is supposed to move to Platform/ at some point and be used by WebCore and not the other way around. Maybe we should move this out of platform.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>563196</commentid>
    <comment_count>27</comment_count>
      <attachid>128484</attachid>
    <who name="Philippe Normand">pnormand</who>
    <bug_when>2012-02-23 10:14:38 -0800</bug_when>
    <thetext>Comment on attachment 128484
Patch

Attachment 128484 did not pass gtk-ews (gtk):
Output: http://queues.webkit.org/results/11610302</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>563259</commentid>
    <comment_count>28</comment_count>
      <attachid>128484</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-02-23 10:59:51 -0800</bug_when>
    <thetext>Comment on attachment 128484
Patch

Attachment 128484 did not pass chromium-ews (chromium-xvfb):
Output: http://queues.webkit.org/results/11600375

New failing tests:
touchadjustment/nested-touch.html
touchadjustment/touch-inlines.html
touchadjustment/event-triggered-widgets.html</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>564237</commentid>
    <comment_count>29</comment_count>
      <attachid>128719</attachid>
    <who name="Allan Sandfeld Jensen">allan.jensen</who>
    <bug_when>2012-02-24 05:33:17 -0800</bug_when>
    <thetext>Created attachment 128719
Patch

Moved touch-adjustment to WebCore/page and found out how to set JS-feature flags which should help fix builds on other platforms.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>564305</commentid>
    <comment_count>30</comment_count>
      <attachid>128728</attachid>
    <who name="Allan Sandfeld Jensen">allan.jensen</who>
    <bug_when>2012-02-24 07:05:11 -0800</bug_when>
    <thetext>Created attachment 128728
Patch

Added expected results for chromium and resubmitting after blocking patch has landed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>564313</commentid>
    <comment_count>31</comment_count>
      <attachid>128733</attachid>
    <who name="Allan Sandfeld Jensen">allan.jensen</who>
    <bug_when>2012-02-24 07:16:37 -0800</bug_when>
    <thetext>Created attachment 128733
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>564419</commentid>
    <comment_count>32</comment_count>
      <attachid>128733</attachid>
    <who name="Antonio Gomes">tonikitoo</who>
    <bug_when>2012-02-24 10:10:14 -0800</bug_when>
    <thetext>Comment on attachment 128733
Patch

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

&gt; Source/WebCore/page/EventHandler.cpp:2404
&gt; +void EventHandler::nodeForTapGestureAtTouchPoint(const IntPoint&amp; touchCenter, const IntSize&amp; touchRadius, IntPoint&amp; targetPoint, Node*&amp; targetNode)

I think we can omit the &quot;tap gesture&quot; part in the name.

It is a public method, so it can be called directly. Ports like the BlackBerry do a target detection at mouse_down instead of at a tap gesture.

&gt; Source/WebCore/page/EventHandler.cpp:2412
&gt; +    findBestCandidateForGestureTap(targetNode, targetPoint, touchCenter, touchRect, result);

same here

&gt; Source/WebCore/page/TouchAdjustment.cpp:47
&gt; +    Node* m_node;

What guarantees here that the node does get destroyed somewhere else (by JS for example) and you have a dangling pointer.

&gt; Source/WebCore/page/TouchAdjustment.cpp:56
&gt; +bool nodeRespondsToTapGesture(Node* node)

again, not only for &quot;tap gestures&quot;

&gt; Source/WebCore/page/TouchAdjustment.cpp:167
&gt; +    IntRect rect = hitTestQuad.boundingBox();
&gt; +
&gt; +    return rect.distanceSquaredFromCenterLineToPoint(touchHotspot);

drop blank line here

&gt; Source/WebCore/page/TouchAdjustment.cpp:222
&gt; +void findBestCandidateForGestureTap(Node*&amp; targetNode, LayoutPoint&amp; targetPoint, const LayoutPoint&amp; touchHotspot, const LayoutRect&amp; touchArea, const HitTestResult&amp; hitTestResult)

ditto (naming)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>565145</commentid>
    <comment_count>33</comment_count>
      <attachid>128733</attachid>
    <who name="Antonio Gomes">tonikitoo</who>
    <bug_when>2012-02-26 07:11:52 -0800</bug_when>
    <thetext>Comment on attachment 128733
Patch

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

&gt; Source/WebCore/testing/Internals.cpp:560
&gt; +PassRefPtr&lt;WebKitPoint&gt; Internals::touchPositionAdjustedToBestNodeForGestureTap(long x, long y, long w, long h, Document* document, ExceptionCode&amp; ec)
&gt; +{
&gt; +    if (!document || !document-&gt;frame()) {
&gt; +        ec = INVALID_ACCESS_ERR;
&gt; +        return 0;
&gt; +    }
&gt; +
&gt; +    IntSize radius(w / 2, h / 2);
&gt; +    IntPoint point(x + radius.width(), y + radius.height());
&gt; +
&gt; +    Node* targetNode;
&gt; +    IntPoint adjustedPoint;
&gt; +
&gt; +    document-&gt;frame()-&gt;eventHandler()-&gt;nodeForTapGestureAtTouchPoint(point, radius, adjustedPoint, targetNode);
&gt; +
&gt; +    return WebKitPoint::create(adjustedPoint.x(), adjustedPoint.y());
&gt; +}
&gt; +
&gt; +PassRefPtr&lt;Node&gt; Internals::touchNodeAdjustedToBestNodeForGestureTap(long x, long y, long w, long h, Document* document, ExceptionCode&amp; ec)
&gt; +{
&gt; +    if (!document || !document-&gt;frame()) {
&gt; +        ec = INVALID_ACCESS_ERR;
&gt; +        return 0;
&gt; +    }
&gt; +
&gt; +    IntSize radius(w / 2, h / 2);
&gt; +    IntPoint point(x + radius.width(), y + radius.height());
&gt; +
&gt; +    Node* targetNode;
&gt; +    IntPoint adjustedPoint;
&gt; +
&gt; +    document-&gt;frame()-&gt;eventHandler()-&gt;nodeForTapGestureAtTouchPoint(point, radius, adjustedPoint, targetNode);
&gt; +
&gt; +    return adoptRef(targetNode);

some common code that could be shared via a helper here.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>565446</commentid>
    <comment_count>34</comment_count>
    <who name="Allan Sandfeld Jensen">allan.jensen</who>
    <bug_when>2012-02-27 01:18:09 -0800</bug_when>
    <thetext>(In reply to comment #32)
&gt; (From update of attachment 128733 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=128733&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/page/EventHandler.cpp:2404
&gt; &gt; +void EventHandler::nodeForTapGestureAtTouchPoint(const IntPoint&amp; touchCenter, const IntSize&amp; touchRadius, IntPoint&amp; targetPoint, Node*&amp; targetNode)
&gt; 
&gt; I think we can omit the &quot;tap gesture&quot; part in the name.
&gt; 
&gt; It is a public method, so it can be called directly. Ports like the BlackBerry do a target detection at mouse_down instead of at a tap gesture.
&gt; 
The reason I added for-tap-gesture is to distinguish it from a function that adjust for scroll gesture or for text selection. This function in particular only looks for nodes that has the event-handlers that are emitted by the synthetic click emitted after a tap gesture, not for nodes that has scroll overflow or scroll event handlers.

It is the same reason I had the public API earlier where you could specify your own node-filter in case you wanted to use the same functions in a slightly different context.

I could change it to something like node-responding-to-synthetic-click, would that work for your case?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>565646</commentid>
    <comment_count>35</comment_count>
    <who name="Antonio Gomes">tonikitoo</who>
    <bug_when>2012-02-27 07:54:29 -0800</bug_when>
    <thetext>
&gt; It is the same reason I had the public API earlier where you could specify your own node-filter in case you wanted to use the same functions in a slightly different context.
&gt; 
&gt; I could change it to something like node-responding-to-synthetic-click, would that work for your case?

Hum, not entirely sure yet.

Maybe node-responding-to-user-interaction or something more generic like best-clickable-target-for-point, clickable-node-for-point or adjustedNodeAndPositionForClicking?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>566711</commentid>
    <comment_count>36</comment_count>
      <attachid>129259</attachid>
    <who name="Allan Sandfeld Jensen">allan.jensen</who>
    <bug_when>2012-02-28 08:32:19 -0800</bug_when>
    <thetext>Created attachment 129259
Patch

Renamed functions to not mention GestureTap. Changed the API in TouchAdjustment so it can also be used with the result from a Document::nodesFromRect call, and added handling and tests for &lt;label&gt; elements.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>566714</commentid>
    <comment_count>37</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-02-28 08:35:43 -0800</bug_when>
    <thetext>Attachment 129259 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;LayoutTests/ChangeLog&apos;, u&apos;LayoutTests/plat...&quot; exit_code: 1
Source/WebCore/page/TouchAdjustment.cpp:33:  Alphabetical sorting problem.  [build/include_order] [4]
Source/WebCore/page/TouchAdjustment.cpp:123:  Missing spaces around =  [whitespace/operators] [4]
Source/WebCore/page/TouchAdjustment.h:30:  Extra space before )  [whitespace/parens] [2]
Total errors found: 3 in 41 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>566723</commentid>
    <comment_count>38</comment_count>
      <attachid>129259</attachid>
    <who name="Kenneth Rohde Christiansen">kenneth</who>
    <bug_when>2012-02-28 08:41:54 -0800</bug_when>
    <thetext>Comment on attachment 129259
Patch

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

&gt; Source/WebCore/page/EventHandler.cpp:2405
&gt; +void EventHandler::bestClickableNodeAtTouchPoint(const IntPoint&amp; touchCenter, const IntSize&amp; touchRadius, IntPoint&amp; targetPoint, Node*&amp; targetNode)

Isn&apos;t it For instead of At?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>566858</commentid>
    <comment_count>39</comment_count>
      <attachid>129259</attachid>
    <who name="Antonio Gomes">tonikitoo</who>
    <bug_when>2012-02-28 10:47:09 -0800</bug_when>
    <thetext>Comment on attachment 129259
Patch

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

Looking really good! I have a question though:

&gt; LayoutTests/touchadjustment/event-triggered-widgets.html:26
&gt; +        do {
&gt; +            pos.left += node.offsetLeft;
&gt; +            pos.top += node.offsetTop;
&gt; +        } while (node = node.offsetParent);

I think there is a JS helper for that somewhere.

&gt;&gt; Source/WebCore/page/EventHandler.cpp:2405
&gt;&gt; +void EventHandler::bestClickableNodeAtTouchPoint(const IntPoint&amp; touchCenter, const IntSize&amp; touchRadius, IntPoint&amp; targetPoint, Node*&amp; targetNode)
&gt; 
&gt; Isn&apos;t it For instead of At?

Agreed.

&gt; Source/WebCore/page/TouchAdjustment.cpp:92
&gt; +        if (enclosingBox &amp;&amp; enclosingBox-&gt;scrollsOverflow())

I think scrollOverflow is not all you need here.

&lt;div&gt; content 0 &lt;/div&gt;
&lt;div id=&quot;scrollable1&quot; style=&quot;position:relative; left: 50px; background: blue; color: #ffffff; padding: 4px; width: 100px; overflow: auto;&quot;&gt;
     content 1
&lt;/div&gt;
&lt;div&gt; content 2 &lt;/div&gt;

In the above quoted HTML, that has a non-scrollable DIV with overflow:auto, do you get this DIV as the node-responding-to-scroll-gesture?

&gt;&gt; Source/WebCore/page/TouchAdjustment.cpp:123
&gt;&gt; +    for (unsigned int i=0; i &lt; length; ++i) {
&gt; 
&gt; Missing spaces around =  [whitespace/operators] [4]

s/unsigned int/unsigned/g</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>566864</commentid>
    <comment_count>40</comment_count>
    <who name="Antonio Gomes">tonikitoo</who>
    <bug_when>2012-02-28 10:50:36 -0800</bug_when>
    <thetext>maybe renderbox::canBeScrolledAndHasScrollableArea</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>566884</commentid>
    <comment_count>41</comment_count>
    <who name="Allan Sandfeld Jensen">allan.jensen</who>
    <bug_when>2012-02-28 11:10:40 -0800</bug_when>
    <thetext>(In reply to comment #39)
&gt; &gt; Source/WebCore/page/TouchAdjustment.cpp:92
&gt; &gt; +        if (enclosingBox &amp;&amp; enclosingBox-&gt;scrollsOverflow())
&gt; 
&gt; I think scrollOverflow is not all you need here.
&gt; 
&gt; &lt;div&gt; content 0 &lt;/div&gt;
&gt; &lt;div id=&quot;scrollable1&quot; style=&quot;position:relative; left: 50px; background: blue; color: #ffffff; padding: 4px; width: 100px; overflow: auto;&quot;&gt;
&gt;      content 1
&gt; &lt;/div&gt;
&gt; &lt;div&gt; content 2 &lt;/div&gt;
&gt; 
&gt; In the above quoted HTML, that has a non-scrollable DIV with overflow:auto, do you get this DIV as the node-responding-to-scroll-gesture?
&gt; 
That function probably shouldn&apos;t have been in the patch. It is not yet hooked up to anything, and I can add to the problems that the event-listener it checks for is also wrong (is scrollEvent but should have been mousewheelEvent) ;)

So, we down to renaming functions with ..AtTouchPoint to ..ForTouchPoint, or ..ForTouch?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>569590</commentid>
    <comment_count>42</comment_count>
      <attachid>129887</attachid>
    <who name="Allan Sandfeld Jensen">allan.jensen</who>
    <bug_when>2012-03-02 05:31:01 -0800</bug_when>
    <thetext>Created attachment 129887
Patch

Style fix and function renames.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>569593</commentid>
    <comment_count>43</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-03-02 05:34:49 -0800</bug_when>
    <thetext>Attachment 129887 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;LayoutTests/ChangeLog&apos;, u&apos;LayoutTests/plat...&quot; exit_code: 1
LayoutTests/platform/chromium/test_expectations.txt:3442:  More specific entry on line 3442 overrides line 3133 fast/overflow/unreachable-overflow-rtl-bug.html  [test/expectations] [5]
Total errors found: 1 in 41 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>569625</commentid>
    <comment_count>44</comment_count>
    <who name="Allan Sandfeld Jensen">allan.jensen</who>
    <bug_when>2012-03-02 06:38:01 -0800</bug_when>
    <thetext>(In reply to comment #43)
&gt; Attachment 129887 [details] did not pass style-queue:
&gt; 
&gt; Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;LayoutTests/ChangeLog&apos;, u&apos;LayoutTests/plat...&quot; exit_code: 1
&gt; LayoutTests/platform/chromium/test_expectations.txt:3442:  More specific entry on line 3442 overrides line 3133 fast/overflow/unreachable-overflow-rtl-bug.html  [test/expectations] [5]
&gt; Total errors found: 1 in 41 files
&gt; 
&gt; 
&gt; If any of these errors are false positives, please file a bug against check-webkit-style.

False positive. Existing style bug in that file, or bug in check-webkit-style?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>569628</commentid>
    <comment_count>45</comment_count>
      <attachid>129887</attachid>
    <who name="Kenneth Rohde Christiansen">kenneth</who>
    <bug_when>2012-03-02 06:40:23 -0800</bug_when>
    <thetext>Comment on attachment 129887
Patch

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

as I have seen this code and commented already in real life, it would be nice if someone else could do the actual review, anyway here are a few nits from skimming it.

&gt; LayoutTests/touchadjustment/event-triggered-widgets.html:34
&gt; +        var x = pos.left + element.clientWidth/2 - 1;
&gt; +        var y = pos.top + element.clientHeight/2 - 1;

Does our coding style apply to JS? if so then spaces around /

&gt; LayoutTests/touchadjustment/event-triggered-widgets.html:82
&gt; +        testTouchHit(&apos;test1&apos;,testDirectTouch);

space after ,

&gt; LayoutTests/touchadjustment/touch-inlines.html:61
&gt; +        shouldBeEqualToString(&apos;adjustedNode.id&apos;, &apos;&apos;);
&gt; +
&gt; +    }

unneeded newlines

&gt; Source/WebCore/page/EventHandler.cpp:2398
&gt; +        // For now we use the adjusted position to ensure the later redundant hit-tests hits the right node.

FIXME?

&gt; Source/WebCore/platform/graphics/IntRect.cpp:135
&gt;  
&gt; +static inline int distanceToInterval(int pos, int start, int end)

Would be great for Darin Adler or Hyatt to look at these IntRect additions

&gt; Source/WebCore/rendering/RenderObject.cpp:2665
&gt; +    // We will not render a new image when Active DOM is suspended

nit, dot at end

&gt; Source/WebCore/testing/Internals.cpp:566
&gt; +PassRefPtr&lt;WebKitPoint&gt; Internals::touchPositionAdjustedToBestClickableNode(long x, long y, long w, long h, Document* document, ExceptionCode&amp; ec)

I think it would be more webkit like to use width instead of w

&gt; Source/WebCore/testing/Internals.h:113
&gt; +    PassRefPtr&lt;WebKitPoint&gt; touchPositionAdjustedToBestClickableNode(long x, long y, long w, long h, Document*, ExceptionCode&amp;);

I find this &quot;best clickable node&quot; weird. What is a best clickable node?

&gt; Source/WebKit2/UIProcess/WebPageProxy.h:388
&gt; +    void handlePotentialActivation(const WebCore::IntPoint&amp;, const WebCore::IntSize&amp;);

Maybe it is not so obvious what the arguments represent?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>569646</commentid>
    <comment_count>46</comment_count>
      <attachid>129887</attachid>
    <who name="Allan Sandfeld Jensen">allan.jensen</who>
    <bug_when>2012-03-02 07:38:46 -0800</bug_when>
    <thetext>Comment on attachment 129887
Patch

Unrelated change in patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>569650</commentid>
    <comment_count>47</comment_count>
    <who name="Allan Sandfeld Jensen">allan.jensen</who>
    <bug_when>2012-03-02 07:41:52 -0800</bug_when>
    <thetext>(In reply to comment #45)
&gt; &gt; Source/WebCore/rendering/RenderObject.cpp:2665
&gt; &gt; +    // We will not render a new image when Active DOM is suspended
&gt; 
&gt; nit, dot at end
&gt; 
How did that get in there? This is a change from a completely different patch. It shouldn&apos;t be here at all.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>572820</commentid>
    <comment_count>48</comment_count>
    <who name="Allan Sandfeld Jensen">allan.jensen</who>
    <bug_when>2012-03-07 05:28:00 -0800</bug_when>
    <thetext>(In reply to comment #45)
&gt; (From update of attachment 129887 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=129887&amp;action=review
&gt; 
&gt; &gt; LayoutTests/touchadjustment/event-triggered-widgets.html:34
&gt; &gt; +        var x = pos.left + element.clientWidth/2 - 1;
&gt; &gt; +        var y = pos.top + element.clientHeight/2 - 1;
&gt; 
&gt; Does our coding style apply to JS? if so then spaces around /
&gt; 
I don&apos;t think so, but I can clean it up.

&gt; 
&gt; &gt; Source/WebCore/page/EventHandler.cpp:2398
&gt; &gt; +        // For now we use the adjusted position to ensure the later redundant hit-tests hits the right node.
&gt; 
&gt; FIXME?
&gt; 
I believe that follows a FIXME, and just explains what we do until that FIXME is resolved.

&gt; &gt; Source/WebCore/testing/Internals.cpp:566
&gt; &gt; +PassRefPtr&lt;WebKitPoint&gt; Internals::touchPositionAdjustedToBestClickableNode(long x, long y, long w, long h, Document* document, ExceptionCode&amp; ec)
&gt; 
&gt; I think it would be more webkit like to use width instead of w
&gt; 
True, but the same file already had other APIs where they used these very short names, so I tried to follow the local coding-style. I can take a look again and at least make the new functions follow webkit coding style closer.

&gt; &gt; Source/WebCore/testing/Internals.h:113
&gt; &gt; +    PassRefPtr&lt;WebKitPoint&gt; touchPositionAdjustedToBestClickableNode(long x, long y, long w, long h, Document*, ExceptionCode&amp;);
&gt; 
&gt; I find this &quot;best clickable node&quot; weird. What is a best clickable node?
&gt; 
It is intentionally vague, because it really represent the node that has is computed to be the &apos;best&apos; according to an unspecified metric. Currently it is distance to central-line, but it could be anything.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>572866</commentid>
    <comment_count>49</comment_count>
      <attachid>130620</attachid>
    <who name="Allan Sandfeld Jensen">allan.jensen</who>
    <bug_when>2012-03-07 07:10:56 -0800</bug_when>
    <thetext>Created attachment 130620
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>572872</commentid>
    <comment_count>50</comment_count>
      <attachid>130620</attachid>
    <who name="Kenneth Rohde Christiansen">kenneth</who>
    <bug_when>2012-03-07 07:17:46 -0800</bug_when>
    <thetext>Comment on attachment 130620
Patch

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

I would like Darin Adler or Hyatt to have a look at the *Rect additions.

&gt; Source/WebCore/platform/graphics/FloatRect.cpp:167
&gt; +FloatSize FloatRect::differenceFromCenterLineToPoint(const FloatPoint&amp; point) const
&gt; +{

These methods seems rather specialized and I am not sure they are generally useful for FloatRects. Maybe they should be free functions instead?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>573179</commentid>
    <comment_count>51</comment_count>
      <attachid>130620</attachid>
    <who name="Simon Hausmann">hausmann</who>
    <bug_when>2012-03-07 13:32:46 -0800</bug_when>
    <thetext>Comment on attachment 130620
Patch

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

In general I really like this patch. I have a couple of nitpicks and questions :)

&gt; Source/WebCore/page/TouchAdjustment.cpp:42
&gt; +    HitTestQuad(Node* node, const FloatQuad&amp; quad) : m_node(node), m_quad(quad) { }

Style nitpick: Initialized members should be on separate lines.

&gt; Source/WebCore/page/TouchAdjustment.cpp:204
&gt; +bool findNodeWithHighestMetric(Node*&amp; targetNode, LayoutPoint&amp; targetPoint, const LayoutPoint&amp; touchHotspot, const LayoutRect&amp; touchArea, HitList&amp; hitlist, Metric metric)

Even though this is complete, it seems like this is an unused function. IMHO we shouldn&apos;t add dead code.

&gt; Source/WebCore/platform/graphics/FloatPoint.h:80
&gt; +    explicit FloatPoint(FloatSize size) : m_x(size.width()), m_y(size.height()) { }

This doesn&apos;t seem like a natural constructor to me. I think it&apos;s better to have it clearer on the caller side that you intend to convert the width and height of the size to a point, because on the caller side the context/reason may be clearer and easier to understand. Where do you call this constructor, btw?

&gt; Source/WebCore/platform/graphics/FloatPoint.h:143
&gt; +    float distanceSquaredToPoint(const FloatPoint&amp;) const;

Is there any particular reason that these functions have their definitions outside of the class declaration, and for example expandedTo below has it right inside?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>573217</commentid>
    <comment_count>52</comment_count>
    <who name="Antonio Gomes">tonikitoo</who>
    <bug_when>2012-03-07 14:01:38 -0800</bug_when>
    <thetext>
&gt; &gt; Source/WebCore/platform/graphics/FloatPoint.h:80
&gt; &gt; +    explicit FloatPoint(FloatSize size) : m_x(size.width()), m_y(size.height()) { }
&gt; 
&gt; This doesn&apos;t seem like a natural constructor to me. I think it&apos;s better to have it clearer on the caller side that you intend to convert the width and height of the size to a point, because on the caller side the context/reason may be clearer and easier to understand. Where do you call this constructor, btw?

there is even a toSize method in FloatPoint, iirc.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>573294</commentid>
    <comment_count>53</comment_count>
    <who name="Allan Sandfeld Jensen">allan.jensen</who>
    <bug_when>2012-03-07 15:20:50 -0800</bug_when>
    <thetext>(In reply to comment #51)
&gt; (From update of attachment 130620 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=130620&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/page/TouchAdjustment.cpp:204
&gt; &gt; +bool findNodeWithHighestMetric(Node*&amp; targetNode, LayoutPoint&amp; targetPoint, const LayoutPoint&amp; touchHotspot, const LayoutRect&amp; touchArea, HitList&amp; hitlist, Metric metric)
&gt; 
&gt; Even though this is complete, it seems like this is an unused function. IMHO we shouldn&apos;t add dead code.
&gt; 
Good point. It is intended for later use, but is currently dead. The rest of its siblings has already been removed as well.

&gt; &gt; Source/WebCore/platform/graphics/FloatPoint.h:80
&gt; &gt; +    explicit FloatPoint(FloatSize size) : m_x(size.width()), m_y(size.height()) { }
&gt; 
&gt; This doesn&apos;t seem like a natural constructor to me. I think it&apos;s better to have it clearer on the caller side that you intend to convert the width and height of the size to a point, because on the caller side the context/reason may be clearer and easier to understand. Where do you call this constructor, btw?

It was added because IntPoint had a similar constructor from IntSize. The real issue is that mathematical vectors are in WebKit sometimes represented using *Size classes, and sometimes using *Point classes. This constructor essentially takes a FloatVector in FloatSize form and converts it to a FloatVector in FloatPoint form (I have an experimental patch that introduces the vector classes to clarify this, but it is a huge change). 

&gt; 
&gt; &gt; Source/WebCore/platform/graphics/FloatPoint.h:143
&gt; &gt; +    float distanceSquaredToPoint(const FloatPoint&amp;) const;
&gt; 
&gt; Is there any particular reason that these functions have their definitions outside of the class declaration, and for example expandedTo below has it right inside?

Yes, it uses the inline operators that are declared after the class, so it implementation needs to be after the declaration of the inline operators.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>573300</commentid>
    <comment_count>54</comment_count>
    <who name="Allan Sandfeld Jensen">allan.jensen</who>
    <bug_when>2012-03-07 15:24:52 -0800</bug_when>
    <thetext>(In reply to comment #52)
&gt; &gt; &gt; Source/WebCore/platform/graphics/FloatPoint.h:80
&gt; &gt; &gt; +    explicit FloatPoint(FloatSize size) : m_x(size.width()), m_y(size.height()) { }
&gt; &gt; 
&gt; &gt; This doesn&apos;t seem like a natural constructor to me. I think it&apos;s better to have it clearer on the caller side that you intend to convert the width and height of the size to a point, because on the caller side the context/reason may be clearer and easier to understand. Where do you call this constructor, btw?
&gt; 
&gt; there is even a toSize method in FloatPoint, iirc.

But there is no toPoint() metod in FloatSize, and there can not one be since FloatPoint.h includes FloatSize.h, which means FloatSize.h can not include FloatPoint.h. So only FloatPoint.h can implement FloatSize -&gt; FloatPoint functions.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>574832</commentid>
    <comment_count>55</comment_count>
      <attachid>131032</attachid>
    <who name="Allan Sandfeld Jensen">allan.jensen</who>
    <bug_when>2012-03-09 05:19:59 -0800</bug_when>
    <thetext>Created attachment 131032
Patch

Style changes, switched to consistently use Int types for touch points and removed dead functions only included for completeness.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>574835</commentid>
    <comment_count>56</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-03-09 05:22:37 -0800</bug_when>
    <thetext>Attachment 131032 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;LayoutTests/ChangeLog&apos;, u&apos;LayoutTests/plat...&quot; exit_code: 1
Source/WebKit2/WebProcess/WebPage/WebPage.h:566:  The parameter name &quot;point&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Total errors found: 1 in 37 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>574842</commentid>
    <comment_count>57</comment_count>
      <attachid>131034</attachid>
    <who name="Allan Sandfeld Jensen">allan.jensen</who>
    <bug_when>2012-03-09 05:46:44 -0800</bug_when>
    <thetext>Created attachment 131034
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>574846</commentid>
    <comment_count>58</comment_count>
      <attachid>131032</attachid>
    <who name="Kenneth Rohde Christiansen">kenneth</who>
    <bug_when>2012-03-09 05:53:15 -0800</bug_when>
    <thetext>Comment on attachment 131032
Patch

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

&gt; LayoutTests/touchadjustment/html-label-expected.txt:6
&gt; +
&gt; +
&gt; +
&gt; +Tests if labels are treated as clickable if the input they control is.

why all these newlines in the tests?

&gt; Source/WebCore/page/TouchAdjustment.cpp:40
&gt; +class HitTestQuad {

I find these names confusing, why not just make a QuadNodeMap ? It would make the code easier to understand. This is more like a QuadForHitTest

&gt; Source/WebCore/page/TouchAdjustment.cpp:167
&gt; +float distanceToHitTestQuad(const IntPoint&amp; touchHotspot, const IntRect&amp;, const HitTestQuad&amp; hitTestQuad)

why not be specific? distanceSquaredToQuadBoundingBoxCenterLine() ?

&gt; Source/WebCore/page/TouchAdjustment.cpp:170
&gt; +    // but calculating the distance to quads can be very expensive, and we do not want to calculcate

calculate*</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>576136</commentid>
    <comment_count>59</comment_count>
    <who name="Allan Sandfeld Jensen">allan.jensen</who>
    <bug_when>2012-03-12 08:28:29 -0700</bug_when>
    <thetext>(In reply to comment #58)
&gt; (From update of attachment 131032 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=131032&amp;action=review
&gt; 
&gt; &gt; LayoutTests/touchadjustment/html-label-expected.txt:6
&gt; &gt; +
&gt; &gt; +
&gt; &gt; +
&gt; &gt; +Tests if labels are treated as clickable if the input they control is.
&gt; 
&gt; why all these newlines in the tests?
&gt; 
It is to avoid the hit testing hitting the two control elements below the test that needs to be there, &apos;description&apos; and &apos;console&apos;. It is a very crude space, but it keeps the tests simple without also making them all depend on absolute position for instance.

&gt; &gt; Source/WebCore/page/TouchAdjustment.cpp:40
&gt; &gt; +class HitTestQuad {
&gt; 
&gt; I find these names confusing, why not just make a QuadNodeMap ? It would make the code easier to understand. This is more like a QuadForHitTest
&gt; 
A believe a Vector is faster than a Map, when we don&apos;t need the Map functionality. I use a special class because I find named parameters more  readable than using a pair template. I admit the name is not optimal so I will rename it QuadForHitTest.

&gt; &gt; Source/WebCore/page/TouchAdjustment.cpp:167
&gt; &gt; +float distanceToHitTestQuad(const IntPoint&amp; touchHotspot, const IntRect&amp;, const HitTestQuad&amp; hitTestQuad)
&gt; 
&gt; why not be specific? distanceSquaredToQuadBoundingBoxCenterLine() ?
&gt; 
Sure. I am will rename the function to something more specific.

&gt; &gt; Source/WebCore/page/TouchAdjustment.cpp:170
&gt; &gt; +    // but calculating the distance to quads can be very expensive, and we do not want to calculcate
&gt; 
&gt; calculate*

I will tell the team here to add a spell-checking to QtCreator.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>576173</commentid>
    <comment_count>60</comment_count>
      <attachid>131334</attachid>
    <who name="Allan Sandfeld Jensen">allan.jensen</who>
    <bug_when>2012-03-12 09:22:12 -0700</bug_when>
    <thetext>Created attachment 131334
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>579416</commentid>
    <comment_count>61</comment_count>
      <attachid>131334</attachid>
    <who name="Antonio Gomes">tonikitoo</who>
    <bug_when>2012-03-15 08:56:24 -0700</bug_when>
    <thetext>Comment on attachment 131334
Patch

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

It looks generally good to me. A few comments and we are good to go. I would like see a final version with better name, then the r-. Logic seems fine.

Mainly, the term &apos;HitTest&apos; spread around in many methods does not read well to me all the time. Same with &quot;Quad&quot;.

&gt; Source/WebCore/page/EventHandler.cpp:2449
&gt; +    IntRect touchRect(touchCenter - touchRadius, IntSize(touchRadius.width() * 2, touchRadius.height() * 2));
&gt; +    targetNode = 0;
&gt; +
&gt; +    HitTestResult result = hitTestResultAtPoint(touchCenter, /*allowShadowContent*/ false, /*ignoreClipping*/ false, DontHitTestScrollbars, hitType, touchRadius);

Are sure you do not want to move this line down below to &quot;HitTestResult result = ...&quot; line, and use HitTestResult::rectForPoint(const LayoutPoint&amp; point)?

Also note a &quot;1px&quot; difference in your calculation that I explained in this method body.

&gt; Source/WebCore/page/TouchAdjustment.cpp:41
&gt; +class QuadForHitTest {

rename it as per kenneth suggestion. Maybe something like TouchTargetGeometry or something like this?

&gt; Source/WebCore/page/TouchAdjustment.cpp:117
&gt; +    const unsigned int length = intersectedNodes.length();

&apos;unsigned&apos; would be enough here.

&gt; Source/WebCore/page/TouchAdjustment.cpp:173
&gt; +float distanceSquaredToQuadCenterLine(const IntPoint&amp; touchHotspot, const IntRect&amp;, const QuadForHitTest&amp; quadForHitTest)

remove the unused parameter or name it and add PARAM_UNUSED(xxx) with a comment about any follow up action.

&gt; Source/WebCore/page/TouchAdjustment.cpp:186
&gt; +bool findNodeWithLowestMetric(Node*&amp; targetNode, IntPoint&amp; targetPoint, const IntPoint&amp; touchHotspot, const IntRect&amp; touchArea, QuadNodeList&amp; hitTestList, Metric metric)

Even with the comment I still found &apos;metrics&apos; is not the best word here.  No better suggestion though.

&gt; Source/WebCore/testing/Internals.cpp:584
&gt; +    document-&gt;frame()-&gt;eventHandler()-&gt;bestClickableNodeForTouchPoint(point, radius, adjustedPoint, targetNode);
&gt; +
&gt; +    return WebKitPoint::create(adjustedPoint.x(), adjustedPoint.y());

I would remove the blank line here

&gt; Source/WebCore/testing/Internals.cpp:602
&gt; +    document-&gt;frame()-&gt;eventHandler()-&gt;bestClickableNodeForTouchPoint(point, radius, adjustedPoint, targetNode);
&gt; +
&gt; +    return adoptRef(targetNode);

ditto

&gt; LayoutTests/touchadjustment/nested-touch.html:37
&gt; +    function findAbsolutePosition(node) {

I am sure there a helper for it. Could you be sure we are not duplicating.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>581735</commentid>
    <comment_count>62</comment_count>
    <who name="Allan Sandfeld Jensen">allan.jensen</who>
    <bug_when>2012-03-19 04:01:06 -0700</bug_when>
    <thetext>(In reply to comment #61)
&gt; (From update of attachment 131334 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=131334&amp;action=review
&gt; 
&gt; It looks generally good to me. A few comments and we are good to go. I would like see a final version with better name, then the r-. Logic seems fine.
&gt; 
&gt; Mainly, the term &apos;HitTest&apos; spread around in many methods does not read well to me all the time. Same with &quot;Quad&quot;.
&gt; 
Okay.

&gt; &gt; Source/WebCore/page/EventHandler.cpp:2449
&gt; &gt; +    IntRect touchRect(touchCenter - touchRadius, IntSize(touchRadius.width() * 2, touchRadius.height() * 2));
&gt; &gt; +    targetNode = 0;
&gt; &gt; +
&gt; &gt; +    HitTestResult result = hitTestResultAtPoint(touchCenter, /*allowShadowContent*/ false, /*ignoreClipping*/ false, DontHitTestScrollbars, hitType, touchRadius);
&gt; 
&gt; Are sure you do not want to move this line down below to &quot;HitTestResult result = ...&quot; line, and use HitTestResult::rectForPoint(const LayoutPoint&amp; point)?
&gt; 
&gt; Also note a &quot;1px&quot; difference in your calculation that I explained in this method body.
&gt; 
In general I want to avoid rectForPoint, because it is used by Render-code, and is generally wrong (it doesn&apos;t account for transformations). So right now it is good to grep for and everywhere that uses it has buggy rect-based hit-testing. I hope at some point to get rid of it, so I don&apos;t want to use it.

&gt; &gt; Source/WebCore/page/TouchAdjustment.cpp:41
&gt; &gt; +class QuadForHitTest {
&gt; 
&gt; rename it as per kenneth suggestion. Maybe something like TouchTargetGeometry or something like this?
&gt; 
This was renamed by kenneth suggestion, but sure. It is actually a struct of sub-target areas (absolute-quads) and their corresponding target nodes, but that would probably be a bit too long name.

&gt; &gt; Source/WebCore/page/TouchAdjustment.cpp:117
&gt; &gt; +    const unsigned int length = intersectedNodes.length();
&gt; 
&gt; &apos;unsigned&apos; would be enough here.
&gt; 
Is that really the webcore coding style? Implicit &apos;int&apos; is really old deprecated C style.

&gt; &gt; Source/WebCore/page/TouchAdjustment.cpp:173
&gt; &gt; +float distanceSquaredToQuadCenterLine(const IntPoint&amp; touchHotspot, const IntRect&amp;, const QuadForHitTest&amp; quadForHitTest)
&gt; 
&gt; remove the unused parameter or name it and add PARAM_UNUSED(xxx) with a comment about any follow up action.
&gt; 
Of course.

&gt; &gt; Source/WebCore/page/TouchAdjustment.cpp:186
&gt; &gt; +bool findNodeWithLowestMetric(Node*&amp; targetNode, IntPoint&amp; targetPoint, const IntPoint&amp; touchHotspot, const IntRect&amp; touchArea, QuadNodeList&amp; hitTestList, Metric metric)
&gt; 
&gt; Even with the comment I still found &apos;metrics&apos; is not the best word here.  No better suggestion though.
&gt; 
Metric is math term for ways to calculate distances, but I can see the problem. It is not that well-known a term.

&gt; &gt; Source/WebCore/testing/Internals.cpp:584
&gt; &gt; +    document-&gt;frame()-&gt;eventHandler()-&gt;bestClickableNodeForTouchPoint(point, radius, adjustedPoint, targetNode);
&gt; &gt; +
&gt; &gt; +    return WebKitPoint::create(adjustedPoint.x(), adjustedPoint.y());
&gt; 
&gt; I would remove the blank line here
&gt; 
&gt; &gt; Source/WebCore/testing/Internals.cpp:602
&gt; &gt; +    document-&gt;frame()-&gt;eventHandler()-&gt;bestClickableNodeForTouchPoint(point, radius, adjustedPoint, targetNode);
&gt; &gt; +
&gt; &gt; +    return adoptRef(targetNode);
&gt; 
&gt; ditto
&gt; 
Check anc check.

&gt; &gt; LayoutTests/touchadjustment/nested-touch.html:37
&gt; &gt; +    function findAbsolutePosition(node) {
&gt; 
&gt; I am sure there a helper for it. Could you be sure we are not duplicating.

I don&apos;t think there is an official DOM API for it. This is a pretty standard helper function, but do you think there is an internal api for it?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>581747</commentid>
    <comment_count>63</comment_count>
      <attachid>132572</attachid>
    <who name="Allan Sandfeld Jensen">allan.jensen</who>
    <bug_when>2012-03-19 07:05:24 -0700</bug_when>
    <thetext>Created attachment 132572
Patch

Renames, coding style and code clean-up in central algorithm.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>581825</commentid>
    <comment_count>64</comment_count>
      <attachid>132572</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-03-19 08:33:43 -0700</bug_when>
    <thetext>Comment on attachment 132572
Patch

Clearing flags on attachment: 132572

Committed r111185: &lt;http://trac.webkit.org/changeset/111185&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>581826</commentid>
    <comment_count>65</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-03-19 08:33:53 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>581907</commentid>
    <comment_count>66</comment_count>
    <who name="Csaba Osztrogonác">ossy</who>
    <bug_when>2012-03-19 10:23:43 -0700</bug_when>
    <thetext>Reopen, because it broke the Qt ARM build.
z</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>581917</commentid>
    <comment_count>67</comment_count>
    <who name="Allan Sandfeld Jensen">allan.jensen</who>
    <bug_when>2012-03-19 10:32:04 -0700</bug_when>
    <thetext>(In reply to comment #66)
&gt; Reopen, because it broke the Qt ARM build.
&gt; z

Build should be fixed r111198 

Apparently the Node::renderStyle() was declared inline outside of Node.h.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>581976</commentid>
    <comment_count>68</comment_count>
    <who name="Allan Sandfeld Jensen">allan.jensen</who>
    <bug_when>2012-03-19 11:30:29 -0700</bug_when>
    <thetext>Build-bot for ARM green again.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>127359</attachid>
            <date>2012-02-16 05:28:26 -0800</date>
            <delta_ts>2012-02-16 05:53:01 -0800</delta_ts>
            <desc>Math patch</desc>
            <filename>Patch</filename>
            <type>text/plain</type>
            <size>11130</size>
            <attacher name="Allan Sandfeld Jensen">allan.jensen</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCAwZTI0NWU5Li42NTFjMDA2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNDIg
QEAKKzIwMTItMDItMTYgIEFsbGFuIFNhbmRmZWxkIEplbnNlbiAgPGFsbGFuLmplbnNlbkBub2tp
YS5jb20+CisKKyAgICAgICAgSW1wbGVtZW50IGEgY29uc2lzdGVudCBzZXQgb2YgZGlzdGFuY2Ug
YW5kIGFyZWEgZnVuY3Rpb25zIGZvciBSZWN0LCBQb2ludCBhbmQgU2l6ZSBjbGFzc2VzLgorCisg
ICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorICAgICAgICAKKyAgICAgICAgQWxz
byBhZGRlZCBkaXN0YW5jZSBmdW5jdGlvbnMgZm9yIHJlY3RhbmdsZSBjZW50ZXItbGluZXMuIEZv
ciBsaW5lLXJlY3RzIHRoZSBkaXN0YW5jZSB0byB0aGUgY2VudGVyLWxpbmUgaXMKKyAgICAgICAg
YSBiZXR0ZXIgZXhwcmVzc2lvbiBvZiB0aGUgZGlzdGFuY2UgdG8gYSByZWN0YW5nbGVzIGNlbnRl
ciB0aGFuIHRoZSBkaXN0YW5jZSB0byB0aGUgY2VudGVyLXBvaW50LgorICAgICAgICAKKyAgICAg
ICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9GbG9hdFBvaW50Lmg6CisgICAgICAgIChXZWJDb3JlOjpG
bG9hdFBvaW50OjpGbG9hdFBvaW50KToKKyAgICAgICAgKFdlYkNvcmU6OkZsb2F0UG9pbnQ6OmRp
c3RhbmNlVG9Qb2ludCk6CisgICAgICAgIChXZWJDb3JlOjpGbG9hdFBvaW50OjpkaXN0YW5jZVNx
dWFyZWRUb1BvaW50KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9GbG9hdFF1YWQuaDoK
KyAgICAgICAgKFdlYkNvcmU6OkZsb2F0UXVhZDo6Y2VudGVyKToKKyAgICAgICAgKiBwbGF0Zm9y
bS9ncmFwaGljcy9GbG9hdFJlY3QuY3BwOgorICAgICAgICAoV2ViQ29yZTo6ZGlzdGFuY2VUb0lu
dGVydmFsKToKKyAgICAgICAgKFdlYkNvcmU6OkZsb2F0UmVjdDo6ZGlmZmVyZW5jZVRvUG9pbnQp
OgorICAgICAgICAoV2ViQ29yZTo6RmxvYXRSZWN0OjpkaXN0YW5jZVRvUG9pbnQpOgorICAgICAg
ICAoV2ViQ29yZTo6RmxvYXRSZWN0OjpkaWZmZXJlbmNlRnJvbUNlbnRlckxpbmVUb1BvaW50KToK
KyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9GbG9hdFJlY3QuaDoKKyAgICAgICAgKFdlYkNv
cmU6OkZsb2F0UmVjdDo6ZGlzdGFuY2VTcXVhcmVkVG9Qb2ludCk6CisgICAgICAgIChXZWJDb3Jl
OjpGbG9hdFJlY3Q6OmRpc3RhbmNlU3F1YXJlZEZyb21DZW50ZXJMaW5lVG9Qb2ludCk6CisgICAg
ICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvRmxvYXRTaXplLmg6CisgICAgICAgIChXZWJDb3JlOjpG
bG9hdFNpemU6OmFyZWEpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0ludFBvaW50Lmg6
CisgICAgICAgIChXZWJDb3JlOjpJbnRQb2ludDo6bGVuZ3RoU3F1YXJlZCk6CisgICAgICAgIChX
ZWJDb3JlOjpJbnRQb2ludDo6ZGlzdGFuY2VTcXVhcmVkVG9Qb2ludCk6CisgICAgICAgICogcGxh
dGZvcm0vZ3JhcGhpY3MvSW50UmVjdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpkaXN0YW5jZVRv
SW50ZXJ2YWwpOgorICAgICAgICAoV2ViQ29yZTo6SW50UmVjdDo6ZGlmZmVyZW5jZVRvUG9pbnQp
OgorICAgICAgICAoV2ViQ29yZTo6SW50UmVjdDo6ZGlmZmVyZW5jZUZyb21DZW50ZXJMaW5lVG9Q
b2ludCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvSW50UmVjdC5oOgorICAgICAgICAo
V2ViQ29yZTo6SW50UmVjdDo6ZGlzdGFuY2VTcXVhcmVkVG9Qb2ludCk6CisgICAgICAgIChXZWJD
b3JlOjpJbnRSZWN0OjpkaXN0YW5jZVNxdWFyZWRGcm9tQ2VudGVyTGluZVRvUG9pbnQpOgorICAg
ICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0ludFNpemUuaDoKKyAgICAgICAgKFdlYkNvcmU6Oklu
dFNpemU6OmFyZWEpOgorICAgICAgICAoV2ViQ29yZTo6SW50U2l6ZTo6ZGlhZ29uYWxMZW5ndGhT
cXVhcmVkKToKKwogMjAxMi0wMi0xNiAgU2ltb24gSGF1c21hbm4gIDxzaW1vbi5oYXVzbWFubkBu
b2tpYS5jb20+CiAKICAgICAgICAgQnVpbGQgZml4IGZvciBRdCA1IHdpdGhvdXQgUXRXaWRnZXRz
LgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRmxvYXRQb2lu
dC5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRmxvYXRQb2ludC5oCmluZGV4
IGJmOTAxZTUuLjMxMDdmMDIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL0Zsb2F0UG9pbnQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9GbG9hdFBvaW50LmgKQEAgLTY5LDYgKzY5LDcgQEAgcHVibGljOgogICAgIEZsb2F0UG9pbnQo
ZmxvYXQgeCwgZmxvYXQgeSkgOiBtX3goeCksIG1feSh5KSB7IH0KICAgICBGbG9hdFBvaW50KGNv
bnN0IEludFBvaW50Jik7CiAgICAgRmxvYXRQb2ludChjb25zdCBGcmFjdGlvbmFsTGF5b3V0UG9p
bnQmKTsKKyAgICBleHBsaWNpdCBGbG9hdFBvaW50KEZsb2F0U2l6ZSBzaXplKSA6IG1feChzaXpl
LndpZHRoKCkpLCBtX3koc2l6ZS5oZWlnaHQoKSkgeyB9CiAKICAgICBzdGF0aWMgRmxvYXRQb2lu
dCB6ZXJvKCkgeyByZXR1cm4gRmxvYXRQb2ludCgpOyB9CiAKQEAgLTEzMCw2ICsxMzEsOSBAQCBw
dWJsaWM6CiAgICAgICAgIHJldHVybiBtX3ggKiBtX3ggKyBtX3kgKiBtX3k7CiAgICAgfQogCisg
ICAgZmxvYXQgZGlzdGFuY2VUb1BvaW50KGNvbnN0IEZsb2F0UG9pbnQmIHApIGNvbnN0OworICAg
IGZsb2F0IGRpc3RhbmNlU3F1YXJlZFRvUG9pbnQoY29uc3QgRmxvYXRQb2ludCYgcCkgY29uc3Q7
CisKICAgICBGbG9hdFBvaW50IGV4cGFuZGVkVG8oY29uc3QgRmxvYXRQb2ludCYgb3RoZXIpIGNv
bnN0CiAgICAgewogICAgICAgICByZXR1cm4gRmxvYXRQb2ludChzdGQ6Om1heChtX3gsIG90aGVy
Lm1feCksIHN0ZDo6bWF4KG1feSwgb3RoZXIubV95KSk7CkBAIC0yMzksNiArMjQzLDE3IEBAIGlu
bGluZSBmbG9hdCBvcGVyYXRvciooY29uc3QgRmxvYXRQb2ludCYgYSwgY29uc3QgRmxvYXRQb2lu
dCYgYikKICAgICByZXR1cm4gYS5kb3QoYik7CiB9CiAKK2lubGluZSBmbG9hdCBGbG9hdFBvaW50
OjpkaXN0YW5jZVRvUG9pbnQoY29uc3QgRmxvYXRQb2ludCYgcCkgY29uc3QKK3sKKyAgICByZXR1
cm4gKCp0aGlzIC0gcCkuZGlhZ29uYWxMZW5ndGgoKTsKK30KKworaW5saW5lIGZsb2F0IEZsb2F0
UG9pbnQ6OmRpc3RhbmNlU3F1YXJlZFRvUG9pbnQoY29uc3QgRmxvYXRQb2ludCYgcCkgY29uc3QK
K3sKKyAgICByZXR1cm4gKCp0aGlzIC0gcCkuZGlhZ29uYWxMZW5ndGhTcXVhcmVkKCk7Cit9CisK
KwogaW5saW5lIEludFBvaW50IHJvdW5kZWRJbnRQb2ludChjb25zdCBGbG9hdFBvaW50JiBwKQog
ewogICAgIHJldHVybiBJbnRQb2ludChzdGF0aWNfY2FzdDxpbnQ+KHJvdW5kZihwLngoKSkpLCBz
dGF0aWNfY2FzdDxpbnQ+KHJvdW5kZihwLnkoKSkpKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL0Zsb2F0UXVhZC5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvRmxvYXRRdWFkLmgKaW5kZXggYjVlMmE4Yy4uMzdhYjc4YyAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRmxvYXRRdWFkLmgKKysrIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRmxvYXRRdWFkLmgKQEAgLTg4LDYgKzg4LDkg
QEAgcHVibGljOgogICAgIC8vIGZyb20gdHJhbnNmb3JtZWQgcmVjdHMuCiAgICAgYm9vbCBjb250
YWluc1F1YWQoY29uc3QgRmxvYXRRdWFkJikgY29uc3Q7CiAKKyAgICAvLyBUaGUgY2VudGVyIG9m
IHRoZSBxdWFkLiBJZiB0aGUgcXVhZCBpcyB0aGUgcmVzdWx0IG9mIGEgYWZmaW5lLXRyYW5zZm9y
bWVkIHJlY3RhbmdsZSB0aGlzIGlzIHRoZSBzYW1lIGFzIHRoZSBvcmlnaW5hbCBjZW50ZXIgdHJh
bnNmb3JtZWQuCisgICAgRmxvYXRQb2ludCBjZW50ZXIoKSBjb25zdCB7IHJldHVybiBGbG9hdFBv
aW50KChtX3AxLngoKSttX3AyLngoKSttX3AzLngoKSttX3A0LngoKSkvNC4sIChtX3AxLnkoKStt
X3AyLnkoKSttX3AzLnkoKSttX3A0LnkoKSkvNC4pOyB9CisKICAgICBGbG9hdFJlY3QgYm91bmRp
bmdCb3goKSBjb25zdDsKICAgICBJbnRSZWN0IGVuY2xvc2luZ0JvdW5kaW5nQm94KCkgY29uc3QK
ICAgICB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9GbG9h
dFJlY3QuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRmxvYXRSZWN0LmNw
cAppbmRleCA3Mzc0NzNjLi45MDljMTg1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9GbG9hdFJlY3QuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL0Zsb2F0UmVjdC5jcHAKQEAgLTE0Miw2ICsxNDIsNDAgQEAgdm9pZCBGbG9hdFJl
Y3Q6OnNjYWxlKGZsb2F0IHN4LCBmbG9hdCBzeSkKICAgICBtX3NpemUuc2V0SGVpZ2h0KGhlaWdo
dCgpICogc3kpOwogfQogCitzdGF0aWMgaW5saW5lIGZsb2F0IGRpc3RhbmNlVG9JbnRlcnZhbChm
bG9hdCBwb3MsIGZsb2F0IHN0YXJ0LCBmbG9hdCBlbmQpCit7CisgICAgaWYgKHBvcyA8IHN0YXJ0
KQorICAgICAgICByZXR1cm4gc3RhcnQgLSBwb3M7CisgICAgaWYgKHBvcyA+IGVuZCkKKyAgICAg
ICAgcmV0dXJuIGVuZCAtIHBvczsKKyAgICByZXR1cm4gMDsKK30KKworRmxvYXRTaXplIEZsb2F0
UmVjdDo6ZGlmZmVyZW5jZVRvUG9pbnQoY29uc3QgRmxvYXRQb2ludCYgcG9pbnQpIGNvbnN0Cit7
CisgICAgZmxvYXQgeGRpc3RhbmNlID0gZGlzdGFuY2VUb0ludGVydmFsKHBvaW50LngoKSwgeCgp
LCBtYXhYKCkpOworICAgIGZsb2F0IHlkaXN0YW5jZSA9IGRpc3RhbmNlVG9JbnRlcnZhbChwb2lu
dC55KCksIHkoKSwgbWF4WSgpKTsKKyAgICByZXR1cm4gRmxvYXRTaXplKHhkaXN0YW5jZSwgeWRp
c3RhbmNlKTsKK30KKworZmxvYXQgRmxvYXRSZWN0OjpkaXN0YW5jZVRvUG9pbnQoY29uc3QgRmxv
YXRQb2ludCYgcCkgY29uc3QKK3sKKyAgICByZXR1cm4gc3FydGYoZGlzdGFuY2VTcXVhcmVkVG9Q
b2ludChwKSk7Cit9CisKK0Zsb2F0U2l6ZSBGbG9hdFJlY3Q6OmRpZmZlcmVuY2VGcm9tQ2VudGVy
TGluZVRvUG9pbnQoY29uc3QgRmxvYXRQb2ludCYgcG9pbnQpIGNvbnN0Cit7CisgICAgLy8gVGhl
IGNlbnRlci1saW5lIGlzIHRoZSBuYXR1cmFsIGNlbnRlciBvZiBhIHJlY3RhbmdsZS4gSXQgaGFz
IGFuIGVxdWFsIGRpc3RhbmNlIHRvIGFsbCBzaWRlcyBvZiB0aGUgcmVjdGFuZ2xlLgorICAgIEZs
b2F0UG9pbnQgY2VudGVyUG9pbnQgPSBjZW50ZXIoKTsKKyAgICBmbG9hdCB4ZGlzdGFuY2UgPSBj
ZW50ZXJQb2ludC54KCkgLSBwb2ludC54KCk7CisgICAgZmxvYXQgeWRpc3RhbmNlID0gY2VudGVy
UG9pbnQueSgpIC0gcG9pbnQueSgpOworICAgIGlmICh3aWR0aCgpID4gaGVpZ2h0KCkpCisgICAg
ICAgIHhkaXN0YW5jZSA9IGRpc3RhbmNlVG9JbnRlcnZhbChwb2ludC54KCksIHgoKSArIChoZWln
aHQoKSAvIDIuMCksIG1heFgoKSAtIChoZWlnaHQoKSAvIDIuMCkpOworICAgIGVsc2UKKyAgICAg
ICAgeWRpc3RhbmNlID0gZGlzdGFuY2VUb0ludGVydmFsKHBvaW50LnkoKSwgeSgpICsgKHdpZHRo
KCkgLyAyLjApLCBtYXhZKCkgLSAod2lkdGgoKSAvIDIuMCkpOworICAgIHJldHVybiBGbG9hdFNp
emUoeGRpc3RhbmNlLCB5ZGlzdGFuY2UpOworfQorCiBGbG9hdFJlY3QgdW5pb25SZWN0KGNvbnN0
IFZlY3RvcjxGbG9hdFJlY3Q+JiByZWN0cykKIHsKICAgICBGbG9hdFJlY3QgcmVzdWx0OwpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRmxvYXRSZWN0LmggYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9GbG9hdFJlY3QuaAppbmRleCA0ZDRlYWRm
Li5mYjYzZTVmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9G
bG9hdFJlY3QuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9GbG9hdFJl
Y3QuaApAQCAtMTc0LDYgKzE3NCwxMiBAQCBwdWJsaWM6CiAgICAgdm9pZCBzY2FsZShmbG9hdCBz
KSB7IHNjYWxlKHMsIHMpOyB9CiAgICAgdm9pZCBzY2FsZShmbG9hdCBzeCwgZmxvYXQgc3kpOwog
CisgICAgRmxvYXRTaXplIGRpZmZlcmVuY2VUb1BvaW50KGNvbnN0IEZsb2F0UG9pbnQmIHApIGNv
bnN0OworICAgIEZsb2F0U2l6ZSBkaWZmZXJlbmNlRnJvbUNlbnRlckxpbmVUb1BvaW50KGNvbnN0
IEZsb2F0UG9pbnQmIHApIGNvbnN0OworICAgIGZsb2F0IGRpc3RhbmNlU3F1YXJlZFRvUG9pbnQo
Y29uc3QgRmxvYXRQb2ludCYgcCkgY29uc3QgeyByZXR1cm4gZGlmZmVyZW5jZVRvUG9pbnQocCku
ZGlhZ29uYWxMZW5ndGhTcXVhcmVkKCk7IH0KKyAgICBmbG9hdCBkaXN0YW5jZVNxdWFyZWRGcm9t
Q2VudGVyTGluZVRvUG9pbnQoY29uc3QgRmxvYXRQb2ludCYgcCkgY29uc3QgeyByZXR1cm4gZGlm
ZmVyZW5jZUZyb21DZW50ZXJMaW5lVG9Qb2ludChwKS5kaWFnb25hbExlbmd0aFNxdWFyZWQoKTsg
fQorICAgIGZsb2F0IGRpc3RhbmNlVG9Qb2ludChjb25zdCBGbG9hdFBvaW50JiBwKSBjb25zdDsK
KwogICAgIEZsb2F0UmVjdCB0cmFuc3Bvc2VkUmVjdCgpIGNvbnN0IHsgcmV0dXJuIEZsb2F0UmVj
dChtX2xvY2F0aW9uLnRyYW5zcG9zZWRQb2ludCgpLCBtX3NpemUudHJhbnNwb3NlZFNpemUoKSk7
IH0KIAogICAgIC8vIFJlLWluaXRpYWxpemVzIHRoaXMgcmVjdGFuZ2xlIHRvIGZpdCB0aGUgc2V0
cyBvZiBwYXNzZWQgcG9pbnRzLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvRmxvYXRTaXplLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9G
bG9hdFNpemUuaAppbmRleCAyYjU1NDUwLi4yODgyZTNlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9GbG9hdFNpemUuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9GbG9hdFNpemUuaApAQCAtOTUsNiArOTUsMTEgQEAgcHVibGljOgog
ICAgICAgICAgICBtX2hlaWdodCA8IG90aGVyLm1faGVpZ2h0ID8gbV9oZWlnaHQgOiBvdGhlci5t
X2hlaWdodCk7CiAgICAgfQogCisgICAgZmxvYXQgYXJlYSgpIGNvbnN0CisgICAgeworICAgICAg
ICByZXR1cm4gbV93aWR0aCAqIG1faGVpZ2h0OworICAgIH0KKwogICAgIGZsb2F0IGRpYWdvbmFs
TGVuZ3RoKCkgY29uc3Q7CiAgICAgZmxvYXQgZGlhZ29uYWxMZW5ndGhTcXVhcmVkKCkgY29uc3QK
ICAgICB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbnRQ
b2ludC5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW50UG9pbnQuaAppbmRl
eCA4ZDdmZDdmLi5jYThmZjUwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9JbnRQb2ludC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L0ludFBvaW50LmgKQEAgLTEwNSw2ICsxMDUsMTMgQEAgcHVibGljOgogICAgICAgICAgICAgbV95
IDwgb3RoZXIubV95ID8gbV95IDogb3RoZXIubV95KTsKICAgICB9CiAKKyAgICBpbnQgbGVuZ3Ro
U3F1YXJlZCgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gbV94ICogbV94ICsgbV95ICog
bV95OworICAgIH0KKworICAgIGludCBkaXN0YW5jZVNxdWFyZWRUb1BvaW50KGNvbnN0IEludFBv
aW50JiBwKSBjb25zdDsKKwogICAgIHZvaWQgY2xhbXBOZWdhdGl2ZVRvWmVybygpCiAgICAgewog
ICAgICAgICAqdGhpcyA9IGV4cGFuZGVkVG8oemVybygpKTsKQEAgLTIxMyw2ICsyMjAsMTEgQEAg
aW5saW5lIEludFNpemUgdG9TaXplKGNvbnN0IEludFBvaW50JiBhKQogICAgIHJldHVybiBJbnRT
aXplKGEueCgpLCBhLnkoKSk7CiB9CiAKK2lubGluZSBpbnQgSW50UG9pbnQ6OmRpc3RhbmNlU3F1
YXJlZFRvUG9pbnQoY29uc3QgSW50UG9pbnQmIHApIGNvbnN0Cit7CisgICAgcmV0dXJuICgoKnRo
aXMpIC0gcCkuZGlhZ29uYWxMZW5ndGhTcXVhcmVkKCk7Cit9CisKICNpZiBQTEFURk9STShRVCkK
IGlubGluZSBRRGF0YVN0cmVhbSYgb3BlcmF0b3I8PChRRGF0YVN0cmVhbSYgc3RyZWFtLCBjb25z
dCBJbnRQb2ludCYgcG9pbnQpCiB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9JbnRSZWN0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L0ludFJlY3QuY3BwCmluZGV4IDAzYzM1ZTguLmRmYTJmOTEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ludFJlY3QuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL0ludFJlY3QuY3BwCkBAIC0xMzIsNiArMTMyLDM1IEBAIHZvaWQg
SW50UmVjdDo6c2NhbGUoZmxvYXQgcykKICAgICBtX3NpemUuc2V0SGVpZ2h0KChpbnQpKGhlaWdo
dCgpICogcykpOwogfQogCitzdGF0aWMgaW5saW5lIGludCBkaXN0YW5jZVRvSW50ZXJ2YWwoaW50
IHBvcywgaW50IHN0YXJ0LCBpbnQgZW5kKQoreworICAgIGlmIChwb3MgPCBzdGFydCkKKyAgICAg
ICAgcmV0dXJuIHN0YXJ0IC0gcG9zOworICAgIGlmIChwb3MgPiBlbmQpCisgICAgICAgIHJldHVy
biBlbmQgLSBwb3M7CisgICAgcmV0dXJuIDA7Cit9CisKK0ludFNpemUgSW50UmVjdDo6ZGlmZmVy
ZW5jZVRvUG9pbnQoY29uc3QgSW50UG9pbnQmIHBvaW50KSBjb25zdAoreworICAgIGludCB4ZGlz
dGFuY2UgPSBkaXN0YW5jZVRvSW50ZXJ2YWwocG9pbnQueCgpLCB4KCksIG1heFgoKSk7CisgICAg
aW50IHlkaXN0YW5jZSA9IGRpc3RhbmNlVG9JbnRlcnZhbChwb2ludC55KCksIHkoKSwgbWF4WSgp
KTsKKyAgICByZXR1cm4gSW50U2l6ZSh4ZGlzdGFuY2UsIHlkaXN0YW5jZSk7Cit9CisKK0ludFNp
emUgSW50UmVjdDo6ZGlmZmVyZW5jZUZyb21DZW50ZXJMaW5lVG9Qb2ludChjb25zdCBJbnRQb2lu
dCYgcG9pbnQpIGNvbnN0Cit7CisgICAgLy8gVGhlIGNlbnRlci1saW5lIGlzIHRoZSBuYXR1cmFs
IGNlbnRlciBvZiBhIHJlY3RhbmdsZS4gSXQgaGFzIGFuIGVxdWFsIGRpc3RhbmNlIHRvIGFsbCBz
aWRlcyBvZiB0aGUgcmVjdGFuZ2xlLgorICAgIEludFBvaW50IGNlbnRlclBvaW50ID0gY2VudGVy
KCk7CisgICAgaW50IHhkaXN0YW5jZSA9IGNlbnRlclBvaW50LngoKSAtIHBvaW50LngoKTsKKyAg
ICBpbnQgeWRpc3RhbmNlID0gY2VudGVyUG9pbnQueSgpIC0gcG9pbnQueSgpOworICAgIGlmICh3
aWR0aCgpID4gaGVpZ2h0KCkpCisgICAgICAgIHhkaXN0YW5jZSA9IGRpc3RhbmNlVG9JbnRlcnZh
bChwb2ludC54KCksIHgoKSArIChoZWlnaHQoKSAvIDIpLCBtYXhYKCkgLSAoaGVpZ2h0KCkgLyAy
KSk7CisgICAgZWxzZQorICAgICAgICB5ZGlzdGFuY2UgPSBkaXN0YW5jZVRvSW50ZXJ2YWwocG9p
bnQueSgpLCB5KCkgKyAod2lkdGgoKSAvIDIpLCBtYXhZKCkgLSAod2lkdGgoKSAvIDIpKTsKKyAg
ICByZXR1cm4gSW50U2l6ZSh4ZGlzdGFuY2UsIHlkaXN0YW5jZSk7Cit9CisKIEludFJlY3QgdW5p
b25SZWN0KGNvbnN0IFZlY3RvcjxJbnRSZWN0PiYgcmVjdHMpCiB7CiAgICAgSW50UmVjdCByZXN1
bHQ7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbnRSZWN0
LmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbnRSZWN0LmgKaW5kZXggM2Vh
ODIyOS4uZTU4YmYwNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvSW50UmVjdC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ludFJl
Y3QuaApAQCAtMTcxLDYgKzE3MSwxMSBAQCBwdWJsaWM6CiAgICAgdm9pZCBpbmZsYXRlKGludCBk
KSB7IGluZmxhdGVYKGQpOyBpbmZsYXRlWShkKTsgfQogICAgIHZvaWQgc2NhbGUoZmxvYXQgcyk7
CiAKKyAgICBJbnRTaXplIGRpZmZlcmVuY2VUb1BvaW50KGNvbnN0IEludFBvaW50JiBwKSBjb25z
dDsKKyAgICBJbnRTaXplIGRpZmZlcmVuY2VGcm9tQ2VudGVyTGluZVRvUG9pbnQoY29uc3QgSW50
UG9pbnQmIHApIGNvbnN0OworICAgIGludCBkaXN0YW5jZVNxdWFyZWRUb1BvaW50KGNvbnN0IElu
dFBvaW50JiBwKSBjb25zdCB7IHJldHVybiBkaWZmZXJlbmNlVG9Qb2ludChwKS5kaWFnb25hbExl
bmd0aFNxdWFyZWQoKTsgfQorICAgIGludCBkaXN0YW5jZVNxdWFyZWRGcm9tQ2VudGVyTGluZVRv
UG9pbnQoY29uc3QgSW50UG9pbnQmIHApIGNvbnN0IHsgcmV0dXJuIGRpZmZlcmVuY2VGcm9tQ2Vu
dGVyTGluZVRvUG9pbnQocCkuZGlhZ29uYWxMZW5ndGhTcXVhcmVkKCk7IH0KKwogICAgIEludFJl
Y3QgdHJhbnNwb3NlZFJlY3QoKSBjb25zdCB7IHJldHVybiBJbnRSZWN0KG1fbG9jYXRpb24udHJh
bnNwb3NlZFBvaW50KCksIG1fc2l6ZS50cmFuc3Bvc2VkU2l6ZSgpKTsgfQogCiAjaWYgUExBVEZP
Uk0oV1gpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbnRT
aXplLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbnRTaXplLmgKaW5kZXgg
NjI1ZGIzYy4uN2RiZjdlZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvSW50U2l6ZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0lu
dFNpemUuaApAQCAtOTgsNiArOTgsMTYgQEAgcHVibGljOgogICAgICAgICAqdGhpcyA9IGV4cGFu
ZGVkVG8oSW50U2l6ZSgpKTsKICAgICB9CiAKKyAgICBpbnQgYXJlYSgpIGNvbnN0CisgICAgewor
ICAgICAgICByZXR1cm4gbV93aWR0aCAqIG1faGVpZ2h0OworICAgIH0KKworICAgIGludCBkaWFn
b25hbExlbmd0aFNxdWFyZWQoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fd2lkdGgg
KiBtX3dpZHRoICsgbV9oZWlnaHQgKiBtX2hlaWdodDsKKyAgICB9CisKICAgICBJbnRTaXplIHRy
YW5zcG9zZWRTaXplKCkgY29uc3QKICAgICB7CiAgICAgICAgIHJldHVybiBJbnRTaXplKG1faGVp
Z2h0LCBtX3dpZHRoKTsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>127360</attachid>
            <date>2012-02-16 05:43:00 -0800</date>
            <delta_ts>2012-02-22 04:31:01 -0800</delta_ts>
            <desc>Meat Patch</desc>
            <filename>Patch2</filename>
            <type>text/plain</type>
            <size>41576</size>
            <attacher name="Allan Sandfeld Jensen">allan.jensen</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL0NoYW5nZUxvZyBiL0NoYW5nZUxvZwppbmRleCBjZDUxYTM5Li5lZmU3ZWY0
IDEwMDY0NAotLS0gYS9DaGFuZ2VMb2cKKysrIGIvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTIgQEAK
KzIwMTItMDItMTYgIEFsbGFuIFNhbmRmZWxkIEplbnNlbiAgPGFsbGFuLmplbnNlbkBub2tpYS5j
b20+CisKKyAgICAgICAgTWFudWFsIHRlc3RzIHRoYXQgdGVzdHMgc3BlY2lhbCBjYXNlcyBvZiBn
ZXN0dXJlIHRhcCBoYW5kbGluZy4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMh
KS4KKworICAgICAgICAqIE1hbnVhbFRlc3RzL2V2ZW50LXRyaWdnZXJlZC13aWRnZXRzLmh0bWw6
IEFkZGVkLgorICAgICAgICAqIE1hbnVhbFRlc3RzL25lc3RlZC10b3VjaC5odG1sOiBBZGRlZC4K
KwogMjAxMi0wMi0xNiAgU2ltb24gSGF1c21hbm4gIDxzaW1vbi5oYXVzbWFubkBub2tpYS5jb20+
CiAKICAgICAgICAgW1F0XSBNb3ZlIGV2ZW50IGNvbnZlcnNpb24gZnVuY3Rpb25zIGZyb20gV2Vi
Q29yZSB0byBXZWJLaXQKZGlmZiAtLWdpdCBhL01hbnVhbFRlc3RzL2V2ZW50LXRyaWdnZXJlZC13
aWRnZXRzLmh0bWwgYi9NYW51YWxUZXN0cy9ldmVudC10cmlnZ2VyZWQtd2lkZ2V0cy5odG1sCm5l
dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjViYzk0MzcKLS0tIC9kZXYvbnVsbAor
KysgYi9NYW51YWxUZXN0cy9ldmVudC10cmlnZ2VyZWQtd2lkZ2V0cy5odG1sCkBAIC0wLDAgKzEs
NTYgQEAKKzxodG1sPgorPGhlYWQ+Cis8c3R5bGU+CisgIC5ib3ggeyBib3JkZXI6IDFweCBzb2xp
ZCBibGFjazsgYm9yZGVyLXJhZGl1czogNXB4IDVweDsgbWFyZ2luOiAxZW07IG1heC13aWR0aDog
NDBlbTsgfQorPC9zdHlsZT4KKzwvaGVhZD4KKzxib2R5PgorPHNjcmlwdD4KKyAgZnVuY3Rpb24g
dHJpZ2dlcklucHV0KCkgeworICAgIHZhciBlbGVtZW50ID0gZXZlbnQuc3JjRWxlbWVudDsKKyAg
ICBpZiAoIWVsZW1lbnQub3BlbikgeworICAgICAgZWxlbWVudC5pbm5lckhUTUwgPSAnPGlucHV0
IHR5cGU9dGV4dCBzdHlsZT0id2lkdGg6IDEwMCUiPjwvaW5wdXQ+JworICAgICAgZWxlbWVudC5v
cGVuID0gdHJ1ZTsKKyAgICB9CisgICAgZWxlbWVudC5maXJzdENoaWxkLmZvY3VzKCk7CisgIH0K
Kzwvc2NyaXB0PgorCitUZXN0IHZhcmlvdXMgd2F5cyB0byB0cmlnZ2VyIGlucHV0LXdpZGdldHMu
IE9uIGEgdG91Y2ggaW50ZXJmYWNlLCBhbGwgdGhlIGFjdGlvbnMgc2hvdWxkIGJlIHRyaWdnZXJh
YmxlIHdpdGggZWl0aGVyCithIHRvdWNoIGRvd24gb3IgYSB0b3VjaCB0YXAuCisKKzxkaXYgY2xh
c3M9Ym94IHRhYmluZGV4PTEgb25mb2N1cz0ndHJpZ2dlcklucHV0KCknPgorRm9jdXMgaGVyZSBz
aG91bGQgZ2l2ZSBhIHRleHQgaW5wdXQtZmllbGQuCis8L2Rpdj4KKworPGRpdiBjbGFzcz1ib3gg
b25tb3VzZW92ZXI9J3RyaWdnZXJJbnB1dCgpJz4gCitNb3VzZS1vdmVyIGhlcmUgc2hvdWxkIGdp
dmUgYSB0ZXh0IGlucHV0LWZpZWxkLgorPC9kaXY+CisKKzxzdHlsZT4KKyAgLmJveDpub3QoOmhv
dmVyKSAuaG92ZXJ0cmlnZ2VyZWQgeyB2aXNpYmlsaXR5OiBoaWRkZW47fQorICAuYm94OmhvdmVy
IC5ob3ZlcmZhbGxiYWNrIHsgZGlzcGxheTogbm9uZTsgfSAgCis8L3N0eWxlPgorPGRpdiBjbGFz
cz1ib3g+IAorPHNwYW4gY2xhc3M9aG92ZXJmYWxsYmFjaz5Ib3ZlcmluZyBoZXJlIHNob3VsZCBn
aXZlIGEgdGV4dCBpbnB1dC1maWVsZC48L3NwYW4+Cis8aW5wdXQgdHlwZT10ZXh0IGNsYXNzPWhv
dmVydHJpZ2dlcmVkPjwvaW5wdXQ+Cis8L2Rpdj4KKworPGRpdiBjbGFzcz1ib3ggaWQ9J215Ym94
MScgb25mb2N1cz0ndHJpZ2dlcklucHV0KCknPgorICA8c3BhbiB0YWJpbmRleD0xPiBGb2N1c2lu
ZyBoZXJlIHNob3VsZCBvbmx5IGdpdmUgZm9jdXMgb3V0bGluZS4KKyAgPC9zcGFuPgorPC9kaXY+
CisKKzxkaXYgY2xhc3M9Ym94IGlkPSdteWJveDInPgorICA8c3BhbiB0YWJpbmRleD0xPiBGb2N1
c2luZyBoZXJlIHNob3VsZCBnaXZlIGEgdGV4dCBpbnB1dC1maWVsZC4KKyAgPC9zcGFuPgorPC9k
aXY+CisKKzxzY3JpcHQ+CisgIHZhciBlbGVtZW50ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQo
J215Ym94MicpOworICBlbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ0RPTUZvY3VzSW4nLCB0cmln
Z2VySW5wdXQsIGZhbHNlKTsKKzwvc2NyaXB0PgorCisKKzwvYm9keT4KKzwvaHRtbD4KXCBObyBu
ZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9NYW51YWxUZXN0cy9uZXN0ZWQtdG91
Y2guaHRtbCBiL01hbnVhbFRlc3RzL25lc3RlZC10b3VjaC5odG1sCm5ldyBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDAwMDAwMDAuLmMxYTNlM2EKLS0tIC9kZXYvbnVsbAorKysgYi9NYW51YWxUZXN0
cy9uZXN0ZWQtdG91Y2guaHRtbApAQCAtMCwwICsxLDMyIEBACis8aHRtbD4KKzxoZWFkPgorPHN0
eWxlPgorICAuYm94IHsgYm9yZGVyOiAxcHggc29saWQgYmxhY2s7IGJvcmRlci1yYWRpdXM6IDVw
eCA1cHg7IG1hcmdpbjogMWVtOyBtYXgtd2lkdGg6IDQwZW07IH0KKzwvc3R5bGU+Cis8L2hlYWQ+
Cis8Ym9keT4KK1Rlc3QgdGhlIGNhc2Ugd2hlcmUgYSBjbGlja2FibGUgdGFyZ2V0IGlzIG5lc3Rl
ZCBpbnNpZGUgYSBkb2N1bWVudCB0aGF0IGlzIG1vbml0b3JpbmcgY2xpY2tzLgorCitUaGUgdGFy
Z2V0IHdpdGggdGhlIGxvY2FsIGV2ZW50LWhhbmRsZXIgc2hvdWxkIGJlIGNob3NlbiBpZiBtdWx0
aXBsZSB0YXJnZXRzIGFyZSB0b3VjaGVkLgorCis8ZGl2IGNsYXNzPWJveCBpZD1teWJveDE+CitC
b3ggd2l0aCBhIGxvY2FsIGNsaWNrIGhhbmRsZXIuCis8L2Rpdj4KKworPGRpdiBjbGFzcz1ib3gg
aWQ9bXlib3gyPiAKK0JveCB3aXRob3V0IGEgbG9jYWwgY2xpY2sgaGFuZGxlci4KKzwvZGl2Pgor
Cis8c2NyaXB0PgorICBmdW5jdGlvbiBtb25pdG9yKGUpIHsgYWxlcnQoZS50YXJnZXQgKyggZS50
YXJnZXQuaWQgPyAoICcgIycgKyBlLnRhcmdldC5pZCkgOiAnJykpOyB9OworICBmdW5jdGlvbiBk
b1NvbWV0aGluZyhlKSB7fTsKKworICB2YXIgZWxlbWVudCA9IGRvY3VtZW50LmdldEVsZW1lbnRC
eUlkKCdteWJveDEnKTsKKyAgZWxlbWVudC5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIGRvU29t
ZXRoaW5nLCBmYWxzZSk7CisgIGVsZW1lbnQgPSBkb2N1bWVudC5ib2R5OworICBlbGVtZW50LmFk
ZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgbW9uaXRvciwgZmFsc2UpOworPC9zY3JpcHQ+CisKKwor
PC9ib2R5PgorPC9odG1sPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwppbmRl
eCAwZTI0NWU5Li5lMmUyZmU4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cK
KysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsODQgQEAKKzIwMTItMDIt
MTYgIEFsbGFuIFNhbmRmZWxkIEplbnNlbiAgPGFsbGFuLmplbnNlbkBub2tpYS5jb20+CisKKyAg
ICAgICAgU2VsZWN0IGJlc3QgdGFyZ2V0IGZvciB0YXAgZ2VzdHVyZS4KKyAgICAgICAgaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTc4ODAxCisKKyAgICAgICAgUmV2aWV3
ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVGhlIEFQSSBpcyBhdmFpbGFibGUgdGhy
b3VnaCBFdmVudEhhbmRsZXI6Om5vZGVGb3JUYXBHZXN0dXJlQXRUb3VjaFBvaW50LCBidXQKKyAg
ICAgICAgaW1wbGVtZW50YXRpb24gZGV0YWlscyBoYXZlIGJlZW4gcGxhY2VkIGluIHBsYXRmb3Jt
L0hpdFRlc3RSZXN1bHRNZXRyaWNzLgorICAgICAgICAKKyAgICAgICAgVGhlIGRlZmF1bHQgaGl0
IGRldGVjdGlvbiBpcyBwZXJmb3JtZWQgYnkgbWVhc3VyaW5nIHRoZSBkaXN0YW5jZSB0byB0aGUg
Y2VudGVyIAorICAgICAgICBsaW5lcyBvZiB0aGUgYWJzb2x1dGUgcmVjdHMgb2YgdGhlIGhpdCBu
b2Rlcy4gQWJzb2x1dGUgcmVjdHMgYXJlIHVzZWQgaW5zdGVhZAorICAgICAgICBvZiBib3VuZGlu
ZyByZWN0cyB0byBtYWtlIGhpdC1kZXRlY3RpbmcgYWdhaW5zdCBsaW5rcyBvdmVyIGxpbmUgYnJl
YWtzLiBBbmQgZGlzdGFuY2UKKyAgICAgICAgdG8gY2VudGVyIGxpbmUgaXMgdXNlZCB0byBtYWtl
IGl0IGVhc2llciB0byBoaXQgc21hbGwgbGlua3MgbmV4dCB0byBsYXJnZSBsaW5rcy4KKyAgICAg
ICAgCisgICAgICAgIFRlc3RzOiBNYW51YWxUZXN0cy9ldmVudC10cmlnZ2VyZWQtd2lkZ2V0cy5o
dG1sCisgICAgICAgICAgICAgICBNYW51YWxUZXN0cy9uZXN0ZWQtdG91Y2guaHRtbAorCisgICAg
ICAgICogVGFyZ2V0LnByaToKKyAgICAgICAgKiBwYWdlL0V2ZW50SGFuZGxlci5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpFdmVudEhhbmRsZXI6OmhhbmRsZUdlc3R1cmVFdmVudCk6IFNwbGl0IGhh
bmRsZUdlc3R1cmVUYXAgYW5kIGhhbmRsZUdlc3R1cmVTY3JvbGxVcGRhdGUgb3V0LgorICAgICAg
ICAoV2ViQ29yZTo6RXZlbnRIYW5kbGVyOjpoYW5kbGVHZXN0dXJlVGFwKToKKyAgICAgICAgKFdl
YkNvcmU6OkV2ZW50SGFuZGxlcjo6aGFuZGxlR2VzdHVyZVNjcm9sbFVwZGF0ZSk6CisgICAgICAg
IChXZWJDb3JlOjpFdmVudEhhbmRsZXI6Om5vZGVGb3JUYXBHZXN0dXJlQXRUb3VjaFBvaW50KToK
KyAgICAgICAgICAgIFJldHVybiB0aGUgYmVzdCBub2RlIGZvciB0YXAtZ2VzdHVyZSB1c2luZyB0
aGUgbmV3IG1ldGhvZHMuCisgICAgICAgICogcGFnZS9FdmVudEhhbmRsZXIuaDoKKyAgICAgICAg
KiBwbGF0Zm9ybS9IaXRUZXN0UmVzdWx0TWV0cmljcy5jcHA6IEFkZGVkLgorICAgICAgICAoV2Vi
Q29yZTo6SGl0VGVzdFJlc3VsdE1ldHJpY3M6Om5vZGVSZXNwb25kaW5nVG9UYXBHZXN0dXJlKToK
KyAgICAgICAgKFdlYkNvcmU6OkhpdFRlc3RSZXN1bHRNZXRyaWNzOjphcHBlbmRBYnNvbHV0ZVF1
YWRzRm9yTm9kZVRvSGl0TGlzdCk6CisgICAgICAgIChXZWJDb3JlOjpIaXRUZXN0UmVzdWx0TWV0
cmljczo6Y29tcGlsZUhpdExpc3QpOgorICAgICAgICAoV2ViQ29yZTo6SGl0VGVzdFJlc3VsdE1l
dHJpY3M6OmRpc3RhbmNlVG9IaXRUZXN0UXVhZCk6CisgICAgICAgIChXZWJDb3JlOjpIaXRUZXN0
UmVzdWx0TWV0cmljczo6b3ZlcmxhcFdpdGhIaXRUZXN0UXVhZCk6CisgICAgICAgIChXZWJDb3Jl
OjpIaXRUZXN0UmVzdWx0TWV0cmljczo6ZmluZENsb3Nlc3ROb2RlKToKKyAgICAgICAgKFdlYkNv
cmU6OkhpdFRlc3RSZXN1bHRNZXRyaWNzOjpmaW5kTW9zdE92ZXJsYXBwaW5nTm9kZSk6CisgICAg
ICAgICogcGxhdGZvcm0vSGl0VGVzdFJlc3VsdE1ldHJpY3MuaDogQWRkZWQuCisgICAgICAgIChX
ZWJDb3JlOjpIaXRUZXN0UmVzdWx0TWV0cmljczo6SGl0VGVzdFF1YWQ6OkhpdFRlc3RRdWFkKToK
KyAgICAgICAgKFdlYkNvcmU6OkhpdFRlc3RSZXN1bHRNZXRyaWNzOjpIaXRUZXN0UXVhZDo6bm9k
ZSk6CisgICAgICAgIChXZWJDb3JlOjpIaXRUZXN0UmVzdWx0TWV0cmljczo6SGl0VGVzdFF1YWQ6
OnF1YWQpOgorICAgICAgICAoV2ViQ29yZTo6SGl0VGVzdFJlc3VsdE1ldHJpY3M6OkhpdFRlc3RR
dWFkOjpib3VuZGluZ0JveCk6CisgICAgICAgICogcGxhdGZvcm0vUGxhdGZvcm1Ub3VjaFBvaW50
Lmg6CisgICAgICAgIChXZWJDb3JlOjpQbGF0Zm9ybVRvdWNoUG9pbnQ6OnJlY3QpOgorCisyMDEy
LTAyLTE2ICBBbGxhbiBTYW5kZmVsZCBKZW5zZW4gIDxhbGxhbi5qZW5zZW5Abm9raWEuY29tPgor
CisgICAgICAgIEltcGxlbWVudCBhIGNvbnNpc3RlbnQgc2V0IG9mIGRpc3RhbmNlIGFuZCBhcmVh
IGZ1bmN0aW9ucyBmb3IgUmVjdCwgUG9pbnQgYW5kIFNpemUgY2xhc3Nlcy4KKworICAgICAgICBS
ZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKyAgICAgICAgCisgICAgICAgIEFsc28gYWRkZWQg
ZGlzdGFuY2UgZnVuY3Rpb25zIGZvciByZWN0YW5nbGUgY2VudGVyLWxpbmVzLiBGb3IgbGluZS1y
ZWN0cyB0aGUgZGlzdGFuY2UgdG8gdGhlIGNlbnRlci1saW5lIGlzCisgICAgICAgIGEgYmV0dGVy
IGV4cHJlc3Npb24gb2YgdGhlIGRpc3RhbmNlIHRvIGEgcmVjdGFuZ2xlcyBjZW50ZXIgdGhhbiB0
aGUgZGlzdGFuY2UgdG8gdGhlIGNlbnRlci1wb2ludC4KKyAgICAgICAgCisgICAgICAgICogcGxh
dGZvcm0vZ3JhcGhpY3MvRmxvYXRQb2ludC5oOgorICAgICAgICAoV2ViQ29yZTo6RmxvYXRQb2lu
dDo6RmxvYXRQb2ludCk6CisgICAgICAgIChXZWJDb3JlOjpGbG9hdFBvaW50OjpkaXN0YW5jZVRv
UG9pbnQpOgorICAgICAgICAoV2ViQ29yZTo6RmxvYXRQb2ludDo6ZGlzdGFuY2VTcXVhcmVkVG9Q
b2ludCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvRmxvYXRRdWFkLmg6CisgICAgICAg
IChXZWJDb3JlOjpGbG9hdFF1YWQ6OmNlbnRlcik6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhp
Y3MvRmxvYXRSZWN0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmRpc3RhbmNlVG9JbnRlcnZhbCk6
CisgICAgICAgIChXZWJDb3JlOjpGbG9hdFJlY3Q6OmRpZmZlcmVuY2VUb1BvaW50KToKKyAgICAg
ICAgKFdlYkNvcmU6OkZsb2F0UmVjdDo6ZGlzdGFuY2VUb1BvaW50KToKKyAgICAgICAgKFdlYkNv
cmU6OkZsb2F0UmVjdDo6ZGlmZmVyZW5jZUZyb21DZW50ZXJMaW5lVG9Qb2ludCk6CisgICAgICAg
ICogcGxhdGZvcm0vZ3JhcGhpY3MvRmxvYXRSZWN0Lmg6CisgICAgICAgIChXZWJDb3JlOjpGbG9h
dFJlY3Q6OmRpc3RhbmNlU3F1YXJlZFRvUG9pbnQpOgorICAgICAgICAoV2ViQ29yZTo6RmxvYXRS
ZWN0OjpkaXN0YW5jZVNxdWFyZWRGcm9tQ2VudGVyTGluZVRvUG9pbnQpOgorICAgICAgICAqIHBs
YXRmb3JtL2dyYXBoaWNzL0Zsb2F0U2l6ZS5oOgorICAgICAgICAoV2ViQ29yZTo6RmxvYXRTaXpl
OjphcmVhKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9JbnRQb2ludC5oOgorICAgICAg
ICAoV2ViQ29yZTo6SW50UG9pbnQ6Omxlbmd0aFNxdWFyZWQpOgorICAgICAgICAoV2ViQ29yZTo6
SW50UG9pbnQ6OmRpc3RhbmNlU3F1YXJlZFRvUG9pbnQpOgorICAgICAgICAqIHBsYXRmb3JtL2dy
YXBoaWNzL0ludFJlY3QuY3BwOgorICAgICAgICAoV2ViQ29yZTo6ZGlzdGFuY2VUb0ludGVydmFs
KToKKyAgICAgICAgKFdlYkNvcmU6OkludFJlY3Q6OmRpZmZlcmVuY2VUb1BvaW50KToKKyAgICAg
ICAgKFdlYkNvcmU6OkludFJlY3Q6OmRpZmZlcmVuY2VGcm9tQ2VudGVyTGluZVRvUG9pbnQpOgor
ICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0ludFJlY3QuaDoKKyAgICAgICAgKFdlYkNvcmU6
OkludFJlY3Q6OmRpc3RhbmNlU3F1YXJlZFRvUG9pbnQpOgorICAgICAgICAoV2ViQ29yZTo6SW50
UmVjdDo6ZGlzdGFuY2VTcXVhcmVkRnJvbUNlbnRlckxpbmVUb1BvaW50KToKKyAgICAgICAgKiBw
bGF0Zm9ybS9ncmFwaGljcy9JbnRTaXplLmg6CisgICAgICAgIChXZWJDb3JlOjpJbnRTaXplOjph
cmVhKToKKyAgICAgICAgKFdlYkNvcmU6OkludFNpemU6OmRpYWdvbmFsTGVuZ3RoU3F1YXJlZCk6
CisKIDIwMTItMDItMTYgIFNpbW9uIEhhdXNtYW5uICA8c2ltb24uaGF1c21hbm5Abm9raWEuY29t
PgogCiAgICAgICAgIEJ1aWxkIGZpeCBmb3IgUXQgNSB3aXRob3V0IFF0V2lkZ2V0cy4KZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL1RhcmdldC5wcmkgYi9Tb3VyY2UvV2ViQ29yZS9UYXJnZXQu
cHJpCmluZGV4IGYzMjU1YTMuLjRlMDk5NTggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1Rh
cmdldC5wcmkKKysrIGIvU291cmNlL1dlYkNvcmUvVGFyZ2V0LnByaQpAQCAtMTA0Nyw2ICsxMDQ3
LDcgQEAgU09VUkNFUyArPSBcCiAgICAgcGxhdGZvcm0vRmlsZVN5c3RlbS5jcHAgXAogICAgIHBs
YXRmb3JtL0dlb2xvY2F0aW9uU2VydmljZS5jcHAgXAogICAgIHBsYXRmb3JtL0hpc3RvZ3JhbVN1
cHBvcnQuY3BwIFwKKyAgICBwbGF0Zm9ybS9IaXRUZXN0UmVzdWx0TWV0cmljcy5jcHAgXAogICAg
IHBsYXRmb3JtL2ltYWdlLWRlY29kZXJzL3F0L0ltYWdlRnJhbWVRdC5jcHAgXAogICAgIHBsYXRm
b3JtL2dyYXBoaWNzL0ZvbnREZXNjcmlwdGlvbi5jcHAgXAogICAgIHBsYXRmb3JtL2dyYXBoaWNz
L0ZvbnRGYWxsYmFja0xpc3QuY3BwIFwKQEAgLTIxMDQsNiArMjEwNSw3IEBAIEhFQURFUlMgKz0g
XAogICAgIHBsYXRmb3JtL0ZpbGVTeXN0ZW0uaCBcCiAgICAgcGxhdGZvcm0vR2VvbG9jYXRpb25T
ZXJ2aWNlLmggXAogICAgIHBsYXRmb3JtL0hpc3RvZ3JhbVN1cHBvcnQuaCBcCisgICAgcGxhdGZv
cm0vSGl0VGVzdFJlc3VsdE1ldHJpY3MuaCBcCiAgICAgcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMv
SW1hZ2VEZWNvZGVyLmggXAogICAgIHBsYXRmb3JtL21vY2svRGV2aWNlT3JpZW50YXRpb25DbGll
bnRNb2NrLmggXAogICAgIHBsYXRmb3JtL21vY2svR2VvbG9jYXRpb25DbGllbnRNb2NrLmNwcCBc
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL0V2ZW50SGFuZGxlci5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9wYWdlL0V2ZW50SGFuZGxlci5jcHAKaW5kZXggODUyMGZjNi4uNjFkODE3MiAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGFnZS9FdmVudEhhbmRsZXIuY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3BhZ2UvRXZlbnRIYW5kbGVyLmNwcApAQCAtNTQsNiArNTQsNyBAQAogI2lu
Y2x1ZGUgIkhUTUxOYW1lcy5oIgogI2luY2x1ZGUgIkhpdFRlc3RSZXF1ZXN0LmgiCiAjaW5jbHVk
ZSAiSGl0VGVzdFJlc3VsdC5oIgorI2luY2x1ZGUgIkhpdFRlc3RSZXN1bHRNZXRyaWNzLmgiCiAj
aW5jbHVkZSAiSW1hZ2UuaCIKICNpbmNsdWRlICJJbnNwZWN0b3JJbnN0cnVtZW50YXRpb24uaCIK
ICNpbmNsdWRlICJLZXlib2FyZEV2ZW50LmgiCkBAIC0yMzQyLDI1ICsyMzQzLDEwIEBAIGJvb2wg
RXZlbnRIYW5kbGVyOjpoYW5kbGVHZXN0dXJlRXZlbnQoY29uc3QgUGxhdGZvcm1HZXN0dXJlRXZl
bnQmIGdlc3R1cmVFdmVudCkKICAgICBzd2l0Y2ggKGdlc3R1cmVFdmVudC50eXBlKCkpIHsKICAg
ICBjYXNlIFBsYXRmb3JtRXZlbnQ6Okdlc3R1cmVUYXBEb3duOgogICAgICAgICBicmVhazsKLSAg
ICBjYXNlIFBsYXRmb3JtRXZlbnQ6Okdlc3R1cmVUYXA6IHsKLSAgICAgICAgLy8gRklYTUU6IFJl
ZmFjdG9yIHRoaXMgY29kZSB0byBub3QgaGl0IHRlc3QgbXVsdGlwbGUgdGltZXMgb25jZSBoaXQg
dGVzdGluZyBoYXMgYmVlbiBjb3JyZWN0ZWQgYXMgc3VnZ2VzdGVkIGFib3ZlLgotICAgICAgICBQ
bGF0Zm9ybU1vdXNlRXZlbnQgZmFrZU1vdXNlTW92ZShnZXN0dXJlRXZlbnQucG9zaXRpb24oKSwg
Z2VzdHVyZUV2ZW50Lmdsb2JhbFBvc2l0aW9uKCksIE5vQnV0dG9uLCBQbGF0Zm9ybUV2ZW50OjpN
b3VzZU1vdmVkLCAvKiBjbGlja0NvdW50ICovIDEsIGdlc3R1cmVFdmVudC5zaGlmdEtleSgpLCBn
ZXN0dXJlRXZlbnQuY3RybEtleSgpLCBnZXN0dXJlRXZlbnQuYWx0S2V5KCksIGdlc3R1cmVFdmVu
dC5tZXRhS2V5KCksIGdlc3R1cmVFdmVudC50aW1lc3RhbXAoKSk7Ci0gICAgICAgIFBsYXRmb3Jt
TW91c2VFdmVudCBmYWtlTW91c2VEb3duKGdlc3R1cmVFdmVudC5wb3NpdGlvbigpLCBnZXN0dXJl
RXZlbnQuZ2xvYmFsUG9zaXRpb24oKSwgTGVmdEJ1dHRvbiwgUGxhdGZvcm1FdmVudDo6TW91c2VQ
cmVzc2VkLCAvKiBjbGlja0NvdW50ICovIDEsIGdlc3R1cmVFdmVudC5zaGlmdEtleSgpLCBnZXN0
dXJlRXZlbnQuY3RybEtleSgpLCBnZXN0dXJlRXZlbnQuYWx0S2V5KCksIGdlc3R1cmVFdmVudC5t
ZXRhS2V5KCksIGdlc3R1cmVFdmVudC50aW1lc3RhbXAoKSk7Ci0gICAgICAgIFBsYXRmb3JtTW91
c2VFdmVudCBmYWtlTW91c2VVcChnZXN0dXJlRXZlbnQucG9zaXRpb24oKSwgZ2VzdHVyZUV2ZW50
Lmdsb2JhbFBvc2l0aW9uKCksIExlZnRCdXR0b24sIFBsYXRmb3JtRXZlbnQ6Ok1vdXNlUmVsZWFz
ZWQsIC8qIGNsaWNrQ291bnQgKi8gMSwgZ2VzdHVyZUV2ZW50LnNoaWZ0S2V5KCksIGdlc3R1cmVF
dmVudC5jdHJsS2V5KCksIGdlc3R1cmVFdmVudC5hbHRLZXkoKSwgZ2VzdHVyZUV2ZW50Lm1ldGFL
ZXkoKSwgZ2VzdHVyZUV2ZW50LnRpbWVzdGFtcCgpKTsKLSAgICAgICAgbW91c2VNb3ZlZChmYWtl
TW91c2VNb3ZlKTsKLSAgICAgICAgaGFuZGxlTW91c2VQcmVzc0V2ZW50KGZha2VNb3VzZURvd24p
OwotICAgICAgICBoYW5kbGVNb3VzZVJlbGVhc2VFdmVudChmYWtlTW91c2VVcCk7Ci0gICAgICAg
IHJldHVybiB0cnVlOwotICAgIH0KLSAgICBjYXNlIFBsYXRmb3JtRXZlbnQ6Okdlc3R1cmVTY3Jv
bGxVcGRhdGU6IHsKLSAgICAgICAgY29uc3QgZmxvYXQgdGlja0Rpdmlzb3IgPSAoZmxvYXQpV2hl
ZWxFdmVudDo6dGlja011bHRpcGxpZXI7Ci0gICAgICAgIC8vIEZJWE1FOiBSZXBsYWNlIHRoaXMg
aW50ZXJpbSBpbXBsZW1lbnRhdGlvbiBvbmNlIHRoZSBhYm92ZSBmaXhtZSBoYXMgYmVlbiBhZGRy
ZXNzZWQuCi0gICAgICAgIEludFBvaW50IHBvaW50KGdlc3R1cmVFdmVudC5wb3NpdGlvbigpLngo
KSwgZ2VzdHVyZUV2ZW50LnBvc2l0aW9uKCkueSgpKTsKLSAgICAgICAgSW50UG9pbnQgZ2xvYmFs
UG9pbnQoZ2VzdHVyZUV2ZW50Lmdsb2JhbFBvc2l0aW9uKCkueCgpLCBnZXN0dXJlRXZlbnQuZ2xv
YmFsUG9zaXRpb24oKS55KCkpOwotICAgICAgICBQbGF0Zm9ybVdoZWVsRXZlbnQgc3ludGhldGlj
V2hlZWxFdmVudChwb2ludCwgZ2xvYmFsUG9pbnQsIGdlc3R1cmVFdmVudC5kZWx0YVgoKSwgZ2Vz
dHVyZUV2ZW50LmRlbHRhWSgpLCBnZXN0dXJlRXZlbnQuZGVsdGFYKCkgLyB0aWNrRGl2aXNvciwg
Z2VzdHVyZUV2ZW50LmRlbHRhWSgpIC8gdGlja0Rpdmlzb3IsIFNjcm9sbEJ5UGl4ZWxXaGVlbEV2
ZW50LCBnZXN0dXJlRXZlbnQuc2hpZnRLZXkoKSwgZ2VzdHVyZUV2ZW50LmN0cmxLZXkoKSwgZ2Vz
dHVyZUV2ZW50LmFsdEtleSgpLCBnZXN0dXJlRXZlbnQubWV0YUtleSgpKTsKLSAgICAgICAgaGFu
ZGxlV2hlZWxFdmVudChzeW50aGV0aWNXaGVlbEV2ZW50KTsKLSAgICAgICAgcmV0dXJuIHRydWU7
Ci0gICAgfQorICAgIGNhc2UgUGxhdGZvcm1FdmVudDo6R2VzdHVyZVRhcDoKKyAgICAgICAgcmV0
dXJuIGhhbmRsZUdlc3R1cmVUYXAoZ2VzdHVyZUV2ZW50KTsKKyAgICBjYXNlIFBsYXRmb3JtRXZl
bnQ6Okdlc3R1cmVTY3JvbGxVcGRhdGU6CisgICAgICAgIHJldHVybiBoYW5kbGVHZXN0dXJlU2Ny
b2xsVXBkYXRlKGdlc3R1cmVFdmVudCk7CiAgICAgY2FzZSBQbGF0Zm9ybUV2ZW50OjpHZXN0dXJl
RG91YmxlVGFwOgogICAgIGNhc2UgUGxhdGZvcm1FdmVudDo6R2VzdHVyZVNjcm9sbEJlZ2luOgog
ICAgIGNhc2UgUGxhdGZvcm1FdmVudDo6R2VzdHVyZVNjcm9sbEVuZDoKQEAgLTIzNzAsOCArMjM1
Niw2NyBAQCBib29sIEV2ZW50SGFuZGxlcjo6aGFuZGxlR2VzdHVyZUV2ZW50KGNvbnN0IFBsYXRm
b3JtR2VzdHVyZUV2ZW50JiBnZXN0dXJlRXZlbnQpCiAgICAgfQogICAgIHJldHVybiB0cnVlOwog
fQorCitib29sIEV2ZW50SGFuZGxlcjo6aGFuZGxlR2VzdHVyZVRhcChjb25zdCBQbGF0Zm9ybUdl
c3R1cmVFdmVudCYgZ2VzdHVyZUV2ZW50KQoreworICAgIExheW91dFBvaW50IGFkanVzdGVkUG9p
bnQgPSBnZXN0dXJlRXZlbnQucG9zaXRpb24oKTsKKyAgICAvLyBGSVhNRTogUmVmYWN0b3IgdGhp
cyBjb2RlIHRvIG5vdCBoaXQgdGVzdCBtdWx0aXBsZSB0aW1lcyBvbmNlIGhpdCB0ZXN0aW5nCisg
ICAgLy8gaGFzIGJlZW4gY29ycmVjdGVkIGFzIHN1Z2dlc3RlZCBhYm92ZSBpbiBoYW5kbGVHZXN0
dXJlRXZlbnQoKS4KKyAgICBpZiAoIWdlc3R1cmVFdmVudC5hcmVhKCkuaXNFbXB0eSgpKSB7Cisg
ICAgICAgIE5vZGUqIHRhcmdldE5vZGUgPSAwOworICAgICAgICAvLyBGb3Igbm93IHdlIHVzZSB0
aGUgYWRqdXN0ZWQgcG9zaXRpb24gdG8gZW5zdXJlIHRoZSBsYXRlciByZWR1bmRhbnQgaGl0LXRl
c3RzIGhpdHMgdGhlIHJpZ2h0IG5vZGUuCisgICAgICAgIG5vZGVGb3JUYXBHZXN0dXJlQXRUb3Vj
aFBvaW50KGdlc3R1cmVFdmVudC5wb3NpdGlvbigpLCBJbnRTaXplKGdlc3R1cmVFdmVudC5hcmVh
KCkud2lkdGgoKS8yLCBnZXN0dXJlRXZlbnQuYXJlYSgpLmhlaWdodCgpLzIpLCBhZGp1c3RlZFBv
aW50LCB0YXJnZXROb2RlKTsKKyAgICAgICAgaWYgKCF0YXJnZXROb2RlKQorICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIGJvb2wgZGVmYXVsdFByZXZlbnRlZCA9IGZhbHNl
OworICAgIFBsYXRmb3JtTW91c2VFdmVudCBmYWtlTW91c2VNb3ZlKGFkanVzdGVkUG9pbnQsIGdl
c3R1cmVFdmVudC5nbG9iYWxQb3NpdGlvbigpLCBOb0J1dHRvbiwgUGxhdGZvcm1FdmVudDo6TW91
c2VNb3ZlZCwgLyogY2xpY2tDb3VudCAqLyAxLCBnZXN0dXJlRXZlbnQuc2hpZnRLZXkoKSwgZ2Vz
dHVyZUV2ZW50LmN0cmxLZXkoKSwgZ2VzdHVyZUV2ZW50LmFsdEtleSgpLCBnZXN0dXJlRXZlbnQu
bWV0YUtleSgpLCBnZXN0dXJlRXZlbnQudGltZXN0YW1wKCkpOworICAgIFBsYXRmb3JtTW91c2VF
dmVudCBmYWtlTW91c2VEb3duKGFkanVzdGVkUG9pbnQsIGdlc3R1cmVFdmVudC5nbG9iYWxQb3Np
dGlvbigpLCBMZWZ0QnV0dG9uLCBQbGF0Zm9ybUV2ZW50OjpNb3VzZVByZXNzZWQsIC8qIGNsaWNr
Q291bnQgKi8gMSwgZ2VzdHVyZUV2ZW50LnNoaWZ0S2V5KCksIGdlc3R1cmVFdmVudC5jdHJsS2V5
KCksIGdlc3R1cmVFdmVudC5hbHRLZXkoKSwgZ2VzdHVyZUV2ZW50Lm1ldGFLZXkoKSwgZ2VzdHVy
ZUV2ZW50LnRpbWVzdGFtcCgpKTsKKyAgICBQbGF0Zm9ybU1vdXNlRXZlbnQgZmFrZU1vdXNlVXAo
YWRqdXN0ZWRQb2ludCwgZ2VzdHVyZUV2ZW50Lmdsb2JhbFBvc2l0aW9uKCksIExlZnRCdXR0b24s
IFBsYXRmb3JtRXZlbnQ6Ok1vdXNlUmVsZWFzZWQsIC8qIGNsaWNrQ291bnQgKi8gMSwgZ2VzdHVy
ZUV2ZW50LnNoaWZ0S2V5KCksIGdlc3R1cmVFdmVudC5jdHJsS2V5KCksIGdlc3R1cmVFdmVudC5h
bHRLZXkoKSwgZ2VzdHVyZUV2ZW50Lm1ldGFLZXkoKSwgZ2VzdHVyZUV2ZW50LnRpbWVzdGFtcCgp
KTsKKyAgICBtb3VzZU1vdmVkKGZha2VNb3VzZU1vdmUpOworICAgIGRlZmF1bHRQcmV2ZW50ZWQg
fD0gaGFuZGxlTW91c2VQcmVzc0V2ZW50KGZha2VNb3VzZURvd24pOworICAgIGRlZmF1bHRQcmV2
ZW50ZWQgfD0gaGFuZGxlTW91c2VSZWxlYXNlRXZlbnQoZmFrZU1vdXNlVXApOworICAgIHJldHVy
biBkZWZhdWx0UHJldmVudGVkOworfQorCitib29sIEV2ZW50SGFuZGxlcjo6aGFuZGxlR2VzdHVy
ZVNjcm9sbFVwZGF0ZShjb25zdCBQbGF0Zm9ybUdlc3R1cmVFdmVudCYgZ2VzdHVyZUV2ZW50KQor
eworICAgIGNvbnN0IGZsb2F0IHRpY2tEaXZpc29yID0gKGZsb2F0KVdoZWVsRXZlbnQ6OnRpY2tN
dWx0aXBsaWVyOworICAgIC8vIEZJWE1FOiBSZXBsYWNlIHRoaXMgaW50ZXJpbSBpbXBsZW1lbnRh
dGlvbiBvbmNlIHRoZSBhYm92ZSBmaXhtZSBpbiBoYW5kbGVHZXN0dXJlRXZlbnQoKSBoYXMgYmVl
biBhZGRyZXNzZWQuCisgICAgYm9vbCBkZWZhdWx0UHJldmVudGVkID0gZmFsc2U7CisgICAgSW50
UG9pbnQgcG9pbnQoZ2VzdHVyZUV2ZW50LnBvc2l0aW9uKCkueCgpLCBnZXN0dXJlRXZlbnQucG9z
aXRpb24oKS55KCkpOworICAgIEludFBvaW50IGdsb2JhbFBvaW50KGdlc3R1cmVFdmVudC5nbG9i
YWxQb3NpdGlvbigpLngoKSwgZ2VzdHVyZUV2ZW50Lmdsb2JhbFBvc2l0aW9uKCkueSgpKTsKKyAg
ICBQbGF0Zm9ybVdoZWVsRXZlbnQgc3ludGhldGljV2hlZWxFdmVudChwb2ludCwgZ2xvYmFsUG9p
bnQsIGdlc3R1cmVFdmVudC5kZWx0YVgoKSwgZ2VzdHVyZUV2ZW50LmRlbHRhWSgpLCBnZXN0dXJl
RXZlbnQuZGVsdGFYKCkgLyB0aWNrRGl2aXNvciwgZ2VzdHVyZUV2ZW50LmRlbHRhWSgpIC8gdGlj
a0Rpdmlzb3IsIFNjcm9sbEJ5UGl4ZWxXaGVlbEV2ZW50LCBnZXN0dXJlRXZlbnQuc2hpZnRLZXko
KSwgZ2VzdHVyZUV2ZW50LmN0cmxLZXkoKSwgZ2VzdHVyZUV2ZW50LmFsdEtleSgpLCBnZXN0dXJl
RXZlbnQubWV0YUtleSgpKTsKKyAgICBkZWZhdWx0UHJldmVudGVkIHw9IGhhbmRsZVdoZWVsRXZl
bnQoc3ludGhldGljV2hlZWxFdmVudCk7CisgICAgcmV0dXJuIGRlZmF1bHRQcmV2ZW50ZWQ7Cit9
CisKICNlbmRpZgogCit2b2lkIEV2ZW50SGFuZGxlcjo6bm9kZUZvclRhcEdlc3R1cmVBdFRvdWNo
UG9pbnQoY29uc3QgSW50UG9pbnQmIGNlbnRlciwgY29uc3QgSW50U2l6ZSYgcmFkaXVzLCBJbnRQ
b2ludCYgdGFyZ2V0UG9pbnQsIE5vZGUqJiB0YXJnZXROb2RlKQoreworICAgIEhpdFRlc3RSZXF1
ZXN0OjpIaXRUZXN0UmVxdWVzdFR5cGUgaGl0VHlwZSA9IEhpdFRlc3RSZXF1ZXN0OjpSZWFkT25s
eSB8IEhpdFRlc3RSZXF1ZXN0OjpBY3RpdmU7CisgICAgSW50UmVjdCB0b3VjaFJlY3QoY2VudGVy
LXJhZGl1cywgSW50U2l6ZShyYWRpdXMud2lkdGgoKSoyLCByYWRpdXMuaGVpZ2h0KCkqMikpOwor
ICAgIHRhcmdldE5vZGUgPSAwOworCisgICAgSGl0VGVzdFJlc3VsdCByZXN1bHQgPSBoaXRUZXN0
UmVzdWx0QXRQb2ludChjZW50ZXIsIC8qYWxsb3dTaGFkb3dDb250ZW50Ki8gZmFsc2UsIGZhbHNl
LCBEb250SGl0VGVzdFNjcm9sbGJhcnMsIGhpdFR5cGUsIHJhZGl1cyk7CisKKyAgICAvLyBGSVhN
RTogSWYgaW5uZXJOb2RlIHdhcyB3b3JraW5nLCB3ZSBjb3VsZCBmaXJzdCBjaGVjayBpZiB0aGUg
aW5uZXJub2RlIHdhcyBhIHZhbGlkIHJlc3VsdCwgYW5kIGp1c3QgcmV0dXJuIHRoYXQuCisgICAg
Ly8gVW5mb3J0dW5hdGVseSB3aGVuIHVzaW5nIHJlY3QtYmFzZWQgaGl0LXRlc3RpbmcsIHRoZSBy
ZXR1cm5lZCBpbm5lck5vZGUgaXMgY3VycmVudGx5IGp1c3QgYSByYW5kb20gbm9kZSBmcm9tIHRo
ZSByZXN1bHQsCisgICAgLy8gYW5kIG5vdCB0aGUgYWN0dWFsIGlubmVyTm9kZS4KKworICAgIEhp
dFRlc3RSZXN1bHRNZXRyaWNzOjpIaXRMaXN0IGhpdGxpc3Q7CisgICAgSGl0VGVzdFJlc3VsdE1l
dHJpY3M6OmNvbXBpbGVIaXRMaXN0KHJlc3VsdCwgaGl0bGlzdCwgSGl0VGVzdFJlc3VsdE1ldHJp
Y3M6Om5vZGVSZXNwb25kaW5nVG9UYXBHZXN0dXJlKTsKKyAgICBpZiAoSGl0VGVzdFJlc3VsdE1l
dHJpY3M6OmZpbmRDbG9zZXN0Tm9kZSh0YXJnZXROb2RlLCB0YXJnZXRQb2ludCwgY2VudGVyLCB0
b3VjaFJlY3QsIGhpdGxpc3QpKSB7CisgICAgICAgIHJldHVybjsKKyAgICB9IGVsc2UgeworICAg
ICAgICAvLyBEZWZhdWx0IHRvIGp1c3QgcmV0dXJuaW5nIGlubmVyTm9kZS4KKyAgICAgICAgdGFy
Z2V0UG9pbnQgPSBjZW50ZXI7CisgICAgICAgIHRhcmdldE5vZGUgPSByZXN1bHQuaW5uZXJOb2Rl
KCk7CisgICAgfQorfQorCiAjaWYgRU5BQkxFKENPTlRFWFRfTUVOVVMpCiBib29sIEV2ZW50SGFu
ZGxlcjo6c2VuZENvbnRleHRNZW51RXZlbnQoY29uc3QgUGxhdGZvcm1Nb3VzZUV2ZW50JiBldmVu
dCkKIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRXZlbnRIYW5kbGVyLmggYi9T
b3VyY2UvV2ViQ29yZS9wYWdlL0V2ZW50SGFuZGxlci5oCmluZGV4IDc3MzNhMGYuLjUxOTJhYTUg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRXZlbnRIYW5kbGVyLmgKKysrIGIvU291
cmNlL1dlYkNvcmUvcGFnZS9FdmVudEhhbmRsZXIuaApAQCAtMzEsNiArMzEsNyBAQAogI2luY2x1
ZGUgIkZvY3VzRGlyZWN0aW9uLmgiCiAjaW5jbHVkZSAiSGl0VGVzdFJlcXVlc3QuaCIKICNpbmNs
dWRlICJQbGF0Zm9ybU1vdXNlRXZlbnQuaCIKKyNpbmNsdWRlICJQbGF0Zm9ybVRvdWNoUG9pbnQu
aCIKICNpbmNsdWRlICJTY3JvbGxUeXBlcy5oIgogI2luY2x1ZGUgIlRleHRFdmVudElucHV0VHlw
ZS5oIgogI2luY2x1ZGUgIlRleHRHcmFudWxhcml0eS5oIgpAQCAtMTYyLDYgKzE2Myw5IEBAIHB1
YmxpYzoKIAogI2lmIEVOQUJMRShHRVNUVVJFX0VWRU5UUykKICAgICBib29sIGhhbmRsZUdlc3R1
cmVFdmVudChjb25zdCBQbGF0Zm9ybUdlc3R1cmVFdmVudCYpOworICAgIGJvb2wgaGFuZGxlR2Vz
dHVyZVRhcChjb25zdCBQbGF0Zm9ybUdlc3R1cmVFdmVudCYpOworICAgIGJvb2wgaGFuZGxlR2Vz
dHVyZVNjcm9sbFVwZGF0ZShjb25zdCBQbGF0Zm9ybUdlc3R1cmVFdmVudCYpOworICAgIHZvaWQg
bm9kZUZvclRhcEdlc3R1cmVBdFRvdWNoUG9pbnQoY29uc3QgSW50UG9pbnQmIGNlbnRlciwgY29u
c3QgSW50U2l6ZSYgcmFkaXVzLCBJbnRQb2ludCYgdGFyZ2V0UG9pbnQsIE5vZGUqJiB0YXJnZXRO
b2RlKTsKICNlbmRpZgogCiAjaWYgRU5BQkxFKENPTlRFWFRfTUVOVVMpCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9IaXRUZXN0UmVzdWx0TWV0cmljcy5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9IaXRUZXN0UmVzdWx0TWV0cmljcy5jcHAKbmV3IGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDAwMDAwMC4uODQ5ZWJlNwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL0hpdFRlc3RSZXN1bHRNZXRyaWNzLmNwcApAQCAtMCwwICsxLDE3OSBA
QAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBOb2tpYSBDb3Jwb3JhdGlvbiBhbmQvb3IgaXRz
IHN1YnNpZGlhcnkoLWllcykKKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsg
eW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRl
cm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJs
aXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9u
IDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24u
CisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQg
d2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZl
biB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJh
bCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2
ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vu
c2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIu
ICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMu
LCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0x
MzAxLCBVU0EuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorCisjaW5jbHVkZSAiQ29udGFp
bmVyTm9kZS5oIgorI2luY2x1ZGUgIkZsb2F0UG9pbnQuaCIKKyNpbmNsdWRlICJGbG9hdFF1YWQu
aCIKKyNpbmNsdWRlICJIaXRUZXN0UmVzdWx0LmgiCisjaW5jbHVkZSAiSGl0VGVzdFJlc3VsdE1l
dHJpY3MuaCIKKyNpbmNsdWRlICJJbnRQb2ludC5oIgorI2luY2x1ZGUgIkludFNpemUuaCIKKyNp
bmNsdWRlICJOb2RlLmgiCisjaW5jbHVkZSAiUmVuZGVyT2JqZWN0LmgiCisjaW5jbHVkZSAiUmVu
ZGVyU3R5bGUuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCituYW1lc3BhY2UgSGl0VGVzdFJl
c3VsdE1ldHJpY3MgeworCisvLyBUaGVzZSBmdW5jdGlvbnMgdGFrZXMgbm9uLWNvbnN0IE5vZGUq
IGJlY2F1c2UgaXNDb250ZW50RWRpdGFibGUgaXMgYSBub24tY29uc3QgZnVuY3Rpb24uCitOb2Rl
KiBub2RlUmVzcG9uZGluZ1RvVGFwR2VzdHVyZShOb2RlKiBub2RlKQoreworICAgIGZvciAoOyBu
b2RlOyBub2RlID0gbm9kZS0+cGFyZW50T3JIb3N0Tm9kZSgpKSB7CisgICAgICAgIGlmIChub2Rl
LT5pc0xpbmsoKQorICAgICAgICAgICAgfHwgbm9kZS0+aXNDb250ZW50RWRpdGFibGUoKQorICAg
ICAgICAgICAgfHwgbm9kZS0+aXNNb3VzZUZvY3VzYWJsZSgpKQorICAgICAgICAgICAgLy8gIyMj
IGltcGxlbWVudCBoYXNEZWZhdWx0RXZlbnRIYW5kbGVyIGFuZCB1c2UgdGhhdCBpbnN0ZWFkIG9m
IGFsbCBvZiB0aGVzZSBhYm92ZSBjYWxscz8KKyAgICAgICAgICAgIHJldHVybiBub2RlOworICAg
ICAgICBpZiAobm9kZS0+aGFzRXZlbnRMaXN0ZW5lcnMoKSAmJgorICAgICAgICAgICAgICAgIChu
b2RlLT5oYXNFdmVudExpc3RlbmVycyhldmVudE5hbWVzKCkuY2xpY2tFdmVudCkKKyAgICAgICAg
ICAgICAgICB8fCBub2RlLT5oYXNFdmVudExpc3RlbmVycyhldmVudE5hbWVzKCkuRE9NQWN0aXZh
dGVFdmVudCkKKyAgICAgICAgICAgICAgICB8fCBub2RlLT5oYXNFdmVudExpc3RlbmVycyhldmVu
dE5hbWVzKCkubW91c2Vkb3duRXZlbnQpCisgICAgICAgICAgICAgICAgfHwgbm9kZS0+aGFzRXZl
bnRMaXN0ZW5lcnMoZXZlbnROYW1lcygpLm1vdXNldXBFdmVudCkKKyAgICAgICAgICAgICAgICB8
fCBub2RlLT5oYXNFdmVudExpc3RlbmVycyhldmVudE5hbWVzKCkubW91c2Vtb3ZlRXZlbnQpCisg
ICAgICAgICAgICAgICAgIC8vIENoZWNraW5nIGZvciBmb2N1cyBldmVudHMgaXMgbm90IG5lY2Vz
c2FyeSBzaW5jZSB0aGV5IGNhbiBvbmx5IGZpcmUgb24KKyAgICAgICAgICAgICAgICAgLy8gZm9j
dXNhYmxlIGVsZW1lbnRzIHdoaWNoIGhhdmUgYmVlbiBjYXB0dXJlZCBhYm92ZS4KKyAgICAgICAg
ICAgICkpCisgICAgICAgICAgICByZXR1cm4gbm9kZTsKKyAgICAgICAgaWYgKG5vZGUtPnJlbmRl
clN0eWxlKCkpIHsKKyAgICAgICAgICAgIC8vIEFjY2VwdCBub2RlcyB0aGF0IGhhcyBhIENTUyBl
ZmZlY3Qgd2hlbiB0b3VjaGVkLgorICAgICAgICAgICAgaWYgKG5vZGUtPnJlbmRlclN0eWxlKCkt
PmFmZmVjdGVkQnlBY3RpdmVSdWxlcygpIHx8IG5vZGUtPnJlbmRlclN0eWxlKCktPmFmZmVjdGVk
QnlIb3ZlclJ1bGVzKCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIG5vZGU7CisgICAgICAgIH0K
KyAgICB9CisgICAgcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBhcHBlbmRBYnNv
bHV0ZVF1YWRzRm9yTm9kZVRvSGl0TGlzdChOb2RlKiBub2RlLCBIaXRMaXN0JiBoaXRsaXN0KQor
eworICAgIC8vIFNpbmNlIHRoZSBub2RlIGlzIGEgcmVzdWx0IG9mIGEgaGl0IHRlc3QsIHdlIGFy
ZSBhbHJlYWR5IGVuc3VyZWQgaXQgaGFzIGEgcmVuZGVyZXIuCisgICAgQVNTRVJUKG5vZGUtPnJl
bmRlcmVyKCkpOworCisgICAgVmVjdG9yPEZsb2F0UXVhZD4gcXVhZHM7CisgICAgbm9kZS0+cmVu
ZGVyZXIoKS0+YWJzb2x1dGVRdWFkcyhxdWFkcyk7CisKKyAgICBWZWN0b3I8RmxvYXRRdWFkPjo6
Y29uc3RfaXRlcmF0b3IgaXQgPSBxdWFkcy5iZWdpbigpOworICAgIGNvbnN0IFZlY3RvcjxGbG9h
dFF1YWQ+Ojpjb25zdF9pdGVyYXRvciBpdGVuZCA9IHF1YWRzLmVuZCgpOworICAgIGZvcig7IGl0
ICE9IGl0ZW5kOyArK2l0KQorICAgICAgICBoaXRsaXN0LmFwcGVuZChIaXRUZXN0UXVhZChub2Rl
LCAqaXQpKTsKK30KKworLy8gQ29tcGlsZSBhIGxpc3Qgb2YgYWJzb2x1dGUgcmVjdHMgcmVwcmVz
ZW5kaW5nIG5vZGVzIHJlc3BvbmRpbmcgdGhlIHRhcCBnZXN0dXJlLgordm9pZCBjb21waWxlSGl0
TGlzdChjb25zdCBIaXRUZXN0UmVzdWx0JiByZXN1bHQsIEhpdExpc3QmIGhpdGxpc3QsIE5vZGVG
aWx0ZXIgbm9kZUZpbHRlcikKK3sKKyAgICAvLyBXZSBjb21waWxlIHRoZSBsaXN0IG9mIGNvbXBv
bmVudCBhYnNvbHV0ZSBxdWFkcyBpbnN0ZWFkIG9mIHVzaW5nIHRoZSBib3VuZGluZyByZWN0Cisg
ICAgLy8gdG8gYmUgYWJsZSB0byBwZXJmb3JtIGJldHRlciBoaXQtdGVzdGluZyBvbiBpbmxpbmUg
bGlua3Mgb24gbGluZS1icmVha3MuCisKKyAgICBjb25zdCBIaXRUZXN0UmVzdWx0OjpOb2RlU2V0
JiBpbnRlcnNlY3RlZE5vZGVzID0gcmVzdWx0LnJlY3RCYXNlZFRlc3RSZXN1bHQoKTsKKworICAg
IFZlY3RvcjxwYWlyPE5vZGUqLCBOb2RlKj4gPiBjYW5kaWRhdGVzOworICAgIEhhc2hTZXQ8Tm9k
ZSo+IGFuY2VzdG9yRmlsdGVyOworCisgICAgSGl0VGVzdFJlc3VsdDo6Tm9kZVNldDo6Y29uc3Rf
aXRlcmF0b3IgaXQgPSBpbnRlcnNlY3RlZE5vZGVzLmJlZ2luKCk7CisgICAgY29uc3QgSGl0VGVz
dFJlc3VsdDo6Tm9kZVNldDo6Y29uc3RfaXRlcmF0b3IgaXRlbmQgPSBpbnRlcnNlY3RlZE5vZGVz
LmVuZCgpOworICAgIGZvcig7IGl0ICE9IGl0ZW5kOyArK2l0KSB7CisgICAgICAgIE5vZGUqIHJl
c3BvbmRpbmdOb2RlID0gbm9kZUZpbHRlcihpdC0+Z2V0KCkpOworICAgICAgICBpZiAoIXJlc3Bv
bmRpbmdOb2RlKQorICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIGNhbmRpZGF0ZXMuYXBw
ZW5kKHBhaXI8Tm9kZSosTm9kZSo+KGl0LT5nZXQoKSwgcmVzcG9uZGluZ05vZGUpKTsKKyAgICAg
ICAgLy8gUmVtb3ZlIGFueSBhbmNlc3RvcnMgb2Ygb3RoZXIgcmVzcG9uZGVycy4gVGhpcyBpcyB0
byBhbHdheXMgcHJlZmVyIHRoZSBpbm5lci1tb3N0IGV2ZW50LWhhbmRsZXJzLgorICAgICAgICAv
LyBTbyBhIGxpbmsgaXMgYWx3YXlzIHByZWZlcnJlZCBldmVuIHdoZW4gY29udGFpbmVkIGluIGFu
IGVsZW1lbnQgdGhhdCBtb25pdG9ycyBhbGwgY2xpY2stZXZlbnRzLgorICAgICAgICBmb3IgKE5v
ZGUqIG5vZGUgPSByZXNwb25kaW5nTm9kZS0+cGFyZW50T3JIb3N0Tm9kZSgpOyBub2RlOyBub2Rl
ID0gbm9kZS0+cGFyZW50T3JIb3N0Tm9kZSgpKSB7CisgICAgICAgICAgICBwYWlyPEhhc2hTZXQ8
Tm9kZSo+OjppdGVyYXRvciwgYm9vbD4gdG1wID0gYW5jZXN0b3JGaWx0ZXIuYWRkKG5vZGUpOwor
ICAgICAgICAgICAgaWYgKCF0bXAuc2Vjb25kKQorICAgICAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICB9CisgICAgfQorCisgICAgVmVjdG9yPHBhaXI8Tm9kZSosIE5vZGUqPiA+Ojpjb25zdF9p
dGVyYXRvciBjaXQgPSBjYW5kaWRhdGVzLmJlZ2luKCk7CisgICAgY29uc3QgVmVjdG9yPHBhaXI8
Tm9kZSosIE5vZGUqPiA+Ojpjb25zdF9pdGVyYXRvciBjaXRlbmQgPSBjYW5kaWRhdGVzLmVuZCgp
OworICAgIGZvcig7IGNpdCAhPSBjaXRlbmQ7ICsrY2l0KSB7CisgICAgICAgIGlmIChhbmNlc3Rv
ckZpbHRlci5jb250YWlucyhjaXQtPnNlY29uZCkpCisgICAgICAgICAgICBjb250aW51ZTsKKyAg
ICAgICAgYXBwZW5kQWJzb2x1dGVRdWFkc0Zvck5vZGVUb0hpdExpc3QoY2l0LT5maXJzdCwgaGl0
bGlzdCk7CisgICAgfQorfQorCisvLyBSZXR1cm5zIHRoZSBkaXN0YW5jZSBzcXVhcmVkIHRvIHRo
ZSBib3VuZGluZyBib3ggY2VudGVybGluZS4uCitmbG9hdCBkaXN0YW5jZVRvSGl0VGVzdFF1YWQo
Y29uc3QgTGF5b3V0UG9pbnQmIHRvdWNoSG90c3BvdCwgY29uc3QgTGF5b3V0UmVjdCYsIGNvbnN0
IEhpdFRlc3RRdWFkJiBoaXRUZXN0UXVhZCkKK3sKKyAgICAvLyBVc2luZyB0aGUgYm91bmRpbmcg
Ym94IG1lYW5zIHRoZSBkaXN0YW5jZSB0byBjZW50ZXJsaW5lIGlzIGxlc3MgbWVhbmluZ2Z1bGwg
Zm9yIHRyYW5zZm9ybWVkIHJlY3RhbmdsZXMKKyAgICAvLyBidXQgY2FsY3VsYXRpbmcgdGhlIGRp
c3RhbmNlIHRvIHF1YWRzIGNhbiBiZSB2ZXJ5IGV4cGVuc2l2ZS4KKyAgICBJbnRSZWN0IHJlY3Qg
PSBoaXRUZXN0UXVhZC5ib3VuZGluZ0JveCgpOworCisgICAgcmV0dXJuIHJlY3QuZGlzdGFuY2VT
cXVhcmVkRnJvbUNlbnRlckxpbmVUb1BvaW50KHRvdWNoSG90c3BvdCk7Cit9CisKKy8vIFJldHVy
bnMgdGhlIGFyZWEgb2YgdGhlIGludGVyc2VjdGlvbi4KK2Zsb2F0IG92ZXJsYXBXaXRoSGl0VGVz
dFF1YWQoY29uc3QgTGF5b3V0UG9pbnQmLCBjb25zdCBMYXlvdXRSZWN0JiB0b3VjaFJlY3QsIGNv
bnN0IEhpdFRlc3RRdWFkJiBoaXRUZXN0UXVhZCkKK3sKKyAgICBJbnRSZWN0IHJlY3QgPSBoaXRU
ZXN0UXVhZC5ib3VuZGluZ0JveCgpOworICAgIEludFJlY3QgaW50ZXJzZWN0aW9uID0gcmVjdDsK
KyAgICByZWN0LmludGVyc2VjdCh0b3VjaFJlY3QpOworCisgICAgcmV0dXJuIGludGVyc2VjdGlv
bi5zaXplKCkuYXJlYSgpOworfQorCitib29sIGZpbmRDbG9zZXN0Tm9kZShOb2RlKiYgdGFyZ2V0
Tm9kZSwgTGF5b3V0UG9pbnQmIHRhcmdldFBvaW50LCBjb25zdCBMYXlvdXRQb2ludCYgdG91Y2hI
b3RzcG90LCBjb25zdCBMYXlvdXRSZWN0JiB0b3VjaEFyZWEsIEhpdExpc3QmIGhpdGxpc3QpCit7
CisgICAgdGFyZ2V0Tm9kZSA9IDA7CisKKyAgICBmbG9hdCBiZXN0TWV0cmljID0gSU5GSU5JVFk7
CisgICAgSGl0TGlzdDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBoaXRsaXN0LmJlZ2luKCk7CisgICAg
SGl0TGlzdDo6Y29uc3RfaXRlcmF0b3IgaXRlbmQgPSBoaXRsaXN0LmVuZCgpOworICAgIGZvcig7
IGl0ICE9IGl0ZW5kOyArK2l0KSB7CisgICAgICAgIE5vZGUqIGhpdE5vZGUgPSBpdC0+bm9kZSgp
OworICAgICAgICBmbG9hdCBoaXRNZXRyaWMgPSBkaXN0YW5jZVRvSGl0VGVzdFF1YWQodG91Y2hI
b3RzcG90LCB0b3VjaEFyZWEsICppdCk7CisgICAgICAgIGlmIChoaXRNZXRyaWMgPCBiZXN0TWV0
cmljKSB7CisgICAgICAgICAgICB0YXJnZXRQb2ludCA9IHJvdW5kZWRMYXlvdXRQb2ludChpdC0+
cXVhZCgpLmNlbnRlcigpKTsKKyAgICAgICAgICAgIHRhcmdldE5vZGUgPSBoaXROb2RlOworICAg
ICAgICAgICAgYmVzdE1ldHJpYyA9IGhpdE1ldHJpYzsKKyAgICAgICAgICAgIGlmIChiZXN0TWV0
cmljID09IDAuMCkgLy8gUGVyZmVjdCBoaXQuCisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4gKHRhcmdldE5vZGUpOworfQorCitib29sIGZpbmRN
b3N0T3ZlcmxhcHBpbmdOb2RlKE5vZGUqJiB0YXJnZXROb2RlLCBMYXlvdXRQb2ludCYgdGFyZ2V0
UG9pbnQsIGNvbnN0IExheW91dFBvaW50JiB0b3VjaEhvdHNwb3QsIGNvbnN0IExheW91dFJlY3Qm
IHRvdWNoQXJlYSwgSGl0TGlzdCYgaGl0bGlzdCkKK3sKKyAgICB0YXJnZXROb2RlID0gMDsKKwor
ICAgIGZsb2F0IGJlc3RNZXRyaWMgPSAwOworICAgIEhpdExpc3Q6OmNvbnN0X2l0ZXJhdG9yIGl0
ID0gaGl0bGlzdC5iZWdpbigpOworICAgIEhpdExpc3Q6OmNvbnN0X2l0ZXJhdG9yIGl0ZW5kID0g
aGl0bGlzdC5lbmQoKTsKKyAgICBmb3IoOyBpdCAhPSBpdGVuZDsgKytpdCkgeworICAgICAgICBO
b2RlKiBoaXROb2RlID0gaXQtPm5vZGUoKTsKKyAgICAgICAgZmxvYXQgaGl0TWV0cmljID0gb3Zl
cmxhcFdpdGhIaXRUZXN0UXVhZCh0b3VjaEhvdHNwb3QsIHRvdWNoQXJlYSwgKml0KTsKKyAgICAg
ICAgaWYgKGhpdE1ldHJpYyA+IGJlc3RNZXRyaWMpIHsKKyAgICAgICAgICAgIHRhcmdldFBvaW50
ID0gcm91bmRlZExheW91dFBvaW50KGl0LT5xdWFkKCkuY2VudGVyKCkpOworICAgICAgICAgICAg
dGFyZ2V0Tm9kZSA9IGhpdE5vZGU7CisgICAgICAgICAgICBiZXN0TWV0cmljID0gaGl0TWV0cmlj
OworICAgICAgICB9CisgICAgfQorCisgICAgcmV0dXJuICh0YXJnZXROb2RlKTsKK30KKworfSAv
LyBuYW1lc3BhY2UgSGl0VGVzdFJlc3VsdE1ldHJpY3MKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29y
ZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vSGl0VGVzdFJlc3VsdE1ldHJp
Y3MuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL0hpdFRlc3RSZXN1bHRNZXRyaWNzLmgKbmV3
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWQyNDIwZAotLS0gL2Rldi9udWxsCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL0hpdFRlc3RSZXN1bHRNZXRyaWNzLmgKQEAgLTAs
MCArMSw2NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBOb2tpYSBDb3Jwb3JhdGlvbiBh
bmQvb3IgaXRzIHN1YnNpZGlhcnkoLWllcykKKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBz
b2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5k
ZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5z
ZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisg
KiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVy
IHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3Bl
IHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdp
dGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9y
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJh
cnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBz
aG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVi
bGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09Q
WUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0
aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBN
QSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2lmbmRlZiBIaXRSZXN1bHRNZXRyaWNfaAorI2Rl
ZmluZSBIaXRSZXN1bHRNZXRyaWNfaAorCisjaW5jbHVkZSAiSGl0VGVzdFJlc3VsdC5oIgorI2lu
Y2x1ZGUgIkZsb2F0UXVhZC5oIgorI2luY2x1ZGUgIkxheW91dFR5cGVzLmgiCisjaW5jbHVkZSAi
Tm9kZS5oIgorI2luY2x1ZGUgInd0Zi9WZWN0b3IuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgewor
CituYW1lc3BhY2UgSGl0VGVzdFJlc3VsdE1ldHJpY3MgeworCisgICAgY2xhc3MgSGl0VGVzdFF1
YWQgeworICAgIHB1YmxpYzoKKyAgICAgICAgSGl0VGVzdFF1YWQoTm9kZSogbm9kZSwgY29uc3Qg
RmxvYXRRdWFkJiBxdWFkKSA6IG1fbm9kZShub2RlKSwgbV9xdWFkKHF1YWQpIHt9CisKKyAgICAg
ICAgTm9kZSogbm9kZSgpIGNvbnN0IHsgcmV0dXJuIG1fbm9kZTsgfQorICAgICAgICBGbG9hdFF1
YWQgcXVhZCgpIGNvbnN0IHsgcmV0dXJuIG1fcXVhZDsgfQorICAgICAgICBMYXlvdXRSZWN0IGJv
dW5kaW5nQm94KCkgY29uc3QgeyByZXR1cm4gbV9xdWFkLmVuY2xvc2luZ0JvdW5kaW5nQm94KCk7
IH0KKworICAgIHByaXZhdGU6CisgICAgICAgIE5vZGUqIG1fbm9kZTsKKyAgICAgICAgRmxvYXRR
dWFkIG1fcXVhZDsKKyAgICB9OworCisgICAgdHlwZWRlZiBWZWN0b3I8SGl0VGVzdFF1YWQ+IEhp
dExpc3Q7CisKKyAgICB0eXBlZGVmIE5vZGUqICgqTm9kZUZpbHRlcikoTm9kZSopOworICAgIE5v
ZGUqIG5vZGVSZXNwb25kaW5nVG9UYXBHZXN0dXJlKE5vZGUqIG5vZGUpOworCisgICAgZmxvYXQg
ZGlzdGFuY2VUb0hpdFRlc3RRdWFkKGNvbnN0IExheW91dFBvaW50JiB0b3VjaEhvdHNwb3QsIGNv
bnN0IExheW91dFJlY3QmIHRvdWNoQXJlYSwgY29uc3QgSGl0VGVzdFF1YWQmIGhpdFRlc3RRdWFk
KTsKKyAgICBmbG9hdCBvdmVybGFwV2l0aEhpdFRlc3RRdWFkKGNvbnN0IExheW91dFBvaW50JiB0
b3VjaEhvdHNwb3QsIGNvbnN0IExheW91dFJlY3QmIHRvdWNoQXJlYSwgY29uc3QgSGl0VGVzdFF1
YWQmIGhpdFRlc3RRdWFkKTsKKworICAgIHZvaWQgY29tcGlsZUhpdExpc3QoY29uc3QgSGl0VGVz
dFJlc3VsdCYgcmVzdWx0LCBIaXRMaXN0JiBoaXRsaXN0LCBOb2RlRmlsdGVyKTsKKworICAgIGJv
b2wgZmluZENsb3Nlc3ROb2RlKE5vZGUqJiB0YXJnZXROb2RlLCBMYXlvdXRQb2ludCYgdGFyZ2V0
UG9pbnQsIGNvbnN0IExheW91dFBvaW50JiB0b3VjaEhvdHNwb3QsIGNvbnN0IExheW91dFJlY3Qm
IHRvdWNoQXJlYSwgSGl0TGlzdCYgaGl0bGlzdCk7CisgICAgYm9vbCBmaW5kTW9zdE92ZXJsYXBw
aW5nTm9kZShOb2RlKiYgdGFyZ2V0Tm9kZSwgTGF5b3V0UG9pbnQmIHRhcmdldFBvaW50LCBjb25z
dCBMYXlvdXRQb2ludCYgdG91Y2hIb3RzcG90LCBjb25zdCBMYXlvdXRSZWN0JiB0b3VjaEFyZWEs
IEhpdExpc3QmIGhpdGxpc3QpOworCit9IC8vIG5hbWVzcGFjZSBIaXRUZXN0UmVzdWx0TWV0cmlj
cworCisKK30gLy8gbmFtZXNwYWNlCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vUGxhdGZvcm1Ub3VjaFBvaW50LmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9QbGF0Zm9ybVRvdWNoUG9pbnQuaAppbmRleCBiMTgxOTJkLi42NGZmNTY1IDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9QbGF0Zm9ybVRvdWNoUG9pbnQuaAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9QbGF0Zm9ybVRvdWNoUG9pbnQuaApAQCAtMjEsNiArMjEsOCBA
QAogI2RlZmluZSBQbGF0Zm9ybVRvdWNoUG9pbnRfaAogCiAjaW5jbHVkZSAiSW50UG9pbnQuaCIK
KyNpbmNsdWRlICJJbnRSZWN0LmgiCisjaW5jbHVkZSAiSW50U2l6ZS5oIgogI2luY2x1ZGUgPHd0
Zi9WZWN0b3IuaD4KIAogI2lmIEVOQUJMRShUT1VDSF9FVkVOVFMpCkBAIC02Miw2ICs2NCw4IEBA
IHB1YmxpYzoKICAgICBmbG9hdCByb3RhdGlvbkFuZ2xlKCkgY29uc3QgeyByZXR1cm4gbV9yb3Rh
dGlvbkFuZ2xlOyB9CiAgICAgZmxvYXQgZm9yY2UoKSBjb25zdCB7IHJldHVybiBtX2ZvcmNlOyB9
CiAKKyAgICBJbnRSZWN0IHJlY3QoKSBjb25zdCB7IHJldHVybiBJbnRSZWN0KG1fcG9zLUludFNp
emUobV9yYWRpdXNYLCBtX3JhZGl1c1kpLCBJbnRTaXplKG1fcmFkaXVzWCoyLCBtX3JhZGl1c1kq
MikpOyB9CisKIHByb3RlY3RlZDoKICAgICB1bnNpZ25lZCBtX2lkOwogICAgIFN0YXRlIG1fc3Rh
dGU7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9GbG9hdFBv
aW50LmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9GbG9hdFBvaW50LmgKaW5k
ZXggYmY5MDFlNS4uMzEwN2YwMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvRmxvYXRQb2ludC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL0Zsb2F0UG9pbnQuaApAQCAtNjksNiArNjksNyBAQCBwdWJsaWM6CiAgICAgRmxvYXRQb2lu
dChmbG9hdCB4LCBmbG9hdCB5KSA6IG1feCh4KSwgbV95KHkpIHsgfQogICAgIEZsb2F0UG9pbnQo
Y29uc3QgSW50UG9pbnQmKTsKICAgICBGbG9hdFBvaW50KGNvbnN0IEZyYWN0aW9uYWxMYXlvdXRQ
b2ludCYpOworICAgIGV4cGxpY2l0IEZsb2F0UG9pbnQoRmxvYXRTaXplIHNpemUpIDogbV94KHNp
emUud2lkdGgoKSksIG1feShzaXplLmhlaWdodCgpKSB7IH0KIAogICAgIHN0YXRpYyBGbG9hdFBv
aW50IHplcm8oKSB7IHJldHVybiBGbG9hdFBvaW50KCk7IH0KIApAQCAtMTMwLDYgKzEzMSw5IEBA
IHB1YmxpYzoKICAgICAgICAgcmV0dXJuIG1feCAqIG1feCArIG1feSAqIG1feTsKICAgICB9CiAK
KyAgICBmbG9hdCBkaXN0YW5jZVRvUG9pbnQoY29uc3QgRmxvYXRQb2ludCYgcCkgY29uc3Q7Cisg
ICAgZmxvYXQgZGlzdGFuY2VTcXVhcmVkVG9Qb2ludChjb25zdCBGbG9hdFBvaW50JiBwKSBjb25z
dDsKKwogICAgIEZsb2F0UG9pbnQgZXhwYW5kZWRUbyhjb25zdCBGbG9hdFBvaW50JiBvdGhlcikg
Y29uc3QKICAgICB7CiAgICAgICAgIHJldHVybiBGbG9hdFBvaW50KHN0ZDo6bWF4KG1feCwgb3Ro
ZXIubV94KSwgc3RkOjptYXgobV95LCBvdGhlci5tX3kpKTsKQEAgLTIzOSw2ICsyNDMsMTcgQEAg
aW5saW5lIGZsb2F0IG9wZXJhdG9yKihjb25zdCBGbG9hdFBvaW50JiBhLCBjb25zdCBGbG9hdFBv
aW50JiBiKQogICAgIHJldHVybiBhLmRvdChiKTsKIH0KIAoraW5saW5lIGZsb2F0IEZsb2F0UG9p
bnQ6OmRpc3RhbmNlVG9Qb2ludChjb25zdCBGbG9hdFBvaW50JiBwKSBjb25zdAoreworICAgIHJl
dHVybiAoKnRoaXMgLSBwKS5kaWFnb25hbExlbmd0aCgpOworfQorCitpbmxpbmUgZmxvYXQgRmxv
YXRQb2ludDo6ZGlzdGFuY2VTcXVhcmVkVG9Qb2ludChjb25zdCBGbG9hdFBvaW50JiBwKSBjb25z
dAoreworICAgIHJldHVybiAoKnRoaXMgLSBwKS5kaWFnb25hbExlbmd0aFNxdWFyZWQoKTsKK30K
KworCiBpbmxpbmUgSW50UG9pbnQgcm91bmRlZEludFBvaW50KGNvbnN0IEZsb2F0UG9pbnQmIHAp
CiB7CiAgICAgcmV0dXJuIEludFBvaW50KHN0YXRpY19jYXN0PGludD4ocm91bmRmKHAueCgpKSks
IHN0YXRpY19jYXN0PGludD4ocm91bmRmKHAueSgpKSkpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRmxvYXRRdWFkLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9GbG9hdFF1YWQuaAppbmRleCBiNWUyYThjLi4zN2FiNzhjIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9GbG9hdFF1YWQuaAorKysgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9GbG9hdFF1YWQuaApAQCAtODgsNiArODgs
OSBAQCBwdWJsaWM6CiAgICAgLy8gZnJvbSB0cmFuc2Zvcm1lZCByZWN0cy4KICAgICBib29sIGNv
bnRhaW5zUXVhZChjb25zdCBGbG9hdFF1YWQmKSBjb25zdDsKIAorICAgIC8vIFRoZSBjZW50ZXIg
b2YgdGhlIHF1YWQuIElmIHRoZSBxdWFkIGlzIHRoZSByZXN1bHQgb2YgYSBhZmZpbmUtdHJhbnNm
b3JtZWQgcmVjdGFuZ2xlIHRoaXMgaXMgdGhlIHNhbWUgYXMgdGhlIG9yaWdpbmFsIGNlbnRlciB0
cmFuc2Zvcm1lZC4KKyAgICBGbG9hdFBvaW50IGNlbnRlcigpIGNvbnN0IHsgcmV0dXJuIEZsb2F0
UG9pbnQoKG1fcDEueCgpK21fcDIueCgpK21fcDMueCgpK21fcDQueCgpKS80LiwgKG1fcDEueSgp
K21fcDIueSgpK21fcDMueSgpK21fcDQueSgpKS80Lik7IH0KKwogICAgIEZsb2F0UmVjdCBib3Vu
ZGluZ0JveCgpIGNvbnN0OwogICAgIEludFJlY3QgZW5jbG9zaW5nQm91bmRpbmdCb3goKSBjb25z
dAogICAgIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0Zs
b2F0UmVjdC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9GbG9hdFJlY3Qu
Y3BwCmluZGV4IDczNzQ3M2MuLjkwOWMxODUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL0Zsb2F0UmVjdC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvRmxvYXRSZWN0LmNwcApAQCAtMTQyLDYgKzE0Miw0MCBAQCB2b2lkIEZsb2F0
UmVjdDo6c2NhbGUoZmxvYXQgc3gsIGZsb2F0IHN5KQogICAgIG1fc2l6ZS5zZXRIZWlnaHQoaGVp
Z2h0KCkgKiBzeSk7CiB9CiAKK3N0YXRpYyBpbmxpbmUgZmxvYXQgZGlzdGFuY2VUb0ludGVydmFs
KGZsb2F0IHBvcywgZmxvYXQgc3RhcnQsIGZsb2F0IGVuZCkKK3sKKyAgICBpZiAocG9zIDwgc3Rh
cnQpCisgICAgICAgIHJldHVybiBzdGFydCAtIHBvczsKKyAgICBpZiAocG9zID4gZW5kKQorICAg
ICAgICByZXR1cm4gZW5kIC0gcG9zOworICAgIHJldHVybiAwOworfQorCitGbG9hdFNpemUgRmxv
YXRSZWN0OjpkaWZmZXJlbmNlVG9Qb2ludChjb25zdCBGbG9hdFBvaW50JiBwb2ludCkgY29uc3QK
K3sKKyAgICBmbG9hdCB4ZGlzdGFuY2UgPSBkaXN0YW5jZVRvSW50ZXJ2YWwocG9pbnQueCgpLCB4
KCksIG1heFgoKSk7CisgICAgZmxvYXQgeWRpc3RhbmNlID0gZGlzdGFuY2VUb0ludGVydmFsKHBv
aW50LnkoKSwgeSgpLCBtYXhZKCkpOworICAgIHJldHVybiBGbG9hdFNpemUoeGRpc3RhbmNlLCB5
ZGlzdGFuY2UpOworfQorCitmbG9hdCBGbG9hdFJlY3Q6OmRpc3RhbmNlVG9Qb2ludChjb25zdCBG
bG9hdFBvaW50JiBwKSBjb25zdAoreworICAgIHJldHVybiBzcXJ0ZihkaXN0YW5jZVNxdWFyZWRU
b1BvaW50KHApKTsKK30KKworRmxvYXRTaXplIEZsb2F0UmVjdDo6ZGlmZmVyZW5jZUZyb21DZW50
ZXJMaW5lVG9Qb2ludChjb25zdCBGbG9hdFBvaW50JiBwb2ludCkgY29uc3QKK3sKKyAgICAvLyBU
aGUgY2VudGVyLWxpbmUgaXMgdGhlIG5hdHVyYWwgY2VudGVyIG9mIGEgcmVjdGFuZ2xlLiBJdCBo
YXMgYW4gZXF1YWwgZGlzdGFuY2UgdG8gYWxsIHNpZGVzIG9mIHRoZSByZWN0YW5nbGUuCisgICAg
RmxvYXRQb2ludCBjZW50ZXJQb2ludCA9IGNlbnRlcigpOworICAgIGZsb2F0IHhkaXN0YW5jZSA9
IGNlbnRlclBvaW50LngoKSAtIHBvaW50LngoKTsKKyAgICBmbG9hdCB5ZGlzdGFuY2UgPSBjZW50
ZXJQb2ludC55KCkgLSBwb2ludC55KCk7CisgICAgaWYgKHdpZHRoKCkgPiBoZWlnaHQoKSkKKyAg
ICAgICAgeGRpc3RhbmNlID0gZGlzdGFuY2VUb0ludGVydmFsKHBvaW50LngoKSwgeCgpICsgKGhl
aWdodCgpIC8gMi4wKSwgbWF4WCgpIC0gKGhlaWdodCgpIC8gMi4wKSk7CisgICAgZWxzZQorICAg
ICAgICB5ZGlzdGFuY2UgPSBkaXN0YW5jZVRvSW50ZXJ2YWwocG9pbnQueSgpLCB5KCkgKyAod2lk
dGgoKSAvIDIuMCksIG1heFkoKSAtICh3aWR0aCgpIC8gMi4wKSk7CisgICAgcmV0dXJuIEZsb2F0
U2l6ZSh4ZGlzdGFuY2UsIHlkaXN0YW5jZSk7Cit9CisKIEZsb2F0UmVjdCB1bmlvblJlY3QoY29u
c3QgVmVjdG9yPEZsb2F0UmVjdD4mIHJlY3RzKQogewogICAgIEZsb2F0UmVjdCByZXN1bHQ7CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9GbG9hdFJlY3QuaCBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0Zsb2F0UmVjdC5oCmluZGV4IDRkNGVh
ZGYuLmZiNjNlNWYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L0Zsb2F0UmVjdC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0Zsb2F0
UmVjdC5oCkBAIC0xNzQsNiArMTc0LDEyIEBAIHB1YmxpYzoKICAgICB2b2lkIHNjYWxlKGZsb2F0
IHMpIHsgc2NhbGUocywgcyk7IH0KICAgICB2b2lkIHNjYWxlKGZsb2F0IHN4LCBmbG9hdCBzeSk7
CiAKKyAgICBGbG9hdFNpemUgZGlmZmVyZW5jZVRvUG9pbnQoY29uc3QgRmxvYXRQb2ludCYgcCkg
Y29uc3Q7CisgICAgRmxvYXRTaXplIGRpZmZlcmVuY2VGcm9tQ2VudGVyTGluZVRvUG9pbnQoY29u
c3QgRmxvYXRQb2ludCYgcCkgY29uc3Q7CisgICAgZmxvYXQgZGlzdGFuY2VTcXVhcmVkVG9Qb2lu
dChjb25zdCBGbG9hdFBvaW50JiBwKSBjb25zdCB7IHJldHVybiBkaWZmZXJlbmNlVG9Qb2ludChw
KS5kaWFnb25hbExlbmd0aFNxdWFyZWQoKTsgfQorICAgIGZsb2F0IGRpc3RhbmNlU3F1YXJlZEZy
b21DZW50ZXJMaW5lVG9Qb2ludChjb25zdCBGbG9hdFBvaW50JiBwKSBjb25zdCB7IHJldHVybiBk
aWZmZXJlbmNlRnJvbUNlbnRlckxpbmVUb1BvaW50KHApLmRpYWdvbmFsTGVuZ3RoU3F1YXJlZCgp
OyB9CisgICAgZmxvYXQgZGlzdGFuY2VUb1BvaW50KGNvbnN0IEZsb2F0UG9pbnQmIHApIGNvbnN0
OworCiAgICAgRmxvYXRSZWN0IHRyYW5zcG9zZWRSZWN0KCkgY29uc3QgeyByZXR1cm4gRmxvYXRS
ZWN0KG1fbG9jYXRpb24udHJhbnNwb3NlZFBvaW50KCksIG1fc2l6ZS50cmFuc3Bvc2VkU2l6ZSgp
KTsgfQogCiAgICAgLy8gUmUtaW5pdGlhbGl6ZXMgdGhpcyByZWN0YW5nbGUgdG8gZml0IHRoZSBz
ZXRzIG9mIHBhc3NlZCBwb2ludHMuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9GbG9hdFNpemUuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L0Zsb2F0U2l6ZS5oCmluZGV4IDJiNTU0NTAuLjI4ODJlM2UgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0Zsb2F0U2l6ZS5oCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL0Zsb2F0U2l6ZS5oCkBAIC05NSw2ICs5NSwxMSBAQCBwdWJsaWM6
CiAgICAgICAgICAgIG1faGVpZ2h0IDwgb3RoZXIubV9oZWlnaHQgPyBtX2hlaWdodCA6IG90aGVy
Lm1faGVpZ2h0KTsKICAgICB9CiAKKyAgICBmbG9hdCBhcmVhKCkgY29uc3QKKyAgICB7CisgICAg
ICAgIHJldHVybiBtX3dpZHRoICogbV9oZWlnaHQ7CisgICAgfQorCiAgICAgZmxvYXQgZGlhZ29u
YWxMZW5ndGgoKSBjb25zdDsKICAgICBmbG9hdCBkaWFnb25hbExlbmd0aFNxdWFyZWQoKSBjb25z
dAogICAgIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0lu
dFBvaW50LmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbnRQb2ludC5oCmlu
ZGV4IDhkN2ZkN2YuLmNhOGZmNTAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL0ludFBvaW50LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvSW50UG9pbnQuaApAQCAtMTA1LDYgKzEwNSwxMyBAQCBwdWJsaWM6CiAgICAgICAgICAgICBt
X3kgPCBvdGhlci5tX3kgPyBtX3kgOiBvdGhlci5tX3kpOwogICAgIH0KIAorICAgIGludCBsZW5n
dGhTcXVhcmVkKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBtX3ggKiBtX3ggKyBtX3kg
KiBtX3k7CisgICAgfQorCisgICAgaW50IGRpc3RhbmNlU3F1YXJlZFRvUG9pbnQoY29uc3QgSW50
UG9pbnQmIHApIGNvbnN0OworCiAgICAgdm9pZCBjbGFtcE5lZ2F0aXZlVG9aZXJvKCkKICAgICB7
CiAgICAgICAgICp0aGlzID0gZXhwYW5kZWRUbyh6ZXJvKCkpOwpAQCAtMjEzLDYgKzIyMCwxMSBA
QCBpbmxpbmUgSW50U2l6ZSB0b1NpemUoY29uc3QgSW50UG9pbnQmIGEpCiAgICAgcmV0dXJuIElu
dFNpemUoYS54KCksIGEueSgpKTsKIH0KIAoraW5saW5lIGludCBJbnRQb2ludDo6ZGlzdGFuY2VT
cXVhcmVkVG9Qb2ludChjb25zdCBJbnRQb2ludCYgcCkgY29uc3QKK3sKKyAgICByZXR1cm4gKCgq
dGhpcykgLSBwKS5kaWFnb25hbExlbmd0aFNxdWFyZWQoKTsKK30KKwogI2lmIFBMQVRGT1JNKFFU
KQogaW5saW5lIFFEYXRhU3RyZWFtJiBvcGVyYXRvcjw8KFFEYXRhU3RyZWFtJiBzdHJlYW0sIGNv
bnN0IEludFBvaW50JiBwb2ludCkKIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL0ludFJlY3QuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvSW50UmVjdC5jcHAKaW5kZXggMDNjMzVlOC4uZGZhMmY5MSAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW50UmVjdC5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW50UmVjdC5jcHAKQEAgLTEzMiw2ICsxMzIsMzUgQEAgdm9p
ZCBJbnRSZWN0OjpzY2FsZShmbG9hdCBzKQogICAgIG1fc2l6ZS5zZXRIZWlnaHQoKGludCkoaGVp
Z2h0KCkgKiBzKSk7CiB9CiAKK3N0YXRpYyBpbmxpbmUgaW50IGRpc3RhbmNlVG9JbnRlcnZhbChp
bnQgcG9zLCBpbnQgc3RhcnQsIGludCBlbmQpCit7CisgICAgaWYgKHBvcyA8IHN0YXJ0KQorICAg
ICAgICByZXR1cm4gc3RhcnQgLSBwb3M7CisgICAgaWYgKHBvcyA+IGVuZCkKKyAgICAgICAgcmV0
dXJuIGVuZCAtIHBvczsKKyAgICByZXR1cm4gMDsKK30KKworSW50U2l6ZSBJbnRSZWN0OjpkaWZm
ZXJlbmNlVG9Qb2ludChjb25zdCBJbnRQb2ludCYgcG9pbnQpIGNvbnN0Cit7CisgICAgaW50IHhk
aXN0YW5jZSA9IGRpc3RhbmNlVG9JbnRlcnZhbChwb2ludC54KCksIHgoKSwgbWF4WCgpKTsKKyAg
ICBpbnQgeWRpc3RhbmNlID0gZGlzdGFuY2VUb0ludGVydmFsKHBvaW50LnkoKSwgeSgpLCBtYXhZ
KCkpOworICAgIHJldHVybiBJbnRTaXplKHhkaXN0YW5jZSwgeWRpc3RhbmNlKTsKK30KKworSW50
U2l6ZSBJbnRSZWN0OjpkaWZmZXJlbmNlRnJvbUNlbnRlckxpbmVUb1BvaW50KGNvbnN0IEludFBv
aW50JiBwb2ludCkgY29uc3QKK3sKKyAgICAvLyBUaGUgY2VudGVyLWxpbmUgaXMgdGhlIG5hdHVy
YWwgY2VudGVyIG9mIGEgcmVjdGFuZ2xlLiBJdCBoYXMgYW4gZXF1YWwgZGlzdGFuY2UgdG8gYWxs
IHNpZGVzIG9mIHRoZSByZWN0YW5nbGUuCisgICAgSW50UG9pbnQgY2VudGVyUG9pbnQgPSBjZW50
ZXIoKTsKKyAgICBpbnQgeGRpc3RhbmNlID0gY2VudGVyUG9pbnQueCgpIC0gcG9pbnQueCgpOwor
ICAgIGludCB5ZGlzdGFuY2UgPSBjZW50ZXJQb2ludC55KCkgLSBwb2ludC55KCk7CisgICAgaWYg
KHdpZHRoKCkgPiBoZWlnaHQoKSkKKyAgICAgICAgeGRpc3RhbmNlID0gZGlzdGFuY2VUb0ludGVy
dmFsKHBvaW50LngoKSwgeCgpICsgKGhlaWdodCgpIC8gMiksIG1heFgoKSAtIChoZWlnaHQoKSAv
IDIpKTsKKyAgICBlbHNlCisgICAgICAgIHlkaXN0YW5jZSA9IGRpc3RhbmNlVG9JbnRlcnZhbChw
b2ludC55KCksIHkoKSArICh3aWR0aCgpIC8gMiksIG1heFkoKSAtICh3aWR0aCgpIC8gMikpOwor
ICAgIHJldHVybiBJbnRTaXplKHhkaXN0YW5jZSwgeWRpc3RhbmNlKTsKK30KKwogSW50UmVjdCB1
bmlvblJlY3QoY29uc3QgVmVjdG9yPEludFJlY3Q+JiByZWN0cykKIHsKICAgICBJbnRSZWN0IHJl
c3VsdDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ludFJl
Y3QuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ludFJlY3QuaAppbmRleCAz
ZWE4MjI5Li5lNThiZjA0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9JbnRSZWN0LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW50
UmVjdC5oCkBAIC0xNzEsNiArMTcxLDExIEBAIHB1YmxpYzoKICAgICB2b2lkIGluZmxhdGUoaW50
IGQpIHsgaW5mbGF0ZVgoZCk7IGluZmxhdGVZKGQpOyB9CiAgICAgdm9pZCBzY2FsZShmbG9hdCBz
KTsKIAorICAgIEludFNpemUgZGlmZmVyZW5jZVRvUG9pbnQoY29uc3QgSW50UG9pbnQmIHApIGNv
bnN0OworICAgIEludFNpemUgZGlmZmVyZW5jZUZyb21DZW50ZXJMaW5lVG9Qb2ludChjb25zdCBJ
bnRQb2ludCYgcCkgY29uc3Q7CisgICAgaW50IGRpc3RhbmNlU3F1YXJlZFRvUG9pbnQoY29uc3Qg
SW50UG9pbnQmIHApIGNvbnN0IHsgcmV0dXJuIGRpZmZlcmVuY2VUb1BvaW50KHApLmRpYWdvbmFs
TGVuZ3RoU3F1YXJlZCgpOyB9CisgICAgaW50IGRpc3RhbmNlU3F1YXJlZEZyb21DZW50ZXJMaW5l
VG9Qb2ludChjb25zdCBJbnRQb2ludCYgcCkgY29uc3QgeyByZXR1cm4gZGlmZmVyZW5jZUZyb21D
ZW50ZXJMaW5lVG9Qb2ludChwKS5kaWFnb25hbExlbmd0aFNxdWFyZWQoKTsgfQorCiAgICAgSW50
UmVjdCB0cmFuc3Bvc2VkUmVjdCgpIGNvbnN0IHsgcmV0dXJuIEludFJlY3QobV9sb2NhdGlvbi50
cmFuc3Bvc2VkUG9pbnQoKSwgbV9zaXplLnRyYW5zcG9zZWRTaXplKCkpOyB9CiAKICNpZiBQTEFU
Rk9STShXWCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0lu
dFNpemUuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ludFNpemUuaAppbmRl
eCA2MjVkYjNjLi43ZGJmN2VlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9JbnRTaXplLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
SW50U2l6ZS5oCkBAIC05OCw2ICs5OCwxNiBAQCBwdWJsaWM6CiAgICAgICAgICp0aGlzID0gZXhw
YW5kZWRUbyhJbnRTaXplKCkpOwogICAgIH0KIAorICAgIGludCBhcmVhKCkgY29uc3QKKyAgICB7
CisgICAgICAgIHJldHVybiBtX3dpZHRoICogbV9oZWlnaHQ7CisgICAgfQorCisgICAgaW50IGRp
YWdvbmFsTGVuZ3RoU3F1YXJlZCgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gbV93aWR0
aCAqIG1fd2lkdGggKyBtX2hlaWdodCAqIG1faGVpZ2h0OworICAgIH0KKwogICAgIEludFNpemUg
dHJhbnNwb3NlZFNpemUoKSBjb25zdAogICAgIHsKICAgICAgICAgcmV0dXJuIEludFNpemUobV9o
ZWlnaHQsIG1fd2lkdGgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nIGIv
U291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCmluZGV4IDE2OWJhYmIuLjczMWRmZmQgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VM
b2cKQEAgLTEsMyArMSwyMyBAQAorMjAxMi0wMi0xNiAgQWxsYW4gU2FuZGZlbGQgSmVuc2VuICA8
YWxsYW4uamVuc2VuQG5va2lhLmNvbT4KKworICAgICAgICBTZWxlY3QgYmVzdCB0YXJnZXQgZm9y
IHRhcCBnZXN0dXJlLgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9Nzg4MDEKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKyAgICAg
ICAgCisgICAgICAgIFNlbmQgcmFkaXVzIHRvIGhhbmRsZVBvdGVudGlhbFNpbmdsZVRhcEV2ZW50
IHNvIGl0IGNhbiBkbyB0aGUgc2FtZSBoaXQKKyAgICAgICAgZGV0ZWN0aW9uIHRoZSB0YXAgZ2Vz
dHVyZSBsYXRlciBkb2VzLgorCisgICAgICAgICogVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5jcHA6
CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2VQcm94eTo6aGFuZGxlUG90ZW50aWFsQWN0aXZhdGlv
bik6CisgICAgICAgICogVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5oOgorICAgICAgICAqIFVJUHJv
Y2Vzcy9xdC9RdFdlYlBhZ2VFdmVudEhhbmRsZXIuY3BwOgorICAgICAgICAoUXRXZWJQYWdlRXZl
bnRIYW5kbGVyOjpoYW5kbGVQb3RlbnRpYWxTaW5nbGVUYXBFdmVudCk6CisgICAgICAgICogV2Vi
UHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UuY3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlOjpo
aWdobGlnaHRQb3RlbnRpYWxBY3RpdmF0aW9uKToKKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYlBh
Z2UvV2ViUGFnZS5oOgorICAgICAgICAqIFdlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLm1lc3Nh
Z2VzLmluOgorCiAyMDEyLTAyLTE2ICBBZGVuaWxzb24gQ2F2YWxjYW50aSAgPGNhdmFsY2FudGlp
QGdtYWlsLmNvbT4KIAogICAgICAgICBbUXRdW1dLMl0gU3BsaXQgUVdlYlBlcm1pc3Npb25SZXF1
ZXN0IGludG8gUVdlYlNlY3VyaXR5T3JpZ2luCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9V
SVByb2Nlc3MvV2ViUGFnZVByb3h5LmNwcCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJQ
YWdlUHJveHkuY3BwCmluZGV4IDIzNjJjOWQuLjFlNmQxNGQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJLaXQyL1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJ
UHJvY2Vzcy9XZWJQYWdlUHJveHkuY3BwCkBAIC05NzcsOSArOTc3LDkgQEAgdm9pZCBXZWJQYWdl
UHJveHk6OmhhbmRsZUdlc3R1cmVFdmVudChjb25zdCBXZWJHZXN0dXJlRXZlbnQmIGV2ZW50KQog
CiAjaWYgRU5BQkxFKFRPVUNIX0VWRU5UUykKICNpZiBQTEFURk9STShRVCkKLXZvaWQgV2ViUGFn
ZVByb3h5OjpoYW5kbGVQb3RlbnRpYWxBY3RpdmF0aW9uKGNvbnN0IEludFBvaW50JiBsYXlvdXRQ
b2ludCkKK3ZvaWQgV2ViUGFnZVByb3h5OjpoYW5kbGVQb3RlbnRpYWxBY3RpdmF0aW9uKGNvbnN0
IEludFBvaW50JiBsYXlvdXRQb2ludCwgY29uc3QgSW50U2l6ZSYgYXJlYSkKIHsKLSAgICBwcm9j
ZXNzKCktPnNlbmQoTWVzc2FnZXM6OldlYlBhZ2U6OkhpZ2hsaWdodFBvdGVudGlhbEFjdGl2YXRp
b24obGF5b3V0UG9pbnQpLCBtX3BhZ2VJRCk7CisgICAgcHJvY2VzcygpLT5zZW5kKE1lc3NhZ2Vz
OjpXZWJQYWdlOjpIaWdobGlnaHRQb3RlbnRpYWxBY3RpdmF0aW9uKGxheW91dFBvaW50LCBhcmVh
KSwgbV9wYWdlSUQpOwogfQogI2VuZGlmCiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJ
UHJvY2Vzcy9XZWJQYWdlUHJveHkuaCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJQYWdl
UHJveHkuaAppbmRleCAyNjJlYzZhLi5kMzQyNTdmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
Mi9VSVByb2Nlc3MvV2ViUGFnZVByb3h5LmgKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNz
L1dlYlBhZ2VQcm94eS5oCkBAIC0zODMsNyArMzgzLDcgQEAgcHVibGljOgogI2lmIEVOQUJMRShU
T1VDSF9FVkVOVFMpCiAgICAgdm9pZCBoYW5kbGVUb3VjaEV2ZW50KGNvbnN0IE5hdGl2ZVdlYlRv
dWNoRXZlbnQmKTsKICNpZiBQTEFURk9STShRVCkKLSAgICB2b2lkIGhhbmRsZVBvdGVudGlhbEFj
dGl2YXRpb24oY29uc3QgV2ViQ29yZTo6SW50UG9pbnQmKTsKKyAgICB2b2lkIGhhbmRsZVBvdGVu
dGlhbEFjdGl2YXRpb24oY29uc3QgV2ViQ29yZTo6SW50UG9pbnQmLCBjb25zdCBXZWJDb3JlOjpJ
bnRTaXplJik7CiAjZW5kaWYKICNlbmRpZgogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9V
SVByb2Nlc3MvcXQvUXRXZWJQYWdlRXZlbnRIYW5kbGVyLmNwcCBiL1NvdXJjZS9XZWJLaXQyL1VJ
UHJvY2Vzcy9xdC9RdFdlYlBhZ2VFdmVudEhhbmRsZXIuY3BwCmluZGV4IDcyYjk2YmEuLjEyMzlm
MmEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9xdC9RdFdlYlBhZ2VFdmVu
dEhhbmRsZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9xdC9RdFdlYlBhZ2VF
dmVudEhhbmRsZXIuY3BwCkBAIC0yOTEsNyArMjkxLDcgQEAgYm9vbCBRdFdlYlBhZ2VFdmVudEhh
bmRsZXI6OmhhbmRsZURyb3BFdmVudChRRHJvcEV2ZW50KiBldikKIHZvaWQgUXRXZWJQYWdlRXZl
bnRIYW5kbGVyOjpoYW5kbGVQb3RlbnRpYWxTaW5nbGVUYXBFdmVudChjb25zdCBRVG91Y2hFdmVu
dDo6VG91Y2hQb2ludCYgcG9pbnQpCiB7CiAgICAgUVRyYW5zZm9ybSBmcm9tSXRlbVRyYW5zZm9y
bSA9IG1fd2ViUGFnZS0+dHJhbnNmb3JtRnJvbUl0ZW0oKTsKLSAgICBtX3dlYlBhZ2VQcm94eS0+
aGFuZGxlUG90ZW50aWFsQWN0aXZhdGlvbihmcm9tSXRlbVRyYW5zZm9ybS5tYXAocG9pbnQucG9z
KCkpLnRvUG9pbnQoKSk7CisgICAgbV93ZWJQYWdlUHJveHktPmhhbmRsZVBvdGVudGlhbEFjdGl2
YXRpb24oZnJvbUl0ZW1UcmFuc2Zvcm0ubWFwKHBvaW50LnBvcygpKS50b1BvaW50KCksIEludFNp
emUocG9pbnQucmVjdCgpLnNpemUoKS50b1NpemUoKSkpOwogfQogCiB2b2lkIFF0V2ViUGFnZUV2
ZW50SGFuZGxlcjo6aGFuZGxlU2luZ2xlVGFwRXZlbnQoY29uc3QgUVRvdWNoRXZlbnQ6OlRvdWNo
UG9pbnQmIHBvaW50KQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQ
YWdlL1dlYlBhZ2UuY3BwIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBh
Z2UuY3BwCmluZGV4IDYxOWQxYTIuLjM2NWE3OWQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQy
L1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQ
cm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5jcHAKQEAgLTE0NDUsMTYgKzE0NDUsMTYgQEAgdm9pZCBX
ZWJQYWdlOjpyZXN0b3JlU2Vzc2lvbkFuZE5hdmlnYXRlVG9DdXJyZW50SXRlbShjb25zdCBTZXNz
aW9uU3RhdGUmIHNlc3Npb24KIAogI2lmIEVOQUJMRShUT1VDSF9FVkVOVFMpCiAjaWYgUExBVEZP
Uk0oUVQpCi12b2lkIFdlYlBhZ2U6OmhpZ2hsaWdodFBvdGVudGlhbEFjdGl2YXRpb24oY29uc3Qg
SW50UG9pbnQmIHBvaW50KQordm9pZCBXZWJQYWdlOjpoaWdobGlnaHRQb3RlbnRpYWxBY3RpdmF0
aW9uKGNvbnN0IEludFBvaW50JiBwb2ludCwgY29uc3QgSW50U2l6ZSYgYXJlYSkKIHsKICAgICBO
b2RlKiBhY3RpdmF0aW9uTm9kZSA9IDA7CiAgICAgRnJhbWUqIG1haW5mcmFtZSA9IG1fcGFnZS0+
bWFpbkZyYW1lKCk7CisgICAgSW50UG9pbnQgYWRqdXN0ZWRQb2ludDsKIAogICAgIGlmIChwb2lu
dCAhPSBJbnRQb2ludDo6emVybygpKSB7Ci0gICAgICAgIEhpdFRlc3RSZXN1bHQgcmVzdWx0ID0g
bWFpbmZyYW1lLT5ldmVudEhhbmRsZXIoKS0+aGl0VGVzdFJlc3VsdEF0UG9pbnQobWFpbmZyYW1l
LT52aWV3KCktPndpbmRvd1RvQ29udGVudHMocG9pbnQpLCAvKmFsbG93U2hhZG93Q29udGVudCov
IGZhbHNlLCAvKmlnbm9yZUNsaXBwaW5nKi8gdHJ1ZSk7Ci0gICAgICAgIGFjdGl2YXRpb25Ob2Rl
ID0gcmVzdWx0LmlubmVyTm9kZSgpOworICAgICAgICBtYWluZnJhbWUtPmV2ZW50SGFuZGxlcigp
LT5ub2RlRm9yVGFwR2VzdHVyZUF0VG91Y2hQb2ludChwb2ludCwgSW50U2l6ZShhcmVhLndpZHRo
KCkvMiwgYXJlYS5oZWlnaHQoKS8yKSwgYWRqdXN0ZWRQb2ludCwgYWN0aXZhdGlvbk5vZGUpOwog
Ci0gICAgICAgIGlmICghYWN0aXZhdGlvbk5vZGUtPmlzRm9jdXNhYmxlKCkpCisgICAgICAgIGlm
IChhY3RpdmF0aW9uTm9kZSAmJiAhYWN0aXZhdGlvbk5vZGUtPmlzRm9jdXNhYmxlKCkpCiAgICAg
ICAgICAgICBhY3RpdmF0aW9uTm9kZSA9IGFjdGl2YXRpb25Ob2RlLT5lbmNsb3NpbmdMaW5rRXZl
bnRQYXJlbnRPclNlbGYoKTsKICAgICB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dl
YlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmggYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dl
YlBhZ2UvV2ViUGFnZS5oCmluZGV4IDAyMDQzMTQuLjBmM2NkYzIgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmgKKysrIGIvU291cmNlL1dlYktp
dDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UuaApAQCAtNTU4LDcgKzU1OCw3IEBAIHByaXZh
dGU6CiAgICAgdm9pZCB0b3VjaEV2ZW50KGNvbnN0IFdlYlRvdWNoRXZlbnQmKTsKICAgICB2b2lk
IHRvdWNoRXZlbnRTeW5jRm9yVGVzdGluZyhjb25zdCBXZWJUb3VjaEV2ZW50JiwgYm9vbCYgaGFu
ZGxlZCk7CiAjaWYgUExBVEZPUk0oUVQpCi0gICAgdm9pZCBoaWdobGlnaHRQb3RlbnRpYWxBY3Rp
dmF0aW9uKGNvbnN0IFdlYkNvcmU6OkludFBvaW50Jik7CisgICAgdm9pZCBoaWdobGlnaHRQb3Rl
bnRpYWxBY3RpdmF0aW9uKGNvbnN0IFdlYkNvcmU6OkludFBvaW50JiwgY29uc3QgV2ViQ29yZTo6
SW50U2l6ZSYpOwogI2VuZGlmCiAjZW5kaWYKICAgICB2b2lkIGNvbnRleHRNZW51SGlkZGVuKCkg
eyBtX2lzU2hvd2luZ0NvbnRleHRNZW51ID0gZmFsc2U7IH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLm1lc3NhZ2VzLmluIGIvU291cmNlL1dl
YktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UubWVzc2FnZXMuaW4KaW5kZXggNzI4YjZj
NC4uNjg5MWI1MyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdl
L1dlYlBhZ2UubWVzc2FnZXMuaW4KKysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQ
YWdlL1dlYlBhZ2UubWVzc2FnZXMuaW4KQEAgLTQxLDcgKzQxLDcgQEAgbWVzc2FnZXMgLT4gV2Vi
UGFnZSB7CiAgICAgVG91Y2hFdmVudChXZWJLaXQ6OldlYlRvdWNoRXZlbnQgZXZlbnQpCiAgICAg
VG91Y2hFdmVudFN5bmNGb3JUZXN0aW5nKFdlYktpdDo6V2ViVG91Y2hFdmVudCBldmVudCkgLT4g
KGJvb2wgaGFuZGxlZCkKICNpZiBQTEFURk9STShRVCkKLSAgICBIaWdobGlnaHRQb3RlbnRpYWxB
Y3RpdmF0aW9uKFdlYkNvcmU6OkludFBvaW50IHBvaW50KQorICAgIEhpZ2hsaWdodFBvdGVudGlh
bEFjdGl2YXRpb24oV2ViQ29yZTo6SW50UG9pbnQgcG9pbnQsIFdlYkNvcmU6OkludFNpemUgcmFk
aXVzKQogI2VuZGlmCiAjZW5kaWYKIAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>127364</attachid>
            <date>2012-02-16 05:53:01 -0800</date>
            <delta_ts>2012-02-22 04:31:01 -0800</delta_ts>
            <desc>Math Patch2</desc>
            <filename>MathPatch</filename>
            <type>text/plain</type>
            <size>11250</size>
            <attacher name="Allan Sandfeld Jensen">allan.jensen</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCAwZTI0NWU5Li45OGYyNTllIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNDMg
QEAKKzIwMTItMDItMTYgIEFsbGFuIFNhbmRmZWxkIEplbnNlbiAgPGFsbGFuLmplbnNlbkBub2tp
YS5jb20+CisKKyAgICAgICAgSW1wbGVtZW50IGEgY29uc2lzdGVudCBzZXQgb2YgZGlzdGFuY2Ug
YW5kIGFyZWEgZnVuY3Rpb25zIGZvciBSZWN0LCBQb2ludCBhbmQgU2l6ZSBjbGFzc2VzLgorICAg
ICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9Nzg4MDEKKworICAg
ICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKyAgICAgICAgCisgICAgICAgIEFsc28g
YWRkZWQgZGlzdGFuY2UgZnVuY3Rpb25zIGZvciByZWN0YW5nbGUgY2VudGVyLWxpbmVzLiBGb3Ig
bGluZS1yZWN0cyB0aGUgZGlzdGFuY2UgdG8gdGhlIGNlbnRlci1saW5lIGlzCisgICAgICAgIGEg
YmV0dGVyIGV4cHJlc3Npb24gb2YgdGhlIGRpc3RhbmNlIHRvIGEgcmVjdGFuZ2xlcyBjZW50ZXIg
dGhhbiB0aGUgZGlzdGFuY2UgdG8gdGhlIGNlbnRlci1wb2ludC4KKyAgICAgICAgCisgICAgICAg
ICogcGxhdGZvcm0vZ3JhcGhpY3MvRmxvYXRQb2ludC5oOgorICAgICAgICAoV2ViQ29yZTo6Rmxv
YXRQb2ludDo6RmxvYXRQb2ludCk6CisgICAgICAgIChXZWJDb3JlOjpGbG9hdFBvaW50OjpkaXN0
YW5jZVRvUG9pbnQpOgorICAgICAgICAoV2ViQ29yZTo6RmxvYXRQb2ludDo6ZGlzdGFuY2VTcXVh
cmVkVG9Qb2ludCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvRmxvYXRRdWFkLmg6Cisg
ICAgICAgIChXZWJDb3JlOjpGbG9hdFF1YWQ6OmNlbnRlcik6CisgICAgICAgICogcGxhdGZvcm0v
Z3JhcGhpY3MvRmxvYXRSZWN0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmRpc3RhbmNlVG9JbnRl
cnZhbCk6CisgICAgICAgIChXZWJDb3JlOjpGbG9hdFJlY3Q6OmRpZmZlcmVuY2VUb1BvaW50KToK
KyAgICAgICAgKFdlYkNvcmU6OkZsb2F0UmVjdDo6ZGlzdGFuY2VUb1BvaW50KToKKyAgICAgICAg
KFdlYkNvcmU6OkZsb2F0UmVjdDo6ZGlmZmVyZW5jZUZyb21DZW50ZXJMaW5lVG9Qb2ludCk6Cisg
ICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvRmxvYXRSZWN0Lmg6CisgICAgICAgIChXZWJDb3Jl
OjpGbG9hdFJlY3Q6OmRpc3RhbmNlU3F1YXJlZFRvUG9pbnQpOgorICAgICAgICAoV2ViQ29yZTo6
RmxvYXRSZWN0OjpkaXN0YW5jZVNxdWFyZWRGcm9tQ2VudGVyTGluZVRvUG9pbnQpOgorICAgICAg
ICAqIHBsYXRmb3JtL2dyYXBoaWNzL0Zsb2F0U2l6ZS5oOgorICAgICAgICAoV2ViQ29yZTo6Rmxv
YXRTaXplOjphcmVhKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9JbnRQb2ludC5oOgor
ICAgICAgICAoV2ViQ29yZTo6SW50UG9pbnQ6Omxlbmd0aFNxdWFyZWQpOgorICAgICAgICAoV2Vi
Q29yZTo6SW50UG9pbnQ6OmRpc3RhbmNlU3F1YXJlZFRvUG9pbnQpOgorICAgICAgICAqIHBsYXRm
b3JtL2dyYXBoaWNzL0ludFJlY3QuY3BwOgorICAgICAgICAoV2ViQ29yZTo6ZGlzdGFuY2VUb0lu
dGVydmFsKToKKyAgICAgICAgKFdlYkNvcmU6OkludFJlY3Q6OmRpZmZlcmVuY2VUb1BvaW50KToK
KyAgICAgICAgKFdlYkNvcmU6OkludFJlY3Q6OmRpZmZlcmVuY2VGcm9tQ2VudGVyTGluZVRvUG9p
bnQpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0ludFJlY3QuaDoKKyAgICAgICAgKFdl
YkNvcmU6OkludFJlY3Q6OmRpc3RhbmNlU3F1YXJlZFRvUG9pbnQpOgorICAgICAgICAoV2ViQ29y
ZTo6SW50UmVjdDo6ZGlzdGFuY2VTcXVhcmVkRnJvbUNlbnRlckxpbmVUb1BvaW50KToKKyAgICAg
ICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9JbnRTaXplLmg6CisgICAgICAgIChXZWJDb3JlOjpJbnRT
aXplOjphcmVhKToKKyAgICAgICAgKFdlYkNvcmU6OkludFNpemU6OmRpYWdvbmFsTGVuZ3RoU3F1
YXJlZCk6CisKIDIwMTItMDItMTYgIFNpbW9uIEhhdXNtYW5uICA8c2ltb24uaGF1c21hbm5Abm9r
aWEuY29tPgogCiAgICAgICAgIEJ1aWxkIGZpeCBmb3IgUXQgNSB3aXRob3V0IFF0V2lkZ2V0cy4K
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0Zsb2F0UG9pbnQu
aCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0Zsb2F0UG9pbnQuaAppbmRleCBi
ZjkwMWU1Li5lZGFmYTNjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9GbG9hdFBvaW50LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
RmxvYXRQb2ludC5oCkBAIC02OSw2ICs2OSw3IEBAIHB1YmxpYzoKICAgICBGbG9hdFBvaW50KGZs
b2F0IHgsIGZsb2F0IHkpIDogbV94KHgpLCBtX3koeSkgeyB9CiAgICAgRmxvYXRQb2ludChjb25z
dCBJbnRQb2ludCYpOwogICAgIEZsb2F0UG9pbnQoY29uc3QgRnJhY3Rpb25hbExheW91dFBvaW50
Jik7CisgICAgZXhwbGljaXQgRmxvYXRQb2ludChGbG9hdFNpemUgc2l6ZSkgOiBtX3goc2l6ZS53
aWR0aCgpKSwgbV95KHNpemUuaGVpZ2h0KCkpIHsgfQogCiAgICAgc3RhdGljIEZsb2F0UG9pbnQg
emVybygpIHsgcmV0dXJuIEZsb2F0UG9pbnQoKTsgfQogCkBAIC0xMzAsNiArMTMxLDkgQEAgcHVi
bGljOgogICAgICAgICByZXR1cm4gbV94ICogbV94ICsgbV95ICogbV95OwogICAgIH0KIAorICAg
IGZsb2F0IGRpc3RhbmNlVG9Qb2ludChjb25zdCBGbG9hdFBvaW50JikgY29uc3Q7CisgICAgZmxv
YXQgZGlzdGFuY2VTcXVhcmVkVG9Qb2ludChjb25zdCBGbG9hdFBvaW50JikgY29uc3Q7CisKICAg
ICBGbG9hdFBvaW50IGV4cGFuZGVkVG8oY29uc3QgRmxvYXRQb2ludCYgb3RoZXIpIGNvbnN0CiAg
ICAgewogICAgICAgICByZXR1cm4gRmxvYXRQb2ludChzdGQ6Om1heChtX3gsIG90aGVyLm1feCks
IHN0ZDo6bWF4KG1feSwgb3RoZXIubV95KSk7CkBAIC0yMzksNiArMjQzLDE3IEBAIGlubGluZSBm
bG9hdCBvcGVyYXRvciooY29uc3QgRmxvYXRQb2ludCYgYSwgY29uc3QgRmxvYXRQb2ludCYgYikK
ICAgICByZXR1cm4gYS5kb3QoYik7CiB9CiAKK2lubGluZSBmbG9hdCBGbG9hdFBvaW50OjpkaXN0
YW5jZVRvUG9pbnQoY29uc3QgRmxvYXRQb2ludCYgcG9pbnQpIGNvbnN0Cit7CisgICAgcmV0dXJu
ICgqdGhpcyAtIHBvaW50KS5kaWFnb25hbExlbmd0aCgpOworfQorCitpbmxpbmUgZmxvYXQgRmxv
YXRQb2ludDo6ZGlzdGFuY2VTcXVhcmVkVG9Qb2ludChjb25zdCBGbG9hdFBvaW50JiBwb2ludCkg
Y29uc3QKK3sKKyAgICByZXR1cm4gKCp0aGlzIC0gcG9pbnQpLmRpYWdvbmFsTGVuZ3RoU3F1YXJl
ZCgpOworfQorCisKIGlubGluZSBJbnRQb2ludCByb3VuZGVkSW50UG9pbnQoY29uc3QgRmxvYXRQ
b2ludCYgcCkKIHsKICAgICByZXR1cm4gSW50UG9pbnQoc3RhdGljX2Nhc3Q8aW50Pihyb3VuZGYo
cC54KCkpKSwgc3RhdGljX2Nhc3Q8aW50Pihyb3VuZGYocC55KCkpKSk7CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9GbG9hdFF1YWQuaCBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL0Zsb2F0UXVhZC5oCmluZGV4IGI1ZTJhOGMuLmJmYjc5NGQg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0Zsb2F0UXVhZC5o
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0Zsb2F0UXVhZC5oCkBAIC04
OCw2ICs4OCwxMyBAQCBwdWJsaWM6CiAgICAgLy8gZnJvbSB0cmFuc2Zvcm1lZCByZWN0cy4KICAg
ICBib29sIGNvbnRhaW5zUXVhZChjb25zdCBGbG9hdFF1YWQmKSBjb25zdDsKIAorICAgIC8vIFRo
ZSBjZW50ZXIgb2YgdGhlIHF1YWQuIElmIHRoZSBxdWFkIGlzIHRoZSByZXN1bHQgb2YgYSBhZmZp
bmUtdHJhbnNmb3JtZWQgcmVjdGFuZ2xlIHRoaXMgaXMgdGhlIHNhbWUgYXMgdGhlIG9yaWdpbmFs
IGNlbnRlciB0cmFuc2Zvcm1lZC4KKyAgICBGbG9hdFBvaW50IGNlbnRlcigpIGNvbnN0CisgICAg
eworICAgICAgICByZXR1cm4gRmxvYXRQb2ludCgobV9wMS54KCkgKyBtX3AyLngoKSArIG1fcDMu
eCgpICsgbV9wNC54KCkpIC8gNC4wLAorICAgICAgICAgICAgICAgICAgICAgICAgICAobV9wMS55
KCkgKyBtX3AyLnkoKSArIG1fcDMueSgpICsgbV9wNC55KCkpIC8gNC4wKTsKKyAgICB9CisKICAg
ICBGbG9hdFJlY3QgYm91bmRpbmdCb3goKSBjb25zdDsKICAgICBJbnRSZWN0IGVuY2xvc2luZ0Jv
dW5kaW5nQm94KCkgY29uc3QKICAgICB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9GbG9hdFJlY3QuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvRmxvYXRSZWN0LmNwcAppbmRleCA3Mzc0NzNjLi45MDljMTg1IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9GbG9hdFJlY3QuY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0Zsb2F0UmVjdC5jcHAKQEAgLTE0Miw2ICsxNDIs
NDAgQEAgdm9pZCBGbG9hdFJlY3Q6OnNjYWxlKGZsb2F0IHN4LCBmbG9hdCBzeSkKICAgICBtX3Np
emUuc2V0SGVpZ2h0KGhlaWdodCgpICogc3kpOwogfQogCitzdGF0aWMgaW5saW5lIGZsb2F0IGRp
c3RhbmNlVG9JbnRlcnZhbChmbG9hdCBwb3MsIGZsb2F0IHN0YXJ0LCBmbG9hdCBlbmQpCit7Cisg
ICAgaWYgKHBvcyA8IHN0YXJ0KQorICAgICAgICByZXR1cm4gc3RhcnQgLSBwb3M7CisgICAgaWYg
KHBvcyA+IGVuZCkKKyAgICAgICAgcmV0dXJuIGVuZCAtIHBvczsKKyAgICByZXR1cm4gMDsKK30K
KworRmxvYXRTaXplIEZsb2F0UmVjdDo6ZGlmZmVyZW5jZVRvUG9pbnQoY29uc3QgRmxvYXRQb2lu
dCYgcG9pbnQpIGNvbnN0Cit7CisgICAgZmxvYXQgeGRpc3RhbmNlID0gZGlzdGFuY2VUb0ludGVy
dmFsKHBvaW50LngoKSwgeCgpLCBtYXhYKCkpOworICAgIGZsb2F0IHlkaXN0YW5jZSA9IGRpc3Rh
bmNlVG9JbnRlcnZhbChwb2ludC55KCksIHkoKSwgbWF4WSgpKTsKKyAgICByZXR1cm4gRmxvYXRT
aXplKHhkaXN0YW5jZSwgeWRpc3RhbmNlKTsKK30KKworZmxvYXQgRmxvYXRSZWN0OjpkaXN0YW5j
ZVRvUG9pbnQoY29uc3QgRmxvYXRQb2ludCYgcCkgY29uc3QKK3sKKyAgICByZXR1cm4gc3FydGYo
ZGlzdGFuY2VTcXVhcmVkVG9Qb2ludChwKSk7Cit9CisKK0Zsb2F0U2l6ZSBGbG9hdFJlY3Q6OmRp
ZmZlcmVuY2VGcm9tQ2VudGVyTGluZVRvUG9pbnQoY29uc3QgRmxvYXRQb2ludCYgcG9pbnQpIGNv
bnN0Cit7CisgICAgLy8gVGhlIGNlbnRlci1saW5lIGlzIHRoZSBuYXR1cmFsIGNlbnRlciBvZiBh
IHJlY3RhbmdsZS4gSXQgaGFzIGFuIGVxdWFsIGRpc3RhbmNlIHRvIGFsbCBzaWRlcyBvZiB0aGUg
cmVjdGFuZ2xlLgorICAgIEZsb2F0UG9pbnQgY2VudGVyUG9pbnQgPSBjZW50ZXIoKTsKKyAgICBm
bG9hdCB4ZGlzdGFuY2UgPSBjZW50ZXJQb2ludC54KCkgLSBwb2ludC54KCk7CisgICAgZmxvYXQg
eWRpc3RhbmNlID0gY2VudGVyUG9pbnQueSgpIC0gcG9pbnQueSgpOworICAgIGlmICh3aWR0aCgp
ID4gaGVpZ2h0KCkpCisgICAgICAgIHhkaXN0YW5jZSA9IGRpc3RhbmNlVG9JbnRlcnZhbChwb2lu
dC54KCksIHgoKSArIChoZWlnaHQoKSAvIDIuMCksIG1heFgoKSAtIChoZWlnaHQoKSAvIDIuMCkp
OworICAgIGVsc2UKKyAgICAgICAgeWRpc3RhbmNlID0gZGlzdGFuY2VUb0ludGVydmFsKHBvaW50
LnkoKSwgeSgpICsgKHdpZHRoKCkgLyAyLjApLCBtYXhZKCkgLSAod2lkdGgoKSAvIDIuMCkpOwor
ICAgIHJldHVybiBGbG9hdFNpemUoeGRpc3RhbmNlLCB5ZGlzdGFuY2UpOworfQorCiBGbG9hdFJl
Y3QgdW5pb25SZWN0KGNvbnN0IFZlY3RvcjxGbG9hdFJlY3Q+JiByZWN0cykKIHsKICAgICBGbG9h
dFJlY3QgcmVzdWx0OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvRmxvYXRSZWN0LmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9GbG9hdFJl
Y3QuaAppbmRleCA0ZDRlYWRmLi4xZTAzZjYxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9GbG9hdFJlY3QuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9GbG9hdFJlY3QuaApAQCAtMTc0LDYgKzE3NCwxMiBAQCBwdWJsaWM6CiAgICAg
dm9pZCBzY2FsZShmbG9hdCBzKSB7IHNjYWxlKHMsIHMpOyB9CiAgICAgdm9pZCBzY2FsZShmbG9h
dCBzeCwgZmxvYXQgc3kpOwogCisgICAgRmxvYXRTaXplIGRpZmZlcmVuY2VUb1BvaW50KGNvbnN0
IEZsb2F0UG9pbnQmKSBjb25zdDsKKyAgICBGbG9hdFNpemUgZGlmZmVyZW5jZUZyb21DZW50ZXJM
aW5lVG9Qb2ludChjb25zdCBGbG9hdFBvaW50JikgY29uc3Q7CisgICAgZmxvYXQgZGlzdGFuY2VT
cXVhcmVkVG9Qb2ludChjb25zdCBGbG9hdFBvaW50JikgY29uc3QgeyByZXR1cm4gZGlmZmVyZW5j
ZVRvUG9pbnQocCkuZGlhZ29uYWxMZW5ndGhTcXVhcmVkKCk7IH0KKyAgICBmbG9hdCBkaXN0YW5j
ZVNxdWFyZWRGcm9tQ2VudGVyTGluZVRvUG9pbnQoY29uc3QgRmxvYXRQb2ludCYpIGNvbnN0IHsg
cmV0dXJuIGRpZmZlcmVuY2VGcm9tQ2VudGVyTGluZVRvUG9pbnQocCkuZGlhZ29uYWxMZW5ndGhT
cXVhcmVkKCk7IH0KKyAgICBmbG9hdCBkaXN0YW5jZVRvUG9pbnQoY29uc3QgRmxvYXRQb2ludCYp
IGNvbnN0OworCiAgICAgRmxvYXRSZWN0IHRyYW5zcG9zZWRSZWN0KCkgY29uc3QgeyByZXR1cm4g
RmxvYXRSZWN0KG1fbG9jYXRpb24udHJhbnNwb3NlZFBvaW50KCksIG1fc2l6ZS50cmFuc3Bvc2Vk
U2l6ZSgpKTsgfQogCiAgICAgLy8gUmUtaW5pdGlhbGl6ZXMgdGhpcyByZWN0YW5nbGUgdG8gZml0
IHRoZSBzZXRzIG9mIHBhc3NlZCBwb2ludHMuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9GbG9hdFNpemUuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL0Zsb2F0U2l6ZS5oCmluZGV4IDJiNTU0NTAuLjI4ODJlM2UgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0Zsb2F0U2l6ZS5oCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0Zsb2F0U2l6ZS5oCkBAIC05NSw2ICs5NSwxMSBAQCBw
dWJsaWM6CiAgICAgICAgICAgIG1faGVpZ2h0IDwgb3RoZXIubV9oZWlnaHQgPyBtX2hlaWdodCA6
IG90aGVyLm1faGVpZ2h0KTsKICAgICB9CiAKKyAgICBmbG9hdCBhcmVhKCkgY29uc3QKKyAgICB7
CisgICAgICAgIHJldHVybiBtX3dpZHRoICogbV9oZWlnaHQ7CisgICAgfQorCiAgICAgZmxvYXQg
ZGlhZ29uYWxMZW5ndGgoKSBjb25zdDsKICAgICBmbG9hdCBkaWFnb25hbExlbmd0aFNxdWFyZWQo
KSBjb25zdAogICAgIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL0ludFBvaW50LmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbnRQb2lu
dC5oCmluZGV4IDhkN2ZkN2YuLjNlODIxNDcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL0ludFBvaW50LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvSW50UG9pbnQuaApAQCAtMTA1LDYgKzEwNSwxMyBAQCBwdWJsaWM6CiAgICAgICAg
ICAgICBtX3kgPCBvdGhlci5tX3kgPyBtX3kgOiBvdGhlci5tX3kpOwogICAgIH0KIAorICAgIGlu
dCBsZW5ndGhTcXVhcmVkKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBtX3ggKiBtX3gg
KyBtX3kgKiBtX3k7CisgICAgfQorCisgICAgaW50IGRpc3RhbmNlU3F1YXJlZFRvUG9pbnQoY29u
c3QgSW50UG9pbnQmKSBjb25zdDsKKwogICAgIHZvaWQgY2xhbXBOZWdhdGl2ZVRvWmVybygpCiAg
ICAgewogICAgICAgICAqdGhpcyA9IGV4cGFuZGVkVG8oemVybygpKTsKQEAgLTIxMyw2ICsyMjAs
MTEgQEAgaW5saW5lIEludFNpemUgdG9TaXplKGNvbnN0IEludFBvaW50JiBhKQogICAgIHJldHVy
biBJbnRTaXplKGEueCgpLCBhLnkoKSk7CiB9CiAKK2lubGluZSBpbnQgSW50UG9pbnQ6OmRpc3Rh
bmNlU3F1YXJlZFRvUG9pbnQoY29uc3QgSW50UG9pbnQmIHBvaW50KSBjb25zdAoreworICAgIHJl
dHVybiAoKCp0aGlzKSAtIHBvaW50KS5kaWFnb25hbExlbmd0aFNxdWFyZWQoKTsKK30KKwogI2lm
IFBMQVRGT1JNKFFUKQogaW5saW5lIFFEYXRhU3RyZWFtJiBvcGVyYXRvcjw8KFFEYXRhU3RyZWFt
JiBzdHJlYW0sIGNvbnN0IEludFBvaW50JiBwb2ludCkKIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ludFJlY3QuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvSW50UmVjdC5jcHAKaW5kZXggMDNjMzVlOC4uZGZhMmY5MSAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW50UmVjdC5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW50UmVjdC5jcHAKQEAgLTEzMiw2ICsx
MzIsMzUgQEAgdm9pZCBJbnRSZWN0OjpzY2FsZShmbG9hdCBzKQogICAgIG1fc2l6ZS5zZXRIZWln
aHQoKGludCkoaGVpZ2h0KCkgKiBzKSk7CiB9CiAKK3N0YXRpYyBpbmxpbmUgaW50IGRpc3RhbmNl
VG9JbnRlcnZhbChpbnQgcG9zLCBpbnQgc3RhcnQsIGludCBlbmQpCit7CisgICAgaWYgKHBvcyA8
IHN0YXJ0KQorICAgICAgICByZXR1cm4gc3RhcnQgLSBwb3M7CisgICAgaWYgKHBvcyA+IGVuZCkK
KyAgICAgICAgcmV0dXJuIGVuZCAtIHBvczsKKyAgICByZXR1cm4gMDsKK30KKworSW50U2l6ZSBJ
bnRSZWN0OjpkaWZmZXJlbmNlVG9Qb2ludChjb25zdCBJbnRQb2ludCYgcG9pbnQpIGNvbnN0Cit7
CisgICAgaW50IHhkaXN0YW5jZSA9IGRpc3RhbmNlVG9JbnRlcnZhbChwb2ludC54KCksIHgoKSwg
bWF4WCgpKTsKKyAgICBpbnQgeWRpc3RhbmNlID0gZGlzdGFuY2VUb0ludGVydmFsKHBvaW50Lnko
KSwgeSgpLCBtYXhZKCkpOworICAgIHJldHVybiBJbnRTaXplKHhkaXN0YW5jZSwgeWRpc3RhbmNl
KTsKK30KKworSW50U2l6ZSBJbnRSZWN0OjpkaWZmZXJlbmNlRnJvbUNlbnRlckxpbmVUb1BvaW50
KGNvbnN0IEludFBvaW50JiBwb2ludCkgY29uc3QKK3sKKyAgICAvLyBUaGUgY2VudGVyLWxpbmUg
aXMgdGhlIG5hdHVyYWwgY2VudGVyIG9mIGEgcmVjdGFuZ2xlLiBJdCBoYXMgYW4gZXF1YWwgZGlz
dGFuY2UgdG8gYWxsIHNpZGVzIG9mIHRoZSByZWN0YW5nbGUuCisgICAgSW50UG9pbnQgY2VudGVy
UG9pbnQgPSBjZW50ZXIoKTsKKyAgICBpbnQgeGRpc3RhbmNlID0gY2VudGVyUG9pbnQueCgpIC0g
cG9pbnQueCgpOworICAgIGludCB5ZGlzdGFuY2UgPSBjZW50ZXJQb2ludC55KCkgLSBwb2ludC55
KCk7CisgICAgaWYgKHdpZHRoKCkgPiBoZWlnaHQoKSkKKyAgICAgICAgeGRpc3RhbmNlID0gZGlz
dGFuY2VUb0ludGVydmFsKHBvaW50LngoKSwgeCgpICsgKGhlaWdodCgpIC8gMiksIG1heFgoKSAt
IChoZWlnaHQoKSAvIDIpKTsKKyAgICBlbHNlCisgICAgICAgIHlkaXN0YW5jZSA9IGRpc3RhbmNl
VG9JbnRlcnZhbChwb2ludC55KCksIHkoKSArICh3aWR0aCgpIC8gMiksIG1heFkoKSAtICh3aWR0
aCgpIC8gMikpOworICAgIHJldHVybiBJbnRTaXplKHhkaXN0YW5jZSwgeWRpc3RhbmNlKTsKK30K
KwogSW50UmVjdCB1bmlvblJlY3QoY29uc3QgVmVjdG9yPEludFJlY3Q+JiByZWN0cykKIHsKICAg
ICBJbnRSZWN0IHJlc3VsdDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL0ludFJlY3QuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ludFJl
Y3QuaAppbmRleCAzZWE4MjI5Li4wNWIwM2I2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9JbnRSZWN0LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvSW50UmVjdC5oCkBAIC0xNzEsNiArMTcxLDExIEBAIHB1YmxpYzoKICAgICB2b2lk
IGluZmxhdGUoaW50IGQpIHsgaW5mbGF0ZVgoZCk7IGluZmxhdGVZKGQpOyB9CiAgICAgdm9pZCBz
Y2FsZShmbG9hdCBzKTsKIAorICAgIEludFNpemUgZGlmZmVyZW5jZVRvUG9pbnQoY29uc3QgSW50
UG9pbnQmKSBjb25zdDsKKyAgICBJbnRTaXplIGRpZmZlcmVuY2VGcm9tQ2VudGVyTGluZVRvUG9p
bnQoY29uc3QgSW50UG9pbnQmKSBjb25zdDsKKyAgICBpbnQgZGlzdGFuY2VTcXVhcmVkVG9Qb2lu
dChjb25zdCBJbnRQb2ludCYpIGNvbnN0IHsgcmV0dXJuIGRpZmZlcmVuY2VUb1BvaW50KHApLmRp
YWdvbmFsTGVuZ3RoU3F1YXJlZCgpOyB9CisgICAgaW50IGRpc3RhbmNlU3F1YXJlZEZyb21DZW50
ZXJMaW5lVG9Qb2ludChjb25zdCBJbnRQb2ludCYpIGNvbnN0IHsgcmV0dXJuIGRpZmZlcmVuY2VG
cm9tQ2VudGVyTGluZVRvUG9pbnQocCkuZGlhZ29uYWxMZW5ndGhTcXVhcmVkKCk7IH0KKwogICAg
IEludFJlY3QgdHJhbnNwb3NlZFJlY3QoKSBjb25zdCB7IHJldHVybiBJbnRSZWN0KG1fbG9jYXRp
b24udHJhbnNwb3NlZFBvaW50KCksIG1fc2l6ZS50cmFuc3Bvc2VkU2l6ZSgpKTsgfQogCiAjaWYg
UExBVEZPUk0oV1gpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9JbnRTaXplLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbnRTaXplLmgK
aW5kZXggNjI1ZGIzYy4uN2RiZjdlZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvSW50U2l6ZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL0ludFNpemUuaApAQCAtOTgsNiArOTgsMTYgQEAgcHVibGljOgogICAgICAgICAqdGhpcyA9
IGV4cGFuZGVkVG8oSW50U2l6ZSgpKTsKICAgICB9CiAKKyAgICBpbnQgYXJlYSgpIGNvbnN0Cisg
ICAgeworICAgICAgICByZXR1cm4gbV93aWR0aCAqIG1faGVpZ2h0OworICAgIH0KKworICAgIGlu
dCBkaWFnb25hbExlbmd0aFNxdWFyZWQoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIG1f
d2lkdGggKiBtX3dpZHRoICsgbV9oZWlnaHQgKiBtX2hlaWdodDsKKyAgICB9CisKICAgICBJbnRT
aXplIHRyYW5zcG9zZWRTaXplKCkgY29uc3QKICAgICB7CiAgICAgICAgIHJldHVybiBJbnRTaXpl
KG1faGVpZ2h0LCBtX3dpZHRoKTsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>128178</attachid>
            <date>2012-02-22 04:31:01 -0800</date>
            <delta_ts>2012-02-23 08:50:23 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>Patch3</filename>
            <type>text/plain</type>
            <size>41468</size>
            <attacher name="Allan Sandfeld Jensen">allan.jensen</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL0NoYW5nZUxvZyBiL0NoYW5nZUxvZwppbmRleCA1NWZmODgzLi5lMDI1MDkz
IDEwMDY0NAotLS0gYS9DaGFuZ2VMb2cKKysrIGIvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTMgQEAK
KzIwMTItMDItMTYgIEFsbGFuIFNhbmRmZWxkIEplbnNlbiAgPGFsbGFuLmplbnNlbkBub2tpYS5j
b20+CisKKyAgICAgICAgTWFudWFsIHRlc3RzIHRoYXQgdGVzdHMgc3BlY2lhbCBjYXNlcyBvZiBn
ZXN0dXJlIHRhcCBoYW5kbGluZy4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTc4ODAxCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISku
CisKKyAgICAgICAgKiBNYW51YWxUZXN0cy9ldmVudC10cmlnZ2VyZWQtd2lkZ2V0cy5odG1sOiBB
ZGRlZC4KKyAgICAgICAgKiBNYW51YWxUZXN0cy9uZXN0ZWQtdG91Y2guaHRtbDogQWRkZWQuCisK
IDIwMTItMDItMjAgIE1hcnRpbiBSb2JpbnNvbiAgPG1yb2JpbnNvbkBpZ2FsaWEuY29tPgogCiAg
ICAgICAgIFtHVEtdIFR1cm4gb24gcmVxdWVzdEFuaW1hdGlvbkZyYW1lIGZvciByZWxlYXNlIGJ1
aWxkcwpkaWZmIC0tZ2l0IGEvTWFudWFsVGVzdHMvZXZlbnQtdHJpZ2dlcmVkLXdpZGdldHMuaHRt
bCBiL01hbnVhbFRlc3RzL2V2ZW50LXRyaWdnZXJlZC13aWRnZXRzLmh0bWwKbmV3IGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWJjOTQzNwotLS0gL2Rldi9udWxsCisrKyBiL01hbnVh
bFRlc3RzL2V2ZW50LXRyaWdnZXJlZC13aWRnZXRzLmh0bWwKQEAgLTAsMCArMSw1NiBAQAorPGh0
bWw+Cis8aGVhZD4KKzxzdHlsZT4KKyAgLmJveCB7IGJvcmRlcjogMXB4IHNvbGlkIGJsYWNrOyBi
b3JkZXItcmFkaXVzOiA1cHggNXB4OyBtYXJnaW46IDFlbTsgbWF4LXdpZHRoOiA0MGVtOyB9Cis8
L3N0eWxlPgorPC9oZWFkPgorPGJvZHk+Cis8c2NyaXB0PgorICBmdW5jdGlvbiB0cmlnZ2VySW5w
dXQoKSB7CisgICAgdmFyIGVsZW1lbnQgPSBldmVudC5zcmNFbGVtZW50OworICAgIGlmICghZWxl
bWVudC5vcGVuKSB7CisgICAgICBlbGVtZW50LmlubmVySFRNTCA9ICc8aW5wdXQgdHlwZT10ZXh0
IHN0eWxlPSJ3aWR0aDogMTAwJSI+PC9pbnB1dD4nCisgICAgICBlbGVtZW50Lm9wZW4gPSB0cnVl
OworICAgIH0KKyAgICBlbGVtZW50LmZpcnN0Q2hpbGQuZm9jdXMoKTsKKyAgfQorPC9zY3JpcHQ+
CisKK1Rlc3QgdmFyaW91cyB3YXlzIHRvIHRyaWdnZXIgaW5wdXQtd2lkZ2V0cy4gT24gYSB0b3Vj
aCBpbnRlcmZhY2UsIGFsbCB0aGUgYWN0aW9ucyBzaG91bGQgYmUgdHJpZ2dlcmFibGUgd2l0aCBl
aXRoZXIKK2EgdG91Y2ggZG93biBvciBhIHRvdWNoIHRhcC4KKworPGRpdiBjbGFzcz1ib3ggdGFi
aW5kZXg9MSBvbmZvY3VzPSd0cmlnZ2VySW5wdXQoKSc+CitGb2N1cyBoZXJlIHNob3VsZCBnaXZl
IGEgdGV4dCBpbnB1dC1maWVsZC4KKzwvZGl2PgorCis8ZGl2IGNsYXNzPWJveCBvbm1vdXNlb3Zl
cj0ndHJpZ2dlcklucHV0KCknPiAKK01vdXNlLW92ZXIgaGVyZSBzaG91bGQgZ2l2ZSBhIHRleHQg
aW5wdXQtZmllbGQuCis8L2Rpdj4KKworPHN0eWxlPgorICAuYm94Om5vdCg6aG92ZXIpIC5ob3Zl
cnRyaWdnZXJlZCB7IHZpc2liaWxpdHk6IGhpZGRlbjt9CisgIC5ib3g6aG92ZXIgLmhvdmVyZmFs
bGJhY2sgeyBkaXNwbGF5OiBub25lOyB9ICAKKzwvc3R5bGU+Cis8ZGl2IGNsYXNzPWJveD4gCis8
c3BhbiBjbGFzcz1ob3ZlcmZhbGxiYWNrPkhvdmVyaW5nIGhlcmUgc2hvdWxkIGdpdmUgYSB0ZXh0
IGlucHV0LWZpZWxkLjwvc3Bhbj4KKzxpbnB1dCB0eXBlPXRleHQgY2xhc3M9aG92ZXJ0cmlnZ2Vy
ZWQ+PC9pbnB1dD4KKzwvZGl2PgorCis8ZGl2IGNsYXNzPWJveCBpZD0nbXlib3gxJyBvbmZvY3Vz
PSd0cmlnZ2VySW5wdXQoKSc+CisgIDxzcGFuIHRhYmluZGV4PTE+IEZvY3VzaW5nIGhlcmUgc2hv
dWxkIG9ubHkgZ2l2ZSBmb2N1cyBvdXRsaW5lLgorICA8L3NwYW4+Cis8L2Rpdj4KKworPGRpdiBj
bGFzcz1ib3ggaWQ9J215Ym94Mic+CisgIDxzcGFuIHRhYmluZGV4PTE+IEZvY3VzaW5nIGhlcmUg
c2hvdWxkIGdpdmUgYSB0ZXh0IGlucHV0LWZpZWxkLgorICA8L3NwYW4+Cis8L2Rpdj4KKworPHNj
cmlwdD4KKyAgdmFyIGVsZW1lbnQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbXlib3gyJyk7
CisgIGVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignRE9NRm9jdXNJbicsIHRyaWdnZXJJbnB1dCwg
ZmFsc2UpOworPC9zY3JpcHQ+CisKKworPC9ib2R5PgorPC9odG1sPgpcIE5vIG5ld2xpbmUgYXQg
ZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL01hbnVhbFRlc3RzL25lc3RlZC10b3VjaC5odG1sIGIv
TWFudWFsVGVzdHMvbmVzdGVkLXRvdWNoLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMC4uYzFhM2UzYQotLS0gL2Rldi9udWxsCisrKyBiL01hbnVhbFRlc3RzL25lc3RlZC10
b3VjaC5odG1sCkBAIC0wLDAgKzEsMzIgQEAKKzxodG1sPgorPGhlYWQ+Cis8c3R5bGU+CisgIC5i
b3ggeyBib3JkZXI6IDFweCBzb2xpZCBibGFjazsgYm9yZGVyLXJhZGl1czogNXB4IDVweDsgbWFy
Z2luOiAxZW07IG1heC13aWR0aDogNDBlbTsgfQorPC9zdHlsZT4KKzwvaGVhZD4KKzxib2R5Pgor
VGVzdCB0aGUgY2FzZSB3aGVyZSBhIGNsaWNrYWJsZSB0YXJnZXQgaXMgbmVzdGVkIGluc2lkZSBh
IGRvY3VtZW50IHRoYXQgaXMgbW9uaXRvcmluZyBjbGlja3MuCisKK1RoZSB0YXJnZXQgd2l0aCB0
aGUgbG9jYWwgZXZlbnQtaGFuZGxlciBzaG91bGQgYmUgY2hvc2VuIGlmIG11bHRpcGxlIHRhcmdl
dHMgYXJlIHRvdWNoZWQuCisKKzxkaXYgY2xhc3M9Ym94IGlkPW15Ym94MT4KK0JveCB3aXRoIGEg
bG9jYWwgY2xpY2sgaGFuZGxlci4KKzwvZGl2PgorCis8ZGl2IGNsYXNzPWJveCBpZD1teWJveDI+
IAorQm94IHdpdGhvdXQgYSBsb2NhbCBjbGljayBoYW5kbGVyLgorPC9kaXY+CisKKzxzY3JpcHQ+
CisgIGZ1bmN0aW9uIG1vbml0b3IoZSkgeyBhbGVydChlLnRhcmdldCArKCBlLnRhcmdldC5pZCA/
ICggJyAjJyArIGUudGFyZ2V0LmlkKSA6ICcnKSk7IH07CisgIGZ1bmN0aW9uIGRvU29tZXRoaW5n
KGUpIHt9OworCisgIHZhciBlbGVtZW50ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ215Ym94
MScpOworICBlbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgZG9Tb21ldGhpbmcsIGZh
bHNlKTsKKyAgZWxlbWVudCA9IGRvY3VtZW50LmJvZHk7CisgIGVsZW1lbnQuYWRkRXZlbnRMaXN0
ZW5lcignY2xpY2snLCBtb25pdG9yLCBmYWxzZSk7Cis8L3NjcmlwdD4KKworCis8L2JvZHk+Cis8
L2h0bWw+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvQ2hhbmdlTG9nIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCmluZGV4IGI2MzRiYWYu
LjhjMmUxNTMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZworKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSw2NCBAQAorMjAxMi0wMi0yMiAgQWxsYW4g
U2FuZGZlbGQgSmVuc2VuICA8YWxsYW4uamVuc2VuQG5va2lhLmNvbT4KKworICAgICAgICBTZWxl
Y3QgYmVzdCB0YXJnZXQgZm9yIHRhcCBnZXN0dXJlLgorICAgICAgICBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9Nzg4MDEKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JP
RFkgKE9PUFMhKS4KKworICAgICAgICBUaGUgbmV3IEFQSSBpcyBhdmFpbGFibGUgdGhyb3VnaCBF
dmVudEhhbmRsZXI6Om5vZGVGb3JUYXBHZXN0dXJlQXRUb3VjaFBvaW50LCBidXQKKyAgICAgICAg
aW1wbGVtZW50YXRpb24gZGV0YWlscyBoYXZlIGJlZW4gcGxhY2VkIGluIHBsYXRmb3JtL0hpdFRl
c3RSZXN1bHRNZXRyaWNzLgorICAgICAgICAKKyAgICAgICAgVGhlIGRlZmF1bHQgaGl0IGRldGVj
dGlvbiBpcyBwZXJmb3JtZWQgYnkgbWVhc3VyaW5nIHRoZSBkaXN0YW5jZSB0byB0aGUgY2VudGVy
IAorICAgICAgICBsaW5lcyBvZiB0aGUgYWJzb2x1dGUgcmVjdHMgb2YgdGhlIGhpdCBub2Rlcy4g
QWJzb2x1dGUgcmVjdHMgYXJlIHVzZWQgaW5zdGVhZAorICAgICAgICBvZiBib3VuZGluZyByZWN0
cyB0byBtYWtlIGhpdC1kZXRlY3RpbmcgYWdhaW5zdCBsaW5rcyBvdmVyIGxpbmUgYnJlYWtzLiBE
aXN0YW5jZQorICAgICAgICB0byBjZW50ZXIgbGluZSBpcyB1c2VkIHRvIG1ha2UgaXQgZWFzaWVy
IHRvIGhpdCBzbWFsbCBsaW5rcyBuZXh0IHRvIGxhcmdlIGxpbmtzLgorICAgICAgICBGb3IgbGlu
ZS1yZWN0cyB0aGUgZGlzdGFuY2UgdG8gdGhlIGNlbnRlci1saW5lIGlzIGEgYmV0dGVyIGV4cHJl
c3Npb24gb2YgdGhlIGRpc3RhbmNlCisgICAgICAgIHRvIGEgcmVjdGFuZ2xlcyBjZW50ZXIgdGhh
biB0aGUgZGlzdGFuY2UgdG8gdGhlIGNlbnRlci1wb2ludC4KKworICAgICAgICBUbyBzdXBwb3J0
IHRoZSBkaXN0YW5jZSBjYWxjdWxhdGF0aW9uLCB0aGlzIHBhdGNoIGFsc28gaW1wbGVtZW50IGEg
Y29uc2lzdGVudCBzZXQgb2YgCisgICAgICAgIGRpc3RhbmNlIGFuZCBhcmVhIGZ1bmN0aW9ucyBm
b3IgUmVjdCwgUG9pbnQgYW5kIFNpemUgY2xhc3Nlcy4KKyAgICAgICAgCisgICAgICAgIFRlc3Rz
OiBNYW51YWxUZXN0cy9ldmVudC10cmlnZ2VyZWQtd2lkZ2V0cy5odG1sCisgICAgICAgICAgICAg
ICBNYW51YWxUZXN0cy9uZXN0ZWQtdG91Y2guaHRtbAorCisgICAgICAgICogVGFyZ2V0LnByaToK
KyAgICAgICAgKiBXZWJDb3JlLmd5cGk6CisgICAgICAgICogcGFnZS9FdmVudEhhbmRsZXIuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6RXZlbnRIYW5kbGVyOjpoYW5kbGVHZXN0dXJlRXZlbnQpOgor
ICAgICAgICAoV2ViQ29yZTo6RXZlbnRIYW5kbGVyOjpoYW5kbGVHZXN0dXJlVGFwKToKKyAgICAg
ICAgKFdlYkNvcmU6OkV2ZW50SGFuZGxlcjo6aGFuZGxlR2VzdHVyZVNjcm9sbFVwZGF0ZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpFdmVudEhhbmRsZXI6Om5vZGVGb3JUYXBHZXN0dXJlQXRUb3VjaFBv
aW50KToKKyAgICAgICAgKiBwYWdlL0V2ZW50SGFuZGxlci5oOgorICAgICAgICAqIHBsYXRmb3Jt
L2dyYXBoaWNzL0Zsb2F0UG9pbnQuaDoKKyAgICAgICAgKFdlYkNvcmU6OkZsb2F0UG9pbnQ6OkZs
b2F0UG9pbnQpOgorICAgICAgICAoV2ViQ29yZTo6RmxvYXRQb2ludDo6ZGlzdGFuY2VUb1BvaW50
KToKKyAgICAgICAgKFdlYkNvcmU6OkZsb2F0UG9pbnQ6OmRpc3RhbmNlU3F1YXJlZFRvUG9pbnQp
OgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0Zsb2F0UXVhZC5oOgorICAgICAgICAoV2Vi
Q29yZTo6RmxvYXRRdWFkOjpjZW50ZXIpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0Zs
b2F0UmVjdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpkaXN0YW5jZVRvSW50ZXJ2YWwpOgorICAg
ICAgICAoV2ViQ29yZTo6RmxvYXRSZWN0OjpkaWZmZXJlbmNlVG9Qb2ludCk6CisgICAgICAgIChX
ZWJDb3JlOjpGbG9hdFJlY3Q6OmRpc3RhbmNlVG9Qb2ludCk6CisgICAgICAgIChXZWJDb3JlOjpG
bG9hdFJlY3Q6OmRpZmZlcmVuY2VGcm9tQ2VudGVyTGluZVRvUG9pbnQpOgorICAgICAgICAqIHBs
YXRmb3JtL2dyYXBoaWNzL0Zsb2F0UmVjdC5oOgorICAgICAgICAoV2ViQ29yZTo6RmxvYXRSZWN0
OjpkaXN0YW5jZVNxdWFyZWRUb1BvaW50KToKKyAgICAgICAgKFdlYkNvcmU6OkZsb2F0UmVjdDo6
ZGlzdGFuY2VTcXVhcmVkRnJvbUNlbnRlckxpbmVUb1BvaW50KToKKyAgICAgICAgKiBwbGF0Zm9y
bS9ncmFwaGljcy9GbG9hdFNpemUuaDoKKyAgICAgICAgKFdlYkNvcmU6OkZsb2F0U2l6ZTo6YXJl
YSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvSW50UG9pbnQuaDoKKyAgICAgICAgKFdl
YkNvcmU6OkludFBvaW50OjpsZW5ndGhTcXVhcmVkKToKKyAgICAgICAgKFdlYkNvcmU6OkludFBv
aW50OjpkaXN0YW5jZVNxdWFyZWRUb1BvaW50KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGlj
cy9JbnRSZWN0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmRpc3RhbmNlVG9JbnRlcnZhbCk6Cisg
ICAgICAgIChXZWJDb3JlOjpJbnRSZWN0OjpkaWZmZXJlbmNlVG9Qb2ludCk6CisgICAgICAgIChX
ZWJDb3JlOjpJbnRSZWN0OjpkaWZmZXJlbmNlRnJvbUNlbnRlckxpbmVUb1BvaW50KToKKyAgICAg
ICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9JbnRSZWN0Lmg6CisgICAgICAgIChXZWJDb3JlOjpJbnRS
ZWN0OjpkaXN0YW5jZVNxdWFyZWRUb1BvaW50KToKKyAgICAgICAgKFdlYkNvcmU6OkludFJlY3Q6
OmRpc3RhbmNlU3F1YXJlZEZyb21DZW50ZXJMaW5lVG9Qb2ludCk6CisgICAgICAgICogcGxhdGZv
cm0vZ3JhcGhpY3MvSW50U2l6ZS5oOgorICAgICAgICAoV2ViQ29yZTo6SW50U2l6ZTo6YXJlYSk6
CisgICAgICAgIChXZWJDb3JlOjpJbnRTaXplOjpkaWFnb25hbExlbmd0aFNxdWFyZWQpOgorCiAy
MDEyLTAyLTIxICBDc2FiYSBPc3p0cm9nb27DoWMgIDxvc3N5QHdlYmtpdC5vcmc+CiAKICAgICAg
ICAgUmVtb3ZlIHN0eWxlc2hlZXQgcG9pbnRlciBmcm9tIFN0eWxlUHJvcGVydHlTZXQKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL1RhcmdldC5wcmkgYi9Tb3VyY2UvV2ViQ29yZS9UYXJnZXQu
cHJpCmluZGV4IDA0MWY4NjguLmY4NGNhZmYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1Rh
cmdldC5wcmkKKysrIGIvU291cmNlL1dlYkNvcmUvVGFyZ2V0LnByaQpAQCAtMTA1MCw2ICsxMDUw
LDcgQEAgU09VUkNFUyArPSBcCiAgICAgcGxhdGZvcm0vRmlsZVN5c3RlbS5jcHAgXAogICAgIHBs
YXRmb3JtL0dlb2xvY2F0aW9uU2VydmljZS5jcHAgXAogICAgIHBsYXRmb3JtL0hpc3RvZ3JhbVN1
cHBvcnQuY3BwIFwKKyAgICBwbGF0Zm9ybS9IaXRUZXN0UmVzdWx0TWV0cmljcy5jcHAgXAogICAg
IHBsYXRmb3JtL2ltYWdlLWRlY29kZXJzL3F0L0ltYWdlRnJhbWVRdC5jcHAgXAogICAgIHBsYXRm
b3JtL2dyYXBoaWNzL0ZvbnREZXNjcmlwdGlvbi5jcHAgXAogICAgIHBsYXRmb3JtL2dyYXBoaWNz
L0ZvbnRGYWxsYmFja0xpc3QuY3BwIFwKQEAgLTIxMDYsNiArMjEwNyw3IEBAIEhFQURFUlMgKz0g
XAogICAgIHBsYXRmb3JtL0ZpbGVTeXN0ZW0uaCBcCiAgICAgcGxhdGZvcm0vR2VvbG9jYXRpb25T
ZXJ2aWNlLmggXAogICAgIHBsYXRmb3JtL0hpc3RvZ3JhbVN1cHBvcnQuaCBcCisgICAgcGxhdGZv
cm0vSGl0VGVzdFJlc3VsdE1ldHJpY3MuaCBcCiAgICAgcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMv
SW1hZ2VEZWNvZGVyLmggXAogICAgIHBsYXRmb3JtL21vY2svRGV2aWNlT3JpZW50YXRpb25DbGll
bnRNb2NrLmggXAogICAgIHBsYXRmb3JtL21vY2svR2VvbG9jYXRpb25DbGllbnRNb2NrLmNwcCBc
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkgYi9Tb3VyY2UvV2ViQ29y
ZS9XZWJDb3JlLmd5cGkKaW5kZXggNjc0NjRkZS4uZTdiNWQ1ZiAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvV2ViQ29yZS5neXBpCisrKyBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwaQpA
QCAtMjc1OSw2ICsyNzU5LDggQEAKICAgICAgICAgICAgICdwbGF0Zm9ybS9HZW9sb2NhdGlvblNl
cnZpY2UuY3BwJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9HZW9sb2NhdGlvblNlcnZpY2UuaCcs
CiAgICAgICAgICAgICAncGxhdGZvcm0vSGFzaFRvb2xzLmgnLAorICAgICAgICAgICAgJ3BsYXRm
b3JtL0hpdFRlc3RSZXN1bHRNZXRyaWNzLmNwcCcsCisgICAgICAgICAgICAncGxhdGZvcm0vSGl0
VGVzdFJlc3VsdE1ldHJpY3MuaCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vS1VSTC5jcHAnLAog
ICAgICAgICAgICAgJ3BsYXRmb3JtL0tVUkxHb29nbGUuY3BwJywKICAgICAgICAgICAgICdwbGF0
Zm9ybS9LVVJMR29vZ2xlUHJpdmF0ZS5oJywKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Bh
Z2UvRXZlbnRIYW5kbGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRXZlbnRIYW5kbGVyLmNw
cAppbmRleCA4NTIwZmM2Li4yNzZlMmM1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wYWdl
L0V2ZW50SGFuZGxlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGFnZS9FdmVudEhhbmRsZXIu
Y3BwCkBAIC04NSw2ICs4NSw3IEBACiAjaW5jbHVkZSA8d3RmL1N0ZExpYkV4dHJhcy5oPgogCiAj
aWYgRU5BQkxFKEdFU1RVUkVfRVZFTlRTKQorI2luY2x1ZGUgIkhpdFRlc3RSZXN1bHRNZXRyaWNz
LmgiCiAjaW5jbHVkZSAiUGxhdGZvcm1HZXN0dXJlRXZlbnQuaCIKICNlbmRpZgogCkBAIC0yMzQy
LDI1ICsyMzQzLDEwIEBAIGJvb2wgRXZlbnRIYW5kbGVyOjpoYW5kbGVHZXN0dXJlRXZlbnQoY29u
c3QgUGxhdGZvcm1HZXN0dXJlRXZlbnQmIGdlc3R1cmVFdmVudCkKICAgICBzd2l0Y2ggKGdlc3R1
cmVFdmVudC50eXBlKCkpIHsKICAgICBjYXNlIFBsYXRmb3JtRXZlbnQ6Okdlc3R1cmVUYXBEb3du
OgogICAgICAgICBicmVhazsKLSAgICBjYXNlIFBsYXRmb3JtRXZlbnQ6Okdlc3R1cmVUYXA6IHsK
LSAgICAgICAgLy8gRklYTUU6IFJlZmFjdG9yIHRoaXMgY29kZSB0byBub3QgaGl0IHRlc3QgbXVs
dGlwbGUgdGltZXMgb25jZSBoaXQgdGVzdGluZyBoYXMgYmVlbiBjb3JyZWN0ZWQgYXMgc3VnZ2Vz
dGVkIGFib3ZlLgotICAgICAgICBQbGF0Zm9ybU1vdXNlRXZlbnQgZmFrZU1vdXNlTW92ZShnZXN0
dXJlRXZlbnQucG9zaXRpb24oKSwgZ2VzdHVyZUV2ZW50Lmdsb2JhbFBvc2l0aW9uKCksIE5vQnV0
dG9uLCBQbGF0Zm9ybUV2ZW50OjpNb3VzZU1vdmVkLCAvKiBjbGlja0NvdW50ICovIDEsIGdlc3R1
cmVFdmVudC5zaGlmdEtleSgpLCBnZXN0dXJlRXZlbnQuY3RybEtleSgpLCBnZXN0dXJlRXZlbnQu
YWx0S2V5KCksIGdlc3R1cmVFdmVudC5tZXRhS2V5KCksIGdlc3R1cmVFdmVudC50aW1lc3RhbXAo
KSk7Ci0gICAgICAgIFBsYXRmb3JtTW91c2VFdmVudCBmYWtlTW91c2VEb3duKGdlc3R1cmVFdmVu
dC5wb3NpdGlvbigpLCBnZXN0dXJlRXZlbnQuZ2xvYmFsUG9zaXRpb24oKSwgTGVmdEJ1dHRvbiwg
UGxhdGZvcm1FdmVudDo6TW91c2VQcmVzc2VkLCAvKiBjbGlja0NvdW50ICovIDEsIGdlc3R1cmVF
dmVudC5zaGlmdEtleSgpLCBnZXN0dXJlRXZlbnQuY3RybEtleSgpLCBnZXN0dXJlRXZlbnQuYWx0
S2V5KCksIGdlc3R1cmVFdmVudC5tZXRhS2V5KCksIGdlc3R1cmVFdmVudC50aW1lc3RhbXAoKSk7
Ci0gICAgICAgIFBsYXRmb3JtTW91c2VFdmVudCBmYWtlTW91c2VVcChnZXN0dXJlRXZlbnQucG9z
aXRpb24oKSwgZ2VzdHVyZUV2ZW50Lmdsb2JhbFBvc2l0aW9uKCksIExlZnRCdXR0b24sIFBsYXRm
b3JtRXZlbnQ6Ok1vdXNlUmVsZWFzZWQsIC8qIGNsaWNrQ291bnQgKi8gMSwgZ2VzdHVyZUV2ZW50
LnNoaWZ0S2V5KCksIGdlc3R1cmVFdmVudC5jdHJsS2V5KCksIGdlc3R1cmVFdmVudC5hbHRLZXko
KSwgZ2VzdHVyZUV2ZW50Lm1ldGFLZXkoKSwgZ2VzdHVyZUV2ZW50LnRpbWVzdGFtcCgpKTsKLSAg
ICAgICAgbW91c2VNb3ZlZChmYWtlTW91c2VNb3ZlKTsKLSAgICAgICAgaGFuZGxlTW91c2VQcmVz
c0V2ZW50KGZha2VNb3VzZURvd24pOwotICAgICAgICBoYW5kbGVNb3VzZVJlbGVhc2VFdmVudChm
YWtlTW91c2VVcCk7Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLSAgICBjYXNlIFBsYXRm
b3JtRXZlbnQ6Okdlc3R1cmVTY3JvbGxVcGRhdGU6IHsKLSAgICAgICAgY29uc3QgZmxvYXQgdGlj
a0Rpdmlzb3IgPSAoZmxvYXQpV2hlZWxFdmVudDo6dGlja011bHRpcGxpZXI7Ci0gICAgICAgIC8v
IEZJWE1FOiBSZXBsYWNlIHRoaXMgaW50ZXJpbSBpbXBsZW1lbnRhdGlvbiBvbmNlIHRoZSBhYm92
ZSBmaXhtZSBoYXMgYmVlbiBhZGRyZXNzZWQuCi0gICAgICAgIEludFBvaW50IHBvaW50KGdlc3R1
cmVFdmVudC5wb3NpdGlvbigpLngoKSwgZ2VzdHVyZUV2ZW50LnBvc2l0aW9uKCkueSgpKTsKLSAg
ICAgICAgSW50UG9pbnQgZ2xvYmFsUG9pbnQoZ2VzdHVyZUV2ZW50Lmdsb2JhbFBvc2l0aW9uKCku
eCgpLCBnZXN0dXJlRXZlbnQuZ2xvYmFsUG9zaXRpb24oKS55KCkpOwotICAgICAgICBQbGF0Zm9y
bVdoZWVsRXZlbnQgc3ludGhldGljV2hlZWxFdmVudChwb2ludCwgZ2xvYmFsUG9pbnQsIGdlc3R1
cmVFdmVudC5kZWx0YVgoKSwgZ2VzdHVyZUV2ZW50LmRlbHRhWSgpLCBnZXN0dXJlRXZlbnQuZGVs
dGFYKCkgLyB0aWNrRGl2aXNvciwgZ2VzdHVyZUV2ZW50LmRlbHRhWSgpIC8gdGlja0Rpdmlzb3Is
IFNjcm9sbEJ5UGl4ZWxXaGVlbEV2ZW50LCBnZXN0dXJlRXZlbnQuc2hpZnRLZXkoKSwgZ2VzdHVy
ZUV2ZW50LmN0cmxLZXkoKSwgZ2VzdHVyZUV2ZW50LmFsdEtleSgpLCBnZXN0dXJlRXZlbnQubWV0
YUtleSgpKTsKLSAgICAgICAgaGFuZGxlV2hlZWxFdmVudChzeW50aGV0aWNXaGVlbEV2ZW50KTsK
LSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQorICAgIGNhc2UgUGxhdGZvcm1FdmVudDo6R2Vz
dHVyZVRhcDoKKyAgICAgICAgcmV0dXJuIGhhbmRsZUdlc3R1cmVUYXAoZ2VzdHVyZUV2ZW50KTsK
KyAgICBjYXNlIFBsYXRmb3JtRXZlbnQ6Okdlc3R1cmVTY3JvbGxVcGRhdGU6CisgICAgICAgIHJl
dHVybiBoYW5kbGVHZXN0dXJlU2Nyb2xsVXBkYXRlKGdlc3R1cmVFdmVudCk7CiAgICAgY2FzZSBQ
bGF0Zm9ybUV2ZW50OjpHZXN0dXJlRG91YmxlVGFwOgogICAgIGNhc2UgUGxhdGZvcm1FdmVudDo6
R2VzdHVyZVNjcm9sbEJlZ2luOgogICAgIGNhc2UgUGxhdGZvcm1FdmVudDo6R2VzdHVyZVNjcm9s
bEVuZDoKQEAgLTIzNzAsNiArMjM1Niw1MyBAQCBib29sIEV2ZW50SGFuZGxlcjo6aGFuZGxlR2Vz
dHVyZUV2ZW50KGNvbnN0IFBsYXRmb3JtR2VzdHVyZUV2ZW50JiBnZXN0dXJlRXZlbnQpCiAgICAg
fQogICAgIHJldHVybiB0cnVlOwogfQorCitib29sIEV2ZW50SGFuZGxlcjo6aGFuZGxlR2VzdHVy
ZVRhcChjb25zdCBQbGF0Zm9ybUdlc3R1cmVFdmVudCYgZ2VzdHVyZUV2ZW50KQoreworICAgIExh
eW91dFBvaW50IGFkanVzdGVkUG9pbnQgPSBnZXN0dXJlRXZlbnQucG9zaXRpb24oKTsKKyAgICAv
LyBGSVhNRTogUmVmYWN0b3IgdGhpcyBjb2RlIHRvIG5vdCBoaXQgdGVzdCBtdWx0aXBsZSB0aW1l
cyBvbmNlIGhpdCB0ZXN0aW5nCisgICAgLy8gaGFzIGJlZW4gY29ycmVjdGVkIGFzIHN1Z2dlc3Rl
ZCBhYm92ZSBpbiBoYW5kbGVHZXN0dXJlRXZlbnQoKS4KKyAgICBpZiAoIWdlc3R1cmVFdmVudC5h
cmVhKCkuaXNFbXB0eSgpKSB7CisgICAgICAgIE5vZGUqIHRhcmdldE5vZGUgPSAwOworICAgICAg
ICAvLyBGb3Igbm93IHdlIHVzZSB0aGUgYWRqdXN0ZWQgcG9zaXRpb24gdG8gZW5zdXJlIHRoZSBs
YXRlciByZWR1bmRhbnQgaGl0LXRlc3RzIGhpdHMgdGhlIHJpZ2h0IG5vZGUuCisgICAgICAgIG5v
ZGVGb3JUYXBHZXN0dXJlQXRUb3VjaFBvaW50KGdlc3R1cmVFdmVudC5wb3NpdGlvbigpLCBJbnRT
aXplKGdlc3R1cmVFdmVudC5hcmVhKCkud2lkdGgoKSAvIDIsIGdlc3R1cmVFdmVudC5hcmVhKCku
aGVpZ2h0KCkgLyAyKSwgYWRqdXN0ZWRQb2ludCwgdGFyZ2V0Tm9kZSk7CisgICAgICAgIGlmICgh
dGFyZ2V0Tm9kZSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICBib29s
IGRlZmF1bHRQcmV2ZW50ZWQgPSBmYWxzZTsKKyAgICBQbGF0Zm9ybU1vdXNlRXZlbnQgZmFrZU1v
dXNlTW92ZShhZGp1c3RlZFBvaW50LCBnZXN0dXJlRXZlbnQuZ2xvYmFsUG9zaXRpb24oKSwgTm9C
dXR0b24sIFBsYXRmb3JtRXZlbnQ6Ok1vdXNlTW92ZWQsIC8qIGNsaWNrQ291bnQgKi8gMSwgZ2Vz
dHVyZUV2ZW50LnNoaWZ0S2V5KCksIGdlc3R1cmVFdmVudC5jdHJsS2V5KCksIGdlc3R1cmVFdmVu
dC5hbHRLZXkoKSwgZ2VzdHVyZUV2ZW50Lm1ldGFLZXkoKSwgZ2VzdHVyZUV2ZW50LnRpbWVzdGFt
cCgpKTsKKyAgICBQbGF0Zm9ybU1vdXNlRXZlbnQgZmFrZU1vdXNlRG93bihhZGp1c3RlZFBvaW50
LCBnZXN0dXJlRXZlbnQuZ2xvYmFsUG9zaXRpb24oKSwgTGVmdEJ1dHRvbiwgUGxhdGZvcm1FdmVu
dDo6TW91c2VQcmVzc2VkLCAvKiBjbGlja0NvdW50ICovIDEsIGdlc3R1cmVFdmVudC5zaGlmdEtl
eSgpLCBnZXN0dXJlRXZlbnQuY3RybEtleSgpLCBnZXN0dXJlRXZlbnQuYWx0S2V5KCksIGdlc3R1
cmVFdmVudC5tZXRhS2V5KCksIGdlc3R1cmVFdmVudC50aW1lc3RhbXAoKSk7CisgICAgUGxhdGZv
cm1Nb3VzZUV2ZW50IGZha2VNb3VzZVVwKGFkanVzdGVkUG9pbnQsIGdlc3R1cmVFdmVudC5nbG9i
YWxQb3NpdGlvbigpLCBMZWZ0QnV0dG9uLCBQbGF0Zm9ybUV2ZW50OjpNb3VzZVJlbGVhc2VkLCAv
KiBjbGlja0NvdW50ICovIDEsIGdlc3R1cmVFdmVudC5zaGlmdEtleSgpLCBnZXN0dXJlRXZlbnQu
Y3RybEtleSgpLCBnZXN0dXJlRXZlbnQuYWx0S2V5KCksIGdlc3R1cmVFdmVudC5tZXRhS2V5KCks
IGdlc3R1cmVFdmVudC50aW1lc3RhbXAoKSk7CisgICAgbW91c2VNb3ZlZChmYWtlTW91c2VNb3Zl
KTsKKyAgICBkZWZhdWx0UHJldmVudGVkIHw9IGhhbmRsZU1vdXNlUHJlc3NFdmVudChmYWtlTW91
c2VEb3duKTsKKyAgICBkZWZhdWx0UHJldmVudGVkIHw9IGhhbmRsZU1vdXNlUmVsZWFzZUV2ZW50
KGZha2VNb3VzZVVwKTsKKyAgICByZXR1cm4gZGVmYXVsdFByZXZlbnRlZDsKK30KKworYm9vbCBF
dmVudEhhbmRsZXI6OmhhbmRsZUdlc3R1cmVTY3JvbGxVcGRhdGUoY29uc3QgUGxhdGZvcm1HZXN0
dXJlRXZlbnQmIGdlc3R1cmVFdmVudCkKK3sKKyAgICBjb25zdCBmbG9hdCB0aWNrRGl2aXNvciA9
IChmbG9hdClXaGVlbEV2ZW50Ojp0aWNrTXVsdGlwbGllcjsKKyAgICAvLyBGSVhNRTogUmVwbGFj
ZSB0aGlzIGludGVyaW0gaW1wbGVtZW50YXRpb24gb25jZSB0aGUgYWJvdmUgZml4bWUgaW4gaGFu
ZGxlR2VzdHVyZUV2ZW50KCkgaGFzIGJlZW4gYWRkcmVzc2VkLgorICAgIGJvb2wgZGVmYXVsdFBy
ZXZlbnRlZCA9IGZhbHNlOworICAgIEludFBvaW50IHBvaW50KGdlc3R1cmVFdmVudC5wb3NpdGlv
bigpLngoKSwgZ2VzdHVyZUV2ZW50LnBvc2l0aW9uKCkueSgpKTsKKyAgICBJbnRQb2ludCBnbG9i
YWxQb2ludChnZXN0dXJlRXZlbnQuZ2xvYmFsUG9zaXRpb24oKS54KCksIGdlc3R1cmVFdmVudC5n
bG9iYWxQb3NpdGlvbigpLnkoKSk7CisgICAgUGxhdGZvcm1XaGVlbEV2ZW50IHN5bnRoZXRpY1do
ZWVsRXZlbnQocG9pbnQsIGdsb2JhbFBvaW50LCBnZXN0dXJlRXZlbnQuZGVsdGFYKCksIGdlc3R1
cmVFdmVudC5kZWx0YVkoKSwgZ2VzdHVyZUV2ZW50LmRlbHRhWCgpIC8gdGlja0Rpdmlzb3IsIGdl
c3R1cmVFdmVudC5kZWx0YVkoKSAvIHRpY2tEaXZpc29yLCBTY3JvbGxCeVBpeGVsV2hlZWxFdmVu
dCwgZ2VzdHVyZUV2ZW50LnNoaWZ0S2V5KCksIGdlc3R1cmVFdmVudC5jdHJsS2V5KCksIGdlc3R1
cmVFdmVudC5hbHRLZXkoKSwgZ2VzdHVyZUV2ZW50Lm1ldGFLZXkoKSk7CisgICAgZGVmYXVsdFBy
ZXZlbnRlZCB8PSBoYW5kbGVXaGVlbEV2ZW50KHN5bnRoZXRpY1doZWVsRXZlbnQpOworICAgIHJl
dHVybiBkZWZhdWx0UHJldmVudGVkOworfQorCit2b2lkIEV2ZW50SGFuZGxlcjo6bm9kZUZvclRh
cEdlc3R1cmVBdFRvdWNoUG9pbnQoY29uc3QgSW50UG9pbnQmIGNlbnRlciwgY29uc3QgSW50U2l6
ZSYgcmFkaXVzLCBJbnRQb2ludCYgdGFyZ2V0UG9pbnQsIE5vZGUqJiB0YXJnZXROb2RlKQorewor
ICAgIEhpdFRlc3RSZXF1ZXN0OjpIaXRUZXN0UmVxdWVzdFR5cGUgaGl0VHlwZSA9IEhpdFRlc3RS
ZXF1ZXN0OjpSZWFkT25seSB8IEhpdFRlc3RSZXF1ZXN0OjpBY3RpdmU7CisgICAgSW50UmVjdCB0
b3VjaFJlY3QoY2VudGVyLXJhZGl1cywgSW50U2l6ZShyYWRpdXMud2lkdGgoKSoyLCByYWRpdXMu
aGVpZ2h0KCkqMikpOworICAgIHRhcmdldE5vZGUgPSAwOworCisgICAgSGl0VGVzdFJlc3VsdCBy
ZXN1bHQgPSBoaXRUZXN0UmVzdWx0QXRQb2ludChjZW50ZXIsIC8qYWxsb3dTaGFkb3dDb250ZW50
Ki8gZmFsc2UsIGZhbHNlLCBEb250SGl0VGVzdFNjcm9sbGJhcnMsIGhpdFR5cGUsIHJhZGl1cyk7
CisKKyAgICBIaXRUZXN0UmVzdWx0TWV0cmljczo6ZmluZEJlc3RDYW5kaWRhdGVGb3JHZXN0dXJl
VGFwKHRhcmdldE5vZGUsIHRhcmdldFBvaW50LCBjZW50ZXIsIHRvdWNoUmVjdCwgcmVzdWx0KTsK
K30KKwogI2VuZGlmCiAKICNpZiBFTkFCTEUoQ09OVEVYVF9NRU5VUykKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3BhZ2UvRXZlbnRIYW5kbGVyLmggYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL0V2
ZW50SGFuZGxlci5oCmluZGV4IDc3MzNhMGYuLjUxOTJhYTUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3BhZ2UvRXZlbnRIYW5kbGVyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGFnZS9FdmVu
dEhhbmRsZXIuaApAQCAtMzEsNiArMzEsNyBAQAogI2luY2x1ZGUgIkZvY3VzRGlyZWN0aW9uLmgi
CiAjaW5jbHVkZSAiSGl0VGVzdFJlcXVlc3QuaCIKICNpbmNsdWRlICJQbGF0Zm9ybU1vdXNlRXZl
bnQuaCIKKyNpbmNsdWRlICJQbGF0Zm9ybVRvdWNoUG9pbnQuaCIKICNpbmNsdWRlICJTY3JvbGxU
eXBlcy5oIgogI2luY2x1ZGUgIlRleHRFdmVudElucHV0VHlwZS5oIgogI2luY2x1ZGUgIlRleHRH
cmFudWxhcml0eS5oIgpAQCAtMTYyLDYgKzE2Myw5IEBAIHB1YmxpYzoKIAogI2lmIEVOQUJMRShH
RVNUVVJFX0VWRU5UUykKICAgICBib29sIGhhbmRsZUdlc3R1cmVFdmVudChjb25zdCBQbGF0Zm9y
bUdlc3R1cmVFdmVudCYpOworICAgIGJvb2wgaGFuZGxlR2VzdHVyZVRhcChjb25zdCBQbGF0Zm9y
bUdlc3R1cmVFdmVudCYpOworICAgIGJvb2wgaGFuZGxlR2VzdHVyZVNjcm9sbFVwZGF0ZShjb25z
dCBQbGF0Zm9ybUdlc3R1cmVFdmVudCYpOworICAgIHZvaWQgbm9kZUZvclRhcEdlc3R1cmVBdFRv
dWNoUG9pbnQoY29uc3QgSW50UG9pbnQmIGNlbnRlciwgY29uc3QgSW50U2l6ZSYgcmFkaXVzLCBJ
bnRQb2ludCYgdGFyZ2V0UG9pbnQsIE5vZGUqJiB0YXJnZXROb2RlKTsKICNlbmRpZgogCiAjaWYg
RU5BQkxFKENPTlRFWFRfTUVOVVMpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9IaXRUZXN0UmVzdWx0TWV0cmljcy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9IaXRU
ZXN0UmVzdWx0TWV0cmljcy5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4u
NjQwMDZiNQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL0hpdFRl
c3RSZXN1bHRNZXRyaWNzLmNwcApAQCAtMCwwICsxLDIxMCBAQAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAxMiBOb2tpYSBDb3Jwb3JhdGlvbiBhbmQvb3IgaXRzIHN1YnNpZGlhcnkoLWllcykKKyAq
CisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUg
aXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFy
eSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29m
dHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9y
IChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5
IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBi
dXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50
eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQ
T1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3Ig
bW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2Yg
dGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhp
cyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisg
KiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQs
IEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2lu
Y2x1ZGUgImNvbmZpZy5oIgorCisjaW5jbHVkZSAiSGl0VGVzdFJlc3VsdE1ldHJpY3MuaCIKKwor
I2luY2x1ZGUgIkNvbnRhaW5lck5vZGUuaCIKKyNpbmNsdWRlICJGbG9hdFBvaW50LmgiCisjaW5j
bHVkZSAiRmxvYXRRdWFkLmgiCisjaW5jbHVkZSAiSGl0VGVzdFJlc3VsdC5oIgorI2luY2x1ZGUg
IkludFBvaW50LmgiCisjaW5jbHVkZSAiSW50U2l6ZS5oIgorI2luY2x1ZGUgIk5vZGUuaCIKKyNp
bmNsdWRlICJSZW5kZXJPYmplY3QuaCIKKyNpbmNsdWRlICJSZW5kZXJTdHlsZS5oIgorCituYW1l
c3BhY2UgV2ViQ29yZSB7CisKK25hbWVzcGFjZSBIaXRUZXN0UmVzdWx0TWV0cmljcyB7CisKKy8v
IFRha2VzIG5vbi1jb25zdCBOb2RlKiBiZWNhdXNlIGlzQ29udGVudEVkaXRhYmxlIGlzIGEgbm9u
LWNvbnN0IGZ1bmN0aW9uLgorYm9vbCBub2RlUmVzcG9uZHNUb1RhcEdlc3R1cmUoTm9kZSogbm9k
ZSkKK3sKKyAgICBpZiAobm9kZS0+aXNMaW5rKCkKKyAgICAgICAgfHwgbm9kZS0+aXNDb250ZW50
RWRpdGFibGUoKQorICAgICAgICB8fCBub2RlLT5pc01vdXNlRm9jdXNhYmxlKCkpCisgICAgICAg
IC8vIEZJWE1FOiBJbXBsZW1lbnQgaGFzRGVmYXVsdEV2ZW50SGFuZGxlciBhbmQgdXNlIHRoYXQg
aW5zdGVhZCBvZiBhbGwgb2YgdGhlc2UgYWJvdmUgY2FsbHM/CisgICAgICAgIHJldHVybiB0cnVl
OworICAgIGlmIChub2RlLT5oYXNFdmVudExpc3RlbmVycygpCisgICAgICAgICYmIChub2RlLT5o
YXNFdmVudExpc3RlbmVycyhldmVudE5hbWVzKCkuY2xpY2tFdmVudCkKKyAgICAgICAgICAgIHx8
IG5vZGUtPmhhc0V2ZW50TGlzdGVuZXJzKGV2ZW50TmFtZXMoKS5ET01BY3RpdmF0ZUV2ZW50KQor
ICAgICAgICAgICAgfHwgbm9kZS0+aGFzRXZlbnRMaXN0ZW5lcnMoZXZlbnROYW1lcygpLm1vdXNl
ZG93bkV2ZW50KQorICAgICAgICAgICAgfHwgbm9kZS0+aGFzRXZlbnRMaXN0ZW5lcnMoZXZlbnRO
YW1lcygpLm1vdXNldXBFdmVudCkKKyAgICAgICAgICAgIHx8IG5vZGUtPmhhc0V2ZW50TGlzdGVu
ZXJzKGV2ZW50TmFtZXMoKS5tb3VzZW1vdmVFdmVudCkKKyAgICAgICAgICAgIC8vIENoZWNraW5n
IGZvciBmb2N1cyBldmVudHMgaXMgbm90IG5lY2Vzc2FyeSBzaW5jZSB0aGV5IGNhbiBvbmx5IGZp
cmUgb24KKyAgICAgICAgICAgIC8vIGZvY3VzYWJsZSBlbGVtZW50cyB3aGljaCBoYXZlIGFscmVh
ZHkgYmVlbiBjYXB0dXJlZCBhYm92ZS4KKyAgICAgICAgKSkKKyAgICAgICAgcmV0dXJuIHRydWU7
CisgICAgaWYgKG5vZGUtPnJlbmRlclN0eWxlKCkpIHsKKyAgICAgICAgLy8gQWNjZXB0IG5vZGVz
IHRoYXQgaGFzIGEgQ1NTIGVmZmVjdCB3aGVuIHRvdWNoZWQuCisgICAgICAgIGlmIChub2RlLT5y
ZW5kZXJTdHlsZSgpLT5hZmZlY3RlZEJ5QWN0aXZlUnVsZXMoKSB8fCBub2RlLT5yZW5kZXJTdHls
ZSgpLT5hZmZlY3RlZEJ5SG92ZXJSdWxlcygpKQorICAgICAgICAgICAgcmV0dXJuIHRydWU7Cisg
ICAgfQorICAgIHJldHVybiBmYWxzZTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIGFwcGVuZEFi
c29sdXRlUXVhZHNGb3JOb2RlVG9IaXRMaXN0KE5vZGUqIG5vZGUsIEhpdExpc3QmIGhpdGxpc3Qp
Cit7CisgICAgLy8gU2luY2UgdGhlIG5vZGUgaXMgYSByZXN1bHQgb2YgYSBoaXQgdGVzdCwgd2Ug
YXJlIGFscmVhZHkgZW5zdXJlZCBpdCBoYXMgYSByZW5kZXJlci4KKyAgICBBU1NFUlQobm9kZS0+
cmVuZGVyZXIoKSk7CisKKyAgICBWZWN0b3I8RmxvYXRRdWFkPiBxdWFkczsKKyAgICBub2RlLT5y
ZW5kZXJlcigpLT5hYnNvbHV0ZVF1YWRzKHF1YWRzKTsKKworICAgIFZlY3RvcjxGbG9hdFF1YWQ+
Ojpjb25zdF9pdGVyYXRvciBpdCA9IHF1YWRzLmJlZ2luKCk7CisgICAgY29uc3QgVmVjdG9yPEZs
b2F0UXVhZD46OmNvbnN0X2l0ZXJhdG9yIGl0ZW5kID0gcXVhZHMuZW5kKCk7CisgICAgZm9yICg7
IGl0ICE9IGl0ZW5kOyArK2l0KQorICAgICAgICBoaXRsaXN0LmFwcGVuZChIaXRUZXN0UXVhZChu
b2RlLCAqaXQpKTsKK30KKworLy8gQ29tcGlsZSBhIGxpc3Qgb2YgYWJzb2x1dGUgcmVjdHMgcmVw
cmVzZW5kaW5nIG5vZGVzIHJlc3BvbmRpbmcgdGhlIHRhcCBnZXN0dXJlLgordm9pZCBjb21waWxl
SGl0TGlzdChjb25zdCBIaXRUZXN0UmVzdWx0JiByZXN1bHQsIEhpdExpc3QmIGhpdGxpc3QsIE5v
ZGVGaWx0ZXIgbm9kZUZpbHRlcikKK3sKKyAgICBjb25zdCBIaXRUZXN0UmVzdWx0OjpOb2RlU2V0
JiBpbnRlcnNlY3RlZE5vZGVzID0gcmVzdWx0LnJlY3RCYXNlZFRlc3RSZXN1bHQoKTsKKworICAg
IC8vIEZpbmQgY2FuZGlkYXRlcyByZXNwb25kaW5nIHRvIHRhcCBnZXN0dXJlIGV2ZW50cyBpbiBP
KG4pIHRpbWUuCisgICAgSGFzaE1hcDxOb2RlKiwgTm9kZSo+IHJlc3BvbmRlck1hcDsKKyAgICBI
YXNoU2V0PE5vZGUqPiBhbmNlc3RvcnNUb1Jlc3BvbmRlcnNTZXQ7CisgICAgVmVjdG9yPE5vZGUq
PiBjYW5kaWRhdGVzOworCisgICAgSGl0VGVzdFJlc3VsdDo6Tm9kZVNldDo6Y29uc3RfaXRlcmF0
b3IgaXQgPSBpbnRlcnNlY3RlZE5vZGVzLmJlZ2luKCk7CisgICAgY29uc3QgSGl0VGVzdFJlc3Vs
dDo6Tm9kZVNldDo6Y29uc3RfaXRlcmF0b3IgaXRlbmQgPSBpbnRlcnNlY3RlZE5vZGVzLmVuZCgp
OworICAgIGZvciAoOyBpdCAhPSBpdGVuZDsgKytpdCkgeworICAgICAgICBOb2RlKiBub2RlID0g
aXQtPmdldCgpOworICAgICAgICBpZiAocmVzcG9uZGVyTWFwLmNvbnRhaW5zKG5vZGUpKQorICAg
ICAgICAgICAgLy8gU2tpcCBub2RlcyB0aGF0IGFyZSBkaXJlY3QgYW5jZXN0b3JzIG9mIG90aGVy
IGNhbmRpZGF0ZXMuIFRoZXkgd291bGQgaGl0LXRlc3QgYWdhaW5zdCB0aGUgc2FtZSBhYnNvbHV0
ZSBxdWFkcy4KKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICBWZWN0b3I8Tm9kZSo+IGFu
Y2VzdG9yczsKKyAgICAgICAgTm9kZSogcmVzcG9uZGVyID0gMDsKKyAgICAgICAgZm9yICg7IG5v
ZGU7IG5vZGUgPSBub2RlLT5wYXJlbnRPckhvc3ROb2RlKCkpIHsKKyAgICAgICAgICAgIC8vIENo
ZWNrIGlmIHdlIGFscmVhZHkgaGF2ZSBhIHJlc3VsdCBmcm9tIGEgY29tbW9uIGFuY2VzdG9yIHdp
dGggYW5vdGhlciBjYW5kaWRhdGUuCisgICAgICAgICAgICByZXNwb25kZXIgPSByZXNwb25kZXJN
YXAuZ2V0KG5vZGUpOworICAgICAgICAgICAgaWYgKHJlc3BvbmRlcikKKyAgICAgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgICAgIGFuY2VzdG9ycy5hcHBlbmQobm9kZSk7CisgICAgICAgICAg
ICAvLyBDaGVjayBpZiB0aGUgbm9kZSBmaWx0ZXIgYXBwbGllcywgd2hpY2ggd291bGQgbWVhbiB3
ZSBoYXZlIGZvdW5kIGEgcmVzcG9uZGluZyBub2RlLgorICAgICAgICAgICAgaWYgKG5vZGVGaWx0
ZXIobm9kZSkpIHsKKyAgICAgICAgICAgICAgICByZXNwb25kZXIgPSBub2RlOworICAgICAgICAg
ICAgICAgIC8vIE5vdyB0aGF0IHdlIGhhdmUgdGhlIHJlc3BvbmRlciwgc2V0IHRoZSByZXNwb25k
ZXIgZm9yIGFsbCB0aGUgbm9kZXMgc2VlbiBzbyBmYXIuCisgICAgICAgICAgICAgICAgZm9yIChp
bnQgaSA9IDA7IGkgPCBhbmNlc3RvcnMuc2l6ZSgpOyBpKyspCisgICAgICAgICAgICAgICAgICAg
IHJlc3BvbmRlck1hcC5hZGQoYW5jZXN0b3JzW2ldLCBub2RlKTsKKyAgICAgICAgICAgICAgICAv
LyBUaGUgY29udGludWUgdGhlIGl0ZXJhdGlvbiB0byBjb2xsZWN0IHRoZSBhbmNlc3RvcnMgb2Yg
dGhlIHJlc3BvbmRlci4KKyAgICAgICAgICAgICAgICBmb3IgKG5vZGUgPSBub2RlLT5wYXJlbnRP
ckhvc3ROb2RlKCk7IG5vZGU7IG5vZGUgPSBub2RlLT5wYXJlbnRPckhvc3ROb2RlKCkpIHsKKyAg
ICAgICAgICAgICAgICAgICAgcGFpcjxIYXNoU2V0PE5vZGUqPjo6aXRlcmF0b3IsIGJvb2w+IHRt
cCA9IGFuY2VzdG9yc1RvUmVzcG9uZGVyc1NldC5hZGQobm9kZSk7CisgICAgICAgICAgICAgICAg
ICAgIGlmICghdG1wLnNlY29uZCkKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgfQorICAgICAgICBpZiAocmVzcG9uZGVyKQorICAgICAgICAgICAgY2FuZGlkYXRlcy5h
cHBlbmQoaXQtPmdldCgpKTsKKyAgICB9CisKKyAgICAvLyBXZSBjb21waWxlIHRoZSBsaXN0IG9m
IGNvbXBvbmVudCBhYnNvbHV0ZSBxdWFkcyBpbnN0ZWFkIG9mIHVzaW5nIHRoZSBib3VuZGluZyBy
ZWN0CisgICAgLy8gdG8gYmUgYWJsZSB0byBwZXJmb3JtIGJldHRlciBoaXQtdGVzdGluZyBvbiBp
bmxpbmUgbGlua3Mgb24gbGluZS1icmVha3MuCisgICAgVmVjdG9yPE5vZGUqPjo6Y29uc3RfaXRl
cmF0b3IgY2l0ID0gY2FuZGlkYXRlcy5iZWdpbigpOworICAgIGNvbnN0IFZlY3RvcjxOb2RlKj46
OmNvbnN0X2l0ZXJhdG9yIGNpdGVuZCA9IGNhbmRpZGF0ZXMuZW5kKCk7CisgICAgZm9yICg7IGNp
dCAhPSBjaXRlbmQ7ICsrY2l0KSB7CisgICAgICAgIC8vIFNraXAgbm9kZXMgd2hvcyByZXNwb25k
ZXJzIGFyZSBhbmNlc3RvcnMgb2Ygb3RoZXIgcmVzcG9uZGVycy4gVGhpcyBnaXZlcyBwcmVmZXJl
bmNlIHRvIHRoZSBpbm5lci1tb3N0IGV2ZW50LWhhbmRsZXJzLgorICAgICAgICAvLyBTbyB0aGF0
IGEgbGluayBpcyBhbHdheXMgcHJlZmVycmVkIGV2ZW4gd2hlbiBjb250YWluZWQgaW4gYW4gZWxl
bWVudCB0aGF0IG1vbml0b3JzIGFsbCBjbGljay1ldmVudHMuCisgICAgICAgIE5vZGUqIHJlc3Bv
bmRlciA9IHJlc3BvbmRlck1hcC5nZXQoKmNpdCk7CisgICAgICAgIEFTU0VSVChyZXNwb25kZXIp
OworICAgICAgICBpZiAoYW5jZXN0b3JzVG9SZXNwb25kZXJzU2V0LmNvbnRhaW5zKHJlc3BvbmRl
cikpCisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgYXBwZW5kQWJzb2x1dGVRdWFkc0Zv
ck5vZGVUb0hpdExpc3QoKmNpdCwgaGl0bGlzdCk7CisgICAgfQorfQorCisvLyBSZXR1cm5zIHRo
ZSBkaXN0YW5jZSBzcXVhcmVkIHRvIHRoZSBib3VuZGluZyBib3ggY2VudGVybGluZS4uCitmbG9h
dCBkaXN0YW5jZVRvSGl0VGVzdFF1YWQoY29uc3QgTGF5b3V0UG9pbnQmIHRvdWNoSG90c3BvdCwg
Y29uc3QgTGF5b3V0UmVjdCYsIGNvbnN0IEhpdFRlc3RRdWFkJiBoaXRUZXN0UXVhZCkKK3sKKyAg
ICAvLyBVc2luZyB0aGUgYm91bmRpbmcgYm94IG1lYW5zIHRoZSBkaXN0YW5jZSB0byBjZW50ZXJs
aW5lIGlzIGxlc3MgbWVhbmluZ2Z1bGwgZm9yIHRyYW5zZm9ybWVkIHJlY3RhbmdsZXMKKyAgICAv
LyBidXQgY2FsY3VsYXRpbmcgdGhlIGRpc3RhbmNlIHRvIHF1YWRzIGNhbiBiZSB2ZXJ5IGV4cGVu
c2l2ZS4KKyAgICBJbnRSZWN0IHJlY3QgPSBoaXRUZXN0UXVhZC5ib3VuZGluZ0JveCgpOworCisg
ICAgcmV0dXJuIHJlY3QuZGlzdGFuY2VTcXVhcmVkRnJvbUNlbnRlckxpbmVUb1BvaW50KHRvdWNo
SG90c3BvdCk7Cit9CisKKy8vIFJldHVybnMgdGhlIGFyZWEgb2YgdGhlIGludGVyc2VjdGlvbi4K
K2Zsb2F0IG92ZXJsYXBXaXRoSGl0VGVzdFF1YWQoY29uc3QgTGF5b3V0UG9pbnQmLCBjb25zdCBM
YXlvdXRSZWN0JiB0b3VjaFJlY3QsIGNvbnN0IEhpdFRlc3RRdWFkJiBoaXRUZXN0UXVhZCkKK3sK
KyAgICBJbnRSZWN0IHJlY3QgPSBoaXRUZXN0UXVhZC5ib3VuZGluZ0JveCgpOworICAgIEludFJl
Y3QgaW50ZXJzZWN0aW9uID0gcmVjdDsKKyAgICByZWN0LmludGVyc2VjdCh0b3VjaFJlY3QpOwor
CisgICAgcmV0dXJuIGludGVyc2VjdGlvbi5zaXplKCkuYXJlYSgpOworfQorCitib29sIGZpbmRO
b2RlV2l0aExvd2VzdE1ldHJpYyhOb2RlKiYgdGFyZ2V0Tm9kZSwgTGF5b3V0UG9pbnQmIHRhcmdl
dFBvaW50LCBjb25zdCBMYXlvdXRQb2ludCYgdG91Y2hIb3RzcG90LCBjb25zdCBMYXlvdXRSZWN0
JiB0b3VjaEFyZWEsIEhpdExpc3QmIGhpdGxpc3QsIE1ldHJpYyBtZXRyaWMpCit7CisgICAgdGFy
Z2V0Tm9kZSA9IDA7CisKKyAgICBmbG9hdCBiZXN0TWV0cmljID0gSU5GSU5JVFk7CisgICAgSGl0
TGlzdDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBoaXRsaXN0LmJlZ2luKCk7CisgICAgSGl0TGlzdDo6
Y29uc3RfaXRlcmF0b3IgaXRlbmQgPSBoaXRsaXN0LmVuZCgpOworICAgIGZvciAoOyBpdCAhPSBp
dGVuZDsgKytpdCkgeworICAgICAgICBOb2RlKiBoaXROb2RlID0gaXQtPm5vZGUoKTsKKyAgICAg
ICAgZmxvYXQgaGl0TWV0cmljID0gbWV0cmljKHRvdWNoSG90c3BvdCwgdG91Y2hBcmVhLCAqaXQp
OworICAgICAgICBpZiAoaGl0TWV0cmljIDwgYmVzdE1ldHJpYykgeworICAgICAgICAgICAgdGFy
Z2V0UG9pbnQgPSByb3VuZGVkTGF5b3V0UG9pbnQoaXQtPnF1YWQoKS5jZW50ZXIoKSk7CisgICAg
ICAgICAgICB0YXJnZXROb2RlID0gaGl0Tm9kZTsKKyAgICAgICAgICAgIGJlc3RNZXRyaWMgPSBo
aXRNZXRyaWM7CisgICAgICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4gKHRhcmdldE5vZGUpOwor
fQorCitib29sIGZpbmROb2RlV2l0aEhpZ2hlc3RNZXRyaWMoTm9kZSomIHRhcmdldE5vZGUsIExh
eW91dFBvaW50JiB0YXJnZXRQb2ludCwgY29uc3QgTGF5b3V0UG9pbnQmIHRvdWNoSG90c3BvdCwg
Y29uc3QgTGF5b3V0UmVjdCYgdG91Y2hBcmVhLCBIaXRMaXN0JiBoaXRsaXN0LCBNZXRyaWMgbWV0
cmljKQoreworICAgIHRhcmdldE5vZGUgPSAwOworCisgICAgZmxvYXQgYmVzdE1ldHJpYyA9IDA7
CisgICAgSGl0TGlzdDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBoaXRsaXN0LmJlZ2luKCk7CisgICAg
SGl0TGlzdDo6Y29uc3RfaXRlcmF0b3IgaXRlbmQgPSBoaXRsaXN0LmVuZCgpOworICAgIGZvciAo
OyBpdCAhPSBpdGVuZDsgKytpdCkgeworICAgICAgICBOb2RlKiBoaXROb2RlID0gaXQtPm5vZGUo
KTsKKyAgICAgICAgZmxvYXQgaGl0TWV0cmljID0gbWV0cmljKHRvdWNoSG90c3BvdCwgdG91Y2hB
cmVhLCAqaXQpOworICAgICAgICBpZiAoaGl0TWV0cmljID4gYmVzdE1ldHJpYykgeworICAgICAg
ICAgICAgdGFyZ2V0UG9pbnQgPSByb3VuZGVkTGF5b3V0UG9pbnQoaXQtPnF1YWQoKS5jZW50ZXIo
KSk7CisgICAgICAgICAgICB0YXJnZXROb2RlID0gaGl0Tm9kZTsKKyAgICAgICAgICAgIGJlc3RN
ZXRyaWMgPSBoaXRNZXRyaWM7CisgICAgICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4gKHRhcmdl
dE5vZGUpOworfQorCit2b2lkIGZpbmRCZXN0Q2FuZGlkYXRlRm9yR2VzdHVyZVRhcChOb2RlKiYg
dGFyZ2V0Tm9kZSwgTGF5b3V0UG9pbnQmIHRhcmdldFBvaW50LCBjb25zdCBMYXlvdXRQb2ludCYg
dG91Y2hIb3RzcG90LCBjb25zdCBMYXlvdXRSZWN0JiB0b3VjaEFyZWEsIGNvbnN0IEhpdFRlc3RS
ZXN1bHQmIGhpdFRlc3RSZXN1bHQpCit7CisgICAgSGl0TGlzdCBoaXRsaXN0OworICAgIGNvbXBp
bGVIaXRMaXN0KGhpdFRlc3RSZXN1bHQsIGhpdGxpc3QsIG5vZGVSZXNwb25kc1RvVGFwR2VzdHVy
ZSk7CisgICAgaWYgKCFmaW5kTm9kZVdpdGhMb3dlc3RNZXRyaWModGFyZ2V0Tm9kZSwgdGFyZ2V0
UG9pbnQsIHRvdWNoSG90c3BvdCwgdG91Y2hBcmVhLCBoaXRsaXN0LCBkaXN0YW5jZVRvSGl0VGVz
dFF1YWQpKSB7CisgICAgICAgIC8vIERlZmF1bHQgdG8ganVzdCByZXR1cm5pbmcgaW5uZXJOb25T
aGFyZWROb2RlLgorICAgICAgICB0YXJnZXRQb2ludCA9IHRvdWNoSG90c3BvdDsKKyAgICAgICAg
dGFyZ2V0Tm9kZSA9IGhpdFRlc3RSZXN1bHQuaW5uZXJOb25TaGFyZWROb2RlKCk7CisgICAgfQor
fQorCit9IC8vIG5hbWVzcGFjZSBIaXRUZXN0UmVzdWx0TWV0cmljcworCit9IC8vIG5hbWVzcGFj
ZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9IaXRUZXN0UmVz
dWx0TWV0cmljcy5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vSGl0VGVzdFJlc3VsdE1ldHJp
Y3MuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45ZTk5ODk4Ci0tLSAvZGV2
L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vSGl0VGVzdFJlc3VsdE1ldHJpY3Mu
aApAQCAtMCwwICsxLDY3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIE5va2lhIENvcnBv
cmF0aW9uIGFuZC9vciBpdHMgc3Vic2lkaWFyeSgtaWVzKQorICoKKyAqIFRoaXMgbGlicmFyeSBp
cyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlm
eSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisg
KiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBl
aXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBh
bnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4g
dGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJS
QU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFC
SUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQor
ICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgor
ICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2Vu
ZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUg
ZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJl
IEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBC
b3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaWZuZGVmIEhpdFRlc3RSZXN1bHRN
ZXRyaWNzX2gKKyNkZWZpbmUgSGl0VGVzdFJlc3VsdE1ldHJpY3NfaAorCisjaW5jbHVkZSAiRmxv
YXRRdWFkLmgiCisjaW5jbHVkZSAiSGl0VGVzdFJlc3VsdC5oIgorI2luY2x1ZGUgIkxheW91dFR5
cGVzLmgiCisjaW5jbHVkZSAiTm9kZS5oIgorI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KKworbmFt
ZXNwYWNlIFdlYkNvcmUgeworCituYW1lc3BhY2UgSGl0VGVzdFJlc3VsdE1ldHJpY3MgeworCit2
b2lkIGZpbmRCZXN0Q2FuZGlkYXRlRm9yR2VzdHVyZVRhcChOb2RlKiYgdGFyZ2V0Tm9kZSwgTGF5
b3V0UG9pbnQmIHRhcmdldFBvaW50LCBjb25zdCBMYXlvdXRQb2ludCYgdG91Y2hIb3RzcG90LCBj
b25zdCBMYXlvdXRSZWN0JiB0b3VjaEFyZWEsIGNvbnN0IEhpdFRlc3RSZXN1bHQmKTsKKy8vIEZJ
WE1FOiBJbXBsZW1lbnQgdGhlIHNpbWlsYXIgZmluZENhbmRpZGF0ZUZvckdlc3R1cmVTY3JvbGwg
aGVyZSBhcyB3ZWxsLgorCitjbGFzcyBIaXRUZXN0UXVhZCB7CitwdWJsaWM6CisgICAgSGl0VGVz
dFF1YWQoTm9kZSogbm9kZSwgY29uc3QgRmxvYXRRdWFkJiBxdWFkKSA6IG1fbm9kZShub2RlKSwg
bV9xdWFkKHF1YWQpIHsgfQorCisgICAgTm9kZSogbm9kZSgpIGNvbnN0IHsgcmV0dXJuIG1fbm9k
ZTsgfQorICAgIEZsb2F0UXVhZCBxdWFkKCkgY29uc3QgeyByZXR1cm4gbV9xdWFkOyB9CisgICAg
TGF5b3V0UmVjdCBib3VuZGluZ0JveCgpIGNvbnN0IHsgcmV0dXJuIG1fcXVhZC5lbmNsb3NpbmdC
b3VuZGluZ0JveCgpOyB9CisKK3ByaXZhdGU6CisgICAgTm9kZSogbV9ub2RlOworICAgIEZsb2F0
UXVhZCBtX3F1YWQ7Cit9OworCit0eXBlZGVmIFZlY3RvcjxIaXRUZXN0UXVhZD4gSGl0TGlzdDsK
KwordHlwZWRlZiBib29sICgqTm9kZUZpbHRlcikoTm9kZSopOworYm9vbCBub2RlUmVzcG9uZHNU
b1RhcEdlc3R1cmUoTm9kZSopOworCit2b2lkIGNvbXBpbGVIaXRMaXN0KGNvbnN0IEhpdFRlc3RS
ZXN1bHQmLCBIaXRMaXN0JiwgTm9kZUZpbHRlcik7CisKK3R5cGVkZWYgZmxvYXQgKCpNZXRyaWMp
KGNvbnN0IExheW91dFBvaW50JiwgY29uc3QgTGF5b3V0UmVjdCYsIGNvbnN0IEhpdFRlc3RRdWFk
Jik7CitmbG9hdCBkaXN0YW5jZVRvSGl0VGVzdFF1YWQoY29uc3QgTGF5b3V0UG9pbnQmIHRvdWNo
SG90c3BvdCwgY29uc3QgTGF5b3V0UmVjdCYgdG91Y2hBcmVhLCBjb25zdCBIaXRUZXN0UXVhZCYp
OworZmxvYXQgb3ZlcmxhcFdpdGhIaXRUZXN0UXVhZChjb25zdCBMYXlvdXRQb2ludCYgdG91Y2hI
b3RzcG90LCBjb25zdCBMYXlvdXRSZWN0JiB0b3VjaEFyZWEsIGNvbnN0IEhpdFRlc3RRdWFkJik7
CisKK2Jvb2wgZmluZE5vZGVXaXRoTG93ZXN0TWV0cmljKE5vZGUqJiB0YXJnZXROb2RlLCBMYXlv
dXRQb2ludCYgdGFyZ2V0UG9pbnQsIGNvbnN0IExheW91dFBvaW50JiB0b3VjaEhvdHNwb3QsIGNv
bnN0IExheW91dFJlY3QmIHRvdWNoQXJlYSwgSGl0TGlzdCYgaGl0bGlzdCwgTWV0cmljKTsKK2Jv
b2wgZmluZE5vZGVXaXRoSGlnaGVzdE1ldHJpYyhOb2RlKiYgdGFyZ2V0Tm9kZSwgTGF5b3V0UG9p
bnQmIHRhcmdldFBvaW50LCBjb25zdCBMYXlvdXRQb2ludCYgdG91Y2hIb3RzcG90LCBjb25zdCBM
YXlvdXRSZWN0JiB0b3VjaEFyZWEsIEhpdExpc3QmIGhpdGxpc3QsIE1ldHJpYyk7CisKK30gLy8g
bmFtZXNwYWNlIEhpdFRlc3RSZXN1bHRNZXRyaWNzCisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUK
KworI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9G
bG9hdFBvaW50LmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9GbG9hdFBvaW50
LmgKaW5kZXggMDk0MzA0ZC4uYzgzY2ZmYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvRmxvYXRQb2ludC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL0Zsb2F0UG9pbnQuaApAQCAtNjksNiArNjksNyBAQCBwdWJsaWM6CiAgICAgRmxv
YXRQb2ludChmbG9hdCB4LCBmbG9hdCB5KSA6IG1feCh4KSwgbV95KHkpIHsgfQogICAgIEZsb2F0
UG9pbnQoY29uc3QgSW50UG9pbnQmKTsKICAgICBGbG9hdFBvaW50KGNvbnN0IEZyYWN0aW9uYWxM
YXlvdXRQb2ludCYpOworICAgIGV4cGxpY2l0IEZsb2F0UG9pbnQoRmxvYXRTaXplIHNpemUpIDog
bV94KHNpemUud2lkdGgoKSksIG1feShzaXplLmhlaWdodCgpKSB7IH0KIAogICAgIHN0YXRpYyBG
bG9hdFBvaW50IHplcm8oKSB7IHJldHVybiBGbG9hdFBvaW50KCk7IH0KIApAQCAtMTMwLDYgKzEz
MSw5IEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIG1feCAqIG1feCArIG1feSAqIG1feTsKICAg
ICB9CiAKKyAgICBmbG9hdCBkaXN0YW5jZVRvUG9pbnQoY29uc3QgRmxvYXRQb2ludCYpIGNvbnN0
OworICAgIGZsb2F0IGRpc3RhbmNlU3F1YXJlZFRvUG9pbnQoY29uc3QgRmxvYXRQb2ludCYpIGNv
bnN0OworCiAgICAgRmxvYXRQb2ludCBleHBhbmRlZFRvKGNvbnN0IEZsb2F0UG9pbnQmIG90aGVy
KSBjb25zdAogICAgIHsKICAgICAgICAgcmV0dXJuIEZsb2F0UG9pbnQoc3RkOjptYXgobV94LCBv
dGhlci5tX3gpLCBzdGQ6Om1heChtX3ksIG90aGVyLm1feSkpOwpAQCAtMjI4LDYgKzIzMiwxNyBA
QCBpbmxpbmUgZmxvYXQgb3BlcmF0b3IqKGNvbnN0IEZsb2F0UG9pbnQmIGEsIGNvbnN0IEZsb2F0
UG9pbnQmIGIpCiAgICAgcmV0dXJuIGEuZG90KGIpOwogfQogCitpbmxpbmUgZmxvYXQgRmxvYXRQ
b2ludDo6ZGlzdGFuY2VUb1BvaW50KGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50KSBjb25zdAorewor
ICAgIHJldHVybiAoKnRoaXMgLSBwb2ludCkuZGlhZ29uYWxMZW5ndGgoKTsKK30KKworaW5saW5l
IGZsb2F0IEZsb2F0UG9pbnQ6OmRpc3RhbmNlU3F1YXJlZFRvUG9pbnQoY29uc3QgRmxvYXRQb2lu
dCYgcG9pbnQpIGNvbnN0Cit7CisgICAgcmV0dXJuICgqdGhpcyAtIHBvaW50KS5kaWFnb25hbExl
bmd0aFNxdWFyZWQoKTsKK30KKworCiBpbmxpbmUgSW50UG9pbnQgcm91bmRlZEludFBvaW50KGNv
bnN0IEZsb2F0UG9pbnQmIHApCiB7CiAgICAgcmV0dXJuIEludFBvaW50KHN0YXRpY19jYXN0PGlu
dD4ocm91bmRmKHAueCgpKSksIHN0YXRpY19jYXN0PGludD4ocm91bmRmKHAueSgpKSkpOwpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRmxvYXRRdWFkLmggYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9GbG9hdFF1YWQuaAppbmRleCBiNWUyYThj
Li5iZmI3OTRkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9G
bG9hdFF1YWQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9GbG9hdFF1
YWQuaApAQCAtODgsNiArODgsMTMgQEAgcHVibGljOgogICAgIC8vIGZyb20gdHJhbnNmb3JtZWQg
cmVjdHMuCiAgICAgYm9vbCBjb250YWluc1F1YWQoY29uc3QgRmxvYXRRdWFkJikgY29uc3Q7CiAK
KyAgICAvLyBUaGUgY2VudGVyIG9mIHRoZSBxdWFkLiBJZiB0aGUgcXVhZCBpcyB0aGUgcmVzdWx0
IG9mIGEgYWZmaW5lLXRyYW5zZm9ybWVkIHJlY3RhbmdsZSB0aGlzIGlzIHRoZSBzYW1lIGFzIHRo
ZSBvcmlnaW5hbCBjZW50ZXIgdHJhbnNmb3JtZWQuCisgICAgRmxvYXRQb2ludCBjZW50ZXIoKSBj
b25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIEZsb2F0UG9pbnQoKG1fcDEueCgpICsgbV9wMi54
KCkgKyBtX3AzLngoKSArIG1fcDQueCgpKSAvIDQuMCwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgKG1fcDEueSgpICsgbV9wMi55KCkgKyBtX3AzLnkoKSArIG1fcDQueSgpKSAvIDQuMCk7Cisg
ICAgfQorCiAgICAgRmxvYXRSZWN0IGJvdW5kaW5nQm94KCkgY29uc3Q7CiAgICAgSW50UmVjdCBl
bmNsb3NpbmdCb3VuZGluZ0JveCgpIGNvbnN0CiAgICAgewpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRmxvYXRSZWN0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL0Zsb2F0UmVjdC5jcHAKaW5kZXggNTk1YWYyYS4uYzBmODFkYiAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRmxvYXRSZWN0LmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9GbG9hdFJlY3QuY3BwCkBAIC0x
MzcsNiArMTM3LDQwIEBAIHZvaWQgRmxvYXRSZWN0OjpzY2FsZShmbG9hdCBzeCwgZmxvYXQgc3kp
CiAgICAgbV9zaXplLnNldEhlaWdodChoZWlnaHQoKSAqIHN5KTsKIH0KIAorc3RhdGljIGlubGlu
ZSBmbG9hdCBkaXN0YW5jZVRvSW50ZXJ2YWwoZmxvYXQgcG9zLCBmbG9hdCBzdGFydCwgZmxvYXQg
ZW5kKQoreworICAgIGlmIChwb3MgPCBzdGFydCkKKyAgICAgICAgcmV0dXJuIHN0YXJ0IC0gcG9z
OworICAgIGlmIChwb3MgPiBlbmQpCisgICAgICAgIHJldHVybiBlbmQgLSBwb3M7CisgICAgcmV0
dXJuIDA7Cit9CisKK0Zsb2F0U2l6ZSBGbG9hdFJlY3Q6OmRpZmZlcmVuY2VUb1BvaW50KGNvbnN0
IEZsb2F0UG9pbnQmIHBvaW50KSBjb25zdAoreworICAgIGZsb2F0IHhkaXN0YW5jZSA9IGRpc3Rh
bmNlVG9JbnRlcnZhbChwb2ludC54KCksIHgoKSwgbWF4WCgpKTsKKyAgICBmbG9hdCB5ZGlzdGFu
Y2UgPSBkaXN0YW5jZVRvSW50ZXJ2YWwocG9pbnQueSgpLCB5KCksIG1heFkoKSk7CisgICAgcmV0
dXJuIEZsb2F0U2l6ZSh4ZGlzdGFuY2UsIHlkaXN0YW5jZSk7Cit9CisKK2Zsb2F0IEZsb2F0UmVj
dDo6ZGlzdGFuY2VUb1BvaW50KGNvbnN0IEZsb2F0UG9pbnQmIHApIGNvbnN0Cit7CisgICAgcmV0
dXJuIHNxcnRmKGRpc3RhbmNlU3F1YXJlZFRvUG9pbnQocCkpOworfQorCitGbG9hdFNpemUgRmxv
YXRSZWN0OjpkaWZmZXJlbmNlRnJvbUNlbnRlckxpbmVUb1BvaW50KGNvbnN0IEZsb2F0UG9pbnQm
IHBvaW50KSBjb25zdAoreworICAgIC8vIFRoZSBjZW50ZXItbGluZSBpcyB0aGUgbmF0dXJhbCBj
ZW50ZXIgb2YgYSByZWN0YW5nbGUuIEl0IGhhcyBhbiBlcXVhbCBkaXN0YW5jZSB0byBhbGwgc2lk
ZXMgb2YgdGhlIHJlY3RhbmdsZS4KKyAgICBGbG9hdFBvaW50IGNlbnRlclBvaW50ID0gY2VudGVy
KCk7CisgICAgZmxvYXQgeGRpc3RhbmNlID0gY2VudGVyUG9pbnQueCgpIC0gcG9pbnQueCgpOwor
ICAgIGZsb2F0IHlkaXN0YW5jZSA9IGNlbnRlclBvaW50LnkoKSAtIHBvaW50LnkoKTsKKyAgICBp
ZiAod2lkdGgoKSA+IGhlaWdodCgpKQorICAgICAgICB4ZGlzdGFuY2UgPSBkaXN0YW5jZVRvSW50
ZXJ2YWwocG9pbnQueCgpLCB4KCkgKyAoaGVpZ2h0KCkgLyAyLjApLCBtYXhYKCkgLSAoaGVpZ2h0
KCkgLyAyLjApKTsKKyAgICBlbHNlCisgICAgICAgIHlkaXN0YW5jZSA9IGRpc3RhbmNlVG9JbnRl
cnZhbChwb2ludC55KCksIHkoKSArICh3aWR0aCgpIC8gMi4wKSwgbWF4WSgpIC0gKHdpZHRoKCkg
LyAyLjApKTsKKyAgICByZXR1cm4gRmxvYXRTaXplKHhkaXN0YW5jZSwgeWRpc3RhbmNlKTsKK30K
KwogRmxvYXRSZWN0IHVuaW9uUmVjdChjb25zdCBWZWN0b3I8RmxvYXRSZWN0PiYgcmVjdHMpCiB7
CiAgICAgRmxvYXRSZWN0IHJlc3VsdDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL0Zsb2F0UmVjdC5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvRmxvYXRSZWN0LmgKaW5kZXggMjJjMTcxYy4uZTdhODlhZCAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRmxvYXRSZWN0LmgKKysrIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvRmxvYXRSZWN0LmgKQEAgLTE3Miw2ICsxNzIsMTIgQEAgcHVi
bGljOgogICAgIHZvaWQgc2NhbGUoZmxvYXQgcykgeyBzY2FsZShzLCBzKTsgfQogICAgIHZvaWQg
c2NhbGUoZmxvYXQgc3gsIGZsb2F0IHN5KTsKIAorICAgIEZsb2F0U2l6ZSBkaWZmZXJlbmNlVG9Q
b2ludChjb25zdCBGbG9hdFBvaW50JikgY29uc3Q7CisgICAgRmxvYXRTaXplIGRpZmZlcmVuY2VG
cm9tQ2VudGVyTGluZVRvUG9pbnQoY29uc3QgRmxvYXRQb2ludCYpIGNvbnN0OworICAgIGZsb2F0
IGRpc3RhbmNlU3F1YXJlZFRvUG9pbnQoY29uc3QgRmxvYXRQb2ludCYgcCkgY29uc3QgeyByZXR1
cm4gZGlmZmVyZW5jZVRvUG9pbnQocCkuZGlhZ29uYWxMZW5ndGhTcXVhcmVkKCk7IH0KKyAgICBm
bG9hdCBkaXN0YW5jZVNxdWFyZWRGcm9tQ2VudGVyTGluZVRvUG9pbnQoY29uc3QgRmxvYXRQb2lu
dCYgcCkgY29uc3QgeyByZXR1cm4gZGlmZmVyZW5jZUZyb21DZW50ZXJMaW5lVG9Qb2ludChwKS5k
aWFnb25hbExlbmd0aFNxdWFyZWQoKTsgfQorICAgIGZsb2F0IGRpc3RhbmNlVG9Qb2ludChjb25z
dCBGbG9hdFBvaW50JikgY29uc3Q7CisKICAgICBGbG9hdFJlY3QgdHJhbnNwb3NlZFJlY3QoKSBj
b25zdCB7IHJldHVybiBGbG9hdFJlY3QobV9sb2NhdGlvbi50cmFuc3Bvc2VkUG9pbnQoKSwgbV9z
aXplLnRyYW5zcG9zZWRTaXplKCkpOyB9CiAKICAgICAvLyBSZS1pbml0aWFsaXplcyB0aGlzIHJl
Y3RhbmdsZSB0byBmaXQgdGhlIHNldHMgb2YgcGFzc2VkIHBvaW50cy4KZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0Zsb2F0U2l6ZS5oIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvRmxvYXRTaXplLmgKaW5kZXggMmI1NTQ1MC4uMjg4MmUzZSAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRmxvYXRTaXplLmgK
KysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRmxvYXRTaXplLmgKQEAgLTk1
LDYgKzk1LDExIEBAIHB1YmxpYzoKICAgICAgICAgICAgbV9oZWlnaHQgPCBvdGhlci5tX2hlaWdo
dCA/IG1faGVpZ2h0IDogb3RoZXIubV9oZWlnaHQpOwogICAgIH0KIAorICAgIGZsb2F0IGFyZWEo
KSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fd2lkdGggKiBtX2hlaWdodDsKKyAgICB9
CisKICAgICBmbG9hdCBkaWFnb25hbExlbmd0aCgpIGNvbnN0OwogICAgIGZsb2F0IGRpYWdvbmFs
TGVuZ3RoU3F1YXJlZCgpIGNvbnN0CiAgICAgewpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvSW50UG9pbnQuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL0ludFBvaW50LmgKaW5kZXggOGQ3ZmQ3Zi4uM2U4MjE0NyAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW50UG9pbnQuaAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbnRQb2ludC5oCkBAIC0xMDUsNiArMTA1LDEzIEBAIHB1
YmxpYzoKICAgICAgICAgICAgIG1feSA8IG90aGVyLm1feSA/IG1feSA6IG90aGVyLm1feSk7CiAg
ICAgfQogCisgICAgaW50IGxlbmd0aFNxdWFyZWQoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0
dXJuIG1feCAqIG1feCArIG1feSAqIG1feTsKKyAgICB9CisKKyAgICBpbnQgZGlzdGFuY2VTcXVh
cmVkVG9Qb2ludChjb25zdCBJbnRQb2ludCYpIGNvbnN0OworCiAgICAgdm9pZCBjbGFtcE5lZ2F0
aXZlVG9aZXJvKCkKICAgICB7CiAgICAgICAgICp0aGlzID0gZXhwYW5kZWRUbyh6ZXJvKCkpOwpA
QCAtMjEzLDYgKzIyMCwxMSBAQCBpbmxpbmUgSW50U2l6ZSB0b1NpemUoY29uc3QgSW50UG9pbnQm
IGEpCiAgICAgcmV0dXJuIEludFNpemUoYS54KCksIGEueSgpKTsKIH0KIAoraW5saW5lIGludCBJ
bnRQb2ludDo6ZGlzdGFuY2VTcXVhcmVkVG9Qb2ludChjb25zdCBJbnRQb2ludCYgcG9pbnQpIGNv
bnN0Cit7CisgICAgcmV0dXJuICgoKnRoaXMpIC0gcG9pbnQpLmRpYWdvbmFsTGVuZ3RoU3F1YXJl
ZCgpOworfQorCiAjaWYgUExBVEZPUk0oUVQpCiBpbmxpbmUgUURhdGFTdHJlYW0mIG9wZXJhdG9y
PDwoUURhdGFTdHJlYW0mIHN0cmVhbSwgY29uc3QgSW50UG9pbnQmIHBvaW50KQogewpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW50UmVjdC5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbnRSZWN0LmNwcAppbmRleCA5NTA3NDA2Li43
OWMwMTVmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbnRS
ZWN0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbnRSZWN0LmNw
cApAQCAtMTI1LDYgKzEyNSwzNSBAQCB2b2lkIEludFJlY3Q6OnNjYWxlKGZsb2F0IHMpCiAgICAg
bV9zaXplLnNldEhlaWdodCgoaW50KShoZWlnaHQoKSAqIHMpKTsKIH0KIAorc3RhdGljIGlubGlu
ZSBpbnQgZGlzdGFuY2VUb0ludGVydmFsKGludCBwb3MsIGludCBzdGFydCwgaW50IGVuZCkKK3sK
KyAgICBpZiAocG9zIDwgc3RhcnQpCisgICAgICAgIHJldHVybiBzdGFydCAtIHBvczsKKyAgICBp
ZiAocG9zID4gZW5kKQorICAgICAgICByZXR1cm4gZW5kIC0gcG9zOworICAgIHJldHVybiAwOwor
fQorCitJbnRTaXplIEludFJlY3Q6OmRpZmZlcmVuY2VUb1BvaW50KGNvbnN0IEludFBvaW50JiBw
b2ludCkgY29uc3QKK3sKKyAgICBpbnQgeGRpc3RhbmNlID0gZGlzdGFuY2VUb0ludGVydmFsKHBv
aW50LngoKSwgeCgpLCBtYXhYKCkpOworICAgIGludCB5ZGlzdGFuY2UgPSBkaXN0YW5jZVRvSW50
ZXJ2YWwocG9pbnQueSgpLCB5KCksIG1heFkoKSk7CisgICAgcmV0dXJuIEludFNpemUoeGRpc3Rh
bmNlLCB5ZGlzdGFuY2UpOworfQorCitJbnRTaXplIEludFJlY3Q6OmRpZmZlcmVuY2VGcm9tQ2Vu
dGVyTGluZVRvUG9pbnQoY29uc3QgSW50UG9pbnQmIHBvaW50KSBjb25zdAoreworICAgIC8vIFRo
ZSBjZW50ZXItbGluZSBpcyB0aGUgbmF0dXJhbCBjZW50ZXIgb2YgYSByZWN0YW5nbGUuIEl0IGhh
cyBhbiBlcXVhbCBkaXN0YW5jZSB0byBhbGwgc2lkZXMgb2YgdGhlIHJlY3RhbmdsZS4KKyAgICBJ
bnRQb2ludCBjZW50ZXJQb2ludCA9IGNlbnRlcigpOworICAgIGludCB4ZGlzdGFuY2UgPSBjZW50
ZXJQb2ludC54KCkgLSBwb2ludC54KCk7CisgICAgaW50IHlkaXN0YW5jZSA9IGNlbnRlclBvaW50
LnkoKSAtIHBvaW50LnkoKTsKKyAgICBpZiAod2lkdGgoKSA+IGhlaWdodCgpKQorICAgICAgICB4
ZGlzdGFuY2UgPSBkaXN0YW5jZVRvSW50ZXJ2YWwocG9pbnQueCgpLCB4KCkgKyAoaGVpZ2h0KCkg
LyAyKSwgbWF4WCgpIC0gKGhlaWdodCgpIC8gMikpOworICAgIGVsc2UKKyAgICAgICAgeWRpc3Rh
bmNlID0gZGlzdGFuY2VUb0ludGVydmFsKHBvaW50LnkoKSwgeSgpICsgKHdpZHRoKCkgLyAyKSwg
bWF4WSgpIC0gKHdpZHRoKCkgLyAyKSk7CisgICAgcmV0dXJuIEludFNpemUoeGRpc3RhbmNlLCB5
ZGlzdGFuY2UpOworfQorCiBJbnRSZWN0IHVuaW9uUmVjdChjb25zdCBWZWN0b3I8SW50UmVjdD4m
IHJlY3RzKQogewogICAgIEludFJlY3QgcmVzdWx0OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW50UmVjdC5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvSW50UmVjdC5oCmluZGV4IDJlMmZmMGIuLjViNDgwY2QgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ludFJlY3QuaAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbnRSZWN0LmgKQEAgLTE2OSw2ICsxNjksMTEgQEAgcHVi
bGljOgogICAgIHZvaWQgaW5mbGF0ZShpbnQgZCkgeyBpbmZsYXRlWChkKTsgaW5mbGF0ZVkoZCk7
IH0KICAgICB2b2lkIHNjYWxlKGZsb2F0IHMpOwogCisgICAgSW50U2l6ZSBkaWZmZXJlbmNlVG9Q
b2ludChjb25zdCBJbnRQb2ludCYpIGNvbnN0OworICAgIEludFNpemUgZGlmZmVyZW5jZUZyb21D
ZW50ZXJMaW5lVG9Qb2ludChjb25zdCBJbnRQb2ludCYpIGNvbnN0OworICAgIGludCBkaXN0YW5j
ZVNxdWFyZWRUb1BvaW50KGNvbnN0IEludFBvaW50JiBwKSBjb25zdCB7IHJldHVybiBkaWZmZXJl
bmNlVG9Qb2ludChwKS5kaWFnb25hbExlbmd0aFNxdWFyZWQoKTsgfQorICAgIGludCBkaXN0YW5j
ZVNxdWFyZWRGcm9tQ2VudGVyTGluZVRvUG9pbnQoY29uc3QgSW50UG9pbnQmIHApIGNvbnN0IHsg
cmV0dXJuIGRpZmZlcmVuY2VGcm9tQ2VudGVyTGluZVRvUG9pbnQocCkuZGlhZ29uYWxMZW5ndGhT
cXVhcmVkKCk7IH0KKwogICAgIEludFJlY3QgdHJhbnNwb3NlZFJlY3QoKSBjb25zdCB7IHJldHVy
biBJbnRSZWN0KG1fbG9jYXRpb24udHJhbnNwb3NlZFBvaW50KCksIG1fc2l6ZS50cmFuc3Bvc2Vk
U2l6ZSgpKTsgfQogCiAjaWYgUExBVEZPUk0oV1gpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9JbnRTaXplLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9JbnRTaXplLmgKaW5kZXggNjI1ZGIzYy4uN2RiZjdlZSAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW50U2l6ZS5oCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ludFNpemUuaApAQCAtOTgsNiArOTgsMTYgQEAgcHVibGlj
OgogICAgICAgICAqdGhpcyA9IGV4cGFuZGVkVG8oSW50U2l6ZSgpKTsKICAgICB9CiAKKyAgICBp
bnQgYXJlYSgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gbV93aWR0aCAqIG1faGVpZ2h0
OworICAgIH0KKworICAgIGludCBkaWFnb25hbExlbmd0aFNxdWFyZWQoKSBjb25zdAorICAgIHsK
KyAgICAgICAgcmV0dXJuIG1fd2lkdGggKiBtX3dpZHRoICsgbV9oZWlnaHQgKiBtX2hlaWdodDsK
KyAgICB9CisKICAgICBJbnRTaXplIHRyYW5zcG9zZWRTaXplKCkgY29uc3QKICAgICB7CiAgICAg
ICAgIHJldHVybiBJbnRTaXplKG1faGVpZ2h0LCBtX3dpZHRoKTsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJLaXQyL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZwppbmRleCBjM2Vh
MWQ0Li5kYmY3OTJhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cKKysrIGIv
U291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjMgQEAKKzIwMTItMDItMTYgIEFs
bGFuIFNhbmRmZWxkIEplbnNlbiAgPGFsbGFuLmplbnNlbkBub2tpYS5jb20+CisKKyAgICAgICAg
U2VsZWN0IGJlc3QgdGFyZ2V0IGZvciB0YXAgZ2VzdHVyZS4KKyAgICAgICAgaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTc4ODAxCisKKyAgICAgICAgUmV2aWV3ZWQgYnkg
Tk9CT0RZIChPT1BTISkuCisgICAgICAgIAorICAgICAgICBTZW5kIHJhZGl1cyB0byBoYW5kbGVQ
b3RlbnRpYWxTaW5nbGVUYXBFdmVudCBzbyBpdCBjYW4gZG8gdGhlIHNhbWUgaGl0CisgICAgICAg
IGRldGVjdGlvbiB0aGUgdGFwIGdlc3R1cmUgbGF0ZXIgZG9lcy4KKworICAgICAgICAqIFVJUHJv
Y2Vzcy9XZWJQYWdlUHJveHkuY3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlUHJveHk6Omhh
bmRsZVBvdGVudGlhbEFjdGl2YXRpb24pOgorICAgICAgICAqIFVJUHJvY2Vzcy9XZWJQYWdlUHJv
eHkuaDoKKyAgICAgICAgKiBVSVByb2Nlc3MvcXQvUXRXZWJQYWdlRXZlbnRIYW5kbGVyLmNwcDoK
KyAgICAgICAgKFF0V2ViUGFnZUV2ZW50SGFuZGxlcjo6aGFuZGxlUG90ZW50aWFsU2luZ2xlVGFw
RXZlbnQpOgorICAgICAgICAqIFdlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmNwcDoKKyAgICAg
ICAgKFdlYktpdDo6V2ViUGFnZTo6aGlnaGxpZ2h0UG90ZW50aWFsQWN0aXZhdGlvbik6CisgICAg
ICAgICogV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UuaDoKKyAgICAgICAgKiBXZWJQcm9jZXNz
L1dlYlBhZ2UvV2ViUGFnZS5tZXNzYWdlcy5pbjoKKwogMjAxMi0wMi0yMSAgQW5kcmFzIEJlY3Np
ICA8YW5kcmFzLmJlY3NpQG5va2lhLmNvbT4KIAogICAgICAgICBbUXRdW1dLMl0gR2V0IHJpZCBv
ZiB0aGUgZGVwZW5kZW5jeSB0byBRdFdpZGdldHMKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQy
L1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkuY3BwIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dl
YlBhZ2VQcm94eS5jcHAKaW5kZXggMmZjZmYwYi4uYWU2ZDAyNSAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYktpdDIvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5jcHAKKysrIGIvU291cmNlL1dlYktpdDIv
VUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5jcHAKQEAgLTk3Nyw5ICs5NzcsOSBAQCB2b2lkIFdlYlBh
Z2VQcm94eTo6aGFuZGxlR2VzdHVyZUV2ZW50KGNvbnN0IFdlYkdlc3R1cmVFdmVudCYgZXZlbnQp
CiAKICNpZiBFTkFCTEUoVE9VQ0hfRVZFTlRTKQogI2lmIFBMQVRGT1JNKFFUKQotdm9pZCBXZWJQ
YWdlUHJveHk6OmhhbmRsZVBvdGVudGlhbEFjdGl2YXRpb24oY29uc3QgSW50UG9pbnQmIGxheW91
dFBvaW50KQordm9pZCBXZWJQYWdlUHJveHk6OmhhbmRsZVBvdGVudGlhbEFjdGl2YXRpb24oY29u
c3QgSW50UG9pbnQmIGxheW91dFBvaW50LCBjb25zdCBJbnRTaXplJiBhcmVhKQogewotICAgIHBy
b2Nlc3MoKS0+c2VuZChNZXNzYWdlczo6V2ViUGFnZTo6SGlnaGxpZ2h0UG90ZW50aWFsQWN0aXZh
dGlvbihsYXlvdXRQb2ludCksIG1fcGFnZUlEKTsKKyAgICBwcm9jZXNzKCktPnNlbmQoTWVzc2Fn
ZXM6OldlYlBhZ2U6OkhpZ2hsaWdodFBvdGVudGlhbEFjdGl2YXRpb24obGF5b3V0UG9pbnQsIGFy
ZWEpLCBtX3BhZ2VJRCk7CiB9CiAjZW5kaWYKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIv
VUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5oIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYlBh
Z2VQcm94eS5oCmluZGV4IGVmMTNhOGQuLmZmNWIwNzUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJL
aXQyL1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkuaAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nl
c3MvV2ViUGFnZVByb3h5LmgKQEAgLTM4NCw3ICszODQsNyBAQCBwdWJsaWM6CiAjaWYgRU5BQkxF
KFRPVUNIX0VWRU5UUykKICAgICB2b2lkIGhhbmRsZVRvdWNoRXZlbnQoY29uc3QgTmF0aXZlV2Vi
VG91Y2hFdmVudCYpOwogI2lmIFBMQVRGT1JNKFFUKQotICAgIHZvaWQgaGFuZGxlUG90ZW50aWFs
QWN0aXZhdGlvbihjb25zdCBXZWJDb3JlOjpJbnRQb2ludCYpOworICAgIHZvaWQgaGFuZGxlUG90
ZW50aWFsQWN0aXZhdGlvbihjb25zdCBXZWJDb3JlOjpJbnRQb2ludCYsIGNvbnN0IFdlYkNvcmU6
OkludFNpemUmKTsKICNlbmRpZgogI2VuZGlmCiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQy
L1VJUHJvY2Vzcy9xdC9RdFdlYlBhZ2VFdmVudEhhbmRsZXIuY3BwIGIvU291cmNlL1dlYktpdDIv
VUlQcm9jZXNzL3F0L1F0V2ViUGFnZUV2ZW50SGFuZGxlci5jcHAKaW5kZXggNzJiOTZiYS4uMTIz
OWYyYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL3F0L1F0V2ViUGFnZUV2
ZW50SGFuZGxlci5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL3F0L1F0V2ViUGFn
ZUV2ZW50SGFuZGxlci5jcHAKQEAgLTI5MSw3ICsyOTEsNyBAQCBib29sIFF0V2ViUGFnZUV2ZW50
SGFuZGxlcjo6aGFuZGxlRHJvcEV2ZW50KFFEcm9wRXZlbnQqIGV2KQogdm9pZCBRdFdlYlBhZ2VF
dmVudEhhbmRsZXI6OmhhbmRsZVBvdGVudGlhbFNpbmdsZVRhcEV2ZW50KGNvbnN0IFFUb3VjaEV2
ZW50OjpUb3VjaFBvaW50JiBwb2ludCkKIHsKICAgICBRVHJhbnNmb3JtIGZyb21JdGVtVHJhbnNm
b3JtID0gbV93ZWJQYWdlLT50cmFuc2Zvcm1Gcm9tSXRlbSgpOwotICAgIG1fd2ViUGFnZVByb3h5
LT5oYW5kbGVQb3RlbnRpYWxBY3RpdmF0aW9uKGZyb21JdGVtVHJhbnNmb3JtLm1hcChwb2ludC5w
b3MoKSkudG9Qb2ludCgpKTsKKyAgICBtX3dlYlBhZ2VQcm94eS0+aGFuZGxlUG90ZW50aWFsQWN0
aXZhdGlvbihmcm9tSXRlbVRyYW5zZm9ybS5tYXAocG9pbnQucG9zKCkpLnRvUG9pbnQoKSwgSW50
U2l6ZShwb2ludC5yZWN0KCkuc2l6ZSgpLnRvU2l6ZSgpKSk7CiB9CiAKIHZvaWQgUXRXZWJQYWdl
RXZlbnRIYW5kbGVyOjpoYW5kbGVTaW5nbGVUYXBFdmVudChjb25zdCBRVG91Y2hFdmVudDo6VG91
Y2hQb2ludCYgcG9pbnQpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dl
YlBhZ2UvV2ViUGFnZS5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvV2Vi
UGFnZS5jcHAKaW5kZXggNDAyMmVjNC4uN2Y0ZmJhMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktp
dDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dl
YlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmNwcApAQCAtMTQ0NSwxNiArMTQ0NSwxNiBAQCB2b2lk
IFdlYlBhZ2U6OnJlc3RvcmVTZXNzaW9uQW5kTmF2aWdhdGVUb0N1cnJlbnRJdGVtKGNvbnN0IFNl
c3Npb25TdGF0ZSYgc2Vzc2lvbgogCiAjaWYgRU5BQkxFKFRPVUNIX0VWRU5UUykKICNpZiBQTEFU
Rk9STShRVCkKLXZvaWQgV2ViUGFnZTo6aGlnaGxpZ2h0UG90ZW50aWFsQWN0aXZhdGlvbihjb25z
dCBJbnRQb2ludCYgcG9pbnQpCit2b2lkIFdlYlBhZ2U6OmhpZ2hsaWdodFBvdGVudGlhbEFjdGl2
YXRpb24oY29uc3QgSW50UG9pbnQmIHBvaW50LCBjb25zdCBJbnRTaXplJiBhcmVhKQogewogICAg
IE5vZGUqIGFjdGl2YXRpb25Ob2RlID0gMDsKICAgICBGcmFtZSogbWFpbmZyYW1lID0gbV9wYWdl
LT5tYWluRnJhbWUoKTsKKyAgICBJbnRQb2ludCBhZGp1c3RlZFBvaW50OwogCiAgICAgaWYgKHBv
aW50ICE9IEludFBvaW50Ojp6ZXJvKCkpIHsKLSAgICAgICAgSGl0VGVzdFJlc3VsdCByZXN1bHQg
PSBtYWluZnJhbWUtPmV2ZW50SGFuZGxlcigpLT5oaXRUZXN0UmVzdWx0QXRQb2ludChtYWluZnJh
bWUtPnZpZXcoKS0+d2luZG93VG9Db250ZW50cyhwb2ludCksIC8qYWxsb3dTaGFkb3dDb250ZW50
Ki8gZmFsc2UsIC8qaWdub3JlQ2xpcHBpbmcqLyB0cnVlKTsKLSAgICAgICAgYWN0aXZhdGlvbk5v
ZGUgPSByZXN1bHQuaW5uZXJOb2RlKCk7CisgICAgICAgIG1haW5mcmFtZS0+ZXZlbnRIYW5kbGVy
KCktPm5vZGVGb3JUYXBHZXN0dXJlQXRUb3VjaFBvaW50KHBvaW50LCBJbnRTaXplKGFyZWEud2lk
dGgoKSAvIDIsIGFyZWEuaGVpZ2h0KCkgLyAyKSwgYWRqdXN0ZWRQb2ludCwgYWN0aXZhdGlvbk5v
ZGUpOwogCi0gICAgICAgIGlmICghYWN0aXZhdGlvbk5vZGUtPmlzRm9jdXNhYmxlKCkpCisgICAg
ICAgIGlmIChhY3RpdmF0aW9uTm9kZSAmJiAhYWN0aXZhdGlvbk5vZGUtPmlzRm9jdXNhYmxlKCkp
CiAgICAgICAgICAgICBhY3RpdmF0aW9uTm9kZSA9IGFjdGl2YXRpb25Ob2RlLT5lbmNsb3NpbmdM
aW5rRXZlbnRQYXJlbnRPclNlbGYoKTsKICAgICB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJL
aXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmggYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9j
ZXNzL1dlYlBhZ2UvV2ViUGFnZS5oCmluZGV4IDAyMDQzMTQuLjBmM2NkYzIgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmgKKysrIGIvU291cmNl
L1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UuaApAQCAtNTU4LDcgKzU1OCw3IEBA
IHByaXZhdGU6CiAgICAgdm9pZCB0b3VjaEV2ZW50KGNvbnN0IFdlYlRvdWNoRXZlbnQmKTsKICAg
ICB2b2lkIHRvdWNoRXZlbnRTeW5jRm9yVGVzdGluZyhjb25zdCBXZWJUb3VjaEV2ZW50JiwgYm9v
bCYgaGFuZGxlZCk7CiAjaWYgUExBVEZPUk0oUVQpCi0gICAgdm9pZCBoaWdobGlnaHRQb3RlbnRp
YWxBY3RpdmF0aW9uKGNvbnN0IFdlYkNvcmU6OkludFBvaW50Jik7CisgICAgdm9pZCBoaWdobGln
aHRQb3RlbnRpYWxBY3RpdmF0aW9uKGNvbnN0IFdlYkNvcmU6OkludFBvaW50JiwgY29uc3QgV2Vi
Q29yZTo6SW50U2l6ZSYpOwogI2VuZGlmCiAjZW5kaWYKICAgICB2b2lkIGNvbnRleHRNZW51SGlk
ZGVuKCkgeyBtX2lzU2hvd2luZ0NvbnRleHRNZW51ID0gZmFsc2U7IH0KZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLm1lc3NhZ2VzLmluIGIvU291
cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UubWVzc2FnZXMuaW4KaW5kZXgg
NzI4YjZjNC4uNjg5MWI1MyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9X
ZWJQYWdlL1dlYlBhZ2UubWVzc2FnZXMuaW4KKysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vz
cy9XZWJQYWdlL1dlYlBhZ2UubWVzc2FnZXMuaW4KQEAgLTQxLDcgKzQxLDcgQEAgbWVzc2FnZXMg
LT4gV2ViUGFnZSB7CiAgICAgVG91Y2hFdmVudChXZWJLaXQ6OldlYlRvdWNoRXZlbnQgZXZlbnQp
CiAgICAgVG91Y2hFdmVudFN5bmNGb3JUZXN0aW5nKFdlYktpdDo6V2ViVG91Y2hFdmVudCBldmVu
dCkgLT4gKGJvb2wgaGFuZGxlZCkKICNpZiBQTEFURk9STShRVCkKLSAgICBIaWdobGlnaHRQb3Rl
bnRpYWxBY3RpdmF0aW9uKFdlYkNvcmU6OkludFBvaW50IHBvaW50KQorICAgIEhpZ2hsaWdodFBv
dGVudGlhbEFjdGl2YXRpb24oV2ViQ29yZTo6SW50UG9pbnQgcG9pbnQsIFdlYkNvcmU6OkludFNp
emUgcmFkaXVzKQogI2VuZGlmCiAjZW5kaWYKIAo=
</data>
<flag name="commit-queue"
          id="130483"
          type_id="3"
          status="-"
          setter="webkit.review.bot"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>128484</attachid>
            <date>2012-02-23 08:50:23 -0800</date>
            <delta_ts>2012-02-24 05:33:17 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>Patch5</filename>
            <type>text/plain</type>
            <size>61463</size>
            <attacher name="Allan Sandfeld Jensen">allan.jensen</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL0NoYW5nZUxvZyBiL0xheW91dFRlc3RzL0NoYW5nZUxv
ZwppbmRleCBiNGQzMmI5Li45YTI2ZDM4IDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9DaGFuZ2VM
b2cKKysrIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjAgQEAKKzIwMTItMDIt
MjMgIEFsbGFuIFNhbmRmZWxkIEplbnNlbiAgPGFsbGFuLmplbnNlbkBub2tpYS5jb20+CisKKyAg
ICAgICAgU2VsZWN0IGJlc3QgdGFyZ2V0IGZvciB0YXAgZ2VzdHVyZS4KKyAgICAgICAgaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTc4ODAxCisKKyAgICAgICAgUmV2aWV3
ZWQgYnkgTk9CT0RZIChPT1BTISkuCisgICAgICAgIAorICAgICAgICBUZXN0IG9mIHRvdWNoIGFk
anVzdG1lbnRzLiBUZXN0cyBzZXZlcmFsIGJvdGggbm9ybWFsIGFuZCB0cmlja3kgY2FzZXMuCisg
ICAgICAgIFRoZSB0ZXN0cyBhcmUgbm90IGV4aGF1c3RpdmUgdGhvdWdoLgorCisgICAgICAgICog
dG91Y2hhZGp1c3RtZW50L2V2ZW50LXRyaWdnZXJlZC13aWRnZXRzLWV4cGVjdGVkLnR4dDogQWRk
ZWQuCisgICAgICAgICogdG91Y2hhZGp1c3RtZW50L2V2ZW50LXRyaWdnZXJlZC13aWRnZXRzLmh0
bWw6IEFkZGVkLgorICAgICAgICAqIHRvdWNoYWRqdXN0bWVudC9uZXN0ZWQtdG91Y2gtZXhwZWN0
ZWQudHh0OiBBZGRlZC4KKyAgICAgICAgKiB0b3VjaGFkanVzdG1lbnQvbmVzdGVkLXRvdWNoLmh0
bWw6IEFkZGVkLgorICAgICAgICAqIHRvdWNoYWRqdXN0bWVudC90b3VjaC1pbmxpbmVzLWV4cGVj
dGVkLnR4dDogQWRkZWQuCisgICAgICAgICogdG91Y2hhZGp1c3RtZW50L3RvdWNoLWlubGluZXMu
aHRtbDogQWRkZWQuCisKIDIwMTItMDItMjEgIENzYWJhIE9zenRyb2dvbsOhYyAgPG9zc3lAd2Vi
a2l0Lm9yZz4KIAogICAgICAgICBbUXRdIFVucmV2aWV3ZWQgZ2FyZGVuaW5nLCBza2lwIG5ldyBm
YWlsaW5nIGFuZCBjcmFzaGluZyB0ZXN0IHRvIHBhaW50IHRoZSBib3QgZ3JlZW4uCmRpZmYgLS1n
aXQgYS9MYXlvdXRUZXN0cy90b3VjaGFkanVzdG1lbnQvZXZlbnQtdHJpZ2dlcmVkLXdpZGdldHMt
ZXhwZWN0ZWQudHh0IGIvTGF5b3V0VGVzdHMvdG91Y2hhZGp1c3RtZW50L2V2ZW50LXRyaWdnZXJl
ZC13aWRnZXRzLWV4cGVjdGVkLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
Li5mOTRlMjBlCi0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvdG91Y2hhZGp1c3RtZW50
L2V2ZW50LXRyaWdnZXJlZC13aWRnZXRzLWV4cGVjdGVkLnR4dApAQCAtMCwwICsxLDMxIEBACitU
ZXN0IHZhcmlvdXMgd2F5cyB0byB0cmlnZ2VyIGlucHV0LXdpZGdldHMuIE9uIGEgdG91Y2ggaW50
ZXJmYWNlLCBhbGwgdGhlIGFjdGlvbnMgc2hvdWxkIGJlIHRyaWdnZXJhYmxlIHdpdGggZWl0aGVy
IGEgdG91Y2ggZG93biBvciBhIHRvdWNoIHRhcC4KKworT24gc3VjY2VzcywgeW91IHdpbGwgc2Vl
IGEgc2VyaWVzIG9mICJQQVNTIiBtZXNzYWdlcywgZm9sbG93ZWQgYnkgIlRFU1QgQ09NUExFVEUi
LgorCisKK1Rlc3Rpbmcgc21hbGwgZGlyZWN0IGhpdHMKK1BBU1MgYWRqdXN0ZWROb2RlLmlkIGlz
IGVsZW1lbnQuaWQKK1BBU1MgYWRqdXN0ZWROb2RlLmlkIGlzIGVsZW1lbnQuaWQKK1BBU1MgYWRq
dXN0ZWROb2RlLmlkIGlzIGVsZW1lbnQuaWQKK1BBU1MgYWRqdXN0ZWROb2RlLmlkIGlzIG5vdCBl
bGVtZW50LmlkCitQQVNTIGFkanVzdGVkTm9kZS5pZCBpcyBlbGVtZW50LmlkCitUZXN0aW5nIGxh
cmdlIGRpcmVjdCBoaXRzCitQQVNTIGFkanVzdGVkTm9kZS5pZCBpcyBlbGVtZW50LmlkCitQQVNT
IGFkanVzdGVkTm9kZS5pZCBpcyBlbGVtZW50LmlkCitQQVNTIGFkanVzdGVkTm9kZS5pZCBpcyBl
bGVtZW50LmlkCitQQVNTIGFkanVzdGVkTm9kZS5pZCBpcyBub3QgZWxlbWVudC5pZAorUEFTUyBh
ZGp1c3RlZE5vZGUuaWQgaXMgZWxlbWVudC5pZAorVGVzdGluZyBsYXJnZSBkaXJlY3QgaGl0cwor
UEFTUyBhZGp1c3RlZE5vZGUuaWQgaXMgZWxlbWVudC5pZAorUEFTUyBhZGp1c3RlZE5vZGUuaWQg
aXMgZWxlbWVudC5pZAorUEFTUyBhZGp1c3RlZE5vZGUuaWQgaXMgZWxlbWVudC5pZAorUEFTUyBh
ZGp1c3RlZE5vZGUuaWQgaXMgbm90IGVsZW1lbnQuaWQKK1BBU1MgYWRqdXN0ZWROb2RlLmlkIGlz
IGVsZW1lbnQuaWQKK1BBU1Mgc3VjY2Vzc2Z1bGx5UGFyc2VkIGlzIHRydWUKKworVEVTVCBDT01Q
TEVURQorRm9jdXMgaGVyZSBzaG91bGQgZ2l2ZSBhIHRleHQgaW5wdXQtZmllbGQuCitNb3VzZS1v
dmVyIGhlcmUgc2hvdWxkIGdpdmUgYSB0ZXh0IGlucHV0LWZpZWxkLgorSG92ZXJpbmcgaGVyZSBz
aG91bGQgZ2l2ZSBhIHRleHQgaW5wdXQtZmllbGQuIAorRm9jdXNpbmcgaGVyZSBzaG91bGQgb25s
eSBnaXZlIGZvY3VzIG91dGxpbmUuCitGb2N1c2luZyBoZXJlIHNob3VsZCBnaXZlIGEgdGV4dCBp
bnB1dC1maWVsZC4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3RvdWNoYWRqdXN0bWVudC9ldmVu
dC10cmlnZ2VyZWQtd2lkZ2V0cy5odG1sIGIvTGF5b3V0VGVzdHMvdG91Y2hhZGp1c3RtZW50L2V2
ZW50LXRyaWdnZXJlZC13aWRnZXRzLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw
MDAwMC4uNmRiOGZkNgotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL3RvdWNoYWRqdXN0
bWVudC9ldmVudC10cmlnZ2VyZWQtd2lkZ2V0cy5odG1sCkBAIC0wLDAgKzEsMTY4IEBACis8aHRt
bD4KKzxoZWFkPgorPHN0eWxlPgorICAgIC5ib3ggeyBib3JkZXI6IDFweCBzb2xpZCBibGFjazsg
Ym9yZGVyLXJhZGl1czogNXB4IDVweDsgbWFyZ2luOiAxZW07IG1heC13aWR0aDogNDBlbTsgfQor
PC9zdHlsZT4KKworPHNjcmlwdCBzcmM9Ii4uL2Zhc3QvanMvcmVzb3VyY2VzL2pzLXRlc3QtcHJl
LmpzIj48L3NjcmlwdD4KKworPC9oZWFkPgorCis8Ym9keSBvbmxvYWQ9InJ1blRlc3RzKCkiPgor
Cis8cCBpZD0nZGVzY3JpcHRpb24nPjwvcD4KKworPGRpdiBpZD0nY29uc29sZSc+PC9kaXY+CisK
KzxzY3JpcHQ+CisgICAgdmFyIGVsZW1lbnQ7CisgICAgdmFyIGFkanVzdGVkTm9kZTsKKyAgICBm
dW5jdGlvbiBmaW5kQWJzb2x1dGVQb3NpdGlvbihub2RlKSB7CisgICAgICAgIHZhciBwb3MgPSBu
ZXcgT2JqZWN0KCk7CisgICAgICAgIHBvcy5sZWZ0ID0gMDsgcG9zLnRvcCA9IDA7CisgICAgICAg
IGRvIHsKKyAgICAgICAgICAgIHBvcy5sZWZ0ICs9IG5vZGUub2Zmc2V0TGVmdDsKKyAgICAgICAg
ICAgIHBvcy50b3AgKz0gbm9kZS5vZmZzZXRUb3A7CisgICAgICAgIH0gd2hpbGUgKG5vZGUgPSBu
b2RlLm9mZnNldFBhcmVudCk7CisgICAgICAgIHJldHVybiBwb3M7CisgICAgfQorICAgIAorICAg
IGZ1bmN0aW9uIHRlc3REaXJlY3RUb3VjaChlbGVtZW50KQorICAgIHsKKyAgICAgICAgdmFyIHBv
cyA9IGZpbmRBYnNvbHV0ZVBvc2l0aW9uKGVsZW1lbnQpOworICAgICAgICB2YXIgeCA9IHBvcy5s
ZWZ0ICsgZWxlbWVudC5jbGllbnRXaWR0aC8yIC0gMTsKKyAgICAgICAgdmFyIHkgPSBwb3MudG9w
ICsgZWxlbWVudC5jbGllbnRIZWlnaHQvMiAtIDE7CisgICAgICAgIHZhciB3ID0gMzsKKyAgICAg
ICAgdmFyIGggPSAzOworICAgICAgICBhZGp1c3RlZE5vZGUgPSBpbnRlcm5hbHMudG91Y2hOb2Rl
QWRqdXN0ZWRUb0Jlc3ROb2RlRm9yR2VzdHVyZVRhcCh4LCB5LCB3LCBoLCBkb2N1bWVudCk7Cisg
ICAgICAgIGlmIChhZGp1c3RlZE5vZGUubm9kZVR5cGUgPT0gMykgLy8gVEVYVCBub2RlCisgICAg
ICAgICAgICBhZGp1c3RlZE5vZGUgPSBhZGp1c3RlZE5vZGUucGFyZW50Tm9kZTsKKyAgICB9Cisg
ICAgCisgICAgZnVuY3Rpb24gdGVzdERpcmVjdEZhdEZpbmdlcihlbGVtZW50KQorICAgIHsKKyAg
ICAgICAgdmFyIHBvcyA9IGZpbmRBYnNvbHV0ZVBvc2l0aW9uKGVsZW1lbnQpOworICAgICAgICB2
YXIgeCA9IHBvcy5sZWZ0ICsgZWxlbWVudC5jbGllbnRXaWR0aC8yIC0gMTsKKyAgICAgICAgdmFy
IHkgPSBwb3MudG9wIC0gNSA7CisgICAgICAgIHZhciB3ID0gZWxlbWVudC5jbGllbnRIZWlnaHQ7
CisgICAgICAgIHZhciBoID0gZWxlbWVudC5jbGllbnRIZWlnaHQgKyAxMDsKKyAgICAgICAgYWRq
dXN0ZWROb2RlID0gaW50ZXJuYWxzLnRvdWNoTm9kZUFkanVzdGVkVG9CZXN0Tm9kZUZvckdlc3R1
cmVUYXAoeCwgeSwgdywgaCwgZG9jdW1lbnQpOworICAgICAgICBpZiAoYWRqdXN0ZWROb2RlLm5v
ZGVUeXBlID09IDMpIC8vIFRFWFQgbm9kZQorICAgICAgICAgICAgYWRqdXN0ZWROb2RlID0gYWRq
dXN0ZWROb2RlLnBhcmVudE5vZGU7CisgICAgfQorICAgIAorICAgIGZ1bmN0aW9uIHRlc3RJbmRp
cmVjdEZhdEZpbmdlcihlbGVtZW50KQorICAgIHsKKyAgICAgICAgdmFyIHBvcyA9IGZpbmRBYnNv
bHV0ZVBvc2l0aW9uKGVsZW1lbnQpOworICAgICAgICB2YXIgeCA9IHBvcy5sZWZ0ICsgZWxlbWVu
dC5jbGllbnRXaWR0aC8yIC0gMTsKKyAgICAgICAgdmFyIHkgPSBwb3MudG9wIC0gNzsKKyAgICAg
ICAgdmFyIHcgPSAxMDsKKyAgICAgICAgdmFyIGggPSAxMDsKKyAgICAgICAgYWRqdXN0ZWROb2Rl
ID0gaW50ZXJuYWxzLnRvdWNoTm9kZUFkanVzdGVkVG9CZXN0Tm9kZUZvckdlc3R1cmVUYXAoeCwg
eSwgdywgaCwgZG9jdW1lbnQpOworICAgICAgICBpZiAoYWRqdXN0ZWROb2RlLm5vZGVUeXBlID09
IDMpIC8vIFRFWFQgbm9kZQorICAgICAgICAgICAgYWRqdXN0ZWROb2RlID0gYWRqdXN0ZWROb2Rl
LnBhcmVudE5vZGU7CisgICAgfQorICAgIAorICAgIGZ1bmN0aW9uIHRlc3RUb3VjaEhpdChlbGVt
ZW50aWQsIHRvdWNoVHlwZSkgeworICAgICAgICBlbGVtZW50ID0gZG9jdW1lbnQuZ2V0RWxlbWVu
dEJ5SWQoZWxlbWVudGlkKTsKKyAgICAgICAgdG91Y2hUeXBlKGVsZW1lbnQpOworICAgICAgICBz
aG91bGRCZSgnYWRqdXN0ZWROb2RlLmlkJywgJ2VsZW1lbnQuaWQnKTsKKyAgICB9CisgICAgCisg
ICAgZnVuY3Rpb24gdGVzdFRvdWNoTWlzcyhlbGVtZW50aWQsIHRvdWNoVHlwZSkgeworICAgICAg
ICBlbGVtZW50ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoZWxlbWVudGlkKTsKKyAgICAgICAg
dG91Y2hUeXBlKGVsZW1lbnQpOworICAgICAgICBzaG91bGROb3RCZSgnYWRqdXN0ZWROb2RlLmlk
JywgJ2VsZW1lbnQuaWQnKTsKKyAgICB9CisgICAgCisgICAgZnVuY3Rpb24gdGVzdERpcmVjdFRv
dWNoZXMoKQorICAgIHsKKyAgICAgICAgZGVidWcoJ1Rlc3Rpbmcgc21hbGwgZGlyZWN0IGhpdHMn
KTsKKyAgICAgICAgdGVzdFRvdWNoSGl0KCd0ZXN0MScsdGVzdERpcmVjdFRvdWNoKTsKKyAgICAg
ICAgdGVzdFRvdWNoSGl0KCd0ZXN0MicsdGVzdERpcmVjdFRvdWNoKTsKKyAgICAgICAgdGVzdFRv
dWNoSGl0KCd0ZXN0MycsdGVzdERpcmVjdFRvdWNoKTsKKyAgICAgICAgdGVzdFRvdWNoTWlzcygn
dGVzdDQnLHRlc3REaXJlY3RUb3VjaCk7CisgICAgICAgIHRlc3RUb3VjaEhpdCgndGVzdDUnLHRl
c3REaXJlY3RUb3VjaCk7CisgICAgfQorICAgIAorICAgIGZ1bmN0aW9uIHRlc3REaXJlY3RGYXRG
aW5nZXJzKCkKKyAgICB7CisgICAgICAgIGRlYnVnKCdUZXN0aW5nIGxhcmdlIGRpcmVjdCBoaXRz
Jyk7CisgICAgICAgIHRlc3RUb3VjaEhpdCgndGVzdDEnLHRlc3REaXJlY3RGYXRGaW5nZXIpOwor
ICAgICAgICB0ZXN0VG91Y2hIaXQoJ3Rlc3QyJyx0ZXN0RGlyZWN0RmF0RmluZ2VyKTsKKyAgICAg
ICAgdGVzdFRvdWNoSGl0KCd0ZXN0MycsdGVzdERpcmVjdEZhdEZpbmdlcik7CisgICAgICAgIHRl
c3RUb3VjaE1pc3MoJ3Rlc3Q0Jyx0ZXN0RGlyZWN0RmF0RmluZ2VyKTsKKyAgICAgICAgdGVzdFRv
dWNoSGl0KCd0ZXN0NScsdGVzdERpcmVjdEZhdEZpbmdlcik7CisgICAgfQorICAgIAorICAgIGZ1
bmN0aW9uIHRlc3RJbmRpcmVjdEZhdEZpbmdlcnMoKQorICAgIHsKKyAgICAgICAgZGVidWcoJ1Rl
c3RpbmcgbGFyZ2UgZGlyZWN0IGhpdHMnKTsKKyAgICAgICAgdGVzdFRvdWNoSGl0KCd0ZXN0MScs
dGVzdEluZGlyZWN0RmF0RmluZ2VyKTsKKyAgICAgICAgdGVzdFRvdWNoSGl0KCd0ZXN0MicsdGVz
dEluZGlyZWN0RmF0RmluZ2VyKTsKKyAgICAgICAgdGVzdFRvdWNoSGl0KCd0ZXN0MycsdGVzdElu
ZGlyZWN0RmF0RmluZ2VyKTsKKyAgICAgICAgdGVzdFRvdWNoTWlzcygndGVzdDQnLHRlc3RJbmRp
cmVjdEZhdEZpbmdlcik7CisgICAgICAgIHRlc3RUb3VjaEhpdCgndGVzdDUnLHRlc3RJbmRpcmVj
dEZhdEZpbmdlcik7CisgICAgfQorICAgIAorICAgIGZ1bmN0aW9uIHJ1blRlc3RzKCkKKyAgICB7
CisgICAgICAgIGlmICh3aW5kb3cubGF5b3V0VGVzdENvbnRyb2xsZXIgJiYgd2luZG93LmludGVy
bmFscykgeworICAgICAgICAgICAgZGVzY3JpcHRpb24oJ1Rlc3QgdmFyaW91cyB3YXlzIHRvIHRy
aWdnZXIgaW5wdXQtd2lkZ2V0cy4gT24gYSB0b3VjaCBpbnRlcmZhY2UsIGFsbCB0aGUgYWN0aW9u
cyBzaG91bGQgYmUgdHJpZ2dlcmFibGUgd2l0aCBlaXRoZXIgYSB0b3VjaCBkb3duIG9yIGEgdG91
Y2ggdGFwLicpOworICAgICAgICAgICAgbGF5b3V0VGVzdENvbnRyb2xsZXIuZHVtcEFzVGV4dCgp
OworICAgICAgICAgICAgbGF5b3V0VGVzdENvbnRyb2xsZXIud2FpdFVudGlsRG9uZSgpOworICAg
ICAgICAgICAgdGVzdERpcmVjdFRvdWNoZXMoKTsKKyAgICAgICAgICAgIHRlc3REaXJlY3RGYXRG
aW5nZXJzKCk7CisgICAgICAgICAgICB0ZXN0SW5kaXJlY3RGYXRGaW5nZXJzKCk7CisgICAgICAg
ICAgICBpc1N1Y2Nlc3NmdWxseVBhcnNlZCgpOworICAgICAgICAgICAgbGF5b3V0VGVzdENvbnRy
b2xsZXIubm90aWZ5RG9uZSgpOworICAgICAgICB9CisgICAgfQorPC9zY3JpcHQ+CisKKzxzY3Jp
cHQ+CisgICAgZnVuY3Rpb24gdHJpZ2dlcklucHV0KCkgeworICAgICAgICB2YXIgZWxlbWVudCA9
IGV2ZW50LnNyY0VsZW1lbnQ7CisgICAgICAgIGlmICghZWxlbWVudC5vcGVuKSB7CisgICAgICAg
ICAgICBlbGVtZW50LmlubmVySFRNTCA9ICc8aW5wdXQgdHlwZT10ZXh0IHN0eWxlPSJ3aWR0aDog
MTAwJSI+PC9pbnB1dD4nCisgICAgICAgICAgICBlbGVtZW50Lm9wZW4gPSB0cnVlOworICAgICAg
ICB9CisgICAgICAgIGVsZW1lbnQuZmlyc3RDaGlsZC5mb2N1cygpOworICAgIH0KKzwvc2NyaXB0
PgorCis8ZGl2IGlkPXRlc3QxIGNsYXNzPWJveCB0YWJpbmRleD0xIG9uZm9jdXM9J3RyaWdnZXJJ
bnB1dCgpJz4KK0ZvY3VzIGhlcmUgc2hvdWxkIGdpdmUgYSB0ZXh0IGlucHV0LWZpZWxkLgorPC9k
aXY+CisKKzxkaXYgaWQ9dGVzdDIgY2xhc3M9Ym94IG9ubW91c2VvdmVyPSd0cmlnZ2VySW5wdXQo
KSc+IAorTW91c2Utb3ZlciBoZXJlIHNob3VsZCBnaXZlIGEgdGV4dCBpbnB1dC1maWVsZC4KKzwv
ZGl2PgorCis8c3R5bGU+CisgICAgLmJveDpub3QoOmhvdmVyKSAuaG92ZXJ0cmlnZ2VyZWQgeyB2
aXNpYmlsaXR5OiBoaWRkZW47fQorICAgIC5ib3g6aG92ZXIgLmhvdmVyZmFsbGJhY2sgeyBkaXNw
bGF5OiBub25lOyB9ICAKKzwvc3R5bGU+CisKKzxkaXYgaWQ9dGVzdDMgY2xhc3M9Ym94PiAKKyAg
ICA8c3BhbiBjbGFzcz1ob3ZlcmZhbGxiYWNrPkhvdmVyaW5nIGhlcmUgc2hvdWxkIGdpdmUgYSB0
ZXh0IGlucHV0LWZpZWxkLjwvc3Bhbj4KKyAgICA8aW5wdXQgdHlwZT10ZXh0IGNsYXNzPWhvdmVy
dHJpZ2dlcmVkPjwvaW5wdXQ+Cis8L2Rpdj4KKworPGRpdiBpZD10ZXN0NCBjbGFzcz1ib3ggb25m
b2N1cz0ndHJpZ2dlcklucHV0KCknPgorICAgIDxzcGFuIHRhYmluZGV4PTE+IEZvY3VzaW5nIGhl
cmUgc2hvdWxkIG9ubHkgZ2l2ZSBmb2N1cyBvdXRsaW5lLgorICAgIDwvc3Bhbj4KKzwvZGl2Pgor
Cis8ZGl2IGlkPXRlc3Q1IGNsYXNzPWJveD4KKyAgICA8c3BhbiB0YWJpbmRleD0xPiBGb2N1c2lu
ZyBoZXJlIHNob3VsZCBnaXZlIGEgdGV4dCBpbnB1dC1maWVsZC4KKyAgICA8L3NwYW4+Cis8L2Rp
dj4KKworPHNjcmlwdD4KKyAgICB2YXIgZWxlbWVudCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlk
KCd0ZXN0NScpOworICAgIGVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignRE9NRm9jdXNJbicsIHRy
aWdnZXJJbnB1dCwgZmFsc2UpOworPC9zY3JpcHQ+CisKKzwvYm9keT4KKzwvaHRtbD4KXCBObyBu
ZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy90b3VjaGFkanVz
dG1lbnQvbmVzdGVkLXRvdWNoLWV4cGVjdGVkLnR4dCBiL0xheW91dFRlc3RzL3RvdWNoYWRqdXN0
bWVudC9uZXN0ZWQtdG91Y2gtZXhwZWN0ZWQudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDAwMDAwMDAuLjc0N2Y2N2UKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy90b3VjaGFk
anVzdG1lbnQvbmVzdGVkLXRvdWNoLWV4cGVjdGVkLnR4dApAQCAtMCwwICsxLDE4IEBACitCb3gg
d2l0aCBhIGxvY2FsIGNsaWNrIGhhbmRsZXIuCitCb3ggd2l0aG91dCBhIGxvY2FsIGNsaWNrIGhh
bmRsZXIuCitUZXN0IHRoZSBjYXNlIHdoZXJlIGEgY2xpY2thYmxlIHRhcmdldCBpcyBuZXN0ZWQg
aW5zaWRlIGEgZG9jdW1lbnQgdGhhdCBpcyBtb25pdG9yaW5nIGNsaWNrcy4gVGhlIHRhcmdldCB3
aXRoIHRoZSBsb2NhbCBldmVudC1oYW5kbGVyIHNob3VsZCBiZSBjaG9zZW4gaWYgbXVsdGlwbGUg
dGFyZ2V0cyBhcmUgdG91Y2hlZC4KKworT24gc3VjY2VzcywgeW91IHdpbGwgc2VlIGEgc2VyaWVz
IG9mICJQQVNTIiBtZXNzYWdlcywgZm9sbG93ZWQgYnkgIlRFU1QgQ09NUExFVEUiLgorCisKK1Rl
c3Rpbmcgc21hbGwgZGlyZWN0IGhpdHMKK1BBU1MgYWRqdXN0ZWROb2RlLmlkIGlzIGVsZW1lbnQu
aWQKK1BBU1MgYWRqdXN0ZWROb2RlLmlkIGlzIGVsZW1lbnQuaWQKK1Rlc3RpbmcgcHJlZmVyZWQg
aGl0cworUEFTUyBhZGp1c3RlZE5vZGUuaWQgaXMgZWxlbWVudDEuaWQKK1BBU1MgYWRqdXN0ZWRO
b2RlLmlkIGlzIGVsZW1lbnQxLmlkCitQQVNTIGFkanVzdGVkTm9kZS5pZCBpcyBlbGVtZW50MS5p
ZAorUEFTUyBzdWNjZXNzZnVsbHlQYXJzZWQgaXMgdHJ1ZQorCitURVNUIENPTVBMRVRFCisKZGlm
ZiAtLWdpdCBhL0xheW91dFRlc3RzL3RvdWNoYWRqdXN0bWVudC9uZXN0ZWQtdG91Y2guaHRtbCBi
L0xheW91dFRlc3RzL3RvdWNoYWRqdXN0bWVudC9uZXN0ZWQtdG91Y2guaHRtbApuZXcgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44NTJkMTYyCi0tLSAvZGV2L251bGwKKysrIGIvTGF5
b3V0VGVzdHMvdG91Y2hhZGp1c3RtZW50L25lc3RlZC10b3VjaC5odG1sCkBAIC0wLDAgKzEsMTIw
IEBACis8aHRtbD4KKzxoZWFkPgorPHN0eWxlPgorICAgIC5ib3ggeyBib3JkZXI6IDFweCBzb2xp
ZCBibGFjazsgYm9yZGVyLXJhZGl1czogNXB4IDVweDsgbWFyZ2luOiAxZW07IG1heC13aWR0aDog
NDBlbTsgfQorPC9zdHlsZT4KKzxzY3JpcHQgc3JjPSIuLi9mYXN0L2pzL3Jlc291cmNlcy9qcy10
ZXN0LXByZS5qcyI+PC9zY3JpcHQ+CisKKzwvaGVhZD4KKworPGJvZHkgb25sb2FkPSJydW5UZXN0
cygpIj4KKworPGRpdiBjbGFzcz1ib3ggaWQ9bXlib3gxPgorQm94IHdpdGggYSBsb2NhbCBjbGlj
ayBoYW5kbGVyLgorPC9kaXY+CisKKzxkaXYgY2xhc3M9Ym94IGlkPW15Ym94Mj4gCitCb3ggd2l0
aG91dCBhIGxvY2FsIGNsaWNrIGhhbmRsZXIuCis8L2Rpdj4KKworPHNjcmlwdD4KKyAgZnVuY3Rp
b24gbW9uaXRvcihlKSB7IGFsZXJ0KGUudGFyZ2V0ICsoIGUudGFyZ2V0LmlkID8gKCAnICMnICsg
ZS50YXJnZXQuaWQpIDogJycpKTsgfTsKKyAgZnVuY3Rpb24gZG9Tb21ldGhpbmcoZSkge307CisK
KyAgdmFyIGVsZW1lbnQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbXlib3gxJyk7CisgIGVs
ZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCBkb1NvbWV0aGluZywgZmFsc2UpOworICBl
bGVtZW50ID0gZG9jdW1lbnQuYm9keTsKKyAgZWxlbWVudC5hZGRFdmVudExpc3RlbmVyKCdjbGlj
aycsIG1vbml0b3IsIGZhbHNlKTsKKzwvc2NyaXB0PgorCisKKzxwIGlkPSdkZXNjcmlwdGlvbic+
PC9wPgorPGRpdiBpZD0nY29uc29sZSc+PC9kaXY+CisKKzxzY3JpcHQ+CisgICAgdmFyIGVsZW1l
bnQ7CisgICAgdmFyIGFkanVzdGVkTm9kZTsKKyAgICBmdW5jdGlvbiBmaW5kQWJzb2x1dGVQb3Np
dGlvbihub2RlKSB7CisgICAgICAgIHZhciBwb3MgPSBuZXcgT2JqZWN0KCk7CisgICAgICAgIHBv
cy5sZWZ0ID0gMDsgcG9zLnRvcCA9IDA7CisgICAgICAgIGRvIHsKKyAgICAgICAgICAgIHBvcy5s
ZWZ0ICs9IG5vZGUub2Zmc2V0TGVmdDsKKyAgICAgICAgICAgIHBvcy50b3AgKz0gbm9kZS5vZmZz
ZXRUb3A7CisgICAgICAgIH0gd2hpbGUgKG5vZGUgPSBub2RlLm9mZnNldFBhcmVudCk7CisgICAg
ICAgIHJldHVybiBwb3M7CisgICAgfQorICAgIAorICAgIGZ1bmN0aW9uIHRlc3REaXJlY3RUb3Vj
aChlbGVtZW50KQorICAgIHsKKyAgICAgICAgdmFyIHBvcyA9IGZpbmRBYnNvbHV0ZVBvc2l0aW9u
KGVsZW1lbnQpOworICAgICAgICB2YXIgeCA9IHBvcy5sZWZ0ICsgZWxlbWVudC5jbGllbnRXaWR0
aC8yIC0gMTsKKyAgICAgICAgdmFyIHkgPSBwb3MudG9wICsgZWxlbWVudC5jbGllbnRIZWlnaHQv
MiAtIDE7CisgICAgICAgIHZhciB3ID0gMzsKKyAgICAgICAgdmFyIGggPSAzOworICAgICAgICB2
YXIgYWRqdXN0ZWROb2RlID0gaW50ZXJuYWxzLnRvdWNoTm9kZUFkanVzdGVkVG9CZXN0Tm9kZUZv
ckdlc3R1cmVUYXAoeCwgeSwgdywgaCwgZG9jdW1lbnQpOworICAgICAgICBpZiAoYWRqdXN0ZWRO
b2RlLm5vZGVUeXBlID09IDMpIC8vIFRFWFQgbm9kZQorICAgICAgICAgICAgYWRqdXN0ZWROb2Rl
ID0gYWRqdXN0ZWROb2RlLnBhcmVudE5vZGU7CisgICAgICAgIHJldHVybiBhZGp1c3RlZE5vZGU7
CisgICAgfQorICAgIAorICAgIGZ1bmN0aW9uIHRlc3REb3VibGVUb3VjaChlbGVtZW50MSwgZWxl
bWVudDIsIG9mZnNldCkKKyAgICB7CisgICAgICAgIHZhciBwb3MxID0gZmluZEFic29sdXRlUG9z
aXRpb24oZWxlbWVudDEpOworICAgICAgICB2YXIgcG9zMiA9IGZpbmRBYnNvbHV0ZVBvc2l0aW9u
KGVsZW1lbnQyKTsKKyAgICAgICAgLy8gV2UgYXNzdW1lIHRoZSBlbGVtZW50cyBoYXZlIHRoZSBz
YW1lIHggY29vcmQgYW5kIHdpZHRoLgorICAgICAgICB2YXIgeCA9IHBvczEubGVmdCArIGVsZW1l
bnQxLmNsaWVudFdpZHRoLzIgLSAxOworICAgICAgICB2YXIgeTEgPSBwb3MxLnRvcCArIGVsZW1l
bnQxLmNsaWVudEhlaWdodC8yICsgMTsKKyAgICAgICAgdmFyIHkyID0gcG9zMi50b3AgKyBlbGVt
ZW50Mi5jbGllbnRIZWlnaHQvMiAtIDE7CisgICAgICAgIHZhciB3ID0geTIgLSB5MTsKKyAgICAg
ICAgdmFyIGggPSB5MiAtIHkxOworICAgICAgICB2YXIgYWRqdXN0ZWROb2RlID0gaW50ZXJuYWxz
LnRvdWNoTm9kZUFkanVzdGVkVG9CZXN0Tm9kZUZvckdlc3R1cmVUYXAoeCwgeTEgKyBvZmZzZXQs
IHcsIGgsIGRvY3VtZW50KTsKKyAgICAgICAgaWYgKGFkanVzdGVkTm9kZS5ub2RlVHlwZSA9PSAz
KSAvLyBURVhUIG5vZGUKKyAgICAgICAgICAgIGFkanVzdGVkTm9kZSA9IGFkanVzdGVkTm9kZS5w
YXJlbnROb2RlOworICAgICAgICByZXR1cm4gYWRqdXN0ZWROb2RlOworICAgIH0KKyAgICAKKyAg
ICBmdW5jdGlvbiB0ZXN0RGlyZWN0VG91Y2hlcygpCisgICAgeworICAgICAgICBkZWJ1ZygnVGVz
dGluZyBzbWFsbCBkaXJlY3QgaGl0cycpOworICAgICAgICAKKyAgICAgICAgZWxlbWVudCA9IGRv
Y3VtZW50LmdldEVsZW1lbnRCeUlkKCdteWJveDEnKTsKKyAgICAgICAgYWRqdXN0ZWROb2RlID0g
dGVzdERpcmVjdFRvdWNoKGVsZW1lbnQpOworICAgICAgICBzaG91bGRCZSgnYWRqdXN0ZWROb2Rl
LmlkJywgJ2VsZW1lbnQuaWQnKTsKKyAgICAgICAgCisgICAgICAgIGVsZW1lbnQgPSBkb2N1bWVu
dC5nZXRFbGVtZW50QnlJZCgnbXlib3gyJyk7CisgICAgICAgIGFkanVzdGVkTm9kZSA9IHRlc3RE
aXJlY3RUb3VjaChlbGVtZW50KTsKKyAgICAgICAgc2hvdWxkQmUoJ2FkanVzdGVkTm9kZS5pZCcs
ICdlbGVtZW50LmlkJyk7CisgICAgfQorICAgIAorICAgIGZ1bmN0aW9uIHRlc3RQcmVmZXJlZFRv
dWNoKCkKKyAgICB7CisgICAgICAgIGRlYnVnKCdUZXN0aW5nIHByZWZlcmVkIGhpdHMnKTsKKyAg
ICAgICAgCisgICAgICAgIGVsZW1lbnQxID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ215Ym94
MScpOworICAgICAgICBlbGVtZW50MiA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdteWJveDIn
KTsKKyAgICAgICAgYWRqdXN0ZWROb2RlID0gdGVzdERvdWJsZVRvdWNoKGVsZW1lbnQxLCBlbGVt
ZW50MiwgMCk7CisgICAgICAgIHNob3VsZEJlKCdhZGp1c3RlZE5vZGUuaWQnLCAnZWxlbWVudDEu
aWQnKTsKKworICAgICAgICAvLyBGaXJzdCB0ZXN0IHdhcyBjZW50ZXJlZCwgbm93IG1vdmUgdGhl
IHRlc3QgY2xvc2VyIHRvIHRoZSB3cm9uZyBub2RlLCBhbmQgZW5zdXJlIHdlIHN0aWxsIGdldCB0
aGUgcHJlZmVyZWQgbm9kZS4KKyAgICAgICAgYWRqdXN0ZWROb2RlID0gdGVzdERvdWJsZVRvdWNo
KGVsZW1lbnQxLCBlbGVtZW50MiwgNSk7CisgICAgICAgIHNob3VsZEJlKCdhZGp1c3RlZE5vZGUu
aWQnLCAnZWxlbWVudDEuaWQnKTsKKyAgICAgICAgCisgICAgICAgIGFkanVzdGVkTm9kZSA9IHRl
c3REb3VibGVUb3VjaChlbGVtZW50MSwgZWxlbWVudDIsIDEwKTsKKyAgICAgICAgc2hvdWxkQmUo
J2FkanVzdGVkTm9kZS5pZCcsICdlbGVtZW50MS5pZCcpOworICAgIH0KKyAgICAKKyAgICBmdW5j
dGlvbiBydW5UZXN0cygpCisgICAgeworICAgICAgICBpZiAod2luZG93LmxheW91dFRlc3RDb250
cm9sbGVyICYmIHdpbmRvdy5pbnRlcm5hbHMpIHsKKyAgICAgICAgICAgIGRlc2NyaXB0aW9uKCdU
ZXN0IHRoZSBjYXNlIHdoZXJlIGEgY2xpY2thYmxlIHRhcmdldCBpcyBuZXN0ZWQgaW5zaWRlIGEg
ZG9jdW1lbnQgdGhhdCBpcyBtb25pdG9yaW5nIGNsaWNrcy4gVGhlIHRhcmdldCB3aXRoIHRoZSBs
b2NhbCBldmVudC1oYW5kbGVyIHNob3VsZCBiZSBjaG9zZW4gaWYgbXVsdGlwbGUgdGFyZ2V0cyBh
cmUgdG91Y2hlZC4nKTsKKyAgICAgICAgICAgIGxheW91dFRlc3RDb250cm9sbGVyLmR1bXBBc1Rl
eHQoKTsKKyAgICAgICAgICAgIGxheW91dFRlc3RDb250cm9sbGVyLndhaXRVbnRpbERvbmUoKTsK
KyAgICAgICAgICAgIHRlc3REaXJlY3RUb3VjaGVzKCk7CisgICAgICAgICAgICB0ZXN0UHJlZmVy
ZWRUb3VjaCgpOworICAgICAgICAgICAgaXNTdWNjZXNzZnVsbHlQYXJzZWQoKTsKKyAgICAgICAg
ICAgIGxheW91dFRlc3RDb250cm9sbGVyLm5vdGlmeURvbmUoKTsKKyAgICAgICAgfQorICAgIH0K
Kzwvc2NyaXB0PgorPC9ib2R5PgorPC9odG1sPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUK
ZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3RvdWNoYWRqdXN0bWVudC90b3VjaC1pbmxpbmVzLWV4
cGVjdGVkLnR4dCBiL0xheW91dFRlc3RzL3RvdWNoYWRqdXN0bWVudC90b3VjaC1pbmxpbmVzLWV4
cGVjdGVkLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43ZTE0YmZlCi0t
LSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvdG91Y2hhZGp1c3RtZW50L3RvdWNoLWlubGlu
ZXMtZXhwZWN0ZWQudHh0CkBAIC0wLDAgKzEsMjkgQEAKK3NvbWUgbGluaworc29tZSBsaW5rIGJy
ZWFraW5nIGxpbmVzIGFuZCBsaW5rCitob2xhIG11bmRvISBhIHNwbGl0IHVwIGxpbmsKK2hlbGxv
IHdvcmxkIHNvbWUgbGluayBhbHNvIGJyZWFraW5nCitoaSB0aGVyZSBzb21lIGxpbmsgdGhhdCBp
cyBicmVha2luZyBtdWx0aXBsZSBsaW5lcyBqdXN0IGZvciB0aGUgdmVyeSBmdW4gb2YgaXQKKwor
VGVzdCB0b3VjaC1hZGp1c3RtZW50IG9uIGlubGluZSBsaW5rcy4gTWFraW5nIHN1cmUgd2UgY2Fu
IGhpdCBvdmVyIGxpbmUtYnJlYWtzLCBhbmQgY2FuIG1pc3Mgd2hlbiB0YXBwaW5nIGJldHdlZW4g
cGFydHMgb2YgYSBsaW5lLWJyb2tlbiBsaW5rLgorCitPbiBzdWNjZXNzLCB5b3Ugd2lsbCBzZWUg
YSBzZXJpZXMgb2YgIlBBU1MiIG1lc3NhZ2VzLCBmb2xsb3dlZCBieSAiVEVTVCBDT01QTEVURSIu
CisKKworVGVzdCBzb21lIGRpcmVjdCBoaXRzCitQQVNTIGFkanVzdGVkTm9kZS5pZCBpcyAiMSIK
K1BBU1MgYWRqdXN0ZWROb2RlLmlkIGlzICIyIgorUEFTUyBhZGp1c3RlZE5vZGUuaWQgaXMgIjQi
CitQQVNTIGFkanVzdGVkTm9kZS5pZCBpcyAiNiIKK1Rlc3QgYSBmZXcgZGlyZWN0IG1pc3Nlcwor
UEFTUyBhZGp1c3RlZE5vZGUuaWQgaXMgIiIKK1BBU1MgYWRqdXN0ZWROb2RlLmlkIGlzICIiCitU
ZXN0IHNvbWUgaW4tZGlyZWN0IGhpdHMKK1BBU1MgYWRqdXN0ZWROb2RlLmlkIGlzICIyIgorUEFT
UyBhZGp1c3RlZE5vZGUuaWQgaXMgIjMiCitQQVNTIGFkanVzdGVkTm9kZS5pZCBpcyAiNCIKK1BB
U1MgYWRqdXN0ZWROb2RlLmlkIGlzICI0IgorUEFTUyBhZGp1c3RlZE5vZGUuaWQgaXMgIjYiCitQ
QVNTIHN1Y2Nlc3NmdWxseVBhcnNlZCBpcyB0cnVlCisKK1RFU1QgQ09NUExFVEUKKwpkaWZmIC0t
Z2l0IGEvTGF5b3V0VGVzdHMvdG91Y2hhZGp1c3RtZW50L3RvdWNoLWlubGluZXMuaHRtbCBiL0xh
eW91dFRlc3RzL3RvdWNoYWRqdXN0bWVudC90b3VjaC1pbmxpbmVzLmh0bWwKbmV3IGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTI2NmJjZAotLS0gL2Rldi9udWxsCisrKyBiL0xheW91
dFRlc3RzL3RvdWNoYWRqdXN0bWVudC90b3VjaC1pbmxpbmVzLmh0bWwKQEAgLTAsMCArMSw5OCBA
QAorPGh0bWw+Cis8aGVhZD4KKyAgICA8c2NyaXB0IHNyYz0iLi4vZmFzdC9qcy9yZXNvdXJjZXMv
anMtdGVzdC1wcmUuanMiPjwvc2NyaXB0PgorPC9oZWFkPgorPGJvZHkgb25sb2FkPSJydW5UZXN0
cygpIj4KKyAgICA8cCBzdHlsZT0id2lkdGg6IDEwZW07Ij4KKyAgICA8YSBpZD0iMSIgaHJlZj0i
IzEiPnNvbWUgbGluazwvYT48YnI+CisgICAgPGEgaWQ9IjIiIGhyZWY9IiMyIj5zb21lIGxpbmsg
YnJlYWtpbmcgbGluZXM8L2E+IGFuZCA8YSBpZD0iMyIgaHJlZj0iIzMiPmxpbms8L2E+PGJyPgor
ICAgIGhvbGEgbXVuZG8hIDxhIGlkPSI0IiBocmVmPSIjNCI+YSBzcGxpdCB1cCBsaW5rPC9hPjxi
cj4KKyAgICBoZWxsbyB3b3JsZCA8YSBpZD0iNSIgaHJlZj0iIzUiPnNvbWUgbGluayBhbHNvIGJy
ZWFraW5nPC9hPjxicj4KKyAgICBoaSB0aGVyZSA8YSBpZD0iNiIgaHJlZj0iIzYiPnNvbWUgbGlu
ayB0aGF0IGlzIGJyZWFraW5nIG11bHRpcGxlIGxpbmVzIGp1c3QgZm9yIHRoZSB2ZXJ5IGZ1biBv
ZiBpdDwvYT48YnI+PGJyPgorICAgIDwvcD4KKyAgICAKKyAgICAKKzxwIGlkPSdkZXNjcmlwdGlv
bic+PC9wPgorPGRpdiBpZD0nY29uc29sZSc+PC9kaXY+CisKKzxzY3JpcHQ+CisgICAgdmFyIGVs
ZW1lbnQ7CisgICAgdmFyIGFkanVzdGVkTm9kZTsKKyAgICBmdW5jdGlvbiB0ZXN0Um91bmRUb3Vj
aCh4LCB5LCByKQorICAgIHsKKyAgICAgICAgdmFyIHggPSB4IC0gcjsKKyAgICAgICAgdmFyIHkg
PSB5IC0gcjsKKyAgICAgICAgdmFyIHcgPSByICogMjsKKyAgICAgICAgdmFyIGggPSByICogMjsK
KyAgICAgICAgdmFyIGFkanVzdGVkTm9kZSA9IGludGVybmFscy50b3VjaE5vZGVBZGp1c3RlZFRv
QmVzdE5vZGVGb3JHZXN0dXJlVGFwKHgsIHksIHcsIGgsIGRvY3VtZW50KTsKKyAgICAgICAgaWYg
KGFkanVzdGVkTm9kZS5ub2RlVHlwZSA9PSAzKSAvLyBURVhUIG5vZGUKKyAgICAgICAgICAgIGFk
anVzdGVkTm9kZSA9IGFkanVzdGVkTm9kZS5wYXJlbnROb2RlOworICAgICAgICByZXR1cm4gYWRq
dXN0ZWROb2RlOworICAgIH0KKyAgICAgICAgCisgICAgZnVuY3Rpb24gdGVzdERpcmVjdFRvdWNo
ZXMoKQorICAgIHsKKyAgICAgICAgZGVidWcoJ1Rlc3Qgc29tZSBkaXJlY3QgaGl0cycpOworICAg
ICAgICAKKyAgICAgICAgYWRqdXN0ZWROb2RlID0gdGVzdFJvdW5kVG91Y2goMzAsIDIwLCA4KQor
ICAgICAgICBzaG91bGRCZUVxdWFsVG9TdHJpbmcoJ2FkanVzdGVkTm9kZS5pZCcsICcxJyk7Cisg
ICAgICAgIAorICAgICAgICBhZGp1c3RlZE5vZGUgPSB0ZXN0Um91bmRUb3VjaCgzMCwgNjAsIDgp
CisgICAgICAgIHNob3VsZEJlRXF1YWxUb1N0cmluZygnYWRqdXN0ZWROb2RlLmlkJywgJzInKTsK
KworICAgICAgICBhZGp1c3RlZE5vZGUgPSB0ZXN0Um91bmRUb3VjaCgxMjAsIDgwLCA4KQorICAg
ICAgICBzaG91bGRCZUVxdWFsVG9TdHJpbmcoJ2FkanVzdGVkTm9kZS5pZCcsICc0Jyk7CisKKyAg
ICAgICAgYWRqdXN0ZWROb2RlID0gdGVzdFJvdW5kVG91Y2goODAsIDE4MCwgOCkKKyAgICAgICAg
c2hvdWxkQmVFcXVhbFRvU3RyaW5nKCdhZGp1c3RlZE5vZGUuaWQnLCAnNicpOworICAgIH0KKyAg
ICAKKyAgICBmdW5jdGlvbiB0ZXN0RGlyZWN0TWlzc2VzKCkKKyAgICB7CisgICAgICAgIGRlYnVn
KCdUZXN0IGEgZmV3IGRpcmVjdCBtaXNzZXMnKTsKKyAgICAgICAgCisgICAgICAgIGFkanVzdGVk
Tm9kZSA9IHRlc3RSb3VuZFRvdWNoKDU2LCA2MCwgOCkKKyAgICAgICAgc2hvdWxkQmVFcXVhbFRv
U3RyaW5nKCdhZGp1c3RlZE5vZGUuaWQnLCAnJyk7CisgICAgICAgIAorICAgICAgICBhZGp1c3Rl
ZE5vZGUgPSB0ZXN0Um91bmRUb3VjaCgyMCwgMTYwLCA0KQorICAgICAgICBzaG91bGRCZUVxdWFs
VG9TdHJpbmcoJ2FkanVzdGVkTm9kZS5pZCcsICcnKTsKKworICAgIH0KKyAgICAKKyAgICBmdW5j
dGlvbiB0ZXN0SW5kaXJlY3RUb3VjaGVzKCkKKyAgICB7CisgICAgICAgIGRlYnVnKCdUZXN0IHNv
bWUgaW4tZGlyZWN0IGhpdHMnKTsKKyAgICAgICAgCisgICAgICAgIGFkanVzdGVkTm9kZSA9IHRl
c3RSb3VuZFRvdWNoKDU2LCA2MCwgMjApCisgICAgICAgIHNob3VsZEJlRXF1YWxUb1N0cmluZygn
YWRqdXN0ZWROb2RlLmlkJywgJzInKTsKKworICAgICAgICBhZGp1c3RlZE5vZGUgPSB0ZXN0Um91
bmRUb3VjaCg4NSwgODAsIDIwKQorICAgICAgICBzaG91bGRCZUVxdWFsVG9TdHJpbmcoJ2FkanVz
dGVkTm9kZS5pZCcsICczJyk7CisKKyAgICAgICAgYWRqdXN0ZWROb2RlID0gdGVzdFJvdW5kVG91
Y2goMTIwLCA2MCwgMjApCisgICAgICAgIHNob3VsZEJlRXF1YWxUb1N0cmluZygnYWRqdXN0ZWRO
b2RlLmlkJywgJzQnKTsKKworICAgICAgICBhZGp1c3RlZE5vZGUgPSB0ZXN0Um91bmRUb3VjaCg0
MCwgMTAwLCAyMCkKKyAgICAgICAgc2hvdWxkQmVFcXVhbFRvU3RyaW5nKCdhZGp1c3RlZE5vZGUu
aWQnLCAnNCcpOworCisgICAgICAgIGFkanVzdGVkTm9kZSA9IHRlc3RSb3VuZFRvdWNoKDIwLCAx
NjUsIDIwKQorICAgICAgICBzaG91bGRCZUVxdWFsVG9TdHJpbmcoJ2FkanVzdGVkTm9kZS5pZCcs
ICc2Jyk7CisKKyAgICB9CisgICAgCisgICAgZnVuY3Rpb24gcnVuVGVzdHMoKQorICAgIHsKKyAg
ICAgICAgaWYgKHdpbmRvdy5sYXlvdXRUZXN0Q29udHJvbGxlciAmJiB3aW5kb3cuaW50ZXJuYWxz
KSB7CisgICAgICAgICAgICBkZXNjcmlwdGlvbignVGVzdCB0b3VjaC1hZGp1c3RtZW50IG9uIGlu
bGluZSBsaW5rcy4gTWFraW5nIHN1cmUgd2UgY2FuIGhpdCBvdmVyIGxpbmUtYnJlYWtzLCBhbmQg
Y2FuIG1pc3Mgd2hlbiB0YXBwaW5nIGJldHdlZW4gcGFydHMgb2YgYSBsaW5lLWJyb2tlbiBsaW5r
LicpOworICAgICAgICAgICAgbGF5b3V0VGVzdENvbnRyb2xsZXIuZHVtcEFzVGV4dCgpOworICAg
ICAgICAgICAgbGF5b3V0VGVzdENvbnRyb2xsZXIud2FpdFVudGlsRG9uZSgpOworICAgICAgICAg
ICAgdGVzdERpcmVjdFRvdWNoZXMoKTsKKyAgICAgICAgICAgIHRlc3REaXJlY3RNaXNzZXMoKTsK
KyAgICAgICAgICAgIHRlc3RJbmRpcmVjdFRvdWNoZXMoKTsKKyAgICAgICAgICAgIGlzU3VjY2Vz
c2Z1bGx5UGFyc2VkKCk7CisgICAgICAgICAgICBsYXlvdXRUZXN0Q29udHJvbGxlci5ub3RpZnlE
b25lKCk7CisgICAgICAgIH0KKyAgICB9Cis8L3NjcmlwdD4KKzwvYm9keT4KKzwvaHRtbD4KXCBO
byBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCAyODRl
Mjc4Li4xN2ZjNTdmIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9n
CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxNCBAQAor
MjAxMi0wMi0yMyAgQWxsYW4gU2FuZGZlbGQgSmVuc2VuICA8YWxsYW4uamVuc2VuQG5va2lhLmNv
bT4KKworICAgICAgICBTZWxlY3QgYmVzdCB0YXJnZXQgZm9yIHRhcCBnZXN0dXJlLgorICAgICAg
ICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9Nzg4MDEKKworICAgICAg
ICBBZGRzIGEgZmVhdHVyZSBmbGFnIGZvciB0b3VjaCBhZGp1c3RtZW50LgorCisgICAgICAgIFJl
dmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogd3RmL1BsYXRmb3JtLmg6CisK
IDIwMTItMDItMjEgIEd1c3Rhdm8gTm9yb25oYSBTaWx2YSAgPGtvdkBkZWJpYW4ub3JnPiBhbmQg
Qm9iIFRyYWN5ICA8cmN0QGZydXMuY29tPgogCiAgICAgICAgIERvZXMgbm90IGJ1aWxkIG9uIElB
NjQsIFNQQVJDIGFuZCBBbHBoYQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3d0
Zi9QbGF0Zm9ybS5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3d0Zi9QbGF0Zm9ybS5oCmluZGV4
IGJmNmFkNmUuLmNkMjk3YmEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93dGYv
UGxhdGZvcm0uaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd3RmL1BsYXRmb3JtLmgKQEAg
LTEwMzYsNiArMTAzNiwxMCBAQAogI2VuZGlmCiAjZW5kaWYKIAorI2lmIFBMQVRGT1JNKFFUKQor
I2RlZmluZSBFTkFCTEVfVE9VQ0hfQURKVVNUTUVOVCAxCisjZW5kaWYKKwogI2lmICFkZWZpbmVk
KEVOQUJMRV9QQU5fU0NST0xMSU5HKSAmJiBPUyhXSU5ET1dTKQogI2RlZmluZSBFTkFCTEVfUEFO
X1NDUk9MTElORyAxCiAjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxv
ZyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCBiNjM0YmFmLi5hYTBkZmIxIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hh
bmdlTG9nCkBAIC0xLDMgKzEsODMgQEAKKzIwMTItMDItMjMgIEFsbGFuIFNhbmRmZWxkIEplbnNl
biAgPGFsbGFuLmplbnNlbkBub2tpYS5jb20+CisKKyAgICAgICAgU2VsZWN0IGJlc3QgdGFyZ2V0
IGZvciB0YXAgZ2VzdHVyZS4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTc4ODAxCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisK
KyAgICAgICAgVGhlIG5ldyBBUEkgaXMgYXZhaWxhYmxlIHRocm91Z2ggRXZlbnRIYW5kbGVyOjpu
b2RlRm9yVGFwR2VzdHVyZUF0VG91Y2hQb2ludCwgYnV0CisgICAgICAgIGltcGxlbWVudGF0aW9u
IGRldGFpbHMgaGF2ZSBiZWVuIHBsYWNlZCBpbiBwbGF0Zm9ybS9IaXRUZXN0UmVzdWx0TWV0cmlj
cy4KKyAgICAgICAgCisgICAgICAgIFRoZSBkZWZhdWx0IGhpdCBkZXRlY3Rpb24gaXMgcGVyZm9y
bWVkIGJ5IG1lYXN1cmluZyB0aGUgZGlzdGFuY2UgdG8gdGhlIGNlbnRlciAKKyAgICAgICAgbGlu
ZXMgb2YgdGhlIGFic29sdXRlIHJlY3RzIG9mIHRoZSBoaXQgbm9kZXMuIEFic29sdXRlIHJlY3Rz
IGFyZSB1c2VkIGluc3RlYWQKKyAgICAgICAgb2YgYm91bmRpbmcgcmVjdHMgdG8gbWFrZSBoaXQt
ZGV0ZWN0aW5nIGFnYWluc3QgbGlua3Mgb3ZlciBsaW5lIGJyZWFrcy4gRGlzdGFuY2UKKyAgICAg
ICAgdG8gY2VudGVyIGxpbmUgaXMgdXNlZCB0byBtYWtlIGl0IGVhc2llciB0byBoaXQgc21hbGwg
bGlua3MgbmV4dCB0byBsYXJnZSBsaW5rcy4KKyAgICAgICAgRm9yIGxpbmUtcmVjdHMgdGhlIGRp
c3RhbmNlIHRvIHRoZSBjZW50ZXItbGluZSBpcyBhIGJldHRlciBleHByZXNzaW9uIG9mIHRoZSBk
aXN0YW5jZQorICAgICAgICB0byBhIHJlY3RhbmdsZXMgY2VudGVyIHRoYW4gdGhlIGRpc3RhbmNl
IHRvIHRoZSBjZW50ZXItcG9pbnQuCisKKyAgICAgICAgVG8gc3VwcG9ydCB0aGUgZGlzdGFuY2Ug
Y2FsY3VsYXRhdGlvbiwgdGhpcyBwYXRjaCBhbHNvIGltcGxlbWVudCBhIGNvbnNpc3RlbnQgc2V0
IG9mIAorICAgICAgICBkaXN0YW5jZSBhbmQgYXJlYSBmdW5jdGlvbnMgZm9yIFJlY3QsIFBvaW50
IGFuZCBTaXplIGNsYXNzZXMuCisgICAgICAgIAorICAgICAgICBUZXN0czogdG91Y2hhZGp1c3Rt
ZW50L2V2ZW50LXRyaWdnZXJlZC13aWRnZXRzLmh0bWwKKyAgICAgICAgICAgICAgIHRvdWNoYWRq
dXN0bWVudC9uZXN0ZWQtdG91Y2guaHRtbAorICAgICAgICAgICAgICAgdG91Y2hhZGp1c3RtZW50
L3RvdWNoLWlubGluZXMuaHRtbAorCisgICAgICAgICogVGFyZ2V0LnByaToKKyAgICAgICAgKiBw
YWdlL0V2ZW50SGFuZGxlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpFdmVudEhhbmRsZXI6Omhh
bmRsZUdlc3R1cmVFdmVudCk6CisgICAgICAgIChXZWJDb3JlOjpFdmVudEhhbmRsZXI6OmhhbmRs
ZUdlc3R1cmVUYXApOgorICAgICAgICAoV2ViQ29yZTo6RXZlbnRIYW5kbGVyOjpoYW5kbGVHZXN0
dXJlU2Nyb2xsVXBkYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkV2ZW50SGFuZGxlcjo6bm9kZUZv
clRhcEdlc3R1cmVBdFRvdWNoUG9pbnQpOgorICAgICAgICAqIHBhZ2UvRXZlbnRIYW5kbGVyLmg6
CisgICAgICAgICogcGxhdGZvcm0vVG91Y2hBZGp1c3RtZW50LmNwcDogQWRkZWQuCisgICAgICAg
IChXZWJDb3JlOjpUb3VjaEFkanVzdG1lbnQ6OkhpdFRlc3RRdWFkOjpIaXRUZXN0UXVhZCk6Cisg
ICAgICAgIChXZWJDb3JlOjpUb3VjaEFkanVzdG1lbnQ6OkhpdFRlc3RRdWFkOjpub2RlKToKKyAg
ICAgICAgKFdlYkNvcmU6OlRvdWNoQWRqdXN0bWVudDo6SGl0VGVzdFF1YWQ6OnF1YWQpOgorICAg
ICAgICAoV2ViQ29yZTo6VG91Y2hBZGp1c3RtZW50OjpIaXRUZXN0UXVhZDo6Ym91bmRpbmdCb3gp
OgorICAgICAgICAoV2ViQ29yZTo6VG91Y2hBZGp1c3RtZW50Ojpub2RlUmVzcG9uZHNUb1RhcEdl
c3R1cmUpOgorICAgICAgICAoV2ViQ29yZTo6VG91Y2hBZGp1c3RtZW50OjphcHBlbmRBYnNvbHV0
ZVF1YWRzRm9yTm9kZVRvSGl0TGlzdCk6CisgICAgICAgIChXZWJDb3JlOjpUb3VjaEFkanVzdG1l
bnQ6OmNvbXBpbGVIaXRMaXN0KToKKyAgICAgICAgKFdlYkNvcmU6OlRvdWNoQWRqdXN0bWVudDo6
ZGlzdGFuY2VUb0hpdFRlc3RRdWFkKToKKyAgICAgICAgKFdlYkNvcmU6OlRvdWNoQWRqdXN0bWVu
dDo6aW50ZXJzZWN0aW9uV2l0aEhpdFRlc3RRdWFkKToKKyAgICAgICAgKFdlYkNvcmU6OlRvdWNo
QWRqdXN0bWVudDo6ZmluZE5vZGVXaXRoTG93ZXN0TWV0cmljKToKKyAgICAgICAgKFdlYkNvcmU6
OlRvdWNoQWRqdXN0bWVudDo6ZmluZE5vZGVXaXRoSGlnaGVzdE1ldHJpYyk6CisgICAgICAgIChX
ZWJDb3JlOjpmaW5kQmVzdENhbmRpZGF0ZUZvckdlc3R1cmVUYXApOgorICAgICAgICAqIHBsYXRm
b3JtL1RvdWNoQWRqdXN0bWVudC5oOiBBZGRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGlj
cy9GbG9hdFBvaW50Lmg6CisgICAgICAgIChXZWJDb3JlOjpGbG9hdFBvaW50OjpGbG9hdFBvaW50
KToKKyAgICAgICAgKFdlYkNvcmU6OkZsb2F0UG9pbnQ6OmRpc3RhbmNlVG9Qb2ludCk6CisgICAg
ICAgIChXZWJDb3JlOjpGbG9hdFBvaW50OjpkaXN0YW5jZVNxdWFyZWRUb1BvaW50KToKKyAgICAg
ICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9GbG9hdFF1YWQuaDoKKyAgICAgICAgKFdlYkNvcmU6OkZs
b2F0UXVhZDo6Y2VudGVyKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9GbG9hdFJlY3Qu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6ZGlzdGFuY2VUb0ludGVydmFsKToKKyAgICAgICAgKFdl
YkNvcmU6OkZsb2F0UmVjdDo6ZGlmZmVyZW5jZVRvUG9pbnQpOgorICAgICAgICAoV2ViQ29yZTo6
RmxvYXRSZWN0OjpkaXN0YW5jZVRvUG9pbnQpOgorICAgICAgICAoV2ViQ29yZTo6RmxvYXRSZWN0
OjpkaWZmZXJlbmNlRnJvbUNlbnRlckxpbmVUb1BvaW50KToKKyAgICAgICAgKiBwbGF0Zm9ybS9n
cmFwaGljcy9GbG9hdFJlY3QuaDoKKyAgICAgICAgKFdlYkNvcmU6OkZsb2F0UmVjdDo6ZGlzdGFu
Y2VTcXVhcmVkVG9Qb2ludCk6CisgICAgICAgIChXZWJDb3JlOjpGbG9hdFJlY3Q6OmRpc3RhbmNl
U3F1YXJlZEZyb21DZW50ZXJMaW5lVG9Qb2ludCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhp
Y3MvRmxvYXRTaXplLmg6CisgICAgICAgIChXZWJDb3JlOjpGbG9hdFNpemU6OmFyZWEpOgorICAg
ICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0ludFBvaW50Lmg6CisgICAgICAgIChXZWJDb3JlOjpJ
bnRQb2ludDo6bGVuZ3RoU3F1YXJlZCk6CisgICAgICAgIChXZWJDb3JlOjpJbnRQb2ludDo6ZGlz
dGFuY2VTcXVhcmVkVG9Qb2ludCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvSW50UmVj
dC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpkaXN0YW5jZVRvSW50ZXJ2YWwpOgorICAgICAgICAo
V2ViQ29yZTo6SW50UmVjdDo6ZGlmZmVyZW5jZVRvUG9pbnQpOgorICAgICAgICAoV2ViQ29yZTo6
SW50UmVjdDo6ZGlmZmVyZW5jZUZyb21DZW50ZXJMaW5lVG9Qb2ludCk6CisgICAgICAgICogcGxh
dGZvcm0vZ3JhcGhpY3MvSW50UmVjdC5oOgorICAgICAgICAoV2ViQ29yZTo6SW50UmVjdDo6ZGlz
dGFuY2VTcXVhcmVkVG9Qb2ludCk6CisgICAgICAgIChXZWJDb3JlOjpJbnRSZWN0OjpkaXN0YW5j
ZVNxdWFyZWRGcm9tQ2VudGVyTGluZVRvUG9pbnQpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBo
aWNzL0ludFNpemUuaDoKKyAgICAgICAgKFdlYkNvcmU6OkludFNpemU6OmFyZWEpOgorICAgICAg
ICAoV2ViQ29yZTo6SW50U2l6ZTo6ZGlhZ29uYWxMZW5ndGhTcXVhcmVkKToKKyAgICAgICAgKiB0
ZXN0aW5nL0ludGVybmFscy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJbnRlcm5hbHM6OnRvdWNo
UG9zaXRpb25BZGp1c3RlZFRvQmVzdE5vZGVGb3JHZXN0dXJlVGFwKToKKyAgICAgICAgKFdlYkNv
cmU6OkludGVybmFsczo6dG91Y2hOb2RlQWRqdXN0ZWRUb0Jlc3ROb2RlRm9yR2VzdHVyZVRhcCk6
CisgICAgICAgICogdGVzdGluZy9JbnRlcm5hbHMuaDoKKyAgICAgICAgKiB0ZXN0aW5nL0ludGVy
bmFscy5pZGw6CisKIDIwMTItMDItMjEgIENzYWJhIE9zenRyb2dvbsOhYyAgPG9zc3lAd2Via2l0
Lm9yZz4KIAogICAgICAgICBSZW1vdmUgc3R5bGVzaGVldCBwb2ludGVyIGZyb20gU3R5bGVQcm9w
ZXJ0eVNldApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvVGFyZ2V0LnByaSBiL1NvdXJjZS9X
ZWJDb3JlL1RhcmdldC5wcmkKaW5kZXggMDQxZjg2OC4uNjZjNjBlZiAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvVGFyZ2V0LnByaQorKysgYi9Tb3VyY2UvV2ViQ29yZS9UYXJnZXQucHJpCkBA
IC0xMDUwLDYgKzEwNTAsNyBAQCBTT1VSQ0VTICs9IFwKICAgICBwbGF0Zm9ybS9GaWxlU3lzdGVt
LmNwcCBcCiAgICAgcGxhdGZvcm0vR2VvbG9jYXRpb25TZXJ2aWNlLmNwcCBcCiAgICAgcGxhdGZv
cm0vSGlzdG9ncmFtU3VwcG9ydC5jcHAgXAorICAgIHBsYXRmb3JtL1RvdWNoQWRqdXN0bWVudC5j
cHAgXAogICAgIHBsYXRmb3JtL2ltYWdlLWRlY29kZXJzL3F0L0ltYWdlRnJhbWVRdC5jcHAgXAog
ICAgIHBsYXRmb3JtL2dyYXBoaWNzL0ZvbnREZXNjcmlwdGlvbi5jcHAgXAogICAgIHBsYXRmb3Jt
L2dyYXBoaWNzL0ZvbnRGYWxsYmFja0xpc3QuY3BwIFwKQEAgLTIxMDYsNiArMjEwNyw3IEBAIEhF
QURFUlMgKz0gXAogICAgIHBsYXRmb3JtL0ZpbGVTeXN0ZW0uaCBcCiAgICAgcGxhdGZvcm0vR2Vv
bG9jYXRpb25TZXJ2aWNlLmggXAogICAgIHBsYXRmb3JtL0hpc3RvZ3JhbVN1cHBvcnQuaCBcCisg
ICAgcGxhdGZvcm0vVG91Y2hBZGp1c3RtZW50LmggXAogICAgIHBsYXRmb3JtL2ltYWdlLWRlY29k
ZXJzL0ltYWdlRGVjb2Rlci5oIFwKICAgICBwbGF0Zm9ybS9tb2NrL0RldmljZU9yaWVudGF0aW9u
Q2xpZW50TW9jay5oIFwKICAgICBwbGF0Zm9ybS9tb2NrL0dlb2xvY2F0aW9uQ2xpZW50TW9jay5j
cHAgXApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGFnZS9FdmVudEhhbmRsZXIuY3BwIGIv
U291cmNlL1dlYkNvcmUvcGFnZS9FdmVudEhhbmRsZXIuY3BwCmluZGV4IDg1MjBmYzYuLjFmNTY4
N2MgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRXZlbnRIYW5kbGVyLmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9wYWdlL0V2ZW50SGFuZGxlci5jcHAKQEAgLTg4LDYgKzg4LDEwIEBA
CiAjaW5jbHVkZSAiUGxhdGZvcm1HZXN0dXJlRXZlbnQuaCIKICNlbmRpZgogCisjaWYgRU5BQkxF
KFRPVUNIX0FESlVTVE1FTlQpCisjaW5jbHVkZSAiVG91Y2hBZGp1c3RtZW50LmgiCisjZW5kaWYK
KwogI2lmIEVOQUJMRShTVkcpCiAjaW5jbHVkZSAiU1ZHRG9jdW1lbnQuaCIKICNpbmNsdWRlICJT
VkdFbGVtZW50SW5zdGFuY2UuaCIKQEAgLTIzNDIsMjUgKzIzNDYsMTAgQEAgYm9vbCBFdmVudEhh
bmRsZXI6OmhhbmRsZUdlc3R1cmVFdmVudChjb25zdCBQbGF0Zm9ybUdlc3R1cmVFdmVudCYgZ2Vz
dHVyZUV2ZW50KQogICAgIHN3aXRjaCAoZ2VzdHVyZUV2ZW50LnR5cGUoKSkgewogICAgIGNhc2Ug
UGxhdGZvcm1FdmVudDo6R2VzdHVyZVRhcERvd246CiAgICAgICAgIGJyZWFrOwotICAgIGNhc2Ug
UGxhdGZvcm1FdmVudDo6R2VzdHVyZVRhcDogewotICAgICAgICAvLyBGSVhNRTogUmVmYWN0b3Ig
dGhpcyBjb2RlIHRvIG5vdCBoaXQgdGVzdCBtdWx0aXBsZSB0aW1lcyBvbmNlIGhpdCB0ZXN0aW5n
IGhhcyBiZWVuIGNvcnJlY3RlZCBhcyBzdWdnZXN0ZWQgYWJvdmUuCi0gICAgICAgIFBsYXRmb3Jt
TW91c2VFdmVudCBmYWtlTW91c2VNb3ZlKGdlc3R1cmVFdmVudC5wb3NpdGlvbigpLCBnZXN0dXJl
RXZlbnQuZ2xvYmFsUG9zaXRpb24oKSwgTm9CdXR0b24sIFBsYXRmb3JtRXZlbnQ6Ok1vdXNlTW92
ZWQsIC8qIGNsaWNrQ291bnQgKi8gMSwgZ2VzdHVyZUV2ZW50LnNoaWZ0S2V5KCksIGdlc3R1cmVF
dmVudC5jdHJsS2V5KCksIGdlc3R1cmVFdmVudC5hbHRLZXkoKSwgZ2VzdHVyZUV2ZW50Lm1ldGFL
ZXkoKSwgZ2VzdHVyZUV2ZW50LnRpbWVzdGFtcCgpKTsKLSAgICAgICAgUGxhdGZvcm1Nb3VzZUV2
ZW50IGZha2VNb3VzZURvd24oZ2VzdHVyZUV2ZW50LnBvc2l0aW9uKCksIGdlc3R1cmVFdmVudC5n
bG9iYWxQb3NpdGlvbigpLCBMZWZ0QnV0dG9uLCBQbGF0Zm9ybUV2ZW50OjpNb3VzZVByZXNzZWQs
IC8qIGNsaWNrQ291bnQgKi8gMSwgZ2VzdHVyZUV2ZW50LnNoaWZ0S2V5KCksIGdlc3R1cmVFdmVu
dC5jdHJsS2V5KCksIGdlc3R1cmVFdmVudC5hbHRLZXkoKSwgZ2VzdHVyZUV2ZW50Lm1ldGFLZXko
KSwgZ2VzdHVyZUV2ZW50LnRpbWVzdGFtcCgpKTsKLSAgICAgICAgUGxhdGZvcm1Nb3VzZUV2ZW50
IGZha2VNb3VzZVVwKGdlc3R1cmVFdmVudC5wb3NpdGlvbigpLCBnZXN0dXJlRXZlbnQuZ2xvYmFs
UG9zaXRpb24oKSwgTGVmdEJ1dHRvbiwgUGxhdGZvcm1FdmVudDo6TW91c2VSZWxlYXNlZCwgLyog
Y2xpY2tDb3VudCAqLyAxLCBnZXN0dXJlRXZlbnQuc2hpZnRLZXkoKSwgZ2VzdHVyZUV2ZW50LmN0
cmxLZXkoKSwgZ2VzdHVyZUV2ZW50LmFsdEtleSgpLCBnZXN0dXJlRXZlbnQubWV0YUtleSgpLCBn
ZXN0dXJlRXZlbnQudGltZXN0YW1wKCkpOwotICAgICAgICBtb3VzZU1vdmVkKGZha2VNb3VzZU1v
dmUpOwotICAgICAgICBoYW5kbGVNb3VzZVByZXNzRXZlbnQoZmFrZU1vdXNlRG93bik7Ci0gICAg
ICAgIGhhbmRsZU1vdXNlUmVsZWFzZUV2ZW50KGZha2VNb3VzZVVwKTsKLSAgICAgICAgcmV0dXJu
IHRydWU7Ci0gICAgfQotICAgIGNhc2UgUGxhdGZvcm1FdmVudDo6R2VzdHVyZVNjcm9sbFVwZGF0
ZTogewotICAgICAgICBjb25zdCBmbG9hdCB0aWNrRGl2aXNvciA9IChmbG9hdClXaGVlbEV2ZW50
Ojp0aWNrTXVsdGlwbGllcjsKLSAgICAgICAgLy8gRklYTUU6IFJlcGxhY2UgdGhpcyBpbnRlcmlt
IGltcGxlbWVudGF0aW9uIG9uY2UgdGhlIGFib3ZlIGZpeG1lIGhhcyBiZWVuIGFkZHJlc3NlZC4K
LSAgICAgICAgSW50UG9pbnQgcG9pbnQoZ2VzdHVyZUV2ZW50LnBvc2l0aW9uKCkueCgpLCBnZXN0
dXJlRXZlbnQucG9zaXRpb24oKS55KCkpOwotICAgICAgICBJbnRQb2ludCBnbG9iYWxQb2ludChn
ZXN0dXJlRXZlbnQuZ2xvYmFsUG9zaXRpb24oKS54KCksIGdlc3R1cmVFdmVudC5nbG9iYWxQb3Np
dGlvbigpLnkoKSk7Ci0gICAgICAgIFBsYXRmb3JtV2hlZWxFdmVudCBzeW50aGV0aWNXaGVlbEV2
ZW50KHBvaW50LCBnbG9iYWxQb2ludCwgZ2VzdHVyZUV2ZW50LmRlbHRhWCgpLCBnZXN0dXJlRXZl
bnQuZGVsdGFZKCksIGdlc3R1cmVFdmVudC5kZWx0YVgoKSAvIHRpY2tEaXZpc29yLCBnZXN0dXJl
RXZlbnQuZGVsdGFZKCkgLyB0aWNrRGl2aXNvciwgU2Nyb2xsQnlQaXhlbFdoZWVsRXZlbnQsIGdl
c3R1cmVFdmVudC5zaGlmdEtleSgpLCBnZXN0dXJlRXZlbnQuY3RybEtleSgpLCBnZXN0dXJlRXZl
bnQuYWx0S2V5KCksIGdlc3R1cmVFdmVudC5tZXRhS2V5KCkpOwotICAgICAgICBoYW5kbGVXaGVl
bEV2ZW50KHN5bnRoZXRpY1doZWVsRXZlbnQpOwotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9
CisgICAgY2FzZSBQbGF0Zm9ybUV2ZW50OjpHZXN0dXJlVGFwOgorICAgICAgICByZXR1cm4gaGFu
ZGxlR2VzdHVyZVRhcChnZXN0dXJlRXZlbnQpOworICAgIGNhc2UgUGxhdGZvcm1FdmVudDo6R2Vz
dHVyZVNjcm9sbFVwZGF0ZToKKyAgICAgICAgcmV0dXJuIGhhbmRsZUdlc3R1cmVTY3JvbGxVcGRh
dGUoZ2VzdHVyZUV2ZW50KTsKICAgICBjYXNlIFBsYXRmb3JtRXZlbnQ6Okdlc3R1cmVEb3VibGVU
YXA6CiAgICAgY2FzZSBQbGF0Zm9ybUV2ZW50OjpHZXN0dXJlU2Nyb2xsQmVnaW46CiAgICAgY2Fz
ZSBQbGF0Zm9ybUV2ZW50OjpHZXN0dXJlU2Nyb2xsRW5kOgpAQCAtMjM3MCw2ICsyMzU5LDU3IEBA
IGJvb2wgRXZlbnRIYW5kbGVyOjpoYW5kbGVHZXN0dXJlRXZlbnQoY29uc3QgUGxhdGZvcm1HZXN0
dXJlRXZlbnQmIGdlc3R1cmVFdmVudCkKICAgICB9CiAgICAgcmV0dXJuIHRydWU7CiB9CisKK2Jv
b2wgRXZlbnRIYW5kbGVyOjpoYW5kbGVHZXN0dXJlVGFwKGNvbnN0IFBsYXRmb3JtR2VzdHVyZUV2
ZW50JiBnZXN0dXJlRXZlbnQpCit7CisgICAgTGF5b3V0UG9pbnQgYWRqdXN0ZWRQb2ludCA9IGdl
c3R1cmVFdmVudC5wb3NpdGlvbigpOworICAgIC8vIEZJWE1FOiBSZWZhY3RvciB0aGlzIGNvZGUg
dG8gbm90IGhpdCB0ZXN0IG11bHRpcGxlIHRpbWVzIG9uY2UgaGl0IHRlc3RpbmcKKyAgICAvLyBo
YXMgYmVlbiBjb3JyZWN0ZWQgYXMgc3VnZ2VzdGVkIGFib3ZlIGluIGhhbmRsZUdlc3R1cmVFdmVu
dCgpLgorICAgICNpZiBFTkFCTEUoVE9VQ0hfQURKVVNUTUVOVCkKKyAgICBpZiAoIWdlc3R1cmVF
dmVudC5hcmVhKCkuaXNFbXB0eSgpKSB7CisgICAgICAgIE5vZGUqIHRhcmdldE5vZGUgPSAwOwor
ICAgICAgICAvLyBGb3Igbm93IHdlIHVzZSB0aGUgYWRqdXN0ZWQgcG9zaXRpb24gdG8gZW5zdXJl
IHRoZSBsYXRlciByZWR1bmRhbnQgaGl0LXRlc3RzIGhpdHMgdGhlIHJpZ2h0IG5vZGUuCisgICAg
ICAgIG5vZGVGb3JUYXBHZXN0dXJlQXRUb3VjaFBvaW50KGdlc3R1cmVFdmVudC5wb3NpdGlvbigp
LCBJbnRTaXplKGdlc3R1cmVFdmVudC5hcmVhKCkud2lkdGgoKSAvIDIsIGdlc3R1cmVFdmVudC5h
cmVhKCkuaGVpZ2h0KCkgLyAyKSwgYWRqdXN0ZWRQb2ludCwgdGFyZ2V0Tm9kZSk7CisgICAgICAg
IGlmICghdGFyZ2V0Tm9kZSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisgICAg
I2VuZGlmCisKKyAgICBib29sIGRlZmF1bHRQcmV2ZW50ZWQgPSBmYWxzZTsKKyAgICBQbGF0Zm9y
bU1vdXNlRXZlbnQgZmFrZU1vdXNlTW92ZShhZGp1c3RlZFBvaW50LCBnZXN0dXJlRXZlbnQuZ2xv
YmFsUG9zaXRpb24oKSwgTm9CdXR0b24sIFBsYXRmb3JtRXZlbnQ6Ok1vdXNlTW92ZWQsIC8qIGNs
aWNrQ291bnQgKi8gMSwgZ2VzdHVyZUV2ZW50LnNoaWZ0S2V5KCksIGdlc3R1cmVFdmVudC5jdHJs
S2V5KCksIGdlc3R1cmVFdmVudC5hbHRLZXkoKSwgZ2VzdHVyZUV2ZW50Lm1ldGFLZXkoKSwgZ2Vz
dHVyZUV2ZW50LnRpbWVzdGFtcCgpKTsKKyAgICBQbGF0Zm9ybU1vdXNlRXZlbnQgZmFrZU1vdXNl
RG93bihhZGp1c3RlZFBvaW50LCBnZXN0dXJlRXZlbnQuZ2xvYmFsUG9zaXRpb24oKSwgTGVmdEJ1
dHRvbiwgUGxhdGZvcm1FdmVudDo6TW91c2VQcmVzc2VkLCAvKiBjbGlja0NvdW50ICovIDEsIGdl
c3R1cmVFdmVudC5zaGlmdEtleSgpLCBnZXN0dXJlRXZlbnQuY3RybEtleSgpLCBnZXN0dXJlRXZl
bnQuYWx0S2V5KCksIGdlc3R1cmVFdmVudC5tZXRhS2V5KCksIGdlc3R1cmVFdmVudC50aW1lc3Rh
bXAoKSk7CisgICAgUGxhdGZvcm1Nb3VzZUV2ZW50IGZha2VNb3VzZVVwKGFkanVzdGVkUG9pbnQs
IGdlc3R1cmVFdmVudC5nbG9iYWxQb3NpdGlvbigpLCBMZWZ0QnV0dG9uLCBQbGF0Zm9ybUV2ZW50
OjpNb3VzZVJlbGVhc2VkLCAvKiBjbGlja0NvdW50ICovIDEsIGdlc3R1cmVFdmVudC5zaGlmdEtl
eSgpLCBnZXN0dXJlRXZlbnQuY3RybEtleSgpLCBnZXN0dXJlRXZlbnQuYWx0S2V5KCksIGdlc3R1
cmVFdmVudC5tZXRhS2V5KCksIGdlc3R1cmVFdmVudC50aW1lc3RhbXAoKSk7CisgICAgbW91c2VN
b3ZlZChmYWtlTW91c2VNb3ZlKTsKKyAgICBkZWZhdWx0UHJldmVudGVkIHw9IGhhbmRsZU1vdXNl
UHJlc3NFdmVudChmYWtlTW91c2VEb3duKTsKKyAgICBkZWZhdWx0UHJldmVudGVkIHw9IGhhbmRs
ZU1vdXNlUmVsZWFzZUV2ZW50KGZha2VNb3VzZVVwKTsKKyAgICByZXR1cm4gZGVmYXVsdFByZXZl
bnRlZDsKK30KKworYm9vbCBFdmVudEhhbmRsZXI6OmhhbmRsZUdlc3R1cmVTY3JvbGxVcGRhdGUo
Y29uc3QgUGxhdGZvcm1HZXN0dXJlRXZlbnQmIGdlc3R1cmVFdmVudCkKK3sKKyAgICBjb25zdCBm
bG9hdCB0aWNrRGl2aXNvciA9IChmbG9hdClXaGVlbEV2ZW50Ojp0aWNrTXVsdGlwbGllcjsKKyAg
ICAvLyBGSVhNRTogUmVwbGFjZSB0aGlzIGludGVyaW0gaW1wbGVtZW50YXRpb24gb25jZSB0aGUg
YWJvdmUgZml4bWUgaW4gaGFuZGxlR2VzdHVyZUV2ZW50KCkgaGFzIGJlZW4gYWRkcmVzc2VkLgor
ICAgIGJvb2wgZGVmYXVsdFByZXZlbnRlZCA9IGZhbHNlOworICAgIEludFBvaW50IHBvaW50KGdl
c3R1cmVFdmVudC5wb3NpdGlvbigpLngoKSwgZ2VzdHVyZUV2ZW50LnBvc2l0aW9uKCkueSgpKTsK
KyAgICBJbnRQb2ludCBnbG9iYWxQb2ludChnZXN0dXJlRXZlbnQuZ2xvYmFsUG9zaXRpb24oKS54
KCksIGdlc3R1cmVFdmVudC5nbG9iYWxQb3NpdGlvbigpLnkoKSk7CisgICAgUGxhdGZvcm1XaGVl
bEV2ZW50IHN5bnRoZXRpY1doZWVsRXZlbnQocG9pbnQsIGdsb2JhbFBvaW50LCBnZXN0dXJlRXZl
bnQuZGVsdGFYKCksIGdlc3R1cmVFdmVudC5kZWx0YVkoKSwgZ2VzdHVyZUV2ZW50LmRlbHRhWCgp
IC8gdGlja0Rpdmlzb3IsIGdlc3R1cmVFdmVudC5kZWx0YVkoKSAvIHRpY2tEaXZpc29yLCBTY3Jv
bGxCeVBpeGVsV2hlZWxFdmVudCwgZ2VzdHVyZUV2ZW50LnNoaWZ0S2V5KCksIGdlc3R1cmVFdmVu
dC5jdHJsS2V5KCksIGdlc3R1cmVFdmVudC5hbHRLZXkoKSwgZ2VzdHVyZUV2ZW50Lm1ldGFLZXko
KSk7CisgICAgZGVmYXVsdFByZXZlbnRlZCB8PSBoYW5kbGVXaGVlbEV2ZW50KHN5bnRoZXRpY1do
ZWVsRXZlbnQpOworICAgIHJldHVybiBkZWZhdWx0UHJldmVudGVkOworfQorCisjaWYgRU5BQkxF
KFRPVUNIX0FESlVTVE1FTlQpCit2b2lkIEV2ZW50SGFuZGxlcjo6bm9kZUZvclRhcEdlc3R1cmVB
dFRvdWNoUG9pbnQoY29uc3QgSW50UG9pbnQmIHRvdWNoQ2VudGVyLCBjb25zdCBJbnRTaXplJiB0
b3VjaFJhZGl1cywgSW50UG9pbnQmIHRhcmdldFBvaW50LCBOb2RlKiYgdGFyZ2V0Tm9kZSkKK3sK
KyAgICBIaXRUZXN0UmVxdWVzdDo6SGl0VGVzdFJlcXVlc3RUeXBlIGhpdFR5cGUgPSBIaXRUZXN0
UmVxdWVzdDo6UmVhZE9ubHkgfCBIaXRUZXN0UmVxdWVzdDo6QWN0aXZlOworICAgIEludFJlY3Qg
dG91Y2hSZWN0KHRvdWNoQ2VudGVyIC0gdG91Y2hSYWRpdXMsIEludFNpemUodG91Y2hSYWRpdXMu
d2lkdGgoKSAqIDIsIHRvdWNoUmFkaXVzLmhlaWdodCgpICogMikpOworICAgIHRhcmdldE5vZGUg
PSAwOworCisgICAgSGl0VGVzdFJlc3VsdCByZXN1bHQgPSBoaXRUZXN0UmVzdWx0QXRQb2ludCh0
b3VjaENlbnRlciwgLyphbGxvd1NoYWRvd0NvbnRlbnQqLyBmYWxzZSwgLyppZ25vcmVDbGlwcGlu
ZyovIGZhbHNlLCBEb250SGl0VGVzdFNjcm9sbGJhcnMsIGhpdFR5cGUsIHRvdWNoUmFkaXVzKTsK
KworICAgIGZpbmRCZXN0Q2FuZGlkYXRlRm9yR2VzdHVyZVRhcCh0YXJnZXROb2RlLCB0YXJnZXRQ
b2ludCwgdG91Y2hDZW50ZXIsIHRvdWNoUmVjdCwgcmVzdWx0KTsKK30KKyNlbmRpZgorCiAjZW5k
aWYKIAogI2lmIEVOQUJMRShDT05URVhUX01FTlVTKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcGFnZS9FdmVudEhhbmRsZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRXZlbnRIYW5kbGVy
LmgKaW5kZXggNzczM2EwZi4uODZlMTNjYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGFn
ZS9FdmVudEhhbmRsZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL0V2ZW50SGFuZGxlci5o
CkBAIC0zMSw2ICszMSw3IEBACiAjaW5jbHVkZSAiRm9jdXNEaXJlY3Rpb24uaCIKICNpbmNsdWRl
ICJIaXRUZXN0UmVxdWVzdC5oIgogI2luY2x1ZGUgIlBsYXRmb3JtTW91c2VFdmVudC5oIgorI2lu
Y2x1ZGUgIlBsYXRmb3JtVG91Y2hQb2ludC5oIgogI2luY2x1ZGUgIlNjcm9sbFR5cGVzLmgiCiAj
aW5jbHVkZSAiVGV4dEV2ZW50SW5wdXRUeXBlLmgiCiAjaW5jbHVkZSAiVGV4dEdyYW51bGFyaXR5
LmgiCkBAIC0xNjIsNiArMTYzLDEyIEBAIHB1YmxpYzoKIAogI2lmIEVOQUJMRShHRVNUVVJFX0VW
RU5UUykKICAgICBib29sIGhhbmRsZUdlc3R1cmVFdmVudChjb25zdCBQbGF0Zm9ybUdlc3R1cmVF
dmVudCYpOworICAgIGJvb2wgaGFuZGxlR2VzdHVyZVRhcChjb25zdCBQbGF0Zm9ybUdlc3R1cmVF
dmVudCYpOworICAgIGJvb2wgaGFuZGxlR2VzdHVyZVNjcm9sbFVwZGF0ZShjb25zdCBQbGF0Zm9y
bUdlc3R1cmVFdmVudCYpOworI2VuZGlmCisKKyNpZiBFTkFCTEUoVE9VQ0hfQURKVVNUTUVOVCkK
KyAgICB2b2lkIG5vZGVGb3JUYXBHZXN0dXJlQXRUb3VjaFBvaW50KGNvbnN0IEludFBvaW50JiB0
b3VjaENlbnRlciwgY29uc3QgSW50U2l6ZSYgdG91Y2hSYWRpdXMsIEludFBvaW50JiB0YXJnZXRQ
b2ludCwgTm9kZSomIHRhcmdldE5vZGUpOwogI2VuZGlmCiAKICNpZiBFTkFCTEUoQ09OVEVYVF9N
RU5VUykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1RvdWNoQWRqdXN0bWVu
dC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9Ub3VjaEFkanVzdG1lbnQuY3BwCm5ldyBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJmMWFiNGMKLS0tIC9kZXYvbnVsbAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9Ub3VjaEFkanVzdG1lbnQuY3BwCkBAIC0wLDAgKzEs
MjMzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIE5va2lhIENvcnBvcmF0aW9uIGFuZC9v
ciBpdHMgc3Vic2lkaWFyeSgtaWVzKQorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3
YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0
aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFz
IHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZl
cnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVy
c2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhh
dCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91
dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBH
ZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3Vs
ZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMg
TGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5H
LkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24s
IEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAy
MTEwLTEzMDEsIFVTQS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisKKyNpbmNsdWRlICJU
b3VjaEFkanVzdG1lbnQuaCIKKworI2luY2x1ZGUgIkNvbnRhaW5lck5vZGUuaCIKKyNpbmNsdWRl
ICJGbG9hdFBvaW50LmgiCisjaW5jbHVkZSAiRmxvYXRRdWFkLmgiCisjaW5jbHVkZSAiSGl0VGVz
dFJlc3VsdC5oIgorI2luY2x1ZGUgIkludFBvaW50LmgiCisjaW5jbHVkZSAiSW50U2l6ZS5oIgor
I2luY2x1ZGUgIk5vZGUuaCIKKyNpbmNsdWRlICJSZW5kZXJPYmplY3QuaCIKKyNpbmNsdWRlICJS
ZW5kZXJTdHlsZS5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK25hbWVzcGFjZSBUb3VjaEFk
anVzdG1lbnQgeworCitjbGFzcyBIaXRUZXN0UXVhZCB7CitwdWJsaWM6CisgICAgSGl0VGVzdFF1
YWQoTm9kZSogbm9kZSwgY29uc3QgRmxvYXRRdWFkJiBxdWFkKSA6IG1fbm9kZShub2RlKSwgbV9x
dWFkKHF1YWQpIHsgfQorCisgICAgTm9kZSogbm9kZSgpIGNvbnN0IHsgcmV0dXJuIG1fbm9kZTsg
fQorICAgIEZsb2F0UXVhZCBxdWFkKCkgY29uc3QgeyByZXR1cm4gbV9xdWFkOyB9CisgICAgTGF5
b3V0UmVjdCBib3VuZGluZ0JveCgpIGNvbnN0IHsgcmV0dXJuIG1fcXVhZC5lbmNsb3NpbmdCb3Vu
ZGluZ0JveCgpOyB9CisKK3ByaXZhdGU6CisgICAgTm9kZSogbV9ub2RlOworICAgIEZsb2F0UXVh
ZCBtX3F1YWQ7Cit9OworCit0eXBlZGVmIFZlY3RvcjxIaXRUZXN0UXVhZD4gSGl0TGlzdDsKK3R5
cGVkZWYgYm9vbCAoKk5vZGVGaWx0ZXIpKE5vZGUqKTsKK3R5cGVkZWYgZmxvYXQgKCpNZXRyaWMp
KGNvbnN0IExheW91dFBvaW50JiwgY29uc3QgTGF5b3V0UmVjdCYsIGNvbnN0IEhpdFRlc3RRdWFk
Jik7CisKKy8vIFRha2VzIG5vbi1jb25zdCBOb2RlKiBiZWNhdXNlIGlzQ29udGVudEVkaXRhYmxl
IGlzIGEgbm9uLWNvbnN0IGZ1bmN0aW9uLgorYm9vbCBub2RlUmVzcG9uZHNUb1RhcEdlc3R1cmUo
Tm9kZSogbm9kZSkKK3sKKyAgICBpZiAobm9kZS0+aXNMaW5rKCkKKyAgICAgICAgfHwgbm9kZS0+
aXNDb250ZW50RWRpdGFibGUoKQorICAgICAgICB8fCBub2RlLT5pc01vdXNlRm9jdXNhYmxlKCkp
CisgICAgICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQgaGFzRGVmYXVsdEV2ZW50SGFuZGxlciBhbmQg
dXNlIHRoYXQgaW5zdGVhZCBvZiBhbGwgb2YgdGhlc2UgYWJvdmUgY2FsbHM/CisgICAgICAgIHJl
dHVybiB0cnVlOworICAgIGlmIChub2RlLT5oYXNFdmVudExpc3RlbmVycygpCisgICAgICAgICYm
IChub2RlLT5oYXNFdmVudExpc3RlbmVycyhldmVudE5hbWVzKCkuY2xpY2tFdmVudCkKKyAgICAg
ICAgICAgIHx8IG5vZGUtPmhhc0V2ZW50TGlzdGVuZXJzKGV2ZW50TmFtZXMoKS5ET01BY3RpdmF0
ZUV2ZW50KQorICAgICAgICAgICAgfHwgbm9kZS0+aGFzRXZlbnRMaXN0ZW5lcnMoZXZlbnROYW1l
cygpLm1vdXNlZG93bkV2ZW50KQorICAgICAgICAgICAgfHwgbm9kZS0+aGFzRXZlbnRMaXN0ZW5l
cnMoZXZlbnROYW1lcygpLm1vdXNldXBFdmVudCkKKyAgICAgICAgICAgIHx8IG5vZGUtPmhhc0V2
ZW50TGlzdGVuZXJzKGV2ZW50TmFtZXMoKS5tb3VzZW1vdmVFdmVudCkKKyAgICAgICAgICAgIC8v
IENoZWNraW5nIGZvciBmb2N1cyBldmVudHMgaXMgbm90IG5lY2Vzc2FyeSBzaW5jZSB0aGV5IGNh
biBvbmx5IGZpcmUgb24KKyAgICAgICAgICAgIC8vIGZvY3VzYWJsZSBlbGVtZW50cyB3aGljaCBo
YXZlIGFscmVhZHkgYmVlbiBjYXB0dXJlZCBhYm92ZS4KKyAgICAgICAgKSkKKyAgICAgICAgcmV0
dXJuIHRydWU7CisgICAgaWYgKG5vZGUtPnJlbmRlclN0eWxlKCkpIHsKKyAgICAgICAgLy8gQWNj
ZXB0IG5vZGVzIHRoYXQgaGFzIGEgQ1NTIGVmZmVjdCB3aGVuIHRvdWNoZWQuCisgICAgICAgIGlm
IChub2RlLT5yZW5kZXJTdHlsZSgpLT5hZmZlY3RlZEJ5QWN0aXZlUnVsZXMoKSB8fCBub2RlLT5y
ZW5kZXJTdHlsZSgpLT5hZmZlY3RlZEJ5SG92ZXJSdWxlcygpKQorICAgICAgICAgICAgcmV0dXJu
IHRydWU7CisgICAgfQorICAgIHJldHVybiBmYWxzZTsKK30KKworc3RhdGljIGlubGluZSB2b2lk
IGFwcGVuZEFic29sdXRlUXVhZHNGb3JOb2RlVG9IaXRMaXN0KE5vZGUqIG5vZGUsIEhpdExpc3Qm
IGhpdGxpc3QpCit7CisgICAgLy8gU2luY2UgdGhlIG5vZGUgaXMgYSByZXN1bHQgb2YgYSBoaXQg
dGVzdCwgd2UgYXJlIGFscmVhZHkgZW5zdXJlZCBpdCBoYXMgYSByZW5kZXJlci4KKyAgICBBU1NF
UlQobm9kZS0+cmVuZGVyZXIoKSk7CisKKyAgICBWZWN0b3I8RmxvYXRRdWFkPiBxdWFkczsKKyAg
ICBub2RlLT5yZW5kZXJlcigpLT5hYnNvbHV0ZVF1YWRzKHF1YWRzKTsKKworICAgIFZlY3RvcjxG
bG9hdFF1YWQ+Ojpjb25zdF9pdGVyYXRvciBpdCA9IHF1YWRzLmJlZ2luKCk7CisgICAgY29uc3Qg
VmVjdG9yPEZsb2F0UXVhZD46OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IHF1YWRzLmVuZCgpOworICAg
IGZvciAoOyBpdCAhPSBlbmQ7ICsraXQpCisgICAgICAgIGhpdGxpc3QuYXBwZW5kKEhpdFRlc3RR
dWFkKG5vZGUsICppdCkpOworfQorCisvLyBDb21waWxlIGEgbGlzdCBvZiBhYnNvbHV0ZSByZWN0
cyByZXByZXNlbmRpbmcgbm9kZXMgcmVzcG9uZGluZyB0aGUgdGFwIGdlc3R1cmUuCit2b2lkIGNv
bXBpbGVIaXRMaXN0KGNvbnN0IEhpdFRlc3RSZXN1bHQmIHJlc3VsdCwgSGl0TGlzdCYgaGl0bGlz
dCwgTm9kZUZpbHRlciBub2RlRmlsdGVyKQoreworICAgIGNvbnN0IEhpdFRlc3RSZXN1bHQ6Ok5v
ZGVTZXQmIGludGVyc2VjdGVkTm9kZXMgPSByZXN1bHQucmVjdEJhc2VkVGVzdFJlc3VsdCgpOwor
CisgICAgLy8gRmluZCBjYW5kaWRhdGVzIHJlc3BvbmRpbmcgdG8gdGFwIGdlc3R1cmUgZXZlbnRz
IGluIE8obikgdGltZS4KKyAgICBIYXNoTWFwPE5vZGUqLCBOb2RlKj4gcmVzcG9uZGVyTWFwOwor
ICAgIEhhc2hTZXQ8Tm9kZSo+IGFuY2VzdG9yc1RvUmVzcG9uZGVyc1NldDsKKyAgICBWZWN0b3I8
Tm9kZSo+IGNhbmRpZGF0ZXM7CisKKyAgICBIaXRUZXN0UmVzdWx0OjpOb2RlU2V0Ojpjb25zdF9p
dGVyYXRvciBpdDEgPSBpbnRlcnNlY3RlZE5vZGVzLmJlZ2luKCk7CisgICAgY29uc3QgSGl0VGVz
dFJlc3VsdDo6Tm9kZVNldDo6Y29uc3RfaXRlcmF0b3IgZW5kMSA9IGludGVyc2VjdGVkTm9kZXMu
ZW5kKCk7CisgICAgZm9yICg7IGl0MSAhPSBlbmQxOyArK2l0MSkgeworICAgICAgICBOb2RlKiBu
b2RlID0gaXQxLT5nZXQoKTsKKyAgICAgICAgaWYgKHJlc3BvbmRlck1hcC5jb250YWlucyhub2Rl
KSkKKyAgICAgICAgICAgIC8vIFNraXAgbm9kZXMgdGhhdCBhcmUgZGlyZWN0IGFuY2VzdG9ycyBv
ZiBvdGhlciBjYW5kaWRhdGVzLiBUaGV5IHdvdWxkIGhpdC10ZXN0IGFnYWluc3QgdGhlIHNhbWUg
YWJzb2x1dGUgcXVhZHMuCisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgVmVjdG9yPE5v
ZGUqPiBhbmNlc3RvcnM7CisgICAgICAgIE5vZGUqIHJlc3BvbmRpbmdOb2RlID0gMDsKKyAgICAg
ICAgZm9yICg7IG5vZGU7IG5vZGUgPSBub2RlLT5wYXJlbnRPckhvc3ROb2RlKCkpIHsKKyAgICAg
ICAgICAgIC8vIENoZWNrIGlmIHdlIGFscmVhZHkgaGF2ZSBhIHJlc3VsdCBmcm9tIGEgY29tbW9u
IGFuY2VzdG9yIHdpdGggYW5vdGhlciBjYW5kaWRhdGUuCisgICAgICAgICAgICByZXNwb25kaW5n
Tm9kZSA9IHJlc3BvbmRlck1hcC5nZXQobm9kZSk7CisgICAgICAgICAgICBpZiAocmVzcG9uZGlu
Z05vZGUpCisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBhbmNlc3RvcnMuYXBw
ZW5kKG5vZGUpOworICAgICAgICAgICAgLy8gQ2hlY2sgaWYgdGhlIG5vZGUgZmlsdGVyIGFwcGxp
ZXMsIHdoaWNoIHdvdWxkIG1lYW4gd2UgaGF2ZSBmb3VuZCBhIHJlc3BvbmRpbmcgbm9kZS4KKyAg
ICAgICAgICAgIGlmIChub2RlRmlsdGVyKG5vZGUpKSB7CisgICAgICAgICAgICAgICAgcmVzcG9u
ZGluZ05vZGUgPSBub2RlOworICAgICAgICAgICAgICAgIC8vIE5vdyB0aGF0IHdlIGhhdmUgdGhl
IHJlc3BvbmRlciwgc2V0IHRoZSByZXNwb25kZXIgZm9yIGFsbCB0aGUgbm9kZXMgc2VlbiBzbyBm
YXIuCisgICAgICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgPCBhbmNlc3Rv
cnMuc2l6ZSgpOyBpKyspCisgICAgICAgICAgICAgICAgICAgIHJlc3BvbmRlck1hcC5hZGQoYW5j
ZXN0b3JzW2ldLCBub2RlKTsKKyAgICAgICAgICAgICAgICAvLyBUaGUgY29udGludWUgdGhlIGl0
ZXJhdGlvbiB0byBjb2xsZWN0IHRoZSBhbmNlc3RvcnMgb2YgdGhlIHJlc3BvbmRlci4KKyAgICAg
ICAgICAgICAgICBmb3IgKG5vZGUgPSBub2RlLT5wYXJlbnRPckhvc3ROb2RlKCk7IG5vZGU7IG5v
ZGUgPSBub2RlLT5wYXJlbnRPckhvc3ROb2RlKCkpIHsKKyAgICAgICAgICAgICAgICAgICAgcGFp
cjxIYXNoU2V0PE5vZGUqPjo6aXRlcmF0b3IsIGJvb2w+IHRtcCA9IGFuY2VzdG9yc1RvUmVzcG9u
ZGVyc1NldC5hZGQobm9kZSk7CisgICAgICAgICAgICAgICAgICAgIGlmICghdG1wLnNlY29uZCkK
KyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBpZiAo
cmVzcG9uZGluZ05vZGUpCisgICAgICAgICAgICBjYW5kaWRhdGVzLmFwcGVuZChpdDEtPmdldCgp
KTsKKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAvLyBJbnNlcnQgdGhlIG5vZGVzIHdpdGgg
bWlzc2luZyByZXNwb25kZXJzIGludG8gdGhlIHJlc3BvbmRlci1tYXAgZm9yIGZhc3QgcmVqZWN0
aW9uIG9mIGxhdGVyIGNhbmRpZGF0ZXMuCisgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGludCBp
ID0gMDsgaSA8IGFuY2VzdG9ycy5zaXplKCk7IGkrKykKKyAgICAgICAgICAgICAgICByZXNwb25k
ZXJNYXAuYWRkKGFuY2VzdG9yc1tpXSwgMCk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvLyBX
ZSBjb21waWxlIHRoZSBsaXN0IG9mIGNvbXBvbmVudCBhYnNvbHV0ZSBxdWFkcyBpbnN0ZWFkIG9m
IHVzaW5nIHRoZSBib3VuZGluZyByZWN0CisgICAgLy8gdG8gYmUgYWJsZSB0byBwZXJmb3JtIGJl
dHRlciBoaXQtdGVzdGluZyBvbiBpbmxpbmUgbGlua3Mgb24gbGluZS1icmVha3MuCisgICAgVmVj
dG9yPE5vZGUqPjo6Y29uc3RfaXRlcmF0b3IgaXQyID0gY2FuZGlkYXRlcy5iZWdpbigpOworICAg
IGNvbnN0IFZlY3RvcjxOb2RlKj46OmNvbnN0X2l0ZXJhdG9yIGVuZDIgPSBjYW5kaWRhdGVzLmVu
ZCgpOworICAgIGZvciAoOyBpdDIgIT0gZW5kMjsgKytpdDIpIHsKKyAgICAgICAgLy8gU2tpcCBu
b2RlcyB3aG9zIHJlc3BvbmRlcnMgYXJlIGFuY2VzdG9ycyBvZiBvdGhlciByZXNwb25kZXJzLiBU
aGlzIGdpdmVzIHByZWZlcmVuY2UgdG8gdGhlIGlubmVyLW1vc3QgZXZlbnQtaGFuZGxlcnMuCisg
ICAgICAgIC8vIFNvIHRoYXQgYSBsaW5rIGlzIGFsd2F5cyBwcmVmZXJyZWQgZXZlbiB3aGVuIGNv
bnRhaW5lZCBpbiBhbiBlbGVtZW50IHRoYXQgbW9uaXRvcnMgYWxsIGNsaWNrLWV2ZW50cy4KKyAg
ICAgICAgTm9kZSogcmVzcG9uZGluZ05vZGUgPSByZXNwb25kZXJNYXAuZ2V0KCppdDIpOworICAg
ICAgICBBU1NFUlQocmVzcG9uZGluZ05vZGUpOworICAgICAgICBpZiAoYW5jZXN0b3JzVG9SZXNw
b25kZXJzU2V0LmNvbnRhaW5zKHJlc3BvbmRpbmdOb2RlKSkKKyAgICAgICAgICAgIGNvbnRpbnVl
OworICAgICAgICBhcHBlbmRBYnNvbHV0ZVF1YWRzRm9yTm9kZVRvSGl0TGlzdCgqaXQyLCBoaXRs
aXN0KTsKKyAgICB9Cit9CisKKy8vIFJldHVybnMgdGhlIGRpc3RhbmNlIHNxdWFyZWQgdG8gdGhl
IGJvdW5kaW5nIGJveCBjZW50ZXJsaW5lLgorZmxvYXQgZGlzdGFuY2VUb0hpdFRlc3RRdWFkKGNv
bnN0IExheW91dFBvaW50JiB0b3VjaEhvdHNwb3QsIGNvbnN0IExheW91dFJlY3QmLCBjb25zdCBI
aXRUZXN0UXVhZCYgaGl0VGVzdFF1YWQpCit7CisgICAgLy8gVXNpbmcgdGhlIGJvdW5kaW5nIGJv
eCBtZWFucyB0aGUgZGlzdGFuY2UgdG8gY2VudGVybGluZSBpcyBsZXNzIG1lYW5pbmdmdWwgZm9y
IHRyYW5zZm9ybWVkIHJlY3RhbmdsZXMsCisgICAgLy8gYnV0IGNhbGN1bGF0aW5nIHRoZSBkaXN0
YW5jZSB0byBxdWFkcyBjYW4gYmUgdmVyeSBleHBlbnNpdmUsIGFuZCB3ZSBkbyBub3Qgd2FudCB0
byBjYWxjdWxjYXRlCisgICAgLy8gcXVhZCBiYXNlZCBkaXN0YW5jZXMgZm9yIHVudHJhbnNmb3Jt
ZWQgcmVjdGFuZ2xlcy4KKyAgICBJbnRSZWN0IHJlY3QgPSBoaXRUZXN0UXVhZC5ib3VuZGluZ0Jv
eCgpOworCisgICAgcmV0dXJuIHJlY3QuZGlzdGFuY2VTcXVhcmVkRnJvbUNlbnRlckxpbmVUb1Bv
aW50KHRvdWNoSG90c3BvdCk7Cit9CisKKy8vIFJldHVybnMgdGhlIGFyZWEgb2YgdGhlIGludGVy
c2VjdGlvbi4KK2Zsb2F0IGludGVyc2VjdGlvbldpdGhIaXRUZXN0UXVhZChjb25zdCBMYXlvdXRQ
b2ludCYsIGNvbnN0IExheW91dFJlY3QmIHRvdWNoUmVjdCwgY29uc3QgSGl0VGVzdFF1YWQmIGhp
dFRlc3RRdWFkKQoreworICAgIEludFJlY3QgcmVjdCA9IGhpdFRlc3RRdWFkLmJvdW5kaW5nQm94
KCk7CisgICAgSW50UmVjdCBpbnRlcnNlY3Rpb24gPSByZWN0OworICAgIHJlY3QuaW50ZXJzZWN0
KHRvdWNoUmVjdCk7CisKKyAgICByZXR1cm4gaW50ZXJzZWN0aW9uLnNpemUoKS5hcmVhKCk7Cit9
CisKK2Jvb2wgZmluZE5vZGVXaXRoTG93ZXN0TWV0cmljKE5vZGUqJiB0YXJnZXROb2RlLCBMYXlv
dXRQb2ludCYgdGFyZ2V0UG9pbnQsIGNvbnN0IExheW91dFBvaW50JiB0b3VjaEhvdHNwb3QsIGNv
bnN0IExheW91dFJlY3QmIHRvdWNoQXJlYSwgSGl0TGlzdCYgaGl0bGlzdCwgTWV0cmljIG1ldHJp
YykKK3sKKyAgICB0YXJnZXROb2RlID0gMDsKKworICAgIGZsb2F0IGJlc3RNZXRyaWMgPSBJTkZJ
TklUWTsKKyAgICBIaXRMaXN0Ojpjb25zdF9pdGVyYXRvciBpdCA9IGhpdGxpc3QuYmVnaW4oKTsK
KyAgICBIaXRMaXN0Ojpjb25zdF9pdGVyYXRvciBlbmQgPSBoaXRsaXN0LmVuZCgpOworICAgIGZv
ciAoOyBpdCAhPSBlbmQ7ICsraXQpIHsKKyAgICAgICAgTm9kZSogaGl0Tm9kZSA9IGl0LT5ub2Rl
KCk7CisgICAgICAgIGZsb2F0IGhpdE1ldHJpYyA9IG1ldHJpYyh0b3VjaEhvdHNwb3QsIHRvdWNo
QXJlYSwgKml0KTsKKyAgICAgICAgaWYgKGhpdE1ldHJpYyA8IGJlc3RNZXRyaWMpIHsKKyAgICAg
ICAgICAgIHRhcmdldFBvaW50ID0gcm91bmRlZExheW91dFBvaW50KGl0LT5xdWFkKCkuY2VudGVy
KCkpOworICAgICAgICAgICAgdGFyZ2V0Tm9kZSA9IGhpdE5vZGU7CisgICAgICAgICAgICBiZXN0
TWV0cmljID0gaGl0TWV0cmljOworICAgICAgICB9CisgICAgfQorCisgICAgcmV0dXJuICh0YXJn
ZXROb2RlKTsKK30KKworYm9vbCBmaW5kTm9kZVdpdGhIaWdoZXN0TWV0cmljKE5vZGUqJiB0YXJn
ZXROb2RlLCBMYXlvdXRQb2ludCYgdGFyZ2V0UG9pbnQsIGNvbnN0IExheW91dFBvaW50JiB0b3Vj
aEhvdHNwb3QsIGNvbnN0IExheW91dFJlY3QmIHRvdWNoQXJlYSwgSGl0TGlzdCYgaGl0bGlzdCwg
TWV0cmljIG1ldHJpYykKK3sKKyAgICB0YXJnZXROb2RlID0gMDsKKworICAgIGZsb2F0IGJlc3RN
ZXRyaWMgPSAwOworICAgIEhpdExpc3Q6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gaGl0bGlzdC5iZWdp
bigpOworICAgIEhpdExpc3Q6OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IGhpdGxpc3QuZW5kKCk7Cisg
ICAgZm9yICg7IGl0ICE9IGVuZDsgKytpdCkgeworICAgICAgICBOb2RlKiBoaXROb2RlID0gaXQt
Pm5vZGUoKTsKKyAgICAgICAgZmxvYXQgaGl0TWV0cmljID0gbWV0cmljKHRvdWNoSG90c3BvdCwg
dG91Y2hBcmVhLCAqaXQpOworICAgICAgICBpZiAoaGl0TWV0cmljID4gYmVzdE1ldHJpYykgewor
ICAgICAgICAgICAgdGFyZ2V0UG9pbnQgPSByb3VuZGVkTGF5b3V0UG9pbnQoaXQtPnF1YWQoKS5j
ZW50ZXIoKSk7CisgICAgICAgICAgICB0YXJnZXROb2RlID0gaGl0Tm9kZTsKKyAgICAgICAgICAg
IGJlc3RNZXRyaWMgPSBoaXRNZXRyaWM7CisgICAgICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4g
KHRhcmdldE5vZGUpOworfQorCit9IC8vIG5hbWVzcGFjZSBUb3VjaEFkanVzdG1lbnQKKwordm9p
ZCBmaW5kQmVzdENhbmRpZGF0ZUZvckdlc3R1cmVUYXAoTm9kZSomIHRhcmdldE5vZGUsIExheW91
dFBvaW50JiB0YXJnZXRQb2ludCwgY29uc3QgTGF5b3V0UG9pbnQmIHRvdWNoSG90c3BvdCwgY29u
c3QgTGF5b3V0UmVjdCYgdG91Y2hBcmVhLCBjb25zdCBIaXRUZXN0UmVzdWx0JiBoaXRUZXN0UmVz
dWx0KQoreworICAgIFRvdWNoQWRqdXN0bWVudDo6SGl0TGlzdCBoaXRsaXN0OworICAgIFRvdWNo
QWRqdXN0bWVudDo6Y29tcGlsZUhpdExpc3QoaGl0VGVzdFJlc3VsdCwgaGl0bGlzdCwgVG91Y2hB
ZGp1c3RtZW50Ojpub2RlUmVzcG9uZHNUb1RhcEdlc3R1cmUpOworICAgIGlmICghVG91Y2hBZGp1
c3RtZW50OjpmaW5kTm9kZVdpdGhMb3dlc3RNZXRyaWModGFyZ2V0Tm9kZSwgdGFyZ2V0UG9pbnQs
IHRvdWNoSG90c3BvdCwgdG91Y2hBcmVhLCBoaXRsaXN0LCBUb3VjaEFkanVzdG1lbnQ6OmRpc3Rh
bmNlVG9IaXRUZXN0UXVhZCkpIHsKKyAgICAgICAgLy8gRGVmYXVsdCB0byBqdXN0IHJldHVybmlu
ZyBpbm5lck5vblNoYXJlZE5vZGUuCisgICAgICAgIHRhcmdldFBvaW50ID0gdG91Y2hIb3RzcG90
OworICAgICAgICB0YXJnZXROb2RlID0gaGl0VGVzdFJlc3VsdC5pbm5lck5vblNoYXJlZE5vZGUo
KTsKKyAgICB9Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL1RvdWNoQWRqdXN0bWVudC5oIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vVG91Y2hBZGp1c3RtZW50LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw
MC4uNTdkOTQ2MwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1Rv
dWNoQWRqdXN0bWVudC5oCkBAIC0wLDAgKzEsMzYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTIgTm9raWEgQ29ycG9yYXRpb24gYW5kL29yIGl0cyBzdWJzaWRpYXJ5KC1pZXMpCisgKgorICog
VGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFu
ZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2Vu
ZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJl
IEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQg
eW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBk
aXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJ
VEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YK
KyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4g
IFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUg
ZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBH
TlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGli
cmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhl
IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0
aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpZm5kZWYg
VG91Y2hBZGp1c3RtZW50X2gKKyNkZWZpbmUgVG91Y2hBZGp1c3RtZW50X2gKKworI2luY2x1ZGUg
IkZsb2F0UXVhZC5oIgorI2luY2x1ZGUgIkhpdFRlc3RSZXN1bHQuaCIKKyNpbmNsdWRlICJMYXlv
dXRUeXBlcy5oIgorI2luY2x1ZGUgIk5vZGUuaCIKKyNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CisK
K25hbWVzcGFjZSBXZWJDb3JlIHsKKwordm9pZCBmaW5kQmVzdENhbmRpZGF0ZUZvckdlc3R1cmVU
YXAoTm9kZSomIHRhcmdldE5vZGUsIExheW91dFBvaW50JiB0YXJnZXRQb2ludCwgY29uc3QgTGF5
b3V0UG9pbnQmIHRvdWNoSG90c3BvdCwgY29uc3QgTGF5b3V0UmVjdCYgdG91Y2hBcmVhLCBjb25z
dCBIaXRUZXN0UmVzdWx0Jik7CisvLyBGSVhNRTogSW1wbGVtZW50IHRoZSBzaW1pbGFyIGZ1bmN0
aW9ucyBmb3Igb3RoZXIgZ2VzdHVyZXMgaGVyZSBhcyB3ZWxsLgorCit9IC8vIG5hbWVzcGFjZSBX
ZWJDb3JlCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvRmxvYXRQb2ludC5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRmxv
YXRQb2ludC5oCmluZGV4IDA5NDMwNGQuLmM4M2NmZmIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL0Zsb2F0UG9pbnQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9GbG9hdFBvaW50LmgKQEAgLTY5LDYgKzY5LDcgQEAgcHVibGljOgog
ICAgIEZsb2F0UG9pbnQoZmxvYXQgeCwgZmxvYXQgeSkgOiBtX3goeCksIG1feSh5KSB7IH0KICAg
ICBGbG9hdFBvaW50KGNvbnN0IEludFBvaW50Jik7CiAgICAgRmxvYXRQb2ludChjb25zdCBGcmFj
dGlvbmFsTGF5b3V0UG9pbnQmKTsKKyAgICBleHBsaWNpdCBGbG9hdFBvaW50KEZsb2F0U2l6ZSBz
aXplKSA6IG1feChzaXplLndpZHRoKCkpLCBtX3koc2l6ZS5oZWlnaHQoKSkgeyB9CiAKICAgICBz
dGF0aWMgRmxvYXRQb2ludCB6ZXJvKCkgeyByZXR1cm4gRmxvYXRQb2ludCgpOyB9CiAKQEAgLTEz
MCw2ICsxMzEsOSBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBtX3ggKiBtX3ggKyBtX3kgKiBt
X3k7CiAgICAgfQogCisgICAgZmxvYXQgZGlzdGFuY2VUb1BvaW50KGNvbnN0IEZsb2F0UG9pbnQm
KSBjb25zdDsKKyAgICBmbG9hdCBkaXN0YW5jZVNxdWFyZWRUb1BvaW50KGNvbnN0IEZsb2F0UG9p
bnQmKSBjb25zdDsKKwogICAgIEZsb2F0UG9pbnQgZXhwYW5kZWRUbyhjb25zdCBGbG9hdFBvaW50
JiBvdGhlcikgY29uc3QKICAgICB7CiAgICAgICAgIHJldHVybiBGbG9hdFBvaW50KHN0ZDo6bWF4
KG1feCwgb3RoZXIubV94KSwgc3RkOjptYXgobV95LCBvdGhlci5tX3kpKTsKQEAgLTIyOCw2ICsy
MzIsMTcgQEAgaW5saW5lIGZsb2F0IG9wZXJhdG9yKihjb25zdCBGbG9hdFBvaW50JiBhLCBjb25z
dCBGbG9hdFBvaW50JiBiKQogICAgIHJldHVybiBhLmRvdChiKTsKIH0KIAoraW5saW5lIGZsb2F0
IEZsb2F0UG9pbnQ6OmRpc3RhbmNlVG9Qb2ludChjb25zdCBGbG9hdFBvaW50JiBwb2ludCkgY29u
c3QKK3sKKyAgICByZXR1cm4gKCp0aGlzIC0gcG9pbnQpLmRpYWdvbmFsTGVuZ3RoKCk7Cit9CisK
K2lubGluZSBmbG9hdCBGbG9hdFBvaW50OjpkaXN0YW5jZVNxdWFyZWRUb1BvaW50KGNvbnN0IEZs
b2F0UG9pbnQmIHBvaW50KSBjb25zdAoreworICAgIHJldHVybiAoKnRoaXMgLSBwb2ludCkuZGlh
Z29uYWxMZW5ndGhTcXVhcmVkKCk7Cit9CisKKwogaW5saW5lIEludFBvaW50IHJvdW5kZWRJbnRQ
b2ludChjb25zdCBGbG9hdFBvaW50JiBwKQogewogICAgIHJldHVybiBJbnRQb2ludChzdGF0aWNf
Y2FzdDxpbnQ+KHJvdW5kZihwLngoKSkpLCBzdGF0aWNfY2FzdDxpbnQ+KHJvdW5kZihwLnkoKSkp
KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0Zsb2F0UXVh
ZC5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRmxvYXRRdWFkLmgKaW5kZXgg
YjVlMmE4Yy4uYmZiNzk0ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvRmxvYXRRdWFkLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
RmxvYXRRdWFkLmgKQEAgLTg4LDYgKzg4LDEzIEBAIHB1YmxpYzoKICAgICAvLyBmcm9tIHRyYW5z
Zm9ybWVkIHJlY3RzLgogICAgIGJvb2wgY29udGFpbnNRdWFkKGNvbnN0IEZsb2F0UXVhZCYpIGNv
bnN0OwogCisgICAgLy8gVGhlIGNlbnRlciBvZiB0aGUgcXVhZC4gSWYgdGhlIHF1YWQgaXMgdGhl
IHJlc3VsdCBvZiBhIGFmZmluZS10cmFuc2Zvcm1lZCByZWN0YW5nbGUgdGhpcyBpcyB0aGUgc2Ft
ZSBhcyB0aGUgb3JpZ2luYWwgY2VudGVyIHRyYW5zZm9ybWVkLgorICAgIEZsb2F0UG9pbnQgY2Vu
dGVyKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBGbG9hdFBvaW50KChtX3AxLngoKSAr
IG1fcDIueCgpICsgbV9wMy54KCkgKyBtX3A0LngoKSkgLyA0LjAsCisgICAgICAgICAgICAgICAg
ICAgICAgICAgIChtX3AxLnkoKSArIG1fcDIueSgpICsgbV9wMy55KCkgKyBtX3A0LnkoKSkgLyA0
LjApOworICAgIH0KKwogICAgIEZsb2F0UmVjdCBib3VuZGluZ0JveCgpIGNvbnN0OwogICAgIElu
dFJlY3QgZW5jbG9zaW5nQm91bmRpbmdCb3goKSBjb25zdAogICAgIHsKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0Zsb2F0UmVjdC5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9GbG9hdFJlY3QuY3BwCmluZGV4IDU5NWFmMmEuLmMwZjgx
ZGIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0Zsb2F0UmVj
dC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRmxvYXRSZWN0LmNw
cApAQCAtMTM3LDYgKzEzNyw0MCBAQCB2b2lkIEZsb2F0UmVjdDo6c2NhbGUoZmxvYXQgc3gsIGZs
b2F0IHN5KQogICAgIG1fc2l6ZS5zZXRIZWlnaHQoaGVpZ2h0KCkgKiBzeSk7CiB9CiAKK3N0YXRp
YyBpbmxpbmUgZmxvYXQgZGlzdGFuY2VUb0ludGVydmFsKGZsb2F0IHBvcywgZmxvYXQgc3RhcnQs
IGZsb2F0IGVuZCkKK3sKKyAgICBpZiAocG9zIDwgc3RhcnQpCisgICAgICAgIHJldHVybiBzdGFy
dCAtIHBvczsKKyAgICBpZiAocG9zID4gZW5kKQorICAgICAgICByZXR1cm4gZW5kIC0gcG9zOwor
ICAgIHJldHVybiAwOworfQorCitGbG9hdFNpemUgRmxvYXRSZWN0OjpkaWZmZXJlbmNlVG9Qb2lu
dChjb25zdCBGbG9hdFBvaW50JiBwb2ludCkgY29uc3QKK3sKKyAgICBmbG9hdCB4ZGlzdGFuY2Ug
PSBkaXN0YW5jZVRvSW50ZXJ2YWwocG9pbnQueCgpLCB4KCksIG1heFgoKSk7CisgICAgZmxvYXQg
eWRpc3RhbmNlID0gZGlzdGFuY2VUb0ludGVydmFsKHBvaW50LnkoKSwgeSgpLCBtYXhZKCkpOwor
ICAgIHJldHVybiBGbG9hdFNpemUoeGRpc3RhbmNlLCB5ZGlzdGFuY2UpOworfQorCitmbG9hdCBG
bG9hdFJlY3Q6OmRpc3RhbmNlVG9Qb2ludChjb25zdCBGbG9hdFBvaW50JiBwKSBjb25zdAorewor
ICAgIHJldHVybiBzcXJ0ZihkaXN0YW5jZVNxdWFyZWRUb1BvaW50KHApKTsKK30KKworRmxvYXRT
aXplIEZsb2F0UmVjdDo6ZGlmZmVyZW5jZUZyb21DZW50ZXJMaW5lVG9Qb2ludChjb25zdCBGbG9h
dFBvaW50JiBwb2ludCkgY29uc3QKK3sKKyAgICAvLyBUaGUgY2VudGVyLWxpbmUgaXMgdGhlIG5h
dHVyYWwgY2VudGVyIG9mIGEgcmVjdGFuZ2xlLiBJdCBoYXMgYW4gZXF1YWwgZGlzdGFuY2UgdG8g
YWxsIHNpZGVzIG9mIHRoZSByZWN0YW5nbGUuCisgICAgRmxvYXRQb2ludCBjZW50ZXJQb2ludCA9
IGNlbnRlcigpOworICAgIGZsb2F0IHhkaXN0YW5jZSA9IGNlbnRlclBvaW50LngoKSAtIHBvaW50
LngoKTsKKyAgICBmbG9hdCB5ZGlzdGFuY2UgPSBjZW50ZXJQb2ludC55KCkgLSBwb2ludC55KCk7
CisgICAgaWYgKHdpZHRoKCkgPiBoZWlnaHQoKSkKKyAgICAgICAgeGRpc3RhbmNlID0gZGlzdGFu
Y2VUb0ludGVydmFsKHBvaW50LngoKSwgeCgpICsgKGhlaWdodCgpIC8gMi4wKSwgbWF4WCgpIC0g
KGhlaWdodCgpIC8gMi4wKSk7CisgICAgZWxzZQorICAgICAgICB5ZGlzdGFuY2UgPSBkaXN0YW5j
ZVRvSW50ZXJ2YWwocG9pbnQueSgpLCB5KCkgKyAod2lkdGgoKSAvIDIuMCksIG1heFkoKSAtICh3
aWR0aCgpIC8gMi4wKSk7CisgICAgcmV0dXJuIEZsb2F0U2l6ZSh4ZGlzdGFuY2UsIHlkaXN0YW5j
ZSk7Cit9CisKIEZsb2F0UmVjdCB1bmlvblJlY3QoY29uc3QgVmVjdG9yPEZsb2F0UmVjdD4mIHJl
Y3RzKQogewogICAgIEZsb2F0UmVjdCByZXN1bHQ7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9GbG9hdFJlY3QuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL0Zsb2F0UmVjdC5oCmluZGV4IDIyYzE3MWMuLmU3YTg5YWQgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0Zsb2F0UmVjdC5oCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0Zsb2F0UmVjdC5oCkBAIC0xNzIsNiArMTcyLDEy
IEBAIHB1YmxpYzoKICAgICB2b2lkIHNjYWxlKGZsb2F0IHMpIHsgc2NhbGUocywgcyk7IH0KICAg
ICB2b2lkIHNjYWxlKGZsb2F0IHN4LCBmbG9hdCBzeSk7CiAKKyAgICBGbG9hdFNpemUgZGlmZmVy
ZW5jZVRvUG9pbnQoY29uc3QgRmxvYXRQb2ludCYpIGNvbnN0OworICAgIEZsb2F0U2l6ZSBkaWZm
ZXJlbmNlRnJvbUNlbnRlckxpbmVUb1BvaW50KGNvbnN0IEZsb2F0UG9pbnQmKSBjb25zdDsKKyAg
ICBmbG9hdCBkaXN0YW5jZVNxdWFyZWRUb1BvaW50KGNvbnN0IEZsb2F0UG9pbnQmIHApIGNvbnN0
IHsgcmV0dXJuIGRpZmZlcmVuY2VUb1BvaW50KHApLmRpYWdvbmFsTGVuZ3RoU3F1YXJlZCgpOyB9
CisgICAgZmxvYXQgZGlzdGFuY2VTcXVhcmVkRnJvbUNlbnRlckxpbmVUb1BvaW50KGNvbnN0IEZs
b2F0UG9pbnQmIHApIGNvbnN0IHsgcmV0dXJuIGRpZmZlcmVuY2VGcm9tQ2VudGVyTGluZVRvUG9p
bnQocCkuZGlhZ29uYWxMZW5ndGhTcXVhcmVkKCk7IH0KKyAgICBmbG9hdCBkaXN0YW5jZVRvUG9p
bnQoY29uc3QgRmxvYXRQb2ludCYpIGNvbnN0OworCiAgICAgRmxvYXRSZWN0IHRyYW5zcG9zZWRS
ZWN0KCkgY29uc3QgeyByZXR1cm4gRmxvYXRSZWN0KG1fbG9jYXRpb24udHJhbnNwb3NlZFBvaW50
KCksIG1fc2l6ZS50cmFuc3Bvc2VkU2l6ZSgpKTsgfQogCiAgICAgLy8gUmUtaW5pdGlhbGl6ZXMg
dGhpcyByZWN0YW5nbGUgdG8gZml0IHRoZSBzZXRzIG9mIHBhc3NlZCBwb2ludHMuCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9GbG9hdFNpemUuaCBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0Zsb2F0U2l6ZS5oCmluZGV4IDJiNTU0NTAuLjI4
ODJlM2UgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0Zsb2F0
U2l6ZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0Zsb2F0U2l6ZS5o
CkBAIC05NSw2ICs5NSwxMSBAQCBwdWJsaWM6CiAgICAgICAgICAgIG1faGVpZ2h0IDwgb3RoZXIu
bV9oZWlnaHQgPyBtX2hlaWdodCA6IG90aGVyLm1faGVpZ2h0KTsKICAgICB9CiAKKyAgICBmbG9h
dCBhcmVhKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBtX3dpZHRoICogbV9oZWlnaHQ7
CisgICAgfQorCiAgICAgZmxvYXQgZGlhZ29uYWxMZW5ndGgoKSBjb25zdDsKICAgICBmbG9hdCBk
aWFnb25hbExlbmd0aFNxdWFyZWQoKSBjb25zdAogICAgIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ludFBvaW50LmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9JbnRQb2ludC5oCmluZGV4IDhkN2ZkN2YuLjNlODIxNDcgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ludFBvaW50LmgKKysrIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW50UG9pbnQuaApAQCAtMTA1LDYgKzEwNSwx
MyBAQCBwdWJsaWM6CiAgICAgICAgICAgICBtX3kgPCBvdGhlci5tX3kgPyBtX3kgOiBvdGhlci5t
X3kpOwogICAgIH0KIAorICAgIGludCBsZW5ndGhTcXVhcmVkKCkgY29uc3QKKyAgICB7CisgICAg
ICAgIHJldHVybiBtX3ggKiBtX3ggKyBtX3kgKiBtX3k7CisgICAgfQorCisgICAgaW50IGRpc3Rh
bmNlU3F1YXJlZFRvUG9pbnQoY29uc3QgSW50UG9pbnQmKSBjb25zdDsKKwogICAgIHZvaWQgY2xh
bXBOZWdhdGl2ZVRvWmVybygpCiAgICAgewogICAgICAgICAqdGhpcyA9IGV4cGFuZGVkVG8oemVy
bygpKTsKQEAgLTIxMyw2ICsyMjAsMTEgQEAgaW5saW5lIEludFNpemUgdG9TaXplKGNvbnN0IElu
dFBvaW50JiBhKQogICAgIHJldHVybiBJbnRTaXplKGEueCgpLCBhLnkoKSk7CiB9CiAKK2lubGlu
ZSBpbnQgSW50UG9pbnQ6OmRpc3RhbmNlU3F1YXJlZFRvUG9pbnQoY29uc3QgSW50UG9pbnQmIHBv
aW50KSBjb25zdAoreworICAgIHJldHVybiAoKCp0aGlzKSAtIHBvaW50KS5kaWFnb25hbExlbmd0
aFNxdWFyZWQoKTsKK30KKwogI2lmIFBMQVRGT1JNKFFUKQogaW5saW5lIFFEYXRhU3RyZWFtJiBv
cGVyYXRvcjw8KFFEYXRhU3RyZWFtJiBzdHJlYW0sIGNvbnN0IEludFBvaW50JiBwb2ludCkKIHsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ludFJlY3QuY3Bw
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW50UmVjdC5jcHAKaW5kZXggOTUw
NzQwNi4uNzljMDE1ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvSW50UmVjdC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW50
UmVjdC5jcHAKQEAgLTEyNSw2ICsxMjUsMzUgQEAgdm9pZCBJbnRSZWN0OjpzY2FsZShmbG9hdCBz
KQogICAgIG1fc2l6ZS5zZXRIZWlnaHQoKGludCkoaGVpZ2h0KCkgKiBzKSk7CiB9CiAKK3N0YXRp
YyBpbmxpbmUgaW50IGRpc3RhbmNlVG9JbnRlcnZhbChpbnQgcG9zLCBpbnQgc3RhcnQsIGludCBl
bmQpCit7CisgICAgaWYgKHBvcyA8IHN0YXJ0KQorICAgICAgICByZXR1cm4gc3RhcnQgLSBwb3M7
CisgICAgaWYgKHBvcyA+IGVuZCkKKyAgICAgICAgcmV0dXJuIGVuZCAtIHBvczsKKyAgICByZXR1
cm4gMDsKK30KKworSW50U2l6ZSBJbnRSZWN0OjpkaWZmZXJlbmNlVG9Qb2ludChjb25zdCBJbnRQ
b2ludCYgcG9pbnQpIGNvbnN0Cit7CisgICAgaW50IHhkaXN0YW5jZSA9IGRpc3RhbmNlVG9JbnRl
cnZhbChwb2ludC54KCksIHgoKSwgbWF4WCgpKTsKKyAgICBpbnQgeWRpc3RhbmNlID0gZGlzdGFu
Y2VUb0ludGVydmFsKHBvaW50LnkoKSwgeSgpLCBtYXhZKCkpOworICAgIHJldHVybiBJbnRTaXpl
KHhkaXN0YW5jZSwgeWRpc3RhbmNlKTsKK30KKworSW50U2l6ZSBJbnRSZWN0OjpkaWZmZXJlbmNl
RnJvbUNlbnRlckxpbmVUb1BvaW50KGNvbnN0IEludFBvaW50JiBwb2ludCkgY29uc3QKK3sKKyAg
ICAvLyBUaGUgY2VudGVyLWxpbmUgaXMgdGhlIG5hdHVyYWwgY2VudGVyIG9mIGEgcmVjdGFuZ2xl
LiBJdCBoYXMgYW4gZXF1YWwgZGlzdGFuY2UgdG8gYWxsIHNpZGVzIG9mIHRoZSByZWN0YW5nbGUu
CisgICAgSW50UG9pbnQgY2VudGVyUG9pbnQgPSBjZW50ZXIoKTsKKyAgICBpbnQgeGRpc3RhbmNl
ID0gY2VudGVyUG9pbnQueCgpIC0gcG9pbnQueCgpOworICAgIGludCB5ZGlzdGFuY2UgPSBjZW50
ZXJQb2ludC55KCkgLSBwb2ludC55KCk7CisgICAgaWYgKHdpZHRoKCkgPiBoZWlnaHQoKSkKKyAg
ICAgICAgeGRpc3RhbmNlID0gZGlzdGFuY2VUb0ludGVydmFsKHBvaW50LngoKSwgeCgpICsgKGhl
aWdodCgpIC8gMiksIG1heFgoKSAtIChoZWlnaHQoKSAvIDIpKTsKKyAgICBlbHNlCisgICAgICAg
IHlkaXN0YW5jZSA9IGRpc3RhbmNlVG9JbnRlcnZhbChwb2ludC55KCksIHkoKSArICh3aWR0aCgp
IC8gMiksIG1heFkoKSAtICh3aWR0aCgpIC8gMikpOworICAgIHJldHVybiBJbnRTaXplKHhkaXN0
YW5jZSwgeWRpc3RhbmNlKTsKK30KKwogSW50UmVjdCB1bmlvblJlY3QoY29uc3QgVmVjdG9yPElu
dFJlY3Q+JiByZWN0cykKIHsKICAgICBJbnRSZWN0IHJlc3VsdDsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ludFJlY3QuaCBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL0ludFJlY3QuaAppbmRleCAyZTJmZjBiLi41YjQ4MGNkIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbnRSZWN0LmgKKysrIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW50UmVjdC5oCkBAIC0xNjksNiArMTY5LDEx
IEBAIHB1YmxpYzoKICAgICB2b2lkIGluZmxhdGUoaW50IGQpIHsgaW5mbGF0ZVgoZCk7IGluZmxh
dGVZKGQpOyB9CiAgICAgdm9pZCBzY2FsZShmbG9hdCBzKTsKIAorICAgIEludFNpemUgZGlmZmVy
ZW5jZVRvUG9pbnQoY29uc3QgSW50UG9pbnQmKSBjb25zdDsKKyAgICBJbnRTaXplIGRpZmZlcmVu
Y2VGcm9tQ2VudGVyTGluZVRvUG9pbnQoY29uc3QgSW50UG9pbnQmKSBjb25zdDsKKyAgICBpbnQg
ZGlzdGFuY2VTcXVhcmVkVG9Qb2ludChjb25zdCBJbnRQb2ludCYgcCkgY29uc3QgeyByZXR1cm4g
ZGlmZmVyZW5jZVRvUG9pbnQocCkuZGlhZ29uYWxMZW5ndGhTcXVhcmVkKCk7IH0KKyAgICBpbnQg
ZGlzdGFuY2VTcXVhcmVkRnJvbUNlbnRlckxpbmVUb1BvaW50KGNvbnN0IEludFBvaW50JiBwKSBj
b25zdCB7IHJldHVybiBkaWZmZXJlbmNlRnJvbUNlbnRlckxpbmVUb1BvaW50KHApLmRpYWdvbmFs
TGVuZ3RoU3F1YXJlZCgpOyB9CisKICAgICBJbnRSZWN0IHRyYW5zcG9zZWRSZWN0KCkgY29uc3Qg
eyByZXR1cm4gSW50UmVjdChtX2xvY2F0aW9uLnRyYW5zcG9zZWRQb2ludCgpLCBtX3NpemUudHJh
bnNwb3NlZFNpemUoKSk7IH0KIAogI2lmIFBMQVRGT1JNKFdYKQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW50U2l6ZS5oIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvSW50U2l6ZS5oCmluZGV4IDYyNWRiM2MuLjdkYmY3ZWUgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ludFNpemUuaAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbnRTaXplLmgKQEAgLTk4LDYgKzk4LDE2IEBA
IHB1YmxpYzoKICAgICAgICAgKnRoaXMgPSBleHBhbmRlZFRvKEludFNpemUoKSk7CiAgICAgfQog
CisgICAgaW50IGFyZWEoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fd2lkdGggKiBt
X2hlaWdodDsKKyAgICB9CisKKyAgICBpbnQgZGlhZ29uYWxMZW5ndGhTcXVhcmVkKCkgY29uc3QK
KyAgICB7CisgICAgICAgIHJldHVybiBtX3dpZHRoICogbV93aWR0aCArIG1faGVpZ2h0ICogbV9o
ZWlnaHQ7CisgICAgfQorCiAgICAgSW50U2l6ZSB0cmFuc3Bvc2VkU2l6ZSgpIGNvbnN0CiAgICAg
ewogICAgICAgICByZXR1cm4gSW50U2l6ZShtX2hlaWdodCwgbV93aWR0aCk7CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS90ZXN0aW5nL0ludGVybmFscy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS90
ZXN0aW5nL0ludGVybmFscy5jcHAKaW5kZXggODRlOWNmNy4uNzUyM2Y5YSAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvdGVzdGluZy9JbnRlcm5hbHMuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3Rlc3RpbmcvSW50ZXJuYWxzLmNwcApAQCAtMzIsNiArMzIsNyBAQAogI2luY2x1ZGUgIkRvY3Vt
ZW50TWFya2VyLmgiCiAjaW5jbHVkZSAiRG9jdW1lbnRNYXJrZXJDb250cm9sbGVyLmgiCiAjaW5j
bHVkZSAiRWxlbWVudC5oIgorI2luY2x1ZGUgIkV2ZW50SGFuZGxlci5oIgogI2luY2x1ZGUgIkV4
Y2VwdGlvbkNvZGUuaCIKICNpbmNsdWRlICJGcmFtZS5oIgogI2luY2x1ZGUgIkZyYW1lVmlldy5o
IgpAQCAtNTMsNiArNTQsNyBAQAogI2luY2x1ZGUgIlNoYWRvd1Jvb3RMaXN0LmgiCiAjaW5jbHVk
ZSAiU3BlbGxDaGVja2VyLmgiCiAjaW5jbHVkZSAiVGV4dEl0ZXJhdG9yLmgiCisjaW5jbHVkZSAi
V2ViS2l0UG9pbnQuaCIKIAogI2lmIEVOQUJMRShTSEFET1dfRE9NKQogI2luY2x1ZGUgIlJ1bnRp
bWVFbmFibGVkRmVhdHVyZXMuaCIKQEAgLTUxNyw2ICs1MTksNDAgQEAgdW5zaWduZWQgSW50ZXJu
YWxzOjpsZW5ndGhGcm9tUmFuZ2UoRWxlbWVudCogc2NvcGUsIGNvbnN0IFJhbmdlKiByYW5nZSwg
RXhjZXB0aW8KICAgICByZXR1cm4gbGVuZ3RoOwogfQogCitQYXNzUmVmUHRyPFdlYktpdFBvaW50
PiBJbnRlcm5hbHM6OnRvdWNoUG9zaXRpb25BZGp1c3RlZFRvQmVzdE5vZGVGb3JHZXN0dXJlVGFw
KGxvbmcgeCwgbG9uZyB5LCBsb25nIHcsIGxvbmcgaCwgRG9jdW1lbnQqIGRvY3VtZW50LCBFeGNl
cHRpb25Db2RlJikKK3sKKyAgICBJbnRTaXplIHJhZGl1cyh3IC8gMiwgaCAvIDIpOworICAgIElu
dFBvaW50IHBvaW50KHggKyByYWRpdXMud2lkdGgoKSwgeSArIHJhZGl1cy5oZWlnaHQoKSk7CisK
KyNpZiBFTkFCTEUoVE9VQ0hfQURKVVNUTUVOVCkKKyAgICBOb2RlKiB0YXJnZXROb2RlOworICAg
IEludFBvaW50IGFkanVzdGVkUG9pbnQ7CisKKyAgICBkb2N1bWVudC0+ZnJhbWUoKS0+ZXZlbnRI
YW5kbGVyKCktPm5vZGVGb3JUYXBHZXN0dXJlQXRUb3VjaFBvaW50KHBvaW50LCByYWRpdXMsIGFk
anVzdGVkUG9pbnQsIHRhcmdldE5vZGUpOworCisgICAgcmV0dXJuIFdlYktpdFBvaW50OjpjcmVh
dGUoYWRqdXN0ZWRQb2ludC54KCksIGFkanVzdGVkUG9pbnQueSgpKTsKKyNlbHNlCisgICAgcmV0
dXJuIFdlYktpdFBvaW50OjpjcmVhdGUocG9pbnQueCgpLCBwb2ludC55KCkpOworI2VuZGlmCit9
CisKK1Bhc3NSZWZQdHI8Tm9kZT4gSW50ZXJuYWxzOjp0b3VjaE5vZGVBZGp1c3RlZFRvQmVzdE5v
ZGVGb3JHZXN0dXJlVGFwKGxvbmcgeCwgbG9uZyB5LCBsb25nIHcsIGxvbmcgaCwgRG9jdW1lbnQq
IGRvY3VtZW50LCBFeGNlcHRpb25Db2RlJikKK3sKKyAgICBJbnRTaXplIHJhZGl1cyh3IC8gMiwg
aCAvIDIpOworICAgIEludFBvaW50IHBvaW50KHggKyByYWRpdXMud2lkdGgoKSwgeSArIHJhZGl1
cy5oZWlnaHQoKSk7CisKKyAgICBOb2RlKiB0YXJnZXROb2RlOworI2lmIEVOQUJMRShUT1VDSF9B
REpVU1RNRU5UKQorICAgIEludFBvaW50IGFkanVzdGVkUG9pbnQ7CisKKyAgICBkb2N1bWVudC0+
ZnJhbWUoKS0+ZXZlbnRIYW5kbGVyKCktPm5vZGVGb3JUYXBHZXN0dXJlQXRUb3VjaFBvaW50KHBv
aW50LCByYWRpdXMsIGFkanVzdGVkUG9pbnQsIHRhcmdldE5vZGUpOworI2Vsc2UKKyAgICB0YXJn
ZXROb2RlID0gZG9jdW1lbnQtPmVsZW1lbnRGcm9tUG9pbnQocG9pbnQueCgpLCBwb2ludC55KCkp
OworI2VuZGlmCisgICAgcmV0dXJuIGFkb3B0UmVmKHRhcmdldE5vZGUpOworfQorCisKIGludCBJ
bnRlcm5hbHM6Omxhc3RTcGVsbENoZWNrUmVxdWVzdFNlcXVlbmNlKERvY3VtZW50KiBkb2N1bWVu
dCwgRXhjZXB0aW9uQ29kZSYgZWMpCiB7CiAgICAgU3BlbGxDaGVja2VyKiBjaGVja2VyID0gc3Bl
bGxjaGVja2VyKGRvY3VtZW50KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Rlc3Rpbmcv
SW50ZXJuYWxzLmggYi9Tb3VyY2UvV2ViQ29yZS90ZXN0aW5nL0ludGVybmFscy5oCmluZGV4IGVh
MmY4YjguLjdhNmNkNTggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3Rlc3RpbmcvSW50ZXJu
YWxzLmgKKysrIGIvU291cmNlL1dlYkNvcmUvdGVzdGluZy9JbnRlcm5hbHMuaApAQCAtNDIsNiAr
NDIsNyBAQCBjbGFzcyBJbnRlcm5hbFNldHRpbmdzOwogY2xhc3MgTm9kZTsKIGNsYXNzIFJhbmdl
OwogY2xhc3MgU2hhZG93Um9vdDsKK2NsYXNzIFdlYktpdFBvaW50OwogCiB0eXBlZGVmIGludCBF
eGNlcHRpb25Db2RlOwogCkBAIC0xMDMsNiArMTA0LDkgQEAgcHVibGljOgogICAgIHVuc2lnbmVk
IGxvY2F0aW9uRnJvbVJhbmdlKEVsZW1lbnQqIHNjb3BlLCBjb25zdCBSYW5nZSosIEV4Y2VwdGlv
bkNvZGUmKTsKICAgICB1bnNpZ25lZCBsZW5ndGhGcm9tUmFuZ2UoRWxlbWVudCogc2NvcGUsIGNv
bnN0IFJhbmdlKiwgRXhjZXB0aW9uQ29kZSYpOwogCisgICAgUGFzc1JlZlB0cjxXZWJLaXRQb2lu
dD4gdG91Y2hQb3NpdGlvbkFkanVzdGVkVG9CZXN0Tm9kZUZvckdlc3R1cmVUYXAobG9uZyB4LCBs
b25nIHksIGxvbmcgdywgbG9uZyBoLCBEb2N1bWVudCosIEV4Y2VwdGlvbkNvZGUmKTsKKyAgICBQ
YXNzUmVmUHRyPE5vZGU+IHRvdWNoTm9kZUFkanVzdGVkVG9CZXN0Tm9kZUZvckdlc3R1cmVUYXAo
bG9uZyB4LCBsb25nIHksIGxvbmcgdywgbG9uZyBoLCBEb2N1bWVudCosIEV4Y2VwdGlvbkNvZGUm
KTsKKwogICAgIGludCBsYXN0U3BlbGxDaGVja1JlcXVlc3RTZXF1ZW5jZShEb2N1bWVudCosIEV4
Y2VwdGlvbkNvZGUmKTsKICAgICBpbnQgbGFzdFNwZWxsQ2hlY2tQcm9jZXNzZWRTZXF1ZW5jZShE
b2N1bWVudCosIEV4Y2VwdGlvbkNvZGUmKTsKICAgICAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3Rlc3RpbmcvSW50ZXJuYWxzLmlkbCBiL1NvdXJjZS9XZWJDb3JlL3Rlc3RpbmcvSW50ZXJu
YWxzLmlkbAppbmRleCBiYTc2ZDQ4Li5jNGI3M2JhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS90ZXN0aW5nL0ludGVybmFscy5pZGwKKysrIGIvU291cmNlL1dlYkNvcmUvdGVzdGluZy9JbnRl
cm5hbHMuaWRsCkBAIC03OCw2ICs3OCw5IEBAIG1vZHVsZSB3aW5kb3cgewogICAgICAgICB1bnNp
Z25lZCBsb25nIGxvY2F0aW9uRnJvbVJhbmdlKGluIEVsZW1lbnQgc2NvcGUsIGluIFJhbmdlIHJh
bmdlKSByYWlzZXMgKERPTUV4Y2VwdGlvbik7CiAgICAgICAgIHVuc2lnbmVkIGxvbmcgbGVuZ3Ro
RnJvbVJhbmdlKGluIEVsZW1lbnQgc2NvcGUsIGluIFJhbmdlIHJhbmdlKSByYWlzZXMgKERPTUV4
Y2VwdGlvbik7CiAKKyAgICAgICAgV2ViS2l0UG9pbnQgdG91Y2hQb3NpdGlvbkFkanVzdGVkVG9C
ZXN0Tm9kZUZvckdlc3R1cmVUYXAoaW4gbG9uZyB4LCBpbiBsb25nIHksIGluIGxvbmcgdywgaW4g
bG9uZyBoLCBpbiBEb2N1bWVudCBkb2N1bWVudCkgcmFpc2VzIChET01FeGNlcHRpb24pOworICAg
ICAgICBOb2RlIHRvdWNoTm9kZUFkanVzdGVkVG9CZXN0Tm9kZUZvckdlc3R1cmVUYXAoaW4gbG9u
ZyB4LCBpbiBsb25nIHksIGluIGxvbmcgdywgaW4gbG9uZyBoLCBpbiBEb2N1bWVudCBkb2N1bWVu
dCkgcmFpc2VzIChET01FeGNlcHRpb24pOworCiAgICAgICAgIGxvbmcgbGFzdFNwZWxsQ2hlY2tS
ZXF1ZXN0U2VxdWVuY2UoaW4gRG9jdW1lbnQgZG9jdW1lbnQpIHJhaXNlcyAoRE9NRXhjZXB0aW9u
KTsKICAgICAgICAgbG9uZyBsYXN0U3BlbGxDaGVja1Byb2Nlc3NlZFNlcXVlbmNlKGluIERvY3Vt
ZW50IGRvY3VtZW50KSByYWlzZXMgKERPTUV4Y2VwdGlvbik7CiAKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJLaXQyL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZwppbmRleCBjM2Vh
MWQ0Li40YTY5ZTViIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cKKysrIGIv
U291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjMgQEAKKzIwMTItMDItMjMgIEFs
bGFuIFNhbmRmZWxkIEplbnNlbiAgPGFsbGFuLmplbnNlbkBub2tpYS5jb20+CisKKyAgICAgICAg
U2VsZWN0IGJlc3QgdGFyZ2V0IGZvciB0YXAgZ2VzdHVyZS4KKyAgICAgICAgaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTc4ODAxCisKKyAgICAgICAgUmV2aWV3ZWQgYnkg
Tk9CT0RZIChPT1BTISkuCisgICAgICAgIAorICAgICAgICBTZW5kIHJhZGl1cyB0byBoYW5kbGVQ
b3RlbnRpYWxTaW5nbGVUYXBFdmVudCBzbyBpdCBjYW4gZG8gdGhlIHNhbWUgaGl0CisgICAgICAg
IGRldGVjdGlvbiB0aGUgdGFwIGdlc3R1cmUgbGF0ZXIgZG9lcy4KKworICAgICAgICAqIFVJUHJv
Y2Vzcy9XZWJQYWdlUHJveHkuY3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlUHJveHk6Omhh
bmRsZVBvdGVudGlhbEFjdGl2YXRpb24pOgorICAgICAgICAqIFVJUHJvY2Vzcy9XZWJQYWdlUHJv
eHkuaDoKKyAgICAgICAgKiBVSVByb2Nlc3MvcXQvUXRXZWJQYWdlRXZlbnRIYW5kbGVyLmNwcDoK
KyAgICAgICAgKFF0V2ViUGFnZUV2ZW50SGFuZGxlcjo6aGFuZGxlUG90ZW50aWFsU2luZ2xlVGFw
RXZlbnQpOgorICAgICAgICAqIFdlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmNwcDoKKyAgICAg
ICAgKFdlYktpdDo6V2ViUGFnZTo6aGlnaGxpZ2h0UG90ZW50aWFsQWN0aXZhdGlvbik6CisgICAg
ICAgICogV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UuaDoKKyAgICAgICAgKiBXZWJQcm9jZXNz
L1dlYlBhZ2UvV2ViUGFnZS5tZXNzYWdlcy5pbjoKKwogMjAxMi0wMi0yMSAgQW5kcmFzIEJlY3Np
ICA8YW5kcmFzLmJlY3NpQG5va2lhLmNvbT4KIAogICAgICAgICBbUXRdW1dLMl0gR2V0IHJpZCBv
ZiB0aGUgZGVwZW5kZW5jeSB0byBRdFdpZGdldHMKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQy
L1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkuY3BwIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dl
YlBhZ2VQcm94eS5jcHAKaW5kZXggMmZjZmYwYi4uYWU2ZDAyNSAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYktpdDIvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5jcHAKKysrIGIvU291cmNlL1dlYktpdDIv
VUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5jcHAKQEAgLTk3Nyw5ICs5NzcsOSBAQCB2b2lkIFdlYlBh
Z2VQcm94eTo6aGFuZGxlR2VzdHVyZUV2ZW50KGNvbnN0IFdlYkdlc3R1cmVFdmVudCYgZXZlbnQp
CiAKICNpZiBFTkFCTEUoVE9VQ0hfRVZFTlRTKQogI2lmIFBMQVRGT1JNKFFUKQotdm9pZCBXZWJQ
YWdlUHJveHk6OmhhbmRsZVBvdGVudGlhbEFjdGl2YXRpb24oY29uc3QgSW50UG9pbnQmIGxheW91
dFBvaW50KQordm9pZCBXZWJQYWdlUHJveHk6OmhhbmRsZVBvdGVudGlhbEFjdGl2YXRpb24oY29u
c3QgSW50UG9pbnQmIGxheW91dFBvaW50LCBjb25zdCBJbnRTaXplJiBhcmVhKQogewotICAgIHBy
b2Nlc3MoKS0+c2VuZChNZXNzYWdlczo6V2ViUGFnZTo6SGlnaGxpZ2h0UG90ZW50aWFsQWN0aXZh
dGlvbihsYXlvdXRQb2ludCksIG1fcGFnZUlEKTsKKyAgICBwcm9jZXNzKCktPnNlbmQoTWVzc2Fn
ZXM6OldlYlBhZ2U6OkhpZ2hsaWdodFBvdGVudGlhbEFjdGl2YXRpb24obGF5b3V0UG9pbnQsIGFy
ZWEpLCBtX3BhZ2VJRCk7CiB9CiAjZW5kaWYKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIv
VUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5oIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYlBh
Z2VQcm94eS5oCmluZGV4IGVmMTNhOGQuLmZmNWIwNzUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJL
aXQyL1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkuaAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nl
c3MvV2ViUGFnZVByb3h5LmgKQEAgLTM4NCw3ICszODQsNyBAQCBwdWJsaWM6CiAjaWYgRU5BQkxF
KFRPVUNIX0VWRU5UUykKICAgICB2b2lkIGhhbmRsZVRvdWNoRXZlbnQoY29uc3QgTmF0aXZlV2Vi
VG91Y2hFdmVudCYpOwogI2lmIFBMQVRGT1JNKFFUKQotICAgIHZvaWQgaGFuZGxlUG90ZW50aWFs
QWN0aXZhdGlvbihjb25zdCBXZWJDb3JlOjpJbnRQb2ludCYpOworICAgIHZvaWQgaGFuZGxlUG90
ZW50aWFsQWN0aXZhdGlvbihjb25zdCBXZWJDb3JlOjpJbnRQb2ludCYsIGNvbnN0IFdlYkNvcmU6
OkludFNpemUmKTsKICNlbmRpZgogI2VuZGlmCiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQy
L1VJUHJvY2Vzcy9xdC9RdFdlYlBhZ2VFdmVudEhhbmRsZXIuY3BwIGIvU291cmNlL1dlYktpdDIv
VUlQcm9jZXNzL3F0L1F0V2ViUGFnZUV2ZW50SGFuZGxlci5jcHAKaW5kZXggNzJiOTZiYS4uMTIz
OWYyYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL3F0L1F0V2ViUGFnZUV2
ZW50SGFuZGxlci5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL3F0L1F0V2ViUGFn
ZUV2ZW50SGFuZGxlci5jcHAKQEAgLTI5MSw3ICsyOTEsNyBAQCBib29sIFF0V2ViUGFnZUV2ZW50
SGFuZGxlcjo6aGFuZGxlRHJvcEV2ZW50KFFEcm9wRXZlbnQqIGV2KQogdm9pZCBRdFdlYlBhZ2VF
dmVudEhhbmRsZXI6OmhhbmRsZVBvdGVudGlhbFNpbmdsZVRhcEV2ZW50KGNvbnN0IFFUb3VjaEV2
ZW50OjpUb3VjaFBvaW50JiBwb2ludCkKIHsKICAgICBRVHJhbnNmb3JtIGZyb21JdGVtVHJhbnNm
b3JtID0gbV93ZWJQYWdlLT50cmFuc2Zvcm1Gcm9tSXRlbSgpOwotICAgIG1fd2ViUGFnZVByb3h5
LT5oYW5kbGVQb3RlbnRpYWxBY3RpdmF0aW9uKGZyb21JdGVtVHJhbnNmb3JtLm1hcChwb2ludC5w
b3MoKSkudG9Qb2ludCgpKTsKKyAgICBtX3dlYlBhZ2VQcm94eS0+aGFuZGxlUG90ZW50aWFsQWN0
aXZhdGlvbihmcm9tSXRlbVRyYW5zZm9ybS5tYXAocG9pbnQucG9zKCkpLnRvUG9pbnQoKSwgSW50
U2l6ZShwb2ludC5yZWN0KCkuc2l6ZSgpLnRvU2l6ZSgpKSk7CiB9CiAKIHZvaWQgUXRXZWJQYWdl
RXZlbnRIYW5kbGVyOjpoYW5kbGVTaW5nbGVUYXBFdmVudChjb25zdCBRVG91Y2hFdmVudDo6VG91
Y2hQb2ludCYgcG9pbnQpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dl
YlBhZ2UvV2ViUGFnZS5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvV2Vi
UGFnZS5jcHAKaW5kZXggNDAyMmVjNC4uY2FiOWM2NSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktp
dDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dl
YlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmNwcApAQCAtMTQ0NSwxNiArMTQ0NSwyMCBAQCB2b2lk
IFdlYlBhZ2U6OnJlc3RvcmVTZXNzaW9uQW5kTmF2aWdhdGVUb0N1cnJlbnRJdGVtKGNvbnN0IFNl
c3Npb25TdGF0ZSYgc2Vzc2lvbgogCiAjaWYgRU5BQkxFKFRPVUNIX0VWRU5UUykKICNpZiBQTEFU
Rk9STShRVCkKLXZvaWQgV2ViUGFnZTo6aGlnaGxpZ2h0UG90ZW50aWFsQWN0aXZhdGlvbihjb25z
dCBJbnRQb2ludCYgcG9pbnQpCit2b2lkIFdlYlBhZ2U6OmhpZ2hsaWdodFBvdGVudGlhbEFjdGl2
YXRpb24oY29uc3QgSW50UG9pbnQmIHBvaW50LCBjb25zdCBJbnRTaXplJiBhcmVhKQogewogICAg
IE5vZGUqIGFjdGl2YXRpb25Ob2RlID0gMDsKICAgICBGcmFtZSogbWFpbmZyYW1lID0gbV9wYWdl
LT5tYWluRnJhbWUoKTsKKyAgICBJbnRQb2ludCBhZGp1c3RlZFBvaW50OwogCiAgICAgaWYgKHBv
aW50ICE9IEludFBvaW50Ojp6ZXJvKCkpIHsKKyNpZiBFTkFCTEUoVE9VQ0hfQURKVVNUTUVOVCkK
KyAgICAgICAgbWFpbmZyYW1lLT5ldmVudEhhbmRsZXIoKS0+bm9kZUZvclRhcEdlc3R1cmVBdFRv
dWNoUG9pbnQocG9pbnQsIEludFNpemUoYXJlYS53aWR0aCgpIC8gMiwgYXJlYS5oZWlnaHQoKSAv
IDIpLCBhZGp1c3RlZFBvaW50LCBhY3RpdmF0aW9uTm9kZSk7CisjZWxzZQogICAgICAgICBIaXRU
ZXN0UmVzdWx0IHJlc3VsdCA9IG1haW5mcmFtZS0+ZXZlbnRIYW5kbGVyKCktPmhpdFRlc3RSZXN1
bHRBdFBvaW50KG1haW5mcmFtZS0+dmlldygpLT53aW5kb3dUb0NvbnRlbnRzKHBvaW50KSwgLyph
bGxvd1NoYWRvd0NvbnRlbnQqLyBmYWxzZSwgLyppZ25vcmVDbGlwcGluZyovIHRydWUpOwogICAg
ICAgICBhY3RpdmF0aW9uTm9kZSA9IHJlc3VsdC5pbm5lck5vZGUoKTsKLQotICAgICAgICBpZiAo
IWFjdGl2YXRpb25Ob2RlLT5pc0ZvY3VzYWJsZSgpKQorI2VuZGlmCisgICAgICAgIGlmIChhY3Rp
dmF0aW9uTm9kZSAmJiAhYWN0aXZhdGlvbk5vZGUtPmlzRm9jdXNhYmxlKCkpCiAgICAgICAgICAg
ICBhY3RpdmF0aW9uTm9kZSA9IGFjdGl2YXRpb25Ob2RlLT5lbmNsb3NpbmdMaW5rRXZlbnRQYXJl
bnRPclNlbGYoKTsKICAgICB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nl
c3MvV2ViUGFnZS9XZWJQYWdlLmggYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2Uv
V2ViUGFnZS5oCmluZGV4IDAyMDQzMTQuLjBmM2NkYzIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJL
aXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmgKKysrIGIvU291cmNlL1dlYktpdDIvV2Vi
UHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UuaApAQCAtNTU4LDcgKzU1OCw3IEBAIHByaXZhdGU6CiAg
ICAgdm9pZCB0b3VjaEV2ZW50KGNvbnN0IFdlYlRvdWNoRXZlbnQmKTsKICAgICB2b2lkIHRvdWNo
RXZlbnRTeW5jRm9yVGVzdGluZyhjb25zdCBXZWJUb3VjaEV2ZW50JiwgYm9vbCYgaGFuZGxlZCk7
CiAjaWYgUExBVEZPUk0oUVQpCi0gICAgdm9pZCBoaWdobGlnaHRQb3RlbnRpYWxBY3RpdmF0aW9u
KGNvbnN0IFdlYkNvcmU6OkludFBvaW50Jik7CisgICAgdm9pZCBoaWdobGlnaHRQb3RlbnRpYWxB
Y3RpdmF0aW9uKGNvbnN0IFdlYkNvcmU6OkludFBvaW50JiwgY29uc3QgV2ViQ29yZTo6SW50U2l6
ZSYpOwogI2VuZGlmCiAjZW5kaWYKICAgICB2b2lkIGNvbnRleHRNZW51SGlkZGVuKCkgeyBtX2lz
U2hvd2luZ0NvbnRleHRNZW51ID0gZmFsc2U7IH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQy
L1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLm1lc3NhZ2VzLmluIGIvU291cmNlL1dlYktpdDIv
V2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UubWVzc2FnZXMuaW4KaW5kZXggNzI4YjZjNC4uNjg5
MWI1MyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBh
Z2UubWVzc2FnZXMuaW4KKysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1dl
YlBhZ2UubWVzc2FnZXMuaW4KQEAgLTQxLDcgKzQxLDcgQEAgbWVzc2FnZXMgLT4gV2ViUGFnZSB7
CiAgICAgVG91Y2hFdmVudChXZWJLaXQ6OldlYlRvdWNoRXZlbnQgZXZlbnQpCiAgICAgVG91Y2hF
dmVudFN5bmNGb3JUZXN0aW5nKFdlYktpdDo6V2ViVG91Y2hFdmVudCBldmVudCkgLT4gKGJvb2wg
aGFuZGxlZCkKICNpZiBQTEFURk9STShRVCkKLSAgICBIaWdobGlnaHRQb3RlbnRpYWxBY3RpdmF0
aW9uKFdlYkNvcmU6OkludFBvaW50IHBvaW50KQorICAgIEhpZ2hsaWdodFBvdGVudGlhbEFjdGl2
YXRpb24oV2ViQ29yZTo6SW50UG9pbnQgcG9pbnQsIFdlYkNvcmU6OkludFNpemUgcmFkaXVzKQog
I2VuZGlmCiAjZW5kaWYKIAo=
</data>
<flag name="commit-queue"
          id="130896"
          type_id="3"
          status="-"
          setter="pnormand"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>128719</attachid>
            <date>2012-02-24 05:33:17 -0800</date>
            <delta_ts>2012-02-24 07:05:11 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>Patch8</filename>
            <type>text/plain</type>
            <size>61641</size>
            <attacher name="Allan Sandfeld Jensen">allan.jensen</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL0NoYW5nZUxvZyBiL0xheW91dFRlc3RzL0NoYW5nZUxv
ZwppbmRleCAxNTkzNDJjLi5iYjVmNTdhIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9DaGFuZ2VM
b2cKKysrIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjQgQEAKKzIwMTItMDIt
MjQgIEFsbGFuIFNhbmRmZWxkIEplbnNlbiAgPGFsbGFuLmplbnNlbkBub2tpYS5jb20+CisKKyAg
ICAgICAgU2VsZWN0IGJlc3QgdGFyZ2V0IGZvciB0YXAgZ2VzdHVyZS4KKyAgICAgICAgaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTc4ODAxCisKKyAgICAgICAgUmV2aWV3
ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVGVzdCBvZiB0b3VjaCBhZGp1c3RtZW50
cy4gVGVzdHMgc2V2ZXJhbCBib3RoIG5vcm1hbCBhbmQgdHJpY2t5IGNhc2VzLgorICAgICAgICBU
aGUgdGVzdHMgYXJlIG5vdCBleGhhdXN0aXZlIHRob3VnaC4KKworICAgICAgICAqIHBsYXRmb3Jt
L2VmbC9Ta2lwcGVkOgorICAgICAgICAqIHBsYXRmb3JtL2d0ay9Ta2lwcGVkOgorICAgICAgICAq
IHBsYXRmb3JtL21hYy9Ta2lwcGVkOgorICAgICAgICAqIHBsYXRmb3JtL3dpbi9Ta2lwcGVkOgor
ICAgICAgICAqIHRvdWNoYWRqdXN0bWVudC9ldmVudC10cmlnZ2VyZWQtd2lkZ2V0cy1leHBlY3Rl
ZC50eHQ6IEFkZGVkLgorICAgICAgICAqIHRvdWNoYWRqdXN0bWVudC9ldmVudC10cmlnZ2VyZWQt
d2lkZ2V0cy5odG1sOiBBZGRlZC4KKyAgICAgICAgKiB0b3VjaGFkanVzdG1lbnQvbmVzdGVkLXRv
dWNoLWV4cGVjdGVkLnR4dDogQWRkZWQuCisgICAgICAgICogdG91Y2hhZGp1c3RtZW50L25lc3Rl
ZC10b3VjaC5odG1sOiBBZGRlZC4KKyAgICAgICAgKiB0b3VjaGFkanVzdG1lbnQvdG91Y2gtaW5s
aW5lcy1leHBlY3RlZC50eHQ6IEFkZGVkLgorICAgICAgICAqIHRvdWNoYWRqdXN0bWVudC90b3Vj
aC1pbmxpbmVzLmh0bWw6IEFkZGVkLgorCiAyMDEyLTAyLTI0ICBGbGV4IE1vYmlsZSAgPHJoYXVj
a0BhZG9iZS5jb20+CiAKICAgICAgICAgQ29udmVydCBzb21lIGZhc3QvcmVnaW9ucyBwaXhlbCB0
ZXN0cyB0byByZWZ0ZXN0cwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvcGxhdGZvcm0vZWZsL1Nr
aXBwZWQgYi9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9lZmwvU2tpcHBlZAppbmRleCAxY2EwNmIwLi4z
YTExY2RiIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9lZmwvU2tpcHBlZAorKysg
Yi9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9lZmwvU2tpcHBlZApAQCAtMjE2OCwzICsyMTY4LDcgQEAg
ZmFzdC9ldmVudHMvcGFnZS12aXNpYmlsaXR5LWlmcmFtZS1tb3ZlLXRlc3QuaHRtbAogZmFzdC9l
dmVudHMvcGFnZS12aXNpYmlsaXR5LWlmcmFtZS1kZWxldGUtdGVzdC5odG1sCiBmYXN0L2V2ZW50
cy9wYWdlLXZpc2liaWxpdHktaWZyYW1lLXByb3BhZ2F0aW9uLXRlc3QuaHRtbAogZmFzdC9ldmVu
dHMvcGFnZS12aXNpYmlsaXR5LXRyYW5zaXRpb24tdGVzdC5odG1sCisKKyMgVG91Y2ggYWRqdXN0
bWVudCBub3QgZW5hYmxlZAorIyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9Nzg4MDEKK3RvdWNoYWRqdXN0bWVudApkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvcGxhdGZv
cm0vZ3RrL1NraXBwZWQgYi9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9ndGsvU2tpcHBlZAppbmRleCA0
MWE4NTM1Li5lYmE2MThkIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9ndGsvU2tp
cHBlZAorKysgYi9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9ndGsvU2tpcHBlZApAQCAtMTYwNSwzICsx
NjA1LDcgQEAgZWRpdGluZy9wYXN0ZWJvYXJkL2NvcHktZWxlbWVudC13aXRoLWNvbmZsaWN0aW5n
LWJhY2tncm91bmQtY29sb3ItZnJvbS1ydWxlLmh0bWwKIGZhc3QvZG9tL01lZGlhU3RyZWFtL2Fy
Z3VtZW50LXR5cGVzLmh0bWwKIGZhc3QvbWVkaWFzdHJlYW0vcGVlcmNvbm5lY3Rpb24tQXR0cmli
dXRlcy5odG1sCiBmYXN0L21lZGlhc3RyZWFtL3BlZXJjb25uZWN0aW9uLWFyZ3VtZW50LXR5cGVz
Lmh0bWwKKworIyBUb3VjaCBhZGp1c3RtZW50IG5vdCBlbmFibGVkCisjIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD03ODgwMQordG91Y2hhZGp1c3RtZW50CmRpZmYgLS1n
aXQgYS9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9tYWMvU2tpcHBlZCBiL0xheW91dFRlc3RzL3BsYXRm
b3JtL21hYy9Ta2lwcGVkCmluZGV4IGExZWM2NDEuLmJkZWQ4NDIgMTAwNjQ0Ci0tLSBhL0xheW91
dFRlc3RzL3BsYXRmb3JtL21hYy9Ta2lwcGVkCisrKyBiL0xheW91dFRlc3RzL3BsYXRmb3JtL21h
Yy9Ta2lwcGVkCkBAIC01NjAsMyArNTYwLDcgQEAgZmFzdC9tdXRhdGlvbi9lbmQtb2YtdGFzay1k
ZWxpdmVyeS5odG1sCiAjIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD03
MjAxMAogIyBOZWVkcyBQYWdlQ2xpZW50czo6dmlicmF0aW9uQ2xpZW50KCkgaW1wbGVtZW50YXRp
b24uCiBmYXN0L2RvbS9uYXZpZ2F0b3ItdmlicmF0aW9uLmh0bWwKKworIyBUb3VjaCBhZGp1c3Rt
ZW50IG5vdCBlbmFibGVkCisjIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD03ODgwMQordG91Y2hhZGp1c3RtZW50CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9wbGF0Zm9y
bS93aW4vU2tpcHBlZCBiL0xheW91dFRlc3RzL3BsYXRmb3JtL3dpbi9Ta2lwcGVkCmluZGV4IDMx
YjJjMjcuLjE4MDkxYmUgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL3BsYXRmb3JtL3dpbi9Ta2lw
cGVkCisrKyBiL0xheW91dFRlc3RzL3BsYXRmb3JtL3dpbi9Ta2lwcGVkCkBAIC0xNjU1LDMgKzE2
NTUsNyBAQCBmYXN0L3JlcGFpbnQvdHJhbnNmb3JtLWFic29sdXRlLWluLXBvc2l0aW9uZWQtY29u
dGFpbmVyLmh0bWwKIAogI1ZpYnJhdGlvbiBBUEkgaXMgbm90IGltcGxlbWVudGVkLgogZmFzdC9k
b20vbmF2aWdhdG9yLXZpYnJhdGlvbi5odG1sCisKKyMgVG91Y2ggYWRqdXN0bWVudCBub3QgZW5h
YmxlZAorIyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9Nzg4MDEKK3Rv
dWNoYWRqdXN0bWVudApkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvdG91Y2hhZGp1c3RtZW50L2V2
ZW50LXRyaWdnZXJlZC13aWRnZXRzLWV4cGVjdGVkLnR4dCBiL0xheW91dFRlc3RzL3RvdWNoYWRq
dXN0bWVudC9ldmVudC10cmlnZ2VyZWQtd2lkZ2V0cy1leHBlY3RlZC50eHQKbmV3IGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjk0ZTIwZQotLS0gL2Rldi9udWxsCisrKyBiL0xheW91
dFRlc3RzL3RvdWNoYWRqdXN0bWVudC9ldmVudC10cmlnZ2VyZWQtd2lkZ2V0cy1leHBlY3RlZC50
eHQKQEAgLTAsMCArMSwzMSBAQAorVGVzdCB2YXJpb3VzIHdheXMgdG8gdHJpZ2dlciBpbnB1dC13
aWRnZXRzLiBPbiBhIHRvdWNoIGludGVyZmFjZSwgYWxsIHRoZSBhY3Rpb25zIHNob3VsZCBiZSB0
cmlnZ2VyYWJsZSB3aXRoIGVpdGhlciBhIHRvdWNoIGRvd24gb3IgYSB0b3VjaCB0YXAuCisKK09u
IHN1Y2Nlc3MsIHlvdSB3aWxsIHNlZSBhIHNlcmllcyBvZiAiUEFTUyIgbWVzc2FnZXMsIGZvbGxv
d2VkIGJ5ICJURVNUIENPTVBMRVRFIi4KKworCitUZXN0aW5nIHNtYWxsIGRpcmVjdCBoaXRzCitQ
QVNTIGFkanVzdGVkTm9kZS5pZCBpcyBlbGVtZW50LmlkCitQQVNTIGFkanVzdGVkTm9kZS5pZCBp
cyBlbGVtZW50LmlkCitQQVNTIGFkanVzdGVkTm9kZS5pZCBpcyBlbGVtZW50LmlkCitQQVNTIGFk
anVzdGVkTm9kZS5pZCBpcyBub3QgZWxlbWVudC5pZAorUEFTUyBhZGp1c3RlZE5vZGUuaWQgaXMg
ZWxlbWVudC5pZAorVGVzdGluZyBsYXJnZSBkaXJlY3QgaGl0cworUEFTUyBhZGp1c3RlZE5vZGUu
aWQgaXMgZWxlbWVudC5pZAorUEFTUyBhZGp1c3RlZE5vZGUuaWQgaXMgZWxlbWVudC5pZAorUEFT
UyBhZGp1c3RlZE5vZGUuaWQgaXMgZWxlbWVudC5pZAorUEFTUyBhZGp1c3RlZE5vZGUuaWQgaXMg
bm90IGVsZW1lbnQuaWQKK1BBU1MgYWRqdXN0ZWROb2RlLmlkIGlzIGVsZW1lbnQuaWQKK1Rlc3Rp
bmcgbGFyZ2UgZGlyZWN0IGhpdHMKK1BBU1MgYWRqdXN0ZWROb2RlLmlkIGlzIGVsZW1lbnQuaWQK
K1BBU1MgYWRqdXN0ZWROb2RlLmlkIGlzIGVsZW1lbnQuaWQKK1BBU1MgYWRqdXN0ZWROb2RlLmlk
IGlzIGVsZW1lbnQuaWQKK1BBU1MgYWRqdXN0ZWROb2RlLmlkIGlzIG5vdCBlbGVtZW50LmlkCitQ
QVNTIGFkanVzdGVkTm9kZS5pZCBpcyBlbGVtZW50LmlkCitQQVNTIHN1Y2Nlc3NmdWxseVBhcnNl
ZCBpcyB0cnVlCisKK1RFU1QgQ09NUExFVEUKK0ZvY3VzIGhlcmUgc2hvdWxkIGdpdmUgYSB0ZXh0
IGlucHV0LWZpZWxkLgorTW91c2Utb3ZlciBoZXJlIHNob3VsZCBnaXZlIGEgdGV4dCBpbnB1dC1m
aWVsZC4KK0hvdmVyaW5nIGhlcmUgc2hvdWxkIGdpdmUgYSB0ZXh0IGlucHV0LWZpZWxkLiAKK0Zv
Y3VzaW5nIGhlcmUgc2hvdWxkIG9ubHkgZ2l2ZSBmb2N1cyBvdXRsaW5lLgorRm9jdXNpbmcgaGVy
ZSBzaG91bGQgZ2l2ZSBhIHRleHQgaW5wdXQtZmllbGQuCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0
cy90b3VjaGFkanVzdG1lbnQvZXZlbnQtdHJpZ2dlcmVkLXdpZGdldHMuaHRtbCBiL0xheW91dFRl
c3RzL3RvdWNoYWRqdXN0bWVudC9ldmVudC10cmlnZ2VyZWQtd2lkZ2V0cy5odG1sCm5ldyBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZkYjhmZDYKLS0tIC9kZXYvbnVsbAorKysgYi9M
YXlvdXRUZXN0cy90b3VjaGFkanVzdG1lbnQvZXZlbnQtdHJpZ2dlcmVkLXdpZGdldHMuaHRtbApA
QCAtMCwwICsxLDE2OCBAQAorPGh0bWw+Cis8aGVhZD4KKzxzdHlsZT4KKyAgICAuYm94IHsgYm9y
ZGVyOiAxcHggc29saWQgYmxhY2s7IGJvcmRlci1yYWRpdXM6IDVweCA1cHg7IG1hcmdpbjogMWVt
OyBtYXgtd2lkdGg6IDQwZW07IH0KKzwvc3R5bGU+CisKKzxzY3JpcHQgc3JjPSIuLi9mYXN0L2pz
L3Jlc291cmNlcy9qcy10ZXN0LXByZS5qcyI+PC9zY3JpcHQ+CisKKzwvaGVhZD4KKworPGJvZHkg
b25sb2FkPSJydW5UZXN0cygpIj4KKworPHAgaWQ9J2Rlc2NyaXB0aW9uJz48L3A+CisKKzxkaXYg
aWQ9J2NvbnNvbGUnPjwvZGl2PgorCis8c2NyaXB0PgorICAgIHZhciBlbGVtZW50OworICAgIHZh
ciBhZGp1c3RlZE5vZGU7CisgICAgZnVuY3Rpb24gZmluZEFic29sdXRlUG9zaXRpb24obm9kZSkg
eworICAgICAgICB2YXIgcG9zID0gbmV3IE9iamVjdCgpOworICAgICAgICBwb3MubGVmdCA9IDA7
IHBvcy50b3AgPSAwOworICAgICAgICBkbyB7CisgICAgICAgICAgICBwb3MubGVmdCArPSBub2Rl
Lm9mZnNldExlZnQ7CisgICAgICAgICAgICBwb3MudG9wICs9IG5vZGUub2Zmc2V0VG9wOworICAg
ICAgICB9IHdoaWxlIChub2RlID0gbm9kZS5vZmZzZXRQYXJlbnQpOworICAgICAgICByZXR1cm4g
cG9zOworICAgIH0KKyAgICAKKyAgICBmdW5jdGlvbiB0ZXN0RGlyZWN0VG91Y2goZWxlbWVudCkK
KyAgICB7CisgICAgICAgIHZhciBwb3MgPSBmaW5kQWJzb2x1dGVQb3NpdGlvbihlbGVtZW50KTsK
KyAgICAgICAgdmFyIHggPSBwb3MubGVmdCArIGVsZW1lbnQuY2xpZW50V2lkdGgvMiAtIDE7Cisg
ICAgICAgIHZhciB5ID0gcG9zLnRvcCArIGVsZW1lbnQuY2xpZW50SGVpZ2h0LzIgLSAxOworICAg
ICAgICB2YXIgdyA9IDM7CisgICAgICAgIHZhciBoID0gMzsKKyAgICAgICAgYWRqdXN0ZWROb2Rl
ID0gaW50ZXJuYWxzLnRvdWNoTm9kZUFkanVzdGVkVG9CZXN0Tm9kZUZvckdlc3R1cmVUYXAoeCwg
eSwgdywgaCwgZG9jdW1lbnQpOworICAgICAgICBpZiAoYWRqdXN0ZWROb2RlLm5vZGVUeXBlID09
IDMpIC8vIFRFWFQgbm9kZQorICAgICAgICAgICAgYWRqdXN0ZWROb2RlID0gYWRqdXN0ZWROb2Rl
LnBhcmVudE5vZGU7CisgICAgfQorICAgIAorICAgIGZ1bmN0aW9uIHRlc3REaXJlY3RGYXRGaW5n
ZXIoZWxlbWVudCkKKyAgICB7CisgICAgICAgIHZhciBwb3MgPSBmaW5kQWJzb2x1dGVQb3NpdGlv
bihlbGVtZW50KTsKKyAgICAgICAgdmFyIHggPSBwb3MubGVmdCArIGVsZW1lbnQuY2xpZW50V2lk
dGgvMiAtIDE7CisgICAgICAgIHZhciB5ID0gcG9zLnRvcCAtIDUgOworICAgICAgICB2YXIgdyA9
IGVsZW1lbnQuY2xpZW50SGVpZ2h0OworICAgICAgICB2YXIgaCA9IGVsZW1lbnQuY2xpZW50SGVp
Z2h0ICsgMTA7CisgICAgICAgIGFkanVzdGVkTm9kZSA9IGludGVybmFscy50b3VjaE5vZGVBZGp1
c3RlZFRvQmVzdE5vZGVGb3JHZXN0dXJlVGFwKHgsIHksIHcsIGgsIGRvY3VtZW50KTsKKyAgICAg
ICAgaWYgKGFkanVzdGVkTm9kZS5ub2RlVHlwZSA9PSAzKSAvLyBURVhUIG5vZGUKKyAgICAgICAg
ICAgIGFkanVzdGVkTm9kZSA9IGFkanVzdGVkTm9kZS5wYXJlbnROb2RlOworICAgIH0KKyAgICAK
KyAgICBmdW5jdGlvbiB0ZXN0SW5kaXJlY3RGYXRGaW5nZXIoZWxlbWVudCkKKyAgICB7CisgICAg
ICAgIHZhciBwb3MgPSBmaW5kQWJzb2x1dGVQb3NpdGlvbihlbGVtZW50KTsKKyAgICAgICAgdmFy
IHggPSBwb3MubGVmdCArIGVsZW1lbnQuY2xpZW50V2lkdGgvMiAtIDE7CisgICAgICAgIHZhciB5
ID0gcG9zLnRvcCAtIDc7CisgICAgICAgIHZhciB3ID0gMTA7CisgICAgICAgIHZhciBoID0gMTA7
CisgICAgICAgIGFkanVzdGVkTm9kZSA9IGludGVybmFscy50b3VjaE5vZGVBZGp1c3RlZFRvQmVz
dE5vZGVGb3JHZXN0dXJlVGFwKHgsIHksIHcsIGgsIGRvY3VtZW50KTsKKyAgICAgICAgaWYgKGFk
anVzdGVkTm9kZS5ub2RlVHlwZSA9PSAzKSAvLyBURVhUIG5vZGUKKyAgICAgICAgICAgIGFkanVz
dGVkTm9kZSA9IGFkanVzdGVkTm9kZS5wYXJlbnROb2RlOworICAgIH0KKyAgICAKKyAgICBmdW5j
dGlvbiB0ZXN0VG91Y2hIaXQoZWxlbWVudGlkLCB0b3VjaFR5cGUpIHsKKyAgICAgICAgZWxlbWVu
dCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGVsZW1lbnRpZCk7CisgICAgICAgIHRvdWNoVHlw
ZShlbGVtZW50KTsKKyAgICAgICAgc2hvdWxkQmUoJ2FkanVzdGVkTm9kZS5pZCcsICdlbGVtZW50
LmlkJyk7CisgICAgfQorICAgIAorICAgIGZ1bmN0aW9uIHRlc3RUb3VjaE1pc3MoZWxlbWVudGlk
LCB0b3VjaFR5cGUpIHsKKyAgICAgICAgZWxlbWVudCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlk
KGVsZW1lbnRpZCk7CisgICAgICAgIHRvdWNoVHlwZShlbGVtZW50KTsKKyAgICAgICAgc2hvdWxk
Tm90QmUoJ2FkanVzdGVkTm9kZS5pZCcsICdlbGVtZW50LmlkJyk7CisgICAgfQorICAgIAorICAg
IGZ1bmN0aW9uIHRlc3REaXJlY3RUb3VjaGVzKCkKKyAgICB7CisgICAgICAgIGRlYnVnKCdUZXN0
aW5nIHNtYWxsIGRpcmVjdCBoaXRzJyk7CisgICAgICAgIHRlc3RUb3VjaEhpdCgndGVzdDEnLHRl
c3REaXJlY3RUb3VjaCk7CisgICAgICAgIHRlc3RUb3VjaEhpdCgndGVzdDInLHRlc3REaXJlY3RU
b3VjaCk7CisgICAgICAgIHRlc3RUb3VjaEhpdCgndGVzdDMnLHRlc3REaXJlY3RUb3VjaCk7Cisg
ICAgICAgIHRlc3RUb3VjaE1pc3MoJ3Rlc3Q0Jyx0ZXN0RGlyZWN0VG91Y2gpOworICAgICAgICB0
ZXN0VG91Y2hIaXQoJ3Rlc3Q1Jyx0ZXN0RGlyZWN0VG91Y2gpOworICAgIH0KKyAgICAKKyAgICBm
dW5jdGlvbiB0ZXN0RGlyZWN0RmF0RmluZ2VycygpCisgICAgeworICAgICAgICBkZWJ1ZygnVGVz
dGluZyBsYXJnZSBkaXJlY3QgaGl0cycpOworICAgICAgICB0ZXN0VG91Y2hIaXQoJ3Rlc3QxJyx0
ZXN0RGlyZWN0RmF0RmluZ2VyKTsKKyAgICAgICAgdGVzdFRvdWNoSGl0KCd0ZXN0MicsdGVzdERp
cmVjdEZhdEZpbmdlcik7CisgICAgICAgIHRlc3RUb3VjaEhpdCgndGVzdDMnLHRlc3REaXJlY3RG
YXRGaW5nZXIpOworICAgICAgICB0ZXN0VG91Y2hNaXNzKCd0ZXN0NCcsdGVzdERpcmVjdEZhdEZp
bmdlcik7CisgICAgICAgIHRlc3RUb3VjaEhpdCgndGVzdDUnLHRlc3REaXJlY3RGYXRGaW5nZXIp
OworICAgIH0KKyAgICAKKyAgICBmdW5jdGlvbiB0ZXN0SW5kaXJlY3RGYXRGaW5nZXJzKCkKKyAg
ICB7CisgICAgICAgIGRlYnVnKCdUZXN0aW5nIGxhcmdlIGRpcmVjdCBoaXRzJyk7CisgICAgICAg
IHRlc3RUb3VjaEhpdCgndGVzdDEnLHRlc3RJbmRpcmVjdEZhdEZpbmdlcik7CisgICAgICAgIHRl
c3RUb3VjaEhpdCgndGVzdDInLHRlc3RJbmRpcmVjdEZhdEZpbmdlcik7CisgICAgICAgIHRlc3RU
b3VjaEhpdCgndGVzdDMnLHRlc3RJbmRpcmVjdEZhdEZpbmdlcik7CisgICAgICAgIHRlc3RUb3Vj
aE1pc3MoJ3Rlc3Q0Jyx0ZXN0SW5kaXJlY3RGYXRGaW5nZXIpOworICAgICAgICB0ZXN0VG91Y2hI
aXQoJ3Rlc3Q1Jyx0ZXN0SW5kaXJlY3RGYXRGaW5nZXIpOworICAgIH0KKyAgICAKKyAgICBmdW5j
dGlvbiBydW5UZXN0cygpCisgICAgeworICAgICAgICBpZiAod2luZG93LmxheW91dFRlc3RDb250
cm9sbGVyICYmIHdpbmRvdy5pbnRlcm5hbHMpIHsKKyAgICAgICAgICAgIGRlc2NyaXB0aW9uKCdU
ZXN0IHZhcmlvdXMgd2F5cyB0byB0cmlnZ2VyIGlucHV0LXdpZGdldHMuIE9uIGEgdG91Y2ggaW50
ZXJmYWNlLCBhbGwgdGhlIGFjdGlvbnMgc2hvdWxkIGJlIHRyaWdnZXJhYmxlIHdpdGggZWl0aGVy
IGEgdG91Y2ggZG93biBvciBhIHRvdWNoIHRhcC4nKTsKKyAgICAgICAgICAgIGxheW91dFRlc3RD
b250cm9sbGVyLmR1bXBBc1RleHQoKTsKKyAgICAgICAgICAgIGxheW91dFRlc3RDb250cm9sbGVy
LndhaXRVbnRpbERvbmUoKTsKKyAgICAgICAgICAgIHRlc3REaXJlY3RUb3VjaGVzKCk7CisgICAg
ICAgICAgICB0ZXN0RGlyZWN0RmF0RmluZ2VycygpOworICAgICAgICAgICAgdGVzdEluZGlyZWN0
RmF0RmluZ2VycygpOworICAgICAgICAgICAgaXNTdWNjZXNzZnVsbHlQYXJzZWQoKTsKKyAgICAg
ICAgICAgIGxheW91dFRlc3RDb250cm9sbGVyLm5vdGlmeURvbmUoKTsKKyAgICAgICAgfQorICAg
IH0KKzwvc2NyaXB0PgorCis8c2NyaXB0PgorICAgIGZ1bmN0aW9uIHRyaWdnZXJJbnB1dCgpIHsK
KyAgICAgICAgdmFyIGVsZW1lbnQgPSBldmVudC5zcmNFbGVtZW50OworICAgICAgICBpZiAoIWVs
ZW1lbnQub3BlbikgeworICAgICAgICAgICAgZWxlbWVudC5pbm5lckhUTUwgPSAnPGlucHV0IHR5
cGU9dGV4dCBzdHlsZT0id2lkdGg6IDEwMCUiPjwvaW5wdXQ+JworICAgICAgICAgICAgZWxlbWVu
dC5vcGVuID0gdHJ1ZTsKKyAgICAgICAgfQorICAgICAgICBlbGVtZW50LmZpcnN0Q2hpbGQuZm9j
dXMoKTsKKyAgICB9Cis8L3NjcmlwdD4KKworPGRpdiBpZD10ZXN0MSBjbGFzcz1ib3ggdGFiaW5k
ZXg9MSBvbmZvY3VzPSd0cmlnZ2VySW5wdXQoKSc+CitGb2N1cyBoZXJlIHNob3VsZCBnaXZlIGEg
dGV4dCBpbnB1dC1maWVsZC4KKzwvZGl2PgorCis8ZGl2IGlkPXRlc3QyIGNsYXNzPWJveCBvbm1v
dXNlb3Zlcj0ndHJpZ2dlcklucHV0KCknPiAKK01vdXNlLW92ZXIgaGVyZSBzaG91bGQgZ2l2ZSBh
IHRleHQgaW5wdXQtZmllbGQuCis8L2Rpdj4KKworPHN0eWxlPgorICAgIC5ib3g6bm90KDpob3Zl
cikgLmhvdmVydHJpZ2dlcmVkIHsgdmlzaWJpbGl0eTogaGlkZGVuO30KKyAgICAuYm94OmhvdmVy
IC5ob3ZlcmZhbGxiYWNrIHsgZGlzcGxheTogbm9uZTsgfSAgCis8L3N0eWxlPgorCis8ZGl2IGlk
PXRlc3QzIGNsYXNzPWJveD4gCisgICAgPHNwYW4gY2xhc3M9aG92ZXJmYWxsYmFjaz5Ib3Zlcmlu
ZyBoZXJlIHNob3VsZCBnaXZlIGEgdGV4dCBpbnB1dC1maWVsZC48L3NwYW4+CisgICAgPGlucHV0
IHR5cGU9dGV4dCBjbGFzcz1ob3ZlcnRyaWdnZXJlZD48L2lucHV0PgorPC9kaXY+CisKKzxkaXYg
aWQ9dGVzdDQgY2xhc3M9Ym94IG9uZm9jdXM9J3RyaWdnZXJJbnB1dCgpJz4KKyAgICA8c3BhbiB0
YWJpbmRleD0xPiBGb2N1c2luZyBoZXJlIHNob3VsZCBvbmx5IGdpdmUgZm9jdXMgb3V0bGluZS4K
KyAgICA8L3NwYW4+Cis8L2Rpdj4KKworPGRpdiBpZD10ZXN0NSBjbGFzcz1ib3g+CisgICAgPHNw
YW4gdGFiaW5kZXg9MT4gRm9jdXNpbmcgaGVyZSBzaG91bGQgZ2l2ZSBhIHRleHQgaW5wdXQtZmll
bGQuCisgICAgPC9zcGFuPgorPC9kaXY+CisKKzxzY3JpcHQ+CisgICAgdmFyIGVsZW1lbnQgPSBk
b2N1bWVudC5nZXRFbGVtZW50QnlJZCgndGVzdDUnKTsKKyAgICBlbGVtZW50LmFkZEV2ZW50TGlz
dGVuZXIoJ0RPTUZvY3VzSW4nLCB0cmlnZ2VySW5wdXQsIGZhbHNlKTsKKzwvc2NyaXB0PgorCis8
L2JvZHk+Cis8L2h0bWw+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEv
TGF5b3V0VGVzdHMvdG91Y2hhZGp1c3RtZW50L25lc3RlZC10b3VjaC1leHBlY3RlZC50eHQgYi9M
YXlvdXRUZXN0cy90b3VjaGFkanVzdG1lbnQvbmVzdGVkLXRvdWNoLWV4cGVjdGVkLnR4dApuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43NDdmNjdlCi0tLSAvZGV2L251bGwKKysr
IGIvTGF5b3V0VGVzdHMvdG91Y2hhZGp1c3RtZW50L25lc3RlZC10b3VjaC1leHBlY3RlZC50eHQK
QEAgLTAsMCArMSwxOCBAQAorQm94IHdpdGggYSBsb2NhbCBjbGljayBoYW5kbGVyLgorQm94IHdp
dGhvdXQgYSBsb2NhbCBjbGljayBoYW5kbGVyLgorVGVzdCB0aGUgY2FzZSB3aGVyZSBhIGNsaWNr
YWJsZSB0YXJnZXQgaXMgbmVzdGVkIGluc2lkZSBhIGRvY3VtZW50IHRoYXQgaXMgbW9uaXRvcmlu
ZyBjbGlja3MuIFRoZSB0YXJnZXQgd2l0aCB0aGUgbG9jYWwgZXZlbnQtaGFuZGxlciBzaG91bGQg
YmUgY2hvc2VuIGlmIG11bHRpcGxlIHRhcmdldHMgYXJlIHRvdWNoZWQuCisKK09uIHN1Y2Nlc3Ms
IHlvdSB3aWxsIHNlZSBhIHNlcmllcyBvZiAiUEFTUyIgbWVzc2FnZXMsIGZvbGxvd2VkIGJ5ICJU
RVNUIENPTVBMRVRFIi4KKworCitUZXN0aW5nIHNtYWxsIGRpcmVjdCBoaXRzCitQQVNTIGFkanVz
dGVkTm9kZS5pZCBpcyBlbGVtZW50LmlkCitQQVNTIGFkanVzdGVkTm9kZS5pZCBpcyBlbGVtZW50
LmlkCitUZXN0aW5nIHByZWZlcmVkIGhpdHMKK1BBU1MgYWRqdXN0ZWROb2RlLmlkIGlzIGVsZW1l
bnQxLmlkCitQQVNTIGFkanVzdGVkTm9kZS5pZCBpcyBlbGVtZW50MS5pZAorUEFTUyBhZGp1c3Rl
ZE5vZGUuaWQgaXMgZWxlbWVudDEuaWQKK1BBU1Mgc3VjY2Vzc2Z1bGx5UGFyc2VkIGlzIHRydWUK
KworVEVTVCBDT01QTEVURQorCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy90b3VjaGFkanVzdG1l
bnQvbmVzdGVkLXRvdWNoLmh0bWwgYi9MYXlvdXRUZXN0cy90b3VjaGFkanVzdG1lbnQvbmVzdGVk
LXRvdWNoLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODUyZDE2Mgot
LS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL3RvdWNoYWRqdXN0bWVudC9uZXN0ZWQtdG91
Y2guaHRtbApAQCAtMCwwICsxLDEyMCBAQAorPGh0bWw+Cis8aGVhZD4KKzxzdHlsZT4KKyAgICAu
Ym94IHsgYm9yZGVyOiAxcHggc29saWQgYmxhY2s7IGJvcmRlci1yYWRpdXM6IDVweCA1cHg7IG1h
cmdpbjogMWVtOyBtYXgtd2lkdGg6IDQwZW07IH0KKzwvc3R5bGU+Cis8c2NyaXB0IHNyYz0iLi4v
ZmFzdC9qcy9yZXNvdXJjZXMvanMtdGVzdC1wcmUuanMiPjwvc2NyaXB0PgorCis8L2hlYWQ+CisK
Kzxib2R5IG9ubG9hZD0icnVuVGVzdHMoKSI+CisKKzxkaXYgY2xhc3M9Ym94IGlkPW15Ym94MT4K
K0JveCB3aXRoIGEgbG9jYWwgY2xpY2sgaGFuZGxlci4KKzwvZGl2PgorCis8ZGl2IGNsYXNzPWJv
eCBpZD1teWJveDI+IAorQm94IHdpdGhvdXQgYSBsb2NhbCBjbGljayBoYW5kbGVyLgorPC9kaXY+
CisKKzxzY3JpcHQ+CisgIGZ1bmN0aW9uIG1vbml0b3IoZSkgeyBhbGVydChlLnRhcmdldCArKCBl
LnRhcmdldC5pZCA/ICggJyAjJyArIGUudGFyZ2V0LmlkKSA6ICcnKSk7IH07CisgIGZ1bmN0aW9u
IGRvU29tZXRoaW5nKGUpIHt9OworCisgIHZhciBlbGVtZW50ID0gZG9jdW1lbnQuZ2V0RWxlbWVu
dEJ5SWQoJ215Ym94MScpOworICBlbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgZG9T
b21ldGhpbmcsIGZhbHNlKTsKKyAgZWxlbWVudCA9IGRvY3VtZW50LmJvZHk7CisgIGVsZW1lbnQu
YWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCBtb25pdG9yLCBmYWxzZSk7Cis8L3NjcmlwdD4KKwor
Cis8cCBpZD0nZGVzY3JpcHRpb24nPjwvcD4KKzxkaXYgaWQ9J2NvbnNvbGUnPjwvZGl2PgorCis8
c2NyaXB0PgorICAgIHZhciBlbGVtZW50OworICAgIHZhciBhZGp1c3RlZE5vZGU7CisgICAgZnVu
Y3Rpb24gZmluZEFic29sdXRlUG9zaXRpb24obm9kZSkgeworICAgICAgICB2YXIgcG9zID0gbmV3
IE9iamVjdCgpOworICAgICAgICBwb3MubGVmdCA9IDA7IHBvcy50b3AgPSAwOworICAgICAgICBk
byB7CisgICAgICAgICAgICBwb3MubGVmdCArPSBub2RlLm9mZnNldExlZnQ7CisgICAgICAgICAg
ICBwb3MudG9wICs9IG5vZGUub2Zmc2V0VG9wOworICAgICAgICB9IHdoaWxlIChub2RlID0gbm9k
ZS5vZmZzZXRQYXJlbnQpOworICAgICAgICByZXR1cm4gcG9zOworICAgIH0KKyAgICAKKyAgICBm
dW5jdGlvbiB0ZXN0RGlyZWN0VG91Y2goZWxlbWVudCkKKyAgICB7CisgICAgICAgIHZhciBwb3Mg
PSBmaW5kQWJzb2x1dGVQb3NpdGlvbihlbGVtZW50KTsKKyAgICAgICAgdmFyIHggPSBwb3MubGVm
dCArIGVsZW1lbnQuY2xpZW50V2lkdGgvMiAtIDE7CisgICAgICAgIHZhciB5ID0gcG9zLnRvcCAr
IGVsZW1lbnQuY2xpZW50SGVpZ2h0LzIgLSAxOworICAgICAgICB2YXIgdyA9IDM7CisgICAgICAg
IHZhciBoID0gMzsKKyAgICAgICAgdmFyIGFkanVzdGVkTm9kZSA9IGludGVybmFscy50b3VjaE5v
ZGVBZGp1c3RlZFRvQmVzdE5vZGVGb3JHZXN0dXJlVGFwKHgsIHksIHcsIGgsIGRvY3VtZW50KTsK
KyAgICAgICAgaWYgKGFkanVzdGVkTm9kZS5ub2RlVHlwZSA9PSAzKSAvLyBURVhUIG5vZGUKKyAg
ICAgICAgICAgIGFkanVzdGVkTm9kZSA9IGFkanVzdGVkTm9kZS5wYXJlbnROb2RlOworICAgICAg
ICByZXR1cm4gYWRqdXN0ZWROb2RlOworICAgIH0KKyAgICAKKyAgICBmdW5jdGlvbiB0ZXN0RG91
YmxlVG91Y2goZWxlbWVudDEsIGVsZW1lbnQyLCBvZmZzZXQpCisgICAgeworICAgICAgICB2YXIg
cG9zMSA9IGZpbmRBYnNvbHV0ZVBvc2l0aW9uKGVsZW1lbnQxKTsKKyAgICAgICAgdmFyIHBvczIg
PSBmaW5kQWJzb2x1dGVQb3NpdGlvbihlbGVtZW50Mik7CisgICAgICAgIC8vIFdlIGFzc3VtZSB0
aGUgZWxlbWVudHMgaGF2ZSB0aGUgc2FtZSB4IGNvb3JkIGFuZCB3aWR0aC4KKyAgICAgICAgdmFy
IHggPSBwb3MxLmxlZnQgKyBlbGVtZW50MS5jbGllbnRXaWR0aC8yIC0gMTsKKyAgICAgICAgdmFy
IHkxID0gcG9zMS50b3AgKyBlbGVtZW50MS5jbGllbnRIZWlnaHQvMiArIDE7CisgICAgICAgIHZh
ciB5MiA9IHBvczIudG9wICsgZWxlbWVudDIuY2xpZW50SGVpZ2h0LzIgLSAxOworICAgICAgICB2
YXIgdyA9IHkyIC0geTE7CisgICAgICAgIHZhciBoID0geTIgLSB5MTsKKyAgICAgICAgdmFyIGFk
anVzdGVkTm9kZSA9IGludGVybmFscy50b3VjaE5vZGVBZGp1c3RlZFRvQmVzdE5vZGVGb3JHZXN0
dXJlVGFwKHgsIHkxICsgb2Zmc2V0LCB3LCBoLCBkb2N1bWVudCk7CisgICAgICAgIGlmIChhZGp1
c3RlZE5vZGUubm9kZVR5cGUgPT0gMykgLy8gVEVYVCBub2RlCisgICAgICAgICAgICBhZGp1c3Rl
ZE5vZGUgPSBhZGp1c3RlZE5vZGUucGFyZW50Tm9kZTsKKyAgICAgICAgcmV0dXJuIGFkanVzdGVk
Tm9kZTsKKyAgICB9CisgICAgCisgICAgZnVuY3Rpb24gdGVzdERpcmVjdFRvdWNoZXMoKQorICAg
IHsKKyAgICAgICAgZGVidWcoJ1Rlc3Rpbmcgc21hbGwgZGlyZWN0IGhpdHMnKTsKKyAgICAgICAg
CisgICAgICAgIGVsZW1lbnQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbXlib3gxJyk7Cisg
ICAgICAgIGFkanVzdGVkTm9kZSA9IHRlc3REaXJlY3RUb3VjaChlbGVtZW50KTsKKyAgICAgICAg
c2hvdWxkQmUoJ2FkanVzdGVkTm9kZS5pZCcsICdlbGVtZW50LmlkJyk7CisgICAgICAgIAorICAg
ICAgICBlbGVtZW50ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ215Ym94MicpOworICAgICAg
ICBhZGp1c3RlZE5vZGUgPSB0ZXN0RGlyZWN0VG91Y2goZWxlbWVudCk7CisgICAgICAgIHNob3Vs
ZEJlKCdhZGp1c3RlZE5vZGUuaWQnLCAnZWxlbWVudC5pZCcpOworICAgIH0KKyAgICAKKyAgICBm
dW5jdGlvbiB0ZXN0UHJlZmVyZWRUb3VjaCgpCisgICAgeworICAgICAgICBkZWJ1ZygnVGVzdGlu
ZyBwcmVmZXJlZCBoaXRzJyk7CisgICAgICAgIAorICAgICAgICBlbGVtZW50MSA9IGRvY3VtZW50
LmdldEVsZW1lbnRCeUlkKCdteWJveDEnKTsKKyAgICAgICAgZWxlbWVudDIgPSBkb2N1bWVudC5n
ZXRFbGVtZW50QnlJZCgnbXlib3gyJyk7CisgICAgICAgIGFkanVzdGVkTm9kZSA9IHRlc3REb3Vi
bGVUb3VjaChlbGVtZW50MSwgZWxlbWVudDIsIDApOworICAgICAgICBzaG91bGRCZSgnYWRqdXN0
ZWROb2RlLmlkJywgJ2VsZW1lbnQxLmlkJyk7CisKKyAgICAgICAgLy8gRmlyc3QgdGVzdCB3YXMg
Y2VudGVyZWQsIG5vdyBtb3ZlIHRoZSB0ZXN0IGNsb3NlciB0byB0aGUgd3Jvbmcgbm9kZSwgYW5k
IGVuc3VyZSB3ZSBzdGlsbCBnZXQgdGhlIHByZWZlcmVkIG5vZGUuCisgICAgICAgIGFkanVzdGVk
Tm9kZSA9IHRlc3REb3VibGVUb3VjaChlbGVtZW50MSwgZWxlbWVudDIsIDUpOworICAgICAgICBz
aG91bGRCZSgnYWRqdXN0ZWROb2RlLmlkJywgJ2VsZW1lbnQxLmlkJyk7CisgICAgICAgIAorICAg
ICAgICBhZGp1c3RlZE5vZGUgPSB0ZXN0RG91YmxlVG91Y2goZWxlbWVudDEsIGVsZW1lbnQyLCAx
MCk7CisgICAgICAgIHNob3VsZEJlKCdhZGp1c3RlZE5vZGUuaWQnLCAnZWxlbWVudDEuaWQnKTsK
KyAgICB9CisgICAgCisgICAgZnVuY3Rpb24gcnVuVGVzdHMoKQorICAgIHsKKyAgICAgICAgaWYg
KHdpbmRvdy5sYXlvdXRUZXN0Q29udHJvbGxlciAmJiB3aW5kb3cuaW50ZXJuYWxzKSB7CisgICAg
ICAgICAgICBkZXNjcmlwdGlvbignVGVzdCB0aGUgY2FzZSB3aGVyZSBhIGNsaWNrYWJsZSB0YXJn
ZXQgaXMgbmVzdGVkIGluc2lkZSBhIGRvY3VtZW50IHRoYXQgaXMgbW9uaXRvcmluZyBjbGlja3Mu
IFRoZSB0YXJnZXQgd2l0aCB0aGUgbG9jYWwgZXZlbnQtaGFuZGxlciBzaG91bGQgYmUgY2hvc2Vu
IGlmIG11bHRpcGxlIHRhcmdldHMgYXJlIHRvdWNoZWQuJyk7CisgICAgICAgICAgICBsYXlvdXRU
ZXN0Q29udHJvbGxlci5kdW1wQXNUZXh0KCk7CisgICAgICAgICAgICBsYXlvdXRUZXN0Q29udHJv
bGxlci53YWl0VW50aWxEb25lKCk7CisgICAgICAgICAgICB0ZXN0RGlyZWN0VG91Y2hlcygpOwor
ICAgICAgICAgICAgdGVzdFByZWZlcmVkVG91Y2goKTsKKyAgICAgICAgICAgIGlzU3VjY2Vzc2Z1
bGx5UGFyc2VkKCk7CisgICAgICAgICAgICBsYXlvdXRUZXN0Q29udHJvbGxlci5ub3RpZnlEb25l
KCk7CisgICAgICAgIH0KKyAgICB9Cis8L3NjcmlwdD4KKzwvYm9keT4KKzwvaHRtbD4KXCBObyBu
ZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy90b3VjaGFkanVz
dG1lbnQvdG91Y2gtaW5saW5lcy1leHBlY3RlZC50eHQgYi9MYXlvdXRUZXN0cy90b3VjaGFkanVz
dG1lbnQvdG91Y2gtaW5saW5lcy1leHBlY3RlZC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMDAwMDAwMC4uN2UxNGJmZQotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL3RvdWNo
YWRqdXN0bWVudC90b3VjaC1pbmxpbmVzLWV4cGVjdGVkLnR4dApAQCAtMCwwICsxLDI5IEBACitz
b21lIGxpbmsKK3NvbWUgbGluayBicmVha2luZyBsaW5lcyBhbmQgbGluaworaG9sYSBtdW5kbyEg
YSBzcGxpdCB1cCBsaW5rCitoZWxsbyB3b3JsZCBzb21lIGxpbmsgYWxzbyBicmVha2luZworaGkg
dGhlcmUgc29tZSBsaW5rIHRoYXQgaXMgYnJlYWtpbmcgbXVsdGlwbGUgbGluZXMganVzdCBmb3Ig
dGhlIHZlcnkgZnVuIG9mIGl0CisKK1Rlc3QgdG91Y2gtYWRqdXN0bWVudCBvbiBpbmxpbmUgbGlu
a3MuIE1ha2luZyBzdXJlIHdlIGNhbiBoaXQgb3ZlciBsaW5lLWJyZWFrcywgYW5kIGNhbiBtaXNz
IHdoZW4gdGFwcGluZyBiZXR3ZWVuIHBhcnRzIG9mIGEgbGluZS1icm9rZW4gbGluay4KKworT24g
c3VjY2VzcywgeW91IHdpbGwgc2VlIGEgc2VyaWVzIG9mICJQQVNTIiBtZXNzYWdlcywgZm9sbG93
ZWQgYnkgIlRFU1QgQ09NUExFVEUiLgorCisKK1Rlc3Qgc29tZSBkaXJlY3QgaGl0cworUEFTUyBh
ZGp1c3RlZE5vZGUuaWQgaXMgIjEiCitQQVNTIGFkanVzdGVkTm9kZS5pZCBpcyAiMiIKK1BBU1Mg
YWRqdXN0ZWROb2RlLmlkIGlzICI0IgorUEFTUyBhZGp1c3RlZE5vZGUuaWQgaXMgIjYiCitUZXN0
IGEgZmV3IGRpcmVjdCBtaXNzZXMKK1BBU1MgYWRqdXN0ZWROb2RlLmlkIGlzICIiCitQQVNTIGFk
anVzdGVkTm9kZS5pZCBpcyAiIgorVGVzdCBzb21lIGluLWRpcmVjdCBoaXRzCitQQVNTIGFkanVz
dGVkTm9kZS5pZCBpcyAiMiIKK1BBU1MgYWRqdXN0ZWROb2RlLmlkIGlzICIzIgorUEFTUyBhZGp1
c3RlZE5vZGUuaWQgaXMgIjQiCitQQVNTIGFkanVzdGVkTm9kZS5pZCBpcyAiNCIKK1BBU1MgYWRq
dXN0ZWROb2RlLmlkIGlzICI2IgorUEFTUyBzdWNjZXNzZnVsbHlQYXJzZWQgaXMgdHJ1ZQorCitU
RVNUIENPTVBMRVRFCisKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3RvdWNoYWRqdXN0bWVudC90
b3VjaC1pbmxpbmVzLmh0bWwgYi9MYXlvdXRUZXN0cy90b3VjaGFkanVzdG1lbnQvdG91Y2gtaW5s
aW5lcy5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjkyNjZiY2QKLS0t
IC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy90b3VjaGFkanVzdG1lbnQvdG91Y2gtaW5saW5l
cy5odG1sCkBAIC0wLDAgKzEsOTggQEAKKzxodG1sPgorPGhlYWQ+CisgICAgPHNjcmlwdCBzcmM9
Ii4uL2Zhc3QvanMvcmVzb3VyY2VzL2pzLXRlc3QtcHJlLmpzIj48L3NjcmlwdD4KKzwvaGVhZD4K
Kzxib2R5IG9ubG9hZD0icnVuVGVzdHMoKSI+CisgICAgPHAgc3R5bGU9IndpZHRoOiAxMGVtOyI+
CisgICAgPGEgaWQ9IjEiIGhyZWY9IiMxIj5zb21lIGxpbms8L2E+PGJyPgorICAgIDxhIGlkPSIy
IiBocmVmPSIjMiI+c29tZSBsaW5rIGJyZWFraW5nIGxpbmVzPC9hPiBhbmQgPGEgaWQ9IjMiIGhy
ZWY9IiMzIj5saW5rPC9hPjxicj4KKyAgICBob2xhIG11bmRvISA8YSBpZD0iNCIgaHJlZj0iIzQi
PmEgc3BsaXQgdXAgbGluazwvYT48YnI+CisgICAgaGVsbG8gd29ybGQgPGEgaWQ9IjUiIGhyZWY9
IiM1Ij5zb21lIGxpbmsgYWxzbyBicmVha2luZzwvYT48YnI+CisgICAgaGkgdGhlcmUgPGEgaWQ9
IjYiIGhyZWY9IiM2Ij5zb21lIGxpbmsgdGhhdCBpcyBicmVha2luZyBtdWx0aXBsZSBsaW5lcyBq
dXN0IGZvciB0aGUgdmVyeSBmdW4gb2YgaXQ8L2E+PGJyPjxicj4KKyAgICA8L3A+CisgICAgCisg
ICAgCis8cCBpZD0nZGVzY3JpcHRpb24nPjwvcD4KKzxkaXYgaWQ9J2NvbnNvbGUnPjwvZGl2Pgor
Cis8c2NyaXB0PgorICAgIHZhciBlbGVtZW50OworICAgIHZhciBhZGp1c3RlZE5vZGU7CisgICAg
ZnVuY3Rpb24gdGVzdFJvdW5kVG91Y2goeCwgeSwgcikKKyAgICB7CisgICAgICAgIHZhciB4ID0g
eCAtIHI7CisgICAgICAgIHZhciB5ID0geSAtIHI7CisgICAgICAgIHZhciB3ID0gciAqIDI7Cisg
ICAgICAgIHZhciBoID0gciAqIDI7CisgICAgICAgIHZhciBhZGp1c3RlZE5vZGUgPSBpbnRlcm5h
bHMudG91Y2hOb2RlQWRqdXN0ZWRUb0Jlc3ROb2RlRm9yR2VzdHVyZVRhcCh4LCB5LCB3LCBoLCBk
b2N1bWVudCk7CisgICAgICAgIGlmIChhZGp1c3RlZE5vZGUubm9kZVR5cGUgPT0gMykgLy8gVEVY
VCBub2RlCisgICAgICAgICAgICBhZGp1c3RlZE5vZGUgPSBhZGp1c3RlZE5vZGUucGFyZW50Tm9k
ZTsKKyAgICAgICAgcmV0dXJuIGFkanVzdGVkTm9kZTsKKyAgICB9CisgICAgICAgIAorICAgIGZ1
bmN0aW9uIHRlc3REaXJlY3RUb3VjaGVzKCkKKyAgICB7CisgICAgICAgIGRlYnVnKCdUZXN0IHNv
bWUgZGlyZWN0IGhpdHMnKTsKKyAgICAgICAgCisgICAgICAgIGFkanVzdGVkTm9kZSA9IHRlc3RS
b3VuZFRvdWNoKDMwLCAyMCwgOCkKKyAgICAgICAgc2hvdWxkQmVFcXVhbFRvU3RyaW5nKCdhZGp1
c3RlZE5vZGUuaWQnLCAnMScpOworICAgICAgICAKKyAgICAgICAgYWRqdXN0ZWROb2RlID0gdGVz
dFJvdW5kVG91Y2goMzAsIDYwLCA4KQorICAgICAgICBzaG91bGRCZUVxdWFsVG9TdHJpbmcoJ2Fk
anVzdGVkTm9kZS5pZCcsICcyJyk7CisKKyAgICAgICAgYWRqdXN0ZWROb2RlID0gdGVzdFJvdW5k
VG91Y2goMTIwLCA4MCwgOCkKKyAgICAgICAgc2hvdWxkQmVFcXVhbFRvU3RyaW5nKCdhZGp1c3Rl
ZE5vZGUuaWQnLCAnNCcpOworCisgICAgICAgIGFkanVzdGVkTm9kZSA9IHRlc3RSb3VuZFRvdWNo
KDgwLCAxODAsIDgpCisgICAgICAgIHNob3VsZEJlRXF1YWxUb1N0cmluZygnYWRqdXN0ZWROb2Rl
LmlkJywgJzYnKTsKKyAgICB9CisgICAgCisgICAgZnVuY3Rpb24gdGVzdERpcmVjdE1pc3Nlcygp
CisgICAgeworICAgICAgICBkZWJ1ZygnVGVzdCBhIGZldyBkaXJlY3QgbWlzc2VzJyk7CisgICAg
ICAgIAorICAgICAgICBhZGp1c3RlZE5vZGUgPSB0ZXN0Um91bmRUb3VjaCg1NiwgNjAsIDgpCisg
ICAgICAgIHNob3VsZEJlRXF1YWxUb1N0cmluZygnYWRqdXN0ZWROb2RlLmlkJywgJycpOworICAg
ICAgICAKKyAgICAgICAgYWRqdXN0ZWROb2RlID0gdGVzdFJvdW5kVG91Y2goMjAsIDE2MCwgNCkK
KyAgICAgICAgc2hvdWxkQmVFcXVhbFRvU3RyaW5nKCdhZGp1c3RlZE5vZGUuaWQnLCAnJyk7CisK
KyAgICB9CisgICAgCisgICAgZnVuY3Rpb24gdGVzdEluZGlyZWN0VG91Y2hlcygpCisgICAgewor
ICAgICAgICBkZWJ1ZygnVGVzdCBzb21lIGluLWRpcmVjdCBoaXRzJyk7CisgICAgICAgIAorICAg
ICAgICBhZGp1c3RlZE5vZGUgPSB0ZXN0Um91bmRUb3VjaCg1NiwgNjAsIDIwKQorICAgICAgICBz
aG91bGRCZUVxdWFsVG9TdHJpbmcoJ2FkanVzdGVkTm9kZS5pZCcsICcyJyk7CisKKyAgICAgICAg
YWRqdXN0ZWROb2RlID0gdGVzdFJvdW5kVG91Y2goODUsIDgwLCAyMCkKKyAgICAgICAgc2hvdWxk
QmVFcXVhbFRvU3RyaW5nKCdhZGp1c3RlZE5vZGUuaWQnLCAnMycpOworCisgICAgICAgIGFkanVz
dGVkTm9kZSA9IHRlc3RSb3VuZFRvdWNoKDEyMCwgNjAsIDIwKQorICAgICAgICBzaG91bGRCZUVx
dWFsVG9TdHJpbmcoJ2FkanVzdGVkTm9kZS5pZCcsICc0Jyk7CisKKyAgICAgICAgYWRqdXN0ZWRO
b2RlID0gdGVzdFJvdW5kVG91Y2goNDAsIDEwMCwgMjApCisgICAgICAgIHNob3VsZEJlRXF1YWxU
b1N0cmluZygnYWRqdXN0ZWROb2RlLmlkJywgJzQnKTsKKworICAgICAgICBhZGp1c3RlZE5vZGUg
PSB0ZXN0Um91bmRUb3VjaCgyMCwgMTY1LCAyMCkKKyAgICAgICAgc2hvdWxkQmVFcXVhbFRvU3Ry
aW5nKCdhZGp1c3RlZE5vZGUuaWQnLCAnNicpOworCisgICAgfQorICAgIAorICAgIGZ1bmN0aW9u
IHJ1blRlc3RzKCkKKyAgICB7CisgICAgICAgIGlmICh3aW5kb3cubGF5b3V0VGVzdENvbnRyb2xs
ZXIgJiYgd2luZG93LmludGVybmFscykgeworICAgICAgICAgICAgZGVzY3JpcHRpb24oJ1Rlc3Qg
dG91Y2gtYWRqdXN0bWVudCBvbiBpbmxpbmUgbGlua3MuIE1ha2luZyBzdXJlIHdlIGNhbiBoaXQg
b3ZlciBsaW5lLWJyZWFrcywgYW5kIGNhbiBtaXNzIHdoZW4gdGFwcGluZyBiZXR3ZWVuIHBhcnRz
IG9mIGEgbGluZS1icm9rZW4gbGluay4nKTsKKyAgICAgICAgICAgIGxheW91dFRlc3RDb250cm9s
bGVyLmR1bXBBc1RleHQoKTsKKyAgICAgICAgICAgIGxheW91dFRlc3RDb250cm9sbGVyLndhaXRV
bnRpbERvbmUoKTsKKyAgICAgICAgICAgIHRlc3REaXJlY3RUb3VjaGVzKCk7CisgICAgICAgICAg
ICB0ZXN0RGlyZWN0TWlzc2VzKCk7CisgICAgICAgICAgICB0ZXN0SW5kaXJlY3RUb3VjaGVzKCk7
CisgICAgICAgICAgICBpc1N1Y2Nlc3NmdWxseVBhcnNlZCgpOworICAgICAgICAgICAgbGF5b3V0
VGVzdENvbnRyb2xsZXIubm90aWZ5RG9uZSgpOworICAgICAgICB9CisgICAgfQorPC9zY3JpcHQ+
Cis8L2JvZHk+Cis8L2h0bWw+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCmlu
ZGV4IGJlZTcwODcuLjJmMjg1ZGUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxv
ZworKysgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKQEAgLTEsNSArMSw4NCBAQAogMjAxMi0w
Mi0yNCAgQWxsYW4gU2FuZGZlbGQgSmVuc2VuICA8YWxsYW4uamVuc2VuQG5va2lhLmNvbT4KIAor
ICAgICAgICBTZWxlY3QgYmVzdCB0YXJnZXQgZm9yIHRhcCBnZXN0dXJlLgorICAgICAgICBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9Nzg4MDEKKworICAgICAgICBSZXZp
ZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBUaGUgbmV3IEFQSSBpcyBhdmFpbGFi
bGUgdGhyb3VnaCBFdmVudEhhbmRsZXI6Om5vZGVGb3JUYXBHZXN0dXJlQXRUb3VjaFBvaW50LCBi
dXQKKyAgICAgICAgaW1wbGVtZW50YXRpb24gZGV0YWlscyBoYXZlIGJlZW4gcGxhY2VkIGluIHBs
YXRmb3JtL0hpdFRlc3RSZXN1bHRNZXRyaWNzLgorCisgICAgICAgIFRoZSBkZWZhdWx0IGhpdCBk
ZXRlY3Rpb24gaXMgcGVyZm9ybWVkIGJ5IG1lYXN1cmluZyB0aGUgZGlzdGFuY2UgdG8gdGhlIGNl
bnRlcgorICAgICAgICBsaW5lcyBvZiB0aGUgYWJzb2x1dGUgcmVjdHMgb2YgdGhlIGhpdCBub2Rl
cy4gQWJzb2x1dGUgcmVjdHMgYXJlIHVzZWQgaW5zdGVhZAorICAgICAgICBvZiBib3VuZGluZyBy
ZWN0cyB0byBtYWtlIGhpdC1kZXRlY3RpbmcgYWdhaW5zdCBsaW5rcyBvdmVyIGxpbmUgYnJlYWtz
LiBEaXN0YW5jZQorICAgICAgICB0byBjZW50ZXIgbGluZSBpcyB1c2VkIHRvIG1ha2UgaXQgZWFz
aWVyIHRvIGhpdCBzbWFsbCBsaW5rcyBuZXh0IHRvIGxhcmdlIGxpbmtzLgorICAgICAgICBGb3Ig
bGluZS1yZWN0cyB0aGUgZGlzdGFuY2UgdG8gdGhlIGNlbnRlci1saW5lIGlzIGEgYmV0dGVyIGV4
cHJlc3Npb24gb2YgdGhlIGRpc3RhbmNlCisgICAgICAgIHRvIGEgcmVjdGFuZ2xlcyBjZW50ZXIg
dGhhbiB0aGUgZGlzdGFuY2UgdG8gdGhlIGNlbnRlci1wb2ludC4KKworICAgICAgICBUbyBzdXBw
b3J0IHRoZSBkaXN0YW5jZSBjYWxjdWxhdGF0aW9uLCB0aGlzIHBhdGNoIGFsc28gaW1wbGVtZW50
IGEgY29uc2lzdGVudCBzZXQgb2YKKyAgICAgICAgZGlzdGFuY2UgYW5kIGFyZWEgZnVuY3Rpb25z
IGZvciBSZWN0LCBQb2ludCBhbmQgU2l6ZSBjbGFzc2VzLgorCisgICAgICAgIFRlc3RzOiB0b3Vj
aGFkanVzdG1lbnQvZXZlbnQtdHJpZ2dlcmVkLXdpZGdldHMuaHRtbAorICAgICAgICAgICAgICAg
dG91Y2hhZGp1c3RtZW50L25lc3RlZC10b3VjaC5odG1sCisgICAgICAgICAgICAgICB0b3VjaGFk
anVzdG1lbnQvdG91Y2gtaW5saW5lcy5odG1sCisKKyAgICAgICAgKiBUYXJnZXQucHJpOgorICAg
ICAgICAqIHBhZ2UvRXZlbnRIYW5kbGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkV2ZW50SGFu
ZGxlcjo6aGFuZGxlR2VzdHVyZUV2ZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkV2ZW50SGFuZGxl
cjo6aGFuZGxlR2VzdHVyZVRhcCk6CisgICAgICAgIChXZWJDb3JlOjpFdmVudEhhbmRsZXI6Om5v
ZGVGb3JUYXBHZXN0dXJlQXRUb3VjaFBvaW50KToKKyAgICAgICAgKiBwYWdlL0V2ZW50SGFuZGxl
ci5oOgorICAgICAgICAqIHBhZ2UvVG91Y2hBZGp1c3RtZW50LmNwcDogQWRkZWQuCisgICAgICAg
IChXZWJDb3JlOjpUb3VjaEFkanVzdG1lbnQ6OkhpdFRlc3RRdWFkOjpIaXRUZXN0UXVhZCk6Cisg
ICAgICAgIChXZWJDb3JlOjpUb3VjaEFkanVzdG1lbnQ6OkhpdFRlc3RRdWFkOjpub2RlKToKKyAg
ICAgICAgKFdlYkNvcmU6OlRvdWNoQWRqdXN0bWVudDo6SGl0VGVzdFF1YWQ6OnF1YWQpOgorICAg
ICAgICAoV2ViQ29yZTo6VG91Y2hBZGp1c3RtZW50OjpIaXRUZXN0UXVhZDo6Ym91bmRpbmdCb3gp
OgorICAgICAgICAoV2ViQ29yZTo6VG91Y2hBZGp1c3RtZW50Ojpub2RlUmVzcG9uZHNUb1RhcEdl
c3R1cmUpOgorICAgICAgICAoV2ViQ29yZTo6VG91Y2hBZGp1c3RtZW50OjphcHBlbmRBYnNvbHV0
ZVF1YWRzRm9yTm9kZVRvSGl0TGlzdCk6CisgICAgICAgIChXZWJDb3JlOjpUb3VjaEFkanVzdG1l
bnQ6OmNvbXBpbGVIaXRMaXN0KToKKyAgICAgICAgKFdlYkNvcmU6OlRvdWNoQWRqdXN0bWVudDo6
ZGlzdGFuY2VUb0hpdFRlc3RRdWFkKToKKyAgICAgICAgKFdlYkNvcmU6OlRvdWNoQWRqdXN0bWVu
dDo6aW50ZXJzZWN0aW9uV2l0aEhpdFRlc3RRdWFkKToKKyAgICAgICAgKFdlYkNvcmU6OlRvdWNo
QWRqdXN0bWVudDo6ZmluZE5vZGVXaXRoTG93ZXN0TWV0cmljKToKKyAgICAgICAgKFdlYkNvcmU6
OlRvdWNoQWRqdXN0bWVudDo6ZmluZE5vZGVXaXRoSGlnaGVzdE1ldHJpYyk6CisgICAgICAgIChX
ZWJDb3JlOjpmaW5kQmVzdENhbmRpZGF0ZUZvckdlc3R1cmVUYXApOgorICAgICAgICAqIHBhZ2Uv
VG91Y2hBZGp1c3RtZW50Lmg6IEFkZGVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0Zs
b2F0UG9pbnQuaDoKKyAgICAgICAgKFdlYkNvcmU6OkZsb2F0UG9pbnQ6OkZsb2F0UG9pbnQpOgor
ICAgICAgICAoV2ViQ29yZTo6RmxvYXRQb2ludDo6ZGlzdGFuY2VUb1BvaW50KToKKyAgICAgICAg
KFdlYkNvcmU6OkZsb2F0UG9pbnQ6OmRpc3RhbmNlU3F1YXJlZFRvUG9pbnQpOgorICAgICAgICAq
IHBsYXRmb3JtL2dyYXBoaWNzL0Zsb2F0UXVhZC5oOgorICAgICAgICAoV2ViQ29yZTo6RmxvYXRR
dWFkOjpjZW50ZXIpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0Zsb2F0UmVjdC5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpkaXN0YW5jZVRvSW50ZXJ2YWwpOgorICAgICAgICAoV2ViQ29y
ZTo6RmxvYXRSZWN0OjpkaWZmZXJlbmNlVG9Qb2ludCk6CisgICAgICAgIChXZWJDb3JlOjpGbG9h
dFJlY3Q6OmRpc3RhbmNlVG9Qb2ludCk6CisgICAgICAgIChXZWJDb3JlOjpGbG9hdFJlY3Q6OmRp
ZmZlcmVuY2VGcm9tQ2VudGVyTGluZVRvUG9pbnQpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBo
aWNzL0Zsb2F0UmVjdC5oOgorICAgICAgICAoV2ViQ29yZTo6RmxvYXRSZWN0OjpkaXN0YW5jZVNx
dWFyZWRUb1BvaW50KToKKyAgICAgICAgKFdlYkNvcmU6OkZsb2F0UmVjdDo6ZGlzdGFuY2VTcXVh
cmVkRnJvbUNlbnRlckxpbmVUb1BvaW50KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9G
bG9hdFNpemUuaDoKKyAgICAgICAgKFdlYkNvcmU6OkZsb2F0U2l6ZTo6YXJlYSk6CisgICAgICAg
ICogcGxhdGZvcm0vZ3JhcGhpY3MvSW50UG9pbnQuaDoKKyAgICAgICAgKFdlYkNvcmU6OkludFBv
aW50OjpsZW5ndGhTcXVhcmVkKToKKyAgICAgICAgKFdlYkNvcmU6OkludFBvaW50OjpkaXN0YW5j
ZVNxdWFyZWRUb1BvaW50KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9JbnRSZWN0LmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OmRpc3RhbmNlVG9JbnRlcnZhbCk6CisgICAgICAgIChXZWJD
b3JlOjpJbnRSZWN0OjpkaWZmZXJlbmNlVG9Qb2ludCk6CisgICAgICAgIChXZWJDb3JlOjpJbnRS
ZWN0OjpkaWZmZXJlbmNlRnJvbUNlbnRlckxpbmVUb1BvaW50KToKKyAgICAgICAgKiBwbGF0Zm9y
bS9ncmFwaGljcy9JbnRSZWN0Lmg6CisgICAgICAgIChXZWJDb3JlOjpJbnRSZWN0OjpkaXN0YW5j
ZVNxdWFyZWRUb1BvaW50KToKKyAgICAgICAgKFdlYkNvcmU6OkludFJlY3Q6OmRpc3RhbmNlU3F1
YXJlZEZyb21DZW50ZXJMaW5lVG9Qb2ludCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mv
SW50U2l6ZS5oOgorICAgICAgICAoV2ViQ29yZTo6SW50U2l6ZTo6YXJlYSk6CisgICAgICAgIChX
ZWJDb3JlOjpJbnRTaXplOjpkaWFnb25hbExlbmd0aFNxdWFyZWQpOgorICAgICAgICAqIHRlc3Rp
bmcvSW50ZXJuYWxzLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkludGVybmFsczo6dG91Y2hQb3Np
dGlvbkFkanVzdGVkVG9CZXN0Tm9kZUZvckdlc3R1cmVUYXApOgorICAgICAgICAoV2ViQ29yZTo6
SW50ZXJuYWxzOjp0b3VjaE5vZGVBZGp1c3RlZFRvQmVzdE5vZGVGb3JHZXN0dXJlVGFwKToKKyAg
ICAgICAgKiB0ZXN0aW5nL0ludGVybmFscy5oOgorICAgICAgICAqIHRlc3RpbmcvSW50ZXJuYWxz
LmlkbDoKKworMjAxMi0wMi0yNCAgQWxsYW4gU2FuZGZlbGQgSmVuc2VuICA8YWxsYW4uamVuc2Vu
QG5va2lhLmNvbT4KKwogICAgICAgICBSZWZhY3RvciBFdmVudEhhbmRsZXI6OmhhbmRsZUdlc3R1
cmVFdmVudC4KICAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTc5NDc2CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1RhcmdldC5wcmkgYi9Tb3VyY2Uv
V2ViQ29yZS9UYXJnZXQucHJpCmluZGV4IDRkNTI5MmQuLjYxODIwMjggMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL1RhcmdldC5wcmkKKysrIGIvU291cmNlL1dlYkNvcmUvVGFyZ2V0LnByaQpA
QCAtMTAyMSw2ICsxMDIxLDcgQEAgU09VUkNFUyArPSBcCiAgICAgcGFnZS9TZWN1cml0eVBvbGlj
eS5jcHAgXAogICAgIHBhZ2UvU2V0dGluZ3MuY3BwIFwKICAgICBwYWdlL1NwYXRpYWxOYXZpZ2F0
aW9uLmNwcCBcCisgICAgcGFnZS9Ub3VjaEFkanVzdG1lbnQuY3BwIFwKICAgICBwYWdlL1N1c3Bl
bmRhYmxlVGltZXIuY3BwIFwKICAgICBwYWdlL1VzZXJDb250ZW50VVJMUGF0dGVybi5jcHAgXAog
ICAgIHBhZ2UvV2luZG93RmVhdHVyZXMuY3BwIFwKQEAgLTIwOTQsNiArMjA5NSw3IEBAIEhFQURF
UlMgKz0gXAogICAgIHBhZ2UvU3BlZWNoSW5wdXRMaXN0ZW5lci5oIFwKICAgICBwYWdlL1NwZWVj
aElucHV0UmVzdWx0LmggXAogICAgIHBhZ2UvU3BlZWNoSW5wdXRSZXN1bHRMaXN0LmggXAorICAg
IHBhZ2UvVG91Y2hBZGp1c3RtZW50LmggXAogICAgIHBhZ2UvV2ViS2l0QW5pbWF0aW9uLmggXAog
ICAgIHBhZ2UvV2ViS2l0QW5pbWF0aW9uTGlzdC5oIFwKICAgICBwYWdlL1dpbmRvd0ZlYXR1cmVz
LmggXApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGFnZS9FdmVudEhhbmRsZXIuY3BwIGIv
U291cmNlL1dlYkNvcmUvcGFnZS9FdmVudEhhbmRsZXIuY3BwCmluZGV4IDNjMTBiNzUuLjNhNjM3
NGEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRXZlbnRIYW5kbGVyLmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9wYWdlL0V2ZW50SGFuZGxlci5jcHAKQEAgLTg4LDYgKzg4LDEwIEBA
CiAjaW5jbHVkZSAiUGxhdGZvcm1HZXN0dXJlRXZlbnQuaCIKICNlbmRpZgogCisjaWYgRU5BQkxF
KFRPVUNIX0FESlVTVE1FTlQpCisjaW5jbHVkZSAiVG91Y2hBZGp1c3RtZW50LmgiCisjZW5kaWYK
KwogI2lmIEVOQUJMRShTVkcpCiAjaW5jbHVkZSAiU1ZHRG9jdW1lbnQuaCIKICNpbmNsdWRlICJT
VkdFbGVtZW50SW5zdGFuY2UuaCIKQEAgLTIzNjAsMTIgKzIzNjQsMjMgQEAgYm9vbCBFdmVudEhh
bmRsZXI6OmhhbmRsZUdlc3R1cmVFdmVudChjb25zdCBQbGF0Zm9ybUdlc3R1cmVFdmVudCYgZ2Vz
dHVyZUV2ZW50KQogCiBib29sIEV2ZW50SGFuZGxlcjo6aGFuZGxlR2VzdHVyZVRhcChjb25zdCBQ
bGF0Zm9ybUdlc3R1cmVFdmVudCYgZ2VzdHVyZUV2ZW50KQogeworICAgIExheW91dFBvaW50IGFk
anVzdGVkUG9pbnQgPSBnZXN0dXJlRXZlbnQucG9zaXRpb24oKTsKKyNpZiBFTkFCTEUoVE9VQ0hf
QURKVVNUTUVOVCkKKyAgICBpZiAoIWdlc3R1cmVFdmVudC5hcmVhKCkuaXNFbXB0eSgpKSB7Cisg
ICAgICAgIE5vZGUqIHRhcmdldE5vZGUgPSAwOworICAgICAgICAvLyBGb3Igbm93IHdlIHVzZSB0
aGUgYWRqdXN0ZWQgcG9zaXRpb24gdG8gZW5zdXJlIHRoZSBsYXRlciByZWR1bmRhbnQgaGl0LXRl
c3RzIGhpdHMgdGhlIHJpZ2h0IG5vZGUuCisgICAgICAgIG5vZGVGb3JUYXBHZXN0dXJlQXRUb3Vj
aFBvaW50KGdlc3R1cmVFdmVudC5wb3NpdGlvbigpLCBJbnRTaXplKGdlc3R1cmVFdmVudC5hcmVh
KCkud2lkdGgoKSAvIDIsIGdlc3R1cmVFdmVudC5hcmVhKCkuaGVpZ2h0KCkgLyAyKSwgYWRqdXN0
ZWRQb2ludCwgdGFyZ2V0Tm9kZSk7CisgICAgICAgIGlmICghdGFyZ2V0Tm9kZSkKKyAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisjZW5kaWYKKwogICAgIC8vIEZJWE1FOiBSZWZhY3Rv
ciB0aGlzIGNvZGUgdG8gbm90IGhpdCB0ZXN0IG11bHRpcGxlIHRpbWVzIG9uY2UgaGl0IHRlc3Rp
bmcKICAgICAvLyBoYXMgYmVlbiBjb3JyZWN0ZWQgYXMgc3VnZ2VzdGVkIGFib3ZlIGluIGhhbmRs
ZUdlc3R1cmVFdmVudCgpLgogICAgIGJvb2wgZGVmYXVsdFByZXZlbnRlZCA9IGZhbHNlOwotICAg
IFBsYXRmb3JtTW91c2VFdmVudCBmYWtlTW91c2VNb3ZlKGdlc3R1cmVFdmVudC5wb3NpdGlvbigp
LCBnZXN0dXJlRXZlbnQuZ2xvYmFsUG9zaXRpb24oKSwgTm9CdXR0b24sIFBsYXRmb3JtRXZlbnQ6
Ok1vdXNlTW92ZWQsIC8qIGNsaWNrQ291bnQgKi8gMSwgZ2VzdHVyZUV2ZW50LnNoaWZ0S2V5KCks
IGdlc3R1cmVFdmVudC5jdHJsS2V5KCksIGdlc3R1cmVFdmVudC5hbHRLZXkoKSwgZ2VzdHVyZUV2
ZW50Lm1ldGFLZXkoKSwgZ2VzdHVyZUV2ZW50LnRpbWVzdGFtcCgpKTsKLSAgICBQbGF0Zm9ybU1v
dXNlRXZlbnQgZmFrZU1vdXNlRG93bihnZXN0dXJlRXZlbnQucG9zaXRpb24oKSwgZ2VzdHVyZUV2
ZW50Lmdsb2JhbFBvc2l0aW9uKCksIExlZnRCdXR0b24sIFBsYXRmb3JtRXZlbnQ6Ok1vdXNlUHJl
c3NlZCwgLyogY2xpY2tDb3VudCAqLyAxLCBnZXN0dXJlRXZlbnQuc2hpZnRLZXkoKSwgZ2VzdHVy
ZUV2ZW50LmN0cmxLZXkoKSwgZ2VzdHVyZUV2ZW50LmFsdEtleSgpLCBnZXN0dXJlRXZlbnQubWV0
YUtleSgpLCBnZXN0dXJlRXZlbnQudGltZXN0YW1wKCkpOwotICAgIFBsYXRmb3JtTW91c2VFdmVu
dCBmYWtlTW91c2VVcChnZXN0dXJlRXZlbnQucG9zaXRpb24oKSwgZ2VzdHVyZUV2ZW50Lmdsb2Jh
bFBvc2l0aW9uKCksIExlZnRCdXR0b24sIFBsYXRmb3JtRXZlbnQ6Ok1vdXNlUmVsZWFzZWQsIC8q
IGNsaWNrQ291bnQgKi8gMSwgZ2VzdHVyZUV2ZW50LnNoaWZ0S2V5KCksIGdlc3R1cmVFdmVudC5j
dHJsS2V5KCksIGdlc3R1cmVFdmVudC5hbHRLZXkoKSwgZ2VzdHVyZUV2ZW50Lm1ldGFLZXkoKSwg
Z2VzdHVyZUV2ZW50LnRpbWVzdGFtcCgpKTsKKyAgICBQbGF0Zm9ybU1vdXNlRXZlbnQgZmFrZU1v
dXNlTW92ZShhZGp1c3RlZFBvaW50LCBnZXN0dXJlRXZlbnQuZ2xvYmFsUG9zaXRpb24oKSwgTm9C
dXR0b24sIFBsYXRmb3JtRXZlbnQ6Ok1vdXNlTW92ZWQsIC8qIGNsaWNrQ291bnQgKi8gMSwgZ2Vz
dHVyZUV2ZW50LnNoaWZ0S2V5KCksIGdlc3R1cmVFdmVudC5jdHJsS2V5KCksIGdlc3R1cmVFdmVu
dC5hbHRLZXkoKSwgZ2VzdHVyZUV2ZW50Lm1ldGFLZXkoKSwgZ2VzdHVyZUV2ZW50LnRpbWVzdGFt
cCgpKTsKKyAgICBQbGF0Zm9ybU1vdXNlRXZlbnQgZmFrZU1vdXNlRG93bihhZGp1c3RlZFBvaW50
LCBnZXN0dXJlRXZlbnQuZ2xvYmFsUG9zaXRpb24oKSwgTGVmdEJ1dHRvbiwgUGxhdGZvcm1FdmVu
dDo6TW91c2VQcmVzc2VkLCAvKiBjbGlja0NvdW50ICovIDEsIGdlc3R1cmVFdmVudC5zaGlmdEtl
eSgpLCBnZXN0dXJlRXZlbnQuY3RybEtleSgpLCBnZXN0dXJlRXZlbnQuYWx0S2V5KCksIGdlc3R1
cmVFdmVudC5tZXRhS2V5KCksIGdlc3R1cmVFdmVudC50aW1lc3RhbXAoKSk7CisgICAgUGxhdGZv
cm1Nb3VzZUV2ZW50IGZha2VNb3VzZVVwKGFkanVzdGVkUG9pbnQsIGdlc3R1cmVFdmVudC5nbG9i
YWxQb3NpdGlvbigpLCBMZWZ0QnV0dG9uLCBQbGF0Zm9ybUV2ZW50OjpNb3VzZVJlbGVhc2VkLCAv
KiBjbGlja0NvdW50ICovIDEsIGdlc3R1cmVFdmVudC5zaGlmdEtleSgpLCBnZXN0dXJlRXZlbnQu
Y3RybEtleSgpLCBnZXN0dXJlRXZlbnQuYWx0S2V5KCksIGdlc3R1cmVFdmVudC5tZXRhS2V5KCks
IGdlc3R1cmVFdmVudC50aW1lc3RhbXAoKSk7CiAgICAgbW91c2VNb3ZlZChmYWtlTW91c2VNb3Zl
KTsKICAgICBkZWZhdWx0UHJldmVudGVkIHw9IGhhbmRsZU1vdXNlUHJlc3NFdmVudChmYWtlTW91
c2VEb3duKTsKICAgICBkZWZhdWx0UHJldmVudGVkIHw9IGhhbmRsZU1vdXNlUmVsZWFzZUV2ZW50
KGZha2VNb3VzZVVwKTsKQEAgLTIzODUsNiArMjQwMCwxOSBAQCBib29sIEV2ZW50SGFuZGxlcjo6
aGFuZGxlR2VzdHVyZVNjcm9sbFVwZGF0ZShjb25zdCBQbGF0Zm9ybUdlc3R1cmVFdmVudCYgZ2Vz
dHVyZQogfQogI2VuZGlmCiAKKyNpZiBFTkFCTEUoVE9VQ0hfQURKVVNUTUVOVCkKK3ZvaWQgRXZl
bnRIYW5kbGVyOjpub2RlRm9yVGFwR2VzdHVyZUF0VG91Y2hQb2ludChjb25zdCBJbnRQb2ludCYg
dG91Y2hDZW50ZXIsIGNvbnN0IEludFNpemUmIHRvdWNoUmFkaXVzLCBJbnRQb2ludCYgdGFyZ2V0
UG9pbnQsIE5vZGUqJiB0YXJnZXROb2RlKQoreworICAgIEhpdFRlc3RSZXF1ZXN0OjpIaXRUZXN0
UmVxdWVzdFR5cGUgaGl0VHlwZSA9IEhpdFRlc3RSZXF1ZXN0OjpSZWFkT25seSB8IEhpdFRlc3RS
ZXF1ZXN0OjpBY3RpdmU7CisgICAgSW50UmVjdCB0b3VjaFJlY3QodG91Y2hDZW50ZXIgLSB0b3Vj
aFJhZGl1cywgSW50U2l6ZSh0b3VjaFJhZGl1cy53aWR0aCgpICogMiwgdG91Y2hSYWRpdXMuaGVp
Z2h0KCkgKiAyKSk7CisgICAgdGFyZ2V0Tm9kZSA9IDA7CisKKyAgICBIaXRUZXN0UmVzdWx0IHJl
c3VsdCA9IGhpdFRlc3RSZXN1bHRBdFBvaW50KHRvdWNoQ2VudGVyLCAvKmFsbG93U2hhZG93Q29u
dGVudCovIGZhbHNlLCAvKmlnbm9yZUNsaXBwaW5nKi8gZmFsc2UsIERvbnRIaXRUZXN0U2Nyb2xs
YmFycywgaGl0VHlwZSwgdG91Y2hSYWRpdXMpOworCisgICAgZmluZEJlc3RDYW5kaWRhdGVGb3JH
ZXN0dXJlVGFwKHRhcmdldE5vZGUsIHRhcmdldFBvaW50LCB0b3VjaENlbnRlciwgdG91Y2hSZWN0
LCByZXN1bHQpOworfQorI2VuZGlmCisKICNpZiBFTkFCTEUoQ09OVEVYVF9NRU5VUykKIGJvb2wg
RXZlbnRIYW5kbGVyOjpzZW5kQ29udGV4dE1lbnVFdmVudChjb25zdCBQbGF0Zm9ybU1vdXNlRXZl
bnQmIGV2ZW50KQogewpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGFnZS9FdmVudEhhbmRs
ZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRXZlbnRIYW5kbGVyLmgKaW5kZXggYTVmZjMwMy4u
ODJmZWViOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGFnZS9FdmVudEhhbmRsZXIuaAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL0V2ZW50SGFuZGxlci5oCkBAIC0xNjYsNiArMTY2LDEw
IEBAIHB1YmxpYzoKICAgICBib29sIGhhbmRsZUdlc3R1cmVTY3JvbGxVcGRhdGUoY29uc3QgUGxh
dGZvcm1HZXN0dXJlRXZlbnQmKTsKICNlbmRpZgogCisjaWYgRU5BQkxFKFRPVUNIX0FESlVTVE1F
TlQpCisgICAgdm9pZCBub2RlRm9yVGFwR2VzdHVyZUF0VG91Y2hQb2ludChjb25zdCBJbnRQb2lu
dCYgdG91Y2hDZW50ZXIsIGNvbnN0IEludFNpemUmIHRvdWNoUmFkaXVzLCBJbnRQb2ludCYgdGFy
Z2V0UG9pbnQsIE5vZGUqJiB0YXJnZXROb2RlKTsKKyNlbmRpZgorCiAjaWYgRU5BQkxFKENPTlRF
WFRfTUVOVVMpCiAgICAgYm9vbCBzZW5kQ29udGV4dE1lbnVFdmVudChjb25zdCBQbGF0Zm9ybU1v
dXNlRXZlbnQmKTsKICAgICBib29sIHNlbmRDb250ZXh0TWVudUV2ZW50Rm9yS2V5KCk7CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL1RvdWNoQWRqdXN0bWVudC5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9wYWdlL1RvdWNoQWRqdXN0bWVudC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMDAwMDAwMC4uYmYxYWI0YwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Bh
Z2UvVG91Y2hBZGp1c3RtZW50LmNwcApAQCAtMCwwICsxLDIzMyBAQAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAxMiBOb2tpYSBDb3Jwb3JhdGlvbiBhbmQvb3IgaXRzIHN1YnNpZGlhcnkoLWllcykK
KyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1
dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGli
cmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUg
U29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2Us
IG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJy
YXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisg
KiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJy
YW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQ
VVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBm
b3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkg
b2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGgg
dGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRv
CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJl
ZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKwor
I2luY2x1ZGUgImNvbmZpZy5oIgorCisjaW5jbHVkZSAiVG91Y2hBZGp1c3RtZW50LmgiCisKKyNp
bmNsdWRlICJDb250YWluZXJOb2RlLmgiCisjaW5jbHVkZSAiRmxvYXRQb2ludC5oIgorI2luY2x1
ZGUgIkZsb2F0UXVhZC5oIgorI2luY2x1ZGUgIkhpdFRlc3RSZXN1bHQuaCIKKyNpbmNsdWRlICJJ
bnRQb2ludC5oIgorI2luY2x1ZGUgIkludFNpemUuaCIKKyNpbmNsdWRlICJOb2RlLmgiCisjaW5j
bHVkZSAiUmVuZGVyT2JqZWN0LmgiCisjaW5jbHVkZSAiUmVuZGVyU3R5bGUuaCIKKworbmFtZXNw
YWNlIFdlYkNvcmUgeworCituYW1lc3BhY2UgVG91Y2hBZGp1c3RtZW50IHsKKworY2xhc3MgSGl0
VGVzdFF1YWQgeworcHVibGljOgorICAgIEhpdFRlc3RRdWFkKE5vZGUqIG5vZGUsIGNvbnN0IEZs
b2F0UXVhZCYgcXVhZCkgOiBtX25vZGUobm9kZSksIG1fcXVhZChxdWFkKSB7IH0KKworICAgIE5v
ZGUqIG5vZGUoKSBjb25zdCB7IHJldHVybiBtX25vZGU7IH0KKyAgICBGbG9hdFF1YWQgcXVhZCgp
IGNvbnN0IHsgcmV0dXJuIG1fcXVhZDsgfQorICAgIExheW91dFJlY3QgYm91bmRpbmdCb3goKSBj
b25zdCB7IHJldHVybiBtX3F1YWQuZW5jbG9zaW5nQm91bmRpbmdCb3goKTsgfQorCitwcml2YXRl
OgorICAgIE5vZGUqIG1fbm9kZTsKKyAgICBGbG9hdFF1YWQgbV9xdWFkOworfTsKKwordHlwZWRl
ZiBWZWN0b3I8SGl0VGVzdFF1YWQ+IEhpdExpc3Q7Cit0eXBlZGVmIGJvb2wgKCpOb2RlRmlsdGVy
KShOb2RlKik7Cit0eXBlZGVmIGZsb2F0ICgqTWV0cmljKShjb25zdCBMYXlvdXRQb2ludCYsIGNv
bnN0IExheW91dFJlY3QmLCBjb25zdCBIaXRUZXN0UXVhZCYpOworCisvLyBUYWtlcyBub24tY29u
c3QgTm9kZSogYmVjYXVzZSBpc0NvbnRlbnRFZGl0YWJsZSBpcyBhIG5vbi1jb25zdCBmdW5jdGlv
bi4KK2Jvb2wgbm9kZVJlc3BvbmRzVG9UYXBHZXN0dXJlKE5vZGUqIG5vZGUpCit7CisgICAgaWYg
KG5vZGUtPmlzTGluaygpCisgICAgICAgIHx8IG5vZGUtPmlzQ29udGVudEVkaXRhYmxlKCkKKyAg
ICAgICAgfHwgbm9kZS0+aXNNb3VzZUZvY3VzYWJsZSgpKQorICAgICAgICAvLyBGSVhNRTogSW1w
bGVtZW50IGhhc0RlZmF1bHRFdmVudEhhbmRsZXIgYW5kIHVzZSB0aGF0IGluc3RlYWQgb2YgYWxs
IG9mIHRoZXNlIGFib3ZlIGNhbGxzPworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICBpZiAobm9k
ZS0+aGFzRXZlbnRMaXN0ZW5lcnMoKQorICAgICAgICAmJiAobm9kZS0+aGFzRXZlbnRMaXN0ZW5l
cnMoZXZlbnROYW1lcygpLmNsaWNrRXZlbnQpCisgICAgICAgICAgICB8fCBub2RlLT5oYXNFdmVu
dExpc3RlbmVycyhldmVudE5hbWVzKCkuRE9NQWN0aXZhdGVFdmVudCkKKyAgICAgICAgICAgIHx8
IG5vZGUtPmhhc0V2ZW50TGlzdGVuZXJzKGV2ZW50TmFtZXMoKS5tb3VzZWRvd25FdmVudCkKKyAg
ICAgICAgICAgIHx8IG5vZGUtPmhhc0V2ZW50TGlzdGVuZXJzKGV2ZW50TmFtZXMoKS5tb3VzZXVw
RXZlbnQpCisgICAgICAgICAgICB8fCBub2RlLT5oYXNFdmVudExpc3RlbmVycyhldmVudE5hbWVz
KCkubW91c2Vtb3ZlRXZlbnQpCisgICAgICAgICAgICAvLyBDaGVja2luZyBmb3IgZm9jdXMgZXZl
bnRzIGlzIG5vdCBuZWNlc3Nhcnkgc2luY2UgdGhleSBjYW4gb25seSBmaXJlIG9uCisgICAgICAg
ICAgICAvLyBmb2N1c2FibGUgZWxlbWVudHMgd2hpY2ggaGF2ZSBhbHJlYWR5IGJlZW4gY2FwdHVy
ZWQgYWJvdmUuCisgICAgICAgICkpCisgICAgICAgIHJldHVybiB0cnVlOworICAgIGlmIChub2Rl
LT5yZW5kZXJTdHlsZSgpKSB7CisgICAgICAgIC8vIEFjY2VwdCBub2RlcyB0aGF0IGhhcyBhIENT
UyBlZmZlY3Qgd2hlbiB0b3VjaGVkLgorICAgICAgICBpZiAobm9kZS0+cmVuZGVyU3R5bGUoKS0+
YWZmZWN0ZWRCeUFjdGl2ZVJ1bGVzKCkgfHwgbm9kZS0+cmVuZGVyU3R5bGUoKS0+YWZmZWN0ZWRC
eUhvdmVyUnVsZXMoKSkKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKyAgICByZXR1
cm4gZmFsc2U7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBhcHBlbmRBYnNvbHV0ZVF1YWRzRm9y
Tm9kZVRvSGl0TGlzdChOb2RlKiBub2RlLCBIaXRMaXN0JiBoaXRsaXN0KQoreworICAgIC8vIFNp
bmNlIHRoZSBub2RlIGlzIGEgcmVzdWx0IG9mIGEgaGl0IHRlc3QsIHdlIGFyZSBhbHJlYWR5IGVu
c3VyZWQgaXQgaGFzIGEgcmVuZGVyZXIuCisgICAgQVNTRVJUKG5vZGUtPnJlbmRlcmVyKCkpOwor
CisgICAgVmVjdG9yPEZsb2F0UXVhZD4gcXVhZHM7CisgICAgbm9kZS0+cmVuZGVyZXIoKS0+YWJz
b2x1dGVRdWFkcyhxdWFkcyk7CisKKyAgICBWZWN0b3I8RmxvYXRRdWFkPjo6Y29uc3RfaXRlcmF0
b3IgaXQgPSBxdWFkcy5iZWdpbigpOworICAgIGNvbnN0IFZlY3RvcjxGbG9hdFF1YWQ+Ojpjb25z
dF9pdGVyYXRvciBlbmQgPSBxdWFkcy5lbmQoKTsKKyAgICBmb3IgKDsgaXQgIT0gZW5kOyArK2l0
KQorICAgICAgICBoaXRsaXN0LmFwcGVuZChIaXRUZXN0UXVhZChub2RlLCAqaXQpKTsKK30KKwor
Ly8gQ29tcGlsZSBhIGxpc3Qgb2YgYWJzb2x1dGUgcmVjdHMgcmVwcmVzZW5kaW5nIG5vZGVzIHJl
c3BvbmRpbmcgdGhlIHRhcCBnZXN0dXJlLgordm9pZCBjb21waWxlSGl0TGlzdChjb25zdCBIaXRU
ZXN0UmVzdWx0JiByZXN1bHQsIEhpdExpc3QmIGhpdGxpc3QsIE5vZGVGaWx0ZXIgbm9kZUZpbHRl
cikKK3sKKyAgICBjb25zdCBIaXRUZXN0UmVzdWx0OjpOb2RlU2V0JiBpbnRlcnNlY3RlZE5vZGVz
ID0gcmVzdWx0LnJlY3RCYXNlZFRlc3RSZXN1bHQoKTsKKworICAgIC8vIEZpbmQgY2FuZGlkYXRl
cyByZXNwb25kaW5nIHRvIHRhcCBnZXN0dXJlIGV2ZW50cyBpbiBPKG4pIHRpbWUuCisgICAgSGFz
aE1hcDxOb2RlKiwgTm9kZSo+IHJlc3BvbmRlck1hcDsKKyAgICBIYXNoU2V0PE5vZGUqPiBhbmNl
c3RvcnNUb1Jlc3BvbmRlcnNTZXQ7CisgICAgVmVjdG9yPE5vZGUqPiBjYW5kaWRhdGVzOworCisg
ICAgSGl0VGVzdFJlc3VsdDo6Tm9kZVNldDo6Y29uc3RfaXRlcmF0b3IgaXQxID0gaW50ZXJzZWN0
ZWROb2Rlcy5iZWdpbigpOworICAgIGNvbnN0IEhpdFRlc3RSZXN1bHQ6Ok5vZGVTZXQ6OmNvbnN0
X2l0ZXJhdG9yIGVuZDEgPSBpbnRlcnNlY3RlZE5vZGVzLmVuZCgpOworICAgIGZvciAoOyBpdDEg
IT0gZW5kMTsgKytpdDEpIHsKKyAgICAgICAgTm9kZSogbm9kZSA9IGl0MS0+Z2V0KCk7CisgICAg
ICAgIGlmIChyZXNwb25kZXJNYXAuY29udGFpbnMobm9kZSkpCisgICAgICAgICAgICAvLyBTa2lw
IG5vZGVzIHRoYXQgYXJlIGRpcmVjdCBhbmNlc3RvcnMgb2Ygb3RoZXIgY2FuZGlkYXRlcy4gVGhl
eSB3b3VsZCBoaXQtdGVzdCBhZ2FpbnN0IHRoZSBzYW1lIGFic29sdXRlIHF1YWRzLgorICAgICAg
ICAgICAgY29udGludWU7CisgICAgICAgIFZlY3RvcjxOb2RlKj4gYW5jZXN0b3JzOworICAgICAg
ICBOb2RlKiByZXNwb25kaW5nTm9kZSA9IDA7CisgICAgICAgIGZvciAoOyBub2RlOyBub2RlID0g
bm9kZS0+cGFyZW50T3JIb3N0Tm9kZSgpKSB7CisgICAgICAgICAgICAvLyBDaGVjayBpZiB3ZSBh
bHJlYWR5IGhhdmUgYSByZXN1bHQgZnJvbSBhIGNvbW1vbiBhbmNlc3RvciB3aXRoIGFub3RoZXIg
Y2FuZGlkYXRlLgorICAgICAgICAgICAgcmVzcG9uZGluZ05vZGUgPSByZXNwb25kZXJNYXAuZ2V0
KG5vZGUpOworICAgICAgICAgICAgaWYgKHJlc3BvbmRpbmdOb2RlKQorICAgICAgICAgICAgICAg
IGJyZWFrOworICAgICAgICAgICAgYW5jZXN0b3JzLmFwcGVuZChub2RlKTsKKyAgICAgICAgICAg
IC8vIENoZWNrIGlmIHRoZSBub2RlIGZpbHRlciBhcHBsaWVzLCB3aGljaCB3b3VsZCBtZWFuIHdl
IGhhdmUgZm91bmQgYSByZXNwb25kaW5nIG5vZGUuCisgICAgICAgICAgICBpZiAobm9kZUZpbHRl
cihub2RlKSkgeworICAgICAgICAgICAgICAgIHJlc3BvbmRpbmdOb2RlID0gbm9kZTsKKyAgICAg
ICAgICAgICAgICAvLyBOb3cgdGhhdCB3ZSBoYXZlIHRoZSByZXNwb25kZXIsIHNldCB0aGUgcmVz
cG9uZGVyIGZvciBhbGwgdGhlIG5vZGVzIHNlZW4gc28gZmFyLgorICAgICAgICAgICAgICAgIGZv
ciAodW5zaWduZWQgaW50IGkgPSAwOyBpIDwgYW5jZXN0b3JzLnNpemUoKTsgaSsrKQorICAgICAg
ICAgICAgICAgICAgICByZXNwb25kZXJNYXAuYWRkKGFuY2VzdG9yc1tpXSwgbm9kZSk7CisgICAg
ICAgICAgICAgICAgLy8gVGhlIGNvbnRpbnVlIHRoZSBpdGVyYXRpb24gdG8gY29sbGVjdCB0aGUg
YW5jZXN0b3JzIG9mIHRoZSByZXNwb25kZXIuCisgICAgICAgICAgICAgICAgZm9yIChub2RlID0g
bm9kZS0+cGFyZW50T3JIb3N0Tm9kZSgpOyBub2RlOyBub2RlID0gbm9kZS0+cGFyZW50T3JIb3N0
Tm9kZSgpKSB7CisgICAgICAgICAgICAgICAgICAgIHBhaXI8SGFzaFNldDxOb2RlKj46Oml0ZXJh
dG9yLCBib29sPiB0bXAgPSBhbmNlc3RvcnNUb1Jlc3BvbmRlcnNTZXQuYWRkKG5vZGUpOworICAg
ICAgICAgICAgICAgICAgICBpZiAoIXRtcC5zZWNvbmQpCisgICAgICAgICAgICAgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgaWYgKHJlc3BvbmRpbmdOb2RlKQorICAgICAg
ICAgICAgY2FuZGlkYXRlcy5hcHBlbmQoaXQxLT5nZXQoKSk7CisgICAgICAgIGVsc2UgeworICAg
ICAgICAgICAgLy8gSW5zZXJ0IHRoZSBub2RlcyB3aXRoIG1pc3NpbmcgcmVzcG9uZGVycyBpbnRv
IHRoZSByZXNwb25kZXItbWFwIGZvciBmYXN0IHJlamVjdGlvbiBvZiBsYXRlciBjYW5kaWRhdGVz
LgorICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgPCBhbmNlc3RvcnMuc2l6
ZSgpOyBpKyspCisgICAgICAgICAgICAgICAgcmVzcG9uZGVyTWFwLmFkZChhbmNlc3RvcnNbaV0s
IDApOworICAgICAgICB9CisgICAgfQorCisgICAgLy8gV2UgY29tcGlsZSB0aGUgbGlzdCBvZiBj
b21wb25lbnQgYWJzb2x1dGUgcXVhZHMgaW5zdGVhZCBvZiB1c2luZyB0aGUgYm91bmRpbmcgcmVj
dAorICAgIC8vIHRvIGJlIGFibGUgdG8gcGVyZm9ybSBiZXR0ZXIgaGl0LXRlc3Rpbmcgb24gaW5s
aW5lIGxpbmtzIG9uIGxpbmUtYnJlYWtzLgorICAgIFZlY3RvcjxOb2RlKj46OmNvbnN0X2l0ZXJh
dG9yIGl0MiA9IGNhbmRpZGF0ZXMuYmVnaW4oKTsKKyAgICBjb25zdCBWZWN0b3I8Tm9kZSo+Ojpj
b25zdF9pdGVyYXRvciBlbmQyID0gY2FuZGlkYXRlcy5lbmQoKTsKKyAgICBmb3IgKDsgaXQyICE9
IGVuZDI7ICsraXQyKSB7CisgICAgICAgIC8vIFNraXAgbm9kZXMgd2hvcyByZXNwb25kZXJzIGFy
ZSBhbmNlc3RvcnMgb2Ygb3RoZXIgcmVzcG9uZGVycy4gVGhpcyBnaXZlcyBwcmVmZXJlbmNlIHRv
IHRoZSBpbm5lci1tb3N0IGV2ZW50LWhhbmRsZXJzLgorICAgICAgICAvLyBTbyB0aGF0IGEgbGlu
ayBpcyBhbHdheXMgcHJlZmVycmVkIGV2ZW4gd2hlbiBjb250YWluZWQgaW4gYW4gZWxlbWVudCB0
aGF0IG1vbml0b3JzIGFsbCBjbGljay1ldmVudHMuCisgICAgICAgIE5vZGUqIHJlc3BvbmRpbmdO
b2RlID0gcmVzcG9uZGVyTWFwLmdldCgqaXQyKTsKKyAgICAgICAgQVNTRVJUKHJlc3BvbmRpbmdO
b2RlKTsKKyAgICAgICAgaWYgKGFuY2VzdG9yc1RvUmVzcG9uZGVyc1NldC5jb250YWlucyhyZXNw
b25kaW5nTm9kZSkpCisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgYXBwZW5kQWJzb2x1
dGVRdWFkc0Zvck5vZGVUb0hpdExpc3QoKml0MiwgaGl0bGlzdCk7CisgICAgfQorfQorCisvLyBS
ZXR1cm5zIHRoZSBkaXN0YW5jZSBzcXVhcmVkIHRvIHRoZSBib3VuZGluZyBib3ggY2VudGVybGlu
ZS4KK2Zsb2F0IGRpc3RhbmNlVG9IaXRUZXN0UXVhZChjb25zdCBMYXlvdXRQb2ludCYgdG91Y2hI
b3RzcG90LCBjb25zdCBMYXlvdXRSZWN0JiwgY29uc3QgSGl0VGVzdFF1YWQmIGhpdFRlc3RRdWFk
KQoreworICAgIC8vIFVzaW5nIHRoZSBib3VuZGluZyBib3ggbWVhbnMgdGhlIGRpc3RhbmNlIHRv
IGNlbnRlcmxpbmUgaXMgbGVzcyBtZWFuaW5nZnVsIGZvciB0cmFuc2Zvcm1lZCByZWN0YW5nbGVz
LAorICAgIC8vIGJ1dCBjYWxjdWxhdGluZyB0aGUgZGlzdGFuY2UgdG8gcXVhZHMgY2FuIGJlIHZl
cnkgZXhwZW5zaXZlLCBhbmQgd2UgZG8gbm90IHdhbnQgdG8gY2FsY3VsY2F0ZQorICAgIC8vIHF1
YWQgYmFzZWQgZGlzdGFuY2VzIGZvciB1bnRyYW5zZm9ybWVkIHJlY3RhbmdsZXMuCisgICAgSW50
UmVjdCByZWN0ID0gaGl0VGVzdFF1YWQuYm91bmRpbmdCb3goKTsKKworICAgIHJldHVybiByZWN0
LmRpc3RhbmNlU3F1YXJlZEZyb21DZW50ZXJMaW5lVG9Qb2ludCh0b3VjaEhvdHNwb3QpOworfQor
CisvLyBSZXR1cm5zIHRoZSBhcmVhIG9mIHRoZSBpbnRlcnNlY3Rpb24uCitmbG9hdCBpbnRlcnNl
Y3Rpb25XaXRoSGl0VGVzdFF1YWQoY29uc3QgTGF5b3V0UG9pbnQmLCBjb25zdCBMYXlvdXRSZWN0
JiB0b3VjaFJlY3QsIGNvbnN0IEhpdFRlc3RRdWFkJiBoaXRUZXN0UXVhZCkKK3sKKyAgICBJbnRS
ZWN0IHJlY3QgPSBoaXRUZXN0UXVhZC5ib3VuZGluZ0JveCgpOworICAgIEludFJlY3QgaW50ZXJz
ZWN0aW9uID0gcmVjdDsKKyAgICByZWN0LmludGVyc2VjdCh0b3VjaFJlY3QpOworCisgICAgcmV0
dXJuIGludGVyc2VjdGlvbi5zaXplKCkuYXJlYSgpOworfQorCitib29sIGZpbmROb2RlV2l0aExv
d2VzdE1ldHJpYyhOb2RlKiYgdGFyZ2V0Tm9kZSwgTGF5b3V0UG9pbnQmIHRhcmdldFBvaW50LCBj
b25zdCBMYXlvdXRQb2ludCYgdG91Y2hIb3RzcG90LCBjb25zdCBMYXlvdXRSZWN0JiB0b3VjaEFy
ZWEsIEhpdExpc3QmIGhpdGxpc3QsIE1ldHJpYyBtZXRyaWMpCit7CisgICAgdGFyZ2V0Tm9kZSA9
IDA7CisKKyAgICBmbG9hdCBiZXN0TWV0cmljID0gSU5GSU5JVFk7CisgICAgSGl0TGlzdDo6Y29u
c3RfaXRlcmF0b3IgaXQgPSBoaXRsaXN0LmJlZ2luKCk7CisgICAgSGl0TGlzdDo6Y29uc3RfaXRl
cmF0b3IgZW5kID0gaGl0bGlzdC5lbmQoKTsKKyAgICBmb3IgKDsgaXQgIT0gZW5kOyArK2l0KSB7
CisgICAgICAgIE5vZGUqIGhpdE5vZGUgPSBpdC0+bm9kZSgpOworICAgICAgICBmbG9hdCBoaXRN
ZXRyaWMgPSBtZXRyaWModG91Y2hIb3RzcG90LCB0b3VjaEFyZWEsICppdCk7CisgICAgICAgIGlm
IChoaXRNZXRyaWMgPCBiZXN0TWV0cmljKSB7CisgICAgICAgICAgICB0YXJnZXRQb2ludCA9IHJv
dW5kZWRMYXlvdXRQb2ludChpdC0+cXVhZCgpLmNlbnRlcigpKTsKKyAgICAgICAgICAgIHRhcmdl
dE5vZGUgPSBoaXROb2RlOworICAgICAgICAgICAgYmVzdE1ldHJpYyA9IGhpdE1ldHJpYzsKKyAg
ICAgICAgfQorICAgIH0KKworICAgIHJldHVybiAodGFyZ2V0Tm9kZSk7Cit9CisKK2Jvb2wgZmlu
ZE5vZGVXaXRoSGlnaGVzdE1ldHJpYyhOb2RlKiYgdGFyZ2V0Tm9kZSwgTGF5b3V0UG9pbnQmIHRh
cmdldFBvaW50LCBjb25zdCBMYXlvdXRQb2ludCYgdG91Y2hIb3RzcG90LCBjb25zdCBMYXlvdXRS
ZWN0JiB0b3VjaEFyZWEsIEhpdExpc3QmIGhpdGxpc3QsIE1ldHJpYyBtZXRyaWMpCit7CisgICAg
dGFyZ2V0Tm9kZSA9IDA7CisKKyAgICBmbG9hdCBiZXN0TWV0cmljID0gMDsKKyAgICBIaXRMaXN0
Ojpjb25zdF9pdGVyYXRvciBpdCA9IGhpdGxpc3QuYmVnaW4oKTsKKyAgICBIaXRMaXN0Ojpjb25z
dF9pdGVyYXRvciBlbmQgPSBoaXRsaXN0LmVuZCgpOworICAgIGZvciAoOyBpdCAhPSBlbmQ7ICsr
aXQpIHsKKyAgICAgICAgTm9kZSogaGl0Tm9kZSA9IGl0LT5ub2RlKCk7CisgICAgICAgIGZsb2F0
IGhpdE1ldHJpYyA9IG1ldHJpYyh0b3VjaEhvdHNwb3QsIHRvdWNoQXJlYSwgKml0KTsKKyAgICAg
ICAgaWYgKGhpdE1ldHJpYyA+IGJlc3RNZXRyaWMpIHsKKyAgICAgICAgICAgIHRhcmdldFBvaW50
ID0gcm91bmRlZExheW91dFBvaW50KGl0LT5xdWFkKCkuY2VudGVyKCkpOworICAgICAgICAgICAg
dGFyZ2V0Tm9kZSA9IGhpdE5vZGU7CisgICAgICAgICAgICBiZXN0TWV0cmljID0gaGl0TWV0cmlj
OworICAgICAgICB9CisgICAgfQorCisgICAgcmV0dXJuICh0YXJnZXROb2RlKTsKK30KKworfSAv
LyBuYW1lc3BhY2UgVG91Y2hBZGp1c3RtZW50CisKK3ZvaWQgZmluZEJlc3RDYW5kaWRhdGVGb3JH
ZXN0dXJlVGFwKE5vZGUqJiB0YXJnZXROb2RlLCBMYXlvdXRQb2ludCYgdGFyZ2V0UG9pbnQsIGNv
bnN0IExheW91dFBvaW50JiB0b3VjaEhvdHNwb3QsIGNvbnN0IExheW91dFJlY3QmIHRvdWNoQXJl
YSwgY29uc3QgSGl0VGVzdFJlc3VsdCYgaGl0VGVzdFJlc3VsdCkKK3sKKyAgICBUb3VjaEFkanVz
dG1lbnQ6OkhpdExpc3QgaGl0bGlzdDsKKyAgICBUb3VjaEFkanVzdG1lbnQ6OmNvbXBpbGVIaXRM
aXN0KGhpdFRlc3RSZXN1bHQsIGhpdGxpc3QsIFRvdWNoQWRqdXN0bWVudDo6bm9kZVJlc3BvbmRz
VG9UYXBHZXN0dXJlKTsKKyAgICBpZiAoIVRvdWNoQWRqdXN0bWVudDo6ZmluZE5vZGVXaXRoTG93
ZXN0TWV0cmljKHRhcmdldE5vZGUsIHRhcmdldFBvaW50LCB0b3VjaEhvdHNwb3QsIHRvdWNoQXJl
YSwgaGl0bGlzdCwgVG91Y2hBZGp1c3RtZW50OjpkaXN0YW5jZVRvSGl0VGVzdFF1YWQpKSB7Cisg
ICAgICAgIC8vIERlZmF1bHQgdG8ganVzdCByZXR1cm5pbmcgaW5uZXJOb25TaGFyZWROb2RlLgor
ICAgICAgICB0YXJnZXRQb2ludCA9IHRvdWNoSG90c3BvdDsKKyAgICAgICAgdGFyZ2V0Tm9kZSA9
IGhpdFRlc3RSZXN1bHQuaW5uZXJOb25TaGFyZWROb2RlKCk7CisgICAgfQorfQorCit9IC8vIG5h
bWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL1RvdWNoQWRq
dXN0bWVudC5oIGIvU291cmNlL1dlYkNvcmUvcGFnZS9Ub3VjaEFkanVzdG1lbnQuaApuZXcgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41N2Q5NDYzCi0tLSAvZGV2L251bGwKKysrIGIv
U291cmNlL1dlYkNvcmUvcGFnZS9Ub3VjaEFkanVzdG1lbnQuaApAQCAtMCwwICsxLDM2IEBACisv
KgorICogQ29weXJpZ2h0IChDKSAyMDEyIE5va2lhIENvcnBvcmF0aW9uIGFuZC9vciBpdHMgc3Vi
c2lkaWFyeSgtaWVzKQorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3Ug
Y2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMg
b2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hl
ZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBv
ZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAq
CisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxs
IGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRo
ZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1
YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJl
Y2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQor
ICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElm
IG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUx
IEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEs
IFVTQS4KKyAqLworCisjaWZuZGVmIFRvdWNoQWRqdXN0bWVudF9oCisjZGVmaW5lIFRvdWNoQWRq
dXN0bWVudF9oCisKKyNpbmNsdWRlICJGbG9hdFF1YWQuaCIKKyNpbmNsdWRlICJIaXRUZXN0UmVz
dWx0LmgiCisjaW5jbHVkZSAiTGF5b3V0VHlwZXMuaCIKKyNpbmNsdWRlICJOb2RlLmgiCisjaW5j
bHVkZSA8d3RmL1ZlY3Rvci5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK3ZvaWQgZmluZEJl
c3RDYW5kaWRhdGVGb3JHZXN0dXJlVGFwKE5vZGUqJiB0YXJnZXROb2RlLCBMYXlvdXRQb2ludCYg
dGFyZ2V0UG9pbnQsIGNvbnN0IExheW91dFBvaW50JiB0b3VjaEhvdHNwb3QsIGNvbnN0IExheW91
dFJlY3QmIHRvdWNoQXJlYSwgY29uc3QgSGl0VGVzdFJlc3VsdCYpOworLy8gRklYTUU6IEltcGxl
bWVudCB0aGUgc2ltaWxhciBmdW5jdGlvbnMgZm9yIG90aGVyIGdlc3R1cmVzIGhlcmUgYXMgd2Vs
bC4KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0Zsb2F0UG9pbnQuaCBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL0Zsb2F0UG9pbnQuaAppbmRleCAwOTQzMDRkLi5jODNjZmZiIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9GbG9hdFBvaW50LmgK
KysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRmxvYXRQb2ludC5oCkBAIC02
OSw2ICs2OSw3IEBAIHB1YmxpYzoKICAgICBGbG9hdFBvaW50KGZsb2F0IHgsIGZsb2F0IHkpIDog
bV94KHgpLCBtX3koeSkgeyB9CiAgICAgRmxvYXRQb2ludChjb25zdCBJbnRQb2ludCYpOwogICAg
IEZsb2F0UG9pbnQoY29uc3QgRnJhY3Rpb25hbExheW91dFBvaW50Jik7CisgICAgZXhwbGljaXQg
RmxvYXRQb2ludChGbG9hdFNpemUgc2l6ZSkgOiBtX3goc2l6ZS53aWR0aCgpKSwgbV95KHNpemUu
aGVpZ2h0KCkpIHsgfQogCiAgICAgc3RhdGljIEZsb2F0UG9pbnQgemVybygpIHsgcmV0dXJuIEZs
b2F0UG9pbnQoKTsgfQogCkBAIC0xMzAsNiArMTMxLDkgQEAgcHVibGljOgogICAgICAgICByZXR1
cm4gbV94ICogbV94ICsgbV95ICogbV95OwogICAgIH0KIAorICAgIGZsb2F0IGRpc3RhbmNlVG9Q
b2ludChjb25zdCBGbG9hdFBvaW50JikgY29uc3Q7CisgICAgZmxvYXQgZGlzdGFuY2VTcXVhcmVk
VG9Qb2ludChjb25zdCBGbG9hdFBvaW50JikgY29uc3Q7CisKICAgICBGbG9hdFBvaW50IGV4cGFu
ZGVkVG8oY29uc3QgRmxvYXRQb2ludCYgb3RoZXIpIGNvbnN0CiAgICAgewogICAgICAgICByZXR1
cm4gRmxvYXRQb2ludChzdGQ6Om1heChtX3gsIG90aGVyLm1feCksIHN0ZDo6bWF4KG1feSwgb3Ro
ZXIubV95KSk7CkBAIC0yMjgsNiArMjMyLDE3IEBAIGlubGluZSBmbG9hdCBvcGVyYXRvciooY29u
c3QgRmxvYXRQb2ludCYgYSwgY29uc3QgRmxvYXRQb2ludCYgYikKICAgICByZXR1cm4gYS5kb3Qo
Yik7CiB9CiAKK2lubGluZSBmbG9hdCBGbG9hdFBvaW50OjpkaXN0YW5jZVRvUG9pbnQoY29uc3Qg
RmxvYXRQb2ludCYgcG9pbnQpIGNvbnN0Cit7CisgICAgcmV0dXJuICgqdGhpcyAtIHBvaW50KS5k
aWFnb25hbExlbmd0aCgpOworfQorCitpbmxpbmUgZmxvYXQgRmxvYXRQb2ludDo6ZGlzdGFuY2VT
cXVhcmVkVG9Qb2ludChjb25zdCBGbG9hdFBvaW50JiBwb2ludCkgY29uc3QKK3sKKyAgICByZXR1
cm4gKCp0aGlzIC0gcG9pbnQpLmRpYWdvbmFsTGVuZ3RoU3F1YXJlZCgpOworfQorCisKIGlubGlu
ZSBJbnRQb2ludCByb3VuZGVkSW50UG9pbnQoY29uc3QgRmxvYXRQb2ludCYgcCkKIHsKICAgICBy
ZXR1cm4gSW50UG9pbnQoc3RhdGljX2Nhc3Q8aW50Pihyb3VuZGYocC54KCkpKSwgc3RhdGljX2Nh
c3Q8aW50Pihyb3VuZGYocC55KCkpKSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9GbG9hdFF1YWQuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL0Zsb2F0UXVhZC5oCmluZGV4IGI1ZTJhOGMuLmJmYjc5NGQgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0Zsb2F0UXVhZC5oCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL0Zsb2F0UXVhZC5oCkBAIC04OCw2ICs4OCwxMyBAQCBwdWJs
aWM6CiAgICAgLy8gZnJvbSB0cmFuc2Zvcm1lZCByZWN0cy4KICAgICBib29sIGNvbnRhaW5zUXVh
ZChjb25zdCBGbG9hdFF1YWQmKSBjb25zdDsKIAorICAgIC8vIFRoZSBjZW50ZXIgb2YgdGhlIHF1
YWQuIElmIHRoZSBxdWFkIGlzIHRoZSByZXN1bHQgb2YgYSBhZmZpbmUtdHJhbnNmb3JtZWQgcmVj
dGFuZ2xlIHRoaXMgaXMgdGhlIHNhbWUgYXMgdGhlIG9yaWdpbmFsIGNlbnRlciB0cmFuc2Zvcm1l
ZC4KKyAgICBGbG9hdFBvaW50IGNlbnRlcigpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4g
RmxvYXRQb2ludCgobV9wMS54KCkgKyBtX3AyLngoKSArIG1fcDMueCgpICsgbV9wNC54KCkpIC8g
NC4wLAorICAgICAgICAgICAgICAgICAgICAgICAgICAobV9wMS55KCkgKyBtX3AyLnkoKSArIG1f
cDMueSgpICsgbV9wNC55KCkpIC8gNC4wKTsKKyAgICB9CisKICAgICBGbG9hdFJlY3QgYm91bmRp
bmdCb3goKSBjb25zdDsKICAgICBJbnRSZWN0IGVuY2xvc2luZ0JvdW5kaW5nQm94KCkgY29uc3QK
ICAgICB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9GbG9h
dFJlY3QuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRmxvYXRSZWN0LmNw
cAppbmRleCA3Mzc0NzNjLi45MDljMTg1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9GbG9hdFJlY3QuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL0Zsb2F0UmVjdC5jcHAKQEAgLTE0Miw2ICsxNDIsNDAgQEAgdm9pZCBGbG9hdFJl
Y3Q6OnNjYWxlKGZsb2F0IHN4LCBmbG9hdCBzeSkKICAgICBtX3NpemUuc2V0SGVpZ2h0KGhlaWdo
dCgpICogc3kpOwogfQogCitzdGF0aWMgaW5saW5lIGZsb2F0IGRpc3RhbmNlVG9JbnRlcnZhbChm
bG9hdCBwb3MsIGZsb2F0IHN0YXJ0LCBmbG9hdCBlbmQpCit7CisgICAgaWYgKHBvcyA8IHN0YXJ0
KQorICAgICAgICByZXR1cm4gc3RhcnQgLSBwb3M7CisgICAgaWYgKHBvcyA+IGVuZCkKKyAgICAg
ICAgcmV0dXJuIGVuZCAtIHBvczsKKyAgICByZXR1cm4gMDsKK30KKworRmxvYXRTaXplIEZsb2F0
UmVjdDo6ZGlmZmVyZW5jZVRvUG9pbnQoY29uc3QgRmxvYXRQb2ludCYgcG9pbnQpIGNvbnN0Cit7
CisgICAgZmxvYXQgeGRpc3RhbmNlID0gZGlzdGFuY2VUb0ludGVydmFsKHBvaW50LngoKSwgeCgp
LCBtYXhYKCkpOworICAgIGZsb2F0IHlkaXN0YW5jZSA9IGRpc3RhbmNlVG9JbnRlcnZhbChwb2lu
dC55KCksIHkoKSwgbWF4WSgpKTsKKyAgICByZXR1cm4gRmxvYXRTaXplKHhkaXN0YW5jZSwgeWRp
c3RhbmNlKTsKK30KKworZmxvYXQgRmxvYXRSZWN0OjpkaXN0YW5jZVRvUG9pbnQoY29uc3QgRmxv
YXRQb2ludCYgcCkgY29uc3QKK3sKKyAgICByZXR1cm4gc3FydGYoZGlzdGFuY2VTcXVhcmVkVG9Q
b2ludChwKSk7Cit9CisKK0Zsb2F0U2l6ZSBGbG9hdFJlY3Q6OmRpZmZlcmVuY2VGcm9tQ2VudGVy
TGluZVRvUG9pbnQoY29uc3QgRmxvYXRQb2ludCYgcG9pbnQpIGNvbnN0Cit7CisgICAgLy8gVGhl
IGNlbnRlci1saW5lIGlzIHRoZSBuYXR1cmFsIGNlbnRlciBvZiBhIHJlY3RhbmdsZS4gSXQgaGFz
IGFuIGVxdWFsIGRpc3RhbmNlIHRvIGFsbCBzaWRlcyBvZiB0aGUgcmVjdGFuZ2xlLgorICAgIEZs
b2F0UG9pbnQgY2VudGVyUG9pbnQgPSBjZW50ZXIoKTsKKyAgICBmbG9hdCB4ZGlzdGFuY2UgPSBj
ZW50ZXJQb2ludC54KCkgLSBwb2ludC54KCk7CisgICAgZmxvYXQgeWRpc3RhbmNlID0gY2VudGVy
UG9pbnQueSgpIC0gcG9pbnQueSgpOworICAgIGlmICh3aWR0aCgpID4gaGVpZ2h0KCkpCisgICAg
ICAgIHhkaXN0YW5jZSA9IGRpc3RhbmNlVG9JbnRlcnZhbChwb2ludC54KCksIHgoKSArIChoZWln
aHQoKSAvIDIuMCksIG1heFgoKSAtIChoZWlnaHQoKSAvIDIuMCkpOworICAgIGVsc2UKKyAgICAg
ICAgeWRpc3RhbmNlID0gZGlzdGFuY2VUb0ludGVydmFsKHBvaW50LnkoKSwgeSgpICsgKHdpZHRo
KCkgLyAyLjApLCBtYXhZKCkgLSAod2lkdGgoKSAvIDIuMCkpOworICAgIHJldHVybiBGbG9hdFNp
emUoeGRpc3RhbmNlLCB5ZGlzdGFuY2UpOworfQorCiBGbG9hdFJlY3QgdW5pb25SZWN0KGNvbnN0
IFZlY3RvcjxGbG9hdFJlY3Q+JiByZWN0cykKIHsKICAgICBGbG9hdFJlY3QgcmVzdWx0OwpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRmxvYXRSZWN0LmggYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9GbG9hdFJlY3QuaAppbmRleCA0ZDRlYWRm
Li40ZDY0ZGI5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9G
bG9hdFJlY3QuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9GbG9hdFJl
Y3QuaApAQCAtMTc0LDYgKzE3NCwxMiBAQCBwdWJsaWM6CiAgICAgdm9pZCBzY2FsZShmbG9hdCBz
KSB7IHNjYWxlKHMsIHMpOyB9CiAgICAgdm9pZCBzY2FsZShmbG9hdCBzeCwgZmxvYXQgc3kpOwog
CisgICAgRmxvYXRTaXplIGRpZmZlcmVuY2VUb1BvaW50KGNvbnN0IEZsb2F0UG9pbnQmKSBjb25z
dDsKKyAgICBGbG9hdFNpemUgZGlmZmVyZW5jZUZyb21DZW50ZXJMaW5lVG9Qb2ludChjb25zdCBG
bG9hdFBvaW50JikgY29uc3Q7CisgICAgZmxvYXQgZGlzdGFuY2VTcXVhcmVkVG9Qb2ludChjb25z
dCBGbG9hdFBvaW50JiBwKSBjb25zdCB7IHJldHVybiBkaWZmZXJlbmNlVG9Qb2ludChwKS5kaWFn
b25hbExlbmd0aFNxdWFyZWQoKTsgfQorICAgIGZsb2F0IGRpc3RhbmNlU3F1YXJlZEZyb21DZW50
ZXJMaW5lVG9Qb2ludChjb25zdCBGbG9hdFBvaW50JiBwKSBjb25zdCB7IHJldHVybiBkaWZmZXJl
bmNlRnJvbUNlbnRlckxpbmVUb1BvaW50KHApLmRpYWdvbmFsTGVuZ3RoU3F1YXJlZCgpOyB9Cisg
ICAgZmxvYXQgZGlzdGFuY2VUb1BvaW50KGNvbnN0IEZsb2F0UG9pbnQmKSBjb25zdDsKKwogICAg
IEZsb2F0UmVjdCB0cmFuc3Bvc2VkUmVjdCgpIGNvbnN0IHsgcmV0dXJuIEZsb2F0UmVjdChtX2xv
Y2F0aW9uLnRyYW5zcG9zZWRQb2ludCgpLCBtX3NpemUudHJhbnNwb3NlZFNpemUoKSk7IH0KIAog
ICAgIC8vIFJlLWluaXRpYWxpemVzIHRoaXMgcmVjdGFuZ2xlIHRvIGZpdCB0aGUgc2V0cyBvZiBw
YXNzZWQgcG9pbnRzLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvRmxvYXRTaXplLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9GbG9hdFNp
emUuaAppbmRleCAyYjU1NDUwLi4yODgyZTNlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9GbG9hdFNpemUuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9GbG9hdFNpemUuaApAQCAtOTUsNiArOTUsMTEgQEAgcHVibGljOgogICAgICAg
ICAgICBtX2hlaWdodCA8IG90aGVyLm1faGVpZ2h0ID8gbV9oZWlnaHQgOiBvdGhlci5tX2hlaWdo
dCk7CiAgICAgfQogCisgICAgZmxvYXQgYXJlYSgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1
cm4gbV93aWR0aCAqIG1faGVpZ2h0OworICAgIH0KKwogICAgIGZsb2F0IGRpYWdvbmFsTGVuZ3Ro
KCkgY29uc3Q7CiAgICAgZmxvYXQgZGlhZ29uYWxMZW5ndGhTcXVhcmVkKCkgY29uc3QKICAgICB7
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbnRQb2ludC5o
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW50UG9pbnQuaAppbmRleCBkZGM0
MWI0Li41MTcyYTE0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9JbnRQb2ludC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ludFBv
aW50LmgKQEAgLTExMSw2ICsxMTEsMTMgQEAgcHVibGljOgogICAgICAgICAgICAgbV95IDwgb3Ro
ZXIubV95ID8gbV95IDogb3RoZXIubV95KTsKICAgICB9CiAKKyAgICBpbnQgbGVuZ3RoU3F1YXJl
ZCgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gbV94ICogbV94ICsgbV95ICogbV95Owor
ICAgIH0KKworICAgIGludCBkaXN0YW5jZVNxdWFyZWRUb1BvaW50KGNvbnN0IEludFBvaW50Jikg
Y29uc3Q7CisKICAgICB2b2lkIGNsYW1wTmVnYXRpdmVUb1plcm8oKQogICAgIHsKICAgICAgICAg
KnRoaXMgPSBleHBhbmRlZFRvKHplcm8oKSk7CkBAIC0yMjIsNiArMjI5LDExIEBAIGlubGluZSBJ
bnRTaXplIHRvU2l6ZShjb25zdCBJbnRQb2ludCYgYSkKICAgICByZXR1cm4gSW50U2l6ZShhLngo
KSwgYS55KCkpOwogfQogCitpbmxpbmUgaW50IEludFBvaW50OjpkaXN0YW5jZVNxdWFyZWRUb1Bv
aW50KGNvbnN0IEludFBvaW50JiBwb2ludCkgY29uc3QKK3sKKyAgICByZXR1cm4gKCgqdGhpcykg
LSBwb2ludCkuZGlhZ29uYWxMZW5ndGhTcXVhcmVkKCk7Cit9CisKICNpZiBQTEFURk9STShRVCkK
IGlubGluZSBRRGF0YVN0cmVhbSYgb3BlcmF0b3I8PChRRGF0YVN0cmVhbSYgc3RyZWFtLCBjb25z
dCBJbnRQb2ludCYgcG9pbnQpCiB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9JbnRSZWN0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L0ludFJlY3QuY3BwCmluZGV4IDAzYzM1ZTguLmRmYTJmOTEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ludFJlY3QuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL0ludFJlY3QuY3BwCkBAIC0xMzIsNiArMTMyLDM1IEBAIHZvaWQg
SW50UmVjdDo6c2NhbGUoZmxvYXQgcykKICAgICBtX3NpemUuc2V0SGVpZ2h0KChpbnQpKGhlaWdo
dCgpICogcykpOwogfQogCitzdGF0aWMgaW5saW5lIGludCBkaXN0YW5jZVRvSW50ZXJ2YWwoaW50
IHBvcywgaW50IHN0YXJ0LCBpbnQgZW5kKQoreworICAgIGlmIChwb3MgPCBzdGFydCkKKyAgICAg
ICAgcmV0dXJuIHN0YXJ0IC0gcG9zOworICAgIGlmIChwb3MgPiBlbmQpCisgICAgICAgIHJldHVy
biBlbmQgLSBwb3M7CisgICAgcmV0dXJuIDA7Cit9CisKK0ludFNpemUgSW50UmVjdDo6ZGlmZmVy
ZW5jZVRvUG9pbnQoY29uc3QgSW50UG9pbnQmIHBvaW50KSBjb25zdAoreworICAgIGludCB4ZGlz
dGFuY2UgPSBkaXN0YW5jZVRvSW50ZXJ2YWwocG9pbnQueCgpLCB4KCksIG1heFgoKSk7CisgICAg
aW50IHlkaXN0YW5jZSA9IGRpc3RhbmNlVG9JbnRlcnZhbChwb2ludC55KCksIHkoKSwgbWF4WSgp
KTsKKyAgICByZXR1cm4gSW50U2l6ZSh4ZGlzdGFuY2UsIHlkaXN0YW5jZSk7Cit9CisKK0ludFNp
emUgSW50UmVjdDo6ZGlmZmVyZW5jZUZyb21DZW50ZXJMaW5lVG9Qb2ludChjb25zdCBJbnRQb2lu
dCYgcG9pbnQpIGNvbnN0Cit7CisgICAgLy8gVGhlIGNlbnRlci1saW5lIGlzIHRoZSBuYXR1cmFs
IGNlbnRlciBvZiBhIHJlY3RhbmdsZS4gSXQgaGFzIGFuIGVxdWFsIGRpc3RhbmNlIHRvIGFsbCBz
aWRlcyBvZiB0aGUgcmVjdGFuZ2xlLgorICAgIEludFBvaW50IGNlbnRlclBvaW50ID0gY2VudGVy
KCk7CisgICAgaW50IHhkaXN0YW5jZSA9IGNlbnRlclBvaW50LngoKSAtIHBvaW50LngoKTsKKyAg
ICBpbnQgeWRpc3RhbmNlID0gY2VudGVyUG9pbnQueSgpIC0gcG9pbnQueSgpOworICAgIGlmICh3
aWR0aCgpID4gaGVpZ2h0KCkpCisgICAgICAgIHhkaXN0YW5jZSA9IGRpc3RhbmNlVG9JbnRlcnZh
bChwb2ludC54KCksIHgoKSArIChoZWlnaHQoKSAvIDIpLCBtYXhYKCkgLSAoaGVpZ2h0KCkgLyAy
KSk7CisgICAgZWxzZQorICAgICAgICB5ZGlzdGFuY2UgPSBkaXN0YW5jZVRvSW50ZXJ2YWwocG9p
bnQueSgpLCB5KCkgKyAod2lkdGgoKSAvIDIpLCBtYXhZKCkgLSAod2lkdGgoKSAvIDIpKTsKKyAg
ICByZXR1cm4gSW50U2l6ZSh4ZGlzdGFuY2UsIHlkaXN0YW5jZSk7Cit9CisKIEludFJlY3QgdW5p
b25SZWN0KGNvbnN0IFZlY3RvcjxJbnRSZWN0PiYgcmVjdHMpCiB7CiAgICAgSW50UmVjdCByZXN1
bHQ7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbnRSZWN0
LmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbnRSZWN0LmgKaW5kZXggM2Vh
ODIyOS4uYmYzZTE3NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvSW50UmVjdC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ludFJl
Y3QuaApAQCAtMTcxLDYgKzE3MSwxMSBAQCBwdWJsaWM6CiAgICAgdm9pZCBpbmZsYXRlKGludCBk
KSB7IGluZmxhdGVYKGQpOyBpbmZsYXRlWShkKTsgfQogICAgIHZvaWQgc2NhbGUoZmxvYXQgcyk7
CiAKKyAgICBJbnRTaXplIGRpZmZlcmVuY2VUb1BvaW50KGNvbnN0IEludFBvaW50JikgY29uc3Q7
CisgICAgSW50U2l6ZSBkaWZmZXJlbmNlRnJvbUNlbnRlckxpbmVUb1BvaW50KGNvbnN0IEludFBv
aW50JikgY29uc3Q7CisgICAgaW50IGRpc3RhbmNlU3F1YXJlZFRvUG9pbnQoY29uc3QgSW50UG9p
bnQmIHApIGNvbnN0IHsgcmV0dXJuIGRpZmZlcmVuY2VUb1BvaW50KHApLmRpYWdvbmFsTGVuZ3Ro
U3F1YXJlZCgpOyB9CisgICAgaW50IGRpc3RhbmNlU3F1YXJlZEZyb21DZW50ZXJMaW5lVG9Qb2lu
dChjb25zdCBJbnRQb2ludCYgcCkgY29uc3QgeyByZXR1cm4gZGlmZmVyZW5jZUZyb21DZW50ZXJM
aW5lVG9Qb2ludChwKS5kaWFnb25hbExlbmd0aFNxdWFyZWQoKTsgfQorCiAgICAgSW50UmVjdCB0
cmFuc3Bvc2VkUmVjdCgpIGNvbnN0IHsgcmV0dXJuIEludFJlY3QobV9sb2NhdGlvbi50cmFuc3Bv
c2VkUG9pbnQoKSwgbV9zaXplLnRyYW5zcG9zZWRTaXplKCkpOyB9CiAKICNpZiBQTEFURk9STShX
WCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ludFNpemUu
aCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ludFNpemUuaAppbmRleCA2MjVk
YjNjLi43ZGJmN2VlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9JbnRTaXplLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW50U2l6
ZS5oCkBAIC05OCw2ICs5OCwxNiBAQCBwdWJsaWM6CiAgICAgICAgICp0aGlzID0gZXhwYW5kZWRU
byhJbnRTaXplKCkpOwogICAgIH0KIAorICAgIGludCBhcmVhKCkgY29uc3QKKyAgICB7CisgICAg
ICAgIHJldHVybiBtX3dpZHRoICogbV9oZWlnaHQ7CisgICAgfQorCisgICAgaW50IGRpYWdvbmFs
TGVuZ3RoU3F1YXJlZCgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gbV93aWR0aCAqIG1f
d2lkdGggKyBtX2hlaWdodCAqIG1faGVpZ2h0OworICAgIH0KKwogICAgIEludFNpemUgdHJhbnNw
b3NlZFNpemUoKSBjb25zdAogICAgIHsKICAgICAgICAgcmV0dXJuIEludFNpemUobV9oZWlnaHQs
IG1fd2lkdGgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvdGVzdGluZy9JbnRlcm5hbHMu
Y3BwIGIvU291cmNlL1dlYkNvcmUvdGVzdGluZy9JbnRlcm5hbHMuY3BwCmluZGV4IDg0ZTljZjcu
Ljc5N2FlYmYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3Rlc3RpbmcvSW50ZXJuYWxzLmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS90ZXN0aW5nL0ludGVybmFscy5jcHAKQEAgLTY0LDYgKzY0
LDExIEBACiAjaW5jbHVkZSAiQ29sb3JDaG9vc2VyLmgiCiAjZW5kaWYKIAorI2lmIEVOQUJMRShU
T1VDSF9BREpVU1RNRU5UKQorI2luY2x1ZGUgIkV2ZW50SGFuZGxlci5oIgorI2luY2x1ZGUgIldl
YktpdFBvaW50LmgiCisjZW5kaWYKKwogbmFtZXNwYWNlIFdlYkNvcmUgewogCiBzdGF0aWMgYm9v
bCBtYXJrZXJUeXBlc0Zyb20oY29uc3QgU3RyaW5nJiBtYXJrZXJUeXBlLCBEb2N1bWVudE1hcmtl
cjo6TWFya2VyVHlwZXMmIHJlc3VsdCkKQEAgLTUxNyw2ICs1MjIsNDYgQEAgdW5zaWduZWQgSW50
ZXJuYWxzOjpsZW5ndGhGcm9tUmFuZ2UoRWxlbWVudCogc2NvcGUsIGNvbnN0IFJhbmdlKiByYW5n
ZSwgRXhjZXB0aW8KICAgICByZXR1cm4gbGVuZ3RoOwogfQogCisKKyNpZiBFTkFCTEUoVE9VQ0hf
QURKVVNUTUVOVCkKK1Bhc3NSZWZQdHI8V2ViS2l0UG9pbnQ+IEludGVybmFsczo6dG91Y2hQb3Np
dGlvbkFkanVzdGVkVG9CZXN0Tm9kZUZvckdlc3R1cmVUYXAobG9uZyB4LCBsb25nIHksIGxvbmcg
dywgbG9uZyBoLCBEb2N1bWVudCogZG9jdW1lbnQsIEV4Y2VwdGlvbkNvZGUmIGVjKQoreworICAg
IGlmICghZG9jdW1lbnQgfHwgIWRvY3VtZW50LT5mcmFtZSgpKSB7CisgICAgICAgIGVjID0gSU5W
QUxJRF9BQ0NFU1NfRVJSOworICAgICAgICByZXR1cm4gMDsKKyAgICB9CisKKyAgICBJbnRTaXpl
IHJhZGl1cyh3IC8gMiwgaCAvIDIpOworICAgIEludFBvaW50IHBvaW50KHggKyByYWRpdXMud2lk
dGgoKSwgeSArIHJhZGl1cy5oZWlnaHQoKSk7CisKKyAgICBOb2RlKiB0YXJnZXROb2RlOworICAg
IEludFBvaW50IGFkanVzdGVkUG9pbnQ7CisKKyAgICBkb2N1bWVudC0+ZnJhbWUoKS0+ZXZlbnRI
YW5kbGVyKCktPm5vZGVGb3JUYXBHZXN0dXJlQXRUb3VjaFBvaW50KHBvaW50LCByYWRpdXMsIGFk
anVzdGVkUG9pbnQsIHRhcmdldE5vZGUpOworCisgICAgcmV0dXJuIFdlYktpdFBvaW50OjpjcmVh
dGUoYWRqdXN0ZWRQb2ludC54KCksIGFkanVzdGVkUG9pbnQueSgpKTsKK30KKworUGFzc1JlZlB0
cjxOb2RlPiBJbnRlcm5hbHM6OnRvdWNoTm9kZUFkanVzdGVkVG9CZXN0Tm9kZUZvckdlc3R1cmVU
YXAobG9uZyB4LCBsb25nIHksIGxvbmcgdywgbG9uZyBoLCBEb2N1bWVudCogZG9jdW1lbnQsIEV4
Y2VwdGlvbkNvZGUmIGVjKQoreworICAgIGlmICghZG9jdW1lbnQgfHwgIWRvY3VtZW50LT5mcmFt
ZSgpKSB7CisgICAgICAgIGVjID0gSU5WQUxJRF9BQ0NFU1NfRVJSOworICAgICAgICByZXR1cm4g
MDsKKyAgICB9CisKKyAgICBJbnRTaXplIHJhZGl1cyh3IC8gMiwgaCAvIDIpOworICAgIEludFBv
aW50IHBvaW50KHggKyByYWRpdXMud2lkdGgoKSwgeSArIHJhZGl1cy5oZWlnaHQoKSk7CisKKyAg
ICBOb2RlKiB0YXJnZXROb2RlOworICAgIEludFBvaW50IGFkanVzdGVkUG9pbnQ7CisKKyAgICBk
b2N1bWVudC0+ZnJhbWUoKS0+ZXZlbnRIYW5kbGVyKCktPm5vZGVGb3JUYXBHZXN0dXJlQXRUb3Vj
aFBvaW50KHBvaW50LCByYWRpdXMsIGFkanVzdGVkUG9pbnQsIHRhcmdldE5vZGUpOworCisgICAg
cmV0dXJuIGFkb3B0UmVmKHRhcmdldE5vZGUpOworfQorI2VuZGlmCisKKwogaW50IEludGVybmFs
czo6bGFzdFNwZWxsQ2hlY2tSZXF1ZXN0U2VxdWVuY2UoRG9jdW1lbnQqIGRvY3VtZW50LCBFeGNl
cHRpb25Db2RlJiBlYykKIHsKICAgICBTcGVsbENoZWNrZXIqIGNoZWNrZXIgPSBzcGVsbGNoZWNr
ZXIoZG9jdW1lbnQpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvdGVzdGluZy9JbnRlcm5h
bHMuaCBiL1NvdXJjZS9XZWJDb3JlL3Rlc3RpbmcvSW50ZXJuYWxzLmgKaW5kZXggZWEyZjhiOC4u
NDI4NDBhNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvdGVzdGluZy9JbnRlcm5hbHMuaAor
KysgYi9Tb3VyY2UvV2ViQ29yZS90ZXN0aW5nL0ludGVybmFscy5oCkBAIC00Miw2ICs0Miw3IEBA
IGNsYXNzIEludGVybmFsU2V0dGluZ3M7CiBjbGFzcyBOb2RlOwogY2xhc3MgUmFuZ2U7CiBjbGFz
cyBTaGFkb3dSb290OworY2xhc3MgV2ViS2l0UG9pbnQ7CiAKIHR5cGVkZWYgaW50IEV4Y2VwdGlv
bkNvZGU7CiAKQEAgLTEwMyw2ICsxMDQsMTEgQEAgcHVibGljOgogICAgIHVuc2lnbmVkIGxvY2F0
aW9uRnJvbVJhbmdlKEVsZW1lbnQqIHNjb3BlLCBjb25zdCBSYW5nZSosIEV4Y2VwdGlvbkNvZGUm
KTsKICAgICB1bnNpZ25lZCBsZW5ndGhGcm9tUmFuZ2UoRWxlbWVudCogc2NvcGUsIGNvbnN0IFJh
bmdlKiwgRXhjZXB0aW9uQ29kZSYpOwogCisjaWYgRU5BQkxFKFRPVUNIX0FESlVTVE1FTlQpCisg
ICAgUGFzc1JlZlB0cjxXZWJLaXRQb2ludD4gdG91Y2hQb3NpdGlvbkFkanVzdGVkVG9CZXN0Tm9k
ZUZvckdlc3R1cmVUYXAobG9uZyB4LCBsb25nIHksIGxvbmcgdywgbG9uZyBoLCBEb2N1bWVudCos
IEV4Y2VwdGlvbkNvZGUmKTsKKyAgICBQYXNzUmVmUHRyPE5vZGU+IHRvdWNoTm9kZUFkanVzdGVk
VG9CZXN0Tm9kZUZvckdlc3R1cmVUYXAobG9uZyB4LCBsb25nIHksIGxvbmcgdywgbG9uZyBoLCBE
b2N1bWVudCosIEV4Y2VwdGlvbkNvZGUmKTsKKyNlbmRpZgorCiAgICAgaW50IGxhc3RTcGVsbENo
ZWNrUmVxdWVzdFNlcXVlbmNlKERvY3VtZW50KiwgRXhjZXB0aW9uQ29kZSYpOwogICAgIGludCBs
YXN0U3BlbGxDaGVja1Byb2Nlc3NlZFNlcXVlbmNlKERvY3VtZW50KiwgRXhjZXB0aW9uQ29kZSYp
OwogICAgIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvdGVzdGluZy9JbnRlcm5hbHMuaWRs
IGIvU291cmNlL1dlYkNvcmUvdGVzdGluZy9JbnRlcm5hbHMuaWRsCmluZGV4IGJhNzZkNDguLmFi
Mzk0M2QgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3Rlc3RpbmcvSW50ZXJuYWxzLmlkbAor
KysgYi9Tb3VyY2UvV2ViQ29yZS90ZXN0aW5nL0ludGVybmFscy5pZGwKQEAgLTc4LDYgKzc4LDEx
IEBAIG1vZHVsZSB3aW5kb3cgewogICAgICAgICB1bnNpZ25lZCBsb25nIGxvY2F0aW9uRnJvbVJh
bmdlKGluIEVsZW1lbnQgc2NvcGUsIGluIFJhbmdlIHJhbmdlKSByYWlzZXMgKERPTUV4Y2VwdGlv
bik7CiAgICAgICAgIHVuc2lnbmVkIGxvbmcgbGVuZ3RoRnJvbVJhbmdlKGluIEVsZW1lbnQgc2Nv
cGUsIGluIFJhbmdlIHJhbmdlKSByYWlzZXMgKERPTUV4Y2VwdGlvbik7CiAKKyNpZiBkZWZpbmVk
KEVOQUJMRV9UT1VDSF9BREpVU1RNRU5UKSAmJiBFTkFCTEVfVE9VQ0hfQURKVVNUTUVOVAorICAg
ICAgICBXZWJLaXRQb2ludCB0b3VjaFBvc2l0aW9uQWRqdXN0ZWRUb0Jlc3ROb2RlRm9yR2VzdHVy
ZVRhcChpbiBsb25nIHgsIGluIGxvbmcgeSwgaW4gbG9uZyB3LCBpbiBsb25nIGgsIGluIERvY3Vt
ZW50IGRvY3VtZW50KSByYWlzZXMgKERPTUV4Y2VwdGlvbik7CisgICAgICAgIE5vZGUgdG91Y2hO
b2RlQWRqdXN0ZWRUb0Jlc3ROb2RlRm9yR2VzdHVyZVRhcChpbiBsb25nIHgsIGluIGxvbmcgeSwg
aW4gbG9uZyB3LCBpbiBsb25nIGgsIGluIERvY3VtZW50IGRvY3VtZW50KSByYWlzZXMgKERPTUV4
Y2VwdGlvbik7CisjZW5kaWYKKwogICAgICAgICBsb25nIGxhc3RTcGVsbENoZWNrUmVxdWVzdFNl
cXVlbmNlKGluIERvY3VtZW50IGRvY3VtZW50KSByYWlzZXMgKERPTUV4Y2VwdGlvbik7CiAgICAg
ICAgIGxvbmcgbGFzdFNwZWxsQ2hlY2tQcm9jZXNzZWRTZXF1ZW5jZShpbiBEb2N1bWVudCBkb2N1
bWVudCkgcmFpc2VzIChET01FeGNlcHRpb24pOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0
Mi9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cKaW5kZXggYjcxNDA5Ni4uN2Rh
NjY0MiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9X
ZWJLaXQyL0NoYW5nZUxvZwpAQCAtMSwzICsxLDIzIEBACisyMDEyLTAyLTI0ICBBbGxhbiBTYW5k
ZmVsZCBKZW5zZW4gIDxhbGxhbi5qZW5zZW5Abm9raWEuY29tPgorCisgICAgICAgIFNlbGVjdCBi
ZXN0IHRhcmdldCBmb3IgdGFwIGdlc3R1cmUuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD03ODgwMQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAo
T09QUyEpLgorCisgICAgICAgIFNlbmQgcmFkaXVzIHRvIGhhbmRsZVBvdGVudGlhbFNpbmdsZVRh
cEV2ZW50IHNvIGl0IGNhbiBkbyB0aGUgc2FtZSBoaXQKKyAgICAgICAgZGV0ZWN0aW9uIHRoZSB0
YXAgZ2VzdHVyZSBsYXRlciBkb2VzLgorCisgICAgICAgICogVUlQcm9jZXNzL1dlYlBhZ2VQcm94
eS5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2VQcm94eTo6aGFuZGxlUG90ZW50aWFsQWN0
aXZhdGlvbik6CisgICAgICAgICogVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5oOgorICAgICAgICAq
IFVJUHJvY2Vzcy9xdC9RdFdlYlBhZ2VFdmVudEhhbmRsZXIuY3BwOgorICAgICAgICAoUXRXZWJQ
YWdlRXZlbnRIYW5kbGVyOjpoYW5kbGVQb3RlbnRpYWxTaW5nbGVUYXBFdmVudCk6CisgICAgICAg
ICogV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UuY3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJQ
YWdlOjpoaWdobGlnaHRQb3RlbnRpYWxBY3RpdmF0aW9uKToKKyAgICAgICAgKiBXZWJQcm9jZXNz
L1dlYlBhZ2UvV2ViUGFnZS5oOgorICAgICAgICAqIFdlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdl
Lm1lc3NhZ2VzLmluOgorCiAyMDEyLTAyLTI0ICBTZXJnaW8gVmlsbGFyIFNlbmluICA8c3ZpbGxh
ckBpZ2FsaWEuY29tPgogCiAgICAgICAgIFtXSzJdIFtHVEtdIERlc3RydWN0b3Igbm90IGludm9r
ZWQgaW4gRWRpdG9yQ2xpZW50RnJhbWVEZXN0cnVjdGlvbk9ic2VydmVyCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViUGFnZVByb3h5LmNwcCBiL1NvdXJjZS9XZWJLaXQy
L1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkuY3BwCmluZGV4IDhlYTNmZTQuLjFmMTllMTcgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkuY3BwCisrKyBiL1Nv
dXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkuY3BwCkBAIC05ODgsOSArOTg4LDkg
QEAgdm9pZCBXZWJQYWdlUHJveHk6OmhhbmRsZUdlc3R1cmVFdmVudChjb25zdCBXZWJHZXN0dXJl
RXZlbnQmIGV2ZW50KQogCiAjaWYgRU5BQkxFKFRPVUNIX0VWRU5UUykKICNpZiBQTEFURk9STShR
VCkKLXZvaWQgV2ViUGFnZVByb3h5OjpoYW5kbGVQb3RlbnRpYWxBY3RpdmF0aW9uKGNvbnN0IElu
dFBvaW50JiBsYXlvdXRQb2ludCkKK3ZvaWQgV2ViUGFnZVByb3h5OjpoYW5kbGVQb3RlbnRpYWxB
Y3RpdmF0aW9uKGNvbnN0IEludFBvaW50JiBsYXlvdXRQb2ludCwgY29uc3QgSW50U2l6ZSYgYXJl
YSkKIHsKLSAgICBwcm9jZXNzKCktPnNlbmQoTWVzc2FnZXM6OldlYlBhZ2U6OkhpZ2hsaWdodFBv
dGVudGlhbEFjdGl2YXRpb24obGF5b3V0UG9pbnQpLCBtX3BhZ2VJRCk7CisgICAgcHJvY2Vzcygp
LT5zZW5kKE1lc3NhZ2VzOjpXZWJQYWdlOjpIaWdobGlnaHRQb3RlbnRpYWxBY3RpdmF0aW9uKGxh
eW91dFBvaW50LCBhcmVhKSwgbV9wYWdlSUQpOwogfQogI2VuZGlmCiAKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkuaCBiL1NvdXJjZS9XZWJLaXQyL1VJ
UHJvY2Vzcy9XZWJQYWdlUHJveHkuaAppbmRleCBhZjhkYTFiLi43ODYzNmM3IDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViUGFnZVByb3h5LmgKKysrIGIvU291cmNlL1dl
YktpdDIvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5oCkBAIC0zODUsNyArMzg1LDcgQEAgcHVibGlj
OgogI2lmIEVOQUJMRShUT1VDSF9FVkVOVFMpCiAgICAgdm9pZCBoYW5kbGVUb3VjaEV2ZW50KGNv
bnN0IE5hdGl2ZVdlYlRvdWNoRXZlbnQmKTsKICNpZiBQTEFURk9STShRVCkKLSAgICB2b2lkIGhh
bmRsZVBvdGVudGlhbEFjdGl2YXRpb24oY29uc3QgV2ViQ29yZTo6SW50UG9pbnQmKTsKKyAgICB2
b2lkIGhhbmRsZVBvdGVudGlhbEFjdGl2YXRpb24oY29uc3QgV2ViQ29yZTo6SW50UG9pbnQmLCBj
b25zdCBXZWJDb3JlOjpJbnRTaXplJik7CiAjZW5kaWYKICNlbmRpZgogCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvcXQvUXRXZWJQYWdlRXZlbnRIYW5kbGVyLmNwcCBiL1Nv
dXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9xdC9RdFdlYlBhZ2VFdmVudEhhbmRsZXIuY3BwCmluZGV4
IDdkMDg5OTIuLjAwMDgxYjQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9x
dC9RdFdlYlBhZ2VFdmVudEhhbmRsZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vz
cy9xdC9RdFdlYlBhZ2VFdmVudEhhbmRsZXIuY3BwCkBAIC0yOTIsNyArMjkyLDcgQEAgYm9vbCBR
dFdlYlBhZ2VFdmVudEhhbmRsZXI6OmhhbmRsZURyb3BFdmVudChRRHJvcEV2ZW50KiBldikKIHZv
aWQgUXRXZWJQYWdlRXZlbnRIYW5kbGVyOjpoYW5kbGVQb3RlbnRpYWxTaW5nbGVUYXBFdmVudChj
b25zdCBRVG91Y2hFdmVudDo6VG91Y2hQb2ludCYgcG9pbnQpCiB7CiAgICAgUVRyYW5zZm9ybSBm
cm9tSXRlbVRyYW5zZm9ybSA9IG1fd2ViUGFnZS0+dHJhbnNmb3JtRnJvbUl0ZW0oKTsKLSAgICBt
X3dlYlBhZ2VQcm94eS0+aGFuZGxlUG90ZW50aWFsQWN0aXZhdGlvbihmcm9tSXRlbVRyYW5zZm9y
bS5tYXAocG9pbnQucG9zKCkpLnRvUG9pbnQoKSk7CisgICAgbV93ZWJQYWdlUHJveHktPmhhbmRs
ZVBvdGVudGlhbEFjdGl2YXRpb24oZnJvbUl0ZW1UcmFuc2Zvcm0ubWFwKHBvaW50LnBvcygpKS50
b1BvaW50KCksIEludFNpemUocG9pbnQucmVjdCgpLnNpemUoKS50b1NpemUoKSkpOwogfQogCiB2
b2lkIFF0V2ViUGFnZUV2ZW50SGFuZGxlcjo6aGFuZGxlU2luZ2xlVGFwRXZlbnQoY29uc3QgUVRv
dWNoRXZlbnQ6OlRvdWNoUG9pbnQmIHBvaW50KQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIv
V2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UuY3BwIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vz
cy9XZWJQYWdlL1dlYlBhZ2UuY3BwCmluZGV4IGRhZDgxMDQuLmYyMjZmOTQgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmNwcAorKysgYi9Tb3Vy
Y2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5jcHAKQEAgLTE0NDcsMTYgKzE0
NDcsMjAgQEAgdm9pZCBXZWJQYWdlOjpyZXN0b3JlU2Vzc2lvbkFuZE5hdmlnYXRlVG9DdXJyZW50
SXRlbShjb25zdCBTZXNzaW9uU3RhdGUmIHNlc3Npb24KIAogI2lmIEVOQUJMRShUT1VDSF9FVkVO
VFMpCiAjaWYgUExBVEZPUk0oUVQpCi12b2lkIFdlYlBhZ2U6OmhpZ2hsaWdodFBvdGVudGlhbEFj
dGl2YXRpb24oY29uc3QgSW50UG9pbnQmIHBvaW50KQordm9pZCBXZWJQYWdlOjpoaWdobGlnaHRQ
b3RlbnRpYWxBY3RpdmF0aW9uKGNvbnN0IEludFBvaW50JiBwb2ludCwgY29uc3QgSW50U2l6ZSYg
YXJlYSkKIHsKICAgICBOb2RlKiBhY3RpdmF0aW9uTm9kZSA9IDA7CiAgICAgRnJhbWUqIG1haW5m
cmFtZSA9IG1fcGFnZS0+bWFpbkZyYW1lKCk7CisgICAgSW50UG9pbnQgYWRqdXN0ZWRQb2ludDsK
IAogICAgIGlmIChwb2ludCAhPSBJbnRQb2ludDo6emVybygpKSB7CisjaWYgRU5BQkxFKFRPVUNI
X0FESlVTVE1FTlQpCisgICAgICAgIG1haW5mcmFtZS0+ZXZlbnRIYW5kbGVyKCktPm5vZGVGb3JU
YXBHZXN0dXJlQXRUb3VjaFBvaW50KHBvaW50LCBJbnRTaXplKGFyZWEud2lkdGgoKSAvIDIsIGFy
ZWEuaGVpZ2h0KCkgLyAyKSwgYWRqdXN0ZWRQb2ludCwgYWN0aXZhdGlvbk5vZGUpOworI2Vsc2UK
ICAgICAgICAgSGl0VGVzdFJlc3VsdCByZXN1bHQgPSBtYWluZnJhbWUtPmV2ZW50SGFuZGxlcigp
LT5oaXRUZXN0UmVzdWx0QXRQb2ludChtYWluZnJhbWUtPnZpZXcoKS0+d2luZG93VG9Db250ZW50
cyhwb2ludCksIC8qYWxsb3dTaGFkb3dDb250ZW50Ki8gZmFsc2UsIC8qaWdub3JlQ2xpcHBpbmcq
LyB0cnVlKTsKICAgICAgICAgYWN0aXZhdGlvbk5vZGUgPSByZXN1bHQuaW5uZXJOb2RlKCk7Ci0K
LSAgICAgICAgaWYgKCFhY3RpdmF0aW9uTm9kZS0+aXNGb2N1c2FibGUoKSkKKyNlbmRpZgorICAg
ICAgICBpZiAoYWN0aXZhdGlvbk5vZGUgJiYgIWFjdGl2YXRpb25Ob2RlLT5pc0ZvY3VzYWJsZSgp
KQogICAgICAgICAgICAgYWN0aXZhdGlvbk5vZGUgPSBhY3RpdmF0aW9uTm9kZS0+ZW5jbG9zaW5n
TGlua0V2ZW50UGFyZW50T3JTZWxmKCk7CiAgICAgfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5oIGIvU291cmNlL1dlYktpdDIvV2ViUHJv
Y2Vzcy9XZWJQYWdlL1dlYlBhZ2UuaAppbmRleCA3NDViZjRkLi5kNmIxZjczIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5oCisrKyBiL1NvdXJj
ZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmgKQEAgLTU2MCw3ICs1NjAsNyBA
QCBwcml2YXRlOgogICAgIHZvaWQgdG91Y2hFdmVudChjb25zdCBXZWJUb3VjaEV2ZW50Jik7CiAg
ICAgdm9pZCB0b3VjaEV2ZW50U3luY0ZvclRlc3RpbmcoY29uc3QgV2ViVG91Y2hFdmVudCYsIGJv
b2wmIGhhbmRsZWQpOwogI2lmIFBMQVRGT1JNKFFUKQotICAgIHZvaWQgaGlnaGxpZ2h0UG90ZW50
aWFsQWN0aXZhdGlvbihjb25zdCBXZWJDb3JlOjpJbnRQb2ludCYpOworICAgIHZvaWQgaGlnaGxp
Z2h0UG90ZW50aWFsQWN0aXZhdGlvbihjb25zdCBXZWJDb3JlOjpJbnRQb2ludCYsIGNvbnN0IFdl
YkNvcmU6OkludFNpemUmKTsKICNlbmRpZgogI2VuZGlmCiAgICAgdm9pZCBjb250ZXh0TWVudUhp
ZGRlbigpIHsgbV9pc1Nob3dpbmdDb250ZXh0TWVudSA9IGZhbHNlOyB9CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5tZXNzYWdlcy5pbiBiL1Nv
dXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLm1lc3NhZ2VzLmluCmluZGV4
IDc4MTNhZGYuLjFjNDY0NTggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3Mv
V2ViUGFnZS9XZWJQYWdlLm1lc3NhZ2VzLmluCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nl
c3MvV2ViUGFnZS9XZWJQYWdlLm1lc3NhZ2VzLmluCkBAIC00MSw3ICs0MSw3IEBAIG1lc3NhZ2Vz
IC0+IFdlYlBhZ2UgewogICAgIFRvdWNoRXZlbnQoV2ViS2l0OjpXZWJUb3VjaEV2ZW50IGV2ZW50
KQogICAgIFRvdWNoRXZlbnRTeW5jRm9yVGVzdGluZyhXZWJLaXQ6OldlYlRvdWNoRXZlbnQgZXZl
bnQpIC0+IChib29sIGhhbmRsZWQpCiAjaWYgUExBVEZPUk0oUVQpCi0gICAgSGlnaGxpZ2h0UG90
ZW50aWFsQWN0aXZhdGlvbihXZWJDb3JlOjpJbnRQb2ludCBwb2ludCkKKyAgICBIaWdobGlnaHRQ
b3RlbnRpYWxBY3RpdmF0aW9uKFdlYkNvcmU6OkludFBvaW50IHBvaW50LCBXZWJDb3JlOjpJbnRT
aXplIHJhZGl1cykKICNlbmRpZgogI2VuZGlmCiAKZGlmZiAtLWdpdCBhL1Rvb2xzL0NoYW5nZUxv
ZyBiL1Rvb2xzL0NoYW5nZUxvZwppbmRleCAzMDM4ZTJlLi45MzE5MTkzIDEwMDY0NAotLS0gYS9U
b29scy9DaGFuZ2VMb2cKKysrIGIvVG9vbHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTQgQEAKKzIw
MTItMDItMjQgIEFsbGFuIFNhbmRmZWxkIEplbnNlbiAgPGFsbGFuLmplbnNlbkBub2tpYS5jb20+
CisKKyAgICAgICAgU2VsZWN0IGJlc3QgdGFyZ2V0IGZvciB0YXAgZ2VzdHVyZS4KKyAgICAgICAg
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTc4ODAxCisKKyAgICAgICAg
UmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQWRkIFRPVUNIX0FESlVTVE1F
TlQgdG8gZW5hYmxlZCBmZWF0dXJlcy4KKworICAgICAgICAqIHFtYWtlL21rc3BlY3MvZmVhdHVy
ZXMvZmVhdHVyZXMucHJmOgorCiAyMDEyLTAyLTI0ICBLZW50YXJvIEhhcmEgIDxoYXJha2VuQGNo
cm9taXVtLm9yZz4KIAogICAgICAgICBBZGQgcGVyZm9ybWFuY2UgdGVzdHMgZm9yIERPTSBhdHRy
aWJ1dGUgZ2V0dGVycyBhbmQgc2V0dGVycwpkaWZmIC0tZ2l0IGEvVG9vbHMvcW1ha2UvbWtzcGVj
cy9mZWF0dXJlcy9mZWF0dXJlcy5wcmYgYi9Ub29scy9xbWFrZS9ta3NwZWNzL2ZlYXR1cmVzL2Zl
YXR1cmVzLnByZgppbmRleCBlYTczMWU0Li5jN2FmMzk0IDEwMDY0NAotLS0gYS9Ub29scy9xbWFr
ZS9ta3NwZWNzL2ZlYXR1cmVzL2ZlYXR1cmVzLnByZgorKysgYi9Ub29scy9xbWFrZS9ta3NwZWNz
L2ZlYXR1cmVzL2ZlYXR1cmVzLnByZgpAQCAtODYsNiArODYsNyBAQCBoYXZlUXQoNCk6dW5peDoh
bWFjOiFlbWJlZGRlZCB7CiAhY29udGFpbnMoREVGSU5FUywgRU5BQkxFX1ZJREVPX1RSQUNLPS4p
OiBERUZJTkVTICs9IEVOQUJMRV9WSURFT19UUkFDSz0wCiAhY29udGFpbnMoREVGSU5FUywgRU5B
QkxFX1RPVUNIX0lDT05fTE9BRElORz0uKTogREVGSU5FUyArPSBFTkFCTEVfVE9VQ0hfSUNPTl9M
T0FESU5HPTAKICFjb250YWlucyhERUZJTkVTLCBFTkFCTEVfQU5JTUFUSU9OX0FQST0uKTogREVG
SU5FUyArPSBFTkFCTEVfQU5JTUFUSU9OX0FQST0wCishY29udGFpbnMoREVGSU5FUywgRU5BQkxF
X1RPVUNIX0FESlVTVE1FTlQ9Lik6IERFRklORVMgKz0gRU5BQkxFX1RPVUNIX0FESlVTVE1FTlQ9
MQogCiAjIEVuYWJsZWQgaW4gU291cmNlL0phdmFTY3JpcHRDb3JlL3d0Zi9QbGF0Zm9ybS5oIGlm
IG5vdCBzZXQKICMgV2UgaGF2ZSB0byBkbyB0aGUgc2FtZSB0byBiZSBhYmxlIHRvIGRpc2FibGUg
dGhlIGZlYXR1cmUgaW4gYnVpbGQtd2Via2l0CkBAIC0yNTMsNiArMjU0LDcgQEAgY29udGFpbnMo
REVGSU5FUywgRU5BQkxFX1ZJREVPX1RSQUNLPTEpOiBGRUFUVVJFX0RFRklORVNfSkFWQVNDUklQ
VCArPSBFTkFCTEVfVkkKIGNvbnRhaW5zKERFRklORVMsIEVOQUJMRV9EQVRBX1RSQU5TRkVSX0lU
RU1TPTEpOiBGRUFUVVJFX0RFRklORVNfSkFWQVNDUklQVCArPSBFTkFCTEVfREFUQV9UUkFOU0ZF
Ul9JVEVNUz0xCiBjb250YWlucyhERUZJTkVTLCBFTkFCTEVfRlVMTFNDUkVFTl9BUEk9MSk6IEZF
QVRVUkVfREVGSU5FU19KQVZBU0NSSVBUICs9IEVOQUJMRV9GVUxMU0NSRUVOX0FQST0xCiBjb250
YWlucyhERUZJTkVTLCBFTkFCTEVfUkVRVUVTVF9BTklNQVRJT05fRlJBTUU9MSk6IEZFQVRVUkVf
REVGSU5FU19KQVZBU0NSSVBUICs9IEVOQUJMRV9SRVFVRVNUX0FOSU1BVElPTl9GUkFNRT0xCitj
b250YWlucyhERUZJTkVTLCBFTkFCTEVfVE9VQ0hfQURKVVNUTUVOVD0xKTogRkVBVFVSRV9ERUZJ
TkVTX0pBVkFTQ1JJUFQgKz0gRU5BQkxFX1RPVUNIX0FESlVTVE1FTlQ9MQogCiAjIFVzZWQgdG8g
Y29tcHV0ZSBkZWZhdWx0cyBmb3IgdGhlIGJ1aWxkLXdlYmtpdCBzY3JpcHQKICMgRG9uJ3QgcGxh
Y2UgYW55dGhpbmcgYWZ0ZXIgdGhpcyEK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>128728</attachid>
            <date>2012-02-24 07:05:11 -0800</date>
            <delta_ts>2012-02-24 07:16:28 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>Patch9</filename>
            <type>text/plain</type>
            <size>62421</size>
            <attacher name="Allan Sandfeld Jensen">allan.jensen</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL0NoYW5nZUxvZyBiL0xheW91dFRlc3RzL0NoYW5nZUxv
ZwppbmRleCAxNTkzNDJjLi41OWFjMTA1IDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9DaGFuZ2VM
b2cKKysrIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjUgQEAKKzIwMTItMDIt
MjQgIEFsbGFuIFNhbmRmZWxkIEplbnNlbiAgPGFsbGFuLmplbnNlbkBub2tpYS5jb20+CisKKyAg
ICAgICAgU2VsZWN0IGJlc3QgdGFyZ2V0IGZvciB0YXAgZ2VzdHVyZS4KKyAgICAgICAgaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTc4ODAxCisKKyAgICAgICAgUmV2aWV3
ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVGVzdCBvZiB0b3VjaCBhZGp1c3RtZW50
cy4gVGVzdHMgc2V2ZXJhbCBib3RoIG5vcm1hbCBhbmQgdHJpY2t5IGNhc2VzLgorICAgICAgICBU
aGUgdGVzdHMgYXJlIG5vdCBleGhhdXN0aXZlIHRob3VnaC4KKworICAgICAgICAqIHBsYXRmb3Jt
L2Nocm9taXVtL3Rlc3RfZXhwZWN0YXRpb25zLnR4dDoKKyAgICAgICAgKiBwbGF0Zm9ybS9lZmwv
U2tpcHBlZDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ndGsvU2tpcHBlZDoKKyAgICAgICAgKiBwbGF0
Zm9ybS9tYWMvU2tpcHBlZDoKKyAgICAgICAgKiBwbGF0Zm9ybS93aW4vU2tpcHBlZDoKKyAgICAg
ICAgKiB0b3VjaGFkanVzdG1lbnQvZXZlbnQtdHJpZ2dlcmVkLXdpZGdldHMtZXhwZWN0ZWQudHh0
OiBBZGRlZC4KKyAgICAgICAgKiB0b3VjaGFkanVzdG1lbnQvZXZlbnQtdHJpZ2dlcmVkLXdpZGdl
dHMuaHRtbDogQWRkZWQuCisgICAgICAgICogdG91Y2hhZGp1c3RtZW50L25lc3RlZC10b3VjaC1l
eHBlY3RlZC50eHQ6IEFkZGVkLgorICAgICAgICAqIHRvdWNoYWRqdXN0bWVudC9uZXN0ZWQtdG91
Y2guaHRtbDogQWRkZWQuCisgICAgICAgICogdG91Y2hhZGp1c3RtZW50L3RvdWNoLWlubGluZXMt
ZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAgICAgKiB0b3VjaGFkanVzdG1lbnQvdG91Y2gtaW5s
aW5lcy5odG1sOiBBZGRlZC4KKwogMjAxMi0wMi0yNCAgRmxleCBNb2JpbGUgIDxyaGF1Y2tAYWRv
YmUuY29tPgogCiAgICAgICAgIENvbnZlcnQgc29tZSBmYXN0L3JlZ2lvbnMgcGl4ZWwgdGVzdHMg
dG8gcmVmdGVzdHMKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3BsYXRmb3JtL2Nocm9taXVtL3Rl
c3RfZXhwZWN0YXRpb25zLnR4dCBiL0xheW91dFRlc3RzL3BsYXRmb3JtL2Nocm9taXVtL3Rlc3Rf
ZXhwZWN0YXRpb25zLnR4dAppbmRleCA4YmRmZmQ3Li4yOGFkYTE5IDEwMDY0NAotLS0gYS9MYXlv
dXRUZXN0cy9wbGF0Zm9ybS9jaHJvbWl1bS90ZXN0X2V4cGVjdGF0aW9ucy50eHQKKysrIGIvTGF5
b3V0VGVzdHMvcGxhdGZvcm0vY2hyb21pdW0vdGVzdF9leHBlY3RhdGlvbnMudHh0CkBAIC0xMTMs
NiArMTEzLDkgQEAgQlVHV0s3OTQyMyA6IHN2Zy9jYXJ0by5uZXQvc2VsZWN0aW9ubGlzdC5zdmcg
PSBJTUFHRStURVhUIElNQUdFCiAvLyBWaWJyYXRpb24gQVBJIGlzIG5vdCBzdXBwb3J0ZWQgeWV0
IGluIHRoZSBjaHJvbWl1bSBwb3J0LgogQlVHV0s3MjAxMCBTS0lQIDogZmFzdC9kb20vbmF2aWdh
dG9yLXZpYnJhdGlvbi5odG1sID0gRkFJTAogCisvLyBUb3VjaCBBZGp1c3RtZW50IGlzIG5vdCBz
dXBwb3J0ZWQgeWV0IGluIHRoZSBjaHJvbWl1bSBwb3J0LgorQlVHV0s3ODgwMSBTS0lQIDogdG91
Y2hhZGp1c3RtZW50LyA9IEZBSUwKKwogLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIC8vIFdPTlRGSVggVEVTVFMKIC8v
IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9lZmwvU2tpcHBlZCBi
L0xheW91dFRlc3RzL3BsYXRmb3JtL2VmbC9Ta2lwcGVkCmluZGV4IDFjYTA2YjAuLjNhMTFjZGIg
MTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL3BsYXRmb3JtL2VmbC9Ta2lwcGVkCisrKyBiL0xheW91
dFRlc3RzL3BsYXRmb3JtL2VmbC9Ta2lwcGVkCkBAIC0yMTY4LDMgKzIxNjgsNyBAQCBmYXN0L2V2
ZW50cy9wYWdlLXZpc2liaWxpdHktaWZyYW1lLW1vdmUtdGVzdC5odG1sCiBmYXN0L2V2ZW50cy9w
YWdlLXZpc2liaWxpdHktaWZyYW1lLWRlbGV0ZS10ZXN0Lmh0bWwKIGZhc3QvZXZlbnRzL3BhZ2Ut
dmlzaWJpbGl0eS1pZnJhbWUtcHJvcGFnYXRpb24tdGVzdC5odG1sCiBmYXN0L2V2ZW50cy9wYWdl
LXZpc2liaWxpdHktdHJhbnNpdGlvbi10ZXN0Lmh0bWwKKworIyBUb3VjaCBhZGp1c3RtZW50IG5v
dCBlbmFibGVkCisjIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD03ODgw
MQordG91Y2hhZGp1c3RtZW50CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9ndGsv
U2tpcHBlZCBiL0xheW91dFRlc3RzL3BsYXRmb3JtL2d0ay9Ta2lwcGVkCmluZGV4IDQxYTg1MzUu
LmViYTYxOGQgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL3BsYXRmb3JtL2d0ay9Ta2lwcGVkCisr
KyBiL0xheW91dFRlc3RzL3BsYXRmb3JtL2d0ay9Ta2lwcGVkCkBAIC0xNjA1LDMgKzE2MDUsNyBA
QCBlZGl0aW5nL3Bhc3RlYm9hcmQvY29weS1lbGVtZW50LXdpdGgtY29uZmxpY3RpbmctYmFja2dy
b3VuZC1jb2xvci1mcm9tLXJ1bGUuaHRtbAogZmFzdC9kb20vTWVkaWFTdHJlYW0vYXJndW1lbnQt
dHlwZXMuaHRtbAogZmFzdC9tZWRpYXN0cmVhbS9wZWVyY29ubmVjdGlvbi1BdHRyaWJ1dGVzLmh0
bWwKIGZhc3QvbWVkaWFzdHJlYW0vcGVlcmNvbm5lY3Rpb24tYXJndW1lbnQtdHlwZXMuaHRtbAor
CisjIFRvdWNoIGFkanVzdG1lbnQgbm90IGVuYWJsZWQKKyMgaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTc4ODAxCit0b3VjaGFkanVzdG1lbnQKZGlmZiAtLWdpdCBhL0xh
eW91dFRlc3RzL3BsYXRmb3JtL21hYy9Ta2lwcGVkIGIvTGF5b3V0VGVzdHMvcGxhdGZvcm0vbWFj
L1NraXBwZWQKaW5kZXggYTFlYzY0MS4uYmRlZDg0MiAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMv
cGxhdGZvcm0vbWFjL1NraXBwZWQKKysrIGIvTGF5b3V0VGVzdHMvcGxhdGZvcm0vbWFjL1NraXBw
ZWQKQEAgLTU2MCwzICs1NjAsNyBAQCBmYXN0L211dGF0aW9uL2VuZC1vZi10YXNrLWRlbGl2ZXJ5
Lmh0bWwKICMgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTcyMDEwCiAj
IE5lZWRzIFBhZ2VDbGllbnRzOjp2aWJyYXRpb25DbGllbnQoKSBpbXBsZW1lbnRhdGlvbi4KIGZh
c3QvZG9tL25hdmlnYXRvci12aWJyYXRpb24uaHRtbAorCisjIFRvdWNoIGFkanVzdG1lbnQgbm90
IGVuYWJsZWQKKyMgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTc4ODAx
Cit0b3VjaGFkanVzdG1lbnQKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3BsYXRmb3JtL3dpbi9T
a2lwcGVkIGIvTGF5b3V0VGVzdHMvcGxhdGZvcm0vd2luL1NraXBwZWQKaW5kZXggMzFiMmMyNy4u
MTgwOTFiZSAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvcGxhdGZvcm0vd2luL1NraXBwZWQKKysr
IGIvTGF5b3V0VGVzdHMvcGxhdGZvcm0vd2luL1NraXBwZWQKQEAgLTE2NTUsMyArMTY1NSw3IEBA
IGZhc3QvcmVwYWludC90cmFuc2Zvcm0tYWJzb2x1dGUtaW4tcG9zaXRpb25lZC1jb250YWluZXIu
aHRtbAogCiAjVmlicmF0aW9uIEFQSSBpcyBub3QgaW1wbGVtZW50ZWQuCiBmYXN0L2RvbS9uYXZp
Z2F0b3ItdmlicmF0aW9uLmh0bWwKKworIyBUb3VjaCBhZGp1c3RtZW50IG5vdCBlbmFibGVkCisj
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD03ODgwMQordG91Y2hhZGp1
c3RtZW50CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy90b3VjaGFkanVzdG1lbnQvZXZlbnQtdHJp
Z2dlcmVkLXdpZGdldHMtZXhwZWN0ZWQudHh0IGIvTGF5b3V0VGVzdHMvdG91Y2hhZGp1c3RtZW50
L2V2ZW50LXRyaWdnZXJlZC13aWRnZXRzLWV4cGVjdGVkLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAwMDAwMDAwLi5mOTRlMjBlCi0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMv
dG91Y2hhZGp1c3RtZW50L2V2ZW50LXRyaWdnZXJlZC13aWRnZXRzLWV4cGVjdGVkLnR4dApAQCAt
MCwwICsxLDMxIEBACitUZXN0IHZhcmlvdXMgd2F5cyB0byB0cmlnZ2VyIGlucHV0LXdpZGdldHMu
IE9uIGEgdG91Y2ggaW50ZXJmYWNlLCBhbGwgdGhlIGFjdGlvbnMgc2hvdWxkIGJlIHRyaWdnZXJh
YmxlIHdpdGggZWl0aGVyIGEgdG91Y2ggZG93biBvciBhIHRvdWNoIHRhcC4KKworT24gc3VjY2Vz
cywgeW91IHdpbGwgc2VlIGEgc2VyaWVzIG9mICJQQVNTIiBtZXNzYWdlcywgZm9sbG93ZWQgYnkg
IlRFU1QgQ09NUExFVEUiLgorCisKK1Rlc3Rpbmcgc21hbGwgZGlyZWN0IGhpdHMKK1BBU1MgYWRq
dXN0ZWROb2RlLmlkIGlzIGVsZW1lbnQuaWQKK1BBU1MgYWRqdXN0ZWROb2RlLmlkIGlzIGVsZW1l
bnQuaWQKK1BBU1MgYWRqdXN0ZWROb2RlLmlkIGlzIGVsZW1lbnQuaWQKK1BBU1MgYWRqdXN0ZWRO
b2RlLmlkIGlzIG5vdCBlbGVtZW50LmlkCitQQVNTIGFkanVzdGVkTm9kZS5pZCBpcyBlbGVtZW50
LmlkCitUZXN0aW5nIGxhcmdlIGRpcmVjdCBoaXRzCitQQVNTIGFkanVzdGVkTm9kZS5pZCBpcyBl
bGVtZW50LmlkCitQQVNTIGFkanVzdGVkTm9kZS5pZCBpcyBlbGVtZW50LmlkCitQQVNTIGFkanVz
dGVkTm9kZS5pZCBpcyBlbGVtZW50LmlkCitQQVNTIGFkanVzdGVkTm9kZS5pZCBpcyBub3QgZWxl
bWVudC5pZAorUEFTUyBhZGp1c3RlZE5vZGUuaWQgaXMgZWxlbWVudC5pZAorVGVzdGluZyBsYXJn
ZSBkaXJlY3QgaGl0cworUEFTUyBhZGp1c3RlZE5vZGUuaWQgaXMgZWxlbWVudC5pZAorUEFTUyBh
ZGp1c3RlZE5vZGUuaWQgaXMgZWxlbWVudC5pZAorUEFTUyBhZGp1c3RlZE5vZGUuaWQgaXMgZWxl
bWVudC5pZAorUEFTUyBhZGp1c3RlZE5vZGUuaWQgaXMgbm90IGVsZW1lbnQuaWQKK1BBU1MgYWRq
dXN0ZWROb2RlLmlkIGlzIGVsZW1lbnQuaWQKK1BBU1Mgc3VjY2Vzc2Z1bGx5UGFyc2VkIGlzIHRy
dWUKKworVEVTVCBDT01QTEVURQorRm9jdXMgaGVyZSBzaG91bGQgZ2l2ZSBhIHRleHQgaW5wdXQt
ZmllbGQuCitNb3VzZS1vdmVyIGhlcmUgc2hvdWxkIGdpdmUgYSB0ZXh0IGlucHV0LWZpZWxkLgor
SG92ZXJpbmcgaGVyZSBzaG91bGQgZ2l2ZSBhIHRleHQgaW5wdXQtZmllbGQuIAorRm9jdXNpbmcg
aGVyZSBzaG91bGQgb25seSBnaXZlIGZvY3VzIG91dGxpbmUuCitGb2N1c2luZyBoZXJlIHNob3Vs
ZCBnaXZlIGEgdGV4dCBpbnB1dC1maWVsZC4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3RvdWNo
YWRqdXN0bWVudC9ldmVudC10cmlnZ2VyZWQtd2lkZ2V0cy5odG1sIGIvTGF5b3V0VGVzdHMvdG91
Y2hhZGp1c3RtZW50L2V2ZW50LXRyaWdnZXJlZC13aWRnZXRzLmh0bWwKbmV3IGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDAwMDAwMC4uMTM1MTNiMwotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRl
c3RzL3RvdWNoYWRqdXN0bWVudC9ldmVudC10cmlnZ2VyZWQtd2lkZ2V0cy5odG1sCkBAIC0wLDAg
KzEsMTY4IEBACis8aHRtbD4KKzxoZWFkPgorPHN0eWxlPgorICAgIC5ib3ggeyBib3JkZXI6IDFw
eCBzb2xpZCBibGFjazsgYm9yZGVyLXJhZGl1czogNXB4IDVweDsgbWFyZ2luOiAxZW07IG1heC13
aWR0aDogNDBlbTsgfQorPC9zdHlsZT4KKworPHNjcmlwdCBzcmM9Ii4uL2Zhc3QvanMvcmVzb3Vy
Y2VzL2pzLXRlc3QtcHJlLmpzIj48L3NjcmlwdD4KKworPC9oZWFkPgorCis8Ym9keSBvbmxvYWQ9
InJ1blRlc3RzKCkiPgorCis8cCBpZD0nZGVzY3JpcHRpb24nPjwvcD4KKworPGRpdiBpZD0nY29u
c29sZSc+PC9kaXY+CisKKzxzY3JpcHQ+CisgICAgdmFyIGVsZW1lbnQ7CisgICAgdmFyIGFkanVz
dGVkTm9kZTsKKyAgICBmdW5jdGlvbiBmaW5kQWJzb2x1dGVQb3NpdGlvbihub2RlKSB7CisgICAg
ICAgIHZhciBwb3MgPSBuZXcgT2JqZWN0KCk7CisgICAgICAgIHBvcy5sZWZ0ID0gMDsgcG9zLnRv
cCA9IDA7CisgICAgICAgIGRvIHsKKyAgICAgICAgICAgIHBvcy5sZWZ0ICs9IG5vZGUub2Zmc2V0
TGVmdDsKKyAgICAgICAgICAgIHBvcy50b3AgKz0gbm9kZS5vZmZzZXRUb3A7CisgICAgICAgIH0g
d2hpbGUgKG5vZGUgPSBub2RlLm9mZnNldFBhcmVudCk7CisgICAgICAgIHJldHVybiBwb3M7Cisg
ICAgfQorCisgICAgZnVuY3Rpb24gdGVzdERpcmVjdFRvdWNoKGVsZW1lbnQpCisgICAgeworICAg
ICAgICB2YXIgcG9zID0gZmluZEFic29sdXRlUG9zaXRpb24oZWxlbWVudCk7CisgICAgICAgIHZh
ciB4ID0gcG9zLmxlZnQgKyBlbGVtZW50LmNsaWVudFdpZHRoLzIgLSAxOworICAgICAgICB2YXIg
eSA9IHBvcy50b3AgKyBlbGVtZW50LmNsaWVudEhlaWdodC8yIC0gMTsKKyAgICAgICAgdmFyIHcg
PSAzOworICAgICAgICB2YXIgaCA9IDM7CisgICAgICAgIGFkanVzdGVkTm9kZSA9IGludGVybmFs
cy50b3VjaE5vZGVBZGp1c3RlZFRvQmVzdE5vZGVGb3JHZXN0dXJlVGFwKHgsIHksIHcsIGgsIGRv
Y3VtZW50KTsKKyAgICAgICAgaWYgKGFkanVzdGVkTm9kZS5ub2RlVHlwZSA9PSAzKSAvLyBURVhU
IG5vZGUKKyAgICAgICAgICAgIGFkanVzdGVkTm9kZSA9IGFkanVzdGVkTm9kZS5wYXJlbnROb2Rl
OworICAgIH0KKworICAgIGZ1bmN0aW9uIHRlc3REaXJlY3RGYXRGaW5nZXIoZWxlbWVudCkKKyAg
ICB7CisgICAgICAgIHZhciBwb3MgPSBmaW5kQWJzb2x1dGVQb3NpdGlvbihlbGVtZW50KTsKKyAg
ICAgICAgdmFyIHggPSBwb3MubGVmdCArIGVsZW1lbnQuY2xpZW50V2lkdGgvMiAtIDE7CisgICAg
ICAgIHZhciB5ID0gcG9zLnRvcCAtIDUgOworICAgICAgICB2YXIgdyA9IGVsZW1lbnQuY2xpZW50
SGVpZ2h0OworICAgICAgICB2YXIgaCA9IGVsZW1lbnQuY2xpZW50SGVpZ2h0ICsgMTA7CisgICAg
ICAgIGFkanVzdGVkTm9kZSA9IGludGVybmFscy50b3VjaE5vZGVBZGp1c3RlZFRvQmVzdE5vZGVG
b3JHZXN0dXJlVGFwKHgsIHksIHcsIGgsIGRvY3VtZW50KTsKKyAgICAgICAgaWYgKGFkanVzdGVk
Tm9kZS5ub2RlVHlwZSA9PSAzKSAvLyBURVhUIG5vZGUKKyAgICAgICAgICAgIGFkanVzdGVkTm9k
ZSA9IGFkanVzdGVkTm9kZS5wYXJlbnROb2RlOworICAgIH0KKworICAgIGZ1bmN0aW9uIHRlc3RJ
bmRpcmVjdEZhdEZpbmdlcihlbGVtZW50KQorICAgIHsKKyAgICAgICAgdmFyIHBvcyA9IGZpbmRB
YnNvbHV0ZVBvc2l0aW9uKGVsZW1lbnQpOworICAgICAgICB2YXIgeCA9IHBvcy5sZWZ0ICsgZWxl
bWVudC5jbGllbnRXaWR0aC8yIC0gMTsKKyAgICAgICAgdmFyIHkgPSBwb3MudG9wIC0gNzsKKyAg
ICAgICAgdmFyIHcgPSAxMDsKKyAgICAgICAgdmFyIGggPSAxMDsKKyAgICAgICAgYWRqdXN0ZWRO
b2RlID0gaW50ZXJuYWxzLnRvdWNoTm9kZUFkanVzdGVkVG9CZXN0Tm9kZUZvckdlc3R1cmVUYXAo
eCwgeSwgdywgaCwgZG9jdW1lbnQpOworICAgICAgICBpZiAoYWRqdXN0ZWROb2RlLm5vZGVUeXBl
ID09IDMpIC8vIFRFWFQgbm9kZQorICAgICAgICAgICAgYWRqdXN0ZWROb2RlID0gYWRqdXN0ZWRO
b2RlLnBhcmVudE5vZGU7CisgICAgfQorCisgICAgZnVuY3Rpb24gdGVzdFRvdWNoSGl0KGVsZW1l
bnRpZCwgdG91Y2hUeXBlKSB7CisgICAgICAgIGVsZW1lbnQgPSBkb2N1bWVudC5nZXRFbGVtZW50
QnlJZChlbGVtZW50aWQpOworICAgICAgICB0b3VjaFR5cGUoZWxlbWVudCk7CisgICAgICAgIHNo
b3VsZEJlKCdhZGp1c3RlZE5vZGUuaWQnLCAnZWxlbWVudC5pZCcpOworICAgIH0KKworICAgIGZ1
bmN0aW9uIHRlc3RUb3VjaE1pc3MoZWxlbWVudGlkLCB0b3VjaFR5cGUpIHsKKyAgICAgICAgZWxl
bWVudCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGVsZW1lbnRpZCk7CisgICAgICAgIHRvdWNo
VHlwZShlbGVtZW50KTsKKyAgICAgICAgc2hvdWxkTm90QmUoJ2FkanVzdGVkTm9kZS5pZCcsICdl
bGVtZW50LmlkJyk7CisgICAgfQorCisgICAgZnVuY3Rpb24gdGVzdERpcmVjdFRvdWNoZXMoKQor
ICAgIHsKKyAgICAgICAgZGVidWcoJ1Rlc3Rpbmcgc21hbGwgZGlyZWN0IGhpdHMnKTsKKyAgICAg
ICAgdGVzdFRvdWNoSGl0KCd0ZXN0MScsdGVzdERpcmVjdFRvdWNoKTsKKyAgICAgICAgdGVzdFRv
dWNoSGl0KCd0ZXN0MicsdGVzdERpcmVjdFRvdWNoKTsKKyAgICAgICAgdGVzdFRvdWNoSGl0KCd0
ZXN0MycsdGVzdERpcmVjdFRvdWNoKTsKKyAgICAgICAgdGVzdFRvdWNoTWlzcygndGVzdDQnLHRl
c3REaXJlY3RUb3VjaCk7CisgICAgICAgIHRlc3RUb3VjaEhpdCgndGVzdDUnLHRlc3REaXJlY3RU
b3VjaCk7CisgICAgfQorCisgICAgZnVuY3Rpb24gdGVzdERpcmVjdEZhdEZpbmdlcnMoKQorICAg
IHsKKyAgICAgICAgZGVidWcoJ1Rlc3RpbmcgbGFyZ2UgZGlyZWN0IGhpdHMnKTsKKyAgICAgICAg
dGVzdFRvdWNoSGl0KCd0ZXN0MScsdGVzdERpcmVjdEZhdEZpbmdlcik7CisgICAgICAgIHRlc3RU
b3VjaEhpdCgndGVzdDInLHRlc3REaXJlY3RGYXRGaW5nZXIpOworICAgICAgICB0ZXN0VG91Y2hI
aXQoJ3Rlc3QzJyx0ZXN0RGlyZWN0RmF0RmluZ2VyKTsKKyAgICAgICAgdGVzdFRvdWNoTWlzcygn
dGVzdDQnLHRlc3REaXJlY3RGYXRGaW5nZXIpOworICAgICAgICB0ZXN0VG91Y2hIaXQoJ3Rlc3Q1
Jyx0ZXN0RGlyZWN0RmF0RmluZ2VyKTsKKyAgICB9CisKKyAgICBmdW5jdGlvbiB0ZXN0SW5kaXJl
Y3RGYXRGaW5nZXJzKCkKKyAgICB7CisgICAgICAgIGRlYnVnKCdUZXN0aW5nIGxhcmdlIGRpcmVj
dCBoaXRzJyk7CisgICAgICAgIHRlc3RUb3VjaEhpdCgndGVzdDEnLHRlc3RJbmRpcmVjdEZhdEZp
bmdlcik7CisgICAgICAgIHRlc3RUb3VjaEhpdCgndGVzdDInLHRlc3RJbmRpcmVjdEZhdEZpbmdl
cik7CisgICAgICAgIHRlc3RUb3VjaEhpdCgndGVzdDMnLHRlc3RJbmRpcmVjdEZhdEZpbmdlcik7
CisgICAgICAgIHRlc3RUb3VjaE1pc3MoJ3Rlc3Q0Jyx0ZXN0SW5kaXJlY3RGYXRGaW5nZXIpOwor
ICAgICAgICB0ZXN0VG91Y2hIaXQoJ3Rlc3Q1Jyx0ZXN0SW5kaXJlY3RGYXRGaW5nZXIpOworICAg
IH0KKworICAgIGZ1bmN0aW9uIHJ1blRlc3RzKCkKKyAgICB7CisgICAgICAgIGlmICh3aW5kb3cu
bGF5b3V0VGVzdENvbnRyb2xsZXIgJiYgd2luZG93LmludGVybmFscyAmJiBpbnRlcm5hbHMudG91
Y2hOb2RlQWRqdXN0ZWRUb0Jlc3ROb2RlRm9yR2VzdHVyZVRhcCkgeworICAgICAgICAgICAgZGVz
Y3JpcHRpb24oJ1Rlc3QgdmFyaW91cyB3YXlzIHRvIHRyaWdnZXIgaW5wdXQtd2lkZ2V0cy4gT24g
YSB0b3VjaCBpbnRlcmZhY2UsIGFsbCB0aGUgYWN0aW9ucyBzaG91bGQgYmUgdHJpZ2dlcmFibGUg
d2l0aCBlaXRoZXIgYSB0b3VjaCBkb3duIG9yIGEgdG91Y2ggdGFwLicpOworICAgICAgICAgICAg
bGF5b3V0VGVzdENvbnRyb2xsZXIuZHVtcEFzVGV4dCgpOworICAgICAgICAgICAgbGF5b3V0VGVz
dENvbnRyb2xsZXIud2FpdFVudGlsRG9uZSgpOworICAgICAgICAgICAgdGVzdERpcmVjdFRvdWNo
ZXMoKTsKKyAgICAgICAgICAgIHRlc3REaXJlY3RGYXRGaW5nZXJzKCk7CisgICAgICAgICAgICB0
ZXN0SW5kaXJlY3RGYXRGaW5nZXJzKCk7CisgICAgICAgICAgICBpc1N1Y2Nlc3NmdWxseVBhcnNl
ZCgpOworICAgICAgICAgICAgbGF5b3V0VGVzdENvbnRyb2xsZXIubm90aWZ5RG9uZSgpOworICAg
ICAgICB9CisgICAgfQorPC9zY3JpcHQ+CisKKzxzY3JpcHQ+CisgICAgZnVuY3Rpb24gdHJpZ2dl
cklucHV0KCkgeworICAgICAgICB2YXIgZWxlbWVudCA9IGV2ZW50LnNyY0VsZW1lbnQ7CisgICAg
ICAgIGlmICghZWxlbWVudC5vcGVuKSB7CisgICAgICAgICAgICBlbGVtZW50LmlubmVySFRNTCA9
ICc8aW5wdXQgdHlwZT10ZXh0IHN0eWxlPSJ3aWR0aDogMTAwJSI+PC9pbnB1dD4nCisgICAgICAg
ICAgICBlbGVtZW50Lm9wZW4gPSB0cnVlOworICAgICAgICB9CisgICAgICAgIGVsZW1lbnQuZmly
c3RDaGlsZC5mb2N1cygpOworICAgIH0KKzwvc2NyaXB0PgorCis8ZGl2IGlkPXRlc3QxIGNsYXNz
PWJveCB0YWJpbmRleD0xIG9uZm9jdXM9J3RyaWdnZXJJbnB1dCgpJz4KK0ZvY3VzIGhlcmUgc2hv
dWxkIGdpdmUgYSB0ZXh0IGlucHV0LWZpZWxkLgorPC9kaXY+CisKKzxkaXYgaWQ9dGVzdDIgY2xh
c3M9Ym94IG9ubW91c2VvdmVyPSd0cmlnZ2VySW5wdXQoKSc+IAorTW91c2Utb3ZlciBoZXJlIHNo
b3VsZCBnaXZlIGEgdGV4dCBpbnB1dC1maWVsZC4KKzwvZGl2PgorCis8c3R5bGU+CisgICAgLmJv
eDpub3QoOmhvdmVyKSAuaG92ZXJ0cmlnZ2VyZWQgeyB2aXNpYmlsaXR5OiBoaWRkZW47fQorICAg
IC5ib3g6aG92ZXIgLmhvdmVyZmFsbGJhY2sgeyBkaXNwbGF5OiBub25lOyB9ICAKKzwvc3R5bGU+
CisKKzxkaXYgaWQ9dGVzdDMgY2xhc3M9Ym94PiAKKyAgICA8c3BhbiBjbGFzcz1ob3ZlcmZhbGxi
YWNrPkhvdmVyaW5nIGhlcmUgc2hvdWxkIGdpdmUgYSB0ZXh0IGlucHV0LWZpZWxkLjwvc3Bhbj4K
KyAgICA8aW5wdXQgdHlwZT10ZXh0IGNsYXNzPWhvdmVydHJpZ2dlcmVkPjwvaW5wdXQ+Cis8L2Rp
dj4KKworPGRpdiBpZD10ZXN0NCBjbGFzcz1ib3ggb25mb2N1cz0ndHJpZ2dlcklucHV0KCknPgor
ICAgIDxzcGFuIHRhYmluZGV4PTE+IEZvY3VzaW5nIGhlcmUgc2hvdWxkIG9ubHkgZ2l2ZSBmb2N1
cyBvdXRsaW5lLgorICAgIDwvc3Bhbj4KKzwvZGl2PgorCis8ZGl2IGlkPXRlc3Q1IGNsYXNzPWJv
eD4KKyAgICA8c3BhbiB0YWJpbmRleD0xPiBGb2N1c2luZyBoZXJlIHNob3VsZCBnaXZlIGEgdGV4
dCBpbnB1dC1maWVsZC4KKyAgICA8L3NwYW4+Cis8L2Rpdj4KKworPHNjcmlwdD4KKyAgICB2YXIg
ZWxlbWVudCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0ZXN0NScpOworICAgIGVsZW1lbnQu
YWRkRXZlbnRMaXN0ZW5lcignRE9NRm9jdXNJbicsIHRyaWdnZXJJbnB1dCwgZmFsc2UpOworPC9z
Y3JpcHQ+CisKKzwvYm9keT4KKzwvaHRtbD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRp
ZmYgLS1naXQgYS9MYXlvdXRUZXN0cy90b3VjaGFkanVzdG1lbnQvbmVzdGVkLXRvdWNoLWV4cGVj
dGVkLnR4dCBiL0xheW91dFRlc3RzL3RvdWNoYWRqdXN0bWVudC9uZXN0ZWQtdG91Y2gtZXhwZWN0
ZWQudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc0N2Y2N2UKLS0tIC9k
ZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy90b3VjaGFkanVzdG1lbnQvbmVzdGVkLXRvdWNoLWV4
cGVjdGVkLnR4dApAQCAtMCwwICsxLDE4IEBACitCb3ggd2l0aCBhIGxvY2FsIGNsaWNrIGhhbmRs
ZXIuCitCb3ggd2l0aG91dCBhIGxvY2FsIGNsaWNrIGhhbmRsZXIuCitUZXN0IHRoZSBjYXNlIHdo
ZXJlIGEgY2xpY2thYmxlIHRhcmdldCBpcyBuZXN0ZWQgaW5zaWRlIGEgZG9jdW1lbnQgdGhhdCBp
cyBtb25pdG9yaW5nIGNsaWNrcy4gVGhlIHRhcmdldCB3aXRoIHRoZSBsb2NhbCBldmVudC1oYW5k
bGVyIHNob3VsZCBiZSBjaG9zZW4gaWYgbXVsdGlwbGUgdGFyZ2V0cyBhcmUgdG91Y2hlZC4KKwor
T24gc3VjY2VzcywgeW91IHdpbGwgc2VlIGEgc2VyaWVzIG9mICJQQVNTIiBtZXNzYWdlcywgZm9s
bG93ZWQgYnkgIlRFU1QgQ09NUExFVEUiLgorCisKK1Rlc3Rpbmcgc21hbGwgZGlyZWN0IGhpdHMK
K1BBU1MgYWRqdXN0ZWROb2RlLmlkIGlzIGVsZW1lbnQuaWQKK1BBU1MgYWRqdXN0ZWROb2RlLmlk
IGlzIGVsZW1lbnQuaWQKK1Rlc3RpbmcgcHJlZmVyZWQgaGl0cworUEFTUyBhZGp1c3RlZE5vZGUu
aWQgaXMgZWxlbWVudDEuaWQKK1BBU1MgYWRqdXN0ZWROb2RlLmlkIGlzIGVsZW1lbnQxLmlkCitQ
QVNTIGFkanVzdGVkTm9kZS5pZCBpcyBlbGVtZW50MS5pZAorUEFTUyBzdWNjZXNzZnVsbHlQYXJz
ZWQgaXMgdHJ1ZQorCitURVNUIENPTVBMRVRFCisKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3Rv
dWNoYWRqdXN0bWVudC9uZXN0ZWQtdG91Y2guaHRtbCBiL0xheW91dFRlc3RzL3RvdWNoYWRqdXN0
bWVudC9uZXN0ZWQtdG91Y2guaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
Li5iNTI2YzQ0Ci0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvdG91Y2hhZGp1c3RtZW50
L25lc3RlZC10b3VjaC5odG1sCkBAIC0wLDAgKzEsMTIwIEBACis8aHRtbD4KKzxoZWFkPgorPHN0
eWxlPgorICAgIC5ib3ggeyBib3JkZXI6IDFweCBzb2xpZCBibGFjazsgYm9yZGVyLXJhZGl1czog
NXB4IDVweDsgbWFyZ2luOiAxZW07IG1heC13aWR0aDogNDBlbTsgfQorPC9zdHlsZT4KKzxzY3Jp
cHQgc3JjPSIuLi9mYXN0L2pzL3Jlc291cmNlcy9qcy10ZXN0LXByZS5qcyI+PC9zY3JpcHQ+CisK
KzwvaGVhZD4KKworPGJvZHkgb25sb2FkPSJydW5UZXN0cygpIj4KKworPGRpdiBjbGFzcz1ib3gg
aWQ9bXlib3gxPgorQm94IHdpdGggYSBsb2NhbCBjbGljayBoYW5kbGVyLgorPC9kaXY+CisKKzxk
aXYgY2xhc3M9Ym94IGlkPW15Ym94Mj4gCitCb3ggd2l0aG91dCBhIGxvY2FsIGNsaWNrIGhhbmRs
ZXIuCis8L2Rpdj4KKworPHNjcmlwdD4KKyAgZnVuY3Rpb24gbW9uaXRvcihlKSB7IGFsZXJ0KGUu
dGFyZ2V0ICsoIGUudGFyZ2V0LmlkID8gKCAnICMnICsgZS50YXJnZXQuaWQpIDogJycpKTsgfTsK
KyAgZnVuY3Rpb24gZG9Tb21ldGhpbmcoZSkge307CisKKyAgdmFyIGVsZW1lbnQgPSBkb2N1bWVu
dC5nZXRFbGVtZW50QnlJZCgnbXlib3gxJyk7CisgIGVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcign
Y2xpY2snLCBkb1NvbWV0aGluZywgZmFsc2UpOworICBlbGVtZW50ID0gZG9jdW1lbnQuYm9keTsK
KyAgZWxlbWVudC5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIG1vbml0b3IsIGZhbHNlKTsKKzwv
c2NyaXB0PgorCisKKzxwIGlkPSdkZXNjcmlwdGlvbic+PC9wPgorPGRpdiBpZD0nY29uc29sZSc+
PC9kaXY+CisKKzxzY3JpcHQ+CisgICAgdmFyIGVsZW1lbnQ7CisgICAgdmFyIGFkanVzdGVkTm9k
ZTsKKyAgICBmdW5jdGlvbiBmaW5kQWJzb2x1dGVQb3NpdGlvbihub2RlKSB7CisgICAgICAgIHZh
ciBwb3MgPSBuZXcgT2JqZWN0KCk7CisgICAgICAgIHBvcy5sZWZ0ID0gMDsgcG9zLnRvcCA9IDA7
CisgICAgICAgIGRvIHsKKyAgICAgICAgICAgIHBvcy5sZWZ0ICs9IG5vZGUub2Zmc2V0TGVmdDsK
KyAgICAgICAgICAgIHBvcy50b3AgKz0gbm9kZS5vZmZzZXRUb3A7CisgICAgICAgIH0gd2hpbGUg
KG5vZGUgPSBub2RlLm9mZnNldFBhcmVudCk7CisgICAgICAgIHJldHVybiBwb3M7CisgICAgfQor
CisgICAgZnVuY3Rpb24gdGVzdERpcmVjdFRvdWNoKGVsZW1lbnQpCisgICAgeworICAgICAgICB2
YXIgcG9zID0gZmluZEFic29sdXRlUG9zaXRpb24oZWxlbWVudCk7CisgICAgICAgIHZhciB4ID0g
cG9zLmxlZnQgKyBlbGVtZW50LmNsaWVudFdpZHRoLzIgLSAxOworICAgICAgICB2YXIgeSA9IHBv
cy50b3AgKyBlbGVtZW50LmNsaWVudEhlaWdodC8yIC0gMTsKKyAgICAgICAgdmFyIHcgPSAzOwor
ICAgICAgICB2YXIgaCA9IDM7CisgICAgICAgIHZhciBhZGp1c3RlZE5vZGUgPSBpbnRlcm5hbHMu
dG91Y2hOb2RlQWRqdXN0ZWRUb0Jlc3ROb2RlRm9yR2VzdHVyZVRhcCh4LCB5LCB3LCBoLCBkb2N1
bWVudCk7CisgICAgICAgIGlmIChhZGp1c3RlZE5vZGUubm9kZVR5cGUgPT0gMykgLy8gVEVYVCBu
b2RlCisgICAgICAgICAgICBhZGp1c3RlZE5vZGUgPSBhZGp1c3RlZE5vZGUucGFyZW50Tm9kZTsK
KyAgICAgICAgcmV0dXJuIGFkanVzdGVkTm9kZTsKKyAgICB9CisKKyAgICBmdW5jdGlvbiB0ZXN0
RG91YmxlVG91Y2goZWxlbWVudDEsIGVsZW1lbnQyLCBvZmZzZXQpCisgICAgeworICAgICAgICB2
YXIgcG9zMSA9IGZpbmRBYnNvbHV0ZVBvc2l0aW9uKGVsZW1lbnQxKTsKKyAgICAgICAgdmFyIHBv
czIgPSBmaW5kQWJzb2x1dGVQb3NpdGlvbihlbGVtZW50Mik7CisgICAgICAgIC8vIFdlIGFzc3Vt
ZSB0aGUgZWxlbWVudHMgaGF2ZSB0aGUgc2FtZSB4IGNvb3JkIGFuZCB3aWR0aC4KKyAgICAgICAg
dmFyIHggPSBwb3MxLmxlZnQgKyBlbGVtZW50MS5jbGllbnRXaWR0aC8yIC0gMTsKKyAgICAgICAg
dmFyIHkxID0gcG9zMS50b3AgKyBlbGVtZW50MS5jbGllbnRIZWlnaHQvMiArIDE7CisgICAgICAg
IHZhciB5MiA9IHBvczIudG9wICsgZWxlbWVudDIuY2xpZW50SGVpZ2h0LzIgLSAxOworICAgICAg
ICB2YXIgdyA9IHkyIC0geTE7CisgICAgICAgIHZhciBoID0geTIgLSB5MTsKKyAgICAgICAgdmFy
IGFkanVzdGVkTm9kZSA9IGludGVybmFscy50b3VjaE5vZGVBZGp1c3RlZFRvQmVzdE5vZGVGb3JH
ZXN0dXJlVGFwKHgsIHkxICsgb2Zmc2V0LCB3LCBoLCBkb2N1bWVudCk7CisgICAgICAgIGlmIChh
ZGp1c3RlZE5vZGUubm9kZVR5cGUgPT0gMykgLy8gVEVYVCBub2RlCisgICAgICAgICAgICBhZGp1
c3RlZE5vZGUgPSBhZGp1c3RlZE5vZGUucGFyZW50Tm9kZTsKKyAgICAgICAgcmV0dXJuIGFkanVz
dGVkTm9kZTsKKyAgICB9CisKKyAgICBmdW5jdGlvbiB0ZXN0RGlyZWN0VG91Y2hlcygpCisgICAg
eworICAgICAgICBkZWJ1ZygnVGVzdGluZyBzbWFsbCBkaXJlY3QgaGl0cycpOworCisgICAgICAg
IGVsZW1lbnQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbXlib3gxJyk7CisgICAgICAgIGFk
anVzdGVkTm9kZSA9IHRlc3REaXJlY3RUb3VjaChlbGVtZW50KTsKKyAgICAgICAgc2hvdWxkQmUo
J2FkanVzdGVkTm9kZS5pZCcsICdlbGVtZW50LmlkJyk7CisKKyAgICAgICAgZWxlbWVudCA9IGRv
Y3VtZW50LmdldEVsZW1lbnRCeUlkKCdteWJveDInKTsKKyAgICAgICAgYWRqdXN0ZWROb2RlID0g
dGVzdERpcmVjdFRvdWNoKGVsZW1lbnQpOworICAgICAgICBzaG91bGRCZSgnYWRqdXN0ZWROb2Rl
LmlkJywgJ2VsZW1lbnQuaWQnKTsKKyAgICB9CisKKyAgICBmdW5jdGlvbiB0ZXN0UHJlZmVyZWRU
b3VjaCgpCisgICAgeworICAgICAgICBkZWJ1ZygnVGVzdGluZyBwcmVmZXJlZCBoaXRzJyk7CisK
KyAgICAgICAgZWxlbWVudDEgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbXlib3gxJyk7Cisg
ICAgICAgIGVsZW1lbnQyID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ215Ym94MicpOworICAg
ICAgICBhZGp1c3RlZE5vZGUgPSB0ZXN0RG91YmxlVG91Y2goZWxlbWVudDEsIGVsZW1lbnQyLCAw
KTsKKyAgICAgICAgc2hvdWxkQmUoJ2FkanVzdGVkTm9kZS5pZCcsICdlbGVtZW50MS5pZCcpOwor
CisgICAgICAgIC8vIEZpcnN0IHRlc3Qgd2FzIGNlbnRlcmVkLCBub3cgbW92ZSB0aGUgdGVzdCBj
bG9zZXIgdG8gdGhlIHdyb25nIG5vZGUsIGFuZCBlbnN1cmUgd2Ugc3RpbGwgZ2V0IHRoZSBwcmVm
ZXJlZCBub2RlLgorICAgICAgICBhZGp1c3RlZE5vZGUgPSB0ZXN0RG91YmxlVG91Y2goZWxlbWVu
dDEsIGVsZW1lbnQyLCA1KTsKKyAgICAgICAgc2hvdWxkQmUoJ2FkanVzdGVkTm9kZS5pZCcsICdl
bGVtZW50MS5pZCcpOworCisgICAgICAgIGFkanVzdGVkTm9kZSA9IHRlc3REb3VibGVUb3VjaChl
bGVtZW50MSwgZWxlbWVudDIsIDEwKTsKKyAgICAgICAgc2hvdWxkQmUoJ2FkanVzdGVkTm9kZS5p
ZCcsICdlbGVtZW50MS5pZCcpOworICAgIH0KKworICAgIGZ1bmN0aW9uIHJ1blRlc3RzKCkKKyAg
ICB7CisgICAgICAgIGlmICh3aW5kb3cubGF5b3V0VGVzdENvbnRyb2xsZXIgJiYgd2luZG93Lmlu
dGVybmFscyAmJiBpbnRlcm5hbHMudG91Y2hOb2RlQWRqdXN0ZWRUb0Jlc3ROb2RlRm9yR2VzdHVy
ZVRhcCkgeworICAgICAgICAgICAgZGVzY3JpcHRpb24oJ1Rlc3QgdGhlIGNhc2Ugd2hlcmUgYSBj
bGlja2FibGUgdGFyZ2V0IGlzIG5lc3RlZCBpbnNpZGUgYSBkb2N1bWVudCB0aGF0IGlzIG1vbml0
b3JpbmcgY2xpY2tzLiBUaGUgdGFyZ2V0IHdpdGggdGhlIGxvY2FsIGV2ZW50LWhhbmRsZXIgc2hv
dWxkIGJlIGNob3NlbiBpZiBtdWx0aXBsZSB0YXJnZXRzIGFyZSB0b3VjaGVkLicpOworICAgICAg
ICAgICAgbGF5b3V0VGVzdENvbnRyb2xsZXIuZHVtcEFzVGV4dCgpOworICAgICAgICAgICAgbGF5
b3V0VGVzdENvbnRyb2xsZXIud2FpdFVudGlsRG9uZSgpOworICAgICAgICAgICAgdGVzdERpcmVj
dFRvdWNoZXMoKTsKKyAgICAgICAgICAgIHRlc3RQcmVmZXJlZFRvdWNoKCk7CisgICAgICAgICAg
ICBpc1N1Y2Nlc3NmdWxseVBhcnNlZCgpOworICAgICAgICAgICAgbGF5b3V0VGVzdENvbnRyb2xs
ZXIubm90aWZ5RG9uZSgpOworICAgICAgICB9CisgICAgfQorPC9zY3JpcHQ+Cis8L2JvZHk+Cis8
L2h0bWw+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVz
dHMvdG91Y2hhZGp1c3RtZW50L3RvdWNoLWlubGluZXMtZXhwZWN0ZWQudHh0IGIvTGF5b3V0VGVz
dHMvdG91Y2hhZGp1c3RtZW50L3RvdWNoLWlubGluZXMtZXhwZWN0ZWQudHh0Cm5ldyBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdlMTRiZmUKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlv
dXRUZXN0cy90b3VjaGFkanVzdG1lbnQvdG91Y2gtaW5saW5lcy1leHBlY3RlZC50eHQKQEAgLTAs
MCArMSwyOSBAQAorc29tZSBsaW5rCitzb21lIGxpbmsgYnJlYWtpbmcgbGluZXMgYW5kIGxpbmsK
K2hvbGEgbXVuZG8hIGEgc3BsaXQgdXAgbGluaworaGVsbG8gd29ybGQgc29tZSBsaW5rIGFsc28g
YnJlYWtpbmcKK2hpIHRoZXJlIHNvbWUgbGluayB0aGF0IGlzIGJyZWFraW5nIG11bHRpcGxlIGxp
bmVzIGp1c3QgZm9yIHRoZSB2ZXJ5IGZ1biBvZiBpdAorCitUZXN0IHRvdWNoLWFkanVzdG1lbnQg
b24gaW5saW5lIGxpbmtzLiBNYWtpbmcgc3VyZSB3ZSBjYW4gaGl0IG92ZXIgbGluZS1icmVha3Ms
IGFuZCBjYW4gbWlzcyB3aGVuIHRhcHBpbmcgYmV0d2VlbiBwYXJ0cyBvZiBhIGxpbmUtYnJva2Vu
IGxpbmsuCisKK09uIHN1Y2Nlc3MsIHlvdSB3aWxsIHNlZSBhIHNlcmllcyBvZiAiUEFTUyIgbWVz
c2FnZXMsIGZvbGxvd2VkIGJ5ICJURVNUIENPTVBMRVRFIi4KKworCitUZXN0IHNvbWUgZGlyZWN0
IGhpdHMKK1BBU1MgYWRqdXN0ZWROb2RlLmlkIGlzICIxIgorUEFTUyBhZGp1c3RlZE5vZGUuaWQg
aXMgIjIiCitQQVNTIGFkanVzdGVkTm9kZS5pZCBpcyAiNCIKK1BBU1MgYWRqdXN0ZWROb2RlLmlk
IGlzICI2IgorVGVzdCBhIGZldyBkaXJlY3QgbWlzc2VzCitQQVNTIGFkanVzdGVkTm9kZS5pZCBp
cyAiIgorUEFTUyBhZGp1c3RlZE5vZGUuaWQgaXMgIiIKK1Rlc3Qgc29tZSBpbi1kaXJlY3QgaGl0
cworUEFTUyBhZGp1c3RlZE5vZGUuaWQgaXMgIjIiCitQQVNTIGFkanVzdGVkTm9kZS5pZCBpcyAi
MyIKK1BBU1MgYWRqdXN0ZWROb2RlLmlkIGlzICI0IgorUEFTUyBhZGp1c3RlZE5vZGUuaWQgaXMg
IjQiCitQQVNTIGFkanVzdGVkTm9kZS5pZCBpcyAiNiIKK1BBU1Mgc3VjY2Vzc2Z1bGx5UGFyc2Vk
IGlzIHRydWUKKworVEVTVCBDT01QTEVURQorCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy90b3Vj
aGFkanVzdG1lbnQvdG91Y2gtaW5saW5lcy5odG1sIGIvTGF5b3V0VGVzdHMvdG91Y2hhZGp1c3Rt
ZW50L3RvdWNoLWlubGluZXMuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
Li4yYmI1N2FjCi0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvdG91Y2hhZGp1c3RtZW50
L3RvdWNoLWlubGluZXMuaHRtbApAQCAtMCwwICsxLDEwMCBAQAorPGh0bWw+Cis8aGVhZD4KKyAg
ICA8c2NyaXB0IHNyYz0iLi4vZmFzdC9qcy9yZXNvdXJjZXMvanMtdGVzdC1wcmUuanMiPjwvc2Ny
aXB0PgorPC9oZWFkPgorPGJvZHkgb25sb2FkPSJydW5UZXN0cygpIj4KKworPHAgc3R5bGU9Indp
ZHRoOiAxMGVtOyI+Cis8YSBpZD0iMSIgaHJlZj0iIzEiPnNvbWUgbGluazwvYT48YnI+Cis8YSBp
ZD0iMiIgaHJlZj0iIzIiPnNvbWUgbGluayBicmVha2luZyBsaW5lczwvYT4gYW5kIDxhIGlkPSIz
IiBocmVmPSIjMyI+bGluazwvYT48YnI+Citob2xhIG11bmRvISA8YSBpZD0iNCIgaHJlZj0iIzQi
PmEgc3BsaXQgdXAgbGluazwvYT48YnI+CitoZWxsbyB3b3JsZCA8YSBpZD0iNSIgaHJlZj0iIzUi
PnNvbWUgbGluayBhbHNvIGJyZWFraW5nPC9hPjxicj4KK2hpIHRoZXJlIDxhIGlkPSI2IiBocmVm
PSIjNiI+c29tZSBsaW5rIHRoYXQgaXMgYnJlYWtpbmcgbXVsdGlwbGUgbGluZXMganVzdCBmb3Ig
dGhlIHZlcnkgZnVuIG9mIGl0PC9hPjxicj48YnI+Cis8L3A+CisKKworPHAgaWQ9J2Rlc2NyaXB0
aW9uJz48L3A+Cis8ZGl2IGlkPSdjb25zb2xlJz48L2Rpdj4KKworPHNjcmlwdD4KKyAgICB2YXIg
ZWxlbWVudDsKKyAgICB2YXIgYWRqdXN0ZWROb2RlOworICAgIGZ1bmN0aW9uIHRlc3RSb3VuZFRv
dWNoKHgsIHksIHIpCisgICAgeworICAgICAgICB2YXIgeCA9IHggLSByOworICAgICAgICB2YXIg
eSA9IHkgLSByOworICAgICAgICB2YXIgdyA9IHIgKiAyOworICAgICAgICB2YXIgaCA9IHIgKiAy
OworICAgICAgICB2YXIgYWRqdXN0ZWROb2RlID0gaW50ZXJuYWxzLnRvdWNoTm9kZUFkanVzdGVk
VG9CZXN0Tm9kZUZvckdlc3R1cmVUYXAoeCwgeSwgdywgaCwgZG9jdW1lbnQpOworICAgICAgICBp
ZiAoYWRqdXN0ZWROb2RlLm5vZGVUeXBlID09IDMpIC8vIFRFWFQgbm9kZQorICAgICAgICAgICAg
YWRqdXN0ZWROb2RlID0gYWRqdXN0ZWROb2RlLnBhcmVudE5vZGU7CisgICAgICAgIHJldHVybiBh
ZGp1c3RlZE5vZGU7CisgICAgfQorCisgICAgZnVuY3Rpb24gdGVzdERpcmVjdFRvdWNoZXMoKQor
ICAgIHsKKyAgICAgICAgZGVidWcoJ1Rlc3Qgc29tZSBkaXJlY3QgaGl0cycpOworCisgICAgICAg
IGFkanVzdGVkTm9kZSA9IHRlc3RSb3VuZFRvdWNoKDMwLCAyMCwgOCkKKyAgICAgICAgc2hvdWxk
QmVFcXVhbFRvU3RyaW5nKCdhZGp1c3RlZE5vZGUuaWQnLCAnMScpOworCisgICAgICAgIGFkanVz
dGVkTm9kZSA9IHRlc3RSb3VuZFRvdWNoKDMwLCA2MCwgOCkKKyAgICAgICAgc2hvdWxkQmVFcXVh
bFRvU3RyaW5nKCdhZGp1c3RlZE5vZGUuaWQnLCAnMicpOworCisgICAgICAgIGFkanVzdGVkTm9k
ZSA9IHRlc3RSb3VuZFRvdWNoKDEyMCwgODAsIDgpCisgICAgICAgIHNob3VsZEJlRXF1YWxUb1N0
cmluZygnYWRqdXN0ZWROb2RlLmlkJywgJzQnKTsKKworICAgICAgICBhZGp1c3RlZE5vZGUgPSB0
ZXN0Um91bmRUb3VjaCg4MCwgMTgwLCA4KQorICAgICAgICBzaG91bGRCZUVxdWFsVG9TdHJpbmco
J2FkanVzdGVkTm9kZS5pZCcsICc2Jyk7CisgICAgfQorCisgICAgZnVuY3Rpb24gdGVzdERpcmVj
dE1pc3NlcygpCisgICAgeworICAgICAgICBkZWJ1ZygnVGVzdCBhIGZldyBkaXJlY3QgbWlzc2Vz
Jyk7CisKKyAgICAgICAgYWRqdXN0ZWROb2RlID0gdGVzdFJvdW5kVG91Y2goNTYsIDYwLCA4KQor
ICAgICAgICBzaG91bGRCZUVxdWFsVG9TdHJpbmcoJ2FkanVzdGVkTm9kZS5pZCcsICcnKTsKKwor
ICAgICAgICBhZGp1c3RlZE5vZGUgPSB0ZXN0Um91bmRUb3VjaCgyMCwgMTYwLCA0KQorICAgICAg
ICBzaG91bGRCZUVxdWFsVG9TdHJpbmcoJ2FkanVzdGVkTm9kZS5pZCcsICcnKTsKKworICAgIH0K
KworICAgIGZ1bmN0aW9uIHRlc3RJbmRpcmVjdFRvdWNoZXMoKQorICAgIHsKKyAgICAgICAgZGVi
dWcoJ1Rlc3Qgc29tZSBpbi1kaXJlY3QgaGl0cycpOworCisgICAgICAgIGFkanVzdGVkTm9kZSA9
IHRlc3RSb3VuZFRvdWNoKDU2LCA2MCwgMjApCisgICAgICAgIHNob3VsZEJlRXF1YWxUb1N0cmlu
ZygnYWRqdXN0ZWROb2RlLmlkJywgJzInKTsKKworICAgICAgICBhZGp1c3RlZE5vZGUgPSB0ZXN0
Um91bmRUb3VjaCg4NSwgODAsIDIwKQorICAgICAgICBzaG91bGRCZUVxdWFsVG9TdHJpbmcoJ2Fk
anVzdGVkTm9kZS5pZCcsICczJyk7CisKKyAgICAgICAgYWRqdXN0ZWROb2RlID0gdGVzdFJvdW5k
VG91Y2goMTIwLCA2MCwgMjApCisgICAgICAgIHNob3VsZEJlRXF1YWxUb1N0cmluZygnYWRqdXN0
ZWROb2RlLmlkJywgJzQnKTsKKworICAgICAgICBhZGp1c3RlZE5vZGUgPSB0ZXN0Um91bmRUb3Vj
aCg0MCwgMTAwLCAyMCkKKyAgICAgICAgc2hvdWxkQmVFcXVhbFRvU3RyaW5nKCdhZGp1c3RlZE5v
ZGUuaWQnLCAnNCcpOworCisgICAgICAgIGFkanVzdGVkTm9kZSA9IHRlc3RSb3VuZFRvdWNoKDIw
LCAxNjUsIDIwKQorICAgICAgICBzaG91bGRCZUVxdWFsVG9TdHJpbmcoJ2FkanVzdGVkTm9kZS5p
ZCcsICc2Jyk7CisKKyAgICB9CisKKyAgICBmdW5jdGlvbiBydW5UZXN0cygpCisgICAgeworICAg
ICAgICBpZiAod2luZG93LmxheW91dFRlc3RDb250cm9sbGVyICYmIHdpbmRvdy5pbnRlcm5hbHMK
KyAgICAgICAgJiYgaW50ZXJuYWxzLnRvdWNoTm9kZUFkanVzdGVkVG9CZXN0Tm9kZUZvckdlc3R1
cmVUYXApIHsKKyAgICAgICAgICAgIGRlc2NyaXB0aW9uKCdUZXN0IHRvdWNoLWFkanVzdG1lbnQg
b24gaW5saW5lIGxpbmtzLiBNYWtpbmcgc3VyZSB3ZSBjYW4gaGl0IG92ZXIgbGluZS1icmVha3Ms
IGFuZCBjYW4gbWlzcyB3aGVuIHRhcHBpbmcgYmV0d2VlbiBwYXJ0cyBvZiBhIGxpbmUtYnJva2Vu
IGxpbmsuJyk7CisgICAgICAgICAgICBsYXlvdXRUZXN0Q29udHJvbGxlci5kdW1wQXNUZXh0KCk7
CisgICAgICAgICAgICBsYXlvdXRUZXN0Q29udHJvbGxlci53YWl0VW50aWxEb25lKCk7CisgICAg
ICAgICAgICB0ZXN0RGlyZWN0VG91Y2hlcygpOworICAgICAgICAgICAgdGVzdERpcmVjdE1pc3Nl
cygpOworICAgICAgICAgICAgdGVzdEluZGlyZWN0VG91Y2hlcygpOworICAgICAgICAgICAgaXNT
dWNjZXNzZnVsbHlQYXJzZWQoKTsKKyAgICAgICAgICAgIGxheW91dFRlc3RDb250cm9sbGVyLm5v
dGlmeURvbmUoKTsKKyAgICAgICAgfQorICAgIH0KKzwvc2NyaXB0PgorPC9ib2R5PgorPC9odG1s
PgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCBiZWU3MDg3Li4yZjI4
NWRlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dl
YkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDUgKzEsODQgQEAKIDIwMTItMDItMjQgIEFsbGFuIFNhbmRm
ZWxkIEplbnNlbiAgPGFsbGFuLmplbnNlbkBub2tpYS5jb20+CiAKKyAgICAgICAgU2VsZWN0IGJl
c3QgdGFyZ2V0IGZvciB0YXAgZ2VzdHVyZS4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTc4ODAxCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChP
T1BTISkuCisKKyAgICAgICAgVGhlIG5ldyBBUEkgaXMgYXZhaWxhYmxlIHRocm91Z2ggRXZlbnRI
YW5kbGVyOjpub2RlRm9yVGFwR2VzdHVyZUF0VG91Y2hQb2ludCwgYnV0CisgICAgICAgIGltcGxl
bWVudGF0aW9uIGRldGFpbHMgaGF2ZSBiZWVuIHBsYWNlZCBpbiBwbGF0Zm9ybS9IaXRUZXN0UmVz
dWx0TWV0cmljcy4KKworICAgICAgICBUaGUgZGVmYXVsdCBoaXQgZGV0ZWN0aW9uIGlzIHBlcmZv
cm1lZCBieSBtZWFzdXJpbmcgdGhlIGRpc3RhbmNlIHRvIHRoZSBjZW50ZXIKKyAgICAgICAgbGlu
ZXMgb2YgdGhlIGFic29sdXRlIHJlY3RzIG9mIHRoZSBoaXQgbm9kZXMuIEFic29sdXRlIHJlY3Rz
IGFyZSB1c2VkIGluc3RlYWQKKyAgICAgICAgb2YgYm91bmRpbmcgcmVjdHMgdG8gbWFrZSBoaXQt
ZGV0ZWN0aW5nIGFnYWluc3QgbGlua3Mgb3ZlciBsaW5lIGJyZWFrcy4gRGlzdGFuY2UKKyAgICAg
ICAgdG8gY2VudGVyIGxpbmUgaXMgdXNlZCB0byBtYWtlIGl0IGVhc2llciB0byBoaXQgc21hbGwg
bGlua3MgbmV4dCB0byBsYXJnZSBsaW5rcy4KKyAgICAgICAgRm9yIGxpbmUtcmVjdHMgdGhlIGRp
c3RhbmNlIHRvIHRoZSBjZW50ZXItbGluZSBpcyBhIGJldHRlciBleHByZXNzaW9uIG9mIHRoZSBk
aXN0YW5jZQorICAgICAgICB0byBhIHJlY3RhbmdsZXMgY2VudGVyIHRoYW4gdGhlIGRpc3RhbmNl
IHRvIHRoZSBjZW50ZXItcG9pbnQuCisKKyAgICAgICAgVG8gc3VwcG9ydCB0aGUgZGlzdGFuY2Ug
Y2FsY3VsYXRhdGlvbiwgdGhpcyBwYXRjaCBhbHNvIGltcGxlbWVudCBhIGNvbnNpc3RlbnQgc2V0
IG9mCisgICAgICAgIGRpc3RhbmNlIGFuZCBhcmVhIGZ1bmN0aW9ucyBmb3IgUmVjdCwgUG9pbnQg
YW5kIFNpemUgY2xhc3Nlcy4KKworICAgICAgICBUZXN0czogdG91Y2hhZGp1c3RtZW50L2V2ZW50
LXRyaWdnZXJlZC13aWRnZXRzLmh0bWwKKyAgICAgICAgICAgICAgIHRvdWNoYWRqdXN0bWVudC9u
ZXN0ZWQtdG91Y2guaHRtbAorICAgICAgICAgICAgICAgdG91Y2hhZGp1c3RtZW50L3RvdWNoLWlu
bGluZXMuaHRtbAorCisgICAgICAgICogVGFyZ2V0LnByaToKKyAgICAgICAgKiBwYWdlL0V2ZW50
SGFuZGxlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpFdmVudEhhbmRsZXI6OmhhbmRsZUdlc3R1
cmVFdmVudCk6CisgICAgICAgIChXZWJDb3JlOjpFdmVudEhhbmRsZXI6OmhhbmRsZUdlc3R1cmVU
YXApOgorICAgICAgICAoV2ViQ29yZTo6RXZlbnRIYW5kbGVyOjpub2RlRm9yVGFwR2VzdHVyZUF0
VG91Y2hQb2ludCk6CisgICAgICAgICogcGFnZS9FdmVudEhhbmRsZXIuaDoKKyAgICAgICAgKiBw
YWdlL1RvdWNoQWRqdXN0bWVudC5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6VG91Y2hB
ZGp1c3RtZW50OjpIaXRUZXN0UXVhZDo6SGl0VGVzdFF1YWQpOgorICAgICAgICAoV2ViQ29yZTo6
VG91Y2hBZGp1c3RtZW50OjpIaXRUZXN0UXVhZDo6bm9kZSk6CisgICAgICAgIChXZWJDb3JlOjpU
b3VjaEFkanVzdG1lbnQ6OkhpdFRlc3RRdWFkOjpxdWFkKToKKyAgICAgICAgKFdlYkNvcmU6OlRv
dWNoQWRqdXN0bWVudDo6SGl0VGVzdFF1YWQ6OmJvdW5kaW5nQm94KToKKyAgICAgICAgKFdlYkNv
cmU6OlRvdWNoQWRqdXN0bWVudDo6bm9kZVJlc3BvbmRzVG9UYXBHZXN0dXJlKToKKyAgICAgICAg
KFdlYkNvcmU6OlRvdWNoQWRqdXN0bWVudDo6YXBwZW5kQWJzb2x1dGVRdWFkc0Zvck5vZGVUb0hp
dExpc3QpOgorICAgICAgICAoV2ViQ29yZTo6VG91Y2hBZGp1c3RtZW50Ojpjb21waWxlSGl0TGlz
dCk6CisgICAgICAgIChXZWJDb3JlOjpUb3VjaEFkanVzdG1lbnQ6OmRpc3RhbmNlVG9IaXRUZXN0
UXVhZCk6CisgICAgICAgIChXZWJDb3JlOjpUb3VjaEFkanVzdG1lbnQ6OmludGVyc2VjdGlvbldp
dGhIaXRUZXN0UXVhZCk6CisgICAgICAgIChXZWJDb3JlOjpUb3VjaEFkanVzdG1lbnQ6OmZpbmRO
b2RlV2l0aExvd2VzdE1ldHJpYyk6CisgICAgICAgIChXZWJDb3JlOjpUb3VjaEFkanVzdG1lbnQ6
OmZpbmROb2RlV2l0aEhpZ2hlc3RNZXRyaWMpOgorICAgICAgICAoV2ViQ29yZTo6ZmluZEJlc3RD
YW5kaWRhdGVGb3JHZXN0dXJlVGFwKToKKyAgICAgICAgKiBwYWdlL1RvdWNoQWRqdXN0bWVudC5o
OiBBZGRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9GbG9hdFBvaW50Lmg6CisgICAg
ICAgIChXZWJDb3JlOjpGbG9hdFBvaW50OjpGbG9hdFBvaW50KToKKyAgICAgICAgKFdlYkNvcmU6
OkZsb2F0UG9pbnQ6OmRpc3RhbmNlVG9Qb2ludCk6CisgICAgICAgIChXZWJDb3JlOjpGbG9hdFBv
aW50OjpkaXN0YW5jZVNxdWFyZWRUb1BvaW50KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGlj
cy9GbG9hdFF1YWQuaDoKKyAgICAgICAgKFdlYkNvcmU6OkZsb2F0UXVhZDo6Y2VudGVyKToKKyAg
ICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9GbG9hdFJlY3QuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6ZGlzdGFuY2VUb0ludGVydmFsKToKKyAgICAgICAgKFdlYkNvcmU6OkZsb2F0UmVjdDo6ZGlm
ZmVyZW5jZVRvUG9pbnQpOgorICAgICAgICAoV2ViQ29yZTo6RmxvYXRSZWN0OjpkaXN0YW5jZVRv
UG9pbnQpOgorICAgICAgICAoV2ViQ29yZTo6RmxvYXRSZWN0OjpkaWZmZXJlbmNlRnJvbUNlbnRl
ckxpbmVUb1BvaW50KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9GbG9hdFJlY3QuaDoK
KyAgICAgICAgKFdlYkNvcmU6OkZsb2F0UmVjdDo6ZGlzdGFuY2VTcXVhcmVkVG9Qb2ludCk6Cisg
ICAgICAgIChXZWJDb3JlOjpGbG9hdFJlY3Q6OmRpc3RhbmNlU3F1YXJlZEZyb21DZW50ZXJMaW5l
VG9Qb2ludCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvRmxvYXRTaXplLmg6CisgICAg
ICAgIChXZWJDb3JlOjpGbG9hdFNpemU6OmFyZWEpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBo
aWNzL0ludFBvaW50Lmg6CisgICAgICAgIChXZWJDb3JlOjpJbnRQb2ludDo6bGVuZ3RoU3F1YXJl
ZCk6CisgICAgICAgIChXZWJDb3JlOjpJbnRQb2ludDo6ZGlzdGFuY2VTcXVhcmVkVG9Qb2ludCk6
CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvSW50UmVjdC5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpkaXN0YW5jZVRvSW50ZXJ2YWwpOgorICAgICAgICAoV2ViQ29yZTo6SW50UmVjdDo6ZGlm
ZmVyZW5jZVRvUG9pbnQpOgorICAgICAgICAoV2ViQ29yZTo6SW50UmVjdDo6ZGlmZmVyZW5jZUZy
b21DZW50ZXJMaW5lVG9Qb2ludCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvSW50UmVj
dC5oOgorICAgICAgICAoV2ViQ29yZTo6SW50UmVjdDo6ZGlzdGFuY2VTcXVhcmVkVG9Qb2ludCk6
CisgICAgICAgIChXZWJDb3JlOjpJbnRSZWN0OjpkaXN0YW5jZVNxdWFyZWRGcm9tQ2VudGVyTGlu
ZVRvUG9pbnQpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0ludFNpemUuaDoKKyAgICAg
ICAgKFdlYkNvcmU6OkludFNpemU6OmFyZWEpOgorICAgICAgICAoV2ViQ29yZTo6SW50U2l6ZTo6
ZGlhZ29uYWxMZW5ndGhTcXVhcmVkKToKKyAgICAgICAgKiB0ZXN0aW5nL0ludGVybmFscy5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpJbnRlcm5hbHM6OnRvdWNoUG9zaXRpb25BZGp1c3RlZFRvQmVz
dE5vZGVGb3JHZXN0dXJlVGFwKToKKyAgICAgICAgKFdlYkNvcmU6OkludGVybmFsczo6dG91Y2hO
b2RlQWRqdXN0ZWRUb0Jlc3ROb2RlRm9yR2VzdHVyZVRhcCk6CisgICAgICAgICogdGVzdGluZy9J
bnRlcm5hbHMuaDoKKyAgICAgICAgKiB0ZXN0aW5nL0ludGVybmFscy5pZGw6CisKKzIwMTItMDIt
MjQgIEFsbGFuIFNhbmRmZWxkIEplbnNlbiAgPGFsbGFuLmplbnNlbkBub2tpYS5jb20+CisKICAg
ICAgICAgUmVmYWN0b3IgRXZlbnRIYW5kbGVyOjpoYW5kbGVHZXN0dXJlRXZlbnQuCiAgICAgICAg
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD03OTQ3NgogCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9UYXJnZXQucHJpIGIvU291cmNlL1dlYkNvcmUvVGFyZ2V0LnBy
aQppbmRleCA0ZDUyOTJkLi42MTgyMDI4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9UYXJn
ZXQucHJpCisrKyBiL1NvdXJjZS9XZWJDb3JlL1RhcmdldC5wcmkKQEAgLTEwMjEsNiArMTAyMSw3
IEBAIFNPVVJDRVMgKz0gXAogICAgIHBhZ2UvU2VjdXJpdHlQb2xpY3kuY3BwIFwKICAgICBwYWdl
L1NldHRpbmdzLmNwcCBcCiAgICAgcGFnZS9TcGF0aWFsTmF2aWdhdGlvbi5jcHAgXAorICAgIHBh
Z2UvVG91Y2hBZGp1c3RtZW50LmNwcCBcCiAgICAgcGFnZS9TdXNwZW5kYWJsZVRpbWVyLmNwcCBc
CiAgICAgcGFnZS9Vc2VyQ29udGVudFVSTFBhdHRlcm4uY3BwIFwKICAgICBwYWdlL1dpbmRvd0Zl
YXR1cmVzLmNwcCBcCkBAIC0yMDk0LDYgKzIwOTUsNyBAQCBIRUFERVJTICs9IFwKICAgICBwYWdl
L1NwZWVjaElucHV0TGlzdGVuZXIuaCBcCiAgICAgcGFnZS9TcGVlY2hJbnB1dFJlc3VsdC5oIFwK
ICAgICBwYWdlL1NwZWVjaElucHV0UmVzdWx0TGlzdC5oIFwKKyAgICBwYWdlL1RvdWNoQWRqdXN0
bWVudC5oIFwKICAgICBwYWdlL1dlYktpdEFuaW1hdGlvbi5oIFwKICAgICBwYWdlL1dlYktpdEFu
aW1hdGlvbkxpc3QuaCBcCiAgICAgcGFnZS9XaW5kb3dGZWF0dXJlcy5oIFwKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3BhZ2UvRXZlbnRIYW5kbGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3Bh
Z2UvRXZlbnRIYW5kbGVyLmNwcAppbmRleCAzYzEwYjc1Li4zYTYzNzRhIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9wYWdlL0V2ZW50SGFuZGxlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
cGFnZS9FdmVudEhhbmRsZXIuY3BwCkBAIC04OCw2ICs4OCwxMCBAQAogI2luY2x1ZGUgIlBsYXRm
b3JtR2VzdHVyZUV2ZW50LmgiCiAjZW5kaWYKIAorI2lmIEVOQUJMRShUT1VDSF9BREpVU1RNRU5U
KQorI2luY2x1ZGUgIlRvdWNoQWRqdXN0bWVudC5oIgorI2VuZGlmCisKICNpZiBFTkFCTEUoU1ZH
KQogI2luY2x1ZGUgIlNWR0RvY3VtZW50LmgiCiAjaW5jbHVkZSAiU1ZHRWxlbWVudEluc3RhbmNl
LmgiCkBAIC0yMzYwLDEyICsyMzY0LDIzIEBAIGJvb2wgRXZlbnRIYW5kbGVyOjpoYW5kbGVHZXN0
dXJlRXZlbnQoY29uc3QgUGxhdGZvcm1HZXN0dXJlRXZlbnQmIGdlc3R1cmVFdmVudCkKIAogYm9v
bCBFdmVudEhhbmRsZXI6OmhhbmRsZUdlc3R1cmVUYXAoY29uc3QgUGxhdGZvcm1HZXN0dXJlRXZl
bnQmIGdlc3R1cmVFdmVudCkKIHsKKyAgICBMYXlvdXRQb2ludCBhZGp1c3RlZFBvaW50ID0gZ2Vz
dHVyZUV2ZW50LnBvc2l0aW9uKCk7CisjaWYgRU5BQkxFKFRPVUNIX0FESlVTVE1FTlQpCisgICAg
aWYgKCFnZXN0dXJlRXZlbnQuYXJlYSgpLmlzRW1wdHkoKSkgeworICAgICAgICBOb2RlKiB0YXJn
ZXROb2RlID0gMDsKKyAgICAgICAgLy8gRm9yIG5vdyB3ZSB1c2UgdGhlIGFkanVzdGVkIHBvc2l0
aW9uIHRvIGVuc3VyZSB0aGUgbGF0ZXIgcmVkdW5kYW50IGhpdC10ZXN0cyBoaXRzIHRoZSByaWdo
dCBub2RlLgorICAgICAgICBub2RlRm9yVGFwR2VzdHVyZUF0VG91Y2hQb2ludChnZXN0dXJlRXZl
bnQucG9zaXRpb24oKSwgSW50U2l6ZShnZXN0dXJlRXZlbnQuYXJlYSgpLndpZHRoKCkgLyAyLCBn
ZXN0dXJlRXZlbnQuYXJlYSgpLmhlaWdodCgpIC8gMiksIGFkanVzdGVkUG9pbnQsIHRhcmdldE5v
ZGUpOworICAgICAgICBpZiAoIXRhcmdldE5vZGUpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7
CisgICAgfQorI2VuZGlmCisKICAgICAvLyBGSVhNRTogUmVmYWN0b3IgdGhpcyBjb2RlIHRvIG5v
dCBoaXQgdGVzdCBtdWx0aXBsZSB0aW1lcyBvbmNlIGhpdCB0ZXN0aW5nCiAgICAgLy8gaGFzIGJl
ZW4gY29ycmVjdGVkIGFzIHN1Z2dlc3RlZCBhYm92ZSBpbiBoYW5kbGVHZXN0dXJlRXZlbnQoKS4K
ICAgICBib29sIGRlZmF1bHRQcmV2ZW50ZWQgPSBmYWxzZTsKLSAgICBQbGF0Zm9ybU1vdXNlRXZl
bnQgZmFrZU1vdXNlTW92ZShnZXN0dXJlRXZlbnQucG9zaXRpb24oKSwgZ2VzdHVyZUV2ZW50Lmds
b2JhbFBvc2l0aW9uKCksIE5vQnV0dG9uLCBQbGF0Zm9ybUV2ZW50OjpNb3VzZU1vdmVkLCAvKiBj
bGlja0NvdW50ICovIDEsIGdlc3R1cmVFdmVudC5zaGlmdEtleSgpLCBnZXN0dXJlRXZlbnQuY3Ry
bEtleSgpLCBnZXN0dXJlRXZlbnQuYWx0S2V5KCksIGdlc3R1cmVFdmVudC5tZXRhS2V5KCksIGdl
c3R1cmVFdmVudC50aW1lc3RhbXAoKSk7Ci0gICAgUGxhdGZvcm1Nb3VzZUV2ZW50IGZha2VNb3Vz
ZURvd24oZ2VzdHVyZUV2ZW50LnBvc2l0aW9uKCksIGdlc3R1cmVFdmVudC5nbG9iYWxQb3NpdGlv
bigpLCBMZWZ0QnV0dG9uLCBQbGF0Zm9ybUV2ZW50OjpNb3VzZVByZXNzZWQsIC8qIGNsaWNrQ291
bnQgKi8gMSwgZ2VzdHVyZUV2ZW50LnNoaWZ0S2V5KCksIGdlc3R1cmVFdmVudC5jdHJsS2V5KCks
IGdlc3R1cmVFdmVudC5hbHRLZXkoKSwgZ2VzdHVyZUV2ZW50Lm1ldGFLZXkoKSwgZ2VzdHVyZUV2
ZW50LnRpbWVzdGFtcCgpKTsKLSAgICBQbGF0Zm9ybU1vdXNlRXZlbnQgZmFrZU1vdXNlVXAoZ2Vz
dHVyZUV2ZW50LnBvc2l0aW9uKCksIGdlc3R1cmVFdmVudC5nbG9iYWxQb3NpdGlvbigpLCBMZWZ0
QnV0dG9uLCBQbGF0Zm9ybUV2ZW50OjpNb3VzZVJlbGVhc2VkLCAvKiBjbGlja0NvdW50ICovIDEs
IGdlc3R1cmVFdmVudC5zaGlmdEtleSgpLCBnZXN0dXJlRXZlbnQuY3RybEtleSgpLCBnZXN0dXJl
RXZlbnQuYWx0S2V5KCksIGdlc3R1cmVFdmVudC5tZXRhS2V5KCksIGdlc3R1cmVFdmVudC50aW1l
c3RhbXAoKSk7CisgICAgUGxhdGZvcm1Nb3VzZUV2ZW50IGZha2VNb3VzZU1vdmUoYWRqdXN0ZWRQ
b2ludCwgZ2VzdHVyZUV2ZW50Lmdsb2JhbFBvc2l0aW9uKCksIE5vQnV0dG9uLCBQbGF0Zm9ybUV2
ZW50OjpNb3VzZU1vdmVkLCAvKiBjbGlja0NvdW50ICovIDEsIGdlc3R1cmVFdmVudC5zaGlmdEtl
eSgpLCBnZXN0dXJlRXZlbnQuY3RybEtleSgpLCBnZXN0dXJlRXZlbnQuYWx0S2V5KCksIGdlc3R1
cmVFdmVudC5tZXRhS2V5KCksIGdlc3R1cmVFdmVudC50aW1lc3RhbXAoKSk7CisgICAgUGxhdGZv
cm1Nb3VzZUV2ZW50IGZha2VNb3VzZURvd24oYWRqdXN0ZWRQb2ludCwgZ2VzdHVyZUV2ZW50Lmds
b2JhbFBvc2l0aW9uKCksIExlZnRCdXR0b24sIFBsYXRmb3JtRXZlbnQ6Ok1vdXNlUHJlc3NlZCwg
LyogY2xpY2tDb3VudCAqLyAxLCBnZXN0dXJlRXZlbnQuc2hpZnRLZXkoKSwgZ2VzdHVyZUV2ZW50
LmN0cmxLZXkoKSwgZ2VzdHVyZUV2ZW50LmFsdEtleSgpLCBnZXN0dXJlRXZlbnQubWV0YUtleSgp
LCBnZXN0dXJlRXZlbnQudGltZXN0YW1wKCkpOworICAgIFBsYXRmb3JtTW91c2VFdmVudCBmYWtl
TW91c2VVcChhZGp1c3RlZFBvaW50LCBnZXN0dXJlRXZlbnQuZ2xvYmFsUG9zaXRpb24oKSwgTGVm
dEJ1dHRvbiwgUGxhdGZvcm1FdmVudDo6TW91c2VSZWxlYXNlZCwgLyogY2xpY2tDb3VudCAqLyAx
LCBnZXN0dXJlRXZlbnQuc2hpZnRLZXkoKSwgZ2VzdHVyZUV2ZW50LmN0cmxLZXkoKSwgZ2VzdHVy
ZUV2ZW50LmFsdEtleSgpLCBnZXN0dXJlRXZlbnQubWV0YUtleSgpLCBnZXN0dXJlRXZlbnQudGlt
ZXN0YW1wKCkpOwogICAgIG1vdXNlTW92ZWQoZmFrZU1vdXNlTW92ZSk7CiAgICAgZGVmYXVsdFBy
ZXZlbnRlZCB8PSBoYW5kbGVNb3VzZVByZXNzRXZlbnQoZmFrZU1vdXNlRG93bik7CiAgICAgZGVm
YXVsdFByZXZlbnRlZCB8PSBoYW5kbGVNb3VzZVJlbGVhc2VFdmVudChmYWtlTW91c2VVcCk7CkBA
IC0yMzg1LDYgKzI0MDAsMTkgQEAgYm9vbCBFdmVudEhhbmRsZXI6OmhhbmRsZUdlc3R1cmVTY3Jv
bGxVcGRhdGUoY29uc3QgUGxhdGZvcm1HZXN0dXJlRXZlbnQmIGdlc3R1cmUKIH0KICNlbmRpZgog
CisjaWYgRU5BQkxFKFRPVUNIX0FESlVTVE1FTlQpCit2b2lkIEV2ZW50SGFuZGxlcjo6bm9kZUZv
clRhcEdlc3R1cmVBdFRvdWNoUG9pbnQoY29uc3QgSW50UG9pbnQmIHRvdWNoQ2VudGVyLCBjb25z
dCBJbnRTaXplJiB0b3VjaFJhZGl1cywgSW50UG9pbnQmIHRhcmdldFBvaW50LCBOb2RlKiYgdGFy
Z2V0Tm9kZSkKK3sKKyAgICBIaXRUZXN0UmVxdWVzdDo6SGl0VGVzdFJlcXVlc3RUeXBlIGhpdFR5
cGUgPSBIaXRUZXN0UmVxdWVzdDo6UmVhZE9ubHkgfCBIaXRUZXN0UmVxdWVzdDo6QWN0aXZlOwor
ICAgIEludFJlY3QgdG91Y2hSZWN0KHRvdWNoQ2VudGVyIC0gdG91Y2hSYWRpdXMsIEludFNpemUo
dG91Y2hSYWRpdXMud2lkdGgoKSAqIDIsIHRvdWNoUmFkaXVzLmhlaWdodCgpICogMikpOworICAg
IHRhcmdldE5vZGUgPSAwOworCisgICAgSGl0VGVzdFJlc3VsdCByZXN1bHQgPSBoaXRUZXN0UmVz
dWx0QXRQb2ludCh0b3VjaENlbnRlciwgLyphbGxvd1NoYWRvd0NvbnRlbnQqLyBmYWxzZSwgLypp
Z25vcmVDbGlwcGluZyovIGZhbHNlLCBEb250SGl0VGVzdFNjcm9sbGJhcnMsIGhpdFR5cGUsIHRv
dWNoUmFkaXVzKTsKKworICAgIGZpbmRCZXN0Q2FuZGlkYXRlRm9yR2VzdHVyZVRhcCh0YXJnZXRO
b2RlLCB0YXJnZXRQb2ludCwgdG91Y2hDZW50ZXIsIHRvdWNoUmVjdCwgcmVzdWx0KTsKK30KKyNl
bmRpZgorCiAjaWYgRU5BQkxFKENPTlRFWFRfTUVOVVMpCiBib29sIEV2ZW50SGFuZGxlcjo6c2Vu
ZENvbnRleHRNZW51RXZlbnQoY29uc3QgUGxhdGZvcm1Nb3VzZUV2ZW50JiBldmVudCkKIHsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRXZlbnRIYW5kbGVyLmggYi9Tb3VyY2UvV2Vi
Q29yZS9wYWdlL0V2ZW50SGFuZGxlci5oCmluZGV4IGE1ZmYzMDMuLjgyZmVlYjkgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRXZlbnRIYW5kbGVyLmgKKysrIGIvU291cmNlL1dlYkNv
cmUvcGFnZS9FdmVudEhhbmRsZXIuaApAQCAtMTY2LDYgKzE2NiwxMCBAQCBwdWJsaWM6CiAgICAg
Ym9vbCBoYW5kbGVHZXN0dXJlU2Nyb2xsVXBkYXRlKGNvbnN0IFBsYXRmb3JtR2VzdHVyZUV2ZW50
Jik7CiAjZW5kaWYKIAorI2lmIEVOQUJMRShUT1VDSF9BREpVU1RNRU5UKQorICAgIHZvaWQgbm9k
ZUZvclRhcEdlc3R1cmVBdFRvdWNoUG9pbnQoY29uc3QgSW50UG9pbnQmIHRvdWNoQ2VudGVyLCBj
b25zdCBJbnRTaXplJiB0b3VjaFJhZGl1cywgSW50UG9pbnQmIHRhcmdldFBvaW50LCBOb2RlKiYg
dGFyZ2V0Tm9kZSk7CisjZW5kaWYKKwogI2lmIEVOQUJMRShDT05URVhUX01FTlVTKQogICAgIGJv
b2wgc2VuZENvbnRleHRNZW51RXZlbnQoY29uc3QgUGxhdGZvcm1Nb3VzZUV2ZW50Jik7CiAgICAg
Ym9vbCBzZW5kQ29udGV4dE1lbnVFdmVudEZvcktleSgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcGFnZS9Ub3VjaEFkanVzdG1lbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvcGFnZS9Ub3Vj
aEFkanVzdG1lbnQuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA2NjY3
ZWMKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL1RvdWNoQWRqdXN0bWVu
dC5jcHAKQEAgLTAsMCArMSwyMzMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgTm9raWEg
Q29ycG9yYXRpb24gYW5kL29yIGl0cyBzdWJzaWRpYXJ5KC1pZXMpCisgKgorICogVGhpcyBsaWJy
YXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICog
bW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJs
aWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRp
b247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRp
b24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRl
ZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5Z
IFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNI
QU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUg
R05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4K
KyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFy
eSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2Vl
IHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29m
dHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwK
KyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpbmNsdWRlICJjb25maWcu
aCIKKworI2luY2x1ZGUgIlRvdWNoQWRqdXN0bWVudC5oIgorCisjaW5jbHVkZSAiQ29udGFpbmVy
Tm9kZS5oIgorI2luY2x1ZGUgIkZsb2F0UG9pbnQuaCIKKyNpbmNsdWRlICJGbG9hdFF1YWQuaCIK
KyNpbmNsdWRlICJIaXRUZXN0UmVzdWx0LmgiCisjaW5jbHVkZSAiSW50UG9pbnQuaCIKKyNpbmNs
dWRlICJJbnRTaXplLmgiCisjaW5jbHVkZSAiTm9kZS5oIgorI2luY2x1ZGUgIlJlbmRlck9iamVj
dC5oIgorI2luY2x1ZGUgIlJlbmRlclN0eWxlLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKwor
bmFtZXNwYWNlIFRvdWNoQWRqdXN0bWVudCB7CisKK2NsYXNzIEhpdFRlc3RRdWFkIHsKK3B1Ymxp
YzoKKyAgICBIaXRUZXN0UXVhZChOb2RlKiBub2RlLCBjb25zdCBGbG9hdFF1YWQmIHF1YWQpIDog
bV9ub2RlKG5vZGUpLCBtX3F1YWQocXVhZCkgeyB9CisKKyAgICBOb2RlKiBub2RlKCkgY29uc3Qg
eyByZXR1cm4gbV9ub2RlOyB9CisgICAgRmxvYXRRdWFkIHF1YWQoKSBjb25zdCB7IHJldHVybiBt
X3F1YWQ7IH0KKyAgICBMYXlvdXRSZWN0IGJvdW5kaW5nQm94KCkgY29uc3QgeyByZXR1cm4gbV9x
dWFkLmVuY2xvc2luZ0JvdW5kaW5nQm94KCk7IH0KKworcHJpdmF0ZToKKyAgICBOb2RlKiBtX25v
ZGU7CisgICAgRmxvYXRRdWFkIG1fcXVhZDsKK307CisKK3R5cGVkZWYgVmVjdG9yPEhpdFRlc3RR
dWFkPiBIaXRMaXN0OwordHlwZWRlZiBib29sICgqTm9kZUZpbHRlcikoTm9kZSopOwordHlwZWRl
ZiBmbG9hdCAoKk1ldHJpYykoY29uc3QgTGF5b3V0UG9pbnQmLCBjb25zdCBMYXlvdXRSZWN0Jiwg
Y29uc3QgSGl0VGVzdFF1YWQmKTsKKworLy8gVGFrZXMgbm9uLWNvbnN0IE5vZGUqIGJlY2F1c2Ug
aXNDb250ZW50RWRpdGFibGUgaXMgYSBub24tY29uc3QgZnVuY3Rpb24uCitib29sIG5vZGVSZXNw
b25kc1RvVGFwR2VzdHVyZShOb2RlKiBub2RlKQoreworICAgIGlmIChub2RlLT5pc0xpbmsoKQor
ICAgICAgICB8fCBub2RlLT5pc0NvbnRlbnRFZGl0YWJsZSgpCisgICAgICAgIHx8IG5vZGUtPmlz
TW91c2VGb2N1c2FibGUoKSkKKyAgICAgICAgLy8gRklYTUU6IEltcGxlbWVudCBoYXNEZWZhdWx0
RXZlbnRIYW5kbGVyIGFuZCB1c2UgdGhhdCBpbnN0ZWFkIG9mIGFsbCBvZiB0aGVzZSBhYm92ZSBj
YWxscz8KKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgaWYgKG5vZGUtPmhhc0V2ZW50TGlzdGVu
ZXJzKCkKKyAgICAgICAgJiYgKG5vZGUtPmhhc0V2ZW50TGlzdGVuZXJzKGV2ZW50TmFtZXMoKS5j
bGlja0V2ZW50KQorICAgICAgICAgICAgfHwgbm9kZS0+aGFzRXZlbnRMaXN0ZW5lcnMoZXZlbnRO
YW1lcygpLkRPTUFjdGl2YXRlRXZlbnQpCisgICAgICAgICAgICB8fCBub2RlLT5oYXNFdmVudExp
c3RlbmVycyhldmVudE5hbWVzKCkubW91c2Vkb3duRXZlbnQpCisgICAgICAgICAgICB8fCBub2Rl
LT5oYXNFdmVudExpc3RlbmVycyhldmVudE5hbWVzKCkubW91c2V1cEV2ZW50KQorICAgICAgICAg
ICAgfHwgbm9kZS0+aGFzRXZlbnRMaXN0ZW5lcnMoZXZlbnROYW1lcygpLm1vdXNlbW92ZUV2ZW50
KQorICAgICAgICAgICAgLy8gQ2hlY2tpbmcgZm9yIGZvY3VzIGV2ZW50cyBpcyBub3QgbmVjZXNz
YXJ5IHNpbmNlIHRoZXkgY2FuIG9ubHkgZmlyZSBvbgorICAgICAgICAgICAgLy8gZm9jdXNhYmxl
IGVsZW1lbnRzIHdoaWNoIGhhdmUgYWxyZWFkeSBiZWVuIGNhcHR1cmVkIGFib3ZlLgorICAgICAg
ICApKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICBpZiAobm9kZS0+cmVuZGVyU3R5bGUoKSkg
eworICAgICAgICAvLyBBY2NlcHQgbm9kZXMgdGhhdCBoYXMgYSBDU1MgZWZmZWN0IHdoZW4gdG91
Y2hlZC4KKyAgICAgICAgaWYgKG5vZGUtPnJlbmRlclN0eWxlKCktPmFmZmVjdGVkQnlBY3RpdmVS
dWxlcygpIHx8IG5vZGUtPnJlbmRlclN0eWxlKCktPmFmZmVjdGVkQnlIb3ZlclJ1bGVzKCkpCisg
ICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAgcmV0dXJuIGZhbHNlOworfQorCitz
dGF0aWMgaW5saW5lIHZvaWQgYXBwZW5kQWJzb2x1dGVRdWFkc0Zvck5vZGVUb0hpdExpc3QoTm9k
ZSogbm9kZSwgSGl0TGlzdCYgaGl0bGlzdCkKK3sKKyAgICAvLyBTaW5jZSB0aGUgbm9kZSBpcyBh
IHJlc3VsdCBvZiBhIGhpdCB0ZXN0LCB3ZSBhcmUgYWxyZWFkeSBlbnN1cmVkIGl0IGhhcyBhIHJl
bmRlcmVyLgorICAgIEFTU0VSVChub2RlLT5yZW5kZXJlcigpKTsKKworICAgIFZlY3RvcjxGbG9h
dFF1YWQ+IHF1YWRzOworICAgIG5vZGUtPnJlbmRlcmVyKCktPmFic29sdXRlUXVhZHMocXVhZHMp
OworCisgICAgVmVjdG9yPEZsb2F0UXVhZD46OmNvbnN0X2l0ZXJhdG9yIGl0ID0gcXVhZHMuYmVn
aW4oKTsKKyAgICBjb25zdCBWZWN0b3I8RmxvYXRRdWFkPjo6Y29uc3RfaXRlcmF0b3IgZW5kID0g
cXVhZHMuZW5kKCk7CisgICAgZm9yICg7IGl0ICE9IGVuZDsgKytpdCkKKyAgICAgICAgaGl0bGlz
dC5hcHBlbmQoSGl0VGVzdFF1YWQobm9kZSwgKml0KSk7Cit9CisKKy8vIENvbXBpbGUgYSBsaXN0
IG9mIGFic29sdXRlIHJlY3RzIHJlcHJlc2VuZGluZyBub2RlcyByZXNwb25kaW5nIHRoZSB0YXAg
Z2VzdHVyZS4KK3ZvaWQgY29tcGlsZUhpdExpc3QoY29uc3QgSGl0VGVzdFJlc3VsdCYgcmVzdWx0
LCBIaXRMaXN0JiBoaXRsaXN0LCBOb2RlRmlsdGVyIG5vZGVGaWx0ZXIpCit7CisgICAgY29uc3Qg
SGl0VGVzdFJlc3VsdDo6Tm9kZVNldCYgaW50ZXJzZWN0ZWROb2RlcyA9IHJlc3VsdC5yZWN0QmFz
ZWRUZXN0UmVzdWx0KCk7CisKKyAgICAvLyBGaW5kIGNhbmRpZGF0ZXMgcmVzcG9uZGluZyB0byB0
YXAgZ2VzdHVyZSBldmVudHMgaW4gTyhuKSB0aW1lLgorICAgIEhhc2hNYXA8Tm9kZSosIE5vZGUq
PiByZXNwb25kZXJNYXA7CisgICAgSGFzaFNldDxOb2RlKj4gYW5jZXN0b3JzVG9SZXNwb25kZXJz
U2V0OworICAgIFZlY3RvcjxOb2RlKj4gY2FuZGlkYXRlczsKKworICAgIEhpdFRlc3RSZXN1bHQ6
Ok5vZGVTZXQ6OmNvbnN0X2l0ZXJhdG9yIGl0MSA9IGludGVyc2VjdGVkTm9kZXMuYmVnaW4oKTsK
KyAgICBjb25zdCBIaXRUZXN0UmVzdWx0OjpOb2RlU2V0Ojpjb25zdF9pdGVyYXRvciBlbmQxID0g
aW50ZXJzZWN0ZWROb2Rlcy5lbmQoKTsKKyAgICBmb3IgKDsgaXQxICE9IGVuZDE7ICsraXQxKSB7
CisgICAgICAgIE5vZGUqIG5vZGUgPSBpdDEtPmdldCgpOworICAgICAgICBpZiAocmVzcG9uZGVy
TWFwLmNvbnRhaW5zKG5vZGUpKQorICAgICAgICAgICAgLy8gU2tpcCBub2RlcyB0aGF0IGFyZSBk
aXJlY3QgYW5jZXN0b3JzIG9mIG90aGVyIGNhbmRpZGF0ZXMuIFRoZXkgd291bGQgaGl0LXRlc3Qg
YWdhaW5zdCB0aGUgc2FtZSBhYnNvbHV0ZSBxdWFkcy4KKyAgICAgICAgICAgIGNvbnRpbnVlOwor
ICAgICAgICBWZWN0b3I8Tm9kZSo+IGFuY2VzdG9yczsKKyAgICAgICAgTm9kZSogcmVzcG9uZGlu
Z05vZGUgPSAwOworICAgICAgICBmb3IgKDsgbm9kZTsgbm9kZSA9IG5vZGUtPnBhcmVudE9ySG9z
dE5vZGUoKSkgeworICAgICAgICAgICAgLy8gQ2hlY2sgaWYgd2UgYWxyZWFkeSBoYXZlIGEgcmVz
dWx0IGZvciBhIGNvbW1vbiBhbmNlc3RvciBmcm9tIGFub3RoZXIgY2FuZGlkYXRlLgorICAgICAg
ICAgICAgcmVzcG9uZGluZ05vZGUgPSByZXNwb25kZXJNYXAuZ2V0KG5vZGUpOworICAgICAgICAg
ICAgaWYgKHJlc3BvbmRpbmdOb2RlKQorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAg
ICAgYW5jZXN0b3JzLmFwcGVuZChub2RlKTsKKyAgICAgICAgICAgIC8vIENoZWNrIGlmIHRoZSBu
b2RlIGZpbHRlciBhcHBsaWVzLCB3aGljaCB3b3VsZCBtZWFuIHdlIGhhdmUgZm91bmQgYSByZXNw
b25kaW5nIG5vZGUuCisgICAgICAgICAgICBpZiAobm9kZUZpbHRlcihub2RlKSkgeworICAgICAg
ICAgICAgICAgIHJlc3BvbmRpbmdOb2RlID0gbm9kZTsKKyAgICAgICAgICAgICAgICAvLyBOb3cg
dGhhdCB3ZSBoYXZlIHRoZSByZXNwb25kZXIsIHNldCB0aGUgcmVzcG9uZGVyIGZvciBhbGwgdGhl
IG5vZGVzIHNlZW4gc28gZmFyLgorICAgICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaW50IGkg
PSAwOyBpIDwgYW5jZXN0b3JzLnNpemUoKTsgaSsrKQorICAgICAgICAgICAgICAgICAgICByZXNw
b25kZXJNYXAuYWRkKGFuY2VzdG9yc1tpXSwgbm9kZSk7CisgICAgICAgICAgICAgICAgLy8gVGhl
IGNvbnRpbnVlIHRoZSBpdGVyYXRpb24gdG8gY29sbGVjdCB0aGUgYW5jZXN0b3JzIG9mIHRoZSBy
ZXNwb25kZXIuCisgICAgICAgICAgICAgICAgZm9yIChub2RlID0gbm9kZS0+cGFyZW50T3JIb3N0
Tm9kZSgpOyBub2RlOyBub2RlID0gbm9kZS0+cGFyZW50T3JIb3N0Tm9kZSgpKSB7CisgICAgICAg
ICAgICAgICAgICAgIHBhaXI8SGFzaFNldDxOb2RlKj46Oml0ZXJhdG9yLCBib29sPiB0bXAgPSBh
bmNlc3RvcnNUb1Jlc3BvbmRlcnNTZXQuYWRkKG5vZGUpOworICAgICAgICAgICAgICAgICAgICBp
ZiAoIXRtcC5zZWNvbmQpCisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
ICAgICAgICB9CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAg
IH0KKyAgICAgICAgaWYgKHJlc3BvbmRpbmdOb2RlKQorICAgICAgICAgICAgY2FuZGlkYXRlcy5h
cHBlbmQoaXQxLT5nZXQoKSk7CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgLy8gSW5zZXJ0
IHRoZSBub2RlcyB3aXRoIG1pc3NpbmcgcmVzcG9uZGVycyBpbnRvIHRoZSByZXNwb25kZXItbWFw
IGZvciBmYXN0IHJlamVjdGlvbiBvZiBsYXRlciBjYW5kaWRhdGVzLgorICAgICAgICAgICAgZm9y
ICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgPCBhbmNlc3RvcnMuc2l6ZSgpOyBpKyspCisgICAgICAg
ICAgICAgICAgcmVzcG9uZGVyTWFwLmFkZChhbmNlc3RvcnNbaV0sIDApOworICAgICAgICB9Cisg
ICAgfQorCisgICAgLy8gV2UgY29tcGlsZSB0aGUgbGlzdCBvZiBjb21wb25lbnQgYWJzb2x1dGUg
cXVhZHMgaW5zdGVhZCBvZiB1c2luZyB0aGUgYm91bmRpbmcgcmVjdAorICAgIC8vIHRvIGJlIGFi
bGUgdG8gcGVyZm9ybSBiZXR0ZXIgaGl0LXRlc3Rpbmcgb24gaW5saW5lIGxpbmtzIG9uIGxpbmUt
YnJlYWtzLgorICAgIFZlY3RvcjxOb2RlKj46OmNvbnN0X2l0ZXJhdG9yIGl0MiA9IGNhbmRpZGF0
ZXMuYmVnaW4oKTsKKyAgICBjb25zdCBWZWN0b3I8Tm9kZSo+Ojpjb25zdF9pdGVyYXRvciBlbmQy
ID0gY2FuZGlkYXRlcy5lbmQoKTsKKyAgICBmb3IgKDsgaXQyICE9IGVuZDI7ICsraXQyKSB7Cisg
ICAgICAgIC8vIFNraXAgbm9kZXMgd2hvcyByZXNwb25kZXJzIGFyZSBhbmNlc3RvcnMgb2Ygb3Ro
ZXIgcmVzcG9uZGVycy4gVGhpcyBnaXZlcyBwcmVmZXJlbmNlIHRvIHRoZSBpbm5lci1tb3N0IGV2
ZW50LWhhbmRsZXJzLgorICAgICAgICAvLyBTbyB0aGF0IGEgbGluayBpcyBhbHdheXMgcHJlZmVy
cmVkIGV2ZW4gd2hlbiBjb250YWluZWQgaW4gYW4gZWxlbWVudCB0aGF0IG1vbml0b3JzIGFsbCBj
bGljay1ldmVudHMuCisgICAgICAgIE5vZGUqIHJlc3BvbmRpbmdOb2RlID0gcmVzcG9uZGVyTWFw
LmdldCgqaXQyKTsKKyAgICAgICAgQVNTRVJUKHJlc3BvbmRpbmdOb2RlKTsKKyAgICAgICAgaWYg
KGFuY2VzdG9yc1RvUmVzcG9uZGVyc1NldC5jb250YWlucyhyZXNwb25kaW5nTm9kZSkpCisgICAg
ICAgICAgICBjb250aW51ZTsKKyAgICAgICAgYXBwZW5kQWJzb2x1dGVRdWFkc0Zvck5vZGVUb0hp
dExpc3QoKml0MiwgaGl0bGlzdCk7CisgICAgfQorfQorCisvLyBSZXR1cm5zIHRoZSBkaXN0YW5j
ZSBzcXVhcmVkIHRvIHRoZSBib3VuZGluZyBib3ggY2VudGVybGluZS4KK2Zsb2F0IGRpc3RhbmNl
VG9IaXRUZXN0UXVhZChjb25zdCBMYXlvdXRQb2ludCYgdG91Y2hIb3RzcG90LCBjb25zdCBMYXlv
dXRSZWN0JiwgY29uc3QgSGl0VGVzdFF1YWQmIGhpdFRlc3RRdWFkKQoreworICAgIC8vIFVzaW5n
IHRoZSBib3VuZGluZyBib3ggbWVhbnMgdGhlIGRpc3RhbmNlIHRvIGNlbnRlcmxpbmUgaXMgbGVz
cyBtZWFuaW5nZnVsIGZvciB0cmFuc2Zvcm1lZCByZWN0YW5nbGVzLAorICAgIC8vIGJ1dCBjYWxj
dWxhdGluZyB0aGUgZGlzdGFuY2UgdG8gcXVhZHMgY2FuIGJlIHZlcnkgZXhwZW5zaXZlLCBhbmQg
d2UgZG8gbm90IHdhbnQgdG8gY2FsY3VsY2F0ZQorICAgIC8vIHF1YWQgYmFzZWQgZGlzdGFuY2Vz
IGZvciB1bnRyYW5zZm9ybWVkIHJlY3RhbmdsZXMuCisgICAgSW50UmVjdCByZWN0ID0gaGl0VGVz
dFF1YWQuYm91bmRpbmdCb3goKTsKKworICAgIHJldHVybiByZWN0LmRpc3RhbmNlU3F1YXJlZEZy
b21DZW50ZXJMaW5lVG9Qb2ludCh0b3VjaEhvdHNwb3QpOworfQorCisvLyBSZXR1cm5zIHRoZSBh
cmVhIG9mIHRoZSBpbnRlcnNlY3Rpb24uCitmbG9hdCBpbnRlcnNlY3Rpb25XaXRoSGl0VGVzdFF1
YWQoY29uc3QgTGF5b3V0UG9pbnQmLCBjb25zdCBMYXlvdXRSZWN0JiB0b3VjaFJlY3QsIGNvbnN0
IEhpdFRlc3RRdWFkJiBoaXRUZXN0UXVhZCkKK3sKKyAgICBJbnRSZWN0IHJlY3QgPSBoaXRUZXN0
UXVhZC5ib3VuZGluZ0JveCgpOworICAgIEludFJlY3QgaW50ZXJzZWN0aW9uID0gcmVjdDsKKyAg
ICByZWN0LmludGVyc2VjdCh0b3VjaFJlY3QpOworCisgICAgcmV0dXJuIGludGVyc2VjdGlvbi5z
aXplKCkuYXJlYSgpOworfQorCitib29sIGZpbmROb2RlV2l0aExvd2VzdE1ldHJpYyhOb2RlKiYg
dGFyZ2V0Tm9kZSwgTGF5b3V0UG9pbnQmIHRhcmdldFBvaW50LCBjb25zdCBMYXlvdXRQb2ludCYg
dG91Y2hIb3RzcG90LCBjb25zdCBMYXlvdXRSZWN0JiB0b3VjaEFyZWEsIEhpdExpc3QmIGhpdGxp
c3QsIE1ldHJpYyBtZXRyaWMpCit7CisgICAgdGFyZ2V0Tm9kZSA9IDA7CisKKyAgICBmbG9hdCBi
ZXN0TWV0cmljID0gSU5GSU5JVFk7CisgICAgSGl0TGlzdDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBo
aXRsaXN0LmJlZ2luKCk7CisgICAgSGl0TGlzdDo6Y29uc3RfaXRlcmF0b3IgZW5kID0gaGl0bGlz
dC5lbmQoKTsKKyAgICBmb3IgKDsgaXQgIT0gZW5kOyArK2l0KSB7CisgICAgICAgIE5vZGUqIGhp
dE5vZGUgPSBpdC0+bm9kZSgpOworICAgICAgICBmbG9hdCBoaXRNZXRyaWMgPSBtZXRyaWModG91
Y2hIb3RzcG90LCB0b3VjaEFyZWEsICppdCk7CisgICAgICAgIGlmIChoaXRNZXRyaWMgPCBiZXN0
TWV0cmljKSB7CisgICAgICAgICAgICB0YXJnZXRQb2ludCA9IHJvdW5kZWRMYXlvdXRQb2ludChp
dC0+cXVhZCgpLmNlbnRlcigpKTsKKyAgICAgICAgICAgIHRhcmdldE5vZGUgPSBoaXROb2RlOwor
ICAgICAgICAgICAgYmVzdE1ldHJpYyA9IGhpdE1ldHJpYzsKKyAgICAgICAgfQorICAgIH0KKwor
ICAgIHJldHVybiAodGFyZ2V0Tm9kZSk7Cit9CisKK2Jvb2wgZmluZE5vZGVXaXRoSGlnaGVzdE1l
dHJpYyhOb2RlKiYgdGFyZ2V0Tm9kZSwgTGF5b3V0UG9pbnQmIHRhcmdldFBvaW50LCBjb25zdCBM
YXlvdXRQb2ludCYgdG91Y2hIb3RzcG90LCBjb25zdCBMYXlvdXRSZWN0JiB0b3VjaEFyZWEsIEhp
dExpc3QmIGhpdGxpc3QsIE1ldHJpYyBtZXRyaWMpCit7CisgICAgdGFyZ2V0Tm9kZSA9IDA7CisK
KyAgICBmbG9hdCBiZXN0TWV0cmljID0gMDsKKyAgICBIaXRMaXN0Ojpjb25zdF9pdGVyYXRvciBp
dCA9IGhpdGxpc3QuYmVnaW4oKTsKKyAgICBIaXRMaXN0Ojpjb25zdF9pdGVyYXRvciBlbmQgPSBo
aXRsaXN0LmVuZCgpOworICAgIGZvciAoOyBpdCAhPSBlbmQ7ICsraXQpIHsKKyAgICAgICAgTm9k
ZSogaGl0Tm9kZSA9IGl0LT5ub2RlKCk7CisgICAgICAgIGZsb2F0IGhpdE1ldHJpYyA9IG1ldHJp
Yyh0b3VjaEhvdHNwb3QsIHRvdWNoQXJlYSwgKml0KTsKKyAgICAgICAgaWYgKGhpdE1ldHJpYyA+
IGJlc3RNZXRyaWMpIHsKKyAgICAgICAgICAgIHRhcmdldFBvaW50ID0gcm91bmRlZExheW91dFBv
aW50KGl0LT5xdWFkKCkuY2VudGVyKCkpOworICAgICAgICAgICAgdGFyZ2V0Tm9kZSA9IGhpdE5v
ZGU7CisgICAgICAgICAgICBiZXN0TWV0cmljID0gaGl0TWV0cmljOworICAgICAgICB9CisgICAg
fQorCisgICAgcmV0dXJuICh0YXJnZXROb2RlKTsKK30KKworfSAvLyBuYW1lc3BhY2UgVG91Y2hB
ZGp1c3RtZW50CisKK3ZvaWQgZmluZEJlc3RDYW5kaWRhdGVGb3JHZXN0dXJlVGFwKE5vZGUqJiB0
YXJnZXROb2RlLCBMYXlvdXRQb2ludCYgdGFyZ2V0UG9pbnQsIGNvbnN0IExheW91dFBvaW50JiB0
b3VjaEhvdHNwb3QsIGNvbnN0IExheW91dFJlY3QmIHRvdWNoQXJlYSwgY29uc3QgSGl0VGVzdFJl
c3VsdCYgaGl0VGVzdFJlc3VsdCkKK3sKKyAgICBUb3VjaEFkanVzdG1lbnQ6OkhpdExpc3QgaGl0
bGlzdDsKKyAgICBUb3VjaEFkanVzdG1lbnQ6OmNvbXBpbGVIaXRMaXN0KGhpdFRlc3RSZXN1bHQs
IGhpdGxpc3QsIFRvdWNoQWRqdXN0bWVudDo6bm9kZVJlc3BvbmRzVG9UYXBHZXN0dXJlKTsKKyAg
ICBpZiAoIVRvdWNoQWRqdXN0bWVudDo6ZmluZE5vZGVXaXRoTG93ZXN0TWV0cmljKHRhcmdldE5v
ZGUsIHRhcmdldFBvaW50LCB0b3VjaEhvdHNwb3QsIHRvdWNoQXJlYSwgaGl0bGlzdCwgVG91Y2hB
ZGp1c3RtZW50OjpkaXN0YW5jZVRvSGl0VGVzdFF1YWQpKSB7CisgICAgICAgIC8vIERlZmF1bHQg
dG8ganVzdCByZXR1cm5pbmcgaW5uZXJOb25TaGFyZWROb2RlLgorICAgICAgICB0YXJnZXRQb2lu
dCA9IHRvdWNoSG90c3BvdDsKKyAgICAgICAgdGFyZ2V0Tm9kZSA9IGhpdFRlc3RSZXN1bHQuaW5u
ZXJOb25TaGFyZWROb2RlKCk7CisgICAgfQorfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL1RvdWNoQWRqdXN0bWVudC5oIGIvU291cmNl
L1dlYkNvcmUvcGFnZS9Ub3VjaEFkanVzdG1lbnQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAwMDAwMDAwLi41N2Q5NDYzCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGFn
ZS9Ub3VjaEFkanVzdG1lbnQuaApAQCAtMCwwICsxLDM2IEBACisvKgorICogQ29weXJpZ2h0IChD
KSAyMDEyIE5va2lhIENvcnBvcmF0aW9uIGFuZC9vciBpdHMgc3Vic2lkaWFyeSgtaWVzKQorICoK
KyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBp
dCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5
IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0
d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3Ig
KGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkg
aXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1
dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5
IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBP
U0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBt
b3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0
aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlz
IGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAq
IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwg
RmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaWZu
ZGVmIFRvdWNoQWRqdXN0bWVudF9oCisjZGVmaW5lIFRvdWNoQWRqdXN0bWVudF9oCisKKyNpbmNs
dWRlICJGbG9hdFF1YWQuaCIKKyNpbmNsdWRlICJIaXRUZXN0UmVzdWx0LmgiCisjaW5jbHVkZSAi
TGF5b3V0VHlwZXMuaCIKKyNpbmNsdWRlICJOb2RlLmgiCisjaW5jbHVkZSA8d3RmL1ZlY3Rvci5o
PgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK3ZvaWQgZmluZEJlc3RDYW5kaWRhdGVGb3JHZXN0
dXJlVGFwKE5vZGUqJiB0YXJnZXROb2RlLCBMYXlvdXRQb2ludCYgdGFyZ2V0UG9pbnQsIGNvbnN0
IExheW91dFBvaW50JiB0b3VjaEhvdHNwb3QsIGNvbnN0IExheW91dFJlY3QmIHRvdWNoQXJlYSwg
Y29uc3QgSGl0VGVzdFJlc3VsdCYpOworLy8gRklYTUU6IEltcGxlbWVudCB0aGUgc2ltaWxhciBm
dW5jdGlvbnMgZm9yIG90aGVyIGdlc3R1cmVzIGhlcmUgYXMgd2VsbC4KKworfSAvLyBuYW1lc3Bh
Y2UgV2ViQ29yZQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL0Zsb2F0UG9pbnQuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L0Zsb2F0UG9pbnQuaAppbmRleCAwOTQzMDRkLi5jODNjZmZiIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9GbG9hdFBvaW50LmgKKysrIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvRmxvYXRQb2ludC5oCkBAIC02OSw2ICs2OSw3IEBAIHB1Ymxp
YzoKICAgICBGbG9hdFBvaW50KGZsb2F0IHgsIGZsb2F0IHkpIDogbV94KHgpLCBtX3koeSkgeyB9
CiAgICAgRmxvYXRQb2ludChjb25zdCBJbnRQb2ludCYpOwogICAgIEZsb2F0UG9pbnQoY29uc3Qg
RnJhY3Rpb25hbExheW91dFBvaW50Jik7CisgICAgZXhwbGljaXQgRmxvYXRQb2ludChGbG9hdFNp
emUgc2l6ZSkgOiBtX3goc2l6ZS53aWR0aCgpKSwgbV95KHNpemUuaGVpZ2h0KCkpIHsgfQogCiAg
ICAgc3RhdGljIEZsb2F0UG9pbnQgemVybygpIHsgcmV0dXJuIEZsb2F0UG9pbnQoKTsgfQogCkBA
IC0xMzAsNiArMTMxLDkgQEAgcHVibGljOgogICAgICAgICByZXR1cm4gbV94ICogbV94ICsgbV95
ICogbV95OwogICAgIH0KIAorICAgIGZsb2F0IGRpc3RhbmNlVG9Qb2ludChjb25zdCBGbG9hdFBv
aW50JikgY29uc3Q7CisgICAgZmxvYXQgZGlzdGFuY2VTcXVhcmVkVG9Qb2ludChjb25zdCBGbG9h
dFBvaW50JikgY29uc3Q7CisKICAgICBGbG9hdFBvaW50IGV4cGFuZGVkVG8oY29uc3QgRmxvYXRQ
b2ludCYgb3RoZXIpIGNvbnN0CiAgICAgewogICAgICAgICByZXR1cm4gRmxvYXRQb2ludChzdGQ6
Om1heChtX3gsIG90aGVyLm1feCksIHN0ZDo6bWF4KG1feSwgb3RoZXIubV95KSk7CkBAIC0yMjgs
NiArMjMyLDE3IEBAIGlubGluZSBmbG9hdCBvcGVyYXRvciooY29uc3QgRmxvYXRQb2ludCYgYSwg
Y29uc3QgRmxvYXRQb2ludCYgYikKICAgICByZXR1cm4gYS5kb3QoYik7CiB9CiAKK2lubGluZSBm
bG9hdCBGbG9hdFBvaW50OjpkaXN0YW5jZVRvUG9pbnQoY29uc3QgRmxvYXRQb2ludCYgcG9pbnQp
IGNvbnN0Cit7CisgICAgcmV0dXJuICgqdGhpcyAtIHBvaW50KS5kaWFnb25hbExlbmd0aCgpOwor
fQorCitpbmxpbmUgZmxvYXQgRmxvYXRQb2ludDo6ZGlzdGFuY2VTcXVhcmVkVG9Qb2ludChjb25z
dCBGbG9hdFBvaW50JiBwb2ludCkgY29uc3QKK3sKKyAgICByZXR1cm4gKCp0aGlzIC0gcG9pbnQp
LmRpYWdvbmFsTGVuZ3RoU3F1YXJlZCgpOworfQorCisKIGlubGluZSBJbnRQb2ludCByb3VuZGVk
SW50UG9pbnQoY29uc3QgRmxvYXRQb2ludCYgcCkKIHsKICAgICByZXR1cm4gSW50UG9pbnQoc3Rh
dGljX2Nhc3Q8aW50Pihyb3VuZGYocC54KCkpKSwgc3RhdGljX2Nhc3Q8aW50Pihyb3VuZGYocC55
KCkpKSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9GbG9h
dFF1YWQuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0Zsb2F0UXVhZC5oCmlu
ZGV4IGI1ZTJhOGMuLmJmYjc5NGQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL0Zsb2F0UXVhZC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL0Zsb2F0UXVhZC5oCkBAIC04OCw2ICs4OCwxMyBAQCBwdWJsaWM6CiAgICAgLy8gZnJvbSB0
cmFuc2Zvcm1lZCByZWN0cy4KICAgICBib29sIGNvbnRhaW5zUXVhZChjb25zdCBGbG9hdFF1YWQm
KSBjb25zdDsKIAorICAgIC8vIFRoZSBjZW50ZXIgb2YgdGhlIHF1YWQuIElmIHRoZSBxdWFkIGlz
IHRoZSByZXN1bHQgb2YgYSBhZmZpbmUtdHJhbnNmb3JtZWQgcmVjdGFuZ2xlIHRoaXMgaXMgdGhl
IHNhbWUgYXMgdGhlIG9yaWdpbmFsIGNlbnRlciB0cmFuc2Zvcm1lZC4KKyAgICBGbG9hdFBvaW50
IGNlbnRlcigpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gRmxvYXRQb2ludCgobV9wMS54
KCkgKyBtX3AyLngoKSArIG1fcDMueCgpICsgbV9wNC54KCkpIC8gNC4wLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAobV9wMS55KCkgKyBtX3AyLnkoKSArIG1fcDMueSgpICsgbV9wNC55KCkp
IC8gNC4wKTsKKyAgICB9CisKICAgICBGbG9hdFJlY3QgYm91bmRpbmdCb3goKSBjb25zdDsKICAg
ICBJbnRSZWN0IGVuY2xvc2luZ0JvdW5kaW5nQm94KCkgY29uc3QKICAgICB7CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9GbG9hdFJlY3QuY3BwIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRmxvYXRSZWN0LmNwcAppbmRleCA3Mzc0NzNjLi45
MDljMTg1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9GbG9h
dFJlY3QuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0Zsb2F0UmVj
dC5jcHAKQEAgLTE0Miw2ICsxNDIsNDAgQEAgdm9pZCBGbG9hdFJlY3Q6OnNjYWxlKGZsb2F0IHN4
LCBmbG9hdCBzeSkKICAgICBtX3NpemUuc2V0SGVpZ2h0KGhlaWdodCgpICogc3kpOwogfQogCitz
dGF0aWMgaW5saW5lIGZsb2F0IGRpc3RhbmNlVG9JbnRlcnZhbChmbG9hdCBwb3MsIGZsb2F0IHN0
YXJ0LCBmbG9hdCBlbmQpCit7CisgICAgaWYgKHBvcyA8IHN0YXJ0KQorICAgICAgICByZXR1cm4g
c3RhcnQgLSBwb3M7CisgICAgaWYgKHBvcyA+IGVuZCkKKyAgICAgICAgcmV0dXJuIGVuZCAtIHBv
czsKKyAgICByZXR1cm4gMDsKK30KKworRmxvYXRTaXplIEZsb2F0UmVjdDo6ZGlmZmVyZW5jZVRv
UG9pbnQoY29uc3QgRmxvYXRQb2ludCYgcG9pbnQpIGNvbnN0Cit7CisgICAgZmxvYXQgeGRpc3Rh
bmNlID0gZGlzdGFuY2VUb0ludGVydmFsKHBvaW50LngoKSwgeCgpLCBtYXhYKCkpOworICAgIGZs
b2F0IHlkaXN0YW5jZSA9IGRpc3RhbmNlVG9JbnRlcnZhbChwb2ludC55KCksIHkoKSwgbWF4WSgp
KTsKKyAgICByZXR1cm4gRmxvYXRTaXplKHhkaXN0YW5jZSwgeWRpc3RhbmNlKTsKK30KKworZmxv
YXQgRmxvYXRSZWN0OjpkaXN0YW5jZVRvUG9pbnQoY29uc3QgRmxvYXRQb2ludCYgcCkgY29uc3QK
K3sKKyAgICByZXR1cm4gc3FydGYoZGlzdGFuY2VTcXVhcmVkVG9Qb2ludChwKSk7Cit9CisKK0Zs
b2F0U2l6ZSBGbG9hdFJlY3Q6OmRpZmZlcmVuY2VGcm9tQ2VudGVyTGluZVRvUG9pbnQoY29uc3Qg
RmxvYXRQb2ludCYgcG9pbnQpIGNvbnN0Cit7CisgICAgLy8gVGhlIGNlbnRlci1saW5lIGlzIHRo
ZSBuYXR1cmFsIGNlbnRlciBvZiBhIHJlY3RhbmdsZS4gSXQgaGFzIGFuIGVxdWFsIGRpc3RhbmNl
IHRvIGFsbCBzaWRlcyBvZiB0aGUgcmVjdGFuZ2xlLgorICAgIEZsb2F0UG9pbnQgY2VudGVyUG9p
bnQgPSBjZW50ZXIoKTsKKyAgICBmbG9hdCB4ZGlzdGFuY2UgPSBjZW50ZXJQb2ludC54KCkgLSBw
b2ludC54KCk7CisgICAgZmxvYXQgeWRpc3RhbmNlID0gY2VudGVyUG9pbnQueSgpIC0gcG9pbnQu
eSgpOworICAgIGlmICh3aWR0aCgpID4gaGVpZ2h0KCkpCisgICAgICAgIHhkaXN0YW5jZSA9IGRp
c3RhbmNlVG9JbnRlcnZhbChwb2ludC54KCksIHgoKSArIChoZWlnaHQoKSAvIDIuMCksIG1heFgo
KSAtIChoZWlnaHQoKSAvIDIuMCkpOworICAgIGVsc2UKKyAgICAgICAgeWRpc3RhbmNlID0gZGlz
dGFuY2VUb0ludGVydmFsKHBvaW50LnkoKSwgeSgpICsgKHdpZHRoKCkgLyAyLjApLCBtYXhZKCkg
LSAod2lkdGgoKSAvIDIuMCkpOworICAgIHJldHVybiBGbG9hdFNpemUoeGRpc3RhbmNlLCB5ZGlz
dGFuY2UpOworfQorCiBGbG9hdFJlY3QgdW5pb25SZWN0KGNvbnN0IFZlY3RvcjxGbG9hdFJlY3Q+
JiByZWN0cykKIHsKICAgICBGbG9hdFJlY3QgcmVzdWx0OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRmxvYXRSZWN0LmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9GbG9hdFJlY3QuaAppbmRleCA0ZDRlYWRmLi40ZDY0ZGI5IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9GbG9hdFJlY3QuaAorKysgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9GbG9hdFJlY3QuaApAQCAtMTc0LDYgKzE3
NCwxMiBAQCBwdWJsaWM6CiAgICAgdm9pZCBzY2FsZShmbG9hdCBzKSB7IHNjYWxlKHMsIHMpOyB9
CiAgICAgdm9pZCBzY2FsZShmbG9hdCBzeCwgZmxvYXQgc3kpOwogCisgICAgRmxvYXRTaXplIGRp
ZmZlcmVuY2VUb1BvaW50KGNvbnN0IEZsb2F0UG9pbnQmKSBjb25zdDsKKyAgICBGbG9hdFNpemUg
ZGlmZmVyZW5jZUZyb21DZW50ZXJMaW5lVG9Qb2ludChjb25zdCBGbG9hdFBvaW50JikgY29uc3Q7
CisgICAgZmxvYXQgZGlzdGFuY2VTcXVhcmVkVG9Qb2ludChjb25zdCBGbG9hdFBvaW50JiBwKSBj
b25zdCB7IHJldHVybiBkaWZmZXJlbmNlVG9Qb2ludChwKS5kaWFnb25hbExlbmd0aFNxdWFyZWQo
KTsgfQorICAgIGZsb2F0IGRpc3RhbmNlU3F1YXJlZEZyb21DZW50ZXJMaW5lVG9Qb2ludChjb25z
dCBGbG9hdFBvaW50JiBwKSBjb25zdCB7IHJldHVybiBkaWZmZXJlbmNlRnJvbUNlbnRlckxpbmVU
b1BvaW50KHApLmRpYWdvbmFsTGVuZ3RoU3F1YXJlZCgpOyB9CisgICAgZmxvYXQgZGlzdGFuY2VU
b1BvaW50KGNvbnN0IEZsb2F0UG9pbnQmKSBjb25zdDsKKwogICAgIEZsb2F0UmVjdCB0cmFuc3Bv
c2VkUmVjdCgpIGNvbnN0IHsgcmV0dXJuIEZsb2F0UmVjdChtX2xvY2F0aW9uLnRyYW5zcG9zZWRQ
b2ludCgpLCBtX3NpemUudHJhbnNwb3NlZFNpemUoKSk7IH0KIAogICAgIC8vIFJlLWluaXRpYWxp
emVzIHRoaXMgcmVjdGFuZ2xlIHRvIGZpdCB0aGUgc2V0cyBvZiBwYXNzZWQgcG9pbnRzLgpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRmxvYXRTaXplLmggYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9GbG9hdFNpemUuaAppbmRleCAyYjU1NDUw
Li4yODgyZTNlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9G
bG9hdFNpemUuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9GbG9hdFNp
emUuaApAQCAtOTUsNiArOTUsMTEgQEAgcHVibGljOgogICAgICAgICAgICBtX2hlaWdodCA8IG90
aGVyLm1faGVpZ2h0ID8gbV9oZWlnaHQgOiBvdGhlci5tX2hlaWdodCk7CiAgICAgfQogCisgICAg
ZmxvYXQgYXJlYSgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gbV93aWR0aCAqIG1faGVp
Z2h0OworICAgIH0KKwogICAgIGZsb2F0IGRpYWdvbmFsTGVuZ3RoKCkgY29uc3Q7CiAgICAgZmxv
YXQgZGlhZ29uYWxMZW5ndGhTcXVhcmVkKCkgY29uc3QKICAgICB7CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbnRQb2ludC5oIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvSW50UG9pbnQuaAppbmRleCBkZGM0MWI0Li41MTcyYTE0IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbnRQb2ludC5oCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ludFBvaW50LmgKQEAgLTExMSw2ICsx
MTEsMTMgQEAgcHVibGljOgogICAgICAgICAgICAgbV95IDwgb3RoZXIubV95ID8gbV95IDogb3Ro
ZXIubV95KTsKICAgICB9CiAKKyAgICBpbnQgbGVuZ3RoU3F1YXJlZCgpIGNvbnN0CisgICAgewor
ICAgICAgICByZXR1cm4gbV94ICogbV94ICsgbV95ICogbV95OworICAgIH0KKworICAgIGludCBk
aXN0YW5jZVNxdWFyZWRUb1BvaW50KGNvbnN0IEludFBvaW50JikgY29uc3Q7CisKICAgICB2b2lk
IGNsYW1wTmVnYXRpdmVUb1plcm8oKQogICAgIHsKICAgICAgICAgKnRoaXMgPSBleHBhbmRlZFRv
KHplcm8oKSk7CkBAIC0yMjIsNiArMjI5LDExIEBAIGlubGluZSBJbnRTaXplIHRvU2l6ZShjb25z
dCBJbnRQb2ludCYgYSkKICAgICByZXR1cm4gSW50U2l6ZShhLngoKSwgYS55KCkpOwogfQogCitp
bmxpbmUgaW50IEludFBvaW50OjpkaXN0YW5jZVNxdWFyZWRUb1BvaW50KGNvbnN0IEludFBvaW50
JiBwb2ludCkgY29uc3QKK3sKKyAgICByZXR1cm4gKCgqdGhpcykgLSBwb2ludCkuZGlhZ29uYWxM
ZW5ndGhTcXVhcmVkKCk7Cit9CisKICNpZiBQTEFURk9STShRVCkKIGlubGluZSBRRGF0YVN0cmVh
bSYgb3BlcmF0b3I8PChRRGF0YVN0cmVhbSYgc3RyZWFtLCBjb25zdCBJbnRQb2ludCYgcG9pbnQp
CiB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbnRSZWN0
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ludFJlY3QuY3BwCmluZGV4
IDAzYzM1ZTguLmRmYTJmOTEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL0ludFJlY3QuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L0ludFJlY3QuY3BwCkBAIC0xMzIsNiArMTMyLDM1IEBAIHZvaWQgSW50UmVjdDo6c2NhbGUoZmxv
YXQgcykKICAgICBtX3NpemUuc2V0SGVpZ2h0KChpbnQpKGhlaWdodCgpICogcykpOwogfQogCitz
dGF0aWMgaW5saW5lIGludCBkaXN0YW5jZVRvSW50ZXJ2YWwoaW50IHBvcywgaW50IHN0YXJ0LCBp
bnQgZW5kKQoreworICAgIGlmIChwb3MgPCBzdGFydCkKKyAgICAgICAgcmV0dXJuIHN0YXJ0IC0g
cG9zOworICAgIGlmIChwb3MgPiBlbmQpCisgICAgICAgIHJldHVybiBlbmQgLSBwb3M7CisgICAg
cmV0dXJuIDA7Cit9CisKK0ludFNpemUgSW50UmVjdDo6ZGlmZmVyZW5jZVRvUG9pbnQoY29uc3Qg
SW50UG9pbnQmIHBvaW50KSBjb25zdAoreworICAgIGludCB4ZGlzdGFuY2UgPSBkaXN0YW5jZVRv
SW50ZXJ2YWwocG9pbnQueCgpLCB4KCksIG1heFgoKSk7CisgICAgaW50IHlkaXN0YW5jZSA9IGRp
c3RhbmNlVG9JbnRlcnZhbChwb2ludC55KCksIHkoKSwgbWF4WSgpKTsKKyAgICByZXR1cm4gSW50
U2l6ZSh4ZGlzdGFuY2UsIHlkaXN0YW5jZSk7Cit9CisKK0ludFNpemUgSW50UmVjdDo6ZGlmZmVy
ZW5jZUZyb21DZW50ZXJMaW5lVG9Qb2ludChjb25zdCBJbnRQb2ludCYgcG9pbnQpIGNvbnN0Cit7
CisgICAgLy8gVGhlIGNlbnRlci1saW5lIGlzIHRoZSBuYXR1cmFsIGNlbnRlciBvZiBhIHJlY3Rh
bmdsZS4gSXQgaGFzIGFuIGVxdWFsIGRpc3RhbmNlIHRvIGFsbCBzaWRlcyBvZiB0aGUgcmVjdGFu
Z2xlLgorICAgIEludFBvaW50IGNlbnRlclBvaW50ID0gY2VudGVyKCk7CisgICAgaW50IHhkaXN0
YW5jZSA9IGNlbnRlclBvaW50LngoKSAtIHBvaW50LngoKTsKKyAgICBpbnQgeWRpc3RhbmNlID0g
Y2VudGVyUG9pbnQueSgpIC0gcG9pbnQueSgpOworICAgIGlmICh3aWR0aCgpID4gaGVpZ2h0KCkp
CisgICAgICAgIHhkaXN0YW5jZSA9IGRpc3RhbmNlVG9JbnRlcnZhbChwb2ludC54KCksIHgoKSAr
IChoZWlnaHQoKSAvIDIpLCBtYXhYKCkgLSAoaGVpZ2h0KCkgLyAyKSk7CisgICAgZWxzZQorICAg
ICAgICB5ZGlzdGFuY2UgPSBkaXN0YW5jZVRvSW50ZXJ2YWwocG9pbnQueSgpLCB5KCkgKyAod2lk
dGgoKSAvIDIpLCBtYXhZKCkgLSAod2lkdGgoKSAvIDIpKTsKKyAgICByZXR1cm4gSW50U2l6ZSh4
ZGlzdGFuY2UsIHlkaXN0YW5jZSk7Cit9CisKIEludFJlY3QgdW5pb25SZWN0KGNvbnN0IFZlY3Rv
cjxJbnRSZWN0PiYgcmVjdHMpCiB7CiAgICAgSW50UmVjdCByZXN1bHQ7CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbnRSZWN0LmggYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9JbnRSZWN0LmgKaW5kZXggM2VhODIyOS4uYmYzZTE3NCAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW50UmVjdC5oCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ludFJlY3QuaApAQCAtMTcxLDYgKzE3
MSwxMSBAQCBwdWJsaWM6CiAgICAgdm9pZCBpbmZsYXRlKGludCBkKSB7IGluZmxhdGVYKGQpOyBp
bmZsYXRlWShkKTsgfQogICAgIHZvaWQgc2NhbGUoZmxvYXQgcyk7CiAKKyAgICBJbnRTaXplIGRp
ZmZlcmVuY2VUb1BvaW50KGNvbnN0IEludFBvaW50JikgY29uc3Q7CisgICAgSW50U2l6ZSBkaWZm
ZXJlbmNlRnJvbUNlbnRlckxpbmVUb1BvaW50KGNvbnN0IEludFBvaW50JikgY29uc3Q7CisgICAg
aW50IGRpc3RhbmNlU3F1YXJlZFRvUG9pbnQoY29uc3QgSW50UG9pbnQmIHApIGNvbnN0IHsgcmV0
dXJuIGRpZmZlcmVuY2VUb1BvaW50KHApLmRpYWdvbmFsTGVuZ3RoU3F1YXJlZCgpOyB9CisgICAg
aW50IGRpc3RhbmNlU3F1YXJlZEZyb21DZW50ZXJMaW5lVG9Qb2ludChjb25zdCBJbnRQb2ludCYg
cCkgY29uc3QgeyByZXR1cm4gZGlmZmVyZW5jZUZyb21DZW50ZXJMaW5lVG9Qb2ludChwKS5kaWFn
b25hbExlbmd0aFNxdWFyZWQoKTsgfQorCiAgICAgSW50UmVjdCB0cmFuc3Bvc2VkUmVjdCgpIGNv
bnN0IHsgcmV0dXJuIEludFJlY3QobV9sb2NhdGlvbi50cmFuc3Bvc2VkUG9pbnQoKSwgbV9zaXpl
LnRyYW5zcG9zZWRTaXplKCkpOyB9CiAKICNpZiBQTEFURk9STShXWCkKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ludFNpemUuaCBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL0ludFNpemUuaAppbmRleCA2MjVkYjNjLi43ZGJmN2VlIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbnRTaXplLmgKKysrIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW50U2l6ZS5oCkBAIC05OCw2ICs5OCwx
NiBAQCBwdWJsaWM6CiAgICAgICAgICp0aGlzID0gZXhwYW5kZWRUbyhJbnRTaXplKCkpOwogICAg
IH0KIAorICAgIGludCBhcmVhKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBtX3dpZHRo
ICogbV9oZWlnaHQ7CisgICAgfQorCisgICAgaW50IGRpYWdvbmFsTGVuZ3RoU3F1YXJlZCgpIGNv
bnN0CisgICAgeworICAgICAgICByZXR1cm4gbV93aWR0aCAqIG1fd2lkdGggKyBtX2hlaWdodCAq
IG1faGVpZ2h0OworICAgIH0KKwogICAgIEludFNpemUgdHJhbnNwb3NlZFNpemUoKSBjb25zdAog
ICAgIHsKICAgICAgICAgcmV0dXJuIEludFNpemUobV9oZWlnaHQsIG1fd2lkdGgpOwpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvdGVzdGluZy9JbnRlcm5hbHMuY3BwIGIvU291cmNlL1dlYkNv
cmUvdGVzdGluZy9JbnRlcm5hbHMuY3BwCmluZGV4IDg0ZTljZjcuLjc5N2FlYmYgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3Rlc3RpbmcvSW50ZXJuYWxzLmNwcAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS90ZXN0aW5nL0ludGVybmFscy5jcHAKQEAgLTY0LDYgKzY0LDExIEBACiAjaW5jbHVkZSAi
Q29sb3JDaG9vc2VyLmgiCiAjZW5kaWYKIAorI2lmIEVOQUJMRShUT1VDSF9BREpVU1RNRU5UKQor
I2luY2x1ZGUgIkV2ZW50SGFuZGxlci5oIgorI2luY2x1ZGUgIldlYktpdFBvaW50LmgiCisjZW5k
aWYKKwogbmFtZXNwYWNlIFdlYkNvcmUgewogCiBzdGF0aWMgYm9vbCBtYXJrZXJUeXBlc0Zyb20o
Y29uc3QgU3RyaW5nJiBtYXJrZXJUeXBlLCBEb2N1bWVudE1hcmtlcjo6TWFya2VyVHlwZXMmIHJl
c3VsdCkKQEAgLTUxNyw2ICs1MjIsNDYgQEAgdW5zaWduZWQgSW50ZXJuYWxzOjpsZW5ndGhGcm9t
UmFuZ2UoRWxlbWVudCogc2NvcGUsIGNvbnN0IFJhbmdlKiByYW5nZSwgRXhjZXB0aW8KICAgICBy
ZXR1cm4gbGVuZ3RoOwogfQogCisKKyNpZiBFTkFCTEUoVE9VQ0hfQURKVVNUTUVOVCkKK1Bhc3NS
ZWZQdHI8V2ViS2l0UG9pbnQ+IEludGVybmFsczo6dG91Y2hQb3NpdGlvbkFkanVzdGVkVG9CZXN0
Tm9kZUZvckdlc3R1cmVUYXAobG9uZyB4LCBsb25nIHksIGxvbmcgdywgbG9uZyBoLCBEb2N1bWVu
dCogZG9jdW1lbnQsIEV4Y2VwdGlvbkNvZGUmIGVjKQoreworICAgIGlmICghZG9jdW1lbnQgfHwg
IWRvY3VtZW50LT5mcmFtZSgpKSB7CisgICAgICAgIGVjID0gSU5WQUxJRF9BQ0NFU1NfRVJSOwor
ICAgICAgICByZXR1cm4gMDsKKyAgICB9CisKKyAgICBJbnRTaXplIHJhZGl1cyh3IC8gMiwgaCAv
IDIpOworICAgIEludFBvaW50IHBvaW50KHggKyByYWRpdXMud2lkdGgoKSwgeSArIHJhZGl1cy5o
ZWlnaHQoKSk7CisKKyAgICBOb2RlKiB0YXJnZXROb2RlOworICAgIEludFBvaW50IGFkanVzdGVk
UG9pbnQ7CisKKyAgICBkb2N1bWVudC0+ZnJhbWUoKS0+ZXZlbnRIYW5kbGVyKCktPm5vZGVGb3JU
YXBHZXN0dXJlQXRUb3VjaFBvaW50KHBvaW50LCByYWRpdXMsIGFkanVzdGVkUG9pbnQsIHRhcmdl
dE5vZGUpOworCisgICAgcmV0dXJuIFdlYktpdFBvaW50OjpjcmVhdGUoYWRqdXN0ZWRQb2ludC54
KCksIGFkanVzdGVkUG9pbnQueSgpKTsKK30KKworUGFzc1JlZlB0cjxOb2RlPiBJbnRlcm5hbHM6
OnRvdWNoTm9kZUFkanVzdGVkVG9CZXN0Tm9kZUZvckdlc3R1cmVUYXAobG9uZyB4LCBsb25nIHks
IGxvbmcgdywgbG9uZyBoLCBEb2N1bWVudCogZG9jdW1lbnQsIEV4Y2VwdGlvbkNvZGUmIGVjKQor
eworICAgIGlmICghZG9jdW1lbnQgfHwgIWRvY3VtZW50LT5mcmFtZSgpKSB7CisgICAgICAgIGVj
ID0gSU5WQUxJRF9BQ0NFU1NfRVJSOworICAgICAgICByZXR1cm4gMDsKKyAgICB9CisKKyAgICBJ
bnRTaXplIHJhZGl1cyh3IC8gMiwgaCAvIDIpOworICAgIEludFBvaW50IHBvaW50KHggKyByYWRp
dXMud2lkdGgoKSwgeSArIHJhZGl1cy5oZWlnaHQoKSk7CisKKyAgICBOb2RlKiB0YXJnZXROb2Rl
OworICAgIEludFBvaW50IGFkanVzdGVkUG9pbnQ7CisKKyAgICBkb2N1bWVudC0+ZnJhbWUoKS0+
ZXZlbnRIYW5kbGVyKCktPm5vZGVGb3JUYXBHZXN0dXJlQXRUb3VjaFBvaW50KHBvaW50LCByYWRp
dXMsIGFkanVzdGVkUG9pbnQsIHRhcmdldE5vZGUpOworCisgICAgcmV0dXJuIGFkb3B0UmVmKHRh
cmdldE5vZGUpOworfQorI2VuZGlmCisKKwogaW50IEludGVybmFsczo6bGFzdFNwZWxsQ2hlY2tS
ZXF1ZXN0U2VxdWVuY2UoRG9jdW1lbnQqIGRvY3VtZW50LCBFeGNlcHRpb25Db2RlJiBlYykKIHsK
ICAgICBTcGVsbENoZWNrZXIqIGNoZWNrZXIgPSBzcGVsbGNoZWNrZXIoZG9jdW1lbnQpOwpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvdGVzdGluZy9JbnRlcm5hbHMuaCBiL1NvdXJjZS9XZWJD
b3JlL3Rlc3RpbmcvSW50ZXJuYWxzLmgKaW5kZXggZWEyZjhiOC4uNDI4NDBhNiAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvdGVzdGluZy9JbnRlcm5hbHMuaAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS90ZXN0aW5nL0ludGVybmFscy5oCkBAIC00Miw2ICs0Miw3IEBAIGNsYXNzIEludGVybmFsU2V0
dGluZ3M7CiBjbGFzcyBOb2RlOwogY2xhc3MgUmFuZ2U7CiBjbGFzcyBTaGFkb3dSb290OworY2xh
c3MgV2ViS2l0UG9pbnQ7CiAKIHR5cGVkZWYgaW50IEV4Y2VwdGlvbkNvZGU7CiAKQEAgLTEwMyw2
ICsxMDQsMTEgQEAgcHVibGljOgogICAgIHVuc2lnbmVkIGxvY2F0aW9uRnJvbVJhbmdlKEVsZW1l
bnQqIHNjb3BlLCBjb25zdCBSYW5nZSosIEV4Y2VwdGlvbkNvZGUmKTsKICAgICB1bnNpZ25lZCBs
ZW5ndGhGcm9tUmFuZ2UoRWxlbWVudCogc2NvcGUsIGNvbnN0IFJhbmdlKiwgRXhjZXB0aW9uQ29k
ZSYpOwogCisjaWYgRU5BQkxFKFRPVUNIX0FESlVTVE1FTlQpCisgICAgUGFzc1JlZlB0cjxXZWJL
aXRQb2ludD4gdG91Y2hQb3NpdGlvbkFkanVzdGVkVG9CZXN0Tm9kZUZvckdlc3R1cmVUYXAobG9u
ZyB4LCBsb25nIHksIGxvbmcgdywgbG9uZyBoLCBEb2N1bWVudCosIEV4Y2VwdGlvbkNvZGUmKTsK
KyAgICBQYXNzUmVmUHRyPE5vZGU+IHRvdWNoTm9kZUFkanVzdGVkVG9CZXN0Tm9kZUZvckdlc3R1
cmVUYXAobG9uZyB4LCBsb25nIHksIGxvbmcgdywgbG9uZyBoLCBEb2N1bWVudCosIEV4Y2VwdGlv
bkNvZGUmKTsKKyNlbmRpZgorCiAgICAgaW50IGxhc3RTcGVsbENoZWNrUmVxdWVzdFNlcXVlbmNl
KERvY3VtZW50KiwgRXhjZXB0aW9uQ29kZSYpOwogICAgIGludCBsYXN0U3BlbGxDaGVja1Byb2Nl
c3NlZFNlcXVlbmNlKERvY3VtZW50KiwgRXhjZXB0aW9uQ29kZSYpOwogICAgIApkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvdGVzdGluZy9JbnRlcm5hbHMuaWRsIGIvU291cmNlL1dlYkNvcmUv
dGVzdGluZy9JbnRlcm5hbHMuaWRsCmluZGV4IGJhNzZkNDguLmFiMzk0M2QgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3Rlc3RpbmcvSW50ZXJuYWxzLmlkbAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS90ZXN0aW5nL0ludGVybmFscy5pZGwKQEAgLTc4LDYgKzc4LDExIEBAIG1vZHVsZSB3aW5kb3cg
ewogICAgICAgICB1bnNpZ25lZCBsb25nIGxvY2F0aW9uRnJvbVJhbmdlKGluIEVsZW1lbnQgc2Nv
cGUsIGluIFJhbmdlIHJhbmdlKSByYWlzZXMgKERPTUV4Y2VwdGlvbik7CiAgICAgICAgIHVuc2ln
bmVkIGxvbmcgbGVuZ3RoRnJvbVJhbmdlKGluIEVsZW1lbnQgc2NvcGUsIGluIFJhbmdlIHJhbmdl
KSByYWlzZXMgKERPTUV4Y2VwdGlvbik7CiAKKyNpZiBkZWZpbmVkKEVOQUJMRV9UT1VDSF9BREpV
U1RNRU5UKSAmJiBFTkFCTEVfVE9VQ0hfQURKVVNUTUVOVAorICAgICAgICBXZWJLaXRQb2ludCB0
b3VjaFBvc2l0aW9uQWRqdXN0ZWRUb0Jlc3ROb2RlRm9yR2VzdHVyZVRhcChpbiBsb25nIHgsIGlu
IGxvbmcgeSwgaW4gbG9uZyB3LCBpbiBsb25nIGgsIGluIERvY3VtZW50IGRvY3VtZW50KSByYWlz
ZXMgKERPTUV4Y2VwdGlvbik7CisgICAgICAgIE5vZGUgdG91Y2hOb2RlQWRqdXN0ZWRUb0Jlc3RO
b2RlRm9yR2VzdHVyZVRhcChpbiBsb25nIHgsIGluIGxvbmcgeSwgaW4gbG9uZyB3LCBpbiBsb25n
IGgsIGluIERvY3VtZW50IGRvY3VtZW50KSByYWlzZXMgKERPTUV4Y2VwdGlvbik7CisjZW5kaWYK
KwogICAgICAgICBsb25nIGxhc3RTcGVsbENoZWNrUmVxdWVzdFNlcXVlbmNlKGluIERvY3VtZW50
IGRvY3VtZW50KSByYWlzZXMgKERPTUV4Y2VwdGlvbik7CiAgICAgICAgIGxvbmcgbGFzdFNwZWxs
Q2hlY2tQcm9jZXNzZWRTZXF1ZW5jZShpbiBEb2N1bWVudCBkb2N1bWVudCkgcmFpc2VzIChET01F
eGNlcHRpb24pOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cgYi9Tb3Vy
Y2UvV2ViS2l0Mi9DaGFuZ2VMb2cKaW5kZXggYjcxNDA5Ni4uN2RhNjY0MiAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZwpA
QCAtMSwzICsxLDIzIEBACisyMDEyLTAyLTI0ICBBbGxhbiBTYW5kZmVsZCBKZW5zZW4gIDxhbGxh
bi5qZW5zZW5Abm9raWEuY29tPgorCisgICAgICAgIFNlbGVjdCBiZXN0IHRhcmdldCBmb3IgdGFw
IGdlc3R1cmUuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD03ODgwMQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAg
IFNlbmQgcmFkaXVzIHRvIGhhbmRsZVBvdGVudGlhbFNpbmdsZVRhcEV2ZW50IHNvIGl0IGNhbiBk
byB0aGUgc2FtZSBoaXQKKyAgICAgICAgZGV0ZWN0aW9uIHRoZSB0YXAgZ2VzdHVyZSBsYXRlciBk
b2VzLgorCisgICAgICAgICogVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5jcHA6CisgICAgICAgIChX
ZWJLaXQ6OldlYlBhZ2VQcm94eTo6aGFuZGxlUG90ZW50aWFsQWN0aXZhdGlvbik6CisgICAgICAg
ICogVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5oOgorICAgICAgICAqIFVJUHJvY2Vzcy9xdC9RdFdl
YlBhZ2VFdmVudEhhbmRsZXIuY3BwOgorICAgICAgICAoUXRXZWJQYWdlRXZlbnRIYW5kbGVyOjpo
YW5kbGVQb3RlbnRpYWxTaW5nbGVUYXBFdmVudCk6CisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJQ
YWdlL1dlYlBhZ2UuY3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlOjpoaWdobGlnaHRQb3Rl
bnRpYWxBY3RpdmF0aW9uKToKKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5o
OgorICAgICAgICAqIFdlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLm1lc3NhZ2VzLmluOgorCiAy
MDEyLTAyLTI0ICBTZXJnaW8gVmlsbGFyIFNlbmluICA8c3ZpbGxhckBpZ2FsaWEuY29tPgogCiAg
ICAgICAgIFtXSzJdIFtHVEtdIERlc3RydWN0b3Igbm90IGludm9rZWQgaW4gRWRpdG9yQ2xpZW50
RnJhbWVEZXN0cnVjdGlvbk9ic2VydmVyCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVBy
b2Nlc3MvV2ViUGFnZVByb3h5LmNwcCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJQYWdl
UHJveHkuY3BwCmluZGV4IDhlYTNmZTQuLjFmMTllMTcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJL
aXQyL1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJv
Y2Vzcy9XZWJQYWdlUHJveHkuY3BwCkBAIC05ODgsOSArOTg4LDkgQEAgdm9pZCBXZWJQYWdlUHJv
eHk6OmhhbmRsZUdlc3R1cmVFdmVudChjb25zdCBXZWJHZXN0dXJlRXZlbnQmIGV2ZW50KQogCiAj
aWYgRU5BQkxFKFRPVUNIX0VWRU5UUykKICNpZiBQTEFURk9STShRVCkKLXZvaWQgV2ViUGFnZVBy
b3h5OjpoYW5kbGVQb3RlbnRpYWxBY3RpdmF0aW9uKGNvbnN0IEludFBvaW50JiBsYXlvdXRQb2lu
dCkKK3ZvaWQgV2ViUGFnZVByb3h5OjpoYW5kbGVQb3RlbnRpYWxBY3RpdmF0aW9uKGNvbnN0IElu
dFBvaW50JiBsYXlvdXRQb2ludCwgY29uc3QgSW50U2l6ZSYgYXJlYSkKIHsKLSAgICBwcm9jZXNz
KCktPnNlbmQoTWVzc2FnZXM6OldlYlBhZ2U6OkhpZ2hsaWdodFBvdGVudGlhbEFjdGl2YXRpb24o
bGF5b3V0UG9pbnQpLCBtX3BhZ2VJRCk7CisgICAgcHJvY2VzcygpLT5zZW5kKE1lc3NhZ2VzOjpX
ZWJQYWdlOjpIaWdobGlnaHRQb3RlbnRpYWxBY3RpdmF0aW9uKGxheW91dFBvaW50LCBhcmVhKSwg
bV9wYWdlSUQpOwogfQogI2VuZGlmCiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJv
Y2Vzcy9XZWJQYWdlUHJveHkuaCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJQYWdlUHJv
eHkuaAppbmRleCBhZjhkYTFiLi43ODYzNmM3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9V
SVByb2Nlc3MvV2ViUGFnZVByb3h5LmgKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dl
YlBhZ2VQcm94eS5oCkBAIC0zODUsNyArMzg1LDcgQEAgcHVibGljOgogI2lmIEVOQUJMRShUT1VD
SF9FVkVOVFMpCiAgICAgdm9pZCBoYW5kbGVUb3VjaEV2ZW50KGNvbnN0IE5hdGl2ZVdlYlRvdWNo
RXZlbnQmKTsKICNpZiBQTEFURk9STShRVCkKLSAgICB2b2lkIGhhbmRsZVBvdGVudGlhbEFjdGl2
YXRpb24oY29uc3QgV2ViQ29yZTo6SW50UG9pbnQmKTsKKyAgICB2b2lkIGhhbmRsZVBvdGVudGlh
bEFjdGl2YXRpb24oY29uc3QgV2ViQ29yZTo6SW50UG9pbnQmLCBjb25zdCBXZWJDb3JlOjpJbnRT
aXplJik7CiAjZW5kaWYKICNlbmRpZgogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVBy
b2Nlc3MvcXQvUXRXZWJQYWdlRXZlbnRIYW5kbGVyLmNwcCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJv
Y2Vzcy9xdC9RdFdlYlBhZ2VFdmVudEhhbmRsZXIuY3BwCmluZGV4IDdkMDg5OTIuLjAwMDgxYjQg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9xdC9RdFdlYlBhZ2VFdmVudEhh
bmRsZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9xdC9RdFdlYlBhZ2VFdmVu
dEhhbmRsZXIuY3BwCkBAIC0yOTIsNyArMjkyLDcgQEAgYm9vbCBRdFdlYlBhZ2VFdmVudEhhbmRs
ZXI6OmhhbmRsZURyb3BFdmVudChRRHJvcEV2ZW50KiBldikKIHZvaWQgUXRXZWJQYWdlRXZlbnRI
YW5kbGVyOjpoYW5kbGVQb3RlbnRpYWxTaW5nbGVUYXBFdmVudChjb25zdCBRVG91Y2hFdmVudDo6
VG91Y2hQb2ludCYgcG9pbnQpCiB7CiAgICAgUVRyYW5zZm9ybSBmcm9tSXRlbVRyYW5zZm9ybSA9
IG1fd2ViUGFnZS0+dHJhbnNmb3JtRnJvbUl0ZW0oKTsKLSAgICBtX3dlYlBhZ2VQcm94eS0+aGFu
ZGxlUG90ZW50aWFsQWN0aXZhdGlvbihmcm9tSXRlbVRyYW5zZm9ybS5tYXAocG9pbnQucG9zKCkp
LnRvUG9pbnQoKSk7CisgICAgbV93ZWJQYWdlUHJveHktPmhhbmRsZVBvdGVudGlhbEFjdGl2YXRp
b24oZnJvbUl0ZW1UcmFuc2Zvcm0ubWFwKHBvaW50LnBvcygpKS50b1BvaW50KCksIEludFNpemUo
cG9pbnQucmVjdCgpLnNpemUoKS50b1NpemUoKSkpOwogfQogCiB2b2lkIFF0V2ViUGFnZUV2ZW50
SGFuZGxlcjo6aGFuZGxlU2luZ2xlVGFwRXZlbnQoY29uc3QgUVRvdWNoRXZlbnQ6OlRvdWNoUG9p
bnQmIHBvaW50KQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdl
L1dlYlBhZ2UuY3BwIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2Uu
Y3BwCmluZGV4IGRhZDgxMDQuLmYyMjZmOTQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1dl
YlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9j
ZXNzL1dlYlBhZ2UvV2ViUGFnZS5jcHAKQEAgLTE0NDcsMTYgKzE0NDcsMjAgQEAgdm9pZCBXZWJQ
YWdlOjpyZXN0b3JlU2Vzc2lvbkFuZE5hdmlnYXRlVG9DdXJyZW50SXRlbShjb25zdCBTZXNzaW9u
U3RhdGUmIHNlc3Npb24KIAogI2lmIEVOQUJMRShUT1VDSF9FVkVOVFMpCiAjaWYgUExBVEZPUk0o
UVQpCi12b2lkIFdlYlBhZ2U6OmhpZ2hsaWdodFBvdGVudGlhbEFjdGl2YXRpb24oY29uc3QgSW50
UG9pbnQmIHBvaW50KQordm9pZCBXZWJQYWdlOjpoaWdobGlnaHRQb3RlbnRpYWxBY3RpdmF0aW9u
KGNvbnN0IEludFBvaW50JiBwb2ludCwgY29uc3QgSW50U2l6ZSYgYXJlYSkKIHsKICAgICBOb2Rl
KiBhY3RpdmF0aW9uTm9kZSA9IDA7CiAgICAgRnJhbWUqIG1haW5mcmFtZSA9IG1fcGFnZS0+bWFp
bkZyYW1lKCk7CisgICAgSW50UG9pbnQgYWRqdXN0ZWRQb2ludDsKIAogICAgIGlmIChwb2ludCAh
PSBJbnRQb2ludDo6emVybygpKSB7CisjaWYgRU5BQkxFKFRPVUNIX0FESlVTVE1FTlQpCisgICAg
ICAgIG1haW5mcmFtZS0+ZXZlbnRIYW5kbGVyKCktPm5vZGVGb3JUYXBHZXN0dXJlQXRUb3VjaFBv
aW50KHBvaW50LCBJbnRTaXplKGFyZWEud2lkdGgoKSAvIDIsIGFyZWEuaGVpZ2h0KCkgLyAyKSwg
YWRqdXN0ZWRQb2ludCwgYWN0aXZhdGlvbk5vZGUpOworI2Vsc2UKICAgICAgICAgSGl0VGVzdFJl
c3VsdCByZXN1bHQgPSBtYWluZnJhbWUtPmV2ZW50SGFuZGxlcigpLT5oaXRUZXN0UmVzdWx0QXRQ
b2ludChtYWluZnJhbWUtPnZpZXcoKS0+d2luZG93VG9Db250ZW50cyhwb2ludCksIC8qYWxsb3dT
aGFkb3dDb250ZW50Ki8gZmFsc2UsIC8qaWdub3JlQ2xpcHBpbmcqLyB0cnVlKTsKICAgICAgICAg
YWN0aXZhdGlvbk5vZGUgPSByZXN1bHQuaW5uZXJOb2RlKCk7Ci0KLSAgICAgICAgaWYgKCFhY3Rp
dmF0aW9uTm9kZS0+aXNGb2N1c2FibGUoKSkKKyNlbmRpZgorICAgICAgICBpZiAoYWN0aXZhdGlv
bk5vZGUgJiYgIWFjdGl2YXRpb25Ob2RlLT5pc0ZvY3VzYWJsZSgpKQogICAgICAgICAgICAgYWN0
aXZhdGlvbk5vZGUgPSBhY3RpdmF0aW9uTm9kZS0+ZW5jbG9zaW5nTGlua0V2ZW50UGFyZW50T3JT
ZWxmKCk7CiAgICAgfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dl
YlBhZ2UvV2ViUGFnZS5oIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBh
Z2UuaAppbmRleCA3NDViZjRkLi5kNmIxZjczIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9X
ZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5oCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nl
c3MvV2ViUGFnZS9XZWJQYWdlLmgKQEAgLTU2MCw3ICs1NjAsNyBAQCBwcml2YXRlOgogICAgIHZv
aWQgdG91Y2hFdmVudChjb25zdCBXZWJUb3VjaEV2ZW50Jik7CiAgICAgdm9pZCB0b3VjaEV2ZW50
U3luY0ZvclRlc3RpbmcoY29uc3QgV2ViVG91Y2hFdmVudCYsIGJvb2wmIGhhbmRsZWQpOwogI2lm
IFBMQVRGT1JNKFFUKQotICAgIHZvaWQgaGlnaGxpZ2h0UG90ZW50aWFsQWN0aXZhdGlvbihjb25z
dCBXZWJDb3JlOjpJbnRQb2ludCYpOworICAgIHZvaWQgaGlnaGxpZ2h0UG90ZW50aWFsQWN0aXZh
dGlvbihjb25zdCBXZWJDb3JlOjpJbnRQb2ludCYsIGNvbnN0IFdlYkNvcmU6OkludFNpemUmKTsK
ICNlbmRpZgogI2VuZGlmCiAgICAgdm9pZCBjb250ZXh0TWVudUhpZGRlbigpIHsgbV9pc1Nob3dp
bmdDb250ZXh0TWVudSA9IGZhbHNlOyB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQ
cm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5tZXNzYWdlcy5pbiBiL1NvdXJjZS9XZWJLaXQyL1dlYlBy
b2Nlc3MvV2ViUGFnZS9XZWJQYWdlLm1lc3NhZ2VzLmluCmluZGV4IDc4MTNhZGYuLjFjNDY0NTgg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLm1l
c3NhZ2VzLmluCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdl
Lm1lc3NhZ2VzLmluCkBAIC00MSw3ICs0MSw3IEBAIG1lc3NhZ2VzIC0+IFdlYlBhZ2UgewogICAg
IFRvdWNoRXZlbnQoV2ViS2l0OjpXZWJUb3VjaEV2ZW50IGV2ZW50KQogICAgIFRvdWNoRXZlbnRT
eW5jRm9yVGVzdGluZyhXZWJLaXQ6OldlYlRvdWNoRXZlbnQgZXZlbnQpIC0+IChib29sIGhhbmRs
ZWQpCiAjaWYgUExBVEZPUk0oUVQpCi0gICAgSGlnaGxpZ2h0UG90ZW50aWFsQWN0aXZhdGlvbihX
ZWJDb3JlOjpJbnRQb2ludCBwb2ludCkKKyAgICBIaWdobGlnaHRQb3RlbnRpYWxBY3RpdmF0aW9u
KFdlYkNvcmU6OkludFBvaW50IHBvaW50LCBXZWJDb3JlOjpJbnRTaXplIHJhZGl1cykKICNlbmRp
ZgogI2VuZGlmCiAKZGlmZiAtLWdpdCBhL1Rvb2xzL0NoYW5nZUxvZyBiL1Rvb2xzL0NoYW5nZUxv
ZwppbmRleCAzMDM4ZTJlLi45MzE5MTkzIDEwMDY0NAotLS0gYS9Ub29scy9DaGFuZ2VMb2cKKysr
IGIvVG9vbHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTQgQEAKKzIwMTItMDItMjQgIEFsbGFuIFNh
bmRmZWxkIEplbnNlbiAgPGFsbGFuLmplbnNlbkBub2tpYS5jb20+CisKKyAgICAgICAgU2VsZWN0
IGJlc3QgdGFyZ2V0IGZvciB0YXAgZ2VzdHVyZS4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTc4ODAxCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZ
IChPT1BTISkuCisKKyAgICAgICAgQWRkIFRPVUNIX0FESlVTVE1FTlQgdG8gZW5hYmxlZCBmZWF0
dXJlcy4KKworICAgICAgICAqIHFtYWtlL21rc3BlY3MvZmVhdHVyZXMvZmVhdHVyZXMucHJmOgor
CiAyMDEyLTAyLTI0ICBLZW50YXJvIEhhcmEgIDxoYXJha2VuQGNocm9taXVtLm9yZz4KIAogICAg
ICAgICBBZGQgcGVyZm9ybWFuY2UgdGVzdHMgZm9yIERPTSBhdHRyaWJ1dGUgZ2V0dGVycyBhbmQg
c2V0dGVycwpkaWZmIC0tZ2l0IGEvVG9vbHMvcW1ha2UvbWtzcGVjcy9mZWF0dXJlcy9mZWF0dXJl
cy5wcmYgYi9Ub29scy9xbWFrZS9ta3NwZWNzL2ZlYXR1cmVzL2ZlYXR1cmVzLnByZgppbmRleCBl
YTczMWU0Li5jN2FmMzk0IDEwMDY0NAotLS0gYS9Ub29scy9xbWFrZS9ta3NwZWNzL2ZlYXR1cmVz
L2ZlYXR1cmVzLnByZgorKysgYi9Ub29scy9xbWFrZS9ta3NwZWNzL2ZlYXR1cmVzL2ZlYXR1cmVz
LnByZgpAQCAtODYsNiArODYsNyBAQCBoYXZlUXQoNCk6dW5peDohbWFjOiFlbWJlZGRlZCB7CiAh
Y29udGFpbnMoREVGSU5FUywgRU5BQkxFX1ZJREVPX1RSQUNLPS4pOiBERUZJTkVTICs9IEVOQUJM
RV9WSURFT19UUkFDSz0wCiAhY29udGFpbnMoREVGSU5FUywgRU5BQkxFX1RPVUNIX0lDT05fTE9B
RElORz0uKTogREVGSU5FUyArPSBFTkFCTEVfVE9VQ0hfSUNPTl9MT0FESU5HPTAKICFjb250YWlu
cyhERUZJTkVTLCBFTkFCTEVfQU5JTUFUSU9OX0FQST0uKTogREVGSU5FUyArPSBFTkFCTEVfQU5J
TUFUSU9OX0FQST0wCishY29udGFpbnMoREVGSU5FUywgRU5BQkxFX1RPVUNIX0FESlVTVE1FTlQ9
Lik6IERFRklORVMgKz0gRU5BQkxFX1RPVUNIX0FESlVTVE1FTlQ9MQogCiAjIEVuYWJsZWQgaW4g
U291cmNlL0phdmFTY3JpcHRDb3JlL3d0Zi9QbGF0Zm9ybS5oIGlmIG5vdCBzZXQKICMgV2UgaGF2
ZSB0byBkbyB0aGUgc2FtZSB0byBiZSBhYmxlIHRvIGRpc2FibGUgdGhlIGZlYXR1cmUgaW4gYnVp
bGQtd2Via2l0CkBAIC0yNTMsNiArMjU0LDcgQEAgY29udGFpbnMoREVGSU5FUywgRU5BQkxFX1ZJ
REVPX1RSQUNLPTEpOiBGRUFUVVJFX0RFRklORVNfSkFWQVNDUklQVCArPSBFTkFCTEVfVkkKIGNv
bnRhaW5zKERFRklORVMsIEVOQUJMRV9EQVRBX1RSQU5TRkVSX0lURU1TPTEpOiBGRUFUVVJFX0RF
RklORVNfSkFWQVNDUklQVCArPSBFTkFCTEVfREFUQV9UUkFOU0ZFUl9JVEVNUz0xCiBjb250YWlu
cyhERUZJTkVTLCBFTkFCTEVfRlVMTFNDUkVFTl9BUEk9MSk6IEZFQVRVUkVfREVGSU5FU19KQVZB
U0NSSVBUICs9IEVOQUJMRV9GVUxMU0NSRUVOX0FQST0xCiBjb250YWlucyhERUZJTkVTLCBFTkFC
TEVfUkVRVUVTVF9BTklNQVRJT05fRlJBTUU9MSk6IEZFQVRVUkVfREVGSU5FU19KQVZBU0NSSVBU
ICs9IEVOQUJMRV9SRVFVRVNUX0FOSU1BVElPTl9GUkFNRT0xCitjb250YWlucyhERUZJTkVTLCBF
TkFCTEVfVE9VQ0hfQURKVVNUTUVOVD0xKTogRkVBVFVSRV9ERUZJTkVTX0pBVkFTQ1JJUFQgKz0g
RU5BQkxFX1RPVUNIX0FESlVTVE1FTlQ9MQogCiAjIFVzZWQgdG8gY29tcHV0ZSBkZWZhdWx0cyBm
b3IgdGhlIGJ1aWxkLXdlYmtpdCBzY3JpcHQKICMgRG9uJ3QgcGxhY2UgYW55dGhpbmcgYWZ0ZXIg
dGhpcyEK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>128733</attachid>
            <date>2012-02-24 07:16:37 -0800</date>
            <delta_ts>2012-02-28 08:32:19 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-78801-20120224161635.patch</filename>
            <type>text/plain</type>
            <size>65054</size>
            <attacher name="Allan Sandfeld Jensen">allan.jensen</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTA4NzkzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMjI3ZTYyNDhjODZiMDkw
M2NiMTZjNDViN2EwNDdmOGQzZDA1ODU2Ni4uZWRiYWE2OTdjZmMzMGM2ZWNhZTg3NDkyNTQ0ODUx
YThmYjFlOGUwOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSw1ICsxLDg0IEBACiAyMDEyLTAyLTI0ICBBbGxh
biBTYW5kZmVsZCBKZW5zZW4gIDxhbGxhbi5qZW5zZW5Abm9raWEuY29tPgogCisgICAgICAgIFNl
bGVjdCBiZXN0IHRhcmdldCBmb3IgdGFwIGdlc3R1cmUuCisgICAgICAgIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD03ODgwMQorCisgICAgICAgIFJldmlld2VkIGJ5IE5P
Qk9EWSAoT09QUyEpLgorCisgICAgICAgIFRoZSBuZXcgQVBJIGlzIGF2YWlsYWJsZSB0aHJvdWdo
IEV2ZW50SGFuZGxlcjo6bm9kZUZvclRhcEdlc3R1cmVBdFRvdWNoUG9pbnQsIGJ1dAorICAgICAg
ICBpbXBsZW1lbnRhdGlvbiBkZXRhaWxzIGhhdmUgYmVlbiBwbGFjZWQgaW4gcGxhdGZvcm0vSGl0
VGVzdFJlc3VsdE1ldHJpY3MuCisKKyAgICAgICAgVGhlIGRlZmF1bHQgaGl0IGRldGVjdGlvbiBp
cyBwZXJmb3JtZWQgYnkgbWVhc3VyaW5nIHRoZSBkaXN0YW5jZSB0byB0aGUgY2VudGVyCisgICAg
ICAgIGxpbmVzIG9mIHRoZSBhYnNvbHV0ZSByZWN0cyBvZiB0aGUgaGl0IG5vZGVzLiBBYnNvbHV0
ZSByZWN0cyBhcmUgdXNlZCBpbnN0ZWFkCisgICAgICAgIG9mIGJvdW5kaW5nIHJlY3RzIHRvIG1h
a2UgaGl0LWRldGVjdGluZyBhZ2FpbnN0IGxpbmtzIG92ZXIgbGluZSBicmVha3MuIERpc3RhbmNl
CisgICAgICAgIHRvIGNlbnRlciBsaW5lIGlzIHVzZWQgdG8gbWFrZSBpdCBlYXNpZXIgdG8gaGl0
IHNtYWxsIGxpbmtzIG5leHQgdG8gbGFyZ2UgbGlua3MuCisgICAgICAgIEZvciBsaW5lLXJlY3Rz
IHRoZSBkaXN0YW5jZSB0byB0aGUgY2VudGVyLWxpbmUgaXMgYSBiZXR0ZXIgZXhwcmVzc2lvbiBv
ZiB0aGUgZGlzdGFuY2UKKyAgICAgICAgdG8gYSByZWN0YW5nbGVzIGNlbnRlciB0aGFuIHRoZSBk
aXN0YW5jZSB0byB0aGUgY2VudGVyLXBvaW50LgorCisgICAgICAgIFRvIHN1cHBvcnQgdGhlIGRp
c3RhbmNlIGNhbGN1bGF0YXRpb24sIHRoaXMgcGF0Y2ggYWxzbyBpbXBsZW1lbnQgYSBjb25zaXN0
ZW50IHNldCBvZgorICAgICAgICBkaXN0YW5jZSBhbmQgYXJlYSBmdW5jdGlvbnMgZm9yIFJlY3Qs
IFBvaW50IGFuZCBTaXplIGNsYXNzZXMuCisKKyAgICAgICAgVGVzdHM6IHRvdWNoYWRqdXN0bWVu
dC9ldmVudC10cmlnZ2VyZWQtd2lkZ2V0cy5odG1sCisgICAgICAgICAgICAgICB0b3VjaGFkanVz
dG1lbnQvbmVzdGVkLXRvdWNoLmh0bWwKKyAgICAgICAgICAgICAgIHRvdWNoYWRqdXN0bWVudC90
b3VjaC1pbmxpbmVzLmh0bWwKKworICAgICAgICAqIFRhcmdldC5wcmk6CisgICAgICAgICogcGFn
ZS9FdmVudEhhbmRsZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RXZlbnRIYW5kbGVyOjpoYW5k
bGVHZXN0dXJlRXZlbnQpOgorICAgICAgICAoV2ViQ29yZTo6RXZlbnRIYW5kbGVyOjpoYW5kbGVH
ZXN0dXJlVGFwKToKKyAgICAgICAgKFdlYkNvcmU6OkV2ZW50SGFuZGxlcjo6bm9kZUZvclRhcEdl
c3R1cmVBdFRvdWNoUG9pbnQpOgorICAgICAgICAqIHBhZ2UvRXZlbnRIYW5kbGVyLmg6CisgICAg
ICAgICogcGFnZS9Ub3VjaEFkanVzdG1lbnQuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6
OlRvdWNoQWRqdXN0bWVudDo6SGl0VGVzdFF1YWQ6OkhpdFRlc3RRdWFkKToKKyAgICAgICAgKFdl
YkNvcmU6OlRvdWNoQWRqdXN0bWVudDo6SGl0VGVzdFF1YWQ6Om5vZGUpOgorICAgICAgICAoV2Vi
Q29yZTo6VG91Y2hBZGp1c3RtZW50OjpIaXRUZXN0UXVhZDo6cXVhZCk6CisgICAgICAgIChXZWJD
b3JlOjpUb3VjaEFkanVzdG1lbnQ6OkhpdFRlc3RRdWFkOjpib3VuZGluZ0JveCk6CisgICAgICAg
IChXZWJDb3JlOjpUb3VjaEFkanVzdG1lbnQ6Om5vZGVSZXNwb25kc1RvVGFwR2VzdHVyZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpUb3VjaEFkanVzdG1lbnQ6OmFwcGVuZEFic29sdXRlUXVhZHNGb3JO
b2RlVG9IaXRMaXN0KToKKyAgICAgICAgKFdlYkNvcmU6OlRvdWNoQWRqdXN0bWVudDo6Y29tcGls
ZUhpdExpc3QpOgorICAgICAgICAoV2ViQ29yZTo6VG91Y2hBZGp1c3RtZW50OjpkaXN0YW5jZVRv
SGl0VGVzdFF1YWQpOgorICAgICAgICAoV2ViQ29yZTo6VG91Y2hBZGp1c3RtZW50OjppbnRlcnNl
Y3Rpb25XaXRoSGl0VGVzdFF1YWQpOgorICAgICAgICAoV2ViQ29yZTo6VG91Y2hBZGp1c3RtZW50
OjpmaW5kTm9kZVdpdGhMb3dlc3RNZXRyaWMpOgorICAgICAgICAoV2ViQ29yZTo6VG91Y2hBZGp1
c3RtZW50OjpmaW5kTm9kZVdpdGhIaWdoZXN0TWV0cmljKToKKyAgICAgICAgKFdlYkNvcmU6OmZp
bmRCZXN0Q2FuZGlkYXRlRm9yR2VzdHVyZVRhcCk6CisgICAgICAgICogcGFnZS9Ub3VjaEFkanVz
dG1lbnQuaDogQWRkZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvRmxvYXRQb2ludC5o
OgorICAgICAgICAoV2ViQ29yZTo6RmxvYXRQb2ludDo6RmxvYXRQb2ludCk6CisgICAgICAgIChX
ZWJDb3JlOjpGbG9hdFBvaW50OjpkaXN0YW5jZVRvUG9pbnQpOgorICAgICAgICAoV2ViQ29yZTo6
RmxvYXRQb2ludDo6ZGlzdGFuY2VTcXVhcmVkVG9Qb2ludCk6CisgICAgICAgICogcGxhdGZvcm0v
Z3JhcGhpY3MvRmxvYXRRdWFkLmg6CisgICAgICAgIChXZWJDb3JlOjpGbG9hdFF1YWQ6OmNlbnRl
cik6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvRmxvYXRSZWN0LmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OmRpc3RhbmNlVG9JbnRlcnZhbCk6CisgICAgICAgIChXZWJDb3JlOjpGbG9hdFJl
Y3Q6OmRpZmZlcmVuY2VUb1BvaW50KToKKyAgICAgICAgKFdlYkNvcmU6OkZsb2F0UmVjdDo6ZGlz
dGFuY2VUb1BvaW50KToKKyAgICAgICAgKFdlYkNvcmU6OkZsb2F0UmVjdDo6ZGlmZmVyZW5jZUZy
b21DZW50ZXJMaW5lVG9Qb2ludCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvRmxvYXRS
ZWN0Lmg6CisgICAgICAgIChXZWJDb3JlOjpGbG9hdFJlY3Q6OmRpc3RhbmNlU3F1YXJlZFRvUG9p
bnQpOgorICAgICAgICAoV2ViQ29yZTo6RmxvYXRSZWN0OjpkaXN0YW5jZVNxdWFyZWRGcm9tQ2Vu
dGVyTGluZVRvUG9pbnQpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0Zsb2F0U2l6ZS5o
OgorICAgICAgICAoV2ViQ29yZTo6RmxvYXRTaXplOjphcmVhKToKKyAgICAgICAgKiBwbGF0Zm9y
bS9ncmFwaGljcy9JbnRQb2ludC5oOgorICAgICAgICAoV2ViQ29yZTo6SW50UG9pbnQ6Omxlbmd0
aFNxdWFyZWQpOgorICAgICAgICAoV2ViQ29yZTo6SW50UG9pbnQ6OmRpc3RhbmNlU3F1YXJlZFRv
UG9pbnQpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0ludFJlY3QuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6ZGlzdGFuY2VUb0ludGVydmFsKToKKyAgICAgICAgKFdlYkNvcmU6OkludFJl
Y3Q6OmRpZmZlcmVuY2VUb1BvaW50KToKKyAgICAgICAgKFdlYkNvcmU6OkludFJlY3Q6OmRpZmZl
cmVuY2VGcm9tQ2VudGVyTGluZVRvUG9pbnQpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNz
L0ludFJlY3QuaDoKKyAgICAgICAgKFdlYkNvcmU6OkludFJlY3Q6OmRpc3RhbmNlU3F1YXJlZFRv
UG9pbnQpOgorICAgICAgICAoV2ViQ29yZTo6SW50UmVjdDo6ZGlzdGFuY2VTcXVhcmVkRnJvbUNl
bnRlckxpbmVUb1BvaW50KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9JbnRTaXplLmg6
CisgICAgICAgIChXZWJDb3JlOjpJbnRTaXplOjphcmVhKToKKyAgICAgICAgKFdlYkNvcmU6Oklu
dFNpemU6OmRpYWdvbmFsTGVuZ3RoU3F1YXJlZCk6CisgICAgICAgICogdGVzdGluZy9JbnRlcm5h
bHMuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SW50ZXJuYWxzOjp0b3VjaFBvc2l0aW9uQWRqdXN0
ZWRUb0Jlc3ROb2RlRm9yR2VzdHVyZVRhcCk6CisgICAgICAgIChXZWJDb3JlOjpJbnRlcm5hbHM6
OnRvdWNoTm9kZUFkanVzdGVkVG9CZXN0Tm9kZUZvckdlc3R1cmVUYXApOgorICAgICAgICAqIHRl
c3RpbmcvSW50ZXJuYWxzLmg6CisgICAgICAgICogdGVzdGluZy9JbnRlcm5hbHMuaWRsOgorCisy
MDEyLTAyLTI0ICBBbGxhbiBTYW5kZmVsZCBKZW5zZW4gIDxhbGxhbi5qZW5zZW5Abm9raWEuY29t
PgorCiAgICAgICAgIFJlZmFjdG9yIEV2ZW50SGFuZGxlcjo6aGFuZGxlR2VzdHVyZUV2ZW50Lgog
ICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9Nzk0NzYKIApk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nIGIvU291cmNlL1dlYktpdDIvQ2hh
bmdlTG9nCmluZGV4IDg1YTdmNGJkZTQ4YjkxNTNhM2U5ODNhMjAwMjVlYmE2ZmMxMzdjOWMuLjAz
NGI2YTEwZDMwOTZjYmJiMjAyNjVjZTgyODVkNzk4M2M1ZjU4NTMgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJLaXQyL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwyMyBAQAorMjAxMi0wMi0yNCAgQWxsYW4gU2FuZGZlbGQgSmVuc2VuICA8YWxsYW4uamVu
c2VuQG5va2lhLmNvbT4KKworICAgICAgICBTZWxlY3QgYmVzdCB0YXJnZXQgZm9yIHRhcCBnZXN0
dXJlLgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9Nzg4
MDEKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBTZW5k
IHJhZGl1cyB0byBoYW5kbGVQb3RlbnRpYWxTaW5nbGVUYXBFdmVudCBzbyBpdCBjYW4gZG8gdGhl
IHNhbWUgaGl0CisgICAgICAgIGRldGVjdGlvbiB0aGUgdGFwIGdlc3R1cmUgbGF0ZXIgZG9lcy4K
KworICAgICAgICAqIFVJUHJvY2Vzcy9XZWJQYWdlUHJveHkuY3BwOgorICAgICAgICAoV2ViS2l0
OjpXZWJQYWdlUHJveHk6OmhhbmRsZVBvdGVudGlhbEFjdGl2YXRpb24pOgorICAgICAgICAqIFVJ
UHJvY2Vzcy9XZWJQYWdlUHJveHkuaDoKKyAgICAgICAgKiBVSVByb2Nlc3MvcXQvUXRXZWJQYWdl
RXZlbnRIYW5kbGVyLmNwcDoKKyAgICAgICAgKFF0V2ViUGFnZUV2ZW50SGFuZGxlcjo6aGFuZGxl
UG90ZW50aWFsU2luZ2xlVGFwRXZlbnQpOgorICAgICAgICAqIFdlYlByb2Nlc3MvV2ViUGFnZS9X
ZWJQYWdlLmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZTo6aGlnaGxpZ2h0UG90ZW50aWFs
QWN0aXZhdGlvbik6CisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UuaDoKKyAg
ICAgICAgKiBXZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5tZXNzYWdlcy5pbjoKKwogMjAxMi0w
Mi0yNCAgU2ltb24gSGF1c21hbm4gIDxzaW1vbi5oYXVzbWFubkBub2tpYS5jb20+CiAKICAgICAg
ICAgW1F0XSBVc2UgcHJpdmF0ZSBRU0dSZW5kZXJOb2RlIGluIFFRdWlja1dlYlZpZXcgZm9yIGlt
cHJvdmVkIFF0IFNjZW5lIEdyYXBoIGludGVncmF0aW9uCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9UYXJnZXQucHJpIGIvU291cmNlL1dlYkNvcmUvVGFyZ2V0LnByaQppbmRleCBhNjlmMjZh
OTJkNThiN2YxMzhhZmY5ODFjMjUwMGVhMzg4YjBlM2Q2Li44NTRiNzkyNzQwOTJlNGM4MzI3NGIy
OTg0ZjJlOTQ3YzE2ZTk3NmVhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9UYXJnZXQucHJp
CisrKyBiL1NvdXJjZS9XZWJDb3JlL1RhcmdldC5wcmkKQEAgLTEwMjMsNiArMTAyMyw3IEBAIFNP
VVJDRVMgKz0gXAogICAgIHBhZ2UvU2VjdXJpdHlQb2xpY3kuY3BwIFwKICAgICBwYWdlL1NldHRp
bmdzLmNwcCBcCiAgICAgcGFnZS9TcGF0aWFsTmF2aWdhdGlvbi5jcHAgXAorICAgIHBhZ2UvVG91
Y2hBZGp1c3RtZW50LmNwcCBcCiAgICAgcGFnZS9TdXNwZW5kYWJsZVRpbWVyLmNwcCBcCiAgICAg
cGFnZS9Vc2VyQ29udGVudFVSTFBhdHRlcm4uY3BwIFwKICAgICBwYWdlL1dpbmRvd0ZlYXR1cmVz
LmNwcCBcCkBAIC0yMDk3LDYgKzIwOTgsNyBAQCBIRUFERVJTICs9IFwKICAgICBwYWdlL1NwZWVj
aElucHV0TGlzdGVuZXIuaCBcCiAgICAgcGFnZS9TcGVlY2hJbnB1dFJlc3VsdC5oIFwKICAgICBw
YWdlL1NwZWVjaElucHV0UmVzdWx0TGlzdC5oIFwKKyAgICBwYWdlL1RvdWNoQWRqdXN0bWVudC5o
IFwKICAgICBwYWdlL1dlYktpdEFuaW1hdGlvbi5oIFwKICAgICBwYWdlL1dlYktpdEFuaW1hdGlv
bkxpc3QuaCBcCiAgICAgcGFnZS9XaW5kb3dGZWF0dXJlcy5oIFwKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3BhZ2UvRXZlbnRIYW5kbGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRXZl
bnRIYW5kbGVyLmNwcAppbmRleCAzYzEwYjc1NDBmNmRkM2ZmMjMyZDJjMzIzNzRhMTIxZDhjYjdj
ODBmLi4zYTYzNzRhYzc5YWExYTE3YzZlYWQ2MTQwYzk1MGExM2MxODhkYmNjIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9wYWdlL0V2ZW50SGFuZGxlci5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvcGFnZS9FdmVudEhhbmRsZXIuY3BwCkBAIC04OCw2ICs4OCwxMCBAQAogI2luY2x1ZGUgIlBs
YXRmb3JtR2VzdHVyZUV2ZW50LmgiCiAjZW5kaWYKIAorI2lmIEVOQUJMRShUT1VDSF9BREpVU1RN
RU5UKQorI2luY2x1ZGUgIlRvdWNoQWRqdXN0bWVudC5oIgorI2VuZGlmCisKICNpZiBFTkFCTEUo
U1ZHKQogI2luY2x1ZGUgIlNWR0RvY3VtZW50LmgiCiAjaW5jbHVkZSAiU1ZHRWxlbWVudEluc3Rh
bmNlLmgiCkBAIC0yMzYwLDEyICsyMzY0LDIzIEBAIGJvb2wgRXZlbnRIYW5kbGVyOjpoYW5kbGVH
ZXN0dXJlRXZlbnQoY29uc3QgUGxhdGZvcm1HZXN0dXJlRXZlbnQmIGdlc3R1cmVFdmVudCkKIAog
Ym9vbCBFdmVudEhhbmRsZXI6OmhhbmRsZUdlc3R1cmVUYXAoY29uc3QgUGxhdGZvcm1HZXN0dXJl
RXZlbnQmIGdlc3R1cmVFdmVudCkKIHsKKyAgICBMYXlvdXRQb2ludCBhZGp1c3RlZFBvaW50ID0g
Z2VzdHVyZUV2ZW50LnBvc2l0aW9uKCk7CisjaWYgRU5BQkxFKFRPVUNIX0FESlVTVE1FTlQpCisg
ICAgaWYgKCFnZXN0dXJlRXZlbnQuYXJlYSgpLmlzRW1wdHkoKSkgeworICAgICAgICBOb2RlKiB0
YXJnZXROb2RlID0gMDsKKyAgICAgICAgLy8gRm9yIG5vdyB3ZSB1c2UgdGhlIGFkanVzdGVkIHBv
c2l0aW9uIHRvIGVuc3VyZSB0aGUgbGF0ZXIgcmVkdW5kYW50IGhpdC10ZXN0cyBoaXRzIHRoZSBy
aWdodCBub2RlLgorICAgICAgICBub2RlRm9yVGFwR2VzdHVyZUF0VG91Y2hQb2ludChnZXN0dXJl
RXZlbnQucG9zaXRpb24oKSwgSW50U2l6ZShnZXN0dXJlRXZlbnQuYXJlYSgpLndpZHRoKCkgLyAy
LCBnZXN0dXJlRXZlbnQuYXJlYSgpLmhlaWdodCgpIC8gMiksIGFkanVzdGVkUG9pbnQsIHRhcmdl
dE5vZGUpOworICAgICAgICBpZiAoIXRhcmdldE5vZGUpCisgICAgICAgICAgICByZXR1cm4gZmFs
c2U7CisgICAgfQorI2VuZGlmCisKICAgICAvLyBGSVhNRTogUmVmYWN0b3IgdGhpcyBjb2RlIHRv
IG5vdCBoaXQgdGVzdCBtdWx0aXBsZSB0aW1lcyBvbmNlIGhpdCB0ZXN0aW5nCiAgICAgLy8gaGFz
IGJlZW4gY29ycmVjdGVkIGFzIHN1Z2dlc3RlZCBhYm92ZSBpbiBoYW5kbGVHZXN0dXJlRXZlbnQo
KS4KICAgICBib29sIGRlZmF1bHRQcmV2ZW50ZWQgPSBmYWxzZTsKLSAgICBQbGF0Zm9ybU1vdXNl
RXZlbnQgZmFrZU1vdXNlTW92ZShnZXN0dXJlRXZlbnQucG9zaXRpb24oKSwgZ2VzdHVyZUV2ZW50
Lmdsb2JhbFBvc2l0aW9uKCksIE5vQnV0dG9uLCBQbGF0Zm9ybUV2ZW50OjpNb3VzZU1vdmVkLCAv
KiBjbGlja0NvdW50ICovIDEsIGdlc3R1cmVFdmVudC5zaGlmdEtleSgpLCBnZXN0dXJlRXZlbnQu
Y3RybEtleSgpLCBnZXN0dXJlRXZlbnQuYWx0S2V5KCksIGdlc3R1cmVFdmVudC5tZXRhS2V5KCks
IGdlc3R1cmVFdmVudC50aW1lc3RhbXAoKSk7Ci0gICAgUGxhdGZvcm1Nb3VzZUV2ZW50IGZha2VN
b3VzZURvd24oZ2VzdHVyZUV2ZW50LnBvc2l0aW9uKCksIGdlc3R1cmVFdmVudC5nbG9iYWxQb3Np
dGlvbigpLCBMZWZ0QnV0dG9uLCBQbGF0Zm9ybUV2ZW50OjpNb3VzZVByZXNzZWQsIC8qIGNsaWNr
Q291bnQgKi8gMSwgZ2VzdHVyZUV2ZW50LnNoaWZ0S2V5KCksIGdlc3R1cmVFdmVudC5jdHJsS2V5
KCksIGdlc3R1cmVFdmVudC5hbHRLZXkoKSwgZ2VzdHVyZUV2ZW50Lm1ldGFLZXkoKSwgZ2VzdHVy
ZUV2ZW50LnRpbWVzdGFtcCgpKTsKLSAgICBQbGF0Zm9ybU1vdXNlRXZlbnQgZmFrZU1vdXNlVXAo
Z2VzdHVyZUV2ZW50LnBvc2l0aW9uKCksIGdlc3R1cmVFdmVudC5nbG9iYWxQb3NpdGlvbigpLCBM
ZWZ0QnV0dG9uLCBQbGF0Zm9ybUV2ZW50OjpNb3VzZVJlbGVhc2VkLCAvKiBjbGlja0NvdW50ICov
IDEsIGdlc3R1cmVFdmVudC5zaGlmdEtleSgpLCBnZXN0dXJlRXZlbnQuY3RybEtleSgpLCBnZXN0
dXJlRXZlbnQuYWx0S2V5KCksIGdlc3R1cmVFdmVudC5tZXRhS2V5KCksIGdlc3R1cmVFdmVudC50
aW1lc3RhbXAoKSk7CisgICAgUGxhdGZvcm1Nb3VzZUV2ZW50IGZha2VNb3VzZU1vdmUoYWRqdXN0
ZWRQb2ludCwgZ2VzdHVyZUV2ZW50Lmdsb2JhbFBvc2l0aW9uKCksIE5vQnV0dG9uLCBQbGF0Zm9y
bUV2ZW50OjpNb3VzZU1vdmVkLCAvKiBjbGlja0NvdW50ICovIDEsIGdlc3R1cmVFdmVudC5zaGlm
dEtleSgpLCBnZXN0dXJlRXZlbnQuY3RybEtleSgpLCBnZXN0dXJlRXZlbnQuYWx0S2V5KCksIGdl
c3R1cmVFdmVudC5tZXRhS2V5KCksIGdlc3R1cmVFdmVudC50aW1lc3RhbXAoKSk7CisgICAgUGxh
dGZvcm1Nb3VzZUV2ZW50IGZha2VNb3VzZURvd24oYWRqdXN0ZWRQb2ludCwgZ2VzdHVyZUV2ZW50
Lmdsb2JhbFBvc2l0aW9uKCksIExlZnRCdXR0b24sIFBsYXRmb3JtRXZlbnQ6Ok1vdXNlUHJlc3Nl
ZCwgLyogY2xpY2tDb3VudCAqLyAxLCBnZXN0dXJlRXZlbnQuc2hpZnRLZXkoKSwgZ2VzdHVyZUV2
ZW50LmN0cmxLZXkoKSwgZ2VzdHVyZUV2ZW50LmFsdEtleSgpLCBnZXN0dXJlRXZlbnQubWV0YUtl
eSgpLCBnZXN0dXJlRXZlbnQudGltZXN0YW1wKCkpOworICAgIFBsYXRmb3JtTW91c2VFdmVudCBm
YWtlTW91c2VVcChhZGp1c3RlZFBvaW50LCBnZXN0dXJlRXZlbnQuZ2xvYmFsUG9zaXRpb24oKSwg
TGVmdEJ1dHRvbiwgUGxhdGZvcm1FdmVudDo6TW91c2VSZWxlYXNlZCwgLyogY2xpY2tDb3VudCAq
LyAxLCBnZXN0dXJlRXZlbnQuc2hpZnRLZXkoKSwgZ2VzdHVyZUV2ZW50LmN0cmxLZXkoKSwgZ2Vz
dHVyZUV2ZW50LmFsdEtleSgpLCBnZXN0dXJlRXZlbnQubWV0YUtleSgpLCBnZXN0dXJlRXZlbnQu
dGltZXN0YW1wKCkpOwogICAgIG1vdXNlTW92ZWQoZmFrZU1vdXNlTW92ZSk7CiAgICAgZGVmYXVs
dFByZXZlbnRlZCB8PSBoYW5kbGVNb3VzZVByZXNzRXZlbnQoZmFrZU1vdXNlRG93bik7CiAgICAg
ZGVmYXVsdFByZXZlbnRlZCB8PSBoYW5kbGVNb3VzZVJlbGVhc2VFdmVudChmYWtlTW91c2VVcCk7
CkBAIC0yMzg1LDYgKzI0MDAsMTkgQEAgYm9vbCBFdmVudEhhbmRsZXI6OmhhbmRsZUdlc3R1cmVT
Y3JvbGxVcGRhdGUoY29uc3QgUGxhdGZvcm1HZXN0dXJlRXZlbnQmIGdlc3R1cmUKIH0KICNlbmRp
ZgogCisjaWYgRU5BQkxFKFRPVUNIX0FESlVTVE1FTlQpCit2b2lkIEV2ZW50SGFuZGxlcjo6bm9k
ZUZvclRhcEdlc3R1cmVBdFRvdWNoUG9pbnQoY29uc3QgSW50UG9pbnQmIHRvdWNoQ2VudGVyLCBj
b25zdCBJbnRTaXplJiB0b3VjaFJhZGl1cywgSW50UG9pbnQmIHRhcmdldFBvaW50LCBOb2RlKiYg
dGFyZ2V0Tm9kZSkKK3sKKyAgICBIaXRUZXN0UmVxdWVzdDo6SGl0VGVzdFJlcXVlc3RUeXBlIGhp
dFR5cGUgPSBIaXRUZXN0UmVxdWVzdDo6UmVhZE9ubHkgfCBIaXRUZXN0UmVxdWVzdDo6QWN0aXZl
OworICAgIEludFJlY3QgdG91Y2hSZWN0KHRvdWNoQ2VudGVyIC0gdG91Y2hSYWRpdXMsIEludFNp
emUodG91Y2hSYWRpdXMud2lkdGgoKSAqIDIsIHRvdWNoUmFkaXVzLmhlaWdodCgpICogMikpOwor
ICAgIHRhcmdldE5vZGUgPSAwOworCisgICAgSGl0VGVzdFJlc3VsdCByZXN1bHQgPSBoaXRUZXN0
UmVzdWx0QXRQb2ludCh0b3VjaENlbnRlciwgLyphbGxvd1NoYWRvd0NvbnRlbnQqLyBmYWxzZSwg
LyppZ25vcmVDbGlwcGluZyovIGZhbHNlLCBEb250SGl0VGVzdFNjcm9sbGJhcnMsIGhpdFR5cGUs
IHRvdWNoUmFkaXVzKTsKKworICAgIGZpbmRCZXN0Q2FuZGlkYXRlRm9yR2VzdHVyZVRhcCh0YXJn
ZXROb2RlLCB0YXJnZXRQb2ludCwgdG91Y2hDZW50ZXIsIHRvdWNoUmVjdCwgcmVzdWx0KTsKK30K
KyNlbmRpZgorCiAjaWYgRU5BQkxFKENPTlRFWFRfTUVOVVMpCiBib29sIEV2ZW50SGFuZGxlcjo6
c2VuZENvbnRleHRNZW51RXZlbnQoY29uc3QgUGxhdGZvcm1Nb3VzZUV2ZW50JiBldmVudCkKIHsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRXZlbnRIYW5kbGVyLmggYi9Tb3VyY2Uv
V2ViQ29yZS9wYWdlL0V2ZW50SGFuZGxlci5oCmluZGV4IGE1ZmYzMDM0ZmUyZDkyZDk4ZjZmMTg5
ODk3OGUwNzRiZDk0ZTE3ZGMuLjgyZmVlYjlkNTc0ODJiNjg1ZDRmZTUxY2IyYzU3NjI1MDRjMzBl
ZWEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRXZlbnRIYW5kbGVyLmgKKysrIGIv
U291cmNlL1dlYkNvcmUvcGFnZS9FdmVudEhhbmRsZXIuaApAQCAtMTY2LDYgKzE2NiwxMCBAQCBw
dWJsaWM6CiAgICAgYm9vbCBoYW5kbGVHZXN0dXJlU2Nyb2xsVXBkYXRlKGNvbnN0IFBsYXRmb3Jt
R2VzdHVyZUV2ZW50Jik7CiAjZW5kaWYKIAorI2lmIEVOQUJMRShUT1VDSF9BREpVU1RNRU5UKQor
ICAgIHZvaWQgbm9kZUZvclRhcEdlc3R1cmVBdFRvdWNoUG9pbnQoY29uc3QgSW50UG9pbnQmIHRv
dWNoQ2VudGVyLCBjb25zdCBJbnRTaXplJiB0b3VjaFJhZGl1cywgSW50UG9pbnQmIHRhcmdldFBv
aW50LCBOb2RlKiYgdGFyZ2V0Tm9kZSk7CisjZW5kaWYKKwogI2lmIEVOQUJMRShDT05URVhUX01F
TlVTKQogICAgIGJvb2wgc2VuZENvbnRleHRNZW51RXZlbnQoY29uc3QgUGxhdGZvcm1Nb3VzZUV2
ZW50Jik7CiAgICAgYm9vbCBzZW5kQ29udGV4dE1lbnVFdmVudEZvcktleSgpOwpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcGFnZS9Ub3VjaEFkanVzdG1lbnQuY3BwIGIvU291cmNlL1dlYkNv
cmUvcGFnZS9Ub3VjaEFkanVzdG1lbnQuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjA2NjY3ZWNjNzBhZTNkY2I3
N2Y3ZTZmOWNmNGNkZDFhNjc1YWNmZmMKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9wYWdlL1RvdWNoQWRqdXN0bWVudC5jcHAKQEAgLTAsMCArMSwyMzMgQEAKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTIgTm9raWEgQ29ycG9yYXRpb24gYW5kL29yIGl0cyBzdWJzaWRpYXJ5KC1p
ZXMpCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0
cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05V
IExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBG
cmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNl
bnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMg
bGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVs
LAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQg
d2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vu
c2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBj
b3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3
aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0
ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4g
U3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICov
CisKKyNpbmNsdWRlICJjb25maWcuaCIKKworI2luY2x1ZGUgIlRvdWNoQWRqdXN0bWVudC5oIgor
CisjaW5jbHVkZSAiQ29udGFpbmVyTm9kZS5oIgorI2luY2x1ZGUgIkZsb2F0UG9pbnQuaCIKKyNp
bmNsdWRlICJGbG9hdFF1YWQuaCIKKyNpbmNsdWRlICJIaXRUZXN0UmVzdWx0LmgiCisjaW5jbHVk
ZSAiSW50UG9pbnQuaCIKKyNpbmNsdWRlICJJbnRTaXplLmgiCisjaW5jbHVkZSAiTm9kZS5oIgor
I2luY2x1ZGUgIlJlbmRlck9iamVjdC5oIgorI2luY2x1ZGUgIlJlbmRlclN0eWxlLmgiCisKK25h
bWVzcGFjZSBXZWJDb3JlIHsKKworbmFtZXNwYWNlIFRvdWNoQWRqdXN0bWVudCB7CisKK2NsYXNz
IEhpdFRlc3RRdWFkIHsKK3B1YmxpYzoKKyAgICBIaXRUZXN0UXVhZChOb2RlKiBub2RlLCBjb25z
dCBGbG9hdFF1YWQmIHF1YWQpIDogbV9ub2RlKG5vZGUpLCBtX3F1YWQocXVhZCkgeyB9CisKKyAg
ICBOb2RlKiBub2RlKCkgY29uc3QgeyByZXR1cm4gbV9ub2RlOyB9CisgICAgRmxvYXRRdWFkIHF1
YWQoKSBjb25zdCB7IHJldHVybiBtX3F1YWQ7IH0KKyAgICBMYXlvdXRSZWN0IGJvdW5kaW5nQm94
KCkgY29uc3QgeyByZXR1cm4gbV9xdWFkLmVuY2xvc2luZ0JvdW5kaW5nQm94KCk7IH0KKworcHJp
dmF0ZToKKyAgICBOb2RlKiBtX25vZGU7CisgICAgRmxvYXRRdWFkIG1fcXVhZDsKK307CisKK3R5
cGVkZWYgVmVjdG9yPEhpdFRlc3RRdWFkPiBIaXRMaXN0OwordHlwZWRlZiBib29sICgqTm9kZUZp
bHRlcikoTm9kZSopOwordHlwZWRlZiBmbG9hdCAoKk1ldHJpYykoY29uc3QgTGF5b3V0UG9pbnQm
LCBjb25zdCBMYXlvdXRSZWN0JiwgY29uc3QgSGl0VGVzdFF1YWQmKTsKKworLy8gVGFrZXMgbm9u
LWNvbnN0IE5vZGUqIGJlY2F1c2UgaXNDb250ZW50RWRpdGFibGUgaXMgYSBub24tY29uc3QgZnVu
Y3Rpb24uCitib29sIG5vZGVSZXNwb25kc1RvVGFwR2VzdHVyZShOb2RlKiBub2RlKQoreworICAg
IGlmIChub2RlLT5pc0xpbmsoKQorICAgICAgICB8fCBub2RlLT5pc0NvbnRlbnRFZGl0YWJsZSgp
CisgICAgICAgIHx8IG5vZGUtPmlzTW91c2VGb2N1c2FibGUoKSkKKyAgICAgICAgLy8gRklYTUU6
IEltcGxlbWVudCBoYXNEZWZhdWx0RXZlbnRIYW5kbGVyIGFuZCB1c2UgdGhhdCBpbnN0ZWFkIG9m
IGFsbCBvZiB0aGVzZSBhYm92ZSBjYWxscz8KKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgaWYg
KG5vZGUtPmhhc0V2ZW50TGlzdGVuZXJzKCkKKyAgICAgICAgJiYgKG5vZGUtPmhhc0V2ZW50TGlz
dGVuZXJzKGV2ZW50TmFtZXMoKS5jbGlja0V2ZW50KQorICAgICAgICAgICAgfHwgbm9kZS0+aGFz
RXZlbnRMaXN0ZW5lcnMoZXZlbnROYW1lcygpLkRPTUFjdGl2YXRlRXZlbnQpCisgICAgICAgICAg
ICB8fCBub2RlLT5oYXNFdmVudExpc3RlbmVycyhldmVudE5hbWVzKCkubW91c2Vkb3duRXZlbnQp
CisgICAgICAgICAgICB8fCBub2RlLT5oYXNFdmVudExpc3RlbmVycyhldmVudE5hbWVzKCkubW91
c2V1cEV2ZW50KQorICAgICAgICAgICAgfHwgbm9kZS0+aGFzRXZlbnRMaXN0ZW5lcnMoZXZlbnRO
YW1lcygpLm1vdXNlbW92ZUV2ZW50KQorICAgICAgICAgICAgLy8gQ2hlY2tpbmcgZm9yIGZvY3Vz
IGV2ZW50cyBpcyBub3QgbmVjZXNzYXJ5IHNpbmNlIHRoZXkgY2FuIG9ubHkgZmlyZSBvbgorICAg
ICAgICAgICAgLy8gZm9jdXNhYmxlIGVsZW1lbnRzIHdoaWNoIGhhdmUgYWxyZWFkeSBiZWVuIGNh
cHR1cmVkIGFib3ZlLgorICAgICAgICApKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICBpZiAo
bm9kZS0+cmVuZGVyU3R5bGUoKSkgeworICAgICAgICAvLyBBY2NlcHQgbm9kZXMgdGhhdCBoYXMg
YSBDU1MgZWZmZWN0IHdoZW4gdG91Y2hlZC4KKyAgICAgICAgaWYgKG5vZGUtPnJlbmRlclN0eWxl
KCktPmFmZmVjdGVkQnlBY3RpdmVSdWxlcygpIHx8IG5vZGUtPnJlbmRlclN0eWxlKCktPmFmZmVj
dGVkQnlIb3ZlclJ1bGVzKCkpCisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAg
cmV0dXJuIGZhbHNlOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgYXBwZW5kQWJzb2x1dGVRdWFk
c0Zvck5vZGVUb0hpdExpc3QoTm9kZSogbm9kZSwgSGl0TGlzdCYgaGl0bGlzdCkKK3sKKyAgICAv
LyBTaW5jZSB0aGUgbm9kZSBpcyBhIHJlc3VsdCBvZiBhIGhpdCB0ZXN0LCB3ZSBhcmUgYWxyZWFk
eSBlbnN1cmVkIGl0IGhhcyBhIHJlbmRlcmVyLgorICAgIEFTU0VSVChub2RlLT5yZW5kZXJlcigp
KTsKKworICAgIFZlY3RvcjxGbG9hdFF1YWQ+IHF1YWRzOworICAgIG5vZGUtPnJlbmRlcmVyKCkt
PmFic29sdXRlUXVhZHMocXVhZHMpOworCisgICAgVmVjdG9yPEZsb2F0UXVhZD46OmNvbnN0X2l0
ZXJhdG9yIGl0ID0gcXVhZHMuYmVnaW4oKTsKKyAgICBjb25zdCBWZWN0b3I8RmxvYXRRdWFkPjo6
Y29uc3RfaXRlcmF0b3IgZW5kID0gcXVhZHMuZW5kKCk7CisgICAgZm9yICg7IGl0ICE9IGVuZDsg
KytpdCkKKyAgICAgICAgaGl0bGlzdC5hcHBlbmQoSGl0VGVzdFF1YWQobm9kZSwgKml0KSk7Cit9
CisKKy8vIENvbXBpbGUgYSBsaXN0IG9mIGFic29sdXRlIHJlY3RzIHJlcHJlc2VuZGluZyBub2Rl
cyByZXNwb25kaW5nIHRoZSB0YXAgZ2VzdHVyZS4KK3ZvaWQgY29tcGlsZUhpdExpc3QoY29uc3Qg
SGl0VGVzdFJlc3VsdCYgcmVzdWx0LCBIaXRMaXN0JiBoaXRsaXN0LCBOb2RlRmlsdGVyIG5vZGVG
aWx0ZXIpCit7CisgICAgY29uc3QgSGl0VGVzdFJlc3VsdDo6Tm9kZVNldCYgaW50ZXJzZWN0ZWRO
b2RlcyA9IHJlc3VsdC5yZWN0QmFzZWRUZXN0UmVzdWx0KCk7CisKKyAgICAvLyBGaW5kIGNhbmRp
ZGF0ZXMgcmVzcG9uZGluZyB0byB0YXAgZ2VzdHVyZSBldmVudHMgaW4gTyhuKSB0aW1lLgorICAg
IEhhc2hNYXA8Tm9kZSosIE5vZGUqPiByZXNwb25kZXJNYXA7CisgICAgSGFzaFNldDxOb2RlKj4g
YW5jZXN0b3JzVG9SZXNwb25kZXJzU2V0OworICAgIFZlY3RvcjxOb2RlKj4gY2FuZGlkYXRlczsK
KworICAgIEhpdFRlc3RSZXN1bHQ6Ok5vZGVTZXQ6OmNvbnN0X2l0ZXJhdG9yIGl0MSA9IGludGVy
c2VjdGVkTm9kZXMuYmVnaW4oKTsKKyAgICBjb25zdCBIaXRUZXN0UmVzdWx0OjpOb2RlU2V0Ojpj
b25zdF9pdGVyYXRvciBlbmQxID0gaW50ZXJzZWN0ZWROb2Rlcy5lbmQoKTsKKyAgICBmb3IgKDsg
aXQxICE9IGVuZDE7ICsraXQxKSB7CisgICAgICAgIE5vZGUqIG5vZGUgPSBpdDEtPmdldCgpOwor
ICAgICAgICBpZiAocmVzcG9uZGVyTWFwLmNvbnRhaW5zKG5vZGUpKQorICAgICAgICAgICAgLy8g
U2tpcCBub2RlcyB0aGF0IGFyZSBkaXJlY3QgYW5jZXN0b3JzIG9mIG90aGVyIGNhbmRpZGF0ZXMu
IFRoZXkgd291bGQgaGl0LXRlc3QgYWdhaW5zdCB0aGUgc2FtZSBhYnNvbHV0ZSBxdWFkcy4KKyAg
ICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICBWZWN0b3I8Tm9kZSo+IGFuY2VzdG9yczsKKyAg
ICAgICAgTm9kZSogcmVzcG9uZGluZ05vZGUgPSAwOworICAgICAgICBmb3IgKDsgbm9kZTsgbm9k
ZSA9IG5vZGUtPnBhcmVudE9ySG9zdE5vZGUoKSkgeworICAgICAgICAgICAgLy8gQ2hlY2sgaWYg
d2UgYWxyZWFkeSBoYXZlIGEgcmVzdWx0IGZvciBhIGNvbW1vbiBhbmNlc3RvciBmcm9tIGFub3Ro
ZXIgY2FuZGlkYXRlLgorICAgICAgICAgICAgcmVzcG9uZGluZ05vZGUgPSByZXNwb25kZXJNYXAu
Z2V0KG5vZGUpOworICAgICAgICAgICAgaWYgKHJlc3BvbmRpbmdOb2RlKQorICAgICAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICAgICAgYW5jZXN0b3JzLmFwcGVuZChub2RlKTsKKyAgICAgICAg
ICAgIC8vIENoZWNrIGlmIHRoZSBub2RlIGZpbHRlciBhcHBsaWVzLCB3aGljaCB3b3VsZCBtZWFu
IHdlIGhhdmUgZm91bmQgYSByZXNwb25kaW5nIG5vZGUuCisgICAgICAgICAgICBpZiAobm9kZUZp
bHRlcihub2RlKSkgeworICAgICAgICAgICAgICAgIHJlc3BvbmRpbmdOb2RlID0gbm9kZTsKKyAg
ICAgICAgICAgICAgICAvLyBOb3cgdGhhdCB3ZSBoYXZlIHRoZSByZXNwb25kZXIsIHNldCB0aGUg
cmVzcG9uZGVyIGZvciBhbGwgdGhlIG5vZGVzIHNlZW4gc28gZmFyLgorICAgICAgICAgICAgICAg
IGZvciAodW5zaWduZWQgaW50IGkgPSAwOyBpIDwgYW5jZXN0b3JzLnNpemUoKTsgaSsrKQorICAg
ICAgICAgICAgICAgICAgICByZXNwb25kZXJNYXAuYWRkKGFuY2VzdG9yc1tpXSwgbm9kZSk7Cisg
ICAgICAgICAgICAgICAgLy8gVGhlIGNvbnRpbnVlIHRoZSBpdGVyYXRpb24gdG8gY29sbGVjdCB0
aGUgYW5jZXN0b3JzIG9mIHRoZSByZXNwb25kZXIuCisgICAgICAgICAgICAgICAgZm9yIChub2Rl
ID0gbm9kZS0+cGFyZW50T3JIb3N0Tm9kZSgpOyBub2RlOyBub2RlID0gbm9kZS0+cGFyZW50T3JI
b3N0Tm9kZSgpKSB7CisgICAgICAgICAgICAgICAgICAgIHBhaXI8SGFzaFNldDxOb2RlKj46Oml0
ZXJhdG9yLCBib29sPiB0bXAgPSBhbmNlc3RvcnNUb1Jlc3BvbmRlcnNTZXQuYWRkKG5vZGUpOwor
ICAgICAgICAgICAgICAgICAgICBpZiAoIXRtcC5zZWNvbmQpCisgICAgICAgICAgICAgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgaWYgKHJlc3BvbmRpbmdOb2RlKQorICAg
ICAgICAgICAgY2FuZGlkYXRlcy5hcHBlbmQoaXQxLT5nZXQoKSk7CisgICAgICAgIGVsc2Ugewor
ICAgICAgICAgICAgLy8gSW5zZXJ0IHRoZSBub2RlcyB3aXRoIG1pc3NpbmcgcmVzcG9uZGVycyBp
bnRvIHRoZSByZXNwb25kZXItbWFwIGZvciBmYXN0IHJlamVjdGlvbiBvZiBsYXRlciBjYW5kaWRh
dGVzLgorICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgPCBhbmNlc3RvcnMu
c2l6ZSgpOyBpKyspCisgICAgICAgICAgICAgICAgcmVzcG9uZGVyTWFwLmFkZChhbmNlc3RvcnNb
aV0sIDApOworICAgICAgICB9CisgICAgfQorCisgICAgLy8gV2UgY29tcGlsZSB0aGUgbGlzdCBv
ZiBjb21wb25lbnQgYWJzb2x1dGUgcXVhZHMgaW5zdGVhZCBvZiB1c2luZyB0aGUgYm91bmRpbmcg
cmVjdAorICAgIC8vIHRvIGJlIGFibGUgdG8gcGVyZm9ybSBiZXR0ZXIgaGl0LXRlc3Rpbmcgb24g
aW5saW5lIGxpbmtzIG9uIGxpbmUtYnJlYWtzLgorICAgIFZlY3RvcjxOb2RlKj46OmNvbnN0X2l0
ZXJhdG9yIGl0MiA9IGNhbmRpZGF0ZXMuYmVnaW4oKTsKKyAgICBjb25zdCBWZWN0b3I8Tm9kZSo+
Ojpjb25zdF9pdGVyYXRvciBlbmQyID0gY2FuZGlkYXRlcy5lbmQoKTsKKyAgICBmb3IgKDsgaXQy
ICE9IGVuZDI7ICsraXQyKSB7CisgICAgICAgIC8vIFNraXAgbm9kZXMgd2hvcyByZXNwb25kZXJz
IGFyZSBhbmNlc3RvcnMgb2Ygb3RoZXIgcmVzcG9uZGVycy4gVGhpcyBnaXZlcyBwcmVmZXJlbmNl
IHRvIHRoZSBpbm5lci1tb3N0IGV2ZW50LWhhbmRsZXJzLgorICAgICAgICAvLyBTbyB0aGF0IGEg
bGluayBpcyBhbHdheXMgcHJlZmVycmVkIGV2ZW4gd2hlbiBjb250YWluZWQgaW4gYW4gZWxlbWVu
dCB0aGF0IG1vbml0b3JzIGFsbCBjbGljay1ldmVudHMuCisgICAgICAgIE5vZGUqIHJlc3BvbmRp
bmdOb2RlID0gcmVzcG9uZGVyTWFwLmdldCgqaXQyKTsKKyAgICAgICAgQVNTRVJUKHJlc3BvbmRp
bmdOb2RlKTsKKyAgICAgICAgaWYgKGFuY2VzdG9yc1RvUmVzcG9uZGVyc1NldC5jb250YWlucyhy
ZXNwb25kaW5nTm9kZSkpCisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgYXBwZW5kQWJz
b2x1dGVRdWFkc0Zvck5vZGVUb0hpdExpc3QoKml0MiwgaGl0bGlzdCk7CisgICAgfQorfQorCisv
LyBSZXR1cm5zIHRoZSBkaXN0YW5jZSBzcXVhcmVkIHRvIHRoZSBib3VuZGluZyBib3ggY2VudGVy
bGluZS4KK2Zsb2F0IGRpc3RhbmNlVG9IaXRUZXN0UXVhZChjb25zdCBMYXlvdXRQb2ludCYgdG91
Y2hIb3RzcG90LCBjb25zdCBMYXlvdXRSZWN0JiwgY29uc3QgSGl0VGVzdFF1YWQmIGhpdFRlc3RR
dWFkKQoreworICAgIC8vIFVzaW5nIHRoZSBib3VuZGluZyBib3ggbWVhbnMgdGhlIGRpc3RhbmNl
IHRvIGNlbnRlcmxpbmUgaXMgbGVzcyBtZWFuaW5nZnVsIGZvciB0cmFuc2Zvcm1lZCByZWN0YW5n
bGVzLAorICAgIC8vIGJ1dCBjYWxjdWxhdGluZyB0aGUgZGlzdGFuY2UgdG8gcXVhZHMgY2FuIGJl
IHZlcnkgZXhwZW5zaXZlLCBhbmQgd2UgZG8gbm90IHdhbnQgdG8gY2FsY3VsY2F0ZQorICAgIC8v
IHF1YWQgYmFzZWQgZGlzdGFuY2VzIGZvciB1bnRyYW5zZm9ybWVkIHJlY3RhbmdsZXMuCisgICAg
SW50UmVjdCByZWN0ID0gaGl0VGVzdFF1YWQuYm91bmRpbmdCb3goKTsKKworICAgIHJldHVybiBy
ZWN0LmRpc3RhbmNlU3F1YXJlZEZyb21DZW50ZXJMaW5lVG9Qb2ludCh0b3VjaEhvdHNwb3QpOwor
fQorCisvLyBSZXR1cm5zIHRoZSBhcmVhIG9mIHRoZSBpbnRlcnNlY3Rpb24uCitmbG9hdCBpbnRl
cnNlY3Rpb25XaXRoSGl0VGVzdFF1YWQoY29uc3QgTGF5b3V0UG9pbnQmLCBjb25zdCBMYXlvdXRS
ZWN0JiB0b3VjaFJlY3QsIGNvbnN0IEhpdFRlc3RRdWFkJiBoaXRUZXN0UXVhZCkKK3sKKyAgICBJ
bnRSZWN0IHJlY3QgPSBoaXRUZXN0UXVhZC5ib3VuZGluZ0JveCgpOworICAgIEludFJlY3QgaW50
ZXJzZWN0aW9uID0gcmVjdDsKKyAgICByZWN0LmludGVyc2VjdCh0b3VjaFJlY3QpOworCisgICAg
cmV0dXJuIGludGVyc2VjdGlvbi5zaXplKCkuYXJlYSgpOworfQorCitib29sIGZpbmROb2RlV2l0
aExvd2VzdE1ldHJpYyhOb2RlKiYgdGFyZ2V0Tm9kZSwgTGF5b3V0UG9pbnQmIHRhcmdldFBvaW50
LCBjb25zdCBMYXlvdXRQb2ludCYgdG91Y2hIb3RzcG90LCBjb25zdCBMYXlvdXRSZWN0JiB0b3Vj
aEFyZWEsIEhpdExpc3QmIGhpdGxpc3QsIE1ldHJpYyBtZXRyaWMpCit7CisgICAgdGFyZ2V0Tm9k
ZSA9IDA7CisKKyAgICBmbG9hdCBiZXN0TWV0cmljID0gSU5GSU5JVFk7CisgICAgSGl0TGlzdDo6
Y29uc3RfaXRlcmF0b3IgaXQgPSBoaXRsaXN0LmJlZ2luKCk7CisgICAgSGl0TGlzdDo6Y29uc3Rf
aXRlcmF0b3IgZW5kID0gaGl0bGlzdC5lbmQoKTsKKyAgICBmb3IgKDsgaXQgIT0gZW5kOyArK2l0
KSB7CisgICAgICAgIE5vZGUqIGhpdE5vZGUgPSBpdC0+bm9kZSgpOworICAgICAgICBmbG9hdCBo
aXRNZXRyaWMgPSBtZXRyaWModG91Y2hIb3RzcG90LCB0b3VjaEFyZWEsICppdCk7CisgICAgICAg
IGlmIChoaXRNZXRyaWMgPCBiZXN0TWV0cmljKSB7CisgICAgICAgICAgICB0YXJnZXRQb2ludCA9
IHJvdW5kZWRMYXlvdXRQb2ludChpdC0+cXVhZCgpLmNlbnRlcigpKTsKKyAgICAgICAgICAgIHRh
cmdldE5vZGUgPSBoaXROb2RlOworICAgICAgICAgICAgYmVzdE1ldHJpYyA9IGhpdE1ldHJpYzsK
KyAgICAgICAgfQorICAgIH0KKworICAgIHJldHVybiAodGFyZ2V0Tm9kZSk7Cit9CisKK2Jvb2wg
ZmluZE5vZGVXaXRoSGlnaGVzdE1ldHJpYyhOb2RlKiYgdGFyZ2V0Tm9kZSwgTGF5b3V0UG9pbnQm
IHRhcmdldFBvaW50LCBjb25zdCBMYXlvdXRQb2ludCYgdG91Y2hIb3RzcG90LCBjb25zdCBMYXlv
dXRSZWN0JiB0b3VjaEFyZWEsIEhpdExpc3QmIGhpdGxpc3QsIE1ldHJpYyBtZXRyaWMpCit7Cisg
ICAgdGFyZ2V0Tm9kZSA9IDA7CisKKyAgICBmbG9hdCBiZXN0TWV0cmljID0gMDsKKyAgICBIaXRM
aXN0Ojpjb25zdF9pdGVyYXRvciBpdCA9IGhpdGxpc3QuYmVnaW4oKTsKKyAgICBIaXRMaXN0Ojpj
b25zdF9pdGVyYXRvciBlbmQgPSBoaXRsaXN0LmVuZCgpOworICAgIGZvciAoOyBpdCAhPSBlbmQ7
ICsraXQpIHsKKyAgICAgICAgTm9kZSogaGl0Tm9kZSA9IGl0LT5ub2RlKCk7CisgICAgICAgIGZs
b2F0IGhpdE1ldHJpYyA9IG1ldHJpYyh0b3VjaEhvdHNwb3QsIHRvdWNoQXJlYSwgKml0KTsKKyAg
ICAgICAgaWYgKGhpdE1ldHJpYyA+IGJlc3RNZXRyaWMpIHsKKyAgICAgICAgICAgIHRhcmdldFBv
aW50ID0gcm91bmRlZExheW91dFBvaW50KGl0LT5xdWFkKCkuY2VudGVyKCkpOworICAgICAgICAg
ICAgdGFyZ2V0Tm9kZSA9IGhpdE5vZGU7CisgICAgICAgICAgICBiZXN0TWV0cmljID0gaGl0TWV0
cmljOworICAgICAgICB9CisgICAgfQorCisgICAgcmV0dXJuICh0YXJnZXROb2RlKTsKK30KKwor
fSAvLyBuYW1lc3BhY2UgVG91Y2hBZGp1c3RtZW50CisKK3ZvaWQgZmluZEJlc3RDYW5kaWRhdGVG
b3JHZXN0dXJlVGFwKE5vZGUqJiB0YXJnZXROb2RlLCBMYXlvdXRQb2ludCYgdGFyZ2V0UG9pbnQs
IGNvbnN0IExheW91dFBvaW50JiB0b3VjaEhvdHNwb3QsIGNvbnN0IExheW91dFJlY3QmIHRvdWNo
QXJlYSwgY29uc3QgSGl0VGVzdFJlc3VsdCYgaGl0VGVzdFJlc3VsdCkKK3sKKyAgICBUb3VjaEFk
anVzdG1lbnQ6OkhpdExpc3QgaGl0bGlzdDsKKyAgICBUb3VjaEFkanVzdG1lbnQ6OmNvbXBpbGVI
aXRMaXN0KGhpdFRlc3RSZXN1bHQsIGhpdGxpc3QsIFRvdWNoQWRqdXN0bWVudDo6bm9kZVJlc3Bv
bmRzVG9UYXBHZXN0dXJlKTsKKyAgICBpZiAoIVRvdWNoQWRqdXN0bWVudDo6ZmluZE5vZGVXaXRo
TG93ZXN0TWV0cmljKHRhcmdldE5vZGUsIHRhcmdldFBvaW50LCB0b3VjaEhvdHNwb3QsIHRvdWNo
QXJlYSwgaGl0bGlzdCwgVG91Y2hBZGp1c3RtZW50OjpkaXN0YW5jZVRvSGl0VGVzdFF1YWQpKSB7
CisgICAgICAgIC8vIERlZmF1bHQgdG8ganVzdCByZXR1cm5pbmcgaW5uZXJOb25TaGFyZWROb2Rl
LgorICAgICAgICB0YXJnZXRQb2ludCA9IHRvdWNoSG90c3BvdDsKKyAgICAgICAgdGFyZ2V0Tm9k
ZSA9IGhpdFRlc3RSZXN1bHQuaW5uZXJOb25TaGFyZWROb2RlKCk7CisgICAgfQorfQorCit9IC8v
IG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL1RvdWNo
QWRqdXN0bWVudC5oIGIvU291cmNlL1dlYkNvcmUvcGFnZS9Ub3VjaEFkanVzdG1lbnQuaApuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwLi41N2Q5NDYzNmEyYzhmMjhiNGExYmZkNDRiMjgyOWZhMjA3ZWM0MGM5Ci0tLSAvZGV2
L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGFnZS9Ub3VjaEFkanVzdG1lbnQuaApAQCAtMCww
ICsxLDM2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIE5va2lhIENvcnBvcmF0aW9uIGFu
ZC9vciBpdHMgc3Vic2lkaWFyeSgtaWVzKQorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNv
ZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRl
ciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNl
IGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAq
IHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIg
dmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUg
dGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0
aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3Ig
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFy
eSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNo
b3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJs
aWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZ
SU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRp
b24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1B
IDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaWZuZGVmIFRvdWNoQWRqdXN0bWVudF9oCisjZGVm
aW5lIFRvdWNoQWRqdXN0bWVudF9oCisKKyNpbmNsdWRlICJGbG9hdFF1YWQuaCIKKyNpbmNsdWRl
ICJIaXRUZXN0UmVzdWx0LmgiCisjaW5jbHVkZSAiTGF5b3V0VHlwZXMuaCIKKyNpbmNsdWRlICJO
b2RlLmgiCisjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisK
K3ZvaWQgZmluZEJlc3RDYW5kaWRhdGVGb3JHZXN0dXJlVGFwKE5vZGUqJiB0YXJnZXROb2RlLCBM
YXlvdXRQb2ludCYgdGFyZ2V0UG9pbnQsIGNvbnN0IExheW91dFBvaW50JiB0b3VjaEhvdHNwb3Qs
IGNvbnN0IExheW91dFJlY3QmIHRvdWNoQXJlYSwgY29uc3QgSGl0VGVzdFJlc3VsdCYpOworLy8g
RklYTUU6IEltcGxlbWVudCB0aGUgc2ltaWxhciBmdW5jdGlvbnMgZm9yIG90aGVyIGdlc3R1cmVz
IGhlcmUgYXMgd2VsbC4KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0Zsb2F0UG9pbnQuaCBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0Zsb2F0UG9pbnQuaAppbmRleCAwOTQzMDRk
ODM4NWY0MzVjY2U4NGJiM2RkMGVkMWM5ODIxZWJlOWE0Li5jODNjZmZiMDRkMTljMzE1ZmNjM2Mx
ZDI3MWNkYjlhMWQ4YzJhZDQ2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9GbG9hdFBvaW50LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvRmxvYXRQb2ludC5oCkBAIC02OSw2ICs2OSw3IEBAIHB1YmxpYzoKICAgICBGbG9hdFBvaW50
KGZsb2F0IHgsIGZsb2F0IHkpIDogbV94KHgpLCBtX3koeSkgeyB9CiAgICAgRmxvYXRQb2ludChj
b25zdCBJbnRQb2ludCYpOwogICAgIEZsb2F0UG9pbnQoY29uc3QgRnJhY3Rpb25hbExheW91dFBv
aW50Jik7CisgICAgZXhwbGljaXQgRmxvYXRQb2ludChGbG9hdFNpemUgc2l6ZSkgOiBtX3goc2l6
ZS53aWR0aCgpKSwgbV95KHNpemUuaGVpZ2h0KCkpIHsgfQogCiAgICAgc3RhdGljIEZsb2F0UG9p
bnQgemVybygpIHsgcmV0dXJuIEZsb2F0UG9pbnQoKTsgfQogCkBAIC0xMzAsNiArMTMxLDkgQEAg
cHVibGljOgogICAgICAgICByZXR1cm4gbV94ICogbV94ICsgbV95ICogbV95OwogICAgIH0KIAor
ICAgIGZsb2F0IGRpc3RhbmNlVG9Qb2ludChjb25zdCBGbG9hdFBvaW50JikgY29uc3Q7CisgICAg
ZmxvYXQgZGlzdGFuY2VTcXVhcmVkVG9Qb2ludChjb25zdCBGbG9hdFBvaW50JikgY29uc3Q7CisK
ICAgICBGbG9hdFBvaW50IGV4cGFuZGVkVG8oY29uc3QgRmxvYXRQb2ludCYgb3RoZXIpIGNvbnN0
CiAgICAgewogICAgICAgICByZXR1cm4gRmxvYXRQb2ludChzdGQ6Om1heChtX3gsIG90aGVyLm1f
eCksIHN0ZDo6bWF4KG1feSwgb3RoZXIubV95KSk7CkBAIC0yMjgsNiArMjMyLDE3IEBAIGlubGlu
ZSBmbG9hdCBvcGVyYXRvciooY29uc3QgRmxvYXRQb2ludCYgYSwgY29uc3QgRmxvYXRQb2ludCYg
YikKICAgICByZXR1cm4gYS5kb3QoYik7CiB9CiAKK2lubGluZSBmbG9hdCBGbG9hdFBvaW50Ojpk
aXN0YW5jZVRvUG9pbnQoY29uc3QgRmxvYXRQb2ludCYgcG9pbnQpIGNvbnN0Cit7CisgICAgcmV0
dXJuICgqdGhpcyAtIHBvaW50KS5kaWFnb25hbExlbmd0aCgpOworfQorCitpbmxpbmUgZmxvYXQg
RmxvYXRQb2ludDo6ZGlzdGFuY2VTcXVhcmVkVG9Qb2ludChjb25zdCBGbG9hdFBvaW50JiBwb2lu
dCkgY29uc3QKK3sKKyAgICByZXR1cm4gKCp0aGlzIC0gcG9pbnQpLmRpYWdvbmFsTGVuZ3RoU3F1
YXJlZCgpOworfQorCisKIGlubGluZSBJbnRQb2ludCByb3VuZGVkSW50UG9pbnQoY29uc3QgRmxv
YXRQb2ludCYgcCkKIHsKICAgICByZXR1cm4gSW50UG9pbnQoc3RhdGljX2Nhc3Q8aW50Pihyb3Vu
ZGYocC54KCkpKSwgc3RhdGljX2Nhc3Q8aW50Pihyb3VuZGYocC55KCkpKSk7CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9GbG9hdFF1YWQuaCBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0Zsb2F0UXVhZC5oCmluZGV4IGI1ZTJhOGNhNGQ1NTQy
MGI0ZTUzZTQ5YzJkMzZhNjkyNDAxYWIwOWQuLmJmYjc5NGRlZjg1ODZmYmM2YjFjMjUxMGNmMTIz
MmIxMGI5ODA4NGMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L0Zsb2F0UXVhZC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0Zsb2F0
UXVhZC5oCkBAIC04OCw2ICs4OCwxMyBAQCBwdWJsaWM6CiAgICAgLy8gZnJvbSB0cmFuc2Zvcm1l
ZCByZWN0cy4KICAgICBib29sIGNvbnRhaW5zUXVhZChjb25zdCBGbG9hdFF1YWQmKSBjb25zdDsK
IAorICAgIC8vIFRoZSBjZW50ZXIgb2YgdGhlIHF1YWQuIElmIHRoZSBxdWFkIGlzIHRoZSByZXN1
bHQgb2YgYSBhZmZpbmUtdHJhbnNmb3JtZWQgcmVjdGFuZ2xlIHRoaXMgaXMgdGhlIHNhbWUgYXMg
dGhlIG9yaWdpbmFsIGNlbnRlciB0cmFuc2Zvcm1lZC4KKyAgICBGbG9hdFBvaW50IGNlbnRlcigp
IGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gRmxvYXRQb2ludCgobV9wMS54KCkgKyBtX3Ay
LngoKSArIG1fcDMueCgpICsgbV9wNC54KCkpIC8gNC4wLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAobV9wMS55KCkgKyBtX3AyLnkoKSArIG1fcDMueSgpICsgbV9wNC55KCkpIC8gNC4wKTsK
KyAgICB9CisKICAgICBGbG9hdFJlY3QgYm91bmRpbmdCb3goKSBjb25zdDsKICAgICBJbnRSZWN0
IGVuY2xvc2luZ0JvdW5kaW5nQm94KCkgY29uc3QKICAgICB7CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9GbG9hdFJlY3QuY3BwIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvRmxvYXRSZWN0LmNwcAppbmRleCA3Mzc0NzNjM2Y1MzcwMzAyNTdm
MTVkYTgzZDM0OGNkZDlhNTI4NDcyLi45MDljMTg1ZDYzNzIyOTA2MzI4M2MyNjM5ZDM4NGU0ZGM0
YmRiNTBiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9GbG9h
dFJlY3QuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0Zsb2F0UmVj
dC5jcHAKQEAgLTE0Miw2ICsxNDIsNDAgQEAgdm9pZCBGbG9hdFJlY3Q6OnNjYWxlKGZsb2F0IHN4
LCBmbG9hdCBzeSkKICAgICBtX3NpemUuc2V0SGVpZ2h0KGhlaWdodCgpICogc3kpOwogfQogCitz
dGF0aWMgaW5saW5lIGZsb2F0IGRpc3RhbmNlVG9JbnRlcnZhbChmbG9hdCBwb3MsIGZsb2F0IHN0
YXJ0LCBmbG9hdCBlbmQpCit7CisgICAgaWYgKHBvcyA8IHN0YXJ0KQorICAgICAgICByZXR1cm4g
c3RhcnQgLSBwb3M7CisgICAgaWYgKHBvcyA+IGVuZCkKKyAgICAgICAgcmV0dXJuIGVuZCAtIHBv
czsKKyAgICByZXR1cm4gMDsKK30KKworRmxvYXRTaXplIEZsb2F0UmVjdDo6ZGlmZmVyZW5jZVRv
UG9pbnQoY29uc3QgRmxvYXRQb2ludCYgcG9pbnQpIGNvbnN0Cit7CisgICAgZmxvYXQgeGRpc3Rh
bmNlID0gZGlzdGFuY2VUb0ludGVydmFsKHBvaW50LngoKSwgeCgpLCBtYXhYKCkpOworICAgIGZs
b2F0IHlkaXN0YW5jZSA9IGRpc3RhbmNlVG9JbnRlcnZhbChwb2ludC55KCksIHkoKSwgbWF4WSgp
KTsKKyAgICByZXR1cm4gRmxvYXRTaXplKHhkaXN0YW5jZSwgeWRpc3RhbmNlKTsKK30KKworZmxv
YXQgRmxvYXRSZWN0OjpkaXN0YW5jZVRvUG9pbnQoY29uc3QgRmxvYXRQb2ludCYgcCkgY29uc3QK
K3sKKyAgICByZXR1cm4gc3FydGYoZGlzdGFuY2VTcXVhcmVkVG9Qb2ludChwKSk7Cit9CisKK0Zs
b2F0U2l6ZSBGbG9hdFJlY3Q6OmRpZmZlcmVuY2VGcm9tQ2VudGVyTGluZVRvUG9pbnQoY29uc3Qg
RmxvYXRQb2ludCYgcG9pbnQpIGNvbnN0Cit7CisgICAgLy8gVGhlIGNlbnRlci1saW5lIGlzIHRo
ZSBuYXR1cmFsIGNlbnRlciBvZiBhIHJlY3RhbmdsZS4gSXQgaGFzIGFuIGVxdWFsIGRpc3RhbmNl
IHRvIGFsbCBzaWRlcyBvZiB0aGUgcmVjdGFuZ2xlLgorICAgIEZsb2F0UG9pbnQgY2VudGVyUG9p
bnQgPSBjZW50ZXIoKTsKKyAgICBmbG9hdCB4ZGlzdGFuY2UgPSBjZW50ZXJQb2ludC54KCkgLSBw
b2ludC54KCk7CisgICAgZmxvYXQgeWRpc3RhbmNlID0gY2VudGVyUG9pbnQueSgpIC0gcG9pbnQu
eSgpOworICAgIGlmICh3aWR0aCgpID4gaGVpZ2h0KCkpCisgICAgICAgIHhkaXN0YW5jZSA9IGRp
c3RhbmNlVG9JbnRlcnZhbChwb2ludC54KCksIHgoKSArIChoZWlnaHQoKSAvIDIuMCksIG1heFgo
KSAtIChoZWlnaHQoKSAvIDIuMCkpOworICAgIGVsc2UKKyAgICAgICAgeWRpc3RhbmNlID0gZGlz
dGFuY2VUb0ludGVydmFsKHBvaW50LnkoKSwgeSgpICsgKHdpZHRoKCkgLyAyLjApLCBtYXhZKCkg
LSAod2lkdGgoKSAvIDIuMCkpOworICAgIHJldHVybiBGbG9hdFNpemUoeGRpc3RhbmNlLCB5ZGlz
dGFuY2UpOworfQorCiBGbG9hdFJlY3QgdW5pb25SZWN0KGNvbnN0IFZlY3RvcjxGbG9hdFJlY3Q+
JiByZWN0cykKIHsKICAgICBGbG9hdFJlY3QgcmVzdWx0OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRmxvYXRSZWN0LmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9GbG9hdFJlY3QuaAppbmRleCA0ZDRlYWRmZDAzMzg3ODNkOTQ5NThiMjI5
NjkwN2ZlMDJmMzQ3NDJjLi40ZDY0ZGI5OGY4ZWY2OTAxNTYyZWM2NDFhMjkyZjg2MTdlODMzNjFj
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9GbG9hdFJlY3Qu
aAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9GbG9hdFJlY3QuaApAQCAt
MTc0LDYgKzE3NCwxMiBAQCBwdWJsaWM6CiAgICAgdm9pZCBzY2FsZShmbG9hdCBzKSB7IHNjYWxl
KHMsIHMpOyB9CiAgICAgdm9pZCBzY2FsZShmbG9hdCBzeCwgZmxvYXQgc3kpOwogCisgICAgRmxv
YXRTaXplIGRpZmZlcmVuY2VUb1BvaW50KGNvbnN0IEZsb2F0UG9pbnQmKSBjb25zdDsKKyAgICBG
bG9hdFNpemUgZGlmZmVyZW5jZUZyb21DZW50ZXJMaW5lVG9Qb2ludChjb25zdCBGbG9hdFBvaW50
JikgY29uc3Q7CisgICAgZmxvYXQgZGlzdGFuY2VTcXVhcmVkVG9Qb2ludChjb25zdCBGbG9hdFBv
aW50JiBwKSBjb25zdCB7IHJldHVybiBkaWZmZXJlbmNlVG9Qb2ludChwKS5kaWFnb25hbExlbmd0
aFNxdWFyZWQoKTsgfQorICAgIGZsb2F0IGRpc3RhbmNlU3F1YXJlZEZyb21DZW50ZXJMaW5lVG9Q
b2ludChjb25zdCBGbG9hdFBvaW50JiBwKSBjb25zdCB7IHJldHVybiBkaWZmZXJlbmNlRnJvbUNl
bnRlckxpbmVUb1BvaW50KHApLmRpYWdvbmFsTGVuZ3RoU3F1YXJlZCgpOyB9CisgICAgZmxvYXQg
ZGlzdGFuY2VUb1BvaW50KGNvbnN0IEZsb2F0UG9pbnQmKSBjb25zdDsKKwogICAgIEZsb2F0UmVj
dCB0cmFuc3Bvc2VkUmVjdCgpIGNvbnN0IHsgcmV0dXJuIEZsb2F0UmVjdChtX2xvY2F0aW9uLnRy
YW5zcG9zZWRQb2ludCgpLCBtX3NpemUudHJhbnNwb3NlZFNpemUoKSk7IH0KIAogICAgIC8vIFJl
LWluaXRpYWxpemVzIHRoaXMgcmVjdGFuZ2xlIHRvIGZpdCB0aGUgc2V0cyBvZiBwYXNzZWQgcG9p
bnRzLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRmxvYXRT
aXplLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9GbG9hdFNpemUuaAppbmRl
eCAyYjU1NDUwMzAzZGM5OTM4YWFkOWE4OWZiZmY1YzY4MTA1ZTU5ZTRmLi4yODgyZTNlN2UxMjgy
YTc4OTUxNzZmMzcxNjI1ODZhNjMwNjczNGE0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9GbG9hdFNpemUuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9GbG9hdFNpemUuaApAQCAtOTUsNiArOTUsMTEgQEAgcHVibGljOgogICAgICAg
ICAgICBtX2hlaWdodCA8IG90aGVyLm1faGVpZ2h0ID8gbV9oZWlnaHQgOiBvdGhlci5tX2hlaWdo
dCk7CiAgICAgfQogCisgICAgZmxvYXQgYXJlYSgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1
cm4gbV93aWR0aCAqIG1faGVpZ2h0OworICAgIH0KKwogICAgIGZsb2F0IGRpYWdvbmFsTGVuZ3Ro
KCkgY29uc3Q7CiAgICAgZmxvYXQgZGlhZ29uYWxMZW5ndGhTcXVhcmVkKCkgY29uc3QKICAgICB7
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbnRQb2ludC5o
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW50UG9pbnQuaAppbmRleCBkZGM0
MWI0MjNkMjE1ZmUwYTE4NTQyODI0NDEwZTI0OTc2NzVkOWFhLi41MTcyYTE0YTY5NDM2NmI5MmQ1
OTRhNzFlYTQwNTZiYzg2Y2RhOGMzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9JbnRQb2ludC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL0ludFBvaW50LmgKQEAgLTExMSw2ICsxMTEsMTMgQEAgcHVibGljOgogICAgICAgICAgICAg
bV95IDwgb3RoZXIubV95ID8gbV95IDogb3RoZXIubV95KTsKICAgICB9CiAKKyAgICBpbnQgbGVu
Z3RoU3F1YXJlZCgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gbV94ICogbV94ICsgbV95
ICogbV95OworICAgIH0KKworICAgIGludCBkaXN0YW5jZVNxdWFyZWRUb1BvaW50KGNvbnN0IElu
dFBvaW50JikgY29uc3Q7CisKICAgICB2b2lkIGNsYW1wTmVnYXRpdmVUb1plcm8oKQogICAgIHsK
ICAgICAgICAgKnRoaXMgPSBleHBhbmRlZFRvKHplcm8oKSk7CkBAIC0yMjIsNiArMjI5LDExIEBA
IGlubGluZSBJbnRTaXplIHRvU2l6ZShjb25zdCBJbnRQb2ludCYgYSkKICAgICByZXR1cm4gSW50
U2l6ZShhLngoKSwgYS55KCkpOwogfQogCitpbmxpbmUgaW50IEludFBvaW50OjpkaXN0YW5jZVNx
dWFyZWRUb1BvaW50KGNvbnN0IEludFBvaW50JiBwb2ludCkgY29uc3QKK3sKKyAgICByZXR1cm4g
KCgqdGhpcykgLSBwb2ludCkuZGlhZ29uYWxMZW5ndGhTcXVhcmVkKCk7Cit9CisKICNpZiBQTEFU
Rk9STShRVCkKIGlubGluZSBRRGF0YVN0cmVhbSYgb3BlcmF0b3I8PChRRGF0YVN0cmVhbSYgc3Ry
ZWFtLCBjb25zdCBJbnRQb2ludCYgcG9pbnQpCiB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9JbnRSZWN0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL0ludFJlY3QuY3BwCmluZGV4IDAzYzM1ZTgzYmY0MjcwZjE5YTZkM2M2MGQxNjY3
MjNkZmRiOTJiMTguLmRmYTJmOTFmMThhNTk3M2VjOGZhOTNhZDVjNThmZDk2NWJkZDU0YjggMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ludFJlY3QuY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ludFJlY3QuY3BwCkBAIC0xMzIs
NiArMTMyLDM1IEBAIHZvaWQgSW50UmVjdDo6c2NhbGUoZmxvYXQgcykKICAgICBtX3NpemUuc2V0
SGVpZ2h0KChpbnQpKGhlaWdodCgpICogcykpOwogfQogCitzdGF0aWMgaW5saW5lIGludCBkaXN0
YW5jZVRvSW50ZXJ2YWwoaW50IHBvcywgaW50IHN0YXJ0LCBpbnQgZW5kKQoreworICAgIGlmIChw
b3MgPCBzdGFydCkKKyAgICAgICAgcmV0dXJuIHN0YXJ0IC0gcG9zOworICAgIGlmIChwb3MgPiBl
bmQpCisgICAgICAgIHJldHVybiBlbmQgLSBwb3M7CisgICAgcmV0dXJuIDA7Cit9CisKK0ludFNp
emUgSW50UmVjdDo6ZGlmZmVyZW5jZVRvUG9pbnQoY29uc3QgSW50UG9pbnQmIHBvaW50KSBjb25z
dAoreworICAgIGludCB4ZGlzdGFuY2UgPSBkaXN0YW5jZVRvSW50ZXJ2YWwocG9pbnQueCgpLCB4
KCksIG1heFgoKSk7CisgICAgaW50IHlkaXN0YW5jZSA9IGRpc3RhbmNlVG9JbnRlcnZhbChwb2lu
dC55KCksIHkoKSwgbWF4WSgpKTsKKyAgICByZXR1cm4gSW50U2l6ZSh4ZGlzdGFuY2UsIHlkaXN0
YW5jZSk7Cit9CisKK0ludFNpemUgSW50UmVjdDo6ZGlmZmVyZW5jZUZyb21DZW50ZXJMaW5lVG9Q
b2ludChjb25zdCBJbnRQb2ludCYgcG9pbnQpIGNvbnN0Cit7CisgICAgLy8gVGhlIGNlbnRlci1s
aW5lIGlzIHRoZSBuYXR1cmFsIGNlbnRlciBvZiBhIHJlY3RhbmdsZS4gSXQgaGFzIGFuIGVxdWFs
IGRpc3RhbmNlIHRvIGFsbCBzaWRlcyBvZiB0aGUgcmVjdGFuZ2xlLgorICAgIEludFBvaW50IGNl
bnRlclBvaW50ID0gY2VudGVyKCk7CisgICAgaW50IHhkaXN0YW5jZSA9IGNlbnRlclBvaW50Lngo
KSAtIHBvaW50LngoKTsKKyAgICBpbnQgeWRpc3RhbmNlID0gY2VudGVyUG9pbnQueSgpIC0gcG9p
bnQueSgpOworICAgIGlmICh3aWR0aCgpID4gaGVpZ2h0KCkpCisgICAgICAgIHhkaXN0YW5jZSA9
IGRpc3RhbmNlVG9JbnRlcnZhbChwb2ludC54KCksIHgoKSArIChoZWlnaHQoKSAvIDIpLCBtYXhY
KCkgLSAoaGVpZ2h0KCkgLyAyKSk7CisgICAgZWxzZQorICAgICAgICB5ZGlzdGFuY2UgPSBkaXN0
YW5jZVRvSW50ZXJ2YWwocG9pbnQueSgpLCB5KCkgKyAod2lkdGgoKSAvIDIpLCBtYXhZKCkgLSAo
d2lkdGgoKSAvIDIpKTsKKyAgICByZXR1cm4gSW50U2l6ZSh4ZGlzdGFuY2UsIHlkaXN0YW5jZSk7
Cit9CisKIEludFJlY3QgdW5pb25SZWN0KGNvbnN0IFZlY3RvcjxJbnRSZWN0PiYgcmVjdHMpCiB7
CiAgICAgSW50UmVjdCByZXN1bHQ7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9JbnRSZWN0LmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9J
bnRSZWN0LmgKaW5kZXggM2VhODIyOWY0NmE4YjE0NGIxNzZlZDViMGQxNDAxODdjMWU3Njk0Yi4u
YmYzZTE3NGIyNzcyNThjYjI3MzZlMTBmOGQ1MmM3MGJmMmVhOGI3ZSAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW50UmVjdC5oCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ludFJlY3QuaApAQCAtMTcxLDYgKzE3MSwxMSBAQCBwdWJs
aWM6CiAgICAgdm9pZCBpbmZsYXRlKGludCBkKSB7IGluZmxhdGVYKGQpOyBpbmZsYXRlWShkKTsg
fQogICAgIHZvaWQgc2NhbGUoZmxvYXQgcyk7CiAKKyAgICBJbnRTaXplIGRpZmZlcmVuY2VUb1Bv
aW50KGNvbnN0IEludFBvaW50JikgY29uc3Q7CisgICAgSW50U2l6ZSBkaWZmZXJlbmNlRnJvbUNl
bnRlckxpbmVUb1BvaW50KGNvbnN0IEludFBvaW50JikgY29uc3Q7CisgICAgaW50IGRpc3RhbmNl
U3F1YXJlZFRvUG9pbnQoY29uc3QgSW50UG9pbnQmIHApIGNvbnN0IHsgcmV0dXJuIGRpZmZlcmVu
Y2VUb1BvaW50KHApLmRpYWdvbmFsTGVuZ3RoU3F1YXJlZCgpOyB9CisgICAgaW50IGRpc3RhbmNl
U3F1YXJlZEZyb21DZW50ZXJMaW5lVG9Qb2ludChjb25zdCBJbnRQb2ludCYgcCkgY29uc3QgeyBy
ZXR1cm4gZGlmZmVyZW5jZUZyb21DZW50ZXJMaW5lVG9Qb2ludChwKS5kaWFnb25hbExlbmd0aFNx
dWFyZWQoKTsgfQorCiAgICAgSW50UmVjdCB0cmFuc3Bvc2VkUmVjdCgpIGNvbnN0IHsgcmV0dXJu
IEludFJlY3QobV9sb2NhdGlvbi50cmFuc3Bvc2VkUG9pbnQoKSwgbV9zaXplLnRyYW5zcG9zZWRT
aXplKCkpOyB9CiAKICNpZiBQTEFURk9STShXWCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL0ludFNpemUuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL0ludFNpemUuaAppbmRleCAxNjM5ODQ3NjYyZjZlNDgxYjM2NGRjYzNmYzE2ZWFmMzk3
Y2E0OTliLi44ZWM2NTM5YTA2OTAyMjQwY2UxZGUzYTYxMjc3ZjY0YzE4ZTE5YjhlIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbnRTaXplLmgKKysrIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW50U2l6ZS5oCkBAIC0xMDQsNiArMTA0LDE2
IEBAIHB1YmxpYzoKICAgICAgICAgKnRoaXMgPSBleHBhbmRlZFRvKEludFNpemUoKSk7CiAgICAg
fQogCisgICAgaW50IGFyZWEoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fd2lkdGgg
KiBtX2hlaWdodDsKKyAgICB9CisKKyAgICBpbnQgZGlhZ29uYWxMZW5ndGhTcXVhcmVkKCkgY29u
c3QKKyAgICB7CisgICAgICAgIHJldHVybiBtX3dpZHRoICogbV93aWR0aCArIG1faGVpZ2h0ICog
bV9oZWlnaHQ7CisgICAgfQorCiAgICAgSW50U2l6ZSB0cmFuc3Bvc2VkU2l6ZSgpIGNvbnN0CiAg
ICAgewogICAgICAgICByZXR1cm4gSW50U2l6ZShtX2hlaWdodCwgbV93aWR0aCk7CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS90ZXN0aW5nL0ludGVybmFscy5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS90ZXN0aW5nL0ludGVybmFscy5jcHAKaW5kZXggODRlOWNmNzU0MDk0OWY4ZDdlMTJiNWRkZmEw
Yzc4MjEyZDRiZjJhOC4uNzk3YWViZjljYTk0OTE1MmY5N2FhYTc3ODA5MDZlYWI5MDcwODRhYiAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvdGVzdGluZy9JbnRlcm5hbHMuY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3Rlc3RpbmcvSW50ZXJuYWxzLmNwcApAQCAtNjQsNiArNjQsMTEgQEAKICNp
bmNsdWRlICJDb2xvckNob29zZXIuaCIKICNlbmRpZgogCisjaWYgRU5BQkxFKFRPVUNIX0FESlVT
VE1FTlQpCisjaW5jbHVkZSAiRXZlbnRIYW5kbGVyLmgiCisjaW5jbHVkZSAiV2ViS2l0UG9pbnQu
aCIKKyNlbmRpZgorCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIHN0YXRpYyBib29sIG1hcmtlclR5
cGVzRnJvbShjb25zdCBTdHJpbmcmIG1hcmtlclR5cGUsIERvY3VtZW50TWFya2VyOjpNYXJrZXJU
eXBlcyYgcmVzdWx0KQpAQCAtNTE3LDYgKzUyMiw0NiBAQCB1bnNpZ25lZCBJbnRlcm5hbHM6Omxl
bmd0aEZyb21SYW5nZShFbGVtZW50KiBzY29wZSwgY29uc3QgUmFuZ2UqIHJhbmdlLCBFeGNlcHRp
bwogICAgIHJldHVybiBsZW5ndGg7CiB9CiAKKworI2lmIEVOQUJMRShUT1VDSF9BREpVU1RNRU5U
KQorUGFzc1JlZlB0cjxXZWJLaXRQb2ludD4gSW50ZXJuYWxzOjp0b3VjaFBvc2l0aW9uQWRqdXN0
ZWRUb0Jlc3ROb2RlRm9yR2VzdHVyZVRhcChsb25nIHgsIGxvbmcgeSwgbG9uZyB3LCBsb25nIGgs
IERvY3VtZW50KiBkb2N1bWVudCwgRXhjZXB0aW9uQ29kZSYgZWMpCit7CisgICAgaWYgKCFkb2N1
bWVudCB8fCAhZG9jdW1lbnQtPmZyYW1lKCkpIHsKKyAgICAgICAgZWMgPSBJTlZBTElEX0FDQ0VT
U19FUlI7CisgICAgICAgIHJldHVybiAwOworICAgIH0KKworICAgIEludFNpemUgcmFkaXVzKHcg
LyAyLCBoIC8gMik7CisgICAgSW50UG9pbnQgcG9pbnQoeCArIHJhZGl1cy53aWR0aCgpLCB5ICsg
cmFkaXVzLmhlaWdodCgpKTsKKworICAgIE5vZGUqIHRhcmdldE5vZGU7CisgICAgSW50UG9pbnQg
YWRqdXN0ZWRQb2ludDsKKworICAgIGRvY3VtZW50LT5mcmFtZSgpLT5ldmVudEhhbmRsZXIoKS0+
bm9kZUZvclRhcEdlc3R1cmVBdFRvdWNoUG9pbnQocG9pbnQsIHJhZGl1cywgYWRqdXN0ZWRQb2lu
dCwgdGFyZ2V0Tm9kZSk7CisKKyAgICByZXR1cm4gV2ViS2l0UG9pbnQ6OmNyZWF0ZShhZGp1c3Rl
ZFBvaW50LngoKSwgYWRqdXN0ZWRQb2ludC55KCkpOworfQorCitQYXNzUmVmUHRyPE5vZGU+IElu
dGVybmFsczo6dG91Y2hOb2RlQWRqdXN0ZWRUb0Jlc3ROb2RlRm9yR2VzdHVyZVRhcChsb25nIHgs
IGxvbmcgeSwgbG9uZyB3LCBsb25nIGgsIERvY3VtZW50KiBkb2N1bWVudCwgRXhjZXB0aW9uQ29k
ZSYgZWMpCit7CisgICAgaWYgKCFkb2N1bWVudCB8fCAhZG9jdW1lbnQtPmZyYW1lKCkpIHsKKyAg
ICAgICAgZWMgPSBJTlZBTElEX0FDQ0VTU19FUlI7CisgICAgICAgIHJldHVybiAwOworICAgIH0K
KworICAgIEludFNpemUgcmFkaXVzKHcgLyAyLCBoIC8gMik7CisgICAgSW50UG9pbnQgcG9pbnQo
eCArIHJhZGl1cy53aWR0aCgpLCB5ICsgcmFkaXVzLmhlaWdodCgpKTsKKworICAgIE5vZGUqIHRh
cmdldE5vZGU7CisgICAgSW50UG9pbnQgYWRqdXN0ZWRQb2ludDsKKworICAgIGRvY3VtZW50LT5m
cmFtZSgpLT5ldmVudEhhbmRsZXIoKS0+bm9kZUZvclRhcEdlc3R1cmVBdFRvdWNoUG9pbnQocG9p
bnQsIHJhZGl1cywgYWRqdXN0ZWRQb2ludCwgdGFyZ2V0Tm9kZSk7CisKKyAgICByZXR1cm4gYWRv
cHRSZWYodGFyZ2V0Tm9kZSk7Cit9CisjZW5kaWYKKworCiBpbnQgSW50ZXJuYWxzOjpsYXN0U3Bl
bGxDaGVja1JlcXVlc3RTZXF1ZW5jZShEb2N1bWVudCogZG9jdW1lbnQsIEV4Y2VwdGlvbkNvZGUm
IGVjKQogewogICAgIFNwZWxsQ2hlY2tlciogY2hlY2tlciA9IHNwZWxsY2hlY2tlcihkb2N1bWVu
dCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS90ZXN0aW5nL0ludGVybmFscy5oIGIvU291
cmNlL1dlYkNvcmUvdGVzdGluZy9JbnRlcm5hbHMuaAppbmRleCBlYTJmOGI4YWYyYzExY2NmYzBh
NmNlZjljY2E4ZTZmNDRkMDVjNTZkLi40Mjg0MGE2NmVjOGYxNTgxODNhZWI5Y2I2ODY2ZDQwMzQz
NjU2ZGFkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS90ZXN0aW5nL0ludGVybmFscy5oCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3Rlc3RpbmcvSW50ZXJuYWxzLmgKQEAgLTQyLDYgKzQyLDcgQEAg
Y2xhc3MgSW50ZXJuYWxTZXR0aW5nczsKIGNsYXNzIE5vZGU7CiBjbGFzcyBSYW5nZTsKIGNsYXNz
IFNoYWRvd1Jvb3Q7CitjbGFzcyBXZWJLaXRQb2ludDsKIAogdHlwZWRlZiBpbnQgRXhjZXB0aW9u
Q29kZTsKIApAQCAtMTAzLDYgKzEwNCwxMSBAQCBwdWJsaWM6CiAgICAgdW5zaWduZWQgbG9jYXRp
b25Gcm9tUmFuZ2UoRWxlbWVudCogc2NvcGUsIGNvbnN0IFJhbmdlKiwgRXhjZXB0aW9uQ29kZSYp
OwogICAgIHVuc2lnbmVkIGxlbmd0aEZyb21SYW5nZShFbGVtZW50KiBzY29wZSwgY29uc3QgUmFu
Z2UqLCBFeGNlcHRpb25Db2RlJik7CiAKKyNpZiBFTkFCTEUoVE9VQ0hfQURKVVNUTUVOVCkKKyAg
ICBQYXNzUmVmUHRyPFdlYktpdFBvaW50PiB0b3VjaFBvc2l0aW9uQWRqdXN0ZWRUb0Jlc3ROb2Rl
Rm9yR2VzdHVyZVRhcChsb25nIHgsIGxvbmcgeSwgbG9uZyB3LCBsb25nIGgsIERvY3VtZW50Kiwg
RXhjZXB0aW9uQ29kZSYpOworICAgIFBhc3NSZWZQdHI8Tm9kZT4gdG91Y2hOb2RlQWRqdXN0ZWRU
b0Jlc3ROb2RlRm9yR2VzdHVyZVRhcChsb25nIHgsIGxvbmcgeSwgbG9uZyB3LCBsb25nIGgsIERv
Y3VtZW50KiwgRXhjZXB0aW9uQ29kZSYpOworI2VuZGlmCisKICAgICBpbnQgbGFzdFNwZWxsQ2hl
Y2tSZXF1ZXN0U2VxdWVuY2UoRG9jdW1lbnQqLCBFeGNlcHRpb25Db2RlJik7CiAgICAgaW50IGxh
c3RTcGVsbENoZWNrUHJvY2Vzc2VkU2VxdWVuY2UoRG9jdW1lbnQqLCBFeGNlcHRpb25Db2RlJik7
CiAgICAgCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS90ZXN0aW5nL0ludGVybmFscy5pZGwg
Yi9Tb3VyY2UvV2ViQ29yZS90ZXN0aW5nL0ludGVybmFscy5pZGwKaW5kZXggYmE3NmQ0ODZkZGU4
OTcxMTI4OGZiMDQ5M2MxMzc0YmI4MTZjODJjYS4uYWIzOTQzZGFjNmQ0YjUzN2RjOGY1MzY3YzI4
YWM0NTYwMzM1NzQxYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvdGVzdGluZy9JbnRlcm5h
bHMuaWRsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Rlc3RpbmcvSW50ZXJuYWxzLmlkbApAQCAtNzgs
NiArNzgsMTEgQEAgbW9kdWxlIHdpbmRvdyB7CiAgICAgICAgIHVuc2lnbmVkIGxvbmcgbG9jYXRp
b25Gcm9tUmFuZ2UoaW4gRWxlbWVudCBzY29wZSwgaW4gUmFuZ2UgcmFuZ2UpIHJhaXNlcyAoRE9N
RXhjZXB0aW9uKTsKICAgICAgICAgdW5zaWduZWQgbG9uZyBsZW5ndGhGcm9tUmFuZ2UoaW4gRWxl
bWVudCBzY29wZSwgaW4gUmFuZ2UgcmFuZ2UpIHJhaXNlcyAoRE9NRXhjZXB0aW9uKTsKIAorI2lm
IGRlZmluZWQoRU5BQkxFX1RPVUNIX0FESlVTVE1FTlQpICYmIEVOQUJMRV9UT1VDSF9BREpVU1RN
RU5UCisgICAgICAgIFdlYktpdFBvaW50IHRvdWNoUG9zaXRpb25BZGp1c3RlZFRvQmVzdE5vZGVG
b3JHZXN0dXJlVGFwKGluIGxvbmcgeCwgaW4gbG9uZyB5LCBpbiBsb25nIHcsIGluIGxvbmcgaCwg
aW4gRG9jdW1lbnQgZG9jdW1lbnQpIHJhaXNlcyAoRE9NRXhjZXB0aW9uKTsKKyAgICAgICAgTm9k
ZSB0b3VjaE5vZGVBZGp1c3RlZFRvQmVzdE5vZGVGb3JHZXN0dXJlVGFwKGluIGxvbmcgeCwgaW4g
bG9uZyB5LCBpbiBsb25nIHcsIGluIGxvbmcgaCwgaW4gRG9jdW1lbnQgZG9jdW1lbnQpIHJhaXNl
cyAoRE9NRXhjZXB0aW9uKTsKKyNlbmRpZgorCiAgICAgICAgIGxvbmcgbGFzdFNwZWxsQ2hlY2tS
ZXF1ZXN0U2VxdWVuY2UoaW4gRG9jdW1lbnQgZG9jdW1lbnQpIHJhaXNlcyAoRE9NRXhjZXB0aW9u
KTsKICAgICAgICAgbG9uZyBsYXN0U3BlbGxDaGVja1Byb2Nlc3NlZFNlcXVlbmNlKGluIERvY3Vt
ZW50IGRvY3VtZW50KSByYWlzZXMgKERPTUV4Y2VwdGlvbik7CiAKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkuY3BwIGIvU291cmNlL1dlYktpdDIvVUlQ
cm9jZXNzL1dlYlBhZ2VQcm94eS5jcHAKaW5kZXggOGVhM2ZlNGExNzcwNDg0MTQ1MjgwNDFhMzRm
MTcwYTc1ZmZkNmJiYS4uMWYxOWUxNzgzOGQzNTAxYmNlMzRhNGM0YTU4N2M2NGNlYmJiMTNiYSAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5jcHAKKysr
IGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5jcHAKQEAgLTk4OCw5ICs5
ODgsOSBAQCB2b2lkIFdlYlBhZ2VQcm94eTo6aGFuZGxlR2VzdHVyZUV2ZW50KGNvbnN0IFdlYkdl
c3R1cmVFdmVudCYgZXZlbnQpCiAKICNpZiBFTkFCTEUoVE9VQ0hfRVZFTlRTKQogI2lmIFBMQVRG
T1JNKFFUKQotdm9pZCBXZWJQYWdlUHJveHk6OmhhbmRsZVBvdGVudGlhbEFjdGl2YXRpb24oY29u
c3QgSW50UG9pbnQmIGxheW91dFBvaW50KQordm9pZCBXZWJQYWdlUHJveHk6OmhhbmRsZVBvdGVu
dGlhbEFjdGl2YXRpb24oY29uc3QgSW50UG9pbnQmIGxheW91dFBvaW50LCBjb25zdCBJbnRTaXpl
JiBhcmVhKQogewotICAgIHByb2Nlc3MoKS0+c2VuZChNZXNzYWdlczo6V2ViUGFnZTo6SGlnaGxp
Z2h0UG90ZW50aWFsQWN0aXZhdGlvbihsYXlvdXRQb2ludCksIG1fcGFnZUlEKTsKKyAgICBwcm9j
ZXNzKCktPnNlbmQoTWVzc2FnZXM6OldlYlBhZ2U6OkhpZ2hsaWdodFBvdGVudGlhbEFjdGl2YXRp
b24obGF5b3V0UG9pbnQsIGFyZWEpLCBtX3BhZ2VJRCk7CiB9CiAjZW5kaWYKIApkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5oIGIvU291cmNlL1dlYktp
dDIvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5oCmluZGV4IGFmOGRhMWJlZmE5MjQ2MWU4MjY3MzAy
NjU1ODZjMGM3YmU3NDhmNzQuLjc4NjM2Yzc1YjYxNzY2NmMxYTQwOWM1YTFhNGViOWM1MTYwMjhl
YWUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkuaAor
KysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViUGFnZVByb3h5LmgKQEAgLTM4NSw3ICsz
ODUsNyBAQCBwdWJsaWM6CiAjaWYgRU5BQkxFKFRPVUNIX0VWRU5UUykKICAgICB2b2lkIGhhbmRs
ZVRvdWNoRXZlbnQoY29uc3QgTmF0aXZlV2ViVG91Y2hFdmVudCYpOwogI2lmIFBMQVRGT1JNKFFU
KQotICAgIHZvaWQgaGFuZGxlUG90ZW50aWFsQWN0aXZhdGlvbihjb25zdCBXZWJDb3JlOjpJbnRQ
b2ludCYpOworICAgIHZvaWQgaGFuZGxlUG90ZW50aWFsQWN0aXZhdGlvbihjb25zdCBXZWJDb3Jl
OjpJbnRQb2ludCYsIGNvbnN0IFdlYkNvcmU6OkludFNpemUmKTsKICNlbmRpZgogI2VuZGlmCiAK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9xdC9RdFdlYlBhZ2VFdmVudEhh
bmRsZXIuY3BwIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL3F0L1F0V2ViUGFnZUV2ZW50SGFu
ZGxlci5jcHAKaW5kZXggN2QwODk5MjlhMjIzN2RkYmIxOGQyNDBmMTg5ZWM0YTc2OWY5ZjIxOS4u
MDAwODFiNGNkYWQwMDExZTIzZTk0MDczMmI3MTc4NGQwNDY0YTNlOSAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYktpdDIvVUlQcm9jZXNzL3F0L1F0V2ViUGFnZUV2ZW50SGFuZGxlci5jcHAKKysrIGIv
U291cmNlL1dlYktpdDIvVUlQcm9jZXNzL3F0L1F0V2ViUGFnZUV2ZW50SGFuZGxlci5jcHAKQEAg
LTI5Miw3ICsyOTIsNyBAQCBib29sIFF0V2ViUGFnZUV2ZW50SGFuZGxlcjo6aGFuZGxlRHJvcEV2
ZW50KFFEcm9wRXZlbnQqIGV2KQogdm9pZCBRdFdlYlBhZ2VFdmVudEhhbmRsZXI6OmhhbmRsZVBv
dGVudGlhbFNpbmdsZVRhcEV2ZW50KGNvbnN0IFFUb3VjaEV2ZW50OjpUb3VjaFBvaW50JiBwb2lu
dCkKIHsKICAgICBRVHJhbnNmb3JtIGZyb21JdGVtVHJhbnNmb3JtID0gbV93ZWJQYWdlLT50cmFu
c2Zvcm1Gcm9tSXRlbSgpOwotICAgIG1fd2ViUGFnZVByb3h5LT5oYW5kbGVQb3RlbnRpYWxBY3Rp
dmF0aW9uKGZyb21JdGVtVHJhbnNmb3JtLm1hcChwb2ludC5wb3MoKSkudG9Qb2ludCgpKTsKKyAg
ICBtX3dlYlBhZ2VQcm94eS0+aGFuZGxlUG90ZW50aWFsQWN0aXZhdGlvbihmcm9tSXRlbVRyYW5z
Zm9ybS5tYXAocG9pbnQucG9zKCkpLnRvUG9pbnQoKSwgSW50U2l6ZShwb2ludC5yZWN0KCkuc2l6
ZSgpLnRvU2l6ZSgpKSk7CiB9CiAKIHZvaWQgUXRXZWJQYWdlRXZlbnRIYW5kbGVyOjpoYW5kbGVT
aW5nbGVUYXBFdmVudChjb25zdCBRVG91Y2hFdmVudDo6VG91Y2hQb2ludCYgcG9pbnQpCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5jcHAgYi9T
b3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5jcHAKaW5kZXggZGFkODEw
NDkxYjcyOTNiNDYzYmQ3YzJhZTJiNzRmYTdmNDBhODJiOC4uZjIyNmY5NGEwYTI0NGJkM2JkZTQw
NDhlNGI3NjBhNTMzZDY2MTJmMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vz
cy9XZWJQYWdlL1dlYlBhZ2UuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2Vi
UGFnZS9XZWJQYWdlLmNwcApAQCAtMTQ0NywxNiArMTQ0NywyMCBAQCB2b2lkIFdlYlBhZ2U6OnJl
c3RvcmVTZXNzaW9uQW5kTmF2aWdhdGVUb0N1cnJlbnRJdGVtKGNvbnN0IFNlc3Npb25TdGF0ZSYg
c2Vzc2lvbgogCiAjaWYgRU5BQkxFKFRPVUNIX0VWRU5UUykKICNpZiBQTEFURk9STShRVCkKLXZv
aWQgV2ViUGFnZTo6aGlnaGxpZ2h0UG90ZW50aWFsQWN0aXZhdGlvbihjb25zdCBJbnRQb2ludCYg
cG9pbnQpCit2b2lkIFdlYlBhZ2U6OmhpZ2hsaWdodFBvdGVudGlhbEFjdGl2YXRpb24oY29uc3Qg
SW50UG9pbnQmIHBvaW50LCBjb25zdCBJbnRTaXplJiBhcmVhKQogewogICAgIE5vZGUqIGFjdGl2
YXRpb25Ob2RlID0gMDsKICAgICBGcmFtZSogbWFpbmZyYW1lID0gbV9wYWdlLT5tYWluRnJhbWUo
KTsKKyAgICBJbnRQb2ludCBhZGp1c3RlZFBvaW50OwogCiAgICAgaWYgKHBvaW50ICE9IEludFBv
aW50Ojp6ZXJvKCkpIHsKKyNpZiBFTkFCTEUoVE9VQ0hfQURKVVNUTUVOVCkKKyAgICAgICAgbWFp
bmZyYW1lLT5ldmVudEhhbmRsZXIoKS0+bm9kZUZvclRhcEdlc3R1cmVBdFRvdWNoUG9pbnQocG9p
bnQsIEludFNpemUoYXJlYS53aWR0aCgpIC8gMiwgYXJlYS5oZWlnaHQoKSAvIDIpLCBhZGp1c3Rl
ZFBvaW50LCBhY3RpdmF0aW9uTm9kZSk7CisjZWxzZQogICAgICAgICBIaXRUZXN0UmVzdWx0IHJl
c3VsdCA9IG1haW5mcmFtZS0+ZXZlbnRIYW5kbGVyKCktPmhpdFRlc3RSZXN1bHRBdFBvaW50KG1h
aW5mcmFtZS0+dmlldygpLT53aW5kb3dUb0NvbnRlbnRzKHBvaW50KSwgLyphbGxvd1NoYWRvd0Nv
bnRlbnQqLyBmYWxzZSwgLyppZ25vcmVDbGlwcGluZyovIHRydWUpOwogICAgICAgICBhY3RpdmF0
aW9uTm9kZSA9IHJlc3VsdC5pbm5lck5vZGUoKTsKLQotICAgICAgICBpZiAoIWFjdGl2YXRpb25O
b2RlLT5pc0ZvY3VzYWJsZSgpKQorI2VuZGlmCisgICAgICAgIGlmIChhY3RpdmF0aW9uTm9kZSAm
JiAhYWN0aXZhdGlvbk5vZGUtPmlzRm9jdXNhYmxlKCkpCiAgICAgICAgICAgICBhY3RpdmF0aW9u
Tm9kZSA9IGFjdGl2YXRpb25Ob2RlLT5lbmNsb3NpbmdMaW5rRXZlbnRQYXJlbnRPclNlbGYoKTsK
ICAgICB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9X
ZWJQYWdlLmggYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5oCmlu
ZGV4IDc0NWJmNGQ0YWEyYzAyNzJjOWIwZmM3MGVjZjE3YmIyZTU5MjEwZGIuLmQ2YjFmNzMzMmQ5
ZjJiNzA5NGFhZDM4MmYwNWJkNTNiYWMyNzRmZWMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQy
L1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmgKKysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJv
Y2Vzcy9XZWJQYWdlL1dlYlBhZ2UuaApAQCAtNTYwLDcgKzU2MCw3IEBAIHByaXZhdGU6CiAgICAg
dm9pZCB0b3VjaEV2ZW50KGNvbnN0IFdlYlRvdWNoRXZlbnQmKTsKICAgICB2b2lkIHRvdWNoRXZl
bnRTeW5jRm9yVGVzdGluZyhjb25zdCBXZWJUb3VjaEV2ZW50JiwgYm9vbCYgaGFuZGxlZCk7CiAj
aWYgUExBVEZPUk0oUVQpCi0gICAgdm9pZCBoaWdobGlnaHRQb3RlbnRpYWxBY3RpdmF0aW9uKGNv
bnN0IFdlYkNvcmU6OkludFBvaW50Jik7CisgICAgdm9pZCBoaWdobGlnaHRQb3RlbnRpYWxBY3Rp
dmF0aW9uKGNvbnN0IFdlYkNvcmU6OkludFBvaW50JiwgY29uc3QgV2ViQ29yZTo6SW50U2l6ZSYp
OwogI2VuZGlmCiAjZW5kaWYKICAgICB2b2lkIGNvbnRleHRNZW51SGlkZGVuKCkgeyBtX2lzU2hv
d2luZ0NvbnRleHRNZW51ID0gZmFsc2U7IH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dl
YlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLm1lc3NhZ2VzLmluIGIvU291cmNlL1dlYktpdDIvV2Vi
UHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UubWVzc2FnZXMuaW4KaW5kZXggNzgxM2FkZjNjNDMyMTVm
NGRmMTAzZDQ2YzkyMDI2N2Y3ZDYwODljZC4uMWM0NjQ1OGY2MTY3ZjBiM2RmYTgzYjJhOTliNzJl
ODQ1MDc0YTk4YyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdl
L1dlYlBhZ2UubWVzc2FnZXMuaW4KKysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQ
YWdlL1dlYlBhZ2UubWVzc2FnZXMuaW4KQEAgLTQxLDcgKzQxLDcgQEAgbWVzc2FnZXMgLT4gV2Vi
UGFnZSB7CiAgICAgVG91Y2hFdmVudChXZWJLaXQ6OldlYlRvdWNoRXZlbnQgZXZlbnQpCiAgICAg
VG91Y2hFdmVudFN5bmNGb3JUZXN0aW5nKFdlYktpdDo6V2ViVG91Y2hFdmVudCBldmVudCkgLT4g
KGJvb2wgaGFuZGxlZCkKICNpZiBQTEFURk9STShRVCkKLSAgICBIaWdobGlnaHRQb3RlbnRpYWxB
Y3RpdmF0aW9uKFdlYkNvcmU6OkludFBvaW50IHBvaW50KQorICAgIEhpZ2hsaWdodFBvdGVudGlh
bEFjdGl2YXRpb24oV2ViQ29yZTo6SW50UG9pbnQgcG9pbnQsIFdlYkNvcmU6OkludFNpemUgcmFk
aXVzKQogI2VuZGlmCiAjZW5kaWYKIApkaWZmIC0tZ2l0IGEvVG9vbHMvQ2hhbmdlTG9nIGIvVG9v
bHMvQ2hhbmdlTG9nCmluZGV4IGQ3MGE5NjQxNjY4Mjc1NDkyNTcwM2ExZDUyMTZlMzg0YWY2MmZj
ODUuLjlhYjdjNGU0ODk1YjhkNmM3NmFhMGU4ZjlhZDEwMWQzNTU1MGYyZDkgMTAwNjQ0Ci0tLSBh
L1Rvb2xzL0NoYW5nZUxvZworKysgYi9Ub29scy9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxNCBAQAor
MjAxMi0wMi0yNCAgQWxsYW4gU2FuZGZlbGQgSmVuc2VuICA8YWxsYW4uamVuc2VuQG5va2lhLmNv
bT4KKworICAgICAgICBTZWxlY3QgYmVzdCB0YXJnZXQgZm9yIHRhcCBnZXN0dXJlLgorICAgICAg
ICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9Nzg4MDEKKworICAgICAg
ICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBBZGQgVE9VQ0hfQURKVVNU
TUVOVCB0byBlbmFibGVkIGZlYXR1cmVzLgorCisgICAgICAgICogcW1ha2UvbWtzcGVjcy9mZWF0
dXJlcy9mZWF0dXJlcy5wcmY6CisKIDIwMTItMDItMjQgIFpvbHRhbiBIb3J2YXRoICA8em9sdGFu
QHdlYmtpdC5vcmc+CiAKICAgICAgICAgW1F0XSBBbGxvdyB0byB1c2UgV2ViQ29yZSBpbWFnZWRl
Y29kZXJzCmRpZmYgLS1naXQgYS9Ub29scy9xbWFrZS9ta3NwZWNzL2ZlYXR1cmVzL2ZlYXR1cmVz
LnByZiBiL1Rvb2xzL3FtYWtlL21rc3BlY3MvZmVhdHVyZXMvZmVhdHVyZXMucHJmCmluZGV4IGE5
YjgyOWM4ODZiOThhNDgxNDA4ZTkzZTRhNzFhZmVlMWIzYmFkZTEuLmNjNTkxODU1MWM0Yzc4Njc5
MTkyZDk3OTM1YmQzZWUwMWNlOGZmNDQgMTAwNjQ0Ci0tLSBhL1Rvb2xzL3FtYWtlL21rc3BlY3Mv
ZmVhdHVyZXMvZmVhdHVyZXMucHJmCisrKyBiL1Rvb2xzL3FtYWtlL21rc3BlY3MvZmVhdHVyZXMv
ZmVhdHVyZXMucHJmCkBAIC04Nyw2ICs4Nyw3IEBAIGhhdmVRdCg0KTp1bml4OiFtYWM6IWVtYmVk
ZGVkIHsKICFjb250YWlucyhERUZJTkVTLCBFTkFCTEVfVE9VQ0hfSUNPTl9MT0FESU5HPS4pOiBE
RUZJTkVTICs9IEVOQUJMRV9UT1VDSF9JQ09OX0xPQURJTkc9MAogIWNvbnRhaW5zKERFRklORVMs
IEVOQUJMRV9BTklNQVRJT05fQVBJPS4pOiBERUZJTkVTICs9IEVOQUJMRV9BTklNQVRJT05fQVBJ
PTAKICFjb250YWlucyhERUZJTkVTLCBFTkFCTEVfUVRfSU1BR0VfREVDT0RFUj0uKTogREVGSU5F
UyArPSBFTkFCTEVfUVRfSU1BR0VfREVDT0RFUj0xCishY29udGFpbnMoREVGSU5FUywgRU5BQkxF
X1RPVUNIX0FESlVTVE1FTlQ9Lik6IERFRklORVMgKz0gRU5BQkxFX1RPVUNIX0FESlVTVE1FTlQ9
MQogCiAjIEVuYWJsZWQgaW4gU291cmNlL0phdmFTY3JpcHRDb3JlL3d0Zi9QbGF0Zm9ybS5oIGlm
IG5vdCBzZXQKICMgV2UgaGF2ZSB0byBkbyB0aGUgc2FtZSB0byBiZSBhYmxlIHRvIGRpc2FibGUg
dGhlIGZlYXR1cmUgaW4gYnVpbGQtd2Via2l0CkBAIC0yNTQsNiArMjU1LDcgQEAgY29udGFpbnMo
REVGSU5FUywgRU5BQkxFX1ZJREVPX1RSQUNLPTEpOiBGRUFUVVJFX0RFRklORVNfSkFWQVNDUklQ
VCArPSBFTkFCTEVfVkkKIGNvbnRhaW5zKERFRklORVMsIEVOQUJMRV9EQVRBX1RSQU5TRkVSX0lU
RU1TPTEpOiBGRUFUVVJFX0RFRklORVNfSkFWQVNDUklQVCArPSBFTkFCTEVfREFUQV9UUkFOU0ZF
Ul9JVEVNUz0xCiBjb250YWlucyhERUZJTkVTLCBFTkFCTEVfRlVMTFNDUkVFTl9BUEk9MSk6IEZF
QVRVUkVfREVGSU5FU19KQVZBU0NSSVBUICs9IEVOQUJMRV9GVUxMU0NSRUVOX0FQST0xCiBjb250
YWlucyhERUZJTkVTLCBFTkFCTEVfUkVRVUVTVF9BTklNQVRJT05fRlJBTUU9MSk6IEZFQVRVUkVf
REVGSU5FU19KQVZBU0NSSVBUICs9IEVOQUJMRV9SRVFVRVNUX0FOSU1BVElPTl9GUkFNRT0xCitj
b250YWlucyhERUZJTkVTLCBFTkFCTEVfVE9VQ0hfQURKVVNUTUVOVD0xKTogRkVBVFVSRV9ERUZJ
TkVTX0pBVkFTQ1JJUFQgKz0gRU5BQkxFX1RPVUNIX0FESlVTVE1FTlQ9MQogCiAjIFVzZWQgdG8g
Y29tcHV0ZSBkZWZhdWx0cyBmb3IgdGhlIGJ1aWxkLXdlYmtpdCBzY3JpcHQKICMgRG9uJ3QgcGxh
Y2UgYW55dGhpbmcgYWZ0ZXIgdGhpcyEKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL0NoYW5nZUxv
ZyBiL0xheW91dFRlc3RzL0NoYW5nZUxvZwppbmRleCBhZjM2OTg2NDNkY2ZkMDZiMjJmZjdlNTA3
MTI0ZTFjNDMwMTg0MzQ5Li42MDZiMmZjOWZkOTA0NjJiZmU5MzMwOWYyY2I2ODJkNjhkM2VmM2Nj
IDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKKysrIGIvTGF5b3V0VGVzdHMvQ2hh
bmdlTG9nCkBAIC0xLDMgKzEsMjUgQEAKKzIwMTItMDItMjQgIEFsbGFuIFNhbmRmZWxkIEplbnNl
biAgPGFsbGFuLmplbnNlbkBub2tpYS5jb20+CisKKyAgICAgICAgU2VsZWN0IGJlc3QgdGFyZ2V0
IGZvciB0YXAgZ2VzdHVyZS4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTc4ODAxCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisK
KyAgICAgICAgVGVzdCBvZiB0b3VjaCBhZGp1c3RtZW50cy4gVGVzdHMgc2V2ZXJhbCBib3RoIG5v
cm1hbCBhbmQgdHJpY2t5IGNhc2VzLgorICAgICAgICBUaGUgdGVzdHMgYXJlIG5vdCBleGhhdXN0
aXZlIHRob3VnaC4KKworICAgICAgICAqIHBsYXRmb3JtL2Nocm9taXVtL3Rlc3RfZXhwZWN0YXRp
b25zLnR4dDoKKyAgICAgICAgKiBwbGF0Zm9ybS9lZmwvU2tpcHBlZDoKKyAgICAgICAgKiBwbGF0
Zm9ybS9ndGsvU2tpcHBlZDoKKyAgICAgICAgKiBwbGF0Zm9ybS9tYWMvU2tpcHBlZDoKKyAgICAg
ICAgKiBwbGF0Zm9ybS93aW4vU2tpcHBlZDoKKyAgICAgICAgKiB0b3VjaGFkanVzdG1lbnQvZXZl
bnQtdHJpZ2dlcmVkLXdpZGdldHMtZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAgICAgKiB0b3Vj
aGFkanVzdG1lbnQvZXZlbnQtdHJpZ2dlcmVkLXdpZGdldHMuaHRtbDogQWRkZWQuCisgICAgICAg
ICogdG91Y2hhZGp1c3RtZW50L25lc3RlZC10b3VjaC1leHBlY3RlZC50eHQ6IEFkZGVkLgorICAg
ICAgICAqIHRvdWNoYWRqdXN0bWVudC9uZXN0ZWQtdG91Y2guaHRtbDogQWRkZWQuCisgICAgICAg
ICogdG91Y2hhZGp1c3RtZW50L3RvdWNoLWlubGluZXMtZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAg
ICAgICAgKiB0b3VjaGFkanVzdG1lbnQvdG91Y2gtaW5saW5lcy5odG1sOiBBZGRlZC4KKwogMjAx
Mi0wMi0yNCAgSm9jaGVuIEVpc2luZ2VyICA8am9jaGVuQGNocm9taXVtLm9yZz4KIAogICAgICAg
ICBUZXN0cyBmb3Igc2hvd01vZGFsRGlhbG9nIG5lZWQgdG8gYXNrIGZvciBwZXJtaXNzaW9uIHRv
IG9wZW4gd2luZG93cwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvcGxhdGZvcm0vY2hyb21pdW0v
dGVzdF9leHBlY3RhdGlvbnMudHh0IGIvTGF5b3V0VGVzdHMvcGxhdGZvcm0vY2hyb21pdW0vdGVz
dF9leHBlY3RhdGlvbnMudHh0CmluZGV4IDhiZGZmZDdhMThlZGZlNjU3ZTUxMjk0YmVhNDhmM2U4
ZWEyNjYzMzQuLjI4YWRhMTkwMzJjZWE5OGViYjA2NDUzYjI1ZWQyY2YyM2Q2ZjZmM2UgMTAwNjQ0
Ci0tLSBhL0xheW91dFRlc3RzL3BsYXRmb3JtL2Nocm9taXVtL3Rlc3RfZXhwZWN0YXRpb25zLnR4
dAorKysgYi9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9jaHJvbWl1bS90ZXN0X2V4cGVjdGF0aW9ucy50
eHQKQEAgLTExMyw2ICsxMTMsOSBAQCBCVUdXSzc5NDIzIDogc3ZnL2NhcnRvLm5ldC9zZWxlY3Rp
b25saXN0LnN2ZyA9IElNQUdFK1RFWFQgSU1BR0UKIC8vIFZpYnJhdGlvbiBBUEkgaXMgbm90IHN1
cHBvcnRlZCB5ZXQgaW4gdGhlIGNocm9taXVtIHBvcnQuCiBCVUdXSzcyMDEwIFNLSVAgOiBmYXN0
L2RvbS9uYXZpZ2F0b3ItdmlicmF0aW9uLmh0bWwgPSBGQUlMCiAKKy8vIFRvdWNoIEFkanVzdG1l
bnQgaXMgbm90IHN1cHBvcnRlZCB5ZXQgaW4gdGhlIGNocm9taXVtIHBvcnQuCitCVUdXSzc4ODAx
IFNLSVAgOiB0b3VjaGFkanVzdG1lbnQvID0gRkFJTAorCiAvLyAtLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogLy8gV09OVEZJ
WCBURVNUUwogLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3BsYXRmb3JtL2Vm
bC9Ta2lwcGVkIGIvTGF5b3V0VGVzdHMvcGxhdGZvcm0vZWZsL1NraXBwZWQKaW5kZXggMWNhMDZi
MDE4OWZmYTUyOWMwOTgyMDc1ZGJjMmIxOGZlMjdmMDg0Mi4uM2ExMWNkYjMwZTY1OTVkM2ZiZjIw
NDFmYTY4MDg1OGMwYTU3NWZiZiAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvcGxhdGZvcm0vZWZs
L1NraXBwZWQKKysrIGIvTGF5b3V0VGVzdHMvcGxhdGZvcm0vZWZsL1NraXBwZWQKQEAgLTIxNjgs
MyArMjE2OCw3IEBAIGZhc3QvZXZlbnRzL3BhZ2UtdmlzaWJpbGl0eS1pZnJhbWUtbW92ZS10ZXN0
Lmh0bWwKIGZhc3QvZXZlbnRzL3BhZ2UtdmlzaWJpbGl0eS1pZnJhbWUtZGVsZXRlLXRlc3QuaHRt
bAogZmFzdC9ldmVudHMvcGFnZS12aXNpYmlsaXR5LWlmcmFtZS1wcm9wYWdhdGlvbi10ZXN0Lmh0
bWwKIGZhc3QvZXZlbnRzL3BhZ2UtdmlzaWJpbGl0eS10cmFuc2l0aW9uLXRlc3QuaHRtbAorCisj
IFRvdWNoIGFkanVzdG1lbnQgbm90IGVuYWJsZWQKKyMgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTc4ODAxCit0b3VjaGFkanVzdG1lbnQKZGlmZiAtLWdpdCBhL0xheW91
dFRlc3RzL3BsYXRmb3JtL2d0ay9Ta2lwcGVkIGIvTGF5b3V0VGVzdHMvcGxhdGZvcm0vZ3RrL1Nr
aXBwZWQKaW5kZXggNDFhODUzNWE0MzYzZTQ0NGY5N2Q0MWFjNGNmMzUyODA4YzA5NTlkMi4uZWJh
NjE4ZDIxMDdmN2ExMWQ0YWU5Y2JlYzgyZTk1MjMwNWQwMmQ3ZCAxMDA2NDQKLS0tIGEvTGF5b3V0
VGVzdHMvcGxhdGZvcm0vZ3RrL1NraXBwZWQKKysrIGIvTGF5b3V0VGVzdHMvcGxhdGZvcm0vZ3Rr
L1NraXBwZWQKQEAgLTE2MDUsMyArMTYwNSw3IEBAIGVkaXRpbmcvcGFzdGVib2FyZC9jb3B5LWVs
ZW1lbnQtd2l0aC1jb25mbGljdGluZy1iYWNrZ3JvdW5kLWNvbG9yLWZyb20tcnVsZS5odG1sCiBm
YXN0L2RvbS9NZWRpYVN0cmVhbS9hcmd1bWVudC10eXBlcy5odG1sCiBmYXN0L21lZGlhc3RyZWFt
L3BlZXJjb25uZWN0aW9uLUF0dHJpYnV0ZXMuaHRtbAogZmFzdC9tZWRpYXN0cmVhbS9wZWVyY29u
bmVjdGlvbi1hcmd1bWVudC10eXBlcy5odG1sCisKKyMgVG91Y2ggYWRqdXN0bWVudCBub3QgZW5h
YmxlZAorIyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9Nzg4MDEKK3Rv
dWNoYWRqdXN0bWVudApkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvcGxhdGZvcm0vbWFjL1NraXBw
ZWQgYi9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9tYWMvU2tpcHBlZAppbmRleCBhMWVjNjQxNWU1ZDI5
Mzg4ZDBlZDU4NmMzYjM5Yjk0YmI5Yjk2NmJmLi5iZGVkODQyNThjOTg1YWYwMzJmNzQ3NDVjMWYx
ZDRkMmJmOTg1Njg3IDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9tYWMvU2tpcHBl
ZAorKysgYi9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9tYWMvU2tpcHBlZApAQCAtNTYwLDMgKzU2MCw3
IEBAIGZhc3QvbXV0YXRpb24vZW5kLW9mLXRhc2stZGVsaXZlcnkuaHRtbAogIyBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzIwMTAKICMgTmVlZHMgUGFnZUNsaWVudHM6
OnZpYnJhdGlvbkNsaWVudCgpIGltcGxlbWVudGF0aW9uLgogZmFzdC9kb20vbmF2aWdhdG9yLXZp
YnJhdGlvbi5odG1sCisKKyMgVG91Y2ggYWRqdXN0bWVudCBub3QgZW5hYmxlZAorIyBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9Nzg4MDEKK3RvdWNoYWRqdXN0bWVudApk
aWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvcGxhdGZvcm0vd2luL1NraXBwZWQgYi9MYXlvdXRUZXN0
cy9wbGF0Zm9ybS93aW4vU2tpcHBlZAppbmRleCAzMWIyYzI3YmE1MWI1OGRhYjkxNjVkYjJjZTdl
OTA1YzlmZjEzZDZkLi4xODA5MWJlZWZiZmY1YjlhZmY1NjlmODE2ZDU1ZDA1MTkxMmMxZTI4IDEw
MDY0NAotLS0gYS9MYXlvdXRUZXN0cy9wbGF0Zm9ybS93aW4vU2tpcHBlZAorKysgYi9MYXlvdXRU
ZXN0cy9wbGF0Zm9ybS93aW4vU2tpcHBlZApAQCAtMTY1NSwzICsxNjU1LDcgQEAgZmFzdC9yZXBh
aW50L3RyYW5zZm9ybS1hYnNvbHV0ZS1pbi1wb3NpdGlvbmVkLWNvbnRhaW5lci5odG1sCiAKICNW
aWJyYXRpb24gQVBJIGlzIG5vdCBpbXBsZW1lbnRlZC4KIGZhc3QvZG9tL25hdmlnYXRvci12aWJy
YXRpb24uaHRtbAorCisjIFRvdWNoIGFkanVzdG1lbnQgbm90IGVuYWJsZWQKKyMgaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTc4ODAxCit0b3VjaGFkanVzdG1lbnQKZGlm
ZiAtLWdpdCBhL0xheW91dFRlc3RzL3RvdWNoYWRqdXN0bWVudC9ldmVudC10cmlnZ2VyZWQtd2lk
Z2V0cy1leHBlY3RlZC50eHQgYi9MYXlvdXRUZXN0cy90b3VjaGFkanVzdG1lbnQvZXZlbnQtdHJp
Z2dlcmVkLXdpZGdldHMtZXhwZWN0ZWQudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmY5NGUyMGUxZGY2NGRkMDkx
YzJhZDg2NWE5N2M0Y2U4NDJiNjk1ZTUKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy90
b3VjaGFkanVzdG1lbnQvZXZlbnQtdHJpZ2dlcmVkLXdpZGdldHMtZXhwZWN0ZWQudHh0CkBAIC0w
LDAgKzEsMzEgQEAKK1Rlc3QgdmFyaW91cyB3YXlzIHRvIHRyaWdnZXIgaW5wdXQtd2lkZ2V0cy4g
T24gYSB0b3VjaCBpbnRlcmZhY2UsIGFsbCB0aGUgYWN0aW9ucyBzaG91bGQgYmUgdHJpZ2dlcmFi
bGUgd2l0aCBlaXRoZXIgYSB0b3VjaCBkb3duIG9yIGEgdG91Y2ggdGFwLgorCitPbiBzdWNjZXNz
LCB5b3Ugd2lsbCBzZWUgYSBzZXJpZXMgb2YgIlBBU1MiIG1lc3NhZ2VzLCBmb2xsb3dlZCBieSAi
VEVTVCBDT01QTEVURSIuCisKKworVGVzdGluZyBzbWFsbCBkaXJlY3QgaGl0cworUEFTUyBhZGp1
c3RlZE5vZGUuaWQgaXMgZWxlbWVudC5pZAorUEFTUyBhZGp1c3RlZE5vZGUuaWQgaXMgZWxlbWVu
dC5pZAorUEFTUyBhZGp1c3RlZE5vZGUuaWQgaXMgZWxlbWVudC5pZAorUEFTUyBhZGp1c3RlZE5v
ZGUuaWQgaXMgbm90IGVsZW1lbnQuaWQKK1BBU1MgYWRqdXN0ZWROb2RlLmlkIGlzIGVsZW1lbnQu
aWQKK1Rlc3RpbmcgbGFyZ2UgZGlyZWN0IGhpdHMKK1BBU1MgYWRqdXN0ZWROb2RlLmlkIGlzIGVs
ZW1lbnQuaWQKK1BBU1MgYWRqdXN0ZWROb2RlLmlkIGlzIGVsZW1lbnQuaWQKK1BBU1MgYWRqdXN0
ZWROb2RlLmlkIGlzIGVsZW1lbnQuaWQKK1BBU1MgYWRqdXN0ZWROb2RlLmlkIGlzIG5vdCBlbGVt
ZW50LmlkCitQQVNTIGFkanVzdGVkTm9kZS5pZCBpcyBlbGVtZW50LmlkCitUZXN0aW5nIGxhcmdl
IGRpcmVjdCBoaXRzCitQQVNTIGFkanVzdGVkTm9kZS5pZCBpcyBlbGVtZW50LmlkCitQQVNTIGFk
anVzdGVkTm9kZS5pZCBpcyBlbGVtZW50LmlkCitQQVNTIGFkanVzdGVkTm9kZS5pZCBpcyBlbGVt
ZW50LmlkCitQQVNTIGFkanVzdGVkTm9kZS5pZCBpcyBub3QgZWxlbWVudC5pZAorUEFTUyBhZGp1
c3RlZE5vZGUuaWQgaXMgZWxlbWVudC5pZAorUEFTUyBzdWNjZXNzZnVsbHlQYXJzZWQgaXMgdHJ1
ZQorCitURVNUIENPTVBMRVRFCitGb2N1cyBoZXJlIHNob3VsZCBnaXZlIGEgdGV4dCBpbnB1dC1m
aWVsZC4KK01vdXNlLW92ZXIgaGVyZSBzaG91bGQgZ2l2ZSBhIHRleHQgaW5wdXQtZmllbGQuCitI
b3ZlcmluZyBoZXJlIHNob3VsZCBnaXZlIGEgdGV4dCBpbnB1dC1maWVsZC4gCitGb2N1c2luZyBo
ZXJlIHNob3VsZCBvbmx5IGdpdmUgZm9jdXMgb3V0bGluZS4KK0ZvY3VzaW5nIGhlcmUgc2hvdWxk
IGdpdmUgYSB0ZXh0IGlucHV0LWZpZWxkLgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvdG91Y2hh
ZGp1c3RtZW50L2V2ZW50LXRyaWdnZXJlZC13aWRnZXRzLmh0bWwgYi9MYXlvdXRUZXN0cy90b3Vj
aGFkanVzdG1lbnQvZXZlbnQtdHJpZ2dlcmVkLXdpZGdldHMuaHRtbApuZXcgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4xMzUx
M2IzNjE2OGE5Y2QyMzQ3MTk0YzMzMmExNTI2ZTFhMTczYTYxCi0tLSAvZGV2L251bGwKKysrIGIv
TGF5b3V0VGVzdHMvdG91Y2hhZGp1c3RtZW50L2V2ZW50LXRyaWdnZXJlZC13aWRnZXRzLmh0bWwK
QEAgLTAsMCArMSwxNjggQEAKKzxodG1sPgorPGhlYWQ+Cis8c3R5bGU+CisgICAgLmJveCB7IGJv
cmRlcjogMXB4IHNvbGlkIGJsYWNrOyBib3JkZXItcmFkaXVzOiA1cHggNXB4OyBtYXJnaW46IDFl
bTsgbWF4LXdpZHRoOiA0MGVtOyB9Cis8L3N0eWxlPgorCis8c2NyaXB0IHNyYz0iLi4vZmFzdC9q
cy9yZXNvdXJjZXMvanMtdGVzdC1wcmUuanMiPjwvc2NyaXB0PgorCis8L2hlYWQ+CisKKzxib2R5
IG9ubG9hZD0icnVuVGVzdHMoKSI+CisKKzxwIGlkPSdkZXNjcmlwdGlvbic+PC9wPgorCis8ZGl2
IGlkPSdjb25zb2xlJz48L2Rpdj4KKworPHNjcmlwdD4KKyAgICB2YXIgZWxlbWVudDsKKyAgICB2
YXIgYWRqdXN0ZWROb2RlOworICAgIGZ1bmN0aW9uIGZpbmRBYnNvbHV0ZVBvc2l0aW9uKG5vZGUp
IHsKKyAgICAgICAgdmFyIHBvcyA9IG5ldyBPYmplY3QoKTsKKyAgICAgICAgcG9zLmxlZnQgPSAw
OyBwb3MudG9wID0gMDsKKyAgICAgICAgZG8geworICAgICAgICAgICAgcG9zLmxlZnQgKz0gbm9k
ZS5vZmZzZXRMZWZ0OworICAgICAgICAgICAgcG9zLnRvcCArPSBub2RlLm9mZnNldFRvcDsKKyAg
ICAgICAgfSB3aGlsZSAobm9kZSA9IG5vZGUub2Zmc2V0UGFyZW50KTsKKyAgICAgICAgcmV0dXJu
IHBvczsKKyAgICB9CisKKyAgICBmdW5jdGlvbiB0ZXN0RGlyZWN0VG91Y2goZWxlbWVudCkKKyAg
ICB7CisgICAgICAgIHZhciBwb3MgPSBmaW5kQWJzb2x1dGVQb3NpdGlvbihlbGVtZW50KTsKKyAg
ICAgICAgdmFyIHggPSBwb3MubGVmdCArIGVsZW1lbnQuY2xpZW50V2lkdGgvMiAtIDE7CisgICAg
ICAgIHZhciB5ID0gcG9zLnRvcCArIGVsZW1lbnQuY2xpZW50SGVpZ2h0LzIgLSAxOworICAgICAg
ICB2YXIgdyA9IDM7CisgICAgICAgIHZhciBoID0gMzsKKyAgICAgICAgYWRqdXN0ZWROb2RlID0g
aW50ZXJuYWxzLnRvdWNoTm9kZUFkanVzdGVkVG9CZXN0Tm9kZUZvckdlc3R1cmVUYXAoeCwgeSwg
dywgaCwgZG9jdW1lbnQpOworICAgICAgICBpZiAoYWRqdXN0ZWROb2RlLm5vZGVUeXBlID09IDMp
IC8vIFRFWFQgbm9kZQorICAgICAgICAgICAgYWRqdXN0ZWROb2RlID0gYWRqdXN0ZWROb2RlLnBh
cmVudE5vZGU7CisgICAgfQorCisgICAgZnVuY3Rpb24gdGVzdERpcmVjdEZhdEZpbmdlcihlbGVt
ZW50KQorICAgIHsKKyAgICAgICAgdmFyIHBvcyA9IGZpbmRBYnNvbHV0ZVBvc2l0aW9uKGVsZW1l
bnQpOworICAgICAgICB2YXIgeCA9IHBvcy5sZWZ0ICsgZWxlbWVudC5jbGllbnRXaWR0aC8yIC0g
MTsKKyAgICAgICAgdmFyIHkgPSBwb3MudG9wIC0gNSA7CisgICAgICAgIHZhciB3ID0gZWxlbWVu
dC5jbGllbnRIZWlnaHQ7CisgICAgICAgIHZhciBoID0gZWxlbWVudC5jbGllbnRIZWlnaHQgKyAx
MDsKKyAgICAgICAgYWRqdXN0ZWROb2RlID0gaW50ZXJuYWxzLnRvdWNoTm9kZUFkanVzdGVkVG9C
ZXN0Tm9kZUZvckdlc3R1cmVUYXAoeCwgeSwgdywgaCwgZG9jdW1lbnQpOworICAgICAgICBpZiAo
YWRqdXN0ZWROb2RlLm5vZGVUeXBlID09IDMpIC8vIFRFWFQgbm9kZQorICAgICAgICAgICAgYWRq
dXN0ZWROb2RlID0gYWRqdXN0ZWROb2RlLnBhcmVudE5vZGU7CisgICAgfQorCisgICAgZnVuY3Rp
b24gdGVzdEluZGlyZWN0RmF0RmluZ2VyKGVsZW1lbnQpCisgICAgeworICAgICAgICB2YXIgcG9z
ID0gZmluZEFic29sdXRlUG9zaXRpb24oZWxlbWVudCk7CisgICAgICAgIHZhciB4ID0gcG9zLmxl
ZnQgKyBlbGVtZW50LmNsaWVudFdpZHRoLzIgLSAxOworICAgICAgICB2YXIgeSA9IHBvcy50b3Ag
LSA3OworICAgICAgICB2YXIgdyA9IDEwOworICAgICAgICB2YXIgaCA9IDEwOworICAgICAgICBh
ZGp1c3RlZE5vZGUgPSBpbnRlcm5hbHMudG91Y2hOb2RlQWRqdXN0ZWRUb0Jlc3ROb2RlRm9yR2Vz
dHVyZVRhcCh4LCB5LCB3LCBoLCBkb2N1bWVudCk7CisgICAgICAgIGlmIChhZGp1c3RlZE5vZGUu
bm9kZVR5cGUgPT0gMykgLy8gVEVYVCBub2RlCisgICAgICAgICAgICBhZGp1c3RlZE5vZGUgPSBh
ZGp1c3RlZE5vZGUucGFyZW50Tm9kZTsKKyAgICB9CisKKyAgICBmdW5jdGlvbiB0ZXN0VG91Y2hI
aXQoZWxlbWVudGlkLCB0b3VjaFR5cGUpIHsKKyAgICAgICAgZWxlbWVudCA9IGRvY3VtZW50Lmdl
dEVsZW1lbnRCeUlkKGVsZW1lbnRpZCk7CisgICAgICAgIHRvdWNoVHlwZShlbGVtZW50KTsKKyAg
ICAgICAgc2hvdWxkQmUoJ2FkanVzdGVkTm9kZS5pZCcsICdlbGVtZW50LmlkJyk7CisgICAgfQor
CisgICAgZnVuY3Rpb24gdGVzdFRvdWNoTWlzcyhlbGVtZW50aWQsIHRvdWNoVHlwZSkgeworICAg
ICAgICBlbGVtZW50ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoZWxlbWVudGlkKTsKKyAgICAg
ICAgdG91Y2hUeXBlKGVsZW1lbnQpOworICAgICAgICBzaG91bGROb3RCZSgnYWRqdXN0ZWROb2Rl
LmlkJywgJ2VsZW1lbnQuaWQnKTsKKyAgICB9CisKKyAgICBmdW5jdGlvbiB0ZXN0RGlyZWN0VG91
Y2hlcygpCisgICAgeworICAgICAgICBkZWJ1ZygnVGVzdGluZyBzbWFsbCBkaXJlY3QgaGl0cycp
OworICAgICAgICB0ZXN0VG91Y2hIaXQoJ3Rlc3QxJyx0ZXN0RGlyZWN0VG91Y2gpOworICAgICAg
ICB0ZXN0VG91Y2hIaXQoJ3Rlc3QyJyx0ZXN0RGlyZWN0VG91Y2gpOworICAgICAgICB0ZXN0VG91
Y2hIaXQoJ3Rlc3QzJyx0ZXN0RGlyZWN0VG91Y2gpOworICAgICAgICB0ZXN0VG91Y2hNaXNzKCd0
ZXN0NCcsdGVzdERpcmVjdFRvdWNoKTsKKyAgICAgICAgdGVzdFRvdWNoSGl0KCd0ZXN0NScsdGVz
dERpcmVjdFRvdWNoKTsKKyAgICB9CisKKyAgICBmdW5jdGlvbiB0ZXN0RGlyZWN0RmF0RmluZ2Vy
cygpCisgICAgeworICAgICAgICBkZWJ1ZygnVGVzdGluZyBsYXJnZSBkaXJlY3QgaGl0cycpOwor
ICAgICAgICB0ZXN0VG91Y2hIaXQoJ3Rlc3QxJyx0ZXN0RGlyZWN0RmF0RmluZ2VyKTsKKyAgICAg
ICAgdGVzdFRvdWNoSGl0KCd0ZXN0MicsdGVzdERpcmVjdEZhdEZpbmdlcik7CisgICAgICAgIHRl
c3RUb3VjaEhpdCgndGVzdDMnLHRlc3REaXJlY3RGYXRGaW5nZXIpOworICAgICAgICB0ZXN0VG91
Y2hNaXNzKCd0ZXN0NCcsdGVzdERpcmVjdEZhdEZpbmdlcik7CisgICAgICAgIHRlc3RUb3VjaEhp
dCgndGVzdDUnLHRlc3REaXJlY3RGYXRGaW5nZXIpOworICAgIH0KKworICAgIGZ1bmN0aW9uIHRl
c3RJbmRpcmVjdEZhdEZpbmdlcnMoKQorICAgIHsKKyAgICAgICAgZGVidWcoJ1Rlc3RpbmcgbGFy
Z2UgZGlyZWN0IGhpdHMnKTsKKyAgICAgICAgdGVzdFRvdWNoSGl0KCd0ZXN0MScsdGVzdEluZGly
ZWN0RmF0RmluZ2VyKTsKKyAgICAgICAgdGVzdFRvdWNoSGl0KCd0ZXN0MicsdGVzdEluZGlyZWN0
RmF0RmluZ2VyKTsKKyAgICAgICAgdGVzdFRvdWNoSGl0KCd0ZXN0MycsdGVzdEluZGlyZWN0RmF0
RmluZ2VyKTsKKyAgICAgICAgdGVzdFRvdWNoTWlzcygndGVzdDQnLHRlc3RJbmRpcmVjdEZhdEZp
bmdlcik7CisgICAgICAgIHRlc3RUb3VjaEhpdCgndGVzdDUnLHRlc3RJbmRpcmVjdEZhdEZpbmdl
cik7CisgICAgfQorCisgICAgZnVuY3Rpb24gcnVuVGVzdHMoKQorICAgIHsKKyAgICAgICAgaWYg
KHdpbmRvdy5sYXlvdXRUZXN0Q29udHJvbGxlciAmJiB3aW5kb3cuaW50ZXJuYWxzICYmIGludGVy
bmFscy50b3VjaE5vZGVBZGp1c3RlZFRvQmVzdE5vZGVGb3JHZXN0dXJlVGFwKSB7CisgICAgICAg
ICAgICBkZXNjcmlwdGlvbignVGVzdCB2YXJpb3VzIHdheXMgdG8gdHJpZ2dlciBpbnB1dC13aWRn
ZXRzLiBPbiBhIHRvdWNoIGludGVyZmFjZSwgYWxsIHRoZSBhY3Rpb25zIHNob3VsZCBiZSB0cmln
Z2VyYWJsZSB3aXRoIGVpdGhlciBhIHRvdWNoIGRvd24gb3IgYSB0b3VjaCB0YXAuJyk7CisgICAg
ICAgICAgICBsYXlvdXRUZXN0Q29udHJvbGxlci5kdW1wQXNUZXh0KCk7CisgICAgICAgICAgICBs
YXlvdXRUZXN0Q29udHJvbGxlci53YWl0VW50aWxEb25lKCk7CisgICAgICAgICAgICB0ZXN0RGly
ZWN0VG91Y2hlcygpOworICAgICAgICAgICAgdGVzdERpcmVjdEZhdEZpbmdlcnMoKTsKKyAgICAg
ICAgICAgIHRlc3RJbmRpcmVjdEZhdEZpbmdlcnMoKTsKKyAgICAgICAgICAgIGlzU3VjY2Vzc2Z1
bGx5UGFyc2VkKCk7CisgICAgICAgICAgICBsYXlvdXRUZXN0Q29udHJvbGxlci5ub3RpZnlEb25l
KCk7CisgICAgICAgIH0KKyAgICB9Cis8L3NjcmlwdD4KKworPHNjcmlwdD4KKyAgICBmdW5jdGlv
biB0cmlnZ2VySW5wdXQoKSB7CisgICAgICAgIHZhciBlbGVtZW50ID0gZXZlbnQuc3JjRWxlbWVu
dDsKKyAgICAgICAgaWYgKCFlbGVtZW50Lm9wZW4pIHsKKyAgICAgICAgICAgIGVsZW1lbnQuaW5u
ZXJIVE1MID0gJzxpbnB1dCB0eXBlPXRleHQgc3R5bGU9IndpZHRoOiAxMDAlIj48L2lucHV0PicK
KyAgICAgICAgICAgIGVsZW1lbnQub3BlbiA9IHRydWU7CisgICAgICAgIH0KKyAgICAgICAgZWxl
bWVudC5maXJzdENoaWxkLmZvY3VzKCk7CisgICAgfQorPC9zY3JpcHQ+CisKKzxkaXYgaWQ9dGVz
dDEgY2xhc3M9Ym94IHRhYmluZGV4PTEgb25mb2N1cz0ndHJpZ2dlcklucHV0KCknPgorRm9jdXMg
aGVyZSBzaG91bGQgZ2l2ZSBhIHRleHQgaW5wdXQtZmllbGQuCis8L2Rpdj4KKworPGRpdiBpZD10
ZXN0MiBjbGFzcz1ib3ggb25tb3VzZW92ZXI9J3RyaWdnZXJJbnB1dCgpJz4gCitNb3VzZS1vdmVy
IGhlcmUgc2hvdWxkIGdpdmUgYSB0ZXh0IGlucHV0LWZpZWxkLgorPC9kaXY+CisKKzxzdHlsZT4K
KyAgICAuYm94Om5vdCg6aG92ZXIpIC5ob3ZlcnRyaWdnZXJlZCB7IHZpc2liaWxpdHk6IGhpZGRl
bjt9CisgICAgLmJveDpob3ZlciAuaG92ZXJmYWxsYmFjayB7IGRpc3BsYXk6IG5vbmU7IH0gIAor
PC9zdHlsZT4KKworPGRpdiBpZD10ZXN0MyBjbGFzcz1ib3g+IAorICAgIDxzcGFuIGNsYXNzPWhv
dmVyZmFsbGJhY2s+SG92ZXJpbmcgaGVyZSBzaG91bGQgZ2l2ZSBhIHRleHQgaW5wdXQtZmllbGQu
PC9zcGFuPgorICAgIDxpbnB1dCB0eXBlPXRleHQgY2xhc3M9aG92ZXJ0cmlnZ2VyZWQ+PC9pbnB1
dD4KKzwvZGl2PgorCis8ZGl2IGlkPXRlc3Q0IGNsYXNzPWJveCBvbmZvY3VzPSd0cmlnZ2VySW5w
dXQoKSc+CisgICAgPHNwYW4gdGFiaW5kZXg9MT4gRm9jdXNpbmcgaGVyZSBzaG91bGQgb25seSBn
aXZlIGZvY3VzIG91dGxpbmUuCisgICAgPC9zcGFuPgorPC9kaXY+CisKKzxkaXYgaWQ9dGVzdDUg
Y2xhc3M9Ym94PgorICAgIDxzcGFuIHRhYmluZGV4PTE+IEZvY3VzaW5nIGhlcmUgc2hvdWxkIGdp
dmUgYSB0ZXh0IGlucHV0LWZpZWxkLgorICAgIDwvc3Bhbj4KKzwvZGl2PgorCis8c2NyaXB0Pgor
ICAgIHZhciBlbGVtZW50ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rlc3Q1Jyk7CisgICAg
ZWxlbWVudC5hZGRFdmVudExpc3RlbmVyKCdET01Gb2N1c0luJywgdHJpZ2dlcklucHV0LCBmYWxz
ZSk7Cis8L3NjcmlwdD4KKworPC9ib2R5PgorPC9odG1sPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9m
IGZpbGUKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3RvdWNoYWRqdXN0bWVudC9uZXN0ZWQtdG91
Y2gtZXhwZWN0ZWQudHh0IGIvTGF5b3V0VGVzdHMvdG91Y2hhZGp1c3RtZW50L25lc3RlZC10b3Vj
aC1leHBlY3RlZC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNzQ3ZjY3ZTk1ZTJmMTVjODNlOTBmNmQxZGIzZjBk
MWU3ZDU3NDVjNgotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL3RvdWNoYWRqdXN0bWVu
dC9uZXN0ZWQtdG91Y2gtZXhwZWN0ZWQudHh0CkBAIC0wLDAgKzEsMTggQEAKK0JveCB3aXRoIGEg
bG9jYWwgY2xpY2sgaGFuZGxlci4KK0JveCB3aXRob3V0IGEgbG9jYWwgY2xpY2sgaGFuZGxlci4K
K1Rlc3QgdGhlIGNhc2Ugd2hlcmUgYSBjbGlja2FibGUgdGFyZ2V0IGlzIG5lc3RlZCBpbnNpZGUg
YSBkb2N1bWVudCB0aGF0IGlzIG1vbml0b3JpbmcgY2xpY2tzLiBUaGUgdGFyZ2V0IHdpdGggdGhl
IGxvY2FsIGV2ZW50LWhhbmRsZXIgc2hvdWxkIGJlIGNob3NlbiBpZiBtdWx0aXBsZSB0YXJnZXRz
IGFyZSB0b3VjaGVkLgorCitPbiBzdWNjZXNzLCB5b3Ugd2lsbCBzZWUgYSBzZXJpZXMgb2YgIlBB
U1MiIG1lc3NhZ2VzLCBmb2xsb3dlZCBieSAiVEVTVCBDT01QTEVURSIuCisKKworVGVzdGluZyBz
bWFsbCBkaXJlY3QgaGl0cworUEFTUyBhZGp1c3RlZE5vZGUuaWQgaXMgZWxlbWVudC5pZAorUEFT
UyBhZGp1c3RlZE5vZGUuaWQgaXMgZWxlbWVudC5pZAorVGVzdGluZyBwcmVmZXJlZCBoaXRzCitQ
QVNTIGFkanVzdGVkTm9kZS5pZCBpcyBlbGVtZW50MS5pZAorUEFTUyBhZGp1c3RlZE5vZGUuaWQg
aXMgZWxlbWVudDEuaWQKK1BBU1MgYWRqdXN0ZWROb2RlLmlkIGlzIGVsZW1lbnQxLmlkCitQQVNT
IHN1Y2Nlc3NmdWxseVBhcnNlZCBpcyB0cnVlCisKK1RFU1QgQ09NUExFVEUKKwpkaWZmIC0tZ2l0
IGEvTGF5b3V0VGVzdHMvdG91Y2hhZGp1c3RtZW50L25lc3RlZC10b3VjaC5odG1sIGIvTGF5b3V0
VGVzdHMvdG91Y2hhZGp1c3RtZW50L25lc3RlZC10b3VjaC5odG1sCm5ldyBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmI1MjZj
NDQ3MzQ1MzY5MTk4MzdkMjc5YjdkMWY4M2MwZTAzMWVlZDUKLS0tIC9kZXYvbnVsbAorKysgYi9M
YXlvdXRUZXN0cy90b3VjaGFkanVzdG1lbnQvbmVzdGVkLXRvdWNoLmh0bWwKQEAgLTAsMCArMSwx
MjAgQEAKKzxodG1sPgorPGhlYWQ+Cis8c3R5bGU+CisgICAgLmJveCB7IGJvcmRlcjogMXB4IHNv
bGlkIGJsYWNrOyBib3JkZXItcmFkaXVzOiA1cHggNXB4OyBtYXJnaW46IDFlbTsgbWF4LXdpZHRo
OiA0MGVtOyB9Cis8L3N0eWxlPgorPHNjcmlwdCBzcmM9Ii4uL2Zhc3QvanMvcmVzb3VyY2VzL2pz
LXRlc3QtcHJlLmpzIj48L3NjcmlwdD4KKworPC9oZWFkPgorCis8Ym9keSBvbmxvYWQ9InJ1blRl
c3RzKCkiPgorCis8ZGl2IGNsYXNzPWJveCBpZD1teWJveDE+CitCb3ggd2l0aCBhIGxvY2FsIGNs
aWNrIGhhbmRsZXIuCis8L2Rpdj4KKworPGRpdiBjbGFzcz1ib3ggaWQ9bXlib3gyPiAKK0JveCB3
aXRob3V0IGEgbG9jYWwgY2xpY2sgaGFuZGxlci4KKzwvZGl2PgorCis8c2NyaXB0PgorICBmdW5j
dGlvbiBtb25pdG9yKGUpIHsgYWxlcnQoZS50YXJnZXQgKyggZS50YXJnZXQuaWQgPyAoICcgIycg
KyBlLnRhcmdldC5pZCkgOiAnJykpOyB9OworICBmdW5jdGlvbiBkb1NvbWV0aGluZyhlKSB7fTsK
KworICB2YXIgZWxlbWVudCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdteWJveDEnKTsKKyAg
ZWxlbWVudC5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIGRvU29tZXRoaW5nLCBmYWxzZSk7Cisg
IGVsZW1lbnQgPSBkb2N1bWVudC5ib2R5OworICBlbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ2Ns
aWNrJywgbW9uaXRvciwgZmFsc2UpOworPC9zY3JpcHQ+CisKKworPHAgaWQ9J2Rlc2NyaXB0aW9u
Jz48L3A+Cis8ZGl2IGlkPSdjb25zb2xlJz48L2Rpdj4KKworPHNjcmlwdD4KKyAgICB2YXIgZWxl
bWVudDsKKyAgICB2YXIgYWRqdXN0ZWROb2RlOworICAgIGZ1bmN0aW9uIGZpbmRBYnNvbHV0ZVBv
c2l0aW9uKG5vZGUpIHsKKyAgICAgICAgdmFyIHBvcyA9IG5ldyBPYmplY3QoKTsKKyAgICAgICAg
cG9zLmxlZnQgPSAwOyBwb3MudG9wID0gMDsKKyAgICAgICAgZG8geworICAgICAgICAgICAgcG9z
LmxlZnQgKz0gbm9kZS5vZmZzZXRMZWZ0OworICAgICAgICAgICAgcG9zLnRvcCArPSBub2RlLm9m
ZnNldFRvcDsKKyAgICAgICAgfSB3aGlsZSAobm9kZSA9IG5vZGUub2Zmc2V0UGFyZW50KTsKKyAg
ICAgICAgcmV0dXJuIHBvczsKKyAgICB9CisKKyAgICBmdW5jdGlvbiB0ZXN0RGlyZWN0VG91Y2go
ZWxlbWVudCkKKyAgICB7CisgICAgICAgIHZhciBwb3MgPSBmaW5kQWJzb2x1dGVQb3NpdGlvbihl
bGVtZW50KTsKKyAgICAgICAgdmFyIHggPSBwb3MubGVmdCArIGVsZW1lbnQuY2xpZW50V2lkdGgv
MiAtIDE7CisgICAgICAgIHZhciB5ID0gcG9zLnRvcCArIGVsZW1lbnQuY2xpZW50SGVpZ2h0LzIg
LSAxOworICAgICAgICB2YXIgdyA9IDM7CisgICAgICAgIHZhciBoID0gMzsKKyAgICAgICAgdmFy
IGFkanVzdGVkTm9kZSA9IGludGVybmFscy50b3VjaE5vZGVBZGp1c3RlZFRvQmVzdE5vZGVGb3JH
ZXN0dXJlVGFwKHgsIHksIHcsIGgsIGRvY3VtZW50KTsKKyAgICAgICAgaWYgKGFkanVzdGVkTm9k
ZS5ub2RlVHlwZSA9PSAzKSAvLyBURVhUIG5vZGUKKyAgICAgICAgICAgIGFkanVzdGVkTm9kZSA9
IGFkanVzdGVkTm9kZS5wYXJlbnROb2RlOworICAgICAgICByZXR1cm4gYWRqdXN0ZWROb2RlOwor
ICAgIH0KKworICAgIGZ1bmN0aW9uIHRlc3REb3VibGVUb3VjaChlbGVtZW50MSwgZWxlbWVudDIs
IG9mZnNldCkKKyAgICB7CisgICAgICAgIHZhciBwb3MxID0gZmluZEFic29sdXRlUG9zaXRpb24o
ZWxlbWVudDEpOworICAgICAgICB2YXIgcG9zMiA9IGZpbmRBYnNvbHV0ZVBvc2l0aW9uKGVsZW1l
bnQyKTsKKyAgICAgICAgLy8gV2UgYXNzdW1lIHRoZSBlbGVtZW50cyBoYXZlIHRoZSBzYW1lIHgg
Y29vcmQgYW5kIHdpZHRoLgorICAgICAgICB2YXIgeCA9IHBvczEubGVmdCArIGVsZW1lbnQxLmNs
aWVudFdpZHRoLzIgLSAxOworICAgICAgICB2YXIgeTEgPSBwb3MxLnRvcCArIGVsZW1lbnQxLmNs
aWVudEhlaWdodC8yICsgMTsKKyAgICAgICAgdmFyIHkyID0gcG9zMi50b3AgKyBlbGVtZW50Mi5j
bGllbnRIZWlnaHQvMiAtIDE7CisgICAgICAgIHZhciB3ID0geTIgLSB5MTsKKyAgICAgICAgdmFy
IGggPSB5MiAtIHkxOworICAgICAgICB2YXIgYWRqdXN0ZWROb2RlID0gaW50ZXJuYWxzLnRvdWNo
Tm9kZUFkanVzdGVkVG9CZXN0Tm9kZUZvckdlc3R1cmVUYXAoeCwgeTEgKyBvZmZzZXQsIHcsIGgs
IGRvY3VtZW50KTsKKyAgICAgICAgaWYgKGFkanVzdGVkTm9kZS5ub2RlVHlwZSA9PSAzKSAvLyBU
RVhUIG5vZGUKKyAgICAgICAgICAgIGFkanVzdGVkTm9kZSA9IGFkanVzdGVkTm9kZS5wYXJlbnRO
b2RlOworICAgICAgICByZXR1cm4gYWRqdXN0ZWROb2RlOworICAgIH0KKworICAgIGZ1bmN0aW9u
IHRlc3REaXJlY3RUb3VjaGVzKCkKKyAgICB7CisgICAgICAgIGRlYnVnKCdUZXN0aW5nIHNtYWxs
IGRpcmVjdCBoaXRzJyk7CisKKyAgICAgICAgZWxlbWVudCA9IGRvY3VtZW50LmdldEVsZW1lbnRC
eUlkKCdteWJveDEnKTsKKyAgICAgICAgYWRqdXN0ZWROb2RlID0gdGVzdERpcmVjdFRvdWNoKGVs
ZW1lbnQpOworICAgICAgICBzaG91bGRCZSgnYWRqdXN0ZWROb2RlLmlkJywgJ2VsZW1lbnQuaWQn
KTsKKworICAgICAgICBlbGVtZW50ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ215Ym94Micp
OworICAgICAgICBhZGp1c3RlZE5vZGUgPSB0ZXN0RGlyZWN0VG91Y2goZWxlbWVudCk7CisgICAg
ICAgIHNob3VsZEJlKCdhZGp1c3RlZE5vZGUuaWQnLCAnZWxlbWVudC5pZCcpOworICAgIH0KKwor
ICAgIGZ1bmN0aW9uIHRlc3RQcmVmZXJlZFRvdWNoKCkKKyAgICB7CisgICAgICAgIGRlYnVnKCdU
ZXN0aW5nIHByZWZlcmVkIGhpdHMnKTsKKworICAgICAgICBlbGVtZW50MSA9IGRvY3VtZW50Lmdl
dEVsZW1lbnRCeUlkKCdteWJveDEnKTsKKyAgICAgICAgZWxlbWVudDIgPSBkb2N1bWVudC5nZXRF
bGVtZW50QnlJZCgnbXlib3gyJyk7CisgICAgICAgIGFkanVzdGVkTm9kZSA9IHRlc3REb3VibGVU
b3VjaChlbGVtZW50MSwgZWxlbWVudDIsIDApOworICAgICAgICBzaG91bGRCZSgnYWRqdXN0ZWRO
b2RlLmlkJywgJ2VsZW1lbnQxLmlkJyk7CisKKyAgICAgICAgLy8gRmlyc3QgdGVzdCB3YXMgY2Vu
dGVyZWQsIG5vdyBtb3ZlIHRoZSB0ZXN0IGNsb3NlciB0byB0aGUgd3Jvbmcgbm9kZSwgYW5kIGVu
c3VyZSB3ZSBzdGlsbCBnZXQgdGhlIHByZWZlcmVkIG5vZGUuCisgICAgICAgIGFkanVzdGVkTm9k
ZSA9IHRlc3REb3VibGVUb3VjaChlbGVtZW50MSwgZWxlbWVudDIsIDUpOworICAgICAgICBzaG91
bGRCZSgnYWRqdXN0ZWROb2RlLmlkJywgJ2VsZW1lbnQxLmlkJyk7CisKKyAgICAgICAgYWRqdXN0
ZWROb2RlID0gdGVzdERvdWJsZVRvdWNoKGVsZW1lbnQxLCBlbGVtZW50MiwgMTApOworICAgICAg
ICBzaG91bGRCZSgnYWRqdXN0ZWROb2RlLmlkJywgJ2VsZW1lbnQxLmlkJyk7CisgICAgfQorCisg
ICAgZnVuY3Rpb24gcnVuVGVzdHMoKQorICAgIHsKKyAgICAgICAgaWYgKHdpbmRvdy5sYXlvdXRU
ZXN0Q29udHJvbGxlciAmJiB3aW5kb3cuaW50ZXJuYWxzICYmIGludGVybmFscy50b3VjaE5vZGVB
ZGp1c3RlZFRvQmVzdE5vZGVGb3JHZXN0dXJlVGFwKSB7CisgICAgICAgICAgICBkZXNjcmlwdGlv
bignVGVzdCB0aGUgY2FzZSB3aGVyZSBhIGNsaWNrYWJsZSB0YXJnZXQgaXMgbmVzdGVkIGluc2lk
ZSBhIGRvY3VtZW50IHRoYXQgaXMgbW9uaXRvcmluZyBjbGlja3MuIFRoZSB0YXJnZXQgd2l0aCB0
aGUgbG9jYWwgZXZlbnQtaGFuZGxlciBzaG91bGQgYmUgY2hvc2VuIGlmIG11bHRpcGxlIHRhcmdl
dHMgYXJlIHRvdWNoZWQuJyk7CisgICAgICAgICAgICBsYXlvdXRUZXN0Q29udHJvbGxlci5kdW1w
QXNUZXh0KCk7CisgICAgICAgICAgICBsYXlvdXRUZXN0Q29udHJvbGxlci53YWl0VW50aWxEb25l
KCk7CisgICAgICAgICAgICB0ZXN0RGlyZWN0VG91Y2hlcygpOworICAgICAgICAgICAgdGVzdFBy
ZWZlcmVkVG91Y2goKTsKKyAgICAgICAgICAgIGlzU3VjY2Vzc2Z1bGx5UGFyc2VkKCk7CisgICAg
ICAgICAgICBsYXlvdXRUZXN0Q29udHJvbGxlci5ub3RpZnlEb25lKCk7CisgICAgICAgIH0KKyAg
ICB9Cis8L3NjcmlwdD4KKzwvYm9keT4KKzwvaHRtbD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBm
aWxlCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy90b3VjaGFkanVzdG1lbnQvdG91Y2gtaW5saW5l
cy1leHBlY3RlZC50eHQgYi9MYXlvdXRUZXN0cy90b3VjaGFkanVzdG1lbnQvdG91Y2gtaW5saW5l
cy1leHBlY3RlZC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uN2UxNGJmZTU2NTE1MWNlZjg5ZWNjYWZmZGI4MTRh
NTI3MTMyZWIyZgotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL3RvdWNoYWRqdXN0bWVu
dC90b3VjaC1pbmxpbmVzLWV4cGVjdGVkLnR4dApAQCAtMCwwICsxLDI5IEBACitzb21lIGxpbmsK
K3NvbWUgbGluayBicmVha2luZyBsaW5lcyBhbmQgbGluaworaG9sYSBtdW5kbyEgYSBzcGxpdCB1
cCBsaW5rCitoZWxsbyB3b3JsZCBzb21lIGxpbmsgYWxzbyBicmVha2luZworaGkgdGhlcmUgc29t
ZSBsaW5rIHRoYXQgaXMgYnJlYWtpbmcgbXVsdGlwbGUgbGluZXMganVzdCBmb3IgdGhlIHZlcnkg
ZnVuIG9mIGl0CisKK1Rlc3QgdG91Y2gtYWRqdXN0bWVudCBvbiBpbmxpbmUgbGlua3MuIE1ha2lu
ZyBzdXJlIHdlIGNhbiBoaXQgb3ZlciBsaW5lLWJyZWFrcywgYW5kIGNhbiBtaXNzIHdoZW4gdGFw
cGluZyBiZXR3ZWVuIHBhcnRzIG9mIGEgbGluZS1icm9rZW4gbGluay4KKworT24gc3VjY2Vzcywg
eW91IHdpbGwgc2VlIGEgc2VyaWVzIG9mICJQQVNTIiBtZXNzYWdlcywgZm9sbG93ZWQgYnkgIlRF
U1QgQ09NUExFVEUiLgorCisKK1Rlc3Qgc29tZSBkaXJlY3QgaGl0cworUEFTUyBhZGp1c3RlZE5v
ZGUuaWQgaXMgIjEiCitQQVNTIGFkanVzdGVkTm9kZS5pZCBpcyAiMiIKK1BBU1MgYWRqdXN0ZWRO
b2RlLmlkIGlzICI0IgorUEFTUyBhZGp1c3RlZE5vZGUuaWQgaXMgIjYiCitUZXN0IGEgZmV3IGRp
cmVjdCBtaXNzZXMKK1BBU1MgYWRqdXN0ZWROb2RlLmlkIGlzICIiCitQQVNTIGFkanVzdGVkTm9k
ZS5pZCBpcyAiIgorVGVzdCBzb21lIGluLWRpcmVjdCBoaXRzCitQQVNTIGFkanVzdGVkTm9kZS5p
ZCBpcyAiMiIKK1BBU1MgYWRqdXN0ZWROb2RlLmlkIGlzICIzIgorUEFTUyBhZGp1c3RlZE5vZGUu
aWQgaXMgIjQiCitQQVNTIGFkanVzdGVkTm9kZS5pZCBpcyAiNCIKK1BBU1MgYWRqdXN0ZWROb2Rl
LmlkIGlzICI2IgorUEFTUyBzdWNjZXNzZnVsbHlQYXJzZWQgaXMgdHJ1ZQorCitURVNUIENPTVBM
RVRFCisKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3RvdWNoYWRqdXN0bWVudC90b3VjaC1pbmxp
bmVzLmh0bWwgYi9MYXlvdXRUZXN0cy90b3VjaGFkanVzdG1lbnQvdG91Y2gtaW5saW5lcy5odG1s
Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAuLjJiYjU3YWNiNjkwYThlZjFiZmEzNWVmY2MyZWUzYmYxZDAyNjM1ZjAKLS0t
IC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy90b3VjaGFkanVzdG1lbnQvdG91Y2gtaW5saW5l
cy5odG1sCkBAIC0wLDAgKzEsMTAwIEBACis8aHRtbD4KKzxoZWFkPgorICAgIDxzY3JpcHQgc3Jj
PSIuLi9mYXN0L2pzL3Jlc291cmNlcy9qcy10ZXN0LXByZS5qcyI+PC9zY3JpcHQ+Cis8L2hlYWQ+
Cis8Ym9keSBvbmxvYWQ9InJ1blRlc3RzKCkiPgorCis8cCBzdHlsZT0id2lkdGg6IDEwZW07Ij4K
KzxhIGlkPSIxIiBocmVmPSIjMSI+c29tZSBsaW5rPC9hPjxicj4KKzxhIGlkPSIyIiBocmVmPSIj
MiI+c29tZSBsaW5rIGJyZWFraW5nIGxpbmVzPC9hPiBhbmQgPGEgaWQ9IjMiIGhyZWY9IiMzIj5s
aW5rPC9hPjxicj4KK2hvbGEgbXVuZG8hIDxhIGlkPSI0IiBocmVmPSIjNCI+YSBzcGxpdCB1cCBs
aW5rPC9hPjxicj4KK2hlbGxvIHdvcmxkIDxhIGlkPSI1IiBocmVmPSIjNSI+c29tZSBsaW5rIGFs
c28gYnJlYWtpbmc8L2E+PGJyPgoraGkgdGhlcmUgPGEgaWQ9IjYiIGhyZWY9IiM2Ij5zb21lIGxp
bmsgdGhhdCBpcyBicmVha2luZyBtdWx0aXBsZSBsaW5lcyBqdXN0IGZvciB0aGUgdmVyeSBmdW4g
b2YgaXQ8L2E+PGJyPjxicj4KKzwvcD4KKworCis8cCBpZD0nZGVzY3JpcHRpb24nPjwvcD4KKzxk
aXYgaWQ9J2NvbnNvbGUnPjwvZGl2PgorCis8c2NyaXB0PgorICAgIHZhciBlbGVtZW50OworICAg
IHZhciBhZGp1c3RlZE5vZGU7CisgICAgZnVuY3Rpb24gdGVzdFJvdW5kVG91Y2goeCwgeSwgcikK
KyAgICB7CisgICAgICAgIHZhciB4ID0geCAtIHI7CisgICAgICAgIHZhciB5ID0geSAtIHI7Cisg
ICAgICAgIHZhciB3ID0gciAqIDI7CisgICAgICAgIHZhciBoID0gciAqIDI7CisgICAgICAgIHZh
ciBhZGp1c3RlZE5vZGUgPSBpbnRlcm5hbHMudG91Y2hOb2RlQWRqdXN0ZWRUb0Jlc3ROb2RlRm9y
R2VzdHVyZVRhcCh4LCB5LCB3LCBoLCBkb2N1bWVudCk7CisgICAgICAgIGlmIChhZGp1c3RlZE5v
ZGUubm9kZVR5cGUgPT0gMykgLy8gVEVYVCBub2RlCisgICAgICAgICAgICBhZGp1c3RlZE5vZGUg
PSBhZGp1c3RlZE5vZGUucGFyZW50Tm9kZTsKKyAgICAgICAgcmV0dXJuIGFkanVzdGVkTm9kZTsK
KyAgICB9CisKKyAgICBmdW5jdGlvbiB0ZXN0RGlyZWN0VG91Y2hlcygpCisgICAgeworICAgICAg
ICBkZWJ1ZygnVGVzdCBzb21lIGRpcmVjdCBoaXRzJyk7CisKKyAgICAgICAgYWRqdXN0ZWROb2Rl
ID0gdGVzdFJvdW5kVG91Y2goMzAsIDIwLCA4KQorICAgICAgICBzaG91bGRCZUVxdWFsVG9TdHJp
bmcoJ2FkanVzdGVkTm9kZS5pZCcsICcxJyk7CisKKyAgICAgICAgYWRqdXN0ZWROb2RlID0gdGVz
dFJvdW5kVG91Y2goMzAsIDYwLCA4KQorICAgICAgICBzaG91bGRCZUVxdWFsVG9TdHJpbmcoJ2Fk
anVzdGVkTm9kZS5pZCcsICcyJyk7CisKKyAgICAgICAgYWRqdXN0ZWROb2RlID0gdGVzdFJvdW5k
VG91Y2goMTIwLCA4MCwgOCkKKyAgICAgICAgc2hvdWxkQmVFcXVhbFRvU3RyaW5nKCdhZGp1c3Rl
ZE5vZGUuaWQnLCAnNCcpOworCisgICAgICAgIGFkanVzdGVkTm9kZSA9IHRlc3RSb3VuZFRvdWNo
KDgwLCAxODAsIDgpCisgICAgICAgIHNob3VsZEJlRXF1YWxUb1N0cmluZygnYWRqdXN0ZWROb2Rl
LmlkJywgJzYnKTsKKyAgICB9CisKKyAgICBmdW5jdGlvbiB0ZXN0RGlyZWN0TWlzc2VzKCkKKyAg
ICB7CisgICAgICAgIGRlYnVnKCdUZXN0IGEgZmV3IGRpcmVjdCBtaXNzZXMnKTsKKworICAgICAg
ICBhZGp1c3RlZE5vZGUgPSB0ZXN0Um91bmRUb3VjaCg1NiwgNjAsIDgpCisgICAgICAgIHNob3Vs
ZEJlRXF1YWxUb1N0cmluZygnYWRqdXN0ZWROb2RlLmlkJywgJycpOworCisgICAgICAgIGFkanVz
dGVkTm9kZSA9IHRlc3RSb3VuZFRvdWNoKDIwLCAxNjAsIDQpCisgICAgICAgIHNob3VsZEJlRXF1
YWxUb1N0cmluZygnYWRqdXN0ZWROb2RlLmlkJywgJycpOworCisgICAgfQorCisgICAgZnVuY3Rp
b24gdGVzdEluZGlyZWN0VG91Y2hlcygpCisgICAgeworICAgICAgICBkZWJ1ZygnVGVzdCBzb21l
IGluLWRpcmVjdCBoaXRzJyk7CisKKyAgICAgICAgYWRqdXN0ZWROb2RlID0gdGVzdFJvdW5kVG91
Y2goNTYsIDYwLCAyMCkKKyAgICAgICAgc2hvdWxkQmVFcXVhbFRvU3RyaW5nKCdhZGp1c3RlZE5v
ZGUuaWQnLCAnMicpOworCisgICAgICAgIGFkanVzdGVkTm9kZSA9IHRlc3RSb3VuZFRvdWNoKDg1
LCA4MCwgMjApCisgICAgICAgIHNob3VsZEJlRXF1YWxUb1N0cmluZygnYWRqdXN0ZWROb2RlLmlk
JywgJzMnKTsKKworICAgICAgICBhZGp1c3RlZE5vZGUgPSB0ZXN0Um91bmRUb3VjaCgxMjAsIDYw
LCAyMCkKKyAgICAgICAgc2hvdWxkQmVFcXVhbFRvU3RyaW5nKCdhZGp1c3RlZE5vZGUuaWQnLCAn
NCcpOworCisgICAgICAgIGFkanVzdGVkTm9kZSA9IHRlc3RSb3VuZFRvdWNoKDQwLCAxMDAsIDIw
KQorICAgICAgICBzaG91bGRCZUVxdWFsVG9TdHJpbmcoJ2FkanVzdGVkTm9kZS5pZCcsICc0Jyk7
CisKKyAgICAgICAgYWRqdXN0ZWROb2RlID0gdGVzdFJvdW5kVG91Y2goMjAsIDE2NSwgMjApCisg
ICAgICAgIHNob3VsZEJlRXF1YWxUb1N0cmluZygnYWRqdXN0ZWROb2RlLmlkJywgJzYnKTsKKwor
ICAgIH0KKworICAgIGZ1bmN0aW9uIHJ1blRlc3RzKCkKKyAgICB7CisgICAgICAgIGlmICh3aW5k
b3cubGF5b3V0VGVzdENvbnRyb2xsZXIgJiYgd2luZG93LmludGVybmFscworICAgICAgICAmJiBp
bnRlcm5hbHMudG91Y2hOb2RlQWRqdXN0ZWRUb0Jlc3ROb2RlRm9yR2VzdHVyZVRhcCkgeworICAg
ICAgICAgICAgZGVzY3JpcHRpb24oJ1Rlc3QgdG91Y2gtYWRqdXN0bWVudCBvbiBpbmxpbmUgbGlu
a3MuIE1ha2luZyBzdXJlIHdlIGNhbiBoaXQgb3ZlciBsaW5lLWJyZWFrcywgYW5kIGNhbiBtaXNz
IHdoZW4gdGFwcGluZyBiZXR3ZWVuIHBhcnRzIG9mIGEgbGluZS1icm9rZW4gbGluay4nKTsKKyAg
ICAgICAgICAgIGxheW91dFRlc3RDb250cm9sbGVyLmR1bXBBc1RleHQoKTsKKyAgICAgICAgICAg
IGxheW91dFRlc3RDb250cm9sbGVyLndhaXRVbnRpbERvbmUoKTsKKyAgICAgICAgICAgIHRlc3RE
aXJlY3RUb3VjaGVzKCk7CisgICAgICAgICAgICB0ZXN0RGlyZWN0TWlzc2VzKCk7CisgICAgICAg
ICAgICB0ZXN0SW5kaXJlY3RUb3VjaGVzKCk7CisgICAgICAgICAgICBpc1N1Y2Nlc3NmdWxseVBh
cnNlZCgpOworICAgICAgICAgICAgbGF5b3V0VGVzdENvbnRyb2xsZXIubm90aWZ5RG9uZSgpOwor
ICAgICAgICB9CisgICAgfQorPC9zY3JpcHQ+Cis8L2JvZHk+Cis8L2h0bWw+ClwgTm8gbmV3bGlu
ZSBhdCBlbmQgb2YgZmlsZQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>129259</attachid>
            <date>2012-02-28 08:32:19 -0800</date>
            <delta_ts>2012-03-02 05:31:01 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>Patch11</filename>
            <type>text/plain</type>
            <size>68291</size>
            <attacher name="Allan Sandfeld Jensen">allan.jensen</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL0NoYW5nZUxvZyBiL0xheW91dFRlc3RzL0NoYW5nZUxv
ZwppbmRleCA3Y2EwZGNjLi4xZmZlZjhjIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9DaGFuZ2VM
b2cKKysrIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjcgQEAKKzIwMTItMDIt
MjggIEFsbGFuIFNhbmRmZWxkIEplbnNlbiAgPGFsbGFuLmplbnNlbkBub2tpYS5jb20+CisKKyAg
ICAgICAgU2VsZWN0IGJlc3QgdGFyZ2V0IGZvciB0YXAgZ2VzdHVyZS4KKyAgICAgICAgaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTc4ODAxCisKKyAgICAgICAgUmV2aWV3
ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVGVzdCBvZiB0b3VjaCBhZGp1c3RtZW50
cy4gVGVzdHMgc2V2ZXJhbCBib3RoIG5vcm1hbCBhbmQgdHJpY2t5IGNhc2VzLgorICAgICAgICBU
aGUgdGVzdHMgYXJlIG5vdCBleGhhdXN0aXZlIHRob3VnaC4KKworICAgICAgICAqIHBsYXRmb3Jt
L2Nocm9taXVtL3Rlc3RfZXhwZWN0YXRpb25zLnR4dDoKKyAgICAgICAgKiBwbGF0Zm9ybS9lZmwv
U2tpcHBlZDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ndGsvU2tpcHBlZDoKKyAgICAgICAgKiBwbGF0
Zm9ybS9tYWMvU2tpcHBlZDoKKyAgICAgICAgKiBwbGF0Zm9ybS93aW4vU2tpcHBlZDoKKyAgICAg
ICAgKiB0b3VjaGFkanVzdG1lbnQvZXZlbnQtdHJpZ2dlcmVkLXdpZGdldHMtZXhwZWN0ZWQudHh0
OiBBZGRlZC4KKyAgICAgICAgKiB0b3VjaGFkanVzdG1lbnQvZXZlbnQtdHJpZ2dlcmVkLXdpZGdl
dHMuaHRtbDogQWRkZWQuCisgICAgICAgICogdG91Y2hhZGp1c3RtZW50L2h0bWwtbGFiZWwtZXhw
ZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAgICAgKiB0b3VjaGFkanVzdG1lbnQvaHRtbC1sYWJlbC5o
dG1sOiBBZGRlZC4KKyAgICAgICAgKiB0b3VjaGFkanVzdG1lbnQvbmVzdGVkLXRvdWNoLWV4cGVj
dGVkLnR4dDogQWRkZWQuCisgICAgICAgICogdG91Y2hhZGp1c3RtZW50L25lc3RlZC10b3VjaC5o
dG1sOiBBZGRlZC4KKyAgICAgICAgKiB0b3VjaGFkanVzdG1lbnQvdG91Y2gtaW5saW5lcy1leHBl
Y3RlZC50eHQ6IEFkZGVkLgorICAgICAgICAqIHRvdWNoYWRqdXN0bWVudC90b3VjaC1pbmxpbmVz
Lmh0bWw6IEFkZGVkLgorCiAyMDEyLTAyLTI4ICBOaWtvbGFzIFppbW1lcm1hbm4gIDxuemltbWVy
bWFubkByaW0uY29tPgogCiAgICAgICAgIFJlYmFzZWxpbmUgR3RrIHJlc3VsdHMgYWZ0ZXIgcjEw
OTA5Ny4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3BsYXRmb3JtL2Nocm9taXVtL3Rlc3RfZXhw
ZWN0YXRpb25zLnR4dCBiL0xheW91dFRlc3RzL3BsYXRmb3JtL2Nocm9taXVtL3Rlc3RfZXhwZWN0
YXRpb25zLnR4dAppbmRleCBkZWFjM2NlLi5kYmE3OTVhIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0
cy9wbGF0Zm9ybS9jaHJvbWl1bS90ZXN0X2V4cGVjdGF0aW9ucy50eHQKKysrIGIvTGF5b3V0VGVz
dHMvcGxhdGZvcm0vY2hyb21pdW0vdGVzdF9leHBlY3RhdGlvbnMudHh0CkBAIC0xMTIsNiArMTEy
LDkgQEAgQlVHQ1IxMDM5MzkgU0tJUCA6IGh0dHAvdGVzdHMvYXBwY2FjaGUvd3JvbmctY29udGVu
dC10eXBlLmh0bWwgPSBURVhUCiAvLyBWaWJyYXRpb24gQVBJIGlzIG5vdCBzdXBwb3J0ZWQgeWV0
IGluIHRoZSBjaHJvbWl1bSBwb3J0LgogQlVHV0s3MjAxMCBTS0lQIDogZmFzdC9kb20vbmF2aWdh
dG9yLXZpYnJhdGlvbi5odG1sID0gRkFJTAogCisvLyBUb3VjaCBBZGp1c3RtZW50IGlzIG5vdCBz
dXBwb3J0ZWQgeWV0IGluIHRoZSBjaHJvbWl1bSBwb3J0LgorQlVHV0s3ODgwMSBTS0lQIDogdG91
Y2hhZGp1c3RtZW50LyA9IEZBSUwKKwogLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIC8vIFdPTlRGSVggVEVTVFMKIC8v
IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9lZmwvU2tpcHBlZCBi
L0xheW91dFRlc3RzL3BsYXRmb3JtL2VmbC9Ta2lwcGVkCmluZGV4IGQ2MzIwOTkuLmM1NGY5Njkg
MTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL3BsYXRmb3JtL2VmbC9Ta2lwcGVkCisrKyBiL0xheW91
dFRlc3RzL3BsYXRmb3JtL2VmbC9Ta2lwcGVkCkBAIC0yNzcwLDYgKzI3NzAsMTAgQEAgZmFzdC9l
dmVudHMvcGFnZS12aXNpYmlsaXR5LWlmcmFtZS1kZWxldGUtdGVzdC5odG1sCiBmYXN0L2V2ZW50
cy9wYWdlLXZpc2liaWxpdHktaWZyYW1lLXByb3BhZ2F0aW9uLXRlc3QuaHRtbAogZmFzdC9ldmVu
dHMvcGFnZS12aXNpYmlsaXR5LXRyYW5zaXRpb24tdGVzdC5odG1sCiAKKyMgVG91Y2ggYWRqdXN0
bWVudCBub3QgZW5hYmxlZAorIyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9Nzg4MDEKK3RvdWNoYWRqdXN0bWVudAorCiAjIFRoZXJlIGFyZSBubyBleHBlY3RlZCByZXN1
bHQgc2V0IHlldC4KIGFuaW1hdGlvbnMvYWRkaXRpdmUtdHJhbnNmb3JtLWFuaW1hdGlvbnMuaHRt
bAogYW5pbWF0aW9ucy9hbmltYXRpb24tYm9yZGVyLW92ZXJmbG93Lmh0bWwKQEAgLTI4NzIsMyAr
Mjg3Niw0IEBAIGh0dHAvdGVzdHMvbWlzYy9zbG93LWxvYWRpbmctaW1hZ2UtaW4tcGF0dGVybi5o
dG1sCiBtZWRpYS92aWRlby1jb2xvcnNwYWNlLXl1djQyMC5odG1sCiBtZWRpYS92aWRlby1jb2xv
cnNwYWNlLXl1djQyMi5odG1sCiBwZXJmL25lc3RlZC1jb21iaW5lZC1zZWxlY3RvcnMuaHRtbAor
CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9tYWMvU2tpcHBlZCBiL0xheW91dFRl
c3RzL3BsYXRmb3JtL21hYy9Ta2lwcGVkCmluZGV4IGFlZDA2NGQuLjczOTE1NGUgMTAwNjQ0Ci0t
LSBhL0xheW91dFRlc3RzL3BsYXRmb3JtL21hYy9Ta2lwcGVkCisrKyBiL0xheW91dFRlc3RzL3Bs
YXRmb3JtL21hYy9Ta2lwcGVkCkBAIC01NjMsMyArNTYzLDcgQEAgZmFzdC9tdXRhdGlvbi9lbmQt
b2YtdGFzay1kZWxpdmVyeS5odG1sCiAjIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD03MjAxMAogIyBOZWVkcyBQYWdlQ2xpZW50czo6dmlicmF0aW9uQ2xpZW50KCkgaW1w
bGVtZW50YXRpb24uCiBmYXN0L2RvbS9uYXZpZ2F0b3ItdmlicmF0aW9uLmh0bWwKKworIyBUb3Vj
aCBhZGp1c3RtZW50IG5vdCBlbmFibGVkCisjIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD03ODgwMQordG91Y2hhZGp1c3RtZW50CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0
cy9wbGF0Zm9ybS93aW4vU2tpcHBlZCBiL0xheW91dFRlc3RzL3BsYXRmb3JtL3dpbi9Ta2lwcGVk
CmluZGV4IDI0Yjc2ODIuLjBiZDQ5NzEgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL3BsYXRmb3Jt
L3dpbi9Ta2lwcGVkCisrKyBiL0xheW91dFRlc3RzL3BsYXRmb3JtL3dpbi9Ta2lwcGVkCkBAIC0x
NjU4LDMgKzE2NTgsNyBAQCBmYXN0L3JlcGFpbnQvdHJhbnNmb3JtLWFic29sdXRlLWluLXBvc2l0
aW9uZWQtY29udGFpbmVyLmh0bWwKIAogI1ZpYnJhdGlvbiBBUEkgaXMgbm90IGltcGxlbWVudGVk
LgogZmFzdC9kb20vbmF2aWdhdG9yLXZpYnJhdGlvbi5odG1sCisKKyMgVG91Y2ggYWRqdXN0bWVu
dCBub3QgZW5hYmxlZAorIyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
Nzg4MDEKK3RvdWNoYWRqdXN0bWVudApkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvdG91Y2hhZGp1
c3RtZW50L2V2ZW50LXRyaWdnZXJlZC13aWRnZXRzLWV4cGVjdGVkLnR4dCBiL0xheW91dFRlc3Rz
L3RvdWNoYWRqdXN0bWVudC9ldmVudC10cmlnZ2VyZWQtd2lkZ2V0cy1leHBlY3RlZC50eHQKbmV3
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjk0ZTIwZQotLS0gL2Rldi9udWxsCisr
KyBiL0xheW91dFRlc3RzL3RvdWNoYWRqdXN0bWVudC9ldmVudC10cmlnZ2VyZWQtd2lkZ2V0cy1l
eHBlY3RlZC50eHQKQEAgLTAsMCArMSwzMSBAQAorVGVzdCB2YXJpb3VzIHdheXMgdG8gdHJpZ2dl
ciBpbnB1dC13aWRnZXRzLiBPbiBhIHRvdWNoIGludGVyZmFjZSwgYWxsIHRoZSBhY3Rpb25zIHNo
b3VsZCBiZSB0cmlnZ2VyYWJsZSB3aXRoIGVpdGhlciBhIHRvdWNoIGRvd24gb3IgYSB0b3VjaCB0
YXAuCisKK09uIHN1Y2Nlc3MsIHlvdSB3aWxsIHNlZSBhIHNlcmllcyBvZiAiUEFTUyIgbWVzc2Fn
ZXMsIGZvbGxvd2VkIGJ5ICJURVNUIENPTVBMRVRFIi4KKworCitUZXN0aW5nIHNtYWxsIGRpcmVj
dCBoaXRzCitQQVNTIGFkanVzdGVkTm9kZS5pZCBpcyBlbGVtZW50LmlkCitQQVNTIGFkanVzdGVk
Tm9kZS5pZCBpcyBlbGVtZW50LmlkCitQQVNTIGFkanVzdGVkTm9kZS5pZCBpcyBlbGVtZW50Lmlk
CitQQVNTIGFkanVzdGVkTm9kZS5pZCBpcyBub3QgZWxlbWVudC5pZAorUEFTUyBhZGp1c3RlZE5v
ZGUuaWQgaXMgZWxlbWVudC5pZAorVGVzdGluZyBsYXJnZSBkaXJlY3QgaGl0cworUEFTUyBhZGp1
c3RlZE5vZGUuaWQgaXMgZWxlbWVudC5pZAorUEFTUyBhZGp1c3RlZE5vZGUuaWQgaXMgZWxlbWVu
dC5pZAorUEFTUyBhZGp1c3RlZE5vZGUuaWQgaXMgZWxlbWVudC5pZAorUEFTUyBhZGp1c3RlZE5v
ZGUuaWQgaXMgbm90IGVsZW1lbnQuaWQKK1BBU1MgYWRqdXN0ZWROb2RlLmlkIGlzIGVsZW1lbnQu
aWQKK1Rlc3RpbmcgbGFyZ2UgZGlyZWN0IGhpdHMKK1BBU1MgYWRqdXN0ZWROb2RlLmlkIGlzIGVs
ZW1lbnQuaWQKK1BBU1MgYWRqdXN0ZWROb2RlLmlkIGlzIGVsZW1lbnQuaWQKK1BBU1MgYWRqdXN0
ZWROb2RlLmlkIGlzIGVsZW1lbnQuaWQKK1BBU1MgYWRqdXN0ZWROb2RlLmlkIGlzIG5vdCBlbGVt
ZW50LmlkCitQQVNTIGFkanVzdGVkTm9kZS5pZCBpcyBlbGVtZW50LmlkCitQQVNTIHN1Y2Nlc3Nm
dWxseVBhcnNlZCBpcyB0cnVlCisKK1RFU1QgQ09NUExFVEUKK0ZvY3VzIGhlcmUgc2hvdWxkIGdp
dmUgYSB0ZXh0IGlucHV0LWZpZWxkLgorTW91c2Utb3ZlciBoZXJlIHNob3VsZCBnaXZlIGEgdGV4
dCBpbnB1dC1maWVsZC4KK0hvdmVyaW5nIGhlcmUgc2hvdWxkIGdpdmUgYSB0ZXh0IGlucHV0LWZp
ZWxkLiAKK0ZvY3VzaW5nIGhlcmUgc2hvdWxkIG9ubHkgZ2l2ZSBmb2N1cyBvdXRsaW5lLgorRm9j
dXNpbmcgaGVyZSBzaG91bGQgZ2l2ZSBhIHRleHQgaW5wdXQtZmllbGQuCmRpZmYgLS1naXQgYS9M
YXlvdXRUZXN0cy90b3VjaGFkanVzdG1lbnQvZXZlbnQtdHJpZ2dlcmVkLXdpZGdldHMuaHRtbCBi
L0xheW91dFRlc3RzL3RvdWNoYWRqdXN0bWVudC9ldmVudC10cmlnZ2VyZWQtd2lkZ2V0cy5odG1s
Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJiMWJmODgKLS0tIC9kZXYvbnVs
bAorKysgYi9MYXlvdXRUZXN0cy90b3VjaGFkanVzdG1lbnQvZXZlbnQtdHJpZ2dlcmVkLXdpZGdl
dHMuaHRtbApAQCAtMCwwICsxLDE2OSBAQAorPGh0bWw+Cis8aGVhZD4KKzxzdHlsZT4KKyAgICAu
Ym94IHsgYm9yZGVyOiAxcHggc29saWQgYmxhY2s7IGJvcmRlci1yYWRpdXM6IDVweCA1cHg7IG1h
cmdpbjogMWVtOyBtYXgtd2lkdGg6IDQwZW07IH0KKzwvc3R5bGU+CisKKzxzY3JpcHQgc3JjPSIu
Li9mYXN0L2pzL3Jlc291cmNlcy9qcy10ZXN0LXByZS5qcyI+PC9zY3JpcHQ+CisKKzwvaGVhZD4K
KworPGJvZHkgb25sb2FkPSJydW5UZXN0cygpIj4KKworPHAgaWQ9J2Rlc2NyaXB0aW9uJz48L3A+
CisKKzxkaXYgaWQ9J2NvbnNvbGUnPjwvZGl2PgorCis8c2NyaXB0PgorICAgIHZhciBlbGVtZW50
OworICAgIHZhciBhZGp1c3RlZE5vZGU7CisgICAgZnVuY3Rpb24gZmluZEFic29sdXRlUG9zaXRp
b24obm9kZSkgeworICAgICAgICB2YXIgcG9zID0gbmV3IE9iamVjdCgpOworICAgICAgICBwb3Mu
bGVmdCA9IDA7IHBvcy50b3AgPSAwOworICAgICAgICBkbyB7CisgICAgICAgICAgICBwb3MubGVm
dCArPSBub2RlLm9mZnNldExlZnQ7CisgICAgICAgICAgICBwb3MudG9wICs9IG5vZGUub2Zmc2V0
VG9wOworICAgICAgICB9IHdoaWxlIChub2RlID0gbm9kZS5vZmZzZXRQYXJlbnQpOworICAgICAg
ICByZXR1cm4gcG9zOworICAgIH0KKworICAgIGZ1bmN0aW9uIHRlc3REaXJlY3RUb3VjaChlbGVt
ZW50KQorICAgIHsKKyAgICAgICAgdmFyIHBvcyA9IGZpbmRBYnNvbHV0ZVBvc2l0aW9uKGVsZW1l
bnQpOworICAgICAgICB2YXIgeCA9IHBvcy5sZWZ0ICsgZWxlbWVudC5jbGllbnRXaWR0aC8yIC0g
MTsKKyAgICAgICAgdmFyIHkgPSBwb3MudG9wICsgZWxlbWVudC5jbGllbnRIZWlnaHQvMiAtIDE7
CisgICAgICAgIHZhciB3ID0gMzsKKyAgICAgICAgdmFyIGggPSAzOworICAgICAgICBhZGp1c3Rl
ZE5vZGUgPSBpbnRlcm5hbHMudG91Y2hOb2RlQWRqdXN0ZWRUb0Jlc3RDbGlja2FibGVOb2RlKHgs
IHksIHcsIGgsIGRvY3VtZW50KTsKKworICAgICAgICBpZiAoYWRqdXN0ZWROb2RlLm5vZGVUeXBl
ID09IDMpIC8vIFRFWFQgbm9kZQorICAgICAgICAgICAgYWRqdXN0ZWROb2RlID0gYWRqdXN0ZWRO
b2RlLnBhcmVudE5vZGU7CisgICAgfQorCisgICAgZnVuY3Rpb24gdGVzdERpcmVjdEZhdEZpbmdl
cihlbGVtZW50KQorICAgIHsKKyAgICAgICAgdmFyIHBvcyA9IGZpbmRBYnNvbHV0ZVBvc2l0aW9u
KGVsZW1lbnQpOworICAgICAgICB2YXIgeCA9IHBvcy5sZWZ0ICsgZWxlbWVudC5jbGllbnRXaWR0
aC8yIC0gMTsKKyAgICAgICAgdmFyIHkgPSBwb3MudG9wIC0gNSA7CisgICAgICAgIHZhciB3ID0g
ZWxlbWVudC5jbGllbnRIZWlnaHQ7CisgICAgICAgIHZhciBoID0gZWxlbWVudC5jbGllbnRIZWln
aHQgKyAxMDsKKyAgICAgICAgYWRqdXN0ZWROb2RlID0gaW50ZXJuYWxzLnRvdWNoTm9kZUFkanVz
dGVkVG9CZXN0Q2xpY2thYmxlTm9kZSh4LCB5LCB3LCBoLCBkb2N1bWVudCk7CisgICAgICAgIGlm
IChhZGp1c3RlZE5vZGUubm9kZVR5cGUgPT0gMykgLy8gVEVYVCBub2RlCisgICAgICAgICAgICBh
ZGp1c3RlZE5vZGUgPSBhZGp1c3RlZE5vZGUucGFyZW50Tm9kZTsKKyAgICB9CisKKyAgICBmdW5j
dGlvbiB0ZXN0SW5kaXJlY3RGYXRGaW5nZXIoZWxlbWVudCkKKyAgICB7CisgICAgICAgIHZhciBw
b3MgPSBmaW5kQWJzb2x1dGVQb3NpdGlvbihlbGVtZW50KTsKKyAgICAgICAgdmFyIHggPSBwb3Mu
bGVmdCArIGVsZW1lbnQuY2xpZW50V2lkdGgvMiAtIDE7CisgICAgICAgIHZhciB5ID0gcG9zLnRv
cCAtIDc7CisgICAgICAgIHZhciB3ID0gMTA7CisgICAgICAgIHZhciBoID0gMTA7CisgICAgICAg
IGFkanVzdGVkTm9kZSA9IGludGVybmFscy50b3VjaE5vZGVBZGp1c3RlZFRvQmVzdENsaWNrYWJs
ZU5vZGUoeCwgeSwgdywgaCwgZG9jdW1lbnQpOworICAgICAgICBpZiAoYWRqdXN0ZWROb2RlLm5v
ZGVUeXBlID09IDMpIC8vIFRFWFQgbm9kZQorICAgICAgICAgICAgYWRqdXN0ZWROb2RlID0gYWRq
dXN0ZWROb2RlLnBhcmVudE5vZGU7CisgICAgfQorCisgICAgZnVuY3Rpb24gdGVzdFRvdWNoSGl0
KGVsZW1lbnRpZCwgdG91Y2hUeXBlKSB7CisgICAgICAgIGVsZW1lbnQgPSBkb2N1bWVudC5nZXRF
bGVtZW50QnlJZChlbGVtZW50aWQpOworICAgICAgICB0b3VjaFR5cGUoZWxlbWVudCk7CisgICAg
ICAgIHNob3VsZEJlKCdhZGp1c3RlZE5vZGUuaWQnLCAnZWxlbWVudC5pZCcpOworICAgIH0KKwor
ICAgIGZ1bmN0aW9uIHRlc3RUb3VjaE1pc3MoZWxlbWVudGlkLCB0b3VjaFR5cGUpIHsKKyAgICAg
ICAgZWxlbWVudCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGVsZW1lbnRpZCk7CisgICAgICAg
IHRvdWNoVHlwZShlbGVtZW50KTsKKyAgICAgICAgc2hvdWxkTm90QmUoJ2FkanVzdGVkTm9kZS5p
ZCcsICdlbGVtZW50LmlkJyk7CisgICAgfQorCisgICAgZnVuY3Rpb24gdGVzdERpcmVjdFRvdWNo
ZXMoKQorICAgIHsKKyAgICAgICAgZGVidWcoJ1Rlc3Rpbmcgc21hbGwgZGlyZWN0IGhpdHMnKTsK
KyAgICAgICAgdGVzdFRvdWNoSGl0KCd0ZXN0MScsdGVzdERpcmVjdFRvdWNoKTsKKyAgICAgICAg
dGVzdFRvdWNoSGl0KCd0ZXN0MicsdGVzdERpcmVjdFRvdWNoKTsKKyAgICAgICAgdGVzdFRvdWNo
SGl0KCd0ZXN0MycsdGVzdERpcmVjdFRvdWNoKTsKKyAgICAgICAgdGVzdFRvdWNoTWlzcygndGVz
dDQnLHRlc3REaXJlY3RUb3VjaCk7CisgICAgICAgIHRlc3RUb3VjaEhpdCgndGVzdDUnLHRlc3RE
aXJlY3RUb3VjaCk7CisgICAgfQorCisgICAgZnVuY3Rpb24gdGVzdERpcmVjdEZhdEZpbmdlcnMo
KQorICAgIHsKKyAgICAgICAgZGVidWcoJ1Rlc3RpbmcgbGFyZ2UgZGlyZWN0IGhpdHMnKTsKKyAg
ICAgICAgdGVzdFRvdWNoSGl0KCd0ZXN0MScsdGVzdERpcmVjdEZhdEZpbmdlcik7CisgICAgICAg
IHRlc3RUb3VjaEhpdCgndGVzdDInLHRlc3REaXJlY3RGYXRGaW5nZXIpOworICAgICAgICB0ZXN0
VG91Y2hIaXQoJ3Rlc3QzJyx0ZXN0RGlyZWN0RmF0RmluZ2VyKTsKKyAgICAgICAgdGVzdFRvdWNo
TWlzcygndGVzdDQnLHRlc3REaXJlY3RGYXRGaW5nZXIpOworICAgICAgICB0ZXN0VG91Y2hIaXQo
J3Rlc3Q1Jyx0ZXN0RGlyZWN0RmF0RmluZ2VyKTsKKyAgICB9CisKKyAgICBmdW5jdGlvbiB0ZXN0
SW5kaXJlY3RGYXRGaW5nZXJzKCkKKyAgICB7CisgICAgICAgIGRlYnVnKCdUZXN0aW5nIGxhcmdl
IGRpcmVjdCBoaXRzJyk7CisgICAgICAgIHRlc3RUb3VjaEhpdCgndGVzdDEnLHRlc3RJbmRpcmVj
dEZhdEZpbmdlcik7CisgICAgICAgIHRlc3RUb3VjaEhpdCgndGVzdDInLHRlc3RJbmRpcmVjdEZh
dEZpbmdlcik7CisgICAgICAgIHRlc3RUb3VjaEhpdCgndGVzdDMnLHRlc3RJbmRpcmVjdEZhdEZp
bmdlcik7CisgICAgICAgIHRlc3RUb3VjaE1pc3MoJ3Rlc3Q0Jyx0ZXN0SW5kaXJlY3RGYXRGaW5n
ZXIpOworICAgICAgICB0ZXN0VG91Y2hIaXQoJ3Rlc3Q1Jyx0ZXN0SW5kaXJlY3RGYXRGaW5nZXIp
OworICAgIH0KKworICAgIGZ1bmN0aW9uIHJ1blRlc3RzKCkKKyAgICB7CisgICAgICAgIGlmICh3
aW5kb3cubGF5b3V0VGVzdENvbnRyb2xsZXIgJiYgd2luZG93LmludGVybmFscyAmJiBpbnRlcm5h
bHMudG91Y2hOb2RlQWRqdXN0ZWRUb0Jlc3RDbGlja2FibGVOb2RlKSB7CisgICAgICAgICAgICBk
ZXNjcmlwdGlvbignVGVzdCB2YXJpb3VzIHdheXMgdG8gdHJpZ2dlciBpbnB1dC13aWRnZXRzLiBP
biBhIHRvdWNoIGludGVyZmFjZSwgYWxsIHRoZSBhY3Rpb25zIHNob3VsZCBiZSB0cmlnZ2VyYWJs
ZSB3aXRoIGVpdGhlciBhIHRvdWNoIGRvd24gb3IgYSB0b3VjaCB0YXAuJyk7CisgICAgICAgICAg
ICBsYXlvdXRUZXN0Q29udHJvbGxlci5kdW1wQXNUZXh0KCk7CisgICAgICAgICAgICBsYXlvdXRU
ZXN0Q29udHJvbGxlci53YWl0VW50aWxEb25lKCk7CisgICAgICAgICAgICB0ZXN0RGlyZWN0VG91
Y2hlcygpOworICAgICAgICAgICAgdGVzdERpcmVjdEZhdEZpbmdlcnMoKTsKKyAgICAgICAgICAg
IHRlc3RJbmRpcmVjdEZhdEZpbmdlcnMoKTsKKyAgICAgICAgICAgIGlzU3VjY2Vzc2Z1bGx5UGFy
c2VkKCk7CisgICAgICAgICAgICBsYXlvdXRUZXN0Q29udHJvbGxlci5ub3RpZnlEb25lKCk7Cisg
ICAgICAgIH0KKyAgICB9Cis8L3NjcmlwdD4KKworPHNjcmlwdD4KKyAgICBmdW5jdGlvbiB0cmln
Z2VySW5wdXQoKSB7CisgICAgICAgIHZhciBlbGVtZW50ID0gZXZlbnQuc3JjRWxlbWVudDsKKyAg
ICAgICAgaWYgKCFlbGVtZW50Lm9wZW4pIHsKKyAgICAgICAgICAgIGVsZW1lbnQuaW5uZXJIVE1M
ID0gJzxpbnB1dCB0eXBlPXRleHQgc3R5bGU9IndpZHRoOiAxMDAlIj48L2lucHV0PicKKyAgICAg
ICAgICAgIGVsZW1lbnQub3BlbiA9IHRydWU7CisgICAgICAgIH0KKyAgICAgICAgZWxlbWVudC5m
aXJzdENoaWxkLmZvY3VzKCk7CisgICAgfQorPC9zY3JpcHQ+CisKKzxkaXYgaWQ9dGVzdDEgY2xh
c3M9Ym94IHRhYmluZGV4PTEgb25mb2N1cz0ndHJpZ2dlcklucHV0KCknPgorRm9jdXMgaGVyZSBz
aG91bGQgZ2l2ZSBhIHRleHQgaW5wdXQtZmllbGQuCis8L2Rpdj4KKworPGRpdiBpZD10ZXN0MiBj
bGFzcz1ib3ggb25tb3VzZW92ZXI9J3RyaWdnZXJJbnB1dCgpJz4gCitNb3VzZS1vdmVyIGhlcmUg
c2hvdWxkIGdpdmUgYSB0ZXh0IGlucHV0LWZpZWxkLgorPC9kaXY+CisKKzxzdHlsZT4KKyAgICAu
Ym94Om5vdCg6aG92ZXIpIC5ob3ZlcnRyaWdnZXJlZCB7IHZpc2liaWxpdHk6IGhpZGRlbjt9Cisg
ICAgLmJveDpob3ZlciAuaG92ZXJmYWxsYmFjayB7IGRpc3BsYXk6IG5vbmU7IH0gIAorPC9zdHls
ZT4KKworPGRpdiBpZD10ZXN0MyBjbGFzcz1ib3g+IAorICAgIDxzcGFuIGNsYXNzPWhvdmVyZmFs
bGJhY2s+SG92ZXJpbmcgaGVyZSBzaG91bGQgZ2l2ZSBhIHRleHQgaW5wdXQtZmllbGQuPC9zcGFu
PgorICAgIDxpbnB1dCB0eXBlPXRleHQgY2xhc3M9aG92ZXJ0cmlnZ2VyZWQ+PC9pbnB1dD4KKzwv
ZGl2PgorCis8ZGl2IGlkPXRlc3Q0IGNsYXNzPWJveCBvbmZvY3VzPSd0cmlnZ2VySW5wdXQoKSc+
CisgICAgPHNwYW4gdGFiaW5kZXg9MT4gRm9jdXNpbmcgaGVyZSBzaG91bGQgb25seSBnaXZlIGZv
Y3VzIG91dGxpbmUuCisgICAgPC9zcGFuPgorPC9kaXY+CisKKzxkaXYgaWQ9dGVzdDUgY2xhc3M9
Ym94PgorICAgIDxzcGFuIHRhYmluZGV4PTE+IEZvY3VzaW5nIGhlcmUgc2hvdWxkIGdpdmUgYSB0
ZXh0IGlucHV0LWZpZWxkLgorICAgIDwvc3Bhbj4KKzwvZGl2PgorCis8c2NyaXB0PgorICAgIHZh
ciBlbGVtZW50ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rlc3Q1Jyk7CisgICAgZWxlbWVu
dC5hZGRFdmVudExpc3RlbmVyKCdET01Gb2N1c0luJywgdHJpZ2dlcklucHV0LCBmYWxzZSk7Cis8
L3NjcmlwdD4KKworPC9ib2R5PgorPC9odG1sPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUK
ZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3RvdWNoYWRqdXN0bWVudC9odG1sLWxhYmVsLWV4cGVj
dGVkLnR4dCBiL0xheW91dFRlc3RzL3RvdWNoYWRqdXN0bWVudC9odG1sLWxhYmVsLWV4cGVjdGVk
LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNjY3ZjgzCi0tLSAvZGV2
L251bGwKKysrIGIvTGF5b3V0VGVzdHMvdG91Y2hhZGp1c3RtZW50L2h0bWwtbGFiZWwtZXhwZWN0
ZWQudHh0CkBAIC0wLDAgKzEsMjIgQEAKK0RvIG5vdCBjbGljayBoZXJlCitDbGljayBoZXJlLCBi
dXQgbm90IGhlcmUuIAorCisKKworVGVzdHMgaWYgbGFiZWxzIGFyZSB0cmVhdGVkIGFzIGNsaWNr
YWJsZSBpZiB0aGUgaW5wdXQgdGhleSBjb250cm9sIGlzLgorCitPbiBzdWNjZXNzLCB5b3Ugd2ls
bCBzZWUgYSBzZXJpZXMgb2YgIlBBU1MiIG1lc3NhZ2VzLCBmb2xsb3dlZCBieSAiVEVTVCBDT01Q
TEVURSIuCisKKworVGVzdGluZyBzbWFsbCBkaXJlY3QgaGl0cworUEFTUyBhZGp1c3RlZE5vZGUu
aWQgaXMgIm15bGluayIKK1BBU1MgYWRqdXN0ZWROb2RlLmlkIGlzICJteWxhYmVsIgorUEFTUyBh
ZGp1c3RlZE5vZGUuaWQgaXMgIm15aW5wdXQiCitUZXN0aW5nIGluZGlyZWN0IGhpdHMKK1BBU1Mg
YWRqdXN0ZWROb2RlLmlkIGlzICJteWxpbmsiCitQQVNTIGFkanVzdGVkTm9kZS5pZCBpcyAibXls
YWJlbCIKK1BBU1MgYWRqdXN0ZWROb2RlLmlkIGlzICJteWlucHV0IgorUEFTUyBzdWNjZXNzZnVs
bHlQYXJzZWQgaXMgdHJ1ZQorCitURVNUIENPTVBMRVRFCisKZGlmZiAtLWdpdCBhL0xheW91dFRl
c3RzL3RvdWNoYWRqdXN0bWVudC9odG1sLWxhYmVsLmh0bWwgYi9MYXlvdXRUZXN0cy90b3VjaGFk
anVzdG1lbnQvaHRtbC1sYWJlbC5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw
MDAuLjg1ZmZmMzQKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy90b3VjaGFkanVzdG1l
bnQvaHRtbC1sYWJlbC5odG1sCkBAIC0wLDAgKzEsMTA4IEBACis8aHRtbD4KKzxoZWFkPgorPHNj
cmlwdCBzcmM9Ii4uL2Zhc3QvanMvcmVzb3VyY2VzL2pzLXRlc3QtcHJlLmpzIj48L3NjcmlwdD4K
KworPC9oZWFkPgorCis8Ym9keSBpZD0ibXlib2R5IiBvbmxvYWQ9InJ1blRlc3RzKCkiPgorCis8
YSBocmVmPSIjbXlmb3JtIiBpZD0ibXlsaW5rIj5EbyBub3QgY2xpY2sgaGVyZTwvYT48YnI+Cis8
Zm9ybSBpZD0ibXlmb3JtIj4KKzxsYWJlbCBmb3I9Im15aW5wdXQiIGlkPSJteWxhYmVsIj5DbGlj
ayBoZXJlLDwvbGFiZWw+Cis8c3BhbiBpZD0ibXlzcGFuIj5idXQgbm90IGhlcmUuPC9zcGFuPgor
PGlucHV0IHR5cGU9InRleHQiIGlkPSJteWlucHV0IiB2YWx1ZT0iVG8gZm9jdXMgdGhpcy4iPjwv
aW5wdXQ+Cis8L2Zvcm0+Cis8YnI+PGJyPjxicj4KKworPHAgaWQ9J2Rlc2NyaXB0aW9uJz48L3A+
Cis8ZGl2IGlkPSdjb25zb2xlJz48L2Rpdj4KKworPHNjcmlwdD4KKyAgICB2YXIgZWxlbWVudDsK
KyAgICB2YXIgYWRqdXN0ZWROb2RlOworICAgIGZ1bmN0aW9uIGZpbmRBYnNvbHV0ZVBvc2l0aW9u
KG5vZGUpIHsKKyAgICAgICAgdmFyIHBvcyA9IG5ldyBPYmplY3QoKTsKKyAgICAgICAgcG9zLmxl
ZnQgPSAwOyBwb3MudG9wID0gMDsKKyAgICAgICAgZG8geworICAgICAgICAgICAgcG9zLmxlZnQg
Kz0gbm9kZS5vZmZzZXRMZWZ0OworICAgICAgICAgICAgcG9zLnRvcCArPSBub2RlLm9mZnNldFRv
cDsKKyAgICAgICAgfSB3aGlsZSAobm9kZSA9IG5vZGUub2Zmc2V0UGFyZW50KTsKKyAgICAgICAg
cmV0dXJuIHBvczsKKyAgICB9CisKKyAgICBmdW5jdGlvbiB0ZXN0RGlyZWN0VG91Y2goZWxlbWVu
dCkKKyAgICB7CisgICAgICAgIHZhciBwb3MgPSBmaW5kQWJzb2x1dGVQb3NpdGlvbihlbGVtZW50
KTsKKyAgICAgICAgdmFyIHggPSBwb3MubGVmdCArIGVsZW1lbnQuY2xpZW50V2lkdGgvMiAtIDIw
OworICAgICAgICB2YXIgeSA9IHBvcy50b3AgKyBlbGVtZW50LmNsaWVudEhlaWdodC8yIC0gMzA7
CisgICAgICAgIHZhciB3ID0gNDA7CisgICAgICAgIHZhciBoID0gNjA7CisgICAgICAgIHZhciBh
ZGp1c3RlZE5vZGUgPSBpbnRlcm5hbHMudG91Y2hOb2RlQWRqdXN0ZWRUb0Jlc3RDbGlja2FibGVO
b2RlKHgsIHksIHcsIGgsIGRvY3VtZW50KTsKKyAgICAgICAgd2hpbGUgKGFkanVzdGVkTm9kZS5u
b2RlVHlwZSAhPSAxKSAvLyBOb3QgZWxlbWVudC4KKyAgICAgICAgICAgIGFkanVzdGVkTm9kZSA9
IGFkanVzdGVkTm9kZS5wYXJlbnROb2RlOworICAgICAgICByZXR1cm4gYWRqdXN0ZWROb2RlOwor
ICAgIH0KKworICAgIGZ1bmN0aW9uIHRlc3RJbmRpcmVjdFRvdWNoKGVsZW1lbnQpCisgICAgewor
ICAgICAgICAvLyBUb3VjaCBqdXN0IHJpZ2h0IG9mIHRoZSBlbGVtZW50LgorICAgICAgICB2YXIg
cG9zID0gZmluZEFic29sdXRlUG9zaXRpb24oZWxlbWVudCk7CisgICAgICAgIHZhciB4ID0gcG9z
LmxlZnQgKyBlbGVtZW50LmNsaWVudFdpZHRoICsgMTAgLSAzMDsKKyAgICAgICAgdmFyIHkgPSBw
b3MudG9wICsgZWxlbWVudC5jbGllbnRIZWlnaHQvMiAtIDIwOworICAgICAgICB2YXIgdyA9IDYw
OworICAgICAgICB2YXIgaCA9IDQwOworICAgICAgICB2YXIgYWRqdXN0ZWROb2RlID0gaW50ZXJu
YWxzLnRvdWNoTm9kZUFkanVzdGVkVG9CZXN0Q2xpY2thYmxlTm9kZSh4LCB5LCB3LCBoLCBkb2N1
bWVudCk7CisgICAgICAgIHdoaWxlIChhZGp1c3RlZE5vZGUubm9kZVR5cGUgIT0gMSApIC8vIE5v
dCBlbGVtZW50LgorICAgICAgICAgICAgYWRqdXN0ZWROb2RlID0gYWRqdXN0ZWROb2RlLnBhcmVu
dE5vZGU7CisgICAgICAgIHJldHVybiBhZGp1c3RlZE5vZGU7CisgICAgfQorCisgICAgZnVuY3Rp
b24gdGVzdERpcmVjdFRvdWNoZXMoKQorICAgIHsKKyAgICAgICAgZGVidWcoJ1Rlc3Rpbmcgc21h
bGwgZGlyZWN0IGhpdHMnKTsKKworICAgICAgICBlbGVtZW50ID0gZG9jdW1lbnQuZ2V0RWxlbWVu
dEJ5SWQoJ215bGluaycpOworICAgICAgICBhZGp1c3RlZE5vZGUgPSB0ZXN0RGlyZWN0VG91Y2go
ZWxlbWVudCk7CisgICAgICAgIHNob3VsZEJlRXF1YWxUb1N0cmluZygnYWRqdXN0ZWROb2RlLmlk
JywgJ215bGluaycpOworCisgICAgICAgIGVsZW1lbnQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJ
ZCgnbXlsYWJlbCcpOworICAgICAgICBhZGp1c3RlZE5vZGUgPSB0ZXN0RGlyZWN0VG91Y2goZWxl
bWVudCk7CisgICAgICAgIHNob3VsZEJlRXF1YWxUb1N0cmluZygnYWRqdXN0ZWROb2RlLmlkJywg
J215bGFiZWwnKTsKKworICAgICAgICBlbGVtZW50ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQo
J215aW5wdXQnKTsKKyAgICAgICAgYWRqdXN0ZWROb2RlID0gdGVzdERpcmVjdFRvdWNoKGVsZW1l
bnQpOworICAgICAgICBzaG91bGRCZUVxdWFsVG9TdHJpbmcoJ2FkanVzdGVkTm9kZS5pZCcsICdt
eWlucHV0Jyk7CisgICAgfQorCisgICAgZnVuY3Rpb24gdGVzdEluZGlyZWN0VG91Y2hlcygpCisg
ICAgeworICAgICAgICBkZWJ1ZygnVGVzdGluZyBpbmRpcmVjdCBoaXRzJyk7CisKKyAgICAgICAg
ZWxlbWVudCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdteWxpbmsnKTsKKyAgICAgICAgYWRq
dXN0ZWROb2RlID0gdGVzdEluZGlyZWN0VG91Y2goZWxlbWVudCk7CisgICAgICAgIHNob3VsZEJl
RXF1YWxUb1N0cmluZygnYWRqdXN0ZWROb2RlLmlkJywgJ215bGluaycpOworCisgICAgICAgIGVs
ZW1lbnQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbXlsYWJlbCcpOworICAgICAgICBhZGp1
c3RlZE5vZGUgPSB0ZXN0SW5kaXJlY3RUb3VjaChlbGVtZW50KTsKKyAgICAgICAgc2hvdWxkQmVF
cXVhbFRvU3RyaW5nKCdhZGp1c3RlZE5vZGUuaWQnLCAnbXlsYWJlbCcpOworCisgICAgICAgIGVs
ZW1lbnQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbXlpbnB1dCcpOworICAgICAgICBhZGp1
c3RlZE5vZGUgPSB0ZXN0SW5kaXJlY3RUb3VjaChlbGVtZW50KTsKKyAgICAgICAgc2hvdWxkQmVF
cXVhbFRvU3RyaW5nKCdhZGp1c3RlZE5vZGUuaWQnLCAnbXlpbnB1dCcpOworICAgIH0KKworICAg
IGZ1bmN0aW9uIHJ1blRlc3RzKCkKKyAgICB7CisgICAgICAgIGlmICh3aW5kb3cubGF5b3V0VGVz
dENvbnRyb2xsZXIgJiYgd2luZG93LmludGVybmFscyAmJiBpbnRlcm5hbHMudG91Y2hOb2RlQWRq
dXN0ZWRUb0Jlc3RDbGlja2FibGVOb2RlKSB7CisgICAgICAgICAgICBkZXNjcmlwdGlvbignVGVz
dHMgaWYgbGFiZWxzIGFyZSB0cmVhdGVkIGFzIGNsaWNrYWJsZSBpZiB0aGUgaW5wdXQgdGhleSBj
b250cm9sIGlzLicpOworICAgICAgICAgICAgbGF5b3V0VGVzdENvbnRyb2xsZXIuZHVtcEFzVGV4
dCgpOworICAgICAgICAgICAgbGF5b3V0VGVzdENvbnRyb2xsZXIud2FpdFVudGlsRG9uZSgpOwor
ICAgICAgICAgICAgdGVzdERpcmVjdFRvdWNoZXMoKTsKKyAgICAgICAgICAgIHRlc3RJbmRpcmVj
dFRvdWNoZXMoKTsKKyAgICAgICAgICAgIGlzU3VjY2Vzc2Z1bGx5UGFyc2VkKCk7CisgICAgICAg
ICAgICBsYXlvdXRUZXN0Q29udHJvbGxlci5ub3RpZnlEb25lKCk7CisgICAgICAgIH0KKyAgICB9
Cis8L3NjcmlwdD4KKzwvYm9keT4KKzwvaHRtbD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxl
CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy90b3VjaGFkanVzdG1lbnQvbmVzdGVkLXRvdWNoLWV4
cGVjdGVkLnR4dCBiL0xheW91dFRlc3RzL3RvdWNoYWRqdXN0bWVudC9uZXN0ZWQtdG91Y2gtZXhw
ZWN0ZWQudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc0N2Y2N2UKLS0t
IC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy90b3VjaGFkanVzdG1lbnQvbmVzdGVkLXRvdWNo
LWV4cGVjdGVkLnR4dApAQCAtMCwwICsxLDE4IEBACitCb3ggd2l0aCBhIGxvY2FsIGNsaWNrIGhh
bmRsZXIuCitCb3ggd2l0aG91dCBhIGxvY2FsIGNsaWNrIGhhbmRsZXIuCitUZXN0IHRoZSBjYXNl
IHdoZXJlIGEgY2xpY2thYmxlIHRhcmdldCBpcyBuZXN0ZWQgaW5zaWRlIGEgZG9jdW1lbnQgdGhh
dCBpcyBtb25pdG9yaW5nIGNsaWNrcy4gVGhlIHRhcmdldCB3aXRoIHRoZSBsb2NhbCBldmVudC1o
YW5kbGVyIHNob3VsZCBiZSBjaG9zZW4gaWYgbXVsdGlwbGUgdGFyZ2V0cyBhcmUgdG91Y2hlZC4K
KworT24gc3VjY2VzcywgeW91IHdpbGwgc2VlIGEgc2VyaWVzIG9mICJQQVNTIiBtZXNzYWdlcywg
Zm9sbG93ZWQgYnkgIlRFU1QgQ09NUExFVEUiLgorCisKK1Rlc3Rpbmcgc21hbGwgZGlyZWN0IGhp
dHMKK1BBU1MgYWRqdXN0ZWROb2RlLmlkIGlzIGVsZW1lbnQuaWQKK1BBU1MgYWRqdXN0ZWROb2Rl
LmlkIGlzIGVsZW1lbnQuaWQKK1Rlc3RpbmcgcHJlZmVyZWQgaGl0cworUEFTUyBhZGp1c3RlZE5v
ZGUuaWQgaXMgZWxlbWVudDEuaWQKK1BBU1MgYWRqdXN0ZWROb2RlLmlkIGlzIGVsZW1lbnQxLmlk
CitQQVNTIGFkanVzdGVkTm9kZS5pZCBpcyBlbGVtZW50MS5pZAorUEFTUyBzdWNjZXNzZnVsbHlQ
YXJzZWQgaXMgdHJ1ZQorCitURVNUIENPTVBMRVRFCisKZGlmZiAtLWdpdCBhL0xheW91dFRlc3Rz
L3RvdWNoYWRqdXN0bWVudC9uZXN0ZWQtdG91Y2guaHRtbCBiL0xheW91dFRlc3RzL3RvdWNoYWRq
dXN0bWVudC9uZXN0ZWQtdG91Y2guaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw
MDAwLi4yYTYyMjQyCi0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvdG91Y2hhZGp1c3Rt
ZW50L25lc3RlZC10b3VjaC5odG1sCkBAIC0wLDAgKzEsMTIwIEBACis8aHRtbD4KKzxoZWFkPgor
PHN0eWxlPgorICAgIC5ib3ggeyBib3JkZXI6IDFweCBzb2xpZCBibGFjazsgYm9yZGVyLXJhZGl1
czogNXB4IDVweDsgbWFyZ2luOiAxZW07IG1heC13aWR0aDogNDBlbTsgfQorPC9zdHlsZT4KKzxz
Y3JpcHQgc3JjPSIuLi9mYXN0L2pzL3Jlc291cmNlcy9qcy10ZXN0LXByZS5qcyI+PC9zY3JpcHQ+
CisKKzwvaGVhZD4KKworPGJvZHkgb25sb2FkPSJydW5UZXN0cygpIj4KKworPGRpdiBjbGFzcz1i
b3ggaWQ9bXlib3gxPgorQm94IHdpdGggYSBsb2NhbCBjbGljayBoYW5kbGVyLgorPC9kaXY+CisK
KzxkaXYgY2xhc3M9Ym94IGlkPW15Ym94Mj4gCitCb3ggd2l0aG91dCBhIGxvY2FsIGNsaWNrIGhh
bmRsZXIuCis8L2Rpdj4KKworPHNjcmlwdD4KKyAgZnVuY3Rpb24gbW9uaXRvcihlKSB7IGFsZXJ0
KGUudGFyZ2V0ICsoIGUudGFyZ2V0LmlkID8gKCAnICMnICsgZS50YXJnZXQuaWQpIDogJycpKTsg
fTsKKyAgZnVuY3Rpb24gZG9Tb21ldGhpbmcoZSkge307CisKKyAgdmFyIGVsZW1lbnQgPSBkb2N1
bWVudC5nZXRFbGVtZW50QnlJZCgnbXlib3gxJyk7CisgIGVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5l
cignY2xpY2snLCBkb1NvbWV0aGluZywgZmFsc2UpOworICBlbGVtZW50ID0gZG9jdW1lbnQuYm9k
eTsKKyAgZWxlbWVudC5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIG1vbml0b3IsIGZhbHNlKTsK
Kzwvc2NyaXB0PgorCisKKzxwIGlkPSdkZXNjcmlwdGlvbic+PC9wPgorPGRpdiBpZD0nY29uc29s
ZSc+PC9kaXY+CisKKzxzY3JpcHQ+CisgICAgdmFyIGVsZW1lbnQ7CisgICAgdmFyIGFkanVzdGVk
Tm9kZTsKKyAgICBmdW5jdGlvbiBmaW5kQWJzb2x1dGVQb3NpdGlvbihub2RlKSB7CisgICAgICAg
IHZhciBwb3MgPSBuZXcgT2JqZWN0KCk7CisgICAgICAgIHBvcy5sZWZ0ID0gMDsgcG9zLnRvcCA9
IDA7CisgICAgICAgIGRvIHsKKyAgICAgICAgICAgIHBvcy5sZWZ0ICs9IG5vZGUub2Zmc2V0TGVm
dDsKKyAgICAgICAgICAgIHBvcy50b3AgKz0gbm9kZS5vZmZzZXRUb3A7CisgICAgICAgIH0gd2hp
bGUgKG5vZGUgPSBub2RlLm9mZnNldFBhcmVudCk7CisgICAgICAgIHJldHVybiBwb3M7CisgICAg
fQorCisgICAgZnVuY3Rpb24gdGVzdERpcmVjdFRvdWNoKGVsZW1lbnQpCisgICAgeworICAgICAg
ICB2YXIgcG9zID0gZmluZEFic29sdXRlUG9zaXRpb24oZWxlbWVudCk7CisgICAgICAgIHZhciB4
ID0gcG9zLmxlZnQgKyBlbGVtZW50LmNsaWVudFdpZHRoLzIgLSAxOworICAgICAgICB2YXIgeSA9
IHBvcy50b3AgKyBlbGVtZW50LmNsaWVudEhlaWdodC8yIC0gMTsKKyAgICAgICAgdmFyIHcgPSAz
OworICAgICAgICB2YXIgaCA9IDM7CisgICAgICAgIHZhciBhZGp1c3RlZE5vZGUgPSBpbnRlcm5h
bHMudG91Y2hOb2RlQWRqdXN0ZWRUb0Jlc3RDbGlja2FibGVOb2RlKHgsIHksIHcsIGgsIGRvY3Vt
ZW50KTsKKyAgICAgICAgaWYgKGFkanVzdGVkTm9kZS5ub2RlVHlwZSA9PSAzKSAvLyBURVhUIG5v
ZGUKKyAgICAgICAgICAgIGFkanVzdGVkTm9kZSA9IGFkanVzdGVkTm9kZS5wYXJlbnROb2RlOwor
ICAgICAgICByZXR1cm4gYWRqdXN0ZWROb2RlOworICAgIH0KKworICAgIGZ1bmN0aW9uIHRlc3RE
b3VibGVUb3VjaChlbGVtZW50MSwgZWxlbWVudDIsIG9mZnNldCkKKyAgICB7CisgICAgICAgIHZh
ciBwb3MxID0gZmluZEFic29sdXRlUG9zaXRpb24oZWxlbWVudDEpOworICAgICAgICB2YXIgcG9z
MiA9IGZpbmRBYnNvbHV0ZVBvc2l0aW9uKGVsZW1lbnQyKTsKKyAgICAgICAgLy8gV2UgYXNzdW1l
IHRoZSBlbGVtZW50cyBoYXZlIHRoZSBzYW1lIHggY29vcmQgYW5kIHdpZHRoLgorICAgICAgICB2
YXIgeCA9IHBvczEubGVmdCArIGVsZW1lbnQxLmNsaWVudFdpZHRoLzIgLSAxOworICAgICAgICB2
YXIgeTEgPSBwb3MxLnRvcCArIGVsZW1lbnQxLmNsaWVudEhlaWdodC8yICsgMTsKKyAgICAgICAg
dmFyIHkyID0gcG9zMi50b3AgKyBlbGVtZW50Mi5jbGllbnRIZWlnaHQvMiAtIDE7CisgICAgICAg
IHZhciB3ID0geTIgLSB5MTsKKyAgICAgICAgdmFyIGggPSB5MiAtIHkxOworICAgICAgICB2YXIg
YWRqdXN0ZWROb2RlID0gaW50ZXJuYWxzLnRvdWNoTm9kZUFkanVzdGVkVG9CZXN0Q2xpY2thYmxl
Tm9kZSh4LCB5MSwgdywgaCwgZG9jdW1lbnQpOworICAgICAgICBpZiAoYWRqdXN0ZWROb2RlLm5v
ZGVUeXBlID09IDMpIC8vIFRFWFQgbm9kZQorICAgICAgICAgICAgYWRqdXN0ZWROb2RlID0gYWRq
dXN0ZWROb2RlLnBhcmVudE5vZGU7CisgICAgICAgIHJldHVybiBhZGp1c3RlZE5vZGU7CisgICAg
fQorCisgICAgZnVuY3Rpb24gdGVzdERpcmVjdFRvdWNoZXMoKQorICAgIHsKKyAgICAgICAgZGVi
dWcoJ1Rlc3Rpbmcgc21hbGwgZGlyZWN0IGhpdHMnKTsKKworICAgICAgICBlbGVtZW50ID0gZG9j
dW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ215Ym94MScpOworICAgICAgICBhZGp1c3RlZE5vZGUgPSB0
ZXN0RGlyZWN0VG91Y2goZWxlbWVudCk7CisgICAgICAgIHNob3VsZEJlKCdhZGp1c3RlZE5vZGUu
aWQnLCAnZWxlbWVudC5pZCcpOworCisgICAgICAgIGVsZW1lbnQgPSBkb2N1bWVudC5nZXRFbGVt
ZW50QnlJZCgnbXlib3gyJyk7CisgICAgICAgIGFkanVzdGVkTm9kZSA9IHRlc3REaXJlY3RUb3Vj
aChlbGVtZW50KTsKKyAgICAgICAgc2hvdWxkQmUoJ2FkanVzdGVkTm9kZS5pZCcsICdlbGVtZW50
LmlkJyk7CisgICAgfQorCisgICAgZnVuY3Rpb24gdGVzdFByZWZlcmVkVG91Y2goKQorICAgIHsK
KyAgICAgICAgZGVidWcoJ1Rlc3RpbmcgcHJlZmVyZWQgaGl0cycpOworCisgICAgICAgIGVsZW1l
bnQxID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ215Ym94MScpOworICAgICAgICBlbGVtZW50
MiA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdteWJveDInKTsKKyAgICAgICAgYWRqdXN0ZWRO
b2RlID0gdGVzdERvdWJsZVRvdWNoKGVsZW1lbnQxLCBlbGVtZW50MiwgMCk7CisgICAgICAgIHNo
b3VsZEJlKCdhZGp1c3RlZE5vZGUuaWQnLCAnZWxlbWVudDEuaWQnKTsKKworICAgICAgICAvLyBG
aXJzdCB0ZXN0IHdhcyBjZW50ZXJlZCwgbm93IG1vdmUgdGhlIHRlc3QgY2xvc2VyIHRvIHRoZSB3
cm9uZyBub2RlLCBhbmQgZW5zdXJlIHdlIHN0aWxsIGdldCB0aGUgcHJlZmVyZWQgbm9kZS4KKyAg
ICAgICAgYWRqdXN0ZWROb2RlID0gdGVzdERvdWJsZVRvdWNoKGVsZW1lbnQxLCBlbGVtZW50Miwg
NSk7CisgICAgICAgIHNob3VsZEJlKCdhZGp1c3RlZE5vZGUuaWQnLCAnZWxlbWVudDEuaWQnKTsK
KworICAgICAgICBhZGp1c3RlZE5vZGUgPSB0ZXN0RG91YmxlVG91Y2goZWxlbWVudDEsIGVsZW1l
bnQyLCAxMCk7CisgICAgICAgIHNob3VsZEJlKCdhZGp1c3RlZE5vZGUuaWQnLCAnZWxlbWVudDEu
aWQnKTsKKyAgICB9CisKKyAgICBmdW5jdGlvbiBydW5UZXN0cygpCisgICAgeworICAgICAgICBp
ZiAod2luZG93LmxheW91dFRlc3RDb250cm9sbGVyICYmIHdpbmRvdy5pbnRlcm5hbHMgJiYgaW50
ZXJuYWxzLnRvdWNoTm9kZUFkanVzdGVkVG9CZXN0Q2xpY2thYmxlTm9kZSkgeworICAgICAgICAg
ICAgZGVzY3JpcHRpb24oJ1Rlc3QgdGhlIGNhc2Ugd2hlcmUgYSBjbGlja2FibGUgdGFyZ2V0IGlz
IG5lc3RlZCBpbnNpZGUgYSBkb2N1bWVudCB0aGF0IGlzIG1vbml0b3JpbmcgY2xpY2tzLiBUaGUg
dGFyZ2V0IHdpdGggdGhlIGxvY2FsIGV2ZW50LWhhbmRsZXIgc2hvdWxkIGJlIGNob3NlbiBpZiBt
dWx0aXBsZSB0YXJnZXRzIGFyZSB0b3VjaGVkLicpOworICAgICAgICAgICAgbGF5b3V0VGVzdENv
bnRyb2xsZXIuZHVtcEFzVGV4dCgpOworICAgICAgICAgICAgbGF5b3V0VGVzdENvbnRyb2xsZXIu
d2FpdFVudGlsRG9uZSgpOworICAgICAgICAgICAgdGVzdERpcmVjdFRvdWNoZXMoKTsKKyAgICAg
ICAgICAgIHRlc3RQcmVmZXJlZFRvdWNoKCk7CisgICAgICAgICAgICBpc1N1Y2Nlc3NmdWxseVBh
cnNlZCgpOworICAgICAgICAgICAgbGF5b3V0VGVzdENvbnRyb2xsZXIubm90aWZ5RG9uZSgpOwor
ICAgICAgICB9CisgICAgfQorPC9zY3JpcHQ+Cis8L2JvZHk+Cis8L2h0bWw+ClwgTm8gbmV3bGlu
ZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvdG91Y2hhZGp1c3RtZW50
L3RvdWNoLWlubGluZXMtZXhwZWN0ZWQudHh0IGIvTGF5b3V0VGVzdHMvdG91Y2hhZGp1c3RtZW50
L3RvdWNoLWlubGluZXMtZXhwZWN0ZWQudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw
MDAwMDAuLjdlMTRiZmUKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy90b3VjaGFkanVz
dG1lbnQvdG91Y2gtaW5saW5lcy1leHBlY3RlZC50eHQKQEAgLTAsMCArMSwyOSBAQAorc29tZSBs
aW5rCitzb21lIGxpbmsgYnJlYWtpbmcgbGluZXMgYW5kIGxpbmsKK2hvbGEgbXVuZG8hIGEgc3Bs
aXQgdXAgbGluaworaGVsbG8gd29ybGQgc29tZSBsaW5rIGFsc28gYnJlYWtpbmcKK2hpIHRoZXJl
IHNvbWUgbGluayB0aGF0IGlzIGJyZWFraW5nIG11bHRpcGxlIGxpbmVzIGp1c3QgZm9yIHRoZSB2
ZXJ5IGZ1biBvZiBpdAorCitUZXN0IHRvdWNoLWFkanVzdG1lbnQgb24gaW5saW5lIGxpbmtzLiBN
YWtpbmcgc3VyZSB3ZSBjYW4gaGl0IG92ZXIgbGluZS1icmVha3MsIGFuZCBjYW4gbWlzcyB3aGVu
IHRhcHBpbmcgYmV0d2VlbiBwYXJ0cyBvZiBhIGxpbmUtYnJva2VuIGxpbmsuCisKK09uIHN1Y2Nl
c3MsIHlvdSB3aWxsIHNlZSBhIHNlcmllcyBvZiAiUEFTUyIgbWVzc2FnZXMsIGZvbGxvd2VkIGJ5
ICJURVNUIENPTVBMRVRFIi4KKworCitUZXN0IHNvbWUgZGlyZWN0IGhpdHMKK1BBU1MgYWRqdXN0
ZWROb2RlLmlkIGlzICIxIgorUEFTUyBhZGp1c3RlZE5vZGUuaWQgaXMgIjIiCitQQVNTIGFkanVz
dGVkTm9kZS5pZCBpcyAiNCIKK1BBU1MgYWRqdXN0ZWROb2RlLmlkIGlzICI2IgorVGVzdCBhIGZl
dyBkaXJlY3QgbWlzc2VzCitQQVNTIGFkanVzdGVkTm9kZS5pZCBpcyAiIgorUEFTUyBhZGp1c3Rl
ZE5vZGUuaWQgaXMgIiIKK1Rlc3Qgc29tZSBpbi1kaXJlY3QgaGl0cworUEFTUyBhZGp1c3RlZE5v
ZGUuaWQgaXMgIjIiCitQQVNTIGFkanVzdGVkTm9kZS5pZCBpcyAiMyIKK1BBU1MgYWRqdXN0ZWRO
b2RlLmlkIGlzICI0IgorUEFTUyBhZGp1c3RlZE5vZGUuaWQgaXMgIjQiCitQQVNTIGFkanVzdGVk
Tm9kZS5pZCBpcyAiNiIKK1BBU1Mgc3VjY2Vzc2Z1bGx5UGFyc2VkIGlzIHRydWUKKworVEVTVCBD
T01QTEVURQorCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy90b3VjaGFkanVzdG1lbnQvdG91Y2gt
aW5saW5lcy5odG1sIGIvTGF5b3V0VGVzdHMvdG91Y2hhZGp1c3RtZW50L3RvdWNoLWlubGluZXMu
aHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44ZGMxZjc0Ci0tLSAvZGV2
L251bGwKKysrIGIvTGF5b3V0VGVzdHMvdG91Y2hhZGp1c3RtZW50L3RvdWNoLWlubGluZXMuaHRt
bApAQCAtMCwwICsxLDk5IEBACis8aHRtbD4KKzxoZWFkPgorICAgIDxzY3JpcHQgc3JjPSIuLi9m
YXN0L2pzL3Jlc291cmNlcy9qcy10ZXN0LXByZS5qcyI+PC9zY3JpcHQ+Cis8L2hlYWQ+Cis8Ym9k
eSBvbmxvYWQ9InJ1blRlc3RzKCkiPgorCis8cCBzdHlsZT0id2lkdGg6IDEwZW07Ij4KKzxhIGlk
PSIxIiBocmVmPSIjMSI+c29tZSBsaW5rPC9hPjxicj4KKzxhIGlkPSIyIiBocmVmPSIjMiI+c29t
ZSBsaW5rIGJyZWFraW5nIGxpbmVzPC9hPiBhbmQgPGEgaWQ9IjMiIGhyZWY9IiMzIj5saW5rPC9h
Pjxicj4KK2hvbGEgbXVuZG8hIDxhIGlkPSI0IiBocmVmPSIjNCI+YSBzcGxpdCB1cCBsaW5rPC9h
Pjxicj4KK2hlbGxvIHdvcmxkIDxhIGlkPSI1IiBocmVmPSIjNSI+c29tZSBsaW5rIGFsc28gYnJl
YWtpbmc8L2E+PGJyPgoraGkgdGhlcmUgPGEgaWQ9IjYiIGhyZWY9IiM2Ij5zb21lIGxpbmsgdGhh
dCBpcyBicmVha2luZyBtdWx0aXBsZSBsaW5lcyBqdXN0IGZvciB0aGUgdmVyeSBmdW4gb2YgaXQ8
L2E+PGJyPjxicj4KKzwvcD4KKworCis8cCBpZD0nZGVzY3JpcHRpb24nPjwvcD4KKzxkaXYgaWQ9
J2NvbnNvbGUnPjwvZGl2PgorCis8c2NyaXB0PgorICAgIHZhciBlbGVtZW50OworICAgIHZhciBh
ZGp1c3RlZE5vZGU7CisgICAgZnVuY3Rpb24gdGVzdFJvdW5kVG91Y2goeCwgeSwgcikKKyAgICB7
CisgICAgICAgIHZhciB4ID0geCAtIHI7CisgICAgICAgIHZhciB5ID0geSAtIHI7CisgICAgICAg
IHZhciB3ID0gciAqIDI7CisgICAgICAgIHZhciBoID0gciAqIDI7CisgICAgICAgIHZhciBhZGp1
c3RlZE5vZGUgPSBpbnRlcm5hbHMudG91Y2hOb2RlQWRqdXN0ZWRUb0Jlc3RDbGlja2FibGVOb2Rl
KHgsIHksIHcsIGgsIGRvY3VtZW50KTsKKyAgICAgICAgaWYgKGFkanVzdGVkTm9kZS5ub2RlVHlw
ZSA9PSAzKSAvLyBURVhUIG5vZGUKKyAgICAgICAgICAgIGFkanVzdGVkTm9kZSA9IGFkanVzdGVk
Tm9kZS5wYXJlbnROb2RlOworICAgICAgICByZXR1cm4gYWRqdXN0ZWROb2RlOworICAgIH0KKwor
ICAgIGZ1bmN0aW9uIHRlc3REaXJlY3RUb3VjaGVzKCkKKyAgICB7CisgICAgICAgIGRlYnVnKCdU
ZXN0IHNvbWUgZGlyZWN0IGhpdHMnKTsKKworICAgICAgICBhZGp1c3RlZE5vZGUgPSB0ZXN0Um91
bmRUb3VjaCgzMCwgMjAsIDgpCisgICAgICAgIHNob3VsZEJlRXF1YWxUb1N0cmluZygnYWRqdXN0
ZWROb2RlLmlkJywgJzEnKTsKKworICAgICAgICBhZGp1c3RlZE5vZGUgPSB0ZXN0Um91bmRUb3Vj
aCgzMCwgNjAsIDgpCisgICAgICAgIHNob3VsZEJlRXF1YWxUb1N0cmluZygnYWRqdXN0ZWROb2Rl
LmlkJywgJzInKTsKKworICAgICAgICBhZGp1c3RlZE5vZGUgPSB0ZXN0Um91bmRUb3VjaCgxMjAs
IDgwLCA4KQorICAgICAgICBzaG91bGRCZUVxdWFsVG9TdHJpbmcoJ2FkanVzdGVkTm9kZS5pZCcs
ICc0Jyk7CisKKyAgICAgICAgYWRqdXN0ZWROb2RlID0gdGVzdFJvdW5kVG91Y2goODAsIDE4MCwg
OCkKKyAgICAgICAgc2hvdWxkQmVFcXVhbFRvU3RyaW5nKCdhZGp1c3RlZE5vZGUuaWQnLCAnNicp
OworICAgIH0KKworICAgIGZ1bmN0aW9uIHRlc3REaXJlY3RNaXNzZXMoKQorICAgIHsKKyAgICAg
ICAgZGVidWcoJ1Rlc3QgYSBmZXcgZGlyZWN0IG1pc3NlcycpOworCisgICAgICAgIGFkanVzdGVk
Tm9kZSA9IHRlc3RSb3VuZFRvdWNoKDU2LCA2MCwgOCkKKyAgICAgICAgc2hvdWxkQmVFcXVhbFRv
U3RyaW5nKCdhZGp1c3RlZE5vZGUuaWQnLCAnJyk7CisKKyAgICAgICAgYWRqdXN0ZWROb2RlID0g
dGVzdFJvdW5kVG91Y2goMjAsIDE2MCwgNCkKKyAgICAgICAgc2hvdWxkQmVFcXVhbFRvU3RyaW5n
KCdhZGp1c3RlZE5vZGUuaWQnLCAnJyk7CisKKyAgICB9CisKKyAgICBmdW5jdGlvbiB0ZXN0SW5k
aXJlY3RUb3VjaGVzKCkKKyAgICB7CisgICAgICAgIGRlYnVnKCdUZXN0IHNvbWUgaW4tZGlyZWN0
IGhpdHMnKTsKKworICAgICAgICBhZGp1c3RlZE5vZGUgPSB0ZXN0Um91bmRUb3VjaCg1NiwgNjAs
IDIwKQorICAgICAgICBzaG91bGRCZUVxdWFsVG9TdHJpbmcoJ2FkanVzdGVkTm9kZS5pZCcsICcy
Jyk7CisKKyAgICAgICAgYWRqdXN0ZWROb2RlID0gdGVzdFJvdW5kVG91Y2goODUsIDgwLCAyMCkK
KyAgICAgICAgc2hvdWxkQmVFcXVhbFRvU3RyaW5nKCdhZGp1c3RlZE5vZGUuaWQnLCAnMycpOwor
CisgICAgICAgIGFkanVzdGVkTm9kZSA9IHRlc3RSb3VuZFRvdWNoKDEyMCwgNjAsIDIwKQorICAg
ICAgICBzaG91bGRCZUVxdWFsVG9TdHJpbmcoJ2FkanVzdGVkTm9kZS5pZCcsICc0Jyk7CisKKyAg
ICAgICAgYWRqdXN0ZWROb2RlID0gdGVzdFJvdW5kVG91Y2goNDAsIDEwMCwgMjApCisgICAgICAg
IHNob3VsZEJlRXF1YWxUb1N0cmluZygnYWRqdXN0ZWROb2RlLmlkJywgJzQnKTsKKworICAgICAg
ICBhZGp1c3RlZE5vZGUgPSB0ZXN0Um91bmRUb3VjaCgyMCwgMTY1LCAyMCkKKyAgICAgICAgc2hv
dWxkQmVFcXVhbFRvU3RyaW5nKCdhZGp1c3RlZE5vZGUuaWQnLCAnNicpOworCisgICAgfQorCisg
ICAgZnVuY3Rpb24gcnVuVGVzdHMoKQorICAgIHsKKyAgICAgICAgaWYgKHdpbmRvdy5sYXlvdXRU
ZXN0Q29udHJvbGxlciAmJiB3aW5kb3cuaW50ZXJuYWxzICYmIGludGVybmFscy50b3VjaE5vZGVB
ZGp1c3RlZFRvQmVzdENsaWNrYWJsZU5vZGUpIHsKKyAgICAgICAgICAgIGRlc2NyaXB0aW9uKCdU
ZXN0IHRvdWNoLWFkanVzdG1lbnQgb24gaW5saW5lIGxpbmtzLiBNYWtpbmcgc3VyZSB3ZSBjYW4g
aGl0IG92ZXIgbGluZS1icmVha3MsIGFuZCBjYW4gbWlzcyB3aGVuIHRhcHBpbmcgYmV0d2VlbiBw
YXJ0cyBvZiBhIGxpbmUtYnJva2VuIGxpbmsuJyk7CisgICAgICAgICAgICBsYXlvdXRUZXN0Q29u
dHJvbGxlci5kdW1wQXNUZXh0KCk7CisgICAgICAgICAgICBsYXlvdXRUZXN0Q29udHJvbGxlci53
YWl0VW50aWxEb25lKCk7CisgICAgICAgICAgICB0ZXN0RGlyZWN0VG91Y2hlcygpOworICAgICAg
ICAgICAgdGVzdERpcmVjdE1pc3NlcygpOworICAgICAgICAgICAgdGVzdEluZGlyZWN0VG91Y2hl
cygpOworICAgICAgICAgICAgaXNTdWNjZXNzZnVsbHlQYXJzZWQoKTsKKyAgICAgICAgICAgIGxh
eW91dFRlc3RDb250cm9sbGVyLm5vdGlmeURvbmUoKTsKKyAgICAgICAgfQorICAgIH0KKzwvc2Ny
aXB0PgorPC9ib2R5PgorPC9odG1sPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxv
ZwppbmRleCA4OGE1OGExLi44NDYxMWQ3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9DaGFu
Z2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsODIgQEAKKzIw
MTItMDItMjQgIEFsbGFuIFNhbmRmZWxkIEplbnNlbiAgPGFsbGFuLmplbnNlbkBub2tpYS5jb20+
CisKKyAgICAgICAgU2VsZWN0IGJlc3QgdGFyZ2V0IGZvciB0YXAgZ2VzdHVyZS4KKyAgICAgICAg
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTc4ODAxCisKKyAgICAgICAg
UmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVGhlIG5ldyBBUEkgaXMgYXZh
aWxhYmxlIHRocm91Z2ggRXZlbnRIYW5kbGVyOjpub2RlRm9yVGFwR2VzdHVyZUF0VG91Y2hQb2lu
dCwgYnV0CisgICAgICAgIGltcGxlbWVudGF0aW9uIGRldGFpbHMgaGF2ZSBiZWVuIHBsYWNlZCBp
biBwbGF0Zm9ybS9IaXRUZXN0UmVzdWx0TWV0cmljcy4KKworICAgICAgICBUaGUgZGVmYXVsdCBo
aXQgZGV0ZWN0aW9uIGlzIHBlcmZvcm1lZCBieSBtZWFzdXJpbmcgdGhlIGRpc3RhbmNlIHRvIHRo
ZSBjZW50ZXIKKyAgICAgICAgbGluZXMgb2YgdGhlIGFic29sdXRlIHJlY3RzIG9mIHRoZSBoaXQg
bm9kZXMuIEFic29sdXRlIHJlY3RzIGFyZSB1c2VkIGluc3RlYWQKKyAgICAgICAgb2YgYm91bmRp
bmcgcmVjdHMgdG8gbWFrZSBoaXQtZGV0ZWN0aW5nIGFnYWluc3QgbGlua3Mgb3ZlciBsaW5lIGJy
ZWFrcy4gRGlzdGFuY2UKKyAgICAgICAgdG8gY2VudGVyIGxpbmUgaXMgdXNlZCB0byBtYWtlIGl0
IGVhc2llciB0byBoaXQgc21hbGwgbGlua3MgbmV4dCB0byBsYXJnZSBsaW5rcy4KKyAgICAgICAg
Rm9yIGxpbmUtcmVjdHMgdGhlIGRpc3RhbmNlIHRvIHRoZSBjZW50ZXItbGluZSBpcyBhIGJldHRl
ciBleHByZXNzaW9uIG9mIHRoZSBkaXN0YW5jZQorICAgICAgICB0byBhIHJlY3RhbmdsZXMgY2Vu
dGVyIHRoYW4gdGhlIGRpc3RhbmNlIHRvIHRoZSBjZW50ZXItcG9pbnQuCisKKyAgICAgICAgVG8g
c3VwcG9ydCB0aGUgZGlzdGFuY2UgY2FsY3VsYXRhdGlvbiwgdGhpcyBwYXRjaCBhbHNvIGltcGxl
bWVudCBhIGNvbnNpc3RlbnQgc2V0IG9mCisgICAgICAgIGRpc3RhbmNlIGFuZCBhcmVhIGZ1bmN0
aW9ucyBmb3IgUmVjdCwgUG9pbnQgYW5kIFNpemUgY2xhc3Nlcy4KKworICAgICAgICBUZXN0czog
dG91Y2hhZGp1c3RtZW50L2V2ZW50LXRyaWdnZXJlZC13aWRnZXRzLmh0bWwKKyAgICAgICAgICAg
ICAgIHRvdWNoYWRqdXN0bWVudC9uZXN0ZWQtdG91Y2guaHRtbAorICAgICAgICAgICAgICAgdG91
Y2hhZGp1c3RtZW50L3RvdWNoLWlubGluZXMuaHRtbAorCisgICAgICAgICogVGFyZ2V0LnByaToK
KyAgICAgICAgKiBwYWdlL0V2ZW50SGFuZGxlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpFdmVu
dEhhbmRsZXI6OmhhbmRsZUdlc3R1cmVFdmVudCk6CisgICAgICAgIChXZWJDb3JlOjpFdmVudEhh
bmRsZXI6OmhhbmRsZUdlc3R1cmVUYXApOgorICAgICAgICAoV2ViQ29yZTo6RXZlbnRIYW5kbGVy
Ojpub2RlRm9yVGFwR2VzdHVyZUF0VG91Y2hQb2ludCk6CisgICAgICAgICogcGFnZS9FdmVudEhh
bmRsZXIuaDoKKyAgICAgICAgKiBwYWdlL1RvdWNoQWRqdXN0bWVudC5jcHA6IEFkZGVkLgorICAg
ICAgICAoV2ViQ29yZTo6VG91Y2hBZGp1c3RtZW50OjpIaXRUZXN0UXVhZDo6SGl0VGVzdFF1YWQp
OgorICAgICAgICAoV2ViQ29yZTo6VG91Y2hBZGp1c3RtZW50OjpIaXRUZXN0UXVhZDo6bm9kZSk6
CisgICAgICAgIChXZWJDb3JlOjpUb3VjaEFkanVzdG1lbnQ6OkhpdFRlc3RRdWFkOjpxdWFkKToK
KyAgICAgICAgKFdlYkNvcmU6OlRvdWNoQWRqdXN0bWVudDo6SGl0VGVzdFF1YWQ6OmJvdW5kaW5n
Qm94KToKKyAgICAgICAgKFdlYkNvcmU6OlRvdWNoQWRqdXN0bWVudDo6bm9kZVJlc3BvbmRzVG9U
YXBHZXN0dXJlKToKKyAgICAgICAgKFdlYkNvcmU6OlRvdWNoQWRqdXN0bWVudDo6YXBwZW5kQWJz
b2x1dGVRdWFkc0Zvck5vZGVUb0hpdExpc3QpOgorICAgICAgICAoV2ViQ29yZTo6VG91Y2hBZGp1
c3RtZW50Ojpjb21waWxlSGl0TGlzdCk6CisgICAgICAgIChXZWJDb3JlOjpUb3VjaEFkanVzdG1l
bnQ6OmRpc3RhbmNlVG9IaXRUZXN0UXVhZCk6CisgICAgICAgIChXZWJDb3JlOjpUb3VjaEFkanVz
dG1lbnQ6OmludGVyc2VjdGlvbldpdGhIaXRUZXN0UXVhZCk6CisgICAgICAgIChXZWJDb3JlOjpU
b3VjaEFkanVzdG1lbnQ6OmZpbmROb2RlV2l0aExvd2VzdE1ldHJpYyk6CisgICAgICAgIChXZWJD
b3JlOjpUb3VjaEFkanVzdG1lbnQ6OmZpbmROb2RlV2l0aEhpZ2hlc3RNZXRyaWMpOgorICAgICAg
ICAoV2ViQ29yZTo6ZmluZEJlc3RDYW5kaWRhdGVGb3JHZXN0dXJlVGFwKToKKyAgICAgICAgKiBw
YWdlL1RvdWNoQWRqdXN0bWVudC5oOiBBZGRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGlj
cy9GbG9hdFBvaW50Lmg6CisgICAgICAgIChXZWJDb3JlOjpGbG9hdFBvaW50OjpGbG9hdFBvaW50
KToKKyAgICAgICAgKFdlYkNvcmU6OkZsb2F0UG9pbnQ6OmRpc3RhbmNlVG9Qb2ludCk6CisgICAg
ICAgIChXZWJDb3JlOjpGbG9hdFBvaW50OjpkaXN0YW5jZVNxdWFyZWRUb1BvaW50KToKKyAgICAg
ICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9GbG9hdFF1YWQuaDoKKyAgICAgICAgKFdlYkNvcmU6OkZs
b2F0UXVhZDo6Y2VudGVyKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9GbG9hdFJlY3Qu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6ZGlzdGFuY2VUb0ludGVydmFsKToKKyAgICAgICAgKFdl
YkNvcmU6OkZsb2F0UmVjdDo6ZGlmZmVyZW5jZVRvUG9pbnQpOgorICAgICAgICAoV2ViQ29yZTo6
RmxvYXRSZWN0OjpkaXN0YW5jZVRvUG9pbnQpOgorICAgICAgICAoV2ViQ29yZTo6RmxvYXRSZWN0
OjpkaWZmZXJlbmNlRnJvbUNlbnRlckxpbmVUb1BvaW50KToKKyAgICAgICAgKiBwbGF0Zm9ybS9n
cmFwaGljcy9GbG9hdFJlY3QuaDoKKyAgICAgICAgKFdlYkNvcmU6OkZsb2F0UmVjdDo6ZGlzdGFu
Y2VTcXVhcmVkVG9Qb2ludCk6CisgICAgICAgIChXZWJDb3JlOjpGbG9hdFJlY3Q6OmRpc3RhbmNl
U3F1YXJlZEZyb21DZW50ZXJMaW5lVG9Qb2ludCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhp
Y3MvRmxvYXRTaXplLmg6CisgICAgICAgIChXZWJDb3JlOjpGbG9hdFNpemU6OmFyZWEpOgorICAg
ICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0ludFBvaW50Lmg6CisgICAgICAgIChXZWJDb3JlOjpJ
bnRQb2ludDo6bGVuZ3RoU3F1YXJlZCk6CisgICAgICAgIChXZWJDb3JlOjpJbnRQb2ludDo6ZGlz
dGFuY2VTcXVhcmVkVG9Qb2ludCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvSW50UmVj
dC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpkaXN0YW5jZVRvSW50ZXJ2YWwpOgorICAgICAgICAo
V2ViQ29yZTo6SW50UmVjdDo6ZGlmZmVyZW5jZVRvUG9pbnQpOgorICAgICAgICAoV2ViQ29yZTo6
SW50UmVjdDo6ZGlmZmVyZW5jZUZyb21DZW50ZXJMaW5lVG9Qb2ludCk6CisgICAgICAgICogcGxh
dGZvcm0vZ3JhcGhpY3MvSW50UmVjdC5oOgorICAgICAgICAoV2ViQ29yZTo6SW50UmVjdDo6ZGlz
dGFuY2VTcXVhcmVkVG9Qb2ludCk6CisgICAgICAgIChXZWJDb3JlOjpJbnRSZWN0OjpkaXN0YW5j
ZVNxdWFyZWRGcm9tQ2VudGVyTGluZVRvUG9pbnQpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBo
aWNzL0ludFNpemUuaDoKKyAgICAgICAgKFdlYkNvcmU6OkludFNpemU6OmFyZWEpOgorICAgICAg
ICAoV2ViQ29yZTo6SW50U2l6ZTo6ZGlhZ29uYWxMZW5ndGhTcXVhcmVkKToKKyAgICAgICAgKiB0
ZXN0aW5nL0ludGVybmFscy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJbnRlcm5hbHM6OnRvdWNo
UG9zaXRpb25BZGp1c3RlZFRvQmVzdE5vZGVGb3JHZXN0dXJlVGFwKToKKyAgICAgICAgKFdlYkNv
cmU6OkludGVybmFsczo6dG91Y2hOb2RlQWRqdXN0ZWRUb0Jlc3ROb2RlRm9yR2VzdHVyZVRhcCk6
CisgICAgICAgICogdGVzdGluZy9JbnRlcm5hbHMuaDoKKyAgICAgICAgKiB0ZXN0aW5nL0ludGVy
bmFscy5pZGw6CisKIDIwMTItMDItMjggIE5pa29sYXMgWmltbWVybWFubiAgPG56aW1tZXJtYW5u
QHJpbS5jb20+CiAKICAgICAgICAgSW50ZWdyYXRlIFNWR1VzZUVsZW1lbnQgd2l0aGluIHRoZSBu
ZXcgc2hhZG93IHJvb3QgY29uY2VwdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvVGFyZ2V0
LnByaSBiL1NvdXJjZS9XZWJDb3JlL1RhcmdldC5wcmkKaW5kZXggZjIwZGU1Zi4uOTI3NDU3ZSAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvVGFyZ2V0LnByaQorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9UYXJnZXQucHJpCkBAIC0xMDI0LDYgKzEwMjQsNyBAQCBTT1VSQ0VTICs9IFwKICAgICBwYWdl
L1NlY3VyaXR5UG9saWN5LmNwcCBcCiAgICAgcGFnZS9TZXR0aW5ncy5jcHAgXAogICAgIHBhZ2Uv
U3BhdGlhbE5hdmlnYXRpb24uY3BwIFwKKyAgICBwYWdlL1RvdWNoQWRqdXN0bWVudC5jcHAgXAog
ICAgIHBhZ2UvU3VzcGVuZGFibGVUaW1lci5jcHAgXAogICAgIHBhZ2UvVXNlckNvbnRlbnRVUkxQ
YXR0ZXJuLmNwcCBcCiAgICAgcGFnZS9XaW5kb3dGZWF0dXJlcy5jcHAgXApAQCAtMjA5OCw2ICsy
MDk5LDcgQEAgSEVBREVSUyArPSBcCiAgICAgcGFnZS9TcGVlY2hJbnB1dExpc3RlbmVyLmggXAog
ICAgIHBhZ2UvU3BlZWNoSW5wdXRSZXN1bHQuaCBcCiAgICAgcGFnZS9TcGVlY2hJbnB1dFJlc3Vs
dExpc3QuaCBcCisgICAgcGFnZS9Ub3VjaEFkanVzdG1lbnQuaCBcCiAgICAgcGFnZS9XZWJLaXRB
bmltYXRpb24uaCBcCiAgICAgcGFnZS9XZWJLaXRBbmltYXRpb25MaXN0LmggXAogICAgIHBhZ2Uv
V2luZG93RmVhdHVyZXMuaCBcCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL0V2ZW50
SGFuZGxlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL0V2ZW50SGFuZGxlci5jcHAKaW5kZXgg
M2MxMGI3NS4uMDFmN2YzMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGFnZS9FdmVudEhh
bmRsZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRXZlbnRIYW5kbGVyLmNwcApAQCAt
NzMsNiArNzMsNyBAQAogI2luY2x1ZGUgIlNjcm9sbGJhci5oIgogI2luY2x1ZGUgIlNldHRpbmdz
LmgiCiAjaW5jbHVkZSAiU3BhdGlhbE5hdmlnYXRpb24uaCIKKyNpbmNsdWRlICJTdGF0aWNIYXNo
U2V0Tm9kZUxpc3QuaCIKICNpbmNsdWRlICJTdHlsZUNhY2hlZEltYWdlLmgiCiAjaW5jbHVkZSAi
VGV4dEV2ZW50LmgiCiAjaW5jbHVkZSAiVGV4dEl0ZXJhdG9yLmgiCkBAIC04OCw2ICs4OSwxMCBA
QAogI2luY2x1ZGUgIlBsYXRmb3JtR2VzdHVyZUV2ZW50LmgiCiAjZW5kaWYKIAorI2lmIEVOQUJM
RShUT1VDSF9BREpVU1RNRU5UKQorI2luY2x1ZGUgIlRvdWNoQWRqdXN0bWVudC5oIgorI2VuZGlm
CisKICNpZiBFTkFCTEUoU1ZHKQogI2luY2x1ZGUgIlNWR0RvY3VtZW50LmgiCiAjaW5jbHVkZSAi
U1ZHRWxlbWVudEluc3RhbmNlLmgiCkBAIC0yMzYwLDEyICsyMzY1LDIzIEBAIGJvb2wgRXZlbnRI
YW5kbGVyOjpoYW5kbGVHZXN0dXJlRXZlbnQoY29uc3QgUGxhdGZvcm1HZXN0dXJlRXZlbnQmIGdl
c3R1cmVFdmVudCkKIAogYm9vbCBFdmVudEhhbmRsZXI6OmhhbmRsZUdlc3R1cmVUYXAoY29uc3Qg
UGxhdGZvcm1HZXN0dXJlRXZlbnQmIGdlc3R1cmVFdmVudCkKIHsKKyAgICBMYXlvdXRQb2ludCBh
ZGp1c3RlZFBvaW50ID0gZ2VzdHVyZUV2ZW50LnBvc2l0aW9uKCk7CisjaWYgRU5BQkxFKFRPVUNI
X0FESlVTVE1FTlQpCisgICAgaWYgKCFnZXN0dXJlRXZlbnQuYXJlYSgpLmlzRW1wdHkoKSkgewor
ICAgICAgICBOb2RlKiB0YXJnZXROb2RlID0gMDsKKyAgICAgICAgLy8gRm9yIG5vdyB3ZSB1c2Ug
dGhlIGFkanVzdGVkIHBvc2l0aW9uIHRvIGVuc3VyZSB0aGUgbGF0ZXIgcmVkdW5kYW50IGhpdC10
ZXN0cyBoaXRzIHRoZSByaWdodCBub2RlLgorICAgICAgICBiZXN0Q2xpY2thYmxlTm9kZUF0VG91
Y2hQb2ludChnZXN0dXJlRXZlbnQucG9zaXRpb24oKSwgSW50U2l6ZShnZXN0dXJlRXZlbnQuYXJl
YSgpLndpZHRoKCkgLyAyLCBnZXN0dXJlRXZlbnQuYXJlYSgpLmhlaWdodCgpIC8gMiksIGFkanVz
dGVkUG9pbnQsIHRhcmdldE5vZGUpOworICAgICAgICBpZiAoIXRhcmdldE5vZGUpCisgICAgICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorI2VuZGlmCisKICAgICAvLyBGSVhNRTogUmVmYWN0
b3IgdGhpcyBjb2RlIHRvIG5vdCBoaXQgdGVzdCBtdWx0aXBsZSB0aW1lcyBvbmNlIGhpdCB0ZXN0
aW5nCiAgICAgLy8gaGFzIGJlZW4gY29ycmVjdGVkIGFzIHN1Z2dlc3RlZCBhYm92ZSBpbiBoYW5k
bGVHZXN0dXJlRXZlbnQoKS4KICAgICBib29sIGRlZmF1bHRQcmV2ZW50ZWQgPSBmYWxzZTsKLSAg
ICBQbGF0Zm9ybU1vdXNlRXZlbnQgZmFrZU1vdXNlTW92ZShnZXN0dXJlRXZlbnQucG9zaXRpb24o
KSwgZ2VzdHVyZUV2ZW50Lmdsb2JhbFBvc2l0aW9uKCksIE5vQnV0dG9uLCBQbGF0Zm9ybUV2ZW50
OjpNb3VzZU1vdmVkLCAvKiBjbGlja0NvdW50ICovIDEsIGdlc3R1cmVFdmVudC5zaGlmdEtleSgp
LCBnZXN0dXJlRXZlbnQuY3RybEtleSgpLCBnZXN0dXJlRXZlbnQuYWx0S2V5KCksIGdlc3R1cmVF
dmVudC5tZXRhS2V5KCksIGdlc3R1cmVFdmVudC50aW1lc3RhbXAoKSk7Ci0gICAgUGxhdGZvcm1N
b3VzZUV2ZW50IGZha2VNb3VzZURvd24oZ2VzdHVyZUV2ZW50LnBvc2l0aW9uKCksIGdlc3R1cmVF
dmVudC5nbG9iYWxQb3NpdGlvbigpLCBMZWZ0QnV0dG9uLCBQbGF0Zm9ybUV2ZW50OjpNb3VzZVBy
ZXNzZWQsIC8qIGNsaWNrQ291bnQgKi8gMSwgZ2VzdHVyZUV2ZW50LnNoaWZ0S2V5KCksIGdlc3R1
cmVFdmVudC5jdHJsS2V5KCksIGdlc3R1cmVFdmVudC5hbHRLZXkoKSwgZ2VzdHVyZUV2ZW50Lm1l
dGFLZXkoKSwgZ2VzdHVyZUV2ZW50LnRpbWVzdGFtcCgpKTsKLSAgICBQbGF0Zm9ybU1vdXNlRXZl
bnQgZmFrZU1vdXNlVXAoZ2VzdHVyZUV2ZW50LnBvc2l0aW9uKCksIGdlc3R1cmVFdmVudC5nbG9i
YWxQb3NpdGlvbigpLCBMZWZ0QnV0dG9uLCBQbGF0Zm9ybUV2ZW50OjpNb3VzZVJlbGVhc2VkLCAv
KiBjbGlja0NvdW50ICovIDEsIGdlc3R1cmVFdmVudC5zaGlmdEtleSgpLCBnZXN0dXJlRXZlbnQu
Y3RybEtleSgpLCBnZXN0dXJlRXZlbnQuYWx0S2V5KCksIGdlc3R1cmVFdmVudC5tZXRhS2V5KCks
IGdlc3R1cmVFdmVudC50aW1lc3RhbXAoKSk7CisgICAgUGxhdGZvcm1Nb3VzZUV2ZW50IGZha2VN
b3VzZU1vdmUoYWRqdXN0ZWRQb2ludCwgZ2VzdHVyZUV2ZW50Lmdsb2JhbFBvc2l0aW9uKCksIE5v
QnV0dG9uLCBQbGF0Zm9ybUV2ZW50OjpNb3VzZU1vdmVkLCAvKiBjbGlja0NvdW50ICovIDEsIGdl
c3R1cmVFdmVudC5zaGlmdEtleSgpLCBnZXN0dXJlRXZlbnQuY3RybEtleSgpLCBnZXN0dXJlRXZl
bnQuYWx0S2V5KCksIGdlc3R1cmVFdmVudC5tZXRhS2V5KCksIGdlc3R1cmVFdmVudC50aW1lc3Rh
bXAoKSk7CisgICAgUGxhdGZvcm1Nb3VzZUV2ZW50IGZha2VNb3VzZURvd24oYWRqdXN0ZWRQb2lu
dCwgZ2VzdHVyZUV2ZW50Lmdsb2JhbFBvc2l0aW9uKCksIExlZnRCdXR0b24sIFBsYXRmb3JtRXZl
bnQ6Ok1vdXNlUHJlc3NlZCwgLyogY2xpY2tDb3VudCAqLyAxLCBnZXN0dXJlRXZlbnQuc2hpZnRL
ZXkoKSwgZ2VzdHVyZUV2ZW50LmN0cmxLZXkoKSwgZ2VzdHVyZUV2ZW50LmFsdEtleSgpLCBnZXN0
dXJlRXZlbnQubWV0YUtleSgpLCBnZXN0dXJlRXZlbnQudGltZXN0YW1wKCkpOworICAgIFBsYXRm
b3JtTW91c2VFdmVudCBmYWtlTW91c2VVcChhZGp1c3RlZFBvaW50LCBnZXN0dXJlRXZlbnQuZ2xv
YmFsUG9zaXRpb24oKSwgTGVmdEJ1dHRvbiwgUGxhdGZvcm1FdmVudDo6TW91c2VSZWxlYXNlZCwg
LyogY2xpY2tDb3VudCAqLyAxLCBnZXN0dXJlRXZlbnQuc2hpZnRLZXkoKSwgZ2VzdHVyZUV2ZW50
LmN0cmxLZXkoKSwgZ2VzdHVyZUV2ZW50LmFsdEtleSgpLCBnZXN0dXJlRXZlbnQubWV0YUtleSgp
LCBnZXN0dXJlRXZlbnQudGltZXN0YW1wKCkpOwogICAgIG1vdXNlTW92ZWQoZmFrZU1vdXNlTW92
ZSk7CiAgICAgZGVmYXVsdFByZXZlbnRlZCB8PSBoYW5kbGVNb3VzZVByZXNzRXZlbnQoZmFrZU1v
dXNlRG93bik7CiAgICAgZGVmYXVsdFByZXZlbnRlZCB8PSBoYW5kbGVNb3VzZVJlbGVhc2VFdmVu
dChmYWtlTW91c2VVcCk7CkBAIC0yMzg1LDYgKzI0MDEsMjQgQEAgYm9vbCBFdmVudEhhbmRsZXI6
OmhhbmRsZUdlc3R1cmVTY3JvbGxVcGRhdGUoY29uc3QgUGxhdGZvcm1HZXN0dXJlRXZlbnQmIGdl
c3R1cmUKIH0KICNlbmRpZgogCisjaWYgRU5BQkxFKFRPVUNIX0FESlVTVE1FTlQpCit2b2lkIEV2
ZW50SGFuZGxlcjo6YmVzdENsaWNrYWJsZU5vZGVBdFRvdWNoUG9pbnQoY29uc3QgSW50UG9pbnQm
IHRvdWNoQ2VudGVyLCBjb25zdCBJbnRTaXplJiB0b3VjaFJhZGl1cywgSW50UG9pbnQmIHRhcmdl
dFBvaW50LCBOb2RlKiYgdGFyZ2V0Tm9kZSkKK3sKKyAgICBIaXRUZXN0UmVxdWVzdDo6SGl0VGVz
dFJlcXVlc3RUeXBlIGhpdFR5cGUgPSBIaXRUZXN0UmVxdWVzdDo6UmVhZE9ubHkgfCBIaXRUZXN0
UmVxdWVzdDo6QWN0aXZlOworICAgIEludFJlY3QgdG91Y2hSZWN0KHRvdWNoQ2VudGVyIC0gdG91
Y2hSYWRpdXMsIEludFNpemUodG91Y2hSYWRpdXMud2lkdGgoKSAqIDIsIHRvdWNoUmFkaXVzLmhl
aWdodCgpICogMikpOworICAgIHRhcmdldE5vZGUgPSAwOworCisgICAgSGl0VGVzdFJlc3VsdCBy
ZXN1bHQgPSBoaXRUZXN0UmVzdWx0QXRQb2ludCh0b3VjaENlbnRlciwgLyphbGxvd1NoYWRvd0Nv
bnRlbnQqLyBmYWxzZSwgLyppZ25vcmVDbGlwcGluZyovIGZhbHNlLCBEb250SGl0VGVzdFNjcm9s
bGJhcnMsIGhpdFR5cGUsIHRvdWNoUmFkaXVzKTsKKworICAgIFJlZlB0cjxTdGF0aWNIYXNoU2V0
Tm9kZUxpc3Q+IG5vZGVMaXN0ID0gU3RhdGljSGFzaFNldE5vZGVMaXN0OjphZG9wdChyZXN1bHQu
cmVjdEJhc2VkVGVzdFJlc3VsdCgpKTsKKyAgICBpZiAoIWZpbmRCZXN0Q2xpY2thYmxlQ2FuZGlk
YXRlKHRhcmdldE5vZGUsIHRhcmdldFBvaW50LCB0b3VjaENlbnRlciwgdG91Y2hSZWN0LCAqbm9k
ZUxpc3QuZ2V0KCkpKSB7CisgICAgICAgIC8vIERlZmF1bHQgdG8ganVzdCByZXR1cm5pbmcgaW5u
ZXJOb25TaGFyZWROb2RlLgorICAgICAgICB0YXJnZXRQb2ludCA9IHRvdWNoQ2VudGVyOworICAg
ICAgICB0YXJnZXROb2RlID0gcmVzdWx0LmlubmVyTm9uU2hhcmVkTm9kZSgpOworICAgIH0KK30K
KyNlbmRpZgorCiAjaWYgRU5BQkxFKENPTlRFWFRfTUVOVVMpCiBib29sIEV2ZW50SGFuZGxlcjo6
c2VuZENvbnRleHRNZW51RXZlbnQoY29uc3QgUGxhdGZvcm1Nb3VzZUV2ZW50JiBldmVudCkKIHsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRXZlbnRIYW5kbGVyLmggYi9Tb3VyY2Uv
V2ViQ29yZS9wYWdlL0V2ZW50SGFuZGxlci5oCmluZGV4IGE1ZmYzMDMuLjVlYzVhNzMgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRXZlbnRIYW5kbGVyLmgKKysrIGIvU291cmNlL1dl
YkNvcmUvcGFnZS9FdmVudEhhbmRsZXIuaApAQCAtMTY2LDYgKzE2NiwxMCBAQCBwdWJsaWM6CiAg
ICAgYm9vbCBoYW5kbGVHZXN0dXJlU2Nyb2xsVXBkYXRlKGNvbnN0IFBsYXRmb3JtR2VzdHVyZUV2
ZW50Jik7CiAjZW5kaWYKIAorI2lmIEVOQUJMRShUT1VDSF9BREpVU1RNRU5UKQorICAgIHZvaWQg
YmVzdENsaWNrYWJsZU5vZGVBdFRvdWNoUG9pbnQoY29uc3QgSW50UG9pbnQmIHRvdWNoQ2VudGVy
LCBjb25zdCBJbnRTaXplJiB0b3VjaFJhZGl1cywgSW50UG9pbnQmIHRhcmdldFBvaW50LCBOb2Rl
KiYgdGFyZ2V0Tm9kZSk7CisjZW5kaWYKKwogI2lmIEVOQUJMRShDT05URVhUX01FTlVTKQogICAg
IGJvb2wgc2VuZENvbnRleHRNZW51RXZlbnQoY29uc3QgUGxhdGZvcm1Nb3VzZUV2ZW50Jik7CiAg
ICAgYm9vbCBzZW5kQ29udGV4dE1lbnVFdmVudEZvcktleSgpOwpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcGFnZS9Ub3VjaEFkanVzdG1lbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvcGFnZS9U
b3VjaEFkanVzdG1lbnQuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJi
ZDEzMTkKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL1RvdWNoQWRqdXN0
bWVudC5jcHAKQEAgLTAsMCArMSwyNDUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgTm9r
aWEgQ29ycG9yYXRpb24gYW5kL29yIGl0cyBzdWJzaWRpYXJ5KC1pZXMpCisgKgorICogVGhpcyBs
aWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgor
ICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQ
dWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5k
YXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBv
cHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmli
dXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQg
QU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1F
UkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0
aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWls
cy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGli
cmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsg
c2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUg
U29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9v
ciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpbmNsdWRlICJjb25m
aWcuaCIKKworI2luY2x1ZGUgIlRvdWNoQWRqdXN0bWVudC5oIgorCisjaW5jbHVkZSAiQ29udGFp
bmVyTm9kZS5oIgorI2luY2x1ZGUgIkZsb2F0UG9pbnQuaCIKKyNpbmNsdWRlICJGbG9hdFF1YWQu
aCIKKyNpbmNsdWRlICJJbnRQb2ludC5oIgorI2luY2x1ZGUgIkludFNpemUuaCIKKyNpbmNsdWRl
ICJOb2RlLmgiCisjaW5jbHVkZSAiUmVuZGVyQm94LmgiCisjaW5jbHVkZSAiUmVuZGVyT2JqZWN0
LmgiCisjaW5jbHVkZSAiUmVuZGVyU3R5bGUuaCIKKyNpbmNsdWRlICJIVE1MTGFiZWxFbGVtZW50
LmgiCisjaW5jbHVkZSAiSFRNTE5hbWVzLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworbmFt
ZXNwYWNlIFRvdWNoQWRqdXN0bWVudCB7CisKK2NsYXNzIEhpdFRlc3RRdWFkIHsKK3B1YmxpYzoK
KyAgICBIaXRUZXN0UXVhZChOb2RlKiBub2RlLCBjb25zdCBGbG9hdFF1YWQmIHF1YWQpIDogbV9u
b2RlKG5vZGUpLCBtX3F1YWQocXVhZCkgeyB9CisKKyAgICBOb2RlKiBub2RlKCkgY29uc3QgeyBy
ZXR1cm4gbV9ub2RlOyB9CisgICAgRmxvYXRRdWFkIHF1YWQoKSBjb25zdCB7IHJldHVybiBtX3F1
YWQ7IH0KKyAgICBMYXlvdXRSZWN0IGJvdW5kaW5nQm94KCkgY29uc3QgeyByZXR1cm4gbV9xdWFk
LmVuY2xvc2luZ0JvdW5kaW5nQm94KCk7IH0KKworcHJpdmF0ZToKKyAgICBOb2RlKiBtX25vZGU7
CisgICAgRmxvYXRRdWFkIG1fcXVhZDsKK307CisKK3R5cGVkZWYgVmVjdG9yPEhpdFRlc3RRdWFk
PiBIaXRMaXN0OwordHlwZWRlZiBib29sICgqTm9kZUZpbHRlcikoTm9kZSopOwordHlwZWRlZiBm
bG9hdCAoKk1ldHJpYykoY29uc3QgTGF5b3V0UG9pbnQmLCBjb25zdCBMYXlvdXRSZWN0JiwgY29u
c3QgSGl0VGVzdFF1YWQmKTsKKworLy8gVGFrZXMgbm9uLWNvbnN0IE5vZGUqIGJlY2F1c2UgaXND
b250ZW50RWRpdGFibGUgaXMgYSBub24tY29uc3QgZnVuY3Rpb24uCitib29sIG5vZGVSZXNwb25k
c1RvVGFwR2VzdHVyZShOb2RlKiBub2RlKQoreworICAgIGlmIChub2RlLT5pc0xpbmsoKQorICAg
ICAgICB8fCBub2RlLT5pc0NvbnRlbnRFZGl0YWJsZSgpCisgICAgICAgIHx8IG5vZGUtPmlzTW91
c2VGb2N1c2FibGUoKSkKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgaWYgKG5vZGUtPmlzRWxl
bWVudE5vZGUoKSkgeworICAgICAgICBFbGVtZW50KiBlbGVtZW50ID0gIHN0YXRpY19jYXN0PEVs
ZW1lbnQqPihub2RlKTsKKyAgICAgICAgaWYgKGVsZW1lbnQtPmhhc1RhZ05hbWUoSFRNTE5hbWVz
OjpsYWJlbFRhZykgJiYgc3RhdGljX2Nhc3Q8SFRNTExhYmVsRWxlbWVudCo+KGVsZW1lbnQpLT5j
b250cm9sKCkpCisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAgLy8gRklYTUU6
IEltcGxlbWVudCBoYXNEZWZhdWx0RXZlbnRIYW5kbGVyIGFuZCB1c2UgdGhhdCBpbnN0ZWFkIG9m
IGFsbCBvZiB0aGUgYWJvdmUgY2hlY2tzLgorICAgIGlmIChub2RlLT5oYXNFdmVudExpc3RlbmVy
cygpCisgICAgICAgICYmIChub2RlLT5oYXNFdmVudExpc3RlbmVycyhldmVudE5hbWVzKCkuY2xp
Y2tFdmVudCkKKyAgICAgICAgICAgIHx8IG5vZGUtPmhhc0V2ZW50TGlzdGVuZXJzKGV2ZW50TmFt
ZXMoKS5ET01BY3RpdmF0ZUV2ZW50KQorICAgICAgICAgICAgfHwgbm9kZS0+aGFzRXZlbnRMaXN0
ZW5lcnMoZXZlbnROYW1lcygpLm1vdXNlZG93bkV2ZW50KQorICAgICAgICAgICAgfHwgbm9kZS0+
aGFzRXZlbnRMaXN0ZW5lcnMoZXZlbnROYW1lcygpLm1vdXNldXBFdmVudCkKKyAgICAgICAgICAg
IHx8IG5vZGUtPmhhc0V2ZW50TGlzdGVuZXJzKGV2ZW50TmFtZXMoKS5tb3VzZW1vdmVFdmVudCkK
KyAgICAgICAgICAgIC8vIENoZWNraW5nIGZvciBmb2N1cyBldmVudHMgaXMgbm90IG5lY2Vzc2Fy
eSBzaW5jZSB0aGV5IGNhbiBvbmx5IGZpcmUgb24KKyAgICAgICAgICAgIC8vIGZvY3VzYWJsZSBl
bGVtZW50cyB3aGljaCBoYXZlIGFscmVhZHkgYmVlbiBjYXB0dXJlZCBhYm92ZS4KKyAgICAgICAg
KSkKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgaWYgKG5vZGUtPnJlbmRlclN0eWxlKCkpIHsK
KyAgICAgICAgLy8gQWNjZXB0IG5vZGVzIHRoYXQgaGFzIGEgQ1NTIGVmZmVjdCB3aGVuIHRvdWNo
ZWQuCisgICAgICAgIGlmIChub2RlLT5yZW5kZXJTdHlsZSgpLT5hZmZlY3RlZEJ5QWN0aXZlUnVs
ZXMoKSB8fCBub2RlLT5yZW5kZXJTdHlsZSgpLT5hZmZlY3RlZEJ5SG92ZXJSdWxlcygpKQorICAg
ICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorICAgIHJldHVybiBmYWxzZTsKK30KKworYm9v
bCBub2RlUmVzcG9uZHNUb1Njcm9sbEdlc3R1cmUoTm9kZSogbm9kZSkKK3sKKyAgICBpZiAoY29u
c3QgUmVuZGVyT2JqZWN0KiByZW5kZXJlciA9IG5vZGUtPnJlbmRlcmVyKCkpIHsKKyAgICAgICAg
Y29uc3QgUmVuZGVyQm94KiBlbmNsb3NpbmdCb3ggPSByZW5kZXJlci0+ZW5jbG9zaW5nQm94KCk7
CisgICAgICAgIGlmIChlbmNsb3NpbmdCb3ggJiYgZW5jbG9zaW5nQm94LT5zY3JvbGxzT3ZlcmZs
b3coKSkKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKyAgICBpZiAobm9kZS0+aGFz
RXZlbnRMaXN0ZW5lcnMoZXZlbnROYW1lcygpLnNjcm9sbEV2ZW50KSkKKyAgICAgICAgcmV0dXJu
IHRydWU7CisgICAgcmV0dXJuIGZhbHNlOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgYXBwZW5k
QWJzb2x1dGVRdWFkc0Zvck5vZGVUb0hpdExpc3QoTm9kZSogbm9kZSwgSGl0TGlzdCYgaGl0bGlz
dCkKK3sKKyAgICAvLyBTaW5jZSB0aGUgbm9kZSBpcyBhIHJlc3VsdCBvZiBhIGhpdCB0ZXN0LCB3
ZSBhcmUgYWxyZWFkeSBlbnN1cmVkIGl0IGhhcyBhIHJlbmRlcmVyLgorICAgIEFTU0VSVChub2Rl
LT5yZW5kZXJlcigpKTsKKworICAgIFZlY3RvcjxGbG9hdFF1YWQ+IHF1YWRzOworICAgIG5vZGUt
PnJlbmRlcmVyKCktPmFic29sdXRlUXVhZHMocXVhZHMpOworCisgICAgVmVjdG9yPEZsb2F0UXVh
ZD46OmNvbnN0X2l0ZXJhdG9yIGl0ID0gcXVhZHMuYmVnaW4oKTsKKyAgICBjb25zdCBWZWN0b3I8
RmxvYXRRdWFkPjo6Y29uc3RfaXRlcmF0b3IgZW5kID0gcXVhZHMuZW5kKCk7CisgICAgZm9yICg7
IGl0ICE9IGVuZDsgKytpdCkKKyAgICAgICAgaGl0bGlzdC5hcHBlbmQoSGl0VGVzdFF1YWQobm9k
ZSwgKml0KSk7Cit9CisKKy8vIENvbXBpbGUgYSBsaXN0IG9mIGFic29sdXRlIHJlY3RzIHJlcHJl
c2VuZGluZyBub2RlcyByZXNwb25kaW5nIHRoZSB0YXAgZ2VzdHVyZS4KK3ZvaWQgY29tcGlsZUhp
dExpc3QoY29uc3QgTm9kZUxpc3QmIGludGVyc2VjdGVkTm9kZXMsIEhpdExpc3QmIGhpdGxpc3Qs
IE5vZGVGaWx0ZXIgbm9kZUZpbHRlcikKK3sKKyAgICAvLyBGaW5kIGNhbmRpZGF0ZXMgcmVzcG9u
ZGluZyB0byB0YXAgZ2VzdHVyZSBldmVudHMgaW4gTyhuKSB0aW1lLgorICAgIEhhc2hNYXA8Tm9k
ZSosIE5vZGUqPiByZXNwb25kZXJNYXA7CisgICAgSGFzaFNldDxOb2RlKj4gYW5jZXN0b3JzVG9S
ZXNwb25kZXJzU2V0OworICAgIFZlY3RvcjxOb2RlKj4gY2FuZGlkYXRlczsKKworICAgIGNvbnN0
IHVuc2lnbmVkIGludCBsZW5ndGggPSBpbnRlcnNlY3RlZE5vZGVzLmxlbmd0aCgpOworICAgIGZv
ciAodW5zaWduZWQgaW50IGk9MDsgaSA8IGxlbmd0aDsgKytpKSB7CisgICAgICAgIE5vZGUqIG5v
ZGUgPSBpbnRlcnNlY3RlZE5vZGVzLml0ZW0oaSk7CisgICAgICAgIGlmIChyZXNwb25kZXJNYXAu
Y29udGFpbnMobm9kZSkpCisgICAgICAgICAgICAvLyBTa2lwIG5vZGVzIHRoYXQgYXJlIGRpcmVj
dCBhbmNlc3RvcnMgb2Ygb3RoZXIgY2FuZGlkYXRlcy4gVGhleSB3b3VsZCBoaXQtdGVzdCBhZ2Fp
bnN0IHRoZSBzYW1lIGFic29sdXRlIHF1YWRzLgorICAgICAgICAgICAgY29udGludWU7CisgICAg
ICAgIFZlY3RvcjxOb2RlKj4gYW5jZXN0b3JzOworICAgICAgICBOb2RlKiByZXNwb25kaW5nTm9k
ZSA9IDA7CisgICAgICAgIGZvciAoOyBub2RlOyBub2RlID0gbm9kZS0+cGFyZW50T3JIb3N0Tm9k
ZSgpKSB7CisgICAgICAgICAgICAvLyBDaGVjayBpZiB3ZSBhbHJlYWR5IGhhdmUgYSByZXN1bHQg
Zm9yIGEgY29tbW9uIGFuY2VzdG9yIGZyb20gYW5vdGhlciBjYW5kaWRhdGUuCisgICAgICAgICAg
ICByZXNwb25kaW5nTm9kZSA9IHJlc3BvbmRlck1hcC5nZXQobm9kZSk7CisgICAgICAgICAgICBp
ZiAocmVzcG9uZGluZ05vZGUpCisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBh
bmNlc3RvcnMuYXBwZW5kKG5vZGUpOworICAgICAgICAgICAgLy8gQ2hlY2sgaWYgdGhlIG5vZGUg
ZmlsdGVyIGFwcGxpZXMsIHdoaWNoIHdvdWxkIG1lYW4gd2UgaGF2ZSBmb3VuZCBhIHJlc3BvbmRp
bmcgbm9kZS4KKyAgICAgICAgICAgIGlmIChub2RlRmlsdGVyKG5vZGUpKSB7CisgICAgICAgICAg
ICAgICAgcmVzcG9uZGluZ05vZGUgPSBub2RlOworICAgICAgICAgICAgICAgIC8vIE5vdyB0aGF0
IHdlIGhhdmUgdGhlIHJlc3BvbmRlciwgc2V0IHRoZSByZXNwb25kZXIgZm9yIGFsbCB0aGUgbm9k
ZXMgc2VlbiBzbyBmYXIuCisgICAgICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7
IGkgPCBhbmNlc3RvcnMuc2l6ZSgpOyBpKyspCisgICAgICAgICAgICAgICAgICAgIHJlc3BvbmRl
ck1hcC5hZGQoYW5jZXN0b3JzW2ldLCBub2RlKTsKKyAgICAgICAgICAgICAgICAvLyBUaGUgY29u
dGludWUgdGhlIGl0ZXJhdGlvbiB0byBjb2xsZWN0IHRoZSBhbmNlc3RvcnMgb2YgdGhlIHJlc3Bv
bmRlci4KKyAgICAgICAgICAgICAgICBmb3IgKG5vZGUgPSBub2RlLT5wYXJlbnRPckhvc3ROb2Rl
KCk7IG5vZGU7IG5vZGUgPSBub2RlLT5wYXJlbnRPckhvc3ROb2RlKCkpIHsKKyAgICAgICAgICAg
ICAgICAgICAgcGFpcjxIYXNoU2V0PE5vZGUqPjo6aXRlcmF0b3IsIGJvb2w+IHRtcCA9IGFuY2Vz
dG9yc1RvUmVzcG9uZGVyc1NldC5hZGQobm9kZSk7CisgICAgICAgICAgICAgICAgICAgIGlmICgh
dG1wLnNlY29uZCkKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQor
ICAgICAgICBpZiAocmVzcG9uZGluZ05vZGUpCisgICAgICAgICAgICBjYW5kaWRhdGVzLmFwcGVu
ZChpbnRlcnNlY3RlZE5vZGVzLml0ZW0oaSkpOworICAgICAgICBlbHNlIHsKKyAgICAgICAgICAg
IC8vIEluc2VydCB0aGUgbm9kZXMgd2l0aCBtaXNzaW5nIHJlc3BvbmRlcnMgaW50byB0aGUgcmVz
cG9uZGVyLW1hcCBmb3IgZmFzdCByZWplY3Rpb24gb2YgbGF0ZXIgY2FuZGlkYXRlcy4KKyAgICAg
ICAgICAgIGZvciAodW5zaWduZWQgaW50IGkgPSAwOyBpIDwgYW5jZXN0b3JzLnNpemUoKTsgaSsr
KQorICAgICAgICAgICAgICAgIHJlc3BvbmRlck1hcC5hZGQoYW5jZXN0b3JzW2ldLCAwKTsKKyAg
ICAgICAgfQorICAgIH0KKworICAgIC8vIFdlIGNvbXBpbGUgdGhlIGxpc3Qgb2YgY29tcG9uZW50
IGFic29sdXRlIHF1YWRzIGluc3RlYWQgb2YgdXNpbmcgdGhlIGJvdW5kaW5nIHJlY3QKKyAgICAv
LyB0byBiZSBhYmxlIHRvIHBlcmZvcm0gYmV0dGVyIGhpdC10ZXN0aW5nIG9uIGlubGluZSBsaW5r
cyBvbiBsaW5lLWJyZWFrcy4KKyAgICBWZWN0b3I8Tm9kZSo+Ojpjb25zdF9pdGVyYXRvciBpdDIg
PSBjYW5kaWRhdGVzLmJlZ2luKCk7CisgICAgY29uc3QgVmVjdG9yPE5vZGUqPjo6Y29uc3RfaXRl
cmF0b3IgZW5kMiA9IGNhbmRpZGF0ZXMuZW5kKCk7CisgICAgZm9yICg7IGl0MiAhPSBlbmQyOyAr
K2l0MikgeworICAgICAgICAvLyBTa2lwIG5vZGVzIHdob3MgcmVzcG9uZGVycyBhcmUgYW5jZXN0
b3JzIG9mIG90aGVyIHJlc3BvbmRlcnMuIFRoaXMgZ2l2ZXMgcHJlZmVyZW5jZSB0byB0aGUgaW5u
ZXItbW9zdCBldmVudC1oYW5kbGVycy4KKyAgICAgICAgLy8gU28gdGhhdCBhIGxpbmsgaXMgYWx3
YXlzIHByZWZlcnJlZCBldmVuIHdoZW4gY29udGFpbmVkIGluIGFuIGVsZW1lbnQgdGhhdCBtb25p
dG9ycyBhbGwgY2xpY2stZXZlbnRzLgorICAgICAgICBOb2RlKiByZXNwb25kaW5nTm9kZSA9IHJl
c3BvbmRlck1hcC5nZXQoKml0Mik7CisgICAgICAgIEFTU0VSVChyZXNwb25kaW5nTm9kZSk7Cisg
ICAgICAgIGlmIChhbmNlc3RvcnNUb1Jlc3BvbmRlcnNTZXQuY29udGFpbnMocmVzcG9uZGluZ05v
ZGUpKQorICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIGFwcGVuZEFic29sdXRlUXVhZHNG
b3JOb2RlVG9IaXRMaXN0KCppdDIsIGhpdGxpc3QpOworICAgIH0KK30KKworLy8gUmV0dXJucyB0
aGUgZGlzdGFuY2Ugc3F1YXJlZCB0byB0aGUgYm91bmRpbmcgYm94IGNlbnRlcmxpbmUuCitmbG9h
dCBkaXN0YW5jZVRvSGl0VGVzdFF1YWQoY29uc3QgTGF5b3V0UG9pbnQmIHRvdWNoSG90c3BvdCwg
Y29uc3QgTGF5b3V0UmVjdCYsIGNvbnN0IEhpdFRlc3RRdWFkJiBoaXRUZXN0UXVhZCkKK3sKKyAg
ICAvLyBVc2luZyB0aGUgYm91bmRpbmcgYm94IG1lYW5zIHRoZSBkaXN0YW5jZSB0byBjZW50ZXJs
aW5lIGlzIGxlc3MgbWVhbmluZ2Z1bCBmb3IgdHJhbnNmb3JtZWQgcmVjdGFuZ2xlcywKKyAgICAv
LyBidXQgY2FsY3VsYXRpbmcgdGhlIGRpc3RhbmNlIHRvIHF1YWRzIGNhbiBiZSB2ZXJ5IGV4cGVu
c2l2ZSwgYW5kIHdlIGRvIG5vdCB3YW50IHRvIGNhbGN1bGNhdGUKKyAgICAvLyBxdWFkIGJhc2Vk
IGRpc3RhbmNlcyBmb3IgdW50cmFuc2Zvcm1lZCByZWN0YW5nbGVzLgorICAgIEludFJlY3QgcmVj
dCA9IGhpdFRlc3RRdWFkLmJvdW5kaW5nQm94KCk7CisKKyAgICByZXR1cm4gcmVjdC5kaXN0YW5j
ZVNxdWFyZWRGcm9tQ2VudGVyTGluZVRvUG9pbnQodG91Y2hIb3RzcG90KTsKK30KKworLy8gUmV0
dXJucyB0aGUgYXJlYSBvZiB0aGUgaW50ZXJzZWN0aW9uLgorZmxvYXQgaW50ZXJzZWN0aW9uV2l0
aEhpdFRlc3RRdWFkKGNvbnN0IExheW91dFBvaW50JiwgY29uc3QgTGF5b3V0UmVjdCYgdG91Y2hS
ZWN0LCBjb25zdCBIaXRUZXN0UXVhZCYgaGl0VGVzdFF1YWQpCit7CisgICAgSW50UmVjdCByZWN0
ID0gaGl0VGVzdFF1YWQuYm91bmRpbmdCb3goKTsKKyAgICBJbnRSZWN0IGludGVyc2VjdGlvbiA9
IHJlY3Q7CisgICAgcmVjdC5pbnRlcnNlY3QodG91Y2hSZWN0KTsKKworICAgIHJldHVybiBpbnRl
cnNlY3Rpb24uc2l6ZSgpLmFyZWEoKTsKK30KKworYm9vbCBmaW5kTm9kZVdpdGhMb3dlc3RNZXRy
aWMoTm9kZSomIHRhcmdldE5vZGUsIExheW91dFBvaW50JiB0YXJnZXRQb2ludCwgY29uc3QgTGF5
b3V0UG9pbnQmIHRvdWNoSG90c3BvdCwgY29uc3QgTGF5b3V0UmVjdCYgdG91Y2hBcmVhLCBIaXRM
aXN0JiBoaXRsaXN0LCBNZXRyaWMgbWV0cmljKQoreworICAgIHRhcmdldE5vZGUgPSAwOworCisg
ICAgZmxvYXQgYmVzdE1ldHJpYyA9IElORklOSVRZOworICAgIEhpdExpc3Q6OmNvbnN0X2l0ZXJh
dG9yIGl0ID0gaGl0bGlzdC5iZWdpbigpOworICAgIEhpdExpc3Q6OmNvbnN0X2l0ZXJhdG9yIGVu
ZCA9IGhpdGxpc3QuZW5kKCk7CisgICAgZm9yICg7IGl0ICE9IGVuZDsgKytpdCkgeworICAgICAg
ICBOb2RlKiBoaXROb2RlID0gaXQtPm5vZGUoKTsKKyAgICAgICAgZmxvYXQgaGl0TWV0cmljID0g
bWV0cmljKHRvdWNoSG90c3BvdCwgdG91Y2hBcmVhLCAqaXQpOworICAgICAgICBpZiAoaGl0TWV0
cmljIDwgYmVzdE1ldHJpYykgeworICAgICAgICAgICAgdGFyZ2V0UG9pbnQgPSByb3VuZGVkTGF5
b3V0UG9pbnQoaXQtPnF1YWQoKS5jZW50ZXIoKSk7CisgICAgICAgICAgICB0YXJnZXROb2RlID0g
aGl0Tm9kZTsKKyAgICAgICAgICAgIGJlc3RNZXRyaWMgPSBoaXRNZXRyaWM7CisgICAgICAgIH0K
KyAgICB9CisKKyAgICByZXR1cm4gKHRhcmdldE5vZGUpOworfQorCitib29sIGZpbmROb2RlV2l0
aEhpZ2hlc3RNZXRyaWMoTm9kZSomIHRhcmdldE5vZGUsIExheW91dFBvaW50JiB0YXJnZXRQb2lu
dCwgY29uc3QgTGF5b3V0UG9pbnQmIHRvdWNoSG90c3BvdCwgY29uc3QgTGF5b3V0UmVjdCYgdG91
Y2hBcmVhLCBIaXRMaXN0JiBoaXRsaXN0LCBNZXRyaWMgbWV0cmljKQoreworICAgIHRhcmdldE5v
ZGUgPSAwOworCisgICAgZmxvYXQgYmVzdE1ldHJpYyA9IDA7CisgICAgSGl0TGlzdDo6Y29uc3Rf
aXRlcmF0b3IgaXQgPSBoaXRsaXN0LmJlZ2luKCk7CisgICAgSGl0TGlzdDo6Y29uc3RfaXRlcmF0
b3IgZW5kID0gaGl0bGlzdC5lbmQoKTsKKyAgICBmb3IgKDsgaXQgIT0gZW5kOyArK2l0KSB7Cisg
ICAgICAgIE5vZGUqIGhpdE5vZGUgPSBpdC0+bm9kZSgpOworICAgICAgICBmbG9hdCBoaXRNZXRy
aWMgPSBtZXRyaWModG91Y2hIb3RzcG90LCB0b3VjaEFyZWEsICppdCk7CisgICAgICAgIGlmICho
aXRNZXRyaWMgPiBiZXN0TWV0cmljKSB7CisgICAgICAgICAgICB0YXJnZXRQb2ludCA9IHJvdW5k
ZWRMYXlvdXRQb2ludChpdC0+cXVhZCgpLmNlbnRlcigpKTsKKyAgICAgICAgICAgIHRhcmdldE5v
ZGUgPSBoaXROb2RlOworICAgICAgICAgICAgYmVzdE1ldHJpYyA9IGhpdE1ldHJpYzsKKyAgICAg
ICAgfQorICAgIH0KKworICAgIHJldHVybiAodGFyZ2V0Tm9kZSk7Cit9CisKK30gLy8gbmFtZXNw
YWNlIFRvdWNoQWRqdXN0bWVudAorCitib29sIGZpbmRCZXN0Q2xpY2thYmxlQ2FuZGlkYXRlKE5v
ZGUqJiB0YXJnZXROb2RlLCBMYXlvdXRQb2ludCYgdGFyZ2V0UG9pbnQsIGNvbnN0IExheW91dFBv
aW50JiB0b3VjaEhvdHNwb3QsIGNvbnN0IExheW91dFJlY3QmIHRvdWNoQXJlYSwgY29uc3QgTm9k
ZUxpc3QmIG5vZGVMaXN0KQoreworICAgIFRvdWNoQWRqdXN0bWVudDo6SGl0TGlzdCBoaXRsaXN0
OworICAgIFRvdWNoQWRqdXN0bWVudDo6Y29tcGlsZUhpdExpc3Qobm9kZUxpc3QsIGhpdGxpc3Qs
IFRvdWNoQWRqdXN0bWVudDo6bm9kZVJlc3BvbmRzVG9UYXBHZXN0dXJlKTsKKyAgICByZXR1cm4g
VG91Y2hBZGp1c3RtZW50OjpmaW5kTm9kZVdpdGhMb3dlc3RNZXRyaWModGFyZ2V0Tm9kZSwgdGFy
Z2V0UG9pbnQsIHRvdWNoSG90c3BvdCwgdG91Y2hBcmVhLCBoaXRsaXN0LCBUb3VjaEFkanVzdG1l
bnQ6OmRpc3RhbmNlVG9IaXRUZXN0UXVhZCk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvVG91Y2hBZGp1c3RtZW50LmggYi9Tb3Vy
Y2UvV2ViQ29yZS9wYWdlL1RvdWNoQWRqdXN0bWVudC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAuLmUxNjg2OTcKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9w
YWdlL1RvdWNoQWRqdXN0bWVudC5oCkBAIC0wLDAgKzEsMzUgQEAKKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTIgTm9raWEgQ29ycG9yYXRpb24gYW5kL29yIGl0cyBzdWJzaWRpYXJ5KC1pZXMpCisg
KgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRl
IGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJh
cnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNv
ZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBv
ciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFy
eSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICog
YnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFu
dHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVS
UE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9y
IG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9m
IHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRo
aXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bwor
ICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0
LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNp
Zm5kZWYgVG91Y2hBZGp1c3RtZW50X2gKKyNkZWZpbmUgVG91Y2hBZGp1c3RtZW50X2gKKworI2lu
Y2x1ZGUgIkxheW91dFR5cGVzLmgiCisjaW5jbHVkZSAiTm9kZS5oIgorI2luY2x1ZGUgIk5vZGVM
aXN0LmgiCisjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisK
K2Jvb2wgZmluZEJlc3RDbGlja2FibGVDYW5kaWRhdGUoTm9kZSomIHRhcmdldE5vZGUsIExheW91
dFBvaW50JiB0YXJnZXRQb2ludCwgY29uc3QgTGF5b3V0UG9pbnQmIHRvdWNoSG90c3BvdCwgY29u
c3QgTGF5b3V0UmVjdCYgdG91Y2hBcmVhLCBjb25zdCBOb2RlTGlzdCYgKTsKKy8vIEZJWE1FOiBJ
bXBsZW1lbnQgdGhlIHNpbWlsYXIgZnVuY3Rpb25zIGZvciBvdGhlciBnZXN0dXJlcyBoZXJlIGFz
IHdlbGwuCisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9GbG9hdFBvaW50LmggYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9GbG9hdFBvaW50LmgKaW5kZXggMDk0MzA0ZC4uYzgzY2Zm
YiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRmxvYXRQb2lu
dC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0Zsb2F0UG9pbnQuaApA
QCAtNjksNiArNjksNyBAQCBwdWJsaWM6CiAgICAgRmxvYXRQb2ludChmbG9hdCB4LCBmbG9hdCB5
KSA6IG1feCh4KSwgbV95KHkpIHsgfQogICAgIEZsb2F0UG9pbnQoY29uc3QgSW50UG9pbnQmKTsK
ICAgICBGbG9hdFBvaW50KGNvbnN0IEZyYWN0aW9uYWxMYXlvdXRQb2ludCYpOworICAgIGV4cGxp
Y2l0IEZsb2F0UG9pbnQoRmxvYXRTaXplIHNpemUpIDogbV94KHNpemUud2lkdGgoKSksIG1feShz
aXplLmhlaWdodCgpKSB7IH0KIAogICAgIHN0YXRpYyBGbG9hdFBvaW50IHplcm8oKSB7IHJldHVy
biBGbG9hdFBvaW50KCk7IH0KIApAQCAtMTMwLDYgKzEzMSw5IEBAIHB1YmxpYzoKICAgICAgICAg
cmV0dXJuIG1feCAqIG1feCArIG1feSAqIG1feTsKICAgICB9CiAKKyAgICBmbG9hdCBkaXN0YW5j
ZVRvUG9pbnQoY29uc3QgRmxvYXRQb2ludCYpIGNvbnN0OworICAgIGZsb2F0IGRpc3RhbmNlU3F1
YXJlZFRvUG9pbnQoY29uc3QgRmxvYXRQb2ludCYpIGNvbnN0OworCiAgICAgRmxvYXRQb2ludCBl
eHBhbmRlZFRvKGNvbnN0IEZsb2F0UG9pbnQmIG90aGVyKSBjb25zdAogICAgIHsKICAgICAgICAg
cmV0dXJuIEZsb2F0UG9pbnQoc3RkOjptYXgobV94LCBvdGhlci5tX3gpLCBzdGQ6Om1heChtX3ks
IG90aGVyLm1feSkpOwpAQCAtMjI4LDYgKzIzMiwxNyBAQCBpbmxpbmUgZmxvYXQgb3BlcmF0b3Iq
KGNvbnN0IEZsb2F0UG9pbnQmIGEsIGNvbnN0IEZsb2F0UG9pbnQmIGIpCiAgICAgcmV0dXJuIGEu
ZG90KGIpOwogfQogCitpbmxpbmUgZmxvYXQgRmxvYXRQb2ludDo6ZGlzdGFuY2VUb1BvaW50KGNv
bnN0IEZsb2F0UG9pbnQmIHBvaW50KSBjb25zdAoreworICAgIHJldHVybiAoKnRoaXMgLSBwb2lu
dCkuZGlhZ29uYWxMZW5ndGgoKTsKK30KKworaW5saW5lIGZsb2F0IEZsb2F0UG9pbnQ6OmRpc3Rh
bmNlU3F1YXJlZFRvUG9pbnQoY29uc3QgRmxvYXRQb2ludCYgcG9pbnQpIGNvbnN0Cit7CisgICAg
cmV0dXJuICgqdGhpcyAtIHBvaW50KS5kaWFnb25hbExlbmd0aFNxdWFyZWQoKTsKK30KKworCiBp
bmxpbmUgSW50UG9pbnQgcm91bmRlZEludFBvaW50KGNvbnN0IEZsb2F0UG9pbnQmIHApCiB7CiAg
ICAgcmV0dXJuIEludFBvaW50KHN0YXRpY19jYXN0PGludD4ocm91bmRmKHAueCgpKSksIHN0YXRp
Y19jYXN0PGludD4ocm91bmRmKHAueSgpKSkpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvRmxvYXRRdWFkLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9GbG9hdFF1YWQuaAppbmRleCBiNWUyYThjLi5iZmI3OTRkIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9GbG9hdFF1YWQuaAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9GbG9hdFF1YWQuaApAQCAtODgsNiArODgsMTMgQEAg
cHVibGljOgogICAgIC8vIGZyb20gdHJhbnNmb3JtZWQgcmVjdHMuCiAgICAgYm9vbCBjb250YWlu
c1F1YWQoY29uc3QgRmxvYXRRdWFkJikgY29uc3Q7CiAKKyAgICAvLyBUaGUgY2VudGVyIG9mIHRo
ZSBxdWFkLiBJZiB0aGUgcXVhZCBpcyB0aGUgcmVzdWx0IG9mIGEgYWZmaW5lLXRyYW5zZm9ybWVk
IHJlY3RhbmdsZSB0aGlzIGlzIHRoZSBzYW1lIGFzIHRoZSBvcmlnaW5hbCBjZW50ZXIgdHJhbnNm
b3JtZWQuCisgICAgRmxvYXRQb2ludCBjZW50ZXIoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0
dXJuIEZsb2F0UG9pbnQoKG1fcDEueCgpICsgbV9wMi54KCkgKyBtX3AzLngoKSArIG1fcDQueCgp
KSAvIDQuMCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgKG1fcDEueSgpICsgbV9wMi55KCkg
KyBtX3AzLnkoKSArIG1fcDQueSgpKSAvIDQuMCk7CisgICAgfQorCiAgICAgRmxvYXRSZWN0IGJv
dW5kaW5nQm94KCkgY29uc3Q7CiAgICAgSW50UmVjdCBlbmNsb3NpbmdCb3VuZGluZ0JveCgpIGNv
bnN0CiAgICAgewpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
RmxvYXRSZWN0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0Zsb2F0UmVj
dC5jcHAKaW5kZXggNzM3NDczYy4uOTA5YzE4NSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvRmxvYXRSZWN0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9GbG9hdFJlY3QuY3BwCkBAIC0xNDIsNiArMTQyLDQwIEBAIHZvaWQgRmxv
YXRSZWN0OjpzY2FsZShmbG9hdCBzeCwgZmxvYXQgc3kpCiAgICAgbV9zaXplLnNldEhlaWdodCho
ZWlnaHQoKSAqIHN5KTsKIH0KIAorc3RhdGljIGlubGluZSBmbG9hdCBkaXN0YW5jZVRvSW50ZXJ2
YWwoZmxvYXQgcG9zLCBmbG9hdCBzdGFydCwgZmxvYXQgZW5kKQoreworICAgIGlmIChwb3MgPCBz
dGFydCkKKyAgICAgICAgcmV0dXJuIHN0YXJ0IC0gcG9zOworICAgIGlmIChwb3MgPiBlbmQpCisg
ICAgICAgIHJldHVybiBlbmQgLSBwb3M7CisgICAgcmV0dXJuIDA7Cit9CisKK0Zsb2F0U2l6ZSBG
bG9hdFJlY3Q6OmRpZmZlcmVuY2VUb1BvaW50KGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50KSBjb25z
dAoreworICAgIGZsb2F0IHhkaXN0YW5jZSA9IGRpc3RhbmNlVG9JbnRlcnZhbChwb2ludC54KCks
IHgoKSwgbWF4WCgpKTsKKyAgICBmbG9hdCB5ZGlzdGFuY2UgPSBkaXN0YW5jZVRvSW50ZXJ2YWwo
cG9pbnQueSgpLCB5KCksIG1heFkoKSk7CisgICAgcmV0dXJuIEZsb2F0U2l6ZSh4ZGlzdGFuY2Us
IHlkaXN0YW5jZSk7Cit9CisKK2Zsb2F0IEZsb2F0UmVjdDo6ZGlzdGFuY2VUb1BvaW50KGNvbnN0
IEZsb2F0UG9pbnQmIHApIGNvbnN0Cit7CisgICAgcmV0dXJuIHNxcnRmKGRpc3RhbmNlU3F1YXJl
ZFRvUG9pbnQocCkpOworfQorCitGbG9hdFNpemUgRmxvYXRSZWN0OjpkaWZmZXJlbmNlRnJvbUNl
bnRlckxpbmVUb1BvaW50KGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50KSBjb25zdAoreworICAgIC8v
IFRoZSBjZW50ZXItbGluZSBpcyB0aGUgbmF0dXJhbCBjZW50ZXIgb2YgYSByZWN0YW5nbGUuIEl0
IGhhcyBhbiBlcXVhbCBkaXN0YW5jZSB0byBhbGwgc2lkZXMgb2YgdGhlIHJlY3RhbmdsZS4KKyAg
ICBGbG9hdFBvaW50IGNlbnRlclBvaW50ID0gY2VudGVyKCk7CisgICAgZmxvYXQgeGRpc3RhbmNl
ID0gY2VudGVyUG9pbnQueCgpIC0gcG9pbnQueCgpOworICAgIGZsb2F0IHlkaXN0YW5jZSA9IGNl
bnRlclBvaW50LnkoKSAtIHBvaW50LnkoKTsKKyAgICBpZiAod2lkdGgoKSA+IGhlaWdodCgpKQor
ICAgICAgICB4ZGlzdGFuY2UgPSBkaXN0YW5jZVRvSW50ZXJ2YWwocG9pbnQueCgpLCB4KCkgKyAo
aGVpZ2h0KCkgLyAyLjApLCBtYXhYKCkgLSAoaGVpZ2h0KCkgLyAyLjApKTsKKyAgICBlbHNlCisg
ICAgICAgIHlkaXN0YW5jZSA9IGRpc3RhbmNlVG9JbnRlcnZhbChwb2ludC55KCksIHkoKSArICh3
aWR0aCgpIC8gMi4wKSwgbWF4WSgpIC0gKHdpZHRoKCkgLyAyLjApKTsKKyAgICByZXR1cm4gRmxv
YXRTaXplKHhkaXN0YW5jZSwgeWRpc3RhbmNlKTsKK30KKwogRmxvYXRSZWN0IHVuaW9uUmVjdChj
b25zdCBWZWN0b3I8RmxvYXRSZWN0PiYgcmVjdHMpCiB7CiAgICAgRmxvYXRSZWN0IHJlc3VsdDsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0Zsb2F0UmVjdC5o
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRmxvYXRSZWN0LmgKaW5kZXggNGQ0
ZWFkZi4uNGQ2NGRiOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvRmxvYXRSZWN0LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRmxv
YXRSZWN0LmgKQEAgLTE3NCw2ICsxNzQsMTIgQEAgcHVibGljOgogICAgIHZvaWQgc2NhbGUoZmxv
YXQgcykgeyBzY2FsZShzLCBzKTsgfQogICAgIHZvaWQgc2NhbGUoZmxvYXQgc3gsIGZsb2F0IHN5
KTsKIAorICAgIEZsb2F0U2l6ZSBkaWZmZXJlbmNlVG9Qb2ludChjb25zdCBGbG9hdFBvaW50Jikg
Y29uc3Q7CisgICAgRmxvYXRTaXplIGRpZmZlcmVuY2VGcm9tQ2VudGVyTGluZVRvUG9pbnQoY29u
c3QgRmxvYXRQb2ludCYpIGNvbnN0OworICAgIGZsb2F0IGRpc3RhbmNlU3F1YXJlZFRvUG9pbnQo
Y29uc3QgRmxvYXRQb2ludCYgcCkgY29uc3QgeyByZXR1cm4gZGlmZmVyZW5jZVRvUG9pbnQocCku
ZGlhZ29uYWxMZW5ndGhTcXVhcmVkKCk7IH0KKyAgICBmbG9hdCBkaXN0YW5jZVNxdWFyZWRGcm9t
Q2VudGVyTGluZVRvUG9pbnQoY29uc3QgRmxvYXRQb2ludCYgcCkgY29uc3QgeyByZXR1cm4gZGlm
ZmVyZW5jZUZyb21DZW50ZXJMaW5lVG9Qb2ludChwKS5kaWFnb25hbExlbmd0aFNxdWFyZWQoKTsg
fQorICAgIGZsb2F0IGRpc3RhbmNlVG9Qb2ludChjb25zdCBGbG9hdFBvaW50JikgY29uc3Q7CisK
ICAgICBGbG9hdFJlY3QgdHJhbnNwb3NlZFJlY3QoKSBjb25zdCB7IHJldHVybiBGbG9hdFJlY3Qo
bV9sb2NhdGlvbi50cmFuc3Bvc2VkUG9pbnQoKSwgbV9zaXplLnRyYW5zcG9zZWRTaXplKCkpOyB9
CiAKICAgICAvLyBSZS1pbml0aWFsaXplcyB0aGlzIHJlY3RhbmdsZSB0byBmaXQgdGhlIHNldHMg
b2YgcGFzc2VkIHBvaW50cy4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL0Zsb2F0U2l6ZS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRmxv
YXRTaXplLmgKaW5kZXggMmI1NTQ1MC4uMjg4MmUzZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvRmxvYXRTaXplLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvRmxvYXRTaXplLmgKQEAgLTk1LDYgKzk1LDExIEBAIHB1YmxpYzoKICAg
ICAgICAgICAgbV9oZWlnaHQgPCBvdGhlci5tX2hlaWdodCA/IG1faGVpZ2h0IDogb3RoZXIubV9o
ZWlnaHQpOwogICAgIH0KIAorICAgIGZsb2F0IGFyZWEoKSBjb25zdAorICAgIHsKKyAgICAgICAg
cmV0dXJuIG1fd2lkdGggKiBtX2hlaWdodDsKKyAgICB9CisKICAgICBmbG9hdCBkaWFnb25hbExl
bmd0aCgpIGNvbnN0OwogICAgIGZsb2F0IGRpYWdvbmFsTGVuZ3RoU3F1YXJlZCgpIGNvbnN0CiAg
ICAgewpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW50UG9p
bnQuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ludFBvaW50LmgKaW5kZXgg
ZGRjNDFiNC4uNTE3MmExNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvSW50UG9pbnQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9J
bnRQb2ludC5oCkBAIC0xMTEsNiArMTExLDEzIEBAIHB1YmxpYzoKICAgICAgICAgICAgIG1feSA8
IG90aGVyLm1feSA/IG1feSA6IG90aGVyLm1feSk7CiAgICAgfQogCisgICAgaW50IGxlbmd0aFNx
dWFyZWQoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIG1feCAqIG1feCArIG1feSAqIG1f
eTsKKyAgICB9CisKKyAgICBpbnQgZGlzdGFuY2VTcXVhcmVkVG9Qb2ludChjb25zdCBJbnRQb2lu
dCYpIGNvbnN0OworCiAgICAgdm9pZCBjbGFtcE5lZ2F0aXZlVG9aZXJvKCkKICAgICB7CiAgICAg
ICAgICp0aGlzID0gZXhwYW5kZWRUbyh6ZXJvKCkpOwpAQCAtMjIyLDYgKzIyOSwxMSBAQCBpbmxp
bmUgSW50U2l6ZSB0b1NpemUoY29uc3QgSW50UG9pbnQmIGEpCiAgICAgcmV0dXJuIEludFNpemUo
YS54KCksIGEueSgpKTsKIH0KIAoraW5saW5lIGludCBJbnRQb2ludDo6ZGlzdGFuY2VTcXVhcmVk
VG9Qb2ludChjb25zdCBJbnRQb2ludCYgcG9pbnQpIGNvbnN0Cit7CisgICAgcmV0dXJuICgoKnRo
aXMpIC0gcG9pbnQpLmRpYWdvbmFsTGVuZ3RoU3F1YXJlZCgpOworfQorCiAjaWYgUExBVEZPUk0o
UVQpCiBpbmxpbmUgUURhdGFTdHJlYW0mIG9wZXJhdG9yPDwoUURhdGFTdHJlYW0mIHN0cmVhbSwg
Y29uc3QgSW50UG9pbnQmIHBvaW50KQogewpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvSW50UmVjdC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9JbnRSZWN0LmNwcAppbmRleCAwM2MzNWU4Li5kZmEyZjkxIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbnRSZWN0LmNwcAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbnRSZWN0LmNwcApAQCAtMTMyLDYgKzEzMiwzNSBAQCB2
b2lkIEludFJlY3Q6OnNjYWxlKGZsb2F0IHMpCiAgICAgbV9zaXplLnNldEhlaWdodCgoaW50KSho
ZWlnaHQoKSAqIHMpKTsKIH0KIAorc3RhdGljIGlubGluZSBpbnQgZGlzdGFuY2VUb0ludGVydmFs
KGludCBwb3MsIGludCBzdGFydCwgaW50IGVuZCkKK3sKKyAgICBpZiAocG9zIDwgc3RhcnQpCisg
ICAgICAgIHJldHVybiBzdGFydCAtIHBvczsKKyAgICBpZiAocG9zID4gZW5kKQorICAgICAgICBy
ZXR1cm4gZW5kIC0gcG9zOworICAgIHJldHVybiAwOworfQorCitJbnRTaXplIEludFJlY3Q6OmRp
ZmZlcmVuY2VUb1BvaW50KGNvbnN0IEludFBvaW50JiBwb2ludCkgY29uc3QKK3sKKyAgICBpbnQg
eGRpc3RhbmNlID0gZGlzdGFuY2VUb0ludGVydmFsKHBvaW50LngoKSwgeCgpLCBtYXhYKCkpOwor
ICAgIGludCB5ZGlzdGFuY2UgPSBkaXN0YW5jZVRvSW50ZXJ2YWwocG9pbnQueSgpLCB5KCksIG1h
eFkoKSk7CisgICAgcmV0dXJuIEludFNpemUoeGRpc3RhbmNlLCB5ZGlzdGFuY2UpOworfQorCitJ
bnRTaXplIEludFJlY3Q6OmRpZmZlcmVuY2VGcm9tQ2VudGVyTGluZVRvUG9pbnQoY29uc3QgSW50
UG9pbnQmIHBvaW50KSBjb25zdAoreworICAgIC8vIFRoZSBjZW50ZXItbGluZSBpcyB0aGUgbmF0
dXJhbCBjZW50ZXIgb2YgYSByZWN0YW5nbGUuIEl0IGhhcyBhbiBlcXVhbCBkaXN0YW5jZSB0byBh
bGwgc2lkZXMgb2YgdGhlIHJlY3RhbmdsZS4KKyAgICBJbnRQb2ludCBjZW50ZXJQb2ludCA9IGNl
bnRlcigpOworICAgIGludCB4ZGlzdGFuY2UgPSBjZW50ZXJQb2ludC54KCkgLSBwb2ludC54KCk7
CisgICAgaW50IHlkaXN0YW5jZSA9IGNlbnRlclBvaW50LnkoKSAtIHBvaW50LnkoKTsKKyAgICBp
ZiAod2lkdGgoKSA+IGhlaWdodCgpKQorICAgICAgICB4ZGlzdGFuY2UgPSBkaXN0YW5jZVRvSW50
ZXJ2YWwocG9pbnQueCgpLCB4KCkgKyAoaGVpZ2h0KCkgLyAyKSwgbWF4WCgpIC0gKGhlaWdodCgp
IC8gMikpOworICAgIGVsc2UKKyAgICAgICAgeWRpc3RhbmNlID0gZGlzdGFuY2VUb0ludGVydmFs
KHBvaW50LnkoKSwgeSgpICsgKHdpZHRoKCkgLyAyKSwgbWF4WSgpIC0gKHdpZHRoKCkgLyAyKSk7
CisgICAgcmV0dXJuIEludFNpemUoeGRpc3RhbmNlLCB5ZGlzdGFuY2UpOworfQorCiBJbnRSZWN0
IHVuaW9uUmVjdChjb25zdCBWZWN0b3I8SW50UmVjdD4mIHJlY3RzKQogewogICAgIEludFJlY3Qg
cmVzdWx0OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW50
UmVjdC5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW50UmVjdC5oCmluZGV4
IGZjYmYyN2EuLjBjMTJkN2UgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL0ludFJlY3QuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9J
bnRSZWN0LmgKQEAgLTE3Nyw2ICsxNzcsMTEgQEAgcHVibGljOgogICAgIHZvaWQgaW5mbGF0ZShp
bnQgZCkgeyBpbmZsYXRlWChkKTsgaW5mbGF0ZVkoZCk7IH0KICAgICB2b2lkIHNjYWxlKGZsb2F0
IHMpOwogCisgICAgSW50U2l6ZSBkaWZmZXJlbmNlVG9Qb2ludChjb25zdCBJbnRQb2ludCYpIGNv
bnN0OworICAgIEludFNpemUgZGlmZmVyZW5jZUZyb21DZW50ZXJMaW5lVG9Qb2ludChjb25zdCBJ
bnRQb2ludCYpIGNvbnN0OworICAgIGludCBkaXN0YW5jZVNxdWFyZWRUb1BvaW50KGNvbnN0IElu
dFBvaW50JiBwKSBjb25zdCB7IHJldHVybiBkaWZmZXJlbmNlVG9Qb2ludChwKS5kaWFnb25hbExl
bmd0aFNxdWFyZWQoKTsgfQorICAgIGludCBkaXN0YW5jZVNxdWFyZWRGcm9tQ2VudGVyTGluZVRv
UG9pbnQoY29uc3QgSW50UG9pbnQmIHApIGNvbnN0IHsgcmV0dXJuIGRpZmZlcmVuY2VGcm9tQ2Vu
dGVyTGluZVRvUG9pbnQocCkuZGlhZ29uYWxMZW5ndGhTcXVhcmVkKCk7IH0KKwogICAgIEludFJl
Y3QgdHJhbnNwb3NlZFJlY3QoKSBjb25zdCB7IHJldHVybiBJbnRSZWN0KG1fbG9jYXRpb24udHJh
bnNwb3NlZFBvaW50KCksIG1fc2l6ZS50cmFuc3Bvc2VkU2l6ZSgpKTsgfQogCiAjaWYgUExBVEZP
Uk0oV1gpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbnRT
aXplLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbnRTaXplLmgKaW5kZXgg
MTYzOTg0Ny4uOGVjNjUzOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvSW50U2l6ZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0lu
dFNpemUuaApAQCAtMTA0LDYgKzEwNCwxNiBAQCBwdWJsaWM6CiAgICAgICAgICp0aGlzID0gZXhw
YW5kZWRUbyhJbnRTaXplKCkpOwogICAgIH0KIAorICAgIGludCBhcmVhKCkgY29uc3QKKyAgICB7
CisgICAgICAgIHJldHVybiBtX3dpZHRoICogbV9oZWlnaHQ7CisgICAgfQorCisgICAgaW50IGRp
YWdvbmFsTGVuZ3RoU3F1YXJlZCgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gbV93aWR0
aCAqIG1fd2lkdGggKyBtX2hlaWdodCAqIG1faGVpZ2h0OworICAgIH0KKwogICAgIEludFNpemUg
dHJhbnNwb3NlZFNpemUoKSBjb25zdAogICAgIHsKICAgICAgICAgcmV0dXJuIEludFNpemUobV9o
ZWlnaHQsIG1fd2lkdGgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlck9iamVjdC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyT2JqZWN0LmNw
cAppbmRleCA4NDY3MmIxLi4xMWZjOTExIDEwMDc1NQotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVyT2JqZWN0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVyT2JqZWN0LmNwcApAQCAtMjY0NSw2ICsyNjQ1LDEwIEBAIGJvb2wgUmVuZGVyT2JqZWN0Ojp3
aWxsUmVuZGVySW1hZ2UoQ2FjaGVkSW1hZ2UqKQogICAgIGlmIChzdHlsZSgpLT52aXNpYmlsaXR5
KCkgIT0gVklTSUJMRSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCisgICAgLy8gV2Ugd2lsbCBu
b3QgcmVuZGVyIGEgbmV3IGltYWdlIHdoZW4gQWN0aXZlIERPTSBpcyBzdXNwZW5kZWQKKyAgICBp
ZiAoZG9jdW1lbnQoKS0+YWN0aXZlRE9NT2JqZWN0c0FyZVN1c3BlbmRlZCgpKQorICAgICAgICBy
ZXR1cm4gZmFsc2U7CisKICAgICAvLyBJZiB3ZSdyZSBub3QgaW4gYSB3aW5kb3cgKGkuZS4sIHdl
J3JlIGRvcm1hbnQgZnJvbSBiZWluZyBwdXQgaW4gdGhlIGIvZiBjYWNoZSBvciBpbiBhIGJhY2tn
cm91bmQgdGFiKQogICAgIC8vIHRoZW4gd2UgZG9uJ3Qgd2FudCB0byByZW5kZXIgZWl0aGVyLgog
ICAgIHJldHVybiAhZG9jdW1lbnQoKS0+aW5QYWdlQ2FjaGUoKSAmJiAhZG9jdW1lbnQoKS0+dmll
dygpLT5pc09mZnNjcmVlbigpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvdGVzdGluZy9J
bnRlcm5hbHMuY3BwIGIvU291cmNlL1dlYkNvcmUvdGVzdGluZy9JbnRlcm5hbHMuY3BwCmluZGV4
IDYxMDNiNmIuLjE5M2Q3ZTEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3Rlc3RpbmcvSW50
ZXJuYWxzLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS90ZXN0aW5nL0ludGVybmFscy5jcHAKQEAg
LTY0LDYgKzY0LDExIEBACiAjaW5jbHVkZSAiQ29sb3JDaG9vc2VyLmgiCiAjZW5kaWYKIAorI2lm
IEVOQUJMRShUT1VDSF9BREpVU1RNRU5UKQorI2luY2x1ZGUgIkV2ZW50SGFuZGxlci5oIgorI2lu
Y2x1ZGUgIldlYktpdFBvaW50LmgiCisjZW5kaWYKKwogbmFtZXNwYWNlIFdlYkNvcmUgewogCiBz
dGF0aWMgYm9vbCBtYXJrZXJUeXBlc0Zyb20oY29uc3QgU3RyaW5nJiBtYXJrZXJUeXBlLCBEb2N1
bWVudE1hcmtlcjo6TWFya2VyVHlwZXMmIHJlc3VsdCkKQEAgLTU0Niw2ICs1NTEsNDYgQEAgdW5z
aWduZWQgSW50ZXJuYWxzOjpsZW5ndGhGcm9tUmFuZ2UoRWxlbWVudCogc2NvcGUsIGNvbnN0IFJh
bmdlKiByYW5nZSwgRXhjZXB0aW8KICAgICByZXR1cm4gbGVuZ3RoOwogfQogCisKKyNpZiBFTkFC
TEUoVE9VQ0hfQURKVVNUTUVOVCkKK1Bhc3NSZWZQdHI8V2ViS2l0UG9pbnQ+IEludGVybmFsczo6
dG91Y2hQb3NpdGlvbkFkanVzdGVkVG9CZXN0Q2xpY2thYmxlTm9kZShsb25nIHgsIGxvbmcgeSwg
bG9uZyB3LCBsb25nIGgsIERvY3VtZW50KiBkb2N1bWVudCwgRXhjZXB0aW9uQ29kZSYgZWMpCit7
CisgICAgaWYgKCFkb2N1bWVudCB8fCAhZG9jdW1lbnQtPmZyYW1lKCkpIHsKKyAgICAgICAgZWMg
PSBJTlZBTElEX0FDQ0VTU19FUlI7CisgICAgICAgIHJldHVybiAwOworICAgIH0KKworICAgIElu
dFNpemUgcmFkaXVzKHcgLyAyLCBoIC8gMik7CisgICAgSW50UG9pbnQgcG9pbnQoeCArIHJhZGl1
cy53aWR0aCgpLCB5ICsgcmFkaXVzLmhlaWdodCgpKTsKKworICAgIE5vZGUqIHRhcmdldE5vZGU7
CisgICAgSW50UG9pbnQgYWRqdXN0ZWRQb2ludDsKKworICAgIGRvY3VtZW50LT5mcmFtZSgpLT5l
dmVudEhhbmRsZXIoKS0+YmVzdENsaWNrYWJsZU5vZGVBdFRvdWNoUG9pbnQocG9pbnQsIHJhZGl1
cywgYWRqdXN0ZWRQb2ludCwgdGFyZ2V0Tm9kZSk7CisKKyAgICByZXR1cm4gV2ViS2l0UG9pbnQ6
OmNyZWF0ZShhZGp1c3RlZFBvaW50LngoKSwgYWRqdXN0ZWRQb2ludC55KCkpOworfQorCitQYXNz
UmVmUHRyPE5vZGU+IEludGVybmFsczo6dG91Y2hOb2RlQWRqdXN0ZWRUb0Jlc3RDbGlja2FibGVO
b2RlKGxvbmcgeCwgbG9uZyB5LCBsb25nIHcsIGxvbmcgaCwgRG9jdW1lbnQqIGRvY3VtZW50LCBF
eGNlcHRpb25Db2RlJiBlYykKK3sKKyAgICBpZiAoIWRvY3VtZW50IHx8ICFkb2N1bWVudC0+ZnJh
bWUoKSkgeworICAgICAgICBlYyA9IElOVkFMSURfQUNDRVNTX0VSUjsKKyAgICAgICAgcmV0dXJu
IDA7CisgICAgfQorCisgICAgSW50U2l6ZSByYWRpdXModyAvIDIsIGggLyAyKTsKKyAgICBJbnRQ
b2ludCBwb2ludCh4ICsgcmFkaXVzLndpZHRoKCksIHkgKyByYWRpdXMuaGVpZ2h0KCkpOworCisg
ICAgTm9kZSogdGFyZ2V0Tm9kZTsKKyAgICBJbnRQb2ludCBhZGp1c3RlZFBvaW50OworCisgICAg
ZG9jdW1lbnQtPmZyYW1lKCktPmV2ZW50SGFuZGxlcigpLT5iZXN0Q2xpY2thYmxlTm9kZUF0VG91
Y2hQb2ludChwb2ludCwgcmFkaXVzLCBhZGp1c3RlZFBvaW50LCB0YXJnZXROb2RlKTsKKworICAg
IHJldHVybiBhZG9wdFJlZih0YXJnZXROb2RlKTsKK30KKyNlbmRpZgorCisKIGludCBJbnRlcm5h
bHM6Omxhc3RTcGVsbENoZWNrUmVxdWVzdFNlcXVlbmNlKERvY3VtZW50KiBkb2N1bWVudCwgRXhj
ZXB0aW9uQ29kZSYgZWMpCiB7CiAgICAgU3BlbGxDaGVja2VyKiBjaGVja2VyID0gc3BlbGxjaGVj
a2VyKGRvY3VtZW50KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Rlc3RpbmcvSW50ZXJu
YWxzLmggYi9Tb3VyY2UvV2ViQ29yZS90ZXN0aW5nL0ludGVybmFscy5oCmluZGV4IDkxOWMyZjAu
LjRmNTQ2NzggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3Rlc3RpbmcvSW50ZXJuYWxzLmgK
KysrIGIvU291cmNlL1dlYkNvcmUvdGVzdGluZy9JbnRlcm5hbHMuaApAQCAtNDIsNiArNDIsNyBA
QCBjbGFzcyBJbnRlcm5hbFNldHRpbmdzOwogY2xhc3MgTm9kZTsKIGNsYXNzIFJhbmdlOwogY2xh
c3MgU2hhZG93Um9vdDsKK2NsYXNzIFdlYktpdFBvaW50OwogCiB0eXBlZGVmIGludCBFeGNlcHRp
b25Db2RlOwogCkBAIC0xMDcsNiArMTA4LDExIEBAIHB1YmxpYzoKICAgICB1bnNpZ25lZCBsb2Nh
dGlvbkZyb21SYW5nZShFbGVtZW50KiBzY29wZSwgY29uc3QgUmFuZ2UqLCBFeGNlcHRpb25Db2Rl
Jik7CiAgICAgdW5zaWduZWQgbGVuZ3RoRnJvbVJhbmdlKEVsZW1lbnQqIHNjb3BlLCBjb25zdCBS
YW5nZSosIEV4Y2VwdGlvbkNvZGUmKTsKIAorI2lmIEVOQUJMRShUT1VDSF9BREpVU1RNRU5UKQor
ICAgIFBhc3NSZWZQdHI8V2ViS2l0UG9pbnQ+IHRvdWNoUG9zaXRpb25BZGp1c3RlZFRvQmVzdENs
aWNrYWJsZU5vZGUobG9uZyB4LCBsb25nIHksIGxvbmcgdywgbG9uZyBoLCBEb2N1bWVudCosIEV4
Y2VwdGlvbkNvZGUmKTsKKyAgICBQYXNzUmVmUHRyPE5vZGU+IHRvdWNoTm9kZUFkanVzdGVkVG9C
ZXN0Q2xpY2thYmxlTm9kZShsb25nIHgsIGxvbmcgeSwgbG9uZyB3LCBsb25nIGgsIERvY3VtZW50
KiwgRXhjZXB0aW9uQ29kZSYpOworI2VuZGlmCisKICAgICBpbnQgbGFzdFNwZWxsQ2hlY2tSZXF1
ZXN0U2VxdWVuY2UoRG9jdW1lbnQqLCBFeGNlcHRpb25Db2RlJik7CiAgICAgaW50IGxhc3RTcGVs
bENoZWNrUHJvY2Vzc2VkU2VxdWVuY2UoRG9jdW1lbnQqLCBFeGNlcHRpb25Db2RlJik7CiAgICAg
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS90ZXN0aW5nL0ludGVybmFscy5pZGwgYi9Tb3Vy
Y2UvV2ViQ29yZS90ZXN0aW5nL0ludGVybmFscy5pZGwKaW5kZXggMDg4ZTMzOS4uMTVkOTgyYSAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvdGVzdGluZy9JbnRlcm5hbHMuaWRsCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3Rlc3RpbmcvSW50ZXJuYWxzLmlkbApAQCAtODQsNiArODQsMTEgQEAgbW9k
dWxlIHdpbmRvdyB7CiAgICAgICAgIHVuc2lnbmVkIGxvbmcgbG9jYXRpb25Gcm9tUmFuZ2UoaW4g
RWxlbWVudCBzY29wZSwgaW4gUmFuZ2UgcmFuZ2UpIHJhaXNlcyAoRE9NRXhjZXB0aW9uKTsKICAg
ICAgICAgdW5zaWduZWQgbG9uZyBsZW5ndGhGcm9tUmFuZ2UoaW4gRWxlbWVudCBzY29wZSwgaW4g
UmFuZ2UgcmFuZ2UpIHJhaXNlcyAoRE9NRXhjZXB0aW9uKTsKIAorI2lmIGRlZmluZWQoRU5BQkxF
X1RPVUNIX0FESlVTVE1FTlQpICYmIEVOQUJMRV9UT1VDSF9BREpVU1RNRU5UCisgICAgICAgIFdl
YktpdFBvaW50IHRvdWNoUG9zaXRpb25BZGp1c3RlZFRvQmVzdENsaWNrYWJsZU5vZGUoaW4gbG9u
ZyB4LCBpbiBsb25nIHksIGluIGxvbmcgdywgaW4gbG9uZyBoLCBpbiBEb2N1bWVudCBkb2N1bWVu
dCkgcmFpc2VzIChET01FeGNlcHRpb24pOworICAgICAgICBOb2RlIHRvdWNoTm9kZUFkanVzdGVk
VG9CZXN0Q2xpY2thYmxlTm9kZShpbiBsb25nIHgsIGluIGxvbmcgeSwgaW4gbG9uZyB3LCBpbiBs
b25nIGgsIGluIERvY3VtZW50IGRvY3VtZW50KSByYWlzZXMgKERPTUV4Y2VwdGlvbik7CisjZW5k
aWYKKwogICAgICAgICBsb25nIGxhc3RTcGVsbENoZWNrUmVxdWVzdFNlcXVlbmNlKGluIERvY3Vt
ZW50IGRvY3VtZW50KSByYWlzZXMgKERPTUV4Y2VwdGlvbik7CiAgICAgICAgIGxvbmcgbGFzdFNw
ZWxsQ2hlY2tQcm9jZXNzZWRTZXF1ZW5jZShpbiBEb2N1bWVudCBkb2N1bWVudCkgcmFpc2VzIChE
T01FeGNlcHRpb24pOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cgYi9T
b3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cKaW5kZXggNWQ1MmNlZC4uMzkwMTQ2OSAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxv
ZwpAQCAtMSwzICsxLDIzIEBACisyMDEyLTAyLTI0ICBBbGxhbiBTYW5kZmVsZCBKZW5zZW4gIDxh
bGxhbi5qZW5zZW5Abm9raWEuY29tPgorCisgICAgICAgIFNlbGVjdCBiZXN0IHRhcmdldCBmb3Ig
dGFwIGdlc3R1cmUuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD03ODgwMQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAg
ICAgIFNlbmQgcmFkaXVzIHRvIGhhbmRsZVBvdGVudGlhbFNpbmdsZVRhcEV2ZW50IHNvIGl0IGNh
biBkbyB0aGUgc2FtZSBoaXQKKyAgICAgICAgZGV0ZWN0aW9uIHRoZSB0YXAgZ2VzdHVyZSBsYXRl
ciBkb2VzLgorCisgICAgICAgICogVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5jcHA6CisgICAgICAg
IChXZWJLaXQ6OldlYlBhZ2VQcm94eTo6aGFuZGxlUG90ZW50aWFsQWN0aXZhdGlvbik6CisgICAg
ICAgICogVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5oOgorICAgICAgICAqIFVJUHJvY2Vzcy9xdC9R
dFdlYlBhZ2VFdmVudEhhbmRsZXIuY3BwOgorICAgICAgICAoUXRXZWJQYWdlRXZlbnRIYW5kbGVy
OjpoYW5kbGVQb3RlbnRpYWxTaW5nbGVUYXBFdmVudCk6CisgICAgICAgICogV2ViUHJvY2Vzcy9X
ZWJQYWdlL1dlYlBhZ2UuY3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlOjpoaWdobGlnaHRQ
b3RlbnRpYWxBY3RpdmF0aW9uKToKKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFn
ZS5oOgorICAgICAgICAqIFdlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLm1lc3NhZ2VzLmluOgor
CiAyMDEyLTAyLTI4ICBTaGlueWEgS2F3YW5ha2EgIDxzaGlueWFrQGNocm9taXVtLm9yZz4KIAog
ICAgICAgICBFbGVtZW50IHNob3VsZCBiZSBhYmxlIHRvIGhhdmUgbXVsdGlwbGUgc2hhZG93IHJv
b3RzLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5j
cHAgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViUGFnZVByb3h5LmNwcAppbmRleCA4ZWEz
ZmU0Li4xZjE5ZTE3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViUGFn
ZVByb3h5LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViUGFnZVByb3h5LmNw
cApAQCAtOTg4LDkgKzk4OCw5IEBAIHZvaWQgV2ViUGFnZVByb3h5OjpoYW5kbGVHZXN0dXJlRXZl
bnQoY29uc3QgV2ViR2VzdHVyZUV2ZW50JiBldmVudCkKIAogI2lmIEVOQUJMRShUT1VDSF9FVkVO
VFMpCiAjaWYgUExBVEZPUk0oUVQpCi12b2lkIFdlYlBhZ2VQcm94eTo6aGFuZGxlUG90ZW50aWFs
QWN0aXZhdGlvbihjb25zdCBJbnRQb2ludCYgbGF5b3V0UG9pbnQpCit2b2lkIFdlYlBhZ2VQcm94
eTo6aGFuZGxlUG90ZW50aWFsQWN0aXZhdGlvbihjb25zdCBJbnRQb2ludCYgbGF5b3V0UG9pbnQs
IGNvbnN0IEludFNpemUmIGFyZWEpCiB7Ci0gICAgcHJvY2VzcygpLT5zZW5kKE1lc3NhZ2VzOjpX
ZWJQYWdlOjpIaWdobGlnaHRQb3RlbnRpYWxBY3RpdmF0aW9uKGxheW91dFBvaW50KSwgbV9wYWdl
SUQpOworICAgIHByb2Nlc3MoKS0+c2VuZChNZXNzYWdlczo6V2ViUGFnZTo6SGlnaGxpZ2h0UG90
ZW50aWFsQWN0aXZhdGlvbihsYXlvdXRQb2ludCwgYXJlYSksIG1fcGFnZUlEKTsKIH0KICNlbmRp
ZgogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViUGFnZVByb3h5Lmgg
Yi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViUGFnZVByb3h5LmgKaW5kZXggYWY4ZGExYi4u
Nzg2MzZjNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYlBhZ2VQcm94
eS5oCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkuaApAQCAtMzg1
LDcgKzM4NSw3IEBAIHB1YmxpYzoKICNpZiBFTkFCTEUoVE9VQ0hfRVZFTlRTKQogICAgIHZvaWQg
aGFuZGxlVG91Y2hFdmVudChjb25zdCBOYXRpdmVXZWJUb3VjaEV2ZW50Jik7CiAjaWYgUExBVEZP
Uk0oUVQpCi0gICAgdm9pZCBoYW5kbGVQb3RlbnRpYWxBY3RpdmF0aW9uKGNvbnN0IFdlYkNvcmU6
OkludFBvaW50Jik7CisgICAgdm9pZCBoYW5kbGVQb3RlbnRpYWxBY3RpdmF0aW9uKGNvbnN0IFdl
YkNvcmU6OkludFBvaW50JiwgY29uc3QgV2ViQ29yZTo6SW50U2l6ZSYpOwogI2VuZGlmCiAjZW5k
aWYKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL3F0L1F0V2ViUGFnZUV2
ZW50SGFuZGxlci5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvcXQvUXRXZWJQYWdlRXZl
bnRIYW5kbGVyLmNwcAppbmRleCA3ZDA4OTkyLi4wMDA4MWI0IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViS2l0Mi9VSVByb2Nlc3MvcXQvUXRXZWJQYWdlRXZlbnRIYW5kbGVyLmNwcAorKysgYi9Tb3Vy
Y2UvV2ViS2l0Mi9VSVByb2Nlc3MvcXQvUXRXZWJQYWdlRXZlbnRIYW5kbGVyLmNwcApAQCAtMjky
LDcgKzI5Miw3IEBAIGJvb2wgUXRXZWJQYWdlRXZlbnRIYW5kbGVyOjpoYW5kbGVEcm9wRXZlbnQo
UURyb3BFdmVudCogZXYpCiB2b2lkIFF0V2ViUGFnZUV2ZW50SGFuZGxlcjo6aGFuZGxlUG90ZW50
aWFsU2luZ2xlVGFwRXZlbnQoY29uc3QgUVRvdWNoRXZlbnQ6OlRvdWNoUG9pbnQmIHBvaW50KQog
ewogICAgIFFUcmFuc2Zvcm0gZnJvbUl0ZW1UcmFuc2Zvcm0gPSBtX3dlYlBhZ2UtPnRyYW5zZm9y
bUZyb21JdGVtKCk7Ci0gICAgbV93ZWJQYWdlUHJveHktPmhhbmRsZVBvdGVudGlhbEFjdGl2YXRp
b24oZnJvbUl0ZW1UcmFuc2Zvcm0ubWFwKHBvaW50LnBvcygpKS50b1BvaW50KCkpOworICAgIG1f
d2ViUGFnZVByb3h5LT5oYW5kbGVQb3RlbnRpYWxBY3RpdmF0aW9uKGZyb21JdGVtVHJhbnNmb3Jt
Lm1hcChwb2ludC5wb3MoKSkudG9Qb2ludCgpLCBJbnRTaXplKHBvaW50LnJlY3QoKS5zaXplKCku
dG9TaXplKCkpKTsKIH0KIAogdm9pZCBRdFdlYlBhZ2VFdmVudEhhbmRsZXI6OmhhbmRsZVNpbmds
ZVRhcEV2ZW50KGNvbnN0IFFUb3VjaEV2ZW50OjpUb3VjaFBvaW50JiBwb2ludCkKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmNwcCBiL1NvdXJj
ZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmNwcAppbmRleCAwNTdhOTI4Li5m
NDM2YzYxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvV2Vi
UGFnZS5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2Uu
Y3BwCkBAIC0xNDQ3LDE2ICsxNDQ3LDIwIEBAIHZvaWQgV2ViUGFnZTo6cmVzdG9yZVNlc3Npb25B
bmROYXZpZ2F0ZVRvQ3VycmVudEl0ZW0oY29uc3QgU2Vzc2lvblN0YXRlJiBzZXNzaW9uCiAKICNp
ZiBFTkFCTEUoVE9VQ0hfRVZFTlRTKQogI2lmIFBMQVRGT1JNKFFUKQotdm9pZCBXZWJQYWdlOjpo
aWdobGlnaHRQb3RlbnRpYWxBY3RpdmF0aW9uKGNvbnN0IEludFBvaW50JiBwb2ludCkKK3ZvaWQg
V2ViUGFnZTo6aGlnaGxpZ2h0UG90ZW50aWFsQWN0aXZhdGlvbihjb25zdCBJbnRQb2ludCYgcG9p
bnQsIGNvbnN0IEludFNpemUmIGFyZWEpCiB7CiAgICAgTm9kZSogYWN0aXZhdGlvbk5vZGUgPSAw
OwogICAgIEZyYW1lKiBtYWluZnJhbWUgPSBtX3BhZ2UtPm1haW5GcmFtZSgpOworICAgIEludFBv
aW50IGFkanVzdGVkUG9pbnQ7CiAKICAgICBpZiAocG9pbnQgIT0gSW50UG9pbnQ6Onplcm8oKSkg
eworI2lmIEVOQUJMRShUT1VDSF9BREpVU1RNRU5UKQorICAgICAgICBtYWluZnJhbWUtPmV2ZW50
SGFuZGxlcigpLT5iZXN0Q2xpY2thYmxlTm9kZUF0VG91Y2hQb2ludChwb2ludCwgSW50U2l6ZShh
cmVhLndpZHRoKCkgLyAyLCBhcmVhLmhlaWdodCgpIC8gMiksIGFkanVzdGVkUG9pbnQsIGFjdGl2
YXRpb25Ob2RlKTsKKyNlbHNlCiAgICAgICAgIEhpdFRlc3RSZXN1bHQgcmVzdWx0ID0gbWFpbmZy
YW1lLT5ldmVudEhhbmRsZXIoKS0+aGl0VGVzdFJlc3VsdEF0UG9pbnQobWFpbmZyYW1lLT52aWV3
KCktPndpbmRvd1RvQ29udGVudHMocG9pbnQpLCAvKmFsbG93U2hhZG93Q29udGVudCovIGZhbHNl
LCAvKmlnbm9yZUNsaXBwaW5nKi8gdHJ1ZSk7CiAgICAgICAgIGFjdGl2YXRpb25Ob2RlID0gcmVz
dWx0LmlubmVyTm9kZSgpOwotCi0gICAgICAgIGlmICghYWN0aXZhdGlvbk5vZGUtPmlzRm9jdXNh
YmxlKCkpCisjZW5kaWYKKyAgICAgICAgaWYgKGFjdGl2YXRpb25Ob2RlICYmICFhY3RpdmF0aW9u
Tm9kZS0+aXNGb2N1c2FibGUoKSkKICAgICAgICAgICAgIGFjdGl2YXRpb25Ob2RlID0gYWN0aXZh
dGlvbk5vZGUtPmVuY2xvc2luZ0xpbmtFdmVudFBhcmVudE9yU2VsZigpOwogICAgIH0KIApkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UuaCBiL1Nv
dXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmgKaW5kZXggNzQ1YmY0ZC4u
ZDZiMWY3MyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1dl
YlBhZ2UuaAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5o
CkBAIC01NjAsNyArNTYwLDcgQEAgcHJpdmF0ZToKICAgICB2b2lkIHRvdWNoRXZlbnQoY29uc3Qg
V2ViVG91Y2hFdmVudCYpOwogICAgIHZvaWQgdG91Y2hFdmVudFN5bmNGb3JUZXN0aW5nKGNvbnN0
IFdlYlRvdWNoRXZlbnQmLCBib29sJiBoYW5kbGVkKTsKICNpZiBQTEFURk9STShRVCkKLSAgICB2
b2lkIGhpZ2hsaWdodFBvdGVudGlhbEFjdGl2YXRpb24oY29uc3QgV2ViQ29yZTo6SW50UG9pbnQm
KTsKKyAgICB2b2lkIGhpZ2hsaWdodFBvdGVudGlhbEFjdGl2YXRpb24oY29uc3QgV2ViQ29yZTo6
SW50UG9pbnQmLCBjb25zdCBXZWJDb3JlOjpJbnRTaXplJik7CiAjZW5kaWYKICNlbmRpZgogICAg
IHZvaWQgY29udGV4dE1lbnVIaWRkZW4oKSB7IG1faXNTaG93aW5nQ29udGV4dE1lbnUgPSBmYWxz
ZTsgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBh
Z2UubWVzc2FnZXMuaW4gYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFn
ZS5tZXNzYWdlcy5pbgppbmRleCA3ODEzYWRmLi4xYzQ2NDU4IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5tZXNzYWdlcy5pbgorKysgYi9Tb3Vy
Y2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5tZXNzYWdlcy5pbgpAQCAtNDEs
NyArNDEsNyBAQCBtZXNzYWdlcyAtPiBXZWJQYWdlIHsKICAgICBUb3VjaEV2ZW50KFdlYktpdDo6
V2ViVG91Y2hFdmVudCBldmVudCkKICAgICBUb3VjaEV2ZW50U3luY0ZvclRlc3RpbmcoV2ViS2l0
OjpXZWJUb3VjaEV2ZW50IGV2ZW50KSAtPiAoYm9vbCBoYW5kbGVkKQogI2lmIFBMQVRGT1JNKFFU
KQotICAgIEhpZ2hsaWdodFBvdGVudGlhbEFjdGl2YXRpb24oV2ViQ29yZTo6SW50UG9pbnQgcG9p
bnQpCisgICAgSGlnaGxpZ2h0UG90ZW50aWFsQWN0aXZhdGlvbihXZWJDb3JlOjpJbnRQb2ludCBw
b2ludCwgV2ViQ29yZTo6SW50U2l6ZSByYWRpdXMpCiAjZW5kaWYKICNlbmRpZgogCmRpZmYgLS1n
aXQgYS9Ub29scy9DaGFuZ2VMb2cgYi9Ub29scy9DaGFuZ2VMb2cKaW5kZXggNTczZjMzZC4uZTJi
OWVmNiAxMDA2NDQKLS0tIGEvVG9vbHMvQ2hhbmdlTG9nCisrKyBiL1Rvb2xzL0NoYW5nZUxvZwpA
QCAtMSwzICsxLDE0IEBACisyMDEyLTAyLTI4ICBBbGxhbiBTYW5kZmVsZCBKZW5zZW4gIDxhbGxh
bi5qZW5zZW5Abm9raWEuY29tPgorCisgICAgICAgIFNlbGVjdCBiZXN0IHRhcmdldCBmb3IgdGFw
IGdlc3R1cmUuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD03ODgwMQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAg
IEFkZCBUT1VDSF9BREpVU1RNRU5UIHRvIGVuYWJsZWQgZmVhdHVyZXMuCisKKyAgICAgICAgKiBx
bWFrZS9ta3NwZWNzL2ZlYXR1cmVzL2ZlYXR1cmVzLnByZjoKKwogMjAxMi0wMi0yOCAgS2VudCBU
YW11cmEgIDx0a2VudEBjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgVXBkYXRlIGEgcGF0dGVybiBm
b3IgZm9ybXMgZmlsZXMgb2Ygd2F0Y2hsaXN0CmRpZmYgLS1naXQgYS9Ub29scy9xbWFrZS9ta3Nw
ZWNzL2ZlYXR1cmVzL2ZlYXR1cmVzLnByZiBiL1Rvb2xzL3FtYWtlL21rc3BlY3MvZmVhdHVyZXMv
ZmVhdHVyZXMucHJmCmluZGV4IGY2YTZmM2MuLjE2Y2JmYjYgMTAwNjQ0Ci0tLSBhL1Rvb2xzL3Ft
YWtlL21rc3BlY3MvZmVhdHVyZXMvZmVhdHVyZXMucHJmCisrKyBiL1Rvb2xzL3FtYWtlL21rc3Bl
Y3MvZmVhdHVyZXMvZmVhdHVyZXMucHJmCkBAIC04Niw2ICs4Niw3IEBAIGhhdmVRdCg0KTp1bml4
OiFtYWM6IWVtYmVkZGVkIHsKICFjb250YWlucyhERUZJTkVTLCBFTkFCTEVfVklERU9fVFJBQ0s9
Lik6IERFRklORVMgKz0gRU5BQkxFX1ZJREVPX1RSQUNLPTAKICFjb250YWlucyhERUZJTkVTLCBF
TkFCTEVfVE9VQ0hfSUNPTl9MT0FESU5HPS4pOiBERUZJTkVTICs9IEVOQUJMRV9UT1VDSF9JQ09O
X0xPQURJTkc9MAogIWNvbnRhaW5zKERFRklORVMsIEVOQUJMRV9BTklNQVRJT05fQVBJPS4pOiBE
RUZJTkVTICs9IEVOQUJMRV9BTklNQVRJT05fQVBJPTAKKyFjb250YWlucyhERUZJTkVTLCBFTkFC
TEVfVE9VQ0hfQURKVVNUTUVOVD0uKTogREVGSU5FUyArPSBFTkFCTEVfVE9VQ0hfQURKVVNUTUVO
VD0xCiAKICMgUG9saWN5IGRlY2lzaW9uczogZm9yIHVzaW5nIGEgcGFydGljdWxhciB0aGlyZC1w
YXJ0eSBsaWJyYXJ5IG9yIG9wdGlvbmFsIE9TIHNlcnZpY2UKICFjb250YWlucyhERUZJTkVTLCBX
VEZfVVNFX1FUX0lNQUdFX0RFQ09ERVI9Lik6IERFRklORVMgKz0gV1RGX1VTRV9RVF9JTUFHRV9E
RUNPREVSPTEKQEAgLTI1Niw2ICsyNTcsNyBAQCBjb250YWlucyhERUZJTkVTLCBFTkFCTEVfVklE
RU9fVFJBQ0s9MSk6IEZFQVRVUkVfREVGSU5FU19KQVZBU0NSSVBUICs9IEVOQUJMRV9WSQogY29u
dGFpbnMoREVGSU5FUywgRU5BQkxFX0RBVEFfVFJBTlNGRVJfSVRFTVM9MSk6IEZFQVRVUkVfREVG
SU5FU19KQVZBU0NSSVBUICs9IEVOQUJMRV9EQVRBX1RSQU5TRkVSX0lURU1TPTEKIGNvbnRhaW5z
KERFRklORVMsIEVOQUJMRV9GVUxMU0NSRUVOX0FQST0xKTogRkVBVFVSRV9ERUZJTkVTX0pBVkFT
Q1JJUFQgKz0gRU5BQkxFX0ZVTExTQ1JFRU5fQVBJPTEKIGNvbnRhaW5zKERFRklORVMsIEVOQUJM
RV9SRVFVRVNUX0FOSU1BVElPTl9GUkFNRT0xKTogRkVBVFVSRV9ERUZJTkVTX0pBVkFTQ1JJUFQg
Kz0gRU5BQkxFX1JFUVVFU1RfQU5JTUFUSU9OX0ZSQU1FPTEKK2NvbnRhaW5zKERFRklORVMsIEVO
QUJMRV9UT1VDSF9BREpVU1RNRU5UPTEpOiBGRUFUVVJFX0RFRklORVNfSkFWQVNDUklQVCArPSBF
TkFCTEVfVE9VQ0hfQURKVVNUTUVOVD0xCiAKICMgVXNlZCB0byBjb21wdXRlIGRlZmF1bHRzIGZv
ciB0aGUgYnVpbGQtd2Via2l0IHNjcmlwdAogIyBEb24ndCBwbGFjZSBhbnl0aGluZyBhZnRlciB0
aGlzIQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>129887</attachid>
            <date>2012-03-02 05:31:01 -0800</date>
            <delta_ts>2012-03-07 07:10:46 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>Patch</filename>
            <type>text/plain</type>
            <size>67633</size>
            <attacher name="Allan Sandfeld Jensen">allan.jensen</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL0NoYW5nZUxvZyBiL0xheW91dFRlc3RzL0NoYW5nZUxv
ZwppbmRleCAzZjMwNDA0Li4zNzMyNGRkIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9DaGFuZ2VM
b2cKKysrIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjcgQEAKKzIwMTItMDIt
MjggIEFsbGFuIFNhbmRmZWxkIEplbnNlbiAgPGFsbGFuLmplbnNlbkBub2tpYS5jb20+CisKKyAg
ICAgICAgU2VsZWN0IGJlc3QgdGFyZ2V0IGZvciB0YXAgZ2VzdHVyZS4KKyAgICAgICAgaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTc4ODAxCisKKyAgICAgICAgUmV2aWV3
ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVGVzdCBvZiB0b3VjaCBhZGp1c3RtZW50
cy4gVGVzdHMgc2V2ZXJhbCBib3RoIG5vcm1hbCBhbmQgdHJpY2t5IGNhc2VzLgorICAgICAgICBU
aGUgdGVzdHMgYXJlIG5vdCBleGhhdXN0aXZlIHRob3VnaC4KKworICAgICAgICAqIHBsYXRmb3Jt
L2Nocm9taXVtL3Rlc3RfZXhwZWN0YXRpb25zLnR4dDoKKyAgICAgICAgKiBwbGF0Zm9ybS9lZmwv
U2tpcHBlZDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ndGsvU2tpcHBlZDoKKyAgICAgICAgKiBwbGF0
Zm9ybS9tYWMvU2tpcHBlZDoKKyAgICAgICAgKiBwbGF0Zm9ybS93aW4vU2tpcHBlZDoKKyAgICAg
ICAgKiB0b3VjaGFkanVzdG1lbnQvZXZlbnQtdHJpZ2dlcmVkLXdpZGdldHMtZXhwZWN0ZWQudHh0
OiBBZGRlZC4KKyAgICAgICAgKiB0b3VjaGFkanVzdG1lbnQvZXZlbnQtdHJpZ2dlcmVkLXdpZGdl
dHMuaHRtbDogQWRkZWQuCisgICAgICAgICogdG91Y2hhZGp1c3RtZW50L2h0bWwtbGFiZWwtZXhw
ZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAgICAgKiB0b3VjaGFkanVzdG1lbnQvaHRtbC1sYWJlbC5o
dG1sOiBBZGRlZC4KKyAgICAgICAgKiB0b3VjaGFkanVzdG1lbnQvbmVzdGVkLXRvdWNoLWV4cGVj
dGVkLnR4dDogQWRkZWQuCisgICAgICAgICogdG91Y2hhZGp1c3RtZW50L25lc3RlZC10b3VjaC5o
dG1sOiBBZGRlZC4KKyAgICAgICAgKiB0b3VjaGFkanVzdG1lbnQvdG91Y2gtaW5saW5lcy1leHBl
Y3RlZC50eHQ6IEFkZGVkLgorICAgICAgICAqIHRvdWNoYWRqdXN0bWVudC90b3VjaC1pbmxpbmVz
Lmh0bWw6IEFkZGVkLgorCiAyMDEyLTAzLTAxICBBbGV4YW5kZXIgUGF2bG92ICA8YXBhdmxvdkBj
aHJvbWl1bS5vcmc+CiAKICAgICAgICAgV2ViIEluc3BlY3RvcjogSW1wbGVtZW50IHN1Z2dlc3Rp
b25zIGluIFdhdGNoIEV4cHJlc3Npb25zCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9wbGF0Zm9y
bS9jaHJvbWl1bS90ZXN0X2V4cGVjdGF0aW9ucy50eHQgYi9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9j
aHJvbWl1bS90ZXN0X2V4cGVjdGF0aW9ucy50eHQKaW5kZXggMzFiOGRkZS4uYzM4MzRkOSAxMDA2
NDQKLS0tIGEvTGF5b3V0VGVzdHMvcGxhdGZvcm0vY2hyb21pdW0vdGVzdF9leHBlY3RhdGlvbnMu
dHh0CisrKyBiL0xheW91dFRlc3RzL3BsYXRmb3JtL2Nocm9taXVtL3Rlc3RfZXhwZWN0YXRpb25z
LnR4dApAQCAtMTEyLDYgKzExMiw5IEBAIEJVR0NSMTAzOTM5IFNLSVAgOiBodHRwL3Rlc3RzL2Fw
cGNhY2hlL3dyb25nLWNvbnRlbnQtdHlwZS5odG1sID0gVEVYVAogLy8gVmlicmF0aW9uIEFQSSBp
cyBub3Qgc3VwcG9ydGVkIHlldCBpbiB0aGUgY2hyb21pdW0gcG9ydC4KIEJVR1dLNzIwMTAgU0tJ
UCA6IGZhc3QvZG9tL25hdmlnYXRvci12aWJyYXRpb24uaHRtbCA9IEZBSUwKIAorLy8gVG91Y2gg
QWRqdXN0bWVudCBpcyBub3Qgc3VwcG9ydGVkIHlldCBpbiB0aGUgY2hyb21pdW0gcG9ydC4KK0JV
R1dLNzg4MDEgU0tJUCA6IHRvdWNoYWRqdXN0bWVudC8gPSBGQUlMCisKIC8vIC0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAv
LyBXT05URklYIFRFU1RTCiAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvcGxh
dGZvcm0vZWZsL1NraXBwZWQgYi9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9lZmwvU2tpcHBlZAppbmRl
eCA3NWIxM2VkLi40MjM3Nzg3IDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9lZmwv
U2tpcHBlZAorKysgYi9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9lZmwvU2tpcHBlZApAQCAtMjc3OSw2
ICsyNzc5LDEwIEBAIGZhc3QvZXZlbnRzL3BhZ2UtdmlzaWJpbGl0eS1pZnJhbWUtZGVsZXRlLXRl
c3QuaHRtbAogZmFzdC9ldmVudHMvcGFnZS12aXNpYmlsaXR5LWlmcmFtZS1wcm9wYWdhdGlvbi10
ZXN0Lmh0bWwKIGZhc3QvZXZlbnRzL3BhZ2UtdmlzaWJpbGl0eS10cmFuc2l0aW9uLXRlc3QuaHRt
bAogCisjIFRvdWNoIGFkanVzdG1lbnQgbm90IGVuYWJsZWQKKyMgaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTc4ODAxCit0b3VjaGFkanVzdG1lbnQKKwogIyBUaGVyZSBh
cmUgbm8gZXhwZWN0ZWQgcmVzdWx0IHNldCB5ZXQuCiBhbmltYXRpb25zL2FkZGl0aXZlLXRyYW5z
Zm9ybS1hbmltYXRpb25zLmh0bWwKIGFuaW1hdGlvbnMvYW5pbWF0aW9uLWJvcmRlci1vdmVyZmxv
dy5odG1sCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9tYWMvU2tpcHBlZCBiL0xh
eW91dFRlc3RzL3BsYXRmb3JtL21hYy9Ta2lwcGVkCmluZGV4IGM3NzI4MWMuLmZjYzgzMDggMTAw
NjQ0Ci0tLSBhL0xheW91dFRlc3RzL3BsYXRmb3JtL21hYy9Ta2lwcGVkCisrKyBiL0xheW91dFRl
c3RzL3BsYXRmb3JtL21hYy9Ta2lwcGVkCkBAIC01NjcsMyArNTY3LDcgQEAgZmFzdC9tdXRhdGlv
bi9lbmQtb2YtdGFzay1kZWxpdmVyeS5odG1sCiAjIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD03MjAxMAogIyBOZWVkcyBQYWdlQ2xpZW50czo6dmlicmF0aW9uQ2xpZW50
KCkgaW1wbGVtZW50YXRpb24uCiBmYXN0L2RvbS9uYXZpZ2F0b3ItdmlicmF0aW9uLmh0bWwKKwor
IyBUb3VjaCBhZGp1c3RtZW50IG5vdCBlbmFibGVkCisjIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD03ODgwMQordG91Y2hhZGp1c3RtZW50CmRpZmYgLS1naXQgYS9MYXlv
dXRUZXN0cy9wbGF0Zm9ybS93aW4vU2tpcHBlZCBiL0xheW91dFRlc3RzL3BsYXRmb3JtL3dpbi9T
a2lwcGVkCmluZGV4IDQyNDcyMmQuLmNmNThlYWYgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL3Bs
YXRmb3JtL3dpbi9Ta2lwcGVkCisrKyBiL0xheW91dFRlc3RzL3BsYXRmb3JtL3dpbi9Ta2lwcGVk
CkBAIC0xNjU5LDMgKzE2NTksNyBAQCBmYXN0L3JlcGFpbnQvdHJhbnNmb3JtLWFic29sdXRlLWlu
LXBvc2l0aW9uZWQtY29udGFpbmVyLmh0bWwKIAogI1ZpYnJhdGlvbiBBUEkgaXMgbm90IGltcGxl
bWVudGVkLgogZmFzdC9kb20vbmF2aWdhdG9yLXZpYnJhdGlvbi5odG1sCisKKyMgVG91Y2ggYWRq
dXN0bWVudCBub3QgZW5hYmxlZAorIyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9Nzg4MDEKK3RvdWNoYWRqdXN0bWVudApkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvdG91
Y2hhZGp1c3RtZW50L2V2ZW50LXRyaWdnZXJlZC13aWRnZXRzLWV4cGVjdGVkLnR4dCBiL0xheW91
dFRlc3RzL3RvdWNoYWRqdXN0bWVudC9ldmVudC10cmlnZ2VyZWQtd2lkZ2V0cy1leHBlY3RlZC50
eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjk0ZTIwZQotLS0gL2Rldi9u
dWxsCisrKyBiL0xheW91dFRlc3RzL3RvdWNoYWRqdXN0bWVudC9ldmVudC10cmlnZ2VyZWQtd2lk
Z2V0cy1leHBlY3RlZC50eHQKQEAgLTAsMCArMSwzMSBAQAorVGVzdCB2YXJpb3VzIHdheXMgdG8g
dHJpZ2dlciBpbnB1dC13aWRnZXRzLiBPbiBhIHRvdWNoIGludGVyZmFjZSwgYWxsIHRoZSBhY3Rp
b25zIHNob3VsZCBiZSB0cmlnZ2VyYWJsZSB3aXRoIGVpdGhlciBhIHRvdWNoIGRvd24gb3IgYSB0
b3VjaCB0YXAuCisKK09uIHN1Y2Nlc3MsIHlvdSB3aWxsIHNlZSBhIHNlcmllcyBvZiAiUEFTUyIg
bWVzc2FnZXMsIGZvbGxvd2VkIGJ5ICJURVNUIENPTVBMRVRFIi4KKworCitUZXN0aW5nIHNtYWxs
IGRpcmVjdCBoaXRzCitQQVNTIGFkanVzdGVkTm9kZS5pZCBpcyBlbGVtZW50LmlkCitQQVNTIGFk
anVzdGVkTm9kZS5pZCBpcyBlbGVtZW50LmlkCitQQVNTIGFkanVzdGVkTm9kZS5pZCBpcyBlbGVt
ZW50LmlkCitQQVNTIGFkanVzdGVkTm9kZS5pZCBpcyBub3QgZWxlbWVudC5pZAorUEFTUyBhZGp1
c3RlZE5vZGUuaWQgaXMgZWxlbWVudC5pZAorVGVzdGluZyBsYXJnZSBkaXJlY3QgaGl0cworUEFT
UyBhZGp1c3RlZE5vZGUuaWQgaXMgZWxlbWVudC5pZAorUEFTUyBhZGp1c3RlZE5vZGUuaWQgaXMg
ZWxlbWVudC5pZAorUEFTUyBhZGp1c3RlZE5vZGUuaWQgaXMgZWxlbWVudC5pZAorUEFTUyBhZGp1
c3RlZE5vZGUuaWQgaXMgbm90IGVsZW1lbnQuaWQKK1BBU1MgYWRqdXN0ZWROb2RlLmlkIGlzIGVs
ZW1lbnQuaWQKK1Rlc3RpbmcgbGFyZ2UgZGlyZWN0IGhpdHMKK1BBU1MgYWRqdXN0ZWROb2RlLmlk
IGlzIGVsZW1lbnQuaWQKK1BBU1MgYWRqdXN0ZWROb2RlLmlkIGlzIGVsZW1lbnQuaWQKK1BBU1Mg
YWRqdXN0ZWROb2RlLmlkIGlzIGVsZW1lbnQuaWQKK1BBU1MgYWRqdXN0ZWROb2RlLmlkIGlzIG5v
dCBlbGVtZW50LmlkCitQQVNTIGFkanVzdGVkTm9kZS5pZCBpcyBlbGVtZW50LmlkCitQQVNTIHN1
Y2Nlc3NmdWxseVBhcnNlZCBpcyB0cnVlCisKK1RFU1QgQ09NUExFVEUKK0ZvY3VzIGhlcmUgc2hv
dWxkIGdpdmUgYSB0ZXh0IGlucHV0LWZpZWxkLgorTW91c2Utb3ZlciBoZXJlIHNob3VsZCBnaXZl
IGEgdGV4dCBpbnB1dC1maWVsZC4KK0hvdmVyaW5nIGhlcmUgc2hvdWxkIGdpdmUgYSB0ZXh0IGlu
cHV0LWZpZWxkLiAKK0ZvY3VzaW5nIGhlcmUgc2hvdWxkIG9ubHkgZ2l2ZSBmb2N1cyBvdXRsaW5l
LgorRm9jdXNpbmcgaGVyZSBzaG91bGQgZ2l2ZSBhIHRleHQgaW5wdXQtZmllbGQuCmRpZmYgLS1n
aXQgYS9MYXlvdXRUZXN0cy90b3VjaGFkanVzdG1lbnQvZXZlbnQtdHJpZ2dlcmVkLXdpZGdldHMu
aHRtbCBiL0xheW91dFRlc3RzL3RvdWNoYWRqdXN0bWVudC9ldmVudC10cmlnZ2VyZWQtd2lkZ2V0
cy5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJiMWJmODgKLS0tIC9k
ZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy90b3VjaGFkanVzdG1lbnQvZXZlbnQtdHJpZ2dlcmVk
LXdpZGdldHMuaHRtbApAQCAtMCwwICsxLDE2OSBAQAorPGh0bWw+Cis8aGVhZD4KKzxzdHlsZT4K
KyAgICAuYm94IHsgYm9yZGVyOiAxcHggc29saWQgYmxhY2s7IGJvcmRlci1yYWRpdXM6IDVweCA1
cHg7IG1hcmdpbjogMWVtOyBtYXgtd2lkdGg6IDQwZW07IH0KKzwvc3R5bGU+CisKKzxzY3JpcHQg
c3JjPSIuLi9mYXN0L2pzL3Jlc291cmNlcy9qcy10ZXN0LXByZS5qcyI+PC9zY3JpcHQ+CisKKzwv
aGVhZD4KKworPGJvZHkgb25sb2FkPSJydW5UZXN0cygpIj4KKworPHAgaWQ9J2Rlc2NyaXB0aW9u
Jz48L3A+CisKKzxkaXYgaWQ9J2NvbnNvbGUnPjwvZGl2PgorCis8c2NyaXB0PgorICAgIHZhciBl
bGVtZW50OworICAgIHZhciBhZGp1c3RlZE5vZGU7CisgICAgZnVuY3Rpb24gZmluZEFic29sdXRl
UG9zaXRpb24obm9kZSkgeworICAgICAgICB2YXIgcG9zID0gbmV3IE9iamVjdCgpOworICAgICAg
ICBwb3MubGVmdCA9IDA7IHBvcy50b3AgPSAwOworICAgICAgICBkbyB7CisgICAgICAgICAgICBw
b3MubGVmdCArPSBub2RlLm9mZnNldExlZnQ7CisgICAgICAgICAgICBwb3MudG9wICs9IG5vZGUu
b2Zmc2V0VG9wOworICAgICAgICB9IHdoaWxlIChub2RlID0gbm9kZS5vZmZzZXRQYXJlbnQpOwor
ICAgICAgICByZXR1cm4gcG9zOworICAgIH0KKworICAgIGZ1bmN0aW9uIHRlc3REaXJlY3RUb3Vj
aChlbGVtZW50KQorICAgIHsKKyAgICAgICAgdmFyIHBvcyA9IGZpbmRBYnNvbHV0ZVBvc2l0aW9u
KGVsZW1lbnQpOworICAgICAgICB2YXIgeCA9IHBvcy5sZWZ0ICsgZWxlbWVudC5jbGllbnRXaWR0
aC8yIC0gMTsKKyAgICAgICAgdmFyIHkgPSBwb3MudG9wICsgZWxlbWVudC5jbGllbnRIZWlnaHQv
MiAtIDE7CisgICAgICAgIHZhciB3ID0gMzsKKyAgICAgICAgdmFyIGggPSAzOworICAgICAgICBh
ZGp1c3RlZE5vZGUgPSBpbnRlcm5hbHMudG91Y2hOb2RlQWRqdXN0ZWRUb0Jlc3RDbGlja2FibGVO
b2RlKHgsIHksIHcsIGgsIGRvY3VtZW50KTsKKworICAgICAgICBpZiAoYWRqdXN0ZWROb2RlLm5v
ZGVUeXBlID09IDMpIC8vIFRFWFQgbm9kZQorICAgICAgICAgICAgYWRqdXN0ZWROb2RlID0gYWRq
dXN0ZWROb2RlLnBhcmVudE5vZGU7CisgICAgfQorCisgICAgZnVuY3Rpb24gdGVzdERpcmVjdEZh
dEZpbmdlcihlbGVtZW50KQorICAgIHsKKyAgICAgICAgdmFyIHBvcyA9IGZpbmRBYnNvbHV0ZVBv
c2l0aW9uKGVsZW1lbnQpOworICAgICAgICB2YXIgeCA9IHBvcy5sZWZ0ICsgZWxlbWVudC5jbGll
bnRXaWR0aC8yIC0gMTsKKyAgICAgICAgdmFyIHkgPSBwb3MudG9wIC0gNSA7CisgICAgICAgIHZh
ciB3ID0gZWxlbWVudC5jbGllbnRIZWlnaHQ7CisgICAgICAgIHZhciBoID0gZWxlbWVudC5jbGll
bnRIZWlnaHQgKyAxMDsKKyAgICAgICAgYWRqdXN0ZWROb2RlID0gaW50ZXJuYWxzLnRvdWNoTm9k
ZUFkanVzdGVkVG9CZXN0Q2xpY2thYmxlTm9kZSh4LCB5LCB3LCBoLCBkb2N1bWVudCk7CisgICAg
ICAgIGlmIChhZGp1c3RlZE5vZGUubm9kZVR5cGUgPT0gMykgLy8gVEVYVCBub2RlCisgICAgICAg
ICAgICBhZGp1c3RlZE5vZGUgPSBhZGp1c3RlZE5vZGUucGFyZW50Tm9kZTsKKyAgICB9CisKKyAg
ICBmdW5jdGlvbiB0ZXN0SW5kaXJlY3RGYXRGaW5nZXIoZWxlbWVudCkKKyAgICB7CisgICAgICAg
IHZhciBwb3MgPSBmaW5kQWJzb2x1dGVQb3NpdGlvbihlbGVtZW50KTsKKyAgICAgICAgdmFyIHgg
PSBwb3MubGVmdCArIGVsZW1lbnQuY2xpZW50V2lkdGgvMiAtIDE7CisgICAgICAgIHZhciB5ID0g
cG9zLnRvcCAtIDc7CisgICAgICAgIHZhciB3ID0gMTA7CisgICAgICAgIHZhciBoID0gMTA7Cisg
ICAgICAgIGFkanVzdGVkTm9kZSA9IGludGVybmFscy50b3VjaE5vZGVBZGp1c3RlZFRvQmVzdENs
aWNrYWJsZU5vZGUoeCwgeSwgdywgaCwgZG9jdW1lbnQpOworICAgICAgICBpZiAoYWRqdXN0ZWRO
b2RlLm5vZGVUeXBlID09IDMpIC8vIFRFWFQgbm9kZQorICAgICAgICAgICAgYWRqdXN0ZWROb2Rl
ID0gYWRqdXN0ZWROb2RlLnBhcmVudE5vZGU7CisgICAgfQorCisgICAgZnVuY3Rpb24gdGVzdFRv
dWNoSGl0KGVsZW1lbnRpZCwgdG91Y2hUeXBlKSB7CisgICAgICAgIGVsZW1lbnQgPSBkb2N1bWVu
dC5nZXRFbGVtZW50QnlJZChlbGVtZW50aWQpOworICAgICAgICB0b3VjaFR5cGUoZWxlbWVudCk7
CisgICAgICAgIHNob3VsZEJlKCdhZGp1c3RlZE5vZGUuaWQnLCAnZWxlbWVudC5pZCcpOworICAg
IH0KKworICAgIGZ1bmN0aW9uIHRlc3RUb3VjaE1pc3MoZWxlbWVudGlkLCB0b3VjaFR5cGUpIHsK
KyAgICAgICAgZWxlbWVudCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGVsZW1lbnRpZCk7Cisg
ICAgICAgIHRvdWNoVHlwZShlbGVtZW50KTsKKyAgICAgICAgc2hvdWxkTm90QmUoJ2FkanVzdGVk
Tm9kZS5pZCcsICdlbGVtZW50LmlkJyk7CisgICAgfQorCisgICAgZnVuY3Rpb24gdGVzdERpcmVj
dFRvdWNoZXMoKQorICAgIHsKKyAgICAgICAgZGVidWcoJ1Rlc3Rpbmcgc21hbGwgZGlyZWN0IGhp
dHMnKTsKKyAgICAgICAgdGVzdFRvdWNoSGl0KCd0ZXN0MScsdGVzdERpcmVjdFRvdWNoKTsKKyAg
ICAgICAgdGVzdFRvdWNoSGl0KCd0ZXN0MicsdGVzdERpcmVjdFRvdWNoKTsKKyAgICAgICAgdGVz
dFRvdWNoSGl0KCd0ZXN0MycsdGVzdERpcmVjdFRvdWNoKTsKKyAgICAgICAgdGVzdFRvdWNoTWlz
cygndGVzdDQnLHRlc3REaXJlY3RUb3VjaCk7CisgICAgICAgIHRlc3RUb3VjaEhpdCgndGVzdDUn
LHRlc3REaXJlY3RUb3VjaCk7CisgICAgfQorCisgICAgZnVuY3Rpb24gdGVzdERpcmVjdEZhdEZp
bmdlcnMoKQorICAgIHsKKyAgICAgICAgZGVidWcoJ1Rlc3RpbmcgbGFyZ2UgZGlyZWN0IGhpdHMn
KTsKKyAgICAgICAgdGVzdFRvdWNoSGl0KCd0ZXN0MScsdGVzdERpcmVjdEZhdEZpbmdlcik7Cisg
ICAgICAgIHRlc3RUb3VjaEhpdCgndGVzdDInLHRlc3REaXJlY3RGYXRGaW5nZXIpOworICAgICAg
ICB0ZXN0VG91Y2hIaXQoJ3Rlc3QzJyx0ZXN0RGlyZWN0RmF0RmluZ2VyKTsKKyAgICAgICAgdGVz
dFRvdWNoTWlzcygndGVzdDQnLHRlc3REaXJlY3RGYXRGaW5nZXIpOworICAgICAgICB0ZXN0VG91
Y2hIaXQoJ3Rlc3Q1Jyx0ZXN0RGlyZWN0RmF0RmluZ2VyKTsKKyAgICB9CisKKyAgICBmdW5jdGlv
biB0ZXN0SW5kaXJlY3RGYXRGaW5nZXJzKCkKKyAgICB7CisgICAgICAgIGRlYnVnKCdUZXN0aW5n
IGxhcmdlIGRpcmVjdCBoaXRzJyk7CisgICAgICAgIHRlc3RUb3VjaEhpdCgndGVzdDEnLHRlc3RJ
bmRpcmVjdEZhdEZpbmdlcik7CisgICAgICAgIHRlc3RUb3VjaEhpdCgndGVzdDInLHRlc3RJbmRp
cmVjdEZhdEZpbmdlcik7CisgICAgICAgIHRlc3RUb3VjaEhpdCgndGVzdDMnLHRlc3RJbmRpcmVj
dEZhdEZpbmdlcik7CisgICAgICAgIHRlc3RUb3VjaE1pc3MoJ3Rlc3Q0Jyx0ZXN0SW5kaXJlY3RG
YXRGaW5nZXIpOworICAgICAgICB0ZXN0VG91Y2hIaXQoJ3Rlc3Q1Jyx0ZXN0SW5kaXJlY3RGYXRG
aW5nZXIpOworICAgIH0KKworICAgIGZ1bmN0aW9uIHJ1blRlc3RzKCkKKyAgICB7CisgICAgICAg
IGlmICh3aW5kb3cubGF5b3V0VGVzdENvbnRyb2xsZXIgJiYgd2luZG93LmludGVybmFscyAmJiBp
bnRlcm5hbHMudG91Y2hOb2RlQWRqdXN0ZWRUb0Jlc3RDbGlja2FibGVOb2RlKSB7CisgICAgICAg
ICAgICBkZXNjcmlwdGlvbignVGVzdCB2YXJpb3VzIHdheXMgdG8gdHJpZ2dlciBpbnB1dC13aWRn
ZXRzLiBPbiBhIHRvdWNoIGludGVyZmFjZSwgYWxsIHRoZSBhY3Rpb25zIHNob3VsZCBiZSB0cmln
Z2VyYWJsZSB3aXRoIGVpdGhlciBhIHRvdWNoIGRvd24gb3IgYSB0b3VjaCB0YXAuJyk7CisgICAg
ICAgICAgICBsYXlvdXRUZXN0Q29udHJvbGxlci5kdW1wQXNUZXh0KCk7CisgICAgICAgICAgICBs
YXlvdXRUZXN0Q29udHJvbGxlci53YWl0VW50aWxEb25lKCk7CisgICAgICAgICAgICB0ZXN0RGly
ZWN0VG91Y2hlcygpOworICAgICAgICAgICAgdGVzdERpcmVjdEZhdEZpbmdlcnMoKTsKKyAgICAg
ICAgICAgIHRlc3RJbmRpcmVjdEZhdEZpbmdlcnMoKTsKKyAgICAgICAgICAgIGlzU3VjY2Vzc2Z1
bGx5UGFyc2VkKCk7CisgICAgICAgICAgICBsYXlvdXRUZXN0Q29udHJvbGxlci5ub3RpZnlEb25l
KCk7CisgICAgICAgIH0KKyAgICB9Cis8L3NjcmlwdD4KKworPHNjcmlwdD4KKyAgICBmdW5jdGlv
biB0cmlnZ2VySW5wdXQoKSB7CisgICAgICAgIHZhciBlbGVtZW50ID0gZXZlbnQuc3JjRWxlbWVu
dDsKKyAgICAgICAgaWYgKCFlbGVtZW50Lm9wZW4pIHsKKyAgICAgICAgICAgIGVsZW1lbnQuaW5u
ZXJIVE1MID0gJzxpbnB1dCB0eXBlPXRleHQgc3R5bGU9IndpZHRoOiAxMDAlIj48L2lucHV0PicK
KyAgICAgICAgICAgIGVsZW1lbnQub3BlbiA9IHRydWU7CisgICAgICAgIH0KKyAgICAgICAgZWxl
bWVudC5maXJzdENoaWxkLmZvY3VzKCk7CisgICAgfQorPC9zY3JpcHQ+CisKKzxkaXYgaWQ9dGVz
dDEgY2xhc3M9Ym94IHRhYmluZGV4PTEgb25mb2N1cz0ndHJpZ2dlcklucHV0KCknPgorRm9jdXMg
aGVyZSBzaG91bGQgZ2l2ZSBhIHRleHQgaW5wdXQtZmllbGQuCis8L2Rpdj4KKworPGRpdiBpZD10
ZXN0MiBjbGFzcz1ib3ggb25tb3VzZW92ZXI9J3RyaWdnZXJJbnB1dCgpJz4gCitNb3VzZS1vdmVy
IGhlcmUgc2hvdWxkIGdpdmUgYSB0ZXh0IGlucHV0LWZpZWxkLgorPC9kaXY+CisKKzxzdHlsZT4K
KyAgICAuYm94Om5vdCg6aG92ZXIpIC5ob3ZlcnRyaWdnZXJlZCB7IHZpc2liaWxpdHk6IGhpZGRl
bjt9CisgICAgLmJveDpob3ZlciAuaG92ZXJmYWxsYmFjayB7IGRpc3BsYXk6IG5vbmU7IH0gIAor
PC9zdHlsZT4KKworPGRpdiBpZD10ZXN0MyBjbGFzcz1ib3g+IAorICAgIDxzcGFuIGNsYXNzPWhv
dmVyZmFsbGJhY2s+SG92ZXJpbmcgaGVyZSBzaG91bGQgZ2l2ZSBhIHRleHQgaW5wdXQtZmllbGQu
PC9zcGFuPgorICAgIDxpbnB1dCB0eXBlPXRleHQgY2xhc3M9aG92ZXJ0cmlnZ2VyZWQ+PC9pbnB1
dD4KKzwvZGl2PgorCis8ZGl2IGlkPXRlc3Q0IGNsYXNzPWJveCBvbmZvY3VzPSd0cmlnZ2VySW5w
dXQoKSc+CisgICAgPHNwYW4gdGFiaW5kZXg9MT4gRm9jdXNpbmcgaGVyZSBzaG91bGQgb25seSBn
aXZlIGZvY3VzIG91dGxpbmUuCisgICAgPC9zcGFuPgorPC9kaXY+CisKKzxkaXYgaWQ9dGVzdDUg
Y2xhc3M9Ym94PgorICAgIDxzcGFuIHRhYmluZGV4PTE+IEZvY3VzaW5nIGhlcmUgc2hvdWxkIGdp
dmUgYSB0ZXh0IGlucHV0LWZpZWxkLgorICAgIDwvc3Bhbj4KKzwvZGl2PgorCis8c2NyaXB0Pgor
ICAgIHZhciBlbGVtZW50ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rlc3Q1Jyk7CisgICAg
ZWxlbWVudC5hZGRFdmVudExpc3RlbmVyKCdET01Gb2N1c0luJywgdHJpZ2dlcklucHV0LCBmYWxz
ZSk7Cis8L3NjcmlwdD4KKworPC9ib2R5PgorPC9odG1sPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9m
IGZpbGUKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3RvdWNoYWRqdXN0bWVudC9odG1sLWxhYmVs
LWV4cGVjdGVkLnR4dCBiL0xheW91dFRlc3RzL3RvdWNoYWRqdXN0bWVudC9odG1sLWxhYmVsLWV4
cGVjdGVkLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNjY3ZjgzCi0t
LSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvdG91Y2hhZGp1c3RtZW50L2h0bWwtbGFiZWwt
ZXhwZWN0ZWQudHh0CkBAIC0wLDAgKzEsMjIgQEAKK0RvIG5vdCBjbGljayBoZXJlCitDbGljayBo
ZXJlLCBidXQgbm90IGhlcmUuIAorCisKKworVGVzdHMgaWYgbGFiZWxzIGFyZSB0cmVhdGVkIGFz
IGNsaWNrYWJsZSBpZiB0aGUgaW5wdXQgdGhleSBjb250cm9sIGlzLgorCitPbiBzdWNjZXNzLCB5
b3Ugd2lsbCBzZWUgYSBzZXJpZXMgb2YgIlBBU1MiIG1lc3NhZ2VzLCBmb2xsb3dlZCBieSAiVEVT
VCBDT01QTEVURSIuCisKKworVGVzdGluZyBzbWFsbCBkaXJlY3QgaGl0cworUEFTUyBhZGp1c3Rl
ZE5vZGUuaWQgaXMgIm15bGluayIKK1BBU1MgYWRqdXN0ZWROb2RlLmlkIGlzICJteWxhYmVsIgor
UEFTUyBhZGp1c3RlZE5vZGUuaWQgaXMgIm15aW5wdXQiCitUZXN0aW5nIGluZGlyZWN0IGhpdHMK
K1BBU1MgYWRqdXN0ZWROb2RlLmlkIGlzICJteWxpbmsiCitQQVNTIGFkanVzdGVkTm9kZS5pZCBp
cyAibXlsYWJlbCIKK1BBU1MgYWRqdXN0ZWROb2RlLmlkIGlzICJteWlucHV0IgorUEFTUyBzdWNj
ZXNzZnVsbHlQYXJzZWQgaXMgdHJ1ZQorCitURVNUIENPTVBMRVRFCisKZGlmZiAtLWdpdCBhL0xh
eW91dFRlc3RzL3RvdWNoYWRqdXN0bWVudC9odG1sLWxhYmVsLmh0bWwgYi9MYXlvdXRUZXN0cy90
b3VjaGFkanVzdG1lbnQvaHRtbC1sYWJlbC5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDAwMDAwMDAuLjg1ZmZmMzQKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy90b3VjaGFk
anVzdG1lbnQvaHRtbC1sYWJlbC5odG1sCkBAIC0wLDAgKzEsMTA4IEBACis8aHRtbD4KKzxoZWFk
PgorPHNjcmlwdCBzcmM9Ii4uL2Zhc3QvanMvcmVzb3VyY2VzL2pzLXRlc3QtcHJlLmpzIj48L3Nj
cmlwdD4KKworPC9oZWFkPgorCis8Ym9keSBpZD0ibXlib2R5IiBvbmxvYWQ9InJ1blRlc3RzKCki
PgorCis8YSBocmVmPSIjbXlmb3JtIiBpZD0ibXlsaW5rIj5EbyBub3QgY2xpY2sgaGVyZTwvYT48
YnI+Cis8Zm9ybSBpZD0ibXlmb3JtIj4KKzxsYWJlbCBmb3I9Im15aW5wdXQiIGlkPSJteWxhYmVs
Ij5DbGljayBoZXJlLDwvbGFiZWw+Cis8c3BhbiBpZD0ibXlzcGFuIj5idXQgbm90IGhlcmUuPC9z
cGFuPgorPGlucHV0IHR5cGU9InRleHQiIGlkPSJteWlucHV0IiB2YWx1ZT0iVG8gZm9jdXMgdGhp
cy4iPjwvaW5wdXQ+Cis8L2Zvcm0+Cis8YnI+PGJyPjxicj4KKworPHAgaWQ9J2Rlc2NyaXB0aW9u
Jz48L3A+Cis8ZGl2IGlkPSdjb25zb2xlJz48L2Rpdj4KKworPHNjcmlwdD4KKyAgICB2YXIgZWxl
bWVudDsKKyAgICB2YXIgYWRqdXN0ZWROb2RlOworICAgIGZ1bmN0aW9uIGZpbmRBYnNvbHV0ZVBv
c2l0aW9uKG5vZGUpIHsKKyAgICAgICAgdmFyIHBvcyA9IG5ldyBPYmplY3QoKTsKKyAgICAgICAg
cG9zLmxlZnQgPSAwOyBwb3MudG9wID0gMDsKKyAgICAgICAgZG8geworICAgICAgICAgICAgcG9z
LmxlZnQgKz0gbm9kZS5vZmZzZXRMZWZ0OworICAgICAgICAgICAgcG9zLnRvcCArPSBub2RlLm9m
ZnNldFRvcDsKKyAgICAgICAgfSB3aGlsZSAobm9kZSA9IG5vZGUub2Zmc2V0UGFyZW50KTsKKyAg
ICAgICAgcmV0dXJuIHBvczsKKyAgICB9CisKKyAgICBmdW5jdGlvbiB0ZXN0RGlyZWN0VG91Y2go
ZWxlbWVudCkKKyAgICB7CisgICAgICAgIHZhciBwb3MgPSBmaW5kQWJzb2x1dGVQb3NpdGlvbihl
bGVtZW50KTsKKyAgICAgICAgdmFyIHggPSBwb3MubGVmdCArIGVsZW1lbnQuY2xpZW50V2lkdGgv
MiAtIDIwOworICAgICAgICB2YXIgeSA9IHBvcy50b3AgKyBlbGVtZW50LmNsaWVudEhlaWdodC8y
IC0gMzA7CisgICAgICAgIHZhciB3ID0gNDA7CisgICAgICAgIHZhciBoID0gNjA7CisgICAgICAg
IHZhciBhZGp1c3RlZE5vZGUgPSBpbnRlcm5hbHMudG91Y2hOb2RlQWRqdXN0ZWRUb0Jlc3RDbGlj
a2FibGVOb2RlKHgsIHksIHcsIGgsIGRvY3VtZW50KTsKKyAgICAgICAgd2hpbGUgKGFkanVzdGVk
Tm9kZS5ub2RlVHlwZSAhPSAxKSAvLyBOb3QgZWxlbWVudC4KKyAgICAgICAgICAgIGFkanVzdGVk
Tm9kZSA9IGFkanVzdGVkTm9kZS5wYXJlbnROb2RlOworICAgICAgICByZXR1cm4gYWRqdXN0ZWRO
b2RlOworICAgIH0KKworICAgIGZ1bmN0aW9uIHRlc3RJbmRpcmVjdFRvdWNoKGVsZW1lbnQpCisg
ICAgeworICAgICAgICAvLyBUb3VjaCBqdXN0IHJpZ2h0IG9mIHRoZSBlbGVtZW50LgorICAgICAg
ICB2YXIgcG9zID0gZmluZEFic29sdXRlUG9zaXRpb24oZWxlbWVudCk7CisgICAgICAgIHZhciB4
ID0gcG9zLmxlZnQgKyBlbGVtZW50LmNsaWVudFdpZHRoICsgMTAgLSAzMDsKKyAgICAgICAgdmFy
IHkgPSBwb3MudG9wICsgZWxlbWVudC5jbGllbnRIZWlnaHQvMiAtIDIwOworICAgICAgICB2YXIg
dyA9IDYwOworICAgICAgICB2YXIgaCA9IDQwOworICAgICAgICB2YXIgYWRqdXN0ZWROb2RlID0g
aW50ZXJuYWxzLnRvdWNoTm9kZUFkanVzdGVkVG9CZXN0Q2xpY2thYmxlTm9kZSh4LCB5LCB3LCBo
LCBkb2N1bWVudCk7CisgICAgICAgIHdoaWxlIChhZGp1c3RlZE5vZGUubm9kZVR5cGUgIT0gMSAp
IC8vIE5vdCBlbGVtZW50LgorICAgICAgICAgICAgYWRqdXN0ZWROb2RlID0gYWRqdXN0ZWROb2Rl
LnBhcmVudE5vZGU7CisgICAgICAgIHJldHVybiBhZGp1c3RlZE5vZGU7CisgICAgfQorCisgICAg
ZnVuY3Rpb24gdGVzdERpcmVjdFRvdWNoZXMoKQorICAgIHsKKyAgICAgICAgZGVidWcoJ1Rlc3Rp
bmcgc21hbGwgZGlyZWN0IGhpdHMnKTsKKworICAgICAgICBlbGVtZW50ID0gZG9jdW1lbnQuZ2V0
RWxlbWVudEJ5SWQoJ215bGluaycpOworICAgICAgICBhZGp1c3RlZE5vZGUgPSB0ZXN0RGlyZWN0
VG91Y2goZWxlbWVudCk7CisgICAgICAgIHNob3VsZEJlRXF1YWxUb1N0cmluZygnYWRqdXN0ZWRO
b2RlLmlkJywgJ215bGluaycpOworCisgICAgICAgIGVsZW1lbnQgPSBkb2N1bWVudC5nZXRFbGVt
ZW50QnlJZCgnbXlsYWJlbCcpOworICAgICAgICBhZGp1c3RlZE5vZGUgPSB0ZXN0RGlyZWN0VG91
Y2goZWxlbWVudCk7CisgICAgICAgIHNob3VsZEJlRXF1YWxUb1N0cmluZygnYWRqdXN0ZWROb2Rl
LmlkJywgJ215bGFiZWwnKTsKKworICAgICAgICBlbGVtZW50ID0gZG9jdW1lbnQuZ2V0RWxlbWVu
dEJ5SWQoJ215aW5wdXQnKTsKKyAgICAgICAgYWRqdXN0ZWROb2RlID0gdGVzdERpcmVjdFRvdWNo
KGVsZW1lbnQpOworICAgICAgICBzaG91bGRCZUVxdWFsVG9TdHJpbmcoJ2FkanVzdGVkTm9kZS5p
ZCcsICdteWlucHV0Jyk7CisgICAgfQorCisgICAgZnVuY3Rpb24gdGVzdEluZGlyZWN0VG91Y2hl
cygpCisgICAgeworICAgICAgICBkZWJ1ZygnVGVzdGluZyBpbmRpcmVjdCBoaXRzJyk7CisKKyAg
ICAgICAgZWxlbWVudCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdteWxpbmsnKTsKKyAgICAg
ICAgYWRqdXN0ZWROb2RlID0gdGVzdEluZGlyZWN0VG91Y2goZWxlbWVudCk7CisgICAgICAgIHNo
b3VsZEJlRXF1YWxUb1N0cmluZygnYWRqdXN0ZWROb2RlLmlkJywgJ215bGluaycpOworCisgICAg
ICAgIGVsZW1lbnQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbXlsYWJlbCcpOworICAgICAg
ICBhZGp1c3RlZE5vZGUgPSB0ZXN0SW5kaXJlY3RUb3VjaChlbGVtZW50KTsKKyAgICAgICAgc2hv
dWxkQmVFcXVhbFRvU3RyaW5nKCdhZGp1c3RlZE5vZGUuaWQnLCAnbXlsYWJlbCcpOworCisgICAg
ICAgIGVsZW1lbnQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbXlpbnB1dCcpOworICAgICAg
ICBhZGp1c3RlZE5vZGUgPSB0ZXN0SW5kaXJlY3RUb3VjaChlbGVtZW50KTsKKyAgICAgICAgc2hv
dWxkQmVFcXVhbFRvU3RyaW5nKCdhZGp1c3RlZE5vZGUuaWQnLCAnbXlpbnB1dCcpOworICAgIH0K
KworICAgIGZ1bmN0aW9uIHJ1blRlc3RzKCkKKyAgICB7CisgICAgICAgIGlmICh3aW5kb3cubGF5
b3V0VGVzdENvbnRyb2xsZXIgJiYgd2luZG93LmludGVybmFscyAmJiBpbnRlcm5hbHMudG91Y2hO
b2RlQWRqdXN0ZWRUb0Jlc3RDbGlja2FibGVOb2RlKSB7CisgICAgICAgICAgICBkZXNjcmlwdGlv
bignVGVzdHMgaWYgbGFiZWxzIGFyZSB0cmVhdGVkIGFzIGNsaWNrYWJsZSBpZiB0aGUgaW5wdXQg
dGhleSBjb250cm9sIGlzLicpOworICAgICAgICAgICAgbGF5b3V0VGVzdENvbnRyb2xsZXIuZHVt
cEFzVGV4dCgpOworICAgICAgICAgICAgbGF5b3V0VGVzdENvbnRyb2xsZXIud2FpdFVudGlsRG9u
ZSgpOworICAgICAgICAgICAgdGVzdERpcmVjdFRvdWNoZXMoKTsKKyAgICAgICAgICAgIHRlc3RJ
bmRpcmVjdFRvdWNoZXMoKTsKKyAgICAgICAgICAgIGlzU3VjY2Vzc2Z1bGx5UGFyc2VkKCk7Cisg
ICAgICAgICAgICBsYXlvdXRUZXN0Q29udHJvbGxlci5ub3RpZnlEb25lKCk7CisgICAgICAgIH0K
KyAgICB9Cis8L3NjcmlwdD4KKzwvYm9keT4KKzwvaHRtbD4KXCBObyBuZXdsaW5lIGF0IGVuZCBv
ZiBmaWxlCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy90b3VjaGFkanVzdG1lbnQvbmVzdGVkLXRv
dWNoLWV4cGVjdGVkLnR4dCBiL0xheW91dFRlc3RzL3RvdWNoYWRqdXN0bWVudC9uZXN0ZWQtdG91
Y2gtZXhwZWN0ZWQudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc0N2Y2
N2UKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy90b3VjaGFkanVzdG1lbnQvbmVzdGVk
LXRvdWNoLWV4cGVjdGVkLnR4dApAQCAtMCwwICsxLDE4IEBACitCb3ggd2l0aCBhIGxvY2FsIGNs
aWNrIGhhbmRsZXIuCitCb3ggd2l0aG91dCBhIGxvY2FsIGNsaWNrIGhhbmRsZXIuCitUZXN0IHRo
ZSBjYXNlIHdoZXJlIGEgY2xpY2thYmxlIHRhcmdldCBpcyBuZXN0ZWQgaW5zaWRlIGEgZG9jdW1l
bnQgdGhhdCBpcyBtb25pdG9yaW5nIGNsaWNrcy4gVGhlIHRhcmdldCB3aXRoIHRoZSBsb2NhbCBl
dmVudC1oYW5kbGVyIHNob3VsZCBiZSBjaG9zZW4gaWYgbXVsdGlwbGUgdGFyZ2V0cyBhcmUgdG91
Y2hlZC4KKworT24gc3VjY2VzcywgeW91IHdpbGwgc2VlIGEgc2VyaWVzIG9mICJQQVNTIiBtZXNz
YWdlcywgZm9sbG93ZWQgYnkgIlRFU1QgQ09NUExFVEUiLgorCisKK1Rlc3Rpbmcgc21hbGwgZGly
ZWN0IGhpdHMKK1BBU1MgYWRqdXN0ZWROb2RlLmlkIGlzIGVsZW1lbnQuaWQKK1BBU1MgYWRqdXN0
ZWROb2RlLmlkIGlzIGVsZW1lbnQuaWQKK1Rlc3RpbmcgcHJlZmVyZWQgaGl0cworUEFTUyBhZGp1
c3RlZE5vZGUuaWQgaXMgZWxlbWVudDEuaWQKK1BBU1MgYWRqdXN0ZWROb2RlLmlkIGlzIGVsZW1l
bnQxLmlkCitQQVNTIGFkanVzdGVkTm9kZS5pZCBpcyBlbGVtZW50MS5pZAorUEFTUyBzdWNjZXNz
ZnVsbHlQYXJzZWQgaXMgdHJ1ZQorCitURVNUIENPTVBMRVRFCisKZGlmZiAtLWdpdCBhL0xheW91
dFRlc3RzL3RvdWNoYWRqdXN0bWVudC9uZXN0ZWQtdG91Y2guaHRtbCBiL0xheW91dFRlc3RzL3Rv
dWNoYWRqdXN0bWVudC9uZXN0ZWQtdG91Y2guaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAwMDAwMDAwLi4yYTYyMjQyCi0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvdG91Y2hh
ZGp1c3RtZW50L25lc3RlZC10b3VjaC5odG1sCkBAIC0wLDAgKzEsMTIwIEBACis8aHRtbD4KKzxo
ZWFkPgorPHN0eWxlPgorICAgIC5ib3ggeyBib3JkZXI6IDFweCBzb2xpZCBibGFjazsgYm9yZGVy
LXJhZGl1czogNXB4IDVweDsgbWFyZ2luOiAxZW07IG1heC13aWR0aDogNDBlbTsgfQorPC9zdHls
ZT4KKzxzY3JpcHQgc3JjPSIuLi9mYXN0L2pzL3Jlc291cmNlcy9qcy10ZXN0LXByZS5qcyI+PC9z
Y3JpcHQ+CisKKzwvaGVhZD4KKworPGJvZHkgb25sb2FkPSJydW5UZXN0cygpIj4KKworPGRpdiBj
bGFzcz1ib3ggaWQ9bXlib3gxPgorQm94IHdpdGggYSBsb2NhbCBjbGljayBoYW5kbGVyLgorPC9k
aXY+CisKKzxkaXYgY2xhc3M9Ym94IGlkPW15Ym94Mj4gCitCb3ggd2l0aG91dCBhIGxvY2FsIGNs
aWNrIGhhbmRsZXIuCis8L2Rpdj4KKworPHNjcmlwdD4KKyAgZnVuY3Rpb24gbW9uaXRvcihlKSB7
IGFsZXJ0KGUudGFyZ2V0ICsoIGUudGFyZ2V0LmlkID8gKCAnICMnICsgZS50YXJnZXQuaWQpIDog
JycpKTsgfTsKKyAgZnVuY3Rpb24gZG9Tb21ldGhpbmcoZSkge307CisKKyAgdmFyIGVsZW1lbnQg
PSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbXlib3gxJyk7CisgIGVsZW1lbnQuYWRkRXZlbnRM
aXN0ZW5lcignY2xpY2snLCBkb1NvbWV0aGluZywgZmFsc2UpOworICBlbGVtZW50ID0gZG9jdW1l
bnQuYm9keTsKKyAgZWxlbWVudC5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIG1vbml0b3IsIGZh
bHNlKTsKKzwvc2NyaXB0PgorCisKKzxwIGlkPSdkZXNjcmlwdGlvbic+PC9wPgorPGRpdiBpZD0n
Y29uc29sZSc+PC9kaXY+CisKKzxzY3JpcHQ+CisgICAgdmFyIGVsZW1lbnQ7CisgICAgdmFyIGFk
anVzdGVkTm9kZTsKKyAgICBmdW5jdGlvbiBmaW5kQWJzb2x1dGVQb3NpdGlvbihub2RlKSB7Cisg
ICAgICAgIHZhciBwb3MgPSBuZXcgT2JqZWN0KCk7CisgICAgICAgIHBvcy5sZWZ0ID0gMDsgcG9z
LnRvcCA9IDA7CisgICAgICAgIGRvIHsKKyAgICAgICAgICAgIHBvcy5sZWZ0ICs9IG5vZGUub2Zm
c2V0TGVmdDsKKyAgICAgICAgICAgIHBvcy50b3AgKz0gbm9kZS5vZmZzZXRUb3A7CisgICAgICAg
IH0gd2hpbGUgKG5vZGUgPSBub2RlLm9mZnNldFBhcmVudCk7CisgICAgICAgIHJldHVybiBwb3M7
CisgICAgfQorCisgICAgZnVuY3Rpb24gdGVzdERpcmVjdFRvdWNoKGVsZW1lbnQpCisgICAgewor
ICAgICAgICB2YXIgcG9zID0gZmluZEFic29sdXRlUG9zaXRpb24oZWxlbWVudCk7CisgICAgICAg
IHZhciB4ID0gcG9zLmxlZnQgKyBlbGVtZW50LmNsaWVudFdpZHRoLzIgLSAxOworICAgICAgICB2
YXIgeSA9IHBvcy50b3AgKyBlbGVtZW50LmNsaWVudEhlaWdodC8yIC0gMTsKKyAgICAgICAgdmFy
IHcgPSAzOworICAgICAgICB2YXIgaCA9IDM7CisgICAgICAgIHZhciBhZGp1c3RlZE5vZGUgPSBp
bnRlcm5hbHMudG91Y2hOb2RlQWRqdXN0ZWRUb0Jlc3RDbGlja2FibGVOb2RlKHgsIHksIHcsIGgs
IGRvY3VtZW50KTsKKyAgICAgICAgaWYgKGFkanVzdGVkTm9kZS5ub2RlVHlwZSA9PSAzKSAvLyBU
RVhUIG5vZGUKKyAgICAgICAgICAgIGFkanVzdGVkTm9kZSA9IGFkanVzdGVkTm9kZS5wYXJlbnRO
b2RlOworICAgICAgICByZXR1cm4gYWRqdXN0ZWROb2RlOworICAgIH0KKworICAgIGZ1bmN0aW9u
IHRlc3REb3VibGVUb3VjaChlbGVtZW50MSwgZWxlbWVudDIsIG9mZnNldCkKKyAgICB7CisgICAg
ICAgIHZhciBwb3MxID0gZmluZEFic29sdXRlUG9zaXRpb24oZWxlbWVudDEpOworICAgICAgICB2
YXIgcG9zMiA9IGZpbmRBYnNvbHV0ZVBvc2l0aW9uKGVsZW1lbnQyKTsKKyAgICAgICAgLy8gV2Ug
YXNzdW1lIHRoZSBlbGVtZW50cyBoYXZlIHRoZSBzYW1lIHggY29vcmQgYW5kIHdpZHRoLgorICAg
ICAgICB2YXIgeCA9IHBvczEubGVmdCArIGVsZW1lbnQxLmNsaWVudFdpZHRoLzIgLSAxOworICAg
ICAgICB2YXIgeTEgPSBwb3MxLnRvcCArIGVsZW1lbnQxLmNsaWVudEhlaWdodC8yICsgMTsKKyAg
ICAgICAgdmFyIHkyID0gcG9zMi50b3AgKyBlbGVtZW50Mi5jbGllbnRIZWlnaHQvMiAtIDE7Cisg
ICAgICAgIHZhciB3ID0geTIgLSB5MTsKKyAgICAgICAgdmFyIGggPSB5MiAtIHkxOworICAgICAg
ICB2YXIgYWRqdXN0ZWROb2RlID0gaW50ZXJuYWxzLnRvdWNoTm9kZUFkanVzdGVkVG9CZXN0Q2xp
Y2thYmxlTm9kZSh4LCB5MSwgdywgaCwgZG9jdW1lbnQpOworICAgICAgICBpZiAoYWRqdXN0ZWRO
b2RlLm5vZGVUeXBlID09IDMpIC8vIFRFWFQgbm9kZQorICAgICAgICAgICAgYWRqdXN0ZWROb2Rl
ID0gYWRqdXN0ZWROb2RlLnBhcmVudE5vZGU7CisgICAgICAgIHJldHVybiBhZGp1c3RlZE5vZGU7
CisgICAgfQorCisgICAgZnVuY3Rpb24gdGVzdERpcmVjdFRvdWNoZXMoKQorICAgIHsKKyAgICAg
ICAgZGVidWcoJ1Rlc3Rpbmcgc21hbGwgZGlyZWN0IGhpdHMnKTsKKworICAgICAgICBlbGVtZW50
ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ215Ym94MScpOworICAgICAgICBhZGp1c3RlZE5v
ZGUgPSB0ZXN0RGlyZWN0VG91Y2goZWxlbWVudCk7CisgICAgICAgIHNob3VsZEJlKCdhZGp1c3Rl
ZE5vZGUuaWQnLCAnZWxlbWVudC5pZCcpOworCisgICAgICAgIGVsZW1lbnQgPSBkb2N1bWVudC5n
ZXRFbGVtZW50QnlJZCgnbXlib3gyJyk7CisgICAgICAgIGFkanVzdGVkTm9kZSA9IHRlc3REaXJl
Y3RUb3VjaChlbGVtZW50KTsKKyAgICAgICAgc2hvdWxkQmUoJ2FkanVzdGVkTm9kZS5pZCcsICdl
bGVtZW50LmlkJyk7CisgICAgfQorCisgICAgZnVuY3Rpb24gdGVzdFByZWZlcmVkVG91Y2goKQor
ICAgIHsKKyAgICAgICAgZGVidWcoJ1Rlc3RpbmcgcHJlZmVyZWQgaGl0cycpOworCisgICAgICAg
IGVsZW1lbnQxID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ215Ym94MScpOworICAgICAgICBl
bGVtZW50MiA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdteWJveDInKTsKKyAgICAgICAgYWRq
dXN0ZWROb2RlID0gdGVzdERvdWJsZVRvdWNoKGVsZW1lbnQxLCBlbGVtZW50MiwgMCk7CisgICAg
ICAgIHNob3VsZEJlKCdhZGp1c3RlZE5vZGUuaWQnLCAnZWxlbWVudDEuaWQnKTsKKworICAgICAg
ICAvLyBGaXJzdCB0ZXN0IHdhcyBjZW50ZXJlZCwgbm93IG1vdmUgdGhlIHRlc3QgY2xvc2VyIHRv
IHRoZSB3cm9uZyBub2RlLCBhbmQgZW5zdXJlIHdlIHN0aWxsIGdldCB0aGUgcHJlZmVyZWQgbm9k
ZS4KKyAgICAgICAgYWRqdXN0ZWROb2RlID0gdGVzdERvdWJsZVRvdWNoKGVsZW1lbnQxLCBlbGVt
ZW50MiwgNSk7CisgICAgICAgIHNob3VsZEJlKCdhZGp1c3RlZE5vZGUuaWQnLCAnZWxlbWVudDEu
aWQnKTsKKworICAgICAgICBhZGp1c3RlZE5vZGUgPSB0ZXN0RG91YmxlVG91Y2goZWxlbWVudDEs
IGVsZW1lbnQyLCAxMCk7CisgICAgICAgIHNob3VsZEJlKCdhZGp1c3RlZE5vZGUuaWQnLCAnZWxl
bWVudDEuaWQnKTsKKyAgICB9CisKKyAgICBmdW5jdGlvbiBydW5UZXN0cygpCisgICAgeworICAg
ICAgICBpZiAod2luZG93LmxheW91dFRlc3RDb250cm9sbGVyICYmIHdpbmRvdy5pbnRlcm5hbHMg
JiYgaW50ZXJuYWxzLnRvdWNoTm9kZUFkanVzdGVkVG9CZXN0Q2xpY2thYmxlTm9kZSkgeworICAg
ICAgICAgICAgZGVzY3JpcHRpb24oJ1Rlc3QgdGhlIGNhc2Ugd2hlcmUgYSBjbGlja2FibGUgdGFy
Z2V0IGlzIG5lc3RlZCBpbnNpZGUgYSBkb2N1bWVudCB0aGF0IGlzIG1vbml0b3JpbmcgY2xpY2tz
LiBUaGUgdGFyZ2V0IHdpdGggdGhlIGxvY2FsIGV2ZW50LWhhbmRsZXIgc2hvdWxkIGJlIGNob3Nl
biBpZiBtdWx0aXBsZSB0YXJnZXRzIGFyZSB0b3VjaGVkLicpOworICAgICAgICAgICAgbGF5b3V0
VGVzdENvbnRyb2xsZXIuZHVtcEFzVGV4dCgpOworICAgICAgICAgICAgbGF5b3V0VGVzdENvbnRy
b2xsZXIud2FpdFVudGlsRG9uZSgpOworICAgICAgICAgICAgdGVzdERpcmVjdFRvdWNoZXMoKTsK
KyAgICAgICAgICAgIHRlc3RQcmVmZXJlZFRvdWNoKCk7CisgICAgICAgICAgICBpc1N1Y2Nlc3Nm
dWxseVBhcnNlZCgpOworICAgICAgICAgICAgbGF5b3V0VGVzdENvbnRyb2xsZXIubm90aWZ5RG9u
ZSgpOworICAgICAgICB9CisgICAgfQorPC9zY3JpcHQ+Cis8L2JvZHk+Cis8L2h0bWw+ClwgTm8g
bmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvdG91Y2hhZGp1
c3RtZW50L3RvdWNoLWlubGluZXMtZXhwZWN0ZWQudHh0IGIvTGF5b3V0VGVzdHMvdG91Y2hhZGp1
c3RtZW50L3RvdWNoLWlubGluZXMtZXhwZWN0ZWQudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAuLjdlMTRiZmUKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy90b3Vj
aGFkanVzdG1lbnQvdG91Y2gtaW5saW5lcy1leHBlY3RlZC50eHQKQEAgLTAsMCArMSwyOSBAQAor
c29tZSBsaW5rCitzb21lIGxpbmsgYnJlYWtpbmcgbGluZXMgYW5kIGxpbmsKK2hvbGEgbXVuZG8h
IGEgc3BsaXQgdXAgbGluaworaGVsbG8gd29ybGQgc29tZSBsaW5rIGFsc28gYnJlYWtpbmcKK2hp
IHRoZXJlIHNvbWUgbGluayB0aGF0IGlzIGJyZWFraW5nIG11bHRpcGxlIGxpbmVzIGp1c3QgZm9y
IHRoZSB2ZXJ5IGZ1biBvZiBpdAorCitUZXN0IHRvdWNoLWFkanVzdG1lbnQgb24gaW5saW5lIGxp
bmtzLiBNYWtpbmcgc3VyZSB3ZSBjYW4gaGl0IG92ZXIgbGluZS1icmVha3MsIGFuZCBjYW4gbWlz
cyB3aGVuIHRhcHBpbmcgYmV0d2VlbiBwYXJ0cyBvZiBhIGxpbmUtYnJva2VuIGxpbmsuCisKK09u
IHN1Y2Nlc3MsIHlvdSB3aWxsIHNlZSBhIHNlcmllcyBvZiAiUEFTUyIgbWVzc2FnZXMsIGZvbGxv
d2VkIGJ5ICJURVNUIENPTVBMRVRFIi4KKworCitUZXN0IHNvbWUgZGlyZWN0IGhpdHMKK1BBU1Mg
YWRqdXN0ZWROb2RlLmlkIGlzICIxIgorUEFTUyBhZGp1c3RlZE5vZGUuaWQgaXMgIjIiCitQQVNT
IGFkanVzdGVkTm9kZS5pZCBpcyAiNCIKK1BBU1MgYWRqdXN0ZWROb2RlLmlkIGlzICI2IgorVGVz
dCBhIGZldyBkaXJlY3QgbWlzc2VzCitQQVNTIGFkanVzdGVkTm9kZS5pZCBpcyAiIgorUEFTUyBh
ZGp1c3RlZE5vZGUuaWQgaXMgIiIKK1Rlc3Qgc29tZSBpbi1kaXJlY3QgaGl0cworUEFTUyBhZGp1
c3RlZE5vZGUuaWQgaXMgIjIiCitQQVNTIGFkanVzdGVkTm9kZS5pZCBpcyAiMyIKK1BBU1MgYWRq
dXN0ZWROb2RlLmlkIGlzICI0IgorUEFTUyBhZGp1c3RlZE5vZGUuaWQgaXMgIjQiCitQQVNTIGFk
anVzdGVkTm9kZS5pZCBpcyAiNiIKK1BBU1Mgc3VjY2Vzc2Z1bGx5UGFyc2VkIGlzIHRydWUKKwor
VEVTVCBDT01QTEVURQorCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy90b3VjaGFkanVzdG1lbnQv
dG91Y2gtaW5saW5lcy5odG1sIGIvTGF5b3V0VGVzdHMvdG91Y2hhZGp1c3RtZW50L3RvdWNoLWlu
bGluZXMuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44ZGMxZjc0Ci0t
LSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvdG91Y2hhZGp1c3RtZW50L3RvdWNoLWlubGlu
ZXMuaHRtbApAQCAtMCwwICsxLDk5IEBACis8aHRtbD4KKzxoZWFkPgorICAgIDxzY3JpcHQgc3Jj
PSIuLi9mYXN0L2pzL3Jlc291cmNlcy9qcy10ZXN0LXByZS5qcyI+PC9zY3JpcHQ+Cis8L2hlYWQ+
Cis8Ym9keSBvbmxvYWQ9InJ1blRlc3RzKCkiPgorCis8cCBzdHlsZT0id2lkdGg6IDEwZW07Ij4K
KzxhIGlkPSIxIiBocmVmPSIjMSI+c29tZSBsaW5rPC9hPjxicj4KKzxhIGlkPSIyIiBocmVmPSIj
MiI+c29tZSBsaW5rIGJyZWFraW5nIGxpbmVzPC9hPiBhbmQgPGEgaWQ9IjMiIGhyZWY9IiMzIj5s
aW5rPC9hPjxicj4KK2hvbGEgbXVuZG8hIDxhIGlkPSI0IiBocmVmPSIjNCI+YSBzcGxpdCB1cCBs
aW5rPC9hPjxicj4KK2hlbGxvIHdvcmxkIDxhIGlkPSI1IiBocmVmPSIjNSI+c29tZSBsaW5rIGFs
c28gYnJlYWtpbmc8L2E+PGJyPgoraGkgdGhlcmUgPGEgaWQ9IjYiIGhyZWY9IiM2Ij5zb21lIGxp
bmsgdGhhdCBpcyBicmVha2luZyBtdWx0aXBsZSBsaW5lcyBqdXN0IGZvciB0aGUgdmVyeSBmdW4g
b2YgaXQ8L2E+PGJyPjxicj4KKzwvcD4KKworCis8cCBpZD0nZGVzY3JpcHRpb24nPjwvcD4KKzxk
aXYgaWQ9J2NvbnNvbGUnPjwvZGl2PgorCis8c2NyaXB0PgorICAgIHZhciBlbGVtZW50OworICAg
IHZhciBhZGp1c3RlZE5vZGU7CisgICAgZnVuY3Rpb24gdGVzdFJvdW5kVG91Y2goeCwgeSwgcikK
KyAgICB7CisgICAgICAgIHZhciB4ID0geCAtIHI7CisgICAgICAgIHZhciB5ID0geSAtIHI7Cisg
ICAgICAgIHZhciB3ID0gciAqIDI7CisgICAgICAgIHZhciBoID0gciAqIDI7CisgICAgICAgIHZh
ciBhZGp1c3RlZE5vZGUgPSBpbnRlcm5hbHMudG91Y2hOb2RlQWRqdXN0ZWRUb0Jlc3RDbGlja2Fi
bGVOb2RlKHgsIHksIHcsIGgsIGRvY3VtZW50KTsKKyAgICAgICAgaWYgKGFkanVzdGVkTm9kZS5u
b2RlVHlwZSA9PSAzKSAvLyBURVhUIG5vZGUKKyAgICAgICAgICAgIGFkanVzdGVkTm9kZSA9IGFk
anVzdGVkTm9kZS5wYXJlbnROb2RlOworICAgICAgICByZXR1cm4gYWRqdXN0ZWROb2RlOworICAg
IH0KKworICAgIGZ1bmN0aW9uIHRlc3REaXJlY3RUb3VjaGVzKCkKKyAgICB7CisgICAgICAgIGRl
YnVnKCdUZXN0IHNvbWUgZGlyZWN0IGhpdHMnKTsKKworICAgICAgICBhZGp1c3RlZE5vZGUgPSB0
ZXN0Um91bmRUb3VjaCgzMCwgMjAsIDgpCisgICAgICAgIHNob3VsZEJlRXF1YWxUb1N0cmluZygn
YWRqdXN0ZWROb2RlLmlkJywgJzEnKTsKKworICAgICAgICBhZGp1c3RlZE5vZGUgPSB0ZXN0Um91
bmRUb3VjaCgzMCwgNjAsIDgpCisgICAgICAgIHNob3VsZEJlRXF1YWxUb1N0cmluZygnYWRqdXN0
ZWROb2RlLmlkJywgJzInKTsKKworICAgICAgICBhZGp1c3RlZE5vZGUgPSB0ZXN0Um91bmRUb3Vj
aCgxMjAsIDgwLCA4KQorICAgICAgICBzaG91bGRCZUVxdWFsVG9TdHJpbmcoJ2FkanVzdGVkTm9k
ZS5pZCcsICc0Jyk7CisKKyAgICAgICAgYWRqdXN0ZWROb2RlID0gdGVzdFJvdW5kVG91Y2goODAs
IDE4MCwgOCkKKyAgICAgICAgc2hvdWxkQmVFcXVhbFRvU3RyaW5nKCdhZGp1c3RlZE5vZGUuaWQn
LCAnNicpOworICAgIH0KKworICAgIGZ1bmN0aW9uIHRlc3REaXJlY3RNaXNzZXMoKQorICAgIHsK
KyAgICAgICAgZGVidWcoJ1Rlc3QgYSBmZXcgZGlyZWN0IG1pc3NlcycpOworCisgICAgICAgIGFk
anVzdGVkTm9kZSA9IHRlc3RSb3VuZFRvdWNoKDU2LCA2MCwgOCkKKyAgICAgICAgc2hvdWxkQmVF
cXVhbFRvU3RyaW5nKCdhZGp1c3RlZE5vZGUuaWQnLCAnJyk7CisKKyAgICAgICAgYWRqdXN0ZWRO
b2RlID0gdGVzdFJvdW5kVG91Y2goMjAsIDE2MCwgNCkKKyAgICAgICAgc2hvdWxkQmVFcXVhbFRv
U3RyaW5nKCdhZGp1c3RlZE5vZGUuaWQnLCAnJyk7CisKKyAgICB9CisKKyAgICBmdW5jdGlvbiB0
ZXN0SW5kaXJlY3RUb3VjaGVzKCkKKyAgICB7CisgICAgICAgIGRlYnVnKCdUZXN0IHNvbWUgaW4t
ZGlyZWN0IGhpdHMnKTsKKworICAgICAgICBhZGp1c3RlZE5vZGUgPSB0ZXN0Um91bmRUb3VjaCg1
NiwgNjAsIDIwKQorICAgICAgICBzaG91bGRCZUVxdWFsVG9TdHJpbmcoJ2FkanVzdGVkTm9kZS5p
ZCcsICcyJyk7CisKKyAgICAgICAgYWRqdXN0ZWROb2RlID0gdGVzdFJvdW5kVG91Y2goODUsIDgw
LCAyMCkKKyAgICAgICAgc2hvdWxkQmVFcXVhbFRvU3RyaW5nKCdhZGp1c3RlZE5vZGUuaWQnLCAn
MycpOworCisgICAgICAgIGFkanVzdGVkTm9kZSA9IHRlc3RSb3VuZFRvdWNoKDEyMCwgNjAsIDIw
KQorICAgICAgICBzaG91bGRCZUVxdWFsVG9TdHJpbmcoJ2FkanVzdGVkTm9kZS5pZCcsICc0Jyk7
CisKKyAgICAgICAgYWRqdXN0ZWROb2RlID0gdGVzdFJvdW5kVG91Y2goNDAsIDEwMCwgMjApCisg
ICAgICAgIHNob3VsZEJlRXF1YWxUb1N0cmluZygnYWRqdXN0ZWROb2RlLmlkJywgJzQnKTsKKwor
ICAgICAgICBhZGp1c3RlZE5vZGUgPSB0ZXN0Um91bmRUb3VjaCgyMCwgMTY1LCAyMCkKKyAgICAg
ICAgc2hvdWxkQmVFcXVhbFRvU3RyaW5nKCdhZGp1c3RlZE5vZGUuaWQnLCAnNicpOworCisgICAg
fQorCisgICAgZnVuY3Rpb24gcnVuVGVzdHMoKQorICAgIHsKKyAgICAgICAgaWYgKHdpbmRvdy5s
YXlvdXRUZXN0Q29udHJvbGxlciAmJiB3aW5kb3cuaW50ZXJuYWxzICYmIGludGVybmFscy50b3Vj
aE5vZGVBZGp1c3RlZFRvQmVzdENsaWNrYWJsZU5vZGUpIHsKKyAgICAgICAgICAgIGRlc2NyaXB0
aW9uKCdUZXN0IHRvdWNoLWFkanVzdG1lbnQgb24gaW5saW5lIGxpbmtzLiBNYWtpbmcgc3VyZSB3
ZSBjYW4gaGl0IG92ZXIgbGluZS1icmVha3MsIGFuZCBjYW4gbWlzcyB3aGVuIHRhcHBpbmcgYmV0
d2VlbiBwYXJ0cyBvZiBhIGxpbmUtYnJva2VuIGxpbmsuJyk7CisgICAgICAgICAgICBsYXlvdXRU
ZXN0Q29udHJvbGxlci5kdW1wQXNUZXh0KCk7CisgICAgICAgICAgICBsYXlvdXRUZXN0Q29udHJv
bGxlci53YWl0VW50aWxEb25lKCk7CisgICAgICAgICAgICB0ZXN0RGlyZWN0VG91Y2hlcygpOwor
ICAgICAgICAgICAgdGVzdERpcmVjdE1pc3NlcygpOworICAgICAgICAgICAgdGVzdEluZGlyZWN0
VG91Y2hlcygpOworICAgICAgICAgICAgaXNTdWNjZXNzZnVsbHlQYXJzZWQoKTsKKyAgICAgICAg
ICAgIGxheW91dFRlc3RDb250cm9sbGVyLm5vdGlmeURvbmUoKTsKKyAgICAgICAgfQorICAgIH0K
Kzwvc2NyaXB0PgorPC9ib2R5PgorPC9odG1sPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCA1NDk4YjFhLi43MzkyZTE3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsODEg
QEAKKzIwMTItMDMtMDIgIEFsbGFuIFNhbmRmZWxkIEplbnNlbiAgPGFsbGFuLmplbnNlbkBub2tp
YS5jb20+CisKKyAgICAgICAgU2VsZWN0IGJlc3QgdGFyZ2V0IGZvciB0YXAgZ2VzdHVyZS4KKyAg
ICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTc4ODAxCisKKyAg
ICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVGhlIG5ldyBBUEkg
aXMgYXZhaWxhYmxlIHRocm91Z2ggRXZlbnRIYW5kbGVyOjpub2RlRm9yVGFwR2VzdHVyZUF0VG91
Y2hQb2ludCwgYnV0CisgICAgICAgIGltcGxlbWVudGF0aW9uIGRldGFpbHMgaGF2ZSBiZWVuIHBs
YWNlZCBpbiBwbGF0Zm9ybS9IaXRUZXN0UmVzdWx0TWV0cmljcy4KKworICAgICAgICBUaGUgZGVm
YXVsdCBoaXQgZGV0ZWN0aW9uIGlzIHBlcmZvcm1lZCBieSBtZWFzdXJpbmcgdGhlIGRpc3RhbmNl
IHRvIHRoZSBjZW50ZXIKKyAgICAgICAgbGluZXMgb2YgdGhlIGFic29sdXRlIHJlY3RzIG9mIHRo
ZSBoaXQgbm9kZXMuIEFic29sdXRlIHJlY3RzIGFyZSB1c2VkIGluc3RlYWQKKyAgICAgICAgb2Yg
Ym91bmRpbmcgcmVjdHMgdG8gbWFrZSBoaXQtZGV0ZWN0aW5nIGFnYWluc3QgbGlua3Mgb3ZlciBs
aW5lIGJyZWFrcy4gRGlzdGFuY2UKKyAgICAgICAgdG8gY2VudGVyIGxpbmUgaXMgdXNlZCB0byBt
YWtlIGl0IGVhc2llciB0byBoaXQgc21hbGwgbGlua3MgbmV4dCB0byBsYXJnZSBsaW5rcy4KKyAg
ICAgICAgRm9yIGxpbmUtcmVjdHMgdGhlIGRpc3RhbmNlIHRvIHRoZSBjZW50ZXItbGluZSBpcyBh
IGJldHRlciBleHByZXNzaW9uIG9mIHRoZSBkaXN0YW5jZQorICAgICAgICB0byBhIHJlY3Rhbmds
ZXMgY2VudGVyIHRoYW4gdGhlIGRpc3RhbmNlIHRvIHRoZSBjZW50ZXItcG9pbnQuCisKKyAgICAg
ICAgVG8gc3VwcG9ydCB0aGUgZGlzdGFuY2UgY2FsY3VsYXRhdGlvbiwgdGhpcyBwYXRjaCBhbHNv
IGltcGxlbWVudCBhIGNvbnNpc3RlbnQgc2V0IG9mCisgICAgICAgIGRpc3RhbmNlIGFuZCBhcmVh
IGZ1bmN0aW9ucyBmb3IgUmVjdCwgUG9pbnQgYW5kIFNpemUgY2xhc3Nlcy4KKworICAgICAgICBU
ZXN0czogdG91Y2hhZGp1c3RtZW50L2V2ZW50LXRyaWdnZXJlZC13aWRnZXRzLmh0bWwKKyAgICAg
ICAgICAgICAgIHRvdWNoYWRqdXN0bWVudC9uZXN0ZWQtdG91Y2guaHRtbAorICAgICAgICAgICAg
ICAgdG91Y2hhZGp1c3RtZW50L3RvdWNoLWlubGluZXMuaHRtbAorCisgICAgICAgICogVGFyZ2V0
LnByaToKKyAgICAgICAgKiBwYWdlL0V2ZW50SGFuZGxlci5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpFdmVudEhhbmRsZXI6OmhhbmRsZUdlc3R1cmVUYXApOgorICAgICAgICAoV2ViQ29yZTo6RXZl
bnRIYW5kbGVyOjpiZXN0Q2xpY2thYmxlTm9kZUZvclRvdWNoUG9pbnQpOgorICAgICAgICAqIHBh
Z2UvRXZlbnRIYW5kbGVyLmg6CisgICAgICAgICogcGFnZS9Ub3VjaEFkanVzdG1lbnQuY3BwOiBB
ZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlRvdWNoQWRqdXN0bWVudDo6SGl0VGVzdFF1YWQ6Okhp
dFRlc3RRdWFkKToKKyAgICAgICAgKFdlYkNvcmU6OlRvdWNoQWRqdXN0bWVudDo6SGl0VGVzdFF1
YWQ6Om5vZGUpOgorICAgICAgICAoV2ViQ29yZTo6VG91Y2hBZGp1c3RtZW50OjpIaXRUZXN0UXVh
ZDo6cXVhZCk6CisgICAgICAgIChXZWJDb3JlOjpUb3VjaEFkanVzdG1lbnQ6OkhpdFRlc3RRdWFk
Ojpib3VuZGluZ0JveCk6CisgICAgICAgIChXZWJDb3JlOjpUb3VjaEFkanVzdG1lbnQ6Om5vZGVS
ZXNwb25kc1RvVGFwR2VzdHVyZSk6CisgICAgICAgIChXZWJDb3JlOjpUb3VjaEFkanVzdG1lbnQ6
OmFwcGVuZEFic29sdXRlUXVhZHNGb3JOb2RlVG9IaXRMaXN0KToKKyAgICAgICAgKFdlYkNvcmU6
OlRvdWNoQWRqdXN0bWVudDo6Y29tcGlsZUhpdExpc3QpOgorICAgICAgICAoV2ViQ29yZTo6VG91
Y2hBZGp1c3RtZW50OjpkaXN0YW5jZVRvSGl0VGVzdFF1YWQpOgorICAgICAgICAoV2ViQ29yZTo6
VG91Y2hBZGp1c3RtZW50OjppbnRlcnNlY3Rpb25XaXRoSGl0VGVzdFF1YWQpOgorICAgICAgICAo
V2ViQ29yZTo6VG91Y2hBZGp1c3RtZW50OjpmaW5kTm9kZVdpdGhMb3dlc3RNZXRyaWMpOgorICAg
ICAgICAoV2ViQ29yZTo6VG91Y2hBZGp1c3RtZW50OjpmaW5kTm9kZVdpdGhIaWdoZXN0TWV0cmlj
KToKKyAgICAgICAgKFdlYkNvcmU6OmZpbmRCZXN0Q2FuZGlkYXRlRm9yR2VzdHVyZVRhcCk6Cisg
ICAgICAgICogcGFnZS9Ub3VjaEFkanVzdG1lbnQuaDogQWRkZWQuCisgICAgICAgICogcGxhdGZv
cm0vZ3JhcGhpY3MvRmxvYXRQb2ludC5oOgorICAgICAgICAoV2ViQ29yZTo6RmxvYXRQb2ludDo6
RmxvYXRQb2ludCk6CisgICAgICAgIChXZWJDb3JlOjpGbG9hdFBvaW50OjpkaXN0YW5jZVRvUG9p
bnQpOgorICAgICAgICAoV2ViQ29yZTo6RmxvYXRQb2ludDo6ZGlzdGFuY2VTcXVhcmVkVG9Qb2lu
dCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvRmxvYXRRdWFkLmg6CisgICAgICAgIChX
ZWJDb3JlOjpGbG9hdFF1YWQ6OmNlbnRlcik6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mv
RmxvYXRSZWN0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmRpc3RhbmNlVG9JbnRlcnZhbCk6Cisg
ICAgICAgIChXZWJDb3JlOjpGbG9hdFJlY3Q6OmRpZmZlcmVuY2VUb1BvaW50KToKKyAgICAgICAg
KFdlYkNvcmU6OkZsb2F0UmVjdDo6ZGlzdGFuY2VUb1BvaW50KToKKyAgICAgICAgKFdlYkNvcmU6
OkZsb2F0UmVjdDo6ZGlmZmVyZW5jZUZyb21DZW50ZXJMaW5lVG9Qb2ludCk6CisgICAgICAgICog
cGxhdGZvcm0vZ3JhcGhpY3MvRmxvYXRSZWN0Lmg6CisgICAgICAgIChXZWJDb3JlOjpGbG9hdFJl
Y3Q6OmRpc3RhbmNlU3F1YXJlZFRvUG9pbnQpOgorICAgICAgICAoV2ViQ29yZTo6RmxvYXRSZWN0
OjpkaXN0YW5jZVNxdWFyZWRGcm9tQ2VudGVyTGluZVRvUG9pbnQpOgorICAgICAgICAqIHBsYXRm
b3JtL2dyYXBoaWNzL0Zsb2F0U2l6ZS5oOgorICAgICAgICAoV2ViQ29yZTo6RmxvYXRTaXplOjph
cmVhKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9JbnRQb2ludC5oOgorICAgICAgICAo
V2ViQ29yZTo6SW50UG9pbnQ6Omxlbmd0aFNxdWFyZWQpOgorICAgICAgICAoV2ViQ29yZTo6SW50
UG9pbnQ6OmRpc3RhbmNlU3F1YXJlZFRvUG9pbnQpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBo
aWNzL0ludFJlY3QuY3BwOgorICAgICAgICAoV2ViQ29yZTo6ZGlzdGFuY2VUb0ludGVydmFsKToK
KyAgICAgICAgKFdlYkNvcmU6OkludFJlY3Q6OmRpZmZlcmVuY2VUb1BvaW50KToKKyAgICAgICAg
KFdlYkNvcmU6OkludFJlY3Q6OmRpZmZlcmVuY2VGcm9tQ2VudGVyTGluZVRvUG9pbnQpOgorICAg
ICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0ludFJlY3QuaDoKKyAgICAgICAgKFdlYkNvcmU6Oklu
dFJlY3Q6OmRpc3RhbmNlU3F1YXJlZFRvUG9pbnQpOgorICAgICAgICAoV2ViQ29yZTo6SW50UmVj
dDo6ZGlzdGFuY2VTcXVhcmVkRnJvbUNlbnRlckxpbmVUb1BvaW50KToKKyAgICAgICAgKiBwbGF0
Zm9ybS9ncmFwaGljcy9JbnRTaXplLmg6CisgICAgICAgIChXZWJDb3JlOjpJbnRTaXplOjphcmVh
KToKKyAgICAgICAgKFdlYkNvcmU6OkludFNpemU6OmRpYWdvbmFsTGVuZ3RoU3F1YXJlZCk6Cisg
ICAgICAgICogdGVzdGluZy9JbnRlcm5hbHMuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SW50ZXJu
YWxzOjp0b3VjaFBvc2l0aW9uQWRqdXN0ZWRUb0Jlc3RDbGlja2FibGVOb2RlKToKKyAgICAgICAg
KFdlYkNvcmU6OkludGVybmFsczo6dG91Y2hOb2RlQWRqdXN0ZWRUb0Jlc3RDbGlja2FibGVOb2Rl
KToKKyAgICAgICAgKiB0ZXN0aW5nL0ludGVybmFscy5oOgorICAgICAgICAqIHRlc3RpbmcvSW50
ZXJuYWxzLmlkbDoKKwogMjAxMi0wMy0wMSAgQWxleGFuZGVyIFBhdmxvdiAgPGFwYXZsb3ZAY2hy
b21pdW0ub3JnPgogCiAgICAgICAgIFdlYiBJbnNwZWN0b3I6IEltcGxlbWVudCBzdWdnZXN0aW9u
cyBpbiBXYXRjaCBFeHByZXNzaW9ucwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvVGFyZ2V0
LnByaSBiL1NvdXJjZS9XZWJDb3JlL1RhcmdldC5wcmkKaW5kZXggY2RlMmNhNC4uMjNkZWU0NSAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvVGFyZ2V0LnByaQorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9UYXJnZXQucHJpCkBAIC0xMDI2LDYgKzEwMjYsNyBAQCBTT1VSQ0VTICs9IFwKICAgICBwYWdl
L1NlY3VyaXR5UG9saWN5LmNwcCBcCiAgICAgcGFnZS9TZXR0aW5ncy5jcHAgXAogICAgIHBhZ2Uv
U3BhdGlhbE5hdmlnYXRpb24uY3BwIFwKKyAgICBwYWdlL1RvdWNoQWRqdXN0bWVudC5jcHAgXAog
ICAgIHBhZ2UvU3VzcGVuZGFibGVUaW1lci5jcHAgXAogICAgIHBhZ2UvVXNlckNvbnRlbnRVUkxQ
YXR0ZXJuLmNwcCBcCiAgICAgcGFnZS9XaW5kb3dGZWF0dXJlcy5jcHAgXApAQCAtMjEwMCw2ICsy
MTAxLDcgQEAgSEVBREVSUyArPSBcCiAgICAgcGFnZS9TcGVlY2hJbnB1dExpc3RlbmVyLmggXAog
ICAgIHBhZ2UvU3BlZWNoSW5wdXRSZXN1bHQuaCBcCiAgICAgcGFnZS9TcGVlY2hJbnB1dFJlc3Vs
dExpc3QuaCBcCisgICAgcGFnZS9Ub3VjaEFkanVzdG1lbnQuaCBcCiAgICAgcGFnZS9XZWJLaXRB
bmltYXRpb24uaCBcCiAgICAgcGFnZS9XZWJLaXRBbmltYXRpb25MaXN0LmggXAogICAgIHBhZ2Uv
V2luZG93RmVhdHVyZXMuaCBcCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL0V2ZW50
SGFuZGxlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL0V2ZW50SGFuZGxlci5jcHAKaW5kZXgg
ZjEwZTRhYi4uMTM4OTY0MCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGFnZS9FdmVudEhh
bmRsZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRXZlbnRIYW5kbGVyLmNwcApAQCAt
NzMsNiArNzMsNyBAQAogI2luY2x1ZGUgIlNjcm9sbGJhci5oIgogI2luY2x1ZGUgIlNldHRpbmdz
LmgiCiAjaW5jbHVkZSAiU3BhdGlhbE5hdmlnYXRpb24uaCIKKyNpbmNsdWRlICJTdGF0aWNIYXNo
U2V0Tm9kZUxpc3QuaCIKICNpbmNsdWRlICJTdHlsZUNhY2hlZEltYWdlLmgiCiAjaW5jbHVkZSAi
VGV4dEV2ZW50LmgiCiAjaW5jbHVkZSAiVGV4dEl0ZXJhdG9yLmgiCkBAIC04OCw2ICs4OSwxMCBA
QAogI2luY2x1ZGUgIlBsYXRmb3JtR2VzdHVyZUV2ZW50LmgiCiAjZW5kaWYKIAorI2lmIEVOQUJM
RShUT1VDSF9BREpVU1RNRU5UKQorI2luY2x1ZGUgIlRvdWNoQWRqdXN0bWVudC5oIgorI2VuZGlm
CisKICNpZiBFTkFCTEUoU1ZHKQogI2luY2x1ZGUgIlNWR0RvY3VtZW50LmgiCiAjaW5jbHVkZSAi
U1ZHRWxlbWVudEluc3RhbmNlLmgiCkBAIC0yMzg2LDEyICsyMzkxLDIzIEBAIGJvb2wgRXZlbnRI
YW5kbGVyOjpoYW5kbGVHZXN0dXJlRXZlbnQoY29uc3QgUGxhdGZvcm1HZXN0dXJlRXZlbnQmIGdl
c3R1cmVFdmVudCkKIAogYm9vbCBFdmVudEhhbmRsZXI6OmhhbmRsZUdlc3R1cmVUYXAoY29uc3Qg
UGxhdGZvcm1HZXN0dXJlRXZlbnQmIGdlc3R1cmVFdmVudCkKIHsKKyAgICBMYXlvdXRQb2ludCBh
ZGp1c3RlZFBvaW50ID0gZ2VzdHVyZUV2ZW50LnBvc2l0aW9uKCk7CisjaWYgRU5BQkxFKFRPVUNI
X0FESlVTVE1FTlQpCisgICAgaWYgKCFnZXN0dXJlRXZlbnQuYXJlYSgpLmlzRW1wdHkoKSkgewor
ICAgICAgICBOb2RlKiB0YXJnZXROb2RlID0gMDsKKyAgICAgICAgLy8gRm9yIG5vdyB3ZSB1c2Ug
dGhlIGFkanVzdGVkIHBvc2l0aW9uIHRvIGVuc3VyZSB0aGUgbGF0ZXIgcmVkdW5kYW50IGhpdC10
ZXN0cyBoaXRzIHRoZSByaWdodCBub2RlLgorICAgICAgICBiZXN0Q2xpY2thYmxlTm9kZUZvclRv
dWNoUG9pbnQoZ2VzdHVyZUV2ZW50LnBvc2l0aW9uKCksIEludFNpemUoZ2VzdHVyZUV2ZW50LmFy
ZWEoKS53aWR0aCgpIC8gMiwgZ2VzdHVyZUV2ZW50LmFyZWEoKS5oZWlnaHQoKSAvIDIpLCBhZGp1
c3RlZFBvaW50LCB0YXJnZXROb2RlKTsKKyAgICAgICAgaWYgKCF0YXJnZXROb2RlKQorICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKyNlbmRpZgorCiAgICAgLy8gRklYTUU6IFJlZmFj
dG9yIHRoaXMgY29kZSB0byBub3QgaGl0IHRlc3QgbXVsdGlwbGUgdGltZXMgb25jZSBoaXQgdGVz
dGluZwogICAgIC8vIGhhcyBiZWVuIGNvcnJlY3RlZCBhcyBzdWdnZXN0ZWQgYWJvdmUgaW4gaGFu
ZGxlR2VzdHVyZUV2ZW50KCkuCiAgICAgYm9vbCBkZWZhdWx0UHJldmVudGVkID0gZmFsc2U7Ci0g
ICAgUGxhdGZvcm1Nb3VzZUV2ZW50IGZha2VNb3VzZU1vdmUoZ2VzdHVyZUV2ZW50LnBvc2l0aW9u
KCksIGdlc3R1cmVFdmVudC5nbG9iYWxQb3NpdGlvbigpLCBOb0J1dHRvbiwgUGxhdGZvcm1FdmVu
dDo6TW91c2VNb3ZlZCwgLyogY2xpY2tDb3VudCAqLyAxLCBnZXN0dXJlRXZlbnQuc2hpZnRLZXko
KSwgZ2VzdHVyZUV2ZW50LmN0cmxLZXkoKSwgZ2VzdHVyZUV2ZW50LmFsdEtleSgpLCBnZXN0dXJl
RXZlbnQubWV0YUtleSgpLCBnZXN0dXJlRXZlbnQudGltZXN0YW1wKCkpOwotICAgIFBsYXRmb3Jt
TW91c2VFdmVudCBmYWtlTW91c2VEb3duKGdlc3R1cmVFdmVudC5wb3NpdGlvbigpLCBnZXN0dXJl
RXZlbnQuZ2xvYmFsUG9zaXRpb24oKSwgTGVmdEJ1dHRvbiwgUGxhdGZvcm1FdmVudDo6TW91c2VQ
cmVzc2VkLCAvKiBjbGlja0NvdW50ICovIDEsIGdlc3R1cmVFdmVudC5zaGlmdEtleSgpLCBnZXN0
dXJlRXZlbnQuY3RybEtleSgpLCBnZXN0dXJlRXZlbnQuYWx0S2V5KCksIGdlc3R1cmVFdmVudC5t
ZXRhS2V5KCksIGdlc3R1cmVFdmVudC50aW1lc3RhbXAoKSk7Ci0gICAgUGxhdGZvcm1Nb3VzZUV2
ZW50IGZha2VNb3VzZVVwKGdlc3R1cmVFdmVudC5wb3NpdGlvbigpLCBnZXN0dXJlRXZlbnQuZ2xv
YmFsUG9zaXRpb24oKSwgTGVmdEJ1dHRvbiwgUGxhdGZvcm1FdmVudDo6TW91c2VSZWxlYXNlZCwg
LyogY2xpY2tDb3VudCAqLyAxLCBnZXN0dXJlRXZlbnQuc2hpZnRLZXkoKSwgZ2VzdHVyZUV2ZW50
LmN0cmxLZXkoKSwgZ2VzdHVyZUV2ZW50LmFsdEtleSgpLCBnZXN0dXJlRXZlbnQubWV0YUtleSgp
LCBnZXN0dXJlRXZlbnQudGltZXN0YW1wKCkpOworICAgIFBsYXRmb3JtTW91c2VFdmVudCBmYWtl
TW91c2VNb3ZlKGFkanVzdGVkUG9pbnQsIGdlc3R1cmVFdmVudC5nbG9iYWxQb3NpdGlvbigpLCBO
b0J1dHRvbiwgUGxhdGZvcm1FdmVudDo6TW91c2VNb3ZlZCwgLyogY2xpY2tDb3VudCAqLyAxLCBn
ZXN0dXJlRXZlbnQuc2hpZnRLZXkoKSwgZ2VzdHVyZUV2ZW50LmN0cmxLZXkoKSwgZ2VzdHVyZUV2
ZW50LmFsdEtleSgpLCBnZXN0dXJlRXZlbnQubWV0YUtleSgpLCBnZXN0dXJlRXZlbnQudGltZXN0
YW1wKCkpOworICAgIFBsYXRmb3JtTW91c2VFdmVudCBmYWtlTW91c2VEb3duKGFkanVzdGVkUG9p
bnQsIGdlc3R1cmVFdmVudC5nbG9iYWxQb3NpdGlvbigpLCBMZWZ0QnV0dG9uLCBQbGF0Zm9ybUV2
ZW50OjpNb3VzZVByZXNzZWQsIC8qIGNsaWNrQ291bnQgKi8gMSwgZ2VzdHVyZUV2ZW50LnNoaWZ0
S2V5KCksIGdlc3R1cmVFdmVudC5jdHJsS2V5KCksIGdlc3R1cmVFdmVudC5hbHRLZXkoKSwgZ2Vz
dHVyZUV2ZW50Lm1ldGFLZXkoKSwgZ2VzdHVyZUV2ZW50LnRpbWVzdGFtcCgpKTsKKyAgICBQbGF0
Zm9ybU1vdXNlRXZlbnQgZmFrZU1vdXNlVXAoYWRqdXN0ZWRQb2ludCwgZ2VzdHVyZUV2ZW50Lmds
b2JhbFBvc2l0aW9uKCksIExlZnRCdXR0b24sIFBsYXRmb3JtRXZlbnQ6Ok1vdXNlUmVsZWFzZWQs
IC8qIGNsaWNrQ291bnQgKi8gMSwgZ2VzdHVyZUV2ZW50LnNoaWZ0S2V5KCksIGdlc3R1cmVFdmVu
dC5jdHJsS2V5KCksIGdlc3R1cmVFdmVudC5hbHRLZXkoKSwgZ2VzdHVyZUV2ZW50Lm1ldGFLZXko
KSwgZ2VzdHVyZUV2ZW50LnRpbWVzdGFtcCgpKTsKICAgICBtb3VzZU1vdmVkKGZha2VNb3VzZU1v
dmUpOwogICAgIGRlZmF1bHRQcmV2ZW50ZWQgfD0gaGFuZGxlTW91c2VQcmVzc0V2ZW50KGZha2VN
b3VzZURvd24pOwogICAgIGRlZmF1bHRQcmV2ZW50ZWQgfD0gaGFuZGxlTW91c2VSZWxlYXNlRXZl
bnQoZmFrZU1vdXNlVXApOwpAQCAtMjQxMSw2ICsyNDI3LDI0IEBAIGJvb2wgRXZlbnRIYW5kbGVy
OjpoYW5kbGVHZXN0dXJlU2Nyb2xsVXBkYXRlKGNvbnN0IFBsYXRmb3JtR2VzdHVyZUV2ZW50JiBn
ZXN0dXJlCiB9CiAjZW5kaWYKIAorI2lmIEVOQUJMRShUT1VDSF9BREpVU1RNRU5UKQordm9pZCBF
dmVudEhhbmRsZXI6OmJlc3RDbGlja2FibGVOb2RlRm9yVG91Y2hQb2ludChjb25zdCBJbnRQb2lu
dCYgdG91Y2hDZW50ZXIsIGNvbnN0IEludFNpemUmIHRvdWNoUmFkaXVzLCBJbnRQb2ludCYgdGFy
Z2V0UG9pbnQsIE5vZGUqJiB0YXJnZXROb2RlKQoreworICAgIEhpdFRlc3RSZXF1ZXN0OjpIaXRU
ZXN0UmVxdWVzdFR5cGUgaGl0VHlwZSA9IEhpdFRlc3RSZXF1ZXN0OjpSZWFkT25seSB8IEhpdFRl
c3RSZXF1ZXN0OjpBY3RpdmU7CisgICAgSW50UmVjdCB0b3VjaFJlY3QodG91Y2hDZW50ZXIgLSB0
b3VjaFJhZGl1cywgSW50U2l6ZSh0b3VjaFJhZGl1cy53aWR0aCgpICogMiwgdG91Y2hSYWRpdXMu
aGVpZ2h0KCkgKiAyKSk7CisgICAgdGFyZ2V0Tm9kZSA9IDA7CisKKyAgICBIaXRUZXN0UmVzdWx0
IHJlc3VsdCA9IGhpdFRlc3RSZXN1bHRBdFBvaW50KHRvdWNoQ2VudGVyLCAvKmFsbG93U2hhZG93
Q29udGVudCovIGZhbHNlLCAvKmlnbm9yZUNsaXBwaW5nKi8gZmFsc2UsIERvbnRIaXRUZXN0U2Ny
b2xsYmFycywgaGl0VHlwZSwgdG91Y2hSYWRpdXMpOworCisgICAgUmVmUHRyPFN0YXRpY0hhc2hT
ZXROb2RlTGlzdD4gbm9kZUxpc3QgPSBTdGF0aWNIYXNoU2V0Tm9kZUxpc3Q6OmFkb3B0KHJlc3Vs
dC5yZWN0QmFzZWRUZXN0UmVzdWx0KCkpOworICAgIGlmICghZmluZEJlc3RDbGlja2FibGVDYW5k
aWRhdGUodGFyZ2V0Tm9kZSwgdGFyZ2V0UG9pbnQsIHRvdWNoQ2VudGVyLCB0b3VjaFJlY3QsICpu
b2RlTGlzdC5nZXQoKSkpIHsKKyAgICAgICAgLy8gRGVmYXVsdCB0byBqdXN0IHJldHVybmluZyBp
bm5lck5vblNoYXJlZE5vZGUuCisgICAgICAgIHRhcmdldFBvaW50ID0gdG91Y2hDZW50ZXI7Cisg
ICAgICAgIHRhcmdldE5vZGUgPSByZXN1bHQuaW5uZXJOb25TaGFyZWROb2RlKCk7CisgICAgfQor
fQorI2VuZGlmCisKICNpZiBFTkFCTEUoQ09OVEVYVF9NRU5VUykKIGJvb2wgRXZlbnRIYW5kbGVy
OjpzZW5kQ29udGV4dE1lbnVFdmVudChjb25zdCBQbGF0Zm9ybU1vdXNlRXZlbnQmIGV2ZW50KQog
ewpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGFnZS9FdmVudEhhbmRsZXIuaCBiL1NvdXJj
ZS9XZWJDb3JlL3BhZ2UvRXZlbnRIYW5kbGVyLmgKaW5kZXggMDk4MWU0MS4uNDU5ZDI2OSAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGFnZS9FdmVudEhhbmRsZXIuaAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9wYWdlL0V2ZW50SGFuZGxlci5oCkBAIC0xNjYsNiArMTY2LDEwIEBAIHB1YmxpYzoK
ICAgICBib29sIGhhbmRsZUdlc3R1cmVTY3JvbGxVcGRhdGUoY29uc3QgUGxhdGZvcm1HZXN0dXJl
RXZlbnQmKTsKICNlbmRpZgogCisjaWYgRU5BQkxFKFRPVUNIX0FESlVTVE1FTlQpCisgICAgdm9p
ZCBiZXN0Q2xpY2thYmxlTm9kZUZvclRvdWNoUG9pbnQoY29uc3QgSW50UG9pbnQmIHRvdWNoQ2Vu
dGVyLCBjb25zdCBJbnRTaXplJiB0b3VjaFJhZGl1cywgSW50UG9pbnQmIHRhcmdldFBvaW50LCBO
b2RlKiYgdGFyZ2V0Tm9kZSk7CisjZW5kaWYKKwogI2lmIEVOQUJMRShDT05URVhUX01FTlVTKQog
ICAgIGJvb2wgc2VuZENvbnRleHRNZW51RXZlbnQoY29uc3QgUGxhdGZvcm1Nb3VzZUV2ZW50Jik7
CiAgICAgYm9vbCBzZW5kQ29udGV4dE1lbnVFdmVudEZvcktleSgpOwpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcGFnZS9Ub3VjaEFkanVzdG1lbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvcGFn
ZS9Ub3VjaEFkanVzdG1lbnQuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAu
LjJjYjVmZGYKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL1RvdWNoQWRq
dXN0bWVudC5jcHAKQEAgLTAsMCArMSwyMzMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIg
Tm9raWEgQ29ycG9yYXRpb24gYW5kL29yIGl0cyBzdWJzaWRpYXJ5KC1pZXMpCisgKgorICogVGhp
cyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9v
cgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJh
bCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZv
dW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91
ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0
cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhP
VVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAq
IE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNl
ZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0
YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUg
TGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFy
eTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZy
ZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBG
bG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpbmNsdWRlICJj
b25maWcuaCIKKworI2luY2x1ZGUgIlRvdWNoQWRqdXN0bWVudC5oIgorCisjaW5jbHVkZSAiQ29u
dGFpbmVyTm9kZS5oIgorI2luY2x1ZGUgIkZsb2F0UG9pbnQuaCIKKyNpbmNsdWRlICJGbG9hdFF1
YWQuaCIKKyNpbmNsdWRlICJIVE1MTGFiZWxFbGVtZW50LmgiCisjaW5jbHVkZSAiSFRNTE5hbWVz
LmgiCisjaW5jbHVkZSAiSW50UG9pbnQuaCIKKyNpbmNsdWRlICJJbnRTaXplLmgiCisjaW5jbHVk
ZSAiTm9kZS5oIgorI2luY2x1ZGUgIlJlbmRlckJveC5oIgorI2luY2x1ZGUgIlJlbmRlck9iamVj
dC5oIgorI2luY2x1ZGUgIlJlbmRlclN0eWxlLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKwor
bmFtZXNwYWNlIFRvdWNoQWRqdXN0bWVudCB7CisKK2NsYXNzIEhpdFRlc3RRdWFkIHsKK3B1Ymxp
YzoKKyAgICBIaXRUZXN0UXVhZChOb2RlKiBub2RlLCBjb25zdCBGbG9hdFF1YWQmIHF1YWQpIDog
bV9ub2RlKG5vZGUpLCBtX3F1YWQocXVhZCkgeyB9CisKKyAgICBOb2RlKiBub2RlKCkgY29uc3Qg
eyByZXR1cm4gbV9ub2RlOyB9CisgICAgRmxvYXRRdWFkIHF1YWQoKSBjb25zdCB7IHJldHVybiBt
X3F1YWQ7IH0KKyAgICBMYXlvdXRSZWN0IGJvdW5kaW5nQm94KCkgY29uc3QgeyByZXR1cm4gbV9x
dWFkLmVuY2xvc2luZ0JvdW5kaW5nQm94KCk7IH0KKworcHJpdmF0ZToKKyAgICBOb2RlKiBtX25v
ZGU7CisgICAgRmxvYXRRdWFkIG1fcXVhZDsKK307CisKK3R5cGVkZWYgVmVjdG9yPEhpdFRlc3RR
dWFkPiBIaXRMaXN0OwordHlwZWRlZiBib29sICgqTm9kZUZpbHRlcikoTm9kZSopOwordHlwZWRl
ZiBmbG9hdCAoKk1ldHJpYykoY29uc3QgTGF5b3V0UG9pbnQmLCBjb25zdCBMYXlvdXRSZWN0Jiwg
Y29uc3QgSGl0VGVzdFF1YWQmKTsKKworLy8gVGFrZXMgbm9uLWNvbnN0IE5vZGUqIGJlY2F1c2Ug
aXNDb250ZW50RWRpdGFibGUgaXMgYSBub24tY29uc3QgZnVuY3Rpb24uCitib29sIG5vZGVSZXNw
b25kc1RvVGFwR2VzdHVyZShOb2RlKiBub2RlKQoreworICAgIGlmIChub2RlLT5pc0xpbmsoKQor
ICAgICAgICB8fCBub2RlLT5pc0NvbnRlbnRFZGl0YWJsZSgpCisgICAgICAgIHx8IG5vZGUtPmlz
TW91c2VGb2N1c2FibGUoKSkKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgaWYgKG5vZGUtPmlz
RWxlbWVudE5vZGUoKSkgeworICAgICAgICBFbGVtZW50KiBlbGVtZW50ID0gIHN0YXRpY19jYXN0
PEVsZW1lbnQqPihub2RlKTsKKyAgICAgICAgaWYgKGVsZW1lbnQtPmhhc1RhZ05hbWUoSFRNTE5h
bWVzOjpsYWJlbFRhZykgJiYgc3RhdGljX2Nhc3Q8SFRNTExhYmVsRWxlbWVudCo+KGVsZW1lbnQp
LT5jb250cm9sKCkpCisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAgLy8gRklY
TUU6IEltcGxlbWVudCBoYXNEZWZhdWx0RXZlbnRIYW5kbGVyIGFuZCB1c2UgdGhhdCBpbnN0ZWFk
IG9mIGFsbCBvZiB0aGUgYWJvdmUgY2hlY2tzLgorICAgIGlmIChub2RlLT5oYXNFdmVudExpc3Rl
bmVycygpCisgICAgICAgICYmIChub2RlLT5oYXNFdmVudExpc3RlbmVycyhldmVudE5hbWVzKCku
Y2xpY2tFdmVudCkKKyAgICAgICAgICAgIHx8IG5vZGUtPmhhc0V2ZW50TGlzdGVuZXJzKGV2ZW50
TmFtZXMoKS5ET01BY3RpdmF0ZUV2ZW50KQorICAgICAgICAgICAgfHwgbm9kZS0+aGFzRXZlbnRM
aXN0ZW5lcnMoZXZlbnROYW1lcygpLm1vdXNlZG93bkV2ZW50KQorICAgICAgICAgICAgfHwgbm9k
ZS0+aGFzRXZlbnRMaXN0ZW5lcnMoZXZlbnROYW1lcygpLm1vdXNldXBFdmVudCkKKyAgICAgICAg
ICAgIHx8IG5vZGUtPmhhc0V2ZW50TGlzdGVuZXJzKGV2ZW50TmFtZXMoKS5tb3VzZW1vdmVFdmVu
dCkKKyAgICAgICAgICAgIC8vIENoZWNraW5nIGZvciBmb2N1cyBldmVudHMgaXMgbm90IG5lY2Vz
c2FyeSBzaW5jZSB0aGV5IGNhbiBvbmx5IGZpcmUgb24KKyAgICAgICAgICAgIC8vIGZvY3VzYWJs
ZSBlbGVtZW50cyB3aGljaCBoYXZlIGFscmVhZHkgYmVlbiBjYXB0dXJlZCBhYm92ZS4KKyAgICAg
ICAgKSkKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgaWYgKG5vZGUtPnJlbmRlclN0eWxlKCkp
IHsKKyAgICAgICAgLy8gQWNjZXB0IG5vZGVzIHRoYXQgaGFzIGEgQ1NTIGVmZmVjdCB3aGVuIHRv
dWNoZWQuCisgICAgICAgIGlmIChub2RlLT5yZW5kZXJTdHlsZSgpLT5hZmZlY3RlZEJ5QWN0aXZl
UnVsZXMoKSB8fCBub2RlLT5yZW5kZXJTdHlsZSgpLT5hZmZlY3RlZEJ5SG92ZXJSdWxlcygpKQor
ICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorICAgIHJldHVybiBmYWxzZTsKK30KKwor
c3RhdGljIGlubGluZSB2b2lkIGFwcGVuZEFic29sdXRlUXVhZHNGb3JOb2RlVG9IaXRMaXN0KE5v
ZGUqIG5vZGUsIEhpdExpc3QmIGhpdGxpc3QpCit7CisgICAgLy8gU2luY2UgdGhlIG5vZGUgaXMg
YSByZXN1bHQgb2YgYSBoaXQgdGVzdCwgd2UgYXJlIGFscmVhZHkgZW5zdXJlZCBpdCBoYXMgYSBy
ZW5kZXJlci4KKyAgICBBU1NFUlQobm9kZS0+cmVuZGVyZXIoKSk7CisKKyAgICBWZWN0b3I8Rmxv
YXRRdWFkPiBxdWFkczsKKyAgICBub2RlLT5yZW5kZXJlcigpLT5hYnNvbHV0ZVF1YWRzKHF1YWRz
KTsKKworICAgIFZlY3RvcjxGbG9hdFF1YWQ+Ojpjb25zdF9pdGVyYXRvciBpdCA9IHF1YWRzLmJl
Z2luKCk7CisgICAgY29uc3QgVmVjdG9yPEZsb2F0UXVhZD46OmNvbnN0X2l0ZXJhdG9yIGVuZCA9
IHF1YWRzLmVuZCgpOworICAgIGZvciAoOyBpdCAhPSBlbmQ7ICsraXQpCisgICAgICAgIGhpdGxp
c3QuYXBwZW5kKEhpdFRlc3RRdWFkKG5vZGUsICppdCkpOworfQorCisvLyBDb21waWxlIGEgbGlz
dCBvZiBhYnNvbHV0ZSByZWN0cyByZXByZXNlbmRpbmcgbm9kZXMgcmVzcG9uZGluZyB0aGUgdGFw
IGdlc3R1cmUuCit2b2lkIGNvbXBpbGVIaXRMaXN0KGNvbnN0IE5vZGVMaXN0JiBpbnRlcnNlY3Rl
ZE5vZGVzLCBIaXRMaXN0JiBoaXRsaXN0LCBOb2RlRmlsdGVyIG5vZGVGaWx0ZXIpCit7CisgICAg
Ly8gRmluZCBjYW5kaWRhdGVzIHJlc3BvbmRpbmcgdG8gdGFwIGdlc3R1cmUgZXZlbnRzIGluIE8o
bikgdGltZS4KKyAgICBIYXNoTWFwPE5vZGUqLCBOb2RlKj4gcmVzcG9uZGVyTWFwOworICAgIEhh
c2hTZXQ8Tm9kZSo+IGFuY2VzdG9yc1RvUmVzcG9uZGVyc1NldDsKKyAgICBWZWN0b3I8Tm9kZSo+
IGNhbmRpZGF0ZXM7CisKKyAgICBjb25zdCB1bnNpZ25lZCBpbnQgbGVuZ3RoID0gaW50ZXJzZWN0
ZWROb2Rlcy5sZW5ndGgoKTsKKyAgICBmb3IgKHVuc2lnbmVkIGludCBpID0gMDsgaSA8IGxlbmd0
aDsgKytpKSB7CisgICAgICAgIE5vZGUqIG5vZGUgPSBpbnRlcnNlY3RlZE5vZGVzLml0ZW0oaSk7
CisgICAgICAgIGlmIChyZXNwb25kZXJNYXAuY29udGFpbnMobm9kZSkpCisgICAgICAgICAgICAv
LyBTa2lwIG5vZGVzIHRoYXQgYXJlIGRpcmVjdCBhbmNlc3RvcnMgb2Ygb3RoZXIgY2FuZGlkYXRl
cy4gVGhleSB3b3VsZCBoaXQtdGVzdCBhZ2FpbnN0IHRoZSBzYW1lIGFic29sdXRlIHF1YWRzLgor
ICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIFZlY3RvcjxOb2RlKj4gYW5jZXN0b3JzOwor
ICAgICAgICBOb2RlKiByZXNwb25kaW5nTm9kZSA9IDA7CisgICAgICAgIGZvciAoOyBub2RlOyBu
b2RlID0gbm9kZS0+cGFyZW50T3JIb3N0Tm9kZSgpKSB7CisgICAgICAgICAgICAvLyBDaGVjayBp
ZiB3ZSBhbHJlYWR5IGhhdmUgYSByZXN1bHQgZm9yIGEgY29tbW9uIGFuY2VzdG9yIGZyb20gYW5v
dGhlciBjYW5kaWRhdGUuCisgICAgICAgICAgICByZXNwb25kaW5nTm9kZSA9IHJlc3BvbmRlck1h
cC5nZXQobm9kZSk7CisgICAgICAgICAgICBpZiAocmVzcG9uZGluZ05vZGUpCisgICAgICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgICAgICBhbmNlc3RvcnMuYXBwZW5kKG5vZGUpOworICAgICAg
ICAgICAgLy8gQ2hlY2sgaWYgdGhlIG5vZGUgZmlsdGVyIGFwcGxpZXMsIHdoaWNoIHdvdWxkIG1l
YW4gd2UgaGF2ZSBmb3VuZCBhIHJlc3BvbmRpbmcgbm9kZS4KKyAgICAgICAgICAgIGlmIChub2Rl
RmlsdGVyKG5vZGUpKSB7CisgICAgICAgICAgICAgICAgcmVzcG9uZGluZ05vZGUgPSBub2RlOwor
ICAgICAgICAgICAgICAgIC8vIE5vdyB0aGF0IHdlIGhhdmUgdGhlIHJlc3BvbmRlciwgc2V0IHRo
ZSByZXNwb25kZXIgZm9yIGFsbCB0aGUgbm9kZXMgc2VlbiBzbyBmYXIuCisgICAgICAgICAgICAg
ICAgZm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgPCBhbmNlc3RvcnMuc2l6ZSgpOyBpKyspCisg
ICAgICAgICAgICAgICAgICAgIHJlc3BvbmRlck1hcC5hZGQoYW5jZXN0b3JzW2ldLCBub2RlKTsK
KyAgICAgICAgICAgICAgICAvLyBUaGUgY29udGludWUgdGhlIGl0ZXJhdGlvbiB0byBjb2xsZWN0
IHRoZSBhbmNlc3RvcnMgb2YgdGhlIHJlc3BvbmRlci4KKyAgICAgICAgICAgICAgICBmb3IgKG5v
ZGUgPSBub2RlLT5wYXJlbnRPckhvc3ROb2RlKCk7IG5vZGU7IG5vZGUgPSBub2RlLT5wYXJlbnRP
ckhvc3ROb2RlKCkpIHsKKyAgICAgICAgICAgICAgICAgICAgcGFpcjxIYXNoU2V0PE5vZGUqPjo6
aXRlcmF0b3IsIGJvb2w+IHRtcCA9IGFuY2VzdG9yc1RvUmVzcG9uZGVyc1NldC5hZGQobm9kZSk7
CisgICAgICAgICAgICAgICAgICAgIGlmICghdG1wLnNlY29uZCkKKyAgICAgICAgICAgICAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBpZiAocmVzcG9uZGluZ05vZGUpCisg
ICAgICAgICAgICBjYW5kaWRhdGVzLmFwcGVuZChpbnRlcnNlY3RlZE5vZGVzLml0ZW0oaSkpOwor
ICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIC8vIEluc2VydCB0aGUgbm9kZXMgd2l0aCBtaXNz
aW5nIHJlc3BvbmRlcnMgaW50byB0aGUgcmVzcG9uZGVyLW1hcCBmb3IgZmFzdCByZWplY3Rpb24g
b2YgbGF0ZXIgY2FuZGlkYXRlcy4KKyAgICAgICAgICAgIGZvciAodW5zaWduZWQgaW50IGkgPSAw
OyBpIDwgYW5jZXN0b3JzLnNpemUoKTsgaSsrKQorICAgICAgICAgICAgICAgIHJlc3BvbmRlck1h
cC5hZGQoYW5jZXN0b3JzW2ldLCAwKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIC8vIFdlIGNv
bXBpbGUgdGhlIGxpc3Qgb2YgY29tcG9uZW50IGFic29sdXRlIHF1YWRzIGluc3RlYWQgb2YgdXNp
bmcgdGhlIGJvdW5kaW5nIHJlY3QKKyAgICAvLyB0byBiZSBhYmxlIHRvIHBlcmZvcm0gYmV0dGVy
IGhpdC10ZXN0aW5nIG9uIGlubGluZSBsaW5rcyBvbiBsaW5lLWJyZWFrcy4KKyAgICBWZWN0b3I8
Tm9kZSo+Ojpjb25zdF9pdGVyYXRvciBpdDIgPSBjYW5kaWRhdGVzLmJlZ2luKCk7CisgICAgY29u
c3QgVmVjdG9yPE5vZGUqPjo6Y29uc3RfaXRlcmF0b3IgZW5kMiA9IGNhbmRpZGF0ZXMuZW5kKCk7
CisgICAgZm9yICg7IGl0MiAhPSBlbmQyOyArK2l0MikgeworICAgICAgICAvLyBTa2lwIG5vZGVz
IHdob3MgcmVzcG9uZGVycyBhcmUgYW5jZXN0b3JzIG9mIG90aGVyIHJlc3BvbmRlcnMuIFRoaXMg
Z2l2ZXMgcHJlZmVyZW5jZSB0byB0aGUgaW5uZXItbW9zdCBldmVudC1oYW5kbGVycy4KKyAgICAg
ICAgLy8gU28gdGhhdCBhIGxpbmsgaXMgYWx3YXlzIHByZWZlcnJlZCBldmVuIHdoZW4gY29udGFp
bmVkIGluIGFuIGVsZW1lbnQgdGhhdCBtb25pdG9ycyBhbGwgY2xpY2stZXZlbnRzLgorICAgICAg
ICBOb2RlKiByZXNwb25kaW5nTm9kZSA9IHJlc3BvbmRlck1hcC5nZXQoKml0Mik7CisgICAgICAg
IEFTU0VSVChyZXNwb25kaW5nTm9kZSk7CisgICAgICAgIGlmIChhbmNlc3RvcnNUb1Jlc3BvbmRl
cnNTZXQuY29udGFpbnMocmVzcG9uZGluZ05vZGUpKQorICAgICAgICAgICAgY29udGludWU7Cisg
ICAgICAgIGFwcGVuZEFic29sdXRlUXVhZHNGb3JOb2RlVG9IaXRMaXN0KCppdDIsIGhpdGxpc3Qp
OworICAgIH0KK30KKworLy8gUmV0dXJucyB0aGUgZGlzdGFuY2Ugc3F1YXJlZCB0byB0aGUgYm91
bmRpbmcgYm94IGNlbnRlcmxpbmUuCitmbG9hdCBkaXN0YW5jZVRvSGl0VGVzdFF1YWQoY29uc3Qg
TGF5b3V0UG9pbnQmIHRvdWNoSG90c3BvdCwgY29uc3QgTGF5b3V0UmVjdCYsIGNvbnN0IEhpdFRl
c3RRdWFkJiBoaXRUZXN0UXVhZCkKK3sKKyAgICAvLyBVc2luZyB0aGUgYm91bmRpbmcgYm94IG1l
YW5zIHRoZSBkaXN0YW5jZSB0byBjZW50ZXJsaW5lIGlzIGxlc3MgbWVhbmluZ2Z1bCBmb3IgdHJh
bnNmb3JtZWQgcmVjdGFuZ2xlcywKKyAgICAvLyBidXQgY2FsY3VsYXRpbmcgdGhlIGRpc3RhbmNl
IHRvIHF1YWRzIGNhbiBiZSB2ZXJ5IGV4cGVuc2l2ZSwgYW5kIHdlIGRvIG5vdCB3YW50IHRvIGNh
bGN1bGNhdGUKKyAgICAvLyBxdWFkIGJhc2VkIGRpc3RhbmNlcyBmb3IgdW50cmFuc2Zvcm1lZCBy
ZWN0YW5nbGVzLgorICAgIEludFJlY3QgcmVjdCA9IGhpdFRlc3RRdWFkLmJvdW5kaW5nQm94KCk7
CisKKyAgICByZXR1cm4gcmVjdC5kaXN0YW5jZVNxdWFyZWRGcm9tQ2VudGVyTGluZVRvUG9pbnQo
dG91Y2hIb3RzcG90KTsKK30KKworLy8gUmV0dXJucyB0aGUgYXJlYSBvZiB0aGUgaW50ZXJzZWN0
aW9uLgorZmxvYXQgaW50ZXJzZWN0aW9uV2l0aEhpdFRlc3RRdWFkKGNvbnN0IExheW91dFBvaW50
JiwgY29uc3QgTGF5b3V0UmVjdCYgdG91Y2hSZWN0LCBjb25zdCBIaXRUZXN0UXVhZCYgaGl0VGVz
dFF1YWQpCit7CisgICAgSW50UmVjdCByZWN0ID0gaGl0VGVzdFF1YWQuYm91bmRpbmdCb3goKTsK
KyAgICBJbnRSZWN0IGludGVyc2VjdGlvbiA9IHJlY3Q7CisgICAgcmVjdC5pbnRlcnNlY3QodG91
Y2hSZWN0KTsKKworICAgIHJldHVybiBpbnRlcnNlY3Rpb24uc2l6ZSgpLmFyZWEoKTsKK30KKwor
Ym9vbCBmaW5kTm9kZVdpdGhMb3dlc3RNZXRyaWMoTm9kZSomIHRhcmdldE5vZGUsIExheW91dFBv
aW50JiB0YXJnZXRQb2ludCwgY29uc3QgTGF5b3V0UG9pbnQmIHRvdWNoSG90c3BvdCwgY29uc3Qg
TGF5b3V0UmVjdCYgdG91Y2hBcmVhLCBIaXRMaXN0JiBoaXRsaXN0LCBNZXRyaWMgbWV0cmljKQor
eworICAgIHRhcmdldE5vZGUgPSAwOworCisgICAgZmxvYXQgYmVzdE1ldHJpYyA9IElORklOSVRZ
OworICAgIEhpdExpc3Q6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gaGl0bGlzdC5iZWdpbigpOworICAg
IEhpdExpc3Q6OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IGhpdGxpc3QuZW5kKCk7CisgICAgZm9yICg7
IGl0ICE9IGVuZDsgKytpdCkgeworICAgICAgICBOb2RlKiBoaXROb2RlID0gaXQtPm5vZGUoKTsK
KyAgICAgICAgZmxvYXQgaGl0TWV0cmljID0gbWV0cmljKHRvdWNoSG90c3BvdCwgdG91Y2hBcmVh
LCAqaXQpOworICAgICAgICBpZiAoaGl0TWV0cmljIDwgYmVzdE1ldHJpYykgeworICAgICAgICAg
ICAgdGFyZ2V0UG9pbnQgPSByb3VuZGVkTGF5b3V0UG9pbnQoaXQtPnF1YWQoKS5jZW50ZXIoKSk7
CisgICAgICAgICAgICB0YXJnZXROb2RlID0gaGl0Tm9kZTsKKyAgICAgICAgICAgIGJlc3RNZXRy
aWMgPSBoaXRNZXRyaWM7CisgICAgICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4gKHRhcmdldE5v
ZGUpOworfQorCitib29sIGZpbmROb2RlV2l0aEhpZ2hlc3RNZXRyaWMoTm9kZSomIHRhcmdldE5v
ZGUsIExheW91dFBvaW50JiB0YXJnZXRQb2ludCwgY29uc3QgTGF5b3V0UG9pbnQmIHRvdWNoSG90
c3BvdCwgY29uc3QgTGF5b3V0UmVjdCYgdG91Y2hBcmVhLCBIaXRMaXN0JiBoaXRsaXN0LCBNZXRy
aWMgbWV0cmljKQoreworICAgIHRhcmdldE5vZGUgPSAwOworCisgICAgZmxvYXQgYmVzdE1ldHJp
YyA9IDA7CisgICAgSGl0TGlzdDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBoaXRsaXN0LmJlZ2luKCk7
CisgICAgSGl0TGlzdDo6Y29uc3RfaXRlcmF0b3IgZW5kID0gaGl0bGlzdC5lbmQoKTsKKyAgICBm
b3IgKDsgaXQgIT0gZW5kOyArK2l0KSB7CisgICAgICAgIE5vZGUqIGhpdE5vZGUgPSBpdC0+bm9k
ZSgpOworICAgICAgICBmbG9hdCBoaXRNZXRyaWMgPSBtZXRyaWModG91Y2hIb3RzcG90LCB0b3Vj
aEFyZWEsICppdCk7CisgICAgICAgIGlmIChoaXRNZXRyaWMgPiBiZXN0TWV0cmljKSB7CisgICAg
ICAgICAgICB0YXJnZXRQb2ludCA9IHJvdW5kZWRMYXlvdXRQb2ludChpdC0+cXVhZCgpLmNlbnRl
cigpKTsKKyAgICAgICAgICAgIHRhcmdldE5vZGUgPSBoaXROb2RlOworICAgICAgICAgICAgYmVz
dE1ldHJpYyA9IGhpdE1ldHJpYzsKKyAgICAgICAgfQorICAgIH0KKworICAgIHJldHVybiAodGFy
Z2V0Tm9kZSk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFRvdWNoQWRqdXN0bWVudAorCitib29sIGZp
bmRCZXN0Q2xpY2thYmxlQ2FuZGlkYXRlKE5vZGUqJiB0YXJnZXROb2RlLCBMYXlvdXRQb2ludCYg
dGFyZ2V0UG9pbnQsIGNvbnN0IExheW91dFBvaW50JiB0b3VjaEhvdHNwb3QsIGNvbnN0IExheW91
dFJlY3QmIHRvdWNoQXJlYSwgY29uc3QgTm9kZUxpc3QmIG5vZGVMaXN0KQoreworICAgIFRvdWNo
QWRqdXN0bWVudDo6SGl0TGlzdCBoaXRsaXN0OworICAgIFRvdWNoQWRqdXN0bWVudDo6Y29tcGls
ZUhpdExpc3Qobm9kZUxpc3QsIGhpdGxpc3QsIFRvdWNoQWRqdXN0bWVudDo6bm9kZVJlc3BvbmRz
VG9UYXBHZXN0dXJlKTsKKyAgICByZXR1cm4gVG91Y2hBZGp1c3RtZW50OjpmaW5kTm9kZVdpdGhM
b3dlc3RNZXRyaWModGFyZ2V0Tm9kZSwgdGFyZ2V0UG9pbnQsIHRvdWNoSG90c3BvdCwgdG91Y2hB
cmVhLCBoaXRsaXN0LCBUb3VjaEFkanVzdG1lbnQ6OmRpc3RhbmNlVG9IaXRUZXN0UXVhZCk7Cit9
CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Bh
Z2UvVG91Y2hBZGp1c3RtZW50LmggYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL1RvdWNoQWRqdXN0bWVu
dC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZjNmI4NTUKLS0tIC9kZXYv
bnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL1RvdWNoQWRqdXN0bWVudC5oCkBAIC0wLDAg
KzEsMzUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgTm9raWEgQ29ycG9yYXRpb24gYW5k
L29yIGl0cyBzdWJzaWRpYXJ5KC1pZXMpCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29m
dHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVy
IHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2Ug
YXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICog
dmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2
ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0
aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRo
b3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5
IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hv
dWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1Ymxp
YyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJ
TkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlv
biwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEg
MDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpZm5kZWYgVG91Y2hBZGp1c3RtZW50X2gKKyNkZWZp
bmUgVG91Y2hBZGp1c3RtZW50X2gKKworI2luY2x1ZGUgIkxheW91dFR5cGVzLmgiCisjaW5jbHVk
ZSAiTm9kZS5oIgorI2luY2x1ZGUgIk5vZGVMaXN0LmgiCisjaW5jbHVkZSA8d3RmL1ZlY3Rvci5o
PgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2Jvb2wgZmluZEJlc3RDbGlja2FibGVDYW5kaWRh
dGUoTm9kZSomIHRhcmdldE5vZGUsIExheW91dFBvaW50JiB0YXJnZXRQb2ludCwgY29uc3QgTGF5
b3V0UG9pbnQmIHRvdWNoSG90c3BvdCwgY29uc3QgTGF5b3V0UmVjdCYgdG91Y2hBcmVhLCBjb25z
dCBOb2RlTGlzdCYpOworLy8gRklYTUU6IEltcGxlbWVudCB0aGUgc2ltaWxhciBmdW5jdGlvbnMg
Zm9yIG90aGVyIGdlc3R1cmVzIGhlcmUgYXMgd2VsbC4KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29y
ZQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L0Zsb2F0UG9pbnQuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0Zsb2F0UG9p
bnQuaAppbmRleCBhNjAxYTlkLi5mNmNlMzdiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9GbG9hdFBvaW50LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvRmxvYXRQb2ludC5oCkBAIC03Nyw2ICs3Nyw3IEBAIHB1YmxpYzoKICAgICBG
bG9hdFBvaW50KGZsb2F0IHgsIGZsb2F0IHkpIDogbV94KHgpLCBtX3koeSkgeyB9CiAgICAgRmxv
YXRQb2ludChjb25zdCBJbnRQb2ludCYpOwogICAgIEZsb2F0UG9pbnQoY29uc3QgRnJhY3Rpb25h
bExheW91dFBvaW50Jik7CisgICAgZXhwbGljaXQgRmxvYXRQb2ludChGbG9hdFNpemUgc2l6ZSkg
OiBtX3goc2l6ZS53aWR0aCgpKSwgbV95KHNpemUuaGVpZ2h0KCkpIHsgfQogCiAgICAgc3RhdGlj
IEZsb2F0UG9pbnQgemVybygpIHsgcmV0dXJuIEZsb2F0UG9pbnQoKTsgfQogCkBAIC0xMzgsNiAr
MTM5LDkgQEAgcHVibGljOgogICAgICAgICByZXR1cm4gbV94ICogbV94ICsgbV95ICogbV95Owog
ICAgIH0KIAorICAgIGZsb2F0IGRpc3RhbmNlVG9Qb2ludChjb25zdCBGbG9hdFBvaW50JikgY29u
c3Q7CisgICAgZmxvYXQgZGlzdGFuY2VTcXVhcmVkVG9Qb2ludChjb25zdCBGbG9hdFBvaW50Jikg
Y29uc3Q7CisKICAgICBGbG9hdFBvaW50IGV4cGFuZGVkVG8oY29uc3QgRmxvYXRQb2ludCYgb3Ro
ZXIpIGNvbnN0CiAgICAgewogICAgICAgICByZXR1cm4gRmxvYXRQb2ludChzdGQ6Om1heChtX3gs
IG90aGVyLm1feCksIHN0ZDo6bWF4KG1feSwgb3RoZXIubV95KSk7CkBAIC0yNDEsNiArMjQ1LDE3
IEBAIGlubGluZSBmbG9hdCBvcGVyYXRvciooY29uc3QgRmxvYXRQb2ludCYgYSwgY29uc3QgRmxv
YXRQb2ludCYgYikKICAgICByZXR1cm4gYS5kb3QoYik7CiB9CiAKK2lubGluZSBmbG9hdCBGbG9h
dFBvaW50OjpkaXN0YW5jZVRvUG9pbnQoY29uc3QgRmxvYXRQb2ludCYgcG9pbnQpIGNvbnN0Cit7
CisgICAgcmV0dXJuICgqdGhpcyAtIHBvaW50KS5kaWFnb25hbExlbmd0aCgpOworfQorCitpbmxp
bmUgZmxvYXQgRmxvYXRQb2ludDo6ZGlzdGFuY2VTcXVhcmVkVG9Qb2ludChjb25zdCBGbG9hdFBv
aW50JiBwb2ludCkgY29uc3QKK3sKKyAgICByZXR1cm4gKCp0aGlzIC0gcG9pbnQpLmRpYWdvbmFs
TGVuZ3RoU3F1YXJlZCgpOworfQorCisKIGlubGluZSBJbnRQb2ludCByb3VuZGVkSW50UG9pbnQo
Y29uc3QgRmxvYXRQb2ludCYgcCkKIHsKICAgICByZXR1cm4gSW50UG9pbnQoc3RhdGljX2Nhc3Q8
aW50Pihyb3VuZGYocC54KCkpKSwgc3RhdGljX2Nhc3Q8aW50Pihyb3VuZGYocC55KCkpKSk7CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9GbG9hdFF1YWQuaCBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0Zsb2F0UXVhZC5oCmluZGV4IGI1ZTJh
OGMuLmJmYjc5NGQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L0Zsb2F0UXVhZC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0Zsb2F0
UXVhZC5oCkBAIC04OCw2ICs4OCwxMyBAQCBwdWJsaWM6CiAgICAgLy8gZnJvbSB0cmFuc2Zvcm1l
ZCByZWN0cy4KICAgICBib29sIGNvbnRhaW5zUXVhZChjb25zdCBGbG9hdFF1YWQmKSBjb25zdDsK
IAorICAgIC8vIFRoZSBjZW50ZXIgb2YgdGhlIHF1YWQuIElmIHRoZSBxdWFkIGlzIHRoZSByZXN1
bHQgb2YgYSBhZmZpbmUtdHJhbnNmb3JtZWQgcmVjdGFuZ2xlIHRoaXMgaXMgdGhlIHNhbWUgYXMg
dGhlIG9yaWdpbmFsIGNlbnRlciB0cmFuc2Zvcm1lZC4KKyAgICBGbG9hdFBvaW50IGNlbnRlcigp
IGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gRmxvYXRQb2ludCgobV9wMS54KCkgKyBtX3Ay
LngoKSArIG1fcDMueCgpICsgbV9wNC54KCkpIC8gNC4wLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAobV9wMS55KCkgKyBtX3AyLnkoKSArIG1fcDMueSgpICsgbV9wNC55KCkpIC8gNC4wKTsK
KyAgICB9CisKICAgICBGbG9hdFJlY3QgYm91bmRpbmdCb3goKSBjb25zdDsKICAgICBJbnRSZWN0
IGVuY2xvc2luZ0JvdW5kaW5nQm94KCkgY29uc3QKICAgICB7CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9GbG9hdFJlY3QuY3BwIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvRmxvYXRSZWN0LmNwcAppbmRleCA3Mzc0NzNjLi45MDljMTg1IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9GbG9hdFJlY3QuY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0Zsb2F0UmVjdC5jcHAKQEAg
LTE0Miw2ICsxNDIsNDAgQEAgdm9pZCBGbG9hdFJlY3Q6OnNjYWxlKGZsb2F0IHN4LCBmbG9hdCBz
eSkKICAgICBtX3NpemUuc2V0SGVpZ2h0KGhlaWdodCgpICogc3kpOwogfQogCitzdGF0aWMgaW5s
aW5lIGZsb2F0IGRpc3RhbmNlVG9JbnRlcnZhbChmbG9hdCBwb3MsIGZsb2F0IHN0YXJ0LCBmbG9h
dCBlbmQpCit7CisgICAgaWYgKHBvcyA8IHN0YXJ0KQorICAgICAgICByZXR1cm4gc3RhcnQgLSBw
b3M7CisgICAgaWYgKHBvcyA+IGVuZCkKKyAgICAgICAgcmV0dXJuIGVuZCAtIHBvczsKKyAgICBy
ZXR1cm4gMDsKK30KKworRmxvYXRTaXplIEZsb2F0UmVjdDo6ZGlmZmVyZW5jZVRvUG9pbnQoY29u
c3QgRmxvYXRQb2ludCYgcG9pbnQpIGNvbnN0Cit7CisgICAgZmxvYXQgeGRpc3RhbmNlID0gZGlz
dGFuY2VUb0ludGVydmFsKHBvaW50LngoKSwgeCgpLCBtYXhYKCkpOworICAgIGZsb2F0IHlkaXN0
YW5jZSA9IGRpc3RhbmNlVG9JbnRlcnZhbChwb2ludC55KCksIHkoKSwgbWF4WSgpKTsKKyAgICBy
ZXR1cm4gRmxvYXRTaXplKHhkaXN0YW5jZSwgeWRpc3RhbmNlKTsKK30KKworZmxvYXQgRmxvYXRS
ZWN0OjpkaXN0YW5jZVRvUG9pbnQoY29uc3QgRmxvYXRQb2ludCYgcCkgY29uc3QKK3sKKyAgICBy
ZXR1cm4gc3FydGYoZGlzdGFuY2VTcXVhcmVkVG9Qb2ludChwKSk7Cit9CisKK0Zsb2F0U2l6ZSBG
bG9hdFJlY3Q6OmRpZmZlcmVuY2VGcm9tQ2VudGVyTGluZVRvUG9pbnQoY29uc3QgRmxvYXRQb2lu
dCYgcG9pbnQpIGNvbnN0Cit7CisgICAgLy8gVGhlIGNlbnRlci1saW5lIGlzIHRoZSBuYXR1cmFs
IGNlbnRlciBvZiBhIHJlY3RhbmdsZS4gSXQgaGFzIGFuIGVxdWFsIGRpc3RhbmNlIHRvIGFsbCBz
aWRlcyBvZiB0aGUgcmVjdGFuZ2xlLgorICAgIEZsb2F0UG9pbnQgY2VudGVyUG9pbnQgPSBjZW50
ZXIoKTsKKyAgICBmbG9hdCB4ZGlzdGFuY2UgPSBjZW50ZXJQb2ludC54KCkgLSBwb2ludC54KCk7
CisgICAgZmxvYXQgeWRpc3RhbmNlID0gY2VudGVyUG9pbnQueSgpIC0gcG9pbnQueSgpOworICAg
IGlmICh3aWR0aCgpID4gaGVpZ2h0KCkpCisgICAgICAgIHhkaXN0YW5jZSA9IGRpc3RhbmNlVG9J
bnRlcnZhbChwb2ludC54KCksIHgoKSArIChoZWlnaHQoKSAvIDIuMCksIG1heFgoKSAtIChoZWln
aHQoKSAvIDIuMCkpOworICAgIGVsc2UKKyAgICAgICAgeWRpc3RhbmNlID0gZGlzdGFuY2VUb0lu
dGVydmFsKHBvaW50LnkoKSwgeSgpICsgKHdpZHRoKCkgLyAyLjApLCBtYXhZKCkgLSAod2lkdGgo
KSAvIDIuMCkpOworICAgIHJldHVybiBGbG9hdFNpemUoeGRpc3RhbmNlLCB5ZGlzdGFuY2UpOwor
fQorCiBGbG9hdFJlY3QgdW5pb25SZWN0KGNvbnN0IFZlY3RvcjxGbG9hdFJlY3Q+JiByZWN0cykK
IHsKICAgICBGbG9hdFJlY3QgcmVzdWx0OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvRmxvYXRSZWN0LmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9GbG9hdFJlY3QuaAppbmRleCA2NmIyOWY4Li40OGVjODcwMSAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRmxvYXRSZWN0LmgKKysrIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRmxvYXRSZWN0LmgKQEAgLTE4Miw2ICsxODIsMTIgQEAg
cHVibGljOgogICAgIHZvaWQgc2NhbGUoZmxvYXQgcykgeyBzY2FsZShzLCBzKTsgfQogICAgIHZv
aWQgc2NhbGUoZmxvYXQgc3gsIGZsb2F0IHN5KTsKIAorICAgIEZsb2F0U2l6ZSBkaWZmZXJlbmNl
VG9Qb2ludChjb25zdCBGbG9hdFBvaW50JikgY29uc3Q7CisgICAgRmxvYXRTaXplIGRpZmZlcmVu
Y2VGcm9tQ2VudGVyTGluZVRvUG9pbnQoY29uc3QgRmxvYXRQb2ludCYpIGNvbnN0OworICAgIGZs
b2F0IGRpc3RhbmNlU3F1YXJlZFRvUG9pbnQoY29uc3QgRmxvYXRQb2ludCYgcCkgY29uc3QgeyBy
ZXR1cm4gZGlmZmVyZW5jZVRvUG9pbnQocCkuZGlhZ29uYWxMZW5ndGhTcXVhcmVkKCk7IH0KKyAg
ICBmbG9hdCBkaXN0YW5jZVNxdWFyZWRGcm9tQ2VudGVyTGluZVRvUG9pbnQoY29uc3QgRmxvYXRQ
b2ludCYgcCkgY29uc3QgeyByZXR1cm4gZGlmZmVyZW5jZUZyb21DZW50ZXJMaW5lVG9Qb2ludChw
KS5kaWFnb25hbExlbmd0aFNxdWFyZWQoKTsgfQorICAgIGZsb2F0IGRpc3RhbmNlVG9Qb2ludChj
b25zdCBGbG9hdFBvaW50JikgY29uc3Q7CisKICAgICBGbG9hdFJlY3QgdHJhbnNwb3NlZFJlY3Qo
KSBjb25zdCB7IHJldHVybiBGbG9hdFJlY3QobV9sb2NhdGlvbi50cmFuc3Bvc2VkUG9pbnQoKSwg
bV9zaXplLnRyYW5zcG9zZWRTaXplKCkpOyB9CiAKICAgICAvLyBSZS1pbml0aWFsaXplcyB0aGlz
IHJlY3RhbmdsZSB0byBmaXQgdGhlIHNldHMgb2YgcGFzc2VkIHBvaW50cy4KZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0Zsb2F0U2l6ZS5oIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRmxvYXRTaXplLmgKaW5kZXggM2IzNTUxMC4uNmE5OWYw
NiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRmxvYXRTaXpl
LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRmxvYXRTaXplLmgKQEAg
LTEwMyw2ICsxMDMsMTEgQEAgcHVibGljOgogICAgICAgICAgICBtX2hlaWdodCA8IG90aGVyLm1f
aGVpZ2h0ID8gbV9oZWlnaHQgOiBvdGhlci5tX2hlaWdodCk7CiAgICAgfQogCisgICAgZmxvYXQg
YXJlYSgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gbV93aWR0aCAqIG1faGVpZ2h0Owor
ICAgIH0KKwogICAgIGZsb2F0IGRpYWdvbmFsTGVuZ3RoKCkgY29uc3Q7CiAgICAgZmxvYXQgZGlh
Z29uYWxMZW5ndGhTcXVhcmVkKCkgY29uc3QKICAgICB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbnRQb2ludC5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvSW50UG9pbnQuaAppbmRleCBkZGM0MWI0Li41MTcyYTE0IDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbnRQb2ludC5oCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ludFBvaW50LmgKQEAgLTExMSw2ICsxMTEsMTMg
QEAgcHVibGljOgogICAgICAgICAgICAgbV95IDwgb3RoZXIubV95ID8gbV95IDogb3RoZXIubV95
KTsKICAgICB9CiAKKyAgICBpbnQgbGVuZ3RoU3F1YXJlZCgpIGNvbnN0CisgICAgeworICAgICAg
ICByZXR1cm4gbV94ICogbV94ICsgbV95ICogbV95OworICAgIH0KKworICAgIGludCBkaXN0YW5j
ZVNxdWFyZWRUb1BvaW50KGNvbnN0IEludFBvaW50JikgY29uc3Q7CisKICAgICB2b2lkIGNsYW1w
TmVnYXRpdmVUb1plcm8oKQogICAgIHsKICAgICAgICAgKnRoaXMgPSBleHBhbmRlZFRvKHplcm8o
KSk7CkBAIC0yMjIsNiArMjI5LDExIEBAIGlubGluZSBJbnRTaXplIHRvU2l6ZShjb25zdCBJbnRQ
b2ludCYgYSkKICAgICByZXR1cm4gSW50U2l6ZShhLngoKSwgYS55KCkpOwogfQogCitpbmxpbmUg
aW50IEludFBvaW50OjpkaXN0YW5jZVNxdWFyZWRUb1BvaW50KGNvbnN0IEludFBvaW50JiBwb2lu
dCkgY29uc3QKK3sKKyAgICByZXR1cm4gKCgqdGhpcykgLSBwb2ludCkuZGlhZ29uYWxMZW5ndGhT
cXVhcmVkKCk7Cit9CisKICNpZiBQTEFURk9STShRVCkKIGlubGluZSBRRGF0YVN0cmVhbSYgb3Bl
cmF0b3I8PChRRGF0YVN0cmVhbSYgc3RyZWFtLCBjb25zdCBJbnRQb2ludCYgcG9pbnQpCiB7CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbnRSZWN0LmNwcCBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ludFJlY3QuY3BwCmluZGV4IDAzYzM1
ZTguLmRmYTJmOTEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L0ludFJlY3QuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ludFJl
Y3QuY3BwCkBAIC0xMzIsNiArMTMyLDM1IEBAIHZvaWQgSW50UmVjdDo6c2NhbGUoZmxvYXQgcykK
ICAgICBtX3NpemUuc2V0SGVpZ2h0KChpbnQpKGhlaWdodCgpICogcykpOwogfQogCitzdGF0aWMg
aW5saW5lIGludCBkaXN0YW5jZVRvSW50ZXJ2YWwoaW50IHBvcywgaW50IHN0YXJ0LCBpbnQgZW5k
KQoreworICAgIGlmIChwb3MgPCBzdGFydCkKKyAgICAgICAgcmV0dXJuIHN0YXJ0IC0gcG9zOwor
ICAgIGlmIChwb3MgPiBlbmQpCisgICAgICAgIHJldHVybiBlbmQgLSBwb3M7CisgICAgcmV0dXJu
IDA7Cit9CisKK0ludFNpemUgSW50UmVjdDo6ZGlmZmVyZW5jZVRvUG9pbnQoY29uc3QgSW50UG9p
bnQmIHBvaW50KSBjb25zdAoreworICAgIGludCB4ZGlzdGFuY2UgPSBkaXN0YW5jZVRvSW50ZXJ2
YWwocG9pbnQueCgpLCB4KCksIG1heFgoKSk7CisgICAgaW50IHlkaXN0YW5jZSA9IGRpc3RhbmNl
VG9JbnRlcnZhbChwb2ludC55KCksIHkoKSwgbWF4WSgpKTsKKyAgICByZXR1cm4gSW50U2l6ZSh4
ZGlzdGFuY2UsIHlkaXN0YW5jZSk7Cit9CisKK0ludFNpemUgSW50UmVjdDo6ZGlmZmVyZW5jZUZy
b21DZW50ZXJMaW5lVG9Qb2ludChjb25zdCBJbnRQb2ludCYgcG9pbnQpIGNvbnN0Cit7CisgICAg
Ly8gVGhlIGNlbnRlci1saW5lIGlzIHRoZSBuYXR1cmFsIGNlbnRlciBvZiBhIHJlY3RhbmdsZS4g
SXQgaGFzIGFuIGVxdWFsIGRpc3RhbmNlIHRvIGFsbCBzaWRlcyBvZiB0aGUgcmVjdGFuZ2xlLgor
ICAgIEludFBvaW50IGNlbnRlclBvaW50ID0gY2VudGVyKCk7CisgICAgaW50IHhkaXN0YW5jZSA9
IGNlbnRlclBvaW50LngoKSAtIHBvaW50LngoKTsKKyAgICBpbnQgeWRpc3RhbmNlID0gY2VudGVy
UG9pbnQueSgpIC0gcG9pbnQueSgpOworICAgIGlmICh3aWR0aCgpID4gaGVpZ2h0KCkpCisgICAg
ICAgIHhkaXN0YW5jZSA9IGRpc3RhbmNlVG9JbnRlcnZhbChwb2ludC54KCksIHgoKSArIChoZWln
aHQoKSAvIDIpLCBtYXhYKCkgLSAoaGVpZ2h0KCkgLyAyKSk7CisgICAgZWxzZQorICAgICAgICB5
ZGlzdGFuY2UgPSBkaXN0YW5jZVRvSW50ZXJ2YWwocG9pbnQueSgpLCB5KCkgKyAod2lkdGgoKSAv
IDIpLCBtYXhZKCkgLSAod2lkdGgoKSAvIDIpKTsKKyAgICByZXR1cm4gSW50U2l6ZSh4ZGlzdGFu
Y2UsIHlkaXN0YW5jZSk7Cit9CisKIEludFJlY3QgdW5pb25SZWN0KGNvbnN0IFZlY3RvcjxJbnRS
ZWN0PiYgcmVjdHMpCiB7CiAgICAgSW50UmVjdCByZXN1bHQ7CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbnRSZWN0LmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9JbnRSZWN0LmgKaW5kZXggZmNiZjI3YS4uMGMxMmQ3ZSAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW50UmVjdC5oCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ludFJlY3QuaApAQCAtMTc3LDYgKzE3NywxMSBA
QCBwdWJsaWM6CiAgICAgdm9pZCBpbmZsYXRlKGludCBkKSB7IGluZmxhdGVYKGQpOyBpbmZsYXRl
WShkKTsgfQogICAgIHZvaWQgc2NhbGUoZmxvYXQgcyk7CiAKKyAgICBJbnRTaXplIGRpZmZlcmVu
Y2VUb1BvaW50KGNvbnN0IEludFBvaW50JikgY29uc3Q7CisgICAgSW50U2l6ZSBkaWZmZXJlbmNl
RnJvbUNlbnRlckxpbmVUb1BvaW50KGNvbnN0IEludFBvaW50JikgY29uc3Q7CisgICAgaW50IGRp
c3RhbmNlU3F1YXJlZFRvUG9pbnQoY29uc3QgSW50UG9pbnQmIHApIGNvbnN0IHsgcmV0dXJuIGRp
ZmZlcmVuY2VUb1BvaW50KHApLmRpYWdvbmFsTGVuZ3RoU3F1YXJlZCgpOyB9CisgICAgaW50IGRp
c3RhbmNlU3F1YXJlZEZyb21DZW50ZXJMaW5lVG9Qb2ludChjb25zdCBJbnRQb2ludCYgcCkgY29u
c3QgeyByZXR1cm4gZGlmZmVyZW5jZUZyb21DZW50ZXJMaW5lVG9Qb2ludChwKS5kaWFnb25hbExl
bmd0aFNxdWFyZWQoKTsgfQorCiAgICAgSW50UmVjdCB0cmFuc3Bvc2VkUmVjdCgpIGNvbnN0IHsg
cmV0dXJuIEludFJlY3QobV9sb2NhdGlvbi50cmFuc3Bvc2VkUG9pbnQoKSwgbV9zaXplLnRyYW5z
cG9zZWRTaXplKCkpOyB9CiAKICNpZiBQTEFURk9STShXWCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ludFNpemUuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL0ludFNpemUuaAppbmRleCAxNjM5ODQ3Li44ZWM2NTM5IDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbnRTaXplLmgKKysrIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW50U2l6ZS5oCkBAIC0xMDQsNiArMTA0LDE2IEBA
IHB1YmxpYzoKICAgICAgICAgKnRoaXMgPSBleHBhbmRlZFRvKEludFNpemUoKSk7CiAgICAgfQog
CisgICAgaW50IGFyZWEoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fd2lkdGggKiBt
X2hlaWdodDsKKyAgICB9CisKKyAgICBpbnQgZGlhZ29uYWxMZW5ndGhTcXVhcmVkKCkgY29uc3QK
KyAgICB7CisgICAgICAgIHJldHVybiBtX3dpZHRoICogbV93aWR0aCArIG1faGVpZ2h0ICogbV9o
ZWlnaHQ7CisgICAgfQorCiAgICAgSW50U2l6ZSB0cmFuc3Bvc2VkU2l6ZSgpIGNvbnN0CiAgICAg
ewogICAgICAgICByZXR1cm4gSW50U2l6ZShtX2hlaWdodCwgbV93aWR0aCk7CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyT2JqZWN0LmNwcCBiL1NvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJPYmplY3QuY3BwCmluZGV4IGVhNDJhYjcuLmUxZTMzM2YgMTAw
NzU1Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJPYmplY3QuY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJPYmplY3QuY3BwCkBAIC0yNjYyLDYgKzI2
NjIsMTAgQEAgYm9vbCBSZW5kZXJPYmplY3Q6OndpbGxSZW5kZXJJbWFnZShDYWNoZWRJbWFnZSop
CiAgICAgaWYgKHN0eWxlKCktPnZpc2liaWxpdHkoKSAhPSBWSVNJQkxFKQogICAgICAgICByZXR1
cm4gZmFsc2U7CiAKKyAgICAvLyBXZSB3aWxsIG5vdCByZW5kZXIgYSBuZXcgaW1hZ2Ugd2hlbiBB
Y3RpdmUgRE9NIGlzIHN1c3BlbmRlZAorICAgIGlmIChkb2N1bWVudCgpLT5hY3RpdmVET01PYmpl
Y3RzQXJlU3VzcGVuZGVkKCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKwogICAgIC8vIElmIHdl
J3JlIG5vdCBpbiBhIHdpbmRvdyAoaS5lLiwgd2UncmUgZG9ybWFudCBmcm9tIGJlaW5nIHB1dCBp
biB0aGUgYi9mIGNhY2hlIG9yIGluIGEgYmFja2dyb3VuZCB0YWIpCiAgICAgLy8gdGhlbiB3ZSBk
b24ndCB3YW50IHRvIHJlbmRlciBlaXRoZXIuCiAgICAgcmV0dXJuICFkb2N1bWVudCgpLT5pblBh
Z2VDYWNoZSgpICYmICFkb2N1bWVudCgpLT52aWV3KCktPmlzT2Zmc2NyZWVuKCk7CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS90ZXN0aW5nL0ludGVybmFscy5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS90ZXN0aW5nL0ludGVybmFscy5jcHAKaW5kZXggMzIzZTVhYS4uYzYyZjYwNiAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvdGVzdGluZy9JbnRlcm5hbHMuY3BwCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3Rlc3RpbmcvSW50ZXJuYWxzLmNwcApAQCAtNjQsNiArNjQsMTEgQEAKICNpbmNsdWRlICJD
b2xvckNob29zZXIuaCIKICNlbmRpZgogCisjaWYgRU5BQkxFKFRPVUNIX0FESlVTVE1FTlQpCisj
aW5jbHVkZSAiRXZlbnRIYW5kbGVyLmgiCisjaW5jbHVkZSAiV2ViS2l0UG9pbnQuaCIKKyNlbmRp
ZgorCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIHN0YXRpYyBib29sIG1hcmtlclR5cGVzRnJvbShj
b25zdCBTdHJpbmcmIG1hcmtlclR5cGUsIERvY3VtZW50TWFya2VyOjpNYXJrZXJUeXBlcyYgcmVz
dWx0KQpAQCAtNTU2LDYgKzU2MSw0NiBAQCBTdHJpbmcgSW50ZXJuYWxzOjpyYW5nZUFzVGV4dChj
b25zdCBSYW5nZSogcmFuZ2UsIEV4Y2VwdGlvbkNvZGUmIGVjKQogICAgIHJldHVybiByYW5nZS0+
dGV4dCgpOwogfQogCisKKyNpZiBFTkFCTEUoVE9VQ0hfQURKVVNUTUVOVCkKK1Bhc3NSZWZQdHI8
V2ViS2l0UG9pbnQ+IEludGVybmFsczo6dG91Y2hQb3NpdGlvbkFkanVzdGVkVG9CZXN0Q2xpY2th
YmxlTm9kZShsb25nIHgsIGxvbmcgeSwgbG9uZyB3LCBsb25nIGgsIERvY3VtZW50KiBkb2N1bWVu
dCwgRXhjZXB0aW9uQ29kZSYgZWMpCit7CisgICAgaWYgKCFkb2N1bWVudCB8fCAhZG9jdW1lbnQt
PmZyYW1lKCkpIHsKKyAgICAgICAgZWMgPSBJTlZBTElEX0FDQ0VTU19FUlI7CisgICAgICAgIHJl
dHVybiAwOworICAgIH0KKworICAgIEludFNpemUgcmFkaXVzKHcgLyAyLCBoIC8gMik7CisgICAg
SW50UG9pbnQgcG9pbnQoeCArIHJhZGl1cy53aWR0aCgpLCB5ICsgcmFkaXVzLmhlaWdodCgpKTsK
KworICAgIE5vZGUqIHRhcmdldE5vZGU7CisgICAgSW50UG9pbnQgYWRqdXN0ZWRQb2ludDsKKwor
ICAgIGRvY3VtZW50LT5mcmFtZSgpLT5ldmVudEhhbmRsZXIoKS0+YmVzdENsaWNrYWJsZU5vZGVG
b3JUb3VjaFBvaW50KHBvaW50LCByYWRpdXMsIGFkanVzdGVkUG9pbnQsIHRhcmdldE5vZGUpOwor
CisgICAgcmV0dXJuIFdlYktpdFBvaW50OjpjcmVhdGUoYWRqdXN0ZWRQb2ludC54KCksIGFkanVz
dGVkUG9pbnQueSgpKTsKK30KKworUGFzc1JlZlB0cjxOb2RlPiBJbnRlcm5hbHM6OnRvdWNoTm9k
ZUFkanVzdGVkVG9CZXN0Q2xpY2thYmxlTm9kZShsb25nIHgsIGxvbmcgeSwgbG9uZyB3LCBsb25n
IGgsIERvY3VtZW50KiBkb2N1bWVudCwgRXhjZXB0aW9uQ29kZSYgZWMpCit7CisgICAgaWYgKCFk
b2N1bWVudCB8fCAhZG9jdW1lbnQtPmZyYW1lKCkpIHsKKyAgICAgICAgZWMgPSBJTlZBTElEX0FD
Q0VTU19FUlI7CisgICAgICAgIHJldHVybiAwOworICAgIH0KKworICAgIEludFNpemUgcmFkaXVz
KHcgLyAyLCBoIC8gMik7CisgICAgSW50UG9pbnQgcG9pbnQoeCArIHJhZGl1cy53aWR0aCgpLCB5
ICsgcmFkaXVzLmhlaWdodCgpKTsKKworICAgIE5vZGUqIHRhcmdldE5vZGU7CisgICAgSW50UG9p
bnQgYWRqdXN0ZWRQb2ludDsKKworICAgIGRvY3VtZW50LT5mcmFtZSgpLT5ldmVudEhhbmRsZXIo
KS0+YmVzdENsaWNrYWJsZU5vZGVGb3JUb3VjaFBvaW50KHBvaW50LCByYWRpdXMsIGFkanVzdGVk
UG9pbnQsIHRhcmdldE5vZGUpOworCisgICAgcmV0dXJuIGFkb3B0UmVmKHRhcmdldE5vZGUpOwor
fQorI2VuZGlmCisKKwogaW50IEludGVybmFsczo6bGFzdFNwZWxsQ2hlY2tSZXF1ZXN0U2VxdWVu
Y2UoRG9jdW1lbnQqIGRvY3VtZW50LCBFeGNlcHRpb25Db2RlJiBlYykKIHsKICAgICBTcGVsbENo
ZWNrZXIqIGNoZWNrZXIgPSBzcGVsbGNoZWNrZXIoZG9jdW1lbnQpOwpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvdGVzdGluZy9JbnRlcm5hbHMuaCBiL1NvdXJjZS9XZWJDb3JlL3Rlc3Rpbmcv
SW50ZXJuYWxzLmgKaW5kZXggYTEzZGZiMy4uODU0ZWRhMiAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvdGVzdGluZy9JbnRlcm5hbHMuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS90ZXN0aW5nL0lu
dGVybmFscy5oCkBAIC00Miw2ICs0Miw3IEBAIGNsYXNzIEludGVybmFsU2V0dGluZ3M7CiBjbGFz
cyBOb2RlOwogY2xhc3MgUmFuZ2U7CiBjbGFzcyBTaGFkb3dSb290OworY2xhc3MgV2ViS2l0UG9p
bnQ7CiAKIHR5cGVkZWYgaW50IEV4Y2VwdGlvbkNvZGU7CiAKQEAgLTEwOCw2ICsxMDksMTEgQEAg
cHVibGljOgogICAgIHVuc2lnbmVkIGxlbmd0aEZyb21SYW5nZShFbGVtZW50KiBzY29wZSwgY29u
c3QgUmFuZ2UqLCBFeGNlcHRpb25Db2RlJik7CiAgICAgU3RyaW5nIHJhbmdlQXNUZXh0KGNvbnN0
IFJhbmdlKiwgRXhjZXB0aW9uQ29kZSYpOwogCisjaWYgRU5BQkxFKFRPVUNIX0FESlVTVE1FTlQp
CisgICAgUGFzc1JlZlB0cjxXZWJLaXRQb2ludD4gdG91Y2hQb3NpdGlvbkFkanVzdGVkVG9CZXN0
Q2xpY2thYmxlTm9kZShsb25nIHgsIGxvbmcgeSwgbG9uZyB3LCBsb25nIGgsIERvY3VtZW50Kiwg
RXhjZXB0aW9uQ29kZSYpOworICAgIFBhc3NSZWZQdHI8Tm9kZT4gdG91Y2hOb2RlQWRqdXN0ZWRU
b0Jlc3RDbGlja2FibGVOb2RlKGxvbmcgeCwgbG9uZyB5LCBsb25nIHcsIGxvbmcgaCwgRG9jdW1l
bnQqLCBFeGNlcHRpb25Db2RlJik7CisjZW5kaWYKKwogICAgIGludCBsYXN0U3BlbGxDaGVja1Jl
cXVlc3RTZXF1ZW5jZShEb2N1bWVudCosIEV4Y2VwdGlvbkNvZGUmKTsKICAgICBpbnQgbGFzdFNw
ZWxsQ2hlY2tQcm9jZXNzZWRTZXF1ZW5jZShEb2N1bWVudCosIEV4Y2VwdGlvbkNvZGUmKTsKICAg
ICAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Rlc3RpbmcvSW50ZXJuYWxzLmlkbCBiL1Nv
dXJjZS9XZWJDb3JlL3Rlc3RpbmcvSW50ZXJuYWxzLmlkbAppbmRleCAzOTQzNzZlLi44ODFhZTFl
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS90ZXN0aW5nL0ludGVybmFscy5pZGwKKysrIGIv
U291cmNlL1dlYkNvcmUvdGVzdGluZy9JbnRlcm5hbHMuaWRsCkBAIC04NCw2ICs4NCwxMSBAQCBt
b2R1bGUgd2luZG93IHsKICAgICAgICAgdW5zaWduZWQgbG9uZyBsZW5ndGhGcm9tUmFuZ2UoaW4g
RWxlbWVudCBzY29wZSwgaW4gUmFuZ2UgcmFuZ2UpIHJhaXNlcyAoRE9NRXhjZXB0aW9uKTsKICAg
ICAgICAgRE9NU3RyaW5nIHJhbmdlQXNUZXh0KGluIFJhbmdlIHJhbmdlKSByYWlzZXMgKERPTUV4
Y2VwdGlvbik7CiAKKyNpZiBkZWZpbmVkKEVOQUJMRV9UT1VDSF9BREpVU1RNRU5UKSAmJiBFTkFC
TEVfVE9VQ0hfQURKVVNUTUVOVAorICAgICAgICBXZWJLaXRQb2ludCB0b3VjaFBvc2l0aW9uQWRq
dXN0ZWRUb0Jlc3RDbGlja2FibGVOb2RlKGluIGxvbmcgeCwgaW4gbG9uZyB5LCBpbiBsb25nIHcs
IGluIGxvbmcgaCwgaW4gRG9jdW1lbnQgZG9jdW1lbnQpIHJhaXNlcyAoRE9NRXhjZXB0aW9uKTsK
KyAgICAgICAgTm9kZSB0b3VjaE5vZGVBZGp1c3RlZFRvQmVzdENsaWNrYWJsZU5vZGUoaW4gbG9u
ZyB4LCBpbiBsb25nIHksIGluIGxvbmcgdywgaW4gbG9uZyBoLCBpbiBEb2N1bWVudCBkb2N1bWVu
dCkgcmFpc2VzIChET01FeGNlcHRpb24pOworI2VuZGlmCisKICAgICAgICAgbG9uZyBsYXN0U3Bl
bGxDaGVja1JlcXVlc3RTZXF1ZW5jZShpbiBEb2N1bWVudCBkb2N1bWVudCkgcmFpc2VzIChET01F
eGNlcHRpb24pOwogICAgICAgICBsb25nIGxhc3RTcGVsbENoZWNrUHJvY2Vzc2VkU2VxdWVuY2Uo
aW4gRG9jdW1lbnQgZG9jdW1lbnQpIHJhaXNlcyAoRE9NRXhjZXB0aW9uKTsKIApkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nIGIvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCmlu
ZGV4IDJiODQ2ZGIuLjcxYmMxZWEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxv
ZworKysgYi9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cKQEAgLTEsMyArMSwyMyBAQAorMjAxMi0w
My0wMiAgQWxsYW4gU2FuZGZlbGQgSmVuc2VuICA8YWxsYW4uamVuc2VuQG5va2lhLmNvbT4KKwor
ICAgICAgICBTZWxlY3QgYmVzdCB0YXJnZXQgZm9yIHRhcCBnZXN0dXJlLgorICAgICAgICBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9Nzg4MDEKKworICAgICAgICBSZXZp
ZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBTZW5kIHJhZGl1cyB0byBoYW5kbGVQ
b3RlbnRpYWxTaW5nbGVUYXBFdmVudCBzbyBpdCBjYW4gZG8gdGhlIHNhbWUgaGl0CisgICAgICAg
IGRldGVjdGlvbiB0aGUgdGFwIGdlc3R1cmUgbGF0ZXIgZG9lcy4KKworICAgICAgICAqIFVJUHJv
Y2Vzcy9XZWJQYWdlUHJveHkuY3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlUHJveHk6Omhh
bmRsZVBvdGVudGlhbEFjdGl2YXRpb24pOgorICAgICAgICAqIFVJUHJvY2Vzcy9XZWJQYWdlUHJv
eHkuaDoKKyAgICAgICAgKiBVSVByb2Nlc3MvcXQvUXRXZWJQYWdlRXZlbnRIYW5kbGVyLmNwcDoK
KyAgICAgICAgKFF0V2ViUGFnZUV2ZW50SGFuZGxlcjo6aGFuZGxlUG90ZW50aWFsU2luZ2xlVGFw
RXZlbnQpOgorICAgICAgICAqIFdlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmNwcDoKKyAgICAg
ICAgKFdlYktpdDo6V2ViUGFnZTo6aGlnaGxpZ2h0UG90ZW50aWFsQWN0aXZhdGlvbik6CisgICAg
ICAgICogV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UuaDoKKyAgICAgICAgKiBXZWJQcm9jZXNz
L1dlYlBhZ2UvV2ViUGFnZS5tZXNzYWdlcy5pbjoKKwogMjAxMi0wMy0wMiAgSm9vbmUgSHVyICA8
am9vbmUuaHVyQGNvbGxhYm9yYS5jby51az4KIAogICAgICAgICBVbnJldmlld2VkLiBGaXggV2Vi
S2l0MiBHVEsrIGJ1aWxkLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dl
YlBhZ2VQcm94eS5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViUGFnZVByb3h5LmNw
cAppbmRleCAyYmQ2ZTc2Li41MjI1N2E0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVBy
b2Nlc3MvV2ViUGFnZVByb3h5LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2Vi
UGFnZVByb3h5LmNwcApAQCAtOTg4LDkgKzk4OCw5IEBAIHZvaWQgV2ViUGFnZVByb3h5OjpoYW5k
bGVHZXN0dXJlRXZlbnQoY29uc3QgV2ViR2VzdHVyZUV2ZW50JiBldmVudCkKIAogI2lmIEVOQUJM
RShUT1VDSF9FVkVOVFMpCiAjaWYgUExBVEZPUk0oUVQpCi12b2lkIFdlYlBhZ2VQcm94eTo6aGFu
ZGxlUG90ZW50aWFsQWN0aXZhdGlvbihjb25zdCBJbnRQb2ludCYgbGF5b3V0UG9pbnQpCit2b2lk
IFdlYlBhZ2VQcm94eTo6aGFuZGxlUG90ZW50aWFsQWN0aXZhdGlvbihjb25zdCBJbnRQb2ludCYg
bGF5b3V0UG9pbnQsIGNvbnN0IEludFNpemUmIGFyZWEpCiB7Ci0gICAgcHJvY2VzcygpLT5zZW5k
KE1lc3NhZ2VzOjpXZWJQYWdlOjpIaWdobGlnaHRQb3RlbnRpYWxBY3RpdmF0aW9uKGxheW91dFBv
aW50KSwgbV9wYWdlSUQpOworICAgIHByb2Nlc3MoKS0+c2VuZChNZXNzYWdlczo6V2ViUGFnZTo6
SGlnaGxpZ2h0UG90ZW50aWFsQWN0aXZhdGlvbihsYXlvdXRQb2ludCwgYXJlYSksIG1fcGFnZUlE
KTsKIH0KICNlbmRpZgogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2Vi
UGFnZVByb3h5LmggYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViUGFnZVByb3h5LmgKaW5k
ZXggYWY4ZGExYi4uNzg2MzZjNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNz
L1dlYlBhZ2VQcm94eS5oCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJQYWdlUHJv
eHkuaApAQCAtMzg1LDcgKzM4NSw3IEBAIHB1YmxpYzoKICNpZiBFTkFCTEUoVE9VQ0hfRVZFTlRT
KQogICAgIHZvaWQgaGFuZGxlVG91Y2hFdmVudChjb25zdCBOYXRpdmVXZWJUb3VjaEV2ZW50Jik7
CiAjaWYgUExBVEZPUk0oUVQpCi0gICAgdm9pZCBoYW5kbGVQb3RlbnRpYWxBY3RpdmF0aW9uKGNv
bnN0IFdlYkNvcmU6OkludFBvaW50Jik7CisgICAgdm9pZCBoYW5kbGVQb3RlbnRpYWxBY3RpdmF0
aW9uKGNvbnN0IFdlYkNvcmU6OkludFBvaW50JiwgY29uc3QgV2ViQ29yZTo6SW50U2l6ZSYpOwog
I2VuZGlmCiAjZW5kaWYKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL3F0
L1F0V2ViUGFnZUV2ZW50SGFuZGxlci5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvcXQv
UXRXZWJQYWdlRXZlbnRIYW5kbGVyLmNwcAppbmRleCA5NWVkNDMxLi4yYmJiYmYyIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvcXQvUXRXZWJQYWdlRXZlbnRIYW5kbGVyLmNw
cAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvcXQvUXRXZWJQYWdlRXZlbnRIYW5kbGVy
LmNwcApAQCAtMjMxLDcgKzIzMSw3IEBAIHZvaWQgUXRXZWJQYWdlRXZlbnRIYW5kbGVyOjpoYW5k
bGVEcm9wRXZlbnQoUURyb3BFdmVudCogZXYpCiB2b2lkIFF0V2ViUGFnZUV2ZW50SGFuZGxlcjo6
aGFuZGxlUG90ZW50aWFsU2luZ2xlVGFwRXZlbnQoY29uc3QgUVRvdWNoRXZlbnQ6OlRvdWNoUG9p
bnQmIHBvaW50KQogewogICAgIFFUcmFuc2Zvcm0gZnJvbUl0ZW1UcmFuc2Zvcm0gPSBtX3dlYlBh
Z2UtPnRyYW5zZm9ybUZyb21JdGVtKCk7Ci0gICAgbV93ZWJQYWdlUHJveHktPmhhbmRsZVBvdGVu
dGlhbEFjdGl2YXRpb24oZnJvbUl0ZW1UcmFuc2Zvcm0ubWFwKHBvaW50LnBvcygpKS50b1BvaW50
KCkpOworICAgIG1fd2ViUGFnZVByb3h5LT5oYW5kbGVQb3RlbnRpYWxBY3RpdmF0aW9uKGZyb21J
dGVtVHJhbnNmb3JtLm1hcChwb2ludC5wb3MoKSkudG9Qb2ludCgpLCBJbnRTaXplKHBvaW50LnJl
Y3QoKS5zaXplKCkudG9TaXplKCkpKTsKIH0KIAogdm9pZCBRdFdlYlBhZ2VFdmVudEhhbmRsZXI6
OmhhbmRsZVNpbmdsZVRhcEV2ZW50KGNvbnN0IFFUb3VjaEV2ZW50OjpUb3VjaFBvaW50JiBwb2lu
dCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdl
LmNwcCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmNwcAppbmRl
eCAwM2QwYzcwLi42MmEwNzA0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNz
L1dlYlBhZ2UvV2ViUGFnZS5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQ
YWdlL1dlYlBhZ2UuY3BwCkBAIC0xNDQxLDE2ICsxNDQxLDIwIEBAIHZvaWQgV2ViUGFnZTo6cmVz
dG9yZVNlc3Npb25BbmROYXZpZ2F0ZVRvQ3VycmVudEl0ZW0oY29uc3QgU2Vzc2lvblN0YXRlJiBz
ZXNzaW9uCiAKICNpZiBFTkFCTEUoVE9VQ0hfRVZFTlRTKQogI2lmIFBMQVRGT1JNKFFUKQotdm9p
ZCBXZWJQYWdlOjpoaWdobGlnaHRQb3RlbnRpYWxBY3RpdmF0aW9uKGNvbnN0IEludFBvaW50JiBw
b2ludCkKK3ZvaWQgV2ViUGFnZTo6aGlnaGxpZ2h0UG90ZW50aWFsQWN0aXZhdGlvbihjb25zdCBJ
bnRQb2ludCYgcG9pbnQsIGNvbnN0IEludFNpemUmIGFyZWEpCiB7CiAgICAgTm9kZSogYWN0aXZh
dGlvbk5vZGUgPSAwOwogICAgIEZyYW1lKiBtYWluZnJhbWUgPSBtX3BhZ2UtPm1haW5GcmFtZSgp
OworICAgIEludFBvaW50IGFkanVzdGVkUG9pbnQ7CiAKICAgICBpZiAocG9pbnQgIT0gSW50UG9p
bnQ6Onplcm8oKSkgeworI2lmIEVOQUJMRShUT1VDSF9BREpVU1RNRU5UKQorICAgICAgICBtYWlu
ZnJhbWUtPmV2ZW50SGFuZGxlcigpLT5iZXN0Q2xpY2thYmxlTm9kZUZvclRvdWNoUG9pbnQocG9p
bnQsIEludFNpemUoYXJlYS53aWR0aCgpIC8gMiwgYXJlYS5oZWlnaHQoKSAvIDIpLCBhZGp1c3Rl
ZFBvaW50LCBhY3RpdmF0aW9uTm9kZSk7CisjZWxzZQogICAgICAgICBIaXRUZXN0UmVzdWx0IHJl
c3VsdCA9IG1haW5mcmFtZS0+ZXZlbnRIYW5kbGVyKCktPmhpdFRlc3RSZXN1bHRBdFBvaW50KG1h
aW5mcmFtZS0+dmlldygpLT53aW5kb3dUb0NvbnRlbnRzKHBvaW50KSwgLyphbGxvd1NoYWRvd0Nv
bnRlbnQqLyBmYWxzZSwgLyppZ25vcmVDbGlwcGluZyovIHRydWUpOwogICAgICAgICBhY3RpdmF0
aW9uTm9kZSA9IHJlc3VsdC5pbm5lck5vZGUoKTsKLQotICAgICAgICBpZiAoIWFjdGl2YXRpb25O
b2RlLT5pc0ZvY3VzYWJsZSgpKQorI2VuZGlmCisgICAgICAgIGlmIChhY3RpdmF0aW9uTm9kZSAm
JiAhYWN0aXZhdGlvbk5vZGUtPmlzRm9jdXNhYmxlKCkpCiAgICAgICAgICAgICBhY3RpdmF0aW9u
Tm9kZSA9IGFjdGl2YXRpb25Ob2RlLT5lbmNsb3NpbmdMaW5rRXZlbnRQYXJlbnRPclNlbGYoKTsK
ICAgICB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9X
ZWJQYWdlLmggYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5oCmlu
ZGV4IDc0NWJmNGQuLmQ2YjFmNzMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nl
c3MvV2ViUGFnZS9XZWJQYWdlLmgKKysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQ
YWdlL1dlYlBhZ2UuaApAQCAtNTYwLDcgKzU2MCw3IEBAIHByaXZhdGU6CiAgICAgdm9pZCB0b3Vj
aEV2ZW50KGNvbnN0IFdlYlRvdWNoRXZlbnQmKTsKICAgICB2b2lkIHRvdWNoRXZlbnRTeW5jRm9y
VGVzdGluZyhjb25zdCBXZWJUb3VjaEV2ZW50JiwgYm9vbCYgaGFuZGxlZCk7CiAjaWYgUExBVEZP
Uk0oUVQpCi0gICAgdm9pZCBoaWdobGlnaHRQb3RlbnRpYWxBY3RpdmF0aW9uKGNvbnN0IFdlYkNv
cmU6OkludFBvaW50Jik7CisgICAgdm9pZCBoaWdobGlnaHRQb3RlbnRpYWxBY3RpdmF0aW9uKGNv
bnN0IFdlYkNvcmU6OkludFBvaW50JiwgY29uc3QgV2ViQ29yZTo6SW50U2l6ZSYpOwogI2VuZGlm
CiAjZW5kaWYKICAgICB2b2lkIGNvbnRleHRNZW51SGlkZGVuKCkgeyBtX2lzU2hvd2luZ0NvbnRl
eHRNZW51ID0gZmFsc2U7IH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3Mv
V2ViUGFnZS9XZWJQYWdlLm1lc3NhZ2VzLmluIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9X
ZWJQYWdlL1dlYlBhZ2UubWVzc2FnZXMuaW4KaW5kZXggNzgxM2FkZi4uMWM0NjQ1OCAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UubWVzc2FnZXMu
aW4KKysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UubWVzc2Fn
ZXMuaW4KQEAgLTQxLDcgKzQxLDcgQEAgbWVzc2FnZXMgLT4gV2ViUGFnZSB7CiAgICAgVG91Y2hF
dmVudChXZWJLaXQ6OldlYlRvdWNoRXZlbnQgZXZlbnQpCiAgICAgVG91Y2hFdmVudFN5bmNGb3JU
ZXN0aW5nKFdlYktpdDo6V2ViVG91Y2hFdmVudCBldmVudCkgLT4gKGJvb2wgaGFuZGxlZCkKICNp
ZiBQTEFURk9STShRVCkKLSAgICBIaWdobGlnaHRQb3RlbnRpYWxBY3RpdmF0aW9uKFdlYkNvcmU6
OkludFBvaW50IHBvaW50KQorICAgIEhpZ2hsaWdodFBvdGVudGlhbEFjdGl2YXRpb24oV2ViQ29y
ZTo6SW50UG9pbnQgcG9pbnQsIFdlYkNvcmU6OkludFNpemUgcmFkaXVzKQogI2VuZGlmCiAjZW5k
aWYKIApkaWZmIC0tZ2l0IGEvVG9vbHMvQ2hhbmdlTG9nIGIvVG9vbHMvQ2hhbmdlTG9nCmluZGV4
IGRjNjRkYmIuLmMzMzQ4YmEgMTAwNjQ0Ci0tLSBhL1Rvb2xzL0NoYW5nZUxvZworKysgYi9Ub29s
cy9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxNCBAQAorMjAxMi0wMy0wMiAgQWxsYW4gU2FuZGZlbGQg
SmVuc2VuICA8YWxsYW4uamVuc2VuQG5va2lhLmNvbT4KKworICAgICAgICBTZWxlY3QgYmVzdCB0
YXJnZXQgZm9yIHRhcCBnZXN0dXJlLgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9Nzg4MDEKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMh
KS4KKworICAgICAgICBBZGQgVE9VQ0hfQURKVVNUTUVOVCB0byBlbmFibGVkIGZlYXR1cmVzLgor
CisgICAgICAgICogcW1ha2UvbWtzcGVjcy9mZWF0dXJlcy9mZWF0dXJlcy5wcmY6CisKIDIwMTIt
MDMtMDIgIFJvYmVydCBLcm9lZ2VyICA8cmprcm9lZ2VAY2hyb21pdW0ub3JnPgogCiAgICAgICAg
IFVwZGF0ZWQgRXZlbnRTZW5kZXIgdG8gc2VuZCBjb21wbGV0ZSBnZXN0dXJlIGV2ZW50cy4KZGlm
ZiAtLWdpdCBhL1Rvb2xzL3FtYWtlL21rc3BlY3MvZmVhdHVyZXMvZmVhdHVyZXMucHJmIGIvVG9v
bHMvcW1ha2UvbWtzcGVjcy9mZWF0dXJlcy9mZWF0dXJlcy5wcmYKaW5kZXggZjZhNmYzYy4uMTZj
YmZiNiAxMDA2NDQKLS0tIGEvVG9vbHMvcW1ha2UvbWtzcGVjcy9mZWF0dXJlcy9mZWF0dXJlcy5w
cmYKKysrIGIvVG9vbHMvcW1ha2UvbWtzcGVjcy9mZWF0dXJlcy9mZWF0dXJlcy5wcmYKQEAgLTg2
LDYgKzg2LDcgQEAgaGF2ZVF0KDQpOnVuaXg6IW1hYzohZW1iZWRkZWQgewogIWNvbnRhaW5zKERF
RklORVMsIEVOQUJMRV9WSURFT19UUkFDSz0uKTogREVGSU5FUyArPSBFTkFCTEVfVklERU9fVFJB
Q0s9MAogIWNvbnRhaW5zKERFRklORVMsIEVOQUJMRV9UT1VDSF9JQ09OX0xPQURJTkc9Lik6IERF
RklORVMgKz0gRU5BQkxFX1RPVUNIX0lDT05fTE9BRElORz0wCiAhY29udGFpbnMoREVGSU5FUywg
RU5BQkxFX0FOSU1BVElPTl9BUEk9Lik6IERFRklORVMgKz0gRU5BQkxFX0FOSU1BVElPTl9BUEk9
MAorIWNvbnRhaW5zKERFRklORVMsIEVOQUJMRV9UT1VDSF9BREpVU1RNRU5UPS4pOiBERUZJTkVT
ICs9IEVOQUJMRV9UT1VDSF9BREpVU1RNRU5UPTEKIAogIyBQb2xpY3kgZGVjaXNpb25zOiBmb3Ig
dXNpbmcgYSBwYXJ0aWN1bGFyIHRoaXJkLXBhcnR5IGxpYnJhcnkgb3Igb3B0aW9uYWwgT1Mgc2Vy
dmljZQogIWNvbnRhaW5zKERFRklORVMsIFdURl9VU0VfUVRfSU1BR0VfREVDT0RFUj0uKTogREVG
SU5FUyArPSBXVEZfVVNFX1FUX0lNQUdFX0RFQ09ERVI9MQpAQCAtMjU2LDYgKzI1Nyw3IEBAIGNv
bnRhaW5zKERFRklORVMsIEVOQUJMRV9WSURFT19UUkFDSz0xKTogRkVBVFVSRV9ERUZJTkVTX0pB
VkFTQ1JJUFQgKz0gRU5BQkxFX1ZJCiBjb250YWlucyhERUZJTkVTLCBFTkFCTEVfREFUQV9UUkFO
U0ZFUl9JVEVNUz0xKTogRkVBVFVSRV9ERUZJTkVTX0pBVkFTQ1JJUFQgKz0gRU5BQkxFX0RBVEFf
VFJBTlNGRVJfSVRFTVM9MQogY29udGFpbnMoREVGSU5FUywgRU5BQkxFX0ZVTExTQ1JFRU5fQVBJ
PTEpOiBGRUFUVVJFX0RFRklORVNfSkFWQVNDUklQVCArPSBFTkFCTEVfRlVMTFNDUkVFTl9BUEk9
MQogY29udGFpbnMoREVGSU5FUywgRU5BQkxFX1JFUVVFU1RfQU5JTUFUSU9OX0ZSQU1FPTEpOiBG
RUFUVVJFX0RFRklORVNfSkFWQVNDUklQVCArPSBFTkFCTEVfUkVRVUVTVF9BTklNQVRJT05fRlJB
TUU9MQorY29udGFpbnMoREVGSU5FUywgRU5BQkxFX1RPVUNIX0FESlVTVE1FTlQ9MSk6IEZFQVRV
UkVfREVGSU5FU19KQVZBU0NSSVBUICs9IEVOQUJMRV9UT1VDSF9BREpVU1RNRU5UPTEKIAogIyBV
c2VkIHRvIGNvbXB1dGUgZGVmYXVsdHMgZm9yIHRoZSBidWlsZC13ZWJraXQgc2NyaXB0CiAjIERv
bid0IHBsYWNlIGFueXRoaW5nIGFmdGVyIHRoaXMhCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>130620</attachid>
            <date>2012-03-07 07:10:56 -0800</date>
            <delta_ts>2012-03-09 05:19:59 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-78801-20120307161054.patch</filename>
            <type>text/plain</type>
            <size>69813</size>
            <attacher name="Allan Sandfeld Jensen">allan.jensen</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTEwMDQ3CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZDc1Y2MzY2IxMDVmMzcx
YzAwMjgzZDlmNDI3NGVlOWIxNWYwOWM2YS4uNjBhYTJlZWUzOTk1NjBjYWI1MTljNmZhYWQ4MTUw
OTBiYTAzM2VkNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDgyIEBACisyMDEyLTAzLTAyICBBbGxh
biBTYW5kZmVsZCBKZW5zZW4gIDxhbGxhbi5qZW5zZW5Abm9raWEuY29tPgorCisgICAgICAgIFNl
bGVjdCBiZXN0IHRhcmdldCBmb3IgdGFwIGdlc3R1cmUuCisgICAgICAgIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD03ODgwMQorCisgICAgICAgIFJldmlld2VkIGJ5IE5P
Qk9EWSAoT09QUyEpLgorCisgICAgICAgIFRoZSBuZXcgQVBJIGlzIGF2YWlsYWJsZSB0aHJvdWdo
IEV2ZW50SGFuZGxlcjo6bm9kZUZvclRhcEdlc3R1cmVBdFRvdWNoUG9pbnQsIGJ1dAorICAgICAg
ICBpbXBsZW1lbnRhdGlvbiBkZXRhaWxzIGhhdmUgYmVlbiBwbGFjZWQgaW4gcGxhdGZvcm0vSGl0
VGVzdFJlc3VsdE1ldHJpY3MuCisKKyAgICAgICAgVGhlIGRlZmF1bHQgaGl0IGRldGVjdGlvbiBp
cyBwZXJmb3JtZWQgYnkgbWVhc3VyaW5nIHRoZSBkaXN0YW5jZSB0byB0aGUgY2VudGVyCisgICAg
ICAgIGxpbmVzIG9mIHRoZSBhYnNvbHV0ZSByZWN0cyBvZiB0aGUgaGl0IG5vZGVzLiBBYnNvbHV0
ZSByZWN0cyBhcmUgdXNlZCBpbnN0ZWFkCisgICAgICAgIG9mIGJvdW5kaW5nIHJlY3RzIHRvIG1h
a2UgaGl0LWRldGVjdGluZyBhZ2FpbnN0IGxpbmtzIG92ZXIgbGluZSBicmVha3MuIERpc3RhbmNl
CisgICAgICAgIHRvIGNlbnRlciBsaW5lIGlzIHVzZWQgdG8gbWFrZSBpdCBlYXNpZXIgdG8gaGl0
IHNtYWxsIGxpbmtzIG5leHQgdG8gbGFyZ2UgbGlua3MuCisgICAgICAgIEZvciBsaW5lLXJlY3Rz
IHRoZSBkaXN0YW5jZSB0byB0aGUgY2VudGVyLWxpbmUgaXMgYSBiZXR0ZXIgZXhwcmVzc2lvbiBv
ZiB0aGUgZGlzdGFuY2UKKyAgICAgICAgdG8gYSByZWN0YW5nbGVzIGNlbnRlciB0aGFuIHRoZSBk
aXN0YW5jZSB0byB0aGUgY2VudGVyLXBvaW50LgorCisgICAgICAgIFRvIHN1cHBvcnQgdGhlIGRp
c3RhbmNlIGNhbGN1bGF0YXRpb24sIHRoaXMgcGF0Y2ggYWxzbyBpbXBsZW1lbnQgYSBjb25zaXN0
ZW50IHNldCBvZgorICAgICAgICBkaXN0YW5jZSBhbmQgYXJlYSBmdW5jdGlvbnMgZm9yIFJlY3Qs
IFBvaW50IGFuZCBTaXplIGNsYXNzZXMuCisKKyAgICAgICAgVGVzdHM6IHRvdWNoYWRqdXN0bWVu
dC9ldmVudC10cmlnZ2VyZWQtd2lkZ2V0cy5odG1sCisgICAgICAgICAgICAgICB0b3VjaGFkanVz
dG1lbnQvaHRtbC1sYWJlbC5odG1sCisgICAgICAgICAgICAgICB0b3VjaGFkanVzdG1lbnQvbmVz
dGVkLXRvdWNoLmh0bWwKKyAgICAgICAgICAgICAgIHRvdWNoYWRqdXN0bWVudC90b3VjaC1pbmxp
bmVzLmh0bWwKKworICAgICAgICAqIFRhcmdldC5wcmk6CisgICAgICAgICogcGFnZS9FdmVudEhh
bmRsZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RXZlbnRIYW5kbGVyOjpoYW5kbGVHZXN0dXJl
VGFwKToKKyAgICAgICAgKFdlYkNvcmU6OkV2ZW50SGFuZGxlcjo6YmVzdENsaWNrYWJsZU5vZGVG
b3JUb3VjaFBvaW50KToKKyAgICAgICAgKiBwYWdlL0V2ZW50SGFuZGxlci5oOgorICAgICAgICAq
IHBhZ2UvVG91Y2hBZGp1c3RtZW50LmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpUb3Vj
aEFkanVzdG1lbnQ6OkhpdFRlc3RRdWFkOjpIaXRUZXN0UXVhZCk6CisgICAgICAgIChXZWJDb3Jl
OjpUb3VjaEFkanVzdG1lbnQ6OkhpdFRlc3RRdWFkOjpub2RlKToKKyAgICAgICAgKFdlYkNvcmU6
OlRvdWNoQWRqdXN0bWVudDo6SGl0VGVzdFF1YWQ6OnF1YWQpOgorICAgICAgICAoV2ViQ29yZTo6
VG91Y2hBZGp1c3RtZW50OjpIaXRUZXN0UXVhZDo6Ym91bmRpbmdCb3gpOgorICAgICAgICAoV2Vi
Q29yZTo6VG91Y2hBZGp1c3RtZW50Ojpub2RlUmVzcG9uZHNUb1RhcEdlc3R1cmUpOgorICAgICAg
ICAoV2ViQ29yZTo6VG91Y2hBZGp1c3RtZW50OjphcHBlbmRBYnNvbHV0ZVF1YWRzRm9yTm9kZVRv
SGl0TGlzdCk6CisgICAgICAgIChXZWJDb3JlOjpUb3VjaEFkanVzdG1lbnQ6OmNvbXBpbGVIaXRM
aXN0KToKKyAgICAgICAgKFdlYkNvcmU6OlRvdWNoQWRqdXN0bWVudDo6ZGlzdGFuY2VUb0hpdFRl
c3RRdWFkKToKKyAgICAgICAgKFdlYkNvcmU6OlRvdWNoQWRqdXN0bWVudDo6aW50ZXJzZWN0aW9u
V2l0aEhpdFRlc3RRdWFkKToKKyAgICAgICAgKFdlYkNvcmU6OlRvdWNoQWRqdXN0bWVudDo6Zmlu
ZE5vZGVXaXRoTG93ZXN0TWV0cmljKToKKyAgICAgICAgKFdlYkNvcmU6OlRvdWNoQWRqdXN0bWVu
dDo6ZmluZE5vZGVXaXRoSGlnaGVzdE1ldHJpYyk6CisgICAgICAgIChXZWJDb3JlOjpmaW5kQmVz
dENhbmRpZGF0ZUZvckdlc3R1cmVUYXApOgorICAgICAgICAqIHBhZ2UvVG91Y2hBZGp1c3RtZW50
Lmg6IEFkZGVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0Zsb2F0UG9pbnQuaDoKKyAg
ICAgICAgKFdlYkNvcmU6OkZsb2F0UG9pbnQ6OkZsb2F0UG9pbnQpOgorICAgICAgICAoV2ViQ29y
ZTo6RmxvYXRQb2ludDo6ZGlzdGFuY2VUb1BvaW50KToKKyAgICAgICAgKFdlYkNvcmU6OkZsb2F0
UG9pbnQ6OmRpc3RhbmNlU3F1YXJlZFRvUG9pbnQpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBo
aWNzL0Zsb2F0UXVhZC5oOgorICAgICAgICAoV2ViQ29yZTo6RmxvYXRRdWFkOjpjZW50ZXIpOgor
ICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0Zsb2F0UmVjdC5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpkaXN0YW5jZVRvSW50ZXJ2YWwpOgorICAgICAgICAoV2ViQ29yZTo6RmxvYXRSZWN0Ojpk
aWZmZXJlbmNlVG9Qb2ludCk6CisgICAgICAgIChXZWJDb3JlOjpGbG9hdFJlY3Q6OmRpc3RhbmNl
VG9Qb2ludCk6CisgICAgICAgIChXZWJDb3JlOjpGbG9hdFJlY3Q6OmRpZmZlcmVuY2VGcm9tQ2Vu
dGVyTGluZVRvUG9pbnQpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0Zsb2F0UmVjdC5o
OgorICAgICAgICAoV2ViQ29yZTo6RmxvYXRSZWN0OjpkaXN0YW5jZVNxdWFyZWRUb1BvaW50KToK
KyAgICAgICAgKFdlYkNvcmU6OkZsb2F0UmVjdDo6ZGlzdGFuY2VTcXVhcmVkRnJvbUNlbnRlckxp
bmVUb1BvaW50KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9GbG9hdFNpemUuaDoKKyAg
ICAgICAgKFdlYkNvcmU6OkZsb2F0U2l6ZTo6YXJlYSk6CisgICAgICAgICogcGxhdGZvcm0vZ3Jh
cGhpY3MvSW50UG9pbnQuaDoKKyAgICAgICAgKFdlYkNvcmU6OkludFBvaW50OjpsZW5ndGhTcXVh
cmVkKToKKyAgICAgICAgKFdlYkNvcmU6OkludFBvaW50OjpkaXN0YW5jZVNxdWFyZWRUb1BvaW50
KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9JbnRSZWN0LmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OmRpc3RhbmNlVG9JbnRlcnZhbCk6CisgICAgICAgIChXZWJDb3JlOjpJbnRSZWN0Ojpk
aWZmZXJlbmNlVG9Qb2ludCk6CisgICAgICAgIChXZWJDb3JlOjpJbnRSZWN0OjpkaWZmZXJlbmNl
RnJvbUNlbnRlckxpbmVUb1BvaW50KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9JbnRS
ZWN0Lmg6CisgICAgICAgIChXZWJDb3JlOjpJbnRSZWN0OjpkaXN0YW5jZVNxdWFyZWRUb1BvaW50
KToKKyAgICAgICAgKFdlYkNvcmU6OkludFJlY3Q6OmRpc3RhbmNlU3F1YXJlZEZyb21DZW50ZXJM
aW5lVG9Qb2ludCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvSW50U2l6ZS5oOgorICAg
ICAgICAoV2ViQ29yZTo6SW50U2l6ZTo6YXJlYSk6CisgICAgICAgIChXZWJDb3JlOjpJbnRTaXpl
OjpkaWFnb25hbExlbmd0aFNxdWFyZWQpOgorICAgICAgICAqIHRlc3RpbmcvSW50ZXJuYWxzLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OkludGVybmFsczo6dG91Y2hQb3NpdGlvbkFkanVzdGVkVG9C
ZXN0Q2xpY2thYmxlTm9kZSk6CisgICAgICAgIChXZWJDb3JlOjpJbnRlcm5hbHM6OnRvdWNoTm9k
ZUFkanVzdGVkVG9CZXN0Q2xpY2thYmxlTm9kZSk6CisgICAgICAgICogdGVzdGluZy9JbnRlcm5h
bHMuaDoKKyAgICAgICAgKiB0ZXN0aW5nL0ludGVybmFscy5pZGw6CisKIDIwMTItMDMtMDcgIFpv
bHRhbiBIb3J2YXRoICA8em9sdGFuQHdlYmtpdC5vcmc+CiAKICAgICAgICAgW1F0XSBBZGQgcW1h
a2UgY29uZmlnIHRlc3RzIGZvciBKUEVHIGFuZCBQTkcgbGlicmFyeQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYktpdDIvQ2hhbmdlTG9nIGIvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCmluZGV4IDk4
ODczODYzMTA1YjgxMDlmMDljZTVlMDU1OWM5ZTAwMjI4OGM5MjAuLmVlOGRlMzJjOTVhOWZhNzY0
MjM2ZDhmZDI1OWVmNmU1YmY1MTE2MjYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL0NoYW5n
ZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cKQEAgLTEsMyArMSwyMyBAQAorMjAx
Mi0wMy0wMiAgQWxsYW4gU2FuZGZlbGQgSmVuc2VuICA8YWxsYW4uamVuc2VuQG5va2lhLmNvbT4K
KworICAgICAgICBTZWxlY3QgYmVzdCB0YXJnZXQgZm9yIHRhcCBnZXN0dXJlLgorICAgICAgICBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9Nzg4MDEKKworICAgICAgICBS
ZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBTZW5kIHJhZGl1cyB0byBoYW5k
bGVQb3RlbnRpYWxTaW5nbGVUYXBFdmVudCBzbyBpdCBjYW4gZG8gdGhlIHNhbWUgaGl0CisgICAg
ICAgIGRldGVjdGlvbiB0aGUgdGFwIGdlc3R1cmUgbGF0ZXIgZG9lcy4KKworICAgICAgICAqIFVJ
UHJvY2Vzcy9XZWJQYWdlUHJveHkuY3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlUHJveHk6
OmhhbmRsZVBvdGVudGlhbEFjdGl2YXRpb24pOgorICAgICAgICAqIFVJUHJvY2Vzcy9XZWJQYWdl
UHJveHkuaDoKKyAgICAgICAgKiBVSVByb2Nlc3MvcXQvUXRXZWJQYWdlRXZlbnRIYW5kbGVyLmNw
cDoKKyAgICAgICAgKFF0V2ViUGFnZUV2ZW50SGFuZGxlcjo6aGFuZGxlUG90ZW50aWFsU2luZ2xl
VGFwRXZlbnQpOgorICAgICAgICAqIFdlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmNwcDoKKyAg
ICAgICAgKFdlYktpdDo6V2ViUGFnZTo6aGlnaGxpZ2h0UG90ZW50aWFsQWN0aXZhdGlvbik6Cisg
ICAgICAgICogV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UuaDoKKyAgICAgICAgKiBXZWJQcm9j
ZXNzL1dlYlBhZ2UvV2ViUGFnZS5tZXNzYWdlcy5pbjoKKwogMjAxMi0wMy0wNSAgQ2FpbyBNYXJj
ZWxvIGRlIE9saXZlaXJhIEZpbGhvICA8Y2Fpby5vbGl2ZWlyYUBvcGVuYm9zc2Eub3JnPgogCiAg
ICAgICAgIFtRdF0gUVdlYk5hdmlnYXRpb25SZXF1ZXN0ICdhY3Rpb24nIHByb3BlcnR5IHNob3Vs
ZCBoYXZlIGFuIGVudW0gdHlwZSBpbnN0ZWFkIG9mIGludApkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvVGFyZ2V0LnByaSBiL1NvdXJjZS9XZWJDb3JlL1RhcmdldC5wcmkKaW5kZXggMzI4NDBm
OGJlYTJmOTY4NTRlZjMyMDZhNmFhYTg0N2RmOGZmODE2MS4uYWIzMzFhYWJkOTg3YTEyYzA3ZWFj
ZTIwMTJkMTJkN2I2NzQyYjk0MyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvVGFyZ2V0LnBy
aQorKysgYi9Tb3VyY2UvV2ViQ29yZS9UYXJnZXQucHJpCkBAIC0xMDM0LDYgKzEwMzQsNyBAQCBT
T1VSQ0VTICs9IFwKICAgICBwYWdlL1NlY3VyaXR5UG9saWN5LmNwcCBcCiAgICAgcGFnZS9TZXR0
aW5ncy5jcHAgXAogICAgIHBhZ2UvU3BhdGlhbE5hdmlnYXRpb24uY3BwIFwKKyAgICBwYWdlL1Rv
dWNoQWRqdXN0bWVudC5jcHAgXAogICAgIHBhZ2UvU3VzcGVuZGFibGVUaW1lci5jcHAgXAogICAg
IHBhZ2UvVXNlckNvbnRlbnRVUkxQYXR0ZXJuLmNwcCBcCiAgICAgcGFnZS9XaW5kb3dGZWF0dXJl
cy5jcHAgXApAQCAtMjEyNiw2ICsyMTI3LDcgQEAgSEVBREVSUyArPSBcCiAgICAgcGFnZS9TcGVl
Y2hJbnB1dExpc3RlbmVyLmggXAogICAgIHBhZ2UvU3BlZWNoSW5wdXRSZXN1bHQuaCBcCiAgICAg
cGFnZS9TcGVlY2hJbnB1dFJlc3VsdExpc3QuaCBcCisgICAgcGFnZS9Ub3VjaEFkanVzdG1lbnQu
aCBcCiAgICAgcGFnZS9XZWJLaXRBbmltYXRpb24uaCBcCiAgICAgcGFnZS9XZWJLaXRBbmltYXRp
b25MaXN0LmggXAogICAgIHBhZ2UvV2luZG93RmVhdHVyZXMuaCBcCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9wYWdlL0V2ZW50SGFuZGxlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL0V2
ZW50SGFuZGxlci5jcHAKaW5kZXggZjEwZTRhYmUxZTJlMTVkNDdlM2UwOWJjODA2MGRkYWYyYTg3
YTA1ZS4uZjg2ZWEyZDliMzJhNTk2NmVhMjQ5OTBmODI4NDRiNTEzMzZjYWMwNyAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvcGFnZS9FdmVudEhhbmRsZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3BhZ2UvRXZlbnRIYW5kbGVyLmNwcApAQCAtNzMsNiArNzMsNyBAQAogI2luY2x1ZGUgIlNj
cm9sbGJhci5oIgogI2luY2x1ZGUgIlNldHRpbmdzLmgiCiAjaW5jbHVkZSAiU3BhdGlhbE5hdmln
YXRpb24uaCIKKyNpbmNsdWRlICJTdGF0aWNIYXNoU2V0Tm9kZUxpc3QuaCIKICNpbmNsdWRlICJT
dHlsZUNhY2hlZEltYWdlLmgiCiAjaW5jbHVkZSAiVGV4dEV2ZW50LmgiCiAjaW5jbHVkZSAiVGV4
dEl0ZXJhdG9yLmgiCkBAIC04OCw2ICs4OSwxMCBAQAogI2luY2x1ZGUgIlBsYXRmb3JtR2VzdHVy
ZUV2ZW50LmgiCiAjZW5kaWYKIAorI2lmIEVOQUJMRShUT1VDSF9BREpVU1RNRU5UKQorI2luY2x1
ZGUgIlRvdWNoQWRqdXN0bWVudC5oIgorI2VuZGlmCisKICNpZiBFTkFCTEUoU1ZHKQogI2luY2x1
ZGUgIlNWR0RvY3VtZW50LmgiCiAjaW5jbHVkZSAiU1ZHRWxlbWVudEluc3RhbmNlLmgiCkBAIC0y
Mzg4LDEwICsyMzkzLDIxIEBAIGJvb2wgRXZlbnRIYW5kbGVyOjpoYW5kbGVHZXN0dXJlVGFwKGNv
bnN0IFBsYXRmb3JtR2VzdHVyZUV2ZW50JiBnZXN0dXJlRXZlbnQpCiB7CiAgICAgLy8gRklYTUU6
IFJlZmFjdG9yIHRoaXMgY29kZSB0byBub3QgaGl0IHRlc3QgbXVsdGlwbGUgdGltZXMgb25jZSBo
aXQgdGVzdGluZwogICAgIC8vIGhhcyBiZWVuIGNvcnJlY3RlZCBhcyBzdWdnZXN0ZWQgYWJvdmUg
aW4gaGFuZGxlR2VzdHVyZUV2ZW50KCkuCisgICAgTGF5b3V0UG9pbnQgYWRqdXN0ZWRQb2ludCA9
IGdlc3R1cmVFdmVudC5wb3NpdGlvbigpOworI2lmIEVOQUJMRShUT1VDSF9BREpVU1RNRU5UKQor
ICAgIGlmICghZ2VzdHVyZUV2ZW50LmFyZWEoKS5pc0VtcHR5KCkpIHsKKyAgICAgICAgTm9kZSog
dGFyZ2V0Tm9kZSA9IDA7CisgICAgICAgIC8vIEZvciBub3cgd2UgdXNlIHRoZSBhZGp1c3RlZCBw
b3NpdGlvbiB0byBlbnN1cmUgdGhlIGxhdGVyIHJlZHVuZGFudCBoaXQtdGVzdHMgaGl0cyB0aGUg
cmlnaHQgbm9kZS4KKyAgICAgICAgYmVzdENsaWNrYWJsZU5vZGVGb3JUb3VjaFBvaW50KGdlc3R1
cmVFdmVudC5wb3NpdGlvbigpLCBJbnRTaXplKGdlc3R1cmVFdmVudC5hcmVhKCkud2lkdGgoKSAv
IDIsIGdlc3R1cmVFdmVudC5hcmVhKCkuaGVpZ2h0KCkgLyAyKSwgYWRqdXN0ZWRQb2ludCwgdGFy
Z2V0Tm9kZSk7CisgICAgICAgIGlmICghdGFyZ2V0Tm9kZSkKKyAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICB9CisjZW5kaWYKKwogICAgIGJvb2wgZGVmYXVsdFByZXZlbnRlZCA9IGZhbHNl
OwotICAgIFBsYXRmb3JtTW91c2VFdmVudCBmYWtlTW91c2VNb3ZlKGdlc3R1cmVFdmVudC5wb3Np
dGlvbigpLCBnZXN0dXJlRXZlbnQuZ2xvYmFsUG9zaXRpb24oKSwgTm9CdXR0b24sIFBsYXRmb3Jt
RXZlbnQ6Ok1vdXNlTW92ZWQsIC8qIGNsaWNrQ291bnQgKi8gMSwgZ2VzdHVyZUV2ZW50LnNoaWZ0
S2V5KCksIGdlc3R1cmVFdmVudC5jdHJsS2V5KCksIGdlc3R1cmVFdmVudC5hbHRLZXkoKSwgZ2Vz
dHVyZUV2ZW50Lm1ldGFLZXkoKSwgZ2VzdHVyZUV2ZW50LnRpbWVzdGFtcCgpKTsKLSAgICBQbGF0
Zm9ybU1vdXNlRXZlbnQgZmFrZU1vdXNlRG93bihnZXN0dXJlRXZlbnQucG9zaXRpb24oKSwgZ2Vz
dHVyZUV2ZW50Lmdsb2JhbFBvc2l0aW9uKCksIExlZnRCdXR0b24sIFBsYXRmb3JtRXZlbnQ6Ok1v
dXNlUHJlc3NlZCwgLyogY2xpY2tDb3VudCAqLyAxLCBnZXN0dXJlRXZlbnQuc2hpZnRLZXkoKSwg
Z2VzdHVyZUV2ZW50LmN0cmxLZXkoKSwgZ2VzdHVyZUV2ZW50LmFsdEtleSgpLCBnZXN0dXJlRXZl
bnQubWV0YUtleSgpLCBnZXN0dXJlRXZlbnQudGltZXN0YW1wKCkpOwotICAgIFBsYXRmb3JtTW91
c2VFdmVudCBmYWtlTW91c2VVcChnZXN0dXJlRXZlbnQucG9zaXRpb24oKSwgZ2VzdHVyZUV2ZW50
Lmdsb2JhbFBvc2l0aW9uKCksIExlZnRCdXR0b24sIFBsYXRmb3JtRXZlbnQ6Ok1vdXNlUmVsZWFz
ZWQsIC8qIGNsaWNrQ291bnQgKi8gMSwgZ2VzdHVyZUV2ZW50LnNoaWZ0S2V5KCksIGdlc3R1cmVF
dmVudC5jdHJsS2V5KCksIGdlc3R1cmVFdmVudC5hbHRLZXkoKSwgZ2VzdHVyZUV2ZW50Lm1ldGFL
ZXkoKSwgZ2VzdHVyZUV2ZW50LnRpbWVzdGFtcCgpKTsKKyAgICBQbGF0Zm9ybU1vdXNlRXZlbnQg
ZmFrZU1vdXNlTW92ZShhZGp1c3RlZFBvaW50LCBnZXN0dXJlRXZlbnQuZ2xvYmFsUG9zaXRpb24o
KSwgTm9CdXR0b24sIFBsYXRmb3JtRXZlbnQ6Ok1vdXNlTW92ZWQsIC8qIGNsaWNrQ291bnQgKi8g
MSwgZ2VzdHVyZUV2ZW50LnNoaWZ0S2V5KCksIGdlc3R1cmVFdmVudC5jdHJsS2V5KCksIGdlc3R1
cmVFdmVudC5hbHRLZXkoKSwgZ2VzdHVyZUV2ZW50Lm1ldGFLZXkoKSwgZ2VzdHVyZUV2ZW50LnRp
bWVzdGFtcCgpKTsKKyAgICBQbGF0Zm9ybU1vdXNlRXZlbnQgZmFrZU1vdXNlRG93bihhZGp1c3Rl
ZFBvaW50LCBnZXN0dXJlRXZlbnQuZ2xvYmFsUG9zaXRpb24oKSwgTGVmdEJ1dHRvbiwgUGxhdGZv
cm1FdmVudDo6TW91c2VQcmVzc2VkLCAvKiBjbGlja0NvdW50ICovIDEsIGdlc3R1cmVFdmVudC5z
aGlmdEtleSgpLCBnZXN0dXJlRXZlbnQuY3RybEtleSgpLCBnZXN0dXJlRXZlbnQuYWx0S2V5KCks
IGdlc3R1cmVFdmVudC5tZXRhS2V5KCksIGdlc3R1cmVFdmVudC50aW1lc3RhbXAoKSk7CisgICAg
UGxhdGZvcm1Nb3VzZUV2ZW50IGZha2VNb3VzZVVwKGFkanVzdGVkUG9pbnQsIGdlc3R1cmVFdmVu
dC5nbG9iYWxQb3NpdGlvbigpLCBMZWZ0QnV0dG9uLCBQbGF0Zm9ybUV2ZW50OjpNb3VzZVJlbGVh
c2VkLCAvKiBjbGlja0NvdW50ICovIDEsIGdlc3R1cmVFdmVudC5zaGlmdEtleSgpLCBnZXN0dXJl
RXZlbnQuY3RybEtleSgpLCBnZXN0dXJlRXZlbnQuYWx0S2V5KCksIGdlc3R1cmVFdmVudC5tZXRh
S2V5KCksIGdlc3R1cmVFdmVudC50aW1lc3RhbXAoKSk7CiAgICAgbW91c2VNb3ZlZChmYWtlTW91
c2VNb3ZlKTsKICAgICBkZWZhdWx0UHJldmVudGVkIHw9IGhhbmRsZU1vdXNlUHJlc3NFdmVudChm
YWtlTW91c2VEb3duKTsKICAgICBkZWZhdWx0UHJldmVudGVkIHw9IGhhbmRsZU1vdXNlUmVsZWFz
ZUV2ZW50KGZha2VNb3VzZVVwKTsKQEAgLTI0MTEsNiArMjQyNywyNCBAQCBib29sIEV2ZW50SGFu
ZGxlcjo6aGFuZGxlR2VzdHVyZVNjcm9sbFVwZGF0ZShjb25zdCBQbGF0Zm9ybUdlc3R1cmVFdmVu
dCYgZ2VzdHVyZQogfQogI2VuZGlmCiAKKyNpZiBFTkFCTEUoVE9VQ0hfQURKVVNUTUVOVCkKK3Zv
aWQgRXZlbnRIYW5kbGVyOjpiZXN0Q2xpY2thYmxlTm9kZUZvclRvdWNoUG9pbnQoY29uc3QgSW50
UG9pbnQmIHRvdWNoQ2VudGVyLCBjb25zdCBJbnRTaXplJiB0b3VjaFJhZGl1cywgSW50UG9pbnQm
IHRhcmdldFBvaW50LCBOb2RlKiYgdGFyZ2V0Tm9kZSkKK3sKKyAgICBIaXRUZXN0UmVxdWVzdDo6
SGl0VGVzdFJlcXVlc3RUeXBlIGhpdFR5cGUgPSBIaXRUZXN0UmVxdWVzdDo6UmVhZE9ubHkgfCBI
aXRUZXN0UmVxdWVzdDo6QWN0aXZlOworICAgIEludFJlY3QgdG91Y2hSZWN0KHRvdWNoQ2VudGVy
IC0gdG91Y2hSYWRpdXMsIEludFNpemUodG91Y2hSYWRpdXMud2lkdGgoKSAqIDIsIHRvdWNoUmFk
aXVzLmhlaWdodCgpICogMikpOworICAgIHRhcmdldE5vZGUgPSAwOworCisgICAgSGl0VGVzdFJl
c3VsdCByZXN1bHQgPSBoaXRUZXN0UmVzdWx0QXRQb2ludCh0b3VjaENlbnRlciwgLyphbGxvd1No
YWRvd0NvbnRlbnQqLyBmYWxzZSwgLyppZ25vcmVDbGlwcGluZyovIGZhbHNlLCBEb250SGl0VGVz
dFNjcm9sbGJhcnMsIGhpdFR5cGUsIHRvdWNoUmFkaXVzKTsKKworICAgIFJlZlB0cjxTdGF0aWNI
YXNoU2V0Tm9kZUxpc3Q+IG5vZGVMaXN0ID0gU3RhdGljSGFzaFNldE5vZGVMaXN0OjphZG9wdChy
ZXN1bHQucmVjdEJhc2VkVGVzdFJlc3VsdCgpKTsKKyAgICBpZiAoIWZpbmRCZXN0Q2xpY2thYmxl
Q2FuZGlkYXRlKHRhcmdldE5vZGUsIHRhcmdldFBvaW50LCB0b3VjaENlbnRlciwgdG91Y2hSZWN0
LCAqbm9kZUxpc3QuZ2V0KCkpKSB7CisgICAgICAgIC8vIERlZmF1bHQgdG8ganVzdCByZXR1cm5p
bmcgaW5uZXJOb25TaGFyZWROb2RlLgorICAgICAgICB0YXJnZXRQb2ludCA9IHRvdWNoQ2VudGVy
OworICAgICAgICB0YXJnZXROb2RlID0gcmVzdWx0LmlubmVyTm9uU2hhcmVkTm9kZSgpOworICAg
IH0KK30KKyNlbmRpZgorCiAjaWYgRU5BQkxFKENPTlRFWFRfTUVOVVMpCiBib29sIEV2ZW50SGFu
ZGxlcjo6c2VuZENvbnRleHRNZW51RXZlbnQoY29uc3QgUGxhdGZvcm1Nb3VzZUV2ZW50JiBldmVu
dCkKIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRXZlbnRIYW5kbGVyLmggYi9T
b3VyY2UvV2ViQ29yZS9wYWdlL0V2ZW50SGFuZGxlci5oCmluZGV4IDA5ODFlNDE3MTE4MWExMjUy
YTc0YTAwZTcxNzBiOTI5ZWE4MDA0NjIuLjQ1OWQyNjllMDU1Y2E3NzlmYzVhNDYzNTY2NjE2MGVh
NGI2ZDQwOTIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRXZlbnRIYW5kbGVyLmgK
KysrIGIvU291cmNlL1dlYkNvcmUvcGFnZS9FdmVudEhhbmRsZXIuaApAQCAtMTY2LDYgKzE2Niwx
MCBAQCBwdWJsaWM6CiAgICAgYm9vbCBoYW5kbGVHZXN0dXJlU2Nyb2xsVXBkYXRlKGNvbnN0IFBs
YXRmb3JtR2VzdHVyZUV2ZW50Jik7CiAjZW5kaWYKIAorI2lmIEVOQUJMRShUT1VDSF9BREpVU1RN
RU5UKQorICAgIHZvaWQgYmVzdENsaWNrYWJsZU5vZGVGb3JUb3VjaFBvaW50KGNvbnN0IEludFBv
aW50JiB0b3VjaENlbnRlciwgY29uc3QgSW50U2l6ZSYgdG91Y2hSYWRpdXMsIEludFBvaW50JiB0
YXJnZXRQb2ludCwgTm9kZSomIHRhcmdldE5vZGUpOworI2VuZGlmCisKICNpZiBFTkFCTEUoQ09O
VEVYVF9NRU5VUykKICAgICBib29sIHNlbmRDb250ZXh0TWVudUV2ZW50KGNvbnN0IFBsYXRmb3Jt
TW91c2VFdmVudCYpOwogICAgIGJvb2wgc2VuZENvbnRleHRNZW51RXZlbnRGb3JLZXkoKTsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvVG91Y2hBZGp1c3RtZW50LmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL3BhZ2UvVG91Y2hBZGp1c3RtZW50LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4yY2I1ZmRmZjMz
YzlhZWNhNWY2OWU0YWY4OWI0YmQwMTRkYjNkYjFlCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNl
L1dlYkNvcmUvcGFnZS9Ub3VjaEFkanVzdG1lbnQuY3BwCkBAIC0wLDAgKzEsMjMzIEBACisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDEyIE5va2lhIENvcnBvcmF0aW9uIGFuZC9vciBpdHMgc3Vic2lk
aWFyeSgtaWVzKQorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2Fu
IHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2Yg
dGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBi
eSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0
aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisg
KiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJl
IHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBp
bXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1Ymxp
YyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2Vp
dmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICog
YWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5v
dCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZy
YW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVT
QS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisKKyNpbmNsdWRlICJUb3VjaEFkanVzdG1l
bnQuaCIKKworI2luY2x1ZGUgIkNvbnRhaW5lck5vZGUuaCIKKyNpbmNsdWRlICJGbG9hdFBvaW50
LmgiCisjaW5jbHVkZSAiRmxvYXRRdWFkLmgiCisjaW5jbHVkZSAiSFRNTExhYmVsRWxlbWVudC5o
IgorI2luY2x1ZGUgIkhUTUxOYW1lcy5oIgorI2luY2x1ZGUgIkludFBvaW50LmgiCisjaW5jbHVk
ZSAiSW50U2l6ZS5oIgorI2luY2x1ZGUgIk5vZGUuaCIKKyNpbmNsdWRlICJSZW5kZXJCb3guaCIK
KyNpbmNsdWRlICJSZW5kZXJPYmplY3QuaCIKKyNpbmNsdWRlICJSZW5kZXJTdHlsZS5oIgorCitu
YW1lc3BhY2UgV2ViQ29yZSB7CisKK25hbWVzcGFjZSBUb3VjaEFkanVzdG1lbnQgeworCitjbGFz
cyBIaXRUZXN0UXVhZCB7CitwdWJsaWM6CisgICAgSGl0VGVzdFF1YWQoTm9kZSogbm9kZSwgY29u
c3QgRmxvYXRRdWFkJiBxdWFkKSA6IG1fbm9kZShub2RlKSwgbV9xdWFkKHF1YWQpIHsgfQorCisg
ICAgTm9kZSogbm9kZSgpIGNvbnN0IHsgcmV0dXJuIG1fbm9kZTsgfQorICAgIEZsb2F0UXVhZCBx
dWFkKCkgY29uc3QgeyByZXR1cm4gbV9xdWFkOyB9CisgICAgTGF5b3V0UmVjdCBib3VuZGluZ0Jv
eCgpIGNvbnN0IHsgcmV0dXJuIG1fcXVhZC5lbmNsb3NpbmdCb3VuZGluZ0JveCgpOyB9CisKK3By
aXZhdGU6CisgICAgTm9kZSogbV9ub2RlOworICAgIEZsb2F0UXVhZCBtX3F1YWQ7Cit9OworCit0
eXBlZGVmIFZlY3RvcjxIaXRUZXN0UXVhZD4gSGl0TGlzdDsKK3R5cGVkZWYgYm9vbCAoKk5vZGVG
aWx0ZXIpKE5vZGUqKTsKK3R5cGVkZWYgZmxvYXQgKCpNZXRyaWMpKGNvbnN0IExheW91dFBvaW50
JiwgY29uc3QgTGF5b3V0UmVjdCYsIGNvbnN0IEhpdFRlc3RRdWFkJik7CisKKy8vIFRha2VzIG5v
bi1jb25zdCBOb2RlKiBiZWNhdXNlIGlzQ29udGVudEVkaXRhYmxlIGlzIGEgbm9uLWNvbnN0IGZ1
bmN0aW9uLgorYm9vbCBub2RlUmVzcG9uZHNUb1RhcEdlc3R1cmUoTm9kZSogbm9kZSkKK3sKKyAg
ICBpZiAobm9kZS0+aXNMaW5rKCkKKyAgICAgICAgfHwgbm9kZS0+aXNDb250ZW50RWRpdGFibGUo
KQorICAgICAgICB8fCBub2RlLT5pc01vdXNlRm9jdXNhYmxlKCkpCisgICAgICAgIHJldHVybiB0
cnVlOworICAgIGlmIChub2RlLT5pc0VsZW1lbnROb2RlKCkpIHsKKyAgICAgICAgRWxlbWVudCog
ZWxlbWVudCA9ICBzdGF0aWNfY2FzdDxFbGVtZW50Kj4obm9kZSk7CisgICAgICAgIGlmIChlbGVt
ZW50LT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6bGFiZWxUYWcpICYmIHN0YXRpY19jYXN0PEhUTUxM
YWJlbEVsZW1lbnQqPihlbGVtZW50KS0+Y29udHJvbCgpKQorICAgICAgICAgICAgcmV0dXJuIHRy
dWU7CisgICAgfQorICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQgaGFzRGVmYXVsdEV2ZW50SGFuZGxl
ciBhbmQgdXNlIHRoYXQgaW5zdGVhZCBvZiBhbGwgb2YgdGhlIGFib3ZlIGNoZWNrcy4KKyAgICBp
ZiAobm9kZS0+aGFzRXZlbnRMaXN0ZW5lcnMoKQorICAgICAgICAmJiAobm9kZS0+aGFzRXZlbnRM
aXN0ZW5lcnMoZXZlbnROYW1lcygpLmNsaWNrRXZlbnQpCisgICAgICAgICAgICB8fCBub2RlLT5o
YXNFdmVudExpc3RlbmVycyhldmVudE5hbWVzKCkuRE9NQWN0aXZhdGVFdmVudCkKKyAgICAgICAg
ICAgIHx8IG5vZGUtPmhhc0V2ZW50TGlzdGVuZXJzKGV2ZW50TmFtZXMoKS5tb3VzZWRvd25FdmVu
dCkKKyAgICAgICAgICAgIHx8IG5vZGUtPmhhc0V2ZW50TGlzdGVuZXJzKGV2ZW50TmFtZXMoKS5t
b3VzZXVwRXZlbnQpCisgICAgICAgICAgICB8fCBub2RlLT5oYXNFdmVudExpc3RlbmVycyhldmVu
dE5hbWVzKCkubW91c2Vtb3ZlRXZlbnQpCisgICAgICAgICAgICAvLyBDaGVja2luZyBmb3IgZm9j
dXMgZXZlbnRzIGlzIG5vdCBuZWNlc3Nhcnkgc2luY2UgdGhleSBjYW4gb25seSBmaXJlIG9uCisg
ICAgICAgICAgICAvLyBmb2N1c2FibGUgZWxlbWVudHMgd2hpY2ggaGF2ZSBhbHJlYWR5IGJlZW4g
Y2FwdHVyZWQgYWJvdmUuCisgICAgICAgICkpCisgICAgICAgIHJldHVybiB0cnVlOworICAgIGlm
IChub2RlLT5yZW5kZXJTdHlsZSgpKSB7CisgICAgICAgIC8vIEFjY2VwdCBub2RlcyB0aGF0IGhh
cyBhIENTUyBlZmZlY3Qgd2hlbiB0b3VjaGVkLgorICAgICAgICBpZiAobm9kZS0+cmVuZGVyU3R5
bGUoKS0+YWZmZWN0ZWRCeUFjdGl2ZVJ1bGVzKCkgfHwgbm9kZS0+cmVuZGVyU3R5bGUoKS0+YWZm
ZWN0ZWRCeUhvdmVyUnVsZXMoKSkKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKyAg
ICByZXR1cm4gZmFsc2U7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBhcHBlbmRBYnNvbHV0ZVF1
YWRzRm9yTm9kZVRvSGl0TGlzdChOb2RlKiBub2RlLCBIaXRMaXN0JiBoaXRsaXN0KQoreworICAg
IC8vIFNpbmNlIHRoZSBub2RlIGlzIGEgcmVzdWx0IG9mIGEgaGl0IHRlc3QsIHdlIGFyZSBhbHJl
YWR5IGVuc3VyZWQgaXQgaGFzIGEgcmVuZGVyZXIuCisgICAgQVNTRVJUKG5vZGUtPnJlbmRlcmVy
KCkpOworCisgICAgVmVjdG9yPEZsb2F0UXVhZD4gcXVhZHM7CisgICAgbm9kZS0+cmVuZGVyZXIo
KS0+YWJzb2x1dGVRdWFkcyhxdWFkcyk7CisKKyAgICBWZWN0b3I8RmxvYXRRdWFkPjo6Y29uc3Rf
aXRlcmF0b3IgaXQgPSBxdWFkcy5iZWdpbigpOworICAgIGNvbnN0IFZlY3RvcjxGbG9hdFF1YWQ+
Ojpjb25zdF9pdGVyYXRvciBlbmQgPSBxdWFkcy5lbmQoKTsKKyAgICBmb3IgKDsgaXQgIT0gZW5k
OyArK2l0KQorICAgICAgICBoaXRsaXN0LmFwcGVuZChIaXRUZXN0UXVhZChub2RlLCAqaXQpKTsK
K30KKworLy8gQ29tcGlsZSBhIGxpc3Qgb2YgYWJzb2x1dGUgcmVjdHMgcmVwcmVzZW5kaW5nIG5v
ZGVzIHJlc3BvbmRpbmcgdGhlIHRhcCBnZXN0dXJlLgordm9pZCBjb21waWxlSGl0TGlzdChjb25z
dCBOb2RlTGlzdCYgaW50ZXJzZWN0ZWROb2RlcywgSGl0TGlzdCYgaGl0bGlzdCwgTm9kZUZpbHRl
ciBub2RlRmlsdGVyKQoreworICAgIC8vIEZpbmQgY2FuZGlkYXRlcyByZXNwb25kaW5nIHRvIHRh
cCBnZXN0dXJlIGV2ZW50cyBpbiBPKG4pIHRpbWUuCisgICAgSGFzaE1hcDxOb2RlKiwgTm9kZSo+
IHJlc3BvbmRlck1hcDsKKyAgICBIYXNoU2V0PE5vZGUqPiBhbmNlc3RvcnNUb1Jlc3BvbmRlcnNT
ZXQ7CisgICAgVmVjdG9yPE5vZGUqPiBjYW5kaWRhdGVzOworCisgICAgY29uc3QgdW5zaWduZWQg
aW50IGxlbmd0aCA9IGludGVyc2VjdGVkTm9kZXMubGVuZ3RoKCk7CisgICAgZm9yICh1bnNpZ25l
ZCBpbnQgaSA9IDA7IGkgPCBsZW5ndGg7ICsraSkgeworICAgICAgICBOb2RlKiBub2RlID0gaW50
ZXJzZWN0ZWROb2Rlcy5pdGVtKGkpOworICAgICAgICBpZiAocmVzcG9uZGVyTWFwLmNvbnRhaW5z
KG5vZGUpKQorICAgICAgICAgICAgLy8gU2tpcCBub2RlcyB0aGF0IGFyZSBkaXJlY3QgYW5jZXN0
b3JzIG9mIG90aGVyIGNhbmRpZGF0ZXMuIFRoZXkgd291bGQgaGl0LXRlc3QgYWdhaW5zdCB0aGUg
c2FtZSBhYnNvbHV0ZSBxdWFkcy4KKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICBWZWN0
b3I8Tm9kZSo+IGFuY2VzdG9yczsKKyAgICAgICAgTm9kZSogcmVzcG9uZGluZ05vZGUgPSAwOwor
ICAgICAgICBmb3IgKDsgbm9kZTsgbm9kZSA9IG5vZGUtPnBhcmVudE9ySG9zdE5vZGUoKSkgewor
ICAgICAgICAgICAgLy8gQ2hlY2sgaWYgd2UgYWxyZWFkeSBoYXZlIGEgcmVzdWx0IGZvciBhIGNv
bW1vbiBhbmNlc3RvciBmcm9tIGFub3RoZXIgY2FuZGlkYXRlLgorICAgICAgICAgICAgcmVzcG9u
ZGluZ05vZGUgPSByZXNwb25kZXJNYXAuZ2V0KG5vZGUpOworICAgICAgICAgICAgaWYgKHJlc3Bv
bmRpbmdOb2RlKQorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgYW5jZXN0b3Jz
LmFwcGVuZChub2RlKTsKKyAgICAgICAgICAgIC8vIENoZWNrIGlmIHRoZSBub2RlIGZpbHRlciBh
cHBsaWVzLCB3aGljaCB3b3VsZCBtZWFuIHdlIGhhdmUgZm91bmQgYSByZXNwb25kaW5nIG5vZGUu
CisgICAgICAgICAgICBpZiAobm9kZUZpbHRlcihub2RlKSkgeworICAgICAgICAgICAgICAgIHJl
c3BvbmRpbmdOb2RlID0gbm9kZTsKKyAgICAgICAgICAgICAgICAvLyBOb3cgdGhhdCB3ZSBoYXZl
IHRoZSByZXNwb25kZXIsIHNldCB0aGUgcmVzcG9uZGVyIGZvciBhbGwgdGhlIG5vZGVzIHNlZW4g
c28gZmFyLgorICAgICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaW50IGkgPSAwOyBpIDwgYW5j
ZXN0b3JzLnNpemUoKTsgaSsrKQorICAgICAgICAgICAgICAgICAgICByZXNwb25kZXJNYXAuYWRk
KGFuY2VzdG9yc1tpXSwgbm9kZSk7CisgICAgICAgICAgICAgICAgLy8gVGhlIGNvbnRpbnVlIHRo
ZSBpdGVyYXRpb24gdG8gY29sbGVjdCB0aGUgYW5jZXN0b3JzIG9mIHRoZSByZXNwb25kZXIuCisg
ICAgICAgICAgICAgICAgZm9yIChub2RlID0gbm9kZS0+cGFyZW50T3JIb3N0Tm9kZSgpOyBub2Rl
OyBub2RlID0gbm9kZS0+cGFyZW50T3JIb3N0Tm9kZSgpKSB7CisgICAgICAgICAgICAgICAgICAg
IHBhaXI8SGFzaFNldDxOb2RlKj46Oml0ZXJhdG9yLCBib29sPiB0bXAgPSBhbmNlc3RvcnNUb1Jl
c3BvbmRlcnNTZXQuYWRkKG5vZGUpOworICAgICAgICAgICAgICAgICAgICBpZiAoIXRtcC5zZWNv
bmQpCisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9Cisg
ICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAg
aWYgKHJlc3BvbmRpbmdOb2RlKQorICAgICAgICAgICAgY2FuZGlkYXRlcy5hcHBlbmQoaW50ZXJz
ZWN0ZWROb2Rlcy5pdGVtKGkpKTsKKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAvLyBJbnNl
cnQgdGhlIG5vZGVzIHdpdGggbWlzc2luZyByZXNwb25kZXJzIGludG8gdGhlIHJlc3BvbmRlci1t
YXAgZm9yIGZhc3QgcmVqZWN0aW9uIG9mIGxhdGVyIGNhbmRpZGF0ZXMuCisgICAgICAgICAgICBm
b3IgKHVuc2lnbmVkIGludCBpID0gMDsgaSA8IGFuY2VzdG9ycy5zaXplKCk7IGkrKykKKyAgICAg
ICAgICAgICAgICByZXNwb25kZXJNYXAuYWRkKGFuY2VzdG9yc1tpXSwgMCk7CisgICAgICAgIH0K
KyAgICB9CisKKyAgICAvLyBXZSBjb21waWxlIHRoZSBsaXN0IG9mIGNvbXBvbmVudCBhYnNvbHV0
ZSBxdWFkcyBpbnN0ZWFkIG9mIHVzaW5nIHRoZSBib3VuZGluZyByZWN0CisgICAgLy8gdG8gYmUg
YWJsZSB0byBwZXJmb3JtIGJldHRlciBoaXQtdGVzdGluZyBvbiBpbmxpbmUgbGlua3Mgb24gbGlu
ZS1icmVha3MuCisgICAgVmVjdG9yPE5vZGUqPjo6Y29uc3RfaXRlcmF0b3IgaXQyID0gY2FuZGlk
YXRlcy5iZWdpbigpOworICAgIGNvbnN0IFZlY3RvcjxOb2RlKj46OmNvbnN0X2l0ZXJhdG9yIGVu
ZDIgPSBjYW5kaWRhdGVzLmVuZCgpOworICAgIGZvciAoOyBpdDIgIT0gZW5kMjsgKytpdDIpIHsK
KyAgICAgICAgLy8gU2tpcCBub2RlcyB3aG9zIHJlc3BvbmRlcnMgYXJlIGFuY2VzdG9ycyBvZiBv
dGhlciByZXNwb25kZXJzLiBUaGlzIGdpdmVzIHByZWZlcmVuY2UgdG8gdGhlIGlubmVyLW1vc3Qg
ZXZlbnQtaGFuZGxlcnMuCisgICAgICAgIC8vIFNvIHRoYXQgYSBsaW5rIGlzIGFsd2F5cyBwcmVm
ZXJyZWQgZXZlbiB3aGVuIGNvbnRhaW5lZCBpbiBhbiBlbGVtZW50IHRoYXQgbW9uaXRvcnMgYWxs
IGNsaWNrLWV2ZW50cy4KKyAgICAgICAgTm9kZSogcmVzcG9uZGluZ05vZGUgPSByZXNwb25kZXJN
YXAuZ2V0KCppdDIpOworICAgICAgICBBU1NFUlQocmVzcG9uZGluZ05vZGUpOworICAgICAgICBp
ZiAoYW5jZXN0b3JzVG9SZXNwb25kZXJzU2V0LmNvbnRhaW5zKHJlc3BvbmRpbmdOb2RlKSkKKyAg
ICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICBhcHBlbmRBYnNvbHV0ZVF1YWRzRm9yTm9kZVRv
SGl0TGlzdCgqaXQyLCBoaXRsaXN0KTsKKyAgICB9Cit9CisKKy8vIFJldHVybnMgdGhlIGRpc3Rh
bmNlIHNxdWFyZWQgdG8gdGhlIGJvdW5kaW5nIGJveCBjZW50ZXJsaW5lLgorZmxvYXQgZGlzdGFu
Y2VUb0hpdFRlc3RRdWFkKGNvbnN0IExheW91dFBvaW50JiB0b3VjaEhvdHNwb3QsIGNvbnN0IExh
eW91dFJlY3QmLCBjb25zdCBIaXRUZXN0UXVhZCYgaGl0VGVzdFF1YWQpCit7CisgICAgLy8gVXNp
bmcgdGhlIGJvdW5kaW5nIGJveCBtZWFucyB0aGUgZGlzdGFuY2UgdG8gY2VudGVybGluZSBpcyBs
ZXNzIG1lYW5pbmdmdWwgZm9yIHRyYW5zZm9ybWVkIHJlY3RhbmdsZXMsCisgICAgLy8gYnV0IGNh
bGN1bGF0aW5nIHRoZSBkaXN0YW5jZSB0byBxdWFkcyBjYW4gYmUgdmVyeSBleHBlbnNpdmUsIGFu
ZCB3ZSBkbyBub3Qgd2FudCB0byBjYWxjdWxjYXRlCisgICAgLy8gcXVhZCBiYXNlZCBkaXN0YW5j
ZXMgZm9yIHVudHJhbnNmb3JtZWQgcmVjdGFuZ2xlcy4KKyAgICBJbnRSZWN0IHJlY3QgPSBoaXRU
ZXN0UXVhZC5ib3VuZGluZ0JveCgpOworCisgICAgcmV0dXJuIHJlY3QuZGlzdGFuY2VTcXVhcmVk
RnJvbUNlbnRlckxpbmVUb1BvaW50KHRvdWNoSG90c3BvdCk7Cit9CisKKy8vIFJldHVybnMgdGhl
IGFyZWEgb2YgdGhlIGludGVyc2VjdGlvbi4KK2Zsb2F0IGludGVyc2VjdGlvbldpdGhIaXRUZXN0
UXVhZChjb25zdCBMYXlvdXRQb2ludCYsIGNvbnN0IExheW91dFJlY3QmIHRvdWNoUmVjdCwgY29u
c3QgSGl0VGVzdFF1YWQmIGhpdFRlc3RRdWFkKQoreworICAgIEludFJlY3QgcmVjdCA9IGhpdFRl
c3RRdWFkLmJvdW5kaW5nQm94KCk7CisgICAgSW50UmVjdCBpbnRlcnNlY3Rpb24gPSByZWN0Owor
ICAgIHJlY3QuaW50ZXJzZWN0KHRvdWNoUmVjdCk7CisKKyAgICByZXR1cm4gaW50ZXJzZWN0aW9u
LnNpemUoKS5hcmVhKCk7Cit9CisKK2Jvb2wgZmluZE5vZGVXaXRoTG93ZXN0TWV0cmljKE5vZGUq
JiB0YXJnZXROb2RlLCBMYXlvdXRQb2ludCYgdGFyZ2V0UG9pbnQsIGNvbnN0IExheW91dFBvaW50
JiB0b3VjaEhvdHNwb3QsIGNvbnN0IExheW91dFJlY3QmIHRvdWNoQXJlYSwgSGl0TGlzdCYgaGl0
bGlzdCwgTWV0cmljIG1ldHJpYykKK3sKKyAgICB0YXJnZXROb2RlID0gMDsKKworICAgIGZsb2F0
IGJlc3RNZXRyaWMgPSBJTkZJTklUWTsKKyAgICBIaXRMaXN0Ojpjb25zdF9pdGVyYXRvciBpdCA9
IGhpdGxpc3QuYmVnaW4oKTsKKyAgICBIaXRMaXN0Ojpjb25zdF9pdGVyYXRvciBlbmQgPSBoaXRs
aXN0LmVuZCgpOworICAgIGZvciAoOyBpdCAhPSBlbmQ7ICsraXQpIHsKKyAgICAgICAgTm9kZSog
aGl0Tm9kZSA9IGl0LT5ub2RlKCk7CisgICAgICAgIGZsb2F0IGhpdE1ldHJpYyA9IG1ldHJpYyh0
b3VjaEhvdHNwb3QsIHRvdWNoQXJlYSwgKml0KTsKKyAgICAgICAgaWYgKGhpdE1ldHJpYyA8IGJl
c3RNZXRyaWMpIHsKKyAgICAgICAgICAgIHRhcmdldFBvaW50ID0gcm91bmRlZExheW91dFBvaW50
KGl0LT5xdWFkKCkuY2VudGVyKCkpOworICAgICAgICAgICAgdGFyZ2V0Tm9kZSA9IGhpdE5vZGU7
CisgICAgICAgICAgICBiZXN0TWV0cmljID0gaGl0TWV0cmljOworICAgICAgICB9CisgICAgfQor
CisgICAgcmV0dXJuICh0YXJnZXROb2RlKTsKK30KKworYm9vbCBmaW5kTm9kZVdpdGhIaWdoZXN0
TWV0cmljKE5vZGUqJiB0YXJnZXROb2RlLCBMYXlvdXRQb2ludCYgdGFyZ2V0UG9pbnQsIGNvbnN0
IExheW91dFBvaW50JiB0b3VjaEhvdHNwb3QsIGNvbnN0IExheW91dFJlY3QmIHRvdWNoQXJlYSwg
SGl0TGlzdCYgaGl0bGlzdCwgTWV0cmljIG1ldHJpYykKK3sKKyAgICB0YXJnZXROb2RlID0gMDsK
KworICAgIGZsb2F0IGJlc3RNZXRyaWMgPSAwOworICAgIEhpdExpc3Q6OmNvbnN0X2l0ZXJhdG9y
IGl0ID0gaGl0bGlzdC5iZWdpbigpOworICAgIEhpdExpc3Q6OmNvbnN0X2l0ZXJhdG9yIGVuZCA9
IGhpdGxpc3QuZW5kKCk7CisgICAgZm9yICg7IGl0ICE9IGVuZDsgKytpdCkgeworICAgICAgICBO
b2RlKiBoaXROb2RlID0gaXQtPm5vZGUoKTsKKyAgICAgICAgZmxvYXQgaGl0TWV0cmljID0gbWV0
cmljKHRvdWNoSG90c3BvdCwgdG91Y2hBcmVhLCAqaXQpOworICAgICAgICBpZiAoaGl0TWV0cmlj
ID4gYmVzdE1ldHJpYykgeworICAgICAgICAgICAgdGFyZ2V0UG9pbnQgPSByb3VuZGVkTGF5b3V0
UG9pbnQoaXQtPnF1YWQoKS5jZW50ZXIoKSk7CisgICAgICAgICAgICB0YXJnZXROb2RlID0gaGl0
Tm9kZTsKKyAgICAgICAgICAgIGJlc3RNZXRyaWMgPSBoaXRNZXRyaWM7CisgICAgICAgIH0KKyAg
ICB9CisKKyAgICByZXR1cm4gKHRhcmdldE5vZGUpOworfQorCit9IC8vIG5hbWVzcGFjZSBUb3Vj
aEFkanVzdG1lbnQKKworYm9vbCBmaW5kQmVzdENsaWNrYWJsZUNhbmRpZGF0ZShOb2RlKiYgdGFy
Z2V0Tm9kZSwgTGF5b3V0UG9pbnQmIHRhcmdldFBvaW50LCBjb25zdCBMYXlvdXRQb2ludCYgdG91
Y2hIb3RzcG90LCBjb25zdCBMYXlvdXRSZWN0JiB0b3VjaEFyZWEsIGNvbnN0IE5vZGVMaXN0JiBu
b2RlTGlzdCkKK3sKKyAgICBUb3VjaEFkanVzdG1lbnQ6OkhpdExpc3QgaGl0bGlzdDsKKyAgICBU
b3VjaEFkanVzdG1lbnQ6OmNvbXBpbGVIaXRMaXN0KG5vZGVMaXN0LCBoaXRsaXN0LCBUb3VjaEFk
anVzdG1lbnQ6Om5vZGVSZXNwb25kc1RvVGFwR2VzdHVyZSk7CisgICAgcmV0dXJuIFRvdWNoQWRq
dXN0bWVudDo6ZmluZE5vZGVXaXRoTG93ZXN0TWV0cmljKHRhcmdldE5vZGUsIHRhcmdldFBvaW50
LCB0b3VjaEhvdHNwb3QsIHRvdWNoQXJlYSwgaGl0bGlzdCwgVG91Y2hBZGp1c3RtZW50OjpkaXN0
YW5jZVRvSGl0VGVzdFF1YWQpOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL1RvdWNoQWRqdXN0bWVudC5oIGIvU291cmNlL1dlYkNv
cmUvcGFnZS9Ub3VjaEFkanVzdG1lbnQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5mYzZiODU1NTkxYTJiNjcyMzgy
NDc1YWM3ZmQ2MzQzZjc4NDJiYThiCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUv
cGFnZS9Ub3VjaEFkanVzdG1lbnQuaApAQCAtMCwwICsxLDM1IEBACisvKgorICogQ29weXJpZ2h0
IChDKSAyMDEyIE5va2lhIENvcnBvcmF0aW9uIGFuZC9vciBpdHMgc3Vic2lkaWFyeSgtaWVzKQor
ICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0
ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJy
YXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBT
b2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwg
b3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJh
cnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAq
IGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJh
bnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBV
UlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZv
ciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBv
ZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0
aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8K
KyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVl
dCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisj
aWZuZGVmIFRvdWNoQWRqdXN0bWVudF9oCisjZGVmaW5lIFRvdWNoQWRqdXN0bWVudF9oCisKKyNp
bmNsdWRlICJMYXlvdXRUeXBlcy5oIgorI2luY2x1ZGUgIk5vZGUuaCIKKyNpbmNsdWRlICJOb2Rl
TGlzdC5oIgorI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgewor
Citib29sIGZpbmRCZXN0Q2xpY2thYmxlQ2FuZGlkYXRlKE5vZGUqJiB0YXJnZXROb2RlLCBMYXlv
dXRQb2ludCYgdGFyZ2V0UG9pbnQsIGNvbnN0IExheW91dFBvaW50JiB0b3VjaEhvdHNwb3QsIGNv
bnN0IExheW91dFJlY3QmIHRvdWNoQXJlYSwgY29uc3QgTm9kZUxpc3QmKTsKKy8vIEZJWE1FOiBJ
bXBsZW1lbnQgdGhlIHNpbWlsYXIgZnVuY3Rpb25zIGZvciBvdGhlciBnZXN0dXJlcyBoZXJlIGFz
IHdlbGwuCisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9GbG9hdFBvaW50LmggYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9GbG9hdFBvaW50LmgKaW5kZXggYTYwMWE5ZGZmYWExODg5
Y2YzNDM5YjJkOGZmNGI1ZTA2NDc1ZWY3YS4uZjZjZTM3YmQxZWNlNmZmMmYxZmFhYTY1ZjhkODE4
ZWRkMjM1ZDRlNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
RmxvYXRQb2ludC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0Zsb2F0
UG9pbnQuaApAQCAtNzcsNiArNzcsNyBAQCBwdWJsaWM6CiAgICAgRmxvYXRQb2ludChmbG9hdCB4
LCBmbG9hdCB5KSA6IG1feCh4KSwgbV95KHkpIHsgfQogICAgIEZsb2F0UG9pbnQoY29uc3QgSW50
UG9pbnQmKTsKICAgICBGbG9hdFBvaW50KGNvbnN0IEZyYWN0aW9uYWxMYXlvdXRQb2ludCYpOwor
ICAgIGV4cGxpY2l0IEZsb2F0UG9pbnQoRmxvYXRTaXplIHNpemUpIDogbV94KHNpemUud2lkdGgo
KSksIG1feShzaXplLmhlaWdodCgpKSB7IH0KIAogICAgIHN0YXRpYyBGbG9hdFBvaW50IHplcm8o
KSB7IHJldHVybiBGbG9hdFBvaW50KCk7IH0KIApAQCAtMTM4LDYgKzEzOSw5IEBAIHB1YmxpYzoK
ICAgICAgICAgcmV0dXJuIG1feCAqIG1feCArIG1feSAqIG1feTsKICAgICB9CiAKKyAgICBmbG9h
dCBkaXN0YW5jZVRvUG9pbnQoY29uc3QgRmxvYXRQb2ludCYpIGNvbnN0OworICAgIGZsb2F0IGRp
c3RhbmNlU3F1YXJlZFRvUG9pbnQoY29uc3QgRmxvYXRQb2ludCYpIGNvbnN0OworCiAgICAgRmxv
YXRQb2ludCBleHBhbmRlZFRvKGNvbnN0IEZsb2F0UG9pbnQmIG90aGVyKSBjb25zdAogICAgIHsK
ICAgICAgICAgcmV0dXJuIEZsb2F0UG9pbnQoc3RkOjptYXgobV94LCBvdGhlci5tX3gpLCBzdGQ6
Om1heChtX3ksIG90aGVyLm1feSkpOwpAQCAtMjQxLDYgKzI0NSwxNyBAQCBpbmxpbmUgZmxvYXQg
b3BlcmF0b3IqKGNvbnN0IEZsb2F0UG9pbnQmIGEsIGNvbnN0IEZsb2F0UG9pbnQmIGIpCiAgICAg
cmV0dXJuIGEuZG90KGIpOwogfQogCitpbmxpbmUgZmxvYXQgRmxvYXRQb2ludDo6ZGlzdGFuY2VU
b1BvaW50KGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50KSBjb25zdAoreworICAgIHJldHVybiAoKnRo
aXMgLSBwb2ludCkuZGlhZ29uYWxMZW5ndGgoKTsKK30KKworaW5saW5lIGZsb2F0IEZsb2F0UG9p
bnQ6OmRpc3RhbmNlU3F1YXJlZFRvUG9pbnQoY29uc3QgRmxvYXRQb2ludCYgcG9pbnQpIGNvbnN0
Cit7CisgICAgcmV0dXJuICgqdGhpcyAtIHBvaW50KS5kaWFnb25hbExlbmd0aFNxdWFyZWQoKTsK
K30KKworCiBpbmxpbmUgSW50UG9pbnQgcm91bmRlZEludFBvaW50KGNvbnN0IEZsb2F0UG9pbnQm
IHApCiB7CiAgICAgcmV0dXJuIEludFBvaW50KHN0YXRpY19jYXN0PGludD4ocm91bmRmKHAueCgp
KSksIHN0YXRpY19jYXN0PGludD4ocm91bmRmKHAueSgpKSkpOwpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRmxvYXRRdWFkLmggYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9GbG9hdFF1YWQuaAppbmRleCBiNWUyYThjYTRkNTU0MjBiNGU1M2U0
OWMyZDM2YTY5MjQwMWFiMDlkLi5iZmI3OTRkZWY4NTg2ZmJjNmIxYzI1MTBjZjEyMzJiMTBiOTgw
ODRjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9GbG9hdFF1
YWQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9GbG9hdFF1YWQuaApA
QCAtODgsNiArODgsMTMgQEAgcHVibGljOgogICAgIC8vIGZyb20gdHJhbnNmb3JtZWQgcmVjdHMu
CiAgICAgYm9vbCBjb250YWluc1F1YWQoY29uc3QgRmxvYXRRdWFkJikgY29uc3Q7CiAKKyAgICAv
LyBUaGUgY2VudGVyIG9mIHRoZSBxdWFkLiBJZiB0aGUgcXVhZCBpcyB0aGUgcmVzdWx0IG9mIGEg
YWZmaW5lLXRyYW5zZm9ybWVkIHJlY3RhbmdsZSB0aGlzIGlzIHRoZSBzYW1lIGFzIHRoZSBvcmln
aW5hbCBjZW50ZXIgdHJhbnNmb3JtZWQuCisgICAgRmxvYXRQb2ludCBjZW50ZXIoKSBjb25zdAor
ICAgIHsKKyAgICAgICAgcmV0dXJuIEZsb2F0UG9pbnQoKG1fcDEueCgpICsgbV9wMi54KCkgKyBt
X3AzLngoKSArIG1fcDQueCgpKSAvIDQuMCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgKG1f
cDEueSgpICsgbV9wMi55KCkgKyBtX3AzLnkoKSArIG1fcDQueSgpKSAvIDQuMCk7CisgICAgfQor
CiAgICAgRmxvYXRSZWN0IGJvdW5kaW5nQm94KCkgY29uc3Q7CiAgICAgSW50UmVjdCBlbmNsb3Np
bmdCb3VuZGluZ0JveCgpIGNvbnN0CiAgICAgewpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvRmxvYXRSZWN0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL0Zsb2F0UmVjdC5jcHAKaW5kZXggNzM3NDczYzNmNTM3MDMwMjU3ZjE1ZGE4M2Qz
NDhjZGQ5YTUyODQ3Mi4uOTA5YzE4NWQ2MzcyMjkwNjMyODNjMjYzOWQzODRlNGRjNGJkYjUwYiAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRmxvYXRSZWN0LmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9GbG9hdFJlY3QuY3BwCkBA
IC0xNDIsNiArMTQyLDQwIEBAIHZvaWQgRmxvYXRSZWN0OjpzY2FsZShmbG9hdCBzeCwgZmxvYXQg
c3kpCiAgICAgbV9zaXplLnNldEhlaWdodChoZWlnaHQoKSAqIHN5KTsKIH0KIAorc3RhdGljIGlu
bGluZSBmbG9hdCBkaXN0YW5jZVRvSW50ZXJ2YWwoZmxvYXQgcG9zLCBmbG9hdCBzdGFydCwgZmxv
YXQgZW5kKQoreworICAgIGlmIChwb3MgPCBzdGFydCkKKyAgICAgICAgcmV0dXJuIHN0YXJ0IC0g
cG9zOworICAgIGlmIChwb3MgPiBlbmQpCisgICAgICAgIHJldHVybiBlbmQgLSBwb3M7CisgICAg
cmV0dXJuIDA7Cit9CisKK0Zsb2F0U2l6ZSBGbG9hdFJlY3Q6OmRpZmZlcmVuY2VUb1BvaW50KGNv
bnN0IEZsb2F0UG9pbnQmIHBvaW50KSBjb25zdAoreworICAgIGZsb2F0IHhkaXN0YW5jZSA9IGRp
c3RhbmNlVG9JbnRlcnZhbChwb2ludC54KCksIHgoKSwgbWF4WCgpKTsKKyAgICBmbG9hdCB5ZGlz
dGFuY2UgPSBkaXN0YW5jZVRvSW50ZXJ2YWwocG9pbnQueSgpLCB5KCksIG1heFkoKSk7CisgICAg
cmV0dXJuIEZsb2F0U2l6ZSh4ZGlzdGFuY2UsIHlkaXN0YW5jZSk7Cit9CisKK2Zsb2F0IEZsb2F0
UmVjdDo6ZGlzdGFuY2VUb1BvaW50KGNvbnN0IEZsb2F0UG9pbnQmIHApIGNvbnN0Cit7CisgICAg
cmV0dXJuIHNxcnRmKGRpc3RhbmNlU3F1YXJlZFRvUG9pbnQocCkpOworfQorCitGbG9hdFNpemUg
RmxvYXRSZWN0OjpkaWZmZXJlbmNlRnJvbUNlbnRlckxpbmVUb1BvaW50KGNvbnN0IEZsb2F0UG9p
bnQmIHBvaW50KSBjb25zdAoreworICAgIC8vIFRoZSBjZW50ZXItbGluZSBpcyB0aGUgbmF0dXJh
bCBjZW50ZXIgb2YgYSByZWN0YW5nbGUuIEl0IGhhcyBhbiBlcXVhbCBkaXN0YW5jZSB0byBhbGwg
c2lkZXMgb2YgdGhlIHJlY3RhbmdsZS4KKyAgICBGbG9hdFBvaW50IGNlbnRlclBvaW50ID0gY2Vu
dGVyKCk7CisgICAgZmxvYXQgeGRpc3RhbmNlID0gY2VudGVyUG9pbnQueCgpIC0gcG9pbnQueCgp
OworICAgIGZsb2F0IHlkaXN0YW5jZSA9IGNlbnRlclBvaW50LnkoKSAtIHBvaW50LnkoKTsKKyAg
ICBpZiAod2lkdGgoKSA+IGhlaWdodCgpKQorICAgICAgICB4ZGlzdGFuY2UgPSBkaXN0YW5jZVRv
SW50ZXJ2YWwocG9pbnQueCgpLCB4KCkgKyAoaGVpZ2h0KCkgLyAyLjApLCBtYXhYKCkgLSAoaGVp
Z2h0KCkgLyAyLjApKTsKKyAgICBlbHNlCisgICAgICAgIHlkaXN0YW5jZSA9IGRpc3RhbmNlVG9J
bnRlcnZhbChwb2ludC55KCksIHkoKSArICh3aWR0aCgpIC8gMi4wKSwgbWF4WSgpIC0gKHdpZHRo
KCkgLyAyLjApKTsKKyAgICByZXR1cm4gRmxvYXRTaXplKHhkaXN0YW5jZSwgeWRpc3RhbmNlKTsK
K30KKwogRmxvYXRSZWN0IHVuaW9uUmVjdChjb25zdCBWZWN0b3I8RmxvYXRSZWN0PiYgcmVjdHMp
CiB7CiAgICAgRmxvYXRSZWN0IHJlc3VsdDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL0Zsb2F0UmVjdC5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvRmxvYXRSZWN0LmgKaW5kZXggNjZiMjlmODRiNjUxMDQwZmFmMzZkMDNjMzUyMDVjYWZl
MjBjMjBkMy4uNDhlYzg3MDE5YTQ1ZTkyMDlhZWQzNGJlMTE5Njk4MGFhM2RmZjQzOSAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRmxvYXRSZWN0LmgKKysrIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRmxvYXRSZWN0LmgKQEAgLTE4Miw2ICsx
ODIsMTIgQEAgcHVibGljOgogICAgIHZvaWQgc2NhbGUoZmxvYXQgcykgeyBzY2FsZShzLCBzKTsg
fQogICAgIHZvaWQgc2NhbGUoZmxvYXQgc3gsIGZsb2F0IHN5KTsKIAorICAgIEZsb2F0U2l6ZSBk
aWZmZXJlbmNlVG9Qb2ludChjb25zdCBGbG9hdFBvaW50JikgY29uc3Q7CisgICAgRmxvYXRTaXpl
IGRpZmZlcmVuY2VGcm9tQ2VudGVyTGluZVRvUG9pbnQoY29uc3QgRmxvYXRQb2ludCYpIGNvbnN0
OworICAgIGZsb2F0IGRpc3RhbmNlU3F1YXJlZFRvUG9pbnQoY29uc3QgRmxvYXRQb2ludCYgcCkg
Y29uc3QgeyByZXR1cm4gZGlmZmVyZW5jZVRvUG9pbnQocCkuZGlhZ29uYWxMZW5ndGhTcXVhcmVk
KCk7IH0KKyAgICBmbG9hdCBkaXN0YW5jZVNxdWFyZWRGcm9tQ2VudGVyTGluZVRvUG9pbnQoY29u
c3QgRmxvYXRQb2ludCYgcCkgY29uc3QgeyByZXR1cm4gZGlmZmVyZW5jZUZyb21DZW50ZXJMaW5l
VG9Qb2ludChwKS5kaWFnb25hbExlbmd0aFNxdWFyZWQoKTsgfQorICAgIGZsb2F0IGRpc3RhbmNl
VG9Qb2ludChjb25zdCBGbG9hdFBvaW50JikgY29uc3Q7CisKICAgICBGbG9hdFJlY3QgdHJhbnNw
b3NlZFJlY3QoKSBjb25zdCB7IHJldHVybiBGbG9hdFJlY3QobV9sb2NhdGlvbi50cmFuc3Bvc2Vk
UG9pbnQoKSwgbV9zaXplLnRyYW5zcG9zZWRTaXplKCkpOyB9CiAKICAgICAvLyBSZS1pbml0aWFs
aXplcyB0aGlzIHJlY3RhbmdsZSB0byBmaXQgdGhlIHNldHMgb2YgcGFzc2VkIHBvaW50cy4KZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0Zsb2F0U2l6ZS5oIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRmxvYXRTaXplLmgKaW5kZXggM2IzNTUx
MGJlNGQ4YWEyOWUyYjM5YzUzNDg0ZWZiNTg5MGUyZGZmOS4uNmE5OWYwNmQzM2U5MzI1YTcwN2Ji
YzMxNWI5YmE3NzJkZDA3MzZkNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvRmxvYXRTaXplLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvRmxvYXRTaXplLmgKQEAgLTEwMyw2ICsxMDMsMTEgQEAgcHVibGljOgogICAgICAgICAgICBt
X2hlaWdodCA8IG90aGVyLm1faGVpZ2h0ID8gbV9oZWlnaHQgOiBvdGhlci5tX2hlaWdodCk7CiAg
ICAgfQogCisgICAgZmxvYXQgYXJlYSgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gbV93
aWR0aCAqIG1faGVpZ2h0OworICAgIH0KKwogICAgIGZsb2F0IGRpYWdvbmFsTGVuZ3RoKCkgY29u
c3Q7CiAgICAgZmxvYXQgZGlhZ29uYWxMZW5ndGhTcXVhcmVkKCkgY29uc3QKICAgICB7CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbnRQb2ludC5oIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW50UG9pbnQuaAppbmRleCBkZGM0MWI0MjNk
MjE1ZmUwYTE4NTQyODI0NDEwZTI0OTc2NzVkOWFhLi41MTcyYTE0YTY5NDM2NmI5MmQ1OTRhNzFl
YTQwNTZiYzg2Y2RhOGMzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9JbnRQb2ludC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0lu
dFBvaW50LmgKQEAgLTExMSw2ICsxMTEsMTMgQEAgcHVibGljOgogICAgICAgICAgICAgbV95IDwg
b3RoZXIubV95ID8gbV95IDogb3RoZXIubV95KTsKICAgICB9CiAKKyAgICBpbnQgbGVuZ3RoU3F1
YXJlZCgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gbV94ICogbV94ICsgbV95ICogbV95
OworICAgIH0KKworICAgIGludCBkaXN0YW5jZVNxdWFyZWRUb1BvaW50KGNvbnN0IEludFBvaW50
JikgY29uc3Q7CisKICAgICB2b2lkIGNsYW1wTmVnYXRpdmVUb1plcm8oKQogICAgIHsKICAgICAg
ICAgKnRoaXMgPSBleHBhbmRlZFRvKHplcm8oKSk7CkBAIC0yMjIsNiArMjI5LDExIEBAIGlubGlu
ZSBJbnRTaXplIHRvU2l6ZShjb25zdCBJbnRQb2ludCYgYSkKICAgICByZXR1cm4gSW50U2l6ZShh
LngoKSwgYS55KCkpOwogfQogCitpbmxpbmUgaW50IEludFBvaW50OjpkaXN0YW5jZVNxdWFyZWRU
b1BvaW50KGNvbnN0IEludFBvaW50JiBwb2ludCkgY29uc3QKK3sKKyAgICByZXR1cm4gKCgqdGhp
cykgLSBwb2ludCkuZGlhZ29uYWxMZW5ndGhTcXVhcmVkKCk7Cit9CisKICNpZiBQTEFURk9STShR
VCkKIGlubGluZSBRRGF0YVN0cmVhbSYgb3BlcmF0b3I8PChRRGF0YVN0cmVhbSYgc3RyZWFtLCBj
b25zdCBJbnRQb2ludCYgcG9pbnQpCiB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9JbnRSZWN0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL0ludFJlY3QuY3BwCmluZGV4IDAzYzM1ZTgzYmY0MjcwZjE5YTZkM2M2MGQxNjY3MjNkZmRi
OTJiMTguLmRmYTJmOTFmMThhNTk3M2VjOGZhOTNhZDVjNThmZDk2NWJkZDU0YjggMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ludFJlY3QuY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ludFJlY3QuY3BwCkBAIC0xMzIsNiArMTMy
LDM1IEBAIHZvaWQgSW50UmVjdDo6c2NhbGUoZmxvYXQgcykKICAgICBtX3NpemUuc2V0SGVpZ2h0
KChpbnQpKGhlaWdodCgpICogcykpOwogfQogCitzdGF0aWMgaW5saW5lIGludCBkaXN0YW5jZVRv
SW50ZXJ2YWwoaW50IHBvcywgaW50IHN0YXJ0LCBpbnQgZW5kKQoreworICAgIGlmIChwb3MgPCBz
dGFydCkKKyAgICAgICAgcmV0dXJuIHN0YXJ0IC0gcG9zOworICAgIGlmIChwb3MgPiBlbmQpCisg
ICAgICAgIHJldHVybiBlbmQgLSBwb3M7CisgICAgcmV0dXJuIDA7Cit9CisKK0ludFNpemUgSW50
UmVjdDo6ZGlmZmVyZW5jZVRvUG9pbnQoY29uc3QgSW50UG9pbnQmIHBvaW50KSBjb25zdAorewor
ICAgIGludCB4ZGlzdGFuY2UgPSBkaXN0YW5jZVRvSW50ZXJ2YWwocG9pbnQueCgpLCB4KCksIG1h
eFgoKSk7CisgICAgaW50IHlkaXN0YW5jZSA9IGRpc3RhbmNlVG9JbnRlcnZhbChwb2ludC55KCks
IHkoKSwgbWF4WSgpKTsKKyAgICByZXR1cm4gSW50U2l6ZSh4ZGlzdGFuY2UsIHlkaXN0YW5jZSk7
Cit9CisKK0ludFNpemUgSW50UmVjdDo6ZGlmZmVyZW5jZUZyb21DZW50ZXJMaW5lVG9Qb2ludChj
b25zdCBJbnRQb2ludCYgcG9pbnQpIGNvbnN0Cit7CisgICAgLy8gVGhlIGNlbnRlci1saW5lIGlz
IHRoZSBuYXR1cmFsIGNlbnRlciBvZiBhIHJlY3RhbmdsZS4gSXQgaGFzIGFuIGVxdWFsIGRpc3Rh
bmNlIHRvIGFsbCBzaWRlcyBvZiB0aGUgcmVjdGFuZ2xlLgorICAgIEludFBvaW50IGNlbnRlclBv
aW50ID0gY2VudGVyKCk7CisgICAgaW50IHhkaXN0YW5jZSA9IGNlbnRlclBvaW50LngoKSAtIHBv
aW50LngoKTsKKyAgICBpbnQgeWRpc3RhbmNlID0gY2VudGVyUG9pbnQueSgpIC0gcG9pbnQueSgp
OworICAgIGlmICh3aWR0aCgpID4gaGVpZ2h0KCkpCisgICAgICAgIHhkaXN0YW5jZSA9IGRpc3Rh
bmNlVG9JbnRlcnZhbChwb2ludC54KCksIHgoKSArIChoZWlnaHQoKSAvIDIpLCBtYXhYKCkgLSAo
aGVpZ2h0KCkgLyAyKSk7CisgICAgZWxzZQorICAgICAgICB5ZGlzdGFuY2UgPSBkaXN0YW5jZVRv
SW50ZXJ2YWwocG9pbnQueSgpLCB5KCkgKyAod2lkdGgoKSAvIDIpLCBtYXhZKCkgLSAod2lkdGgo
KSAvIDIpKTsKKyAgICByZXR1cm4gSW50U2l6ZSh4ZGlzdGFuY2UsIHlkaXN0YW5jZSk7Cit9CisK
IEludFJlY3QgdW5pb25SZWN0KGNvbnN0IFZlY3RvcjxJbnRSZWN0PiYgcmVjdHMpCiB7CiAgICAg
SW50UmVjdCByZXN1bHQ7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9JbnRSZWN0LmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbnRSZWN0
LmgKaW5kZXggNjAwYzIxZDBkYWUwMDlhOTE5OGE1ZWJmMTE5ZjFlNjczNTM1OTc0Mi4uY2E3ZmVh
NDdhMWMwODQ0NGMwYzM5YTc1YjRmOTczMDUxZmE2MmFiOCAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW50UmVjdC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL0ludFJlY3QuaApAQCAtMTg2LDYgKzE4NiwxMSBAQCBwdWJsaWM6CiAg
ICAgdm9pZCBpbmZsYXRlKGludCBkKSB7IGluZmxhdGVYKGQpOyBpbmZsYXRlWShkKTsgfQogICAg
IHZvaWQgc2NhbGUoZmxvYXQgcyk7CiAKKyAgICBJbnRTaXplIGRpZmZlcmVuY2VUb1BvaW50KGNv
bnN0IEludFBvaW50JikgY29uc3Q7CisgICAgSW50U2l6ZSBkaWZmZXJlbmNlRnJvbUNlbnRlckxp
bmVUb1BvaW50KGNvbnN0IEludFBvaW50JikgY29uc3Q7CisgICAgaW50IGRpc3RhbmNlU3F1YXJl
ZFRvUG9pbnQoY29uc3QgSW50UG9pbnQmIHApIGNvbnN0IHsgcmV0dXJuIGRpZmZlcmVuY2VUb1Bv
aW50KHApLmRpYWdvbmFsTGVuZ3RoU3F1YXJlZCgpOyB9CisgICAgaW50IGRpc3RhbmNlU3F1YXJl
ZEZyb21DZW50ZXJMaW5lVG9Qb2ludChjb25zdCBJbnRQb2ludCYgcCkgY29uc3QgeyByZXR1cm4g
ZGlmZmVyZW5jZUZyb21DZW50ZXJMaW5lVG9Qb2ludChwKS5kaWFnb25hbExlbmd0aFNxdWFyZWQo
KTsgfQorCiAgICAgSW50UmVjdCB0cmFuc3Bvc2VkUmVjdCgpIGNvbnN0IHsgcmV0dXJuIEludFJl
Y3QobV9sb2NhdGlvbi50cmFuc3Bvc2VkUG9pbnQoKSwgbV9zaXplLnRyYW5zcG9zZWRTaXplKCkp
OyB9CiAKICNpZiBQTEFURk9STShXWCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL0ludFNpemUuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L0ludFNpemUuaAppbmRleCAxNjM5ODQ3NjYyZjZlNDgxYjM2NGRjYzNmYzE2ZWFmMzk3Y2E0OTli
Li44ZWM2NTM5YTA2OTAyMjQwY2UxZGUzYTYxMjc3ZjY0YzE4ZTE5YjhlIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbnRTaXplLmgKKysrIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW50U2l6ZS5oCkBAIC0xMDQsNiArMTA0LDE2IEBAIHB1
YmxpYzoKICAgICAgICAgKnRoaXMgPSBleHBhbmRlZFRvKEludFNpemUoKSk7CiAgICAgfQogCisg
ICAgaW50IGFyZWEoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fd2lkdGggKiBtX2hl
aWdodDsKKyAgICB9CisKKyAgICBpbnQgZGlhZ29uYWxMZW5ndGhTcXVhcmVkKCkgY29uc3QKKyAg
ICB7CisgICAgICAgIHJldHVybiBtX3dpZHRoICogbV93aWR0aCArIG1faGVpZ2h0ICogbV9oZWln
aHQ7CisgICAgfQorCiAgICAgSW50U2l6ZSB0cmFuc3Bvc2VkU2l6ZSgpIGNvbnN0CiAgICAgewog
ICAgICAgICByZXR1cm4gSW50U2l6ZShtX2hlaWdodCwgbV93aWR0aCk7CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS90ZXN0aW5nL0ludGVybmFscy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS90ZXN0
aW5nL0ludGVybmFscy5jcHAKaW5kZXggMzk4NzI2ZmVmMzk2NzZlMjQ3OGI3MTk5ZDYzZjBjMmJj
MTY3N2U3MC4uNmE1NWJiZDc1MGFhNTViYTcyNGY2ZDU3YWI1N2Q4OWMwMTEwMjkxMSAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvdGVzdGluZy9JbnRlcm5hbHMuY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3Rlc3RpbmcvSW50ZXJuYWxzLmNwcApAQCAtNjQsNiArNjQsMTEgQEAKICNpbmNsdWRl
ICJDb2xvckNob29zZXIuaCIKICNlbmRpZgogCisjaWYgRU5BQkxFKFRPVUNIX0FESlVTVE1FTlQp
CisjaW5jbHVkZSAiRXZlbnRIYW5kbGVyLmgiCisjaW5jbHVkZSAiV2ViS2l0UG9pbnQuaCIKKyNl
bmRpZgorCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIHN0YXRpYyBib29sIG1hcmtlclR5cGVzRnJv
bShjb25zdCBTdHJpbmcmIG1hcmtlclR5cGUsIERvY3VtZW50TWFya2VyOjpNYXJrZXJUeXBlcyYg
cmVzdWx0KQpAQCAtNTU5LDYgKzU2NCw0NiBAQCBTdHJpbmcgSW50ZXJuYWxzOjpyYW5nZUFzVGV4
dChjb25zdCBSYW5nZSogcmFuZ2UsIEV4Y2VwdGlvbkNvZGUmIGVjKQogICAgIHJldHVybiByYW5n
ZS0+dGV4dCgpOwogfQogCisKKyNpZiBFTkFCTEUoVE9VQ0hfQURKVVNUTUVOVCkKK1Bhc3NSZWZQ
dHI8V2ViS2l0UG9pbnQ+IEludGVybmFsczo6dG91Y2hQb3NpdGlvbkFkanVzdGVkVG9CZXN0Q2xp
Y2thYmxlTm9kZShsb25nIHgsIGxvbmcgeSwgbG9uZyB3aWR0aCwgbG9uZyBoZWlnaHQsIERvY3Vt
ZW50KiBkb2N1bWVudCwgRXhjZXB0aW9uQ29kZSYgZWMpCit7CisgICAgaWYgKCFkb2N1bWVudCB8
fCAhZG9jdW1lbnQtPmZyYW1lKCkpIHsKKyAgICAgICAgZWMgPSBJTlZBTElEX0FDQ0VTU19FUlI7
CisgICAgICAgIHJldHVybiAwOworICAgIH0KKworICAgIEludFNpemUgcmFkaXVzKHdpZHRoIC8g
MiwgaGVpZ2h0IC8gMik7CisgICAgSW50UG9pbnQgcG9pbnQoeCArIHJhZGl1cy53aWR0aCgpLCB5
ICsgcmFkaXVzLmhlaWdodCgpKTsKKworICAgIE5vZGUqIHRhcmdldE5vZGU7CisgICAgSW50UG9p
bnQgYWRqdXN0ZWRQb2ludDsKKworICAgIGRvY3VtZW50LT5mcmFtZSgpLT5ldmVudEhhbmRsZXIo
KS0+YmVzdENsaWNrYWJsZU5vZGVGb3JUb3VjaFBvaW50KHBvaW50LCByYWRpdXMsIGFkanVzdGVk
UG9pbnQsIHRhcmdldE5vZGUpOworCisgICAgcmV0dXJuIFdlYktpdFBvaW50OjpjcmVhdGUoYWRq
dXN0ZWRQb2ludC54KCksIGFkanVzdGVkUG9pbnQueSgpKTsKK30KKworUGFzc1JlZlB0cjxOb2Rl
PiBJbnRlcm5hbHM6OnRvdWNoTm9kZUFkanVzdGVkVG9CZXN0Q2xpY2thYmxlTm9kZShsb25nIHgs
IGxvbmcgeSwgbG9uZyB3aWR0aCwgbG9uZyBoZWlnaHQsIERvY3VtZW50KiBkb2N1bWVudCwgRXhj
ZXB0aW9uQ29kZSYgZWMpCit7CisgICAgaWYgKCFkb2N1bWVudCB8fCAhZG9jdW1lbnQtPmZyYW1l
KCkpIHsKKyAgICAgICAgZWMgPSBJTlZBTElEX0FDQ0VTU19FUlI7CisgICAgICAgIHJldHVybiAw
OworICAgIH0KKworICAgIEludFNpemUgcmFkaXVzKHdpZHRoIC8gMiwgaGVpZ2h0IC8gMik7Cisg
ICAgSW50UG9pbnQgcG9pbnQoeCArIHJhZGl1cy53aWR0aCgpLCB5ICsgcmFkaXVzLmhlaWdodCgp
KTsKKworICAgIE5vZGUqIHRhcmdldE5vZGU7CisgICAgSW50UG9pbnQgYWRqdXN0ZWRQb2ludDsK
KworICAgIGRvY3VtZW50LT5mcmFtZSgpLT5ldmVudEhhbmRsZXIoKS0+YmVzdENsaWNrYWJsZU5v
ZGVGb3JUb3VjaFBvaW50KHBvaW50LCByYWRpdXMsIGFkanVzdGVkUG9pbnQsIHRhcmdldE5vZGUp
OworCisgICAgcmV0dXJuIGFkb3B0UmVmKHRhcmdldE5vZGUpOworfQorI2VuZGlmCisKKwogaW50
IEludGVybmFsczo6bGFzdFNwZWxsQ2hlY2tSZXF1ZXN0U2VxdWVuY2UoRG9jdW1lbnQqIGRvY3Vt
ZW50LCBFeGNlcHRpb25Db2RlJiBlYykKIHsKICAgICBTcGVsbENoZWNrZXIqIGNoZWNrZXIgPSBz
cGVsbGNoZWNrZXIoZG9jdW1lbnQpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvdGVzdGlu
Zy9JbnRlcm5hbHMuaCBiL1NvdXJjZS9XZWJDb3JlL3Rlc3RpbmcvSW50ZXJuYWxzLmgKaW5kZXgg
YTEzZGZiMzA4MjU4M2U1ZDIxNzJlMzAxZGQwMjZkZmEyNWNlYTM3OS4uM2QyMWFmZjA5ZDQwMzEy
MzMwZTgwNjE4YzIxYmZkYjc5MjQ4YThkMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvdGVz
dGluZy9JbnRlcm5hbHMuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS90ZXN0aW5nL0ludGVybmFscy5o
CkBAIC00Miw2ICs0Miw3IEBAIGNsYXNzIEludGVybmFsU2V0dGluZ3M7CiBjbGFzcyBOb2RlOwog
Y2xhc3MgUmFuZ2U7CiBjbGFzcyBTaGFkb3dSb290OworY2xhc3MgV2ViS2l0UG9pbnQ7CiAKIHR5
cGVkZWYgaW50IEV4Y2VwdGlvbkNvZGU7CiAKQEAgLTEwOCw2ICsxMDksMTEgQEAgcHVibGljOgog
ICAgIHVuc2lnbmVkIGxlbmd0aEZyb21SYW5nZShFbGVtZW50KiBzY29wZSwgY29uc3QgUmFuZ2Uq
LCBFeGNlcHRpb25Db2RlJik7CiAgICAgU3RyaW5nIHJhbmdlQXNUZXh0KGNvbnN0IFJhbmdlKiwg
RXhjZXB0aW9uQ29kZSYpOwogCisjaWYgRU5BQkxFKFRPVUNIX0FESlVTVE1FTlQpCisgICAgUGFz
c1JlZlB0cjxXZWJLaXRQb2ludD4gdG91Y2hQb3NpdGlvbkFkanVzdGVkVG9CZXN0Q2xpY2thYmxl
Tm9kZShsb25nIHgsIGxvbmcgeSwgbG9uZyB3aWR0aCwgbG9uZyBoZWlnaHQsIERvY3VtZW50Kiwg
RXhjZXB0aW9uQ29kZSYpOworICAgIFBhc3NSZWZQdHI8Tm9kZT4gdG91Y2hOb2RlQWRqdXN0ZWRU
b0Jlc3RDbGlja2FibGVOb2RlKGxvbmcgeCwgbG9uZyB5LCBsb25nIHdpZHRoLCBsb25nIGhlaWdo
dCwgRG9jdW1lbnQqLCBFeGNlcHRpb25Db2RlJik7CisjZW5kaWYKKwogICAgIGludCBsYXN0U3Bl
bGxDaGVja1JlcXVlc3RTZXF1ZW5jZShEb2N1bWVudCosIEV4Y2VwdGlvbkNvZGUmKTsKICAgICBp
bnQgbGFzdFNwZWxsQ2hlY2tQcm9jZXNzZWRTZXF1ZW5jZShEb2N1bWVudCosIEV4Y2VwdGlvbkNv
ZGUmKTsKICAgICAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Rlc3RpbmcvSW50ZXJuYWxz
LmlkbCBiL1NvdXJjZS9XZWJDb3JlL3Rlc3RpbmcvSW50ZXJuYWxzLmlkbAppbmRleCAzOTQzNzZl
NzljYzVkM2MwYzdmZTExZTRiNjQ3NzhhNTY0Mjg4ZGFjLi45NTc3NDU1YmMxZTc5OWVlNzQyYzY3
MzVjZGU4NDdmNGIyZWViYTc1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS90ZXN0aW5nL0lu
dGVybmFscy5pZGwKKysrIGIvU291cmNlL1dlYkNvcmUvdGVzdGluZy9JbnRlcm5hbHMuaWRsCkBA
IC04NCw2ICs4NCwxMSBAQCBtb2R1bGUgd2luZG93IHsKICAgICAgICAgdW5zaWduZWQgbG9uZyBs
ZW5ndGhGcm9tUmFuZ2UoaW4gRWxlbWVudCBzY29wZSwgaW4gUmFuZ2UgcmFuZ2UpIHJhaXNlcyAo
RE9NRXhjZXB0aW9uKTsKICAgICAgICAgRE9NU3RyaW5nIHJhbmdlQXNUZXh0KGluIFJhbmdlIHJh
bmdlKSByYWlzZXMgKERPTUV4Y2VwdGlvbik7CiAKKyNpZiBkZWZpbmVkKEVOQUJMRV9UT1VDSF9B
REpVU1RNRU5UKSAmJiBFTkFCTEVfVE9VQ0hfQURKVVNUTUVOVAorICAgICAgICBXZWJLaXRQb2lu
dCB0b3VjaFBvc2l0aW9uQWRqdXN0ZWRUb0Jlc3RDbGlja2FibGVOb2RlKGluIGxvbmcgeCwgaW4g
bG9uZyB5LCBpbiBsb25nIHdpZHRoLCBpbiBsb25nIGhlaWdodCwgaW4gRG9jdW1lbnQgZG9jdW1l
bnQpIHJhaXNlcyAoRE9NRXhjZXB0aW9uKTsKKyAgICAgICAgTm9kZSB0b3VjaE5vZGVBZGp1c3Rl
ZFRvQmVzdENsaWNrYWJsZU5vZGUoaW4gbG9uZyB4LCBpbiBsb25nIHksIGluIGxvbmcgd2lkdGgs
IGluIGxvbmcgaGVpZ2h0LCBpbiBEb2N1bWVudCBkb2N1bWVudCkgcmFpc2VzIChET01FeGNlcHRp
b24pOworI2VuZGlmCisKICAgICAgICAgbG9uZyBsYXN0U3BlbGxDaGVja1JlcXVlc3RTZXF1ZW5j
ZShpbiBEb2N1bWVudCBkb2N1bWVudCkgcmFpc2VzIChET01FeGNlcHRpb24pOwogICAgICAgICBs
b25nIGxhc3RTcGVsbENoZWNrUHJvY2Vzc2VkU2VxdWVuY2UoaW4gRG9jdW1lbnQgZG9jdW1lbnQp
IHJhaXNlcyAoRE9NRXhjZXB0aW9uKTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQ
cm9jZXNzL1dlYlBhZ2VQcm94eS5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViUGFn
ZVByb3h5LmNwcAppbmRleCBhOTVlMjlhMTZjNDIxMTM0ODdiZWE2NjhhMTE3OWYwZjgyYjI5ZTg3
Li40MGI3NGEwNmExMGUxMzZmNzE4ZDgxZTE1YWE0ZDBjMjljNzk1MjRkIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViUGFnZVByb3h5LmNwcAorKysgYi9Tb3VyY2UvV2Vi
S2l0Mi9VSVByb2Nlc3MvV2ViUGFnZVByb3h5LmNwcApAQCAtOTk5LDkgKzk5OSw5IEBAIHZvaWQg
V2ViUGFnZVByb3h5OjpoYW5kbGVHZXN0dXJlRXZlbnQoY29uc3QgV2ViR2VzdHVyZUV2ZW50JiBl
dmVudCkKIAogI2lmIEVOQUJMRShUT1VDSF9FVkVOVFMpCiAjaWYgUExBVEZPUk0oUVQpCi12b2lk
IFdlYlBhZ2VQcm94eTo6aGFuZGxlUG90ZW50aWFsQWN0aXZhdGlvbihjb25zdCBJbnRQb2ludCYg
bGF5b3V0UG9pbnQpCit2b2lkIFdlYlBhZ2VQcm94eTo6aGFuZGxlUG90ZW50aWFsQWN0aXZhdGlv
bihjb25zdCBJbnRQb2ludCYgdG91Y2hQb2ludCwgY29uc3QgSW50U2l6ZSYgdG91Y2hBcmVhKQog
ewotICAgIHByb2Nlc3MoKS0+c2VuZChNZXNzYWdlczo6V2ViUGFnZTo6SGlnaGxpZ2h0UG90ZW50
aWFsQWN0aXZhdGlvbihsYXlvdXRQb2ludCksIG1fcGFnZUlEKTsKKyAgICBwcm9jZXNzKCktPnNl
bmQoTWVzc2FnZXM6OldlYlBhZ2U6OkhpZ2hsaWdodFBvdGVudGlhbEFjdGl2YXRpb24odG91Y2hQ
b2ludCwgdG91Y2hBcmVhKSwgbV9wYWdlSUQpOwogfQogI2VuZGlmCiAKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkuaCBiL1NvdXJjZS9XZWJLaXQyL1VJ
UHJvY2Vzcy9XZWJQYWdlUHJveHkuaAppbmRleCA1MDQ5MjI4ZTIxOWRiYjhkODgwMGMxYzBkNTYw
YWVhYmJmMjhkYmJjLi5kZmM2MWM0ZGZjYTc2NzgzMmQ1NDM0N2ZlY2NmZDE5ZWMwZjlkZmNjIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViUGFnZVByb3h5LmgKKysrIGIv
U291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5oCkBAIC0zODYsNyArMzg2LDcg
QEAgcHVibGljOgogI2lmIEVOQUJMRShUT1VDSF9FVkVOVFMpCiAgICAgdm9pZCBoYW5kbGVUb3Vj
aEV2ZW50KGNvbnN0IE5hdGl2ZVdlYlRvdWNoRXZlbnQmKTsKICNpZiBQTEFURk9STShRVCkKLSAg
ICB2b2lkIGhhbmRsZVBvdGVudGlhbEFjdGl2YXRpb24oY29uc3QgV2ViQ29yZTo6SW50UG9pbnQm
KTsKKyAgICB2b2lkIGhhbmRsZVBvdGVudGlhbEFjdGl2YXRpb24oY29uc3QgV2ViQ29yZTo6SW50
UG9pbnQmIHRvdWNoUG9pbnQsIGNvbnN0IFdlYkNvcmU6OkludFNpemUmIHRvdWNoQXJlYSk7CiAj
ZW5kaWYKICNlbmRpZgogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvcXQv
UXRXZWJQYWdlRXZlbnRIYW5kbGVyLmNwcCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9xdC9R
dFdlYlBhZ2VFdmVudEhhbmRsZXIuY3BwCmluZGV4IDk1ZWQ0MzE5MTZkNDBmZDc1ODFkN2UzNzEx
NmMxZTg0NmFhZTU1M2IuLjJiYmJiZjIwOTI1YzQyZjQ0MDVhNGM1OTY4NGY4ZGUwY2YwZGQ4YTEg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9xdC9RdFdlYlBhZ2VFdmVudEhh
bmRsZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9xdC9RdFdlYlBhZ2VFdmVu
dEhhbmRsZXIuY3BwCkBAIC0yMzEsNyArMjMxLDcgQEAgdm9pZCBRdFdlYlBhZ2VFdmVudEhhbmRs
ZXI6OmhhbmRsZURyb3BFdmVudChRRHJvcEV2ZW50KiBldikKIHZvaWQgUXRXZWJQYWdlRXZlbnRI
YW5kbGVyOjpoYW5kbGVQb3RlbnRpYWxTaW5nbGVUYXBFdmVudChjb25zdCBRVG91Y2hFdmVudDo6
VG91Y2hQb2ludCYgcG9pbnQpCiB7CiAgICAgUVRyYW5zZm9ybSBmcm9tSXRlbVRyYW5zZm9ybSA9
IG1fd2ViUGFnZS0+dHJhbnNmb3JtRnJvbUl0ZW0oKTsKLSAgICBtX3dlYlBhZ2VQcm94eS0+aGFu
ZGxlUG90ZW50aWFsQWN0aXZhdGlvbihmcm9tSXRlbVRyYW5zZm9ybS5tYXAocG9pbnQucG9zKCkp
LnRvUG9pbnQoKSk7CisgICAgbV93ZWJQYWdlUHJveHktPmhhbmRsZVBvdGVudGlhbEFjdGl2YXRp
b24oZnJvbUl0ZW1UcmFuc2Zvcm0ubWFwKHBvaW50LnBvcygpKS50b1BvaW50KCksIEludFNpemUo
cG9pbnQucmVjdCgpLnNpemUoKS50b1NpemUoKSkpOwogfQogCiB2b2lkIFF0V2ViUGFnZUV2ZW50
SGFuZGxlcjo6aGFuZGxlU2luZ2xlVGFwRXZlbnQoY29uc3QgUVRvdWNoRXZlbnQ6OlRvdWNoUG9p
bnQmIHBvaW50KQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdl
L1dlYlBhZ2UuY3BwIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2Uu
Y3BwCmluZGV4IDlmOGI0MTdhNWE5NWY1ZWRkYjFiNjA2MWE3ZjVjMWRjYjUwODYzYmUuLjQzYTVl
NzgzZmYyNDA0M2RkZWIwYzllZWFiZjQxZDdkMjM1ZWJiMTkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0
Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5jcHAKQEAgLTE0NDMsMTYgKzE0NDMsMjAgQEAg
dm9pZCBXZWJQYWdlOjpyZXN0b3JlU2Vzc2lvbkFuZE5hdmlnYXRlVG9DdXJyZW50SXRlbShjb25z
dCBTZXNzaW9uU3RhdGUmIHNlc3Npb24KIAogI2lmIEVOQUJMRShUT1VDSF9FVkVOVFMpCiAjaWYg
UExBVEZPUk0oUVQpCi12b2lkIFdlYlBhZ2U6OmhpZ2hsaWdodFBvdGVudGlhbEFjdGl2YXRpb24o
Y29uc3QgSW50UG9pbnQmIHBvaW50KQordm9pZCBXZWJQYWdlOjpoaWdobGlnaHRQb3RlbnRpYWxB
Y3RpdmF0aW9uKGNvbnN0IEludFBvaW50JiBwb2ludCwgY29uc3QgSW50U2l6ZSYgYXJlYSkKIHsK
ICAgICBOb2RlKiBhY3RpdmF0aW9uTm9kZSA9IDA7CiAgICAgRnJhbWUqIG1haW5mcmFtZSA9IG1f
cGFnZS0+bWFpbkZyYW1lKCk7CisgICAgSW50UG9pbnQgYWRqdXN0ZWRQb2ludDsKIAogICAgIGlm
IChwb2ludCAhPSBJbnRQb2ludDo6emVybygpKSB7CisjaWYgRU5BQkxFKFRPVUNIX0FESlVTVE1F
TlQpCisgICAgICAgIG1haW5mcmFtZS0+ZXZlbnRIYW5kbGVyKCktPmJlc3RDbGlja2FibGVOb2Rl
Rm9yVG91Y2hQb2ludChwb2ludCwgSW50U2l6ZShhcmVhLndpZHRoKCkgLyAyLCBhcmVhLmhlaWdo
dCgpIC8gMiksIGFkanVzdGVkUG9pbnQsIGFjdGl2YXRpb25Ob2RlKTsKKyNlbHNlCiAgICAgICAg
IEhpdFRlc3RSZXN1bHQgcmVzdWx0ID0gbWFpbmZyYW1lLT5ldmVudEhhbmRsZXIoKS0+aGl0VGVz
dFJlc3VsdEF0UG9pbnQobWFpbmZyYW1lLT52aWV3KCktPndpbmRvd1RvQ29udGVudHMocG9pbnQp
LCAvKmFsbG93U2hhZG93Q29udGVudCovIGZhbHNlLCAvKmlnbm9yZUNsaXBwaW5nKi8gdHJ1ZSk7
CiAgICAgICAgIGFjdGl2YXRpb25Ob2RlID0gcmVzdWx0LmlubmVyTm9kZSgpOwotCi0gICAgICAg
IGlmICghYWN0aXZhdGlvbk5vZGUtPmlzRm9jdXNhYmxlKCkpCisjZW5kaWYKKyAgICAgICAgaWYg
KGFjdGl2YXRpb25Ob2RlICYmICFhY3RpdmF0aW9uTm9kZS0+aXNGb2N1c2FibGUoKSkKICAgICAg
ICAgICAgIGFjdGl2YXRpb25Ob2RlID0gYWN0aXZhdGlvbk5vZGUtPmVuY2xvc2luZ0xpbmtFdmVu
dFBhcmVudE9yU2VsZigpOwogICAgIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2Vi
UHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UuaCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2Vi
UGFnZS9XZWJQYWdlLmgKaW5kZXggYmM4NGUzNTljNDhlOGIzMDVhNGMwOWUzYzk3N2ZkNzE4NzE3
MmQ4YS4uMWU0Y2Y5MmQ3NTVjYzA1OGRkY2JjODNkZjg2MjgwN2IyZGVmN2ZkNyAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UuaAorKysgYi9Tb3Vy
Y2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5oCkBAIC01NjMsNyArNTYzLDcg
QEAgcHJpdmF0ZToKICAgICB2b2lkIHRvdWNoRXZlbnQoY29uc3QgV2ViVG91Y2hFdmVudCYpOwog
ICAgIHZvaWQgdG91Y2hFdmVudFN5bmNGb3JUZXN0aW5nKGNvbnN0IFdlYlRvdWNoRXZlbnQmLCBi
b29sJiBoYW5kbGVkKTsKICNpZiBQTEFURk9STShRVCkKLSAgICB2b2lkIGhpZ2hsaWdodFBvdGVu
dGlhbEFjdGl2YXRpb24oY29uc3QgV2ViQ29yZTo6SW50UG9pbnQmKTsKKyAgICB2b2lkIGhpZ2hs
aWdodFBvdGVudGlhbEFjdGl2YXRpb24oY29uc3QgV2ViQ29yZTo6SW50UG9pbnQmLCBjb25zdCBX
ZWJDb3JlOjpJbnRTaXplJiBhcmVhKTsKICNlbmRpZgogI2VuZGlmCiAgICAgdm9pZCBjb250ZXh0
TWVudUhpZGRlbigpIHsgbV9pc1Nob3dpbmdDb250ZXh0TWVudSA9IGZhbHNlOyB9CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5tZXNzYWdlcy5p
biBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLm1lc3NhZ2VzLmlu
CmluZGV4IDJjOTQzNjA0MjgzMzE5MzJkZmEzODc1NzkwNzg1Y2EwODkyMGIyYzYuLmIxZmU1YmFm
MjFkYTVlMTZhMDFiNWFlM2ZlODYxYWQ4MmYyNDk4ZjggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJL
aXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLm1lc3NhZ2VzLmluCisrKyBiL1NvdXJjZS9X
ZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLm1lc3NhZ2VzLmluCkBAIC00MSw3ICs0
MSw3IEBAIG1lc3NhZ2VzIC0+IFdlYlBhZ2UgewogICAgIFRvdWNoRXZlbnQoV2ViS2l0OjpXZWJU
b3VjaEV2ZW50IGV2ZW50KQogICAgIFRvdWNoRXZlbnRTeW5jRm9yVGVzdGluZyhXZWJLaXQ6Oldl
YlRvdWNoRXZlbnQgZXZlbnQpIC0+IChib29sIGhhbmRsZWQpCiAjaWYgUExBVEZPUk0oUVQpCi0g
ICAgSGlnaGxpZ2h0UG90ZW50aWFsQWN0aXZhdGlvbihXZWJDb3JlOjpJbnRQb2ludCBwb2ludCkK
KyAgICBIaWdobGlnaHRQb3RlbnRpYWxBY3RpdmF0aW9uKFdlYkNvcmU6OkludFBvaW50IHBvaW50
LCBXZWJDb3JlOjpJbnRTaXplIGFyZWEpCiAjZW5kaWYKICNlbmRpZgogCmRpZmYgLS1naXQgYS9U
b29scy9DaGFuZ2VMb2cgYi9Ub29scy9DaGFuZ2VMb2cKaW5kZXggMTUxZmZjZjRkNmM1MmJmMmNh
ZDNmYjY4NWY3ZDZjMTA4YmFjODg3OS4uZjllZTgzYjJjMTkyYzI2MjY4OGQ0ZmQ1MDg3YWU0MDk5
ZDE3MGQ3MSAxMDA2NDQKLS0tIGEvVG9vbHMvQ2hhbmdlTG9nCisrKyBiL1Rvb2xzL0NoYW5nZUxv
ZwpAQCAtMSwzICsxLDE0IEBACisyMDEyLTAzLTAyICBBbGxhbiBTYW5kZmVsZCBKZW5zZW4gIDxh
bGxhbi5qZW5zZW5Abm9raWEuY29tPgorCisgICAgICAgIFNlbGVjdCBiZXN0IHRhcmdldCBmb3Ig
dGFwIGdlc3R1cmUuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD03ODgwMQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAg
ICAgIEFkZCBUT1VDSF9BREpVU1RNRU5UIHRvIGVuYWJsZWQgZmVhdHVyZXMuCisKKyAgICAgICAg
KiBxbWFrZS9ta3NwZWNzL2ZlYXR1cmVzL2ZlYXR1cmVzLnByZjoKKwogMjAxMi0wMy0wNyAgWm9s
dGFuIEhvcnZhdGggIDx6b2x0YW5Ad2Via2l0Lm9yZz4KIAogICAgICAgICBbUXRdIEFkZCBxbWFr
ZSBjb25maWcgdGVzdHMgZm9yIEpQRUcgYW5kIFBORyBsaWJyYXJ5CmRpZmYgLS1naXQgYS9Ub29s
cy9xbWFrZS9ta3NwZWNzL2ZlYXR1cmVzL2ZlYXR1cmVzLnByZiBiL1Rvb2xzL3FtYWtlL21rc3Bl
Y3MvZmVhdHVyZXMvZmVhdHVyZXMucHJmCmluZGV4IDczODU3MTdhMzNhMjU0NzljOGNjNGRmNzg3
YWQ2NTBjYjY4MWJhY2MuLjVmOTc5YThmNDY2MTU2ODg4ZGQ1OWQ5MzlhOTg5OGM3NTNjN2ZlZmEg
MTAwNjQ0Ci0tLSBhL1Rvb2xzL3FtYWtlL21rc3BlY3MvZmVhdHVyZXMvZmVhdHVyZXMucHJmCisr
KyBiL1Rvb2xzL3FtYWtlL21rc3BlY3MvZmVhdHVyZXMvZmVhdHVyZXMucHJmCkBAIC04OCw2ICs4
OCw3IEBAIGhhdmVRdCg1KSB7CiAhY29udGFpbnMoREVGSU5FUywgRU5BQkxFX1ZJREVPX1RSQUNL
PS4pOiBERUZJTkVTICs9IEVOQUJMRV9WSURFT19UUkFDSz0wCiAhY29udGFpbnMoREVGSU5FUywg
RU5BQkxFX1RPVUNIX0lDT05fTE9BRElORz0uKTogREVGSU5FUyArPSBFTkFCTEVfVE9VQ0hfSUNP
Tl9MT0FESU5HPTAKICFjb250YWlucyhERUZJTkVTLCBFTkFCTEVfQU5JTUFUSU9OX0FQST0uKTog
REVGSU5FUyArPSBFTkFCTEVfQU5JTUFUSU9OX0FQST0wCishY29udGFpbnMoREVGSU5FUywgRU5B
QkxFX1RPVUNIX0FESlVTVE1FTlQ9Lik6IERFRklORVMgKz0gRU5BQkxFX1RPVUNIX0FESlVTVE1F
TlQ9MQogCiAjIFBvbGljeSBkZWNpc2lvbnM6IGZvciB1c2luZyBhIHBhcnRpY3VsYXIgdGhpcmQt
cGFydHkgbGlicmFyeSBvciBvcHRpb25hbCBPUyBzZXJ2aWNlCiAhY29udGFpbnMoREVGSU5FUywg
V1RGX1VTRV9RVF9JTUFHRV9ERUNPREVSPS4pOiBERUZJTkVTICs9IFdURl9VU0VfUVRfSU1BR0Vf
REVDT0RFUj0xCkBAIC0yNTgsNiArMjU5LDcgQEAgY29udGFpbnMoREVGSU5FUywgRU5BQkxFX1ZJ
REVPX1RSQUNLPTEpOiBGRUFUVVJFX0RFRklORVNfSkFWQVNDUklQVCArPSBFTkFCTEVfVkkKIGNv
bnRhaW5zKERFRklORVMsIEVOQUJMRV9EQVRBX1RSQU5TRkVSX0lURU1TPTEpOiBGRUFUVVJFX0RF
RklORVNfSkFWQVNDUklQVCArPSBFTkFCTEVfREFUQV9UUkFOU0ZFUl9JVEVNUz0xCiBjb250YWlu
cyhERUZJTkVTLCBFTkFCTEVfRlVMTFNDUkVFTl9BUEk9MSk6IEZFQVRVUkVfREVGSU5FU19KQVZB
U0NSSVBUICs9IEVOQUJMRV9GVUxMU0NSRUVOX0FQST0xCiBjb250YWlucyhERUZJTkVTLCBFTkFC
TEVfUkVRVUVTVF9BTklNQVRJT05fRlJBTUU9MSk6IEZFQVRVUkVfREVGSU5FU19KQVZBU0NSSVBU
ICs9IEVOQUJMRV9SRVFVRVNUX0FOSU1BVElPTl9GUkFNRT0xCitjb250YWlucyhERUZJTkVTLCBF
TkFCTEVfVE9VQ0hfQURKVVNUTUVOVD0xKTogRkVBVFVSRV9ERUZJTkVTX0pBVkFTQ1JJUFQgKz0g
RU5BQkxFX1RPVUNIX0FESlVTVE1FTlQ9MQogCiAjIFVzZWQgdG8gY29tcHV0ZSBkZWZhdWx0cyBm
b3IgdGhlIGJ1aWxkLXdlYmtpdCBzY3JpcHQKICMgRG9uJ3QgcGxhY2UgYW55dGhpbmcgYWZ0ZXIg
dGhpcyEKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL0NoYW5nZUxvZyBiL0xheW91dFRlc3RzL0No
YW5nZUxvZwppbmRleCA1OWQ2YTdmMzMyYzhhNzYxY2ZhNDNlNDk5ZDJmYWNmNzk2OTgzM2M5Li43
YjBmMDFlNmVlNWI3MTk2ZDQzZTBjZTUyNTI1MmY4ZWUzYWMxMWVhIDEwMDY0NAotLS0gYS9MYXlv
dXRUZXN0cy9DaGFuZ2VMb2cKKysrIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEs
MjcgQEAKKzIwMTItMDItMjggIEFsbGFuIFNhbmRmZWxkIEplbnNlbiAgPGFsbGFuLmplbnNlbkBu
b2tpYS5jb20+CisKKyAgICAgICAgU2VsZWN0IGJlc3QgdGFyZ2V0IGZvciB0YXAgZ2VzdHVyZS4K
KyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTc4ODAxCisK
KyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVGVzdCBvZiB0
b3VjaCBhZGp1c3RtZW50cy4gVGVzdHMgc2V2ZXJhbCBib3RoIG5vcm1hbCBhbmQgdHJpY2t5IGNh
c2VzLgorICAgICAgICBUaGUgdGVzdHMgYXJlIG5vdCBleGhhdXN0aXZlIHRob3VnaC4KKworICAg
ICAgICAqIHBsYXRmb3JtL2Nocm9taXVtL3Rlc3RfZXhwZWN0YXRpb25zLnR4dDoKKyAgICAgICAg
KiBwbGF0Zm9ybS9lZmwvU2tpcHBlZDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ndGsvU2tpcHBlZDoK
KyAgICAgICAgKiBwbGF0Zm9ybS9tYWMvU2tpcHBlZDoKKyAgICAgICAgKiBwbGF0Zm9ybS93aW4v
U2tpcHBlZDoKKyAgICAgICAgKiB0b3VjaGFkanVzdG1lbnQvZXZlbnQtdHJpZ2dlcmVkLXdpZGdl
dHMtZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAgICAgKiB0b3VjaGFkanVzdG1lbnQvZXZlbnQt
dHJpZ2dlcmVkLXdpZGdldHMuaHRtbDogQWRkZWQuCisgICAgICAgICogdG91Y2hhZGp1c3RtZW50
L2h0bWwtbGFiZWwtZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAgICAgKiB0b3VjaGFkanVzdG1l
bnQvaHRtbC1sYWJlbC5odG1sOiBBZGRlZC4KKyAgICAgICAgKiB0b3VjaGFkanVzdG1lbnQvbmVz
dGVkLXRvdWNoLWV4cGVjdGVkLnR4dDogQWRkZWQuCisgICAgICAgICogdG91Y2hhZGp1c3RtZW50
L25lc3RlZC10b3VjaC5odG1sOiBBZGRlZC4KKyAgICAgICAgKiB0b3VjaGFkanVzdG1lbnQvdG91
Y2gtaW5saW5lcy1leHBlY3RlZC50eHQ6IEFkZGVkLgorICAgICAgICAqIHRvdWNoYWRqdXN0bWVu
dC90b3VjaC1pbmxpbmVzLmh0bWw6IEFkZGVkLgorCiAyMDEyLTAzLTA2ICBQYXZlbCBQb2Rpdmls
b3YgIDxwb2Rpdmlsb3ZAY2hyb21pdW0ub3JnPgogCiAgICAgICAgIFdlYiBJbnNwZWN0b3I6IGV4
dHJhY3Qgc291cmNlIG1hcHBpbmcgbG9naWMgZnJvbSBEZWJ1Z2dlclByZXNlbnRhdGlvbk1vZGVs
IHRvIFNjcmlwdE1hcHBpbmdJbXBsLgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvcGxhdGZvcm0v
Y2hyb21pdW0vdGVzdF9leHBlY3RhdGlvbnMudHh0IGIvTGF5b3V0VGVzdHMvcGxhdGZvcm0vY2hy
b21pdW0vdGVzdF9leHBlY3RhdGlvbnMudHh0CmluZGV4IGE1ZWIyMTY1NGFhY2M1NTBhNzI3YzM4
NTY1ZGJjZDBiOTgxZGI4M2EuLmIxZjg3YWM1M2RiNWRlMWM4MzkxYTRhNGM2YzZjYjVkNWE5ZGFh
MzcgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL3BsYXRmb3JtL2Nocm9taXVtL3Rlc3RfZXhwZWN0
YXRpb25zLnR4dAorKysgYi9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9jaHJvbWl1bS90ZXN0X2V4cGVj
dGF0aW9ucy50eHQKQEAgLTExNCw2ICsxMTQsOSBAQCBCVUdDUjEwMzkzOSBTS0lQIDogaHR0cC90
ZXN0cy9hcHBjYWNoZS93cm9uZy1jb250ZW50LXR5cGUuaHRtbCA9IFRFWFQKIC8vIFZpYnJhdGlv
biBBUEkgaXMgbm90IHN1cHBvcnRlZCB5ZXQgaW4gdGhlIGNocm9taXVtIHBvcnQuCiBCVUdXSzcy
MDEwIFNLSVAgOiBmYXN0L2RvbS9uYXZpZ2F0b3ItdmlicmF0aW9uLmh0bWwgPSBGQUlMCiAKKy8v
IFRvdWNoIEFkanVzdG1lbnQgaXMgbm90IHN1cHBvcnRlZCB5ZXQgaW4gdGhlIGNocm9taXVtIHBv
cnQuCitCVUdXSzc4ODAxIFNLSVAgOiB0b3VjaGFkanVzdG1lbnQvID0gRkFJTAorCiAvLyAtLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLQogLy8gV09OVEZJWCBURVNUUwogLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KZGlmZiAtLWdpdCBhL0xheW91dFRl
c3RzL3BsYXRmb3JtL2VmbC9Ta2lwcGVkIGIvTGF5b3V0VGVzdHMvcGxhdGZvcm0vZWZsL1NraXBw
ZWQKaW5kZXggOTFlMmFmZGYxZjIxMTA4MGVlNjM4MzFiMzc0NThjMzlhZWFkYmU0OS4uNDczZTk0
MTQ3YTdkNzQ4MjNmYWJmOTkwMzgyMTliZDY4NWQ5OGY5NSAxMDA2NDQKLS0tIGEvTGF5b3V0VGVz
dHMvcGxhdGZvcm0vZWZsL1NraXBwZWQKKysrIGIvTGF5b3V0VGVzdHMvcGxhdGZvcm0vZWZsL1Nr
aXBwZWQKQEAgLTI3NjAsNiArMjc2MCwxMCBAQCBmYXN0L2V2ZW50cy9wYWdlLXZpc2liaWxpdHkt
aWZyYW1lLWRlbGV0ZS10ZXN0Lmh0bWwKIGZhc3QvZXZlbnRzL3BhZ2UtdmlzaWJpbGl0eS1pZnJh
bWUtcHJvcGFnYXRpb24tdGVzdC5odG1sCiBmYXN0L2V2ZW50cy9wYWdlLXZpc2liaWxpdHktdHJh
bnNpdGlvbi10ZXN0Lmh0bWwKIAorIyBUb3VjaCBhZGp1c3RtZW50IG5vdCBlbmFibGVkCisjIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD03ODgwMQordG91Y2hhZGp1c3Rt
ZW50CisKICMgVGhlcmUgYXJlIG5vIGV4cGVjdGVkIHJlc3VsdCBzZXQgeWV0LgogYW5pbWF0aW9u
cy9hZGRpdGl2ZS10cmFuc2Zvcm0tYW5pbWF0aW9ucy5odG1sCiBhbmltYXRpb25zL2FuaW1hdGlv
bi1ib3JkZXItb3ZlcmZsb3cuaHRtbApkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvcGxhdGZvcm0v
bWFjL1NraXBwZWQgYi9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9tYWMvU2tpcHBlZAppbmRleCBjNzcy
ODFjYmFjMjk3NzRhMDQ3NjVlM2M5NjU3OGFhYjYwZGYwYjJhLi5mY2M4MzA4M2NhYjQ3MzM5MWU4
M2MyYTFhNWEwMGM1OWRkMGQzNzFkIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9t
YWMvU2tpcHBlZAorKysgYi9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9tYWMvU2tpcHBlZApAQCAtNTY3
LDMgKzU2Nyw3IEBAIGZhc3QvbXV0YXRpb24vZW5kLW9mLXRhc2stZGVsaXZlcnkuaHRtbAogIyBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzIwMTAKICMgTmVlZHMgUGFn
ZUNsaWVudHM6OnZpYnJhdGlvbkNsaWVudCgpIGltcGxlbWVudGF0aW9uLgogZmFzdC9kb20vbmF2
aWdhdG9yLXZpYnJhdGlvbi5odG1sCisKKyMgVG91Y2ggYWRqdXN0bWVudCBub3QgZW5hYmxlZAor
IyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9Nzg4MDEKK3RvdWNoYWRq
dXN0bWVudApkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvcGxhdGZvcm0vd2luL1NraXBwZWQgYi9M
YXlvdXRUZXN0cy9wbGF0Zm9ybS93aW4vU2tpcHBlZAppbmRleCA0MjQ3MjJkN2UwODFmOGEyODM1
OGVhYjE2ZmUwZmZhY2JhZmFhNjQyLi5jZjU4ZWFmYzYzNTA0ZDIxZjMyMDdkMjFjN2Q2MzNiZmFi
YWRhNmMwIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9wbGF0Zm9ybS93aW4vU2tpcHBlZAorKysg
Yi9MYXlvdXRUZXN0cy9wbGF0Zm9ybS93aW4vU2tpcHBlZApAQCAtMTY1OSwzICsxNjU5LDcgQEAg
ZmFzdC9yZXBhaW50L3RyYW5zZm9ybS1hYnNvbHV0ZS1pbi1wb3NpdGlvbmVkLWNvbnRhaW5lci5o
dG1sCiAKICNWaWJyYXRpb24gQVBJIGlzIG5vdCBpbXBsZW1lbnRlZC4KIGZhc3QvZG9tL25hdmln
YXRvci12aWJyYXRpb24uaHRtbAorCisjIFRvdWNoIGFkanVzdG1lbnQgbm90IGVuYWJsZWQKKyMg
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTc4ODAxCit0b3VjaGFkanVz
dG1lbnQKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3RvdWNoYWRqdXN0bWVudC9ldmVudC10cmln
Z2VyZWQtd2lkZ2V0cy1leHBlY3RlZC50eHQgYi9MYXlvdXRUZXN0cy90b3VjaGFkanVzdG1lbnQv
ZXZlbnQtdHJpZ2dlcmVkLXdpZGdldHMtZXhwZWN0ZWQudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmY5NGUyMGUx
ZGY2NGRkMDkxYzJhZDg2NWE5N2M0Y2U4NDJiNjk1ZTUKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlv
dXRUZXN0cy90b3VjaGFkanVzdG1lbnQvZXZlbnQtdHJpZ2dlcmVkLXdpZGdldHMtZXhwZWN0ZWQu
dHh0CkBAIC0wLDAgKzEsMzEgQEAKK1Rlc3QgdmFyaW91cyB3YXlzIHRvIHRyaWdnZXIgaW5wdXQt
d2lkZ2V0cy4gT24gYSB0b3VjaCBpbnRlcmZhY2UsIGFsbCB0aGUgYWN0aW9ucyBzaG91bGQgYmUg
dHJpZ2dlcmFibGUgd2l0aCBlaXRoZXIgYSB0b3VjaCBkb3duIG9yIGEgdG91Y2ggdGFwLgorCitP
biBzdWNjZXNzLCB5b3Ugd2lsbCBzZWUgYSBzZXJpZXMgb2YgIlBBU1MiIG1lc3NhZ2VzLCBmb2xs
b3dlZCBieSAiVEVTVCBDT01QTEVURSIuCisKKworVGVzdGluZyBzbWFsbCBkaXJlY3QgaGl0cwor
UEFTUyBhZGp1c3RlZE5vZGUuaWQgaXMgZWxlbWVudC5pZAorUEFTUyBhZGp1c3RlZE5vZGUuaWQg
aXMgZWxlbWVudC5pZAorUEFTUyBhZGp1c3RlZE5vZGUuaWQgaXMgZWxlbWVudC5pZAorUEFTUyBh
ZGp1c3RlZE5vZGUuaWQgaXMgbm90IGVsZW1lbnQuaWQKK1BBU1MgYWRqdXN0ZWROb2RlLmlkIGlz
IGVsZW1lbnQuaWQKK1Rlc3RpbmcgbGFyZ2UgZGlyZWN0IGhpdHMKK1BBU1MgYWRqdXN0ZWROb2Rl
LmlkIGlzIGVsZW1lbnQuaWQKK1BBU1MgYWRqdXN0ZWROb2RlLmlkIGlzIGVsZW1lbnQuaWQKK1BB
U1MgYWRqdXN0ZWROb2RlLmlkIGlzIGVsZW1lbnQuaWQKK1BBU1MgYWRqdXN0ZWROb2RlLmlkIGlz
IG5vdCBlbGVtZW50LmlkCitQQVNTIGFkanVzdGVkTm9kZS5pZCBpcyBlbGVtZW50LmlkCitUZXN0
aW5nIGxhcmdlIGRpcmVjdCBoaXRzCitQQVNTIGFkanVzdGVkTm9kZS5pZCBpcyBlbGVtZW50Lmlk
CitQQVNTIGFkanVzdGVkTm9kZS5pZCBpcyBlbGVtZW50LmlkCitQQVNTIGFkanVzdGVkTm9kZS5p
ZCBpcyBlbGVtZW50LmlkCitQQVNTIGFkanVzdGVkTm9kZS5pZCBpcyBub3QgZWxlbWVudC5pZAor
UEFTUyBhZGp1c3RlZE5vZGUuaWQgaXMgZWxlbWVudC5pZAorUEFTUyBzdWNjZXNzZnVsbHlQYXJz
ZWQgaXMgdHJ1ZQorCitURVNUIENPTVBMRVRFCitGb2N1cyBoZXJlIHNob3VsZCBnaXZlIGEgdGV4
dCBpbnB1dC1maWVsZC4KK01vdXNlLW92ZXIgaGVyZSBzaG91bGQgZ2l2ZSBhIHRleHQgaW5wdXQt
ZmllbGQuCitIb3ZlcmluZyBoZXJlIHNob3VsZCBnaXZlIGEgdGV4dCBpbnB1dC1maWVsZC4gCitG
b2N1c2luZyBoZXJlIHNob3VsZCBvbmx5IGdpdmUgZm9jdXMgb3V0bGluZS4KK0ZvY3VzaW5nIGhl
cmUgc2hvdWxkIGdpdmUgYSB0ZXh0IGlucHV0LWZpZWxkLgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVz
dHMvdG91Y2hhZGp1c3RtZW50L2V2ZW50LXRyaWdnZXJlZC13aWRnZXRzLmh0bWwgYi9MYXlvdXRU
ZXN0cy90b3VjaGFkanVzdG1lbnQvZXZlbnQtdHJpZ2dlcmVkLXdpZGdldHMuaHRtbApuZXcgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwLi4xMjc5Yjc3MjYzMzMxZmM1OWJlNGRiZjQxZjlmMjkwYjViNjUzZjdjCi0tLSAvZGV2L251
bGwKKysrIGIvTGF5b3V0VGVzdHMvdG91Y2hhZGp1c3RtZW50L2V2ZW50LXRyaWdnZXJlZC13aWRn
ZXRzLmh0bWwKQEAgLTAsMCArMSwxNjkgQEAKKzxodG1sPgorPGhlYWQ+Cis8c3R5bGU+CisgICAg
LmJveCB7IGJvcmRlcjogMXB4IHNvbGlkIGJsYWNrOyBib3JkZXItcmFkaXVzOiA1cHggNXB4OyBt
YXJnaW46IDFlbTsgbWF4LXdpZHRoOiA0MGVtOyB9Cis8L3N0eWxlPgorCis8c2NyaXB0IHNyYz0i
Li4vZmFzdC9qcy9yZXNvdXJjZXMvanMtdGVzdC1wcmUuanMiPjwvc2NyaXB0PgorCis8L2hlYWQ+
CisKKzxib2R5IG9ubG9hZD0icnVuVGVzdHMoKSI+CisKKzxwIGlkPSdkZXNjcmlwdGlvbic+PC9w
PgorCis8ZGl2IGlkPSdjb25zb2xlJz48L2Rpdj4KKworPHNjcmlwdD4KKyAgICB2YXIgZWxlbWVu
dDsKKyAgICB2YXIgYWRqdXN0ZWROb2RlOworICAgIGZ1bmN0aW9uIGZpbmRBYnNvbHV0ZVBvc2l0
aW9uKG5vZGUpIHsKKyAgICAgICAgdmFyIHBvcyA9IG5ldyBPYmplY3QoKTsKKyAgICAgICAgcG9z
LmxlZnQgPSAwOyBwb3MudG9wID0gMDsKKyAgICAgICAgZG8geworICAgICAgICAgICAgcG9zLmxl
ZnQgKz0gbm9kZS5vZmZzZXRMZWZ0OworICAgICAgICAgICAgcG9zLnRvcCArPSBub2RlLm9mZnNl
dFRvcDsKKyAgICAgICAgfSB3aGlsZSAobm9kZSA9IG5vZGUub2Zmc2V0UGFyZW50KTsKKyAgICAg
ICAgcmV0dXJuIHBvczsKKyAgICB9CisKKyAgICBmdW5jdGlvbiB0ZXN0RGlyZWN0VG91Y2goZWxl
bWVudCkKKyAgICB7CisgICAgICAgIHZhciBwb3MgPSBmaW5kQWJzb2x1dGVQb3NpdGlvbihlbGVt
ZW50KTsKKyAgICAgICAgdmFyIHggPSBwb3MubGVmdCArIGVsZW1lbnQuY2xpZW50V2lkdGggLyAy
IC0gMTsKKyAgICAgICAgdmFyIHkgPSBwb3MudG9wICsgZWxlbWVudC5jbGllbnRIZWlnaHQgLyAy
IC0gMTsKKyAgICAgICAgdmFyIHdpZHRoID0gMzsKKyAgICAgICAgdmFyIGhlaWdodCA9IDM7Cisg
ICAgICAgIGFkanVzdGVkTm9kZSA9IGludGVybmFscy50b3VjaE5vZGVBZGp1c3RlZFRvQmVzdENs
aWNrYWJsZU5vZGUoeCwgeSwgd2lkdGgsIGhlaWdodCwgZG9jdW1lbnQpOworCisgICAgICAgIGlm
IChhZGp1c3RlZE5vZGUubm9kZVR5cGUgPT0gMykgLy8gVEVYVCBub2RlCisgICAgICAgICAgICBh
ZGp1c3RlZE5vZGUgPSBhZGp1c3RlZE5vZGUucGFyZW50Tm9kZTsKKyAgICB9CisKKyAgICBmdW5j
dGlvbiB0ZXN0RGlyZWN0RmF0RmluZ2VyKGVsZW1lbnQpCisgICAgeworICAgICAgICB2YXIgcG9z
ID0gZmluZEFic29sdXRlUG9zaXRpb24oZWxlbWVudCk7CisgICAgICAgIHZhciB4ID0gcG9zLmxl
ZnQgKyBlbGVtZW50LmNsaWVudFdpZHRoIC8gMiAtIDE7CisgICAgICAgIHZhciB5ID0gcG9zLnRv
cCAtIDUgOworICAgICAgICB2YXIgd2lkdGggPSBlbGVtZW50LmNsaWVudEhlaWdodDsKKyAgICAg
ICAgdmFyIGhlaWdodCA9IGVsZW1lbnQuY2xpZW50SGVpZ2h0ICsgMTA7CisgICAgICAgIGFkanVz
dGVkTm9kZSA9IGludGVybmFscy50b3VjaE5vZGVBZGp1c3RlZFRvQmVzdENsaWNrYWJsZU5vZGUo
eCwgeSwgd2lkdGgsIGhlaWdodCwgZG9jdW1lbnQpOworICAgICAgICBpZiAoYWRqdXN0ZWROb2Rl
Lm5vZGVUeXBlID09IDMpIC8vIFRFWFQgbm9kZQorICAgICAgICAgICAgYWRqdXN0ZWROb2RlID0g
YWRqdXN0ZWROb2RlLnBhcmVudE5vZGU7CisgICAgfQorCisgICAgZnVuY3Rpb24gdGVzdEluZGly
ZWN0RmF0RmluZ2VyKGVsZW1lbnQpCisgICAgeworICAgICAgICB2YXIgcG9zID0gZmluZEFic29s
dXRlUG9zaXRpb24oZWxlbWVudCk7CisgICAgICAgIHZhciB4ID0gcG9zLmxlZnQgKyBlbGVtZW50
LmNsaWVudFdpZHRoIC8gMiAtIDE7CisgICAgICAgIHZhciB5ID0gcG9zLnRvcCAtIDc7CisgICAg
ICAgIHZhciB3aWR0aCA9IDEwOworICAgICAgICB2YXIgaGVpZ2h0ID0gMTA7CisgICAgICAgIGFk
anVzdGVkTm9kZSA9IGludGVybmFscy50b3VjaE5vZGVBZGp1c3RlZFRvQmVzdENsaWNrYWJsZU5v
ZGUoeCwgeSwgd2lkdGgsIGhlaWdodCwgZG9jdW1lbnQpOworICAgICAgICBpZiAoYWRqdXN0ZWRO
b2RlLm5vZGVUeXBlID09IDMpIC8vIFRFWFQgbm9kZQorICAgICAgICAgICAgYWRqdXN0ZWROb2Rl
ID0gYWRqdXN0ZWROb2RlLnBhcmVudE5vZGU7CisgICAgfQorCisgICAgZnVuY3Rpb24gdGVzdFRv
dWNoSGl0KGVsZW1lbnRpZCwgdG91Y2hUeXBlKSB7CisgICAgICAgIGVsZW1lbnQgPSBkb2N1bWVu
dC5nZXRFbGVtZW50QnlJZChlbGVtZW50aWQpOworICAgICAgICB0b3VjaFR5cGUoZWxlbWVudCk7
CisgICAgICAgIHNob3VsZEJlKCdhZGp1c3RlZE5vZGUuaWQnLCAnZWxlbWVudC5pZCcpOworICAg
IH0KKworICAgIGZ1bmN0aW9uIHRlc3RUb3VjaE1pc3MoZWxlbWVudGlkLCB0b3VjaFR5cGUpIHsK
KyAgICAgICAgZWxlbWVudCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGVsZW1lbnRpZCk7Cisg
ICAgICAgIHRvdWNoVHlwZShlbGVtZW50KTsKKyAgICAgICAgc2hvdWxkTm90QmUoJ2FkanVzdGVk
Tm9kZS5pZCcsICdlbGVtZW50LmlkJyk7CisgICAgfQorCisgICAgZnVuY3Rpb24gdGVzdERpcmVj
dFRvdWNoZXMoKQorICAgIHsKKyAgICAgICAgZGVidWcoJ1Rlc3Rpbmcgc21hbGwgZGlyZWN0IGhp
dHMnKTsKKyAgICAgICAgdGVzdFRvdWNoSGl0KCd0ZXN0MScsIHRlc3REaXJlY3RUb3VjaCk7Cisg
ICAgICAgIHRlc3RUb3VjaEhpdCgndGVzdDInLCB0ZXN0RGlyZWN0VG91Y2gpOworICAgICAgICB0
ZXN0VG91Y2hIaXQoJ3Rlc3QzJywgdGVzdERpcmVjdFRvdWNoKTsKKyAgICAgICAgdGVzdFRvdWNo
TWlzcygndGVzdDQnLCB0ZXN0RGlyZWN0VG91Y2gpOworICAgICAgICB0ZXN0VG91Y2hIaXQoJ3Rl
c3Q1JywgdGVzdERpcmVjdFRvdWNoKTsKKyAgICB9CisKKyAgICBmdW5jdGlvbiB0ZXN0RGlyZWN0
RmF0RmluZ2VycygpCisgICAgeworICAgICAgICBkZWJ1ZygnVGVzdGluZyBsYXJnZSBkaXJlY3Qg
aGl0cycpOworICAgICAgICB0ZXN0VG91Y2hIaXQoJ3Rlc3QxJywgdGVzdERpcmVjdEZhdEZpbmdl
cik7CisgICAgICAgIHRlc3RUb3VjaEhpdCgndGVzdDInLCB0ZXN0RGlyZWN0RmF0RmluZ2VyKTsK
KyAgICAgICAgdGVzdFRvdWNoSGl0KCd0ZXN0MycsIHRlc3REaXJlY3RGYXRGaW5nZXIpOworICAg
ICAgICB0ZXN0VG91Y2hNaXNzKCd0ZXN0NCcsIHRlc3REaXJlY3RGYXRGaW5nZXIpOworICAgICAg
ICB0ZXN0VG91Y2hIaXQoJ3Rlc3Q1JywgdGVzdERpcmVjdEZhdEZpbmdlcik7CisgICAgfQorCisg
ICAgZnVuY3Rpb24gdGVzdEluZGlyZWN0RmF0RmluZ2VycygpCisgICAgeworICAgICAgICBkZWJ1
ZygnVGVzdGluZyBsYXJnZSBkaXJlY3QgaGl0cycpOworICAgICAgICB0ZXN0VG91Y2hIaXQoJ3Rl
c3QxJywgdGVzdEluZGlyZWN0RmF0RmluZ2VyKTsKKyAgICAgICAgdGVzdFRvdWNoSGl0KCd0ZXN0
MicsIHRlc3RJbmRpcmVjdEZhdEZpbmdlcik7CisgICAgICAgIHRlc3RUb3VjaEhpdCgndGVzdDMn
LCB0ZXN0SW5kaXJlY3RGYXRGaW5nZXIpOworICAgICAgICB0ZXN0VG91Y2hNaXNzKCd0ZXN0NCcs
IHRlc3RJbmRpcmVjdEZhdEZpbmdlcik7CisgICAgICAgIHRlc3RUb3VjaEhpdCgndGVzdDUnLCB0
ZXN0SW5kaXJlY3RGYXRGaW5nZXIpOworICAgIH0KKworICAgIGZ1bmN0aW9uIHJ1blRlc3RzKCkK
KyAgICB7CisgICAgICAgIGlmICh3aW5kb3cubGF5b3V0VGVzdENvbnRyb2xsZXIgJiYgd2luZG93
LmludGVybmFscyAmJiBpbnRlcm5hbHMudG91Y2hOb2RlQWRqdXN0ZWRUb0Jlc3RDbGlja2FibGVO
b2RlKSB7CisgICAgICAgICAgICBkZXNjcmlwdGlvbignVGVzdCB2YXJpb3VzIHdheXMgdG8gdHJp
Z2dlciBpbnB1dC13aWRnZXRzLiBPbiBhIHRvdWNoIGludGVyZmFjZSwgYWxsIHRoZSBhY3Rpb25z
IHNob3VsZCBiZSB0cmlnZ2VyYWJsZSB3aXRoIGVpdGhlciBhIHRvdWNoIGRvd24gb3IgYSB0b3Vj
aCB0YXAuJyk7CisgICAgICAgICAgICBsYXlvdXRUZXN0Q29udHJvbGxlci5kdW1wQXNUZXh0KCk7
CisgICAgICAgICAgICBsYXlvdXRUZXN0Q29udHJvbGxlci53YWl0VW50aWxEb25lKCk7CisgICAg
ICAgICAgICB0ZXN0RGlyZWN0VG91Y2hlcygpOworICAgICAgICAgICAgdGVzdERpcmVjdEZhdEZp
bmdlcnMoKTsKKyAgICAgICAgICAgIHRlc3RJbmRpcmVjdEZhdEZpbmdlcnMoKTsKKyAgICAgICAg
ICAgIGlzU3VjY2Vzc2Z1bGx5UGFyc2VkKCk7CisgICAgICAgICAgICBsYXlvdXRUZXN0Q29udHJv
bGxlci5ub3RpZnlEb25lKCk7CisgICAgICAgIH0KKyAgICB9Cis8L3NjcmlwdD4KKworPHNjcmlw
dD4KKyAgICBmdW5jdGlvbiB0cmlnZ2VySW5wdXQoKSB7CisgICAgICAgIHZhciBlbGVtZW50ID0g
ZXZlbnQuc3JjRWxlbWVudDsKKyAgICAgICAgaWYgKCFlbGVtZW50Lm9wZW4pIHsKKyAgICAgICAg
ICAgIGVsZW1lbnQuaW5uZXJIVE1MID0gJzxpbnB1dCB0eXBlPXRleHQgc3R5bGU9IndpZHRoOiAx
MDAlIj48L2lucHV0PicKKyAgICAgICAgICAgIGVsZW1lbnQub3BlbiA9IHRydWU7CisgICAgICAg
IH0KKyAgICAgICAgZWxlbWVudC5maXJzdENoaWxkLmZvY3VzKCk7CisgICAgfQorPC9zY3JpcHQ+
CisKKzxkaXYgaWQ9dGVzdDEgY2xhc3M9Ym94IHRhYmluZGV4PTEgb25mb2N1cz0ndHJpZ2dlcklu
cHV0KCknPgorRm9jdXMgaGVyZSBzaG91bGQgZ2l2ZSBhIHRleHQgaW5wdXQtZmllbGQuCis8L2Rp
dj4KKworPGRpdiBpZD10ZXN0MiBjbGFzcz1ib3ggb25tb3VzZW92ZXI9J3RyaWdnZXJJbnB1dCgp
Jz4gCitNb3VzZS1vdmVyIGhlcmUgc2hvdWxkIGdpdmUgYSB0ZXh0IGlucHV0LWZpZWxkLgorPC9k
aXY+CisKKzxzdHlsZT4KKyAgICAuYm94Om5vdCg6aG92ZXIpIC5ob3ZlcnRyaWdnZXJlZCB7IHZp
c2liaWxpdHk6IGhpZGRlbjt9CisgICAgLmJveDpob3ZlciAuaG92ZXJmYWxsYmFjayB7IGRpc3Bs
YXk6IG5vbmU7IH0gIAorPC9zdHlsZT4KKworPGRpdiBpZD10ZXN0MyBjbGFzcz1ib3g+IAorICAg
IDxzcGFuIGNsYXNzPWhvdmVyZmFsbGJhY2s+SG92ZXJpbmcgaGVyZSBzaG91bGQgZ2l2ZSBhIHRl
eHQgaW5wdXQtZmllbGQuPC9zcGFuPgorICAgIDxpbnB1dCB0eXBlPXRleHQgY2xhc3M9aG92ZXJ0
cmlnZ2VyZWQ+PC9pbnB1dD4KKzwvZGl2PgorCis8ZGl2IGlkPXRlc3Q0IGNsYXNzPWJveCBvbmZv
Y3VzPSd0cmlnZ2VySW5wdXQoKSc+CisgICAgPHNwYW4gdGFiaW5kZXg9MT4gRm9jdXNpbmcgaGVy
ZSBzaG91bGQgb25seSBnaXZlIGZvY3VzIG91dGxpbmUuCisgICAgPC9zcGFuPgorPC9kaXY+CisK
KzxkaXYgaWQ9dGVzdDUgY2xhc3M9Ym94PgorICAgIDxzcGFuIHRhYmluZGV4PTE+IEZvY3VzaW5n
IGhlcmUgc2hvdWxkIGdpdmUgYSB0ZXh0IGlucHV0LWZpZWxkLgorICAgIDwvc3Bhbj4KKzwvZGl2
PgorCis8c2NyaXB0PgorICAgIHZhciBlbGVtZW50ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQo
J3Rlc3Q1Jyk7CisgICAgZWxlbWVudC5hZGRFdmVudExpc3RlbmVyKCdET01Gb2N1c0luJywgdHJp
Z2dlcklucHV0LCBmYWxzZSk7Cis8L3NjcmlwdD4KKworPC9ib2R5PgorPC9odG1sPgpkaWZmIC0t
Z2l0IGEvTGF5b3V0VGVzdHMvdG91Y2hhZGp1c3RtZW50L2h0bWwtbGFiZWwtZXhwZWN0ZWQudHh0
IGIvTGF5b3V0VGVzdHMvdG91Y2hhZGp1c3RtZW50L2h0bWwtbGFiZWwtZXhwZWN0ZWQudHh0Cm5l
dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAuLmY5NjlmZGI4ZGJkOThmZDI0MjA4Y2E0ZmYwYWQzMTNiY2YyZDczMjMKLS0tIC9k
ZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy90b3VjaGFkanVzdG1lbnQvaHRtbC1sYWJlbC1leHBl
Y3RlZC50eHQKQEAgLTAsMCArMSwyMiBAQAorRG8gbm90IGNsaWNrIGhlcmUKK0NsaWNrIGhlcmUs
IGJ1dCBub3QgaGVyZS4gCisKKworCitUZXN0cyBpZiBsYWJlbHMgYXJlIHRyZWF0ZWQgYXMgY2xp
Y2thYmxlIGlmIHRoZSBpbnB1dCB0aGV5IGNvbnRyb2wgaXMuCisKK09uIHN1Y2Nlc3MsIHlvdSB3
aWxsIHNlZSBhIHNlcmllcyBvZiAiUEFTUyIgbWVzc2FnZXMsIGZvbGxvd2VkIGJ5ICJURVNUIENP
TVBMRVRFIi4KKworCitUZXN0aW5nIHNtYWxsIGRpcmVjdCBoaXRzLgorUEFTUyBhZGp1c3RlZE5v
ZGUuaWQgaXMgIm15bGluayIKK1BBU1MgYWRqdXN0ZWROb2RlLmlkIGlzICJteWxhYmVsIgorUEFT
UyBhZGp1c3RlZE5vZGUuaWQgaXMgIm15aW5wdXQiCitUZXN0aW5nIGluZGlyZWN0IGhpdHMuCitQ
QVNTIGFkanVzdGVkTm9kZS5pZCBpcyAibXlsaW5rIgorUEFTUyBhZGp1c3RlZE5vZGUuaWQgaXMg
Im15bGFiZWwiCitQQVNTIGFkanVzdGVkTm9kZS5pZCBpcyAibXlpbnB1dCIKK1BBU1Mgc3VjY2Vz
c2Z1bGx5UGFyc2VkIGlzIHRydWUKKworVEVTVCBDT01QTEVURQorCmRpZmYgLS1naXQgYS9MYXlv
dXRUZXN0cy90b3VjaGFkanVzdG1lbnQvaHRtbC1sYWJlbC5odG1sIGIvTGF5b3V0VGVzdHMvdG91
Y2hhZGp1c3RtZW50L2h0bWwtbGFiZWwuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4xYzBjZTdkZjIwNTkwMGMz
MjlmMjdmMGQ2Y2U2NmQ2YjRmYzI0OTZmCi0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMv
dG91Y2hhZGp1c3RtZW50L2h0bWwtbGFiZWwuaHRtbApAQCAtMCwwICsxLDEwOCBAQAorPGh0bWw+
Cis8aGVhZD4KKzxzY3JpcHQgc3JjPSIuLi9mYXN0L2pzL3Jlc291cmNlcy9qcy10ZXN0LXByZS5q
cyI+PC9zY3JpcHQ+CisKKzwvaGVhZD4KKworPGJvZHkgaWQ9Im15Ym9keSIgb25sb2FkPSJydW5U
ZXN0cygpIj4KKworPGEgaHJlZj0iI215Zm9ybSIgaWQ9Im15bGluayI+RG8gbm90IGNsaWNrIGhl
cmU8L2E+PGJyPgorPGZvcm0gaWQ9Im15Zm9ybSI+Cis8bGFiZWwgZm9yPSJteWlucHV0IiBpZD0i
bXlsYWJlbCI+Q2xpY2sgaGVyZSw8L2xhYmVsPgorPHNwYW4gaWQ9Im15c3BhbiI+YnV0IG5vdCBo
ZXJlLjwvc3Bhbj4KKzxpbnB1dCB0eXBlPSJ0ZXh0IiBpZD0ibXlpbnB1dCIgdmFsdWU9IlRvIGZv
Y3VzIHRoaXMuIj48L2lucHV0PgorPC9mb3JtPgorPGJyPjxicj48YnI+CisKKzxwIGlkPSdkZXNj
cmlwdGlvbic+PC9wPgorPGRpdiBpZD0nY29uc29sZSc+PC9kaXY+CisKKzxzY3JpcHQ+CisgICAg
dmFyIGVsZW1lbnQ7CisgICAgdmFyIGFkanVzdGVkTm9kZTsKKyAgICBmdW5jdGlvbiBmaW5kQWJz
b2x1dGVQb3NpdGlvbihub2RlKSB7CisgICAgICAgIHZhciBwb3MgPSBuZXcgT2JqZWN0KCk7Cisg
ICAgICAgIHBvcy5sZWZ0ID0gMDsgcG9zLnRvcCA9IDA7CisgICAgICAgIGRvIHsKKyAgICAgICAg
ICAgIHBvcy5sZWZ0ICs9IG5vZGUub2Zmc2V0TGVmdDsKKyAgICAgICAgICAgIHBvcy50b3AgKz0g
bm9kZS5vZmZzZXRUb3A7CisgICAgICAgIH0gd2hpbGUgKG5vZGUgPSBub2RlLm9mZnNldFBhcmVu
dCk7CisgICAgICAgIHJldHVybiBwb3M7CisgICAgfQorCisgICAgZnVuY3Rpb24gdGVzdERpcmVj
dFRvdWNoKGVsZW1lbnQpCisgICAgeworICAgICAgICB2YXIgcG9zID0gZmluZEFic29sdXRlUG9z
aXRpb24oZWxlbWVudCk7CisgICAgICAgIHZhciB4ID0gcG9zLmxlZnQgKyBlbGVtZW50LmNsaWVu
dFdpZHRoIC8gMiAtIDIwOworICAgICAgICB2YXIgeSA9IHBvcy50b3AgKyBlbGVtZW50LmNsaWVu
dEhlaWdodCAvIDIgLSAzMDsKKyAgICAgICAgdmFyIHdpZHRoID0gNDA7CisgICAgICAgIHZhciBo
ZWlnaHQgPSA2MDsKKyAgICAgICAgdmFyIGFkanVzdGVkTm9kZSA9IGludGVybmFscy50b3VjaE5v
ZGVBZGp1c3RlZFRvQmVzdENsaWNrYWJsZU5vZGUoeCwgeSwgd2lkdGgsIGhlaWdodCwgZG9jdW1l
bnQpOworICAgICAgICB3aGlsZSAoYWRqdXN0ZWROb2RlLm5vZGVUeXBlICE9IDEpIC8vIE5vdCBh
biBlbGVtZW50LgorICAgICAgICAgICAgYWRqdXN0ZWROb2RlID0gYWRqdXN0ZWROb2RlLnBhcmVu
dE5vZGU7CisgICAgICAgIHJldHVybiBhZGp1c3RlZE5vZGU7CisgICAgfQorCisgICAgZnVuY3Rp
b24gdGVzdEluZGlyZWN0VG91Y2goZWxlbWVudCkKKyAgICB7CisgICAgICAgIC8vIFRvdWNoIGp1
c3QgcmlnaHQgb2YgdGhlIGVsZW1lbnQuCisgICAgICAgIHZhciBwb3MgPSBmaW5kQWJzb2x1dGVQ
b3NpdGlvbihlbGVtZW50KTsKKyAgICAgICAgdmFyIHggPSBwb3MubGVmdCArIGVsZW1lbnQuY2xp
ZW50V2lkdGggKyAxMCAtIDMwOworICAgICAgICB2YXIgeSA9IHBvcy50b3AgKyBlbGVtZW50LmNs
aWVudEhlaWdodCAvIDIgLSAyMDsKKyAgICAgICAgdmFyIHdpZHRoID0gNjA7CisgICAgICAgIHZh
ciBoZWlnaHQgPSA0MDsKKyAgICAgICAgdmFyIGFkanVzdGVkTm9kZSA9IGludGVybmFscy50b3Vj
aE5vZGVBZGp1c3RlZFRvQmVzdENsaWNrYWJsZU5vZGUoeCwgeSwgd2lkdGgsIGhlaWdodCwgZG9j
dW1lbnQpOworICAgICAgICB3aGlsZSAoYWRqdXN0ZWROb2RlLm5vZGVUeXBlICE9IDEgKSAvLyBO
b3QgYW4gZWxlbWVudC4KKyAgICAgICAgICAgIGFkanVzdGVkTm9kZSA9IGFkanVzdGVkTm9kZS5w
YXJlbnROb2RlOworICAgICAgICByZXR1cm4gYWRqdXN0ZWROb2RlOworICAgIH0KKworICAgIGZ1
bmN0aW9uIHRlc3REaXJlY3RUb3VjaGVzKCkKKyAgICB7CisgICAgICAgIGRlYnVnKCdUZXN0aW5n
IHNtYWxsIGRpcmVjdCBoaXRzLicpOworCisgICAgICAgIGVsZW1lbnQgPSBkb2N1bWVudC5nZXRF
bGVtZW50QnlJZCgnbXlsaW5rJyk7CisgICAgICAgIGFkanVzdGVkTm9kZSA9IHRlc3REaXJlY3RU
b3VjaChlbGVtZW50KTsKKyAgICAgICAgc2hvdWxkQmVFcXVhbFRvU3RyaW5nKCdhZGp1c3RlZE5v
ZGUuaWQnLCAnbXlsaW5rJyk7CisKKyAgICAgICAgZWxlbWVudCA9IGRvY3VtZW50LmdldEVsZW1l
bnRCeUlkKCdteWxhYmVsJyk7CisgICAgICAgIGFkanVzdGVkTm9kZSA9IHRlc3REaXJlY3RUb3Vj
aChlbGVtZW50KTsKKyAgICAgICAgc2hvdWxkQmVFcXVhbFRvU3RyaW5nKCdhZGp1c3RlZE5vZGUu
aWQnLCAnbXlsYWJlbCcpOworCisgICAgICAgIGVsZW1lbnQgPSBkb2N1bWVudC5nZXRFbGVtZW50
QnlJZCgnbXlpbnB1dCcpOworICAgICAgICBhZGp1c3RlZE5vZGUgPSB0ZXN0RGlyZWN0VG91Y2go
ZWxlbWVudCk7CisgICAgICAgIHNob3VsZEJlRXF1YWxUb1N0cmluZygnYWRqdXN0ZWROb2RlLmlk
JywgJ215aW5wdXQnKTsKKyAgICB9CisKKyAgICBmdW5jdGlvbiB0ZXN0SW5kaXJlY3RUb3VjaGVz
KCkKKyAgICB7CisgICAgICAgIGRlYnVnKCdUZXN0aW5nIGluZGlyZWN0IGhpdHMuJyk7CisKKyAg
ICAgICAgZWxlbWVudCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdteWxpbmsnKTsKKyAgICAg
ICAgYWRqdXN0ZWROb2RlID0gdGVzdEluZGlyZWN0VG91Y2goZWxlbWVudCk7CisgICAgICAgIHNo
b3VsZEJlRXF1YWxUb1N0cmluZygnYWRqdXN0ZWROb2RlLmlkJywgJ215bGluaycpOworCisgICAg
ICAgIGVsZW1lbnQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbXlsYWJlbCcpOworICAgICAg
ICBhZGp1c3RlZE5vZGUgPSB0ZXN0SW5kaXJlY3RUb3VjaChlbGVtZW50KTsKKyAgICAgICAgc2hv
dWxkQmVFcXVhbFRvU3RyaW5nKCdhZGp1c3RlZE5vZGUuaWQnLCAnbXlsYWJlbCcpOworCisgICAg
ICAgIGVsZW1lbnQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbXlpbnB1dCcpOworICAgICAg
ICBhZGp1c3RlZE5vZGUgPSB0ZXN0SW5kaXJlY3RUb3VjaChlbGVtZW50KTsKKyAgICAgICAgc2hv
dWxkQmVFcXVhbFRvU3RyaW5nKCdhZGp1c3RlZE5vZGUuaWQnLCAnbXlpbnB1dCcpOworICAgIH0K
KworICAgIGZ1bmN0aW9uIHJ1blRlc3RzKCkKKyAgICB7CisgICAgICAgIGlmICh3aW5kb3cubGF5
b3V0VGVzdENvbnRyb2xsZXIgJiYgd2luZG93LmludGVybmFscyAmJiBpbnRlcm5hbHMudG91Y2hO
b2RlQWRqdXN0ZWRUb0Jlc3RDbGlja2FibGVOb2RlKSB7CisgICAgICAgICAgICBkZXNjcmlwdGlv
bignVGVzdHMgaWYgbGFiZWxzIGFyZSB0cmVhdGVkIGFzIGNsaWNrYWJsZSBpZiB0aGUgaW5wdXQg
dGhleSBjb250cm9sIGlzLicpOworICAgICAgICAgICAgbGF5b3V0VGVzdENvbnRyb2xsZXIuZHVt
cEFzVGV4dCgpOworICAgICAgICAgICAgbGF5b3V0VGVzdENvbnRyb2xsZXIud2FpdFVudGlsRG9u
ZSgpOworICAgICAgICAgICAgdGVzdERpcmVjdFRvdWNoZXMoKTsKKyAgICAgICAgICAgIHRlc3RJ
bmRpcmVjdFRvdWNoZXMoKTsKKyAgICAgICAgICAgIGlzU3VjY2Vzc2Z1bGx5UGFyc2VkKCk7Cisg
ICAgICAgICAgICBsYXlvdXRUZXN0Q29udHJvbGxlci5ub3RpZnlEb25lKCk7CisgICAgICAgIH0K
KyAgICB9Cis8L3NjcmlwdD4KKzwvYm9keT4KKzwvaHRtbD4KZGlmZiAtLWdpdCBhL0xheW91dFRl
c3RzL3RvdWNoYWRqdXN0bWVudC9uZXN0ZWQtdG91Y2gtZXhwZWN0ZWQudHh0IGIvTGF5b3V0VGVz
dHMvdG91Y2hhZGp1c3RtZW50L25lc3RlZC10b3VjaC1leHBlY3RlZC50eHQKbmV3IGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4u
NzNkN2M0MDVjYzdiZTZmOWFiNjc3ZTg5ZGZiNjY1Y2ZkMmRhOGE1OAotLS0gL2Rldi9udWxsCisr
KyBiL0xheW91dFRlc3RzL3RvdWNoYWRqdXN0bWVudC9uZXN0ZWQtdG91Y2gtZXhwZWN0ZWQudHh0
CkBAIC0wLDAgKzEsMTggQEAKK0JveCB3aXRoIGEgbG9jYWwgY2xpY2sgaGFuZGxlci4KK0JveCB3
aXRob3V0IGEgbG9jYWwgY2xpY2sgaGFuZGxlci4KK1Rlc3QgdGhlIGNhc2Ugd2hlcmUgYSBjbGlj
a2FibGUgdGFyZ2V0IGlzIG5lc3RlZCBpbnNpZGUgYSBkb2N1bWVudCB0aGF0IGlzIG1vbml0b3Jp
bmcgY2xpY2tzLiBUaGUgdGFyZ2V0IHdpdGggdGhlIGxvY2FsIGV2ZW50LWhhbmRsZXIgc2hvdWxk
IGJlIGNob3NlbiBpZiBtdWx0aXBsZSB0YXJnZXRzIGFyZSB0b3VjaGVkLgorCitPbiBzdWNjZXNz
LCB5b3Ugd2lsbCBzZWUgYSBzZXJpZXMgb2YgIlBBU1MiIG1lc3NhZ2VzLCBmb2xsb3dlZCBieSAi
VEVTVCBDT01QTEVURSIuCisKKworVGVzdGluZyBzbWFsbCBkaXJlY3QgaGl0cy4KK1BBU1MgYWRq
dXN0ZWROb2RlLmlkIGlzIGVsZW1lbnQuaWQKK1BBU1MgYWRqdXN0ZWROb2RlLmlkIGlzIGVsZW1l
bnQuaWQKK1Rlc3RpbmcgcHJlZmVyZWQgaGl0cy4KK1BBU1MgYWRqdXN0ZWROb2RlLmlkIGlzIGVs
ZW1lbnQxLmlkCitQQVNTIGFkanVzdGVkTm9kZS5pZCBpcyBlbGVtZW50MS5pZAorUEFTUyBhZGp1
c3RlZE5vZGUuaWQgaXMgZWxlbWVudDEuaWQKK1BBU1Mgc3VjY2Vzc2Z1bGx5UGFyc2VkIGlzIHRy
dWUKKworVEVTVCBDT01QTEVURQorCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy90b3VjaGFkanVz
dG1lbnQvbmVzdGVkLXRvdWNoLmh0bWwgYi9MYXlvdXRUZXN0cy90b3VjaGFkanVzdG1lbnQvbmVz
dGVkLXRvdWNoLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uOGY2YmRjZDEwNTljZDZhMTZjYmU1ZWI1OWQ1MmQy
MzRhZjhkZjQ2ZgotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL3RvdWNoYWRqdXN0bWVu
dC9uZXN0ZWQtdG91Y2guaHRtbApAQCAtMCwwICsxLDEyMCBAQAorPGh0bWw+Cis8aGVhZD4KKzxz
dHlsZT4KKyAgICAuYm94IHsgYm9yZGVyOiAxcHggc29saWQgYmxhY2s7IGJvcmRlci1yYWRpdXM6
IDVweCA1cHg7IG1hcmdpbjogMWVtOyBtYXgtd2lkdGg6IDQwZW07IH0KKzwvc3R5bGU+Cis8c2Ny
aXB0IHNyYz0iLi4vZmFzdC9qcy9yZXNvdXJjZXMvanMtdGVzdC1wcmUuanMiPjwvc2NyaXB0Pgor
Cis8L2hlYWQ+CisKKzxib2R5IG9ubG9hZD0icnVuVGVzdHMoKSI+CisKKzxkaXYgY2xhc3M9Ym94
IGlkPW15Ym94MT4KK0JveCB3aXRoIGEgbG9jYWwgY2xpY2sgaGFuZGxlci4KKzwvZGl2PgorCis8
ZGl2IGNsYXNzPWJveCBpZD1teWJveDI+IAorQm94IHdpdGhvdXQgYSBsb2NhbCBjbGljayBoYW5k
bGVyLgorPC9kaXY+CisKKzxzY3JpcHQ+CisgIGZ1bmN0aW9uIG1vbml0b3IoZSkgeyBhbGVydChl
LnRhcmdldCArKCBlLnRhcmdldC5pZCA/ICggJyAjJyArIGUudGFyZ2V0LmlkKSA6ICcnKSk7IH07
CisgIGZ1bmN0aW9uIGRvU29tZXRoaW5nKGUpIHt9OworCisgIHZhciBlbGVtZW50ID0gZG9jdW1l
bnQuZ2V0RWxlbWVudEJ5SWQoJ215Ym94MScpOworICBlbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIo
J2NsaWNrJywgZG9Tb21ldGhpbmcsIGZhbHNlKTsKKyAgZWxlbWVudCA9IGRvY3VtZW50LmJvZHk7
CisgIGVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCBtb25pdG9yLCBmYWxzZSk7Cis8
L3NjcmlwdD4KKworCis8cCBpZD0nZGVzY3JpcHRpb24nPjwvcD4KKzxkaXYgaWQ9J2NvbnNvbGUn
PjwvZGl2PgorCis8c2NyaXB0PgorICAgIHZhciBlbGVtZW50OworICAgIHZhciBhZGp1c3RlZE5v
ZGU7CisgICAgZnVuY3Rpb24gZmluZEFic29sdXRlUG9zaXRpb24obm9kZSkgeworICAgICAgICB2
YXIgcG9zID0gbmV3IE9iamVjdCgpOworICAgICAgICBwb3MubGVmdCA9IDA7IHBvcy50b3AgPSAw
OworICAgICAgICBkbyB7CisgICAgICAgICAgICBwb3MubGVmdCArPSBub2RlLm9mZnNldExlZnQ7
CisgICAgICAgICAgICBwb3MudG9wICs9IG5vZGUub2Zmc2V0VG9wOworICAgICAgICB9IHdoaWxl
IChub2RlID0gbm9kZS5vZmZzZXRQYXJlbnQpOworICAgICAgICByZXR1cm4gcG9zOworICAgIH0K
KworICAgIGZ1bmN0aW9uIHRlc3REaXJlY3RUb3VjaChlbGVtZW50KQorICAgIHsKKyAgICAgICAg
dmFyIHBvcyA9IGZpbmRBYnNvbHV0ZVBvc2l0aW9uKGVsZW1lbnQpOworICAgICAgICB2YXIgeCA9
IHBvcy5sZWZ0ICsgZWxlbWVudC5jbGllbnRXaWR0aCAvIDIgLSAxOworICAgICAgICB2YXIgeSA9
IHBvcy50b3AgKyBlbGVtZW50LmNsaWVudEhlaWdodCAvIDIgLSAxOworICAgICAgICB2YXIgd2lk
dGggPSAzOworICAgICAgICB2YXIgaGVpZ2h0ID0gMzsKKyAgICAgICAgdmFyIGFkanVzdGVkTm9k
ZSA9IGludGVybmFscy50b3VjaE5vZGVBZGp1c3RlZFRvQmVzdENsaWNrYWJsZU5vZGUoeCwgeSwg
d2lkdGgsIGhlaWdodCwgZG9jdW1lbnQpOworICAgICAgICBpZiAoYWRqdXN0ZWROb2RlLm5vZGVU
eXBlID09IDMpIC8vIFRFWFQgbm9kZQorICAgICAgICAgICAgYWRqdXN0ZWROb2RlID0gYWRqdXN0
ZWROb2RlLnBhcmVudE5vZGU7CisgICAgICAgIHJldHVybiBhZGp1c3RlZE5vZGU7CisgICAgfQor
CisgICAgZnVuY3Rpb24gdGVzdERvdWJsZVRvdWNoKGVsZW1lbnQxLCBlbGVtZW50Miwgb2Zmc2V0
KQorICAgIHsKKyAgICAgICAgdmFyIHBvczEgPSBmaW5kQWJzb2x1dGVQb3NpdGlvbihlbGVtZW50
MSk7CisgICAgICAgIHZhciBwb3MyID0gZmluZEFic29sdXRlUG9zaXRpb24oZWxlbWVudDIpOwor
ICAgICAgICAvLyBXZSBhc3N1bWUgdGhlIGVsZW1lbnRzIGhhdmUgdGhlIHNhbWUgeCBjb29yZCBh
bmQgd2lkdGguCisgICAgICAgIHZhciB4ID0gcG9zMS5sZWZ0ICsgZWxlbWVudDEuY2xpZW50V2lk
dGgvMiAtIDE7CisgICAgICAgIHZhciB5MSA9IHBvczEudG9wICsgZWxlbWVudDEuY2xpZW50SGVp
Z2h0LzIgKyAxOworICAgICAgICB2YXIgeTIgPSBwb3MyLnRvcCArIGVsZW1lbnQyLmNsaWVudEhl
aWdodC8yIC0gMTsKKyAgICAgICAgdmFyIHdpZHRoID0geTIgLSB5MTsKKyAgICAgICAgdmFyIGhl
aWdodCA9IHkyIC0geTE7CisgICAgICAgIHZhciBhZGp1c3RlZE5vZGUgPSBpbnRlcm5hbHMudG91
Y2hOb2RlQWRqdXN0ZWRUb0Jlc3RDbGlja2FibGVOb2RlKHgsIHkxLCB3aWR0aCwgaGVpZ2h0LCBk
b2N1bWVudCk7CisgICAgICAgIGlmIChhZGp1c3RlZE5vZGUubm9kZVR5cGUgPT0gMykgLy8gVEVY
VCBub2RlCisgICAgICAgICAgICBhZGp1c3RlZE5vZGUgPSBhZGp1c3RlZE5vZGUucGFyZW50Tm9k
ZTsKKyAgICAgICAgcmV0dXJuIGFkanVzdGVkTm9kZTsKKyAgICB9CisKKyAgICBmdW5jdGlvbiB0
ZXN0RGlyZWN0VG91Y2hlcygpCisgICAgeworICAgICAgICBkZWJ1ZygnVGVzdGluZyBzbWFsbCBk
aXJlY3QgaGl0cy4nKTsKKworICAgICAgICBlbGVtZW50ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5
SWQoJ215Ym94MScpOworICAgICAgICBhZGp1c3RlZE5vZGUgPSB0ZXN0RGlyZWN0VG91Y2goZWxl
bWVudCk7CisgICAgICAgIHNob3VsZEJlKCdhZGp1c3RlZE5vZGUuaWQnLCAnZWxlbWVudC5pZCcp
OworCisgICAgICAgIGVsZW1lbnQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbXlib3gyJyk7
CisgICAgICAgIGFkanVzdGVkTm9kZSA9IHRlc3REaXJlY3RUb3VjaChlbGVtZW50KTsKKyAgICAg
ICAgc2hvdWxkQmUoJ2FkanVzdGVkTm9kZS5pZCcsICdlbGVtZW50LmlkJyk7CisgICAgfQorCisg
ICAgZnVuY3Rpb24gdGVzdFByZWZlcmVkVG91Y2goKQorICAgIHsKKyAgICAgICAgZGVidWcoJ1Rl
c3RpbmcgcHJlZmVyZWQgaGl0cy4nKTsKKworICAgICAgICBlbGVtZW50MSA9IGRvY3VtZW50Lmdl
dEVsZW1lbnRCeUlkKCdteWJveDEnKTsKKyAgICAgICAgZWxlbWVudDIgPSBkb2N1bWVudC5nZXRF
bGVtZW50QnlJZCgnbXlib3gyJyk7CisgICAgICAgIGFkanVzdGVkTm9kZSA9IHRlc3REb3VibGVU
b3VjaChlbGVtZW50MSwgZWxlbWVudDIsIDApOworICAgICAgICBzaG91bGRCZSgnYWRqdXN0ZWRO
b2RlLmlkJywgJ2VsZW1lbnQxLmlkJyk7CisKKyAgICAgICAgLy8gRmlyc3QgdGVzdCB3YXMgY2Vu
dGVyZWQsIG5vdyBtb3ZlIHRoZSB0ZXN0IGNsb3NlciB0byB0aGUgd3Jvbmcgbm9kZSwgYW5kIGVu
c3VyZSB3ZSBzdGlsbCBnZXQgdGhlIHByZWZlcmVkIG5vZGUuCisgICAgICAgIGFkanVzdGVkTm9k
ZSA9IHRlc3REb3VibGVUb3VjaChlbGVtZW50MSwgZWxlbWVudDIsIDUpOworICAgICAgICBzaG91
bGRCZSgnYWRqdXN0ZWROb2RlLmlkJywgJ2VsZW1lbnQxLmlkJyk7CisKKyAgICAgICAgYWRqdXN0
ZWROb2RlID0gdGVzdERvdWJsZVRvdWNoKGVsZW1lbnQxLCBlbGVtZW50MiwgMTApOworICAgICAg
ICBzaG91bGRCZSgnYWRqdXN0ZWROb2RlLmlkJywgJ2VsZW1lbnQxLmlkJyk7CisgICAgfQorCisg
ICAgZnVuY3Rpb24gcnVuVGVzdHMoKQorICAgIHsKKyAgICAgICAgaWYgKHdpbmRvdy5sYXlvdXRU
ZXN0Q29udHJvbGxlciAmJiB3aW5kb3cuaW50ZXJuYWxzICYmIGludGVybmFscy50b3VjaE5vZGVB
ZGp1c3RlZFRvQmVzdENsaWNrYWJsZU5vZGUpIHsKKyAgICAgICAgICAgIGRlc2NyaXB0aW9uKCdU
ZXN0IHRoZSBjYXNlIHdoZXJlIGEgY2xpY2thYmxlIHRhcmdldCBpcyBuZXN0ZWQgaW5zaWRlIGEg
ZG9jdW1lbnQgdGhhdCBpcyBtb25pdG9yaW5nIGNsaWNrcy4gVGhlIHRhcmdldCB3aXRoIHRoZSBs
b2NhbCBldmVudC1oYW5kbGVyIHNob3VsZCBiZSBjaG9zZW4gaWYgbXVsdGlwbGUgdGFyZ2V0cyBh
cmUgdG91Y2hlZC4nKTsKKyAgICAgICAgICAgIGxheW91dFRlc3RDb250cm9sbGVyLmR1bXBBc1Rl
eHQoKTsKKyAgICAgICAgICAgIGxheW91dFRlc3RDb250cm9sbGVyLndhaXRVbnRpbERvbmUoKTsK
KyAgICAgICAgICAgIHRlc3REaXJlY3RUb3VjaGVzKCk7CisgICAgICAgICAgICB0ZXN0UHJlZmVy
ZWRUb3VjaCgpOworICAgICAgICAgICAgaXNTdWNjZXNzZnVsbHlQYXJzZWQoKTsKKyAgICAgICAg
ICAgIGxheW91dFRlc3RDb250cm9sbGVyLm5vdGlmeURvbmUoKTsKKyAgICAgICAgfQorICAgIH0K
Kzwvc2NyaXB0PgorPC9ib2R5PgorPC9odG1sPgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvdG91
Y2hhZGp1c3RtZW50L3RvdWNoLWlubGluZXMtZXhwZWN0ZWQudHh0IGIvTGF5b3V0VGVzdHMvdG91
Y2hhZGp1c3RtZW50L3RvdWNoLWlubGluZXMtZXhwZWN0ZWQudHh0Cm5ldyBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjk3NGFk
ODJhZTkzOWNlZWQyMjExZGIzNDMzOTVlYzY0MjYzOGJjNTQKLS0tIC9kZXYvbnVsbAorKysgYi9M
YXlvdXRUZXN0cy90b3VjaGFkanVzdG1lbnQvdG91Y2gtaW5saW5lcy1leHBlY3RlZC50eHQKQEAg
LTAsMCArMSwyOSBAQAorc29tZSBsaW5rCitzb21lIGxpbmsgYnJlYWtpbmcgbGluZXMgYW5kIGxp
bmsKK2hvbGEgbXVuZG8hIGEgc3BsaXQgdXAgbGluaworaGVsbG8gd29ybGQgc29tZSBsaW5rIGFs
c28gYnJlYWtpbmcKK2hpIHRoZXJlIHNvbWUgbGluayB0aGF0IGlzIGJyZWFraW5nIG11bHRpcGxl
IGxpbmVzIGp1c3QgZm9yIHRoZSB2ZXJ5IGZ1biBvZiBpdAorCitUZXN0IHRvdWNoLWFkanVzdG1l
bnQgb24gaW5saW5lIGxpbmtzLiBNYWtpbmcgc3VyZSB3ZSBjYW4gaGl0IG92ZXIgbGluZS1icmVh
a3MsIGFuZCBjYW4gbWlzcyB3aGVuIHRhcHBpbmcgYmV0d2VlbiBwYXJ0cyBvZiBhIGxpbmUtYnJv
a2VuIGxpbmsuCisKK09uIHN1Y2Nlc3MsIHlvdSB3aWxsIHNlZSBhIHNlcmllcyBvZiAiUEFTUyIg
bWVzc2FnZXMsIGZvbGxvd2VkIGJ5ICJURVNUIENPTVBMRVRFIi4KKworCitUZXN0IHNvbWUgZGly
ZWN0IGhpdHMuCitQQVNTIGFkanVzdGVkTm9kZS5pZCBpcyAiMSIKK1BBU1MgYWRqdXN0ZWROb2Rl
LmlkIGlzICIyIgorUEFTUyBhZGp1c3RlZE5vZGUuaWQgaXMgIjQiCitQQVNTIGFkanVzdGVkTm9k
ZS5pZCBpcyAiNiIKK1Rlc3QgYSBmZXcgZGlyZWN0IG1pc3Nlcy4KK1BBU1MgYWRqdXN0ZWROb2Rl
LmlkIGlzICIiCitQQVNTIGFkanVzdGVkTm9kZS5pZCBpcyAiIgorVGVzdCBzb21lIGluLWRpcmVj
dCBoaXRzLgorUEFTUyBhZGp1c3RlZE5vZGUuaWQgaXMgIjIiCitQQVNTIGFkanVzdGVkTm9kZS5p
ZCBpcyAiMyIKK1BBU1MgYWRqdXN0ZWROb2RlLmlkIGlzICI0IgorUEFTUyBhZGp1c3RlZE5vZGUu
aWQgaXMgIjQiCitQQVNTIGFkanVzdGVkTm9kZS5pZCBpcyAiNiIKK1BBU1Mgc3VjY2Vzc2Z1bGx5
UGFyc2VkIGlzIHRydWUKKworVEVTVCBDT01QTEVURQorCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0
cy90b3VjaGFkanVzdG1lbnQvdG91Y2gtaW5saW5lcy5odG1sIGIvTGF5b3V0VGVzdHMvdG91Y2hh
ZGp1c3RtZW50L3RvdWNoLWlubGluZXMuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5lOTk4MDRiNzNmOGFhZjI5
YTJhZGE5YTFhMzY1ZjRjYTA1ZTEzMDdkCi0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMv
dG91Y2hhZGp1c3RtZW50L3RvdWNoLWlubGluZXMuaHRtbApAQCAtMCwwICsxLDk5IEBACis8aHRt
bD4KKzxoZWFkPgorICAgIDxzY3JpcHQgc3JjPSIuLi9mYXN0L2pzL3Jlc291cmNlcy9qcy10ZXN0
LXByZS5qcyI+PC9zY3JpcHQ+Cis8L2hlYWQ+Cis8Ym9keSBvbmxvYWQ9InJ1blRlc3RzKCkiPgor
Cis8cCBzdHlsZT0id2lkdGg6IDEwZW07Ij4KKzxhIGlkPSIxIiBocmVmPSIjMSI+c29tZSBsaW5r
PC9hPjxicj4KKzxhIGlkPSIyIiBocmVmPSIjMiI+c29tZSBsaW5rIGJyZWFraW5nIGxpbmVzPC9h
PiBhbmQgPGEgaWQ9IjMiIGhyZWY9IiMzIj5saW5rPC9hPjxicj4KK2hvbGEgbXVuZG8hIDxhIGlk
PSI0IiBocmVmPSIjNCI+YSBzcGxpdCB1cCBsaW5rPC9hPjxicj4KK2hlbGxvIHdvcmxkIDxhIGlk
PSI1IiBocmVmPSIjNSI+c29tZSBsaW5rIGFsc28gYnJlYWtpbmc8L2E+PGJyPgoraGkgdGhlcmUg
PGEgaWQ9IjYiIGhyZWY9IiM2Ij5zb21lIGxpbmsgdGhhdCBpcyBicmVha2luZyBtdWx0aXBsZSBs
aW5lcyBqdXN0IGZvciB0aGUgdmVyeSBmdW4gb2YgaXQ8L2E+PGJyPjxicj4KKzwvcD4KKworCis8
cCBpZD0nZGVzY3JpcHRpb24nPjwvcD4KKzxkaXYgaWQ9J2NvbnNvbGUnPjwvZGl2PgorCis8c2Ny
aXB0PgorICAgIHZhciBlbGVtZW50OworICAgIHZhciBhZGp1c3RlZE5vZGU7CisgICAgZnVuY3Rp
b24gdGVzdFJvdW5kVG91Y2goeCwgeSwgcmFkaXVzKQorICAgIHsKKyAgICAgICAgdmFyIHggPSB4
IC0gcmFkaXVzOworICAgICAgICB2YXIgeSA9IHkgLSByYWRpdXM7CisgICAgICAgIHZhciB3aWR0
aCA9IHJhZGl1cyAqIDI7CisgICAgICAgIHZhciBoZWlnaHQgPSByYWRpdXMgKiAyOworICAgICAg
ICB2YXIgYWRqdXN0ZWROb2RlID0gaW50ZXJuYWxzLnRvdWNoTm9kZUFkanVzdGVkVG9CZXN0Q2xp
Y2thYmxlTm9kZSh4LCB5LCB3aWR0aCwgaGVpZ2h0LCBkb2N1bWVudCk7CisgICAgICAgIGlmIChh
ZGp1c3RlZE5vZGUubm9kZVR5cGUgPT0gMykgLy8gVEVYVCBub2RlCisgICAgICAgICAgICBhZGp1
c3RlZE5vZGUgPSBhZGp1c3RlZE5vZGUucGFyZW50Tm9kZTsKKyAgICAgICAgcmV0dXJuIGFkanVz
dGVkTm9kZTsKKyAgICB9CisKKyAgICBmdW5jdGlvbiB0ZXN0RGlyZWN0VG91Y2hlcygpCisgICAg
eworICAgICAgICBkZWJ1ZygnVGVzdCBzb21lIGRpcmVjdCBoaXRzLicpOworCisgICAgICAgIGFk
anVzdGVkTm9kZSA9IHRlc3RSb3VuZFRvdWNoKDMwLCAyMCwgOCkKKyAgICAgICAgc2hvdWxkQmVF
cXVhbFRvU3RyaW5nKCdhZGp1c3RlZE5vZGUuaWQnLCAnMScpOworCisgICAgICAgIGFkanVzdGVk
Tm9kZSA9IHRlc3RSb3VuZFRvdWNoKDMwLCA2MCwgOCkKKyAgICAgICAgc2hvdWxkQmVFcXVhbFRv
U3RyaW5nKCdhZGp1c3RlZE5vZGUuaWQnLCAnMicpOworCisgICAgICAgIGFkanVzdGVkTm9kZSA9
IHRlc3RSb3VuZFRvdWNoKDEyMCwgODAsIDgpCisgICAgICAgIHNob3VsZEJlRXF1YWxUb1N0cmlu
ZygnYWRqdXN0ZWROb2RlLmlkJywgJzQnKTsKKworICAgICAgICBhZGp1c3RlZE5vZGUgPSB0ZXN0
Um91bmRUb3VjaCg4MCwgMTgwLCA4KQorICAgICAgICBzaG91bGRCZUVxdWFsVG9TdHJpbmcoJ2Fk
anVzdGVkTm9kZS5pZCcsICc2Jyk7CisgICAgfQorCisgICAgZnVuY3Rpb24gdGVzdERpcmVjdE1p
c3NlcygpCisgICAgeworICAgICAgICBkZWJ1ZygnVGVzdCBhIGZldyBkaXJlY3QgbWlzc2VzLicp
OworCisgICAgICAgIGFkanVzdGVkTm9kZSA9IHRlc3RSb3VuZFRvdWNoKDU2LCA2MCwgOCkKKyAg
ICAgICAgc2hvdWxkQmVFcXVhbFRvU3RyaW5nKCdhZGp1c3RlZE5vZGUuaWQnLCAnJyk7CisKKyAg
ICAgICAgYWRqdXN0ZWROb2RlID0gdGVzdFJvdW5kVG91Y2goMjAsIDE2MCwgNCkKKyAgICAgICAg
c2hvdWxkQmVFcXVhbFRvU3RyaW5nKCdhZGp1c3RlZE5vZGUuaWQnLCAnJyk7CisKKyAgICB9CisK
KyAgICBmdW5jdGlvbiB0ZXN0SW5kaXJlY3RUb3VjaGVzKCkKKyAgICB7CisgICAgICAgIGRlYnVn
KCdUZXN0IHNvbWUgaW4tZGlyZWN0IGhpdHMuJyk7CisKKyAgICAgICAgYWRqdXN0ZWROb2RlID0g
dGVzdFJvdW5kVG91Y2goNTYsIDYwLCAyMCkKKyAgICAgICAgc2hvdWxkQmVFcXVhbFRvU3RyaW5n
KCdhZGp1c3RlZE5vZGUuaWQnLCAnMicpOworCisgICAgICAgIGFkanVzdGVkTm9kZSA9IHRlc3RS
b3VuZFRvdWNoKDg1LCA4MCwgMjApCisgICAgICAgIHNob3VsZEJlRXF1YWxUb1N0cmluZygnYWRq
dXN0ZWROb2RlLmlkJywgJzMnKTsKKworICAgICAgICBhZGp1c3RlZE5vZGUgPSB0ZXN0Um91bmRU
b3VjaCgxMjAsIDYwLCAyMCkKKyAgICAgICAgc2hvdWxkQmVFcXVhbFRvU3RyaW5nKCdhZGp1c3Rl
ZE5vZGUuaWQnLCAnNCcpOworCisgICAgICAgIGFkanVzdGVkTm9kZSA9IHRlc3RSb3VuZFRvdWNo
KDQwLCAxMDAsIDIwKQorICAgICAgICBzaG91bGRCZUVxdWFsVG9TdHJpbmcoJ2FkanVzdGVkTm9k
ZS5pZCcsICc0Jyk7CisKKyAgICAgICAgYWRqdXN0ZWROb2RlID0gdGVzdFJvdW5kVG91Y2goMjAs
IDE2NSwgMjApCisgICAgICAgIHNob3VsZEJlRXF1YWxUb1N0cmluZygnYWRqdXN0ZWROb2RlLmlk
JywgJzYnKTsKKworICAgIH0KKworICAgIGZ1bmN0aW9uIHJ1blRlc3RzKCkKKyAgICB7CisgICAg
ICAgIGlmICh3aW5kb3cubGF5b3V0VGVzdENvbnRyb2xsZXIgJiYgd2luZG93LmludGVybmFscyAm
JiBpbnRlcm5hbHMudG91Y2hOb2RlQWRqdXN0ZWRUb0Jlc3RDbGlja2FibGVOb2RlKSB7CisgICAg
ICAgICAgICBkZXNjcmlwdGlvbignVGVzdCB0b3VjaC1hZGp1c3RtZW50IG9uIGlubGluZSBsaW5r
cy4gTWFraW5nIHN1cmUgd2UgY2FuIGhpdCBvdmVyIGxpbmUtYnJlYWtzLCBhbmQgY2FuIG1pc3Mg
d2hlbiB0YXBwaW5nIGJldHdlZW4gcGFydHMgb2YgYSBsaW5lLWJyb2tlbiBsaW5rLicpOworICAg
ICAgICAgICAgbGF5b3V0VGVzdENvbnRyb2xsZXIuZHVtcEFzVGV4dCgpOworICAgICAgICAgICAg
bGF5b3V0VGVzdENvbnRyb2xsZXIud2FpdFVudGlsRG9uZSgpOworICAgICAgICAgICAgdGVzdERp
cmVjdFRvdWNoZXMoKTsKKyAgICAgICAgICAgIHRlc3REaXJlY3RNaXNzZXMoKTsKKyAgICAgICAg
ICAgIHRlc3RJbmRpcmVjdFRvdWNoZXMoKTsKKyAgICAgICAgICAgIGlzU3VjY2Vzc2Z1bGx5UGFy
c2VkKCk7CisgICAgICAgICAgICBsYXlvdXRUZXN0Q29udHJvbGxlci5ub3RpZnlEb25lKCk7Cisg
ICAgICAgIH0KKyAgICB9Cis8L3NjcmlwdD4KKzwvYm9keT4KKzwvaHRtbD4K
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>131032</attachid>
            <date>2012-03-09 05:19:59 -0800</date>
            <delta_ts>2012-03-12 09:21:53 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>Patch13</filename>
            <type>text/plain</type>
            <size>60859</size>
            <attacher name="Allan Sandfeld Jensen">allan.jensen</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL0NoYW5nZUxvZyBiL0xheW91dFRlc3RzL0NoYW5nZUxv
ZwppbmRleCBlYzQzZmNmLi45OWVlNDgxIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9DaGFuZ2VM
b2cKKysrIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjYgQEAKKzIwMTItMDMt
MDkgIEFsbGFuIFNhbmRmZWxkIEplbnNlbiAgPGFsbGFuLmplbnNlbkBub2tpYS5jb20+CisKKyAg
ICAgICAgU2VsZWN0IGJlc3QgdGFyZ2V0IGZvciB0YXAgZ2VzdHVyZS4KKyAgICAgICAgaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTc4ODAxCisKKyAgICAgICAgUmV2aWV3
ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVGVzdCBvZiB0b3VjaCBhZGp1c3RtZW50
cy4gVGVzdHMgc2V2ZXJhbCBib3RoIG5vcm1hbCBhbmQgdHJpY2t5IGNhc2VzLgorCisgICAgICAg
ICogcGxhdGZvcm0vY2hyb21pdW0vdGVzdF9leHBlY3RhdGlvbnMudHh0OgorICAgICAgICAqIHBs
YXRmb3JtL2VmbC9Ta2lwcGVkOgorICAgICAgICAqIHBsYXRmb3JtL2d0ay9Ta2lwcGVkOgorICAg
ICAgICAqIHBsYXRmb3JtL21hYy9Ta2lwcGVkOgorICAgICAgICAqIHBsYXRmb3JtL3dpbi9Ta2lw
cGVkOgorICAgICAgICAqIHRvdWNoYWRqdXN0bWVudC9ldmVudC10cmlnZ2VyZWQtd2lkZ2V0cy1l
eHBlY3RlZC50eHQ6IEFkZGVkLgorICAgICAgICAqIHRvdWNoYWRqdXN0bWVudC9ldmVudC10cmln
Z2VyZWQtd2lkZ2V0cy5odG1sOiBBZGRlZC4KKyAgICAgICAgKiB0b3VjaGFkanVzdG1lbnQvaHRt
bC1sYWJlbC1leHBlY3RlZC50eHQ6IEFkZGVkLgorICAgICAgICAqIHRvdWNoYWRqdXN0bWVudC9o
dG1sLWxhYmVsLmh0bWw6IEFkZGVkLgorICAgICAgICAqIHRvdWNoYWRqdXN0bWVudC9uZXN0ZWQt
dG91Y2gtZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAgICAgKiB0b3VjaGFkanVzdG1lbnQvbmVz
dGVkLXRvdWNoLmh0bWw6IEFkZGVkLgorICAgICAgICAqIHRvdWNoYWRqdXN0bWVudC90b3VjaC1p
bmxpbmVzLWV4cGVjdGVkLnR4dDogQWRkZWQuCisgICAgICAgICogdG91Y2hhZGp1c3RtZW50L3Rv
dWNoLWlubGluZXMuaHRtbDogQWRkZWQuCisKIDIwMTItMDMtMDkgIE7DoW5kb3IgSHVzemthICA8
aHVzemthLm5hbmRvckBzdHVkLnUtc3plZ2VkLmh1PgogCiAgICAgICAgIFtRdF0gR2FyZGVuaW5n
LCBza2lwIDMgZmFpbGluZyB0ZXN0cy4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3BsYXRmb3Jt
L2Nocm9taXVtL3Rlc3RfZXhwZWN0YXRpb25zLnR4dCBiL0xheW91dFRlc3RzL3BsYXRmb3JtL2No
cm9taXVtL3Rlc3RfZXhwZWN0YXRpb25zLnR4dAppbmRleCBlZGExZjRmLi4zMjExNGNhIDEwMDY0
NAotLS0gYS9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9jaHJvbWl1bS90ZXN0X2V4cGVjdGF0aW9ucy50
eHQKKysrIGIvTGF5b3V0VGVzdHMvcGxhdGZvcm0vY2hyb21pdW0vdGVzdF9leHBlY3RhdGlvbnMu
dHh0CkBAIC0xMTQsNiArMTE0LDkgQEAgQlVHQ1IxMDM5MzkgU0tJUCA6IGh0dHAvdGVzdHMvYXBw
Y2FjaGUvd3JvbmctY29udGVudC10eXBlLmh0bWwgPSBURVhUCiAvLyBWaWJyYXRpb24gQVBJIGlz
IG5vdCBzdXBwb3J0ZWQgeWV0IGluIHRoZSBjaHJvbWl1bSBwb3J0LgogQlVHV0s3MjAxMCBTS0lQ
IDogZmFzdC9kb20vbmF2aWdhdG9yLXZpYnJhdGlvbi5odG1sID0gRkFJTAogCisvLyBUb3VjaCBB
ZGp1c3RtZW50IGlzIG5vdCBzdXBwb3J0ZWQgeWV0IGluIHRoZSBjaHJvbWl1bSBwb3J0LgorQlVH
V0s3ODgwMSBTS0lQIDogdG91Y2hhZGp1c3RtZW50LyA9IEZBSUwKKwogLy8gLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIC8v
IFdPTlRGSVggVEVTVFMKIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9wbGF0
Zm9ybS9lZmwvU2tpcHBlZCBiL0xheW91dFRlc3RzL3BsYXRmb3JtL2VmbC9Ta2lwcGVkCmluZGV4
IDljZTRkYTEuLmQ5ODZmYWYgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL3BsYXRmb3JtL2VmbC9T
a2lwcGVkCisrKyBiL0xheW91dFRlc3RzL3BsYXRmb3JtL2VmbC9Ta2lwcGVkCkBAIC0yNzYyLDYg
KzI3NjIsMTAgQEAgZmFzdC9ldmVudHMvcGFnZS12aXNpYmlsaXR5LWlmcmFtZS1kZWxldGUtdGVz
dC5odG1sCiBmYXN0L2V2ZW50cy9wYWdlLXZpc2liaWxpdHktaWZyYW1lLXByb3BhZ2F0aW9uLXRl
c3QuaHRtbAogZmFzdC9ldmVudHMvcGFnZS12aXNpYmlsaXR5LXRyYW5zaXRpb24tdGVzdC5odG1s
CiAKKyMgVG91Y2ggYWRqdXN0bWVudCBub3QgZW5hYmxlZAorIyBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9Nzg4MDEKK3RvdWNoYWRqdXN0bWVudAorCiAjIFRoZXJlIGFy
ZSBubyBleHBlY3RlZCByZXN1bHQgc2V0IHlldC4KIGFuaW1hdGlvbnMvYWRkaXRpdmUtdHJhbnNm
b3JtLWFuaW1hdGlvbnMuaHRtbAogYW5pbWF0aW9ucy9hbmltYXRpb24tYm9yZGVyLW92ZXJmbG93
Lmh0bWwKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3BsYXRmb3JtL2d0ay9Ta2lwcGVkIGIvTGF5
b3V0VGVzdHMvcGxhdGZvcm0vZ3RrL1NraXBwZWQKaW5kZXggZWMyN2Y2Mi4uNzgwZGQ4ZCAxMDA2
NDQKLS0tIGEvTGF5b3V0VGVzdHMvcGxhdGZvcm0vZ3RrL1NraXBwZWQKKysrIGIvTGF5b3V0VGVz
dHMvcGxhdGZvcm0vZ3RrL1NraXBwZWQKQEAgLTE1OTAsMyArMTU5MCw3IEBAIHBsdWdpbnMvbmV0
c2NhcGUtcGx1Z2luLXBhZ2UtY2FjaGUtd29ya3MuaHRtbAogCiAjIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD04MDUzNAogZmFzdC9ldmVudHMvYXV0b3Njcm9sbC1pbi10
ZXh0ZmllbGQuaHRtbAorCisjIFRvdWNoIGFkanVzdG1lbnQgbm90IGVuYWJsZWQKKyMgaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTc4ODAxCit0b3VjaGFkanVzdG1lbnQK
ZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3BsYXRmb3JtL21hYy9Ta2lwcGVkIGIvTGF5b3V0VGVz
dHMvcGxhdGZvcm0vbWFjL1NraXBwZWQKaW5kZXggNmIyMTQ5MC4uYjZhNzEzNyAxMDA2NDQKLS0t
IGEvTGF5b3V0VGVzdHMvcGxhdGZvcm0vbWFjL1NraXBwZWQKKysrIGIvTGF5b3V0VGVzdHMvcGxh
dGZvcm0vbWFjL1NraXBwZWQKQEAgLTU2OSwzICs1NjksNyBAQCBmYXN0L211dGF0aW9uL2VuZC1v
Zi10YXNrLWRlbGl2ZXJ5Lmh0bWwKICMgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTcyMDEwCiAjIE5lZWRzIFBhZ2VDbGllbnRzOjp2aWJyYXRpb25DbGllbnQoKSBpbXBs
ZW1lbnRhdGlvbi4KIGZhc3QvZG9tL25hdmlnYXRvci12aWJyYXRpb24uaHRtbAorCisjIFRvdWNo
IGFkanVzdG1lbnQgbm90IGVuYWJsZWQKKyMgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTc4ODAxCit0b3VjaGFkanVzdG1lbnQKZGlmZiAtLWdpdCBhL0xheW91dFRlc3Rz
L3BsYXRmb3JtL3dpbi9Ta2lwcGVkIGIvTGF5b3V0VGVzdHMvcGxhdGZvcm0vd2luL1NraXBwZWQK
aW5kZXggZDE3OTM5My4uZDYyOTI3ZSAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvcGxhdGZvcm0v
d2luL1NraXBwZWQKKysrIGIvTGF5b3V0VGVzdHMvcGxhdGZvcm0vd2luL1NraXBwZWQKQEAgLTE2
NjIsNiArMTY2MiwxMCBAQCBmYXN0L3JlcGFpbnQvdHJhbnNmb3JtLWFic29sdXRlLWluLXBvc2l0
aW9uZWQtY29udGFpbmVyLmh0bWwKICNWaWJyYXRpb24gQVBJIGlzIG5vdCBpbXBsZW1lbnRlZC4K
IGZhc3QvZG9tL25hdmlnYXRvci12aWJyYXRpb24uaHRtbAogCisjIFRvdWNoIGFkanVzdG1lbnQg
bm90IGVuYWJsZWQKKyMgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTc4
ODAxCit0b3VjaGFkanVzdG1lbnQKKwogIyBUaG9zZSB0ZXN0cyBuZWVkIGEgdGV4dCBiYXNlbGlu
ZSBhZnRlciBsYXppbHkgYWxsb2NhdGluZyBsYXllcnMuCiAjIFRoZSBjaGFuZ2Ugc2hvdWxkIG9u
bHkgYmUgbGF5ZXIgcmVtb3ZhbC4KIGFuaW1hdGlvbnMvY29tYm8tdHJhbnNmb3JtLXRyYW5zbGF0
ZStzY2FsZS5odG1sCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy90b3VjaGFkanVzdG1lbnQvZXZl
bnQtdHJpZ2dlcmVkLXdpZGdldHMtZXhwZWN0ZWQudHh0IGIvTGF5b3V0VGVzdHMvdG91Y2hhZGp1
c3RtZW50L2V2ZW50LXRyaWdnZXJlZC13aWRnZXRzLWV4cGVjdGVkLnR4dApuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwLi5mOTRlMjBlCi0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0
VGVzdHMvdG91Y2hhZGp1c3RtZW50L2V2ZW50LXRyaWdnZXJlZC13aWRnZXRzLWV4cGVjdGVkLnR4
dApAQCAtMCwwICsxLDMxIEBACitUZXN0IHZhcmlvdXMgd2F5cyB0byB0cmlnZ2VyIGlucHV0LXdp
ZGdldHMuIE9uIGEgdG91Y2ggaW50ZXJmYWNlLCBhbGwgdGhlIGFjdGlvbnMgc2hvdWxkIGJlIHRy
aWdnZXJhYmxlIHdpdGggZWl0aGVyIGEgdG91Y2ggZG93biBvciBhIHRvdWNoIHRhcC4KKworT24g
c3VjY2VzcywgeW91IHdpbGwgc2VlIGEgc2VyaWVzIG9mICJQQVNTIiBtZXNzYWdlcywgZm9sbG93
ZWQgYnkgIlRFU1QgQ09NUExFVEUiLgorCisKK1Rlc3Rpbmcgc21hbGwgZGlyZWN0IGhpdHMKK1BB
U1MgYWRqdXN0ZWROb2RlLmlkIGlzIGVsZW1lbnQuaWQKK1BBU1MgYWRqdXN0ZWROb2RlLmlkIGlz
IGVsZW1lbnQuaWQKK1BBU1MgYWRqdXN0ZWROb2RlLmlkIGlzIGVsZW1lbnQuaWQKK1BBU1MgYWRq
dXN0ZWROb2RlLmlkIGlzIG5vdCBlbGVtZW50LmlkCitQQVNTIGFkanVzdGVkTm9kZS5pZCBpcyBl
bGVtZW50LmlkCitUZXN0aW5nIGxhcmdlIGRpcmVjdCBoaXRzCitQQVNTIGFkanVzdGVkTm9kZS5p
ZCBpcyBlbGVtZW50LmlkCitQQVNTIGFkanVzdGVkTm9kZS5pZCBpcyBlbGVtZW50LmlkCitQQVNT
IGFkanVzdGVkTm9kZS5pZCBpcyBlbGVtZW50LmlkCitQQVNTIGFkanVzdGVkTm9kZS5pZCBpcyBu
b3QgZWxlbWVudC5pZAorUEFTUyBhZGp1c3RlZE5vZGUuaWQgaXMgZWxlbWVudC5pZAorVGVzdGlu
ZyBsYXJnZSBkaXJlY3QgaGl0cworUEFTUyBhZGp1c3RlZE5vZGUuaWQgaXMgZWxlbWVudC5pZAor
UEFTUyBhZGp1c3RlZE5vZGUuaWQgaXMgZWxlbWVudC5pZAorUEFTUyBhZGp1c3RlZE5vZGUuaWQg
aXMgZWxlbWVudC5pZAorUEFTUyBhZGp1c3RlZE5vZGUuaWQgaXMgbm90IGVsZW1lbnQuaWQKK1BB
U1MgYWRqdXN0ZWROb2RlLmlkIGlzIGVsZW1lbnQuaWQKK1BBU1Mgc3VjY2Vzc2Z1bGx5UGFyc2Vk
IGlzIHRydWUKKworVEVTVCBDT01QTEVURQorRm9jdXMgaGVyZSBzaG91bGQgZ2l2ZSBhIHRleHQg
aW5wdXQtZmllbGQuCitNb3VzZS1vdmVyIGhlcmUgc2hvdWxkIGdpdmUgYSB0ZXh0IGlucHV0LWZp
ZWxkLgorSG92ZXJpbmcgaGVyZSBzaG91bGQgZ2l2ZSBhIHRleHQgaW5wdXQtZmllbGQuIAorRm9j
dXNpbmcgaGVyZSBzaG91bGQgb25seSBnaXZlIGZvY3VzIG91dGxpbmUuCitGb2N1c2luZyBoZXJl
IHNob3VsZCBnaXZlIGEgdGV4dCBpbnB1dC1maWVsZC4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3Rz
L3RvdWNoYWRqdXN0bWVudC9ldmVudC10cmlnZ2VyZWQtd2lkZ2V0cy5odG1sIGIvTGF5b3V0VGVz
dHMvdG91Y2hhZGp1c3RtZW50L2V2ZW50LXRyaWdnZXJlZC13aWRnZXRzLmh0bWwKbmV3IGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTI3OWI3NwotLS0gL2Rldi9udWxsCisrKyBiL0xh
eW91dFRlc3RzL3RvdWNoYWRqdXN0bWVudC9ldmVudC10cmlnZ2VyZWQtd2lkZ2V0cy5odG1sCkBA
IC0wLDAgKzEsMTY5IEBACis8aHRtbD4KKzxoZWFkPgorPHN0eWxlPgorICAgIC5ib3ggeyBib3Jk
ZXI6IDFweCBzb2xpZCBibGFjazsgYm9yZGVyLXJhZGl1czogNXB4IDVweDsgbWFyZ2luOiAxZW07
IG1heC13aWR0aDogNDBlbTsgfQorPC9zdHlsZT4KKworPHNjcmlwdCBzcmM9Ii4uL2Zhc3QvanMv
cmVzb3VyY2VzL2pzLXRlc3QtcHJlLmpzIj48L3NjcmlwdD4KKworPC9oZWFkPgorCis8Ym9keSBv
bmxvYWQ9InJ1blRlc3RzKCkiPgorCis8cCBpZD0nZGVzY3JpcHRpb24nPjwvcD4KKworPGRpdiBp
ZD0nY29uc29sZSc+PC9kaXY+CisKKzxzY3JpcHQ+CisgICAgdmFyIGVsZW1lbnQ7CisgICAgdmFy
IGFkanVzdGVkTm9kZTsKKyAgICBmdW5jdGlvbiBmaW5kQWJzb2x1dGVQb3NpdGlvbihub2RlKSB7
CisgICAgICAgIHZhciBwb3MgPSBuZXcgT2JqZWN0KCk7CisgICAgICAgIHBvcy5sZWZ0ID0gMDsg
cG9zLnRvcCA9IDA7CisgICAgICAgIGRvIHsKKyAgICAgICAgICAgIHBvcy5sZWZ0ICs9IG5vZGUu
b2Zmc2V0TGVmdDsKKyAgICAgICAgICAgIHBvcy50b3AgKz0gbm9kZS5vZmZzZXRUb3A7CisgICAg
ICAgIH0gd2hpbGUgKG5vZGUgPSBub2RlLm9mZnNldFBhcmVudCk7CisgICAgICAgIHJldHVybiBw
b3M7CisgICAgfQorCisgICAgZnVuY3Rpb24gdGVzdERpcmVjdFRvdWNoKGVsZW1lbnQpCisgICAg
eworICAgICAgICB2YXIgcG9zID0gZmluZEFic29sdXRlUG9zaXRpb24oZWxlbWVudCk7CisgICAg
ICAgIHZhciB4ID0gcG9zLmxlZnQgKyBlbGVtZW50LmNsaWVudFdpZHRoIC8gMiAtIDE7CisgICAg
ICAgIHZhciB5ID0gcG9zLnRvcCArIGVsZW1lbnQuY2xpZW50SGVpZ2h0IC8gMiAtIDE7CisgICAg
ICAgIHZhciB3aWR0aCA9IDM7CisgICAgICAgIHZhciBoZWlnaHQgPSAzOworICAgICAgICBhZGp1
c3RlZE5vZGUgPSBpbnRlcm5hbHMudG91Y2hOb2RlQWRqdXN0ZWRUb0Jlc3RDbGlja2FibGVOb2Rl
KHgsIHksIHdpZHRoLCBoZWlnaHQsIGRvY3VtZW50KTsKKworICAgICAgICBpZiAoYWRqdXN0ZWRO
b2RlLm5vZGVUeXBlID09IDMpIC8vIFRFWFQgbm9kZQorICAgICAgICAgICAgYWRqdXN0ZWROb2Rl
ID0gYWRqdXN0ZWROb2RlLnBhcmVudE5vZGU7CisgICAgfQorCisgICAgZnVuY3Rpb24gdGVzdERp
cmVjdEZhdEZpbmdlcihlbGVtZW50KQorICAgIHsKKyAgICAgICAgdmFyIHBvcyA9IGZpbmRBYnNv
bHV0ZVBvc2l0aW9uKGVsZW1lbnQpOworICAgICAgICB2YXIgeCA9IHBvcy5sZWZ0ICsgZWxlbWVu
dC5jbGllbnRXaWR0aCAvIDIgLSAxOworICAgICAgICB2YXIgeSA9IHBvcy50b3AgLSA1IDsKKyAg
ICAgICAgdmFyIHdpZHRoID0gZWxlbWVudC5jbGllbnRIZWlnaHQ7CisgICAgICAgIHZhciBoZWln
aHQgPSBlbGVtZW50LmNsaWVudEhlaWdodCArIDEwOworICAgICAgICBhZGp1c3RlZE5vZGUgPSBp
bnRlcm5hbHMudG91Y2hOb2RlQWRqdXN0ZWRUb0Jlc3RDbGlja2FibGVOb2RlKHgsIHksIHdpZHRo
LCBoZWlnaHQsIGRvY3VtZW50KTsKKyAgICAgICAgaWYgKGFkanVzdGVkTm9kZS5ub2RlVHlwZSA9
PSAzKSAvLyBURVhUIG5vZGUKKyAgICAgICAgICAgIGFkanVzdGVkTm9kZSA9IGFkanVzdGVkTm9k
ZS5wYXJlbnROb2RlOworICAgIH0KKworICAgIGZ1bmN0aW9uIHRlc3RJbmRpcmVjdEZhdEZpbmdl
cihlbGVtZW50KQorICAgIHsKKyAgICAgICAgdmFyIHBvcyA9IGZpbmRBYnNvbHV0ZVBvc2l0aW9u
KGVsZW1lbnQpOworICAgICAgICB2YXIgeCA9IHBvcy5sZWZ0ICsgZWxlbWVudC5jbGllbnRXaWR0
aCAvIDIgLSAxOworICAgICAgICB2YXIgeSA9IHBvcy50b3AgLSA3OworICAgICAgICB2YXIgd2lk
dGggPSAxMDsKKyAgICAgICAgdmFyIGhlaWdodCA9IDEwOworICAgICAgICBhZGp1c3RlZE5vZGUg
PSBpbnRlcm5hbHMudG91Y2hOb2RlQWRqdXN0ZWRUb0Jlc3RDbGlja2FibGVOb2RlKHgsIHksIHdp
ZHRoLCBoZWlnaHQsIGRvY3VtZW50KTsKKyAgICAgICAgaWYgKGFkanVzdGVkTm9kZS5ub2RlVHlw
ZSA9PSAzKSAvLyBURVhUIG5vZGUKKyAgICAgICAgICAgIGFkanVzdGVkTm9kZSA9IGFkanVzdGVk
Tm9kZS5wYXJlbnROb2RlOworICAgIH0KKworICAgIGZ1bmN0aW9uIHRlc3RUb3VjaEhpdChlbGVt
ZW50aWQsIHRvdWNoVHlwZSkgeworICAgICAgICBlbGVtZW50ID0gZG9jdW1lbnQuZ2V0RWxlbWVu
dEJ5SWQoZWxlbWVudGlkKTsKKyAgICAgICAgdG91Y2hUeXBlKGVsZW1lbnQpOworICAgICAgICBz
aG91bGRCZSgnYWRqdXN0ZWROb2RlLmlkJywgJ2VsZW1lbnQuaWQnKTsKKyAgICB9CisKKyAgICBm
dW5jdGlvbiB0ZXN0VG91Y2hNaXNzKGVsZW1lbnRpZCwgdG91Y2hUeXBlKSB7CisgICAgICAgIGVs
ZW1lbnQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChlbGVtZW50aWQpOworICAgICAgICB0b3Vj
aFR5cGUoZWxlbWVudCk7CisgICAgICAgIHNob3VsZE5vdEJlKCdhZGp1c3RlZE5vZGUuaWQnLCAn
ZWxlbWVudC5pZCcpOworICAgIH0KKworICAgIGZ1bmN0aW9uIHRlc3REaXJlY3RUb3VjaGVzKCkK
KyAgICB7CisgICAgICAgIGRlYnVnKCdUZXN0aW5nIHNtYWxsIGRpcmVjdCBoaXRzJyk7CisgICAg
ICAgIHRlc3RUb3VjaEhpdCgndGVzdDEnLCB0ZXN0RGlyZWN0VG91Y2gpOworICAgICAgICB0ZXN0
VG91Y2hIaXQoJ3Rlc3QyJywgdGVzdERpcmVjdFRvdWNoKTsKKyAgICAgICAgdGVzdFRvdWNoSGl0
KCd0ZXN0MycsIHRlc3REaXJlY3RUb3VjaCk7CisgICAgICAgIHRlc3RUb3VjaE1pc3MoJ3Rlc3Q0
JywgdGVzdERpcmVjdFRvdWNoKTsKKyAgICAgICAgdGVzdFRvdWNoSGl0KCd0ZXN0NScsIHRlc3RE
aXJlY3RUb3VjaCk7CisgICAgfQorCisgICAgZnVuY3Rpb24gdGVzdERpcmVjdEZhdEZpbmdlcnMo
KQorICAgIHsKKyAgICAgICAgZGVidWcoJ1Rlc3RpbmcgbGFyZ2UgZGlyZWN0IGhpdHMnKTsKKyAg
ICAgICAgdGVzdFRvdWNoSGl0KCd0ZXN0MScsIHRlc3REaXJlY3RGYXRGaW5nZXIpOworICAgICAg
ICB0ZXN0VG91Y2hIaXQoJ3Rlc3QyJywgdGVzdERpcmVjdEZhdEZpbmdlcik7CisgICAgICAgIHRl
c3RUb3VjaEhpdCgndGVzdDMnLCB0ZXN0RGlyZWN0RmF0RmluZ2VyKTsKKyAgICAgICAgdGVzdFRv
dWNoTWlzcygndGVzdDQnLCB0ZXN0RGlyZWN0RmF0RmluZ2VyKTsKKyAgICAgICAgdGVzdFRvdWNo
SGl0KCd0ZXN0NScsIHRlc3REaXJlY3RGYXRGaW5nZXIpOworICAgIH0KKworICAgIGZ1bmN0aW9u
IHRlc3RJbmRpcmVjdEZhdEZpbmdlcnMoKQorICAgIHsKKyAgICAgICAgZGVidWcoJ1Rlc3Rpbmcg
bGFyZ2UgZGlyZWN0IGhpdHMnKTsKKyAgICAgICAgdGVzdFRvdWNoSGl0KCd0ZXN0MScsIHRlc3RJ
bmRpcmVjdEZhdEZpbmdlcik7CisgICAgICAgIHRlc3RUb3VjaEhpdCgndGVzdDInLCB0ZXN0SW5k
aXJlY3RGYXRGaW5nZXIpOworICAgICAgICB0ZXN0VG91Y2hIaXQoJ3Rlc3QzJywgdGVzdEluZGly
ZWN0RmF0RmluZ2VyKTsKKyAgICAgICAgdGVzdFRvdWNoTWlzcygndGVzdDQnLCB0ZXN0SW5kaXJl
Y3RGYXRGaW5nZXIpOworICAgICAgICB0ZXN0VG91Y2hIaXQoJ3Rlc3Q1JywgdGVzdEluZGlyZWN0
RmF0RmluZ2VyKTsKKyAgICB9CisKKyAgICBmdW5jdGlvbiBydW5UZXN0cygpCisgICAgeworICAg
ICAgICBpZiAod2luZG93LmxheW91dFRlc3RDb250cm9sbGVyICYmIHdpbmRvdy5pbnRlcm5hbHMg
JiYgaW50ZXJuYWxzLnRvdWNoTm9kZUFkanVzdGVkVG9CZXN0Q2xpY2thYmxlTm9kZSkgeworICAg
ICAgICAgICAgZGVzY3JpcHRpb24oJ1Rlc3QgdmFyaW91cyB3YXlzIHRvIHRyaWdnZXIgaW5wdXQt
d2lkZ2V0cy4gT24gYSB0b3VjaCBpbnRlcmZhY2UsIGFsbCB0aGUgYWN0aW9ucyBzaG91bGQgYmUg
dHJpZ2dlcmFibGUgd2l0aCBlaXRoZXIgYSB0b3VjaCBkb3duIG9yIGEgdG91Y2ggdGFwLicpOwor
ICAgICAgICAgICAgbGF5b3V0VGVzdENvbnRyb2xsZXIuZHVtcEFzVGV4dCgpOworICAgICAgICAg
ICAgbGF5b3V0VGVzdENvbnRyb2xsZXIud2FpdFVudGlsRG9uZSgpOworICAgICAgICAgICAgdGVz
dERpcmVjdFRvdWNoZXMoKTsKKyAgICAgICAgICAgIHRlc3REaXJlY3RGYXRGaW5nZXJzKCk7Cisg
ICAgICAgICAgICB0ZXN0SW5kaXJlY3RGYXRGaW5nZXJzKCk7CisgICAgICAgICAgICBpc1N1Y2Nl
c3NmdWxseVBhcnNlZCgpOworICAgICAgICAgICAgbGF5b3V0VGVzdENvbnRyb2xsZXIubm90aWZ5
RG9uZSgpOworICAgICAgICB9CisgICAgfQorPC9zY3JpcHQ+CisKKzxzY3JpcHQ+CisgICAgZnVu
Y3Rpb24gdHJpZ2dlcklucHV0KCkgeworICAgICAgICB2YXIgZWxlbWVudCA9IGV2ZW50LnNyY0Vs
ZW1lbnQ7CisgICAgICAgIGlmICghZWxlbWVudC5vcGVuKSB7CisgICAgICAgICAgICBlbGVtZW50
LmlubmVySFRNTCA9ICc8aW5wdXQgdHlwZT10ZXh0IHN0eWxlPSJ3aWR0aDogMTAwJSI+PC9pbnB1
dD4nCisgICAgICAgICAgICBlbGVtZW50Lm9wZW4gPSB0cnVlOworICAgICAgICB9CisgICAgICAg
IGVsZW1lbnQuZmlyc3RDaGlsZC5mb2N1cygpOworICAgIH0KKzwvc2NyaXB0PgorCis8ZGl2IGlk
PXRlc3QxIGNsYXNzPWJveCB0YWJpbmRleD0xIG9uZm9jdXM9J3RyaWdnZXJJbnB1dCgpJz4KK0Zv
Y3VzIGhlcmUgc2hvdWxkIGdpdmUgYSB0ZXh0IGlucHV0LWZpZWxkLgorPC9kaXY+CisKKzxkaXYg
aWQ9dGVzdDIgY2xhc3M9Ym94IG9ubW91c2VvdmVyPSd0cmlnZ2VySW5wdXQoKSc+IAorTW91c2Ut
b3ZlciBoZXJlIHNob3VsZCBnaXZlIGEgdGV4dCBpbnB1dC1maWVsZC4KKzwvZGl2PgorCis8c3R5
bGU+CisgICAgLmJveDpub3QoOmhvdmVyKSAuaG92ZXJ0cmlnZ2VyZWQgeyB2aXNpYmlsaXR5OiBo
aWRkZW47fQorICAgIC5ib3g6aG92ZXIgLmhvdmVyZmFsbGJhY2sgeyBkaXNwbGF5OiBub25lOyB9
ICAKKzwvc3R5bGU+CisKKzxkaXYgaWQ9dGVzdDMgY2xhc3M9Ym94PiAKKyAgICA8c3BhbiBjbGFz
cz1ob3ZlcmZhbGxiYWNrPkhvdmVyaW5nIGhlcmUgc2hvdWxkIGdpdmUgYSB0ZXh0IGlucHV0LWZp
ZWxkLjwvc3Bhbj4KKyAgICA8aW5wdXQgdHlwZT10ZXh0IGNsYXNzPWhvdmVydHJpZ2dlcmVkPjwv
aW5wdXQ+Cis8L2Rpdj4KKworPGRpdiBpZD10ZXN0NCBjbGFzcz1ib3ggb25mb2N1cz0ndHJpZ2dl
cklucHV0KCknPgorICAgIDxzcGFuIHRhYmluZGV4PTE+IEZvY3VzaW5nIGhlcmUgc2hvdWxkIG9u
bHkgZ2l2ZSBmb2N1cyBvdXRsaW5lLgorICAgIDwvc3Bhbj4KKzwvZGl2PgorCis8ZGl2IGlkPXRl
c3Q1IGNsYXNzPWJveD4KKyAgICA8c3BhbiB0YWJpbmRleD0xPiBGb2N1c2luZyBoZXJlIHNob3Vs
ZCBnaXZlIGEgdGV4dCBpbnB1dC1maWVsZC4KKyAgICA8L3NwYW4+Cis8L2Rpdj4KKworPHNjcmlw
dD4KKyAgICB2YXIgZWxlbWVudCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0ZXN0NScpOwor
ICAgIGVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignRE9NRm9jdXNJbicsIHRyaWdnZXJJbnB1dCwg
ZmFsc2UpOworPC9zY3JpcHQ+CisKKzwvYm9keT4KKzwvaHRtbD4KZGlmZiAtLWdpdCBhL0xheW91
dFRlc3RzL3RvdWNoYWRqdXN0bWVudC9odG1sLWxhYmVsLWV4cGVjdGVkLnR4dCBiL0xheW91dFRl
c3RzL3RvdWNoYWRqdXN0bWVudC9odG1sLWxhYmVsLWV4cGVjdGVkLnR4dApuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwLi5mOTY5ZmRiCi0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0
VGVzdHMvdG91Y2hhZGp1c3RtZW50L2h0bWwtbGFiZWwtZXhwZWN0ZWQudHh0CkBAIC0wLDAgKzEs
MjIgQEAKK0RvIG5vdCBjbGljayBoZXJlCitDbGljayBoZXJlLCBidXQgbm90IGhlcmUuIAorCisK
KworVGVzdHMgaWYgbGFiZWxzIGFyZSB0cmVhdGVkIGFzIGNsaWNrYWJsZSBpZiB0aGUgaW5wdXQg
dGhleSBjb250cm9sIGlzLgorCitPbiBzdWNjZXNzLCB5b3Ugd2lsbCBzZWUgYSBzZXJpZXMgb2Yg
IlBBU1MiIG1lc3NhZ2VzLCBmb2xsb3dlZCBieSAiVEVTVCBDT01QTEVURSIuCisKKworVGVzdGlu
ZyBzbWFsbCBkaXJlY3QgaGl0cy4KK1BBU1MgYWRqdXN0ZWROb2RlLmlkIGlzICJteWxpbmsiCitQ
QVNTIGFkanVzdGVkTm9kZS5pZCBpcyAibXlsYWJlbCIKK1BBU1MgYWRqdXN0ZWROb2RlLmlkIGlz
ICJteWlucHV0IgorVGVzdGluZyBpbmRpcmVjdCBoaXRzLgorUEFTUyBhZGp1c3RlZE5vZGUuaWQg
aXMgIm15bGluayIKK1BBU1MgYWRqdXN0ZWROb2RlLmlkIGlzICJteWxhYmVsIgorUEFTUyBhZGp1
c3RlZE5vZGUuaWQgaXMgIm15aW5wdXQiCitQQVNTIHN1Y2Nlc3NmdWxseVBhcnNlZCBpcyB0cnVl
CisKK1RFU1QgQ09NUExFVEUKKwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvdG91Y2hhZGp1c3Rt
ZW50L2h0bWwtbGFiZWwuaHRtbCBiL0xheW91dFRlc3RzL3RvdWNoYWRqdXN0bWVudC9odG1sLWxh
YmVsLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWMwY2U3ZAotLS0g
L2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL3RvdWNoYWRqdXN0bWVudC9odG1sLWxhYmVsLmh0
bWwKQEAgLTAsMCArMSwxMDggQEAKKzxodG1sPgorPGhlYWQ+Cis8c2NyaXB0IHNyYz0iLi4vZmFz
dC9qcy9yZXNvdXJjZXMvanMtdGVzdC1wcmUuanMiPjwvc2NyaXB0PgorCis8L2hlYWQ+CisKKzxi
b2R5IGlkPSJteWJvZHkiIG9ubG9hZD0icnVuVGVzdHMoKSI+CisKKzxhIGhyZWY9IiNteWZvcm0i
IGlkPSJteWxpbmsiPkRvIG5vdCBjbGljayBoZXJlPC9hPjxicj4KKzxmb3JtIGlkPSJteWZvcm0i
PgorPGxhYmVsIGZvcj0ibXlpbnB1dCIgaWQ9Im15bGFiZWwiPkNsaWNrIGhlcmUsPC9sYWJlbD4K
KzxzcGFuIGlkPSJteXNwYW4iPmJ1dCBub3QgaGVyZS48L3NwYW4+Cis8aW5wdXQgdHlwZT0idGV4
dCIgaWQ9Im15aW5wdXQiIHZhbHVlPSJUbyBmb2N1cyB0aGlzLiI+PC9pbnB1dD4KKzwvZm9ybT4K
Kzxicj48YnI+PGJyPgorCis8cCBpZD0nZGVzY3JpcHRpb24nPjwvcD4KKzxkaXYgaWQ9J2NvbnNv
bGUnPjwvZGl2PgorCis8c2NyaXB0PgorICAgIHZhciBlbGVtZW50OworICAgIHZhciBhZGp1c3Rl
ZE5vZGU7CisgICAgZnVuY3Rpb24gZmluZEFic29sdXRlUG9zaXRpb24obm9kZSkgeworICAgICAg
ICB2YXIgcG9zID0gbmV3IE9iamVjdCgpOworICAgICAgICBwb3MubGVmdCA9IDA7IHBvcy50b3Ag
PSAwOworICAgICAgICBkbyB7CisgICAgICAgICAgICBwb3MubGVmdCArPSBub2RlLm9mZnNldExl
ZnQ7CisgICAgICAgICAgICBwb3MudG9wICs9IG5vZGUub2Zmc2V0VG9wOworICAgICAgICB9IHdo
aWxlIChub2RlID0gbm9kZS5vZmZzZXRQYXJlbnQpOworICAgICAgICByZXR1cm4gcG9zOworICAg
IH0KKworICAgIGZ1bmN0aW9uIHRlc3REaXJlY3RUb3VjaChlbGVtZW50KQorICAgIHsKKyAgICAg
ICAgdmFyIHBvcyA9IGZpbmRBYnNvbHV0ZVBvc2l0aW9uKGVsZW1lbnQpOworICAgICAgICB2YXIg
eCA9IHBvcy5sZWZ0ICsgZWxlbWVudC5jbGllbnRXaWR0aCAvIDIgLSAyMDsKKyAgICAgICAgdmFy
IHkgPSBwb3MudG9wICsgZWxlbWVudC5jbGllbnRIZWlnaHQgLyAyIC0gMzA7CisgICAgICAgIHZh
ciB3aWR0aCA9IDQwOworICAgICAgICB2YXIgaGVpZ2h0ID0gNjA7CisgICAgICAgIHZhciBhZGp1
c3RlZE5vZGUgPSBpbnRlcm5hbHMudG91Y2hOb2RlQWRqdXN0ZWRUb0Jlc3RDbGlja2FibGVOb2Rl
KHgsIHksIHdpZHRoLCBoZWlnaHQsIGRvY3VtZW50KTsKKyAgICAgICAgd2hpbGUgKGFkanVzdGVk
Tm9kZS5ub2RlVHlwZSAhPSAxKSAvLyBOb3QgYW4gZWxlbWVudC4KKyAgICAgICAgICAgIGFkanVz
dGVkTm9kZSA9IGFkanVzdGVkTm9kZS5wYXJlbnROb2RlOworICAgICAgICByZXR1cm4gYWRqdXN0
ZWROb2RlOworICAgIH0KKworICAgIGZ1bmN0aW9uIHRlc3RJbmRpcmVjdFRvdWNoKGVsZW1lbnQp
CisgICAgeworICAgICAgICAvLyBUb3VjaCBqdXN0IHJpZ2h0IG9mIHRoZSBlbGVtZW50LgorICAg
ICAgICB2YXIgcG9zID0gZmluZEFic29sdXRlUG9zaXRpb24oZWxlbWVudCk7CisgICAgICAgIHZh
ciB4ID0gcG9zLmxlZnQgKyBlbGVtZW50LmNsaWVudFdpZHRoICsgMTAgLSAzMDsKKyAgICAgICAg
dmFyIHkgPSBwb3MudG9wICsgZWxlbWVudC5jbGllbnRIZWlnaHQgLyAyIC0gMjA7CisgICAgICAg
IHZhciB3aWR0aCA9IDYwOworICAgICAgICB2YXIgaGVpZ2h0ID0gNDA7CisgICAgICAgIHZhciBh
ZGp1c3RlZE5vZGUgPSBpbnRlcm5hbHMudG91Y2hOb2RlQWRqdXN0ZWRUb0Jlc3RDbGlja2FibGVO
b2RlKHgsIHksIHdpZHRoLCBoZWlnaHQsIGRvY3VtZW50KTsKKyAgICAgICAgd2hpbGUgKGFkanVz
dGVkTm9kZS5ub2RlVHlwZSAhPSAxICkgLy8gTm90IGFuIGVsZW1lbnQuCisgICAgICAgICAgICBh
ZGp1c3RlZE5vZGUgPSBhZGp1c3RlZE5vZGUucGFyZW50Tm9kZTsKKyAgICAgICAgcmV0dXJuIGFk
anVzdGVkTm9kZTsKKyAgICB9CisKKyAgICBmdW5jdGlvbiB0ZXN0RGlyZWN0VG91Y2hlcygpCisg
ICAgeworICAgICAgICBkZWJ1ZygnVGVzdGluZyBzbWFsbCBkaXJlY3QgaGl0cy4nKTsKKworICAg
ICAgICBlbGVtZW50ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ215bGluaycpOworICAgICAg
ICBhZGp1c3RlZE5vZGUgPSB0ZXN0RGlyZWN0VG91Y2goZWxlbWVudCk7CisgICAgICAgIHNob3Vs
ZEJlRXF1YWxUb1N0cmluZygnYWRqdXN0ZWROb2RlLmlkJywgJ215bGluaycpOworCisgICAgICAg
IGVsZW1lbnQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbXlsYWJlbCcpOworICAgICAgICBh
ZGp1c3RlZE5vZGUgPSB0ZXN0RGlyZWN0VG91Y2goZWxlbWVudCk7CisgICAgICAgIHNob3VsZEJl
RXF1YWxUb1N0cmluZygnYWRqdXN0ZWROb2RlLmlkJywgJ215bGFiZWwnKTsKKworICAgICAgICBl
bGVtZW50ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ215aW5wdXQnKTsKKyAgICAgICAgYWRq
dXN0ZWROb2RlID0gdGVzdERpcmVjdFRvdWNoKGVsZW1lbnQpOworICAgICAgICBzaG91bGRCZUVx
dWFsVG9TdHJpbmcoJ2FkanVzdGVkTm9kZS5pZCcsICdteWlucHV0Jyk7CisgICAgfQorCisgICAg
ZnVuY3Rpb24gdGVzdEluZGlyZWN0VG91Y2hlcygpCisgICAgeworICAgICAgICBkZWJ1ZygnVGVz
dGluZyBpbmRpcmVjdCBoaXRzLicpOworCisgICAgICAgIGVsZW1lbnQgPSBkb2N1bWVudC5nZXRF
bGVtZW50QnlJZCgnbXlsaW5rJyk7CisgICAgICAgIGFkanVzdGVkTm9kZSA9IHRlc3RJbmRpcmVj
dFRvdWNoKGVsZW1lbnQpOworICAgICAgICBzaG91bGRCZUVxdWFsVG9TdHJpbmcoJ2FkanVzdGVk
Tm9kZS5pZCcsICdteWxpbmsnKTsKKworICAgICAgICBlbGVtZW50ID0gZG9jdW1lbnQuZ2V0RWxl
bWVudEJ5SWQoJ215bGFiZWwnKTsKKyAgICAgICAgYWRqdXN0ZWROb2RlID0gdGVzdEluZGlyZWN0
VG91Y2goZWxlbWVudCk7CisgICAgICAgIHNob3VsZEJlRXF1YWxUb1N0cmluZygnYWRqdXN0ZWRO
b2RlLmlkJywgJ215bGFiZWwnKTsKKworICAgICAgICBlbGVtZW50ID0gZG9jdW1lbnQuZ2V0RWxl
bWVudEJ5SWQoJ215aW5wdXQnKTsKKyAgICAgICAgYWRqdXN0ZWROb2RlID0gdGVzdEluZGlyZWN0
VG91Y2goZWxlbWVudCk7CisgICAgICAgIHNob3VsZEJlRXF1YWxUb1N0cmluZygnYWRqdXN0ZWRO
b2RlLmlkJywgJ215aW5wdXQnKTsKKyAgICB9CisKKyAgICBmdW5jdGlvbiBydW5UZXN0cygpCisg
ICAgeworICAgICAgICBpZiAod2luZG93LmxheW91dFRlc3RDb250cm9sbGVyICYmIHdpbmRvdy5p
bnRlcm5hbHMgJiYgaW50ZXJuYWxzLnRvdWNoTm9kZUFkanVzdGVkVG9CZXN0Q2xpY2thYmxlTm9k
ZSkgeworICAgICAgICAgICAgZGVzY3JpcHRpb24oJ1Rlc3RzIGlmIGxhYmVscyBhcmUgdHJlYXRl
ZCBhcyBjbGlja2FibGUgaWYgdGhlIGlucHV0IHRoZXkgY29udHJvbCBpcy4nKTsKKyAgICAgICAg
ICAgIGxheW91dFRlc3RDb250cm9sbGVyLmR1bXBBc1RleHQoKTsKKyAgICAgICAgICAgIGxheW91
dFRlc3RDb250cm9sbGVyLndhaXRVbnRpbERvbmUoKTsKKyAgICAgICAgICAgIHRlc3REaXJlY3RU
b3VjaGVzKCk7CisgICAgICAgICAgICB0ZXN0SW5kaXJlY3RUb3VjaGVzKCk7CisgICAgICAgICAg
ICBpc1N1Y2Nlc3NmdWxseVBhcnNlZCgpOworICAgICAgICAgICAgbGF5b3V0VGVzdENvbnRyb2xs
ZXIubm90aWZ5RG9uZSgpOworICAgICAgICB9CisgICAgfQorPC9zY3JpcHQ+Cis8L2JvZHk+Cis8
L2h0bWw+CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy90b3VjaGFkanVzdG1lbnQvbmVzdGVkLXRv
dWNoLWV4cGVjdGVkLnR4dCBiL0xheW91dFRlc3RzL3RvdWNoYWRqdXN0bWVudC9uZXN0ZWQtdG91
Y2gtZXhwZWN0ZWQudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjczZDdj
NDAKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy90b3VjaGFkanVzdG1lbnQvbmVzdGVk
LXRvdWNoLWV4cGVjdGVkLnR4dApAQCAtMCwwICsxLDE4IEBACitCb3ggd2l0aCBhIGxvY2FsIGNs
aWNrIGhhbmRsZXIuCitCb3ggd2l0aG91dCBhIGxvY2FsIGNsaWNrIGhhbmRsZXIuCitUZXN0IHRo
ZSBjYXNlIHdoZXJlIGEgY2xpY2thYmxlIHRhcmdldCBpcyBuZXN0ZWQgaW5zaWRlIGEgZG9jdW1l
bnQgdGhhdCBpcyBtb25pdG9yaW5nIGNsaWNrcy4gVGhlIHRhcmdldCB3aXRoIHRoZSBsb2NhbCBl
dmVudC1oYW5kbGVyIHNob3VsZCBiZSBjaG9zZW4gaWYgbXVsdGlwbGUgdGFyZ2V0cyBhcmUgdG91
Y2hlZC4KKworT24gc3VjY2VzcywgeW91IHdpbGwgc2VlIGEgc2VyaWVzIG9mICJQQVNTIiBtZXNz
YWdlcywgZm9sbG93ZWQgYnkgIlRFU1QgQ09NUExFVEUiLgorCisKK1Rlc3Rpbmcgc21hbGwgZGly
ZWN0IGhpdHMuCitQQVNTIGFkanVzdGVkTm9kZS5pZCBpcyBlbGVtZW50LmlkCitQQVNTIGFkanVz
dGVkTm9kZS5pZCBpcyBlbGVtZW50LmlkCitUZXN0aW5nIHByZWZlcmVkIGhpdHMuCitQQVNTIGFk
anVzdGVkTm9kZS5pZCBpcyBlbGVtZW50MS5pZAorUEFTUyBhZGp1c3RlZE5vZGUuaWQgaXMgZWxl
bWVudDEuaWQKK1BBU1MgYWRqdXN0ZWROb2RlLmlkIGlzIGVsZW1lbnQxLmlkCitQQVNTIHN1Y2Nl
c3NmdWxseVBhcnNlZCBpcyB0cnVlCisKK1RFU1QgQ09NUExFVEUKKwpkaWZmIC0tZ2l0IGEvTGF5
b3V0VGVzdHMvdG91Y2hhZGp1c3RtZW50L25lc3RlZC10b3VjaC5odG1sIGIvTGF5b3V0VGVzdHMv
dG91Y2hhZGp1c3RtZW50L25lc3RlZC10b3VjaC5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAuLjhmNmJkY2QKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy90b3Vj
aGFkanVzdG1lbnQvbmVzdGVkLXRvdWNoLmh0bWwKQEAgLTAsMCArMSwxMjAgQEAKKzxodG1sPgor
PGhlYWQ+Cis8c3R5bGU+CisgICAgLmJveCB7IGJvcmRlcjogMXB4IHNvbGlkIGJsYWNrOyBib3Jk
ZXItcmFkaXVzOiA1cHggNXB4OyBtYXJnaW46IDFlbTsgbWF4LXdpZHRoOiA0MGVtOyB9Cis8L3N0
eWxlPgorPHNjcmlwdCBzcmM9Ii4uL2Zhc3QvanMvcmVzb3VyY2VzL2pzLXRlc3QtcHJlLmpzIj48
L3NjcmlwdD4KKworPC9oZWFkPgorCis8Ym9keSBvbmxvYWQ9InJ1blRlc3RzKCkiPgorCis8ZGl2
IGNsYXNzPWJveCBpZD1teWJveDE+CitCb3ggd2l0aCBhIGxvY2FsIGNsaWNrIGhhbmRsZXIuCis8
L2Rpdj4KKworPGRpdiBjbGFzcz1ib3ggaWQ9bXlib3gyPiAKK0JveCB3aXRob3V0IGEgbG9jYWwg
Y2xpY2sgaGFuZGxlci4KKzwvZGl2PgorCis8c2NyaXB0PgorICBmdW5jdGlvbiBtb25pdG9yKGUp
IHsgYWxlcnQoZS50YXJnZXQgKyggZS50YXJnZXQuaWQgPyAoICcgIycgKyBlLnRhcmdldC5pZCkg
OiAnJykpOyB9OworICBmdW5jdGlvbiBkb1NvbWV0aGluZyhlKSB7fTsKKworICB2YXIgZWxlbWVu
dCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdteWJveDEnKTsKKyAgZWxlbWVudC5hZGRFdmVu
dExpc3RlbmVyKCdjbGljaycsIGRvU29tZXRoaW5nLCBmYWxzZSk7CisgIGVsZW1lbnQgPSBkb2N1
bWVudC5ib2R5OworICBlbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgbW9uaXRvciwg
ZmFsc2UpOworPC9zY3JpcHQ+CisKKworPHAgaWQ9J2Rlc2NyaXB0aW9uJz48L3A+Cis8ZGl2IGlk
PSdjb25zb2xlJz48L2Rpdj4KKworPHNjcmlwdD4KKyAgICB2YXIgZWxlbWVudDsKKyAgICB2YXIg
YWRqdXN0ZWROb2RlOworICAgIGZ1bmN0aW9uIGZpbmRBYnNvbHV0ZVBvc2l0aW9uKG5vZGUpIHsK
KyAgICAgICAgdmFyIHBvcyA9IG5ldyBPYmplY3QoKTsKKyAgICAgICAgcG9zLmxlZnQgPSAwOyBw
b3MudG9wID0gMDsKKyAgICAgICAgZG8geworICAgICAgICAgICAgcG9zLmxlZnQgKz0gbm9kZS5v
ZmZzZXRMZWZ0OworICAgICAgICAgICAgcG9zLnRvcCArPSBub2RlLm9mZnNldFRvcDsKKyAgICAg
ICAgfSB3aGlsZSAobm9kZSA9IG5vZGUub2Zmc2V0UGFyZW50KTsKKyAgICAgICAgcmV0dXJuIHBv
czsKKyAgICB9CisKKyAgICBmdW5jdGlvbiB0ZXN0RGlyZWN0VG91Y2goZWxlbWVudCkKKyAgICB7
CisgICAgICAgIHZhciBwb3MgPSBmaW5kQWJzb2x1dGVQb3NpdGlvbihlbGVtZW50KTsKKyAgICAg
ICAgdmFyIHggPSBwb3MubGVmdCArIGVsZW1lbnQuY2xpZW50V2lkdGggLyAyIC0gMTsKKyAgICAg
ICAgdmFyIHkgPSBwb3MudG9wICsgZWxlbWVudC5jbGllbnRIZWlnaHQgLyAyIC0gMTsKKyAgICAg
ICAgdmFyIHdpZHRoID0gMzsKKyAgICAgICAgdmFyIGhlaWdodCA9IDM7CisgICAgICAgIHZhciBh
ZGp1c3RlZE5vZGUgPSBpbnRlcm5hbHMudG91Y2hOb2RlQWRqdXN0ZWRUb0Jlc3RDbGlja2FibGVO
b2RlKHgsIHksIHdpZHRoLCBoZWlnaHQsIGRvY3VtZW50KTsKKyAgICAgICAgaWYgKGFkanVzdGVk
Tm9kZS5ub2RlVHlwZSA9PSAzKSAvLyBURVhUIG5vZGUKKyAgICAgICAgICAgIGFkanVzdGVkTm9k
ZSA9IGFkanVzdGVkTm9kZS5wYXJlbnROb2RlOworICAgICAgICByZXR1cm4gYWRqdXN0ZWROb2Rl
OworICAgIH0KKworICAgIGZ1bmN0aW9uIHRlc3REb3VibGVUb3VjaChlbGVtZW50MSwgZWxlbWVu
dDIsIG9mZnNldCkKKyAgICB7CisgICAgICAgIHZhciBwb3MxID0gZmluZEFic29sdXRlUG9zaXRp
b24oZWxlbWVudDEpOworICAgICAgICB2YXIgcG9zMiA9IGZpbmRBYnNvbHV0ZVBvc2l0aW9uKGVs
ZW1lbnQyKTsKKyAgICAgICAgLy8gV2UgYXNzdW1lIHRoZSBlbGVtZW50cyBoYXZlIHRoZSBzYW1l
IHggY29vcmQgYW5kIHdpZHRoLgorICAgICAgICB2YXIgeCA9IHBvczEubGVmdCArIGVsZW1lbnQx
LmNsaWVudFdpZHRoLzIgLSAxOworICAgICAgICB2YXIgeTEgPSBwb3MxLnRvcCArIGVsZW1lbnQx
LmNsaWVudEhlaWdodC8yICsgMTsKKyAgICAgICAgdmFyIHkyID0gcG9zMi50b3AgKyBlbGVtZW50
Mi5jbGllbnRIZWlnaHQvMiAtIDE7CisgICAgICAgIHZhciB3aWR0aCA9IHkyIC0geTE7CisgICAg
ICAgIHZhciBoZWlnaHQgPSB5MiAtIHkxOworICAgICAgICB2YXIgYWRqdXN0ZWROb2RlID0gaW50
ZXJuYWxzLnRvdWNoTm9kZUFkanVzdGVkVG9CZXN0Q2xpY2thYmxlTm9kZSh4LCB5MSwgd2lkdGgs
IGhlaWdodCwgZG9jdW1lbnQpOworICAgICAgICBpZiAoYWRqdXN0ZWROb2RlLm5vZGVUeXBlID09
IDMpIC8vIFRFWFQgbm9kZQorICAgICAgICAgICAgYWRqdXN0ZWROb2RlID0gYWRqdXN0ZWROb2Rl
LnBhcmVudE5vZGU7CisgICAgICAgIHJldHVybiBhZGp1c3RlZE5vZGU7CisgICAgfQorCisgICAg
ZnVuY3Rpb24gdGVzdERpcmVjdFRvdWNoZXMoKQorICAgIHsKKyAgICAgICAgZGVidWcoJ1Rlc3Rp
bmcgc21hbGwgZGlyZWN0IGhpdHMuJyk7CisKKyAgICAgICAgZWxlbWVudCA9IGRvY3VtZW50Lmdl
dEVsZW1lbnRCeUlkKCdteWJveDEnKTsKKyAgICAgICAgYWRqdXN0ZWROb2RlID0gdGVzdERpcmVj
dFRvdWNoKGVsZW1lbnQpOworICAgICAgICBzaG91bGRCZSgnYWRqdXN0ZWROb2RlLmlkJywgJ2Vs
ZW1lbnQuaWQnKTsKKworICAgICAgICBlbGVtZW50ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQo
J215Ym94MicpOworICAgICAgICBhZGp1c3RlZE5vZGUgPSB0ZXN0RGlyZWN0VG91Y2goZWxlbWVu
dCk7CisgICAgICAgIHNob3VsZEJlKCdhZGp1c3RlZE5vZGUuaWQnLCAnZWxlbWVudC5pZCcpOwor
ICAgIH0KKworICAgIGZ1bmN0aW9uIHRlc3RQcmVmZXJlZFRvdWNoKCkKKyAgICB7CisgICAgICAg
IGRlYnVnKCdUZXN0aW5nIHByZWZlcmVkIGhpdHMuJyk7CisKKyAgICAgICAgZWxlbWVudDEgPSBk
b2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbXlib3gxJyk7CisgICAgICAgIGVsZW1lbnQyID0gZG9j
dW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ215Ym94MicpOworICAgICAgICBhZGp1c3RlZE5vZGUgPSB0
ZXN0RG91YmxlVG91Y2goZWxlbWVudDEsIGVsZW1lbnQyLCAwKTsKKyAgICAgICAgc2hvdWxkQmUo
J2FkanVzdGVkTm9kZS5pZCcsICdlbGVtZW50MS5pZCcpOworCisgICAgICAgIC8vIEZpcnN0IHRl
c3Qgd2FzIGNlbnRlcmVkLCBub3cgbW92ZSB0aGUgdGVzdCBjbG9zZXIgdG8gdGhlIHdyb25nIG5v
ZGUsIGFuZCBlbnN1cmUgd2Ugc3RpbGwgZ2V0IHRoZSBwcmVmZXJlZCBub2RlLgorICAgICAgICBh
ZGp1c3RlZE5vZGUgPSB0ZXN0RG91YmxlVG91Y2goZWxlbWVudDEsIGVsZW1lbnQyLCA1KTsKKyAg
ICAgICAgc2hvdWxkQmUoJ2FkanVzdGVkTm9kZS5pZCcsICdlbGVtZW50MS5pZCcpOworCisgICAg
ICAgIGFkanVzdGVkTm9kZSA9IHRlc3REb3VibGVUb3VjaChlbGVtZW50MSwgZWxlbWVudDIsIDEw
KTsKKyAgICAgICAgc2hvdWxkQmUoJ2FkanVzdGVkTm9kZS5pZCcsICdlbGVtZW50MS5pZCcpOwor
ICAgIH0KKworICAgIGZ1bmN0aW9uIHJ1blRlc3RzKCkKKyAgICB7CisgICAgICAgIGlmICh3aW5k
b3cubGF5b3V0VGVzdENvbnRyb2xsZXIgJiYgd2luZG93LmludGVybmFscyAmJiBpbnRlcm5hbHMu
dG91Y2hOb2RlQWRqdXN0ZWRUb0Jlc3RDbGlja2FibGVOb2RlKSB7CisgICAgICAgICAgICBkZXNj
cmlwdGlvbignVGVzdCB0aGUgY2FzZSB3aGVyZSBhIGNsaWNrYWJsZSB0YXJnZXQgaXMgbmVzdGVk
IGluc2lkZSBhIGRvY3VtZW50IHRoYXQgaXMgbW9uaXRvcmluZyBjbGlja3MuIFRoZSB0YXJnZXQg
d2l0aCB0aGUgbG9jYWwgZXZlbnQtaGFuZGxlciBzaG91bGQgYmUgY2hvc2VuIGlmIG11bHRpcGxl
IHRhcmdldHMgYXJlIHRvdWNoZWQuJyk7CisgICAgICAgICAgICBsYXlvdXRUZXN0Q29udHJvbGxl
ci5kdW1wQXNUZXh0KCk7CisgICAgICAgICAgICBsYXlvdXRUZXN0Q29udHJvbGxlci53YWl0VW50
aWxEb25lKCk7CisgICAgICAgICAgICB0ZXN0RGlyZWN0VG91Y2hlcygpOworICAgICAgICAgICAg
dGVzdFByZWZlcmVkVG91Y2goKTsKKyAgICAgICAgICAgIGlzU3VjY2Vzc2Z1bGx5UGFyc2VkKCk7
CisgICAgICAgICAgICBsYXlvdXRUZXN0Q29udHJvbGxlci5ub3RpZnlEb25lKCk7CisgICAgICAg
IH0KKyAgICB9Cis8L3NjcmlwdD4KKzwvYm9keT4KKzwvaHRtbD4KZGlmZiAtLWdpdCBhL0xheW91
dFRlc3RzL3RvdWNoYWRqdXN0bWVudC90b3VjaC1pbmxpbmVzLWV4cGVjdGVkLnR4dCBiL0xheW91
dFRlc3RzL3RvdWNoYWRqdXN0bWVudC90b3VjaC1pbmxpbmVzLWV4cGVjdGVkLnR4dApuZXcgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45NzRhZDgyCi0tLSAvZGV2L251bGwKKysrIGIv
TGF5b3V0VGVzdHMvdG91Y2hhZGp1c3RtZW50L3RvdWNoLWlubGluZXMtZXhwZWN0ZWQudHh0CkBA
IC0wLDAgKzEsMjkgQEAKK3NvbWUgbGluaworc29tZSBsaW5rIGJyZWFraW5nIGxpbmVzIGFuZCBs
aW5rCitob2xhIG11bmRvISBhIHNwbGl0IHVwIGxpbmsKK2hlbGxvIHdvcmxkIHNvbWUgbGluayBh
bHNvIGJyZWFraW5nCitoaSB0aGVyZSBzb21lIGxpbmsgdGhhdCBpcyBicmVha2luZyBtdWx0aXBs
ZSBsaW5lcyBqdXN0IGZvciB0aGUgdmVyeSBmdW4gb2YgaXQKKworVGVzdCB0b3VjaC1hZGp1c3Rt
ZW50IG9uIGlubGluZSBsaW5rcy4gTWFraW5nIHN1cmUgd2UgY2FuIGhpdCBvdmVyIGxpbmUtYnJl
YWtzLCBhbmQgY2FuIG1pc3Mgd2hlbiB0YXBwaW5nIGJldHdlZW4gcGFydHMgb2YgYSBsaW5lLWJy
b2tlbiBsaW5rLgorCitPbiBzdWNjZXNzLCB5b3Ugd2lsbCBzZWUgYSBzZXJpZXMgb2YgIlBBU1Mi
IG1lc3NhZ2VzLCBmb2xsb3dlZCBieSAiVEVTVCBDT01QTEVURSIuCisKKworVGVzdCBzb21lIGRp
cmVjdCBoaXRzLgorUEFTUyBhZGp1c3RlZE5vZGUuaWQgaXMgIjEiCitQQVNTIGFkanVzdGVkTm9k
ZS5pZCBpcyAiMiIKK1BBU1MgYWRqdXN0ZWROb2RlLmlkIGlzICI0IgorUEFTUyBhZGp1c3RlZE5v
ZGUuaWQgaXMgIjYiCitUZXN0IGEgZmV3IGRpcmVjdCBtaXNzZXMuCitQQVNTIGFkanVzdGVkTm9k
ZS5pZCBpcyAiIgorUEFTUyBhZGp1c3RlZE5vZGUuaWQgaXMgIiIKK1Rlc3Qgc29tZSBpbi1kaXJl
Y3QgaGl0cy4KK1BBU1MgYWRqdXN0ZWROb2RlLmlkIGlzICIyIgorUEFTUyBhZGp1c3RlZE5vZGUu
aWQgaXMgIjMiCitQQVNTIGFkanVzdGVkTm9kZS5pZCBpcyAiNCIKK1BBU1MgYWRqdXN0ZWROb2Rl
LmlkIGlzICI0IgorUEFTUyBhZGp1c3RlZE5vZGUuaWQgaXMgIjYiCitQQVNTIHN1Y2Nlc3NmdWxs
eVBhcnNlZCBpcyB0cnVlCisKK1RFU1QgQ09NUExFVEUKKwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVz
dHMvdG91Y2hhZGp1c3RtZW50L3RvdWNoLWlubGluZXMuaHRtbCBiL0xheW91dFRlc3RzL3RvdWNo
YWRqdXN0bWVudC90b3VjaC1pbmxpbmVzLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMC4uZTk5ODA0YgotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL3RvdWNoYWRq
dXN0bWVudC90b3VjaC1pbmxpbmVzLmh0bWwKQEAgLTAsMCArMSw5OSBAQAorPGh0bWw+Cis8aGVh
ZD4KKyAgICA8c2NyaXB0IHNyYz0iLi4vZmFzdC9qcy9yZXNvdXJjZXMvanMtdGVzdC1wcmUuanMi
Pjwvc2NyaXB0PgorPC9oZWFkPgorPGJvZHkgb25sb2FkPSJydW5UZXN0cygpIj4KKworPHAgc3R5
bGU9IndpZHRoOiAxMGVtOyI+Cis8YSBpZD0iMSIgaHJlZj0iIzEiPnNvbWUgbGluazwvYT48YnI+
Cis8YSBpZD0iMiIgaHJlZj0iIzIiPnNvbWUgbGluayBicmVha2luZyBsaW5lczwvYT4gYW5kIDxh
IGlkPSIzIiBocmVmPSIjMyI+bGluazwvYT48YnI+Citob2xhIG11bmRvISA8YSBpZD0iNCIgaHJl
Zj0iIzQiPmEgc3BsaXQgdXAgbGluazwvYT48YnI+CitoZWxsbyB3b3JsZCA8YSBpZD0iNSIgaHJl
Zj0iIzUiPnNvbWUgbGluayBhbHNvIGJyZWFraW5nPC9hPjxicj4KK2hpIHRoZXJlIDxhIGlkPSI2
IiBocmVmPSIjNiI+c29tZSBsaW5rIHRoYXQgaXMgYnJlYWtpbmcgbXVsdGlwbGUgbGluZXMganVz
dCBmb3IgdGhlIHZlcnkgZnVuIG9mIGl0PC9hPjxicj48YnI+Cis8L3A+CisKKworPHAgaWQ9J2Rl
c2NyaXB0aW9uJz48L3A+Cis8ZGl2IGlkPSdjb25zb2xlJz48L2Rpdj4KKworPHNjcmlwdD4KKyAg
ICB2YXIgZWxlbWVudDsKKyAgICB2YXIgYWRqdXN0ZWROb2RlOworICAgIGZ1bmN0aW9uIHRlc3RS
b3VuZFRvdWNoKHgsIHksIHJhZGl1cykKKyAgICB7CisgICAgICAgIHZhciB4ID0geCAtIHJhZGl1
czsKKyAgICAgICAgdmFyIHkgPSB5IC0gcmFkaXVzOworICAgICAgICB2YXIgd2lkdGggPSByYWRp
dXMgKiAyOworICAgICAgICB2YXIgaGVpZ2h0ID0gcmFkaXVzICogMjsKKyAgICAgICAgdmFyIGFk
anVzdGVkTm9kZSA9IGludGVybmFscy50b3VjaE5vZGVBZGp1c3RlZFRvQmVzdENsaWNrYWJsZU5v
ZGUoeCwgeSwgd2lkdGgsIGhlaWdodCwgZG9jdW1lbnQpOworICAgICAgICBpZiAoYWRqdXN0ZWRO
b2RlLm5vZGVUeXBlID09IDMpIC8vIFRFWFQgbm9kZQorICAgICAgICAgICAgYWRqdXN0ZWROb2Rl
ID0gYWRqdXN0ZWROb2RlLnBhcmVudE5vZGU7CisgICAgICAgIHJldHVybiBhZGp1c3RlZE5vZGU7
CisgICAgfQorCisgICAgZnVuY3Rpb24gdGVzdERpcmVjdFRvdWNoZXMoKQorICAgIHsKKyAgICAg
ICAgZGVidWcoJ1Rlc3Qgc29tZSBkaXJlY3QgaGl0cy4nKTsKKworICAgICAgICBhZGp1c3RlZE5v
ZGUgPSB0ZXN0Um91bmRUb3VjaCgzMCwgMjAsIDgpCisgICAgICAgIHNob3VsZEJlRXF1YWxUb1N0
cmluZygnYWRqdXN0ZWROb2RlLmlkJywgJzEnKTsKKworICAgICAgICBhZGp1c3RlZE5vZGUgPSB0
ZXN0Um91bmRUb3VjaCgzMCwgNjAsIDgpCisgICAgICAgIHNob3VsZEJlRXF1YWxUb1N0cmluZygn
YWRqdXN0ZWROb2RlLmlkJywgJzInKTsKKworICAgICAgICBhZGp1c3RlZE5vZGUgPSB0ZXN0Um91
bmRUb3VjaCgxMjAsIDgwLCA4KQorICAgICAgICBzaG91bGRCZUVxdWFsVG9TdHJpbmcoJ2FkanVz
dGVkTm9kZS5pZCcsICc0Jyk7CisKKyAgICAgICAgYWRqdXN0ZWROb2RlID0gdGVzdFJvdW5kVG91
Y2goODAsIDE4MCwgOCkKKyAgICAgICAgc2hvdWxkQmVFcXVhbFRvU3RyaW5nKCdhZGp1c3RlZE5v
ZGUuaWQnLCAnNicpOworICAgIH0KKworICAgIGZ1bmN0aW9uIHRlc3REaXJlY3RNaXNzZXMoKQor
ICAgIHsKKyAgICAgICAgZGVidWcoJ1Rlc3QgYSBmZXcgZGlyZWN0IG1pc3Nlcy4nKTsKKworICAg
ICAgICBhZGp1c3RlZE5vZGUgPSB0ZXN0Um91bmRUb3VjaCg1NiwgNjAsIDgpCisgICAgICAgIHNo
b3VsZEJlRXF1YWxUb1N0cmluZygnYWRqdXN0ZWROb2RlLmlkJywgJycpOworCisgICAgICAgIGFk
anVzdGVkTm9kZSA9IHRlc3RSb3VuZFRvdWNoKDIwLCAxNjAsIDQpCisgICAgICAgIHNob3VsZEJl
RXF1YWxUb1N0cmluZygnYWRqdXN0ZWROb2RlLmlkJywgJycpOworCisgICAgfQorCisgICAgZnVu
Y3Rpb24gdGVzdEluZGlyZWN0VG91Y2hlcygpCisgICAgeworICAgICAgICBkZWJ1ZygnVGVzdCBz
b21lIGluLWRpcmVjdCBoaXRzLicpOworCisgICAgICAgIGFkanVzdGVkTm9kZSA9IHRlc3RSb3Vu
ZFRvdWNoKDU2LCA2MCwgMjApCisgICAgICAgIHNob3VsZEJlRXF1YWxUb1N0cmluZygnYWRqdXN0
ZWROb2RlLmlkJywgJzInKTsKKworICAgICAgICBhZGp1c3RlZE5vZGUgPSB0ZXN0Um91bmRUb3Vj
aCg4NSwgODAsIDIwKQorICAgICAgICBzaG91bGRCZUVxdWFsVG9TdHJpbmcoJ2FkanVzdGVkTm9k
ZS5pZCcsICczJyk7CisKKyAgICAgICAgYWRqdXN0ZWROb2RlID0gdGVzdFJvdW5kVG91Y2goMTIw
LCA2MCwgMjApCisgICAgICAgIHNob3VsZEJlRXF1YWxUb1N0cmluZygnYWRqdXN0ZWROb2RlLmlk
JywgJzQnKTsKKworICAgICAgICBhZGp1c3RlZE5vZGUgPSB0ZXN0Um91bmRUb3VjaCg0MCwgMTAw
LCAyMCkKKyAgICAgICAgc2hvdWxkQmVFcXVhbFRvU3RyaW5nKCdhZGp1c3RlZE5vZGUuaWQnLCAn
NCcpOworCisgICAgICAgIGFkanVzdGVkTm9kZSA9IHRlc3RSb3VuZFRvdWNoKDIwLCAxNjUsIDIw
KQorICAgICAgICBzaG91bGRCZUVxdWFsVG9TdHJpbmcoJ2FkanVzdGVkTm9kZS5pZCcsICc2Jyk7
CisKKyAgICB9CisKKyAgICBmdW5jdGlvbiBydW5UZXN0cygpCisgICAgeworICAgICAgICBpZiAo
d2luZG93LmxheW91dFRlc3RDb250cm9sbGVyICYmIHdpbmRvdy5pbnRlcm5hbHMgJiYgaW50ZXJu
YWxzLnRvdWNoTm9kZUFkanVzdGVkVG9CZXN0Q2xpY2thYmxlTm9kZSkgeworICAgICAgICAgICAg
ZGVzY3JpcHRpb24oJ1Rlc3QgdG91Y2gtYWRqdXN0bWVudCBvbiBpbmxpbmUgbGlua3MuIE1ha2lu
ZyBzdXJlIHdlIGNhbiBoaXQgb3ZlciBsaW5lLWJyZWFrcywgYW5kIGNhbiBtaXNzIHdoZW4gdGFw
cGluZyBiZXR3ZWVuIHBhcnRzIG9mIGEgbGluZS1icm9rZW4gbGluay4nKTsKKyAgICAgICAgICAg
IGxheW91dFRlc3RDb250cm9sbGVyLmR1bXBBc1RleHQoKTsKKyAgICAgICAgICAgIGxheW91dFRl
c3RDb250cm9sbGVyLndhaXRVbnRpbERvbmUoKTsKKyAgICAgICAgICAgIHRlc3REaXJlY3RUb3Vj
aGVzKCk7CisgICAgICAgICAgICB0ZXN0RGlyZWN0TWlzc2VzKCk7CisgICAgICAgICAgICB0ZXN0
SW5kaXJlY3RUb3VjaGVzKCk7CisgICAgICAgICAgICBpc1N1Y2Nlc3NmdWxseVBhcnNlZCgpOwor
ICAgICAgICAgICAgbGF5b3V0VGVzdENvbnRyb2xsZXIubm90aWZ5RG9uZSgpOworICAgICAgICB9
CisgICAgfQorPC9zY3JpcHQ+Cis8L2JvZHk+Cis8L2h0bWw+CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZDFkZDky
Yi4uMzRmNzk0NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDYxIEBACisyMDEyLTAzLTA5ICBBbGxh
biBTYW5kZmVsZCBKZW5zZW4gIDxhbGxhbi5qZW5zZW5Abm9raWEuY29tPgorCisgICAgICAgIFNl
bGVjdCBiZXN0IHRhcmdldCBmb3IgdGFwIGdlc3R1cmUuCisgICAgICAgIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD03ODgwMQorCisgICAgICAgIFJldmlld2VkIGJ5IE5P
Qk9EWSAoT09QUyEpLgorCisgICAgICAgIFRoZSBuZXcgQVBJIGlzIGF2YWlsYWJsZSB0aHJvdWdo
IEV2ZW50SGFuZGxlcjo6bm9kZUZvclRhcEdlc3R1cmVBdFRvdWNoUG9pbnQsIGJ1dAorICAgICAg
ICBpbXBsZW1lbnRhdGlvbiBkZXRhaWxzIGhhdmUgYmVlbiBwbGFjZWQgaW4gcGxhdGZvcm0vSGl0
VGVzdFJlc3VsdE1ldHJpY3MuCisKKyAgICAgICAgVGhlIGRlZmF1bHQgaGl0IGRldGVjdGlvbiBp
cyBwZXJmb3JtZWQgYnkgbWVhc3VyaW5nIHRoZSBkaXN0YW5jZSB0byB0aGUgY2VudGVyCisgICAg
ICAgIGxpbmVzIG9mIHRoZSBhYnNvbHV0ZSByZWN0cyBvZiB0aGUgaGl0IG5vZGVzLiBBYnNvbHV0
ZSByZWN0cyBhcmUgdXNlZCBpbnN0ZWFkCisgICAgICAgIG9mIGJvdW5kaW5nIHJlY3RzIHRvIG1h
a2UgaGl0LWRldGVjdGluZyBhZ2FpbnN0IGxpbmtzIG92ZXIgbGluZSBicmVha3MuIERpc3RhbmNl
CisgICAgICAgIHRvIGNlbnRlciBsaW5lIGlzIHVzZWQgdG8gbWFrZSBpdCBlYXNpZXIgdG8gaGl0
IHNtYWxsIGxpbmtzIG5leHQgdG8gbGFyZ2UgbGlua3MuCisgICAgICAgIEZvciBsaW5lLXJlY3Rz
IHRoZSBkaXN0YW5jZSB0byB0aGUgY2VudGVyLWxpbmUgaXMgYSBiZXR0ZXIgZXhwcmVzc2lvbiBv
ZiB0aGUgZGlzdGFuY2UKKyAgICAgICAgdG8gYSByZWN0YW5nbGVzIGNlbnRlciB0aGFuIHRoZSBk
aXN0YW5jZSB0byB0aGUgY2VudGVyLXBvaW50LgorCisgICAgICAgIFRlc3RzOiB0b3VjaGFkanVz
dG1lbnQvZXZlbnQtdHJpZ2dlcmVkLXdpZGdldHMuaHRtbAorICAgICAgICAgICAgICAgdG91Y2hh
ZGp1c3RtZW50L2h0bWwtbGFiZWwuaHRtbAorICAgICAgICAgICAgICAgdG91Y2hhZGp1c3RtZW50
L25lc3RlZC10b3VjaC5odG1sCisgICAgICAgICAgICAgICB0b3VjaGFkanVzdG1lbnQvdG91Y2gt
aW5saW5lcy5odG1sCisKKyAgICAgICAgKiBUYXJnZXQucHJpOgorICAgICAgICAqIHBhZ2UvRXZl
bnRIYW5kbGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkV2ZW50SGFuZGxlcjo6aGFuZGxlR2Vz
dHVyZVRhcCk6CisgICAgICAgIChXZWJDb3JlOjpFdmVudEhhbmRsZXI6OmJlc3RDbGlja2FibGVO
b2RlRm9yVG91Y2hQb2ludCk6CisgICAgICAgICogcGFnZS9FdmVudEhhbmRsZXIuaDoKKyAgICAg
ICAgKiBwYWdlL1RvdWNoQWRqdXN0bWVudC5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6
VG91Y2hBZGp1c3RtZW50OjpIaXRUZXN0UXVhZDo6SGl0VGVzdFF1YWQpOgorICAgICAgICAoV2Vi
Q29yZTo6VG91Y2hBZGp1c3RtZW50OjpIaXRUZXN0UXVhZDo6bm9kZSk6CisgICAgICAgIChXZWJD
b3JlOjpUb3VjaEFkanVzdG1lbnQ6OkhpdFRlc3RRdWFkOjpxdWFkKToKKyAgICAgICAgKFdlYkNv
cmU6OlRvdWNoQWRqdXN0bWVudDo6SGl0VGVzdFF1YWQ6OmJvdW5kaW5nQm94KToKKyAgICAgICAg
KFdlYkNvcmU6OlRvdWNoQWRqdXN0bWVudDo6bm9kZVJlc3BvbmRzVG9UYXBHZXN0dXJlKToKKyAg
ICAgICAgKFdlYkNvcmU6OlRvdWNoQWRqdXN0bWVudDo6YXBwZW5kQWJzb2x1dGVRdWFkc0Zvck5v
ZGVUb0hpdExpc3QpOgorICAgICAgICAoV2ViQ29yZTo6VG91Y2hBZGp1c3RtZW50Ojpjb21waWxl
SGl0TGlzdCk6CisgICAgICAgIChXZWJDb3JlOjpUb3VjaEFkanVzdG1lbnQ6OmRpc3RhbmNlVG9I
aXRUZXN0UXVhZCk6CisgICAgICAgIChXZWJDb3JlOjpUb3VjaEFkanVzdG1lbnQ6OmZpbmROb2Rl
V2l0aExvd2VzdE1ldHJpYyk6CisgICAgICAgIChXZWJDb3JlOjpmaW5kQmVzdENsaWNrYWJsZUNh
bmRpZGF0ZSk6CisgICAgICAgICogcGFnZS9Ub3VjaEFkanVzdG1lbnQuaDogQWRkZWQuCisgICAg
ICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvRmxvYXRRdWFkLmg6CisgICAgICAgIChXZWJDb3JlOjpG
bG9hdFF1YWQ6OmNlbnRlcik6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvSW50UG9pbnQu
aDoKKyAgICAgICAgKFdlYkNvcmU6OkludFBvaW50OjpkaXN0YW5jZVNxdWFyZWRUb1BvaW50KToK
KyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9JbnRSZWN0LmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OmRpc3RhbmNlVG9JbnRlcnZhbCk6CisgICAgICAgIChXZWJDb3JlOjpJbnRSZWN0OjpkaWZm
ZXJlbmNlVG9Qb2ludCk6CisgICAgICAgIChXZWJDb3JlOjpJbnRSZWN0OjpkaWZmZXJlbmNlRnJv
bUNlbnRlckxpbmVUb1BvaW50KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9JbnRSZWN0
Lmg6CisgICAgICAgIChXZWJDb3JlOjpJbnRSZWN0OjpkaXN0YW5jZVNxdWFyZWRUb1BvaW50KToK
KyAgICAgICAgKFdlYkNvcmU6OkludFJlY3Q6OmRpc3RhbmNlU3F1YXJlZEZyb21DZW50ZXJMaW5l
VG9Qb2ludCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvSW50U2l6ZS5oOgorICAgICAg
ICAoV2ViQ29yZTo6SW50U2l6ZTo6ZGlhZ29uYWxMZW5ndGhTcXVhcmVkKToKKyAgICAgICAgKiB0
ZXN0aW5nL0ludGVybmFscy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJbnRlcm5hbHM6OnRvdWNo
UG9zaXRpb25BZGp1c3RlZFRvQmVzdENsaWNrYWJsZU5vZGUpOgorICAgICAgICAoV2ViQ29yZTo6
SW50ZXJuYWxzOjp0b3VjaE5vZGVBZGp1c3RlZFRvQmVzdENsaWNrYWJsZU5vZGUpOgorICAgICAg
ICAqIHRlc3RpbmcvSW50ZXJuYWxzLmg6CisgICAgICAgICogdGVzdGluZy9JbnRlcm5hbHMuaWRs
OgorCiAyMDEyLTAzLTA5ICBTaGVyaWZmIEJvdCAgPHdlYmtpdC5yZXZpZXcuYm90QGdtYWlsLmNv
bT4KIAogICAgICAgICBVbnJldmlld2VkLCByb2xsaW5nIG91dCByMTEwMTkxLCByMTEwMjAyLCBh
bmQgcjExMDI3OS4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1RhcmdldC5wcmkgYi9Tb3Vy
Y2UvV2ViQ29yZS9UYXJnZXQucHJpCmluZGV4IDdmYTQzNGIuLjg2YTMxODMgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL1RhcmdldC5wcmkKKysrIGIvU291cmNlL1dlYkNvcmUvVGFyZ2V0LnBy
aQpAQCAtMTAzNCw2ICsxMDM0LDcgQEAgU09VUkNFUyArPSBcCiAgICAgcGFnZS9TZWN1cml0eVBv
bGljeS5jcHAgXAogICAgIHBhZ2UvU2V0dGluZ3MuY3BwIFwKICAgICBwYWdlL1NwYXRpYWxOYXZp
Z2F0aW9uLmNwcCBcCisgICAgcGFnZS9Ub3VjaEFkanVzdG1lbnQuY3BwIFwKICAgICBwYWdlL1N1
c3BlbmRhYmxlVGltZXIuY3BwIFwKICAgICBwYWdlL1VzZXJDb250ZW50VVJMUGF0dGVybi5jcHAg
XAogICAgIHBhZ2UvV2luZG93RmVhdHVyZXMuY3BwIFwKQEAgLTIxMjcsNiArMjEyOCw3IEBAIEhF
QURFUlMgKz0gXAogICAgIHBhZ2UvU3BlZWNoSW5wdXRMaXN0ZW5lci5oIFwKICAgICBwYWdlL1Nw
ZWVjaElucHV0UmVzdWx0LmggXAogICAgIHBhZ2UvU3BlZWNoSW5wdXRSZXN1bHRMaXN0LmggXAor
ICAgIHBhZ2UvVG91Y2hBZGp1c3RtZW50LmggXAogICAgIHBhZ2UvV2ViS2l0QW5pbWF0aW9uLmgg
XAogICAgIHBhZ2UvV2ViS2l0QW5pbWF0aW9uTGlzdC5oIFwKICAgICBwYWdlL1dpbmRvd0ZlYXR1
cmVzLmggXApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGFnZS9FdmVudEhhbmRsZXIuY3Bw
IGIvU291cmNlL1dlYkNvcmUvcGFnZS9FdmVudEhhbmRsZXIuY3BwCmluZGV4IDFjMTE0N2IuLjdl
YjQ4YWIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRXZlbnRIYW5kbGVyLmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL0V2ZW50SGFuZGxlci5jcHAKQEAgLTczLDYgKzczLDcg
QEAKICNpbmNsdWRlICJTY3JvbGxiYXIuaCIKICNpbmNsdWRlICJTZXR0aW5ncy5oIgogI2luY2x1
ZGUgIlNwYXRpYWxOYXZpZ2F0aW9uLmgiCisjaW5jbHVkZSAiU3RhdGljSGFzaFNldE5vZGVMaXN0
LmgiCiAjaW5jbHVkZSAiU3R5bGVDYWNoZWRJbWFnZS5oIgogI2luY2x1ZGUgIlRleHRFdmVudC5o
IgogI2luY2x1ZGUgIlRleHRJdGVyYXRvci5oIgpAQCAtODgsNiArODksMTAgQEAKICNpbmNsdWRl
ICJQbGF0Zm9ybUdlc3R1cmVFdmVudC5oIgogI2VuZGlmCiAKKyNpZiBFTkFCTEUoVE9VQ0hfQURK
VVNUTUVOVCkKKyNpbmNsdWRlICJUb3VjaEFkanVzdG1lbnQuaCIKKyNlbmRpZgorCiAjaWYgRU5B
QkxFKFNWRykKICNpbmNsdWRlICJTVkdEb2N1bWVudC5oIgogI2luY2x1ZGUgIlNWR0VsZW1lbnRJ
bnN0YW5jZS5oIgpAQCAtMjM4OCwxMCArMjM5MywyMSBAQCBib29sIEV2ZW50SGFuZGxlcjo6aGFu
ZGxlR2VzdHVyZVRhcChjb25zdCBQbGF0Zm9ybUdlc3R1cmVFdmVudCYgZ2VzdHVyZUV2ZW50KQog
ewogICAgIC8vIEZJWE1FOiBSZWZhY3RvciB0aGlzIGNvZGUgdG8gbm90IGhpdCB0ZXN0IG11bHRp
cGxlIHRpbWVzIG9uY2UgaGl0IHRlc3RpbmcKICAgICAvLyBoYXMgYmVlbiBjb3JyZWN0ZWQgYXMg
c3VnZ2VzdGVkIGFib3ZlIGluIGhhbmRsZUdlc3R1cmVFdmVudCgpLgorICAgIEludFBvaW50IGFk
anVzdGVkUG9pbnQgPSBnZXN0dXJlRXZlbnQucG9zaXRpb24oKTsKKyNpZiBFTkFCTEUoVE9VQ0hf
QURKVVNUTUVOVCkKKyAgICBpZiAoIWdlc3R1cmVFdmVudC5hcmVhKCkuaXNFbXB0eSgpKSB7Cisg
ICAgICAgIE5vZGUqIHRhcmdldE5vZGUgPSAwOworICAgICAgICAvLyBGb3Igbm93IHdlIHVzZSB0
aGUgYWRqdXN0ZWQgcG9zaXRpb24gdG8gZW5zdXJlIHRoZSBsYXRlciByZWR1bmRhbnQgaGl0LXRl
c3RzIGhpdHMgdGhlIHJpZ2h0IG5vZGUuCisgICAgICAgIGJlc3RDbGlja2FibGVOb2RlRm9yVG91
Y2hQb2ludChnZXN0dXJlRXZlbnQucG9zaXRpb24oKSwgSW50U2l6ZShnZXN0dXJlRXZlbnQuYXJl
YSgpLndpZHRoKCkgLyAyLCBnZXN0dXJlRXZlbnQuYXJlYSgpLmhlaWdodCgpIC8gMiksIGFkanVz
dGVkUG9pbnQsIHRhcmdldE5vZGUpOworICAgICAgICBpZiAoIXRhcmdldE5vZGUpCisgICAgICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorI2VuZGlmCisKICAgICBib29sIGRlZmF1bHRQcmV2
ZW50ZWQgPSBmYWxzZTsKLSAgICBQbGF0Zm9ybU1vdXNlRXZlbnQgZmFrZU1vdXNlTW92ZShnZXN0
dXJlRXZlbnQucG9zaXRpb24oKSwgZ2VzdHVyZUV2ZW50Lmdsb2JhbFBvc2l0aW9uKCksIE5vQnV0
dG9uLCBQbGF0Zm9ybUV2ZW50OjpNb3VzZU1vdmVkLCAvKiBjbGlja0NvdW50ICovIDEsIGdlc3R1
cmVFdmVudC5zaGlmdEtleSgpLCBnZXN0dXJlRXZlbnQuY3RybEtleSgpLCBnZXN0dXJlRXZlbnQu
YWx0S2V5KCksIGdlc3R1cmVFdmVudC5tZXRhS2V5KCksIGdlc3R1cmVFdmVudC50aW1lc3RhbXAo
KSk7Ci0gICAgUGxhdGZvcm1Nb3VzZUV2ZW50IGZha2VNb3VzZURvd24oZ2VzdHVyZUV2ZW50LnBv
c2l0aW9uKCksIGdlc3R1cmVFdmVudC5nbG9iYWxQb3NpdGlvbigpLCBMZWZ0QnV0dG9uLCBQbGF0
Zm9ybUV2ZW50OjpNb3VzZVByZXNzZWQsIC8qIGNsaWNrQ291bnQgKi8gMSwgZ2VzdHVyZUV2ZW50
LnNoaWZ0S2V5KCksIGdlc3R1cmVFdmVudC5jdHJsS2V5KCksIGdlc3R1cmVFdmVudC5hbHRLZXko
KSwgZ2VzdHVyZUV2ZW50Lm1ldGFLZXkoKSwgZ2VzdHVyZUV2ZW50LnRpbWVzdGFtcCgpKTsKLSAg
ICBQbGF0Zm9ybU1vdXNlRXZlbnQgZmFrZU1vdXNlVXAoZ2VzdHVyZUV2ZW50LnBvc2l0aW9uKCks
IGdlc3R1cmVFdmVudC5nbG9iYWxQb3NpdGlvbigpLCBMZWZ0QnV0dG9uLCBQbGF0Zm9ybUV2ZW50
OjpNb3VzZVJlbGVhc2VkLCAvKiBjbGlja0NvdW50ICovIDEsIGdlc3R1cmVFdmVudC5zaGlmdEtl
eSgpLCBnZXN0dXJlRXZlbnQuY3RybEtleSgpLCBnZXN0dXJlRXZlbnQuYWx0S2V5KCksIGdlc3R1
cmVFdmVudC5tZXRhS2V5KCksIGdlc3R1cmVFdmVudC50aW1lc3RhbXAoKSk7CisgICAgUGxhdGZv
cm1Nb3VzZUV2ZW50IGZha2VNb3VzZU1vdmUoYWRqdXN0ZWRQb2ludCwgZ2VzdHVyZUV2ZW50Lmds
b2JhbFBvc2l0aW9uKCksIE5vQnV0dG9uLCBQbGF0Zm9ybUV2ZW50OjpNb3VzZU1vdmVkLCAvKiBj
bGlja0NvdW50ICovIDEsIGdlc3R1cmVFdmVudC5zaGlmdEtleSgpLCBnZXN0dXJlRXZlbnQuY3Ry
bEtleSgpLCBnZXN0dXJlRXZlbnQuYWx0S2V5KCksIGdlc3R1cmVFdmVudC5tZXRhS2V5KCksIGdl
c3R1cmVFdmVudC50aW1lc3RhbXAoKSk7CisgICAgUGxhdGZvcm1Nb3VzZUV2ZW50IGZha2VNb3Vz
ZURvd24oYWRqdXN0ZWRQb2ludCwgZ2VzdHVyZUV2ZW50Lmdsb2JhbFBvc2l0aW9uKCksIExlZnRC
dXR0b24sIFBsYXRmb3JtRXZlbnQ6Ok1vdXNlUHJlc3NlZCwgLyogY2xpY2tDb3VudCAqLyAxLCBn
ZXN0dXJlRXZlbnQuc2hpZnRLZXkoKSwgZ2VzdHVyZUV2ZW50LmN0cmxLZXkoKSwgZ2VzdHVyZUV2
ZW50LmFsdEtleSgpLCBnZXN0dXJlRXZlbnQubWV0YUtleSgpLCBnZXN0dXJlRXZlbnQudGltZXN0
YW1wKCkpOworICAgIFBsYXRmb3JtTW91c2VFdmVudCBmYWtlTW91c2VVcChhZGp1c3RlZFBvaW50
LCBnZXN0dXJlRXZlbnQuZ2xvYmFsUG9zaXRpb24oKSwgTGVmdEJ1dHRvbiwgUGxhdGZvcm1FdmVu
dDo6TW91c2VSZWxlYXNlZCwgLyogY2xpY2tDb3VudCAqLyAxLCBnZXN0dXJlRXZlbnQuc2hpZnRL
ZXkoKSwgZ2VzdHVyZUV2ZW50LmN0cmxLZXkoKSwgZ2VzdHVyZUV2ZW50LmFsdEtleSgpLCBnZXN0
dXJlRXZlbnQubWV0YUtleSgpLCBnZXN0dXJlRXZlbnQudGltZXN0YW1wKCkpOwogICAgIG1vdXNl
TW92ZWQoZmFrZU1vdXNlTW92ZSk7CiAgICAgZGVmYXVsdFByZXZlbnRlZCB8PSBoYW5kbGVNb3Vz
ZVByZXNzRXZlbnQoZmFrZU1vdXNlRG93bik7CiAgICAgZGVmYXVsdFByZXZlbnRlZCB8PSBoYW5k
bGVNb3VzZVJlbGVhc2VFdmVudChmYWtlTW91c2VVcCk7CkBAIC0yNDExLDYgKzI0MjcsMjQgQEAg
Ym9vbCBFdmVudEhhbmRsZXI6OmhhbmRsZUdlc3R1cmVTY3JvbGxVcGRhdGUoY29uc3QgUGxhdGZv
cm1HZXN0dXJlRXZlbnQmIGdlc3R1cmUKIH0KICNlbmRpZgogCisjaWYgRU5BQkxFKFRPVUNIX0FE
SlVTVE1FTlQpCit2b2lkIEV2ZW50SGFuZGxlcjo6YmVzdENsaWNrYWJsZU5vZGVGb3JUb3VjaFBv
aW50KGNvbnN0IEludFBvaW50JiB0b3VjaENlbnRlciwgY29uc3QgSW50U2l6ZSYgdG91Y2hSYWRp
dXMsIEludFBvaW50JiB0YXJnZXRQb2ludCwgTm9kZSomIHRhcmdldE5vZGUpCit7CisgICAgSGl0
VGVzdFJlcXVlc3Q6OkhpdFRlc3RSZXF1ZXN0VHlwZSBoaXRUeXBlID0gSGl0VGVzdFJlcXVlc3Q6
OlJlYWRPbmx5IHwgSGl0VGVzdFJlcXVlc3Q6OkFjdGl2ZTsKKyAgICBJbnRSZWN0IHRvdWNoUmVj
dCh0b3VjaENlbnRlciAtIHRvdWNoUmFkaXVzLCBJbnRTaXplKHRvdWNoUmFkaXVzLndpZHRoKCkg
KiAyLCB0b3VjaFJhZGl1cy5oZWlnaHQoKSAqIDIpKTsKKyAgICB0YXJnZXROb2RlID0gMDsKKwor
ICAgIEhpdFRlc3RSZXN1bHQgcmVzdWx0ID0gaGl0VGVzdFJlc3VsdEF0UG9pbnQodG91Y2hDZW50
ZXIsIC8qYWxsb3dTaGFkb3dDb250ZW50Ki8gZmFsc2UsIC8qaWdub3JlQ2xpcHBpbmcqLyBmYWxz
ZSwgRG9udEhpdFRlc3RTY3JvbGxiYXJzLCBoaXRUeXBlLCB0b3VjaFJhZGl1cyk7CisKKyAgICBS
ZWZQdHI8U3RhdGljSGFzaFNldE5vZGVMaXN0PiBub2RlTGlzdCA9IFN0YXRpY0hhc2hTZXROb2Rl
TGlzdDo6YWRvcHQocmVzdWx0LnJlY3RCYXNlZFRlc3RSZXN1bHQoKSk7CisgICAgaWYgKCFmaW5k
QmVzdENsaWNrYWJsZUNhbmRpZGF0ZSh0YXJnZXROb2RlLCB0YXJnZXRQb2ludCwgdG91Y2hDZW50
ZXIsIHRvdWNoUmVjdCwgKm5vZGVMaXN0LmdldCgpKSkgeworICAgICAgICAvLyBEZWZhdWx0IHRv
IGp1c3QgcmV0dXJuaW5nIGlubmVyTm9uU2hhcmVkTm9kZS4KKyAgICAgICAgdGFyZ2V0UG9pbnQg
PSB0b3VjaENlbnRlcjsKKyAgICAgICAgdGFyZ2V0Tm9kZSA9IHJlc3VsdC5pbm5lck5vblNoYXJl
ZE5vZGUoKTsKKyAgICB9Cit9CisjZW5kaWYKKwogI2lmIEVOQUJMRShDT05URVhUX01FTlVTKQog
Ym9vbCBFdmVudEhhbmRsZXI6OnNlbmRDb250ZXh0TWVudUV2ZW50KGNvbnN0IFBsYXRmb3JtTW91
c2VFdmVudCYgZXZlbnQpCiB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL0V2ZW50
SGFuZGxlci5oIGIvU291cmNlL1dlYkNvcmUvcGFnZS9FdmVudEhhbmRsZXIuaAppbmRleCAwOTgx
ZTQxLi40NTlkMjY5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL0V2ZW50SGFuZGxl
ci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRXZlbnRIYW5kbGVyLmgKQEAgLTE2Niw2ICsx
NjYsMTAgQEAgcHVibGljOgogICAgIGJvb2wgaGFuZGxlR2VzdHVyZVNjcm9sbFVwZGF0ZShjb25z
dCBQbGF0Zm9ybUdlc3R1cmVFdmVudCYpOwogI2VuZGlmCiAKKyNpZiBFTkFCTEUoVE9VQ0hfQURK
VVNUTUVOVCkKKyAgICB2b2lkIGJlc3RDbGlja2FibGVOb2RlRm9yVG91Y2hQb2ludChjb25zdCBJ
bnRQb2ludCYgdG91Y2hDZW50ZXIsIGNvbnN0IEludFNpemUmIHRvdWNoUmFkaXVzLCBJbnRQb2lu
dCYgdGFyZ2V0UG9pbnQsIE5vZGUqJiB0YXJnZXROb2RlKTsKKyNlbmRpZgorCiAjaWYgRU5BQkxF
KENPTlRFWFRfTUVOVVMpCiAgICAgYm9vbCBzZW5kQ29udGV4dE1lbnVFdmVudChjb25zdCBQbGF0
Zm9ybU1vdXNlRXZlbnQmKTsKICAgICBib29sIHNlbmRDb250ZXh0TWVudUV2ZW50Rm9yS2V5KCk7
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL1RvdWNoQWRqdXN0bWVudC5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9wYWdlL1RvdWNoQWRqdXN0bWVudC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDAwMDAwMC4uNTY0NTc1YQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3BhZ2UvVG91Y2hBZGp1c3RtZW50LmNwcApAQCAtMCwwICsxLDIwNiBAQAorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAxMiBOb2tpYSBDb3Jwb3JhdGlvbiBhbmQvb3IgaXRzIHN1YnNpZGlhcnko
LWllcykKKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRp
c3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBH
TlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhl
IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExp
Y2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhp
cyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2Vm
dWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGll
ZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGlj
ZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBh
IGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25n
IHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdy
aXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xp
biBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisg
Ki8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorCisjaW5jbHVkZSAiVG91Y2hBZGp1c3RtZW50Lmgi
CisKKyNpbmNsdWRlICJDb250YWluZXJOb2RlLmgiCisjaW5jbHVkZSAiRmxvYXRQb2ludC5oIgor
I2luY2x1ZGUgIkZsb2F0UXVhZC5oIgorI2luY2x1ZGUgIkhUTUxMYWJlbEVsZW1lbnQuaCIKKyNp
bmNsdWRlICJIVE1MTmFtZXMuaCIKKyNpbmNsdWRlICJJbnRQb2ludC5oIgorI2luY2x1ZGUgIklu
dFNpemUuaCIKKyNpbmNsdWRlICJOb2RlLmgiCisjaW5jbHVkZSAiUmVuZGVyQm94LmgiCisjaW5j
bHVkZSAiUmVuZGVyT2JqZWN0LmgiCisjaW5jbHVkZSAiUmVuZGVyU3R5bGUuaCIKKworbmFtZXNw
YWNlIFdlYkNvcmUgeworCituYW1lc3BhY2UgVG91Y2hBZGp1c3RtZW50IHsKKworY2xhc3MgSGl0
VGVzdFF1YWQgeworcHVibGljOgorICAgIEhpdFRlc3RRdWFkKE5vZGUqIG5vZGUsIGNvbnN0IEZs
b2F0UXVhZCYgcXVhZCkKKyAgICAgICAgOiBtX25vZGUobm9kZSkKKyAgICAgICAgLCBtX3F1YWQo
cXVhZCkKKyAgICB7IH0KKworICAgIE5vZGUqIG5vZGUoKSBjb25zdCB7IHJldHVybiBtX25vZGU7
IH0KKyAgICBGbG9hdFF1YWQgcXVhZCgpIGNvbnN0IHsgcmV0dXJuIG1fcXVhZDsgfQorICAgIElu
dFJlY3QgYm91bmRpbmdCb3goKSBjb25zdCB7IHJldHVybiBtX3F1YWQuZW5jbG9zaW5nQm91bmRp
bmdCb3goKTsgfQorCitwcml2YXRlOgorICAgIE5vZGUqIG1fbm9kZTsKKyAgICBGbG9hdFF1YWQg
bV9xdWFkOworfTsKKwordHlwZWRlZiBWZWN0b3I8SGl0VGVzdFF1YWQ+IEhpdExpc3Q7Cit0eXBl
ZGVmIGJvb2wgKCpOb2RlRmlsdGVyKShOb2RlKik7Cit0eXBlZGVmIGZsb2F0ICgqTWV0cmljKShj
b25zdCBJbnRQb2ludCYsIGNvbnN0IEludFJlY3QmLCBjb25zdCBIaXRUZXN0UXVhZCYpOworCisv
LyBUYWtlcyBub24tY29uc3QgTm9kZSogYmVjYXVzZSBpc0NvbnRlbnRFZGl0YWJsZSBpcyBhIG5v
bi1jb25zdCBmdW5jdGlvbi4KK2Jvb2wgbm9kZVJlc3BvbmRzVG9UYXBHZXN0dXJlKE5vZGUqIG5v
ZGUpCit7CisgICAgaWYgKG5vZGUtPmlzTGluaygpCisgICAgICAgIHx8IG5vZGUtPmlzQ29udGVu
dEVkaXRhYmxlKCkKKyAgICAgICAgfHwgbm9kZS0+aXNNb3VzZUZvY3VzYWJsZSgpKQorICAgICAg
ICByZXR1cm4gdHJ1ZTsKKyAgICBpZiAobm9kZS0+aXNFbGVtZW50Tm9kZSgpKSB7CisgICAgICAg
IEVsZW1lbnQqIGVsZW1lbnQgPSAgc3RhdGljX2Nhc3Q8RWxlbWVudCo+KG5vZGUpOworICAgICAg
ICBpZiAoZWxlbWVudC0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OmxhYmVsVGFnKSAmJiBzdGF0aWNf
Y2FzdDxIVE1MTGFiZWxFbGVtZW50Kj4oZWxlbWVudCktPmNvbnRyb2woKSkKKyAgICAgICAgICAg
IHJldHVybiB0cnVlOworICAgIH0KKyAgICAvLyBGSVhNRTogSW1wbGVtZW50IGhhc0RlZmF1bHRF
dmVudEhhbmRsZXIgYW5kIHVzZSB0aGF0IGluc3RlYWQgb2YgYWxsIG9mIHRoZSBhYm92ZSBjaGVj
a3MuCisgICAgaWYgKG5vZGUtPmhhc0V2ZW50TGlzdGVuZXJzKCkKKyAgICAgICAgJiYgKG5vZGUt
Pmhhc0V2ZW50TGlzdGVuZXJzKGV2ZW50TmFtZXMoKS5jbGlja0V2ZW50KQorICAgICAgICAgICAg
fHwgbm9kZS0+aGFzRXZlbnRMaXN0ZW5lcnMoZXZlbnROYW1lcygpLkRPTUFjdGl2YXRlRXZlbnQp
CisgICAgICAgICAgICB8fCBub2RlLT5oYXNFdmVudExpc3RlbmVycyhldmVudE5hbWVzKCkubW91
c2Vkb3duRXZlbnQpCisgICAgICAgICAgICB8fCBub2RlLT5oYXNFdmVudExpc3RlbmVycyhldmVu
dE5hbWVzKCkubW91c2V1cEV2ZW50KQorICAgICAgICAgICAgfHwgbm9kZS0+aGFzRXZlbnRMaXN0
ZW5lcnMoZXZlbnROYW1lcygpLm1vdXNlbW92ZUV2ZW50KQorICAgICAgICAgICAgLy8gQ2hlY2tp
bmcgZm9yIGZvY3VzIGV2ZW50cyBpcyBub3QgbmVjZXNzYXJ5IHNpbmNlIHRoZXkgY2FuIG9ubHkg
ZmlyZSBvbgorICAgICAgICAgICAgLy8gZm9jdXNhYmxlIGVsZW1lbnRzIHdoaWNoIGhhdmUgYWxy
ZWFkeSBiZWVuIGNhcHR1cmVkIGFib3ZlLgorICAgICAgICApKQorICAgICAgICByZXR1cm4gdHJ1
ZTsKKyAgICBpZiAobm9kZS0+cmVuZGVyU3R5bGUoKSkgeworICAgICAgICAvLyBBY2NlcHQgbm9k
ZXMgdGhhdCBoYXMgYSBDU1MgZWZmZWN0IHdoZW4gdG91Y2hlZC4KKyAgICAgICAgaWYgKG5vZGUt
PnJlbmRlclN0eWxlKCktPmFmZmVjdGVkQnlBY3RpdmVSdWxlcygpIHx8IG5vZGUtPnJlbmRlclN0
eWxlKCktPmFmZmVjdGVkQnlIb3ZlclJ1bGVzKCkpCisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsK
KyAgICB9CisgICAgcmV0dXJuIGZhbHNlOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgYXBwZW5k
QWJzb2x1dGVRdWFkc0Zvck5vZGVUb0hpdExpc3QoTm9kZSogbm9kZSwgSGl0TGlzdCYgaGl0bGlz
dCkKK3sKKyAgICAvLyBTaW5jZSB0aGUgbm9kZSBpcyBhIHJlc3VsdCBvZiBhIGhpdCB0ZXN0LCB3
ZSBhcmUgYWxyZWFkeSBlbnN1cmVkIGl0IGhhcyBhIHJlbmRlcmVyLgorICAgIEFTU0VSVChub2Rl
LT5yZW5kZXJlcigpKTsKKworICAgIFZlY3RvcjxGbG9hdFF1YWQ+IHF1YWRzOworICAgIG5vZGUt
PnJlbmRlcmVyKCktPmFic29sdXRlUXVhZHMocXVhZHMpOworCisgICAgVmVjdG9yPEZsb2F0UXVh
ZD46OmNvbnN0X2l0ZXJhdG9yIGl0ID0gcXVhZHMuYmVnaW4oKTsKKyAgICBjb25zdCBWZWN0b3I8
RmxvYXRRdWFkPjo6Y29uc3RfaXRlcmF0b3IgZW5kID0gcXVhZHMuZW5kKCk7CisgICAgZm9yICg7
IGl0ICE9IGVuZDsgKytpdCkKKyAgICAgICAgaGl0bGlzdC5hcHBlbmQoSGl0VGVzdFF1YWQobm9k
ZSwgKml0KSk7Cit9CisKKy8vIENvbXBpbGUgYSBsaXN0IG9mIGFic29sdXRlIHJlY3RzIHJlcHJl
c2VuZGluZyBub2RlcyByZXNwb25kaW5nIHRoZSB0YXAgZ2VzdHVyZS4KK3ZvaWQgY29tcGlsZUhp
dExpc3QoY29uc3QgTm9kZUxpc3QmIGludGVyc2VjdGVkTm9kZXMsIEhpdExpc3QmIGhpdGxpc3Qs
IE5vZGVGaWx0ZXIgbm9kZUZpbHRlcikKK3sKKyAgICAvLyBGaW5kIGNhbmRpZGF0ZXMgcmVzcG9u
ZGluZyB0byB0YXAgZ2VzdHVyZSBldmVudHMgaW4gTyhuKSB0aW1lLgorICAgIEhhc2hNYXA8Tm9k
ZSosIE5vZGUqPiByZXNwb25kZXJNYXA7CisgICAgSGFzaFNldDxOb2RlKj4gYW5jZXN0b3JzVG9S
ZXNwb25kZXJzU2V0OworICAgIFZlY3RvcjxOb2RlKj4gY2FuZGlkYXRlczsKKworICAgIGNvbnN0
IHVuc2lnbmVkIGludCBsZW5ndGggPSBpbnRlcnNlY3RlZE5vZGVzLmxlbmd0aCgpOworICAgIGZv
ciAodW5zaWduZWQgaW50IGkgPSAwOyBpIDwgbGVuZ3RoOyArK2kpIHsKKyAgICAgICAgTm9kZSog
bm9kZSA9IGludGVyc2VjdGVkTm9kZXMuaXRlbShpKTsKKyAgICAgICAgaWYgKHJlc3BvbmRlck1h
cC5jb250YWlucyhub2RlKSkKKyAgICAgICAgICAgIC8vIFNraXAgbm9kZXMgdGhhdCBhcmUgZGly
ZWN0IGFuY2VzdG9ycyBvZiBvdGhlciBjYW5kaWRhdGVzLiBUaGV5IHdvdWxkIGhpdC10ZXN0IGFn
YWluc3QgdGhlIHNhbWUgYWJzb2x1dGUgcXVhZHMuCisgICAgICAgICAgICBjb250aW51ZTsKKyAg
ICAgICAgVmVjdG9yPE5vZGUqPiBhbmNlc3RvcnM7CisgICAgICAgIE5vZGUqIHJlc3BvbmRpbmdO
b2RlID0gMDsKKyAgICAgICAgZm9yICg7IG5vZGU7IG5vZGUgPSBub2RlLT5wYXJlbnRPckhvc3RO
b2RlKCkpIHsKKyAgICAgICAgICAgIC8vIENoZWNrIGlmIHdlIGFscmVhZHkgaGF2ZSBhIHJlc3Vs
dCBmb3IgYSBjb21tb24gYW5jZXN0b3IgZnJvbSBhbm90aGVyIGNhbmRpZGF0ZS4KKyAgICAgICAg
ICAgIHJlc3BvbmRpbmdOb2RlID0gcmVzcG9uZGVyTWFwLmdldChub2RlKTsKKyAgICAgICAgICAg
IGlmIChyZXNwb25kaW5nTm9kZSkKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAg
IGFuY2VzdG9ycy5hcHBlbmQobm9kZSk7CisgICAgICAgICAgICAvLyBDaGVjayBpZiB0aGUgbm9k
ZSBmaWx0ZXIgYXBwbGllcywgd2hpY2ggd291bGQgbWVhbiB3ZSBoYXZlIGZvdW5kIGEgcmVzcG9u
ZGluZyBub2RlLgorICAgICAgICAgICAgaWYgKG5vZGVGaWx0ZXIobm9kZSkpIHsKKyAgICAgICAg
ICAgICAgICByZXNwb25kaW5nTm9kZSA9IG5vZGU7CisgICAgICAgICAgICAgICAgLy8gTm93IHRo
YXQgd2UgaGF2ZSB0aGUgcmVzcG9uZGVyLCBzZXQgdGhlIHJlc3BvbmRlciBmb3IgYWxsIHRoZSBu
b2RlcyBzZWVuIHNvIGZhci4KKyAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGludCBpID0g
MDsgaSA8IGFuY2VzdG9ycy5zaXplKCk7IGkrKykKKyAgICAgICAgICAgICAgICAgICAgcmVzcG9u
ZGVyTWFwLmFkZChhbmNlc3RvcnNbaV0sIG5vZGUpOworICAgICAgICAgICAgICAgIC8vIFRoZSBj
b250aW51ZSB0aGUgaXRlcmF0aW9uIHRvIGNvbGxlY3QgdGhlIGFuY2VzdG9ycyBvZiB0aGUgcmVz
cG9uZGVyLgorICAgICAgICAgICAgICAgIGZvciAobm9kZSA9IG5vZGUtPnBhcmVudE9ySG9zdE5v
ZGUoKTsgbm9kZTsgbm9kZSA9IG5vZGUtPnBhcmVudE9ySG9zdE5vZGUoKSkgeworICAgICAgICAg
ICAgICAgICAgICBwYWlyPEhhc2hTZXQ8Tm9kZSo+OjppdGVyYXRvciwgYm9vbD4gdG1wID0gYW5j
ZXN0b3JzVG9SZXNwb25kZXJzU2V0LmFkZChub2RlKTsKKyAgICAgICAgICAgICAgICAgICAgaWYg
KCF0bXAuc2Vjb25kKQorICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAg
ICAgICAgfQorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICB9
CisgICAgICAgIGlmIChyZXNwb25kaW5nTm9kZSkKKyAgICAgICAgICAgIGNhbmRpZGF0ZXMuYXBw
ZW5kKGludGVyc2VjdGVkTm9kZXMuaXRlbShpKSk7CisgICAgICAgIGVsc2UgeworICAgICAgICAg
ICAgLy8gSW5zZXJ0IHRoZSBub2RlcyB3aXRoIG1pc3NpbmcgcmVzcG9uZGVycyBpbnRvIHRoZSBy
ZXNwb25kZXItbWFwIGZvciBmYXN0IHJlamVjdGlvbiBvZiBsYXRlciBjYW5kaWRhdGVzLgorICAg
ICAgICAgICAgZm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgPCBhbmNlc3RvcnMuc2l6ZSgpOyBp
KyspCisgICAgICAgICAgICAgICAgcmVzcG9uZGVyTWFwLmFkZChhbmNlc3RvcnNbaV0sIDApOwor
ICAgICAgICB9CisgICAgfQorCisgICAgLy8gV2UgY29tcGlsZSB0aGUgbGlzdCBvZiBjb21wb25l
bnQgYWJzb2x1dGUgcXVhZHMgaW5zdGVhZCBvZiB1c2luZyB0aGUgYm91bmRpbmcgcmVjdAorICAg
IC8vIHRvIGJlIGFibGUgdG8gcGVyZm9ybSBiZXR0ZXIgaGl0LXRlc3Rpbmcgb24gaW5saW5lIGxp
bmtzIG9uIGxpbmUtYnJlYWtzLgorICAgIFZlY3RvcjxOb2RlKj46OmNvbnN0X2l0ZXJhdG9yIGl0
MiA9IGNhbmRpZGF0ZXMuYmVnaW4oKTsKKyAgICBjb25zdCBWZWN0b3I8Tm9kZSo+Ojpjb25zdF9p
dGVyYXRvciBlbmQyID0gY2FuZGlkYXRlcy5lbmQoKTsKKyAgICBmb3IgKDsgaXQyICE9IGVuZDI7
ICsraXQyKSB7CisgICAgICAgIC8vIFNraXAgbm9kZXMgd2hvcyByZXNwb25kZXJzIGFyZSBhbmNl
c3RvcnMgb2Ygb3RoZXIgcmVzcG9uZGVycy4gVGhpcyBnaXZlcyBwcmVmZXJlbmNlIHRvIHRoZSBp
bm5lci1tb3N0IGV2ZW50LWhhbmRsZXJzLgorICAgICAgICAvLyBTbyB0aGF0IGEgbGluayBpcyBh
bHdheXMgcHJlZmVycmVkIGV2ZW4gd2hlbiBjb250YWluZWQgaW4gYW4gZWxlbWVudCB0aGF0IG1v
bml0b3JzIGFsbCBjbGljay1ldmVudHMuCisgICAgICAgIE5vZGUqIHJlc3BvbmRpbmdOb2RlID0g
cmVzcG9uZGVyTWFwLmdldCgqaXQyKTsKKyAgICAgICAgQVNTRVJUKHJlc3BvbmRpbmdOb2RlKTsK
KyAgICAgICAgaWYgKGFuY2VzdG9yc1RvUmVzcG9uZGVyc1NldC5jb250YWlucyhyZXNwb25kaW5n
Tm9kZSkpCisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgYXBwZW5kQWJzb2x1dGVRdWFk
c0Zvck5vZGVUb0hpdExpc3QoKml0MiwgaGl0bGlzdCk7CisgICAgfQorfQorCisvLyBSZXR1cm5z
IHRoZSBkaXN0YW5jZSBzcXVhcmVkIHRvIHRoZSBib3VuZGluZyBib3ggY2VudGVybGluZS4KK2Zs
b2F0IGRpc3RhbmNlVG9IaXRUZXN0UXVhZChjb25zdCBJbnRQb2ludCYgdG91Y2hIb3RzcG90LCBj
b25zdCBJbnRSZWN0JiwgY29uc3QgSGl0VGVzdFF1YWQmIGhpdFRlc3RRdWFkKQoreworICAgIC8v
IFVzaW5nIHRoZSBib3VuZGluZyBib3ggbWVhbnMgdGhlIGRpc3RhbmNlIHRvIGNlbnRlcmxpbmUg
aXMgbGVzcyBtZWFuaW5nZnVsIGZvciB0cmFuc2Zvcm1lZCByZWN0YW5nbGVzLAorICAgIC8vIGJ1
dCBjYWxjdWxhdGluZyB0aGUgZGlzdGFuY2UgdG8gcXVhZHMgY2FuIGJlIHZlcnkgZXhwZW5zaXZl
LCBhbmQgd2UgZG8gbm90IHdhbnQgdG8gY2FsY3VsY2F0ZQorICAgIC8vIHF1YWQgYmFzZWQgZGlz
dGFuY2VzIGZvciB1bnRyYW5zZm9ybWVkIHJlY3RhbmdsZXMuCisgICAgSW50UmVjdCByZWN0ID0g
aGl0VGVzdFF1YWQuYm91bmRpbmdCb3goKTsKKworICAgIHJldHVybiByZWN0LmRpc3RhbmNlU3F1
YXJlZEZyb21DZW50ZXJMaW5lVG9Qb2ludCh0b3VjaEhvdHNwb3QpOworfQorCitib29sIGZpbmRO
b2RlV2l0aExvd2VzdE1ldHJpYyhOb2RlKiYgdGFyZ2V0Tm9kZSwgSW50UG9pbnQmIHRhcmdldFBv
aW50LCBjb25zdCBJbnRQb2ludCYgdG91Y2hIb3RzcG90LCBjb25zdCBJbnRSZWN0JiB0b3VjaEFy
ZWEsIEhpdExpc3QmIGhpdGxpc3QsIE1ldHJpYyBtZXRyaWMpCit7CisgICAgdGFyZ2V0Tm9kZSA9
IDA7CisKKyAgICBmbG9hdCBiZXN0TWV0cmljID0gSU5GSU5JVFk7CisgICAgSGl0TGlzdDo6Y29u
c3RfaXRlcmF0b3IgaXQgPSBoaXRsaXN0LmJlZ2luKCk7CisgICAgSGl0TGlzdDo6Y29uc3RfaXRl
cmF0b3IgZW5kID0gaGl0bGlzdC5lbmQoKTsKKyAgICBmb3IgKDsgaXQgIT0gZW5kOyArK2l0KSB7
CisgICAgICAgIE5vZGUqIGhpdE5vZGUgPSBpdC0+bm9kZSgpOworICAgICAgICBmbG9hdCBoaXRN
ZXRyaWMgPSBtZXRyaWModG91Y2hIb3RzcG90LCB0b3VjaEFyZWEsICppdCk7CisgICAgICAgIGlm
IChoaXRNZXRyaWMgPCBiZXN0TWV0cmljKSB7CisgICAgICAgICAgICB0YXJnZXRQb2ludCA9IHJv
dW5kZWRJbnRQb2ludChpdC0+cXVhZCgpLmNlbnRlcigpKTsKKyAgICAgICAgICAgIHRhcmdldE5v
ZGUgPSBoaXROb2RlOworICAgICAgICAgICAgYmVzdE1ldHJpYyA9IGhpdE1ldHJpYzsKKyAgICAg
ICAgfQorICAgIH0KKworICAgIHJldHVybiAodGFyZ2V0Tm9kZSk7Cit9CisKK30gLy8gbmFtZXNw
YWNlIFRvdWNoQWRqdXN0bWVudAorCitib29sIGZpbmRCZXN0Q2xpY2thYmxlQ2FuZGlkYXRlKE5v
ZGUqJiB0YXJnZXROb2RlLCBJbnRQb2ludCAmdGFyZ2V0UG9pbnQsIGNvbnN0IEludFBvaW50ICZ0
b3VjaEhvdHNwb3QsIGNvbnN0IEludFJlY3QgJnRvdWNoQXJlYSwgY29uc3QgTm9kZUxpc3QmIG5v
ZGVMaXN0KQoreworICAgIFRvdWNoQWRqdXN0bWVudDo6SGl0TGlzdCBoaXRsaXN0OworICAgIFRv
dWNoQWRqdXN0bWVudDo6Y29tcGlsZUhpdExpc3Qobm9kZUxpc3QsIGhpdGxpc3QsIFRvdWNoQWRq
dXN0bWVudDo6bm9kZVJlc3BvbmRzVG9UYXBHZXN0dXJlKTsKKyAgICByZXR1cm4gVG91Y2hBZGp1
c3RtZW50OjpmaW5kTm9kZVdpdGhMb3dlc3RNZXRyaWModGFyZ2V0Tm9kZSwgdGFyZ2V0UG9pbnQs
IHRvdWNoSG90c3BvdCwgdG91Y2hBcmVhLCBoaXRsaXN0LCBUb3VjaEFkanVzdG1lbnQ6OmRpc3Rh
bmNlVG9IaXRUZXN0UXVhZCk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvVG91Y2hBZGp1c3RtZW50LmggYi9Tb3VyY2UvV2ViQ29y
ZS9wYWdlL1RvdWNoQWRqdXN0bWVudC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw
MDAuLmQ1ZGZjMTAKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL1RvdWNo
QWRqdXN0bWVudC5oCkBAIC0wLDAgKzEsMzYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIg
Tm9raWEgQ29ycG9yYXRpb24gYW5kL29yIGl0cyBzdWJzaWRpYXJ5KC1pZXMpCisgKgorICogVGhp
cyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9v
cgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJh
bCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZv
dW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91
ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0
cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhP
VVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAq
IE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNl
ZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0
YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUg
TGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFy
eTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZy
ZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBG
bG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpZm5kZWYgVG91
Y2hBZGp1c3RtZW50X2gKKyNkZWZpbmUgVG91Y2hBZGp1c3RtZW50X2gKKworI2luY2x1ZGUgIklu
dFBvaW50LmgiCisjaW5jbHVkZSAiSW50UmVjdC5oIgorI2luY2x1ZGUgIk5vZGUuaCIKKyNpbmNs
dWRlICJOb2RlTGlzdC5oIgorI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KKworbmFtZXNwYWNlIFdl
YkNvcmUgeworCitib29sIGZpbmRCZXN0Q2xpY2thYmxlQ2FuZGlkYXRlKE5vZGUqJiB0YXJnZXRO
b2RlLCBJbnRQb2ludCYgdGFyZ2V0UG9pbnQsIGNvbnN0IEludFBvaW50JiB0b3VjaEhvdHNwb3Qs
IGNvbnN0IEludFJlY3QmIHRvdWNoQXJlYSwgY29uc3QgTm9kZUxpc3QmKTsKKy8vIEZJWE1FOiBJ
bXBsZW1lbnQgdGhlIHNpbWlsYXIgZnVuY3Rpb25zIGZvciBvdGhlciBnZXN0dXJlcyBoZXJlIGFz
IHdlbGwuCisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9GbG9hdFF1YWQuaCBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL0Zsb2F0UXVhZC5oCmluZGV4IGI1ZTJhOGMuLmJmYjc5NGQg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0Zsb2F0UXVhZC5o
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0Zsb2F0UXVhZC5oCkBAIC04
OCw2ICs4OCwxMyBAQCBwdWJsaWM6CiAgICAgLy8gZnJvbSB0cmFuc2Zvcm1lZCByZWN0cy4KICAg
ICBib29sIGNvbnRhaW5zUXVhZChjb25zdCBGbG9hdFF1YWQmKSBjb25zdDsKIAorICAgIC8vIFRo
ZSBjZW50ZXIgb2YgdGhlIHF1YWQuIElmIHRoZSBxdWFkIGlzIHRoZSByZXN1bHQgb2YgYSBhZmZp
bmUtdHJhbnNmb3JtZWQgcmVjdGFuZ2xlIHRoaXMgaXMgdGhlIHNhbWUgYXMgdGhlIG9yaWdpbmFs
IGNlbnRlciB0cmFuc2Zvcm1lZC4KKyAgICBGbG9hdFBvaW50IGNlbnRlcigpIGNvbnN0CisgICAg
eworICAgICAgICByZXR1cm4gRmxvYXRQb2ludCgobV9wMS54KCkgKyBtX3AyLngoKSArIG1fcDMu
eCgpICsgbV9wNC54KCkpIC8gNC4wLAorICAgICAgICAgICAgICAgICAgICAgICAgICAobV9wMS55
KCkgKyBtX3AyLnkoKSArIG1fcDMueSgpICsgbV9wNC55KCkpIC8gNC4wKTsKKyAgICB9CisKICAg
ICBGbG9hdFJlY3QgYm91bmRpbmdCb3goKSBjb25zdDsKICAgICBJbnRSZWN0IGVuY2xvc2luZ0Jv
dW5kaW5nQm94KCkgY29uc3QKICAgICB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9JbnRQb2ludC5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvSW50UG9pbnQuaAppbmRleCBkZGM0MWI0Li4wYWY2ZTg1IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbnRQb2ludC5oCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL0ludFBvaW50LmgKQEAgLTExMSw2ICsxMTEsOCBAQCBwdWJsaWM6
CiAgICAgICAgICAgICBtX3kgPCBvdGhlci5tX3kgPyBtX3kgOiBvdGhlci5tX3kpOwogICAgIH0K
IAorICAgIGludCBkaXN0YW5jZVNxdWFyZWRUb1BvaW50KGNvbnN0IEludFBvaW50JikgY29uc3Q7
CisKICAgICB2b2lkIGNsYW1wTmVnYXRpdmVUb1plcm8oKQogICAgIHsKICAgICAgICAgKnRoaXMg
PSBleHBhbmRlZFRvKHplcm8oKSk7CkBAIC0yMjIsNiArMjI0LDExIEBAIGlubGluZSBJbnRTaXpl
IHRvU2l6ZShjb25zdCBJbnRQb2ludCYgYSkKICAgICByZXR1cm4gSW50U2l6ZShhLngoKSwgYS55
KCkpOwogfQogCitpbmxpbmUgaW50IEludFBvaW50OjpkaXN0YW5jZVNxdWFyZWRUb1BvaW50KGNv
bnN0IEludFBvaW50JiBwb2ludCkgY29uc3QKK3sKKyAgICByZXR1cm4gKCgqdGhpcykgLSBwb2lu
dCkuZGlhZ29uYWxMZW5ndGhTcXVhcmVkKCk7Cit9CisKICNpZiBQTEFURk9STShRVCkKIGlubGlu
ZSBRRGF0YVN0cmVhbSYgb3BlcmF0b3I8PChRRGF0YVN0cmVhbSYgc3RyZWFtLCBjb25zdCBJbnRQ
b2ludCYgcG9pbnQpCiB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9JbnRSZWN0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ludFJl
Y3QuY3BwCmluZGV4IDAzYzM1ZTguLmRmYTJmOTEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL0ludFJlY3QuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL0ludFJlY3QuY3BwCkBAIC0xMzIsNiArMTMyLDM1IEBAIHZvaWQgSW50UmVj
dDo6c2NhbGUoZmxvYXQgcykKICAgICBtX3NpemUuc2V0SGVpZ2h0KChpbnQpKGhlaWdodCgpICog
cykpOwogfQogCitzdGF0aWMgaW5saW5lIGludCBkaXN0YW5jZVRvSW50ZXJ2YWwoaW50IHBvcywg
aW50IHN0YXJ0LCBpbnQgZW5kKQoreworICAgIGlmIChwb3MgPCBzdGFydCkKKyAgICAgICAgcmV0
dXJuIHN0YXJ0IC0gcG9zOworICAgIGlmIChwb3MgPiBlbmQpCisgICAgICAgIHJldHVybiBlbmQg
LSBwb3M7CisgICAgcmV0dXJuIDA7Cit9CisKK0ludFNpemUgSW50UmVjdDo6ZGlmZmVyZW5jZVRv
UG9pbnQoY29uc3QgSW50UG9pbnQmIHBvaW50KSBjb25zdAoreworICAgIGludCB4ZGlzdGFuY2Ug
PSBkaXN0YW5jZVRvSW50ZXJ2YWwocG9pbnQueCgpLCB4KCksIG1heFgoKSk7CisgICAgaW50IHlk
aXN0YW5jZSA9IGRpc3RhbmNlVG9JbnRlcnZhbChwb2ludC55KCksIHkoKSwgbWF4WSgpKTsKKyAg
ICByZXR1cm4gSW50U2l6ZSh4ZGlzdGFuY2UsIHlkaXN0YW5jZSk7Cit9CisKK0ludFNpemUgSW50
UmVjdDo6ZGlmZmVyZW5jZUZyb21DZW50ZXJMaW5lVG9Qb2ludChjb25zdCBJbnRQb2ludCYgcG9p
bnQpIGNvbnN0Cit7CisgICAgLy8gVGhlIGNlbnRlci1saW5lIGlzIHRoZSBuYXR1cmFsIGNlbnRl
ciBvZiBhIHJlY3RhbmdsZS4gSXQgaGFzIGFuIGVxdWFsIGRpc3RhbmNlIHRvIGFsbCBzaWRlcyBv
ZiB0aGUgcmVjdGFuZ2xlLgorICAgIEludFBvaW50IGNlbnRlclBvaW50ID0gY2VudGVyKCk7Cisg
ICAgaW50IHhkaXN0YW5jZSA9IGNlbnRlclBvaW50LngoKSAtIHBvaW50LngoKTsKKyAgICBpbnQg
eWRpc3RhbmNlID0gY2VudGVyUG9pbnQueSgpIC0gcG9pbnQueSgpOworICAgIGlmICh3aWR0aCgp
ID4gaGVpZ2h0KCkpCisgICAgICAgIHhkaXN0YW5jZSA9IGRpc3RhbmNlVG9JbnRlcnZhbChwb2lu
dC54KCksIHgoKSArIChoZWlnaHQoKSAvIDIpLCBtYXhYKCkgLSAoaGVpZ2h0KCkgLyAyKSk7Cisg
ICAgZWxzZQorICAgICAgICB5ZGlzdGFuY2UgPSBkaXN0YW5jZVRvSW50ZXJ2YWwocG9pbnQueSgp
LCB5KCkgKyAod2lkdGgoKSAvIDIpLCBtYXhZKCkgLSAod2lkdGgoKSAvIDIpKTsKKyAgICByZXR1
cm4gSW50U2l6ZSh4ZGlzdGFuY2UsIHlkaXN0YW5jZSk7Cit9CisKIEludFJlY3QgdW5pb25SZWN0
KGNvbnN0IFZlY3RvcjxJbnRSZWN0PiYgcmVjdHMpCiB7CiAgICAgSW50UmVjdCByZXN1bHQ7CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbnRSZWN0LmggYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbnRSZWN0LmgKaW5kZXggNjAwYzIxZC4u
Y2E3ZmVhNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW50
UmVjdC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ludFJlY3QuaApA
QCAtMTg2LDYgKzE4NiwxMSBAQCBwdWJsaWM6CiAgICAgdm9pZCBpbmZsYXRlKGludCBkKSB7IGlu
ZmxhdGVYKGQpOyBpbmZsYXRlWShkKTsgfQogICAgIHZvaWQgc2NhbGUoZmxvYXQgcyk7CiAKKyAg
ICBJbnRTaXplIGRpZmZlcmVuY2VUb1BvaW50KGNvbnN0IEludFBvaW50JikgY29uc3Q7CisgICAg
SW50U2l6ZSBkaWZmZXJlbmNlRnJvbUNlbnRlckxpbmVUb1BvaW50KGNvbnN0IEludFBvaW50Jikg
Y29uc3Q7CisgICAgaW50IGRpc3RhbmNlU3F1YXJlZFRvUG9pbnQoY29uc3QgSW50UG9pbnQmIHAp
IGNvbnN0IHsgcmV0dXJuIGRpZmZlcmVuY2VUb1BvaW50KHApLmRpYWdvbmFsTGVuZ3RoU3F1YXJl
ZCgpOyB9CisgICAgaW50IGRpc3RhbmNlU3F1YXJlZEZyb21DZW50ZXJMaW5lVG9Qb2ludChjb25z
dCBJbnRQb2ludCYgcCkgY29uc3QgeyByZXR1cm4gZGlmZmVyZW5jZUZyb21DZW50ZXJMaW5lVG9Q
b2ludChwKS5kaWFnb25hbExlbmd0aFNxdWFyZWQoKTsgfQorCiAgICAgSW50UmVjdCB0cmFuc3Bv
c2VkUmVjdCgpIGNvbnN0IHsgcmV0dXJuIEludFJlY3QobV9sb2NhdGlvbi50cmFuc3Bvc2VkUG9p
bnQoKSwgbV9zaXplLnRyYW5zcG9zZWRTaXplKCkpOyB9CiAKICNpZiBQTEFURk9STShXWCkKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ludFNpemUuaCBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ludFNpemUuaAppbmRleCAxNjM5ODQ3Li5m
MTFmODE1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbnRT
aXplLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW50U2l6ZS5oCkBA
IC0xMDQsNiArMTA0LDExIEBAIHB1YmxpYzoKICAgICAgICAgKnRoaXMgPSBleHBhbmRlZFRvKElu
dFNpemUoKSk7CiAgICAgfQogCisgICAgaW50IGRpYWdvbmFsTGVuZ3RoU3F1YXJlZCgpIGNvbnN0
CisgICAgeworICAgICAgICByZXR1cm4gbV93aWR0aCAqIG1fd2lkdGggKyBtX2hlaWdodCAqIG1f
aGVpZ2h0OworICAgIH0KKwogICAgIEludFNpemUgdHJhbnNwb3NlZFNpemUoKSBjb25zdAogICAg
IHsKICAgICAgICAgcmV0dXJuIEludFNpemUobV9oZWlnaHQsIG1fd2lkdGgpOwpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvdGVzdGluZy9JbnRlcm5hbHMuY3BwIGIvU291cmNlL1dlYkNvcmUv
dGVzdGluZy9JbnRlcm5hbHMuY3BwCmluZGV4IGFhZmU5YWQuLjBlODlkYjMgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3Rlc3RpbmcvSW50ZXJuYWxzLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS90ZXN0aW5nL0ludGVybmFscy5jcHAKQEAgLTY0LDYgKzY0LDExIEBACiAjaW5jbHVkZSAiQ29s
b3JDaG9vc2VyLmgiCiAjZW5kaWYKIAorI2lmIEVOQUJMRShUT1VDSF9BREpVU1RNRU5UKQorI2lu
Y2x1ZGUgIkV2ZW50SGFuZGxlci5oIgorI2luY2x1ZGUgIldlYktpdFBvaW50LmgiCisjZW5kaWYK
KwogbmFtZXNwYWNlIFdlYkNvcmUgewogCiBzdGF0aWMgYm9vbCBtYXJrZXJUeXBlc0Zyb20oY29u
c3QgU3RyaW5nJiBtYXJrZXJUeXBlLCBEb2N1bWVudE1hcmtlcjo6TWFya2VyVHlwZXMmIHJlc3Vs
dCkKQEAgLTU1OSw2ICs1NjQsNDYgQEAgU3RyaW5nIEludGVybmFsczo6cmFuZ2VBc1RleHQoY29u
c3QgUmFuZ2UqIHJhbmdlLCBFeGNlcHRpb25Db2RlJiBlYykKICAgICByZXR1cm4gcmFuZ2UtPnRl
eHQoKTsKIH0KIAorCisjaWYgRU5BQkxFKFRPVUNIX0FESlVTVE1FTlQpCitQYXNzUmVmUHRyPFdl
YktpdFBvaW50PiBJbnRlcm5hbHM6OnRvdWNoUG9zaXRpb25BZGp1c3RlZFRvQmVzdENsaWNrYWJs
ZU5vZGUobG9uZyB4LCBsb25nIHksIGxvbmcgd2lkdGgsIGxvbmcgaGVpZ2h0LCBEb2N1bWVudCog
ZG9jdW1lbnQsIEV4Y2VwdGlvbkNvZGUmIGVjKQoreworICAgIGlmICghZG9jdW1lbnQgfHwgIWRv
Y3VtZW50LT5mcmFtZSgpKSB7CisgICAgICAgIGVjID0gSU5WQUxJRF9BQ0NFU1NfRVJSOworICAg
ICAgICByZXR1cm4gMDsKKyAgICB9CisKKyAgICBJbnRTaXplIHJhZGl1cyh3aWR0aCAvIDIsIGhl
aWdodCAvIDIpOworICAgIEludFBvaW50IHBvaW50KHggKyByYWRpdXMud2lkdGgoKSwgeSArIHJh
ZGl1cy5oZWlnaHQoKSk7CisKKyAgICBOb2RlKiB0YXJnZXROb2RlOworICAgIEludFBvaW50IGFk
anVzdGVkUG9pbnQ7CisKKyAgICBkb2N1bWVudC0+ZnJhbWUoKS0+ZXZlbnRIYW5kbGVyKCktPmJl
c3RDbGlja2FibGVOb2RlRm9yVG91Y2hQb2ludChwb2ludCwgcmFkaXVzLCBhZGp1c3RlZFBvaW50
LCB0YXJnZXROb2RlKTsKKworICAgIHJldHVybiBXZWJLaXRQb2ludDo6Y3JlYXRlKGFkanVzdGVk
UG9pbnQueCgpLCBhZGp1c3RlZFBvaW50LnkoKSk7Cit9CisKK1Bhc3NSZWZQdHI8Tm9kZT4gSW50
ZXJuYWxzOjp0b3VjaE5vZGVBZGp1c3RlZFRvQmVzdENsaWNrYWJsZU5vZGUobG9uZyB4LCBsb25n
IHksIGxvbmcgd2lkdGgsIGxvbmcgaGVpZ2h0LCBEb2N1bWVudCogZG9jdW1lbnQsIEV4Y2VwdGlv
bkNvZGUmIGVjKQoreworICAgIGlmICghZG9jdW1lbnQgfHwgIWRvY3VtZW50LT5mcmFtZSgpKSB7
CisgICAgICAgIGVjID0gSU5WQUxJRF9BQ0NFU1NfRVJSOworICAgICAgICByZXR1cm4gMDsKKyAg
ICB9CisKKyAgICBJbnRTaXplIHJhZGl1cyh3aWR0aCAvIDIsIGhlaWdodCAvIDIpOworICAgIElu
dFBvaW50IHBvaW50KHggKyByYWRpdXMud2lkdGgoKSwgeSArIHJhZGl1cy5oZWlnaHQoKSk7CisK
KyAgICBOb2RlKiB0YXJnZXROb2RlOworICAgIEludFBvaW50IGFkanVzdGVkUG9pbnQ7CisKKyAg
ICBkb2N1bWVudC0+ZnJhbWUoKS0+ZXZlbnRIYW5kbGVyKCktPmJlc3RDbGlja2FibGVOb2RlRm9y
VG91Y2hQb2ludChwb2ludCwgcmFkaXVzLCBhZGp1c3RlZFBvaW50LCB0YXJnZXROb2RlKTsKKwor
ICAgIHJldHVybiBhZG9wdFJlZih0YXJnZXROb2RlKTsKK30KKyNlbmRpZgorCisKIGludCBJbnRl
cm5hbHM6Omxhc3RTcGVsbENoZWNrUmVxdWVzdFNlcXVlbmNlKERvY3VtZW50KiBkb2N1bWVudCwg
RXhjZXB0aW9uQ29kZSYgZWMpCiB7CiAgICAgU3BlbGxDaGVja2VyKiBjaGVja2VyID0gc3BlbGxj
aGVja2VyKGRvY3VtZW50KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Rlc3RpbmcvSW50
ZXJuYWxzLmggYi9Tb3VyY2UvV2ViQ29yZS90ZXN0aW5nL0ludGVybmFscy5oCmluZGV4IGFkYWNh
MzQuLjFkNjg5MzIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3Rlc3RpbmcvSW50ZXJuYWxz
LmgKKysrIGIvU291cmNlL1dlYkNvcmUvdGVzdGluZy9JbnRlcm5hbHMuaApAQCAtNDIsNiArNDIs
NyBAQCBjbGFzcyBJbnRlcm5hbFNldHRpbmdzOwogY2xhc3MgTm9kZTsKIGNsYXNzIFJhbmdlOwog
Y2xhc3MgU2hhZG93Um9vdDsKK2NsYXNzIFdlYktpdFBvaW50OwogCiB0eXBlZGVmIGludCBFeGNl
cHRpb25Db2RlOwogCkBAIC0xMDgsNiArMTA5LDExIEBAIHB1YmxpYzoKICAgICB1bnNpZ25lZCBs
ZW5ndGhGcm9tUmFuZ2UoRWxlbWVudCogc2NvcGUsIGNvbnN0IFJhbmdlKiwgRXhjZXB0aW9uQ29k
ZSYpOwogICAgIFN0cmluZyByYW5nZUFzVGV4dChjb25zdCBSYW5nZSosIEV4Y2VwdGlvbkNvZGUm
KTsKIAorI2lmIEVOQUJMRShUT1VDSF9BREpVU1RNRU5UKQorICAgIFBhc3NSZWZQdHI8V2ViS2l0
UG9pbnQ+IHRvdWNoUG9zaXRpb25BZGp1c3RlZFRvQmVzdENsaWNrYWJsZU5vZGUobG9uZyB4LCBs
b25nIHksIGxvbmcgd2lkdGgsIGxvbmcgaGVpZ2h0LCBEb2N1bWVudCosIEV4Y2VwdGlvbkNvZGUm
KTsKKyAgICBQYXNzUmVmUHRyPE5vZGU+IHRvdWNoTm9kZUFkanVzdGVkVG9CZXN0Q2xpY2thYmxl
Tm9kZShsb25nIHgsIGxvbmcgeSwgbG9uZyB3aWR0aCwgbG9uZyBoZWlnaHQsIERvY3VtZW50Kiwg
RXhjZXB0aW9uQ29kZSYpOworI2VuZGlmCisKICAgICBpbnQgbGFzdFNwZWxsQ2hlY2tSZXF1ZXN0
U2VxdWVuY2UoRG9jdW1lbnQqLCBFeGNlcHRpb25Db2RlJik7CiAgICAgaW50IGxhc3RTcGVsbENo
ZWNrUHJvY2Vzc2VkU2VxdWVuY2UoRG9jdW1lbnQqLCBFeGNlcHRpb25Db2RlJik7CiAgICAgCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS90ZXN0aW5nL0ludGVybmFscy5pZGwgYi9Tb3VyY2Uv
V2ViQ29yZS90ZXN0aW5nL0ludGVybmFscy5pZGwKaW5kZXggMzk0Mzc2ZS4uOTU3NzQ1NSAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvdGVzdGluZy9JbnRlcm5hbHMuaWRsCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3Rlc3RpbmcvSW50ZXJuYWxzLmlkbApAQCAtODQsNiArODQsMTEgQEAgbW9kdWxl
IHdpbmRvdyB7CiAgICAgICAgIHVuc2lnbmVkIGxvbmcgbGVuZ3RoRnJvbVJhbmdlKGluIEVsZW1l
bnQgc2NvcGUsIGluIFJhbmdlIHJhbmdlKSByYWlzZXMgKERPTUV4Y2VwdGlvbik7CiAgICAgICAg
IERPTVN0cmluZyByYW5nZUFzVGV4dChpbiBSYW5nZSByYW5nZSkgcmFpc2VzIChET01FeGNlcHRp
b24pOwogCisjaWYgZGVmaW5lZChFTkFCTEVfVE9VQ0hfQURKVVNUTUVOVCkgJiYgRU5BQkxFX1RP
VUNIX0FESlVTVE1FTlQKKyAgICAgICAgV2ViS2l0UG9pbnQgdG91Y2hQb3NpdGlvbkFkanVzdGVk
VG9CZXN0Q2xpY2thYmxlTm9kZShpbiBsb25nIHgsIGluIGxvbmcgeSwgaW4gbG9uZyB3aWR0aCwg
aW4gbG9uZyBoZWlnaHQsIGluIERvY3VtZW50IGRvY3VtZW50KSByYWlzZXMgKERPTUV4Y2VwdGlv
bik7CisgICAgICAgIE5vZGUgdG91Y2hOb2RlQWRqdXN0ZWRUb0Jlc3RDbGlja2FibGVOb2RlKGlu
IGxvbmcgeCwgaW4gbG9uZyB5LCBpbiBsb25nIHdpZHRoLCBpbiBsb25nIGhlaWdodCwgaW4gRG9j
dW1lbnQgZG9jdW1lbnQpIHJhaXNlcyAoRE9NRXhjZXB0aW9uKTsKKyNlbmRpZgorCiAgICAgICAg
IGxvbmcgbGFzdFNwZWxsQ2hlY2tSZXF1ZXN0U2VxdWVuY2UoaW4gRG9jdW1lbnQgZG9jdW1lbnQp
IHJhaXNlcyAoRE9NRXhjZXB0aW9uKTsKICAgICAgICAgbG9uZyBsYXN0U3BlbGxDaGVja1Byb2Nl
c3NlZFNlcXVlbmNlKGluIERvY3VtZW50IGRvY3VtZW50KSByYWlzZXMgKERPTUV4Y2VwdGlvbik7
CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQy
L0NoYW5nZUxvZwppbmRleCBjZGRmMzdmLi5lNjFhMjE5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
S2l0Mi9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCkBAIC0xLDMgKzEs
MjMgQEAKKzIwMTItMDMtMDkgIEFsbGFuIFNhbmRmZWxkIEplbnNlbiAgPGFsbGFuLmplbnNlbkBu
b2tpYS5jb20+CisKKyAgICAgICAgU2VsZWN0IGJlc3QgdGFyZ2V0IGZvciB0YXAgZ2VzdHVyZS4K
KyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTc4ODAxCisK
KyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgU2VuZCByYWRp
dXMgdG8gaGFuZGxlUG90ZW50aWFsU2luZ2xlVGFwRXZlbnQgc28gaXQgY2FuIGRvIHRoZSBzYW1l
IGhpdAorICAgICAgICBkZXRlY3Rpb24gdGhlIHRhcCBnZXN0dXJlIGxhdGVyIGRvZXMuCisKKyAg
ICAgICAgKiBVSVByb2Nlc3MvV2ViUGFnZVByb3h5LmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2Vi
UGFnZVByb3h5OjpoYW5kbGVQb3RlbnRpYWxBY3RpdmF0aW9uKToKKyAgICAgICAgKiBVSVByb2Nl
c3MvV2ViUGFnZVByb3h5Lmg6CisgICAgICAgICogVUlQcm9jZXNzL3F0L1F0V2ViUGFnZUV2ZW50
SGFuZGxlci5jcHA6CisgICAgICAgIChRdFdlYlBhZ2VFdmVudEhhbmRsZXI6OmhhbmRsZVBvdGVu
dGlhbFNpbmdsZVRhcEV2ZW50KToKKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFn
ZS5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2U6OmhpZ2hsaWdodFBvdGVudGlhbEFjdGl2
YXRpb24pOgorICAgICAgICAqIFdlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmg6CisgICAgICAg
ICogV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UubWVzc2FnZXMuaW46CisKIDIwMTItMDMtMDkg
IFNoZXJpZmYgQm90ICA8d2Via2l0LnJldmlldy5ib3RAZ21haWwuY29tPgogCiAgICAgICAgIFVu
cmV2aWV3ZWQsIHJvbGxpbmcgb3V0IHIxMTAxOTEsIHIxMTAyMDIsIGFuZCByMTEwMjc5LgpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5jcHAgYi9Tb3Vy
Y2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViUGFnZVByb3h5LmNwcAppbmRleCA0MDk3MzQ0Li5jNTIz
YjVkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViUGFnZVByb3h5LmNw
cAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViUGFnZVByb3h5LmNwcApAQCAtOTk5
LDkgKzk5OSw5IEBAIHZvaWQgV2ViUGFnZVByb3h5OjpoYW5kbGVHZXN0dXJlRXZlbnQoY29uc3Qg
V2ViR2VzdHVyZUV2ZW50JiBldmVudCkKIAogI2lmIEVOQUJMRShUT1VDSF9FVkVOVFMpCiAjaWYg
UExBVEZPUk0oUVQpCi12b2lkIFdlYlBhZ2VQcm94eTo6aGFuZGxlUG90ZW50aWFsQWN0aXZhdGlv
bihjb25zdCBJbnRQb2ludCYgbGF5b3V0UG9pbnQpCit2b2lkIFdlYlBhZ2VQcm94eTo6aGFuZGxl
UG90ZW50aWFsQWN0aXZhdGlvbihjb25zdCBJbnRQb2ludCYgdG91Y2hQb2ludCwgY29uc3QgSW50
U2l6ZSYgdG91Y2hBcmVhKQogewotICAgIHByb2Nlc3MoKS0+c2VuZChNZXNzYWdlczo6V2ViUGFn
ZTo6SGlnaGxpZ2h0UG90ZW50aWFsQWN0aXZhdGlvbihsYXlvdXRQb2ludCksIG1fcGFnZUlEKTsK
KyAgICBwcm9jZXNzKCktPnNlbmQoTWVzc2FnZXM6OldlYlBhZ2U6OkhpZ2hsaWdodFBvdGVudGlh
bEFjdGl2YXRpb24odG91Y2hQb2ludCwgdG91Y2hBcmVhKSwgbV9wYWdlSUQpOwogfQogI2VuZGlm
CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkuaCBi
L1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkuaAppbmRleCA1MDQ5MjI4Li5k
ZmM2MWM0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViUGFnZVByb3h5
LmgKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5oCkBAIC0zODYs
NyArMzg2LDcgQEAgcHVibGljOgogI2lmIEVOQUJMRShUT1VDSF9FVkVOVFMpCiAgICAgdm9pZCBo
YW5kbGVUb3VjaEV2ZW50KGNvbnN0IE5hdGl2ZVdlYlRvdWNoRXZlbnQmKTsKICNpZiBQTEFURk9S
TShRVCkKLSAgICB2b2lkIGhhbmRsZVBvdGVudGlhbEFjdGl2YXRpb24oY29uc3QgV2ViQ29yZTo6
SW50UG9pbnQmKTsKKyAgICB2b2lkIGhhbmRsZVBvdGVudGlhbEFjdGl2YXRpb24oY29uc3QgV2Vi
Q29yZTo6SW50UG9pbnQmIHRvdWNoUG9pbnQsIGNvbnN0IFdlYkNvcmU6OkludFNpemUmIHRvdWNo
QXJlYSk7CiAjZW5kaWYKICNlbmRpZgogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVBy
b2Nlc3MvcXQvUXRXZWJQYWdlRXZlbnRIYW5kbGVyLmNwcCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJv
Y2Vzcy9xdC9RdFdlYlBhZ2VFdmVudEhhbmRsZXIuY3BwCmluZGV4IDk1ZWQ0MzEuLjJiYmJiZjIg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9xdC9RdFdlYlBhZ2VFdmVudEhh
bmRsZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9xdC9RdFdlYlBhZ2VFdmVu
dEhhbmRsZXIuY3BwCkBAIC0yMzEsNyArMjMxLDcgQEAgdm9pZCBRdFdlYlBhZ2VFdmVudEhhbmRs
ZXI6OmhhbmRsZURyb3BFdmVudChRRHJvcEV2ZW50KiBldikKIHZvaWQgUXRXZWJQYWdlRXZlbnRI
YW5kbGVyOjpoYW5kbGVQb3RlbnRpYWxTaW5nbGVUYXBFdmVudChjb25zdCBRVG91Y2hFdmVudDo6
VG91Y2hQb2ludCYgcG9pbnQpCiB7CiAgICAgUVRyYW5zZm9ybSBmcm9tSXRlbVRyYW5zZm9ybSA9
IG1fd2ViUGFnZS0+dHJhbnNmb3JtRnJvbUl0ZW0oKTsKLSAgICBtX3dlYlBhZ2VQcm94eS0+aGFu
ZGxlUG90ZW50aWFsQWN0aXZhdGlvbihmcm9tSXRlbVRyYW5zZm9ybS5tYXAocG9pbnQucG9zKCkp
LnRvUG9pbnQoKSk7CisgICAgbV93ZWJQYWdlUHJveHktPmhhbmRsZVBvdGVudGlhbEFjdGl2YXRp
b24oZnJvbUl0ZW1UcmFuc2Zvcm0ubWFwKHBvaW50LnBvcygpKS50b1BvaW50KCksIEludFNpemUo
cG9pbnQucmVjdCgpLnNpemUoKS50b1NpemUoKSkpOwogfQogCiB2b2lkIFF0V2ViUGFnZUV2ZW50
SGFuZGxlcjo6aGFuZGxlU2luZ2xlVGFwRXZlbnQoY29uc3QgUVRvdWNoRXZlbnQ6OlRvdWNoUG9p
bnQmIHBvaW50KQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdl
L1dlYlBhZ2UuY3BwIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2Uu
Y3BwCmluZGV4IDlmOGI0MTcuLjQzYTVlNzggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1dl
YlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9j
ZXNzL1dlYlBhZ2UvV2ViUGFnZS5jcHAKQEAgLTE0NDMsMTYgKzE0NDMsMjAgQEAgdm9pZCBXZWJQ
YWdlOjpyZXN0b3JlU2Vzc2lvbkFuZE5hdmlnYXRlVG9DdXJyZW50SXRlbShjb25zdCBTZXNzaW9u
U3RhdGUmIHNlc3Npb24KIAogI2lmIEVOQUJMRShUT1VDSF9FVkVOVFMpCiAjaWYgUExBVEZPUk0o
UVQpCi12b2lkIFdlYlBhZ2U6OmhpZ2hsaWdodFBvdGVudGlhbEFjdGl2YXRpb24oY29uc3QgSW50
UG9pbnQmIHBvaW50KQordm9pZCBXZWJQYWdlOjpoaWdobGlnaHRQb3RlbnRpYWxBY3RpdmF0aW9u
KGNvbnN0IEludFBvaW50JiBwb2ludCwgY29uc3QgSW50U2l6ZSYgYXJlYSkKIHsKICAgICBOb2Rl
KiBhY3RpdmF0aW9uTm9kZSA9IDA7CiAgICAgRnJhbWUqIG1haW5mcmFtZSA9IG1fcGFnZS0+bWFp
bkZyYW1lKCk7CisgICAgSW50UG9pbnQgYWRqdXN0ZWRQb2ludDsKIAogICAgIGlmIChwb2ludCAh
PSBJbnRQb2ludDo6emVybygpKSB7CisjaWYgRU5BQkxFKFRPVUNIX0FESlVTVE1FTlQpCisgICAg
ICAgIG1haW5mcmFtZS0+ZXZlbnRIYW5kbGVyKCktPmJlc3RDbGlja2FibGVOb2RlRm9yVG91Y2hQ
b2ludChwb2ludCwgSW50U2l6ZShhcmVhLndpZHRoKCkgLyAyLCBhcmVhLmhlaWdodCgpIC8gMiks
IGFkanVzdGVkUG9pbnQsIGFjdGl2YXRpb25Ob2RlKTsKKyNlbHNlCiAgICAgICAgIEhpdFRlc3RS
ZXN1bHQgcmVzdWx0ID0gbWFpbmZyYW1lLT5ldmVudEhhbmRsZXIoKS0+aGl0VGVzdFJlc3VsdEF0
UG9pbnQobWFpbmZyYW1lLT52aWV3KCktPndpbmRvd1RvQ29udGVudHMocG9pbnQpLCAvKmFsbG93
U2hhZG93Q29udGVudCovIGZhbHNlLCAvKmlnbm9yZUNsaXBwaW5nKi8gdHJ1ZSk7CiAgICAgICAg
IGFjdGl2YXRpb25Ob2RlID0gcmVzdWx0LmlubmVyTm9kZSgpOwotCi0gICAgICAgIGlmICghYWN0
aXZhdGlvbk5vZGUtPmlzRm9jdXNhYmxlKCkpCisjZW5kaWYKKyAgICAgICAgaWYgKGFjdGl2YXRp
b25Ob2RlICYmICFhY3RpdmF0aW9uTm9kZS0+aXNGb2N1c2FibGUoKSkKICAgICAgICAgICAgIGFj
dGl2YXRpb25Ob2RlID0gYWN0aXZhdGlvbk5vZGUtPmVuY2xvc2luZ0xpbmtFdmVudFBhcmVudE9y
U2VsZigpOwogICAgIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9X
ZWJQYWdlL1dlYlBhZ2UuaCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQ
YWdlLmgKaW5kZXggYmM4NGUzNS4uZDUyNTZkNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIv
V2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UuaAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9j
ZXNzL1dlYlBhZ2UvV2ViUGFnZS5oCkBAIC01NjMsNyArNTYzLDcgQEAgcHJpdmF0ZToKICAgICB2
b2lkIHRvdWNoRXZlbnQoY29uc3QgV2ViVG91Y2hFdmVudCYpOwogICAgIHZvaWQgdG91Y2hFdmVu
dFN5bmNGb3JUZXN0aW5nKGNvbnN0IFdlYlRvdWNoRXZlbnQmLCBib29sJiBoYW5kbGVkKTsKICNp
ZiBQTEFURk9STShRVCkKLSAgICB2b2lkIGhpZ2hsaWdodFBvdGVudGlhbEFjdGl2YXRpb24oY29u
c3QgV2ViQ29yZTo6SW50UG9pbnQmKTsKKyAgICB2b2lkIGhpZ2hsaWdodFBvdGVudGlhbEFjdGl2
YXRpb24oY29uc3QgV2ViQ29yZTo6SW50UG9pbnQmIHBvaW50LCBjb25zdCBXZWJDb3JlOjpJbnRT
aXplJiBhcmVhKTsKICNlbmRpZgogI2VuZGlmCiAgICAgdm9pZCBjb250ZXh0TWVudUhpZGRlbigp
IHsgbV9pc1Nob3dpbmdDb250ZXh0TWVudSA9IGZhbHNlOyB9CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5tZXNzYWdlcy5pbiBiL1NvdXJjZS9X
ZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLm1lc3NhZ2VzLmluCmluZGV4IDJjOTQz
NjAuLmIxZmU1YmEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFn
ZS9XZWJQYWdlLm1lc3NhZ2VzLmluCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2Vi
UGFnZS9XZWJQYWdlLm1lc3NhZ2VzLmluCkBAIC00MSw3ICs0MSw3IEBAIG1lc3NhZ2VzIC0+IFdl
YlBhZ2UgewogICAgIFRvdWNoRXZlbnQoV2ViS2l0OjpXZWJUb3VjaEV2ZW50IGV2ZW50KQogICAg
IFRvdWNoRXZlbnRTeW5jRm9yVGVzdGluZyhXZWJLaXQ6OldlYlRvdWNoRXZlbnQgZXZlbnQpIC0+
IChib29sIGhhbmRsZWQpCiAjaWYgUExBVEZPUk0oUVQpCi0gICAgSGlnaGxpZ2h0UG90ZW50aWFs
QWN0aXZhdGlvbihXZWJDb3JlOjpJbnRQb2ludCBwb2ludCkKKyAgICBIaWdobGlnaHRQb3RlbnRp
YWxBY3RpdmF0aW9uKFdlYkNvcmU6OkludFBvaW50IHBvaW50LCBXZWJDb3JlOjpJbnRTaXplIGFy
ZWEpCiAjZW5kaWYKICNlbmRpZgogCmRpZmYgLS1naXQgYS9Ub29scy9DaGFuZ2VMb2cgYi9Ub29s
cy9DaGFuZ2VMb2cKaW5kZXggMjczYjQ2Zi4uMGUzZWJjNSAxMDA2NDQKLS0tIGEvVG9vbHMvQ2hh
bmdlTG9nCisrKyBiL1Rvb2xzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE0IEBACisyMDEyLTAzLTA5
ICBBbGxhbiBTYW5kZmVsZCBKZW5zZW4gIDxhbGxhbi5qZW5zZW5Abm9raWEuY29tPgorCisgICAg
ICAgIFNlbGVjdCBiZXN0IHRhcmdldCBmb3IgdGFwIGdlc3R1cmUuCisgICAgICAgIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD03ODgwMQorCisgICAgICAgIFJldmlld2Vk
IGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEFkZCBUT1VDSF9BREpVU1RNRU5UIHRvIGVu
YWJsZWQgZmVhdHVyZXMuCisKKyAgICAgICAgKiBxbWFrZS9ta3NwZWNzL2ZlYXR1cmVzL2ZlYXR1
cmVzLnByZjoKKwogMjAxMi0wMy0wOSAgTmF0IER1Y2EgIDxuZHVjYUBjaHJvbWl1bS5vcmc+CiAK
ICAgICAgICAgTWFrZSBjaGVjay13ZWJraXQtc3R5bGUgY29tcGxhaW4gYWJvdXQgIm5vIG5ldyB0
ZXN0cyIgbGluZXMgaW4gY2hhbmdlbG9ncwpkaWZmIC0tZ2l0IGEvVG9vbHMvcW1ha2UvbWtzcGVj
cy9mZWF0dXJlcy9mZWF0dXJlcy5wcmYgYi9Ub29scy9xbWFrZS9ta3NwZWNzL2ZlYXR1cmVzL2Zl
YXR1cmVzLnByZgppbmRleCA4NWU5YTRhLi5lZmEyY2U2IDEwMDY0NAotLS0gYS9Ub29scy9xbWFr
ZS9ta3NwZWNzL2ZlYXR1cmVzL2ZlYXR1cmVzLnByZgorKysgYi9Ub29scy9xbWFrZS9ta3NwZWNz
L2ZlYXR1cmVzL2ZlYXR1cmVzLnByZgpAQCAtODgsNiArODgsNyBAQCBoYXZlUXQoNSkgewogIWNv
bnRhaW5zKERFRklORVMsIEVOQUJMRV9WSURFT19UUkFDSz0uKTogREVGSU5FUyArPSBFTkFCTEVf
VklERU9fVFJBQ0s9MAogIWNvbnRhaW5zKERFRklORVMsIEVOQUJMRV9UT1VDSF9JQ09OX0xPQURJ
Tkc9Lik6IERFRklORVMgKz0gRU5BQkxFX1RPVUNIX0lDT05fTE9BRElORz0wCiAhY29udGFpbnMo
REVGSU5FUywgRU5BQkxFX0FOSU1BVElPTl9BUEk9Lik6IERFRklORVMgKz0gRU5BQkxFX0FOSU1B
VElPTl9BUEk9MAorIWNvbnRhaW5zKERFRklORVMsIEVOQUJMRV9UT1VDSF9BREpVU1RNRU5UPS4p
OiBERUZJTkVTICs9IEVOQUJMRV9UT1VDSF9BREpVU1RNRU5UPTEKIAogIyBQb2xpY3kgZGVjaXNp
b25zOiBmb3IgdXNpbmcgYSBwYXJ0aWN1bGFyIHRoaXJkLXBhcnR5IGxpYnJhcnkgb3Igb3B0aW9u
YWwgT1Mgc2VydmljZQogIWNvbnRhaW5zKERFRklORVMsIFdURl9VU0VfUVRfSU1BR0VfREVDT0RF
Uj0uKTogREVGSU5FUyArPSBXVEZfVVNFX1FUX0lNQUdFX0RFQ09ERVI9MQpAQCAtMjY0LDYgKzI2
NSw3IEBAIGNvbnRhaW5zKERFRklORVMsIEVOQUJMRV9WSURFT19UUkFDSz0xKTogRkVBVFVSRV9E
RUZJTkVTX0pBVkFTQ1JJUFQgKz0gRU5BQkxFX1ZJCiBjb250YWlucyhERUZJTkVTLCBFTkFCTEVf
REFUQV9UUkFOU0ZFUl9JVEVNUz0xKTogRkVBVFVSRV9ERUZJTkVTX0pBVkFTQ1JJUFQgKz0gRU5B
QkxFX0RBVEFfVFJBTlNGRVJfSVRFTVM9MQogY29udGFpbnMoREVGSU5FUywgRU5BQkxFX0ZVTExT
Q1JFRU5fQVBJPTEpOiBGRUFUVVJFX0RFRklORVNfSkFWQVNDUklQVCArPSBFTkFCTEVfRlVMTFND
UkVFTl9BUEk9MQogY29udGFpbnMoREVGSU5FUywgRU5BQkxFX1JFUVVFU1RfQU5JTUFUSU9OX0ZS
QU1FPTEpOiBGRUFUVVJFX0RFRklORVNfSkFWQVNDUklQVCArPSBFTkFCTEVfUkVRVUVTVF9BTklN
QVRJT05fRlJBTUU9MQorY29udGFpbnMoREVGSU5FUywgRU5BQkxFX1RPVUNIX0FESlVTVE1FTlQ9
MSk6IEZFQVRVUkVfREVGSU5FU19KQVZBU0NSSVBUICs9IEVOQUJMRV9UT1VDSF9BREpVU1RNRU5U
PTEKIAogIyBVc2VkIHRvIGNvbXB1dGUgZGVmYXVsdHMgZm9yIHRoZSBidWlsZC13ZWJraXQgc2Ny
aXB0CiAjIERvbid0IHBsYWNlIGFueXRoaW5nIGFmdGVyIHRoaXMhCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>131034</attachid>
            <date>2012-03-09 05:46:44 -0800</date>
            <delta_ts>2012-03-12 09:22:01 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-78801-20120309144642.patch</filename>
            <type>text/plain</type>
            <size>63323</size>
            <attacher name="Allan Sandfeld Jensen">allan.jensen</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTEwMjg0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZDFkZDkyYjkwNGY1MDUz
ZjNiNmZlYjc0YTg0MTRjYjkyYWM3YWNmYy4uMzRmNzk0NGQwZTI4ZDk3NWFhMzQzMmZhZTc2NGJj
ZTA2OWE0OGJiMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDYxIEBACisyMDEyLTAzLTA5ICBBbGxh
biBTYW5kZmVsZCBKZW5zZW4gIDxhbGxhbi5qZW5zZW5Abm9raWEuY29tPgorCisgICAgICAgIFNl
bGVjdCBiZXN0IHRhcmdldCBmb3IgdGFwIGdlc3R1cmUuCisgICAgICAgIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD03ODgwMQorCisgICAgICAgIFJldmlld2VkIGJ5IE5P
Qk9EWSAoT09QUyEpLgorCisgICAgICAgIFRoZSBuZXcgQVBJIGlzIGF2YWlsYWJsZSB0aHJvdWdo
IEV2ZW50SGFuZGxlcjo6bm9kZUZvclRhcEdlc3R1cmVBdFRvdWNoUG9pbnQsIGJ1dAorICAgICAg
ICBpbXBsZW1lbnRhdGlvbiBkZXRhaWxzIGhhdmUgYmVlbiBwbGFjZWQgaW4gcGxhdGZvcm0vSGl0
VGVzdFJlc3VsdE1ldHJpY3MuCisKKyAgICAgICAgVGhlIGRlZmF1bHQgaGl0IGRldGVjdGlvbiBp
cyBwZXJmb3JtZWQgYnkgbWVhc3VyaW5nIHRoZSBkaXN0YW5jZSB0byB0aGUgY2VudGVyCisgICAg
ICAgIGxpbmVzIG9mIHRoZSBhYnNvbHV0ZSByZWN0cyBvZiB0aGUgaGl0IG5vZGVzLiBBYnNvbHV0
ZSByZWN0cyBhcmUgdXNlZCBpbnN0ZWFkCisgICAgICAgIG9mIGJvdW5kaW5nIHJlY3RzIHRvIG1h
a2UgaGl0LWRldGVjdGluZyBhZ2FpbnN0IGxpbmtzIG92ZXIgbGluZSBicmVha3MuIERpc3RhbmNl
CisgICAgICAgIHRvIGNlbnRlciBsaW5lIGlzIHVzZWQgdG8gbWFrZSBpdCBlYXNpZXIgdG8gaGl0
IHNtYWxsIGxpbmtzIG5leHQgdG8gbGFyZ2UgbGlua3MuCisgICAgICAgIEZvciBsaW5lLXJlY3Rz
IHRoZSBkaXN0YW5jZSB0byB0aGUgY2VudGVyLWxpbmUgaXMgYSBiZXR0ZXIgZXhwcmVzc2lvbiBv
ZiB0aGUgZGlzdGFuY2UKKyAgICAgICAgdG8gYSByZWN0YW5nbGVzIGNlbnRlciB0aGFuIHRoZSBk
aXN0YW5jZSB0byB0aGUgY2VudGVyLXBvaW50LgorCisgICAgICAgIFRlc3RzOiB0b3VjaGFkanVz
dG1lbnQvZXZlbnQtdHJpZ2dlcmVkLXdpZGdldHMuaHRtbAorICAgICAgICAgICAgICAgdG91Y2hh
ZGp1c3RtZW50L2h0bWwtbGFiZWwuaHRtbAorICAgICAgICAgICAgICAgdG91Y2hhZGp1c3RtZW50
L25lc3RlZC10b3VjaC5odG1sCisgICAgICAgICAgICAgICB0b3VjaGFkanVzdG1lbnQvdG91Y2gt
aW5saW5lcy5odG1sCisKKyAgICAgICAgKiBUYXJnZXQucHJpOgorICAgICAgICAqIHBhZ2UvRXZl
bnRIYW5kbGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkV2ZW50SGFuZGxlcjo6aGFuZGxlR2Vz
dHVyZVRhcCk6CisgICAgICAgIChXZWJDb3JlOjpFdmVudEhhbmRsZXI6OmJlc3RDbGlja2FibGVO
b2RlRm9yVG91Y2hQb2ludCk6CisgICAgICAgICogcGFnZS9FdmVudEhhbmRsZXIuaDoKKyAgICAg
ICAgKiBwYWdlL1RvdWNoQWRqdXN0bWVudC5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6
VG91Y2hBZGp1c3RtZW50OjpIaXRUZXN0UXVhZDo6SGl0VGVzdFF1YWQpOgorICAgICAgICAoV2Vi
Q29yZTo6VG91Y2hBZGp1c3RtZW50OjpIaXRUZXN0UXVhZDo6bm9kZSk6CisgICAgICAgIChXZWJD
b3JlOjpUb3VjaEFkanVzdG1lbnQ6OkhpdFRlc3RRdWFkOjpxdWFkKToKKyAgICAgICAgKFdlYkNv
cmU6OlRvdWNoQWRqdXN0bWVudDo6SGl0VGVzdFF1YWQ6OmJvdW5kaW5nQm94KToKKyAgICAgICAg
KFdlYkNvcmU6OlRvdWNoQWRqdXN0bWVudDo6bm9kZVJlc3BvbmRzVG9UYXBHZXN0dXJlKToKKyAg
ICAgICAgKFdlYkNvcmU6OlRvdWNoQWRqdXN0bWVudDo6YXBwZW5kQWJzb2x1dGVRdWFkc0Zvck5v
ZGVUb0hpdExpc3QpOgorICAgICAgICAoV2ViQ29yZTo6VG91Y2hBZGp1c3RtZW50Ojpjb21waWxl
SGl0TGlzdCk6CisgICAgICAgIChXZWJDb3JlOjpUb3VjaEFkanVzdG1lbnQ6OmRpc3RhbmNlVG9I
aXRUZXN0UXVhZCk6CisgICAgICAgIChXZWJDb3JlOjpUb3VjaEFkanVzdG1lbnQ6OmZpbmROb2Rl
V2l0aExvd2VzdE1ldHJpYyk6CisgICAgICAgIChXZWJDb3JlOjpmaW5kQmVzdENsaWNrYWJsZUNh
bmRpZGF0ZSk6CisgICAgICAgICogcGFnZS9Ub3VjaEFkanVzdG1lbnQuaDogQWRkZWQuCisgICAg
ICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvRmxvYXRRdWFkLmg6CisgICAgICAgIChXZWJDb3JlOjpG
bG9hdFF1YWQ6OmNlbnRlcik6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvSW50UG9pbnQu
aDoKKyAgICAgICAgKFdlYkNvcmU6OkludFBvaW50OjpkaXN0YW5jZVNxdWFyZWRUb1BvaW50KToK
KyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9JbnRSZWN0LmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OmRpc3RhbmNlVG9JbnRlcnZhbCk6CisgICAgICAgIChXZWJDb3JlOjpJbnRSZWN0OjpkaWZm
ZXJlbmNlVG9Qb2ludCk6CisgICAgICAgIChXZWJDb3JlOjpJbnRSZWN0OjpkaWZmZXJlbmNlRnJv
bUNlbnRlckxpbmVUb1BvaW50KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9JbnRSZWN0
Lmg6CisgICAgICAgIChXZWJDb3JlOjpJbnRSZWN0OjpkaXN0YW5jZVNxdWFyZWRUb1BvaW50KToK
KyAgICAgICAgKFdlYkNvcmU6OkludFJlY3Q6OmRpc3RhbmNlU3F1YXJlZEZyb21DZW50ZXJMaW5l
VG9Qb2ludCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvSW50U2l6ZS5oOgorICAgICAg
ICAoV2ViQ29yZTo6SW50U2l6ZTo6ZGlhZ29uYWxMZW5ndGhTcXVhcmVkKToKKyAgICAgICAgKiB0
ZXN0aW5nL0ludGVybmFscy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJbnRlcm5hbHM6OnRvdWNo
UG9zaXRpb25BZGp1c3RlZFRvQmVzdENsaWNrYWJsZU5vZGUpOgorICAgICAgICAoV2ViQ29yZTo6
SW50ZXJuYWxzOjp0b3VjaE5vZGVBZGp1c3RlZFRvQmVzdENsaWNrYWJsZU5vZGUpOgorICAgICAg
ICAqIHRlc3RpbmcvSW50ZXJuYWxzLmg6CisgICAgICAgICogdGVzdGluZy9JbnRlcm5hbHMuaWRs
OgorCiAyMDEyLTAzLTA5ICBTaGVyaWZmIEJvdCAgPHdlYmtpdC5yZXZpZXcuYm90QGdtYWlsLmNv
bT4KIAogICAgICAgICBVbnJldmlld2VkLCByb2xsaW5nIG91dCByMTEwMTkxLCByMTEwMjAyLCBh
bmQgcjExMDI3OS4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZyBiL1NvdXJj
ZS9XZWJLaXQyL0NoYW5nZUxvZwppbmRleCBjZGRmMzdmMGE2ZjBjNjQ4MDk3N2VmNzA3ZjA4OTkw
Yzk3YzUyNzY3Li5lNjFhMjE5Mjk5MTVkNTExMTMxZjA3ZjY1MWUwNDVjMjUxNWY1YWY3IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdDIvQ2hh
bmdlTG9nCkBAIC0xLDMgKzEsMjMgQEAKKzIwMTItMDMtMDkgIEFsbGFuIFNhbmRmZWxkIEplbnNl
biAgPGFsbGFuLmplbnNlbkBub2tpYS5jb20+CisKKyAgICAgICAgU2VsZWN0IGJlc3QgdGFyZ2V0
IGZvciB0YXAgZ2VzdHVyZS4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTc4ODAxCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisK
KyAgICAgICAgU2VuZCByYWRpdXMgdG8gaGFuZGxlUG90ZW50aWFsU2luZ2xlVGFwRXZlbnQgc28g
aXQgY2FuIGRvIHRoZSBzYW1lIGhpdAorICAgICAgICBkZXRlY3Rpb24gdGhlIHRhcCBnZXN0dXJl
IGxhdGVyIGRvZXMuCisKKyAgICAgICAgKiBVSVByb2Nlc3MvV2ViUGFnZVByb3h5LmNwcDoKKyAg
ICAgICAgKFdlYktpdDo6V2ViUGFnZVByb3h5OjpoYW5kbGVQb3RlbnRpYWxBY3RpdmF0aW9uKToK
KyAgICAgICAgKiBVSVByb2Nlc3MvV2ViUGFnZVByb3h5Lmg6CisgICAgICAgICogVUlQcm9jZXNz
L3F0L1F0V2ViUGFnZUV2ZW50SGFuZGxlci5jcHA6CisgICAgICAgIChRdFdlYlBhZ2VFdmVudEhh
bmRsZXI6OmhhbmRsZVBvdGVudGlhbFNpbmdsZVRhcEV2ZW50KToKKyAgICAgICAgKiBXZWJQcm9j
ZXNzL1dlYlBhZ2UvV2ViUGFnZS5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2U6OmhpZ2hs
aWdodFBvdGVudGlhbEFjdGl2YXRpb24pOgorICAgICAgICAqIFdlYlByb2Nlc3MvV2ViUGFnZS9X
ZWJQYWdlLmg6CisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UubWVzc2FnZXMu
aW46CisKIDIwMTItMDMtMDkgIFNoZXJpZmYgQm90ICA8d2Via2l0LnJldmlldy5ib3RAZ21haWwu
Y29tPgogCiAgICAgICAgIFVucmV2aWV3ZWQsIHJvbGxpbmcgb3V0IHIxMTAxOTEsIHIxMTAyMDIs
IGFuZCByMTEwMjc5LgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvVGFyZ2V0LnByaSBiL1Nv
dXJjZS9XZWJDb3JlL1RhcmdldC5wcmkKaW5kZXggN2ZhNDM0YmMyYTYzOWQ4MDNkMmU0ODdhZWU2
ZTRmMTQzYmM1YjA3NS4uODZhMzE4M2QwZmE4YzlmYWYwM2IwM2JhNGE2ZjBhZjEzOGQ3Mjk4ZiAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvVGFyZ2V0LnByaQorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9UYXJnZXQucHJpCkBAIC0xMDM0LDYgKzEwMzQsNyBAQCBTT1VSQ0VTICs9IFwKICAgICBwYWdl
L1NlY3VyaXR5UG9saWN5LmNwcCBcCiAgICAgcGFnZS9TZXR0aW5ncy5jcHAgXAogICAgIHBhZ2Uv
U3BhdGlhbE5hdmlnYXRpb24uY3BwIFwKKyAgICBwYWdlL1RvdWNoQWRqdXN0bWVudC5jcHAgXAog
ICAgIHBhZ2UvU3VzcGVuZGFibGVUaW1lci5jcHAgXAogICAgIHBhZ2UvVXNlckNvbnRlbnRVUkxQ
YXR0ZXJuLmNwcCBcCiAgICAgcGFnZS9XaW5kb3dGZWF0dXJlcy5jcHAgXApAQCAtMjEyNyw2ICsy
MTI4LDcgQEAgSEVBREVSUyArPSBcCiAgICAgcGFnZS9TcGVlY2hJbnB1dExpc3RlbmVyLmggXAog
ICAgIHBhZ2UvU3BlZWNoSW5wdXRSZXN1bHQuaCBcCiAgICAgcGFnZS9TcGVlY2hJbnB1dFJlc3Vs
dExpc3QuaCBcCisgICAgcGFnZS9Ub3VjaEFkanVzdG1lbnQuaCBcCiAgICAgcGFnZS9XZWJLaXRB
bmltYXRpb24uaCBcCiAgICAgcGFnZS9XZWJLaXRBbmltYXRpb25MaXN0LmggXAogICAgIHBhZ2Uv
V2luZG93RmVhdHVyZXMuaCBcCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL0V2ZW50
SGFuZGxlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL0V2ZW50SGFuZGxlci5jcHAKaW5kZXgg
MWMxMTQ3YjczNjZjNjVmZjA4ZDBkZGQ0NWY0N2I5YjIwYWIwNjc0My4uN2ViNDhhYmZhMTQwYzJi
MmQwNWQ4YzJmYmQzMzFkYzQ4ZGYwNjM3MCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGFn
ZS9FdmVudEhhbmRsZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRXZlbnRIYW5kbGVy
LmNwcApAQCAtNzMsNiArNzMsNyBAQAogI2luY2x1ZGUgIlNjcm9sbGJhci5oIgogI2luY2x1ZGUg
IlNldHRpbmdzLmgiCiAjaW5jbHVkZSAiU3BhdGlhbE5hdmlnYXRpb24uaCIKKyNpbmNsdWRlICJT
dGF0aWNIYXNoU2V0Tm9kZUxpc3QuaCIKICNpbmNsdWRlICJTdHlsZUNhY2hlZEltYWdlLmgiCiAj
aW5jbHVkZSAiVGV4dEV2ZW50LmgiCiAjaW5jbHVkZSAiVGV4dEl0ZXJhdG9yLmgiCkBAIC04OCw2
ICs4OSwxMCBAQAogI2luY2x1ZGUgIlBsYXRmb3JtR2VzdHVyZUV2ZW50LmgiCiAjZW5kaWYKIAor
I2lmIEVOQUJMRShUT1VDSF9BREpVU1RNRU5UKQorI2luY2x1ZGUgIlRvdWNoQWRqdXN0bWVudC5o
IgorI2VuZGlmCisKICNpZiBFTkFCTEUoU1ZHKQogI2luY2x1ZGUgIlNWR0RvY3VtZW50LmgiCiAj
aW5jbHVkZSAiU1ZHRWxlbWVudEluc3RhbmNlLmgiCkBAIC0yMzg4LDEwICsyMzkzLDIxIEBAIGJv
b2wgRXZlbnRIYW5kbGVyOjpoYW5kbGVHZXN0dXJlVGFwKGNvbnN0IFBsYXRmb3JtR2VzdHVyZUV2
ZW50JiBnZXN0dXJlRXZlbnQpCiB7CiAgICAgLy8gRklYTUU6IFJlZmFjdG9yIHRoaXMgY29kZSB0
byBub3QgaGl0IHRlc3QgbXVsdGlwbGUgdGltZXMgb25jZSBoaXQgdGVzdGluZwogICAgIC8vIGhh
cyBiZWVuIGNvcnJlY3RlZCBhcyBzdWdnZXN0ZWQgYWJvdmUgaW4gaGFuZGxlR2VzdHVyZUV2ZW50
KCkuCisgICAgSW50UG9pbnQgYWRqdXN0ZWRQb2ludCA9IGdlc3R1cmVFdmVudC5wb3NpdGlvbigp
OworI2lmIEVOQUJMRShUT1VDSF9BREpVU1RNRU5UKQorICAgIGlmICghZ2VzdHVyZUV2ZW50LmFy
ZWEoKS5pc0VtcHR5KCkpIHsKKyAgICAgICAgTm9kZSogdGFyZ2V0Tm9kZSA9IDA7CisgICAgICAg
IC8vIEZvciBub3cgd2UgdXNlIHRoZSBhZGp1c3RlZCBwb3NpdGlvbiB0byBlbnN1cmUgdGhlIGxh
dGVyIHJlZHVuZGFudCBoaXQtdGVzdHMgaGl0cyB0aGUgcmlnaHQgbm9kZS4KKyAgICAgICAgYmVz
dENsaWNrYWJsZU5vZGVGb3JUb3VjaFBvaW50KGdlc3R1cmVFdmVudC5wb3NpdGlvbigpLCBJbnRT
aXplKGdlc3R1cmVFdmVudC5hcmVhKCkud2lkdGgoKSAvIDIsIGdlc3R1cmVFdmVudC5hcmVhKCku
aGVpZ2h0KCkgLyAyKSwgYWRqdXN0ZWRQb2ludCwgdGFyZ2V0Tm9kZSk7CisgICAgICAgIGlmICgh
dGFyZ2V0Tm9kZSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisjZW5kaWYKKwog
ICAgIGJvb2wgZGVmYXVsdFByZXZlbnRlZCA9IGZhbHNlOwotICAgIFBsYXRmb3JtTW91c2VFdmVu
dCBmYWtlTW91c2VNb3ZlKGdlc3R1cmVFdmVudC5wb3NpdGlvbigpLCBnZXN0dXJlRXZlbnQuZ2xv
YmFsUG9zaXRpb24oKSwgTm9CdXR0b24sIFBsYXRmb3JtRXZlbnQ6Ok1vdXNlTW92ZWQsIC8qIGNs
aWNrQ291bnQgKi8gMSwgZ2VzdHVyZUV2ZW50LnNoaWZ0S2V5KCksIGdlc3R1cmVFdmVudC5jdHJs
S2V5KCksIGdlc3R1cmVFdmVudC5hbHRLZXkoKSwgZ2VzdHVyZUV2ZW50Lm1ldGFLZXkoKSwgZ2Vz
dHVyZUV2ZW50LnRpbWVzdGFtcCgpKTsKLSAgICBQbGF0Zm9ybU1vdXNlRXZlbnQgZmFrZU1vdXNl
RG93bihnZXN0dXJlRXZlbnQucG9zaXRpb24oKSwgZ2VzdHVyZUV2ZW50Lmdsb2JhbFBvc2l0aW9u
KCksIExlZnRCdXR0b24sIFBsYXRmb3JtRXZlbnQ6Ok1vdXNlUHJlc3NlZCwgLyogY2xpY2tDb3Vu
dCAqLyAxLCBnZXN0dXJlRXZlbnQuc2hpZnRLZXkoKSwgZ2VzdHVyZUV2ZW50LmN0cmxLZXkoKSwg
Z2VzdHVyZUV2ZW50LmFsdEtleSgpLCBnZXN0dXJlRXZlbnQubWV0YUtleSgpLCBnZXN0dXJlRXZl
bnQudGltZXN0YW1wKCkpOwotICAgIFBsYXRmb3JtTW91c2VFdmVudCBmYWtlTW91c2VVcChnZXN0
dXJlRXZlbnQucG9zaXRpb24oKSwgZ2VzdHVyZUV2ZW50Lmdsb2JhbFBvc2l0aW9uKCksIExlZnRC
dXR0b24sIFBsYXRmb3JtRXZlbnQ6Ok1vdXNlUmVsZWFzZWQsIC8qIGNsaWNrQ291bnQgKi8gMSwg
Z2VzdHVyZUV2ZW50LnNoaWZ0S2V5KCksIGdlc3R1cmVFdmVudC5jdHJsS2V5KCksIGdlc3R1cmVF
dmVudC5hbHRLZXkoKSwgZ2VzdHVyZUV2ZW50Lm1ldGFLZXkoKSwgZ2VzdHVyZUV2ZW50LnRpbWVz
dGFtcCgpKTsKKyAgICBQbGF0Zm9ybU1vdXNlRXZlbnQgZmFrZU1vdXNlTW92ZShhZGp1c3RlZFBv
aW50LCBnZXN0dXJlRXZlbnQuZ2xvYmFsUG9zaXRpb24oKSwgTm9CdXR0b24sIFBsYXRmb3JtRXZl
bnQ6Ok1vdXNlTW92ZWQsIC8qIGNsaWNrQ291bnQgKi8gMSwgZ2VzdHVyZUV2ZW50LnNoaWZ0S2V5
KCksIGdlc3R1cmVFdmVudC5jdHJsS2V5KCksIGdlc3R1cmVFdmVudC5hbHRLZXkoKSwgZ2VzdHVy
ZUV2ZW50Lm1ldGFLZXkoKSwgZ2VzdHVyZUV2ZW50LnRpbWVzdGFtcCgpKTsKKyAgICBQbGF0Zm9y
bU1vdXNlRXZlbnQgZmFrZU1vdXNlRG93bihhZGp1c3RlZFBvaW50LCBnZXN0dXJlRXZlbnQuZ2xv
YmFsUG9zaXRpb24oKSwgTGVmdEJ1dHRvbiwgUGxhdGZvcm1FdmVudDo6TW91c2VQcmVzc2VkLCAv
KiBjbGlja0NvdW50ICovIDEsIGdlc3R1cmVFdmVudC5zaGlmdEtleSgpLCBnZXN0dXJlRXZlbnQu
Y3RybEtleSgpLCBnZXN0dXJlRXZlbnQuYWx0S2V5KCksIGdlc3R1cmVFdmVudC5tZXRhS2V5KCks
IGdlc3R1cmVFdmVudC50aW1lc3RhbXAoKSk7CisgICAgUGxhdGZvcm1Nb3VzZUV2ZW50IGZha2VN
b3VzZVVwKGFkanVzdGVkUG9pbnQsIGdlc3R1cmVFdmVudC5nbG9iYWxQb3NpdGlvbigpLCBMZWZ0
QnV0dG9uLCBQbGF0Zm9ybUV2ZW50OjpNb3VzZVJlbGVhc2VkLCAvKiBjbGlja0NvdW50ICovIDEs
IGdlc3R1cmVFdmVudC5zaGlmdEtleSgpLCBnZXN0dXJlRXZlbnQuY3RybEtleSgpLCBnZXN0dXJl
RXZlbnQuYWx0S2V5KCksIGdlc3R1cmVFdmVudC5tZXRhS2V5KCksIGdlc3R1cmVFdmVudC50aW1l
c3RhbXAoKSk7CiAgICAgbW91c2VNb3ZlZChmYWtlTW91c2VNb3ZlKTsKICAgICBkZWZhdWx0UHJl
dmVudGVkIHw9IGhhbmRsZU1vdXNlUHJlc3NFdmVudChmYWtlTW91c2VEb3duKTsKICAgICBkZWZh
dWx0UHJldmVudGVkIHw9IGhhbmRsZU1vdXNlUmVsZWFzZUV2ZW50KGZha2VNb3VzZVVwKTsKQEAg
LTI0MTEsNiArMjQyNywyNCBAQCBib29sIEV2ZW50SGFuZGxlcjo6aGFuZGxlR2VzdHVyZVNjcm9s
bFVwZGF0ZShjb25zdCBQbGF0Zm9ybUdlc3R1cmVFdmVudCYgZ2VzdHVyZQogfQogI2VuZGlmCiAK
KyNpZiBFTkFCTEUoVE9VQ0hfQURKVVNUTUVOVCkKK3ZvaWQgRXZlbnRIYW5kbGVyOjpiZXN0Q2xp
Y2thYmxlTm9kZUZvclRvdWNoUG9pbnQoY29uc3QgSW50UG9pbnQmIHRvdWNoQ2VudGVyLCBjb25z
dCBJbnRTaXplJiB0b3VjaFJhZGl1cywgSW50UG9pbnQmIHRhcmdldFBvaW50LCBOb2RlKiYgdGFy
Z2V0Tm9kZSkKK3sKKyAgICBIaXRUZXN0UmVxdWVzdDo6SGl0VGVzdFJlcXVlc3RUeXBlIGhpdFR5
cGUgPSBIaXRUZXN0UmVxdWVzdDo6UmVhZE9ubHkgfCBIaXRUZXN0UmVxdWVzdDo6QWN0aXZlOwor
ICAgIEludFJlY3QgdG91Y2hSZWN0KHRvdWNoQ2VudGVyIC0gdG91Y2hSYWRpdXMsIEludFNpemUo
dG91Y2hSYWRpdXMud2lkdGgoKSAqIDIsIHRvdWNoUmFkaXVzLmhlaWdodCgpICogMikpOworICAg
IHRhcmdldE5vZGUgPSAwOworCisgICAgSGl0VGVzdFJlc3VsdCByZXN1bHQgPSBoaXRUZXN0UmVz
dWx0QXRQb2ludCh0b3VjaENlbnRlciwgLyphbGxvd1NoYWRvd0NvbnRlbnQqLyBmYWxzZSwgLypp
Z25vcmVDbGlwcGluZyovIGZhbHNlLCBEb250SGl0VGVzdFNjcm9sbGJhcnMsIGhpdFR5cGUsIHRv
dWNoUmFkaXVzKTsKKworICAgIFJlZlB0cjxTdGF0aWNIYXNoU2V0Tm9kZUxpc3Q+IG5vZGVMaXN0
ID0gU3RhdGljSGFzaFNldE5vZGVMaXN0OjphZG9wdChyZXN1bHQucmVjdEJhc2VkVGVzdFJlc3Vs
dCgpKTsKKyAgICBpZiAoIWZpbmRCZXN0Q2xpY2thYmxlQ2FuZGlkYXRlKHRhcmdldE5vZGUsIHRh
cmdldFBvaW50LCB0b3VjaENlbnRlciwgdG91Y2hSZWN0LCAqbm9kZUxpc3QuZ2V0KCkpKSB7Cisg
ICAgICAgIC8vIERlZmF1bHQgdG8ganVzdCByZXR1cm5pbmcgaW5uZXJOb25TaGFyZWROb2RlLgor
ICAgICAgICB0YXJnZXRQb2ludCA9IHRvdWNoQ2VudGVyOworICAgICAgICB0YXJnZXROb2RlID0g
cmVzdWx0LmlubmVyTm9uU2hhcmVkTm9kZSgpOworICAgIH0KK30KKyNlbmRpZgorCiAjaWYgRU5B
QkxFKENPTlRFWFRfTUVOVVMpCiBib29sIEV2ZW50SGFuZGxlcjo6c2VuZENvbnRleHRNZW51RXZl
bnQoY29uc3QgUGxhdGZvcm1Nb3VzZUV2ZW50JiBldmVudCkKIHsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3BhZ2UvRXZlbnRIYW5kbGVyLmggYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL0V2ZW50
SGFuZGxlci5oCmluZGV4IDA5ODFlNDE3MTE4MWExMjUyYTc0YTAwZTcxNzBiOTI5ZWE4MDA0NjIu
LjQ1OWQyNjllMDU1Y2E3NzlmYzVhNDYzNTY2NjE2MGVhNGI2ZDQwOTIgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3BhZ2UvRXZlbnRIYW5kbGVyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGFn
ZS9FdmVudEhhbmRsZXIuaApAQCAtMTY2LDYgKzE2NiwxMCBAQCBwdWJsaWM6CiAgICAgYm9vbCBo
YW5kbGVHZXN0dXJlU2Nyb2xsVXBkYXRlKGNvbnN0IFBsYXRmb3JtR2VzdHVyZUV2ZW50Jik7CiAj
ZW5kaWYKIAorI2lmIEVOQUJMRShUT1VDSF9BREpVU1RNRU5UKQorICAgIHZvaWQgYmVzdENsaWNr
YWJsZU5vZGVGb3JUb3VjaFBvaW50KGNvbnN0IEludFBvaW50JiB0b3VjaENlbnRlciwgY29uc3Qg
SW50U2l6ZSYgdG91Y2hSYWRpdXMsIEludFBvaW50JiB0YXJnZXRQb2ludCwgTm9kZSomIHRhcmdl
dE5vZGUpOworI2VuZGlmCisKICNpZiBFTkFCTEUoQ09OVEVYVF9NRU5VUykKICAgICBib29sIHNl
bmRDb250ZXh0TWVudUV2ZW50KGNvbnN0IFBsYXRmb3JtTW91c2VFdmVudCYpOwogICAgIGJvb2wg
c2VuZENvbnRleHRNZW51RXZlbnRGb3JLZXkoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3BhZ2UvVG91Y2hBZGp1c3RtZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvVG91Y2hBZGp1
c3RtZW50LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwLi41NjQ1NzVhYmJkMGU3NDg2NGUwNGYwMGM5NjY5ZGRiY2Ix
ZjRiZjI5Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGFnZS9Ub3VjaEFkanVz
dG1lbnQuY3BwCkBAIC0wLDAgKzEsMjA2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIE5v
a2lhIENvcnBvcmF0aW9uIGFuZC9vciBpdHMgc3Vic2lkaWFyeSgtaWVzKQorICoKKyAqIFRoaXMg
bGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IK
KyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwg
UHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3Vu
ZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIg
b3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJp
YnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VU
IEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBN
RVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUg
dGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFp
bHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExp
YnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7
IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVl
IFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxv
b3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaW5jbHVkZSAiY29u
ZmlnLmgiCisKKyNpbmNsdWRlICJUb3VjaEFkanVzdG1lbnQuaCIKKworI2luY2x1ZGUgIkNvbnRh
aW5lck5vZGUuaCIKKyNpbmNsdWRlICJGbG9hdFBvaW50LmgiCisjaW5jbHVkZSAiRmxvYXRRdWFk
LmgiCisjaW5jbHVkZSAiSFRNTExhYmVsRWxlbWVudC5oIgorI2luY2x1ZGUgIkhUTUxOYW1lcy5o
IgorI2luY2x1ZGUgIkludFBvaW50LmgiCisjaW5jbHVkZSAiSW50U2l6ZS5oIgorI2luY2x1ZGUg
Ik5vZGUuaCIKKyNpbmNsdWRlICJSZW5kZXJCb3guaCIKKyNpbmNsdWRlICJSZW5kZXJPYmplY3Qu
aCIKKyNpbmNsdWRlICJSZW5kZXJTdHlsZS5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK25h
bWVzcGFjZSBUb3VjaEFkanVzdG1lbnQgeworCitjbGFzcyBIaXRUZXN0UXVhZCB7CitwdWJsaWM6
CisgICAgSGl0VGVzdFF1YWQoTm9kZSogbm9kZSwgY29uc3QgRmxvYXRRdWFkJiBxdWFkKQorICAg
ICAgICA6IG1fbm9kZShub2RlKQorICAgICAgICAsIG1fcXVhZChxdWFkKQorICAgIHsgfQorCisg
ICAgTm9kZSogbm9kZSgpIGNvbnN0IHsgcmV0dXJuIG1fbm9kZTsgfQorICAgIEZsb2F0UXVhZCBx
dWFkKCkgY29uc3QgeyByZXR1cm4gbV9xdWFkOyB9CisgICAgSW50UmVjdCBib3VuZGluZ0JveCgp
IGNvbnN0IHsgcmV0dXJuIG1fcXVhZC5lbmNsb3NpbmdCb3VuZGluZ0JveCgpOyB9CisKK3ByaXZh
dGU6CisgICAgTm9kZSogbV9ub2RlOworICAgIEZsb2F0UXVhZCBtX3F1YWQ7Cit9OworCit0eXBl
ZGVmIFZlY3RvcjxIaXRUZXN0UXVhZD4gSGl0TGlzdDsKK3R5cGVkZWYgYm9vbCAoKk5vZGVGaWx0
ZXIpKE5vZGUqKTsKK3R5cGVkZWYgZmxvYXQgKCpNZXRyaWMpKGNvbnN0IEludFBvaW50JiwgY29u
c3QgSW50UmVjdCYsIGNvbnN0IEhpdFRlc3RRdWFkJik7CisKKy8vIFRha2VzIG5vbi1jb25zdCBO
b2RlKiBiZWNhdXNlIGlzQ29udGVudEVkaXRhYmxlIGlzIGEgbm9uLWNvbnN0IGZ1bmN0aW9uLgor
Ym9vbCBub2RlUmVzcG9uZHNUb1RhcEdlc3R1cmUoTm9kZSogbm9kZSkKK3sKKyAgICBpZiAobm9k
ZS0+aXNMaW5rKCkKKyAgICAgICAgfHwgbm9kZS0+aXNDb250ZW50RWRpdGFibGUoKQorICAgICAg
ICB8fCBub2RlLT5pc01vdXNlRm9jdXNhYmxlKCkpCisgICAgICAgIHJldHVybiB0cnVlOworICAg
IGlmIChub2RlLT5pc0VsZW1lbnROb2RlKCkpIHsKKyAgICAgICAgRWxlbWVudCogZWxlbWVudCA9
ICBzdGF0aWNfY2FzdDxFbGVtZW50Kj4obm9kZSk7CisgICAgICAgIGlmIChlbGVtZW50LT5oYXNU
YWdOYW1lKEhUTUxOYW1lczo6bGFiZWxUYWcpICYmIHN0YXRpY19jYXN0PEhUTUxMYWJlbEVsZW1l
bnQqPihlbGVtZW50KS0+Y29udHJvbCgpKQorICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAg
fQorICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQgaGFzRGVmYXVsdEV2ZW50SGFuZGxlciBhbmQgdXNl
IHRoYXQgaW5zdGVhZCBvZiBhbGwgb2YgdGhlIGFib3ZlIGNoZWNrcy4KKyAgICBpZiAobm9kZS0+
aGFzRXZlbnRMaXN0ZW5lcnMoKQorICAgICAgICAmJiAobm9kZS0+aGFzRXZlbnRMaXN0ZW5lcnMo
ZXZlbnROYW1lcygpLmNsaWNrRXZlbnQpCisgICAgICAgICAgICB8fCBub2RlLT5oYXNFdmVudExp
c3RlbmVycyhldmVudE5hbWVzKCkuRE9NQWN0aXZhdGVFdmVudCkKKyAgICAgICAgICAgIHx8IG5v
ZGUtPmhhc0V2ZW50TGlzdGVuZXJzKGV2ZW50TmFtZXMoKS5tb3VzZWRvd25FdmVudCkKKyAgICAg
ICAgICAgIHx8IG5vZGUtPmhhc0V2ZW50TGlzdGVuZXJzKGV2ZW50TmFtZXMoKS5tb3VzZXVwRXZl
bnQpCisgICAgICAgICAgICB8fCBub2RlLT5oYXNFdmVudExpc3RlbmVycyhldmVudE5hbWVzKCku
bW91c2Vtb3ZlRXZlbnQpCisgICAgICAgICAgICAvLyBDaGVja2luZyBmb3IgZm9jdXMgZXZlbnRz
IGlzIG5vdCBuZWNlc3Nhcnkgc2luY2UgdGhleSBjYW4gb25seSBmaXJlIG9uCisgICAgICAgICAg
ICAvLyBmb2N1c2FibGUgZWxlbWVudHMgd2hpY2ggaGF2ZSBhbHJlYWR5IGJlZW4gY2FwdHVyZWQg
YWJvdmUuCisgICAgICAgICkpCisgICAgICAgIHJldHVybiB0cnVlOworICAgIGlmIChub2RlLT5y
ZW5kZXJTdHlsZSgpKSB7CisgICAgICAgIC8vIEFjY2VwdCBub2RlcyB0aGF0IGhhcyBhIENTUyBl
ZmZlY3Qgd2hlbiB0b3VjaGVkLgorICAgICAgICBpZiAobm9kZS0+cmVuZGVyU3R5bGUoKS0+YWZm
ZWN0ZWRCeUFjdGl2ZVJ1bGVzKCkgfHwgbm9kZS0+cmVuZGVyU3R5bGUoKS0+YWZmZWN0ZWRCeUhv
dmVyUnVsZXMoKSkKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKyAgICByZXR1cm4g
ZmFsc2U7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBhcHBlbmRBYnNvbHV0ZVF1YWRzRm9yTm9k
ZVRvSGl0TGlzdChOb2RlKiBub2RlLCBIaXRMaXN0JiBoaXRsaXN0KQoreworICAgIC8vIFNpbmNl
IHRoZSBub2RlIGlzIGEgcmVzdWx0IG9mIGEgaGl0IHRlc3QsIHdlIGFyZSBhbHJlYWR5IGVuc3Vy
ZWQgaXQgaGFzIGEgcmVuZGVyZXIuCisgICAgQVNTRVJUKG5vZGUtPnJlbmRlcmVyKCkpOworCisg
ICAgVmVjdG9yPEZsb2F0UXVhZD4gcXVhZHM7CisgICAgbm9kZS0+cmVuZGVyZXIoKS0+YWJzb2x1
dGVRdWFkcyhxdWFkcyk7CisKKyAgICBWZWN0b3I8RmxvYXRRdWFkPjo6Y29uc3RfaXRlcmF0b3Ig
aXQgPSBxdWFkcy5iZWdpbigpOworICAgIGNvbnN0IFZlY3RvcjxGbG9hdFF1YWQ+Ojpjb25zdF9p
dGVyYXRvciBlbmQgPSBxdWFkcy5lbmQoKTsKKyAgICBmb3IgKDsgaXQgIT0gZW5kOyArK2l0KQor
ICAgICAgICBoaXRsaXN0LmFwcGVuZChIaXRUZXN0UXVhZChub2RlLCAqaXQpKTsKK30KKworLy8g
Q29tcGlsZSBhIGxpc3Qgb2YgYWJzb2x1dGUgcmVjdHMgcmVwcmVzZW5kaW5nIG5vZGVzIHJlc3Bv
bmRpbmcgdGhlIHRhcCBnZXN0dXJlLgordm9pZCBjb21waWxlSGl0TGlzdChjb25zdCBOb2RlTGlz
dCYgaW50ZXJzZWN0ZWROb2RlcywgSGl0TGlzdCYgaGl0bGlzdCwgTm9kZUZpbHRlciBub2RlRmls
dGVyKQoreworICAgIC8vIEZpbmQgY2FuZGlkYXRlcyByZXNwb25kaW5nIHRvIHRhcCBnZXN0dXJl
IGV2ZW50cyBpbiBPKG4pIHRpbWUuCisgICAgSGFzaE1hcDxOb2RlKiwgTm9kZSo+IHJlc3BvbmRl
ck1hcDsKKyAgICBIYXNoU2V0PE5vZGUqPiBhbmNlc3RvcnNUb1Jlc3BvbmRlcnNTZXQ7CisgICAg
VmVjdG9yPE5vZGUqPiBjYW5kaWRhdGVzOworCisgICAgY29uc3QgdW5zaWduZWQgaW50IGxlbmd0
aCA9IGludGVyc2VjdGVkTm9kZXMubGVuZ3RoKCk7CisgICAgZm9yICh1bnNpZ25lZCBpbnQgaSA9
IDA7IGkgPCBsZW5ndGg7ICsraSkgeworICAgICAgICBOb2RlKiBub2RlID0gaW50ZXJzZWN0ZWRO
b2Rlcy5pdGVtKGkpOworICAgICAgICBpZiAocmVzcG9uZGVyTWFwLmNvbnRhaW5zKG5vZGUpKQor
ICAgICAgICAgICAgLy8gU2tpcCBub2RlcyB0aGF0IGFyZSBkaXJlY3QgYW5jZXN0b3JzIG9mIG90
aGVyIGNhbmRpZGF0ZXMuIFRoZXkgd291bGQgaGl0LXRlc3QgYWdhaW5zdCB0aGUgc2FtZSBhYnNv
bHV0ZSBxdWFkcy4KKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICBWZWN0b3I8Tm9kZSo+
IGFuY2VzdG9yczsKKyAgICAgICAgTm9kZSogcmVzcG9uZGluZ05vZGUgPSAwOworICAgICAgICBm
b3IgKDsgbm9kZTsgbm9kZSA9IG5vZGUtPnBhcmVudE9ySG9zdE5vZGUoKSkgeworICAgICAgICAg
ICAgLy8gQ2hlY2sgaWYgd2UgYWxyZWFkeSBoYXZlIGEgcmVzdWx0IGZvciBhIGNvbW1vbiBhbmNl
c3RvciBmcm9tIGFub3RoZXIgY2FuZGlkYXRlLgorICAgICAgICAgICAgcmVzcG9uZGluZ05vZGUg
PSByZXNwb25kZXJNYXAuZ2V0KG5vZGUpOworICAgICAgICAgICAgaWYgKHJlc3BvbmRpbmdOb2Rl
KQorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgYW5jZXN0b3JzLmFwcGVuZChu
b2RlKTsKKyAgICAgICAgICAgIC8vIENoZWNrIGlmIHRoZSBub2RlIGZpbHRlciBhcHBsaWVzLCB3
aGljaCB3b3VsZCBtZWFuIHdlIGhhdmUgZm91bmQgYSByZXNwb25kaW5nIG5vZGUuCisgICAgICAg
ICAgICBpZiAobm9kZUZpbHRlcihub2RlKSkgeworICAgICAgICAgICAgICAgIHJlc3BvbmRpbmdO
b2RlID0gbm9kZTsKKyAgICAgICAgICAgICAgICAvLyBOb3cgdGhhdCB3ZSBoYXZlIHRoZSByZXNw
b25kZXIsIHNldCB0aGUgcmVzcG9uZGVyIGZvciBhbGwgdGhlIG5vZGVzIHNlZW4gc28gZmFyLgor
ICAgICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaW50IGkgPSAwOyBpIDwgYW5jZXN0b3JzLnNp
emUoKTsgaSsrKQorICAgICAgICAgICAgICAgICAgICByZXNwb25kZXJNYXAuYWRkKGFuY2VzdG9y
c1tpXSwgbm9kZSk7CisgICAgICAgICAgICAgICAgLy8gVGhlIGNvbnRpbnVlIHRoZSBpdGVyYXRp
b24gdG8gY29sbGVjdCB0aGUgYW5jZXN0b3JzIG9mIHRoZSByZXNwb25kZXIuCisgICAgICAgICAg
ICAgICAgZm9yIChub2RlID0gbm9kZS0+cGFyZW50T3JIb3N0Tm9kZSgpOyBub2RlOyBub2RlID0g
bm9kZS0+cGFyZW50T3JIb3N0Tm9kZSgpKSB7CisgICAgICAgICAgICAgICAgICAgIHBhaXI8SGFz
aFNldDxOb2RlKj46Oml0ZXJhdG9yLCBib29sPiB0bXAgPSBhbmNlc3RvcnNUb1Jlc3BvbmRlcnNT
ZXQuYWRkKG5vZGUpOworICAgICAgICAgICAgICAgICAgICBpZiAoIXRtcC5zZWNvbmQpCisgICAg
ICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgaWYgKHJlc3Bv
bmRpbmdOb2RlKQorICAgICAgICAgICAgY2FuZGlkYXRlcy5hcHBlbmQoaW50ZXJzZWN0ZWROb2Rl
cy5pdGVtKGkpKTsKKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAvLyBJbnNlcnQgdGhlIG5v
ZGVzIHdpdGggbWlzc2luZyByZXNwb25kZXJzIGludG8gdGhlIHJlc3BvbmRlci1tYXAgZm9yIGZh
c3QgcmVqZWN0aW9uIG9mIGxhdGVyIGNhbmRpZGF0ZXMuCisgICAgICAgICAgICBmb3IgKHVuc2ln
bmVkIGludCBpID0gMDsgaSA8IGFuY2VzdG9ycy5zaXplKCk7IGkrKykKKyAgICAgICAgICAgICAg
ICByZXNwb25kZXJNYXAuYWRkKGFuY2VzdG9yc1tpXSwgMCk7CisgICAgICAgIH0KKyAgICB9CisK
KyAgICAvLyBXZSBjb21waWxlIHRoZSBsaXN0IG9mIGNvbXBvbmVudCBhYnNvbHV0ZSBxdWFkcyBp
bnN0ZWFkIG9mIHVzaW5nIHRoZSBib3VuZGluZyByZWN0CisgICAgLy8gdG8gYmUgYWJsZSB0byBw
ZXJmb3JtIGJldHRlciBoaXQtdGVzdGluZyBvbiBpbmxpbmUgbGlua3Mgb24gbGluZS1icmVha3Mu
CisgICAgVmVjdG9yPE5vZGUqPjo6Y29uc3RfaXRlcmF0b3IgaXQyID0gY2FuZGlkYXRlcy5iZWdp
bigpOworICAgIGNvbnN0IFZlY3RvcjxOb2RlKj46OmNvbnN0X2l0ZXJhdG9yIGVuZDIgPSBjYW5k
aWRhdGVzLmVuZCgpOworICAgIGZvciAoOyBpdDIgIT0gZW5kMjsgKytpdDIpIHsKKyAgICAgICAg
Ly8gU2tpcCBub2RlcyB3aG9zIHJlc3BvbmRlcnMgYXJlIGFuY2VzdG9ycyBvZiBvdGhlciByZXNw
b25kZXJzLiBUaGlzIGdpdmVzIHByZWZlcmVuY2UgdG8gdGhlIGlubmVyLW1vc3QgZXZlbnQtaGFu
ZGxlcnMuCisgICAgICAgIC8vIFNvIHRoYXQgYSBsaW5rIGlzIGFsd2F5cyBwcmVmZXJyZWQgZXZl
biB3aGVuIGNvbnRhaW5lZCBpbiBhbiBlbGVtZW50IHRoYXQgbW9uaXRvcnMgYWxsIGNsaWNrLWV2
ZW50cy4KKyAgICAgICAgTm9kZSogcmVzcG9uZGluZ05vZGUgPSByZXNwb25kZXJNYXAuZ2V0KCpp
dDIpOworICAgICAgICBBU1NFUlQocmVzcG9uZGluZ05vZGUpOworICAgICAgICBpZiAoYW5jZXN0
b3JzVG9SZXNwb25kZXJzU2V0LmNvbnRhaW5zKHJlc3BvbmRpbmdOb2RlKSkKKyAgICAgICAgICAg
IGNvbnRpbnVlOworICAgICAgICBhcHBlbmRBYnNvbHV0ZVF1YWRzRm9yTm9kZVRvSGl0TGlzdCgq
aXQyLCBoaXRsaXN0KTsKKyAgICB9Cit9CisKKy8vIFJldHVybnMgdGhlIGRpc3RhbmNlIHNxdWFy
ZWQgdG8gdGhlIGJvdW5kaW5nIGJveCBjZW50ZXJsaW5lLgorZmxvYXQgZGlzdGFuY2VUb0hpdFRl
c3RRdWFkKGNvbnN0IEludFBvaW50JiB0b3VjaEhvdHNwb3QsIGNvbnN0IEludFJlY3QmLCBjb25z
dCBIaXRUZXN0UXVhZCYgaGl0VGVzdFF1YWQpCit7CisgICAgLy8gVXNpbmcgdGhlIGJvdW5kaW5n
IGJveCBtZWFucyB0aGUgZGlzdGFuY2UgdG8gY2VudGVybGluZSBpcyBsZXNzIG1lYW5pbmdmdWwg
Zm9yIHRyYW5zZm9ybWVkIHJlY3RhbmdsZXMsCisgICAgLy8gYnV0IGNhbGN1bGF0aW5nIHRoZSBk
aXN0YW5jZSB0byBxdWFkcyBjYW4gYmUgdmVyeSBleHBlbnNpdmUsIGFuZCB3ZSBkbyBub3Qgd2Fu
dCB0byBjYWxjdWxjYXRlCisgICAgLy8gcXVhZCBiYXNlZCBkaXN0YW5jZXMgZm9yIHVudHJhbnNm
b3JtZWQgcmVjdGFuZ2xlcy4KKyAgICBJbnRSZWN0IHJlY3QgPSBoaXRUZXN0UXVhZC5ib3VuZGlu
Z0JveCgpOworCisgICAgcmV0dXJuIHJlY3QuZGlzdGFuY2VTcXVhcmVkRnJvbUNlbnRlckxpbmVU
b1BvaW50KHRvdWNoSG90c3BvdCk7Cit9CisKK2Jvb2wgZmluZE5vZGVXaXRoTG93ZXN0TWV0cmlj
KE5vZGUqJiB0YXJnZXROb2RlLCBJbnRQb2ludCYgdGFyZ2V0UG9pbnQsIGNvbnN0IEludFBvaW50
JiB0b3VjaEhvdHNwb3QsIGNvbnN0IEludFJlY3QmIHRvdWNoQXJlYSwgSGl0TGlzdCYgaGl0bGlz
dCwgTWV0cmljIG1ldHJpYykKK3sKKyAgICB0YXJnZXROb2RlID0gMDsKKworICAgIGZsb2F0IGJl
c3RNZXRyaWMgPSBJTkZJTklUWTsKKyAgICBIaXRMaXN0Ojpjb25zdF9pdGVyYXRvciBpdCA9IGhp
dGxpc3QuYmVnaW4oKTsKKyAgICBIaXRMaXN0Ojpjb25zdF9pdGVyYXRvciBlbmQgPSBoaXRsaXN0
LmVuZCgpOworICAgIGZvciAoOyBpdCAhPSBlbmQ7ICsraXQpIHsKKyAgICAgICAgTm9kZSogaGl0
Tm9kZSA9IGl0LT5ub2RlKCk7CisgICAgICAgIGZsb2F0IGhpdE1ldHJpYyA9IG1ldHJpYyh0b3Vj
aEhvdHNwb3QsIHRvdWNoQXJlYSwgKml0KTsKKyAgICAgICAgaWYgKGhpdE1ldHJpYyA8IGJlc3RN
ZXRyaWMpIHsKKyAgICAgICAgICAgIHRhcmdldFBvaW50ID0gcm91bmRlZEludFBvaW50KGl0LT5x
dWFkKCkuY2VudGVyKCkpOworICAgICAgICAgICAgdGFyZ2V0Tm9kZSA9IGhpdE5vZGU7CisgICAg
ICAgICAgICBiZXN0TWV0cmljID0gaGl0TWV0cmljOworICAgICAgICB9CisgICAgfQorCisgICAg
cmV0dXJuICh0YXJnZXROb2RlKTsKK30KKworfSAvLyBuYW1lc3BhY2UgVG91Y2hBZGp1c3RtZW50
CisKK2Jvb2wgZmluZEJlc3RDbGlja2FibGVDYW5kaWRhdGUoTm9kZSomIHRhcmdldE5vZGUsIElu
dFBvaW50ICZ0YXJnZXRQb2ludCwgY29uc3QgSW50UG9pbnQgJnRvdWNoSG90c3BvdCwgY29uc3Qg
SW50UmVjdCAmdG91Y2hBcmVhLCBjb25zdCBOb2RlTGlzdCYgbm9kZUxpc3QpCit7CisgICAgVG91
Y2hBZGp1c3RtZW50OjpIaXRMaXN0IGhpdGxpc3Q7CisgICAgVG91Y2hBZGp1c3RtZW50Ojpjb21w
aWxlSGl0TGlzdChub2RlTGlzdCwgaGl0bGlzdCwgVG91Y2hBZGp1c3RtZW50Ojpub2RlUmVzcG9u
ZHNUb1RhcEdlc3R1cmUpOworICAgIHJldHVybiBUb3VjaEFkanVzdG1lbnQ6OmZpbmROb2RlV2l0
aExvd2VzdE1ldHJpYyh0YXJnZXROb2RlLCB0YXJnZXRQb2ludCwgdG91Y2hIb3RzcG90LCB0b3Vj
aEFyZWEsIGhpdGxpc3QsIFRvdWNoQWRqdXN0bWVudDo6ZGlzdGFuY2VUb0hpdFRlc3RRdWFkKTsK
K30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cGFnZS9Ub3VjaEFkanVzdG1lbnQuaCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvVG91Y2hBZGp1c3Rt
ZW50LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMC4uZDVkZmMxMGY0NDhmMmQ5ZGMwMTlmZmQzNmZkZDg4YzY0NmY4MjIy
MAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvVG91Y2hBZGp1c3RtZW50
LmgKQEAgLTAsMCArMSwzNiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBOb2tpYSBDb3Jw
b3JhdGlvbiBhbmQvb3IgaXRzIHN1YnNpZGlhcnkoLWllcykKKyAqCisgKiBUaGlzIGxpYnJhcnkg
aXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2Rp
ZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwor
ICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsg
ZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikg
YW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGlu
IHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FS
UkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRB
QklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUK
KyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoK
KyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdl
bmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhl
IGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2Fy
ZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICog
Qm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2lmbmRlZiBUb3VjaEFkanVzdG1l
bnRfaAorI2RlZmluZSBUb3VjaEFkanVzdG1lbnRfaAorCisjaW5jbHVkZSAiSW50UG9pbnQuaCIK
KyNpbmNsdWRlICJJbnRSZWN0LmgiCisjaW5jbHVkZSAiTm9kZS5oIgorI2luY2x1ZGUgIk5vZGVM
aXN0LmgiCisjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisK
K2Jvb2wgZmluZEJlc3RDbGlja2FibGVDYW5kaWRhdGUoTm9kZSomIHRhcmdldE5vZGUsIEludFBv
aW50JiB0YXJnZXRQb2ludCwgY29uc3QgSW50UG9pbnQmIHRvdWNoSG90c3BvdCwgY29uc3QgSW50
UmVjdCYgdG91Y2hBcmVhLCBjb25zdCBOb2RlTGlzdCYpOworLy8gRklYTUU6IEltcGxlbWVudCB0
aGUgc2ltaWxhciBmdW5jdGlvbnMgZm9yIG90aGVyIGdlc3R1cmVzIGhlcmUgYXMgd2VsbC4KKwor
fSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL0Zsb2F0UXVhZC5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvRmxvYXRRdWFkLmgKaW5kZXggYjVlMmE4Y2E0ZDU1NDIwYjRlNTNlNDljMmQz
NmE2OTI0MDFhYjA5ZC4uYmZiNzk0ZGVmODU4NmZiYzZiMWMyNTEwY2YxMjMyYjEwYjk4MDg0YyAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRmxvYXRRdWFkLmgK
KysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRmxvYXRRdWFkLmgKQEAgLTg4
LDYgKzg4LDEzIEBAIHB1YmxpYzoKICAgICAvLyBmcm9tIHRyYW5zZm9ybWVkIHJlY3RzLgogICAg
IGJvb2wgY29udGFpbnNRdWFkKGNvbnN0IEZsb2F0UXVhZCYpIGNvbnN0OwogCisgICAgLy8gVGhl
IGNlbnRlciBvZiB0aGUgcXVhZC4gSWYgdGhlIHF1YWQgaXMgdGhlIHJlc3VsdCBvZiBhIGFmZmlu
ZS10cmFuc2Zvcm1lZCByZWN0YW5nbGUgdGhpcyBpcyB0aGUgc2FtZSBhcyB0aGUgb3JpZ2luYWwg
Y2VudGVyIHRyYW5zZm9ybWVkLgorICAgIEZsb2F0UG9pbnQgY2VudGVyKCkgY29uc3QKKyAgICB7
CisgICAgICAgIHJldHVybiBGbG9hdFBvaW50KChtX3AxLngoKSArIG1fcDIueCgpICsgbV9wMy54
KCkgKyBtX3A0LngoKSkgLyA0LjAsCisgICAgICAgICAgICAgICAgICAgICAgICAgIChtX3AxLnko
KSArIG1fcDIueSgpICsgbV9wMy55KCkgKyBtX3A0LnkoKSkgLyA0LjApOworICAgIH0KKwogICAg
IEZsb2F0UmVjdCBib3VuZGluZ0JveCgpIGNvbnN0OwogICAgIEludFJlY3QgZW5jbG9zaW5nQm91
bmRpbmdCb3goKSBjb25zdAogICAgIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL0ludFBvaW50LmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9JbnRQb2ludC5oCmluZGV4IGRkYzQxYjQyM2QyMTVmZTBhMTg1NDI4MjQ0MTBlMjQ5NzY3NWQ5
YWEuLjBhZjZlODU3MDExZjFlZDg4ZjljY2Y1ZjZkMzg4NWNiNDEwZDU5MWMgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ludFBvaW50LmgKKysrIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW50UG9pbnQuaApAQCAtMTExLDYgKzExMSw4IEBA
IHB1YmxpYzoKICAgICAgICAgICAgIG1feSA8IG90aGVyLm1feSA/IG1feSA6IG90aGVyLm1feSk7
CiAgICAgfQogCisgICAgaW50IGRpc3RhbmNlU3F1YXJlZFRvUG9pbnQoY29uc3QgSW50UG9pbnQm
KSBjb25zdDsKKwogICAgIHZvaWQgY2xhbXBOZWdhdGl2ZVRvWmVybygpCiAgICAgewogICAgICAg
ICAqdGhpcyA9IGV4cGFuZGVkVG8oemVybygpKTsKQEAgLTIyMiw2ICsyMjQsMTEgQEAgaW5saW5l
IEludFNpemUgdG9TaXplKGNvbnN0IEludFBvaW50JiBhKQogICAgIHJldHVybiBJbnRTaXplKGEu
eCgpLCBhLnkoKSk7CiB9CiAKK2lubGluZSBpbnQgSW50UG9pbnQ6OmRpc3RhbmNlU3F1YXJlZFRv
UG9pbnQoY29uc3QgSW50UG9pbnQmIHBvaW50KSBjb25zdAoreworICAgIHJldHVybiAoKCp0aGlz
KSAtIHBvaW50KS5kaWFnb25hbExlbmd0aFNxdWFyZWQoKTsKK30KKwogI2lmIFBMQVRGT1JNKFFU
KQogaW5saW5lIFFEYXRhU3RyZWFtJiBvcGVyYXRvcjw8KFFEYXRhU3RyZWFtJiBzdHJlYW0sIGNv
bnN0IEludFBvaW50JiBwb2ludCkKIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL0ludFJlY3QuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvSW50UmVjdC5jcHAKaW5kZXggMDNjMzVlODNiZjQyNzBmMTlhNmQzYzYwZDE2NjcyM2RmZGI5
MmIxOC4uZGZhMmY5MWYxOGE1OTczZWM4ZmE5M2FkNWM1OGZkOTY1YmRkNTRiOCAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW50UmVjdC5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW50UmVjdC5jcHAKQEAgLTEzMiw2ICsxMzIs
MzUgQEAgdm9pZCBJbnRSZWN0OjpzY2FsZShmbG9hdCBzKQogICAgIG1fc2l6ZS5zZXRIZWlnaHQo
KGludCkoaGVpZ2h0KCkgKiBzKSk7CiB9CiAKK3N0YXRpYyBpbmxpbmUgaW50IGRpc3RhbmNlVG9J
bnRlcnZhbChpbnQgcG9zLCBpbnQgc3RhcnQsIGludCBlbmQpCit7CisgICAgaWYgKHBvcyA8IHN0
YXJ0KQorICAgICAgICByZXR1cm4gc3RhcnQgLSBwb3M7CisgICAgaWYgKHBvcyA+IGVuZCkKKyAg
ICAgICAgcmV0dXJuIGVuZCAtIHBvczsKKyAgICByZXR1cm4gMDsKK30KKworSW50U2l6ZSBJbnRS
ZWN0OjpkaWZmZXJlbmNlVG9Qb2ludChjb25zdCBJbnRQb2ludCYgcG9pbnQpIGNvbnN0Cit7Cisg
ICAgaW50IHhkaXN0YW5jZSA9IGRpc3RhbmNlVG9JbnRlcnZhbChwb2ludC54KCksIHgoKSwgbWF4
WCgpKTsKKyAgICBpbnQgeWRpc3RhbmNlID0gZGlzdGFuY2VUb0ludGVydmFsKHBvaW50LnkoKSwg
eSgpLCBtYXhZKCkpOworICAgIHJldHVybiBJbnRTaXplKHhkaXN0YW5jZSwgeWRpc3RhbmNlKTsK
K30KKworSW50U2l6ZSBJbnRSZWN0OjpkaWZmZXJlbmNlRnJvbUNlbnRlckxpbmVUb1BvaW50KGNv
bnN0IEludFBvaW50JiBwb2ludCkgY29uc3QKK3sKKyAgICAvLyBUaGUgY2VudGVyLWxpbmUgaXMg
dGhlIG5hdHVyYWwgY2VudGVyIG9mIGEgcmVjdGFuZ2xlLiBJdCBoYXMgYW4gZXF1YWwgZGlzdGFu
Y2UgdG8gYWxsIHNpZGVzIG9mIHRoZSByZWN0YW5nbGUuCisgICAgSW50UG9pbnQgY2VudGVyUG9p
bnQgPSBjZW50ZXIoKTsKKyAgICBpbnQgeGRpc3RhbmNlID0gY2VudGVyUG9pbnQueCgpIC0gcG9p
bnQueCgpOworICAgIGludCB5ZGlzdGFuY2UgPSBjZW50ZXJQb2ludC55KCkgLSBwb2ludC55KCk7
CisgICAgaWYgKHdpZHRoKCkgPiBoZWlnaHQoKSkKKyAgICAgICAgeGRpc3RhbmNlID0gZGlzdGFu
Y2VUb0ludGVydmFsKHBvaW50LngoKSwgeCgpICsgKGhlaWdodCgpIC8gMiksIG1heFgoKSAtICho
ZWlnaHQoKSAvIDIpKTsKKyAgICBlbHNlCisgICAgICAgIHlkaXN0YW5jZSA9IGRpc3RhbmNlVG9J
bnRlcnZhbChwb2ludC55KCksIHkoKSArICh3aWR0aCgpIC8gMiksIG1heFkoKSAtICh3aWR0aCgp
IC8gMikpOworICAgIHJldHVybiBJbnRTaXplKHhkaXN0YW5jZSwgeWRpc3RhbmNlKTsKK30KKwog
SW50UmVjdCB1bmlvblJlY3QoY29uc3QgVmVjdG9yPEludFJlY3Q+JiByZWN0cykKIHsKICAgICBJ
bnRSZWN0IHJlc3VsdDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL0ludFJlY3QuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ludFJlY3Qu
aAppbmRleCA2MDBjMjFkMGRhZTAwOWE5MTk4YTVlYmYxMTlmMWU2NzM1MzU5NzQyLi5jYTdmZWE0
N2ExYzA4NDQ0YzBjMzlhNzViNGY5NzMwNTFmYTYyYWI4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbnRSZWN0LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvSW50UmVjdC5oCkBAIC0xODYsNiArMTg2LDExIEBAIHB1YmxpYzoKICAg
ICB2b2lkIGluZmxhdGUoaW50IGQpIHsgaW5mbGF0ZVgoZCk7IGluZmxhdGVZKGQpOyB9CiAgICAg
dm9pZCBzY2FsZShmbG9hdCBzKTsKIAorICAgIEludFNpemUgZGlmZmVyZW5jZVRvUG9pbnQoY29u
c3QgSW50UG9pbnQmKSBjb25zdDsKKyAgICBJbnRTaXplIGRpZmZlcmVuY2VGcm9tQ2VudGVyTGlu
ZVRvUG9pbnQoY29uc3QgSW50UG9pbnQmKSBjb25zdDsKKyAgICBpbnQgZGlzdGFuY2VTcXVhcmVk
VG9Qb2ludChjb25zdCBJbnRQb2ludCYgcCkgY29uc3QgeyByZXR1cm4gZGlmZmVyZW5jZVRvUG9p
bnQocCkuZGlhZ29uYWxMZW5ndGhTcXVhcmVkKCk7IH0KKyAgICBpbnQgZGlzdGFuY2VTcXVhcmVk
RnJvbUNlbnRlckxpbmVUb1BvaW50KGNvbnN0IEludFBvaW50JiBwKSBjb25zdCB7IHJldHVybiBk
aWZmZXJlbmNlRnJvbUNlbnRlckxpbmVUb1BvaW50KHApLmRpYWdvbmFsTGVuZ3RoU3F1YXJlZCgp
OyB9CisKICAgICBJbnRSZWN0IHRyYW5zcG9zZWRSZWN0KCkgY29uc3QgeyByZXR1cm4gSW50UmVj
dChtX2xvY2F0aW9uLnRyYW5zcG9zZWRQb2ludCgpLCBtX3NpemUudHJhbnNwb3NlZFNpemUoKSk7
IH0KIAogI2lmIFBMQVRGT1JNKFdYKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvSW50U2l6ZS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
SW50U2l6ZS5oCmluZGV4IDE2Mzk4NDc2NjJmNmU0ODFiMzY0ZGNjM2ZjMTZlYWYzOTdjYTQ5OWIu
LmYxMWY4MTVjNzQ2YWExNzIwYjZjNDg0YzA0MDQzNmYxMWQwNWQ4ZGMgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ludFNpemUuaAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbnRTaXplLmgKQEAgLTEwNCw2ICsxMDQsMTEgQEAgcHVi
bGljOgogICAgICAgICAqdGhpcyA9IGV4cGFuZGVkVG8oSW50U2l6ZSgpKTsKICAgICB9CiAKKyAg
ICBpbnQgZGlhZ29uYWxMZW5ndGhTcXVhcmVkKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVy
biBtX3dpZHRoICogbV93aWR0aCArIG1faGVpZ2h0ICogbV9oZWlnaHQ7CisgICAgfQorCiAgICAg
SW50U2l6ZSB0cmFuc3Bvc2VkU2l6ZSgpIGNvbnN0CiAgICAgewogICAgICAgICByZXR1cm4gSW50
U2l6ZShtX2hlaWdodCwgbV93aWR0aCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS90ZXN0
aW5nL0ludGVybmFscy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS90ZXN0aW5nL0ludGVybmFscy5jcHAK
aW5kZXggYWFmZTlhZGU3MGQyMGNjZjJiNDI4Yjc3OTI2NjhmYzVjN2Q5MmRlMS4uMGU4OWRiM2Fl
MmU5MGY1MTdmMWY2NjFmZWM5ZGEzY2UwM2M4OTM4NiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvdGVzdGluZy9JbnRlcm5hbHMuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Rlc3RpbmcvSW50
ZXJuYWxzLmNwcApAQCAtNjQsNiArNjQsMTEgQEAKICNpbmNsdWRlICJDb2xvckNob29zZXIuaCIK
ICNlbmRpZgogCisjaWYgRU5BQkxFKFRPVUNIX0FESlVTVE1FTlQpCisjaW5jbHVkZSAiRXZlbnRI
YW5kbGVyLmgiCisjaW5jbHVkZSAiV2ViS2l0UG9pbnQuaCIKKyNlbmRpZgorCiBuYW1lc3BhY2Ug
V2ViQ29yZSB7CiAKIHN0YXRpYyBib29sIG1hcmtlclR5cGVzRnJvbShjb25zdCBTdHJpbmcmIG1h
cmtlclR5cGUsIERvY3VtZW50TWFya2VyOjpNYXJrZXJUeXBlcyYgcmVzdWx0KQpAQCAtNTU5LDYg
KzU2NCw0NiBAQCBTdHJpbmcgSW50ZXJuYWxzOjpyYW5nZUFzVGV4dChjb25zdCBSYW5nZSogcmFu
Z2UsIEV4Y2VwdGlvbkNvZGUmIGVjKQogICAgIHJldHVybiByYW5nZS0+dGV4dCgpOwogfQogCisK
KyNpZiBFTkFCTEUoVE9VQ0hfQURKVVNUTUVOVCkKK1Bhc3NSZWZQdHI8V2ViS2l0UG9pbnQ+IElu
dGVybmFsczo6dG91Y2hQb3NpdGlvbkFkanVzdGVkVG9CZXN0Q2xpY2thYmxlTm9kZShsb25nIHgs
IGxvbmcgeSwgbG9uZyB3aWR0aCwgbG9uZyBoZWlnaHQsIERvY3VtZW50KiBkb2N1bWVudCwgRXhj
ZXB0aW9uQ29kZSYgZWMpCit7CisgICAgaWYgKCFkb2N1bWVudCB8fCAhZG9jdW1lbnQtPmZyYW1l
KCkpIHsKKyAgICAgICAgZWMgPSBJTlZBTElEX0FDQ0VTU19FUlI7CisgICAgICAgIHJldHVybiAw
OworICAgIH0KKworICAgIEludFNpemUgcmFkaXVzKHdpZHRoIC8gMiwgaGVpZ2h0IC8gMik7Cisg
ICAgSW50UG9pbnQgcG9pbnQoeCArIHJhZGl1cy53aWR0aCgpLCB5ICsgcmFkaXVzLmhlaWdodCgp
KTsKKworICAgIE5vZGUqIHRhcmdldE5vZGU7CisgICAgSW50UG9pbnQgYWRqdXN0ZWRQb2ludDsK
KworICAgIGRvY3VtZW50LT5mcmFtZSgpLT5ldmVudEhhbmRsZXIoKS0+YmVzdENsaWNrYWJsZU5v
ZGVGb3JUb3VjaFBvaW50KHBvaW50LCByYWRpdXMsIGFkanVzdGVkUG9pbnQsIHRhcmdldE5vZGUp
OworCisgICAgcmV0dXJuIFdlYktpdFBvaW50OjpjcmVhdGUoYWRqdXN0ZWRQb2ludC54KCksIGFk
anVzdGVkUG9pbnQueSgpKTsKK30KKworUGFzc1JlZlB0cjxOb2RlPiBJbnRlcm5hbHM6OnRvdWNo
Tm9kZUFkanVzdGVkVG9CZXN0Q2xpY2thYmxlTm9kZShsb25nIHgsIGxvbmcgeSwgbG9uZyB3aWR0
aCwgbG9uZyBoZWlnaHQsIERvY3VtZW50KiBkb2N1bWVudCwgRXhjZXB0aW9uQ29kZSYgZWMpCit7
CisgICAgaWYgKCFkb2N1bWVudCB8fCAhZG9jdW1lbnQtPmZyYW1lKCkpIHsKKyAgICAgICAgZWMg
PSBJTlZBTElEX0FDQ0VTU19FUlI7CisgICAgICAgIHJldHVybiAwOworICAgIH0KKworICAgIElu
dFNpemUgcmFkaXVzKHdpZHRoIC8gMiwgaGVpZ2h0IC8gMik7CisgICAgSW50UG9pbnQgcG9pbnQo
eCArIHJhZGl1cy53aWR0aCgpLCB5ICsgcmFkaXVzLmhlaWdodCgpKTsKKworICAgIE5vZGUqIHRh
cmdldE5vZGU7CisgICAgSW50UG9pbnQgYWRqdXN0ZWRQb2ludDsKKworICAgIGRvY3VtZW50LT5m
cmFtZSgpLT5ldmVudEhhbmRsZXIoKS0+YmVzdENsaWNrYWJsZU5vZGVGb3JUb3VjaFBvaW50KHBv
aW50LCByYWRpdXMsIGFkanVzdGVkUG9pbnQsIHRhcmdldE5vZGUpOworCisgICAgcmV0dXJuIGFk
b3B0UmVmKHRhcmdldE5vZGUpOworfQorI2VuZGlmCisKKwogaW50IEludGVybmFsczo6bGFzdFNw
ZWxsQ2hlY2tSZXF1ZXN0U2VxdWVuY2UoRG9jdW1lbnQqIGRvY3VtZW50LCBFeGNlcHRpb25Db2Rl
JiBlYykKIHsKICAgICBTcGVsbENoZWNrZXIqIGNoZWNrZXIgPSBzcGVsbGNoZWNrZXIoZG9jdW1l
bnQpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvdGVzdGluZy9JbnRlcm5hbHMuaCBiL1Nv
dXJjZS9XZWJDb3JlL3Rlc3RpbmcvSW50ZXJuYWxzLmgKaW5kZXggYWRhY2EzNGVkZWNjNmE1ZWM2
MTFkMThkMmM5M2IyODMwZTI4ZmJkOC4uMWQ2ODkzMjNkYTAyOWI3NGQzMzhjOGNhY2IxMmVhZjAw
YTM0NGVlMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvdGVzdGluZy9JbnRlcm5hbHMuaAor
KysgYi9Tb3VyY2UvV2ViQ29yZS90ZXN0aW5nL0ludGVybmFscy5oCkBAIC00Miw2ICs0Miw3IEBA
IGNsYXNzIEludGVybmFsU2V0dGluZ3M7CiBjbGFzcyBOb2RlOwogY2xhc3MgUmFuZ2U7CiBjbGFz
cyBTaGFkb3dSb290OworY2xhc3MgV2ViS2l0UG9pbnQ7CiAKIHR5cGVkZWYgaW50IEV4Y2VwdGlv
bkNvZGU7CiAKQEAgLTEwOCw2ICsxMDksMTEgQEAgcHVibGljOgogICAgIHVuc2lnbmVkIGxlbmd0
aEZyb21SYW5nZShFbGVtZW50KiBzY29wZSwgY29uc3QgUmFuZ2UqLCBFeGNlcHRpb25Db2RlJik7
CiAgICAgU3RyaW5nIHJhbmdlQXNUZXh0KGNvbnN0IFJhbmdlKiwgRXhjZXB0aW9uQ29kZSYpOwog
CisjaWYgRU5BQkxFKFRPVUNIX0FESlVTVE1FTlQpCisgICAgUGFzc1JlZlB0cjxXZWJLaXRQb2lu
dD4gdG91Y2hQb3NpdGlvbkFkanVzdGVkVG9CZXN0Q2xpY2thYmxlTm9kZShsb25nIHgsIGxvbmcg
eSwgbG9uZyB3aWR0aCwgbG9uZyBoZWlnaHQsIERvY3VtZW50KiwgRXhjZXB0aW9uQ29kZSYpOwor
ICAgIFBhc3NSZWZQdHI8Tm9kZT4gdG91Y2hOb2RlQWRqdXN0ZWRUb0Jlc3RDbGlja2FibGVOb2Rl
KGxvbmcgeCwgbG9uZyB5LCBsb25nIHdpZHRoLCBsb25nIGhlaWdodCwgRG9jdW1lbnQqLCBFeGNl
cHRpb25Db2RlJik7CisjZW5kaWYKKwogICAgIGludCBsYXN0U3BlbGxDaGVja1JlcXVlc3RTZXF1
ZW5jZShEb2N1bWVudCosIEV4Y2VwdGlvbkNvZGUmKTsKICAgICBpbnQgbGFzdFNwZWxsQ2hlY2tQ
cm9jZXNzZWRTZXF1ZW5jZShEb2N1bWVudCosIEV4Y2VwdGlvbkNvZGUmKTsKICAgICAKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Rlc3RpbmcvSW50ZXJuYWxzLmlkbCBiL1NvdXJjZS9XZWJD
b3JlL3Rlc3RpbmcvSW50ZXJuYWxzLmlkbAppbmRleCAzOTQzNzZlNzljYzVkM2MwYzdmZTExZTRi
NjQ3NzhhNTY0Mjg4ZGFjLi45NTc3NDU1YmMxZTc5OWVlNzQyYzY3MzVjZGU4NDdmNGIyZWViYTc1
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS90ZXN0aW5nL0ludGVybmFscy5pZGwKKysrIGIv
U291cmNlL1dlYkNvcmUvdGVzdGluZy9JbnRlcm5hbHMuaWRsCkBAIC04NCw2ICs4NCwxMSBAQCBt
b2R1bGUgd2luZG93IHsKICAgICAgICAgdW5zaWduZWQgbG9uZyBsZW5ndGhGcm9tUmFuZ2UoaW4g
RWxlbWVudCBzY29wZSwgaW4gUmFuZ2UgcmFuZ2UpIHJhaXNlcyAoRE9NRXhjZXB0aW9uKTsKICAg
ICAgICAgRE9NU3RyaW5nIHJhbmdlQXNUZXh0KGluIFJhbmdlIHJhbmdlKSByYWlzZXMgKERPTUV4
Y2VwdGlvbik7CiAKKyNpZiBkZWZpbmVkKEVOQUJMRV9UT1VDSF9BREpVU1RNRU5UKSAmJiBFTkFC
TEVfVE9VQ0hfQURKVVNUTUVOVAorICAgICAgICBXZWJLaXRQb2ludCB0b3VjaFBvc2l0aW9uQWRq
dXN0ZWRUb0Jlc3RDbGlja2FibGVOb2RlKGluIGxvbmcgeCwgaW4gbG9uZyB5LCBpbiBsb25nIHdp
ZHRoLCBpbiBsb25nIGhlaWdodCwgaW4gRG9jdW1lbnQgZG9jdW1lbnQpIHJhaXNlcyAoRE9NRXhj
ZXB0aW9uKTsKKyAgICAgICAgTm9kZSB0b3VjaE5vZGVBZGp1c3RlZFRvQmVzdENsaWNrYWJsZU5v
ZGUoaW4gbG9uZyB4LCBpbiBsb25nIHksIGluIGxvbmcgd2lkdGgsIGluIGxvbmcgaGVpZ2h0LCBp
biBEb2N1bWVudCBkb2N1bWVudCkgcmFpc2VzIChET01FeGNlcHRpb24pOworI2VuZGlmCisKICAg
ICAgICAgbG9uZyBsYXN0U3BlbGxDaGVja1JlcXVlc3RTZXF1ZW5jZShpbiBEb2N1bWVudCBkb2N1
bWVudCkgcmFpc2VzIChET01FeGNlcHRpb24pOwogICAgICAgICBsb25nIGxhc3RTcGVsbENoZWNr
UHJvY2Vzc2VkU2VxdWVuY2UoaW4gRG9jdW1lbnQgZG9jdW1lbnQpIHJhaXNlcyAoRE9NRXhjZXB0
aW9uKTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYlBhZ2VQcm94
eS5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViUGFnZVByb3h5LmNwcAppbmRleCA0
MDk3MzQ0OWE1ODg4NDM4ZTczMDU3NTZjM2QwYWNhYTMxNTFiYmY2Li5jNTIzYjVkMmRhODY3OWM4
ZDZlNDBjZmI1NjEzZWFkNDdmNTVjMDZjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVBy
b2Nlc3MvV2ViUGFnZVByb3h5LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2Vi
UGFnZVByb3h5LmNwcApAQCAtOTk5LDkgKzk5OSw5IEBAIHZvaWQgV2ViUGFnZVByb3h5OjpoYW5k
bGVHZXN0dXJlRXZlbnQoY29uc3QgV2ViR2VzdHVyZUV2ZW50JiBldmVudCkKIAogI2lmIEVOQUJM
RShUT1VDSF9FVkVOVFMpCiAjaWYgUExBVEZPUk0oUVQpCi12b2lkIFdlYlBhZ2VQcm94eTo6aGFu
ZGxlUG90ZW50aWFsQWN0aXZhdGlvbihjb25zdCBJbnRQb2ludCYgbGF5b3V0UG9pbnQpCit2b2lk
IFdlYlBhZ2VQcm94eTo6aGFuZGxlUG90ZW50aWFsQWN0aXZhdGlvbihjb25zdCBJbnRQb2ludCYg
dG91Y2hQb2ludCwgY29uc3QgSW50U2l6ZSYgdG91Y2hBcmVhKQogewotICAgIHByb2Nlc3MoKS0+
c2VuZChNZXNzYWdlczo6V2ViUGFnZTo6SGlnaGxpZ2h0UG90ZW50aWFsQWN0aXZhdGlvbihsYXlv
dXRQb2ludCksIG1fcGFnZUlEKTsKKyAgICBwcm9jZXNzKCktPnNlbmQoTWVzc2FnZXM6OldlYlBh
Z2U6OkhpZ2hsaWdodFBvdGVudGlhbEFjdGl2YXRpb24odG91Y2hQb2ludCwgdG91Y2hBcmVhKSwg
bV9wYWdlSUQpOwogfQogI2VuZGlmCiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJv
Y2Vzcy9XZWJQYWdlUHJveHkuaCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJQYWdlUHJv
eHkuaAppbmRleCA1MDQ5MjI4ZTIxOWRiYjhkODgwMGMxYzBkNTYwYWVhYmJmMjhkYmJjLi5kZmM2
MWM0ZGZjYTc2NzgzMmQ1NDM0N2ZlY2NmZDE5ZWMwZjlkZmNjIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViS2l0Mi9VSVByb2Nlc3MvV2ViUGFnZVByb3h5LmgKKysrIGIvU291cmNlL1dlYktpdDIvVUlQ
cm9jZXNzL1dlYlBhZ2VQcm94eS5oCkBAIC0zODYsNyArMzg2LDcgQEAgcHVibGljOgogI2lmIEVO
QUJMRShUT1VDSF9FVkVOVFMpCiAgICAgdm9pZCBoYW5kbGVUb3VjaEV2ZW50KGNvbnN0IE5hdGl2
ZVdlYlRvdWNoRXZlbnQmKTsKICNpZiBQTEFURk9STShRVCkKLSAgICB2b2lkIGhhbmRsZVBvdGVu
dGlhbEFjdGl2YXRpb24oY29uc3QgV2ViQ29yZTo6SW50UG9pbnQmKTsKKyAgICB2b2lkIGhhbmRs
ZVBvdGVudGlhbEFjdGl2YXRpb24oY29uc3QgV2ViQ29yZTo6SW50UG9pbnQmIHRvdWNoUG9pbnQs
IGNvbnN0IFdlYkNvcmU6OkludFNpemUmIHRvdWNoQXJlYSk7CiAjZW5kaWYKICNlbmRpZgogCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvcXQvUXRXZWJQYWdlRXZlbnRIYW5k
bGVyLmNwcCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9xdC9RdFdlYlBhZ2VFdmVudEhhbmRs
ZXIuY3BwCmluZGV4IDk1ZWQ0MzE5MTZkNDBmZDc1ODFkN2UzNzExNmMxZTg0NmFhZTU1M2IuLjJi
YmJiZjIwOTI1YzQyZjQ0MDVhNGM1OTY4NGY4ZGUwY2YwZGQ4YTEgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJLaXQyL1VJUHJvY2Vzcy9xdC9RdFdlYlBhZ2VFdmVudEhhbmRsZXIuY3BwCisrKyBiL1Nv
dXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9xdC9RdFdlYlBhZ2VFdmVudEhhbmRsZXIuY3BwCkBAIC0y
MzEsNyArMjMxLDcgQEAgdm9pZCBRdFdlYlBhZ2VFdmVudEhhbmRsZXI6OmhhbmRsZURyb3BFdmVu
dChRRHJvcEV2ZW50KiBldikKIHZvaWQgUXRXZWJQYWdlRXZlbnRIYW5kbGVyOjpoYW5kbGVQb3Rl
bnRpYWxTaW5nbGVUYXBFdmVudChjb25zdCBRVG91Y2hFdmVudDo6VG91Y2hQb2ludCYgcG9pbnQp
CiB7CiAgICAgUVRyYW5zZm9ybSBmcm9tSXRlbVRyYW5zZm9ybSA9IG1fd2ViUGFnZS0+dHJhbnNm
b3JtRnJvbUl0ZW0oKTsKLSAgICBtX3dlYlBhZ2VQcm94eS0+aGFuZGxlUG90ZW50aWFsQWN0aXZh
dGlvbihmcm9tSXRlbVRyYW5zZm9ybS5tYXAocG9pbnQucG9zKCkpLnRvUG9pbnQoKSk7CisgICAg
bV93ZWJQYWdlUHJveHktPmhhbmRsZVBvdGVudGlhbEFjdGl2YXRpb24oZnJvbUl0ZW1UcmFuc2Zv
cm0ubWFwKHBvaW50LnBvcygpKS50b1BvaW50KCksIEludFNpemUocG9pbnQucmVjdCgpLnNpemUo
KS50b1NpemUoKSkpOwogfQogCiB2b2lkIFF0V2ViUGFnZUV2ZW50SGFuZGxlcjo6aGFuZGxlU2lu
Z2xlVGFwRXZlbnQoY29uc3QgUVRvdWNoRXZlbnQ6OlRvdWNoUG9pbnQmIHBvaW50KQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UuY3BwIGIvU291
cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UuY3BwCmluZGV4IDlmOGI0MTdh
NWE5NWY1ZWRkYjFiNjA2MWE3ZjVjMWRjYjUwODYzYmUuLjQzYTVlNzgzZmYyNDA0M2RkZWIwYzll
ZWFiZjQxZDdkMjM1ZWJiMTkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3Mv
V2ViUGFnZS9XZWJQYWdlLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBh
Z2UvV2ViUGFnZS5jcHAKQEAgLTE0NDMsMTYgKzE0NDMsMjAgQEAgdm9pZCBXZWJQYWdlOjpyZXN0
b3JlU2Vzc2lvbkFuZE5hdmlnYXRlVG9DdXJyZW50SXRlbShjb25zdCBTZXNzaW9uU3RhdGUmIHNl
c3Npb24KIAogI2lmIEVOQUJMRShUT1VDSF9FVkVOVFMpCiAjaWYgUExBVEZPUk0oUVQpCi12b2lk
IFdlYlBhZ2U6OmhpZ2hsaWdodFBvdGVudGlhbEFjdGl2YXRpb24oY29uc3QgSW50UG9pbnQmIHBv
aW50KQordm9pZCBXZWJQYWdlOjpoaWdobGlnaHRQb3RlbnRpYWxBY3RpdmF0aW9uKGNvbnN0IElu
dFBvaW50JiBwb2ludCwgY29uc3QgSW50U2l6ZSYgYXJlYSkKIHsKICAgICBOb2RlKiBhY3RpdmF0
aW9uTm9kZSA9IDA7CiAgICAgRnJhbWUqIG1haW5mcmFtZSA9IG1fcGFnZS0+bWFpbkZyYW1lKCk7
CisgICAgSW50UG9pbnQgYWRqdXN0ZWRQb2ludDsKIAogICAgIGlmIChwb2ludCAhPSBJbnRQb2lu
dDo6emVybygpKSB7CisjaWYgRU5BQkxFKFRPVUNIX0FESlVTVE1FTlQpCisgICAgICAgIG1haW5m
cmFtZS0+ZXZlbnRIYW5kbGVyKCktPmJlc3RDbGlja2FibGVOb2RlRm9yVG91Y2hQb2ludChwb2lu
dCwgSW50U2l6ZShhcmVhLndpZHRoKCkgLyAyLCBhcmVhLmhlaWdodCgpIC8gMiksIGFkanVzdGVk
UG9pbnQsIGFjdGl2YXRpb25Ob2RlKTsKKyNlbHNlCiAgICAgICAgIEhpdFRlc3RSZXN1bHQgcmVz
dWx0ID0gbWFpbmZyYW1lLT5ldmVudEhhbmRsZXIoKS0+aGl0VGVzdFJlc3VsdEF0UG9pbnQobWFp
bmZyYW1lLT52aWV3KCktPndpbmRvd1RvQ29udGVudHMocG9pbnQpLCAvKmFsbG93U2hhZG93Q29u
dGVudCovIGZhbHNlLCAvKmlnbm9yZUNsaXBwaW5nKi8gdHJ1ZSk7CiAgICAgICAgIGFjdGl2YXRp
b25Ob2RlID0gcmVzdWx0LmlubmVyTm9kZSgpOwotCi0gICAgICAgIGlmICghYWN0aXZhdGlvbk5v
ZGUtPmlzRm9jdXNhYmxlKCkpCisjZW5kaWYKKyAgICAgICAgaWYgKGFjdGl2YXRpb25Ob2RlICYm
ICFhY3RpdmF0aW9uTm9kZS0+aXNGb2N1c2FibGUoKSkKICAgICAgICAgICAgIGFjdGl2YXRpb25O
b2RlID0gYWN0aXZhdGlvbk5vZGUtPmVuY2xvc2luZ0xpbmtFdmVudFBhcmVudE9yU2VsZigpOwog
ICAgIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1dl
YlBhZ2UuaCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmgKaW5k
ZXggYmM4NGUzNTljNDhlOGIzMDVhNGMwOWUzYzk3N2ZkNzE4NzE3MmQ4YS4uMWU0Y2Y5MmQ3NTVj
YzA1OGRkY2JjODNkZjg2MjgwN2IyZGVmN2ZkNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIv
V2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UuaAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9j
ZXNzL1dlYlBhZ2UvV2ViUGFnZS5oCkBAIC01NjMsNyArNTYzLDcgQEAgcHJpdmF0ZToKICAgICB2
b2lkIHRvdWNoRXZlbnQoY29uc3QgV2ViVG91Y2hFdmVudCYpOwogICAgIHZvaWQgdG91Y2hFdmVu
dFN5bmNGb3JUZXN0aW5nKGNvbnN0IFdlYlRvdWNoRXZlbnQmLCBib29sJiBoYW5kbGVkKTsKICNp
ZiBQTEFURk9STShRVCkKLSAgICB2b2lkIGhpZ2hsaWdodFBvdGVudGlhbEFjdGl2YXRpb24oY29u
c3QgV2ViQ29yZTo6SW50UG9pbnQmKTsKKyAgICB2b2lkIGhpZ2hsaWdodFBvdGVudGlhbEFjdGl2
YXRpb24oY29uc3QgV2ViQ29yZTo6SW50UG9pbnQmLCBjb25zdCBXZWJDb3JlOjpJbnRTaXplJiBh
cmVhKTsKICNlbmRpZgogI2VuZGlmCiAgICAgdm9pZCBjb250ZXh0TWVudUhpZGRlbigpIHsgbV9p
c1Nob3dpbmdDb250ZXh0TWVudSA9IGZhbHNlOyB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0
Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5tZXNzYWdlcy5pbiBiL1NvdXJjZS9XZWJLaXQy
L1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLm1lc3NhZ2VzLmluCmluZGV4IDJjOTQzNjA0Mjgz
MzE5MzJkZmEzODc1NzkwNzg1Y2EwODkyMGIyYzYuLmIxZmU1YmFmMjFkYTVlMTZhMDFiNWFlM2Zl
ODYxYWQ4MmYyNDk4ZjggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2Vi
UGFnZS9XZWJQYWdlLm1lc3NhZ2VzLmluCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3Mv
V2ViUGFnZS9XZWJQYWdlLm1lc3NhZ2VzLmluCkBAIC00MSw3ICs0MSw3IEBAIG1lc3NhZ2VzIC0+
IFdlYlBhZ2UgewogICAgIFRvdWNoRXZlbnQoV2ViS2l0OjpXZWJUb3VjaEV2ZW50IGV2ZW50KQog
ICAgIFRvdWNoRXZlbnRTeW5jRm9yVGVzdGluZyhXZWJLaXQ6OldlYlRvdWNoRXZlbnQgZXZlbnQp
IC0+IChib29sIGhhbmRsZWQpCiAjaWYgUExBVEZPUk0oUVQpCi0gICAgSGlnaGxpZ2h0UG90ZW50
aWFsQWN0aXZhdGlvbihXZWJDb3JlOjpJbnRQb2ludCBwb2ludCkKKyAgICBIaWdobGlnaHRQb3Rl
bnRpYWxBY3RpdmF0aW9uKFdlYkNvcmU6OkludFBvaW50IHBvaW50LCBXZWJDb3JlOjpJbnRTaXpl
IGFyZWEpCiAjZW5kaWYKICNlbmRpZgogCmRpZmYgLS1naXQgYS9Ub29scy9DaGFuZ2VMb2cgYi9U
b29scy9DaGFuZ2VMb2cKaW5kZXggMjczYjQ2ZjAxZTZjODk4NTQyMmJkYjFlMWMwYTZlMDIzNjE5
NTIxZi4uMGUzZWJjNTk5ODAwYWU4NmQwOTIzYmFjZTBkN2M2OGM3OTZhZTRiYSAxMDA2NDQKLS0t
IGEvVG9vbHMvQ2hhbmdlTG9nCisrKyBiL1Rvb2xzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE0IEBA
CisyMDEyLTAzLTA5ICBBbGxhbiBTYW5kZmVsZCBKZW5zZW4gIDxhbGxhbi5qZW5zZW5Abm9raWEu
Y29tPgorCisgICAgICAgIFNlbGVjdCBiZXN0IHRhcmdldCBmb3IgdGFwIGdlc3R1cmUuCisgICAg
ICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD03ODgwMQorCisgICAg
ICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEFkZCBUT1VDSF9BREpV
U1RNRU5UIHRvIGVuYWJsZWQgZmVhdHVyZXMuCisKKyAgICAgICAgKiBxbWFrZS9ta3NwZWNzL2Zl
YXR1cmVzL2ZlYXR1cmVzLnByZjoKKwogMjAxMi0wMy0wOSAgTmF0IER1Y2EgIDxuZHVjYUBjaHJv
bWl1bS5vcmc+CiAKICAgICAgICAgTWFrZSBjaGVjay13ZWJraXQtc3R5bGUgY29tcGxhaW4gYWJv
dXQgIm5vIG5ldyB0ZXN0cyIgbGluZXMgaW4gY2hhbmdlbG9ncwpkaWZmIC0tZ2l0IGEvVG9vbHMv
cW1ha2UvbWtzcGVjcy9mZWF0dXJlcy9mZWF0dXJlcy5wcmYgYi9Ub29scy9xbWFrZS9ta3NwZWNz
L2ZlYXR1cmVzL2ZlYXR1cmVzLnByZgppbmRleCA4NWU5YTRhMDgzNGEwMDk5N2E0ZTE1ZmRjNTVh
ODA4MjIwYzA3YjFkLi5lZmEyY2U2NzYxOGE1ZjJmMjBhNWVhOGQ1MGZlYzFiOTBhNTVmZGQzIDEw
MDY0NAotLS0gYS9Ub29scy9xbWFrZS9ta3NwZWNzL2ZlYXR1cmVzL2ZlYXR1cmVzLnByZgorKysg
Yi9Ub29scy9xbWFrZS9ta3NwZWNzL2ZlYXR1cmVzL2ZlYXR1cmVzLnByZgpAQCAtODgsNiArODgs
NyBAQCBoYXZlUXQoNSkgewogIWNvbnRhaW5zKERFRklORVMsIEVOQUJMRV9WSURFT19UUkFDSz0u
KTogREVGSU5FUyArPSBFTkFCTEVfVklERU9fVFJBQ0s9MAogIWNvbnRhaW5zKERFRklORVMsIEVO
QUJMRV9UT1VDSF9JQ09OX0xPQURJTkc9Lik6IERFRklORVMgKz0gRU5BQkxFX1RPVUNIX0lDT05f
TE9BRElORz0wCiAhY29udGFpbnMoREVGSU5FUywgRU5BQkxFX0FOSU1BVElPTl9BUEk9Lik6IERF
RklORVMgKz0gRU5BQkxFX0FOSU1BVElPTl9BUEk9MAorIWNvbnRhaW5zKERFRklORVMsIEVOQUJM
RV9UT1VDSF9BREpVU1RNRU5UPS4pOiBERUZJTkVTICs9IEVOQUJMRV9UT1VDSF9BREpVU1RNRU5U
PTEKIAogIyBQb2xpY3kgZGVjaXNpb25zOiBmb3IgdXNpbmcgYSBwYXJ0aWN1bGFyIHRoaXJkLXBh
cnR5IGxpYnJhcnkgb3Igb3B0aW9uYWwgT1Mgc2VydmljZQogIWNvbnRhaW5zKERFRklORVMsIFdU
Rl9VU0VfUVRfSU1BR0VfREVDT0RFUj0uKTogREVGSU5FUyArPSBXVEZfVVNFX1FUX0lNQUdFX0RF
Q09ERVI9MQpAQCAtMjY0LDYgKzI2NSw3IEBAIGNvbnRhaW5zKERFRklORVMsIEVOQUJMRV9WSURF
T19UUkFDSz0xKTogRkVBVFVSRV9ERUZJTkVTX0pBVkFTQ1JJUFQgKz0gRU5BQkxFX1ZJCiBjb250
YWlucyhERUZJTkVTLCBFTkFCTEVfREFUQV9UUkFOU0ZFUl9JVEVNUz0xKTogRkVBVFVSRV9ERUZJ
TkVTX0pBVkFTQ1JJUFQgKz0gRU5BQkxFX0RBVEFfVFJBTlNGRVJfSVRFTVM9MQogY29udGFpbnMo
REVGSU5FUywgRU5BQkxFX0ZVTExTQ1JFRU5fQVBJPTEpOiBGRUFUVVJFX0RFRklORVNfSkFWQVND
UklQVCArPSBFTkFCTEVfRlVMTFNDUkVFTl9BUEk9MQogY29udGFpbnMoREVGSU5FUywgRU5BQkxF
X1JFUVVFU1RfQU5JTUFUSU9OX0ZSQU1FPTEpOiBGRUFUVVJFX0RFRklORVNfSkFWQVNDUklQVCAr
PSBFTkFCTEVfUkVRVUVTVF9BTklNQVRJT05fRlJBTUU9MQorY29udGFpbnMoREVGSU5FUywgRU5B
QkxFX1RPVUNIX0FESlVTVE1FTlQ9MSk6IEZFQVRVUkVfREVGSU5FU19KQVZBU0NSSVBUICs9IEVO
QUJMRV9UT1VDSF9BREpVU1RNRU5UPTEKIAogIyBVc2VkIHRvIGNvbXB1dGUgZGVmYXVsdHMgZm9y
IHRoZSBidWlsZC13ZWJraXQgc2NyaXB0CiAjIERvbid0IHBsYWNlIGFueXRoaW5nIGFmdGVyIHRo
aXMhCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cgYi9MYXlvdXRUZXN0cy9DaGFu
Z2VMb2cKaW5kZXggZWM0M2ZjZjExMjA4Zjk3YWExNzUwZTc5MTkwYTY5OTE3NDlhYWIwMS4uOTll
ZTQ4MTAyZWIzMDZhZWI5ZWU0YjYwYjhhYjBkYmViZTQ4YWFjZSAxMDA2NDQKLS0tIGEvTGF5b3V0
VGVzdHMvQ2hhbmdlTG9nCisrKyBiL0xheW91dFRlc3RzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDI2
IEBACisyMDEyLTAzLTA5ICBBbGxhbiBTYW5kZmVsZCBKZW5zZW4gIDxhbGxhbi5qZW5zZW5Abm9r
aWEuY29tPgorCisgICAgICAgIFNlbGVjdCBiZXN0IHRhcmdldCBmb3IgdGFwIGdlc3R1cmUuCisg
ICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD03ODgwMQorCisg
ICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFRlc3Qgb2YgdG91
Y2ggYWRqdXN0bWVudHMuIFRlc3RzIHNldmVyYWwgYm90aCBub3JtYWwgYW5kIHRyaWNreSBjYXNl
cy4KKworICAgICAgICAqIHBsYXRmb3JtL2Nocm9taXVtL3Rlc3RfZXhwZWN0YXRpb25zLnR4dDoK
KyAgICAgICAgKiBwbGF0Zm9ybS9lZmwvU2tpcHBlZDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ndGsv
U2tpcHBlZDoKKyAgICAgICAgKiBwbGF0Zm9ybS9tYWMvU2tpcHBlZDoKKyAgICAgICAgKiBwbGF0
Zm9ybS93aW4vU2tpcHBlZDoKKyAgICAgICAgKiB0b3VjaGFkanVzdG1lbnQvZXZlbnQtdHJpZ2dl
cmVkLXdpZGdldHMtZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAgICAgKiB0b3VjaGFkanVzdG1l
bnQvZXZlbnQtdHJpZ2dlcmVkLXdpZGdldHMuaHRtbDogQWRkZWQuCisgICAgICAgICogdG91Y2hh
ZGp1c3RtZW50L2h0bWwtbGFiZWwtZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAgICAgKiB0b3Vj
aGFkanVzdG1lbnQvaHRtbC1sYWJlbC5odG1sOiBBZGRlZC4KKyAgICAgICAgKiB0b3VjaGFkanVz
dG1lbnQvbmVzdGVkLXRvdWNoLWV4cGVjdGVkLnR4dDogQWRkZWQuCisgICAgICAgICogdG91Y2hh
ZGp1c3RtZW50L25lc3RlZC10b3VjaC5odG1sOiBBZGRlZC4KKyAgICAgICAgKiB0b3VjaGFkanVz
dG1lbnQvdG91Y2gtaW5saW5lcy1leHBlY3RlZC50eHQ6IEFkZGVkLgorICAgICAgICAqIHRvdWNo
YWRqdXN0bWVudC90b3VjaC1pbmxpbmVzLmh0bWw6IEFkZGVkLgorCiAyMDEyLTAzLTA5ICBOw6Fu
ZG9yIEh1c3prYSAgPGh1c3prYS5uYW5kb3JAc3R1ZC51LXN6ZWdlZC5odT4KIAogICAgICAgICBb
UXRdIEdhcmRlbmluZywgc2tpcCAzIGZhaWxpbmcgdGVzdHMuCmRpZmYgLS1naXQgYS9MYXlvdXRU
ZXN0cy9wbGF0Zm9ybS9jaHJvbWl1bS90ZXN0X2V4cGVjdGF0aW9ucy50eHQgYi9MYXlvdXRUZXN0
cy9wbGF0Zm9ybS9jaHJvbWl1bS90ZXN0X2V4cGVjdGF0aW9ucy50eHQKaW5kZXggZWRhMWY0ZjQ1
MWIxNWIwMjU0M2EzYjE1ZTJhMDgyYzEwZDQ1MWRkOS4uMzIxMTRjYWIxZmI0NmViNGE1YjE5NDVh
OWJmY2NlMTg5OWMxNGFiYSAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvcGxhdGZvcm0vY2hyb21p
dW0vdGVzdF9leHBlY3RhdGlvbnMudHh0CisrKyBiL0xheW91dFRlc3RzL3BsYXRmb3JtL2Nocm9t
aXVtL3Rlc3RfZXhwZWN0YXRpb25zLnR4dApAQCAtMTE0LDYgKzExNCw5IEBAIEJVR0NSMTAzOTM5
IFNLSVAgOiBodHRwL3Rlc3RzL2FwcGNhY2hlL3dyb25nLWNvbnRlbnQtdHlwZS5odG1sID0gVEVY
VAogLy8gVmlicmF0aW9uIEFQSSBpcyBub3Qgc3VwcG9ydGVkIHlldCBpbiB0aGUgY2hyb21pdW0g
cG9ydC4KIEJVR1dLNzIwMTAgU0tJUCA6IGZhc3QvZG9tL25hdmlnYXRvci12aWJyYXRpb24uaHRt
bCA9IEZBSUwKIAorLy8gVG91Y2ggQWRqdXN0bWVudCBpcyBub3Qgc3VwcG9ydGVkIHlldCBpbiB0
aGUgY2hyb21pdW0gcG9ydC4KK0JVR1dLNzg4MDEgU0tJUCA6IHRvdWNoYWRqdXN0bWVudC8gPSBG
QUlMCisKIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tCiAvLyBXT05URklYIFRFU1RTCiAvLyAtLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpkaWZmIC0t
Z2l0IGEvTGF5b3V0VGVzdHMvcGxhdGZvcm0vZWZsL1NraXBwZWQgYi9MYXlvdXRUZXN0cy9wbGF0
Zm9ybS9lZmwvU2tpcHBlZAppbmRleCA5Y2U0ZGExN2M4NzcxYmZjNjJiNTAxMDZmMjg0OTdiYjgw
Y2NiN2U5Li5kOTg2ZmFmNjExYzUzMDNlMTZiYzkxODUzNjY3MjlkZGUzMjFjZDk2IDEwMDY0NAot
LS0gYS9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9lZmwvU2tpcHBlZAorKysgYi9MYXlvdXRUZXN0cy9w
bGF0Zm9ybS9lZmwvU2tpcHBlZApAQCAtMjc2Miw2ICsyNzYyLDEwIEBAIGZhc3QvZXZlbnRzL3Bh
Z2UtdmlzaWJpbGl0eS1pZnJhbWUtZGVsZXRlLXRlc3QuaHRtbAogZmFzdC9ldmVudHMvcGFnZS12
aXNpYmlsaXR5LWlmcmFtZS1wcm9wYWdhdGlvbi10ZXN0Lmh0bWwKIGZhc3QvZXZlbnRzL3BhZ2Ut
dmlzaWJpbGl0eS10cmFuc2l0aW9uLXRlc3QuaHRtbAogCisjIFRvdWNoIGFkanVzdG1lbnQgbm90
IGVuYWJsZWQKKyMgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTc4ODAx
Cit0b3VjaGFkanVzdG1lbnQKKwogIyBUaGVyZSBhcmUgbm8gZXhwZWN0ZWQgcmVzdWx0IHNldCB5
ZXQuCiBhbmltYXRpb25zL2FkZGl0aXZlLXRyYW5zZm9ybS1hbmltYXRpb25zLmh0bWwKIGFuaW1h
dGlvbnMvYW5pbWF0aW9uLWJvcmRlci1vdmVyZmxvdy5odG1sCmRpZmYgLS1naXQgYS9MYXlvdXRU
ZXN0cy9wbGF0Zm9ybS9ndGsvU2tpcHBlZCBiL0xheW91dFRlc3RzL3BsYXRmb3JtL2d0ay9Ta2lw
cGVkCmluZGV4IGVjMjdmNjJmODBlYWFhNmU0N2UwMzllMjNiNzVmZmJlMmVjYjI0MzMuLjc4MGRk
OGQ2ODczYmRmYjU3YmU1YzRkZGU5ODVmMDA0MmE4ODFmMjEgMTAwNjQ0Ci0tLSBhL0xheW91dFRl
c3RzL3BsYXRmb3JtL2d0ay9Ta2lwcGVkCisrKyBiL0xheW91dFRlc3RzL3BsYXRmb3JtL2d0ay9T
a2lwcGVkCkBAIC0xNTkwLDMgKzE1OTAsNyBAQCBwbHVnaW5zL25ldHNjYXBlLXBsdWdpbi1wYWdl
LWNhY2hlLXdvcmtzLmh0bWwKIAogIyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9ODA1MzQKIGZhc3QvZXZlbnRzL2F1dG9zY3JvbGwtaW4tdGV4dGZpZWxkLmh0bWwKKwor
IyBUb3VjaCBhZGp1c3RtZW50IG5vdCBlbmFibGVkCisjIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD03ODgwMQordG91Y2hhZGp1c3RtZW50CmRpZmYgLS1naXQgYS9MYXlv
dXRUZXN0cy9wbGF0Zm9ybS9tYWMvU2tpcHBlZCBiL0xheW91dFRlc3RzL3BsYXRmb3JtL21hYy9T
a2lwcGVkCmluZGV4IDZiMjE0OTBkODAxYjBiYjlmNDI0NDI3M2QyY2UxMDAwYzRlN2YzNjQuLmI2
YTcxMzc3NDNkNWQ3ZWNkMWM2ZGZmN2MxNGUzOGUwNjNkMjc0ZDggMTAwNjQ0Ci0tLSBhL0xheW91
dFRlc3RzL3BsYXRmb3JtL21hYy9Ta2lwcGVkCisrKyBiL0xheW91dFRlc3RzL3BsYXRmb3JtL21h
Yy9Ta2lwcGVkCkBAIC01NjksMyArNTY5LDcgQEAgZmFzdC9tdXRhdGlvbi9lbmQtb2YtdGFzay1k
ZWxpdmVyeS5odG1sCiAjIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD03
MjAxMAogIyBOZWVkcyBQYWdlQ2xpZW50czo6dmlicmF0aW9uQ2xpZW50KCkgaW1wbGVtZW50YXRp
b24uCiBmYXN0L2RvbS9uYXZpZ2F0b3ItdmlicmF0aW9uLmh0bWwKKworIyBUb3VjaCBhZGp1c3Rt
ZW50IG5vdCBlbmFibGVkCisjIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD03ODgwMQordG91Y2hhZGp1c3RtZW50CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9wbGF0Zm9y
bS93aW4vU2tpcHBlZCBiL0xheW91dFRlc3RzL3BsYXRmb3JtL3dpbi9Ta2lwcGVkCmluZGV4IGQx
NzkzOTM2MTNlOTEzY2Y1NmJhODQ5Njg5ODMzZDY2YWQ4MjljMmIuLmQ2MjkyN2VkODVmYmRiZmJm
ZWQwMzYwOGQ1MWMzMjYwODgyMjY4YTkgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL3BsYXRmb3Jt
L3dpbi9Ta2lwcGVkCisrKyBiL0xheW91dFRlc3RzL3BsYXRmb3JtL3dpbi9Ta2lwcGVkCkBAIC0x
NjYyLDYgKzE2NjIsMTAgQEAgZmFzdC9yZXBhaW50L3RyYW5zZm9ybS1hYnNvbHV0ZS1pbi1wb3Np
dGlvbmVkLWNvbnRhaW5lci5odG1sCiAjVmlicmF0aW9uIEFQSSBpcyBub3QgaW1wbGVtZW50ZWQu
CiBmYXN0L2RvbS9uYXZpZ2F0b3ItdmlicmF0aW9uLmh0bWwKIAorIyBUb3VjaCBhZGp1c3RtZW50
IG5vdCBlbmFibGVkCisjIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD03
ODgwMQordG91Y2hhZGp1c3RtZW50CisKICMgVGhvc2UgdGVzdHMgbmVlZCBhIHRleHQgYmFzZWxp
bmUgYWZ0ZXIgbGF6aWx5IGFsbG9jYXRpbmcgbGF5ZXJzLgogIyBUaGUgY2hhbmdlIHNob3VsZCBv
bmx5IGJlIGxheWVyIHJlbW92YWwuCiBhbmltYXRpb25zL2NvbWJvLXRyYW5zZm9ybS10cmFuc2xh
dGUrc2NhbGUuaHRtbApkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvdG91Y2hhZGp1c3RtZW50L2V2
ZW50LXRyaWdnZXJlZC13aWRnZXRzLWV4cGVjdGVkLnR4dCBiL0xheW91dFRlc3RzL3RvdWNoYWRq
dXN0bWVudC9ldmVudC10cmlnZ2VyZWQtd2lkZ2V0cy1leHBlY3RlZC50eHQKbmV3IGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4u
Zjk0ZTIwZTFkZjY0ZGQwOTFjMmFkODY1YTk3YzRjZTg0MmI2OTVlNQotLS0gL2Rldi9udWxsCisr
KyBiL0xheW91dFRlc3RzL3RvdWNoYWRqdXN0bWVudC9ldmVudC10cmlnZ2VyZWQtd2lkZ2V0cy1l
eHBlY3RlZC50eHQKQEAgLTAsMCArMSwzMSBAQAorVGVzdCB2YXJpb3VzIHdheXMgdG8gdHJpZ2dl
ciBpbnB1dC13aWRnZXRzLiBPbiBhIHRvdWNoIGludGVyZmFjZSwgYWxsIHRoZSBhY3Rpb25zIHNo
b3VsZCBiZSB0cmlnZ2VyYWJsZSB3aXRoIGVpdGhlciBhIHRvdWNoIGRvd24gb3IgYSB0b3VjaCB0
YXAuCisKK09uIHN1Y2Nlc3MsIHlvdSB3aWxsIHNlZSBhIHNlcmllcyBvZiAiUEFTUyIgbWVzc2Fn
ZXMsIGZvbGxvd2VkIGJ5ICJURVNUIENPTVBMRVRFIi4KKworCitUZXN0aW5nIHNtYWxsIGRpcmVj
dCBoaXRzCitQQVNTIGFkanVzdGVkTm9kZS5pZCBpcyBlbGVtZW50LmlkCitQQVNTIGFkanVzdGVk
Tm9kZS5pZCBpcyBlbGVtZW50LmlkCitQQVNTIGFkanVzdGVkTm9kZS5pZCBpcyBlbGVtZW50Lmlk
CitQQVNTIGFkanVzdGVkTm9kZS5pZCBpcyBub3QgZWxlbWVudC5pZAorUEFTUyBhZGp1c3RlZE5v
ZGUuaWQgaXMgZWxlbWVudC5pZAorVGVzdGluZyBsYXJnZSBkaXJlY3QgaGl0cworUEFTUyBhZGp1
c3RlZE5vZGUuaWQgaXMgZWxlbWVudC5pZAorUEFTUyBhZGp1c3RlZE5vZGUuaWQgaXMgZWxlbWVu
dC5pZAorUEFTUyBhZGp1c3RlZE5vZGUuaWQgaXMgZWxlbWVudC5pZAorUEFTUyBhZGp1c3RlZE5v
ZGUuaWQgaXMgbm90IGVsZW1lbnQuaWQKK1BBU1MgYWRqdXN0ZWROb2RlLmlkIGlzIGVsZW1lbnQu
aWQKK1Rlc3RpbmcgbGFyZ2UgZGlyZWN0IGhpdHMKK1BBU1MgYWRqdXN0ZWROb2RlLmlkIGlzIGVs
ZW1lbnQuaWQKK1BBU1MgYWRqdXN0ZWROb2RlLmlkIGlzIGVsZW1lbnQuaWQKK1BBU1MgYWRqdXN0
ZWROb2RlLmlkIGlzIGVsZW1lbnQuaWQKK1BBU1MgYWRqdXN0ZWROb2RlLmlkIGlzIG5vdCBlbGVt
ZW50LmlkCitQQVNTIGFkanVzdGVkTm9kZS5pZCBpcyBlbGVtZW50LmlkCitQQVNTIHN1Y2Nlc3Nm
dWxseVBhcnNlZCBpcyB0cnVlCisKK1RFU1QgQ09NUExFVEUKK0ZvY3VzIGhlcmUgc2hvdWxkIGdp
dmUgYSB0ZXh0IGlucHV0LWZpZWxkLgorTW91c2Utb3ZlciBoZXJlIHNob3VsZCBnaXZlIGEgdGV4
dCBpbnB1dC1maWVsZC4KK0hvdmVyaW5nIGhlcmUgc2hvdWxkIGdpdmUgYSB0ZXh0IGlucHV0LWZp
ZWxkLiAKK0ZvY3VzaW5nIGhlcmUgc2hvdWxkIG9ubHkgZ2l2ZSBmb2N1cyBvdXRsaW5lLgorRm9j
dXNpbmcgaGVyZSBzaG91bGQgZ2l2ZSBhIHRleHQgaW5wdXQtZmllbGQuCmRpZmYgLS1naXQgYS9M
YXlvdXRUZXN0cy90b3VjaGFkanVzdG1lbnQvZXZlbnQtdHJpZ2dlcmVkLXdpZGdldHMuaHRtbCBi
L0xheW91dFRlc3RzL3RvdWNoYWRqdXN0bWVudC9ldmVudC10cmlnZ2VyZWQtd2lkZ2V0cy5odG1s
Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAuLjEyNzliNzcyNjMzMzFmYzU5YmU0ZGJmNDFmOWYyOTBiNWI2NTNmN2MKLS0t
IC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy90b3VjaGFkanVzdG1lbnQvZXZlbnQtdHJpZ2dl
cmVkLXdpZGdldHMuaHRtbApAQCAtMCwwICsxLDE2OSBAQAorPGh0bWw+Cis8aGVhZD4KKzxzdHls
ZT4KKyAgICAuYm94IHsgYm9yZGVyOiAxcHggc29saWQgYmxhY2s7IGJvcmRlci1yYWRpdXM6IDVw
eCA1cHg7IG1hcmdpbjogMWVtOyBtYXgtd2lkdGg6IDQwZW07IH0KKzwvc3R5bGU+CisKKzxzY3Jp
cHQgc3JjPSIuLi9mYXN0L2pzL3Jlc291cmNlcy9qcy10ZXN0LXByZS5qcyI+PC9zY3JpcHQ+CisK
KzwvaGVhZD4KKworPGJvZHkgb25sb2FkPSJydW5UZXN0cygpIj4KKworPHAgaWQ9J2Rlc2NyaXB0
aW9uJz48L3A+CisKKzxkaXYgaWQ9J2NvbnNvbGUnPjwvZGl2PgorCis8c2NyaXB0PgorICAgIHZh
ciBlbGVtZW50OworICAgIHZhciBhZGp1c3RlZE5vZGU7CisgICAgZnVuY3Rpb24gZmluZEFic29s
dXRlUG9zaXRpb24obm9kZSkgeworICAgICAgICB2YXIgcG9zID0gbmV3IE9iamVjdCgpOworICAg
ICAgICBwb3MubGVmdCA9IDA7IHBvcy50b3AgPSAwOworICAgICAgICBkbyB7CisgICAgICAgICAg
ICBwb3MubGVmdCArPSBub2RlLm9mZnNldExlZnQ7CisgICAgICAgICAgICBwb3MudG9wICs9IG5v
ZGUub2Zmc2V0VG9wOworICAgICAgICB9IHdoaWxlIChub2RlID0gbm9kZS5vZmZzZXRQYXJlbnQp
OworICAgICAgICByZXR1cm4gcG9zOworICAgIH0KKworICAgIGZ1bmN0aW9uIHRlc3REaXJlY3RU
b3VjaChlbGVtZW50KQorICAgIHsKKyAgICAgICAgdmFyIHBvcyA9IGZpbmRBYnNvbHV0ZVBvc2l0
aW9uKGVsZW1lbnQpOworICAgICAgICB2YXIgeCA9IHBvcy5sZWZ0ICsgZWxlbWVudC5jbGllbnRX
aWR0aCAvIDIgLSAxOworICAgICAgICB2YXIgeSA9IHBvcy50b3AgKyBlbGVtZW50LmNsaWVudEhl
aWdodCAvIDIgLSAxOworICAgICAgICB2YXIgd2lkdGggPSAzOworICAgICAgICB2YXIgaGVpZ2h0
ID0gMzsKKyAgICAgICAgYWRqdXN0ZWROb2RlID0gaW50ZXJuYWxzLnRvdWNoTm9kZUFkanVzdGVk
VG9CZXN0Q2xpY2thYmxlTm9kZSh4LCB5LCB3aWR0aCwgaGVpZ2h0LCBkb2N1bWVudCk7CisKKyAg
ICAgICAgaWYgKGFkanVzdGVkTm9kZS5ub2RlVHlwZSA9PSAzKSAvLyBURVhUIG5vZGUKKyAgICAg
ICAgICAgIGFkanVzdGVkTm9kZSA9IGFkanVzdGVkTm9kZS5wYXJlbnROb2RlOworICAgIH0KKwor
ICAgIGZ1bmN0aW9uIHRlc3REaXJlY3RGYXRGaW5nZXIoZWxlbWVudCkKKyAgICB7CisgICAgICAg
IHZhciBwb3MgPSBmaW5kQWJzb2x1dGVQb3NpdGlvbihlbGVtZW50KTsKKyAgICAgICAgdmFyIHgg
PSBwb3MubGVmdCArIGVsZW1lbnQuY2xpZW50V2lkdGggLyAyIC0gMTsKKyAgICAgICAgdmFyIHkg
PSBwb3MudG9wIC0gNSA7CisgICAgICAgIHZhciB3aWR0aCA9IGVsZW1lbnQuY2xpZW50SGVpZ2h0
OworICAgICAgICB2YXIgaGVpZ2h0ID0gZWxlbWVudC5jbGllbnRIZWlnaHQgKyAxMDsKKyAgICAg
ICAgYWRqdXN0ZWROb2RlID0gaW50ZXJuYWxzLnRvdWNoTm9kZUFkanVzdGVkVG9CZXN0Q2xpY2th
YmxlTm9kZSh4LCB5LCB3aWR0aCwgaGVpZ2h0LCBkb2N1bWVudCk7CisgICAgICAgIGlmIChhZGp1
c3RlZE5vZGUubm9kZVR5cGUgPT0gMykgLy8gVEVYVCBub2RlCisgICAgICAgICAgICBhZGp1c3Rl
ZE5vZGUgPSBhZGp1c3RlZE5vZGUucGFyZW50Tm9kZTsKKyAgICB9CisKKyAgICBmdW5jdGlvbiB0
ZXN0SW5kaXJlY3RGYXRGaW5nZXIoZWxlbWVudCkKKyAgICB7CisgICAgICAgIHZhciBwb3MgPSBm
aW5kQWJzb2x1dGVQb3NpdGlvbihlbGVtZW50KTsKKyAgICAgICAgdmFyIHggPSBwb3MubGVmdCAr
IGVsZW1lbnQuY2xpZW50V2lkdGggLyAyIC0gMTsKKyAgICAgICAgdmFyIHkgPSBwb3MudG9wIC0g
NzsKKyAgICAgICAgdmFyIHdpZHRoID0gMTA7CisgICAgICAgIHZhciBoZWlnaHQgPSAxMDsKKyAg
ICAgICAgYWRqdXN0ZWROb2RlID0gaW50ZXJuYWxzLnRvdWNoTm9kZUFkanVzdGVkVG9CZXN0Q2xp
Y2thYmxlTm9kZSh4LCB5LCB3aWR0aCwgaGVpZ2h0LCBkb2N1bWVudCk7CisgICAgICAgIGlmIChh
ZGp1c3RlZE5vZGUubm9kZVR5cGUgPT0gMykgLy8gVEVYVCBub2RlCisgICAgICAgICAgICBhZGp1
c3RlZE5vZGUgPSBhZGp1c3RlZE5vZGUucGFyZW50Tm9kZTsKKyAgICB9CisKKyAgICBmdW5jdGlv
biB0ZXN0VG91Y2hIaXQoZWxlbWVudGlkLCB0b3VjaFR5cGUpIHsKKyAgICAgICAgZWxlbWVudCA9
IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGVsZW1lbnRpZCk7CisgICAgICAgIHRvdWNoVHlwZShl
bGVtZW50KTsKKyAgICAgICAgc2hvdWxkQmUoJ2FkanVzdGVkTm9kZS5pZCcsICdlbGVtZW50Lmlk
Jyk7CisgICAgfQorCisgICAgZnVuY3Rpb24gdGVzdFRvdWNoTWlzcyhlbGVtZW50aWQsIHRvdWNo
VHlwZSkgeworICAgICAgICBlbGVtZW50ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoZWxlbWVu
dGlkKTsKKyAgICAgICAgdG91Y2hUeXBlKGVsZW1lbnQpOworICAgICAgICBzaG91bGROb3RCZSgn
YWRqdXN0ZWROb2RlLmlkJywgJ2VsZW1lbnQuaWQnKTsKKyAgICB9CisKKyAgICBmdW5jdGlvbiB0
ZXN0RGlyZWN0VG91Y2hlcygpCisgICAgeworICAgICAgICBkZWJ1ZygnVGVzdGluZyBzbWFsbCBk
aXJlY3QgaGl0cycpOworICAgICAgICB0ZXN0VG91Y2hIaXQoJ3Rlc3QxJywgdGVzdERpcmVjdFRv
dWNoKTsKKyAgICAgICAgdGVzdFRvdWNoSGl0KCd0ZXN0MicsIHRlc3REaXJlY3RUb3VjaCk7Cisg
ICAgICAgIHRlc3RUb3VjaEhpdCgndGVzdDMnLCB0ZXN0RGlyZWN0VG91Y2gpOworICAgICAgICB0
ZXN0VG91Y2hNaXNzKCd0ZXN0NCcsIHRlc3REaXJlY3RUb3VjaCk7CisgICAgICAgIHRlc3RUb3Vj
aEhpdCgndGVzdDUnLCB0ZXN0RGlyZWN0VG91Y2gpOworICAgIH0KKworICAgIGZ1bmN0aW9uIHRl
c3REaXJlY3RGYXRGaW5nZXJzKCkKKyAgICB7CisgICAgICAgIGRlYnVnKCdUZXN0aW5nIGxhcmdl
IGRpcmVjdCBoaXRzJyk7CisgICAgICAgIHRlc3RUb3VjaEhpdCgndGVzdDEnLCB0ZXN0RGlyZWN0
RmF0RmluZ2VyKTsKKyAgICAgICAgdGVzdFRvdWNoSGl0KCd0ZXN0MicsIHRlc3REaXJlY3RGYXRG
aW5nZXIpOworICAgICAgICB0ZXN0VG91Y2hIaXQoJ3Rlc3QzJywgdGVzdERpcmVjdEZhdEZpbmdl
cik7CisgICAgICAgIHRlc3RUb3VjaE1pc3MoJ3Rlc3Q0JywgdGVzdERpcmVjdEZhdEZpbmdlcik7
CisgICAgICAgIHRlc3RUb3VjaEhpdCgndGVzdDUnLCB0ZXN0RGlyZWN0RmF0RmluZ2VyKTsKKyAg
ICB9CisKKyAgICBmdW5jdGlvbiB0ZXN0SW5kaXJlY3RGYXRGaW5nZXJzKCkKKyAgICB7CisgICAg
ICAgIGRlYnVnKCdUZXN0aW5nIGxhcmdlIGRpcmVjdCBoaXRzJyk7CisgICAgICAgIHRlc3RUb3Vj
aEhpdCgndGVzdDEnLCB0ZXN0SW5kaXJlY3RGYXRGaW5nZXIpOworICAgICAgICB0ZXN0VG91Y2hI
aXQoJ3Rlc3QyJywgdGVzdEluZGlyZWN0RmF0RmluZ2VyKTsKKyAgICAgICAgdGVzdFRvdWNoSGl0
KCd0ZXN0MycsIHRlc3RJbmRpcmVjdEZhdEZpbmdlcik7CisgICAgICAgIHRlc3RUb3VjaE1pc3Mo
J3Rlc3Q0JywgdGVzdEluZGlyZWN0RmF0RmluZ2VyKTsKKyAgICAgICAgdGVzdFRvdWNoSGl0KCd0
ZXN0NScsIHRlc3RJbmRpcmVjdEZhdEZpbmdlcik7CisgICAgfQorCisgICAgZnVuY3Rpb24gcnVu
VGVzdHMoKQorICAgIHsKKyAgICAgICAgaWYgKHdpbmRvdy5sYXlvdXRUZXN0Q29udHJvbGxlciAm
JiB3aW5kb3cuaW50ZXJuYWxzICYmIGludGVybmFscy50b3VjaE5vZGVBZGp1c3RlZFRvQmVzdENs
aWNrYWJsZU5vZGUpIHsKKyAgICAgICAgICAgIGRlc2NyaXB0aW9uKCdUZXN0IHZhcmlvdXMgd2F5
cyB0byB0cmlnZ2VyIGlucHV0LXdpZGdldHMuIE9uIGEgdG91Y2ggaW50ZXJmYWNlLCBhbGwgdGhl
IGFjdGlvbnMgc2hvdWxkIGJlIHRyaWdnZXJhYmxlIHdpdGggZWl0aGVyIGEgdG91Y2ggZG93biBv
ciBhIHRvdWNoIHRhcC4nKTsKKyAgICAgICAgICAgIGxheW91dFRlc3RDb250cm9sbGVyLmR1bXBB
c1RleHQoKTsKKyAgICAgICAgICAgIGxheW91dFRlc3RDb250cm9sbGVyLndhaXRVbnRpbERvbmUo
KTsKKyAgICAgICAgICAgIHRlc3REaXJlY3RUb3VjaGVzKCk7CisgICAgICAgICAgICB0ZXN0RGly
ZWN0RmF0RmluZ2VycygpOworICAgICAgICAgICAgdGVzdEluZGlyZWN0RmF0RmluZ2VycygpOwor
ICAgICAgICAgICAgaXNTdWNjZXNzZnVsbHlQYXJzZWQoKTsKKyAgICAgICAgICAgIGxheW91dFRl
c3RDb250cm9sbGVyLm5vdGlmeURvbmUoKTsKKyAgICAgICAgfQorICAgIH0KKzwvc2NyaXB0Pgor
Cis8c2NyaXB0PgorICAgIGZ1bmN0aW9uIHRyaWdnZXJJbnB1dCgpIHsKKyAgICAgICAgdmFyIGVs
ZW1lbnQgPSBldmVudC5zcmNFbGVtZW50OworICAgICAgICBpZiAoIWVsZW1lbnQub3Blbikgewor
ICAgICAgICAgICAgZWxlbWVudC5pbm5lckhUTUwgPSAnPGlucHV0IHR5cGU9dGV4dCBzdHlsZT0i
d2lkdGg6IDEwMCUiPjwvaW5wdXQ+JworICAgICAgICAgICAgZWxlbWVudC5vcGVuID0gdHJ1ZTsK
KyAgICAgICAgfQorICAgICAgICBlbGVtZW50LmZpcnN0Q2hpbGQuZm9jdXMoKTsKKyAgICB9Cis8
L3NjcmlwdD4KKworPGRpdiBpZD10ZXN0MSBjbGFzcz1ib3ggdGFiaW5kZXg9MSBvbmZvY3VzPSd0
cmlnZ2VySW5wdXQoKSc+CitGb2N1cyBoZXJlIHNob3VsZCBnaXZlIGEgdGV4dCBpbnB1dC1maWVs
ZC4KKzwvZGl2PgorCis8ZGl2IGlkPXRlc3QyIGNsYXNzPWJveCBvbm1vdXNlb3Zlcj0ndHJpZ2dl
cklucHV0KCknPiAKK01vdXNlLW92ZXIgaGVyZSBzaG91bGQgZ2l2ZSBhIHRleHQgaW5wdXQtZmll
bGQuCis8L2Rpdj4KKworPHN0eWxlPgorICAgIC5ib3g6bm90KDpob3ZlcikgLmhvdmVydHJpZ2dl
cmVkIHsgdmlzaWJpbGl0eTogaGlkZGVuO30KKyAgICAuYm94OmhvdmVyIC5ob3ZlcmZhbGxiYWNr
IHsgZGlzcGxheTogbm9uZTsgfSAgCis8L3N0eWxlPgorCis8ZGl2IGlkPXRlc3QzIGNsYXNzPWJv
eD4gCisgICAgPHNwYW4gY2xhc3M9aG92ZXJmYWxsYmFjaz5Ib3ZlcmluZyBoZXJlIHNob3VsZCBn
aXZlIGEgdGV4dCBpbnB1dC1maWVsZC48L3NwYW4+CisgICAgPGlucHV0IHR5cGU9dGV4dCBjbGFz
cz1ob3ZlcnRyaWdnZXJlZD48L2lucHV0PgorPC9kaXY+CisKKzxkaXYgaWQ9dGVzdDQgY2xhc3M9
Ym94IG9uZm9jdXM9J3RyaWdnZXJJbnB1dCgpJz4KKyAgICA8c3BhbiB0YWJpbmRleD0xPiBGb2N1
c2luZyBoZXJlIHNob3VsZCBvbmx5IGdpdmUgZm9jdXMgb3V0bGluZS4KKyAgICA8L3NwYW4+Cis8
L2Rpdj4KKworPGRpdiBpZD10ZXN0NSBjbGFzcz1ib3g+CisgICAgPHNwYW4gdGFiaW5kZXg9MT4g
Rm9jdXNpbmcgaGVyZSBzaG91bGQgZ2l2ZSBhIHRleHQgaW5wdXQtZmllbGQuCisgICAgPC9zcGFu
PgorPC9kaXY+CisKKzxzY3JpcHQ+CisgICAgdmFyIGVsZW1lbnQgPSBkb2N1bWVudC5nZXRFbGVt
ZW50QnlJZCgndGVzdDUnKTsKKyAgICBlbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ0RPTUZvY3Vz
SW4nLCB0cmlnZ2VySW5wdXQsIGZhbHNlKTsKKzwvc2NyaXB0PgorCis8L2JvZHk+Cis8L2h0bWw+
CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy90b3VjaGFkanVzdG1lbnQvaHRtbC1sYWJlbC1leHBl
Y3RlZC50eHQgYi9MYXlvdXRUZXN0cy90b3VjaGFkanVzdG1lbnQvaHRtbC1sYWJlbC1leHBlY3Rl
ZC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMC4uZjk2OWZkYjhkYmQ5OGZkMjQyMDhjYTRmZjBhZDMxM2JjZjJkNzMy
MwotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL3RvdWNoYWRqdXN0bWVudC9odG1sLWxh
YmVsLWV4cGVjdGVkLnR4dApAQCAtMCwwICsxLDIyIEBACitEbyBub3QgY2xpY2sgaGVyZQorQ2xp
Y2sgaGVyZSwgYnV0IG5vdCBoZXJlLiAKKworCisKK1Rlc3RzIGlmIGxhYmVscyBhcmUgdHJlYXRl
ZCBhcyBjbGlja2FibGUgaWYgdGhlIGlucHV0IHRoZXkgY29udHJvbCBpcy4KKworT24gc3VjY2Vz
cywgeW91IHdpbGwgc2VlIGEgc2VyaWVzIG9mICJQQVNTIiBtZXNzYWdlcywgZm9sbG93ZWQgYnkg
IlRFU1QgQ09NUExFVEUiLgorCisKK1Rlc3Rpbmcgc21hbGwgZGlyZWN0IGhpdHMuCitQQVNTIGFk
anVzdGVkTm9kZS5pZCBpcyAibXlsaW5rIgorUEFTUyBhZGp1c3RlZE5vZGUuaWQgaXMgIm15bGFi
ZWwiCitQQVNTIGFkanVzdGVkTm9kZS5pZCBpcyAibXlpbnB1dCIKK1Rlc3RpbmcgaW5kaXJlY3Qg
aGl0cy4KK1BBU1MgYWRqdXN0ZWROb2RlLmlkIGlzICJteWxpbmsiCitQQVNTIGFkanVzdGVkTm9k
ZS5pZCBpcyAibXlsYWJlbCIKK1BBU1MgYWRqdXN0ZWROb2RlLmlkIGlzICJteWlucHV0IgorUEFT
UyBzdWNjZXNzZnVsbHlQYXJzZWQgaXMgdHJ1ZQorCitURVNUIENPTVBMRVRFCisKZGlmZiAtLWdp
dCBhL0xheW91dFRlc3RzL3RvdWNoYWRqdXN0bWVudC9odG1sLWxhYmVsLmh0bWwgYi9MYXlvdXRU
ZXN0cy90b3VjaGFkanVzdG1lbnQvaHRtbC1sYWJlbC5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjFjMGNlN2Rm
MjA1OTAwYzMyOWYyN2YwZDZjZTY2ZDZiNGZjMjQ5NmYKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlv
dXRUZXN0cy90b3VjaGFkanVzdG1lbnQvaHRtbC1sYWJlbC5odG1sCkBAIC0wLDAgKzEsMTA4IEBA
Cis8aHRtbD4KKzxoZWFkPgorPHNjcmlwdCBzcmM9Ii4uL2Zhc3QvanMvcmVzb3VyY2VzL2pzLXRl
c3QtcHJlLmpzIj48L3NjcmlwdD4KKworPC9oZWFkPgorCis8Ym9keSBpZD0ibXlib2R5IiBvbmxv
YWQ9InJ1blRlc3RzKCkiPgorCis8YSBocmVmPSIjbXlmb3JtIiBpZD0ibXlsaW5rIj5EbyBub3Qg
Y2xpY2sgaGVyZTwvYT48YnI+Cis8Zm9ybSBpZD0ibXlmb3JtIj4KKzxsYWJlbCBmb3I9Im15aW5w
dXQiIGlkPSJteWxhYmVsIj5DbGljayBoZXJlLDwvbGFiZWw+Cis8c3BhbiBpZD0ibXlzcGFuIj5i
dXQgbm90IGhlcmUuPC9zcGFuPgorPGlucHV0IHR5cGU9InRleHQiIGlkPSJteWlucHV0IiB2YWx1
ZT0iVG8gZm9jdXMgdGhpcy4iPjwvaW5wdXQ+Cis8L2Zvcm0+Cis8YnI+PGJyPjxicj4KKworPHAg
aWQ9J2Rlc2NyaXB0aW9uJz48L3A+Cis8ZGl2IGlkPSdjb25zb2xlJz48L2Rpdj4KKworPHNjcmlw
dD4KKyAgICB2YXIgZWxlbWVudDsKKyAgICB2YXIgYWRqdXN0ZWROb2RlOworICAgIGZ1bmN0aW9u
IGZpbmRBYnNvbHV0ZVBvc2l0aW9uKG5vZGUpIHsKKyAgICAgICAgdmFyIHBvcyA9IG5ldyBPYmpl
Y3QoKTsKKyAgICAgICAgcG9zLmxlZnQgPSAwOyBwb3MudG9wID0gMDsKKyAgICAgICAgZG8gewor
ICAgICAgICAgICAgcG9zLmxlZnQgKz0gbm9kZS5vZmZzZXRMZWZ0OworICAgICAgICAgICAgcG9z
LnRvcCArPSBub2RlLm9mZnNldFRvcDsKKyAgICAgICAgfSB3aGlsZSAobm9kZSA9IG5vZGUub2Zm
c2V0UGFyZW50KTsKKyAgICAgICAgcmV0dXJuIHBvczsKKyAgICB9CisKKyAgICBmdW5jdGlvbiB0
ZXN0RGlyZWN0VG91Y2goZWxlbWVudCkKKyAgICB7CisgICAgICAgIHZhciBwb3MgPSBmaW5kQWJz
b2x1dGVQb3NpdGlvbihlbGVtZW50KTsKKyAgICAgICAgdmFyIHggPSBwb3MubGVmdCArIGVsZW1l
bnQuY2xpZW50V2lkdGggLyAyIC0gMjA7CisgICAgICAgIHZhciB5ID0gcG9zLnRvcCArIGVsZW1l
bnQuY2xpZW50SGVpZ2h0IC8gMiAtIDMwOworICAgICAgICB2YXIgd2lkdGggPSA0MDsKKyAgICAg
ICAgdmFyIGhlaWdodCA9IDYwOworICAgICAgICB2YXIgYWRqdXN0ZWROb2RlID0gaW50ZXJuYWxz
LnRvdWNoTm9kZUFkanVzdGVkVG9CZXN0Q2xpY2thYmxlTm9kZSh4LCB5LCB3aWR0aCwgaGVpZ2h0
LCBkb2N1bWVudCk7CisgICAgICAgIHdoaWxlIChhZGp1c3RlZE5vZGUubm9kZVR5cGUgIT0gMSkg
Ly8gTm90IGFuIGVsZW1lbnQuCisgICAgICAgICAgICBhZGp1c3RlZE5vZGUgPSBhZGp1c3RlZE5v
ZGUucGFyZW50Tm9kZTsKKyAgICAgICAgcmV0dXJuIGFkanVzdGVkTm9kZTsKKyAgICB9CisKKyAg
ICBmdW5jdGlvbiB0ZXN0SW5kaXJlY3RUb3VjaChlbGVtZW50KQorICAgIHsKKyAgICAgICAgLy8g
VG91Y2gganVzdCByaWdodCBvZiB0aGUgZWxlbWVudC4KKyAgICAgICAgdmFyIHBvcyA9IGZpbmRB
YnNvbHV0ZVBvc2l0aW9uKGVsZW1lbnQpOworICAgICAgICB2YXIgeCA9IHBvcy5sZWZ0ICsgZWxl
bWVudC5jbGllbnRXaWR0aCArIDEwIC0gMzA7CisgICAgICAgIHZhciB5ID0gcG9zLnRvcCArIGVs
ZW1lbnQuY2xpZW50SGVpZ2h0IC8gMiAtIDIwOworICAgICAgICB2YXIgd2lkdGggPSA2MDsKKyAg
ICAgICAgdmFyIGhlaWdodCA9IDQwOworICAgICAgICB2YXIgYWRqdXN0ZWROb2RlID0gaW50ZXJu
YWxzLnRvdWNoTm9kZUFkanVzdGVkVG9CZXN0Q2xpY2thYmxlTm9kZSh4LCB5LCB3aWR0aCwgaGVp
Z2h0LCBkb2N1bWVudCk7CisgICAgICAgIHdoaWxlIChhZGp1c3RlZE5vZGUubm9kZVR5cGUgIT0g
MSApIC8vIE5vdCBhbiBlbGVtZW50LgorICAgICAgICAgICAgYWRqdXN0ZWROb2RlID0gYWRqdXN0
ZWROb2RlLnBhcmVudE5vZGU7CisgICAgICAgIHJldHVybiBhZGp1c3RlZE5vZGU7CisgICAgfQor
CisgICAgZnVuY3Rpb24gdGVzdERpcmVjdFRvdWNoZXMoKQorICAgIHsKKyAgICAgICAgZGVidWco
J1Rlc3Rpbmcgc21hbGwgZGlyZWN0IGhpdHMuJyk7CisKKyAgICAgICAgZWxlbWVudCA9IGRvY3Vt
ZW50LmdldEVsZW1lbnRCeUlkKCdteWxpbmsnKTsKKyAgICAgICAgYWRqdXN0ZWROb2RlID0gdGVz
dERpcmVjdFRvdWNoKGVsZW1lbnQpOworICAgICAgICBzaG91bGRCZUVxdWFsVG9TdHJpbmcoJ2Fk
anVzdGVkTm9kZS5pZCcsICdteWxpbmsnKTsKKworICAgICAgICBlbGVtZW50ID0gZG9jdW1lbnQu
Z2V0RWxlbWVudEJ5SWQoJ215bGFiZWwnKTsKKyAgICAgICAgYWRqdXN0ZWROb2RlID0gdGVzdERp
cmVjdFRvdWNoKGVsZW1lbnQpOworICAgICAgICBzaG91bGRCZUVxdWFsVG9TdHJpbmcoJ2FkanVz
dGVkTm9kZS5pZCcsICdteWxhYmVsJyk7CisKKyAgICAgICAgZWxlbWVudCA9IGRvY3VtZW50Lmdl
dEVsZW1lbnRCeUlkKCdteWlucHV0Jyk7CisgICAgICAgIGFkanVzdGVkTm9kZSA9IHRlc3REaXJl
Y3RUb3VjaChlbGVtZW50KTsKKyAgICAgICAgc2hvdWxkQmVFcXVhbFRvU3RyaW5nKCdhZGp1c3Rl
ZE5vZGUuaWQnLCAnbXlpbnB1dCcpOworICAgIH0KKworICAgIGZ1bmN0aW9uIHRlc3RJbmRpcmVj
dFRvdWNoZXMoKQorICAgIHsKKyAgICAgICAgZGVidWcoJ1Rlc3RpbmcgaW5kaXJlY3QgaGl0cy4n
KTsKKworICAgICAgICBlbGVtZW50ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ215bGluaycp
OworICAgICAgICBhZGp1c3RlZE5vZGUgPSB0ZXN0SW5kaXJlY3RUb3VjaChlbGVtZW50KTsKKyAg
ICAgICAgc2hvdWxkQmVFcXVhbFRvU3RyaW5nKCdhZGp1c3RlZE5vZGUuaWQnLCAnbXlsaW5rJyk7
CisKKyAgICAgICAgZWxlbWVudCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdteWxhYmVsJyk7
CisgICAgICAgIGFkanVzdGVkTm9kZSA9IHRlc3RJbmRpcmVjdFRvdWNoKGVsZW1lbnQpOworICAg
ICAgICBzaG91bGRCZUVxdWFsVG9TdHJpbmcoJ2FkanVzdGVkTm9kZS5pZCcsICdteWxhYmVsJyk7
CisKKyAgICAgICAgZWxlbWVudCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdteWlucHV0Jyk7
CisgICAgICAgIGFkanVzdGVkTm9kZSA9IHRlc3RJbmRpcmVjdFRvdWNoKGVsZW1lbnQpOworICAg
ICAgICBzaG91bGRCZUVxdWFsVG9TdHJpbmcoJ2FkanVzdGVkTm9kZS5pZCcsICdteWlucHV0Jyk7
CisgICAgfQorCisgICAgZnVuY3Rpb24gcnVuVGVzdHMoKQorICAgIHsKKyAgICAgICAgaWYgKHdp
bmRvdy5sYXlvdXRUZXN0Q29udHJvbGxlciAmJiB3aW5kb3cuaW50ZXJuYWxzICYmIGludGVybmFs
cy50b3VjaE5vZGVBZGp1c3RlZFRvQmVzdENsaWNrYWJsZU5vZGUpIHsKKyAgICAgICAgICAgIGRl
c2NyaXB0aW9uKCdUZXN0cyBpZiBsYWJlbHMgYXJlIHRyZWF0ZWQgYXMgY2xpY2thYmxlIGlmIHRo
ZSBpbnB1dCB0aGV5IGNvbnRyb2wgaXMuJyk7CisgICAgICAgICAgICBsYXlvdXRUZXN0Q29udHJv
bGxlci5kdW1wQXNUZXh0KCk7CisgICAgICAgICAgICBsYXlvdXRUZXN0Q29udHJvbGxlci53YWl0
VW50aWxEb25lKCk7CisgICAgICAgICAgICB0ZXN0RGlyZWN0VG91Y2hlcygpOworICAgICAgICAg
ICAgdGVzdEluZGlyZWN0VG91Y2hlcygpOworICAgICAgICAgICAgaXNTdWNjZXNzZnVsbHlQYXJz
ZWQoKTsKKyAgICAgICAgICAgIGxheW91dFRlc3RDb250cm9sbGVyLm5vdGlmeURvbmUoKTsKKyAg
ICAgICAgfQorICAgIH0KKzwvc2NyaXB0PgorPC9ib2R5PgorPC9odG1sPgpkaWZmIC0tZ2l0IGEv
TGF5b3V0VGVzdHMvdG91Y2hhZGp1c3RtZW50L25lc3RlZC10b3VjaC1leHBlY3RlZC50eHQgYi9M
YXlvdXRUZXN0cy90b3VjaGFkanVzdG1lbnQvbmVzdGVkLXRvdWNoLWV4cGVjdGVkLnR4dApuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwLi43M2Q3YzQwNWNjN2JlNmY5YWI2NzdlODlkZmI2NjVjZmQyZGE4YTU4Ci0tLSAvZGV2
L251bGwKKysrIGIvTGF5b3V0VGVzdHMvdG91Y2hhZGp1c3RtZW50L25lc3RlZC10b3VjaC1leHBl
Y3RlZC50eHQKQEAgLTAsMCArMSwxOCBAQAorQm94IHdpdGggYSBsb2NhbCBjbGljayBoYW5kbGVy
LgorQm94IHdpdGhvdXQgYSBsb2NhbCBjbGljayBoYW5kbGVyLgorVGVzdCB0aGUgY2FzZSB3aGVy
ZSBhIGNsaWNrYWJsZSB0YXJnZXQgaXMgbmVzdGVkIGluc2lkZSBhIGRvY3VtZW50IHRoYXQgaXMg
bW9uaXRvcmluZyBjbGlja3MuIFRoZSB0YXJnZXQgd2l0aCB0aGUgbG9jYWwgZXZlbnQtaGFuZGxl
ciBzaG91bGQgYmUgY2hvc2VuIGlmIG11bHRpcGxlIHRhcmdldHMgYXJlIHRvdWNoZWQuCisKK09u
IHN1Y2Nlc3MsIHlvdSB3aWxsIHNlZSBhIHNlcmllcyBvZiAiUEFTUyIgbWVzc2FnZXMsIGZvbGxv
d2VkIGJ5ICJURVNUIENPTVBMRVRFIi4KKworCitUZXN0aW5nIHNtYWxsIGRpcmVjdCBoaXRzLgor
UEFTUyBhZGp1c3RlZE5vZGUuaWQgaXMgZWxlbWVudC5pZAorUEFTUyBhZGp1c3RlZE5vZGUuaWQg
aXMgZWxlbWVudC5pZAorVGVzdGluZyBwcmVmZXJlZCBoaXRzLgorUEFTUyBhZGp1c3RlZE5vZGUu
aWQgaXMgZWxlbWVudDEuaWQKK1BBU1MgYWRqdXN0ZWROb2RlLmlkIGlzIGVsZW1lbnQxLmlkCitQ
QVNTIGFkanVzdGVkTm9kZS5pZCBpcyBlbGVtZW50MS5pZAorUEFTUyBzdWNjZXNzZnVsbHlQYXJz
ZWQgaXMgdHJ1ZQorCitURVNUIENPTVBMRVRFCisKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3Rv
dWNoYWRqdXN0bWVudC9uZXN0ZWQtdG91Y2guaHRtbCBiL0xheW91dFRlc3RzL3RvdWNoYWRqdXN0
bWVudC9uZXN0ZWQtdG91Y2guaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi44ZjZiZGNkMTA1OWNkNmExNmNiZTVl
YjU5ZDUyZDIzNGFmOGRmNDZmCi0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvdG91Y2hh
ZGp1c3RtZW50L25lc3RlZC10b3VjaC5odG1sCkBAIC0wLDAgKzEsMTIwIEBACis8aHRtbD4KKzxo
ZWFkPgorPHN0eWxlPgorICAgIC5ib3ggeyBib3JkZXI6IDFweCBzb2xpZCBibGFjazsgYm9yZGVy
LXJhZGl1czogNXB4IDVweDsgbWFyZ2luOiAxZW07IG1heC13aWR0aDogNDBlbTsgfQorPC9zdHls
ZT4KKzxzY3JpcHQgc3JjPSIuLi9mYXN0L2pzL3Jlc291cmNlcy9qcy10ZXN0LXByZS5qcyI+PC9z
Y3JpcHQ+CisKKzwvaGVhZD4KKworPGJvZHkgb25sb2FkPSJydW5UZXN0cygpIj4KKworPGRpdiBj
bGFzcz1ib3ggaWQ9bXlib3gxPgorQm94IHdpdGggYSBsb2NhbCBjbGljayBoYW5kbGVyLgorPC9k
aXY+CisKKzxkaXYgY2xhc3M9Ym94IGlkPW15Ym94Mj4gCitCb3ggd2l0aG91dCBhIGxvY2FsIGNs
aWNrIGhhbmRsZXIuCis8L2Rpdj4KKworPHNjcmlwdD4KKyAgZnVuY3Rpb24gbW9uaXRvcihlKSB7
IGFsZXJ0KGUudGFyZ2V0ICsoIGUudGFyZ2V0LmlkID8gKCAnICMnICsgZS50YXJnZXQuaWQpIDog
JycpKTsgfTsKKyAgZnVuY3Rpb24gZG9Tb21ldGhpbmcoZSkge307CisKKyAgdmFyIGVsZW1lbnQg
PSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbXlib3gxJyk7CisgIGVsZW1lbnQuYWRkRXZlbnRM
aXN0ZW5lcignY2xpY2snLCBkb1NvbWV0aGluZywgZmFsc2UpOworICBlbGVtZW50ID0gZG9jdW1l
bnQuYm9keTsKKyAgZWxlbWVudC5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIG1vbml0b3IsIGZh
bHNlKTsKKzwvc2NyaXB0PgorCisKKzxwIGlkPSdkZXNjcmlwdGlvbic+PC9wPgorPGRpdiBpZD0n
Y29uc29sZSc+PC9kaXY+CisKKzxzY3JpcHQ+CisgICAgdmFyIGVsZW1lbnQ7CisgICAgdmFyIGFk
anVzdGVkTm9kZTsKKyAgICBmdW5jdGlvbiBmaW5kQWJzb2x1dGVQb3NpdGlvbihub2RlKSB7Cisg
ICAgICAgIHZhciBwb3MgPSBuZXcgT2JqZWN0KCk7CisgICAgICAgIHBvcy5sZWZ0ID0gMDsgcG9z
LnRvcCA9IDA7CisgICAgICAgIGRvIHsKKyAgICAgICAgICAgIHBvcy5sZWZ0ICs9IG5vZGUub2Zm
c2V0TGVmdDsKKyAgICAgICAgICAgIHBvcy50b3AgKz0gbm9kZS5vZmZzZXRUb3A7CisgICAgICAg
IH0gd2hpbGUgKG5vZGUgPSBub2RlLm9mZnNldFBhcmVudCk7CisgICAgICAgIHJldHVybiBwb3M7
CisgICAgfQorCisgICAgZnVuY3Rpb24gdGVzdERpcmVjdFRvdWNoKGVsZW1lbnQpCisgICAgewor
ICAgICAgICB2YXIgcG9zID0gZmluZEFic29sdXRlUG9zaXRpb24oZWxlbWVudCk7CisgICAgICAg
IHZhciB4ID0gcG9zLmxlZnQgKyBlbGVtZW50LmNsaWVudFdpZHRoIC8gMiAtIDE7CisgICAgICAg
IHZhciB5ID0gcG9zLnRvcCArIGVsZW1lbnQuY2xpZW50SGVpZ2h0IC8gMiAtIDE7CisgICAgICAg
IHZhciB3aWR0aCA9IDM7CisgICAgICAgIHZhciBoZWlnaHQgPSAzOworICAgICAgICB2YXIgYWRq
dXN0ZWROb2RlID0gaW50ZXJuYWxzLnRvdWNoTm9kZUFkanVzdGVkVG9CZXN0Q2xpY2thYmxlTm9k
ZSh4LCB5LCB3aWR0aCwgaGVpZ2h0LCBkb2N1bWVudCk7CisgICAgICAgIGlmIChhZGp1c3RlZE5v
ZGUubm9kZVR5cGUgPT0gMykgLy8gVEVYVCBub2RlCisgICAgICAgICAgICBhZGp1c3RlZE5vZGUg
PSBhZGp1c3RlZE5vZGUucGFyZW50Tm9kZTsKKyAgICAgICAgcmV0dXJuIGFkanVzdGVkTm9kZTsK
KyAgICB9CisKKyAgICBmdW5jdGlvbiB0ZXN0RG91YmxlVG91Y2goZWxlbWVudDEsIGVsZW1lbnQy
LCBvZmZzZXQpCisgICAgeworICAgICAgICB2YXIgcG9zMSA9IGZpbmRBYnNvbHV0ZVBvc2l0aW9u
KGVsZW1lbnQxKTsKKyAgICAgICAgdmFyIHBvczIgPSBmaW5kQWJzb2x1dGVQb3NpdGlvbihlbGVt
ZW50Mik7CisgICAgICAgIC8vIFdlIGFzc3VtZSB0aGUgZWxlbWVudHMgaGF2ZSB0aGUgc2FtZSB4
IGNvb3JkIGFuZCB3aWR0aC4KKyAgICAgICAgdmFyIHggPSBwb3MxLmxlZnQgKyBlbGVtZW50MS5j
bGllbnRXaWR0aC8yIC0gMTsKKyAgICAgICAgdmFyIHkxID0gcG9zMS50b3AgKyBlbGVtZW50MS5j
bGllbnRIZWlnaHQvMiArIDE7CisgICAgICAgIHZhciB5MiA9IHBvczIudG9wICsgZWxlbWVudDIu
Y2xpZW50SGVpZ2h0LzIgLSAxOworICAgICAgICB2YXIgd2lkdGggPSB5MiAtIHkxOworICAgICAg
ICB2YXIgaGVpZ2h0ID0geTIgLSB5MTsKKyAgICAgICAgdmFyIGFkanVzdGVkTm9kZSA9IGludGVy
bmFscy50b3VjaE5vZGVBZGp1c3RlZFRvQmVzdENsaWNrYWJsZU5vZGUoeCwgeTEsIHdpZHRoLCBo
ZWlnaHQsIGRvY3VtZW50KTsKKyAgICAgICAgaWYgKGFkanVzdGVkTm9kZS5ub2RlVHlwZSA9PSAz
KSAvLyBURVhUIG5vZGUKKyAgICAgICAgICAgIGFkanVzdGVkTm9kZSA9IGFkanVzdGVkTm9kZS5w
YXJlbnROb2RlOworICAgICAgICByZXR1cm4gYWRqdXN0ZWROb2RlOworICAgIH0KKworICAgIGZ1
bmN0aW9uIHRlc3REaXJlY3RUb3VjaGVzKCkKKyAgICB7CisgICAgICAgIGRlYnVnKCdUZXN0aW5n
IHNtYWxsIGRpcmVjdCBoaXRzLicpOworCisgICAgICAgIGVsZW1lbnQgPSBkb2N1bWVudC5nZXRF
bGVtZW50QnlJZCgnbXlib3gxJyk7CisgICAgICAgIGFkanVzdGVkTm9kZSA9IHRlc3REaXJlY3RU
b3VjaChlbGVtZW50KTsKKyAgICAgICAgc2hvdWxkQmUoJ2FkanVzdGVkTm9kZS5pZCcsICdlbGVt
ZW50LmlkJyk7CisKKyAgICAgICAgZWxlbWVudCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdt
eWJveDInKTsKKyAgICAgICAgYWRqdXN0ZWROb2RlID0gdGVzdERpcmVjdFRvdWNoKGVsZW1lbnQp
OworICAgICAgICBzaG91bGRCZSgnYWRqdXN0ZWROb2RlLmlkJywgJ2VsZW1lbnQuaWQnKTsKKyAg
ICB9CisKKyAgICBmdW5jdGlvbiB0ZXN0UHJlZmVyZWRUb3VjaCgpCisgICAgeworICAgICAgICBk
ZWJ1ZygnVGVzdGluZyBwcmVmZXJlZCBoaXRzLicpOworCisgICAgICAgIGVsZW1lbnQxID0gZG9j
dW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ215Ym94MScpOworICAgICAgICBlbGVtZW50MiA9IGRvY3Vt
ZW50LmdldEVsZW1lbnRCeUlkKCdteWJveDInKTsKKyAgICAgICAgYWRqdXN0ZWROb2RlID0gdGVz
dERvdWJsZVRvdWNoKGVsZW1lbnQxLCBlbGVtZW50MiwgMCk7CisgICAgICAgIHNob3VsZEJlKCdh
ZGp1c3RlZE5vZGUuaWQnLCAnZWxlbWVudDEuaWQnKTsKKworICAgICAgICAvLyBGaXJzdCB0ZXN0
IHdhcyBjZW50ZXJlZCwgbm93IG1vdmUgdGhlIHRlc3QgY2xvc2VyIHRvIHRoZSB3cm9uZyBub2Rl
LCBhbmQgZW5zdXJlIHdlIHN0aWxsIGdldCB0aGUgcHJlZmVyZWQgbm9kZS4KKyAgICAgICAgYWRq
dXN0ZWROb2RlID0gdGVzdERvdWJsZVRvdWNoKGVsZW1lbnQxLCBlbGVtZW50MiwgNSk7CisgICAg
ICAgIHNob3VsZEJlKCdhZGp1c3RlZE5vZGUuaWQnLCAnZWxlbWVudDEuaWQnKTsKKworICAgICAg
ICBhZGp1c3RlZE5vZGUgPSB0ZXN0RG91YmxlVG91Y2goZWxlbWVudDEsIGVsZW1lbnQyLCAxMCk7
CisgICAgICAgIHNob3VsZEJlKCdhZGp1c3RlZE5vZGUuaWQnLCAnZWxlbWVudDEuaWQnKTsKKyAg
ICB9CisKKyAgICBmdW5jdGlvbiBydW5UZXN0cygpCisgICAgeworICAgICAgICBpZiAod2luZG93
LmxheW91dFRlc3RDb250cm9sbGVyICYmIHdpbmRvdy5pbnRlcm5hbHMgJiYgaW50ZXJuYWxzLnRv
dWNoTm9kZUFkanVzdGVkVG9CZXN0Q2xpY2thYmxlTm9kZSkgeworICAgICAgICAgICAgZGVzY3Jp
cHRpb24oJ1Rlc3QgdGhlIGNhc2Ugd2hlcmUgYSBjbGlja2FibGUgdGFyZ2V0IGlzIG5lc3RlZCBp
bnNpZGUgYSBkb2N1bWVudCB0aGF0IGlzIG1vbml0b3JpbmcgY2xpY2tzLiBUaGUgdGFyZ2V0IHdp
dGggdGhlIGxvY2FsIGV2ZW50LWhhbmRsZXIgc2hvdWxkIGJlIGNob3NlbiBpZiBtdWx0aXBsZSB0
YXJnZXRzIGFyZSB0b3VjaGVkLicpOworICAgICAgICAgICAgbGF5b3V0VGVzdENvbnRyb2xsZXIu
ZHVtcEFzVGV4dCgpOworICAgICAgICAgICAgbGF5b3V0VGVzdENvbnRyb2xsZXIud2FpdFVudGls
RG9uZSgpOworICAgICAgICAgICAgdGVzdERpcmVjdFRvdWNoZXMoKTsKKyAgICAgICAgICAgIHRl
c3RQcmVmZXJlZFRvdWNoKCk7CisgICAgICAgICAgICBpc1N1Y2Nlc3NmdWxseVBhcnNlZCgpOwor
ICAgICAgICAgICAgbGF5b3V0VGVzdENvbnRyb2xsZXIubm90aWZ5RG9uZSgpOworICAgICAgICB9
CisgICAgfQorPC9zY3JpcHQ+Cis8L2JvZHk+Cis8L2h0bWw+CmRpZmYgLS1naXQgYS9MYXlvdXRU
ZXN0cy90b3VjaGFkanVzdG1lbnQvdG91Y2gtaW5saW5lcy1leHBlY3RlZC50eHQgYi9MYXlvdXRU
ZXN0cy90b3VjaGFkanVzdG1lbnQvdG91Y2gtaW5saW5lcy1leHBlY3RlZC50eHQKbmV3IGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MC4uOTc0YWQ4MmFlOTM5Y2VlZDIyMTFkYjM0MzM5NWVjNjQyNjM4YmM1NAotLS0gL2Rldi9udWxs
CisrKyBiL0xheW91dFRlc3RzL3RvdWNoYWRqdXN0bWVudC90b3VjaC1pbmxpbmVzLWV4cGVjdGVk
LnR4dApAQCAtMCwwICsxLDI5IEBACitzb21lIGxpbmsKK3NvbWUgbGluayBicmVha2luZyBsaW5l
cyBhbmQgbGluaworaG9sYSBtdW5kbyEgYSBzcGxpdCB1cCBsaW5rCitoZWxsbyB3b3JsZCBzb21l
IGxpbmsgYWxzbyBicmVha2luZworaGkgdGhlcmUgc29tZSBsaW5rIHRoYXQgaXMgYnJlYWtpbmcg
bXVsdGlwbGUgbGluZXMganVzdCBmb3IgdGhlIHZlcnkgZnVuIG9mIGl0CisKK1Rlc3QgdG91Y2gt
YWRqdXN0bWVudCBvbiBpbmxpbmUgbGlua3MuIE1ha2luZyBzdXJlIHdlIGNhbiBoaXQgb3ZlciBs
aW5lLWJyZWFrcywgYW5kIGNhbiBtaXNzIHdoZW4gdGFwcGluZyBiZXR3ZWVuIHBhcnRzIG9mIGEg
bGluZS1icm9rZW4gbGluay4KKworT24gc3VjY2VzcywgeW91IHdpbGwgc2VlIGEgc2VyaWVzIG9m
ICJQQVNTIiBtZXNzYWdlcywgZm9sbG93ZWQgYnkgIlRFU1QgQ09NUExFVEUiLgorCisKK1Rlc3Qg
c29tZSBkaXJlY3QgaGl0cy4KK1BBU1MgYWRqdXN0ZWROb2RlLmlkIGlzICIxIgorUEFTUyBhZGp1
c3RlZE5vZGUuaWQgaXMgIjIiCitQQVNTIGFkanVzdGVkTm9kZS5pZCBpcyAiNCIKK1BBU1MgYWRq
dXN0ZWROb2RlLmlkIGlzICI2IgorVGVzdCBhIGZldyBkaXJlY3QgbWlzc2VzLgorUEFTUyBhZGp1
c3RlZE5vZGUuaWQgaXMgIiIKK1BBU1MgYWRqdXN0ZWROb2RlLmlkIGlzICIiCitUZXN0IHNvbWUg
aW4tZGlyZWN0IGhpdHMuCitQQVNTIGFkanVzdGVkTm9kZS5pZCBpcyAiMiIKK1BBU1MgYWRqdXN0
ZWROb2RlLmlkIGlzICIzIgorUEFTUyBhZGp1c3RlZE5vZGUuaWQgaXMgIjQiCitQQVNTIGFkanVz
dGVkTm9kZS5pZCBpcyAiNCIKK1BBU1MgYWRqdXN0ZWROb2RlLmlkIGlzICI2IgorUEFTUyBzdWNj
ZXNzZnVsbHlQYXJzZWQgaXMgdHJ1ZQorCitURVNUIENPTVBMRVRFCisKZGlmZiAtLWdpdCBhL0xh
eW91dFRlc3RzL3RvdWNoYWRqdXN0bWVudC90b3VjaC1pbmxpbmVzLmh0bWwgYi9MYXlvdXRUZXN0
cy90b3VjaGFkanVzdG1lbnQvdG91Y2gtaW5saW5lcy5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmU5OTgwNGI3
M2Y4YWFmMjlhMmFkYTlhMWEzNjVmNGNhMDVlMTMwN2QKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlv
dXRUZXN0cy90b3VjaGFkanVzdG1lbnQvdG91Y2gtaW5saW5lcy5odG1sCkBAIC0wLDAgKzEsOTkg
QEAKKzxodG1sPgorPGhlYWQ+CisgICAgPHNjcmlwdCBzcmM9Ii4uL2Zhc3QvanMvcmVzb3VyY2Vz
L2pzLXRlc3QtcHJlLmpzIj48L3NjcmlwdD4KKzwvaGVhZD4KKzxib2R5IG9ubG9hZD0icnVuVGVz
dHMoKSI+CisKKzxwIHN0eWxlPSJ3aWR0aDogMTBlbTsiPgorPGEgaWQ9IjEiIGhyZWY9IiMxIj5z
b21lIGxpbms8L2E+PGJyPgorPGEgaWQ9IjIiIGhyZWY9IiMyIj5zb21lIGxpbmsgYnJlYWtpbmcg
bGluZXM8L2E+IGFuZCA8YSBpZD0iMyIgaHJlZj0iIzMiPmxpbms8L2E+PGJyPgoraG9sYSBtdW5k
byEgPGEgaWQ9IjQiIGhyZWY9IiM0Ij5hIHNwbGl0IHVwIGxpbms8L2E+PGJyPgoraGVsbG8gd29y
bGQgPGEgaWQ9IjUiIGhyZWY9IiM1Ij5zb21lIGxpbmsgYWxzbyBicmVha2luZzwvYT48YnI+Cito
aSB0aGVyZSA8YSBpZD0iNiIgaHJlZj0iIzYiPnNvbWUgbGluayB0aGF0IGlzIGJyZWFraW5nIG11
bHRpcGxlIGxpbmVzIGp1c3QgZm9yIHRoZSB2ZXJ5IGZ1biBvZiBpdDwvYT48YnI+PGJyPgorPC9w
PgorCisKKzxwIGlkPSdkZXNjcmlwdGlvbic+PC9wPgorPGRpdiBpZD0nY29uc29sZSc+PC9kaXY+
CisKKzxzY3JpcHQ+CisgICAgdmFyIGVsZW1lbnQ7CisgICAgdmFyIGFkanVzdGVkTm9kZTsKKyAg
ICBmdW5jdGlvbiB0ZXN0Um91bmRUb3VjaCh4LCB5LCByYWRpdXMpCisgICAgeworICAgICAgICB2
YXIgeCA9IHggLSByYWRpdXM7CisgICAgICAgIHZhciB5ID0geSAtIHJhZGl1czsKKyAgICAgICAg
dmFyIHdpZHRoID0gcmFkaXVzICogMjsKKyAgICAgICAgdmFyIGhlaWdodCA9IHJhZGl1cyAqIDI7
CisgICAgICAgIHZhciBhZGp1c3RlZE5vZGUgPSBpbnRlcm5hbHMudG91Y2hOb2RlQWRqdXN0ZWRU
b0Jlc3RDbGlja2FibGVOb2RlKHgsIHksIHdpZHRoLCBoZWlnaHQsIGRvY3VtZW50KTsKKyAgICAg
ICAgaWYgKGFkanVzdGVkTm9kZS5ub2RlVHlwZSA9PSAzKSAvLyBURVhUIG5vZGUKKyAgICAgICAg
ICAgIGFkanVzdGVkTm9kZSA9IGFkanVzdGVkTm9kZS5wYXJlbnROb2RlOworICAgICAgICByZXR1
cm4gYWRqdXN0ZWROb2RlOworICAgIH0KKworICAgIGZ1bmN0aW9uIHRlc3REaXJlY3RUb3VjaGVz
KCkKKyAgICB7CisgICAgICAgIGRlYnVnKCdUZXN0IHNvbWUgZGlyZWN0IGhpdHMuJyk7CisKKyAg
ICAgICAgYWRqdXN0ZWROb2RlID0gdGVzdFJvdW5kVG91Y2goMzAsIDIwLCA4KQorICAgICAgICBz
aG91bGRCZUVxdWFsVG9TdHJpbmcoJ2FkanVzdGVkTm9kZS5pZCcsICcxJyk7CisKKyAgICAgICAg
YWRqdXN0ZWROb2RlID0gdGVzdFJvdW5kVG91Y2goMzAsIDYwLCA4KQorICAgICAgICBzaG91bGRC
ZUVxdWFsVG9TdHJpbmcoJ2FkanVzdGVkTm9kZS5pZCcsICcyJyk7CisKKyAgICAgICAgYWRqdXN0
ZWROb2RlID0gdGVzdFJvdW5kVG91Y2goMTIwLCA4MCwgOCkKKyAgICAgICAgc2hvdWxkQmVFcXVh
bFRvU3RyaW5nKCdhZGp1c3RlZE5vZGUuaWQnLCAnNCcpOworCisgICAgICAgIGFkanVzdGVkTm9k
ZSA9IHRlc3RSb3VuZFRvdWNoKDgwLCAxODAsIDgpCisgICAgICAgIHNob3VsZEJlRXF1YWxUb1N0
cmluZygnYWRqdXN0ZWROb2RlLmlkJywgJzYnKTsKKyAgICB9CisKKyAgICBmdW5jdGlvbiB0ZXN0
RGlyZWN0TWlzc2VzKCkKKyAgICB7CisgICAgICAgIGRlYnVnKCdUZXN0IGEgZmV3IGRpcmVjdCBt
aXNzZXMuJyk7CisKKyAgICAgICAgYWRqdXN0ZWROb2RlID0gdGVzdFJvdW5kVG91Y2goNTYsIDYw
LCA4KQorICAgICAgICBzaG91bGRCZUVxdWFsVG9TdHJpbmcoJ2FkanVzdGVkTm9kZS5pZCcsICcn
KTsKKworICAgICAgICBhZGp1c3RlZE5vZGUgPSB0ZXN0Um91bmRUb3VjaCgyMCwgMTYwLCA0KQor
ICAgICAgICBzaG91bGRCZUVxdWFsVG9TdHJpbmcoJ2FkanVzdGVkTm9kZS5pZCcsICcnKTsKKwor
ICAgIH0KKworICAgIGZ1bmN0aW9uIHRlc3RJbmRpcmVjdFRvdWNoZXMoKQorICAgIHsKKyAgICAg
ICAgZGVidWcoJ1Rlc3Qgc29tZSBpbi1kaXJlY3QgaGl0cy4nKTsKKworICAgICAgICBhZGp1c3Rl
ZE5vZGUgPSB0ZXN0Um91bmRUb3VjaCg1NiwgNjAsIDIwKQorICAgICAgICBzaG91bGRCZUVxdWFs
VG9TdHJpbmcoJ2FkanVzdGVkTm9kZS5pZCcsICcyJyk7CisKKyAgICAgICAgYWRqdXN0ZWROb2Rl
ID0gdGVzdFJvdW5kVG91Y2goODUsIDgwLCAyMCkKKyAgICAgICAgc2hvdWxkQmVFcXVhbFRvU3Ry
aW5nKCdhZGp1c3RlZE5vZGUuaWQnLCAnMycpOworCisgICAgICAgIGFkanVzdGVkTm9kZSA9IHRl
c3RSb3VuZFRvdWNoKDEyMCwgNjAsIDIwKQorICAgICAgICBzaG91bGRCZUVxdWFsVG9TdHJpbmco
J2FkanVzdGVkTm9kZS5pZCcsICc0Jyk7CisKKyAgICAgICAgYWRqdXN0ZWROb2RlID0gdGVzdFJv
dW5kVG91Y2goNDAsIDEwMCwgMjApCisgICAgICAgIHNob3VsZEJlRXF1YWxUb1N0cmluZygnYWRq
dXN0ZWROb2RlLmlkJywgJzQnKTsKKworICAgICAgICBhZGp1c3RlZE5vZGUgPSB0ZXN0Um91bmRU
b3VjaCgyMCwgMTY1LCAyMCkKKyAgICAgICAgc2hvdWxkQmVFcXVhbFRvU3RyaW5nKCdhZGp1c3Rl
ZE5vZGUuaWQnLCAnNicpOworCisgICAgfQorCisgICAgZnVuY3Rpb24gcnVuVGVzdHMoKQorICAg
IHsKKyAgICAgICAgaWYgKHdpbmRvdy5sYXlvdXRUZXN0Q29udHJvbGxlciAmJiB3aW5kb3cuaW50
ZXJuYWxzICYmIGludGVybmFscy50b3VjaE5vZGVBZGp1c3RlZFRvQmVzdENsaWNrYWJsZU5vZGUp
IHsKKyAgICAgICAgICAgIGRlc2NyaXB0aW9uKCdUZXN0IHRvdWNoLWFkanVzdG1lbnQgb24gaW5s
aW5lIGxpbmtzLiBNYWtpbmcgc3VyZSB3ZSBjYW4gaGl0IG92ZXIgbGluZS1icmVha3MsIGFuZCBj
YW4gbWlzcyB3aGVuIHRhcHBpbmcgYmV0d2VlbiBwYXJ0cyBvZiBhIGxpbmUtYnJva2VuIGxpbmsu
Jyk7CisgICAgICAgICAgICBsYXlvdXRUZXN0Q29udHJvbGxlci5kdW1wQXNUZXh0KCk7CisgICAg
ICAgICAgICBsYXlvdXRUZXN0Q29udHJvbGxlci53YWl0VW50aWxEb25lKCk7CisgICAgICAgICAg
ICB0ZXN0RGlyZWN0VG91Y2hlcygpOworICAgICAgICAgICAgdGVzdERpcmVjdE1pc3NlcygpOwor
ICAgICAgICAgICAgdGVzdEluZGlyZWN0VG91Y2hlcygpOworICAgICAgICAgICAgaXNTdWNjZXNz
ZnVsbHlQYXJzZWQoKTsKKyAgICAgICAgICAgIGxheW91dFRlc3RDb250cm9sbGVyLm5vdGlmeURv
bmUoKTsKKyAgICAgICAgfQorICAgIH0KKzwvc2NyaXB0PgorPC9ib2R5PgorPC9odG1sPgo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>131334</attachid>
            <date>2012-03-12 09:22:12 -0700</date>
            <delta_ts>2012-03-19 07:05:24 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-78801-20120312172210.patch</filename>
            <type>text/plain</type>
            <size>63986</size>
            <attacher name="Allan Sandfeld Jensen">allan.jensen</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTEwNDE3CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZWI1MWVhOGMzMmMwM2Jl
YmVlNWU1MzQwNGRhZDJlZGE3OTc4YjA5Ny4uYzdhNjdhM2U4YjBkNWE5ZDVlYTgxZmExNTY3ZmU2
ZTM0MTFjODkwNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDYxIEBACisyMDEyLTAzLTEyICBBbGxh
biBTYW5kZmVsZCBKZW5zZW4gIDxhbGxhbi5qZW5zZW5Abm9raWEuY29tPgorCisgICAgICAgIFNl
bGVjdCBiZXN0IHRhcmdldCBmb3IgdGFwIGdlc3R1cmUuCisgICAgICAgIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD03ODgwMQorCisgICAgICAgIFJldmlld2VkIGJ5IE5P
Qk9EWSAoT09QUyEpLgorCisgICAgICAgIFRoZSBuZXcgQVBJIGlzIGF2YWlsYWJsZSB0aHJvdWdo
IEV2ZW50SGFuZGxlcjo6YmVzdENsaWNrYWJsZU5vZGVGb3JUb3VjaFBvaW50LCBidXQKKyAgICAg
ICAgaW1wbGVtZW50YXRpb24gZGV0YWlscyBoYXZlIGJlZW4gcGxhY2VkIGluIHBhZ2UvVG91Y2hB
ZGp1c3RtZW50LgorCisgICAgICAgIFRoZSBkZWZhdWx0IGhpdCBkZXRlY3Rpb24gaXMgcGVyZm9y
bWVkIGJ5IG1lYXN1cmluZyB0aGUgZGlzdGFuY2UgdG8gdGhlIGNlbnRlcgorICAgICAgICBsaW5l
cyBvZiB0aGUgYWJzb2x1dGUgcmVjdHMgb2YgdGhlIGhpdCBub2Rlcy4gQWJzb2x1dGUgcmVjdHMg
YXJlIHVzZWQgaW5zdGVhZAorICAgICAgICBvZiBib3VuZGluZyByZWN0cyB0byBtYWtlIGhpdC1k
ZXRlY3RpbmcgYWdhaW5zdCBsaW5rcyBvdmVyIGxpbmUgYnJlYWtzLiBEaXN0YW5jZQorICAgICAg
ICB0byBjZW50ZXIgbGluZSBpcyB1c2VkIHRvIG1ha2UgaXQgZWFzaWVyIHRvIGhpdCBzbWFsbCBs
aW5rcyBuZXh0IHRvIGxhcmdlIGxpbmtzLgorICAgICAgICBGb3IgbGluZS1yZWN0cyB0aGUgZGlz
dGFuY2UgdG8gdGhlIGNlbnRlci1saW5lIGlzIGEgYmV0dGVyIGV4cHJlc3Npb24gb2YgdGhlIGRp
c3RhbmNlCisgICAgICAgIHRvIGEgcmVjdGFuZ2xlcyBjZW50ZXIgdGhhbiB0aGUgZGlzdGFuY2Ug
dG8gdGhlIGNlbnRlci1wb2ludC4KKworICAgICAgICBUZXN0czogdG91Y2hhZGp1c3RtZW50L2V2
ZW50LXRyaWdnZXJlZC13aWRnZXRzLmh0bWwKKyAgICAgICAgICAgICAgIHRvdWNoYWRqdXN0bWVu
dC9odG1sLWxhYmVsLmh0bWwKKyAgICAgICAgICAgICAgIHRvdWNoYWRqdXN0bWVudC9uZXN0ZWQt
dG91Y2guaHRtbAorICAgICAgICAgICAgICAgdG91Y2hhZGp1c3RtZW50L3RvdWNoLWlubGluZXMu
aHRtbAorCisgICAgICAgICogVGFyZ2V0LnByaToKKyAgICAgICAgKiBwYWdlL0V2ZW50SGFuZGxl
ci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpFdmVudEhhbmRsZXI6OmhhbmRsZUdlc3R1cmVUYXAp
OgorICAgICAgICAoV2ViQ29yZTo6RXZlbnRIYW5kbGVyOjpiZXN0Q2xpY2thYmxlTm9kZUZvclRv
dWNoUG9pbnQpOgorICAgICAgICAqIHBhZ2UvRXZlbnRIYW5kbGVyLmg6CisgICAgICAgICogcGFn
ZS9Ub3VjaEFkanVzdG1lbnQuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlRvdWNoQWRq
dXN0bWVudDo6UXVhZEZvckhpdFRlc3Q6OlF1YWRGb3JIaXRUZXN0KToKKyAgICAgICAgKFdlYkNv
cmU6OlRvdWNoQWRqdXN0bWVudDo6UXVhZEZvckhpdFRlc3Q6Om5vZGUpOgorICAgICAgICAoV2Vi
Q29yZTo6VG91Y2hBZGp1c3RtZW50OjpRdWFkRm9ySGl0VGVzdDo6cXVhZCk6CisgICAgICAgIChX
ZWJDb3JlOjpUb3VjaEFkanVzdG1lbnQ6OlF1YWRGb3JIaXRUZXN0Ojpib3VuZGluZ0JveCk6Cisg
ICAgICAgIChXZWJDb3JlOjpUb3VjaEFkanVzdG1lbnQ6Om5vZGVSZXNwb25kc1RvVGFwR2VzdHVy
ZSk6CisgICAgICAgIChXZWJDb3JlOjpUb3VjaEFkanVzdG1lbnQ6OmFwcGVuZEFic29sdXRlUXVh
ZHNGb3JOb2RlVG9IaXRUZXN0TGlzdCk6CisgICAgICAgIChXZWJDb3JlOjpUb3VjaEFkanVzdG1l
bnQ6OmNvbXBpbGVRdWFkc0ZvckhpdFRlc3RpbmcpOgorICAgICAgICAoV2ViQ29yZTo6VG91Y2hB
ZGp1c3RtZW50OjpkaXN0YW5jZVNxdWFyZWRUb1F1YWRDZW50ZXJMaW5lKToKKyAgICAgICAgKFdl
YkNvcmU6OlRvdWNoQWRqdXN0bWVudDo6ZmluZE5vZGVXaXRoTG93ZXN0TWV0cmljKToKKyAgICAg
ICAgKFdlYkNvcmU6OmZpbmRCZXN0Q2xpY2thYmxlQ2FuZGlkYXRlKToKKyAgICAgICAgKiBwYWdl
L1RvdWNoQWRqdXN0bWVudC5oOiBBZGRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9G
bG9hdFF1YWQuaDoKKyAgICAgICAgKFdlYkNvcmU6OkZsb2F0UXVhZDo6Y2VudGVyKToKKyAgICAg
ICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9JbnRQb2ludC5oOgorICAgICAgICAoV2ViQ29yZTo6SW50
UG9pbnQ6OmRpc3RhbmNlU3F1YXJlZFRvUG9pbnQpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBo
aWNzL0ludFJlY3QuY3BwOgorICAgICAgICAoV2ViQ29yZTo6ZGlzdGFuY2VUb0ludGVydmFsKToK
KyAgICAgICAgKFdlYkNvcmU6OkludFJlY3Q6OmRpZmZlcmVuY2VUb1BvaW50KToKKyAgICAgICAg
KFdlYkNvcmU6OkludFJlY3Q6OmRpZmZlcmVuY2VGcm9tQ2VudGVyTGluZVRvUG9pbnQpOgorICAg
ICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0ludFJlY3QuaDoKKyAgICAgICAgKFdlYkNvcmU6Oklu
dFJlY3Q6OmRpc3RhbmNlU3F1YXJlZFRvUG9pbnQpOgorICAgICAgICAoV2ViQ29yZTo6SW50UmVj
dDo6ZGlzdGFuY2VTcXVhcmVkRnJvbUNlbnRlckxpbmVUb1BvaW50KToKKyAgICAgICAgKiBwbGF0
Zm9ybS9ncmFwaGljcy9JbnRTaXplLmg6CisgICAgICAgIChXZWJDb3JlOjpJbnRTaXplOjpkaWFn
b25hbExlbmd0aFNxdWFyZWQpOgorICAgICAgICAqIHRlc3RpbmcvSW50ZXJuYWxzLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OkludGVybmFsczo6dG91Y2hQb3NpdGlvbkFkanVzdGVkVG9CZXN0Q2xp
Y2thYmxlTm9kZSk6CisgICAgICAgIChXZWJDb3JlOjpJbnRlcm5hbHM6OnRvdWNoTm9kZUFkanVz
dGVkVG9CZXN0Q2xpY2thYmxlTm9kZSk6CisgICAgICAgICogdGVzdGluZy9JbnRlcm5hbHMuaDoK
KyAgICAgICAgKiB0ZXN0aW5nL0ludGVybmFscy5pZGw6CisKIDIwMTItMDMtMTIgIEtlbnQgVGFt
dXJhICA8dGtlbnRAY2hyb21pdW0ub3JnPgogCiAgICAgICAgIFVzZSBJQ1UgQyBBUEkgaW5zdGVh
ZCBvZiBDKysgQVBJIGluIExvY2FsaXplZE51bWJlcklDVQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdDIvQ2hhbmdlTG9nIGIvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCmluZGV4IDNhM2M3Nzg1
NmJmNTIyYTQyMzk4YzVjOGE5ZjI2NzI1YjhiMWZiZDEuLjU2MzhiYTdiOTI2MGVhZmU2M2M2ZjMw
ZjgzOTI0YzM0YzQ3NDliN2YgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZwor
KysgYi9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cKQEAgLTEsMyArMSwyMyBAQAorMjAxMi0wMy0x
MiAgQWxsYW4gU2FuZGZlbGQgSmVuc2VuICA8YWxsYW4uamVuc2VuQG5va2lhLmNvbT4KKworICAg
ICAgICBTZWxlY3QgYmVzdCB0YXJnZXQgZm9yIHRhcCBnZXN0dXJlLgorICAgICAgICBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9Nzg4MDEKKworICAgICAgICBSZXZpZXdl
ZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBTZW5kIHJhZGl1cyB0byBoYW5kbGVQb3Rl
bnRpYWxTaW5nbGVUYXBFdmVudCBzbyBpdCBjYW4gZG8gdGhlIHNhbWUgaGl0CisgICAgICAgIGRl
dGVjdGlvbiB0aGUgdGFwIGdlc3R1cmUgbGF0ZXIgZG9lcy4KKworICAgICAgICAqIFVJUHJvY2Vz
cy9XZWJQYWdlUHJveHkuY3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlUHJveHk6OmhhbmRs
ZVBvdGVudGlhbEFjdGl2YXRpb24pOgorICAgICAgICAqIFVJUHJvY2Vzcy9XZWJQYWdlUHJveHku
aDoKKyAgICAgICAgKiBVSVByb2Nlc3MvcXQvUXRXZWJQYWdlRXZlbnRIYW5kbGVyLmNwcDoKKyAg
ICAgICAgKFF0V2ViUGFnZUV2ZW50SGFuZGxlcjo6aGFuZGxlUG90ZW50aWFsU2luZ2xlVGFwRXZl
bnQpOgorICAgICAgICAqIFdlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmNwcDoKKyAgICAgICAg
KFdlYktpdDo6V2ViUGFnZTo6aGlnaGxpZ2h0UG90ZW50aWFsQWN0aXZhdGlvbik6CisgICAgICAg
ICogV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UuaDoKKyAgICAgICAgKiBXZWJQcm9jZXNzL1dl
YlBhZ2UvV2ViUGFnZS5tZXNzYWdlcy5pbjoKKwogMjAxMi0wMy0xMSAgQW5keSBFc3RlcyAgPGFl
c3Rlc0BhcHBsZS5jb20+CiAKICAgICAgICAgUmVtb3ZlIHVubmVjZXNzYXJ5IGNhbGwgdG8gTlNT
aXplVG9DR1NpemUoKS4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1RhcmdldC5wcmkgYi9T
b3VyY2UvV2ViQ29yZS9UYXJnZXQucHJpCmluZGV4IDU2YzE3ZjNmY2FiZTYwNmNkYjBhY2JlNmVl
ZWQ0ZDMwMTNkOTQxZDYuLjgzYmI5YWRkZTQ5ZTBhMGZkNTE5NjliYWQyOWQzZTU2ZDk2NGYxMzQg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1RhcmdldC5wcmkKKysrIGIvU291cmNlL1dlYkNv
cmUvVGFyZ2V0LnByaQpAQCAtMTAzNCw2ICsxMDM0LDcgQEAgU09VUkNFUyArPSBcCiAgICAgcGFn
ZS9TZWN1cml0eVBvbGljeS5jcHAgXAogICAgIHBhZ2UvU2V0dGluZ3MuY3BwIFwKICAgICBwYWdl
L1NwYXRpYWxOYXZpZ2F0aW9uLmNwcCBcCisgICAgcGFnZS9Ub3VjaEFkanVzdG1lbnQuY3BwIFwK
ICAgICBwYWdlL1N1c3BlbmRhYmxlVGltZXIuY3BwIFwKICAgICBwYWdlL1VzZXJDb250ZW50VVJM
UGF0dGVybi5jcHAgXAogICAgIHBhZ2UvV2luZG93RmVhdHVyZXMuY3BwIFwKQEAgLTIxMjgsNiAr
MjEyOSw3IEBAIEhFQURFUlMgKz0gXAogICAgIHBhZ2UvU3BlZWNoSW5wdXRMaXN0ZW5lci5oIFwK
ICAgICBwYWdlL1NwZWVjaElucHV0UmVzdWx0LmggXAogICAgIHBhZ2UvU3BlZWNoSW5wdXRSZXN1
bHRMaXN0LmggXAorICAgIHBhZ2UvVG91Y2hBZGp1c3RtZW50LmggXAogICAgIHBhZ2UvV2ViS2l0
QW5pbWF0aW9uLmggXAogICAgIHBhZ2UvV2ViS2l0QW5pbWF0aW9uTGlzdC5oIFwKICAgICBwYWdl
L1dpbmRvd0ZlYXR1cmVzLmggXApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGFnZS9FdmVu
dEhhbmRsZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGFnZS9FdmVudEhhbmRsZXIuY3BwCmluZGV4
IDE3MzhkYjg5NjNhODYzNjE0NTMxMWRiZDE2YjJmNmQ4YWJjNDI3YjkuLjM1ZjBmMmVlNjI3NmY3
OGUyMmNjZjhmNzVlNDcyNWJjZjgwMzdhN2YgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3Bh
Z2UvRXZlbnRIYW5kbGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL0V2ZW50SGFuZGxl
ci5jcHAKQEAgLTczLDYgKzczLDcgQEAKICNpbmNsdWRlICJTY3JvbGxiYXIuaCIKICNpbmNsdWRl
ICJTZXR0aW5ncy5oIgogI2luY2x1ZGUgIlNwYXRpYWxOYXZpZ2F0aW9uLmgiCisjaW5jbHVkZSAi
U3RhdGljSGFzaFNldE5vZGVMaXN0LmgiCiAjaW5jbHVkZSAiU3R5bGVDYWNoZWRJbWFnZS5oIgog
I2luY2x1ZGUgIlRleHRFdmVudC5oIgogI2luY2x1ZGUgIlRleHRJdGVyYXRvci5oIgpAQCAtODks
NiArOTAsMTAgQEAKICNpbmNsdWRlICJQbGF0Zm9ybUdlc3R1cmVFdmVudC5oIgogI2VuZGlmCiAK
KyNpZiBFTkFCTEUoVE9VQ0hfQURKVVNUTUVOVCkKKyNpbmNsdWRlICJUb3VjaEFkanVzdG1lbnQu
aCIKKyNlbmRpZgorCiAjaWYgRU5BQkxFKFNWRykKICNpbmNsdWRlICJTVkdEb2N1bWVudC5oIgog
I2luY2x1ZGUgIlNWR0VsZW1lbnRJbnN0YW5jZS5oIgpAQCAtMjM5NSwxMCArMjQwMCwyMCBAQCBi
b29sIEV2ZW50SGFuZGxlcjo6aGFuZGxlR2VzdHVyZUV2ZW50KGNvbnN0IFBsYXRmb3JtR2VzdHVy
ZUV2ZW50JiBnZXN0dXJlRXZlbnQpCiBib29sIEV2ZW50SGFuZGxlcjo6aGFuZGxlR2VzdHVyZVRh
cChjb25zdCBQbGF0Zm9ybUdlc3R1cmVFdmVudCYgZ2VzdHVyZUV2ZW50KQogewogICAgIC8vIEZJ
WE1FOiBSZWZhY3RvciB0aGlzIGNvZGUgdG8gbm90IGhpdCB0ZXN0IG11bHRpcGxlIHRpbWVzLgor
ICAgIEludFBvaW50IGFkanVzdGVkUG9pbnQgPSBnZXN0dXJlRXZlbnQucG9zaXRpb24oKTsKKyNp
ZiBFTkFCTEUoVE9VQ0hfQURKVVNUTUVOVCkKKyAgICBpZiAoIWdlc3R1cmVFdmVudC5hcmVhKCku
aXNFbXB0eSgpKSB7CisgICAgICAgIE5vZGUqIHRhcmdldE5vZGUgPSAwOworICAgICAgICAvLyBG
b3Igbm93IHdlIHVzZSB0aGUgYWRqdXN0ZWQgcG9zaXRpb24gdG8gZW5zdXJlIHRoZSBsYXRlciBy
ZWR1bmRhbnQgaGl0LXRlc3RzIGhpdHMgdGhlIHJpZ2h0IG5vZGUuCisgICAgICAgIGJlc3RDbGlj
a2FibGVOb2RlRm9yVG91Y2hQb2ludChnZXN0dXJlRXZlbnQucG9zaXRpb24oKSwgSW50U2l6ZShn
ZXN0dXJlRXZlbnQuYXJlYSgpLndpZHRoKCkgLyAyLCBnZXN0dXJlRXZlbnQuYXJlYSgpLmhlaWdo
dCgpIC8gMiksIGFkanVzdGVkUG9pbnQsIHRhcmdldE5vZGUpOworICAgICAgICBpZiAoIXRhcmdl
dE5vZGUpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorI2VuZGlmCiAgICAgYm9v
bCBkZWZhdWx0UHJldmVudGVkID0gZmFsc2U7Ci0gICAgUGxhdGZvcm1Nb3VzZUV2ZW50IGZha2VN
b3VzZU1vdmUoZ2VzdHVyZUV2ZW50LnBvc2l0aW9uKCksIGdlc3R1cmVFdmVudC5nbG9iYWxQb3Np
dGlvbigpLCBOb0J1dHRvbiwgUGxhdGZvcm1FdmVudDo6TW91c2VNb3ZlZCwgLyogY2xpY2tDb3Vu
dCAqLyAxLCBnZXN0dXJlRXZlbnQuc2hpZnRLZXkoKSwgZ2VzdHVyZUV2ZW50LmN0cmxLZXkoKSwg
Z2VzdHVyZUV2ZW50LmFsdEtleSgpLCBnZXN0dXJlRXZlbnQubWV0YUtleSgpLCBnZXN0dXJlRXZl
bnQudGltZXN0YW1wKCkpOwotICAgIFBsYXRmb3JtTW91c2VFdmVudCBmYWtlTW91c2VEb3duKGdl
c3R1cmVFdmVudC5wb3NpdGlvbigpLCBnZXN0dXJlRXZlbnQuZ2xvYmFsUG9zaXRpb24oKSwgTGVm
dEJ1dHRvbiwgUGxhdGZvcm1FdmVudDo6TW91c2VQcmVzc2VkLCAvKiBjbGlja0NvdW50ICovIDEs
IGdlc3R1cmVFdmVudC5zaGlmdEtleSgpLCBnZXN0dXJlRXZlbnQuY3RybEtleSgpLCBnZXN0dXJl
RXZlbnQuYWx0S2V5KCksIGdlc3R1cmVFdmVudC5tZXRhS2V5KCksIGdlc3R1cmVFdmVudC50aW1l
c3RhbXAoKSk7Ci0gICAgUGxhdGZvcm1Nb3VzZUV2ZW50IGZha2VNb3VzZVVwKGdlc3R1cmVFdmVu
dC5wb3NpdGlvbigpLCBnZXN0dXJlRXZlbnQuZ2xvYmFsUG9zaXRpb24oKSwgTGVmdEJ1dHRvbiwg
UGxhdGZvcm1FdmVudDo6TW91c2VSZWxlYXNlZCwgLyogY2xpY2tDb3VudCAqLyAxLCBnZXN0dXJl
RXZlbnQuc2hpZnRLZXkoKSwgZ2VzdHVyZUV2ZW50LmN0cmxLZXkoKSwgZ2VzdHVyZUV2ZW50LmFs
dEtleSgpLCBnZXN0dXJlRXZlbnQubWV0YUtleSgpLCBnZXN0dXJlRXZlbnQudGltZXN0YW1wKCkp
OworICAgIFBsYXRmb3JtTW91c2VFdmVudCBmYWtlTW91c2VNb3ZlKGFkanVzdGVkUG9pbnQsIGdl
c3R1cmVFdmVudC5nbG9iYWxQb3NpdGlvbigpLCBOb0J1dHRvbiwgUGxhdGZvcm1FdmVudDo6TW91
c2VNb3ZlZCwgLyogY2xpY2tDb3VudCAqLyAxLCBnZXN0dXJlRXZlbnQuc2hpZnRLZXkoKSwgZ2Vz
dHVyZUV2ZW50LmN0cmxLZXkoKSwgZ2VzdHVyZUV2ZW50LmFsdEtleSgpLCBnZXN0dXJlRXZlbnQu
bWV0YUtleSgpLCBnZXN0dXJlRXZlbnQudGltZXN0YW1wKCkpOworICAgIFBsYXRmb3JtTW91c2VF
dmVudCBmYWtlTW91c2VEb3duKGFkanVzdGVkUG9pbnQsIGdlc3R1cmVFdmVudC5nbG9iYWxQb3Np
dGlvbigpLCBMZWZ0QnV0dG9uLCBQbGF0Zm9ybUV2ZW50OjpNb3VzZVByZXNzZWQsIC8qIGNsaWNr
Q291bnQgKi8gMSwgZ2VzdHVyZUV2ZW50LnNoaWZ0S2V5KCksIGdlc3R1cmVFdmVudC5jdHJsS2V5
KCksIGdlc3R1cmVFdmVudC5hbHRLZXkoKSwgZ2VzdHVyZUV2ZW50Lm1ldGFLZXkoKSwgZ2VzdHVy
ZUV2ZW50LnRpbWVzdGFtcCgpKTsKKyAgICBQbGF0Zm9ybU1vdXNlRXZlbnQgZmFrZU1vdXNlVXAo
YWRqdXN0ZWRQb2ludCwgZ2VzdHVyZUV2ZW50Lmdsb2JhbFBvc2l0aW9uKCksIExlZnRCdXR0b24s
IFBsYXRmb3JtRXZlbnQ6Ok1vdXNlUmVsZWFzZWQsIC8qIGNsaWNrQ291bnQgKi8gMSwgZ2VzdHVy
ZUV2ZW50LnNoaWZ0S2V5KCksIGdlc3R1cmVFdmVudC5jdHJsS2V5KCksIGdlc3R1cmVFdmVudC5h
bHRLZXkoKSwgZ2VzdHVyZUV2ZW50Lm1ldGFLZXkoKSwgZ2VzdHVyZUV2ZW50LnRpbWVzdGFtcCgp
KTsKICAgICBtb3VzZU1vdmVkKGZha2VNb3VzZU1vdmUpOwogICAgIGRlZmF1bHRQcmV2ZW50ZWQg
fD0gaGFuZGxlTW91c2VQcmVzc0V2ZW50KGZha2VNb3VzZURvd24pOwogICAgIGRlZmF1bHRQcmV2
ZW50ZWQgfD0gaGFuZGxlTW91c2VSZWxlYXNlRXZlbnQoZmFrZU1vdXNlVXApOwpAQCAtMjQyNCw2
ICsyNDM5LDI0IEBAIGJvb2wgRXZlbnRIYW5kbGVyOjpoYW5kbGVHZXN0dXJlU2Nyb2xsQ29yZShj
b25zdCBQbGF0Zm9ybUdlc3R1cmVFdmVudCYgZ2VzdHVyZUV2CiB9CiAjZW5kaWYKIAorI2lmIEVO
QUJMRShUT1VDSF9BREpVU1RNRU5UKQordm9pZCBFdmVudEhhbmRsZXI6OmJlc3RDbGlja2FibGVO
b2RlRm9yVG91Y2hQb2ludChjb25zdCBJbnRQb2ludCYgdG91Y2hDZW50ZXIsIGNvbnN0IEludFNp
emUmIHRvdWNoUmFkaXVzLCBJbnRQb2ludCYgdGFyZ2V0UG9pbnQsIE5vZGUqJiB0YXJnZXROb2Rl
KQoreworICAgIEhpdFRlc3RSZXF1ZXN0OjpIaXRUZXN0UmVxdWVzdFR5cGUgaGl0VHlwZSA9IEhp
dFRlc3RSZXF1ZXN0OjpSZWFkT25seSB8IEhpdFRlc3RSZXF1ZXN0OjpBY3RpdmU7CisgICAgSW50
UmVjdCB0b3VjaFJlY3QodG91Y2hDZW50ZXIgLSB0b3VjaFJhZGl1cywgSW50U2l6ZSh0b3VjaFJh
ZGl1cy53aWR0aCgpICogMiwgdG91Y2hSYWRpdXMuaGVpZ2h0KCkgKiAyKSk7CisgICAgdGFyZ2V0
Tm9kZSA9IDA7CisKKyAgICBIaXRUZXN0UmVzdWx0IHJlc3VsdCA9IGhpdFRlc3RSZXN1bHRBdFBv
aW50KHRvdWNoQ2VudGVyLCAvKmFsbG93U2hhZG93Q29udGVudCovIGZhbHNlLCAvKmlnbm9yZUNs
aXBwaW5nKi8gZmFsc2UsIERvbnRIaXRUZXN0U2Nyb2xsYmFycywgaGl0VHlwZSwgdG91Y2hSYWRp
dXMpOworCisgICAgUmVmUHRyPFN0YXRpY0hhc2hTZXROb2RlTGlzdD4gbm9kZUxpc3QgPSBTdGF0
aWNIYXNoU2V0Tm9kZUxpc3Q6OmFkb3B0KHJlc3VsdC5yZWN0QmFzZWRUZXN0UmVzdWx0KCkpOwor
ICAgIGlmICghZmluZEJlc3RDbGlja2FibGVDYW5kaWRhdGUodGFyZ2V0Tm9kZSwgdGFyZ2V0UG9p
bnQsIHRvdWNoQ2VudGVyLCB0b3VjaFJlY3QsICpub2RlTGlzdC5nZXQoKSkpIHsKKyAgICAgICAg
Ly8gRGVmYXVsdCB0byBqdXN0IHJldHVybmluZyBpbm5lck5vblNoYXJlZE5vZGUuCisgICAgICAg
IHRhcmdldFBvaW50ID0gdG91Y2hDZW50ZXI7CisgICAgICAgIHRhcmdldE5vZGUgPSByZXN1bHQu
aW5uZXJOb25TaGFyZWROb2RlKCk7CisgICAgfQorfQorI2VuZGlmCisKICNpZiBFTkFCTEUoQ09O
VEVYVF9NRU5VUykKIGJvb2wgRXZlbnRIYW5kbGVyOjpzZW5kQ29udGV4dE1lbnVFdmVudChjb25z
dCBQbGF0Zm9ybU1vdXNlRXZlbnQmIGV2ZW50KQogewpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcGFnZS9FdmVudEhhbmRsZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRXZlbnRIYW5kbGVy
LmgKaW5kZXggMmVkYmE5MGFiZmU1MjEyODg3MjQxM2EyMGRjY2JmODEwNWZiNzFjMS4uODlhNDgw
MThlOGNkNGY3MTIwMTk4NGUzY2VmYWQ0M2FlY2UwOWQyMyAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvcGFnZS9FdmVudEhhbmRsZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL0V2ZW50
SGFuZGxlci5oCkBAIC0xNjcsNiArMTY3LDEwIEBAIHB1YmxpYzoKICAgICBib29sIGhhbmRsZUdl
c3R1cmVTY3JvbGxVcGRhdGUoY29uc3QgUGxhdGZvcm1HZXN0dXJlRXZlbnQmKTsKICNlbmRpZgog
CisjaWYgRU5BQkxFKFRPVUNIX0FESlVTVE1FTlQpCisgICAgdm9pZCBiZXN0Q2xpY2thYmxlTm9k
ZUZvclRvdWNoUG9pbnQoY29uc3QgSW50UG9pbnQmIHRvdWNoQ2VudGVyLCBjb25zdCBJbnRTaXpl
JiB0b3VjaFJhZGl1cywgSW50UG9pbnQmIHRhcmdldFBvaW50LCBOb2RlKiYgdGFyZ2V0Tm9kZSk7
CisjZW5kaWYKKwogI2lmIEVOQUJMRShDT05URVhUX01FTlVTKQogICAgIGJvb2wgc2VuZENvbnRl
eHRNZW51RXZlbnQoY29uc3QgUGxhdGZvcm1Nb3VzZUV2ZW50Jik7CiAgICAgYm9vbCBzZW5kQ29u
dGV4dE1lbnVFdmVudEZvcktleSgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGFnZS9U
b3VjaEFkanVzdG1lbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvcGFnZS9Ub3VjaEFkanVzdG1lbnQu
Y3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAuLjU0ZjQ3NWI0MjJlYjU3YWE3NDc1MjgzOGUwODUxNDNkZTdjNGYxOGMK
LS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL1RvdWNoQWRqdXN0bWVudC5j
cHAKQEAgLTAsMCArMSwyMTUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgTm9raWEgQ29y
cG9yYXRpb24gYW5kL29yIGl0cyBzdWJzaWRpYXJ5KC1pZXMpCisgKgorICogVGhpcyBsaWJyYXJ5
IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9k
aWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMK
KyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247
IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24p
IGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBp
biB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdB
UlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5U
QUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05V
CisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAq
CisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBH
ZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRo
ZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdh
cmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAq
IEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIK
KworI2luY2x1ZGUgIlRvdWNoQWRqdXN0bWVudC5oIgorCisjaW5jbHVkZSAiQ29udGFpbmVyTm9k
ZS5oIgorI2luY2x1ZGUgIkZsb2F0UG9pbnQuaCIKKyNpbmNsdWRlICJGbG9hdFF1YWQuaCIKKyNp
bmNsdWRlICJIVE1MTGFiZWxFbGVtZW50LmgiCisjaW5jbHVkZSAiSFRNTE5hbWVzLmgiCisjaW5j
bHVkZSAiSW50UG9pbnQuaCIKKyNpbmNsdWRlICJJbnRTaXplLmgiCisjaW5jbHVkZSAiTm9kZS5o
IgorI2luY2x1ZGUgIlJlbmRlckJveC5oIgorI2luY2x1ZGUgIlJlbmRlck9iamVjdC5oIgorI2lu
Y2x1ZGUgIlJlbmRlclN0eWxlLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworbmFtZXNwYWNl
IFRvdWNoQWRqdXN0bWVudCB7CisKKy8vIENsYXNzIGZvciByZW1lbWJlcmluZyBhYnNvbHV0ZSBx
dWFkcyBhbmQgdGhlIG5vZGVzIHRoZXkgcG9pbnQgdG8uCitjbGFzcyBRdWFkRm9ySGl0VGVzdCB7
CitwdWJsaWM6CisgICAgUXVhZEZvckhpdFRlc3QoTm9kZSogbm9kZSwgY29uc3QgRmxvYXRRdWFk
JiBxdWFkKQorICAgICAgICA6IG1fbm9kZShub2RlKQorICAgICAgICAsIG1fcXVhZChxdWFkKQor
ICAgIHsgfQorCisgICAgTm9kZSogbm9kZSgpIGNvbnN0IHsgcmV0dXJuIG1fbm9kZTsgfQorICAg
IEZsb2F0UXVhZCBxdWFkKCkgY29uc3QgeyByZXR1cm4gbV9xdWFkOyB9CisgICAgSW50UmVjdCBi
b3VuZGluZ0JveCgpIGNvbnN0IHsgcmV0dXJuIG1fcXVhZC5lbmNsb3NpbmdCb3VuZGluZ0JveCgp
OyB9CisKK3ByaXZhdGU6CisgICAgTm9kZSogbV9ub2RlOworICAgIEZsb2F0UXVhZCBtX3F1YWQ7
Cit9OworCit0eXBlZGVmIFZlY3RvcjxRdWFkRm9ySGl0VGVzdD4gUXVhZE5vZGVMaXN0OwordHlw
ZWRlZiBib29sICgqTm9kZUZpbHRlcikoTm9kZSopOwordHlwZWRlZiBmbG9hdCAoKk1ldHJpYyko
Y29uc3QgSW50UG9pbnQmLCBjb25zdCBJbnRSZWN0JiwgY29uc3QgUXVhZEZvckhpdFRlc3QmKTsK
KworLy8gVGFrZXMgbm9uLWNvbnN0IE5vZGUqIGJlY2F1c2UgaXNDb250ZW50RWRpdGFibGUgaXMg
YSBub24tY29uc3QgZnVuY3Rpb24uCitib29sIG5vZGVSZXNwb25kc1RvVGFwR2VzdHVyZShOb2Rl
KiBub2RlKQoreworICAgIGlmIChub2RlLT5pc0xpbmsoKQorICAgICAgICB8fCBub2RlLT5pc0Nv
bnRlbnRFZGl0YWJsZSgpCisgICAgICAgIHx8IG5vZGUtPmlzTW91c2VGb2N1c2FibGUoKSkKKyAg
ICAgICAgcmV0dXJuIHRydWU7CisgICAgaWYgKG5vZGUtPmlzRWxlbWVudE5vZGUoKSkgeworICAg
ICAgICBFbGVtZW50KiBlbGVtZW50ID0gIHN0YXRpY19jYXN0PEVsZW1lbnQqPihub2RlKTsKKyAg
ICAgICAgaWYgKGVsZW1lbnQtPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjpsYWJlbFRhZykgJiYgc3Rh
dGljX2Nhc3Q8SFRNTExhYmVsRWxlbWVudCo+KGVsZW1lbnQpLT5jb250cm9sKCkpCisgICAgICAg
ICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAgLy8gRklYTUU6IEltcGxlbWVudCBoYXNEZWZh
dWx0RXZlbnRIYW5kbGVyIGFuZCB1c2UgdGhhdCBpbnN0ZWFkIG9mIGFsbCBvZiB0aGUgYWJvdmUg
Y2hlY2tzLgorICAgIGlmIChub2RlLT5oYXNFdmVudExpc3RlbmVycygpCisgICAgICAgICYmIChu
b2RlLT5oYXNFdmVudExpc3RlbmVycyhldmVudE5hbWVzKCkuY2xpY2tFdmVudCkKKyAgICAgICAg
ICAgIHx8IG5vZGUtPmhhc0V2ZW50TGlzdGVuZXJzKGV2ZW50TmFtZXMoKS5ET01BY3RpdmF0ZUV2
ZW50KQorICAgICAgICAgICAgfHwgbm9kZS0+aGFzRXZlbnRMaXN0ZW5lcnMoZXZlbnROYW1lcygp
Lm1vdXNlZG93bkV2ZW50KQorICAgICAgICAgICAgfHwgbm9kZS0+aGFzRXZlbnRMaXN0ZW5lcnMo
ZXZlbnROYW1lcygpLm1vdXNldXBFdmVudCkKKyAgICAgICAgICAgIHx8IG5vZGUtPmhhc0V2ZW50
TGlzdGVuZXJzKGV2ZW50TmFtZXMoKS5tb3VzZW1vdmVFdmVudCkKKyAgICAgICAgICAgIC8vIENo
ZWNraW5nIGZvciBmb2N1cyBldmVudHMgaXMgbm90IG5lY2Vzc2FyeSBzaW5jZSB0aGV5IGNhbiBv
bmx5IGZpcmUgb24KKyAgICAgICAgICAgIC8vIGZvY3VzYWJsZSBlbGVtZW50cyB3aGljaCBoYXZl
IGFscmVhZHkgYmVlbiBjYXB0dXJlZCBhYm92ZS4KKyAgICAgICAgKSkKKyAgICAgICAgcmV0dXJu
IHRydWU7CisgICAgaWYgKG5vZGUtPnJlbmRlclN0eWxlKCkpIHsKKyAgICAgICAgLy8gQWNjZXB0
IG5vZGVzIHRoYXQgaGFzIGEgQ1NTIGVmZmVjdCB3aGVuIHRvdWNoZWQuCisgICAgICAgIGlmIChu
b2RlLT5yZW5kZXJTdHlsZSgpLT5hZmZlY3RlZEJ5QWN0aXZlUnVsZXMoKSB8fCBub2RlLT5yZW5k
ZXJTdHlsZSgpLT5hZmZlY3RlZEJ5SG92ZXJSdWxlcygpKQorICAgICAgICAgICAgcmV0dXJuIHRy
dWU7CisgICAgfQorICAgIHJldHVybiBmYWxzZTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIGFw
cGVuZEFic29sdXRlUXVhZHNGb3JOb2RlVG9IaXRUZXN0TGlzdChOb2RlKiBub2RlLCBRdWFkTm9k
ZUxpc3QmIGhpdFRlc3RMaXN0KQoreworICAgIC8vIFNpbmNlIHRoZSBub2RlIGlzIGEgcmVzdWx0
IG9mIGEgaGl0IHRlc3QsIHdlIGFyZSBhbHJlYWR5IGVuc3VyZWQgaXQgaGFzIGEgcmVuZGVyZXIu
CisgICAgQVNTRVJUKG5vZGUtPnJlbmRlcmVyKCkpOworCisgICAgVmVjdG9yPEZsb2F0UXVhZD4g
cXVhZHM7CisgICAgbm9kZS0+cmVuZGVyZXIoKS0+YWJzb2x1dGVRdWFkcyhxdWFkcyk7CisKKyAg
ICBWZWN0b3I8RmxvYXRRdWFkPjo6Y29uc3RfaXRlcmF0b3IgaXQgPSBxdWFkcy5iZWdpbigpOwor
ICAgIGNvbnN0IFZlY3RvcjxGbG9hdFF1YWQ+Ojpjb25zdF9pdGVyYXRvciBlbmQgPSBxdWFkcy5l
bmQoKTsKKyAgICBmb3IgKDsgaXQgIT0gZW5kOyArK2l0KQorICAgICAgICBoaXRUZXN0TGlzdC5h
cHBlbmQoUXVhZEZvckhpdFRlc3Qobm9kZSwgKml0KSk7Cit9CisKKy8vIENvbXBpbGVzIGEgbGlz
dCBvZiBhYnNvbHV0ZSBxdWFkcyBvZiBub2RlcyB0aGF0IHNob3VsZCBiZSBoaXQtdGVzdGVkLgor
dm9pZCBjb21waWxlUXVhZHNGb3JIaXRUZXN0aW5nKGNvbnN0IE5vZGVMaXN0JiBpbnRlcnNlY3Rl
ZE5vZGVzLCBRdWFkTm9kZUxpc3QmIGhpdFRlc3RMaXN0LCBOb2RlRmlsdGVyIG5vZGVGaWx0ZXIp
Cit7CisgICAgLy8gRmluZCBjYW5kaWRhdGVzIHJlc3BvbmRpbmcgdG8gdGFwIGdlc3R1cmUgZXZl
bnRzIGluIE8obikgdGltZS4KKyAgICBIYXNoTWFwPE5vZGUqLCBOb2RlKj4gcmVzcG9uZGVyTWFw
OworICAgIEhhc2hTZXQ8Tm9kZSo+IGFuY2VzdG9yc1RvUmVzcG9uZGVyc1NldDsKKyAgICBWZWN0
b3I8Tm9kZSo+IGNhbmRpZGF0ZXM7CisKKyAgICAvLyBBIG5vZGUgbWF0Y2hpbmcgdGhlIE5vZGVG
aWx0ZXIgaXMgY2FsbGVkIGEgcmVzcG9uZGVyLiBDYW5kaWRhdGUgbm9kZXMgbXVzdCBlaXRoZXIg
YmUgYQorICAgIC8vIHJlc3BvbmRlciBvciBoYXZlIGFuIGFuY2VzdG9yIHRoYXQgaXMgYSByZXNw
b25kZXIuCisgICAgLy8gVGhpcyBpdGVyYXRpb24gdGVzdHMgYWxsIGFuY2VzdG9ycyBhdCBtb3N0
IG9uY2UgYnkgY2FjaGluZyBlYXJsaWVyIHJlc3VsdHMuCisgICAgY29uc3QgdW5zaWduZWQgaW50
IGxlbmd0aCA9IGludGVyc2VjdGVkTm9kZXMubGVuZ3RoKCk7CisgICAgZm9yICh1bnNpZ25lZCBp
bnQgaSA9IDA7IGkgPCBsZW5ndGg7ICsraSkgeworICAgICAgICBOb2RlKiBub2RlID0gaW50ZXJz
ZWN0ZWROb2Rlcy5pdGVtKGkpOworICAgICAgICBpZiAocmVzcG9uZGVyTWFwLmNvbnRhaW5zKG5v
ZGUpKQorICAgICAgICAgICAgLy8gU2tpcCBub2RlcyB0aGF0IGFyZSBkaXJlY3QgYW5jZXN0b3Jz
IG9mIG90aGVyIGNhbmRpZGF0ZXMuIFRoZXkgd291bGQgaGl0LXRlc3QKKyAgICAgICAgICAgIC8v
IGFnYWluc3QgdGhlIHNhbWUgYWJzb2x1dGUgcXVhZHMuCisgICAgICAgICAgICBjb250aW51ZTsK
KyAgICAgICAgVmVjdG9yPE5vZGUqPiBhbmNlc3RvcnM7CisgICAgICAgIE5vZGUqIHJlc3BvbmRp
bmdOb2RlID0gMDsKKyAgICAgICAgZm9yICg7IG5vZGU7IG5vZGUgPSBub2RlLT5wYXJlbnRPckhv
c3ROb2RlKCkpIHsKKyAgICAgICAgICAgIC8vIENoZWNrIGlmIHdlIGFscmVhZHkgaGF2ZSBhIHJl
c3VsdCBmb3IgYSBjb21tb24gYW5jZXN0b3IgZnJvbSBhbm90aGVyIGNhbmRpZGF0ZS4KKyAgICAg
ICAgICAgIHJlc3BvbmRpbmdOb2RlID0gcmVzcG9uZGVyTWFwLmdldChub2RlKTsKKyAgICAgICAg
ICAgIGlmIChyZXNwb25kaW5nTm9kZSkKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
ICAgIGFuY2VzdG9ycy5hcHBlbmQobm9kZSk7CisgICAgICAgICAgICAvLyBDaGVjayBpZiB0aGUg
bm9kZSBmaWx0ZXIgYXBwbGllcywgd2hpY2ggd291bGQgbWVhbiB3ZSBoYXZlIGZvdW5kIGEgcmVz
cG9uZGluZyBub2RlLgorICAgICAgICAgICAgaWYgKG5vZGVGaWx0ZXIobm9kZSkpIHsKKyAgICAg
ICAgICAgICAgICByZXNwb25kaW5nTm9kZSA9IG5vZGU7CisgICAgICAgICAgICAgICAgLy8gTm93
IHRoYXQgd2UgaGF2ZSB0aGUgcmVzcG9uZGVyLCBzZXQgdGhlIHJlc3BvbmRlciBmb3IgYWxsIHRo
ZSBub2RlcyBzZWVuIHNvIGZhci4KKyAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGludCBp
ID0gMDsgaSA8IGFuY2VzdG9ycy5zaXplKCk7IGkrKykKKyAgICAgICAgICAgICAgICAgICAgcmVz
cG9uZGVyTWFwLmFkZChhbmNlc3RvcnNbaV0sIG5vZGUpOworICAgICAgICAgICAgICAgIC8vIFRo
ZW4gY29udGludWUgdGhlIGl0ZXJhdGlvbiB0byBjb2xsZWN0IHRoZSBhbmNlc3RvcnMgb2YgdGhl
IHJlc3BvbmRlci4KKyAgICAgICAgICAgICAgICBmb3IgKG5vZGUgPSBub2RlLT5wYXJlbnRPckhv
c3ROb2RlKCk7IG5vZGU7IG5vZGUgPSBub2RlLT5wYXJlbnRPckhvc3ROb2RlKCkpIHsKKyAgICAg
ICAgICAgICAgICAgICAgcGFpcjxIYXNoU2V0PE5vZGUqPjo6aXRlcmF0b3IsIGJvb2w+IHRtcCA9
IGFuY2VzdG9yc1RvUmVzcG9uZGVyc1NldC5hZGQobm9kZSk7CisgICAgICAgICAgICAgICAgICAg
IGlmICghdG1wLnNlY29uZCkKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgfQorICAgICAgICBpZiAocmVzcG9uZGluZ05vZGUpCisgICAgICAgICAgICBjYW5kaWRhdGVz
LmFwcGVuZChpbnRlcnNlY3RlZE5vZGVzLml0ZW0oaSkpOworICAgICAgICBlbHNlIHsKKyAgICAg
ICAgICAgIC8vIEluc2VydCB0aGUgbm9kZXMgd2l0aCBtaXNzaW5nIHJlc3BvbmRlcnMgaW50byB0
aGUgcmVzcG9uZGVyLW1hcCBmb3IgZmFzdCByZWplY3Rpb24KKyAgICAgICAgICAgIC8vIG9mIGxh
dGVyIGNhbmRpZGF0ZXMuCisgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGludCBpID0gMDsgaSA8
IGFuY2VzdG9ycy5zaXplKCk7IGkrKykKKyAgICAgICAgICAgICAgICByZXNwb25kZXJNYXAuYWRk
KGFuY2VzdG9yc1tpXSwgMCk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvLyBXZSBjb21waWxl
IHRoZSBsaXN0IG9mIGNvbXBvbmVudCBhYnNvbHV0ZSBxdWFkcyBpbnN0ZWFkIG9mIHVzaW5nIHRo
ZSBib3VuZGluZyByZWN0CisgICAgLy8gdG8gYmUgYWJsZSB0byBwZXJmb3JtIGJldHRlciBoaXQt
dGVzdGluZyBvbiBpbmxpbmUgbGlua3Mgb24gbGluZS1icmVha3MuCisgICAgVmVjdG9yPE5vZGUq
Pjo6Y29uc3RfaXRlcmF0b3IgaXQyID0gY2FuZGlkYXRlcy5iZWdpbigpOworICAgIGNvbnN0IFZl
Y3RvcjxOb2RlKj46OmNvbnN0X2l0ZXJhdG9yIGVuZDIgPSBjYW5kaWRhdGVzLmVuZCgpOworICAg
IGZvciAoOyBpdDIgIT0gZW5kMjsgKytpdDIpIHsKKyAgICAgICAgLy8gU2tpcCBub2RlcyB3aG8n
cyByZXNwb25kZXJzIGFyZSBhbmNlc3RvcnMgb2Ygb3RoZXIgcmVzcG9uZGVycy4gVGhpcyBnaXZl
cyBwcmVmZXJlbmNlIHRvCisgICAgICAgIC8vIHRoZSBpbm5lci1tb3N0IGV2ZW50LWhhbmRsZXJz
LiBTbyB0aGF0IGEgbGluayBpcyBhbHdheXMgcHJlZmVycmVkIGV2ZW4gd2hlbiBjb250YWluZWQK
KyAgICAgICAgLy8gaW4gYW4gZWxlbWVudCB0aGF0IG1vbml0b3JzIGFsbCBjbGljay1ldmVudHMu
CisgICAgICAgIE5vZGUqIHJlc3BvbmRpbmdOb2RlID0gcmVzcG9uZGVyTWFwLmdldCgqaXQyKTsK
KyAgICAgICAgQVNTRVJUKHJlc3BvbmRpbmdOb2RlKTsKKyAgICAgICAgaWYgKGFuY2VzdG9yc1Rv
UmVzcG9uZGVyc1NldC5jb250YWlucyhyZXNwb25kaW5nTm9kZSkpCisgICAgICAgICAgICBjb250
aW51ZTsKKyAgICAgICAgYXBwZW5kQWJzb2x1dGVRdWFkc0Zvck5vZGVUb0hpdFRlc3RMaXN0KCpp
dDIsIGhpdFRlc3RMaXN0KTsKKyAgICB9Cit9CisKK2Zsb2F0IGRpc3RhbmNlU3F1YXJlZFRvUXVh
ZENlbnRlckxpbmUoY29uc3QgSW50UG9pbnQmIHRvdWNoSG90c3BvdCwgY29uc3QgSW50UmVjdCYs
IGNvbnN0IFF1YWRGb3JIaXRUZXN0JiBxdWFkRm9ySGl0VGVzdCkKK3sKKyAgICAvLyBGb3IgYSBi
ZXR0ZXIgY2VudGVyIG9mIGEgbGluZS1ib3ggd2UgdXNlIHRoZSBjZW50ZXItbGluZSBpbnN0ZWFk
IG9mIHRoZSBjZW50ZXItcG9pbnQuCisgICAgLy8gV2UgdXNlIHRoZSBjZW50ZXItbGluZSBvZiB0
aGUgYm91bmRpbmcgYm94IG9mIHRoZSBxdWFkIHRob3VnaCwgc2luY2UgaXQgaXMgbXVjaCBmYXN0
ZXIKKyAgICAvLyBhbmQgZ2l2ZXMgdGhlIHNhbWUgcmVzdWx0IGluIGFsbCB1bnRyYW5zZm9ybWVk
IGNhc2VzLCBhbmQgaW4gdHJhbnNmb3JtZWQgY2FzZXMgc3RpbGwKKyAgICAvLyBnaXZlcyBhIGJl
dHRlciBkaXN0YW5jZS1tZXRyaWMgdGhhbiB0aGUgZGlzdGFuY2UgdG8gdGhlIGNlbnRlci1wb2lu
dC4KKyAgICBJbnRSZWN0IHJlY3QgPSBxdWFkRm9ySGl0VGVzdC5ib3VuZGluZ0JveCgpOworCisg
ICAgcmV0dXJuIHJlY3QuZGlzdGFuY2VTcXVhcmVkRnJvbUNlbnRlckxpbmVUb1BvaW50KHRvdWNo
SG90c3BvdCk7Cit9CisKKy8vIEEgZ2VuZXJpYyBmdW5jdGlvbiBmb3IgZmluZGluZyB0aGUgUXVh
ZE5vZGUgd2l0aCB0aGUgbG93ZXN0IG1ldHJpYy4gQSBtZXRyaWMgaGVyZSBtZWFucworLy8gYW55
IHdheSBvZiBtZWFzdXJpbmcgY29tcGFyYWJsZSBkaXN0YW5jZXMgYmV0d2VlbiBvYmplY3RzLgor
Ym9vbCBmaW5kTm9kZVdpdGhMb3dlc3RNZXRyaWMoTm9kZSomIHRhcmdldE5vZGUsIEludFBvaW50
JiB0YXJnZXRQb2ludCwgY29uc3QgSW50UG9pbnQmIHRvdWNoSG90c3BvdCwgY29uc3QgSW50UmVj
dCYgdG91Y2hBcmVhLCBRdWFkTm9kZUxpc3QmIGhpdFRlc3RMaXN0LCBNZXRyaWMgbWV0cmljKQor
eworICAgIHRhcmdldE5vZGUgPSAwOworCisgICAgZmxvYXQgYmVzdE1ldHJpYyA9IElORklOSVRZ
OworICAgIFF1YWROb2RlTGlzdDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBoaXRUZXN0TGlzdC5iZWdp
bigpOworICAgIFF1YWROb2RlTGlzdDo6Y29uc3RfaXRlcmF0b3IgZW5kID0gaGl0VGVzdExpc3Qu
ZW5kKCk7CisgICAgZm9yICg7IGl0ICE9IGVuZDsgKytpdCkgeworICAgICAgICBOb2RlKiBoaXRO
b2RlID0gaXQtPm5vZGUoKTsKKyAgICAgICAgZmxvYXQgaGl0TWV0cmljID0gbWV0cmljKHRvdWNo
SG90c3BvdCwgdG91Y2hBcmVhLCAqaXQpOworICAgICAgICBpZiAoaGl0TWV0cmljIDwgYmVzdE1l
dHJpYykgeworICAgICAgICAgICAgdGFyZ2V0UG9pbnQgPSByb3VuZGVkSW50UG9pbnQoaXQtPnF1
YWQoKS5jZW50ZXIoKSk7CisgICAgICAgICAgICB0YXJnZXROb2RlID0gaGl0Tm9kZTsKKyAgICAg
ICAgICAgIGJlc3RNZXRyaWMgPSBoaXRNZXRyaWM7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBy
ZXR1cm4gKHRhcmdldE5vZGUpOworfQorCit9IC8vIG5hbWVzcGFjZSBUb3VjaEFkanVzdG1lbnQK
KworYm9vbCBmaW5kQmVzdENsaWNrYWJsZUNhbmRpZGF0ZShOb2RlKiYgdGFyZ2V0Tm9kZSwgSW50
UG9pbnQgJnRhcmdldFBvaW50LCBjb25zdCBJbnRQb2ludCAmdG91Y2hIb3RzcG90LCBjb25zdCBJ
bnRSZWN0ICZ0b3VjaEFyZWEsIGNvbnN0IE5vZGVMaXN0JiBub2RlTGlzdCkKK3sKKyAgICBUb3Vj
aEFkanVzdG1lbnQ6OlF1YWROb2RlTGlzdCBoaXRUZXN0TGlzdDsKKyAgICBUb3VjaEFkanVzdG1l
bnQ6OmNvbXBpbGVRdWFkc0ZvckhpdFRlc3Rpbmcobm9kZUxpc3QsIGhpdFRlc3RMaXN0LCBUb3Vj
aEFkanVzdG1lbnQ6Om5vZGVSZXNwb25kc1RvVGFwR2VzdHVyZSk7CisgICAgcmV0dXJuIFRvdWNo
QWRqdXN0bWVudDo6ZmluZE5vZGVXaXRoTG93ZXN0TWV0cmljKHRhcmdldE5vZGUsIHRhcmdldFBv
aW50LCB0b3VjaEhvdHNwb3QsIHRvdWNoQXJlYSwgaGl0VGVzdExpc3QsIFRvdWNoQWRqdXN0bWVu
dDo6ZGlzdGFuY2VTcXVhcmVkVG9RdWFkQ2VudGVyTGluZSk7Cit9CisKK30gLy8gbmFtZXNwYWNl
IFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvVG91Y2hBZGp1c3RtZW50
LmggYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL1RvdWNoQWRqdXN0bWVudC5oCm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmQ1
ZGZjMTBmNDQ4ZjJkOWRjMDE5ZmZkMzZmZGQ4OGM2NDZmODIyMjAKLS0tIC9kZXYvbnVsbAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9wYWdlL1RvdWNoQWRqdXN0bWVudC5oCkBAIC0wLDAgKzEsMzYgQEAK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgTm9raWEgQ29ycG9yYXRpb24gYW5kL29yIGl0cyBz
dWJzaWRpYXJ5KC1pZXMpCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlv
dSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJt
cyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlz
aGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAy
IG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgor
ICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdp
bGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4g
dGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwg
UHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUg
cmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNl
CisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAg
SWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwg
NTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMw
MSwgVVNBLgorICovCisKKyNpZm5kZWYgVG91Y2hBZGp1c3RtZW50X2gKKyNkZWZpbmUgVG91Y2hB
ZGp1c3RtZW50X2gKKworI2luY2x1ZGUgIkludFBvaW50LmgiCisjaW5jbHVkZSAiSW50UmVjdC5o
IgorI2luY2x1ZGUgIk5vZGUuaCIKKyNpbmNsdWRlICJOb2RlTGlzdC5oIgorI2luY2x1ZGUgPHd0
Zi9WZWN0b3IuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitib29sIGZpbmRCZXN0Q2xpY2th
YmxlQ2FuZGlkYXRlKE5vZGUqJiB0YXJnZXROb2RlLCBJbnRQb2ludCYgdGFyZ2V0UG9pbnQsIGNv
bnN0IEludFBvaW50JiB0b3VjaEhvdHNwb3QsIGNvbnN0IEludFJlY3QmIHRvdWNoQXJlYSwgY29u
c3QgTm9kZUxpc3QmKTsKKy8vIEZJWE1FOiBJbXBsZW1lbnQgdGhlIHNpbWlsYXIgZnVuY3Rpb25z
IGZvciBvdGhlciBnZXN0dXJlcyBoZXJlIGFzIHdlbGwuCisKK30gLy8gbmFtZXNwYWNlIFdlYkNv
cmUKKworI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9GbG9hdFF1YWQuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0Zsb2F0UXVh
ZC5oCmluZGV4IGI1ZTJhOGNhNGQ1NTQyMGI0ZTUzZTQ5YzJkMzZhNjkyNDAxYWIwOWQuLmJmYjc5
NGRlZjg1ODZmYmM2YjFjMjUxMGNmMTIzMmIxMGI5ODA4NGMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0Zsb2F0UXVhZC5oCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL0Zsb2F0UXVhZC5oCkBAIC04OCw2ICs4OCwxMyBAQCBwdWJsaWM6
CiAgICAgLy8gZnJvbSB0cmFuc2Zvcm1lZCByZWN0cy4KICAgICBib29sIGNvbnRhaW5zUXVhZChj
b25zdCBGbG9hdFF1YWQmKSBjb25zdDsKIAorICAgIC8vIFRoZSBjZW50ZXIgb2YgdGhlIHF1YWQu
IElmIHRoZSBxdWFkIGlzIHRoZSByZXN1bHQgb2YgYSBhZmZpbmUtdHJhbnNmb3JtZWQgcmVjdGFu
Z2xlIHRoaXMgaXMgdGhlIHNhbWUgYXMgdGhlIG9yaWdpbmFsIGNlbnRlciB0cmFuc2Zvcm1lZC4K
KyAgICBGbG9hdFBvaW50IGNlbnRlcigpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gRmxv
YXRQb2ludCgobV9wMS54KCkgKyBtX3AyLngoKSArIG1fcDMueCgpICsgbV9wNC54KCkpIC8gNC4w
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAobV9wMS55KCkgKyBtX3AyLnkoKSArIG1fcDMu
eSgpICsgbV9wNC55KCkpIC8gNC4wKTsKKyAgICB9CisKICAgICBGbG9hdFJlY3QgYm91bmRpbmdC
b3goKSBjb25zdDsKICAgICBJbnRSZWN0IGVuY2xvc2luZ0JvdW5kaW5nQm94KCkgY29uc3QKICAg
ICB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbnRQb2lu
dC5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW50UG9pbnQuaAppbmRleCBk
ZGM0MWI0MjNkMjE1ZmUwYTE4NTQyODI0NDEwZTI0OTc2NzVkOWFhLi4wYWY2ZTg1NzAxMWYxZWQ4
OGY5Y2NmNWY2ZDM4ODVjYjQxMGQ1OTFjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9JbnRQb2ludC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL0ludFBvaW50LmgKQEAgLTExMSw2ICsxMTEsOCBAQCBwdWJsaWM6CiAgICAgICAgICAg
ICBtX3kgPCBvdGhlci5tX3kgPyBtX3kgOiBvdGhlci5tX3kpOwogICAgIH0KIAorICAgIGludCBk
aXN0YW5jZVNxdWFyZWRUb1BvaW50KGNvbnN0IEludFBvaW50JikgY29uc3Q7CisKICAgICB2b2lk
IGNsYW1wTmVnYXRpdmVUb1plcm8oKQogICAgIHsKICAgICAgICAgKnRoaXMgPSBleHBhbmRlZFRv
KHplcm8oKSk7CkBAIC0yMjIsNiArMjI0LDExIEBAIGlubGluZSBJbnRTaXplIHRvU2l6ZShjb25z
dCBJbnRQb2ludCYgYSkKICAgICByZXR1cm4gSW50U2l6ZShhLngoKSwgYS55KCkpOwogfQogCitp
bmxpbmUgaW50IEludFBvaW50OjpkaXN0YW5jZVNxdWFyZWRUb1BvaW50KGNvbnN0IEludFBvaW50
JiBwb2ludCkgY29uc3QKK3sKKyAgICByZXR1cm4gKCgqdGhpcykgLSBwb2ludCkuZGlhZ29uYWxM
ZW5ndGhTcXVhcmVkKCk7Cit9CisKICNpZiBQTEFURk9STShRVCkKIGlubGluZSBRRGF0YVN0cmVh
bSYgb3BlcmF0b3I8PChRRGF0YVN0cmVhbSYgc3RyZWFtLCBjb25zdCBJbnRQb2ludCYgcG9pbnQp
CiB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbnRSZWN0
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ludFJlY3QuY3BwCmluZGV4
IDAzYzM1ZTgzYmY0MjcwZjE5YTZkM2M2MGQxNjY3MjNkZmRiOTJiMTguLmRmYTJmOTFmMThhNTk3
M2VjOGZhOTNhZDVjNThmZDk2NWJkZDU0YjggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL0ludFJlY3QuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL0ludFJlY3QuY3BwCkBAIC0xMzIsNiArMTMyLDM1IEBAIHZvaWQgSW50UmVjdDo6
c2NhbGUoZmxvYXQgcykKICAgICBtX3NpemUuc2V0SGVpZ2h0KChpbnQpKGhlaWdodCgpICogcykp
OwogfQogCitzdGF0aWMgaW5saW5lIGludCBkaXN0YW5jZVRvSW50ZXJ2YWwoaW50IHBvcywgaW50
IHN0YXJ0LCBpbnQgZW5kKQoreworICAgIGlmIChwb3MgPCBzdGFydCkKKyAgICAgICAgcmV0dXJu
IHN0YXJ0IC0gcG9zOworICAgIGlmIChwb3MgPiBlbmQpCisgICAgICAgIHJldHVybiBlbmQgLSBw
b3M7CisgICAgcmV0dXJuIDA7Cit9CisKK0ludFNpemUgSW50UmVjdDo6ZGlmZmVyZW5jZVRvUG9p
bnQoY29uc3QgSW50UG9pbnQmIHBvaW50KSBjb25zdAoreworICAgIGludCB4ZGlzdGFuY2UgPSBk
aXN0YW5jZVRvSW50ZXJ2YWwocG9pbnQueCgpLCB4KCksIG1heFgoKSk7CisgICAgaW50IHlkaXN0
YW5jZSA9IGRpc3RhbmNlVG9JbnRlcnZhbChwb2ludC55KCksIHkoKSwgbWF4WSgpKTsKKyAgICBy
ZXR1cm4gSW50U2l6ZSh4ZGlzdGFuY2UsIHlkaXN0YW5jZSk7Cit9CisKK0ludFNpemUgSW50UmVj
dDo6ZGlmZmVyZW5jZUZyb21DZW50ZXJMaW5lVG9Qb2ludChjb25zdCBJbnRQb2ludCYgcG9pbnQp
IGNvbnN0Cit7CisgICAgLy8gVGhlIGNlbnRlci1saW5lIGlzIHRoZSBuYXR1cmFsIGNlbnRlciBv
ZiBhIHJlY3RhbmdsZS4gSXQgaGFzIGFuIGVxdWFsIGRpc3RhbmNlIHRvIGFsbCBzaWRlcyBvZiB0
aGUgcmVjdGFuZ2xlLgorICAgIEludFBvaW50IGNlbnRlclBvaW50ID0gY2VudGVyKCk7CisgICAg
aW50IHhkaXN0YW5jZSA9IGNlbnRlclBvaW50LngoKSAtIHBvaW50LngoKTsKKyAgICBpbnQgeWRp
c3RhbmNlID0gY2VudGVyUG9pbnQueSgpIC0gcG9pbnQueSgpOworICAgIGlmICh3aWR0aCgpID4g
aGVpZ2h0KCkpCisgICAgICAgIHhkaXN0YW5jZSA9IGRpc3RhbmNlVG9JbnRlcnZhbChwb2ludC54
KCksIHgoKSArIChoZWlnaHQoKSAvIDIpLCBtYXhYKCkgLSAoaGVpZ2h0KCkgLyAyKSk7CisgICAg
ZWxzZQorICAgICAgICB5ZGlzdGFuY2UgPSBkaXN0YW5jZVRvSW50ZXJ2YWwocG9pbnQueSgpLCB5
KCkgKyAod2lkdGgoKSAvIDIpLCBtYXhZKCkgLSAod2lkdGgoKSAvIDIpKTsKKyAgICByZXR1cm4g
SW50U2l6ZSh4ZGlzdGFuY2UsIHlkaXN0YW5jZSk7Cit9CisKIEludFJlY3QgdW5pb25SZWN0KGNv
bnN0IFZlY3RvcjxJbnRSZWN0PiYgcmVjdHMpCiB7CiAgICAgSW50UmVjdCByZXN1bHQ7CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbnRSZWN0LmggYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbnRSZWN0LmgKaW5kZXggNjAwYzIxZDBkYWUw
MDlhOTE5OGE1ZWJmMTE5ZjFlNjczNTM1OTc0Mi4uY2E3ZmVhNDdhMWMwODQ0NGMwYzM5YTc1YjRm
OTczMDUxZmE2MmFiOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvSW50UmVjdC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ludFJl
Y3QuaApAQCAtMTg2LDYgKzE4NiwxMSBAQCBwdWJsaWM6CiAgICAgdm9pZCBpbmZsYXRlKGludCBk
KSB7IGluZmxhdGVYKGQpOyBpbmZsYXRlWShkKTsgfQogICAgIHZvaWQgc2NhbGUoZmxvYXQgcyk7
CiAKKyAgICBJbnRTaXplIGRpZmZlcmVuY2VUb1BvaW50KGNvbnN0IEludFBvaW50JikgY29uc3Q7
CisgICAgSW50U2l6ZSBkaWZmZXJlbmNlRnJvbUNlbnRlckxpbmVUb1BvaW50KGNvbnN0IEludFBv
aW50JikgY29uc3Q7CisgICAgaW50IGRpc3RhbmNlU3F1YXJlZFRvUG9pbnQoY29uc3QgSW50UG9p
bnQmIHApIGNvbnN0IHsgcmV0dXJuIGRpZmZlcmVuY2VUb1BvaW50KHApLmRpYWdvbmFsTGVuZ3Ro
U3F1YXJlZCgpOyB9CisgICAgaW50IGRpc3RhbmNlU3F1YXJlZEZyb21DZW50ZXJMaW5lVG9Qb2lu
dChjb25zdCBJbnRQb2ludCYgcCkgY29uc3QgeyByZXR1cm4gZGlmZmVyZW5jZUZyb21DZW50ZXJM
aW5lVG9Qb2ludChwKS5kaWFnb25hbExlbmd0aFNxdWFyZWQoKTsgfQorCiAgICAgSW50UmVjdCB0
cmFuc3Bvc2VkUmVjdCgpIGNvbnN0IHsgcmV0dXJuIEludFJlY3QobV9sb2NhdGlvbi50cmFuc3Bv
c2VkUG9pbnQoKSwgbV9zaXplLnRyYW5zcG9zZWRTaXplKCkpOyB9CiAKICNpZiBQTEFURk9STShX
WCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ludFNpemUu
aCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ludFNpemUuaAppbmRleCAxNjM5
ODQ3NjYyZjZlNDgxYjM2NGRjYzNmYzE2ZWFmMzk3Y2E0OTliLi5mMTFmODE1Yzc0NmFhMTcyMGI2
YzQ4NGMwNDA0MzZmMTFkMDVkOGRjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9JbnRTaXplLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvSW50U2l6ZS5oCkBAIC0xMDQsNiArMTA0LDExIEBAIHB1YmxpYzoKICAgICAgICAgKnRoaXMg
PSBleHBhbmRlZFRvKEludFNpemUoKSk7CiAgICAgfQogCisgICAgaW50IGRpYWdvbmFsTGVuZ3Ro
U3F1YXJlZCgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gbV93aWR0aCAqIG1fd2lkdGgg
KyBtX2hlaWdodCAqIG1faGVpZ2h0OworICAgIH0KKwogICAgIEludFNpemUgdHJhbnNwb3NlZFNp
emUoKSBjb25zdAogICAgIHsKICAgICAgICAgcmV0dXJuIEludFNpemUobV9oZWlnaHQsIG1fd2lk
dGgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvdGVzdGluZy9JbnRlcm5hbHMuY3BwIGIv
U291cmNlL1dlYkNvcmUvdGVzdGluZy9JbnRlcm5hbHMuY3BwCmluZGV4IGFhZmU5YWRlNzBkMjBj
Y2YyYjQyOGI3NzkyNjY4ZmM1YzdkOTJkZTEuLjBlODlkYjNhZTJlOTBmNTE3ZjFmNjYxZmVjOWRh
M2NlMDNjODkzODYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3Rlc3RpbmcvSW50ZXJuYWxz
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS90ZXN0aW5nL0ludGVybmFscy5jcHAKQEAgLTY0LDYg
KzY0LDExIEBACiAjaW5jbHVkZSAiQ29sb3JDaG9vc2VyLmgiCiAjZW5kaWYKIAorI2lmIEVOQUJM
RShUT1VDSF9BREpVU1RNRU5UKQorI2luY2x1ZGUgIkV2ZW50SGFuZGxlci5oIgorI2luY2x1ZGUg
IldlYktpdFBvaW50LmgiCisjZW5kaWYKKwogbmFtZXNwYWNlIFdlYkNvcmUgewogCiBzdGF0aWMg
Ym9vbCBtYXJrZXJUeXBlc0Zyb20oY29uc3QgU3RyaW5nJiBtYXJrZXJUeXBlLCBEb2N1bWVudE1h
cmtlcjo6TWFya2VyVHlwZXMmIHJlc3VsdCkKQEAgLTU1OSw2ICs1NjQsNDYgQEAgU3RyaW5nIElu
dGVybmFsczo6cmFuZ2VBc1RleHQoY29uc3QgUmFuZ2UqIHJhbmdlLCBFeGNlcHRpb25Db2RlJiBl
YykKICAgICByZXR1cm4gcmFuZ2UtPnRleHQoKTsKIH0KIAorCisjaWYgRU5BQkxFKFRPVUNIX0FE
SlVTVE1FTlQpCitQYXNzUmVmUHRyPFdlYktpdFBvaW50PiBJbnRlcm5hbHM6OnRvdWNoUG9zaXRp
b25BZGp1c3RlZFRvQmVzdENsaWNrYWJsZU5vZGUobG9uZyB4LCBsb25nIHksIGxvbmcgd2lkdGgs
IGxvbmcgaGVpZ2h0LCBEb2N1bWVudCogZG9jdW1lbnQsIEV4Y2VwdGlvbkNvZGUmIGVjKQorewor
ICAgIGlmICghZG9jdW1lbnQgfHwgIWRvY3VtZW50LT5mcmFtZSgpKSB7CisgICAgICAgIGVjID0g
SU5WQUxJRF9BQ0NFU1NfRVJSOworICAgICAgICByZXR1cm4gMDsKKyAgICB9CisKKyAgICBJbnRT
aXplIHJhZGl1cyh3aWR0aCAvIDIsIGhlaWdodCAvIDIpOworICAgIEludFBvaW50IHBvaW50KHgg
KyByYWRpdXMud2lkdGgoKSwgeSArIHJhZGl1cy5oZWlnaHQoKSk7CisKKyAgICBOb2RlKiB0YXJn
ZXROb2RlOworICAgIEludFBvaW50IGFkanVzdGVkUG9pbnQ7CisKKyAgICBkb2N1bWVudC0+ZnJh
bWUoKS0+ZXZlbnRIYW5kbGVyKCktPmJlc3RDbGlja2FibGVOb2RlRm9yVG91Y2hQb2ludChwb2lu
dCwgcmFkaXVzLCBhZGp1c3RlZFBvaW50LCB0YXJnZXROb2RlKTsKKworICAgIHJldHVybiBXZWJL
aXRQb2ludDo6Y3JlYXRlKGFkanVzdGVkUG9pbnQueCgpLCBhZGp1c3RlZFBvaW50LnkoKSk7Cit9
CisKK1Bhc3NSZWZQdHI8Tm9kZT4gSW50ZXJuYWxzOjp0b3VjaE5vZGVBZGp1c3RlZFRvQmVzdENs
aWNrYWJsZU5vZGUobG9uZyB4LCBsb25nIHksIGxvbmcgd2lkdGgsIGxvbmcgaGVpZ2h0LCBEb2N1
bWVudCogZG9jdW1lbnQsIEV4Y2VwdGlvbkNvZGUmIGVjKQoreworICAgIGlmICghZG9jdW1lbnQg
fHwgIWRvY3VtZW50LT5mcmFtZSgpKSB7CisgICAgICAgIGVjID0gSU5WQUxJRF9BQ0NFU1NfRVJS
OworICAgICAgICByZXR1cm4gMDsKKyAgICB9CisKKyAgICBJbnRTaXplIHJhZGl1cyh3aWR0aCAv
IDIsIGhlaWdodCAvIDIpOworICAgIEludFBvaW50IHBvaW50KHggKyByYWRpdXMud2lkdGgoKSwg
eSArIHJhZGl1cy5oZWlnaHQoKSk7CisKKyAgICBOb2RlKiB0YXJnZXROb2RlOworICAgIEludFBv
aW50IGFkanVzdGVkUG9pbnQ7CisKKyAgICBkb2N1bWVudC0+ZnJhbWUoKS0+ZXZlbnRIYW5kbGVy
KCktPmJlc3RDbGlja2FibGVOb2RlRm9yVG91Y2hQb2ludChwb2ludCwgcmFkaXVzLCBhZGp1c3Rl
ZFBvaW50LCB0YXJnZXROb2RlKTsKKworICAgIHJldHVybiBhZG9wdFJlZih0YXJnZXROb2RlKTsK
K30KKyNlbmRpZgorCisKIGludCBJbnRlcm5hbHM6Omxhc3RTcGVsbENoZWNrUmVxdWVzdFNlcXVl
bmNlKERvY3VtZW50KiBkb2N1bWVudCwgRXhjZXB0aW9uQ29kZSYgZWMpCiB7CiAgICAgU3BlbGxD
aGVja2VyKiBjaGVja2VyID0gc3BlbGxjaGVja2VyKGRvY3VtZW50KTsKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3Rlc3RpbmcvSW50ZXJuYWxzLmggYi9Tb3VyY2UvV2ViQ29yZS90ZXN0aW5n
L0ludGVybmFscy5oCmluZGV4IGFkYWNhMzRlZGVjYzZhNWVjNjExZDE4ZDJjOTNiMjgzMGUyOGZi
ZDguLjFkNjg5MzIzZGEwMjliNzRkMzM4YzhjYWNiMTJlYWYwMGEzNDRlZTMgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3Rlc3RpbmcvSW50ZXJuYWxzLmgKKysrIGIvU291cmNlL1dlYkNvcmUv
dGVzdGluZy9JbnRlcm5hbHMuaApAQCAtNDIsNiArNDIsNyBAQCBjbGFzcyBJbnRlcm5hbFNldHRp
bmdzOwogY2xhc3MgTm9kZTsKIGNsYXNzIFJhbmdlOwogY2xhc3MgU2hhZG93Um9vdDsKK2NsYXNz
IFdlYktpdFBvaW50OwogCiB0eXBlZGVmIGludCBFeGNlcHRpb25Db2RlOwogCkBAIC0xMDgsNiAr
MTA5LDExIEBAIHB1YmxpYzoKICAgICB1bnNpZ25lZCBsZW5ndGhGcm9tUmFuZ2UoRWxlbWVudCog
c2NvcGUsIGNvbnN0IFJhbmdlKiwgRXhjZXB0aW9uQ29kZSYpOwogICAgIFN0cmluZyByYW5nZUFz
VGV4dChjb25zdCBSYW5nZSosIEV4Y2VwdGlvbkNvZGUmKTsKIAorI2lmIEVOQUJMRShUT1VDSF9B
REpVU1RNRU5UKQorICAgIFBhc3NSZWZQdHI8V2ViS2l0UG9pbnQ+IHRvdWNoUG9zaXRpb25BZGp1
c3RlZFRvQmVzdENsaWNrYWJsZU5vZGUobG9uZyB4LCBsb25nIHksIGxvbmcgd2lkdGgsIGxvbmcg
aGVpZ2h0LCBEb2N1bWVudCosIEV4Y2VwdGlvbkNvZGUmKTsKKyAgICBQYXNzUmVmUHRyPE5vZGU+
IHRvdWNoTm9kZUFkanVzdGVkVG9CZXN0Q2xpY2thYmxlTm9kZShsb25nIHgsIGxvbmcgeSwgbG9u
ZyB3aWR0aCwgbG9uZyBoZWlnaHQsIERvY3VtZW50KiwgRXhjZXB0aW9uQ29kZSYpOworI2VuZGlm
CisKICAgICBpbnQgbGFzdFNwZWxsQ2hlY2tSZXF1ZXN0U2VxdWVuY2UoRG9jdW1lbnQqLCBFeGNl
cHRpb25Db2RlJik7CiAgICAgaW50IGxhc3RTcGVsbENoZWNrUHJvY2Vzc2VkU2VxdWVuY2UoRG9j
dW1lbnQqLCBFeGNlcHRpb25Db2RlJik7CiAgICAgCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS90ZXN0aW5nL0ludGVybmFscy5pZGwgYi9Tb3VyY2UvV2ViQ29yZS90ZXN0aW5nL0ludGVybmFs
cy5pZGwKaW5kZXggMzk0Mzc2ZTc5Y2M1ZDNjMGM3ZmUxMWU0YjY0Nzc4YTU2NDI4OGRhYy4uOTU3
NzQ1NWJjMWU3OTllZTc0MmM2NzM1Y2RlODQ3ZjRiMmVlYmE3NSAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvdGVzdGluZy9JbnRlcm5hbHMuaWRsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Rlc3Rp
bmcvSW50ZXJuYWxzLmlkbApAQCAtODQsNiArODQsMTEgQEAgbW9kdWxlIHdpbmRvdyB7CiAgICAg
ICAgIHVuc2lnbmVkIGxvbmcgbGVuZ3RoRnJvbVJhbmdlKGluIEVsZW1lbnQgc2NvcGUsIGluIFJh
bmdlIHJhbmdlKSByYWlzZXMgKERPTUV4Y2VwdGlvbik7CiAgICAgICAgIERPTVN0cmluZyByYW5n
ZUFzVGV4dChpbiBSYW5nZSByYW5nZSkgcmFpc2VzIChET01FeGNlcHRpb24pOwogCisjaWYgZGVm
aW5lZChFTkFCTEVfVE9VQ0hfQURKVVNUTUVOVCkgJiYgRU5BQkxFX1RPVUNIX0FESlVTVE1FTlQK
KyAgICAgICAgV2ViS2l0UG9pbnQgdG91Y2hQb3NpdGlvbkFkanVzdGVkVG9CZXN0Q2xpY2thYmxl
Tm9kZShpbiBsb25nIHgsIGluIGxvbmcgeSwgaW4gbG9uZyB3aWR0aCwgaW4gbG9uZyBoZWlnaHQs
IGluIERvY3VtZW50IGRvY3VtZW50KSByYWlzZXMgKERPTUV4Y2VwdGlvbik7CisgICAgICAgIE5v
ZGUgdG91Y2hOb2RlQWRqdXN0ZWRUb0Jlc3RDbGlja2FibGVOb2RlKGluIGxvbmcgeCwgaW4gbG9u
ZyB5LCBpbiBsb25nIHdpZHRoLCBpbiBsb25nIGhlaWdodCwgaW4gRG9jdW1lbnQgZG9jdW1lbnQp
IHJhaXNlcyAoRE9NRXhjZXB0aW9uKTsKKyNlbmRpZgorCiAgICAgICAgIGxvbmcgbGFzdFNwZWxs
Q2hlY2tSZXF1ZXN0U2VxdWVuY2UoaW4gRG9jdW1lbnQgZG9jdW1lbnQpIHJhaXNlcyAoRE9NRXhj
ZXB0aW9uKTsKICAgICAgICAgbG9uZyBsYXN0U3BlbGxDaGVja1Byb2Nlc3NlZFNlcXVlbmNlKGlu
IERvY3VtZW50IGRvY3VtZW50KSByYWlzZXMgKERPTUV4Y2VwdGlvbik7CiAKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkuY3BwIGIvU291cmNlL1dlYktp
dDIvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5jcHAKaW5kZXggNDA5NzM0NDlhNTg4ODQzOGU3MzA1
NzU2YzNkMGFjYWEzMTUxYmJmNi4uYzUyM2I1ZDJkYTg2NzljOGQ2ZTQwY2ZiNTYxM2VhZDQ3ZjU1
YzA2YyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5j
cHAKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5jcHAKQEAgLTk5
OSw5ICs5OTksOSBAQCB2b2lkIFdlYlBhZ2VQcm94eTo6aGFuZGxlR2VzdHVyZUV2ZW50KGNvbnN0
IFdlYkdlc3R1cmVFdmVudCYgZXZlbnQpCiAKICNpZiBFTkFCTEUoVE9VQ0hfRVZFTlRTKQogI2lm
IFBMQVRGT1JNKFFUKQotdm9pZCBXZWJQYWdlUHJveHk6OmhhbmRsZVBvdGVudGlhbEFjdGl2YXRp
b24oY29uc3QgSW50UG9pbnQmIGxheW91dFBvaW50KQordm9pZCBXZWJQYWdlUHJveHk6OmhhbmRs
ZVBvdGVudGlhbEFjdGl2YXRpb24oY29uc3QgSW50UG9pbnQmIHRvdWNoUG9pbnQsIGNvbnN0IElu
dFNpemUmIHRvdWNoQXJlYSkKIHsKLSAgICBwcm9jZXNzKCktPnNlbmQoTWVzc2FnZXM6OldlYlBh
Z2U6OkhpZ2hsaWdodFBvdGVudGlhbEFjdGl2YXRpb24obGF5b3V0UG9pbnQpLCBtX3BhZ2VJRCk7
CisgICAgcHJvY2VzcygpLT5zZW5kKE1lc3NhZ2VzOjpXZWJQYWdlOjpIaWdobGlnaHRQb3RlbnRp
YWxBY3RpdmF0aW9uKHRvdWNoUG9pbnQsIHRvdWNoQXJlYSksIG1fcGFnZUlEKTsKIH0KICNlbmRp
ZgogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViUGFnZVByb3h5Lmgg
Yi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViUGFnZVByb3h5LmgKaW5kZXggNTA0OTIyOGUy
MTlkYmI4ZDg4MDBjMWMwZDU2MGFlYWJiZjI4ZGJiYy4uZGZjNjFjNGRmY2E3Njc4MzJkNTQzNDdm
ZWNjZmQxOWVjMGY5ZGZjYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dl
YlBhZ2VQcm94eS5oCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJQYWdlUHJveHku
aApAQCAtMzg2LDcgKzM4Niw3IEBAIHB1YmxpYzoKICNpZiBFTkFCTEUoVE9VQ0hfRVZFTlRTKQog
ICAgIHZvaWQgaGFuZGxlVG91Y2hFdmVudChjb25zdCBOYXRpdmVXZWJUb3VjaEV2ZW50Jik7CiAj
aWYgUExBVEZPUk0oUVQpCi0gICAgdm9pZCBoYW5kbGVQb3RlbnRpYWxBY3RpdmF0aW9uKGNvbnN0
IFdlYkNvcmU6OkludFBvaW50Jik7CisgICAgdm9pZCBoYW5kbGVQb3RlbnRpYWxBY3RpdmF0aW9u
KGNvbnN0IFdlYkNvcmU6OkludFBvaW50JiB0b3VjaFBvaW50LCBjb25zdCBXZWJDb3JlOjpJbnRT
aXplJiB0b3VjaEFyZWEpOwogI2VuZGlmCiAjZW5kaWYKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdDIvVUlQcm9jZXNzL3F0L1F0V2ViUGFnZUV2ZW50SGFuZGxlci5jcHAgYi9Tb3VyY2UvV2Vi
S2l0Mi9VSVByb2Nlc3MvcXQvUXRXZWJQYWdlRXZlbnRIYW5kbGVyLmNwcAppbmRleCA5NWVkNDMx
OTE2ZDQwZmQ3NTgxZDdlMzcxMTZjMWU4NDZhYWU1NTNiLi4yYmJiYmYyMDkyNWM0MmY0NDA1YTRj
NTk2ODRmOGRlMGNmMGRkOGExIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3Mv
cXQvUXRXZWJQYWdlRXZlbnRIYW5kbGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nl
c3MvcXQvUXRXZWJQYWdlRXZlbnRIYW5kbGVyLmNwcApAQCAtMjMxLDcgKzIzMSw3IEBAIHZvaWQg
UXRXZWJQYWdlRXZlbnRIYW5kbGVyOjpoYW5kbGVEcm9wRXZlbnQoUURyb3BFdmVudCogZXYpCiB2
b2lkIFF0V2ViUGFnZUV2ZW50SGFuZGxlcjo6aGFuZGxlUG90ZW50aWFsU2luZ2xlVGFwRXZlbnQo
Y29uc3QgUVRvdWNoRXZlbnQ6OlRvdWNoUG9pbnQmIHBvaW50KQogewogICAgIFFUcmFuc2Zvcm0g
ZnJvbUl0ZW1UcmFuc2Zvcm0gPSBtX3dlYlBhZ2UtPnRyYW5zZm9ybUZyb21JdGVtKCk7Ci0gICAg
bV93ZWJQYWdlUHJveHktPmhhbmRsZVBvdGVudGlhbEFjdGl2YXRpb24oZnJvbUl0ZW1UcmFuc2Zv
cm0ubWFwKHBvaW50LnBvcygpKS50b1BvaW50KCkpOworICAgIG1fd2ViUGFnZVByb3h5LT5oYW5k
bGVQb3RlbnRpYWxBY3RpdmF0aW9uKGZyb21JdGVtVHJhbnNmb3JtLm1hcChwb2ludC5wb3MoKSku
dG9Qb2ludCgpLCBJbnRTaXplKHBvaW50LnJlY3QoKS5zaXplKCkudG9TaXplKCkpKTsKIH0KIAog
dm9pZCBRdFdlYlBhZ2VFdmVudEhhbmRsZXI6OmhhbmRsZVNpbmdsZVRhcEV2ZW50KGNvbnN0IFFU
b3VjaEV2ZW50OjpUb3VjaFBvaW50JiBwb2ludCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQy
L1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmNwcCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nl
c3MvV2ViUGFnZS9XZWJQYWdlLmNwcAppbmRleCA5ZjhiNDE3YTVhOTVmNWVkZGIxYjYwNjFhN2Y1
YzFkY2I1MDg2M2JlLi40M2E1ZTc4M2ZmMjQwNDNkZGViMGM5ZWVhYmY0MWQ3ZDIzNWViYjE5IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5jcHAK
KysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UuY3BwCkBAIC0x
NDQzLDE2ICsxNDQzLDIwIEBAIHZvaWQgV2ViUGFnZTo6cmVzdG9yZVNlc3Npb25BbmROYXZpZ2F0
ZVRvQ3VycmVudEl0ZW0oY29uc3QgU2Vzc2lvblN0YXRlJiBzZXNzaW9uCiAKICNpZiBFTkFCTEUo
VE9VQ0hfRVZFTlRTKQogI2lmIFBMQVRGT1JNKFFUKQotdm9pZCBXZWJQYWdlOjpoaWdobGlnaHRQ
b3RlbnRpYWxBY3RpdmF0aW9uKGNvbnN0IEludFBvaW50JiBwb2ludCkKK3ZvaWQgV2ViUGFnZTo6
aGlnaGxpZ2h0UG90ZW50aWFsQWN0aXZhdGlvbihjb25zdCBJbnRQb2ludCYgcG9pbnQsIGNvbnN0
IEludFNpemUmIGFyZWEpCiB7CiAgICAgTm9kZSogYWN0aXZhdGlvbk5vZGUgPSAwOwogICAgIEZy
YW1lKiBtYWluZnJhbWUgPSBtX3BhZ2UtPm1haW5GcmFtZSgpOworICAgIEludFBvaW50IGFkanVz
dGVkUG9pbnQ7CiAKICAgICBpZiAocG9pbnQgIT0gSW50UG9pbnQ6Onplcm8oKSkgeworI2lmIEVO
QUJMRShUT1VDSF9BREpVU1RNRU5UKQorICAgICAgICBtYWluZnJhbWUtPmV2ZW50SGFuZGxlcigp
LT5iZXN0Q2xpY2thYmxlTm9kZUZvclRvdWNoUG9pbnQocG9pbnQsIEludFNpemUoYXJlYS53aWR0
aCgpIC8gMiwgYXJlYS5oZWlnaHQoKSAvIDIpLCBhZGp1c3RlZFBvaW50LCBhY3RpdmF0aW9uTm9k
ZSk7CisjZWxzZQogICAgICAgICBIaXRUZXN0UmVzdWx0IHJlc3VsdCA9IG1haW5mcmFtZS0+ZXZl
bnRIYW5kbGVyKCktPmhpdFRlc3RSZXN1bHRBdFBvaW50KG1haW5mcmFtZS0+dmlldygpLT53aW5k
b3dUb0NvbnRlbnRzKHBvaW50KSwgLyphbGxvd1NoYWRvd0NvbnRlbnQqLyBmYWxzZSwgLyppZ25v
cmVDbGlwcGluZyovIHRydWUpOwogICAgICAgICBhY3RpdmF0aW9uTm9kZSA9IHJlc3VsdC5pbm5l
ck5vZGUoKTsKLQotICAgICAgICBpZiAoIWFjdGl2YXRpb25Ob2RlLT5pc0ZvY3VzYWJsZSgpKQor
I2VuZGlmCisgICAgICAgIGlmIChhY3RpdmF0aW9uTm9kZSAmJiAhYWN0aXZhdGlvbk5vZGUtPmlz
Rm9jdXNhYmxlKCkpCiAgICAgICAgICAgICBhY3RpdmF0aW9uTm9kZSA9IGFjdGl2YXRpb25Ob2Rl
LT5lbmNsb3NpbmdMaW5rRXZlbnRQYXJlbnRPclNlbGYoKTsKICAgICB9CiAKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmggYi9Tb3VyY2UvV2Vi
S2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5oCmluZGV4IGJjODRlMzU5YzQ4ZThiMzA1
YTRjMDllM2M5NzdmZDcxODcxNzJkOGEuLjFlNGNmOTJkNzU1Y2MwNThkZGNiYzgzZGY4NjI4MDdi
MmRlZjdmZDcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9X
ZWJQYWdlLmgKKysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2Uu
aApAQCAtNTYzLDcgKzU2Myw3IEBAIHByaXZhdGU6CiAgICAgdm9pZCB0b3VjaEV2ZW50KGNvbnN0
IFdlYlRvdWNoRXZlbnQmKTsKICAgICB2b2lkIHRvdWNoRXZlbnRTeW5jRm9yVGVzdGluZyhjb25z
dCBXZWJUb3VjaEV2ZW50JiwgYm9vbCYgaGFuZGxlZCk7CiAjaWYgUExBVEZPUk0oUVQpCi0gICAg
dm9pZCBoaWdobGlnaHRQb3RlbnRpYWxBY3RpdmF0aW9uKGNvbnN0IFdlYkNvcmU6OkludFBvaW50
Jik7CisgICAgdm9pZCBoaWdobGlnaHRQb3RlbnRpYWxBY3RpdmF0aW9uKGNvbnN0IFdlYkNvcmU6
OkludFBvaW50JiwgY29uc3QgV2ViQ29yZTo6SW50U2l6ZSYgYXJlYSk7CiAjZW5kaWYKICNlbmRp
ZgogICAgIHZvaWQgY29udGV4dE1lbnVIaWRkZW4oKSB7IG1faXNTaG93aW5nQ29udGV4dE1lbnUg
PSBmYWxzZTsgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdl
L1dlYlBhZ2UubWVzc2FnZXMuaW4gYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2Uv
V2ViUGFnZS5tZXNzYWdlcy5pbgppbmRleCAyYzk0MzYwNDI4MzMxOTMyZGZhMzg3NTc5MDc4NWNh
MDg5MjBiMmM2Li5iMWZlNWJhZjIxZGE1ZTE2YTAxYjVhZTNmZTg2MWFkODJmMjQ5OGY4IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5tZXNzYWdl
cy5pbgorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5tZXNz
YWdlcy5pbgpAQCAtNDEsNyArNDEsNyBAQCBtZXNzYWdlcyAtPiBXZWJQYWdlIHsKICAgICBUb3Vj
aEV2ZW50KFdlYktpdDo6V2ViVG91Y2hFdmVudCBldmVudCkKICAgICBUb3VjaEV2ZW50U3luY0Zv
clRlc3RpbmcoV2ViS2l0OjpXZWJUb3VjaEV2ZW50IGV2ZW50KSAtPiAoYm9vbCBoYW5kbGVkKQog
I2lmIFBMQVRGT1JNKFFUKQotICAgIEhpZ2hsaWdodFBvdGVudGlhbEFjdGl2YXRpb24oV2ViQ29y
ZTo6SW50UG9pbnQgcG9pbnQpCisgICAgSGlnaGxpZ2h0UG90ZW50aWFsQWN0aXZhdGlvbihXZWJD
b3JlOjpJbnRQb2ludCBwb2ludCwgV2ViQ29yZTo6SW50U2l6ZSBhcmVhKQogI2VuZGlmCiAjZW5k
aWYKIApkaWZmIC0tZ2l0IGEvVG9vbHMvQ2hhbmdlTG9nIGIvVG9vbHMvQ2hhbmdlTG9nCmluZGV4
IDlmZWUxNDFlZWUyNzU0NzhjNDEyMDg5ZTYyN2RmN2M5YTVkZmUwMDAuLjZmOWQ0NmY2ZTI5ZmNm
N2Q2MDIyZmI2MDhiOTU3NTBiNmE1YzMyYjggMTAwNjQ0Ci0tLSBhL1Rvb2xzL0NoYW5nZUxvZwor
KysgYi9Ub29scy9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxNCBAQAorMjAxMi0wMy0xMiAgQWxsYW4g
U2FuZGZlbGQgSmVuc2VuICA8YWxsYW4uamVuc2VuQG5va2lhLmNvbT4KKworICAgICAgICBTZWxl
Y3QgYmVzdCB0YXJnZXQgZm9yIHRhcCBnZXN0dXJlLgorICAgICAgICBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9Nzg4MDEKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JP
RFkgKE9PUFMhKS4KKworICAgICAgICBBZGQgVE9VQ0hfQURKVVNUTUVOVCB0byBlbmFibGVkIGZl
YXR1cmVzLgorCisgICAgICAgICogcW1ha2UvbWtzcGVjcy9mZWF0dXJlcy9mZWF0dXJlcy5wcmY6
CisKIDIwMTItMDMtMTEgIE1hY2llaiBTdGFjaG93aWFrICA8bWpzQGFwcGxlLmNvbT4KIAogICAg
ICAgICBBZGQgLS1pbnN0cnVtZW50cyBvcHRpb24gdG8gc3Vuc3BpZGVyIHRvIHByb2ZpbGUgd2l0
aCBJbnN0cnVtZW50cwpkaWZmIC0tZ2l0IGEvVG9vbHMvcW1ha2UvbWtzcGVjcy9mZWF0dXJlcy9m
ZWF0dXJlcy5wcmYgYi9Ub29scy9xbWFrZS9ta3NwZWNzL2ZlYXR1cmVzL2ZlYXR1cmVzLnByZgpp
bmRleCA1OWEwYmQ0YzMyYzJmZjA2ZTgxMWJiZmNjYmQ3MTUwMmM5NzlhODg2Li4zNjFlMzc5Yjg4
ZGZhNDQ4OGVjYjIxYWU1MjQ4MDJmYWIzZWY4ODI0IDEwMDY0NAotLS0gYS9Ub29scy9xbWFrZS9t
a3NwZWNzL2ZlYXR1cmVzL2ZlYXR1cmVzLnByZgorKysgYi9Ub29scy9xbWFrZS9ta3NwZWNzL2Zl
YXR1cmVzL2ZlYXR1cmVzLnByZgpAQCAtODksNiArODksNyBAQCBoYXZlUXQoNSkgewogIWNvbnRh
aW5zKERFRklORVMsIEVOQUJMRV9WSURFT19UUkFDSz0uKTogREVGSU5FUyArPSBFTkFCTEVfVklE
RU9fVFJBQ0s9MAogIWNvbnRhaW5zKERFRklORVMsIEVOQUJMRV9UT1VDSF9JQ09OX0xPQURJTkc9
Lik6IERFRklORVMgKz0gRU5BQkxFX1RPVUNIX0lDT05fTE9BRElORz0wCiAhY29udGFpbnMoREVG
SU5FUywgRU5BQkxFX0FOSU1BVElPTl9BUEk9Lik6IERFRklORVMgKz0gRU5BQkxFX0FOSU1BVElP
Tl9BUEk9MAorIWNvbnRhaW5zKERFRklORVMsIEVOQUJMRV9UT1VDSF9BREpVU1RNRU5UPS4pOiBE
RUZJTkVTICs9IEVOQUJMRV9UT1VDSF9BREpVU1RNRU5UPTEKIAogIyBQb2xpY3kgZGVjaXNpb25z
OiBmb3IgdXNpbmcgYSBwYXJ0aWN1bGFyIHRoaXJkLXBhcnR5IGxpYnJhcnkgb3Igb3B0aW9uYWwg
T1Mgc2VydmljZQogIWNvbnRhaW5zKERFRklORVMsIFdURl9VU0VfUVRfSU1BR0VfREVDT0RFUj0u
KTogREVGSU5FUyArPSBXVEZfVVNFX1FUX0lNQUdFX0RFQ09ERVI9MQpAQCAtMjY2LDYgKzI2Nyw3
IEBAIGNvbnRhaW5zKERFRklORVMsIEVOQUJMRV9WSURFT19UUkFDSz0xKTogRkVBVFVSRV9ERUZJ
TkVTX0pBVkFTQ1JJUFQgKz0gRU5BQkxFX1ZJCiBjb250YWlucyhERUZJTkVTLCBFTkFCTEVfREFU
QV9UUkFOU0ZFUl9JVEVNUz0xKTogRkVBVFVSRV9ERUZJTkVTX0pBVkFTQ1JJUFQgKz0gRU5BQkxF
X0RBVEFfVFJBTlNGRVJfSVRFTVM9MQogY29udGFpbnMoREVGSU5FUywgRU5BQkxFX0ZVTExTQ1JF
RU5fQVBJPTEpOiBGRUFUVVJFX0RFRklORVNfSkFWQVNDUklQVCArPSBFTkFCTEVfRlVMTFNDUkVF
Tl9BUEk9MQogY29udGFpbnMoREVGSU5FUywgRU5BQkxFX1JFUVVFU1RfQU5JTUFUSU9OX0ZSQU1F
PTEpOiBGRUFUVVJFX0RFRklORVNfSkFWQVNDUklQVCArPSBFTkFCTEVfUkVRVUVTVF9BTklNQVRJ
T05fRlJBTUU9MQorY29udGFpbnMoREVGSU5FUywgRU5BQkxFX1RPVUNIX0FESlVTVE1FTlQ9MSk6
IEZFQVRVUkVfREVGSU5FU19KQVZBU0NSSVBUICs9IEVOQUJMRV9UT1VDSF9BREpVU1RNRU5UPTEK
IAogIyBVc2VkIHRvIGNvbXB1dGUgZGVmYXVsdHMgZm9yIHRoZSBidWlsZC13ZWJraXQgc2NyaXB0
CiAjIERvbid0IHBsYWNlIGFueXRoaW5nIGFmdGVyIHRoaXMhCmRpZmYgLS1naXQgYS9MYXlvdXRU
ZXN0cy9DaGFuZ2VMb2cgYi9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKaW5kZXggY2YwMmYxMzJkMWNl
ZTg2MmE3MzdlMGE2YjgyMWE4MzgyMWU5ZTQyMi4uNjM2ODY1MzQwYjcxNTdjM2Q3MTE3MzcwMmU0
OTk2NzM1NmE1ZTdkMCAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCisrKyBiL0xh
eW91dFRlc3RzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDI2IEBACisyMDEyLTAzLTEyICBBbGxhbiBT
YW5kZmVsZCBKZW5zZW4gIDxhbGxhbi5qZW5zZW5Abm9raWEuY29tPgorCisgICAgICAgIFNlbGVj
dCBiZXN0IHRhcmdldCBmb3IgdGFwIGdlc3R1cmUuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD03ODgwMQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9E
WSAoT09QUyEpLgorCisgICAgICAgIFRlc3Qgb2YgdG91Y2ggYWRqdXN0bWVudHMuIFRlc3RzIHNl
dmVyYWwgYm90aCBub3JtYWwgYW5kIHRyaWNreSBjYXNlcy4KKworICAgICAgICAqIHBsYXRmb3Jt
L2Nocm9taXVtL3Rlc3RfZXhwZWN0YXRpb25zLnR4dDoKKyAgICAgICAgKiBwbGF0Zm9ybS9lZmwv
U2tpcHBlZDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ndGsvU2tpcHBlZDoKKyAgICAgICAgKiBwbGF0
Zm9ybS9tYWMvU2tpcHBlZDoKKyAgICAgICAgKiBwbGF0Zm9ybS93aW4vU2tpcHBlZDoKKyAgICAg
ICAgKiB0b3VjaGFkanVzdG1lbnQvZXZlbnQtdHJpZ2dlcmVkLXdpZGdldHMtZXhwZWN0ZWQudHh0
OiBBZGRlZC4KKyAgICAgICAgKiB0b3VjaGFkanVzdG1lbnQvZXZlbnQtdHJpZ2dlcmVkLXdpZGdl
dHMuaHRtbDogQWRkZWQuCisgICAgICAgICogdG91Y2hhZGp1c3RtZW50L2h0bWwtbGFiZWwtZXhw
ZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAgICAgKiB0b3VjaGFkanVzdG1lbnQvaHRtbC1sYWJlbC5o
dG1sOiBBZGRlZC4KKyAgICAgICAgKiB0b3VjaGFkanVzdG1lbnQvbmVzdGVkLXRvdWNoLWV4cGVj
dGVkLnR4dDogQWRkZWQuCisgICAgICAgICogdG91Y2hhZGp1c3RtZW50L25lc3RlZC10b3VjaC5o
dG1sOiBBZGRlZC4KKyAgICAgICAgKiB0b3VjaGFkanVzdG1lbnQvdG91Y2gtaW5saW5lcy1leHBl
Y3RlZC50eHQ6IEFkZGVkLgorICAgICAgICAqIHRvdWNoYWRqdXN0bWVudC90b3VjaC1pbmxpbmVz
Lmh0bWw6IEFkZGVkLgorCiAyMDEyLTAzLTEyICBBbmRyZXkgS29zeWFrb3YgIDxjYXNlcUBjaHJv
bWl1bS5vcmc+CiAKICAgICAgICAgVW5yZXZpZXdlZCBmbGFraW5lc3MgZml4LgpkaWZmIC0tZ2l0
IGEvTGF5b3V0VGVzdHMvcGxhdGZvcm0vY2hyb21pdW0vdGVzdF9leHBlY3RhdGlvbnMudHh0IGIv
TGF5b3V0VGVzdHMvcGxhdGZvcm0vY2hyb21pdW0vdGVzdF9leHBlY3RhdGlvbnMudHh0CmluZGV4
IDY1NWY1ZTI2NDc3MDYyY2U3MmE2ZTdlYzJjNGMwNDkwNmIyOGNkZTguLmQyODZkYjBjZTNiZTVl
NTcxZGUwNDRmY2I4ODk1MmI1YmVkNDU2YzEgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL3BsYXRm
b3JtL2Nocm9taXVtL3Rlc3RfZXhwZWN0YXRpb25zLnR4dAorKysgYi9MYXlvdXRUZXN0cy9wbGF0
Zm9ybS9jaHJvbWl1bS90ZXN0X2V4cGVjdGF0aW9ucy50eHQKQEAgLTExNCw2ICsxMTQsOSBAQCBC
VUdDUjEwMzkzOSBTS0lQIDogaHR0cC90ZXN0cy9hcHBjYWNoZS93cm9uZy1jb250ZW50LXR5cGUu
aHRtbCA9IFRFWFQKIC8vIFZpYnJhdGlvbiBBUEkgaXMgbm90IHN1cHBvcnRlZCB5ZXQgaW4gdGhl
IGNocm9taXVtIHBvcnQuCiBCVUdXSzcyMDEwIFNLSVAgOiBmYXN0L2RvbS9uYXZpZ2F0b3Itdmli
cmF0aW9uLmh0bWwgPSBGQUlMCiAKKy8vIFRvdWNoIEFkanVzdG1lbnQgaXMgbm90IHN1cHBvcnRl
ZCB5ZXQgaW4gdGhlIGNocm9taXVtIHBvcnQuCitCVUdXSzc4ODAxIFNLSVAgOiB0b3VjaGFkanVz
dG1lbnQvID0gRkFJTAorCiAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogLy8gV09OVEZJWCBURVNUUwogLy8gLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3BsYXRmb3JtL2VmbC9Ta2lwcGVkIGIvTGF5b3V0
VGVzdHMvcGxhdGZvcm0vZWZsL1NraXBwZWQKaW5kZXggZjc3NDZkNjVjZDBiZjhmMWY2NzAyYjMy
MGM0ODVmNWYxMmIyYWRhZC4uZTE5YzQ0Y2RmZGZiMmZjNDZiYTUxOGNjOTQwYTZjMmY1ZjA3ZTE3
NCAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvcGxhdGZvcm0vZWZsL1NraXBwZWQKKysrIGIvTGF5
b3V0VGVzdHMvcGxhdGZvcm0vZWZsL1NraXBwZWQKQEAgLTI3NjUsNiArMjc2NSwxMCBAQCBmYXN0
L2V2ZW50cy9wYWdlLXZpc2liaWxpdHktaWZyYW1lLWRlbGV0ZS10ZXN0Lmh0bWwKIGZhc3QvZXZl
bnRzL3BhZ2UtdmlzaWJpbGl0eS1pZnJhbWUtcHJvcGFnYXRpb24tdGVzdC5odG1sCiBmYXN0L2V2
ZW50cy9wYWdlLXZpc2liaWxpdHktdHJhbnNpdGlvbi10ZXN0Lmh0bWwKIAorIyBUb3VjaCBhZGp1
c3RtZW50IG5vdCBlbmFibGVkCisjIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD03ODgwMQordG91Y2hhZGp1c3RtZW50CisKICMgVGhlcmUgYXJlIG5vIGV4cGVjdGVkIHJl
c3VsdCBzZXQgeWV0LgogYW5pbWF0aW9ucy9hZGRpdGl2ZS10cmFuc2Zvcm0tYW5pbWF0aW9ucy5o
dG1sCiBhbmltYXRpb25zL2FuaW1hdGlvbi1ib3JkZXItb3ZlcmZsb3cuaHRtbApkaWZmIC0tZ2l0
IGEvTGF5b3V0VGVzdHMvcGxhdGZvcm0vZ3RrL1NraXBwZWQgYi9MYXlvdXRUZXN0cy9wbGF0Zm9y
bS9ndGsvU2tpcHBlZAppbmRleCAxNGZiZjkxNjNjYjllNGY3N2Q5YTRmMGNiNjUyMzQ1OTliMGY5
MzAzLi4wMzYwNTcwNDU1M2JhZjYzMzQ3Y2EwZWI4YzBlMGUwNTIyNzUzMjllIDEwMDY0NAotLS0g
YS9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9ndGsvU2tpcHBlZAorKysgYi9MYXlvdXRUZXN0cy9wbGF0
Zm9ybS9ndGsvU2tpcHBlZApAQCAtMTU5NSwzICsxNTk1LDcgQEAgZmFzdC9ldmVudHMvYXV0b3Nj
cm9sbC1pbi10ZXh0ZmllbGQuaHRtbAogCiAjIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD04MDgyNQogcGxhdGZvcm0vZ3RrL3Njcm9sbGJhcnMvb3ZlcmZsb3ctc2Nyb2xs
YmFyLWhvcml6b250YWwtd2hlZWwtc2Nyb2xsLmh0bWwKKworIyBUb3VjaCBhZGp1c3RtZW50IG5v
dCBlbmFibGVkCisjIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD03ODgw
MQordG91Y2hhZGp1c3RtZW50CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9tYWMv
U2tpcHBlZCBiL0xheW91dFRlc3RzL3BsYXRmb3JtL21hYy9Ta2lwcGVkCmluZGV4IDZkZDQ1OGU2
MTg1MzMwMTY4NDg0Y2ZiMTliMTQxY2YxYTAwYTZjYzAuLjc2OTEwOGZiNmI4ZGJjZDEwNjY4NTZk
OTAzY2MzZTgzNDQ3MGYzMTYgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL3BsYXRmb3JtL21hYy9T
a2lwcGVkCisrKyBiL0xheW91dFRlc3RzL3BsYXRmb3JtL21hYy9Ta2lwcGVkCkBAIC01NzAsMyAr
NTcwLDcgQEAgZmFzdC9tdXRhdGlvbi9lbmQtb2YtdGFzay1kZWxpdmVyeS5odG1sCiAjIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD03MjAxMAogIyBOZWVkcyBQYWdlQ2xp
ZW50czo6dmlicmF0aW9uQ2xpZW50KCkgaW1wbGVtZW50YXRpb24uCiBmYXN0L2RvbS9uYXZpZ2F0
b3ItdmlicmF0aW9uLmh0bWwKKworIyBUb3VjaCBhZGp1c3RtZW50IG5vdCBlbmFibGVkCisjIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD03ODgwMQordG91Y2hhZGp1c3Rt
ZW50CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9wbGF0Zm9ybS93aW4vU2tpcHBlZCBiL0xheW91
dFRlc3RzL3BsYXRmb3JtL3dpbi9Ta2lwcGVkCmluZGV4IDBmOGVmZWRkMDZlZDMwODZhM2UzNTdh
NGQxYjdmNzlmZGI5YTZhZDMuLjcwN2E2ZTFjNjZiNWFhYWE2YzVkNzAwYTc1NGQ1NmQyODliOGEx
ZDEgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL3BsYXRmb3JtL3dpbi9Ta2lwcGVkCisrKyBiL0xh
eW91dFRlc3RzL3BsYXRmb3JtL3dpbi9Ta2lwcGVkCkBAIC0xNjYzLDYgKzE2NjMsMTAgQEAgZmFz
dC9yZXBhaW50L3RyYW5zZm9ybS1hYnNvbHV0ZS1pbi1wb3NpdGlvbmVkLWNvbnRhaW5lci5odG1s
CiAjVmlicmF0aW9uIEFQSSBpcyBub3QgaW1wbGVtZW50ZWQuCiBmYXN0L2RvbS9uYXZpZ2F0b3It
dmlicmF0aW9uLmh0bWwKIAorIyBUb3VjaCBhZGp1c3RtZW50IG5vdCBlbmFibGVkCisjIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD03ODgwMQordG91Y2hhZGp1c3RtZW50
CisKICMgVGhvc2UgdGVzdHMgbmVlZCBhIHRleHQgYmFzZWxpbmUgYWZ0ZXIgbGF6aWx5IGFsbG9j
YXRpbmcgbGF5ZXJzLgogIyBUaGUgY2hhbmdlIHNob3VsZCBvbmx5IGJlIGxheWVyIHJlbW92YWwu
CiBhbmltYXRpb25zL2NvbWJvLXRyYW5zZm9ybS10cmFuc2xhdGUrc2NhbGUuaHRtbApkaWZmIC0t
Z2l0IGEvTGF5b3V0VGVzdHMvdG91Y2hhZGp1c3RtZW50L2V2ZW50LXRyaWdnZXJlZC13aWRnZXRz
LWV4cGVjdGVkLnR4dCBiL0xheW91dFRlc3RzL3RvdWNoYWRqdXN0bWVudC9ldmVudC10cmlnZ2Vy
ZWQtd2lkZ2V0cy1leHBlY3RlZC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZjk0ZTIwZTFkZjY0ZGQwOTFjMmFk
ODY1YTk3YzRjZTg0MmI2OTVlNQotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL3RvdWNo
YWRqdXN0bWVudC9ldmVudC10cmlnZ2VyZWQtd2lkZ2V0cy1leHBlY3RlZC50eHQKQEAgLTAsMCAr
MSwzMSBAQAorVGVzdCB2YXJpb3VzIHdheXMgdG8gdHJpZ2dlciBpbnB1dC13aWRnZXRzLiBPbiBh
IHRvdWNoIGludGVyZmFjZSwgYWxsIHRoZSBhY3Rpb25zIHNob3VsZCBiZSB0cmlnZ2VyYWJsZSB3
aXRoIGVpdGhlciBhIHRvdWNoIGRvd24gb3IgYSB0b3VjaCB0YXAuCisKK09uIHN1Y2Nlc3MsIHlv
dSB3aWxsIHNlZSBhIHNlcmllcyBvZiAiUEFTUyIgbWVzc2FnZXMsIGZvbGxvd2VkIGJ5ICJURVNU
IENPTVBMRVRFIi4KKworCitUZXN0aW5nIHNtYWxsIGRpcmVjdCBoaXRzCitQQVNTIGFkanVzdGVk
Tm9kZS5pZCBpcyBlbGVtZW50LmlkCitQQVNTIGFkanVzdGVkTm9kZS5pZCBpcyBlbGVtZW50Lmlk
CitQQVNTIGFkanVzdGVkTm9kZS5pZCBpcyBlbGVtZW50LmlkCitQQVNTIGFkanVzdGVkTm9kZS5p
ZCBpcyBub3QgZWxlbWVudC5pZAorUEFTUyBhZGp1c3RlZE5vZGUuaWQgaXMgZWxlbWVudC5pZAor
VGVzdGluZyBsYXJnZSBkaXJlY3QgaGl0cworUEFTUyBhZGp1c3RlZE5vZGUuaWQgaXMgZWxlbWVu
dC5pZAorUEFTUyBhZGp1c3RlZE5vZGUuaWQgaXMgZWxlbWVudC5pZAorUEFTUyBhZGp1c3RlZE5v
ZGUuaWQgaXMgZWxlbWVudC5pZAorUEFTUyBhZGp1c3RlZE5vZGUuaWQgaXMgbm90IGVsZW1lbnQu
aWQKK1BBU1MgYWRqdXN0ZWROb2RlLmlkIGlzIGVsZW1lbnQuaWQKK1Rlc3RpbmcgbGFyZ2UgZGly
ZWN0IGhpdHMKK1BBU1MgYWRqdXN0ZWROb2RlLmlkIGlzIGVsZW1lbnQuaWQKK1BBU1MgYWRqdXN0
ZWROb2RlLmlkIGlzIGVsZW1lbnQuaWQKK1BBU1MgYWRqdXN0ZWROb2RlLmlkIGlzIGVsZW1lbnQu
aWQKK1BBU1MgYWRqdXN0ZWROb2RlLmlkIGlzIG5vdCBlbGVtZW50LmlkCitQQVNTIGFkanVzdGVk
Tm9kZS5pZCBpcyBlbGVtZW50LmlkCitQQVNTIHN1Y2Nlc3NmdWxseVBhcnNlZCBpcyB0cnVlCisK
K1RFU1QgQ09NUExFVEUKK0ZvY3VzIGhlcmUgc2hvdWxkIGdpdmUgYSB0ZXh0IGlucHV0LWZpZWxk
LgorTW91c2Utb3ZlciBoZXJlIHNob3VsZCBnaXZlIGEgdGV4dCBpbnB1dC1maWVsZC4KK0hvdmVy
aW5nIGhlcmUgc2hvdWxkIGdpdmUgYSB0ZXh0IGlucHV0LWZpZWxkLiAKK0ZvY3VzaW5nIGhlcmUg
c2hvdWxkIG9ubHkgZ2l2ZSBmb2N1cyBvdXRsaW5lLgorRm9jdXNpbmcgaGVyZSBzaG91bGQgZ2l2
ZSBhIHRleHQgaW5wdXQtZmllbGQuCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy90b3VjaGFkanVz
dG1lbnQvZXZlbnQtdHJpZ2dlcmVkLXdpZGdldHMuaHRtbCBiL0xheW91dFRlc3RzL3RvdWNoYWRq
dXN0bWVudC9ldmVudC10cmlnZ2VyZWQtd2lkZ2V0cy5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjEyNzliNzcy
NjMzMzFmYzU5YmU0ZGJmNDFmOWYyOTBiNWI2NTNmN2MKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlv
dXRUZXN0cy90b3VjaGFkanVzdG1lbnQvZXZlbnQtdHJpZ2dlcmVkLXdpZGdldHMuaHRtbApAQCAt
MCwwICsxLDE2OSBAQAorPGh0bWw+Cis8aGVhZD4KKzxzdHlsZT4KKyAgICAuYm94IHsgYm9yZGVy
OiAxcHggc29saWQgYmxhY2s7IGJvcmRlci1yYWRpdXM6IDVweCA1cHg7IG1hcmdpbjogMWVtOyBt
YXgtd2lkdGg6IDQwZW07IH0KKzwvc3R5bGU+CisKKzxzY3JpcHQgc3JjPSIuLi9mYXN0L2pzL3Jl
c291cmNlcy9qcy10ZXN0LXByZS5qcyI+PC9zY3JpcHQ+CisKKzwvaGVhZD4KKworPGJvZHkgb25s
b2FkPSJydW5UZXN0cygpIj4KKworPHAgaWQ9J2Rlc2NyaXB0aW9uJz48L3A+CisKKzxkaXYgaWQ9
J2NvbnNvbGUnPjwvZGl2PgorCis8c2NyaXB0PgorICAgIHZhciBlbGVtZW50OworICAgIHZhciBh
ZGp1c3RlZE5vZGU7CisgICAgZnVuY3Rpb24gZmluZEFic29sdXRlUG9zaXRpb24obm9kZSkgewor
ICAgICAgICB2YXIgcG9zID0gbmV3IE9iamVjdCgpOworICAgICAgICBwb3MubGVmdCA9IDA7IHBv
cy50b3AgPSAwOworICAgICAgICBkbyB7CisgICAgICAgICAgICBwb3MubGVmdCArPSBub2RlLm9m
ZnNldExlZnQ7CisgICAgICAgICAgICBwb3MudG9wICs9IG5vZGUub2Zmc2V0VG9wOworICAgICAg
ICB9IHdoaWxlIChub2RlID0gbm9kZS5vZmZzZXRQYXJlbnQpOworICAgICAgICByZXR1cm4gcG9z
OworICAgIH0KKworICAgIGZ1bmN0aW9uIHRlc3REaXJlY3RUb3VjaChlbGVtZW50KQorICAgIHsK
KyAgICAgICAgdmFyIHBvcyA9IGZpbmRBYnNvbHV0ZVBvc2l0aW9uKGVsZW1lbnQpOworICAgICAg
ICB2YXIgeCA9IHBvcy5sZWZ0ICsgZWxlbWVudC5jbGllbnRXaWR0aCAvIDIgLSAxOworICAgICAg
ICB2YXIgeSA9IHBvcy50b3AgKyBlbGVtZW50LmNsaWVudEhlaWdodCAvIDIgLSAxOworICAgICAg
ICB2YXIgd2lkdGggPSAzOworICAgICAgICB2YXIgaGVpZ2h0ID0gMzsKKyAgICAgICAgYWRqdXN0
ZWROb2RlID0gaW50ZXJuYWxzLnRvdWNoTm9kZUFkanVzdGVkVG9CZXN0Q2xpY2thYmxlTm9kZSh4
LCB5LCB3aWR0aCwgaGVpZ2h0LCBkb2N1bWVudCk7CisKKyAgICAgICAgaWYgKGFkanVzdGVkTm9k
ZS5ub2RlVHlwZSA9PSAzKSAvLyBURVhUIG5vZGUKKyAgICAgICAgICAgIGFkanVzdGVkTm9kZSA9
IGFkanVzdGVkTm9kZS5wYXJlbnROb2RlOworICAgIH0KKworICAgIGZ1bmN0aW9uIHRlc3REaXJl
Y3RGYXRGaW5nZXIoZWxlbWVudCkKKyAgICB7CisgICAgICAgIHZhciBwb3MgPSBmaW5kQWJzb2x1
dGVQb3NpdGlvbihlbGVtZW50KTsKKyAgICAgICAgdmFyIHggPSBwb3MubGVmdCArIGVsZW1lbnQu
Y2xpZW50V2lkdGggLyAyIC0gMTsKKyAgICAgICAgdmFyIHkgPSBwb3MudG9wIC0gNSA7CisgICAg
ICAgIHZhciB3aWR0aCA9IGVsZW1lbnQuY2xpZW50SGVpZ2h0OworICAgICAgICB2YXIgaGVpZ2h0
ID0gZWxlbWVudC5jbGllbnRIZWlnaHQgKyAxMDsKKyAgICAgICAgYWRqdXN0ZWROb2RlID0gaW50
ZXJuYWxzLnRvdWNoTm9kZUFkanVzdGVkVG9CZXN0Q2xpY2thYmxlTm9kZSh4LCB5LCB3aWR0aCwg
aGVpZ2h0LCBkb2N1bWVudCk7CisgICAgICAgIGlmIChhZGp1c3RlZE5vZGUubm9kZVR5cGUgPT0g
MykgLy8gVEVYVCBub2RlCisgICAgICAgICAgICBhZGp1c3RlZE5vZGUgPSBhZGp1c3RlZE5vZGUu
cGFyZW50Tm9kZTsKKyAgICB9CisKKyAgICBmdW5jdGlvbiB0ZXN0SW5kaXJlY3RGYXRGaW5nZXIo
ZWxlbWVudCkKKyAgICB7CisgICAgICAgIHZhciBwb3MgPSBmaW5kQWJzb2x1dGVQb3NpdGlvbihl
bGVtZW50KTsKKyAgICAgICAgdmFyIHggPSBwb3MubGVmdCArIGVsZW1lbnQuY2xpZW50V2lkdGgg
LyAyIC0gMTsKKyAgICAgICAgdmFyIHkgPSBwb3MudG9wIC0gNzsKKyAgICAgICAgdmFyIHdpZHRo
ID0gMTA7CisgICAgICAgIHZhciBoZWlnaHQgPSAxMDsKKyAgICAgICAgYWRqdXN0ZWROb2RlID0g
aW50ZXJuYWxzLnRvdWNoTm9kZUFkanVzdGVkVG9CZXN0Q2xpY2thYmxlTm9kZSh4LCB5LCB3aWR0
aCwgaGVpZ2h0LCBkb2N1bWVudCk7CisgICAgICAgIGlmIChhZGp1c3RlZE5vZGUubm9kZVR5cGUg
PT0gMykgLy8gVEVYVCBub2RlCisgICAgICAgICAgICBhZGp1c3RlZE5vZGUgPSBhZGp1c3RlZE5v
ZGUucGFyZW50Tm9kZTsKKyAgICB9CisKKyAgICBmdW5jdGlvbiB0ZXN0VG91Y2hIaXQoZWxlbWVu
dGlkLCB0b3VjaFR5cGUpIHsKKyAgICAgICAgZWxlbWVudCA9IGRvY3VtZW50LmdldEVsZW1lbnRC
eUlkKGVsZW1lbnRpZCk7CisgICAgICAgIHRvdWNoVHlwZShlbGVtZW50KTsKKyAgICAgICAgc2hv
dWxkQmUoJ2FkanVzdGVkTm9kZS5pZCcsICdlbGVtZW50LmlkJyk7CisgICAgfQorCisgICAgZnVu
Y3Rpb24gdGVzdFRvdWNoTWlzcyhlbGVtZW50aWQsIHRvdWNoVHlwZSkgeworICAgICAgICBlbGVt
ZW50ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoZWxlbWVudGlkKTsKKyAgICAgICAgdG91Y2hU
eXBlKGVsZW1lbnQpOworICAgICAgICBzaG91bGROb3RCZSgnYWRqdXN0ZWROb2RlLmlkJywgJ2Vs
ZW1lbnQuaWQnKTsKKyAgICB9CisKKyAgICBmdW5jdGlvbiB0ZXN0RGlyZWN0VG91Y2hlcygpCisg
ICAgeworICAgICAgICBkZWJ1ZygnVGVzdGluZyBzbWFsbCBkaXJlY3QgaGl0cycpOworICAgICAg
ICB0ZXN0VG91Y2hIaXQoJ3Rlc3QxJywgdGVzdERpcmVjdFRvdWNoKTsKKyAgICAgICAgdGVzdFRv
dWNoSGl0KCd0ZXN0MicsIHRlc3REaXJlY3RUb3VjaCk7CisgICAgICAgIHRlc3RUb3VjaEhpdCgn
dGVzdDMnLCB0ZXN0RGlyZWN0VG91Y2gpOworICAgICAgICB0ZXN0VG91Y2hNaXNzKCd0ZXN0NCcs
IHRlc3REaXJlY3RUb3VjaCk7CisgICAgICAgIHRlc3RUb3VjaEhpdCgndGVzdDUnLCB0ZXN0RGly
ZWN0VG91Y2gpOworICAgIH0KKworICAgIGZ1bmN0aW9uIHRlc3REaXJlY3RGYXRGaW5nZXJzKCkK
KyAgICB7CisgICAgICAgIGRlYnVnKCdUZXN0aW5nIGxhcmdlIGRpcmVjdCBoaXRzJyk7CisgICAg
ICAgIHRlc3RUb3VjaEhpdCgndGVzdDEnLCB0ZXN0RGlyZWN0RmF0RmluZ2VyKTsKKyAgICAgICAg
dGVzdFRvdWNoSGl0KCd0ZXN0MicsIHRlc3REaXJlY3RGYXRGaW5nZXIpOworICAgICAgICB0ZXN0
VG91Y2hIaXQoJ3Rlc3QzJywgdGVzdERpcmVjdEZhdEZpbmdlcik7CisgICAgICAgIHRlc3RUb3Vj
aE1pc3MoJ3Rlc3Q0JywgdGVzdERpcmVjdEZhdEZpbmdlcik7CisgICAgICAgIHRlc3RUb3VjaEhp
dCgndGVzdDUnLCB0ZXN0RGlyZWN0RmF0RmluZ2VyKTsKKyAgICB9CisKKyAgICBmdW5jdGlvbiB0
ZXN0SW5kaXJlY3RGYXRGaW5nZXJzKCkKKyAgICB7CisgICAgICAgIGRlYnVnKCdUZXN0aW5nIGxh
cmdlIGRpcmVjdCBoaXRzJyk7CisgICAgICAgIHRlc3RUb3VjaEhpdCgndGVzdDEnLCB0ZXN0SW5k
aXJlY3RGYXRGaW5nZXIpOworICAgICAgICB0ZXN0VG91Y2hIaXQoJ3Rlc3QyJywgdGVzdEluZGly
ZWN0RmF0RmluZ2VyKTsKKyAgICAgICAgdGVzdFRvdWNoSGl0KCd0ZXN0MycsIHRlc3RJbmRpcmVj
dEZhdEZpbmdlcik7CisgICAgICAgIHRlc3RUb3VjaE1pc3MoJ3Rlc3Q0JywgdGVzdEluZGlyZWN0
RmF0RmluZ2VyKTsKKyAgICAgICAgdGVzdFRvdWNoSGl0KCd0ZXN0NScsIHRlc3RJbmRpcmVjdEZh
dEZpbmdlcik7CisgICAgfQorCisgICAgZnVuY3Rpb24gcnVuVGVzdHMoKQorICAgIHsKKyAgICAg
ICAgaWYgKHdpbmRvdy5sYXlvdXRUZXN0Q29udHJvbGxlciAmJiB3aW5kb3cuaW50ZXJuYWxzICYm
IGludGVybmFscy50b3VjaE5vZGVBZGp1c3RlZFRvQmVzdENsaWNrYWJsZU5vZGUpIHsKKyAgICAg
ICAgICAgIGRlc2NyaXB0aW9uKCdUZXN0IHZhcmlvdXMgd2F5cyB0byB0cmlnZ2VyIGlucHV0LXdp
ZGdldHMuIE9uIGEgdG91Y2ggaW50ZXJmYWNlLCBhbGwgdGhlIGFjdGlvbnMgc2hvdWxkIGJlIHRy
aWdnZXJhYmxlIHdpdGggZWl0aGVyIGEgdG91Y2ggZG93biBvciBhIHRvdWNoIHRhcC4nKTsKKyAg
ICAgICAgICAgIGxheW91dFRlc3RDb250cm9sbGVyLmR1bXBBc1RleHQoKTsKKyAgICAgICAgICAg
IGxheW91dFRlc3RDb250cm9sbGVyLndhaXRVbnRpbERvbmUoKTsKKyAgICAgICAgICAgIHRlc3RE
aXJlY3RUb3VjaGVzKCk7CisgICAgICAgICAgICB0ZXN0RGlyZWN0RmF0RmluZ2VycygpOworICAg
ICAgICAgICAgdGVzdEluZGlyZWN0RmF0RmluZ2VycygpOworICAgICAgICAgICAgaXNTdWNjZXNz
ZnVsbHlQYXJzZWQoKTsKKyAgICAgICAgICAgIGxheW91dFRlc3RDb250cm9sbGVyLm5vdGlmeURv
bmUoKTsKKyAgICAgICAgfQorICAgIH0KKzwvc2NyaXB0PgorCis8c2NyaXB0PgorICAgIGZ1bmN0
aW9uIHRyaWdnZXJJbnB1dCgpIHsKKyAgICAgICAgdmFyIGVsZW1lbnQgPSBldmVudC5zcmNFbGVt
ZW50OworICAgICAgICBpZiAoIWVsZW1lbnQub3BlbikgeworICAgICAgICAgICAgZWxlbWVudC5p
bm5lckhUTUwgPSAnPGlucHV0IHR5cGU9dGV4dCBzdHlsZT0id2lkdGg6IDEwMCUiPjwvaW5wdXQ+
JworICAgICAgICAgICAgZWxlbWVudC5vcGVuID0gdHJ1ZTsKKyAgICAgICAgfQorICAgICAgICBl
bGVtZW50LmZpcnN0Q2hpbGQuZm9jdXMoKTsKKyAgICB9Cis8L3NjcmlwdD4KKworPGRpdiBpZD10
ZXN0MSBjbGFzcz1ib3ggdGFiaW5kZXg9MSBvbmZvY3VzPSd0cmlnZ2VySW5wdXQoKSc+CitGb2N1
cyBoZXJlIHNob3VsZCBnaXZlIGEgdGV4dCBpbnB1dC1maWVsZC4KKzwvZGl2PgorCis8ZGl2IGlk
PXRlc3QyIGNsYXNzPWJveCBvbm1vdXNlb3Zlcj0ndHJpZ2dlcklucHV0KCknPiAKK01vdXNlLW92
ZXIgaGVyZSBzaG91bGQgZ2l2ZSBhIHRleHQgaW5wdXQtZmllbGQuCis8L2Rpdj4KKworPHN0eWxl
PgorICAgIC5ib3g6bm90KDpob3ZlcikgLmhvdmVydHJpZ2dlcmVkIHsgdmlzaWJpbGl0eTogaGlk
ZGVuO30KKyAgICAuYm94OmhvdmVyIC5ob3ZlcmZhbGxiYWNrIHsgZGlzcGxheTogbm9uZTsgfSAg
Cis8L3N0eWxlPgorCis8ZGl2IGlkPXRlc3QzIGNsYXNzPWJveD4gCisgICAgPHNwYW4gY2xhc3M9
aG92ZXJmYWxsYmFjaz5Ib3ZlcmluZyBoZXJlIHNob3VsZCBnaXZlIGEgdGV4dCBpbnB1dC1maWVs
ZC48L3NwYW4+CisgICAgPGlucHV0IHR5cGU9dGV4dCBjbGFzcz1ob3ZlcnRyaWdnZXJlZD48L2lu
cHV0PgorPC9kaXY+CisKKzxkaXYgaWQ9dGVzdDQgY2xhc3M9Ym94IG9uZm9jdXM9J3RyaWdnZXJJ
bnB1dCgpJz4KKyAgICA8c3BhbiB0YWJpbmRleD0xPiBGb2N1c2luZyBoZXJlIHNob3VsZCBvbmx5
IGdpdmUgZm9jdXMgb3V0bGluZS4KKyAgICA8L3NwYW4+Cis8L2Rpdj4KKworPGRpdiBpZD10ZXN0
NSBjbGFzcz1ib3g+CisgICAgPHNwYW4gdGFiaW5kZXg9MT4gRm9jdXNpbmcgaGVyZSBzaG91bGQg
Z2l2ZSBhIHRleHQgaW5wdXQtZmllbGQuCisgICAgPC9zcGFuPgorPC9kaXY+CisKKzxzY3JpcHQ+
CisgICAgdmFyIGVsZW1lbnQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndGVzdDUnKTsKKyAg
ICBlbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ0RPTUZvY3VzSW4nLCB0cmlnZ2VySW5wdXQsIGZh
bHNlKTsKKzwvc2NyaXB0PgorCis8L2JvZHk+Cis8L2h0bWw+CmRpZmYgLS1naXQgYS9MYXlvdXRU
ZXN0cy90b3VjaGFkanVzdG1lbnQvaHRtbC1sYWJlbC1leHBlY3RlZC50eHQgYi9MYXlvdXRUZXN0
cy90b3VjaGFkanVzdG1lbnQvaHRtbC1sYWJlbC1leHBlY3RlZC50eHQKbmV3IGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZjk2
OWZkYjhkYmQ5OGZkMjQyMDhjYTRmZjBhZDMxM2JjZjJkNzMyMwotLS0gL2Rldi9udWxsCisrKyBi
L0xheW91dFRlc3RzL3RvdWNoYWRqdXN0bWVudC9odG1sLWxhYmVsLWV4cGVjdGVkLnR4dApAQCAt
MCwwICsxLDIyIEBACitEbyBub3QgY2xpY2sgaGVyZQorQ2xpY2sgaGVyZSwgYnV0IG5vdCBoZXJl
LiAKKworCisKK1Rlc3RzIGlmIGxhYmVscyBhcmUgdHJlYXRlZCBhcyBjbGlja2FibGUgaWYgdGhl
IGlucHV0IHRoZXkgY29udHJvbCBpcy4KKworT24gc3VjY2VzcywgeW91IHdpbGwgc2VlIGEgc2Vy
aWVzIG9mICJQQVNTIiBtZXNzYWdlcywgZm9sbG93ZWQgYnkgIlRFU1QgQ09NUExFVEUiLgorCisK
K1Rlc3Rpbmcgc21hbGwgZGlyZWN0IGhpdHMuCitQQVNTIGFkanVzdGVkTm9kZS5pZCBpcyAibXls
aW5rIgorUEFTUyBhZGp1c3RlZE5vZGUuaWQgaXMgIm15bGFiZWwiCitQQVNTIGFkanVzdGVkTm9k
ZS5pZCBpcyAibXlpbnB1dCIKK1Rlc3RpbmcgaW5kaXJlY3QgaGl0cy4KK1BBU1MgYWRqdXN0ZWRO
b2RlLmlkIGlzICJteWxpbmsiCitQQVNTIGFkanVzdGVkTm9kZS5pZCBpcyAibXlsYWJlbCIKK1BB
U1MgYWRqdXN0ZWROb2RlLmlkIGlzICJteWlucHV0IgorUEFTUyBzdWNjZXNzZnVsbHlQYXJzZWQg
aXMgdHJ1ZQorCitURVNUIENPTVBMRVRFCisKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3RvdWNo
YWRqdXN0bWVudC9odG1sLWxhYmVsLmh0bWwgYi9MYXlvdXRUZXN0cy90b3VjaGFkanVzdG1lbnQv
aHRtbC1sYWJlbC5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjFjMGNlN2RmMjA1OTAwYzMyOWYyN2YwZDZjZTY2
ZDZiNGZjMjQ5NmYKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy90b3VjaGFkanVzdG1l
bnQvaHRtbC1sYWJlbC5odG1sCkBAIC0wLDAgKzEsMTA4IEBACis8aHRtbD4KKzxoZWFkPgorPHNj
cmlwdCBzcmM9Ii4uL2Zhc3QvanMvcmVzb3VyY2VzL2pzLXRlc3QtcHJlLmpzIj48L3NjcmlwdD4K
KworPC9oZWFkPgorCis8Ym9keSBpZD0ibXlib2R5IiBvbmxvYWQ9InJ1blRlc3RzKCkiPgorCis8
YSBocmVmPSIjbXlmb3JtIiBpZD0ibXlsaW5rIj5EbyBub3QgY2xpY2sgaGVyZTwvYT48YnI+Cis8
Zm9ybSBpZD0ibXlmb3JtIj4KKzxsYWJlbCBmb3I9Im15aW5wdXQiIGlkPSJteWxhYmVsIj5DbGlj
ayBoZXJlLDwvbGFiZWw+Cis8c3BhbiBpZD0ibXlzcGFuIj5idXQgbm90IGhlcmUuPC9zcGFuPgor
PGlucHV0IHR5cGU9InRleHQiIGlkPSJteWlucHV0IiB2YWx1ZT0iVG8gZm9jdXMgdGhpcy4iPjwv
aW5wdXQ+Cis8L2Zvcm0+Cis8YnI+PGJyPjxicj4KKworPHAgaWQ9J2Rlc2NyaXB0aW9uJz48L3A+
Cis8ZGl2IGlkPSdjb25zb2xlJz48L2Rpdj4KKworPHNjcmlwdD4KKyAgICB2YXIgZWxlbWVudDsK
KyAgICB2YXIgYWRqdXN0ZWROb2RlOworICAgIGZ1bmN0aW9uIGZpbmRBYnNvbHV0ZVBvc2l0aW9u
KG5vZGUpIHsKKyAgICAgICAgdmFyIHBvcyA9IG5ldyBPYmplY3QoKTsKKyAgICAgICAgcG9zLmxl
ZnQgPSAwOyBwb3MudG9wID0gMDsKKyAgICAgICAgZG8geworICAgICAgICAgICAgcG9zLmxlZnQg
Kz0gbm9kZS5vZmZzZXRMZWZ0OworICAgICAgICAgICAgcG9zLnRvcCArPSBub2RlLm9mZnNldFRv
cDsKKyAgICAgICAgfSB3aGlsZSAobm9kZSA9IG5vZGUub2Zmc2V0UGFyZW50KTsKKyAgICAgICAg
cmV0dXJuIHBvczsKKyAgICB9CisKKyAgICBmdW5jdGlvbiB0ZXN0RGlyZWN0VG91Y2goZWxlbWVu
dCkKKyAgICB7CisgICAgICAgIHZhciBwb3MgPSBmaW5kQWJzb2x1dGVQb3NpdGlvbihlbGVtZW50
KTsKKyAgICAgICAgdmFyIHggPSBwb3MubGVmdCArIGVsZW1lbnQuY2xpZW50V2lkdGggLyAyIC0g
MjA7CisgICAgICAgIHZhciB5ID0gcG9zLnRvcCArIGVsZW1lbnQuY2xpZW50SGVpZ2h0IC8gMiAt
IDMwOworICAgICAgICB2YXIgd2lkdGggPSA0MDsKKyAgICAgICAgdmFyIGhlaWdodCA9IDYwOwor
ICAgICAgICB2YXIgYWRqdXN0ZWROb2RlID0gaW50ZXJuYWxzLnRvdWNoTm9kZUFkanVzdGVkVG9C
ZXN0Q2xpY2thYmxlTm9kZSh4LCB5LCB3aWR0aCwgaGVpZ2h0LCBkb2N1bWVudCk7CisgICAgICAg
IHdoaWxlIChhZGp1c3RlZE5vZGUubm9kZVR5cGUgIT0gMSkgLy8gTm90IGFuIGVsZW1lbnQuCisg
ICAgICAgICAgICBhZGp1c3RlZE5vZGUgPSBhZGp1c3RlZE5vZGUucGFyZW50Tm9kZTsKKyAgICAg
ICAgcmV0dXJuIGFkanVzdGVkTm9kZTsKKyAgICB9CisKKyAgICBmdW5jdGlvbiB0ZXN0SW5kaXJl
Y3RUb3VjaChlbGVtZW50KQorICAgIHsKKyAgICAgICAgLy8gVG91Y2gganVzdCByaWdodCBvZiB0
aGUgZWxlbWVudC4KKyAgICAgICAgdmFyIHBvcyA9IGZpbmRBYnNvbHV0ZVBvc2l0aW9uKGVsZW1l
bnQpOworICAgICAgICB2YXIgeCA9IHBvcy5sZWZ0ICsgZWxlbWVudC5jbGllbnRXaWR0aCArIDEw
IC0gMzA7CisgICAgICAgIHZhciB5ID0gcG9zLnRvcCArIGVsZW1lbnQuY2xpZW50SGVpZ2h0IC8g
MiAtIDIwOworICAgICAgICB2YXIgd2lkdGggPSA2MDsKKyAgICAgICAgdmFyIGhlaWdodCA9IDQw
OworICAgICAgICB2YXIgYWRqdXN0ZWROb2RlID0gaW50ZXJuYWxzLnRvdWNoTm9kZUFkanVzdGVk
VG9CZXN0Q2xpY2thYmxlTm9kZSh4LCB5LCB3aWR0aCwgaGVpZ2h0LCBkb2N1bWVudCk7CisgICAg
ICAgIHdoaWxlIChhZGp1c3RlZE5vZGUubm9kZVR5cGUgIT0gMSApIC8vIE5vdCBhbiBlbGVtZW50
LgorICAgICAgICAgICAgYWRqdXN0ZWROb2RlID0gYWRqdXN0ZWROb2RlLnBhcmVudE5vZGU7Cisg
ICAgICAgIHJldHVybiBhZGp1c3RlZE5vZGU7CisgICAgfQorCisgICAgZnVuY3Rpb24gdGVzdERp
cmVjdFRvdWNoZXMoKQorICAgIHsKKyAgICAgICAgZGVidWcoJ1Rlc3Rpbmcgc21hbGwgZGlyZWN0
IGhpdHMuJyk7CisKKyAgICAgICAgZWxlbWVudCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdt
eWxpbmsnKTsKKyAgICAgICAgYWRqdXN0ZWROb2RlID0gdGVzdERpcmVjdFRvdWNoKGVsZW1lbnQp
OworICAgICAgICBzaG91bGRCZUVxdWFsVG9TdHJpbmcoJ2FkanVzdGVkTm9kZS5pZCcsICdteWxp
bmsnKTsKKworICAgICAgICBlbGVtZW50ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ215bGFi
ZWwnKTsKKyAgICAgICAgYWRqdXN0ZWROb2RlID0gdGVzdERpcmVjdFRvdWNoKGVsZW1lbnQpOwor
ICAgICAgICBzaG91bGRCZUVxdWFsVG9TdHJpbmcoJ2FkanVzdGVkTm9kZS5pZCcsICdteWxhYmVs
Jyk7CisKKyAgICAgICAgZWxlbWVudCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdteWlucHV0
Jyk7CisgICAgICAgIGFkanVzdGVkTm9kZSA9IHRlc3REaXJlY3RUb3VjaChlbGVtZW50KTsKKyAg
ICAgICAgc2hvdWxkQmVFcXVhbFRvU3RyaW5nKCdhZGp1c3RlZE5vZGUuaWQnLCAnbXlpbnB1dCcp
OworICAgIH0KKworICAgIGZ1bmN0aW9uIHRlc3RJbmRpcmVjdFRvdWNoZXMoKQorICAgIHsKKyAg
ICAgICAgZGVidWcoJ1Rlc3RpbmcgaW5kaXJlY3QgaGl0cy4nKTsKKworICAgICAgICBlbGVtZW50
ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ215bGluaycpOworICAgICAgICBhZGp1c3RlZE5v
ZGUgPSB0ZXN0SW5kaXJlY3RUb3VjaChlbGVtZW50KTsKKyAgICAgICAgc2hvdWxkQmVFcXVhbFRv
U3RyaW5nKCdhZGp1c3RlZE5vZGUuaWQnLCAnbXlsaW5rJyk7CisKKyAgICAgICAgZWxlbWVudCA9
IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdteWxhYmVsJyk7CisgICAgICAgIGFkanVzdGVkTm9k
ZSA9IHRlc3RJbmRpcmVjdFRvdWNoKGVsZW1lbnQpOworICAgICAgICBzaG91bGRCZUVxdWFsVG9T
dHJpbmcoJ2FkanVzdGVkTm9kZS5pZCcsICdteWxhYmVsJyk7CisKKyAgICAgICAgZWxlbWVudCA9
IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdteWlucHV0Jyk7CisgICAgICAgIGFkanVzdGVkTm9k
ZSA9IHRlc3RJbmRpcmVjdFRvdWNoKGVsZW1lbnQpOworICAgICAgICBzaG91bGRCZUVxdWFsVG9T
dHJpbmcoJ2FkanVzdGVkTm9kZS5pZCcsICdteWlucHV0Jyk7CisgICAgfQorCisgICAgZnVuY3Rp
b24gcnVuVGVzdHMoKQorICAgIHsKKyAgICAgICAgaWYgKHdpbmRvdy5sYXlvdXRUZXN0Q29udHJv
bGxlciAmJiB3aW5kb3cuaW50ZXJuYWxzICYmIGludGVybmFscy50b3VjaE5vZGVBZGp1c3RlZFRv
QmVzdENsaWNrYWJsZU5vZGUpIHsKKyAgICAgICAgICAgIGRlc2NyaXB0aW9uKCdUZXN0cyBpZiBs
YWJlbHMgYXJlIHRyZWF0ZWQgYXMgY2xpY2thYmxlIGlmIHRoZSBpbnB1dCB0aGV5IGNvbnRyb2wg
aXMuJyk7CisgICAgICAgICAgICBsYXlvdXRUZXN0Q29udHJvbGxlci5kdW1wQXNUZXh0KCk7Cisg
ICAgICAgICAgICBsYXlvdXRUZXN0Q29udHJvbGxlci53YWl0VW50aWxEb25lKCk7CisgICAgICAg
ICAgICB0ZXN0RGlyZWN0VG91Y2hlcygpOworICAgICAgICAgICAgdGVzdEluZGlyZWN0VG91Y2hl
cygpOworICAgICAgICAgICAgaXNTdWNjZXNzZnVsbHlQYXJzZWQoKTsKKyAgICAgICAgICAgIGxh
eW91dFRlc3RDb250cm9sbGVyLm5vdGlmeURvbmUoKTsKKyAgICAgICAgfQorICAgIH0KKzwvc2Ny
aXB0PgorPC9ib2R5PgorPC9odG1sPgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvdG91Y2hhZGp1
c3RtZW50L25lc3RlZC10b3VjaC1leHBlY3RlZC50eHQgYi9MYXlvdXRUZXN0cy90b3VjaGFkanVz
dG1lbnQvbmVzdGVkLXRvdWNoLWV4cGVjdGVkLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi43M2Q3YzQwNWNjN2Jl
NmY5YWI2NzdlODlkZmI2NjVjZmQyZGE4YTU4Ci0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVz
dHMvdG91Y2hhZGp1c3RtZW50L25lc3RlZC10b3VjaC1leHBlY3RlZC50eHQKQEAgLTAsMCArMSwx
OCBAQAorQm94IHdpdGggYSBsb2NhbCBjbGljayBoYW5kbGVyLgorQm94IHdpdGhvdXQgYSBsb2Nh
bCBjbGljayBoYW5kbGVyLgorVGVzdCB0aGUgY2FzZSB3aGVyZSBhIGNsaWNrYWJsZSB0YXJnZXQg
aXMgbmVzdGVkIGluc2lkZSBhIGRvY3VtZW50IHRoYXQgaXMgbW9uaXRvcmluZyBjbGlja3MuIFRo
ZSB0YXJnZXQgd2l0aCB0aGUgbG9jYWwgZXZlbnQtaGFuZGxlciBzaG91bGQgYmUgY2hvc2VuIGlm
IG11bHRpcGxlIHRhcmdldHMgYXJlIHRvdWNoZWQuCisKK09uIHN1Y2Nlc3MsIHlvdSB3aWxsIHNl
ZSBhIHNlcmllcyBvZiAiUEFTUyIgbWVzc2FnZXMsIGZvbGxvd2VkIGJ5ICJURVNUIENPTVBMRVRF
Ii4KKworCitUZXN0aW5nIHNtYWxsIGRpcmVjdCBoaXRzLgorUEFTUyBhZGp1c3RlZE5vZGUuaWQg
aXMgZWxlbWVudC5pZAorUEFTUyBhZGp1c3RlZE5vZGUuaWQgaXMgZWxlbWVudC5pZAorVGVzdGlu
ZyBwcmVmZXJlZCBoaXRzLgorUEFTUyBhZGp1c3RlZE5vZGUuaWQgaXMgZWxlbWVudDEuaWQKK1BB
U1MgYWRqdXN0ZWROb2RlLmlkIGlzIGVsZW1lbnQxLmlkCitQQVNTIGFkanVzdGVkTm9kZS5pZCBp
cyBlbGVtZW50MS5pZAorUEFTUyBzdWNjZXNzZnVsbHlQYXJzZWQgaXMgdHJ1ZQorCitURVNUIENP
TVBMRVRFCisKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3RvdWNoYWRqdXN0bWVudC9uZXN0ZWQt
dG91Y2guaHRtbCBiL0xheW91dFRlc3RzL3RvdWNoYWRqdXN0bWVudC9uZXN0ZWQtdG91Y2guaHRt
bApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwLi44ZjZiZGNkMTA1OWNkNmExNmNiZTVlYjU5ZDUyZDIzNGFmOGRmNDZmCi0t
LSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvdG91Y2hhZGp1c3RtZW50L25lc3RlZC10b3Vj
aC5odG1sCkBAIC0wLDAgKzEsMTIwIEBACis8aHRtbD4KKzxoZWFkPgorPHN0eWxlPgorICAgIC5i
b3ggeyBib3JkZXI6IDFweCBzb2xpZCBibGFjazsgYm9yZGVyLXJhZGl1czogNXB4IDVweDsgbWFy
Z2luOiAxZW07IG1heC13aWR0aDogNDBlbTsgfQorPC9zdHlsZT4KKzxzY3JpcHQgc3JjPSIuLi9m
YXN0L2pzL3Jlc291cmNlcy9qcy10ZXN0LXByZS5qcyI+PC9zY3JpcHQ+CisKKzwvaGVhZD4KKwor
PGJvZHkgb25sb2FkPSJydW5UZXN0cygpIj4KKworPGRpdiBjbGFzcz1ib3ggaWQ9bXlib3gxPgor
Qm94IHdpdGggYSBsb2NhbCBjbGljayBoYW5kbGVyLgorPC9kaXY+CisKKzxkaXYgY2xhc3M9Ym94
IGlkPW15Ym94Mj4gCitCb3ggd2l0aG91dCBhIGxvY2FsIGNsaWNrIGhhbmRsZXIuCis8L2Rpdj4K
KworPHNjcmlwdD4KKyAgZnVuY3Rpb24gbW9uaXRvcihlKSB7IGFsZXJ0KGUudGFyZ2V0ICsoIGUu
dGFyZ2V0LmlkID8gKCAnICMnICsgZS50YXJnZXQuaWQpIDogJycpKTsgfTsKKyAgZnVuY3Rpb24g
ZG9Tb21ldGhpbmcoZSkge307CisKKyAgdmFyIGVsZW1lbnQgPSBkb2N1bWVudC5nZXRFbGVtZW50
QnlJZCgnbXlib3gxJyk7CisgIGVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCBkb1Nv
bWV0aGluZywgZmFsc2UpOworICBlbGVtZW50ID0gZG9jdW1lbnQuYm9keTsKKyAgZWxlbWVudC5h
ZGRFdmVudExpc3RlbmVyKCdjbGljaycsIG1vbml0b3IsIGZhbHNlKTsKKzwvc2NyaXB0PgorCisK
KzxwIGlkPSdkZXNjcmlwdGlvbic+PC9wPgorPGRpdiBpZD0nY29uc29sZSc+PC9kaXY+CisKKzxz
Y3JpcHQ+CisgICAgdmFyIGVsZW1lbnQ7CisgICAgdmFyIGFkanVzdGVkTm9kZTsKKyAgICBmdW5j
dGlvbiBmaW5kQWJzb2x1dGVQb3NpdGlvbihub2RlKSB7CisgICAgICAgIHZhciBwb3MgPSBuZXcg
T2JqZWN0KCk7CisgICAgICAgIHBvcy5sZWZ0ID0gMDsgcG9zLnRvcCA9IDA7CisgICAgICAgIGRv
IHsKKyAgICAgICAgICAgIHBvcy5sZWZ0ICs9IG5vZGUub2Zmc2V0TGVmdDsKKyAgICAgICAgICAg
IHBvcy50b3AgKz0gbm9kZS5vZmZzZXRUb3A7CisgICAgICAgIH0gd2hpbGUgKG5vZGUgPSBub2Rl
Lm9mZnNldFBhcmVudCk7CisgICAgICAgIHJldHVybiBwb3M7CisgICAgfQorCisgICAgZnVuY3Rp
b24gdGVzdERpcmVjdFRvdWNoKGVsZW1lbnQpCisgICAgeworICAgICAgICB2YXIgcG9zID0gZmlu
ZEFic29sdXRlUG9zaXRpb24oZWxlbWVudCk7CisgICAgICAgIHZhciB4ID0gcG9zLmxlZnQgKyBl
bGVtZW50LmNsaWVudFdpZHRoIC8gMiAtIDE7CisgICAgICAgIHZhciB5ID0gcG9zLnRvcCArIGVs
ZW1lbnQuY2xpZW50SGVpZ2h0IC8gMiAtIDE7CisgICAgICAgIHZhciB3aWR0aCA9IDM7CisgICAg
ICAgIHZhciBoZWlnaHQgPSAzOworICAgICAgICB2YXIgYWRqdXN0ZWROb2RlID0gaW50ZXJuYWxz
LnRvdWNoTm9kZUFkanVzdGVkVG9CZXN0Q2xpY2thYmxlTm9kZSh4LCB5LCB3aWR0aCwgaGVpZ2h0
LCBkb2N1bWVudCk7CisgICAgICAgIGlmIChhZGp1c3RlZE5vZGUubm9kZVR5cGUgPT0gMykgLy8g
VEVYVCBub2RlCisgICAgICAgICAgICBhZGp1c3RlZE5vZGUgPSBhZGp1c3RlZE5vZGUucGFyZW50
Tm9kZTsKKyAgICAgICAgcmV0dXJuIGFkanVzdGVkTm9kZTsKKyAgICB9CisKKyAgICBmdW5jdGlv
biB0ZXN0RG91YmxlVG91Y2goZWxlbWVudDEsIGVsZW1lbnQyLCBvZmZzZXQpCisgICAgeworICAg
ICAgICB2YXIgcG9zMSA9IGZpbmRBYnNvbHV0ZVBvc2l0aW9uKGVsZW1lbnQxKTsKKyAgICAgICAg
dmFyIHBvczIgPSBmaW5kQWJzb2x1dGVQb3NpdGlvbihlbGVtZW50Mik7CisgICAgICAgIC8vIFdl
IGFzc3VtZSB0aGUgZWxlbWVudHMgaGF2ZSB0aGUgc2FtZSB4IGNvb3JkIGFuZCB3aWR0aC4KKyAg
ICAgICAgdmFyIHggPSBwb3MxLmxlZnQgKyBlbGVtZW50MS5jbGllbnRXaWR0aC8yIC0gMTsKKyAg
ICAgICAgdmFyIHkxID0gcG9zMS50b3AgKyBlbGVtZW50MS5jbGllbnRIZWlnaHQvMiArIDE7Cisg
ICAgICAgIHZhciB5MiA9IHBvczIudG9wICsgZWxlbWVudDIuY2xpZW50SGVpZ2h0LzIgLSAxOwor
ICAgICAgICB2YXIgd2lkdGggPSB5MiAtIHkxOworICAgICAgICB2YXIgaGVpZ2h0ID0geTIgLSB5
MTsKKyAgICAgICAgdmFyIGFkanVzdGVkTm9kZSA9IGludGVybmFscy50b3VjaE5vZGVBZGp1c3Rl
ZFRvQmVzdENsaWNrYWJsZU5vZGUoeCwgeTEsIHdpZHRoLCBoZWlnaHQsIGRvY3VtZW50KTsKKyAg
ICAgICAgaWYgKGFkanVzdGVkTm9kZS5ub2RlVHlwZSA9PSAzKSAvLyBURVhUIG5vZGUKKyAgICAg
ICAgICAgIGFkanVzdGVkTm9kZSA9IGFkanVzdGVkTm9kZS5wYXJlbnROb2RlOworICAgICAgICBy
ZXR1cm4gYWRqdXN0ZWROb2RlOworICAgIH0KKworICAgIGZ1bmN0aW9uIHRlc3REaXJlY3RUb3Vj
aGVzKCkKKyAgICB7CisgICAgICAgIGRlYnVnKCdUZXN0aW5nIHNtYWxsIGRpcmVjdCBoaXRzLicp
OworCisgICAgICAgIGVsZW1lbnQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbXlib3gxJyk7
CisgICAgICAgIGFkanVzdGVkTm9kZSA9IHRlc3REaXJlY3RUb3VjaChlbGVtZW50KTsKKyAgICAg
ICAgc2hvdWxkQmUoJ2FkanVzdGVkTm9kZS5pZCcsICdlbGVtZW50LmlkJyk7CisKKyAgICAgICAg
ZWxlbWVudCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdteWJveDInKTsKKyAgICAgICAgYWRq
dXN0ZWROb2RlID0gdGVzdERpcmVjdFRvdWNoKGVsZW1lbnQpOworICAgICAgICBzaG91bGRCZSgn
YWRqdXN0ZWROb2RlLmlkJywgJ2VsZW1lbnQuaWQnKTsKKyAgICB9CisKKyAgICBmdW5jdGlvbiB0
ZXN0UHJlZmVyZWRUb3VjaCgpCisgICAgeworICAgICAgICBkZWJ1ZygnVGVzdGluZyBwcmVmZXJl
ZCBoaXRzLicpOworCisgICAgICAgIGVsZW1lbnQxID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQo
J215Ym94MScpOworICAgICAgICBlbGVtZW50MiA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdt
eWJveDInKTsKKyAgICAgICAgYWRqdXN0ZWROb2RlID0gdGVzdERvdWJsZVRvdWNoKGVsZW1lbnQx
LCBlbGVtZW50MiwgMCk7CisgICAgICAgIHNob3VsZEJlKCdhZGp1c3RlZE5vZGUuaWQnLCAnZWxl
bWVudDEuaWQnKTsKKworICAgICAgICAvLyBGaXJzdCB0ZXN0IHdhcyBjZW50ZXJlZCwgbm93IG1v
dmUgdGhlIHRlc3QgY2xvc2VyIHRvIHRoZSB3cm9uZyBub2RlLCBhbmQgZW5zdXJlIHdlIHN0aWxs
IGdldCB0aGUgcHJlZmVyZWQgbm9kZS4KKyAgICAgICAgYWRqdXN0ZWROb2RlID0gdGVzdERvdWJs
ZVRvdWNoKGVsZW1lbnQxLCBlbGVtZW50MiwgNSk7CisgICAgICAgIHNob3VsZEJlKCdhZGp1c3Rl
ZE5vZGUuaWQnLCAnZWxlbWVudDEuaWQnKTsKKworICAgICAgICBhZGp1c3RlZE5vZGUgPSB0ZXN0
RG91YmxlVG91Y2goZWxlbWVudDEsIGVsZW1lbnQyLCAxMCk7CisgICAgICAgIHNob3VsZEJlKCdh
ZGp1c3RlZE5vZGUuaWQnLCAnZWxlbWVudDEuaWQnKTsKKyAgICB9CisKKyAgICBmdW5jdGlvbiBy
dW5UZXN0cygpCisgICAgeworICAgICAgICBpZiAod2luZG93LmxheW91dFRlc3RDb250cm9sbGVy
ICYmIHdpbmRvdy5pbnRlcm5hbHMgJiYgaW50ZXJuYWxzLnRvdWNoTm9kZUFkanVzdGVkVG9CZXN0
Q2xpY2thYmxlTm9kZSkgeworICAgICAgICAgICAgZGVzY3JpcHRpb24oJ1Rlc3QgdGhlIGNhc2Ug
d2hlcmUgYSBjbGlja2FibGUgdGFyZ2V0IGlzIG5lc3RlZCBpbnNpZGUgYSBkb2N1bWVudCB0aGF0
IGlzIG1vbml0b3JpbmcgY2xpY2tzLiBUaGUgdGFyZ2V0IHdpdGggdGhlIGxvY2FsIGV2ZW50LWhh
bmRsZXIgc2hvdWxkIGJlIGNob3NlbiBpZiBtdWx0aXBsZSB0YXJnZXRzIGFyZSB0b3VjaGVkLicp
OworICAgICAgICAgICAgbGF5b3V0VGVzdENvbnRyb2xsZXIuZHVtcEFzVGV4dCgpOworICAgICAg
ICAgICAgbGF5b3V0VGVzdENvbnRyb2xsZXIud2FpdFVudGlsRG9uZSgpOworICAgICAgICAgICAg
dGVzdERpcmVjdFRvdWNoZXMoKTsKKyAgICAgICAgICAgIHRlc3RQcmVmZXJlZFRvdWNoKCk7Cisg
ICAgICAgICAgICBpc1N1Y2Nlc3NmdWxseVBhcnNlZCgpOworICAgICAgICAgICAgbGF5b3V0VGVz
dENvbnRyb2xsZXIubm90aWZ5RG9uZSgpOworICAgICAgICB9CisgICAgfQorPC9zY3JpcHQ+Cis8
L2JvZHk+Cis8L2h0bWw+CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy90b3VjaGFkanVzdG1lbnQv
dG91Y2gtaW5saW5lcy1leHBlY3RlZC50eHQgYi9MYXlvdXRUZXN0cy90b3VjaGFkanVzdG1lbnQv
dG91Y2gtaW5saW5lcy1leHBlY3RlZC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uOTc0YWQ4MmFlOTM5Y2VlZDIy
MTFkYjM0MzM5NWVjNjQyNjM4YmM1NAotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL3Rv
dWNoYWRqdXN0bWVudC90b3VjaC1pbmxpbmVzLWV4cGVjdGVkLnR4dApAQCAtMCwwICsxLDI5IEBA
Citzb21lIGxpbmsKK3NvbWUgbGluayBicmVha2luZyBsaW5lcyBhbmQgbGluaworaG9sYSBtdW5k
byEgYSBzcGxpdCB1cCBsaW5rCitoZWxsbyB3b3JsZCBzb21lIGxpbmsgYWxzbyBicmVha2luZwor
aGkgdGhlcmUgc29tZSBsaW5rIHRoYXQgaXMgYnJlYWtpbmcgbXVsdGlwbGUgbGluZXMganVzdCBm
b3IgdGhlIHZlcnkgZnVuIG9mIGl0CisKK1Rlc3QgdG91Y2gtYWRqdXN0bWVudCBvbiBpbmxpbmUg
bGlua3MuIE1ha2luZyBzdXJlIHdlIGNhbiBoaXQgb3ZlciBsaW5lLWJyZWFrcywgYW5kIGNhbiBt
aXNzIHdoZW4gdGFwcGluZyBiZXR3ZWVuIHBhcnRzIG9mIGEgbGluZS1icm9rZW4gbGluay4KKwor
T24gc3VjY2VzcywgeW91IHdpbGwgc2VlIGEgc2VyaWVzIG9mICJQQVNTIiBtZXNzYWdlcywgZm9s
bG93ZWQgYnkgIlRFU1QgQ09NUExFVEUiLgorCisKK1Rlc3Qgc29tZSBkaXJlY3QgaGl0cy4KK1BB
U1MgYWRqdXN0ZWROb2RlLmlkIGlzICIxIgorUEFTUyBhZGp1c3RlZE5vZGUuaWQgaXMgIjIiCitQ
QVNTIGFkanVzdGVkTm9kZS5pZCBpcyAiNCIKK1BBU1MgYWRqdXN0ZWROb2RlLmlkIGlzICI2Igor
VGVzdCBhIGZldyBkaXJlY3QgbWlzc2VzLgorUEFTUyBhZGp1c3RlZE5vZGUuaWQgaXMgIiIKK1BB
U1MgYWRqdXN0ZWROb2RlLmlkIGlzICIiCitUZXN0IHNvbWUgaW4tZGlyZWN0IGhpdHMuCitQQVNT
IGFkanVzdGVkTm9kZS5pZCBpcyAiMiIKK1BBU1MgYWRqdXN0ZWROb2RlLmlkIGlzICIzIgorUEFT
UyBhZGp1c3RlZE5vZGUuaWQgaXMgIjQiCitQQVNTIGFkanVzdGVkTm9kZS5pZCBpcyAiNCIKK1BB
U1MgYWRqdXN0ZWROb2RlLmlkIGlzICI2IgorUEFTUyBzdWNjZXNzZnVsbHlQYXJzZWQgaXMgdHJ1
ZQorCitURVNUIENPTVBMRVRFCisKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3RvdWNoYWRqdXN0
bWVudC90b3VjaC1pbmxpbmVzLmh0bWwgYi9MYXlvdXRUZXN0cy90b3VjaGFkanVzdG1lbnQvdG91
Y2gtaW5saW5lcy5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmU5OTgwNGI3M2Y4YWFmMjlhMmFkYTlhMWEzNjVm
NGNhMDVlMTMwN2QKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy90b3VjaGFkanVzdG1l
bnQvdG91Y2gtaW5saW5lcy5odG1sCkBAIC0wLDAgKzEsOTkgQEAKKzxodG1sPgorPGhlYWQ+Cisg
ICAgPHNjcmlwdCBzcmM9Ii4uL2Zhc3QvanMvcmVzb3VyY2VzL2pzLXRlc3QtcHJlLmpzIj48L3Nj
cmlwdD4KKzwvaGVhZD4KKzxib2R5IG9ubG9hZD0icnVuVGVzdHMoKSI+CisKKzxwIHN0eWxlPSJ3
aWR0aDogMTBlbTsiPgorPGEgaWQ9IjEiIGhyZWY9IiMxIj5zb21lIGxpbms8L2E+PGJyPgorPGEg
aWQ9IjIiIGhyZWY9IiMyIj5zb21lIGxpbmsgYnJlYWtpbmcgbGluZXM8L2E+IGFuZCA8YSBpZD0i
MyIgaHJlZj0iIzMiPmxpbms8L2E+PGJyPgoraG9sYSBtdW5kbyEgPGEgaWQ9IjQiIGhyZWY9IiM0
Ij5hIHNwbGl0IHVwIGxpbms8L2E+PGJyPgoraGVsbG8gd29ybGQgPGEgaWQ9IjUiIGhyZWY9IiM1
Ij5zb21lIGxpbmsgYWxzbyBicmVha2luZzwvYT48YnI+CitoaSB0aGVyZSA8YSBpZD0iNiIgaHJl
Zj0iIzYiPnNvbWUgbGluayB0aGF0IGlzIGJyZWFraW5nIG11bHRpcGxlIGxpbmVzIGp1c3QgZm9y
IHRoZSB2ZXJ5IGZ1biBvZiBpdDwvYT48YnI+PGJyPgorPC9wPgorCisKKzxwIGlkPSdkZXNjcmlw
dGlvbic+PC9wPgorPGRpdiBpZD0nY29uc29sZSc+PC9kaXY+CisKKzxzY3JpcHQ+CisgICAgdmFy
IGVsZW1lbnQ7CisgICAgdmFyIGFkanVzdGVkTm9kZTsKKyAgICBmdW5jdGlvbiB0ZXN0Um91bmRU
b3VjaCh4LCB5LCByYWRpdXMpCisgICAgeworICAgICAgICB2YXIgeCA9IHggLSByYWRpdXM7Cisg
ICAgICAgIHZhciB5ID0geSAtIHJhZGl1czsKKyAgICAgICAgdmFyIHdpZHRoID0gcmFkaXVzICog
MjsKKyAgICAgICAgdmFyIGhlaWdodCA9IHJhZGl1cyAqIDI7CisgICAgICAgIHZhciBhZGp1c3Rl
ZE5vZGUgPSBpbnRlcm5hbHMudG91Y2hOb2RlQWRqdXN0ZWRUb0Jlc3RDbGlja2FibGVOb2RlKHgs
IHksIHdpZHRoLCBoZWlnaHQsIGRvY3VtZW50KTsKKyAgICAgICAgaWYgKGFkanVzdGVkTm9kZS5u
b2RlVHlwZSA9PSAzKSAvLyBURVhUIG5vZGUKKyAgICAgICAgICAgIGFkanVzdGVkTm9kZSA9IGFk
anVzdGVkTm9kZS5wYXJlbnROb2RlOworICAgICAgICByZXR1cm4gYWRqdXN0ZWROb2RlOworICAg
IH0KKworICAgIGZ1bmN0aW9uIHRlc3REaXJlY3RUb3VjaGVzKCkKKyAgICB7CisgICAgICAgIGRl
YnVnKCdUZXN0IHNvbWUgZGlyZWN0IGhpdHMuJyk7CisKKyAgICAgICAgYWRqdXN0ZWROb2RlID0g
dGVzdFJvdW5kVG91Y2goMzAsIDIwLCA4KQorICAgICAgICBzaG91bGRCZUVxdWFsVG9TdHJpbmco
J2FkanVzdGVkTm9kZS5pZCcsICcxJyk7CisKKyAgICAgICAgYWRqdXN0ZWROb2RlID0gdGVzdFJv
dW5kVG91Y2goMzAsIDYwLCA4KQorICAgICAgICBzaG91bGRCZUVxdWFsVG9TdHJpbmcoJ2FkanVz
dGVkTm9kZS5pZCcsICcyJyk7CisKKyAgICAgICAgYWRqdXN0ZWROb2RlID0gdGVzdFJvdW5kVG91
Y2goMTIwLCA4MCwgOCkKKyAgICAgICAgc2hvdWxkQmVFcXVhbFRvU3RyaW5nKCdhZGp1c3RlZE5v
ZGUuaWQnLCAnNCcpOworCisgICAgICAgIGFkanVzdGVkTm9kZSA9IHRlc3RSb3VuZFRvdWNoKDgw
LCAxODAsIDgpCisgICAgICAgIHNob3VsZEJlRXF1YWxUb1N0cmluZygnYWRqdXN0ZWROb2RlLmlk
JywgJzYnKTsKKyAgICB9CisKKyAgICBmdW5jdGlvbiB0ZXN0RGlyZWN0TWlzc2VzKCkKKyAgICB7
CisgICAgICAgIGRlYnVnKCdUZXN0IGEgZmV3IGRpcmVjdCBtaXNzZXMuJyk7CisKKyAgICAgICAg
YWRqdXN0ZWROb2RlID0gdGVzdFJvdW5kVG91Y2goNTYsIDYwLCA4KQorICAgICAgICBzaG91bGRC
ZUVxdWFsVG9TdHJpbmcoJ2FkanVzdGVkTm9kZS5pZCcsICcnKTsKKworICAgICAgICBhZGp1c3Rl
ZE5vZGUgPSB0ZXN0Um91bmRUb3VjaCgyMCwgMTYwLCA0KQorICAgICAgICBzaG91bGRCZUVxdWFs
VG9TdHJpbmcoJ2FkanVzdGVkTm9kZS5pZCcsICcnKTsKKworICAgIH0KKworICAgIGZ1bmN0aW9u
IHRlc3RJbmRpcmVjdFRvdWNoZXMoKQorICAgIHsKKyAgICAgICAgZGVidWcoJ1Rlc3Qgc29tZSBp
bi1kaXJlY3QgaGl0cy4nKTsKKworICAgICAgICBhZGp1c3RlZE5vZGUgPSB0ZXN0Um91bmRUb3Vj
aCg1NiwgNjAsIDIwKQorICAgICAgICBzaG91bGRCZUVxdWFsVG9TdHJpbmcoJ2FkanVzdGVkTm9k
ZS5pZCcsICcyJyk7CisKKyAgICAgICAgYWRqdXN0ZWROb2RlID0gdGVzdFJvdW5kVG91Y2goODUs
IDgwLCAyMCkKKyAgICAgICAgc2hvdWxkQmVFcXVhbFRvU3RyaW5nKCdhZGp1c3RlZE5vZGUuaWQn
LCAnMycpOworCisgICAgICAgIGFkanVzdGVkTm9kZSA9IHRlc3RSb3VuZFRvdWNoKDEyMCwgNjAs
IDIwKQorICAgICAgICBzaG91bGRCZUVxdWFsVG9TdHJpbmcoJ2FkanVzdGVkTm9kZS5pZCcsICc0
Jyk7CisKKyAgICAgICAgYWRqdXN0ZWROb2RlID0gdGVzdFJvdW5kVG91Y2goNDAsIDEwMCwgMjAp
CisgICAgICAgIHNob3VsZEJlRXF1YWxUb1N0cmluZygnYWRqdXN0ZWROb2RlLmlkJywgJzQnKTsK
KworICAgICAgICBhZGp1c3RlZE5vZGUgPSB0ZXN0Um91bmRUb3VjaCgyMCwgMTY1LCAyMCkKKyAg
ICAgICAgc2hvdWxkQmVFcXVhbFRvU3RyaW5nKCdhZGp1c3RlZE5vZGUuaWQnLCAnNicpOworCisg
ICAgfQorCisgICAgZnVuY3Rpb24gcnVuVGVzdHMoKQorICAgIHsKKyAgICAgICAgaWYgKHdpbmRv
dy5sYXlvdXRUZXN0Q29udHJvbGxlciAmJiB3aW5kb3cuaW50ZXJuYWxzICYmIGludGVybmFscy50
b3VjaE5vZGVBZGp1c3RlZFRvQmVzdENsaWNrYWJsZU5vZGUpIHsKKyAgICAgICAgICAgIGRlc2Ny
aXB0aW9uKCdUZXN0IHRvdWNoLWFkanVzdG1lbnQgb24gaW5saW5lIGxpbmtzLiBNYWtpbmcgc3Vy
ZSB3ZSBjYW4gaGl0IG92ZXIgbGluZS1icmVha3MsIGFuZCBjYW4gbWlzcyB3aGVuIHRhcHBpbmcg
YmV0d2VlbiBwYXJ0cyBvZiBhIGxpbmUtYnJva2VuIGxpbmsuJyk7CisgICAgICAgICAgICBsYXlv
dXRUZXN0Q29udHJvbGxlci5kdW1wQXNUZXh0KCk7CisgICAgICAgICAgICBsYXlvdXRUZXN0Q29u
dHJvbGxlci53YWl0VW50aWxEb25lKCk7CisgICAgICAgICAgICB0ZXN0RGlyZWN0VG91Y2hlcygp
OworICAgICAgICAgICAgdGVzdERpcmVjdE1pc3NlcygpOworICAgICAgICAgICAgdGVzdEluZGly
ZWN0VG91Y2hlcygpOworICAgICAgICAgICAgaXNTdWNjZXNzZnVsbHlQYXJzZWQoKTsKKyAgICAg
ICAgICAgIGxheW91dFRlc3RDb250cm9sbGVyLm5vdGlmeURvbmUoKTsKKyAgICAgICAgfQorICAg
IH0KKzwvc2NyaXB0PgorPC9ib2R5PgorPC9odG1sPgo=
</data>
<flag name="review"
          id="134622"
          type_id="1"
          status="-"
          setter="tonikitoo"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>132572</attachid>
            <date>2012-03-19 07:05:24 -0700</date>
            <delta_ts>2012-03-19 08:33:43 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>Patch18</filename>
            <type>text/plain</type>
            <size>61637</size>
            <attacher name="Allan Sandfeld Jensen">allan.jensen</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL0NoYW5nZUxvZyBiL0xheW91dFRlc3RzL0NoYW5nZUxv
ZwppbmRleCBmMjU3MTJhLi41M2FkYTY1IDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9DaGFuZ2VM
b2cKKysrIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjYgQEAKKzIwMTItMDMt
MTIgIEFsbGFuIFNhbmRmZWxkIEplbnNlbiAgPGFsbGFuLmplbnNlbkBub2tpYS5jb20+CisKKyAg
ICAgICAgU2VsZWN0IGJlc3QgdGFyZ2V0IGZvciB0YXAgZ2VzdHVyZS4KKyAgICAgICAgaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTc4ODAxCisKKyAgICAgICAgUmV2aWV3
ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVGVzdCBvZiB0b3VjaCBhZGp1c3RtZW50
cy4gVGVzdHMgc2V2ZXJhbCBib3RoIG5vcm1hbCBhbmQgdHJpY2t5IGNhc2VzLgorCisgICAgICAg
ICogcGxhdGZvcm0vY2hyb21pdW0vdGVzdF9leHBlY3RhdGlvbnMudHh0OgorICAgICAgICAqIHBs
YXRmb3JtL2VmbC9Ta2lwcGVkOgorICAgICAgICAqIHBsYXRmb3JtL2d0ay9Ta2lwcGVkOgorICAg
ICAgICAqIHBsYXRmb3JtL21hYy9Ta2lwcGVkOgorICAgICAgICAqIHBsYXRmb3JtL3dpbi9Ta2lw
cGVkOgorICAgICAgICAqIHRvdWNoYWRqdXN0bWVudC9ldmVudC10cmlnZ2VyZWQtd2lkZ2V0cy1l
eHBlY3RlZC50eHQ6IEFkZGVkLgorICAgICAgICAqIHRvdWNoYWRqdXN0bWVudC9ldmVudC10cmln
Z2VyZWQtd2lkZ2V0cy5odG1sOiBBZGRlZC4KKyAgICAgICAgKiB0b3VjaGFkanVzdG1lbnQvaHRt
bC1sYWJlbC1leHBlY3RlZC50eHQ6IEFkZGVkLgorICAgICAgICAqIHRvdWNoYWRqdXN0bWVudC9o
dG1sLWxhYmVsLmh0bWw6IEFkZGVkLgorICAgICAgICAqIHRvdWNoYWRqdXN0bWVudC9uZXN0ZWQt
dG91Y2gtZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAgICAgKiB0b3VjaGFkanVzdG1lbnQvbmVz
dGVkLXRvdWNoLmh0bWw6IEFkZGVkLgorICAgICAgICAqIHRvdWNoYWRqdXN0bWVudC90b3VjaC1p
bmxpbmVzLWV4cGVjdGVkLnR4dDogQWRkZWQuCisgICAgICAgICogdG91Y2hhZGp1c3RtZW50L3Rv
dWNoLWlubGluZXMuaHRtbDogQWRkZWQuCisKIDIwMTItMDMtMTkgIEJhbGF6cyBBbmtlcyAgPGJh
bmtAaW5mLnUtc3plZ2VkLmh1PgogCiAgICAgICAgIFtRdF0gR2FyZGVuaW5nLgpkaWZmIC0tZ2l0
IGEvTGF5b3V0VGVzdHMvcGxhdGZvcm0vY2hyb21pdW0vdGVzdF9leHBlY3RhdGlvbnMudHh0IGIv
TGF5b3V0VGVzdHMvcGxhdGZvcm0vY2hyb21pdW0vdGVzdF9leHBlY3RhdGlvbnMudHh0CmluZGV4
IDkyODY5MWMuLjM0Nzk3ZDIgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL3BsYXRmb3JtL2Nocm9t
aXVtL3Rlc3RfZXhwZWN0YXRpb25zLnR4dAorKysgYi9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9jaHJv
bWl1bS90ZXN0X2V4cGVjdGF0aW9ucy50eHQKQEAgLTExNSw2ICsxMTUsOSBAQCBCVUdXSzcyMDEw
IFNLSVAgOiBmYXN0L2RvbS9uYXZpZ2F0b3ItdmlicmF0aW9uLmh0bWwgPSBGQUlMCiAvLyBCYXR0
ZXJ5IFN0YXR1cyBBUEkgaXMgbm90IHN1cHBvcnRlZCB5ZXQgaW4gdGhlIGNocm9taXVtIHBvcnQu
CiBCVUdXSzYyNjk4IFNLSVAgOiBiYXR0ZXJ5c3RhdHVzID0gUEFTUyBGQUlMCiAKKy8vIFRvdWNo
IEFkanVzdG1lbnQgaXMgbm90IHN1cHBvcnRlZCB5ZXQgaW4gdGhlIGNocm9taXVtIHBvcnQuCitC
VUdXSzc4ODAxIFNLSVAgOiB0b3VjaGFkanVzdG1lbnQvID0gRkFJTAorCiAvLyAtLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQog
Ly8gV09OVEZJWCBURVNUUwogLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3Bs
YXRmb3JtL2VmbC9Ta2lwcGVkIGIvTGF5b3V0VGVzdHMvcGxhdGZvcm0vZWZsL1NraXBwZWQKaW5k
ZXggNGQxNjE1Yy4uODE0NTQ5NiAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvcGxhdGZvcm0vZWZs
L1NraXBwZWQKKysrIGIvTGF5b3V0VGVzdHMvcGxhdGZvcm0vZWZsL1NraXBwZWQKQEAgLTI2MjYs
NiArMjYyNiwxMCBAQCBmYXN0L2V2ZW50cy9wYWdlLXZpc2liaWxpdHktaWZyYW1lLWRlbGV0ZS10
ZXN0Lmh0bWwKIGZhc3QvZXZlbnRzL3BhZ2UtdmlzaWJpbGl0eS1pZnJhbWUtcHJvcGFnYXRpb24t
dGVzdC5odG1sCiBmYXN0L2V2ZW50cy9wYWdlLXZpc2liaWxpdHktdHJhbnNpdGlvbi10ZXN0Lmh0
bWwKIAorIyBUb3VjaCBhZGp1c3RtZW50IG5vdCBlbmFibGVkCisjIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD03ODgwMQordG91Y2hhZGp1c3RtZW50CisKICMgVGhlcmUg
YXJlIG5vIGV4cGVjdGVkIHJlc3VsdCBzZXQgeWV0LgogYW5pbWF0aW9ucy9hZGRpdGl2ZS10cmFu
c2Zvcm0tYW5pbWF0aW9ucy5odG1sCiBhbmltYXRpb25zL2FuaW1hdGlvbi1ib3JkZXItb3ZlcmZs
b3cuaHRtbApkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvcGxhdGZvcm0vZ3RrL1NraXBwZWQgYi9M
YXlvdXRUZXN0cy9wbGF0Zm9ybS9ndGsvU2tpcHBlZAppbmRleCA5NjFjY2RhLi5hODMyMDk0IDEw
MDY0NAotLS0gYS9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9ndGsvU2tpcHBlZAorKysgYi9MYXlvdXRU
ZXN0cy9wbGF0Zm9ybS9ndGsvU2tpcHBlZApAQCAtMTU3Niw2ICsxNTc2LDEwIEBAIHBsdWdpbnMv
bmV0c2NhcGUtcGx1Z2luLXBhZ2UtY2FjaGUtd29ya3MuaHRtbAogIyBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9ODA1MzQKIGZhc3QvZXZlbnRzL2F1dG9zY3JvbGwtaW4t
dGV4dGZpZWxkLmh0bWwKIAorIyBUb3VjaCBhZGp1c3RtZW50IG5vdCBlbmFibGVkCisjIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD03ODgwMQordG91Y2hhZGp1c3RtZW50
CisKICMgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTgxMDg5CiBpbnNw
ZWN0b3IvZGVidWdnZXIvc25pcHBldHMtbW9kZWwuaHRtbAogCmRpZmYgLS1naXQgYS9MYXlvdXRU
ZXN0cy9wbGF0Zm9ybS9tYWMvU2tpcHBlZCBiL0xheW91dFRlc3RzL3BsYXRmb3JtL21hYy9Ta2lw
cGVkCmluZGV4IGM5MGUxZDkuLmEyYmJjMDQgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL3BsYXRm
b3JtL21hYy9Ta2lwcGVkCisrKyBiL0xheW91dFRlc3RzL3BsYXRmb3JtL21hYy9Ta2lwcGVkCkBA
IC01NzMsNiArNTczLDEwIEBAIGZhc3QvbXV0YXRpb24vZW5kLW9mLXRhc2stZGVsaXZlcnkuaHRt
bAogIyBOZWVkcyBQYWdlQ2xpZW50czo6dmlicmF0aW9uQ2xpZW50KCkgaW1wbGVtZW50YXRpb24u
CiBmYXN0L2RvbS9uYXZpZ2F0b3ItdmlicmF0aW9uLmh0bWwKIAorIyBUb3VjaCBhZGp1c3RtZW50
IG5vdCBlbmFibGVkCisjIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD03
ODgwMQordG91Y2hhZGp1c3RtZW50CisKICMgaHR0cDovLy93ZWJraXQub3JnL2IvODA1MzEKICMg
UkVHUkVTU0lPTihyMTEwMDcyKTogZmFzdC9mb3Jtcy90ZXh0ZmllbGQtb3ZlcmZsb3cuaHRtbCBp
cyBmYWlsaW5nCiBmYXN0L2Zvcm1zL3RleHRmaWVsZC1vdmVyZmxvdy5odG1sCmRpZmYgLS1naXQg
YS9MYXlvdXRUZXN0cy9wbGF0Zm9ybS93aW4vU2tpcHBlZCBiL0xheW91dFRlc3RzL3BsYXRmb3Jt
L3dpbi9Ta2lwcGVkCmluZGV4IGI4N2VmMjQuLjNmZTc2ODYgMTAwNjQ0Ci0tLSBhL0xheW91dFRl
c3RzL3BsYXRmb3JtL3dpbi9Ta2lwcGVkCisrKyBiL0xheW91dFRlc3RzL3BsYXRmb3JtL3dpbi9T
a2lwcGVkCkBAIC0xNjY3LDYgKzE2NjcsMTAgQEAgZmFzdC9kb20vbmF2aWdhdG9yLXZpYnJhdGlv
bi5odG1sCiAjQmF0dGVyeSBTdGF0dXMgQVBJIGlzIG5vdCBpbXBsZW1lbnRlZC4KIGJhdHRlcnlz
dGF0dXMKIAorIyBUb3VjaCBhZGp1c3RtZW50IG5vdCBlbmFibGVkCisjIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD03ODgwMQordG91Y2hhZGp1c3RtZW50CisKICMgVGhv
c2UgdGVzdHMgbmVlZCBhIHRleHQgYmFzZWxpbmUgYWZ0ZXIgbGF6aWx5IGFsbG9jYXRpbmcgbGF5
ZXJzLgogIyBUaGUgY2hhbmdlIHNob3VsZCBvbmx5IGJlIGxheWVyIHJlbW92YWwuCiBhbmltYXRp
b25zL2NvbWJvLXRyYW5zZm9ybS10cmFuc2xhdGUrc2NhbGUuaHRtbApkaWZmIC0tZ2l0IGEvTGF5
b3V0VGVzdHMvdG91Y2hhZGp1c3RtZW50L2V2ZW50LXRyaWdnZXJlZC13aWRnZXRzLWV4cGVjdGVk
LnR4dCBiL0xheW91dFRlc3RzL3RvdWNoYWRqdXN0bWVudC9ldmVudC10cmlnZ2VyZWQtd2lkZ2V0
cy1leHBlY3RlZC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjk0ZTIw
ZQotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL3RvdWNoYWRqdXN0bWVudC9ldmVudC10
cmlnZ2VyZWQtd2lkZ2V0cy1leHBlY3RlZC50eHQKQEAgLTAsMCArMSwzMSBAQAorVGVzdCB2YXJp
b3VzIHdheXMgdG8gdHJpZ2dlciBpbnB1dC13aWRnZXRzLiBPbiBhIHRvdWNoIGludGVyZmFjZSwg
YWxsIHRoZSBhY3Rpb25zIHNob3VsZCBiZSB0cmlnZ2VyYWJsZSB3aXRoIGVpdGhlciBhIHRvdWNo
IGRvd24gb3IgYSB0b3VjaCB0YXAuCisKK09uIHN1Y2Nlc3MsIHlvdSB3aWxsIHNlZSBhIHNlcmll
cyBvZiAiUEFTUyIgbWVzc2FnZXMsIGZvbGxvd2VkIGJ5ICJURVNUIENPTVBMRVRFIi4KKworCitU
ZXN0aW5nIHNtYWxsIGRpcmVjdCBoaXRzCitQQVNTIGFkanVzdGVkTm9kZS5pZCBpcyBlbGVtZW50
LmlkCitQQVNTIGFkanVzdGVkTm9kZS5pZCBpcyBlbGVtZW50LmlkCitQQVNTIGFkanVzdGVkTm9k
ZS5pZCBpcyBlbGVtZW50LmlkCitQQVNTIGFkanVzdGVkTm9kZS5pZCBpcyBub3QgZWxlbWVudC5p
ZAorUEFTUyBhZGp1c3RlZE5vZGUuaWQgaXMgZWxlbWVudC5pZAorVGVzdGluZyBsYXJnZSBkaXJl
Y3QgaGl0cworUEFTUyBhZGp1c3RlZE5vZGUuaWQgaXMgZWxlbWVudC5pZAorUEFTUyBhZGp1c3Rl
ZE5vZGUuaWQgaXMgZWxlbWVudC5pZAorUEFTUyBhZGp1c3RlZE5vZGUuaWQgaXMgZWxlbWVudC5p
ZAorUEFTUyBhZGp1c3RlZE5vZGUuaWQgaXMgbm90IGVsZW1lbnQuaWQKK1BBU1MgYWRqdXN0ZWRO
b2RlLmlkIGlzIGVsZW1lbnQuaWQKK1Rlc3RpbmcgbGFyZ2UgZGlyZWN0IGhpdHMKK1BBU1MgYWRq
dXN0ZWROb2RlLmlkIGlzIGVsZW1lbnQuaWQKK1BBU1MgYWRqdXN0ZWROb2RlLmlkIGlzIGVsZW1l
bnQuaWQKK1BBU1MgYWRqdXN0ZWROb2RlLmlkIGlzIGVsZW1lbnQuaWQKK1BBU1MgYWRqdXN0ZWRO
b2RlLmlkIGlzIG5vdCBlbGVtZW50LmlkCitQQVNTIGFkanVzdGVkTm9kZS5pZCBpcyBlbGVtZW50
LmlkCitQQVNTIHN1Y2Nlc3NmdWxseVBhcnNlZCBpcyB0cnVlCisKK1RFU1QgQ09NUExFVEUKK0Zv
Y3VzIGhlcmUgc2hvdWxkIGdpdmUgYSB0ZXh0IGlucHV0LWZpZWxkLgorTW91c2Utb3ZlciBoZXJl
IHNob3VsZCBnaXZlIGEgdGV4dCBpbnB1dC1maWVsZC4KK0hvdmVyaW5nIGhlcmUgc2hvdWxkIGdp
dmUgYSB0ZXh0IGlucHV0LWZpZWxkLiAKK0ZvY3VzaW5nIGhlcmUgc2hvdWxkIG9ubHkgZ2l2ZSBm
b2N1cyBvdXRsaW5lLgorRm9jdXNpbmcgaGVyZSBzaG91bGQgZ2l2ZSBhIHRleHQgaW5wdXQtZmll
bGQuCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy90b3VjaGFkanVzdG1lbnQvZXZlbnQtdHJpZ2dl
cmVkLXdpZGdldHMuaHRtbCBiL0xheW91dFRlc3RzL3RvdWNoYWRqdXN0bWVudC9ldmVudC10cmln
Z2VyZWQtd2lkZ2V0cy5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjEy
NzliNzcKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy90b3VjaGFkanVzdG1lbnQvZXZl
bnQtdHJpZ2dlcmVkLXdpZGdldHMuaHRtbApAQCAtMCwwICsxLDE2OSBAQAorPGh0bWw+Cis8aGVh
ZD4KKzxzdHlsZT4KKyAgICAuYm94IHsgYm9yZGVyOiAxcHggc29saWQgYmxhY2s7IGJvcmRlci1y
YWRpdXM6IDVweCA1cHg7IG1hcmdpbjogMWVtOyBtYXgtd2lkdGg6IDQwZW07IH0KKzwvc3R5bGU+
CisKKzxzY3JpcHQgc3JjPSIuLi9mYXN0L2pzL3Jlc291cmNlcy9qcy10ZXN0LXByZS5qcyI+PC9z
Y3JpcHQ+CisKKzwvaGVhZD4KKworPGJvZHkgb25sb2FkPSJydW5UZXN0cygpIj4KKworPHAgaWQ9
J2Rlc2NyaXB0aW9uJz48L3A+CisKKzxkaXYgaWQ9J2NvbnNvbGUnPjwvZGl2PgorCis8c2NyaXB0
PgorICAgIHZhciBlbGVtZW50OworICAgIHZhciBhZGp1c3RlZE5vZGU7CisgICAgZnVuY3Rpb24g
ZmluZEFic29sdXRlUG9zaXRpb24obm9kZSkgeworICAgICAgICB2YXIgcG9zID0gbmV3IE9iamVj
dCgpOworICAgICAgICBwb3MubGVmdCA9IDA7IHBvcy50b3AgPSAwOworICAgICAgICBkbyB7Cisg
ICAgICAgICAgICBwb3MubGVmdCArPSBub2RlLm9mZnNldExlZnQ7CisgICAgICAgICAgICBwb3Mu
dG9wICs9IG5vZGUub2Zmc2V0VG9wOworICAgICAgICB9IHdoaWxlIChub2RlID0gbm9kZS5vZmZz
ZXRQYXJlbnQpOworICAgICAgICByZXR1cm4gcG9zOworICAgIH0KKworICAgIGZ1bmN0aW9uIHRl
c3REaXJlY3RUb3VjaChlbGVtZW50KQorICAgIHsKKyAgICAgICAgdmFyIHBvcyA9IGZpbmRBYnNv
bHV0ZVBvc2l0aW9uKGVsZW1lbnQpOworICAgICAgICB2YXIgeCA9IHBvcy5sZWZ0ICsgZWxlbWVu
dC5jbGllbnRXaWR0aCAvIDIgLSAxOworICAgICAgICB2YXIgeSA9IHBvcy50b3AgKyBlbGVtZW50
LmNsaWVudEhlaWdodCAvIDIgLSAxOworICAgICAgICB2YXIgd2lkdGggPSAzOworICAgICAgICB2
YXIgaGVpZ2h0ID0gMzsKKyAgICAgICAgYWRqdXN0ZWROb2RlID0gaW50ZXJuYWxzLnRvdWNoTm9k
ZUFkanVzdGVkVG9CZXN0Q2xpY2thYmxlTm9kZSh4LCB5LCB3aWR0aCwgaGVpZ2h0LCBkb2N1bWVu
dCk7CisKKyAgICAgICAgaWYgKGFkanVzdGVkTm9kZS5ub2RlVHlwZSA9PSAzKSAvLyBURVhUIG5v
ZGUKKyAgICAgICAgICAgIGFkanVzdGVkTm9kZSA9IGFkanVzdGVkTm9kZS5wYXJlbnROb2RlOwor
ICAgIH0KKworICAgIGZ1bmN0aW9uIHRlc3REaXJlY3RGYXRGaW5nZXIoZWxlbWVudCkKKyAgICB7
CisgICAgICAgIHZhciBwb3MgPSBmaW5kQWJzb2x1dGVQb3NpdGlvbihlbGVtZW50KTsKKyAgICAg
ICAgdmFyIHggPSBwb3MubGVmdCArIGVsZW1lbnQuY2xpZW50V2lkdGggLyAyIC0gMTsKKyAgICAg
ICAgdmFyIHkgPSBwb3MudG9wIC0gNSA7CisgICAgICAgIHZhciB3aWR0aCA9IGVsZW1lbnQuY2xp
ZW50SGVpZ2h0OworICAgICAgICB2YXIgaGVpZ2h0ID0gZWxlbWVudC5jbGllbnRIZWlnaHQgKyAx
MDsKKyAgICAgICAgYWRqdXN0ZWROb2RlID0gaW50ZXJuYWxzLnRvdWNoTm9kZUFkanVzdGVkVG9C
ZXN0Q2xpY2thYmxlTm9kZSh4LCB5LCB3aWR0aCwgaGVpZ2h0LCBkb2N1bWVudCk7CisgICAgICAg
IGlmIChhZGp1c3RlZE5vZGUubm9kZVR5cGUgPT0gMykgLy8gVEVYVCBub2RlCisgICAgICAgICAg
ICBhZGp1c3RlZE5vZGUgPSBhZGp1c3RlZE5vZGUucGFyZW50Tm9kZTsKKyAgICB9CisKKyAgICBm
dW5jdGlvbiB0ZXN0SW5kaXJlY3RGYXRGaW5nZXIoZWxlbWVudCkKKyAgICB7CisgICAgICAgIHZh
ciBwb3MgPSBmaW5kQWJzb2x1dGVQb3NpdGlvbihlbGVtZW50KTsKKyAgICAgICAgdmFyIHggPSBw
b3MubGVmdCArIGVsZW1lbnQuY2xpZW50V2lkdGggLyAyIC0gMTsKKyAgICAgICAgdmFyIHkgPSBw
b3MudG9wIC0gNzsKKyAgICAgICAgdmFyIHdpZHRoID0gMTA7CisgICAgICAgIHZhciBoZWlnaHQg
PSAxMDsKKyAgICAgICAgYWRqdXN0ZWROb2RlID0gaW50ZXJuYWxzLnRvdWNoTm9kZUFkanVzdGVk
VG9CZXN0Q2xpY2thYmxlTm9kZSh4LCB5LCB3aWR0aCwgaGVpZ2h0LCBkb2N1bWVudCk7CisgICAg
ICAgIGlmIChhZGp1c3RlZE5vZGUubm9kZVR5cGUgPT0gMykgLy8gVEVYVCBub2RlCisgICAgICAg
ICAgICBhZGp1c3RlZE5vZGUgPSBhZGp1c3RlZE5vZGUucGFyZW50Tm9kZTsKKyAgICB9CisKKyAg
ICBmdW5jdGlvbiB0ZXN0VG91Y2hIaXQoZWxlbWVudGlkLCB0b3VjaFR5cGUpIHsKKyAgICAgICAg
ZWxlbWVudCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGVsZW1lbnRpZCk7CisgICAgICAgIHRv
dWNoVHlwZShlbGVtZW50KTsKKyAgICAgICAgc2hvdWxkQmUoJ2FkanVzdGVkTm9kZS5pZCcsICdl
bGVtZW50LmlkJyk7CisgICAgfQorCisgICAgZnVuY3Rpb24gdGVzdFRvdWNoTWlzcyhlbGVtZW50
aWQsIHRvdWNoVHlwZSkgeworICAgICAgICBlbGVtZW50ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5
SWQoZWxlbWVudGlkKTsKKyAgICAgICAgdG91Y2hUeXBlKGVsZW1lbnQpOworICAgICAgICBzaG91
bGROb3RCZSgnYWRqdXN0ZWROb2RlLmlkJywgJ2VsZW1lbnQuaWQnKTsKKyAgICB9CisKKyAgICBm
dW5jdGlvbiB0ZXN0RGlyZWN0VG91Y2hlcygpCisgICAgeworICAgICAgICBkZWJ1ZygnVGVzdGlu
ZyBzbWFsbCBkaXJlY3QgaGl0cycpOworICAgICAgICB0ZXN0VG91Y2hIaXQoJ3Rlc3QxJywgdGVz
dERpcmVjdFRvdWNoKTsKKyAgICAgICAgdGVzdFRvdWNoSGl0KCd0ZXN0MicsIHRlc3REaXJlY3RU
b3VjaCk7CisgICAgICAgIHRlc3RUb3VjaEhpdCgndGVzdDMnLCB0ZXN0RGlyZWN0VG91Y2gpOwor
ICAgICAgICB0ZXN0VG91Y2hNaXNzKCd0ZXN0NCcsIHRlc3REaXJlY3RUb3VjaCk7CisgICAgICAg
IHRlc3RUb3VjaEhpdCgndGVzdDUnLCB0ZXN0RGlyZWN0VG91Y2gpOworICAgIH0KKworICAgIGZ1
bmN0aW9uIHRlc3REaXJlY3RGYXRGaW5nZXJzKCkKKyAgICB7CisgICAgICAgIGRlYnVnKCdUZXN0
aW5nIGxhcmdlIGRpcmVjdCBoaXRzJyk7CisgICAgICAgIHRlc3RUb3VjaEhpdCgndGVzdDEnLCB0
ZXN0RGlyZWN0RmF0RmluZ2VyKTsKKyAgICAgICAgdGVzdFRvdWNoSGl0KCd0ZXN0MicsIHRlc3RE
aXJlY3RGYXRGaW5nZXIpOworICAgICAgICB0ZXN0VG91Y2hIaXQoJ3Rlc3QzJywgdGVzdERpcmVj
dEZhdEZpbmdlcik7CisgICAgICAgIHRlc3RUb3VjaE1pc3MoJ3Rlc3Q0JywgdGVzdERpcmVjdEZh
dEZpbmdlcik7CisgICAgICAgIHRlc3RUb3VjaEhpdCgndGVzdDUnLCB0ZXN0RGlyZWN0RmF0Rmlu
Z2VyKTsKKyAgICB9CisKKyAgICBmdW5jdGlvbiB0ZXN0SW5kaXJlY3RGYXRGaW5nZXJzKCkKKyAg
ICB7CisgICAgICAgIGRlYnVnKCdUZXN0aW5nIGxhcmdlIGRpcmVjdCBoaXRzJyk7CisgICAgICAg
IHRlc3RUb3VjaEhpdCgndGVzdDEnLCB0ZXN0SW5kaXJlY3RGYXRGaW5nZXIpOworICAgICAgICB0
ZXN0VG91Y2hIaXQoJ3Rlc3QyJywgdGVzdEluZGlyZWN0RmF0RmluZ2VyKTsKKyAgICAgICAgdGVz
dFRvdWNoSGl0KCd0ZXN0MycsIHRlc3RJbmRpcmVjdEZhdEZpbmdlcik7CisgICAgICAgIHRlc3RU
b3VjaE1pc3MoJ3Rlc3Q0JywgdGVzdEluZGlyZWN0RmF0RmluZ2VyKTsKKyAgICAgICAgdGVzdFRv
dWNoSGl0KCd0ZXN0NScsIHRlc3RJbmRpcmVjdEZhdEZpbmdlcik7CisgICAgfQorCisgICAgZnVu
Y3Rpb24gcnVuVGVzdHMoKQorICAgIHsKKyAgICAgICAgaWYgKHdpbmRvdy5sYXlvdXRUZXN0Q29u
dHJvbGxlciAmJiB3aW5kb3cuaW50ZXJuYWxzICYmIGludGVybmFscy50b3VjaE5vZGVBZGp1c3Rl
ZFRvQmVzdENsaWNrYWJsZU5vZGUpIHsKKyAgICAgICAgICAgIGRlc2NyaXB0aW9uKCdUZXN0IHZh
cmlvdXMgd2F5cyB0byB0cmlnZ2VyIGlucHV0LXdpZGdldHMuIE9uIGEgdG91Y2ggaW50ZXJmYWNl
LCBhbGwgdGhlIGFjdGlvbnMgc2hvdWxkIGJlIHRyaWdnZXJhYmxlIHdpdGggZWl0aGVyIGEgdG91
Y2ggZG93biBvciBhIHRvdWNoIHRhcC4nKTsKKyAgICAgICAgICAgIGxheW91dFRlc3RDb250cm9s
bGVyLmR1bXBBc1RleHQoKTsKKyAgICAgICAgICAgIGxheW91dFRlc3RDb250cm9sbGVyLndhaXRV
bnRpbERvbmUoKTsKKyAgICAgICAgICAgIHRlc3REaXJlY3RUb3VjaGVzKCk7CisgICAgICAgICAg
ICB0ZXN0RGlyZWN0RmF0RmluZ2VycygpOworICAgICAgICAgICAgdGVzdEluZGlyZWN0RmF0Rmlu
Z2VycygpOworICAgICAgICAgICAgaXNTdWNjZXNzZnVsbHlQYXJzZWQoKTsKKyAgICAgICAgICAg
IGxheW91dFRlc3RDb250cm9sbGVyLm5vdGlmeURvbmUoKTsKKyAgICAgICAgfQorICAgIH0KKzwv
c2NyaXB0PgorCis8c2NyaXB0PgorICAgIGZ1bmN0aW9uIHRyaWdnZXJJbnB1dCgpIHsKKyAgICAg
ICAgdmFyIGVsZW1lbnQgPSBldmVudC5zcmNFbGVtZW50OworICAgICAgICBpZiAoIWVsZW1lbnQu
b3BlbikgeworICAgICAgICAgICAgZWxlbWVudC5pbm5lckhUTUwgPSAnPGlucHV0IHR5cGU9dGV4
dCBzdHlsZT0id2lkdGg6IDEwMCUiPjwvaW5wdXQ+JworICAgICAgICAgICAgZWxlbWVudC5vcGVu
ID0gdHJ1ZTsKKyAgICAgICAgfQorICAgICAgICBlbGVtZW50LmZpcnN0Q2hpbGQuZm9jdXMoKTsK
KyAgICB9Cis8L3NjcmlwdD4KKworPGRpdiBpZD10ZXN0MSBjbGFzcz1ib3ggdGFiaW5kZXg9MSBv
bmZvY3VzPSd0cmlnZ2VySW5wdXQoKSc+CitGb2N1cyBoZXJlIHNob3VsZCBnaXZlIGEgdGV4dCBp
bnB1dC1maWVsZC4KKzwvZGl2PgorCis8ZGl2IGlkPXRlc3QyIGNsYXNzPWJveCBvbm1vdXNlb3Zl
cj0ndHJpZ2dlcklucHV0KCknPiAKK01vdXNlLW92ZXIgaGVyZSBzaG91bGQgZ2l2ZSBhIHRleHQg
aW5wdXQtZmllbGQuCis8L2Rpdj4KKworPHN0eWxlPgorICAgIC5ib3g6bm90KDpob3ZlcikgLmhv
dmVydHJpZ2dlcmVkIHsgdmlzaWJpbGl0eTogaGlkZGVuO30KKyAgICAuYm94OmhvdmVyIC5ob3Zl
cmZhbGxiYWNrIHsgZGlzcGxheTogbm9uZTsgfSAgCis8L3N0eWxlPgorCis8ZGl2IGlkPXRlc3Qz
IGNsYXNzPWJveD4gCisgICAgPHNwYW4gY2xhc3M9aG92ZXJmYWxsYmFjaz5Ib3ZlcmluZyBoZXJl
IHNob3VsZCBnaXZlIGEgdGV4dCBpbnB1dC1maWVsZC48L3NwYW4+CisgICAgPGlucHV0IHR5cGU9
dGV4dCBjbGFzcz1ob3ZlcnRyaWdnZXJlZD48L2lucHV0PgorPC9kaXY+CisKKzxkaXYgaWQ9dGVz
dDQgY2xhc3M9Ym94IG9uZm9jdXM9J3RyaWdnZXJJbnB1dCgpJz4KKyAgICA8c3BhbiB0YWJpbmRl
eD0xPiBGb2N1c2luZyBoZXJlIHNob3VsZCBvbmx5IGdpdmUgZm9jdXMgb3V0bGluZS4KKyAgICA8
L3NwYW4+Cis8L2Rpdj4KKworPGRpdiBpZD10ZXN0NSBjbGFzcz1ib3g+CisgICAgPHNwYW4gdGFi
aW5kZXg9MT4gRm9jdXNpbmcgaGVyZSBzaG91bGQgZ2l2ZSBhIHRleHQgaW5wdXQtZmllbGQuCisg
ICAgPC9zcGFuPgorPC9kaXY+CisKKzxzY3JpcHQ+CisgICAgdmFyIGVsZW1lbnQgPSBkb2N1bWVu
dC5nZXRFbGVtZW50QnlJZCgndGVzdDUnKTsKKyAgICBlbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIo
J0RPTUZvY3VzSW4nLCB0cmlnZ2VySW5wdXQsIGZhbHNlKTsKKzwvc2NyaXB0PgorCis8L2JvZHk+
Cis8L2h0bWw+CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy90b3VjaGFkanVzdG1lbnQvaHRtbC1s
YWJlbC1leHBlY3RlZC50eHQgYi9MYXlvdXRUZXN0cy90b3VjaGFkanVzdG1lbnQvaHRtbC1sYWJl
bC1leHBlY3RlZC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjk2OWZk
YgotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL3RvdWNoYWRqdXN0bWVudC9odG1sLWxh
YmVsLWV4cGVjdGVkLnR4dApAQCAtMCwwICsxLDIyIEBACitEbyBub3QgY2xpY2sgaGVyZQorQ2xp
Y2sgaGVyZSwgYnV0IG5vdCBoZXJlLiAKKworCisKK1Rlc3RzIGlmIGxhYmVscyBhcmUgdHJlYXRl
ZCBhcyBjbGlja2FibGUgaWYgdGhlIGlucHV0IHRoZXkgY29udHJvbCBpcy4KKworT24gc3VjY2Vz
cywgeW91IHdpbGwgc2VlIGEgc2VyaWVzIG9mICJQQVNTIiBtZXNzYWdlcywgZm9sbG93ZWQgYnkg
IlRFU1QgQ09NUExFVEUiLgorCisKK1Rlc3Rpbmcgc21hbGwgZGlyZWN0IGhpdHMuCitQQVNTIGFk
anVzdGVkTm9kZS5pZCBpcyAibXlsaW5rIgorUEFTUyBhZGp1c3RlZE5vZGUuaWQgaXMgIm15bGFi
ZWwiCitQQVNTIGFkanVzdGVkTm9kZS5pZCBpcyAibXlpbnB1dCIKK1Rlc3RpbmcgaW5kaXJlY3Qg
aGl0cy4KK1BBU1MgYWRqdXN0ZWROb2RlLmlkIGlzICJteWxpbmsiCitQQVNTIGFkanVzdGVkTm9k
ZS5pZCBpcyAibXlsYWJlbCIKK1BBU1MgYWRqdXN0ZWROb2RlLmlkIGlzICJteWlucHV0IgorUEFT
UyBzdWNjZXNzZnVsbHlQYXJzZWQgaXMgdHJ1ZQorCitURVNUIENPTVBMRVRFCisKZGlmZiAtLWdp
dCBhL0xheW91dFRlc3RzL3RvdWNoYWRqdXN0bWVudC9odG1sLWxhYmVsLmh0bWwgYi9MYXlvdXRU
ZXN0cy90b3VjaGFkanVzdG1lbnQvaHRtbC1sYWJlbC5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDAwMDAwMDAuLjFjMGNlN2QKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy90
b3VjaGFkanVzdG1lbnQvaHRtbC1sYWJlbC5odG1sCkBAIC0wLDAgKzEsMTA4IEBACis8aHRtbD4K
KzxoZWFkPgorPHNjcmlwdCBzcmM9Ii4uL2Zhc3QvanMvcmVzb3VyY2VzL2pzLXRlc3QtcHJlLmpz
Ij48L3NjcmlwdD4KKworPC9oZWFkPgorCis8Ym9keSBpZD0ibXlib2R5IiBvbmxvYWQ9InJ1blRl
c3RzKCkiPgorCis8YSBocmVmPSIjbXlmb3JtIiBpZD0ibXlsaW5rIj5EbyBub3QgY2xpY2sgaGVy
ZTwvYT48YnI+Cis8Zm9ybSBpZD0ibXlmb3JtIj4KKzxsYWJlbCBmb3I9Im15aW5wdXQiIGlkPSJt
eWxhYmVsIj5DbGljayBoZXJlLDwvbGFiZWw+Cis8c3BhbiBpZD0ibXlzcGFuIj5idXQgbm90IGhl
cmUuPC9zcGFuPgorPGlucHV0IHR5cGU9InRleHQiIGlkPSJteWlucHV0IiB2YWx1ZT0iVG8gZm9j
dXMgdGhpcy4iPjwvaW5wdXQ+Cis8L2Zvcm0+Cis8YnI+PGJyPjxicj4KKworPHAgaWQ9J2Rlc2Ny
aXB0aW9uJz48L3A+Cis8ZGl2IGlkPSdjb25zb2xlJz48L2Rpdj4KKworPHNjcmlwdD4KKyAgICB2
YXIgZWxlbWVudDsKKyAgICB2YXIgYWRqdXN0ZWROb2RlOworICAgIGZ1bmN0aW9uIGZpbmRBYnNv
bHV0ZVBvc2l0aW9uKG5vZGUpIHsKKyAgICAgICAgdmFyIHBvcyA9IG5ldyBPYmplY3QoKTsKKyAg
ICAgICAgcG9zLmxlZnQgPSAwOyBwb3MudG9wID0gMDsKKyAgICAgICAgZG8geworICAgICAgICAg
ICAgcG9zLmxlZnQgKz0gbm9kZS5vZmZzZXRMZWZ0OworICAgICAgICAgICAgcG9zLnRvcCArPSBu
b2RlLm9mZnNldFRvcDsKKyAgICAgICAgfSB3aGlsZSAobm9kZSA9IG5vZGUub2Zmc2V0UGFyZW50
KTsKKyAgICAgICAgcmV0dXJuIHBvczsKKyAgICB9CisKKyAgICBmdW5jdGlvbiB0ZXN0RGlyZWN0
VG91Y2goZWxlbWVudCkKKyAgICB7CisgICAgICAgIHZhciBwb3MgPSBmaW5kQWJzb2x1dGVQb3Np
dGlvbihlbGVtZW50KTsKKyAgICAgICAgdmFyIHggPSBwb3MubGVmdCArIGVsZW1lbnQuY2xpZW50
V2lkdGggLyAyIC0gMjA7CisgICAgICAgIHZhciB5ID0gcG9zLnRvcCArIGVsZW1lbnQuY2xpZW50
SGVpZ2h0IC8gMiAtIDMwOworICAgICAgICB2YXIgd2lkdGggPSA0MDsKKyAgICAgICAgdmFyIGhl
aWdodCA9IDYwOworICAgICAgICB2YXIgYWRqdXN0ZWROb2RlID0gaW50ZXJuYWxzLnRvdWNoTm9k
ZUFkanVzdGVkVG9CZXN0Q2xpY2thYmxlTm9kZSh4LCB5LCB3aWR0aCwgaGVpZ2h0LCBkb2N1bWVu
dCk7CisgICAgICAgIHdoaWxlIChhZGp1c3RlZE5vZGUubm9kZVR5cGUgIT0gMSkgLy8gTm90IGFu
IGVsZW1lbnQuCisgICAgICAgICAgICBhZGp1c3RlZE5vZGUgPSBhZGp1c3RlZE5vZGUucGFyZW50
Tm9kZTsKKyAgICAgICAgcmV0dXJuIGFkanVzdGVkTm9kZTsKKyAgICB9CisKKyAgICBmdW5jdGlv
biB0ZXN0SW5kaXJlY3RUb3VjaChlbGVtZW50KQorICAgIHsKKyAgICAgICAgLy8gVG91Y2gganVz
dCByaWdodCBvZiB0aGUgZWxlbWVudC4KKyAgICAgICAgdmFyIHBvcyA9IGZpbmRBYnNvbHV0ZVBv
c2l0aW9uKGVsZW1lbnQpOworICAgICAgICB2YXIgeCA9IHBvcy5sZWZ0ICsgZWxlbWVudC5jbGll
bnRXaWR0aCArIDEwIC0gMzA7CisgICAgICAgIHZhciB5ID0gcG9zLnRvcCArIGVsZW1lbnQuY2xp
ZW50SGVpZ2h0IC8gMiAtIDIwOworICAgICAgICB2YXIgd2lkdGggPSA2MDsKKyAgICAgICAgdmFy
IGhlaWdodCA9IDQwOworICAgICAgICB2YXIgYWRqdXN0ZWROb2RlID0gaW50ZXJuYWxzLnRvdWNo
Tm9kZUFkanVzdGVkVG9CZXN0Q2xpY2thYmxlTm9kZSh4LCB5LCB3aWR0aCwgaGVpZ2h0LCBkb2N1
bWVudCk7CisgICAgICAgIHdoaWxlIChhZGp1c3RlZE5vZGUubm9kZVR5cGUgIT0gMSApIC8vIE5v
dCBhbiBlbGVtZW50LgorICAgICAgICAgICAgYWRqdXN0ZWROb2RlID0gYWRqdXN0ZWROb2RlLnBh
cmVudE5vZGU7CisgICAgICAgIHJldHVybiBhZGp1c3RlZE5vZGU7CisgICAgfQorCisgICAgZnVu
Y3Rpb24gdGVzdERpcmVjdFRvdWNoZXMoKQorICAgIHsKKyAgICAgICAgZGVidWcoJ1Rlc3Rpbmcg
c21hbGwgZGlyZWN0IGhpdHMuJyk7CisKKyAgICAgICAgZWxlbWVudCA9IGRvY3VtZW50LmdldEVs
ZW1lbnRCeUlkKCdteWxpbmsnKTsKKyAgICAgICAgYWRqdXN0ZWROb2RlID0gdGVzdERpcmVjdFRv
dWNoKGVsZW1lbnQpOworICAgICAgICBzaG91bGRCZUVxdWFsVG9TdHJpbmcoJ2FkanVzdGVkTm9k
ZS5pZCcsICdteWxpbmsnKTsKKworICAgICAgICBlbGVtZW50ID0gZG9jdW1lbnQuZ2V0RWxlbWVu
dEJ5SWQoJ215bGFiZWwnKTsKKyAgICAgICAgYWRqdXN0ZWROb2RlID0gdGVzdERpcmVjdFRvdWNo
KGVsZW1lbnQpOworICAgICAgICBzaG91bGRCZUVxdWFsVG9TdHJpbmcoJ2FkanVzdGVkTm9kZS5p
ZCcsICdteWxhYmVsJyk7CisKKyAgICAgICAgZWxlbWVudCA9IGRvY3VtZW50LmdldEVsZW1lbnRC
eUlkKCdteWlucHV0Jyk7CisgICAgICAgIGFkanVzdGVkTm9kZSA9IHRlc3REaXJlY3RUb3VjaChl
bGVtZW50KTsKKyAgICAgICAgc2hvdWxkQmVFcXVhbFRvU3RyaW5nKCdhZGp1c3RlZE5vZGUuaWQn
LCAnbXlpbnB1dCcpOworICAgIH0KKworICAgIGZ1bmN0aW9uIHRlc3RJbmRpcmVjdFRvdWNoZXMo
KQorICAgIHsKKyAgICAgICAgZGVidWcoJ1Rlc3RpbmcgaW5kaXJlY3QgaGl0cy4nKTsKKworICAg
ICAgICBlbGVtZW50ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ215bGluaycpOworICAgICAg
ICBhZGp1c3RlZE5vZGUgPSB0ZXN0SW5kaXJlY3RUb3VjaChlbGVtZW50KTsKKyAgICAgICAgc2hv
dWxkQmVFcXVhbFRvU3RyaW5nKCdhZGp1c3RlZE5vZGUuaWQnLCAnbXlsaW5rJyk7CisKKyAgICAg
ICAgZWxlbWVudCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdteWxhYmVsJyk7CisgICAgICAg
IGFkanVzdGVkTm9kZSA9IHRlc3RJbmRpcmVjdFRvdWNoKGVsZW1lbnQpOworICAgICAgICBzaG91
bGRCZUVxdWFsVG9TdHJpbmcoJ2FkanVzdGVkTm9kZS5pZCcsICdteWxhYmVsJyk7CisKKyAgICAg
ICAgZWxlbWVudCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdteWlucHV0Jyk7CisgICAgICAg
IGFkanVzdGVkTm9kZSA9IHRlc3RJbmRpcmVjdFRvdWNoKGVsZW1lbnQpOworICAgICAgICBzaG91
bGRCZUVxdWFsVG9TdHJpbmcoJ2FkanVzdGVkTm9kZS5pZCcsICdteWlucHV0Jyk7CisgICAgfQor
CisgICAgZnVuY3Rpb24gcnVuVGVzdHMoKQorICAgIHsKKyAgICAgICAgaWYgKHdpbmRvdy5sYXlv
dXRUZXN0Q29udHJvbGxlciAmJiB3aW5kb3cuaW50ZXJuYWxzICYmIGludGVybmFscy50b3VjaE5v
ZGVBZGp1c3RlZFRvQmVzdENsaWNrYWJsZU5vZGUpIHsKKyAgICAgICAgICAgIGRlc2NyaXB0aW9u
KCdUZXN0cyBpZiBsYWJlbHMgYXJlIHRyZWF0ZWQgYXMgY2xpY2thYmxlIGlmIHRoZSBpbnB1dCB0
aGV5IGNvbnRyb2wgaXMuJyk7CisgICAgICAgICAgICBsYXlvdXRUZXN0Q29udHJvbGxlci5kdW1w
QXNUZXh0KCk7CisgICAgICAgICAgICBsYXlvdXRUZXN0Q29udHJvbGxlci53YWl0VW50aWxEb25l
KCk7CisgICAgICAgICAgICB0ZXN0RGlyZWN0VG91Y2hlcygpOworICAgICAgICAgICAgdGVzdElu
ZGlyZWN0VG91Y2hlcygpOworICAgICAgICAgICAgaXNTdWNjZXNzZnVsbHlQYXJzZWQoKTsKKyAg
ICAgICAgICAgIGxheW91dFRlc3RDb250cm9sbGVyLm5vdGlmeURvbmUoKTsKKyAgICAgICAgfQor
ICAgIH0KKzwvc2NyaXB0PgorPC9ib2R5PgorPC9odG1sPgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVz
dHMvdG91Y2hhZGp1c3RtZW50L25lc3RlZC10b3VjaC1leHBlY3RlZC50eHQgYi9MYXlvdXRUZXN0
cy90b3VjaGFkanVzdG1lbnQvbmVzdGVkLXRvdWNoLWV4cGVjdGVkLnR4dApuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwLi43M2Q3YzQwCi0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0
VGVzdHMvdG91Y2hhZGp1c3RtZW50L25lc3RlZC10b3VjaC1leHBlY3RlZC50eHQKQEAgLTAsMCAr
MSwxOCBAQAorQm94IHdpdGggYSBsb2NhbCBjbGljayBoYW5kbGVyLgorQm94IHdpdGhvdXQgYSBs
b2NhbCBjbGljayBoYW5kbGVyLgorVGVzdCB0aGUgY2FzZSB3aGVyZSBhIGNsaWNrYWJsZSB0YXJn
ZXQgaXMgbmVzdGVkIGluc2lkZSBhIGRvY3VtZW50IHRoYXQgaXMgbW9uaXRvcmluZyBjbGlja3Mu
IFRoZSB0YXJnZXQgd2l0aCB0aGUgbG9jYWwgZXZlbnQtaGFuZGxlciBzaG91bGQgYmUgY2hvc2Vu
IGlmIG11bHRpcGxlIHRhcmdldHMgYXJlIHRvdWNoZWQuCisKK09uIHN1Y2Nlc3MsIHlvdSB3aWxs
IHNlZSBhIHNlcmllcyBvZiAiUEFTUyIgbWVzc2FnZXMsIGZvbGxvd2VkIGJ5ICJURVNUIENPTVBM
RVRFIi4KKworCitUZXN0aW5nIHNtYWxsIGRpcmVjdCBoaXRzLgorUEFTUyBhZGp1c3RlZE5vZGUu
aWQgaXMgZWxlbWVudC5pZAorUEFTUyBhZGp1c3RlZE5vZGUuaWQgaXMgZWxlbWVudC5pZAorVGVz
dGluZyBwcmVmZXJlZCBoaXRzLgorUEFTUyBhZGp1c3RlZE5vZGUuaWQgaXMgZWxlbWVudDEuaWQK
K1BBU1MgYWRqdXN0ZWROb2RlLmlkIGlzIGVsZW1lbnQxLmlkCitQQVNTIGFkanVzdGVkTm9kZS5p
ZCBpcyBlbGVtZW50MS5pZAorUEFTUyBzdWNjZXNzZnVsbHlQYXJzZWQgaXMgdHJ1ZQorCitURVNU
IENPTVBMRVRFCisKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3RvdWNoYWRqdXN0bWVudC9uZXN0
ZWQtdG91Y2guaHRtbCBiL0xheW91dFRlc3RzL3RvdWNoYWRqdXN0bWVudC9uZXN0ZWQtdG91Y2gu
aHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44ZjZiZGNkCi0tLSAvZGV2
L251bGwKKysrIGIvTGF5b3V0VGVzdHMvdG91Y2hhZGp1c3RtZW50L25lc3RlZC10b3VjaC5odG1s
CkBAIC0wLDAgKzEsMTIwIEBACis8aHRtbD4KKzxoZWFkPgorPHN0eWxlPgorICAgIC5ib3ggeyBi
b3JkZXI6IDFweCBzb2xpZCBibGFjazsgYm9yZGVyLXJhZGl1czogNXB4IDVweDsgbWFyZ2luOiAx
ZW07IG1heC13aWR0aDogNDBlbTsgfQorPC9zdHlsZT4KKzxzY3JpcHQgc3JjPSIuLi9mYXN0L2pz
L3Jlc291cmNlcy9qcy10ZXN0LXByZS5qcyI+PC9zY3JpcHQ+CisKKzwvaGVhZD4KKworPGJvZHkg
b25sb2FkPSJydW5UZXN0cygpIj4KKworPGRpdiBjbGFzcz1ib3ggaWQ9bXlib3gxPgorQm94IHdp
dGggYSBsb2NhbCBjbGljayBoYW5kbGVyLgorPC9kaXY+CisKKzxkaXYgY2xhc3M9Ym94IGlkPW15
Ym94Mj4gCitCb3ggd2l0aG91dCBhIGxvY2FsIGNsaWNrIGhhbmRsZXIuCis8L2Rpdj4KKworPHNj
cmlwdD4KKyAgZnVuY3Rpb24gbW9uaXRvcihlKSB7IGFsZXJ0KGUudGFyZ2V0ICsoIGUudGFyZ2V0
LmlkID8gKCAnICMnICsgZS50YXJnZXQuaWQpIDogJycpKTsgfTsKKyAgZnVuY3Rpb24gZG9Tb21l
dGhpbmcoZSkge307CisKKyAgdmFyIGVsZW1lbnQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgn
bXlib3gxJyk7CisgIGVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCBkb1NvbWV0aGlu
ZywgZmFsc2UpOworICBlbGVtZW50ID0gZG9jdW1lbnQuYm9keTsKKyAgZWxlbWVudC5hZGRFdmVu
dExpc3RlbmVyKCdjbGljaycsIG1vbml0b3IsIGZhbHNlKTsKKzwvc2NyaXB0PgorCisKKzxwIGlk
PSdkZXNjcmlwdGlvbic+PC9wPgorPGRpdiBpZD0nY29uc29sZSc+PC9kaXY+CisKKzxzY3JpcHQ+
CisgICAgdmFyIGVsZW1lbnQ7CisgICAgdmFyIGFkanVzdGVkTm9kZTsKKyAgICBmdW5jdGlvbiBm
aW5kQWJzb2x1dGVQb3NpdGlvbihub2RlKSB7CisgICAgICAgIHZhciBwb3MgPSBuZXcgT2JqZWN0
KCk7CisgICAgICAgIHBvcy5sZWZ0ID0gMDsgcG9zLnRvcCA9IDA7CisgICAgICAgIGRvIHsKKyAg
ICAgICAgICAgIHBvcy5sZWZ0ICs9IG5vZGUub2Zmc2V0TGVmdDsKKyAgICAgICAgICAgIHBvcy50
b3AgKz0gbm9kZS5vZmZzZXRUb3A7CisgICAgICAgIH0gd2hpbGUgKG5vZGUgPSBub2RlLm9mZnNl
dFBhcmVudCk7CisgICAgICAgIHJldHVybiBwb3M7CisgICAgfQorCisgICAgZnVuY3Rpb24gdGVz
dERpcmVjdFRvdWNoKGVsZW1lbnQpCisgICAgeworICAgICAgICB2YXIgcG9zID0gZmluZEFic29s
dXRlUG9zaXRpb24oZWxlbWVudCk7CisgICAgICAgIHZhciB4ID0gcG9zLmxlZnQgKyBlbGVtZW50
LmNsaWVudFdpZHRoIC8gMiAtIDE7CisgICAgICAgIHZhciB5ID0gcG9zLnRvcCArIGVsZW1lbnQu
Y2xpZW50SGVpZ2h0IC8gMiAtIDE7CisgICAgICAgIHZhciB3aWR0aCA9IDM7CisgICAgICAgIHZh
ciBoZWlnaHQgPSAzOworICAgICAgICB2YXIgYWRqdXN0ZWROb2RlID0gaW50ZXJuYWxzLnRvdWNo
Tm9kZUFkanVzdGVkVG9CZXN0Q2xpY2thYmxlTm9kZSh4LCB5LCB3aWR0aCwgaGVpZ2h0LCBkb2N1
bWVudCk7CisgICAgICAgIGlmIChhZGp1c3RlZE5vZGUubm9kZVR5cGUgPT0gMykgLy8gVEVYVCBu
b2RlCisgICAgICAgICAgICBhZGp1c3RlZE5vZGUgPSBhZGp1c3RlZE5vZGUucGFyZW50Tm9kZTsK
KyAgICAgICAgcmV0dXJuIGFkanVzdGVkTm9kZTsKKyAgICB9CisKKyAgICBmdW5jdGlvbiB0ZXN0
RG91YmxlVG91Y2goZWxlbWVudDEsIGVsZW1lbnQyLCBvZmZzZXQpCisgICAgeworICAgICAgICB2
YXIgcG9zMSA9IGZpbmRBYnNvbHV0ZVBvc2l0aW9uKGVsZW1lbnQxKTsKKyAgICAgICAgdmFyIHBv
czIgPSBmaW5kQWJzb2x1dGVQb3NpdGlvbihlbGVtZW50Mik7CisgICAgICAgIC8vIFdlIGFzc3Vt
ZSB0aGUgZWxlbWVudHMgaGF2ZSB0aGUgc2FtZSB4IGNvb3JkIGFuZCB3aWR0aC4KKyAgICAgICAg
dmFyIHggPSBwb3MxLmxlZnQgKyBlbGVtZW50MS5jbGllbnRXaWR0aC8yIC0gMTsKKyAgICAgICAg
dmFyIHkxID0gcG9zMS50b3AgKyBlbGVtZW50MS5jbGllbnRIZWlnaHQvMiArIDE7CisgICAgICAg
IHZhciB5MiA9IHBvczIudG9wICsgZWxlbWVudDIuY2xpZW50SGVpZ2h0LzIgLSAxOworICAgICAg
ICB2YXIgd2lkdGggPSB5MiAtIHkxOworICAgICAgICB2YXIgaGVpZ2h0ID0geTIgLSB5MTsKKyAg
ICAgICAgdmFyIGFkanVzdGVkTm9kZSA9IGludGVybmFscy50b3VjaE5vZGVBZGp1c3RlZFRvQmVz
dENsaWNrYWJsZU5vZGUoeCwgeTEsIHdpZHRoLCBoZWlnaHQsIGRvY3VtZW50KTsKKyAgICAgICAg
aWYgKGFkanVzdGVkTm9kZS5ub2RlVHlwZSA9PSAzKSAvLyBURVhUIG5vZGUKKyAgICAgICAgICAg
IGFkanVzdGVkTm9kZSA9IGFkanVzdGVkTm9kZS5wYXJlbnROb2RlOworICAgICAgICByZXR1cm4g
YWRqdXN0ZWROb2RlOworICAgIH0KKworICAgIGZ1bmN0aW9uIHRlc3REaXJlY3RUb3VjaGVzKCkK
KyAgICB7CisgICAgICAgIGRlYnVnKCdUZXN0aW5nIHNtYWxsIGRpcmVjdCBoaXRzLicpOworCisg
ICAgICAgIGVsZW1lbnQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbXlib3gxJyk7CisgICAg
ICAgIGFkanVzdGVkTm9kZSA9IHRlc3REaXJlY3RUb3VjaChlbGVtZW50KTsKKyAgICAgICAgc2hv
dWxkQmUoJ2FkanVzdGVkTm9kZS5pZCcsICdlbGVtZW50LmlkJyk7CisKKyAgICAgICAgZWxlbWVu
dCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdteWJveDInKTsKKyAgICAgICAgYWRqdXN0ZWRO
b2RlID0gdGVzdERpcmVjdFRvdWNoKGVsZW1lbnQpOworICAgICAgICBzaG91bGRCZSgnYWRqdXN0
ZWROb2RlLmlkJywgJ2VsZW1lbnQuaWQnKTsKKyAgICB9CisKKyAgICBmdW5jdGlvbiB0ZXN0UHJl
ZmVyZWRUb3VjaCgpCisgICAgeworICAgICAgICBkZWJ1ZygnVGVzdGluZyBwcmVmZXJlZCBoaXRz
LicpOworCisgICAgICAgIGVsZW1lbnQxID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ215Ym94
MScpOworICAgICAgICBlbGVtZW50MiA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdteWJveDIn
KTsKKyAgICAgICAgYWRqdXN0ZWROb2RlID0gdGVzdERvdWJsZVRvdWNoKGVsZW1lbnQxLCBlbGVt
ZW50MiwgMCk7CisgICAgICAgIHNob3VsZEJlKCdhZGp1c3RlZE5vZGUuaWQnLCAnZWxlbWVudDEu
aWQnKTsKKworICAgICAgICAvLyBGaXJzdCB0ZXN0IHdhcyBjZW50ZXJlZCwgbm93IG1vdmUgdGhl
IHRlc3QgY2xvc2VyIHRvIHRoZSB3cm9uZyBub2RlLCBhbmQgZW5zdXJlIHdlIHN0aWxsIGdldCB0
aGUgcHJlZmVyZWQgbm9kZS4KKyAgICAgICAgYWRqdXN0ZWROb2RlID0gdGVzdERvdWJsZVRvdWNo
KGVsZW1lbnQxLCBlbGVtZW50MiwgNSk7CisgICAgICAgIHNob3VsZEJlKCdhZGp1c3RlZE5vZGUu
aWQnLCAnZWxlbWVudDEuaWQnKTsKKworICAgICAgICBhZGp1c3RlZE5vZGUgPSB0ZXN0RG91Ymxl
VG91Y2goZWxlbWVudDEsIGVsZW1lbnQyLCAxMCk7CisgICAgICAgIHNob3VsZEJlKCdhZGp1c3Rl
ZE5vZGUuaWQnLCAnZWxlbWVudDEuaWQnKTsKKyAgICB9CisKKyAgICBmdW5jdGlvbiBydW5UZXN0
cygpCisgICAgeworICAgICAgICBpZiAod2luZG93LmxheW91dFRlc3RDb250cm9sbGVyICYmIHdp
bmRvdy5pbnRlcm5hbHMgJiYgaW50ZXJuYWxzLnRvdWNoTm9kZUFkanVzdGVkVG9CZXN0Q2xpY2th
YmxlTm9kZSkgeworICAgICAgICAgICAgZGVzY3JpcHRpb24oJ1Rlc3QgdGhlIGNhc2Ugd2hlcmUg
YSBjbGlja2FibGUgdGFyZ2V0IGlzIG5lc3RlZCBpbnNpZGUgYSBkb2N1bWVudCB0aGF0IGlzIG1v
bml0b3JpbmcgY2xpY2tzLiBUaGUgdGFyZ2V0IHdpdGggdGhlIGxvY2FsIGV2ZW50LWhhbmRsZXIg
c2hvdWxkIGJlIGNob3NlbiBpZiBtdWx0aXBsZSB0YXJnZXRzIGFyZSB0b3VjaGVkLicpOworICAg
ICAgICAgICAgbGF5b3V0VGVzdENvbnRyb2xsZXIuZHVtcEFzVGV4dCgpOworICAgICAgICAgICAg
bGF5b3V0VGVzdENvbnRyb2xsZXIud2FpdFVudGlsRG9uZSgpOworICAgICAgICAgICAgdGVzdERp
cmVjdFRvdWNoZXMoKTsKKyAgICAgICAgICAgIHRlc3RQcmVmZXJlZFRvdWNoKCk7CisgICAgICAg
ICAgICBpc1N1Y2Nlc3NmdWxseVBhcnNlZCgpOworICAgICAgICAgICAgbGF5b3V0VGVzdENvbnRy
b2xsZXIubm90aWZ5RG9uZSgpOworICAgICAgICB9CisgICAgfQorPC9zY3JpcHQ+Cis8L2JvZHk+
Cis8L2h0bWw+CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy90b3VjaGFkanVzdG1lbnQvdG91Y2gt
aW5saW5lcy1leHBlY3RlZC50eHQgYi9MYXlvdXRUZXN0cy90b3VjaGFkanVzdG1lbnQvdG91Y2gt
aW5saW5lcy1leHBlY3RlZC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4u
OTc0YWQ4MgotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL3RvdWNoYWRqdXN0bWVudC90
b3VjaC1pbmxpbmVzLWV4cGVjdGVkLnR4dApAQCAtMCwwICsxLDI5IEBACitzb21lIGxpbmsKK3Nv
bWUgbGluayBicmVha2luZyBsaW5lcyBhbmQgbGluaworaG9sYSBtdW5kbyEgYSBzcGxpdCB1cCBs
aW5rCitoZWxsbyB3b3JsZCBzb21lIGxpbmsgYWxzbyBicmVha2luZworaGkgdGhlcmUgc29tZSBs
aW5rIHRoYXQgaXMgYnJlYWtpbmcgbXVsdGlwbGUgbGluZXMganVzdCBmb3IgdGhlIHZlcnkgZnVu
IG9mIGl0CisKK1Rlc3QgdG91Y2gtYWRqdXN0bWVudCBvbiBpbmxpbmUgbGlua3MuIE1ha2luZyBz
dXJlIHdlIGNhbiBoaXQgb3ZlciBsaW5lLWJyZWFrcywgYW5kIGNhbiBtaXNzIHdoZW4gdGFwcGlu
ZyBiZXR3ZWVuIHBhcnRzIG9mIGEgbGluZS1icm9rZW4gbGluay4KKworT24gc3VjY2VzcywgeW91
IHdpbGwgc2VlIGEgc2VyaWVzIG9mICJQQVNTIiBtZXNzYWdlcywgZm9sbG93ZWQgYnkgIlRFU1Qg
Q09NUExFVEUiLgorCisKK1Rlc3Qgc29tZSBkaXJlY3QgaGl0cy4KK1BBU1MgYWRqdXN0ZWROb2Rl
LmlkIGlzICIxIgorUEFTUyBhZGp1c3RlZE5vZGUuaWQgaXMgIjIiCitQQVNTIGFkanVzdGVkTm9k
ZS5pZCBpcyAiNCIKK1BBU1MgYWRqdXN0ZWROb2RlLmlkIGlzICI2IgorVGVzdCBhIGZldyBkaXJl
Y3QgbWlzc2VzLgorUEFTUyBhZGp1c3RlZE5vZGUuaWQgaXMgIiIKK1BBU1MgYWRqdXN0ZWROb2Rl
LmlkIGlzICIiCitUZXN0IHNvbWUgaW4tZGlyZWN0IGhpdHMuCitQQVNTIGFkanVzdGVkTm9kZS5p
ZCBpcyAiMiIKK1BBU1MgYWRqdXN0ZWROb2RlLmlkIGlzICIzIgorUEFTUyBhZGp1c3RlZE5vZGUu
aWQgaXMgIjQiCitQQVNTIGFkanVzdGVkTm9kZS5pZCBpcyAiNCIKK1BBU1MgYWRqdXN0ZWROb2Rl
LmlkIGlzICI2IgorUEFTUyBzdWNjZXNzZnVsbHlQYXJzZWQgaXMgdHJ1ZQorCitURVNUIENPTVBM
RVRFCisKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3RvdWNoYWRqdXN0bWVudC90b3VjaC1pbmxp
bmVzLmh0bWwgYi9MYXlvdXRUZXN0cy90b3VjaGFkanVzdG1lbnQvdG91Y2gtaW5saW5lcy5odG1s
Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU5OTgwNGIKLS0tIC9kZXYvbnVs
bAorKysgYi9MYXlvdXRUZXN0cy90b3VjaGFkanVzdG1lbnQvdG91Y2gtaW5saW5lcy5odG1sCkBA
IC0wLDAgKzEsOTkgQEAKKzxodG1sPgorPGhlYWQ+CisgICAgPHNjcmlwdCBzcmM9Ii4uL2Zhc3Qv
anMvcmVzb3VyY2VzL2pzLXRlc3QtcHJlLmpzIj48L3NjcmlwdD4KKzwvaGVhZD4KKzxib2R5IG9u
bG9hZD0icnVuVGVzdHMoKSI+CisKKzxwIHN0eWxlPSJ3aWR0aDogMTBlbTsiPgorPGEgaWQ9IjEi
IGhyZWY9IiMxIj5zb21lIGxpbms8L2E+PGJyPgorPGEgaWQ9IjIiIGhyZWY9IiMyIj5zb21lIGxp
bmsgYnJlYWtpbmcgbGluZXM8L2E+IGFuZCA8YSBpZD0iMyIgaHJlZj0iIzMiPmxpbms8L2E+PGJy
PgoraG9sYSBtdW5kbyEgPGEgaWQ9IjQiIGhyZWY9IiM0Ij5hIHNwbGl0IHVwIGxpbms8L2E+PGJy
PgoraGVsbG8gd29ybGQgPGEgaWQ9IjUiIGhyZWY9IiM1Ij5zb21lIGxpbmsgYWxzbyBicmVha2lu
ZzwvYT48YnI+CitoaSB0aGVyZSA8YSBpZD0iNiIgaHJlZj0iIzYiPnNvbWUgbGluayB0aGF0IGlz
IGJyZWFraW5nIG11bHRpcGxlIGxpbmVzIGp1c3QgZm9yIHRoZSB2ZXJ5IGZ1biBvZiBpdDwvYT48
YnI+PGJyPgorPC9wPgorCisKKzxwIGlkPSdkZXNjcmlwdGlvbic+PC9wPgorPGRpdiBpZD0nY29u
c29sZSc+PC9kaXY+CisKKzxzY3JpcHQ+CisgICAgdmFyIGVsZW1lbnQ7CisgICAgdmFyIGFkanVz
dGVkTm9kZTsKKyAgICBmdW5jdGlvbiB0ZXN0Um91bmRUb3VjaCh4LCB5LCByYWRpdXMpCisgICAg
eworICAgICAgICB2YXIgeCA9IHggLSByYWRpdXM7CisgICAgICAgIHZhciB5ID0geSAtIHJhZGl1
czsKKyAgICAgICAgdmFyIHdpZHRoID0gcmFkaXVzICogMjsKKyAgICAgICAgdmFyIGhlaWdodCA9
IHJhZGl1cyAqIDI7CisgICAgICAgIHZhciBhZGp1c3RlZE5vZGUgPSBpbnRlcm5hbHMudG91Y2hO
b2RlQWRqdXN0ZWRUb0Jlc3RDbGlja2FibGVOb2RlKHgsIHksIHdpZHRoLCBoZWlnaHQsIGRvY3Vt
ZW50KTsKKyAgICAgICAgaWYgKGFkanVzdGVkTm9kZS5ub2RlVHlwZSA9PSAzKSAvLyBURVhUIG5v
ZGUKKyAgICAgICAgICAgIGFkanVzdGVkTm9kZSA9IGFkanVzdGVkTm9kZS5wYXJlbnROb2RlOwor
ICAgICAgICByZXR1cm4gYWRqdXN0ZWROb2RlOworICAgIH0KKworICAgIGZ1bmN0aW9uIHRlc3RE
aXJlY3RUb3VjaGVzKCkKKyAgICB7CisgICAgICAgIGRlYnVnKCdUZXN0IHNvbWUgZGlyZWN0IGhp
dHMuJyk7CisKKyAgICAgICAgYWRqdXN0ZWROb2RlID0gdGVzdFJvdW5kVG91Y2goMzAsIDIwLCA4
KQorICAgICAgICBzaG91bGRCZUVxdWFsVG9TdHJpbmcoJ2FkanVzdGVkTm9kZS5pZCcsICcxJyk7
CisKKyAgICAgICAgYWRqdXN0ZWROb2RlID0gdGVzdFJvdW5kVG91Y2goMzAsIDYwLCA4KQorICAg
ICAgICBzaG91bGRCZUVxdWFsVG9TdHJpbmcoJ2FkanVzdGVkTm9kZS5pZCcsICcyJyk7CisKKyAg
ICAgICAgYWRqdXN0ZWROb2RlID0gdGVzdFJvdW5kVG91Y2goMTIwLCA4MCwgOCkKKyAgICAgICAg
c2hvdWxkQmVFcXVhbFRvU3RyaW5nKCdhZGp1c3RlZE5vZGUuaWQnLCAnNCcpOworCisgICAgICAg
IGFkanVzdGVkTm9kZSA9IHRlc3RSb3VuZFRvdWNoKDgwLCAxODAsIDgpCisgICAgICAgIHNob3Vs
ZEJlRXF1YWxUb1N0cmluZygnYWRqdXN0ZWROb2RlLmlkJywgJzYnKTsKKyAgICB9CisKKyAgICBm
dW5jdGlvbiB0ZXN0RGlyZWN0TWlzc2VzKCkKKyAgICB7CisgICAgICAgIGRlYnVnKCdUZXN0IGEg
ZmV3IGRpcmVjdCBtaXNzZXMuJyk7CisKKyAgICAgICAgYWRqdXN0ZWROb2RlID0gdGVzdFJvdW5k
VG91Y2goNTYsIDYwLCA4KQorICAgICAgICBzaG91bGRCZUVxdWFsVG9TdHJpbmcoJ2FkanVzdGVk
Tm9kZS5pZCcsICcnKTsKKworICAgICAgICBhZGp1c3RlZE5vZGUgPSB0ZXN0Um91bmRUb3VjaCgy
MCwgMTYwLCA0KQorICAgICAgICBzaG91bGRCZUVxdWFsVG9TdHJpbmcoJ2FkanVzdGVkTm9kZS5p
ZCcsICcnKTsKKworICAgIH0KKworICAgIGZ1bmN0aW9uIHRlc3RJbmRpcmVjdFRvdWNoZXMoKQor
ICAgIHsKKyAgICAgICAgZGVidWcoJ1Rlc3Qgc29tZSBpbi1kaXJlY3QgaGl0cy4nKTsKKworICAg
ICAgICBhZGp1c3RlZE5vZGUgPSB0ZXN0Um91bmRUb3VjaCg1NiwgNjAsIDIwKQorICAgICAgICBz
aG91bGRCZUVxdWFsVG9TdHJpbmcoJ2FkanVzdGVkTm9kZS5pZCcsICcyJyk7CisKKyAgICAgICAg
YWRqdXN0ZWROb2RlID0gdGVzdFJvdW5kVG91Y2goODUsIDgwLCAyMCkKKyAgICAgICAgc2hvdWxk
QmVFcXVhbFRvU3RyaW5nKCdhZGp1c3RlZE5vZGUuaWQnLCAnMycpOworCisgICAgICAgIGFkanVz
dGVkTm9kZSA9IHRlc3RSb3VuZFRvdWNoKDEyMCwgNjAsIDIwKQorICAgICAgICBzaG91bGRCZUVx
dWFsVG9TdHJpbmcoJ2FkanVzdGVkTm9kZS5pZCcsICc0Jyk7CisKKyAgICAgICAgYWRqdXN0ZWRO
b2RlID0gdGVzdFJvdW5kVG91Y2goNDAsIDEwMCwgMjApCisgICAgICAgIHNob3VsZEJlRXF1YWxU
b1N0cmluZygnYWRqdXN0ZWROb2RlLmlkJywgJzQnKTsKKworICAgICAgICBhZGp1c3RlZE5vZGUg
PSB0ZXN0Um91bmRUb3VjaCgyMCwgMTY1LCAyMCkKKyAgICAgICAgc2hvdWxkQmVFcXVhbFRvU3Ry
aW5nKCdhZGp1c3RlZE5vZGUuaWQnLCAnNicpOworCisgICAgfQorCisgICAgZnVuY3Rpb24gcnVu
VGVzdHMoKQorICAgIHsKKyAgICAgICAgaWYgKHdpbmRvdy5sYXlvdXRUZXN0Q29udHJvbGxlciAm
JiB3aW5kb3cuaW50ZXJuYWxzICYmIGludGVybmFscy50b3VjaE5vZGVBZGp1c3RlZFRvQmVzdENs
aWNrYWJsZU5vZGUpIHsKKyAgICAgICAgICAgIGRlc2NyaXB0aW9uKCdUZXN0IHRvdWNoLWFkanVz
dG1lbnQgb24gaW5saW5lIGxpbmtzLiBNYWtpbmcgc3VyZSB3ZSBjYW4gaGl0IG92ZXIgbGluZS1i
cmVha3MsIGFuZCBjYW4gbWlzcyB3aGVuIHRhcHBpbmcgYmV0d2VlbiBwYXJ0cyBvZiBhIGxpbmUt
YnJva2VuIGxpbmsuJyk7CisgICAgICAgICAgICBsYXlvdXRUZXN0Q29udHJvbGxlci5kdW1wQXNU
ZXh0KCk7CisgICAgICAgICAgICBsYXlvdXRUZXN0Q29udHJvbGxlci53YWl0VW50aWxEb25lKCk7
CisgICAgICAgICAgICB0ZXN0RGlyZWN0VG91Y2hlcygpOworICAgICAgICAgICAgdGVzdERpcmVj
dE1pc3NlcygpOworICAgICAgICAgICAgdGVzdEluZGlyZWN0VG91Y2hlcygpOworICAgICAgICAg
ICAgaXNTdWNjZXNzZnVsbHlQYXJzZWQoKTsKKyAgICAgICAgICAgIGxheW91dFRlc3RDb250cm9s
bGVyLm5vdGlmeURvbmUoKTsKKyAgICAgICAgfQorICAgIH0KKzwvc2NyaXB0PgorPC9ib2R5Pgor
PC9odG1sPgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nIGIvU291cmNlL1dl
YkNvcmUvQ2hhbmdlTG9nCmluZGV4IGU3OWVmOWQuLjNmOWUxNDYgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSw2MiBAQAorMjAxMi0wMy0xMiAgQWxsYW4gU2FuZGZlbGQgSmVuc2VuICA8YWxsYW4uamVu
c2VuQG5va2lhLmNvbT4KKworICAgICAgICBTZWxlY3QgYmVzdCB0YXJnZXQgZm9yIHRhcCBnZXN0
dXJlLgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9Nzg4
MDEKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKyAgICAgICAgSW50UmVj
dCBjaGFuZ2VzIHJldmlld2VkIGJ5IERhdmUgSHlhdHQuCisKKyAgICAgICAgVGhlIG5ldyBBUEkg
aXMgYXZhaWxhYmxlIHRocm91Z2ggRXZlbnRIYW5kbGVyOjpiZXN0Q2xpY2thYmxlTm9kZUZvclRv
dWNoUG9pbnQsIGJ1dAorICAgICAgICBpbXBsZW1lbnRhdGlvbiBkZXRhaWxzIGhhdmUgYmVlbiBw
bGFjZWQgaW4gcGFnZS9Ub3VjaEFkanVzdG1lbnQuCisKKyAgICAgICAgVGhlIGRlZmF1bHQgaGl0
IGRldGVjdGlvbiBpcyBwZXJmb3JtZWQgYnkgbWVhc3VyaW5nIHRoZSBkaXN0YW5jZSB0byB0aGUg
Y2VudGVyCisgICAgICAgIGxpbmVzIG9mIHRoZSBhYnNvbHV0ZSByZWN0cyBvZiB0aGUgaGl0IG5v
ZGVzLiBBYnNvbHV0ZSByZWN0cyBhcmUgdXNlZCBpbnN0ZWFkCisgICAgICAgIG9mIGJvdW5kaW5n
IHJlY3RzIHRvIG1ha2UgaGl0LWRldGVjdGluZyBhZ2FpbnN0IGxpbmtzIG92ZXIgbGluZSBicmVh
a3MuIERpc3RhbmNlCisgICAgICAgIHRvIGNlbnRlciBsaW5lIGlzIHVzZWQgdG8gbWFrZSBpdCBl
YXNpZXIgdG8gaGl0IHNtYWxsIGxpbmtzIG5leHQgdG8gbGFyZ2UgbGlua3MuCisgICAgICAgIEZv
ciBsaW5lLXJlY3RzIHRoZSBkaXN0YW5jZSB0byB0aGUgY2VudGVyLWxpbmUgaXMgYSBiZXR0ZXIg
ZXhwcmVzc2lvbiBvZiB0aGUgZGlzdGFuY2UKKyAgICAgICAgdG8gYSByZWN0YW5nbGVzIGNlbnRl
ciB0aGFuIHRoZSBkaXN0YW5jZSB0byB0aGUgY2VudGVyLXBvaW50LgorCisgICAgICAgIFRlc3Rz
OiB0b3VjaGFkanVzdG1lbnQvZXZlbnQtdHJpZ2dlcmVkLXdpZGdldHMuaHRtbAorICAgICAgICAg
ICAgICAgdG91Y2hhZGp1c3RtZW50L2h0bWwtbGFiZWwuaHRtbAorICAgICAgICAgICAgICAgdG91
Y2hhZGp1c3RtZW50L25lc3RlZC10b3VjaC5odG1sCisgICAgICAgICAgICAgICB0b3VjaGFkanVz
dG1lbnQvdG91Y2gtaW5saW5lcy5odG1sCisKKyAgICAgICAgKiBUYXJnZXQucHJpOgorICAgICAg
ICAqIHBhZ2UvRXZlbnRIYW5kbGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkV2ZW50SGFuZGxl
cjo6aGFuZGxlR2VzdHVyZVRhcCk6CisgICAgICAgIChXZWJDb3JlOjpFdmVudEhhbmRsZXI6OmJl
c3RDbGlja2FibGVOb2RlRm9yVG91Y2hQb2ludCk6CisgICAgICAgICogcGFnZS9FdmVudEhhbmRs
ZXIuaDoKKyAgICAgICAgKiBwYWdlL1RvdWNoQWRqdXN0bWVudC5jcHA6IEFkZGVkLgorICAgICAg
ICAoV2ViQ29yZTo6VG91Y2hBZGp1c3RtZW50OjpRdWFkRm9ySGl0VGVzdDo6UXVhZEZvckhpdFRl
c3QpOgorICAgICAgICAoV2ViQ29yZTo6VG91Y2hBZGp1c3RtZW50OjpRdWFkRm9ySGl0VGVzdDo6
bm9kZSk6CisgICAgICAgIChXZWJDb3JlOjpUb3VjaEFkanVzdG1lbnQ6OlF1YWRGb3JIaXRUZXN0
OjpxdWFkKToKKyAgICAgICAgKFdlYkNvcmU6OlRvdWNoQWRqdXN0bWVudDo6UXVhZEZvckhpdFRl
c3Q6OmJvdW5kaW5nQm94KToKKyAgICAgICAgKFdlYkNvcmU6OlRvdWNoQWRqdXN0bWVudDo6bm9k
ZVJlc3BvbmRzVG9UYXBHZXN0dXJlKToKKyAgICAgICAgKFdlYkNvcmU6OlRvdWNoQWRqdXN0bWVu
dDo6YXBwZW5kQWJzb2x1dGVRdWFkc0Zvck5vZGVUb0hpdFRlc3RMaXN0KToKKyAgICAgICAgKFdl
YkNvcmU6OlRvdWNoQWRqdXN0bWVudDo6Y29tcGlsZVF1YWRzRm9ySGl0VGVzdGluZyk6CisgICAg
ICAgIChXZWJDb3JlOjpUb3VjaEFkanVzdG1lbnQ6OmRpc3RhbmNlU3F1YXJlZFRvUXVhZENlbnRl
ckxpbmUpOgorICAgICAgICAoV2ViQ29yZTo6VG91Y2hBZGp1c3RtZW50OjpmaW5kTm9kZVdpdGhM
b3dlc3RNZXRyaWMpOgorICAgICAgICAoV2ViQ29yZTo6ZmluZEJlc3RDbGlja2FibGVDYW5kaWRh
dGUpOgorICAgICAgICAqIHBhZ2UvVG91Y2hBZGp1c3RtZW50Lmg6IEFkZGVkLgorICAgICAgICAq
IHBsYXRmb3JtL2dyYXBoaWNzL0Zsb2F0UXVhZC5oOgorICAgICAgICAoV2ViQ29yZTo6RmxvYXRR
dWFkOjpjZW50ZXIpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0ludFBvaW50Lmg6Cisg
ICAgICAgIChXZWJDb3JlOjpJbnRQb2ludDo6ZGlzdGFuY2VTcXVhcmVkVG9Qb2ludCk6CisgICAg
ICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvSW50UmVjdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpk
aXN0YW5jZVRvSW50ZXJ2YWwpOgorICAgICAgICAoV2ViQ29yZTo6SW50UmVjdDo6ZGlmZmVyZW5j
ZVRvUG9pbnQpOgorICAgICAgICAoV2ViQ29yZTo6SW50UmVjdDo6ZGlmZmVyZW5jZUZyb21DZW50
ZXJMaW5lVG9Qb2ludCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvSW50UmVjdC5oOgor
ICAgICAgICAoV2ViQ29yZTo6SW50UmVjdDo6ZGlzdGFuY2VTcXVhcmVkVG9Qb2ludCk6CisgICAg
ICAgIChXZWJDb3JlOjpJbnRSZWN0OjpkaXN0YW5jZVNxdWFyZWRGcm9tQ2VudGVyTGluZVRvUG9p
bnQpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0ludFNpemUuaDoKKyAgICAgICAgKFdl
YkNvcmU6OkludFNpemU6OmRpYWdvbmFsTGVuZ3RoU3F1YXJlZCk6CisgICAgICAgICogdGVzdGlu
Zy9JbnRlcm5hbHMuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SW50ZXJuYWxzOjp0b3VjaFBvc2l0
aW9uQWRqdXN0ZWRUb0Jlc3RDbGlja2FibGVOb2RlKToKKyAgICAgICAgKFdlYkNvcmU6OkludGVy
bmFsczo6dG91Y2hOb2RlQWRqdXN0ZWRUb0Jlc3RDbGlja2FibGVOb2RlKToKKyAgICAgICAgKiB0
ZXN0aW5nL0ludGVybmFscy5oOgorICAgICAgICAqIHRlc3RpbmcvSW50ZXJuYWxzLmlkbDoKKwog
MjAxMi0wMy0xOSAgSGlyb25vcmkgQm9ubyAgPGhib25vQGNocm9taXVtLm9yZz4KIAogICAgICAg
ICBBZGQgYSBjb3B5IGNvbnN0cnVjdG9yIHRvIENvbGxhcHNlZEJvcmRlclZhbHVlCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9UYXJnZXQucHJpIGIvU291cmNlL1dlYkNvcmUvVGFyZ2V0LnBy
aQppbmRleCBkOWY5NDg2Li5kYjRmMTg0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9UYXJn
ZXQucHJpCisrKyBiL1NvdXJjZS9XZWJDb3JlL1RhcmdldC5wcmkKQEAgLTEwMzMsNiArMTAzMyw3
IEBAIFNPVVJDRVMgKz0gXAogICAgIHBhZ2UvU2VjdXJpdHlQb2xpY3kuY3BwIFwKICAgICBwYWdl
L1NldHRpbmdzLmNwcCBcCiAgICAgcGFnZS9TcGF0aWFsTmF2aWdhdGlvbi5jcHAgXAorICAgIHBh
Z2UvVG91Y2hBZGp1c3RtZW50LmNwcCBcCiAgICAgcGFnZS9TdXNwZW5kYWJsZVRpbWVyLmNwcCBc
CiAgICAgcGFnZS9Vc2VyQ29udGVudFVSTFBhdHRlcm4uY3BwIFwKICAgICBwYWdlL1dpbmRvd0Zl
YXR1cmVzLmNwcCBcCkBAIC0yMTI2LDYgKzIxMjcsNyBAQCBIRUFERVJTICs9IFwKICAgICBwYWdl
L1NwZWVjaElucHV0TGlzdGVuZXIuaCBcCiAgICAgcGFnZS9TcGVlY2hJbnB1dFJlc3VsdC5oIFwK
ICAgICBwYWdlL1NwZWVjaElucHV0UmVzdWx0TGlzdC5oIFwKKyAgICBwYWdlL1RvdWNoQWRqdXN0
bWVudC5oIFwKICAgICBwYWdlL1dlYktpdEFuaW1hdGlvbi5oIFwKICAgICBwYWdlL1dlYktpdEFu
aW1hdGlvbkxpc3QuaCBcCiAgICAgcGFnZS9XaW5kb3dGZWF0dXJlcy5oIFwKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3BhZ2UvRXZlbnRIYW5kbGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3Bh
Z2UvRXZlbnRIYW5kbGVyLmNwcAppbmRleCBkYzU2MDJiLi5iN2EyMGFiIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9wYWdlL0V2ZW50SGFuZGxlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
cGFnZS9FdmVudEhhbmRsZXIuY3BwCkBAIC03Myw2ICs3Myw3IEBACiAjaW5jbHVkZSAiU2Nyb2xs
YmFyLmgiCiAjaW5jbHVkZSAiU2V0dGluZ3MuaCIKICNpbmNsdWRlICJTcGF0aWFsTmF2aWdhdGlv
bi5oIgorI2luY2x1ZGUgIlN0YXRpY0hhc2hTZXROb2RlTGlzdC5oIgogI2luY2x1ZGUgIlN0eWxl
Q2FjaGVkSW1hZ2UuaCIKICNpbmNsdWRlICJUZXh0RXZlbnQuaCIKICNpbmNsdWRlICJUZXh0SXRl
cmF0b3IuaCIKQEAgLTg5LDYgKzkwLDEwIEBACiAjaW5jbHVkZSAiUGxhdGZvcm1HZXN0dXJlRXZl
bnQuaCIKICNlbmRpZgogCisjaWYgRU5BQkxFKFRPVUNIX0FESlVTVE1FTlQpCisjaW5jbHVkZSAi
VG91Y2hBZGp1c3RtZW50LmgiCisjZW5kaWYKKwogI2lmIEVOQUJMRShTVkcpCiAjaW5jbHVkZSAi
U1ZHRG9jdW1lbnQuaCIKICNpbmNsdWRlICJTVkdFbGVtZW50SW5zdGFuY2UuaCIKQEAgLTI0MTIs
MTAgKzI0MTcsMjAgQEAgYm9vbCBFdmVudEhhbmRsZXI6OmhhbmRsZUdlc3R1cmVFdmVudChjb25z
dCBQbGF0Zm9ybUdlc3R1cmVFdmVudCYgZ2VzdHVyZUV2ZW50KQogYm9vbCBFdmVudEhhbmRsZXI6
OmhhbmRsZUdlc3R1cmVUYXAoY29uc3QgUGxhdGZvcm1HZXN0dXJlRXZlbnQmIGdlc3R1cmVFdmVu
dCkKIHsKICAgICAvLyBGSVhNRTogUmVmYWN0b3IgdGhpcyBjb2RlIHRvIG5vdCBoaXQgdGVzdCBt
dWx0aXBsZSB0aW1lcy4KKyAgICBJbnRQb2ludCBhZGp1c3RlZFBvaW50ID0gZ2VzdHVyZUV2ZW50
LnBvc2l0aW9uKCk7CisjaWYgRU5BQkxFKFRPVUNIX0FESlVTVE1FTlQpCisgICAgaWYgKCFnZXN0
dXJlRXZlbnQuYXJlYSgpLmlzRW1wdHkoKSkgeworICAgICAgICBOb2RlKiB0YXJnZXROb2RlID0g
MDsKKyAgICAgICAgLy8gRm9yIG5vdyB3ZSB1c2UgdGhlIGFkanVzdGVkIHBvc2l0aW9uIHRvIGVu
c3VyZSB0aGUgbGF0ZXIgcmVkdW5kYW50IGhpdC10ZXN0cyBoaXRzIHRoZSByaWdodCBub2RlLgor
ICAgICAgICBiZXN0Q2xpY2thYmxlTm9kZUZvclRvdWNoUG9pbnQoZ2VzdHVyZUV2ZW50LnBvc2l0
aW9uKCksIEludFNpemUoZ2VzdHVyZUV2ZW50LmFyZWEoKS53aWR0aCgpIC8gMiwgZ2VzdHVyZUV2
ZW50LmFyZWEoKS5oZWlnaHQoKSAvIDIpLCBhZGp1c3RlZFBvaW50LCB0YXJnZXROb2RlKTsKKyAg
ICAgICAgaWYgKCF0YXJnZXROb2RlKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0K
KyNlbmRpZgogICAgIGJvb2wgZGVmYXVsdFByZXZlbnRlZCA9IGZhbHNlOwotICAgIFBsYXRmb3Jt
TW91c2VFdmVudCBmYWtlTW91c2VNb3ZlKGdlc3R1cmVFdmVudC5wb3NpdGlvbigpLCBnZXN0dXJl
RXZlbnQuZ2xvYmFsUG9zaXRpb24oKSwgTm9CdXR0b24sIFBsYXRmb3JtRXZlbnQ6Ok1vdXNlTW92
ZWQsIC8qIGNsaWNrQ291bnQgKi8gMSwgZ2VzdHVyZUV2ZW50LnNoaWZ0S2V5KCksIGdlc3R1cmVF
dmVudC5jdHJsS2V5KCksIGdlc3R1cmVFdmVudC5hbHRLZXkoKSwgZ2VzdHVyZUV2ZW50Lm1ldGFL
ZXkoKSwgZ2VzdHVyZUV2ZW50LnRpbWVzdGFtcCgpKTsKLSAgICBQbGF0Zm9ybU1vdXNlRXZlbnQg
ZmFrZU1vdXNlRG93bihnZXN0dXJlRXZlbnQucG9zaXRpb24oKSwgZ2VzdHVyZUV2ZW50Lmdsb2Jh
bFBvc2l0aW9uKCksIExlZnRCdXR0b24sIFBsYXRmb3JtRXZlbnQ6Ok1vdXNlUHJlc3NlZCwgLyog
Y2xpY2tDb3VudCAqLyAxLCBnZXN0dXJlRXZlbnQuc2hpZnRLZXkoKSwgZ2VzdHVyZUV2ZW50LmN0
cmxLZXkoKSwgZ2VzdHVyZUV2ZW50LmFsdEtleSgpLCBnZXN0dXJlRXZlbnQubWV0YUtleSgpLCBn
ZXN0dXJlRXZlbnQudGltZXN0YW1wKCkpOwotICAgIFBsYXRmb3JtTW91c2VFdmVudCBmYWtlTW91
c2VVcChnZXN0dXJlRXZlbnQucG9zaXRpb24oKSwgZ2VzdHVyZUV2ZW50Lmdsb2JhbFBvc2l0aW9u
KCksIExlZnRCdXR0b24sIFBsYXRmb3JtRXZlbnQ6Ok1vdXNlUmVsZWFzZWQsIC8qIGNsaWNrQ291
bnQgKi8gMSwgZ2VzdHVyZUV2ZW50LnNoaWZ0S2V5KCksIGdlc3R1cmVFdmVudC5jdHJsS2V5KCks
IGdlc3R1cmVFdmVudC5hbHRLZXkoKSwgZ2VzdHVyZUV2ZW50Lm1ldGFLZXkoKSwgZ2VzdHVyZUV2
ZW50LnRpbWVzdGFtcCgpKTsKKyAgICBQbGF0Zm9ybU1vdXNlRXZlbnQgZmFrZU1vdXNlTW92ZShh
ZGp1c3RlZFBvaW50LCBnZXN0dXJlRXZlbnQuZ2xvYmFsUG9zaXRpb24oKSwgTm9CdXR0b24sIFBs
YXRmb3JtRXZlbnQ6Ok1vdXNlTW92ZWQsIC8qIGNsaWNrQ291bnQgKi8gMSwgZ2VzdHVyZUV2ZW50
LnNoaWZ0S2V5KCksIGdlc3R1cmVFdmVudC5jdHJsS2V5KCksIGdlc3R1cmVFdmVudC5hbHRLZXko
KSwgZ2VzdHVyZUV2ZW50Lm1ldGFLZXkoKSwgZ2VzdHVyZUV2ZW50LnRpbWVzdGFtcCgpKTsKKyAg
ICBQbGF0Zm9ybU1vdXNlRXZlbnQgZmFrZU1vdXNlRG93bihhZGp1c3RlZFBvaW50LCBnZXN0dXJl
RXZlbnQuZ2xvYmFsUG9zaXRpb24oKSwgTGVmdEJ1dHRvbiwgUGxhdGZvcm1FdmVudDo6TW91c2VQ
cmVzc2VkLCAvKiBjbGlja0NvdW50ICovIDEsIGdlc3R1cmVFdmVudC5zaGlmdEtleSgpLCBnZXN0
dXJlRXZlbnQuY3RybEtleSgpLCBnZXN0dXJlRXZlbnQuYWx0S2V5KCksIGdlc3R1cmVFdmVudC5t
ZXRhS2V5KCksIGdlc3R1cmVFdmVudC50aW1lc3RhbXAoKSk7CisgICAgUGxhdGZvcm1Nb3VzZUV2
ZW50IGZha2VNb3VzZVVwKGFkanVzdGVkUG9pbnQsIGdlc3R1cmVFdmVudC5nbG9iYWxQb3NpdGlv
bigpLCBMZWZ0QnV0dG9uLCBQbGF0Zm9ybUV2ZW50OjpNb3VzZVJlbGVhc2VkLCAvKiBjbGlja0Nv
dW50ICovIDEsIGdlc3R1cmVFdmVudC5zaGlmdEtleSgpLCBnZXN0dXJlRXZlbnQuY3RybEtleSgp
LCBnZXN0dXJlRXZlbnQuYWx0S2V5KCksIGdlc3R1cmVFdmVudC5tZXRhS2V5KCksIGdlc3R1cmVF
dmVudC50aW1lc3RhbXAoKSk7CiAgICAgbW91c2VNb3ZlZChmYWtlTW91c2VNb3ZlKTsKICAgICBk
ZWZhdWx0UHJldmVudGVkIHw9IGhhbmRsZU1vdXNlUHJlc3NFdmVudChmYWtlTW91c2VEb3duKTsK
ICAgICBkZWZhdWx0UHJldmVudGVkIHw9IGhhbmRsZU1vdXNlUmVsZWFzZUV2ZW50KGZha2VNb3Vz
ZVVwKTsKQEAgLTI0NDEsNiArMjQ1NiwyMiBAQCBib29sIEV2ZW50SGFuZGxlcjo6aGFuZGxlR2Vz
dHVyZVNjcm9sbENvcmUoY29uc3QgUGxhdGZvcm1HZXN0dXJlRXZlbnQmIGdlc3R1cmVFdgogfQog
I2VuZGlmCiAKKyNpZiBFTkFCTEUoVE9VQ0hfQURKVVNUTUVOVCkKK3ZvaWQgRXZlbnRIYW5kbGVy
OjpiZXN0Q2xpY2thYmxlTm9kZUZvclRvdWNoUG9pbnQoY29uc3QgSW50UG9pbnQmIHRvdWNoQ2Vu
dGVyLCBjb25zdCBJbnRTaXplJiB0b3VjaFJhZGl1cywgSW50UG9pbnQmIHRhcmdldFBvaW50LCBO
b2RlKiYgdGFyZ2V0Tm9kZSkKK3sKKyAgICBIaXRUZXN0UmVxdWVzdDo6SGl0VGVzdFJlcXVlc3RU
eXBlIGhpdFR5cGUgPSBIaXRUZXN0UmVxdWVzdDo6UmVhZE9ubHkgfCBIaXRUZXN0UmVxdWVzdDo6
QWN0aXZlOworICAgIEhpdFRlc3RSZXN1bHQgcmVzdWx0ID0gaGl0VGVzdFJlc3VsdEF0UG9pbnQo
dG91Y2hDZW50ZXIsIC8qYWxsb3dTaGFkb3dDb250ZW50Ki8gZmFsc2UsIC8qaWdub3JlQ2xpcHBp
bmcqLyBmYWxzZSwgRG9udEhpdFRlc3RTY3JvbGxiYXJzLCBoaXRUeXBlLCB0b3VjaFJhZGl1cyk7
CisKKyAgICBJbnRSZWN0IHRvdWNoUmVjdCA9IHJlc3VsdC5yZWN0Rm9yUG9pbnQodG91Y2hDZW50
ZXIpOworICAgIFJlZlB0cjxTdGF0aWNIYXNoU2V0Tm9kZUxpc3Q+IG5vZGVMaXN0ID0gU3RhdGlj
SGFzaFNldE5vZGVMaXN0OjphZG9wdChyZXN1bHQucmVjdEJhc2VkVGVzdFJlc3VsdCgpKTsKKyAg
ICBpZiAoIWZpbmRCZXN0Q2xpY2thYmxlQ2FuZGlkYXRlKHRhcmdldE5vZGUsIHRhcmdldFBvaW50
LCB0b3VjaENlbnRlciwgdG91Y2hSZWN0LCAqbm9kZUxpc3QuZ2V0KCkpKSB7CisgICAgICAgIC8v
IERlZmF1bHQgdG8ganVzdCByZXR1cm5pbmcgaW5uZXJOb25TaGFyZWROb2RlLgorICAgICAgICB0
YXJnZXRQb2ludCA9IHRvdWNoQ2VudGVyOworICAgICAgICB0YXJnZXROb2RlID0gcmVzdWx0Lmlu
bmVyTm9uU2hhcmVkTm9kZSgpOworICAgIH0KK30KKyNlbmRpZgorCiAjaWYgRU5BQkxFKENPTlRF
WFRfTUVOVVMpCiBib29sIEV2ZW50SGFuZGxlcjo6c2VuZENvbnRleHRNZW51RXZlbnQoY29uc3Qg
UGxhdGZvcm1Nb3VzZUV2ZW50JiBldmVudCkKIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3BhZ2UvRXZlbnRIYW5kbGVyLmggYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL0V2ZW50SGFuZGxlci5o
CmluZGV4IDFjYWMwNzUuLjcwMWZhMmIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2Uv
RXZlbnRIYW5kbGVyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGFnZS9FdmVudEhhbmRsZXIuaApA
QCAtMTY3LDYgKzE2NywxMCBAQCBwdWJsaWM6CiAgICAgYm9vbCBoYW5kbGVHZXN0dXJlU2Nyb2xs
VXBkYXRlKGNvbnN0IFBsYXRmb3JtR2VzdHVyZUV2ZW50Jik7CiAjZW5kaWYKIAorI2lmIEVOQUJM
RShUT1VDSF9BREpVU1RNRU5UKQorICAgIHZvaWQgYmVzdENsaWNrYWJsZU5vZGVGb3JUb3VjaFBv
aW50KGNvbnN0IEludFBvaW50JiB0b3VjaENlbnRlciwgY29uc3QgSW50U2l6ZSYgdG91Y2hSYWRp
dXMsIEludFBvaW50JiB0YXJnZXRQb2ludCwgTm9kZSomIHRhcmdldE5vZGUpOworI2VuZGlmCisK
ICNpZiBFTkFCTEUoQ09OVEVYVF9NRU5VUykKICAgICBib29sIHNlbmRDb250ZXh0TWVudUV2ZW50
KGNvbnN0IFBsYXRmb3JtTW91c2VFdmVudCYpOwogICAgIGJvb2wgc2VuZENvbnRleHRNZW51RXZl
bnRGb3JLZXkoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvVG91Y2hBZGp1c3Rt
ZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvVG91Y2hBZGp1c3RtZW50LmNwcApuZXcgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mYTM0MTMwCi0tLSAvZGV2L251bGwKKysrIGIv
U291cmNlL1dlYkNvcmUvcGFnZS9Ub3VjaEFkanVzdG1lbnQuY3BwCkBAIC0wLDAgKzEsMjEyIEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIE5va2lhIENvcnBvcmF0aW9uIGFuZC9vciBpdHMg
c3Vic2lkaWFyeSgtaWVzKQorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5
b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVy
bXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxp
c2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24g
MiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4K
KyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3
aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVu
IHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFs
IFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZl
IHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5z
ZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4g
IElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4s
IDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEz
MDEsIFVTQS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisKKyNpbmNsdWRlICJUb3VjaEFk
anVzdG1lbnQuaCIKKworI2luY2x1ZGUgIkNvbnRhaW5lck5vZGUuaCIKKyNpbmNsdWRlICJGbG9h
dFBvaW50LmgiCisjaW5jbHVkZSAiRmxvYXRRdWFkLmgiCisjaW5jbHVkZSAiSFRNTExhYmVsRWxl
bWVudC5oIgorI2luY2x1ZGUgIkhUTUxOYW1lcy5oIgorI2luY2x1ZGUgIkludFBvaW50LmgiCisj
aW5jbHVkZSAiSW50U2l6ZS5oIgorI2luY2x1ZGUgIk5vZGUuaCIKKyNpbmNsdWRlICJSZW5kZXJC
b3guaCIKKyNpbmNsdWRlICJSZW5kZXJPYmplY3QuaCIKKyNpbmNsdWRlICJSZW5kZXJTdHlsZS5o
IgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK25hbWVzcGFjZSBUb3VjaEFkanVzdG1lbnQgewor
CisvLyBDbGFzcyBmb3IgcmVtZW1iZXJpbmcgYWJzb2x1dGUgcXVhZHMgb2YgYSB0YXJnZXQgbm9k
ZSBhbmQgd2hhdCBub2RlIHRoZXkgcmVwcmVzZW50LgorY2xhc3MgU3VidGFyZ2V0R2VvbWV0cnkg
eworcHVibGljOgorICAgIFN1YnRhcmdldEdlb21ldHJ5KE5vZGUqIG5vZGUsIGNvbnN0IEZsb2F0
UXVhZCYgcXVhZCkKKyAgICAgICAgOiBtX25vZGUobm9kZSkKKyAgICAgICAgLCBtX3F1YWQocXVh
ZCkKKyAgICB7IH0KKworICAgIE5vZGUqIG5vZGUoKSBjb25zdCB7IHJldHVybiBtX25vZGU7IH0K
KyAgICBGbG9hdFF1YWQgcXVhZCgpIGNvbnN0IHsgcmV0dXJuIG1fcXVhZDsgfQorICAgIEludFJl
Y3QgYm91bmRpbmdCb3goKSBjb25zdCB7IHJldHVybiBtX3F1YWQuZW5jbG9zaW5nQm91bmRpbmdC
b3goKTsgfQorCitwcml2YXRlOgorICAgIE5vZGUqIG1fbm9kZTsKKyAgICBGbG9hdFF1YWQgbV9x
dWFkOworfTsKKwordHlwZWRlZiBWZWN0b3I8U3VidGFyZ2V0R2VvbWV0cnk+IFN1YnRhcmdldEdl
b21ldHJ5TGlzdDsKK3R5cGVkZWYgYm9vbCAoKk5vZGVGaWx0ZXIpKE5vZGUqKTsKK3R5cGVkZWYg
ZmxvYXQgKCpEaXN0YW5jZUZ1bmN0aW9uKShjb25zdCBJbnRQb2ludCYsIGNvbnN0IEludFJlY3Qm
LCBjb25zdCBTdWJ0YXJnZXRHZW9tZXRyeSYpOworCisvLyBUYWtlcyBub24tY29uc3QgTm9kZSog
YmVjYXVzZSBpc0NvbnRlbnRFZGl0YWJsZSBpcyBhIG5vbi1jb25zdCBmdW5jdGlvbi4KK2Jvb2wg
bm9kZVJlc3BvbmRzVG9UYXBHZXN0dXJlKE5vZGUqIG5vZGUpCit7CisgICAgaWYgKG5vZGUtPmlz
TGluaygpCisgICAgICAgIHx8IG5vZGUtPmlzQ29udGVudEVkaXRhYmxlKCkKKyAgICAgICAgfHwg
bm9kZS0+aXNNb3VzZUZvY3VzYWJsZSgpKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICBpZiAo
bm9kZS0+aXNFbGVtZW50Tm9kZSgpKSB7CisgICAgICAgIEVsZW1lbnQqIGVsZW1lbnQgPSAgc3Rh
dGljX2Nhc3Q8RWxlbWVudCo+KG5vZGUpOworICAgICAgICBpZiAoZWxlbWVudC0+aGFzVGFnTmFt
ZShIVE1MTmFtZXM6OmxhYmVsVGFnKSAmJiBzdGF0aWNfY2FzdDxIVE1MTGFiZWxFbGVtZW50Kj4o
ZWxlbWVudCktPmNvbnRyb2woKSkKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKyAg
ICAvLyBGSVhNRTogSW1wbGVtZW50IGhhc0RlZmF1bHRFdmVudEhhbmRsZXIgYW5kIHVzZSB0aGF0
IGluc3RlYWQgb2YgYWxsIG9mIHRoZSBhYm92ZSBjaGVja3MuCisgICAgaWYgKG5vZGUtPmhhc0V2
ZW50TGlzdGVuZXJzKCkKKyAgICAgICAgJiYgKG5vZGUtPmhhc0V2ZW50TGlzdGVuZXJzKGV2ZW50
TmFtZXMoKS5jbGlja0V2ZW50KQorICAgICAgICAgICAgfHwgbm9kZS0+aGFzRXZlbnRMaXN0ZW5l
cnMoZXZlbnROYW1lcygpLkRPTUFjdGl2YXRlRXZlbnQpCisgICAgICAgICAgICB8fCBub2RlLT5o
YXNFdmVudExpc3RlbmVycyhldmVudE5hbWVzKCkubW91c2Vkb3duRXZlbnQpCisgICAgICAgICAg
ICB8fCBub2RlLT5oYXNFdmVudExpc3RlbmVycyhldmVudE5hbWVzKCkubW91c2V1cEV2ZW50KQor
ICAgICAgICAgICAgfHwgbm9kZS0+aGFzRXZlbnRMaXN0ZW5lcnMoZXZlbnROYW1lcygpLm1vdXNl
bW92ZUV2ZW50KQorICAgICAgICAgICAgLy8gQ2hlY2tpbmcgZm9yIGZvY3VzIGV2ZW50cyBpcyBu
b3QgbmVjZXNzYXJ5IHNpbmNlIHRoZXkgY2FuIG9ubHkgZmlyZSBvbgorICAgICAgICAgICAgLy8g
Zm9jdXNhYmxlIGVsZW1lbnRzIHdoaWNoIGhhdmUgYWxyZWFkeSBiZWVuIGNhcHR1cmVkIGFib3Zl
LgorICAgICAgICApKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICBpZiAobm9kZS0+cmVuZGVy
U3R5bGUoKSkgeworICAgICAgICAvLyBBY2NlcHQgbm9kZXMgdGhhdCBoYXMgYSBDU1MgZWZmZWN0
IHdoZW4gdG91Y2hlZC4KKyAgICAgICAgaWYgKG5vZGUtPnJlbmRlclN0eWxlKCktPmFmZmVjdGVk
QnlBY3RpdmVSdWxlcygpIHx8IG5vZGUtPnJlbmRlclN0eWxlKCktPmFmZmVjdGVkQnlIb3ZlclJ1
bGVzKCkpCisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAgcmV0dXJuIGZhbHNl
OworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgYXBwZW5kU3VidGFyZ2V0c0Zvck5vZGVUb0xpc3Qo
Tm9kZSogbm9kZSwgU3VidGFyZ2V0R2VvbWV0cnlMaXN0JiBzdWJ0YXJnZXRzKQoreworICAgIC8v
IFNpbmNlIHRoZSBub2RlIGlzIGEgcmVzdWx0IG9mIGEgaGl0IHRlc3QsIHdlIGFyZSBhbHJlYWR5
IGVuc3VyZWQgaXQgaGFzIGEgcmVuZGVyZXIuCisgICAgQVNTRVJUKG5vZGUtPnJlbmRlcmVyKCkp
OworCisgICAgVmVjdG9yPEZsb2F0UXVhZD4gcXVhZHM7CisgICAgbm9kZS0+cmVuZGVyZXIoKS0+
YWJzb2x1dGVRdWFkcyhxdWFkcyk7CisKKyAgICBWZWN0b3I8RmxvYXRRdWFkPjo6Y29uc3RfaXRl
cmF0b3IgaXQgPSBxdWFkcy5iZWdpbigpOworICAgIGNvbnN0IFZlY3RvcjxGbG9hdFF1YWQ+Ojpj
b25zdF9pdGVyYXRvciBlbmQgPSBxdWFkcy5lbmQoKTsKKyAgICBmb3IgKDsgaXQgIT0gZW5kOyAr
K2l0KQorICAgICAgICBzdWJ0YXJnZXRzLmFwcGVuZChTdWJ0YXJnZXRHZW9tZXRyeShub2RlLCAq
aXQpKTsKK30KKworLy8gQ29tcGlsZXMgYSBsaXN0IG9mIHN1YnRhcmdldHMgb2YgYWxsIHRoZSBy
ZWxldmFudCB0YXJnZXQgbm9kZXMuCit2b2lkIGNvbXBpbGVTdWJ0YXJnZXRMaXN0KGNvbnN0IE5v
ZGVMaXN0JiBpbnRlcnNlY3RlZE5vZGVzLCBTdWJ0YXJnZXRHZW9tZXRyeUxpc3QmIHN1YnRhcmdl
dHMsIE5vZGVGaWx0ZXIgbm9kZUZpbHRlcikKK3sKKyAgICAvLyBGaW5kIGNhbmRpZGF0ZXMgcmVz
cG9uZGluZyB0byB0YXAgZ2VzdHVyZSBldmVudHMgaW4gTyhuKSB0aW1lLgorICAgIEhhc2hNYXA8
Tm9kZSosIE5vZGUqPiByZXNwb25kZXJNYXA7CisgICAgSGFzaFNldDxOb2RlKj4gYW5jZXN0b3Jz
VG9SZXNwb25kZXJzU2V0OworICAgIFZlY3RvcjxOb2RlKj4gY2FuZGlkYXRlczsKKworICAgIC8v
IEEgbm9kZSBtYXRjaGluZyB0aGUgTm9kZUZpbHRlciBpcyBjYWxsZWQgYSByZXNwb25kZXIuIENh
bmRpZGF0ZSBub2RlcyBtdXN0IGVpdGhlciBiZSBhCisgICAgLy8gcmVzcG9uZGVyIG9yIGhhdmUg
YW4gYW5jZXN0b3IgdGhhdCBpcyBhIHJlc3BvbmRlci4KKyAgICAvLyBUaGlzIGl0ZXJhdGlvbiB0
ZXN0cyBhbGwgYW5jZXN0b3JzIGF0IG1vc3Qgb25jZSBieSBjYWNoaW5nIGVhcmxpZXIgcmVzdWx0
cy4KKyAgICB1bnNpZ25lZCBsZW5ndGggPSBpbnRlcnNlY3RlZE5vZGVzLmxlbmd0aCgpOworICAg
IGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBsZW5ndGg7ICsraSkgeworICAgICAgICBOb2RlKiBj
b25zdCBub2RlID0gaW50ZXJzZWN0ZWROb2Rlcy5pdGVtKGkpOworICAgICAgICBpZiAocmVzcG9u
ZGVyTWFwLmNvbnRhaW5zKG5vZGUpKQorICAgICAgICAgICAgLy8gU2tpcCBub2RlcyB0aGF0IGFy
ZSBkaXJlY3QgYW5jZXN0b3JzIG9mIG90aGVyIGNhbmRpZGF0ZXMuIFRoZXkgd291bGQgaGl0LXRl
c3QKKyAgICAgICAgICAgIC8vIGFnYWluc3QgdGhlIHNhbWUgYWJzb2x1dGUgcXVhZHMuCisgICAg
ICAgICAgICBjb250aW51ZTsKKyAgICAgICAgVmVjdG9yPE5vZGUqPiB2aXNpdGVkTm9kZXM7Cisg
ICAgICAgIE5vZGUqIHJlc3BvbmRpbmdOb2RlID0gMDsKKyAgICAgICAgZm9yIChOb2RlKiB2aXNp
dGVkTm9kZSA9IG5vZGU7IHZpc2l0ZWROb2RlOyB2aXNpdGVkTm9kZSA9IHZpc2l0ZWROb2RlLT5w
YXJlbnRPckhvc3ROb2RlKCkpIHsKKyAgICAgICAgICAgIC8vIENoZWNrIGlmIHdlIGFscmVhZHkg
aGF2ZSBhIHJlc3VsdCBmb3IgYSBjb21tb24gYW5jZXN0b3IgZnJvbSBhbm90aGVyIGNhbmRpZGF0
ZS4KKyAgICAgICAgICAgIHJlc3BvbmRpbmdOb2RlID0gcmVzcG9uZGVyTWFwLmdldCh2aXNpdGVk
Tm9kZSk7CisgICAgICAgICAgICBpZiAocmVzcG9uZGluZ05vZGUpCisgICAgICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgICAgICB2aXNpdGVkTm9kZXMuYXBwZW5kKHZpc2l0ZWROb2RlKTsKKyAg
ICAgICAgICAgIC8vIENoZWNrIGlmIHRoZSBub2RlIGZpbHRlciBhcHBsaWVzLCB3aGljaCB3b3Vs
ZCBtZWFuIHdlIGhhdmUgZm91bmQgYSByZXNwb25kaW5nIG5vZGUuCisgICAgICAgICAgICBpZiAo
bm9kZUZpbHRlcih2aXNpdGVkTm9kZSkpIHsKKyAgICAgICAgICAgICAgICByZXNwb25kaW5nTm9k
ZSA9IHZpc2l0ZWROb2RlOworICAgICAgICAgICAgICAgIC8vIENvbnRpbnVlIHRoZSBpdGVyYXRp
b24gdG8gY29sbGVjdCB0aGUgYW5jZXN0b3JzIG9mIHRoZSByZXNwb25kZXIsIHdoaWNoIHdlIHdp
bGwgbmVlZCBsYXRlci4KKyAgICAgICAgICAgICAgICBmb3IgKHZpc2l0ZWROb2RlID0gdmlzaXRl
ZE5vZGUtPnBhcmVudE9ySG9zdE5vZGUoKTsgdmlzaXRlZE5vZGU7IHZpc2l0ZWROb2RlID0gdmlz
aXRlZE5vZGUtPnBhcmVudE9ySG9zdE5vZGUoKSkgeworICAgICAgICAgICAgICAgICAgICBwYWly
PEhhc2hTZXQ8Tm9kZSo+OjppdGVyYXRvciwgYm9vbD4gYWRkUmVzdWx0ID0gYW5jZXN0b3JzVG9S
ZXNwb25kZXJzU2V0LmFkZCh2aXNpdGVkTm9kZSk7CisgICAgICAgICAgICAgICAgICAgIGlmICgh
YWRkUmVzdWx0LnNlY29uZCkKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgfQorICAgICAgICAvLyBJbnNlcnQgdGhlIGRldGVjdGVkIHJlc3BvbmRlciBmb3IgYWxsIHRo
ZSB2aXNpdGVkIG5vZGVzLgorICAgICAgICBmb3IgKHVuc2lnbmVkIGogPSAwOyBqIDwgdmlzaXRl
ZE5vZGVzLnNpemUoKTsgaisrKQorICAgICAgICAgICAgcmVzcG9uZGVyTWFwLmFkZCh2aXNpdGVk
Tm9kZXNbal0sIHJlc3BvbmRpbmdOb2RlKTsKKworICAgICAgICBpZiAocmVzcG9uZGluZ05vZGUp
CisgICAgICAgICAgICBjYW5kaWRhdGVzLmFwcGVuZChub2RlKTsKKyAgICB9CisKKyAgICAvLyBX
ZSBjb21waWxlIHRoZSBsaXN0IG9mIGNvbXBvbmVudCBhYnNvbHV0ZSBxdWFkcyBpbnN0ZWFkIG9m
IHVzaW5nIHRoZSBib3VuZGluZyByZWN0CisgICAgLy8gdG8gYmUgYWJsZSB0byBwZXJmb3JtIGJl
dHRlciBoaXQtdGVzdGluZyBvbiBpbmxpbmUgbGlua3Mgb24gbGluZS1icmVha3MuCisgICAgbGVu
Z3RoID0gY2FuZGlkYXRlcy5zaXplKCk7CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGxl
bmd0aDsgaSsrKSB7CisgICAgICAgIE5vZGUqIGNhbmRpZGF0ZSA9IGNhbmRpZGF0ZXNbaV07Cisg
ICAgICAgIC8vIFNraXAgbm9kZXMgd2hvJ3MgcmVzcG9uZGVycyBhcmUgYW5jZXN0b3JzIG9mIG90
aGVyIHJlc3BvbmRlcnMuIFRoaXMgZ2l2ZXMgcHJlZmVyZW5jZSB0bworICAgICAgICAvLyB0aGUg
aW5uZXItbW9zdCBldmVudC1oYW5kbGVycy4gU28gdGhhdCBhIGxpbmsgaXMgYWx3YXlzIHByZWZl
cnJlZCBldmVuIHdoZW4gY29udGFpbmVkCisgICAgICAgIC8vIGluIGFuIGVsZW1lbnQgdGhhdCBt
b25pdG9ycyBhbGwgY2xpY2stZXZlbnRzLgorICAgICAgICBOb2RlKiByZXNwb25kaW5nTm9kZSA9
IHJlc3BvbmRlck1hcC5nZXQoY2FuZGlkYXRlKTsKKyAgICAgICAgQVNTRVJUKHJlc3BvbmRpbmdO
b2RlKTsKKyAgICAgICAgaWYgKGFuY2VzdG9yc1RvUmVzcG9uZGVyc1NldC5jb250YWlucyhyZXNw
b25kaW5nTm9kZSkpCisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgYXBwZW5kU3VidGFy
Z2V0c0Zvck5vZGVUb0xpc3QoY2FuZGlkYXRlLCBzdWJ0YXJnZXRzKTsKKyAgICB9Cit9CisKK2Zs
b2F0IGRpc3RhbmNlU3F1YXJlZFRvVGFyZ2V0Q2VudGVyTGluZShjb25zdCBJbnRQb2ludCYgdG91
Y2hIb3RzcG90LCBjb25zdCBJbnRSZWN0JiB0b3VjaEFyZWEsIGNvbnN0IFN1YnRhcmdldEdlb21l
dHJ5JiBzdWJ0YXJnZXQpCit7CisgICAgVU5VU0VEX1BBUkFNKHRvdWNoQXJlYSk7CisgICAgLy8g
Rm9yIGEgYmV0dGVyIGNlbnRlciBvZiBhIGxpbmUtYm94IHdlIHVzZSB0aGUgY2VudGVyLWxpbmUg
aW5zdGVhZCBvZiB0aGUgY2VudGVyLXBvaW50LgorICAgIC8vIFdlIHVzZSB0aGUgY2VudGVyLWxp
bmUgb2YgdGhlIGJvdW5kaW5nIGJveCBvZiB0aGUgcXVhZCB0aG91Z2gsIHNpbmNlIGl0IGlzIG11
Y2ggZmFzdGVyCisgICAgLy8gYW5kIGdpdmVzIHRoZSBzYW1lIHJlc3VsdCBpbiBhbGwgdW50cmFu
c2Zvcm1lZCBjYXNlcywgYW5kIGluIHRyYW5zZm9ybWVkIGNhc2VzIHN0aWxsCisgICAgLy8gZ2l2
ZXMgYSBiZXR0ZXIgZGlzdGFuY2UtZnVuY3Rpb24gdGhhbiB0aGUgZGlzdGFuY2UgdG8gdGhlIGNl
bnRlci1wb2ludC4KKyAgICBJbnRSZWN0IHJlY3QgPSBzdWJ0YXJnZXQuYm91bmRpbmdCb3goKTsK
KworICAgIHJldHVybiByZWN0LmRpc3RhbmNlU3F1YXJlZEZyb21DZW50ZXJMaW5lVG9Qb2ludCh0
b3VjaEhvdHNwb3QpOworfQorCisvLyBBIGdlbmVyaWMgZnVuY3Rpb24gZm9yIGZpbmRpbmcgdGhl
IHRhcmdldCBub2RlIHdpdGggdGhlIGxvd2VzdCBkaXN0YW5jZSBtZXRyaWMuIEEgZGlzdGFuY2Ug
bWV0cmljIGhlcmUgaXMgdGhlIHJlc3VsdAorLy8gb2YgYSBkaXN0YW5jZS1saWtlIGZ1bmN0aW9u
LCB0aGF0IGNvbXB1dGVzIGhvdyB3ZWxsIHRoZSB0b3VjaCBoaXRzIHRoZSBub2RlLgorLy8gRGlz
dGFuY2UgZnVuY3Rpb25zIGNvdWxkIGZvciBpbnN0YW5jZSBiZSBkaXN0YW5jZSBzcXVhcmVkIG9y
IGFyZWEgb2YgaW50ZXJzZWN0aW9uLgorYm9vbCBmaW5kTm9kZVdpdGhMb3dlc3REaXN0YW5jZU1l
dHJpYyhOb2RlKiYgdGFyZ2V0Tm9kZSwgSW50UG9pbnQmIHRhcmdldFBvaW50LCBjb25zdCBJbnRQ
b2ludCYgdG91Y2hIb3RzcG90LCBjb25zdCBJbnRSZWN0JiB0b3VjaEFyZWEsIFN1YnRhcmdldEdl
b21ldHJ5TGlzdCYgc3VidGFyZ2V0cywgRGlzdGFuY2VGdW5jdGlvbiBkaXN0YW5jZUZ1bmN0aW9u
KQoreworICAgIHRhcmdldE5vZGUgPSAwOworCisgICAgZmxvYXQgYmVzdERpc3RhbmNlTWV0cmlj
ID0gSU5GSU5JVFk7CisgICAgU3VidGFyZ2V0R2VvbWV0cnlMaXN0Ojpjb25zdF9pdGVyYXRvciBp
dCA9IHN1YnRhcmdldHMuYmVnaW4oKTsKKyAgICBjb25zdCBTdWJ0YXJnZXRHZW9tZXRyeUxpc3Q6
OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IHN1YnRhcmdldHMuZW5kKCk7CisgICAgZm9yICg7IGl0ICE9
IGVuZDsgKytpdCkgeworICAgICAgICBOb2RlKiBub2RlID0gaXQtPm5vZGUoKTsKKyAgICAgICAg
ZmxvYXQgZGlzdGFuY2VNZXRyaWMgPSBkaXN0YW5jZUZ1bmN0aW9uKHRvdWNoSG90c3BvdCwgdG91
Y2hBcmVhLCAqaXQpOworICAgICAgICBpZiAoZGlzdGFuY2VNZXRyaWMgPCBiZXN0RGlzdGFuY2VN
ZXRyaWMpIHsKKyAgICAgICAgICAgIHRhcmdldFBvaW50ID0gcm91bmRlZEludFBvaW50KGl0LT5x
dWFkKCkuY2VudGVyKCkpOworICAgICAgICAgICAgdGFyZ2V0Tm9kZSA9IG5vZGU7CisgICAgICAg
ICAgICBiZXN0RGlzdGFuY2VNZXRyaWMgPSBkaXN0YW5jZU1ldHJpYzsKKyAgICAgICAgfQorICAg
IH0KKworICAgIHJldHVybiAodGFyZ2V0Tm9kZSk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFRvdWNo
QWRqdXN0bWVudAorCitib29sIGZpbmRCZXN0Q2xpY2thYmxlQ2FuZGlkYXRlKE5vZGUqJiB0YXJn
ZXROb2RlLCBJbnRQb2ludCAmdGFyZ2V0UG9pbnQsIGNvbnN0IEludFBvaW50ICZ0b3VjaEhvdHNw
b3QsIGNvbnN0IEludFJlY3QgJnRvdWNoQXJlYSwgY29uc3QgTm9kZUxpc3QmIG5vZGVMaXN0KQor
eworICAgIFRvdWNoQWRqdXN0bWVudDo6U3VidGFyZ2V0R2VvbWV0cnlMaXN0IHN1YnRhcmdldHM7
CisgICAgVG91Y2hBZGp1c3RtZW50Ojpjb21waWxlU3VidGFyZ2V0TGlzdChub2RlTGlzdCwgc3Vi
dGFyZ2V0cywgVG91Y2hBZGp1c3RtZW50Ojpub2RlUmVzcG9uZHNUb1RhcEdlc3R1cmUpOworICAg
IHJldHVybiBUb3VjaEFkanVzdG1lbnQ6OmZpbmROb2RlV2l0aExvd2VzdERpc3RhbmNlTWV0cmlj
KHRhcmdldE5vZGUsIHRhcmdldFBvaW50LCB0b3VjaEhvdHNwb3QsIHRvdWNoQXJlYSwgc3VidGFy
Z2V0cywgVG91Y2hBZGp1c3RtZW50OjpkaXN0YW5jZVNxdWFyZWRUb1RhcmdldENlbnRlckxpbmUp
OworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9wYWdlL1RvdWNoQWRqdXN0bWVudC5oIGIvU291cmNlL1dlYkNvcmUvcGFnZS9Ub3VjaEFkanVz
dG1lbnQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kNWRmYzEwCi0tLSAv
ZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGFnZS9Ub3VjaEFkanVzdG1lbnQuaApAQCAt
MCwwICsxLDM2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIE5va2lhIENvcnBvcmF0aW9u
IGFuZC9vciBpdHMgc3Vic2lkaWFyeSgtaWVzKQorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVl
IHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1
bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNl
bnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIK
KyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0
ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhv
cGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsg
d2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkg
b3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGli
cmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91
IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQ
dWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBD
T1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5k
YXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24s
IE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaWZuZGVmIFRvdWNoQWRqdXN0bWVudF9oCisj
ZGVmaW5lIFRvdWNoQWRqdXN0bWVudF9oCisKKyNpbmNsdWRlICJJbnRQb2ludC5oIgorI2luY2x1
ZGUgIkludFJlY3QuaCIKKyNpbmNsdWRlICJOb2RlLmgiCisjaW5jbHVkZSAiTm9kZUxpc3QuaCIK
KyNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworYm9vbCBm
aW5kQmVzdENsaWNrYWJsZUNhbmRpZGF0ZShOb2RlKiYgdGFyZ2V0Tm9kZSwgSW50UG9pbnQmIHRh
cmdldFBvaW50LCBjb25zdCBJbnRQb2ludCYgdG91Y2hIb3RzcG90LCBjb25zdCBJbnRSZWN0JiB0
b3VjaEFyZWEsIGNvbnN0IE5vZGVMaXN0Jik7CisvLyBGSVhNRTogSW1wbGVtZW50IHRoZSBzaW1p
bGFyIGZ1bmN0aW9ucyBmb3Igb3RoZXIgZ2VzdHVyZXMgaGVyZSBhcyB3ZWxsLgorCit9IC8vIG5h
bWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvRmxvYXRRdWFkLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9GbG9hdFF1YWQuaAppbmRleCBiNWUyYThjLi5iZmI3OTRkIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9GbG9hdFF1YWQuaAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9GbG9hdFF1YWQuaApAQCAtODgsNiArODgsMTMgQEAgcHVi
bGljOgogICAgIC8vIGZyb20gdHJhbnNmb3JtZWQgcmVjdHMuCiAgICAgYm9vbCBjb250YWluc1F1
YWQoY29uc3QgRmxvYXRRdWFkJikgY29uc3Q7CiAKKyAgICAvLyBUaGUgY2VudGVyIG9mIHRoZSBx
dWFkLiBJZiB0aGUgcXVhZCBpcyB0aGUgcmVzdWx0IG9mIGEgYWZmaW5lLXRyYW5zZm9ybWVkIHJl
Y3RhbmdsZSB0aGlzIGlzIHRoZSBzYW1lIGFzIHRoZSBvcmlnaW5hbCBjZW50ZXIgdHJhbnNmb3Jt
ZWQuCisgICAgRmxvYXRQb2ludCBjZW50ZXIoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJu
IEZsb2F0UG9pbnQoKG1fcDEueCgpICsgbV9wMi54KCkgKyBtX3AzLngoKSArIG1fcDQueCgpKSAv
IDQuMCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgKG1fcDEueSgpICsgbV9wMi55KCkgKyBt
X3AzLnkoKSArIG1fcDQueSgpKSAvIDQuMCk7CisgICAgfQorCiAgICAgRmxvYXRSZWN0IGJvdW5k
aW5nQm94KCkgY29uc3Q7CiAgICAgSW50UmVjdCBlbmNsb3NpbmdCb3VuZGluZ0JveCgpIGNvbnN0
CiAgICAgewpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW50
UG9pbnQuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ludFBvaW50LmgKaW5k
ZXggZGRjNDFiNC4uMGFmNmU4NSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvSW50UG9pbnQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9JbnRQb2ludC5oCkBAIC0xMTEsNiArMTExLDggQEAgcHVibGljOgogICAgICAgICAgICAgbV95
IDwgb3RoZXIubV95ID8gbV95IDogb3RoZXIubV95KTsKICAgICB9CiAKKyAgICBpbnQgZGlzdGFu
Y2VTcXVhcmVkVG9Qb2ludChjb25zdCBJbnRQb2ludCYpIGNvbnN0OworCiAgICAgdm9pZCBjbGFt
cE5lZ2F0aXZlVG9aZXJvKCkKICAgICB7CiAgICAgICAgICp0aGlzID0gZXhwYW5kZWRUbyh6ZXJv
KCkpOwpAQCAtMjIyLDYgKzIyNCwxMSBAQCBpbmxpbmUgSW50U2l6ZSB0b1NpemUoY29uc3QgSW50
UG9pbnQmIGEpCiAgICAgcmV0dXJuIEludFNpemUoYS54KCksIGEueSgpKTsKIH0KIAoraW5saW5l
IGludCBJbnRQb2ludDo6ZGlzdGFuY2VTcXVhcmVkVG9Qb2ludChjb25zdCBJbnRQb2ludCYgcG9p
bnQpIGNvbnN0Cit7CisgICAgcmV0dXJuICgoKnRoaXMpIC0gcG9pbnQpLmRpYWdvbmFsTGVuZ3Ro
U3F1YXJlZCgpOworfQorCiAjaWYgUExBVEZPUk0oUVQpCiBpbmxpbmUgUURhdGFTdHJlYW0mIG9w
ZXJhdG9yPDwoUURhdGFTdHJlYW0mIHN0cmVhbSwgY29uc3QgSW50UG9pbnQmIHBvaW50KQogewpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW50UmVjdC5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbnRSZWN0LmNwcAppbmRleCAwM2Mz
NWU4Li5kZmEyZjkxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9JbnRSZWN0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbnRS
ZWN0LmNwcApAQCAtMTMyLDYgKzEzMiwzNSBAQCB2b2lkIEludFJlY3Q6OnNjYWxlKGZsb2F0IHMp
CiAgICAgbV9zaXplLnNldEhlaWdodCgoaW50KShoZWlnaHQoKSAqIHMpKTsKIH0KIAorc3RhdGlj
IGlubGluZSBpbnQgZGlzdGFuY2VUb0ludGVydmFsKGludCBwb3MsIGludCBzdGFydCwgaW50IGVu
ZCkKK3sKKyAgICBpZiAocG9zIDwgc3RhcnQpCisgICAgICAgIHJldHVybiBzdGFydCAtIHBvczsK
KyAgICBpZiAocG9zID4gZW5kKQorICAgICAgICByZXR1cm4gZW5kIC0gcG9zOworICAgIHJldHVy
biAwOworfQorCitJbnRTaXplIEludFJlY3Q6OmRpZmZlcmVuY2VUb1BvaW50KGNvbnN0IEludFBv
aW50JiBwb2ludCkgY29uc3QKK3sKKyAgICBpbnQgeGRpc3RhbmNlID0gZGlzdGFuY2VUb0ludGVy
dmFsKHBvaW50LngoKSwgeCgpLCBtYXhYKCkpOworICAgIGludCB5ZGlzdGFuY2UgPSBkaXN0YW5j
ZVRvSW50ZXJ2YWwocG9pbnQueSgpLCB5KCksIG1heFkoKSk7CisgICAgcmV0dXJuIEludFNpemUo
eGRpc3RhbmNlLCB5ZGlzdGFuY2UpOworfQorCitJbnRTaXplIEludFJlY3Q6OmRpZmZlcmVuY2VG
cm9tQ2VudGVyTGluZVRvUG9pbnQoY29uc3QgSW50UG9pbnQmIHBvaW50KSBjb25zdAoreworICAg
IC8vIFRoZSBjZW50ZXItbGluZSBpcyB0aGUgbmF0dXJhbCBjZW50ZXIgb2YgYSByZWN0YW5nbGUu
IEl0IGhhcyBhbiBlcXVhbCBkaXN0YW5jZSB0byBhbGwgc2lkZXMgb2YgdGhlIHJlY3RhbmdsZS4K
KyAgICBJbnRQb2ludCBjZW50ZXJQb2ludCA9IGNlbnRlcigpOworICAgIGludCB4ZGlzdGFuY2Ug
PSBjZW50ZXJQb2ludC54KCkgLSBwb2ludC54KCk7CisgICAgaW50IHlkaXN0YW5jZSA9IGNlbnRl
clBvaW50LnkoKSAtIHBvaW50LnkoKTsKKyAgICBpZiAod2lkdGgoKSA+IGhlaWdodCgpKQorICAg
ICAgICB4ZGlzdGFuY2UgPSBkaXN0YW5jZVRvSW50ZXJ2YWwocG9pbnQueCgpLCB4KCkgKyAoaGVp
Z2h0KCkgLyAyKSwgbWF4WCgpIC0gKGhlaWdodCgpIC8gMikpOworICAgIGVsc2UKKyAgICAgICAg
eWRpc3RhbmNlID0gZGlzdGFuY2VUb0ludGVydmFsKHBvaW50LnkoKSwgeSgpICsgKHdpZHRoKCkg
LyAyKSwgbWF4WSgpIC0gKHdpZHRoKCkgLyAyKSk7CisgICAgcmV0dXJuIEludFNpemUoeGRpc3Rh
bmNlLCB5ZGlzdGFuY2UpOworfQorCiBJbnRSZWN0IHVuaW9uUmVjdChjb25zdCBWZWN0b3I8SW50
UmVjdD4mIHJlY3RzKQogewogICAgIEludFJlY3QgcmVzdWx0OwpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW50UmVjdC5oIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvSW50UmVjdC5oCmluZGV4IDYwMGMyMWQuLmNhN2ZlYTQgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ludFJlY3QuaAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbnRSZWN0LmgKQEAgLTE4Niw2ICsxODYsMTEg
QEAgcHVibGljOgogICAgIHZvaWQgaW5mbGF0ZShpbnQgZCkgeyBpbmZsYXRlWChkKTsgaW5mbGF0
ZVkoZCk7IH0KICAgICB2b2lkIHNjYWxlKGZsb2F0IHMpOwogCisgICAgSW50U2l6ZSBkaWZmZXJl
bmNlVG9Qb2ludChjb25zdCBJbnRQb2ludCYpIGNvbnN0OworICAgIEludFNpemUgZGlmZmVyZW5j
ZUZyb21DZW50ZXJMaW5lVG9Qb2ludChjb25zdCBJbnRQb2ludCYpIGNvbnN0OworICAgIGludCBk
aXN0YW5jZVNxdWFyZWRUb1BvaW50KGNvbnN0IEludFBvaW50JiBwKSBjb25zdCB7IHJldHVybiBk
aWZmZXJlbmNlVG9Qb2ludChwKS5kaWFnb25hbExlbmd0aFNxdWFyZWQoKTsgfQorICAgIGludCBk
aXN0YW5jZVNxdWFyZWRGcm9tQ2VudGVyTGluZVRvUG9pbnQoY29uc3QgSW50UG9pbnQmIHApIGNv
bnN0IHsgcmV0dXJuIGRpZmZlcmVuY2VGcm9tQ2VudGVyTGluZVRvUG9pbnQocCkuZGlhZ29uYWxM
ZW5ndGhTcXVhcmVkKCk7IH0KKwogICAgIEludFJlY3QgdHJhbnNwb3NlZFJlY3QoKSBjb25zdCB7
IHJldHVybiBJbnRSZWN0KG1fbG9jYXRpb24udHJhbnNwb3NlZFBvaW50KCksIG1fc2l6ZS50cmFu
c3Bvc2VkU2l6ZSgpKTsgfQogCiAjaWYgUExBVEZPUk0oV1gpCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbnRTaXplLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9JbnRTaXplLmgKaW5kZXggMTYzOTg0Ny4uZjExZjgxNSAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW50U2l6ZS5oCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ludFNpemUuaApAQCAtMTA0LDYgKzEwNCwxMSBA
QCBwdWJsaWM6CiAgICAgICAgICp0aGlzID0gZXhwYW5kZWRUbyhJbnRTaXplKCkpOwogICAgIH0K
IAorICAgIGludCBkaWFnb25hbExlbmd0aFNxdWFyZWQoKSBjb25zdAorICAgIHsKKyAgICAgICAg
cmV0dXJuIG1fd2lkdGggKiBtX3dpZHRoICsgbV9oZWlnaHQgKiBtX2hlaWdodDsKKyAgICB9CisK
ICAgICBJbnRTaXplIHRyYW5zcG9zZWRTaXplKCkgY29uc3QKICAgICB7CiAgICAgICAgIHJldHVy
biBJbnRTaXplKG1faGVpZ2h0LCBtX3dpZHRoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3Rlc3RpbmcvSW50ZXJuYWxzLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3Rlc3RpbmcvSW50ZXJuYWxz
LmNwcAppbmRleCAzYTdkZDFiLi42MjA3MjY1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS90
ZXN0aW5nL0ludGVybmFscy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvdGVzdGluZy9JbnRlcm5h
bHMuY3BwCkBAIC02NSw2ICs2NSwxMSBAQAogI2luY2x1ZGUgIkJhdHRlcnlDb250cm9sbGVyLmgi
CiAjZW5kaWYKIAorI2lmIEVOQUJMRShUT1VDSF9BREpVU1RNRU5UKQorI2luY2x1ZGUgIkV2ZW50
SGFuZGxlci5oIgorI2luY2x1ZGUgIldlYktpdFBvaW50LmgiCisjZW5kaWYKKwogbmFtZXNwYWNl
IFdlYkNvcmUgewogCiBzdGF0aWMgYm9vbCBtYXJrZXJUeXBlc0Zyb20oY29uc3QgU3RyaW5nJiBt
YXJrZXJUeXBlLCBEb2N1bWVudE1hcmtlcjo6TWFya2VyVHlwZXMmIHJlc3VsdCkKQEAgLTU2OSw2
ICs1NzQsNDIgQEAgU3RyaW5nIEludGVybmFsczo6cmFuZ2VBc1RleHQoY29uc3QgUmFuZ2UqIHJh
bmdlLCBFeGNlcHRpb25Db2RlJiBlYykKICAgICByZXR1cm4gcmFuZ2UtPnRleHQoKTsKIH0KIAor
CisjaWYgRU5BQkxFKFRPVUNIX0FESlVTVE1FTlQpCitQYXNzUmVmUHRyPFdlYktpdFBvaW50PiBJ
bnRlcm5hbHM6OnRvdWNoUG9zaXRpb25BZGp1c3RlZFRvQmVzdENsaWNrYWJsZU5vZGUobG9uZyB4
LCBsb25nIHksIGxvbmcgd2lkdGgsIGxvbmcgaGVpZ2h0LCBEb2N1bWVudCogZG9jdW1lbnQsIEV4
Y2VwdGlvbkNvZGUmIGVjKQoreworICAgIGlmICghZG9jdW1lbnQgfHwgIWRvY3VtZW50LT5mcmFt
ZSgpKSB7CisgICAgICAgIGVjID0gSU5WQUxJRF9BQ0NFU1NfRVJSOworICAgICAgICByZXR1cm4g
MDsKKyAgICB9CisKKyAgICBJbnRTaXplIHJhZGl1cyh3aWR0aCAvIDIsIGhlaWdodCAvIDIpOwor
ICAgIEludFBvaW50IHBvaW50KHggKyByYWRpdXMud2lkdGgoKSwgeSArIHJhZGl1cy5oZWlnaHQo
KSk7CisKKyAgICBOb2RlKiB0YXJnZXROb2RlOworICAgIEludFBvaW50IGFkanVzdGVkUG9pbnQ7
CisgICAgZG9jdW1lbnQtPmZyYW1lKCktPmV2ZW50SGFuZGxlcigpLT5iZXN0Q2xpY2thYmxlTm9k
ZUZvclRvdWNoUG9pbnQocG9pbnQsIHJhZGl1cywgYWRqdXN0ZWRQb2ludCwgdGFyZ2V0Tm9kZSk7
CisgICAgcmV0dXJuIFdlYktpdFBvaW50OjpjcmVhdGUoYWRqdXN0ZWRQb2ludC54KCksIGFkanVz
dGVkUG9pbnQueSgpKTsKK30KKworTm9kZSogSW50ZXJuYWxzOjp0b3VjaE5vZGVBZGp1c3RlZFRv
QmVzdENsaWNrYWJsZU5vZGUobG9uZyB4LCBsb25nIHksIGxvbmcgd2lkdGgsIGxvbmcgaGVpZ2h0
LCBEb2N1bWVudCogZG9jdW1lbnQsIEV4Y2VwdGlvbkNvZGUmIGVjKQoreworICAgIGlmICghZG9j
dW1lbnQgfHwgIWRvY3VtZW50LT5mcmFtZSgpKSB7CisgICAgICAgIGVjID0gSU5WQUxJRF9BQ0NF
U1NfRVJSOworICAgICAgICByZXR1cm4gMDsKKyAgICB9CisKKyAgICBJbnRTaXplIHJhZGl1cyh3
aWR0aCAvIDIsIGhlaWdodCAvIDIpOworICAgIEludFBvaW50IHBvaW50KHggKyByYWRpdXMud2lk
dGgoKSwgeSArIHJhZGl1cy5oZWlnaHQoKSk7CisKKyAgICBOb2RlKiB0YXJnZXROb2RlOworICAg
IEludFBvaW50IGFkanVzdGVkUG9pbnQ7CisgICAgZG9jdW1lbnQtPmZyYW1lKCktPmV2ZW50SGFu
ZGxlcigpLT5iZXN0Q2xpY2thYmxlTm9kZUZvclRvdWNoUG9pbnQocG9pbnQsIHJhZGl1cywgYWRq
dXN0ZWRQb2ludCwgdGFyZ2V0Tm9kZSk7CisgICAgcmV0dXJuIHRhcmdldE5vZGU7Cit9CisjZW5k
aWYKKworCiBpbnQgSW50ZXJuYWxzOjpsYXN0U3BlbGxDaGVja1JlcXVlc3RTZXF1ZW5jZShEb2N1
bWVudCogZG9jdW1lbnQsIEV4Y2VwdGlvbkNvZGUmIGVjKQogewogICAgIFNwZWxsQ2hlY2tlciog
Y2hlY2tlciA9IHNwZWxsY2hlY2tlcihkb2N1bWVudCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS90ZXN0aW5nL0ludGVybmFscy5oIGIvU291cmNlL1dlYkNvcmUvdGVzdGluZy9JbnRlcm5h
bHMuaAppbmRleCAxYTUyMjQ2Li5jMTljMjk5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS90
ZXN0aW5nL0ludGVybmFscy5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Rlc3RpbmcvSW50ZXJuYWxz
LmgKQEAgLTQ0LDYgKzQ0LDcgQEAgY2xhc3MgSW50ZXJuYWxTZXR0aW5nczsKIGNsYXNzIE5vZGU7
CiBjbGFzcyBSYW5nZTsKIGNsYXNzIFNoYWRvd1Jvb3Q7CitjbGFzcyBXZWJLaXRQb2ludDsKIAog
dHlwZWRlZiBpbnQgRXhjZXB0aW9uQ29kZTsKIApAQCAtMTExLDYgKzExMiwxMSBAQCBwdWJsaWM6
CiAgICAgdW5zaWduZWQgbGVuZ3RoRnJvbVJhbmdlKEVsZW1lbnQqIHNjb3BlLCBjb25zdCBSYW5n
ZSosIEV4Y2VwdGlvbkNvZGUmKTsKICAgICBTdHJpbmcgcmFuZ2VBc1RleHQoY29uc3QgUmFuZ2Uq
LCBFeGNlcHRpb25Db2RlJik7CiAKKyNpZiBFTkFCTEUoVE9VQ0hfQURKVVNUTUVOVCkKKyAgICBQ
YXNzUmVmUHRyPFdlYktpdFBvaW50PiB0b3VjaFBvc2l0aW9uQWRqdXN0ZWRUb0Jlc3RDbGlja2Fi
bGVOb2RlKGxvbmcgeCwgbG9uZyB5LCBsb25nIHdpZHRoLCBsb25nIGhlaWdodCwgRG9jdW1lbnQq
LCBFeGNlcHRpb25Db2RlJik7CisgICAgTm9kZSogdG91Y2hOb2RlQWRqdXN0ZWRUb0Jlc3RDbGlj
a2FibGVOb2RlKGxvbmcgeCwgbG9uZyB5LCBsb25nIHdpZHRoLCBsb25nIGhlaWdodCwgRG9jdW1l
bnQqLCBFeGNlcHRpb25Db2RlJik7CisjZW5kaWYKKwogICAgIGludCBsYXN0U3BlbGxDaGVja1Jl
cXVlc3RTZXF1ZW5jZShEb2N1bWVudCosIEV4Y2VwdGlvbkNvZGUmKTsKICAgICBpbnQgbGFzdFNw
ZWxsQ2hlY2tQcm9jZXNzZWRTZXF1ZW5jZShEb2N1bWVudCosIEV4Y2VwdGlvbkNvZGUmKTsKICAg
ICAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Rlc3RpbmcvSW50ZXJuYWxzLmlkbCBiL1Nv
dXJjZS9XZWJDb3JlL3Rlc3RpbmcvSW50ZXJuYWxzLmlkbAppbmRleCAzNjEwNzU3Li5kMjFhMmM2
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS90ZXN0aW5nL0ludGVybmFscy5pZGwKKysrIGIv
U291cmNlL1dlYkNvcmUvdGVzdGluZy9JbnRlcm5hbHMuaWRsCkBAIC04Niw2ICs4NiwxMSBAQCBt
b2R1bGUgd2luZG93IHsKICAgICAgICAgdW5zaWduZWQgbG9uZyBsZW5ndGhGcm9tUmFuZ2UoaW4g
RWxlbWVudCBzY29wZSwgaW4gUmFuZ2UgcmFuZ2UpIHJhaXNlcyAoRE9NRXhjZXB0aW9uKTsKICAg
ICAgICAgRE9NU3RyaW5nIHJhbmdlQXNUZXh0KGluIFJhbmdlIHJhbmdlKSByYWlzZXMgKERPTUV4
Y2VwdGlvbik7CiAKKyNpZiBkZWZpbmVkKEVOQUJMRV9UT1VDSF9BREpVU1RNRU5UKSAmJiBFTkFC
TEVfVE9VQ0hfQURKVVNUTUVOVAorICAgICAgICBXZWJLaXRQb2ludCB0b3VjaFBvc2l0aW9uQWRq
dXN0ZWRUb0Jlc3RDbGlja2FibGVOb2RlKGluIGxvbmcgeCwgaW4gbG9uZyB5LCBpbiBsb25nIHdp
ZHRoLCBpbiBsb25nIGhlaWdodCwgaW4gRG9jdW1lbnQgZG9jdW1lbnQpIHJhaXNlcyAoRE9NRXhj
ZXB0aW9uKTsKKyAgICAgICAgTm9kZSB0b3VjaE5vZGVBZGp1c3RlZFRvQmVzdENsaWNrYWJsZU5v
ZGUoaW4gbG9uZyB4LCBpbiBsb25nIHksIGluIGxvbmcgd2lkdGgsIGluIGxvbmcgaGVpZ2h0LCBp
biBEb2N1bWVudCBkb2N1bWVudCkgcmFpc2VzIChET01FeGNlcHRpb24pOworI2VuZGlmCisKICAg
ICAgICAgbG9uZyBsYXN0U3BlbGxDaGVja1JlcXVlc3RTZXF1ZW5jZShpbiBEb2N1bWVudCBkb2N1
bWVudCkgcmFpc2VzIChET01FeGNlcHRpb24pOwogICAgICAgICBsb25nIGxhc3RTcGVsbENoZWNr
UHJvY2Vzc2VkU2VxdWVuY2UoaW4gRG9jdW1lbnQgZG9jdW1lbnQpIHJhaXNlcyAoRE9NRXhjZXB0
aW9uKTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nIGIvU291cmNlL1dl
YktpdDIvQ2hhbmdlTG9nCmluZGV4IGRhNzgzMTkuLmJkZGVkOGYgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJLaXQyL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwyMyBAQAorMjAxMi0wMy0xMiAgQWxsYW4gU2FuZGZlbGQgSmVuc2VuICA8YWxsYW4uamVu
c2VuQG5va2lhLmNvbT4KKworICAgICAgICBTZWxlY3QgYmVzdCB0YXJnZXQgZm9yIHRhcCBnZXN0
dXJlLgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9Nzg4
MDEKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBTZW5k
IHJhZGl1cyB0byBoYW5kbGVQb3RlbnRpYWxTaW5nbGVUYXBFdmVudCBzbyBpdCBjYW4gZG8gdGhl
IHNhbWUgaGl0CisgICAgICAgIGRldGVjdGlvbiB0aGUgdGFwIGdlc3R1cmUgbGF0ZXIgZG9lcy4K
KworICAgICAgICAqIFVJUHJvY2Vzcy9XZWJQYWdlUHJveHkuY3BwOgorICAgICAgICAoV2ViS2l0
OjpXZWJQYWdlUHJveHk6OmhhbmRsZVBvdGVudGlhbEFjdGl2YXRpb24pOgorICAgICAgICAqIFVJ
UHJvY2Vzcy9XZWJQYWdlUHJveHkuaDoKKyAgICAgICAgKiBVSVByb2Nlc3MvcXQvUXRXZWJQYWdl
RXZlbnRIYW5kbGVyLmNwcDoKKyAgICAgICAgKFF0V2ViUGFnZUV2ZW50SGFuZGxlcjo6aGFuZGxl
UG90ZW50aWFsU2luZ2xlVGFwRXZlbnQpOgorICAgICAgICAqIFdlYlByb2Nlc3MvV2ViUGFnZS9X
ZWJQYWdlLmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZTo6aGlnaGxpZ2h0UG90ZW50aWFs
QWN0aXZhdGlvbik6CisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UuaDoKKyAg
ICAgICAgKiBXZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5tZXNzYWdlcy5pbjoKKwogMjAxMi0w
My0xOCAgTm8nYW0gUm9zZW50aGFsICA8bm9hbS5yb3NlbnRoYWxAbm9raWEuY29tPgogCiAgICAg
ICAgIFtRdF1bV0syXSBBdm9pZCB1c2FnZSBvZiBtYW51YWwgc2NhbGluZyBpbiB0aGUgUXQgc2Nl
bmVncmFwaCBpbnRlZ3JhdGlvbgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNz
L1dlYlBhZ2VQcm94eS5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViUGFnZVByb3h5
LmNwcAppbmRleCA0NTM2MGZjLi5hODZkZmRjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9V
SVByb2Nlc3MvV2ViUGFnZVByb3h5LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3Mv
V2ViUGFnZVByb3h5LmNwcApAQCAtMTAxMiw5ICsxMDEyLDkgQEAgdm9pZCBXZWJQYWdlUHJveHk6
OmhhbmRsZUdlc3R1cmVFdmVudChjb25zdCBXZWJHZXN0dXJlRXZlbnQmIGV2ZW50KQogCiAjaWYg
RU5BQkxFKFRPVUNIX0VWRU5UUykKICNpZiBQTEFURk9STShRVCkKLXZvaWQgV2ViUGFnZVByb3h5
OjpoYW5kbGVQb3RlbnRpYWxBY3RpdmF0aW9uKGNvbnN0IEludFBvaW50JiBsYXlvdXRQb2ludCkK
K3ZvaWQgV2ViUGFnZVByb3h5OjpoYW5kbGVQb3RlbnRpYWxBY3RpdmF0aW9uKGNvbnN0IEludFBv
aW50JiB0b3VjaFBvaW50LCBjb25zdCBJbnRTaXplJiB0b3VjaEFyZWEpCiB7Ci0gICAgcHJvY2Vz
cygpLT5zZW5kKE1lc3NhZ2VzOjpXZWJQYWdlOjpIaWdobGlnaHRQb3RlbnRpYWxBY3RpdmF0aW9u
KGxheW91dFBvaW50KSwgbV9wYWdlSUQpOworICAgIHByb2Nlc3MoKS0+c2VuZChNZXNzYWdlczo6
V2ViUGFnZTo6SGlnaGxpZ2h0UG90ZW50aWFsQWN0aXZhdGlvbih0b3VjaFBvaW50LCB0b3VjaEFy
ZWEpLCBtX3BhZ2VJRCk7CiB9CiAjZW5kaWYKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIv
VUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5oIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYlBh
Z2VQcm94eS5oCmluZGV4IDM1ZWEzZmMuLmRjOTg1NTQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJL
aXQyL1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkuaAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nl
c3MvV2ViUGFnZVByb3h5LmgKQEAgLTM5MSw3ICszOTEsNyBAQCBwdWJsaWM6CiAjaWYgRU5BQkxF
KFRPVUNIX0VWRU5UUykKICAgICB2b2lkIGhhbmRsZVRvdWNoRXZlbnQoY29uc3QgTmF0aXZlV2Vi
VG91Y2hFdmVudCYpOwogI2lmIFBMQVRGT1JNKFFUKQotICAgIHZvaWQgaGFuZGxlUG90ZW50aWFs
QWN0aXZhdGlvbihjb25zdCBXZWJDb3JlOjpJbnRQb2ludCYpOworICAgIHZvaWQgaGFuZGxlUG90
ZW50aWFsQWN0aXZhdGlvbihjb25zdCBXZWJDb3JlOjpJbnRQb2ludCYgdG91Y2hQb2ludCwgY29u
c3QgV2ViQ29yZTo6SW50U2l6ZSYgdG91Y2hBcmVhKTsKICNlbmRpZgogI2VuZGlmCiAKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9xdC9RdFdlYlBhZ2VFdmVudEhhbmRsZXIu
Y3BwIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL3F0L1F0V2ViUGFnZUV2ZW50SGFuZGxlci5j
cHAKaW5kZXggNTFjZDMyNy4uOTZiYzdjZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQ
cm9jZXNzL3F0L1F0V2ViUGFnZUV2ZW50SGFuZGxlci5jcHAKKysrIGIvU291cmNlL1dlYktpdDIv
VUlQcm9jZXNzL3F0L1F0V2ViUGFnZUV2ZW50SGFuZGxlci5jcHAKQEAgLTIzMiw3ICsyMzIsNyBA
QCB2b2lkIFF0V2ViUGFnZUV2ZW50SGFuZGxlcjo6aGFuZGxlUG90ZW50aWFsU2luZ2xlVGFwRXZl
bnQoY29uc3QgUVRvdWNoRXZlbnQ6OlRvdQogewogI2lmIEVOQUJMRShUT1VDSF9FVkVOVFMpCiAg
ICAgUVRyYW5zZm9ybSBmcm9tSXRlbVRyYW5zZm9ybSA9IG1fd2ViUGFnZS0+dHJhbnNmb3JtRnJv
bUl0ZW0oKTsKLSAgICBtX3dlYlBhZ2VQcm94eS0+aGFuZGxlUG90ZW50aWFsQWN0aXZhdGlvbihm
cm9tSXRlbVRyYW5zZm9ybS5tYXAocG9pbnQucG9zKCkpLnRvUG9pbnQoKSk7CisgICAgbV93ZWJQ
YWdlUHJveHktPmhhbmRsZVBvdGVudGlhbEFjdGl2YXRpb24oZnJvbUl0ZW1UcmFuc2Zvcm0ubWFw
KHBvaW50LnBvcygpKS50b1BvaW50KCksIEludFNpemUocG9pbnQucmVjdCgpLnNpemUoKS50b1Np
emUoKSkpOwogI2Vsc2UKICAgICBRX1VOVVNFRChwb2ludCk7CiAjZW5kaWYKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmNwcCBiL1NvdXJjZS9X
ZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmNwcAppbmRleCA2NDdmMmZjLi5lNzg3
MmUxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFn
ZS5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UuY3Bw
CkBAIC0xNDQ4LDE2ICsxNDQ4LDIwIEBAIHZvaWQgV2ViUGFnZTo6cmVzdG9yZVNlc3Npb25BbmRO
YXZpZ2F0ZVRvQ3VycmVudEl0ZW0oY29uc3QgU2Vzc2lvblN0YXRlJiBzZXNzaW9uCiAKICNpZiBF
TkFCTEUoVE9VQ0hfRVZFTlRTKQogI2lmIFBMQVRGT1JNKFFUKQotdm9pZCBXZWJQYWdlOjpoaWdo
bGlnaHRQb3RlbnRpYWxBY3RpdmF0aW9uKGNvbnN0IEludFBvaW50JiBwb2ludCkKK3ZvaWQgV2Vi
UGFnZTo6aGlnaGxpZ2h0UG90ZW50aWFsQWN0aXZhdGlvbihjb25zdCBJbnRQb2ludCYgcG9pbnQs
IGNvbnN0IEludFNpemUmIGFyZWEpCiB7CiAgICAgTm9kZSogYWN0aXZhdGlvbk5vZGUgPSAwOwog
ICAgIEZyYW1lKiBtYWluZnJhbWUgPSBtX3BhZ2UtPm1haW5GcmFtZSgpOworICAgIEludFBvaW50
IGFkanVzdGVkUG9pbnQ7CiAKICAgICBpZiAocG9pbnQgIT0gSW50UG9pbnQ6Onplcm8oKSkgewor
I2lmIEVOQUJMRShUT1VDSF9BREpVU1RNRU5UKQorICAgICAgICBtYWluZnJhbWUtPmV2ZW50SGFu
ZGxlcigpLT5iZXN0Q2xpY2thYmxlTm9kZUZvclRvdWNoUG9pbnQocG9pbnQsIEludFNpemUoYXJl
YS53aWR0aCgpIC8gMiwgYXJlYS5oZWlnaHQoKSAvIDIpLCBhZGp1c3RlZFBvaW50LCBhY3RpdmF0
aW9uTm9kZSk7CisjZWxzZQogICAgICAgICBIaXRUZXN0UmVzdWx0IHJlc3VsdCA9IG1haW5mcmFt
ZS0+ZXZlbnRIYW5kbGVyKCktPmhpdFRlc3RSZXN1bHRBdFBvaW50KG1haW5mcmFtZS0+dmlldygp
LT53aW5kb3dUb0NvbnRlbnRzKHBvaW50KSwgLyphbGxvd1NoYWRvd0NvbnRlbnQqLyBmYWxzZSwg
LyppZ25vcmVDbGlwcGluZyovIHRydWUpOwogICAgICAgICBhY3RpdmF0aW9uTm9kZSA9IHJlc3Vs
dC5pbm5lck5vZGUoKTsKLQotICAgICAgICBpZiAoIWFjdGl2YXRpb25Ob2RlLT5pc0ZvY3VzYWJs
ZSgpKQorI2VuZGlmCisgICAgICAgIGlmIChhY3RpdmF0aW9uTm9kZSAmJiAhYWN0aXZhdGlvbk5v
ZGUtPmlzRm9jdXNhYmxlKCkpCiAgICAgICAgICAgICBhY3RpdmF0aW9uTm9kZSA9IGFjdGl2YXRp
b25Ob2RlLT5lbmNsb3NpbmdMaW5rRXZlbnRQYXJlbnRPclNlbGYoKTsKICAgICB9CiAKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmggYi9Tb3Vy
Y2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5oCmluZGV4IDFhM2Q3NzEuLjAz
NGYxYzUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQ
YWdlLmgKKysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UuaApA
QCAtNTY0LDcgKzU2NCw3IEBAIHByaXZhdGU6CiAgICAgdm9pZCB0b3VjaEV2ZW50KGNvbnN0IFdl
YlRvdWNoRXZlbnQmKTsKICAgICB2b2lkIHRvdWNoRXZlbnRTeW5jRm9yVGVzdGluZyhjb25zdCBX
ZWJUb3VjaEV2ZW50JiwgYm9vbCYgaGFuZGxlZCk7CiAjaWYgUExBVEZPUk0oUVQpCi0gICAgdm9p
ZCBoaWdobGlnaHRQb3RlbnRpYWxBY3RpdmF0aW9uKGNvbnN0IFdlYkNvcmU6OkludFBvaW50Jik7
CisgICAgdm9pZCBoaWdobGlnaHRQb3RlbnRpYWxBY3RpdmF0aW9uKGNvbnN0IFdlYkNvcmU6Oklu
dFBvaW50JiwgY29uc3QgV2ViQ29yZTo6SW50U2l6ZSYgYXJlYSk7CiAjZW5kaWYKICNlbmRpZgog
ICAgIHZvaWQgY29udGV4dE1lbnVIaWRkZW4oKSB7IG1faXNTaG93aW5nQ29udGV4dE1lbnUgPSBm
YWxzZTsgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1dl
YlBhZ2UubWVzc2FnZXMuaW4gYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvV2Vi
UGFnZS5tZXNzYWdlcy5pbgppbmRleCBmZjRiZTgyLi4yMDU1YTUxIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5tZXNzYWdlcy5pbgorKysgYi9T
b3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5tZXNzYWdlcy5pbgpAQCAt
NDAsOSArNDAsOCBAQCBtZXNzYWdlcyAtPiBXZWJQYWdlIHsKICNpZiBFTkFCTEUoVE9VQ0hfRVZF
TlRTKQogICAgIFRvdWNoRXZlbnQoV2ViS2l0OjpXZWJUb3VjaEV2ZW50IGV2ZW50KQogICAgIFRv
dWNoRXZlbnRTeW5jRm9yVGVzdGluZyhXZWJLaXQ6OldlYlRvdWNoRXZlbnQgZXZlbnQpIC0+IChi
b29sIGhhbmRsZWQpCi0jZW5kaWYKICNpZiBFTkFCTEUoVE9VQ0hfRVZFTlRTKSAmJiBQTEFURk9S
TShRVCkKLSAgICBIaWdobGlnaHRQb3RlbnRpYWxBY3RpdmF0aW9uKFdlYkNvcmU6OkludFBvaW50
IHBvaW50KQorICAgIEhpZ2hsaWdodFBvdGVudGlhbEFjdGl2YXRpb24oV2ViQ29yZTo6SW50UG9p
bnQgcG9pbnQsIFdlYkNvcmU6OkludFNpemUgYXJlYSkKICNlbmRpZgogCiAgICAgQ29udGV4dE1l
bnVIaWRkZW4oKQpkaWZmIC0tZ2l0IGEvVG9vbHMvQ2hhbmdlTG9nIGIvVG9vbHMvQ2hhbmdlTG9n
CmluZGV4IDE0ZTcwMDcuLjIwY2U2MzggMTAwNjQ0Ci0tLSBhL1Rvb2xzL0NoYW5nZUxvZworKysg
Yi9Ub29scy9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxNCBAQAorMjAxMi0wMy0xMiAgQWxsYW4gU2Fu
ZGZlbGQgSmVuc2VuICA8YWxsYW4uamVuc2VuQG5va2lhLmNvbT4KKworICAgICAgICBTZWxlY3Qg
YmVzdCB0YXJnZXQgZm9yIHRhcCBnZXN0dXJlLgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9Nzg4MDEKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkg
KE9PUFMhKS4KKworICAgICAgICBBZGQgVE9VQ0hfQURKVVNUTUVOVCB0byBlbmFibGVkIGZlYXR1
cmVzLgorCisgICAgICAgICogcW1ha2UvbWtzcGVjcy9mZWF0dXJlcy9mZWF0dXJlcy5wcmY6CisK
IDIwMTItMDMtMTggIENzYWJhIE9zenRyb2dvbsOhYyAgPG9zc3lAd2Via2l0Lm9yZz4KIAogICAg
ICAgICBbUXRdIFVucmV2aWV3ZWQuIERpc2FibGUgLVdlcnJvciBvbiB4ODYgdW50aWwgcHJvcGVy
IGZpeC4KZGlmZiAtLWdpdCBhL1Rvb2xzL3FtYWtlL21rc3BlY3MvZmVhdHVyZXMvZmVhdHVyZXMu
cHJmIGIvVG9vbHMvcW1ha2UvbWtzcGVjcy9mZWF0dXJlcy9mZWF0dXJlcy5wcmYKaW5kZXggMDZk
YTFhZi4uMDYxNjhjNyAxMDA2NDQKLS0tIGEvVG9vbHMvcW1ha2UvbWtzcGVjcy9mZWF0dXJlcy9m
ZWF0dXJlcy5wcmYKKysrIGIvVG9vbHMvcW1ha2UvbWtzcGVjcy9mZWF0dXJlcy9mZWF0dXJlcy5w
cmYKQEAgLTg5LDYgKzg5LDcgQEAgaGF2ZVF0KDUpIHsKICFjb250YWlucyhERUZJTkVTLCBFTkFC
TEVfVklERU9fVFJBQ0s9Lik6IERFRklORVMgKz0gRU5BQkxFX1ZJREVPX1RSQUNLPTAKICFjb250
YWlucyhERUZJTkVTLCBFTkFCTEVfVE9VQ0hfSUNPTl9MT0FESU5HPS4pOiBERUZJTkVTICs9IEVO
QUJMRV9UT1VDSF9JQ09OX0xPQURJTkc9MAogIWNvbnRhaW5zKERFRklORVMsIEVOQUJMRV9BTklN
QVRJT05fQVBJPS4pOiBERUZJTkVTICs9IEVOQUJMRV9BTklNQVRJT05fQVBJPTAKKyFjb250YWlu
cyhERUZJTkVTLCBFTkFCTEVfVE9VQ0hfQURKVVNUTUVOVD0uKTogREVGSU5FUyArPSBFTkFCTEVf
VE9VQ0hfQURKVVNUTUVOVD0xCiAKICMgUG9saWN5IGRlY2lzaW9uczogZm9yIHVzaW5nIGEgcGFy
dGljdWxhciB0aGlyZC1wYXJ0eSBsaWJyYXJ5IG9yIG9wdGlvbmFsIE9TIHNlcnZpY2UKICFjb250
YWlucyhERUZJTkVTLCBXVEZfVVNFX1FUX0lNQUdFX0RFQ09ERVI9Lik6IERFRklORVMgKz0gV1RG
X1VTRV9RVF9JTUFHRV9ERUNPREVSPTEKQEAgLTI2NSw2ICsyNjYsNyBAQCBjb250YWlucyhERUZJ
TkVTLCBFTkFCTEVfVklERU9fVFJBQ0s9MSk6IEZFQVRVUkVfREVGSU5FU19KQVZBU0NSSVBUICs9
IEVOQUJMRV9WSQogY29udGFpbnMoREVGSU5FUywgRU5BQkxFX0RBVEFfVFJBTlNGRVJfSVRFTVM9
MSk6IEZFQVRVUkVfREVGSU5FU19KQVZBU0NSSVBUICs9IEVOQUJMRV9EQVRBX1RSQU5TRkVSX0lU
RU1TPTEKIGNvbnRhaW5zKERFRklORVMsIEVOQUJMRV9GVUxMU0NSRUVOX0FQST0xKTogRkVBVFVS
RV9ERUZJTkVTX0pBVkFTQ1JJUFQgKz0gRU5BQkxFX0ZVTExTQ1JFRU5fQVBJPTEKIGNvbnRhaW5z
KERFRklORVMsIEVOQUJMRV9SRVFVRVNUX0FOSU1BVElPTl9GUkFNRT0xKTogRkVBVFVSRV9ERUZJ
TkVTX0pBVkFTQ1JJUFQgKz0gRU5BQkxFX1JFUVVFU1RfQU5JTUFUSU9OX0ZSQU1FPTEKK2NvbnRh
aW5zKERFRklORVMsIEVOQUJMRV9UT1VDSF9BREpVU1RNRU5UPTEpOiBGRUFUVVJFX0RFRklORVNf
SkFWQVNDUklQVCArPSBFTkFCTEVfVE9VQ0hfQURKVVNUTUVOVD0xCiAKICMgVXNlZCB0byBjb21w
dXRlIGRlZmF1bHRzIGZvciB0aGUgYnVpbGQtd2Via2l0IHNjcmlwdAogIyBEb24ndCBwbGFjZSBh
bnl0aGluZyBhZnRlciB0aGlzIQo=
</data>

          </attachment>
      

    </bug>

</bugzilla>