<?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>174457</bug_id>
          
          <creation_ts>2017-07-13 01:06:22 -0700</creation_ts>
          <short_desc>[GTK][WPE] Implement antialiased rounded rectangle clipping in TextureMapper</short_desc>
          <delta_ts>2020-11-08 18:21:28 -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>WebKitGTK</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          <see_also>https://bugs.webkit.org/show_bug.cgi?id=174157</see_also>
    
    <see_also>https://bugs.webkit.org/show_bug.cgi?id=115615</see_also>
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>215445</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Miguel Gomez">magomez</reporter>
          <assigned_to name="Miguel Gomez">magomez</assigned_to>
          <cc>bugs-noreply</cc>
    
    <cc>cgarcia</cc>
    
    <cc>cmarcelo</cc>
    
    <cc>ews-watchlist</cc>
    
    <cc>fujii</cc>
    
    <cc>gyuyoung.kim</cc>
    
    <cc>kondapallykalyan</cc>
    
    <cc>luiz</cc>
    
    <cc>noam</cc>
    
    <cc>ryuan.choi</cc>
    
    <cc>sergio</cc>
    
    <cc>zeno</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1328398</commentid>
    <comment_count>0</comment_count>
    <who name="Miguel Gomez">magomez</who>
    <bug_when>2017-07-13 01:06:22 -0700</bug_when>
    <thetext>As commented in bug 174157, image elements that are drawn in their own RenderLayer can be directly composited without needing to render them to a backing store. This is an optimization that saves rendering time and also memory (we use exactly the size of the image instead of the wasting tiles).

One of these cases that are optimized is when the image has a border-radius property but doesn&apos;t have a visible border. This should be directly composited and the rounded rectangle should be clipped during the composition. But this rounded rectangle clipping is not supported in the TextureMapper yet. In bug 174157 a workaround was added so this case was not directly composited. While this works, it&apos;s not optimum.

The optimum fix is to implement rounded rectangle clipping in the TextureMapper and then directly composite the images with border-radius, while clipping appropriately.

As a reminder for me: we need to also support antialiasing during the clipping. I don&apos;t see how this can be performed with the stencil, so it discards the approach I was making for the clipping. I think the clipping needs to be implemented in the shader, checking for each pixel whether it&apos;s not inside the clipping area or not. So pixels inside the rectagle are draw, pixels outside arent&apos;, and pixels in the border are maybe blended for antialiasing purposes.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1699783</commentid>
    <comment_count>1</comment_count>
      <attachid>411876</attachid>
    <who name="Miguel Gomez">magomez</who>
    <bug_when>2020-10-20 09:44:30 -0700</bug_when>
    <thetext>Created attachment 411876
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1700021</commentid>
    <comment_count>2</comment_count>
      <attachid>411876</attachid>
    <who name="Fujii Hironori">fujii</who>
    <bug_when>2020-10-20 17:10:23 -0700</bug_when>
    <thetext>Comment on attachment 411876
Patch

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

&gt; Source/WebCore/ChangeLog:12
&gt; +        the defined rounded rectangle, and paints or skips it as needed.

The problem of this approach is that it can&apos;t be stacked. Right?
What will happen there are nested rounded clipped layers?

In addition to it, can this approach clip child layers?

&gt; Source/WebCore/ChangeLog:14
&gt; +        Covered by existent tests.

This is a behavior change. Why don&apos;t this change update TestExpectations?

&gt; Source/WebCore/platform/graphics/texmap/TextureMapperGL.cpp:954
&gt; +    // This is implemented by telling the fragment shader to check whether each pixel is inside the rounded rectangle

Is it a good idea to update scissorBox in this case to narrow the target region?

    FloatQuad quad = modelViewMatrix.projectQuad(targetRect.rect());
    IntRect rect = quad.enclosingBoundingBox();
    clipStack().intersect(rect);

&gt; Source/WebCore/platform/graphics/texmap/TextureMapperGL.cpp:965
&gt; +        return;

I think it&apos;d be good to fall back to rect clipping in this case.
beginClip(modelViewMatrix, targetRect.rect());</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1700023</commentid>
    <comment_count>3</comment_count>
    <who name="Fujii Hironori">fujii</who>
    <bug_when>2020-10-20 17:14:56 -0700</bug_when>
    <thetext>Does this change need to revert r219445?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1700038</commentid>
    <comment_count>4</comment_count>
      <attachid>411876</attachid>
    <who name="Fujii Hironori">fujii</who>
    <bug_when>2020-10-20 18:48:05 -0700</bug_when>
    <thetext>Comment on attachment 411876
Patch

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

&gt; Source/WebCore/platform/graphics/texmap/ClipStack.h:35
&gt; +        State(const IntRect&amp; scissors = IntRect(), int stencil = 1, const FloatRoundedRect&amp; roundedRect = FloatRoundedRect(), const TransformationMatrix&amp; transform = TransformationMatrix())

You added arguments to ctor, but not used. Why do you want to add this arugments?

&gt; Source/WebCore/platform/graphics/texmap/TextureMapperShaderProgram.cpp:429
&gt; +            vec2 topLeftCentre = bounds.xy + topLeftRadii;

You are using &apos;Centre&apos; and &apos;center&apos;. Do you prefer US English? Do you want to spell &apos;topLeftCenter&apos; here?

&gt; Source/WebCore/platform/graphics/texmap/TextureMapperShaderProgram.cpp:456
&gt; +            color *= roundedRectCoverage(fragCoord.xy);

I&apos;m wondering why all components of &apos;color&apos; is scaled. Why not only color.a?
color.a *= roundedRectCoverage(fragCoord.xy);
I know applyAlphaBlur does same above.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1700040</commentid>
    <comment_count>5</comment_count>
      <attachid>411876</attachid>
    <who name="Fujii Hironori">fujii</who>
    <bug_when>2020-10-20 19:03:28 -0700</bug_when>
    <thetext>Comment on attachment 411876
Patch

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

&gt; Source/WebCore/platform/graphics/texmap/TextureMapperShaderProgram.cpp:444
&gt; +            return 1.0 - dot(vec4(isOut), cornerCoverages);

You are calculating cornerCoverages and isOut for all four corners. Is this effective? What about an idea calculating only one corner?
if (p.x &lt; topLeftCentre.x &amp;&amp; p.y &lt; topLeftCentre.y) {
    return ellipsisCoverage(p, topLeftCentre, topLeftRadii);
} else if (...) {
...
} else {
    return 1;
}</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1700092</commentid>
    <comment_count>6</comment_count>
      <attachid>411876</attachid>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2020-10-21 00:28:28 -0700</bug_when>
    <thetext>Comment on attachment 411876
Patch

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

&gt;&gt; Source/WebCore/ChangeLog:14
&gt;&gt; +        Covered by existent tests.
&gt; 
&gt; This is a behavior change. Why don&apos;t this change update TestExpectations?

I expected this to fix several backdrop filter tests at least.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1700097</commentid>
    <comment_count>7</comment_count>
    <who name="Miguel Gomez">magomez</who>
    <bug_when>2020-10-21 00:47:26 -0700</bug_when>
    <thetext>(In reply to Fujii Hironori from comment #2)
&gt; Comment on attachment 411876 [details]
&gt; Patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=411876&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/ChangeLog:12
&gt; &gt; +        the defined rounded rectangle, and paints or skips it as needed.
&gt; 
&gt; The problem of this approach is that it can&apos;t be stacked. Right?
&gt; What will happen there are nested rounded clipped layers?

As it&apos;s done it can&apos;t be stacked, only a single clip can be performed. It can be modified to stack several clips, but it&apos;s expensive as each pixels needs to check whether it&apos;s inside all of the rectangles passed.

&gt; In addition to it, can this approach clip child layers?

Yes. Every TextureMapper draw that happens between beginClip and endClip that uses a shader will be clipped.

&gt; &gt; Source/WebCore/ChangeLog:14
&gt; &gt; +        Covered by existent tests.
&gt; 
&gt; This is a behavior change. Why don&apos;t this change update TestExpectations?

Because this doesn&apos;t really fix any test. There are other issues to fix besides adding this implementation.

&gt; &gt; Source/WebCore/platform/graphics/texmap/TextureMapperGL.cpp:954
&gt; &gt; +    // This is implemented by telling the fragment shader to check whether each pixel is inside the rounded rectangle
&gt; 
&gt; Is it a good idea to update scissorBox in this case to narrow the target
&gt; region?
&gt; 
&gt;     FloatQuad quad = modelViewMatrix.projectQuad(targetRect.rect());
&gt;     IntRect rect = quad.enclosingBoundingBox();
&gt;     clipStack().intersect(rect);

Indeed! That&apos;s a good idea that will reduce the amount of pixels.

&gt; &gt; Source/WebCore/platform/graphics/texmap/TextureMapperGL.cpp:965
&gt; &gt; +        return;
&gt; 
&gt; I think it&apos;d be good to fall back to rect clipping in this case.
&gt; beginClip(modelViewMatrix, targetRect.rect());

Ok.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1700098</commentid>
    <comment_count>8</comment_count>
    <who name="Miguel Gomez">magomez</who>
    <bug_when>2020-10-21 00:54:37 -0700</bug_when>
    <thetext>(In reply to Fujii Hironori from comment #4)
&gt; Comment on attachment 411876 [details]
&gt; Patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=411876&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/platform/graphics/texmap/ClipStack.h:35
&gt; &gt; +        State(const IntRect&amp; scissors = IntRect(), int stencil = 1, const FloatRoundedRect&amp; roundedRect = FloatRoundedRect(), const TransformationMatrix&amp; transform = TransformationMatrix())
&gt; 
&gt; You added arguments to ctor, but not used. Why do you want to add this
&gt; arugments?

Just to use the same structure than the previous parameters. They could be removed.

&gt; &gt; Source/WebCore/platform/graphics/texmap/TextureMapperShaderProgram.cpp:429
&gt; &gt; +            vec2 topLeftCentre = bounds.xy + topLeftRadii;
&gt; 
&gt; You are using &apos;Centre&apos; and &apos;center&apos;. Do you prefer US English? Do you want
&gt; to spell &apos;topLeftCenter&apos; here?

Ooops, my fault! It should be center everywhere.

&gt; &gt; Source/WebCore/platform/graphics/texmap/TextureMapperShaderProgram.cpp:456
&gt; &gt; +            color *= roundedRectCoverage(fragCoord.xy);
&gt; 
&gt; I&apos;m wondering why all components of &apos;color&apos; is scaled. Why not only color.a?
&gt; color.a *= roundedRectCoverage(fragCoord.xy);
&gt; I know applyAlphaBlur does same above.

Yes, you&apos;re right, I forgot to update that.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1700099</commentid>
    <comment_count>9</comment_count>
    <who name="Miguel Gomez">magomez</who>
    <bug_when>2020-10-21 00:56:55 -0700</bug_when>
    <thetext>(In reply to Fujii Hironori from comment #5)
&gt; Comment on attachment 411876 [details]
&gt; Patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=411876&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/platform/graphics/texmap/TextureMapperShaderProgram.cpp:444
&gt; &gt; +            return 1.0 - dot(vec4(isOut), cornerCoverages);
&gt; 
&gt; You are calculating cornerCoverages and isOut for all four corners. Is this
&gt; effective? What about an idea calculating only one corner?
&gt; if (p.x &lt; topLeftCentre.x &amp;&amp; p.y &lt; topLeftCentre.y) {
&gt;     return ellipsisCoverage(p, topLeftCentre, topLeftRadii);
&gt; } else if (...) {
&gt; ...
&gt; } else {
&gt;     return 1;
&gt; }

Yes, you&apos;re right.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1700100</commentid>
    <comment_count>10</comment_count>
      <attachid>411876</attachid>
    <who name="Noam Rosenthal">noam</who>
    <bug_when>2020-10-21 00:57:10 -0700</bug_when>
    <thetext>Comment on attachment 411876
Patch

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

&gt;&gt;&gt; Source/WebCore/ChangeLog:12
&gt;&gt;&gt; +        the defined rounded rectangle, and paints or skips it as needed.
&gt;&gt; 
&gt;&gt; The problem of this approach is that it can&apos;t be stacked. Right?
&gt;&gt; What will happen there are nested rounded clipped layers?
&gt;&gt; 
&gt;&gt; In addition to it, can this approach clip child layers?
&gt; 
&gt; As it&apos;s done it can&apos;t be stacked, only a single clip can be performed. It can be modified to stack several clips, but it&apos;s expensive as each pixels needs to check whether it&apos;s inside all of the rectangles passed.

The original plan with this was to fall back to an intermediate surface when rounded-rect clipping needs to occur for a stack of elements, and then clip that surface with the rounded-rectangle. probably achievable today.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1700101</commentid>
    <comment_count>11</comment_count>
    <who name="Miguel Gomez">magomez</who>
    <bug_when>2020-10-21 01:01:41 -0700</bug_when>
    <thetext>(In reply to Carlos Garcia Campos from comment #6)
&gt; Comment on attachment 411876 [details]
&gt; Patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=411876&amp;action=review
&gt; 
&gt; &gt;&gt; Source/WebCore/ChangeLog:14
&gt; &gt;&gt; +        Covered by existent tests.
&gt; &gt; 
&gt; &gt; This is a behavior change. Why don&apos;t this change update TestExpectations?
&gt; 
&gt; I expected this to fix several backdrop filter tests at least.

It doesn&apos;t. There must be some piece missing besides this. I&apos;ll look into it when this is landed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1700104</commentid>
    <comment_count>12</comment_count>
    <who name="Miguel Gomez">magomez</who>
    <bug_when>2020-10-21 01:08:20 -0700</bug_when>
    <thetext>(In reply to Fujii Hironori from comment #3)
&gt; Does this change need to revert r219445?

The idea is to remove that change, yes, but there&apos;s something to be done besides removing that code.

Just after that change there&apos;s this call
return m_graphicsLayer-&gt;shouldDirectlyCompositeImage(image);

My idea is to use that call to the CoordinatedGraphicsLayer to check whether the layer transform is invertible, and return false if its not, so cairo does the job in that case. I need to be sure that the transformation matrix is already stored in the CoordinatedGraphicsLayer at that point though.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1700107</commentid>
    <comment_count>13</comment_count>
    <who name="Miguel Gomez">magomez</who>
    <bug_when>2020-10-21 01:24:03 -0700</bug_when>
    <thetext> 
&gt; The original plan with this was to fall back to an intermediate surface when
&gt; rounded-rect clipping needs to occur for a stack of elements, and then clip
&gt; that surface with the rounded-rectangle. probably achievable today.

This approach can clip a stack of elements. The clipping layer will call beginClip and start drawing its children, will will all be clipped. Then the clip will be deactivated with endClip.

What this approach can&apos;t do is perform several rounded rect clips at the same time. It will only perform the last one set. I thought this would be enough but I&apos;ll add that feature as well.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1700108</commentid>
    <comment_count>14</comment_count>
    <who name="Noam Rosenthal">noam</who>
    <bug_when>2020-10-21 01:30:45 -0700</bug_when>
    <thetext>(In reply to Miguel Gomez from comment #13)
&gt;  
&gt; &gt; The original plan with this was to fall back to an intermediate surface when
&gt; &gt; rounded-rect clipping needs to occur for a stack of elements, and then clip
&gt; &gt; that surface with the rounded-rectangle. probably achievable today.
&gt; 
&gt; This approach can clip a stack of elements. The clipping layer will call
&gt; beginClip and start drawing its children, will will all be clipped. Then the
&gt; clip will be deactivated with endClip.
&gt; 
&gt; What this approach can&apos;t do is perform several rounded rect clips at the
&gt; same time. It will only perform the last one set. I thought this would be
&gt; enough but I&apos;ll add that feature as well.

Gotcha. It&apos;s up to you whether that is enough at this point.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1700130</commentid>
    <comment_count>15</comment_count>
      <attachid>411876</attachid>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2020-10-21 03:07:53 -0700</bug_when>
    <thetext>Comment on attachment 411876
Patch

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

&gt;&gt;&gt;&gt;&gt; Source/WebCore/ChangeLog:14
&gt;&gt;&gt;&gt;&gt; +        Covered by existent tests.
&gt;&gt;&gt;&gt; 
&gt;&gt;&gt;&gt; This is a behavior change. Why don&apos;t this change update TestExpectations?
&gt;&gt;&gt; 
&gt;&gt;&gt; I expected this to fix several backdrop filter tests at least.
&gt;&gt; 
&gt;&gt; Because this doesn&apos;t really fix any test. There are other issues to fix besides adding this implementation.
&gt; 
&gt; It doesn&apos;t. There must be some piece missing besides this. I&apos;ll look into it when this is landed.

Yes, we are still passing the rect, I think I have the changes needed in a local branch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1700136</commentid>
    <comment_count>16</comment_count>
    <who name="Miguel Gomez">magomez</who>
    <bug_when>2020-10-21 04:01:19 -0700</bug_when>
    <thetext>&gt; I&apos;m wondering why all components of &apos;color&apos; is scaled. Why not only color.a?
&gt; color.a *= roundedRectCoverage(fragCoord.xy);
&gt; I know applyAlphaBlur does same above.

In a lot of documentation that I&apos;ve checked all the components are multiplied for antialiasing purposes, and not only the alpha, that&apos;s why I did it that way.

But your question is a valid one! I&apos;ve been playing with both options and I see that the result is visually better when multiplying all the components and not just the alpha. Seems that the color darkening that&apos;s applied helps with the antialiasing effect.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1700137</commentid>
    <comment_count>17</comment_count>
    <who name="Noam Rosenthal">noam</who>
    <bug_when>2020-10-21 04:08:52 -0700</bug_when>
    <thetext>(In reply to Miguel Gomez from comment #16)
&gt; &gt; I&apos;m wondering why all components of &apos;color&apos; is scaled. Why not only color.a?
&gt; &gt; color.a *= roundedRectCoverage(fragCoord.xy);
&gt; &gt; I know applyAlphaBlur does same above.
&gt; 
&gt; In a lot of documentation that I&apos;ve checked all the components are
&gt; multiplied for antialiasing purposes, and not only the alpha, that&apos;s why I
&gt; did it that way.
You can setup the GL blending (glBlendFunc) as premultiplied or not-premultiplied. It&apos;s better to keep it consistent.

&gt; 
&gt; But your question is a valid one! I&apos;ve been playing with both options and I
&gt; see that the result is visually better when multiplying all the components
&gt; and not just the alpha. Seems that the color darkening that&apos;s applied helps
&gt; with the antialiasing effect.
The effect actually creates something along the lines of a = pow(a, 2), which is sort of an easing function of alpha, I suggest to make explicit :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1700140</commentid>
    <comment_count>18</comment_count>
      <attachid>411876</attachid>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2020-10-21 04:39:57 -0700</bug_when>
    <thetext>Comment on attachment 411876
Patch

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

&gt;&gt;&gt; Source/WebCore/platform/graphics/texmap/ClipStack.h:35
&gt;&gt;&gt; +        State(const IntRect&amp; scissors = IntRect(), int stencil = 1, const FloatRoundedRect&amp; roundedRect = FloatRoundedRect(), const TransformationMatrix&amp; transform = TransformationMatrix())
&gt;&gt; 
&gt;&gt; You added arguments to ctor, but not used. Why do you want to add this arugments?
&gt; 
&gt; Just to use the same structure than the previous parameters. They could be removed.

I think it&apos;s easier to use only FloatRoundedRect everywhere since we can have a FloatRoundedRect with 0 radii.

&gt; Source/WebCore/platform/graphics/texmap/ClipStack.h:42
&gt;          IntRect scissorBox;

We could rename this to just rect

&gt; Source/WebCore/platform/graphics/texmap/ClipStack.h:65
&gt; +    const FloatRoundedRect&amp; roundedRect() { return clipState.roundedRect; }
&gt; +    bool isRoundedRectClipEnabled() { return !clipState.roundedRect.isEmpty(); }

These should be const. If we just return the rect the caller can simply do rect().isRounded()

&gt; Source/WebCore/platform/graphics/texmap/TextureMapper.h:80
&gt; +    virtual void beginClip(const TransformationMatrix&amp;, const FloatRoundedRect&amp;) = 0;
&gt;      virtual void beginClip(const TransformationMatrix&amp;, const FloatRect&amp;) = 0;

Same here, just modify existing beingClip to receive a FloatRoundedRect

&gt;&gt;&gt; Source/WebCore/platform/graphics/texmap/TextureMapperGL.cpp:965
&gt;&gt;&gt; +        return;
&gt;&gt; 
&gt;&gt; I think it&apos;d be good to fall back to rect clipping in this case.
&gt;&gt; beginClip(modelViewMatrix, targetRect.rect());
&gt; 
&gt; Ok.

Should we also check it&apos;s not empty? or FloatRoundedRect::isRenderable?

&gt; Source/WebCore/platform/graphics/texmap/TextureMapperGL.cpp:969
&gt; +    clipStack().push();
&gt; +    clipStack().setRoundedRect(targetRect);
&gt; +    clipStack().setRoundedRectInverseTransform(modelViewMatrix.inverse().value());

So, this function could be like beginScissorClip(), beginRoundedClip, for example. Then the only beginClip would try first with RoundedClip, then Scissor clip and finally stencil</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1700357</commentid>
    <comment_count>19</comment_count>
      <attachid>411876</attachid>
    <who name="Fujii Hironori">fujii</who>
    <bug_when>2020-10-21 13:32:54 -0700</bug_when>
    <thetext>Comment on attachment 411876
Patch

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

&gt;&gt;&gt;&gt; Source/WebCore/platform/graphics/texmap/ClipStack.h:35
&gt;&gt;&gt;&gt; +        State(const IntRect&amp; scissors = IntRect(), int stencil = 1, const FloatRoundedRect&amp; roundedRect = FloatRoundedRect(), const TransformationMatrix&amp; transform = TransformationMatrix())
&gt;&gt;&gt; 
&gt;&gt;&gt; You added arguments to ctor, but not used. Why do you want to add this arugments?
&gt;&gt; 
&gt;&gt; Just to use the same structure than the previous parameters. They could be removed.
&gt; 
&gt; I think it&apos;s easier to use only FloatRoundedRect everywhere since we can have a FloatRoundedRect with 0 radii.

scissorBox and roundedRect live in different coordinate system. scissorBox is in the viewport coordinate system. roundedRect is in the transformed coordinate system. They can&apos;t be merged.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1700358</commentid>
    <comment_count>20</comment_count>
      <attachid>411876</attachid>
    <who name="Fujii Hironori">fujii</who>
    <bug_when>2020-10-21 13:39:49 -0700</bug_when>
    <thetext>Comment on attachment 411876
Patch

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

&gt;&gt;&gt;&gt; Source/WebCore/ChangeLog:12
&gt;&gt;&gt;&gt; +        the defined rounded rectangle, and paints or skips it as needed.
&gt;&gt;&gt; 
&gt;&gt;&gt; The problem of this approach is that it can&apos;t be stacked. Right?
&gt;&gt;&gt; What will happen there are nested rounded clipped layers?
&gt;&gt;&gt; 
&gt;&gt;&gt; In addition to it, can this approach clip child layers?
&gt;&gt; 
&gt;&gt; As it&apos;s done it can&apos;t be stacked, only a single clip can be performed. It can be modified to stack several clips, but it&apos;s expensive as each pixels needs to check whether it&apos;s inside all of the rectangles passed.
&gt; 
&gt; The original plan with this was to fall back to an intermediate surface when rounded-rect clipping needs to occur for a stack of elements, and then clip that surface with the rounded-rectangle. probably achievable today.

You don&apos;t need to add roundedRect to ClipStack::State if it can&apos;t be stacked at the moment. You can add m_roundedClipRect to TextureMapperGL. This is just an idea.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1700396</commentid>
    <comment_count>21</comment_count>
      <attachid>411876</attachid>
    <who name="Fujii Hironori">fujii</who>
    <bug_when>2020-10-21 14:32:36 -0700</bug_when>
    <thetext>Comment on attachment 411876
Patch

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

&gt;&gt;&gt;&gt;&gt; Source/WebCore/ChangeLog:12
&gt;&gt;&gt;&gt;&gt; +        the defined rounded rectangle, and paints or skips it as needed.
&gt;&gt;&gt;&gt; 
&gt;&gt;&gt;&gt; The problem of this approach is that it can&apos;t be stacked. Right?
&gt;&gt;&gt;&gt; What will happen there are nested rounded clipped layers?
&gt;&gt;&gt;&gt; 
&gt;&gt;&gt;&gt; In addition to it, can this approach clip child layers?
&gt;&gt;&gt; 
&gt;&gt;&gt; As it&apos;s done it can&apos;t be stacked, only a single clip can be performed. It can be modified to stack several clips, but it&apos;s expensive as each pixels needs to check whether it&apos;s inside all of the rectangles passed.
&gt;&gt; 
&gt;&gt; The original plan with this was to fall back to an intermediate surface when rounded-rect clipping needs to occur for a stack of elements, and then clip that surface with the rounded-rectangle. probably achievable today.
&gt; 
&gt; You don&apos;t need to add roundedRect to ClipStack::State if it can&apos;t be stacked at the moment. You can add m_roundedClipRect to TextureMapperGL. This is just an idea.

I was wrong. ClipStack::State should have roundedRect for the nested rounded clipped case even if it is not supported.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1700565</commentid>
    <comment_count>22</comment_count>
      <attachid>412071</attachid>
    <who name="Miguel Gomez">magomez</who>
    <bug_when>2020-10-22 01:31:12 -0700</bug_when>
    <thetext>Created attachment 412071
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1700568</commentid>
    <comment_count>23</comment_count>
    <who name="Miguel Gomez">magomez</who>
    <bug_when>2020-10-22 01:37:36 -0700</bug_when>
    <thetext>(In reply to Miguel Gomez from comment #22)
&gt; Created attachment 412071 [details]
&gt; Patch

Second version, this time allowing the simultaneous clipping of up to 10 rounded rectangles. This limitation comes from GLSL, where there are restrictions when using undefined length arrays. So I&apos;m using arrays big enough to hold the values to perform up to 10 clips.

As Carlos suggested, I&apos;ve modified TextureMapper::beginClip() to receive a FloatRoundedRect and that function will apply the appropriate clip depending on the passed rectangle.

I&apos;ve also modified the way the rectangles and matrices are stored in ClipStack. There are 2 arrays to hold the rectangles and matrices components, and what&apos;s stored in the state is the number of rectangles we have stored. When adding a new rectangle and matrix, their components are stored in the matrices instead of storing the FloatRoundedRect and TransformationMatrix instances. This allows us to pass the array pointers directly to the shader without needing any conversion.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1700571</commentid>
    <comment_count>24</comment_count>
      <attachid>412071</attachid>
    <who name="Noam Rosenthal">noam</who>
    <bug_when>2020-10-22 01:41:32 -0700</bug_when>
    <thetext>Comment on attachment 412071
Patch

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

&gt; Source/WebCore/ChangeLog:15
&gt; +        Covered by existent tests.

I don&apos;t believe that there are currently existing tests covering composited clipping of a deep rounded-rect stack</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1700574</commentid>
    <comment_count>25</comment_count>
      <attachid>412071</attachid>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2020-10-22 02:00:05 -0700</bug_when>
    <thetext>Comment on attachment 412071
Patch

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

&gt; Source/WebCore/platform/graphics/texmap/ClipStack.cpp:86
&gt; +    clipState.roundedRectIndex++;

Should we mark the state as dirty?

&gt; Source/WebCore/platform/graphics/texmap/ClipStack.h:35
&gt; +static const int s_roundedRectMaxClipsAllowed = 10;

unsigned

&gt; Source/WebCore/platform/graphics/texmap/ClipStack.h:41
&gt; +static const int s_roundedRectComponentsPerRect = 12;
&gt; +static const int s_roundedRectComponentsArraySize = s_roundedRectMaxClipsAllowed * s_roundedRectComponentsPerRect;

Ditto.

&gt; Source/WebCore/platform/graphics/texmap/ClipStack.h:47
&gt; +static const int s_roundedRectInverseTransformComponentsPerRect = 16;
&gt; +static const int s_roundedRectInverseTransformComponentsArraySize = s_roundedRectMaxClipsAllowed * s_roundedRectInverseTransformComponentsPerRect;

Ditto.

&gt; Source/WebCore/platform/graphics/texmap/ClipStack.h:56
&gt; -        State(const IntRect&amp; scissors = IntRect(), int stencil = 1)
&gt; +        State(const IntRect&amp; scissors = IntRect(), int stencil = 1, int roundedRect = 0)
&gt;              : scissorBox(scissors)
&gt;              , stencilIndex(stencil)
&gt; +            , roundedRectIndex(roundedRect)
&gt;          { }

I also find confusing the constructor parameters that are never really used, because I think the State is only constructed as a member of ClipStack, so always with no parameters. I would simply this struct as:

struct State {
    IntRect scissorBox;
    int stencilIndex { 1 };
    Optional&lt;int&gt; roundedRectIndex;
};

&gt; Source/WebCore/platform/graphics/texmap/ClipStack.h:60
&gt; +        int roundedRectIndex;

Optional&lt;int&gt;?

&gt; Source/WebCore/platform/graphics/texmap/ClipStack.h:97
&gt; +    std::array&lt;float, s_roundedRectComponentsArraySize&gt; m_roundedRectComponents = { };
&gt; +    std::array&lt;float, s_roundedRectInverseTransformComponentsArraySize&gt; m_roundedRectInverseTransformComponents = { };

Why not WTF::Vector? I don&apos;t think we need the empty initialization.

&gt; Source/WebCore/platform/graphics/texmap/TextureMapperLayer.cpp:232
&gt; -        options.textureMapper.beginClip(clipTransform, layerRect());
&gt; +        options.textureMapper.beginClip(clipTransform, FloatRoundedRect(layerRect(), FloatRoundedRect::Radii()));

No need to pass en empty radii, that&apos;s the default FloatRoundedRect(layerRect())

&gt; Source/WebCore/platform/graphics/texmap/TextureMapperLayer.cpp:251
&gt; -        options.textureMapper.beginClip(clipTransform, layerRect());
&gt; +        options.textureMapper.beginClip(clipTransform, FloatRoundedRect(layerRect(), FloatRoundedRect::Radii()));

Ditto.

&gt; Source/WebCore/platform/graphics/texmap/TextureMapperLayer.cpp:407
&gt; -        options.textureMapper.beginClip(TransformationMatrix(), rect);
&gt; +        options.textureMapper.beginClip(TransformationMatrix(), FloatRoundedRect(rect, FloatRoundedRect::Radii()));

Ditto.

&gt; Source/WebKit/Shared/CoordinatedGraphics/CoordinatedGraphicsScene.cpp:74
&gt; -    m_textureMapper-&gt;beginClip(TransformationMatrix(), clipRect);
&gt; +    m_textureMapper-&gt;beginClip(TransformationMatrix(), FloatRoundedRect(clipRect, FloatRoundedRect::Radii()));

Ditto.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1700583</commentid>
    <comment_count>26</comment_count>
      <attachid>412071</attachid>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2020-10-22 02:32:11 -0700</bug_when>
    <thetext>Comment on attachment 412071
Patch

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

&gt;&gt; Source/WebCore/ChangeLog:15
&gt;&gt; +        Covered by existent tests.
&gt; 
&gt; I don&apos;t believe that there are currently existing tests covering composited clipping of a deep rounded-rect stack

Well, in this case it actually means it doesn&apos;t regress existing tests, but I agree it would be better to not say anything about tests.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1700584</commentid>
    <comment_count>27</comment_count>
      <attachid>412071</attachid>
    <who name="Noam Rosenthal">noam</who>
    <bug_when>2020-10-22 02:35:32 -0700</bug_when>
    <thetext>Comment on attachment 412071
Patch

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

&gt;&gt;&gt; Source/WebCore/ChangeLog:15
&gt;&gt;&gt; +        Covered by existent tests.
&gt;&gt; 
&gt;&gt; I don&apos;t believe that there are currently existing tests covering composited clipping of a deep rounded-rect stack
&gt; 
&gt; Well, in this case it actually means it doesn&apos;t regress existing tests, but I agree it would be better to not say anything about tests.

If the feature is going to be working after this patch, you should add tests that didn&apos;t work before and work now (e.g. nested composited rounded rects).
If the feature is still missing something in order to be supported, I suggest to combine to a single patch that actually makes the feature work.
Not regressing old tests is important but not sufficient...</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1700607</commentid>
    <comment_count>28</comment_count>
    <who name="Miguel Gomez">magomez</who>
    <bug_when>2020-10-22 05:50:13 -0700</bug_when>
    <thetext>(In reply to Carlos Garcia Campos from comment #25)
&gt; Comment on attachment 412071 [details]
&gt; Patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=412071&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/platform/graphics/texmap/ClipStack.cpp:86
&gt; &gt; +    clipState.roundedRectIndex++;
&gt; 
&gt; Should we mark the state as dirty?

It&apos;s not really needed. The dirty state means that something needs to be done when applyIfNeeded is called. But there&apos;s nothing to do in this case. Unlike the scissor or stencil cases, where we need to do something in order to apply the clip, we don&apos;t need to do anything with rounded rectangles.

&gt; &gt; Source/WebCore/platform/graphics/texmap/ClipStack.h:35
&gt; &gt; +static const int s_roundedRectMaxClipsAllowed = 10;
&gt; 
&gt; unsigned

ok
 
&gt; &gt; Source/WebCore/platform/graphics/texmap/ClipStack.h:41
&gt; &gt; +static const int s_roundedRectComponentsPerRect = 12;
&gt; &gt; +static const int s_roundedRectComponentsArraySize = s_roundedRectMaxClipsAllowed * s_roundedRectComponentsPerRect;
&gt; 
&gt; Ditto.

ok

&gt; &gt; Source/WebCore/platform/graphics/texmap/ClipStack.h:47
&gt; &gt; +static const int s_roundedRectInverseTransformComponentsPerRect = 16;
&gt; &gt; +static const int s_roundedRectInverseTransformComponentsArraySize = s_roundedRectMaxClipsAllowed * s_roundedRectInverseTransformComponentsPerRect;
&gt; 
&gt; Ditto.

ok

&gt; &gt; Source/WebCore/platform/graphics/texmap/ClipStack.h:56
&gt; &gt; -        State(const IntRect&amp; scissors = IntRect(), int stencil = 1)
&gt; &gt; +        State(const IntRect&amp; scissors = IntRect(), int stencil = 1, int roundedRect = 0)
&gt; &gt;              : scissorBox(scissors)
&gt; &gt;              , stencilIndex(stencil)
&gt; &gt; +            , roundedRectIndex(roundedRect)
&gt; &gt;          { }
&gt; 
&gt; I also find confusing the constructor parameters that are never really used,
&gt; because I think the State is only constructed as a member of ClipStack, so
&gt; always with no parameters. I would simply this struct as:
&gt; 
&gt; struct State {
&gt;     IntRect scissorBox;
&gt;     int stencilIndex { 1 };
&gt;     Optional&lt;int&gt; roundedRectIndex;
&gt; };

I removed stencilIndex and roundedRectIndex from the constructor, but scissorBox is actually being used, so I left it.

&gt; &gt; Source/WebCore/platform/graphics/texmap/ClipStack.h:60
&gt; &gt; +        int roundedRectIndex;
&gt; 
&gt; Optional&lt;int&gt;?

As I commented to you, roundedRectIndex contains the number of rounded rects that are stored, and it&apos;s used to index the component arrays. For this 0 is a valid
value, so I don&apos;t think using Optional is useful.

&gt; &gt; Source/WebCore/platform/graphics/texmap/ClipStack.h:97
&gt; &gt; +    std::array&lt;float, s_roundedRectComponentsArraySize&gt; m_roundedRectComponents = { };
&gt; &gt; +    std::array&lt;float, s_roundedRectInverseTransformComponentsArraySize&gt; m_roundedRectInverseTransformComponents = { };
&gt; 
&gt; Why not WTF::Vector? I don&apos;t think we need the empty initialization.

Removed the initialization of the array.
Why not a Vector? mmmm I don&apos;t see any advantage using a Vector in this case. I don&apos;t need almost any of the methods it provides, other than accessing its internal buffer. All I need is an array.

&gt; &gt; Source/WebCore/platform/graphics/texmap/TextureMapperLayer.cpp:232
&gt; &gt; -        options.textureMapper.beginClip(clipTransform, layerRect());
&gt; &gt; +        options.textureMapper.beginClip(clipTransform, FloatRoundedRect(layerRect(), FloatRoundedRect::Radii()));
&gt; 
&gt; No need to pass en empty radii, that&apos;s the default
&gt; FloatRoundedRect(layerRect())

ok

&gt; &gt; Source/WebCore/platform/graphics/texmap/TextureMapperLayer.cpp:251
&gt; &gt; -        options.textureMapper.beginClip(clipTransform, layerRect());
&gt; &gt; +        options.textureMapper.beginClip(clipTransform, FloatRoundedRect(layerRect(), FloatRoundedRect::Radii()));
&gt; 
&gt; Ditto.

ok

&gt; &gt; Source/WebCore/platform/graphics/texmap/TextureMapperLayer.cpp:407
&gt; &gt; -        options.textureMapper.beginClip(TransformationMatrix(), rect);
&gt; &gt; +        options.textureMapper.beginClip(TransformationMatrix(), FloatRoundedRect(rect, FloatRoundedRect::Radii()));
&gt; 
&gt; Ditto.

ok

&gt; &gt; Source/WebKit/Shared/CoordinatedGraphics/CoordinatedGraphicsScene.cpp:74
&gt; &gt; -    m_textureMapper-&gt;beginClip(TransformationMatrix(), clipRect);
&gt; &gt; +    m_textureMapper-&gt;beginClip(TransformationMatrix(), FloatRoundedRect(clipRect, FloatRoundedRect::Radii()));
&gt; 
&gt; Ditto.

ok

Also, I found that there&apos;s a test that&apos;s passing now, so I&apos;ll unskip it.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1700623</commentid>
    <comment_count>29</comment_count>
      <attachid>412093</attachid>
    <who name="Miguel Gomez">magomez</who>
    <bug_when>2020-10-22 06:47:52 -0700</bug_when>
    <thetext>Created attachment 412093
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1700639</commentid>
    <comment_count>30</comment_count>
      <attachid>412093</attachid>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2020-10-22 07:57:21 -0700</bug_when>
    <thetext>Comment on attachment 412093
Patch

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

&gt; Source/WebCore/ChangeLog:15
&gt; +        Covered by existent tests.

I still think it&apos;s better to remove this. Are you going to add a test for the nested rounded clips in a follow up patch?

&gt; Source/WebCore/platform/graphics/texmap/ClipStack.h:52
&gt; -        State(const IntRect&amp; scissors = IntRect(), int stencil = 1)
&gt; +        State(const IntRect&amp; scissors = IntRect())

Where is it used? If we really need to kep the IntRect parameter we should add the explicit keyword.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1700843</commentid>
    <comment_count>31</comment_count>
      <attachid>412093</attachid>
    <who name="Fujii Hironori">fujii</who>
    <bug_when>2020-10-22 14:40:36 -0700</bug_when>
    <thetext>Comment on attachment 412093
Patch

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

&gt; Source/WebCore/platform/graphics/texmap/ClipStack.cpp:75
&gt; +    m_roundedRectComponents[basePosition + 3] = roundedRect.rect().height();

You have a matrix. You can remove x, y, width and height.
You can remove x and y by translating the matrix.
You can remove width and height by scaling the coorinate system to fit the rect to 1x1 dimension.
Too complicated? Just an idea.

&gt; Source/WebCore/platform/graphics/texmap/ClipStack.h:35
&gt; +static const unsigned s_roundedRectMaxClipsAllowed = 10;

s_roundedRectMaxClipsAllowed sounds a bit redundant to me. How about s_roundedRectMaxClips or s_maxRoundedRectClips?

&gt; Source/WebCore/platform/graphics/texmap/ClipStack.h:58
&gt; +        unsigned roundedRectIndex { 0 };

roundedRectIndex isn&apos;t an index. It should be roundedRectCount or numberOfRoundedRect.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1700845</commentid>
    <comment_count>32</comment_count>
    <who name="Fujii Hironori">fujii</who>
    <bug_when>2020-10-22 14:41:16 -0700</bug_when>
    <thetext>Note that Bug 217737 is going to add a new GraphicsLayer::supportsRoundedClip method.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1700975</commentid>
    <comment_count>33</comment_count>
      <attachid>412166</attachid>
    <who name="Miguel Gomez">magomez</who>
    <bug_when>2020-10-23 03:13:44 -0700</bug_when>
    <thetext>Created attachment 412166
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1700978</commentid>
    <comment_count>34</comment_count>
      <attachid>412166</attachid>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2020-10-23 03:22:05 -0700</bug_when>
    <thetext>Comment on attachment 412166
Patch

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

&gt; Source/WebCore/platform/graphics/texmap/ClipStack.h:52
&gt; -        State(const IntRect&amp; scissors = IntRect(), int stencil = 1)
&gt; +        State(const IntRect&amp; scissors = IntRect())

explicit</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1700979</commentid>
    <comment_count>35</comment_count>
      <attachid>412167</attachid>
    <who name="Miguel Gomez">magomez</who>
    <bug_when>2020-10-23 03:35:23 -0700</bug_when>
    <thetext>Created attachment 412167
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1700980</commentid>
    <comment_count>36</comment_count>
      <attachid>412168</attachid>
    <who name="Miguel Gomez">magomez</who>
    <bug_when>2020-10-23 03:40:31 -0700</bug_when>
    <thetext>Created attachment 412168
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1700990</commentid>
    <comment_count>37</comment_count>
    <who name="EWS">ews-feeder</who>
    <bug_when>2020-10-23 05:53:46 -0700</bug_when>
    <thetext>Committed r268923: &lt;https://trac.webkit.org/changeset/268923&gt;

All reviewed patches have been landed. Closing bug and clearing flags on attachment 412168.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1701350</commentid>
    <comment_count>38</comment_count>
      <attachid>412168</attachid>
    <who name="Fujii Hironori">fujii</who>
    <bug_when>2020-10-25 20:58:53 -0700</bug_when>
    <thetext>Comment on attachment 412168
Patch

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

&gt; Source/WebCore/platform/graphics/texmap/TextureMapperShaderProgram.cpp:469
&gt; +            int nRects = min(ROUNDED_RECT_MAX_RECTS, u_roundedRectNumber);

min(genIType) isn&apos;t supported for GLSL ES &lt; 3.0
Filed : Bug 218164 – [WinCairo] REGRESSION(r268923): Nothing is drawn in AC mode</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1705629</commentid>
    <comment_count>39</comment_count>
    <who name="Fujii Hironori">fujii</who>
    <bug_when>2020-11-08 18:21:28 -0800</bug_when>
    <thetext>*** Bug 115615 has been marked as a duplicate of this bug. ***</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>411876</attachid>
            <date>2020-10-20 09:44:30 -0700</date>
            <delta_ts>2020-10-22 01:31:07 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-174457-20201020184428.patch</filename>
            <type>text/plain</type>
            <size>22061</size>
            <attacher name="Miguel Gomez">magomez</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjY4NzI2CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMjg1MGNiYWViNjVhNzU4
NjY5ZmFhNGYwN2NhNDgzNmNmMDAzY2ViMS4uOTI4YWFjM2JjZjA1NzU3ZGExMWJjN2VkZDhlNjVh
M2MwZWNjODMwYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQyIEBACisyMDIwLTEwLTIwICBNaWd1
ZWwgR29tZXogIDxtYWdvbWV6QGlnYWxpYS5jb20+CisKKyAgICAgICAgW0dUS11bV1BFXSBJbXBs
ZW1lbnQgYW50aWFsaWFzZWQgcm91bmRlZCByZWN0YW5nbGUgY2xpcHBpbmcgaW4gVGV4dHVyZU1h
cHBlcgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTc0
NDU3CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgSW1w
bGVtZW50IHJvdW5kZWQgcmVjdGFuZ2UgY2xpcHBpbmcgaW5zaWRlIFRleHR1cmVNYXBwZXJHTCBh
bmQgbWFrZSBUZXh0dXJlTWFwcGVyTGF5ZXIKKyAgICAgICAgdG8gdXNlIGl0IHdoZW4gcmVxdWly
ZWQuCisKKyAgICAgICAgVGhlIGltcGxlbWVudGF0aW9uIHVzZXMgdGhlIGZyYWdtZW50IHNoYWRl
ciB0byBjYWxjdWxhdGUgd2hldGhlciBlYWNoIHBpeGVsIGlzIGluc2lkZQorICAgICAgICB0aGUg
ZGVmaW5lZCByb3VuZGVkIHJlY3RhbmdsZSwgYW5kIHBhaW50cyBvciBza2lwcyBpdCBhcyBuZWVk
ZWQuCisKKyAgICAgICAgQ292ZXJlZCBieSBleGlzdGVudCB0ZXN0cy4KKworICAgICAgICAqIHBs
YXRmb3JtL2dyYXBoaWNzL3RleG1hcC9DbGlwU3RhY2suY3BwOgorICAgICAgICAoV2ViQ29yZTo6
Q2xpcFN0YWNrOjpzZXRSb3VuZGVkUmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpDbGlwU3RhY2s6
OnNldFJvdW5kZWRSZWN0SW52ZXJzZVRyYW5zZm9ybSk6CisgICAgICAgICogcGxhdGZvcm0vZ3Jh
cGhpY3MvdGV4bWFwL0NsaXBTdGFjay5oOgorICAgICAgICAoV2ViQ29yZTo6Q2xpcFN0YWNrOjpT
dGF0ZTo6U3RhdGUpOgorICAgICAgICAoV2ViQ29yZTo6Q2xpcFN0YWNrOjpyb3VuZGVkUmVjdCk6
CisgICAgICAgIChXZWJDb3JlOjpDbGlwU3RhY2s6OmlzUm91bmRlZFJlY3RDbGlwRW5hYmxlZCk6
CisgICAgICAgIChXZWJDb3JlOjpDbGlwU3RhY2s6OnJvdW5kZWRSZWN0SW52ZXJzZVRyYW5zZm9y
bSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXIuaDoK
KyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlckdMLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OnByZXBhcmVSb3VuZGVkUmVjdENsaXApOgorICAgICAgICAoV2Vi
Q29yZTo6VGV4dHVyZU1hcHBlckdMOjpkcmF3VGV4dHVyZSk6CisgICAgICAgIChXZWJDb3JlOjpU
ZXh0dXJlTWFwcGVyR0w6OmRyYXdUZXh0dXJlUGxhbmFyWVVWKToKKyAgICAgICAgKFdlYkNvcmU6
OlRleHR1cmVNYXBwZXJHTDo6ZHJhd1RleHR1cmVTZW1pUGxhbmFyWVVWKToKKyAgICAgICAgKFdl
YkNvcmU6OlRleHR1cmVNYXBwZXJHTDo6ZHJhd1RleHR1cmVQYWNrZWRZVVYpOgorICAgICAgICAo
V2ViQ29yZTo6VGV4dHVyZU1hcHBlckdMOjpkcmF3U29saWRDb2xvcik6CisgICAgICAgIChXZWJD
b3JlOjpUZXh0dXJlTWFwcGVyR0w6OmJlZ2luQ2xpcCk6CisgICAgICAgICogcGxhdGZvcm0vZ3Jh
cGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJHTC5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBo
aWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyTGF5ZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6VGV4
dHVyZU1hcHBlckxheWVyOjpwYWludFNlbGYpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNz
L3RleG1hcC9UZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbS5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbTo6Y3JlYXRlKToKKyAgICAgICAgKiBwbGF0Zm9y
bS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW0uaDoKKwogMjAyMC0x
MC0yMCAgU2VyZ2lvIFZpbGxhciBTZW5pbiAgPHN2aWxsYXJAaWdhbGlhLmNvbT4KIAogICAgICAg
ICBbY3NzLWZsZXhib3hdIG9yZGVyIHByb3BlcnR5IHNob3VsZCBiZSBhbmltYXRhYmxlCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvQ2xpcFN0YWNr
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9DbGlwU3RhY2su
Y3BwCmluZGV4IGRhODQwYmY0ZjdlMjEyOWIxMjNjOGQxN2U5MjhiMDA1NmJhY2Q5NzMuLjFmNzQ1
NDcxODMxYWY3YjliNTZjZWEwNjUxYTRlN2IzZjA1ZjEyMmUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9DbGlwU3RhY2suY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9DbGlwU3RhY2suY3BwCkBAIC02Miw2
ICs2MiwxNiBAQCB2b2lkIENsaXBTdGFjazo6c2V0U3RlbmNpbEluZGV4KGludCBzdGVuY2lsSW5k
ZXgpCiAgICAgY2xpcFN0YXRlRGlydHkgPSB0cnVlOwogfQogCit2b2lkIENsaXBTdGFjazo6c2V0
Um91bmRlZFJlY3QoY29uc3QgRmxvYXRSb3VuZGVkUmVjdCYgcm91bmRlZFJlY3QpCit7CisgICAg
Y2xpcFN0YXRlLnJvdW5kZWRSZWN0ID0gcm91bmRlZFJlY3Q7Cit9CisKK3ZvaWQgQ2xpcFN0YWNr
OjpzZXRSb3VuZGVkUmVjdEludmVyc2VUcmFuc2Zvcm0oY29uc3QgVHJhbnNmb3JtYXRpb25NYXRy
aXgmIG1hdHJpeCkKK3sKKyAgICBjbGlwU3RhdGUucm91bmRlZFJlY3RJbnZlcnNlVHJhbnNmb3Jt
ID0gbWF0cml4OworfQorCiB2b2lkIENsaXBTdGFjazo6YXBwbHkoKQogewogICAgIGlmIChjbGlw
U3RhdGUuc2Npc3NvckJveC5pc0VtcHR5KCkpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvQ2xpcFN0YWNrLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy90ZXhtYXAvQ2xpcFN0YWNrLmgKaW5kZXggMjY3Y2U0MDk2MDEyZmIxN2U3
NjhlOTFjMjVmYTA5OTBkNGUwOTllOS4uN2JjMmFjMzY3Yjg2MjQzNzVhOWY3NzRlNTAwZTVjNjM0
NDQwZWI5ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4
bWFwL0NsaXBTdGFjay5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3Rl
eG1hcC9DbGlwU3RhY2suaApAQCAtMjEsOCArMjEsMTAgQEAKICNpZm5kZWYgQ2xpcFN0YWNrX2gK
ICNkZWZpbmUgQ2xpcFN0YWNrX2gKIAorI2luY2x1ZGUgIkZsb2F0Um91bmRlZFJlY3QuaCIKICNp
bmNsdWRlICJJbnRSZWN0LmgiCiAjaW5jbHVkZSAiSW50U2l6ZS5oIgorI2luY2x1ZGUgIlRyYW5z
Zm9ybWF0aW9uTWF0cml4LmgiCiAjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgogCiBuYW1lc3BhY2Ug
V2ViQ29yZSB7CkBAIC0zMCwxMyArMzIsMTcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogY2xhc3Mg
Q2xpcFN0YWNrIHsKIHB1YmxpYzoKICAgICBzdHJ1Y3QgU3RhdGUgewotICAgICAgICBTdGF0ZShj
b25zdCBJbnRSZWN0JiBzY2lzc29ycyA9IEludFJlY3QoKSwgaW50IHN0ZW5jaWwgPSAxKQorICAg
ICAgICBTdGF0ZShjb25zdCBJbnRSZWN0JiBzY2lzc29ycyA9IEludFJlY3QoKSwgaW50IHN0ZW5j
aWwgPSAxLCBjb25zdCBGbG9hdFJvdW5kZWRSZWN0JiByb3VuZGVkUmVjdCA9IEZsb2F0Um91bmRl
ZFJlY3QoKSwgY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmIHRyYW5zZm9ybSA9IFRyYW5zZm9y
bWF0aW9uTWF0cml4KCkpCiAgICAgICAgICAgICA6IHNjaXNzb3JCb3goc2Npc3NvcnMpCiAgICAg
ICAgICAgICAsIHN0ZW5jaWxJbmRleChzdGVuY2lsKQorICAgICAgICAgICAgLCByb3VuZGVkUmVj
dChyb3VuZGVkUmVjdCkKKyAgICAgICAgICAgICwgcm91bmRlZFJlY3RJbnZlcnNlVHJhbnNmb3Jt
KHRyYW5zZm9ybSkKICAgICAgICAgeyB9CiAKICAgICAgICAgSW50UmVjdCBzY2lzc29yQm94Owog
ICAgICAgICBpbnQgc3RlbmNpbEluZGV4OworICAgICAgICBGbG9hdFJvdW5kZWRSZWN0IHJvdW5k
ZWRSZWN0OworICAgICAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCByb3VuZGVkUmVjdEludmVyc2VU
cmFuc2Zvcm07CiAgICAgfTsKIAogICAgIC8vIFktYXhpcyBzaG91bGQgYmUgaW52ZXJ0ZWQgb25s
eSB3aGVuIHBhaW50aW5nIGludG8gdGhlIHdpbmRvdy4KQEAgLTU0LDYgKzYwLDEyIEBAIHB1Ymxp
YzoKICAgICB2b2lkIHNldFN0ZW5jaWxJbmRleChpbnQpOwogICAgIGludCBnZXRTdGVuY2lsSW5k
ZXgoKSBjb25zdCB7IHJldHVybiBjbGlwU3RhdGUuc3RlbmNpbEluZGV4OyB9CiAKKyAgICB2b2lk
IHNldFJvdW5kZWRSZWN0KGNvbnN0IEZsb2F0Um91bmRlZFJlY3QmKTsKKyAgICBjb25zdCBGbG9h
dFJvdW5kZWRSZWN0JiByb3VuZGVkUmVjdCgpIHsgcmV0dXJuIGNsaXBTdGF0ZS5yb3VuZGVkUmVj
dDsgfQorICAgIGJvb2wgaXNSb3VuZGVkUmVjdENsaXBFbmFibGVkKCkgeyByZXR1cm4gIWNsaXBT
dGF0ZS5yb3VuZGVkUmVjdC5pc0VtcHR5KCk7IH0KKyAgICB2b2lkIHNldFJvdW5kZWRSZWN0SW52
ZXJzZVRyYW5zZm9ybShjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYpOworICAgIGNvbnN0IFRy
YW5zZm9ybWF0aW9uTWF0cml4JiByb3VuZGVkUmVjdEludmVyc2VUcmFuc2Zvcm0oKSB7IHJldHVy
biBjbGlwU3RhdGUucm91bmRlZFJlY3RJbnZlcnNlVHJhbnNmb3JtOyB9CisKICAgICB2b2lkIGFw
cGx5KCk7CiAgICAgdm9pZCBhcHBseUlmTmVlZGVkKCk7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyLmggYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlci5oCmluZGV4IGVl
YjBmY2E0MWFmYmEwYTQxMTBjNDRhYmM4NDZjYjk3NzA2MzY4MGYuLjQzMDg5YTAwZDZmY2FkOGU5
NjRiN2M2MDExOTM1MTQ5ZmY2MTczZDQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyLmgKKysrIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXIuaApAQCAtMzcsNiArMzcsNyBA
QCBjbGFzcyBCaXRtYXBUZXh0dXJlUG9vbDsKIGNsYXNzIEdyYXBoaWNzTGF5ZXI7CiBjbGFzcyBU
ZXh0dXJlTWFwcGVyOwogY2xhc3MgRmlsdGVyT3BlcmF0aW9uczsKK2NsYXNzIEZsb2F0Um91bmRl
ZFJlY3Q7CiAKIGNsYXNzIFRleHR1cmVNYXBwZXIgewogICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NB
VEVEOwpAQCAtNzUsNiArNzYsNyBAQCBwdWJsaWM6CiAKICAgICAvLyBtYWtlcyBhIHN1cmZhY2Ug
dGhlIHRhcmdldCBmb3IgdGhlIGZvbGxvd2luZyBkcmF3VGV4dHVyZSBjYWxscy4KICAgICB2aXJ0
dWFsIHZvaWQgYmluZFN1cmZhY2UoQml0bWFwVGV4dHVyZSogc3VyZmFjZSkgPSAwOworICAgIHZp
cnR1YWwgdm9pZCBiZWdpbkNsaXAoY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmLCBjb25zdCBG
bG9hdFJvdW5kZWRSZWN0JikgPSAwOwogICAgIHZpcnR1YWwgdm9pZCBiZWdpbkNsaXAoY29uc3Qg
VHJhbnNmb3JtYXRpb25NYXRyaXgmLCBjb25zdCBGbG9hdFJlY3QmKSA9IDA7CiAgICAgdmlydHVh
bCB2b2lkIGVuZENsaXAoKSA9IDA7CiAgICAgdmlydHVhbCBJbnRSZWN0IGNsaXBCb3VuZHMoKSA9
IDA7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAv
VGV4dHVyZU1hcHBlckdMLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3Rl
eG1hcC9UZXh0dXJlTWFwcGVyR0wuY3BwCmluZGV4IDU0MGM0MGJiNGMxZjdjNzAyNDRhOGIwM2Ri
MWNmYTU5YzRiNmY2OTUuLmU1Y2UzOGJjNWMwZjE1MTMzYmQ5OWRiZjhiZTlhZjNhMDJlYTI3OWIg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0
dXJlTWFwcGVyR0wuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3Rl
eG1hcC9UZXh0dXJlTWFwcGVyR0wuY3BwCkBAIC0yOSw2ICsyOSw3IEBACiAjaW5jbHVkZSAiRXh0
ZW5zaW9uc0dMLmgiCiAjaW5jbHVkZSAiRmlsdGVyT3BlcmF0aW9ucy5oIgogI2luY2x1ZGUgIkZs
b2F0UXVhZC5oIgorI2luY2x1ZGUgIkZsb2F0Um91bmRlZFJlY3QuaCIKICNpbmNsdWRlICJHTENv
bnRleHQuaCIKICNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKICNpbmNsdWRlICJJbWFnZS5o
IgpAQCAtNDQyLDYgKzQ0MywyNCBAQCBzdGF0aWMgVHJhbnNmb3JtYXRpb25NYXRyaXggY29sb3JT
cGFjZU1hdHJpeEZvckZsYWdzKFRleHR1cmVNYXBwZXJHTDo6RmxhZ3MgZmxhZwogICAgIHJldHVy
biBtYXRyaXg7CiB9CiAKK3N0YXRpYyB2b2lkIHByZXBhcmVSb3VuZGVkUmVjdENsaXAoVGV4dHVy
ZU1hcHBlclNoYWRlclByb2dyYW0mIHByb2dyYW0sIGNvbnN0IEZsb2F0Um91bmRlZFJlY3QmIHJv
dW5kZWRSZWN0LCBjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgdHJhbnNmb3JtKQoreworICAg
IGdsVXNlUHJvZ3JhbShwcm9ncmFtLnByb2dyYW1JRCgpKTsKKworICAgIC8vIEVuY29kZSB0aGUg
Um91bmRlZFJlY3QgYXMgYW4gYXJyYXkgd2l0aCAxMiBlbGVtZW50cy4KKyAgICBzdGQ6OmFycmF5
PEdMZmxvYXQsIDEyPiByZWN0ID0geworICAgICAgICByb3VuZGVkUmVjdC5yZWN0KCkueCgpLCBy
b3VuZGVkUmVjdC5yZWN0KCkueSgpLAorICAgICAgICByb3VuZGVkUmVjdC5yZWN0KCkud2lkdGgo
KSwgcm91bmRlZFJlY3QucmVjdCgpLmhlaWdodCgpLAorICAgICAgICByb3VuZGVkUmVjdC5yYWRp
aSgpLnRvcExlZnQoKS53aWR0aCgpLCByb3VuZGVkUmVjdC5yYWRpaSgpLnRvcExlZnQoKS5oZWln
aHQoKSwKKyAgICAgICAgcm91bmRlZFJlY3QucmFkaWkoKS50b3BSaWdodCgpLndpZHRoKCksIHJv
dW5kZWRSZWN0LnJhZGlpKCkudG9wUmlnaHQoKS5oZWlnaHQoKSwKKyAgICAgICAgcm91bmRlZFJl
Y3QucmFkaWkoKS5ib3R0b21MZWZ0KCkud2lkdGgoKSwgcm91bmRlZFJlY3QucmFkaWkoKS5ib3R0
b21MZWZ0KCkuaGVpZ2h0KCksCisgICAgICAgIHJvdW5kZWRSZWN0LnJhZGlpKCkuYm90dG9tUmln
aHQoKS53aWR0aCgpLCByb3VuZGVkUmVjdC5yYWRpaSgpLmJvdHRvbVJpZ2h0KCkuaGVpZ2h0KCkK
KyAgICB9OworCisgICAgZ2xVbmlmb3JtNGZ2KHByb2dyYW0ucm91bmRlZFJlY3RMb2NhdGlvbigp
LCAzLCBzdGF0aWNfY2FzdDxjb25zdCBHTGZsb2F0Kj4oJnJlY3RbMF0pKTsKKyAgICBwcm9ncmFt
LnNldE1hdHJpeChwcm9ncmFtLnJvdW5kZWRSZWN0SW52ZXJzZVRyYW5zZm9ybU1hdHJpeExvY2F0
aW9uKCksIHRyYW5zZm9ybSk7Cit9CisKIHZvaWQgVGV4dHVyZU1hcHBlckdMOjpkcmF3VGV4dHVy
ZShjb25zdCBCaXRtYXBUZXh0dXJlJiB0ZXh0dXJlLCBjb25zdCBGbG9hdFJlY3QmIHRhcmdldFJl
Y3QsIGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiBtYXRyaXgsIGZsb2F0IG9wYWNpdHksIHVu
c2lnbmVkIGV4cG9zZWRFZGdlcykKIHsKICAgICBpZiAoIXRleHR1cmUuaXNWYWxpZCgpKQpAQCAt
NDg5LDExICs1MDgsMTkgQEAgdm9pZCBUZXh0dXJlTWFwcGVyR0w6OmRyYXdUZXh0dXJlKEdMdWlu
dCB0ZXh0dXJlLCBGbGFncyBmbGFncywgY29uc3QgSW50U2l6ZSYgdGUKICAgICBpZiAodXNlQW50
aWFsaWFzaW5nIHx8IG9wYWNpdHkgPCAxKQogICAgICAgICBmbGFncyB8PSBTaG91bGRCbGVuZDsK
IAorICAgIGlmIChjbGlwU3RhY2soKS5pc1JvdW5kZWRSZWN0Q2xpcEVuYWJsZWQoKSkgeworICAg
ICAgICBvcHRpb25zIHw9IFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtOjpSb3VuZGVkUmVjdENs
aXA7CisgICAgICAgIGZsYWdzIHw9IFNob3VsZEJsZW5kOworICAgIH0KKwogICAgIFJlZjxUZXh0
dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbT4gcHJvZ3JhbSA9IGRhdGEoKS5nZXRTaGFkZXJQcm9ncmFt
KG9wdGlvbnMpOwogCiAgICAgaWYgKGZpbHRlcikKICAgICAgICAgcHJlcGFyZUZpbHRlclByb2dy
YW0ocHJvZ3JhbS5nZXQoKSwgKmZpbHRlci5nZXQoKSwgZGF0YSgpLmZpbHRlckluZm8tPnBhc3Ms
IHRleHR1cmVTaXplLCBmaWx0ZXJDb250ZW50VGV4dHVyZUlEKTsKIAorICAgIGlmIChjbGlwU3Rh
Y2soKS5pc1JvdW5kZWRSZWN0Q2xpcEVuYWJsZWQoKSkKKyAgICAgICAgcHJlcGFyZVJvdW5kZWRS
ZWN0Q2xpcChwcm9ncmFtLmdldCgpLCBjbGlwU3RhY2soKS5yb3VuZGVkUmVjdCgpLCBjbGlwU3Rh
Y2soKS5yb3VuZGVkUmVjdEludmVyc2VUcmFuc2Zvcm0oKSk7CisKICAgICBkcmF3VGV4dHVyZWRR
dWFkV2l0aFByb2dyYW0ocHJvZ3JhbS5nZXQoKSwgdGV4dHVyZSwgZmxhZ3MsIHRleHR1cmVTaXpl
LCB0YXJnZXRSZWN0LCBtb2RlbFZpZXdNYXRyaXgsIG9wYWNpdHkpOwogfQogCkBAIC01NTIsMTEg
KzU3OSwxOSBAQCB2b2lkIFRleHR1cmVNYXBwZXJHTDo6ZHJhd1RleHR1cmVQbGFuYXJZVVYoY29u
c3Qgc3RkOjphcnJheTxHTHVpbnQsIDM+JiB0ZXh0dXJlcwogICAgIGlmICh1c2VBbnRpYWxpYXNp
bmcgfHwgb3BhY2l0eSA8IDEpCiAgICAgICAgIGZsYWdzIHw9IFNob3VsZEJsZW5kOwogCisgICAg
aWYgKGNsaXBTdGFjaygpLmlzUm91bmRlZFJlY3RDbGlwRW5hYmxlZCgpKSB7CisgICAgICAgIG9w
dGlvbnMgfD0gVGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW06OlJvdW5kZWRSZWN0Q2xpcDsKKyAg
ICAgICAgZmxhZ3MgfD0gU2hvdWxkQmxlbmQ7CisgICAgfQorCiAgICAgUmVmPFRleHR1cmVNYXBw
ZXJTaGFkZXJQcm9ncmFtPiBwcm9ncmFtID0gZGF0YSgpLmdldFNoYWRlclByb2dyYW0ob3B0aW9u
cyk7CiAKICAgICBpZiAoZmlsdGVyKQogICAgICAgICBwcmVwYXJlRmlsdGVyUHJvZ3JhbShwcm9n
cmFtLmdldCgpLCAqZmlsdGVyLmdldCgpLCBkYXRhKCkuZmlsdGVySW5mby0+cGFzcywgdGV4dHVy
ZVNpemUsIGZpbHRlckNvbnRlbnRUZXh0dXJlSUQpOwogCisgICAgaWYgKGNsaXBTdGFjaygpLmlz
Um91bmRlZFJlY3RDbGlwRW5hYmxlZCgpKQorICAgICAgICBwcmVwYXJlUm91bmRlZFJlY3RDbGlw
KHByb2dyYW0uZ2V0KCksIGNsaXBTdGFjaygpLnJvdW5kZWRSZWN0KCksIGNsaXBTdGFjaygpLnJv
dW5kZWRSZWN0SW52ZXJzZVRyYW5zZm9ybSgpKTsKKwogICAgIFZlY3RvcjxzdGQ6OnBhaXI8R0x1
aW50LCBHTHVpbnQ+ID4gdGV4dHVyZXNBbmRTYW1wbGVycyA9IHsKICAgICAgICAgeyB0ZXh0dXJl
c1swXSwgcHJvZ3JhbS0+c2FtcGxlcllMb2NhdGlvbigpIH0sCiAgICAgICAgIHsgdGV4dHVyZXNb
MV0sIHByb2dyYW0tPnNhbXBsZXJVTG9jYXRpb24oKSB9LApAQCAtNjAyLDExICs2MzcsMTkgQEAg
dm9pZCBUZXh0dXJlTWFwcGVyR0w6OmRyYXdUZXh0dXJlU2VtaVBsYW5hcllVVihjb25zdCBzdGQ6
OmFycmF5PEdMdWludCwgMj4mIHRleHQKICAgICBpZiAodXNlQW50aWFsaWFzaW5nIHx8IG9wYWNp
dHkgPCAxKQogICAgICAgICBmbGFncyB8PSBTaG91bGRCbGVuZDsKIAorICAgIGlmIChjbGlwU3Rh
Y2soKS5pc1JvdW5kZWRSZWN0Q2xpcEVuYWJsZWQoKSkgeworICAgICAgICBvcHRpb25zIHw9IFRl
eHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtOjpSb3VuZGVkUmVjdENsaXA7CisgICAgICAgIGZsYWdz
IHw9IFNob3VsZEJsZW5kOworICAgIH0KKwogICAgIFJlZjxUZXh0dXJlTWFwcGVyU2hhZGVyUHJv
Z3JhbT4gcHJvZ3JhbSA9IGRhdGEoKS5nZXRTaGFkZXJQcm9ncmFtKG9wdGlvbnMpOwogCiAgICAg
aWYgKGZpbHRlcikKICAgICAgICAgcHJlcGFyZUZpbHRlclByb2dyYW0ocHJvZ3JhbS5nZXQoKSwg
KmZpbHRlci5nZXQoKSwgZGF0YSgpLmZpbHRlckluZm8tPnBhc3MsIHRleHR1cmVTaXplLCBmaWx0
ZXJDb250ZW50VGV4dHVyZUlEKTsKIAorICAgIGlmIChjbGlwU3RhY2soKS5pc1JvdW5kZWRSZWN0
Q2xpcEVuYWJsZWQoKSkKKyAgICAgICAgcHJlcGFyZVJvdW5kZWRSZWN0Q2xpcChwcm9ncmFtLmdl
dCgpLCBjbGlwU3RhY2soKS5yb3VuZGVkUmVjdCgpLCBjbGlwU3RhY2soKS5yb3VuZGVkUmVjdElu
dmVyc2VUcmFuc2Zvcm0oKSk7CisKICAgICBWZWN0b3I8c3RkOjpwYWlyPEdMdWludCwgR0x1aW50
PiA+IHRleHR1cmVzQW5kU2FtcGxlcnMgPSB7CiAgICAgICAgIHsgdGV4dHVyZXNbMF0sIHByb2dy
YW0tPnNhbXBsZXJZTG9jYXRpb24oKSB9LAogICAgICAgICB7IHRleHR1cmVzWzFdLCBwcm9ncmFt
LT5zYW1wbGVyVUxvY2F0aW9uKCkgfQpAQCAtNjUwLDExICs2OTMsMTkgQEAgdm9pZCBUZXh0dXJl
TWFwcGVyR0w6OmRyYXdUZXh0dXJlUGFja2VkWVVWKEdMdWludCB0ZXh0dXJlLCBjb25zdCBzdGQ6
OmFycmF5PEdMZmwKICAgICBpZiAodXNlQW50aWFsaWFzaW5nIHx8IG9wYWNpdHkgPCAxKQogICAg
ICAgICBmbGFncyB8PSBTaG91bGRCbGVuZDsKIAorICAgIGlmIChjbGlwU3RhY2soKS5pc1JvdW5k
ZWRSZWN0Q2xpcEVuYWJsZWQoKSkgeworICAgICAgICBvcHRpb25zIHw9IFRleHR1cmVNYXBwZXJT
aGFkZXJQcm9ncmFtOjpSb3VuZGVkUmVjdENsaXA7CisgICAgICAgIGZsYWdzIHw9IFNob3VsZEJs
ZW5kOworICAgIH0KKwogICAgIFJlZjxUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbT4gcHJvZ3Jh
bSA9IGRhdGEoKS5nZXRTaGFkZXJQcm9ncmFtKG9wdGlvbnMpOwogCiAgICAgaWYgKGZpbHRlcikK
ICAgICAgICAgcHJlcGFyZUZpbHRlclByb2dyYW0ocHJvZ3JhbS5nZXQoKSwgKmZpbHRlci5nZXQo
KSwgZGF0YSgpLmZpbHRlckluZm8tPnBhc3MsIHRleHR1cmVTaXplLCBmaWx0ZXJDb250ZW50VGV4
dHVyZUlEKTsKIAorICAgIGlmIChjbGlwU3RhY2soKS5pc1JvdW5kZWRSZWN0Q2xpcEVuYWJsZWQo
KSkKKyAgICAgICAgcHJlcGFyZVJvdW5kZWRSZWN0Q2xpcChwcm9ncmFtLmdldCgpLCBjbGlwU3Rh
Y2soKS5yb3VuZGVkUmVjdCgpLCBjbGlwU3RhY2soKS5yb3VuZGVkUmVjdEludmVyc2VUcmFuc2Zv
cm0oKSk7CisKICAgICBWZWN0b3I8c3RkOjpwYWlyPEdMdWludCwgR0x1aW50PiA+IHRleHR1cmVz
QW5kU2FtcGxlcnMgPSB7CiAgICAgICAgIHsgdGV4dHVyZSwgcHJvZ3JhbS0+c2FtcGxlckxvY2F0
aW9uKCkgfQogICAgIH07CkBAIC02NzMsOSArNzI0LDE3IEBAIHZvaWQgVGV4dHVyZU1hcHBlckdM
OjpkcmF3U29saWRDb2xvcihjb25zdCBGbG9hdFJlY3QmIHJlY3QsIGNvbnN0IFRyYW5zZm9ybWF0
aW9uCiAgICAgICAgIGZsYWdzIHw9IFNob3VsZEFudGlhbGlhcyB8IChpc0JsZW5kaW5nQWxsb3dl
ZCA/IFNob3VsZEJsZW5kIDogMCk7CiAgICAgfQogCisgICAgaWYgKGNsaXBTdGFjaygpLmlzUm91
bmRlZFJlY3RDbGlwRW5hYmxlZCgpKSB7CisgICAgICAgIG9wdGlvbnMgfD0gVGV4dHVyZU1hcHBl
clNoYWRlclByb2dyYW06OlJvdW5kZWRSZWN0Q2xpcDsKKyAgICAgICAgZmxhZ3MgfD0gU2hvdWxk
QmxlbmQ7CisgICAgfQorCiAgICAgUmVmPFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtPiBwcm9n
cmFtID0gZGF0YSgpLmdldFNoYWRlclByb2dyYW0ob3B0aW9ucyk7CiAgICAgZ2xVc2VQcm9ncmFt
KHByb2dyYW0tPnByb2dyYW1JRCgpKTsKIAorICAgIGlmIChjbGlwU3RhY2soKS5pc1JvdW5kZWRS
ZWN0Q2xpcEVuYWJsZWQoKSkKKyAgICAgICAgcHJlcGFyZVJvdW5kZWRSZWN0Q2xpcChwcm9ncmFt
LmdldCgpLCBjbGlwU3RhY2soKS5yb3VuZGVkUmVjdCgpLCBjbGlwU3RhY2soKS5yb3VuZGVkUmVj
dEludmVyc2VUcmFuc2Zvcm0oKSk7CisKICAgICBhdXRvIFtyLCBnLCBiLCBhXSA9IHByZW11bHRp
cGxpZWQoY29sb3IudG9TUkdCQUxvc3N5PGZsb2F0PigpKTsKICAgICBnbFVuaWZvcm00Zihwcm9n
cmFtLT5jb2xvckxvY2F0aW9uKCksIHIsIGcsIGIsIGEpOwogICAgIGlmIChhIDwgMSAmJiBpc0Js
ZW5kaW5nQWxsb3dlZCkKQEAgLTg4NCw2ICs5NDMsMzIgQEAgYm9vbCBUZXh0dXJlTWFwcGVyR0w6
OmJlZ2luU2Npc3NvckNsaXAoY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmIG1vZGVsVmlld01h
dHIKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAordm9pZCBUZXh0dXJlTWFwcGVyR0w6OmJlZ2luQ2xp
cChjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgbW9kZWxWaWV3TWF0cml4LCBjb25zdCBGbG9h
dFJvdW5kZWRSZWN0JiB0YXJnZXRSZWN0KQoreworICAgIC8vIEZhbGxiYWNrIHRvIG5vcm1hbCBy
ZWN0YW5nbGUgY2xpcHBpbmcuCisgICAgaWYgKCF0YXJnZXRSZWN0LmlzUm91bmRlZCgpKSB7Cisg
ICAgICAgIGJlZ2luQ2xpcChtb2RlbFZpZXdNYXRyaXgsIHRhcmdldFJlY3QucmVjdCgpKTsKKyAg
ICAgICAgcmV0dXJuOworICAgIH0KKworICAgIC8vIFRoaXMgaXMgaW1wbGVtZW50ZWQgYnkgdGVs
bGluZyB0aGUgZnJhZ21lbnQgc2hhZGVyIHRvIGNoZWNrIHdoZXRoZXIgZWFjaCBwaXhlbCBpcyBp
bnNpZGUgdGhlIHJvdW5kZWQgcmVjdGFuZ2xlCisgICAgLy8gYmVmb3JlIHBhaW50aW5nIGl0Lgor
ICAgIC8vCisgICAgLy8gSW5zaWRlIHRoZSBzaGFkZXIsIHRoZSBtYXRoIHRvIGNoZWNrIHdoZXRo
ZXIgYSBwb2ludCBpcyBpbnNpZGUgdGhlIHJvdW5kZWQgcmVjdGFuZ2xlIHJlcXVpcmVzIHRoZSBy
ZWN0YW5nbGUgdG8KKyAgICAvLyBiZSBhbGlnbmVkIHRvIHRoZSBYIGFuZCBZIGF4aXMsIHdoaWNo
IGlzIG5vdCBndWFyYW50ZWVkIGlmIHRoZSB0cmFuc2Zvcm1hdGlvbiBtYXRyaXggaW5jbHVkZXMg
cm90YXRpb25zLiBJbiBvcmRlcgorICAgIC8vIHRvIGF2b2lkIHRoaXMsIGluc3RlYWQgb2YgYXBw
bHlpbmcgdGhlIHRyYW5zZm9ybWF0aW9uIHRvIHRoZSByb3VuZGVkIHJlY3RhbmdsZSwgd2UgY2Fs
Y3VsYXRlIHRoZSBpbnZlcnNlCisgICAgLy8gb2YgdGhlIHRyYW5zZm9ybWF0aW9uIGFuZCBhcHBs
eSBpdCB0byB0aGUgcGl4ZWxzIGJlZm9yZSBjaGVja2luZyB3aGV0aGVyIHRoZXkgYXJlIGluc2lk
ZSB0aGUgcm91bmRlZCByZWN0YW5nbGUuCisgICAgLy8gVGhpcyB3b3JrcyBmaW5lIGFzIGxvbmcg
YXMgdGhlIHRyYW5zZm9ybWF0aW9uIG1hdHJpeCBpcyBpbnZlcnRpYmxlLgorCisgICAgLy8gV2Ug
bmVlZCBhbiBpbnZlcnRpYmxlIHRyYW5zZm9ybWF0aW9uIG1hdHJpeC4KKyAgICBpZiAoIW1vZGVs
Vmlld01hdHJpeC5pc0ludmVydGlibGUoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgY2xpcFN0
YWNrKCkucHVzaCgpOworICAgIGNsaXBTdGFjaygpLnNldFJvdW5kZWRSZWN0KHRhcmdldFJlY3Qp
OworICAgIGNsaXBTdGFjaygpLnNldFJvdW5kZWRSZWN0SW52ZXJzZVRyYW5zZm9ybShtb2RlbFZp
ZXdNYXRyaXguaW52ZXJzZSgpLnZhbHVlKCkpOworfQorCiB2b2lkIFRleHR1cmVNYXBwZXJHTDo6
YmVnaW5DbGlwKGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiBtb2RlbFZpZXdNYXRyaXgsIGNv
bnN0IEZsb2F0UmVjdCYgdGFyZ2V0UmVjdCkKIHsKICAgICBjbGlwU3RhY2soKS5wdXNoKCk7CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVy
ZU1hcHBlckdMLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4
dHVyZU1hcHBlckdMLmgKaW5kZXggMjY3MTc1ZTE4NDM3YzI3ZGQ0YWEzYzViOGUwZjI0OGJjZWEz
YjZhYS4uNTU0MjIxYWVhZTJlYmVmMTBlZWY2NWJhM2Q2YTQ2NzM0NTJmNTUzMiAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJH
TC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJl
TWFwcGVyR0wuaApAQCAtNzYsNiArNzYsNyBAQCBwdWJsaWM6CiAgICAgdm9pZCBiaW5kU3VyZmFj
ZShCaXRtYXBUZXh0dXJlKiBzdXJmYWNlKSBvdmVycmlkZTsKICAgICBCaXRtYXBUZXh0dXJlKiBj
dXJyZW50U3VyZmFjZSgpOwogICAgIHZvaWQgYmVnaW5DbGlwKGNvbnN0IFRyYW5zZm9ybWF0aW9u
TWF0cml4JiwgY29uc3QgRmxvYXRSZWN0Jikgb3ZlcnJpZGU7CisgICAgdm9pZCBiZWdpbkNsaXAo
Y29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmLCBjb25zdCBGbG9hdFJvdW5kZWRSZWN0Jikgb3Zl
cnJpZGU7CiAgICAgdm9pZCBiZWdpblBhaW50aW5nKFBhaW50RmxhZ3MgPSAwKSBvdmVycmlkZTsK
ICAgICB2b2lkIGVuZFBhaW50aW5nKCkgb3ZlcnJpZGU7CiAgICAgdm9pZCBlbmRDbGlwKCkgb3Zl
cnJpZGU7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXht
YXAvVGV4dHVyZU1hcHBlckxheWVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyTGF5ZXIuY3BwCmluZGV4IGEyMzZhNmE3YTg0OWUyMDBj
NzM5MTBlYzY1ODMzOThlZjc4MWYzMTIuLmVhZWM4ODFmYjIzZjNhYzY1MzU4ZjIxMjM2NmNiMDQ5
MjAwYzgxM2QgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3Rl
eG1hcC9UZXh0dXJlTWFwcGVyTGF5ZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyTGF5ZXIuY3BwCkBAIC0xOTYsOCArMTk2LDcg
QEAgdm9pZCBUZXh0dXJlTWFwcGVyTGF5ZXI6OnBhaW50U2VsZihjb25zdCBUZXh0dXJlTWFwcGVy
UGFpbnRPcHRpb25zJiBvcHRpb25zKQogCiAgICAgYm9vbCBzaG91bGRDbGlwID0gbV9zdGF0ZS5j
b250ZW50c0NsaXBwaW5nUmVjdC5pc1JvdW5kZWQoKSB8fCAhbV9zdGF0ZS5jb250ZW50c0NsaXBw
aW5nUmVjdC5yZWN0KCkuY29udGFpbnMobV9zdGF0ZS5jb250ZW50c1JlY3QpOwogICAgIGlmIChz
aG91bGRDbGlwKSB7Ci0gICAgICAgIC8vIEZJWE1FOiBUZXh0dXJlTWFwcGVyOjpiZWdpbkNsaXAg
ZG9lc24ndCBzdXBwb3J0IEZsb2F0Um91bmRlZFJlY3QsIHNvIHdlIG5lZWQgdG8gY29udmVydCBt
X3N0YXRlLmNvbnRlbnRzQ2xpcHBpbmdSZWN0IHRvIEZsb2F0UmVjdC4KLSAgICAgICAgb3B0aW9u
cy50ZXh0dXJlTWFwcGVyLmJlZ2luQ2xpcCh0cmFuc2Zvcm0sIG1fc3RhdGUuY29udGVudHNDbGlw
cGluZ1JlY3QucmVjdCgpKTsKKyAgICAgICAgb3B0aW9ucy50ZXh0dXJlTWFwcGVyLmJlZ2luQ2xp
cCh0cmFuc2Zvcm0sIG1fc3RhdGUuY29udGVudHNDbGlwcGluZ1JlY3QpOwogICAgIH0KIAogICAg
IG1fY29udGVudHNMYXllci0+cGFpbnRUb1RleHR1cmVNYXBwZXIob3B0aW9ucy50ZXh0dXJlTWFw
cGVyLCBtX3N0YXRlLmNvbnRlbnRzUmVjdCwgdHJhbnNmb3JtLCBvcHRpb25zLm9wYWNpdHkpOwpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1
cmVNYXBwZXJTaGFkZXJQcm9ncmFtLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbS5jcHAKaW5kZXggMjZjMGY0MmU4
NTM5NDY5NjViODdjY2ZkNzkzMjMxMjI2OGMyOTFhYy4uODk3ODdkZjUyYjk0NzMyY2VmOTBhNmYz
ZDRjMGRiZWJmMDRhNjlhNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtLmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlclNoYWRlclByb2dy
YW0uY3BwCkBAIC02OCw2ICs2OCw3IEBAIHN0YXRpYyBjb25zdCBjaGFyKiB2ZXJ0ZXhUZW1wbGF0
ZUxUMzIwVmFycyA9CiAgICAgICAgIHZhcnlpbmcgdmVjMiB2X3RleENvb3JkOwogICAgICAgICB2
YXJ5aW5nIHZlYzIgdl90cmFuc2Zvcm1lZFRleENvb3JkOwogICAgICAgICB2YXJ5aW5nIGZsb2F0
IHZfYW50aWFsaWFzOworICAgICAgICB2YXJ5aW5nIHZlYzQgdl9ub25Qcm9qZWN0ZWRQb3NpdGlv
bjsKICAgICApOwogCiAjaWYgIVVTRShPUEVOR0xfRVMpCkBAIC03OCw2ICs3OSw3IEBAIHN0YXRp
YyBjb25zdCBjaGFyKiB2ZXJ0ZXhUZW1wbGF0ZUdFMzIwVmFycyA9CiAgICAgICAgIG91dCB2ZWMy
IHZfdGV4Q29vcmQ7CiAgICAgICAgIG91dCB2ZWMyIHZfdHJhbnNmb3JtZWRUZXhDb29yZDsKICAg
ICAgICAgb3V0IGZsb2F0IHZfYW50aWFsaWFzOworICAgICAgICBvdXQgdmVjNCB2X25vblByb2pl
Y3RlZFBvc2l0aW9uOwogICAgICk7CiAjZW5kaWYKIApAQCAtMTMzLDcgKzEzNSw4IEBAIHN0YXRp
YyBjb25zdCBjaGFyKiB2ZXJ0ZXhUZW1wbGF0ZUNvbW1vbiA9CiAgICAgICAgICAgICB2X3RleENv
b3JkID0gcG9zaXRpb247CiAgICAgICAgICAgICB2ZWM0IGNsYW1wZWRQb3NpdGlvbiA9IGNsYW1w
KHZlYzQocG9zaXRpb24sIDAuLCAxLiksIDAuLCAxLik7CiAgICAgICAgICAgICB2X3RyYW5zZm9y
bWVkVGV4Q29vcmQgPSAodV90ZXh0dXJlU3BhY2VNYXRyaXggKiBjbGFtcGVkUG9zaXRpb24pLnh5
OwotICAgICAgICAgICAgZ2xfUG9zaXRpb24gPSB1X3Byb2plY3Rpb25NYXRyaXggKiB1X21vZGVs
Vmlld01hdHJpeCAqIHZlYzQocG9zaXRpb24sIDAuLCAxLik7CisgICAgICAgICAgICB2X25vblBy
b2plY3RlZFBvc2l0aW9uID0gdV9tb2RlbFZpZXdNYXRyaXggKiB2ZWM0KHBvc2l0aW9uLCAwLiwg
MS4pOworICAgICAgICAgICAgZ2xfUG9zaXRpb24gPSB1X3Byb2plY3Rpb25NYXRyaXggKiB2X25v
blByb2plY3RlZFBvc2l0aW9uOwogICAgICAgICB9CiAgICAgKTsKIApAQCAtMTk5LDYgKzIwMiw3
IEBAIHN0YXRpYyBjb25zdCBjaGFyKiBmcmFnbWVudFRlbXBsYXRlTFQzMjBWYXJzID0KICAgICAg
ICAgdmFyeWluZyBmbG9hdCB2X2FudGlhbGlhczsKICAgICAgICAgdmFyeWluZyB2ZWMyIHZfdGV4
Q29vcmQ7CiAgICAgICAgIHZhcnlpbmcgdmVjMiB2X3RyYW5zZm9ybWVkVGV4Q29vcmQ7CisgICAg
ICAgIHZhcnlpbmcgdmVjNCB2X25vblByb2plY3RlZFBvc2l0aW9uOwogICAgICk7CiAKICNpZiAh
VVNFKE9QRU5HTF9FUykKQEAgLTIwOCw2ICsyMTIsNyBAQCBzdGF0aWMgY29uc3QgY2hhciogZnJh
Z21lbnRUZW1wbGF0ZUdFMzIwVmFycyA9CiAgICAgICAgIGluIGZsb2F0IHZfYW50aWFsaWFzOwog
ICAgICAgICBpbiB2ZWMyIHZfdGV4Q29vcmQ7CiAgICAgICAgIGluIHZlYzIgdl90cmFuc2Zvcm1l
ZFRleENvb3JkOworICAgICAgICBpbiB2ZWM0IHZfbm9uUHJvamVjdGVkUG9zaXRpb247CiAgICAg
KTsKICNlbmRpZgogCkBAIC0yMjYsNiArMjMxLDggQEAgc3RhdGljIGNvbnN0IGNoYXIqIGZyYWdt
ZW50VGVtcGxhdGVDb21tb24gPQogICAgICAgICB1bmlmb3JtIHZlYzIgdV9zaGFkb3dPZmZzZXQ7
CiAgICAgICAgIHVuaWZvcm0gdmVjNCB1X2NvbG9yOwogICAgICAgICB1bmlmb3JtIGZsb2F0IHVf
Z2F1c3NpYW5LZXJuZWxbR0FVU1NJQU5fS0VSTkVMX0hBTEZfV0lEVEhdOworICAgICAgICB1bmlm
b3JtIHZlYzQgdV9yb3VuZGVkUmVjdFszXTsKKyAgICAgICAgdW5pZm9ybSBtYXQ0IHVfcm91bmRl
ZFJlY3RJbnZlcnNlVHJhbnNmb3JtTWF0cml4OwogCiAgICAgICAgIHZvaWQgbm9vcChpbm91dCB2
ZWM0IGR1bW15UGFyYW1ldGVyKSB7IH0KICAgICAgICAgdm9pZCBub29wKGlub3V0IHZlYzQgZHVt
bXlQYXJhbWV0ZXIsIHZlYzIgdGV4Q29vcmQpIHsgfQpAQCAtMzkwLDYgKzM5Nyw2NSBAQCBzdGF0
aWMgY29uc3QgY2hhciogZnJhZ21lbnRUZW1wbGF0ZUNvbW1vbiA9CiAKICAgICAgICAgdm9pZCBh
cHBseVNvbGlkQ29sb3IoaW5vdXQgdmVjNCBjb2xvcikgeyBjb2xvciAqPSB1X2NvbG9yOyB9CiAK
KyAgICAgICAgZmxvYXQgZWxsaXBzaXNEaXN0KHZlYzIgcCwgdmVjMiByYWRpdXMpCisgICAgICAg
IHsKKyAgICAgICAgICAgIGlmIChyYWRpdXMgPT0gdmVjMigwLCAwKSkKKyAgICAgICAgICAgICAg
ICByZXR1cm4gMC4wOworCisgICAgICAgICAgICB2ZWMyIHAwID0gcCAvIHJhZGl1czsKKyAgICAg
ICAgICAgIHZlYzIgcDEgPSAyLjAgKiBwMCAvIHJhZGl1czsKKworICAgICAgICAgICAgcmV0dXJu
IChkb3QocDAsIHAwKSAtIDEuMCkgLyBsZW5ndGggKHAxKTsKKyAgICAgICAgfQorCisgICAgICAg
IGZsb2F0IGVsbGlwc2lzQ292ZXJhZ2UodmVjMiBwb2ludCwgdmVjMiBjZW50ZXIsIHZlYzIgcmFk
aXVzKQorICAgICAgICB7CisgICAgICAgICAgICBmbG9hdCBkID0gZWxsaXBzaXNEaXN0KHBvaW50
IC0gY2VudGVyLCByYWRpdXMpOworICAgICAgICAgICAgcmV0dXJuIGNsYW1wKDAuNSAtIGQsIDAu
MCwgMS4wKTsKKyAgICAgICAgfQorCisgICAgICAgIGZsb2F0IHJvdW5kZWRSZWN0Q292ZXJhZ2Uo
dmVjMiBwKQorICAgICAgICB7CisgICAgICAgICAgICB2ZWM0IGJvdW5kcyA9IHZlYzQodV9yb3Vu
ZGVkUmVjdFswXS54eSwgdV9yb3VuZGVkUmVjdFswXS54eSArIHVfcm91bmRlZFJlY3RbMF0uencp
OworCisgICAgICAgICAgICBpZiAocC54IDwgYm91bmRzLnggfHwgcC55IDwgYm91bmRzLnkgfHwg
cC54ID49IGJvdW5kcy56IHx8IHAueSA+PSBib3VuZHMudykKKyAgICAgICAgICAgICAgICByZXR1
cm4gMC4wOworCisgICAgICAgICAgICB2ZWMyIHRvcExlZnRSYWRpaSA9IHVfcm91bmRlZFJlY3Rb
MV0ueHk7CisgICAgICAgICAgICB2ZWMyIHRvcFJpZ2h0UmFkaWkgPSB1X3JvdW5kZWRSZWN0WzFd
Lnp3OworICAgICAgICAgICAgdmVjMiBib3R0b21MZWZ0UmFkaWkgPSB1X3JvdW5kZWRSZWN0WzJd
Lnh5OworICAgICAgICAgICAgdmVjMiBib3R0b21SaWdodFJhZGlpID0gdV9yb3VuZGVkUmVjdFsy
XS56dzsKKworICAgICAgICAgICAgdmVjMiB0b3BMZWZ0Q2VudHJlID0gYm91bmRzLnh5ICsgdG9w
TGVmdFJhZGlpOworICAgICAgICAgICAgdmVjMiB0b3BSaWdodENlbnRyZSA9IGJvdW5kcy56eSAr
ICh0b3BSaWdodFJhZGlpICogdmVjMigtMSwgMSkpOworICAgICAgICAgICAgdmVjMiBib3R0b21M
ZWZ0Q2VudHJlID0gYm91bmRzLnh3ICsgKGJvdHRvbUxlZnRSYWRpaSAqIHZlYzIoMSwgLTEpKTsK
KyAgICAgICAgICAgIHZlYzIgYm90dG9tUmlnaHRDZW50cmUgPSBib3VuZHMuencgKyAoYm90dG9t
UmlnaHRSYWRpaSAqIHZlYzIoLTEsIC0xKSk7CisKKyAgICAgICAgICAgIHZlYzQgY29ybmVyQ292
ZXJhZ2VzID0gMS4wIC0gdmVjNChlbGxpcHNpc0NvdmVyYWdlKHAsIHRvcExlZnRDZW50cmUsIHRv
cExlZnRSYWRpaSksCisgICAgICAgICAgICAgICAgZWxsaXBzaXNDb3ZlcmFnZShwLCB0b3BSaWdo
dENlbnRyZSwgdG9wUmlnaHRSYWRpaSksCisgICAgICAgICAgICAgICAgZWxsaXBzaXNDb3ZlcmFn
ZShwLCBib3R0b21MZWZ0Q2VudHJlLCBib3R0b21MZWZ0UmFkaWkpLAorICAgICAgICAgICAgICAg
IGVsbGlwc2lzQ292ZXJhZ2UocCwgYm90dG9tUmlnaHRDZW50cmUsIGJvdHRvbVJpZ2h0UmFkaWkp
KTsKKworICAgICAgICAgICAgYnZlYzQgaXNPdXQgPSBidmVjNChwLnggPCB0b3BMZWZ0Q2VudHJl
LnggJiYgcC55IDwgdG9wTGVmdENlbnRyZS55LAorICAgICAgICAgICAgICAgIHAueCA+IHRvcFJp
Z2h0Q2VudHJlLnggJiYgcC55IDwgdG9wUmlnaHRDZW50cmUueSwKKyAgICAgICAgICAgICAgICBw
LnggPCBib3R0b21MZWZ0Q2VudHJlLnggJiYgcC55ID4gYm90dG9tTGVmdENlbnRyZS55LAorICAg
ICAgICAgICAgICAgIHAueCA+IGJvdHRvbVJpZ2h0Q2VudHJlLnggJiYgcC55ID4gYm90dG9tUmln
aHRDZW50cmUueSk7CisKKyAgICAgICAgICAgIHJldHVybiAxLjAgLSBkb3QodmVjNChpc091dCks
IGNvcm5lckNvdmVyYWdlcyk7CisgICAgICAgIH0KKworICAgICAgICB2b2lkIGFwcGx5Um91bmRl
ZFJlY3RDbGlwKGlub3V0IHZlYzQgY29sb3IpCisgICAgICAgIHsKKyAgICAgICAgICAgIC8vIFRo
aXMgd29ya3MgYnkgY2hlY2tpbmcgd2hldGhlciB0aGUgZnJhZ21lbnQgcG9zaXRpb24sIG9uY2Ug
dGhlIHRyYW5zZm9ybSBpcyBhcHBsaWVkLAorICAgICAgICAgICAgLy8gaXMgaW5zaWRlIHRoZSBk
ZWZpbmVkIHJvdW5kZWQgcmVjdGFuZ2xlIG9yIG5vdC4KKyAgICAgICAgICAgIC8vCisgICAgICAg
ICAgICAvLyBXZSBjYW4ndCB1c2UgZ2xfZnJhZ0Nvb3JkIGZvciB0aGUgZnJhZ21lbnQgcG9zaXRp
b24gYmVjYXVzZSB0aGF0cyB0aGUgcHJvamVjdGVkIHBvaW50CisgICAgICAgICAgICAvLyBhbmQg
dGhlIHByb2plY3Rpb24gc2NyZXdzIHRoZSBaIGNvbXBvbmVudC4gV2UgbmVlZCB0aGUgcmVhbCAz
RCBwb3NpdGlvbiB0aGF0IGNvbWVzIGZyb20KKyAgICAgICAgICAgIC8vIHRoZSBub25Qcm9qZWN0
ZWRQb3NpdGlvbiB2YXJpYWJsZS4KKyAgICAgICAgICAgIHZlYzQgZnJhZ0Nvb3JkID0gdV9yb3Vu
ZGVkUmVjdEludmVyc2VUcmFuc2Zvcm1NYXRyaXggKiB2X25vblByb2plY3RlZFBvc2l0aW9uOwor
ICAgICAgICAgICAgY29sb3IgKj0gcm91bmRlZFJlY3RDb3ZlcmFnZShmcmFnQ29vcmQueHkpOwor
ICAgICAgICB9CisKICAgICAgICAgdm9pZCBtYWluKHZvaWQpCiAgICAgICAgIHsKICAgICAgICAg
ICAgIHZlYzQgY29sb3IgPSB2ZWM0KDEuLCAxLiwgMS4sIDEuKTsKQEAgLTQxNSw2ICs0ODEsNyBA
QCBzdGF0aWMgY29uc3QgY2hhciogZnJhZ21lbnRUZW1wbGF0ZUNvbW1vbiA9CiAgICAgICAgICAg
ICBhcHBseUFscGhhQmx1cklmTmVlZGVkKGNvbG9yLCB0ZXhDb29yZCk7CiAgICAgICAgICAgICBh
cHBseUNvbnRlbnRUZXh0dXJlSWZOZWVkZWQoY29sb3IsIHRleENvb3JkKTsKICAgICAgICAgICAg
IGFwcGx5VGV4dHVyZUV4dGVybmFsT0VTSWZOZWVkZWQoY29sb3IsIHRleENvb3JkKTsKKyAgICAg
ICAgICAgIGFwcGx5Um91bmRlZFJlY3RDbGlwSWZOZWVkZWQoY29sb3IpOwogICAgICAgICAgICAg
Z2xfRnJhZ0NvbG9yID0gY29sb3I7CiAgICAgICAgIH0KICAgICApOwpAQCAtNDQ4LDYgKzUxNSw3
IEBAIFJlZjxUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbT4gVGV4dHVyZU1hcHBlclNoYWRlclBy
b2dyYW06OmNyZWF0ZShUZXh0dXJlTWFwcGVyCiAgICAgU0VUX0FQUExJRVJfRlJPTV9PUFRJT05T
KENvbnRlbnRUZXh0dXJlKTsKICAgICBTRVRfQVBQTElFUl9GUk9NX09QVElPTlMoTWFudWFsUmVw
ZWF0KTsKICAgICBTRVRfQVBQTElFUl9GUk9NX09QVElPTlMoVGV4dHVyZUV4dGVybmFsT0VTKTsK
KyAgICBTRVRfQVBQTElFUl9GUk9NX09QVElPTlMoUm91bmRlZFJlY3RDbGlwKTsKIAogICAgIFN0
cmluZ0J1aWxkZXIgdmVydGV4U2hhZGVyQnVpbGRlcjsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFt
LmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBl
clNoYWRlclByb2dyYW0uaAppbmRleCBmZjgzNjQ4ZTcwZWQ0OWM4Mzk4MWE0MjhlNzMwZjAxNWYx
N2ZjNmIxLi5jZGE1ZDVlMzQ3N2M1NDViOTQ5NWRlYTIxMWIyZjEyMWUyYTE1YjdiIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBl
clNoYWRlclByb2dyYW0uaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90
ZXhtYXAvVGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW0uaApAQCAtNDgsNiArNDgsOCBAQCBuYW1l
c3BhY2UgV2ViQ29yZSB7CiAgICAgbWFjcm8oZ2F1c3NpYW5LZXJuZWwpIFwKICAgICBtYWNybyhi
bHVyUmFkaXVzKSBcCiAgICAgbWFjcm8oc2hhZG93T2Zmc2V0KSBcCisgICAgbWFjcm8ocm91bmRl
ZFJlY3QpIFwKKyAgICBtYWNybyhyb3VuZGVkUmVjdEludmVyc2VUcmFuc2Zvcm1NYXRyaXgpIFwK
IAogI2RlZmluZSBURVhNQVBfU0FNUExFUl9WQVJJQUJMRVMobWFjcm8pIFwKICAgICBtYWNybyhz
YW1wbGVyKSBcCkBAIC05OSw2ICsxMDEsNyBAQCBwdWJsaWM6CiAgICAgICAgIFRleHR1cmVOVjIx
ICAgICAgPSAxTCA8PCAyMCwKICAgICAgICAgVGV4dHVyZVBhY2tlZFlVViA9IDFMIDw8IDIxLAog
ICAgICAgICBUZXh0dXJlRXh0ZXJuYWxPRVMgPSAxTCA8PCAyMiwKKyAgICAgICAgUm91bmRlZFJl
Y3RDbGlwICA9IDFMIDw8IDIzLAogICAgIH07CiAKICAgICBlbnVtIGNsYXNzIFZhcmlhYmxlSUQg
ewo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>412071</attachid>
            <date>2020-10-22 01:31:12 -0700</date>
            <delta_ts>2020-10-22 06:47:47 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-174457-20201022103110.patch</filename>
            <type>text/plain</type>
            <size>32111</size>
            <attacher name="Miguel Gomez">magomez</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjY4ODU1CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggY2UzZTlkZDAwM2EyYmJk
YmM1YzZmNjQ3YjJkMDU2ODk4YjNhZDAyNi4uOWVjMjFkOWNkNzc4ZDUzMmNiN2NmOTAxZDQ5NDdh
NDBjMTQyNjEyNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQ3IEBACisyMDIwLTEwLTIyICBNaWd1
ZWwgR29tZXogIDxtYWdvbWV6QGlnYWxpYS5jb20+CisKKyAgICAgICAgW0dUS11bV1BFXSBJbXBs
ZW1lbnQgYW50aWFsaWFzZWQgcm91bmRlZCByZWN0YW5nbGUgY2xpcHBpbmcgaW4gVGV4dHVyZU1h
cHBlcgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTc0
NDU3CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgSW1w
bGVtZW50IHJvdW5kZWQgcmVjdGFuZ2xlIGNsaXBwaW5nIGluIFRleHR1cmVNYXBwZXJHTCwgc3Vw
cG9ydGluZyB1cCB0byAxMCBzaW11bHRhbmVvdXMKKyAgICAgICAgcm91bmRlZCByZWN0YW5nbGUg
Y2xpcHMuIFRleHR1cmVNYXBwZXI6OmJlZ2luQ2xpcCgpIG5vdyByZWNlaXZlcyBhIHJvdW5kZWQg
cmVjdGFuZ2xlLCBhbmQKKyAgICAgICAgaXQgYXBwbGllcyB0aGUgYXBwcm9wcmlhdGUgY2xpcHBp
bmcgbWV0aG9kIGFzIHJlcXVpcmVkLgorCisgICAgICAgIFRoZSByb3VuZGVkIHJlY3RhbmdsZSBj
bGlwIGltcGxlbWVudGF0aW9uIHVzZXMgdGhlIGZyYWdtZW50IHNoYWRlciB0byBjYWxjdWxhdGUg
d2hldGhlcgorICAgICAgICBlYWNoIHBpeGVsIGlzIGluc2lkZSB0aGUgZGVmaW5lZCByb3VuZGVk
IHJlY3RhbmdsZXMsIGFuZCBwYWludHMgb3Igc2tpcHMgaXQgYXMgbmVlZGVkLgorCisgICAgICAg
IENvdmVyZWQgYnkgZXhpc3RlbnQgdGVzdHMuCisKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGlj
cy90ZXhtYXAvQ2xpcFN0YWNrLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNsaXBTdGFjazo6YWRk
Um91bmRlZFJlY3QpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9DbGlwU3Rh
Y2suaDoKKyAgICAgICAgKFdlYkNvcmU6OkNsaXBTdGFjazo6U3RhdGU6OlN0YXRlKToKKyAgICAg
ICAgKFdlYkNvcmU6OkNsaXBTdGFjazo6cm91bmRlZFJlY3RDb21wb25lbnRzIGNvbnN0KToKKyAg
ICAgICAgKFdlYkNvcmU6OkNsaXBTdGFjazo6cm91bmRlZFJlY3RJbnZlcnNlVHJhbnNmb3JtQ29t
cG9uZW50cyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpDbGlwU3RhY2s6OnJvdW5kZWRSZWN0
SW5kZXggY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6Q2xpcFN0YWNrOjppc1JvdW5kZWRSZWN0
Q2xpcEVuYWJsZWQgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6Q2xpcFN0YWNrOjppc1JvdW5k
ZWRSZWN0Q2xpcEFsbG93ZWQgY29uc3QpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3Rl
eG1hcC9UZXh0dXJlTWFwcGVyLmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFw
L1RleHR1cmVNYXBwZXJHTC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpwcmVwYXJlUm91bmRlZFJl
Y3RDbGlwKToKKyAgICAgICAgKFdlYkNvcmU6OlRleHR1cmVNYXBwZXJHTDo6ZHJhd1RleHR1cmUp
OgorICAgICAgICAoV2ViQ29yZTo6VGV4dHVyZU1hcHBlckdMOjpkcmF3VGV4dHVyZVBsYW5hcllV
Vik6CisgICAgICAgIChXZWJDb3JlOjpUZXh0dXJlTWFwcGVyR0w6OmRyYXdUZXh0dXJlU2VtaVBs
YW5hcllVVik6CisgICAgICAgIChXZWJDb3JlOjpUZXh0dXJlTWFwcGVyR0w6OmRyYXdUZXh0dXJl
UGFja2VkWVVWKToKKyAgICAgICAgKFdlYkNvcmU6OlRleHR1cmVNYXBwZXJHTDo6ZHJhd1NvbGlk
Q29sb3IpOgorICAgICAgICAoV2ViQ29yZTo6VGV4dHVyZU1hcHBlckdMOjpiZWdpblJvdW5kZWRS
ZWN0Q2xpcCk6CisgICAgICAgIChXZWJDb3JlOjpUZXh0dXJlTWFwcGVyR0w6OmJlZ2luQ2xpcCk6
CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJHTC5oOgor
ICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyTGF5ZXIuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6VGV4dHVyZU1hcHBlckxheWVyOjpwYWludFNlbGYpOgorICAg
ICAgICAoV2ViQ29yZTo6VGV4dHVyZU1hcHBlckxheWVyOjpwYWludFNlbGZBbmRDaGlsZHJlbik6
CisgICAgICAgIChXZWJDb3JlOjpUZXh0dXJlTWFwcGVyTGF5ZXI6OnBhaW50VXNpbmdPdmVybGFw
UmVnaW9ucyk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBw
ZXJTaGFkZXJQcm9ncmFtLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlRleHR1cmVNYXBwZXJTaGFk
ZXJQcm9ncmFtOjpjcmVhdGUpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9U
ZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbS5oOgorCiAyMDIwLTEwLTIxICBBbGV4IENocmlzdGVu
c2VuICA8YWNocmlzdGVuc2VuQHdlYmtpdC5vcmc+CiAKICAgICAgICAgVXBkYXRlIGFuZCBwYXNz
IG5ldyBVUkwgd2ViIHBsYXRmb3JtIHRlc3RzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCmluZGV4IGU4YjQwNjA1MWJhZDMyNzVk
YjAxOTkxODQxZDg1MmZmM2MxYTllYWEuLjcxYmMzNWQzYjg4YWRlNjM1M2UxNjY0MzJjNzU3MThl
MWM5NTM0MDUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCisrKyBiL1NvdXJj
ZS9XZWJLaXQvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTUgQEAKKzIwMjAtMTAtMjIgIE1pZ3VlbCBH
b21leiAgPG1hZ29tZXpAaWdhbGlhLmNvbT4KKworICAgICAgICBbR1RLXVtXUEVdIEltcGxlbWVu
dCBhbnRpYWxpYXNlZCByb3VuZGVkIHJlY3RhbmdsZSBjbGlwcGluZyBpbiBUZXh0dXJlTWFwcGVy
CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNzQ0NTcK
KworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBVc2UgdGhl
IG5ldyBUZXh0dXJlTWFwcGVyOjpiZWdpbkNsaXAoKSBtZXRob2QgdGhhdCByZWNlaXZlcyBhIEZs
b2F0Um91bmRlZFJlY3QuCisKKyAgICAgICAgKiBTaGFyZWQvQ29vcmRpbmF0ZWRHcmFwaGljcy9D
b29yZGluYXRlZEdyYXBoaWNzU2NlbmUuY3BwOgorICAgICAgICAoV2ViS2l0OjpDb29yZGluYXRl
ZEdyYXBoaWNzU2NlbmU6OnBhaW50VG9DdXJyZW50R0xDb250ZXh0KToKKwogMjAyMC0xMC0yMSAg
Unlvc3VrZSBOaXdhICA8cm5pd2FAd2Via2l0Lm9yZz4KIAogICAgICAgICBNb3ZlIGZ1bmN0aW9u
IGRlZmluaXRpb25zIGluIEpTSVBDQmluZGluZy5oIGludG8gY3BwIGZpbGUKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9DbGlwU3RhY2suY3BwIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL0NsaXBTdGFjay5jcHAKaW5k
ZXggZGE4NDBiZjRmN2UyMTI5YjEyM2M4ZDE3ZTkyOGIwMDU2YmFjZDk3My4uZTdkYzNlNWE2NzI1
MTIxNjdkY2JjNjVmZjg3MDc4NzIyYjVhN2E4NSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL0NsaXBTdGFjay5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL0NsaXBTdGFjay5jcHAKQEAgLTYyLDYgKzYyLDMw
IEBAIHZvaWQgQ2xpcFN0YWNrOjpzZXRTdGVuY2lsSW5kZXgoaW50IHN0ZW5jaWxJbmRleCkKICAg
ICBjbGlwU3RhdGVEaXJ0eSA9IHRydWU7CiB9CiAKK3ZvaWQgQ2xpcFN0YWNrOjphZGRSb3VuZGVk
UmVjdChjb25zdCBGbG9hdFJvdW5kZWRSZWN0JiByb3VuZGVkUmVjdCwgY29uc3QgVHJhbnNmb3Jt
YXRpb25NYXRyaXgmIG1hdHJpeCkKK3sKKyAgICAvLyBDb3B5IHRoZSBSb3VuZGVkUmVjdCBjb21w
b25lbnRzIHRvIHRoZSBhcHByb3ByaWF0ZSBwb3NpdGlvbiBpbiB0aGUgYXJyYXkuCisgICAgaW50
IGJhc2VQb3NpdGlvbiA9IGNsaXBTdGF0ZS5yb3VuZGVkUmVjdEluZGV4ICogc19yb3VuZGVkUmVj
dENvbXBvbmVudHNQZXJSZWN0OworICAgIG1fcm91bmRlZFJlY3RDb21wb25lbnRzW2Jhc2VQb3Np
dGlvbl0gPSByb3VuZGVkUmVjdC5yZWN0KCkueCgpOworICAgIG1fcm91bmRlZFJlY3RDb21wb25l
bnRzW2Jhc2VQb3NpdGlvbiArIDFdID0gcm91bmRlZFJlY3QucmVjdCgpLnkoKTsKKyAgICBtX3Jv
dW5kZWRSZWN0Q29tcG9uZW50c1tiYXNlUG9zaXRpb24gKyAyXSA9IHJvdW5kZWRSZWN0LnJlY3Qo
KS53aWR0aCgpOworICAgIG1fcm91bmRlZFJlY3RDb21wb25lbnRzW2Jhc2VQb3NpdGlvbiArIDNd
ID0gcm91bmRlZFJlY3QucmVjdCgpLmhlaWdodCgpOworICAgIG1fcm91bmRlZFJlY3RDb21wb25l
bnRzW2Jhc2VQb3NpdGlvbiArIDRdID0gcm91bmRlZFJlY3QucmFkaWkoKS50b3BMZWZ0KCkud2lk
dGgoKTsKKyAgICBtX3JvdW5kZWRSZWN0Q29tcG9uZW50c1tiYXNlUG9zaXRpb24gKyA1XSA9IHJv
dW5kZWRSZWN0LnJhZGlpKCkudG9wTGVmdCgpLmhlaWdodCgpOworICAgIG1fcm91bmRlZFJlY3RD
b21wb25lbnRzW2Jhc2VQb3NpdGlvbiArIDZdID0gcm91bmRlZFJlY3QucmFkaWkoKS50b3BSaWdo
dCgpLndpZHRoKCk7CisgICAgbV9yb3VuZGVkUmVjdENvbXBvbmVudHNbYmFzZVBvc2l0aW9uICsg
N10gPSByb3VuZGVkUmVjdC5yYWRpaSgpLnRvcFJpZ2h0KCkuaGVpZ2h0KCk7CisgICAgbV9yb3Vu
ZGVkUmVjdENvbXBvbmVudHNbYmFzZVBvc2l0aW9uICsgOF0gPSByb3VuZGVkUmVjdC5yYWRpaSgp
LmJvdHRvbUxlZnQoKS53aWR0aCgpOworICAgIG1fcm91bmRlZFJlY3RDb21wb25lbnRzW2Jhc2VQ
b3NpdGlvbiArIDldID0gcm91bmRlZFJlY3QucmFkaWkoKS5ib3R0b21MZWZ0KCkuaGVpZ2h0KCk7
CisgICAgbV9yb3VuZGVkUmVjdENvbXBvbmVudHNbYmFzZVBvc2l0aW9uICsgMTBdID0gcm91bmRl
ZFJlY3QucmFkaWkoKS5ib3R0b21SaWdodCgpLndpZHRoKCk7CisgICAgbV9yb3VuZGVkUmVjdENv
bXBvbmVudHNbYmFzZVBvc2l0aW9uICsgMTFdID0gcm91bmRlZFJlY3QucmFkaWkoKS5ib3R0b21S
aWdodCgpLmhlaWdodCgpOworCisgICAgLy8gQ29weSB0aGUgVHJhbnNmb3JtYXRpb25NYXRyaXgg
Y29tcG9uZW50cyB0byB0aGUgYXBwcm9wcmlhdGUgcG9zaXRpb24gaW4gdGhlIGFycmF5LgorICAg
IGJhc2VQb3NpdGlvbiA9IGNsaXBTdGF0ZS5yb3VuZGVkUmVjdEluZGV4ICogc19yb3VuZGVkUmVj
dEludmVyc2VUcmFuc2Zvcm1Db21wb25lbnRzUGVyUmVjdDsKKyAgICBtZW1jcHkobV9yb3VuZGVk
UmVjdEludmVyc2VUcmFuc2Zvcm1Db21wb25lbnRzLmRhdGEoKSArIGJhc2VQb3NpdGlvbiwgbWF0
cml4LnRvQ29sdW1uTWFqb3JGbG9hdEFycmF5KCkuZGF0YSgpLCBzX3JvdW5kZWRSZWN0SW52ZXJz
ZVRyYW5zZm9ybUNvbXBvbmVudHNQZXJSZWN0ICogc2l6ZW9mKGZsb2F0KSk7CisKKyAgICBjbGlw
U3RhdGUucm91bmRlZFJlY3RJbmRleCsrOworfQorCiB2b2lkIENsaXBTdGFjazo6YXBwbHkoKQog
ewogICAgIGlmIChjbGlwU3RhdGUuc2Npc3NvckJveC5pc0VtcHR5KCkpCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvQ2xpcFN0YWNrLmggYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvQ2xpcFN0YWNrLmgKaW5kZXggMjY3
Y2U0MDk2MDEyZmIxN2U3NjhlOTFjMjVmYTA5OTBkNGUwOTllOS4uMjlkOWUxOWU1MDkxODRhNTRm
NGY4ZjNhYzVkZmJlNjNlZDViNmNjNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvdGV4bWFwL0NsaXBTdGFjay5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL3RleG1hcC9DbGlwU3RhY2suaApAQCAtMjEsMjIgKzIxLDQzIEBACiAjaWZu
ZGVmIENsaXBTdGFja19oCiAjZGVmaW5lIENsaXBTdGFja19oCiAKKyNpbmNsdWRlICJGbG9hdFJv
dW5kZWRSZWN0LmgiCiAjaW5jbHVkZSAiSW50UmVjdC5oIgogI2luY2x1ZGUgIkludFNpemUuaCIK
KyNpbmNsdWRlICJUcmFuc2Zvcm1hdGlvbk1hdHJpeC5oIgogI2luY2x1ZGUgPHd0Zi9WZWN0b3Iu
aD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCisvLyBCZWNhdXNlIEdMU0wgdW5pZm9ybSBhcnJh
eXMgbmVlZCB0byBoYXZlIGEgZGVmaW5lZCBzaXplLCB3ZSBuZWVkIHRvIHB1dCBhIGxpbWl0IHRv
IHRoZSBudW1iZXIgb2Ygc2ltdWx0YW5lb3VzCisvLyByb3VuZGVkIHJlY3RhbmdsZSBjbGlwcyB0
aGF0IHdlJ3JlIGdvaW5nIHRvIGFsbG93LiBDdXJyZW50bHkgdGhpcyBpcyBkZWZpbmVkIHRvIDEw
LgorLy8gVGhpcyB2YWx1ZSBtdXN0IGJlIGtlcHQgaW4gc3luYyB3aXRoIHRoZSBzaXplcyBkZWZp
bmVkIGluIFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtLmNwcC4KK3N0YXRpYyBjb25zdCBpbnQg
c19yb3VuZGVkUmVjdE1heENsaXBzQWxsb3dlZCA9IDEwOworCisvLyBXaGVuIGNvbnZlcnRpbmcg
YSByb3VuZGVkIHJlY3RhbmdsZSB0byBhbiBhcnJheSBvZiBmbG9hdHMsIHdlIG5lZWQgMTIgZWxl
bWVudHMuIFNvIHRoZSBzaXplIG9mIHRoZSBhcnJheQorLy8gcmVxdWlyZWQgdG8gY29udGFpbiB0
aGUgMTAgcmVjdGFuZ2xlcyBpcyAxMiAqIDEwID0gMTIwLgorLy8gVGhpcyB2YWx1ZSBtdXN0IGJl
IGtlcHQgaW4gc3luYyB3aXRoIHRoZSBzaXplcyBkZWZpbmVkIGluIFRleHR1cmVNYXBwZXJTaGFk
ZXJQcm9ncmFtLmNwcC4KK3N0YXRpYyBjb25zdCBpbnQgc19yb3VuZGVkUmVjdENvbXBvbmVudHNQ
ZXJSZWN0ID0gMTI7CitzdGF0aWMgY29uc3QgaW50IHNfcm91bmRlZFJlY3RDb21wb25lbnRzQXJy
YXlTaXplID0gc19yb3VuZGVkUmVjdE1heENsaXBzQWxsb3dlZCAqIHNfcm91bmRlZFJlY3RDb21w
b25lbnRzUGVyUmVjdDsKKworLy8gV2hlbiBjb252ZXJ0aW5nIGEgdHJhbnNmb3JtYXRpb24gbWF0
cml4IHRvIGFuIGFycmF5IG9mIGZsb2F0cywgd2UgbmVlZCAxNiBlbGVtZW50cy4gU28gdGhlIHNp
emUgb2YgdGhlIGFycmF5CisvLyByZXF1aXJlZCB0byBjb250YWluIHRoZSAxMCBtYXRyaWNlcyBp
cyAxNiAqIDEwID0gMTYwLgorLy8gVGhpcyB2YWx1ZSBtdXN0IGJlIGtlcHQgaW4gc3luYyB3aXRo
IHRoZSBzaXplcyBkZWZpbmVkIGluIFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtLmNwcC4KK3N0
YXRpYyBjb25zdCBpbnQgc19yb3VuZGVkUmVjdEludmVyc2VUcmFuc2Zvcm1Db21wb25lbnRzUGVy
UmVjdCA9IDE2Oworc3RhdGljIGNvbnN0IGludCBzX3JvdW5kZWRSZWN0SW52ZXJzZVRyYW5zZm9y
bUNvbXBvbmVudHNBcnJheVNpemUgPSBzX3JvdW5kZWRSZWN0TWF4Q2xpcHNBbGxvd2VkICogc19y
b3VuZGVkUmVjdEludmVyc2VUcmFuc2Zvcm1Db21wb25lbnRzUGVyUmVjdDsKKwogY2xhc3MgQ2xp
cFN0YWNrIHsKIHB1YmxpYzoKICAgICBzdHJ1Y3QgU3RhdGUgewotICAgICAgICBTdGF0ZShjb25z
dCBJbnRSZWN0JiBzY2lzc29ycyA9IEludFJlY3QoKSwgaW50IHN0ZW5jaWwgPSAxKQorICAgICAg
ICBTdGF0ZShjb25zdCBJbnRSZWN0JiBzY2lzc29ycyA9IEludFJlY3QoKSwgaW50IHN0ZW5jaWwg
PSAxLCBpbnQgcm91bmRlZFJlY3QgPSAwKQogICAgICAgICAgICAgOiBzY2lzc29yQm94KHNjaXNz
b3JzKQogICAgICAgICAgICAgLCBzdGVuY2lsSW5kZXgoc3RlbmNpbCkKKyAgICAgICAgICAgICwg
cm91bmRlZFJlY3RJbmRleChyb3VuZGVkUmVjdCkKICAgICAgICAgeyB9CiAKICAgICAgICAgSW50
UmVjdCBzY2lzc29yQm94OwogICAgICAgICBpbnQgc3RlbmNpbEluZGV4OworICAgICAgICBpbnQg
cm91bmRlZFJlY3RJbmRleDsKICAgICB9OwogCiAgICAgLy8gWS1heGlzIHNob3VsZCBiZSBpbnZl
cnRlZCBvbmx5IHdoZW4gcGFpbnRpbmcgaW50byB0aGUgd2luZG93LgpAQCAtNTQsNiArNzUsMTMg
QEAgcHVibGljOgogICAgIHZvaWQgc2V0U3RlbmNpbEluZGV4KGludCk7CiAgICAgaW50IGdldFN0
ZW5jaWxJbmRleCgpIGNvbnN0IHsgcmV0dXJuIGNsaXBTdGF0ZS5zdGVuY2lsSW5kZXg7IH0KIAor
ICAgIHZvaWQgYWRkUm91bmRlZFJlY3QoY29uc3QgRmxvYXRSb3VuZGVkUmVjdCYsIGNvbnN0IFRy
YW5zZm9ybWF0aW9uTWF0cml4Jik7CisgICAgY29uc3QgZmxvYXQqIHJvdW5kZWRSZWN0Q29tcG9u
ZW50cygpIGNvbnN0IHsgcmV0dXJuIG1fcm91bmRlZFJlY3RDb21wb25lbnRzLmRhdGEoKTsgfQor
ICAgIGNvbnN0IGZsb2F0KiByb3VuZGVkUmVjdEludmVyc2VUcmFuc2Zvcm1Db21wb25lbnRzKCkg
Y29uc3QgeyByZXR1cm4gbV9yb3VuZGVkUmVjdEludmVyc2VUcmFuc2Zvcm1Db21wb25lbnRzLmRh
dGEoKTsgfQorICAgIGludCByb3VuZGVkUmVjdEluZGV4KCkgY29uc3QgeyByZXR1cm4gY2xpcFN0
YXRlLnJvdW5kZWRSZWN0SW5kZXg7IH0KKyAgICBib29sIGlzUm91bmRlZFJlY3RDbGlwRW5hYmxl
ZCgpIGNvbnN0IHsgcmV0dXJuICEhY2xpcFN0YXRlLnJvdW5kZWRSZWN0SW5kZXg7IH0KKyAgICBi
b29sIGlzUm91bmRlZFJlY3RDbGlwQWxsb3dlZCgpIGNvbnN0IHsgcmV0dXJuIGNsaXBTdGF0ZS5y
b3VuZGVkUmVjdEluZGV4IDwgc19yb3VuZGVkUmVjdE1heENsaXBzQWxsb3dlZDsgfQorCiAgICAg
dm9pZCBhcHBseSgpOwogICAgIHZvaWQgYXBwbHlJZk5lZWRlZCgpOwogCkBAIC02NSw2ICs5Myw4
IEBAIHByaXZhdGU6CiAgICAgSW50U2l6ZSBzaXplOwogICAgIGJvb2wgY2xpcFN0YXRlRGlydHkg
eyBmYWxzZSB9OwogICAgIFlBeGlzTW9kZSB5QXhpc01vZGUgeyBZQXhpc01vZGU6OkRlZmF1bHQg
fTsKKyAgICBzdGQ6OmFycmF5PGZsb2F0LCBzX3JvdW5kZWRSZWN0Q29tcG9uZW50c0FycmF5U2l6
ZT4gbV9yb3VuZGVkUmVjdENvbXBvbmVudHMgPSB7IH07CisgICAgc3RkOjphcnJheTxmbG9hdCwg
c19yb3VuZGVkUmVjdEludmVyc2VUcmFuc2Zvcm1Db21wb25lbnRzQXJyYXlTaXplPiBtX3JvdW5k
ZWRSZWN0SW52ZXJzZVRyYW5zZm9ybUNvbXBvbmVudHMgPSB7IH07CiB9OwogCiB9IC8vIG5hbWVz
cGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy90ZXhtYXAvVGV4dHVyZU1hcHBlci5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvdGV4bWFwL1RleHR1cmVNYXBwZXIuaAppbmRleCBlZWIwZmNhNDFhZmJhMGE0MTEwYzQ0YWJj
ODQ2Y2I5NzcwNjM2ODBmLi4zMzRkY2FlODU3MGViOGEwZTEyODZiNDg5ZWEyOGQ2NzQ4YTgwMmM4
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4
dHVyZU1hcHBlci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1h
cC9UZXh0dXJlTWFwcGVyLmgKQEAgLTM3LDYgKzM3LDcgQEAgY2xhc3MgQml0bWFwVGV4dHVyZVBv
b2w7CiBjbGFzcyBHcmFwaGljc0xheWVyOwogY2xhc3MgVGV4dHVyZU1hcHBlcjsKIGNsYXNzIEZp
bHRlck9wZXJhdGlvbnM7CitjbGFzcyBGbG9hdFJvdW5kZWRSZWN0OwogCiBjbGFzcyBUZXh0dXJl
TWFwcGVyIHsKICAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKQEAgLTc1LDcgKzc2LDcgQEAg
cHVibGljOgogCiAgICAgLy8gbWFrZXMgYSBzdXJmYWNlIHRoZSB0YXJnZXQgZm9yIHRoZSBmb2xs
b3dpbmcgZHJhd1RleHR1cmUgY2FsbHMuCiAgICAgdmlydHVhbCB2b2lkIGJpbmRTdXJmYWNlKEJp
dG1hcFRleHR1cmUqIHN1cmZhY2UpID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgYmVnaW5DbGlwKGNv
bnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiwgY29uc3QgRmxvYXRSZWN0JikgPSAwOworICAgIHZp
cnR1YWwgdm9pZCBiZWdpbkNsaXAoY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmLCBjb25zdCBG
bG9hdFJvdW5kZWRSZWN0JikgPSAwOwogICAgIHZpcnR1YWwgdm9pZCBlbmRDbGlwKCkgPSAwOwog
ICAgIHZpcnR1YWwgSW50UmVjdCBjbGlwQm91bmRzKCkgPSAwOwogICAgIHZpcnR1YWwgdm9pZCBi
ZWdpblByZXNlcnZlczNEKCkgeyB9OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJHTC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlckdMLmNwcAppbmRleCA1NDBjNDBi
YjRjMWY3YzcwMjQ0YThiMDNkYjFjZmE1OWM0YjZmNjk1Li5iMTliYTNkOTNkMzM5MDRlNWExZGY5
NmUyOTc4ZjAwMjJkMjYzNzg5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlckdMLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlckdMLmNwcApAQCAtMjksNiArMjks
NyBAQAogI2luY2x1ZGUgIkV4dGVuc2lvbnNHTC5oIgogI2luY2x1ZGUgIkZpbHRlck9wZXJhdGlv
bnMuaCIKICNpbmNsdWRlICJGbG9hdFF1YWQuaCIKKyNpbmNsdWRlICJGbG9hdFJvdW5kZWRSZWN0
LmgiCiAjaW5jbHVkZSAiR0xDb250ZXh0LmgiCiAjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0Lmgi
CiAjaW5jbHVkZSAiSW1hZ2UuaCIKQEAgLTQ0Miw2ICs0NDMsMTUgQEAgc3RhdGljIFRyYW5zZm9y
bWF0aW9uTWF0cml4IGNvbG9yU3BhY2VNYXRyaXhGb3JGbGFncyhUZXh0dXJlTWFwcGVyR0w6OkZs
YWdzIGZsYWcKICAgICByZXR1cm4gbWF0cml4OwogfQogCitzdGF0aWMgdm9pZCBwcmVwYXJlUm91
bmRlZFJlY3RDbGlwKFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtJiBwcm9ncmFtLCBjb25zdCBm
bG9hdCogcmVjdHMsIGNvbnN0IGZsb2F0KiB0cmFuc2Zvcm1zLCBpbnQgblJlY3RzKQoreworICAg
IGdsVXNlUHJvZ3JhbShwcm9ncmFtLnByb2dyYW1JRCgpKTsKKworICAgIGdsVW5pZm9ybTFpKHBy
b2dyYW0ucm91bmRlZFJlY3ROdW1iZXJMb2NhdGlvbigpLCBuUmVjdHMpOworICAgIGdsVW5pZm9y
bTRmdihwcm9ncmFtLnJvdW5kZWRSZWN0TG9jYXRpb24oKSwgMyAqIG5SZWN0cywgcmVjdHMpOwor
ICAgIGdsVW5pZm9ybU1hdHJpeDRmdihwcm9ncmFtLnJvdW5kZWRSZWN0SW52ZXJzZVRyYW5zZm9y
bU1hdHJpeExvY2F0aW9uKCksIG5SZWN0cywgZmFsc2UsIHRyYW5zZm9ybXMpOworfQorCiB2b2lk
IFRleHR1cmVNYXBwZXJHTDo6ZHJhd1RleHR1cmUoY29uc3QgQml0bWFwVGV4dHVyZSYgdGV4dHVy
ZSwgY29uc3QgRmxvYXRSZWN0JiB0YXJnZXRSZWN0LCBjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJp
eCYgbWF0cml4LCBmbG9hdCBvcGFjaXR5LCB1bnNpZ25lZCBleHBvc2VkRWRnZXMpCiB7CiAgICAg
aWYgKCF0ZXh0dXJlLmlzVmFsaWQoKSkKQEAgLTQ4OSwxMSArNDk5LDE5IEBAIHZvaWQgVGV4dHVy
ZU1hcHBlckdMOjpkcmF3VGV4dHVyZShHTHVpbnQgdGV4dHVyZSwgRmxhZ3MgZmxhZ3MsIGNvbnN0
IEludFNpemUmIHRlCiAgICAgaWYgKHVzZUFudGlhbGlhc2luZyB8fCBvcGFjaXR5IDwgMSkKICAg
ICAgICAgZmxhZ3MgfD0gU2hvdWxkQmxlbmQ7CiAKKyAgICBpZiAoY2xpcFN0YWNrKCkuaXNSb3Vu
ZGVkUmVjdENsaXBFbmFibGVkKCkpIHsKKyAgICAgICAgb3B0aW9ucyB8PSBUZXh0dXJlTWFwcGVy
U2hhZGVyUHJvZ3JhbTo6Um91bmRlZFJlY3RDbGlwOworICAgICAgICBmbGFncyB8PSBTaG91bGRC
bGVuZDsKKyAgICB9CisKICAgICBSZWY8VGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW0+IHByb2dy
YW0gPSBkYXRhKCkuZ2V0U2hhZGVyUHJvZ3JhbShvcHRpb25zKTsKIAogICAgIGlmIChmaWx0ZXIp
CiAgICAgICAgIHByZXBhcmVGaWx0ZXJQcm9ncmFtKHByb2dyYW0uZ2V0KCksICpmaWx0ZXIuZ2V0
KCksIGRhdGEoKS5maWx0ZXJJbmZvLT5wYXNzLCB0ZXh0dXJlU2l6ZSwgZmlsdGVyQ29udGVudFRl
eHR1cmVJRCk7CiAKKyAgICBpZiAoY2xpcFN0YWNrKCkuaXNSb3VuZGVkUmVjdENsaXBFbmFibGVk
KCkpCisgICAgICAgIHByZXBhcmVSb3VuZGVkUmVjdENsaXAocHJvZ3JhbS5nZXQoKSwgY2xpcFN0
YWNrKCkucm91bmRlZFJlY3RDb21wb25lbnRzKCksIGNsaXBTdGFjaygpLnJvdW5kZWRSZWN0SW52
ZXJzZVRyYW5zZm9ybUNvbXBvbmVudHMoKSwgY2xpcFN0YWNrKCkucm91bmRlZFJlY3RJbmRleCgp
KTsKKwogICAgIGRyYXdUZXh0dXJlZFF1YWRXaXRoUHJvZ3JhbShwcm9ncmFtLmdldCgpLCB0ZXh0
dXJlLCBmbGFncywgdGV4dHVyZVNpemUsIHRhcmdldFJlY3QsIG1vZGVsVmlld01hdHJpeCwgb3Bh
Y2l0eSk7CiB9CiAKQEAgLTU1MiwxMSArNTcwLDE5IEBAIHZvaWQgVGV4dHVyZU1hcHBlckdMOjpk
cmF3VGV4dHVyZVBsYW5hcllVVihjb25zdCBzdGQ6OmFycmF5PEdMdWludCwgMz4mIHRleHR1cmVz
CiAgICAgaWYgKHVzZUFudGlhbGlhc2luZyB8fCBvcGFjaXR5IDwgMSkKICAgICAgICAgZmxhZ3Mg
fD0gU2hvdWxkQmxlbmQ7CiAKKyAgICBpZiAoY2xpcFN0YWNrKCkuaXNSb3VuZGVkUmVjdENsaXBF
bmFibGVkKCkpIHsKKyAgICAgICAgb3B0aW9ucyB8PSBUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3Jh
bTo6Um91bmRlZFJlY3RDbGlwOworICAgICAgICBmbGFncyB8PSBTaG91bGRCbGVuZDsKKyAgICB9
CisKICAgICBSZWY8VGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW0+IHByb2dyYW0gPSBkYXRhKCku
Z2V0U2hhZGVyUHJvZ3JhbShvcHRpb25zKTsKIAogICAgIGlmIChmaWx0ZXIpCiAgICAgICAgIHBy
ZXBhcmVGaWx0ZXJQcm9ncmFtKHByb2dyYW0uZ2V0KCksICpmaWx0ZXIuZ2V0KCksIGRhdGEoKS5m
aWx0ZXJJbmZvLT5wYXNzLCB0ZXh0dXJlU2l6ZSwgZmlsdGVyQ29udGVudFRleHR1cmVJRCk7CiAK
KyAgICBpZiAoY2xpcFN0YWNrKCkuaXNSb3VuZGVkUmVjdENsaXBFbmFibGVkKCkpCisgICAgICAg
IHByZXBhcmVSb3VuZGVkUmVjdENsaXAocHJvZ3JhbS5nZXQoKSwgY2xpcFN0YWNrKCkucm91bmRl
ZFJlY3RDb21wb25lbnRzKCksIGNsaXBTdGFjaygpLnJvdW5kZWRSZWN0SW52ZXJzZVRyYW5zZm9y
bUNvbXBvbmVudHMoKSwgY2xpcFN0YWNrKCkucm91bmRlZFJlY3RJbmRleCgpKTsKKwogICAgIFZl
Y3RvcjxzdGQ6OnBhaXI8R0x1aW50LCBHTHVpbnQ+ID4gdGV4dHVyZXNBbmRTYW1wbGVycyA9IHsK
ICAgICAgICAgeyB0ZXh0dXJlc1swXSwgcHJvZ3JhbS0+c2FtcGxlcllMb2NhdGlvbigpIH0sCiAg
ICAgICAgIHsgdGV4dHVyZXNbMV0sIHByb2dyYW0tPnNhbXBsZXJVTG9jYXRpb24oKSB9LApAQCAt
NjAyLDExICs2MjgsMTkgQEAgdm9pZCBUZXh0dXJlTWFwcGVyR0w6OmRyYXdUZXh0dXJlU2VtaVBs
YW5hcllVVihjb25zdCBzdGQ6OmFycmF5PEdMdWludCwgMj4mIHRleHQKICAgICBpZiAodXNlQW50
aWFsaWFzaW5nIHx8IG9wYWNpdHkgPCAxKQogICAgICAgICBmbGFncyB8PSBTaG91bGRCbGVuZDsK
IAorICAgIGlmIChjbGlwU3RhY2soKS5pc1JvdW5kZWRSZWN0Q2xpcEVuYWJsZWQoKSkgeworICAg
ICAgICBvcHRpb25zIHw9IFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtOjpSb3VuZGVkUmVjdENs
aXA7CisgICAgICAgIGZsYWdzIHw9IFNob3VsZEJsZW5kOworICAgIH0KKwogICAgIFJlZjxUZXh0
dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbT4gcHJvZ3JhbSA9IGRhdGEoKS5nZXRTaGFkZXJQcm9ncmFt
KG9wdGlvbnMpOwogCiAgICAgaWYgKGZpbHRlcikKICAgICAgICAgcHJlcGFyZUZpbHRlclByb2dy
YW0ocHJvZ3JhbS5nZXQoKSwgKmZpbHRlci5nZXQoKSwgZGF0YSgpLmZpbHRlckluZm8tPnBhc3Ms
IHRleHR1cmVTaXplLCBmaWx0ZXJDb250ZW50VGV4dHVyZUlEKTsKIAorICAgIGlmIChjbGlwU3Rh
Y2soKS5pc1JvdW5kZWRSZWN0Q2xpcEVuYWJsZWQoKSkKKyAgICAgICAgcHJlcGFyZVJvdW5kZWRS
ZWN0Q2xpcChwcm9ncmFtLmdldCgpLCBjbGlwU3RhY2soKS5yb3VuZGVkUmVjdENvbXBvbmVudHMo
KSwgY2xpcFN0YWNrKCkucm91bmRlZFJlY3RJbnZlcnNlVHJhbnNmb3JtQ29tcG9uZW50cygpLCBj
bGlwU3RhY2soKS5yb3VuZGVkUmVjdEluZGV4KCkpOworCiAgICAgVmVjdG9yPHN0ZDo6cGFpcjxH
THVpbnQsIEdMdWludD4gPiB0ZXh0dXJlc0FuZFNhbXBsZXJzID0gewogICAgICAgICB7IHRleHR1
cmVzWzBdLCBwcm9ncmFtLT5zYW1wbGVyWUxvY2F0aW9uKCkgfSwKICAgICAgICAgeyB0ZXh0dXJl
c1sxXSwgcHJvZ3JhbS0+c2FtcGxlclVMb2NhdGlvbigpIH0KQEAgLTY1MCwxMSArNjg0LDE5IEBA
IHZvaWQgVGV4dHVyZU1hcHBlckdMOjpkcmF3VGV4dHVyZVBhY2tlZFlVVihHTHVpbnQgdGV4dHVy
ZSwgY29uc3Qgc3RkOjphcnJheTxHTGZsCiAgICAgaWYgKHVzZUFudGlhbGlhc2luZyB8fCBvcGFj
aXR5IDwgMSkKICAgICAgICAgZmxhZ3MgfD0gU2hvdWxkQmxlbmQ7CiAKKyAgICBpZiAoY2xpcFN0
YWNrKCkuaXNSb3VuZGVkUmVjdENsaXBFbmFibGVkKCkpIHsKKyAgICAgICAgb3B0aW9ucyB8PSBU
ZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbTo6Um91bmRlZFJlY3RDbGlwOworICAgICAgICBmbGFn
cyB8PSBTaG91bGRCbGVuZDsKKyAgICB9CisKICAgICBSZWY8VGV4dHVyZU1hcHBlclNoYWRlclBy
b2dyYW0+IHByb2dyYW0gPSBkYXRhKCkuZ2V0U2hhZGVyUHJvZ3JhbShvcHRpb25zKTsKIAogICAg
IGlmIChmaWx0ZXIpCiAgICAgICAgIHByZXBhcmVGaWx0ZXJQcm9ncmFtKHByb2dyYW0uZ2V0KCks
ICpmaWx0ZXIuZ2V0KCksIGRhdGEoKS5maWx0ZXJJbmZvLT5wYXNzLCB0ZXh0dXJlU2l6ZSwgZmls
dGVyQ29udGVudFRleHR1cmVJRCk7CiAKKyAgICBpZiAoY2xpcFN0YWNrKCkuaXNSb3VuZGVkUmVj
dENsaXBFbmFibGVkKCkpCisgICAgICAgIHByZXBhcmVSb3VuZGVkUmVjdENsaXAocHJvZ3JhbS5n
ZXQoKSwgY2xpcFN0YWNrKCkucm91bmRlZFJlY3RDb21wb25lbnRzKCksIGNsaXBTdGFjaygpLnJv
dW5kZWRSZWN0SW52ZXJzZVRyYW5zZm9ybUNvbXBvbmVudHMoKSwgY2xpcFN0YWNrKCkucm91bmRl
ZFJlY3RJbmRleCgpKTsKKwogICAgIFZlY3RvcjxzdGQ6OnBhaXI8R0x1aW50LCBHTHVpbnQ+ID4g
dGV4dHVyZXNBbmRTYW1wbGVycyA9IHsKICAgICAgICAgeyB0ZXh0dXJlLCBwcm9ncmFtLT5zYW1w
bGVyTG9jYXRpb24oKSB9CiAgICAgfTsKQEAgLTY3Myw5ICs3MTUsMTcgQEAgdm9pZCBUZXh0dXJl
TWFwcGVyR0w6OmRyYXdTb2xpZENvbG9yKGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgY29uc3QgVHJh
bnNmb3JtYXRpb24KICAgICAgICAgZmxhZ3MgfD0gU2hvdWxkQW50aWFsaWFzIHwgKGlzQmxlbmRp
bmdBbGxvd2VkID8gU2hvdWxkQmxlbmQgOiAwKTsKICAgICB9CiAKKyAgICBpZiAoY2xpcFN0YWNr
KCkuaXNSb3VuZGVkUmVjdENsaXBFbmFibGVkKCkpIHsKKyAgICAgICAgb3B0aW9ucyB8PSBUZXh0
dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbTo6Um91bmRlZFJlY3RDbGlwOworICAgICAgICBmbGFncyB8
PSBTaG91bGRCbGVuZDsKKyAgICB9CisKICAgICBSZWY8VGV4dHVyZU1hcHBlclNoYWRlclByb2dy
YW0+IHByb2dyYW0gPSBkYXRhKCkuZ2V0U2hhZGVyUHJvZ3JhbShvcHRpb25zKTsKICAgICBnbFVz
ZVByb2dyYW0ocHJvZ3JhbS0+cHJvZ3JhbUlEKCkpOwogCisgICAgaWYgKGNsaXBTdGFjaygpLmlz
Um91bmRlZFJlY3RDbGlwRW5hYmxlZCgpKQorICAgICAgICBwcmVwYXJlUm91bmRlZFJlY3RDbGlw
KHByb2dyYW0uZ2V0KCksIGNsaXBTdGFjaygpLnJvdW5kZWRSZWN0Q29tcG9uZW50cygpLCBjbGlw
U3RhY2soKS5yb3VuZGVkUmVjdEludmVyc2VUcmFuc2Zvcm1Db21wb25lbnRzKCksIGNsaXBTdGFj
aygpLnJvdW5kZWRSZWN0SW5kZXgoKSk7CisKICAgICBhdXRvIFtyLCBnLCBiLCBhXSA9IHByZW11
bHRpcGxpZWQoY29sb3IudG9TUkdCQUxvc3N5PGZsb2F0PigpKTsKICAgICBnbFVuaWZvcm00Zihw
cm9ncmFtLT5jb2xvckxvY2F0aW9uKCksIHIsIGcsIGIsIGEpOwogICAgIGlmIChhIDwgMSAmJiBp
c0JsZW5kaW5nQWxsb3dlZCkKQEAgLTg4NCwxMCArOTM0LDQxIEBAIGJvb2wgVGV4dHVyZU1hcHBl
ckdMOjpiZWdpblNjaXNzb3JDbGlwKGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiBtb2RlbFZp
ZXdNYXRyCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLXZvaWQgVGV4dHVyZU1hcHBlckdMOjpiZWdp
bkNsaXAoY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmIG1vZGVsVmlld01hdHJpeCwgY29uc3Qg
RmxvYXRSZWN0JiB0YXJnZXRSZWN0KQorYm9vbCBUZXh0dXJlTWFwcGVyR0w6OmJlZ2luUm91bmRl
ZFJlY3RDbGlwKGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiBtb2RlbFZpZXdNYXRyaXgsIGNv
bnN0IEZsb2F0Um91bmRlZFJlY3QmIHRhcmdldFJlY3QpCit7CisgICAgLy8gVGhpcyBpcyBpbXBs
ZW1lbnRlZCBieSB0ZWxsaW5nIHRoZSBmcmFnbWVudCBzaGFkZXIgdG8gY2hlY2sgd2hldGhlciBl
YWNoIHBpeGVsIGlzIGluc2lkZSB0aGUgcm91bmRlZCByZWN0YW5nbGUKKyAgICAvLyBiZWZvcmUg
cGFpbnRpbmcgaXQuCisgICAgLy8KKyAgICAvLyBJbnNpZGUgdGhlIHNoYWRlciwgdGhlIG1hdGgg
dG8gY2hlY2sgd2hldGhlciBhIHBvaW50IGlzIGluc2lkZSB0aGUgcm91bmRlZCByZWN0YW5nbGUg
cmVxdWlyZXMgdGhlIHJlY3RhbmdsZSB0bworICAgIC8vIGJlIGFsaWduZWQgdG8gdGhlIFggYW5k
IFkgYXhpcywgd2hpY2ggaXMgbm90IGd1YXJhbnRlZWQgaWYgdGhlIHRyYW5zZm9ybWF0aW9uIG1h
dHJpeCBpbmNsdWRlcyByb3RhdGlvbnMuIEluIG9yZGVyCisgICAgLy8gdG8gYXZvaWQgdGhpcywg
aW5zdGVhZCBvZiBhcHBseWluZyB0aGUgdHJhbnNmb3JtYXRpb24gdG8gdGhlIHJvdW5kZWQgcmVj
dGFuZ2xlLCB3ZSBjYWxjdWxhdGUgdGhlIGludmVyc2UKKyAgICAvLyBvZiB0aGUgdHJhbnNmb3Jt
YXRpb24gYW5kIGFwcGx5IGl0IHRvIHRoZSBwaXhlbHMgYmVmb3JlIGNoZWNraW5nIHdoZXRoZXIg
dGhleSBhcmUgaW5zaWRlIHRoZSByb3VuZGVkIHJlY3RhbmdsZS4KKyAgICAvLyBUaGlzIHdvcmtz
IGZpbmUgYXMgbG9uZyBhcyB0aGUgdHJhbnNmb3JtYXRpb24gbWF0cml4IGlzIGludmVydGlibGUu
CisgICAgLy8KKyAgICAvLyBUaGVyZSBpcyBhIGxpbWl0IHRvIHRoZSBudW1iZXIgb2Ygcm91bmRl
ZCByZWN0YW5nbGUgY2xpcHBpbmdzIHRoYXQgY2FuIGJlIGRvbmUsIHRoYXQgaGFwcGVucyBiZWNh
dXNlIHRoZSBHTFNMCisgICAgLy8gYXJyYXlzIG11c3QgaGF2ZSBhIHByZWRlZmluZWQgc2l6ZS4g
VGhlIGxpbWl0IGlzIGRlZmluZWQgaW5zaWRlIENsaXBTdGFjaywgYW5kIHRoYXQncyB3aHkgd2Ug
bmVlZCB0byBjYWxsCisgICAgLy8gY2xpcFN0YWNrKCkuaXNSb3VuZGVkUmVjdENsaXBBbGxvd2Vk
KCkgYmVmb3JlIHRyeWluZyB0byBhZGQgYSBuZXcgY2xpcC4KKworICAgIGlmICghdGFyZ2V0UmVj
dC5pc1JvdW5kZWQoKSB8fCAhdGFyZ2V0UmVjdC5pc1JlbmRlcmFibGUoKSB8fCB0YXJnZXRSZWN0
LmlzRW1wdHkoKSB8fCAhbW9kZWxWaWV3TWF0cml4LmlzSW52ZXJ0aWJsZSgpIHx8ICFjbGlwU3Rh
Y2soKS5pc1JvdW5kZWRSZWN0Q2xpcEFsbG93ZWQoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOwor
CisgICAgRmxvYXRRdWFkIHF1YWQgPSBtb2RlbFZpZXdNYXRyaXgucHJvamVjdFF1YWQodGFyZ2V0
UmVjdC5yZWN0KCkpOworICAgIEludFJlY3QgcmVjdCA9IHF1YWQuZW5jbG9zaW5nQm91bmRpbmdC
b3goKTsKKworICAgIGNsaXBTdGFjaygpLmFkZFJvdW5kZWRSZWN0KHRhcmdldFJlY3QsIG1vZGVs
Vmlld01hdHJpeC5pbnZlcnNlKCkudmFsdWUoKSk7CisgICAgY2xpcFN0YWNrKCkuaW50ZXJzZWN0
KHJlY3QpOworICAgIGNsaXBTdGFjaygpLmFwcGx5SWZOZWVkZWQoKTsKKworICAgIHJldHVybiB0
cnVlOworfQorCit2b2lkIFRleHR1cmVNYXBwZXJHTDo6YmVnaW5DbGlwKGNvbnN0IFRyYW5zZm9y
bWF0aW9uTWF0cml4JiBtb2RlbFZpZXdNYXRyaXgsIGNvbnN0IEZsb2F0Um91bmRlZFJlY3QmIHRh
cmdldFJlY3QpCiB7CiAgICAgY2xpcFN0YWNrKCkucHVzaCgpOwotICAgIGlmIChiZWdpblNjaXNz
b3JDbGlwKG1vZGVsVmlld01hdHJpeCwgdGFyZ2V0UmVjdCkpCisgICAgaWYgKGJlZ2luUm91bmRl
ZFJlY3RDbGlwKG1vZGVsVmlld01hdHJpeCwgdGFyZ2V0UmVjdCkpCisgICAgICAgIHJldHVybjsK
KworICAgIGlmIChiZWdpblNjaXNzb3JDbGlwKG1vZGVsVmlld01hdHJpeCwgdGFyZ2V0UmVjdC5y
ZWN0KCkpKQogICAgICAgICByZXR1cm47CiAKICAgICBkYXRhKCkuaW5pdGlhbGl6ZVN0ZW5jaWwo
KTsKQEAgLTkwMiw3ICs5ODMsNyBAQCB2b2lkIFRleHR1cmVNYXBwZXJHTDo6YmVnaW5DbGlwKGNv
bnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiBtb2RlbFZpZXdNYXRyaXgsIGNvbgogICAgIGdsVmVy
dGV4QXR0cmliUG9pbnRlcihwcm9ncmFtLT52ZXJ0ZXhMb2NhdGlvbigpLCAyLCBHTF9GTE9BVCwg
ZmFsc2UsIDAsIDApOwogCiAgICAgVHJhbnNmb3JtYXRpb25NYXRyaXggbWF0cml4KG1vZGVsVmll
d01hdHJpeCk7Ci0gICAgbWF0cml4Lm11bHRpcGx5KFRyYW5zZm9ybWF0aW9uTWF0cml4OjpyZWN0
VG9SZWN0KEZsb2F0UmVjdCgwLCAwLCAxLCAxKSwgdGFyZ2V0UmVjdCkpOworICAgIG1hdHJpeC5t
dWx0aXBseShUcmFuc2Zvcm1hdGlvbk1hdHJpeDo6cmVjdFRvUmVjdChGbG9hdFJlY3QoMCwgMCwg
MSwgMSksIHRhcmdldFJlY3QucmVjdCgpKSk7CiAKICAgICBzdGF0aWMgY29uc3QgVHJhbnNmb3Jt
YXRpb25NYXRyaXggZnVsbFByb2plY3Rpb25NYXRyaXggPSBUcmFuc2Zvcm1hdGlvbk1hdHJpeDo6
cmVjdFRvUmVjdChGbG9hdFJlY3QoMCwgMCwgMSwgMSksIEZsb2F0UmVjdCgtMSwgLTEsIDIsIDIp
KTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFw
L1RleHR1cmVNYXBwZXJHTC5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4
bWFwL1RleHR1cmVNYXBwZXJHTC5oCmluZGV4IDI2NzE3NWUxODQzN2MyN2RkNGFhM2M1YjhlMGYy
NDhiY2VhM2I2YWEuLjM4NzRkN2VlY2IwMWI1OTk4NTA5NWExMmIwYWEwMGJiYjA0N2QzYzcgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJl
TWFwcGVyR0wuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAv
VGV4dHVyZU1hcHBlckdMLmgKQEAgLTc1LDcgKzc1LDcgQEAgcHVibGljOgogCiAgICAgdm9pZCBi
aW5kU3VyZmFjZShCaXRtYXBUZXh0dXJlKiBzdXJmYWNlKSBvdmVycmlkZTsKICAgICBCaXRtYXBU
ZXh0dXJlKiBjdXJyZW50U3VyZmFjZSgpOwotICAgIHZvaWQgYmVnaW5DbGlwKGNvbnN0IFRyYW5z
Zm9ybWF0aW9uTWF0cml4JiwgY29uc3QgRmxvYXRSZWN0Jikgb3ZlcnJpZGU7CisgICAgdm9pZCBi
ZWdpbkNsaXAoY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmLCBjb25zdCBGbG9hdFJvdW5kZWRS
ZWN0Jikgb3ZlcnJpZGU7CiAgICAgdm9pZCBiZWdpblBhaW50aW5nKFBhaW50RmxhZ3MgPSAwKSBv
dmVycmlkZTsKICAgICB2b2lkIGVuZFBhaW50aW5nKCkgb3ZlcnJpZGU7CiAgICAgdm9pZCBlbmRD
bGlwKCkgb3ZlcnJpZGU7CkBAIC0xMDAsNiArMTAwLDcgQEAgcHJpdmF0ZToKICAgICB2b2lkIGRy
YXdFZGdlVHJpYW5nbGVzKFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtJik7CiAKICAgICBib29s
IGJlZ2luU2Npc3NvckNsaXAoY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmLCBjb25zdCBGbG9h
dFJlY3QmKTsKKyAgICBib29sIGJlZ2luUm91bmRlZFJlY3RDbGlwKGNvbnN0IFRyYW5zZm9ybWF0
aW9uTWF0cml4JiwgY29uc3QgRmxvYXRSb3VuZGVkUmVjdCYpOwogICAgIHZvaWQgYmluZERlZmF1
bHRTdXJmYWNlKCk7CiAgICAgQ2xpcFN0YWNrJiBjbGlwU3RhY2soKTsKICAgICBpbmxpbmUgVGV4
dHVyZU1hcHBlckdMRGF0YSYgZGF0YSgpIHsgcmV0dXJuICptX2RhdGE7IH0KZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyTGF5
ZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVN
YXBwZXJMYXllci5jcHAKaW5kZXggYTIzNmE2YTdhODQ5ZTIwMGM3MzkxMGVjNjU4MzM5OGVmNzgx
ZjMxMi4uYzBhNDkxZDIzZTE3NGFlY2JjYmZhMmNjZGE5ZTAwYjEwZjVlMzE3MiAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJM
YXllci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1Rl
eHR1cmVNYXBwZXJMYXllci5jcHAKQEAgLTE5Niw4ICsxOTYsNyBAQCB2b2lkIFRleHR1cmVNYXBw
ZXJMYXllcjo6cGFpbnRTZWxmKGNvbnN0IFRleHR1cmVNYXBwZXJQYWludE9wdGlvbnMmIG9wdGlv
bnMpCiAKICAgICBib29sIHNob3VsZENsaXAgPSBtX3N0YXRlLmNvbnRlbnRzQ2xpcHBpbmdSZWN0
LmlzUm91bmRlZCgpIHx8ICFtX3N0YXRlLmNvbnRlbnRzQ2xpcHBpbmdSZWN0LnJlY3QoKS5jb250
YWlucyhtX3N0YXRlLmNvbnRlbnRzUmVjdCk7CiAgICAgaWYgKHNob3VsZENsaXApIHsKLSAgICAg
ICAgLy8gRklYTUU6IFRleHR1cmVNYXBwZXI6OmJlZ2luQ2xpcCBkb2Vzbid0IHN1cHBvcnQgRmxv
YXRSb3VuZGVkUmVjdCwgc28gd2UgbmVlZCB0byBjb252ZXJ0IG1fc3RhdGUuY29udGVudHNDbGlw
cGluZ1JlY3QgdG8gRmxvYXRSZWN0LgotICAgICAgICBvcHRpb25zLnRleHR1cmVNYXBwZXIuYmVn
aW5DbGlwKHRyYW5zZm9ybSwgbV9zdGF0ZS5jb250ZW50c0NsaXBwaW5nUmVjdC5yZWN0KCkpOwor
ICAgICAgICBvcHRpb25zLnRleHR1cmVNYXBwZXIuYmVnaW5DbGlwKHRyYW5zZm9ybSwgbV9zdGF0
ZS5jb250ZW50c0NsaXBwaW5nUmVjdCk7CiAgICAgfQogCiAgICAgbV9jb250ZW50c0xheWVyLT5w
YWludFRvVGV4dHVyZU1hcHBlcihvcHRpb25zLnRleHR1cmVNYXBwZXIsIG1fc3RhdGUuY29udGVu
dHNSZWN0LCB0cmFuc2Zvcm0sIG9wdGlvbnMub3BhY2l0eSk7CkBAIC0yMzAsNyArMjI5LDcgQEAg
dm9pZCBUZXh0dXJlTWFwcGVyTGF5ZXI6OnBhaW50U2VsZkFuZENoaWxkcmVuKGNvbnN0IFRleHR1
cmVNYXBwZXJQYWludE9wdGlvbnMmIG8KICAgICAgICAgY2xpcFRyYW5zZm9ybS50cmFuc2xhdGUo
b3B0aW9ucy5vZmZzZXQud2lkdGgoKSwgb3B0aW9ucy5vZmZzZXQuaGVpZ2h0KCkpOwogICAgICAg
ICBjbGlwVHJhbnNmb3JtLm11bHRpcGx5KG9wdGlvbnMudHJhbnNmb3JtKTsKICAgICAgICAgY2xp
cFRyYW5zZm9ybS5tdWx0aXBseShtX2xheWVyVHJhbnNmb3Jtcy5jb21iaW5lZCk7Ci0gICAgICAg
IG9wdGlvbnMudGV4dHVyZU1hcHBlci5iZWdpbkNsaXAoY2xpcFRyYW5zZm9ybSwgbGF5ZXJSZWN0
KCkpOworICAgICAgICBvcHRpb25zLnRleHR1cmVNYXBwZXIuYmVnaW5DbGlwKGNsaXBUcmFuc2Zv
cm0sIEZsb2F0Um91bmRlZFJlY3QobGF5ZXJSZWN0KCksIEZsb2F0Um91bmRlZFJlY3Q6OlJhZGlp
KCkpKTsKICAgICAgICAgbV9zdGF0ZS5iYWNrZHJvcExheWVyLT5wYWludFJlY3Vyc2l2ZShvcHRp
b25zKTsKICAgICAgICAgb3B0aW9ucy50ZXh0dXJlTWFwcGVyLmVuZENsaXAoKTsKICAgICB9CkBA
IC0yNDksNyArMjQ4LDcgQEAgdm9pZCBUZXh0dXJlTWFwcGVyTGF5ZXI6OnBhaW50U2VsZkFuZENo
aWxkcmVuKGNvbnN0IFRleHR1cmVNYXBwZXJQYWludE9wdGlvbnMmIG8KICAgICAgICAgY2xpcFRy
YW5zZm9ybS50cmFuc2xhdGUob3B0aW9ucy5vZmZzZXQud2lkdGgoKSwgb3B0aW9ucy5vZmZzZXQu
aGVpZ2h0KCkpOwogICAgICAgICBjbGlwVHJhbnNmb3JtLm11bHRpcGx5KG9wdGlvbnMudHJhbnNm
b3JtKTsKICAgICAgICAgY2xpcFRyYW5zZm9ybS5tdWx0aXBseShtX2xheWVyVHJhbnNmb3Jtcy5j
b21iaW5lZCk7Ci0gICAgICAgIG9wdGlvbnMudGV4dHVyZU1hcHBlci5iZWdpbkNsaXAoY2xpcFRy
YW5zZm9ybSwgbGF5ZXJSZWN0KCkpOworICAgICAgICBvcHRpb25zLnRleHR1cmVNYXBwZXIuYmVn
aW5DbGlwKGNsaXBUcmFuc2Zvcm0sIEZsb2F0Um91bmRlZFJlY3QobGF5ZXJSZWN0KCksIEZsb2F0
Um91bmRlZFJlY3Q6OlJhZGlpKCkpKTsKIAogICAgICAgICAvLyBJZiBhcyBhIHJlc3VsdCBvZiBi
ZWdpbkNsaXAoKSwgdGhlIGNsaXBwaW5nIGFyZWEgaXMgZW1wdHksIGl0IG1lYW5zIHRoYXQgdGhl
IGludGVyc2VjdGlvbiBvZiB0aGUgcHJldmlvdXMKICAgICAgICAgLy8gY2xpcHBpbmcgYXJlYSBh
bmQgdGhlIGN1cnJlbnQgb25lIGRvbid0IGhhdmUgYW55IHBpeGVscyBpbiBjb21tb24uIEluIHRo
aXMgY2FzZSB3ZSBjYW4gc2tpcCBwYWludGluZyB0aGUKQEAgLTQwNSw3ICs0MDQsNyBAQCB2b2lk
IFRleHR1cmVNYXBwZXJMYXllcjo6cGFpbnRVc2luZ092ZXJsYXBSZWdpb25zKGNvbnN0IFRleHR1
cmVNYXBwZXJQYWludE9wdGlvbgogICAgICAgICBpZiAoIXJlY3QuaW50ZXJzZWN0cyhvcHRpb25z
LnRleHR1cmVNYXBwZXIuY2xpcEJvdW5kcygpKSkKICAgICAgICAgICAgIGNvbnRpbnVlOwogCi0g
ICAgICAgIG9wdGlvbnMudGV4dHVyZU1hcHBlci5iZWdpbkNsaXAoVHJhbnNmb3JtYXRpb25NYXRy
aXgoKSwgcmVjdCk7CisgICAgICAgIG9wdGlvbnMudGV4dHVyZU1hcHBlci5iZWdpbkNsaXAoVHJh
bnNmb3JtYXRpb25NYXRyaXgoKSwgRmxvYXRSb3VuZGVkUmVjdChyZWN0LCBGbG9hdFJvdW5kZWRS
ZWN0OjpSYWRpaSgpKSk7CiAgICAgICAgIHBhaW50U2VsZkFuZENoaWxkcmVuV2l0aFJlcGxpY2Eo
b3B0aW9ucyk7CiAgICAgICAgIG9wdGlvbnMudGV4dHVyZU1hcHBlci5lbmRDbGlwKCk7CiAgICAg
fQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1Rl
eHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbS5jcHAKaW5kZXggMjZjMGY0
MmU4NTM5NDY5NjViODdjY2ZkNzkzMjMxMjI2OGMyOTFhYy4uZmY4MWZhYTI2YjA0NzdmYjAzMDAx
MzkwYzY0ODA1YmU2MDY4N2Y1NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtLmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlclNoYWRlclBy
b2dyYW0uY3BwCkBAIC02OCw2ICs2OCw3IEBAIHN0YXRpYyBjb25zdCBjaGFyKiB2ZXJ0ZXhUZW1w
bGF0ZUxUMzIwVmFycyA9CiAgICAgICAgIHZhcnlpbmcgdmVjMiB2X3RleENvb3JkOwogICAgICAg
ICB2YXJ5aW5nIHZlYzIgdl90cmFuc2Zvcm1lZFRleENvb3JkOwogICAgICAgICB2YXJ5aW5nIGZs
b2F0IHZfYW50aWFsaWFzOworICAgICAgICB2YXJ5aW5nIHZlYzQgdl9ub25Qcm9qZWN0ZWRQb3Np
dGlvbjsKICAgICApOwogCiAjaWYgIVVTRShPUEVOR0xfRVMpCkBAIC03OCw2ICs3OSw3IEBAIHN0
YXRpYyBjb25zdCBjaGFyKiB2ZXJ0ZXhUZW1wbGF0ZUdFMzIwVmFycyA9CiAgICAgICAgIG91dCB2
ZWMyIHZfdGV4Q29vcmQ7CiAgICAgICAgIG91dCB2ZWMyIHZfdHJhbnNmb3JtZWRUZXhDb29yZDsK
ICAgICAgICAgb3V0IGZsb2F0IHZfYW50aWFsaWFzOworICAgICAgICBvdXQgdmVjNCB2X25vblBy
b2plY3RlZFBvc2l0aW9uOwogICAgICk7CiAjZW5kaWYKIApAQCAtMTMzLDcgKzEzNSw4IEBAIHN0
YXRpYyBjb25zdCBjaGFyKiB2ZXJ0ZXhUZW1wbGF0ZUNvbW1vbiA9CiAgICAgICAgICAgICB2X3Rl
eENvb3JkID0gcG9zaXRpb247CiAgICAgICAgICAgICB2ZWM0IGNsYW1wZWRQb3NpdGlvbiA9IGNs
YW1wKHZlYzQocG9zaXRpb24sIDAuLCAxLiksIDAuLCAxLik7CiAgICAgICAgICAgICB2X3RyYW5z
Zm9ybWVkVGV4Q29vcmQgPSAodV90ZXh0dXJlU3BhY2VNYXRyaXggKiBjbGFtcGVkUG9zaXRpb24p
Lnh5OwotICAgICAgICAgICAgZ2xfUG9zaXRpb24gPSB1X3Byb2plY3Rpb25NYXRyaXggKiB1X21v
ZGVsVmlld01hdHJpeCAqIHZlYzQocG9zaXRpb24sIDAuLCAxLik7CisgICAgICAgICAgICB2X25v
blByb2plY3RlZFBvc2l0aW9uID0gdV9tb2RlbFZpZXdNYXRyaXggKiB2ZWM0KHBvc2l0aW9uLCAw
LiwgMS4pOworICAgICAgICAgICAgZ2xfUG9zaXRpb24gPSB1X3Byb2plY3Rpb25NYXRyaXggKiB2
X25vblByb2plY3RlZFBvc2l0aW9uOwogICAgICAgICB9CiAgICAgKTsKIApAQCAtMTY4LDYgKzE3
MSwxNiBAQCBzdGF0aWMgY29uc3QgY2hhciogdmVydGV4VGVtcGxhdGVDb21tb24gPQogICAgICAg
ICBHTFNMX0RJUkVDVElWRShkZWZpbmUgU2FtcGxlckV4dGVybmFsT0VTVHlwZSBzYW1wbGVyMkQp
IFwKICAgICBHTFNMX0RJUkVDVElWRShlbmRpZikKIAorLy8gVGhlIG1heCBudW1iZXIgb2Ygc3Rh
Y2tlZCByb3VuZGVkIHJlY3RhbmdsZSBjbGlwcyBhbGxvd2VkIGlzIDEwLCB3aGljaCBpcyBhbHNv
IHRoZQorLy8gbWF4IG51bWJlciBvZiB0cmFuc2Zvcm1zIHRoYXQgd2UgY2FuIGdldC4gV2UgbmVl
ZCAzIGNvbXBvbmVudHMgZm9yIGVhY2ggcm91bmRlZAorLy8gcmVjdGFuZ2xlIHNvIHdlIG5lZWQg
MzAgY29tcG9uZW50cyB0byByZWNlaXZlIHRoZSAxMCByZWN0YW5nbGVzLgorLy8KKy8vIEtlZXAg
dGhpcyBpcyBzeW5jIHdpdGggdGhlIHZhbHVlcyBkZWZpbmVkIGluIENsaXBTdGFjay5oCisjZGVm
aW5lIFJPVU5ERURfUkVDVF9DT05TVEFOVFMgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBH
TFNMX0RJUkVDVElWRShkZWZpbmUgUk9VTkRFRF9SRUNUX01BWF9SRUNUUyAxMCkgXAorICAgIEdM
U0xfRElSRUNUSVZFKGRlZmluZSBST1VOREVEX1JFQ1RfQVJSQVlfU0laRSAzMCkgXAorICAgIEdM
U0xfRElSRUNUSVZFKGRlZmluZSBST1VOREVEX1JFQ1RfSU5WRVJTRV9UUkFOU0ZPUk1fQVJSQVlf
U0laRSAxMCkKKwogLy8gQ29tbW9uIGhlYWRlciBmb3IgYWxsIHZlcnNpb25zLiBXZSBkZWZpbmUg
dGhlIG1hdHJpY2VzIHZhcmlhYmxlcyBoZXJlIHRvIGtlZXAgdGhlIHByZWNpc2lvbgogLy8gZGly
ZWN0aXZlcyBzY29wZTogdGhlIGZpcnN0IG9uZSBhcHBsaWVzIHRvIHRoZSBtYXRyaWNlcyB2YXJp
YWJsZXMgYW5kIHRoZSBuZXh0IG9uZSB0byB0aGUKIC8vIHJlc3Qgb2YgdGhlbS4gVGhlIHByZWNp
c2lvbiBpcyBvbmx5IHVzZWQgaW4gR0xFUy4KQEAgLTE3NSw2ICsxODgsNyBAQCBzdGF0aWMgY29u
c3QgY2hhciogZnJhZ21lbnRUZW1wbGF0ZUhlYWRlckNvbW1vbiA9CiAgICAgUkVDVF9URVhUVVJF
X0RJUkVDVElWRQogICAgIEFOVElBTElBU0lOR19URVhfQ09PUkRfRElSRUNUSVZFCiAgICAgQkxV
Ul9DT05TVEFOVFMKKyAgICBST1VOREVEX1JFQ1RfQ09OU1RBTlRTCiAgICAgT0VTX0VHTF9JTUFH
RV9FWFRFUk5BTF9ESVJFQ1RJVkUKICNpZiBVU0UoT1BFTkdMX0VTKQogICAgIFRFWFRVUkVfU1BB
Q0VfTUFUUklYX1BSRUNJU0lPTl9ESVJFQ1RJVkUKQEAgLTE5OSw2ICsyMTMsNyBAQCBzdGF0aWMg
Y29uc3QgY2hhciogZnJhZ21lbnRUZW1wbGF0ZUxUMzIwVmFycyA9CiAgICAgICAgIHZhcnlpbmcg
ZmxvYXQgdl9hbnRpYWxpYXM7CiAgICAgICAgIHZhcnlpbmcgdmVjMiB2X3RleENvb3JkOwogICAg
ICAgICB2YXJ5aW5nIHZlYzIgdl90cmFuc2Zvcm1lZFRleENvb3JkOworICAgICAgICB2YXJ5aW5n
IHZlYzQgdl9ub25Qcm9qZWN0ZWRQb3NpdGlvbjsKICAgICApOwogCiAjaWYgIVVTRShPUEVOR0xf
RVMpCkBAIC0yMDgsNiArMjIzLDcgQEAgc3RhdGljIGNvbnN0IGNoYXIqIGZyYWdtZW50VGVtcGxh
dGVHRTMyMFZhcnMgPQogICAgICAgICBpbiBmbG9hdCB2X2FudGlhbGlhczsKICAgICAgICAgaW4g
dmVjMiB2X3RleENvb3JkOwogICAgICAgICBpbiB2ZWMyIHZfdHJhbnNmb3JtZWRUZXhDb29yZDsK
KyAgICAgICAgaW4gdmVjNCB2X25vblByb2plY3RlZFBvc2l0aW9uOwogICAgICk7CiAjZW5kaWYK
IApAQCAtMjI2LDYgKzI0Miw5IEBAIHN0YXRpYyBjb25zdCBjaGFyKiBmcmFnbWVudFRlbXBsYXRl
Q29tbW9uID0KICAgICAgICAgdW5pZm9ybSB2ZWMyIHVfc2hhZG93T2Zmc2V0OwogICAgICAgICB1
bmlmb3JtIHZlYzQgdV9jb2xvcjsKICAgICAgICAgdW5pZm9ybSBmbG9hdCB1X2dhdXNzaWFuS2Vy
bmVsW0dBVVNTSUFOX0tFUk5FTF9IQUxGX1dJRFRIXTsKKyAgICAgICAgdW5pZm9ybSBpbnQgdV9y
b3VuZGVkUmVjdE51bWJlcjsKKyAgICAgICAgdW5pZm9ybSB2ZWM0IHVfcm91bmRlZFJlY3RbUk9V
TkRFRF9SRUNUX0FSUkFZX1NJWkVdOworICAgICAgICB1bmlmb3JtIG1hdDQgdV9yb3VuZGVkUmVj
dEludmVyc2VUcmFuc2Zvcm1NYXRyaXhbUk9VTkRFRF9SRUNUX0lOVkVSU0VfVFJBTlNGT1JNX0FS
UkFZX1NJWkVdOwogCiAgICAgICAgIHZvaWQgbm9vcChpbm91dCB2ZWM0IGR1bW15UGFyYW1ldGVy
KSB7IH0KICAgICAgICAgdm9pZCBub29wKGlub3V0IHZlYzQgZHVtbXlQYXJhbWV0ZXIsIHZlYzIg
dGV4Q29vcmQpIHsgfQpAQCAtMzkwLDYgKzQwOSw3MCBAQCBzdGF0aWMgY29uc3QgY2hhciogZnJh
Z21lbnRUZW1wbGF0ZUNvbW1vbiA9CiAKICAgICAgICAgdm9pZCBhcHBseVNvbGlkQ29sb3IoaW5v
dXQgdmVjNCBjb2xvcikgeyBjb2xvciAqPSB1X2NvbG9yOyB9CiAKKyAgICAgICAgZmxvYXQgZWxs
aXBzaXNEaXN0KHZlYzIgcCwgdmVjMiByYWRpdXMpCisgICAgICAgIHsKKyAgICAgICAgICAgIGlm
IChyYWRpdXMgPT0gdmVjMigwLCAwKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gMC4wOworCisg
ICAgICAgICAgICB2ZWMyIHAwID0gcCAvIHJhZGl1czsKKyAgICAgICAgICAgIHZlYzIgcDEgPSAy
LjAgKiBwMCAvIHJhZGl1czsKKworICAgICAgICAgICAgcmV0dXJuIChkb3QocDAsIHAwKSAtIDEu
MCkgLyBsZW5ndGggKHAxKTsKKyAgICAgICAgfQorCisgICAgICAgIGZsb2F0IGVsbGlwc2lzQ292
ZXJhZ2UodmVjMiBwb2ludCwgdmVjMiBjZW50ZXIsIHZlYzIgcmFkaXVzKQorICAgICAgICB7Cisg
ICAgICAgICAgICBmbG9hdCBkID0gZWxsaXBzaXNEaXN0KHBvaW50IC0gY2VudGVyLCByYWRpdXMp
OworICAgICAgICAgICAgcmV0dXJuIGNsYW1wKDAuNSAtIGQsIDAuMCwgMS4wKTsKKyAgICAgICAg
fQorCisgICAgICAgIGZsb2F0IHJvdW5kZWRSZWN0Q292ZXJhZ2UodmVjMiBwLCBpbnQgaW5kZXgp
CisgICAgICAgIHsKKyAgICAgICAgICAgIHZlYzQgYm91bmRzID0gdmVjNCh1X3JvdW5kZWRSZWN0
W2luZGV4XS54eSwgdV9yb3VuZGVkUmVjdFtpbmRleF0ueHkgKyB1X3JvdW5kZWRSZWN0W2luZGV4
XS56dyk7CisKKyAgICAgICAgICAgIGlmIChwLnggPCBib3VuZHMueCB8fCBwLnkgPCBib3VuZHMu
eSB8fCBwLnggPj0gYm91bmRzLnogfHwgcC55ID49IGJvdW5kcy53KQorICAgICAgICAgICAgICAg
IHJldHVybiAwLjA7CisKKyAgICAgICAgICAgIHZlYzIgdG9wTGVmdFJhZGlpID0gdV9yb3VuZGVk
UmVjdFtpbmRleCArIDFdLnh5OworICAgICAgICAgICAgdmVjMiB0b3BSaWdodFJhZGlpID0gdV9y
b3VuZGVkUmVjdFtpbmRleCArIDFdLnp3OworICAgICAgICAgICAgdmVjMiBib3R0b21MZWZ0UmFk
aWkgPSB1X3JvdW5kZWRSZWN0W2luZGV4ICsgMl0ueHk7CisgICAgICAgICAgICB2ZWMyIGJvdHRv
bVJpZ2h0UmFkaWkgPSB1X3JvdW5kZWRSZWN0W2luZGV4ICsgMl0uenc7CisKKyAgICAgICAgICAg
IHZlYzIgdG9wTGVmdENlbnRlciA9IGJvdW5kcy54eSArIHRvcExlZnRSYWRpaTsKKyAgICAgICAg
ICAgIHZlYzIgdG9wUmlnaHRDZW50ZXIgPSBib3VuZHMuenkgKyAodG9wUmlnaHRSYWRpaSAqIHZl
YzIoLTEsIDEpKTsKKyAgICAgICAgICAgIHZlYzIgYm90dG9tTGVmdENlbnRlciA9IGJvdW5kcy54
dyArIChib3R0b21MZWZ0UmFkaWkgKiB2ZWMyKDEsIC0xKSk7CisgICAgICAgICAgICB2ZWMyIGJv
dHRvbVJpZ2h0Q2VudGVyID0gYm91bmRzLnp3ICsgKGJvdHRvbVJpZ2h0UmFkaWkgKiB2ZWMyKC0x
LCAtMSkpOworCisgICAgICAgICAgICBpZiAocC54IDwgdG9wTGVmdENlbnRlci54ICYmIHAueSA8
IHRvcExlZnRDZW50ZXIueSkKKyAgICAgICAgICAgICAgICByZXR1cm4gZWxsaXBzaXNDb3ZlcmFn
ZShwLCB0b3BMZWZ0Q2VudGVyLCB0b3BMZWZ0UmFkaWkpOworCisgICAgICAgICAgICBpZiAocC54
ID4gdG9wUmlnaHRDZW50ZXIueCAmJiBwLnkgPCB0b3BSaWdodENlbnRlci55KQorICAgICAgICAg
ICAgICAgIHJldHVybiBlbGxpcHNpc0NvdmVyYWdlKHAsIHRvcFJpZ2h0Q2VudGVyLCB0b3BSaWdo
dFJhZGlpKTsKKworICAgICAgICAgICAgaWYgKHAueCA8IGJvdHRvbUxlZnRDZW50ZXIueCAmJiBw
LnkgPiBib3R0b21MZWZ0Q2VudGVyLnkpCisgICAgICAgICAgICAgICAgcmV0dXJuIGVsbGlwc2lz
Q292ZXJhZ2UocCwgYm90dG9tTGVmdENlbnRlciwgYm90dG9tTGVmdFJhZGlpKTsKKworICAgICAg
ICAgICAgaWYgKHAueCA+IGJvdHRvbVJpZ2h0Q2VudGVyLnggJiYgcC55ID4gYm90dG9tUmlnaHRD
ZW50ZXIueSkKKyAgICAgICAgICAgICAgICByZXR1cm4gZWxsaXBzaXNDb3ZlcmFnZShwLCBib3R0
b21SaWdodENlbnRlciwgYm90dG9tUmlnaHRSYWRpaSk7CisKKyAgICAgICAgICAgIHJldHVybiAx
LjA7CisgICAgICAgIH0KKworICAgICAgICB2b2lkIGFwcGx5Um91bmRlZFJlY3RDbGlwKGlub3V0
IHZlYzQgY29sb3IpCisgICAgICAgIHsKKyAgICAgICAgICAgIC8vIFRoaXMgd29ya3MgYnkgY2hl
Y2tpbmcgd2hldGhlciB0aGUgZnJhZ21lbnQgcG9zaXRpb24sIG9uY2UgdGhlIHRyYW5zZm9ybSBp
cyBhcHBsaWVkLAorICAgICAgICAgICAgLy8gaXMgaW5zaWRlIHRoZSBkZWZpbmVkIHJvdW5kZWQg
cmVjdGFuZ2xlIG9yIG5vdC4KKyAgICAgICAgICAgIC8vCisgICAgICAgICAgICAvLyBXZSBjYW4n
dCB1c2UgZ2xfZnJhZ0Nvb3JkIGZvciB0aGUgZnJhZ21lbnQgcG9zaXRpb24gYmVjYXVzZSB0aGF0
cyB0aGUgcHJvamVjdGVkIHBvaW50CisgICAgICAgICAgICAvLyBhbmQgdGhlIHByb2plY3Rpb24g
c2NyZXdzIHRoZSBaIGNvbXBvbmVudC4gV2UgbmVlZCB0aGUgcmVhbCAzRCBwb3NpdGlvbiB0aGF0
IGNvbWVzIGZyb20KKyAgICAgICAgICAgIC8vIHRoZSBub25Qcm9qZWN0ZWRQb3NpdGlvbiB2YXJp
YWJsZS4KKyAgICAgICAgICAgIGludCBuUmVjdHMgPSBtaW4oUk9VTkRFRF9SRUNUX01BWF9SRUNU
UywgdV9yb3VuZGVkUmVjdE51bWJlcik7CisgICAgICAgICAgICBmb3IgKGludCByZWN0SW5kZXgg
PSAwOyByZWN0SW5kZXggPCBuUmVjdHM7IHJlY3RJbmRleCsrKSB7CisgICAgICAgICAgICAgICAg
dmVjNCBmcmFnQ29vcmQgPSB1X3JvdW5kZWRSZWN0SW52ZXJzZVRyYW5zZm9ybU1hdHJpeFtyZWN0
SW5kZXhdICogdl9ub25Qcm9qZWN0ZWRQb3NpdGlvbjsKKyAgICAgICAgICAgICAgICBjb2xvciAq
PSByb3VuZGVkUmVjdENvdmVyYWdlKGZyYWdDb29yZC54eSwgcmVjdEluZGV4ICogMyk7CisgICAg
ICAgICAgICB9CisgICAgICAgIH0KKwogICAgICAgICB2b2lkIG1haW4odm9pZCkKICAgICAgICAg
ewogICAgICAgICAgICAgdmVjNCBjb2xvciA9IHZlYzQoMS4sIDEuLCAxLiwgMS4pOwpAQCAtNDE1
LDYgKzQ5OCw3IEBAIHN0YXRpYyBjb25zdCBjaGFyKiBmcmFnbWVudFRlbXBsYXRlQ29tbW9uID0K
ICAgICAgICAgICAgIGFwcGx5QWxwaGFCbHVySWZOZWVkZWQoY29sb3IsIHRleENvb3JkKTsKICAg
ICAgICAgICAgIGFwcGx5Q29udGVudFRleHR1cmVJZk5lZWRlZChjb2xvciwgdGV4Q29vcmQpOwog
ICAgICAgICAgICAgYXBwbHlUZXh0dXJlRXh0ZXJuYWxPRVNJZk5lZWRlZChjb2xvciwgdGV4Q29v
cmQpOworICAgICAgICAgICAgYXBwbHlSb3VuZGVkUmVjdENsaXBJZk5lZWRlZChjb2xvcik7CiAg
ICAgICAgICAgICBnbF9GcmFnQ29sb3IgPSBjb2xvcjsKICAgICAgICAgfQogICAgICk7CkBAIC00
NDgsNiArNTMyLDcgQEAgUmVmPFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtPiBUZXh0dXJlTWFw
cGVyU2hhZGVyUHJvZ3JhbTo6Y3JlYXRlKFRleHR1cmVNYXBwZXIKICAgICBTRVRfQVBQTElFUl9G
Uk9NX09QVElPTlMoQ29udGVudFRleHR1cmUpOwogICAgIFNFVF9BUFBMSUVSX0ZST01fT1BUSU9O
UyhNYW51YWxSZXBlYXQpOwogICAgIFNFVF9BUFBMSUVSX0ZST01fT1BUSU9OUyhUZXh0dXJlRXh0
ZXJuYWxPRVMpOworICAgIFNFVF9BUFBMSUVSX0ZST01fT1BUSU9OUyhSb3VuZGVkUmVjdENsaXAp
OwogCiAgICAgU3RyaW5nQnVpbGRlciB2ZXJ0ZXhTaGFkZXJCdWlsZGVyOwogCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlclNo
YWRlclByb2dyYW0uaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9U
ZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbS5oCmluZGV4IGZmODM2NDhlNzBlZDQ5YzgzOTgxYTQy
OGU3MzBmMDE1ZjE3ZmM2YjEuLmQ2YWM1MDE4MjE3MjY3N2Q2MDExMmEwMmU0ZjhkNzVjNTcwMGI1
MTMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9U
ZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbS5oCkBAIC00OCw2ICs0
OCw5IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICBtYWNybyhnYXVzc2lhbktlcm5lbCkgXAog
ICAgIG1hY3JvKGJsdXJSYWRpdXMpIFwKICAgICBtYWNybyhzaGFkb3dPZmZzZXQpIFwKKyAgICBt
YWNybyhyb3VuZGVkUmVjdE51bWJlcikgXAorICAgIG1hY3JvKHJvdW5kZWRSZWN0KSBcCisgICAg
bWFjcm8ocm91bmRlZFJlY3RJbnZlcnNlVHJhbnNmb3JtTWF0cml4KSBcCiAKICNkZWZpbmUgVEVY
TUFQX1NBTVBMRVJfVkFSSUFCTEVTKG1hY3JvKSBcCiAgICAgbWFjcm8oc2FtcGxlcikgXApAQCAt
OTksNiArMTAyLDcgQEAgcHVibGljOgogICAgICAgICBUZXh0dXJlTlYyMSAgICAgID0gMUwgPDwg
MjAsCiAgICAgICAgIFRleHR1cmVQYWNrZWRZVVYgPSAxTCA8PCAyMSwKICAgICAgICAgVGV4dHVy
ZUV4dGVybmFsT0VTID0gMUwgPDwgMjIsCisgICAgICAgIFJvdW5kZWRSZWN0Q2xpcCAgPSAxTCA8
PCAyMywKICAgICB9OwogCiAgICAgZW51bSBjbGFzcyBWYXJpYWJsZUlEIHsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJLaXQvU2hhcmVkL0Nvb3JkaW5hdGVkR3JhcGhpY3MvQ29vcmRpbmF0ZWRHcmFw
aGljc1NjZW5lLmNwcCBiL1NvdXJjZS9XZWJLaXQvU2hhcmVkL0Nvb3JkaW5hdGVkR3JhcGhpY3Mv
Q29vcmRpbmF0ZWRHcmFwaGljc1NjZW5lLmNwcAppbmRleCBjNmUzM2ExNjc2Zjc3NjFlM2M3ZTMx
MDYzMjY3NzY5MTJlOWVmOGQ0Li5hZjI4Zjc2NThlYzg0OTk3NzZlNzVlNmZjNjY1MzQxNjU5ZTBm
M2E0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9Db29yZGluYXRlZEdyYXBoaWNz
L0Nvb3JkaW5hdGVkR3JhcGhpY3NTY2VuZS5jcHAKKysrIGIvU291cmNlL1dlYktpdC9TaGFyZWQv
Q29vcmRpbmF0ZWRHcmFwaGljcy9Db29yZGluYXRlZEdyYXBoaWNzU2NlbmUuY3BwCkBAIC03MSw3
ICs3MSw3IEBAIHZvaWQgQ29vcmRpbmF0ZWRHcmFwaGljc1NjZW5lOjpwYWludFRvQ3VycmVudEdM
Q29udGV4dChjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpCiAgICAgY3VycmVudFJvb3RMYXllci0+
c2V0VGV4dHVyZU1hcHBlcihtX3RleHR1cmVNYXBwZXIuZ2V0KCkpOwogICAgIGJvb2wgc2NlbmVI
YXNSdW5uaW5nQW5pbWF0aW9ucyA9IGN1cnJlbnRSb290TGF5ZXItPmFwcGx5QW5pbWF0aW9uc1Jl
Y3Vyc2l2ZWx5KE1vbm90b25pY1RpbWU6Om5vdygpKTsKICAgICBtX3RleHR1cmVNYXBwZXItPmJl
Z2luUGFpbnRpbmcoUGFpbnRGbGFncyk7Ci0gICAgbV90ZXh0dXJlTWFwcGVyLT5iZWdpbkNsaXAo
VHJhbnNmb3JtYXRpb25NYXRyaXgoKSwgY2xpcFJlY3QpOworICAgIG1fdGV4dHVyZU1hcHBlci0+
YmVnaW5DbGlwKFRyYW5zZm9ybWF0aW9uTWF0cml4KCksIEZsb2F0Um91bmRlZFJlY3QoY2xpcFJl
Y3QsIEZsb2F0Um91bmRlZFJlY3Q6OlJhZGlpKCkpKTsKIAogICAgIGlmIChjdXJyZW50Um9vdExh
eWVyLT50cmFuc2Zvcm0oKSAhPSBtYXRyaXgpCiAgICAgICAgIGN1cnJlbnRSb290TGF5ZXItPnNl
dFRyYW5zZm9ybShtYXRyaXgpOwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>412093</attachid>
            <date>2020-10-22 06:47:52 -0700</date>
            <delta_ts>2020-10-23 03:13:39 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-174457-20201022154751.patch</filename>
            <type>text/plain</type>
            <size>33551</size>
            <attacher name="Miguel Gomez">magomez</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjY4ODU1CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggY2UzZTlkZDAwM2EyYmJk
YmM1YzZmNjQ3YjJkMDU2ODk4YjNhZDAyNi4uOWVjMjFkOWNkNzc4ZDUzMmNiN2NmOTAxZDQ5NDdh
NDBjMTQyNjEyNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQ3IEBACisyMDIwLTEwLTIyICBNaWd1
ZWwgR29tZXogIDxtYWdvbWV6QGlnYWxpYS5jb20+CisKKyAgICAgICAgW0dUS11bV1BFXSBJbXBs
ZW1lbnQgYW50aWFsaWFzZWQgcm91bmRlZCByZWN0YW5nbGUgY2xpcHBpbmcgaW4gVGV4dHVyZU1h
cHBlcgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTc0
NDU3CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgSW1w
bGVtZW50IHJvdW5kZWQgcmVjdGFuZ2xlIGNsaXBwaW5nIGluIFRleHR1cmVNYXBwZXJHTCwgc3Vw
cG9ydGluZyB1cCB0byAxMCBzaW11bHRhbmVvdXMKKyAgICAgICAgcm91bmRlZCByZWN0YW5nbGUg
Y2xpcHMuIFRleHR1cmVNYXBwZXI6OmJlZ2luQ2xpcCgpIG5vdyByZWNlaXZlcyBhIHJvdW5kZWQg
cmVjdGFuZ2xlLCBhbmQKKyAgICAgICAgaXQgYXBwbGllcyB0aGUgYXBwcm9wcmlhdGUgY2xpcHBp
bmcgbWV0aG9kIGFzIHJlcXVpcmVkLgorCisgICAgICAgIFRoZSByb3VuZGVkIHJlY3RhbmdsZSBj
bGlwIGltcGxlbWVudGF0aW9uIHVzZXMgdGhlIGZyYWdtZW50IHNoYWRlciB0byBjYWxjdWxhdGUg
d2hldGhlcgorICAgICAgICBlYWNoIHBpeGVsIGlzIGluc2lkZSB0aGUgZGVmaW5lZCByb3VuZGVk
IHJlY3RhbmdsZXMsIGFuZCBwYWludHMgb3Igc2tpcHMgaXQgYXMgbmVlZGVkLgorCisgICAgICAg
IENvdmVyZWQgYnkgZXhpc3RlbnQgdGVzdHMuCisKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGlj
cy90ZXhtYXAvQ2xpcFN0YWNrLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNsaXBTdGFjazo6YWRk
Um91bmRlZFJlY3QpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9DbGlwU3Rh
Y2suaDoKKyAgICAgICAgKFdlYkNvcmU6OkNsaXBTdGFjazo6U3RhdGU6OlN0YXRlKToKKyAgICAg
ICAgKFdlYkNvcmU6OkNsaXBTdGFjazo6cm91bmRlZFJlY3RDb21wb25lbnRzIGNvbnN0KToKKyAg
ICAgICAgKFdlYkNvcmU6OkNsaXBTdGFjazo6cm91bmRlZFJlY3RJbnZlcnNlVHJhbnNmb3JtQ29t
cG9uZW50cyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpDbGlwU3RhY2s6OnJvdW5kZWRSZWN0
SW5kZXggY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6Q2xpcFN0YWNrOjppc1JvdW5kZWRSZWN0
Q2xpcEVuYWJsZWQgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6Q2xpcFN0YWNrOjppc1JvdW5k
ZWRSZWN0Q2xpcEFsbG93ZWQgY29uc3QpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3Rl
eG1hcC9UZXh0dXJlTWFwcGVyLmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFw
L1RleHR1cmVNYXBwZXJHTC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpwcmVwYXJlUm91bmRlZFJl
Y3RDbGlwKToKKyAgICAgICAgKFdlYkNvcmU6OlRleHR1cmVNYXBwZXJHTDo6ZHJhd1RleHR1cmUp
OgorICAgICAgICAoV2ViQ29yZTo6VGV4dHVyZU1hcHBlckdMOjpkcmF3VGV4dHVyZVBsYW5hcllV
Vik6CisgICAgICAgIChXZWJDb3JlOjpUZXh0dXJlTWFwcGVyR0w6OmRyYXdUZXh0dXJlU2VtaVBs
YW5hcllVVik6CisgICAgICAgIChXZWJDb3JlOjpUZXh0dXJlTWFwcGVyR0w6OmRyYXdUZXh0dXJl
UGFja2VkWVVWKToKKyAgICAgICAgKFdlYkNvcmU6OlRleHR1cmVNYXBwZXJHTDo6ZHJhd1NvbGlk
Q29sb3IpOgorICAgICAgICAoV2ViQ29yZTo6VGV4dHVyZU1hcHBlckdMOjpiZWdpblJvdW5kZWRS
ZWN0Q2xpcCk6CisgICAgICAgIChXZWJDb3JlOjpUZXh0dXJlTWFwcGVyR0w6OmJlZ2luQ2xpcCk6
CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJHTC5oOgor
ICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyTGF5ZXIuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6VGV4dHVyZU1hcHBlckxheWVyOjpwYWludFNlbGYpOgorICAg
ICAgICAoV2ViQ29yZTo6VGV4dHVyZU1hcHBlckxheWVyOjpwYWludFNlbGZBbmRDaGlsZHJlbik6
CisgICAgICAgIChXZWJDb3JlOjpUZXh0dXJlTWFwcGVyTGF5ZXI6OnBhaW50VXNpbmdPdmVybGFw
UmVnaW9ucyk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBw
ZXJTaGFkZXJQcm9ncmFtLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlRleHR1cmVNYXBwZXJTaGFk
ZXJQcm9ncmFtOjpjcmVhdGUpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9U
ZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbS5oOgorCiAyMDIwLTEwLTIxICBBbGV4IENocmlzdGVu
c2VuICA8YWNocmlzdGVuc2VuQHdlYmtpdC5vcmc+CiAKICAgICAgICAgVXBkYXRlIGFuZCBwYXNz
IG5ldyBVUkwgd2ViIHBsYXRmb3JtIHRlc3RzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCmluZGV4IGU4YjQwNjA1MWJhZDMyNzVk
YjAxOTkxODQxZDg1MmZmM2MxYTllYWEuLjcxYmMzNWQzYjg4YWRlNjM1M2UxNjY0MzJjNzU3MThl
MWM5NTM0MDUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCisrKyBiL1NvdXJj
ZS9XZWJLaXQvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTUgQEAKKzIwMjAtMTAtMjIgIE1pZ3VlbCBH
b21leiAgPG1hZ29tZXpAaWdhbGlhLmNvbT4KKworICAgICAgICBbR1RLXVtXUEVdIEltcGxlbWVu
dCBhbnRpYWxpYXNlZCByb3VuZGVkIHJlY3RhbmdsZSBjbGlwcGluZyBpbiBUZXh0dXJlTWFwcGVy
CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNzQ0NTcK
KworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBVc2UgdGhl
IG5ldyBUZXh0dXJlTWFwcGVyOjpiZWdpbkNsaXAoKSBtZXRob2QgdGhhdCByZWNlaXZlcyBhIEZs
b2F0Um91bmRlZFJlY3QuCisKKyAgICAgICAgKiBTaGFyZWQvQ29vcmRpbmF0ZWRHcmFwaGljcy9D
b29yZGluYXRlZEdyYXBoaWNzU2NlbmUuY3BwOgorICAgICAgICAoV2ViS2l0OjpDb29yZGluYXRl
ZEdyYXBoaWNzU2NlbmU6OnBhaW50VG9DdXJyZW50R0xDb250ZXh0KToKKwogMjAyMC0xMC0yMSAg
Unlvc3VrZSBOaXdhICA8cm5pd2FAd2Via2l0Lm9yZz4KIAogICAgICAgICBNb3ZlIGZ1bmN0aW9u
IGRlZmluaXRpb25zIGluIEpTSVBDQmluZGluZy5oIGludG8gY3BwIGZpbGUKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9DbGlwU3RhY2suY3BwIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL0NsaXBTdGFjay5jcHAKaW5k
ZXggZGE4NDBiZjRmN2UyMTI5YjEyM2M4ZDE3ZTkyOGIwMDU2YmFjZDk3My4uZmZjNGM5ZTVjMzFi
MDNjZTU3ZjQ5NDkyZjE4OTk1MTBkODY0OGZlZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL0NsaXBTdGFjay5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL0NsaXBTdGFjay5jcHAKQEAgLTYyLDYgKzYyLDMz
IEBAIHZvaWQgQ2xpcFN0YWNrOjpzZXRTdGVuY2lsSW5kZXgoaW50IHN0ZW5jaWxJbmRleCkKICAg
ICBjbGlwU3RhdGVEaXJ0eSA9IHRydWU7CiB9CiAKK3ZvaWQgQ2xpcFN0YWNrOjphZGRSb3VuZGVk
UmVjdChjb25zdCBGbG9hdFJvdW5kZWRSZWN0JiByb3VuZGVkUmVjdCwgY29uc3QgVHJhbnNmb3Jt
YXRpb25NYXRyaXgmIG1hdHJpeCkKK3sKKyAgICBpZiAoY2xpcFN0YXRlLnJvdW5kZWRSZWN0SW5k
ZXggPj0gc19yb3VuZGVkUmVjdE1heENsaXBzQWxsb3dlZCkKKyAgICAgICAgcmV0dXJuOworCisg
ICAgLy8gQ29weSB0aGUgUm91bmRlZFJlY3QgY29tcG9uZW50cyB0byB0aGUgYXBwcm9wcmlhdGUg
cG9zaXRpb24gaW4gdGhlIGFycmF5LgorICAgIGludCBiYXNlUG9zaXRpb24gPSBjbGlwU3RhdGUu
cm91bmRlZFJlY3RJbmRleCAqIHNfcm91bmRlZFJlY3RDb21wb25lbnRzUGVyUmVjdDsKKyAgICBt
X3JvdW5kZWRSZWN0Q29tcG9uZW50c1tiYXNlUG9zaXRpb25dID0gcm91bmRlZFJlY3QucmVjdCgp
LngoKTsKKyAgICBtX3JvdW5kZWRSZWN0Q29tcG9uZW50c1tiYXNlUG9zaXRpb24gKyAxXSA9IHJv
dW5kZWRSZWN0LnJlY3QoKS55KCk7CisgICAgbV9yb3VuZGVkUmVjdENvbXBvbmVudHNbYmFzZVBv
c2l0aW9uICsgMl0gPSByb3VuZGVkUmVjdC5yZWN0KCkud2lkdGgoKTsKKyAgICBtX3JvdW5kZWRS
ZWN0Q29tcG9uZW50c1tiYXNlUG9zaXRpb24gKyAzXSA9IHJvdW5kZWRSZWN0LnJlY3QoKS5oZWln
aHQoKTsKKyAgICBtX3JvdW5kZWRSZWN0Q29tcG9uZW50c1tiYXNlUG9zaXRpb24gKyA0XSA9IHJv
dW5kZWRSZWN0LnJhZGlpKCkudG9wTGVmdCgpLndpZHRoKCk7CisgICAgbV9yb3VuZGVkUmVjdENv
bXBvbmVudHNbYmFzZVBvc2l0aW9uICsgNV0gPSByb3VuZGVkUmVjdC5yYWRpaSgpLnRvcExlZnQo
KS5oZWlnaHQoKTsKKyAgICBtX3JvdW5kZWRSZWN0Q29tcG9uZW50c1tiYXNlUG9zaXRpb24gKyA2
XSA9IHJvdW5kZWRSZWN0LnJhZGlpKCkudG9wUmlnaHQoKS53aWR0aCgpOworICAgIG1fcm91bmRl
ZFJlY3RDb21wb25lbnRzW2Jhc2VQb3NpdGlvbiArIDddID0gcm91bmRlZFJlY3QucmFkaWkoKS50
b3BSaWdodCgpLmhlaWdodCgpOworICAgIG1fcm91bmRlZFJlY3RDb21wb25lbnRzW2Jhc2VQb3Np
dGlvbiArIDhdID0gcm91bmRlZFJlY3QucmFkaWkoKS5ib3R0b21MZWZ0KCkud2lkdGgoKTsKKyAg
ICBtX3JvdW5kZWRSZWN0Q29tcG9uZW50c1tiYXNlUG9zaXRpb24gKyA5XSA9IHJvdW5kZWRSZWN0
LnJhZGlpKCkuYm90dG9tTGVmdCgpLmhlaWdodCgpOworICAgIG1fcm91bmRlZFJlY3RDb21wb25l
bnRzW2Jhc2VQb3NpdGlvbiArIDEwXSA9IHJvdW5kZWRSZWN0LnJhZGlpKCkuYm90dG9tUmlnaHQo
KS53aWR0aCgpOworICAgIG1fcm91bmRlZFJlY3RDb21wb25lbnRzW2Jhc2VQb3NpdGlvbiArIDEx
XSA9IHJvdW5kZWRSZWN0LnJhZGlpKCkuYm90dG9tUmlnaHQoKS5oZWlnaHQoKTsKKworICAgIC8v
IENvcHkgdGhlIFRyYW5zZm9ybWF0aW9uTWF0cml4IGNvbXBvbmVudHMgdG8gdGhlIGFwcHJvcHJp
YXRlIHBvc2l0aW9uIGluIHRoZSBhcnJheS4KKyAgICBiYXNlUG9zaXRpb24gPSBjbGlwU3RhdGUu
cm91bmRlZFJlY3RJbmRleCAqIHNfcm91bmRlZFJlY3RJbnZlcnNlVHJhbnNmb3JtQ29tcG9uZW50
c1BlclJlY3Q7CisgICAgbWVtY3B5KG1fcm91bmRlZFJlY3RJbnZlcnNlVHJhbnNmb3JtQ29tcG9u
ZW50cy5kYXRhKCkgKyBiYXNlUG9zaXRpb24sIG1hdHJpeC50b0NvbHVtbk1ham9yRmxvYXRBcnJh
eSgpLmRhdGEoKSwgc19yb3VuZGVkUmVjdEludmVyc2VUcmFuc2Zvcm1Db21wb25lbnRzUGVyUmVj
dCAqIHNpemVvZihmbG9hdCkpOworCisgICAgY2xpcFN0YXRlLnJvdW5kZWRSZWN0SW5kZXgrKzsK
K30KKwogdm9pZCBDbGlwU3RhY2s6OmFwcGx5KCkKIHsKICAgICBpZiAoY2xpcFN0YXRlLnNjaXNz
b3JCb3guaXNFbXB0eSgpKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvdGV4bWFwL0NsaXBTdGFjay5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvdGV4bWFwL0NsaXBTdGFjay5oCmluZGV4IDI2N2NlNDA5NjAxMmZiMTdlNzY4ZTkxYzI1ZmEw
OTkwZDRlMDk5ZTkuLjQ4MGFkMzFmMDI4NmVhYjNmOTQzODdjNTcxNTIzMTFiYThmM2Q5YzUgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9DbGlwU3Rh
Y2suaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvQ2xpcFN0
YWNrLmgKQEAgLTIxLDIyICsyMSw0MSBAQAogI2lmbmRlZiBDbGlwU3RhY2tfaAogI2RlZmluZSBD
bGlwU3RhY2tfaAogCisjaW5jbHVkZSAiRmxvYXRSb3VuZGVkUmVjdC5oIgogI2luY2x1ZGUgIklu
dFJlY3QuaCIKICNpbmNsdWRlICJJbnRTaXplLmgiCisjaW5jbHVkZSAiVHJhbnNmb3JtYXRpb25N
YXRyaXguaCIKICNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsK
IAorLy8gQmVjYXVzZSBHTFNMIHVuaWZvcm0gYXJyYXlzIG5lZWQgdG8gaGF2ZSBhIGRlZmluZWQg
c2l6ZSwgd2UgbmVlZCB0byBwdXQgYSBsaW1pdCB0byB0aGUgbnVtYmVyIG9mIHNpbXVsdGFuZW91
cworLy8gcm91bmRlZCByZWN0YW5nbGUgY2xpcHMgdGhhdCB3ZSdyZSBnb2luZyB0byBhbGxvdy4g
Q3VycmVudGx5IHRoaXMgaXMgZGVmaW5lZCB0byAxMC4KKy8vIFRoaXMgdmFsdWUgbXVzdCBiZSBr
ZXB0IGluIHN5bmMgd2l0aCB0aGUgc2l6ZXMgZGVmaW5lZCBpbiBUZXh0dXJlTWFwcGVyU2hhZGVy
UHJvZ3JhbS5jcHAuCitzdGF0aWMgY29uc3QgdW5zaWduZWQgc19yb3VuZGVkUmVjdE1heENsaXBz
QWxsb3dlZCA9IDEwOworCisvLyBXaGVuIGNvbnZlcnRpbmcgYSByb3VuZGVkIHJlY3RhbmdsZSB0
byBhbiBhcnJheSBvZiBmbG9hdHMsIHdlIG5lZWQgMTIgZWxlbWVudHMuIFNvIHRoZSBzaXplIG9m
IHRoZSBhcnJheQorLy8gcmVxdWlyZWQgdG8gY29udGFpbiB0aGUgMTAgcmVjdGFuZ2xlcyBpcyAx
MiAqIDEwID0gMTIwLgorLy8gVGhpcyB2YWx1ZSBtdXN0IGJlIGtlcHQgaW4gc3luYyB3aXRoIHRo
ZSBzaXplcyBkZWZpbmVkIGluIFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtLmNwcC4KK3N0YXRp
YyBjb25zdCB1bnNpZ25lZCBzX3JvdW5kZWRSZWN0Q29tcG9uZW50c1BlclJlY3QgPSAxMjsKK3N0
YXRpYyBjb25zdCB1bnNpZ25lZCBzX3JvdW5kZWRSZWN0Q29tcG9uZW50c0FycmF5U2l6ZSA9IHNf
cm91bmRlZFJlY3RNYXhDbGlwc0FsbG93ZWQgKiBzX3JvdW5kZWRSZWN0Q29tcG9uZW50c1BlclJl
Y3Q7CisKKy8vIFdoZW4gY29udmVydGluZyBhIHRyYW5zZm9ybWF0aW9uIG1hdHJpeCB0byBhbiBh
cnJheSBvZiBmbG9hdHMsIHdlIG5lZWQgMTYgZWxlbWVudHMuIFNvIHRoZSBzaXplIG9mIHRoZSBh
cnJheQorLy8gcmVxdWlyZWQgdG8gY29udGFpbiB0aGUgMTAgbWF0cmljZXMgaXMgMTYgKiAxMCA9
IDE2MC4KKy8vIFRoaXMgdmFsdWUgbXVzdCBiZSBrZXB0IGluIHN5bmMgd2l0aCB0aGUgc2l6ZXMg
ZGVmaW5lZCBpbiBUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbS5jcHAuCitzdGF0aWMgY29uc3Qg
dW5zaWduZWQgc19yb3VuZGVkUmVjdEludmVyc2VUcmFuc2Zvcm1Db21wb25lbnRzUGVyUmVjdCA9
IDE2Oworc3RhdGljIGNvbnN0IHVuc2lnbmVkIHNfcm91bmRlZFJlY3RJbnZlcnNlVHJhbnNmb3Jt
Q29tcG9uZW50c0FycmF5U2l6ZSA9IHNfcm91bmRlZFJlY3RNYXhDbGlwc0FsbG93ZWQgKiBzX3Jv
dW5kZWRSZWN0SW52ZXJzZVRyYW5zZm9ybUNvbXBvbmVudHNQZXJSZWN0OworCiBjbGFzcyBDbGlw
U3RhY2sgewogcHVibGljOgogICAgIHN0cnVjdCBTdGF0ZSB7Ci0gICAgICAgIFN0YXRlKGNvbnN0
IEludFJlY3QmIHNjaXNzb3JzID0gSW50UmVjdCgpLCBpbnQgc3RlbmNpbCA9IDEpCisgICAgICAg
IFN0YXRlKGNvbnN0IEludFJlY3QmIHNjaXNzb3JzID0gSW50UmVjdCgpKQogICAgICAgICAgICAg
OiBzY2lzc29yQm94KHNjaXNzb3JzKQotICAgICAgICAgICAgLCBzdGVuY2lsSW5kZXgoc3RlbmNp
bCkKICAgICAgICAgeyB9CiAKICAgICAgICAgSW50UmVjdCBzY2lzc29yQm94OwotICAgICAgICBp
bnQgc3RlbmNpbEluZGV4OworICAgICAgICBpbnQgc3RlbmNpbEluZGV4IHsgMSB9OworICAgICAg
ICB1bnNpZ25lZCByb3VuZGVkUmVjdEluZGV4IHsgMCB9OwogICAgIH07CiAKICAgICAvLyBZLWF4
aXMgc2hvdWxkIGJlIGludmVydGVkIG9ubHkgd2hlbiBwYWludGluZyBpbnRvIHRoZSB3aW5kb3cu
CkBAIC01NCw2ICs3MywxMyBAQCBwdWJsaWM6CiAgICAgdm9pZCBzZXRTdGVuY2lsSW5kZXgoaW50
KTsKICAgICBpbnQgZ2V0U3RlbmNpbEluZGV4KCkgY29uc3QgeyByZXR1cm4gY2xpcFN0YXRlLnN0
ZW5jaWxJbmRleDsgfQogCisgICAgdm9pZCBhZGRSb3VuZGVkUmVjdChjb25zdCBGbG9hdFJvdW5k
ZWRSZWN0JiwgY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmKTsKKyAgICBjb25zdCBmbG9hdCog
cm91bmRlZFJlY3RDb21wb25lbnRzKCkgY29uc3QgeyByZXR1cm4gbV9yb3VuZGVkUmVjdENvbXBv
bmVudHMuZGF0YSgpOyB9CisgICAgY29uc3QgZmxvYXQqIHJvdW5kZWRSZWN0SW52ZXJzZVRyYW5z
Zm9ybUNvbXBvbmVudHMoKSBjb25zdCB7IHJldHVybiBtX3JvdW5kZWRSZWN0SW52ZXJzZVRyYW5z
Zm9ybUNvbXBvbmVudHMuZGF0YSgpOyB9CisgICAgdW5zaWduZWQgcm91bmRlZFJlY3RJbmRleCgp
IGNvbnN0IHsgcmV0dXJuIGNsaXBTdGF0ZS5yb3VuZGVkUmVjdEluZGV4OyB9CisgICAgYm9vbCBp
c1JvdW5kZWRSZWN0Q2xpcEVuYWJsZWQoKSBjb25zdCB7IHJldHVybiAhIWNsaXBTdGF0ZS5yb3Vu
ZGVkUmVjdEluZGV4OyB9CisgICAgYm9vbCBpc1JvdW5kZWRSZWN0Q2xpcEFsbG93ZWQoKSBjb25z
dCB7IHJldHVybiBjbGlwU3RhdGUucm91bmRlZFJlY3RJbmRleCA8IHNfcm91bmRlZFJlY3RNYXhD
bGlwc0FsbG93ZWQ7IH0KKwogICAgIHZvaWQgYXBwbHkoKTsKICAgICB2b2lkIGFwcGx5SWZOZWVk
ZWQoKTsKIApAQCAtNjUsNiArOTEsOCBAQCBwcml2YXRlOgogICAgIEludFNpemUgc2l6ZTsKICAg
ICBib29sIGNsaXBTdGF0ZURpcnR5IHsgZmFsc2UgfTsKICAgICBZQXhpc01vZGUgeUF4aXNNb2Rl
IHsgWUF4aXNNb2RlOjpEZWZhdWx0IH07CisgICAgc3RkOjphcnJheTxmbG9hdCwgc19yb3VuZGVk
UmVjdENvbXBvbmVudHNBcnJheVNpemU+IG1fcm91bmRlZFJlY3RDb21wb25lbnRzOworICAgIHN0
ZDo6YXJyYXk8ZmxvYXQsIHNfcm91bmRlZFJlY3RJbnZlcnNlVHJhbnNmb3JtQ29tcG9uZW50c0Fy
cmF5U2l6ZT4gbV9yb3VuZGVkUmVjdEludmVyc2VUcmFuc2Zvcm1Db21wb25lbnRzOwogfTsKIAog
fSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyLmgKaW5kZXggZWViMGZjYTQxYWZiYTBh
NDExMGM0NGFiYzg0NmNiOTc3MDYzNjgwZi4uMzM0ZGNhZTg1NzBlYjhhMGUxMjg2YjQ4OWVhMjhk
Njc0OGE4MDJjOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
dGV4bWFwL1RleHR1cmVNYXBwZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlci5oCkBAIC0zNyw2ICszNyw3IEBAIGNsYXNzIEJpdG1h
cFRleHR1cmVQb29sOwogY2xhc3MgR3JhcGhpY3NMYXllcjsKIGNsYXNzIFRleHR1cmVNYXBwZXI7
CiBjbGFzcyBGaWx0ZXJPcGVyYXRpb25zOworY2xhc3MgRmxvYXRSb3VuZGVkUmVjdDsKIAogY2xh
c3MgVGV4dHVyZU1hcHBlciB7CiAgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CkBAIC03NSw3
ICs3Niw3IEBAIHB1YmxpYzoKIAogICAgIC8vIG1ha2VzIGEgc3VyZmFjZSB0aGUgdGFyZ2V0IGZv
ciB0aGUgZm9sbG93aW5nIGRyYXdUZXh0dXJlIGNhbGxzLgogICAgIHZpcnR1YWwgdm9pZCBiaW5k
U3VyZmFjZShCaXRtYXBUZXh0dXJlKiBzdXJmYWNlKSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIGJl
Z2luQ2xpcChjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYsIGNvbnN0IEZsb2F0UmVjdCYpID0g
MDsKKyAgICB2aXJ0dWFsIHZvaWQgYmVnaW5DbGlwKGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4
JiwgY29uc3QgRmxvYXRSb3VuZGVkUmVjdCYpID0gMDsKICAgICB2aXJ0dWFsIHZvaWQgZW5kQ2xp
cCgpID0gMDsKICAgICB2aXJ0dWFsIEludFJlY3QgY2xpcEJvdW5kcygpID0gMDsKICAgICB2aXJ0
dWFsIHZvaWQgYmVnaW5QcmVzZXJ2ZXMzRCgpIHsgfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyR0wuY3BwIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJHTC5jcHAKaW5k
ZXggNTQwYzQwYmI0YzFmN2M3MDI0NGE4YjAzZGIxY2ZhNTljNGI2ZjY5NS4uYjE5YmEzZDkzZDMz
OTA0ZTVhMWRmOTZlMjk3OGYwMDIyZDI2Mzc4OSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJHTC5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJHTC5jcHAKQEAg
LTI5LDYgKzI5LDcgQEAKICNpbmNsdWRlICJFeHRlbnNpb25zR0wuaCIKICNpbmNsdWRlICJGaWx0
ZXJPcGVyYXRpb25zLmgiCiAjaW5jbHVkZSAiRmxvYXRRdWFkLmgiCisjaW5jbHVkZSAiRmxvYXRS
b3VuZGVkUmVjdC5oIgogI2luY2x1ZGUgIkdMQ29udGV4dC5oIgogI2luY2x1ZGUgIkdyYXBoaWNz
Q29udGV4dC5oIgogI2luY2x1ZGUgIkltYWdlLmgiCkBAIC00NDIsNiArNDQzLDE1IEBAIHN0YXRp
YyBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBjb2xvclNwYWNlTWF0cml4Rm9yRmxhZ3MoVGV4dHVyZU1h
cHBlckdMOjpGbGFncyBmbGFnCiAgICAgcmV0dXJuIG1hdHJpeDsKIH0KIAorc3RhdGljIHZvaWQg
cHJlcGFyZVJvdW5kZWRSZWN0Q2xpcChUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbSYgcHJvZ3Jh
bSwgY29uc3QgZmxvYXQqIHJlY3RzLCBjb25zdCBmbG9hdCogdHJhbnNmb3JtcywgaW50IG5SZWN0
cykKK3sKKyAgICBnbFVzZVByb2dyYW0ocHJvZ3JhbS5wcm9ncmFtSUQoKSk7CisKKyAgICBnbFVu
aWZvcm0xaShwcm9ncmFtLnJvdW5kZWRSZWN0TnVtYmVyTG9jYXRpb24oKSwgblJlY3RzKTsKKyAg
ICBnbFVuaWZvcm00ZnYocHJvZ3JhbS5yb3VuZGVkUmVjdExvY2F0aW9uKCksIDMgKiBuUmVjdHMs
IHJlY3RzKTsKKyAgICBnbFVuaWZvcm1NYXRyaXg0ZnYocHJvZ3JhbS5yb3VuZGVkUmVjdEludmVy
c2VUcmFuc2Zvcm1NYXRyaXhMb2NhdGlvbigpLCBuUmVjdHMsIGZhbHNlLCB0cmFuc2Zvcm1zKTsK
K30KKwogdm9pZCBUZXh0dXJlTWFwcGVyR0w6OmRyYXdUZXh0dXJlKGNvbnN0IEJpdG1hcFRleHR1
cmUmIHRleHR1cmUsIGNvbnN0IEZsb2F0UmVjdCYgdGFyZ2V0UmVjdCwgY29uc3QgVHJhbnNmb3Jt
YXRpb25NYXRyaXgmIG1hdHJpeCwgZmxvYXQgb3BhY2l0eSwgdW5zaWduZWQgZXhwb3NlZEVkZ2Vz
KQogewogICAgIGlmICghdGV4dHVyZS5pc1ZhbGlkKCkpCkBAIC00ODksMTEgKzQ5OSwxOSBAQCB2
b2lkIFRleHR1cmVNYXBwZXJHTDo6ZHJhd1RleHR1cmUoR0x1aW50IHRleHR1cmUsIEZsYWdzIGZs
YWdzLCBjb25zdCBJbnRTaXplJiB0ZQogICAgIGlmICh1c2VBbnRpYWxpYXNpbmcgfHwgb3BhY2l0
eSA8IDEpCiAgICAgICAgIGZsYWdzIHw9IFNob3VsZEJsZW5kOwogCisgICAgaWYgKGNsaXBTdGFj
aygpLmlzUm91bmRlZFJlY3RDbGlwRW5hYmxlZCgpKSB7CisgICAgICAgIG9wdGlvbnMgfD0gVGV4
dHVyZU1hcHBlclNoYWRlclByb2dyYW06OlJvdW5kZWRSZWN0Q2xpcDsKKyAgICAgICAgZmxhZ3Mg
fD0gU2hvdWxkQmxlbmQ7CisgICAgfQorCiAgICAgUmVmPFRleHR1cmVNYXBwZXJTaGFkZXJQcm9n
cmFtPiBwcm9ncmFtID0gZGF0YSgpLmdldFNoYWRlclByb2dyYW0ob3B0aW9ucyk7CiAKICAgICBp
ZiAoZmlsdGVyKQogICAgICAgICBwcmVwYXJlRmlsdGVyUHJvZ3JhbShwcm9ncmFtLmdldCgpLCAq
ZmlsdGVyLmdldCgpLCBkYXRhKCkuZmlsdGVySW5mby0+cGFzcywgdGV4dHVyZVNpemUsIGZpbHRl
ckNvbnRlbnRUZXh0dXJlSUQpOwogCisgICAgaWYgKGNsaXBTdGFjaygpLmlzUm91bmRlZFJlY3RD
bGlwRW5hYmxlZCgpKQorICAgICAgICBwcmVwYXJlUm91bmRlZFJlY3RDbGlwKHByb2dyYW0uZ2V0
KCksIGNsaXBTdGFjaygpLnJvdW5kZWRSZWN0Q29tcG9uZW50cygpLCBjbGlwU3RhY2soKS5yb3Vu
ZGVkUmVjdEludmVyc2VUcmFuc2Zvcm1Db21wb25lbnRzKCksIGNsaXBTdGFjaygpLnJvdW5kZWRS
ZWN0SW5kZXgoKSk7CisKICAgICBkcmF3VGV4dHVyZWRRdWFkV2l0aFByb2dyYW0ocHJvZ3JhbS5n
ZXQoKSwgdGV4dHVyZSwgZmxhZ3MsIHRleHR1cmVTaXplLCB0YXJnZXRSZWN0LCBtb2RlbFZpZXdN
YXRyaXgsIG9wYWNpdHkpOwogfQogCkBAIC01NTIsMTEgKzU3MCwxOSBAQCB2b2lkIFRleHR1cmVN
YXBwZXJHTDo6ZHJhd1RleHR1cmVQbGFuYXJZVVYoY29uc3Qgc3RkOjphcnJheTxHTHVpbnQsIDM+
JiB0ZXh0dXJlcwogICAgIGlmICh1c2VBbnRpYWxpYXNpbmcgfHwgb3BhY2l0eSA8IDEpCiAgICAg
ICAgIGZsYWdzIHw9IFNob3VsZEJsZW5kOwogCisgICAgaWYgKGNsaXBTdGFjaygpLmlzUm91bmRl
ZFJlY3RDbGlwRW5hYmxlZCgpKSB7CisgICAgICAgIG9wdGlvbnMgfD0gVGV4dHVyZU1hcHBlclNo
YWRlclByb2dyYW06OlJvdW5kZWRSZWN0Q2xpcDsKKyAgICAgICAgZmxhZ3MgfD0gU2hvdWxkQmxl
bmQ7CisgICAgfQorCiAgICAgUmVmPFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtPiBwcm9ncmFt
ID0gZGF0YSgpLmdldFNoYWRlclByb2dyYW0ob3B0aW9ucyk7CiAKICAgICBpZiAoZmlsdGVyKQog
ICAgICAgICBwcmVwYXJlRmlsdGVyUHJvZ3JhbShwcm9ncmFtLmdldCgpLCAqZmlsdGVyLmdldCgp
LCBkYXRhKCkuZmlsdGVySW5mby0+cGFzcywgdGV4dHVyZVNpemUsIGZpbHRlckNvbnRlbnRUZXh0
dXJlSUQpOwogCisgICAgaWYgKGNsaXBTdGFjaygpLmlzUm91bmRlZFJlY3RDbGlwRW5hYmxlZCgp
KQorICAgICAgICBwcmVwYXJlUm91bmRlZFJlY3RDbGlwKHByb2dyYW0uZ2V0KCksIGNsaXBTdGFj
aygpLnJvdW5kZWRSZWN0Q29tcG9uZW50cygpLCBjbGlwU3RhY2soKS5yb3VuZGVkUmVjdEludmVy
c2VUcmFuc2Zvcm1Db21wb25lbnRzKCksIGNsaXBTdGFjaygpLnJvdW5kZWRSZWN0SW5kZXgoKSk7
CisKICAgICBWZWN0b3I8c3RkOjpwYWlyPEdMdWludCwgR0x1aW50PiA+IHRleHR1cmVzQW5kU2Ft
cGxlcnMgPSB7CiAgICAgICAgIHsgdGV4dHVyZXNbMF0sIHByb2dyYW0tPnNhbXBsZXJZTG9jYXRp
b24oKSB9LAogICAgICAgICB7IHRleHR1cmVzWzFdLCBwcm9ncmFtLT5zYW1wbGVyVUxvY2F0aW9u
KCkgfSwKQEAgLTYwMiwxMSArNjI4LDE5IEBAIHZvaWQgVGV4dHVyZU1hcHBlckdMOjpkcmF3VGV4
dHVyZVNlbWlQbGFuYXJZVVYoY29uc3Qgc3RkOjphcnJheTxHTHVpbnQsIDI+JiB0ZXh0CiAgICAg
aWYgKHVzZUFudGlhbGlhc2luZyB8fCBvcGFjaXR5IDwgMSkKICAgICAgICAgZmxhZ3MgfD0gU2hv
dWxkQmxlbmQ7CiAKKyAgICBpZiAoY2xpcFN0YWNrKCkuaXNSb3VuZGVkUmVjdENsaXBFbmFibGVk
KCkpIHsKKyAgICAgICAgb3B0aW9ucyB8PSBUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbTo6Um91
bmRlZFJlY3RDbGlwOworICAgICAgICBmbGFncyB8PSBTaG91bGRCbGVuZDsKKyAgICB9CisKICAg
ICBSZWY8VGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW0+IHByb2dyYW0gPSBkYXRhKCkuZ2V0U2hh
ZGVyUHJvZ3JhbShvcHRpb25zKTsKIAogICAgIGlmIChmaWx0ZXIpCiAgICAgICAgIHByZXBhcmVG
aWx0ZXJQcm9ncmFtKHByb2dyYW0uZ2V0KCksICpmaWx0ZXIuZ2V0KCksIGRhdGEoKS5maWx0ZXJJ
bmZvLT5wYXNzLCB0ZXh0dXJlU2l6ZSwgZmlsdGVyQ29udGVudFRleHR1cmVJRCk7CiAKKyAgICBp
ZiAoY2xpcFN0YWNrKCkuaXNSb3VuZGVkUmVjdENsaXBFbmFibGVkKCkpCisgICAgICAgIHByZXBh
cmVSb3VuZGVkUmVjdENsaXAocHJvZ3JhbS5nZXQoKSwgY2xpcFN0YWNrKCkucm91bmRlZFJlY3RD
b21wb25lbnRzKCksIGNsaXBTdGFjaygpLnJvdW5kZWRSZWN0SW52ZXJzZVRyYW5zZm9ybUNvbXBv
bmVudHMoKSwgY2xpcFN0YWNrKCkucm91bmRlZFJlY3RJbmRleCgpKTsKKwogICAgIFZlY3Rvcjxz
dGQ6OnBhaXI8R0x1aW50LCBHTHVpbnQ+ID4gdGV4dHVyZXNBbmRTYW1wbGVycyA9IHsKICAgICAg
ICAgeyB0ZXh0dXJlc1swXSwgcHJvZ3JhbS0+c2FtcGxlcllMb2NhdGlvbigpIH0sCiAgICAgICAg
IHsgdGV4dHVyZXNbMV0sIHByb2dyYW0tPnNhbXBsZXJVTG9jYXRpb24oKSB9CkBAIC02NTAsMTEg
KzY4NCwxOSBAQCB2b2lkIFRleHR1cmVNYXBwZXJHTDo6ZHJhd1RleHR1cmVQYWNrZWRZVVYoR0x1
aW50IHRleHR1cmUsIGNvbnN0IHN0ZDo6YXJyYXk8R0xmbAogICAgIGlmICh1c2VBbnRpYWxpYXNp
bmcgfHwgb3BhY2l0eSA8IDEpCiAgICAgICAgIGZsYWdzIHw9IFNob3VsZEJsZW5kOwogCisgICAg
aWYgKGNsaXBTdGFjaygpLmlzUm91bmRlZFJlY3RDbGlwRW5hYmxlZCgpKSB7CisgICAgICAgIG9w
dGlvbnMgfD0gVGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW06OlJvdW5kZWRSZWN0Q2xpcDsKKyAg
ICAgICAgZmxhZ3MgfD0gU2hvdWxkQmxlbmQ7CisgICAgfQorCiAgICAgUmVmPFRleHR1cmVNYXBw
ZXJTaGFkZXJQcm9ncmFtPiBwcm9ncmFtID0gZGF0YSgpLmdldFNoYWRlclByb2dyYW0ob3B0aW9u
cyk7CiAKICAgICBpZiAoZmlsdGVyKQogICAgICAgICBwcmVwYXJlRmlsdGVyUHJvZ3JhbShwcm9n
cmFtLmdldCgpLCAqZmlsdGVyLmdldCgpLCBkYXRhKCkuZmlsdGVySW5mby0+cGFzcywgdGV4dHVy
ZVNpemUsIGZpbHRlckNvbnRlbnRUZXh0dXJlSUQpOwogCisgICAgaWYgKGNsaXBTdGFjaygpLmlz
Um91bmRlZFJlY3RDbGlwRW5hYmxlZCgpKQorICAgICAgICBwcmVwYXJlUm91bmRlZFJlY3RDbGlw
KHByb2dyYW0uZ2V0KCksIGNsaXBTdGFjaygpLnJvdW5kZWRSZWN0Q29tcG9uZW50cygpLCBjbGlw
U3RhY2soKS5yb3VuZGVkUmVjdEludmVyc2VUcmFuc2Zvcm1Db21wb25lbnRzKCksIGNsaXBTdGFj
aygpLnJvdW5kZWRSZWN0SW5kZXgoKSk7CisKICAgICBWZWN0b3I8c3RkOjpwYWlyPEdMdWludCwg
R0x1aW50PiA+IHRleHR1cmVzQW5kU2FtcGxlcnMgPSB7CiAgICAgICAgIHsgdGV4dHVyZSwgcHJv
Z3JhbS0+c2FtcGxlckxvY2F0aW9uKCkgfQogICAgIH07CkBAIC02NzMsOSArNzE1LDE3IEBAIHZv
aWQgVGV4dHVyZU1hcHBlckdMOjpkcmF3U29saWRDb2xvcihjb25zdCBGbG9hdFJlY3QmIHJlY3Qs
IGNvbnN0IFRyYW5zZm9ybWF0aW9uCiAgICAgICAgIGZsYWdzIHw9IFNob3VsZEFudGlhbGlhcyB8
IChpc0JsZW5kaW5nQWxsb3dlZCA/IFNob3VsZEJsZW5kIDogMCk7CiAgICAgfQogCisgICAgaWYg
KGNsaXBTdGFjaygpLmlzUm91bmRlZFJlY3RDbGlwRW5hYmxlZCgpKSB7CisgICAgICAgIG9wdGlv
bnMgfD0gVGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW06OlJvdW5kZWRSZWN0Q2xpcDsKKyAgICAg
ICAgZmxhZ3MgfD0gU2hvdWxkQmxlbmQ7CisgICAgfQorCiAgICAgUmVmPFRleHR1cmVNYXBwZXJT
aGFkZXJQcm9ncmFtPiBwcm9ncmFtID0gZGF0YSgpLmdldFNoYWRlclByb2dyYW0ob3B0aW9ucyk7
CiAgICAgZ2xVc2VQcm9ncmFtKHByb2dyYW0tPnByb2dyYW1JRCgpKTsKIAorICAgIGlmIChjbGlw
U3RhY2soKS5pc1JvdW5kZWRSZWN0Q2xpcEVuYWJsZWQoKSkKKyAgICAgICAgcHJlcGFyZVJvdW5k
ZWRSZWN0Q2xpcChwcm9ncmFtLmdldCgpLCBjbGlwU3RhY2soKS5yb3VuZGVkUmVjdENvbXBvbmVu
dHMoKSwgY2xpcFN0YWNrKCkucm91bmRlZFJlY3RJbnZlcnNlVHJhbnNmb3JtQ29tcG9uZW50cygp
LCBjbGlwU3RhY2soKS5yb3VuZGVkUmVjdEluZGV4KCkpOworCiAgICAgYXV0byBbciwgZywgYiwg
YV0gPSBwcmVtdWx0aXBsaWVkKGNvbG9yLnRvU1JHQkFMb3NzeTxmbG9hdD4oKSk7CiAgICAgZ2xV
bmlmb3JtNGYocHJvZ3JhbS0+Y29sb3JMb2NhdGlvbigpLCByLCBnLCBiLCBhKTsKICAgICBpZiAo
YSA8IDEgJiYgaXNCbGVuZGluZ0FsbG93ZWQpCkBAIC04ODQsMTAgKzkzNCw0MSBAQCBib29sIFRl
eHR1cmVNYXBwZXJHTDo6YmVnaW5TY2lzc29yQ2xpcChjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJp
eCYgbW9kZWxWaWV3TWF0cgogICAgIHJldHVybiB0cnVlOwogfQogCi12b2lkIFRleHR1cmVNYXBw
ZXJHTDo6YmVnaW5DbGlwKGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiBtb2RlbFZpZXdNYXRy
aXgsIGNvbnN0IEZsb2F0UmVjdCYgdGFyZ2V0UmVjdCkKK2Jvb2wgVGV4dHVyZU1hcHBlckdMOjpi
ZWdpblJvdW5kZWRSZWN0Q2xpcChjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgbW9kZWxWaWV3
TWF0cml4LCBjb25zdCBGbG9hdFJvdW5kZWRSZWN0JiB0YXJnZXRSZWN0KQoreworICAgIC8vIFRo
aXMgaXMgaW1wbGVtZW50ZWQgYnkgdGVsbGluZyB0aGUgZnJhZ21lbnQgc2hhZGVyIHRvIGNoZWNr
IHdoZXRoZXIgZWFjaCBwaXhlbCBpcyBpbnNpZGUgdGhlIHJvdW5kZWQgcmVjdGFuZ2xlCisgICAg
Ly8gYmVmb3JlIHBhaW50aW5nIGl0LgorICAgIC8vCisgICAgLy8gSW5zaWRlIHRoZSBzaGFkZXIs
IHRoZSBtYXRoIHRvIGNoZWNrIHdoZXRoZXIgYSBwb2ludCBpcyBpbnNpZGUgdGhlIHJvdW5kZWQg
cmVjdGFuZ2xlIHJlcXVpcmVzIHRoZSByZWN0YW5nbGUgdG8KKyAgICAvLyBiZSBhbGlnbmVkIHRv
IHRoZSBYIGFuZCBZIGF4aXMsIHdoaWNoIGlzIG5vdCBndWFyYW50ZWVkIGlmIHRoZSB0cmFuc2Zv
cm1hdGlvbiBtYXRyaXggaW5jbHVkZXMgcm90YXRpb25zLiBJbiBvcmRlcgorICAgIC8vIHRvIGF2
b2lkIHRoaXMsIGluc3RlYWQgb2YgYXBwbHlpbmcgdGhlIHRyYW5zZm9ybWF0aW9uIHRvIHRoZSBy
b3VuZGVkIHJlY3RhbmdsZSwgd2UgY2FsY3VsYXRlIHRoZSBpbnZlcnNlCisgICAgLy8gb2YgdGhl
IHRyYW5zZm9ybWF0aW9uIGFuZCBhcHBseSBpdCB0byB0aGUgcGl4ZWxzIGJlZm9yZSBjaGVja2lu
ZyB3aGV0aGVyIHRoZXkgYXJlIGluc2lkZSB0aGUgcm91bmRlZCByZWN0YW5nbGUuCisgICAgLy8g
VGhpcyB3b3JrcyBmaW5lIGFzIGxvbmcgYXMgdGhlIHRyYW5zZm9ybWF0aW9uIG1hdHJpeCBpcyBp
bnZlcnRpYmxlLgorICAgIC8vCisgICAgLy8gVGhlcmUgaXMgYSBsaW1pdCB0byB0aGUgbnVtYmVy
IG9mIHJvdW5kZWQgcmVjdGFuZ2xlIGNsaXBwaW5ncyB0aGF0IGNhbiBiZSBkb25lLCB0aGF0IGhh
cHBlbnMgYmVjYXVzZSB0aGUgR0xTTAorICAgIC8vIGFycmF5cyBtdXN0IGhhdmUgYSBwcmVkZWZp
bmVkIHNpemUuIFRoZSBsaW1pdCBpcyBkZWZpbmVkIGluc2lkZSBDbGlwU3RhY2ssIGFuZCB0aGF0
J3Mgd2h5IHdlIG5lZWQgdG8gY2FsbAorICAgIC8vIGNsaXBTdGFjaygpLmlzUm91bmRlZFJlY3RD
bGlwQWxsb3dlZCgpIGJlZm9yZSB0cnlpbmcgdG8gYWRkIGEgbmV3IGNsaXAuCisKKyAgICBpZiAo
IXRhcmdldFJlY3QuaXNSb3VuZGVkKCkgfHwgIXRhcmdldFJlY3QuaXNSZW5kZXJhYmxlKCkgfHwg
dGFyZ2V0UmVjdC5pc0VtcHR5KCkgfHwgIW1vZGVsVmlld01hdHJpeC5pc0ludmVydGlibGUoKSB8
fCAhY2xpcFN0YWNrKCkuaXNSb3VuZGVkUmVjdENsaXBBbGxvd2VkKCkpCisgICAgICAgIHJldHVy
biBmYWxzZTsKKworICAgIEZsb2F0UXVhZCBxdWFkID0gbW9kZWxWaWV3TWF0cml4LnByb2plY3RR
dWFkKHRhcmdldFJlY3QucmVjdCgpKTsKKyAgICBJbnRSZWN0IHJlY3QgPSBxdWFkLmVuY2xvc2lu
Z0JvdW5kaW5nQm94KCk7CisKKyAgICBjbGlwU3RhY2soKS5hZGRSb3VuZGVkUmVjdCh0YXJnZXRS
ZWN0LCBtb2RlbFZpZXdNYXRyaXguaW52ZXJzZSgpLnZhbHVlKCkpOworICAgIGNsaXBTdGFjaygp
LmludGVyc2VjdChyZWN0KTsKKyAgICBjbGlwU3RhY2soKS5hcHBseUlmTmVlZGVkKCk7CisKKyAg
ICByZXR1cm4gdHJ1ZTsKK30KKwordm9pZCBUZXh0dXJlTWFwcGVyR0w6OmJlZ2luQ2xpcChjb25z
dCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgbW9kZWxWaWV3TWF0cml4LCBjb25zdCBGbG9hdFJvdW5k
ZWRSZWN0JiB0YXJnZXRSZWN0KQogewogICAgIGNsaXBTdGFjaygpLnB1c2goKTsKLSAgICBpZiAo
YmVnaW5TY2lzc29yQ2xpcChtb2RlbFZpZXdNYXRyaXgsIHRhcmdldFJlY3QpKQorICAgIGlmIChi
ZWdpblJvdW5kZWRSZWN0Q2xpcChtb2RlbFZpZXdNYXRyaXgsIHRhcmdldFJlY3QpKQorICAgICAg
ICByZXR1cm47CisKKyAgICBpZiAoYmVnaW5TY2lzc29yQ2xpcChtb2RlbFZpZXdNYXRyaXgsIHRh
cmdldFJlY3QucmVjdCgpKSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgZGF0YSgpLmluaXRpYWxp
emVTdGVuY2lsKCk7CkBAIC05MDIsNyArOTgzLDcgQEAgdm9pZCBUZXh0dXJlTWFwcGVyR0w6OmJl
Z2luQ2xpcChjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgbW9kZWxWaWV3TWF0cml4LCBjb24K
ICAgICBnbFZlcnRleEF0dHJpYlBvaW50ZXIocHJvZ3JhbS0+dmVydGV4TG9jYXRpb24oKSwgMiwg
R0xfRkxPQVQsIGZhbHNlLCAwLCAwKTsKIAogICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4IG1hdHJp
eChtb2RlbFZpZXdNYXRyaXgpOwotICAgIG1hdHJpeC5tdWx0aXBseShUcmFuc2Zvcm1hdGlvbk1h
dHJpeDo6cmVjdFRvUmVjdChGbG9hdFJlY3QoMCwgMCwgMSwgMSksIHRhcmdldFJlY3QpKTsKKyAg
ICBtYXRyaXgubXVsdGlwbHkoVHJhbnNmb3JtYXRpb25NYXRyaXg6OnJlY3RUb1JlY3QoRmxvYXRS
ZWN0KDAsIDAsIDEsIDEpLCB0YXJnZXRSZWN0LnJlY3QoKSkpOwogCiAgICAgc3RhdGljIGNvbnN0
IFRyYW5zZm9ybWF0aW9uTWF0cml4IGZ1bGxQcm9qZWN0aW9uTWF0cml4ID0gVHJhbnNmb3JtYXRp
b25NYXRyaXg6OnJlY3RUb1JlY3QoRmxvYXRSZWN0KDAsIDAsIDEsIDEpLCBGbG9hdFJlY3QoLTEs
IC0xLCAyLCAyKSk7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyR0wuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyR0wuaAppbmRleCAyNjcxNzVlMTg0MzdjMjdkZDRh
YTNjNWI4ZTBmMjQ4YmNlYTNiNmFhLi4zODc0ZDdlZWNiMDFiNTk5ODUwOTVhMTJiMGFhMDBiYmIw
NDdkM2M3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXht
YXAvVGV4dHVyZU1hcHBlckdMLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvdGV4bWFwL1RleHR1cmVNYXBwZXJHTC5oCkBAIC03NSw3ICs3NSw3IEBAIHB1YmxpYzoKIAog
ICAgIHZvaWQgYmluZFN1cmZhY2UoQml0bWFwVGV4dHVyZSogc3VyZmFjZSkgb3ZlcnJpZGU7CiAg
ICAgQml0bWFwVGV4dHVyZSogY3VycmVudFN1cmZhY2UoKTsKLSAgICB2b2lkIGJlZ2luQ2xpcChj
b25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYsIGNvbnN0IEZsb2F0UmVjdCYpIG92ZXJyaWRlOwor
ICAgIHZvaWQgYmVnaW5DbGlwKGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiwgY29uc3QgRmxv
YXRSb3VuZGVkUmVjdCYpIG92ZXJyaWRlOwogICAgIHZvaWQgYmVnaW5QYWludGluZyhQYWludEZs
YWdzID0gMCkgb3ZlcnJpZGU7CiAgICAgdm9pZCBlbmRQYWludGluZygpIG92ZXJyaWRlOwogICAg
IHZvaWQgZW5kQ2xpcCgpIG92ZXJyaWRlOwpAQCAtMTAwLDYgKzEwMCw3IEBAIHByaXZhdGU6CiAg
ICAgdm9pZCBkcmF3RWRnZVRyaWFuZ2xlcyhUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbSYpOwog
CiAgICAgYm9vbCBiZWdpblNjaXNzb3JDbGlwKGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4Jiwg
Y29uc3QgRmxvYXRSZWN0Jik7CisgICAgYm9vbCBiZWdpblJvdW5kZWRSZWN0Q2xpcChjb25zdCBU
cmFuc2Zvcm1hdGlvbk1hdHJpeCYsIGNvbnN0IEZsb2F0Um91bmRlZFJlY3QmKTsKICAgICB2b2lk
IGJpbmREZWZhdWx0U3VyZmFjZSgpOwogICAgIENsaXBTdGFjayYgY2xpcFN0YWNrKCk7CiAgICAg
aW5saW5lIFRleHR1cmVNYXBwZXJHTERhdGEmIGRhdGEoKSB7IHJldHVybiAqbV9kYXRhOyB9CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVy
ZU1hcHBlckxheWVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1h
cC9UZXh0dXJlTWFwcGVyTGF5ZXIuY3BwCmluZGV4IGEyMzZhNmE3YTg0OWUyMDBjNzM5MTBlYzY1
ODMzOThlZjc4MWYzMTIuLmExYzZiYjEwMDZjMjk5YjRhMDA4MDcwMjUzMDIyYmRmMzAwZjM4M2Ig
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0
dXJlTWFwcGVyTGF5ZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L3RleG1hcC9UZXh0dXJlTWFwcGVyTGF5ZXIuY3BwCkBAIC0xOTYsOCArMTk2LDcgQEAgdm9pZCBU
ZXh0dXJlTWFwcGVyTGF5ZXI6OnBhaW50U2VsZihjb25zdCBUZXh0dXJlTWFwcGVyUGFpbnRPcHRp
b25zJiBvcHRpb25zKQogCiAgICAgYm9vbCBzaG91bGRDbGlwID0gbV9zdGF0ZS5jb250ZW50c0Ns
aXBwaW5nUmVjdC5pc1JvdW5kZWQoKSB8fCAhbV9zdGF0ZS5jb250ZW50c0NsaXBwaW5nUmVjdC5y
ZWN0KCkuY29udGFpbnMobV9zdGF0ZS5jb250ZW50c1JlY3QpOwogICAgIGlmIChzaG91bGRDbGlw
KSB7Ci0gICAgICAgIC8vIEZJWE1FOiBUZXh0dXJlTWFwcGVyOjpiZWdpbkNsaXAgZG9lc24ndCBz
dXBwb3J0IEZsb2F0Um91bmRlZFJlY3QsIHNvIHdlIG5lZWQgdG8gY29udmVydCBtX3N0YXRlLmNv
bnRlbnRzQ2xpcHBpbmdSZWN0IHRvIEZsb2F0UmVjdC4KLSAgICAgICAgb3B0aW9ucy50ZXh0dXJl
TWFwcGVyLmJlZ2luQ2xpcCh0cmFuc2Zvcm0sIG1fc3RhdGUuY29udGVudHNDbGlwcGluZ1JlY3Qu
cmVjdCgpKTsKKyAgICAgICAgb3B0aW9ucy50ZXh0dXJlTWFwcGVyLmJlZ2luQ2xpcCh0cmFuc2Zv
cm0sIG1fc3RhdGUuY29udGVudHNDbGlwcGluZ1JlY3QpOwogICAgIH0KIAogICAgIG1fY29udGVu
dHNMYXllci0+cGFpbnRUb1RleHR1cmVNYXBwZXIob3B0aW9ucy50ZXh0dXJlTWFwcGVyLCBtX3N0
YXRlLmNvbnRlbnRzUmVjdCwgdHJhbnNmb3JtLCBvcHRpb25zLm9wYWNpdHkpOwpAQCAtMjMwLDcg
KzIyOSw3IEBAIHZvaWQgVGV4dHVyZU1hcHBlckxheWVyOjpwYWludFNlbGZBbmRDaGlsZHJlbihj
b25zdCBUZXh0dXJlTWFwcGVyUGFpbnRPcHRpb25zJiBvCiAgICAgICAgIGNsaXBUcmFuc2Zvcm0u
dHJhbnNsYXRlKG9wdGlvbnMub2Zmc2V0LndpZHRoKCksIG9wdGlvbnMub2Zmc2V0LmhlaWdodCgp
KTsKICAgICAgICAgY2xpcFRyYW5zZm9ybS5tdWx0aXBseShvcHRpb25zLnRyYW5zZm9ybSk7CiAg
ICAgICAgIGNsaXBUcmFuc2Zvcm0ubXVsdGlwbHkobV9sYXllclRyYW5zZm9ybXMuY29tYmluZWQp
OwotICAgICAgICBvcHRpb25zLnRleHR1cmVNYXBwZXIuYmVnaW5DbGlwKGNsaXBUcmFuc2Zvcm0s
IGxheWVyUmVjdCgpKTsKKyAgICAgICAgb3B0aW9ucy50ZXh0dXJlTWFwcGVyLmJlZ2luQ2xpcChj
bGlwVHJhbnNmb3JtLCBGbG9hdFJvdW5kZWRSZWN0KGxheWVyUmVjdCgpKSk7CiAgICAgICAgIG1f
c3RhdGUuYmFja2Ryb3BMYXllci0+cGFpbnRSZWN1cnNpdmUob3B0aW9ucyk7CiAgICAgICAgIG9w
dGlvbnMudGV4dHVyZU1hcHBlci5lbmRDbGlwKCk7CiAgICAgfQpAQCAtMjQ5LDcgKzI0OCw3IEBA
IHZvaWQgVGV4dHVyZU1hcHBlckxheWVyOjpwYWludFNlbGZBbmRDaGlsZHJlbihjb25zdCBUZXh0
dXJlTWFwcGVyUGFpbnRPcHRpb25zJiBvCiAgICAgICAgIGNsaXBUcmFuc2Zvcm0udHJhbnNsYXRl
KG9wdGlvbnMub2Zmc2V0LndpZHRoKCksIG9wdGlvbnMub2Zmc2V0LmhlaWdodCgpKTsKICAgICAg
ICAgY2xpcFRyYW5zZm9ybS5tdWx0aXBseShvcHRpb25zLnRyYW5zZm9ybSk7CiAgICAgICAgIGNs
aXBUcmFuc2Zvcm0ubXVsdGlwbHkobV9sYXllclRyYW5zZm9ybXMuY29tYmluZWQpOwotICAgICAg
ICBvcHRpb25zLnRleHR1cmVNYXBwZXIuYmVnaW5DbGlwKGNsaXBUcmFuc2Zvcm0sIGxheWVyUmVj
dCgpKTsKKyAgICAgICAgb3B0aW9ucy50ZXh0dXJlTWFwcGVyLmJlZ2luQ2xpcChjbGlwVHJhbnNm
b3JtLCBGbG9hdFJvdW5kZWRSZWN0KGxheWVyUmVjdCgpKSk7CiAKICAgICAgICAgLy8gSWYgYXMg
YSByZXN1bHQgb2YgYmVnaW5DbGlwKCksIHRoZSBjbGlwcGluZyBhcmVhIGlzIGVtcHR5LCBpdCBt
ZWFucyB0aGF0IHRoZSBpbnRlcnNlY3Rpb24gb2YgdGhlIHByZXZpb3VzCiAgICAgICAgIC8vIGNs
aXBwaW5nIGFyZWEgYW5kIHRoZSBjdXJyZW50IG9uZSBkb24ndCBoYXZlIGFueSBwaXhlbHMgaW4g
Y29tbW9uLiBJbiB0aGlzIGNhc2Ugd2UgY2FuIHNraXAgcGFpbnRpbmcgdGhlCkBAIC00MDUsNyAr
NDA0LDcgQEAgdm9pZCBUZXh0dXJlTWFwcGVyTGF5ZXI6OnBhaW50VXNpbmdPdmVybGFwUmVnaW9u
cyhjb25zdCBUZXh0dXJlTWFwcGVyUGFpbnRPcHRpb24KICAgICAgICAgaWYgKCFyZWN0LmludGVy
c2VjdHMob3B0aW9ucy50ZXh0dXJlTWFwcGVyLmNsaXBCb3VuZHMoKSkpCiAgICAgICAgICAgICBj
b250aW51ZTsKIAotICAgICAgICBvcHRpb25zLnRleHR1cmVNYXBwZXIuYmVnaW5DbGlwKFRyYW5z
Zm9ybWF0aW9uTWF0cml4KCksIHJlY3QpOworICAgICAgICBvcHRpb25zLnRleHR1cmVNYXBwZXIu
YmVnaW5DbGlwKFRyYW5zZm9ybWF0aW9uTWF0cml4KCksIEZsb2F0Um91bmRlZFJlY3QocmVjdCkp
OwogICAgICAgICBwYWludFNlbGZBbmRDaGlsZHJlbldpdGhSZXBsaWNhKG9wdGlvbnMpOwogICAg
ICAgICBvcHRpb25zLnRleHR1cmVNYXBwZXIuZW5kQ2xpcCgpOwogICAgIH0KZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyU2hh
ZGVyUHJvZ3JhbS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAv
VGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW0uY3BwCmluZGV4IDI2YzBmNDJlODUzOTQ2OTY1Yjg3
Y2NmZDc5MzIzMTIyNjhjMjkxYWMuLmZmODFmYWEyNmIwNDc3ZmIwMzAwMTM5MGM2NDgwNWJlNjA2
ODdmNTQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1h
cC9UZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtLmNwcApAQCAt
NjgsNiArNjgsNyBAQCBzdGF0aWMgY29uc3QgY2hhciogdmVydGV4VGVtcGxhdGVMVDMyMFZhcnMg
PQogICAgICAgICB2YXJ5aW5nIHZlYzIgdl90ZXhDb29yZDsKICAgICAgICAgdmFyeWluZyB2ZWMy
IHZfdHJhbnNmb3JtZWRUZXhDb29yZDsKICAgICAgICAgdmFyeWluZyBmbG9hdCB2X2FudGlhbGlh
czsKKyAgICAgICAgdmFyeWluZyB2ZWM0IHZfbm9uUHJvamVjdGVkUG9zaXRpb247CiAgICAgKTsK
IAogI2lmICFVU0UoT1BFTkdMX0VTKQpAQCAtNzgsNiArNzksNyBAQCBzdGF0aWMgY29uc3QgY2hh
ciogdmVydGV4VGVtcGxhdGVHRTMyMFZhcnMgPQogICAgICAgICBvdXQgdmVjMiB2X3RleENvb3Jk
OwogICAgICAgICBvdXQgdmVjMiB2X3RyYW5zZm9ybWVkVGV4Q29vcmQ7CiAgICAgICAgIG91dCBm
bG9hdCB2X2FudGlhbGlhczsKKyAgICAgICAgb3V0IHZlYzQgdl9ub25Qcm9qZWN0ZWRQb3NpdGlv
bjsKICAgICApOwogI2VuZGlmCiAKQEAgLTEzMyw3ICsxMzUsOCBAQCBzdGF0aWMgY29uc3QgY2hh
ciogdmVydGV4VGVtcGxhdGVDb21tb24gPQogICAgICAgICAgICAgdl90ZXhDb29yZCA9IHBvc2l0
aW9uOwogICAgICAgICAgICAgdmVjNCBjbGFtcGVkUG9zaXRpb24gPSBjbGFtcCh2ZWM0KHBvc2l0
aW9uLCAwLiwgMS4pLCAwLiwgMS4pOwogICAgICAgICAgICAgdl90cmFuc2Zvcm1lZFRleENvb3Jk
ID0gKHVfdGV4dHVyZVNwYWNlTWF0cml4ICogY2xhbXBlZFBvc2l0aW9uKS54eTsKLSAgICAgICAg
ICAgIGdsX1Bvc2l0aW9uID0gdV9wcm9qZWN0aW9uTWF0cml4ICogdV9tb2RlbFZpZXdNYXRyaXgg
KiB2ZWM0KHBvc2l0aW9uLCAwLiwgMS4pOworICAgICAgICAgICAgdl9ub25Qcm9qZWN0ZWRQb3Np
dGlvbiA9IHVfbW9kZWxWaWV3TWF0cml4ICogdmVjNChwb3NpdGlvbiwgMC4sIDEuKTsKKyAgICAg
ICAgICAgIGdsX1Bvc2l0aW9uID0gdV9wcm9qZWN0aW9uTWF0cml4ICogdl9ub25Qcm9qZWN0ZWRQ
b3NpdGlvbjsKICAgICAgICAgfQogICAgICk7CiAKQEAgLTE2OCw2ICsxNzEsMTYgQEAgc3RhdGlj
IGNvbnN0IGNoYXIqIHZlcnRleFRlbXBsYXRlQ29tbW9uID0KICAgICAgICAgR0xTTF9ESVJFQ1RJ
VkUoZGVmaW5lIFNhbXBsZXJFeHRlcm5hbE9FU1R5cGUgc2FtcGxlcjJEKSBcCiAgICAgR0xTTF9E
SVJFQ1RJVkUoZW5kaWYpCiAKKy8vIFRoZSBtYXggbnVtYmVyIG9mIHN0YWNrZWQgcm91bmRlZCBy
ZWN0YW5nbGUgY2xpcHMgYWxsb3dlZCBpcyAxMCwgd2hpY2ggaXMgYWxzbyB0aGUKKy8vIG1heCBu
dW1iZXIgb2YgdHJhbnNmb3JtcyB0aGF0IHdlIGNhbiBnZXQuIFdlIG5lZWQgMyBjb21wb25lbnRz
IGZvciBlYWNoIHJvdW5kZWQKKy8vIHJlY3RhbmdsZSBzbyB3ZSBuZWVkIDMwIGNvbXBvbmVudHMg
dG8gcmVjZWl2ZSB0aGUgMTAgcmVjdGFuZ2xlcy4KKy8vCisvLyBLZWVwIHRoaXMgaXMgc3luYyB3
aXRoIHRoZSB2YWx1ZXMgZGVmaW5lZCBpbiBDbGlwU3RhY2suaAorI2RlZmluZSBST1VOREVEX1JF
Q1RfQ09OU1RBTlRTICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgR0xTTF9ESVJFQ1RJVkUo
ZGVmaW5lIFJPVU5ERURfUkVDVF9NQVhfUkVDVFMgMTApIFwKKyAgICBHTFNMX0RJUkVDVElWRShk
ZWZpbmUgUk9VTkRFRF9SRUNUX0FSUkFZX1NJWkUgMzApIFwKKyAgICBHTFNMX0RJUkVDVElWRShk
ZWZpbmUgUk9VTkRFRF9SRUNUX0lOVkVSU0VfVFJBTlNGT1JNX0FSUkFZX1NJWkUgMTApCisKIC8v
IENvbW1vbiBoZWFkZXIgZm9yIGFsbCB2ZXJzaW9ucy4gV2UgZGVmaW5lIHRoZSBtYXRyaWNlcyB2
YXJpYWJsZXMgaGVyZSB0byBrZWVwIHRoZSBwcmVjaXNpb24KIC8vIGRpcmVjdGl2ZXMgc2NvcGU6
IHRoZSBmaXJzdCBvbmUgYXBwbGllcyB0byB0aGUgbWF0cmljZXMgdmFyaWFibGVzIGFuZCB0aGUg
bmV4dCBvbmUgdG8gdGhlCiAvLyByZXN0IG9mIHRoZW0uIFRoZSBwcmVjaXNpb24gaXMgb25seSB1
c2VkIGluIEdMRVMuCkBAIC0xNzUsNiArMTg4LDcgQEAgc3RhdGljIGNvbnN0IGNoYXIqIGZyYWdt
ZW50VGVtcGxhdGVIZWFkZXJDb21tb24gPQogICAgIFJFQ1RfVEVYVFVSRV9ESVJFQ1RJVkUKICAg
ICBBTlRJQUxJQVNJTkdfVEVYX0NPT1JEX0RJUkVDVElWRQogICAgIEJMVVJfQ09OU1RBTlRTCisg
ICAgUk9VTkRFRF9SRUNUX0NPTlNUQU5UUwogICAgIE9FU19FR0xfSU1BR0VfRVhURVJOQUxfRElS
RUNUSVZFCiAjaWYgVVNFKE9QRU5HTF9FUykKICAgICBURVhUVVJFX1NQQUNFX01BVFJJWF9QUkVD
SVNJT05fRElSRUNUSVZFCkBAIC0xOTksNiArMjEzLDcgQEAgc3RhdGljIGNvbnN0IGNoYXIqIGZy
YWdtZW50VGVtcGxhdGVMVDMyMFZhcnMgPQogICAgICAgICB2YXJ5aW5nIGZsb2F0IHZfYW50aWFs
aWFzOwogICAgICAgICB2YXJ5aW5nIHZlYzIgdl90ZXhDb29yZDsKICAgICAgICAgdmFyeWluZyB2
ZWMyIHZfdHJhbnNmb3JtZWRUZXhDb29yZDsKKyAgICAgICAgdmFyeWluZyB2ZWM0IHZfbm9uUHJv
amVjdGVkUG9zaXRpb247CiAgICAgKTsKIAogI2lmICFVU0UoT1BFTkdMX0VTKQpAQCAtMjA4LDYg
KzIyMyw3IEBAIHN0YXRpYyBjb25zdCBjaGFyKiBmcmFnbWVudFRlbXBsYXRlR0UzMjBWYXJzID0K
ICAgICAgICAgaW4gZmxvYXQgdl9hbnRpYWxpYXM7CiAgICAgICAgIGluIHZlYzIgdl90ZXhDb29y
ZDsKICAgICAgICAgaW4gdmVjMiB2X3RyYW5zZm9ybWVkVGV4Q29vcmQ7CisgICAgICAgIGluIHZl
YzQgdl9ub25Qcm9qZWN0ZWRQb3NpdGlvbjsKICAgICApOwogI2VuZGlmCiAKQEAgLTIyNiw2ICsy
NDIsOSBAQCBzdGF0aWMgY29uc3QgY2hhciogZnJhZ21lbnRUZW1wbGF0ZUNvbW1vbiA9CiAgICAg
ICAgIHVuaWZvcm0gdmVjMiB1X3NoYWRvd09mZnNldDsKICAgICAgICAgdW5pZm9ybSB2ZWM0IHVf
Y29sb3I7CiAgICAgICAgIHVuaWZvcm0gZmxvYXQgdV9nYXVzc2lhbktlcm5lbFtHQVVTU0lBTl9L
RVJORUxfSEFMRl9XSURUSF07CisgICAgICAgIHVuaWZvcm0gaW50IHVfcm91bmRlZFJlY3ROdW1i
ZXI7CisgICAgICAgIHVuaWZvcm0gdmVjNCB1X3JvdW5kZWRSZWN0W1JPVU5ERURfUkVDVF9BUlJB
WV9TSVpFXTsKKyAgICAgICAgdW5pZm9ybSBtYXQ0IHVfcm91bmRlZFJlY3RJbnZlcnNlVHJhbnNm
b3JtTWF0cml4W1JPVU5ERURfUkVDVF9JTlZFUlNFX1RSQU5TRk9STV9BUlJBWV9TSVpFXTsKIAog
ICAgICAgICB2b2lkIG5vb3AoaW5vdXQgdmVjNCBkdW1teVBhcmFtZXRlcikgeyB9CiAgICAgICAg
IHZvaWQgbm9vcChpbm91dCB2ZWM0IGR1bW15UGFyYW1ldGVyLCB2ZWMyIHRleENvb3JkKSB7IH0K
QEAgLTM5MCw2ICs0MDksNzAgQEAgc3RhdGljIGNvbnN0IGNoYXIqIGZyYWdtZW50VGVtcGxhdGVD
b21tb24gPQogCiAgICAgICAgIHZvaWQgYXBwbHlTb2xpZENvbG9yKGlub3V0IHZlYzQgY29sb3Ip
IHsgY29sb3IgKj0gdV9jb2xvcjsgfQogCisgICAgICAgIGZsb2F0IGVsbGlwc2lzRGlzdCh2ZWMy
IHAsIHZlYzIgcmFkaXVzKQorICAgICAgICB7CisgICAgICAgICAgICBpZiAocmFkaXVzID09IHZl
YzIoMCwgMCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIDAuMDsKKworICAgICAgICAgICAgdmVj
MiBwMCA9IHAgLyByYWRpdXM7CisgICAgICAgICAgICB2ZWMyIHAxID0gMi4wICogcDAgLyByYWRp
dXM7CisKKyAgICAgICAgICAgIHJldHVybiAoZG90KHAwLCBwMCkgLSAxLjApIC8gbGVuZ3RoIChw
MSk7CisgICAgICAgIH0KKworICAgICAgICBmbG9hdCBlbGxpcHNpc0NvdmVyYWdlKHZlYzIgcG9p
bnQsIHZlYzIgY2VudGVyLCB2ZWMyIHJhZGl1cykKKyAgICAgICAgeworICAgICAgICAgICAgZmxv
YXQgZCA9IGVsbGlwc2lzRGlzdChwb2ludCAtIGNlbnRlciwgcmFkaXVzKTsKKyAgICAgICAgICAg
IHJldHVybiBjbGFtcCgwLjUgLSBkLCAwLjAsIDEuMCk7CisgICAgICAgIH0KKworICAgICAgICBm
bG9hdCByb3VuZGVkUmVjdENvdmVyYWdlKHZlYzIgcCwgaW50IGluZGV4KQorICAgICAgICB7Cisg
ICAgICAgICAgICB2ZWM0IGJvdW5kcyA9IHZlYzQodV9yb3VuZGVkUmVjdFtpbmRleF0ueHksIHVf
cm91bmRlZFJlY3RbaW5kZXhdLnh5ICsgdV9yb3VuZGVkUmVjdFtpbmRleF0uencpOworCisgICAg
ICAgICAgICBpZiAocC54IDwgYm91bmRzLnggfHwgcC55IDwgYm91bmRzLnkgfHwgcC54ID49IGJv
dW5kcy56IHx8IHAueSA+PSBib3VuZHMudykKKyAgICAgICAgICAgICAgICByZXR1cm4gMC4wOwor
CisgICAgICAgICAgICB2ZWMyIHRvcExlZnRSYWRpaSA9IHVfcm91bmRlZFJlY3RbaW5kZXggKyAx
XS54eTsKKyAgICAgICAgICAgIHZlYzIgdG9wUmlnaHRSYWRpaSA9IHVfcm91bmRlZFJlY3RbaW5k
ZXggKyAxXS56dzsKKyAgICAgICAgICAgIHZlYzIgYm90dG9tTGVmdFJhZGlpID0gdV9yb3VuZGVk
UmVjdFtpbmRleCArIDJdLnh5OworICAgICAgICAgICAgdmVjMiBib3R0b21SaWdodFJhZGlpID0g
dV9yb3VuZGVkUmVjdFtpbmRleCArIDJdLnp3OworCisgICAgICAgICAgICB2ZWMyIHRvcExlZnRD
ZW50ZXIgPSBib3VuZHMueHkgKyB0b3BMZWZ0UmFkaWk7CisgICAgICAgICAgICB2ZWMyIHRvcFJp
Z2h0Q2VudGVyID0gYm91bmRzLnp5ICsgKHRvcFJpZ2h0UmFkaWkgKiB2ZWMyKC0xLCAxKSk7Cisg
ICAgICAgICAgICB2ZWMyIGJvdHRvbUxlZnRDZW50ZXIgPSBib3VuZHMueHcgKyAoYm90dG9tTGVm
dFJhZGlpICogdmVjMigxLCAtMSkpOworICAgICAgICAgICAgdmVjMiBib3R0b21SaWdodENlbnRl
ciA9IGJvdW5kcy56dyArIChib3R0b21SaWdodFJhZGlpICogdmVjMigtMSwgLTEpKTsKKworICAg
ICAgICAgICAgaWYgKHAueCA8IHRvcExlZnRDZW50ZXIueCAmJiBwLnkgPCB0b3BMZWZ0Q2VudGVy
LnkpCisgICAgICAgICAgICAgICAgcmV0dXJuIGVsbGlwc2lzQ292ZXJhZ2UocCwgdG9wTGVmdENl
bnRlciwgdG9wTGVmdFJhZGlpKTsKKworICAgICAgICAgICAgaWYgKHAueCA+IHRvcFJpZ2h0Q2Vu
dGVyLnggJiYgcC55IDwgdG9wUmlnaHRDZW50ZXIueSkKKyAgICAgICAgICAgICAgICByZXR1cm4g
ZWxsaXBzaXNDb3ZlcmFnZShwLCB0b3BSaWdodENlbnRlciwgdG9wUmlnaHRSYWRpaSk7CisKKyAg
ICAgICAgICAgIGlmIChwLnggPCBib3R0b21MZWZ0Q2VudGVyLnggJiYgcC55ID4gYm90dG9tTGVm
dENlbnRlci55KQorICAgICAgICAgICAgICAgIHJldHVybiBlbGxpcHNpc0NvdmVyYWdlKHAsIGJv
dHRvbUxlZnRDZW50ZXIsIGJvdHRvbUxlZnRSYWRpaSk7CisKKyAgICAgICAgICAgIGlmIChwLngg
PiBib3R0b21SaWdodENlbnRlci54ICYmIHAueSA+IGJvdHRvbVJpZ2h0Q2VudGVyLnkpCisgICAg
ICAgICAgICAgICAgcmV0dXJuIGVsbGlwc2lzQ292ZXJhZ2UocCwgYm90dG9tUmlnaHRDZW50ZXIs
IGJvdHRvbVJpZ2h0UmFkaWkpOworCisgICAgICAgICAgICByZXR1cm4gMS4wOworICAgICAgICB9
CisKKyAgICAgICAgdm9pZCBhcHBseVJvdW5kZWRSZWN0Q2xpcChpbm91dCB2ZWM0IGNvbG9yKQor
ICAgICAgICB7CisgICAgICAgICAgICAvLyBUaGlzIHdvcmtzIGJ5IGNoZWNraW5nIHdoZXRoZXIg
dGhlIGZyYWdtZW50IHBvc2l0aW9uLCBvbmNlIHRoZSB0cmFuc2Zvcm0gaXMgYXBwbGllZCwKKyAg
ICAgICAgICAgIC8vIGlzIGluc2lkZSB0aGUgZGVmaW5lZCByb3VuZGVkIHJlY3RhbmdsZSBvciBu
b3QuCisgICAgICAgICAgICAvLworICAgICAgICAgICAgLy8gV2UgY2FuJ3QgdXNlIGdsX2ZyYWdD
b29yZCBmb3IgdGhlIGZyYWdtZW50IHBvc2l0aW9uIGJlY2F1c2UgdGhhdHMgdGhlIHByb2plY3Rl
ZCBwb2ludAorICAgICAgICAgICAgLy8gYW5kIHRoZSBwcm9qZWN0aW9uIHNjcmV3cyB0aGUgWiBj
b21wb25lbnQuIFdlIG5lZWQgdGhlIHJlYWwgM0QgcG9zaXRpb24gdGhhdCBjb21lcyBmcm9tCisg
ICAgICAgICAgICAvLyB0aGUgbm9uUHJvamVjdGVkUG9zaXRpb24gdmFyaWFibGUuCisgICAgICAg
ICAgICBpbnQgblJlY3RzID0gbWluKFJPVU5ERURfUkVDVF9NQVhfUkVDVFMsIHVfcm91bmRlZFJl
Y3ROdW1iZXIpOworICAgICAgICAgICAgZm9yIChpbnQgcmVjdEluZGV4ID0gMDsgcmVjdEluZGV4
IDwgblJlY3RzOyByZWN0SW5kZXgrKykgeworICAgICAgICAgICAgICAgIHZlYzQgZnJhZ0Nvb3Jk
ID0gdV9yb3VuZGVkUmVjdEludmVyc2VUcmFuc2Zvcm1NYXRyaXhbcmVjdEluZGV4XSAqIHZfbm9u
UHJvamVjdGVkUG9zaXRpb247CisgICAgICAgICAgICAgICAgY29sb3IgKj0gcm91bmRlZFJlY3RD
b3ZlcmFnZShmcmFnQ29vcmQueHksIHJlY3RJbmRleCAqIDMpOworICAgICAgICAgICAgfQorICAg
ICAgICB9CisKICAgICAgICAgdm9pZCBtYWluKHZvaWQpCiAgICAgICAgIHsKICAgICAgICAgICAg
IHZlYzQgY29sb3IgPSB2ZWM0KDEuLCAxLiwgMS4sIDEuKTsKQEAgLTQxNSw2ICs0OTgsNyBAQCBz
dGF0aWMgY29uc3QgY2hhciogZnJhZ21lbnRUZW1wbGF0ZUNvbW1vbiA9CiAgICAgICAgICAgICBh
cHBseUFscGhhQmx1cklmTmVlZGVkKGNvbG9yLCB0ZXhDb29yZCk7CiAgICAgICAgICAgICBhcHBs
eUNvbnRlbnRUZXh0dXJlSWZOZWVkZWQoY29sb3IsIHRleENvb3JkKTsKICAgICAgICAgICAgIGFw
cGx5VGV4dHVyZUV4dGVybmFsT0VTSWZOZWVkZWQoY29sb3IsIHRleENvb3JkKTsKKyAgICAgICAg
ICAgIGFwcGx5Um91bmRlZFJlY3RDbGlwSWZOZWVkZWQoY29sb3IpOwogICAgICAgICAgICAgZ2xf
RnJhZ0NvbG9yID0gY29sb3I7CiAgICAgICAgIH0KICAgICApOwpAQCAtNDQ4LDYgKzUzMiw3IEBA
IFJlZjxUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbT4gVGV4dHVyZU1hcHBlclNoYWRlclByb2dy
YW06OmNyZWF0ZShUZXh0dXJlTWFwcGVyCiAgICAgU0VUX0FQUExJRVJfRlJPTV9PUFRJT05TKENv
bnRlbnRUZXh0dXJlKTsKICAgICBTRVRfQVBQTElFUl9GUk9NX09QVElPTlMoTWFudWFsUmVwZWF0
KTsKICAgICBTRVRfQVBQTElFUl9GUk9NX09QVElPTlMoVGV4dHVyZUV4dGVybmFsT0VTKTsKKyAg
ICBTRVRfQVBQTElFUl9GUk9NX09QVElPTlMoUm91bmRlZFJlY3RDbGlwKTsKIAogICAgIFN0cmlu
Z0J1aWxkZXIgdmVydGV4U2hhZGVyQnVpbGRlcjsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtLmgg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlclNo
YWRlclByb2dyYW0uaAppbmRleCBmZjgzNjQ4ZTcwZWQ0OWM4Mzk4MWE0MjhlNzMwZjAxNWYxN2Zj
NmIxLi5kNmFjNTAxODIxNzI2NzdkNjAxMTJhMDJlNGY4ZDc1YzU3MDBiNTEzIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlclNo
YWRlclByb2dyYW0uaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXht
YXAvVGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW0uaApAQCAtNDgsNiArNDgsOSBAQCBuYW1lc3Bh
Y2UgV2ViQ29yZSB7CiAgICAgbWFjcm8oZ2F1c3NpYW5LZXJuZWwpIFwKICAgICBtYWNybyhibHVy
UmFkaXVzKSBcCiAgICAgbWFjcm8oc2hhZG93T2Zmc2V0KSBcCisgICAgbWFjcm8ocm91bmRlZFJl
Y3ROdW1iZXIpIFwKKyAgICBtYWNybyhyb3VuZGVkUmVjdCkgXAorICAgIG1hY3JvKHJvdW5kZWRS
ZWN0SW52ZXJzZVRyYW5zZm9ybU1hdHJpeCkgXAogCiAjZGVmaW5lIFRFWE1BUF9TQU1QTEVSX1ZB
UklBQkxFUyhtYWNybykgXAogICAgIG1hY3JvKHNhbXBsZXIpIFwKQEAgLTk5LDYgKzEwMiw3IEBA
IHB1YmxpYzoKICAgICAgICAgVGV4dHVyZU5WMjEgICAgICA9IDFMIDw8IDIwLAogICAgICAgICBU
ZXh0dXJlUGFja2VkWVVWID0gMUwgPDwgMjEsCiAgICAgICAgIFRleHR1cmVFeHRlcm5hbE9FUyA9
IDFMIDw8IDIyLAorICAgICAgICBSb3VuZGVkUmVjdENsaXAgID0gMUwgPDwgMjMsCiAgICAgfTsK
IAogICAgIGVudW0gY2xhc3MgVmFyaWFibGVJRCB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0
L1NoYXJlZC9Db29yZGluYXRlZEdyYXBoaWNzL0Nvb3JkaW5hdGVkR3JhcGhpY3NTY2VuZS5jcHAg
Yi9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9Db29yZGluYXRlZEdyYXBoaWNzL0Nvb3JkaW5hdGVkR3Jh
cGhpY3NTY2VuZS5jcHAKaW5kZXggYzZlMzNhMTY3NmY3NzYxZTNjN2UzMTA2MzI2Nzc2OTEyZTll
ZjhkNC4uMDRmZmEyZjQzMjc2OTVhMmFhNzM4N2EwMjRmYTYyMTFjZDBjODY5YyAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYktpdC9TaGFyZWQvQ29vcmRpbmF0ZWRHcmFwaGljcy9Db29yZGluYXRlZEdy
YXBoaWNzU2NlbmUuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvU2hhcmVkL0Nvb3JkaW5hdGVkR3Jh
cGhpY3MvQ29vcmRpbmF0ZWRHcmFwaGljc1NjZW5lLmNwcApAQCAtNzEsNyArNzEsNyBAQCB2b2lk
IENvb3JkaW5hdGVkR3JhcGhpY3NTY2VuZTo6cGFpbnRUb0N1cnJlbnRHTENvbnRleHQoY29uc3Qg
VHJhbnNmb3JtYXRpb25NYXRyaQogICAgIGN1cnJlbnRSb290TGF5ZXItPnNldFRleHR1cmVNYXBw
ZXIobV90ZXh0dXJlTWFwcGVyLmdldCgpKTsKICAgICBib29sIHNjZW5lSGFzUnVubmluZ0FuaW1h
dGlvbnMgPSBjdXJyZW50Um9vdExheWVyLT5hcHBseUFuaW1hdGlvbnNSZWN1cnNpdmVseShNb25v
dG9uaWNUaW1lOjpub3coKSk7CiAgICAgbV90ZXh0dXJlTWFwcGVyLT5iZWdpblBhaW50aW5nKFBh
aW50RmxhZ3MpOwotICAgIG1fdGV4dHVyZU1hcHBlci0+YmVnaW5DbGlwKFRyYW5zZm9ybWF0aW9u
TWF0cml4KCksIGNsaXBSZWN0KTsKKyAgICBtX3RleHR1cmVNYXBwZXItPmJlZ2luQ2xpcChUcmFu
c2Zvcm1hdGlvbk1hdHJpeCgpLCBGbG9hdFJvdW5kZWRSZWN0KGNsaXBSZWN0KSk7CiAKICAgICBp
ZiAoY3VycmVudFJvb3RMYXllci0+dHJhbnNmb3JtKCkgIT0gbWF0cml4KQogICAgICAgICBjdXJy
ZW50Um9vdExheWVyLT5zZXRUcmFuc2Zvcm0obWF0cml4KTsKZGlmZiAtLWdpdCBhL0xheW91dFRl
c3RzL0NoYW5nZUxvZyBiL0xheW91dFRlc3RzL0NoYW5nZUxvZwppbmRleCBkMGUyZjcyNGQxZTU5
ODIzYzM4NjQ2ZjFlZjk4NzkyMWJjYjI5OWIxLi4zM2E5YzNmYThlNTcwMGI3ZjkzZjkzNTBiMTlj
MTljNzNjNWM3NWQ0IDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKKysrIGIvTGF5
b3V0VGVzdHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTQgQEAKKzIwMjAtMTAtMjIgIE1pZ3VlbCBH
b21leiAgPG1hZ29tZXpAaWdhbGlhLmNvbT4KKworICAgICAgICBbR1RLXVtXUEVdIEltcGxlbWVu
dCBhbnRpYWxpYXNlZCByb3VuZGVkIHJlY3RhbmdsZSBjbGlwcGluZyBpbiBUZXh0dXJlTWFwcGVy
CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNzQ0NTcK
KworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBVbnNraXAg
cGFzc2luZyB0ZXN0LgorCisgICAgICAgICogcGxhdGZvcm0vZ3RrL1Rlc3RFeHBlY3RhdGlvbnM6
CisKIDIwMjAtMTAtMjEgIEthcmwgUmFja2xlciAgPHJhY2tsZXJAYXBwbGUuY29tPgogCiAgICAg
ICAgIFJFR1JFU1NJT046IFsgQmlnIFN1ciBdIGZhc3QvdGV4dC9pbnRlcm5hdGlvbmFsL2NvbXBs
ZXgtY2hhcmFjdGVyLWJhc2VkLWZhbGxiYWNrLmh0bWwgaXMgYSBjb25zdGFudCBmYWlsdXJlCmRp
ZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9ndGsvVGVzdEV4cGVjdGF0aW9ucyBiL0xh
eW91dFRlc3RzL3BsYXRmb3JtL2d0ay9UZXN0RXhwZWN0YXRpb25zCmluZGV4IDM4ZmIwM2EyYTYy
ZGE4OTdlMGE5NzU5MTgxZjVmZWExNjljMzBlZmIuLjNiZGU3ZGFjYWUwNTczOGMyYjYyZjZiMzAy
ZmJiZTgxZTE2NGI1NjMgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL3BsYXRmb3JtL2d0ay9UZXN0
RXhwZWN0YXRpb25zCisrKyBiL0xheW91dFRlc3RzL3BsYXRmb3JtL2d0ay9UZXN0RXhwZWN0YXRp
b25zCkBAIC0zMzQwLDcgKzMzNDAsNiBAQCB3ZWJraXQub3JnL2IvMTkzNjQxIHdlYnJ0Yy92aWRl
by1zZXREaXJlY3Rpb24uaHRtbCBbIEZhaWx1cmUgXQogCiB3ZWJraXQub3JnL2IvMTk0Mzg0IGNv
bXBvc2l0aW5nL2NsaXBwaW5nL2JvcmRlci1yYWRpdXMtYXN5bmMtb3ZlcmZsb3ctY2xpcHBpbmct
bGF5ZXIuaHRtbCBbIEZhaWx1cmUgXQogd2Via2l0Lm9yZy9iLzIwNjAwMCBjb21wb3NpdGluZy9j
bGlwcGluZy9ib3JkZXItcmFkaXVzLWFzeW5jLW92ZXJmbG93LW5vbi1zdGFja2luZy5odG1sIFsg
SW1hZ2VPbmx5RmFpbHVyZSBdCi13ZWJraXQub3JnL2IvMjExMTIxIGNvbXBvc2l0aW5nL2NsaXBw
aW5nL2JvcmRlci1yYWRpdXMtb24td2ViZ2wuaHRtbCBbIEltYWdlT25seUZhaWx1cmUgXQogCiB3
ZWJraXQub3JnL2IvMTk0NjA2IGFjY2Vzc2liaWxpdHkvc2V0LXZhbHVlLW5vdC13b3JrLWZvci1k
aXNhYmxlZC1zbGlkZXJzLmh0bWwgWyBGYWlsdXJlIF0KIAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>412166</attachid>
            <date>2020-10-23 03:13:44 -0700</date>
            <delta_ts>2020-10-23 03:35:17 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-174457-20201023121342.patch</filename>
            <type>text/plain</type>
            <size>33729</size>
            <attacher name="Miguel Gomez">magomez</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjY4OTA2CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMTY2Y2ZlMGI1MWViM2Qz
Nzc1MDI4Mjg5NDhjY2JmYjc2ZjdhNDc4NS4uOGQzYjRiZjczYzg2NmY0ZmE3MWU5MTJkM2IyZGMy
OGZjOTJiMTQwZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQ3IEBACisyMDIwLTEwLTIzICBNaWd1
ZWwgR29tZXogIDxtYWdvbWV6QGlnYWxpYS5jb20+CisKKyAgICAgICAgW0dUS11bV1BFXSBJbXBs
ZW1lbnQgYW50aWFsaWFzZWQgcm91bmRlZCByZWN0YW5nbGUgY2xpcHBpbmcgaW4gVGV4dHVyZU1h
cHBlcgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTc0
NDU3CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgSW1w
bGVtZW50IHJvdW5kZWQgcmVjdGFuZ2xlIGNsaXBwaW5nIGluIFRleHR1cmVNYXBwZXJHTCwgc3Vw
cG9ydGluZyB1cCB0byAxMCBzaW11bHRhbmVvdXMKKyAgICAgICAgcm91bmRlZCByZWN0YW5nbGUg
Y2xpcHMuIFRleHR1cmVNYXBwZXI6OmJlZ2luQ2xpcCgpIG5vdyByZWNlaXZlcyBhIHJvdW5kZWQg
cmVjdGFuZ2xlLCBhbmQKKyAgICAgICAgaXQgYXBwbGllcyB0aGUgYXBwcm9wcmlhdGUgY2xpcHBp
bmcgbWV0aG9kIGFzIHJlcXVpcmVkLgorCisgICAgICAgIFRoZSByb3VuZGVkIHJlY3RhbmdsZSBj
bGlwIGltcGxlbWVudGF0aW9uIHVzZXMgdGhlIGZyYWdtZW50IHNoYWRlciB0byBjYWxjdWxhdGUg
d2hldGhlcgorICAgICAgICBlYWNoIHBpeGVsIGlzIGluc2lkZSB0aGUgZGVmaW5lZCByb3VuZGVk
IHJlY3RhbmdsZXMsIGFuZCBwYWludHMgb3Igc2tpcHMgaXQgYXMgbmVlZGVkLgorCisgICAgICAg
IENvdmVyZWQgYnkgZXhpc3RlbnQgdGVzdHMuCisKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGlj
cy90ZXhtYXAvQ2xpcFN0YWNrLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNsaXBTdGFjazo6YWRk
Um91bmRlZFJlY3QpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9DbGlwU3Rh
Y2suaDoKKyAgICAgICAgKFdlYkNvcmU6OkNsaXBTdGFjazo6U3RhdGU6OlN0YXRlKToKKyAgICAg
ICAgKFdlYkNvcmU6OkNsaXBTdGFjazo6cm91bmRlZFJlY3RDb21wb25lbnRzIGNvbnN0KToKKyAg
ICAgICAgKFdlYkNvcmU6OkNsaXBTdGFjazo6cm91bmRlZFJlY3RJbnZlcnNlVHJhbnNmb3JtQ29t
cG9uZW50cyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpDbGlwU3RhY2s6OnJvdW5kZWRSZWN0
Q291bnQgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6Q2xpcFN0YWNrOjppc1JvdW5kZWRSZWN0
Q2xpcEVuYWJsZWQgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6Q2xpcFN0YWNrOjppc1JvdW5k
ZWRSZWN0Q2xpcEFsbG93ZWQgY29uc3QpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3Rl
eG1hcC9UZXh0dXJlTWFwcGVyLmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFw
L1RleHR1cmVNYXBwZXJHTC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpwcmVwYXJlUm91bmRlZFJl
Y3RDbGlwKToKKyAgICAgICAgKFdlYkNvcmU6OlRleHR1cmVNYXBwZXJHTDo6ZHJhd1RleHR1cmUp
OgorICAgICAgICAoV2ViQ29yZTo6VGV4dHVyZU1hcHBlckdMOjpkcmF3VGV4dHVyZVBsYW5hcllV
Vik6CisgICAgICAgIChXZWJDb3JlOjpUZXh0dXJlTWFwcGVyR0w6OmRyYXdUZXh0dXJlU2VtaVBs
YW5hcllVVik6CisgICAgICAgIChXZWJDb3JlOjpUZXh0dXJlTWFwcGVyR0w6OmRyYXdUZXh0dXJl
UGFja2VkWVVWKToKKyAgICAgICAgKFdlYkNvcmU6OlRleHR1cmVNYXBwZXJHTDo6ZHJhd1NvbGlk
Q29sb3IpOgorICAgICAgICAoV2ViQ29yZTo6VGV4dHVyZU1hcHBlckdMOjpiZWdpblJvdW5kZWRS
ZWN0Q2xpcCk6CisgICAgICAgIChXZWJDb3JlOjpUZXh0dXJlTWFwcGVyR0w6OmJlZ2luQ2xpcCk6
CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJHTC5oOgor
ICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyTGF5ZXIuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6VGV4dHVyZU1hcHBlckxheWVyOjpwYWludFNlbGYpOgorICAg
ICAgICAoV2ViQ29yZTo6VGV4dHVyZU1hcHBlckxheWVyOjpwYWludFNlbGZBbmRDaGlsZHJlbik6
CisgICAgICAgIChXZWJDb3JlOjpUZXh0dXJlTWFwcGVyTGF5ZXI6OnBhaW50VXNpbmdPdmVybGFw
UmVnaW9ucyk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBw
ZXJTaGFkZXJQcm9ncmFtLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlRleHR1cmVNYXBwZXJTaGFk
ZXJQcm9ncmFtOjpjcmVhdGUpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9U
ZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbS5oOgorCiAyMDIwLTEwLTIyICBBbGV4IENocmlzdGVu
c2VuICA8YWNocmlzdGVuc2VuQHdlYmtpdC5vcmc+CiAKICAgICAgICAgTnVsbCBjaGVjayBwbGF0
Zm9ybVN0cmF0ZWdpZXMgd2hlbiBtYWtpbmcgYmxvYiByZWFkIHN0cmVhbSBmb3IgYW4gTlNVUkxS
ZXF1ZXN0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJL
aXQvQ2hhbmdlTG9nCmluZGV4IDUzNWQ4NjIzYTQ3YTlmNmMyNzE1ZjhjODRiZDQyZjdiNTA3MTk5
YzcuLjA3NzQzZDE5ZTNlZjNiZjUwOGJjODVlOGNkN2E5MDllNzZhZGVkNWQgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCkBA
IC0xLDMgKzEsMTUgQEAKKzIwMjAtMTAtMjMgIE1pZ3VlbCBHb21leiAgPG1hZ29tZXpAaWdhbGlh
LmNvbT4KKworICAgICAgICBbR1RLXVtXUEVdIEltcGxlbWVudCBhbnRpYWxpYXNlZCByb3VuZGVk
IHJlY3RhbmdsZSBjbGlwcGluZyBpbiBUZXh0dXJlTWFwcGVyCisgICAgICAgIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNzQ0NTcKKworICAgICAgICBSZXZpZXdlZCBi
eSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBVc2UgdGhlIG5ldyBUZXh0dXJlTWFwcGVyOjpi
ZWdpbkNsaXAoKSBtZXRob2QgdGhhdCByZWNlaXZlcyBhIEZsb2F0Um91bmRlZFJlY3QuCisKKyAg
ICAgICAgKiBTaGFyZWQvQ29vcmRpbmF0ZWRHcmFwaGljcy9Db29yZGluYXRlZEdyYXBoaWNzU2Nl
bmUuY3BwOgorICAgICAgICAoV2ViS2l0OjpDb29yZGluYXRlZEdyYXBoaWNzU2NlbmU6OnBhaW50
VG9DdXJyZW50R0xDb250ZXh0KToKKwogMjAyMC0xMC0yMyAgTWljaGFlbCBDYXRhbnphcm8gIDxt
Y2F0YW56YXJvQGdub21lLm9yZz4KIAogICAgICAgICBbU09VUF0gRml4IGNyYXNoIGluIFdlYlNv
Y2tldFRhc2sKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3Rl
eG1hcC9DbGlwU3RhY2suY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4
bWFwL0NsaXBTdGFjay5jcHAKaW5kZXggZGE4NDBiZjRmN2UyMTI5YjEyM2M4ZDE3ZTkyOGIwMDU2
YmFjZDk3My4uMjM1ZjE5NzNiNTIzNDY0YjM1MzAzYTQxN2IwYzdmYzM0MjhkOTViNSAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL0NsaXBTdGFjay5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL0NsaXBTdGFj
ay5jcHAKQEAgLTYyLDYgKzYyLDM3IEBAIHZvaWQgQ2xpcFN0YWNrOjpzZXRTdGVuY2lsSW5kZXgo
aW50IHN0ZW5jaWxJbmRleCkKICAgICBjbGlwU3RhdGVEaXJ0eSA9IHRydWU7CiB9CiAKK3ZvaWQg
Q2xpcFN0YWNrOjphZGRSb3VuZGVkUmVjdChjb25zdCBGbG9hdFJvdW5kZWRSZWN0JiByb3VuZGVk
UmVjdCwgY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmIG1hdHJpeCkKK3sKKyAgICBpZiAoY2xp
cFN0YXRlLnJvdW5kZWRSZWN0Q291bnQgPj0gc19yb3VuZGVkUmVjdE1heENsaXBzKQorICAgICAg
ICByZXR1cm47CisKKyAgICAvLyBFbnN1cmUgdGhhdCB0aGUgdmVjdG9ycyBob2xkaW5nIHRoZSBj
b21wb25lbnRzIGhhdmUgdGhlIHJlcXVpcmVkIHNpemUuCisgICAgbV9yb3VuZGVkUmVjdENvbXBv
bmVudHMuZ3JvdyhzX3JvdW5kZWRSZWN0Q29tcG9uZW50c0FycmF5U2l6ZSk7CisgICAgbV9yb3Vu
ZGVkUmVjdEludmVyc2VUcmFuc2Zvcm1Db21wb25lbnRzLmdyb3coc19yb3VuZGVkUmVjdEludmVy
c2VUcmFuc2Zvcm1Db21wb25lbnRzQXJyYXlTaXplKTsKKworICAgIC8vIENvcHkgdGhlIFJvdW5k
ZWRSZWN0IGNvbXBvbmVudHMgdG8gdGhlIGFwcHJvcHJpYXRlIHBvc2l0aW9uIGluIHRoZSBhcnJh
eS4KKyAgICBpbnQgYmFzZVBvc2l0aW9uID0gY2xpcFN0YXRlLnJvdW5kZWRSZWN0Q291bnQgKiBz
X3JvdW5kZWRSZWN0Q29tcG9uZW50c1BlclJlY3Q7CisgICAgbV9yb3VuZGVkUmVjdENvbXBvbmVu
dHNbYmFzZVBvc2l0aW9uXSA9IHJvdW5kZWRSZWN0LnJlY3QoKS54KCk7CisgICAgbV9yb3VuZGVk
UmVjdENvbXBvbmVudHNbYmFzZVBvc2l0aW9uICsgMV0gPSByb3VuZGVkUmVjdC5yZWN0KCkueSgp
OworICAgIG1fcm91bmRlZFJlY3RDb21wb25lbnRzW2Jhc2VQb3NpdGlvbiArIDJdID0gcm91bmRl
ZFJlY3QucmVjdCgpLndpZHRoKCk7CisgICAgbV9yb3VuZGVkUmVjdENvbXBvbmVudHNbYmFzZVBv
c2l0aW9uICsgM10gPSByb3VuZGVkUmVjdC5yZWN0KCkuaGVpZ2h0KCk7CisgICAgbV9yb3VuZGVk
UmVjdENvbXBvbmVudHNbYmFzZVBvc2l0aW9uICsgNF0gPSByb3VuZGVkUmVjdC5yYWRpaSgpLnRv
cExlZnQoKS53aWR0aCgpOworICAgIG1fcm91bmRlZFJlY3RDb21wb25lbnRzW2Jhc2VQb3NpdGlv
biArIDVdID0gcm91bmRlZFJlY3QucmFkaWkoKS50b3BMZWZ0KCkuaGVpZ2h0KCk7CisgICAgbV9y
b3VuZGVkUmVjdENvbXBvbmVudHNbYmFzZVBvc2l0aW9uICsgNl0gPSByb3VuZGVkUmVjdC5yYWRp
aSgpLnRvcFJpZ2h0KCkud2lkdGgoKTsKKyAgICBtX3JvdW5kZWRSZWN0Q29tcG9uZW50c1tiYXNl
UG9zaXRpb24gKyA3XSA9IHJvdW5kZWRSZWN0LnJhZGlpKCkudG9wUmlnaHQoKS5oZWlnaHQoKTsK
KyAgICBtX3JvdW5kZWRSZWN0Q29tcG9uZW50c1tiYXNlUG9zaXRpb24gKyA4XSA9IHJvdW5kZWRS
ZWN0LnJhZGlpKCkuYm90dG9tTGVmdCgpLndpZHRoKCk7CisgICAgbV9yb3VuZGVkUmVjdENvbXBv
bmVudHNbYmFzZVBvc2l0aW9uICsgOV0gPSByb3VuZGVkUmVjdC5yYWRpaSgpLmJvdHRvbUxlZnQo
KS5oZWlnaHQoKTsKKyAgICBtX3JvdW5kZWRSZWN0Q29tcG9uZW50c1tiYXNlUG9zaXRpb24gKyAx
MF0gPSByb3VuZGVkUmVjdC5yYWRpaSgpLmJvdHRvbVJpZ2h0KCkud2lkdGgoKTsKKyAgICBtX3Jv
dW5kZWRSZWN0Q29tcG9uZW50c1tiYXNlUG9zaXRpb24gKyAxMV0gPSByb3VuZGVkUmVjdC5yYWRp
aSgpLmJvdHRvbVJpZ2h0KCkuaGVpZ2h0KCk7CisKKyAgICAvLyBDb3B5IHRoZSBUcmFuc2Zvcm1h
dGlvbk1hdHJpeCBjb21wb25lbnRzIHRvIHRoZSBhcHByb3ByaWF0ZSBwb3NpdGlvbiBpbiB0aGUg
YXJyYXkuCisgICAgYmFzZVBvc2l0aW9uID0gY2xpcFN0YXRlLnJvdW5kZWRSZWN0Q291bnQgKiBz
X3JvdW5kZWRSZWN0SW52ZXJzZVRyYW5zZm9ybUNvbXBvbmVudHNQZXJSZWN0OworICAgIG1lbWNw
eShtX3JvdW5kZWRSZWN0SW52ZXJzZVRyYW5zZm9ybUNvbXBvbmVudHMuZGF0YSgpICsgYmFzZVBv
c2l0aW9uLCBtYXRyaXgudG9Db2x1bW5NYWpvckZsb2F0QXJyYXkoKS5kYXRhKCksIHNfcm91bmRl
ZFJlY3RJbnZlcnNlVHJhbnNmb3JtQ29tcG9uZW50c1BlclJlY3QgKiBzaXplb2YoZmxvYXQpKTsK
KworICAgIGNsaXBTdGF0ZS5yb3VuZGVkUmVjdENvdW50Kys7Cit9CisKIHZvaWQgQ2xpcFN0YWNr
OjphcHBseSgpCiB7CiAgICAgaWYgKGNsaXBTdGF0ZS5zY2lzc29yQm94LmlzRW1wdHkoKSkKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9DbGlwU3Rh
Y2suaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9DbGlwU3RhY2su
aAppbmRleCAyNjdjZTQwOTYwMTJmYjE3ZTc2OGU5MWMyNWZhMDk5MGQ0ZTA5OWU5Li43MjJkNWZh
YWIyMjJjYjg2ZTBjYzc5ODA0MDBmODk5YzdjMGY1NDJhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvQ2xpcFN0YWNrLmgKKysrIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL0NsaXBTdGFjay5oCkBAIC0yMSwyMiArMjEs
NDEgQEAKICNpZm5kZWYgQ2xpcFN0YWNrX2gKICNkZWZpbmUgQ2xpcFN0YWNrX2gKIAorI2luY2x1
ZGUgIkZsb2F0Um91bmRlZFJlY3QuaCIKICNpbmNsdWRlICJJbnRSZWN0LmgiCiAjaW5jbHVkZSAi
SW50U2l6ZS5oIgorI2luY2x1ZGUgIlRyYW5zZm9ybWF0aW9uTWF0cml4LmgiCiAjaW5jbHVkZSA8
d3RmL1ZlY3Rvci5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKKy8vIEJlY2F1c2UgR0xTTCB1
bmlmb3JtIGFycmF5cyBuZWVkIHRvIGhhdmUgYSBkZWZpbmVkIHNpemUsIHdlIG5lZWQgdG8gcHV0
IGEgbGltaXQgdG8gdGhlIG51bWJlciBvZiBzaW11bHRhbmVvdXMKKy8vIHJvdW5kZWQgcmVjdGFu
Z2xlIGNsaXBzIHRoYXQgd2UncmUgZ29pbmcgdG8gYWxsb3cuIEN1cnJlbnRseSB0aGlzIGlzIGRl
ZmluZWQgdG8gMTAuCisvLyBUaGlzIHZhbHVlIG11c3QgYmUga2VwdCBpbiBzeW5jIHdpdGggdGhl
IHNpemVzIGRlZmluZWQgaW4gVGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW0uY3BwLgorc3RhdGlj
IGNvbnN0IHVuc2lnbmVkIHNfcm91bmRlZFJlY3RNYXhDbGlwcyA9IDEwOworCisvLyBXaGVuIGNv
bnZlcnRpbmcgYSByb3VuZGVkIHJlY3RhbmdsZSB0byBhbiBhcnJheSBvZiBmbG9hdHMsIHdlIG5l
ZWQgMTIgZWxlbWVudHMuIFNvIHRoZSBzaXplIG9mIHRoZSBhcnJheQorLy8gcmVxdWlyZWQgdG8g
Y29udGFpbiB0aGUgMTAgcmVjdGFuZ2xlcyBpcyAxMiAqIDEwID0gMTIwLgorLy8gVGhpcyB2YWx1
ZSBtdXN0IGJlIGtlcHQgaW4gc3luYyB3aXRoIHRoZSBzaXplcyBkZWZpbmVkIGluIFRleHR1cmVN
YXBwZXJTaGFkZXJQcm9ncmFtLmNwcC4KK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBzX3JvdW5kZWRS
ZWN0Q29tcG9uZW50c1BlclJlY3QgPSAxMjsKK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBzX3JvdW5k
ZWRSZWN0Q29tcG9uZW50c0FycmF5U2l6ZSA9IHNfcm91bmRlZFJlY3RNYXhDbGlwcyAqIHNfcm91
bmRlZFJlY3RDb21wb25lbnRzUGVyUmVjdDsKKworLy8gV2hlbiBjb252ZXJ0aW5nIGEgdHJhbnNm
b3JtYXRpb24gbWF0cml4IHRvIGFuIGFycmF5IG9mIGZsb2F0cywgd2UgbmVlZCAxNiBlbGVtZW50
cy4gU28gdGhlIHNpemUgb2YgdGhlIGFycmF5CisvLyByZXF1aXJlZCB0byBjb250YWluIHRoZSAx
MCBtYXRyaWNlcyBpcyAxNiAqIDEwID0gMTYwLgorLy8gVGhpcyB2YWx1ZSBtdXN0IGJlIGtlcHQg
aW4gc3luYyB3aXRoIHRoZSBzaXplcyBkZWZpbmVkIGluIFRleHR1cmVNYXBwZXJTaGFkZXJQcm9n
cmFtLmNwcC4KK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBzX3JvdW5kZWRSZWN0SW52ZXJzZVRyYW5z
Zm9ybUNvbXBvbmVudHNQZXJSZWN0ID0gMTY7CitzdGF0aWMgY29uc3QgdW5zaWduZWQgc19yb3Vu
ZGVkUmVjdEludmVyc2VUcmFuc2Zvcm1Db21wb25lbnRzQXJyYXlTaXplID0gc19yb3VuZGVkUmVj
dE1heENsaXBzICogc19yb3VuZGVkUmVjdEludmVyc2VUcmFuc2Zvcm1Db21wb25lbnRzUGVyUmVj
dDsKKwogY2xhc3MgQ2xpcFN0YWNrIHsKIHB1YmxpYzoKICAgICBzdHJ1Y3QgU3RhdGUgewotICAg
ICAgICBTdGF0ZShjb25zdCBJbnRSZWN0JiBzY2lzc29ycyA9IEludFJlY3QoKSwgaW50IHN0ZW5j
aWwgPSAxKQorICAgICAgICBTdGF0ZShjb25zdCBJbnRSZWN0JiBzY2lzc29ycyA9IEludFJlY3Qo
KSkKICAgICAgICAgICAgIDogc2Npc3NvckJveChzY2lzc29ycykKLSAgICAgICAgICAgICwgc3Rl
bmNpbEluZGV4KHN0ZW5jaWwpCiAgICAgICAgIHsgfQogCiAgICAgICAgIEludFJlY3Qgc2Npc3Nv
ckJveDsKLSAgICAgICAgaW50IHN0ZW5jaWxJbmRleDsKKyAgICAgICAgaW50IHN0ZW5jaWxJbmRl
eCB7IDEgfTsKKyAgICAgICAgdW5zaWduZWQgcm91bmRlZFJlY3RDb3VudCB7IDAgfTsKICAgICB9
OwogCiAgICAgLy8gWS1heGlzIHNob3VsZCBiZSBpbnZlcnRlZCBvbmx5IHdoZW4gcGFpbnRpbmcg
aW50byB0aGUgd2luZG93LgpAQCAtNTQsNiArNzMsMTMgQEAgcHVibGljOgogICAgIHZvaWQgc2V0
U3RlbmNpbEluZGV4KGludCk7CiAgICAgaW50IGdldFN0ZW5jaWxJbmRleCgpIGNvbnN0IHsgcmV0
dXJuIGNsaXBTdGF0ZS5zdGVuY2lsSW5kZXg7IH0KIAorICAgIHZvaWQgYWRkUm91bmRlZFJlY3Qo
Y29uc3QgRmxvYXRSb3VuZGVkUmVjdCYsIGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4Jik7Cisg
ICAgY29uc3QgZmxvYXQqIHJvdW5kZWRSZWN0Q29tcG9uZW50cygpIGNvbnN0IHsgcmV0dXJuIG1f
cm91bmRlZFJlY3RDb21wb25lbnRzLmRhdGEoKTsgfQorICAgIGNvbnN0IGZsb2F0KiByb3VuZGVk
UmVjdEludmVyc2VUcmFuc2Zvcm1Db21wb25lbnRzKCkgY29uc3QgeyByZXR1cm4gbV9yb3VuZGVk
UmVjdEludmVyc2VUcmFuc2Zvcm1Db21wb25lbnRzLmRhdGEoKTsgfQorICAgIHVuc2lnbmVkIHJv
dW5kZWRSZWN0Q291bnQoKSBjb25zdCB7IHJldHVybiBjbGlwU3RhdGUucm91bmRlZFJlY3RDb3Vu
dDsgfQorICAgIGJvb2wgaXNSb3VuZGVkUmVjdENsaXBFbmFibGVkKCkgY29uc3QgeyByZXR1cm4g
ISFjbGlwU3RhdGUucm91bmRlZFJlY3RDb3VudDsgfQorICAgIGJvb2wgaXNSb3VuZGVkUmVjdENs
aXBBbGxvd2VkKCkgY29uc3QgeyByZXR1cm4gY2xpcFN0YXRlLnJvdW5kZWRSZWN0Q291bnQgPCBz
X3JvdW5kZWRSZWN0TWF4Q2xpcHM7IH0KKwogICAgIHZvaWQgYXBwbHkoKTsKICAgICB2b2lkIGFw
cGx5SWZOZWVkZWQoKTsKIApAQCAtNjUsNiArOTEsOCBAQCBwcml2YXRlOgogICAgIEludFNpemUg
c2l6ZTsKICAgICBib29sIGNsaXBTdGF0ZURpcnR5IHsgZmFsc2UgfTsKICAgICBZQXhpc01vZGUg
eUF4aXNNb2RlIHsgWUF4aXNNb2RlOjpEZWZhdWx0IH07CisgICAgVmVjdG9yPGZsb2F0LCBzX3Jv
dW5kZWRSZWN0Q29tcG9uZW50c0FycmF5U2l6ZT4gbV9yb3VuZGVkUmVjdENvbXBvbmVudHM7Cisg
ICAgVmVjdG9yPGZsb2F0LCBzX3JvdW5kZWRSZWN0SW52ZXJzZVRyYW5zZm9ybUNvbXBvbmVudHNB
cnJheVNpemU+IG1fcm91bmRlZFJlY3RJbnZlcnNlVHJhbnNmb3JtQ29tcG9uZW50czsKIH07CiAK
IH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlci5oCmluZGV4IGVlYjBmY2E0MWFmYmEw
YTQxMTBjNDRhYmM4NDZjYjk3NzA2MzY4MGYuLjMzNGRjYWU4NTcwZWI4YTBlMTI4NmI0ODllYTI4
ZDY3NDhhODAyYzggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L3RleG1hcC9UZXh0dXJlTWFwcGVyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXIuaApAQCAtMzcsNiArMzcsNyBAQCBjbGFzcyBCaXRt
YXBUZXh0dXJlUG9vbDsKIGNsYXNzIEdyYXBoaWNzTGF5ZXI7CiBjbGFzcyBUZXh0dXJlTWFwcGVy
OwogY2xhc3MgRmlsdGVyT3BlcmF0aW9uczsKK2NsYXNzIEZsb2F0Um91bmRlZFJlY3Q7CiAKIGNs
YXNzIFRleHR1cmVNYXBwZXIgewogICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwpAQCAtNzUs
NyArNzYsNyBAQCBwdWJsaWM6CiAKICAgICAvLyBtYWtlcyBhIHN1cmZhY2UgdGhlIHRhcmdldCBm
b3IgdGhlIGZvbGxvd2luZyBkcmF3VGV4dHVyZSBjYWxscy4KICAgICB2aXJ0dWFsIHZvaWQgYmlu
ZFN1cmZhY2UoQml0bWFwVGV4dHVyZSogc3VyZmFjZSkgPSAwOwotICAgIHZpcnR1YWwgdm9pZCBi
ZWdpbkNsaXAoY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmLCBjb25zdCBGbG9hdFJlY3QmKSA9
IDA7CisgICAgdmlydHVhbCB2b2lkIGJlZ2luQ2xpcChjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJp
eCYsIGNvbnN0IEZsb2F0Um91bmRlZFJlY3QmKSA9IDA7CiAgICAgdmlydHVhbCB2b2lkIGVuZENs
aXAoKSA9IDA7CiAgICAgdmlydHVhbCBJbnRSZWN0IGNsaXBCb3VuZHMoKSA9IDA7CiAgICAgdmly
dHVhbCB2b2lkIGJlZ2luUHJlc2VydmVzM0QoKSB7IH07CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlckdMLmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyR0wuY3BwCmlu
ZGV4IDU0MGM0MGJiNGMxZjdjNzAyNDRhOGIwM2RiMWNmYTU5YzRiNmY2OTUuLjE4ODk5ZTU5OGY3
NmNmMmNjMTA5MjhkZWM1ZmFmNWU3ZWZjNzg4ZmMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyR0wuY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyR0wuY3BwCkBA
IC0yOSw2ICsyOSw3IEBACiAjaW5jbHVkZSAiRXh0ZW5zaW9uc0dMLmgiCiAjaW5jbHVkZSAiRmls
dGVyT3BlcmF0aW9ucy5oIgogI2luY2x1ZGUgIkZsb2F0UXVhZC5oIgorI2luY2x1ZGUgIkZsb2F0
Um91bmRlZFJlY3QuaCIKICNpbmNsdWRlICJHTENvbnRleHQuaCIKICNpbmNsdWRlICJHcmFwaGlj
c0NvbnRleHQuaCIKICNpbmNsdWRlICJJbWFnZS5oIgpAQCAtNDQyLDYgKzQ0MywxNSBAQCBzdGF0
aWMgVHJhbnNmb3JtYXRpb25NYXRyaXggY29sb3JTcGFjZU1hdHJpeEZvckZsYWdzKFRleHR1cmVN
YXBwZXJHTDo6RmxhZ3MgZmxhZwogICAgIHJldHVybiBtYXRyaXg7CiB9CiAKK3N0YXRpYyB2b2lk
IHByZXBhcmVSb3VuZGVkUmVjdENsaXAoVGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW0mIHByb2dy
YW0sIGNvbnN0IGZsb2F0KiByZWN0cywgY29uc3QgZmxvYXQqIHRyYW5zZm9ybXMsIGludCBuUmVj
dHMpCit7CisgICAgZ2xVc2VQcm9ncmFtKHByb2dyYW0ucHJvZ3JhbUlEKCkpOworCisgICAgZ2xV
bmlmb3JtMWkocHJvZ3JhbS5yb3VuZGVkUmVjdE51bWJlckxvY2F0aW9uKCksIG5SZWN0cyk7Cisg
ICAgZ2xVbmlmb3JtNGZ2KHByb2dyYW0ucm91bmRlZFJlY3RMb2NhdGlvbigpLCAzICogblJlY3Rz
LCByZWN0cyk7CisgICAgZ2xVbmlmb3JtTWF0cml4NGZ2KHByb2dyYW0ucm91bmRlZFJlY3RJbnZl
cnNlVHJhbnNmb3JtTWF0cml4TG9jYXRpb24oKSwgblJlY3RzLCBmYWxzZSwgdHJhbnNmb3Jtcyk7
Cit9CisKIHZvaWQgVGV4dHVyZU1hcHBlckdMOjpkcmF3VGV4dHVyZShjb25zdCBCaXRtYXBUZXh0
dXJlJiB0ZXh0dXJlLCBjb25zdCBGbG9hdFJlY3QmIHRhcmdldFJlY3QsIGNvbnN0IFRyYW5zZm9y
bWF0aW9uTWF0cml4JiBtYXRyaXgsIGZsb2F0IG9wYWNpdHksIHVuc2lnbmVkIGV4cG9zZWRFZGdl
cykKIHsKICAgICBpZiAoIXRleHR1cmUuaXNWYWxpZCgpKQpAQCAtNDg5LDExICs0OTksMTkgQEAg
dm9pZCBUZXh0dXJlTWFwcGVyR0w6OmRyYXdUZXh0dXJlKEdMdWludCB0ZXh0dXJlLCBGbGFncyBm
bGFncywgY29uc3QgSW50U2l6ZSYgdGUKICAgICBpZiAodXNlQW50aWFsaWFzaW5nIHx8IG9wYWNp
dHkgPCAxKQogICAgICAgICBmbGFncyB8PSBTaG91bGRCbGVuZDsKIAorICAgIGlmIChjbGlwU3Rh
Y2soKS5pc1JvdW5kZWRSZWN0Q2xpcEVuYWJsZWQoKSkgeworICAgICAgICBvcHRpb25zIHw9IFRl
eHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtOjpSb3VuZGVkUmVjdENsaXA7CisgICAgICAgIGZsYWdz
IHw9IFNob3VsZEJsZW5kOworICAgIH0KKwogICAgIFJlZjxUZXh0dXJlTWFwcGVyU2hhZGVyUHJv
Z3JhbT4gcHJvZ3JhbSA9IGRhdGEoKS5nZXRTaGFkZXJQcm9ncmFtKG9wdGlvbnMpOwogCiAgICAg
aWYgKGZpbHRlcikKICAgICAgICAgcHJlcGFyZUZpbHRlclByb2dyYW0ocHJvZ3JhbS5nZXQoKSwg
KmZpbHRlci5nZXQoKSwgZGF0YSgpLmZpbHRlckluZm8tPnBhc3MsIHRleHR1cmVTaXplLCBmaWx0
ZXJDb250ZW50VGV4dHVyZUlEKTsKIAorICAgIGlmIChjbGlwU3RhY2soKS5pc1JvdW5kZWRSZWN0
Q2xpcEVuYWJsZWQoKSkKKyAgICAgICAgcHJlcGFyZVJvdW5kZWRSZWN0Q2xpcChwcm9ncmFtLmdl
dCgpLCBjbGlwU3RhY2soKS5yb3VuZGVkUmVjdENvbXBvbmVudHMoKSwgY2xpcFN0YWNrKCkucm91
bmRlZFJlY3RJbnZlcnNlVHJhbnNmb3JtQ29tcG9uZW50cygpLCBjbGlwU3RhY2soKS5yb3VuZGVk
UmVjdENvdW50KCkpOworCiAgICAgZHJhd1RleHR1cmVkUXVhZFdpdGhQcm9ncmFtKHByb2dyYW0u
Z2V0KCksIHRleHR1cmUsIGZsYWdzLCB0ZXh0dXJlU2l6ZSwgdGFyZ2V0UmVjdCwgbW9kZWxWaWV3
TWF0cml4LCBvcGFjaXR5KTsKIH0KIApAQCAtNTUyLDExICs1NzAsMTkgQEAgdm9pZCBUZXh0dXJl
TWFwcGVyR0w6OmRyYXdUZXh0dXJlUGxhbmFyWVVWKGNvbnN0IHN0ZDo6YXJyYXk8R0x1aW50LCAz
PiYgdGV4dHVyZXMKICAgICBpZiAodXNlQW50aWFsaWFzaW5nIHx8IG9wYWNpdHkgPCAxKQogICAg
ICAgICBmbGFncyB8PSBTaG91bGRCbGVuZDsKIAorICAgIGlmIChjbGlwU3RhY2soKS5pc1JvdW5k
ZWRSZWN0Q2xpcEVuYWJsZWQoKSkgeworICAgICAgICBvcHRpb25zIHw9IFRleHR1cmVNYXBwZXJT
aGFkZXJQcm9ncmFtOjpSb3VuZGVkUmVjdENsaXA7CisgICAgICAgIGZsYWdzIHw9IFNob3VsZEJs
ZW5kOworICAgIH0KKwogICAgIFJlZjxUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbT4gcHJvZ3Jh
bSA9IGRhdGEoKS5nZXRTaGFkZXJQcm9ncmFtKG9wdGlvbnMpOwogCiAgICAgaWYgKGZpbHRlcikK
ICAgICAgICAgcHJlcGFyZUZpbHRlclByb2dyYW0ocHJvZ3JhbS5nZXQoKSwgKmZpbHRlci5nZXQo
KSwgZGF0YSgpLmZpbHRlckluZm8tPnBhc3MsIHRleHR1cmVTaXplLCBmaWx0ZXJDb250ZW50VGV4
dHVyZUlEKTsKIAorICAgIGlmIChjbGlwU3RhY2soKS5pc1JvdW5kZWRSZWN0Q2xpcEVuYWJsZWQo
KSkKKyAgICAgICAgcHJlcGFyZVJvdW5kZWRSZWN0Q2xpcChwcm9ncmFtLmdldCgpLCBjbGlwU3Rh
Y2soKS5yb3VuZGVkUmVjdENvbXBvbmVudHMoKSwgY2xpcFN0YWNrKCkucm91bmRlZFJlY3RJbnZl
cnNlVHJhbnNmb3JtQ29tcG9uZW50cygpLCBjbGlwU3RhY2soKS5yb3VuZGVkUmVjdENvdW50KCkp
OworCiAgICAgVmVjdG9yPHN0ZDo6cGFpcjxHTHVpbnQsIEdMdWludD4gPiB0ZXh0dXJlc0FuZFNh
bXBsZXJzID0gewogICAgICAgICB7IHRleHR1cmVzWzBdLCBwcm9ncmFtLT5zYW1wbGVyWUxvY2F0
aW9uKCkgfSwKICAgICAgICAgeyB0ZXh0dXJlc1sxXSwgcHJvZ3JhbS0+c2FtcGxlclVMb2NhdGlv
bigpIH0sCkBAIC02MDIsMTEgKzYyOCwxOSBAQCB2b2lkIFRleHR1cmVNYXBwZXJHTDo6ZHJhd1Rl
eHR1cmVTZW1pUGxhbmFyWVVWKGNvbnN0IHN0ZDo6YXJyYXk8R0x1aW50LCAyPiYgdGV4dAogICAg
IGlmICh1c2VBbnRpYWxpYXNpbmcgfHwgb3BhY2l0eSA8IDEpCiAgICAgICAgIGZsYWdzIHw9IFNo
b3VsZEJsZW5kOwogCisgICAgaWYgKGNsaXBTdGFjaygpLmlzUm91bmRlZFJlY3RDbGlwRW5hYmxl
ZCgpKSB7CisgICAgICAgIG9wdGlvbnMgfD0gVGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW06OlJv
dW5kZWRSZWN0Q2xpcDsKKyAgICAgICAgZmxhZ3MgfD0gU2hvdWxkQmxlbmQ7CisgICAgfQorCiAg
ICAgUmVmPFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtPiBwcm9ncmFtID0gZGF0YSgpLmdldFNo
YWRlclByb2dyYW0ob3B0aW9ucyk7CiAKICAgICBpZiAoZmlsdGVyKQogICAgICAgICBwcmVwYXJl
RmlsdGVyUHJvZ3JhbShwcm9ncmFtLmdldCgpLCAqZmlsdGVyLmdldCgpLCBkYXRhKCkuZmlsdGVy
SW5mby0+cGFzcywgdGV4dHVyZVNpemUsIGZpbHRlckNvbnRlbnRUZXh0dXJlSUQpOwogCisgICAg
aWYgKGNsaXBTdGFjaygpLmlzUm91bmRlZFJlY3RDbGlwRW5hYmxlZCgpKQorICAgICAgICBwcmVw
YXJlUm91bmRlZFJlY3RDbGlwKHByb2dyYW0uZ2V0KCksIGNsaXBTdGFjaygpLnJvdW5kZWRSZWN0
Q29tcG9uZW50cygpLCBjbGlwU3RhY2soKS5yb3VuZGVkUmVjdEludmVyc2VUcmFuc2Zvcm1Db21w
b25lbnRzKCksIGNsaXBTdGFjaygpLnJvdW5kZWRSZWN0Q291bnQoKSk7CisKICAgICBWZWN0b3I8
c3RkOjpwYWlyPEdMdWludCwgR0x1aW50PiA+IHRleHR1cmVzQW5kU2FtcGxlcnMgPSB7CiAgICAg
ICAgIHsgdGV4dHVyZXNbMF0sIHByb2dyYW0tPnNhbXBsZXJZTG9jYXRpb24oKSB9LAogICAgICAg
ICB7IHRleHR1cmVzWzFdLCBwcm9ncmFtLT5zYW1wbGVyVUxvY2F0aW9uKCkgfQpAQCAtNjUwLDEx
ICs2ODQsMTkgQEAgdm9pZCBUZXh0dXJlTWFwcGVyR0w6OmRyYXdUZXh0dXJlUGFja2VkWVVWKEdM
dWludCB0ZXh0dXJlLCBjb25zdCBzdGQ6OmFycmF5PEdMZmwKICAgICBpZiAodXNlQW50aWFsaWFz
aW5nIHx8IG9wYWNpdHkgPCAxKQogICAgICAgICBmbGFncyB8PSBTaG91bGRCbGVuZDsKIAorICAg
IGlmIChjbGlwU3RhY2soKS5pc1JvdW5kZWRSZWN0Q2xpcEVuYWJsZWQoKSkgeworICAgICAgICBv
cHRpb25zIHw9IFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtOjpSb3VuZGVkUmVjdENsaXA7Cisg
ICAgICAgIGZsYWdzIHw9IFNob3VsZEJsZW5kOworICAgIH0KKwogICAgIFJlZjxUZXh0dXJlTWFw
cGVyU2hhZGVyUHJvZ3JhbT4gcHJvZ3JhbSA9IGRhdGEoKS5nZXRTaGFkZXJQcm9ncmFtKG9wdGlv
bnMpOwogCiAgICAgaWYgKGZpbHRlcikKICAgICAgICAgcHJlcGFyZUZpbHRlclByb2dyYW0ocHJv
Z3JhbS5nZXQoKSwgKmZpbHRlci5nZXQoKSwgZGF0YSgpLmZpbHRlckluZm8tPnBhc3MsIHRleHR1
cmVTaXplLCBmaWx0ZXJDb250ZW50VGV4dHVyZUlEKTsKIAorICAgIGlmIChjbGlwU3RhY2soKS5p
c1JvdW5kZWRSZWN0Q2xpcEVuYWJsZWQoKSkKKyAgICAgICAgcHJlcGFyZVJvdW5kZWRSZWN0Q2xp
cChwcm9ncmFtLmdldCgpLCBjbGlwU3RhY2soKS5yb3VuZGVkUmVjdENvbXBvbmVudHMoKSwgY2xp
cFN0YWNrKCkucm91bmRlZFJlY3RJbnZlcnNlVHJhbnNmb3JtQ29tcG9uZW50cygpLCBjbGlwU3Rh
Y2soKS5yb3VuZGVkUmVjdENvdW50KCkpOworCiAgICAgVmVjdG9yPHN0ZDo6cGFpcjxHTHVpbnQs
IEdMdWludD4gPiB0ZXh0dXJlc0FuZFNhbXBsZXJzID0gewogICAgICAgICB7IHRleHR1cmUsIHBy
b2dyYW0tPnNhbXBsZXJMb2NhdGlvbigpIH0KICAgICB9OwpAQCAtNjczLDkgKzcxNSwxNyBAQCB2
b2lkIFRleHR1cmVNYXBwZXJHTDo6ZHJhd1NvbGlkQ29sb3IoY29uc3QgRmxvYXRSZWN0JiByZWN0
LCBjb25zdCBUcmFuc2Zvcm1hdGlvbgogICAgICAgICBmbGFncyB8PSBTaG91bGRBbnRpYWxpYXMg
fCAoaXNCbGVuZGluZ0FsbG93ZWQgPyBTaG91bGRCbGVuZCA6IDApOwogICAgIH0KIAorICAgIGlm
IChjbGlwU3RhY2soKS5pc1JvdW5kZWRSZWN0Q2xpcEVuYWJsZWQoKSkgeworICAgICAgICBvcHRp
b25zIHw9IFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtOjpSb3VuZGVkUmVjdENsaXA7CisgICAg
ICAgIGZsYWdzIHw9IFNob3VsZEJsZW5kOworICAgIH0KKwogICAgIFJlZjxUZXh0dXJlTWFwcGVy
U2hhZGVyUHJvZ3JhbT4gcHJvZ3JhbSA9IGRhdGEoKS5nZXRTaGFkZXJQcm9ncmFtKG9wdGlvbnMp
OwogICAgIGdsVXNlUHJvZ3JhbShwcm9ncmFtLT5wcm9ncmFtSUQoKSk7CiAKKyAgICBpZiAoY2xp
cFN0YWNrKCkuaXNSb3VuZGVkUmVjdENsaXBFbmFibGVkKCkpCisgICAgICAgIHByZXBhcmVSb3Vu
ZGVkUmVjdENsaXAocHJvZ3JhbS5nZXQoKSwgY2xpcFN0YWNrKCkucm91bmRlZFJlY3RDb21wb25l
bnRzKCksIGNsaXBTdGFjaygpLnJvdW5kZWRSZWN0SW52ZXJzZVRyYW5zZm9ybUNvbXBvbmVudHMo
KSwgY2xpcFN0YWNrKCkucm91bmRlZFJlY3RDb3VudCgpKTsKKwogICAgIGF1dG8gW3IsIGcsIGIs
IGFdID0gcHJlbXVsdGlwbGllZChjb2xvci50b1NSR0JBTG9zc3k8ZmxvYXQ+KCkpOwogICAgIGds
VW5pZm9ybTRmKHByb2dyYW0tPmNvbG9yTG9jYXRpb24oKSwgciwgZywgYiwgYSk7CiAgICAgaWYg
KGEgPCAxICYmIGlzQmxlbmRpbmdBbGxvd2VkKQpAQCAtODg0LDEwICs5MzQsNDEgQEAgYm9vbCBU
ZXh0dXJlTWFwcGVyR0w6OmJlZ2luU2Npc3NvckNsaXAoY29uc3QgVHJhbnNmb3JtYXRpb25NYXRy
aXgmIG1vZGVsVmlld01hdHIKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotdm9pZCBUZXh0dXJlTWFw
cGVyR0w6OmJlZ2luQ2xpcChjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgbW9kZWxWaWV3TWF0
cml4LCBjb25zdCBGbG9hdFJlY3QmIHRhcmdldFJlY3QpCitib29sIFRleHR1cmVNYXBwZXJHTDo6
YmVnaW5Sb3VuZGVkUmVjdENsaXAoY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmIG1vZGVsVmll
d01hdHJpeCwgY29uc3QgRmxvYXRSb3VuZGVkUmVjdCYgdGFyZ2V0UmVjdCkKK3sKKyAgICAvLyBU
aGlzIGlzIGltcGxlbWVudGVkIGJ5IHRlbGxpbmcgdGhlIGZyYWdtZW50IHNoYWRlciB0byBjaGVj
ayB3aGV0aGVyIGVhY2ggcGl4ZWwgaXMgaW5zaWRlIHRoZSByb3VuZGVkIHJlY3RhbmdsZQorICAg
IC8vIGJlZm9yZSBwYWludGluZyBpdC4KKyAgICAvLworICAgIC8vIEluc2lkZSB0aGUgc2hhZGVy
LCB0aGUgbWF0aCB0byBjaGVjayB3aGV0aGVyIGEgcG9pbnQgaXMgaW5zaWRlIHRoZSByb3VuZGVk
IHJlY3RhbmdsZSByZXF1aXJlcyB0aGUgcmVjdGFuZ2xlIHRvCisgICAgLy8gYmUgYWxpZ25lZCB0
byB0aGUgWCBhbmQgWSBheGlzLCB3aGljaCBpcyBub3QgZ3VhcmFudGVlZCBpZiB0aGUgdHJhbnNm
b3JtYXRpb24gbWF0cml4IGluY2x1ZGVzIHJvdGF0aW9ucy4gSW4gb3JkZXIKKyAgICAvLyB0byBh
dm9pZCB0aGlzLCBpbnN0ZWFkIG9mIGFwcGx5aW5nIHRoZSB0cmFuc2Zvcm1hdGlvbiB0byB0aGUg
cm91bmRlZCByZWN0YW5nbGUsIHdlIGNhbGN1bGF0ZSB0aGUgaW52ZXJzZQorICAgIC8vIG9mIHRo
ZSB0cmFuc2Zvcm1hdGlvbiBhbmQgYXBwbHkgaXQgdG8gdGhlIHBpeGVscyBiZWZvcmUgY2hlY2tp
bmcgd2hldGhlciB0aGV5IGFyZSBpbnNpZGUgdGhlIHJvdW5kZWQgcmVjdGFuZ2xlLgorICAgIC8v
IFRoaXMgd29ya3MgZmluZSBhcyBsb25nIGFzIHRoZSB0cmFuc2Zvcm1hdGlvbiBtYXRyaXggaXMg
aW52ZXJ0aWJsZS4KKyAgICAvLworICAgIC8vIFRoZXJlIGlzIGEgbGltaXQgdG8gdGhlIG51bWJl
ciBvZiByb3VuZGVkIHJlY3RhbmdsZSBjbGlwcGluZ3MgdGhhdCBjYW4gYmUgZG9uZSwgdGhhdCBo
YXBwZW5zIGJlY2F1c2UgdGhlIEdMU0wKKyAgICAvLyBhcnJheXMgbXVzdCBoYXZlIGEgcHJlZGVm
aW5lZCBzaXplLiBUaGUgbGltaXQgaXMgZGVmaW5lZCBpbnNpZGUgQ2xpcFN0YWNrLCBhbmQgdGhh
dCdzIHdoeSB3ZSBuZWVkIHRvIGNhbGwKKyAgICAvLyBjbGlwU3RhY2soKS5pc1JvdW5kZWRSZWN0
Q2xpcEFsbG93ZWQoKSBiZWZvcmUgdHJ5aW5nIHRvIGFkZCBhIG5ldyBjbGlwLgorCisgICAgaWYg
KCF0YXJnZXRSZWN0LmlzUm91bmRlZCgpIHx8ICF0YXJnZXRSZWN0LmlzUmVuZGVyYWJsZSgpIHx8
IHRhcmdldFJlY3QuaXNFbXB0eSgpIHx8ICFtb2RlbFZpZXdNYXRyaXguaXNJbnZlcnRpYmxlKCkg
fHwgIWNsaXBTdGFjaygpLmlzUm91bmRlZFJlY3RDbGlwQWxsb3dlZCgpKQorICAgICAgICByZXR1
cm4gZmFsc2U7CisKKyAgICBGbG9hdFF1YWQgcXVhZCA9IG1vZGVsVmlld01hdHJpeC5wcm9qZWN0
UXVhZCh0YXJnZXRSZWN0LnJlY3QoKSk7CisgICAgSW50UmVjdCByZWN0ID0gcXVhZC5lbmNsb3Np
bmdCb3VuZGluZ0JveCgpOworCisgICAgY2xpcFN0YWNrKCkuYWRkUm91bmRlZFJlY3QodGFyZ2V0
UmVjdCwgbW9kZWxWaWV3TWF0cml4LmludmVyc2UoKS52YWx1ZSgpKTsKKyAgICBjbGlwU3RhY2so
KS5pbnRlcnNlY3QocmVjdCk7CisgICAgY2xpcFN0YWNrKCkuYXBwbHlJZk5lZWRlZCgpOworCisg
ICAgcmV0dXJuIHRydWU7Cit9CisKK3ZvaWQgVGV4dHVyZU1hcHBlckdMOjpiZWdpbkNsaXAoY29u
c3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmIG1vZGVsVmlld01hdHJpeCwgY29uc3QgRmxvYXRSb3Vu
ZGVkUmVjdCYgdGFyZ2V0UmVjdCkKIHsKICAgICBjbGlwU3RhY2soKS5wdXNoKCk7Ci0gICAgaWYg
KGJlZ2luU2Npc3NvckNsaXAobW9kZWxWaWV3TWF0cml4LCB0YXJnZXRSZWN0KSkKKyAgICBpZiAo
YmVnaW5Sb3VuZGVkUmVjdENsaXAobW9kZWxWaWV3TWF0cml4LCB0YXJnZXRSZWN0KSkKKyAgICAg
ICAgcmV0dXJuOworCisgICAgaWYgKGJlZ2luU2Npc3NvckNsaXAobW9kZWxWaWV3TWF0cml4LCB0
YXJnZXRSZWN0LnJlY3QoKSkpCiAgICAgICAgIHJldHVybjsKIAogICAgIGRhdGEoKS5pbml0aWFs
aXplU3RlbmNpbCgpOwpAQCAtOTAyLDcgKzk4Myw3IEBAIHZvaWQgVGV4dHVyZU1hcHBlckdMOjpi
ZWdpbkNsaXAoY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmIG1vZGVsVmlld01hdHJpeCwgY29u
CiAgICAgZ2xWZXJ0ZXhBdHRyaWJQb2ludGVyKHByb2dyYW0tPnZlcnRleExvY2F0aW9uKCksIDIs
IEdMX0ZMT0FULCBmYWxzZSwgMCwgMCk7CiAKICAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBtYXRy
aXgobW9kZWxWaWV3TWF0cml4KTsKLSAgICBtYXRyaXgubXVsdGlwbHkoVHJhbnNmb3JtYXRpb25N
YXRyaXg6OnJlY3RUb1JlY3QoRmxvYXRSZWN0KDAsIDAsIDEsIDEpLCB0YXJnZXRSZWN0KSk7Cisg
ICAgbWF0cml4Lm11bHRpcGx5KFRyYW5zZm9ybWF0aW9uTWF0cml4OjpyZWN0VG9SZWN0KEZsb2F0
UmVjdCgwLCAwLCAxLCAxKSwgdGFyZ2V0UmVjdC5yZWN0KCkpKTsKIAogICAgIHN0YXRpYyBjb25z
dCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBmdWxsUHJvamVjdGlvbk1hdHJpeCA9IFRyYW5zZm9ybWF0
aW9uTWF0cml4OjpyZWN0VG9SZWN0KEZsb2F0UmVjdCgwLCAwLCAxLCAxKSwgRmxvYXRSZWN0KC0x
LCAtMSwgMiwgMikpOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlckdMLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlckdMLmgKaW5kZXggMjY3MTc1ZTE4NDM3YzI3ZGQ0
YWEzYzViOGUwZjI0OGJjZWEzYjZhYS4uMzg3NGQ3ZWVjYjAxYjU5OTg1MDk1YTEyYjBhYTAwYmJi
MDQ3ZDNjNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4
bWFwL1RleHR1cmVNYXBwZXJHTC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyR0wuaApAQCAtNzUsNyArNzUsNyBAQCBwdWJsaWM6CiAK
ICAgICB2b2lkIGJpbmRTdXJmYWNlKEJpdG1hcFRleHR1cmUqIHN1cmZhY2UpIG92ZXJyaWRlOwog
ICAgIEJpdG1hcFRleHR1cmUqIGN1cnJlbnRTdXJmYWNlKCk7Ci0gICAgdm9pZCBiZWdpbkNsaXAo
Y29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmLCBjb25zdCBGbG9hdFJlY3QmKSBvdmVycmlkZTsK
KyAgICB2b2lkIGJlZ2luQ2xpcChjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYsIGNvbnN0IEZs
b2F0Um91bmRlZFJlY3QmKSBvdmVycmlkZTsKICAgICB2b2lkIGJlZ2luUGFpbnRpbmcoUGFpbnRG
bGFncyA9IDApIG92ZXJyaWRlOwogICAgIHZvaWQgZW5kUGFpbnRpbmcoKSBvdmVycmlkZTsKICAg
ICB2b2lkIGVuZENsaXAoKSBvdmVycmlkZTsKQEAgLTEwMCw2ICsxMDAsNyBAQCBwcml2YXRlOgog
ICAgIHZvaWQgZHJhd0VkZ2VUcmlhbmdsZXMoVGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW0mKTsK
IAogICAgIGJvb2wgYmVnaW5TY2lzc29yQ2xpcChjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYs
IGNvbnN0IEZsb2F0UmVjdCYpOworICAgIGJvb2wgYmVnaW5Sb3VuZGVkUmVjdENsaXAoY29uc3Qg
VHJhbnNmb3JtYXRpb25NYXRyaXgmLCBjb25zdCBGbG9hdFJvdW5kZWRSZWN0Jik7CiAgICAgdm9p
ZCBiaW5kRGVmYXVsdFN1cmZhY2UoKTsKICAgICBDbGlwU3RhY2smIGNsaXBTdGFjaygpOwogICAg
IGlubGluZSBUZXh0dXJlTWFwcGVyR0xEYXRhJiBkYXRhKCkgeyByZXR1cm4gKm1fZGF0YTsgfQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1
cmVNYXBwZXJMYXllci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXht
YXAvVGV4dHVyZU1hcHBlckxheWVyLmNwcAppbmRleCBhMjM2YTZhN2E4NDllMjAwYzczOTEwZWM2
NTgzMzk4ZWY3ODFmMzEyLi5hMWM2YmIxMDA2YzI5OWI0YTAwODA3MDI1MzAyMmJkZjMwMGYzODNi
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4
dHVyZU1hcHBlckxheWVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy90ZXhtYXAvVGV4dHVyZU1hcHBlckxheWVyLmNwcApAQCAtMTk2LDggKzE5Niw3IEBAIHZvaWQg
VGV4dHVyZU1hcHBlckxheWVyOjpwYWludFNlbGYoY29uc3QgVGV4dHVyZU1hcHBlclBhaW50T3B0
aW9ucyYgb3B0aW9ucykKIAogICAgIGJvb2wgc2hvdWxkQ2xpcCA9IG1fc3RhdGUuY29udGVudHND
bGlwcGluZ1JlY3QuaXNSb3VuZGVkKCkgfHwgIW1fc3RhdGUuY29udGVudHNDbGlwcGluZ1JlY3Qu
cmVjdCgpLmNvbnRhaW5zKG1fc3RhdGUuY29udGVudHNSZWN0KTsKICAgICBpZiAoc2hvdWxkQ2xp
cCkgewotICAgICAgICAvLyBGSVhNRTogVGV4dHVyZU1hcHBlcjo6YmVnaW5DbGlwIGRvZXNuJ3Qg
c3VwcG9ydCBGbG9hdFJvdW5kZWRSZWN0LCBzbyB3ZSBuZWVkIHRvIGNvbnZlcnQgbV9zdGF0ZS5j
b250ZW50c0NsaXBwaW5nUmVjdCB0byBGbG9hdFJlY3QuCi0gICAgICAgIG9wdGlvbnMudGV4dHVy
ZU1hcHBlci5iZWdpbkNsaXAodHJhbnNmb3JtLCBtX3N0YXRlLmNvbnRlbnRzQ2xpcHBpbmdSZWN0
LnJlY3QoKSk7CisgICAgICAgIG9wdGlvbnMudGV4dHVyZU1hcHBlci5iZWdpbkNsaXAodHJhbnNm
b3JtLCBtX3N0YXRlLmNvbnRlbnRzQ2xpcHBpbmdSZWN0KTsKICAgICB9CiAKICAgICBtX2NvbnRl
bnRzTGF5ZXItPnBhaW50VG9UZXh0dXJlTWFwcGVyKG9wdGlvbnMudGV4dHVyZU1hcHBlciwgbV9z
dGF0ZS5jb250ZW50c1JlY3QsIHRyYW5zZm9ybSwgb3B0aW9ucy5vcGFjaXR5KTsKQEAgLTIzMCw3
ICsyMjksNyBAQCB2b2lkIFRleHR1cmVNYXBwZXJMYXllcjo6cGFpbnRTZWxmQW5kQ2hpbGRyZW4o
Y29uc3QgVGV4dHVyZU1hcHBlclBhaW50T3B0aW9ucyYgbwogICAgICAgICBjbGlwVHJhbnNmb3Jt
LnRyYW5zbGF0ZShvcHRpb25zLm9mZnNldC53aWR0aCgpLCBvcHRpb25zLm9mZnNldC5oZWlnaHQo
KSk7CiAgICAgICAgIGNsaXBUcmFuc2Zvcm0ubXVsdGlwbHkob3B0aW9ucy50cmFuc2Zvcm0pOwog
ICAgICAgICBjbGlwVHJhbnNmb3JtLm11bHRpcGx5KG1fbGF5ZXJUcmFuc2Zvcm1zLmNvbWJpbmVk
KTsKLSAgICAgICAgb3B0aW9ucy50ZXh0dXJlTWFwcGVyLmJlZ2luQ2xpcChjbGlwVHJhbnNmb3Jt
LCBsYXllclJlY3QoKSk7CisgICAgICAgIG9wdGlvbnMudGV4dHVyZU1hcHBlci5iZWdpbkNsaXAo
Y2xpcFRyYW5zZm9ybSwgRmxvYXRSb3VuZGVkUmVjdChsYXllclJlY3QoKSkpOwogICAgICAgICBt
X3N0YXRlLmJhY2tkcm9wTGF5ZXItPnBhaW50UmVjdXJzaXZlKG9wdGlvbnMpOwogICAgICAgICBv
cHRpb25zLnRleHR1cmVNYXBwZXIuZW5kQ2xpcCgpOwogICAgIH0KQEAgLTI0OSw3ICsyNDgsNyBA
QCB2b2lkIFRleHR1cmVNYXBwZXJMYXllcjo6cGFpbnRTZWxmQW5kQ2hpbGRyZW4oY29uc3QgVGV4
dHVyZU1hcHBlclBhaW50T3B0aW9ucyYgbwogICAgICAgICBjbGlwVHJhbnNmb3JtLnRyYW5zbGF0
ZShvcHRpb25zLm9mZnNldC53aWR0aCgpLCBvcHRpb25zLm9mZnNldC5oZWlnaHQoKSk7CiAgICAg
ICAgIGNsaXBUcmFuc2Zvcm0ubXVsdGlwbHkob3B0aW9ucy50cmFuc2Zvcm0pOwogICAgICAgICBj
bGlwVHJhbnNmb3JtLm11bHRpcGx5KG1fbGF5ZXJUcmFuc2Zvcm1zLmNvbWJpbmVkKTsKLSAgICAg
ICAgb3B0aW9ucy50ZXh0dXJlTWFwcGVyLmJlZ2luQ2xpcChjbGlwVHJhbnNmb3JtLCBsYXllclJl
Y3QoKSk7CisgICAgICAgIG9wdGlvbnMudGV4dHVyZU1hcHBlci5iZWdpbkNsaXAoY2xpcFRyYW5z
Zm9ybSwgRmxvYXRSb3VuZGVkUmVjdChsYXllclJlY3QoKSkpOwogCiAgICAgICAgIC8vIElmIGFz
IGEgcmVzdWx0IG9mIGJlZ2luQ2xpcCgpLCB0aGUgY2xpcHBpbmcgYXJlYSBpcyBlbXB0eSwgaXQg
bWVhbnMgdGhhdCB0aGUgaW50ZXJzZWN0aW9uIG9mIHRoZSBwcmV2aW91cwogICAgICAgICAvLyBj
bGlwcGluZyBhcmVhIGFuZCB0aGUgY3VycmVudCBvbmUgZG9uJ3QgaGF2ZSBhbnkgcGl4ZWxzIGlu
IGNvbW1vbi4gSW4gdGhpcyBjYXNlIHdlIGNhbiBza2lwIHBhaW50aW5nIHRoZQpAQCAtNDA1LDcg
KzQwNCw3IEBAIHZvaWQgVGV4dHVyZU1hcHBlckxheWVyOjpwYWludFVzaW5nT3ZlcmxhcFJlZ2lv
bnMoY29uc3QgVGV4dHVyZU1hcHBlclBhaW50T3B0aW9uCiAgICAgICAgIGlmICghcmVjdC5pbnRl
cnNlY3RzKG9wdGlvbnMudGV4dHVyZU1hcHBlci5jbGlwQm91bmRzKCkpKQogICAgICAgICAgICAg
Y29udGludWU7CiAKLSAgICAgICAgb3B0aW9ucy50ZXh0dXJlTWFwcGVyLmJlZ2luQ2xpcChUcmFu
c2Zvcm1hdGlvbk1hdHJpeCgpLCByZWN0KTsKKyAgICAgICAgb3B0aW9ucy50ZXh0dXJlTWFwcGVy
LmJlZ2luQ2xpcChUcmFuc2Zvcm1hdGlvbk1hdHJpeCgpLCBGbG9hdFJvdW5kZWRSZWN0KHJlY3Qp
KTsKICAgICAgICAgcGFpbnRTZWxmQW5kQ2hpbGRyZW5XaXRoUmVwbGljYShvcHRpb25zKTsKICAg
ICAgICAgb3B0aW9ucy50ZXh0dXJlTWFwcGVyLmVuZENsaXAoKTsKICAgICB9CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlclNo
YWRlclByb2dyYW0uY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFw
L1RleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtLmNwcAppbmRleCAyNmMwZjQyZTg1Mzk0Njk2NWI4
N2NjZmQ3OTMyMzEyMjY4YzI5MWFjLi5mZjgxZmFhMjZiMDQ3N2ZiMDMwMDEzOTBjNjQ4MDViZTYw
Njg3ZjU0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXht
YXAvVGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW0uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbS5jcHAKQEAg
LTY4LDYgKzY4LDcgQEAgc3RhdGljIGNvbnN0IGNoYXIqIHZlcnRleFRlbXBsYXRlTFQzMjBWYXJz
ID0KICAgICAgICAgdmFyeWluZyB2ZWMyIHZfdGV4Q29vcmQ7CiAgICAgICAgIHZhcnlpbmcgdmVj
MiB2X3RyYW5zZm9ybWVkVGV4Q29vcmQ7CiAgICAgICAgIHZhcnlpbmcgZmxvYXQgdl9hbnRpYWxp
YXM7CisgICAgICAgIHZhcnlpbmcgdmVjNCB2X25vblByb2plY3RlZFBvc2l0aW9uOwogICAgICk7
CiAKICNpZiAhVVNFKE9QRU5HTF9FUykKQEAgLTc4LDYgKzc5LDcgQEAgc3RhdGljIGNvbnN0IGNo
YXIqIHZlcnRleFRlbXBsYXRlR0UzMjBWYXJzID0KICAgICAgICAgb3V0IHZlYzIgdl90ZXhDb29y
ZDsKICAgICAgICAgb3V0IHZlYzIgdl90cmFuc2Zvcm1lZFRleENvb3JkOwogICAgICAgICBvdXQg
ZmxvYXQgdl9hbnRpYWxpYXM7CisgICAgICAgIG91dCB2ZWM0IHZfbm9uUHJvamVjdGVkUG9zaXRp
b247CiAgICAgKTsKICNlbmRpZgogCkBAIC0xMzMsNyArMTM1LDggQEAgc3RhdGljIGNvbnN0IGNo
YXIqIHZlcnRleFRlbXBsYXRlQ29tbW9uID0KICAgICAgICAgICAgIHZfdGV4Q29vcmQgPSBwb3Np
dGlvbjsKICAgICAgICAgICAgIHZlYzQgY2xhbXBlZFBvc2l0aW9uID0gY2xhbXAodmVjNChwb3Np
dGlvbiwgMC4sIDEuKSwgMC4sIDEuKTsKICAgICAgICAgICAgIHZfdHJhbnNmb3JtZWRUZXhDb29y
ZCA9ICh1X3RleHR1cmVTcGFjZU1hdHJpeCAqIGNsYW1wZWRQb3NpdGlvbikueHk7Ci0gICAgICAg
ICAgICBnbF9Qb3NpdGlvbiA9IHVfcHJvamVjdGlvbk1hdHJpeCAqIHVfbW9kZWxWaWV3TWF0cml4
ICogdmVjNChwb3NpdGlvbiwgMC4sIDEuKTsKKyAgICAgICAgICAgIHZfbm9uUHJvamVjdGVkUG9z
aXRpb24gPSB1X21vZGVsVmlld01hdHJpeCAqIHZlYzQocG9zaXRpb24sIDAuLCAxLik7CisgICAg
ICAgICAgICBnbF9Qb3NpdGlvbiA9IHVfcHJvamVjdGlvbk1hdHJpeCAqIHZfbm9uUHJvamVjdGVk
UG9zaXRpb247CiAgICAgICAgIH0KICAgICApOwogCkBAIC0xNjgsNiArMTcxLDE2IEBAIHN0YXRp
YyBjb25zdCBjaGFyKiB2ZXJ0ZXhUZW1wbGF0ZUNvbW1vbiA9CiAgICAgICAgIEdMU0xfRElSRUNU
SVZFKGRlZmluZSBTYW1wbGVyRXh0ZXJuYWxPRVNUeXBlIHNhbXBsZXIyRCkgXAogICAgIEdMU0xf
RElSRUNUSVZFKGVuZGlmKQogCisvLyBUaGUgbWF4IG51bWJlciBvZiBzdGFja2VkIHJvdW5kZWQg
cmVjdGFuZ2xlIGNsaXBzIGFsbG93ZWQgaXMgMTAsIHdoaWNoIGlzIGFsc28gdGhlCisvLyBtYXgg
bnVtYmVyIG9mIHRyYW5zZm9ybXMgdGhhdCB3ZSBjYW4gZ2V0LiBXZSBuZWVkIDMgY29tcG9uZW50
cyBmb3IgZWFjaCByb3VuZGVkCisvLyByZWN0YW5nbGUgc28gd2UgbmVlZCAzMCBjb21wb25lbnRz
IHRvIHJlY2VpdmUgdGhlIDEwIHJlY3RhbmdsZXMuCisvLworLy8gS2VlcCB0aGlzIGlzIHN5bmMg
d2l0aCB0aGUgdmFsdWVzIGRlZmluZWQgaW4gQ2xpcFN0YWNrLmgKKyNkZWZpbmUgUk9VTkRFRF9S
RUNUX0NPTlNUQU5UUyAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIEdMU0xfRElSRUNUSVZF
KGRlZmluZSBST1VOREVEX1JFQ1RfTUFYX1JFQ1RTIDEwKSBcCisgICAgR0xTTF9ESVJFQ1RJVkUo
ZGVmaW5lIFJPVU5ERURfUkVDVF9BUlJBWV9TSVpFIDMwKSBcCisgICAgR0xTTF9ESVJFQ1RJVkUo
ZGVmaW5lIFJPVU5ERURfUkVDVF9JTlZFUlNFX1RSQU5TRk9STV9BUlJBWV9TSVpFIDEwKQorCiAv
LyBDb21tb24gaGVhZGVyIGZvciBhbGwgdmVyc2lvbnMuIFdlIGRlZmluZSB0aGUgbWF0cmljZXMg
dmFyaWFibGVzIGhlcmUgdG8ga2VlcCB0aGUgcHJlY2lzaW9uCiAvLyBkaXJlY3RpdmVzIHNjb3Bl
OiB0aGUgZmlyc3Qgb25lIGFwcGxpZXMgdG8gdGhlIG1hdHJpY2VzIHZhcmlhYmxlcyBhbmQgdGhl
IG5leHQgb25lIHRvIHRoZQogLy8gcmVzdCBvZiB0aGVtLiBUaGUgcHJlY2lzaW9uIGlzIG9ubHkg
dXNlZCBpbiBHTEVTLgpAQCAtMTc1LDYgKzE4OCw3IEBAIHN0YXRpYyBjb25zdCBjaGFyKiBmcmFn
bWVudFRlbXBsYXRlSGVhZGVyQ29tbW9uID0KICAgICBSRUNUX1RFWFRVUkVfRElSRUNUSVZFCiAg
ICAgQU5USUFMSUFTSU5HX1RFWF9DT09SRF9ESVJFQ1RJVkUKICAgICBCTFVSX0NPTlNUQU5UUwor
ICAgIFJPVU5ERURfUkVDVF9DT05TVEFOVFMKICAgICBPRVNfRUdMX0lNQUdFX0VYVEVSTkFMX0RJ
UkVDVElWRQogI2lmIFVTRShPUEVOR0xfRVMpCiAgICAgVEVYVFVSRV9TUEFDRV9NQVRSSVhfUFJF
Q0lTSU9OX0RJUkVDVElWRQpAQCAtMTk5LDYgKzIxMyw3IEBAIHN0YXRpYyBjb25zdCBjaGFyKiBm
cmFnbWVudFRlbXBsYXRlTFQzMjBWYXJzID0KICAgICAgICAgdmFyeWluZyBmbG9hdCB2X2FudGlh
bGlhczsKICAgICAgICAgdmFyeWluZyB2ZWMyIHZfdGV4Q29vcmQ7CiAgICAgICAgIHZhcnlpbmcg
dmVjMiB2X3RyYW5zZm9ybWVkVGV4Q29vcmQ7CisgICAgICAgIHZhcnlpbmcgdmVjNCB2X25vblBy
b2plY3RlZFBvc2l0aW9uOwogICAgICk7CiAKICNpZiAhVVNFKE9QRU5HTF9FUykKQEAgLTIwOCw2
ICsyMjMsNyBAQCBzdGF0aWMgY29uc3QgY2hhciogZnJhZ21lbnRUZW1wbGF0ZUdFMzIwVmFycyA9
CiAgICAgICAgIGluIGZsb2F0IHZfYW50aWFsaWFzOwogICAgICAgICBpbiB2ZWMyIHZfdGV4Q29v
cmQ7CiAgICAgICAgIGluIHZlYzIgdl90cmFuc2Zvcm1lZFRleENvb3JkOworICAgICAgICBpbiB2
ZWM0IHZfbm9uUHJvamVjdGVkUG9zaXRpb247CiAgICAgKTsKICNlbmRpZgogCkBAIC0yMjYsNiAr
MjQyLDkgQEAgc3RhdGljIGNvbnN0IGNoYXIqIGZyYWdtZW50VGVtcGxhdGVDb21tb24gPQogICAg
ICAgICB1bmlmb3JtIHZlYzIgdV9zaGFkb3dPZmZzZXQ7CiAgICAgICAgIHVuaWZvcm0gdmVjNCB1
X2NvbG9yOwogICAgICAgICB1bmlmb3JtIGZsb2F0IHVfZ2F1c3NpYW5LZXJuZWxbR0FVU1NJQU5f
S0VSTkVMX0hBTEZfV0lEVEhdOworICAgICAgICB1bmlmb3JtIGludCB1X3JvdW5kZWRSZWN0TnVt
YmVyOworICAgICAgICB1bmlmb3JtIHZlYzQgdV9yb3VuZGVkUmVjdFtST1VOREVEX1JFQ1RfQVJS
QVlfU0laRV07CisgICAgICAgIHVuaWZvcm0gbWF0NCB1X3JvdW5kZWRSZWN0SW52ZXJzZVRyYW5z
Zm9ybU1hdHJpeFtST1VOREVEX1JFQ1RfSU5WRVJTRV9UUkFOU0ZPUk1fQVJSQVlfU0laRV07CiAK
ICAgICAgICAgdm9pZCBub29wKGlub3V0IHZlYzQgZHVtbXlQYXJhbWV0ZXIpIHsgfQogICAgICAg
ICB2b2lkIG5vb3AoaW5vdXQgdmVjNCBkdW1teVBhcmFtZXRlciwgdmVjMiB0ZXhDb29yZCkgeyB9
CkBAIC0zOTAsNiArNDA5LDcwIEBAIHN0YXRpYyBjb25zdCBjaGFyKiBmcmFnbWVudFRlbXBsYXRl
Q29tbW9uID0KIAogICAgICAgICB2b2lkIGFwcGx5U29saWRDb2xvcihpbm91dCB2ZWM0IGNvbG9y
KSB7IGNvbG9yICo9IHVfY29sb3I7IH0KIAorICAgICAgICBmbG9hdCBlbGxpcHNpc0Rpc3QodmVj
MiBwLCB2ZWMyIHJhZGl1cykKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKHJhZGl1cyA9PSB2
ZWMyKDAsIDApKQorICAgICAgICAgICAgICAgIHJldHVybiAwLjA7CisKKyAgICAgICAgICAgIHZl
YzIgcDAgPSBwIC8gcmFkaXVzOworICAgICAgICAgICAgdmVjMiBwMSA9IDIuMCAqIHAwIC8gcmFk
aXVzOworCisgICAgICAgICAgICByZXR1cm4gKGRvdChwMCwgcDApIC0gMS4wKSAvIGxlbmd0aCAo
cDEpOworICAgICAgICB9CisKKyAgICAgICAgZmxvYXQgZWxsaXBzaXNDb3ZlcmFnZSh2ZWMyIHBv
aW50LCB2ZWMyIGNlbnRlciwgdmVjMiByYWRpdXMpCisgICAgICAgIHsKKyAgICAgICAgICAgIGZs
b2F0IGQgPSBlbGxpcHNpc0Rpc3QocG9pbnQgLSBjZW50ZXIsIHJhZGl1cyk7CisgICAgICAgICAg
ICByZXR1cm4gY2xhbXAoMC41IC0gZCwgMC4wLCAxLjApOworICAgICAgICB9CisKKyAgICAgICAg
ZmxvYXQgcm91bmRlZFJlY3RDb3ZlcmFnZSh2ZWMyIHAsIGludCBpbmRleCkKKyAgICAgICAgewor
ICAgICAgICAgICAgdmVjNCBib3VuZHMgPSB2ZWM0KHVfcm91bmRlZFJlY3RbaW5kZXhdLnh5LCB1
X3JvdW5kZWRSZWN0W2luZGV4XS54eSArIHVfcm91bmRlZFJlY3RbaW5kZXhdLnp3KTsKKworICAg
ICAgICAgICAgaWYgKHAueCA8IGJvdW5kcy54IHx8IHAueSA8IGJvdW5kcy55IHx8IHAueCA+PSBi
b3VuZHMueiB8fCBwLnkgPj0gYm91bmRzLncpCisgICAgICAgICAgICAgICAgcmV0dXJuIDAuMDsK
KworICAgICAgICAgICAgdmVjMiB0b3BMZWZ0UmFkaWkgPSB1X3JvdW5kZWRSZWN0W2luZGV4ICsg
MV0ueHk7CisgICAgICAgICAgICB2ZWMyIHRvcFJpZ2h0UmFkaWkgPSB1X3JvdW5kZWRSZWN0W2lu
ZGV4ICsgMV0uenc7CisgICAgICAgICAgICB2ZWMyIGJvdHRvbUxlZnRSYWRpaSA9IHVfcm91bmRl
ZFJlY3RbaW5kZXggKyAyXS54eTsKKyAgICAgICAgICAgIHZlYzIgYm90dG9tUmlnaHRSYWRpaSA9
IHVfcm91bmRlZFJlY3RbaW5kZXggKyAyXS56dzsKKworICAgICAgICAgICAgdmVjMiB0b3BMZWZ0
Q2VudGVyID0gYm91bmRzLnh5ICsgdG9wTGVmdFJhZGlpOworICAgICAgICAgICAgdmVjMiB0b3BS
aWdodENlbnRlciA9IGJvdW5kcy56eSArICh0b3BSaWdodFJhZGlpICogdmVjMigtMSwgMSkpOwor
ICAgICAgICAgICAgdmVjMiBib3R0b21MZWZ0Q2VudGVyID0gYm91bmRzLnh3ICsgKGJvdHRvbUxl
ZnRSYWRpaSAqIHZlYzIoMSwgLTEpKTsKKyAgICAgICAgICAgIHZlYzIgYm90dG9tUmlnaHRDZW50
ZXIgPSBib3VuZHMuencgKyAoYm90dG9tUmlnaHRSYWRpaSAqIHZlYzIoLTEsIC0xKSk7CisKKyAg
ICAgICAgICAgIGlmIChwLnggPCB0b3BMZWZ0Q2VudGVyLnggJiYgcC55IDwgdG9wTGVmdENlbnRl
ci55KQorICAgICAgICAgICAgICAgIHJldHVybiBlbGxpcHNpc0NvdmVyYWdlKHAsIHRvcExlZnRD
ZW50ZXIsIHRvcExlZnRSYWRpaSk7CisKKyAgICAgICAgICAgIGlmIChwLnggPiB0b3BSaWdodENl
bnRlci54ICYmIHAueSA8IHRvcFJpZ2h0Q2VudGVyLnkpCisgICAgICAgICAgICAgICAgcmV0dXJu
IGVsbGlwc2lzQ292ZXJhZ2UocCwgdG9wUmlnaHRDZW50ZXIsIHRvcFJpZ2h0UmFkaWkpOworCisg
ICAgICAgICAgICBpZiAocC54IDwgYm90dG9tTGVmdENlbnRlci54ICYmIHAueSA+IGJvdHRvbUxl
ZnRDZW50ZXIueSkKKyAgICAgICAgICAgICAgICByZXR1cm4gZWxsaXBzaXNDb3ZlcmFnZShwLCBi
b3R0b21MZWZ0Q2VudGVyLCBib3R0b21MZWZ0UmFkaWkpOworCisgICAgICAgICAgICBpZiAocC54
ID4gYm90dG9tUmlnaHRDZW50ZXIueCAmJiBwLnkgPiBib3R0b21SaWdodENlbnRlci55KQorICAg
ICAgICAgICAgICAgIHJldHVybiBlbGxpcHNpc0NvdmVyYWdlKHAsIGJvdHRvbVJpZ2h0Q2VudGVy
LCBib3R0b21SaWdodFJhZGlpKTsKKworICAgICAgICAgICAgcmV0dXJuIDEuMDsKKyAgICAgICAg
fQorCisgICAgICAgIHZvaWQgYXBwbHlSb3VuZGVkUmVjdENsaXAoaW5vdXQgdmVjNCBjb2xvcikK
KyAgICAgICAgeworICAgICAgICAgICAgLy8gVGhpcyB3b3JrcyBieSBjaGVja2luZyB3aGV0aGVy
IHRoZSBmcmFnbWVudCBwb3NpdGlvbiwgb25jZSB0aGUgdHJhbnNmb3JtIGlzIGFwcGxpZWQsCisg
ICAgICAgICAgICAvLyBpcyBpbnNpZGUgdGhlIGRlZmluZWQgcm91bmRlZCByZWN0YW5nbGUgb3Ig
bm90LgorICAgICAgICAgICAgLy8KKyAgICAgICAgICAgIC8vIFdlIGNhbid0IHVzZSBnbF9mcmFn
Q29vcmQgZm9yIHRoZSBmcmFnbWVudCBwb3NpdGlvbiBiZWNhdXNlIHRoYXRzIHRoZSBwcm9qZWN0
ZWQgcG9pbnQKKyAgICAgICAgICAgIC8vIGFuZCB0aGUgcHJvamVjdGlvbiBzY3Jld3MgdGhlIFog
Y29tcG9uZW50LiBXZSBuZWVkIHRoZSByZWFsIDNEIHBvc2l0aW9uIHRoYXQgY29tZXMgZnJvbQor
ICAgICAgICAgICAgLy8gdGhlIG5vblByb2plY3RlZFBvc2l0aW9uIHZhcmlhYmxlLgorICAgICAg
ICAgICAgaW50IG5SZWN0cyA9IG1pbihST1VOREVEX1JFQ1RfTUFYX1JFQ1RTLCB1X3JvdW5kZWRS
ZWN0TnVtYmVyKTsKKyAgICAgICAgICAgIGZvciAoaW50IHJlY3RJbmRleCA9IDA7IHJlY3RJbmRl
eCA8IG5SZWN0czsgcmVjdEluZGV4KyspIHsKKyAgICAgICAgICAgICAgICB2ZWM0IGZyYWdDb29y
ZCA9IHVfcm91bmRlZFJlY3RJbnZlcnNlVHJhbnNmb3JtTWF0cml4W3JlY3RJbmRleF0gKiB2X25v
blByb2plY3RlZFBvc2l0aW9uOworICAgICAgICAgICAgICAgIGNvbG9yICo9IHJvdW5kZWRSZWN0
Q292ZXJhZ2UoZnJhZ0Nvb3JkLnh5LCByZWN0SW5kZXggKiAzKTsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgfQorCiAgICAgICAgIHZvaWQgbWFpbih2b2lkKQogICAgICAgICB7CiAgICAgICAgICAg
ICB2ZWM0IGNvbG9yID0gdmVjNCgxLiwgMS4sIDEuLCAxLik7CkBAIC00MTUsNiArNDk4LDcgQEAg
c3RhdGljIGNvbnN0IGNoYXIqIGZyYWdtZW50VGVtcGxhdGVDb21tb24gPQogICAgICAgICAgICAg
YXBwbHlBbHBoYUJsdXJJZk5lZWRlZChjb2xvciwgdGV4Q29vcmQpOwogICAgICAgICAgICAgYXBw
bHlDb250ZW50VGV4dHVyZUlmTmVlZGVkKGNvbG9yLCB0ZXhDb29yZCk7CiAgICAgICAgICAgICBh
cHBseVRleHR1cmVFeHRlcm5hbE9FU0lmTmVlZGVkKGNvbG9yLCB0ZXhDb29yZCk7CisgICAgICAg
ICAgICBhcHBseVJvdW5kZWRSZWN0Q2xpcElmTmVlZGVkKGNvbG9yKTsKICAgICAgICAgICAgIGds
X0ZyYWdDb2xvciA9IGNvbG9yOwogICAgICAgICB9CiAgICAgKTsKQEAgLTQ0OCw2ICs1MzIsNyBA
QCBSZWY8VGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW0+IFRleHR1cmVNYXBwZXJTaGFkZXJQcm9n
cmFtOjpjcmVhdGUoVGV4dHVyZU1hcHBlcgogICAgIFNFVF9BUFBMSUVSX0ZST01fT1BUSU9OUyhD
b250ZW50VGV4dHVyZSk7CiAgICAgU0VUX0FQUExJRVJfRlJPTV9PUFRJT05TKE1hbnVhbFJlcGVh
dCk7CiAgICAgU0VUX0FQUExJRVJfRlJPTV9PUFRJT05TKFRleHR1cmVFeHRlcm5hbE9FUyk7Cisg
ICAgU0VUX0FQUExJRVJfRlJPTV9PUFRJT05TKFJvdW5kZWRSZWN0Q2xpcCk7CiAKICAgICBTdHJp
bmdCdWlsZGVyIHZlcnRleFNoYWRlckJ1aWxkZXI7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbS5o
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJT
aGFkZXJQcm9ncmFtLmgKaW5kZXggZmY4MzY0OGU3MGVkNDljODM5ODFhNDI4ZTczMGYwMTVmMTdm
YzZiMS4uZDZhYzUwMTgyMTcyNjc3ZDYwMTEyYTAyZTRmOGQ3NWM1NzAwYjUxMyAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJT
aGFkZXJQcm9ncmFtLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4
bWFwL1RleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtLmgKQEAgLTQ4LDYgKzQ4LDkgQEAgbmFtZXNw
YWNlIFdlYkNvcmUgewogICAgIG1hY3JvKGdhdXNzaWFuS2VybmVsKSBcCiAgICAgbWFjcm8oYmx1
clJhZGl1cykgXAogICAgIG1hY3JvKHNoYWRvd09mZnNldCkgXAorICAgIG1hY3JvKHJvdW5kZWRS
ZWN0TnVtYmVyKSBcCisgICAgbWFjcm8ocm91bmRlZFJlY3QpIFwKKyAgICBtYWNybyhyb3VuZGVk
UmVjdEludmVyc2VUcmFuc2Zvcm1NYXRyaXgpIFwKIAogI2RlZmluZSBURVhNQVBfU0FNUExFUl9W
QVJJQUJMRVMobWFjcm8pIFwKICAgICBtYWNybyhzYW1wbGVyKSBcCkBAIC05OSw2ICsxMDIsNyBA
QCBwdWJsaWM6CiAgICAgICAgIFRleHR1cmVOVjIxICAgICAgPSAxTCA8PCAyMCwKICAgICAgICAg
VGV4dHVyZVBhY2tlZFlVViA9IDFMIDw8IDIxLAogICAgICAgICBUZXh0dXJlRXh0ZXJuYWxPRVMg
PSAxTCA8PCAyMiwKKyAgICAgICAgUm91bmRlZFJlY3RDbGlwICA9IDFMIDw8IDIzLAogICAgIH07
CiAKICAgICBlbnVtIGNsYXNzIFZhcmlhYmxlSUQgewpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktp
dC9TaGFyZWQvQ29vcmRpbmF0ZWRHcmFwaGljcy9Db29yZGluYXRlZEdyYXBoaWNzU2NlbmUuY3Bw
IGIvU291cmNlL1dlYktpdC9TaGFyZWQvQ29vcmRpbmF0ZWRHcmFwaGljcy9Db29yZGluYXRlZEdy
YXBoaWNzU2NlbmUuY3BwCmluZGV4IGM2ZTMzYTE2NzZmNzc2MWUzYzdlMzEwNjMyNjc3NjkxMmU5
ZWY4ZDQuLjA0ZmZhMmY0MzI3Njk1YTJhYTczODdhMDI0ZmE2MjExY2QwYzg2OWMgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJLaXQvU2hhcmVkL0Nvb3JkaW5hdGVkR3JhcGhpY3MvQ29vcmRpbmF0ZWRH
cmFwaGljc1NjZW5lLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9Db29yZGluYXRlZEdy
YXBoaWNzL0Nvb3JkaW5hdGVkR3JhcGhpY3NTY2VuZS5jcHAKQEAgLTcxLDcgKzcxLDcgQEAgdm9p
ZCBDb29yZGluYXRlZEdyYXBoaWNzU2NlbmU6OnBhaW50VG9DdXJyZW50R0xDb250ZXh0KGNvbnN0
IFRyYW5zZm9ybWF0aW9uTWF0cmkKICAgICBjdXJyZW50Um9vdExheWVyLT5zZXRUZXh0dXJlTWFw
cGVyKG1fdGV4dHVyZU1hcHBlci5nZXQoKSk7CiAgICAgYm9vbCBzY2VuZUhhc1J1bm5pbmdBbmlt
YXRpb25zID0gY3VycmVudFJvb3RMYXllci0+YXBwbHlBbmltYXRpb25zUmVjdXJzaXZlbHkoTW9u
b3RvbmljVGltZTo6bm93KCkpOwogICAgIG1fdGV4dHVyZU1hcHBlci0+YmVnaW5QYWludGluZyhQ
YWludEZsYWdzKTsKLSAgICBtX3RleHR1cmVNYXBwZXItPmJlZ2luQ2xpcChUcmFuc2Zvcm1hdGlv
bk1hdHJpeCgpLCBjbGlwUmVjdCk7CisgICAgbV90ZXh0dXJlTWFwcGVyLT5iZWdpbkNsaXAoVHJh
bnNmb3JtYXRpb25NYXRyaXgoKSwgRmxvYXRSb3VuZGVkUmVjdChjbGlwUmVjdCkpOwogCiAgICAg
aWYgKGN1cnJlbnRSb290TGF5ZXItPnRyYW5zZm9ybSgpICE9IG1hdHJpeCkKICAgICAgICAgY3Vy
cmVudFJvb3RMYXllci0+c2V0VHJhbnNmb3JtKG1hdHJpeCk7CmRpZmYgLS1naXQgYS9MYXlvdXRU
ZXN0cy9DaGFuZ2VMb2cgYi9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKaW5kZXggNjEzZjY5MjUwM2I2
MmViOTJiODU4YmIyOTZhNmYzNmM4NzU4YTdlMS4uYTEzNmJkYjVlMWU3MWM1ZWYyZjU3MzRjYWY0
NGM3MjQ1NDQ1NTg4YSAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCisrKyBiL0xh
eW91dFRlc3RzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE0IEBACisyMDIwLTEwLTIzICBNaWd1ZWwg
R29tZXogIDxtYWdvbWV6QGlnYWxpYS5jb20+CisKKyAgICAgICAgW0dUS11bV1BFXSBJbXBsZW1l
bnQgYW50aWFsaWFzZWQgcm91bmRlZCByZWN0YW5nbGUgY2xpcHBpbmcgaW4gVGV4dHVyZU1hcHBl
cgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTc0NDU3
CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVXBkYXRl
IGV4cGVjdGF0aW9ucyBmb3IgcGFzc2luZyB0ZXN0LgorCisgICAgICAgICogcGxhdGZvcm0vZ3Rr
L1Rlc3RFeHBlY3RhdGlvbnM6CisKIDIwMjAtMTAtMjIgIEZ1amlpIEhpcm9ub3JpICA8SGlyb25v
cmkuRnVqaWlAc29ueS5jb20+CiAKICAgICAgICAgW0dUS10gVW5yZXZpZXdlZCB0ZXN0IGdhcmRl
bmluZwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvcGxhdGZvcm0vZ3RrL1Rlc3RFeHBlY3RhdGlv
bnMgYi9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9ndGsvVGVzdEV4cGVjdGF0aW9ucwppbmRleCBlMTM2
Yjk5MTBhOWYyMWNhODRmMzMyMDcyMjA0NmNkNDliYTgwOTViLi4wOGM4ODY3NGI5N2I1NTQ3N2Jh
MzhlMDgzYjdkMjc4MmQxZjUwMTgxIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9n
dGsvVGVzdEV4cGVjdGF0aW9ucworKysgYi9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9ndGsvVGVzdEV4
cGVjdGF0aW9ucwpAQCAtMzMyOCw3ICszMzI4LDYgQEAgd2Via2l0Lm9yZy9iLzE5MzY0MSB3ZWJy
dGMvdmlkZW8tc2V0RGlyZWN0aW9uLmh0bWwgWyBGYWlsdXJlIF0KIAogd2Via2l0Lm9yZy9iLzE5
NDM4NCBjb21wb3NpdGluZy9jbGlwcGluZy9ib3JkZXItcmFkaXVzLWFzeW5jLW92ZXJmbG93LWNs
aXBwaW5nLWxheWVyLmh0bWwgWyBGYWlsdXJlIF0KIHdlYmtpdC5vcmcvYi8yMDYwMDAgY29tcG9z
aXRpbmcvY2xpcHBpbmcvYm9yZGVyLXJhZGl1cy1hc3luYy1vdmVyZmxvdy1ub24tc3RhY2tpbmcu
aHRtbCBbIEltYWdlT25seUZhaWx1cmUgXQotd2Via2l0Lm9yZy9iLzIxMTEyMSBjb21wb3NpdGlu
Zy9jbGlwcGluZy9ib3JkZXItcmFkaXVzLW9uLXdlYmdsLmh0bWwgWyBJbWFnZU9ubHlGYWlsdXJl
IF0KIAogd2Via2l0Lm9yZy9iLzE5NDYwNiBhY2Nlc3NpYmlsaXR5L3NldC12YWx1ZS1ub3Qtd29y
ay1mb3ItZGlzYWJsZWQtc2xpZGVycy5odG1sIFsgRmFpbHVyZSBdCiAK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>412167</attachid>
            <date>2020-10-23 03:35:23 -0700</date>
            <delta_ts>2020-10-23 03:40:26 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-174457-20201023123521.patch</filename>
            <type>text/plain</type>
            <size>33691</size>
            <attacher name="Miguel Gomez">magomez</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjY4OTA2CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMTY2Y2ZlMGI1MWViM2Qz
Nzc1MDI4Mjg5NDhjY2JmYjc2ZjdhNDc4NS4uNDIwZGYzODAzNTk3ZWZlZWY4MWIwZGZjNzI1Y2U0
NzVjYmNmNjc3MiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQ1IEBACisyMDIwLTEwLTIzICBNaWd1
ZWwgR29tZXogIDxtYWdvbWV6QGlnYWxpYS5jb20+CisKKyAgICAgICAgW0dUS11bV1BFXSBJbXBs
ZW1lbnQgYW50aWFsaWFzZWQgcm91bmRlZCByZWN0YW5nbGUgY2xpcHBpbmcgaW4gVGV4dHVyZU1h
cHBlcgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTc0
NDU3CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgSW1w
bGVtZW50IHJvdW5kZWQgcmVjdGFuZ2xlIGNsaXBwaW5nIGluIFRleHR1cmVNYXBwZXJHTCwgc3Vw
cG9ydGluZyB1cCB0byAxMCBzaW11bHRhbmVvdXMKKyAgICAgICAgcm91bmRlZCByZWN0YW5nbGUg
Y2xpcHMuIFRleHR1cmVNYXBwZXI6OmJlZ2luQ2xpcCgpIG5vdyByZWNlaXZlcyBhIHJvdW5kZWQg
cmVjdGFuZ2xlLCBhbmQKKyAgICAgICAgaXQgYXBwbGllcyB0aGUgYXBwcm9wcmlhdGUgY2xpcHBp
bmcgbWV0aG9kIGFzIHJlcXVpcmVkLgorCisgICAgICAgIFRoZSByb3VuZGVkIHJlY3RhbmdsZSBj
bGlwIGltcGxlbWVudGF0aW9uIHVzZXMgdGhlIGZyYWdtZW50IHNoYWRlciB0byBjYWxjdWxhdGUg
d2hldGhlcgorICAgICAgICBlYWNoIHBpeGVsIGlzIGluc2lkZSB0aGUgZGVmaW5lZCByb3VuZGVk
IHJlY3RhbmdsZXMsIGFuZCBwYWludHMgb3Igc2tpcHMgaXQgYXMgbmVlZGVkLgorCisgICAgICAg
ICogcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL0NsaXBTdGFjay5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpDbGlwU3RhY2s6OmFkZFJvdW5kZWRSZWN0KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFw
aGljcy90ZXhtYXAvQ2xpcFN0YWNrLmg6CisgICAgICAgIChXZWJDb3JlOjpDbGlwU3RhY2s6OlN0
YXRlOjpTdGF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpDbGlwU3RhY2s6OnJvdW5kZWRSZWN0Q29t
cG9uZW50cyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpDbGlwU3RhY2s6OnJvdW5kZWRSZWN0
SW52ZXJzZVRyYW5zZm9ybUNvbXBvbmVudHMgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6Q2xp
cFN0YWNrOjpyb3VuZGVkUmVjdENvdW50IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkNsaXBT
dGFjazo6aXNSb3VuZGVkUmVjdENsaXBFbmFibGVkIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6
OkNsaXBTdGFjazo6aXNSb3VuZGVkUmVjdENsaXBBbGxvd2VkIGNvbnN0KToKKyAgICAgICAgKiBw
bGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlci5oOgorICAgICAgICAqIHBsYXRm
b3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyR0wuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6cHJlcGFyZVJvdW5kZWRSZWN0Q2xpcCk6CisgICAgICAgIChXZWJDb3JlOjpUZXh0dXJlTWFw
cGVyR0w6OmRyYXdUZXh0dXJlKToKKyAgICAgICAgKFdlYkNvcmU6OlRleHR1cmVNYXBwZXJHTDo6
ZHJhd1RleHR1cmVQbGFuYXJZVVYpOgorICAgICAgICAoV2ViQ29yZTo6VGV4dHVyZU1hcHBlckdM
OjpkcmF3VGV4dHVyZVNlbWlQbGFuYXJZVVYpOgorICAgICAgICAoV2ViQ29yZTo6VGV4dHVyZU1h
cHBlckdMOjpkcmF3VGV4dHVyZVBhY2tlZFlVVik6CisgICAgICAgIChXZWJDb3JlOjpUZXh0dXJl
TWFwcGVyR0w6OmRyYXdTb2xpZENvbG9yKToKKyAgICAgICAgKFdlYkNvcmU6OlRleHR1cmVNYXBw
ZXJHTDo6YmVnaW5Sb3VuZGVkUmVjdENsaXApOgorICAgICAgICAoV2ViQ29yZTo6VGV4dHVyZU1h
cHBlckdMOjpiZWdpbkNsaXApOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9U
ZXh0dXJlTWFwcGVyR0wuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4
dHVyZU1hcHBlckxheWVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlRleHR1cmVNYXBwZXJMYXll
cjo6cGFpbnRTZWxmKToKKyAgICAgICAgKFdlYkNvcmU6OlRleHR1cmVNYXBwZXJMYXllcjo6cGFp
bnRTZWxmQW5kQ2hpbGRyZW4pOgorICAgICAgICAoV2ViQ29yZTo6VGV4dHVyZU1hcHBlckxheWVy
OjpwYWludFVzaW5nT3ZlcmxhcFJlZ2lvbnMpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNz
L3RleG1hcC9UZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbS5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbTo6Y3JlYXRlKToKKyAgICAgICAgKiBwbGF0Zm9y
bS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW0uaDoKKwogMjAyMC0x
MC0yMiAgQWxleCBDaHJpc3RlbnNlbiAgPGFjaHJpc3RlbnNlbkB3ZWJraXQub3JnPgogCiAgICAg
ICAgIE51bGwgY2hlY2sgcGxhdGZvcm1TdHJhdGVnaWVzIHdoZW4gbWFraW5nIGJsb2IgcmVhZCBz
dHJlYW0gZm9yIGFuIE5TVVJMUmVxdWVzdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9DaGFu
Z2VMb2cgYi9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxvZwppbmRleCA1MzVkODYyM2E0N2E5ZjZjMjcx
NWY4Yzg0YmQ0MmY3YjUwNzE5OWM3Li4wNzc0M2QxOWUzZWYzYmY1MDhiYzg1ZThjZDdhOTA5ZTc2
YWRlZDVkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxvZworKysgYi9Tb3VyY2Uv
V2ViS2l0L0NoYW5nZUxvZwpAQCAtMSwzICsxLDE1IEBACisyMDIwLTEwLTIzICBNaWd1ZWwgR29t
ZXogIDxtYWdvbWV6QGlnYWxpYS5jb20+CisKKyAgICAgICAgW0dUS11bV1BFXSBJbXBsZW1lbnQg
YW50aWFsaWFzZWQgcm91bmRlZCByZWN0YW5nbGUgY2xpcHBpbmcgaW4gVGV4dHVyZU1hcHBlcgor
ICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTc0NDU3CisK
KyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVXNlIHRoZSBu
ZXcgVGV4dHVyZU1hcHBlcjo6YmVnaW5DbGlwKCkgbWV0aG9kIHRoYXQgcmVjZWl2ZXMgYSBGbG9h
dFJvdW5kZWRSZWN0LgorCisgICAgICAgICogU2hhcmVkL0Nvb3JkaW5hdGVkR3JhcGhpY3MvQ29v
cmRpbmF0ZWRHcmFwaGljc1NjZW5lLmNwcDoKKyAgICAgICAgKFdlYktpdDo6Q29vcmRpbmF0ZWRH
cmFwaGljc1NjZW5lOjpwYWludFRvQ3VycmVudEdMQ29udGV4dCk6CisKIDIwMjAtMTAtMjMgIE1p
Y2hhZWwgQ2F0YW56YXJvICA8bWNhdGFuemFyb0Bnbm9tZS5vcmc+CiAKICAgICAgICAgW1NPVVBd
IEZpeCBjcmFzaCBpbiBXZWJTb2NrZXRUYXNrCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvQ2xpcFN0YWNrLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL3RleG1hcC9DbGlwU3RhY2suY3BwCmluZGV4IGRhODQwYmY0ZjdlMjEy
OWIxMjNjOGQxN2U5MjhiMDA1NmJhY2Q5NzMuLjIzNWYxOTczYjUyMzQ2NGIzNTMwM2E0MTdiMGM3
ZmMzNDI4ZDk1YjUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L3RleG1hcC9DbGlwU3RhY2suY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL3RleG1hcC9DbGlwU3RhY2suY3BwCkBAIC02Miw2ICs2MiwzNyBAQCB2b2lkIENsaXBTdGFj
azo6c2V0U3RlbmNpbEluZGV4KGludCBzdGVuY2lsSW5kZXgpCiAgICAgY2xpcFN0YXRlRGlydHkg
PSB0cnVlOwogfQogCit2b2lkIENsaXBTdGFjazo6YWRkUm91bmRlZFJlY3QoY29uc3QgRmxvYXRS
b3VuZGVkUmVjdCYgcm91bmRlZFJlY3QsIGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiBtYXRy
aXgpCit7CisgICAgaWYgKGNsaXBTdGF0ZS5yb3VuZGVkUmVjdENvdW50ID49IHNfcm91bmRlZFJl
Y3RNYXhDbGlwcykKKyAgICAgICAgcmV0dXJuOworCisgICAgLy8gRW5zdXJlIHRoYXQgdGhlIHZl
Y3RvcnMgaG9sZGluZyB0aGUgY29tcG9uZW50cyBoYXZlIHRoZSByZXF1aXJlZCBzaXplLgorICAg
IG1fcm91bmRlZFJlY3RDb21wb25lbnRzLmdyb3coc19yb3VuZGVkUmVjdENvbXBvbmVudHNBcnJh
eVNpemUpOworICAgIG1fcm91bmRlZFJlY3RJbnZlcnNlVHJhbnNmb3JtQ29tcG9uZW50cy5ncm93
KHNfcm91bmRlZFJlY3RJbnZlcnNlVHJhbnNmb3JtQ29tcG9uZW50c0FycmF5U2l6ZSk7CisKKyAg
ICAvLyBDb3B5IHRoZSBSb3VuZGVkUmVjdCBjb21wb25lbnRzIHRvIHRoZSBhcHByb3ByaWF0ZSBw
b3NpdGlvbiBpbiB0aGUgYXJyYXkuCisgICAgaW50IGJhc2VQb3NpdGlvbiA9IGNsaXBTdGF0ZS5y
b3VuZGVkUmVjdENvdW50ICogc19yb3VuZGVkUmVjdENvbXBvbmVudHNQZXJSZWN0OworICAgIG1f
cm91bmRlZFJlY3RDb21wb25lbnRzW2Jhc2VQb3NpdGlvbl0gPSByb3VuZGVkUmVjdC5yZWN0KCku
eCgpOworICAgIG1fcm91bmRlZFJlY3RDb21wb25lbnRzW2Jhc2VQb3NpdGlvbiArIDFdID0gcm91
bmRlZFJlY3QucmVjdCgpLnkoKTsKKyAgICBtX3JvdW5kZWRSZWN0Q29tcG9uZW50c1tiYXNlUG9z
aXRpb24gKyAyXSA9IHJvdW5kZWRSZWN0LnJlY3QoKS53aWR0aCgpOworICAgIG1fcm91bmRlZFJl
Y3RDb21wb25lbnRzW2Jhc2VQb3NpdGlvbiArIDNdID0gcm91bmRlZFJlY3QucmVjdCgpLmhlaWdo
dCgpOworICAgIG1fcm91bmRlZFJlY3RDb21wb25lbnRzW2Jhc2VQb3NpdGlvbiArIDRdID0gcm91
bmRlZFJlY3QucmFkaWkoKS50b3BMZWZ0KCkud2lkdGgoKTsKKyAgICBtX3JvdW5kZWRSZWN0Q29t
cG9uZW50c1tiYXNlUG9zaXRpb24gKyA1XSA9IHJvdW5kZWRSZWN0LnJhZGlpKCkudG9wTGVmdCgp
LmhlaWdodCgpOworICAgIG1fcm91bmRlZFJlY3RDb21wb25lbnRzW2Jhc2VQb3NpdGlvbiArIDZd
ID0gcm91bmRlZFJlY3QucmFkaWkoKS50b3BSaWdodCgpLndpZHRoKCk7CisgICAgbV9yb3VuZGVk
UmVjdENvbXBvbmVudHNbYmFzZVBvc2l0aW9uICsgN10gPSByb3VuZGVkUmVjdC5yYWRpaSgpLnRv
cFJpZ2h0KCkuaGVpZ2h0KCk7CisgICAgbV9yb3VuZGVkUmVjdENvbXBvbmVudHNbYmFzZVBvc2l0
aW9uICsgOF0gPSByb3VuZGVkUmVjdC5yYWRpaSgpLmJvdHRvbUxlZnQoKS53aWR0aCgpOworICAg
IG1fcm91bmRlZFJlY3RDb21wb25lbnRzW2Jhc2VQb3NpdGlvbiArIDldID0gcm91bmRlZFJlY3Qu
cmFkaWkoKS5ib3R0b21MZWZ0KCkuaGVpZ2h0KCk7CisgICAgbV9yb3VuZGVkUmVjdENvbXBvbmVu
dHNbYmFzZVBvc2l0aW9uICsgMTBdID0gcm91bmRlZFJlY3QucmFkaWkoKS5ib3R0b21SaWdodCgp
LndpZHRoKCk7CisgICAgbV9yb3VuZGVkUmVjdENvbXBvbmVudHNbYmFzZVBvc2l0aW9uICsgMTFd
ID0gcm91bmRlZFJlY3QucmFkaWkoKS5ib3R0b21SaWdodCgpLmhlaWdodCgpOworCisgICAgLy8g
Q29weSB0aGUgVHJhbnNmb3JtYXRpb25NYXRyaXggY29tcG9uZW50cyB0byB0aGUgYXBwcm9wcmlh
dGUgcG9zaXRpb24gaW4gdGhlIGFycmF5LgorICAgIGJhc2VQb3NpdGlvbiA9IGNsaXBTdGF0ZS5y
b3VuZGVkUmVjdENvdW50ICogc19yb3VuZGVkUmVjdEludmVyc2VUcmFuc2Zvcm1Db21wb25lbnRz
UGVyUmVjdDsKKyAgICBtZW1jcHkobV9yb3VuZGVkUmVjdEludmVyc2VUcmFuc2Zvcm1Db21wb25l
bnRzLmRhdGEoKSArIGJhc2VQb3NpdGlvbiwgbWF0cml4LnRvQ29sdW1uTWFqb3JGbG9hdEFycmF5
KCkuZGF0YSgpLCBzX3JvdW5kZWRSZWN0SW52ZXJzZVRyYW5zZm9ybUNvbXBvbmVudHNQZXJSZWN0
ICogc2l6ZW9mKGZsb2F0KSk7CisKKyAgICBjbGlwU3RhdGUucm91bmRlZFJlY3RDb3VudCsrOwor
fQorCiB2b2lkIENsaXBTdGFjazo6YXBwbHkoKQogewogICAgIGlmIChjbGlwU3RhdGUuc2Npc3Nv
ckJveC5pc0VtcHR5KCkpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy90ZXhtYXAvQ2xpcFN0YWNrLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy90ZXhtYXAvQ2xpcFN0YWNrLmgKaW5kZXggMjY3Y2U0MDk2MDEyZmIxN2U3NjhlOTFjMjVmYTA5
OTBkNGUwOTllOS4uNzIyZDVmYWFiMjIyY2I4NmUwY2M3OTgwNDAwZjg5OWM3YzBmNTQyYSAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL0NsaXBTdGFj
ay5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9DbGlwU3Rh
Y2suaApAQCAtMjEsMjIgKzIxLDQxIEBACiAjaWZuZGVmIENsaXBTdGFja19oCiAjZGVmaW5lIENs
aXBTdGFja19oCiAKKyNpbmNsdWRlICJGbG9hdFJvdW5kZWRSZWN0LmgiCiAjaW5jbHVkZSAiSW50
UmVjdC5oIgogI2luY2x1ZGUgIkludFNpemUuaCIKKyNpbmNsdWRlICJUcmFuc2Zvcm1hdGlvbk1h
dHJpeC5oIgogI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewog
CisvLyBCZWNhdXNlIEdMU0wgdW5pZm9ybSBhcnJheXMgbmVlZCB0byBoYXZlIGEgZGVmaW5lZCBz
aXplLCB3ZSBuZWVkIHRvIHB1dCBhIGxpbWl0IHRvIHRoZSBudW1iZXIgb2Ygc2ltdWx0YW5lb3Vz
CisvLyByb3VuZGVkIHJlY3RhbmdsZSBjbGlwcyB0aGF0IHdlJ3JlIGdvaW5nIHRvIGFsbG93LiBD
dXJyZW50bHkgdGhpcyBpcyBkZWZpbmVkIHRvIDEwLgorLy8gVGhpcyB2YWx1ZSBtdXN0IGJlIGtl
cHQgaW4gc3luYyB3aXRoIHRoZSBzaXplcyBkZWZpbmVkIGluIFRleHR1cmVNYXBwZXJTaGFkZXJQ
cm9ncmFtLmNwcC4KK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBzX3JvdW5kZWRSZWN0TWF4Q2xpcHMg
PSAxMDsKKworLy8gV2hlbiBjb252ZXJ0aW5nIGEgcm91bmRlZCByZWN0YW5nbGUgdG8gYW4gYXJy
YXkgb2YgZmxvYXRzLCB3ZSBuZWVkIDEyIGVsZW1lbnRzLiBTbyB0aGUgc2l6ZSBvZiB0aGUgYXJy
YXkKKy8vIHJlcXVpcmVkIHRvIGNvbnRhaW4gdGhlIDEwIHJlY3RhbmdsZXMgaXMgMTIgKiAxMCA9
IDEyMC4KKy8vIFRoaXMgdmFsdWUgbXVzdCBiZSBrZXB0IGluIHN5bmMgd2l0aCB0aGUgc2l6ZXMg
ZGVmaW5lZCBpbiBUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbS5jcHAuCitzdGF0aWMgY29uc3Qg
dW5zaWduZWQgc19yb3VuZGVkUmVjdENvbXBvbmVudHNQZXJSZWN0ID0gMTI7CitzdGF0aWMgY29u
c3QgdW5zaWduZWQgc19yb3VuZGVkUmVjdENvbXBvbmVudHNBcnJheVNpemUgPSBzX3JvdW5kZWRS
ZWN0TWF4Q2xpcHMgKiBzX3JvdW5kZWRSZWN0Q29tcG9uZW50c1BlclJlY3Q7CisKKy8vIFdoZW4g
Y29udmVydGluZyBhIHRyYW5zZm9ybWF0aW9uIG1hdHJpeCB0byBhbiBhcnJheSBvZiBmbG9hdHMs
IHdlIG5lZWQgMTYgZWxlbWVudHMuIFNvIHRoZSBzaXplIG9mIHRoZSBhcnJheQorLy8gcmVxdWly
ZWQgdG8gY29udGFpbiB0aGUgMTAgbWF0cmljZXMgaXMgMTYgKiAxMCA9IDE2MC4KKy8vIFRoaXMg
dmFsdWUgbXVzdCBiZSBrZXB0IGluIHN5bmMgd2l0aCB0aGUgc2l6ZXMgZGVmaW5lZCBpbiBUZXh0
dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbS5jcHAuCitzdGF0aWMgY29uc3QgdW5zaWduZWQgc19yb3Vu
ZGVkUmVjdEludmVyc2VUcmFuc2Zvcm1Db21wb25lbnRzUGVyUmVjdCA9IDE2Oworc3RhdGljIGNv
bnN0IHVuc2lnbmVkIHNfcm91bmRlZFJlY3RJbnZlcnNlVHJhbnNmb3JtQ29tcG9uZW50c0FycmF5
U2l6ZSA9IHNfcm91bmRlZFJlY3RNYXhDbGlwcyAqIHNfcm91bmRlZFJlY3RJbnZlcnNlVHJhbnNm
b3JtQ29tcG9uZW50c1BlclJlY3Q7CisKIGNsYXNzIENsaXBTdGFjayB7CiBwdWJsaWM6CiAgICAg
c3RydWN0IFN0YXRlIHsKLSAgICAgICAgU3RhdGUoY29uc3QgSW50UmVjdCYgc2Npc3NvcnMgPSBJ
bnRSZWN0KCksIGludCBzdGVuY2lsID0gMSkKKyAgICAgICAgU3RhdGUoY29uc3QgSW50UmVjdCYg
c2Npc3NvcnMgPSBJbnRSZWN0KCkpCiAgICAgICAgICAgICA6IHNjaXNzb3JCb3goc2Npc3NvcnMp
Ci0gICAgICAgICAgICAsIHN0ZW5jaWxJbmRleChzdGVuY2lsKQogICAgICAgICB7IH0KIAogICAg
ICAgICBJbnRSZWN0IHNjaXNzb3JCb3g7Ci0gICAgICAgIGludCBzdGVuY2lsSW5kZXg7CisgICAg
ICAgIGludCBzdGVuY2lsSW5kZXggeyAxIH07CisgICAgICAgIHVuc2lnbmVkIHJvdW5kZWRSZWN0
Q291bnQgeyAwIH07CiAgICAgfTsKIAogICAgIC8vIFktYXhpcyBzaG91bGQgYmUgaW52ZXJ0ZWQg
b25seSB3aGVuIHBhaW50aW5nIGludG8gdGhlIHdpbmRvdy4KQEAgLTU0LDYgKzczLDEzIEBAIHB1
YmxpYzoKICAgICB2b2lkIHNldFN0ZW5jaWxJbmRleChpbnQpOwogICAgIGludCBnZXRTdGVuY2ls
SW5kZXgoKSBjb25zdCB7IHJldHVybiBjbGlwU3RhdGUuc3RlbmNpbEluZGV4OyB9CiAKKyAgICB2
b2lkIGFkZFJvdW5kZWRSZWN0KGNvbnN0IEZsb2F0Um91bmRlZFJlY3QmLCBjb25zdCBUcmFuc2Zv
cm1hdGlvbk1hdHJpeCYpOworICAgIGNvbnN0IGZsb2F0KiByb3VuZGVkUmVjdENvbXBvbmVudHMo
KSBjb25zdCB7IHJldHVybiBtX3JvdW5kZWRSZWN0Q29tcG9uZW50cy5kYXRhKCk7IH0KKyAgICBj
b25zdCBmbG9hdCogcm91bmRlZFJlY3RJbnZlcnNlVHJhbnNmb3JtQ29tcG9uZW50cygpIGNvbnN0
IHsgcmV0dXJuIG1fcm91bmRlZFJlY3RJbnZlcnNlVHJhbnNmb3JtQ29tcG9uZW50cy5kYXRhKCk7
IH0KKyAgICB1bnNpZ25lZCByb3VuZGVkUmVjdENvdW50KCkgY29uc3QgeyByZXR1cm4gY2xpcFN0
YXRlLnJvdW5kZWRSZWN0Q291bnQ7IH0KKyAgICBib29sIGlzUm91bmRlZFJlY3RDbGlwRW5hYmxl
ZCgpIGNvbnN0IHsgcmV0dXJuICEhY2xpcFN0YXRlLnJvdW5kZWRSZWN0Q291bnQ7IH0KKyAgICBi
b29sIGlzUm91bmRlZFJlY3RDbGlwQWxsb3dlZCgpIGNvbnN0IHsgcmV0dXJuIGNsaXBTdGF0ZS5y
b3VuZGVkUmVjdENvdW50IDwgc19yb3VuZGVkUmVjdE1heENsaXBzOyB9CisKICAgICB2b2lkIGFw
cGx5KCk7CiAgICAgdm9pZCBhcHBseUlmTmVlZGVkKCk7CiAKQEAgLTY1LDYgKzkxLDggQEAgcHJp
dmF0ZToKICAgICBJbnRTaXplIHNpemU7CiAgICAgYm9vbCBjbGlwU3RhdGVEaXJ0eSB7IGZhbHNl
IH07CiAgICAgWUF4aXNNb2RlIHlBeGlzTW9kZSB7IFlBeGlzTW9kZTo6RGVmYXVsdCB9OworICAg
IFZlY3RvcjxmbG9hdCwgc19yb3VuZGVkUmVjdENvbXBvbmVudHNBcnJheVNpemU+IG1fcm91bmRl
ZFJlY3RDb21wb25lbnRzOworICAgIFZlY3RvcjxmbG9hdCwgc19yb3VuZGVkUmVjdEludmVyc2VU
cmFuc2Zvcm1Db21wb25lbnRzQXJyYXlTaXplPiBtX3JvdW5kZWRSZWN0SW52ZXJzZVRyYW5zZm9y
bUNvbXBvbmVudHM7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlci5oIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXIuaApp
bmRleCBlZWIwZmNhNDFhZmJhMGE0MTEwYzQ0YWJjODQ2Y2I5NzcwNjM2ODBmLi4zMzRkY2FlODU3
MGViOGEwZTEyODZiNDg5ZWEyOGQ2NzQ4YTgwMmM4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlci5oCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyLmgKQEAgLTM3LDYg
KzM3LDcgQEAgY2xhc3MgQml0bWFwVGV4dHVyZVBvb2w7CiBjbGFzcyBHcmFwaGljc0xheWVyOwog
Y2xhc3MgVGV4dHVyZU1hcHBlcjsKIGNsYXNzIEZpbHRlck9wZXJhdGlvbnM7CitjbGFzcyBGbG9h
dFJvdW5kZWRSZWN0OwogCiBjbGFzcyBUZXh0dXJlTWFwcGVyIHsKICAgICBXVEZfTUFLRV9GQVNU
X0FMTE9DQVRFRDsKQEAgLTc1LDcgKzc2LDcgQEAgcHVibGljOgogCiAgICAgLy8gbWFrZXMgYSBz
dXJmYWNlIHRoZSB0YXJnZXQgZm9yIHRoZSBmb2xsb3dpbmcgZHJhd1RleHR1cmUgY2FsbHMuCiAg
ICAgdmlydHVhbCB2b2lkIGJpbmRTdXJmYWNlKEJpdG1hcFRleHR1cmUqIHN1cmZhY2UpID0gMDsK
LSAgICB2aXJ0dWFsIHZvaWQgYmVnaW5DbGlwKGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4Jiwg
Y29uc3QgRmxvYXRSZWN0JikgPSAwOworICAgIHZpcnR1YWwgdm9pZCBiZWdpbkNsaXAoY29uc3Qg
VHJhbnNmb3JtYXRpb25NYXRyaXgmLCBjb25zdCBGbG9hdFJvdW5kZWRSZWN0JikgPSAwOwogICAg
IHZpcnR1YWwgdm9pZCBlbmRDbGlwKCkgPSAwOwogICAgIHZpcnR1YWwgSW50UmVjdCBjbGlwQm91
bmRzKCkgPSAwOwogICAgIHZpcnR1YWwgdm9pZCBiZWdpblByZXNlcnZlczNEKCkgeyB9OwpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVN
YXBwZXJHTC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4
dHVyZU1hcHBlckdMLmNwcAppbmRleCA1NDBjNDBiYjRjMWY3YzcwMjQ0YThiMDNkYjFjZmE1OWM0
YjZmNjk1Li4xODg5OWU1OThmNzZjZjJjYzEwOTI4ZGVjNWZhZjVlN2VmYzc4OGZjIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBl
ckdMLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4
dHVyZU1hcHBlckdMLmNwcApAQCAtMjksNiArMjksNyBAQAogI2luY2x1ZGUgIkV4dGVuc2lvbnNH
TC5oIgogI2luY2x1ZGUgIkZpbHRlck9wZXJhdGlvbnMuaCIKICNpbmNsdWRlICJGbG9hdFF1YWQu
aCIKKyNpbmNsdWRlICJGbG9hdFJvdW5kZWRSZWN0LmgiCiAjaW5jbHVkZSAiR0xDb250ZXh0Lmgi
CiAjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCiAjaW5jbHVkZSAiSW1hZ2UuaCIKQEAgLTQ0
Miw2ICs0NDMsMTUgQEAgc3RhdGljIFRyYW5zZm9ybWF0aW9uTWF0cml4IGNvbG9yU3BhY2VNYXRy
aXhGb3JGbGFncyhUZXh0dXJlTWFwcGVyR0w6OkZsYWdzIGZsYWcKICAgICByZXR1cm4gbWF0cml4
OwogfQogCitzdGF0aWMgdm9pZCBwcmVwYXJlUm91bmRlZFJlY3RDbGlwKFRleHR1cmVNYXBwZXJT
aGFkZXJQcm9ncmFtJiBwcm9ncmFtLCBjb25zdCBmbG9hdCogcmVjdHMsIGNvbnN0IGZsb2F0KiB0
cmFuc2Zvcm1zLCBpbnQgblJlY3RzKQoreworICAgIGdsVXNlUHJvZ3JhbShwcm9ncmFtLnByb2dy
YW1JRCgpKTsKKworICAgIGdsVW5pZm9ybTFpKHByb2dyYW0ucm91bmRlZFJlY3ROdW1iZXJMb2Nh
dGlvbigpLCBuUmVjdHMpOworICAgIGdsVW5pZm9ybTRmdihwcm9ncmFtLnJvdW5kZWRSZWN0TG9j
YXRpb24oKSwgMyAqIG5SZWN0cywgcmVjdHMpOworICAgIGdsVW5pZm9ybU1hdHJpeDRmdihwcm9n
cmFtLnJvdW5kZWRSZWN0SW52ZXJzZVRyYW5zZm9ybU1hdHJpeExvY2F0aW9uKCksIG5SZWN0cywg
ZmFsc2UsIHRyYW5zZm9ybXMpOworfQorCiB2b2lkIFRleHR1cmVNYXBwZXJHTDo6ZHJhd1RleHR1
cmUoY29uc3QgQml0bWFwVGV4dHVyZSYgdGV4dHVyZSwgY29uc3QgRmxvYXRSZWN0JiB0YXJnZXRS
ZWN0LCBjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgbWF0cml4LCBmbG9hdCBvcGFjaXR5LCB1
bnNpZ25lZCBleHBvc2VkRWRnZXMpCiB7CiAgICAgaWYgKCF0ZXh0dXJlLmlzVmFsaWQoKSkKQEAg
LTQ4OSwxMSArNDk5LDE5IEBAIHZvaWQgVGV4dHVyZU1hcHBlckdMOjpkcmF3VGV4dHVyZShHTHVp
bnQgdGV4dHVyZSwgRmxhZ3MgZmxhZ3MsIGNvbnN0IEludFNpemUmIHRlCiAgICAgaWYgKHVzZUFu
dGlhbGlhc2luZyB8fCBvcGFjaXR5IDwgMSkKICAgICAgICAgZmxhZ3MgfD0gU2hvdWxkQmxlbmQ7
CiAKKyAgICBpZiAoY2xpcFN0YWNrKCkuaXNSb3VuZGVkUmVjdENsaXBFbmFibGVkKCkpIHsKKyAg
ICAgICAgb3B0aW9ucyB8PSBUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbTo6Um91bmRlZFJlY3RD
bGlwOworICAgICAgICBmbGFncyB8PSBTaG91bGRCbGVuZDsKKyAgICB9CisKICAgICBSZWY8VGV4
dHVyZU1hcHBlclNoYWRlclByb2dyYW0+IHByb2dyYW0gPSBkYXRhKCkuZ2V0U2hhZGVyUHJvZ3Jh
bShvcHRpb25zKTsKIAogICAgIGlmIChmaWx0ZXIpCiAgICAgICAgIHByZXBhcmVGaWx0ZXJQcm9n
cmFtKHByb2dyYW0uZ2V0KCksICpmaWx0ZXIuZ2V0KCksIGRhdGEoKS5maWx0ZXJJbmZvLT5wYXNz
LCB0ZXh0dXJlU2l6ZSwgZmlsdGVyQ29udGVudFRleHR1cmVJRCk7CiAKKyAgICBpZiAoY2xpcFN0
YWNrKCkuaXNSb3VuZGVkUmVjdENsaXBFbmFibGVkKCkpCisgICAgICAgIHByZXBhcmVSb3VuZGVk
UmVjdENsaXAocHJvZ3JhbS5nZXQoKSwgY2xpcFN0YWNrKCkucm91bmRlZFJlY3RDb21wb25lbnRz
KCksIGNsaXBTdGFjaygpLnJvdW5kZWRSZWN0SW52ZXJzZVRyYW5zZm9ybUNvbXBvbmVudHMoKSwg
Y2xpcFN0YWNrKCkucm91bmRlZFJlY3RDb3VudCgpKTsKKwogICAgIGRyYXdUZXh0dXJlZFF1YWRX
aXRoUHJvZ3JhbShwcm9ncmFtLmdldCgpLCB0ZXh0dXJlLCBmbGFncywgdGV4dHVyZVNpemUsIHRh
cmdldFJlY3QsIG1vZGVsVmlld01hdHJpeCwgb3BhY2l0eSk7CiB9CiAKQEAgLTU1MiwxMSArNTcw
LDE5IEBAIHZvaWQgVGV4dHVyZU1hcHBlckdMOjpkcmF3VGV4dHVyZVBsYW5hcllVVihjb25zdCBz
dGQ6OmFycmF5PEdMdWludCwgMz4mIHRleHR1cmVzCiAgICAgaWYgKHVzZUFudGlhbGlhc2luZyB8
fCBvcGFjaXR5IDwgMSkKICAgICAgICAgZmxhZ3MgfD0gU2hvdWxkQmxlbmQ7CiAKKyAgICBpZiAo
Y2xpcFN0YWNrKCkuaXNSb3VuZGVkUmVjdENsaXBFbmFibGVkKCkpIHsKKyAgICAgICAgb3B0aW9u
cyB8PSBUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbTo6Um91bmRlZFJlY3RDbGlwOworICAgICAg
ICBmbGFncyB8PSBTaG91bGRCbGVuZDsKKyAgICB9CisKICAgICBSZWY8VGV4dHVyZU1hcHBlclNo
YWRlclByb2dyYW0+IHByb2dyYW0gPSBkYXRhKCkuZ2V0U2hhZGVyUHJvZ3JhbShvcHRpb25zKTsK
IAogICAgIGlmIChmaWx0ZXIpCiAgICAgICAgIHByZXBhcmVGaWx0ZXJQcm9ncmFtKHByb2dyYW0u
Z2V0KCksICpmaWx0ZXIuZ2V0KCksIGRhdGEoKS5maWx0ZXJJbmZvLT5wYXNzLCB0ZXh0dXJlU2l6
ZSwgZmlsdGVyQ29udGVudFRleHR1cmVJRCk7CiAKKyAgICBpZiAoY2xpcFN0YWNrKCkuaXNSb3Vu
ZGVkUmVjdENsaXBFbmFibGVkKCkpCisgICAgICAgIHByZXBhcmVSb3VuZGVkUmVjdENsaXAocHJv
Z3JhbS5nZXQoKSwgY2xpcFN0YWNrKCkucm91bmRlZFJlY3RDb21wb25lbnRzKCksIGNsaXBTdGFj
aygpLnJvdW5kZWRSZWN0SW52ZXJzZVRyYW5zZm9ybUNvbXBvbmVudHMoKSwgY2xpcFN0YWNrKCku
cm91bmRlZFJlY3RDb3VudCgpKTsKKwogICAgIFZlY3RvcjxzdGQ6OnBhaXI8R0x1aW50LCBHTHVp
bnQ+ID4gdGV4dHVyZXNBbmRTYW1wbGVycyA9IHsKICAgICAgICAgeyB0ZXh0dXJlc1swXSwgcHJv
Z3JhbS0+c2FtcGxlcllMb2NhdGlvbigpIH0sCiAgICAgICAgIHsgdGV4dHVyZXNbMV0sIHByb2dy
YW0tPnNhbXBsZXJVTG9jYXRpb24oKSB9LApAQCAtNjAyLDExICs2MjgsMTkgQEAgdm9pZCBUZXh0
dXJlTWFwcGVyR0w6OmRyYXdUZXh0dXJlU2VtaVBsYW5hcllVVihjb25zdCBzdGQ6OmFycmF5PEdM
dWludCwgMj4mIHRleHQKICAgICBpZiAodXNlQW50aWFsaWFzaW5nIHx8IG9wYWNpdHkgPCAxKQog
ICAgICAgICBmbGFncyB8PSBTaG91bGRCbGVuZDsKIAorICAgIGlmIChjbGlwU3RhY2soKS5pc1Jv
dW5kZWRSZWN0Q2xpcEVuYWJsZWQoKSkgeworICAgICAgICBvcHRpb25zIHw9IFRleHR1cmVNYXBw
ZXJTaGFkZXJQcm9ncmFtOjpSb3VuZGVkUmVjdENsaXA7CisgICAgICAgIGZsYWdzIHw9IFNob3Vs
ZEJsZW5kOworICAgIH0KKwogICAgIFJlZjxUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbT4gcHJv
Z3JhbSA9IGRhdGEoKS5nZXRTaGFkZXJQcm9ncmFtKG9wdGlvbnMpOwogCiAgICAgaWYgKGZpbHRl
cikKICAgICAgICAgcHJlcGFyZUZpbHRlclByb2dyYW0ocHJvZ3JhbS5nZXQoKSwgKmZpbHRlci5n
ZXQoKSwgZGF0YSgpLmZpbHRlckluZm8tPnBhc3MsIHRleHR1cmVTaXplLCBmaWx0ZXJDb250ZW50
VGV4dHVyZUlEKTsKIAorICAgIGlmIChjbGlwU3RhY2soKS5pc1JvdW5kZWRSZWN0Q2xpcEVuYWJs
ZWQoKSkKKyAgICAgICAgcHJlcGFyZVJvdW5kZWRSZWN0Q2xpcChwcm9ncmFtLmdldCgpLCBjbGlw
U3RhY2soKS5yb3VuZGVkUmVjdENvbXBvbmVudHMoKSwgY2xpcFN0YWNrKCkucm91bmRlZFJlY3RJ
bnZlcnNlVHJhbnNmb3JtQ29tcG9uZW50cygpLCBjbGlwU3RhY2soKS5yb3VuZGVkUmVjdENvdW50
KCkpOworCiAgICAgVmVjdG9yPHN0ZDo6cGFpcjxHTHVpbnQsIEdMdWludD4gPiB0ZXh0dXJlc0Fu
ZFNhbXBsZXJzID0gewogICAgICAgICB7IHRleHR1cmVzWzBdLCBwcm9ncmFtLT5zYW1wbGVyWUxv
Y2F0aW9uKCkgfSwKICAgICAgICAgeyB0ZXh0dXJlc1sxXSwgcHJvZ3JhbS0+c2FtcGxlclVMb2Nh
dGlvbigpIH0KQEAgLTY1MCwxMSArNjg0LDE5IEBAIHZvaWQgVGV4dHVyZU1hcHBlckdMOjpkcmF3
VGV4dHVyZVBhY2tlZFlVVihHTHVpbnQgdGV4dHVyZSwgY29uc3Qgc3RkOjphcnJheTxHTGZsCiAg
ICAgaWYgKHVzZUFudGlhbGlhc2luZyB8fCBvcGFjaXR5IDwgMSkKICAgICAgICAgZmxhZ3MgfD0g
U2hvdWxkQmxlbmQ7CiAKKyAgICBpZiAoY2xpcFN0YWNrKCkuaXNSb3VuZGVkUmVjdENsaXBFbmFi
bGVkKCkpIHsKKyAgICAgICAgb3B0aW9ucyB8PSBUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbTo6
Um91bmRlZFJlY3RDbGlwOworICAgICAgICBmbGFncyB8PSBTaG91bGRCbGVuZDsKKyAgICB9CisK
ICAgICBSZWY8VGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW0+IHByb2dyYW0gPSBkYXRhKCkuZ2V0
U2hhZGVyUHJvZ3JhbShvcHRpb25zKTsKIAogICAgIGlmIChmaWx0ZXIpCiAgICAgICAgIHByZXBh
cmVGaWx0ZXJQcm9ncmFtKHByb2dyYW0uZ2V0KCksICpmaWx0ZXIuZ2V0KCksIGRhdGEoKS5maWx0
ZXJJbmZvLT5wYXNzLCB0ZXh0dXJlU2l6ZSwgZmlsdGVyQ29udGVudFRleHR1cmVJRCk7CiAKKyAg
ICBpZiAoY2xpcFN0YWNrKCkuaXNSb3VuZGVkUmVjdENsaXBFbmFibGVkKCkpCisgICAgICAgIHBy
ZXBhcmVSb3VuZGVkUmVjdENsaXAocHJvZ3JhbS5nZXQoKSwgY2xpcFN0YWNrKCkucm91bmRlZFJl
Y3RDb21wb25lbnRzKCksIGNsaXBTdGFjaygpLnJvdW5kZWRSZWN0SW52ZXJzZVRyYW5zZm9ybUNv
bXBvbmVudHMoKSwgY2xpcFN0YWNrKCkucm91bmRlZFJlY3RDb3VudCgpKTsKKwogICAgIFZlY3Rv
cjxzdGQ6OnBhaXI8R0x1aW50LCBHTHVpbnQ+ID4gdGV4dHVyZXNBbmRTYW1wbGVycyA9IHsKICAg
ICAgICAgeyB0ZXh0dXJlLCBwcm9ncmFtLT5zYW1wbGVyTG9jYXRpb24oKSB9CiAgICAgfTsKQEAg
LTY3Myw5ICs3MTUsMTcgQEAgdm9pZCBUZXh0dXJlTWFwcGVyR0w6OmRyYXdTb2xpZENvbG9yKGNv
bnN0IEZsb2F0UmVjdCYgcmVjdCwgY29uc3QgVHJhbnNmb3JtYXRpb24KICAgICAgICAgZmxhZ3Mg
fD0gU2hvdWxkQW50aWFsaWFzIHwgKGlzQmxlbmRpbmdBbGxvd2VkID8gU2hvdWxkQmxlbmQgOiAw
KTsKICAgICB9CiAKKyAgICBpZiAoY2xpcFN0YWNrKCkuaXNSb3VuZGVkUmVjdENsaXBFbmFibGVk
KCkpIHsKKyAgICAgICAgb3B0aW9ucyB8PSBUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbTo6Um91
bmRlZFJlY3RDbGlwOworICAgICAgICBmbGFncyB8PSBTaG91bGRCbGVuZDsKKyAgICB9CisKICAg
ICBSZWY8VGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW0+IHByb2dyYW0gPSBkYXRhKCkuZ2V0U2hh
ZGVyUHJvZ3JhbShvcHRpb25zKTsKICAgICBnbFVzZVByb2dyYW0ocHJvZ3JhbS0+cHJvZ3JhbUlE
KCkpOwogCisgICAgaWYgKGNsaXBTdGFjaygpLmlzUm91bmRlZFJlY3RDbGlwRW5hYmxlZCgpKQor
ICAgICAgICBwcmVwYXJlUm91bmRlZFJlY3RDbGlwKHByb2dyYW0uZ2V0KCksIGNsaXBTdGFjaygp
LnJvdW5kZWRSZWN0Q29tcG9uZW50cygpLCBjbGlwU3RhY2soKS5yb3VuZGVkUmVjdEludmVyc2VU
cmFuc2Zvcm1Db21wb25lbnRzKCksIGNsaXBTdGFjaygpLnJvdW5kZWRSZWN0Q291bnQoKSk7CisK
ICAgICBhdXRvIFtyLCBnLCBiLCBhXSA9IHByZW11bHRpcGxpZWQoY29sb3IudG9TUkdCQUxvc3N5
PGZsb2F0PigpKTsKICAgICBnbFVuaWZvcm00Zihwcm9ncmFtLT5jb2xvckxvY2F0aW9uKCksIHIs
IGcsIGIsIGEpOwogICAgIGlmIChhIDwgMSAmJiBpc0JsZW5kaW5nQWxsb3dlZCkKQEAgLTg4NCwx
MCArOTM0LDQxIEBAIGJvb2wgVGV4dHVyZU1hcHBlckdMOjpiZWdpblNjaXNzb3JDbGlwKGNvbnN0
IFRyYW5zZm9ybWF0aW9uTWF0cml4JiBtb2RlbFZpZXdNYXRyCiAgICAgcmV0dXJuIHRydWU7CiB9
CiAKLXZvaWQgVGV4dHVyZU1hcHBlckdMOjpiZWdpbkNsaXAoY29uc3QgVHJhbnNmb3JtYXRpb25N
YXRyaXgmIG1vZGVsVmlld01hdHJpeCwgY29uc3QgRmxvYXRSZWN0JiB0YXJnZXRSZWN0KQorYm9v
bCBUZXh0dXJlTWFwcGVyR0w6OmJlZ2luUm91bmRlZFJlY3RDbGlwKGNvbnN0IFRyYW5zZm9ybWF0
aW9uTWF0cml4JiBtb2RlbFZpZXdNYXRyaXgsIGNvbnN0IEZsb2F0Um91bmRlZFJlY3QmIHRhcmdl
dFJlY3QpCit7CisgICAgLy8gVGhpcyBpcyBpbXBsZW1lbnRlZCBieSB0ZWxsaW5nIHRoZSBmcmFn
bWVudCBzaGFkZXIgdG8gY2hlY2sgd2hldGhlciBlYWNoIHBpeGVsIGlzIGluc2lkZSB0aGUgcm91
bmRlZCByZWN0YW5nbGUKKyAgICAvLyBiZWZvcmUgcGFpbnRpbmcgaXQuCisgICAgLy8KKyAgICAv
LyBJbnNpZGUgdGhlIHNoYWRlciwgdGhlIG1hdGggdG8gY2hlY2sgd2hldGhlciBhIHBvaW50IGlz
IGluc2lkZSB0aGUgcm91bmRlZCByZWN0YW5nbGUgcmVxdWlyZXMgdGhlIHJlY3RhbmdsZSB0bwor
ICAgIC8vIGJlIGFsaWduZWQgdG8gdGhlIFggYW5kIFkgYXhpcywgd2hpY2ggaXMgbm90IGd1YXJh
bnRlZWQgaWYgdGhlIHRyYW5zZm9ybWF0aW9uIG1hdHJpeCBpbmNsdWRlcyByb3RhdGlvbnMuIElu
IG9yZGVyCisgICAgLy8gdG8gYXZvaWQgdGhpcywgaW5zdGVhZCBvZiBhcHBseWluZyB0aGUgdHJh
bnNmb3JtYXRpb24gdG8gdGhlIHJvdW5kZWQgcmVjdGFuZ2xlLCB3ZSBjYWxjdWxhdGUgdGhlIGlu
dmVyc2UKKyAgICAvLyBvZiB0aGUgdHJhbnNmb3JtYXRpb24gYW5kIGFwcGx5IGl0IHRvIHRoZSBw
aXhlbHMgYmVmb3JlIGNoZWNraW5nIHdoZXRoZXIgdGhleSBhcmUgaW5zaWRlIHRoZSByb3VuZGVk
IHJlY3RhbmdsZS4KKyAgICAvLyBUaGlzIHdvcmtzIGZpbmUgYXMgbG9uZyBhcyB0aGUgdHJhbnNm
b3JtYXRpb24gbWF0cml4IGlzIGludmVydGlibGUuCisgICAgLy8KKyAgICAvLyBUaGVyZSBpcyBh
IGxpbWl0IHRvIHRoZSBudW1iZXIgb2Ygcm91bmRlZCByZWN0YW5nbGUgY2xpcHBpbmdzIHRoYXQg
Y2FuIGJlIGRvbmUsIHRoYXQgaGFwcGVucyBiZWNhdXNlIHRoZSBHTFNMCisgICAgLy8gYXJyYXlz
IG11c3QgaGF2ZSBhIHByZWRlZmluZWQgc2l6ZS4gVGhlIGxpbWl0IGlzIGRlZmluZWQgaW5zaWRl
IENsaXBTdGFjaywgYW5kIHRoYXQncyB3aHkgd2UgbmVlZCB0byBjYWxsCisgICAgLy8gY2xpcFN0
YWNrKCkuaXNSb3VuZGVkUmVjdENsaXBBbGxvd2VkKCkgYmVmb3JlIHRyeWluZyB0byBhZGQgYSBu
ZXcgY2xpcC4KKworICAgIGlmICghdGFyZ2V0UmVjdC5pc1JvdW5kZWQoKSB8fCAhdGFyZ2V0UmVj
dC5pc1JlbmRlcmFibGUoKSB8fCB0YXJnZXRSZWN0LmlzRW1wdHkoKSB8fCAhbW9kZWxWaWV3TWF0
cml4LmlzSW52ZXJ0aWJsZSgpIHx8ICFjbGlwU3RhY2soKS5pc1JvdW5kZWRSZWN0Q2xpcEFsbG93
ZWQoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgRmxvYXRRdWFkIHF1YWQgPSBtb2Rl
bFZpZXdNYXRyaXgucHJvamVjdFF1YWQodGFyZ2V0UmVjdC5yZWN0KCkpOworICAgIEludFJlY3Qg
cmVjdCA9IHF1YWQuZW5jbG9zaW5nQm91bmRpbmdCb3goKTsKKworICAgIGNsaXBTdGFjaygpLmFk
ZFJvdW5kZWRSZWN0KHRhcmdldFJlY3QsIG1vZGVsVmlld01hdHJpeC5pbnZlcnNlKCkudmFsdWUo
KSk7CisgICAgY2xpcFN0YWNrKCkuaW50ZXJzZWN0KHJlY3QpOworICAgIGNsaXBTdGFjaygpLmFw
cGx5SWZOZWVkZWQoKTsKKworICAgIHJldHVybiB0cnVlOworfQorCit2b2lkIFRleHR1cmVNYXBw
ZXJHTDo6YmVnaW5DbGlwKGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiBtb2RlbFZpZXdNYXRy
aXgsIGNvbnN0IEZsb2F0Um91bmRlZFJlY3QmIHRhcmdldFJlY3QpCiB7CiAgICAgY2xpcFN0YWNr
KCkucHVzaCgpOwotICAgIGlmIChiZWdpblNjaXNzb3JDbGlwKG1vZGVsVmlld01hdHJpeCwgdGFy
Z2V0UmVjdCkpCisgICAgaWYgKGJlZ2luUm91bmRlZFJlY3RDbGlwKG1vZGVsVmlld01hdHJpeCwg
dGFyZ2V0UmVjdCkpCisgICAgICAgIHJldHVybjsKKworICAgIGlmIChiZWdpblNjaXNzb3JDbGlw
KG1vZGVsVmlld01hdHJpeCwgdGFyZ2V0UmVjdC5yZWN0KCkpKQogICAgICAgICByZXR1cm47CiAK
ICAgICBkYXRhKCkuaW5pdGlhbGl6ZVN0ZW5jaWwoKTsKQEAgLTkwMiw3ICs5ODMsNyBAQCB2b2lk
IFRleHR1cmVNYXBwZXJHTDo6YmVnaW5DbGlwKGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiBt
b2RlbFZpZXdNYXRyaXgsIGNvbgogICAgIGdsVmVydGV4QXR0cmliUG9pbnRlcihwcm9ncmFtLT52
ZXJ0ZXhMb2NhdGlvbigpLCAyLCBHTF9GTE9BVCwgZmFsc2UsIDAsIDApOwogCiAgICAgVHJhbnNm
b3JtYXRpb25NYXRyaXggbWF0cml4KG1vZGVsVmlld01hdHJpeCk7Ci0gICAgbWF0cml4Lm11bHRp
cGx5KFRyYW5zZm9ybWF0aW9uTWF0cml4OjpyZWN0VG9SZWN0KEZsb2F0UmVjdCgwLCAwLCAxLCAx
KSwgdGFyZ2V0UmVjdCkpOworICAgIG1hdHJpeC5tdWx0aXBseShUcmFuc2Zvcm1hdGlvbk1hdHJp
eDo6cmVjdFRvUmVjdChGbG9hdFJlY3QoMCwgMCwgMSwgMSksIHRhcmdldFJlY3QucmVjdCgpKSk7
CiAKICAgICBzdGF0aWMgY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXggZnVsbFByb2plY3Rpb25N
YXRyaXggPSBUcmFuc2Zvcm1hdGlvbk1hdHJpeDo6cmVjdFRvUmVjdChGbG9hdFJlY3QoMCwgMCwg
MSwgMSksIEZsb2F0UmVjdCgtMSwgLTEsIDIsIDIpKTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJHTC5oIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJHTC5oCmluZGV4
IDI2NzE3NWUxODQzN2MyN2RkNGFhM2M1YjhlMGYyNDhiY2VhM2I2YWEuLjM4NzRkN2VlY2IwMWI1
OTk4NTA5NWExMmIwYWEwMGJiYjA0N2QzYzcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyR0wuaAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlckdMLmgKQEAgLTc1LDcg
Kzc1LDcgQEAgcHVibGljOgogCiAgICAgdm9pZCBiaW5kU3VyZmFjZShCaXRtYXBUZXh0dXJlKiBz
dXJmYWNlKSBvdmVycmlkZTsKICAgICBCaXRtYXBUZXh0dXJlKiBjdXJyZW50U3VyZmFjZSgpOwot
ICAgIHZvaWQgYmVnaW5DbGlwKGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiwgY29uc3QgRmxv
YXRSZWN0Jikgb3ZlcnJpZGU7CisgICAgdm9pZCBiZWdpbkNsaXAoY29uc3QgVHJhbnNmb3JtYXRp
b25NYXRyaXgmLCBjb25zdCBGbG9hdFJvdW5kZWRSZWN0Jikgb3ZlcnJpZGU7CiAgICAgdm9pZCBi
ZWdpblBhaW50aW5nKFBhaW50RmxhZ3MgPSAwKSBvdmVycmlkZTsKICAgICB2b2lkIGVuZFBhaW50
aW5nKCkgb3ZlcnJpZGU7CiAgICAgdm9pZCBlbmRDbGlwKCkgb3ZlcnJpZGU7CkBAIC0xMDAsNiAr
MTAwLDcgQEAgcHJpdmF0ZToKICAgICB2b2lkIGRyYXdFZGdlVHJpYW5nbGVzKFRleHR1cmVNYXBw
ZXJTaGFkZXJQcm9ncmFtJik7CiAKICAgICBib29sIGJlZ2luU2Npc3NvckNsaXAoY29uc3QgVHJh
bnNmb3JtYXRpb25NYXRyaXgmLCBjb25zdCBGbG9hdFJlY3QmKTsKKyAgICBib29sIGJlZ2luUm91
bmRlZFJlY3RDbGlwKGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiwgY29uc3QgRmxvYXRSb3Vu
ZGVkUmVjdCYpOwogICAgIHZvaWQgYmluZERlZmF1bHRTdXJmYWNlKCk7CiAgICAgQ2xpcFN0YWNr
JiBjbGlwU3RhY2soKTsKICAgICBpbmxpbmUgVGV4dHVyZU1hcHBlckdMRGF0YSYgZGF0YSgpIHsg
cmV0dXJuICptX2RhdGE7IH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyTGF5ZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJMYXllci5jcHAKaW5kZXggYTIzNmE2
YTdhODQ5ZTIwMGM3MzkxMGVjNjU4MzM5OGVmNzgxZjMxMi4uYTFjNmJiMTAwNmMyOTliNGEwMDgw
NzAyNTMwMjJiZGYzMDBmMzgzYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJMYXllci5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJMYXllci5jcHAKQEAgLTE5
Niw4ICsxOTYsNyBAQCB2b2lkIFRleHR1cmVNYXBwZXJMYXllcjo6cGFpbnRTZWxmKGNvbnN0IFRl
eHR1cmVNYXBwZXJQYWludE9wdGlvbnMmIG9wdGlvbnMpCiAKICAgICBib29sIHNob3VsZENsaXAg
PSBtX3N0YXRlLmNvbnRlbnRzQ2xpcHBpbmdSZWN0LmlzUm91bmRlZCgpIHx8ICFtX3N0YXRlLmNv
bnRlbnRzQ2xpcHBpbmdSZWN0LnJlY3QoKS5jb250YWlucyhtX3N0YXRlLmNvbnRlbnRzUmVjdCk7
CiAgICAgaWYgKHNob3VsZENsaXApIHsKLSAgICAgICAgLy8gRklYTUU6IFRleHR1cmVNYXBwZXI6
OmJlZ2luQ2xpcCBkb2Vzbid0IHN1cHBvcnQgRmxvYXRSb3VuZGVkUmVjdCwgc28gd2UgbmVlZCB0
byBjb252ZXJ0IG1fc3RhdGUuY29udGVudHNDbGlwcGluZ1JlY3QgdG8gRmxvYXRSZWN0LgotICAg
ICAgICBvcHRpb25zLnRleHR1cmVNYXBwZXIuYmVnaW5DbGlwKHRyYW5zZm9ybSwgbV9zdGF0ZS5j
b250ZW50c0NsaXBwaW5nUmVjdC5yZWN0KCkpOworICAgICAgICBvcHRpb25zLnRleHR1cmVNYXBw
ZXIuYmVnaW5DbGlwKHRyYW5zZm9ybSwgbV9zdGF0ZS5jb250ZW50c0NsaXBwaW5nUmVjdCk7CiAg
ICAgfQogCiAgICAgbV9jb250ZW50c0xheWVyLT5wYWludFRvVGV4dHVyZU1hcHBlcihvcHRpb25z
LnRleHR1cmVNYXBwZXIsIG1fc3RhdGUuY29udGVudHNSZWN0LCB0cmFuc2Zvcm0sIG9wdGlvbnMu
b3BhY2l0eSk7CkBAIC0yMzAsNyArMjI5LDcgQEAgdm9pZCBUZXh0dXJlTWFwcGVyTGF5ZXI6OnBh
aW50U2VsZkFuZENoaWxkcmVuKGNvbnN0IFRleHR1cmVNYXBwZXJQYWludE9wdGlvbnMmIG8KICAg
ICAgICAgY2xpcFRyYW5zZm9ybS50cmFuc2xhdGUob3B0aW9ucy5vZmZzZXQud2lkdGgoKSwgb3B0
aW9ucy5vZmZzZXQuaGVpZ2h0KCkpOwogICAgICAgICBjbGlwVHJhbnNmb3JtLm11bHRpcGx5KG9w
dGlvbnMudHJhbnNmb3JtKTsKICAgICAgICAgY2xpcFRyYW5zZm9ybS5tdWx0aXBseShtX2xheWVy
VHJhbnNmb3Jtcy5jb21iaW5lZCk7Ci0gICAgICAgIG9wdGlvbnMudGV4dHVyZU1hcHBlci5iZWdp
bkNsaXAoY2xpcFRyYW5zZm9ybSwgbGF5ZXJSZWN0KCkpOworICAgICAgICBvcHRpb25zLnRleHR1
cmVNYXBwZXIuYmVnaW5DbGlwKGNsaXBUcmFuc2Zvcm0sIEZsb2F0Um91bmRlZFJlY3QobGF5ZXJS
ZWN0KCkpKTsKICAgICAgICAgbV9zdGF0ZS5iYWNrZHJvcExheWVyLT5wYWludFJlY3Vyc2l2ZShv
cHRpb25zKTsKICAgICAgICAgb3B0aW9ucy50ZXh0dXJlTWFwcGVyLmVuZENsaXAoKTsKICAgICB9
CkBAIC0yNDksNyArMjQ4LDcgQEAgdm9pZCBUZXh0dXJlTWFwcGVyTGF5ZXI6OnBhaW50U2VsZkFu
ZENoaWxkcmVuKGNvbnN0IFRleHR1cmVNYXBwZXJQYWludE9wdGlvbnMmIG8KICAgICAgICAgY2xp
cFRyYW5zZm9ybS50cmFuc2xhdGUob3B0aW9ucy5vZmZzZXQud2lkdGgoKSwgb3B0aW9ucy5vZmZz
ZXQuaGVpZ2h0KCkpOwogICAgICAgICBjbGlwVHJhbnNmb3JtLm11bHRpcGx5KG9wdGlvbnMudHJh
bnNmb3JtKTsKICAgICAgICAgY2xpcFRyYW5zZm9ybS5tdWx0aXBseShtX2xheWVyVHJhbnNmb3Jt
cy5jb21iaW5lZCk7Ci0gICAgICAgIG9wdGlvbnMudGV4dHVyZU1hcHBlci5iZWdpbkNsaXAoY2xp
cFRyYW5zZm9ybSwgbGF5ZXJSZWN0KCkpOworICAgICAgICBvcHRpb25zLnRleHR1cmVNYXBwZXIu
YmVnaW5DbGlwKGNsaXBUcmFuc2Zvcm0sIEZsb2F0Um91bmRlZFJlY3QobGF5ZXJSZWN0KCkpKTsK
IAogICAgICAgICAvLyBJZiBhcyBhIHJlc3VsdCBvZiBiZWdpbkNsaXAoKSwgdGhlIGNsaXBwaW5n
IGFyZWEgaXMgZW1wdHksIGl0IG1lYW5zIHRoYXQgdGhlIGludGVyc2VjdGlvbiBvZiB0aGUgcHJl
dmlvdXMKICAgICAgICAgLy8gY2xpcHBpbmcgYXJlYSBhbmQgdGhlIGN1cnJlbnQgb25lIGRvbid0
IGhhdmUgYW55IHBpeGVscyBpbiBjb21tb24uIEluIHRoaXMgY2FzZSB3ZSBjYW4gc2tpcCBwYWlu
dGluZyB0aGUKQEAgLTQwNSw3ICs0MDQsNyBAQCB2b2lkIFRleHR1cmVNYXBwZXJMYXllcjo6cGFp
bnRVc2luZ092ZXJsYXBSZWdpb25zKGNvbnN0IFRleHR1cmVNYXBwZXJQYWludE9wdGlvbgogICAg
ICAgICBpZiAoIXJlY3QuaW50ZXJzZWN0cyhvcHRpb25zLnRleHR1cmVNYXBwZXIuY2xpcEJvdW5k
cygpKSkKICAgICAgICAgICAgIGNvbnRpbnVlOwogCi0gICAgICAgIG9wdGlvbnMudGV4dHVyZU1h
cHBlci5iZWdpbkNsaXAoVHJhbnNmb3JtYXRpb25NYXRyaXgoKSwgcmVjdCk7CisgICAgICAgIG9w
dGlvbnMudGV4dHVyZU1hcHBlci5iZWdpbkNsaXAoVHJhbnNmb3JtYXRpb25NYXRyaXgoKSwgRmxv
YXRSb3VuZGVkUmVjdChyZWN0KSk7CiAgICAgICAgIHBhaW50U2VsZkFuZENoaWxkcmVuV2l0aFJl
cGxpY2Eob3B0aW9ucyk7CiAgICAgICAgIG9wdGlvbnMudGV4dHVyZU1hcHBlci5lbmRDbGlwKCk7
CiAgICAgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4
bWFwL1RleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbS5jcHAKaW5kZXgg
MjZjMGY0MmU4NTM5NDY5NjViODdjY2ZkNzkzMjMxMjI2OGMyOTFhYy4uZmY4MWZhYTI2YjA0Nzdm
YjAzMDAxMzkwYzY0ODA1YmU2MDY4N2Y1NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtLmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlclNo
YWRlclByb2dyYW0uY3BwCkBAIC02OCw2ICs2OCw3IEBAIHN0YXRpYyBjb25zdCBjaGFyKiB2ZXJ0
ZXhUZW1wbGF0ZUxUMzIwVmFycyA9CiAgICAgICAgIHZhcnlpbmcgdmVjMiB2X3RleENvb3JkOwog
ICAgICAgICB2YXJ5aW5nIHZlYzIgdl90cmFuc2Zvcm1lZFRleENvb3JkOwogICAgICAgICB2YXJ5
aW5nIGZsb2F0IHZfYW50aWFsaWFzOworICAgICAgICB2YXJ5aW5nIHZlYzQgdl9ub25Qcm9qZWN0
ZWRQb3NpdGlvbjsKICAgICApOwogCiAjaWYgIVVTRShPUEVOR0xfRVMpCkBAIC03OCw2ICs3OSw3
IEBAIHN0YXRpYyBjb25zdCBjaGFyKiB2ZXJ0ZXhUZW1wbGF0ZUdFMzIwVmFycyA9CiAgICAgICAg
IG91dCB2ZWMyIHZfdGV4Q29vcmQ7CiAgICAgICAgIG91dCB2ZWMyIHZfdHJhbnNmb3JtZWRUZXhD
b29yZDsKICAgICAgICAgb3V0IGZsb2F0IHZfYW50aWFsaWFzOworICAgICAgICBvdXQgdmVjNCB2
X25vblByb2plY3RlZFBvc2l0aW9uOwogICAgICk7CiAjZW5kaWYKIApAQCAtMTMzLDcgKzEzNSw4
IEBAIHN0YXRpYyBjb25zdCBjaGFyKiB2ZXJ0ZXhUZW1wbGF0ZUNvbW1vbiA9CiAgICAgICAgICAg
ICB2X3RleENvb3JkID0gcG9zaXRpb247CiAgICAgICAgICAgICB2ZWM0IGNsYW1wZWRQb3NpdGlv
biA9IGNsYW1wKHZlYzQocG9zaXRpb24sIDAuLCAxLiksIDAuLCAxLik7CiAgICAgICAgICAgICB2
X3RyYW5zZm9ybWVkVGV4Q29vcmQgPSAodV90ZXh0dXJlU3BhY2VNYXRyaXggKiBjbGFtcGVkUG9z
aXRpb24pLnh5OwotICAgICAgICAgICAgZ2xfUG9zaXRpb24gPSB1X3Byb2plY3Rpb25NYXRyaXgg
KiB1X21vZGVsVmlld01hdHJpeCAqIHZlYzQocG9zaXRpb24sIDAuLCAxLik7CisgICAgICAgICAg
ICB2X25vblByb2plY3RlZFBvc2l0aW9uID0gdV9tb2RlbFZpZXdNYXRyaXggKiB2ZWM0KHBvc2l0
aW9uLCAwLiwgMS4pOworICAgICAgICAgICAgZ2xfUG9zaXRpb24gPSB1X3Byb2plY3Rpb25NYXRy
aXggKiB2X25vblByb2plY3RlZFBvc2l0aW9uOwogICAgICAgICB9CiAgICAgKTsKIApAQCAtMTY4
LDYgKzE3MSwxNiBAQCBzdGF0aWMgY29uc3QgY2hhciogdmVydGV4VGVtcGxhdGVDb21tb24gPQog
ICAgICAgICBHTFNMX0RJUkVDVElWRShkZWZpbmUgU2FtcGxlckV4dGVybmFsT0VTVHlwZSBzYW1w
bGVyMkQpIFwKICAgICBHTFNMX0RJUkVDVElWRShlbmRpZikKIAorLy8gVGhlIG1heCBudW1iZXIg
b2Ygc3RhY2tlZCByb3VuZGVkIHJlY3RhbmdsZSBjbGlwcyBhbGxvd2VkIGlzIDEwLCB3aGljaCBp
cyBhbHNvIHRoZQorLy8gbWF4IG51bWJlciBvZiB0cmFuc2Zvcm1zIHRoYXQgd2UgY2FuIGdldC4g
V2UgbmVlZCAzIGNvbXBvbmVudHMgZm9yIGVhY2ggcm91bmRlZAorLy8gcmVjdGFuZ2xlIHNvIHdl
IG5lZWQgMzAgY29tcG9uZW50cyB0byByZWNlaXZlIHRoZSAxMCByZWN0YW5nbGVzLgorLy8KKy8v
IEtlZXAgdGhpcyBpcyBzeW5jIHdpdGggdGhlIHZhbHVlcyBkZWZpbmVkIGluIENsaXBTdGFjay5o
CisjZGVmaW5lIFJPVU5ERURfUkVDVF9DT05TVEFOVFMgICAgICAgICAgICAgICAgICAgICAgIFwK
KyAgICBHTFNMX0RJUkVDVElWRShkZWZpbmUgUk9VTkRFRF9SRUNUX01BWF9SRUNUUyAxMCkgXAor
ICAgIEdMU0xfRElSRUNUSVZFKGRlZmluZSBST1VOREVEX1JFQ1RfQVJSQVlfU0laRSAzMCkgXAor
ICAgIEdMU0xfRElSRUNUSVZFKGRlZmluZSBST1VOREVEX1JFQ1RfSU5WRVJTRV9UUkFOU0ZPUk1f
QVJSQVlfU0laRSAxMCkKKwogLy8gQ29tbW9uIGhlYWRlciBmb3IgYWxsIHZlcnNpb25zLiBXZSBk
ZWZpbmUgdGhlIG1hdHJpY2VzIHZhcmlhYmxlcyBoZXJlIHRvIGtlZXAgdGhlIHByZWNpc2lvbgog
Ly8gZGlyZWN0aXZlcyBzY29wZTogdGhlIGZpcnN0IG9uZSBhcHBsaWVzIHRvIHRoZSBtYXRyaWNl
cyB2YXJpYWJsZXMgYW5kIHRoZSBuZXh0IG9uZSB0byB0aGUKIC8vIHJlc3Qgb2YgdGhlbS4gVGhl
IHByZWNpc2lvbiBpcyBvbmx5IHVzZWQgaW4gR0xFUy4KQEAgLTE3NSw2ICsxODgsNyBAQCBzdGF0
aWMgY29uc3QgY2hhciogZnJhZ21lbnRUZW1wbGF0ZUhlYWRlckNvbW1vbiA9CiAgICAgUkVDVF9U
RVhUVVJFX0RJUkVDVElWRQogICAgIEFOVElBTElBU0lOR19URVhfQ09PUkRfRElSRUNUSVZFCiAg
ICAgQkxVUl9DT05TVEFOVFMKKyAgICBST1VOREVEX1JFQ1RfQ09OU1RBTlRTCiAgICAgT0VTX0VH
TF9JTUFHRV9FWFRFUk5BTF9ESVJFQ1RJVkUKICNpZiBVU0UoT1BFTkdMX0VTKQogICAgIFRFWFRV
UkVfU1BBQ0VfTUFUUklYX1BSRUNJU0lPTl9ESVJFQ1RJVkUKQEAgLTE5OSw2ICsyMTMsNyBAQCBz
dGF0aWMgY29uc3QgY2hhciogZnJhZ21lbnRUZW1wbGF0ZUxUMzIwVmFycyA9CiAgICAgICAgIHZh
cnlpbmcgZmxvYXQgdl9hbnRpYWxpYXM7CiAgICAgICAgIHZhcnlpbmcgdmVjMiB2X3RleENvb3Jk
OwogICAgICAgICB2YXJ5aW5nIHZlYzIgdl90cmFuc2Zvcm1lZFRleENvb3JkOworICAgICAgICB2
YXJ5aW5nIHZlYzQgdl9ub25Qcm9qZWN0ZWRQb3NpdGlvbjsKICAgICApOwogCiAjaWYgIVVTRShP
UEVOR0xfRVMpCkBAIC0yMDgsNiArMjIzLDcgQEAgc3RhdGljIGNvbnN0IGNoYXIqIGZyYWdtZW50
VGVtcGxhdGVHRTMyMFZhcnMgPQogICAgICAgICBpbiBmbG9hdCB2X2FudGlhbGlhczsKICAgICAg
ICAgaW4gdmVjMiB2X3RleENvb3JkOwogICAgICAgICBpbiB2ZWMyIHZfdHJhbnNmb3JtZWRUZXhD
b29yZDsKKyAgICAgICAgaW4gdmVjNCB2X25vblByb2plY3RlZFBvc2l0aW9uOwogICAgICk7CiAj
ZW5kaWYKIApAQCAtMjI2LDYgKzI0Miw5IEBAIHN0YXRpYyBjb25zdCBjaGFyKiBmcmFnbWVudFRl
bXBsYXRlQ29tbW9uID0KICAgICAgICAgdW5pZm9ybSB2ZWMyIHVfc2hhZG93T2Zmc2V0OwogICAg
ICAgICB1bmlmb3JtIHZlYzQgdV9jb2xvcjsKICAgICAgICAgdW5pZm9ybSBmbG9hdCB1X2dhdXNz
aWFuS2VybmVsW0dBVVNTSUFOX0tFUk5FTF9IQUxGX1dJRFRIXTsKKyAgICAgICAgdW5pZm9ybSBp
bnQgdV9yb3VuZGVkUmVjdE51bWJlcjsKKyAgICAgICAgdW5pZm9ybSB2ZWM0IHVfcm91bmRlZFJl
Y3RbUk9VTkRFRF9SRUNUX0FSUkFZX1NJWkVdOworICAgICAgICB1bmlmb3JtIG1hdDQgdV9yb3Vu
ZGVkUmVjdEludmVyc2VUcmFuc2Zvcm1NYXRyaXhbUk9VTkRFRF9SRUNUX0lOVkVSU0VfVFJBTlNG
T1JNX0FSUkFZX1NJWkVdOwogCiAgICAgICAgIHZvaWQgbm9vcChpbm91dCB2ZWM0IGR1bW15UGFy
YW1ldGVyKSB7IH0KICAgICAgICAgdm9pZCBub29wKGlub3V0IHZlYzQgZHVtbXlQYXJhbWV0ZXIs
IHZlYzIgdGV4Q29vcmQpIHsgfQpAQCAtMzkwLDYgKzQwOSw3MCBAQCBzdGF0aWMgY29uc3QgY2hh
ciogZnJhZ21lbnRUZW1wbGF0ZUNvbW1vbiA9CiAKICAgICAgICAgdm9pZCBhcHBseVNvbGlkQ29s
b3IoaW5vdXQgdmVjNCBjb2xvcikgeyBjb2xvciAqPSB1X2NvbG9yOyB9CiAKKyAgICAgICAgZmxv
YXQgZWxsaXBzaXNEaXN0KHZlYzIgcCwgdmVjMiByYWRpdXMpCisgICAgICAgIHsKKyAgICAgICAg
ICAgIGlmIChyYWRpdXMgPT0gdmVjMigwLCAwKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gMC4w
OworCisgICAgICAgICAgICB2ZWMyIHAwID0gcCAvIHJhZGl1czsKKyAgICAgICAgICAgIHZlYzIg
cDEgPSAyLjAgKiBwMCAvIHJhZGl1czsKKworICAgICAgICAgICAgcmV0dXJuIChkb3QocDAsIHAw
KSAtIDEuMCkgLyBsZW5ndGggKHAxKTsKKyAgICAgICAgfQorCisgICAgICAgIGZsb2F0IGVsbGlw
c2lzQ292ZXJhZ2UodmVjMiBwb2ludCwgdmVjMiBjZW50ZXIsIHZlYzIgcmFkaXVzKQorICAgICAg
ICB7CisgICAgICAgICAgICBmbG9hdCBkID0gZWxsaXBzaXNEaXN0KHBvaW50IC0gY2VudGVyLCBy
YWRpdXMpOworICAgICAgICAgICAgcmV0dXJuIGNsYW1wKDAuNSAtIGQsIDAuMCwgMS4wKTsKKyAg
ICAgICAgfQorCisgICAgICAgIGZsb2F0IHJvdW5kZWRSZWN0Q292ZXJhZ2UodmVjMiBwLCBpbnQg
aW5kZXgpCisgICAgICAgIHsKKyAgICAgICAgICAgIHZlYzQgYm91bmRzID0gdmVjNCh1X3JvdW5k
ZWRSZWN0W2luZGV4XS54eSwgdV9yb3VuZGVkUmVjdFtpbmRleF0ueHkgKyB1X3JvdW5kZWRSZWN0
W2luZGV4XS56dyk7CisKKyAgICAgICAgICAgIGlmIChwLnggPCBib3VuZHMueCB8fCBwLnkgPCBi
b3VuZHMueSB8fCBwLnggPj0gYm91bmRzLnogfHwgcC55ID49IGJvdW5kcy53KQorICAgICAgICAg
ICAgICAgIHJldHVybiAwLjA7CisKKyAgICAgICAgICAgIHZlYzIgdG9wTGVmdFJhZGlpID0gdV9y
b3VuZGVkUmVjdFtpbmRleCArIDFdLnh5OworICAgICAgICAgICAgdmVjMiB0b3BSaWdodFJhZGlp
ID0gdV9yb3VuZGVkUmVjdFtpbmRleCArIDFdLnp3OworICAgICAgICAgICAgdmVjMiBib3R0b21M
ZWZ0UmFkaWkgPSB1X3JvdW5kZWRSZWN0W2luZGV4ICsgMl0ueHk7CisgICAgICAgICAgICB2ZWMy
IGJvdHRvbVJpZ2h0UmFkaWkgPSB1X3JvdW5kZWRSZWN0W2luZGV4ICsgMl0uenc7CisKKyAgICAg
ICAgICAgIHZlYzIgdG9wTGVmdENlbnRlciA9IGJvdW5kcy54eSArIHRvcExlZnRSYWRpaTsKKyAg
ICAgICAgICAgIHZlYzIgdG9wUmlnaHRDZW50ZXIgPSBib3VuZHMuenkgKyAodG9wUmlnaHRSYWRp
aSAqIHZlYzIoLTEsIDEpKTsKKyAgICAgICAgICAgIHZlYzIgYm90dG9tTGVmdENlbnRlciA9IGJv
dW5kcy54dyArIChib3R0b21MZWZ0UmFkaWkgKiB2ZWMyKDEsIC0xKSk7CisgICAgICAgICAgICB2
ZWMyIGJvdHRvbVJpZ2h0Q2VudGVyID0gYm91bmRzLnp3ICsgKGJvdHRvbVJpZ2h0UmFkaWkgKiB2
ZWMyKC0xLCAtMSkpOworCisgICAgICAgICAgICBpZiAocC54IDwgdG9wTGVmdENlbnRlci54ICYm
IHAueSA8IHRvcExlZnRDZW50ZXIueSkKKyAgICAgICAgICAgICAgICByZXR1cm4gZWxsaXBzaXND
b3ZlcmFnZShwLCB0b3BMZWZ0Q2VudGVyLCB0b3BMZWZ0UmFkaWkpOworCisgICAgICAgICAgICBp
ZiAocC54ID4gdG9wUmlnaHRDZW50ZXIueCAmJiBwLnkgPCB0b3BSaWdodENlbnRlci55KQorICAg
ICAgICAgICAgICAgIHJldHVybiBlbGxpcHNpc0NvdmVyYWdlKHAsIHRvcFJpZ2h0Q2VudGVyLCB0
b3BSaWdodFJhZGlpKTsKKworICAgICAgICAgICAgaWYgKHAueCA8IGJvdHRvbUxlZnRDZW50ZXIu
eCAmJiBwLnkgPiBib3R0b21MZWZ0Q2VudGVyLnkpCisgICAgICAgICAgICAgICAgcmV0dXJuIGVs
bGlwc2lzQ292ZXJhZ2UocCwgYm90dG9tTGVmdENlbnRlciwgYm90dG9tTGVmdFJhZGlpKTsKKwor
ICAgICAgICAgICAgaWYgKHAueCA+IGJvdHRvbVJpZ2h0Q2VudGVyLnggJiYgcC55ID4gYm90dG9t
UmlnaHRDZW50ZXIueSkKKyAgICAgICAgICAgICAgICByZXR1cm4gZWxsaXBzaXNDb3ZlcmFnZShw
LCBib3R0b21SaWdodENlbnRlciwgYm90dG9tUmlnaHRSYWRpaSk7CisKKyAgICAgICAgICAgIHJl
dHVybiAxLjA7CisgICAgICAgIH0KKworICAgICAgICB2b2lkIGFwcGx5Um91bmRlZFJlY3RDbGlw
KGlub3V0IHZlYzQgY29sb3IpCisgICAgICAgIHsKKyAgICAgICAgICAgIC8vIFRoaXMgd29ya3Mg
YnkgY2hlY2tpbmcgd2hldGhlciB0aGUgZnJhZ21lbnQgcG9zaXRpb24sIG9uY2UgdGhlIHRyYW5z
Zm9ybSBpcyBhcHBsaWVkLAorICAgICAgICAgICAgLy8gaXMgaW5zaWRlIHRoZSBkZWZpbmVkIHJv
dW5kZWQgcmVjdGFuZ2xlIG9yIG5vdC4KKyAgICAgICAgICAgIC8vCisgICAgICAgICAgICAvLyBX
ZSBjYW4ndCB1c2UgZ2xfZnJhZ0Nvb3JkIGZvciB0aGUgZnJhZ21lbnQgcG9zaXRpb24gYmVjYXVz
ZSB0aGF0cyB0aGUgcHJvamVjdGVkIHBvaW50CisgICAgICAgICAgICAvLyBhbmQgdGhlIHByb2pl
Y3Rpb24gc2NyZXdzIHRoZSBaIGNvbXBvbmVudC4gV2UgbmVlZCB0aGUgcmVhbCAzRCBwb3NpdGlv
biB0aGF0IGNvbWVzIGZyb20KKyAgICAgICAgICAgIC8vIHRoZSBub25Qcm9qZWN0ZWRQb3NpdGlv
biB2YXJpYWJsZS4KKyAgICAgICAgICAgIGludCBuUmVjdHMgPSBtaW4oUk9VTkRFRF9SRUNUX01B
WF9SRUNUUywgdV9yb3VuZGVkUmVjdE51bWJlcik7CisgICAgICAgICAgICBmb3IgKGludCByZWN0
SW5kZXggPSAwOyByZWN0SW5kZXggPCBuUmVjdHM7IHJlY3RJbmRleCsrKSB7CisgICAgICAgICAg
ICAgICAgdmVjNCBmcmFnQ29vcmQgPSB1X3JvdW5kZWRSZWN0SW52ZXJzZVRyYW5zZm9ybU1hdHJp
eFtyZWN0SW5kZXhdICogdl9ub25Qcm9qZWN0ZWRQb3NpdGlvbjsKKyAgICAgICAgICAgICAgICBj
b2xvciAqPSByb3VuZGVkUmVjdENvdmVyYWdlKGZyYWdDb29yZC54eSwgcmVjdEluZGV4ICogMyk7
CisgICAgICAgICAgICB9CisgICAgICAgIH0KKwogICAgICAgICB2b2lkIG1haW4odm9pZCkKICAg
ICAgICAgewogICAgICAgICAgICAgdmVjNCBjb2xvciA9IHZlYzQoMS4sIDEuLCAxLiwgMS4pOwpA
QCAtNDE1LDYgKzQ5OCw3IEBAIHN0YXRpYyBjb25zdCBjaGFyKiBmcmFnbWVudFRlbXBsYXRlQ29t
bW9uID0KICAgICAgICAgICAgIGFwcGx5QWxwaGFCbHVySWZOZWVkZWQoY29sb3IsIHRleENvb3Jk
KTsKICAgICAgICAgICAgIGFwcGx5Q29udGVudFRleHR1cmVJZk5lZWRlZChjb2xvciwgdGV4Q29v
cmQpOwogICAgICAgICAgICAgYXBwbHlUZXh0dXJlRXh0ZXJuYWxPRVNJZk5lZWRlZChjb2xvciwg
dGV4Q29vcmQpOworICAgICAgICAgICAgYXBwbHlSb3VuZGVkUmVjdENsaXBJZk5lZWRlZChjb2xv
cik7CiAgICAgICAgICAgICBnbF9GcmFnQ29sb3IgPSBjb2xvcjsKICAgICAgICAgfQogICAgICk7
CkBAIC00NDgsNiArNTMyLDcgQEAgUmVmPFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtPiBUZXh0
dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbTo6Y3JlYXRlKFRleHR1cmVNYXBwZXIKICAgICBTRVRfQVBQ
TElFUl9GUk9NX09QVElPTlMoQ29udGVudFRleHR1cmUpOwogICAgIFNFVF9BUFBMSUVSX0ZST01f
T1BUSU9OUyhNYW51YWxSZXBlYXQpOwogICAgIFNFVF9BUFBMSUVSX0ZST01fT1BUSU9OUyhUZXh0
dXJlRXh0ZXJuYWxPRVMpOworICAgIFNFVF9BUFBMSUVSX0ZST01fT1BUSU9OUyhSb3VuZGVkUmVj
dENsaXApOwogCiAgICAgU3RyaW5nQnVpbGRlciB2ZXJ0ZXhTaGFkZXJCdWlsZGVyOwogCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1h
cHBlclNoYWRlclByb2dyYW0uaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3Rl
eG1hcC9UZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbS5oCmluZGV4IGZmODM2NDhlNzBlZDQ5Yzgz
OTgxYTQyOGU3MzBmMDE1ZjE3ZmM2YjEuLmQ2YWM1MDE4MjE3MjY3N2Q2MDExMmEwMmU0ZjhkNzVj
NTcwMGI1MTMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3Rl
eG1hcC9UZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbS5oCkBAIC00
OCw2ICs0OCw5IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICBtYWNybyhnYXVzc2lhbktlcm5l
bCkgXAogICAgIG1hY3JvKGJsdXJSYWRpdXMpIFwKICAgICBtYWNybyhzaGFkb3dPZmZzZXQpIFwK
KyAgICBtYWNybyhyb3VuZGVkUmVjdE51bWJlcikgXAorICAgIG1hY3JvKHJvdW5kZWRSZWN0KSBc
CisgICAgbWFjcm8ocm91bmRlZFJlY3RJbnZlcnNlVHJhbnNmb3JtTWF0cml4KSBcCiAKICNkZWZp
bmUgVEVYTUFQX1NBTVBMRVJfVkFSSUFCTEVTKG1hY3JvKSBcCiAgICAgbWFjcm8oc2FtcGxlcikg
XApAQCAtOTksNiArMTAyLDcgQEAgcHVibGljOgogICAgICAgICBUZXh0dXJlTlYyMSAgICAgID0g
MUwgPDwgMjAsCiAgICAgICAgIFRleHR1cmVQYWNrZWRZVVYgPSAxTCA8PCAyMSwKICAgICAgICAg
VGV4dHVyZUV4dGVybmFsT0VTID0gMUwgPDwgMjIsCisgICAgICAgIFJvdW5kZWRSZWN0Q2xpcCAg
PSAxTCA8PCAyMywKICAgICB9OwogCiAgICAgZW51bSBjbGFzcyBWYXJpYWJsZUlEIHsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXQvU2hhcmVkL0Nvb3JkaW5hdGVkR3JhcGhpY3MvQ29vcmRpbmF0
ZWRHcmFwaGljc1NjZW5lLmNwcCBiL1NvdXJjZS9XZWJLaXQvU2hhcmVkL0Nvb3JkaW5hdGVkR3Jh
cGhpY3MvQ29vcmRpbmF0ZWRHcmFwaGljc1NjZW5lLmNwcAppbmRleCBjNmUzM2ExNjc2Zjc3NjFl
M2M3ZTMxMDYzMjY3NzY5MTJlOWVmOGQ0Li4wNGZmYTJmNDMyNzY5NWEyYWE3Mzg3YTAyNGZhNjIx
MWNkMGM4NjljIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9Db29yZGluYXRlZEdy
YXBoaWNzL0Nvb3JkaW5hdGVkR3JhcGhpY3NTY2VuZS5jcHAKKysrIGIvU291cmNlL1dlYktpdC9T
aGFyZWQvQ29vcmRpbmF0ZWRHcmFwaGljcy9Db29yZGluYXRlZEdyYXBoaWNzU2NlbmUuY3BwCkBA
IC03MSw3ICs3MSw3IEBAIHZvaWQgQ29vcmRpbmF0ZWRHcmFwaGljc1NjZW5lOjpwYWludFRvQ3Vy
cmVudEdMQ29udGV4dChjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpCiAgICAgY3VycmVudFJvb3RM
YXllci0+c2V0VGV4dHVyZU1hcHBlcihtX3RleHR1cmVNYXBwZXIuZ2V0KCkpOwogICAgIGJvb2wg
c2NlbmVIYXNSdW5uaW5nQW5pbWF0aW9ucyA9IGN1cnJlbnRSb290TGF5ZXItPmFwcGx5QW5pbWF0
aW9uc1JlY3Vyc2l2ZWx5KE1vbm90b25pY1RpbWU6Om5vdygpKTsKICAgICBtX3RleHR1cmVNYXBw
ZXItPmJlZ2luUGFpbnRpbmcoUGFpbnRGbGFncyk7Ci0gICAgbV90ZXh0dXJlTWFwcGVyLT5iZWdp
bkNsaXAoVHJhbnNmb3JtYXRpb25NYXRyaXgoKSwgY2xpcFJlY3QpOworICAgIG1fdGV4dHVyZU1h
cHBlci0+YmVnaW5DbGlwKFRyYW5zZm9ybWF0aW9uTWF0cml4KCksIEZsb2F0Um91bmRlZFJlY3Qo
Y2xpcFJlY3QpKTsKIAogICAgIGlmIChjdXJyZW50Um9vdExheWVyLT50cmFuc2Zvcm0oKSAhPSBt
YXRyaXgpCiAgICAgICAgIGN1cnJlbnRSb290TGF5ZXItPnNldFRyYW5zZm9ybShtYXRyaXgpOwpk
aWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9n
CmluZGV4IDYxM2Y2OTI1MDNiNjJlYjkyYjg1OGJiMjk2YTZmMzZjODc1OGE3ZTEuLmExMzZiZGI1
ZTFlNzFjNWVmMmY1NzM0Y2FmNDRjNzI0NTQ0NTU4OGEgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3Rz
L0NoYW5nZUxvZworKysgYi9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxNCBAQAor
MjAyMC0xMC0yMyAgTWlndWVsIEdvbWV6ICA8bWFnb21lekBpZ2FsaWEuY29tPgorCisgICAgICAg
IFtHVEtdW1dQRV0gSW1wbGVtZW50IGFudGlhbGlhc2VkIHJvdW5kZWQgcmVjdGFuZ2xlIGNsaXBw
aW5nIGluIFRleHR1cmVNYXBwZXIKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTE3NDQ1NworCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEp
LgorCisgICAgICAgIFVwZGF0ZSBleHBlY3RhdGlvbnMgZm9yIHBhc3NpbmcgdGVzdC4KKworICAg
ICAgICAqIHBsYXRmb3JtL2d0ay9UZXN0RXhwZWN0YXRpb25zOgorCiAyMDIwLTEwLTIyICBGdWpp
aSBIaXJvbm9yaSAgPEhpcm9ub3JpLkZ1amlpQHNvbnkuY29tPgogCiAgICAgICAgIFtHVEtdIFVu
cmV2aWV3ZWQgdGVzdCBnYXJkZW5pbmcKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3BsYXRmb3Jt
L2d0ay9UZXN0RXhwZWN0YXRpb25zIGIvTGF5b3V0VGVzdHMvcGxhdGZvcm0vZ3RrL1Rlc3RFeHBl
Y3RhdGlvbnMKaW5kZXggZTEzNmI5OTEwYTlmMjFjYTg0ZjMzMjA3MjIwNDZjZDQ5YmE4MDk1Yi4u
MDhjODg2NzRiOTdiNTU0NzdiYTM4ZTA4M2I3ZDI3ODJkMWY1MDE4MSAxMDA2NDQKLS0tIGEvTGF5
b3V0VGVzdHMvcGxhdGZvcm0vZ3RrL1Rlc3RFeHBlY3RhdGlvbnMKKysrIGIvTGF5b3V0VGVzdHMv
cGxhdGZvcm0vZ3RrL1Rlc3RFeHBlY3RhdGlvbnMKQEAgLTMzMjgsNyArMzMyOCw2IEBAIHdlYmtp
dC5vcmcvYi8xOTM2NDEgd2VicnRjL3ZpZGVvLXNldERpcmVjdGlvbi5odG1sIFsgRmFpbHVyZSBd
CiAKIHdlYmtpdC5vcmcvYi8xOTQzODQgY29tcG9zaXRpbmcvY2xpcHBpbmcvYm9yZGVyLXJhZGl1
cy1hc3luYy1vdmVyZmxvdy1jbGlwcGluZy1sYXllci5odG1sIFsgRmFpbHVyZSBdCiB3ZWJraXQu
b3JnL2IvMjA2MDAwIGNvbXBvc2l0aW5nL2NsaXBwaW5nL2JvcmRlci1yYWRpdXMtYXN5bmMtb3Zl
cmZsb3ctbm9uLXN0YWNraW5nLmh0bWwgWyBJbWFnZU9ubHlGYWlsdXJlIF0KLXdlYmtpdC5vcmcv
Yi8yMTExMjEgY29tcG9zaXRpbmcvY2xpcHBpbmcvYm9yZGVyLXJhZGl1cy1vbi13ZWJnbC5odG1s
IFsgSW1hZ2VPbmx5RmFpbHVyZSBdCiAKIHdlYmtpdC5vcmcvYi8xOTQ2MDYgYWNjZXNzaWJpbGl0
eS9zZXQtdmFsdWUtbm90LXdvcmstZm9yLWRpc2FibGVkLXNsaWRlcnMuaHRtbCBbIEZhaWx1cmUg
XQogCg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>412168</attachid>
            <date>2020-10-23 03:40:31 -0700</date>
            <delta_ts>2020-10-23 05:53:47 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-174457-20201023124030.patch</filename>
            <type>text/plain</type>
            <size>33700</size>
            <attacher name="Miguel Gomez">magomez</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjY4OTA2CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMTY2Y2ZlMGI1MWViM2Qz
Nzc1MDI4Mjg5NDhjY2JmYjc2ZjdhNDc4NS4uNDIwZGYzODAzNTk3ZWZlZWY4MWIwZGZjNzI1Y2U0
NzVjYmNmNjc3MiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQ1IEBACisyMDIwLTEwLTIzICBNaWd1
ZWwgR29tZXogIDxtYWdvbWV6QGlnYWxpYS5jb20+CisKKyAgICAgICAgW0dUS11bV1BFXSBJbXBs
ZW1lbnQgYW50aWFsaWFzZWQgcm91bmRlZCByZWN0YW5nbGUgY2xpcHBpbmcgaW4gVGV4dHVyZU1h
cHBlcgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTc0
NDU3CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgSW1w
bGVtZW50IHJvdW5kZWQgcmVjdGFuZ2xlIGNsaXBwaW5nIGluIFRleHR1cmVNYXBwZXJHTCwgc3Vw
cG9ydGluZyB1cCB0byAxMCBzaW11bHRhbmVvdXMKKyAgICAgICAgcm91bmRlZCByZWN0YW5nbGUg
Y2xpcHMuIFRleHR1cmVNYXBwZXI6OmJlZ2luQ2xpcCgpIG5vdyByZWNlaXZlcyBhIHJvdW5kZWQg
cmVjdGFuZ2xlLCBhbmQKKyAgICAgICAgaXQgYXBwbGllcyB0aGUgYXBwcm9wcmlhdGUgY2xpcHBp
bmcgbWV0aG9kIGFzIHJlcXVpcmVkLgorCisgICAgICAgIFRoZSByb3VuZGVkIHJlY3RhbmdsZSBj
bGlwIGltcGxlbWVudGF0aW9uIHVzZXMgdGhlIGZyYWdtZW50IHNoYWRlciB0byBjYWxjdWxhdGUg
d2hldGhlcgorICAgICAgICBlYWNoIHBpeGVsIGlzIGluc2lkZSB0aGUgZGVmaW5lZCByb3VuZGVk
IHJlY3RhbmdsZXMsIGFuZCBwYWludHMgb3Igc2tpcHMgaXQgYXMgbmVlZGVkLgorCisgICAgICAg
ICogcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL0NsaXBTdGFjay5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpDbGlwU3RhY2s6OmFkZFJvdW5kZWRSZWN0KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFw
aGljcy90ZXhtYXAvQ2xpcFN0YWNrLmg6CisgICAgICAgIChXZWJDb3JlOjpDbGlwU3RhY2s6OlN0
YXRlOjpTdGF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpDbGlwU3RhY2s6OnJvdW5kZWRSZWN0Q29t
cG9uZW50cyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpDbGlwU3RhY2s6OnJvdW5kZWRSZWN0
SW52ZXJzZVRyYW5zZm9ybUNvbXBvbmVudHMgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6Q2xp
cFN0YWNrOjpyb3VuZGVkUmVjdENvdW50IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkNsaXBT
dGFjazo6aXNSb3VuZGVkUmVjdENsaXBFbmFibGVkIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6
OkNsaXBTdGFjazo6aXNSb3VuZGVkUmVjdENsaXBBbGxvd2VkIGNvbnN0KToKKyAgICAgICAgKiBw
bGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlci5oOgorICAgICAgICAqIHBsYXRm
b3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyR0wuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6cHJlcGFyZVJvdW5kZWRSZWN0Q2xpcCk6CisgICAgICAgIChXZWJDb3JlOjpUZXh0dXJlTWFw
cGVyR0w6OmRyYXdUZXh0dXJlKToKKyAgICAgICAgKFdlYkNvcmU6OlRleHR1cmVNYXBwZXJHTDo6
ZHJhd1RleHR1cmVQbGFuYXJZVVYpOgorICAgICAgICAoV2ViQ29yZTo6VGV4dHVyZU1hcHBlckdM
OjpkcmF3VGV4dHVyZVNlbWlQbGFuYXJZVVYpOgorICAgICAgICAoV2ViQ29yZTo6VGV4dHVyZU1h
cHBlckdMOjpkcmF3VGV4dHVyZVBhY2tlZFlVVik6CisgICAgICAgIChXZWJDb3JlOjpUZXh0dXJl
TWFwcGVyR0w6OmRyYXdTb2xpZENvbG9yKToKKyAgICAgICAgKFdlYkNvcmU6OlRleHR1cmVNYXBw
ZXJHTDo6YmVnaW5Sb3VuZGVkUmVjdENsaXApOgorICAgICAgICAoV2ViQ29yZTo6VGV4dHVyZU1h
cHBlckdMOjpiZWdpbkNsaXApOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9U
ZXh0dXJlTWFwcGVyR0wuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4
dHVyZU1hcHBlckxheWVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlRleHR1cmVNYXBwZXJMYXll
cjo6cGFpbnRTZWxmKToKKyAgICAgICAgKFdlYkNvcmU6OlRleHR1cmVNYXBwZXJMYXllcjo6cGFp
bnRTZWxmQW5kQ2hpbGRyZW4pOgorICAgICAgICAoV2ViQ29yZTo6VGV4dHVyZU1hcHBlckxheWVy
OjpwYWludFVzaW5nT3ZlcmxhcFJlZ2lvbnMpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNz
L3RleG1hcC9UZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbS5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbTo6Y3JlYXRlKToKKyAgICAgICAgKiBwbGF0Zm9y
bS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW0uaDoKKwogMjAyMC0x
MC0yMiAgQWxleCBDaHJpc3RlbnNlbiAgPGFjaHJpc3RlbnNlbkB3ZWJraXQub3JnPgogCiAgICAg
ICAgIE51bGwgY2hlY2sgcGxhdGZvcm1TdHJhdGVnaWVzIHdoZW4gbWFraW5nIGJsb2IgcmVhZCBz
dHJlYW0gZm9yIGFuIE5TVVJMUmVxdWVzdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9DaGFu
Z2VMb2cgYi9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxvZwppbmRleCA1MzVkODYyM2E0N2E5ZjZjMjcx
NWY4Yzg0YmQ0MmY3YjUwNzE5OWM3Li4wNzc0M2QxOWUzZWYzYmY1MDhiYzg1ZThjZDdhOTA5ZTc2
YWRlZDVkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxvZworKysgYi9Tb3VyY2Uv
V2ViS2l0L0NoYW5nZUxvZwpAQCAtMSwzICsxLDE1IEBACisyMDIwLTEwLTIzICBNaWd1ZWwgR29t
ZXogIDxtYWdvbWV6QGlnYWxpYS5jb20+CisKKyAgICAgICAgW0dUS11bV1BFXSBJbXBsZW1lbnQg
YW50aWFsaWFzZWQgcm91bmRlZCByZWN0YW5nbGUgY2xpcHBpbmcgaW4gVGV4dHVyZU1hcHBlcgor
ICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTc0NDU3CisK
KyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVXNlIHRoZSBu
ZXcgVGV4dHVyZU1hcHBlcjo6YmVnaW5DbGlwKCkgbWV0aG9kIHRoYXQgcmVjZWl2ZXMgYSBGbG9h
dFJvdW5kZWRSZWN0LgorCisgICAgICAgICogU2hhcmVkL0Nvb3JkaW5hdGVkR3JhcGhpY3MvQ29v
cmRpbmF0ZWRHcmFwaGljc1NjZW5lLmNwcDoKKyAgICAgICAgKFdlYktpdDo6Q29vcmRpbmF0ZWRH
cmFwaGljc1NjZW5lOjpwYWludFRvQ3VycmVudEdMQ29udGV4dCk6CisKIDIwMjAtMTAtMjMgIE1p
Y2hhZWwgQ2F0YW56YXJvICA8bWNhdGFuemFyb0Bnbm9tZS5vcmc+CiAKICAgICAgICAgW1NPVVBd
IEZpeCBjcmFzaCBpbiBXZWJTb2NrZXRUYXNrCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvQ2xpcFN0YWNrLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL3RleG1hcC9DbGlwU3RhY2suY3BwCmluZGV4IGRhODQwYmY0ZjdlMjEy
OWIxMjNjOGQxN2U5MjhiMDA1NmJhY2Q5NzMuLjIzNWYxOTczYjUyMzQ2NGIzNTMwM2E0MTdiMGM3
ZmMzNDI4ZDk1YjUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L3RleG1hcC9DbGlwU3RhY2suY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL3RleG1hcC9DbGlwU3RhY2suY3BwCkBAIC02Miw2ICs2MiwzNyBAQCB2b2lkIENsaXBTdGFj
azo6c2V0U3RlbmNpbEluZGV4KGludCBzdGVuY2lsSW5kZXgpCiAgICAgY2xpcFN0YXRlRGlydHkg
PSB0cnVlOwogfQogCit2b2lkIENsaXBTdGFjazo6YWRkUm91bmRlZFJlY3QoY29uc3QgRmxvYXRS
b3VuZGVkUmVjdCYgcm91bmRlZFJlY3QsIGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiBtYXRy
aXgpCit7CisgICAgaWYgKGNsaXBTdGF0ZS5yb3VuZGVkUmVjdENvdW50ID49IHNfcm91bmRlZFJl
Y3RNYXhDbGlwcykKKyAgICAgICAgcmV0dXJuOworCisgICAgLy8gRW5zdXJlIHRoYXQgdGhlIHZl
Y3RvcnMgaG9sZGluZyB0aGUgY29tcG9uZW50cyBoYXZlIHRoZSByZXF1aXJlZCBzaXplLgorICAg
IG1fcm91bmRlZFJlY3RDb21wb25lbnRzLmdyb3coc19yb3VuZGVkUmVjdENvbXBvbmVudHNBcnJh
eVNpemUpOworICAgIG1fcm91bmRlZFJlY3RJbnZlcnNlVHJhbnNmb3JtQ29tcG9uZW50cy5ncm93
KHNfcm91bmRlZFJlY3RJbnZlcnNlVHJhbnNmb3JtQ29tcG9uZW50c0FycmF5U2l6ZSk7CisKKyAg
ICAvLyBDb3B5IHRoZSBSb3VuZGVkUmVjdCBjb21wb25lbnRzIHRvIHRoZSBhcHByb3ByaWF0ZSBw
b3NpdGlvbiBpbiB0aGUgYXJyYXkuCisgICAgaW50IGJhc2VQb3NpdGlvbiA9IGNsaXBTdGF0ZS5y
b3VuZGVkUmVjdENvdW50ICogc19yb3VuZGVkUmVjdENvbXBvbmVudHNQZXJSZWN0OworICAgIG1f
cm91bmRlZFJlY3RDb21wb25lbnRzW2Jhc2VQb3NpdGlvbl0gPSByb3VuZGVkUmVjdC5yZWN0KCku
eCgpOworICAgIG1fcm91bmRlZFJlY3RDb21wb25lbnRzW2Jhc2VQb3NpdGlvbiArIDFdID0gcm91
bmRlZFJlY3QucmVjdCgpLnkoKTsKKyAgICBtX3JvdW5kZWRSZWN0Q29tcG9uZW50c1tiYXNlUG9z
aXRpb24gKyAyXSA9IHJvdW5kZWRSZWN0LnJlY3QoKS53aWR0aCgpOworICAgIG1fcm91bmRlZFJl
Y3RDb21wb25lbnRzW2Jhc2VQb3NpdGlvbiArIDNdID0gcm91bmRlZFJlY3QucmVjdCgpLmhlaWdo
dCgpOworICAgIG1fcm91bmRlZFJlY3RDb21wb25lbnRzW2Jhc2VQb3NpdGlvbiArIDRdID0gcm91
bmRlZFJlY3QucmFkaWkoKS50b3BMZWZ0KCkud2lkdGgoKTsKKyAgICBtX3JvdW5kZWRSZWN0Q29t
cG9uZW50c1tiYXNlUG9zaXRpb24gKyA1XSA9IHJvdW5kZWRSZWN0LnJhZGlpKCkudG9wTGVmdCgp
LmhlaWdodCgpOworICAgIG1fcm91bmRlZFJlY3RDb21wb25lbnRzW2Jhc2VQb3NpdGlvbiArIDZd
ID0gcm91bmRlZFJlY3QucmFkaWkoKS50b3BSaWdodCgpLndpZHRoKCk7CisgICAgbV9yb3VuZGVk
UmVjdENvbXBvbmVudHNbYmFzZVBvc2l0aW9uICsgN10gPSByb3VuZGVkUmVjdC5yYWRpaSgpLnRv
cFJpZ2h0KCkuaGVpZ2h0KCk7CisgICAgbV9yb3VuZGVkUmVjdENvbXBvbmVudHNbYmFzZVBvc2l0
aW9uICsgOF0gPSByb3VuZGVkUmVjdC5yYWRpaSgpLmJvdHRvbUxlZnQoKS53aWR0aCgpOworICAg
IG1fcm91bmRlZFJlY3RDb21wb25lbnRzW2Jhc2VQb3NpdGlvbiArIDldID0gcm91bmRlZFJlY3Qu
cmFkaWkoKS5ib3R0b21MZWZ0KCkuaGVpZ2h0KCk7CisgICAgbV9yb3VuZGVkUmVjdENvbXBvbmVu
dHNbYmFzZVBvc2l0aW9uICsgMTBdID0gcm91bmRlZFJlY3QucmFkaWkoKS5ib3R0b21SaWdodCgp
LndpZHRoKCk7CisgICAgbV9yb3VuZGVkUmVjdENvbXBvbmVudHNbYmFzZVBvc2l0aW9uICsgMTFd
ID0gcm91bmRlZFJlY3QucmFkaWkoKS5ib3R0b21SaWdodCgpLmhlaWdodCgpOworCisgICAgLy8g
Q29weSB0aGUgVHJhbnNmb3JtYXRpb25NYXRyaXggY29tcG9uZW50cyB0byB0aGUgYXBwcm9wcmlh
dGUgcG9zaXRpb24gaW4gdGhlIGFycmF5LgorICAgIGJhc2VQb3NpdGlvbiA9IGNsaXBTdGF0ZS5y
b3VuZGVkUmVjdENvdW50ICogc19yb3VuZGVkUmVjdEludmVyc2VUcmFuc2Zvcm1Db21wb25lbnRz
UGVyUmVjdDsKKyAgICBtZW1jcHkobV9yb3VuZGVkUmVjdEludmVyc2VUcmFuc2Zvcm1Db21wb25l
bnRzLmRhdGEoKSArIGJhc2VQb3NpdGlvbiwgbWF0cml4LnRvQ29sdW1uTWFqb3JGbG9hdEFycmF5
KCkuZGF0YSgpLCBzX3JvdW5kZWRSZWN0SW52ZXJzZVRyYW5zZm9ybUNvbXBvbmVudHNQZXJSZWN0
ICogc2l6ZW9mKGZsb2F0KSk7CisKKyAgICBjbGlwU3RhdGUucm91bmRlZFJlY3RDb3VudCsrOwor
fQorCiB2b2lkIENsaXBTdGFjazo6YXBwbHkoKQogewogICAgIGlmIChjbGlwU3RhdGUuc2Npc3Nv
ckJveC5pc0VtcHR5KCkpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy90ZXhtYXAvQ2xpcFN0YWNrLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy90ZXhtYXAvQ2xpcFN0YWNrLmgKaW5kZXggMjY3Y2U0MDk2MDEyZmIxN2U3NjhlOTFjMjVmYTA5
OTBkNGUwOTllOS4uNWYxNDc2ZmQ0NWMwODcwYTRjYzA2ZDExN2M1ZjBjZTYzY2Q2ZDMzZCAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL0NsaXBTdGFj
ay5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9DbGlwU3Rh
Y2suaApAQCAtMjEsMjIgKzIxLDQxIEBACiAjaWZuZGVmIENsaXBTdGFja19oCiAjZGVmaW5lIENs
aXBTdGFja19oCiAKKyNpbmNsdWRlICJGbG9hdFJvdW5kZWRSZWN0LmgiCiAjaW5jbHVkZSAiSW50
UmVjdC5oIgogI2luY2x1ZGUgIkludFNpemUuaCIKKyNpbmNsdWRlICJUcmFuc2Zvcm1hdGlvbk1h
dHJpeC5oIgogI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewog
CisvLyBCZWNhdXNlIEdMU0wgdW5pZm9ybSBhcnJheXMgbmVlZCB0byBoYXZlIGEgZGVmaW5lZCBz
aXplLCB3ZSBuZWVkIHRvIHB1dCBhIGxpbWl0IHRvIHRoZSBudW1iZXIgb2Ygc2ltdWx0YW5lb3Vz
CisvLyByb3VuZGVkIHJlY3RhbmdsZSBjbGlwcyB0aGF0IHdlJ3JlIGdvaW5nIHRvIGFsbG93LiBD
dXJyZW50bHkgdGhpcyBpcyBkZWZpbmVkIHRvIDEwLgorLy8gVGhpcyB2YWx1ZSBtdXN0IGJlIGtl
cHQgaW4gc3luYyB3aXRoIHRoZSBzaXplcyBkZWZpbmVkIGluIFRleHR1cmVNYXBwZXJTaGFkZXJQ
cm9ncmFtLmNwcC4KK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBzX3JvdW5kZWRSZWN0TWF4Q2xpcHMg
PSAxMDsKKworLy8gV2hlbiBjb252ZXJ0aW5nIGEgcm91bmRlZCByZWN0YW5nbGUgdG8gYW4gYXJy
YXkgb2YgZmxvYXRzLCB3ZSBuZWVkIDEyIGVsZW1lbnRzLiBTbyB0aGUgc2l6ZSBvZiB0aGUgYXJy
YXkKKy8vIHJlcXVpcmVkIHRvIGNvbnRhaW4gdGhlIDEwIHJlY3RhbmdsZXMgaXMgMTIgKiAxMCA9
IDEyMC4KKy8vIFRoaXMgdmFsdWUgbXVzdCBiZSBrZXB0IGluIHN5bmMgd2l0aCB0aGUgc2l6ZXMg
ZGVmaW5lZCBpbiBUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbS5jcHAuCitzdGF0aWMgY29uc3Qg
dW5zaWduZWQgc19yb3VuZGVkUmVjdENvbXBvbmVudHNQZXJSZWN0ID0gMTI7CitzdGF0aWMgY29u
c3QgdW5zaWduZWQgc19yb3VuZGVkUmVjdENvbXBvbmVudHNBcnJheVNpemUgPSBzX3JvdW5kZWRS
ZWN0TWF4Q2xpcHMgKiBzX3JvdW5kZWRSZWN0Q29tcG9uZW50c1BlclJlY3Q7CisKKy8vIFdoZW4g
Y29udmVydGluZyBhIHRyYW5zZm9ybWF0aW9uIG1hdHJpeCB0byBhbiBhcnJheSBvZiBmbG9hdHMs
IHdlIG5lZWQgMTYgZWxlbWVudHMuIFNvIHRoZSBzaXplIG9mIHRoZSBhcnJheQorLy8gcmVxdWly
ZWQgdG8gY29udGFpbiB0aGUgMTAgbWF0cmljZXMgaXMgMTYgKiAxMCA9IDE2MC4KKy8vIFRoaXMg
dmFsdWUgbXVzdCBiZSBrZXB0IGluIHN5bmMgd2l0aCB0aGUgc2l6ZXMgZGVmaW5lZCBpbiBUZXh0
dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbS5jcHAuCitzdGF0aWMgY29uc3QgdW5zaWduZWQgc19yb3Vu
ZGVkUmVjdEludmVyc2VUcmFuc2Zvcm1Db21wb25lbnRzUGVyUmVjdCA9IDE2Oworc3RhdGljIGNv
bnN0IHVuc2lnbmVkIHNfcm91bmRlZFJlY3RJbnZlcnNlVHJhbnNmb3JtQ29tcG9uZW50c0FycmF5
U2l6ZSA9IHNfcm91bmRlZFJlY3RNYXhDbGlwcyAqIHNfcm91bmRlZFJlY3RJbnZlcnNlVHJhbnNm
b3JtQ29tcG9uZW50c1BlclJlY3Q7CisKIGNsYXNzIENsaXBTdGFjayB7CiBwdWJsaWM6CiAgICAg
c3RydWN0IFN0YXRlIHsKLSAgICAgICAgU3RhdGUoY29uc3QgSW50UmVjdCYgc2Npc3NvcnMgPSBJ
bnRSZWN0KCksIGludCBzdGVuY2lsID0gMSkKKyAgICAgICAgZXhwbGljaXQgU3RhdGUoY29uc3Qg
SW50UmVjdCYgc2Npc3NvcnMgPSBJbnRSZWN0KCkpCiAgICAgICAgICAgICA6IHNjaXNzb3JCb3go
c2Npc3NvcnMpCi0gICAgICAgICAgICAsIHN0ZW5jaWxJbmRleChzdGVuY2lsKQogICAgICAgICB7
IH0KIAogICAgICAgICBJbnRSZWN0IHNjaXNzb3JCb3g7Ci0gICAgICAgIGludCBzdGVuY2lsSW5k
ZXg7CisgICAgICAgIGludCBzdGVuY2lsSW5kZXggeyAxIH07CisgICAgICAgIHVuc2lnbmVkIHJv
dW5kZWRSZWN0Q291bnQgeyAwIH07CiAgICAgfTsKIAogICAgIC8vIFktYXhpcyBzaG91bGQgYmUg
aW52ZXJ0ZWQgb25seSB3aGVuIHBhaW50aW5nIGludG8gdGhlIHdpbmRvdy4KQEAgLTU0LDYgKzcz
LDEzIEBAIHB1YmxpYzoKICAgICB2b2lkIHNldFN0ZW5jaWxJbmRleChpbnQpOwogICAgIGludCBn
ZXRTdGVuY2lsSW5kZXgoKSBjb25zdCB7IHJldHVybiBjbGlwU3RhdGUuc3RlbmNpbEluZGV4OyB9
CiAKKyAgICB2b2lkIGFkZFJvdW5kZWRSZWN0KGNvbnN0IEZsb2F0Um91bmRlZFJlY3QmLCBjb25z
dCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYpOworICAgIGNvbnN0IGZsb2F0KiByb3VuZGVkUmVjdENv
bXBvbmVudHMoKSBjb25zdCB7IHJldHVybiBtX3JvdW5kZWRSZWN0Q29tcG9uZW50cy5kYXRhKCk7
IH0KKyAgICBjb25zdCBmbG9hdCogcm91bmRlZFJlY3RJbnZlcnNlVHJhbnNmb3JtQ29tcG9uZW50
cygpIGNvbnN0IHsgcmV0dXJuIG1fcm91bmRlZFJlY3RJbnZlcnNlVHJhbnNmb3JtQ29tcG9uZW50
cy5kYXRhKCk7IH0KKyAgICB1bnNpZ25lZCByb3VuZGVkUmVjdENvdW50KCkgY29uc3QgeyByZXR1
cm4gY2xpcFN0YXRlLnJvdW5kZWRSZWN0Q291bnQ7IH0KKyAgICBib29sIGlzUm91bmRlZFJlY3RD
bGlwRW5hYmxlZCgpIGNvbnN0IHsgcmV0dXJuICEhY2xpcFN0YXRlLnJvdW5kZWRSZWN0Q291bnQ7
IH0KKyAgICBib29sIGlzUm91bmRlZFJlY3RDbGlwQWxsb3dlZCgpIGNvbnN0IHsgcmV0dXJuIGNs
aXBTdGF0ZS5yb3VuZGVkUmVjdENvdW50IDwgc19yb3VuZGVkUmVjdE1heENsaXBzOyB9CisKICAg
ICB2b2lkIGFwcGx5KCk7CiAgICAgdm9pZCBhcHBseUlmTmVlZGVkKCk7CiAKQEAgLTY1LDYgKzkx
LDggQEAgcHJpdmF0ZToKICAgICBJbnRTaXplIHNpemU7CiAgICAgYm9vbCBjbGlwU3RhdGVEaXJ0
eSB7IGZhbHNlIH07CiAgICAgWUF4aXNNb2RlIHlBeGlzTW9kZSB7IFlBeGlzTW9kZTo6RGVmYXVs
dCB9OworICAgIFZlY3RvcjxmbG9hdCwgc19yb3VuZGVkUmVjdENvbXBvbmVudHNBcnJheVNpemU+
IG1fcm91bmRlZFJlY3RDb21wb25lbnRzOworICAgIFZlY3RvcjxmbG9hdCwgc19yb3VuZGVkUmVj
dEludmVyc2VUcmFuc2Zvcm1Db21wb25lbnRzQXJyYXlTaXplPiBtX3JvdW5kZWRSZWN0SW52ZXJz
ZVRyYW5zZm9ybUNvbXBvbmVudHM7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1h
cHBlci5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVN
YXBwZXIuaAppbmRleCBlZWIwZmNhNDFhZmJhMGE0MTEwYzQ0YWJjODQ2Y2I5NzcwNjM2ODBmLi4z
MzRkY2FlODU3MGViOGEwZTEyODZiNDg5ZWEyOGQ2NzQ4YTgwMmM4IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlci5oCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyLmgK
QEAgLTM3LDYgKzM3LDcgQEAgY2xhc3MgQml0bWFwVGV4dHVyZVBvb2w7CiBjbGFzcyBHcmFwaGlj
c0xheWVyOwogY2xhc3MgVGV4dHVyZU1hcHBlcjsKIGNsYXNzIEZpbHRlck9wZXJhdGlvbnM7Citj
bGFzcyBGbG9hdFJvdW5kZWRSZWN0OwogCiBjbGFzcyBUZXh0dXJlTWFwcGVyIHsKICAgICBXVEZf
TUFLRV9GQVNUX0FMTE9DQVRFRDsKQEAgLTc1LDcgKzc2LDcgQEAgcHVibGljOgogCiAgICAgLy8g
bWFrZXMgYSBzdXJmYWNlIHRoZSB0YXJnZXQgZm9yIHRoZSBmb2xsb3dpbmcgZHJhd1RleHR1cmUg
Y2FsbHMuCiAgICAgdmlydHVhbCB2b2lkIGJpbmRTdXJmYWNlKEJpdG1hcFRleHR1cmUqIHN1cmZh
Y2UpID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgYmVnaW5DbGlwKGNvbnN0IFRyYW5zZm9ybWF0aW9u
TWF0cml4JiwgY29uc3QgRmxvYXRSZWN0JikgPSAwOworICAgIHZpcnR1YWwgdm9pZCBiZWdpbkNs
aXAoY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmLCBjb25zdCBGbG9hdFJvdW5kZWRSZWN0Jikg
PSAwOwogICAgIHZpcnR1YWwgdm9pZCBlbmRDbGlwKCkgPSAwOwogICAgIHZpcnR1YWwgSW50UmVj
dCBjbGlwQm91bmRzKCkgPSAwOwogICAgIHZpcnR1YWwgdm9pZCBiZWdpblByZXNlcnZlczNEKCkg
eyB9OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFw
L1RleHR1cmVNYXBwZXJHTC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90
ZXhtYXAvVGV4dHVyZU1hcHBlckdMLmNwcAppbmRleCA1NDBjNDBiYjRjMWY3YzcwMjQ0YThiMDNk
YjFjZmE1OWM0YjZmNjk1Li4xODg5OWU1OThmNzZjZjJjYzEwOTI4ZGVjNWZhZjVlN2VmYzc4OGZj
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4
dHVyZU1hcHBlckdMLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90
ZXhtYXAvVGV4dHVyZU1hcHBlckdMLmNwcApAQCAtMjksNiArMjksNyBAQAogI2luY2x1ZGUgIkV4
dGVuc2lvbnNHTC5oIgogI2luY2x1ZGUgIkZpbHRlck9wZXJhdGlvbnMuaCIKICNpbmNsdWRlICJG
bG9hdFF1YWQuaCIKKyNpbmNsdWRlICJGbG9hdFJvdW5kZWRSZWN0LmgiCiAjaW5jbHVkZSAiR0xD
b250ZXh0LmgiCiAjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCiAjaW5jbHVkZSAiSW1hZ2Uu
aCIKQEAgLTQ0Miw2ICs0NDMsMTUgQEAgc3RhdGljIFRyYW5zZm9ybWF0aW9uTWF0cml4IGNvbG9y
U3BhY2VNYXRyaXhGb3JGbGFncyhUZXh0dXJlTWFwcGVyR0w6OkZsYWdzIGZsYWcKICAgICByZXR1
cm4gbWF0cml4OwogfQogCitzdGF0aWMgdm9pZCBwcmVwYXJlUm91bmRlZFJlY3RDbGlwKFRleHR1
cmVNYXBwZXJTaGFkZXJQcm9ncmFtJiBwcm9ncmFtLCBjb25zdCBmbG9hdCogcmVjdHMsIGNvbnN0
IGZsb2F0KiB0cmFuc2Zvcm1zLCBpbnQgblJlY3RzKQoreworICAgIGdsVXNlUHJvZ3JhbShwcm9n
cmFtLnByb2dyYW1JRCgpKTsKKworICAgIGdsVW5pZm9ybTFpKHByb2dyYW0ucm91bmRlZFJlY3RO
dW1iZXJMb2NhdGlvbigpLCBuUmVjdHMpOworICAgIGdsVW5pZm9ybTRmdihwcm9ncmFtLnJvdW5k
ZWRSZWN0TG9jYXRpb24oKSwgMyAqIG5SZWN0cywgcmVjdHMpOworICAgIGdsVW5pZm9ybU1hdHJp
eDRmdihwcm9ncmFtLnJvdW5kZWRSZWN0SW52ZXJzZVRyYW5zZm9ybU1hdHJpeExvY2F0aW9uKCks
IG5SZWN0cywgZmFsc2UsIHRyYW5zZm9ybXMpOworfQorCiB2b2lkIFRleHR1cmVNYXBwZXJHTDo6
ZHJhd1RleHR1cmUoY29uc3QgQml0bWFwVGV4dHVyZSYgdGV4dHVyZSwgY29uc3QgRmxvYXRSZWN0
JiB0YXJnZXRSZWN0LCBjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgbWF0cml4LCBmbG9hdCBv
cGFjaXR5LCB1bnNpZ25lZCBleHBvc2VkRWRnZXMpCiB7CiAgICAgaWYgKCF0ZXh0dXJlLmlzVmFs
aWQoKSkKQEAgLTQ4OSwxMSArNDk5LDE5IEBAIHZvaWQgVGV4dHVyZU1hcHBlckdMOjpkcmF3VGV4
dHVyZShHTHVpbnQgdGV4dHVyZSwgRmxhZ3MgZmxhZ3MsIGNvbnN0IEludFNpemUmIHRlCiAgICAg
aWYgKHVzZUFudGlhbGlhc2luZyB8fCBvcGFjaXR5IDwgMSkKICAgICAgICAgZmxhZ3MgfD0gU2hv
dWxkQmxlbmQ7CiAKKyAgICBpZiAoY2xpcFN0YWNrKCkuaXNSb3VuZGVkUmVjdENsaXBFbmFibGVk
KCkpIHsKKyAgICAgICAgb3B0aW9ucyB8PSBUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbTo6Um91
bmRlZFJlY3RDbGlwOworICAgICAgICBmbGFncyB8PSBTaG91bGRCbGVuZDsKKyAgICB9CisKICAg
ICBSZWY8VGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW0+IHByb2dyYW0gPSBkYXRhKCkuZ2V0U2hh
ZGVyUHJvZ3JhbShvcHRpb25zKTsKIAogICAgIGlmIChmaWx0ZXIpCiAgICAgICAgIHByZXBhcmVG
aWx0ZXJQcm9ncmFtKHByb2dyYW0uZ2V0KCksICpmaWx0ZXIuZ2V0KCksIGRhdGEoKS5maWx0ZXJJ
bmZvLT5wYXNzLCB0ZXh0dXJlU2l6ZSwgZmlsdGVyQ29udGVudFRleHR1cmVJRCk7CiAKKyAgICBp
ZiAoY2xpcFN0YWNrKCkuaXNSb3VuZGVkUmVjdENsaXBFbmFibGVkKCkpCisgICAgICAgIHByZXBh
cmVSb3VuZGVkUmVjdENsaXAocHJvZ3JhbS5nZXQoKSwgY2xpcFN0YWNrKCkucm91bmRlZFJlY3RD
b21wb25lbnRzKCksIGNsaXBTdGFjaygpLnJvdW5kZWRSZWN0SW52ZXJzZVRyYW5zZm9ybUNvbXBv
bmVudHMoKSwgY2xpcFN0YWNrKCkucm91bmRlZFJlY3RDb3VudCgpKTsKKwogICAgIGRyYXdUZXh0
dXJlZFF1YWRXaXRoUHJvZ3JhbShwcm9ncmFtLmdldCgpLCB0ZXh0dXJlLCBmbGFncywgdGV4dHVy
ZVNpemUsIHRhcmdldFJlY3QsIG1vZGVsVmlld01hdHJpeCwgb3BhY2l0eSk7CiB9CiAKQEAgLTU1
MiwxMSArNTcwLDE5IEBAIHZvaWQgVGV4dHVyZU1hcHBlckdMOjpkcmF3VGV4dHVyZVBsYW5hcllV
Vihjb25zdCBzdGQ6OmFycmF5PEdMdWludCwgMz4mIHRleHR1cmVzCiAgICAgaWYgKHVzZUFudGlh
bGlhc2luZyB8fCBvcGFjaXR5IDwgMSkKICAgICAgICAgZmxhZ3MgfD0gU2hvdWxkQmxlbmQ7CiAK
KyAgICBpZiAoY2xpcFN0YWNrKCkuaXNSb3VuZGVkUmVjdENsaXBFbmFibGVkKCkpIHsKKyAgICAg
ICAgb3B0aW9ucyB8PSBUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbTo6Um91bmRlZFJlY3RDbGlw
OworICAgICAgICBmbGFncyB8PSBTaG91bGRCbGVuZDsKKyAgICB9CisKICAgICBSZWY8VGV4dHVy
ZU1hcHBlclNoYWRlclByb2dyYW0+IHByb2dyYW0gPSBkYXRhKCkuZ2V0U2hhZGVyUHJvZ3JhbShv
cHRpb25zKTsKIAogICAgIGlmIChmaWx0ZXIpCiAgICAgICAgIHByZXBhcmVGaWx0ZXJQcm9ncmFt
KHByb2dyYW0uZ2V0KCksICpmaWx0ZXIuZ2V0KCksIGRhdGEoKS5maWx0ZXJJbmZvLT5wYXNzLCB0
ZXh0dXJlU2l6ZSwgZmlsdGVyQ29udGVudFRleHR1cmVJRCk7CiAKKyAgICBpZiAoY2xpcFN0YWNr
KCkuaXNSb3VuZGVkUmVjdENsaXBFbmFibGVkKCkpCisgICAgICAgIHByZXBhcmVSb3VuZGVkUmVj
dENsaXAocHJvZ3JhbS5nZXQoKSwgY2xpcFN0YWNrKCkucm91bmRlZFJlY3RDb21wb25lbnRzKCks
IGNsaXBTdGFjaygpLnJvdW5kZWRSZWN0SW52ZXJzZVRyYW5zZm9ybUNvbXBvbmVudHMoKSwgY2xp
cFN0YWNrKCkucm91bmRlZFJlY3RDb3VudCgpKTsKKwogICAgIFZlY3RvcjxzdGQ6OnBhaXI8R0x1
aW50LCBHTHVpbnQ+ID4gdGV4dHVyZXNBbmRTYW1wbGVycyA9IHsKICAgICAgICAgeyB0ZXh0dXJl
c1swXSwgcHJvZ3JhbS0+c2FtcGxlcllMb2NhdGlvbigpIH0sCiAgICAgICAgIHsgdGV4dHVyZXNb
MV0sIHByb2dyYW0tPnNhbXBsZXJVTG9jYXRpb24oKSB9LApAQCAtNjAyLDExICs2MjgsMTkgQEAg
dm9pZCBUZXh0dXJlTWFwcGVyR0w6OmRyYXdUZXh0dXJlU2VtaVBsYW5hcllVVihjb25zdCBzdGQ6
OmFycmF5PEdMdWludCwgMj4mIHRleHQKICAgICBpZiAodXNlQW50aWFsaWFzaW5nIHx8IG9wYWNp
dHkgPCAxKQogICAgICAgICBmbGFncyB8PSBTaG91bGRCbGVuZDsKIAorICAgIGlmIChjbGlwU3Rh
Y2soKS5pc1JvdW5kZWRSZWN0Q2xpcEVuYWJsZWQoKSkgeworICAgICAgICBvcHRpb25zIHw9IFRl
eHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtOjpSb3VuZGVkUmVjdENsaXA7CisgICAgICAgIGZsYWdz
IHw9IFNob3VsZEJsZW5kOworICAgIH0KKwogICAgIFJlZjxUZXh0dXJlTWFwcGVyU2hhZGVyUHJv
Z3JhbT4gcHJvZ3JhbSA9IGRhdGEoKS5nZXRTaGFkZXJQcm9ncmFtKG9wdGlvbnMpOwogCiAgICAg
aWYgKGZpbHRlcikKICAgICAgICAgcHJlcGFyZUZpbHRlclByb2dyYW0ocHJvZ3JhbS5nZXQoKSwg
KmZpbHRlci5nZXQoKSwgZGF0YSgpLmZpbHRlckluZm8tPnBhc3MsIHRleHR1cmVTaXplLCBmaWx0
ZXJDb250ZW50VGV4dHVyZUlEKTsKIAorICAgIGlmIChjbGlwU3RhY2soKS5pc1JvdW5kZWRSZWN0
Q2xpcEVuYWJsZWQoKSkKKyAgICAgICAgcHJlcGFyZVJvdW5kZWRSZWN0Q2xpcChwcm9ncmFtLmdl
dCgpLCBjbGlwU3RhY2soKS5yb3VuZGVkUmVjdENvbXBvbmVudHMoKSwgY2xpcFN0YWNrKCkucm91
bmRlZFJlY3RJbnZlcnNlVHJhbnNmb3JtQ29tcG9uZW50cygpLCBjbGlwU3RhY2soKS5yb3VuZGVk
UmVjdENvdW50KCkpOworCiAgICAgVmVjdG9yPHN0ZDo6cGFpcjxHTHVpbnQsIEdMdWludD4gPiB0
ZXh0dXJlc0FuZFNhbXBsZXJzID0gewogICAgICAgICB7IHRleHR1cmVzWzBdLCBwcm9ncmFtLT5z
YW1wbGVyWUxvY2F0aW9uKCkgfSwKICAgICAgICAgeyB0ZXh0dXJlc1sxXSwgcHJvZ3JhbS0+c2Ft
cGxlclVMb2NhdGlvbigpIH0KQEAgLTY1MCwxMSArNjg0LDE5IEBAIHZvaWQgVGV4dHVyZU1hcHBl
ckdMOjpkcmF3VGV4dHVyZVBhY2tlZFlVVihHTHVpbnQgdGV4dHVyZSwgY29uc3Qgc3RkOjphcnJh
eTxHTGZsCiAgICAgaWYgKHVzZUFudGlhbGlhc2luZyB8fCBvcGFjaXR5IDwgMSkKICAgICAgICAg
ZmxhZ3MgfD0gU2hvdWxkQmxlbmQ7CiAKKyAgICBpZiAoY2xpcFN0YWNrKCkuaXNSb3VuZGVkUmVj
dENsaXBFbmFibGVkKCkpIHsKKyAgICAgICAgb3B0aW9ucyB8PSBUZXh0dXJlTWFwcGVyU2hhZGVy
UHJvZ3JhbTo6Um91bmRlZFJlY3RDbGlwOworICAgICAgICBmbGFncyB8PSBTaG91bGRCbGVuZDsK
KyAgICB9CisKICAgICBSZWY8VGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW0+IHByb2dyYW0gPSBk
YXRhKCkuZ2V0U2hhZGVyUHJvZ3JhbShvcHRpb25zKTsKIAogICAgIGlmIChmaWx0ZXIpCiAgICAg
ICAgIHByZXBhcmVGaWx0ZXJQcm9ncmFtKHByb2dyYW0uZ2V0KCksICpmaWx0ZXIuZ2V0KCksIGRh
dGEoKS5maWx0ZXJJbmZvLT5wYXNzLCB0ZXh0dXJlU2l6ZSwgZmlsdGVyQ29udGVudFRleHR1cmVJ
RCk7CiAKKyAgICBpZiAoY2xpcFN0YWNrKCkuaXNSb3VuZGVkUmVjdENsaXBFbmFibGVkKCkpCisg
ICAgICAgIHByZXBhcmVSb3VuZGVkUmVjdENsaXAocHJvZ3JhbS5nZXQoKSwgY2xpcFN0YWNrKCku
cm91bmRlZFJlY3RDb21wb25lbnRzKCksIGNsaXBTdGFjaygpLnJvdW5kZWRSZWN0SW52ZXJzZVRy
YW5zZm9ybUNvbXBvbmVudHMoKSwgY2xpcFN0YWNrKCkucm91bmRlZFJlY3RDb3VudCgpKTsKKwog
ICAgIFZlY3RvcjxzdGQ6OnBhaXI8R0x1aW50LCBHTHVpbnQ+ID4gdGV4dHVyZXNBbmRTYW1wbGVy
cyA9IHsKICAgICAgICAgeyB0ZXh0dXJlLCBwcm9ncmFtLT5zYW1wbGVyTG9jYXRpb24oKSB9CiAg
ICAgfTsKQEAgLTY3Myw5ICs3MTUsMTcgQEAgdm9pZCBUZXh0dXJlTWFwcGVyR0w6OmRyYXdTb2xp
ZENvbG9yKGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgY29uc3QgVHJhbnNmb3JtYXRpb24KICAgICAg
ICAgZmxhZ3MgfD0gU2hvdWxkQW50aWFsaWFzIHwgKGlzQmxlbmRpbmdBbGxvd2VkID8gU2hvdWxk
QmxlbmQgOiAwKTsKICAgICB9CiAKKyAgICBpZiAoY2xpcFN0YWNrKCkuaXNSb3VuZGVkUmVjdENs
aXBFbmFibGVkKCkpIHsKKyAgICAgICAgb3B0aW9ucyB8PSBUZXh0dXJlTWFwcGVyU2hhZGVyUHJv
Z3JhbTo6Um91bmRlZFJlY3RDbGlwOworICAgICAgICBmbGFncyB8PSBTaG91bGRCbGVuZDsKKyAg
ICB9CisKICAgICBSZWY8VGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW0+IHByb2dyYW0gPSBkYXRh
KCkuZ2V0U2hhZGVyUHJvZ3JhbShvcHRpb25zKTsKICAgICBnbFVzZVByb2dyYW0ocHJvZ3JhbS0+
cHJvZ3JhbUlEKCkpOwogCisgICAgaWYgKGNsaXBTdGFjaygpLmlzUm91bmRlZFJlY3RDbGlwRW5h
YmxlZCgpKQorICAgICAgICBwcmVwYXJlUm91bmRlZFJlY3RDbGlwKHByb2dyYW0uZ2V0KCksIGNs
aXBTdGFjaygpLnJvdW5kZWRSZWN0Q29tcG9uZW50cygpLCBjbGlwU3RhY2soKS5yb3VuZGVkUmVj
dEludmVyc2VUcmFuc2Zvcm1Db21wb25lbnRzKCksIGNsaXBTdGFjaygpLnJvdW5kZWRSZWN0Q291
bnQoKSk7CisKICAgICBhdXRvIFtyLCBnLCBiLCBhXSA9IHByZW11bHRpcGxpZWQoY29sb3IudG9T
UkdCQUxvc3N5PGZsb2F0PigpKTsKICAgICBnbFVuaWZvcm00Zihwcm9ncmFtLT5jb2xvckxvY2F0
aW9uKCksIHIsIGcsIGIsIGEpOwogICAgIGlmIChhIDwgMSAmJiBpc0JsZW5kaW5nQWxsb3dlZCkK
QEAgLTg4NCwxMCArOTM0LDQxIEBAIGJvb2wgVGV4dHVyZU1hcHBlckdMOjpiZWdpblNjaXNzb3JD
bGlwKGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiBtb2RlbFZpZXdNYXRyCiAgICAgcmV0dXJu
IHRydWU7CiB9CiAKLXZvaWQgVGV4dHVyZU1hcHBlckdMOjpiZWdpbkNsaXAoY29uc3QgVHJhbnNm
b3JtYXRpb25NYXRyaXgmIG1vZGVsVmlld01hdHJpeCwgY29uc3QgRmxvYXRSZWN0JiB0YXJnZXRS
ZWN0KQorYm9vbCBUZXh0dXJlTWFwcGVyR0w6OmJlZ2luUm91bmRlZFJlY3RDbGlwKGNvbnN0IFRy
YW5zZm9ybWF0aW9uTWF0cml4JiBtb2RlbFZpZXdNYXRyaXgsIGNvbnN0IEZsb2F0Um91bmRlZFJl
Y3QmIHRhcmdldFJlY3QpCit7CisgICAgLy8gVGhpcyBpcyBpbXBsZW1lbnRlZCBieSB0ZWxsaW5n
IHRoZSBmcmFnbWVudCBzaGFkZXIgdG8gY2hlY2sgd2hldGhlciBlYWNoIHBpeGVsIGlzIGluc2lk
ZSB0aGUgcm91bmRlZCByZWN0YW5nbGUKKyAgICAvLyBiZWZvcmUgcGFpbnRpbmcgaXQuCisgICAg
Ly8KKyAgICAvLyBJbnNpZGUgdGhlIHNoYWRlciwgdGhlIG1hdGggdG8gY2hlY2sgd2hldGhlciBh
IHBvaW50IGlzIGluc2lkZSB0aGUgcm91bmRlZCByZWN0YW5nbGUgcmVxdWlyZXMgdGhlIHJlY3Rh
bmdsZSB0bworICAgIC8vIGJlIGFsaWduZWQgdG8gdGhlIFggYW5kIFkgYXhpcywgd2hpY2ggaXMg
bm90IGd1YXJhbnRlZWQgaWYgdGhlIHRyYW5zZm9ybWF0aW9uIG1hdHJpeCBpbmNsdWRlcyByb3Rh
dGlvbnMuIEluIG9yZGVyCisgICAgLy8gdG8gYXZvaWQgdGhpcywgaW5zdGVhZCBvZiBhcHBseWlu
ZyB0aGUgdHJhbnNmb3JtYXRpb24gdG8gdGhlIHJvdW5kZWQgcmVjdGFuZ2xlLCB3ZSBjYWxjdWxh
dGUgdGhlIGludmVyc2UKKyAgICAvLyBvZiB0aGUgdHJhbnNmb3JtYXRpb24gYW5kIGFwcGx5IGl0
IHRvIHRoZSBwaXhlbHMgYmVmb3JlIGNoZWNraW5nIHdoZXRoZXIgdGhleSBhcmUgaW5zaWRlIHRo
ZSByb3VuZGVkIHJlY3RhbmdsZS4KKyAgICAvLyBUaGlzIHdvcmtzIGZpbmUgYXMgbG9uZyBhcyB0
aGUgdHJhbnNmb3JtYXRpb24gbWF0cml4IGlzIGludmVydGlibGUuCisgICAgLy8KKyAgICAvLyBU
aGVyZSBpcyBhIGxpbWl0IHRvIHRoZSBudW1iZXIgb2Ygcm91bmRlZCByZWN0YW5nbGUgY2xpcHBp
bmdzIHRoYXQgY2FuIGJlIGRvbmUsIHRoYXQgaGFwcGVucyBiZWNhdXNlIHRoZSBHTFNMCisgICAg
Ly8gYXJyYXlzIG11c3QgaGF2ZSBhIHByZWRlZmluZWQgc2l6ZS4gVGhlIGxpbWl0IGlzIGRlZmlu
ZWQgaW5zaWRlIENsaXBTdGFjaywgYW5kIHRoYXQncyB3aHkgd2UgbmVlZCB0byBjYWxsCisgICAg
Ly8gY2xpcFN0YWNrKCkuaXNSb3VuZGVkUmVjdENsaXBBbGxvd2VkKCkgYmVmb3JlIHRyeWluZyB0
byBhZGQgYSBuZXcgY2xpcC4KKworICAgIGlmICghdGFyZ2V0UmVjdC5pc1JvdW5kZWQoKSB8fCAh
dGFyZ2V0UmVjdC5pc1JlbmRlcmFibGUoKSB8fCB0YXJnZXRSZWN0LmlzRW1wdHkoKSB8fCAhbW9k
ZWxWaWV3TWF0cml4LmlzSW52ZXJ0aWJsZSgpIHx8ICFjbGlwU3RhY2soKS5pc1JvdW5kZWRSZWN0
Q2xpcEFsbG93ZWQoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgRmxvYXRRdWFkIHF1
YWQgPSBtb2RlbFZpZXdNYXRyaXgucHJvamVjdFF1YWQodGFyZ2V0UmVjdC5yZWN0KCkpOworICAg
IEludFJlY3QgcmVjdCA9IHF1YWQuZW5jbG9zaW5nQm91bmRpbmdCb3goKTsKKworICAgIGNsaXBT
dGFjaygpLmFkZFJvdW5kZWRSZWN0KHRhcmdldFJlY3QsIG1vZGVsVmlld01hdHJpeC5pbnZlcnNl
KCkudmFsdWUoKSk7CisgICAgY2xpcFN0YWNrKCkuaW50ZXJzZWN0KHJlY3QpOworICAgIGNsaXBT
dGFjaygpLmFwcGx5SWZOZWVkZWQoKTsKKworICAgIHJldHVybiB0cnVlOworfQorCit2b2lkIFRl
eHR1cmVNYXBwZXJHTDo6YmVnaW5DbGlwKGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiBtb2Rl
bFZpZXdNYXRyaXgsIGNvbnN0IEZsb2F0Um91bmRlZFJlY3QmIHRhcmdldFJlY3QpCiB7CiAgICAg
Y2xpcFN0YWNrKCkucHVzaCgpOwotICAgIGlmIChiZWdpblNjaXNzb3JDbGlwKG1vZGVsVmlld01h
dHJpeCwgdGFyZ2V0UmVjdCkpCisgICAgaWYgKGJlZ2luUm91bmRlZFJlY3RDbGlwKG1vZGVsVmll
d01hdHJpeCwgdGFyZ2V0UmVjdCkpCisgICAgICAgIHJldHVybjsKKworICAgIGlmIChiZWdpblNj
aXNzb3JDbGlwKG1vZGVsVmlld01hdHJpeCwgdGFyZ2V0UmVjdC5yZWN0KCkpKQogICAgICAgICBy
ZXR1cm47CiAKICAgICBkYXRhKCkuaW5pdGlhbGl6ZVN0ZW5jaWwoKTsKQEAgLTkwMiw3ICs5ODMs
NyBAQCB2b2lkIFRleHR1cmVNYXBwZXJHTDo6YmVnaW5DbGlwKGNvbnN0IFRyYW5zZm9ybWF0aW9u
TWF0cml4JiBtb2RlbFZpZXdNYXRyaXgsIGNvbgogICAgIGdsVmVydGV4QXR0cmliUG9pbnRlcihw
cm9ncmFtLT52ZXJ0ZXhMb2NhdGlvbigpLCAyLCBHTF9GTE9BVCwgZmFsc2UsIDAsIDApOwogCiAg
ICAgVHJhbnNmb3JtYXRpb25NYXRyaXggbWF0cml4KG1vZGVsVmlld01hdHJpeCk7Ci0gICAgbWF0
cml4Lm11bHRpcGx5KFRyYW5zZm9ybWF0aW9uTWF0cml4OjpyZWN0VG9SZWN0KEZsb2F0UmVjdCgw
LCAwLCAxLCAxKSwgdGFyZ2V0UmVjdCkpOworICAgIG1hdHJpeC5tdWx0aXBseShUcmFuc2Zvcm1h
dGlvbk1hdHJpeDo6cmVjdFRvUmVjdChGbG9hdFJlY3QoMCwgMCwgMSwgMSksIHRhcmdldFJlY3Qu
cmVjdCgpKSk7CiAKICAgICBzdGF0aWMgY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXggZnVsbFBy
b2plY3Rpb25NYXRyaXggPSBUcmFuc2Zvcm1hdGlvbk1hdHJpeDo6cmVjdFRvUmVjdChGbG9hdFJl
Y3QoMCwgMCwgMSwgMSksIEZsb2F0UmVjdCgtMSwgLTEsIDIsIDIpKTsKIApkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJHTC5o
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJH
TC5oCmluZGV4IDI2NzE3NWUxODQzN2MyN2RkNGFhM2M1YjhlMGYyNDhiY2VhM2I2YWEuLjM4NzRk
N2VlY2IwMWI1OTk4NTA5NWExMmIwYWEwMGJiYjA0N2QzYzcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyR0wuaAorKysgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlckdMLmgK
QEAgLTc1LDcgKzc1LDcgQEAgcHVibGljOgogCiAgICAgdm9pZCBiaW5kU3VyZmFjZShCaXRtYXBU
ZXh0dXJlKiBzdXJmYWNlKSBvdmVycmlkZTsKICAgICBCaXRtYXBUZXh0dXJlKiBjdXJyZW50U3Vy
ZmFjZSgpOwotICAgIHZvaWQgYmVnaW5DbGlwKGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4Jiwg
Y29uc3QgRmxvYXRSZWN0Jikgb3ZlcnJpZGU7CisgICAgdm9pZCBiZWdpbkNsaXAoY29uc3QgVHJh
bnNmb3JtYXRpb25NYXRyaXgmLCBjb25zdCBGbG9hdFJvdW5kZWRSZWN0Jikgb3ZlcnJpZGU7CiAg
ICAgdm9pZCBiZWdpblBhaW50aW5nKFBhaW50RmxhZ3MgPSAwKSBvdmVycmlkZTsKICAgICB2b2lk
IGVuZFBhaW50aW5nKCkgb3ZlcnJpZGU7CiAgICAgdm9pZCBlbmRDbGlwKCkgb3ZlcnJpZGU7CkBA
IC0xMDAsNiArMTAwLDcgQEAgcHJpdmF0ZToKICAgICB2b2lkIGRyYXdFZGdlVHJpYW5nbGVzKFRl
eHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtJik7CiAKICAgICBib29sIGJlZ2luU2Npc3NvckNsaXAo
Y29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmLCBjb25zdCBGbG9hdFJlY3QmKTsKKyAgICBib29s
IGJlZ2luUm91bmRlZFJlY3RDbGlwKGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiwgY29uc3Qg
RmxvYXRSb3VuZGVkUmVjdCYpOwogICAgIHZvaWQgYmluZERlZmF1bHRTdXJmYWNlKCk7CiAgICAg
Q2xpcFN0YWNrJiBjbGlwU3RhY2soKTsKICAgICBpbmxpbmUgVGV4dHVyZU1hcHBlckdMRGF0YSYg
ZGF0YSgpIHsgcmV0dXJuICptX2RhdGE7IH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyTGF5ZXIuY3BwIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJMYXllci5jcHAKaW5k
ZXggYTIzNmE2YTdhODQ5ZTIwMGM3MzkxMGVjNjU4MzM5OGVmNzgxZjMxMi4uYTFjNmJiMTAwNmMy
OTliNGEwMDgwNzAyNTMwMjJiZGYzMDBmMzgzYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJMYXllci5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJMYXllci5j
cHAKQEAgLTE5Niw4ICsxOTYsNyBAQCB2b2lkIFRleHR1cmVNYXBwZXJMYXllcjo6cGFpbnRTZWxm
KGNvbnN0IFRleHR1cmVNYXBwZXJQYWludE9wdGlvbnMmIG9wdGlvbnMpCiAKICAgICBib29sIHNo
b3VsZENsaXAgPSBtX3N0YXRlLmNvbnRlbnRzQ2xpcHBpbmdSZWN0LmlzUm91bmRlZCgpIHx8ICFt
X3N0YXRlLmNvbnRlbnRzQ2xpcHBpbmdSZWN0LnJlY3QoKS5jb250YWlucyhtX3N0YXRlLmNvbnRl
bnRzUmVjdCk7CiAgICAgaWYgKHNob3VsZENsaXApIHsKLSAgICAgICAgLy8gRklYTUU6IFRleHR1
cmVNYXBwZXI6OmJlZ2luQ2xpcCBkb2Vzbid0IHN1cHBvcnQgRmxvYXRSb3VuZGVkUmVjdCwgc28g
d2UgbmVlZCB0byBjb252ZXJ0IG1fc3RhdGUuY29udGVudHNDbGlwcGluZ1JlY3QgdG8gRmxvYXRS
ZWN0LgotICAgICAgICBvcHRpb25zLnRleHR1cmVNYXBwZXIuYmVnaW5DbGlwKHRyYW5zZm9ybSwg
bV9zdGF0ZS5jb250ZW50c0NsaXBwaW5nUmVjdC5yZWN0KCkpOworICAgICAgICBvcHRpb25zLnRl
eHR1cmVNYXBwZXIuYmVnaW5DbGlwKHRyYW5zZm9ybSwgbV9zdGF0ZS5jb250ZW50c0NsaXBwaW5n
UmVjdCk7CiAgICAgfQogCiAgICAgbV9jb250ZW50c0xheWVyLT5wYWludFRvVGV4dHVyZU1hcHBl
cihvcHRpb25zLnRleHR1cmVNYXBwZXIsIG1fc3RhdGUuY29udGVudHNSZWN0LCB0cmFuc2Zvcm0s
IG9wdGlvbnMub3BhY2l0eSk7CkBAIC0yMzAsNyArMjI5LDcgQEAgdm9pZCBUZXh0dXJlTWFwcGVy
TGF5ZXI6OnBhaW50U2VsZkFuZENoaWxkcmVuKGNvbnN0IFRleHR1cmVNYXBwZXJQYWludE9wdGlv
bnMmIG8KICAgICAgICAgY2xpcFRyYW5zZm9ybS50cmFuc2xhdGUob3B0aW9ucy5vZmZzZXQud2lk
dGgoKSwgb3B0aW9ucy5vZmZzZXQuaGVpZ2h0KCkpOwogICAgICAgICBjbGlwVHJhbnNmb3JtLm11
bHRpcGx5KG9wdGlvbnMudHJhbnNmb3JtKTsKICAgICAgICAgY2xpcFRyYW5zZm9ybS5tdWx0aXBs
eShtX2xheWVyVHJhbnNmb3Jtcy5jb21iaW5lZCk7Ci0gICAgICAgIG9wdGlvbnMudGV4dHVyZU1h
cHBlci5iZWdpbkNsaXAoY2xpcFRyYW5zZm9ybSwgbGF5ZXJSZWN0KCkpOworICAgICAgICBvcHRp
b25zLnRleHR1cmVNYXBwZXIuYmVnaW5DbGlwKGNsaXBUcmFuc2Zvcm0sIEZsb2F0Um91bmRlZFJl
Y3QobGF5ZXJSZWN0KCkpKTsKICAgICAgICAgbV9zdGF0ZS5iYWNrZHJvcExheWVyLT5wYWludFJl
Y3Vyc2l2ZShvcHRpb25zKTsKICAgICAgICAgb3B0aW9ucy50ZXh0dXJlTWFwcGVyLmVuZENsaXAo
KTsKICAgICB9CkBAIC0yNDksNyArMjQ4LDcgQEAgdm9pZCBUZXh0dXJlTWFwcGVyTGF5ZXI6OnBh
aW50U2VsZkFuZENoaWxkcmVuKGNvbnN0IFRleHR1cmVNYXBwZXJQYWludE9wdGlvbnMmIG8KICAg
ICAgICAgY2xpcFRyYW5zZm9ybS50cmFuc2xhdGUob3B0aW9ucy5vZmZzZXQud2lkdGgoKSwgb3B0
aW9ucy5vZmZzZXQuaGVpZ2h0KCkpOwogICAgICAgICBjbGlwVHJhbnNmb3JtLm11bHRpcGx5KG9w
dGlvbnMudHJhbnNmb3JtKTsKICAgICAgICAgY2xpcFRyYW5zZm9ybS5tdWx0aXBseShtX2xheWVy
VHJhbnNmb3Jtcy5jb21iaW5lZCk7Ci0gICAgICAgIG9wdGlvbnMudGV4dHVyZU1hcHBlci5iZWdp
bkNsaXAoY2xpcFRyYW5zZm9ybSwgbGF5ZXJSZWN0KCkpOworICAgICAgICBvcHRpb25zLnRleHR1
cmVNYXBwZXIuYmVnaW5DbGlwKGNsaXBUcmFuc2Zvcm0sIEZsb2F0Um91bmRlZFJlY3QobGF5ZXJS
ZWN0KCkpKTsKIAogICAgICAgICAvLyBJZiBhcyBhIHJlc3VsdCBvZiBiZWdpbkNsaXAoKSwgdGhl
IGNsaXBwaW5nIGFyZWEgaXMgZW1wdHksIGl0IG1lYW5zIHRoYXQgdGhlIGludGVyc2VjdGlvbiBv
ZiB0aGUgcHJldmlvdXMKICAgICAgICAgLy8gY2xpcHBpbmcgYXJlYSBhbmQgdGhlIGN1cnJlbnQg
b25lIGRvbid0IGhhdmUgYW55IHBpeGVscyBpbiBjb21tb24uIEluIHRoaXMgY2FzZSB3ZSBjYW4g
c2tpcCBwYWludGluZyB0aGUKQEAgLTQwNSw3ICs0MDQsNyBAQCB2b2lkIFRleHR1cmVNYXBwZXJM
YXllcjo6cGFpbnRVc2luZ092ZXJsYXBSZWdpb25zKGNvbnN0IFRleHR1cmVNYXBwZXJQYWludE9w
dGlvbgogICAgICAgICBpZiAoIXJlY3QuaW50ZXJzZWN0cyhvcHRpb25zLnRleHR1cmVNYXBwZXIu
Y2xpcEJvdW5kcygpKSkKICAgICAgICAgICAgIGNvbnRpbnVlOwogCi0gICAgICAgIG9wdGlvbnMu
dGV4dHVyZU1hcHBlci5iZWdpbkNsaXAoVHJhbnNmb3JtYXRpb25NYXRyaXgoKSwgcmVjdCk7Cisg
ICAgICAgIG9wdGlvbnMudGV4dHVyZU1hcHBlci5iZWdpbkNsaXAoVHJhbnNmb3JtYXRpb25NYXRy
aXgoKSwgRmxvYXRSb3VuZGVkUmVjdChyZWN0KSk7CiAgICAgICAgIHBhaW50U2VsZkFuZENoaWxk
cmVuV2l0aFJlcGxpY2Eob3B0aW9ucyk7CiAgICAgICAgIG9wdGlvbnMudGV4dHVyZU1hcHBlci5l
bmRDbGlwKCk7CiAgICAgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtLmNwcCBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbS5j
cHAKaW5kZXggMjZjMGY0MmU4NTM5NDY5NjViODdjY2ZkNzkzMjMxMjI2OGMyOTFhYy4uZmY4MWZh
YTI2YjA0NzdmYjAzMDAxMzkwYzY0ODA1YmU2MDY4N2Y1NCAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFt
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVy
ZU1hcHBlclNoYWRlclByb2dyYW0uY3BwCkBAIC02OCw2ICs2OCw3IEBAIHN0YXRpYyBjb25zdCBj
aGFyKiB2ZXJ0ZXhUZW1wbGF0ZUxUMzIwVmFycyA9CiAgICAgICAgIHZhcnlpbmcgdmVjMiB2X3Rl
eENvb3JkOwogICAgICAgICB2YXJ5aW5nIHZlYzIgdl90cmFuc2Zvcm1lZFRleENvb3JkOwogICAg
ICAgICB2YXJ5aW5nIGZsb2F0IHZfYW50aWFsaWFzOworICAgICAgICB2YXJ5aW5nIHZlYzQgdl9u
b25Qcm9qZWN0ZWRQb3NpdGlvbjsKICAgICApOwogCiAjaWYgIVVTRShPUEVOR0xfRVMpCkBAIC03
OCw2ICs3OSw3IEBAIHN0YXRpYyBjb25zdCBjaGFyKiB2ZXJ0ZXhUZW1wbGF0ZUdFMzIwVmFycyA9
CiAgICAgICAgIG91dCB2ZWMyIHZfdGV4Q29vcmQ7CiAgICAgICAgIG91dCB2ZWMyIHZfdHJhbnNm
b3JtZWRUZXhDb29yZDsKICAgICAgICAgb3V0IGZsb2F0IHZfYW50aWFsaWFzOworICAgICAgICBv
dXQgdmVjNCB2X25vblByb2plY3RlZFBvc2l0aW9uOwogICAgICk7CiAjZW5kaWYKIApAQCAtMTMz
LDcgKzEzNSw4IEBAIHN0YXRpYyBjb25zdCBjaGFyKiB2ZXJ0ZXhUZW1wbGF0ZUNvbW1vbiA9CiAg
ICAgICAgICAgICB2X3RleENvb3JkID0gcG9zaXRpb247CiAgICAgICAgICAgICB2ZWM0IGNsYW1w
ZWRQb3NpdGlvbiA9IGNsYW1wKHZlYzQocG9zaXRpb24sIDAuLCAxLiksIDAuLCAxLik7CiAgICAg
ICAgICAgICB2X3RyYW5zZm9ybWVkVGV4Q29vcmQgPSAodV90ZXh0dXJlU3BhY2VNYXRyaXggKiBj
bGFtcGVkUG9zaXRpb24pLnh5OwotICAgICAgICAgICAgZ2xfUG9zaXRpb24gPSB1X3Byb2plY3Rp
b25NYXRyaXggKiB1X21vZGVsVmlld01hdHJpeCAqIHZlYzQocG9zaXRpb24sIDAuLCAxLik7Cisg
ICAgICAgICAgICB2X25vblByb2plY3RlZFBvc2l0aW9uID0gdV9tb2RlbFZpZXdNYXRyaXggKiB2
ZWM0KHBvc2l0aW9uLCAwLiwgMS4pOworICAgICAgICAgICAgZ2xfUG9zaXRpb24gPSB1X3Byb2pl
Y3Rpb25NYXRyaXggKiB2X25vblByb2plY3RlZFBvc2l0aW9uOwogICAgICAgICB9CiAgICAgKTsK
IApAQCAtMTY4LDYgKzE3MSwxNiBAQCBzdGF0aWMgY29uc3QgY2hhciogdmVydGV4VGVtcGxhdGVD
b21tb24gPQogICAgICAgICBHTFNMX0RJUkVDVElWRShkZWZpbmUgU2FtcGxlckV4dGVybmFsT0VT
VHlwZSBzYW1wbGVyMkQpIFwKICAgICBHTFNMX0RJUkVDVElWRShlbmRpZikKIAorLy8gVGhlIG1h
eCBudW1iZXIgb2Ygc3RhY2tlZCByb3VuZGVkIHJlY3RhbmdsZSBjbGlwcyBhbGxvd2VkIGlzIDEw
LCB3aGljaCBpcyBhbHNvIHRoZQorLy8gbWF4IG51bWJlciBvZiB0cmFuc2Zvcm1zIHRoYXQgd2Ug
Y2FuIGdldC4gV2UgbmVlZCAzIGNvbXBvbmVudHMgZm9yIGVhY2ggcm91bmRlZAorLy8gcmVjdGFu
Z2xlIHNvIHdlIG5lZWQgMzAgY29tcG9uZW50cyB0byByZWNlaXZlIHRoZSAxMCByZWN0YW5nbGVz
LgorLy8KKy8vIEtlZXAgdGhpcyBpcyBzeW5jIHdpdGggdGhlIHZhbHVlcyBkZWZpbmVkIGluIENs
aXBTdGFjay5oCisjZGVmaW5lIFJPVU5ERURfUkVDVF9DT05TVEFOVFMgICAgICAgICAgICAgICAg
ICAgICAgIFwKKyAgICBHTFNMX0RJUkVDVElWRShkZWZpbmUgUk9VTkRFRF9SRUNUX01BWF9SRUNU
UyAxMCkgXAorICAgIEdMU0xfRElSRUNUSVZFKGRlZmluZSBST1VOREVEX1JFQ1RfQVJSQVlfU0la
RSAzMCkgXAorICAgIEdMU0xfRElSRUNUSVZFKGRlZmluZSBST1VOREVEX1JFQ1RfSU5WRVJTRV9U
UkFOU0ZPUk1fQVJSQVlfU0laRSAxMCkKKwogLy8gQ29tbW9uIGhlYWRlciBmb3IgYWxsIHZlcnNp
b25zLiBXZSBkZWZpbmUgdGhlIG1hdHJpY2VzIHZhcmlhYmxlcyBoZXJlIHRvIGtlZXAgdGhlIHBy
ZWNpc2lvbgogLy8gZGlyZWN0aXZlcyBzY29wZTogdGhlIGZpcnN0IG9uZSBhcHBsaWVzIHRvIHRo
ZSBtYXRyaWNlcyB2YXJpYWJsZXMgYW5kIHRoZSBuZXh0IG9uZSB0byB0aGUKIC8vIHJlc3Qgb2Yg
dGhlbS4gVGhlIHByZWNpc2lvbiBpcyBvbmx5IHVzZWQgaW4gR0xFUy4KQEAgLTE3NSw2ICsxODgs
NyBAQCBzdGF0aWMgY29uc3QgY2hhciogZnJhZ21lbnRUZW1wbGF0ZUhlYWRlckNvbW1vbiA9CiAg
ICAgUkVDVF9URVhUVVJFX0RJUkVDVElWRQogICAgIEFOVElBTElBU0lOR19URVhfQ09PUkRfRElS
RUNUSVZFCiAgICAgQkxVUl9DT05TVEFOVFMKKyAgICBST1VOREVEX1JFQ1RfQ09OU1RBTlRTCiAg
ICAgT0VTX0VHTF9JTUFHRV9FWFRFUk5BTF9ESVJFQ1RJVkUKICNpZiBVU0UoT1BFTkdMX0VTKQog
ICAgIFRFWFRVUkVfU1BBQ0VfTUFUUklYX1BSRUNJU0lPTl9ESVJFQ1RJVkUKQEAgLTE5OSw2ICsy
MTMsNyBAQCBzdGF0aWMgY29uc3QgY2hhciogZnJhZ21lbnRUZW1wbGF0ZUxUMzIwVmFycyA9CiAg
ICAgICAgIHZhcnlpbmcgZmxvYXQgdl9hbnRpYWxpYXM7CiAgICAgICAgIHZhcnlpbmcgdmVjMiB2
X3RleENvb3JkOwogICAgICAgICB2YXJ5aW5nIHZlYzIgdl90cmFuc2Zvcm1lZFRleENvb3JkOwor
ICAgICAgICB2YXJ5aW5nIHZlYzQgdl9ub25Qcm9qZWN0ZWRQb3NpdGlvbjsKICAgICApOwogCiAj
aWYgIVVTRShPUEVOR0xfRVMpCkBAIC0yMDgsNiArMjIzLDcgQEAgc3RhdGljIGNvbnN0IGNoYXIq
IGZyYWdtZW50VGVtcGxhdGVHRTMyMFZhcnMgPQogICAgICAgICBpbiBmbG9hdCB2X2FudGlhbGlh
czsKICAgICAgICAgaW4gdmVjMiB2X3RleENvb3JkOwogICAgICAgICBpbiB2ZWMyIHZfdHJhbnNm
b3JtZWRUZXhDb29yZDsKKyAgICAgICAgaW4gdmVjNCB2X25vblByb2plY3RlZFBvc2l0aW9uOwog
ICAgICk7CiAjZW5kaWYKIApAQCAtMjI2LDYgKzI0Miw5IEBAIHN0YXRpYyBjb25zdCBjaGFyKiBm
cmFnbWVudFRlbXBsYXRlQ29tbW9uID0KICAgICAgICAgdW5pZm9ybSB2ZWMyIHVfc2hhZG93T2Zm
c2V0OwogICAgICAgICB1bmlmb3JtIHZlYzQgdV9jb2xvcjsKICAgICAgICAgdW5pZm9ybSBmbG9h
dCB1X2dhdXNzaWFuS2VybmVsW0dBVVNTSUFOX0tFUk5FTF9IQUxGX1dJRFRIXTsKKyAgICAgICAg
dW5pZm9ybSBpbnQgdV9yb3VuZGVkUmVjdE51bWJlcjsKKyAgICAgICAgdW5pZm9ybSB2ZWM0IHVf
cm91bmRlZFJlY3RbUk9VTkRFRF9SRUNUX0FSUkFZX1NJWkVdOworICAgICAgICB1bmlmb3JtIG1h
dDQgdV9yb3VuZGVkUmVjdEludmVyc2VUcmFuc2Zvcm1NYXRyaXhbUk9VTkRFRF9SRUNUX0lOVkVS
U0VfVFJBTlNGT1JNX0FSUkFZX1NJWkVdOwogCiAgICAgICAgIHZvaWQgbm9vcChpbm91dCB2ZWM0
IGR1bW15UGFyYW1ldGVyKSB7IH0KICAgICAgICAgdm9pZCBub29wKGlub3V0IHZlYzQgZHVtbXlQ
YXJhbWV0ZXIsIHZlYzIgdGV4Q29vcmQpIHsgfQpAQCAtMzkwLDYgKzQwOSw3MCBAQCBzdGF0aWMg
Y29uc3QgY2hhciogZnJhZ21lbnRUZW1wbGF0ZUNvbW1vbiA9CiAKICAgICAgICAgdm9pZCBhcHBs
eVNvbGlkQ29sb3IoaW5vdXQgdmVjNCBjb2xvcikgeyBjb2xvciAqPSB1X2NvbG9yOyB9CiAKKyAg
ICAgICAgZmxvYXQgZWxsaXBzaXNEaXN0KHZlYzIgcCwgdmVjMiByYWRpdXMpCisgICAgICAgIHsK
KyAgICAgICAgICAgIGlmIChyYWRpdXMgPT0gdmVjMigwLCAwKSkKKyAgICAgICAgICAgICAgICBy
ZXR1cm4gMC4wOworCisgICAgICAgICAgICB2ZWMyIHAwID0gcCAvIHJhZGl1czsKKyAgICAgICAg
ICAgIHZlYzIgcDEgPSAyLjAgKiBwMCAvIHJhZGl1czsKKworICAgICAgICAgICAgcmV0dXJuIChk
b3QocDAsIHAwKSAtIDEuMCkgLyBsZW5ndGggKHAxKTsKKyAgICAgICAgfQorCisgICAgICAgIGZs
b2F0IGVsbGlwc2lzQ292ZXJhZ2UodmVjMiBwb2ludCwgdmVjMiBjZW50ZXIsIHZlYzIgcmFkaXVz
KQorICAgICAgICB7CisgICAgICAgICAgICBmbG9hdCBkID0gZWxsaXBzaXNEaXN0KHBvaW50IC0g
Y2VudGVyLCByYWRpdXMpOworICAgICAgICAgICAgcmV0dXJuIGNsYW1wKDAuNSAtIGQsIDAuMCwg
MS4wKTsKKyAgICAgICAgfQorCisgICAgICAgIGZsb2F0IHJvdW5kZWRSZWN0Q292ZXJhZ2UodmVj
MiBwLCBpbnQgaW5kZXgpCisgICAgICAgIHsKKyAgICAgICAgICAgIHZlYzQgYm91bmRzID0gdmVj
NCh1X3JvdW5kZWRSZWN0W2luZGV4XS54eSwgdV9yb3VuZGVkUmVjdFtpbmRleF0ueHkgKyB1X3Jv
dW5kZWRSZWN0W2luZGV4XS56dyk7CisKKyAgICAgICAgICAgIGlmIChwLnggPCBib3VuZHMueCB8
fCBwLnkgPCBib3VuZHMueSB8fCBwLnggPj0gYm91bmRzLnogfHwgcC55ID49IGJvdW5kcy53KQor
ICAgICAgICAgICAgICAgIHJldHVybiAwLjA7CisKKyAgICAgICAgICAgIHZlYzIgdG9wTGVmdFJh
ZGlpID0gdV9yb3VuZGVkUmVjdFtpbmRleCArIDFdLnh5OworICAgICAgICAgICAgdmVjMiB0b3BS
aWdodFJhZGlpID0gdV9yb3VuZGVkUmVjdFtpbmRleCArIDFdLnp3OworICAgICAgICAgICAgdmVj
MiBib3R0b21MZWZ0UmFkaWkgPSB1X3JvdW5kZWRSZWN0W2luZGV4ICsgMl0ueHk7CisgICAgICAg
ICAgICB2ZWMyIGJvdHRvbVJpZ2h0UmFkaWkgPSB1X3JvdW5kZWRSZWN0W2luZGV4ICsgMl0uenc7
CisKKyAgICAgICAgICAgIHZlYzIgdG9wTGVmdENlbnRlciA9IGJvdW5kcy54eSArIHRvcExlZnRS
YWRpaTsKKyAgICAgICAgICAgIHZlYzIgdG9wUmlnaHRDZW50ZXIgPSBib3VuZHMuenkgKyAodG9w
UmlnaHRSYWRpaSAqIHZlYzIoLTEsIDEpKTsKKyAgICAgICAgICAgIHZlYzIgYm90dG9tTGVmdENl
bnRlciA9IGJvdW5kcy54dyArIChib3R0b21MZWZ0UmFkaWkgKiB2ZWMyKDEsIC0xKSk7CisgICAg
ICAgICAgICB2ZWMyIGJvdHRvbVJpZ2h0Q2VudGVyID0gYm91bmRzLnp3ICsgKGJvdHRvbVJpZ2h0
UmFkaWkgKiB2ZWMyKC0xLCAtMSkpOworCisgICAgICAgICAgICBpZiAocC54IDwgdG9wTGVmdENl
bnRlci54ICYmIHAueSA8IHRvcExlZnRDZW50ZXIueSkKKyAgICAgICAgICAgICAgICByZXR1cm4g
ZWxsaXBzaXNDb3ZlcmFnZShwLCB0b3BMZWZ0Q2VudGVyLCB0b3BMZWZ0UmFkaWkpOworCisgICAg
ICAgICAgICBpZiAocC54ID4gdG9wUmlnaHRDZW50ZXIueCAmJiBwLnkgPCB0b3BSaWdodENlbnRl
ci55KQorICAgICAgICAgICAgICAgIHJldHVybiBlbGxpcHNpc0NvdmVyYWdlKHAsIHRvcFJpZ2h0
Q2VudGVyLCB0b3BSaWdodFJhZGlpKTsKKworICAgICAgICAgICAgaWYgKHAueCA8IGJvdHRvbUxl
ZnRDZW50ZXIueCAmJiBwLnkgPiBib3R0b21MZWZ0Q2VudGVyLnkpCisgICAgICAgICAgICAgICAg
cmV0dXJuIGVsbGlwc2lzQ292ZXJhZ2UocCwgYm90dG9tTGVmdENlbnRlciwgYm90dG9tTGVmdFJh
ZGlpKTsKKworICAgICAgICAgICAgaWYgKHAueCA+IGJvdHRvbVJpZ2h0Q2VudGVyLnggJiYgcC55
ID4gYm90dG9tUmlnaHRDZW50ZXIueSkKKyAgICAgICAgICAgICAgICByZXR1cm4gZWxsaXBzaXND
b3ZlcmFnZShwLCBib3R0b21SaWdodENlbnRlciwgYm90dG9tUmlnaHRSYWRpaSk7CisKKyAgICAg
ICAgICAgIHJldHVybiAxLjA7CisgICAgICAgIH0KKworICAgICAgICB2b2lkIGFwcGx5Um91bmRl
ZFJlY3RDbGlwKGlub3V0IHZlYzQgY29sb3IpCisgICAgICAgIHsKKyAgICAgICAgICAgIC8vIFRo
aXMgd29ya3MgYnkgY2hlY2tpbmcgd2hldGhlciB0aGUgZnJhZ21lbnQgcG9zaXRpb24sIG9uY2Ug
dGhlIHRyYW5zZm9ybSBpcyBhcHBsaWVkLAorICAgICAgICAgICAgLy8gaXMgaW5zaWRlIHRoZSBk
ZWZpbmVkIHJvdW5kZWQgcmVjdGFuZ2xlIG9yIG5vdC4KKyAgICAgICAgICAgIC8vCisgICAgICAg
ICAgICAvLyBXZSBjYW4ndCB1c2UgZ2xfZnJhZ0Nvb3JkIGZvciB0aGUgZnJhZ21lbnQgcG9zaXRp
b24gYmVjYXVzZSB0aGF0cyB0aGUgcHJvamVjdGVkIHBvaW50CisgICAgICAgICAgICAvLyBhbmQg
dGhlIHByb2plY3Rpb24gc2NyZXdzIHRoZSBaIGNvbXBvbmVudC4gV2UgbmVlZCB0aGUgcmVhbCAz
RCBwb3NpdGlvbiB0aGF0IGNvbWVzIGZyb20KKyAgICAgICAgICAgIC8vIHRoZSBub25Qcm9qZWN0
ZWRQb3NpdGlvbiB2YXJpYWJsZS4KKyAgICAgICAgICAgIGludCBuUmVjdHMgPSBtaW4oUk9VTkRF
RF9SRUNUX01BWF9SRUNUUywgdV9yb3VuZGVkUmVjdE51bWJlcik7CisgICAgICAgICAgICBmb3Ig
KGludCByZWN0SW5kZXggPSAwOyByZWN0SW5kZXggPCBuUmVjdHM7IHJlY3RJbmRleCsrKSB7Cisg
ICAgICAgICAgICAgICAgdmVjNCBmcmFnQ29vcmQgPSB1X3JvdW5kZWRSZWN0SW52ZXJzZVRyYW5z
Zm9ybU1hdHJpeFtyZWN0SW5kZXhdICogdl9ub25Qcm9qZWN0ZWRQb3NpdGlvbjsKKyAgICAgICAg
ICAgICAgICBjb2xvciAqPSByb3VuZGVkUmVjdENvdmVyYWdlKGZyYWdDb29yZC54eSwgcmVjdElu
ZGV4ICogMyk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKwogICAgICAgICB2b2lkIG1haW4o
dm9pZCkKICAgICAgICAgewogICAgICAgICAgICAgdmVjNCBjb2xvciA9IHZlYzQoMS4sIDEuLCAx
LiwgMS4pOwpAQCAtNDE1LDYgKzQ5OCw3IEBAIHN0YXRpYyBjb25zdCBjaGFyKiBmcmFnbWVudFRl
bXBsYXRlQ29tbW9uID0KICAgICAgICAgICAgIGFwcGx5QWxwaGFCbHVySWZOZWVkZWQoY29sb3Is
IHRleENvb3JkKTsKICAgICAgICAgICAgIGFwcGx5Q29udGVudFRleHR1cmVJZk5lZWRlZChjb2xv
ciwgdGV4Q29vcmQpOwogICAgICAgICAgICAgYXBwbHlUZXh0dXJlRXh0ZXJuYWxPRVNJZk5lZWRl
ZChjb2xvciwgdGV4Q29vcmQpOworICAgICAgICAgICAgYXBwbHlSb3VuZGVkUmVjdENsaXBJZk5l
ZWRlZChjb2xvcik7CiAgICAgICAgICAgICBnbF9GcmFnQ29sb3IgPSBjb2xvcjsKICAgICAgICAg
fQogICAgICk7CkBAIC00NDgsNiArNTMyLDcgQEAgUmVmPFRleHR1cmVNYXBwZXJTaGFkZXJQcm9n
cmFtPiBUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbTo6Y3JlYXRlKFRleHR1cmVNYXBwZXIKICAg
ICBTRVRfQVBQTElFUl9GUk9NX09QVElPTlMoQ29udGVudFRleHR1cmUpOwogICAgIFNFVF9BUFBM
SUVSX0ZST01fT1BUSU9OUyhNYW51YWxSZXBlYXQpOwogICAgIFNFVF9BUFBMSUVSX0ZST01fT1BU
SU9OUyhUZXh0dXJlRXh0ZXJuYWxPRVMpOworICAgIFNFVF9BUFBMSUVSX0ZST01fT1BUSU9OUyhS
b3VuZGVkUmVjdENsaXApOwogCiAgICAgU3RyaW5nQnVpbGRlciB2ZXJ0ZXhTaGFkZXJCdWlsZGVy
OwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAv
VGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW0uaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbS5oCmluZGV4IGZmODM2NDhl
NzBlZDQ5YzgzOTgxYTQyOGU3MzBmMDE1ZjE3ZmM2YjEuLmQ2YWM1MDE4MjE3MjY3N2Q2MDExMmEw
MmU0ZjhkNzVjNTcwMGI1MTMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbS5oCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3Jh
bS5oCkBAIC00OCw2ICs0OCw5IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICBtYWNybyhnYXVz
c2lhbktlcm5lbCkgXAogICAgIG1hY3JvKGJsdXJSYWRpdXMpIFwKICAgICBtYWNybyhzaGFkb3dP
ZmZzZXQpIFwKKyAgICBtYWNybyhyb3VuZGVkUmVjdE51bWJlcikgXAorICAgIG1hY3JvKHJvdW5k
ZWRSZWN0KSBcCisgICAgbWFjcm8ocm91bmRlZFJlY3RJbnZlcnNlVHJhbnNmb3JtTWF0cml4KSBc
CiAKICNkZWZpbmUgVEVYTUFQX1NBTVBMRVJfVkFSSUFCTEVTKG1hY3JvKSBcCiAgICAgbWFjcm8o
c2FtcGxlcikgXApAQCAtOTksNiArMTAyLDcgQEAgcHVibGljOgogICAgICAgICBUZXh0dXJlTlYy
MSAgICAgID0gMUwgPDwgMjAsCiAgICAgICAgIFRleHR1cmVQYWNrZWRZVVYgPSAxTCA8PCAyMSwK
ICAgICAgICAgVGV4dHVyZUV4dGVybmFsT0VTID0gMUwgPDwgMjIsCisgICAgICAgIFJvdW5kZWRS
ZWN0Q2xpcCAgPSAxTCA8PCAyMywKICAgICB9OwogCiAgICAgZW51bSBjbGFzcyBWYXJpYWJsZUlE
IHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvU2hhcmVkL0Nvb3JkaW5hdGVkR3JhcGhpY3Mv
Q29vcmRpbmF0ZWRHcmFwaGljc1NjZW5lLmNwcCBiL1NvdXJjZS9XZWJLaXQvU2hhcmVkL0Nvb3Jk
aW5hdGVkR3JhcGhpY3MvQ29vcmRpbmF0ZWRHcmFwaGljc1NjZW5lLmNwcAppbmRleCBjNmUzM2Ex
Njc2Zjc3NjFlM2M3ZTMxMDYzMjY3NzY5MTJlOWVmOGQ0Li4wNGZmYTJmNDMyNzY5NWEyYWE3Mzg3
YTAyNGZhNjIxMWNkMGM4NjljIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9Db29y
ZGluYXRlZEdyYXBoaWNzL0Nvb3JkaW5hdGVkR3JhcGhpY3NTY2VuZS5jcHAKKysrIGIvU291cmNl
L1dlYktpdC9TaGFyZWQvQ29vcmRpbmF0ZWRHcmFwaGljcy9Db29yZGluYXRlZEdyYXBoaWNzU2Nl
bmUuY3BwCkBAIC03MSw3ICs3MSw3IEBAIHZvaWQgQ29vcmRpbmF0ZWRHcmFwaGljc1NjZW5lOjpw
YWludFRvQ3VycmVudEdMQ29udGV4dChjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpCiAgICAgY3Vy
cmVudFJvb3RMYXllci0+c2V0VGV4dHVyZU1hcHBlcihtX3RleHR1cmVNYXBwZXIuZ2V0KCkpOwog
ICAgIGJvb2wgc2NlbmVIYXNSdW5uaW5nQW5pbWF0aW9ucyA9IGN1cnJlbnRSb290TGF5ZXItPmFw
cGx5QW5pbWF0aW9uc1JlY3Vyc2l2ZWx5KE1vbm90b25pY1RpbWU6Om5vdygpKTsKICAgICBtX3Rl
eHR1cmVNYXBwZXItPmJlZ2luUGFpbnRpbmcoUGFpbnRGbGFncyk7Ci0gICAgbV90ZXh0dXJlTWFw
cGVyLT5iZWdpbkNsaXAoVHJhbnNmb3JtYXRpb25NYXRyaXgoKSwgY2xpcFJlY3QpOworICAgIG1f
dGV4dHVyZU1hcHBlci0+YmVnaW5DbGlwKFRyYW5zZm9ybWF0aW9uTWF0cml4KCksIEZsb2F0Um91
bmRlZFJlY3QoY2xpcFJlY3QpKTsKIAogICAgIGlmIChjdXJyZW50Um9vdExheWVyLT50cmFuc2Zv
cm0oKSAhPSBtYXRyaXgpCiAgICAgICAgIGN1cnJlbnRSb290TGF5ZXItPnNldFRyYW5zZm9ybSht
YXRyaXgpOwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nIGIvTGF5b3V0VGVzdHMv
Q2hhbmdlTG9nCmluZGV4IDYxM2Y2OTI1MDNiNjJlYjkyYjg1OGJiMjk2YTZmMzZjODc1OGE3ZTEu
LmExMzZiZGI1ZTFlNzFjNWVmMmY1NzM0Y2FmNDRjNzI0NTQ0NTU4OGEgMTAwNjQ0Ci0tLSBhL0xh
eW91dFRlc3RzL0NoYW5nZUxvZworKysgYi9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKQEAgLTEsMyAr
MSwxNCBAQAorMjAyMC0xMC0yMyAgTWlndWVsIEdvbWV6ICA8bWFnb21lekBpZ2FsaWEuY29tPgor
CisgICAgICAgIFtHVEtdW1dQRV0gSW1wbGVtZW50IGFudGlhbGlhc2VkIHJvdW5kZWQgcmVjdGFu
Z2xlIGNsaXBwaW5nIGluIFRleHR1cmVNYXBwZXIKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTE3NDQ1NworCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9E
WSAoT09QUyEpLgorCisgICAgICAgIFVwZGF0ZSBleHBlY3RhdGlvbnMgZm9yIHBhc3NpbmcgdGVz
dC4KKworICAgICAgICAqIHBsYXRmb3JtL2d0ay9UZXN0RXhwZWN0YXRpb25zOgorCiAyMDIwLTEw
LTIyICBGdWppaSBIaXJvbm9yaSAgPEhpcm9ub3JpLkZ1amlpQHNvbnkuY29tPgogCiAgICAgICAg
IFtHVEtdIFVucmV2aWV3ZWQgdGVzdCBnYXJkZW5pbmcKZGlmZiAtLWdpdCBhL0xheW91dFRlc3Rz
L3BsYXRmb3JtL2d0ay9UZXN0RXhwZWN0YXRpb25zIGIvTGF5b3V0VGVzdHMvcGxhdGZvcm0vZ3Rr
L1Rlc3RFeHBlY3RhdGlvbnMKaW5kZXggZTEzNmI5OTEwYTlmMjFjYTg0ZjMzMjA3MjIwNDZjZDQ5
YmE4MDk1Yi4uMDhjODg2NzRiOTdiNTU0NzdiYTM4ZTA4M2I3ZDI3ODJkMWY1MDE4MSAxMDA2NDQK
LS0tIGEvTGF5b3V0VGVzdHMvcGxhdGZvcm0vZ3RrL1Rlc3RFeHBlY3RhdGlvbnMKKysrIGIvTGF5
b3V0VGVzdHMvcGxhdGZvcm0vZ3RrL1Rlc3RFeHBlY3RhdGlvbnMKQEAgLTMzMjgsNyArMzMyOCw2
IEBAIHdlYmtpdC5vcmcvYi8xOTM2NDEgd2VicnRjL3ZpZGVvLXNldERpcmVjdGlvbi5odG1sIFsg
RmFpbHVyZSBdCiAKIHdlYmtpdC5vcmcvYi8xOTQzODQgY29tcG9zaXRpbmcvY2xpcHBpbmcvYm9y
ZGVyLXJhZGl1cy1hc3luYy1vdmVyZmxvdy1jbGlwcGluZy1sYXllci5odG1sIFsgRmFpbHVyZSBd
CiB3ZWJraXQub3JnL2IvMjA2MDAwIGNvbXBvc2l0aW5nL2NsaXBwaW5nL2JvcmRlci1yYWRpdXMt
YXN5bmMtb3ZlcmZsb3ctbm9uLXN0YWNraW5nLmh0bWwgWyBJbWFnZU9ubHlGYWlsdXJlIF0KLXdl
YmtpdC5vcmcvYi8yMTExMjEgY29tcG9zaXRpbmcvY2xpcHBpbmcvYm9yZGVyLXJhZGl1cy1vbi13
ZWJnbC5odG1sIFsgSW1hZ2VPbmx5RmFpbHVyZSBdCiAKIHdlYmtpdC5vcmcvYi8xOTQ2MDYgYWNj
ZXNzaWJpbGl0eS9zZXQtdmFsdWUtbm90LXdvcmstZm9yLWRpc2FibGVkLXNsaWRlcnMuaHRtbCBb
IEZhaWx1cmUgXQogCg==
</data>

          </attachment>
      

    </bug>

</bugzilla>