<?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>67822</bug_id>
          
          <creation_ts>2011-09-08 17:41:26 -0700</creation_ts>
          <short_desc>PlatformGestureEvent::handleGestureEvent should hit test while dispatching Scroll* events.</short_desc>
          <delta_ts>2012-11-30 09:52:10 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>UI Events</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>INVALID</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>66272</dependson>
    
    <dependson>80201</dependson>
    
    <dependson>80311</dependson>
          <blocked>73489</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Robert Kroeger">rjkroege</reporter>
          <assigned_to name="Robert Kroeger">rjkroege</assigned_to>
          <cc>abarth</cc>
    
    <cc>dglazkov</cc>
    
    <cc>donggwan.kim</cc>
    
    <cc>fsamuel</cc>
    
    <cc>gustavo.noronha</cc>
    
    <cc>gustavo</cc>
    
    <cc>jamesr</cc>
    
    <cc>rniwa</cc>
    
    <cc>scottbyer</cc>
    
    <cc>varunjain</cc>
    
    <cc>wjmaclean</cc>
    
    <cc>xan.lopez</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>464532</commentid>
    <comment_count>0</comment_count>
    <who name="Robert Kroeger">rjkroege</who>
    <bug_when>2011-09-08 17:41:26 -0700</bug_when>
    <thetext>Per the FIXME in the code: EventHandler::handleGestureEvent should hit
test and send ScrollBeginType, ScrollUpdateType and ScrollEndType events
to the correct subframe rather than always sending gestures to the main
frame only. It should also ensure that if a frame gets a gesture begin
gesture, it gets the corresponding end gesture as well.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>464981</commentid>
    <comment_count>1</comment_count>
      <attachid>106903</attachid>
    <who name="Robert Kroeger">rjkroege</who>
    <bug_when>2011-09-09 12:37:53 -0700</bug_when>
    <thetext>Created attachment 106903
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>464985</commentid>
    <comment_count>2</comment_count>
    <who name="Robert Kroeger">rjkroege</who>
    <bug_when>2011-09-09 12:41:53 -0700</bug_when>
    <thetext>Hi Adam,

The attached patch works for Chrome but still needs some cleanup and multuple layout tests. I&apos;m hoping you could give me some high-level feedback on the approach and suggest who I should get to review the final version.

Thanks.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>465117</commentid>
    <comment_count>3</comment_count>
      <attachid>106903</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2011-09-09 17:04:34 -0700</bug_when>
    <thetext>Comment on attachment 106903
Patch

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

I didn&apos;t review the whole patch, but this needs a bunch of work.  I&apos;m sorry that I don&apos;t have time to help you with this patch.  You might try dglazkov.  He&apos;s done a bunch of work with event handling.

&gt; Source/WebCore/page/EventHandler.cpp:2206
&gt; +    Document* doc = m_frame-&gt;document();

This looks dangerous.  This point could become junk while dispatching events.  It&apos;s probably best to grab the document point from the frame each time you need it.

&gt; Source/WebCore/page/EventHandler.cpp:2226
&gt; +        if (m_gestureEventWidgetTarget.get() &amp;&amp; m_gestureEventWidgetTarget-&gt;refCount() &gt; 1 &amp;&amp; passGestureEventToWidget(gestureEvent, m_gestureEventWidgetTarget.get()))

Crazy.  It&apos;s very rare to branch on the refCount of an object.  I suspect this isn&apos;t the right thing to do.

&gt; Source/WebCore/page/EventHandler.cpp:2228
&gt; +        if (m_gestureEventWidgetTarget.get() &amp;&amp; m_gestureEventWidgetTarget-&gt;hasOneRef())

No need to call get() to convert a RefPtr to a bool.

&gt; Source/WebCore/page/EventHandler.cpp:2232
&gt; +            RenderLayer* layer = ((RenderBox*)m_gestureTargetNode-&gt;renderer())-&gt;layer();

Please use C++ style casts.  How do you know its a RenderBox??

&gt; Source/WebCore/page/EventHandler.cpp:2249
&gt; +        LayoutPoint vPoint = view-&gt;windowToContents(gestureEvent.position());

vPoint =&gt; please use full words when naming variables.

&gt; Source/WebCore/page/EventHandler.cpp:2251
&gt; +        Node* node;
&gt; +        bool isOverWidget;

Please initialize scalars.

&gt; Source/WebCore/page/EventHandler.cpp:2257
&gt; +        node = result.innerNode();

Why not just declare node at this point?  Then we don&apos;t need to worry about someone using it between when it is declared and when it is initialized.  Also, consider taking a reference to the node so that it doesn&apos;t get deallocated out from under you.

&gt; Source/WebCore/page/EventHandler.cpp:2260
&gt; +        if (node) {

Prefer early return.

&gt; Source/WebCore/page/EventHandler.cpp:2269
&gt; +            node = node-&gt;shadowAncestorNode();

Why are we re-using the same variable?  /me is confused.

&gt; Source/WebCore/page/EventHandler.cpp:2281
&gt; +            while (target &amp;&amp; !target-&gt;isRoot()) {
&gt; +                if (target-&gt;isBox()) {
&gt; +                    RenderBox* rb = (RenderBox*)target;
&gt; +                    if (rb-&gt;canBeScrolledAndHasScrollableArea()) {
&gt; +                        m_gestureTargetNode = rb-&gt;node();
&gt; +                        rb-&gt;layer()-&gt;handleGestureEvent(gestureEvent);
&gt; +                        return true; // FIXME: Prove that this is correct.
&gt; +                    }
&gt; +                }
&gt; +                target = target-&gt;parent();

This looks like a lot of render tree manipulation to be doing outside of the rendering directory.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>465749</commentid>
    <comment_count>4</comment_count>
    <who name="Robert Kroeger">rjkroege</who>
    <bug_when>2011-09-12 13:00:26 -0700</bug_when>
    <thetext>Hi Adam,

Thanks for the useful feedback. I know it still needs a lot of work -- I was looking for this kind of early feedback that will stop me going down the wrong rabbit hole.

I&apos;ll ask Dimitri about taking a look but maybe you&apos;d have time for some quick follow up questions to your review -- inlined in your comments.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>465779</commentid>
    <comment_count>5</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2011-09-12 13:54:21 -0700</bug_when>
    <thetext>&gt; inlined in your comments.

I don&apos;t see your comments.  You might need to &quot;publish&quot; them for other folks to be able to see them.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>466486</commentid>
    <comment_count>6</comment_count>
    <who name="Robert Kroeger">rjkroege</who>
    <bug_when>2011-09-13 13:04:37 -0700</bug_when>
    <thetext>(In reply to comment #5)
&gt; &gt; inlined in your comments.
&gt; 
&gt; I don&apos;t see your comments.  You might need to &quot;publish&quot; them for other folks to be able to see them.

Indeed. I forgot to hit publish in another browser window.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>466576</commentid>
    <comment_count>7</comment_count>
      <attachid>106903</attachid>
    <who name="Robert Kroeger">rjkroege</who>
    <bug_when>2011-09-13 14:58:23 -0700</bug_when>
    <thetext>Comment on attachment 106903
Patch

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

&gt;&gt; Source/WebCore/page/EventHandler.cpp:2226
&gt;&gt; +        if (m_gestureEventWidgetTarget.get() &amp;&amp; m_gestureEventWidgetTarget-&gt;refCount() &gt; 1 &amp;&amp; passGestureEventToWidget(gestureEvent, m_gestureEventWidgetTarget.get()))
&gt; 
&gt; Crazy.  It&apos;s very rare to branch on the refCount of an object.  I suspect this isn&apos;t the right thing to do.

my aim was to deal with the case where JS execution disappeared the node between successive PlatformGestureEvents. Is it reasonable to follow the example of  how m_latchedWheelEventNode is handled (I plan on having a layout test for the case of ScrollStart ScrollUpdate* &lt;remove target&gt; ScrollEnd)

&gt;&gt; Source/WebCore/page/EventHandler.cpp:2232
&gt;&gt; +            RenderLayer* layer = ((RenderBox*)m_gestureTargetNode-&gt;renderer())-&gt;layer();
&gt; 
&gt; Please use C++ style casts.  How do you know its a RenderBox??

Because I only set m_gestureTargetNode if its renderer() was a RenderBox instance.

&gt;&gt; Source/WebCore/page/EventHandler.cpp:2269
&gt;&gt; +            node = node-&gt;shadowAncestorNode();
&gt; 
&gt; Why are we re-using the same variable?  /me is confused.

I&apos;ll ask Dimitri about the correct way of shadowdom. I was copying from EventHandler::handleWheelEvent.

&gt;&gt; Source/WebCore/page/EventHandler.cpp:2281
&gt;&gt; +                target = target-&gt;parent();
&gt; 
&gt; This looks like a lot of render tree manipulation to be doing outside of the rendering directory.

Having a GestureEventWithHitTestResult similar to MouseEventWithHitTestResult would be the right encapsulation of this search? It would reside in /rendering and would appear to get most/all of the necessary functionality from HitTestResult.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>487896</commentid>
    <comment_count>8</comment_count>
      <attachid>111852</attachid>
    <who name="Robert Kroeger">rjkroege</who>
    <bug_when>2011-10-20 14:56:54 -0700</bug_when>
    <thetext>Created attachment 111852
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>487898</commentid>
    <comment_count>9</comment_count>
    <who name="Robert Kroeger">rjkroege</who>
    <bug_when>2011-10-20 14:59:22 -0700</bug_when>
    <thetext>Hi Dimitri,

per Adam&apos;s suggestion, could you have a look at this and give me some feedback on approach/further issues to address?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>488512</commentid>
    <comment_count>10</comment_count>
      <attachid>111852</attachid>
    <who name="Dimitri Glazkov (Google)">dglazkov</who>
    <bug_when>2011-10-21 11:16:24 -0700</bug_when>
    <thetext>Comment on attachment 111852
Patch

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

&gt; Source/WebCore/page/EventHandler.cpp:2225
&gt; +    bool isOverWidget = result.isOverWidget();

This can move below the !node check.

&gt; Source/WebCore/page/EventHandler.cpp:2238
&gt; +    node = node-&gt;shadowAncestorNode();

What are you trying to do there? Can you explain a bit more?

&gt; Source/WebCore/page/EventHandler.cpp:2259
&gt; +    RenderBox* enclosingBox = renderer-&gt;enclosingBox();
&gt; +    while (enclosingBox &amp;&amp; !enclosingBox-&gt;canBeScrolledAndHasScrollableArea()) {
&gt; +        if (!enclosingBox-&gt;parent())
&gt; +            return false;
&gt; +        enclosingBox = enclosingBox-&gt;parent()-&gt;enclosingBox();
&gt; +    }
&gt; +    
&gt; +    if (enclosingBox &amp;&amp; enclosingBox-&gt;node() != enclosingBox-&gt;document()) {
&gt; +        RenderLayer* layer = enclosingBox-&gt;layer();
&gt; +        if (layer) {
&gt; +            layer-&gt;handleGestureEvent(gestureEvent);
&gt; +            return true;
&gt; +       }
&gt; +    }

looks like this should be something like enclosingScrollableLayer. I bet we already have code that does this.

&gt; Source/WebCore/page/EventHandler.cpp:2271
&gt; +// REVIEWER: I hunted for something like this in wtf::. Does it exist? If not,
&gt; +// is it worth adding a generic version?
&gt; +// Helper to auto-unlatch on end of scope.

Can you explain why you would need something like this?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>491210</commentid>
    <comment_count>11</comment_count>
      <attachid>111852</attachid>
    <who name="Robert Kroeger">rjkroege</who>
    <bug_when>2011-10-26 15:07:49 -0700</bug_when>
    <thetext>Comment on attachment 111852
Patch

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

&gt;&gt; Source/WebCore/page/EventHandler.cpp:2225
&gt;&gt; +    bool isOverWidget = result.isOverWidget();
&gt; 
&gt; This can move below the !node check.

done, next patch.

&gt;&gt; Source/WebCore/page/EventHandler.cpp:2238
&gt;&gt; +    node = node-&gt;shadowAncestorNode();
&gt; 
&gt; What are you trying to do there? Can you explain a bit more?

I was following along with how mouse wheel events would seem to be sent into the shadow DOM -- http://codesearch.google.com/codesearch#OAMlx_jo-ck/src/third_party/WebKit/Source/WebCore/page/EventHandler.cpp&amp;exact_package=chromium&amp;q=EventHandler&amp;type=cs&amp;l=2184 was the inspiration.

Reasonable or foolish?

&gt;&gt; Source/WebCore/page/EventHandler.cpp:2259
&gt;&gt; +    }
&gt; 
&gt; looks like this should be something like enclosingScrollableLayer. I bet we already have code that does this.

I tried using enclosingScrollableLayer and went on a voyage of discovery. In particular: it does not want to be used from EventHandler. (I would think I was attempting to create a layering violation.) So, I ended up dispatching the events a different way that seems &quot;more correct&quot; -- the code ended up shorter and simpler in the next patch.

&gt;&gt; Source/WebCore/page/EventHandler.cpp:2271
&gt;&gt; +// Helper to auto-unlatch on end of scope.
&gt; 
&gt; Can you explain why you would need something like this?

to always clear the RefPtr on leaving the enclosing scope in handleGestureEvent so that I don&apos;t preserve an unnecessary reference to the target node for the Scroll* sequence after the concluding ScrollEndType event.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>491229</commentid>
    <comment_count>12</comment_count>
      <attachid>112607</attachid>
    <who name="Robert Kroeger">rjkroege</who>
    <bug_when>2011-10-26 15:40:02 -0700</bug_when>
    <thetext>Created attachment 112607
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>491235</commentid>
    <comment_count>13</comment_count>
    <who name="Robert Kroeger">rjkroege</who>
    <bug_when>2011-10-26 15:47:19 -0700</bug_when>
    <thetext>Please take another look.

Notes:

* rniwa: added per Dimitri&apos;s suggestion. Would you be a more appropriate reviewer for this change?

* patch is not complete. Am looking for feedback on the approach/C++ code. The layout tests are not done yet to my satisfaction (they so far only show that the implementation is correct on Chromium) and there are still some missing bits for non-Chromium code paths.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>491262</commentid>
    <comment_count>14</comment_count>
      <attachid>112607</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2011-10-26 16:30:23 -0700</bug_when>
    <thetext>Comment on attachment 112607
Patch

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

&gt; Source/WebCore/ChangeLog:7
&gt; +

You need to explain what kind of changes you&apos;re making.

&gt; Source/WebCore/ChangeLog:16
&gt; +        (WebCore::wheelGranularityToScrollGranularity):
&gt; +        Helper method.
&gt; +        (WebCore::scrollNode):
&gt; +        Refactored.

Please put the description on the same line as the function name after :.

&gt; Source/WebCore/page/EventHandler.cpp:178
&gt; +static inline bool gestureNode(const PlatformGestureEvent&amp; e, Node* node)

Please don&apos;t use one-letter variable like e.

&gt; Source/WebCore/page/EventHandler.cpp:2238
&gt; +bool EventHandler::passGestureEventToWidgetHelper(PassRefPtr&lt;Node&gt; targetNode, const PlatformGestureEvent&amp; gestureEvent, const HitTestResult&amp; result)

Why does this function need to be a member function of Event Handler? It can be a static non-member function, no?

Why is this function called &quot;helper&quot;? We need a more descriptive name.

&gt; Source/WebCore/page/EventHandler.cpp:2249
&gt; +    if (isOverWidget &amp;&amp; target &amp;&amp; target-&gt;isWidget()) {
&gt; +       Widget* widget = toRenderWidget(target)-&gt;widget();
&gt; +        if (widget &amp;&amp; passGestureEventToWidget(gestureEvent, widget))

We prefer early exit over nested ifs.

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

Ditto. Also, typo: Fame -&gt; Frame.

&gt; Source/WebCore/page/EventHandler.cpp:2267
&gt; +// Helper to always unlatch target node on leaving scope.
&gt; +class Unlatcher {
&gt; +public:

What&apos;s the point of this class? I don&apos;t understand what you mean by &quot;unlatch&quot;.

Can&apos;t you just use RefPtr? What&apos;s the point of wrapping it with a class?

&gt; Source/WebCore/page/EventHandler.cpp:2283
&gt; +    Document* doc = m_frame-&gt;document();

Please don&apos;t use abbreviations like doc.

&gt; Source/WebCore/page/EventHandler.cpp:2292
&gt; +    LayoutPoint vPoint = view-&gt;windowToContents(gestureEvent.position());

What does v stand for? Please don&apos;t use abbreviations.

&gt; Source/WebCore/page/EventHandler.cpp:2303
&gt; +        // FIXME: Refactor this code to not hit test multiple times by using the code
&gt; +        // written for scroll.

Why are you splitting this comment into 2 lines? It fit the line perfectly.

&gt; Source/WebCore/page/EventHandler.cpp:2320
&gt; +        bool xscroll = node &amp;&amp; scrollNode(gestureEvent.deltaX(), ScrollByPixel, ScrollLeft, ScrollRight, node, (Node**)0);

Nit: camelCase. xScroll, and s/(Node**)0/0/;

&gt; Source/WebCore/page/EventHandler.cpp:2321
&gt; +        bool yscroll = node &amp;&amp; scrollNode(gestureEvent.deltaY(), ScrollByPixel, ScrollUp, ScrollDown, node, (Node**)0);

Ditto.

&gt; Source/WebCore/platform/ScrollAnimator.cpp:138
&gt; +        float deltaX = (event.deltaX() &lt; 0.f) ? max(event.deltaX(),  -float(maxForwardScrollDelta.width())) : min(event.deltaX(), float(maxBackwardScrollDelta.width()));

Nit: two spaces before -float. Also, please use C++-style casting e.g. static_cast&lt;float&gt;().

&gt; Source/WebCore/rendering/RenderBox.cpp:677
&gt; +    fprintf(stderr, &quot;RenderBox::gesture\n&quot;);

What&apos;s up with this fprintf?

&gt; Source/WebCore/rendering/RenderBox.cpp:678
&gt; +    RenderLayer* layer = layer();

I&apos;m surprised that this didn&apos;t cause a compilation error. r- because this is certainly going to cause a compilation failure on one of ports.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>491976</commentid>
    <comment_count>15</comment_count>
      <attachid>112759</attachid>
    <who name="Robert Kroeger">rjkroege</who>
    <bug_when>2011-10-27 14:47:33 -0700</bug_when>
    <thetext>Created attachment 112759
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>491980</commentid>
    <comment_count>16</comment_count>
      <attachid>112607</attachid>
    <who name="Robert Kroeger">rjkroege</who>
    <bug_when>2011-10-27 14:49:31 -0700</bug_when>
    <thetext>Comment on attachment 112607
Patch

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

&gt;&gt; Source/WebCore/ChangeLog:7
&gt;&gt; +
&gt; 
&gt; You need to explain what kind of changes you&apos;re making.

done in p4

&gt;&gt; Source/WebCore/ChangeLog:16
&gt;&gt; +        Refactored.
&gt; 
&gt; Please put the description on the same line as the function name after :.

done in p4

&gt;&gt; Source/WebCore/page/EventHandler.cpp:178
&gt;&gt; +static inline bool gestureNode(const PlatformGestureEvent&amp; e, Node* node)
&gt; 
&gt; Please don&apos;t use one-letter variable like e.

done, p4

&gt;&gt; Source/WebCore/page/EventHandler.cpp:2238
&gt;&gt; +bool EventHandler::passGestureEventToWidgetHelper(PassRefPtr&lt;Node&gt; targetNode, const PlatformGestureEvent&amp; gestureEvent, const HitTestResult&amp; result)
&gt; 
&gt; Why does this function need to be a member function of Event Handler? It can be a static non-member function, no?
&gt; 
&gt; Why is this function called &quot;helper&quot;? We need a more descriptive name.

done, p4

&gt;&gt; Source/WebCore/page/EventHandler.cpp:2249
&gt;&gt; +        if (widget &amp;&amp; passGestureEventToWidget(gestureEvent, widget))
&gt; 
&gt; We prefer early exit over nested ifs.

done, p4

&gt;&gt; Source/WebCore/page/EventHandler.cpp:2255
&gt;&gt; +bool EventHandler::passGestureEventToFameView(const PlatformGestureEvent&amp; gestureEvent)
&gt; 
&gt; Ditto. Also, typo: Fame -&gt; Frame.

done, p4. autocomplete for the non-win.

&gt;&gt; Source/WebCore/page/EventHandler.cpp:2267
&gt;&gt; +public:
&gt; 
&gt; What&apos;s the point of this class? I don&apos;t understand what you mean by &quot;unlatch&quot;.
&gt; 
&gt; Can&apos;t you just use RefPtr? What&apos;s the point of wrapping it with a class?

Background: handleGestureEvent receives a sequence of ScrollDownType, ScrollUpdateType*, ScrollEndType PGE sub-events. The ScrollDownType event chooses the target node and &quot;latches&quot; it in m_gestureTargetNode. Why &quot;latch&quot;: from the language in the WheelEvent handling code. The following ScrollUpdateType and ScrollEndType events all go to the original latching node (assuming it still exists.)

The latching node (stored in m_gestureTargetNode) should always be cleared on an ScrollEndType event even in the presence of early return from the containing block. Unlatcher does that. If there is a better way, please let me know.

&gt;&gt; Source/WebCore/page/EventHandler.cpp:2283
&gt;&gt; +    Document* doc = m_frame-&gt;document();
&gt; 
&gt; Please don&apos;t use abbreviations like doc.

fixed p4

&gt;&gt; Source/WebCore/page/EventHandler.cpp:2292
&gt;&gt; +    LayoutPoint vPoint = view-&gt;windowToContents(gestureEvent.position());
&gt; 
&gt; What does v stand for? Please don&apos;t use abbreviations.

done in p4

&gt;&gt; Source/WebCore/page/EventHandler.cpp:2303
&gt;&gt; +        // written for scroll.
&gt; 
&gt; Why are you splitting this comment into 2 lines? It fit the line perfectly.

done in p4

&gt;&gt; Source/WebCore/page/EventHandler.cpp:2320
&gt;&gt; +        bool xscroll = node &amp;&amp; scrollNode(gestureEvent.deltaX(), ScrollByPixel, ScrollLeft, ScrollRight, node, (Node**)0);
&gt; 
&gt; Nit: camelCase. xScroll, and s/(Node**)0/0/;

done in p4. yScroll too.

&gt;&gt; Source/WebCore/platform/ScrollAnimator.cpp:138
&gt;&gt; +        float deltaX = (event.deltaX() &lt; 0.f) ? max(event.deltaX(),  -float(maxForwardScrollDelta.width())) : min(event.deltaX(), float(maxBackwardScrollDelta.width()));
&gt; 
&gt; Nit: two spaces before -float. Also, please use C++-style casting e.g. static_cast&lt;float&gt;().

done, p4

&gt;&gt; Source/WebCore/rendering/RenderBox.cpp:677
&gt;&gt; +    fprintf(stderr, &quot;RenderBox::gesture\n&quot;);
&gt; 
&gt; What&apos;s up with this fprintf?

removed.

&gt;&gt; Source/WebCore/rendering/RenderBox.cpp:678
&gt;&gt; +    RenderLayer* layer = layer();
&gt; 
&gt; I&apos;m surprised that this didn&apos;t cause a compilation error. r- because this is certainly going to cause a compilation failure on one of ports.

it did. fixed in p4</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>491981</commentid>
    <comment_count>17</comment_count>
    <who name="Robert Kroeger">rjkroege</who>
    <bug_when>2011-10-27 14:50:32 -0700</bug_when>
    <thetext>Please take another look.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>526896</commentid>
    <comment_count>18</comment_count>
      <attachid>120475</attachid>
    <who name="Robert Kroeger">rjkroege</who>
    <bug_when>2011-12-23 12:41:45 -0800</bug_when>
    <thetext>Created attachment 120475
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>526908</commentid>
    <comment_count>19</comment_count>
      <attachid>120475</attachid>
    <who name="Early Warning System Bot">webkit-ews</who>
    <bug_when>2011-12-23 14:04:02 -0800</bug_when>
    <thetext>Comment on attachment 120475
Patch

Attachment 120475 did not pass qt-ews (qt):
Output: http://queues.webkit.org/results/11027213</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>526910</commentid>
    <comment_count>20</comment_count>
      <attachid>120475</attachid>
    <who name="Gyuyoung Kim">gyuyoung.kim</who>
    <bug_when>2011-12-23 14:04:55 -0800</bug_when>
    <thetext>Comment on attachment 120475
Patch

Attachment 120475 did not pass efl-ews (efl):
Output: http://queues.webkit.org/results/11017407</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>526916</commentid>
    <comment_count>21</comment_count>
      <attachid>120475</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2011-12-23 14:48:39 -0800</bug_when>
    <thetext>Comment on attachment 120475
Patch

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

&gt; Source/WebCore/platform/ScrollAnimator.h:120
&gt; +#if ENABLE(GESTURE_EVENTS)
&gt; +    int m_gestureEventTestRecord;
&gt; +#endif

It doesn&apos;t seem like a good idea to be adding state to the implementation that is only used for testing.  Perhaps I misunderstand what this is being used for.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>526920</commentid>
    <comment_count>22</comment_count>
      <attachid>120475</attachid>
    <who name="Gustavo Noronha (kov)">gustavo</who>
    <bug_when>2011-12-23 15:25:14 -0800</bug_when>
    <thetext>Comment on attachment 120475
Patch

Attachment 120475 did not pass gtk-ews (gtk):
Output: http://queues.webkit.org/results/11017426</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>526925</commentid>
    <comment_count>23</comment_count>
      <attachid>120475</attachid>
    <who name="Collabora GTK+ EWS bot">gustavo.noronha</who>
    <bug_when>2011-12-23 16:07:00 -0800</bug_when>
    <thetext>Comment on attachment 120475
Patch

Attachment 120475 did not pass gtk-ews (gtk):
Output: http://queues.webkit.org/results/11017419</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>528764</commentid>
    <comment_count>24</comment_count>
      <attachid>120475</attachid>
    <who name="Robert Kroeger">rjkroege</who>
    <bug_when>2012-01-03 07:29:11 -0800</bug_when>
    <thetext>Comment on attachment 120475
Patch

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

&gt;&gt; Source/WebCore/platform/ScrollAnimator.h:120
&gt;&gt; +#endif
&gt; 
&gt; It doesn&apos;t seem like a good idea to be adding state to the implementation that is only used for testing.  Perhaps I misunderstand what this is being used for.

Sam:

This is what it was for.  Since gesture events don&apos;t all reach JavaScript, I needed some way to prove that the implementation was correct.

A solution that occurred to me would be to create a testing subclass of ScrollAnimator for use in DumpRenderTree. Does this sound reasonable? Or is there an easier way? 

BTW: given that this patch addresses your FIXME, do you have any other general advice for improving the patch?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>530561</commentid>
    <comment_count>25</comment_count>
      <attachid>121315</attachid>
    <who name="Robert Kroeger">rjkroege</who>
    <bug_when>2012-01-05 12:55:11 -0800</bug_when>
    <thetext>Created attachment 121315
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>530565</commentid>
    <comment_count>26</comment_count>
    <who name="Robert Kroeger">rjkroege</who>
    <bug_when>2012-01-05 12:59:37 -0800</bug_when>
    <thetext>Ryosuke: could you take another look please?

I&apos;ve addressed weinig&apos;s comment but not perhaps in the nicest of ways.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>530570</commentid>
    <comment_count>27</comment_count>
      <attachid>121315</attachid>
    <who name="Gyuyoung Kim">gyuyoung.kim</who>
    <bug_when>2012-01-05 13:07:04 -0800</bug_when>
    <thetext>Comment on attachment 121315
Patch

Attachment 121315 did not pass efl-ews (efl):
Output: http://queues.webkit.org/results/11122059</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>530571</commentid>
    <comment_count>28</comment_count>
      <attachid>121315</attachid>
    <who name="Early Warning System Bot">webkit-ews</who>
    <bug_when>2012-01-05 13:07:31 -0800</bug_when>
    <thetext>Comment on attachment 121315
Patch

Attachment 121315 did not pass qt-ews (qt):
Output: http://queues.webkit.org/results/11147086</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>530618</commentid>
    <comment_count>29</comment_count>
      <attachid>121327</attachid>
    <who name="Robert Kroeger">rjkroege</who>
    <bug_when>2012-01-05 14:10:41 -0800</bug_when>
    <thetext>Created attachment 121327
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>530620</commentid>
    <comment_count>30</comment_count>
    <who name="Robert Kroeger">rjkroege</who>
    <bug_when>2012-01-05 14:12:29 -0800</bug_when>
    <thetext>Improved include guards.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>530642</commentid>
    <comment_count>31</comment_count>
      <attachid>121327</attachid>
    <who name="Gyuyoung Kim">gyuyoung.kim</who>
    <bug_when>2012-01-05 14:38:29 -0800</bug_when>
    <thetext>Comment on attachment 121327
Patch

Attachment 121327 did not pass efl-ews (efl):
Output: http://queues.webkit.org/results/11147119</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>530645</commentid>
    <comment_count>32</comment_count>
      <attachid>121332</attachid>
    <who name="Robert Kroeger">rjkroege</who>
    <bug_when>2012-01-05 14:44:36 -0800</bug_when>
    <thetext>Created attachment 121332
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>530913</commentid>
    <comment_count>33</comment_count>
      <attachid>121332</attachid>
    <who name="Gustavo Noronha (kov)">gustavo</who>
    <bug_when>2012-01-05 21:08:27 -0800</bug_when>
    <thetext>Comment on attachment 121332
Patch

Attachment 121332 did not pass gtk-ews (gtk):
Output: http://queues.webkit.org/results/11146211</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>561556</commentid>
    <comment_count>34</comment_count>
      <attachid>121332</attachid>
    <who name="James Robinson">jamesr</who>
    <bug_when>2012-02-21 20:45:42 -0800</bug_when>
    <thetext>Comment on attachment 121332
Patch

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

At least some of the code this patch is patching was deleted a bit back, so this doesn&apos;t apply.  If we plan to proceed with this patch I think you need to figure out how it fits in now.

&gt; Source/WebCore/platform/ScrollAnimator.cpp:136
&gt; +void ScrollAnimator::handleGestureEvent(const PlatformGestureEvent&amp; event)

this was deleted in http://trac.webkit.org/changeset/107823</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>568856</commentid>
    <comment_count>35</comment_count>
      <attachid>129738</attachid>
    <who name="Robert Kroeger">rjkroege</who>
    <bug_when>2012-03-01 13:26:50 -0800</bug_when>
    <thetext>Created attachment 129738
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>568874</commentid>
    <comment_count>36</comment_count>
      <attachid>129738</attachid>
    <who name="Build Bot">buildbot</who>
    <bug_when>2012-03-01 13:48:06 -0800</bug_when>
    <thetext>Comment on attachment 129738
Patch

Attachment 129738 did not pass mac-ews (mac):
Output: http://queues.webkit.org/results/11757589</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>568909</commentid>
    <comment_count>37</comment_count>
      <attachid>129738</attachid>
    <who name="James Robinson">jamesr</who>
    <bug_when>2012-03-01 14:21:57 -0800</bug_when>
    <thetext>Comment on attachment 129738
Patch

We discussed this offline. I think we&apos;ll be better off if ScrollView / ScrollAnimator / etc do not have to be explicitly aware of GestureEvents, but that we translate the gesture into a logical scroll earlier in the pipeline and then pass that through.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>569098</commentid>
    <comment_count>38</comment_count>
    <who name="Robert Kroeger">rjkroege</who>
    <bug_when>2012-03-01 17:31:11 -0800</bug_when>
    <thetext>per a discussion with jamesr: I&apos;m going to simplify this patch and divide it into three sub-patches that:

*  improve chromium EventSender::gestureEvent to send fully-populated GestureScroll* gestures.

*  show that interim version in ToT using mouse wheel events works correctly for GestureScrollUpdate messages.

*  change to EventHandler::handleGestureEvent to dispatch fling as an additional kind of scroll rather than the approach that I took here.

I&apos;ll leave this bug to track.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>780183</commentid>
    <comment_count>39</comment_count>
    <who name="Robert Kroeger">rjkroege</who>
    <bug_when>2012-11-30 09:52:10 -0800</bug_when>
    <thetext>Obsolete bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>106903</attachid>
            <date>2011-09-09 12:37:53 -0700</date>
            <delta_ts>2011-10-20 14:56:49 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-67822-20110909153837.patch</filename>
            <type>text/plain</type>
            <size>21077</size>
            <attacher name="Robert Kroeger">rjkroege</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogOTQ4NTcKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCBlYzE4NjQ5YmNjYjI2MGJm
ZTBlNGI2ODU2NDYzMzdjN2FhOTg2NWMxLi40ZmZmZTAwZmI5OGJlMjQyZjk5ZDQ5Mzc3NDE3MGU1
ZGE5NTgxZDYwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvU291
cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNTEgQEAKKzIwMTEtMDktMDkgIFJvYmVy
dCBLcm9lZ2VyICA8cmprcm9lZ2VAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFBsYXRmb3JtR2Vz
dHVyZUV2ZW50OjpoYW5kbGVHZXN0dXJlRXZlbnQgc2hvdWxkIGhpdCB0ZXN0IHdoaWxlIGRpc3Bh
dGNoaW5nIFNjcm9sbCogZXZlbnRzLgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9Njc4MjIKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMh
KS4KKworICAgICAgICBObyBuZXcgdGVzdHMuIChPT1BTISkgLS0gY29taW5nIGluIGEgZnV0dXJl
IHJldmlzaW9uIG9mIHRoZSBwYXRjaC4KKworICAgICAgICAqIHBhZ2UvRXZlbnRIYW5kbGVyLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OkV2ZW50SGFuZGxlcjo6aGFuZGxlR2VzdHVyZUV2ZW50KToK
KyAgICAgICAgRmluZCB0aGUgdGFyZ2V0IGZvciBTY3JvbGwqIFBsYXRmb3JtR2VzdHVyZUV2ZW50
cyBvbiBTY3JvbGxCZWdpbiwKKyAgICAgICAgc3RvcmUgdGhpcyBzYWZlbHkgYW5kIGRpc3BhdGNo
IHRoZSBlbnRpcmUgc3VjY2Vzc2lvbiBvZiBTY3JvbGwqCisgICAgICAgIGV2ZW50cyB0byB0aGUg
dGFyZ2V0IFNjcm9sbGFibGVBcmVhIGluY2x1ZGluZyBvbmUgaW4gYSBkaWZmZXJlbnQKKyAgICAg
ICAgV2lkZ2V0LgorICAgICAgICAqIHBhZ2UvRXZlbnRIYW5kbGVyLmg6CisgICAgICAgIEFkZGVk
IHJlZi1jb3VudGVkIHN0YXRlIHRvIHRyYWNrIHRoZSBjdXJyZW50IHRhcmdldCBvZiBhIHNlcXVl
bmNlCisgICAgICAgIG9mIFNjcm9sbCogZXZlbnRzLgorICAgICAgICAqIHBhZ2UvYnJldy9FdmVu
dEhhbmRsZXJCcmV3LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkV2ZW50SGFuZGxlcjo6cGFzc0dl
c3R1cmVFdmVudFRvV2lkZ2V0KToKKyAgICAgICAgKiBwYWdlL2Nocm9taXVtL0V2ZW50SGFuZGxl
ckNocm9taXVtLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkV2ZW50SGFuZGxlcjo6cGFzc0dlc3R1
cmVFdmVudFRvV2lkZ2V0KToKKyAgICAgICAgRGlzcGF0Y2ggZ2VzdHVyZSBldmVudHMgaW50byBh
IGNoaWxkIHdpZGdldC4KKyAgICAgICAgKiBwYWdlL2VmbC9FdmVudEhhbmRsZXJFZmwuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6RXZlbnRIYW5kbGVyOjpwYXNzR2VzdHVyZUV2ZW50VG9XaWRnZXQp
OgorICAgICAgICAqIHBhZ2UvZ3RrL0V2ZW50SGFuZGxlckd0ay5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpFdmVudEhhbmRsZXI6OnBhc3NHZXN0dXJlRXZlbnRUb1dpZGdldCk6CisgICAgICAgICog
cGFnZS9oYWlrdS9FdmVudEhhbmRsZXJIYWlrdS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpFdmVu
dEhhbmRsZXI6OnBhc3NHZXN0dXJlRXZlbnRUb1dpZGdldCk6CisgICAgICAgICogcGFnZS9tYWMv
RXZlbnRIYW5kbGVyTWFjLm1tOgorICAgICAgICAoV2ViQ29yZTo6RXZlbnRIYW5kbGVyOjpwYXNz
V2hlZWxFdmVudFRvV2lkZ2V0KToKKyAgICAgICAgRGlzcGF0Y2ggZ2VzdHVyZSBldmVudHMgaW50
byBhIGNoaWxkIHdpZGdldC4KKyAgICAgICAgKiBwYWdlL3F0L0V2ZW50SGFuZGxlclF0LmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OkV2ZW50SGFuZGxlcjo6cGFzc0dlc3R1cmVFdmVudFRvV2lkZ2V0
KToKKyAgICAgICAgRGlzcGF0Y2ggZ2VzdHVyZSBldmVudHMgaW50byBhIGNoaWxkIHdpZGdldC4K
KyAgICAgICAgKiBwYWdlL3dpbi9FdmVudEhhbmRsZXJXaW4uY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6RXZlbnRIYW5kbGVyOjpwYXNzR2VzdHVyZUV2ZW50VG9XaWRnZXQpOgorICAgICAgICAqIHBh
Z2Uvd3gvRXZlbnRIYW5kbGVyV3guY3BwOgorICAgICAgICAoV2ViQ29yZTo6RXZlbnRIYW5kbGVy
OjpwYXNzR2VzdHVyZUV2ZW50VG9XaWRnZXQpOgorICAgICAgICAqIHBsYXRmb3JtL1BsYXRmb3Jt
R2VzdHVyZUV2ZW50Lmg6CisgICAgICAgIChXZWJDb3JlOjpQbGF0Zm9ybUdlc3R1cmVFdmVudDo6
UGxhdGZvcm1HZXN0dXJlRXZlbnQpOgorICAgICAgICAoV2ViQ29yZTo6UGxhdGZvcm1HZXN0dXJl
RXZlbnQ6OmFjY2VwdCk6CisgICAgICAgIChXZWJDb3JlOjpQbGF0Zm9ybUdlc3R1cmVFdmVudDo6
aWdub3JlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9TY3JvbGxBbmltYXRvci5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpTY3JvbGxBbmltYXRvcjo6aGFuZGxlR2VzdHVyZUV2ZW50KToKKyAgICAgICAg
aGFuZGxlR2VzdHVyZUV2ZW50IGltcGxlbWVudGF0aW9uIGZvciBzY3JvbGwuCisgICAgICAgICog
cGxhdGZvcm0vU2Nyb2xsQW5pbWF0b3IuaDoKKwogMjAxMS0wOS0wOCAgQWJoaXNoZWsgQXJ5YSAg
PGluZmVybm9AY2hyb21pdW0ub3JnPgogCiAgICAgICAgIDpiZWZvcmUgY29udGVudCByZW5kZXJp
bmcgaXNzdWVzIHdpdGggbGlzdCBtYXJrZXJzIGFuZCBydW4taW5zLgpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcGFnZS9FdmVudEhhbmRsZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGFnZS9F
dmVudEhhbmRsZXIuY3BwCmluZGV4IDRlNDY3ZWEyYzE2YjI1ZTk5YjdiMGYwNDVkYjA3Y2ViZWRi
ZThiNmMuLjBhOGFkNDEzYTZhZjc1ZjljMDQwOWViOTU4M2Q4NWM1ZWQ3YTY4MTkgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRXZlbnRIYW5kbGVyLmNwcAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9wYWdlL0V2ZW50SGFuZGxlci5jcHAKQEAgLTIyMDMsMTAgKzIyMDMsNyBAQCB2b2lkIEV2
ZW50SGFuZGxlcjo6ZGVmYXVsdFdoZWVsRXZlbnRIYW5kbGVyKE5vZGUqIHN0YXJ0Tm9kZSwgV2hl
ZWxFdmVudCogd2hlZWxFdgogI2lmIEVOQUJMRShHRVNUVVJFX0VWRU5UUykKIGJvb2wgRXZlbnRI
YW5kbGVyOjpoYW5kbGVHZXN0dXJlRXZlbnQoY29uc3QgUGxhdGZvcm1HZXN0dXJlRXZlbnQmIGdl
c3R1cmVFdmVudCkKIHsKLSAgICAvLyBGSVhNRTogVGhpcyBzaG91bGQgaGl0IHRlc3QgYW5kIGdv
IHRvIHRoZSBjb3JyZWN0IHN1YmZyYW1lIHJhdGhlciB0aGFuIAotICAgIC8vIGFsd2F5cyBzZW5k
aW5nIGdlc3R1cmVzIHRvIHRoZSBtYWluIGZyYW1lIG9ubHkuIFdlIHNob3VsZCBhbHNvIGVuc3Vy
ZQotICAgIC8vIHRoYXQgaWYgYSBmcmFtZSBnZXRzIGEgZ2VzdHVyZSBiZWdpbiBnZXN0dXJlLCBp
dCBnZXRzIHRoZSBjb3JyZXNwb25kaW5nCi0gICAgLy8gZW5kIGdlc3R1cmUgYXMgd2VsbC4KKyAg
ICBEb2N1bWVudCogZG9jID0gbV9mcmFtZS0+ZG9jdW1lbnQoKTsKIAogICAgIHN3aXRjaCAoZ2Vz
dHVyZUV2ZW50LnR5cGUoKSkgewogICAgIGNhc2UgUGxhdGZvcm1HZXN0dXJlRXZlbnQ6OlRhcERv
d25UeXBlOgpAQCAtMjIyNCwyMyArMjIyMSw5MCBAQCBib29sIEV2ZW50SGFuZGxlcjo6aGFuZGxl
R2VzdHVyZUV2ZW50KGNvbnN0IFBsYXRmb3JtR2VzdHVyZUV2ZW50JiBnZXN0dXJlRXZlbnQpCiAg
ICAgY2FzZSBQbGF0Zm9ybUdlc3R1cmVFdmVudDo6RG91YmxlVGFwVHlwZToKICAgICAgICAgYnJl
YWs7CiAgICAgY2FzZSBQbGF0Zm9ybUdlc3R1cmVFdmVudDo6U2Nyb2xsVXBkYXRlVHlwZTogewot
ICAgICAgICBjb25zdCBmbG9hdCB0aWNrRGl2aXNvciA9IChmbG9hdClXaGVlbEV2ZW50Ojp0aWNr
TXVsdGlwbGllcjsKLSAgICAgICAgLy8gRklYTUU6IFJlcGxhY2UgdGhpcyBpbnRlcmltIGltcGxl
bWVudGF0aW9uIG9uY2UgdGhlIGFib3ZlIGZpeG1lIGhhcyBiZWVuIGFkZHJlc3NlZC4KLSAgICAg
ICAgSW50UG9pbnQgcG9pbnQoZ2VzdHVyZUV2ZW50LnBvc2l0aW9uKCkueCgpLCBnZXN0dXJlRXZl
bnQucG9zaXRpb24oKS55KCkpOwotICAgICAgICBJbnRQb2ludCBnbG9iYWxQb2ludChnZXN0dXJl
RXZlbnQuZ2xvYmFsUG9zaXRpb24oKS54KCksIGdlc3R1cmVFdmVudC5nbG9iYWxQb3NpdGlvbigp
LnkoKSk7Ci0gICAgICAgIFBsYXRmb3JtV2hlZWxFdmVudCBzeW50aGV0aWNXaGVlbEV2ZW50KHBv
aW50LCBnbG9iYWxQb2ludCwgZ2VzdHVyZUV2ZW50LmRlbHRhWCgpLCBnZXN0dXJlRXZlbnQuZGVs
dGFZKCksIGdlc3R1cmVFdmVudC5kZWx0YVgoKSAvIHRpY2tEaXZpc29yLCBnZXN0dXJlRXZlbnQu
ZGVsdGFZKCkgLyB0aWNrRGl2aXNvciwgU2Nyb2xsQnlQaXhlbFdoZWVsRXZlbnQsIC8qIGlzQWNj
ZXB0ZWQgKi8gZmFsc2UsIGdlc3R1cmVFdmVudC5zaGlmdEtleSgpLCBnZXN0dXJlRXZlbnQuY3Ry
bEtleSgpLCBnZXN0dXJlRXZlbnQuYWx0S2V5KCksIGdlc3R1cmVFdmVudC5tZXRhS2V5KCkpOwot
ICAgICAgICBoYW5kbGVXaGVlbEV2ZW50KHN5bnRoZXRpY1doZWVsRXZlbnQpOworICAgICAgICAv
LyBJZiB0aGVyZSBpcyBvbmx5IG9uZSByZWZlcmVuY2UsIGl0J3Mgb3VycyBhbmQgc29tZW9uZSBl
bHNlIGhhcyBkZWxldGVkIHRoZSB0YXJnZXQKKyAgICAgICAgLy8gc2luY2UgdGhlIFNjcm9sbEJl
Z2luVHlwZSBzbyBza2lwIGRlbGl2ZXJpbmcgdGhlIGV2ZW50IGFuZCBmcmVlIHRoZSByZWZlcmVu
Y2UuCisgICAgICAgIGlmIChtX2dlc3R1cmVFdmVudFdpZGdldFRhcmdldC5nZXQoKSAmJiBtX2dl
c3R1cmVFdmVudFdpZGdldFRhcmdldC0+cmVmQ291bnQoKSA+IDEgJiYgcGFzc0dlc3R1cmVFdmVu
dFRvV2lkZ2V0KGdlc3R1cmVFdmVudCwgbV9nZXN0dXJlRXZlbnRXaWRnZXRUYXJnZXQuZ2V0KCkp
KQorICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIGlmIChtX2dlc3R1cmVFdmVudFdp
ZGdldFRhcmdldC5nZXQoKSAmJiBtX2dlc3R1cmVFdmVudFdpZGdldFRhcmdldC0+aGFzT25lUmVm
KCkpCisgICAgICAgICAgICBtX2dlc3R1cmVFdmVudFdpZGdldFRhcmdldC5jbGVhcigpOworCisg
ICAgICAgIGlmIChtX2dlc3R1cmVUYXJnZXROb2RlLmdldCgpICYmIG1fZ2VzdHVyZVRhcmdldE5v
ZGUtPnJlZkNvdW50KCkgPiAxKSB7CisgICAgICAgICAgICBSZW5kZXJMYXllciogbGF5ZXIgPSAo
KFJlbmRlckJveCopbV9nZXN0dXJlVGFyZ2V0Tm9kZS0+cmVuZGVyZXIoKSktPmxheWVyKCk7Cisg
ICAgICAgICAgICBsYXllci0+aGFuZGxlR2VzdHVyZUV2ZW50KGdlc3R1cmVFdmVudCk7CisgICAg
ICAgIH0gZWxzZSBpZiAobV9nZXN0dXJlVGFyZ2V0Tm9kZS5nZXQoKSAmJiBtX2dlc3R1cmVUYXJn
ZXROb2RlLT5oYXNPbmVSZWYoKSkKKyAgICAgICAgICAgIG1fZ2VzdHVyZVRhcmdldE5vZGUuY2xl
YXIoKTsKKworICAgICAgICBGcmFtZVZpZXcqIHZpZXcgPSBtX2ZyYW1lLT52aWV3KCk7CisgICAg
ICAgIGlmICghdmlldykKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgc2V0RnJh
bWVXYXNTY3JvbGxlZEJ5VXNlcigpOworICAgICAgICB2aWV3LT5oYW5kbGVHZXN0dXJlRXZlbnQo
Z2VzdHVyZUV2ZW50KTsKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQotICAgIGNhc2UgUGxh
dGZvcm1HZXN0dXJlRXZlbnQ6OlNjcm9sbEJlZ2luVHlwZToKLSAgICBjYXNlIFBsYXRmb3JtR2Vz
dHVyZUV2ZW50OjpTY3JvbGxFbmRUeXBlOgorICAgIGNhc2UgUGxhdGZvcm1HZXN0dXJlRXZlbnQ6
OlNjcm9sbEJlZ2luVHlwZTogewogICAgICAgICBGcmFtZVZpZXcqIHZpZXcgPSBtX2ZyYW1lLT52
aWV3KCk7CiAgICAgICAgIGlmICghdmlldykKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAg
CisgICAgICAgIExheW91dFBvaW50IHZQb2ludCA9IHZpZXctPndpbmRvd1RvQ29udGVudHMoZ2Vz
dHVyZUV2ZW50LnBvc2l0aW9uKCkpOworICAgICAgICBOb2RlKiBub2RlOworICAgICAgICBib29s
IGlzT3ZlcldpZGdldDsKKyAgIAorICAgICAgICBIaXRUZXN0UmVxdWVzdCByZXF1ZXN0KEhpdFRl
c3RSZXF1ZXN0OjpSZWFkT25seSk7CisgICAgICAgIEhpdFRlc3RSZXN1bHQgcmVzdWx0KHZQb2lu
dCk7CisgICAgICAgIGRvYy0+cmVuZGVyVmlldygpLT5sYXllcigpLT5oaXRUZXN0KHJlcXVlc3Qs
IHJlc3VsdCk7CiAKLSAgICAgICAgdmlldy0+aGFuZGxlR2VzdHVyZUV2ZW50KGdlc3R1cmVFdmVu
dCk7CisgICAgICAgIG5vZGUgPSByZXN1bHQuaW5uZXJOb2RlKCk7CisgICAgICAgIGlzT3Zlcldp
ZGdldCA9IHJlc3VsdC5pc092ZXJXaWRnZXQoKTsKKyAgICAgICAgCisgICAgICAgIGlmIChub2Rl
KSB7CisgICAgICAgICAgICBSZW5kZXJPYmplY3QqIHRhcmdldCA9IG5vZGUtPnJlbmRlcmVyKCk7
CisKKyAgICAgICAgICAgIGlmIChpc092ZXJXaWRnZXQgJiYgdGFyZ2V0ICYmIHRhcmdldC0+aXNX
aWRnZXQoKSkgeworICAgICAgICAgICAgICAgIG1fZ2VzdHVyZUV2ZW50V2lkZ2V0VGFyZ2V0ID0g
dG9SZW5kZXJXaWRnZXQodGFyZ2V0KS0+d2lkZ2V0KCk7CisgICAgICAgICAgICAgICAgaWYgKG1f
Z2VzdHVyZUV2ZW50V2lkZ2V0VGFyZ2V0ICYmIHBhc3NHZXN0dXJlRXZlbnRUb1dpZGdldChnZXN0
dXJlRXZlbnQsIG1fZ2VzdHVyZUV2ZW50V2lkZ2V0VGFyZ2V0LmdldCgpKSkKKyAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIG5vZGUg
PSBub2RlLT5zaGFkb3dBbmNlc3Rvck5vZGUoKTsKKyAgICAgICAgICAgIHRhcmdldCA9IG5vZGUt
PnJlbmRlcmVyKCk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIHdoaWxlICh0YXJnZXQgJiYg
IXRhcmdldC0+aXNSb290KCkpIHsKKyAgICAgICAgICAgICAgICBpZiAodGFyZ2V0LT5pc0JveCgp
KSB7CisgICAgICAgICAgICAgICAgICAgIFJlbmRlckJveCogcmIgPSAoUmVuZGVyQm94Kil0YXJn
ZXQ7CisgICAgICAgICAgICAgICAgICAgIGlmIChyYi0+Y2FuQmVTY3JvbGxlZEFuZEhhc1Njcm9s
bGFibGVBcmVhKCkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIG1fZ2VzdHVyZVRhcmdldE5v
ZGUgPSByYi0+bm9kZSgpOworICAgICAgICAgICAgICAgICAgICAgICAgcmItPmxheWVyKCktPmhh
bmRsZUdlc3R1cmVFdmVudChnZXN0dXJlRXZlbnQpOworICAgICAgICAgICAgICAgICAgICAgICAg
cmV0dXJuIHRydWU7IC8vIEZJWE1FOiBQcm92ZSB0aGF0IHRoaXMgaXMgY29ycmVjdC4KKyAgICAg
ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB0YXJn
ZXQgPSB0YXJnZXQtPnBhcmVudCgpOworICAgICAgICAgICAgfQorICAgICAgICB9CiAgICAgICAg
IHJldHVybiB0cnVlOwogICAgIH0KKyAgICBjYXNlIFBsYXRmb3JtR2VzdHVyZUV2ZW50OjpTY3Jv
bGxFbmRUeXBlOiB7CisgICAgICAgIGlmIChtX2dlc3R1cmVFdmVudFdpZGdldFRhcmdldC5nZXQo
KSAmJiBtX2dlc3R1cmVFdmVudFdpZGdldFRhcmdldC0+cmVmQ291bnQoKSA+IDEgJiYgcGFzc0dl
c3R1cmVFdmVudFRvV2lkZ2V0KGdlc3R1cmVFdmVudCwgbV9nZXN0dXJlRXZlbnRXaWRnZXRUYXJn
ZXQuZ2V0KCkpKSB7CisgICAgICAgICAgICBtX2dlc3R1cmVFdmVudFdpZGdldFRhcmdldC5jbGVh
cigpOworICAgICAgICAgICAgbV9nZXN0dXJlVGFyZ2V0Tm9kZS5jbGVhcigpOworICAgICAgICAg
ICAgcmV0dXJuIHRydWU7CisgICAgICAgICB9IGVsc2UgaWYgKG1fZ2VzdHVyZUV2ZW50V2lkZ2V0
VGFyZ2V0LmdldCgpICYmIG1fZ2VzdHVyZUV2ZW50V2lkZ2V0VGFyZ2V0LT5oYXNPbmVSZWYoKSkK
KyAgICAgICAgICAgIG1fZ2VzdHVyZUV2ZW50V2lkZ2V0VGFyZ2V0LmNsZWFyKCk7CisKKyAgICAg
ICAgaWYgKG1fZ2VzdHVyZVRhcmdldE5vZGUuZ2V0KCkgJiYgbV9nZXN0dXJlVGFyZ2V0Tm9kZS0+
cmVmQ291bnQoKSA+IDEpIHsKKyAgICAgICAgICAgIFJlbmRlckxheWVyKiBsYXllciA9ICgoUmVu
ZGVyQm94KiltX2dlc3R1cmVUYXJnZXROb2RlLT5yZW5kZXJlcigpKS0+bGF5ZXIoKTsKKyAgICAg
ICAgICAgIGxheWVyLT5oYW5kbGVHZXN0dXJlRXZlbnQoZ2VzdHVyZUV2ZW50KTsKKyAgICAgICAg
ICAgIG1fZ2VzdHVyZUV2ZW50V2lkZ2V0VGFyZ2V0LmNsZWFyKCk7CisgICAgICAgICAgICBtX2dl
c3R1cmVUYXJnZXROb2RlLmNsZWFyKCk7CisgICAgICAgIH0gZWxzZSBpZiAobV9nZXN0dXJlVGFy
Z2V0Tm9kZS5nZXQoKSAmJiBtX2dlc3R1cmVUYXJnZXROb2RlLT5oYXNPbmVSZWYoKSkKKyAgICAg
ICAgICAgIG1fZ2VzdHVyZVRhcmdldE5vZGUuY2xlYXIoKTsKKworICAgICAgICBGcmFtZVZpZXcq
IHZpZXcgPSBtX2ZyYW1lLT52aWV3KCk7CisgICAgICAgIGlmICghdmlldykKKyAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKKyAgICAgICAgdmlldy0+aGFuZGxlR2VzdHVyZUV2ZW50KGdlc3R1cmVF
dmVudCk7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0gfQogICAgIHJldHVybiB0cnVlOwog
fQogI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL0V2ZW50SGFuZGxlci5o
IGIvU291cmNlL1dlYkNvcmUvcGFnZS9FdmVudEhhbmRsZXIuaAppbmRleCBjZjJmZTgxNDNlMmNm
OWE1YmNiMDQ4ODcwNjNhM2NkZjNmNjFiMzE1Li4xZmY3YzdiODI0NzkyMGZmODY1MTllM2E1NTg3
OTMwNWZhYWQwYzI3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL0V2ZW50SGFuZGxl
ci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRXZlbnRIYW5kbGVyLmgKQEAgLTMwMCw2ICsz
MDAsOSBAQCBwcml2YXRlOgogCiAgICAgYm9vbCBwYXNzTW91c2VEb3duRXZlbnRUb1dpZGdldChX
aWRnZXQqKTsKICAgICBib29sIHBhc3NXaGVlbEV2ZW50VG9XaWRnZXQoUGxhdGZvcm1XaGVlbEV2
ZW50JiwgV2lkZ2V0Kik7CisjaWYgRU5BQkxFKEdFU1RVUkVfRVZFTlRTKQorICAgIGJvb2wgcGFz
c0dlc3R1cmVFdmVudFRvV2lkZ2V0KGNvbnN0IFBsYXRmb3JtR2VzdHVyZUV2ZW50JiwgV2lkZ2V0
Kik7CisjZW5kaWYKIAogICAgIHZvaWQgZGVmYXVsdFNwYWNlRXZlbnRIYW5kbGVyKEtleWJvYXJk
RXZlbnQqKTsKICAgICB2b2lkIGRlZmF1bHRCYWNrc3BhY2VFdmVudEhhbmRsZXIoS2V5Ym9hcmRF
dmVudCopOwpAQCAtNDIxLDYgKzQyNCwxMSBAQCBwcml2YXRlOgogICAgIFRvdWNoVGFyZ2V0TWFw
IG1fb3JpZ2luYXRpbmdUb3VjaFBvaW50VGFyZ2V0czsKICAgICBib29sIG1fdG91Y2hQcmVzc2Vk
OwogI2VuZGlmCisjaWYgRU5BQkxFKEdFU1RVUkVfRVZFTlRTKQorICAgIFJlZlB0cjxXaWRnZXQ+
IG1fZ2VzdHVyZUV2ZW50V2lkZ2V0VGFyZ2V0OworICAgIFJlZlB0cjxOb2RlPiBtX2dlc3R1cmVU
YXJnZXROb2RlOworI2VuZGlmCisKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvYnJldy9FdmVudEhhbmRsZXJCcmV3LmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL3BhZ2UvYnJldy9FdmVudEhhbmRsZXJCcmV3LmNwcAppbmRleCBhZTVkODNi
NGM2NjRhODg3OTEwZTNmYWI0OWI0NjdkN2ExYzk2OWU4Li5jOGMzMjc2NzMxYzBiNzJhNGVhNzRk
OGUyYjQ4NjhmOTliZTVkMDk2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL2JyZXcv
RXZlbnRIYW5kbGVyQnJldy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGFnZS9icmV3L0V2ZW50
SGFuZGxlckJyZXcuY3BwCkBAIC0xMDMsNiArMTAzLDE0IEBAIGJvb2wgRXZlbnRIYW5kbGVyOjpw
YXNzV2hlZWxFdmVudFRvV2lkZ2V0KFBsYXRmb3JtV2hlZWxFdmVudCYgZXZlbnQsIFdpZGdldCog
d2lkCiAgICAgcmV0dXJuIGZhbHNlOwogfQogCisjaWYgRU5BQkxFKEdFU1RVUkVfRVZFTlRTKQor
Ym9vbCBFdmVudEhhbmRsZXI6OnBhc3NHZXN0dXJlRXZlbnRUb1dpZGdldChQbGF0Zm9ybUdlc3R1
cmVFdmVudCYsIFdpZGdldCopCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICByZXR1cm4g
ZmFsc2U7Cit9CisjZW5kaWYKKwogYm9vbCBFdmVudEhhbmRsZXI6OnBhc3NNb3VzZVByZXNzRXZl
bnRUb1N1YmZyYW1lKE1vdXNlRXZlbnRXaXRoSGl0VGVzdFJlc3VsdHMmIG1ldiwgRnJhbWUqIHN1
YmZyYW1lKQogewogICAgIHJldHVybiBwYXNzU3ViZnJhbWVFdmVudFRvU3ViZnJhbWUobWV2LCBz
dWJmcmFtZSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL2Nocm9taXVtL0V2ZW50
SGFuZGxlckNocm9taXVtLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvY2hyb21pdW0vRXZlbnRI
YW5kbGVyQ2hyb21pdW0uY3BwCmluZGV4IDQwYTcxYWIxMWE1MzFhYjE1MGM2MTgxNGNiYTRmNjI4
ZDM1ZWIzY2UuLjM1MWE3ZjVmN2M5MTM5MDc2NjJkYjI0YjA5YzA4NGM1NWU5ZWJmNWEgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvY2hyb21pdW0vRXZlbnRIYW5kbGVyQ2hyb21pdW0u
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvY2hyb21pdW0vRXZlbnRIYW5kbGVyQ2hyb21p
dW0uY3BwCkBAIC00NCw2ICs0NCwxMSBAQAogI2luY2x1ZGUgIlBsYXRmb3JtV2hlZWxFdmVudC5o
IgogI2luY2x1ZGUgIlJlbmRlcldpZGdldC5oIgogCisjaWYgRU5BQkxFKEdFU1RVUkVfRVZFTlRT
KSB8fCBFTkFCTEUoR0VTVFVSRV9SRUNPR05JWkVSKQorI2luY2x1ZGUgIlBsYXRmb3JtR2VzdHVy
ZUV2ZW50LmgiCisjZW5kaWYKKworCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKICNpZiBPUyhEQVJX
SU4pCkBAIC0xNjQsNCArMTY5LDIxIEBAIGJvb2wgRXZlbnRIYW5kbGVyOjpzaG91bGRUdXJuVmVy
dGljYWxUaWNrc0ludG9Ib3Jpem9udGFsKGNvbnN0IEhpdFRlc3RSZXN1bHQmIHJlCiB9CiAjZW5k
aWYKIAorI2lmIEVOQUJMRShHRVNUVVJFX0VWRU5UUykKK2Jvb2wgRXZlbnRIYW5kbGVyOjpwYXNz
R2VzdHVyZUV2ZW50VG9XaWRnZXQoY29uc3QgUGxhdGZvcm1HZXN0dXJlRXZlbnQmIGdlc3R1cmVF
dmVudCwgV2lkZ2V0KiB3aWRnZXQpCit7CisgICAgLy8gV2UgY2FuIHNvbWV0aW1lcyBnZXQgYSBu
dWxsIHdpZGdldCEgRXZlbnRIYW5kbGVyTWFjIGhhbmRsZXMgYSBudWxsCisgICAgLy8gd2lkZ2V0
IGJ5IHJldHVybmluZyBmYWxzZSwgc28gd2UgZG8gdGhlIHNhbWUuCisgICAgaWYgKCF3aWRnZXQp
CisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIC8vIElmIG5vdCBhIEZyYW1lVmlldywgdGhl
biBwcm9iYWJseSBhIHBsdWdpbiB3aWRnZXQuIFRob3NlIHdpbGwgcmVjZWl2ZQorICAgIC8vIHRo
ZSBldmVudCB2aWEgYW4gRXZlbnRUYXJnZXROb2RlIGRpc3BhdGNoIHdoZW4gdGhpcyByZXR1cm5z
IGZhbHNlLgorICAgIGlmICghd2lkZ2V0LT5pc0ZyYW1lVmlldygpKQorICAgICAgICByZXR1cm4g
ZmFsc2U7CisKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8RnJhbWVWaWV3Kj4od2lkZ2V0KS0+ZnJh
bWUoKS0+ZXZlbnRIYW5kbGVyKCktPmhhbmRsZUdlc3R1cmVFdmVudChnZXN0dXJlRXZlbnQpOwor
fQorI2VuZGlmCisKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3BhZ2UvZWZsL0V2ZW50SGFuZGxlckVmbC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wYWdl
L2VmbC9FdmVudEhhbmRsZXJFZmwuY3BwCmluZGV4IDNhM2M0ZGQyMDYxNjU4ZThkMGVhZDdlNTVi
YmVjZWU5ZGY5NjM2MmIuLjJiOWRhY2NiY2NmMjhhMTdlZDg2NzI1NmFmNGVhZGZmMmRjNGVhZGYg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvZWZsL0V2ZW50SGFuZGxlckVmbC5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvcGFnZS9lZmwvRXZlbnRIYW5kbGVyRWZsLmNwcApAQCAtOTUs
NiArOTUsMTQgQEAgYm9vbCBFdmVudEhhbmRsZXI6OnBhc3NXaGVlbEV2ZW50VG9XaWRnZXQoUGxh
dGZvcm1XaGVlbEV2ZW50JiBldmVudCwgV2lkZ2V0KiB3aWQKICAgICByZXR1cm4gc3RhdGljX2Nh
c3Q8RnJhbWVWaWV3Kj4od2lkZ2V0KS0+ZnJhbWUoKS0+ZXZlbnRIYW5kbGVyKCktPmhhbmRsZVdo
ZWVsRXZlbnQoZXZlbnQpOwogfQogCisjaWYgRU5BQkxFKEdFU1RVUkVfRVZFTlRTKQorYm9vbCBF
dmVudEhhbmRsZXI6OnBhc3NHZXN0dXJlRXZlbnRUb1dpZGdldChjb25zdCBQbGF0Zm9ybUdlc3R1
cmVFdmVudCYsIFdpZGdldCopCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICByZXR1cm4g
ZmFsc2U7Cit9CisjZW5kaWYKKwogUGFzc1JlZlB0cjxDbGlwYm9hcmQ+IEV2ZW50SGFuZGxlcjo6
Y3JlYXRlRHJhZ2dpbmdDbGlwYm9hcmQoKSBjb25zdAogewogICAgIHJldHVybiBDbGlwYm9hcmRF
Zmw6OmNyZWF0ZShDbGlwYm9hcmRXcml0YWJsZSwgQ2xpcGJvYXJkOjpEcmFnQW5kRHJvcCk7CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL2d0ay9FdmVudEhhbmRsZXJHdGsuY3BwIGIv
U291cmNlL1dlYkNvcmUvcGFnZS9ndGsvRXZlbnRIYW5kbGVyR3RrLmNwcAppbmRleCBhYjU0ZDgz
OGRiZDlkYjJiMjA0NTE5OGRiMTJkYjFhOWNlODdiZWI5Li41ZTQzYWJkNjc3YWVmODEwYjFiZjQ0
NGYyNWQ4ZTJlNGIzYzQyOTA4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL2d0ay9F
dmVudEhhbmRsZXJHdGsuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvZ3RrL0V2ZW50SGFu
ZGxlckd0ay5jcHAKQEAgLTk0LDYgKzk0LDE0IEBAIGJvb2wgRXZlbnRIYW5kbGVyOjpwYXNzV2hl
ZWxFdmVudFRvV2lkZ2V0KFBsYXRmb3JtV2hlZWxFdmVudCYgZXZlbnQsIFdpZGdldCogd2lkCiAg
ICAgcmV0dXJuIHN0YXRpY19jYXN0PEZyYW1lVmlldyo+KHdpZGdldCktPmZyYW1lKCktPmV2ZW50
SGFuZGxlcigpLT5oYW5kbGVXaGVlbEV2ZW50KGV2ZW50KTsKIH0KIAorI2lmIEVOQUJMRShHRVNU
VVJFX0VWRU5UUykKK2Jvb2wgRXZlbnRIYW5kbGVyOjpwYXNzR2VzdHVyZUV2ZW50VG9XaWRnZXQo
UGxhdGZvcm1HZXN0dXJlRXZlbnQmLCBXaWRnZXQqKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7
CisgICAgcmV0dXJuIGZhbHNlOworfQorI2VuZGlmCisKIFBhc3NSZWZQdHI8Q2xpcGJvYXJkPiBF
dmVudEhhbmRsZXI6OmNyZWF0ZURyYWdnaW5nQ2xpcGJvYXJkKCkgY29uc3QKIHsKICAgICByZXR1
cm4gQ2xpcGJvYXJkR3RrOjpjcmVhdGUoQ2xpcGJvYXJkV3JpdGFibGUsIERhdGFPYmplY3RHdGs6
OmNyZWF0ZSgpLCBDbGlwYm9hcmQ6OkRyYWdBbmREcm9wLCBtX2ZyYW1lKTsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3BhZ2UvaGFpa3UvRXZlbnRIYW5kbGVySGFpa3UuY3BwIGIvU291cmNl
L1dlYkNvcmUvcGFnZS9oYWlrdS9FdmVudEhhbmRsZXJIYWlrdS5jcHAKaW5kZXggNWM1MzYxNGE0
MDgwOTFiNmY5NGM4ZGRmOGM2ZDAwNjc0OGQ1MzRjOS4uY2E5NzA2ZjhhMzNjMzA1OWYxNjZjOGE4
MjE5ZTVlMmQ3Njc5N2YzZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGFnZS9oYWlrdS9F
dmVudEhhbmRsZXJIYWlrdS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGFnZS9oYWlrdS9FdmVu
dEhhbmRsZXJIYWlrdS5jcHAKQEAgLTEzNyw1ICsxMzcsMTMgQEAgdW5zaWduZWQgRXZlbnRIYW5k
bGVyOjphY2Nlc3NLZXlNb2RpZmllcnMoKQogICAgIHJldHVybiBQbGF0Zm9ybUtleWJvYXJkRXZl
bnQ6OkFsdEtleTsKIH0KIAorI2lmIEVOQUJMRShHRVNUVVJFX0VWRU5UUykKK2Jvb2wgRXZlbnRI
YW5kbGVyOjpwYXNzR2VzdHVyZUV2ZW50VG9XaWRnZXQoUGxhdGZvcm1HZXN0dXJlRXZlbnQmLCBX
aWRnZXQqKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAgcmV0dXJuIGZhbHNlOworfQor
I2VuZGlmCisKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcGFnZS9tYWMvRXZlbnRIYW5kbGVyTWFjLm1tIGIvU291cmNlL1dlYkNvcmUvcGFnZS9t
YWMvRXZlbnRIYW5kbGVyTWFjLm1tCmluZGV4IDczNmRlYWY2YWEyMWQ5N2NhMGZjMjRjODQyMTU0
OGE2YTczNTE0YTguLjRhOGM0Y2M0NDEyMzgzMzE2ZjI2MzljMDkyMjNlZGYyNzBiZDBiY2QgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvbWFjL0V2ZW50SGFuZGxlck1hYy5tbQorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9wYWdlL21hYy9FdmVudEhhbmRsZXJNYWMubW0KQEAgLTczNiw0ICs3
MzYsMjUgQEAgdW5zaWduZWQgRXZlbnRIYW5kbGVyOjphY2Nlc3NLZXlNb2RpZmllcnMoKQogICAg
IHJldHVybiBQbGF0Zm9ybUtleWJvYXJkRXZlbnQ6OkN0cmxLZXkgfCBQbGF0Zm9ybUtleWJvYXJk
RXZlbnQ6OkFsdEtleTsKIH0KIAorI2lmIEVOQUJMRShHRVNUVVJFX0VWRU5UUykKK2Jvb2wgRXZl
bnRIYW5kbGVyOjpwYXNzV2hlZWxFdmVudFRvV2lkZ2V0KGNvbnN0IFBsYXRmb3JtR2VzdHVyZUV2
ZW50JiBnZXN0dXJlRXZlbnQsIFdpZGdldCogd2lkZ2V0KQoreworICAgIEJFR0lOX0JMT0NLX09C
SkNfRVhDRVBUSU9OUzsKKworICAgIGlmICghd2lkZ2V0KQorICAgICAgICByZXR1cm4gZmFsc2U7
CisKKyAgICBOU1ZpZXcqIG5vZGVWaWV3ID0gd2lkZ2V0LT5wbGF0Zm9ybVdpZGdldCgpOworICAg
IGlmICghbm9kZVZpZXcpIHsKKyAgICAgICAgLy8gV2ViS2l0MiBjb2RlIHBhdGguCisgICAgICAg
IGlmICghd2lkZ2V0LT5pc0ZyYW1lVmlldygpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwor
CisgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxGcmFtZVZpZXcqPih3aWRnZXQpLT5mcmFtZSgp
LT5ldmVudEhhbmRsZXIoKS0+aGFuZGxlV2hlZWxFdmVudChnZXN0dXJlRXZlbnQpOworICAgIH0K
KyAgICBFTkRfQkxPQ0tfT0JKQ19FWENFUFRJT05TOworICAgIHJldHVybiBmYWxzZTsKK30KKyNl
bmRpZgorCiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL3F0L0V2ZW50SGFuZGxl
clF0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvcXQvRXZlbnRIYW5kbGVyUXQuY3BwCmluZGV4
IDJiODgwNGQ0MGIwYTA2Njg5MzdjYmVkNjZiZWM0MzU0MmI0NmNhMmYuLjllODY0NWM0Y2MyZTZj
MDUxYmUwYmQ5NmQxYTgwZDE4YjA4YzBlMzMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3Bh
Z2UvcXQvRXZlbnRIYW5kbGVyUXQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvcXQvRXZl
bnRIYW5kbGVyUXQuY3BwCkBAIC05OCw2ICs5OCwxNyBAQCBib29sIEV2ZW50SGFuZGxlcjo6cGFz
c1doZWVsRXZlbnRUb1dpZGdldChQbGF0Zm9ybVdoZWVsRXZlbnQmIGV2ZW50LCBXaWRnZXQqIHdp
ZAogICAgIHJldHVybiBzdGF0aWNfY2FzdDxGcmFtZVZpZXcqPih3aWRnZXQpLT5mcmFtZSgpLT5l
dmVudEhhbmRsZXIoKS0+aGFuZGxlV2hlZWxFdmVudChldmVudCk7CiB9CiAKKyNpZiBFTkFCTEUo
R0VTVFVSRV9FVkVOVFMpCitib29sIEV2ZW50SGFuZGxlcjo6cGFzc0dlc3R1cmVFdmVudFRvV2lk
Z2V0KFBsYXRmb3JtR2VzdHVyZUV2ZW50JiBldmVudCwgV2lkZ2V0KiB3aWRnZXQpCit7CisgICAg
UV9BU1NFUlQod2lkZ2V0KTsKKyAgICBpZiAoIXdpZGdldC0+aXNGcmFtZVZpZXcoKSkKKyAgICAg
ICAgcmV0dXJuIGZhbHNlOworCisgICAgcmV0dXJuIHN0YXRpY19jYXN0PEZyYW1lVmlldyo+KHdp
ZGdldCktPmZyYW1lKCktPmV2ZW50SGFuZGxlcigpLT5oYW5kbGVHZXN0dXJlRXZlbnQoZXZlbnQp
OworfQorI2VuZGlmCisKIFBhc3NSZWZQdHI8Q2xpcGJvYXJkPiBFdmVudEhhbmRsZXI6OmNyZWF0
ZURyYWdnaW5nQ2xpcGJvYXJkKCkgY29uc3QKIHsKICAgICByZXR1cm4gQ2xpcGJvYXJkUXQ6OmNy
ZWF0ZShDbGlwYm9hcmRXcml0YWJsZSwgbV9mcmFtZSwgQ2xpcGJvYXJkOjpEcmFnQW5kRHJvcCk7
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL3dpbi9FdmVudEhhbmRsZXJXaW4uY3Bw
IGIvU291cmNlL1dlYkNvcmUvcGFnZS93aW4vRXZlbnRIYW5kbGVyV2luLmNwcAppbmRleCA3MjFl
MzUwZTgyZmJmZmRjMmVlODNhNDJhNjIxMDZjNDRkMGU2OTE2Li5kN2ExNGJlMzRmZGE5MWU1Y2Y2
MTEzNzk3MGYxY2ZjZDZlZGIwMzNiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL3dp
bi9FdmVudEhhbmRsZXJXaW4uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2Uvd2luL0V2ZW50
SGFuZGxlcldpbi5jcHAKQEAgLTgxLDYgKzgxLDE0IEBAIGJvb2wgRXZlbnRIYW5kbGVyOjpwYXNz
V2hlZWxFdmVudFRvV2lkZ2V0KFBsYXRmb3JtV2hlZWxFdmVudCYgd2hlZWxFdmVudCwgV2lkZ2V0
CiAgICAgcmV0dXJuIHN0YXRpY19jYXN0PEZyYW1lVmlldyo+KHdpZGdldCktPmZyYW1lKCktPmV2
ZW50SGFuZGxlcigpLT5oYW5kbGVXaGVlbEV2ZW50KHdoZWVsRXZlbnQpOwogfQogCisjaWYgRU5B
QkxFKEdFU1RVUkVfRVZFTlRTKQorYm9vbCBFdmVudEhhbmRsZXI6OnBhc3NHZXN0dXJlRXZlbnRU
b1dpZGdldChjb25zdCBQbGF0Zm9ybUdlc3R1cmVFdmVudCYsIFdpZGdldCopCit7CisgICAgbm90
SW1wbGVtZW50ZWQoKTsKKyAgICByZXR1cm4gZmFsc2U7Cit9CisjZW5kaWYKKwogYm9vbCBFdmVu
dEhhbmRsZXI6OnRhYnNUb0FsbEZvcm1Db250cm9scyhLZXlib2FyZEV2ZW50KikgY29uc3QKIHsK
ICAgICByZXR1cm4gdHJ1ZTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2Uvd3gvRXZl
bnRIYW5kbGVyV3guY3BwIGIvU291cmNlL1dlYkNvcmUvcGFnZS93eC9FdmVudEhhbmRsZXJXeC5j
cHAKaW5kZXggYmEyZjljZDViYjQ1NDhjNGIxNWU5NzM3MDZkNDMzYmE4OGQyOTVhOS4uNWZiZmJj
ZDI2N2Q4OTdmNjQzY2YzOTk1NWQ3YjMzMjQ5ZTdkYWNlYiAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvcGFnZS93eC9FdmVudEhhbmRsZXJXeC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGFn
ZS93eC9FdmVudEhhbmRsZXJXeC5jcHAKQEAgLTgyLDYgKzgyLDE0IEBAIGJvb2wgRXZlbnRIYW5k
bGVyOjpwYXNzV2hlZWxFdmVudFRvV2lkZ2V0KFBsYXRmb3JtV2hlZWxFdmVudCYgZXZlbnQsIFdp
ZGdldCogd2lkCiAgICAgcmV0dXJuIHN0YXRpY19jYXN0PEZyYW1lVmlldyo+KHdpZGdldCktPmZy
YW1lKCktPmV2ZW50SGFuZGxlcigpLT5oYW5kbGVXaGVlbEV2ZW50KGV2ZW50KTsKIH0KIAorI2lm
IEVOQUJMRShHRVNUVVJFX0VWRU5UUykKK2Jvb2wgRXZlbnRIYW5kbGVyOjpwYXNzR2VzdHVyZUV2
ZW50VG9XaWRnZXQoUGxhdGZvcm1HZXN0dXJlRXZlbnQmLCBXaWRnZXQqKQoreworICAgIG5vdElt
cGxlbWVudGVkKCk7IAorICAgIHJldHVybiBmYWxzZTsgCit9CisjZW5kaWYKKwogYm9vbCBFdmVu
dEhhbmRsZXI6OnRhYnNUb0FsbEZvcm1Db250cm9scyhLZXlib2FyZEV2ZW50KiBldmVudCkgY29u
c3QgCiB7IAogICAgIG5vdEltcGxlbWVudGVkKCk7IApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vUGxhdGZvcm1HZXN0dXJlRXZlbnQuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL1BsYXRmb3JtR2VzdHVyZUV2ZW50LmgKaW5kZXggODMzYzZhMzdhZGQ3Yjk3YzkwNzI4OTdk
MWY1MDEwMTAyYWE3OWY5MC4uY2I3YmRkYzNmZmZiZmYwYzhjNDFlMTY1Mzg3YTQ0OTQ1NDExNWM0
NyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vUGxhdGZvcm1HZXN0dXJlRXZl
bnQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9QbGF0Zm9ybUdlc3R1cmVFdmVudC5o
CkBAIC00Niw2ICs0Niw3IEBAIHB1YmxpYzoKICAgICBQbGF0Zm9ybUdlc3R1cmVFdmVudCgpCiAg
ICAgICAgIDogbV90eXBlKFNjcm9sbEJlZ2luVHlwZSkKICAgICAgICAgLCBtX3RpbWVzdGFtcCgw
KQorICAgICAgICAsIG1faXNBY2NlcHRlZChmYWxzZSkKICAgICB7CiAgICAgfQogCkBAIC02MCw2
ICs2MSw3IEBAIHB1YmxpYzoKICAgICAgICAgLCBtX2N0cmxLZXkoY3RybEtleSkKICAgICAgICAg
LCBtX2FsdEtleShhbHRLZXkpCiAgICAgICAgICwgbV9tZXRhS2V5KG1ldGFLZXkpCisgICAgICAg
ICwgbV9pc0FjY2VwdGVkKGZhbHNlKQogICAgIHsKICAgICB9CiAKQEAgLTc3LDYgKzc5LDggQEAg
cHVibGljOgogICAgIGJvb2wgYWx0S2V5KCkgY29uc3QgeyByZXR1cm4gbV9hbHRLZXk7IH0KICAg
ICBib29sIG1ldGFLZXkoKSBjb25zdCB7IHJldHVybiBtX21ldGFLZXk7IH0KIAorICAgIHZvaWQg
YWNjZXB0KCkgeyBtX2lzQWNjZXB0ZWQgPSB0cnVlOyB9CisgICAgdm9pZCBpZ25vcmUoKSB7IG1f
aXNBY2NlcHRlZCA9IGZhbHNlOyB9CiBwcm90ZWN0ZWQ6CiAgICAgVHlwZSBtX3R5cGU7CiAgICAg
SW50UG9pbnQgbV9wb3NpdGlvbjsKQEAgLTg4LDYgKzkyLDcgQEAgcHJvdGVjdGVkOgogICAgIGJv
b2wgbV9jdHJsS2V5OwogICAgIGJvb2wgbV9hbHRLZXk7CiAgICAgYm9vbCBtX21ldGFLZXk7Cisg
ICAgYm9vbCBtX2lzQWNjZXB0ZWQ7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxBbmltYXRvci5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxBbmltYXRvci5jcHAKaW5kZXggNTUzOGVmZGQxYWNk
OWQxM2NmMjg2YzZkYWQwNTFlMTg4ZjEzZTczYS4uOGQ4MGM0ZjM1MjJhYjc3NDczOTI1MDZlYmZl
ZTc0ODcwMzdlNWI1NyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU2Nyb2xs
QW5pbWF0b3IuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1Njcm9sbEFuaW1hdG9y
LmNwcApAQCAtMzcsNiArMzcsMTMgQEAKICNpbmNsdWRlIDxhbGdvcml0aG0+CiAjaW5jbHVkZSA8
d3RmL1Bhc3NPd25QdHIuaD4KIAorI2lmIEVOQUJMRShHRVNUVVJFX1JFQ09HTklaRVIpIHx8IEVO
QUJMRShHRVNUVVJFX0VWRU5UUykKKyNpbmNsdWRlICJQbGF0Zm9ybUdlc3R1cmVFdmVudC5oIgor
I2VuZGlmCisKKworI2luY2x1ZGUgPHN0ZGlvLmg+CisKIHVzaW5nIG5hbWVzcGFjZSBzdGQ7CiAK
IG5hbWVzcGFjZSBXZWJDb3JlIHsKQEAgLTExMyw5ICsxMjAsMjkgQEAgdm9pZCBTY3JvbGxBbmlt
YXRvcjo6aGFuZGxlV2hlZWxFdmVudChQbGF0Zm9ybVdoZWVsRXZlbnQmIGUpCiAgICAgfQogfQog
Ci0jaWYgRU5BQkxFKEdFU1RVUkVfRVZFTlRTKQotdm9pZCBTY3JvbGxBbmltYXRvcjo6aGFuZGxl
R2VzdHVyZUV2ZW50KGNvbnN0IFBsYXRmb3JtR2VzdHVyZUV2ZW50JikKKyNpZiBFTkFCTEUoR0VT
VFVSRV9SRUNPR05JWkVSKSB8fCBFTkFCTEUoR0VTVFVSRV9FVkVOVFMpCit2b2lkIFNjcm9sbEFu
aW1hdG9yOjpoYW5kbGVHZXN0dXJlRXZlbnQoY29uc3QgUGxhdGZvcm1HZXN0dXJlRXZlbnQmIGV2
ZW50KQogeworICAgIHN3aXRjaCAoZXZlbnQudHlwZSgpKSB7CisgICAgY2FzZSBQbGF0Zm9ybUdl
c3R1cmVFdmVudDo6U2Nyb2xsQmVnaW5UeXBlOgorICAgIGNhc2UgUGxhdGZvcm1HZXN0dXJlRXZl
bnQ6OlNjcm9sbEVuZFR5cGU6CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUGxhdGZvcm1HZXN0
dXJlRXZlbnQ6OlNjcm9sbFVwZGF0ZVR5cGU6IHsKKyAgICAgICAgSW50U2l6ZSBtYXhGb3J3YXJk
U2Nyb2xsRGVsdGEgPSBtX3Njcm9sbGFibGVBcmVhLT5tYXhpbXVtU2Nyb2xsUG9zaXRpb24oKSAt
IG1fc2Nyb2xsYWJsZUFyZWEtPnNjcm9sbFBvc2l0aW9uKCk7CisgICAgICAgIEludFNpemUgbWF4
QmFja3dhcmRTY3JvbGxEZWx0YSA9IG1fc2Nyb2xsYWJsZUFyZWEtPnNjcm9sbFBvc2l0aW9uKCkg
LSBtX3Njcm9sbGFibGVBcmVhLT5taW5pbXVtU2Nyb2xsUG9zaXRpb24oKTsKKyAgICAgICAgZmxv
YXQgZGVsdGFYID0gKGV2ZW50LmRlbHRhWCgpIDwgMC5mKSA/IG1heChldmVudC5kZWx0YVgoKSwg
IC1mbG9hdChtYXhGb3J3YXJkU2Nyb2xsRGVsdGEud2lkdGgoKSkpIDogbWluKGV2ZW50LmRlbHRh
WCgpLCBmbG9hdChtYXhCYWNrd2FyZFNjcm9sbERlbHRhLndpZHRoKCkpKTsKKyAgICAgICAgZmxv
YXQgZGVsdGFZID0gKGV2ZW50LmRlbHRhWSgpIDwgMC5mKSA/IG1heChldmVudC5kZWx0YVkoKSwg
IC1mbG9hdChtYXhGb3J3YXJkU2Nyb2xsRGVsdGEuaGVpZ2h0KCkpKSA6IG1pbihldmVudC5kZWx0
YVkoKSwgZmxvYXQobWF4QmFja3dhcmRTY3JvbGxEZWx0YS5oZWlnaHQoKSkpOworCisgICAgICAg
IEludFJlY3QgY29udGVudFJlY3QgPSBtX3Njcm9sbGFibGVBcmVhLT52aXNpYmxlQ29udGVudFJl
Y3QodHJ1ZSk7CisgICAgICAgIEZsb2F0UG9pbnQgb2Zmc2V0ID0gRmxvYXRQb2ludChjb250ZW50
UmVjdC54KCkgLSBkZWx0YVgsIGNvbnRlbnRSZWN0LnkoKSAtIGRlbHRhWSk7CisgICAgICAgIHNj
cm9sbFRvT2Zmc2V0V2l0aG91dEFuaW1hdGlvbihvZmZzZXQpOworICAgICAgICBicmVhazsKKyAg
ICB9CisgICAgY2FzZSBQbGF0Zm9ybUdlc3R1cmVFdmVudDo6VGFwRG93blR5cGU6CisgICAgY2Fz
ZSBQbGF0Zm9ybUdlc3R1cmVFdmVudDo6VGFwVHlwZToKKyAgICBjYXNlIFBsYXRmb3JtR2VzdHVy
ZUV2ZW50OjpEb3VibGVUYXBUeXBlOgorICAgICAgICBicmVhazsKKyAgICB9CiB9CiAjZW5kaWYK
IApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU2Nyb2xsQW5pbWF0b3IuaCBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1Njcm9sbEFuaW1hdG9yLmgKaW5kZXggNjY3MzgxYjMx
MWQ5MmY1NTk4YzE3ZTIyNGMwYmUwYzU2NjQ1NTFiNi4uYjI1ZTNlNmVjMGEwNDdlZGU3MDZhMTRj
NWI3ZTU1NTNjY2M3YmQ0ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU2Ny
b2xsQW5pbWF0b3IuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxBbmltYXRv
ci5oCkBAIC00MSw3ICs0MSw3IEBAIGNsYXNzIFBsYXRmb3JtV2hlZWxFdmVudDsKIGNsYXNzIFNj
cm9sbGFibGVBcmVhOwogY2xhc3MgU2Nyb2xsYmFyOwogCi0jaWYgRU5BQkxFKEdFU1RVUkVfRVZF
TlRTKQorI2lmIEVOQUJMRShHRVNUVVJFX1JFQ09HTklaRVIpIHx8IEVOQUJMRShHRVNUVVJFX0VW
RU5UUykKIGNsYXNzIFBsYXRmb3JtR2VzdHVyZUV2ZW50OwogI2VuZGlmCiAKQEAgLTY0LDcgKzY0
LDcgQEAgcHVibGljOgogICAgIHZpcnR1YWwgdm9pZCBzZXRJc0FjdGl2ZSgpIHsgfQogCiAgICAg
dmlydHVhbCB2b2lkIGhhbmRsZVdoZWVsRXZlbnQoUGxhdGZvcm1XaGVlbEV2ZW50Jik7Ci0jaWYg
RU5BQkxFKEdFU1RVUkVfRVZFTlRTKQorI2lmIEVOQUJMRShHRVNUVVJFX1JFQ09HTklaRVIpIHx8
IEVOQUJMRShHRVNUVVJFX0VWRU5UUykKICAgICB2aXJ0dWFsIHZvaWQgaGFuZGxlR2VzdHVyZUV2
ZW50KGNvbnN0IFBsYXRmb3JtR2VzdHVyZUV2ZW50Jik7CiAjZW5kaWYKIAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>111852</attachid>
            <date>2011-10-20 14:56:54 -0700</date>
            <delta_ts>2011-10-26 15:39:56 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-67822-20111020175139.patch</filename>
            <type>text/plain</type>
            <size>39655</size>
            <attacher name="Robert Kroeger">rjkroege</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogOTc4NjkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCBmZThjY2FjYTViNWViN2Yy
YjZhMTVmNjM2YTExM2EwZTdmYmRjNzU4Li5iZGY0NWIxMTRhYTY4N2FkODQ3OWE3Y2ZmY2VmYzUy
OTA4M2IyODNiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvU291
cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNTIgQEAKKzIwMTEtMTAtMjAgIFJvYmVy
dCBLcm9lZ2VyICA8cmprcm9lZ2VAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFBsYXRmb3JtR2Vz
dHVyZUV2ZW50OjpoYW5kbGVHZXN0dXJlRXZlbnQgc2hvdWxkIGhpdCB0ZXN0IHdoaWxlIGRpc3Bh
dGNoaW5nIFNjcm9sbCogZXZlbnRzLgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9Njc4MjIKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMh
KS4KKworICAgICAgICBUZXN0czogZmFzdC9ldmVudHMvdG91Y2gvdG91Y2gtZ2VzdHVyZS1zY3Jv
bGwtaWZyYW1lLmh0bWwKKyAgICAgICAgICAgICAgIGZhc3QvZXZlbnRzL3RvdWNoL3RvdWNoLWdl
c3R1cmUtc2Nyb2xsLXBhZ2UuaHRtbAorICAgICAgICAgICAgICAgZmFzdC9ldmVudHMvdG91Y2gv
dG91Y2gtZ2VzdHVyZS1zY3JvbGwtc2h5LXRhcmdldC5odG1sCisKKyAgICAgICAgKiBwYWdlL0V2
ZW50SGFuZGxlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpFdmVudEhhbmRsZXI6OmNsZWFyKToK
KyAgICAgICAgKFdlYkNvcmU6OkV2ZW50SGFuZGxlcjo6aGFuZGxlR2VzdHVyZVNjcm9sbEV2ZW50
SGVscGVyKToKKyAgICAgICAgSW50ZXJuYWxzIG9mIGRpc3BsYXRjaGluZyBQbGF0Zm9ybUdlc3R1
cmVFdmVudCBTY3JvbGxCZWdpblR5cGUsIFNjcm9sbEVuZFR5cGUsCisgICAgICAgIFNjcm9sbFVw
ZGF0ZVR5cGUgdG8gRnJhbWVWaWV3LCBTY3JvbGxhYmxlQXJlYSBhbmQgV2lkZ2V0IGluc3RhbmNl
cy4KKyAgICAgICAgKFdlYkNvcmU6OlVubGF0Y2hlcjo6VW5sYXRjaGVyKToKKyAgICAgICAgKFdl
YkNvcmU6OlVubGF0Y2hlcjo6flVubGF0Y2hlcik6CisgICAgICAgIChXZWJDb3JlOjpFdmVudEhh
bmRsZXI6OmhhbmRsZUdlc3R1cmVFdmVudCk6CisgICAgICAgIENvcnJlY3RzIGEgRklYTUU6IGRp
c3BhdGNoIFNjcm9sbCB0eXBlIFBsYXRmb3JtR2VzdHVyZUV2ZW50cyBpbnRvCisgICAgICAgIG92
ZXJmbG93LXNjcm9sbCBlbGVtZW50cyBpZnJhbWVzIG9yIHRoZSBwYWdlIGl0c2VsZi4gSWYgdGhl
IHRhcmdldAorICAgICAgICBvZiB0aGUgUEdFIGlzIGEgbm9kZSwgaXQgaXMgbGF0Y2hlZCB0byB0
aGF0IFNjcm9sbFVwZGF0ZVR5cGUKKyAgICAgICAgYW5kIFNjcm9sbEVuZFR5cGUgaW5zdGFuY2Vz
IHJlYWNoIHRoZSBzYW1lIHRhcmdldC4KKyAgICAgICAgKiBwYWdlL0V2ZW50SGFuZGxlci5oOgor
ICAgICAgICBBZGRlZCBhIHJlZi1jb3VudGVkIGxhdGNoIGZvciB0aGUgdGFyZ2V0IG5vZGUuCisg
ICAgICAgICogcGFnZS9jaHJvbWl1bS9FdmVudEhhbmRsZXJDaHJvbWl1bS5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpFdmVudEhhbmRsZXI6OnBhc3NHZXN0dXJlRXZlbnRUb1dpZGdldCk6CisgICAg
ICAgICogcGFnZS9lZmwvRXZlbnRIYW5kbGVyRWZsLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkV2
ZW50SGFuZGxlcjo6cGFzc0dlc3R1cmVFdmVudFRvV2lkZ2V0KToKKyAgICAgICAgKiBwYWdlL2d0
ay9FdmVudEhhbmRsZXJHdGsuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RXZlbnRIYW5kbGVyOjpw
YXNzR2VzdHVyZUV2ZW50VG9XaWRnZXQpOgorICAgICAgICAqIHBhZ2UvbWFjL0V2ZW50SGFuZGxl
ck1hYy5tbToKKyAgICAgICAgKFdlYkNvcmU6OkV2ZW50SGFuZGxlcjo6cGFzc1doZWVsRXZlbnRU
b1dpZGdldCk6CisgICAgICAgICogcGFnZS9xdC9FdmVudEhhbmRsZXJRdC5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpFdmVudEhhbmRsZXI6OnBhc3NHZXN0dXJlRXZlbnRUb1dpZGdldCk6CisgICAg
ICAgICogcGFnZS93aW4vRXZlbnRIYW5kbGVyV2luLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkV2
ZW50SGFuZGxlcjo6cGFzc0dlc3R1cmVFdmVudFRvV2lkZ2V0KToKKyAgICAgICAgKiBwYWdlL3d4
L0V2ZW50SGFuZGxlcld4LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkV2ZW50SGFuZGxlcjo6cGFz
c0dlc3R1cmVFdmVudFRvV2lkZ2V0KToKKyAgICAgICAgUGxhdGZvcm0tc3BlY2lmaWMgY2hhbmdl
cyB0byBwYXNzIGdlc3R1cmUgZXZlbnRzIGludG8gV2lkZ2V0cy5hCisgICAgICAgICogcGxhdGZv
cm0vU2Nyb2xsQW5pbWF0b3IuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsQW5pbWF0b3I6
OmhhbmRsZUdlc3R1cmVFdmVudCk6CisgICAgICAgIEFkZGVkIGJhc2ljIHNjcm9sbGluZyBmdW5j
dGlvbmFsaXR5IHN1ZmZpY2llbnQgdG8gZGVtb25zdHJhdGUgY2hhbmdlIHZpYQorICAgICAgICBs
YXlvdXQgdGVzdC4KKyAgICAgICAgKiBwbGF0Zm9ybS9TY3JvbGxBbmltYXRvck5vbmUuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsQW5pbWF0b3JOb25lOjpoYW5kbGVHZXN0dXJlRXZlbnQp
OgorICAgICAgICBBZGRlZCBiYXNpYyBzY3JvbGxpbmcgZnVuY3Rpb25hbGl0eSBzdWZmaWNpZW50
IHRvIGRlbW9uc3RyYXRlIGNoYW5nZSB2aWEKKyAgICAgICAgbGF5b3V0IHRlc3QuCisKIDIwMTEt
MTAtMTkgIFl1cnkgU2VtaWtoYXRza3kgIDx5dXJ5c0BjaHJvbWl1bS5vcmc+CiAKICAgICAgICAg
V2ViIEluc3BlY3Rvcjogd29ya2VyIGluc3BlY3RvciB0aXRsZSBzaG91bGQgY29udGFpbiB3b3Jr
ZXIgVVJMCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL0V2ZW50SGFuZGxlci5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9wYWdlL0V2ZW50SGFuZGxlci5jcHAKaW5kZXggOTZlYzc3ZDRhN2Q3
NmM0YmQ4YWZiNjRiNDBmMTViYWJmODc2MWQzMy4uMTE5ZDE0ZmZhNDkyOTVhN2VhZTBhZTVjYTkw
NTgwNmE0YTMxMzhlZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGFnZS9FdmVudEhhbmRs
ZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRXZlbnRIYW5kbGVyLmNwcApAQCAtNjks
NiArNjksNyBAQAogI2luY2x1ZGUgIlJlbmRlclZpZXcuaCIKICNpbmNsdWRlICJSZW5kZXJXaWRn
ZXQuaCIKICNpbmNsdWRlICJTY3JvbGxBbmltYXRvci5oIgorI2luY2x1ZGUgIlNjcm9sbGFibGVB
cmVhLmgiCiAjaW5jbHVkZSAiU2Nyb2xsYmFyLmgiCiAjaW5jbHVkZSAiU2V0dGluZ3MuaCIKICNp
bmNsdWRlICJTcGF0aWFsTmF2aWdhdGlvbi5oIgpAQCAtMjY3LDYgKzI2OCw5IEBAIHZvaWQgRXZl
bnRIYW5kbGVyOjpjbGVhcigpCiAjaWYgRU5BQkxFKFRPVUNIX0VWRU5UUykKICAgICBtX29yaWdp
bmF0aW5nVG91Y2hQb2ludFRhcmdldHMuY2xlYXIoKTsKICNlbmRpZgorI2lmIEVOQUJMRShHRVNU
VVJFX0VWRU5UUykKKyAgICBtX2dlc3R1cmVUYXJnZXROb2RlLmNsZWFyKCk7CisjZW5kaWYKIH0K
IAogdm9pZCBFdmVudEhhbmRsZXI6Om5vZGVXaWxsQmVSZW1vdmVkKE5vZGUqIG5vZGVUb0JlUmVt
b3ZlZCkKQEAgLTIyMTUsMTggKzIyMTksOTQgQEAgdm9pZCBFdmVudEhhbmRsZXI6OmRlZmF1bHRX
aGVlbEV2ZW50SGFuZGxlcihOb2RlKiBzdGFydE5vZGUsIFdoZWVsRXZlbnQqIHdoZWVsRXYKIH0K
IAogI2lmIEVOQUJMRShHRVNUVVJFX0VWRU5UUykKK2Jvb2wgRXZlbnRIYW5kbGVyOjpoYW5kbGVH
ZXN0dXJlU2Nyb2xsRXZlbnRIZWxwZXIoUGFzc1JlZlB0cjxOb2RlPiB0YXJnZXROb2RlLCBjb25z
dCBQbGF0Zm9ybUdlc3R1cmVFdmVudCYgZ2VzdHVyZUV2ZW50LCBjb25zdCBIaXRUZXN0UmVzdWx0
JiByZXN1bHQpCit7CisgICAgTm9kZSogbm9kZSA9IHRhcmdldE5vZGUuZ2V0KCk7CisgICAgYm9v
bCBpc092ZXJXaWRnZXQgPSByZXN1bHQuaXNPdmVyV2lkZ2V0KCk7CisKKyAgICBpZiAoIW5vZGUp
CisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIFJlbmRlck9iamVjdCogdGFyZ2V0ID0gbm9k
ZS0+cmVuZGVyZXIoKTsKKyAgICBpZiAoaXNPdmVyV2lkZ2V0ICYmIHRhcmdldCAmJiB0YXJnZXQt
PmlzV2lkZ2V0KCkpIHsKKyAgICAgICBXaWRnZXQqIHdpZGdldCA9IHRvUmVuZGVyV2lkZ2V0KHRh
cmdldCktPndpZGdldCgpOworICAgICAgICBpZiAod2lkZ2V0ICYmIHBhc3NHZXN0dXJlRXZlbnRU
b1dpZGdldChnZXN0dXJlRXZlbnQsIHdpZGdldCkpCisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsK
KyAgICB9CisKKyAgICAvLyBSRVZJRVdFUjogSXMgdGhpcyByaWdodCB3YXkgdG8gdXBkYXRlIHRo
ZSBub2RlIGZvciB0aGUgdXNlIG9mIHRoZSBzaGFkb3cgZG9tPworICAgIG5vZGUgPSBub2RlLT5z
aGFkb3dBbmNlc3Rvck5vZGUoKTsKKworICAgIC8vIEZJWE1FOiBBZGQgc3VwcG9ydCBmb3IgZGlz
cGF0Y2hpbmcgUGxhdGZvcm1HZXN0dXJlRXZlbnQgaW5zdGFuY2VzIGFzIGdlc3R1cmUgZXZlbnQg
aW5zdGFuY2VzIHRvIERPTSBhcyBkZXNpcmFibGUuCisgICAgUmVuZGVyT2JqZWN0KiByZW5kZXJl
ciA9IG5vZGUtPnJlbmRlcmVyKCk7CisKKyAgICBpZiAoIXJlbmRlcmVyKQorICAgICAgICByZXR1
cm4gZmFsc2U7CisKKyAgICBSZW5kZXJCb3gqIGVuY2xvc2luZ0JveCA9IHJlbmRlcmVyLT5lbmNs
b3NpbmdCb3goKTsKKyAgICB3aGlsZSAoZW5jbG9zaW5nQm94ICYmICFlbmNsb3NpbmdCb3gtPmNh
bkJlU2Nyb2xsZWRBbmRIYXNTY3JvbGxhYmxlQXJlYSgpKSB7CisgICAgICAgIGlmICghZW5jbG9z
aW5nQm94LT5wYXJlbnQoKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgZW5j
bG9zaW5nQm94ID0gZW5jbG9zaW5nQm94LT5wYXJlbnQoKS0+ZW5jbG9zaW5nQm94KCk7CisgICAg
fQorICAgIAorICAgIGlmIChlbmNsb3NpbmdCb3ggJiYgZW5jbG9zaW5nQm94LT5ub2RlKCkgIT0g
ZW5jbG9zaW5nQm94LT5kb2N1bWVudCgpKSB7CisgICAgICAgIFJlbmRlckxheWVyKiBsYXllciA9
IGVuY2xvc2luZ0JveC0+bGF5ZXIoKTsKKyAgICAgICAgaWYgKGxheWVyKSB7CisgICAgICAgICAg
ICBsYXllci0+aGFuZGxlR2VzdHVyZUV2ZW50KGdlc3R1cmVFdmVudCk7CisgICAgICAgICAgICBy
ZXR1cm4gdHJ1ZTsKKyAgICAgICB9CisgICAgfQorCisgICAgRnJhbWVWaWV3KiB2aWV3ID0gbV9m
cmFtZS0+dmlldygpOworICAgIGlmICghdmlldykKKyAgICAgICByZXR1cm4gZmFsc2U7CisgICAg
ICAgIAorICAgIHZpZXctPmhhbmRsZUdlc3R1cmVFdmVudChnZXN0dXJlRXZlbnQpOworICAgIHJl
dHVybiB0cnVlOworfQorCisvLyBSRVZJRVdFUjogSSBodW50ZWQgZm9yIHNvbWV0aGluZyBsaWtl
IHRoaXMgaW4gd3RmOjouIERvZXMgaXQgZXhpc3Q/IElmIG5vdCwKKy8vIGlzIGl0IHdvcnRoIGFk
ZGluZyBhIGdlbmVyaWMgdmVyc2lvbj8KKy8vIEhlbHBlciB0byBhdXRvLXVubGF0Y2ggb24gZW5k
IG9mIHNjb3BlLgorY2xhc3MgVW5sYXRjaGVyIHsKK3B1YmxpYzoKKyAgICBVbmxhdGNoZXIoUmVm
UHRyPE5vZGU+JiByKQorICAgICAgICA6IG1fcmVmKHIpCisgICAgeworICAgIH0KKworICAgIH5V
bmxhdGNoZXIoKQorICAgIHsKKyAgICAgICAgICAgIG1fcmVmLmNsZWFyKCk7CisgICAgfQorcHJp
dmF0ZToKKyAgICBSZWZQdHI8Tm9kZT4mIG1fcmVmOworfTsKKwogYm9vbCBFdmVudEhhbmRsZXI6
OmhhbmRsZUdlc3R1cmVFdmVudChjb25zdCBQbGF0Zm9ybUdlc3R1cmVFdmVudCYgZ2VzdHVyZUV2
ZW50KQogewotICAgIC8vIEZJWE1FOiBUaGlzIHNob3VsZCBoaXQgdGVzdCBhbmQgZ28gdG8gdGhl
IGNvcnJlY3Qgc3ViZnJhbWUgcmF0aGVyIHRoYW4gCi0gICAgLy8gYWx3YXlzIHNlbmRpbmcgZ2Vz
dHVyZXMgdG8gdGhlIG1haW4gZnJhbWUgb25seS4gV2Ugc2hvdWxkIGFsc28gZW5zdXJlCi0gICAg
Ly8gdGhhdCBpZiBhIGZyYW1lIGdldHMgYSBnZXN0dXJlIGJlZ2luIGdlc3R1cmUsIGl0IGdldHMg
dGhlIGNvcnJlc3BvbmRpbmcKLSAgICAvLyBlbmQgZ2VzdHVyZSBhcyB3ZWxsLgorICAgIERvY3Vt
ZW50KiBkb2MgPSBtX2ZyYW1lLT5kb2N1bWVudCgpOworICAgIFJlbmRlck9iamVjdCogZG9jUmVu
ZGVyZXIgPSBkb2MtPnJlbmRlcmVyKCk7CisgICAgaWYgKCFkb2NSZW5kZXJlcikKKyAgICAgICAg
cmV0dXJuIGZhbHNlOworICAgIFJlZlB0cjxGcmFtZVZpZXc+IHByb3RlY3RvcihtX2ZyYW1lLT52
aWV3KCkpOworICAgIEZyYW1lVmlldyogdmlldyA9IG1fZnJhbWUtPnZpZXcoKTsKKyAgICBpZiAo
IXZpZXcpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBzZXRGcmFtZVdhc1Njcm9sbGVkQnlV
c2VyKCk7CisgICAgTGF5b3V0UG9pbnQgdlBvaW50ID0gdmlldy0+d2luZG93VG9Db250ZW50cyhn
ZXN0dXJlRXZlbnQucG9zaXRpb24oKSk7CisKKyAgICBIaXRUZXN0UmVxdWVzdCByZXF1ZXN0KEhp
dFRlc3RSZXF1ZXN0OjpSZWFkT25seSk7CisgICAgSGl0VGVzdFJlc3VsdCByZXN1bHQodlBvaW50
KTsKKyAgICBkb2MtPnJlbmRlclZpZXcoKS0+bGF5ZXIoKS0+aGl0VGVzdChyZXF1ZXN0LCByZXN1
bHQpOwogCiAgICAgc3dpdGNoIChnZXN0dXJlRXZlbnQudHlwZSgpKSB7CiAgICAgY2FzZSBQbGF0
Zm9ybUdlc3R1cmVFdmVudDo6VGFwRG93blR5cGU6CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2Ug
UGxhdGZvcm1HZXN0dXJlRXZlbnQ6OlRhcFR5cGU6IHsKLSAgICAgICAgLy8gRklYTUU6IFJlZmFj
dG9yIHRoaXMgY29kZSB0byBub3QgaGl0IHRlc3QgbXVsdGlwbGUgdGltZXMgb25jZSBoaXQgdGVz
dGluZyBoYXMgYmVlbiBjb3JyZWN0ZWQgYXMgc3VnZ2VzdGVkIGFib3ZlLgorICAgICAgICAvLyBG
SVhNRTogUmVmYWN0b3IgdGhpcyBjb2RlIHRvIG5vdCBoaXQgdGVzdCBtdWx0aXBsZSB0aW1lcyBi
eSB1c2luZyB0aGUgY29kZQorICAgICAgICAvLyB3cml0dGVuIGZvciBzY3JvbGwuCiAgICAgICAg
IFBsYXRmb3JtTW91c2VFdmVudCBmYWtlTW91c2VNb3ZlKGdlc3R1cmVFdmVudC5wb3NpdGlvbigp
LCBnZXN0dXJlRXZlbnQuZ2xvYmFsUG9zaXRpb24oKSwgTm9CdXR0b24sIE1vdXNlRXZlbnRNb3Zl
ZCwgLyogY2xpY2tDb3VudCAqLyAxLCBnZXN0dXJlRXZlbnQuc2hpZnRLZXkoKSwgZ2VzdHVyZUV2
ZW50LmN0cmxLZXkoKSwgZ2VzdHVyZUV2ZW50LmFsdEtleSgpLCBnZXN0dXJlRXZlbnQubWV0YUtl
eSgpLCBnZXN0dXJlRXZlbnQudGltZXN0YW1wKCkpOwogICAgICAgICBQbGF0Zm9ybU1vdXNlRXZl
bnQgZmFrZU1vdXNlRG93bihnZXN0dXJlRXZlbnQucG9zaXRpb24oKSwgZ2VzdHVyZUV2ZW50Lmds
b2JhbFBvc2l0aW9uKCksIExlZnRCdXR0b24sIE1vdXNlRXZlbnRQcmVzc2VkLCAvKiBjbGlja0Nv
dW50ICovIDEsIGdlc3R1cmVFdmVudC5zaGlmdEtleSgpLCBnZXN0dXJlRXZlbnQuY3RybEtleSgp
LCBnZXN0dXJlRXZlbnQuYWx0S2V5KCksIGdlc3R1cmVFdmVudC5tZXRhS2V5KCksIGdlc3R1cmVF
dmVudC50aW1lc3RhbXAoKSk7CiAgICAgICAgIFBsYXRmb3JtTW91c2VFdmVudCBmYWtlTW91c2VV
cChnZXN0dXJlRXZlbnQucG9zaXRpb24oKSwgZ2VzdHVyZUV2ZW50Lmdsb2JhbFBvc2l0aW9uKCks
IExlZnRCdXR0b24sIE1vdXNlRXZlbnRSZWxlYXNlZCwgLyogY2xpY2tDb3VudCAqLyAxLCBnZXN0
dXJlRXZlbnQuc2hpZnRLZXkoKSwgZ2VzdHVyZUV2ZW50LmN0cmxLZXkoKSwgZ2VzdHVyZUV2ZW50
LmFsdEtleSgpLCBnZXN0dXJlRXZlbnQubWV0YUtleSgpLCBnZXN0dXJlRXZlbnQudGltZXN0YW1w
KCkpOwpAQCAtMjIzNSwyNiArMjMxNSwzMyBAQCBib29sIEV2ZW50SGFuZGxlcjo6aGFuZGxlR2Vz
dHVyZUV2ZW50KGNvbnN0IFBsYXRmb3JtR2VzdHVyZUV2ZW50JiBnZXN0dXJlRXZlbnQpCiAgICAg
ICAgIGhhbmRsZU1vdXNlUmVsZWFzZUV2ZW50KGZha2VNb3VzZVVwKTsKICAgICAgICAgcmV0dXJu
IHRydWU7CiAgICAgfQotICAgIGNhc2UgUGxhdGZvcm1HZXN0dXJlRXZlbnQ6OlNjcm9sbFVwZGF0
ZVR5cGU6IHsKLSAgICAgICAgY29uc3QgZmxvYXQgdGlja0Rpdmlzb3IgPSAoZmxvYXQpV2hlZWxF
dmVudDo6dGlja011bHRpcGxpZXI7Ci0gICAgICAgIC8vIEZJWE1FOiBSZXBsYWNlIHRoaXMgaW50
ZXJpbSBpbXBsZW1lbnRhdGlvbiBvbmNlIHRoZSBhYm92ZSBmaXhtZSBoYXMgYmVlbiBhZGRyZXNz
ZWQuCi0gICAgICAgIEludFBvaW50IHBvaW50KGdlc3R1cmVFdmVudC5wb3NpdGlvbigpLngoKSwg
Z2VzdHVyZUV2ZW50LnBvc2l0aW9uKCkueSgpKTsKLSAgICAgICAgSW50UG9pbnQgZ2xvYmFsUG9p
bnQoZ2VzdHVyZUV2ZW50Lmdsb2JhbFBvc2l0aW9uKCkueCgpLCBnZXN0dXJlRXZlbnQuZ2xvYmFs
UG9zaXRpb24oKS55KCkpOwotICAgICAgICBQbGF0Zm9ybVdoZWVsRXZlbnQgc3ludGhldGljV2hl
ZWxFdmVudChwb2ludCwgZ2xvYmFsUG9pbnQsIGdlc3R1cmVFdmVudC5kZWx0YVgoKSwgZ2VzdHVy
ZUV2ZW50LmRlbHRhWSgpLCBnZXN0dXJlRXZlbnQuZGVsdGFYKCkgLyB0aWNrRGl2aXNvciwgZ2Vz
dHVyZUV2ZW50LmRlbHRhWSgpIC8gdGlja0Rpdmlzb3IsIFNjcm9sbEJ5UGl4ZWxXaGVlbEV2ZW50
LCBnZXN0dXJlRXZlbnQuc2hpZnRLZXkoKSwgZ2VzdHVyZUV2ZW50LmN0cmxLZXkoKSwgZ2VzdHVy
ZUV2ZW50LmFsdEtleSgpLCBnZXN0dXJlRXZlbnQubWV0YUtleSgpKTsKLSAgICAgICAgaGFuZGxl
V2hlZWxFdmVudChzeW50aGV0aWNXaGVlbEV2ZW50KTsKLSAgICAgICAgcmV0dXJuIHRydWU7Cisg
ICAgY2FzZSBQbGF0Zm9ybUdlc3R1cmVFdmVudDo6U2Nyb2xsVXBkYXRlVHlwZToKKyAgICAgICAg
Ly8gQWx3YXlzIGxhdGNoZWQgaWYgcG9zc2libGUuCisgICAgICAgIGlmICghbV9nZXN0dXJlVGFy
Z2V0Tm9kZSkKKyAgICAgICAgICAgIG1fZ2VzdHVyZVRhcmdldE5vZGUgPSByZXN1bHQuaW5uZXJO
b2RlKCk7CisgICAgICAgcmV0dXJuIGhhbmRsZUdlc3R1cmVTY3JvbGxFdmVudEhlbHBlcihtX2dl
c3R1cmVUYXJnZXROb2RlLCBnZXN0dXJlRXZlbnQsIHJlc3VsdCk7CisgICAgY2FzZSBQbGF0Zm9y
bUdlc3R1cmVFdmVudDo6U2Nyb2xsQmVnaW5UeXBlOgorICAgICAgICAvLyBMYXRjaCBvbiBzY3Jv
bGwgYmVnaW4uCisgICAgICAgIGlmIChtX2dlc3R1cmVUYXJnZXROb2RlKQorICAgICAgICAgICAg
bV9nZXN0dXJlVGFyZ2V0Tm9kZSA9IDA7CisgICAgICAgIG1fZ2VzdHVyZVRhcmdldE5vZGUgPSBy
ZXN1bHQuaW5uZXJOb2RlKCk7CisgICAgICAgIHJldHVybiBoYW5kbGVHZXN0dXJlU2Nyb2xsRXZl
bnRIZWxwZXIobV9nZXN0dXJlVGFyZ2V0Tm9kZSwgZ2VzdHVyZUV2ZW50LCByZXN1bHQpOworICAg
IGNhc2UgUGxhdGZvcm1HZXN0dXJlRXZlbnQ6OlNjcm9sbEVuZFR5cGU6IHsKKyAgICAgICAgLy8g
QWx3YXlzIHVubGF0Y2ggb24gbGVhdmluZyB0aGlzIGNhc2UuCisgICAgICAgIFVubGF0Y2hlciB1
bmxhdGNoKG1fZ2VzdHVyZVRhcmdldE5vZGUpOworICAgICAgICBpZiAoIW1fZ2VzdHVyZVRhcmdl
dE5vZGUpCisgICAgICAgICAgICBtX2dlc3R1cmVUYXJnZXROb2RlID0gcmVzdWx0LmlubmVyTm9k
ZSgpOworICAgICAgICByZXR1cm4gaGFuZGxlR2VzdHVyZVNjcm9sbEV2ZW50SGVscGVyKG1fZ2Vz
dHVyZVRhcmdldE5vZGUsIGdlc3R1cmVFdmVudCwgcmVzdWx0KTsKICAgICB9CiAgICAgY2FzZSBQ
bGF0Zm9ybUdlc3R1cmVFdmVudDo6RG91YmxlVGFwVHlwZToKLSAgICBjYXNlIFBsYXRmb3JtR2Vz
dHVyZUV2ZW50OjpTY3JvbGxCZWdpblR5cGU6Ci0gICAgY2FzZSBQbGF0Zm9ybUdlc3R1cmVFdmVu
dDo6U2Nyb2xsRW5kVHlwZToKLSAgICAgICAgRnJhbWVWaWV3KiB2aWV3ID0gbV9mcmFtZS0+dmll
dygpOworICAgICAgICB2aWV3ID0gbV9mcmFtZS0+dmlldygpOwogICAgICAgICBpZiAoIXZpZXcp
Ci0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0KKyAgICAgICAgICAgcmV0dXJuIGZhbHNlOwor
ICAgICAgICAKICAgICAgICAgdmlldy0+aGFuZGxlR2VzdHVyZUV2ZW50KGdlc3R1cmVFdmVudCk7
CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KLSAgICByZXR1cm4gdHJ1ZTsKKyAgICByZXR1
cm4gZmFsc2U7CiB9CiAjZW5kaWYKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGFnZS9F
dmVudEhhbmRsZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRXZlbnRIYW5kbGVyLmgKaW5kZXgg
OWNjMDNiZjBlNmE2Yzg2OGNhMzhkNDI5NDc2N2VhZmNmYmRiNTFhYi4uMzFhMTk3N2IwZDhiZGVl
MzYwMTA4NzllZmIxZDRjMWE0ODg4ZGI0NyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGFn
ZS9FdmVudEhhbmRsZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL0V2ZW50SGFuZGxlci5o
CkBAIC0zMDAsNiArMzAwLDkgQEAgcHJpdmF0ZToKIAogICAgIGJvb2wgcGFzc01vdXNlRG93bkV2
ZW50VG9XaWRnZXQoV2lkZ2V0Kik7CiAgICAgYm9vbCBwYXNzV2hlZWxFdmVudFRvV2lkZ2V0KFBs
YXRmb3JtV2hlZWxFdmVudCYsIFdpZGdldCopOworI2lmIEVOQUJMRShHRVNUVVJFX0VWRU5UUykK
KyAgICBib29sIHBhc3NHZXN0dXJlRXZlbnRUb1dpZGdldChjb25zdCBQbGF0Zm9ybUdlc3R1cmVF
dmVudCYsIFdpZGdldCopOworI2VuZGlmCiAKICAgICB2b2lkIGRlZmF1bHRTcGFjZUV2ZW50SGFu
ZGxlcihLZXlib2FyZEV2ZW50Kik7CiAgICAgdm9pZCBkZWZhdWx0QmFja3NwYWNlRXZlbnRIYW5k
bGVyKEtleWJvYXJkRXZlbnQqKTsKQEAgLTQyMSw2ICs0MjQsMTEgQEAgcHJpdmF0ZToKICAgICBU
b3VjaFRhcmdldE1hcCBtX29yaWdpbmF0aW5nVG91Y2hQb2ludFRhcmdldHM7CiAgICAgYm9vbCBt
X3RvdWNoUHJlc3NlZDsKICNlbmRpZgorI2lmIEVOQUJMRShHRVNUVVJFX0VWRU5UUykKKyAgICBi
b29sIGhhbmRsZUdlc3R1cmVTY3JvbGxFdmVudEhlbHBlcihQYXNzUmVmUHRyPE5vZGU+LCBjb25z
dCBQbGF0Zm9ybUdlc3R1cmVFdmVudCYsIGNvbnN0IEhpdFRlc3RSZXN1bHQmKTsKKyAgICBSZWZQ
dHI8Tm9kZT4gbV9nZXN0dXJlVGFyZ2V0Tm9kZTsKKyNlbmRpZgorCiB9OwogCiB9IC8vIG5hbWVz
cGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL2Nocm9taXVtL0V2
ZW50SGFuZGxlckNocm9taXVtLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvY2hyb21pdW0vRXZl
bnRIYW5kbGVyQ2hyb21pdW0uY3BwCmluZGV4IDQwYTcxYWIxMWE1MzFhYjE1MGM2MTgxNGNiYTRm
NjI4ZDM1ZWIzY2UuLjNlZDU0ZTgzMjAxMDZjZTg5ODViNThkYjIzZTFkNGViOTM4NWM4NTMgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvY2hyb21pdW0vRXZlbnRIYW5kbGVyQ2hyb21p
dW0uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvY2hyb21pdW0vRXZlbnRIYW5kbGVyQ2hy
b21pdW0uY3BwCkBAIC00NCw2ICs0NCwxMSBAQAogI2luY2x1ZGUgIlBsYXRmb3JtV2hlZWxFdmVu
dC5oIgogI2luY2x1ZGUgIlJlbmRlcldpZGdldC5oIgogCisjaWYgRU5BQkxFKEdFU1RVUkVfRVZF
TlRTKSB8fCBFTkFCTEUoR0VTVFVSRV9SRUNPR05JWkVSKQorI2luY2x1ZGUgIlBsYXRmb3JtR2Vz
dHVyZUV2ZW50LmgiCisjZW5kaWYKKworCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKICNpZiBPUyhE
QVJXSU4pCkBAIC0xNjQsNCArMTY5LDE3IEBAIGJvb2wgRXZlbnRIYW5kbGVyOjpzaG91bGRUdXJu
VmVydGljYWxUaWNrc0ludG9Ib3Jpem9udGFsKGNvbnN0IEhpdFRlc3RSZXN1bHQmIHJlCiB9CiAj
ZW5kaWYKIAorI2lmIEVOQUJMRShHRVNUVVJFX0VWRU5UUykKK2Jvb2wgRXZlbnRIYW5kbGVyOjpw
YXNzR2VzdHVyZUV2ZW50VG9XaWRnZXQoY29uc3QgUGxhdGZvcm1HZXN0dXJlRXZlbnQmIGdlc3R1
cmVFdmVudCwgV2lkZ2V0KiB3aWRnZXQpCit7CisgICAgaWYgKCF3aWRnZXQpCisgICAgICAgIHJl
dHVybiBmYWxzZTsKKworICAgIGlmICghd2lkZ2V0LT5pc0ZyYW1lVmlldygpKQorICAgICAgICBy
ZXR1cm4gZmFsc2U7CisKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8RnJhbWVWaWV3Kj4od2lkZ2V0
KS0+ZnJhbWUoKS0+ZXZlbnRIYW5kbGVyKCktPmhhbmRsZUdlc3R1cmVFdmVudChnZXN0dXJlRXZl
bnQpOworfQorI2VuZGlmCisKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3BhZ2UvZWZsL0V2ZW50SGFuZGxlckVmbC5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9wYWdlL2VmbC9FdmVudEhhbmRsZXJFZmwuY3BwCmluZGV4IDNhM2M0ZGQyMDYxNjU4ZThkMGVh
ZDdlNTViYmVjZWU5ZGY5NjM2MmIuLjJiOWRhY2NiY2NmMjhhMTdlZDg2NzI1NmFmNGVhZGZmMmRj
NGVhZGYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvZWZsL0V2ZW50SGFuZGxlckVm
bC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGFnZS9lZmwvRXZlbnRIYW5kbGVyRWZsLmNwcApA
QCAtOTUsNiArOTUsMTQgQEAgYm9vbCBFdmVudEhhbmRsZXI6OnBhc3NXaGVlbEV2ZW50VG9XaWRn
ZXQoUGxhdGZvcm1XaGVlbEV2ZW50JiBldmVudCwgV2lkZ2V0KiB3aWQKICAgICByZXR1cm4gc3Rh
dGljX2Nhc3Q8RnJhbWVWaWV3Kj4od2lkZ2V0KS0+ZnJhbWUoKS0+ZXZlbnRIYW5kbGVyKCktPmhh
bmRsZVdoZWVsRXZlbnQoZXZlbnQpOwogfQogCisjaWYgRU5BQkxFKEdFU1RVUkVfRVZFTlRTKQor
Ym9vbCBFdmVudEhhbmRsZXI6OnBhc3NHZXN0dXJlRXZlbnRUb1dpZGdldChjb25zdCBQbGF0Zm9y
bUdlc3R1cmVFdmVudCYsIFdpZGdldCopCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICBy
ZXR1cm4gZmFsc2U7Cit9CisjZW5kaWYKKwogUGFzc1JlZlB0cjxDbGlwYm9hcmQ+IEV2ZW50SGFu
ZGxlcjo6Y3JlYXRlRHJhZ2dpbmdDbGlwYm9hcmQoKSBjb25zdAogewogICAgIHJldHVybiBDbGlw
Ym9hcmRFZmw6OmNyZWF0ZShDbGlwYm9hcmRXcml0YWJsZSwgQ2xpcGJvYXJkOjpEcmFnQW5kRHJv
cCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL2d0ay9FdmVudEhhbmRsZXJHdGsu
Y3BwIGIvU291cmNlL1dlYkNvcmUvcGFnZS9ndGsvRXZlbnRIYW5kbGVyR3RrLmNwcAppbmRleCBh
YjU0ZDgzOGRiZDlkYjJiMjA0NTE5OGRiMTJkYjFhOWNlODdiZWI5Li41ZTQzYWJkNjc3YWVmODEw
YjFiZjQ0NGYyNWQ4ZTJlNGIzYzQyOTA4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wYWdl
L2d0ay9FdmVudEhhbmRsZXJHdGsuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvZ3RrL0V2
ZW50SGFuZGxlckd0ay5jcHAKQEAgLTk0LDYgKzk0LDE0IEBAIGJvb2wgRXZlbnRIYW5kbGVyOjpw
YXNzV2hlZWxFdmVudFRvV2lkZ2V0KFBsYXRmb3JtV2hlZWxFdmVudCYgZXZlbnQsIFdpZGdldCog
d2lkCiAgICAgcmV0dXJuIHN0YXRpY19jYXN0PEZyYW1lVmlldyo+KHdpZGdldCktPmZyYW1lKCkt
PmV2ZW50SGFuZGxlcigpLT5oYW5kbGVXaGVlbEV2ZW50KGV2ZW50KTsKIH0KIAorI2lmIEVOQUJM
RShHRVNUVVJFX0VWRU5UUykKK2Jvb2wgRXZlbnRIYW5kbGVyOjpwYXNzR2VzdHVyZUV2ZW50VG9X
aWRnZXQoUGxhdGZvcm1HZXN0dXJlRXZlbnQmLCBXaWRnZXQqKQoreworICAgIG5vdEltcGxlbWVu
dGVkKCk7CisgICAgcmV0dXJuIGZhbHNlOworfQorI2VuZGlmCisKIFBhc3NSZWZQdHI8Q2xpcGJv
YXJkPiBFdmVudEhhbmRsZXI6OmNyZWF0ZURyYWdnaW5nQ2xpcGJvYXJkKCkgY29uc3QKIHsKICAg
ICByZXR1cm4gQ2xpcGJvYXJkR3RrOjpjcmVhdGUoQ2xpcGJvYXJkV3JpdGFibGUsIERhdGFPYmpl
Y3RHdGs6OmNyZWF0ZSgpLCBDbGlwYm9hcmQ6OkRyYWdBbmREcm9wLCBtX2ZyYW1lKTsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvbWFjL0V2ZW50SGFuZGxlck1hYy5tbSBiL1NvdXJj
ZS9XZWJDb3JlL3BhZ2UvbWFjL0V2ZW50SGFuZGxlck1hYy5tbQppbmRleCA3NjIyOTM1Yjc0YzI4
ODZlZDI2MDc4MmQzZjA2ZTdmYmEwYjU4ZWJmLi4wNzdlNjJiZTdlMGZjNjQ4NDU1ZTUyYTMwNTNh
MzFkYTdlYmViYmUwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL21hYy9FdmVudEhh
bmRsZXJNYWMubW0KKysrIGIvU291cmNlL1dlYkNvcmUvcGFnZS9tYWMvRXZlbnRIYW5kbGVyTWFj
Lm1tCkBAIC03MjQsNCArNzI0LDI1IEBAIHVuc2lnbmVkIEV2ZW50SGFuZGxlcjo6YWNjZXNzS2V5
TW9kaWZpZXJzKCkKICAgICByZXR1cm4gUGxhdGZvcm1LZXlib2FyZEV2ZW50OjpDdHJsS2V5IHwg
UGxhdGZvcm1LZXlib2FyZEV2ZW50OjpBbHRLZXk7CiB9CiAKKyNpZiBFTkFCTEUoR0VTVFVSRV9F
VkVOVFMpCitib29sIEV2ZW50SGFuZGxlcjo6cGFzc0dlc3R1cmVFdmVudFRvV2lkZ2V0KGNvbnN0
IFBsYXRmb3JtR2VzdHVyZUV2ZW50JiBnZXN0dXJlRXZlbnQsIFdpZGdldCogd2lkZ2V0KQorewor
ICAgIEJFR0lOX0JMT0NLX09CSkNfRVhDRVBUSU9OUzsKKworICAgIGlmICghd2lkZ2V0KQorICAg
ICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBOU1ZpZXcqIG5vZGVWaWV3ID0gd2lkZ2V0LT5wbGF0
Zm9ybVdpZGdldCgpOworICAgIGlmICghbm9kZVZpZXcpIHsKKyAgICAgICAgLy8gV2ViS2l0MiBj
b2RlIHBhdGguCisgICAgICAgIGlmICghd2lkZ2V0LT5pc0ZyYW1lVmlldygpKQorICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOworCisgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxGcmFtZVZpZXcq
Pih3aWRnZXQpLT5mcmFtZSgpLT5ldmVudEhhbmRsZXIoKS0+aGFuZGxlR2VzdHVyZUV2ZW50KGdl
c3R1cmVFdmVudCk7CisgICAgfQorICAgIEVORF9CTE9DS19PQkpDX0VYQ0VQVElPTlM7CisgICAg
cmV0dXJuIGZhbHNlOworfQorI2VuZGlmCisKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3BhZ2UvcXQvRXZlbnRIYW5kbGVyUXQuY3BwIGIvU291cmNlL1dlYkNvcmUvcGFnZS9xdC9FdmVu
dEhhbmRsZXJRdC5jcHAKaW5kZXggMmI4ODA0ZDQwYjBhMDY2ODkzN2NiZWQ2NmJlYzQzNTQyYjQ2
Y2EyZi4uOWU4NjQ1YzRjYzJlNmMwNTFiZTBiZDk2ZDFhODBkMThiMDhjMGUzMyAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvcGFnZS9xdC9FdmVudEhhbmRsZXJRdC5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUvcGFnZS9xdC9FdmVudEhhbmRsZXJRdC5jcHAKQEAgLTk4LDYgKzk4LDE3IEBAIGJv
b2wgRXZlbnRIYW5kbGVyOjpwYXNzV2hlZWxFdmVudFRvV2lkZ2V0KFBsYXRmb3JtV2hlZWxFdmVu
dCYgZXZlbnQsIFdpZGdldCogd2lkCiAgICAgcmV0dXJuIHN0YXRpY19jYXN0PEZyYW1lVmlldyo+
KHdpZGdldCktPmZyYW1lKCktPmV2ZW50SGFuZGxlcigpLT5oYW5kbGVXaGVlbEV2ZW50KGV2ZW50
KTsKIH0KIAorI2lmIEVOQUJMRShHRVNUVVJFX0VWRU5UUykKK2Jvb2wgRXZlbnRIYW5kbGVyOjpw
YXNzR2VzdHVyZUV2ZW50VG9XaWRnZXQoUGxhdGZvcm1HZXN0dXJlRXZlbnQmIGV2ZW50LCBXaWRn
ZXQqIHdpZGdldCkKK3sKKyAgICBRX0FTU0VSVCh3aWRnZXQpOworICAgIGlmICghd2lkZ2V0LT5p
c0ZyYW1lVmlldygpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICByZXR1cm4gc3RhdGlj
X2Nhc3Q8RnJhbWVWaWV3Kj4od2lkZ2V0KS0+ZnJhbWUoKS0+ZXZlbnRIYW5kbGVyKCktPmhhbmRs
ZUdlc3R1cmVFdmVudChldmVudCk7Cit9CisjZW5kaWYKKwogUGFzc1JlZlB0cjxDbGlwYm9hcmQ+
IEV2ZW50SGFuZGxlcjo6Y3JlYXRlRHJhZ2dpbmdDbGlwYm9hcmQoKSBjb25zdAogewogICAgIHJl
dHVybiBDbGlwYm9hcmRRdDo6Y3JlYXRlKENsaXBib2FyZFdyaXRhYmxlLCBtX2ZyYW1lLCBDbGlw
Ym9hcmQ6OkRyYWdBbmREcm9wKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2Uvd2lu
L0V2ZW50SGFuZGxlcldpbi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL3dpbi9FdmVudEhhbmRs
ZXJXaW4uY3BwCmluZGV4IDcyMWUzNTBlODJmYmZmZGMyZWU4M2E0MmE2MjEwNmM0NGQwZTY5MTYu
LmQ3YTE0YmUzNGZkYTkxZTVjZjYxMTM3OTcwZjFjZmNkNmVkYjAzM2IgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3BhZ2Uvd2luL0V2ZW50SGFuZGxlcldpbi5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvcGFnZS93aW4vRXZlbnRIYW5kbGVyV2luLmNwcApAQCAtODEsNiArODEsMTQgQEAgYm9v
bCBFdmVudEhhbmRsZXI6OnBhc3NXaGVlbEV2ZW50VG9XaWRnZXQoUGxhdGZvcm1XaGVlbEV2ZW50
JiB3aGVlbEV2ZW50LCBXaWRnZXQKICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8RnJhbWVWaWV3Kj4o
d2lkZ2V0KS0+ZnJhbWUoKS0+ZXZlbnRIYW5kbGVyKCktPmhhbmRsZVdoZWVsRXZlbnQod2hlZWxF
dmVudCk7CiB9CiAKKyNpZiBFTkFCTEUoR0VTVFVSRV9FVkVOVFMpCitib29sIEV2ZW50SGFuZGxl
cjo6cGFzc0dlc3R1cmVFdmVudFRvV2lkZ2V0KGNvbnN0IFBsYXRmb3JtR2VzdHVyZUV2ZW50Jiwg
V2lkZ2V0KikKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworICAgIHJldHVybiBmYWxzZTsKK30K
KyNlbmRpZgorCiBib29sIEV2ZW50SGFuZGxlcjo6dGFic1RvQWxsRm9ybUNvbnRyb2xzKEtleWJv
YXJkRXZlbnQqKSBjb25zdAogewogICAgIHJldHVybiB0cnVlOwpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcGFnZS93eC9FdmVudEhhbmRsZXJXeC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wYWdl
L3d4L0V2ZW50SGFuZGxlcld4LmNwcAppbmRleCBiYTJmOWNkNWJiNDU0OGM0YjE1ZTk3MzcwNmQ0
MzNiYTg4ZDI5NWE5Li41ZmJmYmNkMjY3ZDg5N2Y2NDNjZjM5OTU1ZDdiMzMyNDllN2RhY2ViIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL3d4L0V2ZW50SGFuZGxlcld4LmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9wYWdlL3d4L0V2ZW50SGFuZGxlcld4LmNwcApAQCAtODIsNiArODIs
MTQgQEAgYm9vbCBFdmVudEhhbmRsZXI6OnBhc3NXaGVlbEV2ZW50VG9XaWRnZXQoUGxhdGZvcm1X
aGVlbEV2ZW50JiBldmVudCwgV2lkZ2V0KiB3aWQKICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8RnJh
bWVWaWV3Kj4od2lkZ2V0KS0+ZnJhbWUoKS0+ZXZlbnRIYW5kbGVyKCktPmhhbmRsZVdoZWVsRXZl
bnQoZXZlbnQpOwogfQogCisjaWYgRU5BQkxFKEdFU1RVUkVfRVZFTlRTKQorYm9vbCBFdmVudEhh
bmRsZXI6OnBhc3NHZXN0dXJlRXZlbnRUb1dpZGdldChQbGF0Zm9ybUdlc3R1cmVFdmVudCYsIFdp
ZGdldCopCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsgCisgICAgcmV0dXJuIGZhbHNlOyAKK30K
KyNlbmRpZgorCiBib29sIEV2ZW50SGFuZGxlcjo6dGFic1RvQWxsRm9ybUNvbnRyb2xzKEtleWJv
YXJkRXZlbnQqIGV2ZW50KSBjb25zdCAKIHsgCiAgICAgbm90SW1wbGVtZW50ZWQoKTsgCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxBbmltYXRvci5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxBbmltYXRvci5jcHAKaW5kZXggMzI5OGUxOGE1MjU3
YzFjN2RmZTZmMTQwOGQ5MDk5YTA3MTZkMmIzZS4uNzdjMDcyYzMwZGVkYjkwZmRhODUyMTI2MGVm
MjQ2ZDFiZDZlMjZiNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU2Nyb2xs
QW5pbWF0b3IuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1Njcm9sbEFuaW1hdG9y
LmNwcApAQCAtMzcsNiArMzcsMTAgQEAKICNpbmNsdWRlIDxhbGdvcml0aG0+CiAjaW5jbHVkZSA8
d3RmL1Bhc3NPd25QdHIuaD4KIAorI2lmIEVOQUJMRShHRVNUVVJFX1JFQ09HTklaRVIpIHx8IEVO
QUJMRShHRVNUVVJFX0VWRU5UUykKKyNpbmNsdWRlICJQbGF0Zm9ybUdlc3R1cmVFdmVudC5oIgor
I2VuZGlmCisKIHVzaW5nIG5hbWVzcGFjZSBzdGQ7CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKQEAg
LTEyMSw4ICsxMjUsMjggQEAgYm9vbCBTY3JvbGxBbmltYXRvcjo6aGFuZGxlV2hlZWxFdmVudChj
b25zdCBQbGF0Zm9ybVdoZWVsRXZlbnQmIGUpCiB9CiAKICNpZiBFTkFCTEUoR0VTVFVSRV9FVkVO
VFMpCi12b2lkIFNjcm9sbEFuaW1hdG9yOjpoYW5kbGVHZXN0dXJlRXZlbnQoY29uc3QgUGxhdGZv
cm1HZXN0dXJlRXZlbnQmKQordm9pZCBTY3JvbGxBbmltYXRvcjo6aGFuZGxlR2VzdHVyZUV2ZW50
KGNvbnN0IFBsYXRmb3JtR2VzdHVyZUV2ZW50JiBldmVudCkKIHsKKyAgICBzd2l0Y2ggKGV2ZW50
LnR5cGUoKSkgeworICAgIGNhc2UgUGxhdGZvcm1HZXN0dXJlRXZlbnQ6OlNjcm9sbEJlZ2luVHlw
ZToKKyAgICBjYXNlIFBsYXRmb3JtR2VzdHVyZUV2ZW50OjpTY3JvbGxFbmRUeXBlOgorICAgICAg
ICBicmVhazsKKyAgICBjYXNlIFBsYXRmb3JtR2VzdHVyZUV2ZW50OjpTY3JvbGxVcGRhdGVUeXBl
OiB7CisgICAgICAgIEludFNpemUgbWF4Rm9yd2FyZFNjcm9sbERlbHRhID0gbV9zY3JvbGxhYmxl
QXJlYS0+bWF4aW11bVNjcm9sbFBvc2l0aW9uKCkgLSBtX3Njcm9sbGFibGVBcmVhLT5zY3JvbGxQ
b3NpdGlvbigpOworICAgICAgICBJbnRTaXplIG1heEJhY2t3YXJkU2Nyb2xsRGVsdGEgPSBtX3Nj
cm9sbGFibGVBcmVhLT5zY3JvbGxQb3NpdGlvbigpIC0gbV9zY3JvbGxhYmxlQXJlYS0+bWluaW11
bVNjcm9sbFBvc2l0aW9uKCk7CisgICAgICAgIGZsb2F0IGRlbHRhWCA9IChldmVudC5kZWx0YVgo
KSA8IDAuZikgPyBtYXgoZXZlbnQuZGVsdGFYKCksICAtZmxvYXQobWF4Rm9yd2FyZFNjcm9sbERl
bHRhLndpZHRoKCkpKSA6IG1pbihldmVudC5kZWx0YVgoKSwgZmxvYXQobWF4QmFja3dhcmRTY3Jv
bGxEZWx0YS53aWR0aCgpKSk7CisgICAgICAgIGZsb2F0IGRlbHRhWSA9IChldmVudC5kZWx0YVko
KSA8IDAuZikgPyBtYXgoZXZlbnQuZGVsdGFZKCksICAtZmxvYXQobWF4Rm9yd2FyZFNjcm9sbERl
bHRhLmhlaWdodCgpKSkgOiBtaW4oZXZlbnQuZGVsdGFZKCksIGZsb2F0KG1heEJhY2t3YXJkU2Ny
b2xsRGVsdGEuaGVpZ2h0KCkpKTsKKworICAgICAgICBJbnRSZWN0IGNvbnRlbnRSZWN0ID0gbV9z
Y3JvbGxhYmxlQXJlYS0+dmlzaWJsZUNvbnRlbnRSZWN0KHRydWUpOworICAgICAgICBGbG9hdFBv
aW50IG9mZnNldCA9IEZsb2F0UG9pbnQoY29udGVudFJlY3QueCgpIC0gZGVsdGFYLCBjb250ZW50
UmVjdC55KCkgLSBkZWx0YVkpOworICAgICAgICBzY3JvbGxUb09mZnNldFdpdGhvdXRBbmltYXRp
b24ob2Zmc2V0KTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorICAgIGNhc2UgUGxhdGZvcm1HZXN0
dXJlRXZlbnQ6OlRhcERvd25UeXBlOgorICAgIGNhc2UgUGxhdGZvcm1HZXN0dXJlRXZlbnQ6OlRh
cFR5cGU6CisgICAgY2FzZSBQbGF0Zm9ybUdlc3R1cmVFdmVudDo6RG91YmxlVGFwVHlwZToKKyAg
ICAgICAgYnJlYWs7CisgICAgfQogfQogI2VuZGlmCiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL1Njcm9sbEFuaW1hdG9yTm9uZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9TY3JvbGxBbmltYXRvck5vbmUuY3BwCmluZGV4IDJjZDVmM2EyNzYzMDZhN2ZhZDA2NThh
Y2RlMzY1MTJkYjRhZTUzNTQuLjc4YzQzYWY5MGQ1Zjk3NWNmY2Y5N2M4ZWI2OTI2NTU2ZmQzZDk2
MDUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1Njcm9sbEFuaW1hdG9yTm9u
ZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU2Nyb2xsQW5pbWF0b3JOb25lLmNw
cApAQCAtNTE4LDkgKzUxOCwyMiBAQCB2b2lkIFNjcm9sbEFuaW1hdG9yTm9uZTo6aGFuZGxlR2Vz
dHVyZUV2ZW50KGNvbnN0IFBsYXRmb3JtR2VzdHVyZUV2ZW50JiBwZ2UpCiAgICAgY2FzZSBQbGF0
Zm9ybUdlc3R1cmVFdmVudDo6RG91YmxlVGFwVHlwZToKICAgICAgICAgem9vbShwZ2UpOwogICAg
ICAgICBicmVhazsKLQorICAgIGNhc2UgUGxhdGZvcm1HZXN0dXJlRXZlbnQ6OlNjcm9sbEJlZ2lu
VHlwZToKKyAgICBjYXNlIFBsYXRmb3JtR2VzdHVyZUV2ZW50OjpTY3JvbGxFbmRUeXBlOgorICAg
ICAgICBicmVhazsKKyAgICBjYXNlIFBsYXRmb3JtR2VzdHVyZUV2ZW50OjpTY3JvbGxVcGRhdGVU
eXBlOiB7CisgICAgICAgIEludFNpemUgbWF4Rm9yd2FyZFNjcm9sbERlbHRhID0gbV9zY3JvbGxh
YmxlQXJlYS0+bWF4aW11bVNjcm9sbFBvc2l0aW9uKCkgLSBtX3Njcm9sbGFibGVBcmVhLT5zY3Jv
bGxQb3NpdGlvbigpOworICAgICAgICBJbnRTaXplIG1heEJhY2t3YXJkU2Nyb2xsRGVsdGEgPSBt
X3Njcm9sbGFibGVBcmVhLT5zY3JvbGxQb3NpdGlvbigpIC0gbV9zY3JvbGxhYmxlQXJlYS0+bWlu
aW11bVNjcm9sbFBvc2l0aW9uKCk7CisgICAgICAgIGZsb2F0IGRlbHRhWCA9IChwZ2UuZGVsdGFY
KCkgPCAwLmYpID8gbWF4KHBnZS5kZWx0YVgoKSwgIC1mbG9hdChtYXhGb3J3YXJkU2Nyb2xsRGVs
dGEud2lkdGgoKSkpIDogbWluKHBnZS5kZWx0YVgoKSwgZmxvYXQobWF4QmFja3dhcmRTY3JvbGxE
ZWx0YS53aWR0aCgpKSk7CisgICAgICAgIGZsb2F0IGRlbHRhWSA9IChwZ2UuZGVsdGFZKCkgPCAw
LmYpID8gbWF4KHBnZS5kZWx0YVkoKSwgIC1mbG9hdChtYXhGb3J3YXJkU2Nyb2xsRGVsdGEuaGVp
Z2h0KCkpKSA6IG1pbihwZ2UuZGVsdGFZKCksIGZsb2F0KG1heEJhY2t3YXJkU2Nyb2xsRGVsdGEu
aGVpZ2h0KCkpKTsKKworICAgICAgICBJbnRSZWN0IGNvbnRlbnRSZWN0ID0gbV9zY3JvbGxhYmxl
QXJlYS0+dmlzaWJsZUNvbnRlbnRSZWN0KHRydWUpOworICAgICAgICBGbG9hdFBvaW50IG9mZnNl
dCA9IEZsb2F0UG9pbnQoY29udGVudFJlY3QueCgpIC0gZGVsdGFYLCBjb250ZW50UmVjdC55KCkg
LSBkZWx0YVkpOworICAgICAgICBzY3JvbGxUb09mZnNldFdpdGhvdXRBbmltYXRpb24ob2Zmc2V0
KTsKKyAgICAgICAgYnJlYWs7CisgICAgfQogICAgIGRlZmF1bHQ6Ci0gICAgICAgIC8vIFRPRE86
IGFkZCBhbnkgb3RoZXIgZXZlbnQgdHlwZXMgd2Ugc2hvdWxkIGhhbmRsZQorICAgICAgICAvLyBG
SVhNRTogYWRkIGFueSBvdGhlciBldmVudCB0eXBlcyB3ZSBzaG91bGQgaGFuZGxlCiAgICAgICAg
IHsgfQogICAgIH0KIH0KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL0NoYW5nZUxvZyBiL0xheW91
dFRlc3RzL0NoYW5nZUxvZwppbmRleCA4ZWRlNWY4NmYxYzE3MjZiNDkyOTM5ZTUxZTQ0Y2I5MGZk
ZTEwY2JjLi5mYjU0MjNlMWFlMWI0YTU0ZGQ0ZmI1ODUwZjhlOWJlMjM1YjdiZTkxIDEwMDY0NAot
LS0gYS9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKKysrIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCkBA
IC0xLDMgKzEsMjIgQEAKKzIwMTEtMTAtMjAgIFJvYmVydCBLcm9lZ2VyICA8cmprcm9lZ2VAY2hy
b21pdW0ub3JnPgorCisgICAgICAgIFBsYXRmb3JtR2VzdHVyZUV2ZW50OjpoYW5kbGVHZXN0dXJl
RXZlbnQgc2hvdWxkIGhpdCB0ZXN0IHdoaWxlIGRpc3BhdGNoaW5nIFNjcm9sbCogZXZlbnRzLgor
ICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9Njc4MjIKKwor
ICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIGZhc3QvZXZl
bnRzL3RvdWNoL3Jlc291cmNlcy9zY3JvbGwtaW5zaWRlLWlmcmFtZS5odG1sOiBBZGRlZC4KKyAg
ICAgICAgKiBmYXN0L2V2ZW50cy90b3VjaC90b3VjaC1nZXN0dXJlLXNjcm9sbC1pZnJhbWUtZXhw
ZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAgICAgKiBmYXN0L2V2ZW50cy90b3VjaC90b3VjaC1nZXN0
dXJlLXNjcm9sbC1pZnJhbWUuaHRtbDogQWRkZWQuCisgICAgICAgIFRlc3RzIHRoYXQgUEdFIFNj
cm9sbCogZXZlbnRzIGRpc3BhdGNoIGludG8gaWZyYW1lcyBjb3JyZWN0bHkuCisgICAgICAgICog
ZmFzdC9ldmVudHMvdG91Y2gvdG91Y2gtZ2VzdHVyZS1zY3JvbGwtcGFnZS1leHBlY3RlZC50eHQ6
IEFkZGVkLgorICAgICAgICAqIGZhc3QvZXZlbnRzL3RvdWNoL3RvdWNoLWdlc3R1cmUtc2Nyb2xs
LXBhZ2UuaHRtbDogQWRkZWQuCisgICAgICAgIFRlc3RzIHRoYXQgUEdFIFNjcm9sbCBldmVudHMg
YWZmZWN0IHRoZSBwYWdlLgorICAgICAgICAqIGZhc3QvZXZlbnRzL3RvdWNoL3RvdWNoLWdlc3R1
cmUtc2Nyb2xsLXNoeS10YXJnZXQtZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAgICAgKiBmYXN0
L2V2ZW50cy90b3VjaC90b3VjaC1nZXN0dXJlLXNjcm9sbC1zaHktdGFyZ2V0Lmh0bWw6IEFkZGVk
LgorICAgICAgICBUZXN0cyB0aGF0IFBHRSBTY3JvbGwgZXZlbnRzIGFyZSBncmFiYmVkIGJ5IHRo
ZSB0YXJnZXQgbm9kZSBhbmQgdGhhdAorICAgICAgICBkZWxlY3Rpb24gb2YgdGhlIHRhcmdldCBk
b2VzIG5vdCBjYXVzZSBhIGNyYXNoLgorCiAyMDExLTEwLTE5ICBDYXJ5IENsYXJrICA8Y2FyeWNs
YXJrQGdvb2dsZS5jb20+CiAKICAgICAgICAgVW5yZXZpZXdlZCBnYXJkZW5pbmc6IHJlYmFzZWxp
bmUgcmVtYWluaW5nIGRpZmZzIGZvciBDaHJvbWl1bS1Ta2lhIG9uCmRpZmYgLS1naXQgYS9MYXlv
dXRUZXN0cy9mYXN0L2V2ZW50cy90b3VjaC9yZXNvdXJjZXMvc2Nyb2xsLWluc2lkZS1pZnJhbWUu
aHRtbCBiL0xheW91dFRlc3RzL2Zhc3QvZXZlbnRzL3RvdWNoL3Jlc291cmNlcy9zY3JvbGwtaW5z
aWRlLWlmcmFtZS5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjk0Zjc4ODc3YzUyYmE1NzZiNGM1MTE4MDBmNDE0
Yjg0ZDA0MzdkOWMKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9mYXN0L2V2ZW50cy90
b3VjaC9yZXNvdXJjZXMvc2Nyb2xsLWluc2lkZS1pZnJhbWUuaHRtbApAQCAtMCwwICsxLDM0IEBA
Cis8aHRtbD4KKzxoZWFkPgorPHN0eWxlIHR5cGU9InRleHQvY3NzIj4KKyNncmVlbmJveCB7Cisg
IHdpZHRoOiAxMDBweDsKKyAgaGVpZ2h0OiAxMDBweDsKKyAgYmFja2dyb3VuZDogZ3JlZW47Cisg
IHBhZGRpbmc6IDBweDsKKyAgbWFyZ2luOiAwcHg7YQorfQorI3JlZGJveCB7CisgIHdpZHRoOiAx
MDBweDsKKyAgaGVpZ2h0OiAxMDBweDsKKyAgYmFja2dyb3VuZDogcmVkOworICBwYWRkaW5nOiAw
cHg7CisgIG1hcmdpbjogMHB4OworfQorCit0ZCB7CisgIHBhZGRpbmc6IDBweDsKK30KKzwvc3R5
bGU+Cis8L2hlYWQ+Cis8Ym9keSBzdHlsZT0ibWFyZ2luOjAiIG9ubG9hZD0icGFyZW50LnJ1blRl
c3QoKSI+CisKKzx0YWJsZSBpZD0idGFibGVfdG9fZmlsbCI+CisgICAgPHRyPjx0ZD48ZGl2IGlk
PSJncmVlbmJveCI+PC9kaXY+PC90ZD48L3RyPgorICAgIDx0cj48dGQ+PGRpdiBpZD0icmVkYm94
Ij48L2Rpdj48L3RkPjwvdHI+CisgICAgPHRyPjx0ZD48ZGl2IGlkPSJncmVlbmJveCI+PC9kaXY+
PC90ZD48L3RyPgorICAgIDx0cj48dGQ+PGRpdiBpZD0icmVkYm94Ij48L2Rpdj48L3RkPjwvdHI+
Cis8L3RhYmxlPgorPGJvZHk+Cis8L2h0bWw+CisKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2Zh
c3QvZXZlbnRzL3RvdWNoL3RvdWNoLWdlc3R1cmUtc2Nyb2xsLWlmcmFtZS1leHBlY3RlZC50eHQg
Yi9MYXlvdXRUZXN0cy9mYXN0L2V2ZW50cy90b3VjaC90b3VjaC1nZXN0dXJlLXNjcm9sbC1pZnJh
bWUtZXhwZWN0ZWQudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmZiMDQ2Mzk0M2RiZTBiNWMwNWYyZTlkMzYxYjdj
YjA2ZTlmMDAwYjUKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9mYXN0L2V2ZW50cy90
b3VjaC90b3VjaC1nZXN0dXJlLXNjcm9sbC1pZnJhbWUtZXhwZWN0ZWQudHh0CkBAIC0wLDAgKzEs
MTYgQEAKKworVGhpcyB0ZXN0cyBnZXN0dXJlIHNjcm9sbGluZyBpbiBpZnJhbWVzLiBSZWQtZ3Jl
ZW4gc3RyaXAgaXMgc2Nyb2xsZWQgb24gcGFzcy4KKworT24gc3VjY2VzcywgeW91IHdpbGwgc2Vl
IGEgc2VyaWVzIG9mICJQQVNTIiBtZXNzYWdlcywgZm9sbG93ZWQgYnkgIlRFU1QgQ09NUExFVEUi
LgorCisKK2ZpcnN0IGdlc3R1cmUKK1BBU1MgdG91Y2h0YXJnZXQuY29udGVudERvY3VtZW50LmJv
ZHkuc2Nyb2xsVG9wIGlzIDE0MAorUEFTUyB0b3VjaHRhcmdldC5jb250ZW50RG9jdW1lbnQuYm9k
eS5zY3JvbGxMZWZ0IGlzIDAKK3NlY29uZCBnZXN0dXJlCitQQVNTIHRvdWNodGFyZ2V0LmNvbnRl
bnREb2N1bWVudC5ib2R5LnNjcm9sbFRvcCBpcyAyMDAKK1BBU1MgdG91Y2h0YXJnZXQuY29udGVu
dERvY3VtZW50LmJvZHkuc2Nyb2xsTGVmdCBpcyAwCitQQVNTIHN1Y2Nlc3NmdWxseVBhcnNlZCBp
cyB0cnVlCisKK1RFU1QgQ09NUExFVEUKKwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvZmFzdC9l
dmVudHMvdG91Y2gvdG91Y2gtZ2VzdHVyZS1zY3JvbGwtaWZyYW1lLmh0bWwgYi9MYXlvdXRUZXN0
cy9mYXN0L2V2ZW50cy90b3VjaC90b3VjaC1nZXN0dXJlLXNjcm9sbC1pZnJhbWUuaHRtbApuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwLi5lNDEyN2ZlM2UzNzgyZWI0MDg3MWY0NTJjMjM1ZmJjNDJkYmQwOTllCi0tLSAvZGV2
L251bGwKKysrIGIvTGF5b3V0VGVzdHMvZmFzdC9ldmVudHMvdG91Y2gvdG91Y2gtZ2VzdHVyZS1z
Y3JvbGwtaWZyYW1lLmh0bWwKQEAgLTAsMCArMSwxMjEgQEAKKzwhRE9DVFlQRSBIVE1MIFBVQkxJ
QyAiLS8vSUVURi8vRFREIEhUTUwvL0VOIj4KKzxodG1sPgorPGhlYWQ+Cis8bGluayByZWw9InN0
eWxlc2hlZXQiIGhyZWY9Ii4uLy4uL2pzL3Jlc291cmNlcy9qcy10ZXN0LXN0eWxlLmNzcyI+Cis8
c2NyaXB0IHNyYz0iLi4vLi4vanMvcmVzb3VyY2VzL2pzLXRlc3QtcHJlLmpzIj48L3NjcmlwdD4K
KzxzY3JpcHQgc3JjPSIuLi8uLi9qcy9yZXNvdXJjZXMvanMtdGVzdC1wb3N0LWZ1bmN0aW9uLmpz
Ij48L3NjcmlwdD4KKzxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+CisjdG91Y2h0YXJnZXQgeworICB3
aWR0aDogMjAwcHg7CisgIGhlaWdodDogMjAwcHg7CisgIHBvc2l0aW9uOiByZWxhdGl2ZTsKKyAg
YmFja2dyb3VuZDogd2hpdGU7Cit9Cis8L3N0eWxlPgorPC9oZWFkPgorPGJvZHk+Cis8aWZyYW1l
IGlkPSJ0b3VjaHRhcmdldCIgc3JjPSIuL3Jlc291cmNlcy9zY3JvbGwtaW5zaWRlLWlmcmFtZS5o
dG1sIj48L2lmcmFtZT4KKyAgICA8cCBpZD0iZGVzY3JpcHRpb24iPjwvcD4KKzxkaXYgaWQ9ImNv
bnNvbGUiPjwvZGl2PgorPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgorCit2YXIgdG91
Y2h0YXJnZXQ7Cit2YXIgZXhwZWN0ZWRTY3JvbGxzVG90YWwgPSAyOwordmFyIHNjcm9sbHNPY2N1
cnJlZCA9IDA7Cit2YXIgc2Nyb2xsQW1vdW50WCA9IFsnMCcsICcwJ107Cit2YXIgc2Nyb2xsQW1v
dW50WSA9IFsnMTQwJywgJzIwMCddOworCitmdW5jdGlvbiBjaGVja1Njcm9sbE9mZnNldCgpCit7
CisgICAgdG91Y2h0YXJnZXQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG91Y2h0YXJnZXQn
KTsKKyAgICBpZiAod2luZG93LmV2ZW50U2VuZGVyKSB7CisgICAgICAgIHNob3VsZEJlKCd0b3Vj
aHRhcmdldC5jb250ZW50RG9jdW1lbnQuYm9keS5zY3JvbGxUb3AnLCBzY3JvbGxBbW91bnRZW3Nj
cm9sbHNPY2N1cnJlZF0pOworICAgICAgICBzaG91bGRCZSgndG91Y2h0YXJnZXQuY29udGVudERv
Y3VtZW50LmJvZHkuc2Nyb2xsTGVmdCcsIHNjcm9sbEFtb3VudFhbc2Nyb2xsc09jY3VycmVkXSk7
CisgICAgICAgIHNjcm9sbHNPY2N1cnJlZCsrOworICAgIH0KKworICAgIGlmIChzY3JvbGxzT2Nj
dXJyZWQgPT0gZXhwZWN0ZWRTY3JvbGxzVG90YWwpIHsKKyAgICAgICAgLy8gSWYgd2UndmUgZ290
IGhlcmUsIHdlJ3ZlIHBhc3NlZC4KKyAgICAgICAgc3VjY2Vzc2Z1bGx5UGFyc2VkID0gdHJ1ZTsK
KyAgICAgICAgaXNTdWNjZXNzZnVsbHlQYXJzZWQoKTsKKyAgICAgICAgaWYgKHdpbmRvdy5sYXlv
dXRUZXN0Q29udHJvbGxlcikKKyAgICAgICAgICAgIGxheW91dFRlc3RDb250cm9sbGVyLm5vdGlm
eURvbmUoKTsKKyAgICB9IGVsc2UgeworICAgICAgICBzZWNvbmRUb3VjaERyYWdTZXF1ZW5jZSgp
OworICAgIH0KK30KKworZnVuY3Rpb24gZmluZ2VyVXAoZXZlbnQpCit7CisgICAgaWYgKCF3aW5k
b3cubGF5b3V0VGVzdENvbnRyb2xsZXIpCisgICAgICAgIGRlYnVnKCdtb3ZlZDogJyArIGV2ZW50
LmN1cnJlbnRUYXJnZXQuc2Nyb2xsVG9wICsgJywgJyArIGV2ZW50LmN1cnJlbnRUYXJnZXQuc2Ny
b2xsTGVmdCk7CisgICAgcmV0dXJuIHRydWU7ICAvLyBXYW50IHRoZSBkZWZhdWx0IGJlaGF2aW91
ci4KK30KKworZnVuY3Rpb24gZmlyc3RUb3VjaERyYWdTZXF1ZW5jZSgpCit7CisgICAgZGVidWco
ImZpcnN0IGdlc3R1cmUiKTsKKyAgICBldmVudFNlbmRlci5jbGVhclRvdWNoUG9pbnRzKCk7Cisg
ICAgZXZlbnRTZW5kZXIuYWRkVG91Y2hQb2ludCgxMiwgMTUwKTsKKyAgICBldmVudFNlbmRlci50
b3VjaFN0YXJ0KCk7CisKKyAgICAvLyBTY3JvbGwgdGhlIGRpdiB0byB0aGUgbGVmdC4KKyAgICBl
dmVudFNlbmRlci51cGRhdGVUb3VjaFBvaW50KDAsIDEyLCAxMCk7CisgICAgZXZlbnRTZW5kZXIu
dG91Y2hNb3ZlKCk7CisKKyAgICBldmVudFNlbmRlci5yZWxlYXNlVG91Y2hQb2ludCgwKTsKKyAg
ICBldmVudFNlbmRlci50b3VjaEVuZCgpOworCisgICAgLy8gV2FpdCBmb3IgbGF5b3V0LgorICAg
IGNoZWNrU2Nyb2xsT2Zmc2V0KCk7Cit9CisKK2Z1bmN0aW9uIHNlY29uZFRvdWNoRHJhZ1NlcXVl
bmNlKCkKK3sKKyAgICBkZWJ1Zygic2Vjb25kIGdlc3R1cmUiKTsKKyAgICBldmVudFNlbmRlci5j
bGVhclRvdWNoUG9pbnRzKCk7CisgICAgZXZlbnRTZW5kZXIuYWRkVG91Y2hQb2ludCgxMiwgMTAw
KTsKKyAgICBldmVudFNlbmRlci50b3VjaFN0YXJ0KCk7CisKKyAgICAvLyBTY3JvbGwgdGhlIHJl
Y3RhbmdsZSBkb3duLgorICAgIGV2ZW50U2VuZGVyLnVwZGF0ZVRvdWNoUG9pbnQoMCwgMTIsIDQw
KTsKKyAgICBldmVudFNlbmRlci50b3VjaE1vdmUoKTsKKworICAgIGV2ZW50U2VuZGVyLnJlbGVh
c2VUb3VjaFBvaW50KDApOworICAgIGV2ZW50U2VuZGVyLnRvdWNoRW5kKCk7CisKKyAgICAvLyBX
YWl0IGZvciBsYXlvdXQuCisgICAgY2hlY2tTY3JvbGxPZmZzZXQoKTsKK30KKworZnVuY3Rpb24g
ZXhpdElmTmVjZXNzYXJ5KCkKK3sKKyAgICBkZWJ1ZygnR2VzdHVyZSBtYW5hZ2VyIG5vdCBpbXBs
ZW1lbnRlZCBvbiB0aGlzIHBsYXRmb3JtIG9yIGJyb2tlbicpOworICAgIHN1Y2Nlc3NmdWxseVBh
cnNlZCA9IHRydWU7CisgICAgaXNTdWNjZXNzZnVsbHlQYXJzZWQoKTsKKyAgICBpZiAod2luZG93
LmxheW91dFRlc3RDb250cm9sbGVyKQorICAgICAgICBsYXlvdXRUZXN0Q29udHJvbGxlci5ub3Rp
ZnlEb25lKCk7Cit9CisKK2lmICh3aW5kb3cubGF5b3V0VGVzdENvbnRyb2xsZXIpCisgICAgbGF5
b3V0VGVzdENvbnRyb2xsZXIud2FpdFVudGlsRG9uZSgpOworCitmdW5jdGlvbiBydW5UZXN0KCkK
K3sKKyAgICB0b3VjaHRhcmdldCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b3VjaHRhcmdl
dCcpOworCisgICAgaWYgKHdpbmRvdy5ldmVudFNlbmRlcikgeworICAgICAgICBkZXNjcmlwdGlv
bignVGhpcyB0ZXN0cyBnZXN0dXJlIHNjcm9sbGluZyBpbiBpZnJhbWVzLiAnICsKKyAgICAgICAg
ICAgICdSZWQtZ3JlZW4gc3RyaXAgaXMgc2Nyb2xsZWQgb24gcGFzcy4nKTsKKworICAgICAgICBp
ZiAoZXZlbnRTZW5kZXIuY2xlYXJUb3VjaFBvaW50cykKKyAgICAgICAgICAgIGZpcnN0VG91Y2hE
cmFnU2VxdWVuY2UoKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgZXhpdElmTmVjZXNzYXJ5
KCk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgZGVidWcoIlRoaXMgdGVzdCByZXF1aXJlcyBEdW1w
UmVuZGVyVHJlZS4gIFRvdWNoLXNjcm9sbCB0aGUgcmVkL2dyZWVuIHN0cmlwLiIpOworICAgIH0K
K30KKzwvc2NyaXB0PgorPC9ib2R5PgorPC9odG1sPgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMv
ZmFzdC9ldmVudHMvdG91Y2gvdG91Y2gtZ2VzdHVyZS1zY3JvbGwtcGFnZS1leHBlY3RlZC50eHQg
Yi9MYXlvdXRUZXN0cy9mYXN0L2V2ZW50cy90b3VjaC90b3VjaC1nZXN0dXJlLXNjcm9sbC1wYWdl
LWV4cGVjdGVkLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi40Zjk5NjViODdhMDk3YTc4YzUxYzlhMjlhYTZhZmI3
MzYzM2E0ZjVhCi0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvZmFzdC9ldmVudHMvdG91
Y2gvdG91Y2gtZ2VzdHVyZS1zY3JvbGwtcGFnZS1leHBlY3RlZC50eHQKQEAgLTAsMCArMSwxNSBA
QAorVGhpcyB0ZXN0cyBzY3JvbGwgZ2VzdHVyZXMgZnJvbSB0b3VjaCBldmVudHMgb24gdGhlIHdo
b2xlIHBhZ2UuIFNxdWFyZSBpcyAobW9zdGx5KSBncmVlbiBvbiBwYXNzCisKK09uIHN1Y2Nlc3Ms
IHlvdSB3aWxsIHNlZSBhIHNlcmllcyBvZiAiUEFTUyIgbWVzc2FnZXMsIGZvbGxvd2VkIGJ5ICJU
RVNUIENPTVBMRVRFIi4KKworCitmaXJzdCBnZXN0dXJlCitQQVNTIGRvY3VtZW50LmJvZHkuc2Ny
b2xsVG9wIGlzIDcwCitQQVNTIGRvY3VtZW50LmJvZHkuc2Nyb2xsTGVmdCBpcyAwCitzZWNvbmQg
Z2VzdHVyZQorUEFTUyBkb2N1bWVudC5ib2R5LnNjcm9sbFRvcCBpcyAxMzAKK1BBU1MgZG9jdW1l
bnQuYm9keS5zY3JvbGxMZWZ0IGlzIDAKK1BBU1Mgc3VjY2Vzc2Z1bGx5UGFyc2VkIGlzIHRydWUK
KworVEVTVCBDT01QTEVURQorCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9mYXN0L2V2ZW50cy90
b3VjaC90b3VjaC1nZXN0dXJlLXNjcm9sbC1wYWdlLmh0bWwgYi9MYXlvdXRUZXN0cy9mYXN0L2V2
ZW50cy90b3VjaC90b3VjaC1nZXN0dXJlLXNjcm9sbC1wYWdlLmh0bWwKbmV3IGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNmQx
MjU1OWJlMGI2N2JmZDc1ODQ4N2E3MjFhMjc0ODQ1OGIyN2I2MAotLS0gL2Rldi9udWxsCisrKyBi
L0xheW91dFRlc3RzL2Zhc3QvZXZlbnRzL3RvdWNoL3RvdWNoLWdlc3R1cmUtc2Nyb2xsLXBhZ2Uu
aHRtbApAQCAtMCwwICsxLDE3MCBAQAorPCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9JRVRGLy9E
VEQgSFRNTC8vRU4iPgorPGh0bWw+Cis8aGVhZD4KKzxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJl
Zj0iLi4vLi4vanMvcmVzb3VyY2VzL2pzLXRlc3Qtc3R5bGUuY3NzIj4KKzxzY3JpcHQgc3JjPSIu
Li8uLi9qcy9yZXNvdXJjZXMvanMtdGVzdC1wcmUuanMiPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9
Ii4uLy4uL2pzL3Jlc291cmNlcy9qcy10ZXN0LXBvc3QtZnVuY3Rpb24uanMiPjwvc2NyaXB0Pgor
PHN0eWxlIHR5cGU9InRleHQvY3NzIj4KKyNncmVlbmJveCB7CisgIHdpZHRoOiAxMDBweDsKKyAg
aGVpZ2h0OiAxMDBweDsKKyAgYmFja2dyb3VuZDogZ3JlZW47CisgIHBhZGRpbmc6IDBweDsKKyAg
bWFyZ2luOiAwcHg7Cit9CisjcmVkYm94IHsKKyAgd2lkdGg6IDEwMHB4OworICBoZWlnaHQ6IDEw
MHB4OworICBiYWNrZ3JvdW5kOiByZWQ7CisgIHBhZGRpbmc6IDBweDsKKyAgbWFyZ2luOiAwcHg7
Cit9CisKK3RkIHsKKyAgcGFkZGluZzogMHB4OworfQorPC9zdHlsZT4KKzwvaGVhZD4KKzxib2R5
IHN0eWxlPSJtYXJnaW46MCIgb25sb2FkPSJydW5UZXN0KCk7Ij4KKworPHRhYmxlIGlkPSJ0YWJs
ZV90b19maWxsIj4KKyAgICA8dHI+PHRkPjxkaXYgaWQ9ImdyZWVuYm94Ij48L2Rpdj48L3RkPjwv
dHI+CisgICAgPHRyPjx0ZD48ZGl2IGlkPSJyZWRib3giPjwvZGl2PjwvdGQ+PC90cj4KKzwvdGFi
bGU+CisKKzxwIGlkPSJkZXNjcmlwdGlvbiI+PC9wPgorPGRpdiBpZD0iY29uc29sZSI+PC9kaXY+
Cis8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CisKK3ZhciBtb3ZpbmdkaXY7Cit2YXIg
ZXhwZWN0ZWRTY3JvbGxzVG90YWwgPSAyOwordmFyIHNjcm9sbHNPY2N1cnJlZCA9IDA7Cit2YXIg
c2Nyb2xsQW1vdW50WCA9IFsnMCcsICcwJ107Cit2YXIgc2Nyb2xsQW1vdW50WSA9IFsnNzAnLCAn
MTMwJ107CisKKy8vIEFsd2F5cyBjb25zdHJ1Y3QgYSBwYWdlIGxhcmdlciB0aGFuIHRoZSB2ZXJ0
aWNhbCBoZWlnaHQgb2YgdGhlIHdpbmRvdy4KK2Z1bmN0aW9uIGJ1aWxkUGFnZSgpCit7CisgICAg
dmFyIHRhYmxlID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3RhYmxlX3RvX2ZpbGwnKTsKKyAg
ICB2YXIgdGFyZ2V0SGVpZ2h0ID0gZG9jdW1lbnQuaGVpZ2h0OworICAgIHZhciBjZWxsUGFpckhl
aWdodCA9IHRhYmxlLm9mZnNldEhlaWdodDsKKyAgICB2YXIgbnVtYmVyT2ZSZXBzID0gdGFyZ2V0
SGVpZ2h0IC8gY2VsbFBhaXJIZWlnaHQgKiAyOworICAgIHZhciBpOworICAgIGZvciAoaSA9IDA7
IGkgPCBudW1iZXJPZlJlcHM7IGkrKykgeworICAgICAgICB2YXIgcCA9IGRvY3VtZW50LmNyZWF0
ZUVsZW1lbnQoJ3RyJyk7CisgICAgICAgIHAuaW5uZXJIVE1MID0gJzx0ZD48ZGl2IGlkPSJncmVl
bmJveCI+PC9kaXY+PC90ZD4nOworICAgICAgICB0YWJsZS5hcHBlbmRDaGlsZChwKTsKKyAgICAg
ICAgdmFyIHAgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOworICAgICAgICBwLmlubmVy
SFRNTCA9ICc8dGQ+PGRpdiBpZD0icmVkYm94Ij48L2Rpdj48L3RkPic7CisgICAgICAgIHRhYmxl
LmFwcGVuZENoaWxkKHApOworICAgIH0KKworfQorCitmdW5jdGlvbiBjaGVja1Njcm9sbE9mZnNl
dCgpCit7CisgICAgaWYgKHdpbmRvdy5ldmVudFNlbmRlcikgeworICAgICAgICBzaG91bGRCZSgn
ZG9jdW1lbnQuYm9keS5zY3JvbGxUb3AnLCBzY3JvbGxBbW91bnRZW3Njcm9sbHNPY2N1cnJlZF0p
OworICAgICAgICBzaG91bGRCZSgnZG9jdW1lbnQuYm9keS5zY3JvbGxMZWZ0Jywgc2Nyb2xsQW1v
dW50WFtzY3JvbGxzT2NjdXJyZWRdKTsKKyAgICAgICAgc2Nyb2xsc09jY3VycmVkKys7CisgICAg
fQorCisgICAgaWYgKHNjcm9sbHNPY2N1cnJlZCA9PSBleHBlY3RlZFNjcm9sbHNUb3RhbCkgewor
ICAgICAgICAvLyBJZiB3ZSd2ZSBnb3QgaGVyZSwgd2UndmUgcGFzc2VkLgorICAgICAgICBzdWNj
ZXNzZnVsbHlQYXJzZWQgPSB0cnVlOworICAgICAgICBpc1N1Y2Nlc3NmdWxseVBhcnNlZCgpOwor
ICAgICAgICBpZiAod2luZG93LmxheW91dFRlc3RDb250cm9sbGVyKQorICAgICAgICAgICAgbGF5
b3V0VGVzdENvbnRyb2xsZXIubm90aWZ5RG9uZSgpOworICAgIH0gZWxzZSB7CisgICAgICAgIHNl
Y29uZFRvdWNoRHJhZ1NlcXVlbmNlKCk7CisgICAgfQorfQorCitmdW5jdGlvbiBmaW5nZXJVcChl
dmVudCkKK3sKKyAgICBpZiAoIXdpbmRvdy5sYXlvdXRUZXN0Q29udHJvbGxlcikKKyAgICAgICAg
ZGVidWcoJ21vdmVkOiAnICsgZXZlbnQuY3VycmVudFRhcmdldC5zY3JvbGxUb3AgKyAnLCAnICsg
ZXZlbnQuY3VycmVudFRhcmdldC5zY3JvbGxMZWZ0KTsKKyAgICByZXR1cm4gdHJ1ZTsgIC8vIFdh
bnQgdGhlIGRlZmF1bHQgYmVoYXZpb3VyLgorfQorCitmdW5jdGlvbiBmaXJzdFRvdWNoRHJhZ1Nl
cXVlbmNlKCkKK3sKKyAgICBkZWJ1ZygiZmlyc3QgZ2VzdHVyZSIpOworICAgIGV2ZW50U2VuZGVy
LmNsZWFyVG91Y2hQb2ludHMoKTsKKyAgICBldmVudFNlbmRlci5hZGRUb3VjaFBvaW50KDEwLCAx
MDIpOworICAgIGV2ZW50U2VuZGVyLnRvdWNoU3RhcnQoKTsKKworICAgIC8vIFNjcm9sbCB0aGUg
ZGl2IHRvIHRoZSBsZWZ0LgorICAgIGV2ZW50U2VuZGVyLnVwZGF0ZVRvdWNoUG9pbnQoMCwgMTAs
IDcyKTsKKyAgICBldmVudFNlbmRlci50b3VjaE1vdmUoKTsKKworICAgIGV2ZW50U2VuZGVyLnVw
ZGF0ZVRvdWNoUG9pbnQoMCwgMTAsIDMyKTsKKyAgICBldmVudFNlbmRlci50b3VjaE1vdmUoKTsK
KworICAgIGV2ZW50U2VuZGVyLnJlbGVhc2VUb3VjaFBvaW50KDApOworICAgIGV2ZW50U2VuZGVy
LnRvdWNoRW5kKCk7CisKKyAgICAvLyBXYWl0IGZvciBsYXlvdXQuCisgICAgY2hlY2tTY3JvbGxP
ZmZzZXQoKTsKK30KKworZnVuY3Rpb24gc2Vjb25kVG91Y2hEcmFnU2VxdWVuY2UoKQoreworICAg
IGRlYnVnKCJzZWNvbmQgZ2VzdHVyZSIpOworICAgIGV2ZW50U2VuZGVyLmNsZWFyVG91Y2hQb2lu
dHMoKTsKKyAgICBldmVudFNlbmRlci5hZGRUb3VjaFBvaW50KDEyLCA3MCk7CisgICAgZXZlbnRT
ZW5kZXIudG91Y2hTdGFydCgpOworCisgICAgLy8gU2Nyb2xsIHRoZSByZWN0YW5nbGUgZG93bi4K
KyAgICBldmVudFNlbmRlci51cGRhdGVUb3VjaFBvaW50KDAsIDEyLCA0MCk7CisgICAgZXZlbnRT
ZW5kZXIudG91Y2hNb3ZlKCk7CisKKyAgICAvLyBTY3JvbGwgdGhlIHJlY3RhbmdsZSBkb3duLgor
ICAgIGV2ZW50U2VuZGVyLnVwZGF0ZVRvdWNoUG9pbnQoMCwgMTIsIDEwKTsKKyAgICBldmVudFNl
bmRlci50b3VjaE1vdmUoKTsKKworICAgIGV2ZW50U2VuZGVyLnJlbGVhc2VUb3VjaFBvaW50KDAp
OworICAgIGV2ZW50U2VuZGVyLnRvdWNoRW5kKCk7CisKKyAgICAvLyBXYWl0IGZvciBsYXlvdXQu
CisgICAgY2hlY2tTY3JvbGxPZmZzZXQoKTsKK30KKworZnVuY3Rpb24gZXhpdElmTmVjZXNzYXJ5
KCkKK3sKKyAgICBkZWJ1ZygnR2VzdHVyZSBtYW5hZ2VyIG5vdCBpbXBsZW1lbnRlZCBvbiB0aGlz
IHBsYXRmb3JtIG9yIGJyb2tlbicpOworICAgIHN1Y2Nlc3NmdWxseVBhcnNlZCA9IHRydWU7Cisg
ICAgaXNTdWNjZXNzZnVsbHlQYXJzZWQoKTsKKyAgICBpZiAod2luZG93LmxheW91dFRlc3RDb250
cm9sbGVyKQorICAgICAgICBsYXlvdXRUZXN0Q29udHJvbGxlci5ub3RpZnlEb25lKCk7Cit9CisK
K2lmICh3aW5kb3cubGF5b3V0VGVzdENvbnRyb2xsZXIpCisgICAgbGF5b3V0VGVzdENvbnRyb2xs
ZXIud2FpdFVudGlsRG9uZSgpOworCitmdW5jdGlvbiBydW5UZXN0KCkKK3sKKyAgICBidWlsZFBh
Z2UoKTsKKworICAgIC8vIEZJWE1FOiB0YXJnZXQgdXNpbmcgcGxhdGZvcm0gZ2VzdHVyZSBldmVu
dAorICAgIHZhciBtb3ZpbmdkaXYgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbW92aW5nYm94
Jyk7CisKKyAgICBpZiAod2luZG93LmV2ZW50U2VuZGVyKSB7CisgICAgICAgIGRlc2NyaXB0aW9u
KCdUaGlzIHRlc3RzIHNjcm9sbCBnZXN0dXJlcyBmcm9tIHRvdWNoIGV2ZW50cyBvbiB0aGUgd2hv
bGUgcGFnZS4gJyArCisgICAgICAgICAgICAnU3F1YXJlIGlzIChtb3N0bHkpIGdyZWVuIG9uIHBh
c3MnKTsKKworICAgICAgICBpZiAoZXZlbnRTZW5kZXIuY2xlYXJUb3VjaFBvaW50cykKKyAgICAg
ICAgICAgIGZpcnN0VG91Y2hEcmFnU2VxdWVuY2UoKTsKKyAgICAgICAgZWxzZQorICAgICAgICAg
ICAgZXhpdElmTmVjZXNzYXJ5KCk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgZGVidWcoIlRoaXMg
dGVzdCByZXF1aXJlcyBEdW1wUmVuZGVyVHJlZS4gIFNjcm9sbCB0aGUgcGFnZWcuIik7CisgICAg
ICAgIG1vdmluZ2Rpdi5hZGRFdmVudExpc3RlbmVyKCd0b3VjaGVuZCcsIGZpbmdlclVwLCBmYWxz
ZSk7CisgICAgfQorfQorPC9zY3JpcHQ+CisKKworCis8L2JvZHk+Cis8L2h0bWw+CmRpZmYgLS1n
aXQgYS9MYXlvdXRUZXN0cy9mYXN0L2V2ZW50cy90b3VjaC90b3VjaC1nZXN0dXJlLXNjcm9sbC1z
aHktdGFyZ2V0LWV4cGVjdGVkLnR4dCBiL0xheW91dFRlc3RzL2Zhc3QvZXZlbnRzL3RvdWNoL3Rv
dWNoLWdlc3R1cmUtc2Nyb2xsLXNoeS10YXJnZXQtZXhwZWN0ZWQudHh0Cm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjNh
MGM2MTdkMGY0YjQ5MDkwM2RlNGViZTg0NzA1MTA2ODllOGE2YzAKLS0tIC9kZXYvbnVsbAorKysg
Yi9MYXlvdXRUZXN0cy9mYXN0L2V2ZW50cy90b3VjaC90b3VjaC1nZXN0dXJlLXNjcm9sbC1zaHkt
dGFyZ2V0LWV4cGVjdGVkLnR4dApAQCAtMCwwICsxLDE0IEBACitUaGlzIHRlc3RzIGdlc3R1cmUt
c2Nyb2xsIGNhcHR1cmUgYW5kIGRpdiBkZWxlY3Rpb24gU3F1YXJlIGlzIChtb3N0bHkpIGdyZWVu
IG9uIHBhc3MKKworT24gc3VjY2VzcywgeW91IHdpbGwgc2VlIGEgc2VyaWVzIG9mICJQQVNTIiBt
ZXNzYWdlcywgZm9sbG93ZWQgYnkgIlRFU1QgQ09NUExFVEUiLgorCisKK2ZpcnN0IGdlc3R1cmUK
K1BBU1MgbW92aW5nZGl2LnNjcm9sbFRvcCBpcyA2MgorUEFTUyBtb3ZpbmdkaXYuc2Nyb2xsTGVm
dCBpcyA2Mworc2Vjb25kIGdlc3R1cmUKK3JlY2VpdmVkIGVsZW1lbnQgcmVtb3Zpbmcga2V5cHJl
c3MKK1BBU1Mgc3VjY2Vzc2Z1bGx5UGFyc2VkIGlzIHRydWUKKworVEVTVCBDT01QTEVURQorCmRp
ZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9mYXN0L2V2ZW50cy90b3VjaC90b3VjaC1nZXN0dXJlLXNj
cm9sbC1zaHktdGFyZ2V0Lmh0bWwgYi9MYXlvdXRUZXN0cy9mYXN0L2V2ZW50cy90b3VjaC90b3Vj
aC1nZXN0dXJlLXNjcm9sbC1zaHktdGFyZ2V0Lmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNTk2MDY3MDhlNzRl
MmVkYjliNTIxNjllZGEyZDg0ZWRkNTY3NTMwZAotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRl
c3RzL2Zhc3QvZXZlbnRzL3RvdWNoL3RvdWNoLWdlc3R1cmUtc2Nyb2xsLXNoeS10YXJnZXQuaHRt
bApAQCAtMCwwICsxLDIwNSBAQAorPCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9JRVRGLy9EVEQg
SFRNTC8vRU4iPgorPGh0bWw+Cis8aGVhZD4KKzxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0i
Li4vLi4vanMvcmVzb3VyY2VzL2pzLXRlc3Qtc3R5bGUuY3NzIj4KKzxzY3JpcHQgc3JjPSIuLi8u
Li9qcy9yZXNvdXJjZXMvanMtdGVzdC1wcmUuanMiPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9Ii4u
Ly4uL2pzL3Jlc291cmNlcy9qcy10ZXN0LXBvc3QtZnVuY3Rpb24uanMiPjwvc2NyaXB0PgorPHN0
eWxlIHR5cGU9InRleHQvY3NzIj4KKyN0b3VjaHRhcmdldCB7CisgIHdpZHRoOiAxMDBweDsKKyAg
aGVpZ2h0OiAxMDBweDsKKyAgcG9zaXRpb246IGFic29sdXRlOworICBiYWNrZ3JvdW5kOiB3aGl0
ZTsKKyAgdG9wOiAxMDBweDsKKyAgbGVmdDogMTAwcHg7Cit9CisKKyNtb3Zpbmdib3ggeworICB3
aWR0aDogMTAwJTsKKyAgaGVpZ2h0OiAxMDAlOworICBwb3NpdGlvbjogYWJzb2x1dGU7CisgIHdv
cmQtd3JhcDogYnJlYWstd29yZDsKKyAgb3ZlcmZsb3cteTogc2Nyb2xsOworICBvdmVyZmxvdy14
OiBzY3JvbGw7CisgIGRpc3BsYXk6IGJsb2NrOworfQorCisuZ3JlZW5ib3ggeworICB3aWR0aDog
MTAwcHg7CisgIGhlaWdodDogMTAwcHg7CisgIGJhY2tncm91bmQ6IGdyZWVuOworICBwYWRkaW5n
OiAwcHg7CisgIG1hcmdpbjogMHB4OworfQorCisucmVkYm94IHsKKyAgd2lkdGg6IDEwMHB4Owor
ICBoZWlnaHQ6IDEwMHB4OworICBiYWNrZ3JvdW5kOiByZWQ7CisgIHBhZGRpbmc6IDBweDsKKyAg
bWFyZ2luOiAwcHg7Cit9CisKK3RkIHsKKyAgcGFkZGluZzogMHB4OworfQorPC9zdHlsZT4KKzwv
aGVhZD4KKzxib2R5IHN0eWxlPSJtYXJnaW46MCIgb25sb2FkPSJydW5UZXN0KCk7Ij4KKzxkaXYg
aWQ9InRvdWNodGFyZ2V0Ij4KKyAgPGRpdiBpZD0ibW92aW5nYm94Ij4KKyAgICA8dGFibGUgYm9y
ZGVyPSIwIiBjZWxsc3BhY2luZz0iMHB4IiBpZD0idGFibGUiPgorICAgICAgPHRyPgorICAgICAg
ICA8dGQ+PGRpdiBjbGFzcz0icmVkYm94IiBpZD0icmVkYm94Ij48L2Rpdj48L3RkPgorICAgICAg
ICA8dGQ+PGRpdiBjbGFzcz0iZ3JlZW5ib3giIGlkPSJncmVlbmJveF8xIj48L2Rpdj48L3RkPgor
ICAgICAgPC90cj4KKyAgICAgIDx0cj4KKyAgICAgICAgPHRkPjxkaXYgY2xhc3M9ImdyZWVuYm94
IiBpZD0iZ3JlZW5ib3hfMiI+PC9kaXY+PC90ZD4KKyAgICAgICAgPHRkPjxkaXYgY2xhc3M9Imdy
ZWVuYm94IiBpZD0iZ3JlZW5ib3hfMyI+PC9kaXY+PC90ZD4KKyAgICAgIDwvdHI+CisgICAgPC90
YWJsZT4KKyAgPC9kaXY+Cis8L2Rpdj4KKworPHAgaWQ9ImRlc2NyaXB0aW9uIj48L3A+Cis8ZGl2
IGlkPSJjb25zb2xlIj48L2Rpdj4KKzxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KKwor
dmFyIG1vdmluZ2RpdjsKK3ZhciBleHBlY3RlZFNjcm9sbHNUb3RhbCA9IDI7Cit2YXIgc2Nyb2xs
c09jY3VycmVkID0gMDsKK3ZhciBzY3JvbGxBbW91bnRYID0gWyc2MycsICc5MCddOwordmFyIHNj
cm9sbEFtb3VudFkgPSBbJzYyJywgJzk1J107CisKK2RvY3VtZW50Lm9ua2V5cHJlc3MgPSBmdW5j
dGlvbigpCit7CisgICAgZGVidWcoJ3JlY2VpdmVkIGVsZW1lbnQgcmVtb3Zpbmcga2V5cHJlc3Mn
KTsKKyAgICB2YXIgcGFyZW50ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3RvdWNodGFyZ2V0
Jyk7CisgICAgbW92aW5nZGl2ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ21vdmluZ2JveCcp
OworICAgIHBhcmVudC5yZW1vdmVDaGlsZChtb3ZpbmdkaXYpOworICAgIHJldHVybiBmYWxzZTsK
K30KKworZnVuY3Rpb24gbG9nRmlyc3RUb3VjaFBvaW50KGV2ZW50KQoreworICAgIGRlYnVnKCdj
bGllbnQgaWQnICsgZXZlbnQudGFyZ2V0LmlkKTsKKyAgICBkZWJ1ZygnY2xpZW50WDogJyArIGV2
ZW50LnRvdWNoZXNbMF0uY2xpZW50WCArICcgY2xpZW50WTogJyArIGV2ZW50LnRvdWNoZXNbMF0u
Y2xpZW50WSk7Cit9CisKK2Z1bmN0aW9uIGNoZWNrU2Nyb2xsT2Zmc2V0KCkKK3sKKyAgICBtb3Zp
bmdkaXYgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbW92aW5nYm94Jyk7CisgICAgaWYgKHdp
bmRvdy5ldmVudFNlbmRlcikgeworICAgICAgICBzaG91bGRCZSgnbW92aW5nZGl2LnNjcm9sbFRv
cCcsIHNjcm9sbEFtb3VudFlbc2Nyb2xsc09jY3VycmVkXSk7CisgICAgICAgIHNob3VsZEJlKCdt
b3ZpbmdkaXYuc2Nyb2xsTGVmdCcsIHNjcm9sbEFtb3VudFhbc2Nyb2xsc09jY3VycmVkXSk7Cisg
ICAgICAgIHNjcm9sbHNPY2N1cnJlZCsrOworICAgIH0KKworICAgIGlmIChzY3JvbGxzT2NjdXJy
ZWQgPT0gZXhwZWN0ZWRTY3JvbGxzVG90YWwpIHsKKyAgICAgICAgLy8gSWYgd2UndmUgZ290IGhl
cmUsIHdlJ3ZlIHBhc3NlZC4KKyAgICB9IGVsc2UgeworICAgICAgICBzZWNvbmRUb3VjaERyYWdT
ZXF1ZW5jZSgpOworICAgIH0KK30KKworZnVuY3Rpb24gZmluZ2VyVXAoZXZlbnQpCit7CisgICAg
aWYgKCF3aW5kb3cubGF5b3V0VGVzdENvbnRyb2xsZXIpIHsKKyAgICAgICAgZGVidWcoJ21vdmVk
OiAnICsgZXZlbnQuY3VycmVudFRhcmdldC5zY3JvbGxUb3AgKyAnLCAnICsgZXZlbnQuY3VycmVu
dFRhcmdldC5zY3JvbGxMZWZ0KTsKKyAgICAgICAgZGVidWcoJ3RhcmdldDogJyArIGV2ZW50LmN1
cnJlbnRUYXJnZXQuaWQpOworICAgIH0KKyAgICByZXR1cm4gdHJ1ZTsgIC8vIFdhbnQgdGhlIGRl
ZmF1bHQgYmVoYXZpb3VyLgorfQorCitmdW5jdGlvbiBmaXJzdFRvdWNoRHJhZ1NlcXVlbmNlKCkK
K3sKKyAgICBkZWJ1ZygiZmlyc3QgZ2VzdHVyZSIpOworICAgIGV2ZW50U2VuZGVyLmNsZWFyVG91
Y2hQb2ludHMoKTsKKyAgICBldmVudFNlbmRlci5hZGRUb3VjaFBvaW50KDEyMSwgMTI5KTsKKyAg
ICBldmVudFNlbmRlci50b3VjaFN0YXJ0KCk7CisgICAgZXZlbnRTZW5kZXIudXBkYXRlVG91Y2hQ
b2ludCgwLCAxMDEsIDEwMSk7CisgICAgZXZlbnRTZW5kZXIudG91Y2hTdGFydCgpOworCisgICAg
Ly8gU2Nyb2xsIHRoZSBkaXYgdG8gdGhlIGxlZnQgcGFzdCB0aGUgZWRnZS4KKyAgICBldmVudFNl
bmRlci51cGRhdGVUb3VjaFBvaW50KDAsIDg3LCA5Nyk7CisgICAgZXZlbnRTZW5kZXIudG91Y2hN
b3ZlKCk7CisKKyAgICBldmVudFNlbmRlci51cGRhdGVUb3VjaFBvaW50KDAsIDU4LCA2Nyk7Cisg
ICAgZXZlbnRTZW5kZXIudG91Y2hNb3ZlKCk7CisKKyAgICBldmVudFNlbmRlci5yZWxlYXNlVG91
Y2hQb2ludCgwKTsKKyAgICBldmVudFNlbmRlci50b3VjaEVuZCgpOworCisgICAgLy8gV2FpdCBm
b3IgbGF5b3V0LgorICAgIGNoZWNrU2Nyb2xsT2Zmc2V0KCk7Cit9CisKKy8vIEZJWE1FOiBtb2Rp
ZnkgdGhpcyBvbmUgdG8gdG9zcyBvdXRzaWRlLgorZnVuY3Rpb24gc2Vjb25kVG91Y2hEcmFnU2Vx
dWVuY2UoKQoreworICAgIG1vdmluZ2Rpdi5zY3JvbGxUb3AgPSAwOworICAgIG1vdmluZ2Rpdi5z
Y3JvbGxMZWZ0ID0gMDsKKworICAgIGRlYnVnKCJzZWNvbmQgZ2VzdHVyZSIpOworICAgIGV2ZW50
U2VuZGVyLmNsZWFyVG91Y2hQb2ludHMoKTsKKyAgICBldmVudFNlbmRlci5hZGRUb3VjaFBvaW50
KDEyMSwgMTI5KTsKKyAgICBldmVudFNlbmRlci50b3VjaFN0YXJ0KCk7CisgICAgZXZlbnRTZW5k
ZXIudXBkYXRlVG91Y2hQb2ludCgwLCAxMDEsIDEwMSk7CisgICAgZXZlbnRTZW5kZXIudG91Y2hT
dGFydCgpOworCisgICAgLy8gU2Nyb2xsIHRoZSBkaXYgdG8gdGhlIGxlZnQgcGFzdCB0aGUgZWRn
ZS4KKyAgICBldmVudFNlbmRlci51cGRhdGVUb3VjaFBvaW50KDAsIDg3LCA5Nyk7CisgICAgZXZl
bnRTZW5kZXIudG91Y2hNb3ZlKCk7CisKKyAgICAvLyBTZW5kIGEga2V5CisgICAgLy8gRGVsZXRl
IHRoZSBET00gdGFyZ2V0LgorICAgIGV2ZW50U2VuZGVyLmtleURvd24oImQiLCBbXSk7CisKKyAg
ICBldmVudFNlbmRlci51cGRhdGVUb3VjaFBvaW50KDAsIDU4LCA2Nyk7CisgICAgZXZlbnRTZW5k
ZXIudG91Y2hNb3ZlKCk7CisKKyAgICBldmVudFNlbmRlci5yZWxlYXNlVG91Y2hQb2ludCgwKTsK
KyAgICBldmVudFNlbmRlci50b3VjaEVuZCgpOworCisgICAgLy8gQnkgZ2V0dGluZyBoZXJlIHN1
Y2Nlc3NmdWxseSwgdGhlIHRlc3QgZGVtb25zdHJhdGVzIHRoYXQgaXQKKyAgICAvLyBkb2VzIG5v
dCBjcmFzaCB3aGVuIHRoZSB0YXJnZXQgaXMgcmVtb3ZlZC4KKyAgICBzdWNjZXNzZnVsbHlQYXJz
ZWQgPSB0cnVlOworICAgIGlzU3VjY2Vzc2Z1bGx5UGFyc2VkKCk7CisgICAgaWYgKHdpbmRvdy5s
YXlvdXRUZXN0Q29udHJvbGxlcikKKyAgICAgICAgbGF5b3V0VGVzdENvbnRyb2xsZXIubm90aWZ5
RG9uZSgpOworfQorCitmdW5jdGlvbiBleGl0SWZOZWNlc3NhcnkoKQoreworICAgIGRlYnVnKCdH
ZXN0dXJlIG1hbmFnZXIgbm90IGltcGxlbWVudGVkIG9uIHRoaXMgcGxhdGZvcm0gb3IgYnJva2Vu
Jyk7CisgICAgc3VjY2Vzc2Z1bGx5UGFyc2VkID0gdHJ1ZTsKKyAgICBpc1N1Y2Nlc3NmdWxseVBh
cnNlZCgpOworICAgIGlmICh3aW5kb3cubGF5b3V0VGVzdENvbnRyb2xsZXIpCisgICAgICAgIGxh
eW91dFRlc3RDb250cm9sbGVyLm5vdGlmeURvbmUoKTsKK30KKworaWYgKHdpbmRvdy5sYXlvdXRU
ZXN0Q29udHJvbGxlcikKKyAgICBsYXlvdXRUZXN0Q29udHJvbGxlci53YWl0VW50aWxEb25lKCk7
CisKK2Z1bmN0aW9uIHJ1blRlc3QoKQoreworICAgIGlmICh3aW5kb3cuZXZlbnRTZW5kZXIpIHsK
KyAgICAgICAgZGVzY3JpcHRpb24oJ1RoaXMgdGVzdHMgZ2VzdHVyZS1zY3JvbGwgY2FwdHVyZSBh
bmQgZGl2IGRlbGVjdGlvbiAnICsgCisgICAgICAgICAgICAnU3F1YXJlIGlzIChtb3N0bHkpIGdy
ZWVuIG9uIHBhc3MnKTsKKyAgICAgICAgaWYgKGV2ZW50U2VuZGVyLmNsZWFyVG91Y2hQb2ludHMp
CisgICAgICAgICAgICBmaXJzdFRvdWNoRHJhZ1NlcXVlbmNlKCk7CisgICAgICAgIGVsc2UKKyAg
ICAgICAgICAgIGV4aXRJZk5lY2Vzc2FyeSgpOworICAgIH0gZWxzZSB7CisgICAgICAgIGRvY3Vt
ZW50LmFkZEV2ZW50TGlzdGVuZXIoJ3RvdWNoc3RhcnQnLCBsb2dGaXJzdFRvdWNoUG9pbnQpOwor
ICAgICAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCd0b3VjaG1vdmUnLCBsb2dGaXJzdFRv
dWNoUG9pbnQpOworICAgICAgICBkZWJ1ZygiVGhpcyB0ZXN0IHJlcXVpcmVzIER1bXBSZW5kZXJU
cmVlLiAgVG91Y2gtc2Nyb2xsIHRoZSByZWQgcmVjdCB0byBsb2cuIik7CisgICAgICAgIG1vdmlu
Z2Rpdi5hZGRFdmVudExpc3RlbmVyKCd0b3VjaGVuZCcsIGZpbmdlclVwLCBmYWxzZSk7CisgICAg
fQorfQorPC9zY3JpcHQ+CisKKworCis8L2JvZHk+Cis8L2h0bWw+Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>112607</attachid>
            <date>2011-10-26 15:40:02 -0700</date>
            <delta_ts>2011-12-23 12:41:28 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-67822-20111026183244.patch</filename>
            <type>text/plain</type>
            <size>43593</size>
            <attacher name="Robert Kroeger">rjkroege</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogOTg1MjAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCA0MmMzMDJjZjAyYjExMTJk
MzYyYmZlNTM3ZTgxYTI1ZmFjZjdiOTlmLi4wNjhmMWM2MGM3NDIzZjViZWJlNTM5NjY4NzEyMTY5
MjAyY2FmOWRhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvU291
cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNjIgQEAKKzIwMTEtMTAtMjYgIFJvYmVy
dCBLcm9lZ2VyICA8cmprcm9lZ2VAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFBsYXRmb3JtR2Vz
dHVyZUV2ZW50OjpoYW5kbGVHZXN0dXJlRXZlbnQgc2hvdWxkIGhpdCB0ZXN0IHdoaWxlIGRpc3Bh
dGNoaW5nIFNjcm9sbCogZXZlbnRzLgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9Njc4MjIKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMh
KS4KKworICAgICAgICBUZXN0czogZmFzdC9ldmVudHMvdG91Y2gvZ2VzdHVyZS90b3VjaC1nZXN0
dXJlLXNjcm9sbC1pZnJhbWUuaHRtbAorICAgICAgICAgICAgICAgZmFzdC9ldmVudHMvdG91Y2gv
Z2VzdHVyZS90b3VjaC1nZXN0dXJlLXNjcm9sbC1wYWdlLmh0bWwKKyAgICAgICAgICAgICAgIGZh
c3QvZXZlbnRzL3RvdWNoL2dlc3R1cmUvdG91Y2gtZ2VzdHVyZS1zY3JvbGwtc2h5LXRhcmdldC5o
dG1sCisKKyAgICAgICAgKiBwYWdlL0V2ZW50SGFuZGxlci5jcHA6CisgICAgICAgIChXZWJDb3Jl
Ojp3aGVlbEdyYW51bGFyaXR5VG9TY3JvbGxHcmFudWxhcml0eSk6CisgICAgICAgIEhlbHBlciBt
ZXRob2QuCisgICAgICAgIChXZWJDb3JlOjpzY3JvbGxOb2RlKToKKyAgICAgICAgUmVmYWN0b3Jl
ZC4KKyAgICAgICAgKFdlYkNvcmU6Omdlc3R1cmVOb2RlKToKKyAgICAgICAgRGlzcGF0Y2ggYSBQ
bGF0Zm9ybUdlc3R1cmVFdmVudCB0byBhIG5vZGUgdXNpbmcgcmVmYWN0b3JlZCBzY3JvbGxOb2Rl
LgorICAgICAgICAoV2ViQ29yZTo6RXZlbnRIYW5kbGVyOjpjbGVhcik6CisgICAgICAgIENsZWFy
IHRoZSBsYXRjaGVkIG5vZGUuCisgICAgICAgIChXZWJDb3JlOjpFdmVudEhhbmRsZXI6OnBhc3NH
ZXN0dXJlRXZlbnRUb1dpZGdldEhlbHBlcik6CisgICAgICAgIERpc3BhdGNoIFBsYXRmb3JtR2Vz
dHVyZUV2ZW50cyBpbnRvIHdpZGdldHMuCisgICAgICAgIChXZWJDb3JlOjpFdmVudEhhbmRsZXI6
OnBhc3NHZXN0dXJlRXZlbnRUb0ZhbWVWaWV3KToKKyAgICAgICAgRGlzcGF0Y2ggUGxhdGZvcm1H
ZXN0dXJlRXZlbnRzIGludG8gYSBGcmFtZVZpZXcuCisgICAgICAgIChXZWJDb3JlOjpVbmxhdGNo
ZXI6OlVubGF0Y2hlcik6CisgICAgICAgIChXZWJDb3JlOjpVbmxhdGNoZXI6On5VbmxhdGNoZXIp
OgorICAgICAgICBBbHdheXMgY2xlYXIgYSBsYXRjaGVkIG5vZGUgb24gZW5kIG9mIG11bHRwbGUt
ZXZlbnQgc2VxdWVuY2UgZ2VzdHVyZS4KKyAgICAgICAgKFdlYkNvcmU6OkV2ZW50SGFuZGxlcjo6
aGFuZGxlR2VzdHVyZUV2ZW50KToKKyAgICAgICAgQ29ycmVjdHMgYSBGSVhNRTogZGlzcGF0Y2gg
U2Nyb2xsIHR5cGUgUGxhdGZvcm1HZXN0dXJlRXZlbnRzIGludG8KKyAgICAgICAgb3ZlcmZsb3ct
c2Nyb2xsIGVsZW1lbnRzIGlmcmFtZXMgb3IgdGhlIHBhZ2UgaXRzZWxmLiBJZiB0aGUgdGFyZ2V0
CisgICAgICAgIG9mIHRoZSBQR0UgaXMgYSBub2RlLCBpdCBpcyBsYXRjaGVkIHRvIHRoYXQgU2Ny
b2xsVXBkYXRlVHlwZQorICAgICAgICBhbmQgU2Nyb2xsRW5kVHlwZSBpbnN0YW5jZXMgcmVhY2gg
dGhlIHNhbWUgdGFyZ2V0LgorICAgICAgICAqIHBhZ2UvRXZlbnRIYW5kbGVyLmg6CisgICAgICAg
IEFkZGVkIGEgcmVmLWNvdW50ZWQgbGF0Y2ggZm9yIHRoZSB0YXJnZXQgbm9kZS4KKyAgICAgICAg
KiBwYWdlL2Nocm9taXVtL0V2ZW50SGFuZGxlckNocm9taXVtLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OkV2ZW50SGFuZGxlcjo6cGFzc0dlc3R1cmVFdmVudFRvV2lkZ2V0KToKKyAgICAgICAgKiBw
YWdlL2VmbC9FdmVudEhhbmRsZXJFZmwuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RXZlbnRIYW5k
bGVyOjpwYXNzR2VzdHVyZUV2ZW50VG9XaWRnZXQpOgorICAgICAgICAqIHBhZ2UvZ3RrL0V2ZW50
SGFuZGxlckd0ay5jcHA6CisgICAgICAgIChXZWJDb3JlOjpFdmVudEhhbmRsZXI6OnBhc3NHZXN0
dXJlRXZlbnRUb1dpZGdldCk6CisgICAgICAgICogcGFnZS9tYWMvRXZlbnRIYW5kbGVyTWFjLm1t
OgorICAgICAgICAoV2ViQ29yZTo6RXZlbnRIYW5kbGVyOjpwYXNzR2VzdHVyZUV2ZW50VG9XaWRn
ZXQpOgorICAgICAgICAqIHBhZ2UvcXQvRXZlbnRIYW5kbGVyUXQuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6RXZlbnRIYW5kbGVyOjpwYXNzR2VzdHVyZUV2ZW50VG9XaWRnZXQpOgorICAgICAgICAq
IHBhZ2Uvd2luL0V2ZW50SGFuZGxlcldpbi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpFdmVudEhh
bmRsZXI6OnBhc3NHZXN0dXJlRXZlbnRUb1dpZGdldCk6CisgICAgICAgICogcGFnZS93eC9FdmVu
dEhhbmRsZXJXeC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpFdmVudEhhbmRsZXI6OnBhc3NHZXN0
dXJlRXZlbnRUb1dpZGdldCk6CisgICAgICAgICogcGxhdGZvcm0vU2Nyb2xsQW5pbWF0b3IuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsQW5pbWF0b3I6OmhhbmRsZUdlc3R1cmVFdmVudCk6
CisgICAgICAgICogcGxhdGZvcm0vU2Nyb2xsQW5pbWF0b3JOb25lLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OlNjcm9sbEFuaW1hdG9yTm9uZTo6aGFuZGxlR2VzdHVyZUV2ZW50KToKKyAgICAgICAg
QWRkZWQgc2Nyb2xsaW5nIGZ1bmN0aW9uYWxpdHkgdG8gaGFuZGxlIFBsYXRmb3JtR2VzdHVyZUV2
ZW50cy4KKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyQm94LmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OlJlbmRlckJveDo6Z2VzdHVyZSk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckJveC5o
OgorICAgICAgICBBZGRlZCBhIGdlc3R1cmUgbWV0aG9kIHRvIGRpc3BsYXRjaCBnZXN0dXJlIGV2
ZW50cyB0byBhIFJlbmRlckJveCdzCisgICAgICAgIGFzc29jaWF0ZWQgbGF5ZXIuCisKIDIwMTEt
MTAtMjYgIERhbiBCZXJuc3RlaW4gIDxtaXR6QGFwcGxlLmNvbT4KIAogICAgICAgICA8cmRhcjov
L3Byb2JsZW0vMTAzNTA3NzU+IFJFR1JFU1NJT04gKHI5NzAzMik6IFNsaWRlciB0aHVtYiBpcyBu
b3QgZHJhd24KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRXZlbnRIYW5kbGVyLmNw
cCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRXZlbnRIYW5kbGVyLmNwcAppbmRleCBjZTY3NDRhNmY2
M2VmZTI1ODNlZWFlZWVmMDlkYTE2YzNjMzAwNTVkLi41OWE5YTQwNmMxOTU5ZjZkMjczOWJlYjMx
MzI0YmIzODk4ZmRiZGVkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL0V2ZW50SGFu
ZGxlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGFnZS9FdmVudEhhbmRsZXIuY3BwCkBAIC02
OSw2ICs2OSw3IEBACiAjaW5jbHVkZSAiUmVuZGVyVmlldy5oIgogI2luY2x1ZGUgIlJlbmRlcldp
ZGdldC5oIgogI2luY2x1ZGUgIlNjcm9sbEFuaW1hdG9yLmgiCisjaW5jbHVkZSAiU2Nyb2xsYWJs
ZUFyZWEuaCIKICNpbmNsdWRlICJTY3JvbGxiYXIuaCIKICNpbmNsdWRlICJTZXR0aW5ncy5oIgog
I2luY2x1ZGUgIlNwYXRpYWxOYXZpZ2F0aW9uLmgiCkBAIC0xNDIsNyArMTQzLDIwIEBAIHByaXZh
dGU6CiAgICAgQ3Vyc29yIG1fY3Vyc29yOwogfTsKIAotc3RhdGljIGlubGluZSBib29sIHNjcm9s
bE5vZGUoZmxvYXQgZGVsdGEsIFdoZWVsRXZlbnQ6OkdyYW51bGFyaXR5IGdyYW51bGFyaXR5LCBT
Y3JvbGxEaXJlY3Rpb24gcG9zaXRpdmVEaXJlY3Rpb24sIFNjcm9sbERpcmVjdGlvbiBuZWdhdGl2
ZURpcmVjdGlvbiwgTm9kZSogbm9kZSwgTm9kZSoqIHN0b3BOb2RlKQorc3RhdGljIGlubGluZSBT
Y3JvbGxHcmFudWxhcml0eSB3aGVlbEdyYW51bGFyaXR5VG9TY3JvbGxHcmFudWxhcml0eShXaGVl
bEV2ZW50OjpHcmFudWxhcml0eSBncmFudWxhcml0eSkKK3sKKyAgICBzd2l0Y2ggKGdyYW51bGFy
aXR5KSB7CisgICAgY2FzZSBXaGVlbEV2ZW50OjpQYWdlOgorICAgICAgICByZXR1cm4gU2Nyb2xs
QnlQYWdlOworICAgIGNhc2UgV2hlZWxFdmVudDo6TGluZToKKyAgICAgICAgcmV0dXJuIFNjcm9s
bEJ5TGluZTsKKyAgICBjYXNlIFdoZWVsRXZlbnQ6OlBpeGVsOgorICAgICAgICByZXR1cm4gU2Ny
b2xsQnlQaXhlbDsKKyAgICB9CisgICAgcmV0dXJuIFNjcm9sbEJ5UGl4ZWw7Cit9CisKK3N0YXRp
YyBpbmxpbmUgYm9vbCBzY3JvbGxOb2RlKGZsb2F0IGRlbHRhLCBTY3JvbGxHcmFudWxhcml0eSBn
cmFudWxhcml0eSwgU2Nyb2xsRGlyZWN0aW9uIHBvc2l0aXZlRGlyZWN0aW9uLCBTY3JvbGxEaXJl
Y3Rpb24gbmVnYXRpdmVEaXJlY3Rpb24sIE5vZGUqIG5vZGUsIE5vZGUqKiBzdG9wTm9kZSkKIHsK
ICAgICBpZiAoIWRlbHRhKQogICAgICAgICByZXR1cm4gZmFsc2U7CkBAIC0xNTAsMjIgKzE2NCwy
NSBAQCBzdGF0aWMgaW5saW5lIGJvb2wgc2Nyb2xsTm9kZShmbG9hdCBkZWx0YSwgV2hlZWxFdmVu
dDo6R3JhbnVsYXJpdHkgZ3JhbnVsYXJpdHksCiAgICAgaWYgKCFub2RlLT5yZW5kZXJlcigpKQog
ICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgCi0gICAgLy8gRmluZCB0aGUgbmVhcmVzdCBlbmNs
b3NpbmcgYm94LgogICAgIFJlbmRlckJveCogZW5jbG9zaW5nQm94ID0gbm9kZS0+cmVuZGVyZXIo
KS0+ZW5jbG9zaW5nQm94KCk7Ci0KICAgICBmbG9hdCBhYnNEZWx0YSA9IGRlbHRhID4gMCA/IGRl
bHRhIDogLWRlbHRhOwotICAgIAotICAgIGlmIChncmFudWxhcml0eSA9PSBXaGVlbEV2ZW50OjpQ
YWdlKQotICAgICAgICByZXR1cm4gZW5jbG9zaW5nQm94LT5zY3JvbGwoZGVsdGEgPCAwID8gbmVn
YXRpdmVEaXJlY3Rpb24gOiBwb3NpdGl2ZURpcmVjdGlvbiwgU2Nyb2xsQnlQYWdlLCBhYnNEZWx0
YSwgc3RvcE5vZGUpOworICAgIHJldHVybiBlbmNsb3NpbmdCb3gtPnNjcm9sbChkZWx0YSA8IDAg
PyBuZWdhdGl2ZURpcmVjdGlvbiA6IHBvc2l0aXZlRGlyZWN0aW9uLCBncmFudWxhcml0eSwgYWJz
RGVsdGEsIHN0b3BOb2RlKTsKK30KIAotICAgIGlmIChncmFudWxhcml0eSA9PSBXaGVlbEV2ZW50
OjpMaW5lKQotICAgICAgICByZXR1cm4gZW5jbG9zaW5nQm94LT5zY3JvbGwoZGVsdGEgPCAwID8g
bmVnYXRpdmVEaXJlY3Rpb24gOiBwb3NpdGl2ZURpcmVjdGlvbiwgU2Nyb2xsQnlMaW5lLCBhYnNE
ZWx0YSwgc3RvcE5vZGUpOworc3RhdGljIGlubGluZSBib29sIHNjcm9sbE5vZGUoZmxvYXQgZGVs
dGEsIFdoZWVsRXZlbnQ6OkdyYW51bGFyaXR5IGdyYW51bGFyaXR5LCBTY3JvbGxEaXJlY3Rpb24g
cG9zaXRpdmVEaXJlY3Rpb24sIFNjcm9sbERpcmVjdGlvbiBuZWdhdGl2ZURpcmVjdGlvbiwgTm9k
ZSogbm9kZSwgTm9kZSoqIHN0b3BOb2RlKQoreworICAgIHJldHVybiBzY3JvbGxOb2RlKGRlbHRh
LCB3aGVlbEdyYW51bGFyaXR5VG9TY3JvbGxHcmFudWxhcml0eShncmFudWxhcml0eSksIHBvc2l0
aXZlRGlyZWN0aW9uLCBuZWdhdGl2ZURpcmVjdGlvbiwgbm9kZSwgc3RvcE5vZGUpOworfQogCi0g
ICAgaWYgKGdyYW51bGFyaXR5ID09IFdoZWVsRXZlbnQ6OlBpeGVsKQotICAgICAgICByZXR1cm4g
ZW5jbG9zaW5nQm94LT5zY3JvbGwoZGVsdGEgPCAwID8gbmVnYXRpdmVEaXJlY3Rpb24gOiBwb3Np
dGl2ZURpcmVjdGlvbiwgU2Nyb2xsQnlQaXhlbCwgYWJzRGVsdGEsIHN0b3BOb2RlKTsKLSAgICAg
ICAgCi0gICAgcmV0dXJuIGZhbHNlOworI2lmIEVOQUJMRShHRVNUVVJFX0VWRU5UUykKK3N0YXRp
YyBpbmxpbmUgYm9vbCBnZXN0dXJlTm9kZShjb25zdCBQbGF0Zm9ybUdlc3R1cmVFdmVudCYgZSwg
Tm9kZSogbm9kZSkKK3sKKyAgICBpZiAoIW5vZGUtPnJlbmRlcmVyKCkpCisgICAgICAgIHJldHVy
biBmYWxzZTsKKyAgICBSZW5kZXJCb3gqIGVuY2xvc2luZ0JveCA9IG5vZGUtPnJlbmRlcmVyKCkt
PmVuY2xvc2luZ0JveCgpOworICAgIHJldHVybiBlbmNsb3NpbmdCb3gtPmdlc3R1cmUoZSk7CiB9
CisjZW5kaWYKIAogI2lmICFQTEFURk9STShNQUMpCiAKQEAgLTI2Nyw2ICsyODQsOSBAQCB2b2lk
IEV2ZW50SGFuZGxlcjo6Y2xlYXIoKQogI2lmIEVOQUJMRShUT1VDSF9FVkVOVFMpCiAgICAgbV9v
cmlnaW5hdGluZ1RvdWNoUG9pbnRUYXJnZXRzLmNsZWFyKCk7CiAjZW5kaWYKKyNpZiBFTkFCTEUo
R0VTVFVSRV9FVkVOVFMpCisgICAgbV9nZXN0dXJlVGFyZ2V0Tm9kZS5jbGVhcigpOworI2VuZGlm
CiB9CiAKIHZvaWQgRXZlbnRIYW5kbGVyOjpub2RlV2lsbEJlUmVtb3ZlZChOb2RlKiBub2RlVG9C
ZVJlbW92ZWQpCkBAIC0yMjE1LDE4ICsyMjM1LDcyIEBAIHZvaWQgRXZlbnRIYW5kbGVyOjpkZWZh
dWx0V2hlZWxFdmVudEhhbmRsZXIoTm9kZSogc3RhcnROb2RlLCBXaGVlbEV2ZW50KiB3aGVlbEV2
CiB9CiAKICNpZiBFTkFCTEUoR0VTVFVSRV9FVkVOVFMpCitib29sIEV2ZW50SGFuZGxlcjo6cGFz
c0dlc3R1cmVFdmVudFRvV2lkZ2V0SGVscGVyKFBhc3NSZWZQdHI8Tm9kZT4gdGFyZ2V0Tm9kZSwg
Y29uc3QgUGxhdGZvcm1HZXN0dXJlRXZlbnQmIGdlc3R1cmVFdmVudCwgY29uc3QgSGl0VGVzdFJl
c3VsdCYgcmVzdWx0KQoreworICAgIE5vZGUqIG5vZGUgPSB0YXJnZXROb2RlLmdldCgpOworICAg
IGlmICghbm9kZSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgLy8gRklYTUU6IGxhdGNo
IGNvcnJlY3RseQorICAgIGJvb2wgaXNPdmVyV2lkZ2V0ID0gcmVzdWx0LmlzT3ZlcldpZGdldCgp
OworICAgIFJlbmRlck9iamVjdCogdGFyZ2V0ID0gbm9kZS0+cmVuZGVyZXIoKTsKKyAgICBpZiAo
aXNPdmVyV2lkZ2V0ICYmIHRhcmdldCAmJiB0YXJnZXQtPmlzV2lkZ2V0KCkpIHsKKyAgICAgICBX
aWRnZXQqIHdpZGdldCA9IHRvUmVuZGVyV2lkZ2V0KHRhcmdldCktPndpZGdldCgpOworICAgICAg
ICBpZiAod2lkZ2V0ICYmIHBhc3NHZXN0dXJlRXZlbnRUb1dpZGdldChnZXN0dXJlRXZlbnQsIHdp
ZGdldCkpCisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAgcmV0dXJuIGZhbHNl
OworfQorCitib29sIEV2ZW50SGFuZGxlcjo6cGFzc0dlc3R1cmVFdmVudFRvRmFtZVZpZXcoY29u
c3QgUGxhdGZvcm1HZXN0dXJlRXZlbnQmIGdlc3R1cmVFdmVudCkKK3sKKyAgICBGcmFtZVZpZXcq
IHZpZXcgPSBtX2ZyYW1lLT52aWV3KCk7CisgICAgaWYgKCF2aWV3KQorICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICAgICAgCisgICAgdmlldy0+aGFuZGxlR2VzdHVyZUV2ZW50KGdlc3R1cmVFdmVu
dCk7CisgICAgcmV0dXJuIHRydWU7Cit9CisKKy8vIEhlbHBlciB0byBhbHdheXMgdW5sYXRjaCB0
YXJnZXQgbm9kZSBvbiBsZWF2aW5nIHNjb3BlLgorY2xhc3MgVW5sYXRjaGVyIHsKK3B1YmxpYzoK
KyAgICBVbmxhdGNoZXIoUmVmUHRyPE5vZGU+JiByKQorICAgICAgICA6IG1fcmVmKHIpCisgICAg
eworICAgIH0KKworICAgIH5VbmxhdGNoZXIoKQorICAgIHsKKyAgICAgICAgICAgIG1fcmVmLmNs
ZWFyKCk7CisgICAgfQorcHJpdmF0ZToKKyAgICBSZWZQdHI8Tm9kZT4mIG1fcmVmOworfTsKKwog
Ym9vbCBFdmVudEhhbmRsZXI6OmhhbmRsZUdlc3R1cmVFdmVudChjb25zdCBQbGF0Zm9ybUdlc3R1
cmVFdmVudCYgZ2VzdHVyZUV2ZW50KQogewotICAgIC8vIEZJWE1FOiBUaGlzIHNob3VsZCBoaXQg
dGVzdCBhbmQgZ28gdG8gdGhlIGNvcnJlY3Qgc3ViZnJhbWUgcmF0aGVyIHRoYW4gCi0gICAgLy8g
YWx3YXlzIHNlbmRpbmcgZ2VzdHVyZXMgdG8gdGhlIG1haW4gZnJhbWUgb25seS4gV2Ugc2hvdWxk
IGFsc28gZW5zdXJlCi0gICAgLy8gdGhhdCBpZiBhIGZyYW1lIGdldHMgYSBnZXN0dXJlIGJlZ2lu
IGdlc3R1cmUsIGl0IGdldHMgdGhlIGNvcnJlc3BvbmRpbmcKLSAgICAvLyBlbmQgZ2VzdHVyZSBh
cyB3ZWxsLgorICAgIERvY3VtZW50KiBkb2MgPSBtX2ZyYW1lLT5kb2N1bWVudCgpOworICAgIFJl
bmRlck9iamVjdCogZG9jUmVuZGVyZXIgPSBkb2MtPnJlbmRlcmVyKCk7CisgICAgaWYgKCFkb2NS
ZW5kZXJlcikKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIFJlZlB0cjxGcmFtZVZpZXc+IHBy
b3RlY3RvcihtX2ZyYW1lLT52aWV3KCkpOworICAgIEZyYW1lVmlldyogdmlldyA9IG1fZnJhbWUt
PnZpZXcoKTsKKyAgICBpZiAoIXZpZXcpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBzZXRG
cmFtZVdhc1Njcm9sbGVkQnlVc2VyKCk7CisgICAgTGF5b3V0UG9pbnQgdlBvaW50ID0gdmlldy0+
d2luZG93VG9Db250ZW50cyhnZXN0dXJlRXZlbnQucG9zaXRpb24oKSk7CisKKyAgICBIaXRUZXN0
UmVxdWVzdCByZXF1ZXN0KEhpdFRlc3RSZXF1ZXN0OjpSZWFkT25seSk7CisgICAgSGl0VGVzdFJl
c3VsdCByZXN1bHQodlBvaW50KTsKKyAgICBkb2MtPnJlbmRlclZpZXcoKS0+bGF5ZXIoKS0+aGl0
VGVzdChyZXF1ZXN0LCByZXN1bHQpOwogCiAgICAgc3dpdGNoIChnZXN0dXJlRXZlbnQudHlwZSgp
KSB7CiAgICAgY2FzZSBQbGF0Zm9ybUdlc3R1cmVFdmVudDo6VGFwRG93blR5cGU6CiAgICAgICAg
IGJyZWFrOwogICAgIGNhc2UgUGxhdGZvcm1HZXN0dXJlRXZlbnQ6OlRhcFR5cGU6IHsKLSAgICAg
ICAgLy8gRklYTUU6IFJlZmFjdG9yIHRoaXMgY29kZSB0byBub3QgaGl0IHRlc3QgbXVsdGlwbGUg
dGltZXMgb25jZSBoaXQgdGVzdGluZyBoYXMgYmVlbiBjb3JyZWN0ZWQgYXMgc3VnZ2VzdGVkIGFi
b3ZlLgorICAgICAgICAvLyBGSVhNRTogUmVmYWN0b3IgdGhpcyBjb2RlIHRvIG5vdCBoaXQgdGVz
dCBtdWx0aXBsZSB0aW1lcyBieSB1c2luZyB0aGUgY29kZQorICAgICAgICAvLyB3cml0dGVuIGZv
ciBzY3JvbGwuCiAgICAgICAgIFBsYXRmb3JtTW91c2VFdmVudCBmYWtlTW91c2VNb3ZlKGdlc3R1
cmVFdmVudC5wb3NpdGlvbigpLCBnZXN0dXJlRXZlbnQuZ2xvYmFsUG9zaXRpb24oKSwgTm9CdXR0
b24sIE1vdXNlRXZlbnRNb3ZlZCwgLyogY2xpY2tDb3VudCAqLyAxLCBnZXN0dXJlRXZlbnQuc2hp
ZnRLZXkoKSwgZ2VzdHVyZUV2ZW50LmN0cmxLZXkoKSwgZ2VzdHVyZUV2ZW50LmFsdEtleSgpLCBn
ZXN0dXJlRXZlbnQubWV0YUtleSgpLCBnZXN0dXJlRXZlbnQudGltZXN0YW1wKCkpOwogICAgICAg
ICBQbGF0Zm9ybU1vdXNlRXZlbnQgZmFrZU1vdXNlRG93bihnZXN0dXJlRXZlbnQucG9zaXRpb24o
KSwgZ2VzdHVyZUV2ZW50Lmdsb2JhbFBvc2l0aW9uKCksIExlZnRCdXR0b24sIE1vdXNlRXZlbnRQ
cmVzc2VkLCAvKiBjbGlja0NvdW50ICovIDEsIGdlc3R1cmVFdmVudC5zaGlmdEtleSgpLCBnZXN0
dXJlRXZlbnQuY3RybEtleSgpLCBnZXN0dXJlRXZlbnQuYWx0S2V5KCksIGdlc3R1cmVFdmVudC5t
ZXRhS2V5KCksIGdlc3R1cmVFdmVudC50aW1lc3RhbXAoKSk7CiAgICAgICAgIFBsYXRmb3JtTW91
c2VFdmVudCBmYWtlTW91c2VVcChnZXN0dXJlRXZlbnQucG9zaXRpb24oKSwgZ2VzdHVyZUV2ZW50
Lmdsb2JhbFBvc2l0aW9uKCksIExlZnRCdXR0b24sIE1vdXNlRXZlbnRSZWxlYXNlZCwgLyogY2xp
Y2tDb3VudCAqLyAxLCBnZXN0dXJlRXZlbnQuc2hpZnRLZXkoKSwgZ2VzdHVyZUV2ZW50LmN0cmxL
ZXkoKSwgZ2VzdHVyZUV2ZW50LmFsdEtleSgpLCBnZXN0dXJlRXZlbnQubWV0YUtleSgpLCBnZXN0
dXJlRXZlbnQudGltZXN0YW1wKCkpOwpAQCAtMjIzNiwyNSArMjMxMCw1MCBAQCBib29sIEV2ZW50
SGFuZGxlcjo6aGFuZGxlR2VzdHVyZUV2ZW50KGNvbnN0IFBsYXRmb3JtR2VzdHVyZUV2ZW50JiBn
ZXN0dXJlRXZlbnQpCiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KICAgICBjYXNlIFBsYXRm
b3JtR2VzdHVyZUV2ZW50OjpTY3JvbGxVcGRhdGVUeXBlOiB7Ci0gICAgICAgIGNvbnN0IGZsb2F0
IHRpY2tEaXZpc29yID0gKGZsb2F0KVdoZWVsRXZlbnQ6OnRpY2tNdWx0aXBsaWVyOwotICAgICAg
ICAvLyBGSVhNRTogUmVwbGFjZSB0aGlzIGludGVyaW0gaW1wbGVtZW50YXRpb24gb25jZSB0aGUg
YWJvdmUgZml4bWUgaGFzIGJlZW4gYWRkcmVzc2VkLgotICAgICAgICBJbnRQb2ludCBwb2ludChn
ZXN0dXJlRXZlbnQucG9zaXRpb24oKS54KCksIGdlc3R1cmVFdmVudC5wb3NpdGlvbigpLnkoKSk7
Ci0gICAgICAgIEludFBvaW50IGdsb2JhbFBvaW50KGdlc3R1cmVFdmVudC5nbG9iYWxQb3NpdGlv
bigpLngoKSwgZ2VzdHVyZUV2ZW50Lmdsb2JhbFBvc2l0aW9uKCkueSgpKTsKLSAgICAgICAgUGxh
dGZvcm1XaGVlbEV2ZW50IHN5bnRoZXRpY1doZWVsRXZlbnQocG9pbnQsIGdsb2JhbFBvaW50LCBn
ZXN0dXJlRXZlbnQuZGVsdGFYKCksIGdlc3R1cmVFdmVudC5kZWx0YVkoKSwgZ2VzdHVyZUV2ZW50
LmRlbHRhWCgpIC8gdGlja0Rpdmlzb3IsIGdlc3R1cmVFdmVudC5kZWx0YVkoKSAvIHRpY2tEaXZp
c29yLCBTY3JvbGxCeVBpeGVsV2hlZWxFdmVudCwgZ2VzdHVyZUV2ZW50LnNoaWZ0S2V5KCksIGdl
c3R1cmVFdmVudC5jdHJsS2V5KCksIGdlc3R1cmVFdmVudC5hbHRLZXkoKSwgZ2VzdHVyZUV2ZW50
Lm1ldGFLZXkoKSk7Ci0gICAgICAgIGhhbmRsZVdoZWVsRXZlbnQoc3ludGhldGljV2hlZWxFdmVu
dCk7Ci0gICAgICAgIHJldHVybiB0cnVlOworICAgICAgICAvLyBBbHdheXMgbGF0Y2hlZCBpZiBw
b3NzaWJsZS4KKyAgICAgICAgaWYgKCFtX2dlc3R1cmVUYXJnZXROb2RlKQorICAgICAgICAgICAg
bV9nZXN0dXJlVGFyZ2V0Tm9kZSA9IHJlc3VsdC5pbm5lck5vZGUoKTsKKworICAgICAgICBpZiAo
cGFzc0dlc3R1cmVFdmVudFRvV2lkZ2V0SGVscGVyKG1fZ2VzdHVyZVRhcmdldE5vZGUsIGdlc3R1
cmVFdmVudCwgcmVzdWx0KSkKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICBOb2Rl
KiBub2RlID0gbV9nZXN0dXJlVGFyZ2V0Tm9kZSA/IG1fZ2VzdHVyZVRhcmdldE5vZGUtPnNoYWRv
d0FuY2VzdG9yTm9kZSgpIDogMDsKKyAgICAgICAgYm9vbCB4c2Nyb2xsID0gbm9kZSAmJiBzY3Jv
bGxOb2RlKGdlc3R1cmVFdmVudC5kZWx0YVgoKSwgU2Nyb2xsQnlQaXhlbCwgU2Nyb2xsTGVmdCwg
U2Nyb2xsUmlnaHQsIG5vZGUsIChOb2RlKiopMCk7CisgICAgICAgIGJvb2wgeXNjcm9sbCA9IG5v
ZGUgJiYgc2Nyb2xsTm9kZShnZXN0dXJlRXZlbnQuZGVsdGFZKCksIFNjcm9sbEJ5UGl4ZWwsIFNj
cm9sbFVwLCBTY3JvbGxEb3duLCBub2RlLCAoTm9kZSoqKTApOworCisgICAgICAgIGlmICh4c2Ny
b2xsIHx8IHlzY3JvbGwpCisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgcmV0dXJu
IHBhc3NHZXN0dXJlRXZlbnRUb0ZhbWVWaWV3KGdlc3R1cmVFdmVudCk7CiAgICAgfQotICAgIGNh
c2UgUGxhdGZvcm1HZXN0dXJlRXZlbnQ6OkRvdWJsZVRhcFR5cGU6Ci0gICAgY2FzZSBQbGF0Zm9y
bUdlc3R1cmVFdmVudDo6U2Nyb2xsQmVnaW5UeXBlOgotICAgIGNhc2UgUGxhdGZvcm1HZXN0dXJl
RXZlbnQ6OlNjcm9sbEVuZFR5cGU6Ci0gICAgICAgIEZyYW1lVmlldyogdmlldyA9IG1fZnJhbWUt
PnZpZXcoKTsKLSAgICAgICAgaWYgKCF2aWV3KQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwor
ICAgIGNhc2UgUGxhdGZvcm1HZXN0dXJlRXZlbnQ6OlNjcm9sbEJlZ2luVHlwZTogeworICAgICAg
ICAvLyBMYXRjaCBvbiBzY3JvbGwgYmVnaW4uCisgICAgICAgIGlmIChtX2dlc3R1cmVUYXJnZXRO
b2RlKQorICAgICAgICAgICAgbV9nZXN0dXJlVGFyZ2V0Tm9kZSA9IDA7CisgICAgICAgIG1fZ2Vz
dHVyZVRhcmdldE5vZGUgPSByZXN1bHQuaW5uZXJOb2RlKCk7CiAKLSAgICAgICAgdmlldy0+aGFu
ZGxlR2VzdHVyZUV2ZW50KGdlc3R1cmVFdmVudCk7Ci0gICAgICAgIHJldHVybiB0cnVlOworICAg
ICAgICBpZiAocGFzc0dlc3R1cmVFdmVudFRvV2lkZ2V0SGVscGVyKG1fZ2VzdHVyZVRhcmdldE5v
ZGUsIGdlc3R1cmVFdmVudCwgcmVzdWx0KSkKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAg
ICAgICBOb2RlKiBub2RlID0gbV9nZXN0dXJlVGFyZ2V0Tm9kZSA/IG1fZ2VzdHVyZVRhcmdldE5v
ZGUtPnNoYWRvd0FuY2VzdG9yTm9kZSgpIDogMDsKKyAgICAgICAgaWYgKG5vZGUgJiYgZ2VzdHVy
ZU5vZGUoZ2VzdHVyZUV2ZW50LCBub2RlKSkKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAg
ICAgICByZXR1cm4gcGFzc0dlc3R1cmVFdmVudFRvRmFtZVZpZXcoZ2VzdHVyZUV2ZW50KTsKICAg
ICB9Ci0gICAgcmV0dXJuIHRydWU7CisgICAgY2FzZSBQbGF0Zm9ybUdlc3R1cmVFdmVudDo6U2Ny
b2xsRW5kVHlwZTogeworICAgICAgICAvLyBBbHdheXMgdW5sYXRjaCBvbiBsZWF2aW5nIHRoaXMg
Y2FzZS4KKyAgICAgICAgVW5sYXRjaGVyIHVubGF0Y2gobV9nZXN0dXJlVGFyZ2V0Tm9kZSk7Cisg
ICAgICAgIGlmICghbV9nZXN0dXJlVGFyZ2V0Tm9kZSkKKyAgICAgICAgICAgIG1fZ2VzdHVyZVRh
cmdldE5vZGUgPSByZXN1bHQuaW5uZXJOb2RlKCk7CisKKyAgICAgICAgaWYgKHBhc3NHZXN0dXJl
RXZlbnRUb1dpZGdldEhlbHBlcihtX2dlc3R1cmVUYXJnZXROb2RlLCBnZXN0dXJlRXZlbnQsIHJl
c3VsdCkpCisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgTm9kZSogbm9kZSA9IG1f
Z2VzdHVyZVRhcmdldE5vZGUgPyBtX2dlc3R1cmVUYXJnZXROb2RlLT5zaGFkb3dBbmNlc3Rvck5v
ZGUoKSA6IDA7CisgICAgICAgIGlmIChub2RlICYmIGdlc3R1cmVOb2RlKGdlc3R1cmVFdmVudCwg
bm9kZSkpCisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgcmV0dXJuIHBhc3NHZXN0
dXJlRXZlbnRUb0ZhbWVWaWV3KGdlc3R1cmVFdmVudCk7CisgICAgfQorICAgIGNhc2UgUGxhdGZv
cm1HZXN0dXJlRXZlbnQ6OkRvdWJsZVRhcFR5cGU6CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAg
ICB9CisgICAgcmV0dXJuIGZhbHNlOwogfQogI2VuZGlmCiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3BhZ2UvRXZlbnRIYW5kbGVyLmggYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL0V2ZW50SGFu
ZGxlci5oCmluZGV4IDljYzAzYmYwZTZhNmM4NjhjYTM4ZDQyOTQ3NjdlYWZjZmJkYjUxYWIuLjE3
MTM2ZjRiZjY0MDY5NTA3MGIxZDIwZjFjZmU3NWE3YzJjNTg1MmUgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3BhZ2UvRXZlbnRIYW5kbGVyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGFnZS9F
dmVudEhhbmRsZXIuaApAQCAtMzAwLDYgKzMwMCw5IEBAIHByaXZhdGU6CiAKICAgICBib29sIHBh
c3NNb3VzZURvd25FdmVudFRvV2lkZ2V0KFdpZGdldCopOwogICAgIGJvb2wgcGFzc1doZWVsRXZl
bnRUb1dpZGdldChQbGF0Zm9ybVdoZWVsRXZlbnQmLCBXaWRnZXQqKTsKKyNpZiBFTkFCTEUoR0VT
VFVSRV9FVkVOVFMpCisgICAgYm9vbCBwYXNzR2VzdHVyZUV2ZW50VG9XaWRnZXQoY29uc3QgUGxh
dGZvcm1HZXN0dXJlRXZlbnQmLCBXaWRnZXQqKTsKKyNlbmRpZgogCiAgICAgdm9pZCBkZWZhdWx0
U3BhY2VFdmVudEhhbmRsZXIoS2V5Ym9hcmRFdmVudCopOwogICAgIHZvaWQgZGVmYXVsdEJhY2tz
cGFjZUV2ZW50SGFuZGxlcihLZXlib2FyZEV2ZW50Kik7CkBAIC00MjEsNiArNDI0LDExIEBAIHBy
aXZhdGU6CiAgICAgVG91Y2hUYXJnZXRNYXAgbV9vcmlnaW5hdGluZ1RvdWNoUG9pbnRUYXJnZXRz
OwogICAgIGJvb2wgbV90b3VjaFByZXNzZWQ7CiAjZW5kaWYKKyNpZiBFTkFCTEUoR0VTVFVSRV9F
VkVOVFMpCisgICAgYm9vbCBwYXNzR2VzdHVyZUV2ZW50VG9XaWRnZXRIZWxwZXIoUGFzc1JlZlB0
cjxOb2RlPiwgY29uc3QgUGxhdGZvcm1HZXN0dXJlRXZlbnQmLCBjb25zdCBIaXRUZXN0UmVzdWx0
Jik7CisgICAgYm9vbCBwYXNzR2VzdHVyZUV2ZW50VG9GYW1lVmlldyhjb25zdCBQbGF0Zm9ybUdl
c3R1cmVFdmVudCYpOworICAgIFJlZlB0cjxOb2RlPiBtX2dlc3R1cmVUYXJnZXROb2RlOworI2Vu
ZGlmCiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9wYWdlL2Nocm9taXVtL0V2ZW50SGFuZGxlckNocm9taXVtLmNwcCBiL1NvdXJjZS9XZWJD
b3JlL3BhZ2UvY2hyb21pdW0vRXZlbnRIYW5kbGVyQ2hyb21pdW0uY3BwCmluZGV4IDQwYTcxYWIx
MWE1MzFhYjE1MGM2MTgxNGNiYTRmNjI4ZDM1ZWIzY2UuLjNlZDU0ZTgzMjAxMDZjZTg5ODViNThk
YjIzZTFkNGViOTM4NWM4NTMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvY2hyb21p
dW0vRXZlbnRIYW5kbGVyQ2hyb21pdW0uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvY2hy
b21pdW0vRXZlbnRIYW5kbGVyQ2hyb21pdW0uY3BwCkBAIC00NCw2ICs0NCwxMSBAQAogI2luY2x1
ZGUgIlBsYXRmb3JtV2hlZWxFdmVudC5oIgogI2luY2x1ZGUgIlJlbmRlcldpZGdldC5oIgogCisj
aWYgRU5BQkxFKEdFU1RVUkVfRVZFTlRTKSB8fCBFTkFCTEUoR0VTVFVSRV9SRUNPR05JWkVSKQor
I2luY2x1ZGUgIlBsYXRmb3JtR2VzdHVyZUV2ZW50LmgiCisjZW5kaWYKKworCiBuYW1lc3BhY2Ug
V2ViQ29yZSB7CiAKICNpZiBPUyhEQVJXSU4pCkBAIC0xNjQsNCArMTY5LDE3IEBAIGJvb2wgRXZl
bnRIYW5kbGVyOjpzaG91bGRUdXJuVmVydGljYWxUaWNrc0ludG9Ib3Jpem9udGFsKGNvbnN0IEhp
dFRlc3RSZXN1bHQmIHJlCiB9CiAjZW5kaWYKIAorI2lmIEVOQUJMRShHRVNUVVJFX0VWRU5UUykK
K2Jvb2wgRXZlbnRIYW5kbGVyOjpwYXNzR2VzdHVyZUV2ZW50VG9XaWRnZXQoY29uc3QgUGxhdGZv
cm1HZXN0dXJlRXZlbnQmIGdlc3R1cmVFdmVudCwgV2lkZ2V0KiB3aWRnZXQpCit7CisgICAgaWYg
KCF3aWRnZXQpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGlmICghd2lkZ2V0LT5pc0Zy
YW1lVmlldygpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICByZXR1cm4gc3RhdGljX2Nh
c3Q8RnJhbWVWaWV3Kj4od2lkZ2V0KS0+ZnJhbWUoKS0+ZXZlbnRIYW5kbGVyKCktPmhhbmRsZUdl
c3R1cmVFdmVudChnZXN0dXJlRXZlbnQpOworfQorI2VuZGlmCisKIH0gLy8gbmFtZXNwYWNlIFdl
YkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvZWZsL0V2ZW50SGFuZGxlckVm
bC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL2VmbC9FdmVudEhhbmRsZXJFZmwuY3BwCmluZGV4
IDNhM2M0ZGQyMDYxNjU4ZThkMGVhZDdlNTViYmVjZWU5ZGY5NjM2MmIuLjJiOWRhY2NiY2NmMjhh
MTdlZDg2NzI1NmFmNGVhZGZmMmRjNGVhZGYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3Bh
Z2UvZWZsL0V2ZW50SGFuZGxlckVmbC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGFnZS9lZmwv
RXZlbnRIYW5kbGVyRWZsLmNwcApAQCAtOTUsNiArOTUsMTQgQEAgYm9vbCBFdmVudEhhbmRsZXI6
OnBhc3NXaGVlbEV2ZW50VG9XaWRnZXQoUGxhdGZvcm1XaGVlbEV2ZW50JiBldmVudCwgV2lkZ2V0
KiB3aWQKICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8RnJhbWVWaWV3Kj4od2lkZ2V0KS0+ZnJhbWUo
KS0+ZXZlbnRIYW5kbGVyKCktPmhhbmRsZVdoZWVsRXZlbnQoZXZlbnQpOwogfQogCisjaWYgRU5B
QkxFKEdFU1RVUkVfRVZFTlRTKQorYm9vbCBFdmVudEhhbmRsZXI6OnBhc3NHZXN0dXJlRXZlbnRU
b1dpZGdldChjb25zdCBQbGF0Zm9ybUdlc3R1cmVFdmVudCYsIFdpZGdldCopCit7CisgICAgbm90
SW1wbGVtZW50ZWQoKTsKKyAgICByZXR1cm4gZmFsc2U7Cit9CisjZW5kaWYKKwogUGFzc1JlZlB0
cjxDbGlwYm9hcmQ+IEV2ZW50SGFuZGxlcjo6Y3JlYXRlRHJhZ2dpbmdDbGlwYm9hcmQoKSBjb25z
dAogewogICAgIHJldHVybiBDbGlwYm9hcmRFZmw6OmNyZWF0ZShDbGlwYm9hcmRXcml0YWJsZSwg
Q2xpcGJvYXJkOjpEcmFnQW5kRHJvcCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdl
L2d0ay9FdmVudEhhbmRsZXJHdGsuY3BwIGIvU291cmNlL1dlYkNvcmUvcGFnZS9ndGsvRXZlbnRI
YW5kbGVyR3RrLmNwcAppbmRleCBhYjU0ZDgzOGRiZDlkYjJiMjA0NTE5OGRiMTJkYjFhOWNlODdi
ZWI5Li41ZTQzYWJkNjc3YWVmODEwYjFiZjQ0NGYyNWQ4ZTJlNGIzYzQyOTA4IDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9wYWdlL2d0ay9FdmVudEhhbmRsZXJHdGsuY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3BhZ2UvZ3RrL0V2ZW50SGFuZGxlckd0ay5jcHAKQEAgLTk0LDYgKzk0LDE0IEBA
IGJvb2wgRXZlbnRIYW5kbGVyOjpwYXNzV2hlZWxFdmVudFRvV2lkZ2V0KFBsYXRmb3JtV2hlZWxF
dmVudCYgZXZlbnQsIFdpZGdldCogd2lkCiAgICAgcmV0dXJuIHN0YXRpY19jYXN0PEZyYW1lVmll
dyo+KHdpZGdldCktPmZyYW1lKCktPmV2ZW50SGFuZGxlcigpLT5oYW5kbGVXaGVlbEV2ZW50KGV2
ZW50KTsKIH0KIAorI2lmIEVOQUJMRShHRVNUVVJFX0VWRU5UUykKK2Jvb2wgRXZlbnRIYW5kbGVy
OjpwYXNzR2VzdHVyZUV2ZW50VG9XaWRnZXQoUGxhdGZvcm1HZXN0dXJlRXZlbnQmLCBXaWRnZXQq
KQoreworICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAgcmV0dXJuIGZhbHNlOworfQorI2VuZGlm
CisKIFBhc3NSZWZQdHI8Q2xpcGJvYXJkPiBFdmVudEhhbmRsZXI6OmNyZWF0ZURyYWdnaW5nQ2xp
cGJvYXJkKCkgY29uc3QKIHsKICAgICByZXR1cm4gQ2xpcGJvYXJkR3RrOjpjcmVhdGUoQ2xpcGJv
YXJkV3JpdGFibGUsIERhdGFPYmplY3RHdGs6OmNyZWF0ZSgpLCBDbGlwYm9hcmQ6OkRyYWdBbmRE
cm9wLCBtX2ZyYW1lKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvbWFjL0V2ZW50
SGFuZGxlck1hYy5tbSBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvbWFjL0V2ZW50SGFuZGxlck1hYy5t
bQppbmRleCA3NjIyOTM1Yjc0YzI4ODZlZDI2MDc4MmQzZjA2ZTdmYmEwYjU4ZWJmLi4wNzdlNjJi
ZTdlMGZjNjQ4NDU1ZTUyYTMwNTNhMzFkYTdlYmViYmUwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9wYWdlL21hYy9FdmVudEhhbmRsZXJNYWMubW0KKysrIGIvU291cmNlL1dlYkNvcmUvcGFn
ZS9tYWMvRXZlbnRIYW5kbGVyTWFjLm1tCkBAIC03MjQsNCArNzI0LDI1IEBAIHVuc2lnbmVkIEV2
ZW50SGFuZGxlcjo6YWNjZXNzS2V5TW9kaWZpZXJzKCkKICAgICByZXR1cm4gUGxhdGZvcm1LZXli
b2FyZEV2ZW50OjpDdHJsS2V5IHwgUGxhdGZvcm1LZXlib2FyZEV2ZW50OjpBbHRLZXk7CiB9CiAK
KyNpZiBFTkFCTEUoR0VTVFVSRV9FVkVOVFMpCitib29sIEV2ZW50SGFuZGxlcjo6cGFzc0dlc3R1
cmVFdmVudFRvV2lkZ2V0KGNvbnN0IFBsYXRmb3JtR2VzdHVyZUV2ZW50JiBnZXN0dXJlRXZlbnQs
IFdpZGdldCogd2lkZ2V0KQoreworICAgIEJFR0lOX0JMT0NLX09CSkNfRVhDRVBUSU9OUzsKKwor
ICAgIGlmICghd2lkZ2V0KQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBOU1ZpZXcqIG5v
ZGVWaWV3ID0gd2lkZ2V0LT5wbGF0Zm9ybVdpZGdldCgpOworICAgIGlmICghbm9kZVZpZXcpIHsK
KyAgICAgICAgLy8gV2ViS2l0MiBjb2RlIHBhdGguCisgICAgICAgIGlmICghd2lkZ2V0LT5pc0Zy
YW1lVmlldygpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgICAgIHJldHVybiBz
dGF0aWNfY2FzdDxGcmFtZVZpZXcqPih3aWRnZXQpLT5mcmFtZSgpLT5ldmVudEhhbmRsZXIoKS0+
aGFuZGxlR2VzdHVyZUV2ZW50KGdlc3R1cmVFdmVudCk7CisgICAgfQorICAgIEVORF9CTE9DS19P
QkpDX0VYQ0VQVElPTlM7CisgICAgcmV0dXJuIGZhbHNlOworfQorI2VuZGlmCisKIH0KZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvcXQvRXZlbnRIYW5kbGVyUXQuY3BwIGIvU291cmNl
L1dlYkNvcmUvcGFnZS9xdC9FdmVudEhhbmRsZXJRdC5jcHAKaW5kZXggMmI4ODA0ZDQwYjBhMDY2
ODkzN2NiZWQ2NmJlYzQzNTQyYjQ2Y2EyZi4uOWU4NjQ1YzRjYzJlNmMwNTFiZTBiZDk2ZDFhODBk
MThiMDhjMGUzMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGFnZS9xdC9FdmVudEhhbmRs
ZXJRdC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGFnZS9xdC9FdmVudEhhbmRsZXJRdC5jcHAK
QEAgLTk4LDYgKzk4LDE3IEBAIGJvb2wgRXZlbnRIYW5kbGVyOjpwYXNzV2hlZWxFdmVudFRvV2lk
Z2V0KFBsYXRmb3JtV2hlZWxFdmVudCYgZXZlbnQsIFdpZGdldCogd2lkCiAgICAgcmV0dXJuIHN0
YXRpY19jYXN0PEZyYW1lVmlldyo+KHdpZGdldCktPmZyYW1lKCktPmV2ZW50SGFuZGxlcigpLT5o
YW5kbGVXaGVlbEV2ZW50KGV2ZW50KTsKIH0KIAorI2lmIEVOQUJMRShHRVNUVVJFX0VWRU5UUykK
K2Jvb2wgRXZlbnRIYW5kbGVyOjpwYXNzR2VzdHVyZUV2ZW50VG9XaWRnZXQoUGxhdGZvcm1HZXN0
dXJlRXZlbnQmIGV2ZW50LCBXaWRnZXQqIHdpZGdldCkKK3sKKyAgICBRX0FTU0VSVCh3aWRnZXQp
OworICAgIGlmICghd2lkZ2V0LT5pc0ZyYW1lVmlldygpKQorICAgICAgICByZXR1cm4gZmFsc2U7
CisKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8RnJhbWVWaWV3Kj4od2lkZ2V0KS0+ZnJhbWUoKS0+
ZXZlbnRIYW5kbGVyKCktPmhhbmRsZUdlc3R1cmVFdmVudChldmVudCk7Cit9CisjZW5kaWYKKwog
UGFzc1JlZlB0cjxDbGlwYm9hcmQ+IEV2ZW50SGFuZGxlcjo6Y3JlYXRlRHJhZ2dpbmdDbGlwYm9h
cmQoKSBjb25zdAogewogICAgIHJldHVybiBDbGlwYm9hcmRRdDo6Y3JlYXRlKENsaXBib2FyZFdy
aXRhYmxlLCBtX2ZyYW1lLCBDbGlwYm9hcmQ6OkRyYWdBbmREcm9wKTsKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3BhZ2Uvd2luL0V2ZW50SGFuZGxlcldpbi5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9wYWdlL3dpbi9FdmVudEhhbmRsZXJXaW4uY3BwCmluZGV4IDcyMWUzNTBlODJmYmZmZGMyZWU4
M2E0MmE2MjEwNmM0NGQwZTY5MTYuLmQ3YTE0YmUzNGZkYTkxZTVjZjYxMTM3OTcwZjFjZmNkNmVk
YjAzM2IgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2Uvd2luL0V2ZW50SGFuZGxlcldp
bi5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGFnZS93aW4vRXZlbnRIYW5kbGVyV2luLmNwcApA
QCAtODEsNiArODEsMTQgQEAgYm9vbCBFdmVudEhhbmRsZXI6OnBhc3NXaGVlbEV2ZW50VG9XaWRn
ZXQoUGxhdGZvcm1XaGVlbEV2ZW50JiB3aGVlbEV2ZW50LCBXaWRnZXQKICAgICByZXR1cm4gc3Rh
dGljX2Nhc3Q8RnJhbWVWaWV3Kj4od2lkZ2V0KS0+ZnJhbWUoKS0+ZXZlbnRIYW5kbGVyKCktPmhh
bmRsZVdoZWVsRXZlbnQod2hlZWxFdmVudCk7CiB9CiAKKyNpZiBFTkFCTEUoR0VTVFVSRV9FVkVO
VFMpCitib29sIEV2ZW50SGFuZGxlcjo6cGFzc0dlc3R1cmVFdmVudFRvV2lkZ2V0KGNvbnN0IFBs
YXRmb3JtR2VzdHVyZUV2ZW50JiwgV2lkZ2V0KikKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOwor
ICAgIHJldHVybiBmYWxzZTsKK30KKyNlbmRpZgorCiBib29sIEV2ZW50SGFuZGxlcjo6dGFic1Rv
QWxsRm9ybUNvbnRyb2xzKEtleWJvYXJkRXZlbnQqKSBjb25zdAogewogICAgIHJldHVybiB0cnVl
OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGFnZS93eC9FdmVudEhhbmRsZXJXeC5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9wYWdlL3d4L0V2ZW50SGFuZGxlcld4LmNwcAppbmRleCBiYTJmOWNk
NWJiNDU0OGM0YjE1ZTk3MzcwNmQ0MzNiYTg4ZDI5NWE5Li41ZmJmYmNkMjY3ZDg5N2Y2NDNjZjM5
OTU1ZDdiMzMyNDllN2RhY2ViIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL3d4L0V2
ZW50SGFuZGxlcld4LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL3d4L0V2ZW50SGFuZGxl
cld4LmNwcApAQCAtODIsNiArODIsMTQgQEAgYm9vbCBFdmVudEhhbmRsZXI6OnBhc3NXaGVlbEV2
ZW50VG9XaWRnZXQoUGxhdGZvcm1XaGVlbEV2ZW50JiBldmVudCwgV2lkZ2V0KiB3aWQKICAgICBy
ZXR1cm4gc3RhdGljX2Nhc3Q8RnJhbWVWaWV3Kj4od2lkZ2V0KS0+ZnJhbWUoKS0+ZXZlbnRIYW5k
bGVyKCktPmhhbmRsZVdoZWVsRXZlbnQoZXZlbnQpOwogfQogCisjaWYgRU5BQkxFKEdFU1RVUkVf
RVZFTlRTKQorYm9vbCBFdmVudEhhbmRsZXI6OnBhc3NHZXN0dXJlRXZlbnRUb1dpZGdldChQbGF0
Zm9ybUdlc3R1cmVFdmVudCYsIFdpZGdldCopCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsgCisg
ICAgcmV0dXJuIGZhbHNlOyAKK30KKyNlbmRpZgorCiBib29sIEV2ZW50SGFuZGxlcjo6dGFic1Rv
QWxsRm9ybUNvbnRyb2xzKEtleWJvYXJkRXZlbnQqIGV2ZW50KSBjb25zdCAKIHsgCiAgICAgbm90
SW1wbGVtZW50ZWQoKTsgCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9TY3Jv
bGxBbmltYXRvci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxBbmltYXRvci5j
cHAKaW5kZXggMzI5OGUxOGE1MjU3YzFjN2RmZTZmMTQwOGQ5MDk5YTA3MTZkMmIzZS4uYzkxN2E4
OWQzZjg1Yjk4MTg0YjAyNWYzYjY3NWQ2NmI0MzliYTZiMCAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vU2Nyb2xsQW5pbWF0b3IuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL1Njcm9sbEFuaW1hdG9yLmNwcApAQCAtMzcsNiArMzcsMTAgQEAKICNpbmNsdWRlIDxh
bGdvcml0aG0+CiAjaW5jbHVkZSA8d3RmL1Bhc3NPd25QdHIuaD4KIAorI2lmIEVOQUJMRShHRVNU
VVJFX1JFQ09HTklaRVIpIHx8IEVOQUJMRShHRVNUVVJFX0VWRU5UUykKKyNpbmNsdWRlICJQbGF0
Zm9ybUdlc3R1cmVFdmVudC5oIgorI2VuZGlmCisKIHVzaW5nIG5hbWVzcGFjZSBzdGQ7CiAKIG5h
bWVzcGFjZSBXZWJDb3JlIHsKQEAgLTEyMSw4ICsxMjUsMjkgQEAgYm9vbCBTY3JvbGxBbmltYXRv
cjo6aGFuZGxlV2hlZWxFdmVudChjb25zdCBQbGF0Zm9ybVdoZWVsRXZlbnQmIGUpCiB9CiAKICNp
ZiBFTkFCTEUoR0VTVFVSRV9FVkVOVFMpCi12b2lkIFNjcm9sbEFuaW1hdG9yOjpoYW5kbGVHZXN0
dXJlRXZlbnQoY29uc3QgUGxhdGZvcm1HZXN0dXJlRXZlbnQmKQordm9pZCBTY3JvbGxBbmltYXRv
cjo6aGFuZGxlR2VzdHVyZUV2ZW50KGNvbnN0IFBsYXRmb3JtR2VzdHVyZUV2ZW50JiBldmVudCkK
IHsKKyAgICBzd2l0Y2ggKGV2ZW50LnR5cGUoKSkgeworICAgIGNhc2UgUGxhdGZvcm1HZXN0dXJl
RXZlbnQ6OlNjcm9sbEJlZ2luVHlwZToKKyAgICBjYXNlIFBsYXRmb3JtR2VzdHVyZUV2ZW50OjpT
Y3JvbGxFbmRUeXBlOgorICAgICAgICAvLyBGSVhNRTogdGVzdCBoYW5kbGluZyBoZXJlLi4uCisg
ICAgICAgIGJyZWFrOworICAgIGNhc2UgUGxhdGZvcm1HZXN0dXJlRXZlbnQ6OlNjcm9sbFVwZGF0
ZVR5cGU6IHsKKyAgICAgICAgSW50U2l6ZSBtYXhGb3J3YXJkU2Nyb2xsRGVsdGEgPSBtX3Njcm9s
bGFibGVBcmVhLT5tYXhpbXVtU2Nyb2xsUG9zaXRpb24oKSAtIG1fc2Nyb2xsYWJsZUFyZWEtPnNj
cm9sbFBvc2l0aW9uKCk7CisgICAgICAgIEludFNpemUgbWF4QmFja3dhcmRTY3JvbGxEZWx0YSA9
IG1fc2Nyb2xsYWJsZUFyZWEtPnNjcm9sbFBvc2l0aW9uKCkgLSBtX3Njcm9sbGFibGVBcmVhLT5t
aW5pbXVtU2Nyb2xsUG9zaXRpb24oKTsKKyAgICAgICAgZmxvYXQgZGVsdGFYID0gKGV2ZW50LmRl
bHRhWCgpIDwgMC5mKSA/IG1heChldmVudC5kZWx0YVgoKSwgIC1mbG9hdChtYXhGb3J3YXJkU2Ny
b2xsRGVsdGEud2lkdGgoKSkpIDogbWluKGV2ZW50LmRlbHRhWCgpLCBmbG9hdChtYXhCYWNrd2Fy
ZFNjcm9sbERlbHRhLndpZHRoKCkpKTsKKyAgICAgICAgZmxvYXQgZGVsdGFZID0gKGV2ZW50LmRl
bHRhWSgpIDwgMC5mKSA/IG1heChldmVudC5kZWx0YVkoKSwgIC1mbG9hdChtYXhGb3J3YXJkU2Ny
b2xsRGVsdGEuaGVpZ2h0KCkpKSA6IG1pbihldmVudC5kZWx0YVkoKSwgZmxvYXQobWF4QmFja3dh
cmRTY3JvbGxEZWx0YS5oZWlnaHQoKSkpOworCisgICAgICAgIEludFJlY3QgY29udGVudFJlY3Qg
PSBtX3Njcm9sbGFibGVBcmVhLT52aXNpYmxlQ29udGVudFJlY3QodHJ1ZSk7CisgICAgICAgIEZs
b2F0UG9pbnQgb2Zmc2V0ID0gRmxvYXRQb2ludChjb250ZW50UmVjdC54KCkgLSBkZWx0YVgsIGNv
bnRlbnRSZWN0LnkoKSAtIGRlbHRhWSk7CisgICAgICAgIHNjcm9sbFRvT2Zmc2V0V2l0aG91dEFu
aW1hdGlvbihvZmZzZXQpOworICAgICAgICBicmVhazsKKyAgICB9CisgICAgY2FzZSBQbGF0Zm9y
bUdlc3R1cmVFdmVudDo6VGFwRG93blR5cGU6CisgICAgY2FzZSBQbGF0Zm9ybUdlc3R1cmVFdmVu
dDo6VGFwVHlwZToKKyAgICBjYXNlIFBsYXRmb3JtR2VzdHVyZUV2ZW50OjpEb3VibGVUYXBUeXBl
OgorICAgICAgICBicmVhazsKKyAgICB9CiB9CiAjZW5kaWYKIApkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vU2Nyb2xsQW5pbWF0b3JOb25lLmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL1Njcm9sbEFuaW1hdG9yTm9uZS5jcHAKaW5kZXggMjYyMzhjNzNiMjEyYWQ4MDk4
NDI1MjFjZTMzZGEwM2ZmNmQ4YzAwNi4uZmMwN2VjMmI3MjMyYTZkZWM2ZjNlZDRmOTJjMDVjMjU2
MzdhOTI1NSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU2Nyb2xsQW5pbWF0
b3JOb25lLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxBbmltYXRvck5v
bmUuY3BwCkBAIC01MTksOSArNTE5LDE0IEBAIHZvaWQgU2Nyb2xsQW5pbWF0b3JOb25lOjpoYW5k
bGVHZXN0dXJlRXZlbnQoY29uc3QgUGxhdGZvcm1HZXN0dXJlRXZlbnQmIHBnZSkKICAgICBjYXNl
IFBsYXRmb3JtR2VzdHVyZUV2ZW50OjpEb3VibGVUYXBUeXBlOgogICAgICAgICB6b29tKHBnZSk7
CiAgICAgICAgIGJyZWFrOwotCisgICAgY2FzZSBQbGF0Zm9ybUdlc3R1cmVFdmVudDo6U2Nyb2xs
QmVnaW5UeXBlOgorICAgIGNhc2UgUGxhdGZvcm1HZXN0dXJlRXZlbnQ6OlNjcm9sbEVuZFR5cGU6
CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUGxhdGZvcm1HZXN0dXJlRXZlbnQ6OlNjcm9sbFVw
ZGF0ZVR5cGU6IAorICAgICAgICBTY3JvbGxBbmltYXRvcjo6aGFuZGxlR2VzdHVyZUV2ZW50KHBn
ZSk7CisgICAgICAgIGJyZWFrOwogICAgIGRlZmF1bHQ6Ci0gICAgICAgIC8vIFRPRE86IGFkZCBh
bnkgb3RoZXIgZXZlbnQgdHlwZXMgd2Ugc2hvdWxkIGhhbmRsZQorICAgICAgICAvLyBGSVhNRTog
YWRkIGFueSBvdGhlciBldmVudCB0eXBlcyB3ZSBzaG91bGQgaGFuZGxlCiAgICAgICAgIHsgfQog
ICAgIH0KIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCb3gu
Y3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJveC5jcHAKaW5kZXggOTk2Mjkz
Mzg2YjhlMDFlYzUwMjFmYzM2NzI3MThlNWI0NjQ5YzI2Zi4uNThlODQ4NTE2MGUzY2U0ZjFiMDk4
NGQwNWJjMjIxNDNlMGE3ODc5YyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlckJveC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJveC5j
cHAKQEAgLTY3MSw2ICs2NzEsMjEgQEAgYm9vbCBSZW5kZXJCb3g6OnNjcm9sbChTY3JvbGxEaXJl
Y3Rpb24gZGlyZWN0aW9uLCBTY3JvbGxHcmFudWxhcml0eSBncmFudWxhcml0eSwKICAgICByZXR1
cm4gZmFsc2U7CiB9CiAKKyNpZiBFTkFCTEUoR0VTVFVSRV9FVkVOVFMpCitib29sIFJlbmRlckJv
eDo6Z2VzdHVyZShjb25zdCBQbGF0Zm9ybUdlc3R1cmVFdmVudCYgZSkKK3sKKyAgICBmcHJpbnRm
KHN0ZGVyciwgIlJlbmRlckJveDo6Z2VzdHVyZVxuIik7CisgICAgUmVuZGVyTGF5ZXIqIGxheWVy
ID0gbGF5ZXIoKTsKKyAgICBpZiAobGF5ZXIpIHsKKyAgICAgICAgbGF5ZXItPmhhbmRsZUdlc3R1
cmVFdmVudChlKTsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorCisgICAgLy8gRklYTUU6
IERpc3BhdGNoIHRvIFJlbmRlckJsb2NrIGluc3RhbmNlcyBhcyB3ZWxsLgorICAgIHJldHVybiBm
YWxzZTsKK30KKyNlbmRpZgorCiBib29sIFJlbmRlckJveDo6bG9naWNhbFNjcm9sbChTY3JvbGxM
b2dpY2FsRGlyZWN0aW9uIGRpcmVjdGlvbiwgU2Nyb2xsR3JhbnVsYXJpdHkgZ3JhbnVsYXJpdHks
IGZsb2F0IG11bHRpcGxpZXIsIE5vZGUqKiBzdG9wTm9kZSkKIHsKICAgICBib29sIHNjcm9sbGVk
ID0gZmFsc2U7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQm94
LmggYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQm94LmgKaW5kZXggMzI0N2Q4NTZk
YmE0Mzg4MzYxN2NlZDg2NjEzYWRiODJlMTBkOTE0YS4uZDA2MzQ2MjVhODYzMGU5YWMwMjZhMzU4
MDhlMmYzY2MwYmRmNDAzMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlckJveC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCb3guaApAQCAt
MzEsNiArMzEsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNzIFJlbmRlckJveFJlZ2lv
bkluZm87CiBjbGFzcyBSZW5kZXJSZWdpb247CitjbGFzcyBQbGF0Zm9ybUdlc3R1cmVFdmVudDsK
IHN0cnVjdCBQYWludEluZm87CiAKIGVudW0gTG9naWNhbFdpZHRoVHlwZSB7IExvZ2ljYWxXaWR0
aCwgTWluTG9naWNhbFdpZHRoLCBNYXhMb2dpY2FsV2lkdGggfTsKQEAgLTQzMyw2ICs0MzQsMTAg
QEAgcHVibGljOgogICAgIHZpcnR1YWwgYm9vbCBuZWVkc1ByZWZlcnJlZFdpZHRoc1JlY2FsY3Vs
YXRpb24oKSBjb25zdDsKICAgICB2aXJ0dWFsIHZvaWQgY29tcHV0ZUludHJpbnNpY1JhdGlvSW5m
b3JtYXRpb24oRmxvYXRTaXplJiAvKiBpbnRyaW5zaWNSYXRpbyAqLywgYm9vbCYgLyogaXNQZXJj
ZW50YWdlSW50cmluc2ljU2l6ZSAqLykgY29uc3QgeyB9CiAKKyNpZiBFTkFCTEUoR0VTVFVSRV9F
VkVOVFMpCisgICAgdmlydHVhbCBib29sIGdlc3R1cmUoY29uc3QgUGxhdGZvcm1HZXN0dXJlRXZl
bnQmKTsKKyNlbmRpZgorCiBwcm90ZWN0ZWQ6CiAgICAgdmlydHVhbCB2b2lkIHdpbGxCZURlc3Ry
b3llZCgpOwogCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cgYi9MYXlvdXRUZXN0
cy9DaGFuZ2VMb2cKaW5kZXggN2Y4ZDRhY2NmZGU0YTNkNWEzMzc3ODNkNmIxNDg3NWFjZGQ4NTdi
NC4uNGUwNWMxNGJhM2ZkYTNlYWJkNmNmZmM4MjAyZmJlOTcxYjYzM2JjZCAxMDA2NDQKLS0tIGEv
TGF5b3V0VGVzdHMvQ2hhbmdlTG9nCisrKyBiL0xheW91dFRlc3RzL0NoYW5nZUxvZwpAQCAtMSwz
ICsxLDE4IEBACisyMDExLTEwLTI2ICBSb2JlcnQgS3JvZWdlciAgPHJqa3JvZWdlQGNocm9taXVt
Lm9yZz4KKworICAgICAgICBQbGF0Zm9ybUdlc3R1cmVFdmVudDo6aGFuZGxlR2VzdHVyZUV2ZW50
IHNob3VsZCBoaXQgdGVzdCB3aGlsZSBkaXNwYXRjaGluZyBTY3JvbGwqIGV2ZW50cy4KKyAgICAg
ICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTY3ODIyCisKKyAgICAg
ICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBmYXN0L2V2ZW50cy90
b3VjaC9nZXN0dXJlL3RvdWNoLWdlc3R1cmUtc2Nyb2xsLWlmcmFtZS1leHBlY3RlZC50eHQ6IEFk
ZGVkLgorICAgICAgICAqIGZhc3QvZXZlbnRzL3RvdWNoL2dlc3R1cmUvdG91Y2gtZ2VzdHVyZS1z
Y3JvbGwtaWZyYW1lLmh0bWw6IEFkZGVkLgorICAgICAgICAqIGZhc3QvZXZlbnRzL3RvdWNoL2dl
c3R1cmUvdG91Y2gtZ2VzdHVyZS1zY3JvbGwtcGFnZS1leHBlY3RlZC50eHQ6IEFkZGVkLgorICAg
ICAgICAqIGZhc3QvZXZlbnRzL3RvdWNoL2dlc3R1cmUvdG91Y2gtZ2VzdHVyZS1zY3JvbGwtcGFn
ZS5odG1sOiBBZGRlZC4KKyAgICAgICAgKiBmYXN0L2V2ZW50cy90b3VjaC9nZXN0dXJlL3RvdWNo
LWdlc3R1cmUtc2Nyb2xsLXNoeS10YXJnZXQtZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAgICAg
KiBmYXN0L2V2ZW50cy90b3VjaC9nZXN0dXJlL3RvdWNoLWdlc3R1cmUtc2Nyb2xsLXNoeS10YXJn
ZXQuaHRtbDogQWRkZWQuCisgICAgICAgICogZmFzdC9ldmVudHMvdG91Y2gvcmVzb3VyY2VzL3Nj
cm9sbC1pbnNpZGUtaWZyYW1lLmh0bWw6IEFkZGVkLgorCiAyMDExLTEwLTI2ICBDYXJ5IENsYXJr
ICA8Y2FyeWNsYXJrQGdvb2dsZS5jb20+CiAKICAgICAgICAgVW5yZXZpZXdlZCBnYXJkZW5pbmc6
IHNpeHRoIGNodW5rIG9mIGJhc2VsaW5lcyBmb3IgQ2hyb21pdW0tU2tpYQpkaWZmIC0tZ2l0IGEv
TGF5b3V0VGVzdHMvZmFzdC9ldmVudHMvdG91Y2gvZ2VzdHVyZS90b3VjaC1nZXN0dXJlLXNjcm9s
bC1pZnJhbWUtZXhwZWN0ZWQudHh0IGIvTGF5b3V0VGVzdHMvZmFzdC9ldmVudHMvdG91Y2gvZ2Vz
dHVyZS90b3VjaC1nZXN0dXJlLXNjcm9sbC1pZnJhbWUtZXhwZWN0ZWQudHh0Cm5ldyBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAu
LmZiMDQ2Mzk0M2RiZTBiNWMwNWYyZTlkMzYxYjdjYjA2ZTlmMDAwYjUKLS0tIC9kZXYvbnVsbAor
KysgYi9MYXlvdXRUZXN0cy9mYXN0L2V2ZW50cy90b3VjaC9nZXN0dXJlL3RvdWNoLWdlc3R1cmUt
c2Nyb2xsLWlmcmFtZS1leHBlY3RlZC50eHQKQEAgLTAsMCArMSwxNiBAQAorCitUaGlzIHRlc3Rz
IGdlc3R1cmUgc2Nyb2xsaW5nIGluIGlmcmFtZXMuIFJlZC1ncmVlbiBzdHJpcCBpcyBzY3JvbGxl
ZCBvbiBwYXNzLgorCitPbiBzdWNjZXNzLCB5b3Ugd2lsbCBzZWUgYSBzZXJpZXMgb2YgIlBBU1Mi
IG1lc3NhZ2VzLCBmb2xsb3dlZCBieSAiVEVTVCBDT01QTEVURSIuCisKKworZmlyc3QgZ2VzdHVy
ZQorUEFTUyB0b3VjaHRhcmdldC5jb250ZW50RG9jdW1lbnQuYm9keS5zY3JvbGxUb3AgaXMgMTQw
CitQQVNTIHRvdWNodGFyZ2V0LmNvbnRlbnREb2N1bWVudC5ib2R5LnNjcm9sbExlZnQgaXMgMAor
c2Vjb25kIGdlc3R1cmUKK1BBU1MgdG91Y2h0YXJnZXQuY29udGVudERvY3VtZW50LmJvZHkuc2Ny
b2xsVG9wIGlzIDIwMAorUEFTUyB0b3VjaHRhcmdldC5jb250ZW50RG9jdW1lbnQuYm9keS5zY3Jv
bGxMZWZ0IGlzIDAKK1BBU1Mgc3VjY2Vzc2Z1bGx5UGFyc2VkIGlzIHRydWUKKworVEVTVCBDT01Q
TEVURQorCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9mYXN0L2V2ZW50cy90b3VjaC9nZXN0dXJl
L3RvdWNoLWdlc3R1cmUtc2Nyb2xsLWlmcmFtZS5odG1sIGIvTGF5b3V0VGVzdHMvZmFzdC9ldmVu
dHMvdG91Y2gvZ2VzdHVyZS90b3VjaC1nZXN0dXJlLXNjcm9sbC1pZnJhbWUuaHRtbApuZXcgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwLi45MTQ0MTFjYThmZjIwYTcwZTM0ODE3NTc4NmUzNGFlZTdjYzNlYzk0Ci0tLSAvZGV2L251
bGwKKysrIGIvTGF5b3V0VGVzdHMvZmFzdC9ldmVudHMvdG91Y2gvZ2VzdHVyZS90b3VjaC1nZXN0
dXJlLXNjcm9sbC1pZnJhbWUuaHRtbApAQCAtMCwwICsxLDEyMSBAQAorPCFET0NUWVBFIEhUTUwg
UFVCTElDICItLy9JRVRGLy9EVEQgSFRNTC8vRU4iPgorPGh0bWw+Cis8aGVhZD4KKzxsaW5rIHJl
bD0ic3R5bGVzaGVldCIgaHJlZj0iLi4vLi4vLi4vanMvcmVzb3VyY2VzL2pzLXRlc3Qtc3R5bGUu
Y3NzIj4KKzxzY3JpcHQgc3JjPSIuLi8uLi8uLi9qcy9yZXNvdXJjZXMvanMtdGVzdC1wcmUuanMi
Pjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9Ii4uLy4uLy4uL2pzL3Jlc291cmNlcy9qcy10ZXN0LXBv
c3QtZnVuY3Rpb24uanMiPjwvc2NyaXB0PgorPHN0eWxlIHR5cGU9InRleHQvY3NzIj4KKyN0b3Vj
aHRhcmdldCB7CisgIHdpZHRoOiAyMDBweDsKKyAgaGVpZ2h0OiAyMDBweDsKKyAgcG9zaXRpb246
IHJlbGF0aXZlOworICBiYWNrZ3JvdW5kOiB3aGl0ZTsKK30KKzwvc3R5bGU+Cis8L2hlYWQ+Cis8
Ym9keT4KKzxpZnJhbWUgaWQ9InRvdWNodGFyZ2V0IiBzcmM9Ii4uL3Jlc291cmNlcy9zY3JvbGwt
aW5zaWRlLWlmcmFtZS5odG1sIj48L2lmcmFtZT4KKyAgICA8cCBpZD0iZGVzY3JpcHRpb24iPjwv
cD4KKzxkaXYgaWQ9ImNvbnNvbGUiPjwvZGl2PgorPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3Jp
cHQiPgorCit2YXIgdG91Y2h0YXJnZXQ7Cit2YXIgZXhwZWN0ZWRTY3JvbGxzVG90YWwgPSAyOwor
dmFyIHNjcm9sbHNPY2N1cnJlZCA9IDA7Cit2YXIgc2Nyb2xsQW1vdW50WCA9IFsnMCcsICcwJ107
Cit2YXIgc2Nyb2xsQW1vdW50WSA9IFsnMTQwJywgJzIwMCddOworCitmdW5jdGlvbiBjaGVja1Nj
cm9sbE9mZnNldCgpCit7CisgICAgdG91Y2h0YXJnZXQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJ
ZCgndG91Y2h0YXJnZXQnKTsKKyAgICBpZiAod2luZG93LmV2ZW50U2VuZGVyKSB7CisgICAgICAg
IHNob3VsZEJlKCd0b3VjaHRhcmdldC5jb250ZW50RG9jdW1lbnQuYm9keS5zY3JvbGxUb3AnLCBz
Y3JvbGxBbW91bnRZW3Njcm9sbHNPY2N1cnJlZF0pOworICAgICAgICBzaG91bGRCZSgndG91Y2h0
YXJnZXQuY29udGVudERvY3VtZW50LmJvZHkuc2Nyb2xsTGVmdCcsIHNjcm9sbEFtb3VudFhbc2Ny
b2xsc09jY3VycmVkXSk7CisgICAgICAgIHNjcm9sbHNPY2N1cnJlZCsrOworICAgIH0KKworICAg
IGlmIChzY3JvbGxzT2NjdXJyZWQgPT0gZXhwZWN0ZWRTY3JvbGxzVG90YWwpIHsKKyAgICAgICAg
Ly8gSWYgd2UndmUgZ290IGhlcmUsIHdlJ3ZlIHBhc3NlZC4KKyAgICAgICAgc3VjY2Vzc2Z1bGx5
UGFyc2VkID0gdHJ1ZTsKKyAgICAgICAgaXNTdWNjZXNzZnVsbHlQYXJzZWQoKTsKKyAgICAgICAg
aWYgKHdpbmRvdy5sYXlvdXRUZXN0Q29udHJvbGxlcikKKyAgICAgICAgICAgIGxheW91dFRlc3RD
b250cm9sbGVyLm5vdGlmeURvbmUoKTsKKyAgICB9IGVsc2UgeworICAgICAgICBzZWNvbmRUb3Vj
aERyYWdTZXF1ZW5jZSgpOworICAgIH0KK30KKworZnVuY3Rpb24gZmluZ2VyVXAoZXZlbnQpCit7
CisgICAgaWYgKCF3aW5kb3cubGF5b3V0VGVzdENvbnRyb2xsZXIpCisgICAgICAgIGRlYnVnKCdt
b3ZlZDogJyArIGV2ZW50LmN1cnJlbnRUYXJnZXQuc2Nyb2xsVG9wICsgJywgJyArIGV2ZW50LmN1
cnJlbnRUYXJnZXQuc2Nyb2xsTGVmdCk7CisgICAgcmV0dXJuIHRydWU7ICAvLyBXYW50IHRoZSBk
ZWZhdWx0IGJlaGF2aW91ci4KK30KKworZnVuY3Rpb24gZmlyc3RUb3VjaERyYWdTZXF1ZW5jZSgp
Cit7CisgICAgZGVidWcoImZpcnN0IGdlc3R1cmUiKTsKKyAgICBldmVudFNlbmRlci5jbGVhclRv
dWNoUG9pbnRzKCk7CisgICAgZXZlbnRTZW5kZXIuYWRkVG91Y2hQb2ludCgxMiwgMTUwKTsKKyAg
ICBldmVudFNlbmRlci50b3VjaFN0YXJ0KCk7CisKKyAgICAvLyBTY3JvbGwgdGhlIGRpdiB0byB0
aGUgbGVmdC4KKyAgICBldmVudFNlbmRlci51cGRhdGVUb3VjaFBvaW50KDAsIDEyLCAxMCk7Cisg
ICAgZXZlbnRTZW5kZXIudG91Y2hNb3ZlKCk7CisKKyAgICBldmVudFNlbmRlci5yZWxlYXNlVG91
Y2hQb2ludCgwKTsKKyAgICBldmVudFNlbmRlci50b3VjaEVuZCgpOworCisgICAgLy8gV2FpdCBm
b3IgbGF5b3V0LgorICAgIGNoZWNrU2Nyb2xsT2Zmc2V0KCk7Cit9CisKK2Z1bmN0aW9uIHNlY29u
ZFRvdWNoRHJhZ1NlcXVlbmNlKCkKK3sKKyAgICBkZWJ1Zygic2Vjb25kIGdlc3R1cmUiKTsKKyAg
ICBldmVudFNlbmRlci5jbGVhclRvdWNoUG9pbnRzKCk7CisgICAgZXZlbnRTZW5kZXIuYWRkVG91
Y2hQb2ludCgxMiwgMTAwKTsKKyAgICBldmVudFNlbmRlci50b3VjaFN0YXJ0KCk7CisKKyAgICAv
LyBTY3JvbGwgdGhlIHJlY3RhbmdsZSBkb3duLgorICAgIGV2ZW50U2VuZGVyLnVwZGF0ZVRvdWNo
UG9pbnQoMCwgMTIsIDQwKTsKKyAgICBldmVudFNlbmRlci50b3VjaE1vdmUoKTsKKworICAgIGV2
ZW50U2VuZGVyLnJlbGVhc2VUb3VjaFBvaW50KDApOworICAgIGV2ZW50U2VuZGVyLnRvdWNoRW5k
KCk7CisKKyAgICAvLyBXYWl0IGZvciBsYXlvdXQuCisgICAgY2hlY2tTY3JvbGxPZmZzZXQoKTsK
K30KKworZnVuY3Rpb24gZXhpdElmTmVjZXNzYXJ5KCkKK3sKKyAgICBkZWJ1ZygnR2VzdHVyZSBt
YW5hZ2VyIG5vdCBpbXBsZW1lbnRlZCBvbiB0aGlzIHBsYXRmb3JtIG9yIGJyb2tlbicpOworICAg
IHN1Y2Nlc3NmdWxseVBhcnNlZCA9IHRydWU7CisgICAgaXNTdWNjZXNzZnVsbHlQYXJzZWQoKTsK
KyAgICBpZiAod2luZG93LmxheW91dFRlc3RDb250cm9sbGVyKQorICAgICAgICBsYXlvdXRUZXN0
Q29udHJvbGxlci5ub3RpZnlEb25lKCk7Cit9CisKK2lmICh3aW5kb3cubGF5b3V0VGVzdENvbnRy
b2xsZXIpCisgICAgbGF5b3V0VGVzdENvbnRyb2xsZXIud2FpdFVudGlsRG9uZSgpOworCitmdW5j
dGlvbiBydW5UZXN0KCkKK3sKKyAgICB0b3VjaHRhcmdldCA9IGRvY3VtZW50LmdldEVsZW1lbnRC
eUlkKCd0b3VjaHRhcmdldCcpOworCisgICAgaWYgKHdpbmRvdy5ldmVudFNlbmRlcikgeworICAg
ICAgICBkZXNjcmlwdGlvbignVGhpcyB0ZXN0cyBnZXN0dXJlIHNjcm9sbGluZyBpbiBpZnJhbWVz
LiAnICsKKyAgICAgICAgICAgICdSZWQtZ3JlZW4gc3RyaXAgaXMgc2Nyb2xsZWQgb24gcGFzcy4n
KTsKKworICAgICAgICBpZiAoZXZlbnRTZW5kZXIuY2xlYXJUb3VjaFBvaW50cykKKyAgICAgICAg
ICAgIGZpcnN0VG91Y2hEcmFnU2VxdWVuY2UoKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAg
ZXhpdElmTmVjZXNzYXJ5KCk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgZGVidWcoIlRoaXMgdGVz
dCByZXF1aXJlcyBEdW1wUmVuZGVyVHJlZS4gIFRvdWNoLXNjcm9sbCB0aGUgcmVkL2dyZWVuIHN0
cmlwLiIpOworICAgIH0KK30KKzwvc2NyaXB0PgorPC9ib2R5PgorPC9odG1sPgpkaWZmIC0tZ2l0
IGEvTGF5b3V0VGVzdHMvZmFzdC9ldmVudHMvdG91Y2gvZ2VzdHVyZS90b3VjaC1nZXN0dXJlLXNj
cm9sbC1wYWdlLWV4cGVjdGVkLnR4dCBiL0xheW91dFRlc3RzL2Zhc3QvZXZlbnRzL3RvdWNoL2dl
c3R1cmUvdG91Y2gtZ2VzdHVyZS1zY3JvbGwtcGFnZS1leHBlY3RlZC50eHQKbmV3IGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4u
NGY5OTY1Yjg3YTA5N2E3OGM1MWM5YTI5YWE2YWZiNzM2MzNhNGY1YQotLS0gL2Rldi9udWxsCisr
KyBiL0xheW91dFRlc3RzL2Zhc3QvZXZlbnRzL3RvdWNoL2dlc3R1cmUvdG91Y2gtZ2VzdHVyZS1z
Y3JvbGwtcGFnZS1leHBlY3RlZC50eHQKQEAgLTAsMCArMSwxNSBAQAorVGhpcyB0ZXN0cyBzY3Jv
bGwgZ2VzdHVyZXMgZnJvbSB0b3VjaCBldmVudHMgb24gdGhlIHdob2xlIHBhZ2UuIFNxdWFyZSBp
cyAobW9zdGx5KSBncmVlbiBvbiBwYXNzCisKK09uIHN1Y2Nlc3MsIHlvdSB3aWxsIHNlZSBhIHNl
cmllcyBvZiAiUEFTUyIgbWVzc2FnZXMsIGZvbGxvd2VkIGJ5ICJURVNUIENPTVBMRVRFIi4KKwor
CitmaXJzdCBnZXN0dXJlCitQQVNTIGRvY3VtZW50LmJvZHkuc2Nyb2xsVG9wIGlzIDcwCitQQVNT
IGRvY3VtZW50LmJvZHkuc2Nyb2xsTGVmdCBpcyAwCitzZWNvbmQgZ2VzdHVyZQorUEFTUyBkb2N1
bWVudC5ib2R5LnNjcm9sbFRvcCBpcyAxMzAKK1BBU1MgZG9jdW1lbnQuYm9keS5zY3JvbGxMZWZ0
IGlzIDAKK1BBU1Mgc3VjY2Vzc2Z1bGx5UGFyc2VkIGlzIHRydWUKKworVEVTVCBDT01QTEVURQor
CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9mYXN0L2V2ZW50cy90b3VjaC9nZXN0dXJlL3RvdWNo
LWdlc3R1cmUtc2Nyb2xsLXBhZ2UuaHRtbCBiL0xheW91dFRlc3RzL2Zhc3QvZXZlbnRzL3RvdWNo
L2dlc3R1cmUvdG91Y2gtZ2VzdHVyZS1zY3JvbGwtcGFnZS5odG1sCm5ldyBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjE1ODg5
ZGQwMTJmNmUyNGYyMzZlMDY3OGU2NTk4ZTM3NjEyMjI3NDEKLS0tIC9kZXYvbnVsbAorKysgYi9M
YXlvdXRUZXN0cy9mYXN0L2V2ZW50cy90b3VjaC9nZXN0dXJlL3RvdWNoLWdlc3R1cmUtc2Nyb2xs
LXBhZ2UuaHRtbApAQCAtMCwwICsxLDE3MCBAQAorPCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9J
RVRGLy9EVEQgSFRNTC8vRU4iPgorPGh0bWw+Cis8aGVhZD4KKzxsaW5rIHJlbD0ic3R5bGVzaGVl
dCIgaHJlZj0iLi4vLi4vLi4vanMvcmVzb3VyY2VzL2pzLXRlc3Qtc3R5bGUuY3NzIj4KKzxzY3Jp
cHQgc3JjPSIuLi8uLi8uLi9qcy9yZXNvdXJjZXMvanMtdGVzdC1wcmUuanMiPjwvc2NyaXB0Pgor
PHNjcmlwdCBzcmM9Ii4uLy4uLy4uL2pzL3Jlc291cmNlcy9qcy10ZXN0LXBvc3QtZnVuY3Rpb24u
anMiPjwvc2NyaXB0PgorPHN0eWxlIHR5cGU9InRleHQvY3NzIj4KKyNncmVlbmJveCB7CisgIHdp
ZHRoOiAxMDBweDsKKyAgaGVpZ2h0OiAxMDBweDsKKyAgYmFja2dyb3VuZDogZ3JlZW47CisgIHBh
ZGRpbmc6IDBweDsKKyAgbWFyZ2luOiAwcHg7Cit9CisjcmVkYm94IHsKKyAgd2lkdGg6IDEwMHB4
OworICBoZWlnaHQ6IDEwMHB4OworICBiYWNrZ3JvdW5kOiByZWQ7CisgIHBhZGRpbmc6IDBweDsK
KyAgbWFyZ2luOiAwcHg7Cit9CisKK3RkIHsKKyAgcGFkZGluZzogMHB4OworfQorPC9zdHlsZT4K
KzwvaGVhZD4KKzxib2R5IHN0eWxlPSJtYXJnaW46MCIgb25sb2FkPSJydW5UZXN0KCk7Ij4KKwor
PHRhYmxlIGlkPSJ0YWJsZV90b19maWxsIj4KKyAgICA8dHI+PHRkPjxkaXYgaWQ9ImdyZWVuYm94
Ij48L2Rpdj48L3RkPjwvdHI+CisgICAgPHRyPjx0ZD48ZGl2IGlkPSJyZWRib3giPjwvZGl2Pjwv
dGQ+PC90cj4KKzwvdGFibGU+CisKKzxwIGlkPSJkZXNjcmlwdGlvbiI+PC9wPgorPGRpdiBpZD0i
Y29uc29sZSI+PC9kaXY+Cis8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CisKK3ZhciBt
b3ZpbmdkaXY7Cit2YXIgZXhwZWN0ZWRTY3JvbGxzVG90YWwgPSAyOwordmFyIHNjcm9sbHNPY2N1
cnJlZCA9IDA7Cit2YXIgc2Nyb2xsQW1vdW50WCA9IFsnMCcsICcwJ107Cit2YXIgc2Nyb2xsQW1v
dW50WSA9IFsnNzAnLCAnMTMwJ107CisKKy8vIEFsd2F5cyBjb25zdHJ1Y3QgYSBwYWdlIGxhcmdl
ciB0aGFuIHRoZSB2ZXJ0aWNhbCBoZWlnaHQgb2YgdGhlIHdpbmRvdy4KK2Z1bmN0aW9uIGJ1aWxk
UGFnZSgpCit7CisgICAgdmFyIHRhYmxlID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3RhYmxl
X3RvX2ZpbGwnKTsKKyAgICB2YXIgdGFyZ2V0SGVpZ2h0ID0gZG9jdW1lbnQuaGVpZ2h0OworICAg
IHZhciBjZWxsUGFpckhlaWdodCA9IHRhYmxlLm9mZnNldEhlaWdodDsKKyAgICB2YXIgbnVtYmVy
T2ZSZXBzID0gdGFyZ2V0SGVpZ2h0IC8gY2VsbFBhaXJIZWlnaHQgKiAyOworICAgIHZhciBpOwor
ICAgIGZvciAoaSA9IDA7IGkgPCBudW1iZXJPZlJlcHM7IGkrKykgeworICAgICAgICB2YXIgcCA9
IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CisgICAgICAgIHAuaW5uZXJIVE1MID0gJzx0
ZD48ZGl2IGlkPSJncmVlbmJveCI+PC9kaXY+PC90ZD4nOworICAgICAgICB0YWJsZS5hcHBlbmRD
aGlsZChwKTsKKyAgICAgICAgdmFyIHAgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwor
ICAgICAgICBwLmlubmVySFRNTCA9ICc8dGQ+PGRpdiBpZD0icmVkYm94Ij48L2Rpdj48L3RkPic7
CisgICAgICAgIHRhYmxlLmFwcGVuZENoaWxkKHApOworICAgIH0KKworfQorCitmdW5jdGlvbiBj
aGVja1Njcm9sbE9mZnNldCgpCit7CisgICAgaWYgKHdpbmRvdy5ldmVudFNlbmRlcikgeworICAg
ICAgICBzaG91bGRCZSgnZG9jdW1lbnQuYm9keS5zY3JvbGxUb3AnLCBzY3JvbGxBbW91bnRZW3Nj
cm9sbHNPY2N1cnJlZF0pOworICAgICAgICBzaG91bGRCZSgnZG9jdW1lbnQuYm9keS5zY3JvbGxM
ZWZ0Jywgc2Nyb2xsQW1vdW50WFtzY3JvbGxzT2NjdXJyZWRdKTsKKyAgICAgICAgc2Nyb2xsc09j
Y3VycmVkKys7CisgICAgfQorCisgICAgaWYgKHNjcm9sbHNPY2N1cnJlZCA9PSBleHBlY3RlZFNj
cm9sbHNUb3RhbCkgeworICAgICAgICAvLyBJZiB3ZSd2ZSBnb3QgaGVyZSwgd2UndmUgcGFzc2Vk
LgorICAgICAgICBzdWNjZXNzZnVsbHlQYXJzZWQgPSB0cnVlOworICAgICAgICBpc1N1Y2Nlc3Nm
dWxseVBhcnNlZCgpOworICAgICAgICBpZiAod2luZG93LmxheW91dFRlc3RDb250cm9sbGVyKQor
ICAgICAgICAgICAgbGF5b3V0VGVzdENvbnRyb2xsZXIubm90aWZ5RG9uZSgpOworICAgIH0gZWxz
ZSB7CisgICAgICAgIHNlY29uZFRvdWNoRHJhZ1NlcXVlbmNlKCk7CisgICAgfQorfQorCitmdW5j
dGlvbiBmaW5nZXJVcChldmVudCkKK3sKKyAgICBpZiAoIXdpbmRvdy5sYXlvdXRUZXN0Q29udHJv
bGxlcikKKyAgICAgICAgZGVidWcoJ21vdmVkOiAnICsgZXZlbnQuY3VycmVudFRhcmdldC5zY3Jv
bGxUb3AgKyAnLCAnICsgZXZlbnQuY3VycmVudFRhcmdldC5zY3JvbGxMZWZ0KTsKKyAgICByZXR1
cm4gdHJ1ZTsgIC8vIFdhbnQgdGhlIGRlZmF1bHQgYmVoYXZpb3VyLgorfQorCitmdW5jdGlvbiBm
aXJzdFRvdWNoRHJhZ1NlcXVlbmNlKCkKK3sKKyAgICBkZWJ1ZygiZmlyc3QgZ2VzdHVyZSIpOwor
ICAgIGV2ZW50U2VuZGVyLmNsZWFyVG91Y2hQb2ludHMoKTsKKyAgICBldmVudFNlbmRlci5hZGRU
b3VjaFBvaW50KDEwLCAxMDIpOworICAgIGV2ZW50U2VuZGVyLnRvdWNoU3RhcnQoKTsKKworICAg
IC8vIFNjcm9sbCB0aGUgZGl2IHRvIHRoZSBsZWZ0LgorICAgIGV2ZW50U2VuZGVyLnVwZGF0ZVRv
dWNoUG9pbnQoMCwgMTAsIDcyKTsKKyAgICBldmVudFNlbmRlci50b3VjaE1vdmUoKTsKKworICAg
IGV2ZW50U2VuZGVyLnVwZGF0ZVRvdWNoUG9pbnQoMCwgMTAsIDMyKTsKKyAgICBldmVudFNlbmRl
ci50b3VjaE1vdmUoKTsKKworICAgIGV2ZW50U2VuZGVyLnJlbGVhc2VUb3VjaFBvaW50KDApOwor
ICAgIGV2ZW50U2VuZGVyLnRvdWNoRW5kKCk7CisKKyAgICAvLyBXYWl0IGZvciBsYXlvdXQuCisg
ICAgY2hlY2tTY3JvbGxPZmZzZXQoKTsKK30KKworZnVuY3Rpb24gc2Vjb25kVG91Y2hEcmFnU2Vx
dWVuY2UoKQoreworICAgIGRlYnVnKCJzZWNvbmQgZ2VzdHVyZSIpOworICAgIGV2ZW50U2VuZGVy
LmNsZWFyVG91Y2hQb2ludHMoKTsKKyAgICBldmVudFNlbmRlci5hZGRUb3VjaFBvaW50KDEyLCA3
MCk7CisgICAgZXZlbnRTZW5kZXIudG91Y2hTdGFydCgpOworCisgICAgLy8gU2Nyb2xsIHRoZSBy
ZWN0YW5nbGUgZG93bi4KKyAgICBldmVudFNlbmRlci51cGRhdGVUb3VjaFBvaW50KDAsIDEyLCA0
MCk7CisgICAgZXZlbnRTZW5kZXIudG91Y2hNb3ZlKCk7CisKKyAgICAvLyBTY3JvbGwgdGhlIHJl
Y3RhbmdsZSBkb3duLgorICAgIGV2ZW50U2VuZGVyLnVwZGF0ZVRvdWNoUG9pbnQoMCwgMTIsIDEw
KTsKKyAgICBldmVudFNlbmRlci50b3VjaE1vdmUoKTsKKworICAgIGV2ZW50U2VuZGVyLnJlbGVh
c2VUb3VjaFBvaW50KDApOworICAgIGV2ZW50U2VuZGVyLnRvdWNoRW5kKCk7CisKKyAgICAvLyBX
YWl0IGZvciBsYXlvdXQuCisgICAgY2hlY2tTY3JvbGxPZmZzZXQoKTsKK30KKworZnVuY3Rpb24g
ZXhpdElmTmVjZXNzYXJ5KCkKK3sKKyAgICBkZWJ1ZygnR2VzdHVyZSBtYW5hZ2VyIG5vdCBpbXBs
ZW1lbnRlZCBvbiB0aGlzIHBsYXRmb3JtIG9yIGJyb2tlbicpOworICAgIHN1Y2Nlc3NmdWxseVBh
cnNlZCA9IHRydWU7CisgICAgaXNTdWNjZXNzZnVsbHlQYXJzZWQoKTsKKyAgICBpZiAod2luZG93
LmxheW91dFRlc3RDb250cm9sbGVyKQorICAgICAgICBsYXlvdXRUZXN0Q29udHJvbGxlci5ub3Rp
ZnlEb25lKCk7Cit9CisKK2lmICh3aW5kb3cubGF5b3V0VGVzdENvbnRyb2xsZXIpCisgICAgbGF5
b3V0VGVzdENvbnRyb2xsZXIud2FpdFVudGlsRG9uZSgpOworCitmdW5jdGlvbiBydW5UZXN0KCkK
K3sKKyAgICBidWlsZFBhZ2UoKTsKKworICAgIC8vIEZJWE1FOiB0YXJnZXQgdXNpbmcgcGxhdGZv
cm0gZ2VzdHVyZSBldmVudAorICAgIHZhciBtb3ZpbmdkaXYgPSBkb2N1bWVudC5nZXRFbGVtZW50
QnlJZCgnbW92aW5nYm94Jyk7CisKKyAgICBpZiAod2luZG93LmV2ZW50U2VuZGVyKSB7CisgICAg
ICAgIGRlc2NyaXB0aW9uKCdUaGlzIHRlc3RzIHNjcm9sbCBnZXN0dXJlcyBmcm9tIHRvdWNoIGV2
ZW50cyBvbiB0aGUgd2hvbGUgcGFnZS4gJyArCisgICAgICAgICAgICAnU3F1YXJlIGlzIChtb3N0
bHkpIGdyZWVuIG9uIHBhc3MnKTsKKworICAgICAgICBpZiAoZXZlbnRTZW5kZXIuY2xlYXJUb3Vj
aFBvaW50cykKKyAgICAgICAgICAgIGZpcnN0VG91Y2hEcmFnU2VxdWVuY2UoKTsKKyAgICAgICAg
ZWxzZQorICAgICAgICAgICAgZXhpdElmTmVjZXNzYXJ5KCk7CisgICAgfSBlbHNlIHsKKyAgICAg
ICAgZGVidWcoIlRoaXMgdGVzdCByZXF1aXJlcyBEdW1wUmVuZGVyVHJlZS4gIFNjcm9sbCB0aGUg
cGFnZWcuIik7CisgICAgICAgIG1vdmluZ2Rpdi5hZGRFdmVudExpc3RlbmVyKCd0b3VjaGVuZCcs
IGZpbmdlclVwLCBmYWxzZSk7CisgICAgfQorfQorPC9zY3JpcHQ+CisKKworCis8L2JvZHk+Cis8
L2h0bWw+CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9mYXN0L2V2ZW50cy90b3VjaC9nZXN0dXJl
L3RvdWNoLWdlc3R1cmUtc2Nyb2xsLXNoeS10YXJnZXQtZXhwZWN0ZWQudHh0IGIvTGF5b3V0VGVz
dHMvZmFzdC9ldmVudHMvdG91Y2gvZ2VzdHVyZS90b3VjaC1nZXN0dXJlLXNjcm9sbC1zaHktdGFy
Z2V0LWV4cGVjdGVkLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4zYTBjNjE3ZDBmNGI0OTA5MDNkZTRlYmU4NDcw
NTEwNjg5ZThhNmMwCi0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvZmFzdC9ldmVudHMv
dG91Y2gvZ2VzdHVyZS90b3VjaC1nZXN0dXJlLXNjcm9sbC1zaHktdGFyZ2V0LWV4cGVjdGVkLnR4
dApAQCAtMCwwICsxLDE0IEBACitUaGlzIHRlc3RzIGdlc3R1cmUtc2Nyb2xsIGNhcHR1cmUgYW5k
IGRpdiBkZWxlY3Rpb24gU3F1YXJlIGlzIChtb3N0bHkpIGdyZWVuIG9uIHBhc3MKKworT24gc3Vj
Y2VzcywgeW91IHdpbGwgc2VlIGEgc2VyaWVzIG9mICJQQVNTIiBtZXNzYWdlcywgZm9sbG93ZWQg
YnkgIlRFU1QgQ09NUExFVEUiLgorCisKK2ZpcnN0IGdlc3R1cmUKK1BBU1MgbW92aW5nZGl2LnNj
cm9sbFRvcCBpcyA2MgorUEFTUyBtb3ZpbmdkaXYuc2Nyb2xsTGVmdCBpcyA2Mworc2Vjb25kIGdl
c3R1cmUKK3JlY2VpdmVkIGVsZW1lbnQgcmVtb3Zpbmcga2V5cHJlc3MKK1BBU1Mgc3VjY2Vzc2Z1
bGx5UGFyc2VkIGlzIHRydWUKKworVEVTVCBDT01QTEVURQorCmRpZmYgLS1naXQgYS9MYXlvdXRU
ZXN0cy9mYXN0L2V2ZW50cy90b3VjaC9nZXN0dXJlL3RvdWNoLWdlc3R1cmUtc2Nyb2xsLXNoeS10
YXJnZXQuaHRtbCBiL0xheW91dFRlc3RzL2Zhc3QvZXZlbnRzL3RvdWNoL2dlc3R1cmUvdG91Y2gt
Z2VzdHVyZS1zY3JvbGwtc2h5LXRhcmdldC5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjQzNzUwZjFjMTQzM2U0
NjRlZTAwMDgyMjkxYWM1ODk0NWM2OTllNDMKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0
cy9mYXN0L2V2ZW50cy90b3VjaC9nZXN0dXJlL3RvdWNoLWdlc3R1cmUtc2Nyb2xsLXNoeS10YXJn
ZXQuaHRtbApAQCAtMCwwICsxLDIwNSBAQAorPCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9JRVRG
Ly9EVEQgSFRNTC8vRU4iPgorPGh0bWw+Cis8aGVhZD4KKzxsaW5rIHJlbD0ic3R5bGVzaGVldCIg
aHJlZj0iLi4vLi4vLi4vanMvcmVzb3VyY2VzL2pzLXRlc3Qtc3R5bGUuY3NzIj4KKzxzY3JpcHQg
c3JjPSIuLi8uLi8uLi9qcy9yZXNvdXJjZXMvanMtdGVzdC1wcmUuanMiPjwvc2NyaXB0PgorPHNj
cmlwdCBzcmM9Ii4uLy4uLy4uL2pzL3Jlc291cmNlcy9qcy10ZXN0LXBvc3QtZnVuY3Rpb24uanMi
Pjwvc2NyaXB0PgorPHN0eWxlIHR5cGU9InRleHQvY3NzIj4KKyN0b3VjaHRhcmdldCB7CisgIHdp
ZHRoOiAxMDBweDsKKyAgaGVpZ2h0OiAxMDBweDsKKyAgcG9zaXRpb246IGFic29sdXRlOworICBi
YWNrZ3JvdW5kOiB3aGl0ZTsKKyAgdG9wOiAxMDBweDsKKyAgbGVmdDogMTAwcHg7Cit9CisKKyNt
b3Zpbmdib3ggeworICB3aWR0aDogMTAwJTsKKyAgaGVpZ2h0OiAxMDAlOworICBwb3NpdGlvbjog
YWJzb2x1dGU7CisgIHdvcmQtd3JhcDogYnJlYWstd29yZDsKKyAgb3ZlcmZsb3cteTogc2Nyb2xs
OworICBvdmVyZmxvdy14OiBzY3JvbGw7CisgIGRpc3BsYXk6IGJsb2NrOworfQorCisuZ3JlZW5i
b3ggeworICB3aWR0aDogMTAwcHg7CisgIGhlaWdodDogMTAwcHg7CisgIGJhY2tncm91bmQ6IGdy
ZWVuOworICBwYWRkaW5nOiAwcHg7CisgIG1hcmdpbjogMHB4OworfQorCisucmVkYm94IHsKKyAg
d2lkdGg6IDEwMHB4OworICBoZWlnaHQ6IDEwMHB4OworICBiYWNrZ3JvdW5kOiByZWQ7CisgIHBh
ZGRpbmc6IDBweDsKKyAgbWFyZ2luOiAwcHg7Cit9CisKK3RkIHsKKyAgcGFkZGluZzogMHB4Owor
fQorPC9zdHlsZT4KKzwvaGVhZD4KKzxib2R5IHN0eWxlPSJtYXJnaW46MCIgb25sb2FkPSJydW5U
ZXN0KCk7Ij4KKzxkaXYgaWQ9InRvdWNodGFyZ2V0Ij4KKyAgPGRpdiBpZD0ibW92aW5nYm94Ij4K
KyAgICA8dGFibGUgYm9yZGVyPSIwIiBjZWxsc3BhY2luZz0iMHB4IiBpZD0idGFibGUiPgorICAg
ICAgPHRyPgorICAgICAgICA8dGQ+PGRpdiBjbGFzcz0icmVkYm94IiBpZD0icmVkYm94Ij48L2Rp
dj48L3RkPgorICAgICAgICA8dGQ+PGRpdiBjbGFzcz0iZ3JlZW5ib3giIGlkPSJncmVlbmJveF8x
Ij48L2Rpdj48L3RkPgorICAgICAgPC90cj4KKyAgICAgIDx0cj4KKyAgICAgICAgPHRkPjxkaXYg
Y2xhc3M9ImdyZWVuYm94IiBpZD0iZ3JlZW5ib3hfMiI+PC9kaXY+PC90ZD4KKyAgICAgICAgPHRk
PjxkaXYgY2xhc3M9ImdyZWVuYm94IiBpZD0iZ3JlZW5ib3hfMyI+PC9kaXY+PC90ZD4KKyAgICAg
IDwvdHI+CisgICAgPC90YWJsZT4KKyAgPC9kaXY+Cis8L2Rpdj4KKworPHAgaWQ9ImRlc2NyaXB0
aW9uIj48L3A+Cis8ZGl2IGlkPSJjb25zb2xlIj48L2Rpdj4KKzxzY3JpcHQgdHlwZT0idGV4dC9q
YXZhc2NyaXB0Ij4KKwordmFyIG1vdmluZ2RpdjsKK3ZhciBleHBlY3RlZFNjcm9sbHNUb3RhbCA9
IDI7Cit2YXIgc2Nyb2xsc09jY3VycmVkID0gMDsKK3ZhciBzY3JvbGxBbW91bnRYID0gWyc2Mycs
ICc5MCddOwordmFyIHNjcm9sbEFtb3VudFkgPSBbJzYyJywgJzk1J107CisKK2RvY3VtZW50Lm9u
a2V5cHJlc3MgPSBmdW5jdGlvbigpCit7CisgICAgZGVidWcoJ3JlY2VpdmVkIGVsZW1lbnQgcmVt
b3Zpbmcga2V5cHJlc3MnKTsKKyAgICB2YXIgcGFyZW50ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5
SWQoJ3RvdWNodGFyZ2V0Jyk7CisgICAgbW92aW5nZGl2ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5
SWQoJ21vdmluZ2JveCcpOworICAgIHBhcmVudC5yZW1vdmVDaGlsZChtb3ZpbmdkaXYpOworICAg
IHJldHVybiBmYWxzZTsKK30KKworZnVuY3Rpb24gbG9nRmlyc3RUb3VjaFBvaW50KGV2ZW50KQor
eworICAgIGRlYnVnKCdjbGllbnQgaWQnICsgZXZlbnQudGFyZ2V0LmlkKTsKKyAgICBkZWJ1Zygn
Y2xpZW50WDogJyArIGV2ZW50LnRvdWNoZXNbMF0uY2xpZW50WCArICcgY2xpZW50WTogJyArIGV2
ZW50LnRvdWNoZXNbMF0uY2xpZW50WSk7Cit9CisKK2Z1bmN0aW9uIGNoZWNrU2Nyb2xsT2Zmc2V0
KCkKK3sKKyAgICBtb3ZpbmdkaXYgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbW92aW5nYm94
Jyk7CisgICAgaWYgKHdpbmRvdy5ldmVudFNlbmRlcikgeworICAgICAgICBzaG91bGRCZSgnbW92
aW5nZGl2LnNjcm9sbFRvcCcsIHNjcm9sbEFtb3VudFlbc2Nyb2xsc09jY3VycmVkXSk7CisgICAg
ICAgIHNob3VsZEJlKCdtb3ZpbmdkaXYuc2Nyb2xsTGVmdCcsIHNjcm9sbEFtb3VudFhbc2Nyb2xs
c09jY3VycmVkXSk7CisgICAgICAgIHNjcm9sbHNPY2N1cnJlZCsrOworICAgIH0KKworICAgIGlm
IChzY3JvbGxzT2NjdXJyZWQgPT0gZXhwZWN0ZWRTY3JvbGxzVG90YWwpIHsKKyAgICAgICAgLy8g
SWYgd2UndmUgZ290IGhlcmUsIHdlJ3ZlIHBhc3NlZC4KKyAgICB9IGVsc2UgeworICAgICAgICBz
ZWNvbmRUb3VjaERyYWdTZXF1ZW5jZSgpOworICAgIH0KK30KKworZnVuY3Rpb24gZmluZ2VyVXAo
ZXZlbnQpCit7CisgICAgaWYgKCF3aW5kb3cubGF5b3V0VGVzdENvbnRyb2xsZXIpIHsKKyAgICAg
ICAgZGVidWcoJ21vdmVkOiAnICsgZXZlbnQuY3VycmVudFRhcmdldC5zY3JvbGxUb3AgKyAnLCAn
ICsgZXZlbnQuY3VycmVudFRhcmdldC5zY3JvbGxMZWZ0KTsKKyAgICAgICAgZGVidWcoJ3Rhcmdl
dDogJyArIGV2ZW50LmN1cnJlbnRUYXJnZXQuaWQpOworICAgIH0KKyAgICByZXR1cm4gdHJ1ZTsg
IC8vIFdhbnQgdGhlIGRlZmF1bHQgYmVoYXZpb3VyLgorfQorCitmdW5jdGlvbiBmaXJzdFRvdWNo
RHJhZ1NlcXVlbmNlKCkKK3sKKyAgICBkZWJ1ZygiZmlyc3QgZ2VzdHVyZSIpOworICAgIGV2ZW50
U2VuZGVyLmNsZWFyVG91Y2hQb2ludHMoKTsKKyAgICBldmVudFNlbmRlci5hZGRUb3VjaFBvaW50
KDEyMSwgMTI5KTsKKyAgICBldmVudFNlbmRlci50b3VjaFN0YXJ0KCk7CisgICAgZXZlbnRTZW5k
ZXIudXBkYXRlVG91Y2hQb2ludCgwLCAxMDEsIDEwMSk7CisgICAgZXZlbnRTZW5kZXIudG91Y2hT
dGFydCgpOworCisgICAgLy8gU2Nyb2xsIHRoZSBkaXYgdG8gdGhlIGxlZnQgcGFzdCB0aGUgZWRn
ZS4KKyAgICBldmVudFNlbmRlci51cGRhdGVUb3VjaFBvaW50KDAsIDg3LCA5Nyk7CisgICAgZXZl
bnRTZW5kZXIudG91Y2hNb3ZlKCk7CisKKyAgICBldmVudFNlbmRlci51cGRhdGVUb3VjaFBvaW50
KDAsIDU4LCA2Nyk7CisgICAgZXZlbnRTZW5kZXIudG91Y2hNb3ZlKCk7CisKKyAgICBldmVudFNl
bmRlci5yZWxlYXNlVG91Y2hQb2ludCgwKTsKKyAgICBldmVudFNlbmRlci50b3VjaEVuZCgpOwor
CisgICAgLy8gV2FpdCBmb3IgbGF5b3V0LgorICAgIGNoZWNrU2Nyb2xsT2Zmc2V0KCk7Cit9CisK
Ky8vIEZJWE1FOiBtb2RpZnkgdGhpcyBvbmUgdG8gdG9zcyBvdXRzaWRlLgorZnVuY3Rpb24gc2Vj
b25kVG91Y2hEcmFnU2VxdWVuY2UoKQoreworICAgIG1vdmluZ2Rpdi5zY3JvbGxUb3AgPSAwOwor
ICAgIG1vdmluZ2Rpdi5zY3JvbGxMZWZ0ID0gMDsKKworICAgIGRlYnVnKCJzZWNvbmQgZ2VzdHVy
ZSIpOworICAgIGV2ZW50U2VuZGVyLmNsZWFyVG91Y2hQb2ludHMoKTsKKyAgICBldmVudFNlbmRl
ci5hZGRUb3VjaFBvaW50KDEyMSwgMTI5KTsKKyAgICBldmVudFNlbmRlci50b3VjaFN0YXJ0KCk7
CisgICAgZXZlbnRTZW5kZXIudXBkYXRlVG91Y2hQb2ludCgwLCAxMDEsIDEwMSk7CisgICAgZXZl
bnRTZW5kZXIudG91Y2hTdGFydCgpOworCisgICAgLy8gU2Nyb2xsIHRoZSBkaXYgdG8gdGhlIGxl
ZnQgcGFzdCB0aGUgZWRnZS4KKyAgICBldmVudFNlbmRlci51cGRhdGVUb3VjaFBvaW50KDAsIDg3
LCA5Nyk7CisgICAgZXZlbnRTZW5kZXIudG91Y2hNb3ZlKCk7CisKKyAgICAvLyBTZW5kIGEga2V5
CisgICAgLy8gRGVsZXRlIHRoZSBET00gdGFyZ2V0LgorICAgIGV2ZW50U2VuZGVyLmtleURvd24o
ImQiLCBbXSk7CisKKyAgICBldmVudFNlbmRlci51cGRhdGVUb3VjaFBvaW50KDAsIDU4LCA2Nyk7
CisgICAgZXZlbnRTZW5kZXIudG91Y2hNb3ZlKCk7CisKKyAgICBldmVudFNlbmRlci5yZWxlYXNl
VG91Y2hQb2ludCgwKTsKKyAgICBldmVudFNlbmRlci50b3VjaEVuZCgpOworCisgICAgLy8gQnkg
Z2V0dGluZyBoZXJlIHN1Y2Nlc3NmdWxseSwgdGhlIHRlc3QgZGVtb25zdHJhdGVzIHRoYXQgaXQK
KyAgICAvLyBkb2VzIG5vdCBjcmFzaCB3aGVuIHRoZSB0YXJnZXQgaXMgcmVtb3ZlZC4KKyAgICBz
dWNjZXNzZnVsbHlQYXJzZWQgPSB0cnVlOworICAgIGlzU3VjY2Vzc2Z1bGx5UGFyc2VkKCk7Cisg
ICAgaWYgKHdpbmRvdy5sYXlvdXRUZXN0Q29udHJvbGxlcikKKyAgICAgICAgbGF5b3V0VGVzdENv
bnRyb2xsZXIubm90aWZ5RG9uZSgpOworfQorCitmdW5jdGlvbiBleGl0SWZOZWNlc3NhcnkoKQor
eworICAgIGRlYnVnKCdHZXN0dXJlIG1hbmFnZXIgbm90IGltcGxlbWVudGVkIG9uIHRoaXMgcGxh
dGZvcm0gb3IgYnJva2VuJyk7CisgICAgc3VjY2Vzc2Z1bGx5UGFyc2VkID0gdHJ1ZTsKKyAgICBp
c1N1Y2Nlc3NmdWxseVBhcnNlZCgpOworICAgIGlmICh3aW5kb3cubGF5b3V0VGVzdENvbnRyb2xs
ZXIpCisgICAgICAgIGxheW91dFRlc3RDb250cm9sbGVyLm5vdGlmeURvbmUoKTsKK30KKworaWYg
KHdpbmRvdy5sYXlvdXRUZXN0Q29udHJvbGxlcikKKyAgICBsYXlvdXRUZXN0Q29udHJvbGxlci53
YWl0VW50aWxEb25lKCk7CisKK2Z1bmN0aW9uIHJ1blRlc3QoKQoreworICAgIGlmICh3aW5kb3cu
ZXZlbnRTZW5kZXIpIHsKKyAgICAgICAgZGVzY3JpcHRpb24oJ1RoaXMgdGVzdHMgZ2VzdHVyZS1z
Y3JvbGwgY2FwdHVyZSBhbmQgZGl2IGRlbGVjdGlvbiAnICsgCisgICAgICAgICAgICAnU3F1YXJl
IGlzIChtb3N0bHkpIGdyZWVuIG9uIHBhc3MnKTsKKyAgICAgICAgaWYgKGV2ZW50U2VuZGVyLmNs
ZWFyVG91Y2hQb2ludHMpCisgICAgICAgICAgICBmaXJzdFRvdWNoRHJhZ1NlcXVlbmNlKCk7Cisg
ICAgICAgIGVsc2UKKyAgICAgICAgICAgIGV4aXRJZk5lY2Vzc2FyeSgpOworICAgIH0gZWxzZSB7
CisgICAgICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ3RvdWNoc3RhcnQnLCBsb2dGaXJz
dFRvdWNoUG9pbnQpOworICAgICAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCd0b3VjaG1v
dmUnLCBsb2dGaXJzdFRvdWNoUG9pbnQpOworICAgICAgICBkZWJ1ZygiVGhpcyB0ZXN0IHJlcXVp
cmVzIER1bXBSZW5kZXJUcmVlLiAgVG91Y2gtc2Nyb2xsIHRoZSByZWQgcmVjdCB0byBsb2cuIik7
CisgICAgICAgIG1vdmluZ2Rpdi5hZGRFdmVudExpc3RlbmVyKCd0b3VjaGVuZCcsIGZpbmdlclVw
LCBmYWxzZSk7CisgICAgfQorfQorPC9zY3JpcHQ+CisKKworCis8L2JvZHk+Cis8L2h0bWw+CmRp
ZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9mYXN0L2V2ZW50cy90b3VjaC9yZXNvdXJjZXMvc2Nyb2xs
LWluc2lkZS1pZnJhbWUuaHRtbCBiL0xheW91dFRlc3RzL2Zhc3QvZXZlbnRzL3RvdWNoL3Jlc291
cmNlcy9zY3JvbGwtaW5zaWRlLWlmcmFtZS5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjk0Zjc4ODc3YzUyYmE1
NzZiNGM1MTE4MDBmNDE0Yjg0ZDA0MzdkOWMKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0
cy9mYXN0L2V2ZW50cy90b3VjaC9yZXNvdXJjZXMvc2Nyb2xsLWluc2lkZS1pZnJhbWUuaHRtbApA
QCAtMCwwICsxLDM0IEBACis8aHRtbD4KKzxoZWFkPgorPHN0eWxlIHR5cGU9InRleHQvY3NzIj4K
KyNncmVlbmJveCB7CisgIHdpZHRoOiAxMDBweDsKKyAgaGVpZ2h0OiAxMDBweDsKKyAgYmFja2dy
b3VuZDogZ3JlZW47CisgIHBhZGRpbmc6IDBweDsKKyAgbWFyZ2luOiAwcHg7YQorfQorI3JlZGJv
eCB7CisgIHdpZHRoOiAxMDBweDsKKyAgaGVpZ2h0OiAxMDBweDsKKyAgYmFja2dyb3VuZDogcmVk
OworICBwYWRkaW5nOiAwcHg7CisgIG1hcmdpbjogMHB4OworfQorCit0ZCB7CisgIHBhZGRpbmc6
IDBweDsKK30KKzwvc3R5bGU+Cis8L2hlYWQ+Cis8Ym9keSBzdHlsZT0ibWFyZ2luOjAiIG9ubG9h
ZD0icGFyZW50LnJ1blRlc3QoKSI+CisKKzx0YWJsZSBpZD0idGFibGVfdG9fZmlsbCI+CisgICAg
PHRyPjx0ZD48ZGl2IGlkPSJncmVlbmJveCI+PC9kaXY+PC90ZD48L3RyPgorICAgIDx0cj48dGQ+
PGRpdiBpZD0icmVkYm94Ij48L2Rpdj48L3RkPjwvdHI+CisgICAgPHRyPjx0ZD48ZGl2IGlkPSJn
cmVlbmJveCI+PC9kaXY+PC90ZD48L3RyPgorICAgIDx0cj48dGQ+PGRpdiBpZD0icmVkYm94Ij48
L2Rpdj48L3RkPjwvdHI+Cis8L3RhYmxlPgorPGJvZHk+Cis8L2h0bWw+CisK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>112759</attachid>
            <date>2011-10-27 14:47:33 -0700</date>
            <delta_ts>2011-12-23 12:41:33 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-67822-20111027173955.patch</filename>
            <type>text/plain</type>
            <size>44285</size>
            <attacher name="Robert Kroeger">rjkroege</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogOTg1OTIKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCAyN2MzMWJmNDRhNDhkMjMx
YzlmMTAyMWRmNTk0ZDRhMmZhMTI1ZTI3Li4xMjgwNGIzZDJlNjY4YjM3YjM5ZWFiOGVkMjE4NDcw
MTk0NGM2MDdlIDEwMDc1NQotLS0gYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvU291
cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNjYgQEAKKzIwMTEtMTAtMjcgIFJvYmVy
dCBLcm9lZ2VyICA8cmprcm9lZ2VAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFBsYXRmb3JtR2Vz
dHVyZUV2ZW50OjpoYW5kbGVHZXN0dXJlRXZlbnQgc2hvdWxkIGhpdCB0ZXN0IHdoaWxlIGRpc3Bh
dGNoaW5nIFNjcm9sbCogZXZlbnRzLgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9Njc4MjIKKworICAgICAgICBQbGF0Zm9ybUdlc3R1cmVFdmVudCBTY3Jv
bGwqVHlwZSBldmVudCBzZXF1ZW5jZXMgc2hvdWxkCisgICAgICAgIGFsbCBnbyB0byB0aGUgdGFy
Z2V0IChub2RlLCBwYWdlLCB3aWRnZXQpIHNwZWNpZmllZCBieQorICAgICAgICB0aGUgc3RhcnRp
bmcgU2Nyb2xsQmVnaW5UeXBlIGV2ZW50LiBUaGlzIGNoYW5nZSBwbHVtYnMKKyAgICAgICAgU2Ny
b2xsVXBkYXRlVHlwZSBpbnN0YW5jZXMgdGhyb3VnaCB0aGUgZXhpc3Rpbmcgc2Nyb2xsIGNvZGUK
KyAgICAgICAgc2ltaWxhciB0byBob3cgV2hlZWxFdmVudCBpbnN0YW5jZSBhcmUgZGVsaXZlcmVk
IGFuZCBhZGRzIHRoZQorICAgICAgICBuZWNlc3NhcnkgY29kZSB0byBwbHVtYiBTY3JvbGxCZWdp
blR5cGUgYW5kIFNjcm9sbEVuZFR5cGUKKyAgICAgICAgUGxhdGZvcm1HZXN0dXJlRXZlbnQgaW5z
dGFuY2VzIHRocm91Z2ggdG8gdGhlIGV4aXN0aW5nCisgICAgICAgIFNjcm9sbGFibGVBcmVhOjpo
YW5kbGVHZXN0dXJlRXZlbnQgbWV0aG9kLgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAo
T09QUyEpLgorCisgICAgICAgIFRlc3RzOiBmYXN0L2V2ZW50cy90b3VjaC9nZXN0dXJlL3RvdWNo
LWdlc3R1cmUtc2Nyb2xsLWlmcmFtZS5odG1sCisgICAgICAgICAgICAgICBmYXN0L2V2ZW50cy90
b3VjaC9nZXN0dXJlL3RvdWNoLWdlc3R1cmUtc2Nyb2xsLXBhZ2UuaHRtbAorICAgICAgICAgICAg
ICAgZmFzdC9ldmVudHMvdG91Y2gvZ2VzdHVyZS90b3VjaC1nZXN0dXJlLXNjcm9sbC1zaHktdGFy
Z2V0Lmh0bWwKKworICAgICAgICAqIHBhZ2UvRXZlbnRIYW5kbGVyLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OndoZWVsR3JhbnVsYXJpdHlUb1Njcm9sbEdyYW51bGFyaXR5KToKKyAgICAgICAgKFdl
YkNvcmU6OnNjcm9sbE5vZGUpOiBSZWZhY3RvcmVkLgorICAgICAgICAoV2ViQ29yZTo6Z2VzdHVy
ZU5vZGUpOiBEaXNwYXRjaCBhIFBsYXRmb3JtR2VzdHVyZUV2ZW50IHRvIGEKKyAgICAgICAgbm9k
ZSB1c2luZyByZWZhY3RvcmVkIHNjcm9sbE5vZGUuCisgICAgICAgIChXZWJDb3JlOjpFdmVudEhh
bmRsZXI6OmNsZWFyKTogQWRkZWQgY2xlYXJpbmcgb2YgdGhlIGxhdGNoZWQgbm9kZS4KKyAgICAg
ICAgKFdlYkNvcmU6OkV2ZW50SGFuZGxlcjo6ZGV0ZWN0QW5kUGFzc0dlc3R1cmVFdmVudFRvV2lk
Z2V0KToKKyAgICAgICAgRGlzcGF0Y2ggUGxhdGZvcm1HZXN0dXJlRXZlbnRzIGludG8gd2lkZ2V0
cy4KKyAgICAgICAgKFdlYkNvcmU6OkV2ZW50SGFuZGxlcjo6cGFzc0dlc3R1cmVFdmVudFRvRmFt
ZVZpZXcpOiBEaXNwYXRjaAorICAgICAgICBQbGF0Zm9ybUdlc3R1cmVFdmVudHMgaW50byBhIEZy
YW1lVmlldy4KKyAgICAgICAgKFdlYkNvcmU6OlVubGF0Y2hlcjo6VW5sYXRjaGVyKToKKyAgICAg
ICAgKFdlYkNvcmU6OlVubGF0Y2hlcjo6flVubGF0Y2hlcik6IEFsd2F5cyBjbGVhciBhIGxhdGNo
ZWQgbm9kZQorICAgICAgICBvbiBlbmQgb2YgbXVsdHBsZS1ldmVudCBzZXF1ZW5jZSBnZXN0dXJl
LgorICAgICAgICAoV2ViQ29yZTo6RXZlbnRIYW5kbGVyOjpoYW5kbGVHZXN0dXJlRXZlbnQpOiBD
b3JyZWN0cyBhIEZJWE1FOgorICAgICAgICBkaXNwYXRjaCBTY3JvbGwgdHlwZSBQbGF0Zm9ybUdl
c3R1cmVFdmVudHMgaW50byBvdmVyZmxvdy1zY3JvbGwKKyAgICAgICAgZWxlbWVudHMgaWZyYW1l
cyBvciB0aGUgcGFnZSBpdHNlbGYuIElmIHRoZSB0YXJnZXQgb2YgdGhlIFBHRSBpcworICAgICAg
ICBhIG5vZGUsIGl0IGlzIGxhdGNoZWQgdG8gdGhhdCBTY3JvbGxVcGRhdGVUeXBlIGFuZCBTY3Jv
bGxFbmRUeXBlCisgICAgICAgIGluc3RhbmNlcyByZWFjaCB0aGUgc2FtZSB0YXJnZXQuCisgICAg
ICAgICogcGFnZS9FdmVudEhhbmRsZXIuaDogQWRkZWQgYSByZWYtY291bnRlZCBsYXRjaCBmb3Ig
dGhlIHRhcmdldCBub2RlLgorICAgICAgICAqIHBhZ2UvY2hyb21pdW0vRXZlbnRIYW5kbGVyQ2hy
b21pdW0uY3BwOgorICAgICAgICAoV2ViQ29yZTo6RXZlbnRIYW5kbGVyOjpwYXNzR2VzdHVyZUV2
ZW50VG9XaWRnZXQpOgorICAgICAgICAqIHBhZ2UvZWZsL0V2ZW50SGFuZGxlckVmbC5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpFdmVudEhhbmRsZXI6OnBhc3NHZXN0dXJlRXZlbnRUb1dpZGdldCk6
CisgICAgICAgICogcGFnZS9ndGsvRXZlbnRIYW5kbGVyR3RrLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OkV2ZW50SGFuZGxlcjo6cGFzc0dlc3R1cmVFdmVudFRvV2lkZ2V0KToKKyAgICAgICAgKiBw
YWdlL21hYy9FdmVudEhhbmRsZXJNYWMubW06CisgICAgICAgIChXZWJDb3JlOjpFdmVudEhhbmRs
ZXI6OnBhc3NHZXN0dXJlRXZlbnRUb1dpZGdldCk6CisgICAgICAgICogcGFnZS9xdC9FdmVudEhh
bmRsZXJRdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpFdmVudEhhbmRsZXI6OnBhc3NHZXN0dXJl
RXZlbnRUb1dpZGdldCk6CisgICAgICAgICogcGFnZS93aW4vRXZlbnRIYW5kbGVyV2luLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OkV2ZW50SGFuZGxlcjo6cGFzc0dlc3R1cmVFdmVudFRvV2lkZ2V0
KToKKyAgICAgICAgKiBwYWdlL3d4L0V2ZW50SGFuZGxlcld4LmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OkV2ZW50SGFuZGxlcjo6cGFzc0dlc3R1cmVFdmVudFRvV2lkZ2V0KToKKyAgICAgICAgKiBw
bGF0Zm9ybS9TY3JvbGxBbmltYXRvci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxBbmlt
YXRvcjo6aGFuZGxlR2VzdHVyZUV2ZW50KToKKyAgICAgICAgKiBwbGF0Zm9ybS9TY3JvbGxBbmlt
YXRvck5vbmUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsQW5pbWF0b3JOb25lOjpoYW5k
bGVHZXN0dXJlRXZlbnQpOiBBZGRlZCBzY3JvbGxpbmcKKyAgICAgICAgZnVuY3Rpb25hbGl0eSB0
byBoYW5kbGUgUGxhdGZvcm1HZXN0dXJlRXZlbnRzLgorICAgICAgICAqIHJlbmRlcmluZy9SZW5k
ZXJCb3guY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQm94OjpnZXN0dXJlKToKKyAgICAg
ICAgKiByZW5kZXJpbmcvUmVuZGVyQm94Lmg6IEFkZGVkIGEgZ2VzdHVyZSBtZXRob2QgdG8gZGlz
cGxhdGNoCisgICAgICAgIGdlc3R1cmUgZXZlbnRzIHRvIGEgUmVuZGVyQm94J3MgYXNzb2NpYXRl
ZCBsYXllci4KKwogMjAxMS0xMC0yNyAgQWRhbSBSb2JlbiAgPGFyb2JlbkBhcHBsZS5jb20+CiAK
ICAgICAgICAgV2luZG93cyBidWlsZCBmaXggYWZ0ZXIgcjk4NTEyCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9wYWdlL0V2ZW50SGFuZGxlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL0V2
ZW50SGFuZGxlci5jcHAKaW5kZXggY2U2NzQ0YTZmNjNlZmUyNTgzZWVhZWVlZjA5ZGExNmMzYzMw
MDU1ZC4uYWQ1NGNlMTlkZTgyNjMxYWM5OWJiZjc4ZmY5YWUzODcwZDA2ZDAwYSAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvcGFnZS9FdmVudEhhbmRsZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3BhZ2UvRXZlbnRIYW5kbGVyLmNwcApAQCAtNjksNiArNjksNyBAQAogI2luY2x1ZGUgIlJl
bmRlclZpZXcuaCIKICNpbmNsdWRlICJSZW5kZXJXaWRnZXQuaCIKICNpbmNsdWRlICJTY3JvbGxB
bmltYXRvci5oIgorI2luY2x1ZGUgIlNjcm9sbGFibGVBcmVhLmgiCiAjaW5jbHVkZSAiU2Nyb2xs
YmFyLmgiCiAjaW5jbHVkZSAiU2V0dGluZ3MuaCIKICNpbmNsdWRlICJTcGF0aWFsTmF2aWdhdGlv
bi5oIgpAQCAtMTQyLDcgKzE0MywyMCBAQCBwcml2YXRlOgogICAgIEN1cnNvciBtX2N1cnNvcjsK
IH07CiAKLXN0YXRpYyBpbmxpbmUgYm9vbCBzY3JvbGxOb2RlKGZsb2F0IGRlbHRhLCBXaGVlbEV2
ZW50OjpHcmFudWxhcml0eSBncmFudWxhcml0eSwgU2Nyb2xsRGlyZWN0aW9uIHBvc2l0aXZlRGly
ZWN0aW9uLCBTY3JvbGxEaXJlY3Rpb24gbmVnYXRpdmVEaXJlY3Rpb24sIE5vZGUqIG5vZGUsIE5v
ZGUqKiBzdG9wTm9kZSkKK3N0YXRpYyBpbmxpbmUgU2Nyb2xsR3JhbnVsYXJpdHkgd2hlZWxHcmFu
dWxhcml0eVRvU2Nyb2xsR3JhbnVsYXJpdHkoV2hlZWxFdmVudDo6R3JhbnVsYXJpdHkgZ3JhbnVs
YXJpdHkpCit7CisgICAgc3dpdGNoIChncmFudWxhcml0eSkgeworICAgIGNhc2UgV2hlZWxFdmVu
dDo6UGFnZToKKyAgICAgICAgcmV0dXJuIFNjcm9sbEJ5UGFnZTsKKyAgICBjYXNlIFdoZWVsRXZl
bnQ6OkxpbmU6CisgICAgICAgIHJldHVybiBTY3JvbGxCeUxpbmU7CisgICAgY2FzZSBXaGVlbEV2
ZW50OjpQaXhlbDoKKyAgICAgICAgcmV0dXJuIFNjcm9sbEJ5UGl4ZWw7CisgICAgfQorICAgIHJl
dHVybiBTY3JvbGxCeVBpeGVsOworfQorCitzdGF0aWMgaW5saW5lIGJvb2wgc2Nyb2xsTm9kZShm
bG9hdCBkZWx0YSwgU2Nyb2xsR3JhbnVsYXJpdHkgZ3JhbnVsYXJpdHksIFNjcm9sbERpcmVjdGlv
biBwb3NpdGl2ZURpcmVjdGlvbiwgU2Nyb2xsRGlyZWN0aW9uIG5lZ2F0aXZlRGlyZWN0aW9uLCBO
b2RlKiBub2RlLCBOb2RlKiogc3RvcE5vZGUpCiB7CiAgICAgaWYgKCFkZWx0YSkKICAgICAgICAg
cmV0dXJuIGZhbHNlOwpAQCAtMTUwLDIyICsxNjQsMjUgQEAgc3RhdGljIGlubGluZSBib29sIHNj
cm9sbE5vZGUoZmxvYXQgZGVsdGEsIFdoZWVsRXZlbnQ6OkdyYW51bGFyaXR5IGdyYW51bGFyaXR5
LAogICAgIGlmICghbm9kZS0+cmVuZGVyZXIoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAg
IAotICAgIC8vIEZpbmQgdGhlIG5lYXJlc3QgZW5jbG9zaW5nIGJveC4KICAgICBSZW5kZXJCb3gq
IGVuY2xvc2luZ0JveCA9IG5vZGUtPnJlbmRlcmVyKCktPmVuY2xvc2luZ0JveCgpOwotCiAgICAg
ZmxvYXQgYWJzRGVsdGEgPSBkZWx0YSA+IDAgPyBkZWx0YSA6IC1kZWx0YTsKLSAgICAKLSAgICBp
ZiAoZ3JhbnVsYXJpdHkgPT0gV2hlZWxFdmVudDo6UGFnZSkKLSAgICAgICAgcmV0dXJuIGVuY2xv
c2luZ0JveC0+c2Nyb2xsKGRlbHRhIDwgMCA/IG5lZ2F0aXZlRGlyZWN0aW9uIDogcG9zaXRpdmVE
aXJlY3Rpb24sIFNjcm9sbEJ5UGFnZSwgYWJzRGVsdGEsIHN0b3BOb2RlKTsKKyAgICByZXR1cm4g
ZW5jbG9zaW5nQm94LT5zY3JvbGwoZGVsdGEgPCAwID8gbmVnYXRpdmVEaXJlY3Rpb24gOiBwb3Np
dGl2ZURpcmVjdGlvbiwgZ3JhbnVsYXJpdHksIGFic0RlbHRhLCBzdG9wTm9kZSk7Cit9CiAKLSAg
ICBpZiAoZ3JhbnVsYXJpdHkgPT0gV2hlZWxFdmVudDo6TGluZSkKLSAgICAgICAgcmV0dXJuIGVu
Y2xvc2luZ0JveC0+c2Nyb2xsKGRlbHRhIDwgMCA/IG5lZ2F0aXZlRGlyZWN0aW9uIDogcG9zaXRp
dmVEaXJlY3Rpb24sIFNjcm9sbEJ5TGluZSwgYWJzRGVsdGEsIHN0b3BOb2RlKTsKK3N0YXRpYyBp
bmxpbmUgYm9vbCBzY3JvbGxOb2RlKGZsb2F0IGRlbHRhLCBXaGVlbEV2ZW50OjpHcmFudWxhcml0
eSBncmFudWxhcml0eSwgU2Nyb2xsRGlyZWN0aW9uIHBvc2l0aXZlRGlyZWN0aW9uLCBTY3JvbGxE
aXJlY3Rpb24gbmVnYXRpdmVEaXJlY3Rpb24sIE5vZGUqIG5vZGUsIE5vZGUqKiBzdG9wTm9kZSkK
K3sKKyAgICByZXR1cm4gc2Nyb2xsTm9kZShkZWx0YSwgd2hlZWxHcmFudWxhcml0eVRvU2Nyb2xs
R3JhbnVsYXJpdHkoZ3JhbnVsYXJpdHkpLCBwb3NpdGl2ZURpcmVjdGlvbiwgbmVnYXRpdmVEaXJl
Y3Rpb24sIG5vZGUsIHN0b3BOb2RlKTsKK30KIAotICAgIGlmIChncmFudWxhcml0eSA9PSBXaGVl
bEV2ZW50OjpQaXhlbCkKLSAgICAgICAgcmV0dXJuIGVuY2xvc2luZ0JveC0+c2Nyb2xsKGRlbHRh
IDwgMCA/IG5lZ2F0aXZlRGlyZWN0aW9uIDogcG9zaXRpdmVEaXJlY3Rpb24sIFNjcm9sbEJ5UGl4
ZWwsIGFic0RlbHRhLCBzdG9wTm9kZSk7Ci0gICAgICAgIAotICAgIHJldHVybiBmYWxzZTsKKyNp
ZiBFTkFCTEUoR0VTVFVSRV9FVkVOVFMpCitzdGF0aWMgaW5saW5lIGJvb2wgZ2VzdHVyZU5vZGUo
Y29uc3QgUGxhdGZvcm1HZXN0dXJlRXZlbnQmIGdlc3R1cmVFdmVudCwgTm9kZSogbm9kZSkKK3sK
KyAgICBpZiAoIW5vZGUtPnJlbmRlcmVyKCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBS
ZW5kZXJCb3gqIGVuY2xvc2luZ0JveCA9IG5vZGUtPnJlbmRlcmVyKCktPmVuY2xvc2luZ0JveCgp
OworICAgIHJldHVybiBlbmNsb3NpbmdCb3gtPmdlc3R1cmUoZ2VzdHVyZUV2ZW50KTsKIH0KKyNl
bmRpZgogCiAjaWYgIVBMQVRGT1JNKE1BQykKIApAQCAtMjY3LDYgKzI4NCw5IEBAIHZvaWQgRXZl
bnRIYW5kbGVyOjpjbGVhcigpCiAjaWYgRU5BQkxFKFRPVUNIX0VWRU5UUykKICAgICBtX29yaWdp
bmF0aW5nVG91Y2hQb2ludFRhcmdldHMuY2xlYXIoKTsKICNlbmRpZgorI2lmIEVOQUJMRShHRVNU
VVJFX0VWRU5UUykKKyAgICBtX2dlc3R1cmVUYXJnZXROb2RlLmNsZWFyKCk7CisjZW5kaWYKIH0K
IAogdm9pZCBFdmVudEhhbmRsZXI6Om5vZGVXaWxsQmVSZW1vdmVkKE5vZGUqIG5vZGVUb0JlUmVt
b3ZlZCkKQEAgLTIyMTUsMTggKzIyMzUsNzIgQEAgdm9pZCBFdmVudEhhbmRsZXI6OmRlZmF1bHRX
aGVlbEV2ZW50SGFuZGxlcihOb2RlKiBzdGFydE5vZGUsIFdoZWVsRXZlbnQqIHdoZWVsRXYKIH0K
IAogI2lmIEVOQUJMRShHRVNUVVJFX0VWRU5UUykKK2Jvb2wgRXZlbnRIYW5kbGVyOjpkZXRlY3RB
bmRQYXNzR2VzdHVyZUV2ZW50VG9XaWRnZXQoUGFzc1JlZlB0cjxOb2RlPiB0YXJnZXROb2RlLCBj
b25zdCBQbGF0Zm9ybUdlc3R1cmVFdmVudCYgZ2VzdHVyZUV2ZW50LCBjb25zdCBIaXRUZXN0UmVz
dWx0JiByZXN1bHQpCit7CisgICAgTm9kZSogbm9kZSA9IHRhcmdldE5vZGUuZ2V0KCk7CisgICAg
aWYgKCFub2RlKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAvLyBGSVhNRTogbGF0Y2gg
Y29ycmVjdGx5CisgICAgYm9vbCBpc092ZXJXaWRnZXQgPSByZXN1bHQuaXNPdmVyV2lkZ2V0KCk7
CisgICAgUmVuZGVyT2JqZWN0KiB0YXJnZXQgPSBub2RlLT5yZW5kZXJlcigpOworICAgIGlmICgh
KGlzT3ZlcldpZGdldCAmJiB0YXJnZXQgJiYgdGFyZ2V0LT5pc1dpZGdldCgpKSkKKyAgICAgICAg
cmV0dXJuIGZhbHNlOworICAgICAgICAKKyAgICBXaWRnZXQqIHdpZGdldCA9IHRvUmVuZGVyV2lk
Z2V0KHRhcmdldCktPndpZGdldCgpOworICAgIGlmICh3aWRnZXQgJiYgcGFzc0dlc3R1cmVFdmVu
dFRvV2lkZ2V0KGdlc3R1cmVFdmVudCwgd2lkZ2V0KSkKKyAgICAgICAgcmV0dXJuIHRydWU7Cisg
ICAgcmV0dXJuIGZhbHNlOworfQorCitib29sIEV2ZW50SGFuZGxlcjo6cGFzc0dlc3R1cmVFdmVu
dFRvRnJhbWVWaWV3KGNvbnN0IFBsYXRmb3JtR2VzdHVyZUV2ZW50JiBnZXN0dXJlRXZlbnQpCit7
CisgICAgRnJhbWVWaWV3KiB2aWV3ID0gbV9mcmFtZS0+dmlldygpOworICAgIGlmICghdmlldykK
KyAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIAorICAgIHZpZXctPmhhbmRsZUdlc3R1cmVF
dmVudChnZXN0dXJlRXZlbnQpOworICAgIHJldHVybiB0cnVlOworfQorCisvLyBIZWxwZXIgdG8g
YWx3YXlzIHVubGF0Y2ggdGFyZ2V0IG5vZGUgb24gbGVhdmluZyBzY29wZS4KK2NsYXNzIFVubGF0
Y2hlciB7CitwdWJsaWM6CisgICAgVW5sYXRjaGVyKFJlZlB0cjxOb2RlPiYgcikKKyAgICAgICAg
OiBtX3JlZihyKQorICAgIHsKKyAgICB9CisKKyAgICB+VW5sYXRjaGVyKCkKKyAgICB7CisgICAg
ICAgICAgICBtX3JlZi5jbGVhcigpOworICAgIH0KK3ByaXZhdGU6CisgICAgUmVmUHRyPE5vZGU+
JiBtX3JlZjsKK307CisKIGJvb2wgRXZlbnRIYW5kbGVyOjpoYW5kbGVHZXN0dXJlRXZlbnQoY29u
c3QgUGxhdGZvcm1HZXN0dXJlRXZlbnQmIGdlc3R1cmVFdmVudCkKIHsKLSAgICAvLyBGSVhNRTog
VGhpcyBzaG91bGQgaGl0IHRlc3QgYW5kIGdvIHRvIHRoZSBjb3JyZWN0IHN1YmZyYW1lIHJhdGhl
ciB0aGFuIAotICAgIC8vIGFsd2F5cyBzZW5kaW5nIGdlc3R1cmVzIHRvIHRoZSBtYWluIGZyYW1l
IG9ubHkuIFdlIHNob3VsZCBhbHNvIGVuc3VyZQotICAgIC8vIHRoYXQgaWYgYSBmcmFtZSBnZXRz
IGEgZ2VzdHVyZSBiZWdpbiBnZXN0dXJlLCBpdCBnZXRzIHRoZSBjb3JyZXNwb25kaW5nCi0gICAg
Ly8gZW5kIGdlc3R1cmUgYXMgd2VsbC4KKyAgICBEb2N1bWVudCogZG9jdW1lbnQgPSBtX2ZyYW1l
LT5kb2N1bWVudCgpOworICAgIFJlbmRlck9iamVjdCogZG9jdW1lbnRSZW5kZXJlciA9IGRvY3Vt
ZW50LT5yZW5kZXJlcigpOworICAgIGlmICghZG9jdW1lbnRSZW5kZXJlcikKKyAgICAgICAgcmV0
dXJuIGZhbHNlOworICAgIFJlZlB0cjxGcmFtZVZpZXc+IHByb3RlY3RvcihtX2ZyYW1lLT52aWV3
KCkpOworICAgIEZyYW1lVmlldyogdmlldyA9IG1fZnJhbWUtPnZpZXcoKTsKKyAgICBpZiAoIXZp
ZXcpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBzZXRGcmFtZVdhc1Njcm9sbGVkQnlVc2Vy
KCk7CisgICAgTGF5b3V0UG9pbnQgcG9pbnRJblZpZXdDb29yZGluYXRlcyA9IHZpZXctPndpbmRv
d1RvQ29udGVudHMoZ2VzdHVyZUV2ZW50LnBvc2l0aW9uKCkpOworCisgICAgSGl0VGVzdFJlcXVl
c3QgcmVxdWVzdChIaXRUZXN0UmVxdWVzdDo6UmVhZE9ubHkpOworICAgIEhpdFRlc3RSZXN1bHQg
cmVzdWx0KHBvaW50SW5WaWV3Q29vcmRpbmF0ZXMpOworICAgIGRvY3VtZW50LT5yZW5kZXJWaWV3
KCktPmxheWVyKCktPmhpdFRlc3QocmVxdWVzdCwgcmVzdWx0KTsKIAogICAgIHN3aXRjaCAoZ2Vz
dHVyZUV2ZW50LnR5cGUoKSkgewogICAgIGNhc2UgUGxhdGZvcm1HZXN0dXJlRXZlbnQ6OlRhcERv
d25UeXBlOgogICAgICAgICBicmVhazsKICAgICBjYXNlIFBsYXRmb3JtR2VzdHVyZUV2ZW50OjpU
YXBUeXBlOiB7Ci0gICAgICAgIC8vIEZJWE1FOiBSZWZhY3RvciB0aGlzIGNvZGUgdG8gbm90IGhp
dCB0ZXN0IG11bHRpcGxlIHRpbWVzIG9uY2UgaGl0IHRlc3RpbmcgaGFzIGJlZW4gY29ycmVjdGVk
IGFzIHN1Z2dlc3RlZCBhYm92ZS4KKyAgICAgICAgLy8gRklYTUU6IFJlZmFjdG9yIHRoaXMgY29k
ZSB0byBub3QgaGl0IHRlc3QgbXVsdGlwbGUgdGltZXMgYnkgdXNpbmcgdGhlIGNvZGUgd3JpdHRl
biBmb3Igc2Nyb2xsLgogICAgICAgICBQbGF0Zm9ybU1vdXNlRXZlbnQgZmFrZU1vdXNlTW92ZShn
ZXN0dXJlRXZlbnQucG9zaXRpb24oKSwgZ2VzdHVyZUV2ZW50Lmdsb2JhbFBvc2l0aW9uKCksIE5v
QnV0dG9uLCBNb3VzZUV2ZW50TW92ZWQsIC8qIGNsaWNrQ291bnQgKi8gMSwgZ2VzdHVyZUV2ZW50
LnNoaWZ0S2V5KCksIGdlc3R1cmVFdmVudC5jdHJsS2V5KCksIGdlc3R1cmVFdmVudC5hbHRLZXko
KSwgZ2VzdHVyZUV2ZW50Lm1ldGFLZXkoKSwgZ2VzdHVyZUV2ZW50LnRpbWVzdGFtcCgpKTsKICAg
ICAgICAgUGxhdGZvcm1Nb3VzZUV2ZW50IGZha2VNb3VzZURvd24oZ2VzdHVyZUV2ZW50LnBvc2l0
aW9uKCksIGdlc3R1cmVFdmVudC5nbG9iYWxQb3NpdGlvbigpLCBMZWZ0QnV0dG9uLCBNb3VzZUV2
ZW50UHJlc3NlZCwgLyogY2xpY2tDb3VudCAqLyAxLCBnZXN0dXJlRXZlbnQuc2hpZnRLZXkoKSwg
Z2VzdHVyZUV2ZW50LmN0cmxLZXkoKSwgZ2VzdHVyZUV2ZW50LmFsdEtleSgpLCBnZXN0dXJlRXZl
bnQubWV0YUtleSgpLCBnZXN0dXJlRXZlbnQudGltZXN0YW1wKCkpOwogICAgICAgICBQbGF0Zm9y
bU1vdXNlRXZlbnQgZmFrZU1vdXNlVXAoZ2VzdHVyZUV2ZW50LnBvc2l0aW9uKCksIGdlc3R1cmVF
dmVudC5nbG9iYWxQb3NpdGlvbigpLCBMZWZ0QnV0dG9uLCBNb3VzZUV2ZW50UmVsZWFzZWQsIC8q
IGNsaWNrQ291bnQgKi8gMSwgZ2VzdHVyZUV2ZW50LnNoaWZ0S2V5KCksIGdlc3R1cmVFdmVudC5j
dHJsS2V5KCksIGdlc3R1cmVFdmVudC5hbHRLZXkoKSwgZ2VzdHVyZUV2ZW50Lm1ldGFLZXkoKSwg
Z2VzdHVyZUV2ZW50LnRpbWVzdGFtcCgpKTsKQEAgLTIyMzYsMjUgKzIzMTAsNTAgQEAgYm9vbCBF
dmVudEhhbmRsZXI6OmhhbmRsZUdlc3R1cmVFdmVudChjb25zdCBQbGF0Zm9ybUdlc3R1cmVFdmVu
dCYgZ2VzdHVyZUV2ZW50KQogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAgICAgY2FzZSBQ
bGF0Zm9ybUdlc3R1cmVFdmVudDo6U2Nyb2xsVXBkYXRlVHlwZTogewotICAgICAgICBjb25zdCBm
bG9hdCB0aWNrRGl2aXNvciA9IChmbG9hdClXaGVlbEV2ZW50Ojp0aWNrTXVsdGlwbGllcjsKLSAg
ICAgICAgLy8gRklYTUU6IFJlcGxhY2UgdGhpcyBpbnRlcmltIGltcGxlbWVudGF0aW9uIG9uY2Ug
dGhlIGFib3ZlIGZpeG1lIGhhcyBiZWVuIGFkZHJlc3NlZC4KLSAgICAgICAgSW50UG9pbnQgcG9p
bnQoZ2VzdHVyZUV2ZW50LnBvc2l0aW9uKCkueCgpLCBnZXN0dXJlRXZlbnQucG9zaXRpb24oKS55
KCkpOwotICAgICAgICBJbnRQb2ludCBnbG9iYWxQb2ludChnZXN0dXJlRXZlbnQuZ2xvYmFsUG9z
aXRpb24oKS54KCksIGdlc3R1cmVFdmVudC5nbG9iYWxQb3NpdGlvbigpLnkoKSk7Ci0gICAgICAg
IFBsYXRmb3JtV2hlZWxFdmVudCBzeW50aGV0aWNXaGVlbEV2ZW50KHBvaW50LCBnbG9iYWxQb2lu
dCwgZ2VzdHVyZUV2ZW50LmRlbHRhWCgpLCBnZXN0dXJlRXZlbnQuZGVsdGFZKCksIGdlc3R1cmVF
dmVudC5kZWx0YVgoKSAvIHRpY2tEaXZpc29yLCBnZXN0dXJlRXZlbnQuZGVsdGFZKCkgLyB0aWNr
RGl2aXNvciwgU2Nyb2xsQnlQaXhlbFdoZWVsRXZlbnQsIGdlc3R1cmVFdmVudC5zaGlmdEtleSgp
LCBnZXN0dXJlRXZlbnQuY3RybEtleSgpLCBnZXN0dXJlRXZlbnQuYWx0S2V5KCksIGdlc3R1cmVF
dmVudC5tZXRhS2V5KCkpOwotICAgICAgICBoYW5kbGVXaGVlbEV2ZW50KHN5bnRoZXRpY1doZWVs
RXZlbnQpOwotICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgLy8gQWx3YXlzIGxhdGNoZWQg
aWYgcG9zc2libGUuCisgICAgICAgIGlmICghbV9nZXN0dXJlVGFyZ2V0Tm9kZSkKKyAgICAgICAg
ICAgIG1fZ2VzdHVyZVRhcmdldE5vZGUgPSByZXN1bHQuaW5uZXJOb2RlKCk7CisKKyAgICAgICAg
aWYgKGRldGVjdEFuZFBhc3NHZXN0dXJlRXZlbnRUb1dpZGdldChtX2dlc3R1cmVUYXJnZXROb2Rl
LCBnZXN0dXJlRXZlbnQsIHJlc3VsdCkpCisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAg
ICAgTm9kZSogbm9kZSA9IG1fZ2VzdHVyZVRhcmdldE5vZGUgPyBtX2dlc3R1cmVUYXJnZXROb2Rl
LT5zaGFkb3dBbmNlc3Rvck5vZGUoKSA6IDA7CisgICAgICAgIGJvb2wgeFNjcm9sbCA9IG5vZGUg
JiYgc2Nyb2xsTm9kZShnZXN0dXJlRXZlbnQuZGVsdGFYKCksIFNjcm9sbEJ5UGl4ZWwsIFNjcm9s
bExlZnQsIFNjcm9sbFJpZ2h0LCBub2RlLCAwKTsKKyAgICAgICAgYm9vbCB5U2Nyb2xsID0gbm9k
ZSAmJiBzY3JvbGxOb2RlKGdlc3R1cmVFdmVudC5kZWx0YVkoKSwgU2Nyb2xsQnlQaXhlbCwgU2Ny
b2xsVXAsIFNjcm9sbERvd24sIG5vZGUsIDApOworCisgICAgICAgIGlmICh4U2Nyb2xsIHx8IHlT
Y3JvbGwpCisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgcmV0dXJuIHBhc3NHZXN0
dXJlRXZlbnRUb0ZyYW1lVmlldyhnZXN0dXJlRXZlbnQpOwogICAgIH0KLSAgICBjYXNlIFBsYXRm
b3JtR2VzdHVyZUV2ZW50OjpEb3VibGVUYXBUeXBlOgotICAgIGNhc2UgUGxhdGZvcm1HZXN0dXJl
RXZlbnQ6OlNjcm9sbEJlZ2luVHlwZToKLSAgICBjYXNlIFBsYXRmb3JtR2VzdHVyZUV2ZW50OjpT
Y3JvbGxFbmRUeXBlOgotICAgICAgICBGcmFtZVZpZXcqIHZpZXcgPSBtX2ZyYW1lLT52aWV3KCk7
Ci0gICAgICAgIGlmICghdmlldykKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBjYXNl
IFBsYXRmb3JtR2VzdHVyZUV2ZW50OjpTY3JvbGxCZWdpblR5cGU6IHsKKyAgICAgICAgLy8gTGF0
Y2ggb24gc2Nyb2xsIGJlZ2luLgorICAgICAgICBpZiAobV9nZXN0dXJlVGFyZ2V0Tm9kZSkKKyAg
ICAgICAgICAgIG1fZ2VzdHVyZVRhcmdldE5vZGUgPSAwOworICAgICAgICBtX2dlc3R1cmVUYXJn
ZXROb2RlID0gcmVzdWx0LmlubmVyTm9kZSgpOwogCi0gICAgICAgIHZpZXctPmhhbmRsZUdlc3R1
cmVFdmVudChnZXN0dXJlRXZlbnQpOwotICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgaWYg
KGRldGVjdEFuZFBhc3NHZXN0dXJlRXZlbnRUb1dpZGdldChtX2dlc3R1cmVUYXJnZXROb2RlLCBn
ZXN0dXJlRXZlbnQsIHJlc3VsdCkpCisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAg
Tm9kZSogbm9kZSA9IG1fZ2VzdHVyZVRhcmdldE5vZGUgPyBtX2dlc3R1cmVUYXJnZXROb2RlLT5z
aGFkb3dBbmNlc3Rvck5vZGUoKSA6IDA7CisgICAgICAgIGlmIChub2RlICYmIGdlc3R1cmVOb2Rl
KGdlc3R1cmVFdmVudCwgbm9kZSkpCisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAg
cmV0dXJuIHBhc3NHZXN0dXJlRXZlbnRUb0ZyYW1lVmlldyhnZXN0dXJlRXZlbnQpOwogICAgIH0K
LSAgICByZXR1cm4gdHJ1ZTsKKyAgICBjYXNlIFBsYXRmb3JtR2VzdHVyZUV2ZW50OjpTY3JvbGxF
bmRUeXBlOiB7CisgICAgICAgIC8vIEFsd2F5cyB1bmxhdGNoIG9uIGxlYXZpbmcgdGhpcyBjYXNl
LgorICAgICAgICBVbmxhdGNoZXIgdW5sYXRjaChtX2dlc3R1cmVUYXJnZXROb2RlKTsKKyAgICAg
ICAgaWYgKCFtX2dlc3R1cmVUYXJnZXROb2RlKQorICAgICAgICAgICAgbV9nZXN0dXJlVGFyZ2V0
Tm9kZSA9IHJlc3VsdC5pbm5lck5vZGUoKTsKKworICAgICAgICBpZiAoZGV0ZWN0QW5kUGFzc0dl
c3R1cmVFdmVudFRvV2lkZ2V0KG1fZ2VzdHVyZVRhcmdldE5vZGUsIGdlc3R1cmVFdmVudCwgcmVz
dWx0KSkKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICBOb2RlKiBub2RlID0gbV9n
ZXN0dXJlVGFyZ2V0Tm9kZSA/IG1fZ2VzdHVyZVRhcmdldE5vZGUtPnNoYWRvd0FuY2VzdG9yTm9k
ZSgpIDogMDsKKyAgICAgICAgaWYgKG5vZGUgJiYgZ2VzdHVyZU5vZGUoZ2VzdHVyZUV2ZW50LCBu
b2RlKSkKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICByZXR1cm4gcGFzc0dlc3R1
cmVFdmVudFRvRnJhbWVWaWV3KGdlc3R1cmVFdmVudCk7CisgICAgfQorICAgIGNhc2UgUGxhdGZv
cm1HZXN0dXJlRXZlbnQ6OkRvdWJsZVRhcFR5cGU6CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAg
ICB9CisgICAgcmV0dXJuIGZhbHNlOwogfQogI2VuZGlmCiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3BhZ2UvRXZlbnRIYW5kbGVyLmggYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL0V2ZW50SGFu
ZGxlci5oCmluZGV4IDljYzAzYmYwZTZhNmM4NjhjYTM4ZDQyOTQ3NjdlYWZjZmJkYjUxYWIuLjFi
YTViYWY5YzUzMTk0NjcxM2FhNzkwODYyNWQwNDYzZmMyMzMwNDIgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3BhZ2UvRXZlbnRIYW5kbGVyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGFnZS9F
dmVudEhhbmRsZXIuaApAQCAtMzAwLDYgKzMwMCw5IEBAIHByaXZhdGU6CiAKICAgICBib29sIHBh
c3NNb3VzZURvd25FdmVudFRvV2lkZ2V0KFdpZGdldCopOwogICAgIGJvb2wgcGFzc1doZWVsRXZl
bnRUb1dpZGdldChQbGF0Zm9ybVdoZWVsRXZlbnQmLCBXaWRnZXQqKTsKKyNpZiBFTkFCTEUoR0VT
VFVSRV9FVkVOVFMpCisgICAgYm9vbCBwYXNzR2VzdHVyZUV2ZW50VG9XaWRnZXQoY29uc3QgUGxh
dGZvcm1HZXN0dXJlRXZlbnQmLCBXaWRnZXQqKTsKKyNlbmRpZgogCiAgICAgdm9pZCBkZWZhdWx0
U3BhY2VFdmVudEhhbmRsZXIoS2V5Ym9hcmRFdmVudCopOwogICAgIHZvaWQgZGVmYXVsdEJhY2tz
cGFjZUV2ZW50SGFuZGxlcihLZXlib2FyZEV2ZW50Kik7CkBAIC00MjEsNiArNDI0LDExIEBAIHBy
aXZhdGU6CiAgICAgVG91Y2hUYXJnZXRNYXAgbV9vcmlnaW5hdGluZ1RvdWNoUG9pbnRUYXJnZXRz
OwogICAgIGJvb2wgbV90b3VjaFByZXNzZWQ7CiAjZW5kaWYKKyNpZiBFTkFCTEUoR0VTVFVSRV9F
VkVOVFMpCisgICAgYm9vbCBkZXRlY3RBbmRQYXNzR2VzdHVyZUV2ZW50VG9XaWRnZXQoUGFzc1Jl
ZlB0cjxOb2RlPiwgY29uc3QgUGxhdGZvcm1HZXN0dXJlRXZlbnQmLCBjb25zdCBIaXRUZXN0UmVz
dWx0Jik7CisgICAgYm9vbCBwYXNzR2VzdHVyZUV2ZW50VG9GcmFtZVZpZXcoY29uc3QgUGxhdGZv
cm1HZXN0dXJlRXZlbnQmKTsKKyAgICBSZWZQdHI8Tm9kZT4gbV9nZXN0dXJlVGFyZ2V0Tm9kZTsK
KyNlbmRpZgogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcGFnZS9jaHJvbWl1bS9FdmVudEhhbmRsZXJDaHJvbWl1bS5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9wYWdlL2Nocm9taXVtL0V2ZW50SGFuZGxlckNocm9taXVtLmNwcAppbmRleCA0MGE3
MWFiMTFhNTMxYWIxNTBjNjE4MTRjYmE0ZjYyOGQzNWViM2NlLi4zZWQ1NGU4MzIwMTA2Y2U4OTg1
YjU4ZGIyM2UxZDRlYjkzODVjODUzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL2No
cm9taXVtL0V2ZW50SGFuZGxlckNocm9taXVtLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdl
L2Nocm9taXVtL0V2ZW50SGFuZGxlckNocm9taXVtLmNwcApAQCAtNDQsNiArNDQsMTEgQEAKICNp
bmNsdWRlICJQbGF0Zm9ybVdoZWVsRXZlbnQuaCIKICNpbmNsdWRlICJSZW5kZXJXaWRnZXQuaCIK
IAorI2lmIEVOQUJMRShHRVNUVVJFX0VWRU5UUykgfHwgRU5BQkxFKEdFU1RVUkVfUkVDT0dOSVpF
UikKKyNpbmNsdWRlICJQbGF0Zm9ybUdlc3R1cmVFdmVudC5oIgorI2VuZGlmCisKKwogbmFtZXNw
YWNlIFdlYkNvcmUgewogCiAjaWYgT1MoREFSV0lOKQpAQCAtMTY0LDQgKzE2OSwxNyBAQCBib29s
IEV2ZW50SGFuZGxlcjo6c2hvdWxkVHVyblZlcnRpY2FsVGlja3NJbnRvSG9yaXpvbnRhbChjb25z
dCBIaXRUZXN0UmVzdWx0JiByZQogfQogI2VuZGlmCiAKKyNpZiBFTkFCTEUoR0VTVFVSRV9FVkVO
VFMpCitib29sIEV2ZW50SGFuZGxlcjo6cGFzc0dlc3R1cmVFdmVudFRvV2lkZ2V0KGNvbnN0IFBs
YXRmb3JtR2VzdHVyZUV2ZW50JiBnZXN0dXJlRXZlbnQsIFdpZGdldCogd2lkZ2V0KQoreworICAg
IGlmICghd2lkZ2V0KQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBpZiAoIXdpZGdldC0+
aXNGcmFtZVZpZXcoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgcmV0dXJuIHN0YXRp
Y19jYXN0PEZyYW1lVmlldyo+KHdpZGdldCktPmZyYW1lKCktPmV2ZW50SGFuZGxlcigpLT5oYW5k
bGVHZXN0dXJlRXZlbnQoZ2VzdHVyZUV2ZW50KTsKK30KKyNlbmRpZgorCiB9IC8vIG5hbWVzcGFj
ZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL2VmbC9FdmVudEhhbmRs
ZXJFZmwuY3BwIGIvU291cmNlL1dlYkNvcmUvcGFnZS9lZmwvRXZlbnRIYW5kbGVyRWZsLmNwcApp
bmRleCAzYTNjNGRkMjA2MTY1OGU4ZDBlYWQ3ZTU1YmJlY2VlOWRmOTYzNjJiLi4yYjlkYWNjYmNj
ZjI4YTE3ZWQ4NjcyNTZhZjRlYWRmZjJkYzRlYWRmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9wYWdlL2VmbC9FdmVudEhhbmRsZXJFZmwuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2Uv
ZWZsL0V2ZW50SGFuZGxlckVmbC5jcHAKQEAgLTk1LDYgKzk1LDE0IEBAIGJvb2wgRXZlbnRIYW5k
bGVyOjpwYXNzV2hlZWxFdmVudFRvV2lkZ2V0KFBsYXRmb3JtV2hlZWxFdmVudCYgZXZlbnQsIFdp
ZGdldCogd2lkCiAgICAgcmV0dXJuIHN0YXRpY19jYXN0PEZyYW1lVmlldyo+KHdpZGdldCktPmZy
YW1lKCktPmV2ZW50SGFuZGxlcigpLT5oYW5kbGVXaGVlbEV2ZW50KGV2ZW50KTsKIH0KIAorI2lm
IEVOQUJMRShHRVNUVVJFX0VWRU5UUykKK2Jvb2wgRXZlbnRIYW5kbGVyOjpwYXNzR2VzdHVyZUV2
ZW50VG9XaWRnZXQoY29uc3QgUGxhdGZvcm1HZXN0dXJlRXZlbnQmLCBXaWRnZXQqKQoreworICAg
IG5vdEltcGxlbWVudGVkKCk7CisgICAgcmV0dXJuIGZhbHNlOworfQorI2VuZGlmCisKIFBhc3NS
ZWZQdHI8Q2xpcGJvYXJkPiBFdmVudEhhbmRsZXI6OmNyZWF0ZURyYWdnaW5nQ2xpcGJvYXJkKCkg
Y29uc3QKIHsKICAgICByZXR1cm4gQ2xpcGJvYXJkRWZsOjpjcmVhdGUoQ2xpcGJvYXJkV3JpdGFi
bGUsIENsaXBib2FyZDo6RHJhZ0FuZERyb3ApOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cGFnZS9ndGsvRXZlbnRIYW5kbGVyR3RrLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvZ3RrL0V2
ZW50SGFuZGxlckd0ay5jcHAKaW5kZXggYWI1NGQ4MzhkYmQ5ZGIyYjIwNDUxOThkYjEyZGIxYTlj
ZTg3YmViOS4uNWU0M2FiZDY3N2FlZjgxMGIxYmY0NDRmMjVkOGUyZTRiM2M0MjkwOCAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvcGFnZS9ndGsvRXZlbnRIYW5kbGVyR3RrLmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9wYWdlL2d0ay9FdmVudEhhbmRsZXJHdGsuY3BwCkBAIC05NCw2ICs5NCwx
NCBAQCBib29sIEV2ZW50SGFuZGxlcjo6cGFzc1doZWVsRXZlbnRUb1dpZGdldChQbGF0Zm9ybVdo
ZWVsRXZlbnQmIGV2ZW50LCBXaWRnZXQqIHdpZAogICAgIHJldHVybiBzdGF0aWNfY2FzdDxGcmFt
ZVZpZXcqPih3aWRnZXQpLT5mcmFtZSgpLT5ldmVudEhhbmRsZXIoKS0+aGFuZGxlV2hlZWxFdmVu
dChldmVudCk7CiB9CiAKKyNpZiBFTkFCTEUoR0VTVFVSRV9FVkVOVFMpCitib29sIEV2ZW50SGFu
ZGxlcjo6cGFzc0dlc3R1cmVFdmVudFRvV2lkZ2V0KFBsYXRmb3JtR2VzdHVyZUV2ZW50JiwgV2lk
Z2V0KikKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworICAgIHJldHVybiBmYWxzZTsKK30KKyNl
bmRpZgorCiBQYXNzUmVmUHRyPENsaXBib2FyZD4gRXZlbnRIYW5kbGVyOjpjcmVhdGVEcmFnZ2lu
Z0NsaXBib2FyZCgpIGNvbnN0CiB7CiAgICAgcmV0dXJuIENsaXBib2FyZEd0azo6Y3JlYXRlKENs
aXBib2FyZFdyaXRhYmxlLCBEYXRhT2JqZWN0R3RrOjpjcmVhdGUoKSwgQ2xpcGJvYXJkOjpEcmFn
QW5kRHJvcCwgbV9mcmFtZSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL21hYy9F
dmVudEhhbmRsZXJNYWMubW0gYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL21hYy9FdmVudEhhbmRsZXJN
YWMubW0KaW5kZXggNzYyMjkzNWI3NGMyODg2ZWQyNjA3ODJkM2YwNmU3ZmJhMGI1OGViZi4uMDc3
ZTYyYmU3ZTBmYzY0ODQ1NWU1MmEzMDUzYTMxZGE3ZWJlYmJlMCAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvcGFnZS9tYWMvRXZlbnRIYW5kbGVyTWFjLm1tCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3BhZ2UvbWFjL0V2ZW50SGFuZGxlck1hYy5tbQpAQCAtNzI0LDQgKzcyNCwyNSBAQCB1bnNpZ25l
ZCBFdmVudEhhbmRsZXI6OmFjY2Vzc0tleU1vZGlmaWVycygpCiAgICAgcmV0dXJuIFBsYXRmb3Jt
S2V5Ym9hcmRFdmVudDo6Q3RybEtleSB8IFBsYXRmb3JtS2V5Ym9hcmRFdmVudDo6QWx0S2V5Owog
fQogCisjaWYgRU5BQkxFKEdFU1RVUkVfRVZFTlRTKQorYm9vbCBFdmVudEhhbmRsZXI6OnBhc3NH
ZXN0dXJlRXZlbnRUb1dpZGdldChjb25zdCBQbGF0Zm9ybUdlc3R1cmVFdmVudCYgZ2VzdHVyZUV2
ZW50LCBXaWRnZXQqIHdpZGdldCkKK3sKKyAgICBCRUdJTl9CTE9DS19PQkpDX0VYQ0VQVElPTlM7
CisKKyAgICBpZiAoIXdpZGdldCkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgTlNWaWV3
KiBub2RlVmlldyA9IHdpZGdldC0+cGxhdGZvcm1XaWRnZXQoKTsKKyAgICBpZiAoIW5vZGVWaWV3
KSB7CisgICAgICAgIC8vIFdlYktpdDIgY29kZSBwYXRoLgorICAgICAgICBpZiAoIXdpZGdldC0+
aXNGcmFtZVZpZXcoKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgICAgICByZXR1
cm4gc3RhdGljX2Nhc3Q8RnJhbWVWaWV3Kj4od2lkZ2V0KS0+ZnJhbWUoKS0+ZXZlbnRIYW5kbGVy
KCktPmhhbmRsZUdlc3R1cmVFdmVudChnZXN0dXJlRXZlbnQpOworICAgIH0KKyAgICBFTkRfQkxP
Q0tfT0JKQ19FWENFUFRJT05TOworICAgIHJldHVybiBmYWxzZTsKK30KKyNlbmRpZgorCiB9CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL3F0L0V2ZW50SGFuZGxlclF0LmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL3BhZ2UvcXQvRXZlbnRIYW5kbGVyUXQuY3BwCmluZGV4IDJiODgwNGQ0MGIw
YTA2Njg5MzdjYmVkNjZiZWM0MzU0MmI0NmNhMmYuLjllODY0NWM0Y2MyZTZjMDUxYmUwYmQ5NmQx
YTgwZDE4YjA4YzBlMzMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvcXQvRXZlbnRI
YW5kbGVyUXQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvcXQvRXZlbnRIYW5kbGVyUXQu
Y3BwCkBAIC05OCw2ICs5OCwxNyBAQCBib29sIEV2ZW50SGFuZGxlcjo6cGFzc1doZWVsRXZlbnRU
b1dpZGdldChQbGF0Zm9ybVdoZWVsRXZlbnQmIGV2ZW50LCBXaWRnZXQqIHdpZAogICAgIHJldHVy
biBzdGF0aWNfY2FzdDxGcmFtZVZpZXcqPih3aWRnZXQpLT5mcmFtZSgpLT5ldmVudEhhbmRsZXIo
KS0+aGFuZGxlV2hlZWxFdmVudChldmVudCk7CiB9CiAKKyNpZiBFTkFCTEUoR0VTVFVSRV9FVkVO
VFMpCitib29sIEV2ZW50SGFuZGxlcjo6cGFzc0dlc3R1cmVFdmVudFRvV2lkZ2V0KFBsYXRmb3Jt
R2VzdHVyZUV2ZW50JiBldmVudCwgV2lkZ2V0KiB3aWRnZXQpCit7CisgICAgUV9BU1NFUlQod2lk
Z2V0KTsKKyAgICBpZiAoIXdpZGdldC0+aXNGcmFtZVZpZXcoKSkKKyAgICAgICAgcmV0dXJuIGZh
bHNlOworCisgICAgcmV0dXJuIHN0YXRpY19jYXN0PEZyYW1lVmlldyo+KHdpZGdldCktPmZyYW1l
KCktPmV2ZW50SGFuZGxlcigpLT5oYW5kbGVHZXN0dXJlRXZlbnQoZXZlbnQpOworfQorI2VuZGlm
CisKIFBhc3NSZWZQdHI8Q2xpcGJvYXJkPiBFdmVudEhhbmRsZXI6OmNyZWF0ZURyYWdnaW5nQ2xp
cGJvYXJkKCkgY29uc3QKIHsKICAgICByZXR1cm4gQ2xpcGJvYXJkUXQ6OmNyZWF0ZShDbGlwYm9h
cmRXcml0YWJsZSwgbV9mcmFtZSwgQ2xpcGJvYXJkOjpEcmFnQW5kRHJvcCk7CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wYWdlL3dpbi9FdmVudEhhbmRsZXJXaW4uY3BwIGIvU291cmNlL1dl
YkNvcmUvcGFnZS93aW4vRXZlbnRIYW5kbGVyV2luLmNwcAppbmRleCA3MjFlMzUwZTgyZmJmZmRj
MmVlODNhNDJhNjIxMDZjNDRkMGU2OTE2Li5kN2ExNGJlMzRmZGE5MWU1Y2Y2MTEzNzk3MGYxY2Zj
ZDZlZGIwMzNiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL3dpbi9FdmVudEhhbmRs
ZXJXaW4uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2Uvd2luL0V2ZW50SGFuZGxlcldpbi5j
cHAKQEAgLTgxLDYgKzgxLDE0IEBAIGJvb2wgRXZlbnRIYW5kbGVyOjpwYXNzV2hlZWxFdmVudFRv
V2lkZ2V0KFBsYXRmb3JtV2hlZWxFdmVudCYgd2hlZWxFdmVudCwgV2lkZ2V0CiAgICAgcmV0dXJu
IHN0YXRpY19jYXN0PEZyYW1lVmlldyo+KHdpZGdldCktPmZyYW1lKCktPmV2ZW50SGFuZGxlcigp
LT5oYW5kbGVXaGVlbEV2ZW50KHdoZWVsRXZlbnQpOwogfQogCisjaWYgRU5BQkxFKEdFU1RVUkVf
RVZFTlRTKQorYm9vbCBFdmVudEhhbmRsZXI6OnBhc3NHZXN0dXJlRXZlbnRUb1dpZGdldChjb25z
dCBQbGF0Zm9ybUdlc3R1cmVFdmVudCYsIFdpZGdldCopCit7CisgICAgbm90SW1wbGVtZW50ZWQo
KTsKKyAgICByZXR1cm4gZmFsc2U7Cit9CisjZW5kaWYKKwogYm9vbCBFdmVudEhhbmRsZXI6OnRh
YnNUb0FsbEZvcm1Db250cm9scyhLZXlib2FyZEV2ZW50KikgY29uc3QKIHsKICAgICByZXR1cm4g
dHJ1ZTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2Uvd3gvRXZlbnRIYW5kbGVyV3gu
Y3BwIGIvU291cmNlL1dlYkNvcmUvcGFnZS93eC9FdmVudEhhbmRsZXJXeC5jcHAKaW5kZXggYmEy
ZjljZDViYjQ1NDhjNGIxNWU5NzM3MDZkNDMzYmE4OGQyOTVhOS4uNWZiZmJjZDI2N2Q4OTdmNjQz
Y2YzOTk1NWQ3YjMzMjQ5ZTdkYWNlYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGFnZS93
eC9FdmVudEhhbmRsZXJXeC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGFnZS93eC9FdmVudEhh
bmRsZXJXeC5jcHAKQEAgLTgyLDYgKzgyLDE0IEBAIGJvb2wgRXZlbnRIYW5kbGVyOjpwYXNzV2hl
ZWxFdmVudFRvV2lkZ2V0KFBsYXRmb3JtV2hlZWxFdmVudCYgZXZlbnQsIFdpZGdldCogd2lkCiAg
ICAgcmV0dXJuIHN0YXRpY19jYXN0PEZyYW1lVmlldyo+KHdpZGdldCktPmZyYW1lKCktPmV2ZW50
SGFuZGxlcigpLT5oYW5kbGVXaGVlbEV2ZW50KGV2ZW50KTsKIH0KIAorI2lmIEVOQUJMRShHRVNU
VVJFX0VWRU5UUykKK2Jvb2wgRXZlbnRIYW5kbGVyOjpwYXNzR2VzdHVyZUV2ZW50VG9XaWRnZXQo
UGxhdGZvcm1HZXN0dXJlRXZlbnQmLCBXaWRnZXQqKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7
IAorICAgIHJldHVybiBmYWxzZTsgCit9CisjZW5kaWYKKwogYm9vbCBFdmVudEhhbmRsZXI6OnRh
YnNUb0FsbEZvcm1Db250cm9scyhLZXlib2FyZEV2ZW50KiBldmVudCkgY29uc3QgCiB7IAogICAg
IG5vdEltcGxlbWVudGVkKCk7IApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
U2Nyb2xsQW5pbWF0b3IuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU2Nyb2xsQW5pbWF0
b3IuY3BwCmluZGV4IDMyOThlMThhNTI1N2MxYzdkZmU2ZjE0MDhkOTA5OWEwNzE2ZDJiM2UuLjFj
MTAxNzgyZjU4YTFlM2U3ZDdhYjY5OTViMGQ5YzVkMTkwYzhmMTQgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL1Njcm9sbEFuaW1hdG9yLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9TY3JvbGxBbmltYXRvci5jcHAKQEAgLTM3LDYgKzM3LDEwIEBACiAjaW5jbHVk
ZSA8YWxnb3JpdGhtPgogI2luY2x1ZGUgPHd0Zi9QYXNzT3duUHRyLmg+CiAKKyNpZiBFTkFCTEUo
R0VTVFVSRV9SRUNPR05JWkVSKSB8fCBFTkFCTEUoR0VTVFVSRV9FVkVOVFMpCisjaW5jbHVkZSAi
UGxhdGZvcm1HZXN0dXJlRXZlbnQuaCIKKyNlbmRpZgorCiB1c2luZyBuYW1lc3BhY2Ugc3RkOwog
CiBuYW1lc3BhY2UgV2ViQ29yZSB7CkBAIC0xMjEsOCArMTI1LDI5IEBAIGJvb2wgU2Nyb2xsQW5p
bWF0b3I6OmhhbmRsZVdoZWVsRXZlbnQoY29uc3QgUGxhdGZvcm1XaGVlbEV2ZW50JiBlKQogfQog
CiAjaWYgRU5BQkxFKEdFU1RVUkVfRVZFTlRTKQotdm9pZCBTY3JvbGxBbmltYXRvcjo6aGFuZGxl
R2VzdHVyZUV2ZW50KGNvbnN0IFBsYXRmb3JtR2VzdHVyZUV2ZW50JikKK3ZvaWQgU2Nyb2xsQW5p
bWF0b3I6OmhhbmRsZUdlc3R1cmVFdmVudChjb25zdCBQbGF0Zm9ybUdlc3R1cmVFdmVudCYgZXZl
bnQpCiB7CisgICAgc3dpdGNoIChldmVudC50eXBlKCkpIHsKKyAgICBjYXNlIFBsYXRmb3JtR2Vz
dHVyZUV2ZW50OjpTY3JvbGxCZWdpblR5cGU6CisgICAgY2FzZSBQbGF0Zm9ybUdlc3R1cmVFdmVu
dDo6U2Nyb2xsRW5kVHlwZToKKyAgICAgICAgLy8gRklYTUU6IHRlc3QgaGFuZGxpbmcgaGVyZS4u
LgorICAgICAgICBicmVhazsKKyAgICBjYXNlIFBsYXRmb3JtR2VzdHVyZUV2ZW50OjpTY3JvbGxV
cGRhdGVUeXBlOiB7CisgICAgICAgIEludFNpemUgbWF4Rm9yd2FyZFNjcm9sbERlbHRhID0gbV9z
Y3JvbGxhYmxlQXJlYS0+bWF4aW11bVNjcm9sbFBvc2l0aW9uKCkgLSBtX3Njcm9sbGFibGVBcmVh
LT5zY3JvbGxQb3NpdGlvbigpOworICAgICAgICBJbnRTaXplIG1heEJhY2t3YXJkU2Nyb2xsRGVs
dGEgPSBtX3Njcm9sbGFibGVBcmVhLT5zY3JvbGxQb3NpdGlvbigpIC0gbV9zY3JvbGxhYmxlQXJl
YS0+bWluaW11bVNjcm9sbFBvc2l0aW9uKCk7CisgICAgICAgIGZsb2F0IGRlbHRhWCA9IChldmVu
dC5kZWx0YVgoKSA8IDAuZikgPyBtYXgoZXZlbnQuZGVsdGFYKCksIC1zdGF0aWNfY2FzdDxmbG9h
dD4obWF4Rm9yd2FyZFNjcm9sbERlbHRhLndpZHRoKCkpKSA6IG1pbihldmVudC5kZWx0YVgoKSwg
ZmxvYXQobWF4QmFja3dhcmRTY3JvbGxEZWx0YS53aWR0aCgpKSk7CisgICAgICAgIGZsb2F0IGRl
bHRhWSA9IChldmVudC5kZWx0YVkoKSA8IDAuZikgPyBtYXgoZXZlbnQuZGVsdGFZKCksIC1zdGF0
aWNfY2FzdDxmbG9hdD4obWF4Rm9yd2FyZFNjcm9sbERlbHRhLmhlaWdodCgpKSkgOiBtaW4oZXZl
bnQuZGVsdGFZKCksIGZsb2F0KG1heEJhY2t3YXJkU2Nyb2xsRGVsdGEuaGVpZ2h0KCkpKTsKKwor
ICAgICAgICBJbnRSZWN0IGNvbnRlbnRSZWN0ID0gbV9zY3JvbGxhYmxlQXJlYS0+dmlzaWJsZUNv
bnRlbnRSZWN0KHRydWUpOworICAgICAgICBGbG9hdFBvaW50IG9mZnNldCA9IEZsb2F0UG9pbnQo
Y29udGVudFJlY3QueCgpIC0gZGVsdGFYLCBjb250ZW50UmVjdC55KCkgLSBkZWx0YVkpOworICAg
ICAgICBzY3JvbGxUb09mZnNldFdpdGhvdXRBbmltYXRpb24ob2Zmc2V0KTsKKyAgICAgICAgYnJl
YWs7CisgICAgfQorICAgIGNhc2UgUGxhdGZvcm1HZXN0dXJlRXZlbnQ6OlRhcERvd25UeXBlOgor
ICAgIGNhc2UgUGxhdGZvcm1HZXN0dXJlRXZlbnQ6OlRhcFR5cGU6CisgICAgY2FzZSBQbGF0Zm9y
bUdlc3R1cmVFdmVudDo6RG91YmxlVGFwVHlwZToKKyAgICAgICAgYnJlYWs7CisgICAgfQogfQog
I2VuZGlmCiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1Njcm9sbEFuaW1h
dG9yTm9uZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxBbmltYXRvck5vbmUu
Y3BwCmluZGV4IDI2MjM4YzczYjIxMmFkODA5ODQyNTIxY2UzM2RhMDNmZjZkOGMwMDYuLmZjMDdl
YzJiNzIzMmE2ZGVjNmYzZWQ0ZjkyYzA1YzI1NjM3YTkyNTUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL1Njcm9sbEFuaW1hdG9yTm9uZS5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vU2Nyb2xsQW5pbWF0b3JOb25lLmNwcApAQCAtNTE5LDkgKzUxOSwxNCBAQCB2
b2lkIFNjcm9sbEFuaW1hdG9yTm9uZTo6aGFuZGxlR2VzdHVyZUV2ZW50KGNvbnN0IFBsYXRmb3Jt
R2VzdHVyZUV2ZW50JiBwZ2UpCiAgICAgY2FzZSBQbGF0Zm9ybUdlc3R1cmVFdmVudDo6RG91Ymxl
VGFwVHlwZToKICAgICAgICAgem9vbShwZ2UpOwogICAgICAgICBicmVhazsKLQorICAgIGNhc2Ug
UGxhdGZvcm1HZXN0dXJlRXZlbnQ6OlNjcm9sbEJlZ2luVHlwZToKKyAgICBjYXNlIFBsYXRmb3Jt
R2VzdHVyZUV2ZW50OjpTY3JvbGxFbmRUeXBlOgorICAgICAgICBicmVhazsKKyAgICBjYXNlIFBs
YXRmb3JtR2VzdHVyZUV2ZW50OjpTY3JvbGxVcGRhdGVUeXBlOiAKKyAgICAgICAgU2Nyb2xsQW5p
bWF0b3I6OmhhbmRsZUdlc3R1cmVFdmVudChwZ2UpOworICAgICAgICBicmVhazsKICAgICBkZWZh
dWx0OgotICAgICAgICAvLyBUT0RPOiBhZGQgYW55IG90aGVyIGV2ZW50IHR5cGVzIHdlIHNob3Vs
ZCBoYW5kbGUKKyAgICAgICAgLy8gRklYTUU6IGFkZCBhbnkgb3RoZXIgZXZlbnQgdHlwZXMgd2Ug
c2hvdWxkIGhhbmRsZQogICAgICAgICB7IH0KICAgICB9CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQm94LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9SZW5kZXJCb3guY3BwCmluZGV4IDk5NjI5MzM4NmI4ZTAxZWM1MDIxZmMzNjcyNzE4ZTViNDY0
OWMyNmYuLjMzZGEzYWFjMDFlNjIyZmVhYjkwMWFjM2IzZTUzOWVjN2E0MTMxYzAgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCb3guY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCb3guY3BwCkBAIC02NzEsNiArNjcxLDIwIEBAIGJvb2wg
UmVuZGVyQm94OjpzY3JvbGwoU2Nyb2xsRGlyZWN0aW9uIGRpcmVjdGlvbiwgU2Nyb2xsR3JhbnVs
YXJpdHkgZ3JhbnVsYXJpdHksCiAgICAgcmV0dXJuIGZhbHNlOwogfQogCisjaWYgRU5BQkxFKEdF
U1RVUkVfRVZFTlRTKQorYm9vbCBSZW5kZXJCb3g6Omdlc3R1cmUoY29uc3QgUGxhdGZvcm1HZXN0
dXJlRXZlbnQmIGUpCit7CisgICAgUmVuZGVyTGF5ZXIqIHJlbmRlckxheWVyID0gbGF5ZXIoKTsK
KyAgICBpZiAocmVuZGVyTGF5ZXIpIHsKKyAgICAgICAgcmVuZGVyTGF5ZXItPmhhbmRsZUdlc3R1
cmVFdmVudChlKTsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorCisgICAgLy8gRklYTUU6
IERpc3BhdGNoIHRvIFJlbmRlckJsb2NrIGluc3RhbmNlcyBhcyB3ZWxsLgorICAgIHJldHVybiBm
YWxzZTsKK30KKyNlbmRpZgorCiBib29sIFJlbmRlckJveDo6bG9naWNhbFNjcm9sbChTY3JvbGxM
b2dpY2FsRGlyZWN0aW9uIGRpcmVjdGlvbiwgU2Nyb2xsR3JhbnVsYXJpdHkgZ3JhbnVsYXJpdHks
IGZsb2F0IG11bHRpcGxpZXIsIE5vZGUqKiBzdG9wTm9kZSkKIHsKICAgICBib29sIHNjcm9sbGVk
ID0gZmFsc2U7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQm94
LmggYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQm94LmgKaW5kZXggMzI0N2Q4NTZk
YmE0Mzg4MzYxN2NlZDg2NjEzYWRiODJlMTBkOTE0YS4uZDA2MzQ2MjVhODYzMGU5YWMwMjZhMzU4
MDhlMmYzY2MwYmRmNDAzMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlckJveC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCb3guaApAQCAt
MzEsNiArMzEsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNzIFJlbmRlckJveFJlZ2lv
bkluZm87CiBjbGFzcyBSZW5kZXJSZWdpb247CitjbGFzcyBQbGF0Zm9ybUdlc3R1cmVFdmVudDsK
IHN0cnVjdCBQYWludEluZm87CiAKIGVudW0gTG9naWNhbFdpZHRoVHlwZSB7IExvZ2ljYWxXaWR0
aCwgTWluTG9naWNhbFdpZHRoLCBNYXhMb2dpY2FsV2lkdGggfTsKQEAgLTQzMyw2ICs0MzQsMTAg
QEAgcHVibGljOgogICAgIHZpcnR1YWwgYm9vbCBuZWVkc1ByZWZlcnJlZFdpZHRoc1JlY2FsY3Vs
YXRpb24oKSBjb25zdDsKICAgICB2aXJ0dWFsIHZvaWQgY29tcHV0ZUludHJpbnNpY1JhdGlvSW5m
b3JtYXRpb24oRmxvYXRTaXplJiAvKiBpbnRyaW5zaWNSYXRpbyAqLywgYm9vbCYgLyogaXNQZXJj
ZW50YWdlSW50cmluc2ljU2l6ZSAqLykgY29uc3QgeyB9CiAKKyNpZiBFTkFCTEUoR0VTVFVSRV9F
VkVOVFMpCisgICAgdmlydHVhbCBib29sIGdlc3R1cmUoY29uc3QgUGxhdGZvcm1HZXN0dXJlRXZl
bnQmKTsKKyNlbmRpZgorCiBwcm90ZWN0ZWQ6CiAgICAgdmlydHVhbCB2b2lkIHdpbGxCZURlc3Ry
b3llZCgpOwogCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cgYi9MYXlvdXRUZXN0
cy9DaGFuZ2VMb2cKaW5kZXggMGFiNTI4NWY0ZjFiOTlmOGFiODc5NjQ5YWE5MWMxYTI1Zjk4M2Y2
OC4uMWFlZjlmNWYxMzI0MjExYjVlNWU2ZWM5ZGFlMGI3N2NkZjY4Yzk3MCAxMDA3NTUKLS0tIGEv
TGF5b3V0VGVzdHMvQ2hhbmdlTG9nCisrKyBiL0xheW91dFRlc3RzL0NoYW5nZUxvZwpAQCAtMSwz
ICsxLDIyIEBACisyMDExLTEwLTI3ICBSb2JlcnQgS3JvZWdlciAgPHJqa3JvZWdlQGNocm9taXVt
Lm9yZz4KKworICAgICAgICBQbGF0Zm9ybUdlc3R1cmVFdmVudDo6aGFuZGxlR2VzdHVyZUV2ZW50
IHNob3VsZCBoaXQgdGVzdCB3aGlsZSBkaXNwYXRjaGluZyBTY3JvbGwqIGV2ZW50cy4KKyAgICAg
ICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTY3ODIyCisKKyAgICAg
ICAgVGVzdHMgdG8gdmVyaWZ5IHRoYXQgdGhlIFBsYXRmb3JtR2VzdHVyZUV2ZW50IFNjcm9sbCpU
eXBlIGV2ZW50cworICAgICAgICBhcmUgYmVpbmcgY29ycmVjdGx5IGRpc3BhdGNoZWQgYW5kIHRo
YXQgbGF0Y2hpbmcgZG9lcyBub3QgZmFpbAorICAgICAgICBpbiB0aGUgcHJlc2VuY2Ugb2YgdGhl
IHJlbW92YWwgb2YgdGhlIHRhcmdldCBlbGVtZW50LgorCisgICAgICAgIFJldmlld2VkIGJ5IE5P
Qk9EWSAoT09QUyEpLgorCisgICAgICAgICogZmFzdC9ldmVudHMvdG91Y2gvZ2VzdHVyZS90b3Vj
aC1nZXN0dXJlLXNjcm9sbC1pZnJhbWUtZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAgICAgKiBm
YXN0L2V2ZW50cy90b3VjaC9nZXN0dXJlL3RvdWNoLWdlc3R1cmUtc2Nyb2xsLWlmcmFtZS5odG1s
OiBBZGRlZC4KKyAgICAgICAgKiBmYXN0L2V2ZW50cy90b3VjaC9nZXN0dXJlL3RvdWNoLWdlc3R1
cmUtc2Nyb2xsLXBhZ2UtZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAgICAgKiBmYXN0L2V2ZW50
cy90b3VjaC9nZXN0dXJlL3RvdWNoLWdlc3R1cmUtc2Nyb2xsLXBhZ2UuaHRtbDogQWRkZWQuCisg
ICAgICAgICogZmFzdC9ldmVudHMvdG91Y2gvZ2VzdHVyZS90b3VjaC1nZXN0dXJlLXNjcm9sbC1z
aHktdGFyZ2V0LWV4cGVjdGVkLnR4dDogQWRkZWQuCisgICAgICAgICogZmFzdC9ldmVudHMvdG91
Y2gvZ2VzdHVyZS90b3VjaC1nZXN0dXJlLXNjcm9sbC1zaHktdGFyZ2V0Lmh0bWw6IEFkZGVkLgor
ICAgICAgICAqIGZhc3QvZXZlbnRzL3RvdWNoL3Jlc291cmNlcy9zY3JvbGwtaW5zaWRlLWlmcmFt
ZS5odG1sOiBBZGRlZC4KKwogMjAxMS0xMC0yNyAgUGhpbGlwcGUgTm9ybWFuZCAgPHBub3JtYW5k
QGlnYWxpYS5jb20+CiAKICAgICAgICAgVW5yZXZpZXdlZCwgR1RLIHJlYmFzZWxpbmUuCmRpZmYg
LS1naXQgYS9MYXlvdXRUZXN0cy9mYXN0L2V2ZW50cy90b3VjaC9nZXN0dXJlL3RvdWNoLWdlc3R1
cmUtc2Nyb2xsLWlmcmFtZS1leHBlY3RlZC50eHQgYi9MYXlvdXRUZXN0cy9mYXN0L2V2ZW50cy90
b3VjaC9nZXN0dXJlL3RvdWNoLWdlc3R1cmUtc2Nyb2xsLWlmcmFtZS1leHBlY3RlZC50eHQKbmV3
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMC4uZmIwNDYzOTQzZGJlMGI1YzA1ZjJlOWQzNjFiN2NiMDZlOWYwMDBiNQotLS0gL2Rl
di9udWxsCisrKyBiL0xheW91dFRlc3RzL2Zhc3QvZXZlbnRzL3RvdWNoL2dlc3R1cmUvdG91Y2gt
Z2VzdHVyZS1zY3JvbGwtaWZyYW1lLWV4cGVjdGVkLnR4dApAQCAtMCwwICsxLDE2IEBACisKK1Ro
aXMgdGVzdHMgZ2VzdHVyZSBzY3JvbGxpbmcgaW4gaWZyYW1lcy4gUmVkLWdyZWVuIHN0cmlwIGlz
IHNjcm9sbGVkIG9uIHBhc3MuCisKK09uIHN1Y2Nlc3MsIHlvdSB3aWxsIHNlZSBhIHNlcmllcyBv
ZiAiUEFTUyIgbWVzc2FnZXMsIGZvbGxvd2VkIGJ5ICJURVNUIENPTVBMRVRFIi4KKworCitmaXJz
dCBnZXN0dXJlCitQQVNTIHRvdWNodGFyZ2V0LmNvbnRlbnREb2N1bWVudC5ib2R5LnNjcm9sbFRv
cCBpcyAxNDAKK1BBU1MgdG91Y2h0YXJnZXQuY29udGVudERvY3VtZW50LmJvZHkuc2Nyb2xsTGVm
dCBpcyAwCitzZWNvbmQgZ2VzdHVyZQorUEFTUyB0b3VjaHRhcmdldC5jb250ZW50RG9jdW1lbnQu
Ym9keS5zY3JvbGxUb3AgaXMgMjAwCitQQVNTIHRvdWNodGFyZ2V0LmNvbnRlbnREb2N1bWVudC5i
b2R5LnNjcm9sbExlZnQgaXMgMAorUEFTUyBzdWNjZXNzZnVsbHlQYXJzZWQgaXMgdHJ1ZQorCitU
RVNUIENPTVBMRVRFCisKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2Zhc3QvZXZlbnRzL3RvdWNo
L2dlc3R1cmUvdG91Y2gtZ2VzdHVyZS1zY3JvbGwtaWZyYW1lLmh0bWwgYi9MYXlvdXRUZXN0cy9m
YXN0L2V2ZW50cy90b3VjaC9nZXN0dXJlL3RvdWNoLWdlc3R1cmUtc2Nyb2xsLWlmcmFtZS5odG1s
Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAuLjkxNDQxMWNhOGZmMjBhNzBlMzQ4MTc1Nzg2ZTM0YWVlN2NjM2VjOTQKLS0t
IC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9mYXN0L2V2ZW50cy90b3VjaC9nZXN0dXJlL3Rv
dWNoLWdlc3R1cmUtc2Nyb2xsLWlmcmFtZS5odG1sCkBAIC0wLDAgKzEsMTIxIEBACis8IURPQ1RZ
UEUgSFRNTCBQVUJMSUMgIi0vL0lFVEYvL0RURCBIVE1MLy9FTiI+Cis8aHRtbD4KKzxoZWFkPgor
PGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSIuLi8uLi8uLi9qcy9yZXNvdXJjZXMvanMtdGVz
dC1zdHlsZS5jc3MiPgorPHNjcmlwdCBzcmM9Ii4uLy4uLy4uL2pzL3Jlc291cmNlcy9qcy10ZXN0
LXByZS5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0iLi4vLi4vLi4vanMvcmVzb3VyY2VzL2pz
LXRlc3QtcG9zdC1mdW5jdGlvbi5qcyI+PC9zY3JpcHQ+Cis8c3R5bGUgdHlwZT0idGV4dC9jc3Mi
PgorI3RvdWNodGFyZ2V0IHsKKyAgd2lkdGg6IDIwMHB4OworICBoZWlnaHQ6IDIwMHB4OworICBw
b3NpdGlvbjogcmVsYXRpdmU7CisgIGJhY2tncm91bmQ6IHdoaXRlOworfQorPC9zdHlsZT4KKzwv
aGVhZD4KKzxib2R5PgorPGlmcmFtZSBpZD0idG91Y2h0YXJnZXQiIHNyYz0iLi4vcmVzb3VyY2Vz
L3Njcm9sbC1pbnNpZGUtaWZyYW1lLmh0bWwiPjwvaWZyYW1lPgorICAgIDxwIGlkPSJkZXNjcmlw
dGlvbiI+PC9wPgorPGRpdiBpZD0iY29uc29sZSI+PC9kaXY+Cis8c2NyaXB0IHR5cGU9InRleHQv
amF2YXNjcmlwdCI+CisKK3ZhciB0b3VjaHRhcmdldDsKK3ZhciBleHBlY3RlZFNjcm9sbHNUb3Rh
bCA9IDI7Cit2YXIgc2Nyb2xsc09jY3VycmVkID0gMDsKK3ZhciBzY3JvbGxBbW91bnRYID0gWycw
JywgJzAnXTsKK3ZhciBzY3JvbGxBbW91bnRZID0gWycxNDAnLCAnMjAwJ107CisKK2Z1bmN0aW9u
IGNoZWNrU2Nyb2xsT2Zmc2V0KCkKK3sKKyAgICB0b3VjaHRhcmdldCA9IGRvY3VtZW50LmdldEVs
ZW1lbnRCeUlkKCd0b3VjaHRhcmdldCcpOworICAgIGlmICh3aW5kb3cuZXZlbnRTZW5kZXIpIHsK
KyAgICAgICAgc2hvdWxkQmUoJ3RvdWNodGFyZ2V0LmNvbnRlbnREb2N1bWVudC5ib2R5LnNjcm9s
bFRvcCcsIHNjcm9sbEFtb3VudFlbc2Nyb2xsc09jY3VycmVkXSk7CisgICAgICAgIHNob3VsZEJl
KCd0b3VjaHRhcmdldC5jb250ZW50RG9jdW1lbnQuYm9keS5zY3JvbGxMZWZ0Jywgc2Nyb2xsQW1v
dW50WFtzY3JvbGxzT2NjdXJyZWRdKTsKKyAgICAgICAgc2Nyb2xsc09jY3VycmVkKys7CisgICAg
fQorCisgICAgaWYgKHNjcm9sbHNPY2N1cnJlZCA9PSBleHBlY3RlZFNjcm9sbHNUb3RhbCkgewor
ICAgICAgICAvLyBJZiB3ZSd2ZSBnb3QgaGVyZSwgd2UndmUgcGFzc2VkLgorICAgICAgICBzdWNj
ZXNzZnVsbHlQYXJzZWQgPSB0cnVlOworICAgICAgICBpc1N1Y2Nlc3NmdWxseVBhcnNlZCgpOwor
ICAgICAgICBpZiAod2luZG93LmxheW91dFRlc3RDb250cm9sbGVyKQorICAgICAgICAgICAgbGF5
b3V0VGVzdENvbnRyb2xsZXIubm90aWZ5RG9uZSgpOworICAgIH0gZWxzZSB7CisgICAgICAgIHNl
Y29uZFRvdWNoRHJhZ1NlcXVlbmNlKCk7CisgICAgfQorfQorCitmdW5jdGlvbiBmaW5nZXJVcChl
dmVudCkKK3sKKyAgICBpZiAoIXdpbmRvdy5sYXlvdXRUZXN0Q29udHJvbGxlcikKKyAgICAgICAg
ZGVidWcoJ21vdmVkOiAnICsgZXZlbnQuY3VycmVudFRhcmdldC5zY3JvbGxUb3AgKyAnLCAnICsg
ZXZlbnQuY3VycmVudFRhcmdldC5zY3JvbGxMZWZ0KTsKKyAgICByZXR1cm4gdHJ1ZTsgIC8vIFdh
bnQgdGhlIGRlZmF1bHQgYmVoYXZpb3VyLgorfQorCitmdW5jdGlvbiBmaXJzdFRvdWNoRHJhZ1Nl
cXVlbmNlKCkKK3sKKyAgICBkZWJ1ZygiZmlyc3QgZ2VzdHVyZSIpOworICAgIGV2ZW50U2VuZGVy
LmNsZWFyVG91Y2hQb2ludHMoKTsKKyAgICBldmVudFNlbmRlci5hZGRUb3VjaFBvaW50KDEyLCAx
NTApOworICAgIGV2ZW50U2VuZGVyLnRvdWNoU3RhcnQoKTsKKworICAgIC8vIFNjcm9sbCB0aGUg
ZGl2IHRvIHRoZSBsZWZ0LgorICAgIGV2ZW50U2VuZGVyLnVwZGF0ZVRvdWNoUG9pbnQoMCwgMTIs
IDEwKTsKKyAgICBldmVudFNlbmRlci50b3VjaE1vdmUoKTsKKworICAgIGV2ZW50U2VuZGVyLnJl
bGVhc2VUb3VjaFBvaW50KDApOworICAgIGV2ZW50U2VuZGVyLnRvdWNoRW5kKCk7CisKKyAgICAv
LyBXYWl0IGZvciBsYXlvdXQuCisgICAgY2hlY2tTY3JvbGxPZmZzZXQoKTsKK30KKworZnVuY3Rp
b24gc2Vjb25kVG91Y2hEcmFnU2VxdWVuY2UoKQoreworICAgIGRlYnVnKCJzZWNvbmQgZ2VzdHVy
ZSIpOworICAgIGV2ZW50U2VuZGVyLmNsZWFyVG91Y2hQb2ludHMoKTsKKyAgICBldmVudFNlbmRl
ci5hZGRUb3VjaFBvaW50KDEyLCAxMDApOworICAgIGV2ZW50U2VuZGVyLnRvdWNoU3RhcnQoKTsK
KworICAgIC8vIFNjcm9sbCB0aGUgcmVjdGFuZ2xlIGRvd24uCisgICAgZXZlbnRTZW5kZXIudXBk
YXRlVG91Y2hQb2ludCgwLCAxMiwgNDApOworICAgIGV2ZW50U2VuZGVyLnRvdWNoTW92ZSgpOwor
CisgICAgZXZlbnRTZW5kZXIucmVsZWFzZVRvdWNoUG9pbnQoMCk7CisgICAgZXZlbnRTZW5kZXIu
dG91Y2hFbmQoKTsKKworICAgIC8vIFdhaXQgZm9yIGxheW91dC4KKyAgICBjaGVja1Njcm9sbE9m
ZnNldCgpOworfQorCitmdW5jdGlvbiBleGl0SWZOZWNlc3NhcnkoKQoreworICAgIGRlYnVnKCdH
ZXN0dXJlIG1hbmFnZXIgbm90IGltcGxlbWVudGVkIG9uIHRoaXMgcGxhdGZvcm0gb3IgYnJva2Vu
Jyk7CisgICAgc3VjY2Vzc2Z1bGx5UGFyc2VkID0gdHJ1ZTsKKyAgICBpc1N1Y2Nlc3NmdWxseVBh
cnNlZCgpOworICAgIGlmICh3aW5kb3cubGF5b3V0VGVzdENvbnRyb2xsZXIpCisgICAgICAgIGxh
eW91dFRlc3RDb250cm9sbGVyLm5vdGlmeURvbmUoKTsKK30KKworaWYgKHdpbmRvdy5sYXlvdXRU
ZXN0Q29udHJvbGxlcikKKyAgICBsYXlvdXRUZXN0Q29udHJvbGxlci53YWl0VW50aWxEb25lKCk7
CisKK2Z1bmN0aW9uIHJ1blRlc3QoKQoreworICAgIHRvdWNodGFyZ2V0ID0gZG9jdW1lbnQuZ2V0
RWxlbWVudEJ5SWQoJ3RvdWNodGFyZ2V0Jyk7CisKKyAgICBpZiAod2luZG93LmV2ZW50U2VuZGVy
KSB7CisgICAgICAgIGRlc2NyaXB0aW9uKCdUaGlzIHRlc3RzIGdlc3R1cmUgc2Nyb2xsaW5nIGlu
IGlmcmFtZXMuICcgKworICAgICAgICAgICAgJ1JlZC1ncmVlbiBzdHJpcCBpcyBzY3JvbGxlZCBv
biBwYXNzLicpOworCisgICAgICAgIGlmIChldmVudFNlbmRlci5jbGVhclRvdWNoUG9pbnRzKQor
ICAgICAgICAgICAgZmlyc3RUb3VjaERyYWdTZXF1ZW5jZSgpOworICAgICAgICBlbHNlCisgICAg
ICAgICAgICBleGl0SWZOZWNlc3NhcnkoKTsKKyAgICB9IGVsc2UgeworICAgICAgICBkZWJ1Zygi
VGhpcyB0ZXN0IHJlcXVpcmVzIER1bXBSZW5kZXJUcmVlLiAgVG91Y2gtc2Nyb2xsIHRoZSByZWQv
Z3JlZW4gc3RyaXAuIik7CisgICAgfQorfQorPC9zY3JpcHQ+Cis8L2JvZHk+Cis8L2h0bWw+CmRp
ZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9mYXN0L2V2ZW50cy90b3VjaC9nZXN0dXJlL3RvdWNoLWdl
c3R1cmUtc2Nyb2xsLXBhZ2UtZXhwZWN0ZWQudHh0IGIvTGF5b3V0VGVzdHMvZmFzdC9ldmVudHMv
dG91Y2gvZ2VzdHVyZS90b3VjaC1nZXN0dXJlLXNjcm9sbC1wYWdlLWV4cGVjdGVkLnR4dApuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwLi40Zjk5NjViODdhMDk3YTc4YzUxYzlhMjlhYTZhZmI3MzYzM2E0ZjVhCi0tLSAvZGV2
L251bGwKKysrIGIvTGF5b3V0VGVzdHMvZmFzdC9ldmVudHMvdG91Y2gvZ2VzdHVyZS90b3VjaC1n
ZXN0dXJlLXNjcm9sbC1wYWdlLWV4cGVjdGVkLnR4dApAQCAtMCwwICsxLDE1IEBACitUaGlzIHRl
c3RzIHNjcm9sbCBnZXN0dXJlcyBmcm9tIHRvdWNoIGV2ZW50cyBvbiB0aGUgd2hvbGUgcGFnZS4g
U3F1YXJlIGlzIChtb3N0bHkpIGdyZWVuIG9uIHBhc3MKKworT24gc3VjY2VzcywgeW91IHdpbGwg
c2VlIGEgc2VyaWVzIG9mICJQQVNTIiBtZXNzYWdlcywgZm9sbG93ZWQgYnkgIlRFU1QgQ09NUExF
VEUiLgorCisKK2ZpcnN0IGdlc3R1cmUKK1BBU1MgZG9jdW1lbnQuYm9keS5zY3JvbGxUb3AgaXMg
NzAKK1BBU1MgZG9jdW1lbnQuYm9keS5zY3JvbGxMZWZ0IGlzIDAKK3NlY29uZCBnZXN0dXJlCitQ
QVNTIGRvY3VtZW50LmJvZHkuc2Nyb2xsVG9wIGlzIDEzMAorUEFTUyBkb2N1bWVudC5ib2R5LnNj
cm9sbExlZnQgaXMgMAorUEFTUyBzdWNjZXNzZnVsbHlQYXJzZWQgaXMgdHJ1ZQorCitURVNUIENP
TVBMRVRFCisKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2Zhc3QvZXZlbnRzL3RvdWNoL2dlc3R1
cmUvdG91Y2gtZ2VzdHVyZS1zY3JvbGwtcGFnZS5odG1sIGIvTGF5b3V0VGVzdHMvZmFzdC9ldmVu
dHMvdG91Y2gvZ2VzdHVyZS90b3VjaC1nZXN0dXJlLXNjcm9sbC1wYWdlLmh0bWwKbmV3IGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MC4uMTU4ODlkZDAxMmY2ZTI0ZjIzNmUwNjc4ZTY1OThlMzc2MTIyMjc0MQotLS0gL2Rldi9udWxs
CisrKyBiL0xheW91dFRlc3RzL2Zhc3QvZXZlbnRzL3RvdWNoL2dlc3R1cmUvdG91Y2gtZ2VzdHVy
ZS1zY3JvbGwtcGFnZS5odG1sCkBAIC0wLDAgKzEsMTcwIEBACis8IURPQ1RZUEUgSFRNTCBQVUJM
SUMgIi0vL0lFVEYvL0RURCBIVE1MLy9FTiI+Cis8aHRtbD4KKzxoZWFkPgorPGxpbmsgcmVsPSJz
dHlsZXNoZWV0IiBocmVmPSIuLi8uLi8uLi9qcy9yZXNvdXJjZXMvanMtdGVzdC1zdHlsZS5jc3Mi
PgorPHNjcmlwdCBzcmM9Ii4uLy4uLy4uL2pzL3Jlc291cmNlcy9qcy10ZXN0LXByZS5qcyI+PC9z
Y3JpcHQ+Cis8c2NyaXB0IHNyYz0iLi4vLi4vLi4vanMvcmVzb3VyY2VzL2pzLXRlc3QtcG9zdC1m
dW5jdGlvbi5qcyI+PC9zY3JpcHQ+Cis8c3R5bGUgdHlwZT0idGV4dC9jc3MiPgorI2dyZWVuYm94
IHsKKyAgd2lkdGg6IDEwMHB4OworICBoZWlnaHQ6IDEwMHB4OworICBiYWNrZ3JvdW5kOiBncmVl
bjsKKyAgcGFkZGluZzogMHB4OworICBtYXJnaW46IDBweDsKK30KKyNyZWRib3ggeworICB3aWR0
aDogMTAwcHg7CisgIGhlaWdodDogMTAwcHg7CisgIGJhY2tncm91bmQ6IHJlZDsKKyAgcGFkZGlu
ZzogMHB4OworICBtYXJnaW46IDBweDsKK30KKwordGQgeworICBwYWRkaW5nOiAwcHg7Cit9Cis8
L3N0eWxlPgorPC9oZWFkPgorPGJvZHkgc3R5bGU9Im1hcmdpbjowIiBvbmxvYWQ9InJ1blRlc3Qo
KTsiPgorCis8dGFibGUgaWQ9InRhYmxlX3RvX2ZpbGwiPgorICAgIDx0cj48dGQ+PGRpdiBpZD0i
Z3JlZW5ib3giPjwvZGl2PjwvdGQ+PC90cj4KKyAgICA8dHI+PHRkPjxkaXYgaWQ9InJlZGJveCI+
PC9kaXY+PC90ZD48L3RyPgorPC90YWJsZT4KKworPHAgaWQ9ImRlc2NyaXB0aW9uIj48L3A+Cis8
ZGl2IGlkPSJjb25zb2xlIj48L2Rpdj4KKzxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4K
KwordmFyIG1vdmluZ2RpdjsKK3ZhciBleHBlY3RlZFNjcm9sbHNUb3RhbCA9IDI7Cit2YXIgc2Ny
b2xsc09jY3VycmVkID0gMDsKK3ZhciBzY3JvbGxBbW91bnRYID0gWycwJywgJzAnXTsKK3ZhciBz
Y3JvbGxBbW91bnRZID0gWyc3MCcsICcxMzAnXTsKKworLy8gQWx3YXlzIGNvbnN0cnVjdCBhIHBh
Z2UgbGFyZ2VyIHRoYW4gdGhlIHZlcnRpY2FsIGhlaWdodCBvZiB0aGUgd2luZG93LgorZnVuY3Rp
b24gYnVpbGRQYWdlKCkKK3sKKyAgICB2YXIgdGFibGUgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJ
ZCgndGFibGVfdG9fZmlsbCcpOworICAgIHZhciB0YXJnZXRIZWlnaHQgPSBkb2N1bWVudC5oZWln
aHQ7CisgICAgdmFyIGNlbGxQYWlySGVpZ2h0ID0gdGFibGUub2Zmc2V0SGVpZ2h0OworICAgIHZh
ciBudW1iZXJPZlJlcHMgPSB0YXJnZXRIZWlnaHQgLyBjZWxsUGFpckhlaWdodCAqIDI7CisgICAg
dmFyIGk7CisgICAgZm9yIChpID0gMDsgaSA8IG51bWJlck9mUmVwczsgaSsrKSB7CisgICAgICAg
IHZhciBwID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKKyAgICAgICAgcC5pbm5lckhU
TUwgPSAnPHRkPjxkaXYgaWQ9ImdyZWVuYm94Ij48L2Rpdj48L3RkPic7CisgICAgICAgIHRhYmxl
LmFwcGVuZENoaWxkKHApOworICAgICAgICB2YXIgcCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQo
J3RyJyk7CisgICAgICAgIHAuaW5uZXJIVE1MID0gJzx0ZD48ZGl2IGlkPSJyZWRib3giPjwvZGl2
PjwvdGQ+JzsKKyAgICAgICAgdGFibGUuYXBwZW5kQ2hpbGQocCk7CisgICAgfQorCit9CisKK2Z1
bmN0aW9uIGNoZWNrU2Nyb2xsT2Zmc2V0KCkKK3sKKyAgICBpZiAod2luZG93LmV2ZW50U2VuZGVy
KSB7CisgICAgICAgIHNob3VsZEJlKCdkb2N1bWVudC5ib2R5LnNjcm9sbFRvcCcsIHNjcm9sbEFt
b3VudFlbc2Nyb2xsc09jY3VycmVkXSk7CisgICAgICAgIHNob3VsZEJlKCdkb2N1bWVudC5ib2R5
LnNjcm9sbExlZnQnLCBzY3JvbGxBbW91bnRYW3Njcm9sbHNPY2N1cnJlZF0pOworICAgICAgICBz
Y3JvbGxzT2NjdXJyZWQrKzsKKyAgICB9CisKKyAgICBpZiAoc2Nyb2xsc09jY3VycmVkID09IGV4
cGVjdGVkU2Nyb2xsc1RvdGFsKSB7CisgICAgICAgIC8vIElmIHdlJ3ZlIGdvdCBoZXJlLCB3ZSd2
ZSBwYXNzZWQuCisgICAgICAgIHN1Y2Nlc3NmdWxseVBhcnNlZCA9IHRydWU7CisgICAgICAgIGlz
U3VjY2Vzc2Z1bGx5UGFyc2VkKCk7CisgICAgICAgIGlmICh3aW5kb3cubGF5b3V0VGVzdENvbnRy
b2xsZXIpCisgICAgICAgICAgICBsYXlvdXRUZXN0Q29udHJvbGxlci5ub3RpZnlEb25lKCk7Cisg
ICAgfSBlbHNlIHsKKyAgICAgICAgc2Vjb25kVG91Y2hEcmFnU2VxdWVuY2UoKTsKKyAgICB9Cit9
CisKK2Z1bmN0aW9uIGZpbmdlclVwKGV2ZW50KQoreworICAgIGlmICghd2luZG93LmxheW91dFRl
c3RDb250cm9sbGVyKQorICAgICAgICBkZWJ1ZygnbW92ZWQ6ICcgKyBldmVudC5jdXJyZW50VGFy
Z2V0LnNjcm9sbFRvcCArICcsICcgKyBldmVudC5jdXJyZW50VGFyZ2V0LnNjcm9sbExlZnQpOwor
ICAgIHJldHVybiB0cnVlOyAgLy8gV2FudCB0aGUgZGVmYXVsdCBiZWhhdmlvdXIuCit9CisKK2Z1
bmN0aW9uIGZpcnN0VG91Y2hEcmFnU2VxdWVuY2UoKQoreworICAgIGRlYnVnKCJmaXJzdCBnZXN0
dXJlIik7CisgICAgZXZlbnRTZW5kZXIuY2xlYXJUb3VjaFBvaW50cygpOworICAgIGV2ZW50U2Vu
ZGVyLmFkZFRvdWNoUG9pbnQoMTAsIDEwMik7CisgICAgZXZlbnRTZW5kZXIudG91Y2hTdGFydCgp
OworCisgICAgLy8gU2Nyb2xsIHRoZSBkaXYgdG8gdGhlIGxlZnQuCisgICAgZXZlbnRTZW5kZXIu
dXBkYXRlVG91Y2hQb2ludCgwLCAxMCwgNzIpOworICAgIGV2ZW50U2VuZGVyLnRvdWNoTW92ZSgp
OworCisgICAgZXZlbnRTZW5kZXIudXBkYXRlVG91Y2hQb2ludCgwLCAxMCwgMzIpOworICAgIGV2
ZW50U2VuZGVyLnRvdWNoTW92ZSgpOworCisgICAgZXZlbnRTZW5kZXIucmVsZWFzZVRvdWNoUG9p
bnQoMCk7CisgICAgZXZlbnRTZW5kZXIudG91Y2hFbmQoKTsKKworICAgIC8vIFdhaXQgZm9yIGxh
eW91dC4KKyAgICBjaGVja1Njcm9sbE9mZnNldCgpOworfQorCitmdW5jdGlvbiBzZWNvbmRUb3Vj
aERyYWdTZXF1ZW5jZSgpCit7CisgICAgZGVidWcoInNlY29uZCBnZXN0dXJlIik7CisgICAgZXZl
bnRTZW5kZXIuY2xlYXJUb3VjaFBvaW50cygpOworICAgIGV2ZW50U2VuZGVyLmFkZFRvdWNoUG9p
bnQoMTIsIDcwKTsKKyAgICBldmVudFNlbmRlci50b3VjaFN0YXJ0KCk7CisKKyAgICAvLyBTY3Jv
bGwgdGhlIHJlY3RhbmdsZSBkb3duLgorICAgIGV2ZW50U2VuZGVyLnVwZGF0ZVRvdWNoUG9pbnQo
MCwgMTIsIDQwKTsKKyAgICBldmVudFNlbmRlci50b3VjaE1vdmUoKTsKKworICAgIC8vIFNjcm9s
bCB0aGUgcmVjdGFuZ2xlIGRvd24uCisgICAgZXZlbnRTZW5kZXIudXBkYXRlVG91Y2hQb2ludCgw
LCAxMiwgMTApOworICAgIGV2ZW50U2VuZGVyLnRvdWNoTW92ZSgpOworCisgICAgZXZlbnRTZW5k
ZXIucmVsZWFzZVRvdWNoUG9pbnQoMCk7CisgICAgZXZlbnRTZW5kZXIudG91Y2hFbmQoKTsKKwor
ICAgIC8vIFdhaXQgZm9yIGxheW91dC4KKyAgICBjaGVja1Njcm9sbE9mZnNldCgpOworfQorCitm
dW5jdGlvbiBleGl0SWZOZWNlc3NhcnkoKQoreworICAgIGRlYnVnKCdHZXN0dXJlIG1hbmFnZXIg
bm90IGltcGxlbWVudGVkIG9uIHRoaXMgcGxhdGZvcm0gb3IgYnJva2VuJyk7CisgICAgc3VjY2Vz
c2Z1bGx5UGFyc2VkID0gdHJ1ZTsKKyAgICBpc1N1Y2Nlc3NmdWxseVBhcnNlZCgpOworICAgIGlm
ICh3aW5kb3cubGF5b3V0VGVzdENvbnRyb2xsZXIpCisgICAgICAgIGxheW91dFRlc3RDb250cm9s
bGVyLm5vdGlmeURvbmUoKTsKK30KKworaWYgKHdpbmRvdy5sYXlvdXRUZXN0Q29udHJvbGxlcikK
KyAgICBsYXlvdXRUZXN0Q29udHJvbGxlci53YWl0VW50aWxEb25lKCk7CisKK2Z1bmN0aW9uIHJ1
blRlc3QoKQoreworICAgIGJ1aWxkUGFnZSgpOworCisgICAgLy8gRklYTUU6IHRhcmdldCB1c2lu
ZyBwbGF0Zm9ybSBnZXN0dXJlIGV2ZW50CisgICAgdmFyIG1vdmluZ2RpdiA9IGRvY3VtZW50Lmdl
dEVsZW1lbnRCeUlkKCdtb3Zpbmdib3gnKTsKKworICAgIGlmICh3aW5kb3cuZXZlbnRTZW5kZXIp
IHsKKyAgICAgICAgZGVzY3JpcHRpb24oJ1RoaXMgdGVzdHMgc2Nyb2xsIGdlc3R1cmVzIGZyb20g
dG91Y2ggZXZlbnRzIG9uIHRoZSB3aG9sZSBwYWdlLiAnICsKKyAgICAgICAgICAgICdTcXVhcmUg
aXMgKG1vc3RseSkgZ3JlZW4gb24gcGFzcycpOworCisgICAgICAgIGlmIChldmVudFNlbmRlci5j
bGVhclRvdWNoUG9pbnRzKQorICAgICAgICAgICAgZmlyc3RUb3VjaERyYWdTZXF1ZW5jZSgpOwor
ICAgICAgICBlbHNlCisgICAgICAgICAgICBleGl0SWZOZWNlc3NhcnkoKTsKKyAgICB9IGVsc2Ug
eworICAgICAgICBkZWJ1ZygiVGhpcyB0ZXN0IHJlcXVpcmVzIER1bXBSZW5kZXJUcmVlLiAgU2Ny
b2xsIHRoZSBwYWdlZy4iKTsKKyAgICAgICAgbW92aW5nZGl2LmFkZEV2ZW50TGlzdGVuZXIoJ3Rv
dWNoZW5kJywgZmluZ2VyVXAsIGZhbHNlKTsKKyAgICB9Cit9Cis8L3NjcmlwdD4KKworCisKKzwv
Ym9keT4KKzwvaHRtbD4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2Zhc3QvZXZlbnRzL3RvdWNo
L2dlc3R1cmUvdG91Y2gtZ2VzdHVyZS1zY3JvbGwtc2h5LXRhcmdldC1leHBlY3RlZC50eHQgYi9M
YXlvdXRUZXN0cy9mYXN0L2V2ZW50cy90b3VjaC9nZXN0dXJlL3RvdWNoLWdlc3R1cmUtc2Nyb2xs
LXNoeS10YXJnZXQtZXhwZWN0ZWQudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjNhMGM2MTdkMGY0YjQ5MDkwM2Rl
NGViZTg0NzA1MTA2ODllOGE2YzAKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9mYXN0
L2V2ZW50cy90b3VjaC9nZXN0dXJlL3RvdWNoLWdlc3R1cmUtc2Nyb2xsLXNoeS10YXJnZXQtZXhw
ZWN0ZWQudHh0CkBAIC0wLDAgKzEsMTQgQEAKK1RoaXMgdGVzdHMgZ2VzdHVyZS1zY3JvbGwgY2Fw
dHVyZSBhbmQgZGl2IGRlbGVjdGlvbiBTcXVhcmUgaXMgKG1vc3RseSkgZ3JlZW4gb24gcGFzcwor
CitPbiBzdWNjZXNzLCB5b3Ugd2lsbCBzZWUgYSBzZXJpZXMgb2YgIlBBU1MiIG1lc3NhZ2VzLCBm
b2xsb3dlZCBieSAiVEVTVCBDT01QTEVURSIuCisKKworZmlyc3QgZ2VzdHVyZQorUEFTUyBtb3Zp
bmdkaXYuc2Nyb2xsVG9wIGlzIDYyCitQQVNTIG1vdmluZ2Rpdi5zY3JvbGxMZWZ0IGlzIDYzCitz
ZWNvbmQgZ2VzdHVyZQorcmVjZWl2ZWQgZWxlbWVudCByZW1vdmluZyBrZXlwcmVzcworUEFTUyBz
dWNjZXNzZnVsbHlQYXJzZWQgaXMgdHJ1ZQorCitURVNUIENPTVBMRVRFCisKZGlmZiAtLWdpdCBh
L0xheW91dFRlc3RzL2Zhc3QvZXZlbnRzL3RvdWNoL2dlc3R1cmUvdG91Y2gtZ2VzdHVyZS1zY3Jv
bGwtc2h5LXRhcmdldC5odG1sIGIvTGF5b3V0VGVzdHMvZmFzdC9ldmVudHMvdG91Y2gvZ2VzdHVy
ZS90b3VjaC1nZXN0dXJlLXNjcm9sbC1zaHktdGFyZ2V0Lmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNDM3NTBm
MWMxNDMzZTQ2NGVlMDAwODIyOTFhYzU4OTQ1YzY5OWU0MwotLS0gL2Rldi9udWxsCisrKyBiL0xh
eW91dFRlc3RzL2Zhc3QvZXZlbnRzL3RvdWNoL2dlc3R1cmUvdG91Y2gtZ2VzdHVyZS1zY3JvbGwt
c2h5LXRhcmdldC5odG1sCkBAIC0wLDAgKzEsMjA1IEBACis8IURPQ1RZUEUgSFRNTCBQVUJMSUMg
Ii0vL0lFVEYvL0RURCBIVE1MLy9FTiI+Cis8aHRtbD4KKzxoZWFkPgorPGxpbmsgcmVsPSJzdHls
ZXNoZWV0IiBocmVmPSIuLi8uLi8uLi9qcy9yZXNvdXJjZXMvanMtdGVzdC1zdHlsZS5jc3MiPgor
PHNjcmlwdCBzcmM9Ii4uLy4uLy4uL2pzL3Jlc291cmNlcy9qcy10ZXN0LXByZS5qcyI+PC9zY3Jp
cHQ+Cis8c2NyaXB0IHNyYz0iLi4vLi4vLi4vanMvcmVzb3VyY2VzL2pzLXRlc3QtcG9zdC1mdW5j
dGlvbi5qcyI+PC9zY3JpcHQ+Cis8c3R5bGUgdHlwZT0idGV4dC9jc3MiPgorI3RvdWNodGFyZ2V0
IHsKKyAgd2lkdGg6IDEwMHB4OworICBoZWlnaHQ6IDEwMHB4OworICBwb3NpdGlvbjogYWJzb2x1
dGU7CisgIGJhY2tncm91bmQ6IHdoaXRlOworICB0b3A6IDEwMHB4OworICBsZWZ0OiAxMDBweDsK
K30KKworI21vdmluZ2JveCB7CisgIHdpZHRoOiAxMDAlOworICBoZWlnaHQ6IDEwMCU7CisgIHBv
c2l0aW9uOiBhYnNvbHV0ZTsKKyAgd29yZC13cmFwOiBicmVhay13b3JkOworICBvdmVyZmxvdy15
OiBzY3JvbGw7CisgIG92ZXJmbG93LXg6IHNjcm9sbDsKKyAgZGlzcGxheTogYmxvY2s7Cit9CisK
Ky5ncmVlbmJveCB7CisgIHdpZHRoOiAxMDBweDsKKyAgaGVpZ2h0OiAxMDBweDsKKyAgYmFja2dy
b3VuZDogZ3JlZW47CisgIHBhZGRpbmc6IDBweDsKKyAgbWFyZ2luOiAwcHg7Cit9CisKKy5yZWRi
b3ggeworICB3aWR0aDogMTAwcHg7CisgIGhlaWdodDogMTAwcHg7CisgIGJhY2tncm91bmQ6IHJl
ZDsKKyAgcGFkZGluZzogMHB4OworICBtYXJnaW46IDBweDsKK30KKwordGQgeworICBwYWRkaW5n
OiAwcHg7Cit9Cis8L3N0eWxlPgorPC9oZWFkPgorPGJvZHkgc3R5bGU9Im1hcmdpbjowIiBvbmxv
YWQ9InJ1blRlc3QoKTsiPgorPGRpdiBpZD0idG91Y2h0YXJnZXQiPgorICA8ZGl2IGlkPSJtb3Zp
bmdib3giPgorICAgIDx0YWJsZSBib3JkZXI9IjAiIGNlbGxzcGFjaW5nPSIwcHgiIGlkPSJ0YWJs
ZSI+CisgICAgICA8dHI+CisgICAgICAgIDx0ZD48ZGl2IGNsYXNzPSJyZWRib3giIGlkPSJyZWRi
b3giPjwvZGl2PjwvdGQ+CisgICAgICAgIDx0ZD48ZGl2IGNsYXNzPSJncmVlbmJveCIgaWQ9Imdy
ZWVuYm94XzEiPjwvZGl2PjwvdGQ+CisgICAgICA8L3RyPgorICAgICAgPHRyPgorICAgICAgICA8
dGQ+PGRpdiBjbGFzcz0iZ3JlZW5ib3giIGlkPSJncmVlbmJveF8yIj48L2Rpdj48L3RkPgorICAg
ICAgICA8dGQ+PGRpdiBjbGFzcz0iZ3JlZW5ib3giIGlkPSJncmVlbmJveF8zIj48L2Rpdj48L3Rk
PgorICAgICAgPC90cj4KKyAgICA8L3RhYmxlPgorICA8L2Rpdj4KKzwvZGl2PgorCis8cCBpZD0i
ZGVzY3JpcHRpb24iPjwvcD4KKzxkaXYgaWQ9ImNvbnNvbGUiPjwvZGl2PgorPHNjcmlwdCB0eXBl
PSJ0ZXh0L2phdmFzY3JpcHQiPgorCit2YXIgbW92aW5nZGl2OwordmFyIGV4cGVjdGVkU2Nyb2xs
c1RvdGFsID0gMjsKK3ZhciBzY3JvbGxzT2NjdXJyZWQgPSAwOwordmFyIHNjcm9sbEFtb3VudFgg
PSBbJzYzJywgJzkwJ107Cit2YXIgc2Nyb2xsQW1vdW50WSA9IFsnNjInLCAnOTUnXTsKKworZG9j
dW1lbnQub25rZXlwcmVzcyA9IGZ1bmN0aW9uKCkKK3sKKyAgICBkZWJ1ZygncmVjZWl2ZWQgZWxl
bWVudCByZW1vdmluZyBrZXlwcmVzcycpOworICAgIHZhciBwYXJlbnQgPSBkb2N1bWVudC5nZXRF
bGVtZW50QnlJZCgndG91Y2h0YXJnZXQnKTsKKyAgICBtb3ZpbmdkaXYgPSBkb2N1bWVudC5nZXRF
bGVtZW50QnlJZCgnbW92aW5nYm94Jyk7CisgICAgcGFyZW50LnJlbW92ZUNoaWxkKG1vdmluZ2Rp
dik7CisgICAgcmV0dXJuIGZhbHNlOworfQorCitmdW5jdGlvbiBsb2dGaXJzdFRvdWNoUG9pbnQo
ZXZlbnQpCit7CisgICAgZGVidWcoJ2NsaWVudCBpZCcgKyBldmVudC50YXJnZXQuaWQpOworICAg
IGRlYnVnKCdjbGllbnRYOiAnICsgZXZlbnQudG91Y2hlc1swXS5jbGllbnRYICsgJyBjbGllbnRZ
OiAnICsgZXZlbnQudG91Y2hlc1swXS5jbGllbnRZKTsKK30KKworZnVuY3Rpb24gY2hlY2tTY3Jv
bGxPZmZzZXQoKQoreworICAgIG1vdmluZ2RpdiA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdt
b3Zpbmdib3gnKTsKKyAgICBpZiAod2luZG93LmV2ZW50U2VuZGVyKSB7CisgICAgICAgIHNob3Vs
ZEJlKCdtb3ZpbmdkaXYuc2Nyb2xsVG9wJywgc2Nyb2xsQW1vdW50WVtzY3JvbGxzT2NjdXJyZWRd
KTsKKyAgICAgICAgc2hvdWxkQmUoJ21vdmluZ2Rpdi5zY3JvbGxMZWZ0Jywgc2Nyb2xsQW1vdW50
WFtzY3JvbGxzT2NjdXJyZWRdKTsKKyAgICAgICAgc2Nyb2xsc09jY3VycmVkKys7CisgICAgfQor
CisgICAgaWYgKHNjcm9sbHNPY2N1cnJlZCA9PSBleHBlY3RlZFNjcm9sbHNUb3RhbCkgeworICAg
ICAgICAvLyBJZiB3ZSd2ZSBnb3QgaGVyZSwgd2UndmUgcGFzc2VkLgorICAgIH0gZWxzZSB7Cisg
ICAgICAgIHNlY29uZFRvdWNoRHJhZ1NlcXVlbmNlKCk7CisgICAgfQorfQorCitmdW5jdGlvbiBm
aW5nZXJVcChldmVudCkKK3sKKyAgICBpZiAoIXdpbmRvdy5sYXlvdXRUZXN0Q29udHJvbGxlcikg
eworICAgICAgICBkZWJ1ZygnbW92ZWQ6ICcgKyBldmVudC5jdXJyZW50VGFyZ2V0LnNjcm9sbFRv
cCArICcsICcgKyBldmVudC5jdXJyZW50VGFyZ2V0LnNjcm9sbExlZnQpOworICAgICAgICBkZWJ1
ZygndGFyZ2V0OiAnICsgZXZlbnQuY3VycmVudFRhcmdldC5pZCk7CisgICAgfQorICAgIHJldHVy
biB0cnVlOyAgLy8gV2FudCB0aGUgZGVmYXVsdCBiZWhhdmlvdXIuCit9CisKK2Z1bmN0aW9uIGZp
cnN0VG91Y2hEcmFnU2VxdWVuY2UoKQoreworICAgIGRlYnVnKCJmaXJzdCBnZXN0dXJlIik7Cisg
ICAgZXZlbnRTZW5kZXIuY2xlYXJUb3VjaFBvaW50cygpOworICAgIGV2ZW50U2VuZGVyLmFkZFRv
dWNoUG9pbnQoMTIxLCAxMjkpOworICAgIGV2ZW50U2VuZGVyLnRvdWNoU3RhcnQoKTsKKyAgICBl
dmVudFNlbmRlci51cGRhdGVUb3VjaFBvaW50KDAsIDEwMSwgMTAxKTsKKyAgICBldmVudFNlbmRl
ci50b3VjaFN0YXJ0KCk7CisKKyAgICAvLyBTY3JvbGwgdGhlIGRpdiB0byB0aGUgbGVmdCBwYXN0
IHRoZSBlZGdlLgorICAgIGV2ZW50U2VuZGVyLnVwZGF0ZVRvdWNoUG9pbnQoMCwgODcsIDk3KTsK
KyAgICBldmVudFNlbmRlci50b3VjaE1vdmUoKTsKKworICAgIGV2ZW50U2VuZGVyLnVwZGF0ZVRv
dWNoUG9pbnQoMCwgNTgsIDY3KTsKKyAgICBldmVudFNlbmRlci50b3VjaE1vdmUoKTsKKworICAg
IGV2ZW50U2VuZGVyLnJlbGVhc2VUb3VjaFBvaW50KDApOworICAgIGV2ZW50U2VuZGVyLnRvdWNo
RW5kKCk7CisKKyAgICAvLyBXYWl0IGZvciBsYXlvdXQuCisgICAgY2hlY2tTY3JvbGxPZmZzZXQo
KTsKK30KKworLy8gRklYTUU6IG1vZGlmeSB0aGlzIG9uZSB0byB0b3NzIG91dHNpZGUuCitmdW5j
dGlvbiBzZWNvbmRUb3VjaERyYWdTZXF1ZW5jZSgpCit7CisgICAgbW92aW5nZGl2LnNjcm9sbFRv
cCA9IDA7CisgICAgbW92aW5nZGl2LnNjcm9sbExlZnQgPSAwOworCisgICAgZGVidWcoInNlY29u
ZCBnZXN0dXJlIik7CisgICAgZXZlbnRTZW5kZXIuY2xlYXJUb3VjaFBvaW50cygpOworICAgIGV2
ZW50U2VuZGVyLmFkZFRvdWNoUG9pbnQoMTIxLCAxMjkpOworICAgIGV2ZW50U2VuZGVyLnRvdWNo
U3RhcnQoKTsKKyAgICBldmVudFNlbmRlci51cGRhdGVUb3VjaFBvaW50KDAsIDEwMSwgMTAxKTsK
KyAgICBldmVudFNlbmRlci50b3VjaFN0YXJ0KCk7CisKKyAgICAvLyBTY3JvbGwgdGhlIGRpdiB0
byB0aGUgbGVmdCBwYXN0IHRoZSBlZGdlLgorICAgIGV2ZW50U2VuZGVyLnVwZGF0ZVRvdWNoUG9p
bnQoMCwgODcsIDk3KTsKKyAgICBldmVudFNlbmRlci50b3VjaE1vdmUoKTsKKworICAgIC8vIFNl
bmQgYSBrZXkKKyAgICAvLyBEZWxldGUgdGhlIERPTSB0YXJnZXQuCisgICAgZXZlbnRTZW5kZXIu
a2V5RG93bigiZCIsIFtdKTsKKworICAgIGV2ZW50U2VuZGVyLnVwZGF0ZVRvdWNoUG9pbnQoMCwg
NTgsIDY3KTsKKyAgICBldmVudFNlbmRlci50b3VjaE1vdmUoKTsKKworICAgIGV2ZW50U2VuZGVy
LnJlbGVhc2VUb3VjaFBvaW50KDApOworICAgIGV2ZW50U2VuZGVyLnRvdWNoRW5kKCk7CisKKyAg
ICAvLyBCeSBnZXR0aW5nIGhlcmUgc3VjY2Vzc2Z1bGx5LCB0aGUgdGVzdCBkZW1vbnN0cmF0ZXMg
dGhhdCBpdAorICAgIC8vIGRvZXMgbm90IGNyYXNoIHdoZW4gdGhlIHRhcmdldCBpcyByZW1vdmVk
LgorICAgIHN1Y2Nlc3NmdWxseVBhcnNlZCA9IHRydWU7CisgICAgaXNTdWNjZXNzZnVsbHlQYXJz
ZWQoKTsKKyAgICBpZiAod2luZG93LmxheW91dFRlc3RDb250cm9sbGVyKQorICAgICAgICBsYXlv
dXRUZXN0Q29udHJvbGxlci5ub3RpZnlEb25lKCk7Cit9CisKK2Z1bmN0aW9uIGV4aXRJZk5lY2Vz
c2FyeSgpCit7CisgICAgZGVidWcoJ0dlc3R1cmUgbWFuYWdlciBub3QgaW1wbGVtZW50ZWQgb24g
dGhpcyBwbGF0Zm9ybSBvciBicm9rZW4nKTsKKyAgICBzdWNjZXNzZnVsbHlQYXJzZWQgPSB0cnVl
OworICAgIGlzU3VjY2Vzc2Z1bGx5UGFyc2VkKCk7CisgICAgaWYgKHdpbmRvdy5sYXlvdXRUZXN0
Q29udHJvbGxlcikKKyAgICAgICAgbGF5b3V0VGVzdENvbnRyb2xsZXIubm90aWZ5RG9uZSgpOwor
fQorCitpZiAod2luZG93LmxheW91dFRlc3RDb250cm9sbGVyKQorICAgIGxheW91dFRlc3RDb250
cm9sbGVyLndhaXRVbnRpbERvbmUoKTsKKworZnVuY3Rpb24gcnVuVGVzdCgpCit7CisgICAgaWYg
KHdpbmRvdy5ldmVudFNlbmRlcikgeworICAgICAgICBkZXNjcmlwdGlvbignVGhpcyB0ZXN0cyBn
ZXN0dXJlLXNjcm9sbCBjYXB0dXJlIGFuZCBkaXYgZGVsZWN0aW9uICcgKyAKKyAgICAgICAgICAg
ICdTcXVhcmUgaXMgKG1vc3RseSkgZ3JlZW4gb24gcGFzcycpOworICAgICAgICBpZiAoZXZlbnRT
ZW5kZXIuY2xlYXJUb3VjaFBvaW50cykKKyAgICAgICAgICAgIGZpcnN0VG91Y2hEcmFnU2VxdWVu
Y2UoKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgZXhpdElmTmVjZXNzYXJ5KCk7CisgICAg
fSBlbHNlIHsKKyAgICAgICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigndG91Y2hzdGFydCcs
IGxvZ0ZpcnN0VG91Y2hQb2ludCk7CisgICAgICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIo
J3RvdWNobW92ZScsIGxvZ0ZpcnN0VG91Y2hQb2ludCk7CisgICAgICAgIGRlYnVnKCJUaGlzIHRl
c3QgcmVxdWlyZXMgRHVtcFJlbmRlclRyZWUuICBUb3VjaC1zY3JvbGwgdGhlIHJlZCByZWN0IHRv
IGxvZy4iKTsKKyAgICAgICAgbW92aW5nZGl2LmFkZEV2ZW50TGlzdGVuZXIoJ3RvdWNoZW5kJywg
ZmluZ2VyVXAsIGZhbHNlKTsKKyAgICB9Cit9Cis8L3NjcmlwdD4KKworCisKKzwvYm9keT4KKzwv
aHRtbD4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2Zhc3QvZXZlbnRzL3RvdWNoL3Jlc291cmNl
cy9zY3JvbGwtaW5zaWRlLWlmcmFtZS5odG1sIGIvTGF5b3V0VGVzdHMvZmFzdC9ldmVudHMvdG91
Y2gvcmVzb3VyY2VzL3Njcm9sbC1pbnNpZGUtaWZyYW1lLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uOTRmNzg4
NzdjNTJiYTU3NmI0YzUxMTgwMGY0MTRiODRkMDQzN2Q5YwotLS0gL2Rldi9udWxsCisrKyBiL0xh
eW91dFRlc3RzL2Zhc3QvZXZlbnRzL3RvdWNoL3Jlc291cmNlcy9zY3JvbGwtaW5zaWRlLWlmcmFt
ZS5odG1sCkBAIC0wLDAgKzEsMzQgQEAKKzxodG1sPgorPGhlYWQ+Cis8c3R5bGUgdHlwZT0idGV4
dC9jc3MiPgorI2dyZWVuYm94IHsKKyAgd2lkdGg6IDEwMHB4OworICBoZWlnaHQ6IDEwMHB4Owor
ICBiYWNrZ3JvdW5kOiBncmVlbjsKKyAgcGFkZGluZzogMHB4OworICBtYXJnaW46IDBweDthCit9
CisjcmVkYm94IHsKKyAgd2lkdGg6IDEwMHB4OworICBoZWlnaHQ6IDEwMHB4OworICBiYWNrZ3Jv
dW5kOiByZWQ7CisgIHBhZGRpbmc6IDBweDsKKyAgbWFyZ2luOiAwcHg7Cit9CisKK3RkIHsKKyAg
cGFkZGluZzogMHB4OworfQorPC9zdHlsZT4KKzwvaGVhZD4KKzxib2R5IHN0eWxlPSJtYXJnaW46
MCIgb25sb2FkPSJwYXJlbnQucnVuVGVzdCgpIj4KKworPHRhYmxlIGlkPSJ0YWJsZV90b19maWxs
Ij4KKyAgICA8dHI+PHRkPjxkaXYgaWQ9ImdyZWVuYm94Ij48L2Rpdj48L3RkPjwvdHI+CisgICAg
PHRyPjx0ZD48ZGl2IGlkPSJyZWRib3giPjwvZGl2PjwvdGQ+PC90cj4KKyAgICA8dHI+PHRkPjxk
aXYgaWQ9ImdyZWVuYm94Ij48L2Rpdj48L3RkPjwvdHI+CisgICAgPHRyPjx0ZD48ZGl2IGlkPSJy
ZWRib3giPjwvZGl2PjwvdGQ+PC90cj4KKzwvdGFibGU+Cis8Ym9keT4KKzwvaHRtbD4KKwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>120475</attachid>
            <date>2011-12-23 12:41:45 -0800</date>
            <delta_ts>2012-01-05 12:55:04 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-67822-20111223154144.patch</filename>
            <type>text/plain</type>
            <size>60655</size>
            <attacher name="Robert Kroeger">rjkroege</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTAzNjM1CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggYjIzZDZhNWYwZGQwMTdm
MzM0MjUxOTdmZjFiZWNkYzAzNzA5YjMxMC4uYzNjNjdlNjJjYTY0YjY3NWIwNWIyMmJmNjMzMGI4
ZjBlYzZmMTA0ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDY3IEBACisyMDExLTEyLTIzICBSb2Jl
cnQgS3JvZWdlciAgPHJqa3JvZWdlQGNocm9taXVtLmNvbT4KKworICAgICAgICBQbGF0Zm9ybUdl
c3R1cmVFdmVudDo6aGFuZGxlR2VzdHVyZUV2ZW50IHNob3VsZCBoaXQgdGVzdCB3aGlsZSBkaXNw
YXRjaGluZyBQbGF0Zm9ybUV2ZW50OjpHZXN0dXJlU2Nyb2xsKiBldmVudHMuCisgICAgICAgIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD02NzgyMgorICAgICAgICAKKyAg
ICAgICAgUGxhdGZvcm1FdmVudCBHZXN0dXJlIFNjcm9sbCpUeXBlIGV2ZW50IHNlcXVlbmNlcyBz
aG91bGQgYWxsCisgICAgICAgIGdvIHRvIHRoZSB0YXJnZXQgKG5vZGUsIHBhZ2UsIHdpZGdldCkg
c3BlY2lmaWVkIGJ5IHRoZSBzdGFydGluZworICAgICAgICBHZXN0dXJlU2Nyb2xsQmVnaW4gZXZl
bnQuIFRoaXMgY2hhbmdlIHBsdW1icyBHZXN0dXJlU2Nyb2xsVXBkYXRlCisgICAgICAgIGluc3Rh
bmNlcyB0aHJvdWdoIHRoZSBleGlzdGluZyBzY3JvbGwgY29kZSBzaW1pbGFyIHRvIGhvdyBXaGVl
bAorICAgICAgICBpbnN0YW5jZXMgYXJlIGRlbGl2ZXJlZCBhbmQgYWRkcyB0aGUgbmVjZXNzYXJ5
IGNvZGUgdG8gcGx1bWIKKyAgICAgICAgR2VzdHVyZVNjcm9sbEJlZ2luIGFuZCBHZXN0dXJlU2Ny
b2xsQmVnaW4gaW5zdGFuY2VzIHRocm91Z2ggdG8KKyAgICAgICAgdGhlIGV4aXN0aW5nIFNjcm9s
bGFibGVBcmVhOjpoYW5kbGVHZXN0dXJlRXZlbnQgbWV0aG9kLgorIAorICAgICAgICBSZXZpZXdl
ZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBUZXN0czogZmFzdC9ldmVudHMvdG91Y2gv
Z2VzdHVyZS90b3VjaC1nZXN0dXJlLXNjcm9sbC1kaXYuaHRtbAorICAgICAgICAgICAgICAgZmFz
dC9ldmVudHMvdG91Y2gvZ2VzdHVyZS90b3VjaC1nZXN0dXJlLXNjcm9sbC1pZnJhbWUuaHRtbAor
ICAgICAgICAgICAgICAgZmFzdC9ldmVudHMvdG91Y2gvZ2VzdHVyZS90b3VjaC1nZXN0dXJlLXNj
cm9sbC1wYWdlLmh0bWwKKyAgICAgICAgICAgICAgIGZhc3QvZXZlbnRzL3RvdWNoL2dlc3R1cmUv
dG91Y2gtZ2VzdHVyZS1zY3JvbGwtc2h5LXRhcmdldC5odG1sCisKKyAgICAgICAgKiBwYWdlL0V2
ZW50SGFuZGxlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjp3aGVlbEdyYW51bGFyaXR5VG9TY3Jv
bGxHcmFudWxhcml0eSk6CisgICAgICAgIChXZWJDb3JlOjpzY3JvbGxOb2RlKToKKyAgICAgICAg
KFdlYkNvcmU6Omdlc3R1cmVOb2RlKTogCisgICAgICAgIChXZWJDb3JlOjpFdmVudEhhbmRsZXI6
OmNsZWFyKTogTWlub3IgcmVmYWN0b3JpbmcgZm9yIGNvZGUgc2hhcmluZy4KKyAgICAgICAgKFdl
YkNvcmU6OkV2ZW50SGFuZGxlcjo6ZGV0ZWN0QW5kUGFzc0dlc3R1cmVFdmVudFRvV2lkZ2V0KToK
KyAgICAgICAgKFdlYkNvcmU6OkV2ZW50SGFuZGxlcjo6cGFzc0dlc3R1cmVFdmVudFRvRnJhbWVW
aWV3KToKKyAgICAgICAgKFdlYkNvcmU6OkV2ZW50SGFuZGxlcjo6aGFuZGxlR2VzdHVyZUV2ZW50
KTogTW9kaWZpZWQgYXMgZGVzY3JpYmVkIGFib3ZlLgorICAgICAgICAqIHBhZ2UvRXZlbnRIYW5k
bGVyLmg6IEFkZGVkIG1lbWJlciBmb3IgbGF0Y2hlZCB0YXJnZXQgbm9kZS4KKyAgICAgICAgKiBw
YWdlL2Nocm9taXVtL0V2ZW50SGFuZGxlckNocm9taXVtLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OkV2ZW50SGFuZGxlcjo6cGFzc0dlc3R1cmVFdmVudFRvV2lkZ2V0KToKKyAgICAgICAgKiBwYWdl
L2VmbC9FdmVudEhhbmRsZXJFZmwuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RXZlbnRIYW5kbGVy
OjpwYXNzR2VzdHVyZUV2ZW50VG9XaWRnZXQpOgorICAgICAgICAqIHBhZ2UvZ3RrL0V2ZW50SGFu
ZGxlckd0ay5jcHA6CisgICAgICAgIChXZWJDb3JlOjpFdmVudEhhbmRsZXI6OnBhc3NHZXN0dXJl
RXZlbnRUb1dpZGdldCk6CisgICAgICAgICogcGFnZS9tYWMvRXZlbnRIYW5kbGVyTWFjLm1tOgor
ICAgICAgICAoV2ViQ29yZTo6RXZlbnRIYW5kbGVyOjpwYXNzR2VzdHVyZUV2ZW50VG9XaWRnZXQp
OgorICAgICAgICAqIHBhZ2UvcXQvRXZlbnRIYW5kbGVyUXQuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6RXZlbnRIYW5kbGVyOjpwYXNzR2VzdHVyZUV2ZW50VG9XaWRnZXQpOgorICAgICAgICAqIHBh
Z2Uvd2luL0V2ZW50SGFuZGxlcldpbi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpFdmVudEhhbmRs
ZXI6OnBhc3NHZXN0dXJlRXZlbnRUb1dpZGdldCk6CisgICAgICAgICogcGFnZS93eC9FdmVudEhh
bmRsZXJXeC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpFdmVudEhhbmRsZXI6OnBhc3NHZXN0dXJl
RXZlbnRUb1dpZGdldCk6CisgICAgICAgICogcGxhdGZvcm0vU2Nyb2xsQW5pbWF0b3IuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsQW5pbWF0b3I6OlNjcm9sbEFuaW1hdG9yKToKKyAgICAg
ICAgKFdlYkNvcmU6OlNjcm9sbEFuaW1hdG9yOjpzY3JvbGwpOgorICAgICAgICAoV2ViQ29yZTo6
U2Nyb2xsQW5pbWF0b3I6OmhhbmRsZUdlc3R1cmVFdmVudCk6CisgICAgICAgICogcGxhdGZvcm0v
U2Nyb2xsQW5pbWF0b3IuaDoKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbEFuaW1hdG9yOjpnZXN0
dXJlRXZlbnRUZXN0UmVjb3JkKTogTWV0aG9kIGZvciBwcm92aW5nIHRoYXQgYWxsIGdlc3R1cmUg
ZXZlbnRzIGFycml2ZSBhdCB0aGUgY29ycmVjdCAoaS5lLiBzYW1lKSBpbnN0YW5jZS4KKyAgICAg
ICAgKiBwbGF0Zm9ybS9TY3JvbGxBbmltYXRvck5vbmUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
U2Nyb2xsQW5pbWF0b3JOb25lOjpoYW5kbGVHZXN0dXJlRXZlbnQpOgorICAgICAgICAqIHJlbmRl
cmluZy9SZW5kZXJCb3guY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQm94OjpnZXN0dXJl
KTogRGlzcGF0Y2ggZ2VzdHVyZXMgaW4gdGhlIHNhbWUgZmFzaGlvbiBhcyBzY3JvbGwuCisgICAg
ICAgICogcmVuZGVyaW5nL1JlbmRlckJveC5oOgorICAgICAgICAqIHRlc3RpbmcvSW50ZXJuYWxz
LmNwcDogRW50cnkgcG9pbnRzIGZvciBkaXNwYXRjaGluZyBzeW50aGV0aWMgZ2VzdHVyZSBldmVu
dHMgYW5kIGRldGVybWluaW5nIGlmIGFsbCByZXF1aXNpdGUgZXZlbnRzIGFycml2ZWQgYXQgdGhl
IHRhcmdldC4KKyAgICAgICAgKFdlYkNvcmU6OkludGVybmFsczo6cmVjb3JkT2ZHZXN0dXJlU2Ny
b2xsRXZlbnRzKToKKyAgICAgICAgKFdlYkNvcmU6OkludGVybmFsczo6cmVjb3JkT2ZHZXN0dXJl
U2Nyb2xsRXZlbnRzRG9jdW1lbnQpOgorICAgICAgICAoV2ViQ29yZTo6c2VuZEdlc3R1cmVFdmVu
dCk6CisgICAgICAgIChXZWJDb3JlOjpJbnRlcm5hbHM6OnNlbmRTY3JvbGxCZWdpbkdlc3R1cmVF
dmVudCk6CisgICAgICAgIChXZWJDb3JlOjpJbnRlcm5hbHM6OnNlbmRTY3JvbGxVcGRhdGVHZXN0
dXJlRXZlbnQpOgorICAgICAgICAoV2ViQ29yZTo6SW50ZXJuYWxzOjpzZW5kU2Nyb2xsRW5kR2Vz
dHVyZUV2ZW50KToKKyAgICAgICAgKiB0ZXN0aW5nL0ludGVybmFscy5oOgorICAgICAgICAqIHRl
c3RpbmcvSW50ZXJuYWxzLmlkbDoKKwogMjAxMS0xMi0yMyAgQW5kZXJzIENhcmxzc29uICA8YW5k
ZXJzY2FAYXBwbGUuY29tPgogCiAgICAgICAgIEFkZCB0d28gKGN1cnJlbnRseSB1bnVzZWQpIG5l
dyBtZW1iZXIgZnVuY3Rpb25zIHRvIFNjcm9sbEVsYXN0aWNpdHlDb250cm9sbGVyQ2xpZW50CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL0V2ZW50SGFuZGxlci5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9wYWdlL0V2ZW50SGFuZGxlci5jcHAKaW5kZXggYzIxZWI3ZTI1YzFkOWRjYTQ4MDY0
ZDI5ODM5NWIzMzRhYmVlNTI0Ni4uMTcyMmNjMGRiOWFkMzM0N2IyZDg1Mzk1ZDQwM2YxZmM0NWE4
YzZjMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGFnZS9FdmVudEhhbmRsZXIuY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRXZlbnRIYW5kbGVyLmNwcApAQCAtNjksNiArNjksNyBA
QAogI2luY2x1ZGUgIlJlbmRlclZpZXcuaCIKICNpbmNsdWRlICJSZW5kZXJXaWRnZXQuaCIKICNp
bmNsdWRlICJTY3JvbGxBbmltYXRvci5oIgorI2luY2x1ZGUgIlNjcm9sbGFibGVBcmVhLmgiCiAj
aW5jbHVkZSAiU2Nyb2xsYmFyLmgiCiAjaW5jbHVkZSAiU2V0dGluZ3MuaCIKICNpbmNsdWRlICJT
cGF0aWFsTmF2aWdhdGlvbi5oIgpAQCAtMTQyLDcgKzE0MywyMCBAQCBwcml2YXRlOgogICAgIEN1
cnNvciBtX2N1cnNvcjsKIH07CiAKLXN0YXRpYyBpbmxpbmUgYm9vbCBzY3JvbGxOb2RlKGZsb2F0
IGRlbHRhLCBXaGVlbEV2ZW50OjpHcmFudWxhcml0eSBncmFudWxhcml0eSwgU2Nyb2xsRGlyZWN0
aW9uIHBvc2l0aXZlRGlyZWN0aW9uLCBTY3JvbGxEaXJlY3Rpb24gbmVnYXRpdmVEaXJlY3Rpb24s
IE5vZGUqIG5vZGUsIE5vZGUqKiBzdG9wTm9kZSkKK3N0YXRpYyBpbmxpbmUgU2Nyb2xsR3JhbnVs
YXJpdHkgd2hlZWxHcmFudWxhcml0eVRvU2Nyb2xsR3JhbnVsYXJpdHkoV2hlZWxFdmVudDo6R3Jh
bnVsYXJpdHkgZ3JhbnVsYXJpdHkpCit7CisgICAgc3dpdGNoIChncmFudWxhcml0eSkgeworICAg
IGNhc2UgV2hlZWxFdmVudDo6UGFnZToKKyAgICAgICAgcmV0dXJuIFNjcm9sbEJ5UGFnZTsKKyAg
ICBjYXNlIFdoZWVsRXZlbnQ6OkxpbmU6CisgICAgICAgIHJldHVybiBTY3JvbGxCeUxpbmU7Cisg
ICAgY2FzZSBXaGVlbEV2ZW50OjpQaXhlbDoKKyAgICAgICAgcmV0dXJuIFNjcm9sbEJ5UGl4ZWw7
CisgICAgfQorICAgIHJldHVybiBTY3JvbGxCeVBpeGVsOworfQorCitzdGF0aWMgaW5saW5lIGJv
b2wgc2Nyb2xsTm9kZShmbG9hdCBkZWx0YSwgU2Nyb2xsR3JhbnVsYXJpdHkgZ3JhbnVsYXJpdHks
IFNjcm9sbERpcmVjdGlvbiBwb3NpdGl2ZURpcmVjdGlvbiwgU2Nyb2xsRGlyZWN0aW9uIG5lZ2F0
aXZlRGlyZWN0aW9uLCBOb2RlKiBub2RlLCBOb2RlKiogc3RvcE5vZGUpCiB7CiAgICAgaWYgKCFk
ZWx0YSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwpAQCAtMTUwLDIyICsxNjQsMjUgQEAgc3RhdGlj
IGlubGluZSBib29sIHNjcm9sbE5vZGUoZmxvYXQgZGVsdGEsIFdoZWVsRXZlbnQ6OkdyYW51bGFy
aXR5IGdyYW51bGFyaXR5LAogICAgIGlmICghbm9kZS0+cmVuZGVyZXIoKSkKICAgICAgICAgcmV0
dXJuIGZhbHNlOwogICAgIAotICAgIC8vIEZpbmQgdGhlIG5lYXJlc3QgZW5jbG9zaW5nIGJveC4K
ICAgICBSZW5kZXJCb3gqIGVuY2xvc2luZ0JveCA9IG5vZGUtPnJlbmRlcmVyKCktPmVuY2xvc2lu
Z0JveCgpOwotCiAgICAgZmxvYXQgYWJzRGVsdGEgPSBkZWx0YSA+IDAgPyBkZWx0YSA6IC1kZWx0
YTsKLSAgICAKLSAgICBpZiAoZ3JhbnVsYXJpdHkgPT0gV2hlZWxFdmVudDo6UGFnZSkKLSAgICAg
ICAgcmV0dXJuIGVuY2xvc2luZ0JveC0+c2Nyb2xsKGRlbHRhIDwgMCA/IG5lZ2F0aXZlRGlyZWN0
aW9uIDogcG9zaXRpdmVEaXJlY3Rpb24sIFNjcm9sbEJ5UGFnZSwgYWJzRGVsdGEsIHN0b3BOb2Rl
KTsKKyAgICByZXR1cm4gZW5jbG9zaW5nQm94LT5zY3JvbGwoZGVsdGEgPCAwID8gbmVnYXRpdmVE
aXJlY3Rpb24gOiBwb3NpdGl2ZURpcmVjdGlvbiwgZ3JhbnVsYXJpdHksIGFic0RlbHRhLCBzdG9w
Tm9kZSk7Cit9CiAKLSAgICBpZiAoZ3JhbnVsYXJpdHkgPT0gV2hlZWxFdmVudDo6TGluZSkKLSAg
ICAgICAgcmV0dXJuIGVuY2xvc2luZ0JveC0+c2Nyb2xsKGRlbHRhIDwgMCA/IG5lZ2F0aXZlRGly
ZWN0aW9uIDogcG9zaXRpdmVEaXJlY3Rpb24sIFNjcm9sbEJ5TGluZSwgYWJzRGVsdGEsIHN0b3BO
b2RlKTsKK3N0YXRpYyBpbmxpbmUgYm9vbCBzY3JvbGxOb2RlKGZsb2F0IGRlbHRhLCBXaGVlbEV2
ZW50OjpHcmFudWxhcml0eSBncmFudWxhcml0eSwgU2Nyb2xsRGlyZWN0aW9uIHBvc2l0aXZlRGly
ZWN0aW9uLCBTY3JvbGxEaXJlY3Rpb24gbmVnYXRpdmVEaXJlY3Rpb24sIE5vZGUqIG5vZGUsIE5v
ZGUqKiBzdG9wTm9kZSkKK3sKKyAgICByZXR1cm4gc2Nyb2xsTm9kZShkZWx0YSwgd2hlZWxHcmFu
dWxhcml0eVRvU2Nyb2xsR3JhbnVsYXJpdHkoZ3JhbnVsYXJpdHkpLCBwb3NpdGl2ZURpcmVjdGlv
biwgbmVnYXRpdmVEaXJlY3Rpb24sIG5vZGUsIHN0b3BOb2RlKTsKK30KIAotICAgIGlmIChncmFu
dWxhcml0eSA9PSBXaGVlbEV2ZW50OjpQaXhlbCkKLSAgICAgICAgcmV0dXJuIGVuY2xvc2luZ0Jv
eC0+c2Nyb2xsKGRlbHRhIDwgMCA/IG5lZ2F0aXZlRGlyZWN0aW9uIDogcG9zaXRpdmVEaXJlY3Rp
b24sIFNjcm9sbEJ5UGl4ZWwsIGFic0RlbHRhLCBzdG9wTm9kZSk7Ci0gICAgICAgIAotICAgIHJl
dHVybiBmYWxzZTsKKyNpZiBFTkFCTEUoR0VTVFVSRV9FVkVOVFMpCitzdGF0aWMgaW5saW5lIGJv
b2wgZ2VzdHVyZU5vZGUoY29uc3QgUGxhdGZvcm1HZXN0dXJlRXZlbnQmIGdlc3R1cmVFdmVudCwg
Tm9kZSogbm9kZSkKK3sKKyAgICBpZiAoIW5vZGUtPnJlbmRlcmVyKCkpCisgICAgICAgIHJldHVy
biBmYWxzZTsKKyAgICBSZW5kZXJCb3gqIGVuY2xvc2luZ0JveCA9IG5vZGUtPnJlbmRlcmVyKCkt
PmVuY2xvc2luZ0JveCgpOworICAgIHJldHVybiBlbmNsb3NpbmdCb3gtPmdlc3R1cmUoZ2VzdHVy
ZUV2ZW50KTsKIH0KKyNlbmRpZgogCiAjaWYgIVBMQVRGT1JNKE1BQykKIApAQCAtMjY3LDYgKzI4
NCw5IEBAIHZvaWQgRXZlbnRIYW5kbGVyOjpjbGVhcigpCiAjaWYgRU5BQkxFKFRPVUNIX0VWRU5U
UykKICAgICBtX29yaWdpbmF0aW5nVG91Y2hQb2ludFRhcmdldHMuY2xlYXIoKTsKICNlbmRpZgor
I2lmIEVOQUJMRShHRVNUVVJFX0VWRU5UUykKKyAgICBtX2dlc3R1cmVUYXJnZXROb2RlLmNsZWFy
KCk7CisjZW5kaWYKIH0KIAogdm9pZCBFdmVudEhhbmRsZXI6Om5vZGVXaWxsQmVSZW1vdmVkKE5v
ZGUqIG5vZGVUb0JlUmVtb3ZlZCkKQEAgLTIyMjgsNDkgKzIyNDgsMTEwIEBAIHZvaWQgRXZlbnRI
YW5kbGVyOjpkZWZhdWx0V2hlZWxFdmVudEhhbmRsZXIoTm9kZSogc3RhcnROb2RlLCBXaGVlbEV2
ZW50KiB3aGVlbEV2CiB9CiAKICNpZiBFTkFCTEUoR0VTVFVSRV9FVkVOVFMpCitib29sIEV2ZW50
SGFuZGxlcjo6ZGV0ZWN0QW5kUGFzc0dlc3R1cmVFdmVudFRvV2lkZ2V0KFBhc3NSZWZQdHI8Tm9k
ZT4gdGFyZ2V0Tm9kZSwgY29uc3QgUGxhdGZvcm1HZXN0dXJlRXZlbnQmIGdlc3R1cmVFdmVudCwg
Y29uc3QgSGl0VGVzdFJlc3VsdCYgcmVzdWx0KQoreworICAgIE5vZGUqIG5vZGUgPSB0YXJnZXRO
b2RlLmdldCgpOworICAgIGlmICghbm9kZSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAg
Ym9vbCBpc092ZXJXaWRnZXQgPSByZXN1bHQuaXNPdmVyV2lkZ2V0KCk7CisgICAgUmVuZGVyT2Jq
ZWN0KiB0YXJnZXQgPSBub2RlLT5yZW5kZXJlcigpOworICAgIGlmICghKGlzT3ZlcldpZGdldCAm
JiB0YXJnZXQgJiYgdGFyZ2V0LT5pc1dpZGdldCgpKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOwor
ICAgICAgICAKKyAgICBXaWRnZXQqIHdpZGdldCA9IHRvUmVuZGVyV2lkZ2V0KHRhcmdldCktPndp
ZGdldCgpOworICAgIGlmICh3aWRnZXQgJiYgcGFzc0dlc3R1cmVFdmVudFRvV2lkZ2V0KGdlc3R1
cmVFdmVudCwgd2lkZ2V0KSkKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgcmV0dXJuIGZhbHNl
OworfQorCitib29sIEV2ZW50SGFuZGxlcjo6cGFzc0dlc3R1cmVFdmVudFRvRnJhbWVWaWV3KGNv
bnN0IFBsYXRmb3JtR2VzdHVyZUV2ZW50JiBnZXN0dXJlRXZlbnQpCit7CisgICAgRnJhbWVWaWV3
KiB2aWV3ID0gbV9mcmFtZS0+dmlldygpOworICAgIGlmICghdmlldykKKyAgICAgICByZXR1cm4g
ZmFsc2U7CisKKyAgICB2aWV3LT5oYW5kbGVHZXN0dXJlRXZlbnQoZ2VzdHVyZUV2ZW50KTsKKyAg
ICByZXR1cm4gdHJ1ZTsKK30KKwogYm9vbCBFdmVudEhhbmRsZXI6OmhhbmRsZUdlc3R1cmVFdmVu
dChjb25zdCBQbGF0Zm9ybUdlc3R1cmVFdmVudCYgZ2VzdHVyZUV2ZW50KQogewotICAgIC8vIEZJ
WE1FOiBUaGlzIHNob3VsZCBoaXQgdGVzdCBhbmQgZ28gdG8gdGhlIGNvcnJlY3Qgc3ViZnJhbWUg
cmF0aGVyIHRoYW4gCi0gICAgLy8gYWx3YXlzIHNlbmRpbmcgZ2VzdHVyZXMgdG8gdGhlIG1haW4g
ZnJhbWUgb25seS4gV2Ugc2hvdWxkIGFsc28gZW5zdXJlCi0gICAgLy8gdGhhdCBpZiBhIGZyYW1l
IGdldHMgYSBnZXN0dXJlIGJlZ2luIGdlc3R1cmUsIGl0IGdldHMgdGhlIGNvcnJlc3BvbmRpbmcK
LSAgICAvLyBlbmQgZ2VzdHVyZSBhcyB3ZWxsLgorICAgIERvY3VtZW50KiBkb2N1bWVudCA9IG1f
ZnJhbWUtPmRvY3VtZW50KCk7CisgICAgUmVuZGVyT2JqZWN0KiBkb2N1bWVudFJlbmRlcmVyID0g
ZG9jdW1lbnQtPnJlbmRlcmVyKCk7CisgICAgaWYgKCFkb2N1bWVudFJlbmRlcmVyKQorICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgUmVmUHRyPEZyYW1lVmlldz4gcHJvdGVjdG9yKG1fZnJhbWUt
PnZpZXcoKSk7CisgICAgRnJhbWVWaWV3KiB2aWV3ID0gbV9mcmFtZS0+dmlldygpOworICAgIGlm
ICghdmlldykKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIHNldEZyYW1lV2FzU2Nyb2xsZWRC
eVVzZXIoKTsKKyAgICBMYXlvdXRQb2ludCBwb2ludEluVmlld0Nvb3JkaW5hdGVzID0gdmlldy0+
d2luZG93VG9Db250ZW50cyhnZXN0dXJlRXZlbnQucG9zaXRpb24oKSk7CisKKyAgICBIaXRUZXN0
UmVxdWVzdCByZXF1ZXN0KEhpdFRlc3RSZXF1ZXN0OjpSZWFkT25seSk7CisgICAgSGl0VGVzdFJl
c3VsdCByZXN1bHQocG9pbnRJblZpZXdDb29yZGluYXRlcyk7CisgICAgZG9jdW1lbnQtPnJlbmRl
clZpZXcoKS0+bGF5ZXIoKS0+aGl0VGVzdChyZXF1ZXN0LCByZXN1bHQpOwogCiAgICAgc3dpdGNo
IChnZXN0dXJlRXZlbnQudHlwZSgpKSB7CiAgICAgY2FzZSBQbGF0Zm9ybUV2ZW50OjpHZXN0dXJl
VGFwRG93bjoKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBQbGF0Zm9ybUV2ZW50OjpHZXN0dXJl
VGFwOiB7Ci0gICAgICAgIC8vIEZJWE1FOiBSZWZhY3RvciB0aGlzIGNvZGUgdG8gbm90IGhpdCB0
ZXN0IG11bHRpcGxlIHRpbWVzIG9uY2UgaGl0IHRlc3RpbmcgaGFzIGJlZW4gY29ycmVjdGVkIGFz
IHN1Z2dlc3RlZCBhYm92ZS4KKyAgICAgICAgLy8gRklYTUU6IFJlZmFjdG9yIHRoaXMgY29kZSB0
byBub3QgaGl0IHRlc3QgbXVsdGlwbGUgdGltZXMgYnkgdXNpbmcgdGhlIGNvZGUgd3JpdHRlbiBm
b3Igc2Nyb2xsLgogICAgICAgICBQbGF0Zm9ybU1vdXNlRXZlbnQgZmFrZU1vdXNlTW92ZShnZXN0
dXJlRXZlbnQucG9zaXRpb24oKSwgZ2VzdHVyZUV2ZW50Lmdsb2JhbFBvc2l0aW9uKCksIE5vQnV0
dG9uLCBQbGF0Zm9ybUV2ZW50OjpNb3VzZU1vdmVkLCAvKiBjbGlja0NvdW50ICovIDEsIGdlc3R1
cmVFdmVudC5zaGlmdEtleSgpLCBnZXN0dXJlRXZlbnQuY3RybEtleSgpLCBnZXN0dXJlRXZlbnQu
YWx0S2V5KCksIGdlc3R1cmVFdmVudC5tZXRhS2V5KCksIGdlc3R1cmVFdmVudC50aW1lc3RhbXAo
KSk7CiAgICAgICAgIFBsYXRmb3JtTW91c2VFdmVudCBmYWtlTW91c2VEb3duKGdlc3R1cmVFdmVu
dC5wb3NpdGlvbigpLCBnZXN0dXJlRXZlbnQuZ2xvYmFsUG9zaXRpb24oKSwgTGVmdEJ1dHRvbiwg
UGxhdGZvcm1FdmVudDo6TW91c2VQcmVzc2VkLCAvKiBjbGlja0NvdW50ICovIDEsIGdlc3R1cmVF
dmVudC5zaGlmdEtleSgpLCBnZXN0dXJlRXZlbnQuY3RybEtleSgpLCBnZXN0dXJlRXZlbnQuYWx0
S2V5KCksIGdlc3R1cmVFdmVudC5tZXRhS2V5KCksIGdlc3R1cmVFdmVudC50aW1lc3RhbXAoKSk7
Ci0gICAgICAgIFBsYXRmb3JtTW91c2VFdmVudCBmYWtlTW91c2VVcChnZXN0dXJlRXZlbnQucG9z
aXRpb24oKSwgZ2VzdHVyZUV2ZW50Lmdsb2JhbFBvc2l0aW9uKCksIExlZnRCdXR0b24sIFBsYXRm
b3JtRXZlbnQ6Ok1vdXNlUmVsZWFzZWQsIC8qIGNsaWNrQ291bnQgKi8gMSwgZ2VzdHVyZUV2ZW50
LnNoaWZ0S2V5KCksIGdlc3R1cmVFdmVudC5jdHJsS2V5KCksIGdlc3R1cmVFdmVudC5hbHRLZXko
KSwgZ2VzdHVyZUV2ZW50Lm1ldGFLZXkoKSwgZ2VzdHVyZUV2ZW50LnRpbWVzdGFtcCgpKTsKKyAg
ICAgICAgUGxhdGZvcm1Nb3VzZUV2ZW50IGZha2VNb3VzZVVwKGdlc3R1cmVFdmVudC5wb3NpdGlv
bigpLCBnZXN0dXJlRXZlbnQuZ2xvYmFsUG9zaXRpb24oKSwgTGVmdEJ1dHRvbiwgUGxhdGZvcm1F
dmVudDo6TW91c2VQcmVzc2VkLCAvKiBjbGlja0NvdW50ICovIDEsIGdlc3R1cmVFdmVudC5zaGlm
dEtleSgpLCBnZXN0dXJlRXZlbnQuY3RybEtleSgpLCBnZXN0dXJlRXZlbnQuYWx0S2V5KCksIGdl
c3R1cmVFdmVudC5tZXRhS2V5KCksIGdlc3R1cmVFdmVudC50aW1lc3RhbXAoKSk7CiAgICAgICAg
IG1vdXNlTW92ZWQoZmFrZU1vdXNlTW92ZSk7CiAgICAgICAgIGhhbmRsZU1vdXNlUHJlc3NFdmVu
dChmYWtlTW91c2VEb3duKTsKICAgICAgICAgaGFuZGxlTW91c2VSZWxlYXNlRXZlbnQoZmFrZU1v
dXNlVXApOwogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAgICAgY2FzZSBQbGF0Zm9ybUV2
ZW50OjpHZXN0dXJlU2Nyb2xsVXBkYXRlOiB7Ci0gICAgICAgIGNvbnN0IGZsb2F0IHRpY2tEaXZp
c29yID0gKGZsb2F0KVdoZWVsRXZlbnQ6OnRpY2tNdWx0aXBsaWVyOwotICAgICAgICAvLyBGSVhN
RTogUmVwbGFjZSB0aGlzIGludGVyaW0gaW1wbGVtZW50YXRpb24gb25jZSB0aGUgYWJvdmUgZml4
bWUgaGFzIGJlZW4gYWRkcmVzc2VkLgotICAgICAgICBJbnRQb2ludCBwb2ludChnZXN0dXJlRXZl
bnQucG9zaXRpb24oKS54KCksIGdlc3R1cmVFdmVudC5wb3NpdGlvbigpLnkoKSk7Ci0gICAgICAg
IEludFBvaW50IGdsb2JhbFBvaW50KGdlc3R1cmVFdmVudC5nbG9iYWxQb3NpdGlvbigpLngoKSwg
Z2VzdHVyZUV2ZW50Lmdsb2JhbFBvc2l0aW9uKCkueSgpKTsKLSAgICAgICAgUGxhdGZvcm1XaGVl
bEV2ZW50IHN5bnRoZXRpY1doZWVsRXZlbnQocG9pbnQsIGdsb2JhbFBvaW50LCBnZXN0dXJlRXZl
bnQuZGVsdGFYKCksIGdlc3R1cmVFdmVudC5kZWx0YVkoKSwgZ2VzdHVyZUV2ZW50LmRlbHRhWCgp
IC8gdGlja0Rpdmlzb3IsIGdlc3R1cmVFdmVudC5kZWx0YVkoKSAvIHRpY2tEaXZpc29yLCBTY3Jv
bGxCeVBpeGVsV2hlZWxFdmVudCwgZ2VzdHVyZUV2ZW50LnNoaWZ0S2V5KCksIGdlc3R1cmVFdmVu
dC5jdHJsS2V5KCksIGdlc3R1cmVFdmVudC5hbHRLZXkoKSwgZ2VzdHVyZUV2ZW50Lm1ldGFLZXko
KSk7Ci0gICAgICAgIGhhbmRsZVdoZWVsRXZlbnQoc3ludGhldGljV2hlZWxFdmVudCk7Ci0gICAg
ICAgIHJldHVybiB0cnVlOworICAgICAgICAvLyBBbHdheXMgbGF0Y2hlZCBpZiBwb3NzaWJsZS4K
KyAgICAgICAgaWYgKCFtX2dlc3R1cmVUYXJnZXROb2RlKQorICAgICAgICAgICAgbV9nZXN0dXJl
VGFyZ2V0Tm9kZSA9IHJlc3VsdC5pbm5lck5vZGUoKTsKKworICAgICAgICBpZiAoZGV0ZWN0QW5k
UGFzc0dlc3R1cmVFdmVudFRvV2lkZ2V0KG1fZ2VzdHVyZVRhcmdldE5vZGUsIGdlc3R1cmVFdmVu
dCwgcmVzdWx0KSkKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICBOb2RlKiBub2Rl
ID0gbV9nZXN0dXJlVGFyZ2V0Tm9kZSA/IG1fZ2VzdHVyZVRhcmdldE5vZGUtPnNoYWRvd0FuY2Vz
dG9yTm9kZSgpIDogMDsKKyAgICAgICAgYm9vbCB4U2Nyb2xsID0gbm9kZSAmJiBzY3JvbGxOb2Rl
KGdlc3R1cmVFdmVudC5kZWx0YVgoKSwgU2Nyb2xsQnlQaXhlbCwgU2Nyb2xsTGVmdCwgU2Nyb2xs
UmlnaHQsIG5vZGUsIDApOworICAgICAgICBib29sIHlTY3JvbGwgPSBub2RlICYmIHNjcm9sbE5v
ZGUoZ2VzdHVyZUV2ZW50LmRlbHRhWSgpLCBTY3JvbGxCeVBpeGVsLCBTY3JvbGxVcCwgU2Nyb2xs
RG93biwgbm9kZSwgMCk7CisKKyAgICAgICAgaWYgKHhTY3JvbGwgfHwgeVNjcm9sbCkKKyAgICAg
ICAgICAgIHJldHVybiB0cnVlOworICAgICAgICByZXR1cm4gcGFzc0dlc3R1cmVFdmVudFRvRnJh
bWVWaWV3KGdlc3R1cmVFdmVudCk7CisgICAgfQorICAgIGNhc2UgUGxhdGZvcm1FdmVudDo6R2Vz
dHVyZVNjcm9sbEJlZ2luOiB7CisgICAgICAgIC8vIExhdGNoIG9uIHNjcm9sbCBiZWdpbi4KKyAg
ICAgICAgaWYgKG1fZ2VzdHVyZVRhcmdldE5vZGUpCisgICAgICAgICAgICBtX2dlc3R1cmVUYXJn
ZXROb2RlID0gMDsKKyAgICAgICAgbV9nZXN0dXJlVGFyZ2V0Tm9kZSA9IHJlc3VsdC5pbm5lck5v
ZGUoKTsKKworICAgICAgICBpZiAoZGV0ZWN0QW5kUGFzc0dlc3R1cmVFdmVudFRvV2lkZ2V0KG1f
Z2VzdHVyZVRhcmdldE5vZGUsIGdlc3R1cmVFdmVudCwgcmVzdWx0KSkKKyAgICAgICAgICAgIHJl
dHVybiB0cnVlOworICAgICAgICBOb2RlKiBub2RlID0gbV9nZXN0dXJlVGFyZ2V0Tm9kZSA/IG1f
Z2VzdHVyZVRhcmdldE5vZGUtPnNoYWRvd0FuY2VzdG9yTm9kZSgpIDogMDsKKyAgICAgICAgaWYg
KG5vZGUgJiYgZ2VzdHVyZU5vZGUoZ2VzdHVyZUV2ZW50LCBub2RlKSkKKyAgICAgICAgICAgIHJl
dHVybiB0cnVlOworICAgICAgICByZXR1cm4gcGFzc0dlc3R1cmVFdmVudFRvRnJhbWVWaWV3KGdl
c3R1cmVFdmVudCk7CiAgICAgfQotICAgIGNhc2UgUGxhdGZvcm1FdmVudDo6R2VzdHVyZURvdWJs
ZVRhcDoKLSAgICBjYXNlIFBsYXRmb3JtRXZlbnQ6Okdlc3R1cmVTY3JvbGxCZWdpbjoKICAgICBj
YXNlIFBsYXRmb3JtRXZlbnQ6Okdlc3R1cmVTY3JvbGxFbmQ6IHsKLSAgICAgICAgRnJhbWVWaWV3
KiB2aWV3ID0gbV9mcmFtZS0+dmlldygpOwotICAgICAgICBpZiAoIXZpZXcpCi0gICAgICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgICAgIC8vIEFsd2F5cyB1bmxhdGNoLgorICAgICAgICBSZWZQ
dHI8Tm9kZT4gdGFyZ2V0Tm9kZSA9IG1fZ2VzdHVyZVRhcmdldE5vZGUucmVsZWFzZSgpOworICAg
ICAgICBpZiAoIXRhcmdldE5vZGUpCisgICAgICAgICAgICB0YXJnZXROb2RlID0gcmVzdWx0Lmlu
bmVyTm9kZSgpOwogCi0gICAgICAgIHZpZXctPmhhbmRsZUdlc3R1cmVFdmVudChnZXN0dXJlRXZl
bnQpOwotICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgaWYgKGRldGVjdEFuZFBhc3NHZXN0
dXJlRXZlbnRUb1dpZGdldCh0YXJnZXROb2RlLCBnZXN0dXJlRXZlbnQsIHJlc3VsdCkpCisgICAg
ICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgTm9kZSogbm9kZSA9IHRhcmdldE5vZGUgPyB0
YXJnZXROb2RlLT5zaGFkb3dBbmNlc3Rvck5vZGUoKSA6IDA7CisgICAgICAgIGlmIChub2RlICYm
IGdlc3R1cmVOb2RlKGdlc3R1cmVFdmVudCwgbm9kZSkpCisgICAgICAgICAgICByZXR1cm4gdHJ1
ZTsKKyAgICAgICAgcmV0dXJuIHBhc3NHZXN0dXJlRXZlbnRUb0ZyYW1lVmlldyhnZXN0dXJlRXZl
bnQpOwogICAgIH0KKyAgICBjYXNlIFBsYXRmb3JtRXZlbnQ6Okdlc3R1cmVEb3VibGVUYXA6Cisg
ICAgICAgIHJldHVybiBmYWxzZTsKICAgICBkZWZhdWx0OgogICAgICAgICBBU1NFUlRfTk9UX1JF
QUNIRUQoKTsKICAgICB9Ci0gICAgcmV0dXJuIHRydWU7CisgICAgcmV0dXJuIGZhbHNlOwogfQog
I2VuZGlmCiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRXZlbnRIYW5kbGVyLmgg
Yi9Tb3VyY2UvV2ViQ29yZS9wYWdlL0V2ZW50SGFuZGxlci5oCmluZGV4IDUyMTZlMGI4OGFhYjIx
ZGQ5ZGM1OGFiOGQ0ODk0OTk1ZGYwMTI3MjUuLjc3ZTE1ZTIxZmQ2YmVkMWNiNjg0Y2Y5MWFlNmYz
ZmVkOWFjZDNlZjMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRXZlbnRIYW5kbGVy
LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGFnZS9FdmVudEhhbmRsZXIuaApAQCAtMjk5LDYgKzI5
OSw5IEBAIHByaXZhdGU6CiAgICAgYm9vbCBwYXNzV2lkZ2V0TW91c2VEb3duRXZlbnRUb1dpZGdl
dChSZW5kZXJXaWRnZXQqKTsKIAogICAgIGJvb2wgcGFzc01vdXNlRG93bkV2ZW50VG9XaWRnZXQo
V2lkZ2V0Kik7CisjaWYgRU5BQkxFKEdFU1RVUkVfRVZFTlRTKQorICAgIGJvb2wgcGFzc0dlc3R1
cmVFdmVudFRvV2lkZ2V0KGNvbnN0IFBsYXRmb3JtR2VzdHVyZUV2ZW50JiwgV2lkZ2V0Kik7Cisj
ZW5kaWYKICAgICBib29sIHBhc3NXaGVlbEV2ZW50VG9XaWRnZXQoY29uc3QgUGxhdGZvcm1XaGVl
bEV2ZW50JiwgV2lkZ2V0Kik7CiAKICAgICB2b2lkIGRlZmF1bHRTcGFjZUV2ZW50SGFuZGxlcihL
ZXlib2FyZEV2ZW50Kik7CkBAIC00MjEsNiArNDI0LDExIEBAIHByaXZhdGU6CiAgICAgVG91Y2hU
YXJnZXRNYXAgbV9vcmlnaW5hdGluZ1RvdWNoUG9pbnRUYXJnZXRzOwogICAgIGJvb2wgbV90b3Vj
aFByZXNzZWQ7CiAjZW5kaWYKKyNpZiBFTkFCTEUoR0VTVFVSRV9FVkVOVFMpCisgICAgYm9vbCBk
ZXRlY3RBbmRQYXNzR2VzdHVyZUV2ZW50VG9XaWRnZXQoUGFzc1JlZlB0cjxOb2RlPiwgY29uc3Qg
UGxhdGZvcm1HZXN0dXJlRXZlbnQmLCBjb25zdCBIaXRUZXN0UmVzdWx0Jik7CisgICAgYm9vbCBw
YXNzR2VzdHVyZUV2ZW50VG9GcmFtZVZpZXcoY29uc3QgUGxhdGZvcm1HZXN0dXJlRXZlbnQmKTsK
KyAgICBSZWZQdHI8Tm9kZT4gbV9nZXN0dXJlVGFyZ2V0Tm9kZTsKKyNlbmRpZgogfTsKIAogfSAv
LyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGFnZS9jaHJv
bWl1bS9FdmVudEhhbmRsZXJDaHJvbWl1bS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL2Nocm9t
aXVtL0V2ZW50SGFuZGxlckNocm9taXVtLmNwcAppbmRleCA5N2MxY2JlNzM4NTRkM2I2NjAzMjBi
ODE0NDZjNzYwZWQ4MTg0NmIxLi44NjY0MjIxNjY5OTk1YmFkOTQ4OWJhMDg4NzMwZjMxYjMxNDlh
ZGZhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL2Nocm9taXVtL0V2ZW50SGFuZGxl
ckNocm9taXVtLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL2Nocm9taXVtL0V2ZW50SGFu
ZGxlckNocm9taXVtLmNwcApAQCAtNDQsNiArNDQsMTEgQEAKICNpbmNsdWRlICJQbGF0Zm9ybVdo
ZWVsRXZlbnQuaCIKICNpbmNsdWRlICJSZW5kZXJXaWRnZXQuaCIKIAorI2lmIEVOQUJMRShHRVNU
VVJFX0VWRU5UUykgfHwgRU5BQkxFKEdFU1RVUkVfUkVDT0dOSVpFUikKKyNpbmNsdWRlICJQbGF0
Zm9ybUdlc3R1cmVFdmVudC5oIgorI2VuZGlmCisKKwogbmFtZXNwYWNlIFdlYkNvcmUgewogCiAj
aWYgT1MoREFSV0lOKQpAQCAtMTY0LDQgKzE2OSwxNiBAQCBib29sIEV2ZW50SGFuZGxlcjo6c2hv
dWxkVHVyblZlcnRpY2FsVGlja3NJbnRvSG9yaXpvbnRhbChjb25zdCBIaXRUZXN0UmVzdWx0JiBy
ZQogfQogI2VuZGlmCiAKKyNpZiBFTkFCTEUoR0VTVFVSRV9FVkVOVFMpCitib29sIEV2ZW50SGFu
ZGxlcjo6cGFzc0dlc3R1cmVFdmVudFRvV2lkZ2V0KGNvbnN0IFBsYXRmb3JtR2VzdHVyZUV2ZW50
JiBnZXN0dXJlRXZlbnQsIFdpZGdldCogd2lkZ2V0KQoreworICAgIGlmICghd2lkZ2V0KQorICAg
ICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBpZiAoIXdpZGdldC0+aXNGcmFtZVZpZXcoKSkKKyAg
ICAgICAgcmV0dXJuIGZhbHNlOworICAgIHJldHVybiBzdGF0aWNfY2FzdDxGcmFtZVZpZXcqPih3
aWRnZXQpLT5mcmFtZSgpLT5ldmVudEhhbmRsZXIoKS0+aGFuZGxlR2VzdHVyZUV2ZW50KGdlc3R1
cmVFdmVudCk7Cit9CisjZW5kaWYKKwogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcGFnZS9lZmwvRXZlbnRIYW5kbGVyRWZsLmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL3BhZ2UvZWZsL0V2ZW50SGFuZGxlckVmbC5jcHAKaW5kZXggMGI5YzJiNmU2ZjgxNmEy
YzE4YWM4NzVkZmZiYTQwYjExYTI2YTM3MC4uYjIyMjY2OGI3Zjk4NzViZmU3ZjFiMDczNTMzYzBi
MWUyZmNjODZmMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGFnZS9lZmwvRXZlbnRIYW5k
bGVyRWZsLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL2VmbC9FdmVudEhhbmRsZXJFZmwu
Y3BwCkBAIC05NSw2ICs5NSwxNCBAQCBib29sIEV2ZW50SGFuZGxlcjo6cGFzc1doZWVsRXZlbnRU
b1dpZGdldChjb25zdCBQbGF0Zm9ybVdoZWVsRXZlbnQmIGV2ZW50LCBXaWRnZQogICAgIHJldHVy
biBzdGF0aWNfY2FzdDxGcmFtZVZpZXcqPih3aWRnZXQpLT5mcmFtZSgpLT5ldmVudEhhbmRsZXIo
KS0+aGFuZGxlV2hlZWxFdmVudChldmVudCk7CiB9CiAKKyNpZiBFTkFCTEUoR0VTVFVSRV9FVkVO
VFMpCitib29sIEV2ZW50SGFuZGxlcjo6cGFzc0dlc3R1cmVFdmVudFRvV2lkZ2V0KGNvbnN0IFBs
YXRmb3JtR2VzdHVyZUV2ZW50JiwgV2lkZ2V0KikKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOwor
ICAgIHJldHVybiBmYWxzZTsKK30KKyNlbmRpZgorCiBQYXNzUmVmUHRyPENsaXBib2FyZD4gRXZl
bnRIYW5kbGVyOjpjcmVhdGVEcmFnZ2luZ0NsaXBib2FyZCgpIGNvbnN0CiB7CiAgICAgcmV0dXJu
IENsaXBib2FyZEVmbDo6Y3JlYXRlKENsaXBib2FyZFdyaXRhYmxlLCBDbGlwYm9hcmQ6OkRyYWdB
bmREcm9wKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvZ3RrL0V2ZW50SGFuZGxl
ckd0ay5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL2d0ay9FdmVudEhhbmRsZXJHdGsuY3BwCmlu
ZGV4IDQzODZhNGRlMzc4ODg5YTM1NTVhNTA4ODM5ZDM2NTJmMWY4ZjU5NjUuLjA2ZmE4NGQwMDkw
ZGRkODBlYzU2OGZiOWVkMzUwNzczZjMwYTM1MWIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3BhZ2UvZ3RrL0V2ZW50SGFuZGxlckd0ay5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGFnZS9n
dGsvRXZlbnRIYW5kbGVyR3RrLmNwcApAQCAtOTQsNiArOTQsMTQgQEAgYm9vbCBFdmVudEhhbmRs
ZXI6OnBhc3NXaGVlbEV2ZW50VG9XaWRnZXQoY29uc3QgUGxhdGZvcm1XaGVlbEV2ZW50JiBldmVu
dCwgV2lkZ2UKICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8RnJhbWVWaWV3Kj4od2lkZ2V0KS0+ZnJh
bWUoKS0+ZXZlbnRIYW5kbGVyKCktPmhhbmRsZVdoZWVsRXZlbnQoZXZlbnQpOwogfQogCisjaWYg
RU5BQkxFKEdFU1RVUkVfRVZFTlRTKQorYm9vbCBFdmVudEhhbmRsZXI6OnBhc3NHZXN0dXJlRXZl
bnRUb1dpZGdldChQbGF0Zm9ybUdlc3R1cmVFdmVudCYsIFdpZGdldCopCit7CisgICAgbm90SW1w
bGVtZW50ZWQoKTsKKyAgICByZXR1cm4gZmFsc2U7Cit9CisjZW5kaWYKKwogUGFzc1JlZlB0cjxD
bGlwYm9hcmQ+IEV2ZW50SGFuZGxlcjo6Y3JlYXRlRHJhZ2dpbmdDbGlwYm9hcmQoKSBjb25zdAog
ewogICAgIHJldHVybiBDbGlwYm9hcmRHdGs6OmNyZWF0ZShDbGlwYm9hcmRXcml0YWJsZSwgRGF0
YU9iamVjdEd0azo6Y3JlYXRlKCksIENsaXBib2FyZDo6RHJhZ0FuZERyb3AsIG1fZnJhbWUpOwpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGFnZS9tYWMvRXZlbnRIYW5kbGVyTWFjLm1tIGIv
U291cmNlL1dlYkNvcmUvcGFnZS9tYWMvRXZlbnRIYW5kbGVyTWFjLm1tCmluZGV4IDgyYWE3OWUw
MzQzNzllMTI4Y2Y0YjY3OGRjNzUyZGQzYjNhYzFiY2UuLjFjYTg1N2RiYWVjZjE2MDUxZTg0NTAy
OTNlMTlmNmI3ZjlhMTFiYTIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvbWFjL0V2
ZW50SGFuZGxlck1hYy5tbQorKysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL21hYy9FdmVudEhhbmRs
ZXJNYWMubW0KQEAgLTcyNCw0ICs3MjQsMjUgQEAgdW5zaWduZWQgRXZlbnRIYW5kbGVyOjphY2Nl
c3NLZXlNb2RpZmllcnMoKQogICAgIHJldHVybiBQbGF0Zm9ybUV2ZW50OjpDdHJsS2V5IHwgUGxh
dGZvcm1FdmVudDo6QWx0S2V5OwogfQogCisjaWYgRU5BQkxFKEdFU1RVUkVfRVZFTlRTKQorYm9v
bCBFdmVudEhhbmRsZXI6OnBhc3NHZXN0dXJlRXZlbnRUb1dpZGdldChjb25zdCBQbGF0Zm9ybUdl
c3R1cmVFdmVudCYgZ2VzdHVyZUV2ZW50LCBXaWRnZXQqIHdpZGdldCkKK3sKKyAgICBCRUdJTl9C
TE9DS19PQkpDX0VYQ0VQVElPTlM7CisKKyAgICBpZiAoIXdpZGdldCkKKyAgICAgICAgcmV0dXJu
IGZhbHNlOworCisgICAgTlNWaWV3KiBub2RlVmlldyA9IHdpZGdldC0+cGxhdGZvcm1XaWRnZXQo
KTsKKyAgICBpZiAoIW5vZGVWaWV3KSB7CisgICAgICAgIC8vIFdlYktpdDIgY29kZSBwYXRoLgor
ICAgICAgICBpZiAoIXdpZGdldC0+aXNGcmFtZVZpZXcoKSkKKyAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKKworICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8RnJhbWVWaWV3Kj4od2lkZ2V0KS0+
ZnJhbWUoKS0+ZXZlbnRIYW5kbGVyKCktPmhhbmRsZUdlc3R1cmVFdmVudChnZXN0dXJlRXZlbnQp
OworICAgIH0KKyAgICBFTkRfQkxPQ0tfT0JKQ19FWENFUFRJT05TOworICAgIHJldHVybiBmYWxz
ZTsKK30KKyNlbmRpZgorCiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL3F0L0V2
ZW50SGFuZGxlclF0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvcXQvRXZlbnRIYW5kbGVyUXQu
Y3BwCmluZGV4IDA2ZGIxMDQ1NWNiN2ZlMmM3NWJkMDA5ZTBjZWFlYzI0NjM2NWU5MWUuLjM0Y2Qy
YmU1MWU5ZWMyOTY3MGM1ODBjYTgyN2UxNWRjZjY1YTY1ZTIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3BhZ2UvcXQvRXZlbnRIYW5kbGVyUXQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Bh
Z2UvcXQvRXZlbnRIYW5kbGVyUXQuY3BwCkBAIC05OCw2ICs5OCwxNyBAQCBib29sIEV2ZW50SGFu
ZGxlcjo6cGFzc1doZWVsRXZlbnRUb1dpZGdldChjb25zdCBQbGF0Zm9ybVdoZWVsRXZlbnQmIGV2
ZW50LCBXaWRnZQogICAgIHJldHVybiBzdGF0aWNfY2FzdDxGcmFtZVZpZXcqPih3aWRnZXQpLT5m
cmFtZSgpLT5ldmVudEhhbmRsZXIoKS0+aGFuZGxlV2hlZWxFdmVudChldmVudCk7CiB9CiAKKyNp
ZiBFTkFCTEUoR0VTVFVSRV9FVkVOVFMpCitib29sIEV2ZW50SGFuZGxlcjo6cGFzc0dlc3R1cmVF
dmVudFRvV2lkZ2V0KFBsYXRmb3JtR2VzdHVyZUV2ZW50JiBldmVudCwgV2lkZ2V0KiB3aWRnZXQp
Cit7CisgICAgUV9BU1NFUlQod2lkZ2V0KTsKKyAgICBpZiAoIXdpZGdldC0+aXNGcmFtZVZpZXco
KSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgcmV0dXJuIHN0YXRpY19jYXN0PEZyYW1l
Vmlldyo+KHdpZGdldCktPmZyYW1lKCktPmV2ZW50SGFuZGxlcigpLT5oYW5kbGVHZXN0dXJlRXZl
bnQoZXZlbnQpOworfQorI2VuZGlmCisKIFBhc3NSZWZQdHI8Q2xpcGJvYXJkPiBFdmVudEhhbmRs
ZXI6OmNyZWF0ZURyYWdnaW5nQ2xpcGJvYXJkKCkgY29uc3QKIHsKICAgICByZXR1cm4gQ2xpcGJv
YXJkUXQ6OmNyZWF0ZShDbGlwYm9hcmRXcml0YWJsZSwgbV9mcmFtZSwgQ2xpcGJvYXJkOjpEcmFn
QW5kRHJvcCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL3dpbi9FdmVudEhhbmRs
ZXJXaW4uY3BwIGIvU291cmNlL1dlYkNvcmUvcGFnZS93aW4vRXZlbnRIYW5kbGVyV2luLmNwcApp
bmRleCA5MzkzZWZhNTVmYWMyNjk3ZGNmZDc5ZTJiNzQ5NzUzYmM1YzJmYjhmLi4wNjA5N2Q0YTgw
Y2E5NzEwZmI4ZjRiNWQ2ZmQ1MmExZDRhZTFkMzY1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9wYWdlL3dpbi9FdmVudEhhbmRsZXJXaW4uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2Uv
d2luL0V2ZW50SGFuZGxlcldpbi5jcHAKQEAgLTgxLDYgKzgxLDE0IEBAIGJvb2wgRXZlbnRIYW5k
bGVyOjpwYXNzV2hlZWxFdmVudFRvV2lkZ2V0KGNvbnN0IFBsYXRmb3JtV2hlZWxFdmVudCYgd2hl
ZWxFdmVudCwKICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8RnJhbWVWaWV3Kj4od2lkZ2V0KS0+ZnJh
bWUoKS0+ZXZlbnRIYW5kbGVyKCktPmhhbmRsZVdoZWVsRXZlbnQod2hlZWxFdmVudCk7CiB9CiAK
KyNpZiBFTkFCTEUoR0VTVFVSRV9FVkVOVFMpCitib29sIEV2ZW50SGFuZGxlcjo6cGFzc0dlc3R1
cmVFdmVudFRvV2lkZ2V0KGNvbnN0IFBsYXRmb3JtR2VzdHVyZUV2ZW50JiwgV2lkZ2V0KikKK3sK
KyAgICBub3RJbXBsZW1lbnRlZCgpOworICAgIHJldHVybiBmYWxzZTsKK30KKyNlbmRpZgorCiBi
b29sIEV2ZW50SGFuZGxlcjo6dGFic1RvQWxsRm9ybUNvbnRyb2xzKEtleWJvYXJkRXZlbnQqKSBj
b25zdAogewogICAgIHJldHVybiB0cnVlOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGFn
ZS93eC9FdmVudEhhbmRsZXJXeC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL3d4L0V2ZW50SGFu
ZGxlcld4LmNwcAppbmRleCAwNmI2MDM2OTgyYTUzOTgzNTI5NDZkNTA3YzQ2YWM5MzUwN2I3NDlj
Li5lN2M3NjZkZmIxMDNmYzdlNTZkODFhM2E1MTc3ZDRlMzRkMzdkYzMzIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9wYWdlL3d4L0V2ZW50SGFuZGxlcld4LmNwcAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9wYWdlL3d4L0V2ZW50SGFuZGxlcld4LmNwcApAQCAtODIsNiArODIsMTQgQEAgYm9vbCBF
dmVudEhhbmRsZXI6OnBhc3NXaGVlbEV2ZW50VG9XaWRnZXQoY29uc3QgUGxhdGZvcm1XaGVlbEV2
ZW50JiBldmVudCwgV2lkZ2UKICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8RnJhbWVWaWV3Kj4od2lk
Z2V0KS0+ZnJhbWUoKS0+ZXZlbnRIYW5kbGVyKCktPmhhbmRsZVdoZWVsRXZlbnQoZXZlbnQpOwog
fQogCisjaWYgRU5BQkxFKEdFU1RVUkVfRVZFTlRTKQorYm9vbCBFdmVudEhhbmRsZXI6OnBhc3NH
ZXN0dXJlRXZlbnRUb1dpZGdldChQbGF0Zm9ybUdlc3R1cmVFdmVudCYsIFdpZGdldCopCit7Cisg
ICAgbm90SW1wbGVtZW50ZWQoKTsgCisgICAgcmV0dXJuIGZhbHNlOyAKK30KKyNlbmRpZgorCiBi
b29sIEV2ZW50SGFuZGxlcjo6dGFic1RvQWxsRm9ybUNvbnRyb2xzKEtleWJvYXJkRXZlbnQqIGV2
ZW50KSBjb25zdCAKIHsgCiAgICAgbm90SW1wbGVtZW50ZWQoKTsgCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxBbmltYXRvci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9TY3JvbGxBbmltYXRvci5jcHAKaW5kZXggZjczYzVjYzA2NDMzYzNlYTZkZDU1YWUx
MTNjMDI5NDYyOWI0YTg4NC4uNjk1YzBlZjk4MmM2YTcwZDIxODhiN2RhZDcwODBkOTFlMmQ4MTVi
MCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU2Nyb2xsQW5pbWF0b3IuY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1Njcm9sbEFuaW1hdG9yLmNwcApAQCAtMzcs
NiArMzcsMTAgQEAKICNpbmNsdWRlIDxhbGdvcml0aG0+CiAjaW5jbHVkZSA8d3RmL1Bhc3NPd25Q
dHIuaD4KIAorI2lmIEVOQUJMRShHRVNUVVJFX1JFQ09HTklaRVIpIHx8IEVOQUJMRShHRVNUVVJF
X0VWRU5UUykKKyNpbmNsdWRlICJQbGF0Zm9ybUdlc3R1cmVFdmVudC5oIgorI2VuZGlmCisKIHVz
aW5nIG5hbWVzcGFjZSBzdGQ7CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKQEAgLTU1LDYgKzU5LDkg
QEAgU2Nyb2xsQW5pbWF0b3I6OlNjcm9sbEFuaW1hdG9yKFNjcm9sbGFibGVBcmVhKiBzY3JvbGxh
YmxlQXJlYSkKICAgICAsIG1fY3VycmVudFpvb21TY2FsZSgxKQogICAgICwgbV9jdXJyZW50Wm9v
bVRyYW5zWCgwKQogICAgICwgbV9jdXJyZW50Wm9vbVRyYW5zWSgwKQorI2lmIEVOQUJMRShHRVNU
VVJFX0VWRU5UUykKKyAgICAsIG1fZ2VzdHVyZUV2ZW50VGVzdFJlY29yZCgwKQorI2VuZGlmCiB7
CiB9CiAKQEAgLTY0LDYgKzcxLDcgQEAgU2Nyb2xsQW5pbWF0b3I6On5TY3JvbGxBbmltYXRvcigp
CiAKIGJvb2wgU2Nyb2xsQW5pbWF0b3I6OnNjcm9sbChTY3JvbGxiYXJPcmllbnRhdGlvbiBvcmll
bnRhdGlvbiwgU2Nyb2xsR3JhbnVsYXJpdHksIGZsb2F0IHN0ZXAsIGZsb2F0IG11bHRpcGxpZXIp
CiB7CisgICAgbV9nZXN0dXJlRXZlbnRUZXN0UmVjb3JkIHw9IEdlc3R1cmVUZXN0U2Nyb2xsOwog
ICAgIGZsb2F0KiBjdXJyZW50UG9zID0gKG9yaWVudGF0aW9uID09IEhvcml6b250YWxTY3JvbGxi
YXIpID8gJm1fY3VycmVudFBvc1ggOiAmbV9jdXJyZW50UG9zWTsKICAgICBmbG9hdCBuZXdQb3Mg
PSBzdGQ6Om1heChzdGQ6Om1pbigqY3VycmVudFBvcyArIChzdGVwICogbXVsdGlwbGllciksIHN0
YXRpY19jYXN0PGZsb2F0PihtX3Njcm9sbGFibGVBcmVhLT5zY3JvbGxTaXplKG9yaWVudGF0aW9u
KSkpLCAwLjBmKTsKICAgICBpZiAoKmN1cnJlbnRQb3MgPT0gbmV3UG9zKQpAQCAtMTI2LDggKzEz
NCwzNCBAQCBib29sIFNjcm9sbEFuaW1hdG9yOjpoYW5kbGVXaGVlbEV2ZW50KGNvbnN0IFBsYXRm
b3JtV2hlZWxFdmVudCYgZSkKIH0KIAogI2lmIEVOQUJMRShHRVNUVVJFX0VWRU5UUykKLXZvaWQg
U2Nyb2xsQW5pbWF0b3I6OmhhbmRsZUdlc3R1cmVFdmVudChjb25zdCBQbGF0Zm9ybUdlc3R1cmVF
dmVudCYpCit2b2lkIFNjcm9sbEFuaW1hdG9yOjpoYW5kbGVHZXN0dXJlRXZlbnQoY29uc3QgUGxh
dGZvcm1HZXN0dXJlRXZlbnQmIGV2ZW50KQogeworICAgIHN3aXRjaCAoZXZlbnQudHlwZSgpKSB7
CisgICAgY2FzZSBQbGF0Zm9ybUV2ZW50OjpHZXN0dXJlU2Nyb2xsQmVnaW46CisgICAgICAgIG1f
Z2VzdHVyZUV2ZW50VGVzdFJlY29yZCB8PSBHZXN0dXJlVGVzdFNjcm9sbEJlZ2luOworICAgICAg
ICBicmVhazsKKyAgICBjYXNlIFBsYXRmb3JtRXZlbnQ6Okdlc3R1cmVTY3JvbGxFbmQ6CisgICAg
ICAgIG1fZ2VzdHVyZUV2ZW50VGVzdFJlY29yZCB8PSBHZXN0dXJlVGVzdFNjcm9sbEVuZDsKKyAg
ICAgICAgYnJlYWs7CisgICAgY2FzZSBQbGF0Zm9ybUV2ZW50OjpHZXN0dXJlU2Nyb2xsVXBkYXRl
OiB7CisgICAgICAgIG1fZ2VzdHVyZUV2ZW50VGVzdFJlY29yZCB8PSBHZXN0dXJlVGVzdFNjcm9s
bFVwZGF0ZTsKKyAgICAgICAgSW50U2l6ZSBtYXhGb3J3YXJkU2Nyb2xsRGVsdGEgPSBtX3Njcm9s
bGFibGVBcmVhLT5tYXhpbXVtU2Nyb2xsUG9zaXRpb24oKSAtIG1fc2Nyb2xsYWJsZUFyZWEtPnNj
cm9sbFBvc2l0aW9uKCk7CisgICAgICAgIEludFNpemUgbWF4QmFja3dhcmRTY3JvbGxEZWx0YSA9
IG1fc2Nyb2xsYWJsZUFyZWEtPnNjcm9sbFBvc2l0aW9uKCkgLSBtX3Njcm9sbGFibGVBcmVhLT5t
aW5pbXVtU2Nyb2xsUG9zaXRpb24oKTsKKyAgICAgICAgZmxvYXQgZGVsdGFYID0gKGV2ZW50LmRl
bHRhWCgpIDwgMC5mKSA/IG1heChldmVudC5kZWx0YVgoKSwgLXN0YXRpY19jYXN0PGZsb2F0Piht
YXhGb3J3YXJkU2Nyb2xsRGVsdGEud2lkdGgoKSkpIDogbWluKGV2ZW50LmRlbHRhWCgpLCBmbG9h
dChtYXhCYWNrd2FyZFNjcm9sbERlbHRhLndpZHRoKCkpKTsKKyAgICAgICAgZmxvYXQgZGVsdGFZ
ID0gKGV2ZW50LmRlbHRhWSgpIDwgMC5mKSA/IG1heChldmVudC5kZWx0YVkoKSwgLXN0YXRpY19j
YXN0PGZsb2F0PihtYXhGb3J3YXJkU2Nyb2xsRGVsdGEuaGVpZ2h0KCkpKSA6IG1pbihldmVudC5k
ZWx0YVkoKSwgZmxvYXQobWF4QmFja3dhcmRTY3JvbGxEZWx0YS5oZWlnaHQoKSkpOworCisgICAg
ICAgIEludFJlY3QgY29udGVudFJlY3QgPSBtX3Njcm9sbGFibGVBcmVhLT52aXNpYmxlQ29udGVu
dFJlY3QodHJ1ZSk7CisgICAgICAgIEZsb2F0UG9pbnQgb2Zmc2V0ID0gRmxvYXRQb2ludChjb250
ZW50UmVjdC54KCkgLSBkZWx0YVgsIGNvbnRlbnRSZWN0LnkoKSAtIGRlbHRhWSk7CisgICAgICAg
IHNjcm9sbFRvT2Zmc2V0V2l0aG91dEFuaW1hdGlvbihvZmZzZXQpOworICAgICAgICBicmVhazsK
KyAgICB9CisgICAgY2FzZSBQbGF0Zm9ybUV2ZW50OjpHZXN0dXJlVGFwRG93bjoKKyAgICBjYXNl
IFBsYXRmb3JtRXZlbnQ6Okdlc3R1cmVUYXA6CisgICAgY2FzZSBQbGF0Zm9ybUV2ZW50OjpHZXN0
dXJlRG91YmxlVGFwOgorICAgICAgICBicmVhazsKKyAgICBkZWZhdWx0OgorICAgICAgICBBU1NF
UlRfTk9UX1JFQUNIRUQoKTsKKyAgICB9CiB9CiAjZW5kaWYKIApkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vU2Nyb2xsQW5pbWF0b3IuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL1Njcm9sbEFuaW1hdG9yLmgKaW5kZXggNTc2NzQzOTQ1MmExYjMwMzRlYWU3MWU5ZDg0ZTli
MGMxNjRhNjJjMS4uOGYyOTllOTliYmRkYWVkMzBhMmY0Y2Q1YTVhNjU4MGRjZDViZTU5MyAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU2Nyb2xsQW5pbWF0b3IuaAorKysgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxBbmltYXRvci5oCkBAIC02Nyw2ICs2Nyw3IEBA
IHB1YmxpYzoKIAogICAgIHZpcnR1YWwgYm9vbCBoYW5kbGVXaGVlbEV2ZW50KGNvbnN0IFBsYXRm
b3JtV2hlZWxFdmVudCYpOwogI2lmIEVOQUJMRShHRVNUVVJFX0VWRU5UUykKKyAgICBlbnVtIEdl
c3R1cmVFdmVudFRlc3RTdGF0ZSB7IEdlc3R1cmVUZXN0U2Nyb2xsQmVnaW4gPSAxLCBHZXN0dXJl
VGVzdFNjcm9sbFVwZGF0ZSA9IDIsIEdlc3R1cmVUZXN0U2Nyb2xsRW5kID0gNCAsIEdlc3R1cmVU
ZXN0U2Nyb2xsID0gOH07CiAgICAgdmlydHVhbCB2b2lkIGhhbmRsZUdlc3R1cmVFdmVudChjb25z
dCBQbGF0Zm9ybUdlc3R1cmVFdmVudCYpOwogI2VuZGlmCiAKQEAgLTk2LDYgKzk3LDEwIEBAIHB1
YmxpYzoKICAgICB2aXJ0dWFsIHZvaWQgcmVzZXRab29tKCk7CiAgICAgdmlydHVhbCB2b2lkIHNl
dFpvb21QYXJhbWV0ZXJzRm9yVGVzdChmbG9hdCwgZmxvYXQsIGZsb2F0KTsKIAorI2lmIEVOQUJM
RShHRVNUVVJFX0VWRU5UUykKKyAgICBpbnQgZ2VzdHVyZUV2ZW50VGVzdFJlY29yZCgpIHsgcmV0
dXJuIG1fZ2VzdHVyZUV2ZW50VGVzdFJlY29yZDsgfQorI2VuZGlmCisKIHByb3RlY3RlZDoKICAg
ICBTY3JvbGxBbmltYXRvcihTY3JvbGxhYmxlQXJlYSopOwogCkBAIC0xMDksNiArMTE0LDEwIEBA
IHByb3RlY3RlZDoKICAgICBmbG9hdCBtX2N1cnJlbnRab29tU2NhbGU7CiAgICAgZmxvYXQgbV9j
dXJyZW50Wm9vbVRyYW5zWDsKICAgICBmbG9hdCBtX2N1cnJlbnRab29tVHJhbnNZOworCisjaWYg
RU5BQkxFKEdFU1RVUkVfRVZFTlRTKQorICAgIGludCBtX2dlc3R1cmVFdmVudFRlc3RSZWNvcmQ7
CisjZW5kaWYKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL1Njcm9sbEFuaW1hdG9yTm9uZS5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9TY3JvbGxBbmltYXRvck5vbmUuY3BwCmluZGV4IDNkMTQ3MmIzODE2N2MyYTI1
NjQyMjE0NDljMzEzZDkyYmI1NTE0NzkuLjU5YzRhOWZjZjc4NjQwOWE4ODg5MmU0MDJmMGFiMTgw
MmE3MTAyYmEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1Njcm9sbEFuaW1h
dG9yTm9uZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU2Nyb2xsQW5pbWF0b3JO
b25lLmNwcApAQCAtNTE5LDEwICs1MTksMTYgQEAgdm9pZCBTY3JvbGxBbmltYXRvck5vbmU6Omhh
bmRsZUdlc3R1cmVFdmVudChjb25zdCBQbGF0Zm9ybUdlc3R1cmVFdmVudCYgcGdlKQogICAgIGNh
c2UgUGxhdGZvcm1FdmVudDo6R2VzdHVyZURvdWJsZVRhcDoKICAgICAgICAgem9vbShwZ2UpOwog
ICAgICAgICBicmVhazsKLQorICAgIGNhc2UgUGxhdGZvcm1FdmVudDo6R2VzdHVyZVNjcm9sbEJl
Z2luOgorICAgIGNhc2UgUGxhdGZvcm1FdmVudDo6R2VzdHVyZVNjcm9sbEVuZDoKKyAgICBjYXNl
IFBsYXRmb3JtRXZlbnQ6Okdlc3R1cmVTY3JvbGxVcGRhdGU6IAorICAgIGNhc2UgUGxhdGZvcm1F
dmVudDo6R2VzdHVyZVRhcERvd246CisgICAgY2FzZSBQbGF0Zm9ybUV2ZW50OjpHZXN0dXJlVGFw
OgorICAgICAgICBTY3JvbGxBbmltYXRvcjo6aGFuZGxlR2VzdHVyZUV2ZW50KHBnZSk7CisgICAg
ICAgIGJyZWFrOwogICAgIGRlZmF1bHQ6Ci0gICAgICAgIC8vIFRPRE86IGFkZCBhbnkgb3RoZXIg
ZXZlbnQgdHlwZXMgd2Ugc2hvdWxkIGhhbmRsZQotICAgICAgICB7IH0KKyAgICAgICAgLy8gRklY
TUU6IGFkZCBhbnkgb3RoZXIgZXZlbnQgdHlwZXMgd2Ugc2hvdWxkIGhhbmRsZS4KKyAgICAgICAg
QVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgfQogfQogI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQm94LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9SZW5kZXJCb3guY3BwCmluZGV4IDFlMzk4ZWVmYjg4ODA0YjZjZWVjMTQ0MWJhNTE4MGNi
MThhYWJiNGUuLjVkMThmNmExNGYxMWIwMDljNTI2YmFjYWQwMWM5YTI3ZjA3M2ZjMWEgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCb3guY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCb3guY3BwCkBAIC02NzYsNiArNjc2LDIzIEBAIGJv
b2wgUmVuZGVyQm94OjpzY3JvbGwoU2Nyb2xsRGlyZWN0aW9uIGRpcmVjdGlvbiwgU2Nyb2xsR3Jh
bnVsYXJpdHkgZ3JhbnVsYXJpdHksCiAgICAgcmV0dXJuIGZhbHNlOwogfQogCisjaWYgRU5BQkxF
KEdFU1RVUkVfRVZFTlRTKQorYm9vbCBSZW5kZXJCb3g6Omdlc3R1cmUoY29uc3QgUGxhdGZvcm1H
ZXN0dXJlRXZlbnQmIGV2ZW50KQoreworICAgIC8vIGZwcmludGYoc3RkZXJyLCAiUmVuZGVyQm94
OjpnZXN0dXJlICVseFxuIiwgKHVuc2lnbmVkIGxvbmcpdGhpcyk7CisgICAgUmVuZGVyTGF5ZXIq
IHJlbmRlckxheWVyID0gbGF5ZXIoKTsKKyAgICBpZiAocmVuZGVyTGF5ZXIgJiYgKHJlbmRlckxh
eWVyLT52ZXJ0aWNhbFNjcm9sbGJhcigpIHx8IHJlbmRlckxheWVyLT5ob3Jpem9udGFsU2Nyb2xs
YmFyKCkpKSB7CisgICAgICByZW5kZXJMYXllci0+aGFuZGxlR2VzdHVyZUV2ZW50KGV2ZW50KTsK
KyAgICAgIHJldHVybiB0cnVlOworICAgIH0KKworICAgIFJlbmRlckJsb2NrKiBiID0gY29udGFp
bmluZ0Jsb2NrKCk7CisgICAgaWYgKGIgJiYgIWItPmlzUmVuZGVyVmlldygpKQorICAgICAgICBy
ZXR1cm4gYi0+Z2VzdHVyZShldmVudCk7CisgICAgcmV0dXJuIGZhbHNlOworfQorI2VuZGlmCisK
IGJvb2wgUmVuZGVyQm94Ojpsb2dpY2FsU2Nyb2xsKFNjcm9sbExvZ2ljYWxEaXJlY3Rpb24gZGly
ZWN0aW9uLCBTY3JvbGxHcmFudWxhcml0eSBncmFudWxhcml0eSwgZmxvYXQgbXVsdGlwbGllciwg
Tm9kZSoqIHN0b3BOb2RlKQogewogICAgIGJvb2wgc2Nyb2xsZWQgPSBmYWxzZTsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCb3guaCBiL1NvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJCb3guaAppbmRleCBkNzI3NTRhNTRkYThiNDk3OWJhNWM2YWE1ZmFh
MTNjMzljM2M0ZTM4Li42ZTc5NmVhZDhmYzU1MjRhYWZmMGJiMThmOWQwY2M4N2JiYjQ3YWU3IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQm94LmgKKysrIGIvU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJveC5oCkBAIC0zMSw2ICszMSw3IEBAIG5hbWVz
cGFjZSBXZWJDb3JlIHsKIAogY2xhc3MgUmVuZGVyQm94UmVnaW9uSW5mbzsKIGNsYXNzIFJlbmRl
clJlZ2lvbjsKK2NsYXNzIFBsYXRmb3JtR2VzdHVyZUV2ZW50Owogc3RydWN0IFBhaW50SW5mbzsK
IAogZW51bSBMb2dpY2FsV2lkdGhUeXBlIHsgTG9naWNhbFdpZHRoLCBNaW5Mb2dpY2FsV2lkdGgs
IE1heExvZ2ljYWxXaWR0aCB9OwpAQCAtNDMzLDYgKzQzNCwxMCBAQCBwdWJsaWM6CiAgICAgdmly
dHVhbCBib29sIG5lZWRzUHJlZmVycmVkV2lkdGhzUmVjYWxjdWxhdGlvbigpIGNvbnN0OwogICAg
IHZpcnR1YWwgdm9pZCBjb21wdXRlSW50cmluc2ljUmF0aW9JbmZvcm1hdGlvbihGbG9hdFNpemUm
IC8qIGludHJpbnNpY1JhdGlvICovLCBib29sJiAvKiBpc1BlcmNlbnRhZ2VJbnRyaW5zaWNTaXpl
ICovKSBjb25zdCB7IH0KIAorI2lmIEVOQUJMRShHRVNUVVJFX0VWRU5UUykKKyAgICB2aXJ0dWFs
IGJvb2wgZ2VzdHVyZShjb25zdCBQbGF0Zm9ybUdlc3R1cmVFdmVudCYpOworI2VuZGlmCisKIHBy
b3RlY3RlZDoKICAgICB2aXJ0dWFsIHZvaWQgd2lsbEJlRGVzdHJveWVkKCk7CiAKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3Rlc3RpbmcvSW50ZXJuYWxzLmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L3Rlc3RpbmcvSW50ZXJuYWxzLmNwcAppbmRleCAxOTVmNTcwZWZmMThhNTNmZWRlYTdkZWZjMGE0
ZmQ2ODlkOTg5NDNlLi5kOWMxMjE2Njg5OWMzMDEyZGJiMTZhODZkZjU1NjllYmRkNTFkYjY2IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS90ZXN0aW5nL0ludGVybmFscy5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvdGVzdGluZy9JbnRlcm5hbHMuY3BwCkBAIC00Myw4ICs0MywxMiBAQAogI2lu
Y2x1ZGUgIk5vZGVSZW5kZXJpbmdDb250ZXh0LmgiCiAjaW5jbHVkZSAiUGFnZS5oIgogI2luY2x1
ZGUgIlJhbmdlLmgiCisjaW5jbHVkZSAiUmVuZGVyQmxvY2suaCIKKyNpbmNsdWRlICJSZW5kZXJC
b3hNb2RlbE9iamVjdC5oIgorI2luY2x1ZGUgIlJlbmRlckxheWVyLmgiCiAjaW5jbHVkZSAiUmVu
ZGVyT2JqZWN0LmgiCiAjaW5jbHVkZSAiUmVuZGVyVHJlZUFzVGV4dC5oIgorI2luY2x1ZGUgIlJl
bmRlclZpZXcuaCIKICNpbmNsdWRlICJTZXR0aW5ncy5oIgogI2luY2x1ZGUgIlNoYWRvd0NvbnRl
bnRFbGVtZW50LmgiCiAjaW5jbHVkZSAiU2hhZG93Um9vdC5oIgpAQCAtNTk2LDYgKzYwMCwxMzYg
QEAgdW5zaWduZWQgSW50ZXJuYWxzOjpsZW5ndGhGcm9tUmFuZ2UoRWxlbWVudCogc2NvcGUsIGNv
bnN0IFJhbmdlKiByYW5nZSwgRXhjZXB0aW8KICAgICByZXR1cm4gbGVuZ3RoOwogfQogCitpbnQg
SW50ZXJuYWxzOjpyZWNvcmRPZkdlc3R1cmVTY3JvbGxFdmVudHMoRWxlbWVudCogZWxlbWVudCwg
RXhjZXB0aW9uQ29kZSYgZWMpCit7CisjaWYgRU5BQkxFKEdFU1RVUkVfRVZFTlRTKQorICAgIGlm
ICghZWxlbWVudCkgeworICAgICAgICBlYyA9IElOVkFMSURfQUNDRVNTX0VSUjsKKyAgICAgICAg
cmV0dXJuIC0xOworICAgIH0KKworICAgIFJlbmRlck9iamVjdCogcmVuZGVyZXIgPSBlbGVtZW50
LT5yZW5kZXJlcigpOworICAgIGlmICghcmVuZGVyZXIpIHsKKyAgICAgICAgZWMgPSBJTlZBTElE
X05PREVfVFlQRV9FUlI7CisgICAgICAgIHJldHVybiAtMTsKKyAgICB9CisgICAgCisgICAgUmVu
ZGVyQm94KiBib3ggPSByZW5kZXJlci0+ZW5jbG9zaW5nQm94KCk7CisgICAgd2hpbGUgKGJveCkg
eworICAgICAgICBSZW5kZXJMYXllciogcmVuZGVyTGF5ZXIgPSBib3gtPmxheWVyKCk7CisgICAg
ICAgIGlmIChyZW5kZXJMYXllcikKKyAgICAgICAgICAgcmV0dXJuIHJlbmRlckxheWVyLT5zY3Jv
bGxBbmltYXRvcigpLT5nZXN0dXJlRXZlbnRUZXN0UmVjb3JkKCk7CisKKyAgICAgICAgUmVuZGVy
QmxvY2sqIGJsb2NrID0gYm94LT5jb250YWluaW5nQmxvY2soKTsKKyAgICAgICAgaWYgKCFibG9j
aykgeworICAgICAgICAgICAgZWMgPSBJTlZBTElEX05PREVfVFlQRV9FUlI7CisgICAgICAgICAg
ICByZXR1cm4gLTE7CisgICAgICAgIH0KKworICAgICAgICBpZiAoYmxvY2stPmlzUmVuZGVyVmll
dygpKQorICAgICAgICAgICAgcmV0dXJuIHRvUmVuZGVyVmlldyhibG9jayktPmZyYW1lVmlldygp
LT5zY3JvbGxBbmltYXRvcigpLT5nZXN0dXJlRXZlbnRUZXN0UmVjb3JkKCk7CisgICAgICAgIGJv
eCA9IGJsb2NrOworICAgIH0gICAgICAgIAorICAgIGVjID0gSU5WQUxJRF9OT0RFX1RZUEVfRVJS
OworICAgIHJldHVybiAtMTsKKyNlbHNlCisgICAgVU5VU0VEX1BBUkFNKGVsZW1lbnQpOworICAg
IGVjID0gSU5WQUxJRF9BQ0NFU1NfRVJSOworICAgIHJldHVybiAtMTsKKyNlbmRpZgorfQorCitp
bnQgSW50ZXJuYWxzOjpyZWNvcmRPZkdlc3R1cmVTY3JvbGxFdmVudHNEb2N1bWVudChEb2N1bWVu
dCogZG9jdW1lbnQsIEV4Y2VwdGlvbkNvZGUmIGVjKQoreworI2lmIEVOQUJMRShHRVNUVVJFX0VW
RU5UUykKKyAgICBpZiAoIWRvY3VtZW50KSB7CisgICAgICAgIGVjID0gSU5WQUxJRF9BQ0NFU1Nf
RVJSOworICAgICAgICByZXR1cm4gLTE7CisgICAgfQorCisgICAgRnJhbWVWaWV3KiBmcmFtZSA9
IGRvY3VtZW50LT52aWV3KCk7CisgICAgaWYgKCFmcmFtZSkgeworICAgICAgICBlYyA9IElOVkFM
SURfTk9ERV9UWVBFX0VSUjsKKyAgICAgICAgcmV0dXJuIC0xOworICAgIH0KKworICAgIGlmICgh
ZnJhbWUtPnNjcm9sbEFuaW1hdG9yKCkpCisgICAgICBlYyA9IElOVkFMSURfTk9ERV9UWVBFX0VS
UjsKKworICAgIHJldHVybiBmcmFtZS0+c2Nyb2xsQW5pbWF0b3IoKS0+Z2VzdHVyZUV2ZW50VGVz
dFJlY29yZCgpOworI2Vsc2UKKyAgICBVTlVTRURfUEFSQU0oZG9jdW1lbnQpOworICAgIGVjID0g
SU5WQUxJRF9BQ0NFU1NfRVJSOworICAgIHJldHVybiAtMTsKKyNlbmRpZgorfQorCisjaWYgRU5B
QkxFKEdFU1RVUkVfRVZFTlRTKQorc3RhdGljCit2b2lkIHNlbmRHZXN0dXJlRXZlbnQoRG9jdW1l
bnQqIGRvY3VtZW50LCBQbGF0Zm9ybUV2ZW50OjpUeXBlIHR5cGUsIGNvbnN0IGZsb2F0IHBvc1gs
IGNvbnN0IGZsb2F0IHBvc1ksIGNvbnN0IGZsb2F0IGRlbHRhWCwgY29uc3QgZmxvYXQgZGVsdGFZ
LCBFeGNlcHRpb25Db2RlJiBlYykKK3sKKyAgICBpZiAoIWRvY3VtZW50KSB7CisgICAgICAgIGVj
ID0gSU5WQUxJRF9BQ0NFU1NfRVJSOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIEZyYW1l
KiBmcmFtZSA9IGRvY3VtZW50LT5mcmFtZSgpOworICAgIGlmICghZnJhbWUpIHsKKyAgICAgICAg
ZWMgPSBJTlZBTElEX05PREVfVFlQRV9FUlI7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAg
ICBJbnRQb2ludCBwb3NpdGlvbihwb3NYLCBwb3NZKTsKKyAgICBQbGF0Zm9ybUdlc3R1cmVFdmVu
dCBnZXN0dXJlRXZlbnQodHlwZSwgcG9zaXRpb24sIHBvc2l0aW9uLCAwLiwgZGVsdGFYLCBkZWx0
YVksIGZhbHNlLCBmYWxzZSwgZmFsc2UsIGZhbHNlKTsKKyAgICBmcmFtZS0+ZXZlbnRIYW5kbGVy
KCktPmhhbmRsZUdlc3R1cmVFdmVudChnZXN0dXJlRXZlbnQpOworfQorI2VuZGlmCisKK2ludCBJ
bnRlcm5hbHM6OnNlbmRTY3JvbGxCZWdpbkdlc3R1cmVFdmVudChEb2N1bWVudCogZG9jdW1lbnQs
IGNvbnN0IGZsb2F0IHBvc1gsIGNvbnN0IGZsb2F0IHBvc1ksIEV4Y2VwdGlvbkNvZGUmIGVjKQor
eworI2lmIEVOQUJMRShHRVNUVVJFX0VWRU5UUykKKyAgICBzZW5kR2VzdHVyZUV2ZW50KGRvY3Vt
ZW50LCBQbGF0Zm9ybUV2ZW50OjpHZXN0dXJlU2Nyb2xsQmVnaW4sIHBvc1gsIHBvc1ksIDAuZiwg
MC5mLCBlYyk7CisgICAgcmV0dXJuIDA7CisjZWxzZQorICAgIFVOVVNFRF9QQVJBTShkb2N1bWVu
dCk7CisgICAgVU5VU0VEX1BBUkFNKHBvc1gpOworICAgIFVOVVNFRF9QQVJBTShwb3NZKTsKKyAg
ICBlYyA9IElOVkFMSURfQUNDRVNTX0VSUjsKKyAgICByZXR1cm4gLTE7CisjZW5kaWYKK30KKwor
aW50IEludGVybmFsczo6c2VuZFNjcm9sbFVwZGF0ZUdlc3R1cmVFdmVudChEb2N1bWVudCogZG9j
dW1lbnQsIGNvbnN0IGZsb2F0IHBvc1gsIGNvbnN0IGZsb2F0IHBvc1ksIGNvbnN0IGZsb2F0IGRl
bHRhWCwgY29uc3QgZmxvYXQgZGVsdGFZLCBFeGNlcHRpb25Db2RlJiBlYykKK3sKKyNpZiBFTkFC
TEUoR0VTVFVSRV9FVkVOVFMpCisgICAgc2VuZEdlc3R1cmVFdmVudChkb2N1bWVudCwgUGxhdGZv
cm1FdmVudDo6R2VzdHVyZVNjcm9sbFVwZGF0ZSwgcG9zWCwgcG9zWSwgZGVsdGFYLCBkZWx0YVks
IGVjKTsKKyAgICByZXR1cm4gMDsKKyNlbHNlCisgICAgVU5VU0VEX1BBUkFNKGRvY3VtZW50KTsK
KyAgICBVTlVTRURfUEFSQU0ocG9zWCk7CisgICAgVU5VU0VEX1BBUkFNKHBvc1kpOworICAgIFVO
VVNFRF9QQVJBTShkZWx0YVgpOworICAgIFVOVVNFRF9QQVJBTShkZWx0YVkpOworICAgIGVjID0g
SU5WQUxJRF9BQ0NFU1NfRVJSOworICAgIHJldHVybiAtMTsKKyNlbmRpZgorfQorCitpbnQgSW50
ZXJuYWxzOjpzZW5kU2Nyb2xsRW5kR2VzdHVyZUV2ZW50KERvY3VtZW50KiBkb2N1bWVudCwgY29u
c3QgZmxvYXQgcG9zWCwgY29uc3QgZmxvYXQgcG9zWSwgY29uc3QgZmxvYXQgZGVsdGFYLCBjb25z
dCBmbG9hdCBkZWx0YVksIEV4Y2VwdGlvbkNvZGUmIGVjKQoreworI2lmIEVOQUJMRShHRVNUVVJF
X0VWRU5UUykKKyAgICBzZW5kR2VzdHVyZUV2ZW50KGRvY3VtZW50LCBQbGF0Zm9ybUV2ZW50OjpH
ZXN0dXJlU2Nyb2xsRW5kLCBwb3NYLCBwb3NZLCBkZWx0YVgsIGRlbHRhWSwgZWMpOworICAgIHJl
dHVybiAwOworI2Vsc2UKKyAgICBVTlVTRURfUEFSQU0oZG9jdW1lbnQpOworICAgIFVOVVNFRF9Q
QVJBTShwb3NYKTsKKyAgICBVTlVTRURfUEFSQU0ocG9zWSk7CisgICAgVU5VU0VEX1BBUkFNKGRl
bHRhWCk7CisgICAgVU5VU0VEX1BBUkFNKGRlbHRhWSk7CisgICAgZWMgPSBJTlZBTElEX0FDQ0VT
U19FUlI7CisgICAgcmV0dXJuIC0xOworI2VuZGlmCit9CisKIHZvaWQgSW50ZXJuYWxzOjpzZXRT
aG91bGRMYXlvdXRGaXhlZEVsZW1lbnRzUmVsYXRpdmVUb0ZyYW1lKERvY3VtZW50KiBkb2N1bWVu
dCwgYm9vbCBlbmFibGVkLCBFeGNlcHRpb25Db2RlJiBlYykKIHsKICAgICBpZiAoIWRvY3VtZW50
IHx8ICFkb2N1bWVudC0+dmlldygpKSB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS90ZXN0
aW5nL0ludGVybmFscy5oIGIvU291cmNlL1dlYkNvcmUvdGVzdGluZy9JbnRlcm5hbHMuaAppbmRl
eCBlYTAwZDE1OGRiNjc3OTA4OWI3ZjUzM2YwZjRkNTI2MTNlYjYxMTM3Li5mYzg5MjVlYzBkMzc1
ZDQzMWQzZDIzOTc0NzUyNjQwNjY0NWZiMjVmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS90
ZXN0aW5nL0ludGVybmFscy5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Rlc3RpbmcvSW50ZXJuYWxz
LmgKQEAgLTExNyw2ICsxMTcsMTIgQEAgcHVibGljOgogCiAgICAgc3RhdGljIGNvbnN0IGNoYXIq
IGludGVybmFsc0lkOwogCisgICAgaW50IHJlY29yZE9mR2VzdHVyZVNjcm9sbEV2ZW50cyhFbGVt
ZW50KiwgRXhjZXB0aW9uQ29kZSYpOworICAgIGludCByZWNvcmRPZkdlc3R1cmVTY3JvbGxFdmVu
dHNEb2N1bWVudChEb2N1bWVudCosIEV4Y2VwdGlvbkNvZGUmKTsKKyAgICBpbnQgc2VuZFNjcm9s
bEJlZ2luR2VzdHVyZUV2ZW50KERvY3VtZW50KiwgY29uc3QgZmxvYXQgcG9zWCwgY29uc3QgZmxv
YXQgcG9zWSwgRXhjZXB0aW9uQ29kZSYpOworICAgIGludCBzZW5kU2Nyb2xsVXBkYXRlR2VzdHVy
ZUV2ZW50KERvY3VtZW50KiwgY29uc3QgZmxvYXQgcG9zWCwgY29uc3QgZmxvYXQgcG9zWSwgY29u
c3QgZmxvYXQgZGVsdGFYLCBjb25zdCBmbG9hdCBkZWx0YVksIEV4Y2VwdGlvbkNvZGUmKTsKKyAg
ICBpbnQgc2VuZFNjcm9sbEVuZEdlc3R1cmVFdmVudChEb2N1bWVudCosIGNvbnN0IGZsb2F0IHBv
c1gsIGNvbnN0IGZsb2F0IHBvc1ksIGNvbnN0IGZsb2F0IGRlbHRhWCwgY29uc3QgZmxvYXQgZGVs
dGFZLCBFeGNlcHRpb25Db2RlJik7CisKIHByaXZhdGU6CiAgICAgSW50ZXJuYWxzKCk7CiAKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Rlc3RpbmcvSW50ZXJuYWxzLmlkbCBiL1NvdXJjZS9X
ZWJDb3JlL3Rlc3RpbmcvSW50ZXJuYWxzLmlkbAppbmRleCBkNjIyMjYwNDMwYTcxNjljNGM2YTM1
MWU2MDYxOTA1MGY2OTJhMjMxLi42MTczNWQ5YjI0ZWI0NTc0ODg0MWZjNzliZDhiNzIzMjA5Mjg2
NTVhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS90ZXN0aW5nL0ludGVybmFscy5pZGwKKysr
IGIvU291cmNlL1dlYkNvcmUvdGVzdGluZy9JbnRlcm5hbHMuaWRsCkBAIC03OCw2ICs3OCwxMSBA
QCBtb2R1bGUgd2luZG93IHsKICAgICAgICAgdW5zaWduZWQgbG9uZyBsb2NhdGlvbkZyb21SYW5n
ZShpbiBFbGVtZW50IHNjb3BlLCBpbiBSYW5nZSByYW5nZSkgcmFpc2VzIChET01FeGNlcHRpb24p
OwogICAgICAgICB1bnNpZ25lZCBsb25nIGxlbmd0aEZyb21SYW5nZShpbiBFbGVtZW50IHNjb3Bl
LCBpbiBSYW5nZSByYW5nZSkgcmFpc2VzIChET01FeGNlcHRpb24pOwogCisgICAgICAgIGludCBy
ZWNvcmRPZkdlc3R1cmVTY3JvbGxFdmVudHMoaW4gRWxlbWVudCB0YXJnZXQpIHJhaXNlcyhET01F
eGNlcHRpb24pOworICAgICAgICBpbnQgcmVjb3JkT2ZHZXN0dXJlU2Nyb2xsRXZlbnRzRG9jdW1l
bnQoaW4gRG9jdW1lbnQgZG9jdW1lbnQpIHJhaXNlcyhET01FeGNlcHRpb24pOworICAgICAgICBp
bnQgc2VuZFNjcm9sbEJlZ2luR2VzdHVyZUV2ZW50KGluIERvY3VtZW50IGRvY3VtZW50LCBpbiBm
bG9hdCBwb3NYLCBpbiBmbG9hdCBwb3NZKSByYWlzZXMoRE9NRXhjZXB0aW9uKTsKKyAgICAgICAg
aW50IHNlbmRTY3JvbGxVcGRhdGVHZXN0dXJlRXZlbnQoaW4gRG9jdW1lbnQgZG9jdW1lbnQsIGlu
IGZsb2F0IHBvc1gsIGluIGZsb2F0IHBvc1ksIGluIGZsb2F0IGRlbHRhWCwgaW4gZmxvYXQgZGVs
dGFZKSByYWlzZXMoRE9NRXhjZXB0aW9uKTsKKyAgICAgICAgaW50IHNlbmRTY3JvbGxFbmRHZXN0
dXJlRXZlbnQoaW4gRG9jdW1lbnQgZG9jdW1lbnQsIGluIGZsb2F0IHBvc1gsIGluIGZsb2F0IHBv
c1ksIGluIGZsb2F0IGRlbHRhWCwgaW4gZmxvYXQgZGVsdGFZKSByYWlzZXMoRE9NRXhjZXB0aW9u
KTsKICAgICAgICAgdm9pZCBzZXRTaG91bGRMYXlvdXRGaXhlZEVsZW1lbnRzUmVsYXRpdmVUb0Zy
YW1lKGluIERvY3VtZW50IGRvY3VtZW50LCBpbiBib29sZWFuIGVuYWJsZWQpIHJhaXNlcyhET01F
eGNlcHRpb24pOwogICAgICAgICB2b2lkIHNldFVuaWZpZWRUZXh0Q2hlY2tpbmdFbmFibGVkKGlu
IERvY3VtZW50IGRvY3VtZW50LCBpbiBib29sZWFuIGVuYWJsZWQpIHJhaXNlcyAoRE9NRXhjZXB0
aW9uKTsKICAgICAgICAgYm9vbGVhbiB1bmlmaWVkVGV4dENoZWNraW5nRW5hYmxlZChpbiBEb2N1
bWVudCBkb2N1bWVudCkgcmFpc2VzIChET01FeGNlcHRpb24pOwpkaWZmIC0tZ2l0IGEvTGF5b3V0
VGVzdHMvQ2hhbmdlTG9nIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCmluZGV4IDVmYmZjYTRmYzI5
ZTgxMTY1N2RlNTQ3MmRhNGMyMTUwZjc2NGMyNzUuLjM4NTAyOTJiN2E0NThmMDRjZDkyZDNiZjRl
ZWM5NmE0OTliOGMzOTIgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL0NoYW5nZUxvZworKysgYi9M
YXlvdXRUZXN0cy9DaGFuZ2VMb2cKQEAgLTEsMyArMSwyNCBAQAorMjAxMS0xMi0yMyAgUm9iZXJ0
IEtyb2VnZXIgIDxyamtyb2VnZUBjaHJvbWl1bS5jb20+CisKKyAgICAgICAgUGxhdGZvcm1HZXN0
dXJlRXZlbnQ6OmhhbmRsZUdlc3R1cmVFdmVudCBzaG91bGQgaGl0IHRlc3Qgd2hpbGUgZGlzcGF0
Y2hpbmcgUGxhdGZvcm1FdmVudDo6R2VzdHVyZVNjcm9sbCogZXZlbnRzLgorICAgICAgICBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9Njc4MjIKKworICAgICAgICBUZXN0
cyB0byB2ZXJpZnkgdGhhdCB0aGUgUGxhdGZvcm1FdmVudCBHZXN0dXJlU2Nyb2xsKlR5cGUgZXZl
bnRzCisgICAgICAgIGFyZSBiZWluZyBjb3JyZWN0bHkgZGlzcGF0Y2hlZCBhbmQgdGhhdCBsYXRj
aGluZyBkb2VzIG5vdCBmYWlsCisgICAgICAgIGluIHRoZSBwcmVzZW5jZSBvZiB0aGUgcmVtb3Zh
bCBvZiB0aGUgdGFyZ2V0IGVsZW1lbnQuCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChP
T1BTISkuCisKKyAgICAgICAgKiBmYXN0L2V2ZW50cy90b3VjaC9nZXN0dXJlL3RvdWNoLWdlc3R1
cmUtc2Nyb2xsLWRpdi1leHBlY3RlZC50eHQ6IEFkZGVkLgorICAgICAgICAqIGZhc3QvZXZlbnRz
L3RvdWNoL2dlc3R1cmUvdG91Y2gtZ2VzdHVyZS1zY3JvbGwtZGl2Lmh0bWw6IEFkZGVkOiB0ZXN0
cyBkZWxpdmVyeSB0byBvdmVyZmxvdy1kaXZzLgorICAgICAgICAqIGZhc3QvZXZlbnRzL3RvdWNo
L2dlc3R1cmUvdG91Y2gtZ2VzdHVyZS1zY3JvbGwtaWZyYW1lLWV4cGVjdGVkLnR4dDogQWRkZWQu
CisgICAgICAgICogZmFzdC9ldmVudHMvdG91Y2gvZ2VzdHVyZS90b3VjaC1nZXN0dXJlLXNjcm9s
bC1pZnJhbWUuaHRtbDogQWRkZWQ6IHRlc3RzIGRlbGl2ZXJ5IHRvIGFuIGlmcmFtZS4KKyAgICAg
ICAgKiBmYXN0L2V2ZW50cy90b3VjaC9nZXN0dXJlL3RvdWNoLWdlc3R1cmUtc2Nyb2xsLXBhZ2Ut
ZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAgICAgKiBmYXN0L2V2ZW50cy90b3VjaC9nZXN0dXJl
L3RvdWNoLWdlc3R1cmUtc2Nyb2xsLXBhZ2UuaHRtbDogQWRkZWQ6IHRlc3RzIGRlbGl2ZXJ5IHRv
IGEgcGFnZS4KKyAgICAgICAgKiBmYXN0L2V2ZW50cy90b3VjaC9nZXN0dXJlL3RvdWNoLWdlc3R1
cmUtc2Nyb2xsLXNoeS10YXJnZXQtZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAgICAgKiBmYXN0
L2V2ZW50cy90b3VjaC9nZXN0dXJlL3RvdWNoLWdlc3R1cmUtc2Nyb2xsLXNoeS10YXJnZXQuaHRt
bDogQWRkZWQ6IHRlc3RzIHN1Y2Nlc3NmdWwgb3BlcmF0aW9uIHdoZW4gdGhlIGxhdGNoZWQgdGFy
Z2V0IGRpdiBpcyByZW1vdmVkIGR1cmluZyB0aGUgZ2VzdHVyZSBldmVudCBzZXF1ZW5jZS4KKyAg
ICAgICAgKiBmYXN0L2V2ZW50cy90b3VjaC9yZXNvdXJjZXMvc2Nyb2xsLWluc2lkZS1pZnJhbWUu
aHRtbDogQWRkZWQuCisKIDIwMTEtMTItMjMgIFJha2VzaCBLTiAgPHJha2VzaC5rbkBtb3Rvcm9s
YS5jb20+CiAKICAgICAgICAgW01hY10gZmFzdC9ldmVudHMvYXV0b3Njcm9sbC1zaG91bGQtbm90
LXN0b3Atb24ta2V5cHJlc3MuaHRtbCBmYWlscwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvZmFz
dC9ldmVudHMvdG91Y2gvZ2VzdHVyZS90b3VjaC1nZXN0dXJlLXNjcm9sbC1kaXYtZXhwZWN0ZWQu
dHh0IGIvTGF5b3V0VGVzdHMvZmFzdC9ldmVudHMvdG91Y2gvZ2VzdHVyZS90b3VjaC1nZXN0dXJl
LXNjcm9sbC1kaXYtZXhwZWN0ZWQudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmViM2IwYmYxYTYwN2NhZjBmYWVk
ODMyMjNhNGY5NWY3ZTllYzM0YjUKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9mYXN0
L2V2ZW50cy90b3VjaC9nZXN0dXJlL3RvdWNoLWdlc3R1cmUtc2Nyb2xsLWRpdi1leHBlY3RlZC50
eHQKQEAgLTAsMCArMSwxNyBAQAorVGhpcyB0ZXN0cyBnZXN0dXJlIGV2ZW50IHNjcm9sbGluZyBv
ZiBhbiBvdmVyZmxvdyBkaXYuCisKK09uIHN1Y2Nlc3MsIHlvdSB3aWxsIHNlZSBhIHNlcmllcyBv
ZiAiUEFTUyIgbWVzc2FnZXMsIGZvbGxvd2VkIGJ5ICJURVNUIENPTVBMRVRFIi4KKworCitmaXJz
dCBnZXN0dXJlCitQQVNTIG1vdmluZ2Rpdi5zY3JvbGxUb3AgaXMgMAorUEFTUyBtb3ZpbmdkaXYu
c2Nyb2xsTGVmdCBpcyA5MAorUEFTUyB3aW5kb3cuaW50ZXJuYWxzLnJlY29yZE9mR2VzdHVyZVNj
cm9sbEV2ZW50cyhtb3ZpbmdkaXYpIGlzIDEzCitzZWNvbmQgZ2VzdHVyZQorUEFTUyBtb3Zpbmdk
aXYuc2Nyb2xsVG9wIGlzIDk1CitQQVNTIG1vdmluZ2Rpdi5zY3JvbGxMZWZ0IGlzIDkwCitQQVNT
IHdpbmRvdy5pbnRlcm5hbHMucmVjb3JkT2ZHZXN0dXJlU2Nyb2xsRXZlbnRzKG1vdmluZ2Rpdikg
aXMgMTMKK1BBU1Mgc3VjY2Vzc2Z1bGx5UGFyc2VkIGlzIHRydWUKKworVEVTVCBDT01QTEVURQor
CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9mYXN0L2V2ZW50cy90b3VjaC9nZXN0dXJlL3RvdWNo
LWdlc3R1cmUtc2Nyb2xsLWRpdi5odG1sIGIvTGF5b3V0VGVzdHMvZmFzdC9ldmVudHMvdG91Y2gv
Z2VzdHVyZS90b3VjaC1nZXN0dXJlLXNjcm9sbC1kaXYuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi42Njg1MjJi
MGUyZWNjNjIyOTNjMzliZmRkNzVjZjdjNmNlYzljMjA3Ci0tLSAvZGV2L251bGwKKysrIGIvTGF5
b3V0VGVzdHMvZmFzdC9ldmVudHMvdG91Y2gvZ2VzdHVyZS90b3VjaC1nZXN0dXJlLXNjcm9sbC1k
aXYuaHRtbApAQCAtMCwwICsxLDE1OSBAQAorPCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9JRVRG
Ly9EVEQgSFRNTC8vRU4iPgorPGh0bWw+Cis8aGVhZD4KKzxzY3JpcHQgc3JjPSIuLi8uLi8uLi9q
cy9yZXNvdXJjZXMvanMtdGVzdC1wcmUuanMiPjwvc2NyaXB0PgorPHN0eWxlIHR5cGU9InRleHQv
Y3NzIj4KKyN0b3VjaHRhcmdldCB7CisgIHdpZHRoOiAxMDBweDsKKyAgaGVpZ2h0OiAxMDBweDsK
KyAgcG9zaXRpb246IHJlbGF0aXZlOworICBiYWNrZ3JvdW5kOiB3aGl0ZTsKK30KKworI21vdmlu
Z2JveCB7CisgIHdpZHRoOiAxMDAlOworICBoZWlnaHQ6IDEwMCU7CisgIHBvc2l0aW9uOiBhYnNv
bHV0ZTsKKyAgd29yZC13cmFwOiBicmVhay13b3JkOworICBvdmVyZmxvdy15OiBzY3JvbGw7Cisg
IG92ZXJmbG93LXg6IHNjcm9sbDsKKyAgZGlzcGxheTogYmxvY2s7Cit9CisKKyNncmVlbmJveCB7
CisgIHdpZHRoOiAxMDBweDsKKyAgaGVpZ2h0OiAxMDBweDsKKyAgYmFja2dyb3VuZDogZ3JlZW47
CisgIHBhZGRpbmc6IDBweDsKKyAgbWFyZ2luOiAwcHg7Cit9CisKKyNyZWRib3ggeworICB3aWR0
aDogMTAwcHg7CisgIGhlaWdodDogMTAwcHg7CisgIGJhY2tncm91bmQ6IHJlZDsKKyAgcGFkZGlu
ZzogMHB4OworICBtYXJnaW46IDBweDsKK30KKwordGQgeworICBwYWRkaW5nOiAwcHg7Cit9Cis8
L3N0eWxlPgorPC9oZWFkPgorPGJvZHkgc3R5bGU9Im1hcmdpbjowIiBvbmxvYWQ9InJ1blRlc3Qo
KTsiPgorPGRpdiBpZD0idG91Y2h0YXJnZXQiPgorICA8ZGl2IGlkPSJtb3Zpbmdib3giPgorICAg
IDx0YWJsZSBib3JkZXI9IjAiIGNlbGxzcGFjaW5nPSIwcHgiIGlkPSJ0YWJsZWZvbyI+CisgICAg
ICA8dHI+CisgICAgICAgIDx0ZD48ZGl2IGlkPSJyZWRib3giPjwvZGl2PjwvdGQ+CisgICAgICAg
IDx0ZD48ZGl2IGlkPSJncmVlbmJveCI+PC9kaXY+PC90ZD4KKyAgICAgIDwvdHI+CisgICAgICA8
dHI+CisgICAgICAgIDx0ZD48ZGl2IGlkPSJncmVlbmJveCI+PC9kaXY+PC90ZD4KKyAgICAgICAg
PHRkPjxkaXYgaWQ9ImdyZWVuYm94Ij48L2Rpdj48L3RkPgorICAgICAgPC90cj4KKyAgICA8L3Rh
YmxlPgorICA8L2Rpdj4KKzwvZGl2PgorCis8cCBpZD0iZGVzY3JpcHRpb24iPjwvcD4KKzxkaXYg
aWQ9ImNvbnNvbGUiPjwvZGl2PgorPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgorCit2
YXIgbW92aW5nZGl2OwordmFyIGV4cGVjdGVkU2Nyb2xsc1RvdGFsID0gMjsKK3ZhciBzY3JvbGxz
T2NjdXJyZWQgPSAwOwordmFyIHNjcm9sbEFtb3VudFggPSBbJzkwJywgJzkwJ107Cit2YXIgc2Ny
b2xsQW1vdW50WSA9IFsnMCcsICc5NSddOwordmFyIGdlc3R1cmVEaXNwYXRjaFJlY29yZCA9IFsn
MTMnLCAnMTMnXTsKKworZnVuY3Rpb24gY2hlY2tTY3JvbGxPZmZzZXQoKQoreworICAgIG1vdmlu
Z2RpdiA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdtb3Zpbmdib3gnKTsKKyAgICBpZiAod2lu
ZG93LmV2ZW50U2VuZGVyKSB7CisgICAgICAgIHNob3VsZEJlKCdtb3ZpbmdkaXYuc2Nyb2xsVG9w
Jywgc2Nyb2xsQW1vdW50WVtzY3JvbGxzT2NjdXJyZWRdKTsKKyAgICAgICAgc2hvdWxkQmUoJ21v
dmluZ2Rpdi5zY3JvbGxMZWZ0Jywgc2Nyb2xsQW1vdW50WFtzY3JvbGxzT2NjdXJyZWRdKTsKKyAg
ICAgICAgaWYgKHdpbmRvdy5pbnRlcm5hbHMpIHsKKyAgICAgICAgICAgIHNob3VsZEJlKCd3aW5k
b3cuaW50ZXJuYWxzLnJlY29yZE9mR2VzdHVyZVNjcm9sbEV2ZW50cyhtb3ZpbmdkaXYpJywgZ2Vz
dHVyZURpc3BhdGNoUmVjb3JkW3Njcm9sbHNPY2N1cnJlZF0pOworICAgICAgICB9CisgICAgICAg
IHNjcm9sbHNPY2N1cnJlZCsrOworICAgIH0KKworICAgaWYgKHNjcm9sbHNPY2N1cnJlZCA9PSBl
eHBlY3RlZFNjcm9sbHNUb3RhbCkgeworICAgICAgICAvLyBJZiB3ZSd2ZSBnb3QgaGVyZSwgd2Un
dmUgcGFzc2VkLgorICAgICAgICBpc1N1Y2Nlc3NmdWxseVBhcnNlZCgpOworICAgICAgICBpZiAo
d2luZG93LmxheW91dFRlc3RDb250cm9sbGVyKQorICAgICAgICAgICAgbGF5b3V0VGVzdENvbnRy
b2xsZXIubm90aWZ5RG9uZSgpOworICAgIH0gZWxzZSB7CisgICAgICAgIHNlY29uZFRvdWNoRHJh
Z1NlcXVlbmNlKCk7CisgICAgfQorfQorCitmdW5jdGlvbiBmaW5nZXJVcChldmVudCkKK3sKKyAg
ICBpZiAoIXdpbmRvdy5sYXlvdXRUZXN0Q29udHJvbGxlcikKKyAgICAgICAgZGVidWcoJ21vdmVk
OiAnICsgZXZlbnQuY3VycmVudFRhcmdldC5zY3JvbGxUb3AgKyAnLCAnICsgZXZlbnQuY3VycmVu
dFRhcmdldC5zY3JvbGxMZWZ0KTsKKyAgICByZXR1cm4gdHJ1ZTsgIC8vIFdhbnQgdGhlIGRlZmF1
bHQgYmVoYXZpb3VyLgorfQorCitmdW5jdGlvbiBmaXJzdFRvdWNoRHJhZ1NlcXVlbmNlKCkKK3sK
KyAgICBkZWJ1ZygiZmlyc3QgZ2VzdHVyZSIpOworICAgIHdpbmRvdy5pbnRlcm5hbHMuc2VuZFNj
cm9sbEJlZ2luR2VzdHVyZUV2ZW50KGRvY3VtZW50LCA1LCAxMik7CisgICAgd2luZG93LmludGVy
bmFscy5zZW5kU2Nyb2xsVXBkYXRlR2VzdHVyZUV2ZW50KGRvY3VtZW50LCA1LCAxMiwgLTkwLCAw
KTsKKyAgICB3aW5kb3cuaW50ZXJuYWxzLnNlbmRTY3JvbGxFbmRHZXN0dXJlRXZlbnQoZG9jdW1l
bnQsIDUsIDEyLCAwLCAwKTsKKworICAgIC8vIFdhaXQgZm9yIGxheW91dC4KKyAgICBjaGVja1Nj
cm9sbE9mZnNldCgpOworfQorCitmdW5jdGlvbiBzZWNvbmRUb3VjaERyYWdTZXF1ZW5jZSgpCit7
CisgICAgZGVidWcoInNlY29uZCBnZXN0dXJlIik7CisgICAgd2luZG93LmludGVybmFscy5zZW5k
U2Nyb2xsQmVnaW5HZXN0dXJlRXZlbnQoZG9jdW1lbnQsIDEyLCAyKTsKKyAgICB3aW5kb3cuaW50
ZXJuYWxzLnNlbmRTY3JvbGxVcGRhdGVHZXN0dXJlRXZlbnQoZG9jdW1lbnQsIDEyLCAyLCAwLCAt
OTUpOworICAgIHdpbmRvdy5pbnRlcm5hbHMuc2VuZFNjcm9sbEVuZEdlc3R1cmVFdmVudChkb2N1
bWVudCwgMTIsIDIsIDAsIDApOworCisgICAgLy8gV2FpdCBmb3IgbGF5b3V0LgorICAgIGNoZWNr
U2Nyb2xsT2Zmc2V0KCk7Cit9CisKK2Z1bmN0aW9uIGV4aXRJZk5lY2Vzc2FyeSgpCit7CisgICAg
ZGVidWcoJ3dpbmRvdy5pbnRlcm5hbHMgbm90IGltcGxlbWVudGVkIG9yIGdlc3R1cmUgZXZlbnQg
c2Nyb2xpbmcgaXMgYnJva2VuLicpOworICAgIGlzU3VjY2Vzc2Z1bGx5UGFyc2VkKCk7CisgICAg
aWYgKHdpbmRvdy5sYXlvdXRUZXN0Q29udHJvbGxlcikKKyAgICAgICAgbGF5b3V0VGVzdENvbnRy
b2xsZXIubm90aWZ5RG9uZSgpOworfQorCitpZiAod2luZG93LmxheW91dFRlc3RDb250cm9sbGVy
KQorICAgIGxheW91dFRlc3RDb250cm9sbGVyLndhaXRVbnRpbERvbmUoKTsKKyAgICAKK2Z1bmN0
aW9uIGNoZWNrVGVzdERlcGVuZGVuY2llcygpCit7CisgICAgcmV0dXJuIHdpbmRvdy5ldmVudFNl
bmRlciAmJiB3aW5kb3cuaW50ZXJuYWxzICYmIHdpbmRvdy5pbnRlcm5hbHMuc2VuZFNjcm9sbEJl
Z2luR2VzdHVyZUV2ZW50ICYmIHdpbmRvdy5pbnRlcm5hbHMuc2VuZFNjcm9sbFVwZGF0ZUdlc3R1
cmVFdmVudCAmJiB3aW5kb3cuaW50ZXJuYWxzLnNlbmRTY3JvbGxFbmRHZXN0dXJlRXZlbnQ7Cit9
CisKK2Z1bmN0aW9uIHJ1blRlc3QoKQoreworICAgIHZhciBtb3ZpbmdkaXYgPSBkb2N1bWVudC5n
ZXRFbGVtZW50QnlJZCgnbW92aW5nYm94Jyk7CisKKyAgICBpZiAod2luZG93LmV2ZW50U2VuZGVy
KSB7CisgICAgICAgIGRlc2NyaXB0aW9uKCdUaGlzIHRlc3RzIGdlc3R1cmUgZXZlbnQgc2Nyb2xs
aW5nIG9mIGFuIG92ZXJmbG93IGRpdi4nKTsKKworICAgICAgICBpZiAoY2hlY2tUZXN0RGVwZW5k
ZW5jaWVzKCkpCisgICAgICAgICAgICBmaXJzdFRvdWNoRHJhZ1NlcXVlbmNlKCk7CisgICAgICAg
IGVsc2UKKyAgICAgICAgICAgIGV4aXRJZk5lY2Vzc2FyeSgpOworICAgIH0gZWxzZSB7CisgICAg
ICAgIGRlYnVnKCJUaGlzIHRlc3QgcmVxdWlyZXMgRHVtcFJlbmRlclRyZWUgYW5kIHdpbmRvdy5p
bnRlcm5hbHMuICBUb3VjaCBzY3JvbGwgdGhlIHJlZCByZWN0IHRvIGxvZy4iKTsKKyAgICAgICAg
bW92aW5nZGl2LmFkZEV2ZW50TGlzdGVuZXIoJ3RvdWNoZW5kJywgZmluZ2VyVXAsIGZhbHNlKTsK
KyAgICB9Cit9Cis8L3NjcmlwdD4KKworCisKKzwvYm9keT4KKzwvaHRtbD4KZGlmZiAtLWdpdCBh
L0xheW91dFRlc3RzL2Zhc3QvZXZlbnRzL3RvdWNoL2dlc3R1cmUvdG91Y2gtZ2VzdHVyZS1zY3Jv
bGwtaWZyYW1lLWV4cGVjdGVkLnR4dCBiL0xheW91dFRlc3RzL2Zhc3QvZXZlbnRzL3RvdWNoL2dl
c3R1cmUvdG91Y2gtZ2VzdHVyZS1zY3JvbGwtaWZyYW1lLWV4cGVjdGVkLnR4dApuZXcgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
Li43YTM1OWFkNjRhOTQ2ZGU0MjIyOTY3MDc5ZjY1MWY3YTljOTc3YmY1Ci0tLSAvZGV2L251bGwK
KysrIGIvTGF5b3V0VGVzdHMvZmFzdC9ldmVudHMvdG91Y2gvZ2VzdHVyZS90b3VjaC1nZXN0dXJl
LXNjcm9sbC1pZnJhbWUtZXhwZWN0ZWQudHh0CkBAIC0wLDAgKzEsMTggQEAKKworVGhpcyB0ZXN0
cyBnZXN0dXJlIGV2ZW50IHNjcm9sbGluZyBpbiBpZnJhbWVzLiBSZWQtZ3JlZW4gc3RyaXAgaXMg
c2Nyb2xsZWQgb24gcGFzcy4KKworT24gc3VjY2VzcywgeW91IHdpbGwgc2VlIGEgc2VyaWVzIG9m
ICJQQVNTIiBtZXNzYWdlcywgZm9sbG93ZWQgYnkgIlRFU1QgQ09NUExFVEUiLgorCisKK2ZpcnN0
IGdlc3R1cmUKK1BBU1MgdG91Y2h0YXJnZXQuY29udGVudERvY3VtZW50LmJvZHkuc2Nyb2xsVG9w
IGlzIDE0MAorUEFTUyB0b3VjaHRhcmdldC5jb250ZW50RG9jdW1lbnQuYm9keS5zY3JvbGxMZWZ0
IGlzIDAKK1BBU1Mgd2luZG93LmludGVybmFscy5yZWNvcmRPZkdlc3R1cmVTY3JvbGxFdmVudHNE
b2N1bWVudCh0b3VjaHRhcmdldC5jb250ZW50RG9jdW1lbnQpIGlzIDcKK3NlY29uZCBnZXN0dXJl
CitQQVNTIHRvdWNodGFyZ2V0LmNvbnRlbnREb2N1bWVudC5ib2R5LnNjcm9sbFRvcCBpcyAyMDAK
K1BBU1MgdG91Y2h0YXJnZXQuY29udGVudERvY3VtZW50LmJvZHkuc2Nyb2xsTGVmdCBpcyAwCitQ
QVNTIHdpbmRvdy5pbnRlcm5hbHMucmVjb3JkT2ZHZXN0dXJlU2Nyb2xsRXZlbnRzRG9jdW1lbnQo
dG91Y2h0YXJnZXQuY29udGVudERvY3VtZW50KSBpcyA3CitQQVNTIHN1Y2Nlc3NmdWxseVBhcnNl
ZCBpcyB0cnVlCisKK1RFU1QgQ09NUExFVEUKKwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvZmFz
dC9ldmVudHMvdG91Y2gvZ2VzdHVyZS90b3VjaC1nZXN0dXJlLXNjcm9sbC1pZnJhbWUuaHRtbCBi
L0xheW91dFRlc3RzL2Zhc3QvZXZlbnRzL3RvdWNoL2dlc3R1cmUvdG91Y2gtZ2VzdHVyZS1zY3Jv
bGwtaWZyYW1lLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMzgxOGFhMzJkOTU4ZTZlODVjOWI2YzZhZWIyZmI1
NTczMGQyZTEzMQotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL2Zhc3QvZXZlbnRzL3Rv
dWNoL2dlc3R1cmUvdG91Y2gtZ2VzdHVyZS1zY3JvbGwtaWZyYW1lLmh0bWwKQEAgLTAsMCArMSwx
MTQgQEAKKzwhRE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8vSUVURi8vRFREIEhUTUwvL0VOIj4KKzxo
dG1sPgorPGhlYWQ+Cis8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9Ii4uLy4uLy4uL2pzL3Jl
c291cmNlcy9qcy10ZXN0LXN0eWxlLmNzcyI+Cis8c2NyaXB0IHNyYz0iLi4vLi4vLi4vanMvcmVz
b3VyY2VzL2pzLXRlc3QtcHJlLmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSIuLi8uLi8uLi9q
cy9yZXNvdXJjZXMvanMtdGVzdC1wb3N0LWZ1bmN0aW9uLmpzIj48L3NjcmlwdD4KKzxzdHlsZSB0
eXBlPSJ0ZXh0L2NzcyI+CisjdG91Y2h0YXJnZXQgeworICB3aWR0aDogMjAwcHg7CisgIGhlaWdo
dDogMjAwcHg7CisgIHBvc2l0aW9uOiByZWxhdGl2ZTsKKyAgYmFja2dyb3VuZDogd2hpdGU7Cit9
Cis8L3N0eWxlPgorPC9oZWFkPgorPGJvZHk+Cis8aWZyYW1lIGlkPSJ0b3VjaHRhcmdldCIgc3Jj
PSIuLi9yZXNvdXJjZXMvc2Nyb2xsLWluc2lkZS1pZnJhbWUuaHRtbCI+PC9pZnJhbWU+CisgICAg
PHAgaWQ9ImRlc2NyaXB0aW9uIj48L3A+Cis8ZGl2IGlkPSJjb25zb2xlIj48L2Rpdj4KKzxzY3Jp
cHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KKwordmFyIHRvdWNodGFyZ2V0OwordmFyIGV4cGVj
dGVkU2Nyb2xsc1RvdGFsID0gMjsKK3ZhciBzY3JvbGxzT2NjdXJyZWQgPSAwOwordmFyIHNjcm9s
bEFtb3VudFggPSBbJzAnLCAnMCddOwordmFyIHNjcm9sbEFtb3VudFkgPSBbJzE0MCcsICcyMDAn
XTsKK3ZhciBnZXN0dXJlRGlzcGF0Y2hSZWNvcmQgPSBbJzcnLCAnNyddOworCitmdW5jdGlvbiBj
aGVja1Njcm9sbE9mZnNldCgpCit7CisgICAgdG91Y2h0YXJnZXQgPSBkb2N1bWVudC5nZXRFbGVt
ZW50QnlJZCgndG91Y2h0YXJnZXQnKTsKKyAgICBpZiAod2luZG93LmV2ZW50U2VuZGVyKSB7Cisg
ICAgICAgIHNob3VsZEJlKCd0b3VjaHRhcmdldC5jb250ZW50RG9jdW1lbnQuYm9keS5zY3JvbGxU
b3AnLCBzY3JvbGxBbW91bnRZW3Njcm9sbHNPY2N1cnJlZF0pOworICAgICAgICBzaG91bGRCZSgn
dG91Y2h0YXJnZXQuY29udGVudERvY3VtZW50LmJvZHkuc2Nyb2xsTGVmdCcsIHNjcm9sbEFtb3Vu
dFhbc2Nyb2xsc09jY3VycmVkXSk7CisgICAgICAgIGlmICh3aW5kb3cuaW50ZXJuYWxzKSB7Cisg
ICAgICAgICAgICBzaG91bGRCZSgnd2luZG93LmludGVybmFscy5yZWNvcmRPZkdlc3R1cmVTY3Jv
bGxFdmVudHNEb2N1bWVudCh0b3VjaHRhcmdldC5jb250ZW50RG9jdW1lbnQpJywgZ2VzdHVyZURp
c3BhdGNoUmVjb3JkW3Njcm9sbHNPY2N1cnJlZF0pOworICAgICAgICB9CisgICAgICAgIHNjcm9s
bHNPY2N1cnJlZCsrOworICAgIH0KKworICAgIGlmIChzY3JvbGxzT2NjdXJyZWQgPT0gZXhwZWN0
ZWRTY3JvbGxzVG90YWwpIHsKKyAgICAgICAgLy8gSWYgd2UndmUgZ290IGhlcmUsIHdlJ3ZlIHBh
c3NlZC4KKyAgICAgICAgc3VjY2Vzc2Z1bGx5UGFyc2VkID0gdHJ1ZTsKKyAgICAgICAgaXNTdWNj
ZXNzZnVsbHlQYXJzZWQoKTsKKyAgICAgICAgaWYgKHdpbmRvdy5sYXlvdXRUZXN0Q29udHJvbGxl
cikKKyAgICAgICAgICAgIGxheW91dFRlc3RDb250cm9sbGVyLm5vdGlmeURvbmUoKTsKKyAgICB9
IGVsc2UgeworICAgICAgICBzZWNvbmRUb3VjaERyYWdTZXF1ZW5jZSgpOworICAgIH0KK30KKwor
ZnVuY3Rpb24gZmluZ2VyVXAoZXZlbnQpCit7CisgICAgaWYgKCF3aW5kb3cubGF5b3V0VGVzdENv
bnRyb2xsZXIpCisgICAgICAgIGRlYnVnKCdtb3ZlZDogJyArIGV2ZW50LmN1cnJlbnRUYXJnZXQu
c2Nyb2xsVG9wICsgJywgJyArIGV2ZW50LmN1cnJlbnRUYXJnZXQuc2Nyb2xsTGVmdCk7CisgICAg
cmV0dXJuIHRydWU7ICAvLyBXYW50IHRoZSBkZWZhdWx0IGJlaGF2aW91ci4KK30KKworZnVuY3Rp
b24gZmlyc3RUb3VjaERyYWdTZXF1ZW5jZSgpCit7CisgICAgZGVidWcoImZpcnN0IGdlc3R1cmUi
KTsKKyAgICB3aW5kb3cuaW50ZXJuYWxzLnNlbmRTY3JvbGxCZWdpbkdlc3R1cmVFdmVudChkb2N1
bWVudCwgMTIsIDEwKTsKKyAgICB3aW5kb3cuaW50ZXJuYWxzLnNlbmRTY3JvbGxVcGRhdGVHZXN0
dXJlRXZlbnQoZG9jdW1lbnQsIDEyLCAxMCwgMCwgLTE0MCk7CisgICAgd2luZG93LmludGVybmFs
cy5zZW5kU2Nyb2xsRW5kR2VzdHVyZUV2ZW50KGRvY3VtZW50LCAxMiwgMTAsIDAsIDApOworCisg
ICAgLy8gV2FpdCBmb3IgbGF5b3V0LgorICAgIGNoZWNrU2Nyb2xsT2Zmc2V0KCk7Cit9CisKK2Z1
bmN0aW9uIHNlY29uZFRvdWNoRHJhZ1NlcXVlbmNlKCkKK3sKKyAgICBkZWJ1Zygic2Vjb25kIGdl
c3R1cmUiKTsKKyAgICB3aW5kb3cuaW50ZXJuYWxzLnNlbmRTY3JvbGxCZWdpbkdlc3R1cmVFdmVu
dChkb2N1bWVudCwgMTIsIDQwKTsKKyAgICB3aW5kb3cuaW50ZXJuYWxzLnNlbmRTY3JvbGxVcGRh
dGVHZXN0dXJlRXZlbnQoZG9jdW1lbnQsIDEyLCA0MCwgMCwgLTYwKTsKKyAgICB3aW5kb3cuaW50
ZXJuYWxzLnNlbmRTY3JvbGxFbmRHZXN0dXJlRXZlbnQoZG9jdW1lbnQsIDEyLCA0MCwgMCwgMCk7
CisKKyAgICAvLyBXYWl0IGZvciBsYXlvdXQuCisgICAgY2hlY2tTY3JvbGxPZmZzZXQoKTsKK30K
KworZnVuY3Rpb24gZXhpdElmTmVjZXNzYXJ5KCkKK3sKKyAgICBkZWJ1Zygnd2luZG93LmludGVy
bnMgbm90IGltcGxlbWVudGVkIG9uIHRoaXMgcGxhdGZvcm0gb3IgZ2VzdHVyZSBldmVudCBzY3Jv
bGxpbmcgaXMgYnJva2VuJyk7CisgICAgc3VjY2Vzc2Z1bGx5UGFyc2VkID0gdHJ1ZTsKKyAgICBp
c1N1Y2Nlc3NmdWxseVBhcnNlZCgpOworICAgIGlmICh3aW5kb3cubGF5b3V0VGVzdENvbnRyb2xs
ZXIpCisgICAgICAgIGxheW91dFRlc3RDb250cm9sbGVyLm5vdGlmeURvbmUoKTsKK30KKworaWYg
KHdpbmRvdy5sYXlvdXRUZXN0Q29udHJvbGxlcikKKyAgICBsYXlvdXRUZXN0Q29udHJvbGxlci53
YWl0VW50aWxEb25lKCk7CisKK2Z1bmN0aW9uIGNoZWNrVGVzdERlcGVuZGVuY2llcygpCit7Cisg
ICAgcmV0dXJuIHdpbmRvdy5ldmVudFNlbmRlciAmJiB3aW5kb3cuaW50ZXJuYWxzICYmIHdpbmRv
dy5pbnRlcm5hbHMuc2VuZFNjcm9sbEJlZ2luR2VzdHVyZUV2ZW50ICYmIHdpbmRvdy5pbnRlcm5h
bHMuc2VuZFNjcm9sbFVwZGF0ZUdlc3R1cmVFdmVudCAmJiB3aW5kb3cuaW50ZXJuYWxzLnNlbmRT
Y3JvbGxFbmRHZXN0dXJlRXZlbnQ7Cit9CisKK2Z1bmN0aW9uIHJ1blRlc3QoKQoreworICAgIHRv
dWNodGFyZ2V0ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3RvdWNodGFyZ2V0Jyk7CisgICAg
aWYgKHdpbmRvdy5ldmVudFNlbmRlcikgeworICAgICAgICBkZXNjcmlwdGlvbignVGhpcyB0ZXN0
cyBnZXN0dXJlIGV2ZW50IHNjcm9sbGluZyBpbiBpZnJhbWVzLiAnICsKKyAgICAgICAgICAgICdS
ZWQtZ3JlZW4gc3RyaXAgaXMgc2Nyb2xsZWQgb24gcGFzcy4nKTsKKyAgICAgICAgaWYgKGNoZWNr
VGVzdERlcGVuZGVuY2llcygpKQorICAgICAgICAgICAgZmlyc3RUb3VjaERyYWdTZXF1ZW5jZSgp
OworICAgICAgICBlbHNlCisgICAgICAgICAgICBleGl0SWZOZWNlc3NhcnkoKTsKKyAgICB9IGVs
c2UgeworICAgICAgICBkZWJ1ZygiVGhpcyB0ZXN0IHJlcXVpcmVzIER1bXBSZW5kZXJUcmVlIGFu
ZCB3aW5kb3cuaW50ZXJuYWxzLiAgVG91Y2gtc2Nyb2xsIHRoZSByZWQvZ3JlZW4gc3RyaXAuIik7
CisgICAgfQorfQorPC9zY3JpcHQ+Cis8L2JvZHk+Cis8L2h0bWw+CmRpZmYgLS1naXQgYS9MYXlv
dXRUZXN0cy9mYXN0L2V2ZW50cy90b3VjaC9nZXN0dXJlL3RvdWNoLWdlc3R1cmUtc2Nyb2xsLXBh
Z2UtZXhwZWN0ZWQudHh0IGIvTGF5b3V0VGVzdHMvZmFzdC9ldmVudHMvdG91Y2gvZ2VzdHVyZS90
b3VjaC1nZXN0dXJlLXNjcm9sbC1wYWdlLWV4cGVjdGVkLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5iYTBhODIz
YTQyYzVhOTg0MzViNmYyYTVjMjNjZTMyMTAyMmFhODYwCi0tLSAvZGV2L251bGwKKysrIGIvTGF5
b3V0VGVzdHMvZmFzdC9ldmVudHMvdG91Y2gvZ2VzdHVyZS90b3VjaC1nZXN0dXJlLXNjcm9sbC1w
YWdlLWV4cGVjdGVkLnR4dApAQCAtMCwwICsxLDE3IEBACitUaGlzIHRlc3RzIHNjcm9sbCBnZXN0
dXJlIGV2ZW50IHNjcm9sbGluZyBvbiBhIHdob2xlIHBhZ2UuCisKK09uIHN1Y2Nlc3MsIHlvdSB3
aWxsIHNlZSBhIHNlcmllcyBvZiAiUEFTUyIgbWVzc2FnZXMsIGZvbGxvd2VkIGJ5ICJURVNUIENP
TVBMRVRFIi4KKworCitmaXJzdCBnZXN0dXJlCitQQVNTIGRvY3VtZW50LmJvZHkuc2Nyb2xsVG9w
IGlzIDcwCitQQVNTIGRvY3VtZW50LmJvZHkuc2Nyb2xsTGVmdCBpcyAwCitQQVNTIHdpbmRvdy5p
bnRlcm5hbHMucmVjb3JkT2ZHZXN0dXJlU2Nyb2xsRXZlbnRzRG9jdW1lbnQoZG9jdW1lbnQpIGlz
IDcKK3NlY29uZCBnZXN0dXJlCitQQVNTIGRvY3VtZW50LmJvZHkuc2Nyb2xsVG9wIGlzIDEzMAor
UEFTUyBkb2N1bWVudC5ib2R5LnNjcm9sbExlZnQgaXMgMAorUEFTUyB3aW5kb3cuaW50ZXJuYWxz
LnJlY29yZE9mR2VzdHVyZVNjcm9sbEV2ZW50c0RvY3VtZW50KGRvY3VtZW50KSBpcyA3CitQQVNT
IHN1Y2Nlc3NmdWxseVBhcnNlZCBpcyB0cnVlCisKK1RFU1QgQ09NUExFVEUKKwpkaWZmIC0tZ2l0
IGEvTGF5b3V0VGVzdHMvZmFzdC9ldmVudHMvdG91Y2gvZ2VzdHVyZS90b3VjaC1nZXN0dXJlLXNj
cm9sbC1wYWdlLmh0bWwgYi9MYXlvdXRUZXN0cy9mYXN0L2V2ZW50cy90b3VjaC9nZXN0dXJlL3Rv
dWNoLWdlc3R1cmUtc2Nyb2xsLXBhZ2UuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi45ODJhN2UzM2NmYzVmYWE3
YWJlYWQzNTBmYzQzODVhYzAyYmNlYjdkCi0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMv
ZmFzdC9ldmVudHMvdG91Y2gvZ2VzdHVyZS90b3VjaC1nZXN0dXJlLXNjcm9sbC1wYWdlLmh0bWwK
QEAgLTAsMCArMSwxNTIgQEAKKzwhRE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8vSUVURi8vRFREIEhU
TUwvL0VOIj4KKzxodG1sPgorPGhlYWQ+Cis8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9Ii4u
Ly4uLy4uL2pzL3Jlc291cmNlcy9qcy10ZXN0LXN0eWxlLmNzcyI+Cis8c2NyaXB0IHNyYz0iLi4v
Li4vLi4vanMvcmVzb3VyY2VzL2pzLXRlc3QtcHJlLmpzIj48L3NjcmlwdD4KKzxzdHlsZSB0eXBl
PSJ0ZXh0L2NzcyI+CisjZ3JlZW5ib3ggeworICB3aWR0aDogMTAwcHg7CisgIGhlaWdodDogMTAw
cHg7CisgIGJhY2tncm91bmQ6IGdyZWVuOworICBwYWRkaW5nOiAwcHg7CisgIG1hcmdpbjogMHB4
OworfQorI3JlZGJveCB7CisgIHdpZHRoOiAxMDBweDsKKyAgaGVpZ2h0OiAxMDBweDsKKyAgYmFj
a2dyb3VuZDogcmVkOworICBwYWRkaW5nOiAwcHg7CisgIG1hcmdpbjogMHB4OworfQorCit0ZCB7
CisgIHBhZGRpbmc6IDBweDsKK30KKzwvc3R5bGU+Cis8L2hlYWQ+Cis8Ym9keSBzdHlsZT0ibWFy
Z2luOjAiIG9ubG9hZD0icnVuVGVzdCgpOyI+CisKKzx0YWJsZSBpZD0idGFibGVfdG9fZmlsbCI+
CisgICAgPHRyPjx0ZD48ZGl2IGlkPSJncmVlbmJveCI+PC9kaXY+PC90ZD48L3RyPgorICAgIDx0
cj48dGQ+PGRpdiBpZD0icmVkYm94Ij48L2Rpdj48L3RkPjwvdHI+Cis8L3RhYmxlPgorCis8cCBp
ZD0iZGVzY3JpcHRpb24iPjwvcD4KKzxkaXYgaWQ9ImNvbnNvbGUiPjwvZGl2PgorPHNjcmlwdCB0
eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgorCit2YXIgZXhwZWN0ZWRTY3JvbGxzVG90YWwgPSAyOwor
dmFyIHNjcm9sbHNPY2N1cnJlZCA9IDA7Cit2YXIgc2Nyb2xsQW1vdW50WCA9IFsnMCcsICcwJ107
Cit2YXIgc2Nyb2xsQW1vdW50WSA9IFsnNzAnLCAnMTMwJ107Cit2YXIgZ2VzdHVyZURpc3BhdGNo
UmVjb3JkID0gWyc3JywgJzcnXTsKKworLy8gQWx3YXlzIGNvbnN0cnVjdCBhIHBhZ2UgbGFyZ2Vy
IHRoYW4gdGhlIHZlcnRpY2FsIGhlaWdodCBvZiB0aGUgd2luZG93LgorZnVuY3Rpb24gYnVpbGRQ
YWdlKCkKK3sKKyAgICB2YXIgdGFibGUgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndGFibGVf
dG9fZmlsbCcpOworICAgIHZhciB0YXJnZXRIZWlnaHQgPSBkb2N1bWVudC5ib2R5Lm9mZnNldEhl
aWdodDsKKyAgICB2YXIgY2VsbFBhaXJIZWlnaHQgPSB0YWJsZS5vZmZzZXRIZWlnaHQ7CisgICAg
dmFyIG51bWJlck9mUmVwcyA9IHRhcmdldEhlaWdodCAvIGNlbGxQYWlySGVpZ2h0ICogMjsKKyAg
ICB2YXIgaTsKKyAgICBmb3IgKGkgPSAwOyBpIDwgbnVtYmVyT2ZSZXBzOyBpKyspIHsKKyAgICAg
ICAgdmFyIHAgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOworICAgICAgICBwLmlubmVy
SFRNTCA9ICc8dGQ+PGRpdiBpZD0iZ3JlZW5ib3giPjwvZGl2PjwvdGQ+JzsKKyAgICAgICAgdGFi
bGUuYXBwZW5kQ2hpbGQocCk7CisgICAgICAgIHZhciBwID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVu
dCgndHInKTsKKyAgICAgICAgcC5pbm5lckhUTUwgPSAnPHRkPjxkaXYgaWQ9InJlZGJveCI+PC9k
aXY+PC90ZD4nOworICAgICAgICB0YWJsZS5hcHBlbmRDaGlsZChwKTsKKyAgICB9Cit9CisKK2Z1
bmN0aW9uIGNoZWNrU2Nyb2xsT2Zmc2V0KCkKK3sKKyAgICBpZiAod2luZG93LmV2ZW50U2VuZGVy
KSB7CisgICAgICAgIHNob3VsZEJlKCdkb2N1bWVudC5ib2R5LnNjcm9sbFRvcCcsIHNjcm9sbEFt
b3VudFlbc2Nyb2xsc09jY3VycmVkXSk7CisgICAgICAgIHNob3VsZEJlKCdkb2N1bWVudC5ib2R5
LnNjcm9sbExlZnQnLCBzY3JvbGxBbW91bnRYW3Njcm9sbHNPY2N1cnJlZF0pOworICAgICAgICBp
ZiAod2luZG93LmludGVybmFscykgeworICAgICAgICAgICAgc2hvdWxkQmUoJ3dpbmRvdy5pbnRl
cm5hbHMucmVjb3JkT2ZHZXN0dXJlU2Nyb2xsRXZlbnRzRG9jdW1lbnQoZG9jdW1lbnQpJywgZ2Vz
dHVyZURpc3BhdGNoUmVjb3JkW3Njcm9sbHNPY2N1cnJlZF0pOworICAgICAgICB9CisgICAgICAg
IHNjcm9sbHNPY2N1cnJlZCsrOworICAgIH0KKworICAgIGlmIChzY3JvbGxzT2NjdXJyZWQgPT0g
ZXhwZWN0ZWRTY3JvbGxzVG90YWwpIHsKKyAgICAgICAgLy8gSWYgd2UndmUgZ290IGhlcmUsIHdl
J3ZlIHBhc3NlZC4KKyAgICAgICAgc3VjY2Vzc2Z1bGx5UGFyc2VkID0gdHJ1ZTsKKyAgICAgICAg
aXNTdWNjZXNzZnVsbHlQYXJzZWQoKTsKKyAgICAgICAgaWYgKHdpbmRvdy5sYXlvdXRUZXN0Q29u
dHJvbGxlcikKKyAgICAgICAgICAgIGxheW91dFRlc3RDb250cm9sbGVyLm5vdGlmeURvbmUoKTsK
KyAgICB9IGVsc2UgeworICAgICAgICBzZWNvbmRUb3VjaERyYWdTZXF1ZW5jZSgpOworICAgIH0K
K30KKworZnVuY3Rpb24gZmluZ2VyVXAoZXZlbnQpCit7CisgICAgaWYgKCF3aW5kb3cubGF5b3V0
VGVzdENvbnRyb2xsZXIpCisgICAgICAgIGRlYnVnKCdtb3ZlZDogJyArIGV2ZW50LmN1cnJlbnRU
YXJnZXQuc2Nyb2xsVG9wICsgJywgJyArIGV2ZW50LmN1cnJlbnRUYXJnZXQuc2Nyb2xsTGVmdCk7
CisgICAgcmV0dXJuIHRydWU7ICAvLyBXYW50IHRoZSBkZWZhdWx0IGJlaGF2aW91ci4KK30KKwor
ZnVuY3Rpb24gZmlyc3RUb3VjaERyYWdTZXF1ZW5jZSgpCit7CisgICAgZGVidWcoImZpcnN0IGdl
c3R1cmUiKTsKKyAgICB3aW5kb3cuaW50ZXJuYWxzLnNlbmRTY3JvbGxCZWdpbkdlc3R1cmVFdmVu
dChkb2N1bWVudCwgMTAsIDcyKTsKKyAgICB3aW5kb3cuaW50ZXJuYWxzLnNlbmRTY3JvbGxVcGRh
dGVHZXN0dXJlRXZlbnQoZG9jdW1lbnQsIDEwLCA3MiwgMCwgLTMwKTsKKyAgICB3aW5kb3cuaW50
ZXJuYWxzLnNlbmRTY3JvbGxVcGRhdGVHZXN0dXJlRXZlbnQoZG9jdW1lbnQsIDEwLCAzMiwgMCwg
LTQwKTsKKyAgICB3aW5kb3cuaW50ZXJuYWxzLnNlbmRTY3JvbGxFbmRHZXN0dXJlRXZlbnQoZG9j
dW1lbnQsIDEwLCAzMiwgMCwgMCk7CisKKyAgICAvLyBXYWl0IGZvciBsYXlvdXQuCisgICAgY2hl
Y2tTY3JvbGxPZmZzZXQoKTsKK30KKworZnVuY3Rpb24gc2Vjb25kVG91Y2hEcmFnU2VxdWVuY2Uo
KQoreworICAgIGRlYnVnKCJzZWNvbmQgZ2VzdHVyZSIpOworICAgIHdpbmRvdy5pbnRlcm5hbHMu
c2VuZFNjcm9sbEJlZ2luR2VzdHVyZUV2ZW50KGRvY3VtZW50LCAxMiwgNDApOworICAgIHdpbmRv
dy5pbnRlcm5hbHMuc2VuZFNjcm9sbFVwZGF0ZUdlc3R1cmVFdmVudChkb2N1bWVudCwgMTIsIDQw
LCAwLCAtMzApOworICAgIHdpbmRvdy5pbnRlcm5hbHMuc2VuZFNjcm9sbFVwZGF0ZUdlc3R1cmVF
dmVudChkb2N1bWVudCwgMTIsIDEwLCAwLCAtMzApOworICAgIHdpbmRvdy5pbnRlcm5hbHMuc2Vu
ZFNjcm9sbEVuZEdlc3R1cmVFdmVudChkb2N1bWVudCwgMTIsIDEwLCAwLCAwKTsKKworICAgIC8v
IFdhaXQgZm9yIGxheW91dC4KKyAgICBjaGVja1Njcm9sbE9mZnNldCgpOworfQorCitmdW5jdGlv
biBleGl0SWZOZWNlc3NhcnkoKQoreworICAgIGRlYnVnKCd3aW5kb3cuaW50ZXJuYWxzICBub3Qg
aW1wbGVtZW50ZWQgb24gdGhpcyBwbGF0Zm9ybSBvciBnZXN0dXJlIGV2ZW50IHNjcm9sbGluZyBv
ZiBhIGRvY3VtZW50IGlzIGJyb2tlbicpOworICAgIHN1Y2Nlc3NmdWxseVBhcnNlZCA9IHRydWU7
CisgICAgaXNTdWNjZXNzZnVsbHlQYXJzZWQoKTsKKyAgICBpZiAod2luZG93LmxheW91dFRlc3RD
b250cm9sbGVyKQorICAgICAgICBsYXlvdXRUZXN0Q29udHJvbGxlci5ub3RpZnlEb25lKCk7Cit9
CisKK2lmICh3aW5kb3cubGF5b3V0VGVzdENvbnRyb2xsZXIpCisgICAgbGF5b3V0VGVzdENvbnRy
b2xsZXIud2FpdFVudGlsRG9uZSgpOworCitmdW5jdGlvbiBjaGVja1Rlc3REZXBlbmRlbmNpZXMo
KQoreworICAgIHJldHVybiB3aW5kb3cuZXZlbnRTZW5kZXIgJiYgd2luZG93LmludGVybmFscyAm
JiB3aW5kb3cuaW50ZXJuYWxzLnNlbmRTY3JvbGxCZWdpbkdlc3R1cmVFdmVudCAmJiB3aW5kb3cu
aW50ZXJuYWxzLnNlbmRTY3JvbGxVcGRhdGVHZXN0dXJlRXZlbnQgJiYgd2luZG93LmludGVybmFs
cy5zZW5kU2Nyb2xsRW5kR2VzdHVyZUV2ZW50OworfQorCitmdW5jdGlvbiBydW5UZXN0KCkKK3sK
KyAgICBidWlsZFBhZ2UoKTsKKworICAgIGlmICh3aW5kb3cuZXZlbnRTZW5kZXIgJiYgd2luZG93
LmludGVybmFscykgeworICAgICAgICBkZXNjcmlwdGlvbignVGhpcyB0ZXN0cyBzY3JvbGwgZ2Vz
dHVyZSBldmVudCBzY3JvbGxpbmcgb24gYSB3aG9sZSBwYWdlLicpOworICAgICAgICBpZiAoY2hl
Y2tUZXN0RGVwZW5kZW5jaWVzKCkpCisgICAgICAgICAgICBmaXJzdFRvdWNoRHJhZ1NlcXVlbmNl
KCk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGV4aXRJZk5lY2Vzc2FyeSgpOworICAgIH0g
ZWxzZSB7CisgICAgICAgIGRlYnVnKCJUaGlzIHRlc3QgcmVxdWlyZXMgRHVtcFJlbmRlclRyZWUg
YW5kIHdpbmRvdy5pbnRlcm5hbHMuICBUb3VjaC1zY3JvbGwgdGhlIHBhZ2UgdG8gdmFsaWRhdGUg
dGhlIGltcGxlbWVudGF0aW9uLiIpOworICAgICAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVy
KCd0b3VjaGVuZCcsIGZpbmdlclVwLCBmYWxzZSk7CisgICAgfQorfQorPC9zY3JpcHQ+CisKKwor
Cis8L2JvZHk+Cis8L2h0bWw+CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9mYXN0L2V2ZW50cy90
b3VjaC9nZXN0dXJlL3RvdWNoLWdlc3R1cmUtc2Nyb2xsLXNoeS10YXJnZXQtZXhwZWN0ZWQudHh0
IGIvTGF5b3V0VGVzdHMvZmFzdC9ldmVudHMvdG91Y2gvZ2VzdHVyZS90b3VjaC1nZXN0dXJlLXNj
cm9sbC1zaHktdGFyZ2V0LWV4cGVjdGVkLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi44OWU4MjJmNDViYWQyMzRi
ZTEwYzA3ZDlhMjY4Mjk3ZjA2MzkzN2YwCi0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMv
ZmFzdC9ldmVudHMvdG91Y2gvZ2VzdHVyZS90b3VjaC1nZXN0dXJlLXNjcm9sbC1zaHktdGFyZ2V0
LWV4cGVjdGVkLnR4dApAQCAtMCwwICsxLDE1IEBACitUaGlzIHRlc3RzIGdlc3R1cmUgc2Nyb2xs
aW5nIHRvIGEgZGl2IGRlbGV0ZWQgd2hpbGUgbGF0Y2hlZCwgU3F1YXJlIGlzIChtb3N0bHkpIGdy
ZWVuIG9uIHBhc3MKKworT24gc3VjY2VzcywgeW91IHdpbGwgc2VlIGEgc2VyaWVzIG9mICJQQVNT
IiBtZXNzYWdlcywgZm9sbG93ZWQgYnkgIlRFU1QgQ09NUExFVEUiLgorCisKK2ZpcnN0IGdlc3R1
cmUKK1BBU1MgbW92aW5nZGl2LnNjcm9sbFRvcCBpcyA2MgorUEFTUyBtb3ZpbmdkaXYuc2Nyb2xs
TGVmdCBpcyA2MworUEFTUyB3aW5kb3cuaW50ZXJuYWxzLnJlY29yZE9mR2VzdHVyZVNjcm9sbEV2
ZW50cyhtb3ZpbmdkaXYpIGlzIDEzCitzZWNvbmQgZ2VzdHVyZQorcmVjZWl2ZWQgZWxlbWVudCBy
ZW1vdmluZyBrZXlwcmVzcworUEFTUyBzdWNjZXNzZnVsbHlQYXJzZWQgaXMgdHJ1ZQorCitURVNU
IENPTVBMRVRFCisKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2Zhc3QvZXZlbnRzL3RvdWNoL2dl
c3R1cmUvdG91Y2gtZ2VzdHVyZS1zY3JvbGwtc2h5LXRhcmdldC5odG1sIGIvTGF5b3V0VGVzdHMv
ZmFzdC9ldmVudHMvdG91Y2gvZ2VzdHVyZS90b3VjaC1nZXN0dXJlLXNjcm9sbC1zaHktdGFyZ2V0
Lmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMC4uNjU5YjMxNjk4NTZlODZiMjRjNGRkM2M3ZTIyMzE4NTc4ZmFjZDdi
ZAotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL2Zhc3QvZXZlbnRzL3RvdWNoL2dlc3R1
cmUvdG91Y2gtZ2VzdHVyZS1zY3JvbGwtc2h5LXRhcmdldC5odG1sCkBAIC0wLDAgKzEsMTkwIEBA
Cis8IURPQ1RZUEUgSFRNTCBQVUJMSUMgIi0vL0lFVEYvL0RURCBIVE1MLy9FTiI+Cis8aHRtbD4K
KzxoZWFkPgorPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSIuLi8uLi8uLi9qcy9yZXNvdXJj
ZXMvanMtdGVzdC1zdHlsZS5jc3MiPgorPHNjcmlwdCBzcmM9Ii4uLy4uLy4uL2pzL3Jlc291cmNl
cy9qcy10ZXN0LXByZS5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0iLi4vLi4vLi4vanMvcmVz
b3VyY2VzL2pzLXRlc3QtcG9zdC1mdW5jdGlvbi5qcyI+PC9zY3JpcHQ+Cis8c3R5bGUgdHlwZT0i
dGV4dC9jc3MiPgorI3RvdWNodGFyZ2V0IHsKKyAgd2lkdGg6IDEwMHB4OworICBoZWlnaHQ6IDEw
MHB4OworICBwb3NpdGlvbjogYWJzb2x1dGU7CisgIGJhY2tncm91bmQ6IHdoaXRlOworICB0b3A6
IDEwMHB4OworICBsZWZ0OiAxMDBweDsKK30KKworI21vdmluZ2JveCB7CisgIHdpZHRoOiAxMDAl
OworICBoZWlnaHQ6IDEwMCU7CisgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKKyAgd29yZC13cmFwOiBi
cmVhay13b3JkOworICBvdmVyZmxvdy15OiBzY3JvbGw7CisgIG92ZXJmbG93LXg6IHNjcm9sbDsK
KyAgZGlzcGxheTogYmxvY2s7Cit9CisKKy5ncmVlbmJveCB7CisgIHdpZHRoOiAxMDBweDsKKyAg
aGVpZ2h0OiAxMDBweDsKKyAgYmFja2dyb3VuZDogZ3JlZW47CisgIHBhZGRpbmc6IDBweDsKKyAg
bWFyZ2luOiAwcHg7Cit9CisKKy5yZWRib3ggeworICB3aWR0aDogMTAwcHg7CisgIGhlaWdodDog
MTAwcHg7CisgIGJhY2tncm91bmQ6IHJlZDsKKyAgcGFkZGluZzogMHB4OworICBtYXJnaW46IDBw
eDsKK30KKwordGQgeworICBwYWRkaW5nOiAwcHg7Cit9Cis8L3N0eWxlPgorPC9oZWFkPgorPGJv
ZHkgc3R5bGU9Im1hcmdpbjowIiBvbmxvYWQ9InJ1blRlc3QoKTsiPgorPGRpdiBpZD0idG91Y2h0
YXJnZXQiPgorICA8ZGl2IGlkPSJtb3Zpbmdib3giPgorICAgIDx0YWJsZSBib3JkZXI9IjAiIGNl
bGxzcGFjaW5nPSIwcHgiIGlkPSJ0YWJsZSI+CisgICAgICA8dHI+CisgICAgICAgIDx0ZD48ZGl2
IGNsYXNzPSJyZWRib3giIGlkPSJyZWRib3giPjwvZGl2PjwvdGQ+CisgICAgICAgIDx0ZD48ZGl2
IGNsYXNzPSJncmVlbmJveCIgaWQ9ImdyZWVuYm94XzEiPjwvZGl2PjwvdGQ+CisgICAgICA8L3Ry
PgorICAgICAgPHRyPgorICAgICAgICA8dGQ+PGRpdiBjbGFzcz0iZ3JlZW5ib3giIGlkPSJncmVl
bmJveF8yIj48L2Rpdj48L3RkPgorICAgICAgICA8dGQ+PGRpdiBjbGFzcz0iZ3JlZW5ib3giIGlk
PSJncmVlbmJveF8zIj48L2Rpdj48L3RkPgorICAgICAgPC90cj4KKyAgICA8L3RhYmxlPgorICA8
L2Rpdj4KKzwvZGl2PgorCis8cCBpZD0iZGVzY3JpcHRpb24iPjwvcD4KKzxkaXYgaWQ9ImNvbnNv
bGUiPjwvZGl2PgorPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgorCit2YXIgbW92aW5n
ZGl2OwordmFyIGV4cGVjdGVkU2Nyb2xsc1RvdGFsID0gMjsKK3ZhciBzY3JvbGxzT2NjdXJyZWQg
PSAwOwordmFyIHNjcm9sbEFtb3VudFggPSBbJzYzJywgJzkwJ107Cit2YXIgc2Nyb2xsQW1vdW50
WSA9IFsnNjInLCAnOTUnXTsKK3ZhciBnZXN0dXJlRGlzcGF0Y2hSZWNvcmQgPSBbJzEzJywgJzEz
J107CisKK2RvY3VtZW50Lm9ua2V5cHJlc3MgPSBmdW5jdGlvbigpCit7CisgICAgZGVidWcoJ3Jl
Y2VpdmVkIGVsZW1lbnQgcmVtb3Zpbmcga2V5cHJlc3MnKTsKKyAgICB2YXIgcGFyZW50ID0gZG9j
dW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3RvdWNodGFyZ2V0Jyk7CisgICAgbW92aW5nZGl2ID0gZG9j
dW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ21vdmluZ2JveCcpOworICAgIHBhcmVudC5yZW1vdmVDaGls
ZChtb3ZpbmdkaXYpOworICAgIHJldHVybiBmYWxzZTsKK30KKworZnVuY3Rpb24gbG9nRmlyc3RU
b3VjaFBvaW50KGV2ZW50KQoreworICAgIGRlYnVnKCdjbGllbnQgaWQnICsgZXZlbnQudGFyZ2V0
LmlkKTsKKyAgICBkZWJ1ZygnY2xpZW50WDogJyArIGV2ZW50LnRvdWNoZXNbMF0uY2xpZW50WCAr
ICcgY2xpZW50WTogJyArIGV2ZW50LnRvdWNoZXNbMF0uY2xpZW50WSk7Cit9CisKK2Z1bmN0aW9u
IGNoZWNrU2Nyb2xsT2Zmc2V0KCkKK3sKKyAgICBtb3ZpbmdkaXYgPSBkb2N1bWVudC5nZXRFbGVt
ZW50QnlJZCgnbW92aW5nYm94Jyk7CisgICAgaWYgKHdpbmRvdy5ldmVudFNlbmRlcikgeworICAg
ICAgICBzaG91bGRCZSgnbW92aW5nZGl2LnNjcm9sbFRvcCcsIHNjcm9sbEFtb3VudFlbc2Nyb2xs
c09jY3VycmVkXSk7CisgICAgICAgIHNob3VsZEJlKCdtb3ZpbmdkaXYuc2Nyb2xsTGVmdCcsIHNj
cm9sbEFtb3VudFhbc2Nyb2xsc09jY3VycmVkXSk7CisgICAgICAgIGlmICh3aW5kb3cuaW50ZXJu
YWxzKSB7CisgICAgICAgICAgICBzaG91bGRCZSgnd2luZG93LmludGVybmFscy5yZWNvcmRPZkdl
c3R1cmVTY3JvbGxFdmVudHMobW92aW5nZGl2KScsIGdlc3R1cmVEaXNwYXRjaFJlY29yZFtzY3Jv
bGxzT2NjdXJyZWRdKTsKKyAgICAgICAgfQorICAgICAgICBzY3JvbGxzT2NjdXJyZWQrKzsKKyAg
ICB9CisKKyAgICBpZiAoc2Nyb2xsc09jY3VycmVkID09IGV4cGVjdGVkU2Nyb2xsc1RvdGFsKSB7
CisgICAgICAgIC8vIElmIHdlJ3ZlIGdvdCBoZXJlLCB3ZSd2ZSBwYXNzZWQuCisgICAgfSBlbHNl
IHsKKyAgICAgICAgc2Vjb25kVG91Y2hEcmFnU2VxdWVuY2UoKTsKKyAgICB9Cit9CisKK2Z1bmN0
aW9uIGZpbmdlclVwKGV2ZW50KQoreworICAgIGlmICghd2luZG93LmxheW91dFRlc3RDb250cm9s
bGVyKSB7CisgICAgICAgIGRlYnVnKCdtb3ZlZDogJyArIGV2ZW50LmN1cnJlbnRUYXJnZXQuc2Ny
b2xsVG9wICsgJywgJyArIGV2ZW50LmN1cnJlbnRUYXJnZXQuc2Nyb2xsTGVmdCk7CisgICAgICAg
IGRlYnVnKCd0YXJnZXQ6ICcgKyBldmVudC5jdXJyZW50VGFyZ2V0LmlkKTsKKyAgICB9CisgICAg
cmV0dXJuIHRydWU7ICAvLyBXYW50IHRoZSBkZWZhdWx0IGJlaGF2aW91ci4KK30KKworZnVuY3Rp
b24gZmlyc3RUb3VjaERyYWdTZXF1ZW5jZSgpCit7CisgICAgZGVidWcoImZpcnN0IGdlc3R1cmUi
KTsKKyAgICB3aW5kb3cuaW50ZXJuYWxzLnNlbmRTY3JvbGxCZWdpbkdlc3R1cmVFdmVudChkb2N1
bWVudCwgMTAxLCAxMDEpOworICAgIHdpbmRvdy5pbnRlcm5hbHMuc2VuZFNjcm9sbFVwZGF0ZUdl
c3R1cmVFdmVudChkb2N1bWVudCwgMTAxLCAxMDEsIC0yMCwgLTI4KTsKKyAgICB3aW5kb3cuaW50
ZXJuYWxzLnNlbmRTY3JvbGxVcGRhdGVHZXN0dXJlRXZlbnQoZG9jdW1lbnQsIDg3LCA5NywgLTE0
LCAtNCk7CisgICAgd2luZG93LmludGVybmFscy5zZW5kU2Nyb2xsVXBkYXRlR2VzdHVyZUV2ZW50
KGRvY3VtZW50LCA1OCwgNjcsIC0yOSwgLTMwKTsKKyAgICB3aW5kb3cuaW50ZXJuYWxzLnNlbmRT
Y3JvbGxFbmRHZXN0dXJlRXZlbnQoZG9jdW1lbnQsIDU4LCA2NywgMCwgMCk7CisKKyAgICAvLyBX
YWl0IGZvciBsYXlvdXQuCisgICAgY2hlY2tTY3JvbGxPZmZzZXQoKTsKK30KKworZnVuY3Rpb24g
c2Vjb25kVG91Y2hEcmFnU2VxdWVuY2UoKQoreworICAgIG1vdmluZ2Rpdi5zY3JvbGxUb3AgPSAw
OworICAgIG1vdmluZ2Rpdi5zY3JvbGxMZWZ0ID0gMDsKKworICAgIGRlYnVnKCJzZWNvbmQgZ2Vz
dHVyZSIpOworICAgIHdpbmRvdy5pbnRlcm5hbHMuc2VuZFNjcm9sbEJlZ2luR2VzdHVyZUV2ZW50
KGRvY3VtZW50LCAxMDEsIDEwMSk7CisgICAgd2luZG93LmludGVybmFscy5zZW5kU2Nyb2xsVXBk
YXRlR2VzdHVyZUV2ZW50KGRvY3VtZW50LCAxMDEsIDEwMSwgLTIwLCAtMjgpOworICAgIHdpbmRv
dy5pbnRlcm5hbHMuc2VuZFNjcm9sbFVwZGF0ZUdlc3R1cmVFdmVudChkb2N1bWVudCwgODcsIDk3
LCAtMTQsIC00KTsKKworICAgIC8vIFNlbmQgYSBrZXkgdG8gZGVsZXRlIHRoZSB0YXJnZXQgRWxl
bWVudC4KKyAgICBldmVudFNlbmRlci5rZXlEb3duKCJkIiwgW10pOworICAgIAorICAgIHdpbmRv
dy5pbnRlcm5hbHMuc2VuZFNjcm9sbFVwZGF0ZUdlc3R1cmVFdmVudChkb2N1bWVudCwgNTgsIDY3
LCAtMjksIC0zMCk7CisgICAgd2luZG93LmludGVybmFscy5zZW5kU2Nyb2xsRW5kR2VzdHVyZUV2
ZW50KGRvY3VtZW50LCA1OCwgNjcsIDAsIDApOworCisgICAgLy8gQnkgZ2V0dGluZyBoZXJlIHN1
Y2Nlc3NmdWxseSwgdGhlIHRlc3QgZGVtb25zdHJhdGVzIHRoYXQgdGhlIGltcGxlbWVudGF0aW9u
CisgICAgLy8gZG9lcyBub3QgY3Jhc2ggd2hlbiB0aGUgbGF0Y2hlZCBFbGVtZW50IGlzIHJlbW92
ZWQgZnJvbSB0aGUgRE9NLgorICAgIHN1Y2Nlc3NmdWxseVBhcnNlZCA9IHRydWU7CisgICAgaXNT
dWNjZXNzZnVsbHlQYXJzZWQoKTsKKyAgICBpZiAod2luZG93LmxheW91dFRlc3RDb250cm9sbGVy
KQorICAgICAgICBsYXlvdXRUZXN0Q29udHJvbGxlci5ub3RpZnlEb25lKCk7Cit9CisKK2Z1bmN0
aW9uIGV4aXRJZk5lY2Vzc2FyeSgpCit7CisgICAgZGVidWcoJ3dpbmRvdy5pbnRlcm5hbHMgbm90
IGltcGxlbWVudGVkIG9uIHRoaXMgcGxhdGZvcm0gb3IgZ2VzdHVyZSBzY3JvbGwgaGFuZGxpbmcg
YnJva2VuJyk7CisgICAgc3VjY2Vzc2Z1bGx5UGFyc2VkID0gdHJ1ZTsKKyAgICBpc1N1Y2Nlc3Nm
dWxseVBhcnNlZCgpOworICAgIGlmICh3aW5kb3cubGF5b3V0VGVzdENvbnRyb2xsZXIpCisgICAg
ICAgIGxheW91dFRlc3RDb250cm9sbGVyLm5vdGlmeURvbmUoKTsKK30KKworaWYgKHdpbmRvdy5s
YXlvdXRUZXN0Q29udHJvbGxlcikKKyAgICBsYXlvdXRUZXN0Q29udHJvbGxlci53YWl0VW50aWxE
b25lKCk7CisKK2Z1bmN0aW9uIGNoZWNrVGVzdERlcGVuZGVuY2llcygpCit7CisgICAgcmV0dXJu
IHdpbmRvdy5ldmVudFNlbmRlciAmJiB3aW5kb3cuaW50ZXJuYWxzICYmIHdpbmRvdy5pbnRlcm5h
bHMuc2VuZFNjcm9sbEJlZ2luR2VzdHVyZUV2ZW50ICYmIHdpbmRvdy5pbnRlcm5hbHMuc2VuZFNj
cm9sbFVwZGF0ZUdlc3R1cmVFdmVudCAmJiB3aW5kb3cuaW50ZXJuYWxzLnNlbmRTY3JvbGxFbmRH
ZXN0dXJlRXZlbnQ7Cit9CisKK2Z1bmN0aW9uIHJ1blRlc3QoKQoreworICAgIGlmICh3aW5kb3cu
ZXZlbnRTZW5kZXIpIHsKKyAgICAgICAgZGVzY3JpcHRpb24oJ1RoaXMgdGVzdHMgZ2VzdHVyZSBz
Y3JvbGxpbmcgdG8gYSBkaXYgZGVsZXRlZCB3aGlsZSBsYXRjaGVkLCAnICsgCisgICAgICAgICAg
ICAnU3F1YXJlIGlzIChtb3N0bHkpIGdyZWVuIG9uIHBhc3MnKTsKKyAgICAgICAgaWYgKGNoZWNr
VGVzdERlcGVuZGVuY2llcygpKQorICAgICAgICAgICAgZmlyc3RUb3VjaERyYWdTZXF1ZW5jZSgp
OworICAgICAgICBlbHNlCisgICAgICAgICAgICBleGl0SWZOZWNlc3NhcnkoKTsKKyAgICB9IGVs
c2UgeworICAgICAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCd0b3VjaHN0YXJ0JywgbG9n
Rmlyc3RUb3VjaFBvaW50KTsKKyAgICAgICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigndG91
Y2htb3ZlJywgbG9nRmlyc3RUb3VjaFBvaW50KTsKKyAgICAgICAgZGVidWcoIlRoaXMgdGVzdCBy
ZXF1aXJlcyBEdW1wUmVuZGVyVHJlZSBhbmQgd2luZG93LmludGVybmFscy4gIFRvdWNoLXNjcm9s
bCB0aGUgcmVkIHJlY3QgdG8gbG9nLiIpOworICAgICAgICBtb3ZpbmdkaXYuYWRkRXZlbnRMaXN0
ZW5lcigndG91Y2hlbmQnLCBmaW5nZXJVcCwgZmFsc2UpOworICAgIH0KK30KKzwvc2NyaXB0Pgor
PC9ib2R5PgorPC9odG1sPgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvZmFzdC9ldmVudHMvdG91
Y2gvcmVzb3VyY2VzL3Njcm9sbC1pbnNpZGUtaWZyYW1lLmh0bWwgYi9MYXlvdXRUZXN0cy9mYXN0
L2V2ZW50cy90b3VjaC9yZXNvdXJjZXMvc2Nyb2xsLWluc2lkZS1pZnJhbWUuaHRtbApuZXcgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwLi45NGY3ODg3N2M1MmJhNTc2YjRjNTExODAwZjQxNGI4NGQwNDM3ZDljCi0tLSAvZGV2L251
bGwKKysrIGIvTGF5b3V0VGVzdHMvZmFzdC9ldmVudHMvdG91Y2gvcmVzb3VyY2VzL3Njcm9sbC1p
bnNpZGUtaWZyYW1lLmh0bWwKQEAgLTAsMCArMSwzNCBAQAorPGh0bWw+Cis8aGVhZD4KKzxzdHls
ZSB0eXBlPSJ0ZXh0L2NzcyI+CisjZ3JlZW5ib3ggeworICB3aWR0aDogMTAwcHg7CisgIGhlaWdo
dDogMTAwcHg7CisgIGJhY2tncm91bmQ6IGdyZWVuOworICBwYWRkaW5nOiAwcHg7CisgIG1hcmdp
bjogMHB4O2EKK30KKyNyZWRib3ggeworICB3aWR0aDogMTAwcHg7CisgIGhlaWdodDogMTAwcHg7
CisgIGJhY2tncm91bmQ6IHJlZDsKKyAgcGFkZGluZzogMHB4OworICBtYXJnaW46IDBweDsKK30K
KwordGQgeworICBwYWRkaW5nOiAwcHg7Cit9Cis8L3N0eWxlPgorPC9oZWFkPgorPGJvZHkgc3R5
bGU9Im1hcmdpbjowIiBvbmxvYWQ9InBhcmVudC5ydW5UZXN0KCkiPgorCis8dGFibGUgaWQ9InRh
YmxlX3RvX2ZpbGwiPgorICAgIDx0cj48dGQ+PGRpdiBpZD0iZ3JlZW5ib3giPjwvZGl2PjwvdGQ+
PC90cj4KKyAgICA8dHI+PHRkPjxkaXYgaWQ9InJlZGJveCI+PC9kaXY+PC90ZD48L3RyPgorICAg
IDx0cj48dGQ+PGRpdiBpZD0iZ3JlZW5ib3giPjwvZGl2PjwvdGQ+PC90cj4KKyAgICA8dHI+PHRk
PjxkaXYgaWQ9InJlZGJveCI+PC9kaXY+PC90ZD48L3RyPgorPC90YWJsZT4KKzxib2R5PgorPC9o
dG1sPgorCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>121315</attachid>
            <date>2012-01-05 12:55:11 -0800</date>
            <delta_ts>2012-01-05 14:10:34 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-67822-20120105155509.patch</filename>
            <type>text/plain</type>
            <size>63808</size>
            <attacher name="Robert Kroeger">rjkroege</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTA0MTgyCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNTM5NGFhYjkzYzFmOTY1
MzhmMDJmYmYwODI2MTAzZWRkMWExODRjNC4uYzE0YWI0NDFhZTY1NzhiZWNiNDc4NDhkY2VhYjRm
NTdiMTNlZmYxMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDY4IEBACisyMDEyLTAxLTA1ICBSb2Jl
cnQgS3JvZWdlciAgPHJqa3JvZWdlQGNocm9taXVtLm9yZz4KKworICAgICAgICBQbGF0Zm9ybUdl
c3R1cmVFdmVudDo6aGFuZGxlR2VzdHVyZUV2ZW50IHNob3VsZCBoaXQgdGVzdCB3aGlsZSBkaXNw
YXRjaGluZyBQbGF0Zm9ybUV2ZW50OjpHZXN0dXJlU2Nyb2xsKiBldmVudHMuCisgICAgICAgIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD02NzgyMgorICAgICAgICAKKyAg
ICAgICAgUGxhdGZvcm1FdmVudCBHZXN0dXJlIFNjcm9sbCpUeXBlIGV2ZW50IHNlcXVlbmNlcyBz
aG91bGQgYWxsCisgICAgICAgIGdvIHRvIHRoZSB0YXJnZXQgKG5vZGUsIHBhZ2UsIHdpZGdldCkg
c3BlY2lmaWVkIGJ5IHRoZSBzdGFydGluZworICAgICAgICBHZXN0dXJlU2Nyb2xsQmVnaW4gZXZl
bnQuIFRoaXMgY2hhbmdlIHBsdW1icyBHZXN0dXJlU2Nyb2xsVXBkYXRlCisgICAgICAgIGluc3Rh
bmNlcyB0aHJvdWdoIHRoZSBleGlzdGluZyBzY3JvbGwgY29kZSBzaW1pbGFyIHRvIGhvdyBXaGVl
bAorICAgICAgICBpbnN0YW5jZXMgYXJlIGRlbGl2ZXJlZCBhbmQgYWRkcyB0aGUgbmVjZXNzYXJ5
IGNvZGUgdG8gcGx1bWIKKyAgICAgICAgR2VzdHVyZVNjcm9sbEJlZ2luIGFuZCBHZXN0dXJlU2Ny
b2xsQmVnaW4gaW5zdGFuY2VzIHRocm91Z2ggdG8KKyAgICAgICAgdGhlIGV4aXN0aW5nIFNjcm9s
bGFibGVBcmVhOjpoYW5kbGVHZXN0dXJlRXZlbnQgbWV0aG9kLgorIAorICAgICAgICBSZXZpZXdl
ZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBUZXN0czogZmFzdC9ldmVudHMvdG91Y2gv
Z2VzdHVyZS90b3VjaC1nZXN0dXJlLXNjcm9sbC1kaXYuaHRtbAorICAgICAgICAgICAgICAgZmFz
dC9ldmVudHMvdG91Y2gvZ2VzdHVyZS90b3VjaC1nZXN0dXJlLXNjcm9sbC1pZnJhbWUuaHRtbAor
ICAgICAgICAgICAgICAgZmFzdC9ldmVudHMvdG91Y2gvZ2VzdHVyZS90b3VjaC1nZXN0dXJlLXNj
cm9sbC1wYWdlLmh0bWwKKyAgICAgICAgICAgICAgIGZhc3QvZXZlbnRzL3RvdWNoL2dlc3R1cmUv
dG91Y2gtZ2VzdHVyZS1zY3JvbGwtc2h5LXRhcmdldC5odG1sCisKKyAgICAgICAgKiBwYWdlL0V2
ZW50SGFuZGxlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjp3aGVlbEdyYW51bGFyaXR5VG9TY3Jv
bGxHcmFudWxhcml0eSk6CisgICAgICAgIChXZWJDb3JlOjpzY3JvbGxOb2RlKToKKyAgICAgICAg
KFdlYkNvcmU6Omdlc3R1cmVOb2RlKTogCisgICAgICAgIChXZWJDb3JlOjpFdmVudEhhbmRsZXI6
OmNsZWFyKTogTWlub3IgcmVmYWN0b3JpbmcgZm9yIGNvZGUgc2hhcmluZy4KKyAgICAgICAgKFdl
YkNvcmU6OkV2ZW50SGFuZGxlcjo6ZGV0ZWN0QW5kUGFzc0dlc3R1cmVFdmVudFRvV2lkZ2V0KToK
KyAgICAgICAgKFdlYkNvcmU6OkV2ZW50SGFuZGxlcjo6cGFzc0dlc3R1cmVFdmVudFRvRnJhbWVW
aWV3KToKKyAgICAgICAgKFdlYkNvcmU6OkV2ZW50SGFuZGxlcjo6aGFuZGxlR2VzdHVyZUV2ZW50
KTogTW9kaWZpZWQgYXMgZGVzY3JpYmVkIGFib3ZlLgorICAgICAgICAqIHBhZ2UvRXZlbnRIYW5k
bGVyLmg6CisgICAgICAgICogcGFnZS9jaHJvbWl1bS9FdmVudEhhbmRsZXJDaHJvbWl1bS5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpFdmVudEhhbmRsZXI6OnBhc3NHZXN0dXJlRXZlbnRUb1dpZGdl
dCk6CisgICAgICAgICogcGFnZS9lZmwvRXZlbnRIYW5kbGVyRWZsLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OkV2ZW50SGFuZGxlcjo6cGFzc0dlc3R1cmVFdmVudFRvV2lkZ2V0KToKKyAgICAgICAg
KiBwYWdlL2d0ay9FdmVudEhhbmRsZXJHdGsuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RXZlbnRI
YW5kbGVyOjpwYXNzR2VzdHVyZUV2ZW50VG9XaWRnZXQpOgorICAgICAgICAqIHBhZ2UvbWFjL0V2
ZW50SGFuZGxlck1hYy5tbToKKyAgICAgICAgKFdlYkNvcmU6OkV2ZW50SGFuZGxlcjo6cGFzc0dl
c3R1cmVFdmVudFRvV2lkZ2V0KToKKyAgICAgICAgKiBwYWdlL3F0L0V2ZW50SGFuZGxlclF0LmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OkV2ZW50SGFuZGxlcjo6cGFzc0dlc3R1cmVFdmVudFRvV2lk
Z2V0KToKKyAgICAgICAgKiBwYWdlL3dpbi9FdmVudEhhbmRsZXJXaW4uY3BwOgorICAgICAgICAo
V2ViQ29yZTo6RXZlbnRIYW5kbGVyOjpwYXNzR2VzdHVyZUV2ZW50VG9XaWRnZXQpOgorICAgICAg
ICAqIHBhZ2Uvd3gvRXZlbnRIYW5kbGVyV3guY3BwOgorICAgICAgICAoV2ViQ29yZTo6RXZlbnRI
YW5kbGVyOjpwYXNzR2VzdHVyZUV2ZW50VG9XaWRnZXQpOgorICAgICAgICAqIHBsYXRmb3JtL1Nj
cm9sbEFuaW1hdG9yLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbEFuaW1hdG9yOjpzY3Jv
bGwpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsQW5pbWF0b3I6OmhhbmRsZUdlc3R1cmVFdmVu
dCk6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxBbmltYXRvcjo6Z2VzdHVyZUV2ZW50VGVzdFJl
Y29yZCk6IEFkZGVkOiBpbnRlcm5hbHMtb25seSBtZXRob2QgZm9yIHByb3ZpbmcgdGhhdCBhbGwg
Z2VzdHVyZSBldmVudHMgYXJyaXZlIGF0IHRoZSBjb3JyZWN0IChpLmUuIHNhbWUpIGluc3RhbmNl
LgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsQW5pbWF0b3I6OmVuYWJsZUdlc3R1cmVFdmVudFRl
c3RSZWNvcmQpOiBBZGRlZDogaW50ZXJuYWxzLW9ubHkgbWV0aG9kIHRvIGFjdGljYXRlIHRlc3Rp
bmcuCisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxBbmltYXRvcjo6cmVjb3JkR2VzdHVyZUV2ZW50
UHJvY2Vzc2luZyk6IEFkZGVkOiB0ZXN0IGhlbHBlciBtZXRob2QKKyAgICAgICAgKiBwbGF0Zm9y
bS9TY3JvbGxBbmltYXRvci5oOgorICAgICAgICAqIHBsYXRmb3JtL1Njcm9sbEFuaW1hdG9yTm9u
ZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxBbmltYXRvck5vbmU6OmhhbmRsZUdlc3R1
cmVFdmVudCk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckJveC5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpSZW5kZXJCb3g6Omdlc3R1cmUpOiBEaXNwYXRjaCBnZXN0dXJlcyBpbiB0aGUgc2Ft
ZSBmYXNoaW9uIGFzIHNjcm9sbC4KKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyQm94Lmg6Cisg
ICAgICAgICogdGVzdGluZy9JbnRlcm5hbHMuY3BwOiBBZGRlZCBlbnRyeSBwb2ludHMgZm9yIGRp
c3BhdGNoaW5nIHN5bnRoZXRpYyBnZXN0dXJlIGV2ZW50cywgZW5hYmxpbmcgdGVzdCBoYW5kbGlu
ZyBhbmQgZGV0ZXJtaW5pbmcgaWYgYWxsIHJlcXVpc2l0ZSBldmVudHMgYXJyaXZlZCBhdCB0aGUg
dGFyZ2V0LgorICAgICAgICAoV2ViQ29yZTo6SW50ZXJuYWxzOjplbmFibGVHZXN0dXJlU2Nyb2xs
RXZlbnRSZWNvcmQpOgorICAgICAgICAoV2ViQ29yZTo6SW50ZXJuYWxzOjpyZWNvcmRPZkdlc3R1
cmVTY3JvbGxFdmVudHMpOgorICAgICAgICAoV2ViQ29yZTo6c2VuZEdlc3R1cmVFdmVudCk6Cisg
ICAgICAgIChXZWJDb3JlOjpJbnRlcm5hbHM6OnNlbmRTY3JvbGxCZWdpbkdlc3R1cmVFdmVudCk6
CisgICAgICAgIChXZWJDb3JlOjpJbnRlcm5hbHM6OnNlbmRTY3JvbGxVcGRhdGVHZXN0dXJlRXZl
bnQpOgorICAgICAgICAoV2ViQ29yZTo6SW50ZXJuYWxzOjpzZW5kU2Nyb2xsRW5kR2VzdHVyZUV2
ZW50KToKKyAgICAgICAgKiB0ZXN0aW5nL0ludGVybmFscy5oOgorICAgICAgICAqIHRlc3Rpbmcv
SW50ZXJuYWxzLmlkbDoKKwogMjAxMi0wMS0wNSAgSmlhbiBMaSAgPGppYW5saUBjaHJvbWl1bS5v
cmc+CiAKICAgICAgICAgRmlsZVJlYWRlciBuZWVkcyBhZGRFdmVudExpc3RlbmVyCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL0V2ZW50SGFuZGxlci5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9wYWdlL0V2ZW50SGFuZGxlci5jcHAKaW5kZXggYzIxZWI3ZTI1YzFkOWRjYTQ4MDY0ZDI5ODM5
NWIzMzRhYmVlNTI0Ni4uOTQ2N2Y5MGRkMzk0NDM4ZmM5NzU2MzYwM2U4MWVlYTlmZjdjMzkyZSAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGFnZS9FdmVudEhhbmRsZXIuY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3BhZ2UvRXZlbnRIYW5kbGVyLmNwcApAQCAtNjksNiArNjksNyBAQAogI2lu
Y2x1ZGUgIlJlbmRlclZpZXcuaCIKICNpbmNsdWRlICJSZW5kZXJXaWRnZXQuaCIKICNpbmNsdWRl
ICJTY3JvbGxBbmltYXRvci5oIgorI2luY2x1ZGUgIlNjcm9sbGFibGVBcmVhLmgiCiAjaW5jbHVk
ZSAiU2Nyb2xsYmFyLmgiCiAjaW5jbHVkZSAiU2V0dGluZ3MuaCIKICNpbmNsdWRlICJTcGF0aWFs
TmF2aWdhdGlvbi5oIgpAQCAtMTQyLDcgKzE0MywyMCBAQCBwcml2YXRlOgogICAgIEN1cnNvciBt
X2N1cnNvcjsKIH07CiAKLXN0YXRpYyBpbmxpbmUgYm9vbCBzY3JvbGxOb2RlKGZsb2F0IGRlbHRh
LCBXaGVlbEV2ZW50OjpHcmFudWxhcml0eSBncmFudWxhcml0eSwgU2Nyb2xsRGlyZWN0aW9uIHBv
c2l0aXZlRGlyZWN0aW9uLCBTY3JvbGxEaXJlY3Rpb24gbmVnYXRpdmVEaXJlY3Rpb24sIE5vZGUq
IG5vZGUsIE5vZGUqKiBzdG9wTm9kZSkKK3N0YXRpYyBpbmxpbmUgU2Nyb2xsR3JhbnVsYXJpdHkg
d2hlZWxHcmFudWxhcml0eVRvU2Nyb2xsR3JhbnVsYXJpdHkoV2hlZWxFdmVudDo6R3JhbnVsYXJp
dHkgZ3JhbnVsYXJpdHkpCit7CisgICAgc3dpdGNoIChncmFudWxhcml0eSkgeworICAgIGNhc2Ug
V2hlZWxFdmVudDo6UGFnZToKKyAgICAgICAgcmV0dXJuIFNjcm9sbEJ5UGFnZTsKKyAgICBjYXNl
IFdoZWVsRXZlbnQ6OkxpbmU6CisgICAgICAgIHJldHVybiBTY3JvbGxCeUxpbmU7CisgICAgY2Fz
ZSBXaGVlbEV2ZW50OjpQaXhlbDoKKyAgICAgICAgcmV0dXJuIFNjcm9sbEJ5UGl4ZWw7CisgICAg
fQorICAgIHJldHVybiBTY3JvbGxCeVBpeGVsOworfQorCitzdGF0aWMgaW5saW5lIGJvb2wgc2Ny
b2xsTm9kZShmbG9hdCBkZWx0YSwgU2Nyb2xsR3JhbnVsYXJpdHkgZ3JhbnVsYXJpdHksIFNjcm9s
bERpcmVjdGlvbiBwb3NpdGl2ZURpcmVjdGlvbiwgU2Nyb2xsRGlyZWN0aW9uIG5lZ2F0aXZlRGly
ZWN0aW9uLCBOb2RlKiBub2RlLCBOb2RlKiogc3RvcE5vZGUpCiB7CiAgICAgaWYgKCFkZWx0YSkK
ICAgICAgICAgcmV0dXJuIGZhbHNlOwpAQCAtMTUwLDIyICsxNjQsMjUgQEAgc3RhdGljIGlubGlu
ZSBib29sIHNjcm9sbE5vZGUoZmxvYXQgZGVsdGEsIFdoZWVsRXZlbnQ6OkdyYW51bGFyaXR5IGdy
YW51bGFyaXR5LAogICAgIGlmICghbm9kZS0+cmVuZGVyZXIoKSkKICAgICAgICAgcmV0dXJuIGZh
bHNlOwogICAgIAotICAgIC8vIEZpbmQgdGhlIG5lYXJlc3QgZW5jbG9zaW5nIGJveC4KICAgICBS
ZW5kZXJCb3gqIGVuY2xvc2luZ0JveCA9IG5vZGUtPnJlbmRlcmVyKCktPmVuY2xvc2luZ0JveCgp
OwotCiAgICAgZmxvYXQgYWJzRGVsdGEgPSBkZWx0YSA+IDAgPyBkZWx0YSA6IC1kZWx0YTsKLSAg
ICAKLSAgICBpZiAoZ3JhbnVsYXJpdHkgPT0gV2hlZWxFdmVudDo6UGFnZSkKLSAgICAgICAgcmV0
dXJuIGVuY2xvc2luZ0JveC0+c2Nyb2xsKGRlbHRhIDwgMCA/IG5lZ2F0aXZlRGlyZWN0aW9uIDog
cG9zaXRpdmVEaXJlY3Rpb24sIFNjcm9sbEJ5UGFnZSwgYWJzRGVsdGEsIHN0b3BOb2RlKTsKKyAg
ICByZXR1cm4gZW5jbG9zaW5nQm94LT5zY3JvbGwoZGVsdGEgPCAwID8gbmVnYXRpdmVEaXJlY3Rp
b24gOiBwb3NpdGl2ZURpcmVjdGlvbiwgZ3JhbnVsYXJpdHksIGFic0RlbHRhLCBzdG9wTm9kZSk7
Cit9CiAKLSAgICBpZiAoZ3JhbnVsYXJpdHkgPT0gV2hlZWxFdmVudDo6TGluZSkKLSAgICAgICAg
cmV0dXJuIGVuY2xvc2luZ0JveC0+c2Nyb2xsKGRlbHRhIDwgMCA/IG5lZ2F0aXZlRGlyZWN0aW9u
IDogcG9zaXRpdmVEaXJlY3Rpb24sIFNjcm9sbEJ5TGluZSwgYWJzRGVsdGEsIHN0b3BOb2RlKTsK
K3N0YXRpYyBpbmxpbmUgYm9vbCBzY3JvbGxOb2RlKGZsb2F0IGRlbHRhLCBXaGVlbEV2ZW50OjpH
cmFudWxhcml0eSBncmFudWxhcml0eSwgU2Nyb2xsRGlyZWN0aW9uIHBvc2l0aXZlRGlyZWN0aW9u
LCBTY3JvbGxEaXJlY3Rpb24gbmVnYXRpdmVEaXJlY3Rpb24sIE5vZGUqIG5vZGUsIE5vZGUqKiBz
dG9wTm9kZSkKK3sKKyAgICByZXR1cm4gc2Nyb2xsTm9kZShkZWx0YSwgd2hlZWxHcmFudWxhcml0
eVRvU2Nyb2xsR3JhbnVsYXJpdHkoZ3JhbnVsYXJpdHkpLCBwb3NpdGl2ZURpcmVjdGlvbiwgbmVn
YXRpdmVEaXJlY3Rpb24sIG5vZGUsIHN0b3BOb2RlKTsKK30KIAotICAgIGlmIChncmFudWxhcml0
eSA9PSBXaGVlbEV2ZW50OjpQaXhlbCkKLSAgICAgICAgcmV0dXJuIGVuY2xvc2luZ0JveC0+c2Ny
b2xsKGRlbHRhIDwgMCA/IG5lZ2F0aXZlRGlyZWN0aW9uIDogcG9zaXRpdmVEaXJlY3Rpb24sIFNj
cm9sbEJ5UGl4ZWwsIGFic0RlbHRhLCBzdG9wTm9kZSk7Ci0gICAgICAgIAotICAgIHJldHVybiBm
YWxzZTsKKyNpZiBFTkFCTEUoR0VTVFVSRV9FVkVOVFMpCitzdGF0aWMgaW5saW5lIGJvb2wgZ2Vz
dHVyZU5vZGUoY29uc3QgUGxhdGZvcm1HZXN0dXJlRXZlbnQmIGdlc3R1cmVFdmVudCwgTm9kZSog
bm9kZSkKK3sKKyAgICBpZiAoIW5vZGUtPnJlbmRlcmVyKCkpCisgICAgICAgIHJldHVybiBmYWxz
ZTsKKyAgICBSZW5kZXJCb3gqIGVuY2xvc2luZ0JveCA9IG5vZGUtPnJlbmRlcmVyKCktPmVuY2xv
c2luZ0JveCgpOworICAgIHJldHVybiBlbmNsb3NpbmdCb3gtPmdlc3R1cmUoZ2VzdHVyZUV2ZW50
KTsKIH0KKyNlbmRpZgogCiAjaWYgIVBMQVRGT1JNKE1BQykKIApAQCAtMjY3LDYgKzI4NCw5IEBA
IHZvaWQgRXZlbnRIYW5kbGVyOjpjbGVhcigpCiAjaWYgRU5BQkxFKFRPVUNIX0VWRU5UUykKICAg
ICBtX29yaWdpbmF0aW5nVG91Y2hQb2ludFRhcmdldHMuY2xlYXIoKTsKICNlbmRpZgorI2lmIEVO
QUJMRShHRVNUVVJFX0VWRU5UUykKKyAgICBtX2dlc3R1cmVUYXJnZXROb2RlLmNsZWFyKCk7Cisj
ZW5kaWYKIH0KIAogdm9pZCBFdmVudEhhbmRsZXI6Om5vZGVXaWxsQmVSZW1vdmVkKE5vZGUqIG5v
ZGVUb0JlUmVtb3ZlZCkKQEAgLTIyMjgsMTggKzIyNDgsNTUgQEAgdm9pZCBFdmVudEhhbmRsZXI6
OmRlZmF1bHRXaGVlbEV2ZW50SGFuZGxlcihOb2RlKiBzdGFydE5vZGUsIFdoZWVsRXZlbnQqIHdo
ZWVsRXYKIH0KIAogI2lmIEVOQUJMRShHRVNUVVJFX0VWRU5UUykKK2Jvb2wgRXZlbnRIYW5kbGVy
OjpkZXRlY3RBbmRQYXNzR2VzdHVyZUV2ZW50VG9XaWRnZXQoUGFzc1JlZlB0cjxOb2RlPiB0YXJn
ZXROb2RlLCBjb25zdCBQbGF0Zm9ybUdlc3R1cmVFdmVudCYgZ2VzdHVyZUV2ZW50LCBjb25zdCBI
aXRUZXN0UmVzdWx0JiByZXN1bHQpCit7CisgICAgTm9kZSogbm9kZSA9IHRhcmdldE5vZGUuZ2V0
KCk7CisgICAgaWYgKCFub2RlKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBib29sIGlz
T3ZlcldpZGdldCA9IHJlc3VsdC5pc092ZXJXaWRnZXQoKTsKKyAgICBSZW5kZXJPYmplY3QqIHRh
cmdldCA9IG5vZGUtPnJlbmRlcmVyKCk7CisgICAgaWYgKCEoaXNPdmVyV2lkZ2V0ICYmIHRhcmdl
dCAmJiB0YXJnZXQtPmlzV2lkZ2V0KCkpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAg
IAorICAgIFdpZGdldCogd2lkZ2V0ID0gdG9SZW5kZXJXaWRnZXQodGFyZ2V0KS0+d2lkZ2V0KCk7
CisgICAgaWYgKHdpZGdldCAmJiBwYXNzR2VzdHVyZUV2ZW50VG9XaWRnZXQoZ2VzdHVyZUV2ZW50
LCB3aWRnZXQpKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICByZXR1cm4gZmFsc2U7Cit9CisK
K2Jvb2wgRXZlbnRIYW5kbGVyOjpwYXNzR2VzdHVyZUV2ZW50VG9GcmFtZVZpZXcoY29uc3QgUGxh
dGZvcm1HZXN0dXJlRXZlbnQmIGdlc3R1cmVFdmVudCkKK3sKKyAgICBGcmFtZVZpZXcqIHZpZXcg
PSBtX2ZyYW1lLT52aWV3KCk7CisgICAgaWYgKCF2aWV3KQorICAgICAgIHJldHVybiBmYWxzZTsK
KworICAgIHZpZXctPmhhbmRsZUdlc3R1cmVFdmVudChnZXN0dXJlRXZlbnQpOworICAgIHJldHVy
biB0cnVlOworfQorCiBib29sIEV2ZW50SGFuZGxlcjo6aGFuZGxlR2VzdHVyZUV2ZW50KGNvbnN0
IFBsYXRmb3JtR2VzdHVyZUV2ZW50JiBnZXN0dXJlRXZlbnQpCiB7Ci0gICAgLy8gRklYTUU6IFRo
aXMgc2hvdWxkIGhpdCB0ZXN0IGFuZCBnbyB0byB0aGUgY29ycmVjdCBzdWJmcmFtZSByYXRoZXIg
dGhhbiAKLSAgICAvLyBhbHdheXMgc2VuZGluZyBnZXN0dXJlcyB0byB0aGUgbWFpbiBmcmFtZSBv
bmx5LiBXZSBzaG91bGQgYWxzbyBlbnN1cmUKLSAgICAvLyB0aGF0IGlmIGEgZnJhbWUgZ2V0cyBh
IGdlc3R1cmUgYmVnaW4gZ2VzdHVyZSwgaXQgZ2V0cyB0aGUgY29ycmVzcG9uZGluZwotICAgIC8v
IGVuZCBnZXN0dXJlIGFzIHdlbGwuCisgICAgRG9jdW1lbnQqIGRvY3VtZW50ID0gbV9mcmFtZS0+
ZG9jdW1lbnQoKTsKKyAgICBSZW5kZXJPYmplY3QqIGRvY3VtZW50UmVuZGVyZXIgPSBkb2N1bWVu
dC0+cmVuZGVyZXIoKTsKKyAgICBpZiAoIWRvY3VtZW50UmVuZGVyZXIpCisgICAgICAgIHJldHVy
biBmYWxzZTsKKyAgICBSZWZQdHI8RnJhbWVWaWV3PiBwcm90ZWN0b3IobV9mcmFtZS0+dmlldygp
KTsKKyAgICBGcmFtZVZpZXcqIHZpZXcgPSBtX2ZyYW1lLT52aWV3KCk7CisgICAgaWYgKCF2aWV3
KQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgc2V0RnJhbWVXYXNTY3JvbGxlZEJ5VXNlcigp
OworICAgIExheW91dFBvaW50IHBvaW50SW5WaWV3Q29vcmRpbmF0ZXMgPSB2aWV3LT53aW5kb3dU
b0NvbnRlbnRzKGdlc3R1cmVFdmVudC5wb3NpdGlvbigpKTsKKworICAgIEhpdFRlc3RSZXF1ZXN0
IHJlcXVlc3QoSGl0VGVzdFJlcXVlc3Q6OlJlYWRPbmx5KTsKKyAgICBIaXRUZXN0UmVzdWx0IHJl
c3VsdChwb2ludEluVmlld0Nvb3JkaW5hdGVzKTsKKyAgICBkb2N1bWVudC0+cmVuZGVyVmlldygp
LT5sYXllcigpLT5oaXRUZXN0KHJlcXVlc3QsIHJlc3VsdCk7CiAKICAgICBzd2l0Y2ggKGdlc3R1
cmVFdmVudC50eXBlKCkpIHsKICAgICBjYXNlIFBsYXRmb3JtRXZlbnQ6Okdlc3R1cmVUYXBEb3du
OgogICAgICAgICBicmVhazsKICAgICBjYXNlIFBsYXRmb3JtRXZlbnQ6Okdlc3R1cmVUYXA6IHsK
LSAgICAgICAgLy8gRklYTUU6IFJlZmFjdG9yIHRoaXMgY29kZSB0byBub3QgaGl0IHRlc3QgbXVs
dGlwbGUgdGltZXMgb25jZSBoaXQgdGVzdGluZyBoYXMgYmVlbiBjb3JyZWN0ZWQgYXMgc3VnZ2Vz
dGVkIGFib3ZlLgorICAgICAgICAvLyBGSVhNRTogUmVmYWN0b3IgdGhpcyBjb2RlIHRvIG5vdCBo
aXQgdGVzdCBtdWx0aXBsZSB0aW1lcyBieSB1c2luZyB0aGUgY29kZSB3cml0dGVuIGZvciBzY3Jv
bGwuCiAgICAgICAgIFBsYXRmb3JtTW91c2VFdmVudCBmYWtlTW91c2VNb3ZlKGdlc3R1cmVFdmVu
dC5wb3NpdGlvbigpLCBnZXN0dXJlRXZlbnQuZ2xvYmFsUG9zaXRpb24oKSwgTm9CdXR0b24sIFBs
YXRmb3JtRXZlbnQ6Ok1vdXNlTW92ZWQsIC8qIGNsaWNrQ291bnQgKi8gMSwgZ2VzdHVyZUV2ZW50
LnNoaWZ0S2V5KCksIGdlc3R1cmVFdmVudC5jdHJsS2V5KCksIGdlc3R1cmVFdmVudC5hbHRLZXko
KSwgZ2VzdHVyZUV2ZW50Lm1ldGFLZXkoKSwgZ2VzdHVyZUV2ZW50LnRpbWVzdGFtcCgpKTsKICAg
ICAgICAgUGxhdGZvcm1Nb3VzZUV2ZW50IGZha2VNb3VzZURvd24oZ2VzdHVyZUV2ZW50LnBvc2l0
aW9uKCksIGdlc3R1cmVFdmVudC5nbG9iYWxQb3NpdGlvbigpLCBMZWZ0QnV0dG9uLCBQbGF0Zm9y
bUV2ZW50OjpNb3VzZVByZXNzZWQsIC8qIGNsaWNrQ291bnQgKi8gMSwgZ2VzdHVyZUV2ZW50LnNo
aWZ0S2V5KCksIGdlc3R1cmVFdmVudC5jdHJsS2V5KCksIGdlc3R1cmVFdmVudC5hbHRLZXkoKSwg
Z2VzdHVyZUV2ZW50Lm1ldGFLZXkoKSwgZ2VzdHVyZUV2ZW50LnRpbWVzdGFtcCgpKTsKICAgICAg
ICAgUGxhdGZvcm1Nb3VzZUV2ZW50IGZha2VNb3VzZVVwKGdlc3R1cmVFdmVudC5wb3NpdGlvbigp
LCBnZXN0dXJlRXZlbnQuZ2xvYmFsUG9zaXRpb24oKSwgTGVmdEJ1dHRvbiwgUGxhdGZvcm1FdmVu
dDo6TW91c2VSZWxlYXNlZCwgLyogY2xpY2tDb3VudCAqLyAxLCBnZXN0dXJlRXZlbnQuc2hpZnRL
ZXkoKSwgZ2VzdHVyZUV2ZW50LmN0cmxLZXkoKSwgZ2VzdHVyZUV2ZW50LmFsdEtleSgpLCBnZXN0
dXJlRXZlbnQubWV0YUtleSgpLCBnZXN0dXJlRXZlbnQudGltZXN0YW1wKCkpOwpAQCAtMjI0OSwy
OCArMjMwNiw1MiBAQCBib29sIEV2ZW50SGFuZGxlcjo6aGFuZGxlR2VzdHVyZUV2ZW50KGNvbnN0
IFBsYXRmb3JtR2VzdHVyZUV2ZW50JiBnZXN0dXJlRXZlbnQpCiAgICAgICAgIHJldHVybiB0cnVl
OwogICAgIH0KICAgICBjYXNlIFBsYXRmb3JtRXZlbnQ6Okdlc3R1cmVTY3JvbGxVcGRhdGU6IHsK
LSAgICAgICAgY29uc3QgZmxvYXQgdGlja0Rpdmlzb3IgPSAoZmxvYXQpV2hlZWxFdmVudDo6dGlj
a011bHRpcGxpZXI7Ci0gICAgICAgIC8vIEZJWE1FOiBSZXBsYWNlIHRoaXMgaW50ZXJpbSBpbXBs
ZW1lbnRhdGlvbiBvbmNlIHRoZSBhYm92ZSBmaXhtZSBoYXMgYmVlbiBhZGRyZXNzZWQuCi0gICAg
ICAgIEludFBvaW50IHBvaW50KGdlc3R1cmVFdmVudC5wb3NpdGlvbigpLngoKSwgZ2VzdHVyZUV2
ZW50LnBvc2l0aW9uKCkueSgpKTsKLSAgICAgICAgSW50UG9pbnQgZ2xvYmFsUG9pbnQoZ2VzdHVy
ZUV2ZW50Lmdsb2JhbFBvc2l0aW9uKCkueCgpLCBnZXN0dXJlRXZlbnQuZ2xvYmFsUG9zaXRpb24o
KS55KCkpOwotICAgICAgICBQbGF0Zm9ybVdoZWVsRXZlbnQgc3ludGhldGljV2hlZWxFdmVudChw
b2ludCwgZ2xvYmFsUG9pbnQsIGdlc3R1cmVFdmVudC5kZWx0YVgoKSwgZ2VzdHVyZUV2ZW50LmRl
bHRhWSgpLCBnZXN0dXJlRXZlbnQuZGVsdGFYKCkgLyB0aWNrRGl2aXNvciwgZ2VzdHVyZUV2ZW50
LmRlbHRhWSgpIC8gdGlja0Rpdmlzb3IsIFNjcm9sbEJ5UGl4ZWxXaGVlbEV2ZW50LCBnZXN0dXJl
RXZlbnQuc2hpZnRLZXkoKSwgZ2VzdHVyZUV2ZW50LmN0cmxLZXkoKSwgZ2VzdHVyZUV2ZW50LmFs
dEtleSgpLCBnZXN0dXJlRXZlbnQubWV0YUtleSgpKTsKLSAgICAgICAgaGFuZGxlV2hlZWxFdmVu
dChzeW50aGV0aWNXaGVlbEV2ZW50KTsKLSAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIC8v
IEFsd2F5cyBsYXRjaGVkIGlmIHBvc3NpYmxlLgorICAgICAgICBpZiAoIW1fZ2VzdHVyZVRhcmdl
dE5vZGUpCisgICAgICAgICAgICBtX2dlc3R1cmVUYXJnZXROb2RlID0gcmVzdWx0LmlubmVyTm9k
ZSgpOworCisgICAgICAgIGlmIChkZXRlY3RBbmRQYXNzR2VzdHVyZUV2ZW50VG9XaWRnZXQobV9n
ZXN0dXJlVGFyZ2V0Tm9kZSwgZ2VzdHVyZUV2ZW50LCByZXN1bHQpKQorICAgICAgICAgICAgcmV0
dXJuIHRydWU7CisgICAgICAgIE5vZGUqIG5vZGUgPSBtX2dlc3R1cmVUYXJnZXROb2RlID8gbV9n
ZXN0dXJlVGFyZ2V0Tm9kZS0+c2hhZG93QW5jZXN0b3JOb2RlKCkgOiAwOworICAgICAgICBib29s
IHhTY3JvbGwgPSBub2RlICYmIHNjcm9sbE5vZGUoZ2VzdHVyZUV2ZW50LmRlbHRhWCgpLCBTY3Jv
bGxCeVBpeGVsLCBTY3JvbGxMZWZ0LCBTY3JvbGxSaWdodCwgbm9kZSwgMCk7CisgICAgICAgIGJv
b2wgeVNjcm9sbCA9IG5vZGUgJiYgc2Nyb2xsTm9kZShnZXN0dXJlRXZlbnQuZGVsdGFZKCksIFNj
cm9sbEJ5UGl4ZWwsIFNjcm9sbFVwLCBTY3JvbGxEb3duLCBub2RlLCAwKTsKKworICAgICAgICBp
ZiAoeFNjcm9sbCB8fCB5U2Nyb2xsKQorICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAg
IHJldHVybiBwYXNzR2VzdHVyZUV2ZW50VG9GcmFtZVZpZXcoZ2VzdHVyZUV2ZW50KTsKKyAgICB9
CisgICAgY2FzZSBQbGF0Zm9ybUV2ZW50OjpHZXN0dXJlU2Nyb2xsQmVnaW46IHsKKyAgICAgICAg
Ly8gTGF0Y2ggb24gc2Nyb2xsIGJlZ2luLgorICAgICAgICBpZiAobV9nZXN0dXJlVGFyZ2V0Tm9k
ZSkKKyAgICAgICAgICAgIG1fZ2VzdHVyZVRhcmdldE5vZGUgPSAwOworICAgICAgICBtX2dlc3R1
cmVUYXJnZXROb2RlID0gcmVzdWx0LmlubmVyTm9kZSgpOworCisgICAgICAgIGlmIChkZXRlY3RB
bmRQYXNzR2VzdHVyZUV2ZW50VG9XaWRnZXQobV9nZXN0dXJlVGFyZ2V0Tm9kZSwgZ2VzdHVyZUV2
ZW50LCByZXN1bHQpKQorICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIE5vZGUqIG5v
ZGUgPSBtX2dlc3R1cmVUYXJnZXROb2RlID8gbV9nZXN0dXJlVGFyZ2V0Tm9kZS0+c2hhZG93QW5j
ZXN0b3JOb2RlKCkgOiAwOworICAgICAgICBpZiAobm9kZSAmJiBnZXN0dXJlTm9kZShnZXN0dXJl
RXZlbnQsIG5vZGUpKQorICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIHJldHVybiBw
YXNzR2VzdHVyZUV2ZW50VG9GcmFtZVZpZXcoZ2VzdHVyZUV2ZW50KTsKICAgICB9Ci0gICAgY2Fz
ZSBQbGF0Zm9ybUV2ZW50OjpHZXN0dXJlRG91YmxlVGFwOgotICAgIGNhc2UgUGxhdGZvcm1FdmVu
dDo6R2VzdHVyZVNjcm9sbEJlZ2luOgogICAgIGNhc2UgUGxhdGZvcm1FdmVudDo6R2VzdHVyZVNj
cm9sbEVuZDogewotICAgICAgICBGcmFtZVZpZXcqIHZpZXcgPSBtX2ZyYW1lLT52aWV3KCk7Ci0g
ICAgICAgIGlmICghdmlldykKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgLy8g
QWx3YXlzIHVubGF0Y2guCisgICAgICAgIFJlZlB0cjxOb2RlPiB0YXJnZXROb2RlID0gbV9nZXN0
dXJlVGFyZ2V0Tm9kZS5yZWxlYXNlKCk7CisgICAgICAgIGlmICghdGFyZ2V0Tm9kZSkKKyAgICAg
ICAgICAgIHRhcmdldE5vZGUgPSByZXN1bHQuaW5uZXJOb2RlKCk7CiAKLSAgICAgICAgdmlldy0+
aGFuZGxlR2VzdHVyZUV2ZW50KGdlc3R1cmVFdmVudCk7Ci0gICAgICAgIHJldHVybiB0cnVlOwor
ICAgICAgICBpZiAoZGV0ZWN0QW5kUGFzc0dlc3R1cmVFdmVudFRvV2lkZ2V0KHRhcmdldE5vZGUs
IGdlc3R1cmVFdmVudCwgcmVzdWx0KSkKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAg
ICBOb2RlKiBub2RlID0gdGFyZ2V0Tm9kZSA/IHRhcmdldE5vZGUtPnNoYWRvd0FuY2VzdG9yTm9k
ZSgpIDogMDsKKyAgICAgICAgaWYgKG5vZGUgJiYgZ2VzdHVyZU5vZGUoZ2VzdHVyZUV2ZW50LCBu
b2RlKSkKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICByZXR1cm4gcGFzc0dlc3R1
cmVFdmVudFRvRnJhbWVWaWV3KGdlc3R1cmVFdmVudCk7CiAgICAgfQorICAgIGNhc2UgUGxhdGZv
cm1FdmVudDo6R2VzdHVyZURvdWJsZVRhcDoKKyAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIGRl
ZmF1bHQ6CiAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgIH0KLSAgICByZXR1cm4g
dHJ1ZTsKKyAgICByZXR1cm4gZmFsc2U7CiB9CiAjZW5kaWYKIApkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcGFnZS9FdmVudEhhbmRsZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRXZlbnRI
YW5kbGVyLmgKaW5kZXggNTIxNmUwYjg4YWFiMjFkZDlkYzU4YWI4ZDQ4OTQ5OTVkZjAxMjcyNS4u
NzdlMTVlMjFmZDZiZWQxY2I2ODRjZjkxYWU2ZjNmZWQ5YWNkM2VmMyAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvcGFnZS9FdmVudEhhbmRsZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdl
L0V2ZW50SGFuZGxlci5oCkBAIC0yOTksNiArMjk5LDkgQEAgcHJpdmF0ZToKICAgICBib29sIHBh
c3NXaWRnZXRNb3VzZURvd25FdmVudFRvV2lkZ2V0KFJlbmRlcldpZGdldCopOwogCiAgICAgYm9v
bCBwYXNzTW91c2VEb3duRXZlbnRUb1dpZGdldChXaWRnZXQqKTsKKyNpZiBFTkFCTEUoR0VTVFVS
RV9FVkVOVFMpCisgICAgYm9vbCBwYXNzR2VzdHVyZUV2ZW50VG9XaWRnZXQoY29uc3QgUGxhdGZv
cm1HZXN0dXJlRXZlbnQmLCBXaWRnZXQqKTsKKyNlbmRpZgogICAgIGJvb2wgcGFzc1doZWVsRXZl
bnRUb1dpZGdldChjb25zdCBQbGF0Zm9ybVdoZWVsRXZlbnQmLCBXaWRnZXQqKTsKIAogICAgIHZv
aWQgZGVmYXVsdFNwYWNlRXZlbnRIYW5kbGVyKEtleWJvYXJkRXZlbnQqKTsKQEAgLTQyMSw2ICs0
MjQsMTEgQEAgcHJpdmF0ZToKICAgICBUb3VjaFRhcmdldE1hcCBtX29yaWdpbmF0aW5nVG91Y2hQ
b2ludFRhcmdldHM7CiAgICAgYm9vbCBtX3RvdWNoUHJlc3NlZDsKICNlbmRpZgorI2lmIEVOQUJM
RShHRVNUVVJFX0VWRU5UUykKKyAgICBib29sIGRldGVjdEFuZFBhc3NHZXN0dXJlRXZlbnRUb1dp
ZGdldChQYXNzUmVmUHRyPE5vZGU+LCBjb25zdCBQbGF0Zm9ybUdlc3R1cmVFdmVudCYsIGNvbnN0
IEhpdFRlc3RSZXN1bHQmKTsKKyAgICBib29sIHBhc3NHZXN0dXJlRXZlbnRUb0ZyYW1lVmlldyhj
b25zdCBQbGF0Zm9ybUdlc3R1cmVFdmVudCYpOworICAgIFJlZlB0cjxOb2RlPiBtX2dlc3R1cmVU
YXJnZXROb2RlOworI2VuZGlmCiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL2Nocm9taXVtL0V2ZW50SGFuZGxlckNocm9taXVtLmNw
cCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvY2hyb21pdW0vRXZlbnRIYW5kbGVyQ2hyb21pdW0uY3Bw
CmluZGV4IDk3YzFjYmU3Mzg1NGQzYjY2MDMyMGI4MTQ0NmM3NjBlZDgxODQ2YjEuLjg2NjQyMjE2
Njk5OTViYWQ5NDg5YmEwODg3MzBmMzFiMzE0OWFkZmEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3BhZ2UvY2hyb21pdW0vRXZlbnRIYW5kbGVyQ2hyb21pdW0uY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3BhZ2UvY2hyb21pdW0vRXZlbnRIYW5kbGVyQ2hyb21pdW0uY3BwCkBAIC00NCw2ICs0
NCwxMSBAQAogI2luY2x1ZGUgIlBsYXRmb3JtV2hlZWxFdmVudC5oIgogI2luY2x1ZGUgIlJlbmRl
cldpZGdldC5oIgogCisjaWYgRU5BQkxFKEdFU1RVUkVfRVZFTlRTKSB8fCBFTkFCTEUoR0VTVFVS
RV9SRUNPR05JWkVSKQorI2luY2x1ZGUgIlBsYXRmb3JtR2VzdHVyZUV2ZW50LmgiCisjZW5kaWYK
KworCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKICNpZiBPUyhEQVJXSU4pCkBAIC0xNjQsNCArMTY5
LDE2IEBAIGJvb2wgRXZlbnRIYW5kbGVyOjpzaG91bGRUdXJuVmVydGljYWxUaWNrc0ludG9Ib3Jp
em9udGFsKGNvbnN0IEhpdFRlc3RSZXN1bHQmIHJlCiB9CiAjZW5kaWYKIAorI2lmIEVOQUJMRShH
RVNUVVJFX0VWRU5UUykKK2Jvb2wgRXZlbnRIYW5kbGVyOjpwYXNzR2VzdHVyZUV2ZW50VG9XaWRn
ZXQoY29uc3QgUGxhdGZvcm1HZXN0dXJlRXZlbnQmIGdlc3R1cmVFdmVudCwgV2lkZ2V0KiB3aWRn
ZXQpCit7CisgICAgaWYgKCF3aWRnZXQpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGlm
ICghd2lkZ2V0LT5pc0ZyYW1lVmlldygpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgcmV0
dXJuIHN0YXRpY19jYXN0PEZyYW1lVmlldyo+KHdpZGdldCktPmZyYW1lKCktPmV2ZW50SGFuZGxl
cigpLT5oYW5kbGVHZXN0dXJlRXZlbnQoZ2VzdHVyZUV2ZW50KTsKK30KKyNlbmRpZgorCiB9IC8v
IG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL2VmbC9F
dmVudEhhbmRsZXJFZmwuY3BwIGIvU291cmNlL1dlYkNvcmUvcGFnZS9lZmwvRXZlbnRIYW5kbGVy
RWZsLmNwcAppbmRleCAwYjljMmI2ZTZmODE2YTJjMThhYzg3NWRmZmJhNDBiMTFhMjZhMzcwLi5i
MjIyNjY4YjdmOTg3NWJmZTdmMWIwNzM1MzNjMGIxZTJmY2M4NmYzIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9wYWdlL2VmbC9FdmVudEhhbmRsZXJFZmwuY3BwCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3BhZ2UvZWZsL0V2ZW50SGFuZGxlckVmbC5jcHAKQEAgLTk1LDYgKzk1LDE0IEBAIGJvb2wg
RXZlbnRIYW5kbGVyOjpwYXNzV2hlZWxFdmVudFRvV2lkZ2V0KGNvbnN0IFBsYXRmb3JtV2hlZWxF
dmVudCYgZXZlbnQsIFdpZGdlCiAgICAgcmV0dXJuIHN0YXRpY19jYXN0PEZyYW1lVmlldyo+KHdp
ZGdldCktPmZyYW1lKCktPmV2ZW50SGFuZGxlcigpLT5oYW5kbGVXaGVlbEV2ZW50KGV2ZW50KTsK
IH0KIAorI2lmIEVOQUJMRShHRVNUVVJFX0VWRU5UUykKK2Jvb2wgRXZlbnRIYW5kbGVyOjpwYXNz
R2VzdHVyZUV2ZW50VG9XaWRnZXQoY29uc3QgUGxhdGZvcm1HZXN0dXJlRXZlbnQmLCBXaWRnZXQq
KQoreworICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAgcmV0dXJuIGZhbHNlOworfQorI2VuZGlm
CisKIFBhc3NSZWZQdHI8Q2xpcGJvYXJkPiBFdmVudEhhbmRsZXI6OmNyZWF0ZURyYWdnaW5nQ2xp
cGJvYXJkKCkgY29uc3QKIHsKICAgICByZXR1cm4gQ2xpcGJvYXJkRWZsOjpjcmVhdGUoQ2xpcGJv
YXJkV3JpdGFibGUsIENsaXBib2FyZDo6RHJhZ0FuZERyb3ApOwpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcGFnZS9ndGsvRXZlbnRIYW5kbGVyR3RrLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3Bh
Z2UvZ3RrL0V2ZW50SGFuZGxlckd0ay5jcHAKaW5kZXggNDM4NmE0ZGUzNzg4ODlhMzU1NWE1MDg4
MzlkMzY1MmYxZjhmNTk2NS4uNGY4YzllMGY3NDkyNzZkMjM4MWEzZWY4N2Q3OGExODE4ZjY3OGU1
NSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGFnZS9ndGsvRXZlbnRIYW5kbGVyR3RrLmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL2d0ay9FdmVudEhhbmRsZXJHdGsuY3BwCkBAIC05
NCw2ICs5NCwxNCBAQCBib29sIEV2ZW50SGFuZGxlcjo6cGFzc1doZWVsRXZlbnRUb1dpZGdldChj
b25zdCBQbGF0Zm9ybVdoZWVsRXZlbnQmIGV2ZW50LCBXaWRnZQogICAgIHJldHVybiBzdGF0aWNf
Y2FzdDxGcmFtZVZpZXcqPih3aWRnZXQpLT5mcmFtZSgpLT5ldmVudEhhbmRsZXIoKS0+aGFuZGxl
V2hlZWxFdmVudChldmVudCk7CiB9CiAKKyNpZiBFTkFCTEUoR0VTVFVSRV9FVkVOVFMpCitib29s
IEV2ZW50SGFuZGxlcjo6cGFzc0dlc3R1cmVFdmVudFRvV2lkZ2V0KGNvbnN0IFBsYXRmb3JtR2Vz
dHVyZUV2ZW50JiwgV2lkZ2V0KikKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworICAgIHJldHVy
biBmYWxzZTsKK30KKyNlbmRpZgorCiBQYXNzUmVmUHRyPENsaXBib2FyZD4gRXZlbnRIYW5kbGVy
OjpjcmVhdGVEcmFnZ2luZ0NsaXBib2FyZCgpIGNvbnN0CiB7CiAgICAgcmV0dXJuIENsaXBib2Fy
ZEd0azo6Y3JlYXRlKENsaXBib2FyZFdyaXRhYmxlLCBEYXRhT2JqZWN0R3RrOjpjcmVhdGUoKSwg
Q2xpcGJvYXJkOjpEcmFnQW5kRHJvcCwgbV9mcmFtZSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9wYWdlL21hYy9FdmVudEhhbmRsZXJNYWMubW0gYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL21h
Yy9FdmVudEhhbmRsZXJNYWMubW0KaW5kZXggOTQwODFjYmE3NjZiNzVlM2UxODg1NTE5YmU5NDk2
OTZkNzE1YTQyNS4uYzAxYWQzN2RjYjA0MjhlYjUyYTczYTQ1ZGI2NDE2NjM1YTVlY2I2NSAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGFnZS9tYWMvRXZlbnRIYW5kbGVyTWFjLm1tCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3BhZ2UvbWFjL0V2ZW50SGFuZGxlck1hYy5tbQpAQCAtNzIxLDQgKzcy
MSwyNSBAQCB1bnNpZ25lZCBFdmVudEhhbmRsZXI6OmFjY2Vzc0tleU1vZGlmaWVycygpCiAgICAg
cmV0dXJuIFBsYXRmb3JtRXZlbnQ6OkN0cmxLZXkgfCBQbGF0Zm9ybUV2ZW50OjpBbHRLZXk7CiB9
CiAKKyNpZiBFTkFCTEUoR0VTVFVSRV9FVkVOVFMpCitib29sIEV2ZW50SGFuZGxlcjo6cGFzc0dl
c3R1cmVFdmVudFRvV2lkZ2V0KGNvbnN0IFBsYXRmb3JtR2VzdHVyZUV2ZW50JiBnZXN0dXJlRXZl
bnQsIFdpZGdldCogd2lkZ2V0KQoreworICAgIEJFR0lOX0JMT0NLX09CSkNfRVhDRVBUSU9OUzsK
KworICAgIGlmICghd2lkZ2V0KQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBOU1ZpZXcq
IG5vZGVWaWV3ID0gd2lkZ2V0LT5wbGF0Zm9ybVdpZGdldCgpOworICAgIGlmICghbm9kZVZpZXcp
IHsKKyAgICAgICAgLy8gV2ViS2l0MiBjb2RlIHBhdGguCisgICAgICAgIGlmICghd2lkZ2V0LT5p
c0ZyYW1lVmlldygpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgICAgIHJldHVy
biBzdGF0aWNfY2FzdDxGcmFtZVZpZXcqPih3aWRnZXQpLT5mcmFtZSgpLT5ldmVudEhhbmRsZXIo
KS0+aGFuZGxlR2VzdHVyZUV2ZW50KGdlc3R1cmVFdmVudCk7CisgICAgfQorICAgIEVORF9CTE9D
S19PQkpDX0VYQ0VQVElPTlM7CisgICAgcmV0dXJuIGZhbHNlOworfQorI2VuZGlmCisKIH0KZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvcXQvRXZlbnRIYW5kbGVyUXQuY3BwIGIvU291
cmNlL1dlYkNvcmUvcGFnZS9xdC9FdmVudEhhbmRsZXJRdC5jcHAKaW5kZXggMDZkYjEwNDU1Y2I3
ZmUyYzc1YmQwMDllMGNlYWVjMjQ2MzY1ZTkxZS4uNzY3YjM0N2U4M2E4ODI2YTJhMjI0ZmY0YTE5
N2VlNWQ2NzM0ZGRiZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGFnZS9xdC9FdmVudEhh
bmRsZXJRdC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGFnZS9xdC9FdmVudEhhbmRsZXJRdC5j
cHAKQEAgLTk4LDYgKzk4LDE3IEBAIGJvb2wgRXZlbnRIYW5kbGVyOjpwYXNzV2hlZWxFdmVudFRv
V2lkZ2V0KGNvbnN0IFBsYXRmb3JtV2hlZWxFdmVudCYgZXZlbnQsIFdpZGdlCiAgICAgcmV0dXJu
IHN0YXRpY19jYXN0PEZyYW1lVmlldyo+KHdpZGdldCktPmZyYW1lKCktPmV2ZW50SGFuZGxlcigp
LT5oYW5kbGVXaGVlbEV2ZW50KGV2ZW50KTsKIH0KIAorI2lmIEVOQUJMRShHRVNUVVJFX0VWRU5U
UykKK2Jvb2wgRXZlbnRIYW5kbGVyOjpwYXNzR2VzdHVyZUV2ZW50VG9XaWRnZXQoY29uc3QgUGxh
dGZvcm1HZXN0dXJlRXZlbnQmIGV2ZW50LCBXaWRnZXQqIHdpZGdldCkKK3sKKyAgICBRX0FTU0VS
VCh3aWRnZXQpOworICAgIGlmICghd2lkZ2V0LT5pc0ZyYW1lVmlldygpKQorICAgICAgICByZXR1
cm4gZmFsc2U7CisKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8RnJhbWVWaWV3Kj4od2lkZ2V0KS0+
ZnJhbWUoKS0+ZXZlbnRIYW5kbGVyKCktPmhhbmRsZUdlc3R1cmVFdmVudChldmVudCk7Cit9Cisj
ZW5kaWYKKwogUGFzc1JlZlB0cjxDbGlwYm9hcmQ+IEV2ZW50SGFuZGxlcjo6Y3JlYXRlRHJhZ2dp
bmdDbGlwYm9hcmQoKSBjb25zdAogewogICAgIHJldHVybiBDbGlwYm9hcmRRdDo6Y3JlYXRlKENs
aXBib2FyZFdyaXRhYmxlLCBtX2ZyYW1lLCBDbGlwYm9hcmQ6OkRyYWdBbmREcm9wKTsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2Uvd2luL0V2ZW50SGFuZGxlcldpbi5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9wYWdlL3dpbi9FdmVudEhhbmRsZXJXaW4uY3BwCmluZGV4IDkzOTNlZmE1NWZh
YzI2OTdkY2ZkNzllMmI3NDk3NTNiYzVjMmZiOGYuLjA2MDk3ZDRhODBjYTk3MTBmYjhmNGI1ZDZm
ZDUyYTFkNGFlMWQzNjUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2Uvd2luL0V2ZW50
SGFuZGxlcldpbi5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGFnZS93aW4vRXZlbnRIYW5kbGVy
V2luLmNwcApAQCAtODEsNiArODEsMTQgQEAgYm9vbCBFdmVudEhhbmRsZXI6OnBhc3NXaGVlbEV2
ZW50VG9XaWRnZXQoY29uc3QgUGxhdGZvcm1XaGVlbEV2ZW50JiB3aGVlbEV2ZW50LAogICAgIHJl
dHVybiBzdGF0aWNfY2FzdDxGcmFtZVZpZXcqPih3aWRnZXQpLT5mcmFtZSgpLT5ldmVudEhhbmRs
ZXIoKS0+aGFuZGxlV2hlZWxFdmVudCh3aGVlbEV2ZW50KTsKIH0KIAorI2lmIEVOQUJMRShHRVNU
VVJFX0VWRU5UUykKK2Jvb2wgRXZlbnRIYW5kbGVyOjpwYXNzR2VzdHVyZUV2ZW50VG9XaWRnZXQo
Y29uc3QgUGxhdGZvcm1HZXN0dXJlRXZlbnQmLCBXaWRnZXQqKQoreworICAgIG5vdEltcGxlbWVu
dGVkKCk7CisgICAgcmV0dXJuIGZhbHNlOworfQorI2VuZGlmCisKIGJvb2wgRXZlbnRIYW5kbGVy
Ojp0YWJzVG9BbGxGb3JtQ29udHJvbHMoS2V5Ym9hcmRFdmVudCopIGNvbnN0CiB7CiAgICAgcmV0
dXJuIHRydWU7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL3d4L0V2ZW50SGFuZGxl
cld4LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2Uvd3gvRXZlbnRIYW5kbGVyV3guY3BwCmluZGV4
IDA2YjYwMzY5ODJhNTM5ODM1Mjk0NmQ1MDdjNDZhYzkzNTA3Yjc0OWMuLjJhYzRkZDdlZTIzM2Fl
YzFjNTUzNWI3MGY3ZTM0NmQ2MDQ1M2Q4ZjMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3Bh
Z2Uvd3gvRXZlbnRIYW5kbGVyV3guY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2Uvd3gvRXZl
bnRIYW5kbGVyV3guY3BwCkBAIC04Miw2ICs4MiwxNCBAQCBib29sIEV2ZW50SGFuZGxlcjo6cGFz
c1doZWVsRXZlbnRUb1dpZGdldChjb25zdCBQbGF0Zm9ybVdoZWVsRXZlbnQmIGV2ZW50LCBXaWRn
ZQogICAgIHJldHVybiBzdGF0aWNfY2FzdDxGcmFtZVZpZXcqPih3aWRnZXQpLT5mcmFtZSgpLT5l
dmVudEhhbmRsZXIoKS0+aGFuZGxlV2hlZWxFdmVudChldmVudCk7CiB9CiAKKyNpZiBFTkFCTEUo
R0VTVFVSRV9FVkVOVFMpCitib29sIEV2ZW50SGFuZGxlcjo6cGFzc0dlc3R1cmVFdmVudFRvV2lk
Z2V0KGNvbnN0IFBsYXRmb3JtR2VzdHVyZUV2ZW50JiwgV2lkZ2V0KikKK3sKKyAgICBub3RJbXBs
ZW1lbnRlZCgpOyAKKyAgICByZXR1cm4gZmFsc2U7IAorfQorI2VuZGlmCisKIGJvb2wgRXZlbnRI
YW5kbGVyOjp0YWJzVG9BbGxGb3JtQ29udHJvbHMoS2V5Ym9hcmRFdmVudCogZXZlbnQpIGNvbnN0
IAogeyAKICAgICBub3RJbXBsZW1lbnRlZCgpOyAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL1Njcm9sbEFuaW1hdG9yLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1Nj
cm9sbEFuaW1hdG9yLmNwcAppbmRleCBmNzNjNWNjMDY0MzNjM2VhNmRkNTVhZTExM2MwMjk0NjI5
YjRhODg0Li4zYjZkMTY3MDA3MGRhNDNjODk5MjcyODEzMjBmMDVjZTE2YmM4OGE0IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxBbmltYXRvci5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vU2Nyb2xsQW5pbWF0b3IuY3BwCkBAIC0zNyw2ICszNywxMCBA
QAogI2luY2x1ZGUgPGFsZ29yaXRobT4KICNpbmNsdWRlIDx3dGYvUGFzc093blB0ci5oPgogCisj
aWYgRU5BQkxFKEdFU1RVUkVfUkVDT0dOSVpFUikgfHwgRU5BQkxFKEdFU1RVUkVfRVZFTlRTKQor
I2luY2x1ZGUgIlBsYXRmb3JtR2VzdHVyZUV2ZW50LmgiCisjZW5kaWYKKwogdXNpbmcgbmFtZXNw
YWNlIHN0ZDsKIAogbmFtZXNwYWNlIFdlYkNvcmUgewpAQCAtNjQsNiArNjgsNyBAQCBTY3JvbGxB
bmltYXRvcjo6flNjcm9sbEFuaW1hdG9yKCkKIAogYm9vbCBTY3JvbGxBbmltYXRvcjo6c2Nyb2xs
KFNjcm9sbGJhck9yaWVudGF0aW9uIG9yaWVudGF0aW9uLCBTY3JvbGxHcmFudWxhcml0eSwgZmxv
YXQgc3RlcCwgZmxvYXQgbXVsdGlwbGllcikKIHsKKyAgICByZWNvcmRHZXN0dXJlRXZlbnRQcm9j
ZXNzaW5nKEdlc3R1cmVUZXN0U2Nyb2xsKTsKICAgICBmbG9hdCogY3VycmVudFBvcyA9IChvcmll
bnRhdGlvbiA9PSBIb3Jpem9udGFsU2Nyb2xsYmFyKSA/ICZtX2N1cnJlbnRQb3NYIDogJm1fY3Vy
cmVudFBvc1k7CiAgICAgZmxvYXQgbmV3UG9zID0gc3RkOjptYXgoc3RkOjptaW4oKmN1cnJlbnRQ
b3MgKyAoc3RlcCAqIG11bHRpcGxpZXIpLCBzdGF0aWNfY2FzdDxmbG9hdD4obV9zY3JvbGxhYmxl
QXJlYS0+c2Nyb2xsU2l6ZShvcmllbnRhdGlvbikpKSwgMC4wZik7CiAgICAgaWYgKCpjdXJyZW50
UG9zID09IG5ld1BvcykKQEAgLTEyNiw4ICsxMzEsMzQgQEAgYm9vbCBTY3JvbGxBbmltYXRvcjo6
aGFuZGxlV2hlZWxFdmVudChjb25zdCBQbGF0Zm9ybVdoZWVsRXZlbnQmIGUpCiB9CiAKICNpZiBF
TkFCTEUoR0VTVFVSRV9FVkVOVFMpCi12b2lkIFNjcm9sbEFuaW1hdG9yOjpoYW5kbGVHZXN0dXJl
RXZlbnQoY29uc3QgUGxhdGZvcm1HZXN0dXJlRXZlbnQmKQordm9pZCBTY3JvbGxBbmltYXRvcjo6
aGFuZGxlR2VzdHVyZUV2ZW50KGNvbnN0IFBsYXRmb3JtR2VzdHVyZUV2ZW50JiBldmVudCkKIHsK
KyAgICBzd2l0Y2ggKGV2ZW50LnR5cGUoKSkgeworICAgIGNhc2UgUGxhdGZvcm1FdmVudDo6R2Vz
dHVyZVNjcm9sbEJlZ2luOgorICAgICAgICByZWNvcmRHZXN0dXJlRXZlbnRQcm9jZXNzaW5nKEdl
c3R1cmVUZXN0U2Nyb2xsQmVnaW4pOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFBsYXRmb3Jt
RXZlbnQ6Okdlc3R1cmVTY3JvbGxFbmQ6CisgICAgICAgIHJlY29yZEdlc3R1cmVFdmVudFByb2Nl
c3NpbmcoR2VzdHVyZVRlc3RTY3JvbGxFbmQpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFBs
YXRmb3JtRXZlbnQ6Okdlc3R1cmVTY3JvbGxVcGRhdGU6IHsKKyAgICAgICAgcmVjb3JkR2VzdHVy
ZUV2ZW50UHJvY2Vzc2luZyhHZXN0dXJlVGVzdFNjcm9sbFVwZGF0ZSk7CisgICAgICAgIEludFNp
emUgbWF4Rm9yd2FyZFNjcm9sbERlbHRhID0gbV9zY3JvbGxhYmxlQXJlYS0+bWF4aW11bVNjcm9s
bFBvc2l0aW9uKCkgLSBtX3Njcm9sbGFibGVBcmVhLT5zY3JvbGxQb3NpdGlvbigpOworICAgICAg
ICBJbnRTaXplIG1heEJhY2t3YXJkU2Nyb2xsRGVsdGEgPSBtX3Njcm9sbGFibGVBcmVhLT5zY3Jv
bGxQb3NpdGlvbigpIC0gbV9zY3JvbGxhYmxlQXJlYS0+bWluaW11bVNjcm9sbFBvc2l0aW9uKCk7
CisgICAgICAgIGZsb2F0IGRlbHRhWCA9IChldmVudC5kZWx0YVgoKSA8IDAuZikgPyBtYXgoZXZl
bnQuZGVsdGFYKCksIC1zdGF0aWNfY2FzdDxmbG9hdD4obWF4Rm9yd2FyZFNjcm9sbERlbHRhLndp
ZHRoKCkpKSA6IG1pbihldmVudC5kZWx0YVgoKSwgZmxvYXQobWF4QmFja3dhcmRTY3JvbGxEZWx0
YS53aWR0aCgpKSk7CisgICAgICAgIGZsb2F0IGRlbHRhWSA9IChldmVudC5kZWx0YVkoKSA8IDAu
ZikgPyBtYXgoZXZlbnQuZGVsdGFZKCksIC1zdGF0aWNfY2FzdDxmbG9hdD4obWF4Rm9yd2FyZFNj
cm9sbERlbHRhLmhlaWdodCgpKSkgOiBtaW4oZXZlbnQuZGVsdGFZKCksIGZsb2F0KG1heEJhY2t3
YXJkU2Nyb2xsRGVsdGEuaGVpZ2h0KCkpKTsKKworICAgICAgICBJbnRSZWN0IGNvbnRlbnRSZWN0
ID0gbV9zY3JvbGxhYmxlQXJlYS0+dmlzaWJsZUNvbnRlbnRSZWN0KHRydWUpOworICAgICAgICBG
bG9hdFBvaW50IG9mZnNldCA9IEZsb2F0UG9pbnQoY29udGVudFJlY3QueCgpIC0gZGVsdGFYLCBj
b250ZW50UmVjdC55KCkgLSBkZWx0YVkpOworICAgICAgICBzY3JvbGxUb09mZnNldFdpdGhvdXRB
bmltYXRpb24ob2Zmc2V0KTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorICAgIGNhc2UgUGxhdGZv
cm1FdmVudDo6R2VzdHVyZVRhcERvd246CisgICAgY2FzZSBQbGF0Zm9ybUV2ZW50OjpHZXN0dXJl
VGFwOgorICAgIGNhc2UgUGxhdGZvcm1FdmVudDo6R2VzdHVyZURvdWJsZVRhcDoKKyAgICAgICAg
YnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAg
fQogfQogI2VuZGlmCiAKQEAgLTE2OCw0ICsxOTksMzQgQEAgdm9pZCBTY3JvbGxBbmltYXRvcjo6
c2V0Wm9vbVBhcmFtZXRlcnNGb3JUZXN0KGZsb2F0IHNjYWxlLCBmbG9hdCB4LCBmbG9hdCB5KQog
ICAgIG5vdGlmeVpvb21DaGFuZ2VkKFpvb21BbmltYXRpb25Db250aW51aW5nKTsgLy8gRG9uJ3Qg
bGV0IHBhZ2UgcmUtc2NhbGUuCiB9CiAKK2ludCBTY3JvbGxBbmltYXRvcjo6Z2VzdHVyZUV2ZW50
VGVzdFJlY29yZCgpCit7CisgICAgaWYgKG1fY3VycmVudFpvb21TY2FsZSA+IDApCisgICAgICAg
IEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIGludCByZWNvcmQgPSBtX2N1cnJlbnRab29tVHJh
bnNYOworICAgIHJlc2V0Wm9vbSgpOworICAgIHJldHVybiByZWNvcmQ7Cit9CisKK3ZvaWQgU2Ny
b2xsQW5pbWF0b3I6OmVuYWJsZUdlc3R1cmVFdmVudFRlc3RSZWNvcmQoKQoreworICAgIC8vIE5P
VEU6IEdlc3R1cmUgc2Nyb2xsIGV2ZW50IGRlbGl2ZXJ5IHRlc3RpbmcgcmVxdWlyZXMgZGVmYXVs
dCB6b29tIGxldmVsLgorICAgIEFTU0VSVChtX2N1cnJlbnRab29tU2NhbGUgPT0gMSk7CisgICAg
QVNTRVJUKCFtX2N1cnJlbnRab29tVHJhbnNYKTsKKyAgICBBU1NFUlQoIW1fY3VycmVudFpvb21U
cmFuc1kpOworICAgIAorICAgIG1fY3VycmVudFpvb21TY2FsZSA9IC0xOworICAgIG1fY3VycmVu
dFpvb21UcmFuc1ggPSAwOworfQorCit2b2lkIFNjcm9sbEFuaW1hdG9yOjpyZWNvcmRHZXN0dXJl
RXZlbnRQcm9jZXNzaW5nKEdlc3R1cmVFdmVudFRlc3RTdGF0ZSBrZXkpCit7CisgICAgaWYgKG1f
Y3VycmVudFpvb21TY2FsZSA8IDApIHsKKyAgICAgICAgaW50IHJlY29yZCA9IG1fY3VycmVudFpv
b21UcmFuc1g7CisgICAgICAgIHJlY29yZCB8PSBrZXk7CisgICAgICAgIG1fY3VycmVudFpvb21U
cmFuc1ggPSByZWNvcmQ7CisgICAgfQorfQorCisKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1Njcm9sbEFuaW1hdG9yLmggYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxBbmltYXRvci5oCmluZGV4IDU3Njc0Mzk0NTJhMWIz
MDM0ZWFlNzFlOWQ4NGU5YjBjMTY0YTYyYzEuLjcwNWEzMzYyMGYzYzJlOWRhZjQ2ZTg5MDQwZTgw
ZWVlOThmMmZiZjMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1Njcm9sbEFu
aW1hdG9yLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU2Nyb2xsQW5pbWF0b3IuaApA
QCAtOTYsOSArOTYsMjAgQEAgcHVibGljOgogICAgIHZpcnR1YWwgdm9pZCByZXNldFpvb20oKTsK
ICAgICB2aXJ0dWFsIHZvaWQgc2V0Wm9vbVBhcmFtZXRlcnNGb3JUZXN0KGZsb2F0LCBmbG9hdCwg
ZmxvYXQpOwogCisjaWYgRU5BQkxFKEdFU1RVUkVfRVZFTlRTKQorICAgIC8vIE5PVEU6IE9ubHkg
Y2FsbGVkIGZyb20gSW50ZXJuYWxzIGZvciB0ZXN0aW5nLgorICAgIGludCBnZXN0dXJlRXZlbnRU
ZXN0UmVjb3JkKCk7CisgICAgdm9pZCBlbmFibGVHZXN0dXJlRXZlbnRUZXN0UmVjb3JkKCk7Cisj
ZW5kaWYKKwogcHJvdGVjdGVkOgogICAgIFNjcm9sbEFuaW1hdG9yKFNjcm9sbGFibGVBcmVhKik7
CiAKKyNpZiBFTkFCTEUoR0VTVFVSRV9FVkVOVFMpCisgICAgZW51bSBHZXN0dXJlRXZlbnRUZXN0
U3RhdGUgeyBHZXN0dXJlVGVzdFNjcm9sbEJlZ2luID0gMSwgR2VzdHVyZVRlc3RTY3JvbGxVcGRh
dGUgPSAyLCBHZXN0dXJlVGVzdFNjcm9sbEVuZCA9IDQgLCBHZXN0dXJlVGVzdFNjcm9sbCA9IDh9
OworICAgIHZvaWQgcmVjb3JkR2VzdHVyZUV2ZW50UHJvY2Vzc2luZyhHZXN0dXJlRXZlbnRUZXN0
U3RhdGUpOworI2VuZGlmCisKICAgICB2aXJ0dWFsIHZvaWQgbm90aWZ5UG9zaXRpb25DaGFuZ2Vk
KCk7CiAgICAgdmlydHVhbCB2b2lkIG5vdGlmeVpvb21DaGFuZ2VkKFpvb21BbmltYXRpb25TdGF0
ZSk7CiAKQEAgLTEwOSw2ICsxMjAsNyBAQCBwcm90ZWN0ZWQ6CiAgICAgZmxvYXQgbV9jdXJyZW50
Wm9vbVNjYWxlOwogICAgIGZsb2F0IG1fY3VycmVudFpvb21UcmFuc1g7CiAgICAgZmxvYXQgbV9j
dXJyZW50Wm9vbVRyYW5zWTsKKwogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU2Nyb2xsQW5pbWF0b3JOb25lLmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL1Njcm9sbEFuaW1hdG9yTm9uZS5jcHAKaW5kZXggM2QxNDcy
YjM4MTY3YzJhMjU2NDIyMTQ0OWMzMTNkOTJiYjU1MTQ3OS4uNTljNGE5ZmNmNzg2NDA5YTg4ODky
ZTQwMmYwYWIxODAyYTcxMDJiYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
U2Nyb2xsQW5pbWF0b3JOb25lLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9TY3Jv
bGxBbmltYXRvck5vbmUuY3BwCkBAIC01MTksMTAgKzUxOSwxNiBAQCB2b2lkIFNjcm9sbEFuaW1h
dG9yTm9uZTo6aGFuZGxlR2VzdHVyZUV2ZW50KGNvbnN0IFBsYXRmb3JtR2VzdHVyZUV2ZW50JiBw
Z2UpCiAgICAgY2FzZSBQbGF0Zm9ybUV2ZW50OjpHZXN0dXJlRG91YmxlVGFwOgogICAgICAgICB6
b29tKHBnZSk7CiAgICAgICAgIGJyZWFrOwotCisgICAgY2FzZSBQbGF0Zm9ybUV2ZW50OjpHZXN0
dXJlU2Nyb2xsQmVnaW46CisgICAgY2FzZSBQbGF0Zm9ybUV2ZW50OjpHZXN0dXJlU2Nyb2xsRW5k
OgorICAgIGNhc2UgUGxhdGZvcm1FdmVudDo6R2VzdHVyZVNjcm9sbFVwZGF0ZTogCisgICAgY2Fz
ZSBQbGF0Zm9ybUV2ZW50OjpHZXN0dXJlVGFwRG93bjoKKyAgICBjYXNlIFBsYXRmb3JtRXZlbnQ6
Okdlc3R1cmVUYXA6CisgICAgICAgIFNjcm9sbEFuaW1hdG9yOjpoYW5kbGVHZXN0dXJlRXZlbnQo
cGdlKTsKKyAgICAgICAgYnJlYWs7CiAgICAgZGVmYXVsdDoKLSAgICAgICAgLy8gVE9ETzogYWRk
IGFueSBvdGhlciBldmVudCB0eXBlcyB3ZSBzaG91bGQgaGFuZGxlCi0gICAgICAgIHsgfQorICAg
ICAgICAvLyBGSVhNRTogYWRkIGFueSBvdGhlciBldmVudCB0eXBlcyB3ZSBzaG91bGQgaGFuZGxl
LgorICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICB9CiB9CiAjZW5kaWYKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCb3guY3BwIGIvU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL1JlbmRlckJveC5jcHAKaW5kZXggNDBhZGYzODdlNTcwY2ZiYjg2YjU1
YTI1NDNlZmNhMDljOTQ4ZTAwYS4uOGRmZjQ0NDBkZjNhOWI3MmVhNzI5MDY1ODNkMzFiYmFhMTMy
YjI4MiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJveC5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJveC5jcHAKQEAgLTY3Myw2ICs2
NzMsMjMgQEAgYm9vbCBSZW5kZXJCb3g6OnNjcm9sbChTY3JvbGxEaXJlY3Rpb24gZGlyZWN0aW9u
LCBTY3JvbGxHcmFudWxhcml0eSBncmFudWxhcml0eSwKICAgICByZXR1cm4gZmFsc2U7CiB9CiAK
KyNpZiBFTkFCTEUoR0VTVFVSRV9FVkVOVFMpCitib29sIFJlbmRlckJveDo6Z2VzdHVyZShjb25z
dCBQbGF0Zm9ybUdlc3R1cmVFdmVudCYgZXZlbnQpCit7CisgICAgLy8gZnByaW50ZihzdGRlcnIs
ICJSZW5kZXJCb3g6Omdlc3R1cmUgJWx4XG4iLCAodW5zaWduZWQgbG9uZyl0aGlzKTsKKyAgICBS
ZW5kZXJMYXllciogcmVuZGVyTGF5ZXIgPSBsYXllcigpOworICAgIGlmIChyZW5kZXJMYXllciAm
JiAocmVuZGVyTGF5ZXItPnZlcnRpY2FsU2Nyb2xsYmFyKCkgfHwgcmVuZGVyTGF5ZXItPmhvcml6
b250YWxTY3JvbGxiYXIoKSkpIHsKKyAgICAgIHJlbmRlckxheWVyLT5oYW5kbGVHZXN0dXJlRXZl
bnQoZXZlbnQpOworICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorCisgICAgUmVuZGVyQmxvY2sq
IGIgPSBjb250YWluaW5nQmxvY2soKTsKKyAgICBpZiAoYiAmJiAhYi0+aXNSZW5kZXJWaWV3KCkp
CisgICAgICAgIHJldHVybiBiLT5nZXN0dXJlKGV2ZW50KTsKKyAgICByZXR1cm4gZmFsc2U7Cit9
CisjZW5kaWYKKwogYm9vbCBSZW5kZXJCb3g6OmxvZ2ljYWxTY3JvbGwoU2Nyb2xsTG9naWNhbERp
cmVjdGlvbiBkaXJlY3Rpb24sIFNjcm9sbEdyYW51bGFyaXR5IGdyYW51bGFyaXR5LCBmbG9hdCBt
dWx0aXBsaWVyLCBOb2RlKiogc3RvcE5vZGUpCiB7CiAgICAgYm9vbCBzY3JvbGxlZCA9IGZhbHNl
OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJveC5oIGIvU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJveC5oCmluZGV4IGQ3Mjc1NGE1NGRhOGI0OTc5
YmE1YzZhYTVmYWExM2MzOWMzYzRlMzguLjZlNzk2ZWFkOGZjNTUyNGFhZmYwYmIxOGY5ZDBjYzg3
YmJiNDdhZTcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCb3gu
aAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQm94LmgKQEAgLTMxLDYgKzMx
LDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiBjbGFzcyBSZW5kZXJCb3hSZWdpb25JbmZvOwog
Y2xhc3MgUmVuZGVyUmVnaW9uOworY2xhc3MgUGxhdGZvcm1HZXN0dXJlRXZlbnQ7CiBzdHJ1Y3Qg
UGFpbnRJbmZvOwogCiBlbnVtIExvZ2ljYWxXaWR0aFR5cGUgeyBMb2dpY2FsV2lkdGgsIE1pbkxv
Z2ljYWxXaWR0aCwgTWF4TG9naWNhbFdpZHRoIH07CkBAIC00MzMsNiArNDM0LDEwIEBAIHB1Ymxp
YzoKICAgICB2aXJ0dWFsIGJvb2wgbmVlZHNQcmVmZXJyZWRXaWR0aHNSZWNhbGN1bGF0aW9uKCkg
Y29uc3Q7CiAgICAgdmlydHVhbCB2b2lkIGNvbXB1dGVJbnRyaW5zaWNSYXRpb0luZm9ybWF0aW9u
KEZsb2F0U2l6ZSYgLyogaW50cmluc2ljUmF0aW8gKi8sIGJvb2wmIC8qIGlzUGVyY2VudGFnZUlu
dHJpbnNpY1NpemUgKi8pIGNvbnN0IHsgfQogCisjaWYgRU5BQkxFKEdFU1RVUkVfRVZFTlRTKQor
ICAgIHZpcnR1YWwgYm9vbCBnZXN0dXJlKGNvbnN0IFBsYXRmb3JtR2VzdHVyZUV2ZW50Jik7Cisj
ZW5kaWYKKwogcHJvdGVjdGVkOgogICAgIHZpcnR1YWwgdm9pZCB3aWxsQmVEZXN0cm95ZWQoKTsK
IApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvdGVzdGluZy9JbnRlcm5hbHMuY3BwIGIvU291
cmNlL1dlYkNvcmUvdGVzdGluZy9JbnRlcm5hbHMuY3BwCmluZGV4IDc4M2MzODA1NjkzYWVjNjNk
NGQ5ODViZDc4YzM4NGZkNDQ4NGM0ZWMuLjlmYWQ1YzI1NTg3NWEyNTdmNmM1ZjJkNzQ1NTkzM2Fk
OTFjYmE0MDIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3Rlc3RpbmcvSW50ZXJuYWxzLmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS90ZXN0aW5nL0ludGVybmFscy5jcHAKQEAgLTQzLDggKzQz
LDEyIEBACiAjaW5jbHVkZSAiTm9kZVJlbmRlcmluZ0NvbnRleHQuaCIKICNpbmNsdWRlICJQYWdl
LmgiCiAjaW5jbHVkZSAiUmFuZ2UuaCIKKyNpbmNsdWRlICJSZW5kZXJCbG9jay5oIgorI2luY2x1
ZGUgIlJlbmRlckJveE1vZGVsT2JqZWN0LmgiCisjaW5jbHVkZSAiUmVuZGVyTGF5ZXIuaCIKICNp
bmNsdWRlICJSZW5kZXJPYmplY3QuaCIKICNpbmNsdWRlICJSZW5kZXJUcmVlQXNUZXh0LmgiCisj
aW5jbHVkZSAiUmVuZGVyVmlldy5oIgogI2luY2x1ZGUgIlNldHRpbmdzLmgiCiAjaW5jbHVkZSAi
U2hhZG93Q29udGVudEVsZW1lbnQuaCIKICNpbmNsdWRlICJTaGFkb3dSb290LmgiCkBAIC01ODYs
NiArNTkwLDIwNSBAQCB1bnNpZ25lZCBJbnRlcm5hbHM6Omxlbmd0aEZyb21SYW5nZShFbGVtZW50
KiBzY29wZSwgY29uc3QgUmFuZ2UqIHJhbmdlLCBFeGNlcHRpbwogICAgIHJldHVybiBsZW5ndGg7
CiB9CiAKKwordm9pZCBJbnRlcm5hbHM6OmVuYWJsZUdlc3R1cmVTY3JvbGxFdmVudFJlY29yZChF
bGVtZW50KiBlbGVtZW50LCBFeGNlcHRpb25Db2RlJiBlYykKK3sKKyNpZiBFTkFCTEUoR0VTVFVS
RV9FVkVOVFMpCisgICAgaWYgKCFlbGVtZW50KSB7CisgICAgICAgIGVjID0gSU5WQUxJRF9BQ0NF
U1NfRVJSOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgUmVuZGVyT2JqZWN0KiByZW5k
ZXJlciA9IGVsZW1lbnQtPnJlbmRlcmVyKCk7CisgICAgaWYgKCFyZW5kZXJlcikgeworICAgICAg
ICBlYyA9IElOVkFMSURfTk9ERV9UWVBFX0VSUjsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAg
ICAKKyAgICBSZW5kZXJCb3gqIGJveCA9IHJlbmRlcmVyLT5lbmNsb3NpbmdCb3goKTsKKyAgICB3
aGlsZSAoYm94KSB7CisgICAgICAgIFJlbmRlckxheWVyKiByZW5kZXJMYXllciA9IGJveC0+bGF5
ZXIoKTsKKyAgICAgICAgaWYgKHJlbmRlckxheWVyKSB7CisgICAgICAgICAgIHJlbmRlckxheWVy
LT5zY3JvbGxBbmltYXRvcigpLT5lbmFibGVHZXN0dXJlRXZlbnRUZXN0UmVjb3JkKCk7CisgICAg
ICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAgIFJlbmRlckJsb2NrKiBibG9jayA9
IGJveC0+Y29udGFpbmluZ0Jsb2NrKCk7CisgICAgICAgIGlmICghYmxvY2spIHsKKyAgICAgICAg
ICAgIGVjID0gSU5WQUxJRF9OT0RFX1RZUEVfRVJSOworICAgICAgICAgICAgcmV0dXJuOworICAg
ICAgICB9CisKKyAgICAgICAgaWYgKGJsb2NrLT5pc1JlbmRlclZpZXcoKSkKKyAgICAgICAgICAg
IHJldHVybiB0b1JlbmRlclZpZXcoYmxvY2spLT5mcmFtZVZpZXcoKS0+c2Nyb2xsQW5pbWF0b3Io
KS0+ZW5hYmxlR2VzdHVyZUV2ZW50VGVzdFJlY29yZCgpOworICAgICAgICBib3ggPSBibG9jazsK
KyAgICB9ICAgICAgICAKKyAgICBlYyA9IElOVkFMSURfTk9ERV9UWVBFX0VSUjsKKyAgICByZXR1
cm47CisjZWxzZQorICAgIFVOVVNFRF9QQVJBTShlbGVtZW50KTsKKyAgICBlYyA9IElOVkFMSURf
QUNDRVNTX0VSUjsKKyAgICByZXR1cm47CisjZW5kaWYKK30KKworaW50IEludGVybmFsczo6cmVj
b3JkT2ZHZXN0dXJlU2Nyb2xsRXZlbnRzKEVsZW1lbnQqIGVsZW1lbnQsIEV4Y2VwdGlvbkNvZGUm
IGVjKQoreworI2lmIEVOQUJMRShHRVNUVVJFX0VWRU5UUykKKyAgICBpZiAoIWVsZW1lbnQpIHsK
KyAgICAgICAgZWMgPSBJTlZBTElEX0FDQ0VTU19FUlI7CisgICAgICAgIHJldHVybiAtMTsKKyAg
ICB9CisKKyAgICBSZW5kZXJPYmplY3QqIHJlbmRlcmVyID0gZWxlbWVudC0+cmVuZGVyZXIoKTsK
KyAgICBpZiAoIXJlbmRlcmVyKSB7CisgICAgICAgIGVjID0gSU5WQUxJRF9OT0RFX1RZUEVfRVJS
OworICAgICAgICByZXR1cm4gLTE7CisgICAgfQorICAgIAorICAgIFJlbmRlckJveCogYm94ID0g
cmVuZGVyZXItPmVuY2xvc2luZ0JveCgpOworICAgIHdoaWxlIChib3gpIHsKKyAgICAgICAgUmVu
ZGVyTGF5ZXIqIHJlbmRlckxheWVyID0gYm94LT5sYXllcigpOworICAgICAgICBpZiAocmVuZGVy
TGF5ZXIpCisgICAgICAgICAgIHJldHVybiByZW5kZXJMYXllci0+c2Nyb2xsQW5pbWF0b3IoKS0+
Z2VzdHVyZUV2ZW50VGVzdFJlY29yZCgpOworCisgICAgICAgIFJlbmRlckJsb2NrKiBibG9jayA9
IGJveC0+Y29udGFpbmluZ0Jsb2NrKCk7CisgICAgICAgIGlmICghYmxvY2spIHsKKyAgICAgICAg
ICAgIGVjID0gSU5WQUxJRF9OT0RFX1RZUEVfRVJSOworICAgICAgICAgICAgcmV0dXJuIC0xOwor
ICAgICAgICB9CisKKyAgICAgICAgaWYgKGJsb2NrLT5pc1JlbmRlclZpZXcoKSkKKyAgICAgICAg
ICAgIHJldHVybiB0b1JlbmRlclZpZXcoYmxvY2spLT5mcmFtZVZpZXcoKS0+c2Nyb2xsQW5pbWF0
b3IoKS0+Z2VzdHVyZUV2ZW50VGVzdFJlY29yZCgpOworICAgICAgICBib3ggPSBibG9jazsKKyAg
ICB9ICAgICAgICAKKyAgICBlYyA9IElOVkFMSURfTk9ERV9UWVBFX0VSUjsKKyAgICByZXR1cm4g
LTE7CisjZWxzZQorICAgIFVOVVNFRF9QQVJBTShlbGVtZW50KTsKKyAgICBlYyA9IElOVkFMSURf
QUNDRVNTX0VSUjsKKyAgICByZXR1cm4gLTE7CisjZW5kaWYKK30KKwordm9pZCBJbnRlcm5hbHM6
OmVuYWJsZUdlc3R1cmVTY3JvbGxFdmVudFJlY29yZChEb2N1bWVudCogZG9jdW1lbnQsIEV4Y2Vw
dGlvbkNvZGUmIGVjKQoreworI2lmIEVOQUJMRShHRVNUVVJFX0VWRU5UUykKKyAgICBpZiAoIWRv
Y3VtZW50KSB7CisgICAgICAgIGVjID0gSU5WQUxJRF9BQ0NFU1NfRVJSOworICAgICAgICByZXR1
cm47CisgICAgfQorCisgICAgRnJhbWVWaWV3KiBmcmFtZSA9IGRvY3VtZW50LT52aWV3KCk7Cisg
ICAgaWYgKCFmcmFtZSkgeworICAgICAgICBlYyA9IElOVkFMSURfTk9ERV9UWVBFX0VSUjsKKyAg
ICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlmICghZnJhbWUtPnNjcm9sbEFuaW1hdG9yKCkp
CisgICAgICBlYyA9IElOVkFMSURfTk9ERV9UWVBFX0VSUjsKKworICAgIAorICAgIGZyYW1lLT5z
Y3JvbGxBbmltYXRvcigpLT5lbmFibGVHZXN0dXJlRXZlbnRUZXN0UmVjb3JkKCk7CisgICAgcmV0
dXJuOworI2Vsc2UKKyAgICBVTlVTRURfUEFSQU0oZG9jdW1lbnQpOworICAgIGVjID0gSU5WQUxJ
RF9BQ0NFU1NfRVJSOworICAgIHJldHVybjsKKyNlbmRpZgorfQorCitpbnQgSW50ZXJuYWxzOjpy
ZWNvcmRPZkdlc3R1cmVTY3JvbGxFdmVudHMoRG9jdW1lbnQqIGRvY3VtZW50LCBFeGNlcHRpb25D
b2RlJiBlYykKK3sKKyNpZiBFTkFCTEUoR0VTVFVSRV9FVkVOVFMpCisgICAgaWYgKCFkb2N1bWVu
dCkgeworICAgICAgICBlYyA9IElOVkFMSURfQUNDRVNTX0VSUjsKKyAgICAgICAgcmV0dXJuIC0x
OworICAgIH0KKworICAgIEZyYW1lVmlldyogZnJhbWUgPSBkb2N1bWVudC0+dmlldygpOworICAg
IGlmICghZnJhbWUpIHsKKyAgICAgICAgZWMgPSBJTlZBTElEX05PREVfVFlQRV9FUlI7CisgICAg
ICAgIHJldHVybiAtMTsKKyAgICB9CisKKyAgICBpZiAoIWZyYW1lLT5zY3JvbGxBbmltYXRvcigp
KQorICAgICAgZWMgPSBJTlZBTElEX05PREVfVFlQRV9FUlI7CisKKyAgICByZXR1cm4gZnJhbWUt
PnNjcm9sbEFuaW1hdG9yKCktPmdlc3R1cmVFdmVudFRlc3RSZWNvcmQoKTsKKyNlbHNlCisgICAg
VU5VU0VEX1BBUkFNKGRvY3VtZW50KTsKKyAgICBlYyA9IElOVkFMSURfQUNDRVNTX0VSUjsKKyAg
ICByZXR1cm4gLTE7CisjZW5kaWYKK30KKworI2lmIEVOQUJMRShHRVNUVVJFX0VWRU5UUykKK3N0
YXRpYwordm9pZCBzZW5kR2VzdHVyZUV2ZW50KERvY3VtZW50KiBkb2N1bWVudCwgUGxhdGZvcm1F
dmVudDo6VHlwZSB0eXBlLCBjb25zdCBmbG9hdCBwb3NYLCBjb25zdCBmbG9hdCBwb3NZLCBjb25z
dCBmbG9hdCBkZWx0YVgsIGNvbnN0IGZsb2F0IGRlbHRhWSwgRXhjZXB0aW9uQ29kZSYgZWMpCit7
CisgICAgaWYgKCFkb2N1bWVudCkgeworICAgICAgICBlYyA9IElOVkFMSURfQUNDRVNTX0VSUjsK
KyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBGcmFtZSogZnJhbWUgPSBkb2N1bWVudC0+ZnJh
bWUoKTsKKyAgICBpZiAoIWZyYW1lKSB7CisgICAgICAgIGVjID0gSU5WQUxJRF9OT0RFX1RZUEVf
RVJSOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgSW50UG9pbnQgcG9zaXRpb24ocG9z
WCwgcG9zWSk7CisgICAgUGxhdGZvcm1HZXN0dXJlRXZlbnQgZ2VzdHVyZUV2ZW50KHR5cGUsIHBv
c2l0aW9uLCBwb3NpdGlvbiwgMC4sIGRlbHRhWCwgZGVsdGFZLCBmYWxzZSwgZmFsc2UsIGZhbHNl
LCBmYWxzZSk7CisgICAgZnJhbWUtPmV2ZW50SGFuZGxlcigpLT5oYW5kbGVHZXN0dXJlRXZlbnQo
Z2VzdHVyZUV2ZW50KTsKK30KKyNlbmRpZgorCitpbnQgSW50ZXJuYWxzOjpzZW5kU2Nyb2xsQmVn
aW5HZXN0dXJlRXZlbnQoRG9jdW1lbnQqIGRvY3VtZW50LCBjb25zdCBmbG9hdCBwb3NYLCBjb25z
dCBmbG9hdCBwb3NZLCBFeGNlcHRpb25Db2RlJiBlYykKK3sKKyNpZiBFTkFCTEUoR0VTVFVSRV9F
VkVOVFMpCisgICAgc2VuZEdlc3R1cmVFdmVudChkb2N1bWVudCwgUGxhdGZvcm1FdmVudDo6R2Vz
dHVyZVNjcm9sbEJlZ2luLCBwb3NYLCBwb3NZLCAwLmYsIDAuZiwgZWMpOworICAgIHJldHVybiAw
OworI2Vsc2UKKyAgICBVTlVTRURfUEFSQU0oZG9jdW1lbnQpOworICAgIFVOVVNFRF9QQVJBTShw
b3NYKTsKKyAgICBVTlVTRURfUEFSQU0ocG9zWSk7CisgICAgZWMgPSBJTlZBTElEX0FDQ0VTU19F
UlI7CisgICAgcmV0dXJuIC0xOworI2VuZGlmCit9CisKK2ludCBJbnRlcm5hbHM6OnNlbmRTY3Jv
bGxVcGRhdGVHZXN0dXJlRXZlbnQoRG9jdW1lbnQqIGRvY3VtZW50LCBjb25zdCBmbG9hdCBwb3NY
LCBjb25zdCBmbG9hdCBwb3NZLCBjb25zdCBmbG9hdCBkZWx0YVgsIGNvbnN0IGZsb2F0IGRlbHRh
WSwgRXhjZXB0aW9uQ29kZSYgZWMpCit7CisjaWYgRU5BQkxFKEdFU1RVUkVfRVZFTlRTKQorICAg
IHNlbmRHZXN0dXJlRXZlbnQoZG9jdW1lbnQsIFBsYXRmb3JtRXZlbnQ6Okdlc3R1cmVTY3JvbGxV
cGRhdGUsIHBvc1gsIHBvc1ksIGRlbHRhWCwgZGVsdGFZLCBlYyk7CisgICAgcmV0dXJuIDA7Cisj
ZWxzZQorICAgIFVOVVNFRF9QQVJBTShkb2N1bWVudCk7CisgICAgVU5VU0VEX1BBUkFNKHBvc1gp
OworICAgIFVOVVNFRF9QQVJBTShwb3NZKTsKKyAgICBVTlVTRURfUEFSQU0oZGVsdGFYKTsKKyAg
ICBVTlVTRURfUEFSQU0oZGVsdGFZKTsKKyAgICBlYyA9IElOVkFMSURfQUNDRVNTX0VSUjsKKyAg
ICByZXR1cm4gLTE7CisjZW5kaWYKK30KKworaW50IEludGVybmFsczo6c2VuZFNjcm9sbEVuZEdl
c3R1cmVFdmVudChEb2N1bWVudCogZG9jdW1lbnQsIGNvbnN0IGZsb2F0IHBvc1gsIGNvbnN0IGZs
b2F0IHBvc1ksIGNvbnN0IGZsb2F0IGRlbHRhWCwgY29uc3QgZmxvYXQgZGVsdGFZLCBFeGNlcHRp
b25Db2RlJiBlYykKK3sKKyNpZiBFTkFCTEUoR0VTVFVSRV9FVkVOVFMpCisgICAgc2VuZEdlc3R1
cmVFdmVudChkb2N1bWVudCwgUGxhdGZvcm1FdmVudDo6R2VzdHVyZVNjcm9sbEVuZCwgcG9zWCwg
cG9zWSwgZGVsdGFYLCBkZWx0YVksIGVjKTsKKyAgICByZXR1cm4gMDsKKyNlbHNlCisgICAgVU5V
U0VEX1BBUkFNKGRvY3VtZW50KTsKKyAgICBVTlVTRURfUEFSQU0ocG9zWCk7CisgICAgVU5VU0VE
X1BBUkFNKHBvc1kpOworICAgIFVOVVNFRF9QQVJBTShkZWx0YVgpOworICAgIFVOVVNFRF9QQVJB
TShkZWx0YVkpOworICAgIGVjID0gSU5WQUxJRF9BQ0NFU1NfRVJSOworICAgIHJldHVybiAtMTsK
KyNlbmRpZgorfQorCiB2b2lkIEludGVybmFsczo6c2V0U2hvdWxkTGF5b3V0Rml4ZWRFbGVtZW50
c1JlbGF0aXZlVG9GcmFtZShEb2N1bWVudCogZG9jdW1lbnQsIGJvb2wgZW5hYmxlZCwgRXhjZXB0
aW9uQ29kZSYgZWMpCiB7CiAgICAgaWYgKCFkb2N1bWVudCB8fCAhZG9jdW1lbnQtPnZpZXcoKSkg
ewpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvdGVzdGluZy9JbnRlcm5hbHMuaCBiL1NvdXJj
ZS9XZWJDb3JlL3Rlc3RpbmcvSW50ZXJuYWxzLmgKaW5kZXggZWQ0NzM3MDU1Yjk5MzgzZGE5YjI4
MDIxYWYzZjY5NTljNjFkMzVmNy4uODM2ZTFhMGIyYmY5NjBjMjViM2RiNTIyZTBlOTJiMzAxYjVl
MGM4ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvdGVzdGluZy9JbnRlcm5hbHMuaAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS90ZXN0aW5nL0ludGVybmFscy5oCkBAIC0xMTksNiArMTE5LDE1IEBA
IHB1YmxpYzoKIAogICAgIHN0YXRpYyBjb25zdCBjaGFyKiBpbnRlcm5hbHNJZDsKIAorICAgIHZv
aWQgZW5hYmxlR2VzdHVyZVNjcm9sbEV2ZW50UmVjb3JkKEVsZW1lbnQqLCBFeGNlcHRpb25Db2Rl
Jik7CisgICAgaW50IHJlY29yZE9mR2VzdHVyZVNjcm9sbEV2ZW50cyhFbGVtZW50KiwgRXhjZXB0
aW9uQ29kZSYpOworICAgIHZvaWQgZW5hYmxlR2VzdHVyZVNjcm9sbEV2ZW50UmVjb3JkKERvY3Vt
ZW50KiwgRXhjZXB0aW9uQ29kZSYpOworICAgIGludCByZWNvcmRPZkdlc3R1cmVTY3JvbGxFdmVu
dHMoRG9jdW1lbnQqLCBFeGNlcHRpb25Db2RlJik7CisKKyAgICBpbnQgc2VuZFNjcm9sbEJlZ2lu
R2VzdHVyZUV2ZW50KERvY3VtZW50KiwgY29uc3QgZmxvYXQgcG9zWCwgY29uc3QgZmxvYXQgcG9z
WSwgRXhjZXB0aW9uQ29kZSYpOworICAgIGludCBzZW5kU2Nyb2xsVXBkYXRlR2VzdHVyZUV2ZW50
KERvY3VtZW50KiwgY29uc3QgZmxvYXQgcG9zWCwgY29uc3QgZmxvYXQgcG9zWSwgY29uc3QgZmxv
YXQgZGVsdGFYLCBjb25zdCBmbG9hdCBkZWx0YVksIEV4Y2VwdGlvbkNvZGUmKTsKKyAgICBpbnQg
c2VuZFNjcm9sbEVuZEdlc3R1cmVFdmVudChEb2N1bWVudCosIGNvbnN0IGZsb2F0IHBvc1gsIGNv
bnN0IGZsb2F0IHBvc1ksIGNvbnN0IGZsb2F0IGRlbHRhWCwgY29uc3QgZmxvYXQgZGVsdGFZLCBF
eGNlcHRpb25Db2RlJik7CisKIHByaXZhdGU6CiAgICAgSW50ZXJuYWxzKCk7CiAKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3Rlc3RpbmcvSW50ZXJuYWxzLmlkbCBiL1NvdXJjZS9XZWJDb3Jl
L3Rlc3RpbmcvSW50ZXJuYWxzLmlkbAppbmRleCBmNTZkMWFmNzRhOGUzNWRkNDdiZDRlNmM0OWYx
MjVlN2VhYWMzYTU1Li43MjMyMjE0NmZjODA2NTQyMWNmN2U4NTZhYWI0YjI1Njc4NzJlNzhmIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS90ZXN0aW5nL0ludGVybmFscy5pZGwKKysrIGIvU291
cmNlL1dlYkNvcmUvdGVzdGluZy9JbnRlcm5hbHMuaWRsCkBAIC03Nyw2ICs3NywxNSBAQCBtb2R1
bGUgd2luZG93IHsKICAgICAgICAgdW5zaWduZWQgbG9uZyBsb2NhdGlvbkZyb21SYW5nZShpbiBF
bGVtZW50IHNjb3BlLCBpbiBSYW5nZSByYW5nZSkgcmFpc2VzIChET01FeGNlcHRpb24pOwogICAg
ICAgICB1bnNpZ25lZCBsb25nIGxlbmd0aEZyb21SYW5nZShpbiBFbGVtZW50IHNjb3BlLCBpbiBS
YW5nZSByYW5nZSkgcmFpc2VzIChET01FeGNlcHRpb24pOwogCisgICAgICAgIHZvaWQgZW5hYmxl
R2VzdHVyZVNjcm9sbEV2ZW50UmVjb3JkKGluIEVsZW1lbnQgdGFyZ2V0KSByYWlzZXMoRE9NRXhj
ZXB0aW9uKTsKKyAgICAgICAgaW50IHJlY29yZE9mR2VzdHVyZVNjcm9sbEV2ZW50cyhpbiBFbGVt
ZW50IHRhcmdldCkgcmFpc2VzKERPTUV4Y2VwdGlvbik7CisgICAgICAgIHZvaWQgZW5hYmxlR2Vz
dHVyZVNjcm9sbEV2ZW50UmVjb3JkKGluIERvY3VtZW50IGRvY3VtZW50KSByYWlzZXMoRE9NRXhj
ZXB0aW9uKTsKKyAgICAgICAgaW50IHJlY29yZE9mR2VzdHVyZVNjcm9sbEV2ZW50cyhpbiBEb2N1
bWVudCBkb2N1bWVudCkgcmFpc2VzKERPTUV4Y2VwdGlvbik7CisKKyAgICAgICAgaW50IHNlbmRT
Y3JvbGxCZWdpbkdlc3R1cmVFdmVudChpbiBEb2N1bWVudCBkb2N1bWVudCwgaW4gZmxvYXQgcG9z
WCwgaW4gZmxvYXQgcG9zWSkgcmFpc2VzKERPTUV4Y2VwdGlvbik7CisgICAgICAgIGludCBzZW5k
U2Nyb2xsVXBkYXRlR2VzdHVyZUV2ZW50KGluIERvY3VtZW50IGRvY3VtZW50LCBpbiBmbG9hdCBw
b3NYLCBpbiBmbG9hdCBwb3NZLCBpbiBmbG9hdCBkZWx0YVgsIGluIGZsb2F0IGRlbHRhWSkgcmFp
c2VzKERPTUV4Y2VwdGlvbik7CisgICAgICAgIGludCBzZW5kU2Nyb2xsRW5kR2VzdHVyZUV2ZW50
KGluIERvY3VtZW50IGRvY3VtZW50LCBpbiBmbG9hdCBwb3NYLCBpbiBmbG9hdCBwb3NZLCBpbiBm
bG9hdCBkZWx0YVgsIGluIGZsb2F0IGRlbHRhWSkgcmFpc2VzKERPTUV4Y2VwdGlvbik7CisKICAg
ICAgICAgdm9pZCBzZXRTaG91bGRMYXlvdXRGaXhlZEVsZW1lbnRzUmVsYXRpdmVUb0ZyYW1lKGlu
IERvY3VtZW50IGRvY3VtZW50LCBpbiBib29sZWFuIGVuYWJsZWQpIHJhaXNlcyhET01FeGNlcHRp
b24pOwogICAgICAgICB2b2lkIHNldFVuaWZpZWRUZXh0Q2hlY2tpbmdFbmFibGVkKGluIERvY3Vt
ZW50IGRvY3VtZW50LCBpbiBib29sZWFuIGVuYWJsZWQpIHJhaXNlcyAoRE9NRXhjZXB0aW9uKTsK
ICAgICAgICAgYm9vbGVhbiB1bmlmaWVkVGV4dENoZWNraW5nRW5hYmxlZChpbiBEb2N1bWVudCBk
b2N1bWVudCkgcmFpc2VzIChET01FeGNlcHRpb24pOwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMv
Q2hhbmdlTG9nIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCmluZGV4IDJiZmI1MjMzMDhkNDM4MTBi
NGRlMWI0NGU5ZmQxZWZjZTllNDI2NjkuLmY2Njc0NTIzMWRjNGQ5NjQxZmVhMWY4YWM2OWQ2OWI0
ZDFkNGViNDIgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL0NoYW5nZUxvZworKysgYi9MYXlvdXRU
ZXN0cy9DaGFuZ2VMb2cKQEAgLTEsMyArMSwyNCBAQAorMjAxMi0wMS0wNSAgUm9iZXJ0IEtyb2Vn
ZXIgIDxyamtyb2VnZUBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgUGxhdGZvcm1HZXN0dXJlRXZl
bnQ6OmhhbmRsZUdlc3R1cmVFdmVudCBzaG91bGQgaGl0IHRlc3Qgd2hpbGUgZGlzcGF0Y2hpbmcg
UGxhdGZvcm1FdmVudDo6R2VzdHVyZVNjcm9sbCogZXZlbnRzLgorICAgICAgICBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9Njc4MjIKKworICAgICAgICBUZXN0cyB0byB2
ZXJpZnkgdGhhdCB0aGUgUGxhdGZvcm1FdmVudCBHZXN0dXJlU2Nyb2xsKlR5cGUgZXZlbnRzCisg
ICAgICAgIGFyZSBiZWluZyBjb3JyZWN0bHkgZGlzcGF0Y2hlZCBhbmQgdGhhdCBsYXRjaGluZyBk
b2VzIG5vdCBmYWlsCisgICAgICAgIGluIHRoZSBwcmVzZW5jZSBvZiB0aGUgcmVtb3ZhbCBvZiB0
aGUgdGFyZ2V0IGVsZW1lbnQuCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISku
CisKKyAgICAgICAgKiBmYXN0L2V2ZW50cy90b3VjaC9nZXN0dXJlL3RvdWNoLWdlc3R1cmUtc2Ny
b2xsLWRpdi1leHBlY3RlZC50eHQ6IEFkZGVkLgorICAgICAgICAqIGZhc3QvZXZlbnRzL3RvdWNo
L2dlc3R1cmUvdG91Y2gtZ2VzdHVyZS1zY3JvbGwtZGl2Lmh0bWw6IEFkZGVkOiB0ZXN0cyBkZWxp
dmVyeSB0byBvdmVyZmxvdy1kaXZzLgorICAgICAgICAqIGZhc3QvZXZlbnRzL3RvdWNoL2dlc3R1
cmUvdG91Y2gtZ2VzdHVyZS1zY3JvbGwtaWZyYW1lLWV4cGVjdGVkLnR4dDogQWRkZWQuCisgICAg
ICAgICogZmFzdC9ldmVudHMvdG91Y2gvZ2VzdHVyZS90b3VjaC1nZXN0dXJlLXNjcm9sbC1pZnJh
bWUuaHRtbDogQWRkZWQ6IHRlc3RzIGRlbGl2ZXJ5IHRvIGFuIGlmcmFtZS4KKyAgICAgICAgKiBm
YXN0L2V2ZW50cy90b3VjaC9nZXN0dXJlL3RvdWNoLWdlc3R1cmUtc2Nyb2xsLXBhZ2UtZXhwZWN0
ZWQudHh0OiBBZGRlZC4KKyAgICAgICAgKiBmYXN0L2V2ZW50cy90b3VjaC9nZXN0dXJlL3RvdWNo
LWdlc3R1cmUtc2Nyb2xsLXBhZ2UuaHRtbDogQWRkZWQ6IHRlc3RzIGRlbGl2ZXJ5IHRvIGEgcGFn
ZS4KKyAgICAgICAgKiBmYXN0L2V2ZW50cy90b3VjaC9nZXN0dXJlL3RvdWNoLWdlc3R1cmUtc2Ny
b2xsLXNoeS10YXJnZXQtZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAgICAgKiBmYXN0L2V2ZW50
cy90b3VjaC9nZXN0dXJlL3RvdWNoLWdlc3R1cmUtc2Nyb2xsLXNoeS10YXJnZXQuaHRtbDogQWRk
ZWQ6IHRlc3RzIHN1Y2Nlc3NmdWwgb3BlcmF0aW9uIHdoZW4gdGhlIGxhdGNoZWQgdGFyZ2V0IGRp
diBpcyByZW1vdmVkIGR1cmluZyB0aGUgZ2VzdHVyZSBldmVudCBzZXF1ZW5jZS4KKyAgICAgICAg
KiBmYXN0L2V2ZW50cy90b3VjaC9yZXNvdXJjZXMvc2Nyb2xsLWluc2lkZS1pZnJhbWUuaHRtbDog
QWRkZWQuCisKIDIwMTItMDEtMDUgIERtaXRyeSBMb21vdiAgPGRzbG9tb3ZAZ29vZ2xlLmNvbT4K
IAogICAgICAgICBVbnJldmlld2VkOiBmaWxlZCBXSzc1NjMzIGFuZCB1cGRhdGVkIGV4cGVjdGF0
aW9ucwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvZmFzdC9ldmVudHMvdG91Y2gvZ2VzdHVyZS90
b3VjaC1nZXN0dXJlLXNjcm9sbC1kaXYtZXhwZWN0ZWQudHh0IGIvTGF5b3V0VGVzdHMvZmFzdC9l
dmVudHMvdG91Y2gvZ2VzdHVyZS90b3VjaC1nZXN0dXJlLXNjcm9sbC1kaXYtZXhwZWN0ZWQudHh0
Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAuLmViM2IwYmYxYTYwN2NhZjBmYWVkODMyMjNhNGY5NWY3ZTllYzM0YjUKLS0t
IC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9mYXN0L2V2ZW50cy90b3VjaC9nZXN0dXJlL3Rv
dWNoLWdlc3R1cmUtc2Nyb2xsLWRpdi1leHBlY3RlZC50eHQKQEAgLTAsMCArMSwxNyBAQAorVGhp
cyB0ZXN0cyBnZXN0dXJlIGV2ZW50IHNjcm9sbGluZyBvZiBhbiBvdmVyZmxvdyBkaXYuCisKK09u
IHN1Y2Nlc3MsIHlvdSB3aWxsIHNlZSBhIHNlcmllcyBvZiAiUEFTUyIgbWVzc2FnZXMsIGZvbGxv
d2VkIGJ5ICJURVNUIENPTVBMRVRFIi4KKworCitmaXJzdCBnZXN0dXJlCitQQVNTIG1vdmluZ2Rp
di5zY3JvbGxUb3AgaXMgMAorUEFTUyBtb3ZpbmdkaXYuc2Nyb2xsTGVmdCBpcyA5MAorUEFTUyB3
aW5kb3cuaW50ZXJuYWxzLnJlY29yZE9mR2VzdHVyZVNjcm9sbEV2ZW50cyhtb3ZpbmdkaXYpIGlz
IDEzCitzZWNvbmQgZ2VzdHVyZQorUEFTUyBtb3ZpbmdkaXYuc2Nyb2xsVG9wIGlzIDk1CitQQVNT
IG1vdmluZ2Rpdi5zY3JvbGxMZWZ0IGlzIDkwCitQQVNTIHdpbmRvdy5pbnRlcm5hbHMucmVjb3Jk
T2ZHZXN0dXJlU2Nyb2xsRXZlbnRzKG1vdmluZ2RpdikgaXMgMTMKK1BBU1Mgc3VjY2Vzc2Z1bGx5
UGFyc2VkIGlzIHRydWUKKworVEVTVCBDT01QTEVURQorCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0
cy9mYXN0L2V2ZW50cy90b3VjaC9nZXN0dXJlL3RvdWNoLWdlc3R1cmUtc2Nyb2xsLWRpdi5odG1s
IGIvTGF5b3V0VGVzdHMvZmFzdC9ldmVudHMvdG91Y2gvZ2VzdHVyZS90b3VjaC1nZXN0dXJlLXNj
cm9sbC1kaXYuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4zNmYwMzYxNmJiZDBlNTUzYmUwYjcyM2YxYzJkMDE0
YTZhN2JmOTA3Ci0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvZmFzdC9ldmVudHMvdG91
Y2gvZ2VzdHVyZS90b3VjaC1nZXN0dXJlLXNjcm9sbC1kaXYuaHRtbApAQCAtMCwwICsxLDE2NSBA
QAorPCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9JRVRGLy9EVEQgSFRNTC8vRU4iPgorPGh0bWw+
Cis8aGVhZD4KKzxzY3JpcHQgc3JjPSIuLi8uLi8uLi9qcy9yZXNvdXJjZXMvanMtdGVzdC1wcmUu
anMiPjwvc2NyaXB0PgorPHN0eWxlIHR5cGU9InRleHQvY3NzIj4KKyN0b3VjaHRhcmdldCB7Cisg
IHdpZHRoOiAxMDBweDsKKyAgaGVpZ2h0OiAxMDBweDsKKyAgcG9zaXRpb246IHJlbGF0aXZlOwor
ICBiYWNrZ3JvdW5kOiB3aGl0ZTsKK30KKworI21vdmluZ2JveCB7CisgIHdpZHRoOiAxMDAlOwor
ICBoZWlnaHQ6IDEwMCU7CisgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKKyAgd29yZC13cmFwOiBicmVh
ay13b3JkOworICBvdmVyZmxvdy15OiBzY3JvbGw7CisgIG92ZXJmbG93LXg6IHNjcm9sbDsKKyAg
ZGlzcGxheTogYmxvY2s7Cit9CisKKyNncmVlbmJveCB7CisgIHdpZHRoOiAxMDBweDsKKyAgaGVp
Z2h0OiAxMDBweDsKKyAgYmFja2dyb3VuZDogZ3JlZW47CisgIHBhZGRpbmc6IDBweDsKKyAgbWFy
Z2luOiAwcHg7Cit9CisKKyNyZWRib3ggeworICB3aWR0aDogMTAwcHg7CisgIGhlaWdodDogMTAw
cHg7CisgIGJhY2tncm91bmQ6IHJlZDsKKyAgcGFkZGluZzogMHB4OworICBtYXJnaW46IDBweDsK
K30KKwordGQgeworICBwYWRkaW5nOiAwcHg7Cit9Cis8L3N0eWxlPgorPC9oZWFkPgorPGJvZHkg
c3R5bGU9Im1hcmdpbjowIiBvbmxvYWQ9InJ1blRlc3QoKTsiPgorPGRpdiBpZD0idG91Y2h0YXJn
ZXQiPgorICA8ZGl2IGlkPSJtb3Zpbmdib3giPgorICAgIDx0YWJsZSBib3JkZXI9IjAiIGNlbGxz
cGFjaW5nPSIwcHgiIGlkPSJ0YWJsZWZvbyI+CisgICAgICA8dHI+CisgICAgICAgIDx0ZD48ZGl2
IGlkPSJyZWRib3giPjwvZGl2PjwvdGQ+CisgICAgICAgIDx0ZD48ZGl2IGlkPSJncmVlbmJveCI+
PC9kaXY+PC90ZD4KKyAgICAgIDwvdHI+CisgICAgICA8dHI+CisgICAgICAgIDx0ZD48ZGl2IGlk
PSJncmVlbmJveCI+PC9kaXY+PC90ZD4KKyAgICAgICAgPHRkPjxkaXYgaWQ9ImdyZWVuYm94Ij48
L2Rpdj48L3RkPgorICAgICAgPC90cj4KKyAgICA8L3RhYmxlPgorICA8L2Rpdj4KKzwvZGl2Pgor
Cis8cCBpZD0iZGVzY3JpcHRpb24iPjwvcD4KKzxkaXYgaWQ9ImNvbnNvbGUiPjwvZGl2PgorPHNj
cmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgorCit2YXIgbW92aW5nZGl2OwordmFyIGV4cGVj
dGVkU2Nyb2xsc1RvdGFsID0gMjsKK3ZhciBzY3JvbGxzT2NjdXJyZWQgPSAwOwordmFyIHNjcm9s
bEFtb3VudFggPSBbJzkwJywgJzkwJ107Cit2YXIgc2Nyb2xsQW1vdW50WSA9IFsnMCcsICc5NSdd
OwordmFyIGdlc3R1cmVEaXNwYXRjaFJlY29yZCA9IFsnMTMnLCAnMTMnXTsKKworZnVuY3Rpb24g
Y2hlY2tTY3JvbGxPZmZzZXQoKQoreworICAgIG1vdmluZ2RpdiA9IGRvY3VtZW50LmdldEVsZW1l
bnRCeUlkKCdtb3Zpbmdib3gnKTsKKyAgICBpZiAod2luZG93LmV2ZW50U2VuZGVyKSB7CisgICAg
ICAgIHNob3VsZEJlKCdtb3ZpbmdkaXYuc2Nyb2xsVG9wJywgc2Nyb2xsQW1vdW50WVtzY3JvbGxz
T2NjdXJyZWRdKTsKKyAgICAgICAgc2hvdWxkQmUoJ21vdmluZ2Rpdi5zY3JvbGxMZWZ0Jywgc2Ny
b2xsQW1vdW50WFtzY3JvbGxzT2NjdXJyZWRdKTsKKyAgICAgICAgaWYgKHdpbmRvdy5pbnRlcm5h
bHMpIHsKKyAgICAgICAgICAgIHNob3VsZEJlKCd3aW5kb3cuaW50ZXJuYWxzLnJlY29yZE9mR2Vz
dHVyZVNjcm9sbEV2ZW50cyhtb3ZpbmdkaXYpJywgZ2VzdHVyZURpc3BhdGNoUmVjb3JkW3Njcm9s
bHNPY2N1cnJlZF0pOworICAgICAgICB9CisgICAgICAgIHNjcm9sbHNPY2N1cnJlZCsrOworICAg
IH0KKworICAgaWYgKHNjcm9sbHNPY2N1cnJlZCA9PSBleHBlY3RlZFNjcm9sbHNUb3RhbCkgewor
ICAgICAgICAvLyBJZiB3ZSd2ZSBnb3QgaGVyZSwgd2UndmUgcGFzc2VkLgorICAgICAgICBpc1N1
Y2Nlc3NmdWxseVBhcnNlZCgpOworICAgICAgICBpZiAod2luZG93LmxheW91dFRlc3RDb250cm9s
bGVyKQorICAgICAgICAgICAgbGF5b3V0VGVzdENvbnRyb2xsZXIubm90aWZ5RG9uZSgpOworICAg
IH0gZWxzZSB7CisgICAgICAgIHNlY29uZFRvdWNoRHJhZ1NlcXVlbmNlKCk7CisgICAgfQorfQor
CitmdW5jdGlvbiBmaW5nZXJVcChldmVudCkKK3sKKyAgICBpZiAoIXdpbmRvdy5sYXlvdXRUZXN0
Q29udHJvbGxlcikKKyAgICAgICAgZGVidWcoJ21vdmVkOiAnICsgZXZlbnQuY3VycmVudFRhcmdl
dC5zY3JvbGxUb3AgKyAnLCAnICsgZXZlbnQuY3VycmVudFRhcmdldC5zY3JvbGxMZWZ0KTsKKyAg
ICByZXR1cm4gdHJ1ZTsgIC8vIFdhbnQgdGhlIGRlZmF1bHQgYmVoYXZpb3VyLgorfQorCitmdW5j
dGlvbiBmaXJzdFRvdWNoRHJhZ1NlcXVlbmNlKCkKK3sKKyAgICBkZWJ1ZygiZmlyc3QgZ2VzdHVy
ZSIpOworICAgIHZhciB0YXJnZXQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbW92aW5nYm94
Jyk7CisgICAgd2luZG93LmludGVybmFscy5lbmFibGVHZXN0dXJlU2Nyb2xsRXZlbnRSZWNvcmQo
dGFyZ2V0KTsKKworICAgIHdpbmRvdy5pbnRlcm5hbHMuc2VuZFNjcm9sbEJlZ2luR2VzdHVyZUV2
ZW50KGRvY3VtZW50LCA1LCAxMik7CisgICAgd2luZG93LmludGVybmFscy5zZW5kU2Nyb2xsVXBk
YXRlR2VzdHVyZUV2ZW50KGRvY3VtZW50LCA1LCAxMiwgLTkwLCAwKTsKKyAgICB3aW5kb3cuaW50
ZXJuYWxzLnNlbmRTY3JvbGxFbmRHZXN0dXJlRXZlbnQoZG9jdW1lbnQsIDUsIDEyLCAwLCAwKTsK
KworICAgIC8vIFdhaXQgZm9yIGxheW91dC4KKyAgICBjaGVja1Njcm9sbE9mZnNldCgpOworfQor
CitmdW5jdGlvbiBzZWNvbmRUb3VjaERyYWdTZXF1ZW5jZSgpCit7CisgICAgZGVidWcoInNlY29u
ZCBnZXN0dXJlIik7CisgICAgdmFyIHRhcmdldCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdt
b3Zpbmdib3gnKTsKKyAgICB3aW5kb3cuaW50ZXJuYWxzLmVuYWJsZUdlc3R1cmVTY3JvbGxFdmVu
dFJlY29yZCh0YXJnZXQpOworCisgICAgd2luZG93LmludGVybmFscy5zZW5kU2Nyb2xsQmVnaW5H
ZXN0dXJlRXZlbnQoZG9jdW1lbnQsIDEyLCAyKTsKKyAgICB3aW5kb3cuaW50ZXJuYWxzLnNlbmRT
Y3JvbGxVcGRhdGVHZXN0dXJlRXZlbnQoZG9jdW1lbnQsIDEyLCAyLCAwLCAtOTUpOworICAgIHdp
bmRvdy5pbnRlcm5hbHMuc2VuZFNjcm9sbEVuZEdlc3R1cmVFdmVudChkb2N1bWVudCwgMTIsIDIs
IDAsIDApOworCisgICAgLy8gV2FpdCBmb3IgbGF5b3V0LgorICAgIGNoZWNrU2Nyb2xsT2Zmc2V0
KCk7Cit9CisKK2Z1bmN0aW9uIGV4aXRJZk5lY2Vzc2FyeSgpCit7CisgICAgZGVidWcoJ3dpbmRv
dy5pbnRlcm5hbHMgbm90IGltcGxlbWVudGVkIG9yIGdlc3R1cmUgZXZlbnQgc2Nyb2xpbmcgaXMg
YnJva2VuLicpOworICAgIGlzU3VjY2Vzc2Z1bGx5UGFyc2VkKCk7CisgICAgaWYgKHdpbmRvdy5s
YXlvdXRUZXN0Q29udHJvbGxlcikKKyAgICAgICAgbGF5b3V0VGVzdENvbnRyb2xsZXIubm90aWZ5
RG9uZSgpOworfQorCitpZiAod2luZG93LmxheW91dFRlc3RDb250cm9sbGVyKQorICAgIGxheW91
dFRlc3RDb250cm9sbGVyLndhaXRVbnRpbERvbmUoKTsKKyAgICAKK2Z1bmN0aW9uIGNoZWNrVGVz
dERlcGVuZGVuY2llcygpCit7CisgICAgcmV0dXJuIHdpbmRvdy5ldmVudFNlbmRlciAmJiB3aW5k
b3cuaW50ZXJuYWxzICYmIHdpbmRvdy5pbnRlcm5hbHMuc2VuZFNjcm9sbEJlZ2luR2VzdHVyZUV2
ZW50ICYmIHdpbmRvdy5pbnRlcm5hbHMuc2VuZFNjcm9sbFVwZGF0ZUdlc3R1cmVFdmVudCAmJiB3
aW5kb3cuaW50ZXJuYWxzLnNlbmRTY3JvbGxFbmRHZXN0dXJlRXZlbnQ7Cit9CisKK2Z1bmN0aW9u
IHJ1blRlc3QoKQoreworICAgIHZhciBtb3ZpbmdkaXYgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJ
ZCgnbW92aW5nYm94Jyk7CisKKyAgICBpZiAod2luZG93LmV2ZW50U2VuZGVyKSB7CisgICAgICAg
IGRlc2NyaXB0aW9uKCdUaGlzIHRlc3RzIGdlc3R1cmUgZXZlbnQgc2Nyb2xsaW5nIG9mIGFuIG92
ZXJmbG93IGRpdi4nKTsKKworICAgICAgICBpZiAoY2hlY2tUZXN0RGVwZW5kZW5jaWVzKCkpCisg
ICAgICAgICAgICBmaXJzdFRvdWNoRHJhZ1NlcXVlbmNlKCk7CisgICAgICAgIGVsc2UKKyAgICAg
ICAgICAgIGV4aXRJZk5lY2Vzc2FyeSgpOworICAgIH0gZWxzZSB7CisgICAgICAgIGRlYnVnKCJU
aGlzIHRlc3QgcmVxdWlyZXMgRHVtcFJlbmRlclRyZWUgYW5kIHdpbmRvdy5pbnRlcm5hbHMuICBU
b3VjaCBzY3JvbGwgdGhlIHJlZCByZWN0IHRvIGxvZy4iKTsKKyAgICAgICAgbW92aW5nZGl2LmFk
ZEV2ZW50TGlzdGVuZXIoJ3RvdWNoZW5kJywgZmluZ2VyVXAsIGZhbHNlKTsKKyAgICB9Cit9Cis8
L3NjcmlwdD4KKworCisKKzwvYm9keT4KKzwvaHRtbD4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3Rz
L2Zhc3QvZXZlbnRzL3RvdWNoL2dlc3R1cmUvdG91Y2gtZ2VzdHVyZS1zY3JvbGwtaWZyYW1lLWV4
cGVjdGVkLnR4dCBiL0xheW91dFRlc3RzL2Zhc3QvZXZlbnRzL3RvdWNoL2dlc3R1cmUvdG91Y2gt
Z2VzdHVyZS1zY3JvbGwtaWZyYW1lLWV4cGVjdGVkLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi41YWU2ZDllMmY2
YTk4MWE3ZTIzMjRjNzdkMTc2YmEyYTUwMDc3Y2QyCi0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0
VGVzdHMvZmFzdC9ldmVudHMvdG91Y2gvZ2VzdHVyZS90b3VjaC1nZXN0dXJlLXNjcm9sbC1pZnJh
bWUtZXhwZWN0ZWQudHh0CkBAIC0wLDAgKzEsMTggQEAKKworVGhpcyB0ZXN0cyBnZXN0dXJlIGV2
ZW50IHNjcm9sbGluZyBpbiBpZnJhbWVzLiBSZWQtZ3JlZW4gc3RyaXAgaXMgc2Nyb2xsZWQgb24g
cGFzcy4KKworT24gc3VjY2VzcywgeW91IHdpbGwgc2VlIGEgc2VyaWVzIG9mICJQQVNTIiBtZXNz
YWdlcywgZm9sbG93ZWQgYnkgIlRFU1QgQ09NUExFVEUiLgorCisKK2ZpcnN0IGdlc3R1cmUKK1BB
U1MgdG91Y2h0YXJnZXQuY29udGVudERvY3VtZW50LmJvZHkuc2Nyb2xsVG9wIGlzIDE0MAorUEFT
UyB0b3VjaHRhcmdldC5jb250ZW50RG9jdW1lbnQuYm9keS5zY3JvbGxMZWZ0IGlzIDAKK1BBU1Mg
d2luZG93LmludGVybmFscy5yZWNvcmRPZkdlc3R1cmVTY3JvbGxFdmVudHModG91Y2h0YXJnZXQu
Y29udGVudERvY3VtZW50KSBpcyA3CitzZWNvbmQgZ2VzdHVyZQorUEFTUyB0b3VjaHRhcmdldC5j
b250ZW50RG9jdW1lbnQuYm9keS5zY3JvbGxUb3AgaXMgMjAwCitQQVNTIHRvdWNodGFyZ2V0LmNv
bnRlbnREb2N1bWVudC5ib2R5LnNjcm9sbExlZnQgaXMgMAorUEFTUyB3aW5kb3cuaW50ZXJuYWxz
LnJlY29yZE9mR2VzdHVyZVNjcm9sbEV2ZW50cyh0b3VjaHRhcmdldC5jb250ZW50RG9jdW1lbnQp
IGlzIDcKK1BBU1Mgc3VjY2Vzc2Z1bGx5UGFyc2VkIGlzIHRydWUKKworVEVTVCBDT01QTEVURQor
CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9mYXN0L2V2ZW50cy90b3VjaC9nZXN0dXJlL3RvdWNo
LWdlc3R1cmUtc2Nyb2xsLWlmcmFtZS5odG1sIGIvTGF5b3V0VGVzdHMvZmFzdC9ldmVudHMvdG91
Y2gvZ2VzdHVyZS90b3VjaC1nZXN0dXJlLXNjcm9sbC1pZnJhbWUuaHRtbApuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5i
OWMyN2YyNTc2OTU1MDQyYWE0YjczZjUxZmEyN2MzM2NkNmY0ZDg5Ci0tLSAvZGV2L251bGwKKysr
IGIvTGF5b3V0VGVzdHMvZmFzdC9ldmVudHMvdG91Y2gvZ2VzdHVyZS90b3VjaC1nZXN0dXJlLXNj
cm9sbC1pZnJhbWUuaHRtbApAQCAtMCwwICsxLDExOCBAQAorPCFET0NUWVBFIEhUTUwgUFVCTElD
ICItLy9JRVRGLy9EVEQgSFRNTC8vRU4iPgorPGh0bWw+Cis8aGVhZD4KKzxsaW5rIHJlbD0ic3R5
bGVzaGVldCIgaHJlZj0iLi4vLi4vLi4vanMvcmVzb3VyY2VzL2pzLXRlc3Qtc3R5bGUuY3NzIj4K
KzxzY3JpcHQgc3JjPSIuLi8uLi8uLi9qcy9yZXNvdXJjZXMvanMtdGVzdC1wcmUuanMiPjwvc2Ny
aXB0PgorPHNjcmlwdCBzcmM9Ii4uLy4uLy4uL2pzL3Jlc291cmNlcy9qcy10ZXN0LXBvc3QtZnVu
Y3Rpb24uanMiPjwvc2NyaXB0PgorPHN0eWxlIHR5cGU9InRleHQvY3NzIj4KKyN0b3VjaHRhcmdl
dCB7CisgIHdpZHRoOiAyMDBweDsKKyAgaGVpZ2h0OiAyMDBweDsKKyAgcG9zaXRpb246IHJlbGF0
aXZlOworICBiYWNrZ3JvdW5kOiB3aGl0ZTsKK30KKzwvc3R5bGU+Cis8L2hlYWQ+Cis8Ym9keT4K
KzxpZnJhbWUgaWQ9InRvdWNodGFyZ2V0IiBzcmM9Ii4uL3Jlc291cmNlcy9zY3JvbGwtaW5zaWRl
LWlmcmFtZS5odG1sIj48L2lmcmFtZT4KKyAgICA8cCBpZD0iZGVzY3JpcHRpb24iPjwvcD4KKzxk
aXYgaWQ9ImNvbnNvbGUiPjwvZGl2PgorPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgor
Cit2YXIgdG91Y2h0YXJnZXQ7Cit2YXIgZXhwZWN0ZWRTY3JvbGxzVG90YWwgPSAyOwordmFyIHNj
cm9sbHNPY2N1cnJlZCA9IDA7Cit2YXIgc2Nyb2xsQW1vdW50WCA9IFsnMCcsICcwJ107Cit2YXIg
c2Nyb2xsQW1vdW50WSA9IFsnMTQwJywgJzIwMCddOwordmFyIGdlc3R1cmVEaXNwYXRjaFJlY29y
ZCA9IFsnNycsICc3J107CisKK2Z1bmN0aW9uIGNoZWNrU2Nyb2xsT2Zmc2V0KCkKK3sKKyAgICB0
b3VjaHRhcmdldCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b3VjaHRhcmdldCcpOworICAg
IGlmICh3aW5kb3cuZXZlbnRTZW5kZXIpIHsKKyAgICAgICAgc2hvdWxkQmUoJ3RvdWNodGFyZ2V0
LmNvbnRlbnREb2N1bWVudC5ib2R5LnNjcm9sbFRvcCcsIHNjcm9sbEFtb3VudFlbc2Nyb2xsc09j
Y3VycmVkXSk7CisgICAgICAgIHNob3VsZEJlKCd0b3VjaHRhcmdldC5jb250ZW50RG9jdW1lbnQu
Ym9keS5zY3JvbGxMZWZ0Jywgc2Nyb2xsQW1vdW50WFtzY3JvbGxzT2NjdXJyZWRdKTsKKyAgICAg
ICAgaWYgKHdpbmRvdy5pbnRlcm5hbHMpIHsKKyAgICAgICAgICAgIHNob3VsZEJlKCd3aW5kb3cu
aW50ZXJuYWxzLnJlY29yZE9mR2VzdHVyZVNjcm9sbEV2ZW50cyh0b3VjaHRhcmdldC5jb250ZW50
RG9jdW1lbnQpJywgZ2VzdHVyZURpc3BhdGNoUmVjb3JkW3Njcm9sbHNPY2N1cnJlZF0pOworICAg
ICAgICB9CisgICAgICAgIHNjcm9sbHNPY2N1cnJlZCsrOworICAgIH0KKworICAgIGlmIChzY3Jv
bGxzT2NjdXJyZWQgPT0gZXhwZWN0ZWRTY3JvbGxzVG90YWwpIHsKKyAgICAgICAgLy8gSWYgd2Un
dmUgZ290IGhlcmUsIHdlJ3ZlIHBhc3NlZC4KKyAgICAgICAgc3VjY2Vzc2Z1bGx5UGFyc2VkID0g
dHJ1ZTsKKyAgICAgICAgaXNTdWNjZXNzZnVsbHlQYXJzZWQoKTsKKyAgICAgICAgaWYgKHdpbmRv
dy5sYXlvdXRUZXN0Q29udHJvbGxlcikKKyAgICAgICAgICAgIGxheW91dFRlc3RDb250cm9sbGVy
Lm5vdGlmeURvbmUoKTsKKyAgICB9IGVsc2UgeworICAgICAgICBzZWNvbmRUb3VjaERyYWdTZXF1
ZW5jZSgpOworICAgIH0KK30KKworZnVuY3Rpb24gZmluZ2VyVXAoZXZlbnQpCit7CisgICAgaWYg
KCF3aW5kb3cubGF5b3V0VGVzdENvbnRyb2xsZXIpCisgICAgICAgIGRlYnVnKCdtb3ZlZDogJyAr
IGV2ZW50LmN1cnJlbnRUYXJnZXQuc2Nyb2xsVG9wICsgJywgJyArIGV2ZW50LmN1cnJlbnRUYXJn
ZXQuc2Nyb2xsTGVmdCk7CisgICAgcmV0dXJuIHRydWU7ICAvLyBXYW50IHRoZSBkZWZhdWx0IGJl
aGF2aW91ci4KK30KKworZnVuY3Rpb24gZmlyc3RUb3VjaERyYWdTZXF1ZW5jZSgpCit7CisgICAg
ZGVidWcoImZpcnN0IGdlc3R1cmUiKTsKKyAgICB0b3VjaHRhcmdldCA9IGRvY3VtZW50LmdldEVs
ZW1lbnRCeUlkKCd0b3VjaHRhcmdldCcpOworICAgIHdpbmRvdy5pbnRlcm5hbHMuZW5hYmxlR2Vz
dHVyZVNjcm9sbEV2ZW50UmVjb3JkKHRvdWNodGFyZ2V0LmNvbnRlbnREb2N1bWVudCk7CisgICAg
d2luZG93LmludGVybmFscy5zZW5kU2Nyb2xsQmVnaW5HZXN0dXJlRXZlbnQoZG9jdW1lbnQsIDEy
LCAxMCk7CisgICAgd2luZG93LmludGVybmFscy5zZW5kU2Nyb2xsVXBkYXRlR2VzdHVyZUV2ZW50
KGRvY3VtZW50LCAxMiwgMTAsIDAsIC0xNDApOworICAgIHdpbmRvdy5pbnRlcm5hbHMuc2VuZFNj
cm9sbEVuZEdlc3R1cmVFdmVudChkb2N1bWVudCwgMTIsIDEwLCAwLCAwKTsKKworICAgIC8vIFdh
aXQgZm9yIGxheW91dC4KKyAgICBjaGVja1Njcm9sbE9mZnNldCgpOworfQorCitmdW5jdGlvbiBz
ZWNvbmRUb3VjaERyYWdTZXF1ZW5jZSgpCit7CisgICAgZGVidWcoInNlY29uZCBnZXN0dXJlIik7
CisgICAgdG91Y2h0YXJnZXQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG91Y2h0YXJnZXQn
KTsKKyAgICB3aW5kb3cuaW50ZXJuYWxzLmVuYWJsZUdlc3R1cmVTY3JvbGxFdmVudFJlY29yZCh0
b3VjaHRhcmdldC5jb250ZW50RG9jdW1lbnQpOworICAgIHdpbmRvdy5pbnRlcm5hbHMuc2VuZFNj
cm9sbEJlZ2luR2VzdHVyZUV2ZW50KGRvY3VtZW50LCAxMiwgNDApOworICAgIHdpbmRvdy5pbnRl
cm5hbHMuc2VuZFNjcm9sbFVwZGF0ZUdlc3R1cmVFdmVudChkb2N1bWVudCwgMTIsIDQwLCAwLCAt
NjApOworICAgIHdpbmRvdy5pbnRlcm5hbHMuc2VuZFNjcm9sbEVuZEdlc3R1cmVFdmVudChkb2N1
bWVudCwgMTIsIDQwLCAwLCAwKTsKKworICAgIC8vIFdhaXQgZm9yIGxheW91dC4KKyAgICBjaGVj
a1Njcm9sbE9mZnNldCgpOworfQorCitmdW5jdGlvbiBleGl0SWZOZWNlc3NhcnkoKQoreworICAg
IGRlYnVnKCd3aW5kb3cuaW50ZXJucyBub3QgaW1wbGVtZW50ZWQgb24gdGhpcyBwbGF0Zm9ybSBv
ciBnZXN0dXJlIGV2ZW50IHNjcm9sbGluZyBpcyBicm9rZW4nKTsKKyAgICBzdWNjZXNzZnVsbHlQ
YXJzZWQgPSB0cnVlOworICAgIGlzU3VjY2Vzc2Z1bGx5UGFyc2VkKCk7CisgICAgaWYgKHdpbmRv
dy5sYXlvdXRUZXN0Q29udHJvbGxlcikKKyAgICAgICAgbGF5b3V0VGVzdENvbnRyb2xsZXIubm90
aWZ5RG9uZSgpOworfQorCitpZiAod2luZG93LmxheW91dFRlc3RDb250cm9sbGVyKQorICAgIGxh
eW91dFRlc3RDb250cm9sbGVyLndhaXRVbnRpbERvbmUoKTsKKworZnVuY3Rpb24gY2hlY2tUZXN0
RGVwZW5kZW5jaWVzKCkKK3sKKyAgICByZXR1cm4gd2luZG93LmV2ZW50U2VuZGVyICYmIHdpbmRv
dy5pbnRlcm5hbHMgJiYgd2luZG93LmludGVybmFscy5zZW5kU2Nyb2xsQmVnaW5HZXN0dXJlRXZl
bnQgJiYgd2luZG93LmludGVybmFscy5zZW5kU2Nyb2xsVXBkYXRlR2VzdHVyZUV2ZW50ICYmIHdp
bmRvdy5pbnRlcm5hbHMuc2VuZFNjcm9sbEVuZEdlc3R1cmVFdmVudDsKK30KKworZnVuY3Rpb24g
cnVuVGVzdCgpCit7CisgICAgdG91Y2h0YXJnZXQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgn
dG91Y2h0YXJnZXQnKTsKKyAgICBpZiAod2luZG93LmV2ZW50U2VuZGVyKSB7CisgICAgICAgIGRl
c2NyaXB0aW9uKCdUaGlzIHRlc3RzIGdlc3R1cmUgZXZlbnQgc2Nyb2xsaW5nIGluIGlmcmFtZXMu
ICcgKworICAgICAgICAgICAgJ1JlZC1ncmVlbiBzdHJpcCBpcyBzY3JvbGxlZCBvbiBwYXNzLicp
OworICAgICAgICBpZiAoY2hlY2tUZXN0RGVwZW5kZW5jaWVzKCkpCisgICAgICAgICAgICBmaXJz
dFRvdWNoRHJhZ1NlcXVlbmNlKCk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGV4aXRJZk5l
Y2Vzc2FyeSgpOworICAgIH0gZWxzZSB7CisgICAgICAgIGRlYnVnKCJUaGlzIHRlc3QgcmVxdWly
ZXMgRHVtcFJlbmRlclRyZWUgYW5kIHdpbmRvdy5pbnRlcm5hbHMuICBUb3VjaC1zY3JvbGwgdGhl
IHJlZC9ncmVlbiBzdHJpcC4iKTsKKyAgICB9Cit9Cis8L3NjcmlwdD4KKzwvYm9keT4KKzwvaHRt
bD4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2Zhc3QvZXZlbnRzL3RvdWNoL2dlc3R1cmUvdG91
Y2gtZ2VzdHVyZS1zY3JvbGwtcGFnZS1leHBlY3RlZC50eHQgYi9MYXlvdXRUZXN0cy9mYXN0L2V2
ZW50cy90b3VjaC9nZXN0dXJlL3RvdWNoLWdlc3R1cmUtc2Nyb2xsLXBhZ2UtZXhwZWN0ZWQudHh0
Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAuLjIzNTFlNGQxY2RlNzMyZDJjZTdjZjI0MzExMGZhYzBmNTFjM2U3M2EKLS0t
IC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9mYXN0L2V2ZW50cy90b3VjaC9nZXN0dXJlL3Rv
dWNoLWdlc3R1cmUtc2Nyb2xsLXBhZ2UtZXhwZWN0ZWQudHh0CkBAIC0wLDAgKzEsMTcgQEAKK1Ro
aXMgdGVzdHMgc2Nyb2xsIGdlc3R1cmUgZXZlbnQgc2Nyb2xsaW5nIG9uIGEgd2hvbGUgcGFnZS4K
KworT24gc3VjY2VzcywgeW91IHdpbGwgc2VlIGEgc2VyaWVzIG9mICJQQVNTIiBtZXNzYWdlcywg
Zm9sbG93ZWQgYnkgIlRFU1QgQ09NUExFVEUiLgorCisKK2ZpcnN0IGdlc3R1cmUKK1BBU1MgZG9j
dW1lbnQuYm9keS5zY3JvbGxUb3AgaXMgNzAKK1BBU1MgZG9jdW1lbnQuYm9keS5zY3JvbGxMZWZ0
IGlzIDAKK1BBU1Mgd2luZG93LmludGVybmFscy5yZWNvcmRPZkdlc3R1cmVTY3JvbGxFdmVudHMo
ZG9jdW1lbnQpIGlzIDcKK3NlY29uZCBnZXN0dXJlCitQQVNTIGRvY3VtZW50LmJvZHkuc2Nyb2xs
VG9wIGlzIDEzMAorUEFTUyBkb2N1bWVudC5ib2R5LnNjcm9sbExlZnQgaXMgMAorUEFTUyB3aW5k
b3cuaW50ZXJuYWxzLnJlY29yZE9mR2VzdHVyZVNjcm9sbEV2ZW50cyhkb2N1bWVudCkgaXMgNwor
UEFTUyBzdWNjZXNzZnVsbHlQYXJzZWQgaXMgdHJ1ZQorCitURVNUIENPTVBMRVRFCisKZGlmZiAt
LWdpdCBhL0xheW91dFRlc3RzL2Zhc3QvZXZlbnRzL3RvdWNoL2dlc3R1cmUvdG91Y2gtZ2VzdHVy
ZS1zY3JvbGwtcGFnZS5odG1sIGIvTGF5b3V0VGVzdHMvZmFzdC9ldmVudHMvdG91Y2gvZ2VzdHVy
ZS90b3VjaC1nZXN0dXJlLXNjcm9sbC1wYWdlLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMDVhYzdkYjU3ODVh
NzAwNDUzZjExYTczZjRkNGQyZTU0MWU4OWI0NAotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRl
c3RzL2Zhc3QvZXZlbnRzL3RvdWNoL2dlc3R1cmUvdG91Y2gtZ2VzdHVyZS1zY3JvbGwtcGFnZS5o
dG1sCkBAIC0wLDAgKzEsMTU0IEBACis8IURPQ1RZUEUgSFRNTCBQVUJMSUMgIi0vL0lFVEYvL0RU
RCBIVE1MLy9FTiI+Cis8aHRtbD4KKzxoZWFkPgorPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVm
PSIuLi8uLi8uLi9qcy9yZXNvdXJjZXMvanMtdGVzdC1zdHlsZS5jc3MiPgorPHNjcmlwdCBzcmM9
Ii4uLy4uLy4uL2pzL3Jlc291cmNlcy9qcy10ZXN0LXByZS5qcyI+PC9zY3JpcHQ+Cis8c3R5bGUg
dHlwZT0idGV4dC9jc3MiPgorI2dyZWVuYm94IHsKKyAgd2lkdGg6IDEwMHB4OworICBoZWlnaHQ6
IDEwMHB4OworICBiYWNrZ3JvdW5kOiBncmVlbjsKKyAgcGFkZGluZzogMHB4OworICBtYXJnaW46
IDBweDsKK30KKyNyZWRib3ggeworICB3aWR0aDogMTAwcHg7CisgIGhlaWdodDogMTAwcHg7Cisg
IGJhY2tncm91bmQ6IHJlZDsKKyAgcGFkZGluZzogMHB4OworICBtYXJnaW46IDBweDsKK30KKwor
dGQgeworICBwYWRkaW5nOiAwcHg7Cit9Cis8L3N0eWxlPgorPC9oZWFkPgorPGJvZHkgc3R5bGU9
Im1hcmdpbjowIiBvbmxvYWQ9InJ1blRlc3QoKTsiPgorCis8dGFibGUgaWQ9InRhYmxlX3RvX2Zp
bGwiPgorICAgIDx0cj48dGQ+PGRpdiBpZD0iZ3JlZW5ib3giPjwvZGl2PjwvdGQ+PC90cj4KKyAg
ICA8dHI+PHRkPjxkaXYgaWQ9InJlZGJveCI+PC9kaXY+PC90ZD48L3RyPgorPC90YWJsZT4KKwor
PHAgaWQ9ImRlc2NyaXB0aW9uIj48L3A+Cis8ZGl2IGlkPSJjb25zb2xlIj48L2Rpdj4KKzxzY3Jp
cHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KKwordmFyIGV4cGVjdGVkU2Nyb2xsc1RvdGFsID0g
MjsKK3ZhciBzY3JvbGxzT2NjdXJyZWQgPSAwOwordmFyIHNjcm9sbEFtb3VudFggPSBbJzAnLCAn
MCddOwordmFyIHNjcm9sbEFtb3VudFkgPSBbJzcwJywgJzEzMCddOwordmFyIGdlc3R1cmVEaXNw
YXRjaFJlY29yZCA9IFsnNycsICc3J107CisKKy8vIEFsd2F5cyBjb25zdHJ1Y3QgYSBwYWdlIGxh
cmdlciB0aGFuIHRoZSB2ZXJ0aWNhbCBoZWlnaHQgb2YgdGhlIHdpbmRvdy4KK2Z1bmN0aW9uIGJ1
aWxkUGFnZSgpCit7CisgICAgdmFyIHRhYmxlID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rh
YmxlX3RvX2ZpbGwnKTsKKyAgICB2YXIgdGFyZ2V0SGVpZ2h0ID0gZG9jdW1lbnQuYm9keS5vZmZz
ZXRIZWlnaHQ7CisgICAgdmFyIGNlbGxQYWlySGVpZ2h0ID0gdGFibGUub2Zmc2V0SGVpZ2h0Owor
ICAgIHZhciBudW1iZXJPZlJlcHMgPSB0YXJnZXRIZWlnaHQgLyBjZWxsUGFpckhlaWdodCAqIDI7
CisgICAgdmFyIGk7CisgICAgZm9yIChpID0gMDsgaSA8IG51bWJlck9mUmVwczsgaSsrKSB7Cisg
ICAgICAgIHZhciBwID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKKyAgICAgICAgcC5p
bm5lckhUTUwgPSAnPHRkPjxkaXYgaWQ9ImdyZWVuYm94Ij48L2Rpdj48L3RkPic7CisgICAgICAg
IHRhYmxlLmFwcGVuZENoaWxkKHApOworICAgICAgICB2YXIgcCA9IGRvY3VtZW50LmNyZWF0ZUVs
ZW1lbnQoJ3RyJyk7CisgICAgICAgIHAuaW5uZXJIVE1MID0gJzx0ZD48ZGl2IGlkPSJyZWRib3gi
PjwvZGl2PjwvdGQ+JzsKKyAgICAgICAgdGFibGUuYXBwZW5kQ2hpbGQocCk7CisgICAgfQorfQor
CitmdW5jdGlvbiBjaGVja1Njcm9sbE9mZnNldCgpCit7CisgICAgaWYgKHdpbmRvdy5ldmVudFNl
bmRlcikgeworICAgICAgICBzaG91bGRCZSgnZG9jdW1lbnQuYm9keS5zY3JvbGxUb3AnLCBzY3Jv
bGxBbW91bnRZW3Njcm9sbHNPY2N1cnJlZF0pOworICAgICAgICBzaG91bGRCZSgnZG9jdW1lbnQu
Ym9keS5zY3JvbGxMZWZ0Jywgc2Nyb2xsQW1vdW50WFtzY3JvbGxzT2NjdXJyZWRdKTsKKyAgICAg
ICAgaWYgKHdpbmRvdy5pbnRlcm5hbHMpIHsKKyAgICAgICAgICAgIHNob3VsZEJlKCd3aW5kb3cu
aW50ZXJuYWxzLnJlY29yZE9mR2VzdHVyZVNjcm9sbEV2ZW50cyhkb2N1bWVudCknLCBnZXN0dXJl
RGlzcGF0Y2hSZWNvcmRbc2Nyb2xsc09jY3VycmVkXSk7CisgICAgICAgIH0KKyAgICAgICAgc2Ny
b2xsc09jY3VycmVkKys7CisgICAgfQorCisgICAgaWYgKHNjcm9sbHNPY2N1cnJlZCA9PSBleHBl
Y3RlZFNjcm9sbHNUb3RhbCkgeworICAgICAgICAvLyBJZiB3ZSd2ZSBnb3QgaGVyZSwgd2UndmUg
cGFzc2VkLgorICAgICAgICBzdWNjZXNzZnVsbHlQYXJzZWQgPSB0cnVlOworICAgICAgICBpc1N1
Y2Nlc3NmdWxseVBhcnNlZCgpOworICAgICAgICBpZiAod2luZG93LmxheW91dFRlc3RDb250cm9s
bGVyKQorICAgICAgICAgICAgbGF5b3V0VGVzdENvbnRyb2xsZXIubm90aWZ5RG9uZSgpOworICAg
IH0gZWxzZSB7CisgICAgICAgIHNlY29uZFRvdWNoRHJhZ1NlcXVlbmNlKCk7CisgICAgfQorfQor
CitmdW5jdGlvbiBmaW5nZXJVcChldmVudCkKK3sKKyAgICBpZiAoIXdpbmRvdy5sYXlvdXRUZXN0
Q29udHJvbGxlcikKKyAgICAgICAgZGVidWcoJ21vdmVkOiAnICsgZXZlbnQuY3VycmVudFRhcmdl
dC5zY3JvbGxUb3AgKyAnLCAnICsgZXZlbnQuY3VycmVudFRhcmdldC5zY3JvbGxMZWZ0KTsKKyAg
ICByZXR1cm4gdHJ1ZTsgIC8vIFdhbnQgdGhlIGRlZmF1bHQgYmVoYXZpb3VyLgorfQorCitmdW5j
dGlvbiBmaXJzdFRvdWNoRHJhZ1NlcXVlbmNlKCkKK3sKKyAgICBkZWJ1ZygiZmlyc3QgZ2VzdHVy
ZSIpOworICAgIHdpbmRvdy5pbnRlcm5hbHMuZW5hYmxlR2VzdHVyZVNjcm9sbEV2ZW50UmVjb3Jk
KGRvY3VtZW50KTsKKyAgICB3aW5kb3cuaW50ZXJuYWxzLnNlbmRTY3JvbGxCZWdpbkdlc3R1cmVF
dmVudChkb2N1bWVudCwgMTAsIDcyKTsKKyAgICB3aW5kb3cuaW50ZXJuYWxzLnNlbmRTY3JvbGxV
cGRhdGVHZXN0dXJlRXZlbnQoZG9jdW1lbnQsIDEwLCA3MiwgMCwgLTMwKTsKKyAgICB3aW5kb3cu
aW50ZXJuYWxzLnNlbmRTY3JvbGxVcGRhdGVHZXN0dXJlRXZlbnQoZG9jdW1lbnQsIDEwLCAzMiwg
MCwgLTQwKTsKKyAgICB3aW5kb3cuaW50ZXJuYWxzLnNlbmRTY3JvbGxFbmRHZXN0dXJlRXZlbnQo
ZG9jdW1lbnQsIDEwLCAzMiwgMCwgMCk7CisKKyAgICAvLyBXYWl0IGZvciBsYXlvdXQuCisgICAg
Y2hlY2tTY3JvbGxPZmZzZXQoKTsKK30KKworZnVuY3Rpb24gc2Vjb25kVG91Y2hEcmFnU2VxdWVu
Y2UoKQoreworICAgIGRlYnVnKCJzZWNvbmQgZ2VzdHVyZSIpOworICAgIHdpbmRvdy5pbnRlcm5h
bHMuZW5hYmxlR2VzdHVyZVNjcm9sbEV2ZW50UmVjb3JkKGRvY3VtZW50KTsKKyAgICB3aW5kb3cu
aW50ZXJuYWxzLnNlbmRTY3JvbGxCZWdpbkdlc3R1cmVFdmVudChkb2N1bWVudCwgMTIsIDQwKTsK
KyAgICB3aW5kb3cuaW50ZXJuYWxzLnNlbmRTY3JvbGxVcGRhdGVHZXN0dXJlRXZlbnQoZG9jdW1l
bnQsIDEyLCA0MCwgMCwgLTMwKTsKKyAgICB3aW5kb3cuaW50ZXJuYWxzLnNlbmRTY3JvbGxVcGRh
dGVHZXN0dXJlRXZlbnQoZG9jdW1lbnQsIDEyLCAxMCwgMCwgLTMwKTsKKyAgICB3aW5kb3cuaW50
ZXJuYWxzLnNlbmRTY3JvbGxFbmRHZXN0dXJlRXZlbnQoZG9jdW1lbnQsIDEyLCAxMCwgMCwgMCk7
CisKKyAgICAvLyBXYWl0IGZvciBsYXlvdXQuCisgICAgY2hlY2tTY3JvbGxPZmZzZXQoKTsKK30K
KworZnVuY3Rpb24gZXhpdElmTmVjZXNzYXJ5KCkKK3sKKyAgICBkZWJ1Zygnd2luZG93LmludGVy
bmFscyAgbm90IGltcGxlbWVudGVkIG9uIHRoaXMgcGxhdGZvcm0gb3IgZ2VzdHVyZSBldmVudCBz
Y3JvbGxpbmcgb2YgYSBkb2N1bWVudCBpcyBicm9rZW4nKTsKKyAgICBzdWNjZXNzZnVsbHlQYXJz
ZWQgPSB0cnVlOworICAgIGlzU3VjY2Vzc2Z1bGx5UGFyc2VkKCk7CisgICAgaWYgKHdpbmRvdy5s
YXlvdXRUZXN0Q29udHJvbGxlcikKKyAgICAgICAgbGF5b3V0VGVzdENvbnRyb2xsZXIubm90aWZ5
RG9uZSgpOworfQorCitpZiAod2luZG93LmxheW91dFRlc3RDb250cm9sbGVyKQorICAgIGxheW91
dFRlc3RDb250cm9sbGVyLndhaXRVbnRpbERvbmUoKTsKKworZnVuY3Rpb24gY2hlY2tUZXN0RGVw
ZW5kZW5jaWVzKCkKK3sKKyAgICByZXR1cm4gd2luZG93LmV2ZW50U2VuZGVyICYmIHdpbmRvdy5p
bnRlcm5hbHMgJiYgd2luZG93LmludGVybmFscy5zZW5kU2Nyb2xsQmVnaW5HZXN0dXJlRXZlbnQg
JiYgd2luZG93LmludGVybmFscy5zZW5kU2Nyb2xsVXBkYXRlR2VzdHVyZUV2ZW50ICYmIHdpbmRv
dy5pbnRlcm5hbHMuc2VuZFNjcm9sbEVuZEdlc3R1cmVFdmVudDsKK30KKworZnVuY3Rpb24gcnVu
VGVzdCgpCit7CisgICAgYnVpbGRQYWdlKCk7CisKKyAgICBpZiAod2luZG93LmV2ZW50U2VuZGVy
ICYmIHdpbmRvdy5pbnRlcm5hbHMpIHsKKyAgICAgICAgZGVzY3JpcHRpb24oJ1RoaXMgdGVzdHMg
c2Nyb2xsIGdlc3R1cmUgZXZlbnQgc2Nyb2xsaW5nIG9uIGEgd2hvbGUgcGFnZS4nKTsKKyAgICAg
ICAgaWYgKGNoZWNrVGVzdERlcGVuZGVuY2llcygpKQorICAgICAgICAgICAgZmlyc3RUb3VjaERy
YWdTZXF1ZW5jZSgpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBleGl0SWZOZWNlc3Nhcnko
KTsKKyAgICB9IGVsc2UgeworICAgICAgICBkZWJ1ZygiVGhpcyB0ZXN0IHJlcXVpcmVzIER1bXBS
ZW5kZXJUcmVlIGFuZCB3aW5kb3cuaW50ZXJuYWxzLiAgVG91Y2gtc2Nyb2xsIHRoZSBwYWdlIHRv
IHZhbGlkYXRlIHRoZSBpbXBsZW1lbnRhdGlvbi4iKTsKKyAgICAgICAgZG9jdW1lbnQuYWRkRXZl
bnRMaXN0ZW5lcigndG91Y2hlbmQnLCBmaW5nZXJVcCwgZmFsc2UpOworICAgIH0KK30KKzwvc2Ny
aXB0PgorCisKKworPC9ib2R5PgorPC9odG1sPgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvZmFz
dC9ldmVudHMvdG91Y2gvZ2VzdHVyZS90b3VjaC1nZXN0dXJlLXNjcm9sbC1zaHktdGFyZ2V0LWV4
cGVjdGVkLnR4dCBiL0xheW91dFRlc3RzL2Zhc3QvZXZlbnRzL3RvdWNoL2dlc3R1cmUvdG91Y2gt
Z2VzdHVyZS1zY3JvbGwtc2h5LXRhcmdldC1leHBlY3RlZC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uODllODIy
ZjQ1YmFkMjM0YmUxMGMwN2Q5YTI2ODI5N2YwNjM5MzdmMAotLS0gL2Rldi9udWxsCisrKyBiL0xh
eW91dFRlc3RzL2Zhc3QvZXZlbnRzL3RvdWNoL2dlc3R1cmUvdG91Y2gtZ2VzdHVyZS1zY3JvbGwt
c2h5LXRhcmdldC1leHBlY3RlZC50eHQKQEAgLTAsMCArMSwxNSBAQAorVGhpcyB0ZXN0cyBnZXN0
dXJlIHNjcm9sbGluZyB0byBhIGRpdiBkZWxldGVkIHdoaWxlIGxhdGNoZWQsIFNxdWFyZSBpcyAo
bW9zdGx5KSBncmVlbiBvbiBwYXNzCisKK09uIHN1Y2Nlc3MsIHlvdSB3aWxsIHNlZSBhIHNlcmll
cyBvZiAiUEFTUyIgbWVzc2FnZXMsIGZvbGxvd2VkIGJ5ICJURVNUIENPTVBMRVRFIi4KKworCitm
aXJzdCBnZXN0dXJlCitQQVNTIG1vdmluZ2Rpdi5zY3JvbGxUb3AgaXMgNjIKK1BBU1MgbW92aW5n
ZGl2LnNjcm9sbExlZnQgaXMgNjMKK1BBU1Mgd2luZG93LmludGVybmFscy5yZWNvcmRPZkdlc3R1
cmVTY3JvbGxFdmVudHMobW92aW5nZGl2KSBpcyAxMworc2Vjb25kIGdlc3R1cmUKK3JlY2VpdmVk
IGVsZW1lbnQgcmVtb3Zpbmcga2V5cHJlc3MKK1BBU1Mgc3VjY2Vzc2Z1bGx5UGFyc2VkIGlzIHRy
dWUKKworVEVTVCBDT01QTEVURQorCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9mYXN0L2V2ZW50
cy90b3VjaC9nZXN0dXJlL3RvdWNoLWdlc3R1cmUtc2Nyb2xsLXNoeS10YXJnZXQuaHRtbCBiL0xh
eW91dFRlc3RzL2Zhc3QvZXZlbnRzL3RvdWNoL2dlc3R1cmUvdG91Y2gtZ2VzdHVyZS1zY3JvbGwt
c2h5LXRhcmdldC5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmQ2ZmNhMDgxZTYwMWFjYjExMjFhNTIyODE0NzU3
Y2VlNjIxN2U2NzUKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9mYXN0L2V2ZW50cy90
b3VjaC9nZXN0dXJlL3RvdWNoLWdlc3R1cmUtc2Nyb2xsLXNoeS10YXJnZXQuaHRtbApAQCAtMCww
ICsxLDE5MyBAQAorPCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9JRVRGLy9EVEQgSFRNTC8vRU4i
PgorPGh0bWw+Cis8aGVhZD4KKzxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iLi4vLi4vLi4v
anMvcmVzb3VyY2VzL2pzLXRlc3Qtc3R5bGUuY3NzIj4KKzxzY3JpcHQgc3JjPSIuLi8uLi8uLi9q
cy9yZXNvdXJjZXMvanMtdGVzdC1wcmUuanMiPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9Ii4uLy4u
Ly4uL2pzL3Jlc291cmNlcy9qcy10ZXN0LXBvc3QtZnVuY3Rpb24uanMiPjwvc2NyaXB0PgorPHN0
eWxlIHR5cGU9InRleHQvY3NzIj4KKyN0b3VjaHRhcmdldCB7CisgIHdpZHRoOiAxMDBweDsKKyAg
aGVpZ2h0OiAxMDBweDsKKyAgcG9zaXRpb246IGFic29sdXRlOworICBiYWNrZ3JvdW5kOiB3aGl0
ZTsKKyAgdG9wOiAxMDBweDsKKyAgbGVmdDogMTAwcHg7Cit9CisKKyNtb3Zpbmdib3ggeworICB3
aWR0aDogMTAwJTsKKyAgaGVpZ2h0OiAxMDAlOworICBwb3NpdGlvbjogYWJzb2x1dGU7CisgIHdv
cmQtd3JhcDogYnJlYWstd29yZDsKKyAgb3ZlcmZsb3cteTogc2Nyb2xsOworICBvdmVyZmxvdy14
OiBzY3JvbGw7CisgIGRpc3BsYXk6IGJsb2NrOworfQorCisuZ3JlZW5ib3ggeworICB3aWR0aDog
MTAwcHg7CisgIGhlaWdodDogMTAwcHg7CisgIGJhY2tncm91bmQ6IGdyZWVuOworICBwYWRkaW5n
OiAwcHg7CisgIG1hcmdpbjogMHB4OworfQorCisucmVkYm94IHsKKyAgd2lkdGg6IDEwMHB4Owor
ICBoZWlnaHQ6IDEwMHB4OworICBiYWNrZ3JvdW5kOiByZWQ7CisgIHBhZGRpbmc6IDBweDsKKyAg
bWFyZ2luOiAwcHg7Cit9CisKK3RkIHsKKyAgcGFkZGluZzogMHB4OworfQorPC9zdHlsZT4KKzwv
aGVhZD4KKzxib2R5IHN0eWxlPSJtYXJnaW46MCIgb25sb2FkPSJydW5UZXN0KCk7Ij4KKzxkaXYg
aWQ9InRvdWNodGFyZ2V0Ij4KKyAgPGRpdiBpZD0ibW92aW5nYm94Ij4KKyAgICA8dGFibGUgYm9y
ZGVyPSIwIiBjZWxsc3BhY2luZz0iMHB4IiBpZD0idGFibGUiPgorICAgICAgPHRyPgorICAgICAg
ICA8dGQ+PGRpdiBjbGFzcz0icmVkYm94IiBpZD0icmVkYm94Ij48L2Rpdj48L3RkPgorICAgICAg
ICA8dGQ+PGRpdiBjbGFzcz0iZ3JlZW5ib3giIGlkPSJncmVlbmJveF8xIj48L2Rpdj48L3RkPgor
ICAgICAgPC90cj4KKyAgICAgIDx0cj4KKyAgICAgICAgPHRkPjxkaXYgY2xhc3M9ImdyZWVuYm94
IiBpZD0iZ3JlZW5ib3hfMiI+PC9kaXY+PC90ZD4KKyAgICAgICAgPHRkPjxkaXYgY2xhc3M9Imdy
ZWVuYm94IiBpZD0iZ3JlZW5ib3hfMyI+PC9kaXY+PC90ZD4KKyAgICAgIDwvdHI+CisgICAgPC90
YWJsZT4KKyAgPC9kaXY+Cis8L2Rpdj4KKworPHAgaWQ9ImRlc2NyaXB0aW9uIj48L3A+Cis8ZGl2
IGlkPSJjb25zb2xlIj48L2Rpdj4KKzxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KKwor
dmFyIG1vdmluZ2RpdjsKK3ZhciBleHBlY3RlZFNjcm9sbHNUb3RhbCA9IDI7Cit2YXIgc2Nyb2xs
c09jY3VycmVkID0gMDsKK3ZhciBzY3JvbGxBbW91bnRYID0gWyc2MycsICc5MCddOwordmFyIHNj
cm9sbEFtb3VudFkgPSBbJzYyJywgJzk1J107Cit2YXIgZ2VzdHVyZURpc3BhdGNoUmVjb3JkID0g
WycxMycsICcxMyddOworCitkb2N1bWVudC5vbmtleXByZXNzID0gZnVuY3Rpb24oKQoreworICAg
IGRlYnVnKCdyZWNlaXZlZCBlbGVtZW50IHJlbW92aW5nIGtleXByZXNzJyk7CisgICAgdmFyIHBh
cmVudCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b3VjaHRhcmdldCcpOworICAgIG1vdmlu
Z2RpdiA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdtb3Zpbmdib3gnKTsKKyAgICBwYXJlbnQu
cmVtb3ZlQ2hpbGQobW92aW5nZGl2KTsKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK2Z1bmN0aW9u
IGxvZ0ZpcnN0VG91Y2hQb2ludChldmVudCkKK3sKKyAgICBkZWJ1ZygnY2xpZW50IGlkJyArIGV2
ZW50LnRhcmdldC5pZCk7CisgICAgZGVidWcoJ2NsaWVudFg6ICcgKyBldmVudC50b3VjaGVzWzBd
LmNsaWVudFggKyAnIGNsaWVudFk6ICcgKyBldmVudC50b3VjaGVzWzBdLmNsaWVudFkpOworfQor
CitmdW5jdGlvbiBjaGVja1Njcm9sbE9mZnNldCgpCit7CisgICAgbW92aW5nZGl2ID0gZG9jdW1l
bnQuZ2V0RWxlbWVudEJ5SWQoJ21vdmluZ2JveCcpOworICAgIGlmICh3aW5kb3cuZXZlbnRTZW5k
ZXIpIHsKKyAgICAgICAgc2hvdWxkQmUoJ21vdmluZ2Rpdi5zY3JvbGxUb3AnLCBzY3JvbGxBbW91
bnRZW3Njcm9sbHNPY2N1cnJlZF0pOworICAgICAgICBzaG91bGRCZSgnbW92aW5nZGl2LnNjcm9s
bExlZnQnLCBzY3JvbGxBbW91bnRYW3Njcm9sbHNPY2N1cnJlZF0pOworICAgICAgICBpZiAod2lu
ZG93LmludGVybmFscykgeworICAgICAgICAgICAgc2hvdWxkQmUoJ3dpbmRvdy5pbnRlcm5hbHMu
cmVjb3JkT2ZHZXN0dXJlU2Nyb2xsRXZlbnRzKG1vdmluZ2RpdiknLCBnZXN0dXJlRGlzcGF0Y2hS
ZWNvcmRbc2Nyb2xsc09jY3VycmVkXSk7CisgICAgICAgIH0KKyAgICAgICAgc2Nyb2xsc09jY3Vy
cmVkKys7CisgICAgfQorCisgICAgaWYgKHNjcm9sbHNPY2N1cnJlZCA9PSBleHBlY3RlZFNjcm9s
bHNUb3RhbCkgeworICAgICAgICAvLyBJZiB3ZSd2ZSBnb3QgaGVyZSwgd2UndmUgcGFzc2VkLgor
ICAgIH0gZWxzZSB7CisgICAgICAgIHNlY29uZFRvdWNoRHJhZ1NlcXVlbmNlKCk7CisgICAgfQor
fQorCitmdW5jdGlvbiBmaW5nZXJVcChldmVudCkKK3sKKyAgICBpZiAoIXdpbmRvdy5sYXlvdXRU
ZXN0Q29udHJvbGxlcikgeworICAgICAgICBkZWJ1ZygnbW92ZWQ6ICcgKyBldmVudC5jdXJyZW50
VGFyZ2V0LnNjcm9sbFRvcCArICcsICcgKyBldmVudC5jdXJyZW50VGFyZ2V0LnNjcm9sbExlZnQp
OworICAgICAgICBkZWJ1ZygndGFyZ2V0OiAnICsgZXZlbnQuY3VycmVudFRhcmdldC5pZCk7Cisg
ICAgfQorICAgIHJldHVybiB0cnVlOyAgLy8gV2FudCB0aGUgZGVmYXVsdCBiZWhhdmlvdXIuCit9
CisKK2Z1bmN0aW9uIGZpcnN0VG91Y2hEcmFnU2VxdWVuY2UoKQoreworICAgIGRlYnVnKCJmaXJz
dCBnZXN0dXJlIik7CisgICAgbW92aW5nZGl2ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ21v
dmluZ2JveCcpOworICAgIHdpbmRvdy5pbnRlcm5hbHMuZW5hYmxlR2VzdHVyZVNjcm9sbEV2ZW50
UmVjb3JkKG1vdmluZ2Rpdik7CisKKyAgICB3aW5kb3cuaW50ZXJuYWxzLnNlbmRTY3JvbGxCZWdp
bkdlc3R1cmVFdmVudChkb2N1bWVudCwgMTAxLCAxMDEpOworICAgIHdpbmRvdy5pbnRlcm5hbHMu
c2VuZFNjcm9sbFVwZGF0ZUdlc3R1cmVFdmVudChkb2N1bWVudCwgMTAxLCAxMDEsIC0yMCwgLTI4
KTsKKyAgICB3aW5kb3cuaW50ZXJuYWxzLnNlbmRTY3JvbGxVcGRhdGVHZXN0dXJlRXZlbnQoZG9j
dW1lbnQsIDg3LCA5NywgLTE0LCAtNCk7CisgICAgd2luZG93LmludGVybmFscy5zZW5kU2Nyb2xs
VXBkYXRlR2VzdHVyZUV2ZW50KGRvY3VtZW50LCA1OCwgNjcsIC0yOSwgLTMwKTsKKyAgICB3aW5k
b3cuaW50ZXJuYWxzLnNlbmRTY3JvbGxFbmRHZXN0dXJlRXZlbnQoZG9jdW1lbnQsIDU4LCA2Nywg
MCwgMCk7CisKKyAgICAvLyBXYWl0IGZvciBsYXlvdXQuCisgICAgY2hlY2tTY3JvbGxPZmZzZXQo
KTsKK30KKworZnVuY3Rpb24gc2Vjb25kVG91Y2hEcmFnU2VxdWVuY2UoKQoreworICAgIG1vdmlu
Z2Rpdi5zY3JvbGxUb3AgPSAwOworICAgIG1vdmluZ2Rpdi5zY3JvbGxMZWZ0ID0gMDsKKworICAg
IGRlYnVnKCJzZWNvbmQgZ2VzdHVyZSIpOworICAgIHdpbmRvdy5pbnRlcm5hbHMuc2VuZFNjcm9s
bEJlZ2luR2VzdHVyZUV2ZW50KGRvY3VtZW50LCAxMDEsIDEwMSk7CisgICAgd2luZG93LmludGVy
bmFscy5zZW5kU2Nyb2xsVXBkYXRlR2VzdHVyZUV2ZW50KGRvY3VtZW50LCAxMDEsIDEwMSwgLTIw
LCAtMjgpOworICAgIHdpbmRvdy5pbnRlcm5hbHMuc2VuZFNjcm9sbFVwZGF0ZUdlc3R1cmVFdmVu
dChkb2N1bWVudCwgODcsIDk3LCAtMTQsIC00KTsKKworICAgIC8vIFNlbmQgYSBrZXkgdG8gZGVs
ZXRlIHRoZSB0YXJnZXQgRWxlbWVudC4KKyAgICBldmVudFNlbmRlci5rZXlEb3duKCJkIiwgW10p
OworICAgIAorICAgIHdpbmRvdy5pbnRlcm5hbHMuc2VuZFNjcm9sbFVwZGF0ZUdlc3R1cmVFdmVu
dChkb2N1bWVudCwgNTgsIDY3LCAtMjksIC0zMCk7CisgICAgd2luZG93LmludGVybmFscy5zZW5k
U2Nyb2xsRW5kR2VzdHVyZUV2ZW50KGRvY3VtZW50LCA1OCwgNjcsIDAsIDApOworCisgICAgLy8g
QnkgZ2V0dGluZyBoZXJlIHN1Y2Nlc3NmdWxseSwgdGhlIHRlc3QgZGVtb25zdHJhdGVzIHRoYXQg
dGhlIGltcGxlbWVudGF0aW9uCisgICAgLy8gZG9lcyBub3QgY3Jhc2ggd2hlbiB0aGUgbGF0Y2hl
ZCBFbGVtZW50IGlzIHJlbW92ZWQgZnJvbSB0aGUgRE9NLgorICAgIHN1Y2Nlc3NmdWxseVBhcnNl
ZCA9IHRydWU7CisgICAgaXNTdWNjZXNzZnVsbHlQYXJzZWQoKTsKKyAgICBpZiAod2luZG93Lmxh
eW91dFRlc3RDb250cm9sbGVyKQorICAgICAgICBsYXlvdXRUZXN0Q29udHJvbGxlci5ub3RpZnlE
b25lKCk7Cit9CisKK2Z1bmN0aW9uIGV4aXRJZk5lY2Vzc2FyeSgpCit7CisgICAgZGVidWcoJ3dp
bmRvdy5pbnRlcm5hbHMgbm90IGltcGxlbWVudGVkIG9uIHRoaXMgcGxhdGZvcm0gb3IgZ2VzdHVy
ZSBzY3JvbGwgaGFuZGxpbmcgYnJva2VuJyk7CisgICAgc3VjY2Vzc2Z1bGx5UGFyc2VkID0gdHJ1
ZTsKKyAgICBpc1N1Y2Nlc3NmdWxseVBhcnNlZCgpOworICAgIGlmICh3aW5kb3cubGF5b3V0VGVz
dENvbnRyb2xsZXIpCisgICAgICAgIGxheW91dFRlc3RDb250cm9sbGVyLm5vdGlmeURvbmUoKTsK
K30KKworaWYgKHdpbmRvdy5sYXlvdXRUZXN0Q29udHJvbGxlcikKKyAgICBsYXlvdXRUZXN0Q29u
dHJvbGxlci53YWl0VW50aWxEb25lKCk7CisKK2Z1bmN0aW9uIGNoZWNrVGVzdERlcGVuZGVuY2ll
cygpCit7CisgICAgcmV0dXJuIHdpbmRvdy5ldmVudFNlbmRlciAmJiB3aW5kb3cuaW50ZXJuYWxz
ICYmIHdpbmRvdy5pbnRlcm5hbHMuc2VuZFNjcm9sbEJlZ2luR2VzdHVyZUV2ZW50ICYmIHdpbmRv
dy5pbnRlcm5hbHMuc2VuZFNjcm9sbFVwZGF0ZUdlc3R1cmVFdmVudCAmJiB3aW5kb3cuaW50ZXJu
YWxzLnNlbmRTY3JvbGxFbmRHZXN0dXJlRXZlbnQ7Cit9CisKK2Z1bmN0aW9uIHJ1blRlc3QoKQor
eworICAgIGlmICh3aW5kb3cuZXZlbnRTZW5kZXIpIHsKKyAgICAgICAgZGVzY3JpcHRpb24oJ1Ro
aXMgdGVzdHMgZ2VzdHVyZSBzY3JvbGxpbmcgdG8gYSBkaXYgZGVsZXRlZCB3aGlsZSBsYXRjaGVk
LCAnICsgCisgICAgICAgICAgICAnU3F1YXJlIGlzIChtb3N0bHkpIGdyZWVuIG9uIHBhc3MnKTsK
KyAgICAgICAgaWYgKGNoZWNrVGVzdERlcGVuZGVuY2llcygpKQorICAgICAgICAgICAgZmlyc3RU
b3VjaERyYWdTZXF1ZW5jZSgpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBleGl0SWZOZWNl
c3NhcnkoKTsKKyAgICB9IGVsc2UgeworICAgICAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVy
KCd0b3VjaHN0YXJ0JywgbG9nRmlyc3RUb3VjaFBvaW50KTsKKyAgICAgICAgZG9jdW1lbnQuYWRk
RXZlbnRMaXN0ZW5lcigndG91Y2htb3ZlJywgbG9nRmlyc3RUb3VjaFBvaW50KTsKKyAgICAgICAg
ZGVidWcoIlRoaXMgdGVzdCByZXF1aXJlcyBEdW1wUmVuZGVyVHJlZSBhbmQgd2luZG93LmludGVy
bmFscy4gIFRvdWNoLXNjcm9sbCB0aGUgcmVkIHJlY3QgdG8gbG9nLiIpOworICAgICAgICBtb3Zp
bmdkaXYuYWRkRXZlbnRMaXN0ZW5lcigndG91Y2hlbmQnLCBmaW5nZXJVcCwgZmFsc2UpOworICAg
IH0KK30KKzwvc2NyaXB0PgorPC9ib2R5PgorPC9odG1sPgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVz
dHMvZmFzdC9ldmVudHMvdG91Y2gvcmVzb3VyY2VzL3Njcm9sbC1pbnNpZGUtaWZyYW1lLmh0bWwg
Yi9MYXlvdXRUZXN0cy9mYXN0L2V2ZW50cy90b3VjaC9yZXNvdXJjZXMvc2Nyb2xsLWluc2lkZS1p
ZnJhbWUuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwLi45NGY3ODg3N2M1MmJhNTc2YjRjNTExODAwZjQxNGI4NGQw
NDM3ZDljCi0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvZmFzdC9ldmVudHMvdG91Y2gv
cmVzb3VyY2VzL3Njcm9sbC1pbnNpZGUtaWZyYW1lLmh0bWwKQEAgLTAsMCArMSwzNCBAQAorPGh0
bWw+Cis8aGVhZD4KKzxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+CisjZ3JlZW5ib3ggeworICB3aWR0
aDogMTAwcHg7CisgIGhlaWdodDogMTAwcHg7CisgIGJhY2tncm91bmQ6IGdyZWVuOworICBwYWRk
aW5nOiAwcHg7CisgIG1hcmdpbjogMHB4O2EKK30KKyNyZWRib3ggeworICB3aWR0aDogMTAwcHg7
CisgIGhlaWdodDogMTAwcHg7CisgIGJhY2tncm91bmQ6IHJlZDsKKyAgcGFkZGluZzogMHB4Owor
ICBtYXJnaW46IDBweDsKK30KKwordGQgeworICBwYWRkaW5nOiAwcHg7Cit9Cis8L3N0eWxlPgor
PC9oZWFkPgorPGJvZHkgc3R5bGU9Im1hcmdpbjowIiBvbmxvYWQ9InBhcmVudC5ydW5UZXN0KCki
PgorCis8dGFibGUgaWQ9InRhYmxlX3RvX2ZpbGwiPgorICAgIDx0cj48dGQ+PGRpdiBpZD0iZ3Jl
ZW5ib3giPjwvZGl2PjwvdGQ+PC90cj4KKyAgICA8dHI+PHRkPjxkaXYgaWQ9InJlZGJveCI+PC9k
aXY+PC90ZD48L3RyPgorICAgIDx0cj48dGQ+PGRpdiBpZD0iZ3JlZW5ib3giPjwvZGl2PjwvdGQ+
PC90cj4KKyAgICA8dHI+PHRkPjxkaXYgaWQ9InJlZGJveCI+PC9kaXY+PC90ZD48L3RyPgorPC90
YWJsZT4KKzxib2R5PgorPC9odG1sPgorCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>121327</attachid>
            <date>2012-01-05 14:10:41 -0800</date>
            <delta_ts>2012-01-05 14:44:27 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-67822-20120105171040.patch</filename>
            <type>text/plain</type>
            <size>64068</size>
            <attacher name="Robert Kroeger">rjkroege</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTA0MTgyCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNTM5NGFhYjkzYzFmOTY1
MzhmMDJmYmYwODI2MTAzZWRkMWExODRjNC4uYzE0YWI0NDFhZTY1NzhiZWNiNDc4NDhkY2VhYjRm
NTdiMTNlZmYxMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDY4IEBACisyMDEyLTAxLTA1ICBSb2Jl
cnQgS3JvZWdlciAgPHJqa3JvZWdlQGNocm9taXVtLm9yZz4KKworICAgICAgICBQbGF0Zm9ybUdl
c3R1cmVFdmVudDo6aGFuZGxlR2VzdHVyZUV2ZW50IHNob3VsZCBoaXQgdGVzdCB3aGlsZSBkaXNw
YXRjaGluZyBQbGF0Zm9ybUV2ZW50OjpHZXN0dXJlU2Nyb2xsKiBldmVudHMuCisgICAgICAgIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD02NzgyMgorICAgICAgICAKKyAg
ICAgICAgUGxhdGZvcm1FdmVudCBHZXN0dXJlIFNjcm9sbCpUeXBlIGV2ZW50IHNlcXVlbmNlcyBz
aG91bGQgYWxsCisgICAgICAgIGdvIHRvIHRoZSB0YXJnZXQgKG5vZGUsIHBhZ2UsIHdpZGdldCkg
c3BlY2lmaWVkIGJ5IHRoZSBzdGFydGluZworICAgICAgICBHZXN0dXJlU2Nyb2xsQmVnaW4gZXZl
bnQuIFRoaXMgY2hhbmdlIHBsdW1icyBHZXN0dXJlU2Nyb2xsVXBkYXRlCisgICAgICAgIGluc3Rh
bmNlcyB0aHJvdWdoIHRoZSBleGlzdGluZyBzY3JvbGwgY29kZSBzaW1pbGFyIHRvIGhvdyBXaGVl
bAorICAgICAgICBpbnN0YW5jZXMgYXJlIGRlbGl2ZXJlZCBhbmQgYWRkcyB0aGUgbmVjZXNzYXJ5
IGNvZGUgdG8gcGx1bWIKKyAgICAgICAgR2VzdHVyZVNjcm9sbEJlZ2luIGFuZCBHZXN0dXJlU2Ny
b2xsQmVnaW4gaW5zdGFuY2VzIHRocm91Z2ggdG8KKyAgICAgICAgdGhlIGV4aXN0aW5nIFNjcm9s
bGFibGVBcmVhOjpoYW5kbGVHZXN0dXJlRXZlbnQgbWV0aG9kLgorIAorICAgICAgICBSZXZpZXdl
ZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBUZXN0czogZmFzdC9ldmVudHMvdG91Y2gv
Z2VzdHVyZS90b3VjaC1nZXN0dXJlLXNjcm9sbC1kaXYuaHRtbAorICAgICAgICAgICAgICAgZmFz
dC9ldmVudHMvdG91Y2gvZ2VzdHVyZS90b3VjaC1nZXN0dXJlLXNjcm9sbC1pZnJhbWUuaHRtbAor
ICAgICAgICAgICAgICAgZmFzdC9ldmVudHMvdG91Y2gvZ2VzdHVyZS90b3VjaC1nZXN0dXJlLXNj
cm9sbC1wYWdlLmh0bWwKKyAgICAgICAgICAgICAgIGZhc3QvZXZlbnRzL3RvdWNoL2dlc3R1cmUv
dG91Y2gtZ2VzdHVyZS1zY3JvbGwtc2h5LXRhcmdldC5odG1sCisKKyAgICAgICAgKiBwYWdlL0V2
ZW50SGFuZGxlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjp3aGVlbEdyYW51bGFyaXR5VG9TY3Jv
bGxHcmFudWxhcml0eSk6CisgICAgICAgIChXZWJDb3JlOjpzY3JvbGxOb2RlKToKKyAgICAgICAg
KFdlYkNvcmU6Omdlc3R1cmVOb2RlKTogCisgICAgICAgIChXZWJDb3JlOjpFdmVudEhhbmRsZXI6
OmNsZWFyKTogTWlub3IgcmVmYWN0b3JpbmcgZm9yIGNvZGUgc2hhcmluZy4KKyAgICAgICAgKFdl
YkNvcmU6OkV2ZW50SGFuZGxlcjo6ZGV0ZWN0QW5kUGFzc0dlc3R1cmVFdmVudFRvV2lkZ2V0KToK
KyAgICAgICAgKFdlYkNvcmU6OkV2ZW50SGFuZGxlcjo6cGFzc0dlc3R1cmVFdmVudFRvRnJhbWVW
aWV3KToKKyAgICAgICAgKFdlYkNvcmU6OkV2ZW50SGFuZGxlcjo6aGFuZGxlR2VzdHVyZUV2ZW50
KTogTW9kaWZpZWQgYXMgZGVzY3JpYmVkIGFib3ZlLgorICAgICAgICAqIHBhZ2UvRXZlbnRIYW5k
bGVyLmg6CisgICAgICAgICogcGFnZS9jaHJvbWl1bS9FdmVudEhhbmRsZXJDaHJvbWl1bS5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpFdmVudEhhbmRsZXI6OnBhc3NHZXN0dXJlRXZlbnRUb1dpZGdl
dCk6CisgICAgICAgICogcGFnZS9lZmwvRXZlbnRIYW5kbGVyRWZsLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OkV2ZW50SGFuZGxlcjo6cGFzc0dlc3R1cmVFdmVudFRvV2lkZ2V0KToKKyAgICAgICAg
KiBwYWdlL2d0ay9FdmVudEhhbmRsZXJHdGsuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RXZlbnRI
YW5kbGVyOjpwYXNzR2VzdHVyZUV2ZW50VG9XaWRnZXQpOgorICAgICAgICAqIHBhZ2UvbWFjL0V2
ZW50SGFuZGxlck1hYy5tbToKKyAgICAgICAgKFdlYkNvcmU6OkV2ZW50SGFuZGxlcjo6cGFzc0dl
c3R1cmVFdmVudFRvV2lkZ2V0KToKKyAgICAgICAgKiBwYWdlL3F0L0V2ZW50SGFuZGxlclF0LmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OkV2ZW50SGFuZGxlcjo6cGFzc0dlc3R1cmVFdmVudFRvV2lk
Z2V0KToKKyAgICAgICAgKiBwYWdlL3dpbi9FdmVudEhhbmRsZXJXaW4uY3BwOgorICAgICAgICAo
V2ViQ29yZTo6RXZlbnRIYW5kbGVyOjpwYXNzR2VzdHVyZUV2ZW50VG9XaWRnZXQpOgorICAgICAg
ICAqIHBhZ2Uvd3gvRXZlbnRIYW5kbGVyV3guY3BwOgorICAgICAgICAoV2ViQ29yZTo6RXZlbnRI
YW5kbGVyOjpwYXNzR2VzdHVyZUV2ZW50VG9XaWRnZXQpOgorICAgICAgICAqIHBsYXRmb3JtL1Nj
cm9sbEFuaW1hdG9yLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbEFuaW1hdG9yOjpzY3Jv
bGwpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsQW5pbWF0b3I6OmhhbmRsZUdlc3R1cmVFdmVu
dCk6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxBbmltYXRvcjo6Z2VzdHVyZUV2ZW50VGVzdFJl
Y29yZCk6IEFkZGVkOiBpbnRlcm5hbHMtb25seSBtZXRob2QgZm9yIHByb3ZpbmcgdGhhdCBhbGwg
Z2VzdHVyZSBldmVudHMgYXJyaXZlIGF0IHRoZSBjb3JyZWN0IChpLmUuIHNhbWUpIGluc3RhbmNl
LgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsQW5pbWF0b3I6OmVuYWJsZUdlc3R1cmVFdmVudFRl
c3RSZWNvcmQpOiBBZGRlZDogaW50ZXJuYWxzLW9ubHkgbWV0aG9kIHRvIGFjdGljYXRlIHRlc3Rp
bmcuCisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxBbmltYXRvcjo6cmVjb3JkR2VzdHVyZUV2ZW50
UHJvY2Vzc2luZyk6IEFkZGVkOiB0ZXN0IGhlbHBlciBtZXRob2QKKyAgICAgICAgKiBwbGF0Zm9y
bS9TY3JvbGxBbmltYXRvci5oOgorICAgICAgICAqIHBsYXRmb3JtL1Njcm9sbEFuaW1hdG9yTm9u
ZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxBbmltYXRvck5vbmU6OmhhbmRsZUdlc3R1
cmVFdmVudCk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckJveC5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpSZW5kZXJCb3g6Omdlc3R1cmUpOiBEaXNwYXRjaCBnZXN0dXJlcyBpbiB0aGUgc2Ft
ZSBmYXNoaW9uIGFzIHNjcm9sbC4KKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyQm94Lmg6Cisg
ICAgICAgICogdGVzdGluZy9JbnRlcm5hbHMuY3BwOiBBZGRlZCBlbnRyeSBwb2ludHMgZm9yIGRp
c3BhdGNoaW5nIHN5bnRoZXRpYyBnZXN0dXJlIGV2ZW50cywgZW5hYmxpbmcgdGVzdCBoYW5kbGlu
ZyBhbmQgZGV0ZXJtaW5pbmcgaWYgYWxsIHJlcXVpc2l0ZSBldmVudHMgYXJyaXZlZCBhdCB0aGUg
dGFyZ2V0LgorICAgICAgICAoV2ViQ29yZTo6SW50ZXJuYWxzOjplbmFibGVHZXN0dXJlU2Nyb2xs
RXZlbnRSZWNvcmQpOgorICAgICAgICAoV2ViQ29yZTo6SW50ZXJuYWxzOjpyZWNvcmRPZkdlc3R1
cmVTY3JvbGxFdmVudHMpOgorICAgICAgICAoV2ViQ29yZTo6c2VuZEdlc3R1cmVFdmVudCk6Cisg
ICAgICAgIChXZWJDb3JlOjpJbnRlcm5hbHM6OnNlbmRTY3JvbGxCZWdpbkdlc3R1cmVFdmVudCk6
CisgICAgICAgIChXZWJDb3JlOjpJbnRlcm5hbHM6OnNlbmRTY3JvbGxVcGRhdGVHZXN0dXJlRXZl
bnQpOgorICAgICAgICAoV2ViQ29yZTo6SW50ZXJuYWxzOjpzZW5kU2Nyb2xsRW5kR2VzdHVyZUV2
ZW50KToKKyAgICAgICAgKiB0ZXN0aW5nL0ludGVybmFscy5oOgorICAgICAgICAqIHRlc3Rpbmcv
SW50ZXJuYWxzLmlkbDoKKwogMjAxMi0wMS0wNSAgSmlhbiBMaSAgPGppYW5saUBjaHJvbWl1bS5v
cmc+CiAKICAgICAgICAgRmlsZVJlYWRlciBuZWVkcyBhZGRFdmVudExpc3RlbmVyCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL0V2ZW50SGFuZGxlci5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9wYWdlL0V2ZW50SGFuZGxlci5jcHAKaW5kZXggYzIxZWI3ZTI1YzFkOWRjYTQ4MDY0ZDI5ODM5
NWIzMzRhYmVlNTI0Ni4uOTQ2N2Y5MGRkMzk0NDM4ZmM5NzU2MzYwM2U4MWVlYTlmZjdjMzkyZSAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGFnZS9FdmVudEhhbmRsZXIuY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3BhZ2UvRXZlbnRIYW5kbGVyLmNwcApAQCAtNjksNiArNjksNyBAQAogI2lu
Y2x1ZGUgIlJlbmRlclZpZXcuaCIKICNpbmNsdWRlICJSZW5kZXJXaWRnZXQuaCIKICNpbmNsdWRl
ICJTY3JvbGxBbmltYXRvci5oIgorI2luY2x1ZGUgIlNjcm9sbGFibGVBcmVhLmgiCiAjaW5jbHVk
ZSAiU2Nyb2xsYmFyLmgiCiAjaW5jbHVkZSAiU2V0dGluZ3MuaCIKICNpbmNsdWRlICJTcGF0aWFs
TmF2aWdhdGlvbi5oIgpAQCAtMTQyLDcgKzE0MywyMCBAQCBwcml2YXRlOgogICAgIEN1cnNvciBt
X2N1cnNvcjsKIH07CiAKLXN0YXRpYyBpbmxpbmUgYm9vbCBzY3JvbGxOb2RlKGZsb2F0IGRlbHRh
LCBXaGVlbEV2ZW50OjpHcmFudWxhcml0eSBncmFudWxhcml0eSwgU2Nyb2xsRGlyZWN0aW9uIHBv
c2l0aXZlRGlyZWN0aW9uLCBTY3JvbGxEaXJlY3Rpb24gbmVnYXRpdmVEaXJlY3Rpb24sIE5vZGUq
IG5vZGUsIE5vZGUqKiBzdG9wTm9kZSkKK3N0YXRpYyBpbmxpbmUgU2Nyb2xsR3JhbnVsYXJpdHkg
d2hlZWxHcmFudWxhcml0eVRvU2Nyb2xsR3JhbnVsYXJpdHkoV2hlZWxFdmVudDo6R3JhbnVsYXJp
dHkgZ3JhbnVsYXJpdHkpCit7CisgICAgc3dpdGNoIChncmFudWxhcml0eSkgeworICAgIGNhc2Ug
V2hlZWxFdmVudDo6UGFnZToKKyAgICAgICAgcmV0dXJuIFNjcm9sbEJ5UGFnZTsKKyAgICBjYXNl
IFdoZWVsRXZlbnQ6OkxpbmU6CisgICAgICAgIHJldHVybiBTY3JvbGxCeUxpbmU7CisgICAgY2Fz
ZSBXaGVlbEV2ZW50OjpQaXhlbDoKKyAgICAgICAgcmV0dXJuIFNjcm9sbEJ5UGl4ZWw7CisgICAg
fQorICAgIHJldHVybiBTY3JvbGxCeVBpeGVsOworfQorCitzdGF0aWMgaW5saW5lIGJvb2wgc2Ny
b2xsTm9kZShmbG9hdCBkZWx0YSwgU2Nyb2xsR3JhbnVsYXJpdHkgZ3JhbnVsYXJpdHksIFNjcm9s
bERpcmVjdGlvbiBwb3NpdGl2ZURpcmVjdGlvbiwgU2Nyb2xsRGlyZWN0aW9uIG5lZ2F0aXZlRGly
ZWN0aW9uLCBOb2RlKiBub2RlLCBOb2RlKiogc3RvcE5vZGUpCiB7CiAgICAgaWYgKCFkZWx0YSkK
ICAgICAgICAgcmV0dXJuIGZhbHNlOwpAQCAtMTUwLDIyICsxNjQsMjUgQEAgc3RhdGljIGlubGlu
ZSBib29sIHNjcm9sbE5vZGUoZmxvYXQgZGVsdGEsIFdoZWVsRXZlbnQ6OkdyYW51bGFyaXR5IGdy
YW51bGFyaXR5LAogICAgIGlmICghbm9kZS0+cmVuZGVyZXIoKSkKICAgICAgICAgcmV0dXJuIGZh
bHNlOwogICAgIAotICAgIC8vIEZpbmQgdGhlIG5lYXJlc3QgZW5jbG9zaW5nIGJveC4KICAgICBS
ZW5kZXJCb3gqIGVuY2xvc2luZ0JveCA9IG5vZGUtPnJlbmRlcmVyKCktPmVuY2xvc2luZ0JveCgp
OwotCiAgICAgZmxvYXQgYWJzRGVsdGEgPSBkZWx0YSA+IDAgPyBkZWx0YSA6IC1kZWx0YTsKLSAg
ICAKLSAgICBpZiAoZ3JhbnVsYXJpdHkgPT0gV2hlZWxFdmVudDo6UGFnZSkKLSAgICAgICAgcmV0
dXJuIGVuY2xvc2luZ0JveC0+c2Nyb2xsKGRlbHRhIDwgMCA/IG5lZ2F0aXZlRGlyZWN0aW9uIDog
cG9zaXRpdmVEaXJlY3Rpb24sIFNjcm9sbEJ5UGFnZSwgYWJzRGVsdGEsIHN0b3BOb2RlKTsKKyAg
ICByZXR1cm4gZW5jbG9zaW5nQm94LT5zY3JvbGwoZGVsdGEgPCAwID8gbmVnYXRpdmVEaXJlY3Rp
b24gOiBwb3NpdGl2ZURpcmVjdGlvbiwgZ3JhbnVsYXJpdHksIGFic0RlbHRhLCBzdG9wTm9kZSk7
Cit9CiAKLSAgICBpZiAoZ3JhbnVsYXJpdHkgPT0gV2hlZWxFdmVudDo6TGluZSkKLSAgICAgICAg
cmV0dXJuIGVuY2xvc2luZ0JveC0+c2Nyb2xsKGRlbHRhIDwgMCA/IG5lZ2F0aXZlRGlyZWN0aW9u
IDogcG9zaXRpdmVEaXJlY3Rpb24sIFNjcm9sbEJ5TGluZSwgYWJzRGVsdGEsIHN0b3BOb2RlKTsK
K3N0YXRpYyBpbmxpbmUgYm9vbCBzY3JvbGxOb2RlKGZsb2F0IGRlbHRhLCBXaGVlbEV2ZW50OjpH
cmFudWxhcml0eSBncmFudWxhcml0eSwgU2Nyb2xsRGlyZWN0aW9uIHBvc2l0aXZlRGlyZWN0aW9u
LCBTY3JvbGxEaXJlY3Rpb24gbmVnYXRpdmVEaXJlY3Rpb24sIE5vZGUqIG5vZGUsIE5vZGUqKiBz
dG9wTm9kZSkKK3sKKyAgICByZXR1cm4gc2Nyb2xsTm9kZShkZWx0YSwgd2hlZWxHcmFudWxhcml0
eVRvU2Nyb2xsR3JhbnVsYXJpdHkoZ3JhbnVsYXJpdHkpLCBwb3NpdGl2ZURpcmVjdGlvbiwgbmVn
YXRpdmVEaXJlY3Rpb24sIG5vZGUsIHN0b3BOb2RlKTsKK30KIAotICAgIGlmIChncmFudWxhcml0
eSA9PSBXaGVlbEV2ZW50OjpQaXhlbCkKLSAgICAgICAgcmV0dXJuIGVuY2xvc2luZ0JveC0+c2Ny
b2xsKGRlbHRhIDwgMCA/IG5lZ2F0aXZlRGlyZWN0aW9uIDogcG9zaXRpdmVEaXJlY3Rpb24sIFNj
cm9sbEJ5UGl4ZWwsIGFic0RlbHRhLCBzdG9wTm9kZSk7Ci0gICAgICAgIAotICAgIHJldHVybiBm
YWxzZTsKKyNpZiBFTkFCTEUoR0VTVFVSRV9FVkVOVFMpCitzdGF0aWMgaW5saW5lIGJvb2wgZ2Vz
dHVyZU5vZGUoY29uc3QgUGxhdGZvcm1HZXN0dXJlRXZlbnQmIGdlc3R1cmVFdmVudCwgTm9kZSog
bm9kZSkKK3sKKyAgICBpZiAoIW5vZGUtPnJlbmRlcmVyKCkpCisgICAgICAgIHJldHVybiBmYWxz
ZTsKKyAgICBSZW5kZXJCb3gqIGVuY2xvc2luZ0JveCA9IG5vZGUtPnJlbmRlcmVyKCktPmVuY2xv
c2luZ0JveCgpOworICAgIHJldHVybiBlbmNsb3NpbmdCb3gtPmdlc3R1cmUoZ2VzdHVyZUV2ZW50
KTsKIH0KKyNlbmRpZgogCiAjaWYgIVBMQVRGT1JNKE1BQykKIApAQCAtMjY3LDYgKzI4NCw5IEBA
IHZvaWQgRXZlbnRIYW5kbGVyOjpjbGVhcigpCiAjaWYgRU5BQkxFKFRPVUNIX0VWRU5UUykKICAg
ICBtX29yaWdpbmF0aW5nVG91Y2hQb2ludFRhcmdldHMuY2xlYXIoKTsKICNlbmRpZgorI2lmIEVO
QUJMRShHRVNUVVJFX0VWRU5UUykKKyAgICBtX2dlc3R1cmVUYXJnZXROb2RlLmNsZWFyKCk7Cisj
ZW5kaWYKIH0KIAogdm9pZCBFdmVudEhhbmRsZXI6Om5vZGVXaWxsQmVSZW1vdmVkKE5vZGUqIG5v
ZGVUb0JlUmVtb3ZlZCkKQEAgLTIyMjgsMTggKzIyNDgsNTUgQEAgdm9pZCBFdmVudEhhbmRsZXI6
OmRlZmF1bHRXaGVlbEV2ZW50SGFuZGxlcihOb2RlKiBzdGFydE5vZGUsIFdoZWVsRXZlbnQqIHdo
ZWVsRXYKIH0KIAogI2lmIEVOQUJMRShHRVNUVVJFX0VWRU5UUykKK2Jvb2wgRXZlbnRIYW5kbGVy
OjpkZXRlY3RBbmRQYXNzR2VzdHVyZUV2ZW50VG9XaWRnZXQoUGFzc1JlZlB0cjxOb2RlPiB0YXJn
ZXROb2RlLCBjb25zdCBQbGF0Zm9ybUdlc3R1cmVFdmVudCYgZ2VzdHVyZUV2ZW50LCBjb25zdCBI
aXRUZXN0UmVzdWx0JiByZXN1bHQpCit7CisgICAgTm9kZSogbm9kZSA9IHRhcmdldE5vZGUuZ2V0
KCk7CisgICAgaWYgKCFub2RlKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBib29sIGlz
T3ZlcldpZGdldCA9IHJlc3VsdC5pc092ZXJXaWRnZXQoKTsKKyAgICBSZW5kZXJPYmplY3QqIHRh
cmdldCA9IG5vZGUtPnJlbmRlcmVyKCk7CisgICAgaWYgKCEoaXNPdmVyV2lkZ2V0ICYmIHRhcmdl
dCAmJiB0YXJnZXQtPmlzV2lkZ2V0KCkpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAg
IAorICAgIFdpZGdldCogd2lkZ2V0ID0gdG9SZW5kZXJXaWRnZXQodGFyZ2V0KS0+d2lkZ2V0KCk7
CisgICAgaWYgKHdpZGdldCAmJiBwYXNzR2VzdHVyZUV2ZW50VG9XaWRnZXQoZ2VzdHVyZUV2ZW50
LCB3aWRnZXQpKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICByZXR1cm4gZmFsc2U7Cit9CisK
K2Jvb2wgRXZlbnRIYW5kbGVyOjpwYXNzR2VzdHVyZUV2ZW50VG9GcmFtZVZpZXcoY29uc3QgUGxh
dGZvcm1HZXN0dXJlRXZlbnQmIGdlc3R1cmVFdmVudCkKK3sKKyAgICBGcmFtZVZpZXcqIHZpZXcg
PSBtX2ZyYW1lLT52aWV3KCk7CisgICAgaWYgKCF2aWV3KQorICAgICAgIHJldHVybiBmYWxzZTsK
KworICAgIHZpZXctPmhhbmRsZUdlc3R1cmVFdmVudChnZXN0dXJlRXZlbnQpOworICAgIHJldHVy
biB0cnVlOworfQorCiBib29sIEV2ZW50SGFuZGxlcjo6aGFuZGxlR2VzdHVyZUV2ZW50KGNvbnN0
IFBsYXRmb3JtR2VzdHVyZUV2ZW50JiBnZXN0dXJlRXZlbnQpCiB7Ci0gICAgLy8gRklYTUU6IFRo
aXMgc2hvdWxkIGhpdCB0ZXN0IGFuZCBnbyB0byB0aGUgY29ycmVjdCBzdWJmcmFtZSByYXRoZXIg
dGhhbiAKLSAgICAvLyBhbHdheXMgc2VuZGluZyBnZXN0dXJlcyB0byB0aGUgbWFpbiBmcmFtZSBv
bmx5LiBXZSBzaG91bGQgYWxzbyBlbnN1cmUKLSAgICAvLyB0aGF0IGlmIGEgZnJhbWUgZ2V0cyBh
IGdlc3R1cmUgYmVnaW4gZ2VzdHVyZSwgaXQgZ2V0cyB0aGUgY29ycmVzcG9uZGluZwotICAgIC8v
IGVuZCBnZXN0dXJlIGFzIHdlbGwuCisgICAgRG9jdW1lbnQqIGRvY3VtZW50ID0gbV9mcmFtZS0+
ZG9jdW1lbnQoKTsKKyAgICBSZW5kZXJPYmplY3QqIGRvY3VtZW50UmVuZGVyZXIgPSBkb2N1bWVu
dC0+cmVuZGVyZXIoKTsKKyAgICBpZiAoIWRvY3VtZW50UmVuZGVyZXIpCisgICAgICAgIHJldHVy
biBmYWxzZTsKKyAgICBSZWZQdHI8RnJhbWVWaWV3PiBwcm90ZWN0b3IobV9mcmFtZS0+dmlldygp
KTsKKyAgICBGcmFtZVZpZXcqIHZpZXcgPSBtX2ZyYW1lLT52aWV3KCk7CisgICAgaWYgKCF2aWV3
KQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgc2V0RnJhbWVXYXNTY3JvbGxlZEJ5VXNlcigp
OworICAgIExheW91dFBvaW50IHBvaW50SW5WaWV3Q29vcmRpbmF0ZXMgPSB2aWV3LT53aW5kb3dU
b0NvbnRlbnRzKGdlc3R1cmVFdmVudC5wb3NpdGlvbigpKTsKKworICAgIEhpdFRlc3RSZXF1ZXN0
IHJlcXVlc3QoSGl0VGVzdFJlcXVlc3Q6OlJlYWRPbmx5KTsKKyAgICBIaXRUZXN0UmVzdWx0IHJl
c3VsdChwb2ludEluVmlld0Nvb3JkaW5hdGVzKTsKKyAgICBkb2N1bWVudC0+cmVuZGVyVmlldygp
LT5sYXllcigpLT5oaXRUZXN0KHJlcXVlc3QsIHJlc3VsdCk7CiAKICAgICBzd2l0Y2ggKGdlc3R1
cmVFdmVudC50eXBlKCkpIHsKICAgICBjYXNlIFBsYXRmb3JtRXZlbnQ6Okdlc3R1cmVUYXBEb3du
OgogICAgICAgICBicmVhazsKICAgICBjYXNlIFBsYXRmb3JtRXZlbnQ6Okdlc3R1cmVUYXA6IHsK
LSAgICAgICAgLy8gRklYTUU6IFJlZmFjdG9yIHRoaXMgY29kZSB0byBub3QgaGl0IHRlc3QgbXVs
dGlwbGUgdGltZXMgb25jZSBoaXQgdGVzdGluZyBoYXMgYmVlbiBjb3JyZWN0ZWQgYXMgc3VnZ2Vz
dGVkIGFib3ZlLgorICAgICAgICAvLyBGSVhNRTogUmVmYWN0b3IgdGhpcyBjb2RlIHRvIG5vdCBo
aXQgdGVzdCBtdWx0aXBsZSB0aW1lcyBieSB1c2luZyB0aGUgY29kZSB3cml0dGVuIGZvciBzY3Jv
bGwuCiAgICAgICAgIFBsYXRmb3JtTW91c2VFdmVudCBmYWtlTW91c2VNb3ZlKGdlc3R1cmVFdmVu
dC5wb3NpdGlvbigpLCBnZXN0dXJlRXZlbnQuZ2xvYmFsUG9zaXRpb24oKSwgTm9CdXR0b24sIFBs
YXRmb3JtRXZlbnQ6Ok1vdXNlTW92ZWQsIC8qIGNsaWNrQ291bnQgKi8gMSwgZ2VzdHVyZUV2ZW50
LnNoaWZ0S2V5KCksIGdlc3R1cmVFdmVudC5jdHJsS2V5KCksIGdlc3R1cmVFdmVudC5hbHRLZXko
KSwgZ2VzdHVyZUV2ZW50Lm1ldGFLZXkoKSwgZ2VzdHVyZUV2ZW50LnRpbWVzdGFtcCgpKTsKICAg
ICAgICAgUGxhdGZvcm1Nb3VzZUV2ZW50IGZha2VNb3VzZURvd24oZ2VzdHVyZUV2ZW50LnBvc2l0
aW9uKCksIGdlc3R1cmVFdmVudC5nbG9iYWxQb3NpdGlvbigpLCBMZWZ0QnV0dG9uLCBQbGF0Zm9y
bUV2ZW50OjpNb3VzZVByZXNzZWQsIC8qIGNsaWNrQ291bnQgKi8gMSwgZ2VzdHVyZUV2ZW50LnNo
aWZ0S2V5KCksIGdlc3R1cmVFdmVudC5jdHJsS2V5KCksIGdlc3R1cmVFdmVudC5hbHRLZXkoKSwg
Z2VzdHVyZUV2ZW50Lm1ldGFLZXkoKSwgZ2VzdHVyZUV2ZW50LnRpbWVzdGFtcCgpKTsKICAgICAg
ICAgUGxhdGZvcm1Nb3VzZUV2ZW50IGZha2VNb3VzZVVwKGdlc3R1cmVFdmVudC5wb3NpdGlvbigp
LCBnZXN0dXJlRXZlbnQuZ2xvYmFsUG9zaXRpb24oKSwgTGVmdEJ1dHRvbiwgUGxhdGZvcm1FdmVu
dDo6TW91c2VSZWxlYXNlZCwgLyogY2xpY2tDb3VudCAqLyAxLCBnZXN0dXJlRXZlbnQuc2hpZnRL
ZXkoKSwgZ2VzdHVyZUV2ZW50LmN0cmxLZXkoKSwgZ2VzdHVyZUV2ZW50LmFsdEtleSgpLCBnZXN0
dXJlRXZlbnQubWV0YUtleSgpLCBnZXN0dXJlRXZlbnQudGltZXN0YW1wKCkpOwpAQCAtMjI0OSwy
OCArMjMwNiw1MiBAQCBib29sIEV2ZW50SGFuZGxlcjo6aGFuZGxlR2VzdHVyZUV2ZW50KGNvbnN0
IFBsYXRmb3JtR2VzdHVyZUV2ZW50JiBnZXN0dXJlRXZlbnQpCiAgICAgICAgIHJldHVybiB0cnVl
OwogICAgIH0KICAgICBjYXNlIFBsYXRmb3JtRXZlbnQ6Okdlc3R1cmVTY3JvbGxVcGRhdGU6IHsK
LSAgICAgICAgY29uc3QgZmxvYXQgdGlja0Rpdmlzb3IgPSAoZmxvYXQpV2hlZWxFdmVudDo6dGlj
a011bHRpcGxpZXI7Ci0gICAgICAgIC8vIEZJWE1FOiBSZXBsYWNlIHRoaXMgaW50ZXJpbSBpbXBs
ZW1lbnRhdGlvbiBvbmNlIHRoZSBhYm92ZSBmaXhtZSBoYXMgYmVlbiBhZGRyZXNzZWQuCi0gICAg
ICAgIEludFBvaW50IHBvaW50KGdlc3R1cmVFdmVudC5wb3NpdGlvbigpLngoKSwgZ2VzdHVyZUV2
ZW50LnBvc2l0aW9uKCkueSgpKTsKLSAgICAgICAgSW50UG9pbnQgZ2xvYmFsUG9pbnQoZ2VzdHVy
ZUV2ZW50Lmdsb2JhbFBvc2l0aW9uKCkueCgpLCBnZXN0dXJlRXZlbnQuZ2xvYmFsUG9zaXRpb24o
KS55KCkpOwotICAgICAgICBQbGF0Zm9ybVdoZWVsRXZlbnQgc3ludGhldGljV2hlZWxFdmVudChw
b2ludCwgZ2xvYmFsUG9pbnQsIGdlc3R1cmVFdmVudC5kZWx0YVgoKSwgZ2VzdHVyZUV2ZW50LmRl
bHRhWSgpLCBnZXN0dXJlRXZlbnQuZGVsdGFYKCkgLyB0aWNrRGl2aXNvciwgZ2VzdHVyZUV2ZW50
LmRlbHRhWSgpIC8gdGlja0Rpdmlzb3IsIFNjcm9sbEJ5UGl4ZWxXaGVlbEV2ZW50LCBnZXN0dXJl
RXZlbnQuc2hpZnRLZXkoKSwgZ2VzdHVyZUV2ZW50LmN0cmxLZXkoKSwgZ2VzdHVyZUV2ZW50LmFs
dEtleSgpLCBnZXN0dXJlRXZlbnQubWV0YUtleSgpKTsKLSAgICAgICAgaGFuZGxlV2hlZWxFdmVu
dChzeW50aGV0aWNXaGVlbEV2ZW50KTsKLSAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIC8v
IEFsd2F5cyBsYXRjaGVkIGlmIHBvc3NpYmxlLgorICAgICAgICBpZiAoIW1fZ2VzdHVyZVRhcmdl
dE5vZGUpCisgICAgICAgICAgICBtX2dlc3R1cmVUYXJnZXROb2RlID0gcmVzdWx0LmlubmVyTm9k
ZSgpOworCisgICAgICAgIGlmIChkZXRlY3RBbmRQYXNzR2VzdHVyZUV2ZW50VG9XaWRnZXQobV9n
ZXN0dXJlVGFyZ2V0Tm9kZSwgZ2VzdHVyZUV2ZW50LCByZXN1bHQpKQorICAgICAgICAgICAgcmV0
dXJuIHRydWU7CisgICAgICAgIE5vZGUqIG5vZGUgPSBtX2dlc3R1cmVUYXJnZXROb2RlID8gbV9n
ZXN0dXJlVGFyZ2V0Tm9kZS0+c2hhZG93QW5jZXN0b3JOb2RlKCkgOiAwOworICAgICAgICBib29s
IHhTY3JvbGwgPSBub2RlICYmIHNjcm9sbE5vZGUoZ2VzdHVyZUV2ZW50LmRlbHRhWCgpLCBTY3Jv
bGxCeVBpeGVsLCBTY3JvbGxMZWZ0LCBTY3JvbGxSaWdodCwgbm9kZSwgMCk7CisgICAgICAgIGJv
b2wgeVNjcm9sbCA9IG5vZGUgJiYgc2Nyb2xsTm9kZShnZXN0dXJlRXZlbnQuZGVsdGFZKCksIFNj
cm9sbEJ5UGl4ZWwsIFNjcm9sbFVwLCBTY3JvbGxEb3duLCBub2RlLCAwKTsKKworICAgICAgICBp
ZiAoeFNjcm9sbCB8fCB5U2Nyb2xsKQorICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAg
IHJldHVybiBwYXNzR2VzdHVyZUV2ZW50VG9GcmFtZVZpZXcoZ2VzdHVyZUV2ZW50KTsKKyAgICB9
CisgICAgY2FzZSBQbGF0Zm9ybUV2ZW50OjpHZXN0dXJlU2Nyb2xsQmVnaW46IHsKKyAgICAgICAg
Ly8gTGF0Y2ggb24gc2Nyb2xsIGJlZ2luLgorICAgICAgICBpZiAobV9nZXN0dXJlVGFyZ2V0Tm9k
ZSkKKyAgICAgICAgICAgIG1fZ2VzdHVyZVRhcmdldE5vZGUgPSAwOworICAgICAgICBtX2dlc3R1
cmVUYXJnZXROb2RlID0gcmVzdWx0LmlubmVyTm9kZSgpOworCisgICAgICAgIGlmIChkZXRlY3RB
bmRQYXNzR2VzdHVyZUV2ZW50VG9XaWRnZXQobV9nZXN0dXJlVGFyZ2V0Tm9kZSwgZ2VzdHVyZUV2
ZW50LCByZXN1bHQpKQorICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIE5vZGUqIG5v
ZGUgPSBtX2dlc3R1cmVUYXJnZXROb2RlID8gbV9nZXN0dXJlVGFyZ2V0Tm9kZS0+c2hhZG93QW5j
ZXN0b3JOb2RlKCkgOiAwOworICAgICAgICBpZiAobm9kZSAmJiBnZXN0dXJlTm9kZShnZXN0dXJl
RXZlbnQsIG5vZGUpKQorICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIHJldHVybiBw
YXNzR2VzdHVyZUV2ZW50VG9GcmFtZVZpZXcoZ2VzdHVyZUV2ZW50KTsKICAgICB9Ci0gICAgY2Fz
ZSBQbGF0Zm9ybUV2ZW50OjpHZXN0dXJlRG91YmxlVGFwOgotICAgIGNhc2UgUGxhdGZvcm1FdmVu
dDo6R2VzdHVyZVNjcm9sbEJlZ2luOgogICAgIGNhc2UgUGxhdGZvcm1FdmVudDo6R2VzdHVyZVNj
cm9sbEVuZDogewotICAgICAgICBGcmFtZVZpZXcqIHZpZXcgPSBtX2ZyYW1lLT52aWV3KCk7Ci0g
ICAgICAgIGlmICghdmlldykKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgLy8g
QWx3YXlzIHVubGF0Y2guCisgICAgICAgIFJlZlB0cjxOb2RlPiB0YXJnZXROb2RlID0gbV9nZXN0
dXJlVGFyZ2V0Tm9kZS5yZWxlYXNlKCk7CisgICAgICAgIGlmICghdGFyZ2V0Tm9kZSkKKyAgICAg
ICAgICAgIHRhcmdldE5vZGUgPSByZXN1bHQuaW5uZXJOb2RlKCk7CiAKLSAgICAgICAgdmlldy0+
aGFuZGxlR2VzdHVyZUV2ZW50KGdlc3R1cmVFdmVudCk7Ci0gICAgICAgIHJldHVybiB0cnVlOwor
ICAgICAgICBpZiAoZGV0ZWN0QW5kUGFzc0dlc3R1cmVFdmVudFRvV2lkZ2V0KHRhcmdldE5vZGUs
IGdlc3R1cmVFdmVudCwgcmVzdWx0KSkKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAg
ICBOb2RlKiBub2RlID0gdGFyZ2V0Tm9kZSA/IHRhcmdldE5vZGUtPnNoYWRvd0FuY2VzdG9yTm9k
ZSgpIDogMDsKKyAgICAgICAgaWYgKG5vZGUgJiYgZ2VzdHVyZU5vZGUoZ2VzdHVyZUV2ZW50LCBu
b2RlKSkKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICByZXR1cm4gcGFzc0dlc3R1
cmVFdmVudFRvRnJhbWVWaWV3KGdlc3R1cmVFdmVudCk7CiAgICAgfQorICAgIGNhc2UgUGxhdGZv
cm1FdmVudDo6R2VzdHVyZURvdWJsZVRhcDoKKyAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIGRl
ZmF1bHQ6CiAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgIH0KLSAgICByZXR1cm4g
dHJ1ZTsKKyAgICByZXR1cm4gZmFsc2U7CiB9CiAjZW5kaWYKIApkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcGFnZS9FdmVudEhhbmRsZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRXZlbnRI
YW5kbGVyLmgKaW5kZXggNTIxNmUwYjg4YWFiMjFkZDlkYzU4YWI4ZDQ4OTQ5OTVkZjAxMjcyNS4u
NzdlMTVlMjFmZDZiZWQxY2I2ODRjZjkxYWU2ZjNmZWQ5YWNkM2VmMyAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvcGFnZS9FdmVudEhhbmRsZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdl
L0V2ZW50SGFuZGxlci5oCkBAIC0yOTksNiArMjk5LDkgQEAgcHJpdmF0ZToKICAgICBib29sIHBh
c3NXaWRnZXRNb3VzZURvd25FdmVudFRvV2lkZ2V0KFJlbmRlcldpZGdldCopOwogCiAgICAgYm9v
bCBwYXNzTW91c2VEb3duRXZlbnRUb1dpZGdldChXaWRnZXQqKTsKKyNpZiBFTkFCTEUoR0VTVFVS
RV9FVkVOVFMpCisgICAgYm9vbCBwYXNzR2VzdHVyZUV2ZW50VG9XaWRnZXQoY29uc3QgUGxhdGZv
cm1HZXN0dXJlRXZlbnQmLCBXaWRnZXQqKTsKKyNlbmRpZgogICAgIGJvb2wgcGFzc1doZWVsRXZl
bnRUb1dpZGdldChjb25zdCBQbGF0Zm9ybVdoZWVsRXZlbnQmLCBXaWRnZXQqKTsKIAogICAgIHZv
aWQgZGVmYXVsdFNwYWNlRXZlbnRIYW5kbGVyKEtleWJvYXJkRXZlbnQqKTsKQEAgLTQyMSw2ICs0
MjQsMTEgQEAgcHJpdmF0ZToKICAgICBUb3VjaFRhcmdldE1hcCBtX29yaWdpbmF0aW5nVG91Y2hQ
b2ludFRhcmdldHM7CiAgICAgYm9vbCBtX3RvdWNoUHJlc3NlZDsKICNlbmRpZgorI2lmIEVOQUJM
RShHRVNUVVJFX0VWRU5UUykKKyAgICBib29sIGRldGVjdEFuZFBhc3NHZXN0dXJlRXZlbnRUb1dp
ZGdldChQYXNzUmVmUHRyPE5vZGU+LCBjb25zdCBQbGF0Zm9ybUdlc3R1cmVFdmVudCYsIGNvbnN0
IEhpdFRlc3RSZXN1bHQmKTsKKyAgICBib29sIHBhc3NHZXN0dXJlRXZlbnRUb0ZyYW1lVmlldyhj
b25zdCBQbGF0Zm9ybUdlc3R1cmVFdmVudCYpOworICAgIFJlZlB0cjxOb2RlPiBtX2dlc3R1cmVU
YXJnZXROb2RlOworI2VuZGlmCiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL2Nocm9taXVtL0V2ZW50SGFuZGxlckNocm9taXVtLmNw
cCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvY2hyb21pdW0vRXZlbnRIYW5kbGVyQ2hyb21pdW0uY3Bw
CmluZGV4IDk3YzFjYmU3Mzg1NGQzYjY2MDMyMGI4MTQ0NmM3NjBlZDgxODQ2YjEuLjg2NjQyMjE2
Njk5OTViYWQ5NDg5YmEwODg3MzBmMzFiMzE0OWFkZmEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3BhZ2UvY2hyb21pdW0vRXZlbnRIYW5kbGVyQ2hyb21pdW0uY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3BhZ2UvY2hyb21pdW0vRXZlbnRIYW5kbGVyQ2hyb21pdW0uY3BwCkBAIC00NCw2ICs0
NCwxMSBAQAogI2luY2x1ZGUgIlBsYXRmb3JtV2hlZWxFdmVudC5oIgogI2luY2x1ZGUgIlJlbmRl
cldpZGdldC5oIgogCisjaWYgRU5BQkxFKEdFU1RVUkVfRVZFTlRTKSB8fCBFTkFCTEUoR0VTVFVS
RV9SRUNPR05JWkVSKQorI2luY2x1ZGUgIlBsYXRmb3JtR2VzdHVyZUV2ZW50LmgiCisjZW5kaWYK
KworCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKICNpZiBPUyhEQVJXSU4pCkBAIC0xNjQsNCArMTY5
LDE2IEBAIGJvb2wgRXZlbnRIYW5kbGVyOjpzaG91bGRUdXJuVmVydGljYWxUaWNrc0ludG9Ib3Jp
em9udGFsKGNvbnN0IEhpdFRlc3RSZXN1bHQmIHJlCiB9CiAjZW5kaWYKIAorI2lmIEVOQUJMRShH
RVNUVVJFX0VWRU5UUykKK2Jvb2wgRXZlbnRIYW5kbGVyOjpwYXNzR2VzdHVyZUV2ZW50VG9XaWRn
ZXQoY29uc3QgUGxhdGZvcm1HZXN0dXJlRXZlbnQmIGdlc3R1cmVFdmVudCwgV2lkZ2V0KiB3aWRn
ZXQpCit7CisgICAgaWYgKCF3aWRnZXQpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGlm
ICghd2lkZ2V0LT5pc0ZyYW1lVmlldygpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgcmV0
dXJuIHN0YXRpY19jYXN0PEZyYW1lVmlldyo+KHdpZGdldCktPmZyYW1lKCktPmV2ZW50SGFuZGxl
cigpLT5oYW5kbGVHZXN0dXJlRXZlbnQoZ2VzdHVyZUV2ZW50KTsKK30KKyNlbmRpZgorCiB9IC8v
IG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL2VmbC9F
dmVudEhhbmRsZXJFZmwuY3BwIGIvU291cmNlL1dlYkNvcmUvcGFnZS9lZmwvRXZlbnRIYW5kbGVy
RWZsLmNwcAppbmRleCAwYjljMmI2ZTZmODE2YTJjMThhYzg3NWRmZmJhNDBiMTFhMjZhMzcwLi5i
MjIyNjY4YjdmOTg3NWJmZTdmMWIwNzM1MzNjMGIxZTJmY2M4NmYzIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9wYWdlL2VmbC9FdmVudEhhbmRsZXJFZmwuY3BwCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3BhZ2UvZWZsL0V2ZW50SGFuZGxlckVmbC5jcHAKQEAgLTk1LDYgKzk1LDE0IEBAIGJvb2wg
RXZlbnRIYW5kbGVyOjpwYXNzV2hlZWxFdmVudFRvV2lkZ2V0KGNvbnN0IFBsYXRmb3JtV2hlZWxF
dmVudCYgZXZlbnQsIFdpZGdlCiAgICAgcmV0dXJuIHN0YXRpY19jYXN0PEZyYW1lVmlldyo+KHdp
ZGdldCktPmZyYW1lKCktPmV2ZW50SGFuZGxlcigpLT5oYW5kbGVXaGVlbEV2ZW50KGV2ZW50KTsK
IH0KIAorI2lmIEVOQUJMRShHRVNUVVJFX0VWRU5UUykKK2Jvb2wgRXZlbnRIYW5kbGVyOjpwYXNz
R2VzdHVyZUV2ZW50VG9XaWRnZXQoY29uc3QgUGxhdGZvcm1HZXN0dXJlRXZlbnQmLCBXaWRnZXQq
KQoreworICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAgcmV0dXJuIGZhbHNlOworfQorI2VuZGlm
CisKIFBhc3NSZWZQdHI8Q2xpcGJvYXJkPiBFdmVudEhhbmRsZXI6OmNyZWF0ZURyYWdnaW5nQ2xp
cGJvYXJkKCkgY29uc3QKIHsKICAgICByZXR1cm4gQ2xpcGJvYXJkRWZsOjpjcmVhdGUoQ2xpcGJv
YXJkV3JpdGFibGUsIENsaXBib2FyZDo6RHJhZ0FuZERyb3ApOwpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcGFnZS9ndGsvRXZlbnRIYW5kbGVyR3RrLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3Bh
Z2UvZ3RrL0V2ZW50SGFuZGxlckd0ay5jcHAKaW5kZXggNDM4NmE0ZGUzNzg4ODlhMzU1NWE1MDg4
MzlkMzY1MmYxZjhmNTk2NS4uNGY4YzllMGY3NDkyNzZkMjM4MWEzZWY4N2Q3OGExODE4ZjY3OGU1
NSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGFnZS9ndGsvRXZlbnRIYW5kbGVyR3RrLmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL2d0ay9FdmVudEhhbmRsZXJHdGsuY3BwCkBAIC05
NCw2ICs5NCwxNCBAQCBib29sIEV2ZW50SGFuZGxlcjo6cGFzc1doZWVsRXZlbnRUb1dpZGdldChj
b25zdCBQbGF0Zm9ybVdoZWVsRXZlbnQmIGV2ZW50LCBXaWRnZQogICAgIHJldHVybiBzdGF0aWNf
Y2FzdDxGcmFtZVZpZXcqPih3aWRnZXQpLT5mcmFtZSgpLT5ldmVudEhhbmRsZXIoKS0+aGFuZGxl
V2hlZWxFdmVudChldmVudCk7CiB9CiAKKyNpZiBFTkFCTEUoR0VTVFVSRV9FVkVOVFMpCitib29s
IEV2ZW50SGFuZGxlcjo6cGFzc0dlc3R1cmVFdmVudFRvV2lkZ2V0KGNvbnN0IFBsYXRmb3JtR2Vz
dHVyZUV2ZW50JiwgV2lkZ2V0KikKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworICAgIHJldHVy
biBmYWxzZTsKK30KKyNlbmRpZgorCiBQYXNzUmVmUHRyPENsaXBib2FyZD4gRXZlbnRIYW5kbGVy
OjpjcmVhdGVEcmFnZ2luZ0NsaXBib2FyZCgpIGNvbnN0CiB7CiAgICAgcmV0dXJuIENsaXBib2Fy
ZEd0azo6Y3JlYXRlKENsaXBib2FyZFdyaXRhYmxlLCBEYXRhT2JqZWN0R3RrOjpjcmVhdGUoKSwg
Q2xpcGJvYXJkOjpEcmFnQW5kRHJvcCwgbV9mcmFtZSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9wYWdlL21hYy9FdmVudEhhbmRsZXJNYWMubW0gYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL21h
Yy9FdmVudEhhbmRsZXJNYWMubW0KaW5kZXggOTQwODFjYmE3NjZiNzVlM2UxODg1NTE5YmU5NDk2
OTZkNzE1YTQyNS4uYzAxYWQzN2RjYjA0MjhlYjUyYTczYTQ1ZGI2NDE2NjM1YTVlY2I2NSAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGFnZS9tYWMvRXZlbnRIYW5kbGVyTWFjLm1tCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3BhZ2UvbWFjL0V2ZW50SGFuZGxlck1hYy5tbQpAQCAtNzIxLDQgKzcy
MSwyNSBAQCB1bnNpZ25lZCBFdmVudEhhbmRsZXI6OmFjY2Vzc0tleU1vZGlmaWVycygpCiAgICAg
cmV0dXJuIFBsYXRmb3JtRXZlbnQ6OkN0cmxLZXkgfCBQbGF0Zm9ybUV2ZW50OjpBbHRLZXk7CiB9
CiAKKyNpZiBFTkFCTEUoR0VTVFVSRV9FVkVOVFMpCitib29sIEV2ZW50SGFuZGxlcjo6cGFzc0dl
c3R1cmVFdmVudFRvV2lkZ2V0KGNvbnN0IFBsYXRmb3JtR2VzdHVyZUV2ZW50JiBnZXN0dXJlRXZl
bnQsIFdpZGdldCogd2lkZ2V0KQoreworICAgIEJFR0lOX0JMT0NLX09CSkNfRVhDRVBUSU9OUzsK
KworICAgIGlmICghd2lkZ2V0KQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBOU1ZpZXcq
IG5vZGVWaWV3ID0gd2lkZ2V0LT5wbGF0Zm9ybVdpZGdldCgpOworICAgIGlmICghbm9kZVZpZXcp
IHsKKyAgICAgICAgLy8gV2ViS2l0MiBjb2RlIHBhdGguCisgICAgICAgIGlmICghd2lkZ2V0LT5p
c0ZyYW1lVmlldygpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgICAgIHJldHVy
biBzdGF0aWNfY2FzdDxGcmFtZVZpZXcqPih3aWRnZXQpLT5mcmFtZSgpLT5ldmVudEhhbmRsZXIo
KS0+aGFuZGxlR2VzdHVyZUV2ZW50KGdlc3R1cmVFdmVudCk7CisgICAgfQorICAgIEVORF9CTE9D
S19PQkpDX0VYQ0VQVElPTlM7CisgICAgcmV0dXJuIGZhbHNlOworfQorI2VuZGlmCisKIH0KZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvcXQvRXZlbnRIYW5kbGVyUXQuY3BwIGIvU291
cmNlL1dlYkNvcmUvcGFnZS9xdC9FdmVudEhhbmRsZXJRdC5jcHAKaW5kZXggMDZkYjEwNDU1Y2I3
ZmUyYzc1YmQwMDllMGNlYWVjMjQ2MzY1ZTkxZS4uNzY3YjM0N2U4M2E4ODI2YTJhMjI0ZmY0YTE5
N2VlNWQ2NzM0ZGRiZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGFnZS9xdC9FdmVudEhh
bmRsZXJRdC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGFnZS9xdC9FdmVudEhhbmRsZXJRdC5j
cHAKQEAgLTk4LDYgKzk4LDE3IEBAIGJvb2wgRXZlbnRIYW5kbGVyOjpwYXNzV2hlZWxFdmVudFRv
V2lkZ2V0KGNvbnN0IFBsYXRmb3JtV2hlZWxFdmVudCYgZXZlbnQsIFdpZGdlCiAgICAgcmV0dXJu
IHN0YXRpY19jYXN0PEZyYW1lVmlldyo+KHdpZGdldCktPmZyYW1lKCktPmV2ZW50SGFuZGxlcigp
LT5oYW5kbGVXaGVlbEV2ZW50KGV2ZW50KTsKIH0KIAorI2lmIEVOQUJMRShHRVNUVVJFX0VWRU5U
UykKK2Jvb2wgRXZlbnRIYW5kbGVyOjpwYXNzR2VzdHVyZUV2ZW50VG9XaWRnZXQoY29uc3QgUGxh
dGZvcm1HZXN0dXJlRXZlbnQmIGV2ZW50LCBXaWRnZXQqIHdpZGdldCkKK3sKKyAgICBRX0FTU0VS
VCh3aWRnZXQpOworICAgIGlmICghd2lkZ2V0LT5pc0ZyYW1lVmlldygpKQorICAgICAgICByZXR1
cm4gZmFsc2U7CisKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8RnJhbWVWaWV3Kj4od2lkZ2V0KS0+
ZnJhbWUoKS0+ZXZlbnRIYW5kbGVyKCktPmhhbmRsZUdlc3R1cmVFdmVudChldmVudCk7Cit9Cisj
ZW5kaWYKKwogUGFzc1JlZlB0cjxDbGlwYm9hcmQ+IEV2ZW50SGFuZGxlcjo6Y3JlYXRlRHJhZ2dp
bmdDbGlwYm9hcmQoKSBjb25zdAogewogICAgIHJldHVybiBDbGlwYm9hcmRRdDo6Y3JlYXRlKENs
aXBib2FyZFdyaXRhYmxlLCBtX2ZyYW1lLCBDbGlwYm9hcmQ6OkRyYWdBbmREcm9wKTsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2Uvd2luL0V2ZW50SGFuZGxlcldpbi5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9wYWdlL3dpbi9FdmVudEhhbmRsZXJXaW4uY3BwCmluZGV4IDkzOTNlZmE1NWZh
YzI2OTdkY2ZkNzllMmI3NDk3NTNiYzVjMmZiOGYuLjA2MDk3ZDRhODBjYTk3MTBmYjhmNGI1ZDZm
ZDUyYTFkNGFlMWQzNjUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2Uvd2luL0V2ZW50
SGFuZGxlcldpbi5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGFnZS93aW4vRXZlbnRIYW5kbGVy
V2luLmNwcApAQCAtODEsNiArODEsMTQgQEAgYm9vbCBFdmVudEhhbmRsZXI6OnBhc3NXaGVlbEV2
ZW50VG9XaWRnZXQoY29uc3QgUGxhdGZvcm1XaGVlbEV2ZW50JiB3aGVlbEV2ZW50LAogICAgIHJl
dHVybiBzdGF0aWNfY2FzdDxGcmFtZVZpZXcqPih3aWRnZXQpLT5mcmFtZSgpLT5ldmVudEhhbmRs
ZXIoKS0+aGFuZGxlV2hlZWxFdmVudCh3aGVlbEV2ZW50KTsKIH0KIAorI2lmIEVOQUJMRShHRVNU
VVJFX0VWRU5UUykKK2Jvb2wgRXZlbnRIYW5kbGVyOjpwYXNzR2VzdHVyZUV2ZW50VG9XaWRnZXQo
Y29uc3QgUGxhdGZvcm1HZXN0dXJlRXZlbnQmLCBXaWRnZXQqKQoreworICAgIG5vdEltcGxlbWVu
dGVkKCk7CisgICAgcmV0dXJuIGZhbHNlOworfQorI2VuZGlmCisKIGJvb2wgRXZlbnRIYW5kbGVy
Ojp0YWJzVG9BbGxGb3JtQ29udHJvbHMoS2V5Ym9hcmRFdmVudCopIGNvbnN0CiB7CiAgICAgcmV0
dXJuIHRydWU7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL3d4L0V2ZW50SGFuZGxl
cld4LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2Uvd3gvRXZlbnRIYW5kbGVyV3guY3BwCmluZGV4
IDA2YjYwMzY5ODJhNTM5ODM1Mjk0NmQ1MDdjNDZhYzkzNTA3Yjc0OWMuLjJhYzRkZDdlZTIzM2Fl
YzFjNTUzNWI3MGY3ZTM0NmQ2MDQ1M2Q4ZjMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3Bh
Z2Uvd3gvRXZlbnRIYW5kbGVyV3guY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2Uvd3gvRXZl
bnRIYW5kbGVyV3guY3BwCkBAIC04Miw2ICs4MiwxNCBAQCBib29sIEV2ZW50SGFuZGxlcjo6cGFz
c1doZWVsRXZlbnRUb1dpZGdldChjb25zdCBQbGF0Zm9ybVdoZWVsRXZlbnQmIGV2ZW50LCBXaWRn
ZQogICAgIHJldHVybiBzdGF0aWNfY2FzdDxGcmFtZVZpZXcqPih3aWRnZXQpLT5mcmFtZSgpLT5l
dmVudEhhbmRsZXIoKS0+aGFuZGxlV2hlZWxFdmVudChldmVudCk7CiB9CiAKKyNpZiBFTkFCTEUo
R0VTVFVSRV9FVkVOVFMpCitib29sIEV2ZW50SGFuZGxlcjo6cGFzc0dlc3R1cmVFdmVudFRvV2lk
Z2V0KGNvbnN0IFBsYXRmb3JtR2VzdHVyZUV2ZW50JiwgV2lkZ2V0KikKK3sKKyAgICBub3RJbXBs
ZW1lbnRlZCgpOyAKKyAgICByZXR1cm4gZmFsc2U7IAorfQorI2VuZGlmCisKIGJvb2wgRXZlbnRI
YW5kbGVyOjp0YWJzVG9BbGxGb3JtQ29udHJvbHMoS2V5Ym9hcmRFdmVudCogZXZlbnQpIGNvbnN0
IAogeyAKICAgICBub3RJbXBsZW1lbnRlZCgpOyAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL1Njcm9sbEFuaW1hdG9yLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1Nj
cm9sbEFuaW1hdG9yLmNwcAppbmRleCBmNzNjNWNjMDY0MzNjM2VhNmRkNTVhZTExM2MwMjk0NjI5
YjRhODg0Li4wZTg3OWQzZWFhZmY5ZDJiMTE5NWU0ODljOTk0YzVjMmUzNThjMGM5IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxBbmltYXRvci5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vU2Nyb2xsQW5pbWF0b3IuY3BwCkBAIC0zNyw2ICszNywxMCBA
QAogI2luY2x1ZGUgPGFsZ29yaXRobT4KICNpbmNsdWRlIDx3dGYvUGFzc093blB0ci5oPgogCisj
aWYgRU5BQkxFKEdFU1RVUkVfUkVDT0dOSVpFUikgfHwgRU5BQkxFKEdFU1RVUkVfRVZFTlRTKQor
I2luY2x1ZGUgIlBsYXRmb3JtR2VzdHVyZUV2ZW50LmgiCisjZW5kaWYKKwogdXNpbmcgbmFtZXNw
YWNlIHN0ZDsKIAogbmFtZXNwYWNlIFdlYkNvcmUgewpAQCAtNjQsNiArNjgsOSBAQCBTY3JvbGxB
bmltYXRvcjo6flNjcm9sbEFuaW1hdG9yKCkKIAogYm9vbCBTY3JvbGxBbmltYXRvcjo6c2Nyb2xs
KFNjcm9sbGJhck9yaWVudGF0aW9uIG9yaWVudGF0aW9uLCBTY3JvbGxHcmFudWxhcml0eSwgZmxv
YXQgc3RlcCwgZmxvYXQgbXVsdGlwbGllcikKIHsKKyNpZiBFTkFCTEUoR0VTVFVSRV9FVkVOVFMp
CisgICAgcmVjb3JkR2VzdHVyZUV2ZW50UHJvY2Vzc2luZyhHZXN0dXJlVGVzdFNjcm9sbCk7Cisj
ZW5kaWYKICAgICBmbG9hdCogY3VycmVudFBvcyA9IChvcmllbnRhdGlvbiA9PSBIb3Jpem9udGFs
U2Nyb2xsYmFyKSA/ICZtX2N1cnJlbnRQb3NYIDogJm1fY3VycmVudFBvc1k7CiAgICAgZmxvYXQg
bmV3UG9zID0gc3RkOjptYXgoc3RkOjptaW4oKmN1cnJlbnRQb3MgKyAoc3RlcCAqIG11bHRpcGxp
ZXIpLCBzdGF0aWNfY2FzdDxmbG9hdD4obV9zY3JvbGxhYmxlQXJlYS0+c2Nyb2xsU2l6ZShvcmll
bnRhdGlvbikpKSwgMC4wZik7CiAgICAgaWYgKCpjdXJyZW50UG9zID09IG5ld1BvcykKQEAgLTEy
Niw4ICsxMzMsMzQgQEAgYm9vbCBTY3JvbGxBbmltYXRvcjo6aGFuZGxlV2hlZWxFdmVudChjb25z
dCBQbGF0Zm9ybVdoZWVsRXZlbnQmIGUpCiB9CiAKICNpZiBFTkFCTEUoR0VTVFVSRV9FVkVOVFMp
Ci12b2lkIFNjcm9sbEFuaW1hdG9yOjpoYW5kbGVHZXN0dXJlRXZlbnQoY29uc3QgUGxhdGZvcm1H
ZXN0dXJlRXZlbnQmKQordm9pZCBTY3JvbGxBbmltYXRvcjo6aGFuZGxlR2VzdHVyZUV2ZW50KGNv
bnN0IFBsYXRmb3JtR2VzdHVyZUV2ZW50JiBldmVudCkKIHsKKyAgICBzd2l0Y2ggKGV2ZW50LnR5
cGUoKSkgeworICAgIGNhc2UgUGxhdGZvcm1FdmVudDo6R2VzdHVyZVNjcm9sbEJlZ2luOgorICAg
ICAgICByZWNvcmRHZXN0dXJlRXZlbnRQcm9jZXNzaW5nKEdlc3R1cmVUZXN0U2Nyb2xsQmVnaW4p
OworICAgICAgICBicmVhazsKKyAgICBjYXNlIFBsYXRmb3JtRXZlbnQ6Okdlc3R1cmVTY3JvbGxF
bmQ6CisgICAgICAgIHJlY29yZEdlc3R1cmVFdmVudFByb2Nlc3NpbmcoR2VzdHVyZVRlc3RTY3Jv
bGxFbmQpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFBsYXRmb3JtRXZlbnQ6Okdlc3R1cmVT
Y3JvbGxVcGRhdGU6IHsKKyAgICAgICAgcmVjb3JkR2VzdHVyZUV2ZW50UHJvY2Vzc2luZyhHZXN0
dXJlVGVzdFNjcm9sbFVwZGF0ZSk7CisgICAgICAgIEludFNpemUgbWF4Rm9yd2FyZFNjcm9sbERl
bHRhID0gbV9zY3JvbGxhYmxlQXJlYS0+bWF4aW11bVNjcm9sbFBvc2l0aW9uKCkgLSBtX3Njcm9s
bGFibGVBcmVhLT5zY3JvbGxQb3NpdGlvbigpOworICAgICAgICBJbnRTaXplIG1heEJhY2t3YXJk
U2Nyb2xsRGVsdGEgPSBtX3Njcm9sbGFibGVBcmVhLT5zY3JvbGxQb3NpdGlvbigpIC0gbV9zY3Jv
bGxhYmxlQXJlYS0+bWluaW11bVNjcm9sbFBvc2l0aW9uKCk7CisgICAgICAgIGZsb2F0IGRlbHRh
WCA9IChldmVudC5kZWx0YVgoKSA8IDAuZikgPyBtYXgoZXZlbnQuZGVsdGFYKCksIC1zdGF0aWNf
Y2FzdDxmbG9hdD4obWF4Rm9yd2FyZFNjcm9sbERlbHRhLndpZHRoKCkpKSA6IG1pbihldmVudC5k
ZWx0YVgoKSwgZmxvYXQobWF4QmFja3dhcmRTY3JvbGxEZWx0YS53aWR0aCgpKSk7CisgICAgICAg
IGZsb2F0IGRlbHRhWSA9IChldmVudC5kZWx0YVkoKSA8IDAuZikgPyBtYXgoZXZlbnQuZGVsdGFZ
KCksIC1zdGF0aWNfY2FzdDxmbG9hdD4obWF4Rm9yd2FyZFNjcm9sbERlbHRhLmhlaWdodCgpKSkg
OiBtaW4oZXZlbnQuZGVsdGFZKCksIGZsb2F0KG1heEJhY2t3YXJkU2Nyb2xsRGVsdGEuaGVpZ2h0
KCkpKTsKKworICAgICAgICBJbnRSZWN0IGNvbnRlbnRSZWN0ID0gbV9zY3JvbGxhYmxlQXJlYS0+
dmlzaWJsZUNvbnRlbnRSZWN0KHRydWUpOworICAgICAgICBGbG9hdFBvaW50IG9mZnNldCA9IEZs
b2F0UG9pbnQoY29udGVudFJlY3QueCgpIC0gZGVsdGFYLCBjb250ZW50UmVjdC55KCkgLSBkZWx0
YVkpOworICAgICAgICBzY3JvbGxUb09mZnNldFdpdGhvdXRBbmltYXRpb24ob2Zmc2V0KTsKKyAg
ICAgICAgYnJlYWs7CisgICAgfQorICAgIGNhc2UgUGxhdGZvcm1FdmVudDo6R2VzdHVyZVRhcERv
d246CisgICAgY2FzZSBQbGF0Zm9ybUV2ZW50OjpHZXN0dXJlVGFwOgorICAgIGNhc2UgUGxhdGZv
cm1FdmVudDo6R2VzdHVyZURvdWJsZVRhcDoKKyAgICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDoK
KyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgfQogfQogI2VuZGlmCiAKQEAgLTE2
OCw0ICsyMDEsMzQgQEAgdm9pZCBTY3JvbGxBbmltYXRvcjo6c2V0Wm9vbVBhcmFtZXRlcnNGb3JU
ZXN0KGZsb2F0IHNjYWxlLCBmbG9hdCB4LCBmbG9hdCB5KQogICAgIG5vdGlmeVpvb21DaGFuZ2Vk
KFpvb21BbmltYXRpb25Db250aW51aW5nKTsgLy8gRG9uJ3QgbGV0IHBhZ2UgcmUtc2NhbGUuCiB9
CiAKK2ludCBTY3JvbGxBbmltYXRvcjo6Z2VzdHVyZUV2ZW50VGVzdFJlY29yZCgpCit7CisgICAg
aWYgKG1fY3VycmVudFpvb21TY2FsZSA+IDApCisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgp
OworICAgIGludCByZWNvcmQgPSBtX2N1cnJlbnRab29tVHJhbnNYOworICAgIHJlc2V0Wm9vbSgp
OworICAgIHJldHVybiByZWNvcmQ7Cit9CisKK3ZvaWQgU2Nyb2xsQW5pbWF0b3I6OmVuYWJsZUdl
c3R1cmVFdmVudFRlc3RSZWNvcmQoKQoreworICAgIC8vIE5PVEU6IEdlc3R1cmUgc2Nyb2xsIGV2
ZW50IGRlbGl2ZXJ5IHRlc3RpbmcgcmVxdWlyZXMgZGVmYXVsdCB6b29tIGxldmVsLgorICAgIEFT
U0VSVChtX2N1cnJlbnRab29tU2NhbGUgPT0gMSk7CisgICAgQVNTRVJUKCFtX2N1cnJlbnRab29t
VHJhbnNYKTsKKyAgICBBU1NFUlQoIW1fY3VycmVudFpvb21UcmFuc1kpOworICAgIAorICAgIG1f
Y3VycmVudFpvb21TY2FsZSA9IC0xOworICAgIG1fY3VycmVudFpvb21UcmFuc1ggPSAwOworfQor
Cit2b2lkIFNjcm9sbEFuaW1hdG9yOjpyZWNvcmRHZXN0dXJlRXZlbnRQcm9jZXNzaW5nKEdlc3R1
cmVFdmVudFRlc3RTdGF0ZSBrZXkpCit7CisgICAgaWYgKG1fY3VycmVudFpvb21TY2FsZSA8IDAp
IHsKKyAgICAgICAgaW50IHJlY29yZCA9IG1fY3VycmVudFpvb21UcmFuc1g7CisgICAgICAgIHJl
Y29yZCB8PSBrZXk7CisgICAgICAgIG1fY3VycmVudFpvb21UcmFuc1ggPSByZWNvcmQ7CisgICAg
fQorfQorCisKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL1Njcm9sbEFuaW1hdG9yLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9T
Y3JvbGxBbmltYXRvci5oCmluZGV4IDU3Njc0Mzk0NTJhMWIzMDM0ZWFlNzFlOWQ4NGU5YjBjMTY0
YTYyYzEuLjcwNWEzMzYyMGYzYzJlOWRhZjQ2ZTg5MDQwZTgwZWVlOThmMmZiZjMgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1Njcm9sbEFuaW1hdG9yLmgKKysrIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vU2Nyb2xsQW5pbWF0b3IuaApAQCAtOTYsOSArOTYsMjAgQEAgcHVi
bGljOgogICAgIHZpcnR1YWwgdm9pZCByZXNldFpvb20oKTsKICAgICB2aXJ0dWFsIHZvaWQgc2V0
Wm9vbVBhcmFtZXRlcnNGb3JUZXN0KGZsb2F0LCBmbG9hdCwgZmxvYXQpOwogCisjaWYgRU5BQkxF
KEdFU1RVUkVfRVZFTlRTKQorICAgIC8vIE5PVEU6IE9ubHkgY2FsbGVkIGZyb20gSW50ZXJuYWxz
IGZvciB0ZXN0aW5nLgorICAgIGludCBnZXN0dXJlRXZlbnRUZXN0UmVjb3JkKCk7CisgICAgdm9p
ZCBlbmFibGVHZXN0dXJlRXZlbnRUZXN0UmVjb3JkKCk7CisjZW5kaWYKKwogcHJvdGVjdGVkOgog
ICAgIFNjcm9sbEFuaW1hdG9yKFNjcm9sbGFibGVBcmVhKik7CiAKKyNpZiBFTkFCTEUoR0VTVFVS
RV9FVkVOVFMpCisgICAgZW51bSBHZXN0dXJlRXZlbnRUZXN0U3RhdGUgeyBHZXN0dXJlVGVzdFNj
cm9sbEJlZ2luID0gMSwgR2VzdHVyZVRlc3RTY3JvbGxVcGRhdGUgPSAyLCBHZXN0dXJlVGVzdFNj
cm9sbEVuZCA9IDQgLCBHZXN0dXJlVGVzdFNjcm9sbCA9IDh9OworICAgIHZvaWQgcmVjb3JkR2Vz
dHVyZUV2ZW50UHJvY2Vzc2luZyhHZXN0dXJlRXZlbnRUZXN0U3RhdGUpOworI2VuZGlmCisKICAg
ICB2aXJ0dWFsIHZvaWQgbm90aWZ5UG9zaXRpb25DaGFuZ2VkKCk7CiAgICAgdmlydHVhbCB2b2lk
IG5vdGlmeVpvb21DaGFuZ2VkKFpvb21BbmltYXRpb25TdGF0ZSk7CiAKQEAgLTEwOSw2ICsxMjAs
NyBAQCBwcm90ZWN0ZWQ6CiAgICAgZmxvYXQgbV9jdXJyZW50Wm9vbVNjYWxlOwogICAgIGZsb2F0
IG1fY3VycmVudFpvb21UcmFuc1g7CiAgICAgZmxvYXQgbV9jdXJyZW50Wm9vbVRyYW5zWTsKKwog
fTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vU2Nyb2xsQW5pbWF0b3JOb25lLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L1Njcm9sbEFuaW1hdG9yTm9uZS5jcHAKaW5kZXggM2QxNDcyYjM4MTY3YzJhMjU2NDIyMTQ0OWMz
MTNkOTJiYjU1MTQ3OS4uNTljNGE5ZmNmNzg2NDA5YTg4ODkyZTQwMmYwYWIxODAyYTcxMDJiYSAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU2Nyb2xsQW5pbWF0b3JOb25lLmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxBbmltYXRvck5vbmUuY3BwCkBA
IC01MTksMTAgKzUxOSwxNiBAQCB2b2lkIFNjcm9sbEFuaW1hdG9yTm9uZTo6aGFuZGxlR2VzdHVy
ZUV2ZW50KGNvbnN0IFBsYXRmb3JtR2VzdHVyZUV2ZW50JiBwZ2UpCiAgICAgY2FzZSBQbGF0Zm9y
bUV2ZW50OjpHZXN0dXJlRG91YmxlVGFwOgogICAgICAgICB6b29tKHBnZSk7CiAgICAgICAgIGJy
ZWFrOwotCisgICAgY2FzZSBQbGF0Zm9ybUV2ZW50OjpHZXN0dXJlU2Nyb2xsQmVnaW46CisgICAg
Y2FzZSBQbGF0Zm9ybUV2ZW50OjpHZXN0dXJlU2Nyb2xsRW5kOgorICAgIGNhc2UgUGxhdGZvcm1F
dmVudDo6R2VzdHVyZVNjcm9sbFVwZGF0ZTogCisgICAgY2FzZSBQbGF0Zm9ybUV2ZW50OjpHZXN0
dXJlVGFwRG93bjoKKyAgICBjYXNlIFBsYXRmb3JtRXZlbnQ6Okdlc3R1cmVUYXA6CisgICAgICAg
IFNjcm9sbEFuaW1hdG9yOjpoYW5kbGVHZXN0dXJlRXZlbnQocGdlKTsKKyAgICAgICAgYnJlYWs7
CiAgICAgZGVmYXVsdDoKLSAgICAgICAgLy8gVE9ETzogYWRkIGFueSBvdGhlciBldmVudCB0eXBl
cyB3ZSBzaG91bGQgaGFuZGxlCi0gICAgICAgIHsgfQorICAgICAgICAvLyBGSVhNRTogYWRkIGFu
eSBvdGhlciBldmVudCB0eXBlcyB3ZSBzaG91bGQgaGFuZGxlLgorICAgICAgICBBU1NFUlRfTk9U
X1JFQUNIRUQoKTsKICAgICB9CiB9CiAjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJCb3guY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
ckJveC5jcHAKaW5kZXggNDBhZGYzODdlNTcwY2ZiYjg2YjU1YTI1NDNlZmNhMDljOTQ4ZTAwYS4u
OGRmZjQ0NDBkZjNhOWI3MmVhNzI5MDY1ODNkMzFiYmFhMTMyYjI4MiAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJveC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL1JlbmRlckJveC5jcHAKQEAgLTY3Myw2ICs2NzMsMjMgQEAgYm9vbCBSZW5kZXJC
b3g6OnNjcm9sbChTY3JvbGxEaXJlY3Rpb24gZGlyZWN0aW9uLCBTY3JvbGxHcmFudWxhcml0eSBn
cmFudWxhcml0eSwKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKKyNpZiBFTkFCTEUoR0VTVFVSRV9F
VkVOVFMpCitib29sIFJlbmRlckJveDo6Z2VzdHVyZShjb25zdCBQbGF0Zm9ybUdlc3R1cmVFdmVu
dCYgZXZlbnQpCit7CisgICAgLy8gZnByaW50ZihzdGRlcnIsICJSZW5kZXJCb3g6Omdlc3R1cmUg
JWx4XG4iLCAodW5zaWduZWQgbG9uZyl0aGlzKTsKKyAgICBSZW5kZXJMYXllciogcmVuZGVyTGF5
ZXIgPSBsYXllcigpOworICAgIGlmIChyZW5kZXJMYXllciAmJiAocmVuZGVyTGF5ZXItPnZlcnRp
Y2FsU2Nyb2xsYmFyKCkgfHwgcmVuZGVyTGF5ZXItPmhvcml6b250YWxTY3JvbGxiYXIoKSkpIHsK
KyAgICAgIHJlbmRlckxheWVyLT5oYW5kbGVHZXN0dXJlRXZlbnQoZXZlbnQpOworICAgICAgcmV0
dXJuIHRydWU7CisgICAgfQorCisgICAgUmVuZGVyQmxvY2sqIGIgPSBjb250YWluaW5nQmxvY2so
KTsKKyAgICBpZiAoYiAmJiAhYi0+aXNSZW5kZXJWaWV3KCkpCisgICAgICAgIHJldHVybiBiLT5n
ZXN0dXJlKGV2ZW50KTsKKyAgICByZXR1cm4gZmFsc2U7Cit9CisjZW5kaWYKKwogYm9vbCBSZW5k
ZXJCb3g6OmxvZ2ljYWxTY3JvbGwoU2Nyb2xsTG9naWNhbERpcmVjdGlvbiBkaXJlY3Rpb24sIFNj
cm9sbEdyYW51bGFyaXR5IGdyYW51bGFyaXR5LCBmbG9hdCBtdWx0aXBsaWVyLCBOb2RlKiogc3Rv
cE5vZGUpCiB7CiAgICAgYm9vbCBzY3JvbGxlZCA9IGZhbHNlOwpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJveC5oIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlckJveC5oCmluZGV4IGQ3Mjc1NGE1NGRhOGI0OTc5YmE1YzZhYTVmYWExM2MzOWMzYzRl
MzguLjZlNzk2ZWFkOGZjNTUyNGFhZmYwYmIxOGY5ZDBjYzg3YmJiNDdhZTcgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCb3guaAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyQm94LmgKQEAgLTMxLDYgKzMxLDcgQEAgbmFtZXNwYWNlIFdlYkNv
cmUgewogCiBjbGFzcyBSZW5kZXJCb3hSZWdpb25JbmZvOwogY2xhc3MgUmVuZGVyUmVnaW9uOwor
Y2xhc3MgUGxhdGZvcm1HZXN0dXJlRXZlbnQ7CiBzdHJ1Y3QgUGFpbnRJbmZvOwogCiBlbnVtIExv
Z2ljYWxXaWR0aFR5cGUgeyBMb2dpY2FsV2lkdGgsIE1pbkxvZ2ljYWxXaWR0aCwgTWF4TG9naWNh
bFdpZHRoIH07CkBAIC00MzMsNiArNDM0LDEwIEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIGJvb2wg
bmVlZHNQcmVmZXJyZWRXaWR0aHNSZWNhbGN1bGF0aW9uKCkgY29uc3Q7CiAgICAgdmlydHVhbCB2
b2lkIGNvbXB1dGVJbnRyaW5zaWNSYXRpb0luZm9ybWF0aW9uKEZsb2F0U2l6ZSYgLyogaW50cmlu
c2ljUmF0aW8gKi8sIGJvb2wmIC8qIGlzUGVyY2VudGFnZUludHJpbnNpY1NpemUgKi8pIGNvbnN0
IHsgfQogCisjaWYgRU5BQkxFKEdFU1RVUkVfRVZFTlRTKQorICAgIHZpcnR1YWwgYm9vbCBnZXN0
dXJlKGNvbnN0IFBsYXRmb3JtR2VzdHVyZUV2ZW50Jik7CisjZW5kaWYKKwogcHJvdGVjdGVkOgog
ICAgIHZpcnR1YWwgdm9pZCB3aWxsQmVEZXN0cm95ZWQoKTsKIApkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvdGVzdGluZy9JbnRlcm5hbHMuY3BwIGIvU291cmNlL1dlYkNvcmUvdGVzdGluZy9J
bnRlcm5hbHMuY3BwCmluZGV4IDc4M2MzODA1NjkzYWVjNjNkNGQ5ODViZDc4YzM4NGZkNDQ4NGM0
ZWMuLjZmZjVjOTA5MWNmMTZhMWI2YjI1OTUyNWU4MjUyYjY2Y2Q3MjJlMWEgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3Rlc3RpbmcvSW50ZXJuYWxzLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS90ZXN0aW5nL0ludGVybmFscy5jcHAKQEAgLTQzLDggKzQzLDEyIEBACiAjaW5jbHVkZSAiTm9k
ZVJlbmRlcmluZ0NvbnRleHQuaCIKICNpbmNsdWRlICJQYWdlLmgiCiAjaW5jbHVkZSAiUmFuZ2Uu
aCIKKyNpbmNsdWRlICJSZW5kZXJCbG9jay5oIgorI2luY2x1ZGUgIlJlbmRlckJveE1vZGVsT2Jq
ZWN0LmgiCisjaW5jbHVkZSAiUmVuZGVyTGF5ZXIuaCIKICNpbmNsdWRlICJSZW5kZXJPYmplY3Qu
aCIKICNpbmNsdWRlICJSZW5kZXJUcmVlQXNUZXh0LmgiCisjaW5jbHVkZSAiUmVuZGVyVmlldy5o
IgogI2luY2x1ZGUgIlNldHRpbmdzLmgiCiAjaW5jbHVkZSAiU2hhZG93Q29udGVudEVsZW1lbnQu
aCIKICNpbmNsdWRlICJTaGFkb3dSb290LmgiCkBAIC01ODYsNiArNTkwLDIwNSBAQCB1bnNpZ25l
ZCBJbnRlcm5hbHM6Omxlbmd0aEZyb21SYW5nZShFbGVtZW50KiBzY29wZSwgY29uc3QgUmFuZ2Uq
IHJhbmdlLCBFeGNlcHRpbwogICAgIHJldHVybiBsZW5ndGg7CiB9CiAKKwordm9pZCBJbnRlcm5h
bHM6OmVuYWJsZUdlc3R1cmVTY3JvbGxFdmVudFJlY29yZChFbGVtZW50KiBlbGVtZW50LCBFeGNl
cHRpb25Db2RlJiBlYykKK3sKKyNpZiBFTkFCTEUoR0VTVFVSRV9FVkVOVFMpICYmIEVOQUJMRShT
TU9PVEhfU0NST0xMSU5HKQorICAgIGlmICghZWxlbWVudCkgeworICAgICAgICBlYyA9IElOVkFM
SURfQUNDRVNTX0VSUjsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIFJlbmRlck9iamVj
dCogcmVuZGVyZXIgPSBlbGVtZW50LT5yZW5kZXJlcigpOworICAgIGlmICghcmVuZGVyZXIpIHsK
KyAgICAgICAgZWMgPSBJTlZBTElEX05PREVfVFlQRV9FUlI7CisgICAgICAgIHJldHVybjsKKyAg
ICB9CisgICAgCisgICAgUmVuZGVyQm94KiBib3ggPSByZW5kZXJlci0+ZW5jbG9zaW5nQm94KCk7
CisgICAgd2hpbGUgKGJveCkgeworICAgICAgICBSZW5kZXJMYXllciogcmVuZGVyTGF5ZXIgPSBi
b3gtPmxheWVyKCk7CisgICAgICAgIGlmIChyZW5kZXJMYXllcikgeworICAgICAgICAgICByZW5k
ZXJMYXllci0+c2Nyb2xsQW5pbWF0b3IoKS0+ZW5hYmxlR2VzdHVyZUV2ZW50VGVzdFJlY29yZCgp
OworICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworICAgICAgICBSZW5kZXJCbG9jayog
YmxvY2sgPSBib3gtPmNvbnRhaW5pbmdCbG9jaygpOworICAgICAgICBpZiAoIWJsb2NrKSB7Cisg
ICAgICAgICAgICBlYyA9IElOVkFMSURfTk9ERV9UWVBFX0VSUjsKKyAgICAgICAgICAgIHJldHVy
bjsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChibG9jay0+aXNSZW5kZXJWaWV3KCkpCisgICAg
ICAgICAgICByZXR1cm4gdG9SZW5kZXJWaWV3KGJsb2NrKS0+ZnJhbWVWaWV3KCktPnNjcm9sbEFu
aW1hdG9yKCktPmVuYWJsZUdlc3R1cmVFdmVudFRlc3RSZWNvcmQoKTsKKyAgICAgICAgYm94ID0g
YmxvY2s7CisgICAgfSAgICAgICAgCisgICAgZWMgPSBJTlZBTElEX05PREVfVFlQRV9FUlI7Cisg
ICAgcmV0dXJuOworI2Vsc2UKKyAgICBVTlVTRURfUEFSQU0oZWxlbWVudCk7CisgICAgZWMgPSBJ
TlZBTElEX0FDQ0VTU19FUlI7CisgICAgcmV0dXJuOworI2VuZGlmCit9CisKK2ludCBJbnRlcm5h
bHM6OnJlY29yZE9mR2VzdHVyZVNjcm9sbEV2ZW50cyhFbGVtZW50KiBlbGVtZW50LCBFeGNlcHRp
b25Db2RlJiBlYykKK3sKKyNpZiBFTkFCTEUoR0VTVFVSRV9FVkVOVFMpICYmIEVOQUJMRShTTU9P
VEhfU0NST0xMSU5HKQorICAgIGlmICghZWxlbWVudCkgeworICAgICAgICBlYyA9IElOVkFMSURf
QUNDRVNTX0VSUjsKKyAgICAgICAgcmV0dXJuIC0xOworICAgIH0KKworICAgIFJlbmRlck9iamVj
dCogcmVuZGVyZXIgPSBlbGVtZW50LT5yZW5kZXJlcigpOworICAgIGlmICghcmVuZGVyZXIpIHsK
KyAgICAgICAgZWMgPSBJTlZBTElEX05PREVfVFlQRV9FUlI7CisgICAgICAgIHJldHVybiAtMTsK
KyAgICB9CisgICAgCisgICAgUmVuZGVyQm94KiBib3ggPSByZW5kZXJlci0+ZW5jbG9zaW5nQm94
KCk7CisgICAgd2hpbGUgKGJveCkgeworICAgICAgICBSZW5kZXJMYXllciogcmVuZGVyTGF5ZXIg
PSBib3gtPmxheWVyKCk7CisgICAgICAgIGlmIChyZW5kZXJMYXllcikKKyAgICAgICAgICAgcmV0
dXJuIHJlbmRlckxheWVyLT5zY3JvbGxBbmltYXRvcigpLT5nZXN0dXJlRXZlbnRUZXN0UmVjb3Jk
KCk7CisKKyAgICAgICAgUmVuZGVyQmxvY2sqIGJsb2NrID0gYm94LT5jb250YWluaW5nQmxvY2so
KTsKKyAgICAgICAgaWYgKCFibG9jaykgeworICAgICAgICAgICAgZWMgPSBJTlZBTElEX05PREVf
VFlQRV9FUlI7CisgICAgICAgICAgICByZXR1cm4gLTE7CisgICAgICAgIH0KKworICAgICAgICBp
ZiAoYmxvY2stPmlzUmVuZGVyVmlldygpKQorICAgICAgICAgICAgcmV0dXJuIHRvUmVuZGVyVmll
dyhibG9jayktPmZyYW1lVmlldygpLT5zY3JvbGxBbmltYXRvcigpLT5nZXN0dXJlRXZlbnRUZXN0
UmVjb3JkKCk7CisgICAgICAgIGJveCA9IGJsb2NrOworICAgIH0gICAgICAgIAorICAgIGVjID0g
SU5WQUxJRF9OT0RFX1RZUEVfRVJSOworICAgIHJldHVybiAtMTsKKyNlbHNlCisgICAgVU5VU0VE
X1BBUkFNKGVsZW1lbnQpOworICAgIGVjID0gSU5WQUxJRF9BQ0NFU1NfRVJSOworICAgIHJldHVy
biAtMTsKKyNlbmRpZgorfQorCit2b2lkIEludGVybmFsczo6ZW5hYmxlR2VzdHVyZVNjcm9sbEV2
ZW50UmVjb3JkKERvY3VtZW50KiBkb2N1bWVudCwgRXhjZXB0aW9uQ29kZSYgZWMpCit7CisjaWYg
RU5BQkxFKEdFU1RVUkVfRVZFTlRTKSAmJiBFTkFCTEUoU01PT1RIX1NDUk9MTElORykKKyAgICBp
ZiAoIWRvY3VtZW50KSB7CisgICAgICAgIGVjID0gSU5WQUxJRF9BQ0NFU1NfRVJSOworICAgICAg
ICByZXR1cm47CisgICAgfQorCisgICAgRnJhbWVWaWV3KiBmcmFtZSA9IGRvY3VtZW50LT52aWV3
KCk7CisgICAgaWYgKCFmcmFtZSkgeworICAgICAgICBlYyA9IElOVkFMSURfTk9ERV9UWVBFX0VS
UjsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlmICghZnJhbWUtPnNjcm9sbEFuaW1h
dG9yKCkpCisgICAgICBlYyA9IElOVkFMSURfTk9ERV9UWVBFX0VSUjsKKworICAgIAorICAgIGZy
YW1lLT5zY3JvbGxBbmltYXRvcigpLT5lbmFibGVHZXN0dXJlRXZlbnRUZXN0UmVjb3JkKCk7Cisg
ICAgcmV0dXJuOworI2Vsc2UKKyAgICBVTlVTRURfUEFSQU0oZG9jdW1lbnQpOworICAgIGVjID0g
SU5WQUxJRF9BQ0NFU1NfRVJSOworICAgIHJldHVybjsKKyNlbmRpZgorfQorCitpbnQgSW50ZXJu
YWxzOjpyZWNvcmRPZkdlc3R1cmVTY3JvbGxFdmVudHMoRG9jdW1lbnQqIGRvY3VtZW50LCBFeGNl
cHRpb25Db2RlJiBlYykKK3sKKyNpZiBFTkFCTEUoR0VTVFVSRV9FVkVOVFMpICYmIEVOQUJMRShT
TU9PVEhfU0NST0xMSU5HKQorICAgIGlmICghZG9jdW1lbnQpIHsKKyAgICAgICAgZWMgPSBJTlZB
TElEX0FDQ0VTU19FUlI7CisgICAgICAgIHJldHVybiAtMTsKKyAgICB9CisKKyAgICBGcmFtZVZp
ZXcqIGZyYW1lID0gZG9jdW1lbnQtPnZpZXcoKTsKKyAgICBpZiAoIWZyYW1lKSB7CisgICAgICAg
IGVjID0gSU5WQUxJRF9OT0RFX1RZUEVfRVJSOworICAgICAgICByZXR1cm4gLTE7CisgICAgfQor
CisgICAgaWYgKCFmcmFtZS0+c2Nyb2xsQW5pbWF0b3IoKSkKKyAgICAgIGVjID0gSU5WQUxJRF9O
T0RFX1RZUEVfRVJSOworCisgICAgcmV0dXJuIGZyYW1lLT5zY3JvbGxBbmltYXRvcigpLT5nZXN0
dXJlRXZlbnRUZXN0UmVjb3JkKCk7CisjZWxzZQorICAgIFVOVVNFRF9QQVJBTShkb2N1bWVudCk7
CisgICAgZWMgPSBJTlZBTElEX0FDQ0VTU19FUlI7CisgICAgcmV0dXJuIC0xOworI2VuZGlmCit9
CisKKyNpZiBFTkFCTEUoR0VTVFVSRV9FVkVOVFMpICYmIEVOQUJMRShTTU9PVEhfU0NST0xMSU5H
KQorc3RhdGljCit2b2lkIHNlbmRHZXN0dXJlRXZlbnQoRG9jdW1lbnQqIGRvY3VtZW50LCBQbGF0
Zm9ybUV2ZW50OjpUeXBlIHR5cGUsIGNvbnN0IGZsb2F0IHBvc1gsIGNvbnN0IGZsb2F0IHBvc1ks
IGNvbnN0IGZsb2F0IGRlbHRhWCwgY29uc3QgZmxvYXQgZGVsdGFZLCBFeGNlcHRpb25Db2RlJiBl
YykKK3sKKyAgICBpZiAoIWRvY3VtZW50KSB7CisgICAgICAgIGVjID0gSU5WQUxJRF9BQ0NFU1Nf
RVJSOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIEZyYW1lKiBmcmFtZSA9IGRvY3VtZW50
LT5mcmFtZSgpOworICAgIGlmICghZnJhbWUpIHsKKyAgICAgICAgZWMgPSBJTlZBTElEX05PREVf
VFlQRV9FUlI7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBJbnRQb2ludCBwb3NpdGlv
bihwb3NYLCBwb3NZKTsKKyAgICBQbGF0Zm9ybUdlc3R1cmVFdmVudCBnZXN0dXJlRXZlbnQodHlw
ZSwgcG9zaXRpb24sIHBvc2l0aW9uLCAwLiwgZGVsdGFYLCBkZWx0YVksIGZhbHNlLCBmYWxzZSwg
ZmFsc2UsIGZhbHNlKTsKKyAgICBmcmFtZS0+ZXZlbnRIYW5kbGVyKCktPmhhbmRsZUdlc3R1cmVF
dmVudChnZXN0dXJlRXZlbnQpOworfQorI2VuZGlmCisKK2ludCBJbnRlcm5hbHM6OnNlbmRTY3Jv
bGxCZWdpbkdlc3R1cmVFdmVudChEb2N1bWVudCogZG9jdW1lbnQsIGNvbnN0IGZsb2F0IHBvc1gs
IGNvbnN0IGZsb2F0IHBvc1ksIEV4Y2VwdGlvbkNvZGUmIGVjKQoreworI2lmIEVOQUJMRShHRVNU
VVJFX0VWRU5UUykgJiYgRU5BQkxFKFNNT09USF9TQ1JPTExJTkcpCisgICAgc2VuZEdlc3R1cmVF
dmVudChkb2N1bWVudCwgUGxhdGZvcm1FdmVudDo6R2VzdHVyZVNjcm9sbEJlZ2luLCBwb3NYLCBw
b3NZLCAwLmYsIDAuZiwgZWMpOworICAgIHJldHVybiAwOworI2Vsc2UKKyAgICBVTlVTRURfUEFS
QU0oZG9jdW1lbnQpOworICAgIFVOVVNFRF9QQVJBTShwb3NYKTsKKyAgICBVTlVTRURfUEFSQU0o
cG9zWSk7CisgICAgZWMgPSBJTlZBTElEX0FDQ0VTU19FUlI7CisgICAgcmV0dXJuIC0xOworI2Vu
ZGlmCit9CisKK2ludCBJbnRlcm5hbHM6OnNlbmRTY3JvbGxVcGRhdGVHZXN0dXJlRXZlbnQoRG9j
dW1lbnQqIGRvY3VtZW50LCBjb25zdCBmbG9hdCBwb3NYLCBjb25zdCBmbG9hdCBwb3NZLCBjb25z
dCBmbG9hdCBkZWx0YVgsIGNvbnN0IGZsb2F0IGRlbHRhWSwgRXhjZXB0aW9uQ29kZSYgZWMpCit7
CisjaWYgRU5BQkxFKEdFU1RVUkVfRVZFTlRTKSAmJiBFTkFCTEUoU01PT1RIX1NDUk9MTElORykK
KyAgICBzZW5kR2VzdHVyZUV2ZW50KGRvY3VtZW50LCBQbGF0Zm9ybUV2ZW50OjpHZXN0dXJlU2Ny
b2xsVXBkYXRlLCBwb3NYLCBwb3NZLCBkZWx0YVgsIGRlbHRhWSwgZWMpOworICAgIHJldHVybiAw
OworI2Vsc2UKKyAgICBVTlVTRURfUEFSQU0oZG9jdW1lbnQpOworICAgIFVOVVNFRF9QQVJBTShw
b3NYKTsKKyAgICBVTlVTRURfUEFSQU0ocG9zWSk7CisgICAgVU5VU0VEX1BBUkFNKGRlbHRhWCk7
CisgICAgVU5VU0VEX1BBUkFNKGRlbHRhWSk7CisgICAgZWMgPSBJTlZBTElEX0FDQ0VTU19FUlI7
CisgICAgcmV0dXJuIC0xOworI2VuZGlmCit9CisKK2ludCBJbnRlcm5hbHM6OnNlbmRTY3JvbGxF
bmRHZXN0dXJlRXZlbnQoRG9jdW1lbnQqIGRvY3VtZW50LCBjb25zdCBmbG9hdCBwb3NYLCBjb25z
dCBmbG9hdCBwb3NZLCBjb25zdCBmbG9hdCBkZWx0YVgsIGNvbnN0IGZsb2F0IGRlbHRhWSwgRXhj
ZXB0aW9uQ29kZSYgZWMpCit7CisjaWYgRU5BQkxFKEdFU1RVUkVfRVZFTlRTKSAmJiBFTkFCTEUo
U01PT1RIX1NDUk9MTElORykKKyAgICBzZW5kR2VzdHVyZUV2ZW50KGRvY3VtZW50LCBQbGF0Zm9y
bUV2ZW50OjpHZXN0dXJlU2Nyb2xsRW5kLCBwb3NYLCBwb3NZLCBkZWx0YVgsIGRlbHRhWSwgZWMp
OworICAgIHJldHVybiAwOworI2Vsc2UKKyAgICBVTlVTRURfUEFSQU0oZG9jdW1lbnQpOworICAg
IFVOVVNFRF9QQVJBTShwb3NYKTsKKyAgICBVTlVTRURfUEFSQU0ocG9zWSk7CisgICAgVU5VU0VE
X1BBUkFNKGRlbHRhWCk7CisgICAgVU5VU0VEX1BBUkFNKGRlbHRhWSk7CisgICAgZWMgPSBJTlZB
TElEX0FDQ0VTU19FUlI7CisgICAgcmV0dXJuIC0xOworI2VuZGlmCit9CisKIHZvaWQgSW50ZXJu
YWxzOjpzZXRTaG91bGRMYXlvdXRGaXhlZEVsZW1lbnRzUmVsYXRpdmVUb0ZyYW1lKERvY3VtZW50
KiBkb2N1bWVudCwgYm9vbCBlbmFibGVkLCBFeGNlcHRpb25Db2RlJiBlYykKIHsKICAgICBpZiAo
IWRvY3VtZW50IHx8ICFkb2N1bWVudC0+dmlldygpKSB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS90ZXN0aW5nL0ludGVybmFscy5oIGIvU291cmNlL1dlYkNvcmUvdGVzdGluZy9JbnRlcm5h
bHMuaAppbmRleCBlZDQ3MzcwNTViOTkzODNkYTliMjgwMjFhZjNmNjk1OWM2MWQzNWY3Li44MzZl
MWEwYjJiZjk2MGMyNWIzZGI1MjJlMGU5MmIzMDFiNWUwYzhmIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS90ZXN0aW5nL0ludGVybmFscy5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Rlc3Rpbmcv
SW50ZXJuYWxzLmgKQEAgLTExOSw2ICsxMTksMTUgQEAgcHVibGljOgogCiAgICAgc3RhdGljIGNv
bnN0IGNoYXIqIGludGVybmFsc0lkOwogCisgICAgdm9pZCBlbmFibGVHZXN0dXJlU2Nyb2xsRXZl
bnRSZWNvcmQoRWxlbWVudCosIEV4Y2VwdGlvbkNvZGUmKTsKKyAgICBpbnQgcmVjb3JkT2ZHZXN0
dXJlU2Nyb2xsRXZlbnRzKEVsZW1lbnQqLCBFeGNlcHRpb25Db2RlJik7CisgICAgdm9pZCBlbmFi
bGVHZXN0dXJlU2Nyb2xsRXZlbnRSZWNvcmQoRG9jdW1lbnQqLCBFeGNlcHRpb25Db2RlJik7Cisg
ICAgaW50IHJlY29yZE9mR2VzdHVyZVNjcm9sbEV2ZW50cyhEb2N1bWVudCosIEV4Y2VwdGlvbkNv
ZGUmKTsKKworICAgIGludCBzZW5kU2Nyb2xsQmVnaW5HZXN0dXJlRXZlbnQoRG9jdW1lbnQqLCBj
b25zdCBmbG9hdCBwb3NYLCBjb25zdCBmbG9hdCBwb3NZLCBFeGNlcHRpb25Db2RlJik7CisgICAg
aW50IHNlbmRTY3JvbGxVcGRhdGVHZXN0dXJlRXZlbnQoRG9jdW1lbnQqLCBjb25zdCBmbG9hdCBw
b3NYLCBjb25zdCBmbG9hdCBwb3NZLCBjb25zdCBmbG9hdCBkZWx0YVgsIGNvbnN0IGZsb2F0IGRl
bHRhWSwgRXhjZXB0aW9uQ29kZSYpOworICAgIGludCBzZW5kU2Nyb2xsRW5kR2VzdHVyZUV2ZW50
KERvY3VtZW50KiwgY29uc3QgZmxvYXQgcG9zWCwgY29uc3QgZmxvYXQgcG9zWSwgY29uc3QgZmxv
YXQgZGVsdGFYLCBjb25zdCBmbG9hdCBkZWx0YVksIEV4Y2VwdGlvbkNvZGUmKTsKKwogcHJpdmF0
ZToKICAgICBJbnRlcm5hbHMoKTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvdGVzdGlu
Zy9JbnRlcm5hbHMuaWRsIGIvU291cmNlL1dlYkNvcmUvdGVzdGluZy9JbnRlcm5hbHMuaWRsCmlu
ZGV4IGY1NmQxYWY3NGE4ZTM1ZGQ0N2JkNGU2YzQ5ZjEyNWU3ZWFhYzNhNTUuLjcyMzIyMTQ2ZmM4
MDY1NDIxY2Y3ZTg1NmFhYjRiMjU2Nzg3MmU3OGYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3Rlc3RpbmcvSW50ZXJuYWxzLmlkbAorKysgYi9Tb3VyY2UvV2ViQ29yZS90ZXN0aW5nL0ludGVy
bmFscy5pZGwKQEAgLTc3LDYgKzc3LDE1IEBAIG1vZHVsZSB3aW5kb3cgewogICAgICAgICB1bnNp
Z25lZCBsb25nIGxvY2F0aW9uRnJvbVJhbmdlKGluIEVsZW1lbnQgc2NvcGUsIGluIFJhbmdlIHJh
bmdlKSByYWlzZXMgKERPTUV4Y2VwdGlvbik7CiAgICAgICAgIHVuc2lnbmVkIGxvbmcgbGVuZ3Ro
RnJvbVJhbmdlKGluIEVsZW1lbnQgc2NvcGUsIGluIFJhbmdlIHJhbmdlKSByYWlzZXMgKERPTUV4
Y2VwdGlvbik7CiAKKyAgICAgICAgdm9pZCBlbmFibGVHZXN0dXJlU2Nyb2xsRXZlbnRSZWNvcmQo
aW4gRWxlbWVudCB0YXJnZXQpIHJhaXNlcyhET01FeGNlcHRpb24pOworICAgICAgICBpbnQgcmVj
b3JkT2ZHZXN0dXJlU2Nyb2xsRXZlbnRzKGluIEVsZW1lbnQgdGFyZ2V0KSByYWlzZXMoRE9NRXhj
ZXB0aW9uKTsKKyAgICAgICAgdm9pZCBlbmFibGVHZXN0dXJlU2Nyb2xsRXZlbnRSZWNvcmQoaW4g
RG9jdW1lbnQgZG9jdW1lbnQpIHJhaXNlcyhET01FeGNlcHRpb24pOworICAgICAgICBpbnQgcmVj
b3JkT2ZHZXN0dXJlU2Nyb2xsRXZlbnRzKGluIERvY3VtZW50IGRvY3VtZW50KSByYWlzZXMoRE9N
RXhjZXB0aW9uKTsKKworICAgICAgICBpbnQgc2VuZFNjcm9sbEJlZ2luR2VzdHVyZUV2ZW50KGlu
IERvY3VtZW50IGRvY3VtZW50LCBpbiBmbG9hdCBwb3NYLCBpbiBmbG9hdCBwb3NZKSByYWlzZXMo
RE9NRXhjZXB0aW9uKTsKKyAgICAgICAgaW50IHNlbmRTY3JvbGxVcGRhdGVHZXN0dXJlRXZlbnQo
aW4gRG9jdW1lbnQgZG9jdW1lbnQsIGluIGZsb2F0IHBvc1gsIGluIGZsb2F0IHBvc1ksIGluIGZs
b2F0IGRlbHRhWCwgaW4gZmxvYXQgZGVsdGFZKSByYWlzZXMoRE9NRXhjZXB0aW9uKTsKKyAgICAg
ICAgaW50IHNlbmRTY3JvbGxFbmRHZXN0dXJlRXZlbnQoaW4gRG9jdW1lbnQgZG9jdW1lbnQsIGlu
IGZsb2F0IHBvc1gsIGluIGZsb2F0IHBvc1ksIGluIGZsb2F0IGRlbHRhWCwgaW4gZmxvYXQgZGVs
dGFZKSByYWlzZXMoRE9NRXhjZXB0aW9uKTsKKwogICAgICAgICB2b2lkIHNldFNob3VsZExheW91
dEZpeGVkRWxlbWVudHNSZWxhdGl2ZVRvRnJhbWUoaW4gRG9jdW1lbnQgZG9jdW1lbnQsIGluIGJv
b2xlYW4gZW5hYmxlZCkgcmFpc2VzKERPTUV4Y2VwdGlvbik7CiAgICAgICAgIHZvaWQgc2V0VW5p
ZmllZFRleHRDaGVja2luZ0VuYWJsZWQoaW4gRG9jdW1lbnQgZG9jdW1lbnQsIGluIGJvb2xlYW4g
ZW5hYmxlZCkgcmFpc2VzIChET01FeGNlcHRpb24pOwogICAgICAgICBib29sZWFuIHVuaWZpZWRU
ZXh0Q2hlY2tpbmdFbmFibGVkKGluIERvY3VtZW50IGRvY3VtZW50KSByYWlzZXMgKERPTUV4Y2Vw
dGlvbik7CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cgYi9MYXlvdXRUZXN0cy9D
aGFuZ2VMb2cKaW5kZXggMmJmYjUyMzMwOGQ0MzgxMGI0ZGUxYjQ0ZTlmZDFlZmNlOWU0MjY2OS4u
ZjY2NzQ1MjMxZGM0ZDk2NDFmZWExZjhhYzY5ZDY5YjRkMWQ0ZWI0MiAxMDA2NDQKLS0tIGEvTGF5
b3V0VGVzdHMvQ2hhbmdlTG9nCisrKyBiL0xheW91dFRlc3RzL0NoYW5nZUxvZwpAQCAtMSwzICsx
LDI0IEBACisyMDEyLTAxLTA1ICBSb2JlcnQgS3JvZWdlciAgPHJqa3JvZWdlQGNocm9taXVtLm9y
Zz4KKworICAgICAgICBQbGF0Zm9ybUdlc3R1cmVFdmVudDo6aGFuZGxlR2VzdHVyZUV2ZW50IHNo
b3VsZCBoaXQgdGVzdCB3aGlsZSBkaXNwYXRjaGluZyBQbGF0Zm9ybUV2ZW50OjpHZXN0dXJlU2Ny
b2xsKiBldmVudHMuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD02NzgyMgorCisgICAgICAgIFRlc3RzIHRvIHZlcmlmeSB0aGF0IHRoZSBQbGF0Zm9ybUV2
ZW50IEdlc3R1cmVTY3JvbGwqVHlwZSBldmVudHMKKyAgICAgICAgYXJlIGJlaW5nIGNvcnJlY3Rs
eSBkaXNwYXRjaGVkIGFuZCB0aGF0IGxhdGNoaW5nIGRvZXMgbm90IGZhaWwKKyAgICAgICAgaW4g
dGhlIHByZXNlbmNlIG9mIHRoZSByZW1vdmFsIG9mIHRoZSB0YXJnZXQgZWxlbWVudC4KKworICAg
ICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIGZhc3QvZXZlbnRz
L3RvdWNoL2dlc3R1cmUvdG91Y2gtZ2VzdHVyZS1zY3JvbGwtZGl2LWV4cGVjdGVkLnR4dDogQWRk
ZWQuCisgICAgICAgICogZmFzdC9ldmVudHMvdG91Y2gvZ2VzdHVyZS90b3VjaC1nZXN0dXJlLXNj
cm9sbC1kaXYuaHRtbDogQWRkZWQ6IHRlc3RzIGRlbGl2ZXJ5IHRvIG92ZXJmbG93LWRpdnMuCisg
ICAgICAgICogZmFzdC9ldmVudHMvdG91Y2gvZ2VzdHVyZS90b3VjaC1nZXN0dXJlLXNjcm9sbC1p
ZnJhbWUtZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAgICAgKiBmYXN0L2V2ZW50cy90b3VjaC9n
ZXN0dXJlL3RvdWNoLWdlc3R1cmUtc2Nyb2xsLWlmcmFtZS5odG1sOiBBZGRlZDogdGVzdHMgZGVs
aXZlcnkgdG8gYW4gaWZyYW1lLgorICAgICAgICAqIGZhc3QvZXZlbnRzL3RvdWNoL2dlc3R1cmUv
dG91Y2gtZ2VzdHVyZS1zY3JvbGwtcGFnZS1leHBlY3RlZC50eHQ6IEFkZGVkLgorICAgICAgICAq
IGZhc3QvZXZlbnRzL3RvdWNoL2dlc3R1cmUvdG91Y2gtZ2VzdHVyZS1zY3JvbGwtcGFnZS5odG1s
OiBBZGRlZDogdGVzdHMgZGVsaXZlcnkgdG8gYSBwYWdlLgorICAgICAgICAqIGZhc3QvZXZlbnRz
L3RvdWNoL2dlc3R1cmUvdG91Y2gtZ2VzdHVyZS1zY3JvbGwtc2h5LXRhcmdldC1leHBlY3RlZC50
eHQ6IEFkZGVkLgorICAgICAgICAqIGZhc3QvZXZlbnRzL3RvdWNoL2dlc3R1cmUvdG91Y2gtZ2Vz
dHVyZS1zY3JvbGwtc2h5LXRhcmdldC5odG1sOiBBZGRlZDogdGVzdHMgc3VjY2Vzc2Z1bCBvcGVy
YXRpb24gd2hlbiB0aGUgbGF0Y2hlZCB0YXJnZXQgZGl2IGlzIHJlbW92ZWQgZHVyaW5nIHRoZSBn
ZXN0dXJlIGV2ZW50IHNlcXVlbmNlLgorICAgICAgICAqIGZhc3QvZXZlbnRzL3RvdWNoL3Jlc291
cmNlcy9zY3JvbGwtaW5zaWRlLWlmcmFtZS5odG1sOiBBZGRlZC4KKwogMjAxMi0wMS0wNSAgRG1p
dHJ5IExvbW92ICA8ZHNsb21vdkBnb29nbGUuY29tPgogCiAgICAgICAgIFVucmV2aWV3ZWQ6IGZp
bGVkIFdLNzU2MzMgYW5kIHVwZGF0ZWQgZXhwZWN0YXRpb25zCmRpZmYgLS1naXQgYS9MYXlvdXRU
ZXN0cy9mYXN0L2V2ZW50cy90b3VjaC9nZXN0dXJlL3RvdWNoLWdlc3R1cmUtc2Nyb2xsLWRpdi1l
eHBlY3RlZC50eHQgYi9MYXlvdXRUZXN0cy9mYXN0L2V2ZW50cy90b3VjaC9nZXN0dXJlL3RvdWNo
LWdlc3R1cmUtc2Nyb2xsLWRpdi1leHBlY3RlZC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZWIzYjBiZjFhNjA3
Y2FmMGZhZWQ4MzIyM2E0Zjk1ZjdlOWVjMzRiNQotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRl
c3RzL2Zhc3QvZXZlbnRzL3RvdWNoL2dlc3R1cmUvdG91Y2gtZ2VzdHVyZS1zY3JvbGwtZGl2LWV4
cGVjdGVkLnR4dApAQCAtMCwwICsxLDE3IEBACitUaGlzIHRlc3RzIGdlc3R1cmUgZXZlbnQgc2Ny
b2xsaW5nIG9mIGFuIG92ZXJmbG93IGRpdi4KKworT24gc3VjY2VzcywgeW91IHdpbGwgc2VlIGEg
c2VyaWVzIG9mICJQQVNTIiBtZXNzYWdlcywgZm9sbG93ZWQgYnkgIlRFU1QgQ09NUExFVEUiLgor
CisKK2ZpcnN0IGdlc3R1cmUKK1BBU1MgbW92aW5nZGl2LnNjcm9sbFRvcCBpcyAwCitQQVNTIG1v
dmluZ2Rpdi5zY3JvbGxMZWZ0IGlzIDkwCitQQVNTIHdpbmRvdy5pbnRlcm5hbHMucmVjb3JkT2ZH
ZXN0dXJlU2Nyb2xsRXZlbnRzKG1vdmluZ2RpdikgaXMgMTMKK3NlY29uZCBnZXN0dXJlCitQQVNT
IG1vdmluZ2Rpdi5zY3JvbGxUb3AgaXMgOTUKK1BBU1MgbW92aW5nZGl2LnNjcm9sbExlZnQgaXMg
OTAKK1BBU1Mgd2luZG93LmludGVybmFscy5yZWNvcmRPZkdlc3R1cmVTY3JvbGxFdmVudHMobW92
aW5nZGl2KSBpcyAxMworUEFTUyBzdWNjZXNzZnVsbHlQYXJzZWQgaXMgdHJ1ZQorCitURVNUIENP
TVBMRVRFCisKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2Zhc3QvZXZlbnRzL3RvdWNoL2dlc3R1
cmUvdG91Y2gtZ2VzdHVyZS1zY3JvbGwtZGl2Lmh0bWwgYi9MYXlvdXRUZXN0cy9mYXN0L2V2ZW50
cy90b3VjaC9nZXN0dXJlL3RvdWNoLWdlc3R1cmUtc2Nyb2xsLWRpdi5odG1sCm5ldyBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAu
LjM2ZjAzNjE2YmJkMGU1NTNiZTBiNzIzZjFjMmQwMTRhNmE3YmY5MDcKLS0tIC9kZXYvbnVsbAor
KysgYi9MYXlvdXRUZXN0cy9mYXN0L2V2ZW50cy90b3VjaC9nZXN0dXJlL3RvdWNoLWdlc3R1cmUt
c2Nyb2xsLWRpdi5odG1sCkBAIC0wLDAgKzEsMTY1IEBACis8IURPQ1RZUEUgSFRNTCBQVUJMSUMg
Ii0vL0lFVEYvL0RURCBIVE1MLy9FTiI+Cis8aHRtbD4KKzxoZWFkPgorPHNjcmlwdCBzcmM9Ii4u
Ly4uLy4uL2pzL3Jlc291cmNlcy9qcy10ZXN0LXByZS5qcyI+PC9zY3JpcHQ+Cis8c3R5bGUgdHlw
ZT0idGV4dC9jc3MiPgorI3RvdWNodGFyZ2V0IHsKKyAgd2lkdGg6IDEwMHB4OworICBoZWlnaHQ6
IDEwMHB4OworICBwb3NpdGlvbjogcmVsYXRpdmU7CisgIGJhY2tncm91bmQ6IHdoaXRlOworfQor
CisjbW92aW5nYm94IHsKKyAgd2lkdGg6IDEwMCU7CisgIGhlaWdodDogMTAwJTsKKyAgcG9zaXRp
b246IGFic29sdXRlOworICB3b3JkLXdyYXA6IGJyZWFrLXdvcmQ7CisgIG92ZXJmbG93LXk6IHNj
cm9sbDsKKyAgb3ZlcmZsb3cteDogc2Nyb2xsOworICBkaXNwbGF5OiBibG9jazsKK30KKworI2dy
ZWVuYm94IHsKKyAgd2lkdGg6IDEwMHB4OworICBoZWlnaHQ6IDEwMHB4OworICBiYWNrZ3JvdW5k
OiBncmVlbjsKKyAgcGFkZGluZzogMHB4OworICBtYXJnaW46IDBweDsKK30KKworI3JlZGJveCB7
CisgIHdpZHRoOiAxMDBweDsKKyAgaGVpZ2h0OiAxMDBweDsKKyAgYmFja2dyb3VuZDogcmVkOwor
ICBwYWRkaW5nOiAwcHg7CisgIG1hcmdpbjogMHB4OworfQorCit0ZCB7CisgIHBhZGRpbmc6IDBw
eDsKK30KKzwvc3R5bGU+Cis8L2hlYWQ+Cis8Ym9keSBzdHlsZT0ibWFyZ2luOjAiIG9ubG9hZD0i
cnVuVGVzdCgpOyI+Cis8ZGl2IGlkPSJ0b3VjaHRhcmdldCI+CisgIDxkaXYgaWQ9Im1vdmluZ2Jv
eCI+CisgICAgPHRhYmxlIGJvcmRlcj0iMCIgY2VsbHNwYWNpbmc9IjBweCIgaWQ9InRhYmxlZm9v
Ij4KKyAgICAgIDx0cj4KKyAgICAgICAgPHRkPjxkaXYgaWQ9InJlZGJveCI+PC9kaXY+PC90ZD4K
KyAgICAgICAgPHRkPjxkaXYgaWQ9ImdyZWVuYm94Ij48L2Rpdj48L3RkPgorICAgICAgPC90cj4K
KyAgICAgIDx0cj4KKyAgICAgICAgPHRkPjxkaXYgaWQ9ImdyZWVuYm94Ij48L2Rpdj48L3RkPgor
ICAgICAgICA8dGQ+PGRpdiBpZD0iZ3JlZW5ib3giPjwvZGl2PjwvdGQ+CisgICAgICA8L3RyPgor
ICAgIDwvdGFibGU+CisgIDwvZGl2PgorPC9kaXY+CisKKzxwIGlkPSJkZXNjcmlwdGlvbiI+PC9w
PgorPGRpdiBpZD0iY29uc29sZSI+PC9kaXY+Cis8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlw
dCI+CisKK3ZhciBtb3ZpbmdkaXY7Cit2YXIgZXhwZWN0ZWRTY3JvbGxzVG90YWwgPSAyOwordmFy
IHNjcm9sbHNPY2N1cnJlZCA9IDA7Cit2YXIgc2Nyb2xsQW1vdW50WCA9IFsnOTAnLCAnOTAnXTsK
K3ZhciBzY3JvbGxBbW91bnRZID0gWycwJywgJzk1J107Cit2YXIgZ2VzdHVyZURpc3BhdGNoUmVj
b3JkID0gWycxMycsICcxMyddOworCitmdW5jdGlvbiBjaGVja1Njcm9sbE9mZnNldCgpCit7Cisg
ICAgbW92aW5nZGl2ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ21vdmluZ2JveCcpOworICAg
IGlmICh3aW5kb3cuZXZlbnRTZW5kZXIpIHsKKyAgICAgICAgc2hvdWxkQmUoJ21vdmluZ2Rpdi5z
Y3JvbGxUb3AnLCBzY3JvbGxBbW91bnRZW3Njcm9sbHNPY2N1cnJlZF0pOworICAgICAgICBzaG91
bGRCZSgnbW92aW5nZGl2LnNjcm9sbExlZnQnLCBzY3JvbGxBbW91bnRYW3Njcm9sbHNPY2N1cnJl
ZF0pOworICAgICAgICBpZiAod2luZG93LmludGVybmFscykgeworICAgICAgICAgICAgc2hvdWxk
QmUoJ3dpbmRvdy5pbnRlcm5hbHMucmVjb3JkT2ZHZXN0dXJlU2Nyb2xsRXZlbnRzKG1vdmluZ2Rp
diknLCBnZXN0dXJlRGlzcGF0Y2hSZWNvcmRbc2Nyb2xsc09jY3VycmVkXSk7CisgICAgICAgIH0K
KyAgICAgICAgc2Nyb2xsc09jY3VycmVkKys7CisgICAgfQorCisgICBpZiAoc2Nyb2xsc09jY3Vy
cmVkID09IGV4cGVjdGVkU2Nyb2xsc1RvdGFsKSB7CisgICAgICAgIC8vIElmIHdlJ3ZlIGdvdCBo
ZXJlLCB3ZSd2ZSBwYXNzZWQuCisgICAgICAgIGlzU3VjY2Vzc2Z1bGx5UGFyc2VkKCk7CisgICAg
ICAgIGlmICh3aW5kb3cubGF5b3V0VGVzdENvbnRyb2xsZXIpCisgICAgICAgICAgICBsYXlvdXRU
ZXN0Q29udHJvbGxlci5ub3RpZnlEb25lKCk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgc2Vjb25k
VG91Y2hEcmFnU2VxdWVuY2UoKTsKKyAgICB9Cit9CisKK2Z1bmN0aW9uIGZpbmdlclVwKGV2ZW50
KQoreworICAgIGlmICghd2luZG93LmxheW91dFRlc3RDb250cm9sbGVyKQorICAgICAgICBkZWJ1
ZygnbW92ZWQ6ICcgKyBldmVudC5jdXJyZW50VGFyZ2V0LnNjcm9sbFRvcCArICcsICcgKyBldmVu
dC5jdXJyZW50VGFyZ2V0LnNjcm9sbExlZnQpOworICAgIHJldHVybiB0cnVlOyAgLy8gV2FudCB0
aGUgZGVmYXVsdCBiZWhhdmlvdXIuCit9CisKK2Z1bmN0aW9uIGZpcnN0VG91Y2hEcmFnU2VxdWVu
Y2UoKQoreworICAgIGRlYnVnKCJmaXJzdCBnZXN0dXJlIik7CisgICAgdmFyIHRhcmdldCA9IGRv
Y3VtZW50LmdldEVsZW1lbnRCeUlkKCdtb3Zpbmdib3gnKTsKKyAgICB3aW5kb3cuaW50ZXJuYWxz
LmVuYWJsZUdlc3R1cmVTY3JvbGxFdmVudFJlY29yZCh0YXJnZXQpOworCisgICAgd2luZG93Lmlu
dGVybmFscy5zZW5kU2Nyb2xsQmVnaW5HZXN0dXJlRXZlbnQoZG9jdW1lbnQsIDUsIDEyKTsKKyAg
ICB3aW5kb3cuaW50ZXJuYWxzLnNlbmRTY3JvbGxVcGRhdGVHZXN0dXJlRXZlbnQoZG9jdW1lbnQs
IDUsIDEyLCAtOTAsIDApOworICAgIHdpbmRvdy5pbnRlcm5hbHMuc2VuZFNjcm9sbEVuZEdlc3R1
cmVFdmVudChkb2N1bWVudCwgNSwgMTIsIDAsIDApOworCisgICAgLy8gV2FpdCBmb3IgbGF5b3V0
LgorICAgIGNoZWNrU2Nyb2xsT2Zmc2V0KCk7Cit9CisKK2Z1bmN0aW9uIHNlY29uZFRvdWNoRHJh
Z1NlcXVlbmNlKCkKK3sKKyAgICBkZWJ1Zygic2Vjb25kIGdlc3R1cmUiKTsKKyAgICB2YXIgdGFy
Z2V0ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ21vdmluZ2JveCcpOworICAgIHdpbmRvdy5p
bnRlcm5hbHMuZW5hYmxlR2VzdHVyZVNjcm9sbEV2ZW50UmVjb3JkKHRhcmdldCk7CisKKyAgICB3
aW5kb3cuaW50ZXJuYWxzLnNlbmRTY3JvbGxCZWdpbkdlc3R1cmVFdmVudChkb2N1bWVudCwgMTIs
IDIpOworICAgIHdpbmRvdy5pbnRlcm5hbHMuc2VuZFNjcm9sbFVwZGF0ZUdlc3R1cmVFdmVudChk
b2N1bWVudCwgMTIsIDIsIDAsIC05NSk7CisgICAgd2luZG93LmludGVybmFscy5zZW5kU2Nyb2xs
RW5kR2VzdHVyZUV2ZW50KGRvY3VtZW50LCAxMiwgMiwgMCwgMCk7CisKKyAgICAvLyBXYWl0IGZv
ciBsYXlvdXQuCisgICAgY2hlY2tTY3JvbGxPZmZzZXQoKTsKK30KKworZnVuY3Rpb24gZXhpdElm
TmVjZXNzYXJ5KCkKK3sKKyAgICBkZWJ1Zygnd2luZG93LmludGVybmFscyBub3QgaW1wbGVtZW50
ZWQgb3IgZ2VzdHVyZSBldmVudCBzY3JvbGluZyBpcyBicm9rZW4uJyk7CisgICAgaXNTdWNjZXNz
ZnVsbHlQYXJzZWQoKTsKKyAgICBpZiAod2luZG93LmxheW91dFRlc3RDb250cm9sbGVyKQorICAg
ICAgICBsYXlvdXRUZXN0Q29udHJvbGxlci5ub3RpZnlEb25lKCk7Cit9CisKK2lmICh3aW5kb3cu
bGF5b3V0VGVzdENvbnRyb2xsZXIpCisgICAgbGF5b3V0VGVzdENvbnRyb2xsZXIud2FpdFVudGls
RG9uZSgpOworICAgIAorZnVuY3Rpb24gY2hlY2tUZXN0RGVwZW5kZW5jaWVzKCkKK3sKKyAgICBy
ZXR1cm4gd2luZG93LmV2ZW50U2VuZGVyICYmIHdpbmRvdy5pbnRlcm5hbHMgJiYgd2luZG93Lmlu
dGVybmFscy5zZW5kU2Nyb2xsQmVnaW5HZXN0dXJlRXZlbnQgJiYgd2luZG93LmludGVybmFscy5z
ZW5kU2Nyb2xsVXBkYXRlR2VzdHVyZUV2ZW50ICYmIHdpbmRvdy5pbnRlcm5hbHMuc2VuZFNjcm9s
bEVuZEdlc3R1cmVFdmVudDsKK30KKworZnVuY3Rpb24gcnVuVGVzdCgpCit7CisgICAgdmFyIG1v
dmluZ2RpdiA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdtb3Zpbmdib3gnKTsKKworICAgIGlm
ICh3aW5kb3cuZXZlbnRTZW5kZXIpIHsKKyAgICAgICAgZGVzY3JpcHRpb24oJ1RoaXMgdGVzdHMg
Z2VzdHVyZSBldmVudCBzY3JvbGxpbmcgb2YgYW4gb3ZlcmZsb3cgZGl2LicpOworCisgICAgICAg
IGlmIChjaGVja1Rlc3REZXBlbmRlbmNpZXMoKSkKKyAgICAgICAgICAgIGZpcnN0VG91Y2hEcmFn
U2VxdWVuY2UoKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgZXhpdElmTmVjZXNzYXJ5KCk7
CisgICAgfSBlbHNlIHsKKyAgICAgICAgZGVidWcoIlRoaXMgdGVzdCByZXF1aXJlcyBEdW1wUmVu
ZGVyVHJlZSBhbmQgd2luZG93LmludGVybmFscy4gIFRvdWNoIHNjcm9sbCB0aGUgcmVkIHJlY3Qg
dG8gbG9nLiIpOworICAgICAgICBtb3ZpbmdkaXYuYWRkRXZlbnRMaXN0ZW5lcigndG91Y2hlbmQn
LCBmaW5nZXJVcCwgZmFsc2UpOworICAgIH0KK30KKzwvc2NyaXB0PgorCisKKworPC9ib2R5Pgor
PC9odG1sPgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvZmFzdC9ldmVudHMvdG91Y2gvZ2VzdHVy
ZS90b3VjaC1nZXN0dXJlLXNjcm9sbC1pZnJhbWUtZXhwZWN0ZWQudHh0IGIvTGF5b3V0VGVzdHMv
ZmFzdC9ldmVudHMvdG91Y2gvZ2VzdHVyZS90b3VjaC1nZXN0dXJlLXNjcm9sbC1pZnJhbWUtZXhw
ZWN0ZWQudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAuLjVhZTZkOWUyZjZhOTgxYTdlMjMyNGM3N2QxNzZiYTJhNTAw
NzdjZDIKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9mYXN0L2V2ZW50cy90b3VjaC9n
ZXN0dXJlL3RvdWNoLWdlc3R1cmUtc2Nyb2xsLWlmcmFtZS1leHBlY3RlZC50eHQKQEAgLTAsMCAr
MSwxOCBAQAorCitUaGlzIHRlc3RzIGdlc3R1cmUgZXZlbnQgc2Nyb2xsaW5nIGluIGlmcmFtZXMu
IFJlZC1ncmVlbiBzdHJpcCBpcyBzY3JvbGxlZCBvbiBwYXNzLgorCitPbiBzdWNjZXNzLCB5b3Ug
d2lsbCBzZWUgYSBzZXJpZXMgb2YgIlBBU1MiIG1lc3NhZ2VzLCBmb2xsb3dlZCBieSAiVEVTVCBD
T01QTEVURSIuCisKKworZmlyc3QgZ2VzdHVyZQorUEFTUyB0b3VjaHRhcmdldC5jb250ZW50RG9j
dW1lbnQuYm9keS5zY3JvbGxUb3AgaXMgMTQwCitQQVNTIHRvdWNodGFyZ2V0LmNvbnRlbnREb2N1
bWVudC5ib2R5LnNjcm9sbExlZnQgaXMgMAorUEFTUyB3aW5kb3cuaW50ZXJuYWxzLnJlY29yZE9m
R2VzdHVyZVNjcm9sbEV2ZW50cyh0b3VjaHRhcmdldC5jb250ZW50RG9jdW1lbnQpIGlzIDcKK3Nl
Y29uZCBnZXN0dXJlCitQQVNTIHRvdWNodGFyZ2V0LmNvbnRlbnREb2N1bWVudC5ib2R5LnNjcm9s
bFRvcCBpcyAyMDAKK1BBU1MgdG91Y2h0YXJnZXQuY29udGVudERvY3VtZW50LmJvZHkuc2Nyb2xs
TGVmdCBpcyAwCitQQVNTIHdpbmRvdy5pbnRlcm5hbHMucmVjb3JkT2ZHZXN0dXJlU2Nyb2xsRXZl
bnRzKHRvdWNodGFyZ2V0LmNvbnRlbnREb2N1bWVudCkgaXMgNworUEFTUyBzdWNjZXNzZnVsbHlQ
YXJzZWQgaXMgdHJ1ZQorCitURVNUIENPTVBMRVRFCisKZGlmZiAtLWdpdCBhL0xheW91dFRlc3Rz
L2Zhc3QvZXZlbnRzL3RvdWNoL2dlc3R1cmUvdG91Y2gtZ2VzdHVyZS1zY3JvbGwtaWZyYW1lLmh0
bWwgYi9MYXlvdXRUZXN0cy9mYXN0L2V2ZW50cy90b3VjaC9nZXN0dXJlL3RvdWNoLWdlc3R1cmUt
c2Nyb2xsLWlmcmFtZS5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmI5YzI3ZjI1NzY5NTUwNDJhYTRiNzNmNTFm
YTI3YzMzY2Q2ZjRkODkKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9mYXN0L2V2ZW50
cy90b3VjaC9nZXN0dXJlL3RvdWNoLWdlc3R1cmUtc2Nyb2xsLWlmcmFtZS5odG1sCkBAIC0wLDAg
KzEsMTE4IEBACis8IURPQ1RZUEUgSFRNTCBQVUJMSUMgIi0vL0lFVEYvL0RURCBIVE1MLy9FTiI+
Cis8aHRtbD4KKzxoZWFkPgorPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSIuLi8uLi8uLi9q
cy9yZXNvdXJjZXMvanMtdGVzdC1zdHlsZS5jc3MiPgorPHNjcmlwdCBzcmM9Ii4uLy4uLy4uL2pz
L3Jlc291cmNlcy9qcy10ZXN0LXByZS5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0iLi4vLi4v
Li4vanMvcmVzb3VyY2VzL2pzLXRlc3QtcG9zdC1mdW5jdGlvbi5qcyI+PC9zY3JpcHQ+Cis8c3R5
bGUgdHlwZT0idGV4dC9jc3MiPgorI3RvdWNodGFyZ2V0IHsKKyAgd2lkdGg6IDIwMHB4OworICBo
ZWlnaHQ6IDIwMHB4OworICBwb3NpdGlvbjogcmVsYXRpdmU7CisgIGJhY2tncm91bmQ6IHdoaXRl
OworfQorPC9zdHlsZT4KKzwvaGVhZD4KKzxib2R5PgorPGlmcmFtZSBpZD0idG91Y2h0YXJnZXQi
IHNyYz0iLi4vcmVzb3VyY2VzL3Njcm9sbC1pbnNpZGUtaWZyYW1lLmh0bWwiPjwvaWZyYW1lPgor
ICAgIDxwIGlkPSJkZXNjcmlwdGlvbiI+PC9wPgorPGRpdiBpZD0iY29uc29sZSI+PC9kaXY+Cis8
c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CisKK3ZhciB0b3VjaHRhcmdldDsKK3ZhciBl
eHBlY3RlZFNjcm9sbHNUb3RhbCA9IDI7Cit2YXIgc2Nyb2xsc09jY3VycmVkID0gMDsKK3ZhciBz
Y3JvbGxBbW91bnRYID0gWycwJywgJzAnXTsKK3ZhciBzY3JvbGxBbW91bnRZID0gWycxNDAnLCAn
MjAwJ107Cit2YXIgZ2VzdHVyZURpc3BhdGNoUmVjb3JkID0gWyc3JywgJzcnXTsKKworZnVuY3Rp
b24gY2hlY2tTY3JvbGxPZmZzZXQoKQoreworICAgIHRvdWNodGFyZ2V0ID0gZG9jdW1lbnQuZ2V0
RWxlbWVudEJ5SWQoJ3RvdWNodGFyZ2V0Jyk7CisgICAgaWYgKHdpbmRvdy5ldmVudFNlbmRlcikg
eworICAgICAgICBzaG91bGRCZSgndG91Y2h0YXJnZXQuY29udGVudERvY3VtZW50LmJvZHkuc2Ny
b2xsVG9wJywgc2Nyb2xsQW1vdW50WVtzY3JvbGxzT2NjdXJyZWRdKTsKKyAgICAgICAgc2hvdWxk
QmUoJ3RvdWNodGFyZ2V0LmNvbnRlbnREb2N1bWVudC5ib2R5LnNjcm9sbExlZnQnLCBzY3JvbGxB
bW91bnRYW3Njcm9sbHNPY2N1cnJlZF0pOworICAgICAgICBpZiAod2luZG93LmludGVybmFscykg
eworICAgICAgICAgICAgc2hvdWxkQmUoJ3dpbmRvdy5pbnRlcm5hbHMucmVjb3JkT2ZHZXN0dXJl
U2Nyb2xsRXZlbnRzKHRvdWNodGFyZ2V0LmNvbnRlbnREb2N1bWVudCknLCBnZXN0dXJlRGlzcGF0
Y2hSZWNvcmRbc2Nyb2xsc09jY3VycmVkXSk7CisgICAgICAgIH0KKyAgICAgICAgc2Nyb2xsc09j
Y3VycmVkKys7CisgICAgfQorCisgICAgaWYgKHNjcm9sbHNPY2N1cnJlZCA9PSBleHBlY3RlZFNj
cm9sbHNUb3RhbCkgeworICAgICAgICAvLyBJZiB3ZSd2ZSBnb3QgaGVyZSwgd2UndmUgcGFzc2Vk
LgorICAgICAgICBzdWNjZXNzZnVsbHlQYXJzZWQgPSB0cnVlOworICAgICAgICBpc1N1Y2Nlc3Nm
dWxseVBhcnNlZCgpOworICAgICAgICBpZiAod2luZG93LmxheW91dFRlc3RDb250cm9sbGVyKQor
ICAgICAgICAgICAgbGF5b3V0VGVzdENvbnRyb2xsZXIubm90aWZ5RG9uZSgpOworICAgIH0gZWxz
ZSB7CisgICAgICAgIHNlY29uZFRvdWNoRHJhZ1NlcXVlbmNlKCk7CisgICAgfQorfQorCitmdW5j
dGlvbiBmaW5nZXJVcChldmVudCkKK3sKKyAgICBpZiAoIXdpbmRvdy5sYXlvdXRUZXN0Q29udHJv
bGxlcikKKyAgICAgICAgZGVidWcoJ21vdmVkOiAnICsgZXZlbnQuY3VycmVudFRhcmdldC5zY3Jv
bGxUb3AgKyAnLCAnICsgZXZlbnQuY3VycmVudFRhcmdldC5zY3JvbGxMZWZ0KTsKKyAgICByZXR1
cm4gdHJ1ZTsgIC8vIFdhbnQgdGhlIGRlZmF1bHQgYmVoYXZpb3VyLgorfQorCitmdW5jdGlvbiBm
aXJzdFRvdWNoRHJhZ1NlcXVlbmNlKCkKK3sKKyAgICBkZWJ1ZygiZmlyc3QgZ2VzdHVyZSIpOwor
ICAgIHRvdWNodGFyZ2V0ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3RvdWNodGFyZ2V0Jyk7
CisgICAgd2luZG93LmludGVybmFscy5lbmFibGVHZXN0dXJlU2Nyb2xsRXZlbnRSZWNvcmQodG91
Y2h0YXJnZXQuY29udGVudERvY3VtZW50KTsKKyAgICB3aW5kb3cuaW50ZXJuYWxzLnNlbmRTY3Jv
bGxCZWdpbkdlc3R1cmVFdmVudChkb2N1bWVudCwgMTIsIDEwKTsKKyAgICB3aW5kb3cuaW50ZXJu
YWxzLnNlbmRTY3JvbGxVcGRhdGVHZXN0dXJlRXZlbnQoZG9jdW1lbnQsIDEyLCAxMCwgMCwgLTE0
MCk7CisgICAgd2luZG93LmludGVybmFscy5zZW5kU2Nyb2xsRW5kR2VzdHVyZUV2ZW50KGRvY3Vt
ZW50LCAxMiwgMTAsIDAsIDApOworCisgICAgLy8gV2FpdCBmb3IgbGF5b3V0LgorICAgIGNoZWNr
U2Nyb2xsT2Zmc2V0KCk7Cit9CisKK2Z1bmN0aW9uIHNlY29uZFRvdWNoRHJhZ1NlcXVlbmNlKCkK
K3sKKyAgICBkZWJ1Zygic2Vjb25kIGdlc3R1cmUiKTsKKyAgICB0b3VjaHRhcmdldCA9IGRvY3Vt
ZW50LmdldEVsZW1lbnRCeUlkKCd0b3VjaHRhcmdldCcpOworICAgIHdpbmRvdy5pbnRlcm5hbHMu
ZW5hYmxlR2VzdHVyZVNjcm9sbEV2ZW50UmVjb3JkKHRvdWNodGFyZ2V0LmNvbnRlbnREb2N1bWVu
dCk7CisgICAgd2luZG93LmludGVybmFscy5zZW5kU2Nyb2xsQmVnaW5HZXN0dXJlRXZlbnQoZG9j
dW1lbnQsIDEyLCA0MCk7CisgICAgd2luZG93LmludGVybmFscy5zZW5kU2Nyb2xsVXBkYXRlR2Vz
dHVyZUV2ZW50KGRvY3VtZW50LCAxMiwgNDAsIDAsIC02MCk7CisgICAgd2luZG93LmludGVybmFs
cy5zZW5kU2Nyb2xsRW5kR2VzdHVyZUV2ZW50KGRvY3VtZW50LCAxMiwgNDAsIDAsIDApOworCisg
ICAgLy8gV2FpdCBmb3IgbGF5b3V0LgorICAgIGNoZWNrU2Nyb2xsT2Zmc2V0KCk7Cit9CisKK2Z1
bmN0aW9uIGV4aXRJZk5lY2Vzc2FyeSgpCit7CisgICAgZGVidWcoJ3dpbmRvdy5pbnRlcm5zIG5v
dCBpbXBsZW1lbnRlZCBvbiB0aGlzIHBsYXRmb3JtIG9yIGdlc3R1cmUgZXZlbnQgc2Nyb2xsaW5n
IGlzIGJyb2tlbicpOworICAgIHN1Y2Nlc3NmdWxseVBhcnNlZCA9IHRydWU7CisgICAgaXNTdWNj
ZXNzZnVsbHlQYXJzZWQoKTsKKyAgICBpZiAod2luZG93LmxheW91dFRlc3RDb250cm9sbGVyKQor
ICAgICAgICBsYXlvdXRUZXN0Q29udHJvbGxlci5ub3RpZnlEb25lKCk7Cit9CisKK2lmICh3aW5k
b3cubGF5b3V0VGVzdENvbnRyb2xsZXIpCisgICAgbGF5b3V0VGVzdENvbnRyb2xsZXIud2FpdFVu
dGlsRG9uZSgpOworCitmdW5jdGlvbiBjaGVja1Rlc3REZXBlbmRlbmNpZXMoKQoreworICAgIHJl
dHVybiB3aW5kb3cuZXZlbnRTZW5kZXIgJiYgd2luZG93LmludGVybmFscyAmJiB3aW5kb3cuaW50
ZXJuYWxzLnNlbmRTY3JvbGxCZWdpbkdlc3R1cmVFdmVudCAmJiB3aW5kb3cuaW50ZXJuYWxzLnNl
bmRTY3JvbGxVcGRhdGVHZXN0dXJlRXZlbnQgJiYgd2luZG93LmludGVybmFscy5zZW5kU2Nyb2xs
RW5kR2VzdHVyZUV2ZW50OworfQorCitmdW5jdGlvbiBydW5UZXN0KCkKK3sKKyAgICB0b3VjaHRh
cmdldCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b3VjaHRhcmdldCcpOworICAgIGlmICh3
aW5kb3cuZXZlbnRTZW5kZXIpIHsKKyAgICAgICAgZGVzY3JpcHRpb24oJ1RoaXMgdGVzdHMgZ2Vz
dHVyZSBldmVudCBzY3JvbGxpbmcgaW4gaWZyYW1lcy4gJyArCisgICAgICAgICAgICAnUmVkLWdy
ZWVuIHN0cmlwIGlzIHNjcm9sbGVkIG9uIHBhc3MuJyk7CisgICAgICAgIGlmIChjaGVja1Rlc3RE
ZXBlbmRlbmNpZXMoKSkKKyAgICAgICAgICAgIGZpcnN0VG91Y2hEcmFnU2VxdWVuY2UoKTsKKyAg
ICAgICAgZWxzZQorICAgICAgICAgICAgZXhpdElmTmVjZXNzYXJ5KCk7CisgICAgfSBlbHNlIHsK
KyAgICAgICAgZGVidWcoIlRoaXMgdGVzdCByZXF1aXJlcyBEdW1wUmVuZGVyVHJlZSBhbmQgd2lu
ZG93LmludGVybmFscy4gIFRvdWNoLXNjcm9sbCB0aGUgcmVkL2dyZWVuIHN0cmlwLiIpOworICAg
IH0KK30KKzwvc2NyaXB0PgorPC9ib2R5PgorPC9odG1sPgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVz
dHMvZmFzdC9ldmVudHMvdG91Y2gvZ2VzdHVyZS90b3VjaC1nZXN0dXJlLXNjcm9sbC1wYWdlLWV4
cGVjdGVkLnR4dCBiL0xheW91dFRlc3RzL2Zhc3QvZXZlbnRzL3RvdWNoL2dlc3R1cmUvdG91Y2gt
Z2VzdHVyZS1zY3JvbGwtcGFnZS1leHBlY3RlZC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMjM1MWU0ZDFjZGU3
MzJkMmNlN2NmMjQzMTEwZmFjMGY1MWMzZTczYQotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRl
c3RzL2Zhc3QvZXZlbnRzL3RvdWNoL2dlc3R1cmUvdG91Y2gtZ2VzdHVyZS1zY3JvbGwtcGFnZS1l
eHBlY3RlZC50eHQKQEAgLTAsMCArMSwxNyBAQAorVGhpcyB0ZXN0cyBzY3JvbGwgZ2VzdHVyZSBl
dmVudCBzY3JvbGxpbmcgb24gYSB3aG9sZSBwYWdlLgorCitPbiBzdWNjZXNzLCB5b3Ugd2lsbCBz
ZWUgYSBzZXJpZXMgb2YgIlBBU1MiIG1lc3NhZ2VzLCBmb2xsb3dlZCBieSAiVEVTVCBDT01QTEVU
RSIuCisKKworZmlyc3QgZ2VzdHVyZQorUEFTUyBkb2N1bWVudC5ib2R5LnNjcm9sbFRvcCBpcyA3
MAorUEFTUyBkb2N1bWVudC5ib2R5LnNjcm9sbExlZnQgaXMgMAorUEFTUyB3aW5kb3cuaW50ZXJu
YWxzLnJlY29yZE9mR2VzdHVyZVNjcm9sbEV2ZW50cyhkb2N1bWVudCkgaXMgNworc2Vjb25kIGdl
c3R1cmUKK1BBU1MgZG9jdW1lbnQuYm9keS5zY3JvbGxUb3AgaXMgMTMwCitQQVNTIGRvY3VtZW50
LmJvZHkuc2Nyb2xsTGVmdCBpcyAwCitQQVNTIHdpbmRvdy5pbnRlcm5hbHMucmVjb3JkT2ZHZXN0
dXJlU2Nyb2xsRXZlbnRzKGRvY3VtZW50KSBpcyA3CitQQVNTIHN1Y2Nlc3NmdWxseVBhcnNlZCBp
cyB0cnVlCisKK1RFU1QgQ09NUExFVEUKKwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvZmFzdC9l
dmVudHMvdG91Y2gvZ2VzdHVyZS90b3VjaC1nZXN0dXJlLXNjcm9sbC1wYWdlLmh0bWwgYi9MYXlv
dXRUZXN0cy9mYXN0L2V2ZW50cy90b3VjaC9nZXN0dXJlL3RvdWNoLWdlc3R1cmUtc2Nyb2xsLXBh
Z2UuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwLi4wNWFjN2RiNTc4NWE3MDA0NTNmMTFhNzNmNGQ0ZDJlNTQxZTg5
YjQ0Ci0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvZmFzdC9ldmVudHMvdG91Y2gvZ2Vz
dHVyZS90b3VjaC1nZXN0dXJlLXNjcm9sbC1wYWdlLmh0bWwKQEAgLTAsMCArMSwxNTQgQEAKKzwh
RE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8vSUVURi8vRFREIEhUTUwvL0VOIj4KKzxodG1sPgorPGhl
YWQ+Cis8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9Ii4uLy4uLy4uL2pzL3Jlc291cmNlcy9q
cy10ZXN0LXN0eWxlLmNzcyI+Cis8c2NyaXB0IHNyYz0iLi4vLi4vLi4vanMvcmVzb3VyY2VzL2pz
LXRlc3QtcHJlLmpzIj48L3NjcmlwdD4KKzxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+CisjZ3JlZW5i
b3ggeworICB3aWR0aDogMTAwcHg7CisgIGhlaWdodDogMTAwcHg7CisgIGJhY2tncm91bmQ6IGdy
ZWVuOworICBwYWRkaW5nOiAwcHg7CisgIG1hcmdpbjogMHB4OworfQorI3JlZGJveCB7CisgIHdp
ZHRoOiAxMDBweDsKKyAgaGVpZ2h0OiAxMDBweDsKKyAgYmFja2dyb3VuZDogcmVkOworICBwYWRk
aW5nOiAwcHg7CisgIG1hcmdpbjogMHB4OworfQorCit0ZCB7CisgIHBhZGRpbmc6IDBweDsKK30K
Kzwvc3R5bGU+Cis8L2hlYWQ+Cis8Ym9keSBzdHlsZT0ibWFyZ2luOjAiIG9ubG9hZD0icnVuVGVz
dCgpOyI+CisKKzx0YWJsZSBpZD0idGFibGVfdG9fZmlsbCI+CisgICAgPHRyPjx0ZD48ZGl2IGlk
PSJncmVlbmJveCI+PC9kaXY+PC90ZD48L3RyPgorICAgIDx0cj48dGQ+PGRpdiBpZD0icmVkYm94
Ij48L2Rpdj48L3RkPjwvdHI+Cis8L3RhYmxlPgorCis8cCBpZD0iZGVzY3JpcHRpb24iPjwvcD4K
KzxkaXYgaWQ9ImNvbnNvbGUiPjwvZGl2PgorPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQi
PgorCit2YXIgZXhwZWN0ZWRTY3JvbGxzVG90YWwgPSAyOwordmFyIHNjcm9sbHNPY2N1cnJlZCA9
IDA7Cit2YXIgc2Nyb2xsQW1vdW50WCA9IFsnMCcsICcwJ107Cit2YXIgc2Nyb2xsQW1vdW50WSA9
IFsnNzAnLCAnMTMwJ107Cit2YXIgZ2VzdHVyZURpc3BhdGNoUmVjb3JkID0gWyc3JywgJzcnXTsK
KworLy8gQWx3YXlzIGNvbnN0cnVjdCBhIHBhZ2UgbGFyZ2VyIHRoYW4gdGhlIHZlcnRpY2FsIGhl
aWdodCBvZiB0aGUgd2luZG93LgorZnVuY3Rpb24gYnVpbGRQYWdlKCkKK3sKKyAgICB2YXIgdGFi
bGUgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndGFibGVfdG9fZmlsbCcpOworICAgIHZhciB0
YXJnZXRIZWlnaHQgPSBkb2N1bWVudC5ib2R5Lm9mZnNldEhlaWdodDsKKyAgICB2YXIgY2VsbFBh
aXJIZWlnaHQgPSB0YWJsZS5vZmZzZXRIZWlnaHQ7CisgICAgdmFyIG51bWJlck9mUmVwcyA9IHRh
cmdldEhlaWdodCAvIGNlbGxQYWlySGVpZ2h0ICogMjsKKyAgICB2YXIgaTsKKyAgICBmb3IgKGkg
PSAwOyBpIDwgbnVtYmVyT2ZSZXBzOyBpKyspIHsKKyAgICAgICAgdmFyIHAgPSBkb2N1bWVudC5j
cmVhdGVFbGVtZW50KCd0cicpOworICAgICAgICBwLmlubmVySFRNTCA9ICc8dGQ+PGRpdiBpZD0i
Z3JlZW5ib3giPjwvZGl2PjwvdGQ+JzsKKyAgICAgICAgdGFibGUuYXBwZW5kQ2hpbGQocCk7Cisg
ICAgICAgIHZhciBwID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKKyAgICAgICAgcC5p
bm5lckhUTUwgPSAnPHRkPjxkaXYgaWQ9InJlZGJveCI+PC9kaXY+PC90ZD4nOworICAgICAgICB0
YWJsZS5hcHBlbmRDaGlsZChwKTsKKyAgICB9Cit9CisKK2Z1bmN0aW9uIGNoZWNrU2Nyb2xsT2Zm
c2V0KCkKK3sKKyAgICBpZiAod2luZG93LmV2ZW50U2VuZGVyKSB7CisgICAgICAgIHNob3VsZEJl
KCdkb2N1bWVudC5ib2R5LnNjcm9sbFRvcCcsIHNjcm9sbEFtb3VudFlbc2Nyb2xsc09jY3VycmVk
XSk7CisgICAgICAgIHNob3VsZEJlKCdkb2N1bWVudC5ib2R5LnNjcm9sbExlZnQnLCBzY3JvbGxB
bW91bnRYW3Njcm9sbHNPY2N1cnJlZF0pOworICAgICAgICBpZiAod2luZG93LmludGVybmFscykg
eworICAgICAgICAgICAgc2hvdWxkQmUoJ3dpbmRvdy5pbnRlcm5hbHMucmVjb3JkT2ZHZXN0dXJl
U2Nyb2xsRXZlbnRzKGRvY3VtZW50KScsIGdlc3R1cmVEaXNwYXRjaFJlY29yZFtzY3JvbGxzT2Nj
dXJyZWRdKTsKKyAgICAgICAgfQorICAgICAgICBzY3JvbGxzT2NjdXJyZWQrKzsKKyAgICB9CisK
KyAgICBpZiAoc2Nyb2xsc09jY3VycmVkID09IGV4cGVjdGVkU2Nyb2xsc1RvdGFsKSB7CisgICAg
ICAgIC8vIElmIHdlJ3ZlIGdvdCBoZXJlLCB3ZSd2ZSBwYXNzZWQuCisgICAgICAgIHN1Y2Nlc3Nm
dWxseVBhcnNlZCA9IHRydWU7CisgICAgICAgIGlzU3VjY2Vzc2Z1bGx5UGFyc2VkKCk7CisgICAg
ICAgIGlmICh3aW5kb3cubGF5b3V0VGVzdENvbnRyb2xsZXIpCisgICAgICAgICAgICBsYXlvdXRU
ZXN0Q29udHJvbGxlci5ub3RpZnlEb25lKCk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgc2Vjb25k
VG91Y2hEcmFnU2VxdWVuY2UoKTsKKyAgICB9Cit9CisKK2Z1bmN0aW9uIGZpbmdlclVwKGV2ZW50
KQoreworICAgIGlmICghd2luZG93LmxheW91dFRlc3RDb250cm9sbGVyKQorICAgICAgICBkZWJ1
ZygnbW92ZWQ6ICcgKyBldmVudC5jdXJyZW50VGFyZ2V0LnNjcm9sbFRvcCArICcsICcgKyBldmVu
dC5jdXJyZW50VGFyZ2V0LnNjcm9sbExlZnQpOworICAgIHJldHVybiB0cnVlOyAgLy8gV2FudCB0
aGUgZGVmYXVsdCBiZWhhdmlvdXIuCit9CisKK2Z1bmN0aW9uIGZpcnN0VG91Y2hEcmFnU2VxdWVu
Y2UoKQoreworICAgIGRlYnVnKCJmaXJzdCBnZXN0dXJlIik7CisgICAgd2luZG93LmludGVybmFs
cy5lbmFibGVHZXN0dXJlU2Nyb2xsRXZlbnRSZWNvcmQoZG9jdW1lbnQpOworICAgIHdpbmRvdy5p
bnRlcm5hbHMuc2VuZFNjcm9sbEJlZ2luR2VzdHVyZUV2ZW50KGRvY3VtZW50LCAxMCwgNzIpOwor
ICAgIHdpbmRvdy5pbnRlcm5hbHMuc2VuZFNjcm9sbFVwZGF0ZUdlc3R1cmVFdmVudChkb2N1bWVu
dCwgMTAsIDcyLCAwLCAtMzApOworICAgIHdpbmRvdy5pbnRlcm5hbHMuc2VuZFNjcm9sbFVwZGF0
ZUdlc3R1cmVFdmVudChkb2N1bWVudCwgMTAsIDMyLCAwLCAtNDApOworICAgIHdpbmRvdy5pbnRl
cm5hbHMuc2VuZFNjcm9sbEVuZEdlc3R1cmVFdmVudChkb2N1bWVudCwgMTAsIDMyLCAwLCAwKTsK
KworICAgIC8vIFdhaXQgZm9yIGxheW91dC4KKyAgICBjaGVja1Njcm9sbE9mZnNldCgpOworfQor
CitmdW5jdGlvbiBzZWNvbmRUb3VjaERyYWdTZXF1ZW5jZSgpCit7CisgICAgZGVidWcoInNlY29u
ZCBnZXN0dXJlIik7CisgICAgd2luZG93LmludGVybmFscy5lbmFibGVHZXN0dXJlU2Nyb2xsRXZl
bnRSZWNvcmQoZG9jdW1lbnQpOworICAgIHdpbmRvdy5pbnRlcm5hbHMuc2VuZFNjcm9sbEJlZ2lu
R2VzdHVyZUV2ZW50KGRvY3VtZW50LCAxMiwgNDApOworICAgIHdpbmRvdy5pbnRlcm5hbHMuc2Vu
ZFNjcm9sbFVwZGF0ZUdlc3R1cmVFdmVudChkb2N1bWVudCwgMTIsIDQwLCAwLCAtMzApOworICAg
IHdpbmRvdy5pbnRlcm5hbHMuc2VuZFNjcm9sbFVwZGF0ZUdlc3R1cmVFdmVudChkb2N1bWVudCwg
MTIsIDEwLCAwLCAtMzApOworICAgIHdpbmRvdy5pbnRlcm5hbHMuc2VuZFNjcm9sbEVuZEdlc3R1
cmVFdmVudChkb2N1bWVudCwgMTIsIDEwLCAwLCAwKTsKKworICAgIC8vIFdhaXQgZm9yIGxheW91
dC4KKyAgICBjaGVja1Njcm9sbE9mZnNldCgpOworfQorCitmdW5jdGlvbiBleGl0SWZOZWNlc3Nh
cnkoKQoreworICAgIGRlYnVnKCd3aW5kb3cuaW50ZXJuYWxzICBub3QgaW1wbGVtZW50ZWQgb24g
dGhpcyBwbGF0Zm9ybSBvciBnZXN0dXJlIGV2ZW50IHNjcm9sbGluZyBvZiBhIGRvY3VtZW50IGlz
IGJyb2tlbicpOworICAgIHN1Y2Nlc3NmdWxseVBhcnNlZCA9IHRydWU7CisgICAgaXNTdWNjZXNz
ZnVsbHlQYXJzZWQoKTsKKyAgICBpZiAod2luZG93LmxheW91dFRlc3RDb250cm9sbGVyKQorICAg
ICAgICBsYXlvdXRUZXN0Q29udHJvbGxlci5ub3RpZnlEb25lKCk7Cit9CisKK2lmICh3aW5kb3cu
bGF5b3V0VGVzdENvbnRyb2xsZXIpCisgICAgbGF5b3V0VGVzdENvbnRyb2xsZXIud2FpdFVudGls
RG9uZSgpOworCitmdW5jdGlvbiBjaGVja1Rlc3REZXBlbmRlbmNpZXMoKQoreworICAgIHJldHVy
biB3aW5kb3cuZXZlbnRTZW5kZXIgJiYgd2luZG93LmludGVybmFscyAmJiB3aW5kb3cuaW50ZXJu
YWxzLnNlbmRTY3JvbGxCZWdpbkdlc3R1cmVFdmVudCAmJiB3aW5kb3cuaW50ZXJuYWxzLnNlbmRT
Y3JvbGxVcGRhdGVHZXN0dXJlRXZlbnQgJiYgd2luZG93LmludGVybmFscy5zZW5kU2Nyb2xsRW5k
R2VzdHVyZUV2ZW50OworfQorCitmdW5jdGlvbiBydW5UZXN0KCkKK3sKKyAgICBidWlsZFBhZ2Uo
KTsKKworICAgIGlmICh3aW5kb3cuZXZlbnRTZW5kZXIgJiYgd2luZG93LmludGVybmFscykgewor
ICAgICAgICBkZXNjcmlwdGlvbignVGhpcyB0ZXN0cyBzY3JvbGwgZ2VzdHVyZSBldmVudCBzY3Jv
bGxpbmcgb24gYSB3aG9sZSBwYWdlLicpOworICAgICAgICBpZiAoY2hlY2tUZXN0RGVwZW5kZW5j
aWVzKCkpCisgICAgICAgICAgICBmaXJzdFRvdWNoRHJhZ1NlcXVlbmNlKCk7CisgICAgICAgIGVs
c2UKKyAgICAgICAgICAgIGV4aXRJZk5lY2Vzc2FyeSgpOworICAgIH0gZWxzZSB7CisgICAgICAg
IGRlYnVnKCJUaGlzIHRlc3QgcmVxdWlyZXMgRHVtcFJlbmRlclRyZWUgYW5kIHdpbmRvdy5pbnRl
cm5hbHMuICBUb3VjaC1zY3JvbGwgdGhlIHBhZ2UgdG8gdmFsaWRhdGUgdGhlIGltcGxlbWVudGF0
aW9uLiIpOworICAgICAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCd0b3VjaGVuZCcsIGZp
bmdlclVwLCBmYWxzZSk7CisgICAgfQorfQorPC9zY3JpcHQ+CisKKworCis8L2JvZHk+Cis8L2h0
bWw+CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9mYXN0L2V2ZW50cy90b3VjaC9nZXN0dXJlL3Rv
dWNoLWdlc3R1cmUtc2Nyb2xsLXNoeS10YXJnZXQtZXhwZWN0ZWQudHh0IGIvTGF5b3V0VGVzdHMv
ZmFzdC9ldmVudHMvdG91Y2gvZ2VzdHVyZS90b3VjaC1nZXN0dXJlLXNjcm9sbC1zaHktdGFyZ2V0
LWV4cGVjdGVkLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi44OWU4MjJmNDViYWQyMzRiZTEwYzA3ZDlhMjY4Mjk3
ZjA2MzkzN2YwCi0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvZmFzdC9ldmVudHMvdG91
Y2gvZ2VzdHVyZS90b3VjaC1nZXN0dXJlLXNjcm9sbC1zaHktdGFyZ2V0LWV4cGVjdGVkLnR4dApA
QCAtMCwwICsxLDE1IEBACitUaGlzIHRlc3RzIGdlc3R1cmUgc2Nyb2xsaW5nIHRvIGEgZGl2IGRl
bGV0ZWQgd2hpbGUgbGF0Y2hlZCwgU3F1YXJlIGlzIChtb3N0bHkpIGdyZWVuIG9uIHBhc3MKKwor
T24gc3VjY2VzcywgeW91IHdpbGwgc2VlIGEgc2VyaWVzIG9mICJQQVNTIiBtZXNzYWdlcywgZm9s
bG93ZWQgYnkgIlRFU1QgQ09NUExFVEUiLgorCisKK2ZpcnN0IGdlc3R1cmUKK1BBU1MgbW92aW5n
ZGl2LnNjcm9sbFRvcCBpcyA2MgorUEFTUyBtb3ZpbmdkaXYuc2Nyb2xsTGVmdCBpcyA2MworUEFT
UyB3aW5kb3cuaW50ZXJuYWxzLnJlY29yZE9mR2VzdHVyZVNjcm9sbEV2ZW50cyhtb3ZpbmdkaXYp
IGlzIDEzCitzZWNvbmQgZ2VzdHVyZQorcmVjZWl2ZWQgZWxlbWVudCByZW1vdmluZyBrZXlwcmVz
cworUEFTUyBzdWNjZXNzZnVsbHlQYXJzZWQgaXMgdHJ1ZQorCitURVNUIENPTVBMRVRFCisKZGlm
ZiAtLWdpdCBhL0xheW91dFRlc3RzL2Zhc3QvZXZlbnRzL3RvdWNoL2dlc3R1cmUvdG91Y2gtZ2Vz
dHVyZS1zY3JvbGwtc2h5LXRhcmdldC5odG1sIGIvTGF5b3V0VGVzdHMvZmFzdC9ldmVudHMvdG91
Y2gvZ2VzdHVyZS90b3VjaC1nZXN0dXJlLXNjcm9sbC1zaHktdGFyZ2V0Lmh0bWwKbmV3IGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MC4uZDZmY2EwODFlNjAxYWNiMTEyMWE1MjI4MTQ3NTdjZWU2MjE3ZTY3NQotLS0gL2Rldi9udWxs
CisrKyBiL0xheW91dFRlc3RzL2Zhc3QvZXZlbnRzL3RvdWNoL2dlc3R1cmUvdG91Y2gtZ2VzdHVy
ZS1zY3JvbGwtc2h5LXRhcmdldC5odG1sCkBAIC0wLDAgKzEsMTkzIEBACis8IURPQ1RZUEUgSFRN
TCBQVUJMSUMgIi0vL0lFVEYvL0RURCBIVE1MLy9FTiI+Cis8aHRtbD4KKzxoZWFkPgorPGxpbmsg
cmVsPSJzdHlsZXNoZWV0IiBocmVmPSIuLi8uLi8uLi9qcy9yZXNvdXJjZXMvanMtdGVzdC1zdHls
ZS5jc3MiPgorPHNjcmlwdCBzcmM9Ii4uLy4uLy4uL2pzL3Jlc291cmNlcy9qcy10ZXN0LXByZS5q
cyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0iLi4vLi4vLi4vanMvcmVzb3VyY2VzL2pzLXRlc3Qt
cG9zdC1mdW5jdGlvbi5qcyI+PC9zY3JpcHQ+Cis8c3R5bGUgdHlwZT0idGV4dC9jc3MiPgorI3Rv
dWNodGFyZ2V0IHsKKyAgd2lkdGg6IDEwMHB4OworICBoZWlnaHQ6IDEwMHB4OworICBwb3NpdGlv
bjogYWJzb2x1dGU7CisgIGJhY2tncm91bmQ6IHdoaXRlOworICB0b3A6IDEwMHB4OworICBsZWZ0
OiAxMDBweDsKK30KKworI21vdmluZ2JveCB7CisgIHdpZHRoOiAxMDAlOworICBoZWlnaHQ6IDEw
MCU7CisgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKKyAgd29yZC13cmFwOiBicmVhay13b3JkOworICBv
dmVyZmxvdy15OiBzY3JvbGw7CisgIG92ZXJmbG93LXg6IHNjcm9sbDsKKyAgZGlzcGxheTogYmxv
Y2s7Cit9CisKKy5ncmVlbmJveCB7CisgIHdpZHRoOiAxMDBweDsKKyAgaGVpZ2h0OiAxMDBweDsK
KyAgYmFja2dyb3VuZDogZ3JlZW47CisgIHBhZGRpbmc6IDBweDsKKyAgbWFyZ2luOiAwcHg7Cit9
CisKKy5yZWRib3ggeworICB3aWR0aDogMTAwcHg7CisgIGhlaWdodDogMTAwcHg7CisgIGJhY2tn
cm91bmQ6IHJlZDsKKyAgcGFkZGluZzogMHB4OworICBtYXJnaW46IDBweDsKK30KKwordGQgewor
ICBwYWRkaW5nOiAwcHg7Cit9Cis8L3N0eWxlPgorPC9oZWFkPgorPGJvZHkgc3R5bGU9Im1hcmdp
bjowIiBvbmxvYWQ9InJ1blRlc3QoKTsiPgorPGRpdiBpZD0idG91Y2h0YXJnZXQiPgorICA8ZGl2
IGlkPSJtb3Zpbmdib3giPgorICAgIDx0YWJsZSBib3JkZXI9IjAiIGNlbGxzcGFjaW5nPSIwcHgi
IGlkPSJ0YWJsZSI+CisgICAgICA8dHI+CisgICAgICAgIDx0ZD48ZGl2IGNsYXNzPSJyZWRib3gi
IGlkPSJyZWRib3giPjwvZGl2PjwvdGQ+CisgICAgICAgIDx0ZD48ZGl2IGNsYXNzPSJncmVlbmJv
eCIgaWQ9ImdyZWVuYm94XzEiPjwvZGl2PjwvdGQ+CisgICAgICA8L3RyPgorICAgICAgPHRyPgor
ICAgICAgICA8dGQ+PGRpdiBjbGFzcz0iZ3JlZW5ib3giIGlkPSJncmVlbmJveF8yIj48L2Rpdj48
L3RkPgorICAgICAgICA8dGQ+PGRpdiBjbGFzcz0iZ3JlZW5ib3giIGlkPSJncmVlbmJveF8zIj48
L2Rpdj48L3RkPgorICAgICAgPC90cj4KKyAgICA8L3RhYmxlPgorICA8L2Rpdj4KKzwvZGl2Pgor
Cis8cCBpZD0iZGVzY3JpcHRpb24iPjwvcD4KKzxkaXYgaWQ9ImNvbnNvbGUiPjwvZGl2PgorPHNj
cmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgorCit2YXIgbW92aW5nZGl2OwordmFyIGV4cGVj
dGVkU2Nyb2xsc1RvdGFsID0gMjsKK3ZhciBzY3JvbGxzT2NjdXJyZWQgPSAwOwordmFyIHNjcm9s
bEFtb3VudFggPSBbJzYzJywgJzkwJ107Cit2YXIgc2Nyb2xsQW1vdW50WSA9IFsnNjInLCAnOTUn
XTsKK3ZhciBnZXN0dXJlRGlzcGF0Y2hSZWNvcmQgPSBbJzEzJywgJzEzJ107CisKK2RvY3VtZW50
Lm9ua2V5cHJlc3MgPSBmdW5jdGlvbigpCit7CisgICAgZGVidWcoJ3JlY2VpdmVkIGVsZW1lbnQg
cmVtb3Zpbmcga2V5cHJlc3MnKTsKKyAgICB2YXIgcGFyZW50ID0gZG9jdW1lbnQuZ2V0RWxlbWVu
dEJ5SWQoJ3RvdWNodGFyZ2V0Jyk7CisgICAgbW92aW5nZGl2ID0gZG9jdW1lbnQuZ2V0RWxlbWVu
dEJ5SWQoJ21vdmluZ2JveCcpOworICAgIHBhcmVudC5yZW1vdmVDaGlsZChtb3ZpbmdkaXYpOwor
ICAgIHJldHVybiBmYWxzZTsKK30KKworZnVuY3Rpb24gbG9nRmlyc3RUb3VjaFBvaW50KGV2ZW50
KQoreworICAgIGRlYnVnKCdjbGllbnQgaWQnICsgZXZlbnQudGFyZ2V0LmlkKTsKKyAgICBkZWJ1
ZygnY2xpZW50WDogJyArIGV2ZW50LnRvdWNoZXNbMF0uY2xpZW50WCArICcgY2xpZW50WTogJyAr
IGV2ZW50LnRvdWNoZXNbMF0uY2xpZW50WSk7Cit9CisKK2Z1bmN0aW9uIGNoZWNrU2Nyb2xsT2Zm
c2V0KCkKK3sKKyAgICBtb3ZpbmdkaXYgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbW92aW5n
Ym94Jyk7CisgICAgaWYgKHdpbmRvdy5ldmVudFNlbmRlcikgeworICAgICAgICBzaG91bGRCZSgn
bW92aW5nZGl2LnNjcm9sbFRvcCcsIHNjcm9sbEFtb3VudFlbc2Nyb2xsc09jY3VycmVkXSk7Cisg
ICAgICAgIHNob3VsZEJlKCdtb3ZpbmdkaXYuc2Nyb2xsTGVmdCcsIHNjcm9sbEFtb3VudFhbc2Ny
b2xsc09jY3VycmVkXSk7CisgICAgICAgIGlmICh3aW5kb3cuaW50ZXJuYWxzKSB7CisgICAgICAg
ICAgICBzaG91bGRCZSgnd2luZG93LmludGVybmFscy5yZWNvcmRPZkdlc3R1cmVTY3JvbGxFdmVu
dHMobW92aW5nZGl2KScsIGdlc3R1cmVEaXNwYXRjaFJlY29yZFtzY3JvbGxzT2NjdXJyZWRdKTsK
KyAgICAgICAgfQorICAgICAgICBzY3JvbGxzT2NjdXJyZWQrKzsKKyAgICB9CisKKyAgICBpZiAo
c2Nyb2xsc09jY3VycmVkID09IGV4cGVjdGVkU2Nyb2xsc1RvdGFsKSB7CisgICAgICAgIC8vIElm
IHdlJ3ZlIGdvdCBoZXJlLCB3ZSd2ZSBwYXNzZWQuCisgICAgfSBlbHNlIHsKKyAgICAgICAgc2Vj
b25kVG91Y2hEcmFnU2VxdWVuY2UoKTsKKyAgICB9Cit9CisKK2Z1bmN0aW9uIGZpbmdlclVwKGV2
ZW50KQoreworICAgIGlmICghd2luZG93LmxheW91dFRlc3RDb250cm9sbGVyKSB7CisgICAgICAg
IGRlYnVnKCdtb3ZlZDogJyArIGV2ZW50LmN1cnJlbnRUYXJnZXQuc2Nyb2xsVG9wICsgJywgJyAr
IGV2ZW50LmN1cnJlbnRUYXJnZXQuc2Nyb2xsTGVmdCk7CisgICAgICAgIGRlYnVnKCd0YXJnZXQ6
ICcgKyBldmVudC5jdXJyZW50VGFyZ2V0LmlkKTsKKyAgICB9CisgICAgcmV0dXJuIHRydWU7ICAv
LyBXYW50IHRoZSBkZWZhdWx0IGJlaGF2aW91ci4KK30KKworZnVuY3Rpb24gZmlyc3RUb3VjaERy
YWdTZXF1ZW5jZSgpCit7CisgICAgZGVidWcoImZpcnN0IGdlc3R1cmUiKTsKKyAgICBtb3Zpbmdk
aXYgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbW92aW5nYm94Jyk7CisgICAgd2luZG93Lmlu
dGVybmFscy5lbmFibGVHZXN0dXJlU2Nyb2xsRXZlbnRSZWNvcmQobW92aW5nZGl2KTsKKworICAg
IHdpbmRvdy5pbnRlcm5hbHMuc2VuZFNjcm9sbEJlZ2luR2VzdHVyZUV2ZW50KGRvY3VtZW50LCAx
MDEsIDEwMSk7CisgICAgd2luZG93LmludGVybmFscy5zZW5kU2Nyb2xsVXBkYXRlR2VzdHVyZUV2
ZW50KGRvY3VtZW50LCAxMDEsIDEwMSwgLTIwLCAtMjgpOworICAgIHdpbmRvdy5pbnRlcm5hbHMu
c2VuZFNjcm9sbFVwZGF0ZUdlc3R1cmVFdmVudChkb2N1bWVudCwgODcsIDk3LCAtMTQsIC00KTsK
KyAgICB3aW5kb3cuaW50ZXJuYWxzLnNlbmRTY3JvbGxVcGRhdGVHZXN0dXJlRXZlbnQoZG9jdW1l
bnQsIDU4LCA2NywgLTI5LCAtMzApOworICAgIHdpbmRvdy5pbnRlcm5hbHMuc2VuZFNjcm9sbEVu
ZEdlc3R1cmVFdmVudChkb2N1bWVudCwgNTgsIDY3LCAwLCAwKTsKKworICAgIC8vIFdhaXQgZm9y
IGxheW91dC4KKyAgICBjaGVja1Njcm9sbE9mZnNldCgpOworfQorCitmdW5jdGlvbiBzZWNvbmRU
b3VjaERyYWdTZXF1ZW5jZSgpCit7CisgICAgbW92aW5nZGl2LnNjcm9sbFRvcCA9IDA7CisgICAg
bW92aW5nZGl2LnNjcm9sbExlZnQgPSAwOworCisgICAgZGVidWcoInNlY29uZCBnZXN0dXJlIik7
CisgICAgd2luZG93LmludGVybmFscy5zZW5kU2Nyb2xsQmVnaW5HZXN0dXJlRXZlbnQoZG9jdW1l
bnQsIDEwMSwgMTAxKTsKKyAgICB3aW5kb3cuaW50ZXJuYWxzLnNlbmRTY3JvbGxVcGRhdGVHZXN0
dXJlRXZlbnQoZG9jdW1lbnQsIDEwMSwgMTAxLCAtMjAsIC0yOCk7CisgICAgd2luZG93LmludGVy
bmFscy5zZW5kU2Nyb2xsVXBkYXRlR2VzdHVyZUV2ZW50KGRvY3VtZW50LCA4NywgOTcsIC0xNCwg
LTQpOworCisgICAgLy8gU2VuZCBhIGtleSB0byBkZWxldGUgdGhlIHRhcmdldCBFbGVtZW50Lgor
ICAgIGV2ZW50U2VuZGVyLmtleURvd24oImQiLCBbXSk7CisgICAgCisgICAgd2luZG93LmludGVy
bmFscy5zZW5kU2Nyb2xsVXBkYXRlR2VzdHVyZUV2ZW50KGRvY3VtZW50LCA1OCwgNjcsIC0yOSwg
LTMwKTsKKyAgICB3aW5kb3cuaW50ZXJuYWxzLnNlbmRTY3JvbGxFbmRHZXN0dXJlRXZlbnQoZG9j
dW1lbnQsIDU4LCA2NywgMCwgMCk7CisKKyAgICAvLyBCeSBnZXR0aW5nIGhlcmUgc3VjY2Vzc2Z1
bGx5LCB0aGUgdGVzdCBkZW1vbnN0cmF0ZXMgdGhhdCB0aGUgaW1wbGVtZW50YXRpb24KKyAgICAv
LyBkb2VzIG5vdCBjcmFzaCB3aGVuIHRoZSBsYXRjaGVkIEVsZW1lbnQgaXMgcmVtb3ZlZCBmcm9t
IHRoZSBET00uCisgICAgc3VjY2Vzc2Z1bGx5UGFyc2VkID0gdHJ1ZTsKKyAgICBpc1N1Y2Nlc3Nm
dWxseVBhcnNlZCgpOworICAgIGlmICh3aW5kb3cubGF5b3V0VGVzdENvbnRyb2xsZXIpCisgICAg
ICAgIGxheW91dFRlc3RDb250cm9sbGVyLm5vdGlmeURvbmUoKTsKK30KKworZnVuY3Rpb24gZXhp
dElmTmVjZXNzYXJ5KCkKK3sKKyAgICBkZWJ1Zygnd2luZG93LmludGVybmFscyBub3QgaW1wbGVt
ZW50ZWQgb24gdGhpcyBwbGF0Zm9ybSBvciBnZXN0dXJlIHNjcm9sbCBoYW5kbGluZyBicm9rZW4n
KTsKKyAgICBzdWNjZXNzZnVsbHlQYXJzZWQgPSB0cnVlOworICAgIGlzU3VjY2Vzc2Z1bGx5UGFy
c2VkKCk7CisgICAgaWYgKHdpbmRvdy5sYXlvdXRUZXN0Q29udHJvbGxlcikKKyAgICAgICAgbGF5
b3V0VGVzdENvbnRyb2xsZXIubm90aWZ5RG9uZSgpOworfQorCitpZiAod2luZG93LmxheW91dFRl
c3RDb250cm9sbGVyKQorICAgIGxheW91dFRlc3RDb250cm9sbGVyLndhaXRVbnRpbERvbmUoKTsK
KworZnVuY3Rpb24gY2hlY2tUZXN0RGVwZW5kZW5jaWVzKCkKK3sKKyAgICByZXR1cm4gd2luZG93
LmV2ZW50U2VuZGVyICYmIHdpbmRvdy5pbnRlcm5hbHMgJiYgd2luZG93LmludGVybmFscy5zZW5k
U2Nyb2xsQmVnaW5HZXN0dXJlRXZlbnQgJiYgd2luZG93LmludGVybmFscy5zZW5kU2Nyb2xsVXBk
YXRlR2VzdHVyZUV2ZW50ICYmIHdpbmRvdy5pbnRlcm5hbHMuc2VuZFNjcm9sbEVuZEdlc3R1cmVF
dmVudDsKK30KKworZnVuY3Rpb24gcnVuVGVzdCgpCit7CisgICAgaWYgKHdpbmRvdy5ldmVudFNl
bmRlcikgeworICAgICAgICBkZXNjcmlwdGlvbignVGhpcyB0ZXN0cyBnZXN0dXJlIHNjcm9sbGlu
ZyB0byBhIGRpdiBkZWxldGVkIHdoaWxlIGxhdGNoZWQsICcgKyAKKyAgICAgICAgICAgICdTcXVh
cmUgaXMgKG1vc3RseSkgZ3JlZW4gb24gcGFzcycpOworICAgICAgICBpZiAoY2hlY2tUZXN0RGVw
ZW5kZW5jaWVzKCkpCisgICAgICAgICAgICBmaXJzdFRvdWNoRHJhZ1NlcXVlbmNlKCk7CisgICAg
ICAgIGVsc2UKKyAgICAgICAgICAgIGV4aXRJZk5lY2Vzc2FyeSgpOworICAgIH0gZWxzZSB7Cisg
ICAgICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ3RvdWNoc3RhcnQnLCBsb2dGaXJzdFRv
dWNoUG9pbnQpOworICAgICAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCd0b3VjaG1vdmUn
LCBsb2dGaXJzdFRvdWNoUG9pbnQpOworICAgICAgICBkZWJ1ZygiVGhpcyB0ZXN0IHJlcXVpcmVz
IER1bXBSZW5kZXJUcmVlIGFuZCB3aW5kb3cuaW50ZXJuYWxzLiAgVG91Y2gtc2Nyb2xsIHRoZSBy
ZWQgcmVjdCB0byBsb2cuIik7CisgICAgICAgIG1vdmluZ2Rpdi5hZGRFdmVudExpc3RlbmVyKCd0
b3VjaGVuZCcsIGZpbmdlclVwLCBmYWxzZSk7CisgICAgfQorfQorPC9zY3JpcHQ+Cis8L2JvZHk+
Cis8L2h0bWw+CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9mYXN0L2V2ZW50cy90b3VjaC9yZXNv
dXJjZXMvc2Nyb2xsLWluc2lkZS1pZnJhbWUuaHRtbCBiL0xheW91dFRlc3RzL2Zhc3QvZXZlbnRz
L3RvdWNoL3Jlc291cmNlcy9zY3JvbGwtaW5zaWRlLWlmcmFtZS5odG1sCm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjk0
Zjc4ODc3YzUyYmE1NzZiNGM1MTE4MDBmNDE0Yjg0ZDA0MzdkOWMKLS0tIC9kZXYvbnVsbAorKysg
Yi9MYXlvdXRUZXN0cy9mYXN0L2V2ZW50cy90b3VjaC9yZXNvdXJjZXMvc2Nyb2xsLWluc2lkZS1p
ZnJhbWUuaHRtbApAQCAtMCwwICsxLDM0IEBACis8aHRtbD4KKzxoZWFkPgorPHN0eWxlIHR5cGU9
InRleHQvY3NzIj4KKyNncmVlbmJveCB7CisgIHdpZHRoOiAxMDBweDsKKyAgaGVpZ2h0OiAxMDBw
eDsKKyAgYmFja2dyb3VuZDogZ3JlZW47CisgIHBhZGRpbmc6IDBweDsKKyAgbWFyZ2luOiAwcHg7
YQorfQorI3JlZGJveCB7CisgIHdpZHRoOiAxMDBweDsKKyAgaGVpZ2h0OiAxMDBweDsKKyAgYmFj
a2dyb3VuZDogcmVkOworICBwYWRkaW5nOiAwcHg7CisgIG1hcmdpbjogMHB4OworfQorCit0ZCB7
CisgIHBhZGRpbmc6IDBweDsKK30KKzwvc3R5bGU+Cis8L2hlYWQ+Cis8Ym9keSBzdHlsZT0ibWFy
Z2luOjAiIG9ubG9hZD0icGFyZW50LnJ1blRlc3QoKSI+CisKKzx0YWJsZSBpZD0idGFibGVfdG9f
ZmlsbCI+CisgICAgPHRyPjx0ZD48ZGl2IGlkPSJncmVlbmJveCI+PC9kaXY+PC90ZD48L3RyPgor
ICAgIDx0cj48dGQ+PGRpdiBpZD0icmVkYm94Ij48L2Rpdj48L3RkPjwvdHI+CisgICAgPHRyPjx0
ZD48ZGl2IGlkPSJncmVlbmJveCI+PC9kaXY+PC90ZD48L3RyPgorICAgIDx0cj48dGQ+PGRpdiBp
ZD0icmVkYm94Ij48L2Rpdj48L3RkPjwvdHI+Cis8L3RhYmxlPgorPGJvZHk+Cis8L2h0bWw+CisK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>121332</attachid>
            <date>2012-01-05 14:44:36 -0800</date>
            <delta_ts>2012-03-01 13:26:41 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-67822-20120105174434.patch</filename>
            <type>text/plain</type>
            <size>64102</size>
            <attacher name="Robert Kroeger">rjkroege</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTA0MTgyCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNTM5NGFhYjkzYzFmOTY1
MzhmMDJmYmYwODI2MTAzZWRkMWExODRjNC4uYzE0YWI0NDFhZTY1NzhiZWNiNDc4NDhkY2VhYjRm
NTdiMTNlZmYxMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDY4IEBACisyMDEyLTAxLTA1ICBSb2Jl
cnQgS3JvZWdlciAgPHJqa3JvZWdlQGNocm9taXVtLm9yZz4KKworICAgICAgICBQbGF0Zm9ybUdl
c3R1cmVFdmVudDo6aGFuZGxlR2VzdHVyZUV2ZW50IHNob3VsZCBoaXQgdGVzdCB3aGlsZSBkaXNw
YXRjaGluZyBQbGF0Zm9ybUV2ZW50OjpHZXN0dXJlU2Nyb2xsKiBldmVudHMuCisgICAgICAgIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD02NzgyMgorICAgICAgICAKKyAg
ICAgICAgUGxhdGZvcm1FdmVudCBHZXN0dXJlIFNjcm9sbCpUeXBlIGV2ZW50IHNlcXVlbmNlcyBz
aG91bGQgYWxsCisgICAgICAgIGdvIHRvIHRoZSB0YXJnZXQgKG5vZGUsIHBhZ2UsIHdpZGdldCkg
c3BlY2lmaWVkIGJ5IHRoZSBzdGFydGluZworICAgICAgICBHZXN0dXJlU2Nyb2xsQmVnaW4gZXZl
bnQuIFRoaXMgY2hhbmdlIHBsdW1icyBHZXN0dXJlU2Nyb2xsVXBkYXRlCisgICAgICAgIGluc3Rh
bmNlcyB0aHJvdWdoIHRoZSBleGlzdGluZyBzY3JvbGwgY29kZSBzaW1pbGFyIHRvIGhvdyBXaGVl
bAorICAgICAgICBpbnN0YW5jZXMgYXJlIGRlbGl2ZXJlZCBhbmQgYWRkcyB0aGUgbmVjZXNzYXJ5
IGNvZGUgdG8gcGx1bWIKKyAgICAgICAgR2VzdHVyZVNjcm9sbEJlZ2luIGFuZCBHZXN0dXJlU2Ny
b2xsQmVnaW4gaW5zdGFuY2VzIHRocm91Z2ggdG8KKyAgICAgICAgdGhlIGV4aXN0aW5nIFNjcm9s
bGFibGVBcmVhOjpoYW5kbGVHZXN0dXJlRXZlbnQgbWV0aG9kLgorIAorICAgICAgICBSZXZpZXdl
ZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBUZXN0czogZmFzdC9ldmVudHMvdG91Y2gv
Z2VzdHVyZS90b3VjaC1nZXN0dXJlLXNjcm9sbC1kaXYuaHRtbAorICAgICAgICAgICAgICAgZmFz
dC9ldmVudHMvdG91Y2gvZ2VzdHVyZS90b3VjaC1nZXN0dXJlLXNjcm9sbC1pZnJhbWUuaHRtbAor
ICAgICAgICAgICAgICAgZmFzdC9ldmVudHMvdG91Y2gvZ2VzdHVyZS90b3VjaC1nZXN0dXJlLXNj
cm9sbC1wYWdlLmh0bWwKKyAgICAgICAgICAgICAgIGZhc3QvZXZlbnRzL3RvdWNoL2dlc3R1cmUv
dG91Y2gtZ2VzdHVyZS1zY3JvbGwtc2h5LXRhcmdldC5odG1sCisKKyAgICAgICAgKiBwYWdlL0V2
ZW50SGFuZGxlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjp3aGVlbEdyYW51bGFyaXR5VG9TY3Jv
bGxHcmFudWxhcml0eSk6CisgICAgICAgIChXZWJDb3JlOjpzY3JvbGxOb2RlKToKKyAgICAgICAg
KFdlYkNvcmU6Omdlc3R1cmVOb2RlKTogCisgICAgICAgIChXZWJDb3JlOjpFdmVudEhhbmRsZXI6
OmNsZWFyKTogTWlub3IgcmVmYWN0b3JpbmcgZm9yIGNvZGUgc2hhcmluZy4KKyAgICAgICAgKFdl
YkNvcmU6OkV2ZW50SGFuZGxlcjo6ZGV0ZWN0QW5kUGFzc0dlc3R1cmVFdmVudFRvV2lkZ2V0KToK
KyAgICAgICAgKFdlYkNvcmU6OkV2ZW50SGFuZGxlcjo6cGFzc0dlc3R1cmVFdmVudFRvRnJhbWVW
aWV3KToKKyAgICAgICAgKFdlYkNvcmU6OkV2ZW50SGFuZGxlcjo6aGFuZGxlR2VzdHVyZUV2ZW50
KTogTW9kaWZpZWQgYXMgZGVzY3JpYmVkIGFib3ZlLgorICAgICAgICAqIHBhZ2UvRXZlbnRIYW5k
bGVyLmg6CisgICAgICAgICogcGFnZS9jaHJvbWl1bS9FdmVudEhhbmRsZXJDaHJvbWl1bS5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpFdmVudEhhbmRsZXI6OnBhc3NHZXN0dXJlRXZlbnRUb1dpZGdl
dCk6CisgICAgICAgICogcGFnZS9lZmwvRXZlbnRIYW5kbGVyRWZsLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OkV2ZW50SGFuZGxlcjo6cGFzc0dlc3R1cmVFdmVudFRvV2lkZ2V0KToKKyAgICAgICAg
KiBwYWdlL2d0ay9FdmVudEhhbmRsZXJHdGsuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RXZlbnRI
YW5kbGVyOjpwYXNzR2VzdHVyZUV2ZW50VG9XaWRnZXQpOgorICAgICAgICAqIHBhZ2UvbWFjL0V2
ZW50SGFuZGxlck1hYy5tbToKKyAgICAgICAgKFdlYkNvcmU6OkV2ZW50SGFuZGxlcjo6cGFzc0dl
c3R1cmVFdmVudFRvV2lkZ2V0KToKKyAgICAgICAgKiBwYWdlL3F0L0V2ZW50SGFuZGxlclF0LmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OkV2ZW50SGFuZGxlcjo6cGFzc0dlc3R1cmVFdmVudFRvV2lk
Z2V0KToKKyAgICAgICAgKiBwYWdlL3dpbi9FdmVudEhhbmRsZXJXaW4uY3BwOgorICAgICAgICAo
V2ViQ29yZTo6RXZlbnRIYW5kbGVyOjpwYXNzR2VzdHVyZUV2ZW50VG9XaWRnZXQpOgorICAgICAg
ICAqIHBhZ2Uvd3gvRXZlbnRIYW5kbGVyV3guY3BwOgorICAgICAgICAoV2ViQ29yZTo6RXZlbnRI
YW5kbGVyOjpwYXNzR2VzdHVyZUV2ZW50VG9XaWRnZXQpOgorICAgICAgICAqIHBsYXRmb3JtL1Nj
cm9sbEFuaW1hdG9yLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbEFuaW1hdG9yOjpzY3Jv
bGwpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsQW5pbWF0b3I6OmhhbmRsZUdlc3R1cmVFdmVu
dCk6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxBbmltYXRvcjo6Z2VzdHVyZUV2ZW50VGVzdFJl
Y29yZCk6IEFkZGVkOiBpbnRlcm5hbHMtb25seSBtZXRob2QgZm9yIHByb3ZpbmcgdGhhdCBhbGwg
Z2VzdHVyZSBldmVudHMgYXJyaXZlIGF0IHRoZSBjb3JyZWN0IChpLmUuIHNhbWUpIGluc3RhbmNl
LgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsQW5pbWF0b3I6OmVuYWJsZUdlc3R1cmVFdmVudFRl
c3RSZWNvcmQpOiBBZGRlZDogaW50ZXJuYWxzLW9ubHkgbWV0aG9kIHRvIGFjdGljYXRlIHRlc3Rp
bmcuCisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxBbmltYXRvcjo6cmVjb3JkR2VzdHVyZUV2ZW50
UHJvY2Vzc2luZyk6IEFkZGVkOiB0ZXN0IGhlbHBlciBtZXRob2QKKyAgICAgICAgKiBwbGF0Zm9y
bS9TY3JvbGxBbmltYXRvci5oOgorICAgICAgICAqIHBsYXRmb3JtL1Njcm9sbEFuaW1hdG9yTm9u
ZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxBbmltYXRvck5vbmU6OmhhbmRsZUdlc3R1
cmVFdmVudCk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckJveC5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpSZW5kZXJCb3g6Omdlc3R1cmUpOiBEaXNwYXRjaCBnZXN0dXJlcyBpbiB0aGUgc2Ft
ZSBmYXNoaW9uIGFzIHNjcm9sbC4KKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyQm94Lmg6Cisg
ICAgICAgICogdGVzdGluZy9JbnRlcm5hbHMuY3BwOiBBZGRlZCBlbnRyeSBwb2ludHMgZm9yIGRp
c3BhdGNoaW5nIHN5bnRoZXRpYyBnZXN0dXJlIGV2ZW50cywgZW5hYmxpbmcgdGVzdCBoYW5kbGlu
ZyBhbmQgZGV0ZXJtaW5pbmcgaWYgYWxsIHJlcXVpc2l0ZSBldmVudHMgYXJyaXZlZCBhdCB0aGUg
dGFyZ2V0LgorICAgICAgICAoV2ViQ29yZTo6SW50ZXJuYWxzOjplbmFibGVHZXN0dXJlU2Nyb2xs
RXZlbnRSZWNvcmQpOgorICAgICAgICAoV2ViQ29yZTo6SW50ZXJuYWxzOjpyZWNvcmRPZkdlc3R1
cmVTY3JvbGxFdmVudHMpOgorICAgICAgICAoV2ViQ29yZTo6c2VuZEdlc3R1cmVFdmVudCk6Cisg
ICAgICAgIChXZWJDb3JlOjpJbnRlcm5hbHM6OnNlbmRTY3JvbGxCZWdpbkdlc3R1cmVFdmVudCk6
CisgICAgICAgIChXZWJDb3JlOjpJbnRlcm5hbHM6OnNlbmRTY3JvbGxVcGRhdGVHZXN0dXJlRXZl
bnQpOgorICAgICAgICAoV2ViQ29yZTo6SW50ZXJuYWxzOjpzZW5kU2Nyb2xsRW5kR2VzdHVyZUV2
ZW50KToKKyAgICAgICAgKiB0ZXN0aW5nL0ludGVybmFscy5oOgorICAgICAgICAqIHRlc3Rpbmcv
SW50ZXJuYWxzLmlkbDoKKwogMjAxMi0wMS0wNSAgSmlhbiBMaSAgPGppYW5saUBjaHJvbWl1bS5v
cmc+CiAKICAgICAgICAgRmlsZVJlYWRlciBuZWVkcyBhZGRFdmVudExpc3RlbmVyCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL0V2ZW50SGFuZGxlci5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9wYWdlL0V2ZW50SGFuZGxlci5jcHAKaW5kZXggYzIxZWI3ZTI1YzFkOWRjYTQ4MDY0ZDI5ODM5
NWIzMzRhYmVlNTI0Ni4uOTQ2N2Y5MGRkMzk0NDM4ZmM5NzU2MzYwM2U4MWVlYTlmZjdjMzkyZSAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGFnZS9FdmVudEhhbmRsZXIuY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3BhZ2UvRXZlbnRIYW5kbGVyLmNwcApAQCAtNjksNiArNjksNyBAQAogI2lu
Y2x1ZGUgIlJlbmRlclZpZXcuaCIKICNpbmNsdWRlICJSZW5kZXJXaWRnZXQuaCIKICNpbmNsdWRl
ICJTY3JvbGxBbmltYXRvci5oIgorI2luY2x1ZGUgIlNjcm9sbGFibGVBcmVhLmgiCiAjaW5jbHVk
ZSAiU2Nyb2xsYmFyLmgiCiAjaW5jbHVkZSAiU2V0dGluZ3MuaCIKICNpbmNsdWRlICJTcGF0aWFs
TmF2aWdhdGlvbi5oIgpAQCAtMTQyLDcgKzE0MywyMCBAQCBwcml2YXRlOgogICAgIEN1cnNvciBt
X2N1cnNvcjsKIH07CiAKLXN0YXRpYyBpbmxpbmUgYm9vbCBzY3JvbGxOb2RlKGZsb2F0IGRlbHRh
LCBXaGVlbEV2ZW50OjpHcmFudWxhcml0eSBncmFudWxhcml0eSwgU2Nyb2xsRGlyZWN0aW9uIHBv
c2l0aXZlRGlyZWN0aW9uLCBTY3JvbGxEaXJlY3Rpb24gbmVnYXRpdmVEaXJlY3Rpb24sIE5vZGUq
IG5vZGUsIE5vZGUqKiBzdG9wTm9kZSkKK3N0YXRpYyBpbmxpbmUgU2Nyb2xsR3JhbnVsYXJpdHkg
d2hlZWxHcmFudWxhcml0eVRvU2Nyb2xsR3JhbnVsYXJpdHkoV2hlZWxFdmVudDo6R3JhbnVsYXJp
dHkgZ3JhbnVsYXJpdHkpCit7CisgICAgc3dpdGNoIChncmFudWxhcml0eSkgeworICAgIGNhc2Ug
V2hlZWxFdmVudDo6UGFnZToKKyAgICAgICAgcmV0dXJuIFNjcm9sbEJ5UGFnZTsKKyAgICBjYXNl
IFdoZWVsRXZlbnQ6OkxpbmU6CisgICAgICAgIHJldHVybiBTY3JvbGxCeUxpbmU7CisgICAgY2Fz
ZSBXaGVlbEV2ZW50OjpQaXhlbDoKKyAgICAgICAgcmV0dXJuIFNjcm9sbEJ5UGl4ZWw7CisgICAg
fQorICAgIHJldHVybiBTY3JvbGxCeVBpeGVsOworfQorCitzdGF0aWMgaW5saW5lIGJvb2wgc2Ny
b2xsTm9kZShmbG9hdCBkZWx0YSwgU2Nyb2xsR3JhbnVsYXJpdHkgZ3JhbnVsYXJpdHksIFNjcm9s
bERpcmVjdGlvbiBwb3NpdGl2ZURpcmVjdGlvbiwgU2Nyb2xsRGlyZWN0aW9uIG5lZ2F0aXZlRGly
ZWN0aW9uLCBOb2RlKiBub2RlLCBOb2RlKiogc3RvcE5vZGUpCiB7CiAgICAgaWYgKCFkZWx0YSkK
ICAgICAgICAgcmV0dXJuIGZhbHNlOwpAQCAtMTUwLDIyICsxNjQsMjUgQEAgc3RhdGljIGlubGlu
ZSBib29sIHNjcm9sbE5vZGUoZmxvYXQgZGVsdGEsIFdoZWVsRXZlbnQ6OkdyYW51bGFyaXR5IGdy
YW51bGFyaXR5LAogICAgIGlmICghbm9kZS0+cmVuZGVyZXIoKSkKICAgICAgICAgcmV0dXJuIGZh
bHNlOwogICAgIAotICAgIC8vIEZpbmQgdGhlIG5lYXJlc3QgZW5jbG9zaW5nIGJveC4KICAgICBS
ZW5kZXJCb3gqIGVuY2xvc2luZ0JveCA9IG5vZGUtPnJlbmRlcmVyKCktPmVuY2xvc2luZ0JveCgp
OwotCiAgICAgZmxvYXQgYWJzRGVsdGEgPSBkZWx0YSA+IDAgPyBkZWx0YSA6IC1kZWx0YTsKLSAg
ICAKLSAgICBpZiAoZ3JhbnVsYXJpdHkgPT0gV2hlZWxFdmVudDo6UGFnZSkKLSAgICAgICAgcmV0
dXJuIGVuY2xvc2luZ0JveC0+c2Nyb2xsKGRlbHRhIDwgMCA/IG5lZ2F0aXZlRGlyZWN0aW9uIDog
cG9zaXRpdmVEaXJlY3Rpb24sIFNjcm9sbEJ5UGFnZSwgYWJzRGVsdGEsIHN0b3BOb2RlKTsKKyAg
ICByZXR1cm4gZW5jbG9zaW5nQm94LT5zY3JvbGwoZGVsdGEgPCAwID8gbmVnYXRpdmVEaXJlY3Rp
b24gOiBwb3NpdGl2ZURpcmVjdGlvbiwgZ3JhbnVsYXJpdHksIGFic0RlbHRhLCBzdG9wTm9kZSk7
Cit9CiAKLSAgICBpZiAoZ3JhbnVsYXJpdHkgPT0gV2hlZWxFdmVudDo6TGluZSkKLSAgICAgICAg
cmV0dXJuIGVuY2xvc2luZ0JveC0+c2Nyb2xsKGRlbHRhIDwgMCA/IG5lZ2F0aXZlRGlyZWN0aW9u
IDogcG9zaXRpdmVEaXJlY3Rpb24sIFNjcm9sbEJ5TGluZSwgYWJzRGVsdGEsIHN0b3BOb2RlKTsK
K3N0YXRpYyBpbmxpbmUgYm9vbCBzY3JvbGxOb2RlKGZsb2F0IGRlbHRhLCBXaGVlbEV2ZW50OjpH
cmFudWxhcml0eSBncmFudWxhcml0eSwgU2Nyb2xsRGlyZWN0aW9uIHBvc2l0aXZlRGlyZWN0aW9u
LCBTY3JvbGxEaXJlY3Rpb24gbmVnYXRpdmVEaXJlY3Rpb24sIE5vZGUqIG5vZGUsIE5vZGUqKiBz
dG9wTm9kZSkKK3sKKyAgICByZXR1cm4gc2Nyb2xsTm9kZShkZWx0YSwgd2hlZWxHcmFudWxhcml0
eVRvU2Nyb2xsR3JhbnVsYXJpdHkoZ3JhbnVsYXJpdHkpLCBwb3NpdGl2ZURpcmVjdGlvbiwgbmVn
YXRpdmVEaXJlY3Rpb24sIG5vZGUsIHN0b3BOb2RlKTsKK30KIAotICAgIGlmIChncmFudWxhcml0
eSA9PSBXaGVlbEV2ZW50OjpQaXhlbCkKLSAgICAgICAgcmV0dXJuIGVuY2xvc2luZ0JveC0+c2Ny
b2xsKGRlbHRhIDwgMCA/IG5lZ2F0aXZlRGlyZWN0aW9uIDogcG9zaXRpdmVEaXJlY3Rpb24sIFNj
cm9sbEJ5UGl4ZWwsIGFic0RlbHRhLCBzdG9wTm9kZSk7Ci0gICAgICAgIAotICAgIHJldHVybiBm
YWxzZTsKKyNpZiBFTkFCTEUoR0VTVFVSRV9FVkVOVFMpCitzdGF0aWMgaW5saW5lIGJvb2wgZ2Vz
dHVyZU5vZGUoY29uc3QgUGxhdGZvcm1HZXN0dXJlRXZlbnQmIGdlc3R1cmVFdmVudCwgTm9kZSog
bm9kZSkKK3sKKyAgICBpZiAoIW5vZGUtPnJlbmRlcmVyKCkpCisgICAgICAgIHJldHVybiBmYWxz
ZTsKKyAgICBSZW5kZXJCb3gqIGVuY2xvc2luZ0JveCA9IG5vZGUtPnJlbmRlcmVyKCktPmVuY2xv
c2luZ0JveCgpOworICAgIHJldHVybiBlbmNsb3NpbmdCb3gtPmdlc3R1cmUoZ2VzdHVyZUV2ZW50
KTsKIH0KKyNlbmRpZgogCiAjaWYgIVBMQVRGT1JNKE1BQykKIApAQCAtMjY3LDYgKzI4NCw5IEBA
IHZvaWQgRXZlbnRIYW5kbGVyOjpjbGVhcigpCiAjaWYgRU5BQkxFKFRPVUNIX0VWRU5UUykKICAg
ICBtX29yaWdpbmF0aW5nVG91Y2hQb2ludFRhcmdldHMuY2xlYXIoKTsKICNlbmRpZgorI2lmIEVO
QUJMRShHRVNUVVJFX0VWRU5UUykKKyAgICBtX2dlc3R1cmVUYXJnZXROb2RlLmNsZWFyKCk7Cisj
ZW5kaWYKIH0KIAogdm9pZCBFdmVudEhhbmRsZXI6Om5vZGVXaWxsQmVSZW1vdmVkKE5vZGUqIG5v
ZGVUb0JlUmVtb3ZlZCkKQEAgLTIyMjgsMTggKzIyNDgsNTUgQEAgdm9pZCBFdmVudEhhbmRsZXI6
OmRlZmF1bHRXaGVlbEV2ZW50SGFuZGxlcihOb2RlKiBzdGFydE5vZGUsIFdoZWVsRXZlbnQqIHdo
ZWVsRXYKIH0KIAogI2lmIEVOQUJMRShHRVNUVVJFX0VWRU5UUykKK2Jvb2wgRXZlbnRIYW5kbGVy
OjpkZXRlY3RBbmRQYXNzR2VzdHVyZUV2ZW50VG9XaWRnZXQoUGFzc1JlZlB0cjxOb2RlPiB0YXJn
ZXROb2RlLCBjb25zdCBQbGF0Zm9ybUdlc3R1cmVFdmVudCYgZ2VzdHVyZUV2ZW50LCBjb25zdCBI
aXRUZXN0UmVzdWx0JiByZXN1bHQpCit7CisgICAgTm9kZSogbm9kZSA9IHRhcmdldE5vZGUuZ2V0
KCk7CisgICAgaWYgKCFub2RlKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBib29sIGlz
T3ZlcldpZGdldCA9IHJlc3VsdC5pc092ZXJXaWRnZXQoKTsKKyAgICBSZW5kZXJPYmplY3QqIHRh
cmdldCA9IG5vZGUtPnJlbmRlcmVyKCk7CisgICAgaWYgKCEoaXNPdmVyV2lkZ2V0ICYmIHRhcmdl
dCAmJiB0YXJnZXQtPmlzV2lkZ2V0KCkpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAg
IAorICAgIFdpZGdldCogd2lkZ2V0ID0gdG9SZW5kZXJXaWRnZXQodGFyZ2V0KS0+d2lkZ2V0KCk7
CisgICAgaWYgKHdpZGdldCAmJiBwYXNzR2VzdHVyZUV2ZW50VG9XaWRnZXQoZ2VzdHVyZUV2ZW50
LCB3aWRnZXQpKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICByZXR1cm4gZmFsc2U7Cit9CisK
K2Jvb2wgRXZlbnRIYW5kbGVyOjpwYXNzR2VzdHVyZUV2ZW50VG9GcmFtZVZpZXcoY29uc3QgUGxh
dGZvcm1HZXN0dXJlRXZlbnQmIGdlc3R1cmVFdmVudCkKK3sKKyAgICBGcmFtZVZpZXcqIHZpZXcg
PSBtX2ZyYW1lLT52aWV3KCk7CisgICAgaWYgKCF2aWV3KQorICAgICAgIHJldHVybiBmYWxzZTsK
KworICAgIHZpZXctPmhhbmRsZUdlc3R1cmVFdmVudChnZXN0dXJlRXZlbnQpOworICAgIHJldHVy
biB0cnVlOworfQorCiBib29sIEV2ZW50SGFuZGxlcjo6aGFuZGxlR2VzdHVyZUV2ZW50KGNvbnN0
IFBsYXRmb3JtR2VzdHVyZUV2ZW50JiBnZXN0dXJlRXZlbnQpCiB7Ci0gICAgLy8gRklYTUU6IFRo
aXMgc2hvdWxkIGhpdCB0ZXN0IGFuZCBnbyB0byB0aGUgY29ycmVjdCBzdWJmcmFtZSByYXRoZXIg
dGhhbiAKLSAgICAvLyBhbHdheXMgc2VuZGluZyBnZXN0dXJlcyB0byB0aGUgbWFpbiBmcmFtZSBv
bmx5LiBXZSBzaG91bGQgYWxzbyBlbnN1cmUKLSAgICAvLyB0aGF0IGlmIGEgZnJhbWUgZ2V0cyBh
IGdlc3R1cmUgYmVnaW4gZ2VzdHVyZSwgaXQgZ2V0cyB0aGUgY29ycmVzcG9uZGluZwotICAgIC8v
IGVuZCBnZXN0dXJlIGFzIHdlbGwuCisgICAgRG9jdW1lbnQqIGRvY3VtZW50ID0gbV9mcmFtZS0+
ZG9jdW1lbnQoKTsKKyAgICBSZW5kZXJPYmplY3QqIGRvY3VtZW50UmVuZGVyZXIgPSBkb2N1bWVu
dC0+cmVuZGVyZXIoKTsKKyAgICBpZiAoIWRvY3VtZW50UmVuZGVyZXIpCisgICAgICAgIHJldHVy
biBmYWxzZTsKKyAgICBSZWZQdHI8RnJhbWVWaWV3PiBwcm90ZWN0b3IobV9mcmFtZS0+dmlldygp
KTsKKyAgICBGcmFtZVZpZXcqIHZpZXcgPSBtX2ZyYW1lLT52aWV3KCk7CisgICAgaWYgKCF2aWV3
KQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgc2V0RnJhbWVXYXNTY3JvbGxlZEJ5VXNlcigp
OworICAgIExheW91dFBvaW50IHBvaW50SW5WaWV3Q29vcmRpbmF0ZXMgPSB2aWV3LT53aW5kb3dU
b0NvbnRlbnRzKGdlc3R1cmVFdmVudC5wb3NpdGlvbigpKTsKKworICAgIEhpdFRlc3RSZXF1ZXN0
IHJlcXVlc3QoSGl0VGVzdFJlcXVlc3Q6OlJlYWRPbmx5KTsKKyAgICBIaXRUZXN0UmVzdWx0IHJl
c3VsdChwb2ludEluVmlld0Nvb3JkaW5hdGVzKTsKKyAgICBkb2N1bWVudC0+cmVuZGVyVmlldygp
LT5sYXllcigpLT5oaXRUZXN0KHJlcXVlc3QsIHJlc3VsdCk7CiAKICAgICBzd2l0Y2ggKGdlc3R1
cmVFdmVudC50eXBlKCkpIHsKICAgICBjYXNlIFBsYXRmb3JtRXZlbnQ6Okdlc3R1cmVUYXBEb3du
OgogICAgICAgICBicmVhazsKICAgICBjYXNlIFBsYXRmb3JtRXZlbnQ6Okdlc3R1cmVUYXA6IHsK
LSAgICAgICAgLy8gRklYTUU6IFJlZmFjdG9yIHRoaXMgY29kZSB0byBub3QgaGl0IHRlc3QgbXVs
dGlwbGUgdGltZXMgb25jZSBoaXQgdGVzdGluZyBoYXMgYmVlbiBjb3JyZWN0ZWQgYXMgc3VnZ2Vz
dGVkIGFib3ZlLgorICAgICAgICAvLyBGSVhNRTogUmVmYWN0b3IgdGhpcyBjb2RlIHRvIG5vdCBo
aXQgdGVzdCBtdWx0aXBsZSB0aW1lcyBieSB1c2luZyB0aGUgY29kZSB3cml0dGVuIGZvciBzY3Jv
bGwuCiAgICAgICAgIFBsYXRmb3JtTW91c2VFdmVudCBmYWtlTW91c2VNb3ZlKGdlc3R1cmVFdmVu
dC5wb3NpdGlvbigpLCBnZXN0dXJlRXZlbnQuZ2xvYmFsUG9zaXRpb24oKSwgTm9CdXR0b24sIFBs
YXRmb3JtRXZlbnQ6Ok1vdXNlTW92ZWQsIC8qIGNsaWNrQ291bnQgKi8gMSwgZ2VzdHVyZUV2ZW50
LnNoaWZ0S2V5KCksIGdlc3R1cmVFdmVudC5jdHJsS2V5KCksIGdlc3R1cmVFdmVudC5hbHRLZXko
KSwgZ2VzdHVyZUV2ZW50Lm1ldGFLZXkoKSwgZ2VzdHVyZUV2ZW50LnRpbWVzdGFtcCgpKTsKICAg
ICAgICAgUGxhdGZvcm1Nb3VzZUV2ZW50IGZha2VNb3VzZURvd24oZ2VzdHVyZUV2ZW50LnBvc2l0
aW9uKCksIGdlc3R1cmVFdmVudC5nbG9iYWxQb3NpdGlvbigpLCBMZWZ0QnV0dG9uLCBQbGF0Zm9y
bUV2ZW50OjpNb3VzZVByZXNzZWQsIC8qIGNsaWNrQ291bnQgKi8gMSwgZ2VzdHVyZUV2ZW50LnNo
aWZ0S2V5KCksIGdlc3R1cmVFdmVudC5jdHJsS2V5KCksIGdlc3R1cmVFdmVudC5hbHRLZXkoKSwg
Z2VzdHVyZUV2ZW50Lm1ldGFLZXkoKSwgZ2VzdHVyZUV2ZW50LnRpbWVzdGFtcCgpKTsKICAgICAg
ICAgUGxhdGZvcm1Nb3VzZUV2ZW50IGZha2VNb3VzZVVwKGdlc3R1cmVFdmVudC5wb3NpdGlvbigp
LCBnZXN0dXJlRXZlbnQuZ2xvYmFsUG9zaXRpb24oKSwgTGVmdEJ1dHRvbiwgUGxhdGZvcm1FdmVu
dDo6TW91c2VSZWxlYXNlZCwgLyogY2xpY2tDb3VudCAqLyAxLCBnZXN0dXJlRXZlbnQuc2hpZnRL
ZXkoKSwgZ2VzdHVyZUV2ZW50LmN0cmxLZXkoKSwgZ2VzdHVyZUV2ZW50LmFsdEtleSgpLCBnZXN0
dXJlRXZlbnQubWV0YUtleSgpLCBnZXN0dXJlRXZlbnQudGltZXN0YW1wKCkpOwpAQCAtMjI0OSwy
OCArMjMwNiw1MiBAQCBib29sIEV2ZW50SGFuZGxlcjo6aGFuZGxlR2VzdHVyZUV2ZW50KGNvbnN0
IFBsYXRmb3JtR2VzdHVyZUV2ZW50JiBnZXN0dXJlRXZlbnQpCiAgICAgICAgIHJldHVybiB0cnVl
OwogICAgIH0KICAgICBjYXNlIFBsYXRmb3JtRXZlbnQ6Okdlc3R1cmVTY3JvbGxVcGRhdGU6IHsK
LSAgICAgICAgY29uc3QgZmxvYXQgdGlja0Rpdmlzb3IgPSAoZmxvYXQpV2hlZWxFdmVudDo6dGlj
a011bHRpcGxpZXI7Ci0gICAgICAgIC8vIEZJWE1FOiBSZXBsYWNlIHRoaXMgaW50ZXJpbSBpbXBs
ZW1lbnRhdGlvbiBvbmNlIHRoZSBhYm92ZSBmaXhtZSBoYXMgYmVlbiBhZGRyZXNzZWQuCi0gICAg
ICAgIEludFBvaW50IHBvaW50KGdlc3R1cmVFdmVudC5wb3NpdGlvbigpLngoKSwgZ2VzdHVyZUV2
ZW50LnBvc2l0aW9uKCkueSgpKTsKLSAgICAgICAgSW50UG9pbnQgZ2xvYmFsUG9pbnQoZ2VzdHVy
ZUV2ZW50Lmdsb2JhbFBvc2l0aW9uKCkueCgpLCBnZXN0dXJlRXZlbnQuZ2xvYmFsUG9zaXRpb24o
KS55KCkpOwotICAgICAgICBQbGF0Zm9ybVdoZWVsRXZlbnQgc3ludGhldGljV2hlZWxFdmVudChw
b2ludCwgZ2xvYmFsUG9pbnQsIGdlc3R1cmVFdmVudC5kZWx0YVgoKSwgZ2VzdHVyZUV2ZW50LmRl
bHRhWSgpLCBnZXN0dXJlRXZlbnQuZGVsdGFYKCkgLyB0aWNrRGl2aXNvciwgZ2VzdHVyZUV2ZW50
LmRlbHRhWSgpIC8gdGlja0Rpdmlzb3IsIFNjcm9sbEJ5UGl4ZWxXaGVlbEV2ZW50LCBnZXN0dXJl
RXZlbnQuc2hpZnRLZXkoKSwgZ2VzdHVyZUV2ZW50LmN0cmxLZXkoKSwgZ2VzdHVyZUV2ZW50LmFs
dEtleSgpLCBnZXN0dXJlRXZlbnQubWV0YUtleSgpKTsKLSAgICAgICAgaGFuZGxlV2hlZWxFdmVu
dChzeW50aGV0aWNXaGVlbEV2ZW50KTsKLSAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIC8v
IEFsd2F5cyBsYXRjaGVkIGlmIHBvc3NpYmxlLgorICAgICAgICBpZiAoIW1fZ2VzdHVyZVRhcmdl
dE5vZGUpCisgICAgICAgICAgICBtX2dlc3R1cmVUYXJnZXROb2RlID0gcmVzdWx0LmlubmVyTm9k
ZSgpOworCisgICAgICAgIGlmIChkZXRlY3RBbmRQYXNzR2VzdHVyZUV2ZW50VG9XaWRnZXQobV9n
ZXN0dXJlVGFyZ2V0Tm9kZSwgZ2VzdHVyZUV2ZW50LCByZXN1bHQpKQorICAgICAgICAgICAgcmV0
dXJuIHRydWU7CisgICAgICAgIE5vZGUqIG5vZGUgPSBtX2dlc3R1cmVUYXJnZXROb2RlID8gbV9n
ZXN0dXJlVGFyZ2V0Tm9kZS0+c2hhZG93QW5jZXN0b3JOb2RlKCkgOiAwOworICAgICAgICBib29s
IHhTY3JvbGwgPSBub2RlICYmIHNjcm9sbE5vZGUoZ2VzdHVyZUV2ZW50LmRlbHRhWCgpLCBTY3Jv
bGxCeVBpeGVsLCBTY3JvbGxMZWZ0LCBTY3JvbGxSaWdodCwgbm9kZSwgMCk7CisgICAgICAgIGJv
b2wgeVNjcm9sbCA9IG5vZGUgJiYgc2Nyb2xsTm9kZShnZXN0dXJlRXZlbnQuZGVsdGFZKCksIFNj
cm9sbEJ5UGl4ZWwsIFNjcm9sbFVwLCBTY3JvbGxEb3duLCBub2RlLCAwKTsKKworICAgICAgICBp
ZiAoeFNjcm9sbCB8fCB5U2Nyb2xsKQorICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAg
IHJldHVybiBwYXNzR2VzdHVyZUV2ZW50VG9GcmFtZVZpZXcoZ2VzdHVyZUV2ZW50KTsKKyAgICB9
CisgICAgY2FzZSBQbGF0Zm9ybUV2ZW50OjpHZXN0dXJlU2Nyb2xsQmVnaW46IHsKKyAgICAgICAg
Ly8gTGF0Y2ggb24gc2Nyb2xsIGJlZ2luLgorICAgICAgICBpZiAobV9nZXN0dXJlVGFyZ2V0Tm9k
ZSkKKyAgICAgICAgICAgIG1fZ2VzdHVyZVRhcmdldE5vZGUgPSAwOworICAgICAgICBtX2dlc3R1
cmVUYXJnZXROb2RlID0gcmVzdWx0LmlubmVyTm9kZSgpOworCisgICAgICAgIGlmIChkZXRlY3RB
bmRQYXNzR2VzdHVyZUV2ZW50VG9XaWRnZXQobV9nZXN0dXJlVGFyZ2V0Tm9kZSwgZ2VzdHVyZUV2
ZW50LCByZXN1bHQpKQorICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIE5vZGUqIG5v
ZGUgPSBtX2dlc3R1cmVUYXJnZXROb2RlID8gbV9nZXN0dXJlVGFyZ2V0Tm9kZS0+c2hhZG93QW5j
ZXN0b3JOb2RlKCkgOiAwOworICAgICAgICBpZiAobm9kZSAmJiBnZXN0dXJlTm9kZShnZXN0dXJl
RXZlbnQsIG5vZGUpKQorICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIHJldHVybiBw
YXNzR2VzdHVyZUV2ZW50VG9GcmFtZVZpZXcoZ2VzdHVyZUV2ZW50KTsKICAgICB9Ci0gICAgY2Fz
ZSBQbGF0Zm9ybUV2ZW50OjpHZXN0dXJlRG91YmxlVGFwOgotICAgIGNhc2UgUGxhdGZvcm1FdmVu
dDo6R2VzdHVyZVNjcm9sbEJlZ2luOgogICAgIGNhc2UgUGxhdGZvcm1FdmVudDo6R2VzdHVyZVNj
cm9sbEVuZDogewotICAgICAgICBGcmFtZVZpZXcqIHZpZXcgPSBtX2ZyYW1lLT52aWV3KCk7Ci0g
ICAgICAgIGlmICghdmlldykKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgLy8g
QWx3YXlzIHVubGF0Y2guCisgICAgICAgIFJlZlB0cjxOb2RlPiB0YXJnZXROb2RlID0gbV9nZXN0
dXJlVGFyZ2V0Tm9kZS5yZWxlYXNlKCk7CisgICAgICAgIGlmICghdGFyZ2V0Tm9kZSkKKyAgICAg
ICAgICAgIHRhcmdldE5vZGUgPSByZXN1bHQuaW5uZXJOb2RlKCk7CiAKLSAgICAgICAgdmlldy0+
aGFuZGxlR2VzdHVyZUV2ZW50KGdlc3R1cmVFdmVudCk7Ci0gICAgICAgIHJldHVybiB0cnVlOwor
ICAgICAgICBpZiAoZGV0ZWN0QW5kUGFzc0dlc3R1cmVFdmVudFRvV2lkZ2V0KHRhcmdldE5vZGUs
IGdlc3R1cmVFdmVudCwgcmVzdWx0KSkKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAg
ICBOb2RlKiBub2RlID0gdGFyZ2V0Tm9kZSA/IHRhcmdldE5vZGUtPnNoYWRvd0FuY2VzdG9yTm9k
ZSgpIDogMDsKKyAgICAgICAgaWYgKG5vZGUgJiYgZ2VzdHVyZU5vZGUoZ2VzdHVyZUV2ZW50LCBu
b2RlKSkKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICByZXR1cm4gcGFzc0dlc3R1
cmVFdmVudFRvRnJhbWVWaWV3KGdlc3R1cmVFdmVudCk7CiAgICAgfQorICAgIGNhc2UgUGxhdGZv
cm1FdmVudDo6R2VzdHVyZURvdWJsZVRhcDoKKyAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIGRl
ZmF1bHQ6CiAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgIH0KLSAgICByZXR1cm4g
dHJ1ZTsKKyAgICByZXR1cm4gZmFsc2U7CiB9CiAjZW5kaWYKIApkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcGFnZS9FdmVudEhhbmRsZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRXZlbnRI
YW5kbGVyLmgKaW5kZXggNTIxNmUwYjg4YWFiMjFkZDlkYzU4YWI4ZDQ4OTQ5OTVkZjAxMjcyNS4u
NzdlMTVlMjFmZDZiZWQxY2I2ODRjZjkxYWU2ZjNmZWQ5YWNkM2VmMyAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvcGFnZS9FdmVudEhhbmRsZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdl
L0V2ZW50SGFuZGxlci5oCkBAIC0yOTksNiArMjk5LDkgQEAgcHJpdmF0ZToKICAgICBib29sIHBh
c3NXaWRnZXRNb3VzZURvd25FdmVudFRvV2lkZ2V0KFJlbmRlcldpZGdldCopOwogCiAgICAgYm9v
bCBwYXNzTW91c2VEb3duRXZlbnRUb1dpZGdldChXaWRnZXQqKTsKKyNpZiBFTkFCTEUoR0VTVFVS
RV9FVkVOVFMpCisgICAgYm9vbCBwYXNzR2VzdHVyZUV2ZW50VG9XaWRnZXQoY29uc3QgUGxhdGZv
cm1HZXN0dXJlRXZlbnQmLCBXaWRnZXQqKTsKKyNlbmRpZgogICAgIGJvb2wgcGFzc1doZWVsRXZl
bnRUb1dpZGdldChjb25zdCBQbGF0Zm9ybVdoZWVsRXZlbnQmLCBXaWRnZXQqKTsKIAogICAgIHZv
aWQgZGVmYXVsdFNwYWNlRXZlbnRIYW5kbGVyKEtleWJvYXJkRXZlbnQqKTsKQEAgLTQyMSw2ICs0
MjQsMTEgQEAgcHJpdmF0ZToKICAgICBUb3VjaFRhcmdldE1hcCBtX29yaWdpbmF0aW5nVG91Y2hQ
b2ludFRhcmdldHM7CiAgICAgYm9vbCBtX3RvdWNoUHJlc3NlZDsKICNlbmRpZgorI2lmIEVOQUJM
RShHRVNUVVJFX0VWRU5UUykKKyAgICBib29sIGRldGVjdEFuZFBhc3NHZXN0dXJlRXZlbnRUb1dp
ZGdldChQYXNzUmVmUHRyPE5vZGU+LCBjb25zdCBQbGF0Zm9ybUdlc3R1cmVFdmVudCYsIGNvbnN0
IEhpdFRlc3RSZXN1bHQmKTsKKyAgICBib29sIHBhc3NHZXN0dXJlRXZlbnRUb0ZyYW1lVmlldyhj
b25zdCBQbGF0Zm9ybUdlc3R1cmVFdmVudCYpOworICAgIFJlZlB0cjxOb2RlPiBtX2dlc3R1cmVU
YXJnZXROb2RlOworI2VuZGlmCiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL2Nocm9taXVtL0V2ZW50SGFuZGxlckNocm9taXVtLmNw
cCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvY2hyb21pdW0vRXZlbnRIYW5kbGVyQ2hyb21pdW0uY3Bw
CmluZGV4IDk3YzFjYmU3Mzg1NGQzYjY2MDMyMGI4MTQ0NmM3NjBlZDgxODQ2YjEuLjg2NjQyMjE2
Njk5OTViYWQ5NDg5YmEwODg3MzBmMzFiMzE0OWFkZmEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3BhZ2UvY2hyb21pdW0vRXZlbnRIYW5kbGVyQ2hyb21pdW0uY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3BhZ2UvY2hyb21pdW0vRXZlbnRIYW5kbGVyQ2hyb21pdW0uY3BwCkBAIC00NCw2ICs0
NCwxMSBAQAogI2luY2x1ZGUgIlBsYXRmb3JtV2hlZWxFdmVudC5oIgogI2luY2x1ZGUgIlJlbmRl
cldpZGdldC5oIgogCisjaWYgRU5BQkxFKEdFU1RVUkVfRVZFTlRTKSB8fCBFTkFCTEUoR0VTVFVS
RV9SRUNPR05JWkVSKQorI2luY2x1ZGUgIlBsYXRmb3JtR2VzdHVyZUV2ZW50LmgiCisjZW5kaWYK
KworCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKICNpZiBPUyhEQVJXSU4pCkBAIC0xNjQsNCArMTY5
LDE2IEBAIGJvb2wgRXZlbnRIYW5kbGVyOjpzaG91bGRUdXJuVmVydGljYWxUaWNrc0ludG9Ib3Jp
em9udGFsKGNvbnN0IEhpdFRlc3RSZXN1bHQmIHJlCiB9CiAjZW5kaWYKIAorI2lmIEVOQUJMRShH
RVNUVVJFX0VWRU5UUykKK2Jvb2wgRXZlbnRIYW5kbGVyOjpwYXNzR2VzdHVyZUV2ZW50VG9XaWRn
ZXQoY29uc3QgUGxhdGZvcm1HZXN0dXJlRXZlbnQmIGdlc3R1cmVFdmVudCwgV2lkZ2V0KiB3aWRn
ZXQpCit7CisgICAgaWYgKCF3aWRnZXQpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGlm
ICghd2lkZ2V0LT5pc0ZyYW1lVmlldygpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgcmV0
dXJuIHN0YXRpY19jYXN0PEZyYW1lVmlldyo+KHdpZGdldCktPmZyYW1lKCktPmV2ZW50SGFuZGxl
cigpLT5oYW5kbGVHZXN0dXJlRXZlbnQoZ2VzdHVyZUV2ZW50KTsKK30KKyNlbmRpZgorCiB9IC8v
IG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL2VmbC9F
dmVudEhhbmRsZXJFZmwuY3BwIGIvU291cmNlL1dlYkNvcmUvcGFnZS9lZmwvRXZlbnRIYW5kbGVy
RWZsLmNwcAppbmRleCAwYjljMmI2ZTZmODE2YTJjMThhYzg3NWRmZmJhNDBiMTFhMjZhMzcwLi5i
MjIyNjY4YjdmOTg3NWJmZTdmMWIwNzM1MzNjMGIxZTJmY2M4NmYzIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9wYWdlL2VmbC9FdmVudEhhbmRsZXJFZmwuY3BwCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3BhZ2UvZWZsL0V2ZW50SGFuZGxlckVmbC5jcHAKQEAgLTk1LDYgKzk1LDE0IEBAIGJvb2wg
RXZlbnRIYW5kbGVyOjpwYXNzV2hlZWxFdmVudFRvV2lkZ2V0KGNvbnN0IFBsYXRmb3JtV2hlZWxF
dmVudCYgZXZlbnQsIFdpZGdlCiAgICAgcmV0dXJuIHN0YXRpY19jYXN0PEZyYW1lVmlldyo+KHdp
ZGdldCktPmZyYW1lKCktPmV2ZW50SGFuZGxlcigpLT5oYW5kbGVXaGVlbEV2ZW50KGV2ZW50KTsK
IH0KIAorI2lmIEVOQUJMRShHRVNUVVJFX0VWRU5UUykKK2Jvb2wgRXZlbnRIYW5kbGVyOjpwYXNz
R2VzdHVyZUV2ZW50VG9XaWRnZXQoY29uc3QgUGxhdGZvcm1HZXN0dXJlRXZlbnQmLCBXaWRnZXQq
KQoreworICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAgcmV0dXJuIGZhbHNlOworfQorI2VuZGlm
CisKIFBhc3NSZWZQdHI8Q2xpcGJvYXJkPiBFdmVudEhhbmRsZXI6OmNyZWF0ZURyYWdnaW5nQ2xp
cGJvYXJkKCkgY29uc3QKIHsKICAgICByZXR1cm4gQ2xpcGJvYXJkRWZsOjpjcmVhdGUoQ2xpcGJv
YXJkV3JpdGFibGUsIENsaXBib2FyZDo6RHJhZ0FuZERyb3ApOwpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcGFnZS9ndGsvRXZlbnRIYW5kbGVyR3RrLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3Bh
Z2UvZ3RrL0V2ZW50SGFuZGxlckd0ay5jcHAKaW5kZXggNDM4NmE0ZGUzNzg4ODlhMzU1NWE1MDg4
MzlkMzY1MmYxZjhmNTk2NS4uNGY4YzllMGY3NDkyNzZkMjM4MWEzZWY4N2Q3OGExODE4ZjY3OGU1
NSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGFnZS9ndGsvRXZlbnRIYW5kbGVyR3RrLmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL2d0ay9FdmVudEhhbmRsZXJHdGsuY3BwCkBAIC05
NCw2ICs5NCwxNCBAQCBib29sIEV2ZW50SGFuZGxlcjo6cGFzc1doZWVsRXZlbnRUb1dpZGdldChj
b25zdCBQbGF0Zm9ybVdoZWVsRXZlbnQmIGV2ZW50LCBXaWRnZQogICAgIHJldHVybiBzdGF0aWNf
Y2FzdDxGcmFtZVZpZXcqPih3aWRnZXQpLT5mcmFtZSgpLT5ldmVudEhhbmRsZXIoKS0+aGFuZGxl
V2hlZWxFdmVudChldmVudCk7CiB9CiAKKyNpZiBFTkFCTEUoR0VTVFVSRV9FVkVOVFMpCitib29s
IEV2ZW50SGFuZGxlcjo6cGFzc0dlc3R1cmVFdmVudFRvV2lkZ2V0KGNvbnN0IFBsYXRmb3JtR2Vz
dHVyZUV2ZW50JiwgV2lkZ2V0KikKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworICAgIHJldHVy
biBmYWxzZTsKK30KKyNlbmRpZgorCiBQYXNzUmVmUHRyPENsaXBib2FyZD4gRXZlbnRIYW5kbGVy
OjpjcmVhdGVEcmFnZ2luZ0NsaXBib2FyZCgpIGNvbnN0CiB7CiAgICAgcmV0dXJuIENsaXBib2Fy
ZEd0azo6Y3JlYXRlKENsaXBib2FyZFdyaXRhYmxlLCBEYXRhT2JqZWN0R3RrOjpjcmVhdGUoKSwg
Q2xpcGJvYXJkOjpEcmFnQW5kRHJvcCwgbV9mcmFtZSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9wYWdlL21hYy9FdmVudEhhbmRsZXJNYWMubW0gYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL21h
Yy9FdmVudEhhbmRsZXJNYWMubW0KaW5kZXggOTQwODFjYmE3NjZiNzVlM2UxODg1NTE5YmU5NDk2
OTZkNzE1YTQyNS4uYzAxYWQzN2RjYjA0MjhlYjUyYTczYTQ1ZGI2NDE2NjM1YTVlY2I2NSAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGFnZS9tYWMvRXZlbnRIYW5kbGVyTWFjLm1tCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3BhZ2UvbWFjL0V2ZW50SGFuZGxlck1hYy5tbQpAQCAtNzIxLDQgKzcy
MSwyNSBAQCB1bnNpZ25lZCBFdmVudEhhbmRsZXI6OmFjY2Vzc0tleU1vZGlmaWVycygpCiAgICAg
cmV0dXJuIFBsYXRmb3JtRXZlbnQ6OkN0cmxLZXkgfCBQbGF0Zm9ybUV2ZW50OjpBbHRLZXk7CiB9
CiAKKyNpZiBFTkFCTEUoR0VTVFVSRV9FVkVOVFMpCitib29sIEV2ZW50SGFuZGxlcjo6cGFzc0dl
c3R1cmVFdmVudFRvV2lkZ2V0KGNvbnN0IFBsYXRmb3JtR2VzdHVyZUV2ZW50JiBnZXN0dXJlRXZl
bnQsIFdpZGdldCogd2lkZ2V0KQoreworICAgIEJFR0lOX0JMT0NLX09CSkNfRVhDRVBUSU9OUzsK
KworICAgIGlmICghd2lkZ2V0KQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBOU1ZpZXcq
IG5vZGVWaWV3ID0gd2lkZ2V0LT5wbGF0Zm9ybVdpZGdldCgpOworICAgIGlmICghbm9kZVZpZXcp
IHsKKyAgICAgICAgLy8gV2ViS2l0MiBjb2RlIHBhdGguCisgICAgICAgIGlmICghd2lkZ2V0LT5p
c0ZyYW1lVmlldygpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgICAgIHJldHVy
biBzdGF0aWNfY2FzdDxGcmFtZVZpZXcqPih3aWRnZXQpLT5mcmFtZSgpLT5ldmVudEhhbmRsZXIo
KS0+aGFuZGxlR2VzdHVyZUV2ZW50KGdlc3R1cmVFdmVudCk7CisgICAgfQorICAgIEVORF9CTE9D
S19PQkpDX0VYQ0VQVElPTlM7CisgICAgcmV0dXJuIGZhbHNlOworfQorI2VuZGlmCisKIH0KZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvcXQvRXZlbnRIYW5kbGVyUXQuY3BwIGIvU291
cmNlL1dlYkNvcmUvcGFnZS9xdC9FdmVudEhhbmRsZXJRdC5jcHAKaW5kZXggMDZkYjEwNDU1Y2I3
ZmUyYzc1YmQwMDllMGNlYWVjMjQ2MzY1ZTkxZS4uNzY3YjM0N2U4M2E4ODI2YTJhMjI0ZmY0YTE5
N2VlNWQ2NzM0ZGRiZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGFnZS9xdC9FdmVudEhh
bmRsZXJRdC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGFnZS9xdC9FdmVudEhhbmRsZXJRdC5j
cHAKQEAgLTk4LDYgKzk4LDE3IEBAIGJvb2wgRXZlbnRIYW5kbGVyOjpwYXNzV2hlZWxFdmVudFRv
V2lkZ2V0KGNvbnN0IFBsYXRmb3JtV2hlZWxFdmVudCYgZXZlbnQsIFdpZGdlCiAgICAgcmV0dXJu
IHN0YXRpY19jYXN0PEZyYW1lVmlldyo+KHdpZGdldCktPmZyYW1lKCktPmV2ZW50SGFuZGxlcigp
LT5oYW5kbGVXaGVlbEV2ZW50KGV2ZW50KTsKIH0KIAorI2lmIEVOQUJMRShHRVNUVVJFX0VWRU5U
UykKK2Jvb2wgRXZlbnRIYW5kbGVyOjpwYXNzR2VzdHVyZUV2ZW50VG9XaWRnZXQoY29uc3QgUGxh
dGZvcm1HZXN0dXJlRXZlbnQmIGV2ZW50LCBXaWRnZXQqIHdpZGdldCkKK3sKKyAgICBRX0FTU0VS
VCh3aWRnZXQpOworICAgIGlmICghd2lkZ2V0LT5pc0ZyYW1lVmlldygpKQorICAgICAgICByZXR1
cm4gZmFsc2U7CisKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8RnJhbWVWaWV3Kj4od2lkZ2V0KS0+
ZnJhbWUoKS0+ZXZlbnRIYW5kbGVyKCktPmhhbmRsZUdlc3R1cmVFdmVudChldmVudCk7Cit9Cisj
ZW5kaWYKKwogUGFzc1JlZlB0cjxDbGlwYm9hcmQ+IEV2ZW50SGFuZGxlcjo6Y3JlYXRlRHJhZ2dp
bmdDbGlwYm9hcmQoKSBjb25zdAogewogICAgIHJldHVybiBDbGlwYm9hcmRRdDo6Y3JlYXRlKENs
aXBib2FyZFdyaXRhYmxlLCBtX2ZyYW1lLCBDbGlwYm9hcmQ6OkRyYWdBbmREcm9wKTsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2Uvd2luL0V2ZW50SGFuZGxlcldpbi5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9wYWdlL3dpbi9FdmVudEhhbmRsZXJXaW4uY3BwCmluZGV4IDkzOTNlZmE1NWZh
YzI2OTdkY2ZkNzllMmI3NDk3NTNiYzVjMmZiOGYuLjA2MDk3ZDRhODBjYTk3MTBmYjhmNGI1ZDZm
ZDUyYTFkNGFlMWQzNjUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2Uvd2luL0V2ZW50
SGFuZGxlcldpbi5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGFnZS93aW4vRXZlbnRIYW5kbGVy
V2luLmNwcApAQCAtODEsNiArODEsMTQgQEAgYm9vbCBFdmVudEhhbmRsZXI6OnBhc3NXaGVlbEV2
ZW50VG9XaWRnZXQoY29uc3QgUGxhdGZvcm1XaGVlbEV2ZW50JiB3aGVlbEV2ZW50LAogICAgIHJl
dHVybiBzdGF0aWNfY2FzdDxGcmFtZVZpZXcqPih3aWRnZXQpLT5mcmFtZSgpLT5ldmVudEhhbmRs
ZXIoKS0+aGFuZGxlV2hlZWxFdmVudCh3aGVlbEV2ZW50KTsKIH0KIAorI2lmIEVOQUJMRShHRVNU
VVJFX0VWRU5UUykKK2Jvb2wgRXZlbnRIYW5kbGVyOjpwYXNzR2VzdHVyZUV2ZW50VG9XaWRnZXQo
Y29uc3QgUGxhdGZvcm1HZXN0dXJlRXZlbnQmLCBXaWRnZXQqKQoreworICAgIG5vdEltcGxlbWVu
dGVkKCk7CisgICAgcmV0dXJuIGZhbHNlOworfQorI2VuZGlmCisKIGJvb2wgRXZlbnRIYW5kbGVy
Ojp0YWJzVG9BbGxGb3JtQ29udHJvbHMoS2V5Ym9hcmRFdmVudCopIGNvbnN0CiB7CiAgICAgcmV0
dXJuIHRydWU7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL3d4L0V2ZW50SGFuZGxl
cld4LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2Uvd3gvRXZlbnRIYW5kbGVyV3guY3BwCmluZGV4
IDA2YjYwMzY5ODJhNTM5ODM1Mjk0NmQ1MDdjNDZhYzkzNTA3Yjc0OWMuLjJhYzRkZDdlZTIzM2Fl
YzFjNTUzNWI3MGY3ZTM0NmQ2MDQ1M2Q4ZjMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3Bh
Z2Uvd3gvRXZlbnRIYW5kbGVyV3guY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2Uvd3gvRXZl
bnRIYW5kbGVyV3guY3BwCkBAIC04Miw2ICs4MiwxNCBAQCBib29sIEV2ZW50SGFuZGxlcjo6cGFz
c1doZWVsRXZlbnRUb1dpZGdldChjb25zdCBQbGF0Zm9ybVdoZWVsRXZlbnQmIGV2ZW50LCBXaWRn
ZQogICAgIHJldHVybiBzdGF0aWNfY2FzdDxGcmFtZVZpZXcqPih3aWRnZXQpLT5mcmFtZSgpLT5l
dmVudEhhbmRsZXIoKS0+aGFuZGxlV2hlZWxFdmVudChldmVudCk7CiB9CiAKKyNpZiBFTkFCTEUo
R0VTVFVSRV9FVkVOVFMpCitib29sIEV2ZW50SGFuZGxlcjo6cGFzc0dlc3R1cmVFdmVudFRvV2lk
Z2V0KGNvbnN0IFBsYXRmb3JtR2VzdHVyZUV2ZW50JiwgV2lkZ2V0KikKK3sKKyAgICBub3RJbXBs
ZW1lbnRlZCgpOyAKKyAgICByZXR1cm4gZmFsc2U7IAorfQorI2VuZGlmCisKIGJvb2wgRXZlbnRI
YW5kbGVyOjp0YWJzVG9BbGxGb3JtQ29udHJvbHMoS2V5Ym9hcmRFdmVudCogZXZlbnQpIGNvbnN0
IAogeyAKICAgICBub3RJbXBsZW1lbnRlZCgpOyAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL1Njcm9sbEFuaW1hdG9yLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1Nj
cm9sbEFuaW1hdG9yLmNwcAppbmRleCBmNzNjNWNjMDY0MzNjM2VhNmRkNTVhZTExM2MwMjk0NjI5
YjRhODg0Li5mODRhMWRmZWNjZThlZThjZGU5ODQ3MmQyNTg1Y2JiMjU3MWEyMTMxIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxBbmltYXRvci5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vU2Nyb2xsQW5pbWF0b3IuY3BwCkBAIC0zNyw2ICszNywxMCBA
QAogI2luY2x1ZGUgPGFsZ29yaXRobT4KICNpbmNsdWRlIDx3dGYvUGFzc093blB0ci5oPgogCisj
aWYgRU5BQkxFKEdFU1RVUkVfUkVDT0dOSVpFUikgfHwgRU5BQkxFKEdFU1RVUkVfRVZFTlRTKQor
I2luY2x1ZGUgIlBsYXRmb3JtR2VzdHVyZUV2ZW50LmgiCisjZW5kaWYKKwogdXNpbmcgbmFtZXNw
YWNlIHN0ZDsKIAogbmFtZXNwYWNlIFdlYkNvcmUgewpAQCAtNjQsNiArNjgsOSBAQCBTY3JvbGxB
bmltYXRvcjo6flNjcm9sbEFuaW1hdG9yKCkKIAogYm9vbCBTY3JvbGxBbmltYXRvcjo6c2Nyb2xs
KFNjcm9sbGJhck9yaWVudGF0aW9uIG9yaWVudGF0aW9uLCBTY3JvbGxHcmFudWxhcml0eSwgZmxv
YXQgc3RlcCwgZmxvYXQgbXVsdGlwbGllcikKIHsKKyNpZiBFTkFCTEUoR0VTVFVSRV9FVkVOVFMp
CisgICAgcmVjb3JkR2VzdHVyZUV2ZW50UHJvY2Vzc2luZyhHZXN0dXJlVGVzdFNjcm9sbCk7Cisj
ZW5kaWYKICAgICBmbG9hdCogY3VycmVudFBvcyA9IChvcmllbnRhdGlvbiA9PSBIb3Jpem9udGFs
U2Nyb2xsYmFyKSA/ICZtX2N1cnJlbnRQb3NYIDogJm1fY3VycmVudFBvc1k7CiAgICAgZmxvYXQg
bmV3UG9zID0gc3RkOjptYXgoc3RkOjptaW4oKmN1cnJlbnRQb3MgKyAoc3RlcCAqIG11bHRpcGxp
ZXIpLCBzdGF0aWNfY2FzdDxmbG9hdD4obV9zY3JvbGxhYmxlQXJlYS0+c2Nyb2xsU2l6ZShvcmll
bnRhdGlvbikpKSwgMC4wZik7CiAgICAgaWYgKCpjdXJyZW50UG9zID09IG5ld1BvcykKQEAgLTEy
Niw4ICsxMzMsMzQgQEAgYm9vbCBTY3JvbGxBbmltYXRvcjo6aGFuZGxlV2hlZWxFdmVudChjb25z
dCBQbGF0Zm9ybVdoZWVsRXZlbnQmIGUpCiB9CiAKICNpZiBFTkFCTEUoR0VTVFVSRV9FVkVOVFMp
Ci12b2lkIFNjcm9sbEFuaW1hdG9yOjpoYW5kbGVHZXN0dXJlRXZlbnQoY29uc3QgUGxhdGZvcm1H
ZXN0dXJlRXZlbnQmKQordm9pZCBTY3JvbGxBbmltYXRvcjo6aGFuZGxlR2VzdHVyZUV2ZW50KGNv
bnN0IFBsYXRmb3JtR2VzdHVyZUV2ZW50JiBldmVudCkKIHsKKyAgICBzd2l0Y2ggKGV2ZW50LnR5
cGUoKSkgeworICAgIGNhc2UgUGxhdGZvcm1FdmVudDo6R2VzdHVyZVNjcm9sbEJlZ2luOgorICAg
ICAgICByZWNvcmRHZXN0dXJlRXZlbnRQcm9jZXNzaW5nKEdlc3R1cmVUZXN0U2Nyb2xsQmVnaW4p
OworICAgICAgICBicmVhazsKKyAgICBjYXNlIFBsYXRmb3JtRXZlbnQ6Okdlc3R1cmVTY3JvbGxF
bmQ6CisgICAgICAgIHJlY29yZEdlc3R1cmVFdmVudFByb2Nlc3NpbmcoR2VzdHVyZVRlc3RTY3Jv
bGxFbmQpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFBsYXRmb3JtRXZlbnQ6Okdlc3R1cmVT
Y3JvbGxVcGRhdGU6IHsKKyAgICAgICAgcmVjb3JkR2VzdHVyZUV2ZW50UHJvY2Vzc2luZyhHZXN0
dXJlVGVzdFNjcm9sbFVwZGF0ZSk7CisgICAgICAgIEludFNpemUgbWF4Rm9yd2FyZFNjcm9sbERl
bHRhID0gbV9zY3JvbGxhYmxlQXJlYS0+bWF4aW11bVNjcm9sbFBvc2l0aW9uKCkgLSBtX3Njcm9s
bGFibGVBcmVhLT5zY3JvbGxQb3NpdGlvbigpOworICAgICAgICBJbnRTaXplIG1heEJhY2t3YXJk
U2Nyb2xsRGVsdGEgPSBtX3Njcm9sbGFibGVBcmVhLT5zY3JvbGxQb3NpdGlvbigpIC0gbV9zY3Jv
bGxhYmxlQXJlYS0+bWluaW11bVNjcm9sbFBvc2l0aW9uKCk7CisgICAgICAgIGZsb2F0IGRlbHRh
WCA9IChldmVudC5kZWx0YVgoKSA8IDAuZikgPyBtYXgoZXZlbnQuZGVsdGFYKCksIC1zdGF0aWNf
Y2FzdDxmbG9hdD4obWF4Rm9yd2FyZFNjcm9sbERlbHRhLndpZHRoKCkpKSA6IG1pbihldmVudC5k
ZWx0YVgoKSwgZmxvYXQobWF4QmFja3dhcmRTY3JvbGxEZWx0YS53aWR0aCgpKSk7CisgICAgICAg
IGZsb2F0IGRlbHRhWSA9IChldmVudC5kZWx0YVkoKSA8IDAuZikgPyBtYXgoZXZlbnQuZGVsdGFZ
KCksIC1zdGF0aWNfY2FzdDxmbG9hdD4obWF4Rm9yd2FyZFNjcm9sbERlbHRhLmhlaWdodCgpKSkg
OiBtaW4oZXZlbnQuZGVsdGFZKCksIGZsb2F0KG1heEJhY2t3YXJkU2Nyb2xsRGVsdGEuaGVpZ2h0
KCkpKTsKKworICAgICAgICBJbnRSZWN0IGNvbnRlbnRSZWN0ID0gbV9zY3JvbGxhYmxlQXJlYS0+
dmlzaWJsZUNvbnRlbnRSZWN0KHRydWUpOworICAgICAgICBGbG9hdFBvaW50IG9mZnNldCA9IEZs
b2F0UG9pbnQoY29udGVudFJlY3QueCgpIC0gZGVsdGFYLCBjb250ZW50UmVjdC55KCkgLSBkZWx0
YVkpOworICAgICAgICBzY3JvbGxUb09mZnNldFdpdGhvdXRBbmltYXRpb24ob2Zmc2V0KTsKKyAg
ICAgICAgYnJlYWs7CisgICAgfQorICAgIGNhc2UgUGxhdGZvcm1FdmVudDo6R2VzdHVyZVRhcERv
d246CisgICAgY2FzZSBQbGF0Zm9ybUV2ZW50OjpHZXN0dXJlVGFwOgorICAgIGNhc2UgUGxhdGZv
cm1FdmVudDo6R2VzdHVyZURvdWJsZVRhcDoKKyAgICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDoK
KyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgfQogfQogI2VuZGlmCiAKQEAgLTE2
OCw0ICsyMDEsMzUgQEAgdm9pZCBTY3JvbGxBbmltYXRvcjo6c2V0Wm9vbVBhcmFtZXRlcnNGb3JU
ZXN0KGZsb2F0IHNjYWxlLCBmbG9hdCB4LCBmbG9hdCB5KQogICAgIG5vdGlmeVpvb21DaGFuZ2Vk
KFpvb21BbmltYXRpb25Db250aW51aW5nKTsgLy8gRG9uJ3QgbGV0IHBhZ2UgcmUtc2NhbGUuCiB9
CiAKKyNpZiBFTkFCTEUoR0VTVFVSRV9FVkVOVFMpCitpbnQgU2Nyb2xsQW5pbWF0b3I6Omdlc3R1
cmVFdmVudFRlc3RSZWNvcmQoKQoreworICAgIGlmIChtX2N1cnJlbnRab29tU2NhbGUgPiAwKQor
ICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICBpbnQgcmVjb3JkID0gbV9jdXJyZW50
Wm9vbVRyYW5zWDsKKyAgICByZXNldFpvb20oKTsKKyAgICByZXR1cm4gcmVjb3JkOworfQorCit2
b2lkIFNjcm9sbEFuaW1hdG9yOjplbmFibGVHZXN0dXJlRXZlbnRUZXN0UmVjb3JkKCkKK3sKKyAg
ICAvLyBOT1RFOiBHZXN0dXJlIHNjcm9sbCBldmVudCBkZWxpdmVyeSB0ZXN0aW5nIHJlcXVpcmVz
IGRlZmF1bHQgem9vbSBsZXZlbC4KKyAgICBBU1NFUlQobV9jdXJyZW50Wm9vbVNjYWxlID09IDEp
OworICAgIEFTU0VSVCghbV9jdXJyZW50Wm9vbVRyYW5zWCk7CisgICAgQVNTRVJUKCFtX2N1cnJl
bnRab29tVHJhbnNZKTsKKyAgICAKKyAgICBtX2N1cnJlbnRab29tU2NhbGUgPSAtMTsKKyAgICBt
X2N1cnJlbnRab29tVHJhbnNYID0gMDsKK30KKwordm9pZCBTY3JvbGxBbmltYXRvcjo6cmVjb3Jk
R2VzdHVyZUV2ZW50UHJvY2Vzc2luZyhHZXN0dXJlRXZlbnRUZXN0U3RhdGUga2V5KQoreworICAg
IGlmIChtX2N1cnJlbnRab29tU2NhbGUgPCAwKSB7CisgICAgICAgIGludCByZWNvcmQgPSBtX2N1
cnJlbnRab29tVHJhbnNYOworICAgICAgICByZWNvcmQgfD0ga2V5OworICAgICAgICBtX2N1cnJl
bnRab29tVHJhbnNYID0gcmVjb3JkOworICAgIH0KK30KKyNlbmRpZgorCiB9IC8vIG5hbWVzcGFj
ZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxBbmlt
YXRvci5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU2Nyb2xsQW5pbWF0b3IuaAppbmRleCA1
NzY3NDM5NDUyYTFiMzAzNGVhZTcxZTlkODRlOWIwYzE2NGE2MmMxLi43MDVhMzM2MjBmM2MyZTlk
YWY0NmU4OTA0MGU4MGVlZTk4ZjJmYmYzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9TY3JvbGxBbmltYXRvci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1Njcm9s
bEFuaW1hdG9yLmgKQEAgLTk2LDkgKzk2LDIwIEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIHZvaWQg
cmVzZXRab29tKCk7CiAgICAgdmlydHVhbCB2b2lkIHNldFpvb21QYXJhbWV0ZXJzRm9yVGVzdChm
bG9hdCwgZmxvYXQsIGZsb2F0KTsKIAorI2lmIEVOQUJMRShHRVNUVVJFX0VWRU5UUykKKyAgICAv
LyBOT1RFOiBPbmx5IGNhbGxlZCBmcm9tIEludGVybmFscyBmb3IgdGVzdGluZy4KKyAgICBpbnQg
Z2VzdHVyZUV2ZW50VGVzdFJlY29yZCgpOworICAgIHZvaWQgZW5hYmxlR2VzdHVyZUV2ZW50VGVz
dFJlY29yZCgpOworI2VuZGlmCisKIHByb3RlY3RlZDoKICAgICBTY3JvbGxBbmltYXRvcihTY3Jv
bGxhYmxlQXJlYSopOwogCisjaWYgRU5BQkxFKEdFU1RVUkVfRVZFTlRTKQorICAgIGVudW0gR2Vz
dHVyZUV2ZW50VGVzdFN0YXRlIHsgR2VzdHVyZVRlc3RTY3JvbGxCZWdpbiA9IDEsIEdlc3R1cmVU
ZXN0U2Nyb2xsVXBkYXRlID0gMiwgR2VzdHVyZVRlc3RTY3JvbGxFbmQgPSA0ICwgR2VzdHVyZVRl
c3RTY3JvbGwgPSA4fTsKKyAgICB2b2lkIHJlY29yZEdlc3R1cmVFdmVudFByb2Nlc3NpbmcoR2Vz
dHVyZUV2ZW50VGVzdFN0YXRlKTsKKyNlbmRpZgorCiAgICAgdmlydHVhbCB2b2lkIG5vdGlmeVBv
c2l0aW9uQ2hhbmdlZCgpOwogICAgIHZpcnR1YWwgdm9pZCBub3RpZnlab29tQ2hhbmdlZChab29t
QW5pbWF0aW9uU3RhdGUpOwogCkBAIC0xMDksNiArMTIwLDcgQEAgcHJvdGVjdGVkOgogICAgIGZs
b2F0IG1fY3VycmVudFpvb21TY2FsZTsKICAgICBmbG9hdCBtX2N1cnJlbnRab29tVHJhbnNYOwog
ICAgIGZsb2F0IG1fY3VycmVudFpvb21UcmFuc1k7CisKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdl
YkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1Njcm9sbEFuaW1hdG9y
Tm9uZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxBbmltYXRvck5vbmUuY3Bw
CmluZGV4IDNkMTQ3MmIzODE2N2MyYTI1NjQyMjE0NDljMzEzZDkyYmI1NTE0NzkuLjU5YzRhOWZj
Zjc4NjQwOWE4ODg5MmU0MDJmMGFiMTgwMmE3MTAyYmEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL1Njcm9sbEFuaW1hdG9yTm9uZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vU2Nyb2xsQW5pbWF0b3JOb25lLmNwcApAQCAtNTE5LDEwICs1MTksMTYgQEAgdm9p
ZCBTY3JvbGxBbmltYXRvck5vbmU6OmhhbmRsZUdlc3R1cmVFdmVudChjb25zdCBQbGF0Zm9ybUdl
c3R1cmVFdmVudCYgcGdlKQogICAgIGNhc2UgUGxhdGZvcm1FdmVudDo6R2VzdHVyZURvdWJsZVRh
cDoKICAgICAgICAgem9vbShwZ2UpOwogICAgICAgICBicmVhazsKLQorICAgIGNhc2UgUGxhdGZv
cm1FdmVudDo6R2VzdHVyZVNjcm9sbEJlZ2luOgorICAgIGNhc2UgUGxhdGZvcm1FdmVudDo6R2Vz
dHVyZVNjcm9sbEVuZDoKKyAgICBjYXNlIFBsYXRmb3JtRXZlbnQ6Okdlc3R1cmVTY3JvbGxVcGRh
dGU6IAorICAgIGNhc2UgUGxhdGZvcm1FdmVudDo6R2VzdHVyZVRhcERvd246CisgICAgY2FzZSBQ
bGF0Zm9ybUV2ZW50OjpHZXN0dXJlVGFwOgorICAgICAgICBTY3JvbGxBbmltYXRvcjo6aGFuZGxl
R2VzdHVyZUV2ZW50KHBnZSk7CisgICAgICAgIGJyZWFrOwogICAgIGRlZmF1bHQ6Ci0gICAgICAg
IC8vIFRPRE86IGFkZCBhbnkgb3RoZXIgZXZlbnQgdHlwZXMgd2Ugc2hvdWxkIGhhbmRsZQotICAg
ICAgICB7IH0KKyAgICAgICAgLy8gRklYTUU6IGFkZCBhbnkgb3RoZXIgZXZlbnQgdHlwZXMgd2Ug
c2hvdWxkIGhhbmRsZS4KKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgfQogfQog
I2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQm94LmNw
cCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCb3guY3BwCmluZGV4IDQwYWRmMzg3
ZTU3MGNmYmI4NmI1NWEyNTQzZWZjYTA5Yzk0OGUwMGEuLjhkZmY0NDQwZGYzYTliNzJlYTcyOTA2
NTgzZDMxYmJhYTEzMmIyODIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJCb3guY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCb3guY3Bw
CkBAIC02NzMsNiArNjczLDIzIEBAIGJvb2wgUmVuZGVyQm94OjpzY3JvbGwoU2Nyb2xsRGlyZWN0
aW9uIGRpcmVjdGlvbiwgU2Nyb2xsR3JhbnVsYXJpdHkgZ3JhbnVsYXJpdHksCiAgICAgcmV0dXJu
IGZhbHNlOwogfQogCisjaWYgRU5BQkxFKEdFU1RVUkVfRVZFTlRTKQorYm9vbCBSZW5kZXJCb3g6
Omdlc3R1cmUoY29uc3QgUGxhdGZvcm1HZXN0dXJlRXZlbnQmIGV2ZW50KQoreworICAgIC8vIGZw
cmludGYoc3RkZXJyLCAiUmVuZGVyQm94OjpnZXN0dXJlICVseFxuIiwgKHVuc2lnbmVkIGxvbmcp
dGhpcyk7CisgICAgUmVuZGVyTGF5ZXIqIHJlbmRlckxheWVyID0gbGF5ZXIoKTsKKyAgICBpZiAo
cmVuZGVyTGF5ZXIgJiYgKHJlbmRlckxheWVyLT52ZXJ0aWNhbFNjcm9sbGJhcigpIHx8IHJlbmRl
ckxheWVyLT5ob3Jpem9udGFsU2Nyb2xsYmFyKCkpKSB7CisgICAgICByZW5kZXJMYXllci0+aGFu
ZGxlR2VzdHVyZUV2ZW50KGV2ZW50KTsKKyAgICAgIHJldHVybiB0cnVlOworICAgIH0KKworICAg
IFJlbmRlckJsb2NrKiBiID0gY29udGFpbmluZ0Jsb2NrKCk7CisgICAgaWYgKGIgJiYgIWItPmlz
UmVuZGVyVmlldygpKQorICAgICAgICByZXR1cm4gYi0+Z2VzdHVyZShldmVudCk7CisgICAgcmV0
dXJuIGZhbHNlOworfQorI2VuZGlmCisKIGJvb2wgUmVuZGVyQm94Ojpsb2dpY2FsU2Nyb2xsKFNj
cm9sbExvZ2ljYWxEaXJlY3Rpb24gZGlyZWN0aW9uLCBTY3JvbGxHcmFudWxhcml0eSBncmFudWxh
cml0eSwgZmxvYXQgbXVsdGlwbGllciwgTm9kZSoqIHN0b3BOb2RlKQogewogICAgIGJvb2wgc2Ny
b2xsZWQgPSBmYWxzZTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJCb3guaCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCb3guaAppbmRleCBkNzI3
NTRhNTRkYThiNDk3OWJhNWM2YWE1ZmFhMTNjMzljM2M0ZTM4Li42ZTc5NmVhZDhmYzU1MjRhYWZm
MGJiMThmOWQwY2M4N2JiYjQ3YWU3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvUmVuZGVyQm94LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJveC5o
CkBAIC0zMSw2ICszMSw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogY2xhc3MgUmVuZGVyQm94
UmVnaW9uSW5mbzsKIGNsYXNzIFJlbmRlclJlZ2lvbjsKK2NsYXNzIFBsYXRmb3JtR2VzdHVyZUV2
ZW50Owogc3RydWN0IFBhaW50SW5mbzsKIAogZW51bSBMb2dpY2FsV2lkdGhUeXBlIHsgTG9naWNh
bFdpZHRoLCBNaW5Mb2dpY2FsV2lkdGgsIE1heExvZ2ljYWxXaWR0aCB9OwpAQCAtNDMzLDYgKzQz
NCwxMCBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCBib29sIG5lZWRzUHJlZmVycmVkV2lkdGhzUmVj
YWxjdWxhdGlvbigpIGNvbnN0OwogICAgIHZpcnR1YWwgdm9pZCBjb21wdXRlSW50cmluc2ljUmF0
aW9JbmZvcm1hdGlvbihGbG9hdFNpemUmIC8qIGludHJpbnNpY1JhdGlvICovLCBib29sJiAvKiBp
c1BlcmNlbnRhZ2VJbnRyaW5zaWNTaXplICovKSBjb25zdCB7IH0KIAorI2lmIEVOQUJMRShHRVNU
VVJFX0VWRU5UUykKKyAgICB2aXJ0dWFsIGJvb2wgZ2VzdHVyZShjb25zdCBQbGF0Zm9ybUdlc3R1
cmVFdmVudCYpOworI2VuZGlmCisKIHByb3RlY3RlZDoKICAgICB2aXJ0dWFsIHZvaWQgd2lsbEJl
RGVzdHJveWVkKCk7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Rlc3RpbmcvSW50ZXJu
YWxzLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3Rlc3RpbmcvSW50ZXJuYWxzLmNwcAppbmRleCA3ODNj
MzgwNTY5M2FlYzYzZDRkOTg1YmQ3OGMzODRmZDQ0ODRjNGVjLi42ZmY1YzkwOTFjZjE2YTFiNmIy
NTk1MjVlODI1MmI2NmNkNzIyZTFhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS90ZXN0aW5n
L0ludGVybmFscy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvdGVzdGluZy9JbnRlcm5hbHMuY3Bw
CkBAIC00Myw4ICs0MywxMiBAQAogI2luY2x1ZGUgIk5vZGVSZW5kZXJpbmdDb250ZXh0LmgiCiAj
aW5jbHVkZSAiUGFnZS5oIgogI2luY2x1ZGUgIlJhbmdlLmgiCisjaW5jbHVkZSAiUmVuZGVyQmxv
Y2suaCIKKyNpbmNsdWRlICJSZW5kZXJCb3hNb2RlbE9iamVjdC5oIgorI2luY2x1ZGUgIlJlbmRl
ckxheWVyLmgiCiAjaW5jbHVkZSAiUmVuZGVyT2JqZWN0LmgiCiAjaW5jbHVkZSAiUmVuZGVyVHJl
ZUFzVGV4dC5oIgorI2luY2x1ZGUgIlJlbmRlclZpZXcuaCIKICNpbmNsdWRlICJTZXR0aW5ncy5o
IgogI2luY2x1ZGUgIlNoYWRvd0NvbnRlbnRFbGVtZW50LmgiCiAjaW5jbHVkZSAiU2hhZG93Um9v
dC5oIgpAQCAtNTg2LDYgKzU5MCwyMDUgQEAgdW5zaWduZWQgSW50ZXJuYWxzOjpsZW5ndGhGcm9t
UmFuZ2UoRWxlbWVudCogc2NvcGUsIGNvbnN0IFJhbmdlKiByYW5nZSwgRXhjZXB0aW8KICAgICBy
ZXR1cm4gbGVuZ3RoOwogfQogCisKK3ZvaWQgSW50ZXJuYWxzOjplbmFibGVHZXN0dXJlU2Nyb2xs
RXZlbnRSZWNvcmQoRWxlbWVudCogZWxlbWVudCwgRXhjZXB0aW9uQ29kZSYgZWMpCit7CisjaWYg
RU5BQkxFKEdFU1RVUkVfRVZFTlRTKSAmJiBFTkFCTEUoU01PT1RIX1NDUk9MTElORykKKyAgICBp
ZiAoIWVsZW1lbnQpIHsKKyAgICAgICAgZWMgPSBJTlZBTElEX0FDQ0VTU19FUlI7CisgICAgICAg
IHJldHVybjsKKyAgICB9CisKKyAgICBSZW5kZXJPYmplY3QqIHJlbmRlcmVyID0gZWxlbWVudC0+
cmVuZGVyZXIoKTsKKyAgICBpZiAoIXJlbmRlcmVyKSB7CisgICAgICAgIGVjID0gSU5WQUxJRF9O
T0RFX1RZUEVfRVJSOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIAorICAgIFJlbmRlckJv
eCogYm94ID0gcmVuZGVyZXItPmVuY2xvc2luZ0JveCgpOworICAgIHdoaWxlIChib3gpIHsKKyAg
ICAgICAgUmVuZGVyTGF5ZXIqIHJlbmRlckxheWVyID0gYm94LT5sYXllcigpOworICAgICAgICBp
ZiAocmVuZGVyTGF5ZXIpIHsKKyAgICAgICAgICAgcmVuZGVyTGF5ZXItPnNjcm9sbEFuaW1hdG9y
KCktPmVuYWJsZUdlc3R1cmVFdmVudFRlc3RSZWNvcmQoKTsKKyAgICAgICAgICAgcmV0dXJuOwor
ICAgICAgICB9CisKKyAgICAgICAgUmVuZGVyQmxvY2sqIGJsb2NrID0gYm94LT5jb250YWluaW5n
QmxvY2soKTsKKyAgICAgICAgaWYgKCFibG9jaykgeworICAgICAgICAgICAgZWMgPSBJTlZBTElE
X05PREVfVFlQRV9FUlI7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworICAgICAg
ICBpZiAoYmxvY2stPmlzUmVuZGVyVmlldygpKQorICAgICAgICAgICAgcmV0dXJuIHRvUmVuZGVy
VmlldyhibG9jayktPmZyYW1lVmlldygpLT5zY3JvbGxBbmltYXRvcigpLT5lbmFibGVHZXN0dXJl
RXZlbnRUZXN0UmVjb3JkKCk7CisgICAgICAgIGJveCA9IGJsb2NrOworICAgIH0gICAgICAgIAor
ICAgIGVjID0gSU5WQUxJRF9OT0RFX1RZUEVfRVJSOworICAgIHJldHVybjsKKyNlbHNlCisgICAg
VU5VU0VEX1BBUkFNKGVsZW1lbnQpOworICAgIGVjID0gSU5WQUxJRF9BQ0NFU1NfRVJSOworICAg
IHJldHVybjsKKyNlbmRpZgorfQorCitpbnQgSW50ZXJuYWxzOjpyZWNvcmRPZkdlc3R1cmVTY3Jv
bGxFdmVudHMoRWxlbWVudCogZWxlbWVudCwgRXhjZXB0aW9uQ29kZSYgZWMpCit7CisjaWYgRU5B
QkxFKEdFU1RVUkVfRVZFTlRTKSAmJiBFTkFCTEUoU01PT1RIX1NDUk9MTElORykKKyAgICBpZiAo
IWVsZW1lbnQpIHsKKyAgICAgICAgZWMgPSBJTlZBTElEX0FDQ0VTU19FUlI7CisgICAgICAgIHJl
dHVybiAtMTsKKyAgICB9CisKKyAgICBSZW5kZXJPYmplY3QqIHJlbmRlcmVyID0gZWxlbWVudC0+
cmVuZGVyZXIoKTsKKyAgICBpZiAoIXJlbmRlcmVyKSB7CisgICAgICAgIGVjID0gSU5WQUxJRF9O
T0RFX1RZUEVfRVJSOworICAgICAgICByZXR1cm4gLTE7CisgICAgfQorICAgIAorICAgIFJlbmRl
ckJveCogYm94ID0gcmVuZGVyZXItPmVuY2xvc2luZ0JveCgpOworICAgIHdoaWxlIChib3gpIHsK
KyAgICAgICAgUmVuZGVyTGF5ZXIqIHJlbmRlckxheWVyID0gYm94LT5sYXllcigpOworICAgICAg
ICBpZiAocmVuZGVyTGF5ZXIpCisgICAgICAgICAgIHJldHVybiByZW5kZXJMYXllci0+c2Nyb2xs
QW5pbWF0b3IoKS0+Z2VzdHVyZUV2ZW50VGVzdFJlY29yZCgpOworCisgICAgICAgIFJlbmRlckJs
b2NrKiBibG9jayA9IGJveC0+Y29udGFpbmluZ0Jsb2NrKCk7CisgICAgICAgIGlmICghYmxvY2sp
IHsKKyAgICAgICAgICAgIGVjID0gSU5WQUxJRF9OT0RFX1RZUEVfRVJSOworICAgICAgICAgICAg
cmV0dXJuIC0xOworICAgICAgICB9CisKKyAgICAgICAgaWYgKGJsb2NrLT5pc1JlbmRlclZpZXco
KSkKKyAgICAgICAgICAgIHJldHVybiB0b1JlbmRlclZpZXcoYmxvY2spLT5mcmFtZVZpZXcoKS0+
c2Nyb2xsQW5pbWF0b3IoKS0+Z2VzdHVyZUV2ZW50VGVzdFJlY29yZCgpOworICAgICAgICBib3gg
PSBibG9jazsKKyAgICB9ICAgICAgICAKKyAgICBlYyA9IElOVkFMSURfTk9ERV9UWVBFX0VSUjsK
KyAgICByZXR1cm4gLTE7CisjZWxzZQorICAgIFVOVVNFRF9QQVJBTShlbGVtZW50KTsKKyAgICBl
YyA9IElOVkFMSURfQUNDRVNTX0VSUjsKKyAgICByZXR1cm4gLTE7CisjZW5kaWYKK30KKwordm9p
ZCBJbnRlcm5hbHM6OmVuYWJsZUdlc3R1cmVTY3JvbGxFdmVudFJlY29yZChEb2N1bWVudCogZG9j
dW1lbnQsIEV4Y2VwdGlvbkNvZGUmIGVjKQoreworI2lmIEVOQUJMRShHRVNUVVJFX0VWRU5UUykg
JiYgRU5BQkxFKFNNT09USF9TQ1JPTExJTkcpCisgICAgaWYgKCFkb2N1bWVudCkgeworICAgICAg
ICBlYyA9IElOVkFMSURfQUNDRVNTX0VSUjsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAg
IEZyYW1lVmlldyogZnJhbWUgPSBkb2N1bWVudC0+dmlldygpOworICAgIGlmICghZnJhbWUpIHsK
KyAgICAgICAgZWMgPSBJTlZBTElEX05PREVfVFlQRV9FUlI7CisgICAgICAgIHJldHVybjsKKyAg
ICB9CisKKyAgICBpZiAoIWZyYW1lLT5zY3JvbGxBbmltYXRvcigpKQorICAgICAgZWMgPSBJTlZB
TElEX05PREVfVFlQRV9FUlI7CisKKyAgICAKKyAgICBmcmFtZS0+c2Nyb2xsQW5pbWF0b3IoKS0+
ZW5hYmxlR2VzdHVyZUV2ZW50VGVzdFJlY29yZCgpOworICAgIHJldHVybjsKKyNlbHNlCisgICAg
VU5VU0VEX1BBUkFNKGRvY3VtZW50KTsKKyAgICBlYyA9IElOVkFMSURfQUNDRVNTX0VSUjsKKyAg
ICByZXR1cm47CisjZW5kaWYKK30KKworaW50IEludGVybmFsczo6cmVjb3JkT2ZHZXN0dXJlU2Ny
b2xsRXZlbnRzKERvY3VtZW50KiBkb2N1bWVudCwgRXhjZXB0aW9uQ29kZSYgZWMpCit7CisjaWYg
RU5BQkxFKEdFU1RVUkVfRVZFTlRTKSAmJiBFTkFCTEUoU01PT1RIX1NDUk9MTElORykKKyAgICBp
ZiAoIWRvY3VtZW50KSB7CisgICAgICAgIGVjID0gSU5WQUxJRF9BQ0NFU1NfRVJSOworICAgICAg
ICByZXR1cm4gLTE7CisgICAgfQorCisgICAgRnJhbWVWaWV3KiBmcmFtZSA9IGRvY3VtZW50LT52
aWV3KCk7CisgICAgaWYgKCFmcmFtZSkgeworICAgICAgICBlYyA9IElOVkFMSURfTk9ERV9UWVBF
X0VSUjsKKyAgICAgICAgcmV0dXJuIC0xOworICAgIH0KKworICAgIGlmICghZnJhbWUtPnNjcm9s
bEFuaW1hdG9yKCkpCisgICAgICBlYyA9IElOVkFMSURfTk9ERV9UWVBFX0VSUjsKKworICAgIHJl
dHVybiBmcmFtZS0+c2Nyb2xsQW5pbWF0b3IoKS0+Z2VzdHVyZUV2ZW50VGVzdFJlY29yZCgpOwor
I2Vsc2UKKyAgICBVTlVTRURfUEFSQU0oZG9jdW1lbnQpOworICAgIGVjID0gSU5WQUxJRF9BQ0NF
U1NfRVJSOworICAgIHJldHVybiAtMTsKKyNlbmRpZgorfQorCisjaWYgRU5BQkxFKEdFU1RVUkVf
RVZFTlRTKSAmJiBFTkFCTEUoU01PT1RIX1NDUk9MTElORykKK3N0YXRpYwordm9pZCBzZW5kR2Vz
dHVyZUV2ZW50KERvY3VtZW50KiBkb2N1bWVudCwgUGxhdGZvcm1FdmVudDo6VHlwZSB0eXBlLCBj
b25zdCBmbG9hdCBwb3NYLCBjb25zdCBmbG9hdCBwb3NZLCBjb25zdCBmbG9hdCBkZWx0YVgsIGNv
bnN0IGZsb2F0IGRlbHRhWSwgRXhjZXB0aW9uQ29kZSYgZWMpCit7CisgICAgaWYgKCFkb2N1bWVu
dCkgeworICAgICAgICBlYyA9IElOVkFMSURfQUNDRVNTX0VSUjsKKyAgICAgICAgcmV0dXJuOwor
ICAgIH0KKyAgICBGcmFtZSogZnJhbWUgPSBkb2N1bWVudC0+ZnJhbWUoKTsKKyAgICBpZiAoIWZy
YW1lKSB7CisgICAgICAgIGVjID0gSU5WQUxJRF9OT0RFX1RZUEVfRVJSOworICAgICAgICByZXR1
cm47CisgICAgfQorCisgICAgSW50UG9pbnQgcG9zaXRpb24ocG9zWCwgcG9zWSk7CisgICAgUGxh
dGZvcm1HZXN0dXJlRXZlbnQgZ2VzdHVyZUV2ZW50KHR5cGUsIHBvc2l0aW9uLCBwb3NpdGlvbiwg
MC4sIGRlbHRhWCwgZGVsdGFZLCBmYWxzZSwgZmFsc2UsIGZhbHNlLCBmYWxzZSk7CisgICAgZnJh
bWUtPmV2ZW50SGFuZGxlcigpLT5oYW5kbGVHZXN0dXJlRXZlbnQoZ2VzdHVyZUV2ZW50KTsKK30K
KyNlbmRpZgorCitpbnQgSW50ZXJuYWxzOjpzZW5kU2Nyb2xsQmVnaW5HZXN0dXJlRXZlbnQoRG9j
dW1lbnQqIGRvY3VtZW50LCBjb25zdCBmbG9hdCBwb3NYLCBjb25zdCBmbG9hdCBwb3NZLCBFeGNl
cHRpb25Db2RlJiBlYykKK3sKKyNpZiBFTkFCTEUoR0VTVFVSRV9FVkVOVFMpICYmIEVOQUJMRShT
TU9PVEhfU0NST0xMSU5HKQorICAgIHNlbmRHZXN0dXJlRXZlbnQoZG9jdW1lbnQsIFBsYXRmb3Jt
RXZlbnQ6Okdlc3R1cmVTY3JvbGxCZWdpbiwgcG9zWCwgcG9zWSwgMC5mLCAwLmYsIGVjKTsKKyAg
ICByZXR1cm4gMDsKKyNlbHNlCisgICAgVU5VU0VEX1BBUkFNKGRvY3VtZW50KTsKKyAgICBVTlVT
RURfUEFSQU0ocG9zWCk7CisgICAgVU5VU0VEX1BBUkFNKHBvc1kpOworICAgIGVjID0gSU5WQUxJ
RF9BQ0NFU1NfRVJSOworICAgIHJldHVybiAtMTsKKyNlbmRpZgorfQorCitpbnQgSW50ZXJuYWxz
OjpzZW5kU2Nyb2xsVXBkYXRlR2VzdHVyZUV2ZW50KERvY3VtZW50KiBkb2N1bWVudCwgY29uc3Qg
ZmxvYXQgcG9zWCwgY29uc3QgZmxvYXQgcG9zWSwgY29uc3QgZmxvYXQgZGVsdGFYLCBjb25zdCBm
bG9hdCBkZWx0YVksIEV4Y2VwdGlvbkNvZGUmIGVjKQoreworI2lmIEVOQUJMRShHRVNUVVJFX0VW
RU5UUykgJiYgRU5BQkxFKFNNT09USF9TQ1JPTExJTkcpCisgICAgc2VuZEdlc3R1cmVFdmVudChk
b2N1bWVudCwgUGxhdGZvcm1FdmVudDo6R2VzdHVyZVNjcm9sbFVwZGF0ZSwgcG9zWCwgcG9zWSwg
ZGVsdGFYLCBkZWx0YVksIGVjKTsKKyAgICByZXR1cm4gMDsKKyNlbHNlCisgICAgVU5VU0VEX1BB
UkFNKGRvY3VtZW50KTsKKyAgICBVTlVTRURfUEFSQU0ocG9zWCk7CisgICAgVU5VU0VEX1BBUkFN
KHBvc1kpOworICAgIFVOVVNFRF9QQVJBTShkZWx0YVgpOworICAgIFVOVVNFRF9QQVJBTShkZWx0
YVkpOworICAgIGVjID0gSU5WQUxJRF9BQ0NFU1NfRVJSOworICAgIHJldHVybiAtMTsKKyNlbmRp
ZgorfQorCitpbnQgSW50ZXJuYWxzOjpzZW5kU2Nyb2xsRW5kR2VzdHVyZUV2ZW50KERvY3VtZW50
KiBkb2N1bWVudCwgY29uc3QgZmxvYXQgcG9zWCwgY29uc3QgZmxvYXQgcG9zWSwgY29uc3QgZmxv
YXQgZGVsdGFYLCBjb25zdCBmbG9hdCBkZWx0YVksIEV4Y2VwdGlvbkNvZGUmIGVjKQoreworI2lm
IEVOQUJMRShHRVNUVVJFX0VWRU5UUykgJiYgRU5BQkxFKFNNT09USF9TQ1JPTExJTkcpCisgICAg
c2VuZEdlc3R1cmVFdmVudChkb2N1bWVudCwgUGxhdGZvcm1FdmVudDo6R2VzdHVyZVNjcm9sbEVu
ZCwgcG9zWCwgcG9zWSwgZGVsdGFYLCBkZWx0YVksIGVjKTsKKyAgICByZXR1cm4gMDsKKyNlbHNl
CisgICAgVU5VU0VEX1BBUkFNKGRvY3VtZW50KTsKKyAgICBVTlVTRURfUEFSQU0ocG9zWCk7Cisg
ICAgVU5VU0VEX1BBUkFNKHBvc1kpOworICAgIFVOVVNFRF9QQVJBTShkZWx0YVgpOworICAgIFVO
VVNFRF9QQVJBTShkZWx0YVkpOworICAgIGVjID0gSU5WQUxJRF9BQ0NFU1NfRVJSOworICAgIHJl
dHVybiAtMTsKKyNlbmRpZgorfQorCiB2b2lkIEludGVybmFsczo6c2V0U2hvdWxkTGF5b3V0Rml4
ZWRFbGVtZW50c1JlbGF0aXZlVG9GcmFtZShEb2N1bWVudCogZG9jdW1lbnQsIGJvb2wgZW5hYmxl
ZCwgRXhjZXB0aW9uQ29kZSYgZWMpCiB7CiAgICAgaWYgKCFkb2N1bWVudCB8fCAhZG9jdW1lbnQt
PnZpZXcoKSkgewpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvdGVzdGluZy9JbnRlcm5hbHMu
aCBiL1NvdXJjZS9XZWJDb3JlL3Rlc3RpbmcvSW50ZXJuYWxzLmgKaW5kZXggZWQ0NzM3MDU1Yjk5
MzgzZGE5YjI4MDIxYWYzZjY5NTljNjFkMzVmNy4uODM2ZTFhMGIyYmY5NjBjMjViM2RiNTIyZTBl
OTJiMzAxYjVlMGM4ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvdGVzdGluZy9JbnRlcm5h
bHMuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS90ZXN0aW5nL0ludGVybmFscy5oCkBAIC0xMTksNiAr
MTE5LDE1IEBAIHB1YmxpYzoKIAogICAgIHN0YXRpYyBjb25zdCBjaGFyKiBpbnRlcm5hbHNJZDsK
IAorICAgIHZvaWQgZW5hYmxlR2VzdHVyZVNjcm9sbEV2ZW50UmVjb3JkKEVsZW1lbnQqLCBFeGNl
cHRpb25Db2RlJik7CisgICAgaW50IHJlY29yZE9mR2VzdHVyZVNjcm9sbEV2ZW50cyhFbGVtZW50
KiwgRXhjZXB0aW9uQ29kZSYpOworICAgIHZvaWQgZW5hYmxlR2VzdHVyZVNjcm9sbEV2ZW50UmVj
b3JkKERvY3VtZW50KiwgRXhjZXB0aW9uQ29kZSYpOworICAgIGludCByZWNvcmRPZkdlc3R1cmVT
Y3JvbGxFdmVudHMoRG9jdW1lbnQqLCBFeGNlcHRpb25Db2RlJik7CisKKyAgICBpbnQgc2VuZFNj
cm9sbEJlZ2luR2VzdHVyZUV2ZW50KERvY3VtZW50KiwgY29uc3QgZmxvYXQgcG9zWCwgY29uc3Qg
ZmxvYXQgcG9zWSwgRXhjZXB0aW9uQ29kZSYpOworICAgIGludCBzZW5kU2Nyb2xsVXBkYXRlR2Vz
dHVyZUV2ZW50KERvY3VtZW50KiwgY29uc3QgZmxvYXQgcG9zWCwgY29uc3QgZmxvYXQgcG9zWSwg
Y29uc3QgZmxvYXQgZGVsdGFYLCBjb25zdCBmbG9hdCBkZWx0YVksIEV4Y2VwdGlvbkNvZGUmKTsK
KyAgICBpbnQgc2VuZFNjcm9sbEVuZEdlc3R1cmVFdmVudChEb2N1bWVudCosIGNvbnN0IGZsb2F0
IHBvc1gsIGNvbnN0IGZsb2F0IHBvc1ksIGNvbnN0IGZsb2F0IGRlbHRhWCwgY29uc3QgZmxvYXQg
ZGVsdGFZLCBFeGNlcHRpb25Db2RlJik7CisKIHByaXZhdGU6CiAgICAgSW50ZXJuYWxzKCk7CiAK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Rlc3RpbmcvSW50ZXJuYWxzLmlkbCBiL1NvdXJj
ZS9XZWJDb3JlL3Rlc3RpbmcvSW50ZXJuYWxzLmlkbAppbmRleCBmNTZkMWFmNzRhOGUzNWRkNDdi
ZDRlNmM0OWYxMjVlN2VhYWMzYTU1Li43MjMyMjE0NmZjODA2NTQyMWNmN2U4NTZhYWI0YjI1Njc4
NzJlNzhmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS90ZXN0aW5nL0ludGVybmFscy5pZGwK
KysrIGIvU291cmNlL1dlYkNvcmUvdGVzdGluZy9JbnRlcm5hbHMuaWRsCkBAIC03Nyw2ICs3Nywx
NSBAQCBtb2R1bGUgd2luZG93IHsKICAgICAgICAgdW5zaWduZWQgbG9uZyBsb2NhdGlvbkZyb21S
YW5nZShpbiBFbGVtZW50IHNjb3BlLCBpbiBSYW5nZSByYW5nZSkgcmFpc2VzIChET01FeGNlcHRp
b24pOwogICAgICAgICB1bnNpZ25lZCBsb25nIGxlbmd0aEZyb21SYW5nZShpbiBFbGVtZW50IHNj
b3BlLCBpbiBSYW5nZSByYW5nZSkgcmFpc2VzIChET01FeGNlcHRpb24pOwogCisgICAgICAgIHZv
aWQgZW5hYmxlR2VzdHVyZVNjcm9sbEV2ZW50UmVjb3JkKGluIEVsZW1lbnQgdGFyZ2V0KSByYWlz
ZXMoRE9NRXhjZXB0aW9uKTsKKyAgICAgICAgaW50IHJlY29yZE9mR2VzdHVyZVNjcm9sbEV2ZW50
cyhpbiBFbGVtZW50IHRhcmdldCkgcmFpc2VzKERPTUV4Y2VwdGlvbik7CisgICAgICAgIHZvaWQg
ZW5hYmxlR2VzdHVyZVNjcm9sbEV2ZW50UmVjb3JkKGluIERvY3VtZW50IGRvY3VtZW50KSByYWlz
ZXMoRE9NRXhjZXB0aW9uKTsKKyAgICAgICAgaW50IHJlY29yZE9mR2VzdHVyZVNjcm9sbEV2ZW50
cyhpbiBEb2N1bWVudCBkb2N1bWVudCkgcmFpc2VzKERPTUV4Y2VwdGlvbik7CisKKyAgICAgICAg
aW50IHNlbmRTY3JvbGxCZWdpbkdlc3R1cmVFdmVudChpbiBEb2N1bWVudCBkb2N1bWVudCwgaW4g
ZmxvYXQgcG9zWCwgaW4gZmxvYXQgcG9zWSkgcmFpc2VzKERPTUV4Y2VwdGlvbik7CisgICAgICAg
IGludCBzZW5kU2Nyb2xsVXBkYXRlR2VzdHVyZUV2ZW50KGluIERvY3VtZW50IGRvY3VtZW50LCBp
biBmbG9hdCBwb3NYLCBpbiBmbG9hdCBwb3NZLCBpbiBmbG9hdCBkZWx0YVgsIGluIGZsb2F0IGRl
bHRhWSkgcmFpc2VzKERPTUV4Y2VwdGlvbik7CisgICAgICAgIGludCBzZW5kU2Nyb2xsRW5kR2Vz
dHVyZUV2ZW50KGluIERvY3VtZW50IGRvY3VtZW50LCBpbiBmbG9hdCBwb3NYLCBpbiBmbG9hdCBw
b3NZLCBpbiBmbG9hdCBkZWx0YVgsIGluIGZsb2F0IGRlbHRhWSkgcmFpc2VzKERPTUV4Y2VwdGlv
bik7CisKICAgICAgICAgdm9pZCBzZXRTaG91bGRMYXlvdXRGaXhlZEVsZW1lbnRzUmVsYXRpdmVU
b0ZyYW1lKGluIERvY3VtZW50IGRvY3VtZW50LCBpbiBib29sZWFuIGVuYWJsZWQpIHJhaXNlcyhE
T01FeGNlcHRpb24pOwogICAgICAgICB2b2lkIHNldFVuaWZpZWRUZXh0Q2hlY2tpbmdFbmFibGVk
KGluIERvY3VtZW50IGRvY3VtZW50LCBpbiBib29sZWFuIGVuYWJsZWQpIHJhaXNlcyAoRE9NRXhj
ZXB0aW9uKTsKICAgICAgICAgYm9vbGVhbiB1bmlmaWVkVGV4dENoZWNraW5nRW5hYmxlZChpbiBE
b2N1bWVudCBkb2N1bWVudCkgcmFpc2VzIChET01FeGNlcHRpb24pOwpkaWZmIC0tZ2l0IGEvTGF5
b3V0VGVzdHMvQ2hhbmdlTG9nIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCmluZGV4IDJiZmI1MjMz
MDhkNDM4MTBiNGRlMWI0NGU5ZmQxZWZjZTllNDI2NjkuLmY2Njc0NTIzMWRjNGQ5NjQxZmVhMWY4
YWM2OWQ2OWI0ZDFkNGViNDIgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL0NoYW5nZUxvZworKysg
Yi9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKQEAgLTEsMyArMSwyNCBAQAorMjAxMi0wMS0wNSAgUm9i
ZXJ0IEtyb2VnZXIgIDxyamtyb2VnZUBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgUGxhdGZvcm1H
ZXN0dXJlRXZlbnQ6OmhhbmRsZUdlc3R1cmVFdmVudCBzaG91bGQgaGl0IHRlc3Qgd2hpbGUgZGlz
cGF0Y2hpbmcgUGxhdGZvcm1FdmVudDo6R2VzdHVyZVNjcm9sbCogZXZlbnRzLgorICAgICAgICBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9Njc4MjIKKworICAgICAgICBU
ZXN0cyB0byB2ZXJpZnkgdGhhdCB0aGUgUGxhdGZvcm1FdmVudCBHZXN0dXJlU2Nyb2xsKlR5cGUg
ZXZlbnRzCisgICAgICAgIGFyZSBiZWluZyBjb3JyZWN0bHkgZGlzcGF0Y2hlZCBhbmQgdGhhdCBs
YXRjaGluZyBkb2VzIG5vdCBmYWlsCisgICAgICAgIGluIHRoZSBwcmVzZW5jZSBvZiB0aGUgcmVt
b3ZhbCBvZiB0aGUgdGFyZ2V0IGVsZW1lbnQuCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZ
IChPT1BTISkuCisKKyAgICAgICAgKiBmYXN0L2V2ZW50cy90b3VjaC9nZXN0dXJlL3RvdWNoLWdl
c3R1cmUtc2Nyb2xsLWRpdi1leHBlY3RlZC50eHQ6IEFkZGVkLgorICAgICAgICAqIGZhc3QvZXZl
bnRzL3RvdWNoL2dlc3R1cmUvdG91Y2gtZ2VzdHVyZS1zY3JvbGwtZGl2Lmh0bWw6IEFkZGVkOiB0
ZXN0cyBkZWxpdmVyeSB0byBvdmVyZmxvdy1kaXZzLgorICAgICAgICAqIGZhc3QvZXZlbnRzL3Rv
dWNoL2dlc3R1cmUvdG91Y2gtZ2VzdHVyZS1zY3JvbGwtaWZyYW1lLWV4cGVjdGVkLnR4dDogQWRk
ZWQuCisgICAgICAgICogZmFzdC9ldmVudHMvdG91Y2gvZ2VzdHVyZS90b3VjaC1nZXN0dXJlLXNj
cm9sbC1pZnJhbWUuaHRtbDogQWRkZWQ6IHRlc3RzIGRlbGl2ZXJ5IHRvIGFuIGlmcmFtZS4KKyAg
ICAgICAgKiBmYXN0L2V2ZW50cy90b3VjaC9nZXN0dXJlL3RvdWNoLWdlc3R1cmUtc2Nyb2xsLXBh
Z2UtZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAgICAgKiBmYXN0L2V2ZW50cy90b3VjaC9nZXN0
dXJlL3RvdWNoLWdlc3R1cmUtc2Nyb2xsLXBhZ2UuaHRtbDogQWRkZWQ6IHRlc3RzIGRlbGl2ZXJ5
IHRvIGEgcGFnZS4KKyAgICAgICAgKiBmYXN0L2V2ZW50cy90b3VjaC9nZXN0dXJlL3RvdWNoLWdl
c3R1cmUtc2Nyb2xsLXNoeS10YXJnZXQtZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAgICAgKiBm
YXN0L2V2ZW50cy90b3VjaC9nZXN0dXJlL3RvdWNoLWdlc3R1cmUtc2Nyb2xsLXNoeS10YXJnZXQu
aHRtbDogQWRkZWQ6IHRlc3RzIHN1Y2Nlc3NmdWwgb3BlcmF0aW9uIHdoZW4gdGhlIGxhdGNoZWQg
dGFyZ2V0IGRpdiBpcyByZW1vdmVkIGR1cmluZyB0aGUgZ2VzdHVyZSBldmVudCBzZXF1ZW5jZS4K
KyAgICAgICAgKiBmYXN0L2V2ZW50cy90b3VjaC9yZXNvdXJjZXMvc2Nyb2xsLWluc2lkZS1pZnJh
bWUuaHRtbDogQWRkZWQuCisKIDIwMTItMDEtMDUgIERtaXRyeSBMb21vdiAgPGRzbG9tb3ZAZ29v
Z2xlLmNvbT4KIAogICAgICAgICBVbnJldmlld2VkOiBmaWxlZCBXSzc1NjMzIGFuZCB1cGRhdGVk
IGV4cGVjdGF0aW9ucwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvZmFzdC9ldmVudHMvdG91Y2gv
Z2VzdHVyZS90b3VjaC1nZXN0dXJlLXNjcm9sbC1kaXYtZXhwZWN0ZWQudHh0IGIvTGF5b3V0VGVz
dHMvZmFzdC9ldmVudHMvdG91Y2gvZ2VzdHVyZS90b3VjaC1nZXN0dXJlLXNjcm9sbC1kaXYtZXhw
ZWN0ZWQudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAuLmViM2IwYmYxYTYwN2NhZjBmYWVkODMyMjNhNGY5NWY3ZTll
YzM0YjUKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9mYXN0L2V2ZW50cy90b3VjaC9n
ZXN0dXJlL3RvdWNoLWdlc3R1cmUtc2Nyb2xsLWRpdi1leHBlY3RlZC50eHQKQEAgLTAsMCArMSwx
NyBAQAorVGhpcyB0ZXN0cyBnZXN0dXJlIGV2ZW50IHNjcm9sbGluZyBvZiBhbiBvdmVyZmxvdyBk
aXYuCisKK09uIHN1Y2Nlc3MsIHlvdSB3aWxsIHNlZSBhIHNlcmllcyBvZiAiUEFTUyIgbWVzc2Fn
ZXMsIGZvbGxvd2VkIGJ5ICJURVNUIENPTVBMRVRFIi4KKworCitmaXJzdCBnZXN0dXJlCitQQVNT
IG1vdmluZ2Rpdi5zY3JvbGxUb3AgaXMgMAorUEFTUyBtb3ZpbmdkaXYuc2Nyb2xsTGVmdCBpcyA5
MAorUEFTUyB3aW5kb3cuaW50ZXJuYWxzLnJlY29yZE9mR2VzdHVyZVNjcm9sbEV2ZW50cyhtb3Zp
bmdkaXYpIGlzIDEzCitzZWNvbmQgZ2VzdHVyZQorUEFTUyBtb3ZpbmdkaXYuc2Nyb2xsVG9wIGlz
IDk1CitQQVNTIG1vdmluZ2Rpdi5zY3JvbGxMZWZ0IGlzIDkwCitQQVNTIHdpbmRvdy5pbnRlcm5h
bHMucmVjb3JkT2ZHZXN0dXJlU2Nyb2xsRXZlbnRzKG1vdmluZ2RpdikgaXMgMTMKK1BBU1Mgc3Vj
Y2Vzc2Z1bGx5UGFyc2VkIGlzIHRydWUKKworVEVTVCBDT01QTEVURQorCmRpZmYgLS1naXQgYS9M
YXlvdXRUZXN0cy9mYXN0L2V2ZW50cy90b3VjaC9nZXN0dXJlL3RvdWNoLWdlc3R1cmUtc2Nyb2xs
LWRpdi5odG1sIGIvTGF5b3V0VGVzdHMvZmFzdC9ldmVudHMvdG91Y2gvZ2VzdHVyZS90b3VjaC1n
ZXN0dXJlLXNjcm9sbC1kaXYuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4zNmYwMzYxNmJiZDBlNTUzYmUwYjcy
M2YxYzJkMDE0YTZhN2JmOTA3Ci0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvZmFzdC9l
dmVudHMvdG91Y2gvZ2VzdHVyZS90b3VjaC1nZXN0dXJlLXNjcm9sbC1kaXYuaHRtbApAQCAtMCww
ICsxLDE2NSBAQAorPCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9JRVRGLy9EVEQgSFRNTC8vRU4i
PgorPGh0bWw+Cis8aGVhZD4KKzxzY3JpcHQgc3JjPSIuLi8uLi8uLi9qcy9yZXNvdXJjZXMvanMt
dGVzdC1wcmUuanMiPjwvc2NyaXB0PgorPHN0eWxlIHR5cGU9InRleHQvY3NzIj4KKyN0b3VjaHRh
cmdldCB7CisgIHdpZHRoOiAxMDBweDsKKyAgaGVpZ2h0OiAxMDBweDsKKyAgcG9zaXRpb246IHJl
bGF0aXZlOworICBiYWNrZ3JvdW5kOiB3aGl0ZTsKK30KKworI21vdmluZ2JveCB7CisgIHdpZHRo
OiAxMDAlOworICBoZWlnaHQ6IDEwMCU7CisgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKKyAgd29yZC13
cmFwOiBicmVhay13b3JkOworICBvdmVyZmxvdy15OiBzY3JvbGw7CisgIG92ZXJmbG93LXg6IHNj
cm9sbDsKKyAgZGlzcGxheTogYmxvY2s7Cit9CisKKyNncmVlbmJveCB7CisgIHdpZHRoOiAxMDBw
eDsKKyAgaGVpZ2h0OiAxMDBweDsKKyAgYmFja2dyb3VuZDogZ3JlZW47CisgIHBhZGRpbmc6IDBw
eDsKKyAgbWFyZ2luOiAwcHg7Cit9CisKKyNyZWRib3ggeworICB3aWR0aDogMTAwcHg7CisgIGhl
aWdodDogMTAwcHg7CisgIGJhY2tncm91bmQ6IHJlZDsKKyAgcGFkZGluZzogMHB4OworICBtYXJn
aW46IDBweDsKK30KKwordGQgeworICBwYWRkaW5nOiAwcHg7Cit9Cis8L3N0eWxlPgorPC9oZWFk
PgorPGJvZHkgc3R5bGU9Im1hcmdpbjowIiBvbmxvYWQ9InJ1blRlc3QoKTsiPgorPGRpdiBpZD0i
dG91Y2h0YXJnZXQiPgorICA8ZGl2IGlkPSJtb3Zpbmdib3giPgorICAgIDx0YWJsZSBib3JkZXI9
IjAiIGNlbGxzcGFjaW5nPSIwcHgiIGlkPSJ0YWJsZWZvbyI+CisgICAgICA8dHI+CisgICAgICAg
IDx0ZD48ZGl2IGlkPSJyZWRib3giPjwvZGl2PjwvdGQ+CisgICAgICAgIDx0ZD48ZGl2IGlkPSJn
cmVlbmJveCI+PC9kaXY+PC90ZD4KKyAgICAgIDwvdHI+CisgICAgICA8dHI+CisgICAgICAgIDx0
ZD48ZGl2IGlkPSJncmVlbmJveCI+PC9kaXY+PC90ZD4KKyAgICAgICAgPHRkPjxkaXYgaWQ9Imdy
ZWVuYm94Ij48L2Rpdj48L3RkPgorICAgICAgPC90cj4KKyAgICA8L3RhYmxlPgorICA8L2Rpdj4K
KzwvZGl2PgorCis8cCBpZD0iZGVzY3JpcHRpb24iPjwvcD4KKzxkaXYgaWQ9ImNvbnNvbGUiPjwv
ZGl2PgorPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgorCit2YXIgbW92aW5nZGl2Owor
dmFyIGV4cGVjdGVkU2Nyb2xsc1RvdGFsID0gMjsKK3ZhciBzY3JvbGxzT2NjdXJyZWQgPSAwOwor
dmFyIHNjcm9sbEFtb3VudFggPSBbJzkwJywgJzkwJ107Cit2YXIgc2Nyb2xsQW1vdW50WSA9IFsn
MCcsICc5NSddOwordmFyIGdlc3R1cmVEaXNwYXRjaFJlY29yZCA9IFsnMTMnLCAnMTMnXTsKKwor
ZnVuY3Rpb24gY2hlY2tTY3JvbGxPZmZzZXQoKQoreworICAgIG1vdmluZ2RpdiA9IGRvY3VtZW50
LmdldEVsZW1lbnRCeUlkKCdtb3Zpbmdib3gnKTsKKyAgICBpZiAod2luZG93LmV2ZW50U2VuZGVy
KSB7CisgICAgICAgIHNob3VsZEJlKCdtb3ZpbmdkaXYuc2Nyb2xsVG9wJywgc2Nyb2xsQW1vdW50
WVtzY3JvbGxzT2NjdXJyZWRdKTsKKyAgICAgICAgc2hvdWxkQmUoJ21vdmluZ2Rpdi5zY3JvbGxM
ZWZ0Jywgc2Nyb2xsQW1vdW50WFtzY3JvbGxzT2NjdXJyZWRdKTsKKyAgICAgICAgaWYgKHdpbmRv
dy5pbnRlcm5hbHMpIHsKKyAgICAgICAgICAgIHNob3VsZEJlKCd3aW5kb3cuaW50ZXJuYWxzLnJl
Y29yZE9mR2VzdHVyZVNjcm9sbEV2ZW50cyhtb3ZpbmdkaXYpJywgZ2VzdHVyZURpc3BhdGNoUmVj
b3JkW3Njcm9sbHNPY2N1cnJlZF0pOworICAgICAgICB9CisgICAgICAgIHNjcm9sbHNPY2N1cnJl
ZCsrOworICAgIH0KKworICAgaWYgKHNjcm9sbHNPY2N1cnJlZCA9PSBleHBlY3RlZFNjcm9sbHNU
b3RhbCkgeworICAgICAgICAvLyBJZiB3ZSd2ZSBnb3QgaGVyZSwgd2UndmUgcGFzc2VkLgorICAg
ICAgICBpc1N1Y2Nlc3NmdWxseVBhcnNlZCgpOworICAgICAgICBpZiAod2luZG93LmxheW91dFRl
c3RDb250cm9sbGVyKQorICAgICAgICAgICAgbGF5b3V0VGVzdENvbnRyb2xsZXIubm90aWZ5RG9u
ZSgpOworICAgIH0gZWxzZSB7CisgICAgICAgIHNlY29uZFRvdWNoRHJhZ1NlcXVlbmNlKCk7Cisg
ICAgfQorfQorCitmdW5jdGlvbiBmaW5nZXJVcChldmVudCkKK3sKKyAgICBpZiAoIXdpbmRvdy5s
YXlvdXRUZXN0Q29udHJvbGxlcikKKyAgICAgICAgZGVidWcoJ21vdmVkOiAnICsgZXZlbnQuY3Vy
cmVudFRhcmdldC5zY3JvbGxUb3AgKyAnLCAnICsgZXZlbnQuY3VycmVudFRhcmdldC5zY3JvbGxM
ZWZ0KTsKKyAgICByZXR1cm4gdHJ1ZTsgIC8vIFdhbnQgdGhlIGRlZmF1bHQgYmVoYXZpb3VyLgor
fQorCitmdW5jdGlvbiBmaXJzdFRvdWNoRHJhZ1NlcXVlbmNlKCkKK3sKKyAgICBkZWJ1ZygiZmly
c3QgZ2VzdHVyZSIpOworICAgIHZhciB0YXJnZXQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgn
bW92aW5nYm94Jyk7CisgICAgd2luZG93LmludGVybmFscy5lbmFibGVHZXN0dXJlU2Nyb2xsRXZl
bnRSZWNvcmQodGFyZ2V0KTsKKworICAgIHdpbmRvdy5pbnRlcm5hbHMuc2VuZFNjcm9sbEJlZ2lu
R2VzdHVyZUV2ZW50KGRvY3VtZW50LCA1LCAxMik7CisgICAgd2luZG93LmludGVybmFscy5zZW5k
U2Nyb2xsVXBkYXRlR2VzdHVyZUV2ZW50KGRvY3VtZW50LCA1LCAxMiwgLTkwLCAwKTsKKyAgICB3
aW5kb3cuaW50ZXJuYWxzLnNlbmRTY3JvbGxFbmRHZXN0dXJlRXZlbnQoZG9jdW1lbnQsIDUsIDEy
LCAwLCAwKTsKKworICAgIC8vIFdhaXQgZm9yIGxheW91dC4KKyAgICBjaGVja1Njcm9sbE9mZnNl
dCgpOworfQorCitmdW5jdGlvbiBzZWNvbmRUb3VjaERyYWdTZXF1ZW5jZSgpCit7CisgICAgZGVi
dWcoInNlY29uZCBnZXN0dXJlIik7CisgICAgdmFyIHRhcmdldCA9IGRvY3VtZW50LmdldEVsZW1l
bnRCeUlkKCdtb3Zpbmdib3gnKTsKKyAgICB3aW5kb3cuaW50ZXJuYWxzLmVuYWJsZUdlc3R1cmVT
Y3JvbGxFdmVudFJlY29yZCh0YXJnZXQpOworCisgICAgd2luZG93LmludGVybmFscy5zZW5kU2Ny
b2xsQmVnaW5HZXN0dXJlRXZlbnQoZG9jdW1lbnQsIDEyLCAyKTsKKyAgICB3aW5kb3cuaW50ZXJu
YWxzLnNlbmRTY3JvbGxVcGRhdGVHZXN0dXJlRXZlbnQoZG9jdW1lbnQsIDEyLCAyLCAwLCAtOTUp
OworICAgIHdpbmRvdy5pbnRlcm5hbHMuc2VuZFNjcm9sbEVuZEdlc3R1cmVFdmVudChkb2N1bWVu
dCwgMTIsIDIsIDAsIDApOworCisgICAgLy8gV2FpdCBmb3IgbGF5b3V0LgorICAgIGNoZWNrU2Ny
b2xsT2Zmc2V0KCk7Cit9CisKK2Z1bmN0aW9uIGV4aXRJZk5lY2Vzc2FyeSgpCit7CisgICAgZGVi
dWcoJ3dpbmRvdy5pbnRlcm5hbHMgbm90IGltcGxlbWVudGVkIG9yIGdlc3R1cmUgZXZlbnQgc2Ny
b2xpbmcgaXMgYnJva2VuLicpOworICAgIGlzU3VjY2Vzc2Z1bGx5UGFyc2VkKCk7CisgICAgaWYg
KHdpbmRvdy5sYXlvdXRUZXN0Q29udHJvbGxlcikKKyAgICAgICAgbGF5b3V0VGVzdENvbnRyb2xs
ZXIubm90aWZ5RG9uZSgpOworfQorCitpZiAod2luZG93LmxheW91dFRlc3RDb250cm9sbGVyKQor
ICAgIGxheW91dFRlc3RDb250cm9sbGVyLndhaXRVbnRpbERvbmUoKTsKKyAgICAKK2Z1bmN0aW9u
IGNoZWNrVGVzdERlcGVuZGVuY2llcygpCit7CisgICAgcmV0dXJuIHdpbmRvdy5ldmVudFNlbmRl
ciAmJiB3aW5kb3cuaW50ZXJuYWxzICYmIHdpbmRvdy5pbnRlcm5hbHMuc2VuZFNjcm9sbEJlZ2lu
R2VzdHVyZUV2ZW50ICYmIHdpbmRvdy5pbnRlcm5hbHMuc2VuZFNjcm9sbFVwZGF0ZUdlc3R1cmVF
dmVudCAmJiB3aW5kb3cuaW50ZXJuYWxzLnNlbmRTY3JvbGxFbmRHZXN0dXJlRXZlbnQ7Cit9CisK
K2Z1bmN0aW9uIHJ1blRlc3QoKQoreworICAgIHZhciBtb3ZpbmdkaXYgPSBkb2N1bWVudC5nZXRF
bGVtZW50QnlJZCgnbW92aW5nYm94Jyk7CisKKyAgICBpZiAod2luZG93LmV2ZW50U2VuZGVyKSB7
CisgICAgICAgIGRlc2NyaXB0aW9uKCdUaGlzIHRlc3RzIGdlc3R1cmUgZXZlbnQgc2Nyb2xsaW5n
IG9mIGFuIG92ZXJmbG93IGRpdi4nKTsKKworICAgICAgICBpZiAoY2hlY2tUZXN0RGVwZW5kZW5j
aWVzKCkpCisgICAgICAgICAgICBmaXJzdFRvdWNoRHJhZ1NlcXVlbmNlKCk7CisgICAgICAgIGVs
c2UKKyAgICAgICAgICAgIGV4aXRJZk5lY2Vzc2FyeSgpOworICAgIH0gZWxzZSB7CisgICAgICAg
IGRlYnVnKCJUaGlzIHRlc3QgcmVxdWlyZXMgRHVtcFJlbmRlclRyZWUgYW5kIHdpbmRvdy5pbnRl
cm5hbHMuICBUb3VjaCBzY3JvbGwgdGhlIHJlZCByZWN0IHRvIGxvZy4iKTsKKyAgICAgICAgbW92
aW5nZGl2LmFkZEV2ZW50TGlzdGVuZXIoJ3RvdWNoZW5kJywgZmluZ2VyVXAsIGZhbHNlKTsKKyAg
ICB9Cit9Cis8L3NjcmlwdD4KKworCisKKzwvYm9keT4KKzwvaHRtbD4KZGlmZiAtLWdpdCBhL0xh
eW91dFRlc3RzL2Zhc3QvZXZlbnRzL3RvdWNoL2dlc3R1cmUvdG91Y2gtZ2VzdHVyZS1zY3JvbGwt
aWZyYW1lLWV4cGVjdGVkLnR4dCBiL0xheW91dFRlc3RzL2Zhc3QvZXZlbnRzL3RvdWNoL2dlc3R1
cmUvdG91Y2gtZ2VzdHVyZS1zY3JvbGwtaWZyYW1lLWV4cGVjdGVkLnR4dApuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi41
YWU2ZDllMmY2YTk4MWE3ZTIzMjRjNzdkMTc2YmEyYTUwMDc3Y2QyCi0tLSAvZGV2L251bGwKKysr
IGIvTGF5b3V0VGVzdHMvZmFzdC9ldmVudHMvdG91Y2gvZ2VzdHVyZS90b3VjaC1nZXN0dXJlLXNj
cm9sbC1pZnJhbWUtZXhwZWN0ZWQudHh0CkBAIC0wLDAgKzEsMTggQEAKKworVGhpcyB0ZXN0cyBn
ZXN0dXJlIGV2ZW50IHNjcm9sbGluZyBpbiBpZnJhbWVzLiBSZWQtZ3JlZW4gc3RyaXAgaXMgc2Ny
b2xsZWQgb24gcGFzcy4KKworT24gc3VjY2VzcywgeW91IHdpbGwgc2VlIGEgc2VyaWVzIG9mICJQ
QVNTIiBtZXNzYWdlcywgZm9sbG93ZWQgYnkgIlRFU1QgQ09NUExFVEUiLgorCisKK2ZpcnN0IGdl
c3R1cmUKK1BBU1MgdG91Y2h0YXJnZXQuY29udGVudERvY3VtZW50LmJvZHkuc2Nyb2xsVG9wIGlz
IDE0MAorUEFTUyB0b3VjaHRhcmdldC5jb250ZW50RG9jdW1lbnQuYm9keS5zY3JvbGxMZWZ0IGlz
IDAKK1BBU1Mgd2luZG93LmludGVybmFscy5yZWNvcmRPZkdlc3R1cmVTY3JvbGxFdmVudHModG91
Y2h0YXJnZXQuY29udGVudERvY3VtZW50KSBpcyA3CitzZWNvbmQgZ2VzdHVyZQorUEFTUyB0b3Vj
aHRhcmdldC5jb250ZW50RG9jdW1lbnQuYm9keS5zY3JvbGxUb3AgaXMgMjAwCitQQVNTIHRvdWNo
dGFyZ2V0LmNvbnRlbnREb2N1bWVudC5ib2R5LnNjcm9sbExlZnQgaXMgMAorUEFTUyB3aW5kb3cu
aW50ZXJuYWxzLnJlY29yZE9mR2VzdHVyZVNjcm9sbEV2ZW50cyh0b3VjaHRhcmdldC5jb250ZW50
RG9jdW1lbnQpIGlzIDcKK1BBU1Mgc3VjY2Vzc2Z1bGx5UGFyc2VkIGlzIHRydWUKKworVEVTVCBD
T01QTEVURQorCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9mYXN0L2V2ZW50cy90b3VjaC9nZXN0
dXJlL3RvdWNoLWdlc3R1cmUtc2Nyb2xsLWlmcmFtZS5odG1sIGIvTGF5b3V0VGVzdHMvZmFzdC9l
dmVudHMvdG91Y2gvZ2VzdHVyZS90b3VjaC1nZXN0dXJlLXNjcm9sbC1pZnJhbWUuaHRtbApuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwLi5iOWMyN2YyNTc2OTU1MDQyYWE0YjczZjUxZmEyN2MzM2NkNmY0ZDg5Ci0tLSAvZGV2
L251bGwKKysrIGIvTGF5b3V0VGVzdHMvZmFzdC9ldmVudHMvdG91Y2gvZ2VzdHVyZS90b3VjaC1n
ZXN0dXJlLXNjcm9sbC1pZnJhbWUuaHRtbApAQCAtMCwwICsxLDExOCBAQAorPCFET0NUWVBFIEhU
TUwgUFVCTElDICItLy9JRVRGLy9EVEQgSFRNTC8vRU4iPgorPGh0bWw+Cis8aGVhZD4KKzxsaW5r
IHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iLi4vLi4vLi4vanMvcmVzb3VyY2VzL2pzLXRlc3Qtc3R5
bGUuY3NzIj4KKzxzY3JpcHQgc3JjPSIuLi8uLi8uLi9qcy9yZXNvdXJjZXMvanMtdGVzdC1wcmUu
anMiPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9Ii4uLy4uLy4uL2pzL3Jlc291cmNlcy9qcy10ZXN0
LXBvc3QtZnVuY3Rpb24uanMiPjwvc2NyaXB0PgorPHN0eWxlIHR5cGU9InRleHQvY3NzIj4KKyN0
b3VjaHRhcmdldCB7CisgIHdpZHRoOiAyMDBweDsKKyAgaGVpZ2h0OiAyMDBweDsKKyAgcG9zaXRp
b246IHJlbGF0aXZlOworICBiYWNrZ3JvdW5kOiB3aGl0ZTsKK30KKzwvc3R5bGU+Cis8L2hlYWQ+
Cis8Ym9keT4KKzxpZnJhbWUgaWQ9InRvdWNodGFyZ2V0IiBzcmM9Ii4uL3Jlc291cmNlcy9zY3Jv
bGwtaW5zaWRlLWlmcmFtZS5odG1sIj48L2lmcmFtZT4KKyAgICA8cCBpZD0iZGVzY3JpcHRpb24i
PjwvcD4KKzxkaXYgaWQ9ImNvbnNvbGUiPjwvZGl2PgorPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFz
Y3JpcHQiPgorCit2YXIgdG91Y2h0YXJnZXQ7Cit2YXIgZXhwZWN0ZWRTY3JvbGxzVG90YWwgPSAy
OwordmFyIHNjcm9sbHNPY2N1cnJlZCA9IDA7Cit2YXIgc2Nyb2xsQW1vdW50WCA9IFsnMCcsICcw
J107Cit2YXIgc2Nyb2xsQW1vdW50WSA9IFsnMTQwJywgJzIwMCddOwordmFyIGdlc3R1cmVEaXNw
YXRjaFJlY29yZCA9IFsnNycsICc3J107CisKK2Z1bmN0aW9uIGNoZWNrU2Nyb2xsT2Zmc2V0KCkK
K3sKKyAgICB0b3VjaHRhcmdldCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b3VjaHRhcmdl
dCcpOworICAgIGlmICh3aW5kb3cuZXZlbnRTZW5kZXIpIHsKKyAgICAgICAgc2hvdWxkQmUoJ3Rv
dWNodGFyZ2V0LmNvbnRlbnREb2N1bWVudC5ib2R5LnNjcm9sbFRvcCcsIHNjcm9sbEFtb3VudFlb
c2Nyb2xsc09jY3VycmVkXSk7CisgICAgICAgIHNob3VsZEJlKCd0b3VjaHRhcmdldC5jb250ZW50
RG9jdW1lbnQuYm9keS5zY3JvbGxMZWZ0Jywgc2Nyb2xsQW1vdW50WFtzY3JvbGxzT2NjdXJyZWRd
KTsKKyAgICAgICAgaWYgKHdpbmRvdy5pbnRlcm5hbHMpIHsKKyAgICAgICAgICAgIHNob3VsZEJl
KCd3aW5kb3cuaW50ZXJuYWxzLnJlY29yZE9mR2VzdHVyZVNjcm9sbEV2ZW50cyh0b3VjaHRhcmdl
dC5jb250ZW50RG9jdW1lbnQpJywgZ2VzdHVyZURpc3BhdGNoUmVjb3JkW3Njcm9sbHNPY2N1cnJl
ZF0pOworICAgICAgICB9CisgICAgICAgIHNjcm9sbHNPY2N1cnJlZCsrOworICAgIH0KKworICAg
IGlmIChzY3JvbGxzT2NjdXJyZWQgPT0gZXhwZWN0ZWRTY3JvbGxzVG90YWwpIHsKKyAgICAgICAg
Ly8gSWYgd2UndmUgZ290IGhlcmUsIHdlJ3ZlIHBhc3NlZC4KKyAgICAgICAgc3VjY2Vzc2Z1bGx5
UGFyc2VkID0gdHJ1ZTsKKyAgICAgICAgaXNTdWNjZXNzZnVsbHlQYXJzZWQoKTsKKyAgICAgICAg
aWYgKHdpbmRvdy5sYXlvdXRUZXN0Q29udHJvbGxlcikKKyAgICAgICAgICAgIGxheW91dFRlc3RD
b250cm9sbGVyLm5vdGlmeURvbmUoKTsKKyAgICB9IGVsc2UgeworICAgICAgICBzZWNvbmRUb3Vj
aERyYWdTZXF1ZW5jZSgpOworICAgIH0KK30KKworZnVuY3Rpb24gZmluZ2VyVXAoZXZlbnQpCit7
CisgICAgaWYgKCF3aW5kb3cubGF5b3V0VGVzdENvbnRyb2xsZXIpCisgICAgICAgIGRlYnVnKCdt
b3ZlZDogJyArIGV2ZW50LmN1cnJlbnRUYXJnZXQuc2Nyb2xsVG9wICsgJywgJyArIGV2ZW50LmN1
cnJlbnRUYXJnZXQuc2Nyb2xsTGVmdCk7CisgICAgcmV0dXJuIHRydWU7ICAvLyBXYW50IHRoZSBk
ZWZhdWx0IGJlaGF2aW91ci4KK30KKworZnVuY3Rpb24gZmlyc3RUb3VjaERyYWdTZXF1ZW5jZSgp
Cit7CisgICAgZGVidWcoImZpcnN0IGdlc3R1cmUiKTsKKyAgICB0b3VjaHRhcmdldCA9IGRvY3Vt
ZW50LmdldEVsZW1lbnRCeUlkKCd0b3VjaHRhcmdldCcpOworICAgIHdpbmRvdy5pbnRlcm5hbHMu
ZW5hYmxlR2VzdHVyZVNjcm9sbEV2ZW50UmVjb3JkKHRvdWNodGFyZ2V0LmNvbnRlbnREb2N1bWVu
dCk7CisgICAgd2luZG93LmludGVybmFscy5zZW5kU2Nyb2xsQmVnaW5HZXN0dXJlRXZlbnQoZG9j
dW1lbnQsIDEyLCAxMCk7CisgICAgd2luZG93LmludGVybmFscy5zZW5kU2Nyb2xsVXBkYXRlR2Vz
dHVyZUV2ZW50KGRvY3VtZW50LCAxMiwgMTAsIDAsIC0xNDApOworICAgIHdpbmRvdy5pbnRlcm5h
bHMuc2VuZFNjcm9sbEVuZEdlc3R1cmVFdmVudChkb2N1bWVudCwgMTIsIDEwLCAwLCAwKTsKKwor
ICAgIC8vIFdhaXQgZm9yIGxheW91dC4KKyAgICBjaGVja1Njcm9sbE9mZnNldCgpOworfQorCitm
dW5jdGlvbiBzZWNvbmRUb3VjaERyYWdTZXF1ZW5jZSgpCit7CisgICAgZGVidWcoInNlY29uZCBn
ZXN0dXJlIik7CisgICAgdG91Y2h0YXJnZXQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG91
Y2h0YXJnZXQnKTsKKyAgICB3aW5kb3cuaW50ZXJuYWxzLmVuYWJsZUdlc3R1cmVTY3JvbGxFdmVu
dFJlY29yZCh0b3VjaHRhcmdldC5jb250ZW50RG9jdW1lbnQpOworICAgIHdpbmRvdy5pbnRlcm5h
bHMuc2VuZFNjcm9sbEJlZ2luR2VzdHVyZUV2ZW50KGRvY3VtZW50LCAxMiwgNDApOworICAgIHdp
bmRvdy5pbnRlcm5hbHMuc2VuZFNjcm9sbFVwZGF0ZUdlc3R1cmVFdmVudChkb2N1bWVudCwgMTIs
IDQwLCAwLCAtNjApOworICAgIHdpbmRvdy5pbnRlcm5hbHMuc2VuZFNjcm9sbEVuZEdlc3R1cmVF
dmVudChkb2N1bWVudCwgMTIsIDQwLCAwLCAwKTsKKworICAgIC8vIFdhaXQgZm9yIGxheW91dC4K
KyAgICBjaGVja1Njcm9sbE9mZnNldCgpOworfQorCitmdW5jdGlvbiBleGl0SWZOZWNlc3Nhcnko
KQoreworICAgIGRlYnVnKCd3aW5kb3cuaW50ZXJucyBub3QgaW1wbGVtZW50ZWQgb24gdGhpcyBw
bGF0Zm9ybSBvciBnZXN0dXJlIGV2ZW50IHNjcm9sbGluZyBpcyBicm9rZW4nKTsKKyAgICBzdWNj
ZXNzZnVsbHlQYXJzZWQgPSB0cnVlOworICAgIGlzU3VjY2Vzc2Z1bGx5UGFyc2VkKCk7CisgICAg
aWYgKHdpbmRvdy5sYXlvdXRUZXN0Q29udHJvbGxlcikKKyAgICAgICAgbGF5b3V0VGVzdENvbnRy
b2xsZXIubm90aWZ5RG9uZSgpOworfQorCitpZiAod2luZG93LmxheW91dFRlc3RDb250cm9sbGVy
KQorICAgIGxheW91dFRlc3RDb250cm9sbGVyLndhaXRVbnRpbERvbmUoKTsKKworZnVuY3Rpb24g
Y2hlY2tUZXN0RGVwZW5kZW5jaWVzKCkKK3sKKyAgICByZXR1cm4gd2luZG93LmV2ZW50U2VuZGVy
ICYmIHdpbmRvdy5pbnRlcm5hbHMgJiYgd2luZG93LmludGVybmFscy5zZW5kU2Nyb2xsQmVnaW5H
ZXN0dXJlRXZlbnQgJiYgd2luZG93LmludGVybmFscy5zZW5kU2Nyb2xsVXBkYXRlR2VzdHVyZUV2
ZW50ICYmIHdpbmRvdy5pbnRlcm5hbHMuc2VuZFNjcm9sbEVuZEdlc3R1cmVFdmVudDsKK30KKwor
ZnVuY3Rpb24gcnVuVGVzdCgpCit7CisgICAgdG91Y2h0YXJnZXQgPSBkb2N1bWVudC5nZXRFbGVt
ZW50QnlJZCgndG91Y2h0YXJnZXQnKTsKKyAgICBpZiAod2luZG93LmV2ZW50U2VuZGVyKSB7Cisg
ICAgICAgIGRlc2NyaXB0aW9uKCdUaGlzIHRlc3RzIGdlc3R1cmUgZXZlbnQgc2Nyb2xsaW5nIGlu
IGlmcmFtZXMuICcgKworICAgICAgICAgICAgJ1JlZC1ncmVlbiBzdHJpcCBpcyBzY3JvbGxlZCBv
biBwYXNzLicpOworICAgICAgICBpZiAoY2hlY2tUZXN0RGVwZW5kZW5jaWVzKCkpCisgICAgICAg
ICAgICBmaXJzdFRvdWNoRHJhZ1NlcXVlbmNlKCk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAg
IGV4aXRJZk5lY2Vzc2FyeSgpOworICAgIH0gZWxzZSB7CisgICAgICAgIGRlYnVnKCJUaGlzIHRl
c3QgcmVxdWlyZXMgRHVtcFJlbmRlclRyZWUgYW5kIHdpbmRvdy5pbnRlcm5hbHMuICBUb3VjaC1z
Y3JvbGwgdGhlIHJlZC9ncmVlbiBzdHJpcC4iKTsKKyAgICB9Cit9Cis8L3NjcmlwdD4KKzwvYm9k
eT4KKzwvaHRtbD4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2Zhc3QvZXZlbnRzL3RvdWNoL2dl
c3R1cmUvdG91Y2gtZ2VzdHVyZS1zY3JvbGwtcGFnZS1leHBlY3RlZC50eHQgYi9MYXlvdXRUZXN0
cy9mYXN0L2V2ZW50cy90b3VjaC9nZXN0dXJlL3RvdWNoLWdlc3R1cmUtc2Nyb2xsLXBhZ2UtZXhw
ZWN0ZWQudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAuLjIzNTFlNGQxY2RlNzMyZDJjZTdjZjI0MzExMGZhYzBmNTFj
M2U3M2EKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9mYXN0L2V2ZW50cy90b3VjaC9n
ZXN0dXJlL3RvdWNoLWdlc3R1cmUtc2Nyb2xsLXBhZ2UtZXhwZWN0ZWQudHh0CkBAIC0wLDAgKzEs
MTcgQEAKK1RoaXMgdGVzdHMgc2Nyb2xsIGdlc3R1cmUgZXZlbnQgc2Nyb2xsaW5nIG9uIGEgd2hv
bGUgcGFnZS4KKworT24gc3VjY2VzcywgeW91IHdpbGwgc2VlIGEgc2VyaWVzIG9mICJQQVNTIiBt
ZXNzYWdlcywgZm9sbG93ZWQgYnkgIlRFU1QgQ09NUExFVEUiLgorCisKK2ZpcnN0IGdlc3R1cmUK
K1BBU1MgZG9jdW1lbnQuYm9keS5zY3JvbGxUb3AgaXMgNzAKK1BBU1MgZG9jdW1lbnQuYm9keS5z
Y3JvbGxMZWZ0IGlzIDAKK1BBU1Mgd2luZG93LmludGVybmFscy5yZWNvcmRPZkdlc3R1cmVTY3Jv
bGxFdmVudHMoZG9jdW1lbnQpIGlzIDcKK3NlY29uZCBnZXN0dXJlCitQQVNTIGRvY3VtZW50LmJv
ZHkuc2Nyb2xsVG9wIGlzIDEzMAorUEFTUyBkb2N1bWVudC5ib2R5LnNjcm9sbExlZnQgaXMgMAor
UEFTUyB3aW5kb3cuaW50ZXJuYWxzLnJlY29yZE9mR2VzdHVyZVNjcm9sbEV2ZW50cyhkb2N1bWVu
dCkgaXMgNworUEFTUyBzdWNjZXNzZnVsbHlQYXJzZWQgaXMgdHJ1ZQorCitURVNUIENPTVBMRVRF
CisKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2Zhc3QvZXZlbnRzL3RvdWNoL2dlc3R1cmUvdG91
Y2gtZ2VzdHVyZS1zY3JvbGwtcGFnZS5odG1sIGIvTGF5b3V0VGVzdHMvZmFzdC9ldmVudHMvdG91
Y2gvZ2VzdHVyZS90b3VjaC1nZXN0dXJlLXNjcm9sbC1wYWdlLmh0bWwKbmV3IGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMDVh
YzdkYjU3ODVhNzAwNDUzZjExYTczZjRkNGQyZTU0MWU4OWI0NAotLS0gL2Rldi9udWxsCisrKyBi
L0xheW91dFRlc3RzL2Zhc3QvZXZlbnRzL3RvdWNoL2dlc3R1cmUvdG91Y2gtZ2VzdHVyZS1zY3Jv
bGwtcGFnZS5odG1sCkBAIC0wLDAgKzEsMTU0IEBACis8IURPQ1RZUEUgSFRNTCBQVUJMSUMgIi0v
L0lFVEYvL0RURCBIVE1MLy9FTiI+Cis8aHRtbD4KKzxoZWFkPgorPGxpbmsgcmVsPSJzdHlsZXNo
ZWV0IiBocmVmPSIuLi8uLi8uLi9qcy9yZXNvdXJjZXMvanMtdGVzdC1zdHlsZS5jc3MiPgorPHNj
cmlwdCBzcmM9Ii4uLy4uLy4uL2pzL3Jlc291cmNlcy9qcy10ZXN0LXByZS5qcyI+PC9zY3JpcHQ+
Cis8c3R5bGUgdHlwZT0idGV4dC9jc3MiPgorI2dyZWVuYm94IHsKKyAgd2lkdGg6IDEwMHB4Owor
ICBoZWlnaHQ6IDEwMHB4OworICBiYWNrZ3JvdW5kOiBncmVlbjsKKyAgcGFkZGluZzogMHB4Owor
ICBtYXJnaW46IDBweDsKK30KKyNyZWRib3ggeworICB3aWR0aDogMTAwcHg7CisgIGhlaWdodDog
MTAwcHg7CisgIGJhY2tncm91bmQ6IHJlZDsKKyAgcGFkZGluZzogMHB4OworICBtYXJnaW46IDBw
eDsKK30KKwordGQgeworICBwYWRkaW5nOiAwcHg7Cit9Cis8L3N0eWxlPgorPC9oZWFkPgorPGJv
ZHkgc3R5bGU9Im1hcmdpbjowIiBvbmxvYWQ9InJ1blRlc3QoKTsiPgorCis8dGFibGUgaWQ9InRh
YmxlX3RvX2ZpbGwiPgorICAgIDx0cj48dGQ+PGRpdiBpZD0iZ3JlZW5ib3giPjwvZGl2PjwvdGQ+
PC90cj4KKyAgICA8dHI+PHRkPjxkaXYgaWQ9InJlZGJveCI+PC9kaXY+PC90ZD48L3RyPgorPC90
YWJsZT4KKworPHAgaWQ9ImRlc2NyaXB0aW9uIj48L3A+Cis8ZGl2IGlkPSJjb25zb2xlIj48L2Rp
dj4KKzxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KKwordmFyIGV4cGVjdGVkU2Nyb2xs
c1RvdGFsID0gMjsKK3ZhciBzY3JvbGxzT2NjdXJyZWQgPSAwOwordmFyIHNjcm9sbEFtb3VudFgg
PSBbJzAnLCAnMCddOwordmFyIHNjcm9sbEFtb3VudFkgPSBbJzcwJywgJzEzMCddOwordmFyIGdl
c3R1cmVEaXNwYXRjaFJlY29yZCA9IFsnNycsICc3J107CisKKy8vIEFsd2F5cyBjb25zdHJ1Y3Qg
YSBwYWdlIGxhcmdlciB0aGFuIHRoZSB2ZXJ0aWNhbCBoZWlnaHQgb2YgdGhlIHdpbmRvdy4KK2Z1
bmN0aW9uIGJ1aWxkUGFnZSgpCit7CisgICAgdmFyIHRhYmxlID0gZG9jdW1lbnQuZ2V0RWxlbWVu
dEJ5SWQoJ3RhYmxlX3RvX2ZpbGwnKTsKKyAgICB2YXIgdGFyZ2V0SGVpZ2h0ID0gZG9jdW1lbnQu
Ym9keS5vZmZzZXRIZWlnaHQ7CisgICAgdmFyIGNlbGxQYWlySGVpZ2h0ID0gdGFibGUub2Zmc2V0
SGVpZ2h0OworICAgIHZhciBudW1iZXJPZlJlcHMgPSB0YXJnZXRIZWlnaHQgLyBjZWxsUGFpckhl
aWdodCAqIDI7CisgICAgdmFyIGk7CisgICAgZm9yIChpID0gMDsgaSA8IG51bWJlck9mUmVwczsg
aSsrKSB7CisgICAgICAgIHZhciBwID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKKyAg
ICAgICAgcC5pbm5lckhUTUwgPSAnPHRkPjxkaXYgaWQ9ImdyZWVuYm94Ij48L2Rpdj48L3RkPic7
CisgICAgICAgIHRhYmxlLmFwcGVuZENoaWxkKHApOworICAgICAgICB2YXIgcCA9IGRvY3VtZW50
LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CisgICAgICAgIHAuaW5uZXJIVE1MID0gJzx0ZD48ZGl2IGlk
PSJyZWRib3giPjwvZGl2PjwvdGQ+JzsKKyAgICAgICAgdGFibGUuYXBwZW5kQ2hpbGQocCk7Cisg
ICAgfQorfQorCitmdW5jdGlvbiBjaGVja1Njcm9sbE9mZnNldCgpCit7CisgICAgaWYgKHdpbmRv
dy5ldmVudFNlbmRlcikgeworICAgICAgICBzaG91bGRCZSgnZG9jdW1lbnQuYm9keS5zY3JvbGxU
b3AnLCBzY3JvbGxBbW91bnRZW3Njcm9sbHNPY2N1cnJlZF0pOworICAgICAgICBzaG91bGRCZSgn
ZG9jdW1lbnQuYm9keS5zY3JvbGxMZWZ0Jywgc2Nyb2xsQW1vdW50WFtzY3JvbGxzT2NjdXJyZWRd
KTsKKyAgICAgICAgaWYgKHdpbmRvdy5pbnRlcm5hbHMpIHsKKyAgICAgICAgICAgIHNob3VsZEJl
KCd3aW5kb3cuaW50ZXJuYWxzLnJlY29yZE9mR2VzdHVyZVNjcm9sbEV2ZW50cyhkb2N1bWVudCkn
LCBnZXN0dXJlRGlzcGF0Y2hSZWNvcmRbc2Nyb2xsc09jY3VycmVkXSk7CisgICAgICAgIH0KKyAg
ICAgICAgc2Nyb2xsc09jY3VycmVkKys7CisgICAgfQorCisgICAgaWYgKHNjcm9sbHNPY2N1cnJl
ZCA9PSBleHBlY3RlZFNjcm9sbHNUb3RhbCkgeworICAgICAgICAvLyBJZiB3ZSd2ZSBnb3QgaGVy
ZSwgd2UndmUgcGFzc2VkLgorICAgICAgICBzdWNjZXNzZnVsbHlQYXJzZWQgPSB0cnVlOworICAg
ICAgICBpc1N1Y2Nlc3NmdWxseVBhcnNlZCgpOworICAgICAgICBpZiAod2luZG93LmxheW91dFRl
c3RDb250cm9sbGVyKQorICAgICAgICAgICAgbGF5b3V0VGVzdENvbnRyb2xsZXIubm90aWZ5RG9u
ZSgpOworICAgIH0gZWxzZSB7CisgICAgICAgIHNlY29uZFRvdWNoRHJhZ1NlcXVlbmNlKCk7Cisg
ICAgfQorfQorCitmdW5jdGlvbiBmaW5nZXJVcChldmVudCkKK3sKKyAgICBpZiAoIXdpbmRvdy5s
YXlvdXRUZXN0Q29udHJvbGxlcikKKyAgICAgICAgZGVidWcoJ21vdmVkOiAnICsgZXZlbnQuY3Vy
cmVudFRhcmdldC5zY3JvbGxUb3AgKyAnLCAnICsgZXZlbnQuY3VycmVudFRhcmdldC5zY3JvbGxM
ZWZ0KTsKKyAgICByZXR1cm4gdHJ1ZTsgIC8vIFdhbnQgdGhlIGRlZmF1bHQgYmVoYXZpb3VyLgor
fQorCitmdW5jdGlvbiBmaXJzdFRvdWNoRHJhZ1NlcXVlbmNlKCkKK3sKKyAgICBkZWJ1ZygiZmly
c3QgZ2VzdHVyZSIpOworICAgIHdpbmRvdy5pbnRlcm5hbHMuZW5hYmxlR2VzdHVyZVNjcm9sbEV2
ZW50UmVjb3JkKGRvY3VtZW50KTsKKyAgICB3aW5kb3cuaW50ZXJuYWxzLnNlbmRTY3JvbGxCZWdp
bkdlc3R1cmVFdmVudChkb2N1bWVudCwgMTAsIDcyKTsKKyAgICB3aW5kb3cuaW50ZXJuYWxzLnNl
bmRTY3JvbGxVcGRhdGVHZXN0dXJlRXZlbnQoZG9jdW1lbnQsIDEwLCA3MiwgMCwgLTMwKTsKKyAg
ICB3aW5kb3cuaW50ZXJuYWxzLnNlbmRTY3JvbGxVcGRhdGVHZXN0dXJlRXZlbnQoZG9jdW1lbnQs
IDEwLCAzMiwgMCwgLTQwKTsKKyAgICB3aW5kb3cuaW50ZXJuYWxzLnNlbmRTY3JvbGxFbmRHZXN0
dXJlRXZlbnQoZG9jdW1lbnQsIDEwLCAzMiwgMCwgMCk7CisKKyAgICAvLyBXYWl0IGZvciBsYXlv
dXQuCisgICAgY2hlY2tTY3JvbGxPZmZzZXQoKTsKK30KKworZnVuY3Rpb24gc2Vjb25kVG91Y2hE
cmFnU2VxdWVuY2UoKQoreworICAgIGRlYnVnKCJzZWNvbmQgZ2VzdHVyZSIpOworICAgIHdpbmRv
dy5pbnRlcm5hbHMuZW5hYmxlR2VzdHVyZVNjcm9sbEV2ZW50UmVjb3JkKGRvY3VtZW50KTsKKyAg
ICB3aW5kb3cuaW50ZXJuYWxzLnNlbmRTY3JvbGxCZWdpbkdlc3R1cmVFdmVudChkb2N1bWVudCwg
MTIsIDQwKTsKKyAgICB3aW5kb3cuaW50ZXJuYWxzLnNlbmRTY3JvbGxVcGRhdGVHZXN0dXJlRXZl
bnQoZG9jdW1lbnQsIDEyLCA0MCwgMCwgLTMwKTsKKyAgICB3aW5kb3cuaW50ZXJuYWxzLnNlbmRT
Y3JvbGxVcGRhdGVHZXN0dXJlRXZlbnQoZG9jdW1lbnQsIDEyLCAxMCwgMCwgLTMwKTsKKyAgICB3
aW5kb3cuaW50ZXJuYWxzLnNlbmRTY3JvbGxFbmRHZXN0dXJlRXZlbnQoZG9jdW1lbnQsIDEyLCAx
MCwgMCwgMCk7CisKKyAgICAvLyBXYWl0IGZvciBsYXlvdXQuCisgICAgY2hlY2tTY3JvbGxPZmZz
ZXQoKTsKK30KKworZnVuY3Rpb24gZXhpdElmTmVjZXNzYXJ5KCkKK3sKKyAgICBkZWJ1Zygnd2lu
ZG93LmludGVybmFscyAgbm90IGltcGxlbWVudGVkIG9uIHRoaXMgcGxhdGZvcm0gb3IgZ2VzdHVy
ZSBldmVudCBzY3JvbGxpbmcgb2YgYSBkb2N1bWVudCBpcyBicm9rZW4nKTsKKyAgICBzdWNjZXNz
ZnVsbHlQYXJzZWQgPSB0cnVlOworICAgIGlzU3VjY2Vzc2Z1bGx5UGFyc2VkKCk7CisgICAgaWYg
KHdpbmRvdy5sYXlvdXRUZXN0Q29udHJvbGxlcikKKyAgICAgICAgbGF5b3V0VGVzdENvbnRyb2xs
ZXIubm90aWZ5RG9uZSgpOworfQorCitpZiAod2luZG93LmxheW91dFRlc3RDb250cm9sbGVyKQor
ICAgIGxheW91dFRlc3RDb250cm9sbGVyLndhaXRVbnRpbERvbmUoKTsKKworZnVuY3Rpb24gY2hl
Y2tUZXN0RGVwZW5kZW5jaWVzKCkKK3sKKyAgICByZXR1cm4gd2luZG93LmV2ZW50U2VuZGVyICYm
IHdpbmRvdy5pbnRlcm5hbHMgJiYgd2luZG93LmludGVybmFscy5zZW5kU2Nyb2xsQmVnaW5HZXN0
dXJlRXZlbnQgJiYgd2luZG93LmludGVybmFscy5zZW5kU2Nyb2xsVXBkYXRlR2VzdHVyZUV2ZW50
ICYmIHdpbmRvdy5pbnRlcm5hbHMuc2VuZFNjcm9sbEVuZEdlc3R1cmVFdmVudDsKK30KKworZnVu
Y3Rpb24gcnVuVGVzdCgpCit7CisgICAgYnVpbGRQYWdlKCk7CisKKyAgICBpZiAod2luZG93LmV2
ZW50U2VuZGVyICYmIHdpbmRvdy5pbnRlcm5hbHMpIHsKKyAgICAgICAgZGVzY3JpcHRpb24oJ1Ro
aXMgdGVzdHMgc2Nyb2xsIGdlc3R1cmUgZXZlbnQgc2Nyb2xsaW5nIG9uIGEgd2hvbGUgcGFnZS4n
KTsKKyAgICAgICAgaWYgKGNoZWNrVGVzdERlcGVuZGVuY2llcygpKQorICAgICAgICAgICAgZmly
c3RUb3VjaERyYWdTZXF1ZW5jZSgpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBleGl0SWZO
ZWNlc3NhcnkoKTsKKyAgICB9IGVsc2UgeworICAgICAgICBkZWJ1ZygiVGhpcyB0ZXN0IHJlcXVp
cmVzIER1bXBSZW5kZXJUcmVlIGFuZCB3aW5kb3cuaW50ZXJuYWxzLiAgVG91Y2gtc2Nyb2xsIHRo
ZSBwYWdlIHRvIHZhbGlkYXRlIHRoZSBpbXBsZW1lbnRhdGlvbi4iKTsKKyAgICAgICAgZG9jdW1l
bnQuYWRkRXZlbnRMaXN0ZW5lcigndG91Y2hlbmQnLCBmaW5nZXJVcCwgZmFsc2UpOworICAgIH0K
K30KKzwvc2NyaXB0PgorCisKKworPC9ib2R5PgorPC9odG1sPgpkaWZmIC0tZ2l0IGEvTGF5b3V0
VGVzdHMvZmFzdC9ldmVudHMvdG91Y2gvZ2VzdHVyZS90b3VjaC1nZXN0dXJlLXNjcm9sbC1zaHkt
dGFyZ2V0LWV4cGVjdGVkLnR4dCBiL0xheW91dFRlc3RzL2Zhc3QvZXZlbnRzL3RvdWNoL2dlc3R1
cmUvdG91Y2gtZ2VzdHVyZS1zY3JvbGwtc2h5LXRhcmdldC1leHBlY3RlZC50eHQKbmV3IGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MC4uODllODIyZjQ1YmFkMjM0YmUxMGMwN2Q5YTI2ODI5N2YwNjM5MzdmMAotLS0gL2Rldi9udWxs
CisrKyBiL0xheW91dFRlc3RzL2Zhc3QvZXZlbnRzL3RvdWNoL2dlc3R1cmUvdG91Y2gtZ2VzdHVy
ZS1zY3JvbGwtc2h5LXRhcmdldC1leHBlY3RlZC50eHQKQEAgLTAsMCArMSwxNSBAQAorVGhpcyB0
ZXN0cyBnZXN0dXJlIHNjcm9sbGluZyB0byBhIGRpdiBkZWxldGVkIHdoaWxlIGxhdGNoZWQsIFNx
dWFyZSBpcyAobW9zdGx5KSBncmVlbiBvbiBwYXNzCisKK09uIHN1Y2Nlc3MsIHlvdSB3aWxsIHNl
ZSBhIHNlcmllcyBvZiAiUEFTUyIgbWVzc2FnZXMsIGZvbGxvd2VkIGJ5ICJURVNUIENPTVBMRVRF
Ii4KKworCitmaXJzdCBnZXN0dXJlCitQQVNTIG1vdmluZ2Rpdi5zY3JvbGxUb3AgaXMgNjIKK1BB
U1MgbW92aW5nZGl2LnNjcm9sbExlZnQgaXMgNjMKK1BBU1Mgd2luZG93LmludGVybmFscy5yZWNv
cmRPZkdlc3R1cmVTY3JvbGxFdmVudHMobW92aW5nZGl2KSBpcyAxMworc2Vjb25kIGdlc3R1cmUK
K3JlY2VpdmVkIGVsZW1lbnQgcmVtb3Zpbmcga2V5cHJlc3MKK1BBU1Mgc3VjY2Vzc2Z1bGx5UGFy
c2VkIGlzIHRydWUKKworVEVTVCBDT01QTEVURQorCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9m
YXN0L2V2ZW50cy90b3VjaC9nZXN0dXJlL3RvdWNoLWdlc3R1cmUtc2Nyb2xsLXNoeS10YXJnZXQu
aHRtbCBiL0xheW91dFRlc3RzL2Zhc3QvZXZlbnRzL3RvdWNoL2dlc3R1cmUvdG91Y2gtZ2VzdHVy
ZS1zY3JvbGwtc2h5LXRhcmdldC5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmQ2ZmNhMDgxZTYwMWFjYjExMjFh
NTIyODE0NzU3Y2VlNjIxN2U2NzUKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9mYXN0
L2V2ZW50cy90b3VjaC9nZXN0dXJlL3RvdWNoLWdlc3R1cmUtc2Nyb2xsLXNoeS10YXJnZXQuaHRt
bApAQCAtMCwwICsxLDE5MyBAQAorPCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9JRVRGLy9EVEQg
SFRNTC8vRU4iPgorPGh0bWw+Cis8aGVhZD4KKzxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0i
Li4vLi4vLi4vanMvcmVzb3VyY2VzL2pzLXRlc3Qtc3R5bGUuY3NzIj4KKzxzY3JpcHQgc3JjPSIu
Li8uLi8uLi9qcy9yZXNvdXJjZXMvanMtdGVzdC1wcmUuanMiPjwvc2NyaXB0PgorPHNjcmlwdCBz
cmM9Ii4uLy4uLy4uL2pzL3Jlc291cmNlcy9qcy10ZXN0LXBvc3QtZnVuY3Rpb24uanMiPjwvc2Ny
aXB0PgorPHN0eWxlIHR5cGU9InRleHQvY3NzIj4KKyN0b3VjaHRhcmdldCB7CisgIHdpZHRoOiAx
MDBweDsKKyAgaGVpZ2h0OiAxMDBweDsKKyAgcG9zaXRpb246IGFic29sdXRlOworICBiYWNrZ3Jv
dW5kOiB3aGl0ZTsKKyAgdG9wOiAxMDBweDsKKyAgbGVmdDogMTAwcHg7Cit9CisKKyNtb3Zpbmdi
b3ggeworICB3aWR0aDogMTAwJTsKKyAgaGVpZ2h0OiAxMDAlOworICBwb3NpdGlvbjogYWJzb2x1
dGU7CisgIHdvcmQtd3JhcDogYnJlYWstd29yZDsKKyAgb3ZlcmZsb3cteTogc2Nyb2xsOworICBv
dmVyZmxvdy14OiBzY3JvbGw7CisgIGRpc3BsYXk6IGJsb2NrOworfQorCisuZ3JlZW5ib3ggewor
ICB3aWR0aDogMTAwcHg7CisgIGhlaWdodDogMTAwcHg7CisgIGJhY2tncm91bmQ6IGdyZWVuOwor
ICBwYWRkaW5nOiAwcHg7CisgIG1hcmdpbjogMHB4OworfQorCisucmVkYm94IHsKKyAgd2lkdGg6
IDEwMHB4OworICBoZWlnaHQ6IDEwMHB4OworICBiYWNrZ3JvdW5kOiByZWQ7CisgIHBhZGRpbmc6
IDBweDsKKyAgbWFyZ2luOiAwcHg7Cit9CisKK3RkIHsKKyAgcGFkZGluZzogMHB4OworfQorPC9z
dHlsZT4KKzwvaGVhZD4KKzxib2R5IHN0eWxlPSJtYXJnaW46MCIgb25sb2FkPSJydW5UZXN0KCk7
Ij4KKzxkaXYgaWQ9InRvdWNodGFyZ2V0Ij4KKyAgPGRpdiBpZD0ibW92aW5nYm94Ij4KKyAgICA8
dGFibGUgYm9yZGVyPSIwIiBjZWxsc3BhY2luZz0iMHB4IiBpZD0idGFibGUiPgorICAgICAgPHRy
PgorICAgICAgICA8dGQ+PGRpdiBjbGFzcz0icmVkYm94IiBpZD0icmVkYm94Ij48L2Rpdj48L3Rk
PgorICAgICAgICA8dGQ+PGRpdiBjbGFzcz0iZ3JlZW5ib3giIGlkPSJncmVlbmJveF8xIj48L2Rp
dj48L3RkPgorICAgICAgPC90cj4KKyAgICAgIDx0cj4KKyAgICAgICAgPHRkPjxkaXYgY2xhc3M9
ImdyZWVuYm94IiBpZD0iZ3JlZW5ib3hfMiI+PC9kaXY+PC90ZD4KKyAgICAgICAgPHRkPjxkaXYg
Y2xhc3M9ImdyZWVuYm94IiBpZD0iZ3JlZW5ib3hfMyI+PC9kaXY+PC90ZD4KKyAgICAgIDwvdHI+
CisgICAgPC90YWJsZT4KKyAgPC9kaXY+Cis8L2Rpdj4KKworPHAgaWQ9ImRlc2NyaXB0aW9uIj48
L3A+Cis8ZGl2IGlkPSJjb25zb2xlIj48L2Rpdj4KKzxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2Ny
aXB0Ij4KKwordmFyIG1vdmluZ2RpdjsKK3ZhciBleHBlY3RlZFNjcm9sbHNUb3RhbCA9IDI7Cit2
YXIgc2Nyb2xsc09jY3VycmVkID0gMDsKK3ZhciBzY3JvbGxBbW91bnRYID0gWyc2MycsICc5MCdd
OwordmFyIHNjcm9sbEFtb3VudFkgPSBbJzYyJywgJzk1J107Cit2YXIgZ2VzdHVyZURpc3BhdGNo
UmVjb3JkID0gWycxMycsICcxMyddOworCitkb2N1bWVudC5vbmtleXByZXNzID0gZnVuY3Rpb24o
KQoreworICAgIGRlYnVnKCdyZWNlaXZlZCBlbGVtZW50IHJlbW92aW5nIGtleXByZXNzJyk7Cisg
ICAgdmFyIHBhcmVudCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b3VjaHRhcmdldCcpOwor
ICAgIG1vdmluZ2RpdiA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdtb3Zpbmdib3gnKTsKKyAg
ICBwYXJlbnQucmVtb3ZlQ2hpbGQobW92aW5nZGl2KTsKKyAgICByZXR1cm4gZmFsc2U7Cit9CisK
K2Z1bmN0aW9uIGxvZ0ZpcnN0VG91Y2hQb2ludChldmVudCkKK3sKKyAgICBkZWJ1ZygnY2xpZW50
IGlkJyArIGV2ZW50LnRhcmdldC5pZCk7CisgICAgZGVidWcoJ2NsaWVudFg6ICcgKyBldmVudC50
b3VjaGVzWzBdLmNsaWVudFggKyAnIGNsaWVudFk6ICcgKyBldmVudC50b3VjaGVzWzBdLmNsaWVu
dFkpOworfQorCitmdW5jdGlvbiBjaGVja1Njcm9sbE9mZnNldCgpCit7CisgICAgbW92aW5nZGl2
ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ21vdmluZ2JveCcpOworICAgIGlmICh3aW5kb3cu
ZXZlbnRTZW5kZXIpIHsKKyAgICAgICAgc2hvdWxkQmUoJ21vdmluZ2Rpdi5zY3JvbGxUb3AnLCBz
Y3JvbGxBbW91bnRZW3Njcm9sbHNPY2N1cnJlZF0pOworICAgICAgICBzaG91bGRCZSgnbW92aW5n
ZGl2LnNjcm9sbExlZnQnLCBzY3JvbGxBbW91bnRYW3Njcm9sbHNPY2N1cnJlZF0pOworICAgICAg
ICBpZiAod2luZG93LmludGVybmFscykgeworICAgICAgICAgICAgc2hvdWxkQmUoJ3dpbmRvdy5p
bnRlcm5hbHMucmVjb3JkT2ZHZXN0dXJlU2Nyb2xsRXZlbnRzKG1vdmluZ2RpdiknLCBnZXN0dXJl
RGlzcGF0Y2hSZWNvcmRbc2Nyb2xsc09jY3VycmVkXSk7CisgICAgICAgIH0KKyAgICAgICAgc2Ny
b2xsc09jY3VycmVkKys7CisgICAgfQorCisgICAgaWYgKHNjcm9sbHNPY2N1cnJlZCA9PSBleHBl
Y3RlZFNjcm9sbHNUb3RhbCkgeworICAgICAgICAvLyBJZiB3ZSd2ZSBnb3QgaGVyZSwgd2UndmUg
cGFzc2VkLgorICAgIH0gZWxzZSB7CisgICAgICAgIHNlY29uZFRvdWNoRHJhZ1NlcXVlbmNlKCk7
CisgICAgfQorfQorCitmdW5jdGlvbiBmaW5nZXJVcChldmVudCkKK3sKKyAgICBpZiAoIXdpbmRv
dy5sYXlvdXRUZXN0Q29udHJvbGxlcikgeworICAgICAgICBkZWJ1ZygnbW92ZWQ6ICcgKyBldmVu
dC5jdXJyZW50VGFyZ2V0LnNjcm9sbFRvcCArICcsICcgKyBldmVudC5jdXJyZW50VGFyZ2V0LnNj
cm9sbExlZnQpOworICAgICAgICBkZWJ1ZygndGFyZ2V0OiAnICsgZXZlbnQuY3VycmVudFRhcmdl
dC5pZCk7CisgICAgfQorICAgIHJldHVybiB0cnVlOyAgLy8gV2FudCB0aGUgZGVmYXVsdCBiZWhh
dmlvdXIuCit9CisKK2Z1bmN0aW9uIGZpcnN0VG91Y2hEcmFnU2VxdWVuY2UoKQoreworICAgIGRl
YnVnKCJmaXJzdCBnZXN0dXJlIik7CisgICAgbW92aW5nZGl2ID0gZG9jdW1lbnQuZ2V0RWxlbWVu
dEJ5SWQoJ21vdmluZ2JveCcpOworICAgIHdpbmRvdy5pbnRlcm5hbHMuZW5hYmxlR2VzdHVyZVNj
cm9sbEV2ZW50UmVjb3JkKG1vdmluZ2Rpdik7CisKKyAgICB3aW5kb3cuaW50ZXJuYWxzLnNlbmRT
Y3JvbGxCZWdpbkdlc3R1cmVFdmVudChkb2N1bWVudCwgMTAxLCAxMDEpOworICAgIHdpbmRvdy5p
bnRlcm5hbHMuc2VuZFNjcm9sbFVwZGF0ZUdlc3R1cmVFdmVudChkb2N1bWVudCwgMTAxLCAxMDEs
IC0yMCwgLTI4KTsKKyAgICB3aW5kb3cuaW50ZXJuYWxzLnNlbmRTY3JvbGxVcGRhdGVHZXN0dXJl
RXZlbnQoZG9jdW1lbnQsIDg3LCA5NywgLTE0LCAtNCk7CisgICAgd2luZG93LmludGVybmFscy5z
ZW5kU2Nyb2xsVXBkYXRlR2VzdHVyZUV2ZW50KGRvY3VtZW50LCA1OCwgNjcsIC0yOSwgLTMwKTsK
KyAgICB3aW5kb3cuaW50ZXJuYWxzLnNlbmRTY3JvbGxFbmRHZXN0dXJlRXZlbnQoZG9jdW1lbnQs
IDU4LCA2NywgMCwgMCk7CisKKyAgICAvLyBXYWl0IGZvciBsYXlvdXQuCisgICAgY2hlY2tTY3Jv
bGxPZmZzZXQoKTsKK30KKworZnVuY3Rpb24gc2Vjb25kVG91Y2hEcmFnU2VxdWVuY2UoKQorewor
ICAgIG1vdmluZ2Rpdi5zY3JvbGxUb3AgPSAwOworICAgIG1vdmluZ2Rpdi5zY3JvbGxMZWZ0ID0g
MDsKKworICAgIGRlYnVnKCJzZWNvbmQgZ2VzdHVyZSIpOworICAgIHdpbmRvdy5pbnRlcm5hbHMu
c2VuZFNjcm9sbEJlZ2luR2VzdHVyZUV2ZW50KGRvY3VtZW50LCAxMDEsIDEwMSk7CisgICAgd2lu
ZG93LmludGVybmFscy5zZW5kU2Nyb2xsVXBkYXRlR2VzdHVyZUV2ZW50KGRvY3VtZW50LCAxMDEs
IDEwMSwgLTIwLCAtMjgpOworICAgIHdpbmRvdy5pbnRlcm5hbHMuc2VuZFNjcm9sbFVwZGF0ZUdl
c3R1cmVFdmVudChkb2N1bWVudCwgODcsIDk3LCAtMTQsIC00KTsKKworICAgIC8vIFNlbmQgYSBr
ZXkgdG8gZGVsZXRlIHRoZSB0YXJnZXQgRWxlbWVudC4KKyAgICBldmVudFNlbmRlci5rZXlEb3du
KCJkIiwgW10pOworICAgIAorICAgIHdpbmRvdy5pbnRlcm5hbHMuc2VuZFNjcm9sbFVwZGF0ZUdl
c3R1cmVFdmVudChkb2N1bWVudCwgNTgsIDY3LCAtMjksIC0zMCk7CisgICAgd2luZG93LmludGVy
bmFscy5zZW5kU2Nyb2xsRW5kR2VzdHVyZUV2ZW50KGRvY3VtZW50LCA1OCwgNjcsIDAsIDApOwor
CisgICAgLy8gQnkgZ2V0dGluZyBoZXJlIHN1Y2Nlc3NmdWxseSwgdGhlIHRlc3QgZGVtb25zdHJh
dGVzIHRoYXQgdGhlIGltcGxlbWVudGF0aW9uCisgICAgLy8gZG9lcyBub3QgY3Jhc2ggd2hlbiB0
aGUgbGF0Y2hlZCBFbGVtZW50IGlzIHJlbW92ZWQgZnJvbSB0aGUgRE9NLgorICAgIHN1Y2Nlc3Nm
dWxseVBhcnNlZCA9IHRydWU7CisgICAgaXNTdWNjZXNzZnVsbHlQYXJzZWQoKTsKKyAgICBpZiAo
d2luZG93LmxheW91dFRlc3RDb250cm9sbGVyKQorICAgICAgICBsYXlvdXRUZXN0Q29udHJvbGxl
ci5ub3RpZnlEb25lKCk7Cit9CisKK2Z1bmN0aW9uIGV4aXRJZk5lY2Vzc2FyeSgpCit7CisgICAg
ZGVidWcoJ3dpbmRvdy5pbnRlcm5hbHMgbm90IGltcGxlbWVudGVkIG9uIHRoaXMgcGxhdGZvcm0g
b3IgZ2VzdHVyZSBzY3JvbGwgaGFuZGxpbmcgYnJva2VuJyk7CisgICAgc3VjY2Vzc2Z1bGx5UGFy
c2VkID0gdHJ1ZTsKKyAgICBpc1N1Y2Nlc3NmdWxseVBhcnNlZCgpOworICAgIGlmICh3aW5kb3cu
bGF5b3V0VGVzdENvbnRyb2xsZXIpCisgICAgICAgIGxheW91dFRlc3RDb250cm9sbGVyLm5vdGlm
eURvbmUoKTsKK30KKworaWYgKHdpbmRvdy5sYXlvdXRUZXN0Q29udHJvbGxlcikKKyAgICBsYXlv
dXRUZXN0Q29udHJvbGxlci53YWl0VW50aWxEb25lKCk7CisKK2Z1bmN0aW9uIGNoZWNrVGVzdERl
cGVuZGVuY2llcygpCit7CisgICAgcmV0dXJuIHdpbmRvdy5ldmVudFNlbmRlciAmJiB3aW5kb3cu
aW50ZXJuYWxzICYmIHdpbmRvdy5pbnRlcm5hbHMuc2VuZFNjcm9sbEJlZ2luR2VzdHVyZUV2ZW50
ICYmIHdpbmRvdy5pbnRlcm5hbHMuc2VuZFNjcm9sbFVwZGF0ZUdlc3R1cmVFdmVudCAmJiB3aW5k
b3cuaW50ZXJuYWxzLnNlbmRTY3JvbGxFbmRHZXN0dXJlRXZlbnQ7Cit9CisKK2Z1bmN0aW9uIHJ1
blRlc3QoKQoreworICAgIGlmICh3aW5kb3cuZXZlbnRTZW5kZXIpIHsKKyAgICAgICAgZGVzY3Jp
cHRpb24oJ1RoaXMgdGVzdHMgZ2VzdHVyZSBzY3JvbGxpbmcgdG8gYSBkaXYgZGVsZXRlZCB3aGls
ZSBsYXRjaGVkLCAnICsgCisgICAgICAgICAgICAnU3F1YXJlIGlzIChtb3N0bHkpIGdyZWVuIG9u
IHBhc3MnKTsKKyAgICAgICAgaWYgKGNoZWNrVGVzdERlcGVuZGVuY2llcygpKQorICAgICAgICAg
ICAgZmlyc3RUb3VjaERyYWdTZXF1ZW5jZSgpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBl
eGl0SWZOZWNlc3NhcnkoKTsKKyAgICB9IGVsc2UgeworICAgICAgICBkb2N1bWVudC5hZGRFdmVu
dExpc3RlbmVyKCd0b3VjaHN0YXJ0JywgbG9nRmlyc3RUb3VjaFBvaW50KTsKKyAgICAgICAgZG9j
dW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigndG91Y2htb3ZlJywgbG9nRmlyc3RUb3VjaFBvaW50KTsK
KyAgICAgICAgZGVidWcoIlRoaXMgdGVzdCByZXF1aXJlcyBEdW1wUmVuZGVyVHJlZSBhbmQgd2lu
ZG93LmludGVybmFscy4gIFRvdWNoLXNjcm9sbCB0aGUgcmVkIHJlY3QgdG8gbG9nLiIpOworICAg
ICAgICBtb3ZpbmdkaXYuYWRkRXZlbnRMaXN0ZW5lcigndG91Y2hlbmQnLCBmaW5nZXJVcCwgZmFs
c2UpOworICAgIH0KK30KKzwvc2NyaXB0PgorPC9ib2R5PgorPC9odG1sPgpkaWZmIC0tZ2l0IGEv
TGF5b3V0VGVzdHMvZmFzdC9ldmVudHMvdG91Y2gvcmVzb3VyY2VzL3Njcm9sbC1pbnNpZGUtaWZy
YW1lLmh0bWwgYi9MYXlvdXRUZXN0cy9mYXN0L2V2ZW50cy90b3VjaC9yZXNvdXJjZXMvc2Nyb2xs
LWluc2lkZS1pZnJhbWUuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi45NGY3ODg3N2M1MmJhNTc2YjRjNTExODAw
ZjQxNGI4NGQwNDM3ZDljCi0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvZmFzdC9ldmVu
dHMvdG91Y2gvcmVzb3VyY2VzL3Njcm9sbC1pbnNpZGUtaWZyYW1lLmh0bWwKQEAgLTAsMCArMSwz
NCBAQAorPGh0bWw+Cis8aGVhZD4KKzxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+CisjZ3JlZW5ib3gg
eworICB3aWR0aDogMTAwcHg7CisgIGhlaWdodDogMTAwcHg7CisgIGJhY2tncm91bmQ6IGdyZWVu
OworICBwYWRkaW5nOiAwcHg7CisgIG1hcmdpbjogMHB4O2EKK30KKyNyZWRib3ggeworICB3aWR0
aDogMTAwcHg7CisgIGhlaWdodDogMTAwcHg7CisgIGJhY2tncm91bmQ6IHJlZDsKKyAgcGFkZGlu
ZzogMHB4OworICBtYXJnaW46IDBweDsKK30KKwordGQgeworICBwYWRkaW5nOiAwcHg7Cit9Cis8
L3N0eWxlPgorPC9oZWFkPgorPGJvZHkgc3R5bGU9Im1hcmdpbjowIiBvbmxvYWQ9InBhcmVudC5y
dW5UZXN0KCkiPgorCis8dGFibGUgaWQ9InRhYmxlX3RvX2ZpbGwiPgorICAgIDx0cj48dGQ+PGRp
diBpZD0iZ3JlZW5ib3giPjwvZGl2PjwvdGQ+PC90cj4KKyAgICA8dHI+PHRkPjxkaXYgaWQ9InJl
ZGJveCI+PC9kaXY+PC90ZD48L3RyPgorICAgIDx0cj48dGQ+PGRpdiBpZD0iZ3JlZW5ib3giPjwv
ZGl2PjwvdGQ+PC90cj4KKyAgICA8dHI+PHRkPjxkaXYgaWQ9InJlZGJveCI+PC9kaXY+PC90ZD48
L3RyPgorPC90YWJsZT4KKzxib2R5PgorPC9odG1sPgorCg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>129738</attachid>
            <date>2012-03-01 13:26:50 -0800</date>
            <delta_ts>2012-03-01 14:21:57 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-67822-20120301162648.patch</filename>
            <type>text/plain</type>
            <size>81509</size>
            <attacher name="Robert Kroeger">rjkroege</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTA5MzAzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNmJjMWIzZmZmMjZjZTY2
ZjM1YTA0YzgyNThiZThlMzZjMWQyYWM3OS4uMmM1ODZmZGY2MWIxM2UwYzNmMWEzZjhmNjc4Y2M1
N2JjNTFiZjc3ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDExNyBAQAorMjAxMi0wMy0wMSAgUm9i
ZXJ0IEtyb2VnZXIgIDxyamtyb2VnZUBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgUGxhdGZvcm1H
ZXN0dXJlRXZlbnQ6OmhhbmRsZUdlc3R1cmVFdmVudCBzaG91bGQgaGl0IHRlc3Qgd2hpbGUgZGlz
cGF0Y2hpbmcgUGxhdGZvcm1FdmVudDo6R2VzdHVyZVNjcm9sbCogZXZlbnRzLgorICAgICAgICBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9Njc4MjIKKyAgICAgICAgCisg
ICAgICAgIFBsYXRmb3JtRXZlbnQgR2VzdHVyZSBTY3JvbGwqVHlwZSBldmVudCBzZXF1ZW5jZXMg
c2hvdWxkIGFsbAorICAgICAgICBnbyB0byB0aGUgdGFyZ2V0IChub2RlLCBwYWdlLCB3aWRnZXQp
IHNwZWNpZmllZCBieSB0aGUgc3RhcnRpbmcKKyAgICAgICAgR2VzdHVyZVNjcm9sbEJlZ2luIGV2
ZW50LiBUaGlzIGNoYW5nZSBwbHVtYnMgR2VzdHVyZVNjcm9sbFVwZGF0ZQorICAgICAgICBpbnN0
YW5jZXMgdGhyb3VnaCB0aGUgZXhpc3Rpbmcgc2Nyb2xsIGNvZGUgc2ltaWxhciB0byBob3cgV2hl
ZWwKKyAgICAgICAgZXZlbnRzICBhcmUgZGVsaXZlcmVkIGFuZCBhZGRzIHRoZSBuZWNlc3Nhcnkg
Y29kZSB0byBwbHVtYgorICAgICAgICBHZXN0dXJlU2Nyb2xsQmVnaW4gYW5kIEdlc3R1cmVTY3Jv
bGxCZWdpbiBpbnN0YW5jZXMgdGhyb3VnaCB0bworICAgICAgICB0aGUgZXhpc3RpbmcgU2Nyb2xs
YWJsZUFyZWE6OmhhbmRsZUdlc3R1cmVFdmVudCBtZXRob2QuCisKKyAgICAgICAgUmV2aWV3ZWQg
YnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVGVzdHM6IGZhc3QvZXZlbnRzL3RvdWNoL2dl
c3R1cmUvdG91Y2gtZ2VzdHVyZS1zY3JvbGwtZGl2Lmh0bWwKKyAgICAgICAgICAgICAgIGZhc3Qv
ZXZlbnRzL3RvdWNoL2dlc3R1cmUvdG91Y2gtZ2VzdHVyZS1zY3JvbGwtaWZyYW1lLmh0bWwKKyAg
ICAgICAgICAgICAgIGZhc3QvZXZlbnRzL3RvdWNoL2dlc3R1cmUvdG91Y2gtZ2VzdHVyZS1zY3Jv
bGwtcGFnZS5odG1sCisgICAgICAgICAgICAgICBmYXN0L2V2ZW50cy90b3VjaC9nZXN0dXJlL3Rv
dWNoLWdlc3R1cmUtc2Nyb2xsLXNoeS10YXJnZXQuaHRtbAorCisgICAgICAgICogR05VbWFrZWZp
bGUubGlzdC5hbToKKyAgICAgICAgKiBUYXJnZXQucHJpOgorICAgICAgICAqIFdlYkNvcmUuZ3lw
aToKKyAgICAgICAgKiBXZWJDb3JlLnZjcHJvai9XZWJDb3JlLnZjcHJvajoKKyAgICAgICAgKiBX
ZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICogcGFnZS9FdmVudEhh
bmRsZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6d2hlZWxHcmFudWxhcml0eVRvU2Nyb2xsR3Jh
bnVsYXJpdHkpOgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChXZWJDb3JlOjpzY3JvbGxO
b2RlKToKKyAgICAgICAgKFdlYkNvcmU6Omdlc3R1cmVOb2RlKToKKyAgICAgICAgKFdlYkNvcmU6
OkV2ZW50SGFuZGxlcjo6Y2xlYXIpOiBSZWZhY3RvcmluZy4KKyAgICAgICAgKFdlYkNvcmU6OkV2
ZW50SGFuZGxlcjo6ZGV0ZWN0QW5kUGFzc0dlc3R1cmVFdmVudFRvV2lkZ2V0KTogSGVscGVyLgor
ICAgICAgICAoV2ViQ29yZTo6RXZlbnRIYW5kbGVyOjpwYXNzR2VzdHVyZUV2ZW50VG9GcmFtZVZp
ZXcpOiBIZWxwZXIuCisgICAgICAgIChXZWJDb3JlOjpFdmVudEhhbmRsZXI6OmhhbmRsZUdlc3R1
cmVTY3JvbGxDb3JlKTogSGVscGVyLgorICAgICAgICAoV2ViQ29yZTo6RXZlbnRIYW5kbGVyOjpo
YW5kbGVHZXN0dXJlRXZlbnQpOiBNb2RpZmllZCBhcyBkZXNjcmliZWQgYWJvdmUuCisgICAgICAg
IChXZWJDb3JlOjpFdmVudEhhbmRsZXI6OmhhbmRsZUdlc3R1cmVTY3JvbGxVcGRhdGUpOiBVcGRh
dGVkIGVudHJ5IHBvaW50LgorICAgICAgICAqIHBhZ2UvRXZlbnRIYW5kbGVyLmg6CisgICAgICAg
IChFdmVudEhhbmRsZXIpOgorICAgICAgICAqIHBhZ2UvRnJhbWVWaWV3Lmg6CisgICAgICAgIChG
cmFtZVZpZXcpOgorICAgICAgICAqIHBhZ2UvY2hyb21pdW0vRXZlbnRIYW5kbGVyQ2hyb21pdW0u
Y3BwOgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChXZWJDb3JlOjpFdmVudEhhbmRsZXI6
OnBhc3NHZXN0dXJlRXZlbnRUb1dpZGdldCk6CisgICAgICAgICogcGFnZS9lZmwvRXZlbnRIYW5k
bGVyRWZsLmNwcDoKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoV2ViQ29yZTo6RXZlbnRI
YW5kbGVyOjpwYXNzR2VzdHVyZUV2ZW50VG9XaWRnZXQpOgorICAgICAgICAqIHBhZ2UvZ3RrL0V2
ZW50SGFuZGxlckd0ay5jcHA6CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKFdlYkNvcmU6
OkV2ZW50SGFuZGxlcjo6cGFzc0dlc3R1cmVFdmVudFRvV2lkZ2V0KToKKyAgICAgICAgKiBwYWdl
L21hYy9FdmVudEhhbmRsZXJNYWMubW06CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKFdl
YkNvcmU6OkV2ZW50SGFuZGxlcjo6cGFzc0dlc3R1cmVFdmVudFRvV2lkZ2V0KToKKyAgICAgICAg
KiBwYWdlL3F0L0V2ZW50SGFuZGxlclF0LmNwcDoKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAg
ICAoV2ViQ29yZTo6RXZlbnRIYW5kbGVyOjpwYXNzR2VzdHVyZUV2ZW50VG9XaWRnZXQpOgorICAg
ICAgICAqIHBhZ2Uvd2luL0V2ZW50SGFuZGxlcldpbi5jcHA6CisgICAgICAgIChXZWJDb3JlKToK
KyAgICAgICAgKFdlYkNvcmU6OkV2ZW50SGFuZGxlcjo6cGFzc0dlc3R1cmVFdmVudFRvV2lkZ2V0
KToKKyAgICAgICAgKiBwYWdlL3d4L0V2ZW50SGFuZGxlcld4LmNwcDoKKyAgICAgICAgKFdlYkNv
cmUpOgorICAgICAgICAoV2ViQ29yZTo6RXZlbnRIYW5kbGVyOjpwYXNzR2VzdHVyZUV2ZW50VG9X
aWRnZXQpOgorICAgICAgICAqIHBsYXRmb3JtL1Njcm9sbEFuaW1hdG9yLmNwcDoKKyAgICAgICAg
KFdlYkNvcmUpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsQW5pbWF0b3I6OmhhbmRsZUdlc3R1
cmVFdmVudCk6CisgICAgICAgICogcGxhdGZvcm0vU2Nyb2xsQW5pbWF0b3IuaDoKKyAgICAgICAg
KFdlYkNvcmU6OlNjcm9sbEFuaW1hdG9yOjppc1JlY29yZGluZ0ludGVycG9zZXIpOgorICAgICAg
ICAoU2Nyb2xsQW5pbWF0b3IpOgorICAgICAgICAqIHBsYXRmb3JtL1Njcm9sbEFuaW1hdG9yTm9u
ZS5jcHA6CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbEFuaW1h
dG9yTm9uZTo6aGFuZGxlR2VzdHVyZUV2ZW50KTogQWRkZWQ6IGludGVybmFscy1vbmx5IG1ldGhv
ZCBmb3IgcHJvdmluZyB0aGF0IGFsbCBnZXN0dXJlIGV2ZW50cyBhcnJpdmUgYXQgdGhlIGNvcnJl
Y3QgKGkuZS4gc2FtZSkgaW5zdGFuY2UuCisgICAgICAgICogcGxhdGZvcm0vU2Nyb2xsQW5pbWF0
b3JUZXN0UmVjb3JkLmNwcDogQWRkZWQuIFNjcm9sbEFuaW1hdG9yIGltcGxlbWVudGF0aW9uIHVz
ZWQgb25seSB0byB0ZXN0LgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChXZWJDb3JlOjpT
Y3JvbGxBbmltYXRvclRlc3RSZWNvcmQ6OlNjcm9sbEFuaW1hdG9yVGVzdFJlY29yZCk6CisgICAg
ICAgIChXZWJDb3JlOjpTY3JvbGxBbmltYXRvclRlc3RSZWNvcmQ6OmNyZWF0ZSk6CisgICAgICAg
IChXZWJDb3JlOjpTY3JvbGxBbmltYXRvclRlc3RSZWNvcmQ6On5TY3JvbGxBbmltYXRvclRlc3RS
ZWNvcmQpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsQW5pbWF0b3JUZXN0UmVjb3JkOjpzY3Jv
bGwpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsQW5pbWF0b3JUZXN0UmVjb3JkOjpoYW5kbGVH
ZXN0dXJlRXZlbnQpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsQW5pbWF0b3JUZXN0UmVjb3Jk
OjpyZWNvcmRHZXN0dXJlRXZlbnRQcm9jZXNzaW5nKToKKyAgICAgICAgKiBwbGF0Zm9ybS9TY3Jv
bGxBbmltYXRvclRlc3RSZWNvcmQuaDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlKToKKyAgICAg
ICAgKFNjcm9sbEFuaW1hdG9yVGVzdFJlY29yZCk6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxB
bmltYXRvclRlc3RSZWNvcmQ6Om9yaWdpbmFsU2Nyb2xsQW5pbWF0b3IpOgorICAgICAgICAoV2Vi
Q29yZTo6U2Nyb2xsQW5pbWF0b3JUZXN0UmVjb3JkOjp0ZXN0UmVjb3JkKToKKyAgICAgICAgKFdl
YkNvcmU6OlNjcm9sbEFuaW1hdG9yVGVzdFJlY29yZDo6aXNSZWNvcmRpbmdJbnRlcnBvc2VyKToK
KyAgICAgICAgKiBwbGF0Zm9ybS9TY3JvbGxWaWV3LmNwcDoKKyAgICAgICAgKFdlYkNvcmUpOgor
ICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsVmlldzo6aGFuZGxlR2VzdHVyZUV2ZW50KToKKyAgICAg
ICAgKiBwbGF0Zm9ybS9TY3JvbGxWaWV3Lmg6CisgICAgICAgIChTY3JvbGxWaWV3KToKKyAgICAg
ICAgKiBwbGF0Zm9ybS9TY3JvbGxhYmxlQXJlYS5jcHA6CisgICAgICAgIChXZWJDb3JlKToKKyAg
ICAgICAgKFdlYkNvcmU6OlNjcm9sbGFibGVBcmVhOjpoYW5kbGVHZXN0dXJlRXZlbnQpOgorICAg
ICAgICAoV2ViQ29yZTo6U2Nyb2xsYWJsZUFyZWE6OmVuYWJsZUludGVycG9zZWRTY3JvbGxBbmlt
YXRvcik6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxhYmxlQXJlYTo6cXVlcnlBbmREaXNjYXJk
SW50ZXJwb3NlZEFuaW1hdG9yKToKKyAgICAgICAgKiBwbGF0Zm9ybS9TY3JvbGxhYmxlQXJlYS5o
OgorICAgICAgICAoU2Nyb2xsYWJsZUFyZWEpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJC
b3guY3BwOiBEaXNwYXRjaCBnZXN0dXJlcyBpbiB0aGUgc2FtZSBmYXNoaW9uIGFzIHNjcm9sbC4K
KyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQm94OjpnZXN0dXJl
KTogQWRkZWQ6IHdvcmtzIGFzIFJlbmRlckJveDo6c2Nyb2xsLgorICAgICAgICAqIHJlbmRlcmlu
Zy9SZW5kZXJCb3guaDoKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoUmVuZGVyQm94KToK
KyAgICAgICAgKiB0ZXN0aW5nL0ludGVybmFscy5jcHA6IEFkZGVkIGVudHJ5IHBvaW50cyBmb3Ig
ZGlzcGF0Y2hpbmcgc3ludGhldGljIGdlc3R1cmUgZXZlbnRzLCBlbmFibGluZyB0ZXN0IGhhbmRs
aW5nIGFuZCBkZXRlcm1pbmluZyBpZiBhbGwgcmVxdWlzaXRlIGV2ZW50cyBhcnJpdmVkIGF0IHRo
ZSB0YXJnZXQuCisgICAgICAgIChXZWJDb3JlOjpJbnRlcm5hbHM6OmVuYWJsZUdlc3R1cmVTY3Jv
bGxFdmVudFJlY29yZCk6CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKFdlYkNvcmU6Oklu
dGVybmFsczo6cmVjb3JkT2ZHZXN0dXJlU2Nyb2xsRXZlbnRzKToKKyAgICAgICAgKFdlYkNvcmU6
OnNlbmRHZXN0dXJlRXZlbnQpOgorICAgICAgICAoV2ViQ29yZTo6SW50ZXJuYWxzOjpzZW5kU2Ny
b2xsQmVnaW5HZXN0dXJlRXZlbnQpOgorICAgICAgICAoV2ViQ29yZTo6SW50ZXJuYWxzOjpzZW5k
U2Nyb2xsVXBkYXRlR2VzdHVyZUV2ZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkludGVybmFsczo6
c2VuZFNjcm9sbEVuZEdlc3R1cmVFdmVudCk6CisgICAgICAgICogdGVzdGluZy9JbnRlcm5hbHMu
aDoKKyAgICAgICAgKEludGVybmFscyk6CisgICAgICAgICogdGVzdGluZy9JbnRlcm5hbHMuaWRs
OgorCiAyMDEyLTAyLTI5ICBKYXNvbiBMaXUgIDxqYXNvbi5saXVAdG9yY2htb2JpbGUuY29tLmNu
PgogCiAgICAgICAgIFtCbGFja0JlcnJ5XU1ha2UgYWJvdXQ6Y2FjaGUgZmVhdHVyZSBhdmFpbGFi
bGUgaW4gcmVsZWFzZSB2ZXJzaW9uLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvR05VbWFr
ZWZpbGUubGlzdC5hbSBiL1NvdXJjZS9XZWJDb3JlL0dOVW1ha2VmaWxlLmxpc3QuYW0KaW5kZXgg
N2UxODVkOTE0Y2Y5YzQ3MDY1OWRkYmJmMmY0ODkwMGRhM2ZmNzg2Mi4uNmZjMGFkMzg5NmVmYzY5
MjA4N2RhYjg2YWVjNzBmZjZiZGIyNDMxYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvR05V
bWFrZWZpbGUubGlzdC5hbQorKysgYi9Tb3VyY2UvV2ViQ29yZS9HTlVtYWtlZmlsZS5saXN0LmFt
CkBAIC0zMzI0LDYgKzMzMjQsOCBAQCB3ZWJjb3JlX3NvdXJjZXMgKz0gXAogCVNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL1J1bnRpbWVBcHBsaWNhdGlvbkNoZWNrcy5oIFwKIAlTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9TY2hlbWVSZWdpc3RyeS5jcHAgXAogCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L1NjaGVtZVJlZ2lzdHJ5LmggXAorCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1Njcm9sbEFuaW1h
dG9yVGVzdFJlY29yZC5jcHAgXAorCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1Njcm9sbEFuaW1h
dG9yVGVzdFJlY29yZC5oIFwKIAlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxBbmltYXRv
ci5jcHAgXAogCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1Njcm9sbEFuaW1hdG9yLmggXAogCVNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL1Njcm9sbGFibGVBcmVhLmNwcCBcCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9UYXJnZXQucHJpIGIvU291cmNlL1dlYkNvcmUvVGFyZ2V0LnByaQppbmRl
eCAzZjNiNDU3OGQzMzU4NDFiOTk2OGQ4YmMwMTU0MzZmMmJhZGQ0Zjg0Li4wZmI4YTE1YzIxNzJm
Yzg4ZGI1NzUxMWI2ZjlmMjMxYzMxMTBlYWI3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9U
YXJnZXQucHJpCisrKyBiL1NvdXJjZS9XZWJDb3JlL1RhcmdldC5wcmkKQEAgLTExNTAsNiArMTE1
MCw3IEBAIFNPVVJDRVMgKz0gXAogICAgIHBsYXRmb3JtL1J1bkxvb3AuY3BwIFwKICAgICBwbGF0
Zm9ybS9TY2hlbWVSZWdpc3RyeS5jcHAgXAogICAgIHBsYXRmb3JtL1Njcm9sbGFibGVBcmVhLmNw
cCBcCisgICAgcGxhdGZvcm0vU2Nyb2xsQW5pbWF0b3JUZXN0UmVjb3JkLmNwcCBcCiAgICAgcGxh
dGZvcm0vU2Nyb2xsQW5pbWF0b3IuY3BwIFwKICAgICBwbGF0Zm9ybS9TY3JvbGxiYXIuY3BwIFwK
ICAgICBwbGF0Zm9ybS9TY3JvbGxiYXJUaGVtZS5jcHAgXApAQCAtMjI3Niw2ICsyMjc3LDcgQEAg
SEVBREVSUyArPSBcCiAgICAgcGxhdGZvcm0vcXQvUmVuZGVyVGhlbWVRdC5oIFwKICAgICBwbGF0
Zm9ybS9xdC9SZW5kZXJUaGVtZVF0TW9iaWxlLmggXAogICAgIHBsYXRmb3JtL1Njcm9sbGFibGVB
cmVhLmggXAorICAgIHBsYXRmb3JtL1Njcm9sbEFuaW1hdG9yVGVzdFJlY29yZC5oIFwKICAgICBw
bGF0Zm9ybS9TY3JvbGxBbmltYXRvci5oIFwKICAgICBwbGF0Zm9ybS9TY3JvbGxiYXIuaCBcCiAg
ICAgcGxhdGZvcm0vU2Nyb2xsYmFyVGhlbWVDb21wb3NpdGUuaCBcCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkgYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkKaW5k
ZXggMDA0MTk1Nzk5ZWZkODJiMzNjN2M2NDMwOTQzNWYwNzEyZjVkMmQ5OS4uZDJhZGI0OTFmYjMy
ODczMTRiYmYxNDUzODk2YjExMWFlYzFhOGRmMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
V2ViQ29yZS5neXBpCisrKyBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwaQpAQCAtMjgzMSw2
ICsyODMxLDggQEAKICAgICAgICAgICAgICdwbGF0Zm9ybS9TY3JvbGxBbmltYXRvci5oJywKICAg
ICAgICAgICAgICdwbGF0Zm9ybS9TY3JvbGxBbmltYXRvck5vbmUuY3BwJywKICAgICAgICAgICAg
ICdwbGF0Zm9ybS9TY3JvbGxBbmltYXRvck5vbmUuaCcsCisgICAgICAgICAgICAncGxhdGZvcm0v
U2Nyb2xsQW5pbWF0b3JUZXN0UmVjb3JkLmNwcCcsCisgICAgICAgICAgICAncGxhdGZvcm0vU2Ny
b2xsQW5pbWF0b3JUZXN0UmVjb3JkLmgnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL1Njcm9sbFZp
ZXcuY3BwJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9TY3JvbGxhYmxlQXJlYS5jcHAnLAogICAg
ICAgICAgICAgJ3BsYXRmb3JtL1Njcm9sbGJhci5jcHAnLApkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvV2ViQ29yZS52Y3Byb2ovV2ViQ29yZS52Y3Byb2ogYi9Tb3VyY2UvV2ViQ29yZS9XZWJD
b3JlLnZjcHJvai9XZWJDb3JlLnZjcHJvagppbmRleCBlZmQwMzEyMjY1MzUwZTNkNWEwMWY3MzIw
YWYzOWU3MjY3M2I5ZmE2Li5lMjNjNWVhZDk1NmE3MGEzMTAzMGEyZDcwZDk5NjNkZWU1YjA5NDE3
IDEwMDc1NQotLS0gYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnZjcHJvai9XZWJDb3JlLnZjcHJv
agorKysgYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnZjcHJvai9XZWJDb3JlLnZjcHJvagpAQCAt
MjcwMTAsNiArMjcwMTAsMTQgQEAKIAkJCQk+CiAJCQk8L0ZpbGU+CiAJCQk8RmlsZQorCQkJCVJl
bGF0aXZlUGF0aD0iLi5ccGxhdGZvcm1cU2Nyb2xsQW5pbWF0b3JUZXN0UmVjb3JkLmNwcCIKKwkJ
CQk+CisJCQk8L0ZpbGU+CisJCQk8RmlsZQorCQkJCVJlbGF0aXZlUGF0aD0iLi5ccGxhdGZvcm1c
U2Nyb2xsQW5pbWF0b3JUZXN0UmVjb3JkLmgiCisJCQkJPgorCQkJPC9GaWxlPgorCQkJPEZpbGUK
IAkJCQlSZWxhdGl2ZVBhdGg9Ii4uXHBsYXRmb3JtXFNjcm9sbEFuaW1hdG9yV2luLmNwcCIKIAkJ
CQk+CiAJCQk8L0ZpbGU+CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2Rl
cHJvai9wcm9qZWN0LnBieHByb2ogYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9w
cm9qZWN0LnBieHByb2oKaW5kZXggMTNiNmM0NTFlYmVjNWRhYzc4MGUxZmMyMGFmMzIyNmZjOTI1
ZWU0NC4uZGUzMjJlZTZjZWFjNjQ0MjQyZGM4OWUzZTQ1MGE1OWI3OTY3YTEwNyAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCisrKyBi
L1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagpAQCAtNTcx
NCw2ICs1NzE0LDggQEAKIAkJRDc2MTNBNTAxNDc0RjEzRjAwREI4NjA2IC8qIFdlYktpdE5hbWVk
Rmxvdy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBE
NzYxM0E0RTE0NzRGMTNGMDBEQjg2MDYgLyogV2ViS2l0TmFtZWRGbG93LmNwcCAqLzsgfTsKIAkJ
RDc2MTNBQzQxNDc1M0U1NjAwREI4NjA2IC8qIEpTV2ViS2l0TmFtZWRGbG93LmNwcCBpbiBTb3Vy
Y2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEQ3NjEzQUMyMTQ3NTNFNTYw
MERCODYwNiAvKiBKU1dlYktpdE5hbWVkRmxvdy5jcHAgKi87IH07CiAJCUQ4QjYxNTJGMTAzMjQ5
NTEwMEM4NTU0QSAvKiBDb29raWUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IEQ4QjYxNTJFMTAzMjQ5NTEwMEM4NTU0QSAvKiBDb29raWUuaCAqLzsgc2V0
dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQlEOUNBNjNCNDE0RkZG
RjlBMDA3OUIzREIgLyogU2Nyb2xsQW5pbWF0b3JUZXN0UmVjb3JkLmNwcCBpbiBTb3VyY2VzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEQ5Q0E2M0IyMTRGRkZGOUEwMDc5QjNE
QiAvKiBTY3JvbGxBbmltYXRvclRlc3RSZWNvcmQuY3BwICovOyB9OworCQlEOUNBNjNCNTE0RkZG
RjlBMDA3OUIzREIgLyogU2Nyb2xsQW5pbWF0b3JUZXN0UmVjb3JkLmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBEOUNBNjNCMzE0RkZGRjlBMDA3OUIzREIg
LyogU2Nyb2xsQW5pbWF0b3JUZXN0UmVjb3JkLmggKi87IH07CiAJCURCMjNDMkNCMEE1MDhEMjkw
MDI0ODlFQiAvKiBJbmRlbnRPdXRkZW50Q29tbWFuZC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBEQjIzQzJDOTBBNTA4RDI5MDAyNDg5RUIgLyogSW5k
ZW50T3V0ZGVudENvbW1hbmQuY3BwICovOyB9OwogCQlEQjIzQzJDQzBBNTA4RDI5MDAyNDg5RUIg
LyogSW5kZW50T3V0ZGVudENvbW1hbmQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IERCMjNDMkNBMEE1MDhEMjkwMDI0ODlFQiAvKiBJbmRlbnRPdXRkZW50
Q29tbWFuZC5oICovOyB9OwogCQlERDA1RkUwRDBCOEJBM0M2MDA5QUNERkUgLyogV2ViQ29yZU9i
akNFeHRyYXMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IEREMDVGRTBCMEI4QkEzQzYwMDlBQ0RGRSAvKiBXZWJDb3JlT2JqQ0V4dHJhcy5oICovOyBzZXR0
aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CkBAIC0xMjcyNCw2ICsxMjcy
Niw4IEBACiAJCUQ3NjEzQUMyMTQ3NTNFNTYwMERCODYwNiAvKiBKU1dlYktpdE5hbWVkRmxvdy5j
cHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBKU1dlYktpdE5hbWVkRmxv
dy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUQ3NjEzQUMzMTQ3NTNFNTYwMERC
ODYwNiAvKiBKU1dlYktpdE5hbWVkRmxvdy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBKU1dlYktpdE5hbWVkRmxvdy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlE
OEI2MTUyRTEwMzI0OTUxMDBDODU1NEEgLyogQ29va2llLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IENvb2tpZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlEOUNB
NjNCMjE0RkZGRjlBMDA3OUIzREIgLyogU2Nyb2xsQW5pbWF0b3JUZXN0UmVjb3JkLmNwcCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IFNjcm9sbEFuaW1hdG9yVGVzdFJlY29y
ZC5jcHA7IHBhdGggPSBwbGF0Zm9ybS9TY3JvbGxBbmltYXRvclRlc3RSZWNvcmQuY3BwOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OworCQlEOUNBNjNCMzE0RkZGRjlBMDA3OUIzREIgLyogU2Ny
b2xsQW5pbWF0b3JUZXN0UmVjb3JkLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9
IFNjcm9sbEFuaW1hdG9yVGVzdFJlY29yZC5oOyBwYXRoID0gcGxhdGZvcm0vU2Nyb2xsQW5pbWF0
b3JUZXN0UmVjb3JkLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCURCMjNDMkM5MEE1
MDhEMjkwMDI0ODlFQiAvKiBJbmRlbnRPdXRkZW50Q29tbWFuZC5jcHAgKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSW5kZW50T3V0ZGVudENvbW1hbmQuY3BwOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQlEQjIzQzJDQTBBNTA4RDI5MDAyNDg5RUIgLyogSW5kZW50
T3V0ZGVudENvbW1hbmQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEluZGVu
dE91dGRlbnRDb21tYW5kLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUREMDVGRTBC
MEI4QkEzQzYwMDlBQ0RGRSAvKiBXZWJDb3JlT2JqQ0V4dHJhcy5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gV2ViQ29yZU9iakNFeHRyYXMuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKQEAgLTEzNDgyLDYgKzEzNDg2LDggQEAKIAkJMDg2N0Q2OTFGRTg0MDI4RkMwMkFB
QzA3IC8qIFdlYktpdCAqLyA9IHsKIAkJCWlzYSA9IFBCWEdyb3VwOwogCQkJY2hpbGRyZW4gPSAo
CisJCQkJRDlDQTYzQjIxNEZGRkY5QTAwNzlCM0RCIC8qIFNjcm9sbEFuaW1hdG9yVGVzdFJlY29y
ZC5jcHAgKi8sCisJCQkJRDlDQTYzQjMxNEZGRkY5QTAwNzlCM0RCIC8qIFNjcm9sbEFuaW1hdG9y
VGVzdFJlY29yZC5oICovLAogCQkJCTY1Qzk3QUYyMDhFQTkwODgwMEFDRDI3MyAvKiBjb25maWcu
aCAqLywKIAkJCQlFREVDOTgwMjBBRUQ3RTE3MDA1OTEzN0YgLyogV2ViQ29yZVByZWZpeC5oICov
LAogCQkJCTkzMDcwNjEzMDlFMENBODIwMEIxN0ZFNCAvKiBEZXJpdmVkU291cmNlcy5tYWtlICov
LApAQCAtMjQzNTcsNiArMjQzNjMsNyBAQAogCQkJCTk3N0UyRTBGMTJGMEZDOUMwMEMxMzM3OSAv
KiBYU1NBdWRpdG9yLmggaW4gSGVhZGVycyAqLywKIAkJCQlGRDUzNzM1MzEzN0I2NTE4MDAwMDhE
Q0UgLyogWmVyb1BvbGUuaCBpbiBIZWFkZXJzICovLAogCQkJCUU0QkJFRDREMTRGQ0RCQTEwMDNG
MEI5OCAvKiBTdHlsZVJ1bGUuaCBpbiBIZWFkZXJzICovLAorCQkJCUQ5Q0E2M0I1MTRGRkZGOUEw
MDc5QjNEQiAvKiBTY3JvbGxBbmltYXRvclRlc3RSZWNvcmQuaCBpbiBIZWFkZXJzICovLAogCQkJ
KTsKIAkJCXJ1bk9ubHlGb3JEZXBsb3ltZW50UG9zdHByb2Nlc3NpbmcgPSAwOwogCQl9OwpAQCAt
MjczMTAsNiArMjczMTcsNyBAQAogCQkJCTk3N0UyRTBFMTJGMEZDOUMwMEMxMzM3OSAvKiBYU1NB
dWRpdG9yLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUZENTM3MzUyMTM3QjY1MTgwMDAwOERDRSAv
KiBaZXJvUG9sZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlFNEJCRUQ0QzE0RkNEQkExMDAzRjBC
OTggLyogU3R5bGVSdWxlLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCUQ5Q0E2M0I0MTRGRkZGOUEw
MDc5QjNEQiAvKiBTY3JvbGxBbmltYXRvclRlc3RSZWNvcmQuY3BwIGluIFNvdXJjZXMgKi8sCiAJ
CQkpOwogCQkJcnVuT25seUZvckRlcGxveW1lbnRQb3N0cHJvY2Vzc2luZyA9IDA7CiAJCX07CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL0V2ZW50SGFuZGxlci5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9wYWdlL0V2ZW50SGFuZGxlci5jcHAKaW5kZXggZjEwZTRhYmUxZTJlMTVkNDdlM2Uw
OWJjODA2MGRkYWYyYTg3YTA1ZS4uNjAzYTMyMzYxYmE2OTJiNzhjODU3MWFkNjFhZTQ4OThmMTJh
NWVhMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGFnZS9FdmVudEhhbmRsZXIuY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRXZlbnRIYW5kbGVyLmNwcApAQCAtNzAsNiArNzAsNyBA
QAogI2luY2x1ZGUgIlJlbmRlclZpZXcuaCIKICNpbmNsdWRlICJSZW5kZXJXaWRnZXQuaCIKICNp
bmNsdWRlICJTY3JvbGxBbmltYXRvci5oIgorI2luY2x1ZGUgIlNjcm9sbGFibGVBcmVhLmgiCiAj
aW5jbHVkZSAiU2Nyb2xsYmFyLmgiCiAjaW5jbHVkZSAiU2V0dGluZ3MuaCIKICNpbmNsdWRlICJT
cGF0aWFsTmF2aWdhdGlvbi5oIgpAQCAtMjMyLDcgKzIzMywyMCBAQCBwdWJsaWM6CiB9OwogI2Vu
ZGlmCiAKLXN0YXRpYyBpbmxpbmUgYm9vbCBzY3JvbGxOb2RlKGZsb2F0IGRlbHRhLCBXaGVlbEV2
ZW50OjpHcmFudWxhcml0eSBncmFudWxhcml0eSwgU2Nyb2xsRGlyZWN0aW9uIHBvc2l0aXZlRGly
ZWN0aW9uLCBTY3JvbGxEaXJlY3Rpb24gbmVnYXRpdmVEaXJlY3Rpb24sIE5vZGUqIG5vZGUsIE5v
ZGUqKiBzdG9wTm9kZSkKK3N0YXRpYyBpbmxpbmUgU2Nyb2xsR3JhbnVsYXJpdHkgd2hlZWxHcmFu
dWxhcml0eVRvU2Nyb2xsR3JhbnVsYXJpdHkoV2hlZWxFdmVudDo6R3JhbnVsYXJpdHkgZ3JhbnVs
YXJpdHkpCit7CisgICAgc3dpdGNoIChncmFudWxhcml0eSkgeworICAgIGNhc2UgV2hlZWxFdmVu
dDo6UGFnZToKKyAgICAgICAgcmV0dXJuIFNjcm9sbEJ5UGFnZTsKKyAgICBjYXNlIFdoZWVsRXZl
bnQ6OkxpbmU6CisgICAgICAgIHJldHVybiBTY3JvbGxCeUxpbmU7CisgICAgY2FzZSBXaGVlbEV2
ZW50OjpQaXhlbDoKKyAgICAgICAgcmV0dXJuIFNjcm9sbEJ5UGl4ZWw7CisgICAgfQorICAgIHJl
dHVybiBTY3JvbGxCeVBpeGVsOworfQorCitzdGF0aWMgaW5saW5lIGJvb2wgc2Nyb2xsTm9kZShm
bG9hdCBkZWx0YSwgU2Nyb2xsR3JhbnVsYXJpdHkgZ3JhbnVsYXJpdHksIFNjcm9sbERpcmVjdGlv
biBwb3NpdGl2ZURpcmVjdGlvbiwgU2Nyb2xsRGlyZWN0aW9uIG5lZ2F0aXZlRGlyZWN0aW9uLCBO
b2RlKiBub2RlLCBOb2RlKiogc3RvcE5vZGUpCiB7CiAgICAgaWYgKCFkZWx0YSkKICAgICAgICAg
cmV0dXJuIGZhbHNlOwpAQCAtMjQwLDIyICsyNTQsMjUgQEAgc3RhdGljIGlubGluZSBib29sIHNj
cm9sbE5vZGUoZmxvYXQgZGVsdGEsIFdoZWVsRXZlbnQ6OkdyYW51bGFyaXR5IGdyYW51bGFyaXR5
LAogICAgIGlmICghbm9kZS0+cmVuZGVyZXIoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAg
IAotICAgIC8vIEZpbmQgdGhlIG5lYXJlc3QgZW5jbG9zaW5nIGJveC4KICAgICBSZW5kZXJCb3gq
IGVuY2xvc2luZ0JveCA9IG5vZGUtPnJlbmRlcmVyKCktPmVuY2xvc2luZ0JveCgpOwotCiAgICAg
ZmxvYXQgYWJzRGVsdGEgPSBkZWx0YSA+IDAgPyBkZWx0YSA6IC1kZWx0YTsKLSAgICAKLSAgICBp
ZiAoZ3JhbnVsYXJpdHkgPT0gV2hlZWxFdmVudDo6UGFnZSkKLSAgICAgICAgcmV0dXJuIGVuY2xv
c2luZ0JveC0+c2Nyb2xsKGRlbHRhIDwgMCA/IG5lZ2F0aXZlRGlyZWN0aW9uIDogcG9zaXRpdmVE
aXJlY3Rpb24sIFNjcm9sbEJ5UGFnZSwgYWJzRGVsdGEsIHN0b3BOb2RlKTsKKyAgICByZXR1cm4g
ZW5jbG9zaW5nQm94LT5zY3JvbGwoZGVsdGEgPCAwID8gbmVnYXRpdmVEaXJlY3Rpb24gOiBwb3Np
dGl2ZURpcmVjdGlvbiwgZ3JhbnVsYXJpdHksIGFic0RlbHRhLCBzdG9wTm9kZSk7Cit9CiAKLSAg
ICBpZiAoZ3JhbnVsYXJpdHkgPT0gV2hlZWxFdmVudDo6TGluZSkKLSAgICAgICAgcmV0dXJuIGVu
Y2xvc2luZ0JveC0+c2Nyb2xsKGRlbHRhIDwgMCA/IG5lZ2F0aXZlRGlyZWN0aW9uIDogcG9zaXRp
dmVEaXJlY3Rpb24sIFNjcm9sbEJ5TGluZSwgYWJzRGVsdGEsIHN0b3BOb2RlKTsKK3N0YXRpYyBp
bmxpbmUgYm9vbCBzY3JvbGxOb2RlKGZsb2F0IGRlbHRhLCBXaGVlbEV2ZW50OjpHcmFudWxhcml0
eSBncmFudWxhcml0eSwgU2Nyb2xsRGlyZWN0aW9uIHBvc2l0aXZlRGlyZWN0aW9uLCBTY3JvbGxE
aXJlY3Rpb24gbmVnYXRpdmVEaXJlY3Rpb24sIE5vZGUqIG5vZGUsIE5vZGUqKiBzdG9wTm9kZSkK
K3sKKyAgICByZXR1cm4gc2Nyb2xsTm9kZShkZWx0YSwgd2hlZWxHcmFudWxhcml0eVRvU2Nyb2xs
R3JhbnVsYXJpdHkoZ3JhbnVsYXJpdHkpLCBwb3NpdGl2ZURpcmVjdGlvbiwgbmVnYXRpdmVEaXJl
Y3Rpb24sIG5vZGUsIHN0b3BOb2RlKTsKK30KIAotICAgIGlmIChncmFudWxhcml0eSA9PSBXaGVl
bEV2ZW50OjpQaXhlbCkKLSAgICAgICAgcmV0dXJuIGVuY2xvc2luZ0JveC0+c2Nyb2xsKGRlbHRh
IDwgMCA/IG5lZ2F0aXZlRGlyZWN0aW9uIDogcG9zaXRpdmVEaXJlY3Rpb24sIFNjcm9sbEJ5UGl4
ZWwsIGFic0RlbHRhLCBzdG9wTm9kZSk7Ci0gICAgICAgIAotICAgIHJldHVybiBmYWxzZTsKKyNp
ZiBFTkFCTEUoR0VTVFVSRV9FVkVOVFMpCitzdGF0aWMgaW5saW5lIGJvb2wgZ2VzdHVyZU5vZGUo
Y29uc3QgUGxhdGZvcm1HZXN0dXJlRXZlbnQmIGdlc3R1cmVFdmVudCwgTm9kZSogbm9kZSkKK3sK
KyAgICBpZiAoIW5vZGUtPnJlbmRlcmVyKCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBS
ZW5kZXJCb3gqIGVuY2xvc2luZ0JveCA9IG5vZGUtPnJlbmRlcmVyKCktPmVuY2xvc2luZ0JveCgp
OworICAgIHJldHVybiBlbmNsb3NpbmdCb3gtPmdlc3R1cmUoZ2VzdHVyZUV2ZW50KTsKIH0KKyNl
bmRpZgogCiAjaWYgIVBMQVRGT1JNKE1BQykKIApAQCAtMzU5LDYgKzM3Niw5IEBAIHZvaWQgRXZl
bnRIYW5kbGVyOjpjbGVhcigpCiAgICAgbV9vcmlnaW5hdGluZ1RvdWNoUG9pbnRUYXJnZXRzLmNs
ZWFyKCk7CiAjZW5kaWYKICAgICBtX21heE1vdXNlTW92ZWREdXJhdGlvbiA9IDA7CisjaWYgRU5B
QkxFKEdFU1RVUkVfRVZFTlRTKQorICAgIG1fZ2VzdHVyZVRhcmdldE5vZGUuY2xlYXIoKTsKKyNl
bmRpZgogfQogCiB2b2lkIEV2ZW50SGFuZGxlcjo6bm9kZVdpbGxCZVJlbW92ZWQoTm9kZSogbm9k
ZVRvQmVSZW1vdmVkKQpAQCAtMjM2MCwyOCArMjM4MCwxMTYgQEAgdm9pZCBFdmVudEhhbmRsZXI6
OmRlZmF1bHRXaGVlbEV2ZW50SGFuZGxlcihOb2RlKiBzdGFydE5vZGUsIFdoZWVsRXZlbnQqIHdo
ZWVsRXYKIH0KIAogI2lmIEVOQUJMRShHRVNUVVJFX0VWRU5UUykKLWJvb2wgRXZlbnRIYW5kbGVy
OjpoYW5kbGVHZXN0dXJlRXZlbnQoY29uc3QgUGxhdGZvcm1HZXN0dXJlRXZlbnQmIGdlc3R1cmVF
dmVudCkKK2Jvb2wgRXZlbnRIYW5kbGVyOjpkZXRlY3RBbmRQYXNzR2VzdHVyZUV2ZW50VG9XaWRn
ZXQoUGFzc1JlZlB0cjxOb2RlPiB0YXJnZXROb2RlLCBjb25zdCBQbGF0Zm9ybUdlc3R1cmVFdmVu
dCYgZ2VzdHVyZUV2ZW50LCBjb25zdCBIaXRUZXN0UmVzdWx0JiByZXN1bHQpCiB7Ci0gICAgLy8g
RklYTUU6IFRoaXMgc2hvdWxkIGhpdCB0ZXN0IGFuZCBnbyB0byB0aGUgY29ycmVjdCBzdWJmcmFt
ZSByYXRoZXIgdGhhbiAKLSAgICAvLyBhbHdheXMgc2VuZGluZyBnZXN0dXJlcyB0byB0aGUgbWFp
biBmcmFtZSBvbmx5LiBXZSBzaG91bGQgYWxzbyBlbnN1cmUKLSAgICAvLyB0aGF0IGlmIGEgZnJh
bWUgZ2V0cyBhIGdlc3R1cmUgYmVnaW4gZ2VzdHVyZSwgaXQgZ2V0cyB0aGUgY29ycmVzcG9uZGlu
ZwotICAgIC8vIGVuZCBnZXN0dXJlIGFzIHdlbGwuCisgICAgTm9kZSogbm9kZSA9IHRhcmdldE5v
ZGUuZ2V0KCk7CisgICAgaWYgKCFub2RlKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBi
b29sIGlzT3ZlcldpZGdldCA9IHJlc3VsdC5pc092ZXJXaWRnZXQoKTsKKyAgICBSZW5kZXJPYmpl
Y3QqIHRhcmdldCA9IG5vZGUtPnJlbmRlcmVyKCk7CisgICAgaWYgKCEoaXNPdmVyV2lkZ2V0ICYm
IHRhcmdldCAmJiB0YXJnZXQtPmlzV2lkZ2V0KCkpKQorICAgICAgICByZXR1cm4gZmFsc2U7Cisg
ICAgICAgIAorICAgIFdpZGdldCogd2lkZ2V0ID0gdG9SZW5kZXJXaWRnZXQodGFyZ2V0KS0+d2lk
Z2V0KCk7CisgICAgaWYgKHdpZGdldCAmJiBwYXNzR2VzdHVyZUV2ZW50VG9XaWRnZXQoZ2VzdHVy
ZUV2ZW50LCB3aWRnZXQpKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICByZXR1cm4gZmFsc2U7
Cit9CiAKK2Jvb2wgRXZlbnRIYW5kbGVyOjpwYXNzR2VzdHVyZUV2ZW50VG9GcmFtZVZpZXcoY29u
c3QgUGxhdGZvcm1HZXN0dXJlRXZlbnQmIGdlc3R1cmVFdmVudCkKK3sKKyAgICBGcmFtZVZpZXcq
IHZpZXcgPSBtX2ZyYW1lLT52aWV3KCk7CisgICAgaWYgKCF2aWV3KQorICAgICAgIHJldHVybiBm
YWxzZTsKKworICAgIHZpZXctPmhhbmRsZUdlc3R1cmVFdmVudChnZXN0dXJlRXZlbnQpOworICAg
IHJldHVybiB0cnVlOworfQorCitib29sIEV2ZW50SGFuZGxlcjo6aGFuZGxlR2VzdHVyZVNjcm9s
bENvcmUoY29uc3QgUGxhdGZvcm1HZXN0dXJlRXZlbnQmIGdlc3R1cmVFdmVudCkKK3sKKyAgICBE
b2N1bWVudCogZG9jdW1lbnQgPSBtX2ZyYW1lLT5kb2N1bWVudCgpOworICAgIFJlbmRlck9iamVj
dCogZG9jdW1lbnRSZW5kZXJlciA9IGRvY3VtZW50LT5yZW5kZXJlcigpOworICAgIGlmICghZG9j
dW1lbnRSZW5kZXJlcikKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgUmVmUHRyPEZyYW1l
Vmlldz4gcHJvdGVjdG9yKG1fZnJhbWUtPnZpZXcoKSk7CisKKyAgICBGcmFtZVZpZXcqIHZpZXcg
PSBtX2ZyYW1lLT52aWV3KCk7CisgICAgaWYgKCF2aWV3KQorICAgICAgICByZXR1cm4gZmFsc2U7
CisgICAgc2V0RnJhbWVXYXNTY3JvbGxlZEJ5VXNlcigpOworICAgIExheW91dFBvaW50IHBvaW50
SW5WaWV3Q29vcmRpbmF0ZXMgPSB2aWV3LT53aW5kb3dUb0NvbnRlbnRzKGdlc3R1cmVFdmVudC5w
b3NpdGlvbigpKTsKKyAgICBIaXRUZXN0UmVxdWVzdCByZXF1ZXN0KEhpdFRlc3RSZXF1ZXN0OjpS
ZWFkT25seSk7CisgICAgSGl0VGVzdFJlc3VsdCByZXN1bHQocG9pbnRJblZpZXdDb29yZGluYXRl
cyk7CisgICAgZG9jdW1lbnQtPnJlbmRlclZpZXcoKS0+bGF5ZXIoKS0+aGl0VGVzdChyZXF1ZXN0
LCByZXN1bHQpOworCisgICAgc3dpdGNoIChnZXN0dXJlRXZlbnQudHlwZSgpKSB7CisgICAgY2Fz
ZSBQbGF0Zm9ybUV2ZW50OjpHZXN0dXJlU2Nyb2xsVXBkYXRlOiB7CisgICAgICAgIC8vIEFsd2F5
cyBsYXRjaGVkIGlmIHBvc3NpYmxlLgorICAgICAgICBpZiAoIW1fZ2VzdHVyZVRhcmdldE5vZGUp
CisgICAgICAgICAgICBtX2dlc3R1cmVUYXJnZXROb2RlID0gcmVzdWx0LmlubmVyTm9kZSgpOwor
ICAgIAorICAgICAgICBpZiAoZGV0ZWN0QW5kUGFzc0dlc3R1cmVFdmVudFRvV2lkZ2V0KG1fZ2Vz
dHVyZVRhcmdldE5vZGUsIGdlc3R1cmVFdmVudCwgcmVzdWx0KSkKKyAgICAgICAgICAgIHJldHVy
biB0cnVlOworICAgICAgICBOb2RlKiBub2RlID0gbV9nZXN0dXJlVGFyZ2V0Tm9kZSA/IG1fZ2Vz
dHVyZVRhcmdldE5vZGUtPnNoYWRvd0FuY2VzdG9yTm9kZSgpIDogMDsKKyAgICAgICAgYm9vbCB4
U2Nyb2xsID0gbm9kZSAmJiBzY3JvbGxOb2RlKGdlc3R1cmVFdmVudC5kZWx0YVgoKSwgU2Nyb2xs
QnlQaXhlbCwgU2Nyb2xsTGVmdCwgU2Nyb2xsUmlnaHQsIG5vZGUsIDApOworICAgICAgICBib29s
IHlTY3JvbGwgPSBub2RlICYmIHNjcm9sbE5vZGUoZ2VzdHVyZUV2ZW50LmRlbHRhWSgpLCBTY3Jv
bGxCeVBpeGVsLCBTY3JvbGxVcCwgU2Nyb2xsRG93biwgbm9kZSwgMCk7CisgICAgCisgICAgICAg
IGlmICh4U2Nyb2xsIHx8IHlTY3JvbGwpCisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAg
ICAgcmV0dXJuIHBhc3NHZXN0dXJlRXZlbnRUb0ZyYW1lVmlldyhnZXN0dXJlRXZlbnQpOworICAg
IH0KKyAgICBjYXNlIFBsYXRmb3JtRXZlbnQ6Okdlc3R1cmVTY3JvbGxCZWdpbjogeworICAgICAg
ICAvLyBMYXRjaCBvbiBzY3JvbGwgYmVnaW4uCisgICAgICAgIGlmIChtX2dlc3R1cmVUYXJnZXRO
b2RlKQorICAgICAgICAgICAgbV9nZXN0dXJlVGFyZ2V0Tm9kZSA9IDA7CisgICAgICAgIG1fZ2Vz
dHVyZVRhcmdldE5vZGUgPSByZXN1bHQuaW5uZXJOb2RlKCk7CisgICAgCisgICAgICAgIGlmIChk
ZXRlY3RBbmRQYXNzR2VzdHVyZUV2ZW50VG9XaWRnZXQobV9nZXN0dXJlVGFyZ2V0Tm9kZSwgZ2Vz
dHVyZUV2ZW50LCByZXN1bHQpKQorICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIE5v
ZGUqIG5vZGUgPSBtX2dlc3R1cmVUYXJnZXROb2RlID8gbV9nZXN0dXJlVGFyZ2V0Tm9kZS0+c2hh
ZG93QW5jZXN0b3JOb2RlKCkgOiAwOworICAgICAgICBpZiAobm9kZSAmJiBnZXN0dXJlTm9kZShn
ZXN0dXJlRXZlbnQsIG5vZGUpKQorICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIHJl
dHVybiBwYXNzR2VzdHVyZUV2ZW50VG9GcmFtZVZpZXcoZ2VzdHVyZUV2ZW50KTsKKyAgICB9Cisg
ICAgY2FzZSBQbGF0Zm9ybUV2ZW50OjpHZXN0dXJlU2Nyb2xsRW5kOiB7CisgICAgICAgIC8vIEFs
d2F5cyB1bmxhdGNoLgorICAgICAgICBSZWZQdHI8Tm9kZT4gdGFyZ2V0Tm9kZSA9IG1fZ2VzdHVy
ZVRhcmdldE5vZGUucmVsZWFzZSgpOworICAgICAgICBpZiAoIXRhcmdldE5vZGUpCisgICAgICAg
ICAgICB0YXJnZXROb2RlID0gcmVzdWx0LmlubmVyTm9kZSgpOworICAgIAorICAgICAgICBpZiAo
ZGV0ZWN0QW5kUGFzc0dlc3R1cmVFdmVudFRvV2lkZ2V0KHRhcmdldE5vZGUsIGdlc3R1cmVFdmVu
dCwgcmVzdWx0KSkKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICBOb2RlKiBub2Rl
ID0gdGFyZ2V0Tm9kZSA/IHRhcmdldE5vZGUtPnNoYWRvd0FuY2VzdG9yTm9kZSgpIDogMDsKKyAg
ICAgICAgaWYgKG5vZGUgJiYgZ2VzdHVyZU5vZGUoZ2VzdHVyZUV2ZW50LCBub2RlKSkKKyAgICAg
ICAgICAgIHJldHVybiB0cnVlOworICAgICAgICByZXR1cm4gcGFzc0dlc3R1cmVFdmVudFRvRnJh
bWVWaWV3KGdlc3R1cmVFdmVudCk7CisgICAgfSAgICAgCisgICBkZWZhdWx0OgorICAgICAgICBB
U1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICB9CisgICAgcmV0dXJuIGZhbHNlOworfQorCitib29s
IEV2ZW50SGFuZGxlcjo6aGFuZGxlR2VzdHVyZUV2ZW50KGNvbnN0IFBsYXRmb3JtR2VzdHVyZUV2
ZW50JiBnZXN0dXJlRXZlbnQpCit7CiAgICAgc3dpdGNoIChnZXN0dXJlRXZlbnQudHlwZSgpKSB7
CiAgICAgY2FzZSBQbGF0Zm9ybUV2ZW50OjpHZXN0dXJlVGFwRG93bjoKICAgICAgICAgYnJlYWs7
CiAgICAgY2FzZSBQbGF0Zm9ybUV2ZW50OjpHZXN0dXJlVGFwOgogICAgICAgICByZXR1cm4gaGFu
ZGxlR2VzdHVyZVRhcChnZXN0dXJlRXZlbnQpOwotICAgIGNhc2UgUGxhdGZvcm1FdmVudDo6R2Vz
dHVyZVNjcm9sbFVwZGF0ZToKLSAgICAgICAgcmV0dXJuIGhhbmRsZUdlc3R1cmVTY3JvbGxVcGRh
dGUoZ2VzdHVyZUV2ZW50KTsKICAgICBjYXNlIFBsYXRmb3JtRXZlbnQ6Okdlc3R1cmVEb3VibGVU
YXA6CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUGxhdGZvcm1FdmVudDo6R2VzdHVyZVNjcm9s
bFVwZGF0ZToKICAgICBjYXNlIFBsYXRmb3JtRXZlbnQ6Okdlc3R1cmVTY3JvbGxCZWdpbjoKICAg
ICBjYXNlIFBsYXRmb3JtRXZlbnQ6Okdlc3R1cmVTY3JvbGxFbmQ6Ci0gICAgICAgIGJyZWFrOwor
ICAgICAgICByZXR1cm4gaGFuZGxlR2VzdHVyZVNjcm9sbENvcmUoZ2VzdHVyZUV2ZW50KTsKICAg
ICBkZWZhdWx0OgogICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICB9Ci0gICAgcmV0
dXJuIHRydWU7CisgICAgcmV0dXJuIGZhbHNlOwogfQogCiBib29sIEV2ZW50SGFuZGxlcjo6aGFu
ZGxlR2VzdHVyZVRhcChjb25zdCBQbGF0Zm9ybUdlc3R1cmVFdmVudCYgZ2VzdHVyZUV2ZW50KQpA
QCAtMjQwMCwxNCArMjUwOCw3IEBAIGJvb2wgRXZlbnRIYW5kbGVyOjpoYW5kbGVHZXN0dXJlVGFw
KGNvbnN0IFBsYXRmb3JtR2VzdHVyZUV2ZW50JiBnZXN0dXJlRXZlbnQpCiAKIGJvb2wgRXZlbnRI
YW5kbGVyOjpoYW5kbGVHZXN0dXJlU2Nyb2xsVXBkYXRlKGNvbnN0IFBsYXRmb3JtR2VzdHVyZUV2
ZW50JiBnZXN0dXJlRXZlbnQpCiB7Ci0gICAgY29uc3QgZmxvYXQgdGlja0Rpdmlzb3IgPSAoZmxv
YXQpV2hlZWxFdmVudDo6dGlja011bHRpcGxpZXI7Ci0gICAgLy8gRklYTUU6IFJlcGxhY2UgdGhp
cyBpbnRlcmltIGltcGxlbWVudGF0aW9uIG9uY2UgdGhlIGFib3ZlIGZpeG1lIGluIGhhbmRsZUdl
c3R1cmVFdmVudCgpIGhhcyBiZWVuIGFkZHJlc3NlZC4KLSAgICBib29sIGRlZmF1bHRQcmV2ZW50
ZWQgPSBmYWxzZTsKLSAgICBJbnRQb2ludCBwb2ludChnZXN0dXJlRXZlbnQucG9zaXRpb24oKS54
KCksIGdlc3R1cmVFdmVudC5wb3NpdGlvbigpLnkoKSk7Ci0gICAgSW50UG9pbnQgZ2xvYmFsUG9p
bnQoZ2VzdHVyZUV2ZW50Lmdsb2JhbFBvc2l0aW9uKCkueCgpLCBnZXN0dXJlRXZlbnQuZ2xvYmFs
UG9zaXRpb24oKS55KCkpOwotICAgIFBsYXRmb3JtV2hlZWxFdmVudCBzeW50aGV0aWNXaGVlbEV2
ZW50KHBvaW50LCBnbG9iYWxQb2ludCwgZ2VzdHVyZUV2ZW50LmRlbHRhWCgpLCBnZXN0dXJlRXZl
bnQuZGVsdGFZKCksIGdlc3R1cmVFdmVudC5kZWx0YVgoKSAvIHRpY2tEaXZpc29yLCBnZXN0dXJl
RXZlbnQuZGVsdGFZKCkgLyB0aWNrRGl2aXNvciwgU2Nyb2xsQnlQaXhlbFdoZWVsRXZlbnQsIGdl
c3R1cmVFdmVudC5zaGlmdEtleSgpLCBnZXN0dXJlRXZlbnQuY3RybEtleSgpLCBnZXN0dXJlRXZl
bnQuYWx0S2V5KCksIGdlc3R1cmVFdmVudC5tZXRhS2V5KCkpOwotICAgIGRlZmF1bHRQcmV2ZW50
ZWQgfD0gaGFuZGxlV2hlZWxFdmVudChzeW50aGV0aWNXaGVlbEV2ZW50KTsKLSAgICByZXR1cm4g
ZGVmYXVsdFByZXZlbnRlZDsKKyAgICByZXR1cm4gaGFuZGxlR2VzdHVyZVNjcm9sbENvcmUoZ2Vz
dHVyZUV2ZW50KTsKIH0KICNlbmRpZgogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdl
L0V2ZW50SGFuZGxlci5oIGIvU291cmNlL1dlYkNvcmUvcGFnZS9FdmVudEhhbmRsZXIuaAppbmRl
eCAwOTgxZTQxNzExODFhMTI1MmE3NGEwMGU3MTcwYjkyOWVhODAwNDYyLi41MjRhZDhhMWVkMDIy
NGNlNTgzMjg0YTNmMzA0N2Y2NjM3MTA0MjU1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9w
YWdlL0V2ZW50SGFuZGxlci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRXZlbnRIYW5kbGVy
LmgKQEAgLTMwOSw2ICszMDksMTIgQEAgcHJpdmF0ZToKICAgICBib29sIHBhc3NXaWRnZXRNb3Vz
ZURvd25FdmVudFRvV2lkZ2V0KFJlbmRlcldpZGdldCopOwogCiAgICAgYm9vbCBwYXNzTW91c2VE
b3duRXZlbnRUb1dpZGdldChXaWRnZXQqKTsKKyNpZiBFTkFCTEUoR0VTVFVSRV9FVkVOVFMpCisg
ICAgYm9vbCBoYW5kbGVHZXN0dXJlU2Nyb2xsQ29yZShjb25zdCBQbGF0Zm9ybUdlc3R1cmVFdmVu
dCYpOworICAgIGJvb2wgZGV0ZWN0QW5kUGFzc0dlc3R1cmVFdmVudFRvV2lkZ2V0KFBhc3NSZWZQ
dHI8Tm9kZT4sIGNvbnN0IFBsYXRmb3JtR2VzdHVyZUV2ZW50JiwgY29uc3QgSGl0VGVzdFJlc3Vs
dCYpOworICAgIGJvb2wgcGFzc0dlc3R1cmVFdmVudFRvRnJhbWVWaWV3KGNvbnN0IFBsYXRmb3Jt
R2VzdHVyZUV2ZW50Jik7CisgICAgYm9vbCBwYXNzR2VzdHVyZUV2ZW50VG9XaWRnZXQoY29uc3Qg
UGxhdGZvcm1HZXN0dXJlRXZlbnQmLCBXaWRnZXQqKTsKKyNlbmRpZgogICAgIGJvb2wgcGFzc1do
ZWVsRXZlbnRUb1dpZGdldChjb25zdCBQbGF0Zm9ybVdoZWVsRXZlbnQmLCBXaWRnZXQqKTsKIAog
ICAgIHZvaWQgZGVmYXVsdFNwYWNlRXZlbnRIYW5kbGVyKEtleWJvYXJkRXZlbnQqKTsKQEAgLTQz
Miw2ICs0MzgsOSBAQCBwcml2YXRlOgogICAgIGJvb2wgbV90b3VjaFByZXNzZWQ7CiAjZW5kaWYK
ICAgICBkb3VibGUgbV9tYXhNb3VzZU1vdmVkRHVyYXRpb247CisjaWYgRU5BQkxFKEdFU1RVUkVf
RVZFTlRTKQorICAgIFJlZlB0cjxOb2RlPiBtX2dlc3R1cmVUYXJnZXROb2RlOworI2VuZGlmCiB9
OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9w
YWdlL0ZyYW1lVmlldy5oIGIvU291cmNlL1dlYkNvcmUvcGFnZS9GcmFtZVZpZXcuaAppbmRleCBj
ZmQzNWEzNmMzOTAwOGUwYWU2YTlhZGEzNjNlMmMyMzQzNTNiYzZkLi5jZTQzMjliMjkxNDYzMTZi
OGE3NTRkYzY5NDlhMTQ2YTJiNmJkNjFlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wYWdl
L0ZyYW1lVmlldy5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRnJhbWVWaWV3LmgKQEAgLTMy
MSw2ICszMjEsMTAgQEAgcHVibGljOgogICAgIC8vIHdlIG5lZWQgdGhpcyBmdW5jdGlvbiBpbiBv
cmRlciB0byBkbyB0aGUgc2Nyb2xsIG91cnNlbHZlcy4KICAgICBib29sIHdoZWVsRXZlbnQoY29u
c3QgUGxhdGZvcm1XaGVlbEV2ZW50Jik7CiAKKyNpZiBFTkFCTEUoR0VTVFVSRV9FVkVOVFMpCisg
ICAgYm9vbCBnZXN0dXJlRXZlbnQoY29uc3QgUGxhdGZvcm1HZXN0dXJlRXZlbnQmKTsKKyNlbmRp
ZgorCiBwcm90ZWN0ZWQ6CiAgICAgdmlydHVhbCBib29sIHNjcm9sbENvbnRlbnRzRmFzdFBhdGgo
Y29uc3QgSW50U2l6ZSYgc2Nyb2xsRGVsdGEsIGNvbnN0IEludFJlY3QmIHJlY3RUb1Njcm9sbCwg
Y29uc3QgSW50UmVjdCYgY2xpcFJlY3QpOwogICAgIHZpcnR1YWwgdm9pZCBzY3JvbGxDb250ZW50
c1Nsb3dQYXRoKGNvbnN0IEludFJlY3QmIHVwZGF0ZVJlY3QpOwpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcGFnZS9jaHJvbWl1bS9FdmVudEhhbmRsZXJDaHJvbWl1bS5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9wYWdlL2Nocm9taXVtL0V2ZW50SGFuZGxlckNocm9taXVtLmNwcAppbmRleCA5N2Mx
Y2JlNzM4NTRkM2I2NjAzMjBiODE0NDZjNzYwZWQ4MTg0NmIxLi44NjY0MjIxNjY5OTk1YmFkOTQ4
OWJhMDg4NzMwZjMxYjMxNDlhZGZhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL2No
cm9taXVtL0V2ZW50SGFuZGxlckNocm9taXVtLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdl
L2Nocm9taXVtL0V2ZW50SGFuZGxlckNocm9taXVtLmNwcApAQCAtNDQsNiArNDQsMTEgQEAKICNp
bmNsdWRlICJQbGF0Zm9ybVdoZWVsRXZlbnQuaCIKICNpbmNsdWRlICJSZW5kZXJXaWRnZXQuaCIK
IAorI2lmIEVOQUJMRShHRVNUVVJFX0VWRU5UUykgfHwgRU5BQkxFKEdFU1RVUkVfUkVDT0dOSVpF
UikKKyNpbmNsdWRlICJQbGF0Zm9ybUdlc3R1cmVFdmVudC5oIgorI2VuZGlmCisKKwogbmFtZXNw
YWNlIFdlYkNvcmUgewogCiAjaWYgT1MoREFSV0lOKQpAQCAtMTY0LDQgKzE2OSwxNiBAQCBib29s
IEV2ZW50SGFuZGxlcjo6c2hvdWxkVHVyblZlcnRpY2FsVGlja3NJbnRvSG9yaXpvbnRhbChjb25z
dCBIaXRUZXN0UmVzdWx0JiByZQogfQogI2VuZGlmCiAKKyNpZiBFTkFCTEUoR0VTVFVSRV9FVkVO
VFMpCitib29sIEV2ZW50SGFuZGxlcjo6cGFzc0dlc3R1cmVFdmVudFRvV2lkZ2V0KGNvbnN0IFBs
YXRmb3JtR2VzdHVyZUV2ZW50JiBnZXN0dXJlRXZlbnQsIFdpZGdldCogd2lkZ2V0KQoreworICAg
IGlmICghd2lkZ2V0KQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBpZiAoIXdpZGdldC0+
aXNGcmFtZVZpZXcoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIHJldHVybiBzdGF0aWNf
Y2FzdDxGcmFtZVZpZXcqPih3aWRnZXQpLT5mcmFtZSgpLT5ldmVudEhhbmRsZXIoKS0+aGFuZGxl
R2VzdHVyZUV2ZW50KGdlc3R1cmVFdmVudCk7Cit9CisjZW5kaWYKKwogfSAvLyBuYW1lc3BhY2Ug
V2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGFnZS9lZmwvRXZlbnRIYW5kbGVy
RWZsLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvZWZsL0V2ZW50SGFuZGxlckVmbC5jcHAKaW5k
ZXggMGI5YzJiNmU2ZjgxNmEyYzE4YWM4NzVkZmZiYTQwYjExYTI2YTM3MC4uYjIyMjY2OGI3Zjk4
NzViZmU3ZjFiMDczNTMzYzBiMWUyZmNjODZmMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
cGFnZS9lZmwvRXZlbnRIYW5kbGVyRWZsLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL2Vm
bC9FdmVudEhhbmRsZXJFZmwuY3BwCkBAIC05NSw2ICs5NSwxNCBAQCBib29sIEV2ZW50SGFuZGxl
cjo6cGFzc1doZWVsRXZlbnRUb1dpZGdldChjb25zdCBQbGF0Zm9ybVdoZWVsRXZlbnQmIGV2ZW50
LCBXaWRnZQogICAgIHJldHVybiBzdGF0aWNfY2FzdDxGcmFtZVZpZXcqPih3aWRnZXQpLT5mcmFt
ZSgpLT5ldmVudEhhbmRsZXIoKS0+aGFuZGxlV2hlZWxFdmVudChldmVudCk7CiB9CiAKKyNpZiBF
TkFCTEUoR0VTVFVSRV9FVkVOVFMpCitib29sIEV2ZW50SGFuZGxlcjo6cGFzc0dlc3R1cmVFdmVu
dFRvV2lkZ2V0KGNvbnN0IFBsYXRmb3JtR2VzdHVyZUV2ZW50JiwgV2lkZ2V0KikKK3sKKyAgICBu
b3RJbXBsZW1lbnRlZCgpOworICAgIHJldHVybiBmYWxzZTsKK30KKyNlbmRpZgorCiBQYXNzUmVm
UHRyPENsaXBib2FyZD4gRXZlbnRIYW5kbGVyOjpjcmVhdGVEcmFnZ2luZ0NsaXBib2FyZCgpIGNv
bnN0CiB7CiAgICAgcmV0dXJuIENsaXBib2FyZEVmbDo6Y3JlYXRlKENsaXBib2FyZFdyaXRhYmxl
LCBDbGlwYm9hcmQ6OkRyYWdBbmREcm9wKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Bh
Z2UvZ3RrL0V2ZW50SGFuZGxlckd0ay5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL2d0ay9FdmVu
dEhhbmRsZXJHdGsuY3BwCmluZGV4IDQzODZhNGRlMzc4ODg5YTM1NTVhNTA4ODM5ZDM2NTJmMWY4
ZjU5NjUuLjRmOGM5ZTBmNzQ5Mjc2ZDIzODFhM2VmODdkNzhhMTgxOGY2NzhlNTUgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvZ3RrL0V2ZW50SGFuZGxlckd0ay5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvcGFnZS9ndGsvRXZlbnRIYW5kbGVyR3RrLmNwcApAQCAtOTQsNiArOTQsMTQg
QEAgYm9vbCBFdmVudEhhbmRsZXI6OnBhc3NXaGVlbEV2ZW50VG9XaWRnZXQoY29uc3QgUGxhdGZv
cm1XaGVlbEV2ZW50JiBldmVudCwgV2lkZ2UKICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8RnJhbWVW
aWV3Kj4od2lkZ2V0KS0+ZnJhbWUoKS0+ZXZlbnRIYW5kbGVyKCktPmhhbmRsZVdoZWVsRXZlbnQo
ZXZlbnQpOwogfQogCisjaWYgRU5BQkxFKEdFU1RVUkVfRVZFTlRTKQorYm9vbCBFdmVudEhhbmRs
ZXI6OnBhc3NHZXN0dXJlRXZlbnRUb1dpZGdldChjb25zdCBQbGF0Zm9ybUdlc3R1cmVFdmVudCYs
IFdpZGdldCopCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICByZXR1cm4gZmFsc2U7Cit9
CisjZW5kaWYKKwogUGFzc1JlZlB0cjxDbGlwYm9hcmQ+IEV2ZW50SGFuZGxlcjo6Y3JlYXRlRHJh
Z2dpbmdDbGlwYm9hcmQoKSBjb25zdAogewogICAgIHJldHVybiBDbGlwYm9hcmRHdGs6OmNyZWF0
ZShDbGlwYm9hcmRXcml0YWJsZSwgRGF0YU9iamVjdEd0azo6Y3JlYXRlKCksIENsaXBib2FyZDo6
RHJhZ0FuZERyb3AsIG1fZnJhbWUpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGFnZS9t
YWMvRXZlbnRIYW5kbGVyTWFjLm1tIGIvU291cmNlL1dlYkNvcmUvcGFnZS9tYWMvRXZlbnRIYW5k
bGVyTWFjLm1tCmluZGV4IDU1ZGQ4MTY5ZDYyZTUxNjBiZGZmM2U5Mzc4ODc0ZDVkYWZiNGE5OGEu
LjY5ZTA1NzQ2ODhmMzdhMWFiMDliNzYxYTU1MDg2MzdmM2M1YWJjYWEgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3BhZ2UvbWFjL0V2ZW50SGFuZGxlck1hYy5tbQorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9wYWdlL21hYy9FdmVudEhhbmRsZXJNYWMubW0KQEAgLTczNSw0ICs3MzUsMjUgQEAgdW5z
aWduZWQgRXZlbnRIYW5kbGVyOjphY2Nlc3NLZXlNb2RpZmllcnMoKQogICAgIHJldHVybiBQbGF0
Zm9ybUV2ZW50OjpDdHJsS2V5IHwgUGxhdGZvcm1FdmVudDo6QWx0S2V5OwogfQogCisjaWYgRU5B
QkxFKEdFU1RVUkVfRVZFTlRTKQorYm9vbCBFdmVudEhhbmRsZXI6OnBhc3NHZXN0dXJlRXZlbnRU
b1dpZGdldChjb25zdCBQbGF0Zm9ybUdlc3R1cmVFdmVudCYgZ2VzdHVyZUV2ZW50LCBXaWRnZXQq
IHdpZGdldCkKK3sKKyAgICBCRUdJTl9CTE9DS19PQkpDX0VYQ0VQVElPTlM7CisKKyAgICBpZiAo
IXdpZGdldCkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgTlNWaWV3KiBub2RlVmlldyA9
IHdpZGdldC0+cGxhdGZvcm1XaWRnZXQoKTsKKyAgICBpZiAoIW5vZGVWaWV3KSB7CisgICAgICAg
IC8vIFdlYktpdDIgY29kZSBwYXRoLgorICAgICAgICBpZiAoIXdpZGdldC0+aXNGcmFtZVZpZXco
KSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgICAgICByZXR1cm4gc3RhdGljX2Nh
c3Q8RnJhbWVWaWV3Kj4od2lkZ2V0KS0+ZnJhbWUoKS0+ZXZlbnRIYW5kbGVyKCktPmhhbmRsZUdl
c3R1cmVFdmVudChnZXN0dXJlRXZlbnQpOworICAgIH0KKyAgICBFTkRfQkxPQ0tfT0JKQ19FWENF
UFRJT05TOworICAgIHJldHVybiBmYWxzZTsKK30KKyNlbmRpZgorCiB9CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9wYWdlL3F0L0V2ZW50SGFuZGxlclF0LmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L3BhZ2UvcXQvRXZlbnRIYW5kbGVyUXQuY3BwCmluZGV4IDhhZWJiOWM5YTk3NjFiZDYxMDFiZDJk
ODUxNjZlNTFkNjVhM2FlNjIuLjZlYmVhOTZjMDI2M2NiOTQ1YTRhZDY1MjA2NDY1NTgzNDYyYWM3
MDIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvcXQvRXZlbnRIYW5kbGVyUXQuY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvcXQvRXZlbnRIYW5kbGVyUXQuY3BwCkBAIC0xMDQs
NiArMTA0LDE3IEBAIGJvb2wgRXZlbnRIYW5kbGVyOjpwYXNzV2hlZWxFdmVudFRvV2lkZ2V0KGNv
bnN0IFBsYXRmb3JtV2hlZWxFdmVudCYgZXZlbnQsIFdpZGdlCiAgICAgcmV0dXJuIHN0YXRpY19j
YXN0PEZyYW1lVmlldyo+KHdpZGdldCktPmZyYW1lKCktPmV2ZW50SGFuZGxlcigpLT5oYW5kbGVX
aGVlbEV2ZW50KGV2ZW50KTsKIH0KIAorI2lmIEVOQUJMRShHRVNUVVJFX0VWRU5UUykKK2Jvb2wg
RXZlbnRIYW5kbGVyOjpwYXNzR2VzdHVyZUV2ZW50VG9XaWRnZXQoY29uc3QgUGxhdGZvcm1HZXN0
dXJlRXZlbnQmIGV2ZW50LCBXaWRnZXQqIHdpZGdldCkKK3sKKyAgICBRX0FTU0VSVCh3aWRnZXQp
OworICAgIGlmICghd2lkZ2V0LT5pc0ZyYW1lVmlldygpKQorICAgICAgICByZXR1cm4gZmFsc2U7
CisKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8RnJhbWVWaWV3Kj4od2lkZ2V0KS0+ZnJhbWUoKS0+
ZXZlbnRIYW5kbGVyKCktPmhhbmRsZUdlc3R1cmVFdmVudChldmVudCk7Cit9CisjZW5kaWYKKwog
UGFzc1JlZlB0cjxDbGlwYm9hcmQ+IEV2ZW50SGFuZGxlcjo6Y3JlYXRlRHJhZ2dpbmdDbGlwYm9h
cmQoKSBjb25zdAogewogICAgIHJldHVybiBDbGlwYm9hcmRRdDo6Y3JlYXRlKENsaXBib2FyZFdy
aXRhYmxlLCBtX2ZyYW1lLCBDbGlwYm9hcmQ6OkRyYWdBbmREcm9wKTsKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3BhZ2Uvd2luL0V2ZW50SGFuZGxlcldpbi5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9wYWdlL3dpbi9FdmVudEhhbmRsZXJXaW4uY3BwCmluZGV4IDkzOTNlZmE1NWZhYzI2OTdkY2Zk
NzllMmI3NDk3NTNiYzVjMmZiOGYuLjA2MDk3ZDRhODBjYTk3MTBmYjhmNGI1ZDZmZDUyYTFkNGFl
MWQzNjUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2Uvd2luL0V2ZW50SGFuZGxlcldp
bi5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGFnZS93aW4vRXZlbnRIYW5kbGVyV2luLmNwcApA
QCAtODEsNiArODEsMTQgQEAgYm9vbCBFdmVudEhhbmRsZXI6OnBhc3NXaGVlbEV2ZW50VG9XaWRn
ZXQoY29uc3QgUGxhdGZvcm1XaGVlbEV2ZW50JiB3aGVlbEV2ZW50LAogICAgIHJldHVybiBzdGF0
aWNfY2FzdDxGcmFtZVZpZXcqPih3aWRnZXQpLT5mcmFtZSgpLT5ldmVudEhhbmRsZXIoKS0+aGFu
ZGxlV2hlZWxFdmVudCh3aGVlbEV2ZW50KTsKIH0KIAorI2lmIEVOQUJMRShHRVNUVVJFX0VWRU5U
UykKK2Jvb2wgRXZlbnRIYW5kbGVyOjpwYXNzR2VzdHVyZUV2ZW50VG9XaWRnZXQoY29uc3QgUGxh
dGZvcm1HZXN0dXJlRXZlbnQmLCBXaWRnZXQqKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7Cisg
ICAgcmV0dXJuIGZhbHNlOworfQorI2VuZGlmCisKIGJvb2wgRXZlbnRIYW5kbGVyOjp0YWJzVG9B
bGxGb3JtQ29udHJvbHMoS2V5Ym9hcmRFdmVudCopIGNvbnN0CiB7CiAgICAgcmV0dXJuIHRydWU7
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL3d4L0V2ZW50SGFuZGxlcld4LmNwcCBi
L1NvdXJjZS9XZWJDb3JlL3BhZ2Uvd3gvRXZlbnRIYW5kbGVyV3guY3BwCmluZGV4IDA2YjYwMzY5
ODJhNTM5ODM1Mjk0NmQ1MDdjNDZhYzkzNTA3Yjc0OWMuLjJhYzRkZDdlZTIzM2FlYzFjNTUzNWI3
MGY3ZTM0NmQ2MDQ1M2Q4ZjMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2Uvd3gvRXZl
bnRIYW5kbGVyV3guY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2Uvd3gvRXZlbnRIYW5kbGVy
V3guY3BwCkBAIC04Miw2ICs4MiwxNCBAQCBib29sIEV2ZW50SGFuZGxlcjo6cGFzc1doZWVsRXZl
bnRUb1dpZGdldChjb25zdCBQbGF0Zm9ybVdoZWVsRXZlbnQmIGV2ZW50LCBXaWRnZQogICAgIHJl
dHVybiBzdGF0aWNfY2FzdDxGcmFtZVZpZXcqPih3aWRnZXQpLT5mcmFtZSgpLT5ldmVudEhhbmRs
ZXIoKS0+aGFuZGxlV2hlZWxFdmVudChldmVudCk7CiB9CiAKKyNpZiBFTkFCTEUoR0VTVFVSRV9F
VkVOVFMpCitib29sIEV2ZW50SGFuZGxlcjo6cGFzc0dlc3R1cmVFdmVudFRvV2lkZ2V0KGNvbnN0
IFBsYXRmb3JtR2VzdHVyZUV2ZW50JiwgV2lkZ2V0KikKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgp
OyAKKyAgICByZXR1cm4gZmFsc2U7IAorfQorI2VuZGlmCisKIGJvb2wgRXZlbnRIYW5kbGVyOjp0
YWJzVG9BbGxGb3JtQ29udHJvbHMoS2V5Ym9hcmRFdmVudCogZXZlbnQpIGNvbnN0IAogeyAKICAg
ICBub3RJbXBsZW1lbnRlZCgpOyAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L1Njcm9sbEFuaW1hdG9yLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1Njcm9sbEFuaW1h
dG9yLmNwcAppbmRleCAyMzAwMGMzZTRmODdlZDYwZWJkNDY1ZjEwY2Y4YzkzMjFkZGM3YmMwLi4w
NWIzMDk0ZDQ1ZWM3YmEyMTBhYzYxOTliNDE5OTBkOTM5Y2FjY2JhIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxBbmltYXRvci5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vU2Nyb2xsQW5pbWF0b3IuY3BwCkBAIC0zNyw2ICszNywxMCBAQAogI2luY2x1
ZGUgPGFsZ29yaXRobT4KICNpbmNsdWRlIDx3dGYvUGFzc093blB0ci5oPgogCisjaWYgRU5BQkxF
KEdFU1RVUkVfRVZFTlRTKQorI2luY2x1ZGUgIlBsYXRmb3JtR2VzdHVyZUV2ZW50LmgiCisjZW5k
aWYKKwogdXNpbmcgbmFtZXNwYWNlIHN0ZDsKIAogbmFtZXNwYWNlIFdlYkNvcmUgewpAQCAtMTI4
LDYgKzEzMiwzNSBAQCB2b2lkIFNjcm9sbEFuaW1hdG9yOjpzZXRDdXJyZW50UG9zaXRpb24oY29u
c3QgRmxvYXRQb2ludCYgcG9zaXRpb24pCiAgICAgbV9jdXJyZW50UG9zWSA9IHBvc2l0aW9uLnko
KTsKIH0KIAorI2lmIEVOQUJMRShHRVNUVVJFX0VWRU5UUykKK3ZvaWQgU2Nyb2xsQW5pbWF0b3I6
OmhhbmRsZUdlc3R1cmVFdmVudChjb25zdCBQbGF0Zm9ybUdlc3R1cmVFdmVudCYgZXZlbnQpCit7
CisgICAgc3dpdGNoIChldmVudC50eXBlKCkpIHsKKyAgICBjYXNlIFBsYXRmb3JtRXZlbnQ6Okdl
c3R1cmVTY3JvbGxCZWdpbjoKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQbGF0Zm9ybUV2ZW50
OjpHZXN0dXJlU2Nyb2xsRW5kOgorICAgICAgICBicmVhazsKKyAgICBjYXNlIFBsYXRmb3JtRXZl
bnQ6Okdlc3R1cmVTY3JvbGxVcGRhdGU6IHsKKyAgICAgICAgSW50U2l6ZSBtYXhGb3J3YXJkU2Ny
b2xsRGVsdGEgPSBtX3Njcm9sbGFibGVBcmVhLT5tYXhpbXVtU2Nyb2xsUG9zaXRpb24oKSAtIG1f
c2Nyb2xsYWJsZUFyZWEtPnNjcm9sbFBvc2l0aW9uKCk7CisgICAgICAgIEludFNpemUgbWF4QmFj
a3dhcmRTY3JvbGxEZWx0YSA9IG1fc2Nyb2xsYWJsZUFyZWEtPnNjcm9sbFBvc2l0aW9uKCkgLSBt
X3Njcm9sbGFibGVBcmVhLT5taW5pbXVtU2Nyb2xsUG9zaXRpb24oKTsKKyAgICAgICAgZmxvYXQg
ZGVsdGFYID0gKGV2ZW50LmRlbHRhWCgpIDwgMC5mKSA/IG1heChldmVudC5kZWx0YVgoKSwgLXN0
YXRpY19jYXN0PGZsb2F0PihtYXhGb3J3YXJkU2Nyb2xsRGVsdGEud2lkdGgoKSkpIDogbWluKGV2
ZW50LmRlbHRhWCgpLCBmbG9hdChtYXhCYWNrd2FyZFNjcm9sbERlbHRhLndpZHRoKCkpKTsKKyAg
ICAgICAgZmxvYXQgZGVsdGFZID0gKGV2ZW50LmRlbHRhWSgpIDwgMC5mKSA/IG1heChldmVudC5k
ZWx0YVkoKSwgLXN0YXRpY19jYXN0PGZsb2F0PihtYXhGb3J3YXJkU2Nyb2xsRGVsdGEuaGVpZ2h0
KCkpKSA6IG1pbihldmVudC5kZWx0YVkoKSwgZmxvYXQobWF4QmFja3dhcmRTY3JvbGxEZWx0YS5o
ZWlnaHQoKSkpOworCisgICAgICAgIEludFJlY3QgY29udGVudFJlY3QgPSBtX3Njcm9sbGFibGVB
cmVhLT52aXNpYmxlQ29udGVudFJlY3QodHJ1ZSk7CisgICAgICAgIEZsb2F0UG9pbnQgb2Zmc2V0
ID0gRmxvYXRQb2ludChjb250ZW50UmVjdC54KCkgLSBkZWx0YVgsIGNvbnRlbnRSZWN0LnkoKSAt
IGRlbHRhWSk7CisgICAgICAgIHNjcm9sbFRvT2Zmc2V0V2l0aG91dEFuaW1hdGlvbihvZmZzZXQp
OworICAgICAgICBicmVhazsKKyAgICB9CisgICAgY2FzZSBQbGF0Zm9ybUV2ZW50OjpHZXN0dXJl
VGFwRG93bjoKKyAgICBjYXNlIFBsYXRmb3JtRXZlbnQ6Okdlc3R1cmVUYXA6CisgICAgY2FzZSBQ
bGF0Zm9ybUV2ZW50OjpHZXN0dXJlRG91YmxlVGFwOgorICAgICAgICBicmVhazsKKyAgICBkZWZh
dWx0OgorICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICB9Cit9CisjZW5kaWYKKwog
RmxvYXRQb2ludCBTY3JvbGxBbmltYXRvcjo6Y3VycmVudFBvc2l0aW9uKCkgY29uc3QKIHsKICAg
ICByZXR1cm4gRmxvYXRQb2ludChtX2N1cnJlbnRQb3NYLCBtX2N1cnJlbnRQb3NZKTsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1Njcm9sbEFuaW1hdG9yLmggYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxBbmltYXRvci5oCmluZGV4IDkxNDEzZTg1ODgxYmJjMGQx
ZTQ3YTEzYWUxNDBhOGY4MWUxMTNiZGIuLmM2NGUzMTQ3ZGIzMzM4MjNkMTAyNDc3MGNlNDU3ODVi
ODhiMWUyNDMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1Njcm9sbEFuaW1h
dG9yLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU2Nyb2xsQW5pbWF0b3IuaApAQCAt
OTEsMTAgKzkxLDE1IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIHZvaWQgZGlkQWRkSG9yaXpvbnRh
bFNjcm9sbGJhcihTY3JvbGxiYXIqKSB7IH0KICAgICB2aXJ0dWFsIHZvaWQgd2lsbFJlbW92ZUhv
cml6b250YWxTY3JvbGxiYXIoU2Nyb2xsYmFyKikgeyB9CiAKKyAgICB2aXJ0dWFsIGJvb2wgaXNS
ZWNvcmRpbmdJbnRlcnBvc2VyKCkgeyByZXR1cm4gZmFsc2U7IH0KICAgICB2aXJ0dWFsIGJvb2wg
c2hvdWxkU2Nyb2xsYmFyUGFydGljaXBhdGVJbkhpdFRlc3RpbmcoU2Nyb2xsYmFyKikgeyByZXR1
cm4gdHJ1ZTsgfQogCiAgICAgdmlydHVhbCB2b2lkIG5vdGlmeUNvbnRlbnRBcmVhU2Nyb2xsZWQo
KSB7IH0KIAorI2lmIEVOQUJMRShHRVNUVVJFX0VWRU5UUykKKyAgICB2aXJ0dWFsIHZvaWQgaGFu
ZGxlR2VzdHVyZUV2ZW50KGNvbnN0IFBsYXRmb3JtR2VzdHVyZUV2ZW50Jik7CisjZW5kaWYKKwog
cHJvdGVjdGVkOgogICAgIFNjcm9sbEFuaW1hdG9yKFNjcm9sbGFibGVBcmVhKik7CiAKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1Njcm9sbEFuaW1hdG9yVGVzdFJlY29yZC5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxBbmltYXRvclRlc3RSZWNvcmQuY3Bw
Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAuLjcwZDA1ZDEwMWFhODhmMTEyM2JlZDM4MWExNDE3N2JlYjk2YTc1ZjAKLS0t
IC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxBbmltYXRvclRl
c3RSZWNvcmQuY3BwCkBAIC0wLDAgKzEsOTkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMTIs
IEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMgYXJlCisgKiBtZXQ6CisgKgorICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAg
ICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUKKyAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIKKyAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqIGRpc3RyaWJ1dGlvbi4KKyAqICAgICAq
IE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAq
IGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMg
ZGVyaXZlZCBmcm9tCisgKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3Jp
dHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhF
IENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1J
VEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBF
VkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVY
RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAq
IExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1
ZGUgIlNjcm9sbEFuaW1hdG9yVGVzdFJlY29yZC5oIgorCisjaW5jbHVkZSAiU2Nyb2xsYWJsZUFy
ZWEuaCIKKworI2lmIEVOQUJMRShHRVNUVVJFX0VWRU5UUykKKyNpbmNsdWRlICJQbGF0Zm9ybUdl
c3R1cmVFdmVudC5oIgorI2VuZGlmCisKKyNpbmNsdWRlIDxzdGRpby5oPgorCituYW1lc3BhY2Ug
V2ViQ29yZSB7CisKK1Njcm9sbEFuaW1hdG9yVGVzdFJlY29yZDo6U2Nyb2xsQW5pbWF0b3JUZXN0
UmVjb3JkKCkKKyAgICA6IFNjcm9sbEFuaW1hdG9yKDApCisgICAgLCBtX3Rlc3RSZWNvcmQoMCkK
K3sKK30KKworUGFzc093blB0cjxTY3JvbGxBbmltYXRvcj4gU2Nyb2xsQW5pbWF0b3JUZXN0UmVj
b3JkOjpjcmVhdGUoUGFzc093blB0cjxTY3JvbGxBbmltYXRvcj4gb3JpZ2luYWwpCit7CisgICAg
U2Nyb2xsQW5pbWF0b3JUZXN0UmVjb3JkKiB0ZXN0QW5pbWF0b3IgPSBuZXcgU2Nyb2xsQW5pbWF0
b3JUZXN0UmVjb3JkKCk7CisgICAgdGVzdEFuaW1hdG9yLT5tX2FjdHVhbFNjcm9sbEFuaW1hdG9y
ID0gb3JpZ2luYWw7CisgICAgcmV0dXJuIGFkb3B0UHRyKHN0YXRpY19jYXN0PFNjcm9sbEFuaW1h
dG9yKj4odGVzdEFuaW1hdG9yKSk7Cit9CisKK1Njcm9sbEFuaW1hdG9yVGVzdFJlY29yZDo6flNj
cm9sbEFuaW1hdG9yVGVzdFJlY29yZCgpCit7Cit9CisKK2Jvb2wgU2Nyb2xsQW5pbWF0b3JUZXN0
UmVjb3JkOjpzY3JvbGwoU2Nyb2xsYmFyT3JpZW50YXRpb24gb3JpZW50YXRpb24sIFNjcm9sbEdy
YW51bGFyaXR5IGdyYW51bGFyaXR5LCBmbG9hdCBzdGVwLCBmbG9hdCBtdWx0aXBsaWVyKQorewor
ICAgIHJlY29yZEdlc3R1cmVFdmVudFByb2Nlc3NpbmcoR2VzdHVyZVRlc3RTY3JvbGwpOworICAg
IHJldHVybiBtX2FjdHVhbFNjcm9sbEFuaW1hdG9yLT5zY3JvbGwob3JpZW50YXRpb24sIGdyYW51
bGFyaXR5LCBzdGVwLCBtdWx0aXBsaWVyKTsKK30KKworI2lmIEVOQUJMRShHRVNUVVJFX0VWRU5U
UykKK3ZvaWQgU2Nyb2xsQW5pbWF0b3JUZXN0UmVjb3JkOjpoYW5kbGVHZXN0dXJlRXZlbnQoY29u
c3QgUGxhdGZvcm1HZXN0dXJlRXZlbnQmIGV2ZW50KQoreworICAgIHN3aXRjaCAoZXZlbnQudHlw
ZSgpKSB7CisgICAgY2FzZSBQbGF0Zm9ybUV2ZW50OjpHZXN0dXJlU2Nyb2xsQmVnaW46CisgICAg
ICAgIHJlY29yZEdlc3R1cmVFdmVudFByb2Nlc3NpbmcoR2VzdHVyZVRlc3RTY3JvbGxCZWdpbik7
CisgICAgICAgIG1fYWN0dWFsU2Nyb2xsQW5pbWF0b3ItPmhhbmRsZUdlc3R1cmVFdmVudChldmVu
dCk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUGxhdGZvcm1FdmVudDo6R2VzdHVyZVNjcm9s
bEVuZDoKKyAgICAgICAgcmVjb3JkR2VzdHVyZUV2ZW50UHJvY2Vzc2luZyhHZXN0dXJlVGVzdFNj
cm9sbEVuZCk7CisgICAgICAgIG1fYWN0dWFsU2Nyb2xsQW5pbWF0b3ItPmhhbmRsZUdlc3R1cmVF
dmVudChldmVudCk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUGxhdGZvcm1FdmVudDo6R2Vz
dHVyZVNjcm9sbFVwZGF0ZTogeworICAgICAgICByZWNvcmRHZXN0dXJlRXZlbnRQcm9jZXNzaW5n
KEdlc3R1cmVUZXN0U2Nyb2xsVXBkYXRlKTsKKyAgICAgICAgbV9hY3R1YWxTY3JvbGxBbmltYXRv
ci0+aGFuZGxlR2VzdHVyZUV2ZW50KGV2ZW50KTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorICAg
IGNhc2UgUGxhdGZvcm1FdmVudDo6R2VzdHVyZVRhcERvd246CisgICAgY2FzZSBQbGF0Zm9ybUV2
ZW50OjpHZXN0dXJlVGFwOgorICAgIGNhc2UgUGxhdGZvcm1FdmVudDo6R2VzdHVyZURvdWJsZVRh
cDoKKyAgICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICAgICAgQVNTRVJUX05PVF9SRUFD
SEVEKCk7CisgICAgfQorfQorI2VuZGlmCisKK3ZvaWQgU2Nyb2xsQW5pbWF0b3JUZXN0UmVjb3Jk
OjpyZWNvcmRHZXN0dXJlRXZlbnRQcm9jZXNzaW5nKEdlc3R1cmVFdmVudFRlc3RTdGF0ZSBrZXkp
Cit7CisgICAgbV90ZXN0UmVjb3JkIHw9IGtleTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29y
ZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU2Nyb2xsQW5pbWF0b3JUZXN0
UmVjb3JkLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxBbmltYXRvclRlc3RSZWNv
cmQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwLi45NTg0MjFhN2U3NTM0YjE3OTYzY2Y3NzlhZjUyODYxNTlhNWRkMmQ0
Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU2Nyb2xsQW5pbWF0
b3JUZXN0UmVjb3JkLmgKQEAgLTAsMCArMSw2OCBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAx
MiwgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucyBhcmUKKyAqIG1ldDoKKyAqCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICog
ICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZQorICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogZGlzdHJpYnV0aW9uLgorICogICAg
ICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cwor
ICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0
cyBkZXJpdmVkIGZyb20KKyAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3
cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBU
SEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5Z
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJ
TUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5P
IEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwg
RVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAor
ICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIFNjcm9sbEFuaW1hdG9yVGVz
dFJlY29yZF9oCisjZGVmaW5lIFNjcm9sbEFuaW1hdG9yVGVzdFJlY29yZF9oCisKKyNpbmNsdWRl
ICJTY3JvbGxBbmltYXRvci5oIgorI2luY2x1ZGUgPHd0Zi9Pd25QdHIuaD4KKyNpbmNsdWRlIDx3
dGYvUGFzc093blB0ci5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIFNjcm9sbGFi
bGVBcmVhOworCisjaWYgRU5BQkxFKEdFU1RVUkVfRVZFTlRTKQorY2xhc3MgUGxhdGZvcm1HZXN0
dXJlRXZlbnQ7CisjZW5kaWYKKworCitjbGFzcyBTY3JvbGxBbmltYXRvclRlc3RSZWNvcmQgOiBw
dWJsaWMgU2Nyb2xsQW5pbWF0b3IgeworcHVibGljOgorICAgIHZpcnR1YWwgflNjcm9sbEFuaW1h
dG9yVGVzdFJlY29yZCgpOworICAgIHZpcnR1YWwgYm9vbCBzY3JvbGwoU2Nyb2xsYmFyT3JpZW50
YXRpb24sIFNjcm9sbEdyYW51bGFyaXR5LCBmbG9hdCBzdGVwLCBmbG9hdCBtdWx0aXBsaWVyKTsK
KyNpZiBFTkFCTEUoR0VTVFVSRV9FVkVOVFMpCisgICAgdmlydHVhbCB2b2lkIGhhbmRsZUdlc3R1
cmVFdmVudChjb25zdCBQbGF0Zm9ybUdlc3R1cmVFdmVudCYpOworI2VuZGlmCisgICAgc3RhdGlj
IFBhc3NPd25QdHI8U2Nyb2xsQW5pbWF0b3I+IGNyZWF0ZShQYXNzT3duUHRyPFNjcm9sbEFuaW1h
dG9yPik7CisgICAgUGFzc093blB0cjxTY3JvbGxBbmltYXRvcj4gb3JpZ2luYWxTY3JvbGxBbmlt
YXRvcigpIHsgcmV0dXJuIG1fYWN0dWFsU2Nyb2xsQW5pbWF0b3IucmVsZWFzZSgpOyB9CisgICAg
dW5zaWduZWQgdGVzdFJlY29yZCgpIHsgcmV0dXJuIG1fdGVzdFJlY29yZDsgfQorICAgIHZpcnR1
YWwgYm9vbCBpc1JlY29yZGluZ0ludGVycG9zZXIoKSB7IHJldHVybiB0cnVlOyB9Citwcml2YXRl
OgorICAgIFNjcm9sbEFuaW1hdG9yVGVzdFJlY29yZCgpOworICAgIGVudW0gR2VzdHVyZUV2ZW50
VGVzdFN0YXRlIHsgR2VzdHVyZVRlc3RTY3JvbGxCZWdpbiA9IDEsIEdlc3R1cmVUZXN0U2Nyb2xs
VXBkYXRlID0gMiwgR2VzdHVyZVRlc3RTY3JvbGxFbmQgPSA0ICwgR2VzdHVyZVRlc3RTY3JvbGwg
PSA4fTsKKyAgICB2b2lkIHJlY29yZEdlc3R1cmVFdmVudFByb2Nlc3NpbmcoR2VzdHVyZUV2ZW50
VGVzdFN0YXRlKTsKKyAgICB1bnNpZ25lZCBtX3Rlc3RSZWNvcmQ7CisgICAgbXV0YWJsZSBPd25Q
dHI8U2Nyb2xsQW5pbWF0b3I+IG1fYWN0dWFsU2Nyb2xsQW5pbWF0b3I7Cit9OworCit9IC8vIG5h
bWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBTY3JvbGxBbmltYXRvclRlc3RSZWNvcmRfaApk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU2Nyb2xsVmlldy5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxWaWV3LmNwcAppbmRleCA0ZDE0ODA1ZWZmNjIzMmQ0
YzYzZDA5NjVjYWI2MzllMmI0ZDcwMjE3Li4yYTk4NWIxY2Q0NzI2ZTBmMTQ5YTE0NGE3MzgyNTAw
NTdlYjQ5N2VkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxWaWV3
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxWaWV3LmNwcApAQCAtODI2
LDYgKzgyNiwxNiBAQCBTY3JvbGxiYXIqIFNjcm9sbFZpZXc6OnNjcm9sbGJhckF0UG9pbnQoY29u
c3QgSW50UG9pbnQmIHdpbmRvd1BvaW50KQogICAgIHJldHVybiAwOwogfQogCisjaWYgRU5BQkxF
KEdFU1RVUkVfRVZFTlRTKQordm9pZCBTY3JvbGxWaWV3OjpoYW5kbGVHZXN0dXJlRXZlbnQoY29u
c3QgUGxhdGZvcm1HZXN0dXJlRXZlbnQmIGdlc3R1cmVFdmVudCkKK3sKKyAgICBpZiAocGxhdGZv
cm1XaWRnZXQoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgU2Nyb2xsYWJsZUFyZWE6OmhhbmRs
ZUdlc3R1cmVFdmVudChnZXN0dXJlRXZlbnQpOworfQorI2VuZGlmCisKIHZvaWQgU2Nyb2xsVmll
dzo6c2V0U2Nyb2xsYmFyT3ZlcmxheVN0eWxlKFNjcm9sbGJhck92ZXJsYXlTdHlsZSBvdmVybGF5
U3R5bGUpCiB7CiAgICAgU2Nyb2xsYWJsZUFyZWE6OnNldFNjcm9sbGJhck92ZXJsYXlTdHlsZShv
dmVybGF5U3R5bGUpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU2Nyb2xs
Vmlldy5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU2Nyb2xsVmlldy5oCmluZGV4IDcwNTEx
ZjE2Zjg3YzAyN2ExNjM0YzZiODBiMWE4YWE5NmU3NTk5NGMuLjk2YjIzNGI1ZDUzNjA1ZjEzNzlh
NTg1NmI1NTBkZDQwYjYyNDA5ZTAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L1Njcm9sbFZpZXcuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxWaWV3LmgK
QEAgLTIzNSw2ICsyMzUsMTAgQEAgcHVibGljOgogICAgIC8vIEZvciBwbGF0Zm9ybXMgdGhhdCBu
ZWVkIHRvIGhpdCB0ZXN0IHNjcm9sbGJhcnMgZnJvbSB3aXRoaW4gdGhlIGVuZ2luZSdzIGV2ZW50
IGhhbmRsZXJzIChsaWtlIFdpbjMyKS4KICAgICBTY3JvbGxiYXIqIHNjcm9sbGJhckF0UG9pbnQo
Y29uc3QgSW50UG9pbnQmIHdpbmRvd1BvaW50KTsKIAorI2lmIEVOQUJMRShHRVNUVVJFX0VWRU5U
UykKKyAgICB2b2lkIGhhbmRsZUdlc3R1cmVFdmVudChjb25zdCBQbGF0Zm9ybUdlc3R1cmVFdmVu
dCYpOworI2VuZGlmCisKICAgICBJbnRQb2ludCBjb252ZXJ0Q2hpbGRUb1NlbGYoY29uc3QgV2lk
Z2V0KiBjaGlsZCwgY29uc3QgSW50UG9pbnQmIHBvaW50KSBjb25zdAogICAgIHsKICAgICAgICAg
SW50UG9pbnQgbmV3UG9pbnQgPSBwb2ludDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL1Njcm9sbGFibGVBcmVhLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1Njcm9s
bGFibGVBcmVhLmNwcAppbmRleCA2NmY3MjkyYjJmMjFkMzhlMGNiODFlZTAxNTM5MmYxMjhlZTQ3
YjkxLi5kZmQ2ZTcxNzFmMTc1ZTA2OWViYmQyOGI4N2E2ODE5MWQ0ZjQ5NGExIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxhYmxlQXJlYS5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vU2Nyb2xsYWJsZUFyZWEuY3BwCkBAIC0zNyw3ICszNyw5IEBACiAj
aW5jbHVkZSAiRmxvYXRQb2ludC5oIgogI2luY2x1ZGUgIlBsYXRmb3JtV2hlZWxFdmVudC5oIgog
I2luY2x1ZGUgIlNjcm9sbEFuaW1hdG9yLmgiCisjaW5jbHVkZSAiU2Nyb2xsQW5pbWF0b3JUZXN0
UmVjb3JkLmgiCiAjaW5jbHVkZSAiU2Nyb2xsYmFyVGhlbWUuaCIKKyNpbmNsdWRlIDx3dGYvT3du
UHRyLmg+CiAjaW5jbHVkZSA8d3RmL1Bhc3NPd25QdHIuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUg
ewpAQCAtMTY0LDYgKzE2NiwxMyBAQCBib29sIFNjcm9sbGFibGVBcmVhOjpoYW5kbGVXaGVlbEV2
ZW50KGNvbnN0IFBsYXRmb3JtV2hlZWxFdmVudCYgd2hlZWxFdmVudCkKICAgICByZXR1cm4gc2Ny
b2xsQW5pbWF0b3IoKS0+aGFuZGxlV2hlZWxFdmVudCh3aGVlbEV2ZW50KTsKIH0KIAorI2lmIEVO
QUJMRShHRVNUVVJFX0VWRU5UUykKK3ZvaWQgU2Nyb2xsYWJsZUFyZWE6OmhhbmRsZUdlc3R1cmVF
dmVudChjb25zdCBQbGF0Zm9ybUdlc3R1cmVFdmVudCYgZ2VzdHVyZUV2ZW50KQoreworICAgIHNj
cm9sbEFuaW1hdG9yKCktPmhhbmRsZUdlc3R1cmVFdmVudChnZXN0dXJlRXZlbnQpOworfQorI2Vu
ZGlmCisKIC8vIE5PVEU6IE9ubHkgY2FsbGVkIGZyb20gSW50ZXJuYWxzIGZvciB0ZXN0aW5nLgog
dm9pZCBTY3JvbGxhYmxlQXJlYTo6c2V0U2Nyb2xsT2Zmc2V0RnJvbUludGVybmFscyhjb25zdCBJ
bnRQb2ludCYgb2Zmc2V0KQogewpAQCAtMzQyLDQgKzM1MSwyMiBAQCBib29sIFNjcm9sbGFibGVB
cmVhOjpoYXNMYXllckZvclNjcm9sbENvcm5lcigpIGNvbnN0CiAjZW5kaWYKIH0KIAordm9pZCBT
Y3JvbGxhYmxlQXJlYTo6ZW5hYmxlSW50ZXJwb3NlZFNjcm9sbEFuaW1hdG9yKCkKK3sKKyAgICBz
Y3JvbGxBbmltYXRvcigpOyAvLyBFbnN1cmVzIHRoYXQgdGhlIGFjdHVhbCBTY3JvbGxBbmltYXRv
ciBleGlzdHMuCisgICAgQVNTRVJUKG1fc2Nyb2xsQW5pbWF0b3IpOworICAgIG1fc2Nyb2xsQW5p
bWF0b3IgPSBTY3JvbGxBbmltYXRvclRlc3RSZWNvcmQ6OmNyZWF0ZShtX3Njcm9sbEFuaW1hdG9y
LnJlbGVhc2UoKSk7Cit9CisKK3Vuc2lnbmVkIFNjcm9sbGFibGVBcmVhOjpxdWVyeUFuZERpc2Nh
cmRJbnRlcnBvc2VkQW5pbWF0b3IoKQoreworICAgIGlmICghbV9zY3JvbGxBbmltYXRvci0+aXNS
ZWNvcmRpbmdJbnRlcnBvc2VyKCkpCisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworCisg
ICAgT3duUHRyPFNjcm9sbEFuaW1hdG9yPiBhbmltYXRvciA9IG1fc2Nyb2xsQW5pbWF0b3IucmVs
ZWFzZSgpOworICAgIFNjcm9sbEFuaW1hdG9yVGVzdFJlY29yZCogaW50ZXJwb3NlZFJlY29yZGlu
Z0FuaW1hdG9yID0gc3RhdGljX2Nhc3Q8U2Nyb2xsQW5pbWF0b3JUZXN0UmVjb3JkKj4oYW5pbWF0
b3IuZ2V0KCkpOworICAgIG1fc2Nyb2xsQW5pbWF0b3IgPSBpbnRlcnBvc2VkUmVjb3JkaW5nQW5p
bWF0b3ItPm9yaWdpbmFsU2Nyb2xsQW5pbWF0b3IoKTsKKyAgICByZXR1cm4gaW50ZXJwb3NlZFJl
Y29yZGluZ0FuaW1hdG9yLT50ZXN0UmVjb3JkKCk7Cit9CisKIH0gLy8gbmFtZXNwYWNlIFdlYkNv
cmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1Njcm9sbGFibGVBcmVhLmgg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxhYmxlQXJlYS5oCmluZGV4IGNiZTM4ZDc2
NjAzNTNkMThiMTNiYmMxZmI3ZDRmNDVkMzI2MmY3ZGMuLjQ2Yzg1NDA0OWM4YWUwMWM0MTA1MzM0
MTlhMjE4NThhMjZlMjAxNmIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1Nj
cm9sbGFibGVBcmVhLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU2Nyb2xsYWJsZUFy
ZWEuaApAQCAtNTYsNiArNTYsOSBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCBib29sIHJlcXVlc3RT
Y3JvbGxQb3NpdGlvblVwZGF0ZShjb25zdCBJbnRQb2ludCYpIHsgcmV0dXJuIGZhbHNlOyB9CiAK
ICAgICBib29sIGhhbmRsZVdoZWVsRXZlbnQoY29uc3QgUGxhdGZvcm1XaGVlbEV2ZW50Jik7Cisj
aWYgRU5BQkxFKEdFU1RVUkVfRVZFTlRTKQorICAgIHZvaWQgaGFuZGxlR2VzdHVyZUV2ZW50KGNv
bnN0IFBsYXRmb3JtR2VzdHVyZUV2ZW50Jik7CisjZW5kaWYKIAogICAgIC8vIEZ1bmN0aW9ucyBm
b3IgY29udHJvbGxpbmcgaWYgeW91IGNhbiBzY3JvbGwgcGFzdCB0aGUgZW5kIG9mIHRoZSBkb2N1
bWVudC4KICAgICBib29sIGNvbnN0cmFpbnNTY3JvbGxpbmdUb0NvbnRlbnRFZGdlKCkgY29uc3Qg
eyByZXR1cm4gbV9jb25zdHJhaW5zU2Nyb2xsaW5nVG9Db250ZW50RWRnZTsgfQpAQCAtMTU1LDYg
KzE1OCw4IEBAIHB1YmxpYzoKIAogICAgIC8vIE5PVEU6IE9ubHkgY2FsbGVkIGZyb20gSW50ZXJu
YWxzIGZvciB0ZXN0aW5nLgogICAgIHZvaWQgc2V0U2Nyb2xsT2Zmc2V0RnJvbUludGVybmFscyhj
b25zdCBJbnRQb2ludCYpOworICAgIHZvaWQgZW5hYmxlSW50ZXJwb3NlZFNjcm9sbEFuaW1hdG9y
KCk7CisgICAgdW5zaWduZWQgcXVlcnlBbmREaXNjYXJkSW50ZXJwb3NlZEFuaW1hdG9yKCk7CiAK
IHByb3RlY3RlZDoKICAgICBTY3JvbGxhYmxlQXJlYSgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL1JlbmRlckJveC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyQm94LmNwcAppbmRleCBkZDhiYzM5MGU5OGM4N2NlZjY0MWNiZTFlMWM1NjY5ZmNhN2Uw
NDMwLi4zYWM2MjBmZWVlMjY0YWRmZTQ5ZGQyZmEzMGUzNzMzZmU4ZmZlODc1IDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQm94LmNwcAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVyQm94LmNwcApAQCAtNjg5LDYgKzY4OSwyMyBAQCBib29sIFJl
bmRlckJveDo6c2Nyb2xsKFNjcm9sbERpcmVjdGlvbiBkaXJlY3Rpb24sIFNjcm9sbEdyYW51bGFy
aXR5IGdyYW51bGFyaXR5LAogICAgIHJldHVybiBmYWxzZTsKIH0KIAorI2lmIEVOQUJMRShHRVNU
VVJFX0VWRU5UUykKK2Jvb2wgUmVuZGVyQm94OjpnZXN0dXJlKGNvbnN0IFBsYXRmb3JtR2VzdHVy
ZUV2ZW50JiBldmVudCkKK3sKKyAgICAvLyBmcHJpbnRmKHN0ZGVyciwgIlJlbmRlckJveDo6Z2Vz
dHVyZSAlbHhcbiIsICh1bnNpZ25lZCBsb25nKXRoaXMpOworICAgIFJlbmRlckxheWVyKiByZW5k
ZXJMYXllciA9IGxheWVyKCk7CisgICAgaWYgKHJlbmRlckxheWVyICYmIChyZW5kZXJMYXllci0+
dmVydGljYWxTY3JvbGxiYXIoKSB8fCByZW5kZXJMYXllci0+aG9yaXpvbnRhbFNjcm9sbGJhcigp
KSkgeworICAgICAgcmVuZGVyTGF5ZXItPmhhbmRsZUdlc3R1cmVFdmVudChldmVudCk7CisgICAg
ICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKKyAgICBSZW5kZXJCbG9jayogYiA9IGNvbnRhaW5pbmdC
bG9jaygpOworICAgIGlmIChiICYmICFiLT5pc1JlbmRlclZpZXcoKSkKKyAgICAgICAgcmV0dXJu
IGItPmdlc3R1cmUoZXZlbnQpOworICAgIHJldHVybiBmYWxzZTsKK30KKyNlbmRpZgorCiBib29s
IFJlbmRlckJveDo6bG9naWNhbFNjcm9sbChTY3JvbGxMb2dpY2FsRGlyZWN0aW9uIGRpcmVjdGlv
biwgU2Nyb2xsR3JhbnVsYXJpdHkgZ3JhbnVsYXJpdHksIGZsb2F0IG11bHRpcGxpZXIsIE5vZGUq
KiBzdG9wTm9kZSkKIHsKICAgICBib29sIHNjcm9sbGVkID0gZmFsc2U7CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQm94LmggYi9Tb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVyQm94LmgKaW5kZXggNWEzNmQ4MDJlYTIyOWNlNjEwNTY0ZTBhNmJmZjIyNWEy
MGMxY2Y1ZC4uNzczNTZmZmYzYzZhM2ExZmM0MTBkMGU5YWQ0YWQzYjY1MGVhNzlhZSAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJveC5oCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCb3guaApAQCAtMzEsNiArMzEsNyBAQCBuYW1lc3BhY2Ug
V2ViQ29yZSB7CiAKIGNsYXNzIFJlbmRlckJveFJlZ2lvbkluZm87CiBjbGFzcyBSZW5kZXJSZWdp
b247CitjbGFzcyBQbGF0Zm9ybUdlc3R1cmVFdmVudDsKIHN0cnVjdCBQYWludEluZm87CiAKIGVu
dW0gTG9naWNhbFdpZHRoVHlwZSB7IExvZ2ljYWxXaWR0aCwgTWluTG9naWNhbFdpZHRoLCBNYXhM
b2dpY2FsV2lkdGggfTsKQEAgLTQ1MSw2ICs0NTIsOSBAQCBwdWJsaWM6CiAgICAgSW50U2l6ZSBj
YWNoZWRTaXplRm9yT3ZlcmZsb3dDbGlwKCkgY29uc3Q7CiAKICAgICB2aXJ0dWFsIGJvb2wgaGFz
UmVsYXRpdmVEaW1lbnNpb25zKCkgY29uc3Q7CisjaWYgRU5BQkxFKEdFU1RVUkVfRVZFTlRTKQor
ICAgIHZpcnR1YWwgYm9vbCBnZXN0dXJlKGNvbnN0IFBsYXRmb3JtR2VzdHVyZUV2ZW50Jik7Cisj
ZW5kaWYKIAogcHJvdGVjdGVkOgogICAgIHZpcnR1YWwgdm9pZCB3aWxsQmVEZXN0cm95ZWQoKTsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Rlc3RpbmcvSW50ZXJuYWxzLmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL3Rlc3RpbmcvSW50ZXJuYWxzLmNwcAppbmRleCA2MTAzYjZiMWIwMjIzZGYzNzBl
YmVlYWQyYzVlNTc1Zjc3YzA0MWNhLi4yMjQ3NjAwNGI5ZjQyNmQ4YzExOWZjYzc2NGY2N2ZkMWY1
N2U2Yjc5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS90ZXN0aW5nL0ludGVybmFscy5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvdGVzdGluZy9JbnRlcm5hbHMuY3BwCkBAIC00NiwxNCArNDYs
MjIgQEAKICNpbmNsdWRlICJOb2RlUmVuZGVyaW5nQ29udGV4dC5oIgogI2luY2x1ZGUgIlBhZ2Uu
aCIKICNpbmNsdWRlICJSYW5nZS5oIgorI2luY2x1ZGUgIlJlbmRlckJsb2NrLmgiCisjaW5jbHVk
ZSAiUmVuZGVyQm94TW9kZWxPYmplY3QuaCIKKyNpbmNsdWRlICJSZW5kZXJMYXllci5oIgogI2lu
Y2x1ZGUgIlJlbmRlck9iamVjdC5oIgogI2luY2x1ZGUgIlJlbmRlclRyZWVBc1RleHQuaCIKKyNp
bmNsdWRlICJSZW5kZXJWaWV3LmgiCiAjaW5jbHVkZSAiU2V0dGluZ3MuaCIKICNpbmNsdWRlICJT
aGFkb3dSb290LmgiCiAjaW5jbHVkZSAiU2hhZG93VHJlZS5oIgogI2luY2x1ZGUgIlNwZWxsQ2hl
Y2tlci5oIgogI2luY2x1ZGUgIlRleHRJdGVyYXRvci5oIgogCisjaWYgRU5BQkxFKEdFU1RVUkVf
RVZFTlRTKQorI2luY2x1ZGUgIlBsYXRmb3JtR2VzdHVyZUV2ZW50LmgiCisjZW5kaWYKKwogI2lm
IEVOQUJMRShTSEFET1dfRE9NKQogI2luY2x1ZGUgIlJ1bnRpbWVFbmFibGVkRmVhdHVyZXMuaCIK
ICNlbHNlCkBAIC01NDYsNiArNTU0LDIwNyBAQCB1bnNpZ25lZCBJbnRlcm5hbHM6Omxlbmd0aEZy
b21SYW5nZShFbGVtZW50KiBzY29wZSwgY29uc3QgUmFuZ2UqIHJhbmdlLCBFeGNlcHRpbwogICAg
IHJldHVybiBsZW5ndGg7CiB9CiAKK3ZvaWQgSW50ZXJuYWxzOjplbmFibGVHZXN0dXJlU2Nyb2xs
RXZlbnRSZWNvcmQoRWxlbWVudCogZWxlbWVudCwgRXhjZXB0aW9uQ29kZSYgZWMpCit7CisjaWYg
RU5BQkxFKEdFU1RVUkVfRVZFTlRTKQorICAgIGlmICghZWxlbWVudCkgeworICAgICAgICBlYyA9
IElOVkFMSURfQUNDRVNTX0VSUjsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIFJlbmRl
ck9iamVjdCogcmVuZGVyZXIgPSBlbGVtZW50LT5yZW5kZXJlcigpOworICAgIGlmICghcmVuZGVy
ZXIpIHsKKyAgICAgICAgZWMgPSBJTlZBTElEX05PREVfVFlQRV9FUlI7CisgICAgICAgIHJldHVy
bjsKKyAgICB9CisKKyAgICBSZW5kZXJCb3gqIGJveCA9IHJlbmRlcmVyLT5lbmNsb3NpbmdCb3go
KTsKKyAgICB3aGlsZSAoYm94KSB7CisgICAgICAgIFJlbmRlckxheWVyKiByZW5kZXJMYXllciA9
IGJveC0+bGF5ZXIoKTsKKyAgICAgICAgaWYgKHJlbmRlckxheWVyKSB7CisgICAgICAgICAgIHJl
bmRlckxheWVyLT5lbmFibGVJbnRlcnBvc2VkU2Nyb2xsQW5pbWF0b3IoKTsKKyAgICAgICAgICAg
cmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAgUmVuZGVyQmxvY2sqIGJsb2NrID0gYm94LT5j
b250YWluaW5nQmxvY2soKTsKKyAgICAgICAgaWYgKCFibG9jaykgeworICAgICAgICAgICAgZWMg
PSBJTlZBTElEX05PREVfVFlQRV9FUlI7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0K
KworICAgICAgICBpZiAoYmxvY2stPmlzUmVuZGVyVmlldygpKQorICAgICAgICAgICAgcmV0dXJu
IHRvUmVuZGVyVmlldyhibG9jayktPmZyYW1lVmlldygpLT5lbmFibGVJbnRlcnBvc2VkU2Nyb2xs
QW5pbWF0b3IoKTsKKyAgICAgICAgYm94ID0gYmxvY2s7CisgICAgfQorICAgIGVjID0gSU5WQUxJ
RF9OT0RFX1RZUEVfRVJSOworICAgIHJldHVybjsKKyNlbHNlCisgICAgVU5VU0VEX1BBUkFNKGVs
ZW1lbnQpOworICAgIGVjID0gSU5WQUxJRF9BQ0NFU1NfRVJSOworICAgIHJldHVybjsKKyNlbmRp
ZgorfQorCitpbnQgSW50ZXJuYWxzOjpyZWNvcmRPZkdlc3R1cmVTY3JvbGxFdmVudHMoRWxlbWVu
dCogZWxlbWVudCwgRXhjZXB0aW9uQ29kZSYgZWMpCit7CisjaWYgRU5BQkxFKEdFU1RVUkVfRVZF
TlRTKQorICAgIGlmICghZWxlbWVudCkgeworICAgICAgICBlYyA9IElOVkFMSURfQUNDRVNTX0VS
UjsKKyAgICAgICAgcmV0dXJuIC0xOworICAgIH0KKworICAgIFJlbmRlck9iamVjdCogcmVuZGVy
ZXIgPSBlbGVtZW50LT5yZW5kZXJlcigpOworICAgIGlmICghcmVuZGVyZXIpIHsKKyAgICAgICAg
ZWMgPSBJTlZBTElEX05PREVfVFlQRV9FUlI7CisgICAgICAgIHJldHVybiAtMTsKKyAgICB9CisK
KyAgICBSZW5kZXJCb3gqIGJveCA9IHJlbmRlcmVyLT5lbmNsb3NpbmdCb3goKTsKKyAgICB3aGls
ZSAoYm94KSB7CisgICAgICAgIFJlbmRlckxheWVyKiByZW5kZXJMYXllciA9IGJveC0+bGF5ZXIo
KTsKKyAgICAgICAgaWYgKHJlbmRlckxheWVyKQorICAgICAgICAgICByZXR1cm4gcmVuZGVyTGF5
ZXItPnF1ZXJ5QW5kRGlzY2FyZEludGVycG9zZWRBbmltYXRvcigpOworCisgICAgICAgIFJlbmRl
ckJsb2NrKiBibG9jayA9IGJveC0+Y29udGFpbmluZ0Jsb2NrKCk7CisgICAgICAgIGlmICghYmxv
Y2spIHsKKyAgICAgICAgICAgIGVjID0gSU5WQUxJRF9OT0RFX1RZUEVfRVJSOworICAgICAgICAg
ICAgcmV0dXJuIC0xOworICAgICAgICB9CisKKyAgICAgICAgaWYgKGJsb2NrLT5pc1JlbmRlclZp
ZXcoKSkKKyAgICAgICAgICAgIHJldHVybiB0b1JlbmRlclZpZXcoYmxvY2spLT5mcmFtZVZpZXco
KS0+cXVlcnlBbmREaXNjYXJkSW50ZXJwb3NlZEFuaW1hdG9yKCk7CisgICAgICAgIGJveCA9IGJs
b2NrOworICAgIH0KKyAgICBlYyA9IElOVkFMSURfTk9ERV9UWVBFX0VSUjsKKyAgICByZXR1cm4g
LTE7CisjZWxzZQorICAgIFVOVVNFRF9QQVJBTShlbGVtZW50KTsKKyAgICBlYyA9IElOVkFMSURf
QUNDRVNTX0VSUjsKKyAgICByZXR1cm4gLTE7CisjZW5kaWYKK30KKwordm9pZCBJbnRlcm5hbHM6
OmVuYWJsZUdlc3R1cmVTY3JvbGxFdmVudFJlY29yZChEb2N1bWVudCogZG9jdW1lbnQsIEV4Y2Vw
dGlvbkNvZGUmIGVjKQoreworI2lmIEVOQUJMRShHRVNUVVJFX0VWRU5UUykKKyAgICBpZiAoIWRv
Y3VtZW50KSB7CisgICAgICAgIGVjID0gSU5WQUxJRF9BQ0NFU1NfRVJSOworICAgICAgICByZXR1
cm47CisgICAgfQorCisgICAgRnJhbWVWaWV3KiBmcmFtZSA9IGRvY3VtZW50LT52aWV3KCk7Cisg
ICAgaWYgKCFmcmFtZSkgeworICAgICAgICBlYyA9IElOVkFMSURfTk9ERV9UWVBFX0VSUjsKKyAg
ICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlmICghZnJhbWUtPnNjcm9sbEFuaW1hdG9yKCkp
IHsKKyAgICAgIGVjID0gSU5WQUxJRF9OT0RFX1RZUEVfRVJSOworICAgICAgcmV0dXJuOworICAg
IH0KKworICAgIGZyYW1lLT5lbmFibGVJbnRlcnBvc2VkU2Nyb2xsQW5pbWF0b3IoKTsKKyAgICBy
ZXR1cm47CisjZWxzZQorICAgIFVOVVNFRF9QQVJBTShkb2N1bWVudCk7CisgICAgZWMgPSBJTlZB
TElEX0FDQ0VTU19FUlI7CisgICAgcmV0dXJuOworI2VuZGlmCit9CisKK2ludCBJbnRlcm5hbHM6
OnJlY29yZE9mR2VzdHVyZVNjcm9sbEV2ZW50cyhEb2N1bWVudCogZG9jdW1lbnQsIEV4Y2VwdGlv
bkNvZGUmIGVjKQoreworI2lmIEVOQUJMRShHRVNUVVJFX0VWRU5UUykKKyAgICBpZiAoIWRvY3Vt
ZW50KSB7CisgICAgICAgIGVjID0gSU5WQUxJRF9BQ0NFU1NfRVJSOworICAgICAgICByZXR1cm4g
LTE7CisgICAgfQorCisgICAgRnJhbWVWaWV3KiBmcmFtZSA9IGRvY3VtZW50LT52aWV3KCk7Cisg
ICAgaWYgKCFmcmFtZSkgeworICAgICAgICBlYyA9IElOVkFMSURfTk9ERV9UWVBFX0VSUjsKKyAg
ICAgICAgcmV0dXJuIC0xOworICAgIH0KKworICAgIGlmICghZnJhbWUtPnNjcm9sbEFuaW1hdG9y
KCkpIHsKKyAgICAgIGVjID0gSU5WQUxJRF9OT0RFX1RZUEVfRVJSOworICAgICAgcmV0dXJuIC0x
OworICAgIH0KKworICAgIHJldHVybiBmcmFtZS0+cXVlcnlBbmREaXNjYXJkSW50ZXJwb3NlZEFu
aW1hdG9yKCk7CisjZWxzZQorICAgIFVOVVNFRF9QQVJBTShkb2N1bWVudCk7CisgICAgZWMgPSBJ
TlZBTElEX0FDQ0VTU19FUlI7CisgICAgcmV0dXJuIC0xOworI2VuZGlmCit9CisKKyNpZiBFTkFC
TEUoR0VTVFVSRV9FVkVOVFMpCitzdGF0aWMKK3ZvaWQgc2VuZEdlc3R1cmVFdmVudChEb2N1bWVu
dCogZG9jdW1lbnQsIFBsYXRmb3JtRXZlbnQ6OlR5cGUgdHlwZSwgY29uc3QgZmxvYXQgcG9zWCwg
Y29uc3QgZmxvYXQgcG9zWSwgY29uc3QgZmxvYXQgZGVsdGFYLCBjb25zdCBmbG9hdCBkZWx0YVks
IEV4Y2VwdGlvbkNvZGUmIGVjKQoreworICAgIGlmICghZG9jdW1lbnQpIHsKKyAgICAgICAgZWMg
PSBJTlZBTElEX0FDQ0VTU19FUlI7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgRnJhbWUq
IGZyYW1lID0gZG9jdW1lbnQtPmZyYW1lKCk7CisgICAgaWYgKCFmcmFtZSkgeworICAgICAgICBl
YyA9IElOVkFMSURfTk9ERV9UWVBFX0VSUjsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAg
IEludFBvaW50IHBvc2l0aW9uKHBvc1gsIHBvc1kpOworICAgIFBsYXRmb3JtR2VzdHVyZUV2ZW50
IGdlc3R1cmVFdmVudCh0eXBlLCBwb3NpdGlvbiwgcG9zaXRpb24sIDAuLCBkZWx0YVgsIGRlbHRh
WSwgZmFsc2UsIGZhbHNlLCBmYWxzZSwgZmFsc2UpOworICAgIGZyYW1lLT5ldmVudEhhbmRsZXIo
KS0+aGFuZGxlR2VzdHVyZUV2ZW50KGdlc3R1cmVFdmVudCk7Cit9CisjZW5kaWYKKworaW50IElu
dGVybmFsczo6c2VuZFNjcm9sbEJlZ2luR2VzdHVyZUV2ZW50KERvY3VtZW50KiBkb2N1bWVudCwg
Y29uc3QgZmxvYXQgcG9zWCwgY29uc3QgZmxvYXQgcG9zWSwgRXhjZXB0aW9uQ29kZSYgZWMpCit7
CisjaWYgRU5BQkxFKEdFU1RVUkVfRVZFTlRTKQorICAgIHNlbmRHZXN0dXJlRXZlbnQoZG9jdW1l
bnQsIFBsYXRmb3JtRXZlbnQ6Okdlc3R1cmVTY3JvbGxCZWdpbiwgcG9zWCwgcG9zWSwgMC5mLCAw
LmYsIGVjKTsKKyAgICByZXR1cm4gMDsKKyNlbHNlCisgICAgVU5VU0VEX1BBUkFNKGRvY3VtZW50
KTsKKyAgICBVTlVTRURfUEFSQU0ocG9zWCk7CisgICAgVU5VU0VEX1BBUkFNKHBvc1kpOworICAg
IGVjID0gSU5WQUxJRF9BQ0NFU1NfRVJSOworICAgIHJldHVybiAtMTsKKyNlbmRpZgorfQorCitp
bnQgSW50ZXJuYWxzOjpzZW5kU2Nyb2xsVXBkYXRlR2VzdHVyZUV2ZW50KERvY3VtZW50KiBkb2N1
bWVudCwgY29uc3QgZmxvYXQgcG9zWCwgY29uc3QgZmxvYXQgcG9zWSwgY29uc3QgZmxvYXQgZGVs
dGFYLCBjb25zdCBmbG9hdCBkZWx0YVksIEV4Y2VwdGlvbkNvZGUmIGVjKQoreworI2lmIEVOQUJM
RShHRVNUVVJFX0VWRU5UUykKKyAgICBzZW5kR2VzdHVyZUV2ZW50KGRvY3VtZW50LCBQbGF0Zm9y
bUV2ZW50OjpHZXN0dXJlU2Nyb2xsVXBkYXRlLCBwb3NYLCBwb3NZLCBkZWx0YVgsIGRlbHRhWSwg
ZWMpOworICAgIHJldHVybiAwOworI2Vsc2UKKyAgICBVTlVTRURfUEFSQU0oZG9jdW1lbnQpOwor
ICAgIFVOVVNFRF9QQVJBTShwb3NYKTsKKyAgICBVTlVTRURfUEFSQU0ocG9zWSk7CisgICAgVU5V
U0VEX1BBUkFNKGRlbHRhWCk7CisgICAgVU5VU0VEX1BBUkFNKGRlbHRhWSk7CisgICAgZWMgPSBJ
TlZBTElEX0FDQ0VTU19FUlI7CisgICAgcmV0dXJuIC0xOworI2VuZGlmCit9CisKK2ludCBJbnRl
cm5hbHM6OnNlbmRTY3JvbGxFbmRHZXN0dXJlRXZlbnQoRG9jdW1lbnQqIGRvY3VtZW50LCBjb25z
dCBmbG9hdCBwb3NYLCBjb25zdCBmbG9hdCBwb3NZLCBjb25zdCBmbG9hdCBkZWx0YVgsIGNvbnN0
IGZsb2F0IGRlbHRhWSwgRXhjZXB0aW9uQ29kZSYgZWMpCit7CisjaWYgRU5BQkxFKEdFU1RVUkVf
RVZFTlRTKQorICAgIHNlbmRHZXN0dXJlRXZlbnQoZG9jdW1lbnQsIFBsYXRmb3JtRXZlbnQ6Okdl
c3R1cmVTY3JvbGxFbmQsIHBvc1gsIHBvc1ksIGRlbHRhWCwgZGVsdGFZLCBlYyk7CisgICAgcmV0
dXJuIDA7CisjZWxzZQorICAgIFVOVVNFRF9QQVJBTShkb2N1bWVudCk7CisgICAgVU5VU0VEX1BB
UkFNKHBvc1gpOworICAgIFVOVVNFRF9QQVJBTShwb3NZKTsKKyAgICBVTlVTRURfUEFSQU0oZGVs
dGFYKTsKKyAgICBVTlVTRURfUEFSQU0oZGVsdGFZKTsKKyAgICBlYyA9IElOVkFMSURfQUNDRVNT
X0VSUjsKKyAgICByZXR1cm4gLTE7CisjZW5kaWYKK30KKwogaW50IEludGVybmFsczo6bGFzdFNw
ZWxsQ2hlY2tSZXF1ZXN0U2VxdWVuY2UoRG9jdW1lbnQqIGRvY3VtZW50LCBFeGNlcHRpb25Db2Rl
JiBlYykKIHsKICAgICBTcGVsbENoZWNrZXIqIGNoZWNrZXIgPSBzcGVsbGNoZWNrZXIoZG9jdW1l
bnQpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvdGVzdGluZy9JbnRlcm5hbHMuaCBiL1Nv
dXJjZS9XZWJDb3JlL3Rlc3RpbmcvSW50ZXJuYWxzLmgKaW5kZXggOTE5YzJmMGFkYTRjMmJiZTBj
NzFlM2EzNzFhMmViOGI3ODgwMTFjZS4uNDI4NzkzOWI3Yjc5NTU2MTI3OTYxMGIxZGY2YTRlNDA2
MjQwMDRjYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvdGVzdGluZy9JbnRlcm5hbHMuaAor
KysgYi9Tb3VyY2UvV2ViQ29yZS90ZXN0aW5nL0ludGVybmFscy5oCkBAIC0xMjQsNiArMTI0LDE1
IEBAIHB1YmxpYzoKIAogICAgIEludGVybmFsU2V0dGluZ3MqIHNldHRpbmdzKCkgY29uc3QgeyBy
ZXR1cm4gbV9zZXR0aW5ncy5nZXQoKTsgfQogCisgICAgdm9pZCBlbmFibGVHZXN0dXJlU2Nyb2xs
RXZlbnRSZWNvcmQoRWxlbWVudCosIEV4Y2VwdGlvbkNvZGUmKTsKKyAgICBpbnQgcmVjb3JkT2ZH
ZXN0dXJlU2Nyb2xsRXZlbnRzKEVsZW1lbnQqLCBFeGNlcHRpb25Db2RlJik7CisgICAgdm9pZCBl
bmFibGVHZXN0dXJlU2Nyb2xsRXZlbnRSZWNvcmQoRG9jdW1lbnQqLCBFeGNlcHRpb25Db2RlJik7
CisgICAgaW50IHJlY29yZE9mR2VzdHVyZVNjcm9sbEV2ZW50cyhEb2N1bWVudCosIEV4Y2VwdGlv
bkNvZGUmKTsKKworICAgIGludCBzZW5kU2Nyb2xsQmVnaW5HZXN0dXJlRXZlbnQoRG9jdW1lbnQq
LCBjb25zdCBmbG9hdCBwb3NYLCBjb25zdCBmbG9hdCBwb3NZLCBFeGNlcHRpb25Db2RlJik7Cisg
ICAgaW50IHNlbmRTY3JvbGxVcGRhdGVHZXN0dXJlRXZlbnQoRG9jdW1lbnQqLCBjb25zdCBmbG9h
dCBwb3NYLCBjb25zdCBmbG9hdCBwb3NZLCBjb25zdCBmbG9hdCBkZWx0YVgsIGNvbnN0IGZsb2F0
IGRlbHRhWSwgRXhjZXB0aW9uQ29kZSYpOworICAgIGludCBzZW5kU2Nyb2xsRW5kR2VzdHVyZUV2
ZW50KERvY3VtZW50KiwgY29uc3QgZmxvYXQgcG9zWCwgY29uc3QgZmxvYXQgcG9zWSwgY29uc3Qg
ZmxvYXQgZGVsdGFYLCBjb25zdCBmbG9hdCBkZWx0YVksIEV4Y2VwdGlvbkNvZGUmKTsKKwogcHJp
dmF0ZToKICAgICBleHBsaWNpdCBJbnRlcm5hbHMoRG9jdW1lbnQqKTsKICAgICBEb2N1bWVudE1h
cmtlciogbWFya2VyQXQoTm9kZSosIGNvbnN0IFN0cmluZyYgbWFya2VyVHlwZSwgdW5zaWduZWQg
aW5kZXgsIEV4Y2VwdGlvbkNvZGUmKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Rlc3Rp
bmcvSW50ZXJuYWxzLmlkbCBiL1NvdXJjZS9XZWJDb3JlL3Rlc3RpbmcvSW50ZXJuYWxzLmlkbApp
bmRleCA4ZjgyNmNkYTY4MTQ5YzY4NTA0Zjg2ZDRlZDZkNDMxZDAwZGFlOGJlLi44YTU2YzYxYmE5
ZDRmZjMyYmE5MzEyNTkwMThhZjFmMjc2YWVjZmM3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS90ZXN0aW5nL0ludGVybmFscy5pZGwKKysrIGIvU291cmNlL1dlYkNvcmUvdGVzdGluZy9JbnRl
cm5hbHMuaWRsCkBAIC04Myw2ICs4MywxNSBAQCBtb2R1bGUgd2luZG93IHsKICAgICAgICAgdW5z
aWduZWQgbG9uZyBsb2NhdGlvbkZyb21SYW5nZShpbiBFbGVtZW50IHNjb3BlLCBpbiBSYW5nZSBy
YW5nZSkgcmFpc2VzIChET01FeGNlcHRpb24pOwogICAgICAgICB1bnNpZ25lZCBsb25nIGxlbmd0
aEZyb21SYW5nZShpbiBFbGVtZW50IHNjb3BlLCBpbiBSYW5nZSByYW5nZSkgcmFpc2VzIChET01F
eGNlcHRpb24pOwogCisgICAgICAgIHZvaWQgZW5hYmxlR2VzdHVyZVNjcm9sbEV2ZW50UmVjb3Jk
KGluIEVsZW1lbnQgdGFyZ2V0KSByYWlzZXMoRE9NRXhjZXB0aW9uKTsKKyAgICAgICAgaW50IHJl
Y29yZE9mR2VzdHVyZVNjcm9sbEV2ZW50cyhpbiBFbGVtZW50IHRhcmdldCkgcmFpc2VzKERPTUV4
Y2VwdGlvbik7CisgICAgICAgIHZvaWQgZW5hYmxlR2VzdHVyZVNjcm9sbEV2ZW50UmVjb3JkKGlu
IERvY3VtZW50IGRvY3VtZW50KSByYWlzZXMoRE9NRXhjZXB0aW9uKTsKKyAgICAgICAgaW50IHJl
Y29yZE9mR2VzdHVyZVNjcm9sbEV2ZW50cyhpbiBEb2N1bWVudCBkb2N1bWVudCkgcmFpc2VzKERP
TUV4Y2VwdGlvbik7CisKKyAgICAgICAgaW50IHNlbmRTY3JvbGxCZWdpbkdlc3R1cmVFdmVudChp
biBEb2N1bWVudCBkb2N1bWVudCwgaW4gZmxvYXQgcG9zWCwgaW4gZmxvYXQgcG9zWSkgcmFpc2Vz
KERPTUV4Y2VwdGlvbik7CisgICAgICAgIGludCBzZW5kU2Nyb2xsVXBkYXRlR2VzdHVyZUV2ZW50
KGluIERvY3VtZW50IGRvY3VtZW50LCBpbiBmbG9hdCBwb3NYLCBpbiBmbG9hdCBwb3NZLCBpbiBm
bG9hdCBkZWx0YVgsIGluIGZsb2F0IGRlbHRhWSkgcmFpc2VzKERPTUV4Y2VwdGlvbik7CisgICAg
ICAgIGludCBzZW5kU2Nyb2xsRW5kR2VzdHVyZUV2ZW50KGluIERvY3VtZW50IGRvY3VtZW50LCBp
biBmbG9hdCBwb3NYLCBpbiBmbG9hdCBwb3NZLCBpbiBmbG9hdCBkZWx0YVgsIGluIGZsb2F0IGRl
bHRhWSkgcmFpc2VzKERPTUV4Y2VwdGlvbik7CisgICAgICAgIAogICAgICAgICBsb25nIGxhc3RT
cGVsbENoZWNrUmVxdWVzdFNlcXVlbmNlKGluIERvY3VtZW50IGRvY3VtZW50KSByYWlzZXMgKERP
TUV4Y2VwdGlvbik7CiAgICAgICAgIGxvbmcgbGFzdFNwZWxsQ2hlY2tQcm9jZXNzZWRTZXF1ZW5j
ZShpbiBEb2N1bWVudCBkb2N1bWVudCkgcmFpc2VzIChET01FeGNlcHRpb24pOwogCmRpZmYgLS1n
aXQgYS9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cgYi9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKaW5kZXgg
NmFiYjI4NTlhOTJjMmNhYjczMmUxMWMzMDI5YzMxYzYyNjNjYmZhNC4uY2M3NGM5NTZmMzk1ZTU5
YjUzNjg2Njg1YTc4MjQ3NjRkOTk3MDE3YiAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvQ2hhbmdl
TG9nCisrKyBiL0xheW91dFRlc3RzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDI0IEBACisyMDEyLTAz
LTAxICBSb2JlcnQgS3JvZWdlciAgPHJqa3JvZWdlQGNocm9taXVtLm9yZz4KKworICAgICAgICBQ
bGF0Zm9ybUdlc3R1cmVFdmVudDo6aGFuZGxlR2VzdHVyZUV2ZW50IHNob3VsZCBoaXQgdGVzdCB3
aGlsZSBkaXNwYXRjaGluZyBQbGF0Zm9ybUV2ZW50OjpHZXN0dXJlU2Nyb2xsKiBldmVudHMuCisg
ICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD02NzgyMgorIAor
ICAgICAgICBUZXN0cyB0byB2ZXJpZnkgdGhhdCB0aGUgUGxhdGZvcm1FdmVudCBHZXN0dXJlU2Ny
b2xsKlR5cGUgZXZlbnRzCisgICAgICAgIGFyZSBiZWluZyBjb3JyZWN0bHkgZGlzcGF0Y2hlZCBh
bmQgdGhhdCBsYXRjaGluZyBkb2VzIG5vdCBmYWlsCisgICAgICAgIGluIHRoZSBwcmVzZW5jZSBv
ZiB0aGUgcmVtb3ZhbCBvZiB0aGUgdGFyZ2V0IGVsZW1lbnQuCisKKyAgICAgICAgUmV2aWV3ZWQg
YnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBmYXN0L2V2ZW50cy90b3VjaC9nZXN0dXJl
L3RvdWNoLWdlc3R1cmUtc2Nyb2xsLWRpdi1leHBlY3RlZC50eHQ6IEFkZGVkLgorICAgICAgICAq
IGZhc3QvZXZlbnRzL3RvdWNoL2dlc3R1cmUvdG91Y2gtZ2VzdHVyZS1zY3JvbGwtZGl2Lmh0bWw6
IEFkZGVkLgorICAgICAgICAqIGZhc3QvZXZlbnRzL3RvdWNoL2dlc3R1cmUvdG91Y2gtZ2VzdHVy
ZS1zY3JvbGwtaWZyYW1lLWV4cGVjdGVkLnR4dDogQWRkZWQuCisgICAgICAgICogZmFzdC9ldmVu
dHMvdG91Y2gvZ2VzdHVyZS90b3VjaC1nZXN0dXJlLXNjcm9sbC1pZnJhbWUuaHRtbDogQWRkZWQu
CisgICAgICAgICogZmFzdC9ldmVudHMvdG91Y2gvZ2VzdHVyZS90b3VjaC1nZXN0dXJlLXNjcm9s
bC1wYWdlLWV4cGVjdGVkLnR4dDogQWRkZWQuCisgICAgICAgICogZmFzdC9ldmVudHMvdG91Y2gv
Z2VzdHVyZS90b3VjaC1nZXN0dXJlLXNjcm9sbC1wYWdlLmh0bWw6IEFkZGVkLgorICAgICAgICAq
IGZhc3QvZXZlbnRzL3RvdWNoL2dlc3R1cmUvdG91Y2gtZ2VzdHVyZS1zY3JvbGwtc2h5LXRhcmdl
dC1leHBlY3RlZC50eHQ6IEFkZGVkLgorICAgICAgICAqIGZhc3QvZXZlbnRzL3RvdWNoL2dlc3R1
cmUvdG91Y2gtZ2VzdHVyZS1zY3JvbGwtc2h5LXRhcmdldC5odG1sOiBBZGRlZC4KKyAgICAgICAg
KiBmYXN0L2V2ZW50cy90b3VjaC9yZXNvdXJjZXMvc2Nyb2xsLWluc2lkZS1pZnJhbWUuaHRtbDog
QWRkZWQuCisKIDIwMTItMDItMjkgIEtlbnRhcm8gSGFyYSAgPGhhcmFrZW5AY2hyb21pdW0ub3Jn
PgogCiAgICAgICAgIFVucmV2aWV3ZWQsIGdhcmRlbmluZy4KZGlmZiAtLWdpdCBhL0xheW91dFRl
c3RzL2Zhc3QvZXZlbnRzL3RvdWNoL2dlc3R1cmUvdG91Y2gtZ2VzdHVyZS1zY3JvbGwtZGl2LWV4
cGVjdGVkLnR4dCBiL0xheW91dFRlc3RzL2Zhc3QvZXZlbnRzL3RvdWNoL2dlc3R1cmUvdG91Y2gt
Z2VzdHVyZS1zY3JvbGwtZGl2LWV4cGVjdGVkLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5lYjNiMGJmMWE2MDdj
YWYwZmFlZDgzMjIzYTRmOTVmN2U5ZWMzNGI1Ci0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVz
dHMvZmFzdC9ldmVudHMvdG91Y2gvZ2VzdHVyZS90b3VjaC1nZXN0dXJlLXNjcm9sbC1kaXYtZXhw
ZWN0ZWQudHh0CkBAIC0wLDAgKzEsMTcgQEAKK1RoaXMgdGVzdHMgZ2VzdHVyZSBldmVudCBzY3Jv
bGxpbmcgb2YgYW4gb3ZlcmZsb3cgZGl2LgorCitPbiBzdWNjZXNzLCB5b3Ugd2lsbCBzZWUgYSBz
ZXJpZXMgb2YgIlBBU1MiIG1lc3NhZ2VzLCBmb2xsb3dlZCBieSAiVEVTVCBDT01QTEVURSIuCisK
KworZmlyc3QgZ2VzdHVyZQorUEFTUyBtb3ZpbmdkaXYuc2Nyb2xsVG9wIGlzIDAKK1BBU1MgbW92
aW5nZGl2LnNjcm9sbExlZnQgaXMgOTAKK1BBU1Mgd2luZG93LmludGVybmFscy5yZWNvcmRPZkdl
c3R1cmVTY3JvbGxFdmVudHMobW92aW5nZGl2KSBpcyAxMworc2Vjb25kIGdlc3R1cmUKK1BBU1Mg
bW92aW5nZGl2LnNjcm9sbFRvcCBpcyA5NQorUEFTUyBtb3ZpbmdkaXYuc2Nyb2xsTGVmdCBpcyA5
MAorUEFTUyB3aW5kb3cuaW50ZXJuYWxzLnJlY29yZE9mR2VzdHVyZVNjcm9sbEV2ZW50cyhtb3Zp
bmdkaXYpIGlzIDEzCitQQVNTIHN1Y2Nlc3NmdWxseVBhcnNlZCBpcyB0cnVlCisKK1RFU1QgQ09N
UExFVEUKKwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvZmFzdC9ldmVudHMvdG91Y2gvZ2VzdHVy
ZS90b3VjaC1nZXN0dXJlLXNjcm9sbC1kaXYuaHRtbCBiL0xheW91dFRlc3RzL2Zhc3QvZXZlbnRz
L3RvdWNoL2dlc3R1cmUvdG91Y2gtZ2VzdHVyZS1zY3JvbGwtZGl2Lmh0bWwKbmV3IGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4u
MzZmMDM2MTZiYmQwZTU1M2JlMGI3MjNmMWMyZDAxNGE2YTdiZjkwNwotLS0gL2Rldi9udWxsCisr
KyBiL0xheW91dFRlc3RzL2Zhc3QvZXZlbnRzL3RvdWNoL2dlc3R1cmUvdG91Y2gtZ2VzdHVyZS1z
Y3JvbGwtZGl2Lmh0bWwKQEAgLTAsMCArMSwxNjUgQEAKKzwhRE9DVFlQRSBIVE1MIFBVQkxJQyAi
LS8vSUVURi8vRFREIEhUTUwvL0VOIj4KKzxodG1sPgorPGhlYWQ+Cis8c2NyaXB0IHNyYz0iLi4v
Li4vLi4vanMvcmVzb3VyY2VzL2pzLXRlc3QtcHJlLmpzIj48L3NjcmlwdD4KKzxzdHlsZSB0eXBl
PSJ0ZXh0L2NzcyI+CisjdG91Y2h0YXJnZXQgeworICB3aWR0aDogMTAwcHg7CisgIGhlaWdodDog
MTAwcHg7CisgIHBvc2l0aW9uOiByZWxhdGl2ZTsKKyAgYmFja2dyb3VuZDogd2hpdGU7Cit9CisK
KyNtb3Zpbmdib3ggeworICB3aWR0aDogMTAwJTsKKyAgaGVpZ2h0OiAxMDAlOworICBwb3NpdGlv
bjogYWJzb2x1dGU7CisgIHdvcmQtd3JhcDogYnJlYWstd29yZDsKKyAgb3ZlcmZsb3cteTogc2Ny
b2xsOworICBvdmVyZmxvdy14OiBzY3JvbGw7CisgIGRpc3BsYXk6IGJsb2NrOworfQorCisjZ3Jl
ZW5ib3ggeworICB3aWR0aDogMTAwcHg7CisgIGhlaWdodDogMTAwcHg7CisgIGJhY2tncm91bmQ6
IGdyZWVuOworICBwYWRkaW5nOiAwcHg7CisgIG1hcmdpbjogMHB4OworfQorCisjcmVkYm94IHsK
KyAgd2lkdGg6IDEwMHB4OworICBoZWlnaHQ6IDEwMHB4OworICBiYWNrZ3JvdW5kOiByZWQ7Cisg
IHBhZGRpbmc6IDBweDsKKyAgbWFyZ2luOiAwcHg7Cit9CisKK3RkIHsKKyAgcGFkZGluZzogMHB4
OworfQorPC9zdHlsZT4KKzwvaGVhZD4KKzxib2R5IHN0eWxlPSJtYXJnaW46MCIgb25sb2FkPSJy
dW5UZXN0KCk7Ij4KKzxkaXYgaWQ9InRvdWNodGFyZ2V0Ij4KKyAgPGRpdiBpZD0ibW92aW5nYm94
Ij4KKyAgICA8dGFibGUgYm9yZGVyPSIwIiBjZWxsc3BhY2luZz0iMHB4IiBpZD0idGFibGVmb28i
PgorICAgICAgPHRyPgorICAgICAgICA8dGQ+PGRpdiBpZD0icmVkYm94Ij48L2Rpdj48L3RkPgor
ICAgICAgICA8dGQ+PGRpdiBpZD0iZ3JlZW5ib3giPjwvZGl2PjwvdGQ+CisgICAgICA8L3RyPgor
ICAgICAgPHRyPgorICAgICAgICA8dGQ+PGRpdiBpZD0iZ3JlZW5ib3giPjwvZGl2PjwvdGQ+Cisg
ICAgICAgIDx0ZD48ZGl2IGlkPSJncmVlbmJveCI+PC9kaXY+PC90ZD4KKyAgICAgIDwvdHI+Cisg
ICAgPC90YWJsZT4KKyAgPC9kaXY+Cis8L2Rpdj4KKworPHAgaWQ9ImRlc2NyaXB0aW9uIj48L3A+
Cis8ZGl2IGlkPSJjb25zb2xlIj48L2Rpdj4KKzxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0
Ij4KKwordmFyIG1vdmluZ2RpdjsKK3ZhciBleHBlY3RlZFNjcm9sbHNUb3RhbCA9IDI7Cit2YXIg
c2Nyb2xsc09jY3VycmVkID0gMDsKK3ZhciBzY3JvbGxBbW91bnRYID0gWyc5MCcsICc5MCddOwor
dmFyIHNjcm9sbEFtb3VudFkgPSBbJzAnLCAnOTUnXTsKK3ZhciBnZXN0dXJlRGlzcGF0Y2hSZWNv
cmQgPSBbJzEzJywgJzEzJ107CisKK2Z1bmN0aW9uIGNoZWNrU2Nyb2xsT2Zmc2V0KCkKK3sKKyAg
ICBtb3ZpbmdkaXYgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbW92aW5nYm94Jyk7CisgICAg
aWYgKHdpbmRvdy5ldmVudFNlbmRlcikgeworICAgICAgICBzaG91bGRCZSgnbW92aW5nZGl2LnNj
cm9sbFRvcCcsIHNjcm9sbEFtb3VudFlbc2Nyb2xsc09jY3VycmVkXSk7CisgICAgICAgIHNob3Vs
ZEJlKCdtb3ZpbmdkaXYuc2Nyb2xsTGVmdCcsIHNjcm9sbEFtb3VudFhbc2Nyb2xsc09jY3VycmVk
XSk7CisgICAgICAgIGlmICh3aW5kb3cuaW50ZXJuYWxzKSB7CisgICAgICAgICAgICBzaG91bGRC
ZSgnd2luZG93LmludGVybmFscy5yZWNvcmRPZkdlc3R1cmVTY3JvbGxFdmVudHMobW92aW5nZGl2
KScsIGdlc3R1cmVEaXNwYXRjaFJlY29yZFtzY3JvbGxzT2NjdXJyZWRdKTsKKyAgICAgICAgfQor
ICAgICAgICBzY3JvbGxzT2NjdXJyZWQrKzsKKyAgICB9CisKKyAgIGlmIChzY3JvbGxzT2NjdXJy
ZWQgPT0gZXhwZWN0ZWRTY3JvbGxzVG90YWwpIHsKKyAgICAgICAgLy8gSWYgd2UndmUgZ290IGhl
cmUsIHdlJ3ZlIHBhc3NlZC4KKyAgICAgICAgaXNTdWNjZXNzZnVsbHlQYXJzZWQoKTsKKyAgICAg
ICAgaWYgKHdpbmRvdy5sYXlvdXRUZXN0Q29udHJvbGxlcikKKyAgICAgICAgICAgIGxheW91dFRl
c3RDb250cm9sbGVyLm5vdGlmeURvbmUoKTsKKyAgICB9IGVsc2UgeworICAgICAgICBzZWNvbmRU
b3VjaERyYWdTZXF1ZW5jZSgpOworICAgIH0KK30KKworZnVuY3Rpb24gZmluZ2VyVXAoZXZlbnQp
Cit7CisgICAgaWYgKCF3aW5kb3cubGF5b3V0VGVzdENvbnRyb2xsZXIpCisgICAgICAgIGRlYnVn
KCdtb3ZlZDogJyArIGV2ZW50LmN1cnJlbnRUYXJnZXQuc2Nyb2xsVG9wICsgJywgJyArIGV2ZW50
LmN1cnJlbnRUYXJnZXQuc2Nyb2xsTGVmdCk7CisgICAgcmV0dXJuIHRydWU7ICAvLyBXYW50IHRo
ZSBkZWZhdWx0IGJlaGF2aW91ci4KK30KKworZnVuY3Rpb24gZmlyc3RUb3VjaERyYWdTZXF1ZW5j
ZSgpCit7CisgICAgZGVidWcoImZpcnN0IGdlc3R1cmUiKTsKKyAgICB2YXIgdGFyZ2V0ID0gZG9j
dW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ21vdmluZ2JveCcpOworICAgIHdpbmRvdy5pbnRlcm5hbHMu
ZW5hYmxlR2VzdHVyZVNjcm9sbEV2ZW50UmVjb3JkKHRhcmdldCk7CisKKyAgICB3aW5kb3cuaW50
ZXJuYWxzLnNlbmRTY3JvbGxCZWdpbkdlc3R1cmVFdmVudChkb2N1bWVudCwgNSwgMTIpOworICAg
IHdpbmRvdy5pbnRlcm5hbHMuc2VuZFNjcm9sbFVwZGF0ZUdlc3R1cmVFdmVudChkb2N1bWVudCwg
NSwgMTIsIC05MCwgMCk7CisgICAgd2luZG93LmludGVybmFscy5zZW5kU2Nyb2xsRW5kR2VzdHVy
ZUV2ZW50KGRvY3VtZW50LCA1LCAxMiwgMCwgMCk7CisKKyAgICAvLyBXYWl0IGZvciBsYXlvdXQu
CisgICAgY2hlY2tTY3JvbGxPZmZzZXQoKTsKK30KKworZnVuY3Rpb24gc2Vjb25kVG91Y2hEcmFn
U2VxdWVuY2UoKQoreworICAgIGRlYnVnKCJzZWNvbmQgZ2VzdHVyZSIpOworICAgIHZhciB0YXJn
ZXQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbW92aW5nYm94Jyk7CisgICAgd2luZG93Lmlu
dGVybmFscy5lbmFibGVHZXN0dXJlU2Nyb2xsRXZlbnRSZWNvcmQodGFyZ2V0KTsKKworICAgIHdp
bmRvdy5pbnRlcm5hbHMuc2VuZFNjcm9sbEJlZ2luR2VzdHVyZUV2ZW50KGRvY3VtZW50LCAxMiwg
Mik7CisgICAgd2luZG93LmludGVybmFscy5zZW5kU2Nyb2xsVXBkYXRlR2VzdHVyZUV2ZW50KGRv
Y3VtZW50LCAxMiwgMiwgMCwgLTk1KTsKKyAgICB3aW5kb3cuaW50ZXJuYWxzLnNlbmRTY3JvbGxF
bmRHZXN0dXJlRXZlbnQoZG9jdW1lbnQsIDEyLCAyLCAwLCAwKTsKKworICAgIC8vIFdhaXQgZm9y
IGxheW91dC4KKyAgICBjaGVja1Njcm9sbE9mZnNldCgpOworfQorCitmdW5jdGlvbiBleGl0SWZO
ZWNlc3NhcnkoKQoreworICAgIGRlYnVnKCd3aW5kb3cuaW50ZXJuYWxzIG5vdCBpbXBsZW1lbnRl
ZCBvciBnZXN0dXJlIGV2ZW50IHNjcm9saW5nIGlzIGJyb2tlbi4nKTsKKyAgICBpc1N1Y2Nlc3Nm
dWxseVBhcnNlZCgpOworICAgIGlmICh3aW5kb3cubGF5b3V0VGVzdENvbnRyb2xsZXIpCisgICAg
ICAgIGxheW91dFRlc3RDb250cm9sbGVyLm5vdGlmeURvbmUoKTsKK30KKworaWYgKHdpbmRvdy5s
YXlvdXRUZXN0Q29udHJvbGxlcikKKyAgICBsYXlvdXRUZXN0Q29udHJvbGxlci53YWl0VW50aWxE
b25lKCk7CisgICAgCitmdW5jdGlvbiBjaGVja1Rlc3REZXBlbmRlbmNpZXMoKQoreworICAgIHJl
dHVybiB3aW5kb3cuZXZlbnRTZW5kZXIgJiYgd2luZG93LmludGVybmFscyAmJiB3aW5kb3cuaW50
ZXJuYWxzLnNlbmRTY3JvbGxCZWdpbkdlc3R1cmVFdmVudCAmJiB3aW5kb3cuaW50ZXJuYWxzLnNl
bmRTY3JvbGxVcGRhdGVHZXN0dXJlRXZlbnQgJiYgd2luZG93LmludGVybmFscy5zZW5kU2Nyb2xs
RW5kR2VzdHVyZUV2ZW50OworfQorCitmdW5jdGlvbiBydW5UZXN0KCkKK3sKKyAgICB2YXIgbW92
aW5nZGl2ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ21vdmluZ2JveCcpOworCisgICAgaWYg
KHdpbmRvdy5ldmVudFNlbmRlcikgeworICAgICAgICBkZXNjcmlwdGlvbignVGhpcyB0ZXN0cyBn
ZXN0dXJlIGV2ZW50IHNjcm9sbGluZyBvZiBhbiBvdmVyZmxvdyBkaXYuJyk7CisKKyAgICAgICAg
aWYgKGNoZWNrVGVzdERlcGVuZGVuY2llcygpKQorICAgICAgICAgICAgZmlyc3RUb3VjaERyYWdT
ZXF1ZW5jZSgpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBleGl0SWZOZWNlc3NhcnkoKTsK
KyAgICB9IGVsc2UgeworICAgICAgICBkZWJ1ZygiVGhpcyB0ZXN0IHJlcXVpcmVzIER1bXBSZW5k
ZXJUcmVlIGFuZCB3aW5kb3cuaW50ZXJuYWxzLiAgVG91Y2ggc2Nyb2xsIHRoZSByZWQgcmVjdCB0
byBsb2cuIik7CisgICAgICAgIG1vdmluZ2Rpdi5hZGRFdmVudExpc3RlbmVyKCd0b3VjaGVuZCcs
IGZpbmdlclVwLCBmYWxzZSk7CisgICAgfQorfQorPC9zY3JpcHQ+CisKKworCis8L2JvZHk+Cis8
L2h0bWw+CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9mYXN0L2V2ZW50cy90b3VjaC9nZXN0dXJl
L3RvdWNoLWdlc3R1cmUtc2Nyb2xsLWlmcmFtZS1leHBlY3RlZC50eHQgYi9MYXlvdXRUZXN0cy9m
YXN0L2V2ZW50cy90b3VjaC9nZXN0dXJlL3RvdWNoLWdlc3R1cmUtc2Nyb2xsLWlmcmFtZS1leHBl
Y3RlZC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMC4uNWFlNmQ5ZTJmNmE5ODFhN2UyMzI0Yzc3ZDE3NmJhMmE1MDA3
N2NkMgotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL2Zhc3QvZXZlbnRzL3RvdWNoL2dl
c3R1cmUvdG91Y2gtZ2VzdHVyZS1zY3JvbGwtaWZyYW1lLWV4cGVjdGVkLnR4dApAQCAtMCwwICsx
LDE4IEBACisKK1RoaXMgdGVzdHMgZ2VzdHVyZSBldmVudCBzY3JvbGxpbmcgaW4gaWZyYW1lcy4g
UmVkLWdyZWVuIHN0cmlwIGlzIHNjcm9sbGVkIG9uIHBhc3MuCisKK09uIHN1Y2Nlc3MsIHlvdSB3
aWxsIHNlZSBhIHNlcmllcyBvZiAiUEFTUyIgbWVzc2FnZXMsIGZvbGxvd2VkIGJ5ICJURVNUIENP
TVBMRVRFIi4KKworCitmaXJzdCBnZXN0dXJlCitQQVNTIHRvdWNodGFyZ2V0LmNvbnRlbnREb2N1
bWVudC5ib2R5LnNjcm9sbFRvcCBpcyAxNDAKK1BBU1MgdG91Y2h0YXJnZXQuY29udGVudERvY3Vt
ZW50LmJvZHkuc2Nyb2xsTGVmdCBpcyAwCitQQVNTIHdpbmRvdy5pbnRlcm5hbHMucmVjb3JkT2ZH
ZXN0dXJlU2Nyb2xsRXZlbnRzKHRvdWNodGFyZ2V0LmNvbnRlbnREb2N1bWVudCkgaXMgNworc2Vj
b25kIGdlc3R1cmUKK1BBU1MgdG91Y2h0YXJnZXQuY29udGVudERvY3VtZW50LmJvZHkuc2Nyb2xs
VG9wIGlzIDIwMAorUEFTUyB0b3VjaHRhcmdldC5jb250ZW50RG9jdW1lbnQuYm9keS5zY3JvbGxM
ZWZ0IGlzIDAKK1BBU1Mgd2luZG93LmludGVybmFscy5yZWNvcmRPZkdlc3R1cmVTY3JvbGxFdmVu
dHModG91Y2h0YXJnZXQuY29udGVudERvY3VtZW50KSBpcyA3CitQQVNTIHN1Y2Nlc3NmdWxseVBh
cnNlZCBpcyB0cnVlCisKK1RFU1QgQ09NUExFVEUKKwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMv
ZmFzdC9ldmVudHMvdG91Y2gvZ2VzdHVyZS90b3VjaC1nZXN0dXJlLXNjcm9sbC1pZnJhbWUuaHRt
bCBiL0xheW91dFRlc3RzL2Zhc3QvZXZlbnRzL3RvdWNoL2dlc3R1cmUvdG91Y2gtZ2VzdHVyZS1z
Y3JvbGwtaWZyYW1lLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYjljMjdmMjU3Njk1NTA0MmFhNGI3M2Y1MWZh
MjdjMzNjZDZmNGQ4OQotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL2Zhc3QvZXZlbnRz
L3RvdWNoL2dlc3R1cmUvdG91Y2gtZ2VzdHVyZS1zY3JvbGwtaWZyYW1lLmh0bWwKQEAgLTAsMCAr
MSwxMTggQEAKKzwhRE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8vSUVURi8vRFREIEhUTUwvL0VOIj4K
KzxodG1sPgorPGhlYWQ+Cis8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9Ii4uLy4uLy4uL2pz
L3Jlc291cmNlcy9qcy10ZXN0LXN0eWxlLmNzcyI+Cis8c2NyaXB0IHNyYz0iLi4vLi4vLi4vanMv
cmVzb3VyY2VzL2pzLXRlc3QtcHJlLmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSIuLi8uLi8u
Li9qcy9yZXNvdXJjZXMvanMtdGVzdC1wb3N0LWZ1bmN0aW9uLmpzIj48L3NjcmlwdD4KKzxzdHls
ZSB0eXBlPSJ0ZXh0L2NzcyI+CisjdG91Y2h0YXJnZXQgeworICB3aWR0aDogMjAwcHg7CisgIGhl
aWdodDogMjAwcHg7CisgIHBvc2l0aW9uOiByZWxhdGl2ZTsKKyAgYmFja2dyb3VuZDogd2hpdGU7
Cit9Cis8L3N0eWxlPgorPC9oZWFkPgorPGJvZHk+Cis8aWZyYW1lIGlkPSJ0b3VjaHRhcmdldCIg
c3JjPSIuLi9yZXNvdXJjZXMvc2Nyb2xsLWluc2lkZS1pZnJhbWUuaHRtbCI+PC9pZnJhbWU+Cisg
ICAgPHAgaWQ9ImRlc2NyaXB0aW9uIj48L3A+Cis8ZGl2IGlkPSJjb25zb2xlIj48L2Rpdj4KKzxz
Y3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KKwordmFyIHRvdWNodGFyZ2V0OwordmFyIGV4
cGVjdGVkU2Nyb2xsc1RvdGFsID0gMjsKK3ZhciBzY3JvbGxzT2NjdXJyZWQgPSAwOwordmFyIHNj
cm9sbEFtb3VudFggPSBbJzAnLCAnMCddOwordmFyIHNjcm9sbEFtb3VudFkgPSBbJzE0MCcsICcy
MDAnXTsKK3ZhciBnZXN0dXJlRGlzcGF0Y2hSZWNvcmQgPSBbJzcnLCAnNyddOworCitmdW5jdGlv
biBjaGVja1Njcm9sbE9mZnNldCgpCit7CisgICAgdG91Y2h0YXJnZXQgPSBkb2N1bWVudC5nZXRF
bGVtZW50QnlJZCgndG91Y2h0YXJnZXQnKTsKKyAgICBpZiAod2luZG93LmV2ZW50U2VuZGVyKSB7
CisgICAgICAgIHNob3VsZEJlKCd0b3VjaHRhcmdldC5jb250ZW50RG9jdW1lbnQuYm9keS5zY3Jv
bGxUb3AnLCBzY3JvbGxBbW91bnRZW3Njcm9sbHNPY2N1cnJlZF0pOworICAgICAgICBzaG91bGRC
ZSgndG91Y2h0YXJnZXQuY29udGVudERvY3VtZW50LmJvZHkuc2Nyb2xsTGVmdCcsIHNjcm9sbEFt
b3VudFhbc2Nyb2xsc09jY3VycmVkXSk7CisgICAgICAgIGlmICh3aW5kb3cuaW50ZXJuYWxzKSB7
CisgICAgICAgICAgICBzaG91bGRCZSgnd2luZG93LmludGVybmFscy5yZWNvcmRPZkdlc3R1cmVT
Y3JvbGxFdmVudHModG91Y2h0YXJnZXQuY29udGVudERvY3VtZW50KScsIGdlc3R1cmVEaXNwYXRj
aFJlY29yZFtzY3JvbGxzT2NjdXJyZWRdKTsKKyAgICAgICAgfQorICAgICAgICBzY3JvbGxzT2Nj
dXJyZWQrKzsKKyAgICB9CisKKyAgICBpZiAoc2Nyb2xsc09jY3VycmVkID09IGV4cGVjdGVkU2Ny
b2xsc1RvdGFsKSB7CisgICAgICAgIC8vIElmIHdlJ3ZlIGdvdCBoZXJlLCB3ZSd2ZSBwYXNzZWQu
CisgICAgICAgIHN1Y2Nlc3NmdWxseVBhcnNlZCA9IHRydWU7CisgICAgICAgIGlzU3VjY2Vzc2Z1
bGx5UGFyc2VkKCk7CisgICAgICAgIGlmICh3aW5kb3cubGF5b3V0VGVzdENvbnRyb2xsZXIpCisg
ICAgICAgICAgICBsYXlvdXRUZXN0Q29udHJvbGxlci5ub3RpZnlEb25lKCk7CisgICAgfSBlbHNl
IHsKKyAgICAgICAgc2Vjb25kVG91Y2hEcmFnU2VxdWVuY2UoKTsKKyAgICB9Cit9CisKK2Z1bmN0
aW9uIGZpbmdlclVwKGV2ZW50KQoreworICAgIGlmICghd2luZG93LmxheW91dFRlc3RDb250cm9s
bGVyKQorICAgICAgICBkZWJ1ZygnbW92ZWQ6ICcgKyBldmVudC5jdXJyZW50VGFyZ2V0LnNjcm9s
bFRvcCArICcsICcgKyBldmVudC5jdXJyZW50VGFyZ2V0LnNjcm9sbExlZnQpOworICAgIHJldHVy
biB0cnVlOyAgLy8gV2FudCB0aGUgZGVmYXVsdCBiZWhhdmlvdXIuCit9CisKK2Z1bmN0aW9uIGZp
cnN0VG91Y2hEcmFnU2VxdWVuY2UoKQoreworICAgIGRlYnVnKCJmaXJzdCBnZXN0dXJlIik7Cisg
ICAgdG91Y2h0YXJnZXQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG91Y2h0YXJnZXQnKTsK
KyAgICB3aW5kb3cuaW50ZXJuYWxzLmVuYWJsZUdlc3R1cmVTY3JvbGxFdmVudFJlY29yZCh0b3Vj
aHRhcmdldC5jb250ZW50RG9jdW1lbnQpOworICAgIHdpbmRvdy5pbnRlcm5hbHMuc2VuZFNjcm9s
bEJlZ2luR2VzdHVyZUV2ZW50KGRvY3VtZW50LCAxMiwgMTApOworICAgIHdpbmRvdy5pbnRlcm5h
bHMuc2VuZFNjcm9sbFVwZGF0ZUdlc3R1cmVFdmVudChkb2N1bWVudCwgMTIsIDEwLCAwLCAtMTQw
KTsKKyAgICB3aW5kb3cuaW50ZXJuYWxzLnNlbmRTY3JvbGxFbmRHZXN0dXJlRXZlbnQoZG9jdW1l
bnQsIDEyLCAxMCwgMCwgMCk7CisKKyAgICAvLyBXYWl0IGZvciBsYXlvdXQuCisgICAgY2hlY2tT
Y3JvbGxPZmZzZXQoKTsKK30KKworZnVuY3Rpb24gc2Vjb25kVG91Y2hEcmFnU2VxdWVuY2UoKQor
eworICAgIGRlYnVnKCJzZWNvbmQgZ2VzdHVyZSIpOworICAgIHRvdWNodGFyZ2V0ID0gZG9jdW1l
bnQuZ2V0RWxlbWVudEJ5SWQoJ3RvdWNodGFyZ2V0Jyk7CisgICAgd2luZG93LmludGVybmFscy5l
bmFibGVHZXN0dXJlU2Nyb2xsRXZlbnRSZWNvcmQodG91Y2h0YXJnZXQuY29udGVudERvY3VtZW50
KTsKKyAgICB3aW5kb3cuaW50ZXJuYWxzLnNlbmRTY3JvbGxCZWdpbkdlc3R1cmVFdmVudChkb2N1
bWVudCwgMTIsIDQwKTsKKyAgICB3aW5kb3cuaW50ZXJuYWxzLnNlbmRTY3JvbGxVcGRhdGVHZXN0
dXJlRXZlbnQoZG9jdW1lbnQsIDEyLCA0MCwgMCwgLTYwKTsKKyAgICB3aW5kb3cuaW50ZXJuYWxz
LnNlbmRTY3JvbGxFbmRHZXN0dXJlRXZlbnQoZG9jdW1lbnQsIDEyLCA0MCwgMCwgMCk7CisKKyAg
ICAvLyBXYWl0IGZvciBsYXlvdXQuCisgICAgY2hlY2tTY3JvbGxPZmZzZXQoKTsKK30KKworZnVu
Y3Rpb24gZXhpdElmTmVjZXNzYXJ5KCkKK3sKKyAgICBkZWJ1Zygnd2luZG93LmludGVybnMgbm90
IGltcGxlbWVudGVkIG9uIHRoaXMgcGxhdGZvcm0gb3IgZ2VzdHVyZSBldmVudCBzY3JvbGxpbmcg
aXMgYnJva2VuJyk7CisgICAgc3VjY2Vzc2Z1bGx5UGFyc2VkID0gdHJ1ZTsKKyAgICBpc1N1Y2Nl
c3NmdWxseVBhcnNlZCgpOworICAgIGlmICh3aW5kb3cubGF5b3V0VGVzdENvbnRyb2xsZXIpCisg
ICAgICAgIGxheW91dFRlc3RDb250cm9sbGVyLm5vdGlmeURvbmUoKTsKK30KKworaWYgKHdpbmRv
dy5sYXlvdXRUZXN0Q29udHJvbGxlcikKKyAgICBsYXlvdXRUZXN0Q29udHJvbGxlci53YWl0VW50
aWxEb25lKCk7CisKK2Z1bmN0aW9uIGNoZWNrVGVzdERlcGVuZGVuY2llcygpCit7CisgICAgcmV0
dXJuIHdpbmRvdy5ldmVudFNlbmRlciAmJiB3aW5kb3cuaW50ZXJuYWxzICYmIHdpbmRvdy5pbnRl
cm5hbHMuc2VuZFNjcm9sbEJlZ2luR2VzdHVyZUV2ZW50ICYmIHdpbmRvdy5pbnRlcm5hbHMuc2Vu
ZFNjcm9sbFVwZGF0ZUdlc3R1cmVFdmVudCAmJiB3aW5kb3cuaW50ZXJuYWxzLnNlbmRTY3JvbGxF
bmRHZXN0dXJlRXZlbnQ7Cit9CisKK2Z1bmN0aW9uIHJ1blRlc3QoKQoreworICAgIHRvdWNodGFy
Z2V0ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3RvdWNodGFyZ2V0Jyk7CisgICAgaWYgKHdp
bmRvdy5ldmVudFNlbmRlcikgeworICAgICAgICBkZXNjcmlwdGlvbignVGhpcyB0ZXN0cyBnZXN0
dXJlIGV2ZW50IHNjcm9sbGluZyBpbiBpZnJhbWVzLiAnICsKKyAgICAgICAgICAgICdSZWQtZ3Jl
ZW4gc3RyaXAgaXMgc2Nyb2xsZWQgb24gcGFzcy4nKTsKKyAgICAgICAgaWYgKGNoZWNrVGVzdERl
cGVuZGVuY2llcygpKQorICAgICAgICAgICAgZmlyc3RUb3VjaERyYWdTZXF1ZW5jZSgpOworICAg
ICAgICBlbHNlCisgICAgICAgICAgICBleGl0SWZOZWNlc3NhcnkoKTsKKyAgICB9IGVsc2Ugewor
ICAgICAgICBkZWJ1ZygiVGhpcyB0ZXN0IHJlcXVpcmVzIER1bXBSZW5kZXJUcmVlIGFuZCB3aW5k
b3cuaW50ZXJuYWxzLiAgVG91Y2gtc2Nyb2xsIHRoZSByZWQvZ3JlZW4gc3RyaXAuIik7CisgICAg
fQorfQorPC9zY3JpcHQ+Cis8L2JvZHk+Cis8L2h0bWw+CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0
cy9mYXN0L2V2ZW50cy90b3VjaC9nZXN0dXJlL3RvdWNoLWdlc3R1cmUtc2Nyb2xsLXBhZ2UtZXhw
ZWN0ZWQudHh0IGIvTGF5b3V0VGVzdHMvZmFzdC9ldmVudHMvdG91Y2gvZ2VzdHVyZS90b3VjaC1n
ZXN0dXJlLXNjcm9sbC1wYWdlLWV4cGVjdGVkLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4yMzUxZTRkMWNkZTcz
MmQyY2U3Y2YyNDMxMTBmYWMwZjUxYzNlNzNhCi0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVz
dHMvZmFzdC9ldmVudHMvdG91Y2gvZ2VzdHVyZS90b3VjaC1nZXN0dXJlLXNjcm9sbC1wYWdlLWV4
cGVjdGVkLnR4dApAQCAtMCwwICsxLDE3IEBACitUaGlzIHRlc3RzIHNjcm9sbCBnZXN0dXJlIGV2
ZW50IHNjcm9sbGluZyBvbiBhIHdob2xlIHBhZ2UuCisKK09uIHN1Y2Nlc3MsIHlvdSB3aWxsIHNl
ZSBhIHNlcmllcyBvZiAiUEFTUyIgbWVzc2FnZXMsIGZvbGxvd2VkIGJ5ICJURVNUIENPTVBMRVRF
Ii4KKworCitmaXJzdCBnZXN0dXJlCitQQVNTIGRvY3VtZW50LmJvZHkuc2Nyb2xsVG9wIGlzIDcw
CitQQVNTIGRvY3VtZW50LmJvZHkuc2Nyb2xsTGVmdCBpcyAwCitQQVNTIHdpbmRvdy5pbnRlcm5h
bHMucmVjb3JkT2ZHZXN0dXJlU2Nyb2xsRXZlbnRzKGRvY3VtZW50KSBpcyA3CitzZWNvbmQgZ2Vz
dHVyZQorUEFTUyBkb2N1bWVudC5ib2R5LnNjcm9sbFRvcCBpcyAxMzAKK1BBU1MgZG9jdW1lbnQu
Ym9keS5zY3JvbGxMZWZ0IGlzIDAKK1BBU1Mgd2luZG93LmludGVybmFscy5yZWNvcmRPZkdlc3R1
cmVTY3JvbGxFdmVudHMoZG9jdW1lbnQpIGlzIDcKK1BBU1Mgc3VjY2Vzc2Z1bGx5UGFyc2VkIGlz
IHRydWUKKworVEVTVCBDT01QTEVURQorCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9mYXN0L2V2
ZW50cy90b3VjaC9nZXN0dXJlL3RvdWNoLWdlc3R1cmUtc2Nyb2xsLXBhZ2UuaHRtbCBiL0xheW91
dFRlc3RzL2Zhc3QvZXZlbnRzL3RvdWNoL2dlc3R1cmUvdG91Y2gtZ2VzdHVyZS1zY3JvbGwtcGFn
ZS5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAuLjA1YWM3ZGI1Nzg1YTcwMDQ1M2YxMWE3M2Y0ZDRkMmU1NDFlODli
NDQKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9mYXN0L2V2ZW50cy90b3VjaC9nZXN0
dXJlL3RvdWNoLWdlc3R1cmUtc2Nyb2xsLXBhZ2UuaHRtbApAQCAtMCwwICsxLDE1NCBAQAorPCFE
T0NUWVBFIEhUTUwgUFVCTElDICItLy9JRVRGLy9EVEQgSFRNTC8vRU4iPgorPGh0bWw+Cis8aGVh
ZD4KKzxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iLi4vLi4vLi4vanMvcmVzb3VyY2VzL2pz
LXRlc3Qtc3R5bGUuY3NzIj4KKzxzY3JpcHQgc3JjPSIuLi8uLi8uLi9qcy9yZXNvdXJjZXMvanMt
dGVzdC1wcmUuanMiPjwvc2NyaXB0PgorPHN0eWxlIHR5cGU9InRleHQvY3NzIj4KKyNncmVlbmJv
eCB7CisgIHdpZHRoOiAxMDBweDsKKyAgaGVpZ2h0OiAxMDBweDsKKyAgYmFja2dyb3VuZDogZ3Jl
ZW47CisgIHBhZGRpbmc6IDBweDsKKyAgbWFyZ2luOiAwcHg7Cit9CisjcmVkYm94IHsKKyAgd2lk
dGg6IDEwMHB4OworICBoZWlnaHQ6IDEwMHB4OworICBiYWNrZ3JvdW5kOiByZWQ7CisgIHBhZGRp
bmc6IDBweDsKKyAgbWFyZ2luOiAwcHg7Cit9CisKK3RkIHsKKyAgcGFkZGluZzogMHB4OworfQor
PC9zdHlsZT4KKzwvaGVhZD4KKzxib2R5IHN0eWxlPSJtYXJnaW46MCIgb25sb2FkPSJydW5UZXN0
KCk7Ij4KKworPHRhYmxlIGlkPSJ0YWJsZV90b19maWxsIj4KKyAgICA8dHI+PHRkPjxkaXYgaWQ9
ImdyZWVuYm94Ij48L2Rpdj48L3RkPjwvdHI+CisgICAgPHRyPjx0ZD48ZGl2IGlkPSJyZWRib3gi
PjwvZGl2PjwvdGQ+PC90cj4KKzwvdGFibGU+CisKKzxwIGlkPSJkZXNjcmlwdGlvbiI+PC9wPgor
PGRpdiBpZD0iY29uc29sZSI+PC9kaXY+Cis8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+
CisKK3ZhciBleHBlY3RlZFNjcm9sbHNUb3RhbCA9IDI7Cit2YXIgc2Nyb2xsc09jY3VycmVkID0g
MDsKK3ZhciBzY3JvbGxBbW91bnRYID0gWycwJywgJzAnXTsKK3ZhciBzY3JvbGxBbW91bnRZID0g
Wyc3MCcsICcxMzAnXTsKK3ZhciBnZXN0dXJlRGlzcGF0Y2hSZWNvcmQgPSBbJzcnLCAnNyddOwor
CisvLyBBbHdheXMgY29uc3RydWN0IGEgcGFnZSBsYXJnZXIgdGhhbiB0aGUgdmVydGljYWwgaGVp
Z2h0IG9mIHRoZSB3aW5kb3cuCitmdW5jdGlvbiBidWlsZFBhZ2UoKQoreworICAgIHZhciB0YWJs
ZSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0YWJsZV90b19maWxsJyk7CisgICAgdmFyIHRh
cmdldEhlaWdodCA9IGRvY3VtZW50LmJvZHkub2Zmc2V0SGVpZ2h0OworICAgIHZhciBjZWxsUGFp
ckhlaWdodCA9IHRhYmxlLm9mZnNldEhlaWdodDsKKyAgICB2YXIgbnVtYmVyT2ZSZXBzID0gdGFy
Z2V0SGVpZ2h0IC8gY2VsbFBhaXJIZWlnaHQgKiAyOworICAgIHZhciBpOworICAgIGZvciAoaSA9
IDA7IGkgPCBudW1iZXJPZlJlcHM7IGkrKykgeworICAgICAgICB2YXIgcCA9IGRvY3VtZW50LmNy
ZWF0ZUVsZW1lbnQoJ3RyJyk7CisgICAgICAgIHAuaW5uZXJIVE1MID0gJzx0ZD48ZGl2IGlkPSJn
cmVlbmJveCI+PC9kaXY+PC90ZD4nOworICAgICAgICB0YWJsZS5hcHBlbmRDaGlsZChwKTsKKyAg
ICAgICAgdmFyIHAgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOworICAgICAgICBwLmlu
bmVySFRNTCA9ICc8dGQ+PGRpdiBpZD0icmVkYm94Ij48L2Rpdj48L3RkPic7CisgICAgICAgIHRh
YmxlLmFwcGVuZENoaWxkKHApOworICAgIH0KK30KKworZnVuY3Rpb24gY2hlY2tTY3JvbGxPZmZz
ZXQoKQoreworICAgIGlmICh3aW5kb3cuZXZlbnRTZW5kZXIpIHsKKyAgICAgICAgc2hvdWxkQmUo
J2RvY3VtZW50LmJvZHkuc2Nyb2xsVG9wJywgc2Nyb2xsQW1vdW50WVtzY3JvbGxzT2NjdXJyZWRd
KTsKKyAgICAgICAgc2hvdWxkQmUoJ2RvY3VtZW50LmJvZHkuc2Nyb2xsTGVmdCcsIHNjcm9sbEFt
b3VudFhbc2Nyb2xsc09jY3VycmVkXSk7CisgICAgICAgIGlmICh3aW5kb3cuaW50ZXJuYWxzKSB7
CisgICAgICAgICAgICBzaG91bGRCZSgnd2luZG93LmludGVybmFscy5yZWNvcmRPZkdlc3R1cmVT
Y3JvbGxFdmVudHMoZG9jdW1lbnQpJywgZ2VzdHVyZURpc3BhdGNoUmVjb3JkW3Njcm9sbHNPY2N1
cnJlZF0pOworICAgICAgICB9CisgICAgICAgIHNjcm9sbHNPY2N1cnJlZCsrOworICAgIH0KKwor
ICAgIGlmIChzY3JvbGxzT2NjdXJyZWQgPT0gZXhwZWN0ZWRTY3JvbGxzVG90YWwpIHsKKyAgICAg
ICAgLy8gSWYgd2UndmUgZ290IGhlcmUsIHdlJ3ZlIHBhc3NlZC4KKyAgICAgICAgc3VjY2Vzc2Z1
bGx5UGFyc2VkID0gdHJ1ZTsKKyAgICAgICAgaXNTdWNjZXNzZnVsbHlQYXJzZWQoKTsKKyAgICAg
ICAgaWYgKHdpbmRvdy5sYXlvdXRUZXN0Q29udHJvbGxlcikKKyAgICAgICAgICAgIGxheW91dFRl
c3RDb250cm9sbGVyLm5vdGlmeURvbmUoKTsKKyAgICB9IGVsc2UgeworICAgICAgICBzZWNvbmRU
b3VjaERyYWdTZXF1ZW5jZSgpOworICAgIH0KK30KKworZnVuY3Rpb24gZmluZ2VyVXAoZXZlbnQp
Cit7CisgICAgaWYgKCF3aW5kb3cubGF5b3V0VGVzdENvbnRyb2xsZXIpCisgICAgICAgIGRlYnVn
KCdtb3ZlZDogJyArIGV2ZW50LmN1cnJlbnRUYXJnZXQuc2Nyb2xsVG9wICsgJywgJyArIGV2ZW50
LmN1cnJlbnRUYXJnZXQuc2Nyb2xsTGVmdCk7CisgICAgcmV0dXJuIHRydWU7ICAvLyBXYW50IHRo
ZSBkZWZhdWx0IGJlaGF2aW91ci4KK30KKworZnVuY3Rpb24gZmlyc3RUb3VjaERyYWdTZXF1ZW5j
ZSgpCit7CisgICAgZGVidWcoImZpcnN0IGdlc3R1cmUiKTsKKyAgICB3aW5kb3cuaW50ZXJuYWxz
LmVuYWJsZUdlc3R1cmVTY3JvbGxFdmVudFJlY29yZChkb2N1bWVudCk7CisgICAgd2luZG93Lmlu
dGVybmFscy5zZW5kU2Nyb2xsQmVnaW5HZXN0dXJlRXZlbnQoZG9jdW1lbnQsIDEwLCA3Mik7Cisg
ICAgd2luZG93LmludGVybmFscy5zZW5kU2Nyb2xsVXBkYXRlR2VzdHVyZUV2ZW50KGRvY3VtZW50
LCAxMCwgNzIsIDAsIC0zMCk7CisgICAgd2luZG93LmludGVybmFscy5zZW5kU2Nyb2xsVXBkYXRl
R2VzdHVyZUV2ZW50KGRvY3VtZW50LCAxMCwgMzIsIDAsIC00MCk7CisgICAgd2luZG93LmludGVy
bmFscy5zZW5kU2Nyb2xsRW5kR2VzdHVyZUV2ZW50KGRvY3VtZW50LCAxMCwgMzIsIDAsIDApOwor
CisgICAgLy8gV2FpdCBmb3IgbGF5b3V0LgorICAgIGNoZWNrU2Nyb2xsT2Zmc2V0KCk7Cit9CisK
K2Z1bmN0aW9uIHNlY29uZFRvdWNoRHJhZ1NlcXVlbmNlKCkKK3sKKyAgICBkZWJ1Zygic2Vjb25k
IGdlc3R1cmUiKTsKKyAgICB3aW5kb3cuaW50ZXJuYWxzLmVuYWJsZUdlc3R1cmVTY3JvbGxFdmVu
dFJlY29yZChkb2N1bWVudCk7CisgICAgd2luZG93LmludGVybmFscy5zZW5kU2Nyb2xsQmVnaW5H
ZXN0dXJlRXZlbnQoZG9jdW1lbnQsIDEyLCA0MCk7CisgICAgd2luZG93LmludGVybmFscy5zZW5k
U2Nyb2xsVXBkYXRlR2VzdHVyZUV2ZW50KGRvY3VtZW50LCAxMiwgNDAsIDAsIC0zMCk7CisgICAg
d2luZG93LmludGVybmFscy5zZW5kU2Nyb2xsVXBkYXRlR2VzdHVyZUV2ZW50KGRvY3VtZW50LCAx
MiwgMTAsIDAsIC0zMCk7CisgICAgd2luZG93LmludGVybmFscy5zZW5kU2Nyb2xsRW5kR2VzdHVy
ZUV2ZW50KGRvY3VtZW50LCAxMiwgMTAsIDAsIDApOworCisgICAgLy8gV2FpdCBmb3IgbGF5b3V0
LgorICAgIGNoZWNrU2Nyb2xsT2Zmc2V0KCk7Cit9CisKK2Z1bmN0aW9uIGV4aXRJZk5lY2Vzc2Fy
eSgpCit7CisgICAgZGVidWcoJ3dpbmRvdy5pbnRlcm5hbHMgIG5vdCBpbXBsZW1lbnRlZCBvbiB0
aGlzIHBsYXRmb3JtIG9yIGdlc3R1cmUgZXZlbnQgc2Nyb2xsaW5nIG9mIGEgZG9jdW1lbnQgaXMg
YnJva2VuJyk7CisgICAgc3VjY2Vzc2Z1bGx5UGFyc2VkID0gdHJ1ZTsKKyAgICBpc1N1Y2Nlc3Nm
dWxseVBhcnNlZCgpOworICAgIGlmICh3aW5kb3cubGF5b3V0VGVzdENvbnRyb2xsZXIpCisgICAg
ICAgIGxheW91dFRlc3RDb250cm9sbGVyLm5vdGlmeURvbmUoKTsKK30KKworaWYgKHdpbmRvdy5s
YXlvdXRUZXN0Q29udHJvbGxlcikKKyAgICBsYXlvdXRUZXN0Q29udHJvbGxlci53YWl0VW50aWxE
b25lKCk7CisKK2Z1bmN0aW9uIGNoZWNrVGVzdERlcGVuZGVuY2llcygpCit7CisgICAgcmV0dXJu
IHdpbmRvdy5ldmVudFNlbmRlciAmJiB3aW5kb3cuaW50ZXJuYWxzICYmIHdpbmRvdy5pbnRlcm5h
bHMuc2VuZFNjcm9sbEJlZ2luR2VzdHVyZUV2ZW50ICYmIHdpbmRvdy5pbnRlcm5hbHMuc2VuZFNj
cm9sbFVwZGF0ZUdlc3R1cmVFdmVudCAmJiB3aW5kb3cuaW50ZXJuYWxzLnNlbmRTY3JvbGxFbmRH
ZXN0dXJlRXZlbnQ7Cit9CisKK2Z1bmN0aW9uIHJ1blRlc3QoKQoreworICAgIGJ1aWxkUGFnZSgp
OworCisgICAgaWYgKHdpbmRvdy5ldmVudFNlbmRlciAmJiB3aW5kb3cuaW50ZXJuYWxzKSB7Cisg
ICAgICAgIGRlc2NyaXB0aW9uKCdUaGlzIHRlc3RzIHNjcm9sbCBnZXN0dXJlIGV2ZW50IHNjcm9s
bGluZyBvbiBhIHdob2xlIHBhZ2UuJyk7CisgICAgICAgIGlmIChjaGVja1Rlc3REZXBlbmRlbmNp
ZXMoKSkKKyAgICAgICAgICAgIGZpcnN0VG91Y2hEcmFnU2VxdWVuY2UoKTsKKyAgICAgICAgZWxz
ZQorICAgICAgICAgICAgZXhpdElmTmVjZXNzYXJ5KCk7CisgICAgfSBlbHNlIHsKKyAgICAgICAg
ZGVidWcoIlRoaXMgdGVzdCByZXF1aXJlcyBEdW1wUmVuZGVyVHJlZSBhbmQgd2luZG93LmludGVy
bmFscy4gIFRvdWNoLXNjcm9sbCB0aGUgcGFnZSB0byB2YWxpZGF0ZSB0aGUgaW1wbGVtZW50YXRp
b24uIik7CisgICAgICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ3RvdWNoZW5kJywgZmlu
Z2VyVXAsIGZhbHNlKTsKKyAgICB9Cit9Cis8L3NjcmlwdD4KKworCisKKzwvYm9keT4KKzwvaHRt
bD4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2Zhc3QvZXZlbnRzL3RvdWNoL2dlc3R1cmUvdG91
Y2gtZ2VzdHVyZS1zY3JvbGwtc2h5LXRhcmdldC1leHBlY3RlZC50eHQgYi9MYXlvdXRUZXN0cy9m
YXN0L2V2ZW50cy90b3VjaC9nZXN0dXJlL3RvdWNoLWdlc3R1cmUtc2Nyb2xsLXNoeS10YXJnZXQt
ZXhwZWN0ZWQudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjg5ZTgyMmY0NWJhZDIzNGJlMTBjMDdkOWEyNjgyOTdm
MDYzOTM3ZjAKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9mYXN0L2V2ZW50cy90b3Vj
aC9nZXN0dXJlL3RvdWNoLWdlc3R1cmUtc2Nyb2xsLXNoeS10YXJnZXQtZXhwZWN0ZWQudHh0CkBA
IC0wLDAgKzEsMTUgQEAKK1RoaXMgdGVzdHMgZ2VzdHVyZSBzY3JvbGxpbmcgdG8gYSBkaXYgZGVs
ZXRlZCB3aGlsZSBsYXRjaGVkLCBTcXVhcmUgaXMgKG1vc3RseSkgZ3JlZW4gb24gcGFzcworCitP
biBzdWNjZXNzLCB5b3Ugd2lsbCBzZWUgYSBzZXJpZXMgb2YgIlBBU1MiIG1lc3NhZ2VzLCBmb2xs
b3dlZCBieSAiVEVTVCBDT01QTEVURSIuCisKKworZmlyc3QgZ2VzdHVyZQorUEFTUyBtb3Zpbmdk
aXYuc2Nyb2xsVG9wIGlzIDYyCitQQVNTIG1vdmluZ2Rpdi5zY3JvbGxMZWZ0IGlzIDYzCitQQVNT
IHdpbmRvdy5pbnRlcm5hbHMucmVjb3JkT2ZHZXN0dXJlU2Nyb2xsRXZlbnRzKG1vdmluZ2Rpdikg
aXMgMTMKK3NlY29uZCBnZXN0dXJlCityZWNlaXZlZCBlbGVtZW50IHJlbW92aW5nIGtleXByZXNz
CitQQVNTIHN1Y2Nlc3NmdWxseVBhcnNlZCBpcyB0cnVlCisKK1RFU1QgQ09NUExFVEUKKwpkaWZm
IC0tZ2l0IGEvTGF5b3V0VGVzdHMvZmFzdC9ldmVudHMvdG91Y2gvZ2VzdHVyZS90b3VjaC1nZXN0
dXJlLXNjcm9sbC1zaHktdGFyZ2V0Lmh0bWwgYi9MYXlvdXRUZXN0cy9mYXN0L2V2ZW50cy90b3Vj
aC9nZXN0dXJlL3RvdWNoLWdlc3R1cmUtc2Nyb2xsLXNoeS10YXJnZXQuaHRtbApuZXcgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
Li5kNmZjYTA4MWU2MDFhY2IxMTIxYTUyMjgxNDc1N2NlZTYyMTdlNjc1Ci0tLSAvZGV2L251bGwK
KysrIGIvTGF5b3V0VGVzdHMvZmFzdC9ldmVudHMvdG91Y2gvZ2VzdHVyZS90b3VjaC1nZXN0dXJl
LXNjcm9sbC1zaHktdGFyZ2V0Lmh0bWwKQEAgLTAsMCArMSwxOTMgQEAKKzwhRE9DVFlQRSBIVE1M
IFBVQkxJQyAiLS8vSUVURi8vRFREIEhUTUwvL0VOIj4KKzxodG1sPgorPGhlYWQ+Cis8bGluayBy
ZWw9InN0eWxlc2hlZXQiIGhyZWY9Ii4uLy4uLy4uL2pzL3Jlc291cmNlcy9qcy10ZXN0LXN0eWxl
LmNzcyI+Cis8c2NyaXB0IHNyYz0iLi4vLi4vLi4vanMvcmVzb3VyY2VzL2pzLXRlc3QtcHJlLmpz
Ij48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSIuLi8uLi8uLi9qcy9yZXNvdXJjZXMvanMtdGVzdC1w
b3N0LWZ1bmN0aW9uLmpzIj48L3NjcmlwdD4KKzxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+CisjdG91
Y2h0YXJnZXQgeworICB3aWR0aDogMTAwcHg7CisgIGhlaWdodDogMTAwcHg7CisgIHBvc2l0aW9u
OiBhYnNvbHV0ZTsKKyAgYmFja2dyb3VuZDogd2hpdGU7CisgIHRvcDogMTAwcHg7CisgIGxlZnQ6
IDEwMHB4OworfQorCisjbW92aW5nYm94IHsKKyAgd2lkdGg6IDEwMCU7CisgIGhlaWdodDogMTAw
JTsKKyAgcG9zaXRpb246IGFic29sdXRlOworICB3b3JkLXdyYXA6IGJyZWFrLXdvcmQ7CisgIG92
ZXJmbG93LXk6IHNjcm9sbDsKKyAgb3ZlcmZsb3cteDogc2Nyb2xsOworICBkaXNwbGF5OiBibG9j
azsKK30KKworLmdyZWVuYm94IHsKKyAgd2lkdGg6IDEwMHB4OworICBoZWlnaHQ6IDEwMHB4Owor
ICBiYWNrZ3JvdW5kOiBncmVlbjsKKyAgcGFkZGluZzogMHB4OworICBtYXJnaW46IDBweDsKK30K
KworLnJlZGJveCB7CisgIHdpZHRoOiAxMDBweDsKKyAgaGVpZ2h0OiAxMDBweDsKKyAgYmFja2dy
b3VuZDogcmVkOworICBwYWRkaW5nOiAwcHg7CisgIG1hcmdpbjogMHB4OworfQorCit0ZCB7Cisg
IHBhZGRpbmc6IDBweDsKK30KKzwvc3R5bGU+Cis8L2hlYWQ+Cis8Ym9keSBzdHlsZT0ibWFyZ2lu
OjAiIG9ubG9hZD0icnVuVGVzdCgpOyI+Cis8ZGl2IGlkPSJ0b3VjaHRhcmdldCI+CisgIDxkaXYg
aWQ9Im1vdmluZ2JveCI+CisgICAgPHRhYmxlIGJvcmRlcj0iMCIgY2VsbHNwYWNpbmc9IjBweCIg
aWQ9InRhYmxlIj4KKyAgICAgIDx0cj4KKyAgICAgICAgPHRkPjxkaXYgY2xhc3M9InJlZGJveCIg
aWQ9InJlZGJveCI+PC9kaXY+PC90ZD4KKyAgICAgICAgPHRkPjxkaXYgY2xhc3M9ImdyZWVuYm94
IiBpZD0iZ3JlZW5ib3hfMSI+PC9kaXY+PC90ZD4KKyAgICAgIDwvdHI+CisgICAgICA8dHI+Cisg
ICAgICAgIDx0ZD48ZGl2IGNsYXNzPSJncmVlbmJveCIgaWQ9ImdyZWVuYm94XzIiPjwvZGl2Pjwv
dGQ+CisgICAgICAgIDx0ZD48ZGl2IGNsYXNzPSJncmVlbmJveCIgaWQ9ImdyZWVuYm94XzMiPjwv
ZGl2PjwvdGQ+CisgICAgICA8L3RyPgorICAgIDwvdGFibGU+CisgIDwvZGl2PgorPC9kaXY+CisK
KzxwIGlkPSJkZXNjcmlwdGlvbiI+PC9wPgorPGRpdiBpZD0iY29uc29sZSI+PC9kaXY+Cis8c2Ny
aXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CisKK3ZhciBtb3ZpbmdkaXY7Cit2YXIgZXhwZWN0
ZWRTY3JvbGxzVG90YWwgPSAyOwordmFyIHNjcm9sbHNPY2N1cnJlZCA9IDA7Cit2YXIgc2Nyb2xs
QW1vdW50WCA9IFsnNjMnLCAnOTAnXTsKK3ZhciBzY3JvbGxBbW91bnRZID0gWyc2MicsICc5NSdd
OwordmFyIGdlc3R1cmVEaXNwYXRjaFJlY29yZCA9IFsnMTMnLCAnMTMnXTsKKworZG9jdW1lbnQu
b25rZXlwcmVzcyA9IGZ1bmN0aW9uKCkKK3sKKyAgICBkZWJ1ZygncmVjZWl2ZWQgZWxlbWVudCBy
ZW1vdmluZyBrZXlwcmVzcycpOworICAgIHZhciBwYXJlbnQgPSBkb2N1bWVudC5nZXRFbGVtZW50
QnlJZCgndG91Y2h0YXJnZXQnKTsKKyAgICBtb3ZpbmdkaXYgPSBkb2N1bWVudC5nZXRFbGVtZW50
QnlJZCgnbW92aW5nYm94Jyk7CisgICAgcGFyZW50LnJlbW92ZUNoaWxkKG1vdmluZ2Rpdik7Cisg
ICAgcmV0dXJuIGZhbHNlOworfQorCitmdW5jdGlvbiBsb2dGaXJzdFRvdWNoUG9pbnQoZXZlbnQp
Cit7CisgICAgZGVidWcoJ2NsaWVudCBpZCcgKyBldmVudC50YXJnZXQuaWQpOworICAgIGRlYnVn
KCdjbGllbnRYOiAnICsgZXZlbnQudG91Y2hlc1swXS5jbGllbnRYICsgJyBjbGllbnRZOiAnICsg
ZXZlbnQudG91Y2hlc1swXS5jbGllbnRZKTsKK30KKworZnVuY3Rpb24gY2hlY2tTY3JvbGxPZmZz
ZXQoKQoreworICAgIG1vdmluZ2RpdiA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdtb3Zpbmdi
b3gnKTsKKyAgICBpZiAod2luZG93LmV2ZW50U2VuZGVyKSB7CisgICAgICAgIHNob3VsZEJlKCdt
b3ZpbmdkaXYuc2Nyb2xsVG9wJywgc2Nyb2xsQW1vdW50WVtzY3JvbGxzT2NjdXJyZWRdKTsKKyAg
ICAgICAgc2hvdWxkQmUoJ21vdmluZ2Rpdi5zY3JvbGxMZWZ0Jywgc2Nyb2xsQW1vdW50WFtzY3Jv
bGxzT2NjdXJyZWRdKTsKKyAgICAgICAgaWYgKHdpbmRvdy5pbnRlcm5hbHMpIHsKKyAgICAgICAg
ICAgIHNob3VsZEJlKCd3aW5kb3cuaW50ZXJuYWxzLnJlY29yZE9mR2VzdHVyZVNjcm9sbEV2ZW50
cyhtb3ZpbmdkaXYpJywgZ2VzdHVyZURpc3BhdGNoUmVjb3JkW3Njcm9sbHNPY2N1cnJlZF0pOwor
ICAgICAgICB9CisgICAgICAgIHNjcm9sbHNPY2N1cnJlZCsrOworICAgIH0KKworICAgIGlmIChz
Y3JvbGxzT2NjdXJyZWQgPT0gZXhwZWN0ZWRTY3JvbGxzVG90YWwpIHsKKyAgICAgICAgLy8gSWYg
d2UndmUgZ290IGhlcmUsIHdlJ3ZlIHBhc3NlZC4KKyAgICB9IGVsc2UgeworICAgICAgICBzZWNv
bmRUb3VjaERyYWdTZXF1ZW5jZSgpOworICAgIH0KK30KKworZnVuY3Rpb24gZmluZ2VyVXAoZXZl
bnQpCit7CisgICAgaWYgKCF3aW5kb3cubGF5b3V0VGVzdENvbnRyb2xsZXIpIHsKKyAgICAgICAg
ZGVidWcoJ21vdmVkOiAnICsgZXZlbnQuY3VycmVudFRhcmdldC5zY3JvbGxUb3AgKyAnLCAnICsg
ZXZlbnQuY3VycmVudFRhcmdldC5zY3JvbGxMZWZ0KTsKKyAgICAgICAgZGVidWcoJ3RhcmdldDog
JyArIGV2ZW50LmN1cnJlbnRUYXJnZXQuaWQpOworICAgIH0KKyAgICByZXR1cm4gdHJ1ZTsgIC8v
IFdhbnQgdGhlIGRlZmF1bHQgYmVoYXZpb3VyLgorfQorCitmdW5jdGlvbiBmaXJzdFRvdWNoRHJh
Z1NlcXVlbmNlKCkKK3sKKyAgICBkZWJ1ZygiZmlyc3QgZ2VzdHVyZSIpOworICAgIG1vdmluZ2Rp
diA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdtb3Zpbmdib3gnKTsKKyAgICB3aW5kb3cuaW50
ZXJuYWxzLmVuYWJsZUdlc3R1cmVTY3JvbGxFdmVudFJlY29yZChtb3ZpbmdkaXYpOworCisgICAg
d2luZG93LmludGVybmFscy5zZW5kU2Nyb2xsQmVnaW5HZXN0dXJlRXZlbnQoZG9jdW1lbnQsIDEw
MSwgMTAxKTsKKyAgICB3aW5kb3cuaW50ZXJuYWxzLnNlbmRTY3JvbGxVcGRhdGVHZXN0dXJlRXZl
bnQoZG9jdW1lbnQsIDEwMSwgMTAxLCAtMjAsIC0yOCk7CisgICAgd2luZG93LmludGVybmFscy5z
ZW5kU2Nyb2xsVXBkYXRlR2VzdHVyZUV2ZW50KGRvY3VtZW50LCA4NywgOTcsIC0xNCwgLTQpOwor
ICAgIHdpbmRvdy5pbnRlcm5hbHMuc2VuZFNjcm9sbFVwZGF0ZUdlc3R1cmVFdmVudChkb2N1bWVu
dCwgNTgsIDY3LCAtMjksIC0zMCk7CisgICAgd2luZG93LmludGVybmFscy5zZW5kU2Nyb2xsRW5k
R2VzdHVyZUV2ZW50KGRvY3VtZW50LCA1OCwgNjcsIDAsIDApOworCisgICAgLy8gV2FpdCBmb3Ig
bGF5b3V0LgorICAgIGNoZWNrU2Nyb2xsT2Zmc2V0KCk7Cit9CisKK2Z1bmN0aW9uIHNlY29uZFRv
dWNoRHJhZ1NlcXVlbmNlKCkKK3sKKyAgICBtb3ZpbmdkaXYuc2Nyb2xsVG9wID0gMDsKKyAgICBt
b3ZpbmdkaXYuc2Nyb2xsTGVmdCA9IDA7CisKKyAgICBkZWJ1Zygic2Vjb25kIGdlc3R1cmUiKTsK
KyAgICB3aW5kb3cuaW50ZXJuYWxzLnNlbmRTY3JvbGxCZWdpbkdlc3R1cmVFdmVudChkb2N1bWVu
dCwgMTAxLCAxMDEpOworICAgIHdpbmRvdy5pbnRlcm5hbHMuc2VuZFNjcm9sbFVwZGF0ZUdlc3R1
cmVFdmVudChkb2N1bWVudCwgMTAxLCAxMDEsIC0yMCwgLTI4KTsKKyAgICB3aW5kb3cuaW50ZXJu
YWxzLnNlbmRTY3JvbGxVcGRhdGVHZXN0dXJlRXZlbnQoZG9jdW1lbnQsIDg3LCA5NywgLTE0LCAt
NCk7CisKKyAgICAvLyBTZW5kIGEga2V5IHRvIGRlbGV0ZSB0aGUgdGFyZ2V0IEVsZW1lbnQuCisg
ICAgZXZlbnRTZW5kZXIua2V5RG93bigiZCIsIFtdKTsKKyAgICAKKyAgICB3aW5kb3cuaW50ZXJu
YWxzLnNlbmRTY3JvbGxVcGRhdGVHZXN0dXJlRXZlbnQoZG9jdW1lbnQsIDU4LCA2NywgLTI5LCAt
MzApOworICAgIHdpbmRvdy5pbnRlcm5hbHMuc2VuZFNjcm9sbEVuZEdlc3R1cmVFdmVudChkb2N1
bWVudCwgNTgsIDY3LCAwLCAwKTsKKworICAgIC8vIEJ5IGdldHRpbmcgaGVyZSBzdWNjZXNzZnVs
bHksIHRoZSB0ZXN0IGRlbW9uc3RyYXRlcyB0aGF0IHRoZSBpbXBsZW1lbnRhdGlvbgorICAgIC8v
IGRvZXMgbm90IGNyYXNoIHdoZW4gdGhlIGxhdGNoZWQgRWxlbWVudCBpcyByZW1vdmVkIGZyb20g
dGhlIERPTS4KKyAgICBzdWNjZXNzZnVsbHlQYXJzZWQgPSB0cnVlOworICAgIGlzU3VjY2Vzc2Z1
bGx5UGFyc2VkKCk7CisgICAgaWYgKHdpbmRvdy5sYXlvdXRUZXN0Q29udHJvbGxlcikKKyAgICAg
ICAgbGF5b3V0VGVzdENvbnRyb2xsZXIubm90aWZ5RG9uZSgpOworfQorCitmdW5jdGlvbiBleGl0
SWZOZWNlc3NhcnkoKQoreworICAgIGRlYnVnKCd3aW5kb3cuaW50ZXJuYWxzIG5vdCBpbXBsZW1l
bnRlZCBvbiB0aGlzIHBsYXRmb3JtIG9yIGdlc3R1cmUgc2Nyb2xsIGhhbmRsaW5nIGJyb2tlbicp
OworICAgIHN1Y2Nlc3NmdWxseVBhcnNlZCA9IHRydWU7CisgICAgaXNTdWNjZXNzZnVsbHlQYXJz
ZWQoKTsKKyAgICBpZiAod2luZG93LmxheW91dFRlc3RDb250cm9sbGVyKQorICAgICAgICBsYXlv
dXRUZXN0Q29udHJvbGxlci5ub3RpZnlEb25lKCk7Cit9CisKK2lmICh3aW5kb3cubGF5b3V0VGVz
dENvbnRyb2xsZXIpCisgICAgbGF5b3V0VGVzdENvbnRyb2xsZXIud2FpdFVudGlsRG9uZSgpOwor
CitmdW5jdGlvbiBjaGVja1Rlc3REZXBlbmRlbmNpZXMoKQoreworICAgIHJldHVybiB3aW5kb3cu
ZXZlbnRTZW5kZXIgJiYgd2luZG93LmludGVybmFscyAmJiB3aW5kb3cuaW50ZXJuYWxzLnNlbmRT
Y3JvbGxCZWdpbkdlc3R1cmVFdmVudCAmJiB3aW5kb3cuaW50ZXJuYWxzLnNlbmRTY3JvbGxVcGRh
dGVHZXN0dXJlRXZlbnQgJiYgd2luZG93LmludGVybmFscy5zZW5kU2Nyb2xsRW5kR2VzdHVyZUV2
ZW50OworfQorCitmdW5jdGlvbiBydW5UZXN0KCkKK3sKKyAgICBpZiAod2luZG93LmV2ZW50U2Vu
ZGVyKSB7CisgICAgICAgIGRlc2NyaXB0aW9uKCdUaGlzIHRlc3RzIGdlc3R1cmUgc2Nyb2xsaW5n
IHRvIGEgZGl2IGRlbGV0ZWQgd2hpbGUgbGF0Y2hlZCwgJyArIAorICAgICAgICAgICAgJ1NxdWFy
ZSBpcyAobW9zdGx5KSBncmVlbiBvbiBwYXNzJyk7CisgICAgICAgIGlmIChjaGVja1Rlc3REZXBl
bmRlbmNpZXMoKSkKKyAgICAgICAgICAgIGZpcnN0VG91Y2hEcmFnU2VxdWVuY2UoKTsKKyAgICAg
ICAgZWxzZQorICAgICAgICAgICAgZXhpdElmTmVjZXNzYXJ5KCk7CisgICAgfSBlbHNlIHsKKyAg
ICAgICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigndG91Y2hzdGFydCcsIGxvZ0ZpcnN0VG91
Y2hQb2ludCk7CisgICAgICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ3RvdWNobW92ZScs
IGxvZ0ZpcnN0VG91Y2hQb2ludCk7CisgICAgICAgIGRlYnVnKCJUaGlzIHRlc3QgcmVxdWlyZXMg
RHVtcFJlbmRlclRyZWUgYW5kIHdpbmRvdy5pbnRlcm5hbHMuICBUb3VjaC1zY3JvbGwgdGhlIHJl
ZCByZWN0IHRvIGxvZy4iKTsKKyAgICAgICAgbW92aW5nZGl2LmFkZEV2ZW50TGlzdGVuZXIoJ3Rv
dWNoZW5kJywgZmluZ2VyVXAsIGZhbHNlKTsKKyAgICB9Cit9Cis8L3NjcmlwdD4KKzwvYm9keT4K
KzwvaHRtbD4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2Zhc3QvZXZlbnRzL3RvdWNoL3Jlc291
cmNlcy9zY3JvbGwtaW5zaWRlLWlmcmFtZS5odG1sIGIvTGF5b3V0VGVzdHMvZmFzdC9ldmVudHMv
dG91Y2gvcmVzb3VyY2VzL3Njcm9sbC1pbnNpZGUtaWZyYW1lLmh0bWwKbmV3IGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uOTRm
Nzg4NzdjNTJiYTU3NmI0YzUxMTgwMGY0MTRiODRkMDQzN2Q5YwotLS0gL2Rldi9udWxsCisrKyBi
L0xheW91dFRlc3RzL2Zhc3QvZXZlbnRzL3RvdWNoL3Jlc291cmNlcy9zY3JvbGwtaW5zaWRlLWlm
cmFtZS5odG1sCkBAIC0wLDAgKzEsMzQgQEAKKzxodG1sPgorPGhlYWQ+Cis8c3R5bGUgdHlwZT0i
dGV4dC9jc3MiPgorI2dyZWVuYm94IHsKKyAgd2lkdGg6IDEwMHB4OworICBoZWlnaHQ6IDEwMHB4
OworICBiYWNrZ3JvdW5kOiBncmVlbjsKKyAgcGFkZGluZzogMHB4OworICBtYXJnaW46IDBweDth
Cit9CisjcmVkYm94IHsKKyAgd2lkdGg6IDEwMHB4OworICBoZWlnaHQ6IDEwMHB4OworICBiYWNr
Z3JvdW5kOiByZWQ7CisgIHBhZGRpbmc6IDBweDsKKyAgbWFyZ2luOiAwcHg7Cit9CisKK3RkIHsK
KyAgcGFkZGluZzogMHB4OworfQorPC9zdHlsZT4KKzwvaGVhZD4KKzxib2R5IHN0eWxlPSJtYXJn
aW46MCIgb25sb2FkPSJwYXJlbnQucnVuVGVzdCgpIj4KKworPHRhYmxlIGlkPSJ0YWJsZV90b19m
aWxsIj4KKyAgICA8dHI+PHRkPjxkaXYgaWQ9ImdyZWVuYm94Ij48L2Rpdj48L3RkPjwvdHI+Cisg
ICAgPHRyPjx0ZD48ZGl2IGlkPSJyZWRib3giPjwvZGl2PjwvdGQ+PC90cj4KKyAgICA8dHI+PHRk
PjxkaXYgaWQ9ImdyZWVuYm94Ij48L2Rpdj48L3RkPjwvdHI+CisgICAgPHRyPjx0ZD48ZGl2IGlk
PSJyZWRib3giPjwvZGl2PjwvdGQ+PC90cj4KKzwvdGFibGU+Cis8Ym9keT4KKzwvaHRtbD4KKwo=
</data>
<flag name="review"
          id="132500"
          type_id="1"
          status="-"
          setter="jamesr"
    />
    <flag name="commit-queue"
          id="132504"
          type_id="3"
          status="-"
          setter="buildbot"
    />
          </attachment>
      

    </bug>

</bugzilla>