<?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>144335</bug_id>
          
          <creation_ts>2015-04-28 10:02:30 -0700</creation_ts>
          <short_desc>Applying a filter on an SVG element, which is larger than 4096 pixels, causes this element to be rendered shifted to the left</short_desc>
          <delta_ts>2021-10-12 16:47:17 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>SVG</component>
          <version>528+ (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=230855</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>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Said Abou-Hallawa">sabouhallawa</reporter>
          <assigned_to name="Said Abou-Hallawa">sabouhallawa</assigned_to>
          <cc>commit-queue</cc>
    
    <cc>darin</cc>
    
    <cc>krit</cc>
    
    <cc>simon.fraser</cc>
    
    <cc>zimmermann</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1089576</commentid>
    <comment_count>0</comment_count>
      <attachid>251853</attachid>
    <who name="Said Abou-Hallawa">sabouhallawa</who>
    <bug_when>2015-04-28 10:02:30 -0700</bug_when>
    <thetext>Created attachment 251853
test case

Open the attached test case. Maximize the screen resolution and the window as well.

Result: The two rectangles are shifted to the left.
Expected: The two rectangles should have the same size and the gap between them should be centered in the window.

Notes:
1. If the filter is removed from the group, the bug does not happen.
2. If the left rectangle starts at 0 instead of -1000 and its with becomes 900 instead of 1900, the bug does not happen.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1089581</commentid>
    <comment_count>1</comment_count>
    <who name="Said Abou-Hallawa">sabouhallawa</who>
    <bug_when>2015-04-28 10:04:02 -0700</bug_when>
    <thetext>&lt;rdar://problem/19849167&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1089605</commentid>
    <comment_count>2</comment_count>
      <attachid>251860</attachid>
    <who name="Said Abou-Hallawa">sabouhallawa</who>
    <bug_when>2015-04-28 10:41:36 -0700</bug_when>
    <thetext>Created attachment 251860
test case</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1091018</commentid>
    <comment_count>3</comment_count>
      <attachid>252210</attachid>
    <who name="Said Abou-Hallawa">sabouhallawa</who>
    <bug_when>2015-05-01 18:25:47 -0700</bug_when>
    <thetext>Created attachment 252210
another test case

This test case is even worse, nothing is displayed in the window unless, the window width is really small.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1091033</commentid>
    <comment_count>4</comment_count>
    <who name="Said Abou-Hallawa">sabouhallawa</who>
    <bug_when>2015-05-01 19:32:15 -0700</bug_when>
    <thetext>When applying a filter on an SVG element and one of the input effects of this element is the SourceGraphic, this is what happens to render the element and the applied filter:

1- An ImageBuffer is created with the size of this element. This ImageBuffer is called the sourceGraphicBuffer and it&apos;s created by calling SVGRenderingContext::createImageBuffer().
2- The GraphicContext of this image is transformed such that the render object can be drawn on the image without modifying its coordinates.
3- The GraphicContext of the paintInfo is switched to the created image.
4- The SVG render element is called to paint itself.
5- After finishing the drawing of the element, the FilterEffects are applied in RenderSVGResourceFilter::postApplyResource(). The FilterEffect inputs are passed as ImageBuffers and its output is also an ImageBuffer.
6- As an example, SourceGraphic::platformApplySoftware() has the sourceGraphicBuffer as the only input. All what it does is creating the result ImageBuffer and drawing the sourceGraphicBuffer to it.
7- The ImageBuffer of the lastEffect is drawImageBuffer on the painting GraphicContext in the same rectangle as the original SVG element.
           
The steps 1-4 are done almost the same way by the clipper and the masker. They both call SVGRenderingContext::clipToImageBuffer() to transfer the clipped sourceGraphicBuffer to the painting context.
           
For some reason, clamping code was added to SVGRenderingContext::createImageBuffer() such that the size of the image can&apos;t exceed 4096x4096 pixels. Because of this clamping we had to transform the GraphicContext so the drawing will be scaled down to the clamped ImageBuffer. The implementation was not complete for the following reasons:

-- The order of the transformation in SVGRenderingContext::createImageBuffer() is incorrect. Every time a transformation is applied, the following transformation has to use units in the current coordinates system. The order should be the following:
  a) Change the origin of the coordinate system of the ImageBuffer to match the painting GraphicContext. This is done by translate(-paintRect.x(), -paintRect.x()) since paintRect is in absolute coordinates.
  b) Change the coordinates system from absolute to local by concatCTM(absoluteTransform).
  c) Apply the clamping scaling.
So scaling down the coordinates system of the ImageBuffer was wrong because the paintRect is not in the clamped coordinates system.
        
-- The clamping transform was not propagated correctly to do the mapping from the clamped ImageBuffer to the painting GraphicContext. As an example look at RenderSVGResourceClipper::applyClippingToContext(). This function does the steps 1-4 above and then calls SVGRenderingContext::clipToImageBuffer(). The later function has no idea whether the clipperMaskImage is clamped or not. If it is clamped then it should used the clamping scaling in translating the ImageBufferRect. And also the painting GraphicContext has to scale up so the ImageBuffer is enlarged to fill the element painting rectangle. And this was not happening.
   
-- Although we clamp the ImageBuffer sourceGraphicBuffer, we do not take that into consideration when applying the FilterEffect. SourceGraphic::platformApplySoftware() just copy the clamped sourceGraphicBuffer without scaling it up so we end up having part of the SourceGraphic FilterEffect not drawn

-- We do not clamp any of the FilterEffect. See FilterEffect::createImageBufferResult(). In this function we call ImageBuffer::create() and pass the original size. So the clamping was done partially for the SourceGraphic but it was not done for any of the other FilterEffects.  
           
So it seems, this clamping code should be deleted since it has many defects and it&apos;s not complete. It has also the drawback of losing the SVG drawing quality because of scaling  the GraphicContext down and then scaling it up.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1091036</commentid>
    <comment_count>5</comment_count>
      <attachid>252213</attachid>
    <who name="Said Abou-Hallawa">sabouhallawa</who>
    <bug_when>2015-05-01 20:24:50 -0700</bug_when>
    <thetext>Created attachment 252213
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1091037</commentid>
    <comment_count>6</comment_count>
      <attachid>252214</attachid>
    <who name="Said Abou-Hallawa">sabouhallawa</who>
    <bug_when>2015-05-01 20:36:04 -0700</bug_when>
    <thetext>Created attachment 252214
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1091038</commentid>
    <comment_count>7</comment_count>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2015-05-01 20:43:42 -0700</bug_when>
    <thetext>I think we should look at the history of that clamping code, to understand why it was added.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1091082</commentid>
    <comment_count>8</comment_count>
      <attachid>252214</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2015-05-02 07:43:31 -0700</bug_when>
    <thetext>Comment on attachment 252214
Patch

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

&gt; Source/WebCore/platform/graphics/filters/FETile.cpp:66
&gt; +    std::unique_ptr&lt;ImageBuffer&gt; tileImage = SVGRenderingContext::createImageBuffer(tileRect.size(), ColorSpaceDeviceRGB, filter().renderingMode());

I think auto is better for the return value here.

&gt; Source/WebCore/rendering/svg/RenderSVGResourceFilter.cpp:206
&gt; +    sourceGraphic = SVGRenderingContext::createImageBuffer(filterData-&gt;drawingRegion, effectiveTransform, ColorSpaceLinearRGB, renderingMode);

Should just use auto here instead of defining sourceGraphics on a separate line above.

&gt; Source/WebCore/rendering/svg/RenderSVGResourceGradient.cpp:65
&gt; +    std::unique_ptr&lt;ImageBuffer&gt; maskImage = SVGRenderingContext::createImageBuffer(repaintRect, absoluteTransform, ColorSpaceDeviceRGB, Unaccelerated);

I think auto is better for the return value here.

&gt; Source/WebCore/rendering/svg/RenderSVGResourcePattern.cpp:97
&gt; +    std::unique_ptr&lt;ImageBuffer&gt; tileImage = createTileImage(m_attributes, tileBoundaries, absoluteTileBoundaries, tileImageTransform);

I think auto is better for the return value here.

&gt; Source/WebCore/rendering/svg/RenderSVGResourcePattern.cpp:235
&gt; +    std::unique_ptr&lt;ImageBuffer&gt; tileImage = SVGRenderingContext::createImageBuffer(absoluteTileBoundaries.size(), ColorSpaceDeviceRGB, Unaccelerated);

I think auto is better for the return value here.

&gt; Source/WebCore/rendering/svg/SVGRenderingContext.cpp:253
&gt; +    std::unique_ptr&lt;ImageBuffer&gt; imageBuffer = SVGRenderingContext::createImageBuffer(paintRect.size(), colorSpace, renderingMode);

I think auto is better for the return value here.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1091083</commentid>
    <comment_count>9</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2015-05-02 07:44:30 -0700</bug_when>
    <thetext>(In reply to comment #7)
&gt; I think we should look at the history of that clamping code, to understand
&gt; why it was added.

That’s a good point. Limits like this can sometimes be necessary to get acceptable performance and to prevent memory problems. Simply removing the limits might not be a good idea.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1091410</commentid>
    <comment_count>10</comment_count>
      <attachid>252317</attachid>
    <who name="Said Abou-Hallawa">sabouhallawa</who>
    <bug_when>2015-05-04 10:03:06 -0700</bug_when>
    <thetext>Created attachment 252317
95197-correct-fix</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1091411</commentid>
    <comment_count>11</comment_count>
    <who name="Said Abou-Hallawa">sabouhallawa</who>
    <bug_when>2015-05-04 10:04:49 -0700</bug_when>
    <thetext>The revision http://trac.webkit.org/changeset/126993 is related to this bug. In this revision, the order of setting the ImageBuffer GraphicContext transformations was changed. I agree there was a bug about the clamping but I believe also this revision was wrong and incomplete. The original transformation order was right.

I am attaching a patch which I think can fix the issue of the bug https://bugs.webkit.org/show_bug.cgi?id=95197. Yet, the fix is still incomplete because, as I mentioned above, the SourceGraphic FilterEffect does not take the clamping into account when copying from the from the sourceGraphicBuffer to its result image buffer. This patch complies and passes all the SVG layout tests in particular the test: LayoutTests/svg/clip-path/mask-nested-clip-path-010.svg. This test was originally added with r126993 with the name svg/custom/clamped-masking-clipping.svg but later its name was changed to be LayoutTests/svg/clip-path/mask-nested-clip-path-010.svg. The idea of this patch is we need to propagate the clamping transformation when copying from the sourceGraphicBuffer.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1091431</commentid>
    <comment_count>12</comment_count>
    <who name="Said Abou-Hallawa">sabouhallawa</who>
    <bug_when>2015-05-04 10:40:06 -0700</bug_when>
    <thetext>http://trac.webkit.org/changeset/106108 is a related revision in particular the changes in http://trac.webkit.org/changeset/106108/trunk/Source/WebCore/rendering/svg/SVGImageBufferTools.cpp.

The ImageBuffer clamping did exit before this revision. What this revision did was correcting setting up the GraphicContext of the ImageBuffer by applying a set of transformation in the correct order.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1091446</commentid>
    <comment_count>13</comment_count>
    <who name="Said Abou-Hallawa">sabouhallawa</who>
    <bug_when>2015-05-04 11:15:54 -0700</bug_when>
    <thetext>http://trac.webkit.org/changeset/96155 is also related. In this revision, the clamping was changed from the viewport size to a fixed 4096x4096 image size.

In the https://bugs.webkit.org/show_bug.cgi?id=67700, there is a discussion about whether the clamping for tiling is really needed or not. The argument is we needed the clamping to avoid allocating huge image buffers. I do not know how can tile image buffer gets big. I still think we should leave the ImageBuffer size issue to the system limits. If the page has a huge SVG image and the system can&apos;t allocate memory for it, I think we should not do anything to avoid this from happening. And actually this is what we do in FilterEffect::createImageBufferResult(). We jus allocate the SVG with the given size without any clamping.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1091452</commentid>
    <comment_count>14</comment_count>
    <who name="Said Abou-Hallawa">sabouhallawa</who>
    <bug_when>2015-05-04 11:32:18 -0700</bug_when>
    <thetext>In http://trac.webkit.org/changeset/65880, setting the transformation of the GraphicContext was moved from the callers of createImageBuffer() to createImageBuffer() itself.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1091464</commentid>
    <comment_count>15</comment_count>
    <who name="Said Abou-Hallawa">sabouhallawa</who>
    <bug_when>2015-05-04 12:11:05 -0700</bug_when>
    <thetext>http://trac.webkit.org/changeset/65665 introduces the ImageBuffer clamping to the viewport. The goal was: &quot;no more huge image buffer allocations, that could fail&quot; as it is mentioned in the ChangeLog. No bugs, which may have been caused by &quot;huge image buffer allocations&quot;, were mentioned.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1091879</commentid>
    <comment_count>16</comment_count>
    <who name="Said Abou-Hallawa">sabouhallawa</who>
    <bug_when>2015-05-05 14:08:21 -0700</bug_when>
    <thetext>I think I know now why SVG filters, clippers and maskers clamp the ImageBuffers. The FilterEffect class which is shared between the CSS filters and the SVG filters is preventing applying any filter if its size is greater than 4096x4096. In the function FilterEffect::apply() we make an early return if (!isFilterSizeValid(m_absolutePaintRect.size())). And isFilterSizeValid() returns true only if the size is less than 4096x4096. So it seems the SVG wanted to get around this limitation, which is applied anyway to the CSS filters, by clamping the ImageBuffer.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1092435</commentid>
    <comment_count>17</comment_count>
      <attachid>252548</attachid>
    <who name="Said Abou-Hallawa">sabouhallawa</who>
    <bug_when>2015-05-06 18:24:18 -0700</bug_when>
    <thetext>Created attachment 252548
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1092446</commentid>
    <comment_count>18</comment_count>
      <attachid>252553</attachid>
    <who name="Said Abou-Hallawa">sabouhallawa</who>
    <bug_when>2015-05-06 18:47:13 -0700</bug_when>
    <thetext>Created attachment 252553
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1092464</commentid>
    <comment_count>19</comment_count>
    <who name="Said Abou-Hallawa">sabouhallawa</who>
    <bug_when>2015-05-06 20:11:27 -0700</bug_when>
    <thetext>After further investigation, it turned out that some of the conclusions I stated above are incorrect. Here is my last beliefs:

-- The clamping of the ImageBuffer used by the filter can&apos;t be removed. The reason is the FilterEffect simply reject processing any filter if the ImageBuffer size is larger than 4096x4096. For CSS filters, this is not a problem since drawing large HTML elements is optimized by tiling and FilterEffect does not have to deal with large ImageBuffer no matter how big the filter element is. But for SVG drawing, no tiling is applied and we can hit the ImageBuffer size threshold regardless whether the tiling is applied or not.

-- The order of transformations in SVGRenderingContext::createImageBuffer() turns out to be correct. I added the following bugging code in this function:

    GraphicsContext* imageContext = imageBuffer-&gt;context();
    AffineTransform transform = imageContext-&gt;getCTM();
    imageContext-&gt;concatCTM(transform.inverse());

    AffineTransform t1 = AffineTransform().scale(0.5, 0.5);
    AffineTransform t2 = AffineTransform().translate(-100, -100);
    AffineTransform t3 = AffineTransform().scale(3, 3);

    imageContext-&gt;concatCTM(t1);
    imageContext-&gt;concatCTM(t2);
    imageContext-&gt;concatCTM(t3);

    ASSERT(imageContext-&gt;getCTM() == t1 * t2 * t3);

And the assertion did not fire. According to Apple developer documentations: https://developer.apple.com/library/mac/documentation/GraphicsImaging/Reference/CGContext/index.html#//apple_ref/c/func/CGContextConcatCTM

I think the assertion should fire since (imageContext-&gt;getCTM() == t3 * t2 * t1) unless I am really confused. But since the order of transformation in SVGRenderingContext::createImageBuffer() is reversed and since CGContextConcatCTM() does right multiplication, we get the desired order. So I am going to change this order.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1092598</commentid>
    <comment_count>20</comment_count>
      <attachid>252553</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2015-05-07 09:01:19 -0700</bug_when>
    <thetext>Comment on attachment 252553
Patch

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

&gt; Source/WebCore/platform/graphics/ImageBuffer.cpp:37
&gt; +static const float kMaxClampedLength = 4096;
&gt; +static const float kMaxClampedArea = kMaxClampedLength * kMaxClampedLength;

The &quot;k&quot; here is not really the standard for constants in WebKit code; might be nice to fix to match the style guide.

&gt; Source/WebCore/platform/graphics/ImageBuffer.cpp:41
&gt; +    return size.height() * size.width() &lt;= kMaxClampedArea;

This assumes that the size is non-empty, neither width or height is negative. Is that assumption OK? Should we assert that? Maybe we should define what this returns for an empty size. Maybe it would be handy for it to be defined as false for such sizes; a definition that empty sizes are “not clamped” could help streamline other code.

&gt; Source/WebCore/platform/graphics/ImageBuffer.cpp:48
&gt; +    float scaledArea = scaledSize.width() * scaledSize.height();

I don’t think we need a local variable for scaledArea since we use it only once.

&gt; Source/WebCore/platform/graphics/ImageBuffer.cpp:50
&gt; +    if (ImageBuffer::isSizeClamped(scaledSize))

No need for ImageBuffer prefix here.

&gt; Source/WebCore/platform/graphics/ImageBuffer.cpp:54
&gt; +    // If area of scaled size is bigger than the upper limit, adjust the scale
&gt; +    // to fit.

Should make this comment one line.

Also, the “if” here does not match the code. The check if the scaled sizes is bigger than the limit is before this comment, so the comment is confusingly worded now.

&gt; Source/WebCore/platform/graphics/ImageBuffer.cpp:55
&gt; +    scale.scale(sqrt(kMaxClampedArea / scaledArea));

Using sqrt translates the number from float to double and then back. Instead it should be std::sqrt or sqrtf, which will perform the operation on a float.

&gt; Source/WebCore/platform/graphics/ImageBuffer.cpp:56
&gt; +    return false;

I think we should add an assertion here:

    ASSERT(isSizeClamped(size, scale));

Also, I would like to get clearer on whether this is truly guaranteed, even in the presence of rounding and limited precision.

&gt; Source/WebCore/platform/graphics/ImageBuffer.cpp:68
&gt; +    FloatSize clampedSize = ImageBuffer::clampedSize(size);
&gt; +    scale = FloatSize(clampedSize.width() / size.width(), clampedSize.height() / size.height());
&gt; +    return clampedSize;

If scale is empty, then this may divide by zero. What guarantees the scale is not empty? Should we assert that?

&gt; Source/WebCore/platform/graphics/ImageBuffer.cpp:73
&gt; +    return FloatRect(rect.location(), ImageBuffer::clampedSize(rect.size()));

No need for ImageBuffer prefix here.

&gt; Source/WebCore/platform/graphics/ImageBuffer.h:132
&gt; +    static bool isSizeClamped(const FloatSize&amp;);
&gt; +    static bool isSizeClamped(const FloatSize&amp;, FloatSize&amp; scale);
&gt; +    static FloatSize clampedSize(const FloatSize&amp;);
&gt; +    static FloatSize clampedSize(const FloatSize&amp;, FloatSize&amp; scale);
&gt; +    static FloatRect clampedRect(const FloatRect&amp;);

I think this needs a comment to explain when we would want to do this clamping. Presumably it’s for images that we plan to use as filters? I think we’ve confused things a bit by just calling this “size clamping” and not making the specific relationship to filters clearer. Perhaps these functions should go into a filter-related class, not the image buffer class.

&gt; Source/WebCore/platform/graphics/filters/FilterEffect.cpp:81
&gt; +    ASSERT(hasResult());

I suggest a blank line after this for clearer paragraphing of the function.

&gt; Source/WebCore/platform/graphics/filters/FilterEffect.cpp:84
&gt; +    FloatPoint location = srcRect.location();
&gt; +    location.moveBy(-m_absolutePaintRect.location());
&gt; +    FloatRect rect = FloatRect(location, srcRect.size());

This should be two lines instead of three:

    FloatRect rect = srcRect;
    rect.moveBy(-m_absolutePaintRect.location());

We should also consider adding an operator-(const FloatRect&amp;, const FloatSize&amp;) so we could write:

    FloatRect rect = srcRect - m_absolutePaintRect.location();

We could even put that equation into the call to mapRect. Another attractive alternative would be to make this translation part of the transform we create below instead of doing the math separately first.

&gt; Source/WebCore/platform/graphics/filters/FilterEffect.cpp:90
&gt; +    AffineTransform transform = AffineTransform().scale(scale.width(), scale.height());
&gt; +    return transform.mapRect(rect);

It’s frustrating that this will be converting everything to double and back to float, but I suppose that’s how we do things. It’s unpleasant that we have to split the FloatSize out into separate width and height to put it into the transform.

Not sure this is clearer with a local variable. I think this would read pretty well:

    return AffineTransform().scale(scale.width(), scale.height()).mapRect(rect);

And better if we added overloads to AffineTransform:

    return AffineTransform().scale(scale).mapRect(rect);

&gt; Source/WebCore/rendering/FilterEffectRenderer.cpp:309
&gt; +    if (filterRect.isZero() || !ImageBuffer::isSizeClamped(filterRect.size()))
&gt; +        return false;

Why isZero here, but isEmpty everywhere else? I think we want isEmpty here.

&gt; Source/WebCore/rendering/FilterEffectRenderer.cpp:316
&gt; +    FloatRect currentSourceRect = sourceImageRect();
&gt; +    if (filterRect == currentSourceRect)
&gt; +        return false;
&gt; +
&gt; +    setSourceImageRect(filterRect);
&gt; +    return true;

This is not enhanced with the local variable. Should just be:

    if (filterRect == sourceImageRect())
        return false;
    setSourceImageRect(filterRect);
    return true;

In fact, paragraphed like that it makes clearer the relationship between the test and the set function.

&gt; Source/WebCore/rendering/FilterEffectRenderer.cpp:405
&gt; +    if (!sourceGraphicsContext || filter-&gt;filterRegion().isZero() || !ImageBuffer::isSizeClamped(filter-&gt;filterRegion().size())) {

Why check only isZero here. What about other cases covered by isEmpty? One dimension 0 and the other not. Negative dimensions.

&gt; Source/WebCore/rendering/svg/SVGRenderingContext.cpp:256
&gt; +    transform *= AffineTransform().scale(scale.width(), scale.height());
&gt; +    transform *= AffineTransform().translate(-paintRect.x(), -paintRect.y());

We designed the scale and translate functions to modify transforms in place. Do we really have to make new transforms and multiply here? Can’t we just do:

    transform.scale(scale.width(), scale.height());
    transform.translate(-paintRect.x(), -paintRect.y());

Or does that result in incorrect behavior.

&gt; Source/WebCore/rendering/svg/SVGRenderingContext.cpp:269
&gt; +    IntSize clampedSize = roundedIntSize(clampedRect.size());
&gt; +    IntSize unclampedSize = roundedIntSize(targetRect.size());

The rounding here worries me a bit. Is rounding really what we want?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1092735</commentid>
    <comment_count>21</comment_count>
      <attachid>252624</attachid>
    <who name="Said Abou-Hallawa">sabouhallawa</who>
    <bug_when>2015-05-07 14:09:07 -0700</bug_when>
    <thetext>Created attachment 252624
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1092753</commentid>
    <comment_count>22</comment_count>
      <attachid>252553</attachid>
    <who name="Said Abou-Hallawa">sabouhallawa</who>
    <bug_when>2015-05-07 14:34:19 -0700</bug_when>
    <thetext>Comment on attachment 252553
Patch

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

&gt;&gt; Source/WebCore/platform/graphics/ImageBuffer.cpp:37
&gt;&gt; +static const float kMaxClampedArea = kMaxClampedLength * kMaxClampedLength;
&gt; 
&gt; The &quot;k&quot; here is not really the standard for constants in WebKit code; might be nice to fix to match the style guide.

I searched the code and I found different styles for global const variables. But I chose the most commonly used style, I saw, which is the UpperCamelCase.

&gt;&gt; Source/WebCore/platform/graphics/ImageBuffer.cpp:41
&gt;&gt; +    return size.height() * size.width() &lt;= kMaxClampedArea;
&gt; 
&gt; This assumes that the size is non-empty, neither width or height is negative. Is that assumption OK? Should we assert that? Maybe we should define what this returns for an empty size. Maybe it would be handy for it to be defined as false for such sizes; a definition that empty sizes are “not clamped” could help streamline other code.

I added the following condition:

    if (size.width() &lt; 0 &amp;&amp; size.height() &lt; 0)
        return false;

which was there in the original function FilterEffect::isFilterSizeValid().

&gt;&gt; Source/WebCore/platform/graphics/ImageBuffer.cpp:48
&gt;&gt; +    float scaledArea = scaledSize.width() * scaledSize.height();
&gt; 
&gt; I don’t think we need a local variable for scaledArea since we use it only once.

Done.

&gt;&gt; Source/WebCore/platform/graphics/ImageBuffer.cpp:50
&gt;&gt; +    if (ImageBuffer::isSizeClamped(scaledSize))
&gt; 
&gt; No need for ImageBuffer prefix here.

Done.

&gt;&gt; Source/WebCore/platform/graphics/ImageBuffer.cpp:54
&gt;&gt; +    // to fit.
&gt; 
&gt; Should make this comment one line.
&gt; 
&gt; Also, the “if” here does not match the code. The check if the scaled sizes is bigger than the limit is before this comment, so the comment is confusingly worded now.

Removed the &quot;if&quot; from the comment and make it one line.

&gt;&gt; Source/WebCore/platform/graphics/ImageBuffer.cpp:55
&gt;&gt; +    scale.scale(sqrt(kMaxClampedArea / scaledArea));
&gt; 
&gt; Using sqrt translates the number from float to double and then back. Instead it should be std::sqrt or sqrtf, which will perform the operation on a float.

I replaced sqrt by sqrtf since I found all the other code is using it and no one is using std::sqrt.

&gt;&gt; Source/WebCore/platform/graphics/ImageBuffer.cpp:56
&gt;&gt; +    return false;
&gt; 
&gt; I think we should add an assertion here:
&gt; 
&gt;     ASSERT(isSizeClamped(size, scale));
&gt; 
&gt; Also, I would like to get clearer on whether this is truly guaranteed, even in the presence of rounding and limited precision.

Done.

You are right for your concern. This assertion fired in the test LayoutTests/svg/filters/feMorphology-crash.html because there is one pixel difference between the area of the clamped size and MaxClampedArea. So I fixed this by changing the way we calculate the area of the size in ImageBuffer::isSizeClamped(const FloatSize&amp; size). I get the floor(width) *floorf(height) instead of width * height.

&gt;&gt; Source/WebCore/platform/graphics/ImageBuffer.cpp:68
&gt;&gt; +    return clampedSize;
&gt; 
&gt; If scale is empty, then this may divide by zero. What guarantees the scale is not empty? Should we assert that?

Done. I added the following condition at the beginning:

    if (size.isEmpty())
        return size;

&gt;&gt; Source/WebCore/platform/graphics/ImageBuffer.cpp:73
&gt;&gt; +    return FloatRect(rect.location(), ImageBuffer::clampedSize(rect.size()));
&gt; 
&gt; No need for ImageBuffer prefix here.

Done.

&gt;&gt; Source/WebCore/platform/graphics/ImageBuffer.h:132
&gt;&gt; +    static FloatRect clampedRect(const FloatRect&amp;);
&gt; 
&gt; I think this needs a comment to explain when we would want to do this clamping. Presumably it’s for images that we plan to use as filters? I think we’ve confused things a bit by just calling this “size clamping” and not making the specific relationship to filters clearer. Perhaps these functions should go into a filter-related class, not the image buffer class.

The ImageBuffer is created for the filters, maskers, and clippers. And this is why the original clamping calculation was split between the SVGRenderingContext and the FilterEffect. Since the clamping is applied to the created ImageBuffer in call cases, I could not think of any better place other than the ImageBuffer itself.

&gt;&gt; Source/WebCore/platform/graphics/filters/FilterEffect.cpp:81
&gt;&gt; +    ASSERT(hasResult());
&gt; 
&gt; I suggest a blank line after this for clearer paragraphing of the function.

Done.

&gt;&gt; Source/WebCore/platform/graphics/filters/FilterEffect.cpp:84
&gt;&gt; +    FloatRect rect = FloatRect(location, srcRect.size());
&gt; 
&gt; This should be two lines instead of three:
&gt; 
&gt;     FloatRect rect = srcRect;
&gt;     rect.moveBy(-m_absolutePaintRect.location());
&gt; 
&gt; We should also consider adding an operator-(const FloatRect&amp;, const FloatSize&amp;) so we could write:
&gt; 
&gt;     FloatRect rect = srcRect - m_absolutePaintRect.location();
&gt; 
&gt; We could even put that equation into the call to mapRect. Another attractive alternative would be to make this translation part of the transform we create below instead of doing the math separately first.

I applied the origin translation to the transform as you suggested below.

&gt;&gt; Source/WebCore/platform/graphics/filters/FilterEffect.cpp:90
&gt;&gt; +    return transform.mapRect(rect);
&gt; 
&gt; It’s frustrating that this will be converting everything to double and back to float, but I suppose that’s how we do things. It’s unpleasant that we have to split the FloatSize out into separate width and height to put it into the transform.
&gt; 
&gt; Not sure this is clearer with a local variable. I think this would read pretty well:
&gt; 
&gt;     return AffineTransform().scale(scale.width(), scale.height()).mapRect(rect);
&gt; 
&gt; And better if we added overloads to AffineTransform:
&gt; 
&gt;     return AffineTransform().scale(scale).mapRect(rect);

Done. But since the transform includes translation and scaling, it looks like this:

    AffineTransform transform;
    transform.scale(scale).translate(-m_absolutePaintRect.location());
    return transform.mapRect(srcRect);

I could have written in one line but I felt one is too little for what this code is doing.

&gt;&gt; Source/WebCore/rendering/FilterEffectRenderer.cpp:309
&gt;&gt; +        return false;
&gt; 
&gt; Why isZero here, but isEmpty everywhere else? I think we want isEmpty here.

Done.

&gt;&gt; Source/WebCore/rendering/FilterEffectRenderer.cpp:316
&gt;&gt; +    return true;
&gt; 
&gt; This is not enhanced with the local variable. Should just be:
&gt; 
&gt;     if (filterRect == sourceImageRect())
&gt;         return false;
&gt;     setSourceImageRect(filterRect);
&gt;     return true;
&gt; 
&gt; In fact, paragraphed like that it makes clearer the relationship between the test and the set function.

Done.

&gt;&gt; Source/WebCore/rendering/FilterEffectRenderer.cpp:405
&gt;&gt; +    if (!sourceGraphicsContext || filter-&gt;filterRegion().isZero() || !ImageBuffer::isSizeClamped(filter-&gt;filterRegion().size())) {
&gt; 
&gt; Why check only isZero here. What about other cases covered by isEmpty? One dimension 0 and the other not. Negative dimensions.

Done. isEmpty() is used instead.

&gt;&gt; Source/WebCore/rendering/svg/SVGRenderingContext.cpp:256
&gt;&gt; +    transform *= AffineTransform().translate(-paintRect.x(), -paintRect.y());
&gt; 
&gt; We designed the scale and translate functions to modify transforms in place. Do we really have to make new transforms and multiply here? Can’t we just do:
&gt; 
&gt;     transform.scale(scale.width(), scale.height());
&gt;     transform.translate(-paintRect.x(), -paintRect.y());
&gt; 
&gt; Or does that result in incorrect behavior.

Done. The code now looks like this:

    AffineTransform transform;
    transform.scale(scale).translate(-paintRect.location()).multiply(absoluteTransform);

which is very concise and makes the order clearer.

&gt;&gt; Source/WebCore/rendering/svg/SVGRenderingContext.cpp:269
&gt;&gt; +    IntSize unclampedSize = roundedIntSize(targetRect.size());
&gt; 
&gt; The rounding here worries me a bit. Is rounding really what we want?

I think you are right. I could not understand why we need to do this rounding here. It is even strange that the SVG pattern code needs this special function to create its ImageBuffer. I think I can delete this whole function and use the other one by the SVG pattern. I will file a bug and submit a follow up patch for this code.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1092755</commentid>
    <comment_count>23</comment_count>
      <attachid>252629</attachid>
    <who name="Said Abou-Hallawa">sabouhallawa</who>
    <bug_when>2015-05-07 14:35:35 -0700</bug_when>
    <thetext>Created attachment 252629
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1092804</commentid>
    <comment_count>24</comment_count>
      <attachid>252553</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2015-05-07 15:37:38 -0700</bug_when>
    <thetext>Comment on attachment 252553
Patch

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

&gt;&gt;&gt; Source/WebCore/platform/graphics/ImageBuffer.cpp:41
&gt;&gt;&gt; +    return size.height() * size.width() &lt;= kMaxClampedArea;
&gt;&gt; 
&gt;&gt; This assumes that the size is non-empty, neither width or height is negative. Is that assumption OK? Should we assert that? Maybe we should define what this returns for an empty size. Maybe it would be handy for it to be defined as false for such sizes; a definition that empty sizes are “not clamped” could help streamline other code.
&gt; 
&gt; I added the following condition:
&gt; 
&gt;     if (size.width() &lt; 0 &amp;&amp; size.height() &lt; 0)
&gt;         return false;
&gt; 
&gt; which was there in the original function FilterEffect::isFilterSizeValid().

That doesn’t seem quite right. For one thing it does &amp;&amp; instead of || so you could still have either width or height as a negative number. For another, it doesn’t rule out the various types of empty sizes. I think there is still something a little messy here although there may be no practical problem because I think the callers generally call isEmpty before calling this.

I still think we should just come back here and define “empty” as “not clamped” even though that’s a little peculiar; I think it’s likely that with that definition all the callers could then remove their additional explicit checks for empty sizes. Or we could name this ImageBuffer::sizeNeedsClamping and then it would be more natural to return false for all the empty sizes.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1092810</commentid>
    <comment_count>25</comment_count>
      <attachid>252629</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2015-05-07 15:48:06 -0700</bug_when>
    <thetext>Comment on attachment 252629
Patch

Clearing flags on attachment: 252629

Committed r183956: &lt;http://trac.webkit.org/changeset/183956&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1092811</commentid>
    <comment_count>26</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2015-05-07 15:48:13 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1092843</commentid>
    <comment_count>27</comment_count>
    <who name="Said Abou-Hallawa">sabouhallawa</who>
    <bug_when>2015-05-07 16:38:03 -0700</bug_when>
    <thetext>(In reply to comment #24)
&gt; Comment on attachment 252553 [details]
&gt; Patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=252553&amp;action=review
&gt; 
&gt; &gt;&gt;&gt; Source/WebCore/platform/graphics/ImageBuffer.cpp:41
&gt; &gt;&gt;&gt; +    return size.height() * size.width() &lt;= kMaxClampedArea;
&gt; &gt;&gt; 
&gt; &gt;&gt; This assumes that the size is non-empty, neither width or height is negative. Is that assumption OK? Should we assert that? Maybe we should define what this returns for an empty size. Maybe it would be handy for it to be defined as false for such sizes; a definition that empty sizes are “not clamped” could help streamline other code.
&gt; &gt; 
&gt; &gt; I added the following condition:
&gt; &gt; 
&gt; &gt;     if (size.width() &lt; 0 &amp;&amp; size.height() &lt; 0)
&gt; &gt;         return false;
&gt; &gt; 
&gt; &gt; which was there in the original function FilterEffect::isFilterSizeValid().
&gt; 
&gt; That doesn’t seem quite right. For one thing it does &amp;&amp; instead of || so you
&gt; could still have either width or height as a negative number. For another,
&gt; it doesn’t rule out the various types of empty sizes. I think there is still
&gt; something a little messy here although there may be no practical problem
&gt; because I think the callers generally call isEmpty before calling this.
&gt; 
&gt; I still think we should just come back here and define “empty” as “not
&gt; clamped” even though that’s a little peculiar; I think it’s likely that with
&gt; that definition all the callers could then remove their additional explicit
&gt; checks for empty sizes. Or we could name this ImageBuffer::sizeNeedsClamping
&gt; and then it would be more natural to return false for all the empty sizes.

Function was renamed to ImageBuffer::sizeNeedsClamping(). The condition for negative width/height was replaced by isEmpty(). I left the isEmpty() conditions in the callers side because if the size isEmpty(), sizeNeedsClamping() will return false but we still need to bail out and ignore the filter.

Committed r183960: &lt;http://trac.webkit.org/changeset/183960&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="0"
              isprivate="0"
          >
            <attachid>251853</attachid>
            <date>2015-04-28 10:02:30 -0700</date>
            <delta_ts>2015-04-28 10:41:10 -0700</delta_ts>
            <desc>test case</desc>
            <filename>test112.svg</filename>
            <type>image/svg+xml</type>
            <size>423</size>
            <attacher name="Said Abou-Hallawa">sabouhallawa</attacher>
            
              <data encoding="base64">PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAyMDAw
IDQwMCI+CiAgPHN0eWxlPgogICAgcmVjdCB7CiAgICAgIGZpbGw6ICNEM0MxQTc7CiAgICAgIHdp
ZHRoOiAxOTAwcHg7CiAgICAgIGhlaWdodDogNTAwcHg7CiAgICAgIHN0cm9rZTogYmxhY2s7CiAg
ICAgIHN0cm9rZS13aWR0aDogMnB4OwogICAgfQogIDwvc3R5bGU+CiAgPGZpbHRlciBpZD0ic2F0
dXJhdGUtYmFjayI+CiAgICA8ZmVDb2xvck1hdHJpeCBpbj0iU291cmNlR3JhcGhpYyIgdHlwZT0i
c2F0dXJhdGUiIHZhbHVlcz0iMSIvPgogIDwvZmlsdGVyPgogIDxnIGZpbHRlcj0idXJsKCNzYXR1
cmF0ZS1iYWNrKSI+CiAgICA8cmVjdCB4PSItMTAwMCIgeT0iMCIvPgogICAgPHJlY3QgeD0iMTEw
MCIgeT0iMCIvPgogIDwvZz4KPC9zdmc+
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="0"
              isprivate="0"
          >
            <attachid>251860</attachid>
            <date>2015-04-28 10:41:36 -0700</date>
            <delta_ts>2015-04-28 10:41:36 -0700</delta_ts>
            <desc>test case</desc>
            <filename>test112.svg</filename>
            <type>image/svg+xml</type>
            <size>443</size>
            <attacher name="Said Abou-Hallawa">sabouhallawa</attacher>
            
              <data encoding="base64">PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAyMDAw
IDQwMCI+CiAgPHN0eWxlPgogICAgcmVjdCB7CiAgICAgIHN0cm9rZTogYmxhY2s7CiAgICAgIHN0
cm9rZS13aWR0aDogMnB4OwogICAgfQogIDwvc3R5bGU+CiAgPGZpbHRlciBpZD0ic2F0dXJhdGUt
YmFjayI+CiAgICA8ZmVDb2xvck1hdHJpeCBpbj0iU291cmNlR3JhcGhpYyIgdHlwZT0ic2F0dXJh
dGUiIHZhbHVlcz0iMSIvPgogIDwvZmlsdGVyPgogIDxnIGZpbHRlcj0idXJsKCNzYXR1cmF0ZS1i
YWNrKSI+CiAgICA8cmVjdCB4PSItMTAwMCIgeT0iMCIgd2lkdGg9IjE5MDAiIGhlaWdodD0iNDAw
IiBmaWxsPSIjRDNDMUE3Ii8+CiAgICA8cmVjdCB4PSIxMTAwIiB5PSIwIiB3aWR0aD0iMTkwMCIg
aGVpZ2h0PSI0MDAiIGZpbGw9IiNEM0MxQTciLz4KICA8L2c+Cjwvc3ZnPgo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="0"
              isprivate="0"
          >
            <attachid>252210</attachid>
            <date>2015-05-01 18:25:47 -0700</date>
            <delta_ts>2015-05-01 18:25:47 -0700</delta_ts>
            <desc>another test case</desc>
            <filename>big-sized-off-viewport-filter.svg</filename>
            <type>image/svg+xml</type>
            <size>356</size>
            <attacher name="Said Abou-Hallawa">sabouhallawa</attacher>
            
              <data encoding="base64">PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAxMDAw
IDUwMCI+CiAgPGZpbHRlciBpZD0ic2F0dXJhdGUtYmFjayI+CiAgICA8ZmVDb2xvck1hdHJpeCBp
bj0iU291cmNlR3JhcGhpYyIgdHlwZT0ic2F0dXJhdGUiIHZhbHVlcz0iMSIvPgogIDwvZmlsdGVy
PgogIDxnIGZpbHRlcj0idXJsKCNzYXR1cmF0ZS1iYWNrKSI+CiAgICA8cmVjdCB4PSItMzUwMCIg
eT0iMCIgd2lkdGg9IjM5NTAiIGhlaWdodD0iMTAwJSIgZmlsbD0iZ3JlZW4iLz4KICAgIDxyZWN0
IHg9IjU1MCIgeT0iMCIgd2lkdGg9IjM5NTAiIGhlaWdodD0iMTAwJSIgZmlsbD0iZ3JlZW4iLz4K
ICA8L2c+Cjwvc3ZnPgo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>252213</attachid>
            <date>2015-05-01 20:24:50 -0700</date>
            <delta_ts>2015-05-01 20:36:01 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-144335-20150501202338.patch</filename>
            <type>text/plain</type>
            <size>21460</size>
            <attacher name="Said Abou-Hallawa">sabouhallawa</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDE4MzcwNSkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDUxIEBACisyMDE1LTA1LTAxICBTYWlkIEFi
b3UtSGFsbGF3YSAgPHNhYm91aGFsbGF3YUBhcHBsZS5jb20+CisKKyAgICAgICAgQXBwbHlpbmcg
YSBmaWx0ZXIgb24gYW4gU1ZHIGVsZW1lbnQsIHdoaWNoIGlzIGxhcmdlciB0aGFuIDQwOTYgcGl4
ZWxzLCBjYXVzZXMgdGhpcyBlbGVtZW50IHRvIGJlIHJlbmRlcmVkIHNoaWZ0ZWQgdG8gdGhlIGxl
ZnQKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE0NDMz
NQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFJlbW92
ZSB0aGUgY2xhbXBpbmcgY29kZSB3aGljaCBpcyBhcHBsaWVkIHdoZW4gZ2VuZXJhdGluZyB0aGUg
SW1hZ2VCdWZmZXIKKyAgICAgICAgb2YgdGhlIHNvdXJjZUdyYXBoaWNCdWZmZXIuIFRoaXMgY29k
ZSBpcyBpbmNvcnJlY3QgYW5kIGluY29tcGxldGUuIE5vbmUgb2YKKyAgICAgICAgdGhlIEZpbHRl
ckVmZmVjdHMgZW5mb3JjZXMgYW55IHJ1bGUgb24gdGhlIHNpemUgb2YgdGhlIHJlc3VsdCBJbWFn
ZUJ1ZmZlci4KKyAgICAgICAgCisgICAgICAgIEl0IGhhcyBhbHNvIHRoZSBkcmF3YmFjayBvZiBs
b3NpbmcgdGhlIFNWRyBkcmF3aW5nIHF1YWxpdHkgYmVjYXVzZSBvZgorICAgICAgICBzY2FsaW5n
IHRoZSBHcmFwaGljQ29udGV4dCBkb3duIGFuZCB0aGVuIHNjYWxpbmcgaXQgdXAuIE5vbmUgb2Yg
dGhlIG90aGVyCisgICAgICAgIGJyb3dzZXJzIHNlZW0gdG8gYmUgZG9pbmcgaXQuCisgICAgICAg
IAorICAgICAgICBUZXN0czogc3ZnL2ZpbHRlcnMvYmlnLXNpemVkLW9mZi12aWV3cG9ydC1maWx0
ZXIuc3ZnCisKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFVGlsZS5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpGRVRpbGU6OnBsYXRmb3JtQXBwbHlTb2Z0d2FyZSk6CisgICAg
ICAgICogcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJjZUNsaXBwZXIuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6UmVuZGVyU1ZHUmVzb3VyY2VDbGlwcGVyOjphcHBseUNsaXBwaW5nVG9Db250
ZXh0KToKKyAgICAgICAgKiByZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291cmNlRmlsdGVyLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclNWR1Jlc291cmNlRmlsdGVyOjphcHBseVJlc291
cmNlKToKKyAgICAgICAgKiByZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291cmNlR3JhZGllbnQu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6Y3JlYXRlTWFza0FuZFN3YXBDb250ZXh0Rm9yVGV4dEdy
YWRpZW50KToKKyAgICAgICAgKiByZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291cmNlTWFza2Vy
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclNWR1Jlc291cmNlTWFza2VyOjphcHBseVNW
R01hc2spOgorICAgICAgICBDbGVhbi11cCwgY2hhbmdlIFNWR1JlbmRlcmluZ0NvbnRleHQ6OmNy
ZWF0ZUltYWdlQnVmZmVyKCkgdG8gcmV0dXJuIGEKKyAgICAgICAgc3RkOjp1bmlxdWVfcHRyPElt
YWdlQnVmZmVyPiBpbnN0ZWFkIG9mIHJldHVybmluZyBhIGJvb2wgYW5kIHBhc3NpbmcgYQorICAg
ICAgICBzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXI+Ji4KKyAgICAgICAgCisgICAgICAgICog
cmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJjZVBhdHRlcm4uY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6UmVuZGVyU1ZHUmVzb3VyY2VQYXR0ZXJuOjpidWlsZFBhdHRlcm4pOgorICAgICAgICAo
V2ViQ29yZTo6UmVuZGVyU1ZHUmVzb3VyY2VQYXR0ZXJuOjpjcmVhdGVUaWxlSW1hZ2UpOgorICAg
ICAgICAqIHJlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VQYXR0ZXJuLmg6CisgICAgICAg
IFJlbW92ZSB0aGUgY2xhbXBpbmcgY29kZSBmcm9tIFJlbmRlclNWR1Jlc291cmNlUGF0dGVybjo6
Y3JlYXRlVGlsZUltYWdlKCkuCisgICAgICAgIAorICAgICAgICAqIHJlbmRlcmluZy9zdmcvU1ZH
UmVuZGVyaW5nQ29udGV4dC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTVkdSZW5kZXJpbmdDb250
ZXh0OjpjcmVhdGVJbWFnZUJ1ZmZlcik6CisgICAgICAgIChXZWJDb3JlOjpTVkdSZW5kZXJpbmdD
b250ZXh0OjpjcmVhdGVJbWFnZUJ1ZmZlckZvclBhdHRlcm4pOiBEZWxldGVkLgorICAgICAgICAo
V2ViQ29yZTo6U1ZHUmVuZGVyaW5nQ29udGV4dDo6Y2xhbXBlZEFic29sdXRlVGFyZ2V0UmVjdCk6
IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpTVkdSZW5kZXJpbmdDb250ZXh0OjpjbGFtcGVk
QWJzb2x1dGVTaXplKTogRGVsZXRlZC4KKyAgICAgICAgKiByZW5kZXJpbmcvc3ZnL1NWR1JlbmRl
cmluZ0NvbnRleHQuaDoKKyAgICAgICAgLS0gUmVuYW1lIFNWR1JlbmRlcmluZ0NvbnRleHQ6OmNy
ZWF0ZUltYWdlQnVmZmVyRm9yUGF0dGVybigpIHRvIGJlCisgICAgICAgICAgIFNWR1JlbmRlcmlu
Z0NvbnRleHQ6OmNyZWF0ZUltYWdlQnVmZmVyKCkgYW5kIHJlbW92ZSB0aGUgY2xhbXBpbmcgY29k
ZS4KKyAgICAgICAgLS0gUmVtb3ZlIHRoZSBjbGFtcGluZyBjb2RlIGZyb20gU1ZHUmVuZGVyaW5n
Q29udGV4dDo6Y3JlYXRlSW1hZ2VCdWZmZXIoKS4KKyAgICAgICAgLS0gUmVtb3ZlIHRoZSB1bnVz
ZWQgY2xhbXBpbmcgaGVscGVyIGZ1bmN0aW9ucy4KKwogMjAxNS0wNS0wMSAgRXJpYyBDYXJsc29u
ICA8ZXJpYy5jYXJsc29uQGFwcGxlLmNvbT4KIAogICAgICAgICBQb3N0cG9uZSBjYXB0aW9uIHN0
eWxlIHNoZWV0IGNyZWF0aW9uCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9maWx0ZXJzL0ZFVGlsZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvZmlsdGVycy9GRVRpbGUuY3BwCShyZXZpc2lvbiAxODMzOTkpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFVGlsZS5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTYzLDggKzYzLDggQEAgdm9pZCBGRVRpbGU6OnBsYXRmb3JtQXBwbHlTb2Z0d2Fy
ZSgpCiAgICAgICAgIHRpbGVSZWN0LnNjYWxlKGZpbHRlci5maWx0ZXJSZXNvbHV0aW9uKCkud2lk
dGgoKSwgZmlsdGVyLmZpbHRlclJlc29sdXRpb24oKS5oZWlnaHQoKSk7CiAgICAgfQogCi0gICAg
c3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVyPiB0aWxlSW1hZ2U7Ci0gICAgaWYgKCFTVkdSZW5k
ZXJpbmdDb250ZXh0OjpjcmVhdGVJbWFnZUJ1ZmZlckZvclBhdHRlcm4odGlsZVJlY3QsIHRpbGVS
ZWN0LCB0aWxlSW1hZ2UsIENvbG9yU3BhY2VEZXZpY2VSR0IsIGZpbHRlcigpLnJlbmRlcmluZ01v
ZGUoKSkpCisgICAgc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVyPiB0aWxlSW1hZ2UgPSBTVkdS
ZW5kZXJpbmdDb250ZXh0OjpjcmVhdGVJbWFnZUJ1ZmZlcih0aWxlUmVjdC5zaXplKCksIENvbG9y
U3BhY2VEZXZpY2VSR0IsIGZpbHRlcigpLnJlbmRlcmluZ01vZGUoKSk7CisgICAgaWYgKCF0aWxl
SW1hZ2UpCiAgICAgICAgIHJldHVybjsKIAogICAgIEdyYXBoaWNzQ29udGV4dCogdGlsZUltYWdl
Q29udGV4dCA9IHRpbGVJbWFnZS0+Y29udGV4dCgpOwpJbmRleDogU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJjZUNsaXBwZXIuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VDbGlwcGVyLmNwcAko
cmV2aXNpb24gMTgzMzk5KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJT
VkdSZXNvdXJjZUNsaXBwZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNDIsNyArMTQyLDggQEAg
Ym9vbCBSZW5kZXJTVkdSZXNvdXJjZUNsaXBwZXI6OmFwcGx5Q2xpcAogICAgIFNWR1JlbmRlcmlu
Z0NvbnRleHQ6OmNhbGN1bGF0ZVRyYW5zZm9ybWF0aW9uVG9PdXRlcm1vc3RDb29yZGluYXRlU3lz
dGVtKHJlbmRlcmVyLCBhYnNvbHV0ZVRyYW5zZm9ybSk7CiAKICAgICBpZiAoc2hvdWxkQ3JlYXRl
Q2xpcHBlck1hc2tJbWFnZSAmJiAhcmVwYWludFJlY3QuaXNFbXB0eSgpKSB7Ci0gICAgICAgIGlm
ICghU1ZHUmVuZGVyaW5nQ29udGV4dDo6Y3JlYXRlSW1hZ2VCdWZmZXIocmVwYWludFJlY3QsIGFi
c29sdXRlVHJhbnNmb3JtLCBjbGlwcGVyTWFza0ltYWdlLCBDb2xvclNwYWNlRGV2aWNlUkdCLCBV
bmFjY2VsZXJhdGVkKSkKKyAgICAgICAgY2xpcHBlck1hc2tJbWFnZSA9IFNWR1JlbmRlcmluZ0Nv
bnRleHQ6OmNyZWF0ZUltYWdlQnVmZmVyKHJlcGFpbnRSZWN0LCBhYnNvbHV0ZVRyYW5zZm9ybSwg
Q29sb3JTcGFjZURldmljZVJHQiwgVW5hY2NlbGVyYXRlZCk7CisgICAgICAgIGlmICghY2xpcHBl
ck1hc2tJbWFnZSkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgICAgICBHcmFwaGlj
c0NvbnRleHQqIG1hc2tDb250ZXh0ID0gY2xpcHBlck1hc2tJbWFnZS0+Y29udGV4dCgpOwpJbmRl
eDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJjZUZpbHRlci5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdS
ZXNvdXJjZUZpbHRlci5jcHAJKHJldmlzaW9uIDE4MzM5OSkKKysrIFNvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VGaWx0ZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0yMDMsNyArMjAzLDggQEAgYm9vbCBSZW5kZXJTVkdSZXNvdXJjZUZpbHRlcjo6YXBwbHlSZXNv
dQogCiAgICAgc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVyPiBzb3VyY2VHcmFwaGljOwogICAg
IFJlbmRlcmluZ01vZGUgcmVuZGVyaW5nTW9kZSA9IHJlbmRlcmVyLmZyYW1lKCkuc2V0dGluZ3Mo
KS5hY2NlbGVyYXRlZEZpbHRlcnNFbmFibGVkKCkgPyBBY2NlbGVyYXRlZCA6IFVuYWNjZWxlcmF0
ZWQ7Ci0gICAgaWYgKCFTVkdSZW5kZXJpbmdDb250ZXh0OjpjcmVhdGVJbWFnZUJ1ZmZlcihmaWx0
ZXJEYXRhLT5kcmF3aW5nUmVnaW9uLCBlZmZlY3RpdmVUcmFuc2Zvcm0sIHNvdXJjZUdyYXBoaWMs
IENvbG9yU3BhY2VMaW5lYXJSR0IsIHJlbmRlcmluZ01vZGUpKSB7CisgICAgc291cmNlR3JhcGhp
YyA9IFNWR1JlbmRlcmluZ0NvbnRleHQ6OmNyZWF0ZUltYWdlQnVmZmVyKGZpbHRlckRhdGEtPmRy
YXdpbmdSZWdpb24sIGVmZmVjdGl2ZVRyYW5zZm9ybSwgQ29sb3JTcGFjZUxpbmVhclJHQiwgcmVu
ZGVyaW5nTW9kZSk7CisgICAgaWYgKCFzb3VyY2VHcmFwaGljKSB7CiAgICAgICAgIEFTU0VSVCgh
bV9maWx0ZXIuY29udGFpbnMoJnJlbmRlcmVyKSk7CiAgICAgICAgIGZpbHRlckRhdGEtPnNhdmVk
Q29udGV4dCA9IGNvbnRleHQ7CiAgICAgICAgIG1fZmlsdGVyLnNldCgmcmVuZGVyZXIsIFdURjo6
bW92ZShmaWx0ZXJEYXRhKSk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1Jl
bmRlclNWR1Jlc291cmNlR3JhZGllbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VHcmFkaWVudC5jcHAJKHJldmlzaW9uIDE4
MzM5OSkKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VH
cmFkaWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTYyLDggKzYyLDggQEAgc3RhdGljIGlubGlu
ZSBib29sIGNyZWF0ZU1hc2tBbmRTd2FwQ29udAogICAgIFNWR1JlbmRlcmluZ0NvbnRleHQ6OmNh
bGN1bGF0ZVRyYW5zZm9ybWF0aW9uVG9PdXRlcm1vc3RDb29yZGluYXRlU3lzdGVtKCp0ZXh0Um9v
dEJsb2NrLCBhYnNvbHV0ZVRyYW5zZm9ybSk7CiAKICAgICBGbG9hdFJlY3QgcmVwYWludFJlY3Qg
PSB0ZXh0Um9vdEJsb2NrLT5yZXBhaW50UmVjdEluTG9jYWxDb29yZGluYXRlcygpOwotICAgIHN0
ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlcj4gbWFza0ltYWdlOwotICAgIGlmICghU1ZHUmVuZGVy
aW5nQ29udGV4dDo6Y3JlYXRlSW1hZ2VCdWZmZXIocmVwYWludFJlY3QsIGFic29sdXRlVHJhbnNm
b3JtLCBtYXNrSW1hZ2UsIENvbG9yU3BhY2VEZXZpY2VSR0IsIFVuYWNjZWxlcmF0ZWQpKQorICAg
IHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlcj4gbWFza0ltYWdlID0gU1ZHUmVuZGVyaW5nQ29u
dGV4dDo6Y3JlYXRlSW1hZ2VCdWZmZXIocmVwYWludFJlY3QsIGFic29sdXRlVHJhbnNmb3JtLCBD
b2xvclNwYWNlRGV2aWNlUkdCLCBVbmFjY2VsZXJhdGVkKTsKKyAgICBpZiAoIW1hc2tJbWFnZSkK
ICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgR3JhcGhpY3NDb250ZXh0KiBtYXNrSW1hZ2VD
b250ZXh0ID0gbWFza0ltYWdlLT5jb250ZXh0KCk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291cmNlTWFza2VyLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291cmNlTWFza2VyLmNwcAkocmV2
aXNpb24gMTgzMzk5KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdS
ZXNvdXJjZU1hc2tlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTcyLDcgKzcyLDggQEAgYm9vbCBS
ZW5kZXJTVkdSZXNvdXJjZU1hc2tlcjo6YXBwbHlTVkdNYQogICAgIGlmICghbWFza2VyRGF0YS0+
bWFza0ltYWdlICYmICFyZXBhaW50UmVjdC5pc0VtcHR5KCkpIHsKICAgICAgICAgY29uc3QgU1ZH
UmVuZGVyU3R5bGUmIHN2Z1N0eWxlID0gc3R5bGUoKS5zdmdTdHlsZSgpOwogICAgICAgICBDb2xv
clNwYWNlIGNvbG9yU3BhY2UgPSBzdmdTdHlsZS5jb2xvckludGVycG9sYXRpb24oKSA9PSBDSV9M
SU5FQVJSR0IgPyBDb2xvclNwYWNlTGluZWFyUkdCIDogQ29sb3JTcGFjZURldmljZVJHQjsKLSAg
ICAgICAgaWYgKCFTVkdSZW5kZXJpbmdDb250ZXh0OjpjcmVhdGVJbWFnZUJ1ZmZlcihyZXBhaW50
UmVjdCwgYWJzb2x1dGVUcmFuc2Zvcm0sIG1hc2tlckRhdGEtPm1hc2tJbWFnZSwgY29sb3JTcGFj
ZSwgVW5hY2NlbGVyYXRlZCkpCisgICAgICAgIG1hc2tlckRhdGEtPm1hc2tJbWFnZSA9IFNWR1Jl
bmRlcmluZ0NvbnRleHQ6OmNyZWF0ZUltYWdlQnVmZmVyKHJlcGFpbnRSZWN0LCBhYnNvbHV0ZVRy
YW5zZm9ybSwgY29sb3JTcGFjZSwgVW5hY2NlbGVyYXRlZCk7CisgICAgICAgIGlmICghbWFza2Vy
RGF0YS0+bWFza0ltYWdlKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgICAgIGlm
ICghZHJhd0NvbnRlbnRJbnRvTWFza0ltYWdlKG1hc2tlckRhdGEsIGNvbG9yU3BhY2UsICZyZW5k
ZXJlcikpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291
cmNlUGF0dGVybi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2
Zy9SZW5kZXJTVkdSZXNvdXJjZVBhdHRlcm4uY3BwCShyZXZpc2lvbiAxODMzOTkpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291cmNlUGF0dGVybi5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTcwLDE3ICs3MCwxNyBAQCBQYXR0ZXJuRGF0YSogUmVuZGVyU1ZHUmVz
b3VyY2VQYXR0ZXJuOjpiCiAKICAgICAvLyBJZiB3ZSBjb3VsZG4ndCBkZXRlcm1pbmUgdGhlIHBh
dHRlcm4gY29udGVudCBlbGVtZW50IHJvb3QsIHN0b3AgaGVyZS4KICAgICBpZiAoIW1fYXR0cmli
dXRlcy5wYXR0ZXJuQ29udGVudEVsZW1lbnQoKSkKLSAgICAgICAgcmV0dXJuIDA7CisgICAgICAg
IHJldHVybiBudWxscHRyOwogCiAgICAgLy8gQW4gZW1wdHkgdmlld0JveCBkaXNhYmxlcyByZW5k
ZXJpbmcuCiAgICAgaWYgKG1fYXR0cmlidXRlcy5oYXNWaWV3Qm94KCkgJiYgbV9hdHRyaWJ1dGVz
LnZpZXdCb3goKS5pc0VtcHR5KCkpCi0gICAgICAgIHJldHVybiAwOworICAgICAgICByZXR1cm4g
bnVsbHB0cjsKIAogICAgIC8vIENvbXB1dGUgYWxsIG5lY2Vzc2FyeSB0cmFuc2Zvcm1hdGlvbnMg
dG8gYnVpbGQgdGhlIHRpbGUgaW1hZ2UgJiB0aGUgcGF0dGVybi4KICAgICBGbG9hdFJlY3QgdGls
ZUJvdW5kYXJpZXM7CiAgICAgQWZmaW5lVHJhbnNmb3JtIHRpbGVJbWFnZVRyYW5zZm9ybTsKICAg
ICBpZiAoIWJ1aWxkVGlsZUltYWdlVHJhbnNmb3JtKHJlbmRlcmVyLCBtX2F0dHJpYnV0ZXMsIHBh
dHRlcm5FbGVtZW50KCksIHRpbGVCb3VuZGFyaWVzLCB0aWxlSW1hZ2VUcmFuc2Zvcm0pKQotICAg
ICAgICByZXR1cm4gMDsKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAKICAgICBBZmZpbmVUcmFu
c2Zvcm0gYWJzb2x1dGVUcmFuc2Zvcm1JZ25vcmluZ1JvdGF0aW9uOwogICAgIFNWR1JlbmRlcmlu
Z0NvbnRleHQ6OmNhbGN1bGF0ZVRyYW5zZm9ybWF0aW9uVG9PdXRlcm1vc3RDb29yZGluYXRlU3lz
dGVtKHJlbmRlcmVyLCBhYnNvbHV0ZVRyYW5zZm9ybUlnbm9yaW5nUm90YXRpb24pOwpAQCAtODgs
MjAgKzg4LDE5IEBAIFBhdHRlcm5EYXRhKiBSZW5kZXJTVkdSZXNvdXJjZVBhdHRlcm46OmIKICAg
ICAvLyBJZ25vcmUgMkQgcm90YXRpb24sIGFzIGl0IGRvZXNuJ3QgYWZmZWN0IHRoZSBzaXplIG9m
IHRoZSB0aWxlLgogICAgIFNWR1JlbmRlcmluZ0NvbnRleHQ6OmNsZWFyMkRSb3RhdGlvbihhYnNv
bHV0ZVRyYW5zZm9ybUlnbm9yaW5nUm90YXRpb24pOwogICAgIEZsb2F0UmVjdCBhYnNvbHV0ZVRp
bGVCb3VuZGFyaWVzID0gYWJzb2x1dGVUcmFuc2Zvcm1JZ25vcmluZ1JvdGF0aW9uLm1hcFJlY3Qo
dGlsZUJvdW5kYXJpZXMpOwotICAgIEZsb2F0UmVjdCBjbGFtcGVkQWJzb2x1dGVUaWxlQm91bmRh
cmllczsKIAogICAgIC8vIFNjYWxlIHRoZSB0aWxlIHNpemUgdG8gbWF0Y2ggdGhlIHNjYWxlIGxl
dmVsIG9mIHRoZSBwYXR0ZXJuVHJhbnNmb3JtLgogICAgIGFic29sdXRlVGlsZUJvdW5kYXJpZXMu
c2NhbGUoc3RhdGljX2Nhc3Q8ZmxvYXQ+KG1fYXR0cmlidXRlcy5wYXR0ZXJuVHJhbnNmb3JtKCku
eFNjYWxlKCkpLAogICAgICAgICBzdGF0aWNfY2FzdDxmbG9hdD4obV9hdHRyaWJ1dGVzLnBhdHRl
cm5UcmFuc2Zvcm0oKS55U2NhbGUoKSkpOwogCiAgICAgLy8gQnVpbGQgdGlsZSBpbWFnZS4KLSAg
ICBzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXI+IHRpbGVJbWFnZSA9IGNyZWF0ZVRpbGVJbWFn
ZShtX2F0dHJpYnV0ZXMsIHRpbGVCb3VuZGFyaWVzLCBhYnNvbHV0ZVRpbGVCb3VuZGFyaWVzLCB0
aWxlSW1hZ2VUcmFuc2Zvcm0sIGNsYW1wZWRBYnNvbHV0ZVRpbGVCb3VuZGFyaWVzKTsKKyAgICBz
dGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXI+IHRpbGVJbWFnZSA9IGNyZWF0ZVRpbGVJbWFnZSht
X2F0dHJpYnV0ZXMsIHRpbGVCb3VuZGFyaWVzLCBhYnNvbHV0ZVRpbGVCb3VuZGFyaWVzLCB0aWxl
SW1hZ2VUcmFuc2Zvcm0pOwogICAgIGlmICghdGlsZUltYWdlKQotICAgICAgICByZXR1cm4gMDsK
KyAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAKICAgICBSZWZQdHI8SW1hZ2U+IGNvcGllZEltYWdl
ID0gdGlsZUltYWdlLT5jb3B5SW1hZ2UoQ29weUJhY2tpbmdTdG9yZSk7CiAgICAgaWYgKCFjb3Bp
ZWRJbWFnZSkKLSAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIHJldHVybiBudWxscHRyOwogCiAg
ICAgLy8gQnVpbGQgcGF0dGVybi4KICAgICBhdXRvIHBhdHRlcm5EYXRhID0gc3RkOjptYWtlX3Vu
aXF1ZTxQYXR0ZXJuRGF0YT4oKTsKQEAgLTIzMSwyMSArMjMwLDE4IEBAIGJvb2wgUmVuZGVyU1ZH
UmVzb3VyY2VQYXR0ZXJuOjpidWlsZFRpbGUKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotc3RkOjp1
bmlxdWVfcHRyPEltYWdlQnVmZmVyPiBSZW5kZXJTVkdSZXNvdXJjZVBhdHRlcm46OmNyZWF0ZVRp
bGVJbWFnZShjb25zdCBQYXR0ZXJuQXR0cmlidXRlcyYgYXR0cmlidXRlcywgY29uc3QgRmxvYXRS
ZWN0JiB0aWxlQm91bmRhcmllcywgY29uc3QgRmxvYXRSZWN0JiBhYnNvbHV0ZVRpbGVCb3VuZGFy
aWVzLCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHRpbGVJbWFnZVRyYW5zZm9ybSwgRmxvYXRSZWN0
JiBjbGFtcGVkQWJzb2x1dGVUaWxlQm91bmRhcmllcykgY29uc3QKK3N0ZDo6dW5pcXVlX3B0cjxJ
bWFnZUJ1ZmZlcj4gUmVuZGVyU1ZHUmVzb3VyY2VQYXR0ZXJuOjpjcmVhdGVUaWxlSW1hZ2UoY29u
c3QgUGF0dGVybkF0dHJpYnV0ZXMmIGF0dHJpYnV0ZXMsIGNvbnN0IEZsb2F0UmVjdCYgdGlsZUJv
dW5kYXJpZXMsIGNvbnN0IEZsb2F0UmVjdCYgYWJzb2x1dGVUaWxlQm91bmRhcmllcywgY29uc3Qg
QWZmaW5lVHJhbnNmb3JtJiB0aWxlSW1hZ2VUcmFuc2Zvcm0pIGNvbnN0CiB7Ci0gICAgY2xhbXBl
ZEFic29sdXRlVGlsZUJvdW5kYXJpZXMgPSBTVkdSZW5kZXJpbmdDb250ZXh0OjpjbGFtcGVkQWJz
b2x1dGVUYXJnZXRSZWN0KGFic29sdXRlVGlsZUJvdW5kYXJpZXMpOwotCi0gICAgc3RkOjp1bmlx
dWVfcHRyPEltYWdlQnVmZmVyPiB0aWxlSW1hZ2U7CisgICAgc3RkOjp1bmlxdWVfcHRyPEltYWdl
QnVmZmVyPiB0aWxlSW1hZ2UgPSBTVkdSZW5kZXJpbmdDb250ZXh0OjpjcmVhdGVJbWFnZUJ1ZmZl
cihhYnNvbHV0ZVRpbGVCb3VuZGFyaWVzLnNpemUoKSwgQ29sb3JTcGFjZURldmljZVJHQiwgVW5h
Y2NlbGVyYXRlZCk7CiAKLSAgICBpZiAoIVNWR1JlbmRlcmluZ0NvbnRleHQ6OmNyZWF0ZUltYWdl
QnVmZmVyRm9yUGF0dGVybihhYnNvbHV0ZVRpbGVCb3VuZGFyaWVzLCBjbGFtcGVkQWJzb2x1dGVU
aWxlQm91bmRhcmllcywgdGlsZUltYWdlLCBDb2xvclNwYWNlRGV2aWNlUkdCLCBVbmFjY2VsZXJh
dGVkKSkKKyAgICBpZiAoIXRpbGVJbWFnZSkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAKICAg
ICBHcmFwaGljc0NvbnRleHQqIHRpbGVJbWFnZUNvbnRleHQgPSB0aWxlSW1hZ2UtPmNvbnRleHQo
KTsKICAgICBBU1NFUlQodGlsZUltYWdlQ29udGV4dCk7CiAKICAgICAvLyBUaGUgaW1hZ2UgYnVm
ZmVyIHJlcHJlc2VudHMgdGhlIGZpbmFsIHJlbmRlcmVkIHNpemUsIHNvIHRoZSBjb250ZW50IGhh
cyB0byBiZSBzY2FsZWQgKHRvIGF2b2lkIHBpeGVsYXRpb24pLgotICAgIHRpbGVJbWFnZUNvbnRl
eHQtPnNjYWxlKEZsb2F0U2l6ZShjbGFtcGVkQWJzb2x1dGVUaWxlQm91bmRhcmllcy53aWR0aCgp
IC8gdGlsZUJvdW5kYXJpZXMud2lkdGgoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgY2xhbXBlZEFic29sdXRlVGlsZUJvdW5kYXJpZXMuaGVpZ2h0KCkgLyB0aWxlQm91
bmRhcmllcy5oZWlnaHQoKSkpOworICAgIHRpbGVJbWFnZUNvbnRleHQtPnNjYWxlKEZsb2F0U2l6
ZShhYnNvbHV0ZVRpbGVCb3VuZGFyaWVzLndpZHRoKCkgLyB0aWxlQm91bmRhcmllcy53aWR0aCgp
LCBhYnNvbHV0ZVRpbGVCb3VuZGFyaWVzLmhlaWdodCgpIC8gdGlsZUJvdW5kYXJpZXMuaGVpZ2h0
KCkpKTsKIAogICAgIC8vIEFwcGx5IHRpbGUgaW1hZ2UgdHJhbnNmb3JtYXRpb25zLgogICAgIGlm
ICghdGlsZUltYWdlVHJhbnNmb3JtLmlzSWRlbnRpdHkoKSkKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VQYXR0ZXJuLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJjZVBhdHRlcm4uaAko
cmV2aXNpb24gMTgzMzk5KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJT
VkdSZXNvdXJjZVBhdHRlcm4uaAkod29ya2luZyBjb3B5KQpAQCAtNTksNyArNTksNyBAQCBwcml2
YXRlOgogCiAgICAgYm9vbCBidWlsZFRpbGVJbWFnZVRyYW5zZm9ybShSZW5kZXJFbGVtZW50Jiwg
Y29uc3QgUGF0dGVybkF0dHJpYnV0ZXMmLCBjb25zdCBTVkdQYXR0ZXJuRWxlbWVudCYsIEZsb2F0
UmVjdCYgcGF0dGVybkJvdW5kYXJpZXMsIEFmZmluZVRyYW5zZm9ybSYgdGlsZUltYWdlVHJhbnNm
b3JtKSBjb25zdDsKIAotICAgIHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlcj4gY3JlYXRlVGls
ZUltYWdlKGNvbnN0IFBhdHRlcm5BdHRyaWJ1dGVzJiwgY29uc3QgRmxvYXRSZWN0JiB0aWxlQm91
bmRhcmllcywgY29uc3QgRmxvYXRSZWN0JiBhYnNvbHV0ZVRpbGVCb3VuZGFyaWVzLCBjb25zdCBB
ZmZpbmVUcmFuc2Zvcm0mIHRpbGVJbWFnZVRyYW5zZm9ybSwgRmxvYXRSZWN0JiBjbGFtcGVkQWJz
b2x1dGVUaWxlQm91bmRhcmllcykgY29uc3Q7CisgICAgc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVm
ZmVyPiBjcmVhdGVUaWxlSW1hZ2UoY29uc3QgUGF0dGVybkF0dHJpYnV0ZXMmLCBjb25zdCBGbG9h
dFJlY3QmIHRpbGVCb3VuZGFyaWVzLCBjb25zdCBGbG9hdFJlY3QmIGFic29sdXRlVGlsZUJvdW5k
YXJpZXMsIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgdGlsZUltYWdlVHJhbnNmb3JtKSBjb25zdDsK
IAogICAgIFBhdHRlcm5EYXRhKiBidWlsZFBhdHRlcm4oUmVuZGVyRWxlbWVudCYsIHVuc2lnbmVk
IHNob3J0IHJlc291cmNlTW9kZSk7CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9z
dmcvU1ZHUmVuZGVyaW5nQ29udGV4dC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL3N2Zy9TVkdSZW5kZXJpbmdDb250ZXh0LmNwcAkocmV2aXNpb24gMTgzMzk5KQor
KysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdSZW5kZXJpbmdDb250ZXh0LmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMjM5LDUxICsyMzksMzAgQEAgdm9pZCBTVkdSZW5kZXJpbmdDb250
ZXh0OjpjYWxjdWxhdGVUcmFucwogICAgIGFic29sdXRlVHJhbnNmb3JtLnNjYWxlKGRldmljZVNj
YWxlRmFjdG9yKTsKIH0KIAotYm9vbCBTVkdSZW5kZXJpbmdDb250ZXh0OjpjcmVhdGVJbWFnZUJ1
ZmZlcihjb25zdCBGbG9hdFJlY3QmIHRhcmdldFJlY3QsIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYg
YWJzb2x1dGVUcmFuc2Zvcm0sIHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlcj4mIGltYWdlQnVm
ZmVyLCBDb2xvclNwYWNlIGNvbG9yU3BhY2UsIFJlbmRlcmluZ01vZGUgcmVuZGVyaW5nTW9kZSkK
K3N0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlcj4gU1ZHUmVuZGVyaW5nQ29udGV4dDo6Y3JlYXRl
SW1hZ2VCdWZmZXIoY29uc3QgRmxvYXRTaXplJiBpbWFnZVNpemUsIENvbG9yU3BhY2UgY29sb3JT
cGFjZSwgUmVuZGVyaW5nTW9kZSByZW5kZXJpbmdNb2RlKQogewotICAgIEludFJlY3QgcGFpbnRS
ZWN0ID0gY2FsY3VsYXRlSW1hZ2VCdWZmZXJSZWN0KHRhcmdldFJlY3QsIGFic29sdXRlVHJhbnNm
b3JtKTsKICAgICAvLyBEb24ndCBjcmVhdGUgZW1wdHkgSW1hZ2VCdWZmZXJzLgotICAgIGlmIChw
YWludFJlY3QuaXNFbXB0eSgpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBJbnRTaXpl
IGNsYW1wZWRTaXplID0gY2xhbXBlZEFic29sdXRlU2l6ZShwYWludFJlY3Quc2l6ZSgpKTsKLSAg
ICBzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXI+IGltYWdlID0gSW1hZ2VCdWZmZXI6OmNyZWF0
ZShjbGFtcGVkU2l6ZSwgMSwgY29sb3JTcGFjZSwgcmVuZGVyaW5nTW9kZSk7Ci0gICAgaWYgKCFp
bWFnZSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgR3JhcGhpY3NDb250ZXh0KiBpbWFn
ZUNvbnRleHQgPSBpbWFnZS0+Y29udGV4dCgpOwotICAgIEFTU0VSVChpbWFnZUNvbnRleHQpOwot
Ci0gICAgaW1hZ2VDb250ZXh0LT5zY2FsZShGbG9hdFNpemUoc3RhdGljX2Nhc3Q8ZmxvYXQ+KGNs
YW1wZWRTaXplLndpZHRoKCkpIC8gcGFpbnRSZWN0LndpZHRoKCksCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgc3RhdGljX2Nhc3Q8ZmxvYXQ+KGNsYW1wZWRTaXplLmhlaWdodCgp
KSAvIHBhaW50UmVjdC5oZWlnaHQoKSkpOwotICAgIGltYWdlQ29udGV4dC0+dHJhbnNsYXRlKC1w
YWludFJlY3QueCgpLCAtcGFpbnRSZWN0LnkoKSk7Ci0gICAgaW1hZ2VDb250ZXh0LT5jb25jYXRD
VE0oYWJzb2x1dGVUcmFuc2Zvcm0pOworICAgIGlmIChpbWFnZVNpemUuaXNFbXB0eSgpKQorICAg
ICAgICByZXR1cm4gbnVsbHB0cjsKIAotICAgIGltYWdlQnVmZmVyID0gV1RGOjptb3ZlKGltYWdl
KTsKLSAgICByZXR1cm4gdHJ1ZTsKKyAgICByZXR1cm4gSW1hZ2VCdWZmZXI6OmNyZWF0ZShpbWFn
ZVNpemUsIDEsIGNvbG9yU3BhY2UsIHJlbmRlcmluZ01vZGUpOwogfQogCi1ib29sIFNWR1JlbmRl
cmluZ0NvbnRleHQ6OmNyZWF0ZUltYWdlQnVmZmVyRm9yUGF0dGVybihjb25zdCBGbG9hdFJlY3Qm
IGFic29sdXRlVGFyZ2V0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBjbGFtcGVkQWJzb2x1dGVUYXJn
ZXRSZWN0LCBzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXI+JiBpbWFnZUJ1ZmZlciwgQ29sb3JT
cGFjZSBjb2xvclNwYWNlLCBSZW5kZXJpbmdNb2RlIHJlbmRlcmluZ01vZGUpCitzdGQ6OnVuaXF1
ZV9wdHI8SW1hZ2VCdWZmZXI+IFNWR1JlbmRlcmluZ0NvbnRleHQ6OmNyZWF0ZUltYWdlQnVmZmVy
KGNvbnN0IEZsb2F0UmVjdCYgdGFyZ2V0UmVjdCwgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiBhYnNv
bHV0ZVRyYW5zZm9ybSwgQ29sb3JTcGFjZSBjb2xvclNwYWNlLCBSZW5kZXJpbmdNb2RlIHJlbmRl
cmluZ01vZGUpCiB7Ci0gICAgSW50U2l6ZSBpbWFnZVNpemUocm91bmRlZEludFNpemUoY2xhbXBl
ZEFic29sdXRlVGFyZ2V0UmVjdC5zaXplKCkpKTsKLSAgICBJbnRTaXplIHVuY2xhbXBlZEltYWdl
U2l6ZShyb3VuZGVkSW50U2l6ZShhYnNvbHV0ZVRhcmdldFJlY3Quc2l6ZSgpKSk7Ci0KLSAgICAv
LyBEb24ndCBjcmVhdGUgZW1wdHkgSW1hZ2VCdWZmZXJzLgotICAgIGlmIChpbWFnZVNpemUuaXNF
bXB0eSgpKQotICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgRmxvYXRSZWN0IHBhaW50UmVjdCA9
IGNhbGN1bGF0ZUltYWdlQnVmZmVyUmVjdCh0YXJnZXRSZWN0LCBhYnNvbHV0ZVRyYW5zZm9ybSk7
CiAKLSAgICBzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXI+IGltYWdlID0gSW1hZ2VCdWZmZXI6
OmNyZWF0ZShpbWFnZVNpemUsIDEsIGNvbG9yU3BhY2UsIHJlbmRlcmluZ01vZGUpOwotICAgIGlm
ICghaW1hZ2UpCi0gICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8SW1h
Z2VCdWZmZXI+IGltYWdlQnVmZmVyID0gU1ZHUmVuZGVyaW5nQ29udGV4dDo6Y3JlYXRlSW1hZ2VC
dWZmZXIocGFpbnRSZWN0LnNpemUoKSwgY29sb3JTcGFjZSwgcmVuZGVyaW5nTW9kZSk7CisgICAg
aWYgKCFpbWFnZUJ1ZmZlcikKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAKLSAgICBHcmFwaGlj
c0NvbnRleHQqIGltYWdlQ29udGV4dCA9IGltYWdlLT5jb250ZXh0KCk7CisgICAgR3JhcGhpY3ND
b250ZXh0KiBpbWFnZUNvbnRleHQgPSBpbWFnZUJ1ZmZlci0+Y29udGV4dCgpOwogICAgIEFTU0VS
VChpbWFnZUNvbnRleHQpOwogCi0gICAgLy8gQ29tcGVuc2F0ZSByb3VuZGluZyBlZmZlY3RzLCBh
cyB0aGUgYWJzb2x1dGUgdGFyZ2V0IHJlY3QgaXMgdXNpbmcgZmxvYXRpbmctcG9pbnQgbnVtYmVy
cyBhbmQgdGhlIGltYWdlIGJ1ZmZlciBzaXplIGlzIGludGVnZXIuCi0gICAgaW1hZ2VDb250ZXh0
LT5zY2FsZShGbG9hdFNpemUodW5jbGFtcGVkSW1hZ2VTaXplLndpZHRoKCkgLyBhYnNvbHV0ZVRh
cmdldFJlY3Qud2lkdGgoKSwgdW5jbGFtcGVkSW1hZ2VTaXplLmhlaWdodCgpIC8gYWJzb2x1dGVU
YXJnZXRSZWN0LmhlaWdodCgpKSk7CisgICAgaW1hZ2VDb250ZXh0LT50cmFuc2xhdGUoLXBhaW50
UmVjdC54KCksIC1wYWludFJlY3QueSgpKTsKKyAgICBpbWFnZUNvbnRleHQtPmNvbmNhdENUTShh
YnNvbHV0ZVRyYW5zZm9ybSk7CiAKLSAgICBpbWFnZUJ1ZmZlciA9IFdURjo6bW92ZShpbWFnZSk7
Ci0gICAgcmV0dXJuIHRydWU7CisgICAgcmV0dXJuIGltYWdlQnVmZmVyOwogfQogCiB2b2lkIFNW
R1JlbmRlcmluZ0NvbnRleHQ6OnJlbmRlclN1YnRyZWVUb0ltYWdlQnVmZmVyKEltYWdlQnVmZmVy
KiBpbWFnZSwgUmVuZGVyRWxlbWVudCYgaXRlbSwgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiBzdWJ0
cmVlQ29udGVudFRyYW5zZm9ybWF0aW9uKQpAQCAtMzIyLDE4ICszMDEsNiBAQCB2b2lkIFNWR1Jl
bmRlcmluZ0NvbnRleHQ6OmNsaXBUb0ltYWdlQnVmCiAgICAgICAgIGltYWdlQnVmZmVyLnJlc2V0
KCk7CiB9CiAKLUZsb2F0UmVjdCBTVkdSZW5kZXJpbmdDb250ZXh0OjpjbGFtcGVkQWJzb2x1dGVU
YXJnZXRSZWN0KGNvbnN0IEZsb2F0UmVjdCYgYWJzb2x1dGVUYXJnZXRSZWN0KQotewotICAgIGNv
bnN0IEZsb2F0U2l6ZSBtYXhJbWFnZUJ1ZmZlclNpemUoa01heEltYWdlQnVmZmVyU2l6ZSwga01h
eEltYWdlQnVmZmVyU2l6ZSk7Ci0gICAgcmV0dXJuIEZsb2F0UmVjdChhYnNvbHV0ZVRhcmdldFJl
Y3QubG9jYXRpb24oKSwgYWJzb2x1dGVUYXJnZXRSZWN0LnNpemUoKS5zaHJ1bmtUbyhtYXhJbWFn
ZUJ1ZmZlclNpemUpKTsKLX0KLQotSW50U2l6ZSBTVkdSZW5kZXJpbmdDb250ZXh0OjpjbGFtcGVk
QWJzb2x1dGVTaXplKGNvbnN0IEludFNpemUmIGFic29sdXRlU2l6ZSkKLXsKLSAgICBjb25zdCBJ
bnRTaXplIG1heEltYWdlQnVmZmVyU2l6ZShrTWF4SW1hZ2VCdWZmZXJTaXplLCBrTWF4SW1hZ2VC
dWZmZXJTaXplKTsKLSAgICByZXR1cm4gYWJzb2x1dGVTaXplLnNocnVua1RvKG1heEltYWdlQnVm
ZmVyU2l6ZSk7Ci19Ci0KIHZvaWQgU1ZHUmVuZGVyaW5nQ29udGV4dDo6Y2xlYXIyRFJvdGF0aW9u
KEFmZmluZVRyYW5zZm9ybSYgdHJhbnNmb3JtKQogewogICAgIEFmZmluZVRyYW5zZm9ybTo6RGVj
b21wb3NlZFR5cGUgZGVjb21wb3NpdGlvbjsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9zdmcvU1ZHUmVuZGVyaW5nQ29udGV4dC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9zdmcvU1ZHUmVuZGVyaW5nQ29udGV4dC5oCShyZXZpc2lvbiAxODMzOTkpCisr
KyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR1JlbmRlcmluZ0NvbnRleHQuaAkod29y
a2luZyBjb3B5KQpAQCAtNzEsMTcgKzcxLDE0IEBAIHB1YmxpYzoKICAgICB2b2lkIHByZXBhcmVU
b1JlbmRlclNWR0NvbnRlbnQoUmVuZGVyRWxlbWVudCYsIFBhaW50SW5mbyYsIE5lZWRzR3JhcGhp
Y3NDb250ZXh0U2F2ZSA9IERvbnRTYXZlR3JhcGhpY3NDb250ZXh0KTsKICAgICBib29sIGlzUmVu
ZGVyaW5nUHJlcGFyZWQoKSBjb25zdCB7IHJldHVybiBtX3JlbmRlcmluZ0ZsYWdzICYgUmVuZGVy
aW5nUHJlcGFyZWQ7IH0KIAotICAgIHN0YXRpYyBib29sIGNyZWF0ZUltYWdlQnVmZmVyKGNvbnN0
IEZsb2F0UmVjdCYgcGFpbnRSZWN0LCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIGFic29sdXRlVHJh
bnNmb3JtLCBzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXI+JiwgQ29sb3JTcGFjZSwgUmVuZGVy
aW5nTW9kZSk7Ci0gICAgLy8gUGF0dGVybnMgbmVlZCBhIGRpZmZlcmVudCBmbG9hdC10by1pbnRl
Z2VyIGNvb3JkaW5hdGUgbWFwcGluZy4KLSAgICBzdGF0aWMgYm9vbCBjcmVhdGVJbWFnZUJ1ZmZl
ckZvclBhdHRlcm4oY29uc3QgRmxvYXRSZWN0JiBhYnNvbHV0ZVRhcmdldFJlY3QsIGNvbnN0IEZs
b2F0UmVjdCYgY2xhbXBlZEFic29sdXRlVGFyZ2V0UmVjdCwgc3RkOjp1bmlxdWVfcHRyPEltYWdl
QnVmZmVyPiYsIENvbG9yU3BhY2UsIFJlbmRlcmluZ01vZGUpOworICAgIHN0YXRpYyBzdGQ6OnVu
aXF1ZV9wdHI8SW1hZ2VCdWZmZXI+IGNyZWF0ZUltYWdlQnVmZmVyKGNvbnN0IEZsb2F0U2l6ZSYg
aW1hZ2VTaXplLCBDb2xvclNwYWNlLCBSZW5kZXJpbmdNb2RlKTsKKyAgICBzdGF0aWMgc3RkOjp1
bmlxdWVfcHRyPEltYWdlQnVmZmVyPiBjcmVhdGVJbWFnZUJ1ZmZlcihjb25zdCBGbG9hdFJlY3Qm
IHRhcmdldFJlY3QsIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgYWJzb2x1dGVUcmFuc2Zvcm0sIENv
bG9yU3BhY2UsIFJlbmRlcmluZ01vZGUpOwogCiAgICAgc3RhdGljIHZvaWQgcmVuZGVyU3VidHJl
ZVRvSW1hZ2VCdWZmZXIoSW1hZ2VCdWZmZXIqLCBSZW5kZXJFbGVtZW50JiwgY29uc3QgQWZmaW5l
VHJhbnNmb3JtJik7CiAgICAgc3RhdGljIHZvaWQgY2xpcFRvSW1hZ2VCdWZmZXIoR3JhcGhpY3ND
b250ZXh0KiwgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiBhYnNvbHV0ZVRyYW5zZm9ybSwgY29uc3Qg
RmxvYXRSZWN0JiB0YXJnZXRSZWN0LCBzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXI+JiwgYm9v
bCBzYWZlVG9DbGVhcik7CiAKICAgICBzdGF0aWMgZmxvYXQgY2FsY3VsYXRlU2NyZWVuRm9udFNp
emVTY2FsaW5nRmFjdG9yKGNvbnN0IFJlbmRlck9iamVjdCYpOwogICAgIHN0YXRpYyB2b2lkIGNh
bGN1bGF0ZVRyYW5zZm9ybWF0aW9uVG9PdXRlcm1vc3RDb29yZGluYXRlU3lzdGVtKGNvbnN0IFJl
bmRlck9iamVjdCYsIEFmZmluZVRyYW5zZm9ybSYgYWJzb2x1dGVUcmFuc2Zvcm0pOwotICAgIHN0
YXRpYyBJbnRTaXplIGNsYW1wZWRBYnNvbHV0ZVNpemUoY29uc3QgSW50U2l6ZSYpOwotICAgIHN0
YXRpYyBGbG9hdFJlY3QgY2xhbXBlZEFic29sdXRlVGFyZ2V0UmVjdChjb25zdCBGbG9hdFJlY3Qm
IGFic29sdXRlVGFyZ2V0UmVjdCk7CiAgICAgc3RhdGljIHZvaWQgY2xlYXIyRFJvdGF0aW9uKEFm
ZmluZVRyYW5zZm9ybSYpOwogCiAgICAgc3RhdGljIEludFJlY3QgY2FsY3VsYXRlSW1hZ2VCdWZm
ZXJSZWN0KGNvbnN0IEZsb2F0UmVjdCYgdGFyZ2V0UmVjdCwgY29uc3QgQWZmaW5lVHJhbnNmb3Jt
JiBhYnNvbHV0ZVRyYW5zZm9ybSkKSW5kZXg6IExheW91dFRlc3RzL0NoYW5nZUxvZwo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cJKHJldmlzaW9uIDE4MzcwNSkKKysrIExheW91
dFRlc3RzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE1IEBACisyMDE1LTA1
LTAxICBTYWlkIEFib3UtSGFsbGF3YSAgPHNhYm91aGFsbGF3YUBhcHBsZS5jb20+CisKKyAgICAg
ICAgQXBwbHlpbmcgYSBmaWx0ZXIgb24gYW4gU1ZHIGVsZW1lbnQsIHdoaWNoIGlzIGxhcmdlciB0
aGFuIDQwOTYgcGl4ZWxzLCBjYXVzZXMgdGhpcyBlbGVtZW50IHRvIGJlIHJlbmRlcmVkIHNoaWZ0
ZWQgdG8gdGhlIGxlZnQKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTE0NDMzNQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisg
ICAgICAgICogc3ZnL2ZpbHRlcnMvYmlnLXNpemVkLW9mZi12aWV3cG9ydC1maWx0ZXItZXhwZWN0
ZWQuc3ZnOiBBZGRlZC4KKyAgICAgICAgKiBzdmcvZmlsdGVycy9iaWctc2l6ZWQtb2ZmLXZpZXdw
b3J0LWZpbHRlci5zdmc6IEFkZGVkLgorICAgICAgICBFbnN1cmUgd2hlbiBhcHBseWluZyBhIGZp
bHRlciBvbiBhIGxhcmdlIFNWRyBlbGVtZW50LCB0aGUgdmlld3BvcnQgb2YgdGhlCisgICAgICAg
IFNWRyBpbmNsdWRlcyB0aGUgY29ycmVjdCBkcmF3aW5nIG9mIHRoaXMgZWxlbWVudC4KKwogMjAx
NS0wNS0wMSAgRXJpYyBDYXJsc29uICA8ZXJpYy5jYXJsc29uQGFwcGxlLmNvbT4KIAogICAgICAg
ICBQb3N0cG9uZSBjYXB0aW9uIHN0eWxlIHNoZWV0IGNyZWF0aW9uCkluZGV4OiBMYXlvdXRUZXN0
cy9zdmcvZmlsdGVycy9iaWctc2l6ZWQtb2ZmLXZpZXdwb3J0LWZpbHRlci1leHBlY3RlZC5zdmcK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvc3ZnL2ZpbHRlcnMvYmlnLXNpemVkLW9mZi12aWV3
cG9ydC1maWx0ZXItZXhwZWN0ZWQuc3ZnCShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvc3Zn
L2ZpbHRlcnMvYmlnLXNpemVkLW9mZi12aWV3cG9ydC1maWx0ZXItZXhwZWN0ZWQuc3ZnCSh3b3Jr
aW5nIGNvcHkpCkBAIC0wLDAgKzEsOSBAQAorPHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcv
MjAwMC9zdmciIHZpZXdCb3g9IjAgMCAxMDAwIDUwMCI+CisgIDxmaWx0ZXIgaWQ9InNhdHVyYXRl
LWJhY2siPgorICAgIDxmZUNvbG9yTWF0cml4IGluPSJTb3VyY2VHcmFwaGljIiB0eXBlPSJzYXR1
cmF0ZSIgdmFsdWVzPSIxIi8+CisgIDwvZmlsdGVyPgorICA8ZyBmaWx0ZXI9InVybCgjc2F0dXJh
dGUtYmFjaykiPgorICAgIDxyZWN0IHg9Ii01MDAiIHk9IjAiIHdpZHRoPSI5NTAiIGhlaWdodD0i
MTAwJSIgZmlsbD0iZ3JlZW4iLz4KKyAgICA8cmVjdCB4PSI1NTAiIHk9IjAiIHdpZHRoPSI5NTAi
IGhlaWdodD0iMTAwJSIgZmlsbD0iZ3JlZW4iLz4KKyAgPC9nPgorPC9zdmc+CkluZGV4OiBMYXlv
dXRUZXN0cy9zdmcvZmlsdGVycy9iaWctc2l6ZWQtb2ZmLXZpZXdwb3J0LWZpbHRlci5zdmcKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gTGF5b3V0VGVzdHMvc3ZnL2ZpbHRlcnMvYmlnLXNpemVkLW9mZi12aWV3cG9y
dC1maWx0ZXIuc3ZnCShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvc3ZnL2ZpbHRlcnMvYmln
LXNpemVkLW9mZi12aWV3cG9ydC1maWx0ZXIuc3ZnCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEs
OSBAQAorPHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAg
MCAxMDAwIDUwMCI+CisgIDxmaWx0ZXIgaWQ9InNhdHVyYXRlLWJhY2siPgorICAgIDxmZUNvbG9y
TWF0cml4IGluPSJTb3VyY2VHcmFwaGljIiB0eXBlPSJzYXR1cmF0ZSIgdmFsdWVzPSIxIi8+Cisg
IDwvZmlsdGVyPgorICA8ZyBmaWx0ZXI9InVybCgjc2F0dXJhdGUtYmFjaykiPgorICAgIDxyZWN0
IHg9Ii0zNTAwIiB5PSIwIiB3aWR0aD0iMzk1MCIgaGVpZ2h0PSIxMDAlIiBmaWxsPSJncmVlbiIv
PgorICAgIDxyZWN0IHg9IjU1MCIgeT0iMCIgd2lkdGg9IjM5NTAiIGhlaWdodD0iMTAwJSIgZmls
bD0iZ3JlZW4iLz4KKyAgPC9nPgorPC9zdmc+Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>252214</attachid>
            <date>2015-05-01 20:36:04 -0700</date>
            <delta_ts>2015-05-06 18:24:15 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-144335-20150501203452.patch</filename>
            <type>text/plain</type>
            <size>21673</size>
            <attacher name="Said Abou-Hallawa">sabouhallawa</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDE4MzcwNSkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDUxIEBACisyMDE1LTA1LTAxICBTYWlkIEFi
b3UtSGFsbGF3YSAgPHNhYm91aGFsbGF3YUBhcHBsZS5jb20+CisKKyAgICAgICAgQXBwbHlpbmcg
YSBmaWx0ZXIgb24gYW4gU1ZHIGVsZW1lbnQsIHdoaWNoIGlzIGxhcmdlciB0aGFuIDQwOTYgcGl4
ZWxzLCBjYXVzZXMgdGhpcyBlbGVtZW50IHRvIGJlIHJlbmRlcmVkIHNoaWZ0ZWQgdG8gdGhlIGxl
ZnQKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE0NDMz
NQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFJlbW92
ZSB0aGUgY2xhbXBpbmcgY29kZSB3aGljaCBpcyBhcHBsaWVkIHdoZW4gZ2VuZXJhdGluZyB0aGUg
SW1hZ2VCdWZmZXIKKyAgICAgICAgb2YgdGhlIHNvdXJjZUdyYXBoaWNCdWZmZXIuIFRoaXMgY29k
ZSBpcyBpbmNvcnJlY3QgYW5kIGluY29tcGxldGUuIE5vbmUgb2YKKyAgICAgICAgdGhlIEZpbHRl
ckVmZmVjdHMgZW5mb3JjZXMgYW55IHJ1bGUgb24gdGhlIHNpemUgb2YgdGhlIHJlc3VsdCBJbWFn
ZUJ1ZmZlci4KKyAgICAgICAgCisgICAgICAgIEl0IGhhcyBhbHNvIHRoZSBkcmF3YmFjayBvZiBs
b3NpbmcgdGhlIFNWRyBkcmF3aW5nIHF1YWxpdHkgYmVjYXVzZSBvZgorICAgICAgICBzY2FsaW5n
IHRoZSBHcmFwaGljQ29udGV4dCBkb3duIGFuZCB0aGVuIHNjYWxpbmcgaXQgdXAuIE5vbmUgb2Yg
dGhlIG90aGVyCisgICAgICAgIGJyb3dzZXJzIHNlZW0gdG8gYmUgZG9pbmcgaXQuCisgICAgICAg
IAorICAgICAgICBUZXN0czogc3ZnL2ZpbHRlcnMvYmlnLXNpemVkLW9mZi12aWV3cG9ydC1maWx0
ZXIuc3ZnCisKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFVGlsZS5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpGRVRpbGU6OnBsYXRmb3JtQXBwbHlTb2Z0d2FyZSk6CisgICAg
ICAgICogcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJjZUNsaXBwZXIuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6UmVuZGVyU1ZHUmVzb3VyY2VDbGlwcGVyOjphcHBseUNsaXBwaW5nVG9Db250
ZXh0KToKKyAgICAgICAgKiByZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291cmNlRmlsdGVyLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclNWR1Jlc291cmNlRmlsdGVyOjphcHBseVJlc291
cmNlKToKKyAgICAgICAgKiByZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291cmNlR3JhZGllbnQu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6Y3JlYXRlTWFza0FuZFN3YXBDb250ZXh0Rm9yVGV4dEdy
YWRpZW50KToKKyAgICAgICAgKiByZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291cmNlTWFza2Vy
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclNWR1Jlc291cmNlTWFza2VyOjphcHBseVNW
R01hc2spOgorICAgICAgICBDbGVhbi11cCwgY2hhbmdlIFNWR1JlbmRlcmluZ0NvbnRleHQ6OmNy
ZWF0ZUltYWdlQnVmZmVyKCkgdG8gcmV0dXJuIGEKKyAgICAgICAgc3RkOjp1bmlxdWVfcHRyPElt
YWdlQnVmZmVyPiBpbnN0ZWFkIG9mIHJldHVybmluZyBhIGJvb2wgYW5kIHBhc3NpbmcgYQorICAg
ICAgICBzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXI+Ji4KKyAgICAgICAgCisgICAgICAgICog
cmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJjZVBhdHRlcm4uY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6UmVuZGVyU1ZHUmVzb3VyY2VQYXR0ZXJuOjpidWlsZFBhdHRlcm4pOgorICAgICAgICAo
V2ViQ29yZTo6UmVuZGVyU1ZHUmVzb3VyY2VQYXR0ZXJuOjpjcmVhdGVUaWxlSW1hZ2UpOgorICAg
ICAgICAqIHJlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VQYXR0ZXJuLmg6CisgICAgICAg
IFJlbW92ZSB0aGUgY2xhbXBpbmcgY29kZSBmcm9tIFJlbmRlclNWR1Jlc291cmNlUGF0dGVybjo6
Y3JlYXRlVGlsZUltYWdlKCkuCisgICAgICAgIAorICAgICAgICAqIHJlbmRlcmluZy9zdmcvU1ZH
UmVuZGVyaW5nQ29udGV4dC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTVkdSZW5kZXJpbmdDb250
ZXh0OjpjcmVhdGVJbWFnZUJ1ZmZlcik6CisgICAgICAgIChXZWJDb3JlOjpTVkdSZW5kZXJpbmdD
b250ZXh0OjpjcmVhdGVJbWFnZUJ1ZmZlckZvclBhdHRlcm4pOiBEZWxldGVkLgorICAgICAgICAo
V2ViQ29yZTo6U1ZHUmVuZGVyaW5nQ29udGV4dDo6Y2xhbXBlZEFic29sdXRlVGFyZ2V0UmVjdCk6
IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpTVkdSZW5kZXJpbmdDb250ZXh0OjpjbGFtcGVk
QWJzb2x1dGVTaXplKTogRGVsZXRlZC4KKyAgICAgICAgKiByZW5kZXJpbmcvc3ZnL1NWR1JlbmRl
cmluZ0NvbnRleHQuaDoKKyAgICAgICAgLS0gUmVuYW1lIFNWR1JlbmRlcmluZ0NvbnRleHQ6OmNy
ZWF0ZUltYWdlQnVmZmVyRm9yUGF0dGVybigpIHRvIGJlCisgICAgICAgICAgIFNWR1JlbmRlcmlu
Z0NvbnRleHQ6OmNyZWF0ZUltYWdlQnVmZmVyKCkgYW5kIHJlbW92ZSB0aGUgY2xhbXBpbmcgY29k
ZS4KKyAgICAgICAgLS0gUmVtb3ZlIHRoZSBjbGFtcGluZyBjb2RlIGZyb20gU1ZHUmVuZGVyaW5n
Q29udGV4dDo6Y3JlYXRlSW1hZ2VCdWZmZXIoKS4KKyAgICAgICAgLS0gUmVtb3ZlIHRoZSB1bnVz
ZWQgY2xhbXBpbmcgaGVscGVyIGZ1bmN0aW9ucy4KKwogMjAxNS0wNS0wMSAgRXJpYyBDYXJsc29u
ICA8ZXJpYy5jYXJsc29uQGFwcGxlLmNvbT4KIAogICAgICAgICBQb3N0cG9uZSBjYXB0aW9uIHN0
eWxlIHNoZWV0IGNyZWF0aW9uCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9maWx0ZXJzL0ZFVGlsZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvZmlsdGVycy9GRVRpbGUuY3BwCShyZXZpc2lvbiAxODMzOTkpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFVGlsZS5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTYzLDggKzYzLDggQEAgdm9pZCBGRVRpbGU6OnBsYXRmb3JtQXBwbHlTb2Z0d2Fy
ZSgpCiAgICAgICAgIHRpbGVSZWN0LnNjYWxlKGZpbHRlci5maWx0ZXJSZXNvbHV0aW9uKCkud2lk
dGgoKSwgZmlsdGVyLmZpbHRlclJlc29sdXRpb24oKS5oZWlnaHQoKSk7CiAgICAgfQogCi0gICAg
c3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVyPiB0aWxlSW1hZ2U7Ci0gICAgaWYgKCFTVkdSZW5k
ZXJpbmdDb250ZXh0OjpjcmVhdGVJbWFnZUJ1ZmZlckZvclBhdHRlcm4odGlsZVJlY3QsIHRpbGVS
ZWN0LCB0aWxlSW1hZ2UsIENvbG9yU3BhY2VEZXZpY2VSR0IsIGZpbHRlcigpLnJlbmRlcmluZ01v
ZGUoKSkpCisgICAgc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVyPiB0aWxlSW1hZ2UgPSBTVkdS
ZW5kZXJpbmdDb250ZXh0OjpjcmVhdGVJbWFnZUJ1ZmZlcih0aWxlUmVjdC5zaXplKCksIENvbG9y
U3BhY2VEZXZpY2VSR0IsIGZpbHRlcigpLnJlbmRlcmluZ01vZGUoKSk7CisgICAgaWYgKCF0aWxl
SW1hZ2UpCiAgICAgICAgIHJldHVybjsKIAogICAgIEdyYXBoaWNzQ29udGV4dCogdGlsZUltYWdl
Q29udGV4dCA9IHRpbGVJbWFnZS0+Y29udGV4dCgpOwpJbmRleDogU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJjZUNsaXBwZXIuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VDbGlwcGVyLmNwcAko
cmV2aXNpb24gMTgzMzk5KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJT
VkdSZXNvdXJjZUNsaXBwZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNDIsNyArMTQyLDggQEAg
Ym9vbCBSZW5kZXJTVkdSZXNvdXJjZUNsaXBwZXI6OmFwcGx5Q2xpcAogICAgIFNWR1JlbmRlcmlu
Z0NvbnRleHQ6OmNhbGN1bGF0ZVRyYW5zZm9ybWF0aW9uVG9PdXRlcm1vc3RDb29yZGluYXRlU3lz
dGVtKHJlbmRlcmVyLCBhYnNvbHV0ZVRyYW5zZm9ybSk7CiAKICAgICBpZiAoc2hvdWxkQ3JlYXRl
Q2xpcHBlck1hc2tJbWFnZSAmJiAhcmVwYWludFJlY3QuaXNFbXB0eSgpKSB7Ci0gICAgICAgIGlm
ICghU1ZHUmVuZGVyaW5nQ29udGV4dDo6Y3JlYXRlSW1hZ2VCdWZmZXIocmVwYWludFJlY3QsIGFi
c29sdXRlVHJhbnNmb3JtLCBjbGlwcGVyTWFza0ltYWdlLCBDb2xvclNwYWNlRGV2aWNlUkdCLCBV
bmFjY2VsZXJhdGVkKSkKKyAgICAgICAgY2xpcHBlck1hc2tJbWFnZSA9IFNWR1JlbmRlcmluZ0Nv
bnRleHQ6OmNyZWF0ZUltYWdlQnVmZmVyKHJlcGFpbnRSZWN0LCBhYnNvbHV0ZVRyYW5zZm9ybSwg
Q29sb3JTcGFjZURldmljZVJHQiwgVW5hY2NlbGVyYXRlZCk7CisgICAgICAgIGlmICghY2xpcHBl
ck1hc2tJbWFnZSkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgICAgICBHcmFwaGlj
c0NvbnRleHQqIG1hc2tDb250ZXh0ID0gY2xpcHBlck1hc2tJbWFnZS0+Y29udGV4dCgpOwpJbmRl
eDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJjZUZpbHRlci5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdS
ZXNvdXJjZUZpbHRlci5jcHAJKHJldmlzaW9uIDE4MzM5OSkKKysrIFNvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VGaWx0ZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0yMDMsNyArMjAzLDggQEAgYm9vbCBSZW5kZXJTVkdSZXNvdXJjZUZpbHRlcjo6YXBwbHlSZXNv
dQogCiAgICAgc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVyPiBzb3VyY2VHcmFwaGljOwogICAg
IFJlbmRlcmluZ01vZGUgcmVuZGVyaW5nTW9kZSA9IHJlbmRlcmVyLmZyYW1lKCkuc2V0dGluZ3Mo
KS5hY2NlbGVyYXRlZEZpbHRlcnNFbmFibGVkKCkgPyBBY2NlbGVyYXRlZCA6IFVuYWNjZWxlcmF0
ZWQ7Ci0gICAgaWYgKCFTVkdSZW5kZXJpbmdDb250ZXh0OjpjcmVhdGVJbWFnZUJ1ZmZlcihmaWx0
ZXJEYXRhLT5kcmF3aW5nUmVnaW9uLCBlZmZlY3RpdmVUcmFuc2Zvcm0sIHNvdXJjZUdyYXBoaWMs
IENvbG9yU3BhY2VMaW5lYXJSR0IsIHJlbmRlcmluZ01vZGUpKSB7CisgICAgc291cmNlR3JhcGhp
YyA9IFNWR1JlbmRlcmluZ0NvbnRleHQ6OmNyZWF0ZUltYWdlQnVmZmVyKGZpbHRlckRhdGEtPmRy
YXdpbmdSZWdpb24sIGVmZmVjdGl2ZVRyYW5zZm9ybSwgQ29sb3JTcGFjZUxpbmVhclJHQiwgcmVu
ZGVyaW5nTW9kZSk7CisgICAgaWYgKCFzb3VyY2VHcmFwaGljKSB7CiAgICAgICAgIEFTU0VSVCgh
bV9maWx0ZXIuY29udGFpbnMoJnJlbmRlcmVyKSk7CiAgICAgICAgIGZpbHRlckRhdGEtPnNhdmVk
Q29udGV4dCA9IGNvbnRleHQ7CiAgICAgICAgIG1fZmlsdGVyLnNldCgmcmVuZGVyZXIsIFdURjo6
bW92ZShmaWx0ZXJEYXRhKSk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1Jl
bmRlclNWR1Jlc291cmNlR3JhZGllbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VHcmFkaWVudC5jcHAJKHJldmlzaW9uIDE4
MzM5OSkKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VH
cmFkaWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTYyLDggKzYyLDggQEAgc3RhdGljIGlubGlu
ZSBib29sIGNyZWF0ZU1hc2tBbmRTd2FwQ29udAogICAgIFNWR1JlbmRlcmluZ0NvbnRleHQ6OmNh
bGN1bGF0ZVRyYW5zZm9ybWF0aW9uVG9PdXRlcm1vc3RDb29yZGluYXRlU3lzdGVtKCp0ZXh0Um9v
dEJsb2NrLCBhYnNvbHV0ZVRyYW5zZm9ybSk7CiAKICAgICBGbG9hdFJlY3QgcmVwYWludFJlY3Qg
PSB0ZXh0Um9vdEJsb2NrLT5yZXBhaW50UmVjdEluTG9jYWxDb29yZGluYXRlcygpOwotICAgIHN0
ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlcj4gbWFza0ltYWdlOwotICAgIGlmICghU1ZHUmVuZGVy
aW5nQ29udGV4dDo6Y3JlYXRlSW1hZ2VCdWZmZXIocmVwYWludFJlY3QsIGFic29sdXRlVHJhbnNm
b3JtLCBtYXNrSW1hZ2UsIENvbG9yU3BhY2VEZXZpY2VSR0IsIFVuYWNjZWxlcmF0ZWQpKQorICAg
IHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlcj4gbWFza0ltYWdlID0gU1ZHUmVuZGVyaW5nQ29u
dGV4dDo6Y3JlYXRlSW1hZ2VCdWZmZXIocmVwYWludFJlY3QsIGFic29sdXRlVHJhbnNmb3JtLCBD
b2xvclNwYWNlRGV2aWNlUkdCLCBVbmFjY2VsZXJhdGVkKTsKKyAgICBpZiAoIW1hc2tJbWFnZSkK
ICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgR3JhcGhpY3NDb250ZXh0KiBtYXNrSW1hZ2VD
b250ZXh0ID0gbWFza0ltYWdlLT5jb250ZXh0KCk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291cmNlTWFza2VyLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291cmNlTWFza2VyLmNwcAkocmV2
aXNpb24gMTgzMzk5KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdS
ZXNvdXJjZU1hc2tlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTcyLDcgKzcyLDggQEAgYm9vbCBS
ZW5kZXJTVkdSZXNvdXJjZU1hc2tlcjo6YXBwbHlTVkdNYQogICAgIGlmICghbWFza2VyRGF0YS0+
bWFza0ltYWdlICYmICFyZXBhaW50UmVjdC5pc0VtcHR5KCkpIHsKICAgICAgICAgY29uc3QgU1ZH
UmVuZGVyU3R5bGUmIHN2Z1N0eWxlID0gc3R5bGUoKS5zdmdTdHlsZSgpOwogICAgICAgICBDb2xv
clNwYWNlIGNvbG9yU3BhY2UgPSBzdmdTdHlsZS5jb2xvckludGVycG9sYXRpb24oKSA9PSBDSV9M
SU5FQVJSR0IgPyBDb2xvclNwYWNlTGluZWFyUkdCIDogQ29sb3JTcGFjZURldmljZVJHQjsKLSAg
ICAgICAgaWYgKCFTVkdSZW5kZXJpbmdDb250ZXh0OjpjcmVhdGVJbWFnZUJ1ZmZlcihyZXBhaW50
UmVjdCwgYWJzb2x1dGVUcmFuc2Zvcm0sIG1hc2tlckRhdGEtPm1hc2tJbWFnZSwgY29sb3JTcGFj
ZSwgVW5hY2NlbGVyYXRlZCkpCisgICAgICAgIG1hc2tlckRhdGEtPm1hc2tJbWFnZSA9IFNWR1Jl
bmRlcmluZ0NvbnRleHQ6OmNyZWF0ZUltYWdlQnVmZmVyKHJlcGFpbnRSZWN0LCBhYnNvbHV0ZVRy
YW5zZm9ybSwgY29sb3JTcGFjZSwgVW5hY2NlbGVyYXRlZCk7CisgICAgICAgIGlmICghbWFza2Vy
RGF0YS0+bWFza0ltYWdlKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgICAgIGlm
ICghZHJhd0NvbnRlbnRJbnRvTWFza0ltYWdlKG1hc2tlckRhdGEsIGNvbG9yU3BhY2UsICZyZW5k
ZXJlcikpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291
cmNlUGF0dGVybi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2
Zy9SZW5kZXJTVkdSZXNvdXJjZVBhdHRlcm4uY3BwCShyZXZpc2lvbiAxODMzOTkpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291cmNlUGF0dGVybi5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTcwLDE3ICs3MCwxNyBAQCBQYXR0ZXJuRGF0YSogUmVuZGVyU1ZHUmVz
b3VyY2VQYXR0ZXJuOjpiCiAKICAgICAvLyBJZiB3ZSBjb3VsZG4ndCBkZXRlcm1pbmUgdGhlIHBh
dHRlcm4gY29udGVudCBlbGVtZW50IHJvb3QsIHN0b3AgaGVyZS4KICAgICBpZiAoIW1fYXR0cmli
dXRlcy5wYXR0ZXJuQ29udGVudEVsZW1lbnQoKSkKLSAgICAgICAgcmV0dXJuIDA7CisgICAgICAg
IHJldHVybiBudWxscHRyOwogCiAgICAgLy8gQW4gZW1wdHkgdmlld0JveCBkaXNhYmxlcyByZW5k
ZXJpbmcuCiAgICAgaWYgKG1fYXR0cmlidXRlcy5oYXNWaWV3Qm94KCkgJiYgbV9hdHRyaWJ1dGVz
LnZpZXdCb3goKS5pc0VtcHR5KCkpCi0gICAgICAgIHJldHVybiAwOworICAgICAgICByZXR1cm4g
bnVsbHB0cjsKIAogICAgIC8vIENvbXB1dGUgYWxsIG5lY2Vzc2FyeSB0cmFuc2Zvcm1hdGlvbnMg
dG8gYnVpbGQgdGhlIHRpbGUgaW1hZ2UgJiB0aGUgcGF0dGVybi4KICAgICBGbG9hdFJlY3QgdGls
ZUJvdW5kYXJpZXM7CiAgICAgQWZmaW5lVHJhbnNmb3JtIHRpbGVJbWFnZVRyYW5zZm9ybTsKICAg
ICBpZiAoIWJ1aWxkVGlsZUltYWdlVHJhbnNmb3JtKHJlbmRlcmVyLCBtX2F0dHJpYnV0ZXMsIHBh
dHRlcm5FbGVtZW50KCksIHRpbGVCb3VuZGFyaWVzLCB0aWxlSW1hZ2VUcmFuc2Zvcm0pKQotICAg
ICAgICByZXR1cm4gMDsKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAKICAgICBBZmZpbmVUcmFu
c2Zvcm0gYWJzb2x1dGVUcmFuc2Zvcm1JZ25vcmluZ1JvdGF0aW9uOwogICAgIFNWR1JlbmRlcmlu
Z0NvbnRleHQ6OmNhbGN1bGF0ZVRyYW5zZm9ybWF0aW9uVG9PdXRlcm1vc3RDb29yZGluYXRlU3lz
dGVtKHJlbmRlcmVyLCBhYnNvbHV0ZVRyYW5zZm9ybUlnbm9yaW5nUm90YXRpb24pOwpAQCAtODgs
MjAgKzg4LDE5IEBAIFBhdHRlcm5EYXRhKiBSZW5kZXJTVkdSZXNvdXJjZVBhdHRlcm46OmIKICAg
ICAvLyBJZ25vcmUgMkQgcm90YXRpb24sIGFzIGl0IGRvZXNuJ3QgYWZmZWN0IHRoZSBzaXplIG9m
IHRoZSB0aWxlLgogICAgIFNWR1JlbmRlcmluZ0NvbnRleHQ6OmNsZWFyMkRSb3RhdGlvbihhYnNv
bHV0ZVRyYW5zZm9ybUlnbm9yaW5nUm90YXRpb24pOwogICAgIEZsb2F0UmVjdCBhYnNvbHV0ZVRp
bGVCb3VuZGFyaWVzID0gYWJzb2x1dGVUcmFuc2Zvcm1JZ25vcmluZ1JvdGF0aW9uLm1hcFJlY3Qo
dGlsZUJvdW5kYXJpZXMpOwotICAgIEZsb2F0UmVjdCBjbGFtcGVkQWJzb2x1dGVUaWxlQm91bmRh
cmllczsKIAogICAgIC8vIFNjYWxlIHRoZSB0aWxlIHNpemUgdG8gbWF0Y2ggdGhlIHNjYWxlIGxl
dmVsIG9mIHRoZSBwYXR0ZXJuVHJhbnNmb3JtLgogICAgIGFic29sdXRlVGlsZUJvdW5kYXJpZXMu
c2NhbGUoc3RhdGljX2Nhc3Q8ZmxvYXQ+KG1fYXR0cmlidXRlcy5wYXR0ZXJuVHJhbnNmb3JtKCku
eFNjYWxlKCkpLAogICAgICAgICBzdGF0aWNfY2FzdDxmbG9hdD4obV9hdHRyaWJ1dGVzLnBhdHRl
cm5UcmFuc2Zvcm0oKS55U2NhbGUoKSkpOwogCiAgICAgLy8gQnVpbGQgdGlsZSBpbWFnZS4KLSAg
ICBzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXI+IHRpbGVJbWFnZSA9IGNyZWF0ZVRpbGVJbWFn
ZShtX2F0dHJpYnV0ZXMsIHRpbGVCb3VuZGFyaWVzLCBhYnNvbHV0ZVRpbGVCb3VuZGFyaWVzLCB0
aWxlSW1hZ2VUcmFuc2Zvcm0sIGNsYW1wZWRBYnNvbHV0ZVRpbGVCb3VuZGFyaWVzKTsKKyAgICBz
dGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXI+IHRpbGVJbWFnZSA9IGNyZWF0ZVRpbGVJbWFnZSht
X2F0dHJpYnV0ZXMsIHRpbGVCb3VuZGFyaWVzLCBhYnNvbHV0ZVRpbGVCb3VuZGFyaWVzLCB0aWxl
SW1hZ2VUcmFuc2Zvcm0pOwogICAgIGlmICghdGlsZUltYWdlKQotICAgICAgICByZXR1cm4gMDsK
KyAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAKICAgICBSZWZQdHI8SW1hZ2U+IGNvcGllZEltYWdl
ID0gdGlsZUltYWdlLT5jb3B5SW1hZ2UoQ29weUJhY2tpbmdTdG9yZSk7CiAgICAgaWYgKCFjb3Bp
ZWRJbWFnZSkKLSAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIHJldHVybiBudWxscHRyOwogCiAg
ICAgLy8gQnVpbGQgcGF0dGVybi4KICAgICBhdXRvIHBhdHRlcm5EYXRhID0gc3RkOjptYWtlX3Vu
aXF1ZTxQYXR0ZXJuRGF0YT4oKTsKQEAgLTIzMSwyMSArMjMwLDE4IEBAIGJvb2wgUmVuZGVyU1ZH
UmVzb3VyY2VQYXR0ZXJuOjpidWlsZFRpbGUKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotc3RkOjp1
bmlxdWVfcHRyPEltYWdlQnVmZmVyPiBSZW5kZXJTVkdSZXNvdXJjZVBhdHRlcm46OmNyZWF0ZVRp
bGVJbWFnZShjb25zdCBQYXR0ZXJuQXR0cmlidXRlcyYgYXR0cmlidXRlcywgY29uc3QgRmxvYXRS
ZWN0JiB0aWxlQm91bmRhcmllcywgY29uc3QgRmxvYXRSZWN0JiBhYnNvbHV0ZVRpbGVCb3VuZGFy
aWVzLCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHRpbGVJbWFnZVRyYW5zZm9ybSwgRmxvYXRSZWN0
JiBjbGFtcGVkQWJzb2x1dGVUaWxlQm91bmRhcmllcykgY29uc3QKK3N0ZDo6dW5pcXVlX3B0cjxJ
bWFnZUJ1ZmZlcj4gUmVuZGVyU1ZHUmVzb3VyY2VQYXR0ZXJuOjpjcmVhdGVUaWxlSW1hZ2UoY29u
c3QgUGF0dGVybkF0dHJpYnV0ZXMmIGF0dHJpYnV0ZXMsIGNvbnN0IEZsb2F0UmVjdCYgdGlsZUJv
dW5kYXJpZXMsIGNvbnN0IEZsb2F0UmVjdCYgYWJzb2x1dGVUaWxlQm91bmRhcmllcywgY29uc3Qg
QWZmaW5lVHJhbnNmb3JtJiB0aWxlSW1hZ2VUcmFuc2Zvcm0pIGNvbnN0CiB7Ci0gICAgY2xhbXBl
ZEFic29sdXRlVGlsZUJvdW5kYXJpZXMgPSBTVkdSZW5kZXJpbmdDb250ZXh0OjpjbGFtcGVkQWJz
b2x1dGVUYXJnZXRSZWN0KGFic29sdXRlVGlsZUJvdW5kYXJpZXMpOwotCi0gICAgc3RkOjp1bmlx
dWVfcHRyPEltYWdlQnVmZmVyPiB0aWxlSW1hZ2U7CisgICAgc3RkOjp1bmlxdWVfcHRyPEltYWdl
QnVmZmVyPiB0aWxlSW1hZ2UgPSBTVkdSZW5kZXJpbmdDb250ZXh0OjpjcmVhdGVJbWFnZUJ1ZmZl
cihhYnNvbHV0ZVRpbGVCb3VuZGFyaWVzLnNpemUoKSwgQ29sb3JTcGFjZURldmljZVJHQiwgVW5h
Y2NlbGVyYXRlZCk7CiAKLSAgICBpZiAoIVNWR1JlbmRlcmluZ0NvbnRleHQ6OmNyZWF0ZUltYWdl
QnVmZmVyRm9yUGF0dGVybihhYnNvbHV0ZVRpbGVCb3VuZGFyaWVzLCBjbGFtcGVkQWJzb2x1dGVU
aWxlQm91bmRhcmllcywgdGlsZUltYWdlLCBDb2xvclNwYWNlRGV2aWNlUkdCLCBVbmFjY2VsZXJh
dGVkKSkKKyAgICBpZiAoIXRpbGVJbWFnZSkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAKICAg
ICBHcmFwaGljc0NvbnRleHQqIHRpbGVJbWFnZUNvbnRleHQgPSB0aWxlSW1hZ2UtPmNvbnRleHQo
KTsKICAgICBBU1NFUlQodGlsZUltYWdlQ29udGV4dCk7CiAKICAgICAvLyBUaGUgaW1hZ2UgYnVm
ZmVyIHJlcHJlc2VudHMgdGhlIGZpbmFsIHJlbmRlcmVkIHNpemUsIHNvIHRoZSBjb250ZW50IGhh
cyB0byBiZSBzY2FsZWQgKHRvIGF2b2lkIHBpeGVsYXRpb24pLgotICAgIHRpbGVJbWFnZUNvbnRl
eHQtPnNjYWxlKEZsb2F0U2l6ZShjbGFtcGVkQWJzb2x1dGVUaWxlQm91bmRhcmllcy53aWR0aCgp
IC8gdGlsZUJvdW5kYXJpZXMud2lkdGgoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgY2xhbXBlZEFic29sdXRlVGlsZUJvdW5kYXJpZXMuaGVpZ2h0KCkgLyB0aWxlQm91
bmRhcmllcy5oZWlnaHQoKSkpOworICAgIHRpbGVJbWFnZUNvbnRleHQtPnNjYWxlKEZsb2F0U2l6
ZShhYnNvbHV0ZVRpbGVCb3VuZGFyaWVzLndpZHRoKCkgLyB0aWxlQm91bmRhcmllcy53aWR0aCgp
LCBhYnNvbHV0ZVRpbGVCb3VuZGFyaWVzLmhlaWdodCgpIC8gdGlsZUJvdW5kYXJpZXMuaGVpZ2h0
KCkpKTsKIAogICAgIC8vIEFwcGx5IHRpbGUgaW1hZ2UgdHJhbnNmb3JtYXRpb25zLgogICAgIGlm
ICghdGlsZUltYWdlVHJhbnNmb3JtLmlzSWRlbnRpdHkoKSkKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VQYXR0ZXJuLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJjZVBhdHRlcm4uaAko
cmV2aXNpb24gMTgzMzk5KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJT
VkdSZXNvdXJjZVBhdHRlcm4uaAkod29ya2luZyBjb3B5KQpAQCAtNTksNyArNTksNyBAQCBwcml2
YXRlOgogCiAgICAgYm9vbCBidWlsZFRpbGVJbWFnZVRyYW5zZm9ybShSZW5kZXJFbGVtZW50Jiwg
Y29uc3QgUGF0dGVybkF0dHJpYnV0ZXMmLCBjb25zdCBTVkdQYXR0ZXJuRWxlbWVudCYsIEZsb2F0
UmVjdCYgcGF0dGVybkJvdW5kYXJpZXMsIEFmZmluZVRyYW5zZm9ybSYgdGlsZUltYWdlVHJhbnNm
b3JtKSBjb25zdDsKIAotICAgIHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlcj4gY3JlYXRlVGls
ZUltYWdlKGNvbnN0IFBhdHRlcm5BdHRyaWJ1dGVzJiwgY29uc3QgRmxvYXRSZWN0JiB0aWxlQm91
bmRhcmllcywgY29uc3QgRmxvYXRSZWN0JiBhYnNvbHV0ZVRpbGVCb3VuZGFyaWVzLCBjb25zdCBB
ZmZpbmVUcmFuc2Zvcm0mIHRpbGVJbWFnZVRyYW5zZm9ybSwgRmxvYXRSZWN0JiBjbGFtcGVkQWJz
b2x1dGVUaWxlQm91bmRhcmllcykgY29uc3Q7CisgICAgc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVm
ZmVyPiBjcmVhdGVUaWxlSW1hZ2UoY29uc3QgUGF0dGVybkF0dHJpYnV0ZXMmLCBjb25zdCBGbG9h
dFJlY3QmIHRpbGVCb3VuZGFyaWVzLCBjb25zdCBGbG9hdFJlY3QmIGFic29sdXRlVGlsZUJvdW5k
YXJpZXMsIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgdGlsZUltYWdlVHJhbnNmb3JtKSBjb25zdDsK
IAogICAgIFBhdHRlcm5EYXRhKiBidWlsZFBhdHRlcm4oUmVuZGVyRWxlbWVudCYsIHVuc2lnbmVk
IHNob3J0IHJlc291cmNlTW9kZSk7CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9z
dmcvU1ZHUmVuZGVyaW5nQ29udGV4dC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL3N2Zy9TVkdSZW5kZXJpbmdDb250ZXh0LmNwcAkocmV2aXNpb24gMTgzMzk5KQor
KysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdSZW5kZXJpbmdDb250ZXh0LmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMzksOCArMzksNiBAQAogI2luY2x1ZGUgIlNWR1Jlc291cmNlcy5o
IgogI2luY2x1ZGUgIlNWR1Jlc291cmNlc0NhY2hlLmgiCiAKLXN0YXRpYyBpbnQga01heEltYWdl
QnVmZmVyU2l6ZSA9IDQwOTY7Ci0KIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogc3RhdGljIGlubGlu
ZSBib29sIGlzUmVuZGVyaW5nTWFza0ltYWdlKGNvbnN0IFJlbmRlck9iamVjdCYgb2JqZWN0KQpA
QCAtMjM5LDUxICsyMzcsMzAgQEAgdm9pZCBTVkdSZW5kZXJpbmdDb250ZXh0OjpjYWxjdWxhdGVU
cmFucwogICAgIGFic29sdXRlVHJhbnNmb3JtLnNjYWxlKGRldmljZVNjYWxlRmFjdG9yKTsKIH0K
IAotYm9vbCBTVkdSZW5kZXJpbmdDb250ZXh0OjpjcmVhdGVJbWFnZUJ1ZmZlcihjb25zdCBGbG9h
dFJlY3QmIHRhcmdldFJlY3QsIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgYWJzb2x1dGVUcmFuc2Zv
cm0sIHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlcj4mIGltYWdlQnVmZmVyLCBDb2xvclNwYWNl
IGNvbG9yU3BhY2UsIFJlbmRlcmluZ01vZGUgcmVuZGVyaW5nTW9kZSkKK3N0ZDo6dW5pcXVlX3B0
cjxJbWFnZUJ1ZmZlcj4gU1ZHUmVuZGVyaW5nQ29udGV4dDo6Y3JlYXRlSW1hZ2VCdWZmZXIoY29u
c3QgRmxvYXRTaXplJiBpbWFnZVNpemUsIENvbG9yU3BhY2UgY29sb3JTcGFjZSwgUmVuZGVyaW5n
TW9kZSByZW5kZXJpbmdNb2RlKQogewotICAgIEludFJlY3QgcGFpbnRSZWN0ID0gY2FsY3VsYXRl
SW1hZ2VCdWZmZXJSZWN0KHRhcmdldFJlY3QsIGFic29sdXRlVHJhbnNmb3JtKTsKICAgICAvLyBE
b24ndCBjcmVhdGUgZW1wdHkgSW1hZ2VCdWZmZXJzLgotICAgIGlmIChwYWludFJlY3QuaXNFbXB0
eSgpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBJbnRTaXplIGNsYW1wZWRTaXplID0g
Y2xhbXBlZEFic29sdXRlU2l6ZShwYWludFJlY3Quc2l6ZSgpKTsKLSAgICBzdGQ6OnVuaXF1ZV9w
dHI8SW1hZ2VCdWZmZXI+IGltYWdlID0gSW1hZ2VCdWZmZXI6OmNyZWF0ZShjbGFtcGVkU2l6ZSwg
MSwgY29sb3JTcGFjZSwgcmVuZGVyaW5nTW9kZSk7Ci0gICAgaWYgKCFpbWFnZSkKLSAgICAgICAg
cmV0dXJuIGZhbHNlOwotCi0gICAgR3JhcGhpY3NDb250ZXh0KiBpbWFnZUNvbnRleHQgPSBpbWFn
ZS0+Y29udGV4dCgpOwotICAgIEFTU0VSVChpbWFnZUNvbnRleHQpOwotCi0gICAgaW1hZ2VDb250
ZXh0LT5zY2FsZShGbG9hdFNpemUoc3RhdGljX2Nhc3Q8ZmxvYXQ+KGNsYW1wZWRTaXplLndpZHRo
KCkpIC8gcGFpbnRSZWN0LndpZHRoKCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgc3RhdGljX2Nhc3Q8ZmxvYXQ+KGNsYW1wZWRTaXplLmhlaWdodCgpKSAvIHBhaW50UmVjdC5o
ZWlnaHQoKSkpOwotICAgIGltYWdlQ29udGV4dC0+dHJhbnNsYXRlKC1wYWludFJlY3QueCgpLCAt
cGFpbnRSZWN0LnkoKSk7Ci0gICAgaW1hZ2VDb250ZXh0LT5jb25jYXRDVE0oYWJzb2x1dGVUcmFu
c2Zvcm0pOworICAgIGlmIChpbWFnZVNpemUuaXNFbXB0eSgpKQorICAgICAgICByZXR1cm4gbnVs
bHB0cjsKIAotICAgIGltYWdlQnVmZmVyID0gV1RGOjptb3ZlKGltYWdlKTsKLSAgICByZXR1cm4g
dHJ1ZTsKKyAgICByZXR1cm4gSW1hZ2VCdWZmZXI6OmNyZWF0ZShpbWFnZVNpemUsIDEsIGNvbG9y
U3BhY2UsIHJlbmRlcmluZ01vZGUpOwogfQogCi1ib29sIFNWR1JlbmRlcmluZ0NvbnRleHQ6OmNy
ZWF0ZUltYWdlQnVmZmVyRm9yUGF0dGVybihjb25zdCBGbG9hdFJlY3QmIGFic29sdXRlVGFyZ2V0
UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBjbGFtcGVkQWJzb2x1dGVUYXJnZXRSZWN0LCBzdGQ6OnVu
aXF1ZV9wdHI8SW1hZ2VCdWZmZXI+JiBpbWFnZUJ1ZmZlciwgQ29sb3JTcGFjZSBjb2xvclNwYWNl
LCBSZW5kZXJpbmdNb2RlIHJlbmRlcmluZ01vZGUpCitzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZm
ZXI+IFNWR1JlbmRlcmluZ0NvbnRleHQ6OmNyZWF0ZUltYWdlQnVmZmVyKGNvbnN0IEZsb2F0UmVj
dCYgdGFyZ2V0UmVjdCwgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiBhYnNvbHV0ZVRyYW5zZm9ybSwg
Q29sb3JTcGFjZSBjb2xvclNwYWNlLCBSZW5kZXJpbmdNb2RlIHJlbmRlcmluZ01vZGUpCiB7Ci0g
ICAgSW50U2l6ZSBpbWFnZVNpemUocm91bmRlZEludFNpemUoY2xhbXBlZEFic29sdXRlVGFyZ2V0
UmVjdC5zaXplKCkpKTsKLSAgICBJbnRTaXplIHVuY2xhbXBlZEltYWdlU2l6ZShyb3VuZGVkSW50
U2l6ZShhYnNvbHV0ZVRhcmdldFJlY3Quc2l6ZSgpKSk7CisgICAgRmxvYXRSZWN0IHBhaW50UmVj
dCA9IGNhbGN1bGF0ZUltYWdlQnVmZmVyUmVjdCh0YXJnZXRSZWN0LCBhYnNvbHV0ZVRyYW5zZm9y
bSk7CiAKLSAgICAvLyBEb24ndCBjcmVhdGUgZW1wdHkgSW1hZ2VCdWZmZXJzLgotICAgIGlmIChp
bWFnZVNpemUuaXNFbXB0eSgpKQotICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgc3RkOjp1bmlx
dWVfcHRyPEltYWdlQnVmZmVyPiBpbWFnZUJ1ZmZlciA9IFNWR1JlbmRlcmluZ0NvbnRleHQ6OmNy
ZWF0ZUltYWdlQnVmZmVyKHBhaW50UmVjdC5zaXplKCksIGNvbG9yU3BhY2UsIHJlbmRlcmluZ01v
ZGUpOworICAgIGlmICghaW1hZ2VCdWZmZXIpCisgICAgICAgIHJldHVybiBudWxscHRyOwogCi0g
ICAgc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVyPiBpbWFnZSA9IEltYWdlQnVmZmVyOjpjcmVh
dGUoaW1hZ2VTaXplLCAxLCBjb2xvclNwYWNlLCByZW5kZXJpbmdNb2RlKTsKLSAgICBpZiAoIWlt
YWdlKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBHcmFwaGljc0NvbnRleHQqIGltYWdl
Q29udGV4dCA9IGltYWdlLT5jb250ZXh0KCk7CisgICAgR3JhcGhpY3NDb250ZXh0KiBpbWFnZUNv
bnRleHQgPSBpbWFnZUJ1ZmZlci0+Y29udGV4dCgpOwogICAgIEFTU0VSVChpbWFnZUNvbnRleHQp
OwogCi0gICAgLy8gQ29tcGVuc2F0ZSByb3VuZGluZyBlZmZlY3RzLCBhcyB0aGUgYWJzb2x1dGUg
dGFyZ2V0IHJlY3QgaXMgdXNpbmcgZmxvYXRpbmctcG9pbnQgbnVtYmVycyBhbmQgdGhlIGltYWdl
IGJ1ZmZlciBzaXplIGlzIGludGVnZXIuCi0gICAgaW1hZ2VDb250ZXh0LT5zY2FsZShGbG9hdFNp
emUodW5jbGFtcGVkSW1hZ2VTaXplLndpZHRoKCkgLyBhYnNvbHV0ZVRhcmdldFJlY3Qud2lkdGgo
KSwgdW5jbGFtcGVkSW1hZ2VTaXplLmhlaWdodCgpIC8gYWJzb2x1dGVUYXJnZXRSZWN0LmhlaWdo
dCgpKSk7CisgICAgaW1hZ2VDb250ZXh0LT50cmFuc2xhdGUoLXBhaW50UmVjdC54KCksIC1wYWlu
dFJlY3QueSgpKTsKKyAgICBpbWFnZUNvbnRleHQtPmNvbmNhdENUTShhYnNvbHV0ZVRyYW5zZm9y
bSk7CiAKLSAgICBpbWFnZUJ1ZmZlciA9IFdURjo6bW92ZShpbWFnZSk7Ci0gICAgcmV0dXJuIHRy
dWU7CisgICAgcmV0dXJuIGltYWdlQnVmZmVyOwogfQogCiB2b2lkIFNWR1JlbmRlcmluZ0NvbnRl
eHQ6OnJlbmRlclN1YnRyZWVUb0ltYWdlQnVmZmVyKEltYWdlQnVmZmVyKiBpbWFnZSwgUmVuZGVy
RWxlbWVudCYgaXRlbSwgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiBzdWJ0cmVlQ29udGVudFRyYW5z
Zm9ybWF0aW9uKQpAQCAtMzIyLDE4ICsyOTksNiBAQCB2b2lkIFNWR1JlbmRlcmluZ0NvbnRleHQ6
OmNsaXBUb0ltYWdlQnVmCiAgICAgICAgIGltYWdlQnVmZmVyLnJlc2V0KCk7CiB9CiAKLUZsb2F0
UmVjdCBTVkdSZW5kZXJpbmdDb250ZXh0OjpjbGFtcGVkQWJzb2x1dGVUYXJnZXRSZWN0KGNvbnN0
IEZsb2F0UmVjdCYgYWJzb2x1dGVUYXJnZXRSZWN0KQotewotICAgIGNvbnN0IEZsb2F0U2l6ZSBt
YXhJbWFnZUJ1ZmZlclNpemUoa01heEltYWdlQnVmZmVyU2l6ZSwga01heEltYWdlQnVmZmVyU2l6
ZSk7Ci0gICAgcmV0dXJuIEZsb2F0UmVjdChhYnNvbHV0ZVRhcmdldFJlY3QubG9jYXRpb24oKSwg
YWJzb2x1dGVUYXJnZXRSZWN0LnNpemUoKS5zaHJ1bmtUbyhtYXhJbWFnZUJ1ZmZlclNpemUpKTsK
LX0KLQotSW50U2l6ZSBTVkdSZW5kZXJpbmdDb250ZXh0OjpjbGFtcGVkQWJzb2x1dGVTaXplKGNv
bnN0IEludFNpemUmIGFic29sdXRlU2l6ZSkKLXsKLSAgICBjb25zdCBJbnRTaXplIG1heEltYWdl
QnVmZmVyU2l6ZShrTWF4SW1hZ2VCdWZmZXJTaXplLCBrTWF4SW1hZ2VCdWZmZXJTaXplKTsKLSAg
ICByZXR1cm4gYWJzb2x1dGVTaXplLnNocnVua1RvKG1heEltYWdlQnVmZmVyU2l6ZSk7Ci19Ci0K
IHZvaWQgU1ZHUmVuZGVyaW5nQ29udGV4dDo6Y2xlYXIyRFJvdGF0aW9uKEFmZmluZVRyYW5zZm9y
bSYgdHJhbnNmb3JtKQogewogICAgIEFmZmluZVRyYW5zZm9ybTo6RGVjb21wb3NlZFR5cGUgZGVj
b21wb3NpdGlvbjsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHUmVuZGVy
aW5nQ29udGV4dC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcv
U1ZHUmVuZGVyaW5nQ29udGV4dC5oCShyZXZpc2lvbiAxODMzOTkpCisrKyBTb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvc3ZnL1NWR1JlbmRlcmluZ0NvbnRleHQuaAkod29ya2luZyBjb3B5KQpAQCAt
NzEsMTcgKzcxLDE0IEBAIHB1YmxpYzoKICAgICB2b2lkIHByZXBhcmVUb1JlbmRlclNWR0NvbnRl
bnQoUmVuZGVyRWxlbWVudCYsIFBhaW50SW5mbyYsIE5lZWRzR3JhcGhpY3NDb250ZXh0U2F2ZSA9
IERvbnRTYXZlR3JhcGhpY3NDb250ZXh0KTsKICAgICBib29sIGlzUmVuZGVyaW5nUHJlcGFyZWQo
KSBjb25zdCB7IHJldHVybiBtX3JlbmRlcmluZ0ZsYWdzICYgUmVuZGVyaW5nUHJlcGFyZWQ7IH0K
IAotICAgIHN0YXRpYyBib29sIGNyZWF0ZUltYWdlQnVmZmVyKGNvbnN0IEZsb2F0UmVjdCYgcGFp
bnRSZWN0LCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIGFic29sdXRlVHJhbnNmb3JtLCBzdGQ6OnVu
aXF1ZV9wdHI8SW1hZ2VCdWZmZXI+JiwgQ29sb3JTcGFjZSwgUmVuZGVyaW5nTW9kZSk7Ci0gICAg
Ly8gUGF0dGVybnMgbmVlZCBhIGRpZmZlcmVudCBmbG9hdC10by1pbnRlZ2VyIGNvb3JkaW5hdGUg
bWFwcGluZy4KLSAgICBzdGF0aWMgYm9vbCBjcmVhdGVJbWFnZUJ1ZmZlckZvclBhdHRlcm4oY29u
c3QgRmxvYXRSZWN0JiBhYnNvbHV0ZVRhcmdldFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgY2xhbXBl
ZEFic29sdXRlVGFyZ2V0UmVjdCwgc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVyPiYsIENvbG9y
U3BhY2UsIFJlbmRlcmluZ01vZGUpOworICAgIHN0YXRpYyBzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VC
dWZmZXI+IGNyZWF0ZUltYWdlQnVmZmVyKGNvbnN0IEZsb2F0U2l6ZSYgaW1hZ2VTaXplLCBDb2xv
clNwYWNlLCBSZW5kZXJpbmdNb2RlKTsKKyAgICBzdGF0aWMgc3RkOjp1bmlxdWVfcHRyPEltYWdl
QnVmZmVyPiBjcmVhdGVJbWFnZUJ1ZmZlcihjb25zdCBGbG9hdFJlY3QmIHRhcmdldFJlY3QsIGNv
bnN0IEFmZmluZVRyYW5zZm9ybSYgYWJzb2x1dGVUcmFuc2Zvcm0sIENvbG9yU3BhY2UsIFJlbmRl
cmluZ01vZGUpOwogCiAgICAgc3RhdGljIHZvaWQgcmVuZGVyU3VidHJlZVRvSW1hZ2VCdWZmZXIo
SW1hZ2VCdWZmZXIqLCBSZW5kZXJFbGVtZW50JiwgY29uc3QgQWZmaW5lVHJhbnNmb3JtJik7CiAg
ICAgc3RhdGljIHZvaWQgY2xpcFRvSW1hZ2VCdWZmZXIoR3JhcGhpY3NDb250ZXh0KiwgY29uc3Qg
QWZmaW5lVHJhbnNmb3JtJiBhYnNvbHV0ZVRyYW5zZm9ybSwgY29uc3QgRmxvYXRSZWN0JiB0YXJn
ZXRSZWN0LCBzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXI+JiwgYm9vbCBzYWZlVG9DbGVhcik7
CiAKICAgICBzdGF0aWMgZmxvYXQgY2FsY3VsYXRlU2NyZWVuRm9udFNpemVTY2FsaW5nRmFjdG9y
KGNvbnN0IFJlbmRlck9iamVjdCYpOwogICAgIHN0YXRpYyB2b2lkIGNhbGN1bGF0ZVRyYW5zZm9y
bWF0aW9uVG9PdXRlcm1vc3RDb29yZGluYXRlU3lzdGVtKGNvbnN0IFJlbmRlck9iamVjdCYsIEFm
ZmluZVRyYW5zZm9ybSYgYWJzb2x1dGVUcmFuc2Zvcm0pOwotICAgIHN0YXRpYyBJbnRTaXplIGNs
YW1wZWRBYnNvbHV0ZVNpemUoY29uc3QgSW50U2l6ZSYpOwotICAgIHN0YXRpYyBGbG9hdFJlY3Qg
Y2xhbXBlZEFic29sdXRlVGFyZ2V0UmVjdChjb25zdCBGbG9hdFJlY3QmIGFic29sdXRlVGFyZ2V0
UmVjdCk7CiAgICAgc3RhdGljIHZvaWQgY2xlYXIyRFJvdGF0aW9uKEFmZmluZVRyYW5zZm9ybSYp
OwogCiAgICAgc3RhdGljIEludFJlY3QgY2FsY3VsYXRlSW1hZ2VCdWZmZXJSZWN0KGNvbnN0IEZs
b2F0UmVjdCYgdGFyZ2V0UmVjdCwgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiBhYnNvbHV0ZVRyYW5z
Zm9ybSkKSW5kZXg6IExheW91dFRlc3RzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRU
ZXN0cy9DaGFuZ2VMb2cJKHJldmlzaW9uIDE4MzcwNSkKKysrIExheW91dFRlc3RzL0NoYW5nZUxv
Zwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE1IEBACisyMDE1LTA1LTAxICBTYWlkIEFib3Ut
SGFsbGF3YSAgPHNhYm91aGFsbGF3YUBhcHBsZS5jb20+CisKKyAgICAgICAgQXBwbHlpbmcgYSBm
aWx0ZXIgb24gYW4gU1ZHIGVsZW1lbnQsIHdoaWNoIGlzIGxhcmdlciB0aGFuIDQwOTYgcGl4ZWxz
LCBjYXVzZXMgdGhpcyBlbGVtZW50IHRvIGJlIHJlbmRlcmVkIHNoaWZ0ZWQgdG8gdGhlIGxlZnQK
KyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE0NDMzNQor
CisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogc3ZnL2Zp
bHRlcnMvYmlnLXNpemVkLW9mZi12aWV3cG9ydC1maWx0ZXItZXhwZWN0ZWQuc3ZnOiBBZGRlZC4K
KyAgICAgICAgKiBzdmcvZmlsdGVycy9iaWctc2l6ZWQtb2ZmLXZpZXdwb3J0LWZpbHRlci5zdmc6
IEFkZGVkLgorICAgICAgICBFbnN1cmUgd2hlbiBhcHBseWluZyBhIGZpbHRlciBvbiBhIGxhcmdl
IFNWRyBlbGVtZW50LCB0aGUgdmlld3BvcnQgb2YgdGhlCisgICAgICAgIFNWRyBpbmNsdWRlcyB0
aGUgY29ycmVjdCBkcmF3aW5nIG9mIHRoaXMgZWxlbWVudC4KKwogMjAxNS0wNS0wMSAgRXJpYyBD
YXJsc29uICA8ZXJpYy5jYXJsc29uQGFwcGxlLmNvbT4KIAogICAgICAgICBQb3N0cG9uZSBjYXB0
aW9uIHN0eWxlIHNoZWV0IGNyZWF0aW9uCkluZGV4OiBMYXlvdXRUZXN0cy9zdmcvZmlsdGVycy9i
aWctc2l6ZWQtb2ZmLXZpZXdwb3J0LWZpbHRlci1leHBlY3RlZC5zdmcKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
TGF5b3V0VGVzdHMvc3ZnL2ZpbHRlcnMvYmlnLXNpemVkLW9mZi12aWV3cG9ydC1maWx0ZXItZXhw
ZWN0ZWQuc3ZnCShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvc3ZnL2ZpbHRlcnMvYmlnLXNp
emVkLW9mZi12aWV3cG9ydC1maWx0ZXItZXhwZWN0ZWQuc3ZnCSh3b3JraW5nIGNvcHkpCkBAIC0w
LDAgKzEsOSBAQAorPHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdC
b3g9IjAgMCAxMDAwIDUwMCI+CisgIDxmaWx0ZXIgaWQ9InNhdHVyYXRlLWJhY2siPgorICAgIDxm
ZUNvbG9yTWF0cml4IGluPSJTb3VyY2VHcmFwaGljIiB0eXBlPSJzYXR1cmF0ZSIgdmFsdWVzPSIx
Ii8+CisgIDwvZmlsdGVyPgorICA8ZyBmaWx0ZXI9InVybCgjc2F0dXJhdGUtYmFjaykiPgorICAg
IDxyZWN0IHg9Ii01MDAiIHk9IjAiIHdpZHRoPSI5NTAiIGhlaWdodD0iMTAwJSIgZmlsbD0iZ3Jl
ZW4iLz4KKyAgICA8cmVjdCB4PSI1NTAiIHk9IjAiIHdpZHRoPSI5NTAiIGhlaWdodD0iMTAwJSIg
ZmlsbD0iZ3JlZW4iLz4KKyAgPC9nPgorPC9zdmc+CkluZGV4OiBMYXlvdXRUZXN0cy9zdmcvZmls
dGVycy9iaWctc2l6ZWQtb2ZmLXZpZXdwb3J0LWZpbHRlci5zdmcKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5
b3V0VGVzdHMvc3ZnL2ZpbHRlcnMvYmlnLXNpemVkLW9mZi12aWV3cG9ydC1maWx0ZXIuc3ZnCShy
ZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvc3ZnL2ZpbHRlcnMvYmlnLXNpemVkLW9mZi12aWV3
cG9ydC1maWx0ZXIuc3ZnCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsOSBAQAorPHN2ZyB4bWxu
cz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAxMDAwIDUwMCI+Cisg
IDxmaWx0ZXIgaWQ9InNhdHVyYXRlLWJhY2siPgorICAgIDxmZUNvbG9yTWF0cml4IGluPSJTb3Vy
Y2VHcmFwaGljIiB0eXBlPSJzYXR1cmF0ZSIgdmFsdWVzPSIxIi8+CisgIDwvZmlsdGVyPgorICA8
ZyBmaWx0ZXI9InVybCgjc2F0dXJhdGUtYmFjaykiPgorICAgIDxyZWN0IHg9Ii0zNTAwIiB5PSIw
IiB3aWR0aD0iMzk1MCIgaGVpZ2h0PSIxMDAlIiBmaWxsPSJncmVlbiIvPgorICAgIDxyZWN0IHg9
IjU1MCIgeT0iMCIgd2lkdGg9IjM5NTAiIGhlaWdodD0iMTAwJSIgZmlsbD0iZ3JlZW4iLz4KKyAg
PC9nPgorPC9zdmc+Cg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="0"
              isprivate="0"
          >
            <attachid>252317</attachid>
            <date>2015-05-04 10:03:06 -0700</date>
            <delta_ts>2015-05-04 10:03:06 -0700</delta_ts>
            <desc>95197-correct-fix</desc>
            <filename>95197-correct-fix.patch</filename>
            <type>application/octet-stream</type>
            <size>14138</size>
            <attacher name="Said Abou-Hallawa">sabouhallawa</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VDbGlw
cGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRl
clNWR1Jlc291cmNlQ2xpcHBlci5jcHAJKHJldmlzaW9uIDE4MzM5OSkKKysrIFNvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VDbGlwcGVyLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMTM4LDExICsxMzgsMTQgQEAgYm9vbCBSZW5kZXJTVkdSZXNvdXJjZUNsaXBwZXI6
OmFwcGx5Q2xpcAogICAgIGlmIChzaG91bGRDcmVhdGVDbGlwcGVyTWFza0ltYWdlICYmIHBhdGhP
bmx5Q2xpcHBpbmcoY29udGV4dCwgYW5pbWF0ZWRMb2NhbFRyYW5zZm9ybSwgb2JqZWN0Qm91bmRp
bmdCb3gpKQogICAgICAgICByZXR1cm4gdHJ1ZTsKIAotICAgIEFmZmluZVRyYW5zZm9ybSBhYnNv
bHV0ZVRyYW5zZm9ybTsKKyAgICBBZmZpbmVUcmFuc2Zvcm0gYWJzb2x1dGVUcmFuc2Zvcm0sIGNs
YW1wVHJhbnNmb3JtOwogICAgIFNWR1JlbmRlcmluZ0NvbnRleHQ6OmNhbGN1bGF0ZVRyYW5zZm9y
bWF0aW9uVG9PdXRlcm1vc3RDb29yZGluYXRlU3lzdGVtKHJlbmRlcmVyLCBhYnNvbHV0ZVRyYW5z
Zm9ybSk7CiAKKyAgICBJbnRSZWN0IHBhaW50UmVjdDsKKyAgICBTVkdSZW5kZXJpbmdDb250ZXh0
OjpjYWxjdWxhdGVJbWFnZUNsYW1wVHJhbnNmb3JtYXRpb24ocmVwYWludFJlY3QsIGFic29sdXRl
VHJhbnNmb3JtLCBjbGFtcFRyYW5zZm9ybSwgcGFpbnRSZWN0KTsKKwogICAgIGlmIChzaG91bGRD
cmVhdGVDbGlwcGVyTWFza0ltYWdlICYmICFyZXBhaW50UmVjdC5pc0VtcHR5KCkpIHsKLSAgICAg
ICAgaWYgKCFTVkdSZW5kZXJpbmdDb250ZXh0OjpjcmVhdGVJbWFnZUJ1ZmZlcihyZXBhaW50UmVj
dCwgYWJzb2x1dGVUcmFuc2Zvcm0sIGNsaXBwZXJNYXNrSW1hZ2UsIENvbG9yU3BhY2VEZXZpY2VS
R0IsIFVuYWNjZWxlcmF0ZWQpKQorICAgICAgICBpZiAoIVNWR1JlbmRlcmluZ0NvbnRleHQ6OmNy
ZWF0ZUltYWdlQnVmZmVyKHBhaW50UmVjdCwgYWJzb2x1dGVUcmFuc2Zvcm0sIGNsYW1wVHJhbnNm
b3JtLCBjbGlwcGVyTWFza0ltYWdlLCBDb2xvclNwYWNlRGV2aWNlUkdCLCBVbmFjY2VsZXJhdGVk
KSkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgICAgICBHcmFwaGljc0NvbnRleHQq
IG1hc2tDb250ZXh0ID0gY2xpcHBlck1hc2tJbWFnZS0+Y29udGV4dCgpOwpAQCAtMTcyLDcgKzE3
NSw3IEBAIGJvb2wgUmVuZGVyU1ZHUmVzb3VyY2VDbGlwcGVyOjphcHBseUNsaXAKICAgICBpZiAo
IWNsaXBwZXJNYXNrSW1hZ2UpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIFNWR1JlbmRl
cmluZ0NvbnRleHQ6OmNsaXBUb0ltYWdlQnVmZmVyKGNvbnRleHQsIGFic29sdXRlVHJhbnNmb3Jt
LCByZXBhaW50UmVjdCwgY2xpcHBlck1hc2tJbWFnZSwgc2hvdWxkQ3JlYXRlQ2xpcHBlck1hc2tJ
bWFnZSk7CisgICAgU1ZHUmVuZGVyaW5nQ29udGV4dDo6Y2xpcFRvSW1hZ2VCdWZmZXIoY29udGV4
dCwgYWJzb2x1dGVUcmFuc2Zvcm0sIGNsYW1wVHJhbnNmb3JtLCByZXBhaW50UmVjdCwgY2xpcHBl
ck1hc2tJbWFnZSwgc2hvdWxkQ3JlYXRlQ2xpcHBlck1hc2tJbWFnZSk7CiAgICAgcmV0dXJuIHRy
dWU7CiB9CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVz
b3VyY2VGaWx0ZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9z
dmcvUmVuZGVyU1ZHUmVzb3VyY2VGaWx0ZXIuY3BwCShyZXZpc2lvbiAxODMzOTkpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291cmNlRmlsdGVyLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMjAzLDcgKzIwMywxMSBAQCBib29sIFJlbmRlclNWR1Jlc291cmNlRmls
dGVyOjphcHBseVJlc291CiAKICAgICBzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXI+IHNvdXJj
ZUdyYXBoaWM7CiAgICAgUmVuZGVyaW5nTW9kZSByZW5kZXJpbmdNb2RlID0gcmVuZGVyZXIuZnJh
bWUoKS5zZXR0aW5ncygpLmFjY2VsZXJhdGVkRmlsdGVyc0VuYWJsZWQoKSA/IEFjY2VsZXJhdGVk
IDogVW5hY2NlbGVyYXRlZDsKLSAgICBpZiAoIVNWR1JlbmRlcmluZ0NvbnRleHQ6OmNyZWF0ZUlt
YWdlQnVmZmVyKGZpbHRlckRhdGEtPmRyYXdpbmdSZWdpb24sIGVmZmVjdGl2ZVRyYW5zZm9ybSwg
c291cmNlR3JhcGhpYywgQ29sb3JTcGFjZUxpbmVhclJHQiwgcmVuZGVyaW5nTW9kZSkpIHsKKwor
ICAgIEludFJlY3QgcGFpbnRSZWN0OworICAgIFNWR1JlbmRlcmluZ0NvbnRleHQ6OmNhbGN1bGF0
ZUltYWdlQ2xhbXBUcmFuc2Zvcm1hdGlvbihmaWx0ZXJEYXRhLT5kcmF3aW5nUmVnaW9uLCBlZmZl
Y3RpdmVUcmFuc2Zvcm0sIGZpbHRlckRhdGEtPmNsYW1wVHJhbnNmb3JtLCBwYWludFJlY3QpOwor
CisgICAgaWYgKCFTVkdSZW5kZXJpbmdDb250ZXh0OjpjcmVhdGVJbWFnZUJ1ZmZlcihwYWludFJl
Y3QsIGVmZmVjdGl2ZVRyYW5zZm9ybSwgZmlsdGVyRGF0YS0+Y2xhbXBUcmFuc2Zvcm0sIHNvdXJj
ZUdyYXBoaWMsIENvbG9yU3BhY2VMaW5lYXJSR0IsIHJlbmRlcmluZ01vZGUpKSB7CiAgICAgICAg
IEFTU0VSVCghbV9maWx0ZXIuY29udGFpbnMoJnJlbmRlcmVyKSk7CiAgICAgICAgIGZpbHRlckRh
dGEtPnNhdmVkQ29udGV4dCA9IGNvbnRleHQ7CiAgICAgICAgIG1fZmlsdGVyLnNldCgmcmVuZGVy
ZXIsIFdURjo6bW92ZShmaWx0ZXJEYXRhKSk7CkBAIC0yODMsMTMgKzI4NywxNCBAQCB2b2lkIFJl
bmRlclNWR1Jlc291cmNlRmlsdGVyOjpwb3N0QXBwbHlSCiAKICAgICAgICAgSW1hZ2VCdWZmZXIq
IHJlc3VsdEltYWdlID0gbGFzdEVmZmVjdC0+YXNJbWFnZUJ1ZmZlcigpOwogICAgICAgICBpZiAo
cmVzdWx0SW1hZ2UpIHsKLSAgICAgICAgICAgIGNvbnRleHQtPmNvbmNhdENUTShmaWx0ZXJEYXRh
LT5zaGVhckZyZWVBYnNvbHV0ZVRyYW5zZm9ybS5pbnZlcnNlKCkpOworICAgICAgICAgICAgQWZm
aW5lVHJhbnNmb3JtIHRyYW5zZm9ybSA9IGZpbHRlckRhdGEtPnNoZWFyRnJlZUFic29sdXRlVHJh
bnNmb3JtICogZmlsdGVyRGF0YS0+Y2xhbXBUcmFuc2Zvcm07CisgICAgICAgICAgICBjb250ZXh0
LT5jb25jYXRDVE0odHJhbnNmb3JtLmludmVyc2UoKSk7CiAKICAgICAgICAgICAgIGNvbnRleHQt
PnNjYWxlKEZsb2F0U2l6ZSgxIC8gZmlsdGVyRGF0YS0+ZmlsdGVyLT5maWx0ZXJSZXNvbHV0aW9u
KCkud2lkdGgoKSwgMSAvIGZpbHRlckRhdGEtPmZpbHRlci0+ZmlsdGVyUmVzb2x1dGlvbigpLmhl
aWdodCgpKSk7CiAgICAgICAgICAgICBjb250ZXh0LT5kcmF3SW1hZ2VCdWZmZXIocmVzdWx0SW1h
Z2UsIHJlbmRlcmVyLnN0eWxlKCkuY29sb3JTcGFjZSgpLCBsYXN0RWZmZWN0LT5hYnNvbHV0ZVBh
aW50UmVjdCgpKTsKICAgICAgICAgICAgIGNvbnRleHQtPnNjYWxlKGZpbHRlckRhdGEtPmZpbHRl
ci0+ZmlsdGVyUmVzb2x1dGlvbigpKTsKIAotICAgICAgICAgICAgY29udGV4dC0+Y29uY2F0Q1RN
KGZpbHRlckRhdGEtPnNoZWFyRnJlZUFic29sdXRlVHJhbnNmb3JtKTsKKyAgICAgICAgICAgIGNv
bnRleHQtPmNvbmNhdENUTSh0cmFuc2Zvcm0pOwogICAgICAgICB9CiAgICAgfQogICAgIGZpbHRl
ckRhdGEtPnNvdXJjZUdyYXBoaWNCdWZmZXIucmVzZXQoKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VGaWx0ZXIuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291cmNlRmlsdGVyLmgJKHJl
dmlzaW9uIDE4MzM5OSkKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZH
UmVzb3VyY2VGaWx0ZXIuaAkod29ya2luZyBjb3B5KQpAQCAtNTIsNiArNTIsNyBAQCBwdWJsaWM6
CiAgICAgc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVyPiBzb3VyY2VHcmFwaGljQnVmZmVyOwog
ICAgIEdyYXBoaWNzQ29udGV4dCogc2F2ZWRDb250ZXh0OwogICAgIEFmZmluZVRyYW5zZm9ybSBz
aGVhckZyZWVBYnNvbHV0ZVRyYW5zZm9ybTsKKyAgICBBZmZpbmVUcmFuc2Zvcm0gY2xhbXBUcmFu
c2Zvcm07CiAgICAgRmxvYXRSZWN0IGJvdW5kYXJpZXM7CiAgICAgRmxvYXRSZWN0IGRyYXdpbmdS
ZWdpb247CiAgICAgRmxvYXRTaXplIHNjYWxlOwpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJjZUdyYWRpZW50LmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291cmNlR3JhZGllbnQuY3BwCShy
ZXZpc2lvbiAxODMzOTkpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNW
R1Jlc291cmNlR3JhZGllbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02Miw4ICs2MiwxMyBAQCBz
dGF0aWMgaW5saW5lIGJvb2wgY3JlYXRlTWFza0FuZFN3YXBDb250CiAgICAgU1ZHUmVuZGVyaW5n
Q29udGV4dDo6Y2FsY3VsYXRlVHJhbnNmb3JtYXRpb25Ub091dGVybW9zdENvb3JkaW5hdGVTeXN0
ZW0oKnRleHRSb290QmxvY2ssIGFic29sdXRlVHJhbnNmb3JtKTsKIAogICAgIEZsb2F0UmVjdCBy
ZXBhaW50UmVjdCA9IHRleHRSb290QmxvY2stPnJlcGFpbnRSZWN0SW5Mb2NhbENvb3JkaW5hdGVz
KCk7CisgICAgCisgICAgSW50UmVjdCBwYWludFJlY3Q7CisgICAgQWZmaW5lVHJhbnNmb3JtIGNs
YW1wVHJhbnNmb3JtOworICAgIFNWR1JlbmRlcmluZ0NvbnRleHQ6OmNhbGN1bGF0ZUltYWdlQ2xh
bXBUcmFuc2Zvcm1hdGlvbihyZXBhaW50UmVjdCwgYWJzb2x1dGVUcmFuc2Zvcm0sIGNsYW1wVHJh
bnNmb3JtLCBwYWludFJlY3QpOworCiAgICAgc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVyPiBt
YXNrSW1hZ2U7Ci0gICAgaWYgKCFTVkdSZW5kZXJpbmdDb250ZXh0OjpjcmVhdGVJbWFnZUJ1ZmZl
cihyZXBhaW50UmVjdCwgYWJzb2x1dGVUcmFuc2Zvcm0sIG1hc2tJbWFnZSwgQ29sb3JTcGFjZURl
dmljZVJHQiwgVW5hY2NlbGVyYXRlZCkpCisgICAgaWYgKCFTVkdSZW5kZXJpbmdDb250ZXh0Ojpj
cmVhdGVJbWFnZUJ1ZmZlcihwYWludFJlY3QsIGFic29sdXRlVHJhbnNmb3JtLCBjbGFtcFRyYW5z
Zm9ybSwgbWFza0ltYWdlLCBDb2xvclNwYWNlRGV2aWNlUkdCLCBVbmFjY2VsZXJhdGVkKSkKICAg
ICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgR3JhcGhpY3NDb250ZXh0KiBtYXNrSW1hZ2VDb250
ZXh0ID0gbWFza0ltYWdlLT5jb250ZXh0KCk7CkBAIC04NCw3ICs4OSw3IEBAIHN0YXRpYyBpbmxp
bmUgQWZmaW5lVHJhbnNmb3JtIGNsaXBUb1RleHQKICAgICBTVkdSZW5kZXJpbmdDb250ZXh0Ojpj
YWxjdWxhdGVUcmFuc2Zvcm1hdGlvblRvT3V0ZXJtb3N0Q29vcmRpbmF0ZVN5c3RlbSgqdGV4dFJv
b3RCbG9jaywgYWJzb2x1dGVUcmFuc2Zvcm0pOwogCiAgICAgdGFyZ2V0UmVjdCA9IHRleHRSb290
QmxvY2stPnJlcGFpbnRSZWN0SW5Mb2NhbENvb3JkaW5hdGVzKCk7Ci0gICAgU1ZHUmVuZGVyaW5n
Q29udGV4dDo6Y2xpcFRvSW1hZ2VCdWZmZXIoY29udGV4dCwgYWJzb2x1dGVUcmFuc2Zvcm0sIHRh
cmdldFJlY3QsIGltYWdlQnVmZmVyLCBmYWxzZSk7CisgICAgU1ZHUmVuZGVyaW5nQ29udGV4dDo6
Y2xpcFRvSW1hZ2VCdWZmZXIoY29udGV4dCwgYWJzb2x1dGVUcmFuc2Zvcm0sIEFmZmluZVRyYW5z
Zm9ybSgpLCB0YXJnZXRSZWN0LCBpbWFnZUJ1ZmZlciwgZmFsc2UpOwogCiAgICAgQWZmaW5lVHJh
bnNmb3JtIG1hdHJpeDsKICAgICBpZiAoYm91bmRpbmdCb3hNb2RlKSB7CkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291cmNlTWFza2VyLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291cmNlTWFz
a2VyLmNwcAkocmV2aXNpb24gMTgzMzk5KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2
Zy9SZW5kZXJTVkdSZXNvdXJjZU1hc2tlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTYzLDE2ICs2
MywxOSBAQCBib29sIFJlbmRlclNWR1Jlc291cmNlTWFza2VyOjphcHBseVNWR01hCiAgICAgICAg
IG1fbWFza2VyLnNldCgmcmVuZGVyZXIsIHN0ZDo6bWFrZV91bmlxdWU8TWFza2VyRGF0YT4oKSk7
CiAKICAgICBNYXNrZXJEYXRhKiBtYXNrZXJEYXRhID0gbV9tYXNrZXIuZ2V0KCZyZW5kZXJlcik7
CisgICAgRmxvYXRSZWN0IHJlcGFpbnRSZWN0ID0gcmVuZGVyZXIucmVwYWludFJlY3RJbkxvY2Fs
Q29vcmRpbmF0ZXMoKTsKIAogICAgIEFmZmluZVRyYW5zZm9ybSBhYnNvbHV0ZVRyYW5zZm9ybTsK
ICAgICBTVkdSZW5kZXJpbmdDb250ZXh0OjpjYWxjdWxhdGVUcmFuc2Zvcm1hdGlvblRvT3V0ZXJt
b3N0Q29vcmRpbmF0ZVN5c3RlbShyZW5kZXJlciwgYWJzb2x1dGVUcmFuc2Zvcm0pOwogCi0gICAg
RmxvYXRSZWN0IHJlcGFpbnRSZWN0ID0gcmVuZGVyZXIucmVwYWludFJlY3RJbkxvY2FsQ29vcmRp
bmF0ZXMoKTsKKyAgICBBZmZpbmVUcmFuc2Zvcm0gY2xhbXBUcmFuc2Zvcm07CisgICAgSW50UmVj
dCBwYWludFJlY3Q7CisgICAgU1ZHUmVuZGVyaW5nQ29udGV4dDo6Y2FsY3VsYXRlSW1hZ2VDbGFt
cFRyYW5zZm9ybWF0aW9uKHJlcGFpbnRSZWN0LCBhYnNvbHV0ZVRyYW5zZm9ybSwgY2xhbXBUcmFu
c2Zvcm0sIHBhaW50UmVjdCk7CiAKICAgICBpZiAoIW1hc2tlckRhdGEtPm1hc2tJbWFnZSAmJiAh
cmVwYWludFJlY3QuaXNFbXB0eSgpKSB7CiAgICAgICAgIGNvbnN0IFNWR1JlbmRlclN0eWxlJiBz
dmdTdHlsZSA9IHN0eWxlKCkuc3ZnU3R5bGUoKTsKICAgICAgICAgQ29sb3JTcGFjZSBjb2xvclNw
YWNlID0gc3ZnU3R5bGUuY29sb3JJbnRlcnBvbGF0aW9uKCkgPT0gQ0lfTElORUFSUkdCID8gQ29s
b3JTcGFjZUxpbmVhclJHQiA6IENvbG9yU3BhY2VEZXZpY2VSR0I7Ci0gICAgICAgIGlmICghU1ZH
UmVuZGVyaW5nQ29udGV4dDo6Y3JlYXRlSW1hZ2VCdWZmZXIocmVwYWludFJlY3QsIGFic29sdXRl
VHJhbnNmb3JtLCBtYXNrZXJEYXRhLT5tYXNrSW1hZ2UsIGNvbG9yU3BhY2UsIFVuYWNjZWxlcmF0
ZWQpKQorICAgICAgICBpZiAoIVNWR1JlbmRlcmluZ0NvbnRleHQ6OmNyZWF0ZUltYWdlQnVmZmVy
KHBhaW50UmVjdCwgYWJzb2x1dGVUcmFuc2Zvcm0sIGNsYW1wVHJhbnNmb3JtLCBtYXNrZXJEYXRh
LT5tYXNrSW1hZ2UsIGNvbG9yU3BhY2UsIFVuYWNjZWxlcmF0ZWQpKQogICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOwogCiAgICAgICAgIGlmICghZHJhd0NvbnRlbnRJbnRvTWFza0ltYWdlKG1hc2tl
ckRhdGEsIGNvbG9yU3BhY2UsICZyZW5kZXJlcikpCkBAIC04Myw3ICs4Niw3IEBAIGJvb2wgUmVu
ZGVyU1ZHUmVzb3VyY2VNYXNrZXI6OmFwcGx5U1ZHTWEKICAgICAgICAgcmV0dXJuIGZhbHNlOwog
CiAgICAgaWYgKGFwcGx5Q2xpcCkKLSAgICAgICAgU1ZHUmVuZGVyaW5nQ29udGV4dDo6Y2xpcFRv
SW1hZ2VCdWZmZXIoY29udGV4dCwgYWJzb2x1dGVUcmFuc2Zvcm0sIHJlcGFpbnRSZWN0LCBtYXNr
ZXJEYXRhLT5tYXNrSW1hZ2UsIG1pc3NpbmdNYXNrZXJEYXRhKTsKKyAgICAgICAgU1ZHUmVuZGVy
aW5nQ29udGV4dDo6Y2xpcFRvSW1hZ2VCdWZmZXIoY29udGV4dCwgYWJzb2x1dGVUcmFuc2Zvcm0s
IGNsYW1wVHJhbnNmb3JtLCByZXBhaW50UmVjdCwgbWFza2VyRGF0YS0+bWFza0ltYWdlLCBtaXNz
aW5nTWFza2VyRGF0YSk7CiAKICAgICByZXR1cm4gdHJ1ZTsKIH0KSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9zdmcvU1ZHUmVuZGVyaW5nQ29udGV4dC5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdSZW5kZXJpbmdDb250ZXh0LmNwcAkocmV2
aXNpb24gMTgzMzk5KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdSZW5kZXJp
bmdDb250ZXh0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjM5LDE0ICsyMzksMjYgQEAgdm9pZCBT
VkdSZW5kZXJpbmdDb250ZXh0OjpjYWxjdWxhdGVUcmFucwogICAgIGFic29sdXRlVHJhbnNmb3Jt
LnNjYWxlKGRldmljZVNjYWxlRmFjdG9yKTsKIH0KIAotYm9vbCBTVkdSZW5kZXJpbmdDb250ZXh0
OjpjcmVhdGVJbWFnZUJ1ZmZlcihjb25zdCBGbG9hdFJlY3QmIHRhcmdldFJlY3QsIGNvbnN0IEFm
ZmluZVRyYW5zZm9ybSYgYWJzb2x1dGVUcmFuc2Zvcm0sIHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1
ZmZlcj4mIGltYWdlQnVmZmVyLCBDb2xvclNwYWNlIGNvbG9yU3BhY2UsIFJlbmRlcmluZ01vZGUg
cmVuZGVyaW5nTW9kZSkKK3ZvaWQgU1ZHUmVuZGVyaW5nQ29udGV4dDo6Y2FsY3VsYXRlSW1hZ2VD
bGFtcFRyYW5zZm9ybWF0aW9uKGNvbnN0IEZsb2F0UmVjdCYgdGFyZ2V0UmVjdCwgY29uc3QgQWZm
aW5lVHJhbnNmb3JtJiBhYnNvbHV0ZVRyYW5zZm9ybSwgQWZmaW5lVHJhbnNmb3JtJiBjbGFtcFRy
YW5zZm9ybSwgSW50UmVjdCYgcGFpbnRSZWN0KQoreworICAgIHBhaW50UmVjdCA9IGNhbGN1bGF0
ZUltYWdlQnVmZmVyUmVjdCh0YXJnZXRSZWN0LCBhYnNvbHV0ZVRyYW5zZm9ybSk7CisgICAgaWYg
KHBhaW50UmVjdC5pc0VtcHR5KCkpCisgICAgICAgIHJldHVybjsKKworICAgIEludFNpemUgY2xh
bXBlZFNpemUgPSBjbGFtcGVkQWJzb2x1dGVTaXplKHBhaW50UmVjdC5zaXplKCkpOworCisgICAg
ZmxvYXQgeCA9IHN0YXRpY19jYXN0PGZsb2F0PihjbGFtcGVkU2l6ZS53aWR0aCgpKSAvIHBhaW50
UmVjdC53aWR0aCgpOworICAgIGZsb2F0IHkgPSBzdGF0aWNfY2FzdDxmbG9hdD4oY2xhbXBlZFNp
emUuaGVpZ2h0KCkpIC8gcGFpbnRSZWN0LmhlaWdodCgpOworICAgIGNsYW1wVHJhbnNmb3JtID0g
QWZmaW5lVHJhbnNmb3JtKCkuc2NhbGUoeCwgeSk7Cit9CisKK2Jvb2wgU1ZHUmVuZGVyaW5nQ29u
dGV4dDo6Y3JlYXRlSW1hZ2VCdWZmZXIoY29uc3QgSW50UmVjdCYgcGFpbnRSZWN0LCBjb25zdCBB
ZmZpbmVUcmFuc2Zvcm0mIGFic29sdXRlVHJhbnNmb3JtLCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0m
IGNsYW1wVHJhbnNmb3JtLCBzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXI+JiBpbWFnZUJ1ZmZl
ciwgQ29sb3JTcGFjZSBjb2xvclNwYWNlLCBSZW5kZXJpbmdNb2RlIHJlbmRlcmluZ01vZGUpCiB7
Ci0gICAgSW50UmVjdCBwYWludFJlY3QgPSBjYWxjdWxhdGVJbWFnZUJ1ZmZlclJlY3QodGFyZ2V0
UmVjdCwgYWJzb2x1dGVUcmFuc2Zvcm0pOwogICAgIC8vIERvbid0IGNyZWF0ZSBlbXB0eSBJbWFn
ZUJ1ZmZlcnMuCiAgICAgaWYgKHBhaW50UmVjdC5pc0VtcHR5KCkpCiAgICAgICAgIHJldHVybiBm
YWxzZTsKIAotICAgIEludFNpemUgY2xhbXBlZFNpemUgPSBjbGFtcGVkQWJzb2x1dGVTaXplKHBh
aW50UmVjdC5zaXplKCkpOworICAgIEludFNpemUgY2xhbXBlZFNpemUgPSBjYWxjdWxhdGVJbWFn
ZUJ1ZmZlclJlY3QocGFpbnRSZWN0LCBjbGFtcFRyYW5zZm9ybSkuc2l6ZSgpOwogICAgIHN0ZDo6
dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlcj4gaW1hZ2UgPSBJbWFnZUJ1ZmZlcjo6Y3JlYXRlKGNsYW1w
ZWRTaXplLCAxLCBjb2xvclNwYWNlLCByZW5kZXJpbmdNb2RlKTsKICAgICBpZiAoIWltYWdlKQog
ICAgICAgICByZXR1cm4gZmFsc2U7CkBAIC0yNTQsMTAgKzI2Niw4IEBAIGJvb2wgU1ZHUmVuZGVy
aW5nQ29udGV4dDo6Y3JlYXRlSW1hZ2VCdWYKICAgICBHcmFwaGljc0NvbnRleHQqIGltYWdlQ29u
dGV4dCA9IGltYWdlLT5jb250ZXh0KCk7CiAgICAgQVNTRVJUKGltYWdlQ29udGV4dCk7CiAKLSAg
ICBpbWFnZUNvbnRleHQtPnNjYWxlKEZsb2F0U2l6ZShzdGF0aWNfY2FzdDxmbG9hdD4oY2xhbXBl
ZFNpemUud2lkdGgoKSkgLyBwYWludFJlY3Qud2lkdGgoKSwKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBzdGF0aWNfY2FzdDxmbG9hdD4oY2xhbXBlZFNpemUuaGVpZ2h0KCkpIC8g
cGFpbnRSZWN0LmhlaWdodCgpKSk7CiAgICAgaW1hZ2VDb250ZXh0LT50cmFuc2xhdGUoLXBhaW50
UmVjdC54KCksIC1wYWludFJlY3QueSgpKTsKLSAgICBpbWFnZUNvbnRleHQtPmNvbmNhdENUTShh
YnNvbHV0ZVRyYW5zZm9ybSk7CisgICAgaW1hZ2VDb250ZXh0LT5jb25jYXRDVE0oYWJzb2x1dGVU
cmFuc2Zvcm0gKiBjbGFtcFRyYW5zZm9ybSk7CiAKICAgICBpbWFnZUJ1ZmZlciA9IFdURjo6bW92
ZShpbWFnZSk7CiAgICAgcmV0dXJuIHRydWU7CkBAIC0zMDMsMTggKzMxMywxOSBAQCB2b2lkIFNW
R1JlbmRlcmluZ0NvbnRleHQ6OnJlbmRlclN1YnRyZWVUCiAgICAgY29udGVudFRyYW5zZm9ybWF0
aW9uID0gc2F2ZWRDb250ZW50VHJhbnNmb3JtYXRpb247CiB9CiAKLXZvaWQgU1ZHUmVuZGVyaW5n
Q29udGV4dDo6Y2xpcFRvSW1hZ2VCdWZmZXIoR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0LCBjb25z
dCBBZmZpbmVUcmFuc2Zvcm0mIGFic29sdXRlVHJhbnNmb3JtLCBjb25zdCBGbG9hdFJlY3QmIHRh
cmdldFJlY3QsIHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlcj4mIGltYWdlQnVmZmVyLCBib29s
IHNhZmVUb0NsZWFyKQordm9pZCBTVkdSZW5kZXJpbmdDb250ZXh0OjpjbGlwVG9JbWFnZUJ1ZmZl
cihHcmFwaGljc0NvbnRleHQqIGNvbnRleHQsIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgYWJzb2x1
dGVUcmFuc2Zvcm0sIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgY2xhbXBUcmFuc2Zvcm0sIGNvbnN0
IEZsb2F0UmVjdCYgdGFyZ2V0UmVjdCwgc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVyPiYgaW1h
Z2VCdWZmZXIsIGJvb2wgc2FmZVRvQ2xlYXIpCiB7CiAgICAgQVNTRVJUKGNvbnRleHQpOwogICAg
IEFTU0VSVChpbWFnZUJ1ZmZlcik7CiAKICAgICBGbG9hdFJlY3QgYWJzb2x1dGVUYXJnZXRSZWN0
ID0gY2FsY3VsYXRlSW1hZ2VCdWZmZXJSZWN0KHRhcmdldFJlY3QsIGFic29sdXRlVHJhbnNmb3Jt
KTsKKyAgICBBZmZpbmVUcmFuc2Zvcm0gdHJhbnNmb3JtID0gYWJzb2x1dGVUcmFuc2Zvcm0gKiBj
bGFtcFRyYW5zZm9ybTsKIAogICAgIC8vIFRoZSBtYXNrIGltYWdlIGhhcyBiZWVuIGNyZWF0ZWQg
aW4gdGhlIGFic29sdXRlIGNvb3JkaW5hdGUgc3BhY2UsIGFzIHRoZSBpbWFnZSBzaG91bGQgbm90
IGJlIHNjYWxlZC4KICAgICAvLyBTbyB0aGUgYWN0dWFsIG1hc2tpbmcgcHJvY2VzcyBoYXMgdG8g
YmUgZG9uZSBpbiB0aGUgYWJzb2x1dGUgY29vcmRpbmF0ZSBzcGFjZSBhcyB3ZWxsLgotICAgIGNv
bnRleHQtPmNvbmNhdENUTShhYnNvbHV0ZVRyYW5zZm9ybS5pbnZlcnNlKCkpOworICAgIGNvbnRl
eHQtPmNvbmNhdENUTSh0cmFuc2Zvcm0uaW52ZXJzZSgpKTsKICAgICBjb250ZXh0LT5jbGlwVG9J
bWFnZUJ1ZmZlcihpbWFnZUJ1ZmZlci5nZXQoKSwgYWJzb2x1dGVUYXJnZXRSZWN0KTsKLSAgICBj
b250ZXh0LT5jb25jYXRDVE0oYWJzb2x1dGVUcmFuc2Zvcm0pOworICAgIGNvbnRleHQtPmNvbmNh
dENUTSh0cmFuc2Zvcm0pOwogCiAgICAgLy8gV2hlbiBuZXN0aW5nIHJlc291cmNlcywgd2l0aCBv
YmplY3RCb3VuZGluZ0JveCBhcyBjb250ZW50IHVuaXQgdHlwZXMsIHRoZXJlJ3Mgbm8gdXNlIGlu
IGNhY2hpbmcgdGhlCiAgICAgLy8gcmVzdWx0aW5nIGltYWdlIGJ1ZmZlciBhcyB0aGUgcGFyZW50
IHJlc291cmNlIGFscmVhZHkgY2FjaGVzIHRoZSByZXN1bHQuCkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvc3ZnL1NWR1JlbmRlcmluZ0NvbnRleHQuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR1JlbmRlcmluZ0NvbnRleHQuaAkocmV2aXNpb24g
MTgzMzk5KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdSZW5kZXJpbmdDb250
ZXh0LmgJKHdvcmtpbmcgY29weSkKQEAgLTcxLDE1ICs3MSwxNiBAQCBwdWJsaWM6CiAgICAgdm9p
ZCBwcmVwYXJlVG9SZW5kZXJTVkdDb250ZW50KFJlbmRlckVsZW1lbnQmLCBQYWludEluZm8mLCBO
ZWVkc0dyYXBoaWNzQ29udGV4dFNhdmUgPSBEb250U2F2ZUdyYXBoaWNzQ29udGV4dCk7CiAgICAg
Ym9vbCBpc1JlbmRlcmluZ1ByZXBhcmVkKCkgY29uc3QgeyByZXR1cm4gbV9yZW5kZXJpbmdGbGFn
cyAmIFJlbmRlcmluZ1ByZXBhcmVkOyB9CiAKLSAgICBzdGF0aWMgYm9vbCBjcmVhdGVJbWFnZUJ1
ZmZlcihjb25zdCBGbG9hdFJlY3QmIHBhaW50UmVjdCwgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiBh
YnNvbHV0ZVRyYW5zZm9ybSwgc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVyPiYsIENvbG9yU3Bh
Y2UsIFJlbmRlcmluZ01vZGUpOworICAgIHN0YXRpYyBib29sIGNyZWF0ZUltYWdlQnVmZmVyKGNv
bnN0IEludFJlY3QmIHBhaW50UmVjdCwgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiBhYnNvbHV0ZVRy
YW5zZm9ybSwgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiBjbGFtcFRyYW5zZm9ybSwgc3RkOjp1bmlx
dWVfcHRyPEltYWdlQnVmZmVyPiYsIENvbG9yU3BhY2UsIFJlbmRlcmluZ01vZGUpOwogICAgIC8v
IFBhdHRlcm5zIG5lZWQgYSBkaWZmZXJlbnQgZmxvYXQtdG8taW50ZWdlciBjb29yZGluYXRlIG1h
cHBpbmcuCiAgICAgc3RhdGljIGJvb2wgY3JlYXRlSW1hZ2VCdWZmZXJGb3JQYXR0ZXJuKGNvbnN0
IEZsb2F0UmVjdCYgYWJzb2x1dGVUYXJnZXRSZWN0LCBjb25zdCBGbG9hdFJlY3QmIGNsYW1wZWRB
YnNvbHV0ZVRhcmdldFJlY3QsIHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlcj4mLCBDb2xvclNw
YWNlLCBSZW5kZXJpbmdNb2RlKTsKIAogICAgIHN0YXRpYyB2b2lkIHJlbmRlclN1YnRyZWVUb0lt
YWdlQnVmZmVyKEltYWdlQnVmZmVyKiwgUmVuZGVyRWxlbWVudCYsIGNvbnN0IEFmZmluZVRyYW5z
Zm9ybSYpOwotICAgIHN0YXRpYyB2b2lkIGNsaXBUb0ltYWdlQnVmZmVyKEdyYXBoaWNzQ29udGV4
dCosIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgYWJzb2x1dGVUcmFuc2Zvcm0sIGNvbnN0IEZsb2F0
UmVjdCYgdGFyZ2V0UmVjdCwgc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVyPiYsIGJvb2wgc2Fm
ZVRvQ2xlYXIpOworICAgIHN0YXRpYyB2b2lkIGNsaXBUb0ltYWdlQnVmZmVyKEdyYXBoaWNzQ29u
dGV4dCosIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgYWJzb2x1dGVUcmFuc2Zvcm0sIGNvbnN0IEFm
ZmluZVRyYW5zZm9ybSYgY2xhbXBUcmFuc2Zvcm0sIGNvbnN0IEZsb2F0UmVjdCYgdGFyZ2V0UmVj
dCwgc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVyPiYsIGJvb2wgc2FmZVRvQ2xlYXIpOwogCiAg
ICAgc3RhdGljIGZsb2F0IGNhbGN1bGF0ZVNjcmVlbkZvbnRTaXplU2NhbGluZ0ZhY3Rvcihjb25z
dCBSZW5kZXJPYmplY3QmKTsKICAgICBzdGF0aWMgdm9pZCBjYWxjdWxhdGVUcmFuc2Zvcm1hdGlv
blRvT3V0ZXJtb3N0Q29vcmRpbmF0ZVN5c3RlbShjb25zdCBSZW5kZXJPYmplY3QmLCBBZmZpbmVU
cmFuc2Zvcm0mIGFic29sdXRlVHJhbnNmb3JtKTsKKyAgICBzdGF0aWMgdm9pZCBjYWxjdWxhdGVJ
bWFnZUNsYW1wVHJhbnNmb3JtYXRpb24oY29uc3QgRmxvYXRSZWN0JiB0YXJnZXRSZWN0LCBjb25z
dCBBZmZpbmVUcmFuc2Zvcm0mIGFic29sdXRlVHJhbnNmb3JtLCBBZmZpbmVUcmFuc2Zvcm0mIGNs
YW1wVHJhbnNmb3JtLCBJbnRSZWN0JiBwYWludFJlY3QpOwogICAgIHN0YXRpYyBJbnRTaXplIGNs
YW1wZWRBYnNvbHV0ZVNpemUoY29uc3QgSW50U2l6ZSYpOwogICAgIHN0YXRpYyBGbG9hdFJlY3Qg
Y2xhbXBlZEFic29sdXRlVGFyZ2V0UmVjdChjb25zdCBGbG9hdFJlY3QmIGFic29sdXRlVGFyZ2V0
UmVjdCk7CiAgICAgc3RhdGljIHZvaWQgY2xlYXIyRFJvdGF0aW9uKEFmZmluZVRyYW5zZm9ybSYp
Owo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>252548</attachid>
            <date>2015-05-06 18:24:18 -0700</date>
            <delta_ts>2015-05-06 18:47:09 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-144335-20150506182302.patch</filename>
            <type>text/plain</type>
            <size>41322</size>
            <attacher name="Said Abou-Hallawa">sabouhallawa</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDE4Mzg5OSkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDEwMiBAQAorMjAxNS0wNS0wNiAgU2FpZCBB
Ym91LUhhbGxhd2EgIDxzYWJvdWhhbGxhd2FAYXBwbGUuY29tPgorCisgICAgICAgIEFwcGx5aW5n
IGEgZmlsdGVyIG9uIGFuIFNWRyBlbGVtZW50LCB3aGljaCBpcyBsYXJnZXIgdGhhbiA0MDk2IHBp
eGVscywgY2F1c2VzIHRoaXMgZWxlbWVudCB0byBiZSByZW5kZXJlZCBzaGlmdGVkIHRvIHRoZSBs
ZWZ0CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNDQz
MzUKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBXaGVu
IHRoZSBTVkcgZWxlbWVudCBpcyBsYXJnZXIgdGhhbiA0MDk2eDQwOTYgcGl4ZWxzIGFuZCBpdCBo
YXMgYSBmaWx0ZXIsCisgICAgICAgIGEgY2xpcHBlciBvciBhIG1hc2tlciwgdGhlIEltYWdlQnVm
ZmVyIHdoaWNoIGlzIGNyZWF0ZWQgZm9yIGRyYXdpbmcgdGhlCisgICAgICAgIHNvdXJjZUdyYXBo
aWNCdWZmZXIgaGFzIHRvIGJlIGNsYW1wZWQgdG8gdGhpcyBzaXplLiBUaGUgcmVhc29uIGZvciB0
aGlzCisgICAgICAgIGNsYW1waW5nIGlzIHRoZSBGaWx0ZXJFZmZlY3Qgc2ltcGx5IGlnbm9yZXMg
cHJvY2Vzc2luZyBhbnkgSW1hZ2VCdWZmZXIKKyAgICAgICAgbGFyZ2VyIHRoYW4gdGhpcyBzaXpl
LgorICAgICAgICAKKyAgICAgICAgVGhlIGJ1ZyB3YXMgaGFwcGVuaW5nIGJlY2F1c2Ugd2UgZGlk
IG5vdCBwcm9wYWdhdGUgdGhlIGNsYW1waW5nIGxvZ2ljIHRvCisgICAgICAgIHRoZSBGaWx0ZXJF
ZmZlY3QuIFRoZSBGaWx0ZXJFZmZlY3QgcmVzdWx0IEltYWdlQnVmZmVyIHdhcyBub3QgY2xhbXBl
ZCBhcworICAgICAgICB3aGF0IHdlIGRvIGZvciBkcmF3aW5nIHRoZSBzb3VyY2VHcmFwaGljQnVm
ZmVyLiBJZiBvbmx5IHRoZSBkZXN0aW5hdGlvbgorICAgICAgICBwb2ludCBpcyBzcGVjaWZpZWQs
IHRoZSBHcmFwaGljc0NvbnRleHQ6OmRyYXdJbWFnZUJ1ZmZlcigpIGFzc3VtZXMgdGhlCisgICAg
ICAgIHNvdXJjZSBhbmQgdGhlIGRlc3RpbmF0aW9uIGltYWdlcyBoYXZlIHRoZSBzYW1lIHNpemUg
d2hpY2ggaXMgbm90IHRydWUKKyAgICAgICAgd2l0aCB0aGUgY2xhbXBpbmcuCisgICAgICAgIAor
ICAgICAgICBUaGUgZml4IGlzIHRvIGFkZCB0aGUgY2xhbXBpbmcgbG9naWMgdG8gdGhlIEZpbHRl
ckVmZmVjdC4gVHdvIHBsYWNlcyB3ZQorICAgICAgICBuZWVkIHRvIGNoYW5nZS4gKDEpIEZpbHRl
ckVmZmVjdDo6Y3JlYXRlSW1hZ2VCdWZmZXJSZXN1bHQoKSBoYXMgdG8gYXBwbHkKKyAgICAgICAg
dGhlIHNhbWUgY2xhbXBpbmcgd2UgZG8gaW4gU1ZHUmVuZGVyaW5nQ29udGV4dDo6Y3JlYXRlSW1h
Z2VCdWZmZXIoKS4gKDIpCisgICAgICAgIEZpbHRlckVmZmVjdDo6ZHJhd2luZ1JlZ2lvbk9mSW5w
dXRJbWFnZSgpIGhhcyB0byBjb25zaWRlciB0aGUgY2xhbXBpbmcgCisgICAgICAgIHdoZW4gbWFw
cGluZyBmcm9tIGFic29sdXRlIGNvb3JkaW5hdGVzIHRvIHRoZSBJbWFnZUJ1ZmZlciBjb29yZGlu
YXRlcy4KKyAgICAgICAgCisgICAgICAgIFRlc3RzOiBzdmcvZmlsdGVycy9iaWctc2l6ZWQtb2Zm
LXZpZXdwb3J0LWZpbHRlci5zdmcKKworICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0ltYWdl
QnVmZmVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyOjppc1NpemVDbGFtcGVk
KToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyOjpjbGFtcGVkU2l6ZSk6CisgICAgICAg
IChXZWJDb3JlOjpJbWFnZUJ1ZmZlcjo6Y2xhbXBlZFJlY3QpOgorICAgICAgICAqIHBsYXRmb3Jt
L2dyYXBoaWNzL0ltYWdlQnVmZmVyLmg6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlcjo6
c2V0U3BhY2VTaXplKTogTW92ZSBhbGwgdGhlIGNsYW1waW5nIGhlbHBlciBtZXRob2RzCisgICAg
ICAgIGZyb20gU1ZHUmVuZGVyaW5nQ29udGV4dCBhbmQgUmVuZGVyU1ZHUmVzb3VyY2VGaWx0ZXIg
dG8gdGhlIEltYWdlQnVmZmVyLgorICAgICAgICAKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGlj
cy9maWx0ZXJzL0ZFQ29sb3JNYXRyaXguY3BwOgorICAgICAgICAoV2ViQ29yZTo6RkVDb2xvck1h
dHJpeDo6cGxhdGZvcm1BcHBseVNvZnR3YXJlKTogVXNlIGludGVybmFsU2l6ZSgpIG9mIHRoZQor
ICAgICAgICByZXN1bHQgaW1hZ2Ugc2luY2UgdGhpcyByZXR1cm5zIHRoZSByZWFsIHNpemUgb2Yg
dGhlIHJlc3VsdCBJbWFnZUJ1ZmZlci4KKyAgICAgICAgYWJzb2x1dGVQYWludFJlY3QoKSByZXR1
cm5zIHRoZSByZWN0YW5nbGUgb2YgdGhlIGVsZW1lbnQgd2l0aG91dCBjbGFtcGluZy4KKyAgICAg
ICAgCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRVRpbGUuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6RkVUaWxlOjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUpOgorICAgICAgICAq
IHJlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VDbGlwcGVyLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OlJlbmRlclNWR1Jlc291cmNlQ2xpcHBlcjo6YXBwbHlDbGlwcGluZ1RvQ29udGV4dCk6
CisgICAgICAgICogcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJjZUZpbHRlci5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpSZW5kZXJTVkdSZXNvdXJjZUZpbHRlcjo6YXBwbHlSZXNvdXJjZSk6
CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJTVkdSZXNvdXJjZUZpbHRlcjo6Zml0c0luTWF4aW11
bUltYWdlU2l6ZSk6IERlbGV0ZWQuCisgICAgICAgICogcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdS
ZXNvdXJjZUZpbHRlci5oOgorICAgICAgICAqIHJlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVzb3Vy
Y2VHcmFkaWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpjcmVhdGVNYXNrQW5kU3dhcENvbnRl
eHRGb3JUZXh0R3JhZGllbnQpOgorICAgICAgICAoV2ViQ29yZTo6Y2xpcFRvVGV4dE1hc2spOgor
ICAgICAgICAqIHJlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VNYXNrZXIuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6UmVuZGVyU1ZHUmVzb3VyY2VNYXNrZXI6OmFwcGx5U1ZHTWFzayk6Cisg
ICAgICAgICogcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJjZVBhdHRlcm4uY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6UmVuZGVyU1ZHUmVzb3VyY2VQYXR0ZXJuOjpidWlsZFBhdHRlcm4pOgor
ICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU1ZHUmVzb3VyY2VQYXR0ZXJuOjpjcmVhdGVUaWxlSW1h
Z2UpOiBNYWtlIHRoZSBtb2RpZmljYXRpb25zCisgICAgICAgIHdoaWNoIGFyZSBuZWVkZWQgYmVj
YXVzZSBvZiBtb3ZpbmcgdGhlIGNsYW1waW5nIGhlbHBlciBtZXRob2RzIHRvIEltYWdlQnVmZmVy
CisgICAgICAgIGFuZCBiZWNhdXNlIG9mIGNoYW5naW5nIHRoZSBwcm90b3R5cGUgb2YgU1ZHUmVu
ZGVyaW5nQ29udGV4dCBtZXRob2RzLgorICAgICAgICAKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFw
aGljcy9maWx0ZXJzL0ZpbHRlckVmZmVjdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJF
ZmZlY3Q6OmRyYXdpbmdSZWdpb25PZklucHV0SW1hZ2UpOiBDb25zaWRlciB0aGUgY2xhbXBpbmcK
KyAgICAgICAgd2hlbiBtYXBwaW5nIGZyb20gYWJzb2x1dGUgY29vcmRpbmF0ZXMgdG8gdGhlIElt
YWdlQnVmZmVyIGNvb3JkaW5hdGVzLgorCisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6
OmNyZWF0ZUltYWdlQnVmZmVyUmVzdWx0KTogQXBwbHkgdGhlIHNhbWUgY2xhbXBpbmcKKyAgICAg
ICAgd2UgZG8gaW4gU1ZHUmVuZGVyaW5nQ29udGV4dDo6Y3JlYXRlSW1hZ2VCdWZmZXIoKSB3aGVu
IGNyZWF0aW5nIHRoZSAKKyAgICAgICAgRmlsdGVyRWZmZWN0IHJlc3VsdCBJbWFnZUJ1ZmZlci4K
KyAgICAgICAgCisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6OmFwcGx5KToKKyAgICAg
ICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6YXNVbm11bHRpcGxpZWRJbWFnZSk6CisgICAgICAg
IChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6OmFzUHJlbXVsdGlwbGllZEltYWdlKToKKyAgICAgICAg
KFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6Y29weVVubXVsdGlwbGllZEltYWdlKToKKyAgICAgICAg
KFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6Y29weVByZW11bHRpcGxpZWRJbWFnZSk6CisgICAgICAg
IChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6OmNyZWF0ZVVubXVsdGlwbGllZEltYWdlUmVzdWx0KToK
KyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6Y3JlYXRlUHJlbXVsdGlwbGllZEltYWdl
UmVzdWx0KToKKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6bWF4RmlsdGVyQXJlYSk6
IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6OmlzRmlsdGVyU2l6ZVZh
bGlkKTogRGVsZXRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRl
ckVmZmVjdC5oOiBVc2UgdGhlIG5ldyBJbWFnZUJ1ZmZlciBjbGFtcGluZworICAgICAgICBoZWxw
ZXIgbWV0aG9kcyBhbmQgZGVsZXRlIHRoZSBsb2NhbCBvbmVzLgorICAgICAgICAKKyAgICAgICAg
KiByZW5kZXJpbmcvRmlsdGVyRWZmZWN0UmVuZGVyZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
RmlsdGVyRWZmZWN0UmVuZGVyZXI6OnVwZGF0ZUJhY2tpbmdTdG9yZVJlY3QpOgorICAgICAgICAo
V2ViQ29yZTo6RmlsdGVyRWZmZWN0UmVuZGVyZXJIZWxwZXI6OmJlZ2luRmlsdGVyRWZmZWN0KTog
Q29kZSBjbGVhbiB1cC4KKyAgICAgICAgCisgICAgICAgICogcmVuZGVyaW5nL3N2Zy9TVkdSZW5k
ZXJpbmdDb250ZXh0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR1JlbmRlcmluZ0NvbnRleHQ6
OmNhbGN1bGF0ZVNjcmVlbkZvbnRTaXplU2NhbGluZ0ZhY3Rvcik6CisgICAgICAgIChXZWJDb3Jl
OjpTVkdSZW5kZXJpbmdDb250ZXh0OjpjYWxjdWxhdGVUcmFuc2Zvcm1hdGlvblRvT3V0ZXJtb3N0
Q29vcmRpbmF0ZVN5c3RlbSk6CisgICAgICAgIFJldHVybiB0aGUgQWZmaW5lVHJhbnNmb3JtIGlu
c3RlYWQgb2YgcGFzc2luZyBpdCB0aHJvdWdoIHRoZSByZWZlcmVuY2Ugb2YKKyAgICAgICAgYW4g
YXJndW1lbnQuCisgICAgICAgIAorICAgICAgICAoV2ViQ29yZTo6U1ZHUmVuZGVyaW5nQ29udGV4
dDo6Y3JlYXRlSW1hZ2VCdWZmZXIpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHUmVuZGVyaW5nQ29u
dGV4dDo6Y3JlYXRlSW1hZ2VCdWZmZXJGb3JQYXR0ZXJuKTogRGVsZXRlZC4KKyAgICAgICAgQ29k
ZSBjbGVhbiB1cCBhbmQgbWV0aG9kIHJlbmFtZS4KKyAgICAgICAgCisgICAgICAgIChXZWJDb3Jl
OjpTVkdSZW5kZXJpbmdDb250ZXh0OjpjbGFtcGVkQWJzb2x1dGVUYXJnZXRSZWN0KTogRGVsZXRl
ZC4KKyAgICAgICAgKFdlYkNvcmU6OlNWR1JlbmRlcmluZ0NvbnRleHQ6OmNsYW1wZWRBYnNvbHV0
ZVNpemUpOiBEZWxldGVkLgorICAgICAgICAqIHJlbmRlcmluZy9zdmcvU1ZHUmVuZGVyaW5nQ29u
dGV4dC5oOiBNb3ZlIHRoZSBjbGFtcGluZyBoZWxwZXIgbWV0aG9kcyB0bworICAgICAgICB0aGUg
SW1hZ2VCdWZmZXIgY2xhc3MuCisKIDIwMTUtMDUtMDYgIEpvbiBMZWUgIDxqb25sZWVAYXBwbGUu
Y29tPgogCiAgICAgICAgIENvcmVUZXh0U1BJLmggdXNlcyB3cm9uZyB2ZXJzaW9uIG51bWJlciB0
byBkZW5vdGUgWW9zZW1pdGUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L0ltYWdlQnVmZmVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9JbWFnZUJ1ZmZlci5jcHAJKHJldmlzaW9uIDE4Mzc1NikKKysrIFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlQnVmZmVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MzMsNiArMzMsNDYgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCitzdGF0aWMgY29uc3QgZmxv
YXQga01heENsYW1wZWRMZW5ndGggPSA0MDk2Oworc3RhdGljIGNvbnN0IGZsb2F0IGtNYXhDbGFt
cGVkQXJlYSA9IGtNYXhDbGFtcGVkTGVuZ3RoICoga01heENsYW1wZWRMZW5ndGg7CisKK2Jvb2wg
SW1hZ2VCdWZmZXI6OmlzU2l6ZUNsYW1wZWQoY29uc3QgRmxvYXRTaXplJiBzaXplKQoreworICAg
IHJldHVybiBzaXplLmhlaWdodCgpICogc2l6ZS53aWR0aCgpIDw9IGtNYXhDbGFtcGVkQXJlYTsK
K30KKworYm9vbCBJbWFnZUJ1ZmZlcjo6aXNTaXplQ2xhbXBlZChjb25zdCBGbG9hdFNpemUmIHNp
emUsIEZsb2F0U2l6ZSYgc2NhbGUpCit7CisgICAgRmxvYXRTaXplIHNjYWxlZFNpemUoc2l6ZSk7
CisgICAgc2NhbGVkU2l6ZS5zY2FsZShzY2FsZS53aWR0aCgpLCBzY2FsZS5oZWlnaHQoKSk7Cisg
ICAgZmxvYXQgc2NhbGVkQXJlYSA9IHNjYWxlZFNpemUud2lkdGgoKSAqIHNjYWxlZFNpemUuaGVp
Z2h0KCk7CisKKyAgICBpZiAoSW1hZ2VCdWZmZXI6OmlzU2l6ZUNsYW1wZWQoc2NhbGVkU2l6ZSkp
CisgICAgICAgIHJldHVybiB0cnVlOworCisgICAgLy8gSWYgYXJlYSBvZiBzY2FsZWQgc2l6ZSBp
cyBiaWdnZXIgdGhhbiB0aGUgdXBwZXIgbGltaXQsIGFkanVzdCB0aGUgc2NhbGUKKyAgICAvLyB0
byBmaXQuCisgICAgc2NhbGUuc2NhbGUoc3FydChrTWF4Q2xhbXBlZEFyZWEgLyBzY2FsZWRBcmVh
KSk7CisgICAgcmV0dXJuIGZhbHNlOworfQorCitGbG9hdFNpemUgSW1hZ2VCdWZmZXI6OmNsYW1w
ZWRTaXplKGNvbnN0IEZsb2F0U2l6ZSYgc2l6ZSkKK3sKKyAgICByZXR1cm4gc2l6ZS5zaHJ1bmtU
byhGbG9hdFNpemUoa01heENsYW1wZWRMZW5ndGgsIGtNYXhDbGFtcGVkTGVuZ3RoKSk7Cit9CisK
K0Zsb2F0U2l6ZSBJbWFnZUJ1ZmZlcjo6Y2xhbXBlZFNpemUoY29uc3QgRmxvYXRTaXplJiBzaXpl
LCBGbG9hdFNpemUmIHNjYWxlKQoreworICAgIEZsb2F0U2l6ZSBjbGFtcGVkU2l6ZSA9IEltYWdl
QnVmZmVyOjpjbGFtcGVkU2l6ZShzaXplKTsKKyAgICBzY2FsZSA9IEZsb2F0U2l6ZShjbGFtcGVk
U2l6ZS53aWR0aCgpIC8gc2l6ZS53aWR0aCgpLCBjbGFtcGVkU2l6ZS5oZWlnaHQoKSAvIHNpemUu
aGVpZ2h0KCkpOworICAgIHJldHVybiBjbGFtcGVkU2l6ZTsKK30KKworRmxvYXRSZWN0IEltYWdl
QnVmZmVyOjpjbGFtcGVkUmVjdChjb25zdCBGbG9hdFJlY3QmIHJlY3QpCit7CisgICAgcmV0dXJu
IEZsb2F0UmVjdChyZWN0LmxvY2F0aW9uKCksIEltYWdlQnVmZmVyOjpjbGFtcGVkU2l6ZShyZWN0
LnNpemUoKSkpOworfQorCiAjaWYgIVVTRShDRykKIHZvaWQgSW1hZ2VCdWZmZXI6OnRyYW5zZm9y
bUNvbG9yU3BhY2UoQ29sb3JTcGFjZSBzcmNDb2xvclNwYWNlLCBDb2xvclNwYWNlIGRzdENvbG9y
U3BhY2UpCiB7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFnZUJ1
ZmZlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0lt
YWdlQnVmZmVyLmgJKHJldmlzaW9uIDE4Mzc1NikKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL0ltYWdlQnVmZmVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTEyMywxMCArMTIzLDEz
IEBAIHB1YmxpYzoKICAgICBib29sIGNvcHlUb1BsYXRmb3JtVGV4dHVyZShHcmFwaGljc0NvbnRl
eHQzRCYsIFBsYXRmb3JtM0RPYmplY3QsIEdDM0RlbnVtLCBib29sLCBib29sKTsKIAogICAgIEZs
b2F0U2l6ZSBzcGFjZVNpemUoKSBjb25zdCB7IHJldHVybiBtX3NwYWNlOyB9Ci0gICAgdm9pZCBz
ZXRTcGFjZVNpemUoY29uc3QgRmxvYXRTaXplJiBzcGFjZSkKLSAgICB7Ci0gICAgICAgIG1fc3Bh
Y2UgPSBzcGFjZTsKLSAgICB9CisgICAgdm9pZCBzZXRTcGFjZVNpemUoY29uc3QgRmxvYXRTaXpl
JiBzcGFjZSkgeyBtX3NwYWNlID0gc3BhY2U7IH0KKworICAgIHN0YXRpYyBib29sIGlzU2l6ZUNs
YW1wZWQoY29uc3QgRmxvYXRTaXplJik7CisgICAgc3RhdGljIGJvb2wgaXNTaXplQ2xhbXBlZChj
b25zdCBGbG9hdFNpemUmLCBGbG9hdFNpemUmIHNjYWxlKTsKKyAgICBzdGF0aWMgRmxvYXRTaXpl
IGNsYW1wZWRTaXplKGNvbnN0IEZsb2F0U2l6ZSYpOworICAgIHN0YXRpYyBGbG9hdFNpemUgY2xh
bXBlZFNpemUoY29uc3QgRmxvYXRTaXplJiwgRmxvYXRTaXplJiBzY2FsZSk7CisgICAgc3RhdGlj
IEZsb2F0UmVjdCBjbGFtcGVkUmVjdChjb25zdCBGbG9hdFJlY3QmKTsKIAogcHJpdmF0ZToKICNp
ZiBVU0UoQ0cpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJz
L0ZFQ29sb3JNYXRyaXguY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2ZpbHRlcnMvRkVDb2xvck1hdHJpeC5jcHAJKHJldmlzaW9uIDE4Mzc1NikKKysr
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDb2xvck1hdHJpeC5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTE0OSw3ICsxNDksNyBAQCB2b2lkIEZFQ29sb3JNYXRyaXg6
OnBsYXRmb3JtQXBwbHlTb2Z0d2FyCiAKICAgICByZXN1bHRJbWFnZS0+Y29udGV4dCgpLT5kcmF3
SW1hZ2VCdWZmZXIoaW4tPmFzSW1hZ2VCdWZmZXIoKSwgQ29sb3JTcGFjZURldmljZVJHQiwgZHJh
d2luZ1JlZ2lvbk9mSW5wdXRJbWFnZShpbi0+YWJzb2x1dGVQYWludFJlY3QoKSkpOwogCi0gICAg
SW50UmVjdCBpbWFnZVJlY3QoSW50UG9pbnQoKSwgYWJzb2x1dGVQYWludFJlY3QoKS5zaXplKCkp
OworICAgIEludFJlY3QgaW1hZ2VSZWN0KEludFBvaW50KCksIHJlc3VsdEltYWdlLT5pbnRlcm5h
bFNpemUoKSk7CiAgICAgUmVmUHRyPFVpbnQ4Q2xhbXBlZEFycmF5PiBwaXhlbEFycmF5ID0gcmVz
dWx0SW1hZ2UtPmdldFVubXVsdGlwbGllZEltYWdlRGF0YShpbWFnZVJlY3QpOwogCiAgICAgc3dp
dGNoIChtX3R5cGUpIHsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Zp
bHRlcnMvRkVUaWxlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9maWx0ZXJzL0ZFVGlsZS5jcHAJKHJldmlzaW9uIDE4Mzc1NikKKysrIFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVUaWxlLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtNjMsOCArNjMsOCBAQCB2b2lkIEZFVGlsZTo6cGxhdGZvcm1BcHBseVNvZnR3YXJlKCkK
ICAgICAgICAgdGlsZVJlY3Quc2NhbGUoZmlsdGVyLmZpbHRlclJlc29sdXRpb24oKS53aWR0aCgp
LCBmaWx0ZXIuZmlsdGVyUmVzb2x1dGlvbigpLmhlaWdodCgpKTsKICAgICB9CiAKLSAgICBzdGQ6
OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXI+IHRpbGVJbWFnZTsKLSAgICBpZiAoIVNWR1JlbmRlcmlu
Z0NvbnRleHQ6OmNyZWF0ZUltYWdlQnVmZmVyRm9yUGF0dGVybih0aWxlUmVjdCwgdGlsZVJlY3Qs
IHRpbGVJbWFnZSwgQ29sb3JTcGFjZURldmljZVJHQiwgZmlsdGVyKCkucmVuZGVyaW5nTW9kZSgp
KSkKKyAgICBhdXRvIHRpbGVJbWFnZSA9IFNWR1JlbmRlcmluZ0NvbnRleHQ6OmNyZWF0ZUltYWdl
QnVmZmVyKHRpbGVSZWN0LCB0aWxlUmVjdCwgQ29sb3JTcGFjZURldmljZVJHQiwgZmlsdGVyKCku
cmVuZGVyaW5nTW9kZSgpKTsKKyAgICBpZiAoIXRpbGVJbWFnZSkKICAgICAgICAgcmV0dXJuOwog
CiAgICAgR3JhcGhpY3NDb250ZXh0KiB0aWxlSW1hZ2VDb250ZXh0ID0gdGlsZUltYWdlLT5jb250
ZXh0KCk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0Zp
bHRlckVmZmVjdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvZmlsdGVycy9GaWx0ZXJFZmZlY3QuY3BwCShyZXZpc2lvbiAxODM3NTYpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlckVmZmVjdC5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTM2LDggKzM2LDYgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1z
dGF0aWMgY29uc3QgZmxvYXQga01heEZpbHRlckFyZWEgPSA0MDk2ICogNDA5NjsKLQogRmlsdGVy
RWZmZWN0OjpGaWx0ZXJFZmZlY3QoRmlsdGVyJiBmaWx0ZXIpCiAgICAgOiBtX2FscGhhSW1hZ2Uo
ZmFsc2UpCiAgICAgLCBtX2ZpbHRlcihmaWx0ZXIpCkBAIC01NSwxOSArNTMsNiBAQCBGaWx0ZXJF
ZmZlY3Q6On5GaWx0ZXJFZmZlY3QoKQogewogfQogCi1mbG9hdCBGaWx0ZXJFZmZlY3Q6Om1heEZp
bHRlckFyZWEoKQotewotICAgIHJldHVybiBrTWF4RmlsdGVyQXJlYTsKLX0KLQotYm9vbCBGaWx0
ZXJFZmZlY3Q6OmlzRmlsdGVyU2l6ZVZhbGlkKGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKLXsKLSAg
ICBpZiAocmVjdC53aWR0aCgpIDwgMCB8fCByZWN0LmhlaWdodCgpIDwgMAotICAgICAgICB8fCAo
cmVjdC5oZWlnaHQoKSAqIHJlY3Qud2lkdGgoKSA+IGtNYXhGaWx0ZXJBcmVhKSkKLSAgICAgICAg
cmV0dXJuIGZhbHNlOwotICAgIHJldHVybiB0cnVlOwotfQotCiB2b2lkIEZpbHRlckVmZmVjdDo6
ZGV0ZXJtaW5lQWJzb2x1dGVQYWludFJlY3QoKQogewogICAgIG1fYWJzb2x1dGVQYWludFJlY3Qg
PSBJbnRSZWN0KCk7CkBAIC05Myw4ICs3OCwxNiBAQCBJbnRSZWN0IEZpbHRlckVmZmVjdDo6cmVx
dWVzdGVkUmVnaW9uT2ZJCiAKIEZsb2F0UmVjdCBGaWx0ZXJFZmZlY3Q6OmRyYXdpbmdSZWdpb25P
ZklucHV0SW1hZ2UoY29uc3QgSW50UmVjdCYgc3JjUmVjdCkgY29uc3QKIHsKLSAgICByZXR1cm4g
RmxvYXRSZWN0KEZsb2F0UG9pbnQoc3JjUmVjdC54KCkgLSBtX2Fic29sdXRlUGFpbnRSZWN0Lngo
KSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcmNSZWN0LnkoKSAtIG1fYWJzb2x1dGVQ
YWludFJlY3QueSgpKSwgc3JjUmVjdC5zaXplKCkpOworICAgIEFTU0VSVChoYXNSZXN1bHQoKSk7
CisgICAgRmxvYXRQb2ludCBsb2NhdGlvbiA9IHNyY1JlY3QubG9jYXRpb24oKTsKKyAgICBsb2Nh
dGlvbi5tb3ZlQnkoLW1fYWJzb2x1dGVQYWludFJlY3QubG9jYXRpb24oKSk7CisgICAgRmxvYXRS
ZWN0IHJlY3QgPSBGbG9hdFJlY3QobG9jYXRpb24sIHNyY1JlY3Quc2l6ZSgpKTsKKworICAgIEZs
b2F0U2l6ZSBzY2FsZTsKKyAgICBJbWFnZUJ1ZmZlcjo6Y2xhbXBlZFNpemUobV9hYnNvbHV0ZVBh
aW50UmVjdC5zaXplKCksIHNjYWxlKTsKKworICAgIEFmZmluZVRyYW5zZm9ybSB0cmFuc2Zvcm0g
PSBBZmZpbmVUcmFuc2Zvcm0oKS5zY2FsZShzY2FsZS53aWR0aCgpLCBzY2FsZS5oZWlnaHQoKSk7
CisgICAgcmV0dXJuIHRyYW5zZm9ybS5tYXBSZWN0KHJlY3QpOwogfQogCiBGaWx0ZXJFZmZlY3Qq
IEZpbHRlckVmZmVjdDo6aW5wdXRFZmZlY3QodW5zaWduZWQgbnVtYmVyKSBjb25zdApAQCAtMTU2
LDcgKzE0OSw3IEBAIHZvaWQgRmlsdGVyRWZmZWN0OjphcHBseSgpCiAgICAgZGV0ZXJtaW5lQWJz
b2x1dGVQYWludFJlY3QoKTsKICAgICBzZXRSZXN1bHRDb2xvclNwYWNlKG1fb3BlcmF0aW5nQ29s
b3JTcGFjZSk7CiAKLSAgICBpZiAoIWlzRmlsdGVyU2l6ZVZhbGlkKG1fYWJzb2x1dGVQYWludFJl
Y3QpKQorICAgIGlmIChtX2Fic29sdXRlUGFpbnRSZWN0LmlzRW1wdHkoKSB8fCAhSW1hZ2VCdWZm
ZXI6OmlzU2l6ZUNsYW1wZWQobV9hYnNvbHV0ZVBhaW50UmVjdC5zaXplKCkpKQogICAgICAgICBy
ZXR1cm47CiAKICAgICBpZiAocmVxdWlyZXNWYWxpZFByZU11bHRpcGxpZWRQaXhlbHMoKSkgewpA
QCAtMzIxLDggKzMxNCw4IEBAIEltYWdlQnVmZmVyKiBGaWx0ZXJFZmZlY3Q6Om9wZW5DTEltYWdl
VG8KIAogUGFzc1JlZlB0cjxVaW50OENsYW1wZWRBcnJheT4gRmlsdGVyRWZmZWN0Ojphc1VubXVs
dGlwbGllZEltYWdlKGNvbnN0IEludFJlY3QmIHJlY3QpCiB7Ci0gICAgQVNTRVJUKGlzRmlsdGVy
U2l6ZVZhbGlkKHJlY3QpKTsKICAgICBJbnRTaXplIHNjYWxlZFNpemUocmVjdC5zaXplKCkpOwor
ICAgIEFTU0VSVChJbWFnZUJ1ZmZlcjo6aXNTaXplQ2xhbXBlZChzY2FsZWRTaXplKSk7CiAgICAg
c2NhbGVkU2l6ZS5zY2FsZShtX2ZpbHRlci5maWx0ZXJTY2FsZSgpKTsKICAgICBSZWZQdHI8VWlu
dDhDbGFtcGVkQXJyYXk+IGltYWdlRGF0YSA9IFVpbnQ4Q2xhbXBlZEFycmF5OjpjcmVhdGVVbmlu
aXRpYWxpemVkKHNjYWxlZFNpemUud2lkdGgoKSAqIHNjYWxlZFNpemUuaGVpZ2h0KCkgKiA0KTsK
ICAgICBjb3B5VW5tdWx0aXBsaWVkSW1hZ2UoaW1hZ2VEYXRhLmdldCgpLCByZWN0KTsKQEAgLTMz
MSw4ICszMjQsOCBAQCBQYXNzUmVmUHRyPFVpbnQ4Q2xhbXBlZEFycmF5PiBGaWx0ZXJFZmZlCiAK
IFBhc3NSZWZQdHI8VWludDhDbGFtcGVkQXJyYXk+IEZpbHRlckVmZmVjdDo6YXNQcmVtdWx0aXBs
aWVkSW1hZ2UoY29uc3QgSW50UmVjdCYgcmVjdCkKIHsKLSAgICBBU1NFUlQoaXNGaWx0ZXJTaXpl
VmFsaWQocmVjdCkpOwogICAgIEludFNpemUgc2NhbGVkU2l6ZShyZWN0LnNpemUoKSk7CisgICAg
QVNTRVJUKEltYWdlQnVmZmVyOjppc1NpemVDbGFtcGVkKHNjYWxlZFNpemUpKTsKICAgICBzY2Fs
ZWRTaXplLnNjYWxlKG1fZmlsdGVyLmZpbHRlclNjYWxlKCkpOwogICAgIFJlZlB0cjxVaW50OENs
YW1wZWRBcnJheT4gaW1hZ2VEYXRhID0gVWludDhDbGFtcGVkQXJyYXk6OmNyZWF0ZVVuaW5pdGlh
bGl6ZWQoc2NhbGVkU2l6ZS53aWR0aCgpICogc2NhbGVkU2l6ZS5oZWlnaHQoKSAqIDQpOwogICAg
IGNvcHlQcmVtdWx0aXBsaWVkSW1hZ2UoaW1hZ2VEYXRhLmdldCgpLCByZWN0KTsKQEAgLTM5Nyw4
ICszOTAsOCBAQCB2b2lkIEZpbHRlckVmZmVjdDo6Y29weVVubXVsdGlwbGllZEltYWdlCiAgICAg
ICAgIGlmIChtX2ltYWdlQnVmZmVyUmVzdWx0KQogICAgICAgICAgICAgbV91bm11bHRpcGxpZWRJ
bWFnZVJlc3VsdCA9IG1faW1hZ2VCdWZmZXJSZXN1bHQtPmdldFVubXVsdGlwbGllZEltYWdlRGF0
YShJbnRSZWN0KEludFBvaW50KCksIG1fYWJzb2x1dGVQYWludFJlY3Quc2l6ZSgpKSk7CiAgICAg
ICAgIGVsc2UgewotICAgICAgICAgICAgQVNTRVJUKGlzRmlsdGVyU2l6ZVZhbGlkKG1fYWJzb2x1
dGVQYWludFJlY3QpKTsKICAgICAgICAgICAgIEludFNpemUgaW5wdXRTaXplKG1fYWJzb2x1dGVQ
YWludFJlY3Quc2l6ZSgpKTsKKyAgICAgICAgICAgIEFTU0VSVChJbWFnZUJ1ZmZlcjo6aXNTaXpl
Q2xhbXBlZChpbnB1dFNpemUpKTsKICAgICAgICAgICAgIGlucHV0U2l6ZS5zY2FsZShtX2ZpbHRl
ci5maWx0ZXJTY2FsZSgpKTsKICAgICAgICAgICAgIG1fdW5tdWx0aXBsaWVkSW1hZ2VSZXN1bHQg
PSBVaW50OENsYW1wZWRBcnJheTo6Y3JlYXRlVW5pbml0aWFsaXplZChpbnB1dFNpemUud2lkdGgo
KSAqIGlucHV0U2l6ZS5oZWlnaHQoKSAqIDQpOwogICAgICAgICAgICAgdW5zaWduZWQgY2hhciog
c291cmNlQ29tcG9uZW50ID0gbV9wcmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQtPmRhdGEoKTsKQEAg
LTQzMyw4ICs0MjYsOCBAQCB2b2lkIEZpbHRlckVmZmVjdDo6Y29weVByZW11bHRpcGxpZWRJbWFn
CiAgICAgICAgIGlmIChtX2ltYWdlQnVmZmVyUmVzdWx0KQogICAgICAgICAgICAgbV9wcmVtdWx0
aXBsaWVkSW1hZ2VSZXN1bHQgPSBtX2ltYWdlQnVmZmVyUmVzdWx0LT5nZXRQcmVtdWx0aXBsaWVk
SW1hZ2VEYXRhKEludFJlY3QoSW50UG9pbnQoKSwgbV9hYnNvbHV0ZVBhaW50UmVjdC5zaXplKCkp
KTsKICAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICBBU1NFUlQoaXNGaWx0ZXJTaXplVmFsaWQo
bV9hYnNvbHV0ZVBhaW50UmVjdCkpOwogICAgICAgICAgICAgSW50U2l6ZSBpbnB1dFNpemUobV9h
YnNvbHV0ZVBhaW50UmVjdC5zaXplKCkpOworICAgICAgICAgICAgQVNTRVJUKEltYWdlQnVmZmVy
Ojppc1NpemVDbGFtcGVkKGlucHV0U2l6ZSkpOwogICAgICAgICAgICAgaW5wdXRTaXplLnNjYWxl
KG1fZmlsdGVyLmZpbHRlclNjYWxlKCkpOwogICAgICAgICAgICAgbV9wcmVtdWx0aXBsaWVkSW1h
Z2VSZXN1bHQgPSBVaW50OENsYW1wZWRBcnJheTo6Y3JlYXRlVW5pbml0aWFsaXplZChpbnB1dFNp
emUud2lkdGgoKSAqIGlucHV0U2l6ZS5oZWlnaHQoKSAqIDQpOwogICAgICAgICAgICAgdW5zaWdu
ZWQgY2hhciogc291cmNlQ29tcG9uZW50ID0gbV91bm11bHRpcGxpZWRJbWFnZVJlc3VsdC0+ZGF0
YSgpOwpAQCAtNDU5LDEwICs0NTIsMTMgQEAgSW1hZ2VCdWZmZXIqIEZpbHRlckVmZmVjdDo6Y3Jl
YXRlSW1hZ2VCdQogICAgIC8vIE9ubHkgb25lIHJlc3VsdCB0eXBlIGlzIGFsbG93ZWQuCiAgICAg
QVNTRVJUKCFoYXNSZXN1bHQoKSk7CiAgICAgaWYgKG1fYWJzb2x1dGVQYWludFJlY3QuaXNFbXB0
eSgpKQotICAgICAgICByZXR1cm4gMDsKLSAgICBtX2ltYWdlQnVmZmVyUmVzdWx0ID0gSW1hZ2VC
dWZmZXI6OmNyZWF0ZShtX2Fic29sdXRlUGFpbnRSZWN0LnNpemUoKSwgbV9maWx0ZXIuZmlsdGVy
U2NhbGUoKSwgbV9yZXN1bHRDb2xvclNwYWNlLCBtX2ZpbHRlci5yZW5kZXJpbmdNb2RlKCkpOwor
ICAgICAgICByZXR1cm4gbnVsbHB0cjsKKworICAgIEZsb2F0U2l6ZSBjbGFtcGVkU2l6ZSA9IElt
YWdlQnVmZmVyOjpjbGFtcGVkU2l6ZShtX2Fic29sdXRlUGFpbnRSZWN0LnNpemUoKSk7CisgICAg
bV9pbWFnZUJ1ZmZlclJlc3VsdCA9IEltYWdlQnVmZmVyOjpjcmVhdGUoY2xhbXBlZFNpemUsIG1f
ZmlsdGVyLmZpbHRlclNjYWxlKCksIG1fcmVzdWx0Q29sb3JTcGFjZSwgbV9maWx0ZXIucmVuZGVy
aW5nTW9kZSgpKTsKICAgICBpZiAoIW1faW1hZ2VCdWZmZXJSZXN1bHQpCi0gICAgICAgIHJldHVy
biAwOworICAgICAgICByZXR1cm4gbnVsbHB0cjsKKwogICAgIEFTU0VSVChtX2ltYWdlQnVmZmVy
UmVzdWx0LT5jb250ZXh0KCkpOwogICAgIHJldHVybiBtX2ltYWdlQnVmZmVyUmVzdWx0LmdldCgp
OwogfQpAQCAtNDcxLDExICs0NjcsMTEgQEAgVWludDhDbGFtcGVkQXJyYXkqIEZpbHRlckVmZmVj
dDo6Y3JlYXRlVQogewogICAgIC8vIE9ubHkgb25lIHJlc3VsdCB0eXBlIGlzIGFsbG93ZWQuCiAg
ICAgQVNTRVJUKCFoYXNSZXN1bHQoKSk7Ci0gICAgQVNTRVJUKGlzRmlsdGVyU2l6ZVZhbGlkKG1f
YWJzb2x1dGVQYWludFJlY3QpKTsKLQogICAgIGlmIChtX2Fic29sdXRlUGFpbnRSZWN0LmlzRW1w
dHkoKSkKLSAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIHJldHVybiBudWxscHRyOworCiAgICAg
SW50U2l6ZSByZXN1bHRTaXplKG1fYWJzb2x1dGVQYWludFJlY3Quc2l6ZSgpKTsKKyAgICBBU1NF
UlQoSW1hZ2VCdWZmZXI6OmlzU2l6ZUNsYW1wZWQocmVzdWx0U2l6ZSkpOwogICAgIHJlc3VsdFNp
emUuc2NhbGUobV9maWx0ZXIuZmlsdGVyU2NhbGUoKSk7CiAgICAgbV91bm11bHRpcGxpZWRJbWFn
ZVJlc3VsdCA9IFVpbnQ4Q2xhbXBlZEFycmF5OjpjcmVhdGVVbmluaXRpYWxpemVkKHJlc3VsdFNp
emUud2lkdGgoKSAqIHJlc3VsdFNpemUuaGVpZ2h0KCkgKiA0KTsKICAgICByZXR1cm4gbV91bm11
bHRpcGxpZWRJbWFnZVJlc3VsdC5nZXQoKTsKQEAgLTQ4NSwxMSArNDgxLDExIEBAIFVpbnQ4Q2xh
bXBlZEFycmF5KiBGaWx0ZXJFZmZlY3Q6OmNyZWF0ZVAKIHsKICAgICAvLyBPbmx5IG9uZSByZXN1
bHQgdHlwZSBpcyBhbGxvd2VkLgogICAgIEFTU0VSVCghaGFzUmVzdWx0KCkpOwotICAgIEFTU0VS
VChpc0ZpbHRlclNpemVWYWxpZChtX2Fic29sdXRlUGFpbnRSZWN0KSk7Ci0KICAgICBpZiAobV9h
YnNvbHV0ZVBhaW50UmVjdC5pc0VtcHR5KCkpCi0gICAgICAgIHJldHVybiAwOworICAgICAgICBy
ZXR1cm4gbnVsbHB0cjsKKwogICAgIEludFNpemUgcmVzdWx0U2l6ZShtX2Fic29sdXRlUGFpbnRS
ZWN0LnNpemUoKSk7CisgICAgQVNTRVJUKEltYWdlQnVmZmVyOjppc1NpemVDbGFtcGVkKHJlc3Vs
dFNpemUpKTsKICAgICByZXN1bHRTaXplLnNjYWxlKG1fZmlsdGVyLmZpbHRlclNjYWxlKCkpOwog
ICAgIG1fcHJlbXVsdGlwbGllZEltYWdlUmVzdWx0ID0gVWludDhDbGFtcGVkQXJyYXk6OmNyZWF0
ZVVuaW5pdGlhbGl6ZWQocmVzdWx0U2l6ZS53aWR0aCgpICogcmVzdWx0U2l6ZS5oZWlnaHQoKSAq
IDQpOwogICAgIHJldHVybiBtX3ByZW11bHRpcGxpZWRJbWFnZVJlc3VsdC5nZXQoKTsKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyRWZmZWN0LmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9G
aWx0ZXJFZmZlY3QuaAkocmV2aXNpb24gMTgzNzU2KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJFZmZlY3QuaAkod29ya2luZyBjb3B5KQpAQCAtNTgs
OSArNTgsNiBAQCBjbGFzcyBGaWx0ZXJFZmZlY3QgOiBwdWJsaWMgUmVmQ291bnRlZDxGCiBwdWJs
aWM6CiAgICAgdmlydHVhbCB+RmlsdGVyRWZmZWN0KCk7CiAKLSAgICBzdGF0aWMgYm9vbCBpc0Zp
bHRlclNpemVWYWxpZChjb25zdCBGbG9hdFJlY3QmKTsKLSAgICBzdGF0aWMgZmxvYXQgbWF4Rmls
dGVyQXJlYSgpOwotCiAgICAgdm9pZCBjbGVhclJlc3VsdCgpOwogICAgIHZvaWQgY2xlYXJSZXN1
bHRzUmVjdXJzaXZlKCk7CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9GaWx0ZXJF
ZmZlY3RSZW5kZXJlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L0ZpbHRlckVmZmVjdFJlbmRlcmVyLmNwcAkocmV2aXNpb24gMTgzNzU2KQorKysgU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL0ZpbHRlckVmZmVjdFJlbmRlcmVyLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMzA1LDE0ICszMDUsMTUgQEAgYm9vbCBGaWx0ZXJFZmZlY3RSZW5kZXJlcjo6YnVpbGQoUmVu
ZGVyRQogCiBib29sIEZpbHRlckVmZmVjdFJlbmRlcmVyOjp1cGRhdGVCYWNraW5nU3RvcmVSZWN0
KGNvbnN0IEZsb2F0UmVjdCYgZmlsdGVyUmVjdCkKIHsKLSAgICBpZiAoIWZpbHRlclJlY3QuaXNa
ZXJvKCkgJiYgRmlsdGVyRWZmZWN0Ojppc0ZpbHRlclNpemVWYWxpZChmaWx0ZXJSZWN0KSkgewot
ICAgICAgICBGbG9hdFJlY3QgY3VycmVudFNvdXJjZVJlY3QgPSBzb3VyY2VJbWFnZVJlY3QoKTsK
LSAgICAgICAgaWYgKGZpbHRlclJlY3QgIT0gY3VycmVudFNvdXJjZVJlY3QpIHsKLSAgICAgICAg
ICAgIHNldFNvdXJjZUltYWdlUmVjdChmaWx0ZXJSZWN0KTsKLSAgICAgICAgICAgIHJldHVybiB0
cnVlOwotICAgICAgICB9Ci0gICAgfQotICAgIHJldHVybiBmYWxzZTsKKyAgICBpZiAoZmlsdGVy
UmVjdC5pc1plcm8oKSB8fCAhSW1hZ2VCdWZmZXI6OmlzU2l6ZUNsYW1wZWQoZmlsdGVyUmVjdC5z
aXplKCkpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBGbG9hdFJlY3QgY3VycmVudFNv
dXJjZVJlY3QgPSBzb3VyY2VJbWFnZVJlY3QoKTsKKyAgICBpZiAoZmlsdGVyUmVjdCA9PSBjdXJy
ZW50U291cmNlUmVjdCkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgc2V0U291cmNlSW1h
Z2VSZWN0KGZpbHRlclJlY3QpOworICAgIHJldHVybiB0cnVlOwogfQogCiB2b2lkIEZpbHRlckVm
ZmVjdFJlbmRlcmVyOjphbGxvY2F0ZUJhY2tpbmdTdG9yZUlmTmVlZGVkKCkKQEAgLTQwMSw3ICs0
MDIsNyBAQCBib29sIEZpbHRlckVmZmVjdFJlbmRlcmVySGVscGVyOjpiZWdpbkZpCiAgICAgZmls
dGVyLT5hbGxvY2F0ZUJhY2tpbmdTdG9yZUlmTmVlZGVkKCk7CiAgICAgLy8gUGFpbnQgaW50byB0
aGUgY29udGV4dCB0aGF0IHJlcHJlc2VudHMgdGhlIFNvdXJjZUdyYXBoaWMgb2YgdGhlIGZpbHRl
ci4KICAgICBHcmFwaGljc0NvbnRleHQqIHNvdXJjZUdyYXBoaWNzQ29udGV4dCA9IGZpbHRlci0+
aW5wdXRDb250ZXh0KCk7Ci0gICAgaWYgKCFzb3VyY2VHcmFwaGljc0NvbnRleHQgfHwgIUZpbHRl
ckVmZmVjdDo6aXNGaWx0ZXJTaXplVmFsaWQoZmlsdGVyLT5maWx0ZXJSZWdpb24oKSkpIHsKKyAg
ICBpZiAoIXNvdXJjZUdyYXBoaWNzQ29udGV4dCB8fCBmaWx0ZXItPmZpbHRlclJlZ2lvbigpLmlz
WmVybygpIHx8ICFJbWFnZUJ1ZmZlcjo6aXNTaXplQ2xhbXBlZChmaWx0ZXItPmZpbHRlclJlZ2lv
bigpLnNpemUoKSkpIHsKICAgICAgICAgLy8gRGlzYWJsZSB0aGUgZmlsdGVycyBhbmQgY29udGlu
dWUuCiAgICAgICAgIG1faGF2ZUZpbHRlckVmZmVjdCA9IGZhbHNlOwogICAgICAgICByZXR1cm4g
ZmFsc2U7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291
cmNlQ2xpcHBlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2
Zy9SZW5kZXJTVkdSZXNvdXJjZUNsaXBwZXIuY3BwCShyZXZpc2lvbiAxODM3NTYpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291cmNlQ2xpcHBlci5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTEzOCwxMSArMTM4LDExIEBAIGJvb2wgUmVuZGVyU1ZHUmVzb3VyY2VD
bGlwcGVyOjphcHBseUNsaXAKICAgICBpZiAoc2hvdWxkQ3JlYXRlQ2xpcHBlck1hc2tJbWFnZSAm
JiBwYXRoT25seUNsaXBwaW5nKGNvbnRleHQsIGFuaW1hdGVkTG9jYWxUcmFuc2Zvcm0sIG9iamVj
dEJvdW5kaW5nQm94KSkKICAgICAgICAgcmV0dXJuIHRydWU7CiAKLSAgICBBZmZpbmVUcmFuc2Zv
cm0gYWJzb2x1dGVUcmFuc2Zvcm07Ci0gICAgU1ZHUmVuZGVyaW5nQ29udGV4dDo6Y2FsY3VsYXRl
VHJhbnNmb3JtYXRpb25Ub091dGVybW9zdENvb3JkaW5hdGVTeXN0ZW0ocmVuZGVyZXIsIGFic29s
dXRlVHJhbnNmb3JtKTsKKyAgICBBZmZpbmVUcmFuc2Zvcm0gYWJzb2x1dGVUcmFuc2Zvcm0gPSBT
VkdSZW5kZXJpbmdDb250ZXh0OjpjYWxjdWxhdGVUcmFuc2Zvcm1hdGlvblRvT3V0ZXJtb3N0Q29v
cmRpbmF0ZVN5c3RlbShyZW5kZXJlcik7CiAKICAgICBpZiAoc2hvdWxkQ3JlYXRlQ2xpcHBlck1h
c2tJbWFnZSAmJiAhcmVwYWludFJlY3QuaXNFbXB0eSgpKSB7Ci0gICAgICAgIGlmICghU1ZHUmVu
ZGVyaW5nQ29udGV4dDo6Y3JlYXRlSW1hZ2VCdWZmZXIocmVwYWludFJlY3QsIGFic29sdXRlVHJh
bnNmb3JtLCBjbGlwcGVyTWFza0ltYWdlLCBDb2xvclNwYWNlRGV2aWNlUkdCLCBVbmFjY2VsZXJh
dGVkKSkKKyAgICAgICAgY2xpcHBlck1hc2tJbWFnZSA9IFNWR1JlbmRlcmluZ0NvbnRleHQ6OmNy
ZWF0ZUltYWdlQnVmZmVyKHJlcGFpbnRSZWN0LCBhYnNvbHV0ZVRyYW5zZm9ybSwgQ29sb3JTcGFj
ZURldmljZVJHQiwgVW5hY2NlbGVyYXRlZCk7CisgICAgICAgIGlmICghY2xpcHBlck1hc2tJbWFn
ZSkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgICAgICBHcmFwaGljc0NvbnRleHQq
IG1hc2tDb250ZXh0ID0gY2xpcHBlck1hc2tJbWFnZS0+Y29udGV4dCgpOwpJbmRleDogU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJjZUZpbHRlci5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJjZUZp
bHRlci5jcHAJKHJldmlzaW9uIDE4Mzc1NikKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9z
dmcvUmVuZGVyU1ZHUmVzb3VyY2VGaWx0ZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC05NiwyMSAr
OTYsNiBAQCBzdGQ6OnVuaXF1ZV9wdHI8U1ZHRmlsdGVyQnVpbGRlcj4gUmVuZGVyCiAgICAgcmV0
dXJuIGJ1aWxkZXI7CiB9CiAKLWJvb2wgUmVuZGVyU1ZHUmVzb3VyY2VGaWx0ZXI6OmZpdHNJbk1h
eGltdW1JbWFnZVNpemUoY29uc3QgRmxvYXRTaXplJiBzaXplLCBGbG9hdFNpemUmIHNjYWxlKQot
ewotICAgIEZsb2F0U2l6ZSBzY2FsZWRTaXplKHNpemUpOwotICAgIHNjYWxlZFNpemUuc2NhbGUo
c2NhbGUud2lkdGgoKSwgc2NhbGUuaGVpZ2h0KCkpOwotICAgIGZsb2F0IHNjYWxlZEFyZWEgPSBz
Y2FsZWRTaXplLndpZHRoKCkgKiBzY2FsZWRTaXplLmhlaWdodCgpOwotCi0gICAgaWYgKHNjYWxl
ZEFyZWEgPD0gRmlsdGVyRWZmZWN0OjptYXhGaWx0ZXJBcmVhKCkpCi0gICAgICAgIHJldHVybiB0
cnVlOwotCi0gICAgLy8gSWYgYXJlYSBvZiBzY2FsZWQgc2l6ZSBpcyBiaWdnZXIgdGhhbiB0aGUg
dXBwZXIgbGltaXQsIGFkanVzdCB0aGUgc2NhbGUKLSAgICAvLyB0byBmaXQuCi0gICAgc2NhbGUu
c2NhbGUoc3FydChGaWx0ZXJFZmZlY3Q6Om1heEZpbHRlckFyZWEoKSAvIHNjYWxlZEFyZWEpKTsK
LSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KIGJvb2wgUmVuZGVyU1ZHUmVzb3VyY2VGaWx0ZXI6OmFw
cGx5UmVzb3VyY2UoUmVuZGVyRWxlbWVudCYgcmVuZGVyZXIsIGNvbnN0IFJlbmRlclN0eWxlJiwg
R3JhcGhpY3NDb250ZXh0KiYgY29udGV4dCwgdW5zaWduZWQgc2hvcnQgcmVzb3VyY2VNb2RlKQog
ewogICAgIEFTU0VSVChjb250ZXh0KTsKQEAgLTEzMSw4ICsxMTYsNyBAQCBib29sIFJlbmRlclNW
R1Jlc291cmNlRmlsdGVyOjphcHBseVJlc291CiAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAg
IC8vIERldGVybWluZSBhYnNvbHV0ZSB0cmFuc2Zvcm1hdGlvbiBtYXRyaXggZm9yIGZpbHRlci4g
Ci0gICAgQWZmaW5lVHJhbnNmb3JtIGFic29sdXRlVHJhbnNmb3JtOwotICAgIFNWR1JlbmRlcmlu
Z0NvbnRleHQ6OmNhbGN1bGF0ZVRyYW5zZm9ybWF0aW9uVG9PdXRlcm1vc3RDb29yZGluYXRlU3lz
dGVtKHJlbmRlcmVyLCBhYnNvbHV0ZVRyYW5zZm9ybSk7CisgICAgQWZmaW5lVHJhbnNmb3JtIGFi
c29sdXRlVHJhbnNmb3JtID0gU1ZHUmVuZGVyaW5nQ29udGV4dDo6Y2FsY3VsYXRlVHJhbnNmb3Jt
YXRpb25Ub091dGVybW9zdENvb3JkaW5hdGVTeXN0ZW0ocmVuZGVyZXIpOwogICAgIGlmICghYWJz
b2x1dGVUcmFuc2Zvcm0uaXNJbnZlcnRpYmxlKCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIApA
QCAtMTY3LDggKzE1MSw4IEBAIGJvb2wgUmVuZGVyU1ZHUmVzb3VyY2VGaWx0ZXI6OmFwcGx5UmVz
b3UKIAogICAgIC8vIERldGVybWluZSBzY2FsZSBmYWN0b3IgZm9yIGZpbHRlci4gVGhlIHNpemUg
b2YgaW50ZXJtZWRpYXRlIEltYWdlQnVmZmVycyBzaG91bGRuJ3QgYmUgYmlnZ2VyIHRoYW4ga01h
eEZpbHRlclNpemUuCiAgICAgRmxvYXRSZWN0IHRlbXBTb3VyY2VSZWN0ID0gYWJzb2x1dGVEcmF3
aW5nUmVnaW9uOworICAgIEltYWdlQnVmZmVyOjppc1NpemVDbGFtcGVkKHRlbXBTb3VyY2VSZWN0
LnNpemUoKSwgc2NhbGUpOwogICAgIHRlbXBTb3VyY2VSZWN0LnNjYWxlKHNjYWxlLndpZHRoKCks
IHNjYWxlLmhlaWdodCgpKTsKLSAgICBmaXRzSW5NYXhpbXVtSW1hZ2VTaXplKHRlbXBTb3VyY2VS
ZWN0LnNpemUoKSwgc2NhbGUpOwogCiAgICAgLy8gU2V0IHRoZSBzY2FsZSBsZXZlbCBpbiBTVkdG
aWx0ZXIuCiAgICAgZmlsdGVyRGF0YS0+ZmlsdGVyLT5zZXRGaWx0ZXJSZXNvbHV0aW9uKHNjYWxl
KTsKQEAgLTE4Miw3ICsxNjYsNyBAQCBib29sIFJlbmRlclNWR1Jlc291cmNlRmlsdGVyOjphcHBs
eVJlc291CiAgICAgRmxvYXRSZWN0IHN1YlJlZ2lvbiA9IGxhc3RFZmZlY3QtPm1heEVmZmVjdFJl
Y3QoKTsKICAgICAvLyBBdCBsZWFzdCBvbmUgRmlsdGVyRWZmZWN0IGhhcyBhIHRvbyBiaWcgaW1h
Z2Ugc2l6ZSwKICAgICAvLyByZWNhbGN1bGF0ZSB0aGUgZWZmZWN0IHNpemVzIHdpdGggbmV3IHNj
YWxlIGZhY3RvcnMuCi0gICAgaWYgKCFmaXRzSW5NYXhpbXVtSW1hZ2VTaXplKHN1YlJlZ2lvbi5z
aXplKCksIHNjYWxlKSkgeworICAgIGlmICghSW1hZ2VCdWZmZXI6OmlzU2l6ZUNsYW1wZWQoc3Vi
UmVnaW9uLnNpemUoKSwgc2NhbGUpKSB7CiAgICAgICAgIGZpbHRlckRhdGEtPmZpbHRlci0+c2V0
RmlsdGVyUmVzb2x1dGlvbihzY2FsZSk7CiAgICAgICAgIFJlbmRlclNWR1Jlc291cmNlRmlsdGVy
UHJpbWl0aXZlOjpkZXRlcm1pbmVGaWx0ZXJQcmltaXRpdmVTdWJyZWdpb24oKmxhc3RFZmZlY3Qp
OwogICAgIH0KQEAgLTIwMSw5ICsxODUsMTAgQEAgYm9vbCBSZW5kZXJTVkdSZXNvdXJjZUZpbHRl
cjo6YXBwbHlSZXNvdQogICAgIGVmZmVjdGl2ZVRyYW5zZm9ybS5zY2FsZShzY2FsZS53aWR0aCgp
LCBzY2FsZS5oZWlnaHQoKSk7CiAgICAgZWZmZWN0aXZlVHJhbnNmb3JtLm11bHRpcGx5KGZpbHRl
ckRhdGEtPnNoZWFyRnJlZUFic29sdXRlVHJhbnNmb3JtKTsKIAotICAgIHN0ZDo6dW5pcXVlX3B0
cjxJbWFnZUJ1ZmZlcj4gc291cmNlR3JhcGhpYzsKICAgICBSZW5kZXJpbmdNb2RlIHJlbmRlcmlu
Z01vZGUgPSByZW5kZXJlci5mcmFtZSgpLnNldHRpbmdzKCkuYWNjZWxlcmF0ZWRGaWx0ZXJzRW5h
YmxlZCgpID8gQWNjZWxlcmF0ZWQgOiBVbmFjY2VsZXJhdGVkOwotICAgIGlmICghU1ZHUmVuZGVy
aW5nQ29udGV4dDo6Y3JlYXRlSW1hZ2VCdWZmZXIoZmlsdGVyRGF0YS0+ZHJhd2luZ1JlZ2lvbiwg
ZWZmZWN0aXZlVHJhbnNmb3JtLCBzb3VyY2VHcmFwaGljLCBDb2xvclNwYWNlTGluZWFyUkdCLCBy
ZW5kZXJpbmdNb2RlKSkgeworCisgICAgYXV0byBzb3VyY2VHcmFwaGljID0gU1ZHUmVuZGVyaW5n
Q29udGV4dDo6Y3JlYXRlSW1hZ2VCdWZmZXIoZmlsdGVyRGF0YS0+ZHJhd2luZ1JlZ2lvbiwgZWZm
ZWN0aXZlVHJhbnNmb3JtLCBDb2xvclNwYWNlTGluZWFyUkdCLCByZW5kZXJpbmdNb2RlKTsKKyAg
ICBpZiAoIXNvdXJjZUdyYXBoaWMpIHsKICAgICAgICAgQVNTRVJUKCFtX2ZpbHRlci5jb250YWlu
cygmcmVuZGVyZXIpKTsKICAgICAgICAgZmlsdGVyRGF0YS0+c2F2ZWRDb250ZXh0ID0gY29udGV4
dDsKICAgICAgICAgbV9maWx0ZXIuc2V0KCZyZW5kZXJlciwgV1RGOjptb3ZlKGZpbHRlckRhdGEp
KTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VG
aWx0ZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRl
clNWR1Jlc291cmNlRmlsdGVyLmgJKHJldmlzaW9uIDE4Mzc1NikKKysrIFNvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VGaWx0ZXIuaAkod29ya2luZyBjb3B5KQpA
QCAtOTEsOCArOTEsNiBAQCBwcml2YXRlOgogICAgIHZpcnR1YWwgY29uc3QgY2hhciogcmVuZGVy
TmFtZSgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuICJSZW5kZXJTVkdSZXNvdXJjZUZpbHRlciI7
IH0KICAgICB2aXJ0dWFsIGJvb2wgaXNTVkdSZXNvdXJjZUZpbHRlcigpIGNvbnN0IG92ZXJyaWRl
IHsgcmV0dXJuIHRydWU7IH0KIAotICAgIGJvb2wgZml0c0luTWF4aW11bUltYWdlU2l6ZShjb25z
dCBGbG9hdFNpemUmLCBGbG9hdFNpemUmKTsKLQogICAgIEhhc2hNYXA8UmVuZGVyT2JqZWN0Kiwg
c3RkOjp1bmlxdWVfcHRyPEZpbHRlckRhdGE+PiBtX2ZpbHRlcjsKIH07CiAKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VHcmFkaWVudC5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJj
ZUdyYWRpZW50LmNwcAkocmV2aXNpb24gMTgzNzU2KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJjZUdyYWRpZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAt
NTgsMTIgKzU4LDExIEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBjcmVhdGVNYXNrQW5kU3dhcENvbnQK
ICAgICBhdXRvKiB0ZXh0Um9vdEJsb2NrID0gUmVuZGVyU1ZHVGV4dDo6bG9jYXRlUmVuZGVyU1ZH
VGV4dEFuY2VzdG9yKCpvYmplY3QpOwogICAgIEFTU0VSVCh0ZXh0Um9vdEJsb2NrKTsKIAotICAg
IEFmZmluZVRyYW5zZm9ybSBhYnNvbHV0ZVRyYW5zZm9ybTsKLSAgICBTVkdSZW5kZXJpbmdDb250
ZXh0OjpjYWxjdWxhdGVUcmFuc2Zvcm1hdGlvblRvT3V0ZXJtb3N0Q29vcmRpbmF0ZVN5c3RlbSgq
dGV4dFJvb3RCbG9jaywgYWJzb2x1dGVUcmFuc2Zvcm0pOwotCisgICAgQWZmaW5lVHJhbnNmb3Jt
IGFic29sdXRlVHJhbnNmb3JtID0gU1ZHUmVuZGVyaW5nQ29udGV4dDo6Y2FsY3VsYXRlVHJhbnNm
b3JtYXRpb25Ub091dGVybW9zdENvb3JkaW5hdGVTeXN0ZW0oKnRleHRSb290QmxvY2spOwogICAg
IEZsb2F0UmVjdCByZXBhaW50UmVjdCA9IHRleHRSb290QmxvY2stPnJlcGFpbnRSZWN0SW5Mb2Nh
bENvb3JkaW5hdGVzKCk7Ci0gICAgc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVyPiBtYXNrSW1h
Z2U7Ci0gICAgaWYgKCFTVkdSZW5kZXJpbmdDb250ZXh0OjpjcmVhdGVJbWFnZUJ1ZmZlcihyZXBh
aW50UmVjdCwgYWJzb2x1dGVUcmFuc2Zvcm0sIG1hc2tJbWFnZSwgQ29sb3JTcGFjZURldmljZVJH
QiwgVW5hY2NlbGVyYXRlZCkpCisKKyAgICBhdXRvIG1hc2tJbWFnZSA9IFNWR1JlbmRlcmluZ0Nv
bnRleHQ6OmNyZWF0ZUltYWdlQnVmZmVyKHJlcGFpbnRSZWN0LCBhYnNvbHV0ZVRyYW5zZm9ybSwg
Q29sb3JTcGFjZURldmljZVJHQiwgVW5hY2NlbGVyYXRlZCk7CisgICAgaWYgKCFtYXNrSW1hZ2Up
CiAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgIEdyYXBoaWNzQ29udGV4dCogbWFza0ltYWdl
Q29udGV4dCA9IG1hc2tJbWFnZS0+Y29udGV4dCgpOwpAQCAtODAsMTAgKzc5LDEwIEBAIHN0YXRp
YyBpbmxpbmUgQWZmaW5lVHJhbnNmb3JtIGNsaXBUb1RleHQKICAgICBhdXRvKiB0ZXh0Um9vdEJs
b2NrID0gUmVuZGVyU1ZHVGV4dDo6bG9jYXRlUmVuZGVyU1ZHVGV4dEFuY2VzdG9yKCpvYmplY3Qp
OwogICAgIEFTU0VSVCh0ZXh0Um9vdEJsb2NrKTsKIAotICAgIEFmZmluZVRyYW5zZm9ybSBhYnNv
bHV0ZVRyYW5zZm9ybTsKLSAgICBTVkdSZW5kZXJpbmdDb250ZXh0OjpjYWxjdWxhdGVUcmFuc2Zv
cm1hdGlvblRvT3V0ZXJtb3N0Q29vcmRpbmF0ZVN5c3RlbSgqdGV4dFJvb3RCbG9jaywgYWJzb2x1
dGVUcmFuc2Zvcm0pOworICAgIEFmZmluZVRyYW5zZm9ybSBhYnNvbHV0ZVRyYW5zZm9ybSA9IFNW
R1JlbmRlcmluZ0NvbnRleHQ6OmNhbGN1bGF0ZVRyYW5zZm9ybWF0aW9uVG9PdXRlcm1vc3RDb29y
ZGluYXRlU3lzdGVtKCp0ZXh0Um9vdEJsb2NrKTsKIAogICAgIHRhcmdldFJlY3QgPSB0ZXh0Um9v
dEJsb2NrLT5yZXBhaW50UmVjdEluTG9jYWxDb29yZGluYXRlcygpOworCiAgICAgU1ZHUmVuZGVy
aW5nQ29udGV4dDo6Y2xpcFRvSW1hZ2VCdWZmZXIoY29udGV4dCwgYWJzb2x1dGVUcmFuc2Zvcm0s
IHRhcmdldFJlY3QsIGltYWdlQnVmZmVyLCBmYWxzZSk7CiAKICAgICBBZmZpbmVUcmFuc2Zvcm0g
bWF0cml4OwpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNv
dXJjZU1hc2tlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2
Zy9SZW5kZXJTVkdSZXNvdXJjZU1hc2tlci5jcHAJKHJldmlzaW9uIDE4Mzc1NikKKysrIFNvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VNYXNrZXIuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC02MywxNiArNjMsMTQgQEAgYm9vbCBSZW5kZXJTVkdSZXNvdXJjZU1hc2tl
cjo6YXBwbHlTVkdNYQogICAgICAgICBtX21hc2tlci5zZXQoJnJlbmRlcmVyLCBzdGQ6Om1ha2Vf
dW5pcXVlPE1hc2tlckRhdGE+KCkpOwogCiAgICAgTWFza2VyRGF0YSogbWFza2VyRGF0YSA9IG1f
bWFza2VyLmdldCgmcmVuZGVyZXIpOwotCi0gICAgQWZmaW5lVHJhbnNmb3JtIGFic29sdXRlVHJh
bnNmb3JtOwotICAgIFNWR1JlbmRlcmluZ0NvbnRleHQ6OmNhbGN1bGF0ZVRyYW5zZm9ybWF0aW9u
VG9PdXRlcm1vc3RDb29yZGluYXRlU3lzdGVtKHJlbmRlcmVyLCBhYnNvbHV0ZVRyYW5zZm9ybSk7
Ci0KKyAgICBBZmZpbmVUcmFuc2Zvcm0gYWJzb2x1dGVUcmFuc2Zvcm0gPSBTVkdSZW5kZXJpbmdD
b250ZXh0OjpjYWxjdWxhdGVUcmFuc2Zvcm1hdGlvblRvT3V0ZXJtb3N0Q29vcmRpbmF0ZVN5c3Rl
bShyZW5kZXJlcik7CiAgICAgRmxvYXRSZWN0IHJlcGFpbnRSZWN0ID0gcmVuZGVyZXIucmVwYWlu
dFJlY3RJbkxvY2FsQ29vcmRpbmF0ZXMoKTsKIAogICAgIGlmICghbWFza2VyRGF0YS0+bWFza0lt
YWdlICYmICFyZXBhaW50UmVjdC5pc0VtcHR5KCkpIHsKICAgICAgICAgY29uc3QgU1ZHUmVuZGVy
U3R5bGUmIHN2Z1N0eWxlID0gc3R5bGUoKS5zdmdTdHlsZSgpOwogICAgICAgICBDb2xvclNwYWNl
IGNvbG9yU3BhY2UgPSBzdmdTdHlsZS5jb2xvckludGVycG9sYXRpb24oKSA9PSBDSV9MSU5FQVJS
R0IgPyBDb2xvclNwYWNlTGluZWFyUkdCIDogQ29sb3JTcGFjZURldmljZVJHQjsKLSAgICAgICAg
aWYgKCFTVkdSZW5kZXJpbmdDb250ZXh0OjpjcmVhdGVJbWFnZUJ1ZmZlcihyZXBhaW50UmVjdCwg
YWJzb2x1dGVUcmFuc2Zvcm0sIG1hc2tlckRhdGEtPm1hc2tJbWFnZSwgY29sb3JTcGFjZSwgVW5h
Y2NlbGVyYXRlZCkpCisgICAgICAgIG1hc2tlckRhdGEtPm1hc2tJbWFnZSA9IFNWR1JlbmRlcmlu
Z0NvbnRleHQ6OmNyZWF0ZUltYWdlQnVmZmVyKHJlcGFpbnRSZWN0LCBhYnNvbHV0ZVRyYW5zZm9y
bSwgY29sb3JTcGFjZSwgVW5hY2NlbGVyYXRlZCk7CisgICAgICAgIGlmICghbWFza2VyRGF0YS0+
bWFza0ltYWdlKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgICAgIGlmICghZHJh
d0NvbnRlbnRJbnRvTWFza0ltYWdlKG1hc2tlckRhdGEsIGNvbG9yU3BhY2UsICZyZW5kZXJlcikp
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291cmNlUGF0
dGVybi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5k
ZXJTVkdSZXNvdXJjZVBhdHRlcm4uY3BwCShyZXZpc2lvbiAxODM3NTYpCisrKyBTb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291cmNlUGF0dGVybi5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTcwLDIwICs3MCwxOSBAQCBQYXR0ZXJuRGF0YSogUmVuZGVyU1ZHUmVzb3VyY2VQ
YXR0ZXJuOjpiCiAKICAgICAvLyBJZiB3ZSBjb3VsZG4ndCBkZXRlcm1pbmUgdGhlIHBhdHRlcm4g
Y29udGVudCBlbGVtZW50IHJvb3QsIHN0b3AgaGVyZS4KICAgICBpZiAoIW1fYXR0cmlidXRlcy5w
YXR0ZXJuQ29udGVudEVsZW1lbnQoKSkKLSAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIHJldHVy
biBudWxscHRyOwogCiAgICAgLy8gQW4gZW1wdHkgdmlld0JveCBkaXNhYmxlcyByZW5kZXJpbmcu
CiAgICAgaWYgKG1fYXR0cmlidXRlcy5oYXNWaWV3Qm94KCkgJiYgbV9hdHRyaWJ1dGVzLnZpZXdC
b3goKS5pc0VtcHR5KCkpCi0gICAgICAgIHJldHVybiAwOworICAgICAgICByZXR1cm4gbnVsbHB0
cjsKIAogICAgIC8vIENvbXB1dGUgYWxsIG5lY2Vzc2FyeSB0cmFuc2Zvcm1hdGlvbnMgdG8gYnVp
bGQgdGhlIHRpbGUgaW1hZ2UgJiB0aGUgcGF0dGVybi4KICAgICBGbG9hdFJlY3QgdGlsZUJvdW5k
YXJpZXM7CiAgICAgQWZmaW5lVHJhbnNmb3JtIHRpbGVJbWFnZVRyYW5zZm9ybTsKICAgICBpZiAo
IWJ1aWxkVGlsZUltYWdlVHJhbnNmb3JtKHJlbmRlcmVyLCBtX2F0dHJpYnV0ZXMsIHBhdHRlcm5F
bGVtZW50KCksIHRpbGVCb3VuZGFyaWVzLCB0aWxlSW1hZ2VUcmFuc2Zvcm0pKQotICAgICAgICBy
ZXR1cm4gMDsKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAKLSAgICBBZmZpbmVUcmFuc2Zvcm0g
YWJzb2x1dGVUcmFuc2Zvcm1JZ25vcmluZ1JvdGF0aW9uOwotICAgIFNWR1JlbmRlcmluZ0NvbnRl
eHQ6OmNhbGN1bGF0ZVRyYW5zZm9ybWF0aW9uVG9PdXRlcm1vc3RDb29yZGluYXRlU3lzdGVtKHJl
bmRlcmVyLCBhYnNvbHV0ZVRyYW5zZm9ybUlnbm9yaW5nUm90YXRpb24pOworICAgIEFmZmluZVRy
YW5zZm9ybSBhYnNvbHV0ZVRyYW5zZm9ybUlnbm9yaW5nUm90YXRpb24gPSBTVkdSZW5kZXJpbmdD
b250ZXh0OjpjYWxjdWxhdGVUcmFuc2Zvcm1hdGlvblRvT3V0ZXJtb3N0Q29vcmRpbmF0ZVN5c3Rl
bShyZW5kZXJlcik7CiAKICAgICAvLyBJZ25vcmUgMkQgcm90YXRpb24sIGFzIGl0IGRvZXNuJ3Qg
YWZmZWN0IHRoZSBzaXplIG9mIHRoZSB0aWxlLgogICAgIFNWR1JlbmRlcmluZ0NvbnRleHQ6OmNs
ZWFyMkRSb3RhdGlvbihhYnNvbHV0ZVRyYW5zZm9ybUlnbm9yaW5nUm90YXRpb24pOwpAQCAtOTUs
MTMgKzk0LDEzIEBAIFBhdHRlcm5EYXRhKiBSZW5kZXJTVkdSZXNvdXJjZVBhdHRlcm46OmIKICAg
ICAgICAgc3RhdGljX2Nhc3Q8ZmxvYXQ+KG1fYXR0cmlidXRlcy5wYXR0ZXJuVHJhbnNmb3JtKCku
eVNjYWxlKCkpKTsKIAogICAgIC8vIEJ1aWxkIHRpbGUgaW1hZ2UuCi0gICAgc3RkOjp1bmlxdWVf
cHRyPEltYWdlQnVmZmVyPiB0aWxlSW1hZ2UgPSBjcmVhdGVUaWxlSW1hZ2UobV9hdHRyaWJ1dGVz
LCB0aWxlQm91bmRhcmllcywgYWJzb2x1dGVUaWxlQm91bmRhcmllcywgdGlsZUltYWdlVHJhbnNm
b3JtLCBjbGFtcGVkQWJzb2x1dGVUaWxlQm91bmRhcmllcyk7CisgICAgYXV0byB0aWxlSW1hZ2Ug
PSBjcmVhdGVUaWxlSW1hZ2UobV9hdHRyaWJ1dGVzLCB0aWxlQm91bmRhcmllcywgYWJzb2x1dGVU
aWxlQm91bmRhcmllcywgdGlsZUltYWdlVHJhbnNmb3JtLCBjbGFtcGVkQWJzb2x1dGVUaWxlQm91
bmRhcmllcyk7CiAgICAgaWYgKCF0aWxlSW1hZ2UpCi0gICAgICAgIHJldHVybiAwOworICAgICAg
ICByZXR1cm4gbnVsbHB0cjsKIAogICAgIFJlZlB0cjxJbWFnZT4gY29waWVkSW1hZ2UgPSB0aWxl
SW1hZ2UtPmNvcHlJbWFnZShDb3B5QmFja2luZ1N0b3JlKTsKICAgICBpZiAoIWNvcGllZEltYWdl
KQotICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAKICAgICAvLyBC
dWlsZCBwYXR0ZXJuLgogICAgIGF1dG8gcGF0dGVybkRhdGEgPSBzdGQ6Om1ha2VfdW5pcXVlPFBh
dHRlcm5EYXRhPigpOwpAQCAtMjMzLDExICsyMzIsOSBAQCBib29sIFJlbmRlclNWR1Jlc291cmNl
UGF0dGVybjo6YnVpbGRUaWxlCiAKIHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlcj4gUmVuZGVy
U1ZHUmVzb3VyY2VQYXR0ZXJuOjpjcmVhdGVUaWxlSW1hZ2UoY29uc3QgUGF0dGVybkF0dHJpYnV0
ZXMmIGF0dHJpYnV0ZXMsIGNvbnN0IEZsb2F0UmVjdCYgdGlsZUJvdW5kYXJpZXMsIGNvbnN0IEZs
b2F0UmVjdCYgYWJzb2x1dGVUaWxlQm91bmRhcmllcywgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiB0
aWxlSW1hZ2VUcmFuc2Zvcm0sIEZsb2F0UmVjdCYgY2xhbXBlZEFic29sdXRlVGlsZUJvdW5kYXJp
ZXMpIGNvbnN0CiB7Ci0gICAgY2xhbXBlZEFic29sdXRlVGlsZUJvdW5kYXJpZXMgPSBTVkdSZW5k
ZXJpbmdDb250ZXh0OjpjbGFtcGVkQWJzb2x1dGVUYXJnZXRSZWN0KGFic29sdXRlVGlsZUJvdW5k
YXJpZXMpOwotCi0gICAgc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVyPiB0aWxlSW1hZ2U7Ci0K
LSAgICBpZiAoIVNWR1JlbmRlcmluZ0NvbnRleHQ6OmNyZWF0ZUltYWdlQnVmZmVyRm9yUGF0dGVy
bihhYnNvbHV0ZVRpbGVCb3VuZGFyaWVzLCBjbGFtcGVkQWJzb2x1dGVUaWxlQm91bmRhcmllcywg
dGlsZUltYWdlLCBDb2xvclNwYWNlRGV2aWNlUkdCLCBVbmFjY2VsZXJhdGVkKSkKKyAgICBjbGFt
cGVkQWJzb2x1dGVUaWxlQm91bmRhcmllcyA9IEltYWdlQnVmZmVyOjpjbGFtcGVkUmVjdChhYnNv
bHV0ZVRpbGVCb3VuZGFyaWVzKTsKKyAgICBhdXRvIHRpbGVJbWFnZSA9IFNWR1JlbmRlcmluZ0Nv
bnRleHQ6OmNyZWF0ZUltYWdlQnVmZmVyKGFic29sdXRlVGlsZUJvdW5kYXJpZXMsIGNsYW1wZWRB
YnNvbHV0ZVRpbGVCb3VuZGFyaWVzLCBDb2xvclNwYWNlRGV2aWNlUkdCLCBVbmFjY2VsZXJhdGVk
KTsKKyAgICBpZiAoIXRpbGVJbWFnZSkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAKICAgICBH
cmFwaGljc0NvbnRleHQqIHRpbGVJbWFnZUNvbnRleHQgPSB0aWxlSW1hZ2UtPmNvbnRleHQoKTsK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHUmVuZGVyaW5nQ29udGV4dC5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdSZW5kZXJp
bmdDb250ZXh0LmNwcAkocmV2aXNpb24gMTgzNzU2KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL3N2Zy9TVkdSZW5kZXJpbmdDb250ZXh0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzksOCAr
MzksNiBAQAogI2luY2x1ZGUgIlNWR1Jlc291cmNlcy5oIgogI2luY2x1ZGUgIlNWR1Jlc291cmNl
c0NhY2hlLmgiCiAKLXN0YXRpYyBpbnQga01heEltYWdlQnVmZmVyU2l6ZSA9IDQwOTY7Ci0KIG5h
bWVzcGFjZSBXZWJDb3JlIHsKIAogc3RhdGljIGlubGluZSBib29sIGlzUmVuZGVyaW5nTWFza0lt
YWdlKGNvbnN0IFJlbmRlck9iamVjdCYgb2JqZWN0KQpAQCAtMjA0LDE0ICsyMDIsMTMgQEAgc3Rh
dGljIEFmZmluZVRyYW5zZm9ybSYgY3VycmVudENvbnRlbnRUcgogCiBmbG9hdCBTVkdSZW5kZXJp
bmdDb250ZXh0OjpjYWxjdWxhdGVTY3JlZW5Gb250U2l6ZVNjYWxpbmdGYWN0b3IoY29uc3QgUmVu
ZGVyT2JqZWN0JiByZW5kZXJlcikKIHsKLSAgICBBZmZpbmVUcmFuc2Zvcm0gY3RtOwotICAgIGNh
bGN1bGF0ZVRyYW5zZm9ybWF0aW9uVG9PdXRlcm1vc3RDb29yZGluYXRlU3lzdGVtKHJlbmRlcmVy
LCBjdG0pOworICAgIEFmZmluZVRyYW5zZm9ybSBjdG0gPSBjYWxjdWxhdGVUcmFuc2Zvcm1hdGlv
blRvT3V0ZXJtb3N0Q29vcmRpbmF0ZVN5c3RlbShyZW5kZXJlcik7CiAgICAgcmV0dXJuIG5hcnJv
d1ByZWNpc2lvblRvRmxvYXQoc3FydCgocG93KGN0bS54U2NhbGUoKSwgMikgKyBwb3coY3RtLnlT
Y2FsZSgpLCAyKSkgLyAyKSk7CiB9CiAKLXZvaWQgU1ZHUmVuZGVyaW5nQ29udGV4dDo6Y2FsY3Vs
YXRlVHJhbnNmb3JtYXRpb25Ub091dGVybW9zdENvb3JkaW5hdGVTeXN0ZW0oY29uc3QgUmVuZGVy
T2JqZWN0JiByZW5kZXJlciwgQWZmaW5lVHJhbnNmb3JtJiBhYnNvbHV0ZVRyYW5zZm9ybSkKK0Fm
ZmluZVRyYW5zZm9ybSBTVkdSZW5kZXJpbmdDb250ZXh0OjpjYWxjdWxhdGVUcmFuc2Zvcm1hdGlv
blRvT3V0ZXJtb3N0Q29vcmRpbmF0ZVN5c3RlbShjb25zdCBSZW5kZXJPYmplY3QmIHJlbmRlcmVy
KQogewotICAgIGFic29sdXRlVHJhbnNmb3JtID0gY3VycmVudENvbnRlbnRUcmFuc2Zvcm1hdGlv
bigpOworICAgIEFmZmluZVRyYW5zZm9ybSBhYnNvbHV0ZVRyYW5zZm9ybSA9IGN1cnJlbnRDb250
ZW50VHJhbnNmb3JtYXRpb24oKTsKIAogICAgIGZsb2F0IGRldmljZVNjYWxlRmFjdG9yID0gcmVu
ZGVyZXIuZG9jdW1lbnQoKS5kZXZpY2VTY2FsZUZhY3RvcigpOwogICAgIC8vIFdhbGsgdXAgdGhl
IHJlbmRlciB0cmVlLCBhY2N1bXVsYXRpbmcgU1ZHIHRyYW5zZm9ybXMuCkBAIC0yMzcsNTMgKzIz
NCw1NSBAQCB2b2lkIFNWR1JlbmRlcmluZ0NvbnRleHQ6OmNhbGN1bGF0ZVRyYW5zCiAgICAgfQog
CiAgICAgYWJzb2x1dGVUcmFuc2Zvcm0uc2NhbGUoZGV2aWNlU2NhbGVGYWN0b3IpOworICAgIHJl
dHVybiBhYnNvbHV0ZVRyYW5zZm9ybTsKIH0KIAotYm9vbCBTVkdSZW5kZXJpbmdDb250ZXh0Ojpj
cmVhdGVJbWFnZUJ1ZmZlcihjb25zdCBGbG9hdFJlY3QmIHRhcmdldFJlY3QsIGNvbnN0IEFmZmlu
ZVRyYW5zZm9ybSYgYWJzb2x1dGVUcmFuc2Zvcm0sIHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZl
cj4mIGltYWdlQnVmZmVyLCBDb2xvclNwYWNlIGNvbG9yU3BhY2UsIFJlbmRlcmluZ01vZGUgcmVu
ZGVyaW5nTW9kZSkKK3N0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlcj4gU1ZHUmVuZGVyaW5nQ29u
dGV4dDo6Y3JlYXRlSW1hZ2VCdWZmZXIoY29uc3QgRmxvYXRSZWN0JiB0YXJnZXRSZWN0LCBjb25z
dCBBZmZpbmVUcmFuc2Zvcm0mIGFic29sdXRlVHJhbnNmb3JtLCBDb2xvclNwYWNlIGNvbG9yU3Bh
Y2UsIFJlbmRlcmluZ01vZGUgcmVuZGVyaW5nTW9kZSkKIHsKICAgICBJbnRSZWN0IHBhaW50UmVj
dCA9IGNhbGN1bGF0ZUltYWdlQnVmZmVyUmVjdCh0YXJnZXRSZWN0LCBhYnNvbHV0ZVRyYW5zZm9y
bSk7CiAgICAgLy8gRG9uJ3QgY3JlYXRlIGVtcHR5IEltYWdlQnVmZmVycy4KICAgICBpZiAocGFp
bnRSZWN0LmlzRW1wdHkoKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICByZXR1cm4g
bnVsbHB0cjsKIAotICAgIEludFNpemUgY2xhbXBlZFNpemUgPSBjbGFtcGVkQWJzb2x1dGVTaXpl
KHBhaW50UmVjdC5zaXplKCkpOwotICAgIHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlcj4gaW1h
Z2UgPSBJbWFnZUJ1ZmZlcjo6Y3JlYXRlKGNsYW1wZWRTaXplLCAxLCBjb2xvclNwYWNlLCByZW5k
ZXJpbmdNb2RlKTsKLSAgICBpZiAoIWltYWdlKQotICAgICAgICByZXR1cm4gZmFsc2U7CisgICAg
RmxvYXRTaXplIHNjYWxlOworICAgIEZsb2F0U2l6ZSBjbGFtcGVkU2l6ZSA9IEltYWdlQnVmZmVy
OjpjbGFtcGVkU2l6ZShwYWludFJlY3Quc2l6ZSgpLCBzY2FsZSk7CiAKLSAgICBHcmFwaGljc0Nv
bnRleHQqIGltYWdlQ29udGV4dCA9IGltYWdlLT5jb250ZXh0KCk7Ci0gICAgQVNTRVJUKGltYWdl
Q29udGV4dCk7CisgICAgYXV0byBpbWFnZUJ1ZmZlciA9IEltYWdlQnVmZmVyOjpjcmVhdGUoY2xh
bXBlZFNpemUsIDEsIGNvbG9yU3BhY2UsIHJlbmRlcmluZ01vZGUpOworICAgIGlmICghaW1hZ2VC
dWZmZXIpCisgICAgICAgIHJldHVybiBudWxscHRyOwogCi0gICAgaW1hZ2VDb250ZXh0LT5zY2Fs
ZShGbG9hdFNpemUoc3RhdGljX2Nhc3Q8ZmxvYXQ+KGNsYW1wZWRTaXplLndpZHRoKCkpIC8gcGFp
bnRSZWN0LndpZHRoKCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGlj
X2Nhc3Q8ZmxvYXQ+KGNsYW1wZWRTaXplLmhlaWdodCgpKSAvIHBhaW50UmVjdC5oZWlnaHQoKSkp
OwotICAgIGltYWdlQ29udGV4dC0+dHJhbnNsYXRlKC1wYWludFJlY3QueCgpLCAtcGFpbnRSZWN0
LnkoKSk7Ci0gICAgaW1hZ2VDb250ZXh0LT5jb25jYXRDVE0oYWJzb2x1dGVUcmFuc2Zvcm0pOwor
ICAgIEFmZmluZVRyYW5zZm9ybSB0cmFuc2Zvcm07CisgICAgdHJhbnNmb3JtICo9IEFmZmluZVRy
YW5zZm9ybSgpLnNjYWxlKHNjYWxlLndpZHRoKCksIHNjYWxlLmhlaWdodCgpKTsKKyAgICB0cmFu
c2Zvcm0gKj0gQWZmaW5lVHJhbnNmb3JtKCkudHJhbnNsYXRlKC1wYWludFJlY3QueCgpLCAtcGFp
bnRSZWN0LnkoKSk7CisgICAgdHJhbnNmb3JtICo9IGFic29sdXRlVHJhbnNmb3JtOwogCi0gICAg
aW1hZ2VCdWZmZXIgPSBXVEY6Om1vdmUoaW1hZ2UpOwotICAgIHJldHVybiB0cnVlOworICAgIEdy
YXBoaWNzQ29udGV4dCogaW1hZ2VDb250ZXh0ID0gaW1hZ2VCdWZmZXItPmNvbnRleHQoKTsKKyAg
ICBBU1NFUlQoaW1hZ2VDb250ZXh0KTsKKyAgICBpbWFnZUNvbnRleHQtPmNvbmNhdENUTSh0cmFu
c2Zvcm0pOworCisgICAgcmV0dXJuIGltYWdlQnVmZmVyOwogfQogCi1ib29sIFNWR1JlbmRlcmlu
Z0NvbnRleHQ6OmNyZWF0ZUltYWdlQnVmZmVyRm9yUGF0dGVybihjb25zdCBGbG9hdFJlY3QmIGFi
c29sdXRlVGFyZ2V0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBjbGFtcGVkQWJzb2x1dGVUYXJnZXRS
ZWN0LCBzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXI+JiBpbWFnZUJ1ZmZlciwgQ29sb3JTcGFj
ZSBjb2xvclNwYWNlLCBSZW5kZXJpbmdNb2RlIHJlbmRlcmluZ01vZGUpCitzdGQ6OnVuaXF1ZV9w
dHI8SW1hZ2VCdWZmZXI+IFNWR1JlbmRlcmluZ0NvbnRleHQ6OmNyZWF0ZUltYWdlQnVmZmVyKGNv
bnN0IEZsb2F0UmVjdCYgdGFyZ2V0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBjbGFtcGVkUmVjdCwg
Q29sb3JTcGFjZSBjb2xvclNwYWNlLCBSZW5kZXJpbmdNb2RlIHJlbmRlcmluZ01vZGUpCiB7Ci0g
ICAgSW50U2l6ZSBpbWFnZVNpemUocm91bmRlZEludFNpemUoY2xhbXBlZEFic29sdXRlVGFyZ2V0
UmVjdC5zaXplKCkpKTsKLSAgICBJbnRTaXplIHVuY2xhbXBlZEltYWdlU2l6ZShyb3VuZGVkSW50
U2l6ZShhYnNvbHV0ZVRhcmdldFJlY3Quc2l6ZSgpKSk7CisgICAgSW50U2l6ZSBjbGFtcGVkU2l6
ZSA9IHJvdW5kZWRJbnRTaXplKGNsYW1wZWRSZWN0LnNpemUoKSk7CisgICAgSW50U2l6ZSB1bmNs
YW1wZWRTaXplID0gcm91bmRlZEludFNpemUodGFyZ2V0UmVjdC5zaXplKCkpOwogCiAgICAgLy8g
RG9uJ3QgY3JlYXRlIGVtcHR5IEltYWdlQnVmZmVycy4KLSAgICBpZiAoaW1hZ2VTaXplLmlzRW1w
dHkoKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGlmIChjbGFtcGVkU2l6ZS5pc0VtcHR5
KCkpCisgICAgICAgIHJldHVybiBudWxscHRyOwogCi0gICAgc3RkOjp1bmlxdWVfcHRyPEltYWdl
QnVmZmVyPiBpbWFnZSA9IEltYWdlQnVmZmVyOjpjcmVhdGUoaW1hZ2VTaXplLCAxLCBjb2xvclNw
YWNlLCByZW5kZXJpbmdNb2RlKTsKLSAgICBpZiAoIWltYWdlKQotICAgICAgICByZXR1cm4gZmFs
c2U7CisgICAgYXV0byBpbWFnZUJ1ZmZlciA9IEltYWdlQnVmZmVyOjpjcmVhdGUoY2xhbXBlZFNp
emUsIDEsIGNvbG9yU3BhY2UsIHJlbmRlcmluZ01vZGUpOworICAgIGlmICghaW1hZ2VCdWZmZXIp
CisgICAgICAgIHJldHVybiBudWxscHRyOwogCi0gICAgR3JhcGhpY3NDb250ZXh0KiBpbWFnZUNv
bnRleHQgPSBpbWFnZS0+Y29udGV4dCgpOworICAgIEdyYXBoaWNzQ29udGV4dCogaW1hZ2VDb250
ZXh0ID0gaW1hZ2VCdWZmZXItPmNvbnRleHQoKTsKICAgICBBU1NFUlQoaW1hZ2VDb250ZXh0KTsK
IAogICAgIC8vIENvbXBlbnNhdGUgcm91bmRpbmcgZWZmZWN0cywgYXMgdGhlIGFic29sdXRlIHRh
cmdldCByZWN0IGlzIHVzaW5nIGZsb2F0aW5nLXBvaW50IG51bWJlcnMgYW5kIHRoZSBpbWFnZSBi
dWZmZXIgc2l6ZSBpcyBpbnRlZ2VyLgotICAgIGltYWdlQ29udGV4dC0+c2NhbGUoRmxvYXRTaXpl
KHVuY2xhbXBlZEltYWdlU2l6ZS53aWR0aCgpIC8gYWJzb2x1dGVUYXJnZXRSZWN0LndpZHRoKCks
IHVuY2xhbXBlZEltYWdlU2l6ZS5oZWlnaHQoKSAvIGFic29sdXRlVGFyZ2V0UmVjdC5oZWlnaHQo
KSkpOworICAgIGltYWdlQ29udGV4dC0+c2NhbGUoRmxvYXRTaXplKHVuY2xhbXBlZFNpemUud2lk
dGgoKSAvIHRhcmdldFJlY3Qud2lkdGgoKSwgdW5jbGFtcGVkU2l6ZS5oZWlnaHQoKSAvIHRhcmdl
dFJlY3QuaGVpZ2h0KCkpKTsKIAotICAgIGltYWdlQnVmZmVyID0gV1RGOjptb3ZlKGltYWdlKTsK
LSAgICByZXR1cm4gdHJ1ZTsKKyAgICByZXR1cm4gaW1hZ2VCdWZmZXI7CiB9CiAKIHZvaWQgU1ZH
UmVuZGVyaW5nQ29udGV4dDo6cmVuZGVyU3VidHJlZVRvSW1hZ2VCdWZmZXIoSW1hZ2VCdWZmZXIq
IGltYWdlLCBSZW5kZXJFbGVtZW50JiBpdGVtLCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHN1YnRy
ZWVDb250ZW50VHJhbnNmb3JtYXRpb24pCkBAIC0zMjIsMTggKzMyMSw2IEBAIHZvaWQgU1ZHUmVu
ZGVyaW5nQ29udGV4dDo6Y2xpcFRvSW1hZ2VCdWYKICAgICAgICAgaW1hZ2VCdWZmZXIucmVzZXQo
KTsKIH0KIAotRmxvYXRSZWN0IFNWR1JlbmRlcmluZ0NvbnRleHQ6OmNsYW1wZWRBYnNvbHV0ZVRh
cmdldFJlY3QoY29uc3QgRmxvYXRSZWN0JiBhYnNvbHV0ZVRhcmdldFJlY3QpCi17Ci0gICAgY29u
c3QgRmxvYXRTaXplIG1heEltYWdlQnVmZmVyU2l6ZShrTWF4SW1hZ2VCdWZmZXJTaXplLCBrTWF4
SW1hZ2VCdWZmZXJTaXplKTsKLSAgICByZXR1cm4gRmxvYXRSZWN0KGFic29sdXRlVGFyZ2V0UmVj
dC5sb2NhdGlvbigpLCBhYnNvbHV0ZVRhcmdldFJlY3Quc2l6ZSgpLnNocnVua1RvKG1heEltYWdl
QnVmZmVyU2l6ZSkpOwotfQotCi1JbnRTaXplIFNWR1JlbmRlcmluZ0NvbnRleHQ6OmNsYW1wZWRB
YnNvbHV0ZVNpemUoY29uc3QgSW50U2l6ZSYgYWJzb2x1dGVTaXplKQotewotICAgIGNvbnN0IElu
dFNpemUgbWF4SW1hZ2VCdWZmZXJTaXplKGtNYXhJbWFnZUJ1ZmZlclNpemUsIGtNYXhJbWFnZUJ1
ZmZlclNpemUpOwotICAgIHJldHVybiBhYnNvbHV0ZVNpemUuc2hydW5rVG8obWF4SW1hZ2VCdWZm
ZXJTaXplKTsKLX0KLQogdm9pZCBTVkdSZW5kZXJpbmdDb250ZXh0OjpjbGVhcjJEUm90YXRpb24o
QWZmaW5lVHJhbnNmb3JtJiB0cmFuc2Zvcm0pCiB7CiAgICAgQWZmaW5lVHJhbnNmb3JtOjpEZWNv
bXBvc2VkVHlwZSBkZWNvbXBvc2l0aW9uOwpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L3N2Zy9TVkdSZW5kZXJpbmdDb250ZXh0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL3N2Zy9TVkdSZW5kZXJpbmdDb250ZXh0LmgJKHJldmlzaW9uIDE4Mzc1NikKKysr
IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHUmVuZGVyaW5nQ29udGV4dC5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC03MSwxNyArNzEsMTQgQEAgcHVibGljOgogICAgIHZvaWQgcHJlcGFyZVRv
UmVuZGVyU1ZHQ29udGVudChSZW5kZXJFbGVtZW50JiwgUGFpbnRJbmZvJiwgTmVlZHNHcmFwaGlj
c0NvbnRleHRTYXZlID0gRG9udFNhdmVHcmFwaGljc0NvbnRleHQpOwogICAgIGJvb2wgaXNSZW5k
ZXJpbmdQcmVwYXJlZCgpIGNvbnN0IHsgcmV0dXJuIG1fcmVuZGVyaW5nRmxhZ3MgJiBSZW5kZXJp
bmdQcmVwYXJlZDsgfQogCi0gICAgc3RhdGljIGJvb2wgY3JlYXRlSW1hZ2VCdWZmZXIoY29uc3Qg
RmxvYXRSZWN0JiBwYWludFJlY3QsIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgYWJzb2x1dGVUcmFu
c2Zvcm0sIHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlcj4mLCBDb2xvclNwYWNlLCBSZW5kZXJp
bmdNb2RlKTsKLSAgICAvLyBQYXR0ZXJucyBuZWVkIGEgZGlmZmVyZW50IGZsb2F0LXRvLWludGVn
ZXIgY29vcmRpbmF0ZSBtYXBwaW5nLgotICAgIHN0YXRpYyBib29sIGNyZWF0ZUltYWdlQnVmZmVy
Rm9yUGF0dGVybihjb25zdCBGbG9hdFJlY3QmIGFic29sdXRlVGFyZ2V0UmVjdCwgY29uc3QgRmxv
YXRSZWN0JiBjbGFtcGVkQWJzb2x1dGVUYXJnZXRSZWN0LCBzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VC
dWZmZXI+JiwgQ29sb3JTcGFjZSwgUmVuZGVyaW5nTW9kZSk7CisgICAgc3RhdGljIHN0ZDo6dW5p
cXVlX3B0cjxJbWFnZUJ1ZmZlcj4gY3JlYXRlSW1hZ2VCdWZmZXIoY29uc3QgRmxvYXRSZWN0JiB0
YXJnZXRSZWN0LCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIGFic29sdXRlVHJhbnNmb3JtLCBDb2xv
clNwYWNlLCBSZW5kZXJpbmdNb2RlKTsKKyAgICBzdGF0aWMgc3RkOjp1bmlxdWVfcHRyPEltYWdl
QnVmZmVyPiBjcmVhdGVJbWFnZUJ1ZmZlcihjb25zdCBGbG9hdFJlY3QmIHRhcmdldFJlY3QsIGNv
bnN0IEZsb2F0UmVjdCYgY2xhbXBlZFJlY3QsIENvbG9yU3BhY2UsIFJlbmRlcmluZ01vZGUpOwog
CiAgICAgc3RhdGljIHZvaWQgcmVuZGVyU3VidHJlZVRvSW1hZ2VCdWZmZXIoSW1hZ2VCdWZmZXIq
LCBSZW5kZXJFbGVtZW50JiwgY29uc3QgQWZmaW5lVHJhbnNmb3JtJik7CiAgICAgc3RhdGljIHZv
aWQgY2xpcFRvSW1hZ2VCdWZmZXIoR3JhcGhpY3NDb250ZXh0KiwgY29uc3QgQWZmaW5lVHJhbnNm
b3JtJiBhYnNvbHV0ZVRyYW5zZm9ybSwgY29uc3QgRmxvYXRSZWN0JiB0YXJnZXRSZWN0LCBzdGQ6
OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXI+JiwgYm9vbCBzYWZlVG9DbGVhcik7CiAKICAgICBzdGF0
aWMgZmxvYXQgY2FsY3VsYXRlU2NyZWVuRm9udFNpemVTY2FsaW5nRmFjdG9yKGNvbnN0IFJlbmRl
ck9iamVjdCYpOwotICAgIHN0YXRpYyB2b2lkIGNhbGN1bGF0ZVRyYW5zZm9ybWF0aW9uVG9PdXRl
cm1vc3RDb29yZGluYXRlU3lzdGVtKGNvbnN0IFJlbmRlck9iamVjdCYsIEFmZmluZVRyYW5zZm9y
bSYgYWJzb2x1dGVUcmFuc2Zvcm0pOwotICAgIHN0YXRpYyBJbnRTaXplIGNsYW1wZWRBYnNvbHV0
ZVNpemUoY29uc3QgSW50U2l6ZSYpOwotICAgIHN0YXRpYyBGbG9hdFJlY3QgY2xhbXBlZEFic29s
dXRlVGFyZ2V0UmVjdChjb25zdCBGbG9hdFJlY3QmIGFic29sdXRlVGFyZ2V0UmVjdCk7CisgICAg
c3RhdGljIEFmZmluZVRyYW5zZm9ybSBjYWxjdWxhdGVUcmFuc2Zvcm1hdGlvblRvT3V0ZXJtb3N0
Q29vcmRpbmF0ZVN5c3RlbShjb25zdCBSZW5kZXJPYmplY3QmKTsKICAgICBzdGF0aWMgdm9pZCBj
bGVhcjJEUm90YXRpb24oQWZmaW5lVHJhbnNmb3JtJik7CiAKICAgICBzdGF0aWMgSW50UmVjdCBj
YWxjdWxhdGVJbWFnZUJ1ZmZlclJlY3QoY29uc3QgRmxvYXRSZWN0JiB0YXJnZXRSZWN0LCBjb25z
dCBBZmZpbmVUcmFuc2Zvcm0mIGFic29sdXRlVHJhbnNmb3JtKQpJbmRleDogTGF5b3V0VGVzdHMv
Q2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL0NoYW5nZUxvZwkocmV2aXNpb24g
MTgzODk5KQorKysgTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMg
KzEsMTUgQEAKKzIwMTUtMDUtMDYgIFNhaWQgQWJvdS1IYWxsYXdhICA8c2Fib3VoYWxsYXdhQGFw
cGxlLmNvbT4KKworICAgICAgICBBcHBseWluZyBhIGZpbHRlciBvbiBhbiBTVkcgZWxlbWVudCwg
d2hpY2ggaXMgbGFyZ2VyIHRoYW4gNDA5NiBwaXhlbHMsIGNhdXNlcyB0aGlzIGVsZW1lbnQgdG8g
YmUgcmVuZGVyZWQgc2hpZnRlZCB0byB0aGUgbGVmdAorICAgICAgICBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTQ0MzM1CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9C
T0RZIChPT1BTISkuCisKKyAgICAgICAgKiBzdmcvZmlsdGVycy9iaWctc2l6ZWQtb2ZmLXZpZXdw
b3J0LWZpbHRlci1leHBlY3RlZC5zdmc6IEFkZGVkLgorICAgICAgICAqIHN2Zy9maWx0ZXJzL2Jp
Zy1zaXplZC1vZmYtdmlld3BvcnQtZmlsdGVyLnN2ZzogQWRkZWQuCisgICAgICAgIEVuc3VyZSB3
aGVuIGFwcGx5aW5nIGEgZmlsdGVyIG9uIGEgbGFyZ2UgU1ZHIGVsZW1lbnQsIHRoZSB2aWV3cG9y
dCBvZiB0aGUKKyAgICAgICAgU1ZHIGluY2x1ZGVzIHRoZSBjb3JyZWN0IGRyYXdpbmcgcGFydCBv
ZiB0aGlzIGVsZW1lbnQuCisKIDIwMTUtMDUtMDYgIEpvbiBMZWUgIDxqb25sZWVAYXBwbGUuY29t
PgogCiAgICAgICAgIEV4cG9zZSBtb3JlIGZvbnQgd2VpZ2h0cyBmb3IgLWFwcGxlLXN5c3RlbQpJ
bmRleDogTGF5b3V0VGVzdHMvc3ZnL2ZpbHRlcnMvYmlnLXNpemVkLW9mZi12aWV3cG9ydC1maWx0
ZXItZXhwZWN0ZWQuc3ZnCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL3N2Zy9maWx0ZXJzL2Jp
Zy1zaXplZC1vZmYtdmlld3BvcnQtZmlsdGVyLWV4cGVjdGVkLnN2ZwkocmV2aXNpb24gMCkKKysr
IExheW91dFRlc3RzL3N2Zy9maWx0ZXJzL2JpZy1zaXplZC1vZmYtdmlld3BvcnQtZmlsdGVyLWV4
cGVjdGVkLnN2Zwkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDEwIEBACis8c3ZnIHhtbG5zPSJo
dHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgdmlld0JveD0iMCAwIDEwMDAgNTAwIj4KKyAgPGZp
bHRlciBpZD0ic2F0dXJhdGUtYmFjayI+CisgICAgPGZlQ29sb3JNYXRyaXggaW49IlNvdXJjZUdy
YXBoaWMiIHR5cGU9InNhdHVyYXRlIiB2YWx1ZXM9IjEiLz4KKyAgPC9maWx0ZXI+CisgIDxnIGZp
bHRlcj0idXJsKCNzYXR1cmF0ZS1iYWNrKSI+CisgICAgPHJlY3QgeD0iLTUwMCIgeT0iMCIgd2lk
dGg9Ijk1MCIgaGVpZ2h0PSIxMDAlIiBmaWxsPSJncmVlbiIvPgorICAgIDxyZWN0IHg9IjU1MCIg
eT0iMCIgd2lkdGg9Ijk1MCIgaGVpZ2h0PSIxMDAlIiBmaWxsPSJncmVlbiIvPgorICA8L2c+Cisg
IDxyZWN0IHg9IjQ1MCIgeT0iMCIgd2lkdGg9IjEwMCIgaGVpZ2h0PSIxMDAlIiBmaWxsPSJub25l
IiBzdHJva2U9IndoaXRlIiBzdHJva2Utd2lkdGg9IjEwIi8+Cis8L3N2Zz4KSW5kZXg6IExheW91
dFRlc3RzL3N2Zy9maWx0ZXJzL2JpZy1zaXplZC1vZmYtdmlld3BvcnQtZmlsdGVyLnN2Zwo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9zdmcvZmlsdGVycy9iaWctc2l6ZWQtb2ZmLXZpZXdwb3J0
LWZpbHRlci5zdmcJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9zdmcvZmlsdGVycy9iaWct
c2l6ZWQtb2ZmLXZpZXdwb3J0LWZpbHRlci5zdmcJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwx
MSBAQAorPHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAg
MCAxMDAwIDUwMCI+CisgIDxmaWx0ZXIgaWQ9InNhdHVyYXRlLWJhY2siPgorICAgIDxmZUNvbG9y
TWF0cml4IGluPSJTb3VyY2VHcmFwaGljIiB0eXBlPSJzYXR1cmF0ZSIgdmFsdWVzPSIxIi8+Cisg
IDwvZmlsdGVyPgorICA8ZyBmaWx0ZXI9InVybCgjc2F0dXJhdGUtYmFjaykiPgorICAgIDxyZWN0
IHg9Ii0zNTAwIiB5PSIwIiB3aWR0aD0iMzk1MCIgaGVpZ2h0PSIxMDAlIiBmaWxsPSJncmVlbiIv
PgorICAgIDxyZWN0IHg9IjU1MCIgeT0iMCIgd2lkdGg9IjM5NTAiIGhlaWdodD0iMTAwJSIgZmls
bD0iZ3JlZW4iLz4KKyAgPC9nPgorICA8IS0tIG1ha2UgdGhlIGVkZ2VzIG9mIHRoZSByZWN0YW5n
bGVzIHNoYXJwIGFmdGVyIGNsYW1waW5nIHRoZSBmaWx0ZXIgaW1hZ2UgYW5kIHNjYWxpbmcgaXQg
dXAgLS0+CisgIDxyZWN0IHg9IjQ1MCIgeT0iMCIgd2lkdGg9IjEwMCIgaGVpZ2h0PSIxMDAlIiBm
aWxsPSJub25lIiBzdHJva2U9IndoaXRlIiBzdHJva2Utd2lkdGg9IjEwIi8+Cis8L3N2Zz4K
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>252553</attachid>
            <date>2015-05-06 18:47:13 -0700</date>
            <delta_ts>2015-05-07 14:09:03 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-144335-20150506184557.patch</filename>
            <type>text/plain</type>
            <size>41288</size>
            <attacher name="Said Abou-Hallawa">sabouhallawa</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDE4Mzg5OSkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDEwMiBAQAorMjAxNS0wNS0wNiAgU2FpZCBB
Ym91LUhhbGxhd2EgIDxzYWJvdWhhbGxhd2FAYXBwbGUuY29tPgorCisgICAgICAgIEFwcGx5aW5n
IGEgZmlsdGVyIG9uIGFuIFNWRyBlbGVtZW50LCB3aGljaCBpcyBsYXJnZXIgdGhhbiA0MDk2IHBp
eGVscywgY2F1c2VzIHRoaXMgZWxlbWVudCB0byBiZSByZW5kZXJlZCBzaGlmdGVkIHRvIHRoZSBs
ZWZ0CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNDQz
MzUKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBXaGVu
IHRoZSBTVkcgZWxlbWVudCBpcyBsYXJnZXIgdGhhbiA0MDk2eDQwOTYgcGl4ZWxzIGFuZCBpdCBo
YXMgYSBmaWx0ZXIsCisgICAgICAgIGEgY2xpcHBlciBvciBhIG1hc2tlciwgdGhlIEltYWdlQnVm
ZmVyIHdoaWNoIGlzIGNyZWF0ZWQgZm9yIGRyYXdpbmcgdGhlCisgICAgICAgIHNvdXJjZUdyYXBo
aWNCdWZmZXIgaGFzIHRvIGJlIGNsYW1wZWQgdG8gdGhpcyBzaXplLiBUaGUgcmVhc29uIGZvciB0
aGlzCisgICAgICAgIGNsYW1waW5nIGlzIHRoZSBGaWx0ZXJFZmZlY3Qgc2ltcGx5IGlnbm9yZXMg
cHJvY2Vzc2luZyBhbnkgSW1hZ2VCdWZmZXIKKyAgICAgICAgbGFyZ2VyIHRoYW4gdGhpcyBzaXpl
LgorICAgICAgICAKKyAgICAgICAgVGhlIGJ1ZyB3YXMgaGFwcGVuaW5nIGJlY2F1c2Ugd2UgZGlk
IG5vdCBwcm9wYWdhdGUgdGhlIGNsYW1waW5nIGxvZ2ljIHRvCisgICAgICAgIHRoZSBGaWx0ZXJF
ZmZlY3QuIFRoZSBGaWx0ZXJFZmZlY3QgcmVzdWx0IEltYWdlQnVmZmVyIHdhcyBub3QgY2xhbXBl
ZCBhcworICAgICAgICB3aGF0IHdlIGRvIGZvciBkcmF3aW5nIHRoZSBzb3VyY2VHcmFwaGljQnVm
ZmVyLiBJZiBvbmx5IHRoZSBkZXN0aW5hdGlvbgorICAgICAgICBwb2ludCBpcyBzcGVjaWZpZWQs
IHRoZSBHcmFwaGljc0NvbnRleHQ6OmRyYXdJbWFnZUJ1ZmZlcigpIGFzc3VtZXMgdGhlCisgICAg
ICAgIHNvdXJjZSBhbmQgdGhlIGRlc3RpbmF0aW9uIGltYWdlcyBoYXZlIHRoZSBzYW1lIHNpemUg
d2hpY2ggaXMgbm90IHRydWUKKyAgICAgICAgd2l0aCB0aGUgY2xhbXBpbmcuCisgICAgICAgIAor
ICAgICAgICBUaGUgZml4IGlzIHRvIGFkZCB0aGUgY2xhbXBpbmcgbG9naWMgdG8gdGhlIEZpbHRl
ckVmZmVjdC4gVHdvIHBsYWNlcyB3ZQorICAgICAgICBuZWVkIHRvIGNoYW5nZS4gKDEpIEZpbHRl
ckVmZmVjdDo6Y3JlYXRlSW1hZ2VCdWZmZXJSZXN1bHQoKSBoYXMgdG8gYXBwbHkKKyAgICAgICAg
dGhlIHNhbWUgY2xhbXBpbmcgd2UgZG8gaW4gU1ZHUmVuZGVyaW5nQ29udGV4dDo6Y3JlYXRlSW1h
Z2VCdWZmZXIoKS4gKDIpCisgICAgICAgIEZpbHRlckVmZmVjdDo6ZHJhd2luZ1JlZ2lvbk9mSW5w
dXRJbWFnZSgpIGhhcyB0byBjb25zaWRlciB0aGUgY2xhbXBpbmcgCisgICAgICAgIHdoZW4gbWFw
cGluZyBmcm9tIGFic29sdXRlIGNvb3JkaW5hdGVzIHRvIHRoZSBJbWFnZUJ1ZmZlciBjb29yZGlu
YXRlcy4KKyAgICAgICAgCisgICAgICAgIFRlc3RzOiBzdmcvZmlsdGVycy9iaWctc2l6ZWQtb2Zm
LXZpZXdwb3J0LWZpbHRlci5zdmcKKworICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0ltYWdl
QnVmZmVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyOjppc1NpemVDbGFtcGVk
KToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyOjpjbGFtcGVkU2l6ZSk6CisgICAgICAg
IChXZWJDb3JlOjpJbWFnZUJ1ZmZlcjo6Y2xhbXBlZFJlY3QpOgorICAgICAgICAqIHBsYXRmb3Jt
L2dyYXBoaWNzL0ltYWdlQnVmZmVyLmg6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlcjo6
c2V0U3BhY2VTaXplKTogTW92ZSBhbGwgdGhlIGNsYW1waW5nIGhlbHBlciBtZXRob2RzCisgICAg
ICAgIGZyb20gU1ZHUmVuZGVyaW5nQ29udGV4dCBhbmQgUmVuZGVyU1ZHUmVzb3VyY2VGaWx0ZXIg
dG8gdGhlIEltYWdlQnVmZmVyLgorICAgICAgICAKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGlj
cy9maWx0ZXJzL0ZFQ29sb3JNYXRyaXguY3BwOgorICAgICAgICAoV2ViQ29yZTo6RkVDb2xvck1h
dHJpeDo6cGxhdGZvcm1BcHBseVNvZnR3YXJlKTogVXNlIGxvZ2ljYWxTaXplKCkgb2YgdGhlCisg
ICAgICAgIHJlc3VsdCBpbWFnZSBpbnN0ZWFkIG9mIHVzaW5nIGFic29sdXRlUGFpbnRSZWN0KCku
IFRoZSBsYXRlciByZXR1cm5zIHRoZQorICAgICAgICByZWN0YW5nbGUgb2YgdGhlIGVsZW1lbnQg
d2l0aG91dCBjbGFtcGluZy4KKyAgICAgICAgCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mv
ZmlsdGVycy9GRVRpbGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RkVUaWxlOjpwbGF0Zm9ybUFw
cGx5U29mdHdhcmUpOgorICAgICAgICAqIHJlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VD
bGlwcGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclNWR1Jlc291cmNlQ2xpcHBlcjo6
YXBwbHlDbGlwcGluZ1RvQ29udGV4dCk6CisgICAgICAgICogcmVuZGVyaW5nL3N2Zy9SZW5kZXJT
VkdSZXNvdXJjZUZpbHRlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJTVkdSZXNvdXJj
ZUZpbHRlcjo6YXBwbHlSZXNvdXJjZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJTVkdSZXNv
dXJjZUZpbHRlcjo6Zml0c0luTWF4aW11bUltYWdlU2l6ZSk6IERlbGV0ZWQuCisgICAgICAgICog
cmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJjZUZpbHRlci5oOgorICAgICAgICAqIHJlbmRl
cmluZy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VHcmFkaWVudC5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpjcmVhdGVNYXNrQW5kU3dhcENvbnRleHRGb3JUZXh0R3JhZGllbnQpOgorICAgICAgICAoV2Vi
Q29yZTo6Y2xpcFRvVGV4dE1hc2spOgorICAgICAgICAqIHJlbmRlcmluZy9zdmcvUmVuZGVyU1ZH
UmVzb3VyY2VNYXNrZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU1ZHUmVzb3VyY2VN
YXNrZXI6OmFwcGx5U1ZHTWFzayk6CisgICAgICAgICogcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdS
ZXNvdXJjZVBhdHRlcm4uY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU1ZHUmVzb3VyY2VQ
YXR0ZXJuOjpidWlsZFBhdHRlcm4pOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU1ZHUmVzb3Vy
Y2VQYXR0ZXJuOjpjcmVhdGVUaWxlSW1hZ2UpOiBNYWtlIHRoZSBtb2RpZmljYXRpb25zCisgICAg
ICAgIHdoaWNoIGFyZSBuZWVkZWQgYmVjYXVzZSBvZiBtb3ZpbmcgdGhlIGNsYW1waW5nIGhlbHBl
ciBtZXRob2RzIHRvIEltYWdlQnVmZmVyCisgICAgICAgIGFuZCBiZWNhdXNlIG9mIGNoYW5naW5n
IHRoZSBwcm90b3R5cGUgb2YgU1ZHUmVuZGVyaW5nQ29udGV4dCBtZXRob2RzLgorICAgICAgICAK
KyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlckVmZmVjdC5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6OmRyYXdpbmdSZWdpb25PZklucHV0SW1hZ2Up
OiBDb25zaWRlciB0aGUgY2xhbXBpbmcKKyAgICAgICAgd2hlbiBtYXBwaW5nIGZyb20gYWJzb2x1
dGUgY29vcmRpbmF0ZXMgdG8gdGhlIEltYWdlQnVmZmVyIGNvb3JkaW5hdGVzLgorCisgICAgICAg
IChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6OmNyZWF0ZUltYWdlQnVmZmVyUmVzdWx0KTogQXBwbHkg
dGhlIHNhbWUgY2xhbXBpbmcKKyAgICAgICAgd2UgZG8gaW4gU1ZHUmVuZGVyaW5nQ29udGV4dDo6
Y3JlYXRlSW1hZ2VCdWZmZXIoKSB3aGVuIGNyZWF0aW5nIHRoZSAKKyAgICAgICAgRmlsdGVyRWZm
ZWN0IHJlc3VsdCBJbWFnZUJ1ZmZlci4KKyAgICAgICAgCisgICAgICAgIChXZWJDb3JlOjpGaWx0
ZXJFZmZlY3Q6OmFwcGx5KToKKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6YXNVbm11
bHRpcGxpZWRJbWFnZSk6CisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6OmFzUHJlbXVs
dGlwbGllZEltYWdlKToKKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6Y29weVVubXVs
dGlwbGllZEltYWdlKToKKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6Y29weVByZW11
bHRpcGxpZWRJbWFnZSk6CisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6OmNyZWF0ZVVu
bXVsdGlwbGllZEltYWdlUmVzdWx0KToKKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6
Y3JlYXRlUHJlbXVsdGlwbGllZEltYWdlUmVzdWx0KToKKyAgICAgICAgKFdlYkNvcmU6OkZpbHRl
ckVmZmVjdDo6bWF4RmlsdGVyQXJlYSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGaWx0
ZXJFZmZlY3Q6OmlzRmlsdGVyU2l6ZVZhbGlkKTogRGVsZXRlZC4KKyAgICAgICAgKiBwbGF0Zm9y
bS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlckVmZmVjdC5oOiBVc2UgdGhlIG5ldyBJbWFnZUJ1ZmZl
ciBjbGFtcGluZworICAgICAgICBoZWxwZXIgbWV0aG9kcyBhbmQgZGVsZXRlIHRoZSBsb2NhbCBv
bmVzLgorICAgICAgICAKKyAgICAgICAgKiByZW5kZXJpbmcvRmlsdGVyRWZmZWN0UmVuZGVyZXIu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0UmVuZGVyZXI6OnVwZGF0ZUJhY2tp
bmdTdG9yZVJlY3QpOgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0UmVuZGVyZXJIZWxw
ZXI6OmJlZ2luRmlsdGVyRWZmZWN0KTogQ29kZSBjbGVhbiB1cC4KKyAgICAgICAgCisgICAgICAg
ICogcmVuZGVyaW5nL3N2Zy9TVkdSZW5kZXJpbmdDb250ZXh0LmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OlNWR1JlbmRlcmluZ0NvbnRleHQ6OmNhbGN1bGF0ZVNjcmVlbkZvbnRTaXplU2NhbGluZ0Zh
Y3Rvcik6CisgICAgICAgIChXZWJDb3JlOjpTVkdSZW5kZXJpbmdDb250ZXh0OjpjYWxjdWxhdGVU
cmFuc2Zvcm1hdGlvblRvT3V0ZXJtb3N0Q29vcmRpbmF0ZVN5c3RlbSk6CisgICAgICAgIFJldHVy
biB0aGUgQWZmaW5lVHJhbnNmb3JtIGluc3RlYWQgb2YgcGFzc2luZyBpdCB0aHJvdWdoIHRoZSBy
ZWZlcmVuY2Ugb2YKKyAgICAgICAgYW4gYXJndW1lbnQuCisgICAgICAgIAorICAgICAgICAoV2Vi
Q29yZTo6U1ZHUmVuZGVyaW5nQ29udGV4dDo6Y3JlYXRlSW1hZ2VCdWZmZXIpOgorICAgICAgICAo
V2ViQ29yZTo6U1ZHUmVuZGVyaW5nQ29udGV4dDo6Y3JlYXRlSW1hZ2VCdWZmZXJGb3JQYXR0ZXJu
KTogRGVsZXRlZC4KKyAgICAgICAgQ29kZSBjbGVhbiB1cCBhbmQgbWV0aG9kIHJlbmFtZS4KKyAg
ICAgICAgCisgICAgICAgIChXZWJDb3JlOjpTVkdSZW5kZXJpbmdDb250ZXh0OjpjbGFtcGVkQWJz
b2x1dGVUYXJnZXRSZWN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlNWR1JlbmRlcmlu
Z0NvbnRleHQ6OmNsYW1wZWRBYnNvbHV0ZVNpemUpOiBEZWxldGVkLgorICAgICAgICAqIHJlbmRl
cmluZy9zdmcvU1ZHUmVuZGVyaW5nQ29udGV4dC5oOiBNb3ZlIHRoZSBjbGFtcGluZyBoZWxwZXIg
bWV0aG9kcyB0bworICAgICAgICB0aGUgSW1hZ2VCdWZmZXIgY2xhc3MuCisKIDIwMTUtMDUtMDYg
IEpvbiBMZWUgIDxqb25sZWVAYXBwbGUuY29tPgogCiAgICAgICAgIENvcmVUZXh0U1BJLmggdXNl
cyB3cm9uZyB2ZXJzaW9uIG51bWJlciB0byBkZW5vdGUgWW9zZW1pdGUKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlQnVmZmVyLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFnZUJ1ZmZlci5jcHAJKHJldmlzaW9u
IDE4Mzc1NikKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlQnVmZmVy
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzMsNiArMzMsNDYgQEAKIAogbmFtZXNwYWNlIFdlYkNv
cmUgewogCitzdGF0aWMgY29uc3QgZmxvYXQga01heENsYW1wZWRMZW5ndGggPSA0MDk2Oworc3Rh
dGljIGNvbnN0IGZsb2F0IGtNYXhDbGFtcGVkQXJlYSA9IGtNYXhDbGFtcGVkTGVuZ3RoICoga01h
eENsYW1wZWRMZW5ndGg7CisKK2Jvb2wgSW1hZ2VCdWZmZXI6OmlzU2l6ZUNsYW1wZWQoY29uc3Qg
RmxvYXRTaXplJiBzaXplKQoreworICAgIHJldHVybiBzaXplLmhlaWdodCgpICogc2l6ZS53aWR0
aCgpIDw9IGtNYXhDbGFtcGVkQXJlYTsKK30KKworYm9vbCBJbWFnZUJ1ZmZlcjo6aXNTaXplQ2xh
bXBlZChjb25zdCBGbG9hdFNpemUmIHNpemUsIEZsb2F0U2l6ZSYgc2NhbGUpCit7CisgICAgRmxv
YXRTaXplIHNjYWxlZFNpemUoc2l6ZSk7CisgICAgc2NhbGVkU2l6ZS5zY2FsZShzY2FsZS53aWR0
aCgpLCBzY2FsZS5oZWlnaHQoKSk7CisgICAgZmxvYXQgc2NhbGVkQXJlYSA9IHNjYWxlZFNpemUu
d2lkdGgoKSAqIHNjYWxlZFNpemUuaGVpZ2h0KCk7CisKKyAgICBpZiAoSW1hZ2VCdWZmZXI6Omlz
U2l6ZUNsYW1wZWQoc2NhbGVkU2l6ZSkpCisgICAgICAgIHJldHVybiB0cnVlOworCisgICAgLy8g
SWYgYXJlYSBvZiBzY2FsZWQgc2l6ZSBpcyBiaWdnZXIgdGhhbiB0aGUgdXBwZXIgbGltaXQsIGFk
anVzdCB0aGUgc2NhbGUKKyAgICAvLyB0byBmaXQuCisgICAgc2NhbGUuc2NhbGUoc3FydChrTWF4
Q2xhbXBlZEFyZWEgLyBzY2FsZWRBcmVhKSk7CisgICAgcmV0dXJuIGZhbHNlOworfQorCitGbG9h
dFNpemUgSW1hZ2VCdWZmZXI6OmNsYW1wZWRTaXplKGNvbnN0IEZsb2F0U2l6ZSYgc2l6ZSkKK3sK
KyAgICByZXR1cm4gc2l6ZS5zaHJ1bmtUbyhGbG9hdFNpemUoa01heENsYW1wZWRMZW5ndGgsIGtN
YXhDbGFtcGVkTGVuZ3RoKSk7Cit9CisKK0Zsb2F0U2l6ZSBJbWFnZUJ1ZmZlcjo6Y2xhbXBlZFNp
emUoY29uc3QgRmxvYXRTaXplJiBzaXplLCBGbG9hdFNpemUmIHNjYWxlKQoreworICAgIEZsb2F0
U2l6ZSBjbGFtcGVkU2l6ZSA9IEltYWdlQnVmZmVyOjpjbGFtcGVkU2l6ZShzaXplKTsKKyAgICBz
Y2FsZSA9IEZsb2F0U2l6ZShjbGFtcGVkU2l6ZS53aWR0aCgpIC8gc2l6ZS53aWR0aCgpLCBjbGFt
cGVkU2l6ZS5oZWlnaHQoKSAvIHNpemUuaGVpZ2h0KCkpOworICAgIHJldHVybiBjbGFtcGVkU2l6
ZTsKK30KKworRmxvYXRSZWN0IEltYWdlQnVmZmVyOjpjbGFtcGVkUmVjdChjb25zdCBGbG9hdFJl
Y3QmIHJlY3QpCit7CisgICAgcmV0dXJuIEZsb2F0UmVjdChyZWN0LmxvY2F0aW9uKCksIEltYWdl
QnVmZmVyOjpjbGFtcGVkU2l6ZShyZWN0LnNpemUoKSkpOworfQorCiAjaWYgIVVTRShDRykKIHZv
aWQgSW1hZ2VCdWZmZXI6OnRyYW5zZm9ybUNvbG9yU3BhY2UoQ29sb3JTcGFjZSBzcmNDb2xvclNw
YWNlLCBDb2xvclNwYWNlIGRzdENvbG9yU3BhY2UpCiB7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9JbWFnZUJ1ZmZlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlQnVmZmVyLmgJKHJldmlzaW9uIDE4Mzc1NikKKysr
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlQnVmZmVyLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTEyMywxMCArMTIzLDEzIEBAIHB1YmxpYzoKICAgICBib29sIGNvcHlUb1BsYXRm
b3JtVGV4dHVyZShHcmFwaGljc0NvbnRleHQzRCYsIFBsYXRmb3JtM0RPYmplY3QsIEdDM0RlbnVt
LCBib29sLCBib29sKTsKIAogICAgIEZsb2F0U2l6ZSBzcGFjZVNpemUoKSBjb25zdCB7IHJldHVy
biBtX3NwYWNlOyB9Ci0gICAgdm9pZCBzZXRTcGFjZVNpemUoY29uc3QgRmxvYXRTaXplJiBzcGFj
ZSkKLSAgICB7Ci0gICAgICAgIG1fc3BhY2UgPSBzcGFjZTsKLSAgICB9CisgICAgdm9pZCBzZXRT
cGFjZVNpemUoY29uc3QgRmxvYXRTaXplJiBzcGFjZSkgeyBtX3NwYWNlID0gc3BhY2U7IH0KKwor
ICAgIHN0YXRpYyBib29sIGlzU2l6ZUNsYW1wZWQoY29uc3QgRmxvYXRTaXplJik7CisgICAgc3Rh
dGljIGJvb2wgaXNTaXplQ2xhbXBlZChjb25zdCBGbG9hdFNpemUmLCBGbG9hdFNpemUmIHNjYWxl
KTsKKyAgICBzdGF0aWMgRmxvYXRTaXplIGNsYW1wZWRTaXplKGNvbnN0IEZsb2F0U2l6ZSYpOwor
ICAgIHN0YXRpYyBGbG9hdFNpemUgY2xhbXBlZFNpemUoY29uc3QgRmxvYXRTaXplJiwgRmxvYXRT
aXplJiBzY2FsZSk7CisgICAgc3RhdGljIEZsb2F0UmVjdCBjbGFtcGVkUmVjdChjb25zdCBGbG9h
dFJlY3QmKTsKIAogcHJpdmF0ZToKICNpZiBVU0UoQ0cpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29sb3JNYXRyaXguY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDb2xvck1hdHJpeC5j
cHAJKHJldmlzaW9uIDE4Mzc1NikKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2ZpbHRlcnMvRkVDb2xvck1hdHJpeC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE0OSw3ICsxNDks
NyBAQCB2b2lkIEZFQ29sb3JNYXRyaXg6OnBsYXRmb3JtQXBwbHlTb2Z0d2FyCiAKICAgICByZXN1
bHRJbWFnZS0+Y29udGV4dCgpLT5kcmF3SW1hZ2VCdWZmZXIoaW4tPmFzSW1hZ2VCdWZmZXIoKSwg
Q29sb3JTcGFjZURldmljZVJHQiwgZHJhd2luZ1JlZ2lvbk9mSW5wdXRJbWFnZShpbi0+YWJzb2x1
dGVQYWludFJlY3QoKSkpOwogCi0gICAgSW50UmVjdCBpbWFnZVJlY3QoSW50UG9pbnQoKSwgYWJz
b2x1dGVQYWludFJlY3QoKS5zaXplKCkpOworICAgIEludFJlY3QgaW1hZ2VSZWN0KEludFBvaW50
KCksIHJlc3VsdEltYWdlLT5sb2dpY2FsU2l6ZSgpKTsKICAgICBSZWZQdHI8VWludDhDbGFtcGVk
QXJyYXk+IHBpeGVsQXJyYXkgPSByZXN1bHRJbWFnZS0+Z2V0VW5tdWx0aXBsaWVkSW1hZ2VEYXRh
KGltYWdlUmVjdCk7CiAKICAgICBzd2l0Y2ggKG1fdHlwZSkgewpJbmRleDogU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRVRpbGUuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVUaWxlLmNwcAkocmV2aXNp
b24gMTgzNzU2KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9G
RVRpbGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02Myw4ICs2Myw4IEBAIHZvaWQgRkVUaWxlOjpw
bGF0Zm9ybUFwcGx5U29mdHdhcmUoKQogICAgICAgICB0aWxlUmVjdC5zY2FsZShmaWx0ZXIuZmls
dGVyUmVzb2x1dGlvbigpLndpZHRoKCksIGZpbHRlci5maWx0ZXJSZXNvbHV0aW9uKCkuaGVpZ2h0
KCkpOwogICAgIH0KIAotICAgIHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlcj4gdGlsZUltYWdl
OwotICAgIGlmICghU1ZHUmVuZGVyaW5nQ29udGV4dDo6Y3JlYXRlSW1hZ2VCdWZmZXJGb3JQYXR0
ZXJuKHRpbGVSZWN0LCB0aWxlUmVjdCwgdGlsZUltYWdlLCBDb2xvclNwYWNlRGV2aWNlUkdCLCBm
aWx0ZXIoKS5yZW5kZXJpbmdNb2RlKCkpKQorICAgIGF1dG8gdGlsZUltYWdlID0gU1ZHUmVuZGVy
aW5nQ29udGV4dDo6Y3JlYXRlSW1hZ2VCdWZmZXIodGlsZVJlY3QsIHRpbGVSZWN0LCBDb2xvclNw
YWNlRGV2aWNlUkdCLCBmaWx0ZXIoKS5yZW5kZXJpbmdNb2RlKCkpOworICAgIGlmICghdGlsZUlt
YWdlKQogICAgICAgICByZXR1cm47CiAKICAgICBHcmFwaGljc0NvbnRleHQqIHRpbGVJbWFnZUNv
bnRleHQgPSB0aWxlSW1hZ2UtPmNvbnRleHQoKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyRWZmZWN0LmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlckVmZmVjdC5jcHAJKHJl
dmlzaW9uIDE4Mzc1NikKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRl
cnMvRmlsdGVyRWZmZWN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzYsOCArMzYsNiBAQAogCiBu
YW1lc3BhY2UgV2ViQ29yZSB7CiAKLXN0YXRpYyBjb25zdCBmbG9hdCBrTWF4RmlsdGVyQXJlYSA9
IDQwOTYgKiA0MDk2OwotCiBGaWx0ZXJFZmZlY3Q6OkZpbHRlckVmZmVjdChGaWx0ZXImIGZpbHRl
cikKICAgICA6IG1fYWxwaGFJbWFnZShmYWxzZSkKICAgICAsIG1fZmlsdGVyKGZpbHRlcikKQEAg
LTU1LDE5ICs1Myw2IEBAIEZpbHRlckVmZmVjdDo6fkZpbHRlckVmZmVjdCgpCiB7CiB9CiAKLWZs
b2F0IEZpbHRlckVmZmVjdDo6bWF4RmlsdGVyQXJlYSgpCi17Ci0gICAgcmV0dXJuIGtNYXhGaWx0
ZXJBcmVhOwotfQotCi1ib29sIEZpbHRlckVmZmVjdDo6aXNGaWx0ZXJTaXplVmFsaWQoY29uc3Qg
RmxvYXRSZWN0JiByZWN0KQotewotICAgIGlmIChyZWN0LndpZHRoKCkgPCAwIHx8IHJlY3QuaGVp
Z2h0KCkgPCAwCi0gICAgICAgIHx8IChyZWN0LmhlaWdodCgpICogcmVjdC53aWR0aCgpID4ga01h
eEZpbHRlckFyZWEpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgcmV0dXJuIHRydWU7Ci19
Ci0KIHZvaWQgRmlsdGVyRWZmZWN0OjpkZXRlcm1pbmVBYnNvbHV0ZVBhaW50UmVjdCgpCiB7CiAg
ICAgbV9hYnNvbHV0ZVBhaW50UmVjdCA9IEludFJlY3QoKTsKQEAgLTkzLDggKzc4LDE2IEBAIElu
dFJlY3QgRmlsdGVyRWZmZWN0OjpyZXF1ZXN0ZWRSZWdpb25PZkkKIAogRmxvYXRSZWN0IEZpbHRl
ckVmZmVjdDo6ZHJhd2luZ1JlZ2lvbk9mSW5wdXRJbWFnZShjb25zdCBJbnRSZWN0JiBzcmNSZWN0
KSBjb25zdAogewotICAgIHJldHVybiBGbG9hdFJlY3QoRmxvYXRQb2ludChzcmNSZWN0LngoKSAt
IG1fYWJzb2x1dGVQYWludFJlY3QueCgpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNy
Y1JlY3QueSgpIC0gbV9hYnNvbHV0ZVBhaW50UmVjdC55KCkpLCBzcmNSZWN0LnNpemUoKSk7Cisg
ICAgQVNTRVJUKGhhc1Jlc3VsdCgpKTsKKyAgICBGbG9hdFBvaW50IGxvY2F0aW9uID0gc3JjUmVj
dC5sb2NhdGlvbigpOworICAgIGxvY2F0aW9uLm1vdmVCeSgtbV9hYnNvbHV0ZVBhaW50UmVjdC5s
b2NhdGlvbigpKTsKKyAgICBGbG9hdFJlY3QgcmVjdCA9IEZsb2F0UmVjdChsb2NhdGlvbiwgc3Jj
UmVjdC5zaXplKCkpOworCisgICAgRmxvYXRTaXplIHNjYWxlOworICAgIEltYWdlQnVmZmVyOjpj
bGFtcGVkU2l6ZShtX2Fic29sdXRlUGFpbnRSZWN0LnNpemUoKSwgc2NhbGUpOworCisgICAgQWZm
aW5lVHJhbnNmb3JtIHRyYW5zZm9ybSA9IEFmZmluZVRyYW5zZm9ybSgpLnNjYWxlKHNjYWxlLndp
ZHRoKCksIHNjYWxlLmhlaWdodCgpKTsKKyAgICByZXR1cm4gdHJhbnNmb3JtLm1hcFJlY3QocmVj
dCk7CiB9CiAKIEZpbHRlckVmZmVjdCogRmlsdGVyRWZmZWN0OjppbnB1dEVmZmVjdCh1bnNpZ25l
ZCBudW1iZXIpIGNvbnN0CkBAIC0xNTYsNyArMTQ5LDcgQEAgdm9pZCBGaWx0ZXJFZmZlY3Q6OmFw
cGx5KCkKICAgICBkZXRlcm1pbmVBYnNvbHV0ZVBhaW50UmVjdCgpOwogICAgIHNldFJlc3VsdENv
bG9yU3BhY2UobV9vcGVyYXRpbmdDb2xvclNwYWNlKTsKIAotICAgIGlmICghaXNGaWx0ZXJTaXpl
VmFsaWQobV9hYnNvbHV0ZVBhaW50UmVjdCkpCisgICAgaWYgKG1fYWJzb2x1dGVQYWludFJlY3Qu
aXNFbXB0eSgpIHx8ICFJbWFnZUJ1ZmZlcjo6aXNTaXplQ2xhbXBlZChtX2Fic29sdXRlUGFpbnRS
ZWN0LnNpemUoKSkpCiAgICAgICAgIHJldHVybjsKIAogICAgIGlmIChyZXF1aXJlc1ZhbGlkUHJl
TXVsdGlwbGllZFBpeGVscygpKSB7CkBAIC0zMjEsOCArMzE0LDggQEAgSW1hZ2VCdWZmZXIqIEZp
bHRlckVmZmVjdDo6b3BlbkNMSW1hZ2VUbwogCiBQYXNzUmVmUHRyPFVpbnQ4Q2xhbXBlZEFycmF5
PiBGaWx0ZXJFZmZlY3Q6OmFzVW5tdWx0aXBsaWVkSW1hZ2UoY29uc3QgSW50UmVjdCYgcmVjdCkK
IHsKLSAgICBBU1NFUlQoaXNGaWx0ZXJTaXplVmFsaWQocmVjdCkpOwogICAgIEludFNpemUgc2Nh
bGVkU2l6ZShyZWN0LnNpemUoKSk7CisgICAgQVNTRVJUKEltYWdlQnVmZmVyOjppc1NpemVDbGFt
cGVkKHNjYWxlZFNpemUpKTsKICAgICBzY2FsZWRTaXplLnNjYWxlKG1fZmlsdGVyLmZpbHRlclNj
YWxlKCkpOwogICAgIFJlZlB0cjxVaW50OENsYW1wZWRBcnJheT4gaW1hZ2VEYXRhID0gVWludDhD
bGFtcGVkQXJyYXk6OmNyZWF0ZVVuaW5pdGlhbGl6ZWQoc2NhbGVkU2l6ZS53aWR0aCgpICogc2Nh
bGVkU2l6ZS5oZWlnaHQoKSAqIDQpOwogICAgIGNvcHlVbm11bHRpcGxpZWRJbWFnZShpbWFnZURh
dGEuZ2V0KCksIHJlY3QpOwpAQCAtMzMxLDggKzMyNCw4IEBAIFBhc3NSZWZQdHI8VWludDhDbGFt
cGVkQXJyYXk+IEZpbHRlckVmZmUKIAogUGFzc1JlZlB0cjxVaW50OENsYW1wZWRBcnJheT4gRmls
dGVyRWZmZWN0Ojphc1ByZW11bHRpcGxpZWRJbWFnZShjb25zdCBJbnRSZWN0JiByZWN0KQogewot
ICAgIEFTU0VSVChpc0ZpbHRlclNpemVWYWxpZChyZWN0KSk7CiAgICAgSW50U2l6ZSBzY2FsZWRT
aXplKHJlY3Quc2l6ZSgpKTsKKyAgICBBU1NFUlQoSW1hZ2VCdWZmZXI6OmlzU2l6ZUNsYW1wZWQo
c2NhbGVkU2l6ZSkpOwogICAgIHNjYWxlZFNpemUuc2NhbGUobV9maWx0ZXIuZmlsdGVyU2NhbGUo
KSk7CiAgICAgUmVmUHRyPFVpbnQ4Q2xhbXBlZEFycmF5PiBpbWFnZURhdGEgPSBVaW50OENsYW1w
ZWRBcnJheTo6Y3JlYXRlVW5pbml0aWFsaXplZChzY2FsZWRTaXplLndpZHRoKCkgKiBzY2FsZWRT
aXplLmhlaWdodCgpICogNCk7CiAgICAgY29weVByZW11bHRpcGxpZWRJbWFnZShpbWFnZURhdGEu
Z2V0KCksIHJlY3QpOwpAQCAtMzk3LDggKzM5MCw4IEBAIHZvaWQgRmlsdGVyRWZmZWN0Ojpjb3B5
VW5tdWx0aXBsaWVkSW1hZ2UKICAgICAgICAgaWYgKG1faW1hZ2VCdWZmZXJSZXN1bHQpCiAgICAg
ICAgICAgICBtX3VubXVsdGlwbGllZEltYWdlUmVzdWx0ID0gbV9pbWFnZUJ1ZmZlclJlc3VsdC0+
Z2V0VW5tdWx0aXBsaWVkSW1hZ2VEYXRhKEludFJlY3QoSW50UG9pbnQoKSwgbV9hYnNvbHV0ZVBh
aW50UmVjdC5zaXplKCkpKTsKICAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICBBU1NFUlQoaXNG
aWx0ZXJTaXplVmFsaWQobV9hYnNvbHV0ZVBhaW50UmVjdCkpOwogICAgICAgICAgICAgSW50U2l6
ZSBpbnB1dFNpemUobV9hYnNvbHV0ZVBhaW50UmVjdC5zaXplKCkpOworICAgICAgICAgICAgQVNT
RVJUKEltYWdlQnVmZmVyOjppc1NpemVDbGFtcGVkKGlucHV0U2l6ZSkpOwogICAgICAgICAgICAg
aW5wdXRTaXplLnNjYWxlKG1fZmlsdGVyLmZpbHRlclNjYWxlKCkpOwogICAgICAgICAgICAgbV91
bm11bHRpcGxpZWRJbWFnZVJlc3VsdCA9IFVpbnQ4Q2xhbXBlZEFycmF5OjpjcmVhdGVVbmluaXRp
YWxpemVkKGlucHV0U2l6ZS53aWR0aCgpICogaW5wdXRTaXplLmhlaWdodCgpICogNCk7CiAgICAg
ICAgICAgICB1bnNpZ25lZCBjaGFyKiBzb3VyY2VDb21wb25lbnQgPSBtX3ByZW11bHRpcGxpZWRJ
bWFnZVJlc3VsdC0+ZGF0YSgpOwpAQCAtNDMzLDggKzQyNiw4IEBAIHZvaWQgRmlsdGVyRWZmZWN0
Ojpjb3B5UHJlbXVsdGlwbGllZEltYWcKICAgICAgICAgaWYgKG1faW1hZ2VCdWZmZXJSZXN1bHQp
CiAgICAgICAgICAgICBtX3ByZW11bHRpcGxpZWRJbWFnZVJlc3VsdCA9IG1faW1hZ2VCdWZmZXJS
ZXN1bHQtPmdldFByZW11bHRpcGxpZWRJbWFnZURhdGEoSW50UmVjdChJbnRQb2ludCgpLCBtX2Fi
c29sdXRlUGFpbnRSZWN0LnNpemUoKSkpOwogICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgIEFT
U0VSVChpc0ZpbHRlclNpemVWYWxpZChtX2Fic29sdXRlUGFpbnRSZWN0KSk7CiAgICAgICAgICAg
ICBJbnRTaXplIGlucHV0U2l6ZShtX2Fic29sdXRlUGFpbnRSZWN0LnNpemUoKSk7CisgICAgICAg
ICAgICBBU1NFUlQoSW1hZ2VCdWZmZXI6OmlzU2l6ZUNsYW1wZWQoaW5wdXRTaXplKSk7CiAgICAg
ICAgICAgICBpbnB1dFNpemUuc2NhbGUobV9maWx0ZXIuZmlsdGVyU2NhbGUoKSk7CiAgICAgICAg
ICAgICBtX3ByZW11bHRpcGxpZWRJbWFnZVJlc3VsdCA9IFVpbnQ4Q2xhbXBlZEFycmF5OjpjcmVh
dGVVbmluaXRpYWxpemVkKGlucHV0U2l6ZS53aWR0aCgpICogaW5wdXRTaXplLmhlaWdodCgpICog
NCk7CiAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyKiBzb3VyY2VDb21wb25lbnQgPSBtX3VubXVs
dGlwbGllZEltYWdlUmVzdWx0LT5kYXRhKCk7CkBAIC00NTksMTAgKzQ1MiwxMyBAQCBJbWFnZUJ1
ZmZlciogRmlsdGVyRWZmZWN0OjpjcmVhdGVJbWFnZUJ1CiAgICAgLy8gT25seSBvbmUgcmVzdWx0
IHR5cGUgaXMgYWxsb3dlZC4KICAgICBBU1NFUlQoIWhhc1Jlc3VsdCgpKTsKICAgICBpZiAobV9h
YnNvbHV0ZVBhaW50UmVjdC5pc0VtcHR5KCkpCi0gICAgICAgIHJldHVybiAwOwotICAgIG1faW1h
Z2VCdWZmZXJSZXN1bHQgPSBJbWFnZUJ1ZmZlcjo6Y3JlYXRlKG1fYWJzb2x1dGVQYWludFJlY3Qu
c2l6ZSgpLCBtX2ZpbHRlci5maWx0ZXJTY2FsZSgpLCBtX3Jlc3VsdENvbG9yU3BhY2UsIG1fZmls
dGVyLnJlbmRlcmluZ01vZGUoKSk7CisgICAgICAgIHJldHVybiBudWxscHRyOworCisgICAgRmxv
YXRTaXplIGNsYW1wZWRTaXplID0gSW1hZ2VCdWZmZXI6OmNsYW1wZWRTaXplKG1fYWJzb2x1dGVQ
YWludFJlY3Quc2l6ZSgpKTsKKyAgICBtX2ltYWdlQnVmZmVyUmVzdWx0ID0gSW1hZ2VCdWZmZXI6
OmNyZWF0ZShjbGFtcGVkU2l6ZSwgbV9maWx0ZXIuZmlsdGVyU2NhbGUoKSwgbV9yZXN1bHRDb2xv
clNwYWNlLCBtX2ZpbHRlci5yZW5kZXJpbmdNb2RlKCkpOwogICAgIGlmICghbV9pbWFnZUJ1ZmZl
clJlc3VsdCkKLSAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIHJldHVybiBudWxscHRyOworCiAg
ICAgQVNTRVJUKG1faW1hZ2VCdWZmZXJSZXN1bHQtPmNvbnRleHQoKSk7CiAgICAgcmV0dXJuIG1f
aW1hZ2VCdWZmZXJSZXN1bHQuZ2V0KCk7CiB9CkBAIC00NzEsMTEgKzQ2NywxMSBAQCBVaW50OENs
YW1wZWRBcnJheSogRmlsdGVyRWZmZWN0OjpjcmVhdGVVCiB7CiAgICAgLy8gT25seSBvbmUgcmVz
dWx0IHR5cGUgaXMgYWxsb3dlZC4KICAgICBBU1NFUlQoIWhhc1Jlc3VsdCgpKTsKLSAgICBBU1NF
UlQoaXNGaWx0ZXJTaXplVmFsaWQobV9hYnNvbHV0ZVBhaW50UmVjdCkpOwotCiAgICAgaWYgKG1f
YWJzb2x1dGVQYWludFJlY3QuaXNFbXB0eSgpKQotICAgICAgICByZXR1cm4gMDsKKyAgICAgICAg
cmV0dXJuIG51bGxwdHI7CisKICAgICBJbnRTaXplIHJlc3VsdFNpemUobV9hYnNvbHV0ZVBhaW50
UmVjdC5zaXplKCkpOworICAgIEFTU0VSVChJbWFnZUJ1ZmZlcjo6aXNTaXplQ2xhbXBlZChyZXN1
bHRTaXplKSk7CiAgICAgcmVzdWx0U2l6ZS5zY2FsZShtX2ZpbHRlci5maWx0ZXJTY2FsZSgpKTsK
ICAgICBtX3VubXVsdGlwbGllZEltYWdlUmVzdWx0ID0gVWludDhDbGFtcGVkQXJyYXk6OmNyZWF0
ZVVuaW5pdGlhbGl6ZWQocmVzdWx0U2l6ZS53aWR0aCgpICogcmVzdWx0U2l6ZS5oZWlnaHQoKSAq
IDQpOwogICAgIHJldHVybiBtX3VubXVsdGlwbGllZEltYWdlUmVzdWx0LmdldCgpOwpAQCAtNDg1
LDExICs0ODEsMTEgQEAgVWludDhDbGFtcGVkQXJyYXkqIEZpbHRlckVmZmVjdDo6Y3JlYXRlUAog
ewogICAgIC8vIE9ubHkgb25lIHJlc3VsdCB0eXBlIGlzIGFsbG93ZWQuCiAgICAgQVNTRVJUKCFo
YXNSZXN1bHQoKSk7Ci0gICAgQVNTRVJUKGlzRmlsdGVyU2l6ZVZhbGlkKG1fYWJzb2x1dGVQYWlu
dFJlY3QpKTsKLQogICAgIGlmIChtX2Fic29sdXRlUGFpbnRSZWN0LmlzRW1wdHkoKSkKLSAgICAg
ICAgcmV0dXJuIDA7CisgICAgICAgIHJldHVybiBudWxscHRyOworCiAgICAgSW50U2l6ZSByZXN1
bHRTaXplKG1fYWJzb2x1dGVQYWludFJlY3Quc2l6ZSgpKTsKKyAgICBBU1NFUlQoSW1hZ2VCdWZm
ZXI6OmlzU2l6ZUNsYW1wZWQocmVzdWx0U2l6ZSkpOwogICAgIHJlc3VsdFNpemUuc2NhbGUobV9m
aWx0ZXIuZmlsdGVyU2NhbGUoKSk7CiAgICAgbV9wcmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQgPSBV
aW50OENsYW1wZWRBcnJheTo6Y3JlYXRlVW5pbml0aWFsaXplZChyZXN1bHRTaXplLndpZHRoKCkg
KiByZXN1bHRTaXplLmhlaWdodCgpICogNCk7CiAgICAgcmV0dXJuIG1fcHJlbXVsdGlwbGllZElt
YWdlUmVzdWx0LmdldCgpOwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
ZmlsdGVycy9GaWx0ZXJFZmZlY3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlckVmZmVjdC5oCShyZXZpc2lvbiAxODM3NTYpCisr
KyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlckVmZmVjdC5o
CSh3b3JraW5nIGNvcHkpCkBAIC01OCw5ICs1OCw2IEBAIGNsYXNzIEZpbHRlckVmZmVjdCA6IHB1
YmxpYyBSZWZDb3VudGVkPEYKIHB1YmxpYzoKICAgICB2aXJ0dWFsIH5GaWx0ZXJFZmZlY3QoKTsK
IAotICAgIHN0YXRpYyBib29sIGlzRmlsdGVyU2l6ZVZhbGlkKGNvbnN0IEZsb2F0UmVjdCYpOwot
ICAgIHN0YXRpYyBmbG9hdCBtYXhGaWx0ZXJBcmVhKCk7Ci0KICAgICB2b2lkIGNsZWFyUmVzdWx0
KCk7CiAgICAgdm9pZCBjbGVhclJlc3VsdHNSZWN1cnNpdmUoKTsKIApJbmRleDogU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL0ZpbHRlckVmZmVjdFJlbmRlcmVyLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvRmlsdGVyRWZmZWN0UmVuZGVyZXIuY3BwCShyZXZpc2lv
biAxODM3NTYpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvRmlsdGVyRWZmZWN0UmVuZGVy
ZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMDUsMTQgKzMwNSwxNSBAQCBib29sIEZpbHRlckVm
ZmVjdFJlbmRlcmVyOjpidWlsZChSZW5kZXJFCiAKIGJvb2wgRmlsdGVyRWZmZWN0UmVuZGVyZXI6
OnVwZGF0ZUJhY2tpbmdTdG9yZVJlY3QoY29uc3QgRmxvYXRSZWN0JiBmaWx0ZXJSZWN0KQogewot
ICAgIGlmICghZmlsdGVyUmVjdC5pc1plcm8oKSAmJiBGaWx0ZXJFZmZlY3Q6OmlzRmlsdGVyU2l6
ZVZhbGlkKGZpbHRlclJlY3QpKSB7Ci0gICAgICAgIEZsb2F0UmVjdCBjdXJyZW50U291cmNlUmVj
dCA9IHNvdXJjZUltYWdlUmVjdCgpOwotICAgICAgICBpZiAoZmlsdGVyUmVjdCAhPSBjdXJyZW50
U291cmNlUmVjdCkgewotICAgICAgICAgICAgc2V0U291cmNlSW1hZ2VSZWN0KGZpbHRlclJlY3Qp
OwotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgcmV0dXJu
IGZhbHNlOworICAgIGlmIChmaWx0ZXJSZWN0LmlzWmVybygpIHx8ICFJbWFnZUJ1ZmZlcjo6aXNT
aXplQ2xhbXBlZChmaWx0ZXJSZWN0LnNpemUoKSkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKwor
ICAgIEZsb2F0UmVjdCBjdXJyZW50U291cmNlUmVjdCA9IHNvdXJjZUltYWdlUmVjdCgpOworICAg
IGlmIChmaWx0ZXJSZWN0ID09IGN1cnJlbnRTb3VyY2VSZWN0KQorICAgICAgICByZXR1cm4gZmFs
c2U7CisKKyAgICBzZXRTb3VyY2VJbWFnZVJlY3QoZmlsdGVyUmVjdCk7CisgICAgcmV0dXJuIHRy
dWU7CiB9CiAKIHZvaWQgRmlsdGVyRWZmZWN0UmVuZGVyZXI6OmFsbG9jYXRlQmFja2luZ1N0b3Jl
SWZOZWVkZWQoKQpAQCAtNDAxLDcgKzQwMiw3IEBAIGJvb2wgRmlsdGVyRWZmZWN0UmVuZGVyZXJI
ZWxwZXI6OmJlZ2luRmkKICAgICBmaWx0ZXItPmFsbG9jYXRlQmFja2luZ1N0b3JlSWZOZWVkZWQo
KTsKICAgICAvLyBQYWludCBpbnRvIHRoZSBjb250ZXh0IHRoYXQgcmVwcmVzZW50cyB0aGUgU291
cmNlR3JhcGhpYyBvZiB0aGUgZmlsdGVyLgogICAgIEdyYXBoaWNzQ29udGV4dCogc291cmNlR3Jh
cGhpY3NDb250ZXh0ID0gZmlsdGVyLT5pbnB1dENvbnRleHQoKTsKLSAgICBpZiAoIXNvdXJjZUdy
YXBoaWNzQ29udGV4dCB8fCAhRmlsdGVyRWZmZWN0Ojppc0ZpbHRlclNpemVWYWxpZChmaWx0ZXIt
PmZpbHRlclJlZ2lvbigpKSkgeworICAgIGlmICghc291cmNlR3JhcGhpY3NDb250ZXh0IHx8IGZp
bHRlci0+ZmlsdGVyUmVnaW9uKCkuaXNaZXJvKCkgfHwgIUltYWdlQnVmZmVyOjppc1NpemVDbGFt
cGVkKGZpbHRlci0+ZmlsdGVyUmVnaW9uKCkuc2l6ZSgpKSkgewogICAgICAgICAvLyBEaXNhYmxl
IHRoZSBmaWx0ZXJzIGFuZCBjb250aW51ZS4KICAgICAgICAgbV9oYXZlRmlsdGVyRWZmZWN0ID0g
ZmFsc2U7CiAgICAgICAgIHJldHVybiBmYWxzZTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VDbGlwcGVyLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291cmNlQ2xpcHBlci5jcHAJKHJl
dmlzaW9uIDE4Mzc1NikKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZH
UmVzb3VyY2VDbGlwcGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTM4LDExICsxMzgsMTEgQEAg
Ym9vbCBSZW5kZXJTVkdSZXNvdXJjZUNsaXBwZXI6OmFwcGx5Q2xpcAogICAgIGlmIChzaG91bGRD
cmVhdGVDbGlwcGVyTWFza0ltYWdlICYmIHBhdGhPbmx5Q2xpcHBpbmcoY29udGV4dCwgYW5pbWF0
ZWRMb2NhbFRyYW5zZm9ybSwgb2JqZWN0Qm91bmRpbmdCb3gpKQogICAgICAgICByZXR1cm4gdHJ1
ZTsKIAotICAgIEFmZmluZVRyYW5zZm9ybSBhYnNvbHV0ZVRyYW5zZm9ybTsKLSAgICBTVkdSZW5k
ZXJpbmdDb250ZXh0OjpjYWxjdWxhdGVUcmFuc2Zvcm1hdGlvblRvT3V0ZXJtb3N0Q29vcmRpbmF0
ZVN5c3RlbShyZW5kZXJlciwgYWJzb2x1dGVUcmFuc2Zvcm0pOworICAgIEFmZmluZVRyYW5zZm9y
bSBhYnNvbHV0ZVRyYW5zZm9ybSA9IFNWR1JlbmRlcmluZ0NvbnRleHQ6OmNhbGN1bGF0ZVRyYW5z
Zm9ybWF0aW9uVG9PdXRlcm1vc3RDb29yZGluYXRlU3lzdGVtKHJlbmRlcmVyKTsKIAogICAgIGlm
IChzaG91bGRDcmVhdGVDbGlwcGVyTWFza0ltYWdlICYmICFyZXBhaW50UmVjdC5pc0VtcHR5KCkp
IHsKLSAgICAgICAgaWYgKCFTVkdSZW5kZXJpbmdDb250ZXh0OjpjcmVhdGVJbWFnZUJ1ZmZlcihy
ZXBhaW50UmVjdCwgYWJzb2x1dGVUcmFuc2Zvcm0sIGNsaXBwZXJNYXNrSW1hZ2UsIENvbG9yU3Bh
Y2VEZXZpY2VSR0IsIFVuYWNjZWxlcmF0ZWQpKQorICAgICAgICBjbGlwcGVyTWFza0ltYWdlID0g
U1ZHUmVuZGVyaW5nQ29udGV4dDo6Y3JlYXRlSW1hZ2VCdWZmZXIocmVwYWludFJlY3QsIGFic29s
dXRlVHJhbnNmb3JtLCBDb2xvclNwYWNlRGV2aWNlUkdCLCBVbmFjY2VsZXJhdGVkKTsKKyAgICAg
ICAgaWYgKCFjbGlwcGVyTWFza0ltYWdlKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAg
ICAgICAgIEdyYXBoaWNzQ29udGV4dCogbWFza0NvbnRleHQgPSBjbGlwcGVyTWFza0ltYWdlLT5j
b250ZXh0KCk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jl
c291cmNlRmlsdGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
c3ZnL1JlbmRlclNWR1Jlc291cmNlRmlsdGVyLmNwcAkocmV2aXNpb24gMTgzNzU2KQorKysgU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJjZUZpbHRlci5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTk2LDIxICs5Niw2IEBAIHN0ZDo6dW5pcXVlX3B0cjxTVkdGaWx0ZXJC
dWlsZGVyPiBSZW5kZXIKICAgICByZXR1cm4gYnVpbGRlcjsKIH0KIAotYm9vbCBSZW5kZXJTVkdS
ZXNvdXJjZUZpbHRlcjo6Zml0c0luTWF4aW11bUltYWdlU2l6ZShjb25zdCBGbG9hdFNpemUmIHNp
emUsIEZsb2F0U2l6ZSYgc2NhbGUpCi17Ci0gICAgRmxvYXRTaXplIHNjYWxlZFNpemUoc2l6ZSk7
Ci0gICAgc2NhbGVkU2l6ZS5zY2FsZShzY2FsZS53aWR0aCgpLCBzY2FsZS5oZWlnaHQoKSk7Ci0g
ICAgZmxvYXQgc2NhbGVkQXJlYSA9IHNjYWxlZFNpemUud2lkdGgoKSAqIHNjYWxlZFNpemUuaGVp
Z2h0KCk7Ci0KLSAgICBpZiAoc2NhbGVkQXJlYSA8PSBGaWx0ZXJFZmZlY3Q6Om1heEZpbHRlckFy
ZWEoKSkKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0KLSAgICAvLyBJZiBhcmVhIG9mIHNjYWxlZCBz
aXplIGlzIGJpZ2dlciB0aGFuIHRoZSB1cHBlciBsaW1pdCwgYWRqdXN0IHRoZSBzY2FsZQotICAg
IC8vIHRvIGZpdC4KLSAgICBzY2FsZS5zY2FsZShzcXJ0KEZpbHRlckVmZmVjdDo6bWF4RmlsdGVy
QXJlYSgpIC8gc2NhbGVkQXJlYSkpOwotICAgIHJldHVybiBmYWxzZTsKLX0KLQogYm9vbCBSZW5k
ZXJTVkdSZXNvdXJjZUZpbHRlcjo6YXBwbHlSZXNvdXJjZShSZW5kZXJFbGVtZW50JiByZW5kZXJl
ciwgY29uc3QgUmVuZGVyU3R5bGUmLCBHcmFwaGljc0NvbnRleHQqJiBjb250ZXh0LCB1bnNpZ25l
ZCBzaG9ydCByZXNvdXJjZU1vZGUpCiB7CiAgICAgQVNTRVJUKGNvbnRleHQpOwpAQCAtMTMxLDgg
KzExNiw3IEBAIGJvb2wgUmVuZGVyU1ZHUmVzb3VyY2VGaWx0ZXI6OmFwcGx5UmVzb3UKICAgICAg
ICAgcmV0dXJuIGZhbHNlOwogCiAgICAgLy8gRGV0ZXJtaW5lIGFic29sdXRlIHRyYW5zZm9ybWF0
aW9uIG1hdHJpeCBmb3IgZmlsdGVyLiAKLSAgICBBZmZpbmVUcmFuc2Zvcm0gYWJzb2x1dGVUcmFu
c2Zvcm07Ci0gICAgU1ZHUmVuZGVyaW5nQ29udGV4dDo6Y2FsY3VsYXRlVHJhbnNmb3JtYXRpb25U
b091dGVybW9zdENvb3JkaW5hdGVTeXN0ZW0ocmVuZGVyZXIsIGFic29sdXRlVHJhbnNmb3JtKTsK
KyAgICBBZmZpbmVUcmFuc2Zvcm0gYWJzb2x1dGVUcmFuc2Zvcm0gPSBTVkdSZW5kZXJpbmdDb250
ZXh0OjpjYWxjdWxhdGVUcmFuc2Zvcm1hdGlvblRvT3V0ZXJtb3N0Q29vcmRpbmF0ZVN5c3RlbShy
ZW5kZXJlcik7CiAgICAgaWYgKCFhYnNvbHV0ZVRyYW5zZm9ybS5pc0ludmVydGlibGUoKSkKICAg
ICAgICAgcmV0dXJuIGZhbHNlOwogCkBAIC0xNjcsOCArMTUxLDggQEAgYm9vbCBSZW5kZXJTVkdS
ZXNvdXJjZUZpbHRlcjo6YXBwbHlSZXNvdQogCiAgICAgLy8gRGV0ZXJtaW5lIHNjYWxlIGZhY3Rv
ciBmb3IgZmlsdGVyLiBUaGUgc2l6ZSBvZiBpbnRlcm1lZGlhdGUgSW1hZ2VCdWZmZXJzIHNob3Vs
ZG4ndCBiZSBiaWdnZXIgdGhhbiBrTWF4RmlsdGVyU2l6ZS4KICAgICBGbG9hdFJlY3QgdGVtcFNv
dXJjZVJlY3QgPSBhYnNvbHV0ZURyYXdpbmdSZWdpb247CisgICAgSW1hZ2VCdWZmZXI6OmlzU2l6
ZUNsYW1wZWQodGVtcFNvdXJjZVJlY3Quc2l6ZSgpLCBzY2FsZSk7CiAgICAgdGVtcFNvdXJjZVJl
Y3Quc2NhbGUoc2NhbGUud2lkdGgoKSwgc2NhbGUuaGVpZ2h0KCkpOwotICAgIGZpdHNJbk1heGlt
dW1JbWFnZVNpemUodGVtcFNvdXJjZVJlY3Quc2l6ZSgpLCBzY2FsZSk7CiAKICAgICAvLyBTZXQg
dGhlIHNjYWxlIGxldmVsIGluIFNWR0ZpbHRlci4KICAgICBmaWx0ZXJEYXRhLT5maWx0ZXItPnNl
dEZpbHRlclJlc29sdXRpb24oc2NhbGUpOwpAQCAtMTgyLDcgKzE2Niw3IEBAIGJvb2wgUmVuZGVy
U1ZHUmVzb3VyY2VGaWx0ZXI6OmFwcGx5UmVzb3UKICAgICBGbG9hdFJlY3Qgc3ViUmVnaW9uID0g
bGFzdEVmZmVjdC0+bWF4RWZmZWN0UmVjdCgpOwogICAgIC8vIEF0IGxlYXN0IG9uZSBGaWx0ZXJF
ZmZlY3QgaGFzIGEgdG9vIGJpZyBpbWFnZSBzaXplLAogICAgIC8vIHJlY2FsY3VsYXRlIHRoZSBl
ZmZlY3Qgc2l6ZXMgd2l0aCBuZXcgc2NhbGUgZmFjdG9ycy4KLSAgICBpZiAoIWZpdHNJbk1heGlt
dW1JbWFnZVNpemUoc3ViUmVnaW9uLnNpemUoKSwgc2NhbGUpKSB7CisgICAgaWYgKCFJbWFnZUJ1
ZmZlcjo6aXNTaXplQ2xhbXBlZChzdWJSZWdpb24uc2l6ZSgpLCBzY2FsZSkpIHsKICAgICAgICAg
ZmlsdGVyRGF0YS0+ZmlsdGVyLT5zZXRGaWx0ZXJSZXNvbHV0aW9uKHNjYWxlKTsKICAgICAgICAg
UmVuZGVyU1ZHUmVzb3VyY2VGaWx0ZXJQcmltaXRpdmU6OmRldGVybWluZUZpbHRlclByaW1pdGl2
ZVN1YnJlZ2lvbigqbGFzdEVmZmVjdCk7CiAgICAgfQpAQCAtMjAxLDkgKzE4NSwxMCBAQCBib29s
IFJlbmRlclNWR1Jlc291cmNlRmlsdGVyOjphcHBseVJlc291CiAgICAgZWZmZWN0aXZlVHJhbnNm
b3JtLnNjYWxlKHNjYWxlLndpZHRoKCksIHNjYWxlLmhlaWdodCgpKTsKICAgICBlZmZlY3RpdmVU
cmFuc2Zvcm0ubXVsdGlwbHkoZmlsdGVyRGF0YS0+c2hlYXJGcmVlQWJzb2x1dGVUcmFuc2Zvcm0p
OwogCi0gICAgc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVyPiBzb3VyY2VHcmFwaGljOwogICAg
IFJlbmRlcmluZ01vZGUgcmVuZGVyaW5nTW9kZSA9IHJlbmRlcmVyLmZyYW1lKCkuc2V0dGluZ3Mo
KS5hY2NlbGVyYXRlZEZpbHRlcnNFbmFibGVkKCkgPyBBY2NlbGVyYXRlZCA6IFVuYWNjZWxlcmF0
ZWQ7Ci0gICAgaWYgKCFTVkdSZW5kZXJpbmdDb250ZXh0OjpjcmVhdGVJbWFnZUJ1ZmZlcihmaWx0
ZXJEYXRhLT5kcmF3aW5nUmVnaW9uLCBlZmZlY3RpdmVUcmFuc2Zvcm0sIHNvdXJjZUdyYXBoaWMs
IENvbG9yU3BhY2VMaW5lYXJSR0IsIHJlbmRlcmluZ01vZGUpKSB7CisKKyAgICBhdXRvIHNvdXJj
ZUdyYXBoaWMgPSBTVkdSZW5kZXJpbmdDb250ZXh0OjpjcmVhdGVJbWFnZUJ1ZmZlcihmaWx0ZXJE
YXRhLT5kcmF3aW5nUmVnaW9uLCBlZmZlY3RpdmVUcmFuc2Zvcm0sIENvbG9yU3BhY2VMaW5lYXJS
R0IsIHJlbmRlcmluZ01vZGUpOworICAgIGlmICghc291cmNlR3JhcGhpYykgewogICAgICAgICBB
U1NFUlQoIW1fZmlsdGVyLmNvbnRhaW5zKCZyZW5kZXJlcikpOwogICAgICAgICBmaWx0ZXJEYXRh
LT5zYXZlZENvbnRleHQgPSBjb250ZXh0OwogICAgICAgICBtX2ZpbHRlci5zZXQoJnJlbmRlcmVy
LCBXVEY6Om1vdmUoZmlsdGVyRGF0YSkpOwpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L3N2Zy9SZW5kZXJTVkdSZXNvdXJjZUZpbHRlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VGaWx0ZXIuaAkocmV2aXNpb24gMTgz
NzU2KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJjZUZp
bHRlci5oCSh3b3JraW5nIGNvcHkpCkBAIC05MSw4ICs5MSw2IEBAIHByaXZhdGU6CiAgICAgdmly
dHVhbCBjb25zdCBjaGFyKiByZW5kZXJOYW1lKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gIlJl
bmRlclNWR1Jlc291cmNlRmlsdGVyIjsgfQogICAgIHZpcnR1YWwgYm9vbCBpc1NWR1Jlc291cmNl
RmlsdGVyKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gdHJ1ZTsgfQogCi0gICAgYm9vbCBmaXRz
SW5NYXhpbXVtSW1hZ2VTaXplKGNvbnN0IEZsb2F0U2l6ZSYsIEZsb2F0U2l6ZSYpOwotCiAgICAg
SGFzaE1hcDxSZW5kZXJPYmplY3QqLCBzdGQ6OnVuaXF1ZV9wdHI8RmlsdGVyRGF0YT4+IG1fZmls
dGVyOwogfTsKIApJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdS
ZXNvdXJjZUdyYWRpZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvc3ZnL1JlbmRlclNWR1Jlc291cmNlR3JhZGllbnQuY3BwCShyZXZpc2lvbiAxODM3NTYpCisr
KyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291cmNlR3JhZGllbnQu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC01OCwxMiArNTgsMTEgQEAgc3RhdGljIGlubGluZSBib29s
IGNyZWF0ZU1hc2tBbmRTd2FwQ29udAogICAgIGF1dG8qIHRleHRSb290QmxvY2sgPSBSZW5kZXJT
VkdUZXh0Ojpsb2NhdGVSZW5kZXJTVkdUZXh0QW5jZXN0b3IoKm9iamVjdCk7CiAgICAgQVNTRVJU
KHRleHRSb290QmxvY2spOwogCi0gICAgQWZmaW5lVHJhbnNmb3JtIGFic29sdXRlVHJhbnNmb3Jt
OwotICAgIFNWR1JlbmRlcmluZ0NvbnRleHQ6OmNhbGN1bGF0ZVRyYW5zZm9ybWF0aW9uVG9PdXRl
cm1vc3RDb29yZGluYXRlU3lzdGVtKCp0ZXh0Um9vdEJsb2NrLCBhYnNvbHV0ZVRyYW5zZm9ybSk7
Ci0KKyAgICBBZmZpbmVUcmFuc2Zvcm0gYWJzb2x1dGVUcmFuc2Zvcm0gPSBTVkdSZW5kZXJpbmdD
b250ZXh0OjpjYWxjdWxhdGVUcmFuc2Zvcm1hdGlvblRvT3V0ZXJtb3N0Q29vcmRpbmF0ZVN5c3Rl
bSgqdGV4dFJvb3RCbG9jayk7CiAgICAgRmxvYXRSZWN0IHJlcGFpbnRSZWN0ID0gdGV4dFJvb3RC
bG9jay0+cmVwYWludFJlY3RJbkxvY2FsQ29vcmRpbmF0ZXMoKTsKLSAgICBzdGQ6OnVuaXF1ZV9w
dHI8SW1hZ2VCdWZmZXI+IG1hc2tJbWFnZTsKLSAgICBpZiAoIVNWR1JlbmRlcmluZ0NvbnRleHQ6
OmNyZWF0ZUltYWdlQnVmZmVyKHJlcGFpbnRSZWN0LCBhYnNvbHV0ZVRyYW5zZm9ybSwgbWFza0lt
YWdlLCBDb2xvclNwYWNlRGV2aWNlUkdCLCBVbmFjY2VsZXJhdGVkKSkKKworICAgIGF1dG8gbWFz
a0ltYWdlID0gU1ZHUmVuZGVyaW5nQ29udGV4dDo6Y3JlYXRlSW1hZ2VCdWZmZXIocmVwYWludFJl
Y3QsIGFic29sdXRlVHJhbnNmb3JtLCBDb2xvclNwYWNlRGV2aWNlUkdCLCBVbmFjY2VsZXJhdGVk
KTsKKyAgICBpZiAoIW1hc2tJbWFnZSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgR3Jh
cGhpY3NDb250ZXh0KiBtYXNrSW1hZ2VDb250ZXh0ID0gbWFza0ltYWdlLT5jb250ZXh0KCk7CkBA
IC04MCwxMCArNzksMTAgQEAgc3RhdGljIGlubGluZSBBZmZpbmVUcmFuc2Zvcm0gY2xpcFRvVGV4
dAogICAgIGF1dG8qIHRleHRSb290QmxvY2sgPSBSZW5kZXJTVkdUZXh0Ojpsb2NhdGVSZW5kZXJT
VkdUZXh0QW5jZXN0b3IoKm9iamVjdCk7CiAgICAgQVNTRVJUKHRleHRSb290QmxvY2spOwogCi0g
ICAgQWZmaW5lVHJhbnNmb3JtIGFic29sdXRlVHJhbnNmb3JtOwotICAgIFNWR1JlbmRlcmluZ0Nv
bnRleHQ6OmNhbGN1bGF0ZVRyYW5zZm9ybWF0aW9uVG9PdXRlcm1vc3RDb29yZGluYXRlU3lzdGVt
KCp0ZXh0Um9vdEJsb2NrLCBhYnNvbHV0ZVRyYW5zZm9ybSk7CisgICAgQWZmaW5lVHJhbnNmb3Jt
IGFic29sdXRlVHJhbnNmb3JtID0gU1ZHUmVuZGVyaW5nQ29udGV4dDo6Y2FsY3VsYXRlVHJhbnNm
b3JtYXRpb25Ub091dGVybW9zdENvb3JkaW5hdGVTeXN0ZW0oKnRleHRSb290QmxvY2spOwogCiAg
ICAgdGFyZ2V0UmVjdCA9IHRleHRSb290QmxvY2stPnJlcGFpbnRSZWN0SW5Mb2NhbENvb3JkaW5h
dGVzKCk7CisKICAgICBTVkdSZW5kZXJpbmdDb250ZXh0OjpjbGlwVG9JbWFnZUJ1ZmZlcihjb250
ZXh0LCBhYnNvbHV0ZVRyYW5zZm9ybSwgdGFyZ2V0UmVjdCwgaW1hZ2VCdWZmZXIsIGZhbHNlKTsK
IAogICAgIEFmZmluZVRyYW5zZm9ybSBtYXRyaXg7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291cmNlTWFza2VyLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291cmNlTWFza2VyLmNwcAkocmV2
aXNpb24gMTgzNzU2KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdS
ZXNvdXJjZU1hc2tlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTYzLDE2ICs2MywxNCBAQCBib29s
IFJlbmRlclNWR1Jlc291cmNlTWFza2VyOjphcHBseVNWR01hCiAgICAgICAgIG1fbWFza2VyLnNl
dCgmcmVuZGVyZXIsIHN0ZDo6bWFrZV91bmlxdWU8TWFza2VyRGF0YT4oKSk7CiAKICAgICBNYXNr
ZXJEYXRhKiBtYXNrZXJEYXRhID0gbV9tYXNrZXIuZ2V0KCZyZW5kZXJlcik7Ci0KLSAgICBBZmZp
bmVUcmFuc2Zvcm0gYWJzb2x1dGVUcmFuc2Zvcm07Ci0gICAgU1ZHUmVuZGVyaW5nQ29udGV4dDo6
Y2FsY3VsYXRlVHJhbnNmb3JtYXRpb25Ub091dGVybW9zdENvb3JkaW5hdGVTeXN0ZW0ocmVuZGVy
ZXIsIGFic29sdXRlVHJhbnNmb3JtKTsKLQorICAgIEFmZmluZVRyYW5zZm9ybSBhYnNvbHV0ZVRy
YW5zZm9ybSA9IFNWR1JlbmRlcmluZ0NvbnRleHQ6OmNhbGN1bGF0ZVRyYW5zZm9ybWF0aW9uVG9P
dXRlcm1vc3RDb29yZGluYXRlU3lzdGVtKHJlbmRlcmVyKTsKICAgICBGbG9hdFJlY3QgcmVwYWlu
dFJlY3QgPSByZW5kZXJlci5yZXBhaW50UmVjdEluTG9jYWxDb29yZGluYXRlcygpOwogCiAgICAg
aWYgKCFtYXNrZXJEYXRhLT5tYXNrSW1hZ2UgJiYgIXJlcGFpbnRSZWN0LmlzRW1wdHkoKSkgewog
ICAgICAgICBjb25zdCBTVkdSZW5kZXJTdHlsZSYgc3ZnU3R5bGUgPSBzdHlsZSgpLnN2Z1N0eWxl
KCk7CiAgICAgICAgIENvbG9yU3BhY2UgY29sb3JTcGFjZSA9IHN2Z1N0eWxlLmNvbG9ySW50ZXJw
b2xhdGlvbigpID09IENJX0xJTkVBUlJHQiA/IENvbG9yU3BhY2VMaW5lYXJSR0IgOiBDb2xvclNw
YWNlRGV2aWNlUkdCOwotICAgICAgICBpZiAoIVNWR1JlbmRlcmluZ0NvbnRleHQ6OmNyZWF0ZUlt
YWdlQnVmZmVyKHJlcGFpbnRSZWN0LCBhYnNvbHV0ZVRyYW5zZm9ybSwgbWFza2VyRGF0YS0+bWFz
a0ltYWdlLCBjb2xvclNwYWNlLCBVbmFjY2VsZXJhdGVkKSkKKyAgICAgICAgbWFza2VyRGF0YS0+
bWFza0ltYWdlID0gU1ZHUmVuZGVyaW5nQ29udGV4dDo6Y3JlYXRlSW1hZ2VCdWZmZXIocmVwYWlu
dFJlY3QsIGFic29sdXRlVHJhbnNmb3JtLCBjb2xvclNwYWNlLCBVbmFjY2VsZXJhdGVkKTsKKyAg
ICAgICAgaWYgKCFtYXNrZXJEYXRhLT5tYXNrSW1hZ2UpCiAgICAgICAgICAgICByZXR1cm4gZmFs
c2U7CiAKICAgICAgICAgaWYgKCFkcmF3Q29udGVudEludG9NYXNrSW1hZ2UobWFza2VyRGF0YSwg
Y29sb3JTcGFjZSwgJnJlbmRlcmVyKSkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9z
dmcvUmVuZGVyU1ZHUmVzb3VyY2VQYXR0ZXJuLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291cmNlUGF0dGVybi5jcHAJKHJldmlzaW9u
IDE4Mzc1NikKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVzb3Vy
Y2VQYXR0ZXJuLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzAsMjAgKzcwLDE5IEBAIFBhdHRlcm5E
YXRhKiBSZW5kZXJTVkdSZXNvdXJjZVBhdHRlcm46OmIKIAogICAgIC8vIElmIHdlIGNvdWxkbid0
IGRldGVybWluZSB0aGUgcGF0dGVybiBjb250ZW50IGVsZW1lbnQgcm9vdCwgc3RvcCBoZXJlLgog
ICAgIGlmICghbV9hdHRyaWJ1dGVzLnBhdHRlcm5Db250ZW50RWxlbWVudCgpKQotICAgICAgICBy
ZXR1cm4gMDsKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAKICAgICAvLyBBbiBlbXB0eSB2aWV3
Qm94IGRpc2FibGVzIHJlbmRlcmluZy4KICAgICBpZiAobV9hdHRyaWJ1dGVzLmhhc1ZpZXdCb3go
KSAmJiBtX2F0dHJpYnV0ZXMudmlld0JveCgpLmlzRW1wdHkoKSkKLSAgICAgICAgcmV0dXJuIDA7
CisgICAgICAgIHJldHVybiBudWxscHRyOwogCiAgICAgLy8gQ29tcHV0ZSBhbGwgbmVjZXNzYXJ5
IHRyYW5zZm9ybWF0aW9ucyB0byBidWlsZCB0aGUgdGlsZSBpbWFnZSAmIHRoZSBwYXR0ZXJuLgog
ICAgIEZsb2F0UmVjdCB0aWxlQm91bmRhcmllczsKICAgICBBZmZpbmVUcmFuc2Zvcm0gdGlsZUlt
YWdlVHJhbnNmb3JtOwogICAgIGlmICghYnVpbGRUaWxlSW1hZ2VUcmFuc2Zvcm0ocmVuZGVyZXIs
IG1fYXR0cmlidXRlcywgcGF0dGVybkVsZW1lbnQoKSwgdGlsZUJvdW5kYXJpZXMsIHRpbGVJbWFn
ZVRyYW5zZm9ybSkpCi0gICAgICAgIHJldHVybiAwOworICAgICAgICByZXR1cm4gbnVsbHB0cjsK
IAotICAgIEFmZmluZVRyYW5zZm9ybSBhYnNvbHV0ZVRyYW5zZm9ybUlnbm9yaW5nUm90YXRpb247
Ci0gICAgU1ZHUmVuZGVyaW5nQ29udGV4dDo6Y2FsY3VsYXRlVHJhbnNmb3JtYXRpb25Ub091dGVy
bW9zdENvb3JkaW5hdGVTeXN0ZW0ocmVuZGVyZXIsIGFic29sdXRlVHJhbnNmb3JtSWdub3JpbmdS
b3RhdGlvbik7CisgICAgQWZmaW5lVHJhbnNmb3JtIGFic29sdXRlVHJhbnNmb3JtSWdub3JpbmdS
b3RhdGlvbiA9IFNWR1JlbmRlcmluZ0NvbnRleHQ6OmNhbGN1bGF0ZVRyYW5zZm9ybWF0aW9uVG9P
dXRlcm1vc3RDb29yZGluYXRlU3lzdGVtKHJlbmRlcmVyKTsKIAogICAgIC8vIElnbm9yZSAyRCBy
b3RhdGlvbiwgYXMgaXQgZG9lc24ndCBhZmZlY3QgdGhlIHNpemUgb2YgdGhlIHRpbGUuCiAgICAg
U1ZHUmVuZGVyaW5nQ29udGV4dDo6Y2xlYXIyRFJvdGF0aW9uKGFic29sdXRlVHJhbnNmb3JtSWdu
b3JpbmdSb3RhdGlvbik7CkBAIC05NSwxMyArOTQsMTMgQEAgUGF0dGVybkRhdGEqIFJlbmRlclNW
R1Jlc291cmNlUGF0dGVybjo6YgogICAgICAgICBzdGF0aWNfY2FzdDxmbG9hdD4obV9hdHRyaWJ1
dGVzLnBhdHRlcm5UcmFuc2Zvcm0oKS55U2NhbGUoKSkpOwogCiAgICAgLy8gQnVpbGQgdGlsZSBp
bWFnZS4KLSAgICBzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXI+IHRpbGVJbWFnZSA9IGNyZWF0
ZVRpbGVJbWFnZShtX2F0dHJpYnV0ZXMsIHRpbGVCb3VuZGFyaWVzLCBhYnNvbHV0ZVRpbGVCb3Vu
ZGFyaWVzLCB0aWxlSW1hZ2VUcmFuc2Zvcm0sIGNsYW1wZWRBYnNvbHV0ZVRpbGVCb3VuZGFyaWVz
KTsKKyAgICBhdXRvIHRpbGVJbWFnZSA9IGNyZWF0ZVRpbGVJbWFnZShtX2F0dHJpYnV0ZXMsIHRp
bGVCb3VuZGFyaWVzLCBhYnNvbHV0ZVRpbGVCb3VuZGFyaWVzLCB0aWxlSW1hZ2VUcmFuc2Zvcm0s
IGNsYW1wZWRBYnNvbHV0ZVRpbGVCb3VuZGFyaWVzKTsKICAgICBpZiAoIXRpbGVJbWFnZSkKLSAg
ICAgICAgcmV0dXJuIDA7CisgICAgICAgIHJldHVybiBudWxscHRyOwogCiAgICAgUmVmUHRyPElt
YWdlPiBjb3BpZWRJbWFnZSA9IHRpbGVJbWFnZS0+Y29weUltYWdlKENvcHlCYWNraW5nU3RvcmUp
OwogICAgIGlmICghY29waWVkSW1hZ2UpCi0gICAgICAgIHJldHVybiAwOworICAgICAgICByZXR1
cm4gbnVsbHB0cjsKIAogICAgIC8vIEJ1aWxkIHBhdHRlcm4uCiAgICAgYXV0byBwYXR0ZXJuRGF0
YSA9IHN0ZDo6bWFrZV91bmlxdWU8UGF0dGVybkRhdGE+KCk7CkBAIC0yMzMsMTEgKzIzMiw5IEBA
IGJvb2wgUmVuZGVyU1ZHUmVzb3VyY2VQYXR0ZXJuOjpidWlsZFRpbGUKIAogc3RkOjp1bmlxdWVf
cHRyPEltYWdlQnVmZmVyPiBSZW5kZXJTVkdSZXNvdXJjZVBhdHRlcm46OmNyZWF0ZVRpbGVJbWFn
ZShjb25zdCBQYXR0ZXJuQXR0cmlidXRlcyYgYXR0cmlidXRlcywgY29uc3QgRmxvYXRSZWN0JiB0
aWxlQm91bmRhcmllcywgY29uc3QgRmxvYXRSZWN0JiBhYnNvbHV0ZVRpbGVCb3VuZGFyaWVzLCBj
b25zdCBBZmZpbmVUcmFuc2Zvcm0mIHRpbGVJbWFnZVRyYW5zZm9ybSwgRmxvYXRSZWN0JiBjbGFt
cGVkQWJzb2x1dGVUaWxlQm91bmRhcmllcykgY29uc3QKIHsKLSAgICBjbGFtcGVkQWJzb2x1dGVU
aWxlQm91bmRhcmllcyA9IFNWR1JlbmRlcmluZ0NvbnRleHQ6OmNsYW1wZWRBYnNvbHV0ZVRhcmdl
dFJlY3QoYWJzb2x1dGVUaWxlQm91bmRhcmllcyk7Ci0KLSAgICBzdGQ6OnVuaXF1ZV9wdHI8SW1h
Z2VCdWZmZXI+IHRpbGVJbWFnZTsKLQotICAgIGlmICghU1ZHUmVuZGVyaW5nQ29udGV4dDo6Y3Jl
YXRlSW1hZ2VCdWZmZXJGb3JQYXR0ZXJuKGFic29sdXRlVGlsZUJvdW5kYXJpZXMsIGNsYW1wZWRB
YnNvbHV0ZVRpbGVCb3VuZGFyaWVzLCB0aWxlSW1hZ2UsIENvbG9yU3BhY2VEZXZpY2VSR0IsIFVu
YWNjZWxlcmF0ZWQpKQorICAgIGNsYW1wZWRBYnNvbHV0ZVRpbGVCb3VuZGFyaWVzID0gSW1hZ2VC
dWZmZXI6OmNsYW1wZWRSZWN0KGFic29sdXRlVGlsZUJvdW5kYXJpZXMpOworICAgIGF1dG8gdGls
ZUltYWdlID0gU1ZHUmVuZGVyaW5nQ29udGV4dDo6Y3JlYXRlSW1hZ2VCdWZmZXIoYWJzb2x1dGVU
aWxlQm91bmRhcmllcywgY2xhbXBlZEFic29sdXRlVGlsZUJvdW5kYXJpZXMsIENvbG9yU3BhY2VE
ZXZpY2VSR0IsIFVuYWNjZWxlcmF0ZWQpOworICAgIGlmICghdGlsZUltYWdlKQogICAgICAgICBy
ZXR1cm4gbnVsbHB0cjsKIAogICAgIEdyYXBoaWNzQ29udGV4dCogdGlsZUltYWdlQ29udGV4dCA9
IHRpbGVJbWFnZS0+Y29udGV4dCgpOwpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2
Zy9TVkdSZW5kZXJpbmdDb250ZXh0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvc3ZnL1NWR1JlbmRlcmluZ0NvbnRleHQuY3BwCShyZXZpc2lvbiAxODM3NTYpCisr
KyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR1JlbmRlcmluZ0NvbnRleHQuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0zOSw4ICszOSw2IEBACiAjaW5jbHVkZSAiU1ZHUmVzb3VyY2VzLmgi
CiAjaW5jbHVkZSAiU1ZHUmVzb3VyY2VzQ2FjaGUuaCIKIAotc3RhdGljIGludCBrTWF4SW1hZ2VC
dWZmZXJTaXplID0gNDA5NjsKLQogbmFtZXNwYWNlIFdlYkNvcmUgewogCiBzdGF0aWMgaW5saW5l
IGJvb2wgaXNSZW5kZXJpbmdNYXNrSW1hZ2UoY29uc3QgUmVuZGVyT2JqZWN0JiBvYmplY3QpCkBA
IC0yMDQsMTQgKzIwMiwxMyBAQCBzdGF0aWMgQWZmaW5lVHJhbnNmb3JtJiBjdXJyZW50Q29udGVu
dFRyCiAKIGZsb2F0IFNWR1JlbmRlcmluZ0NvbnRleHQ6OmNhbGN1bGF0ZVNjcmVlbkZvbnRTaXpl
U2NhbGluZ0ZhY3Rvcihjb25zdCBSZW5kZXJPYmplY3QmIHJlbmRlcmVyKQogewotICAgIEFmZmlu
ZVRyYW5zZm9ybSBjdG07Ci0gICAgY2FsY3VsYXRlVHJhbnNmb3JtYXRpb25Ub091dGVybW9zdENv
b3JkaW5hdGVTeXN0ZW0ocmVuZGVyZXIsIGN0bSk7CisgICAgQWZmaW5lVHJhbnNmb3JtIGN0bSA9
IGNhbGN1bGF0ZVRyYW5zZm9ybWF0aW9uVG9PdXRlcm1vc3RDb29yZGluYXRlU3lzdGVtKHJlbmRl
cmVyKTsKICAgICByZXR1cm4gbmFycm93UHJlY2lzaW9uVG9GbG9hdChzcXJ0KChwb3coY3RtLnhT
Y2FsZSgpLCAyKSArIHBvdyhjdG0ueVNjYWxlKCksIDIpKSAvIDIpKTsKIH0KIAotdm9pZCBTVkdS
ZW5kZXJpbmdDb250ZXh0OjpjYWxjdWxhdGVUcmFuc2Zvcm1hdGlvblRvT3V0ZXJtb3N0Q29vcmRp
bmF0ZVN5c3RlbShjb25zdCBSZW5kZXJPYmplY3QmIHJlbmRlcmVyLCBBZmZpbmVUcmFuc2Zvcm0m
IGFic29sdXRlVHJhbnNmb3JtKQorQWZmaW5lVHJhbnNmb3JtIFNWR1JlbmRlcmluZ0NvbnRleHQ6
OmNhbGN1bGF0ZVRyYW5zZm9ybWF0aW9uVG9PdXRlcm1vc3RDb29yZGluYXRlU3lzdGVtKGNvbnN0
IFJlbmRlck9iamVjdCYgcmVuZGVyZXIpCiB7Ci0gICAgYWJzb2x1dGVUcmFuc2Zvcm0gPSBjdXJy
ZW50Q29udGVudFRyYW5zZm9ybWF0aW9uKCk7CisgICAgQWZmaW5lVHJhbnNmb3JtIGFic29sdXRl
VHJhbnNmb3JtID0gY3VycmVudENvbnRlbnRUcmFuc2Zvcm1hdGlvbigpOwogCiAgICAgZmxvYXQg
ZGV2aWNlU2NhbGVGYWN0b3IgPSByZW5kZXJlci5kb2N1bWVudCgpLmRldmljZVNjYWxlRmFjdG9y
KCk7CiAgICAgLy8gV2FsayB1cCB0aGUgcmVuZGVyIHRyZWUsIGFjY3VtdWxhdGluZyBTVkcgdHJh
bnNmb3Jtcy4KQEAgLTIzNyw1MyArMjM0LDU1IEBAIHZvaWQgU1ZHUmVuZGVyaW5nQ29udGV4dDo6
Y2FsY3VsYXRlVHJhbnMKICAgICB9CiAKICAgICBhYnNvbHV0ZVRyYW5zZm9ybS5zY2FsZShkZXZp
Y2VTY2FsZUZhY3Rvcik7CisgICAgcmV0dXJuIGFic29sdXRlVHJhbnNmb3JtOwogfQogCi1ib29s
IFNWR1JlbmRlcmluZ0NvbnRleHQ6OmNyZWF0ZUltYWdlQnVmZmVyKGNvbnN0IEZsb2F0UmVjdCYg
dGFyZ2V0UmVjdCwgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiBhYnNvbHV0ZVRyYW5zZm9ybSwgc3Rk
Ojp1bmlxdWVfcHRyPEltYWdlQnVmZmVyPiYgaW1hZ2VCdWZmZXIsIENvbG9yU3BhY2UgY29sb3JT
cGFjZSwgUmVuZGVyaW5nTW9kZSByZW5kZXJpbmdNb2RlKQorc3RkOjp1bmlxdWVfcHRyPEltYWdl
QnVmZmVyPiBTVkdSZW5kZXJpbmdDb250ZXh0OjpjcmVhdGVJbWFnZUJ1ZmZlcihjb25zdCBGbG9h
dFJlY3QmIHRhcmdldFJlY3QsIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgYWJzb2x1dGVUcmFuc2Zv
cm0sIENvbG9yU3BhY2UgY29sb3JTcGFjZSwgUmVuZGVyaW5nTW9kZSByZW5kZXJpbmdNb2RlKQog
ewogICAgIEludFJlY3QgcGFpbnRSZWN0ID0gY2FsY3VsYXRlSW1hZ2VCdWZmZXJSZWN0KHRhcmdl
dFJlY3QsIGFic29sdXRlVHJhbnNmb3JtKTsKICAgICAvLyBEb24ndCBjcmVhdGUgZW1wdHkgSW1h
Z2VCdWZmZXJzLgogICAgIGlmIChwYWludFJlY3QuaXNFbXB0eSgpKQotICAgICAgICByZXR1cm4g
ZmFsc2U7CisgICAgICAgIHJldHVybiBudWxscHRyOwogCi0gICAgSW50U2l6ZSBjbGFtcGVkU2l6
ZSA9IGNsYW1wZWRBYnNvbHV0ZVNpemUocGFpbnRSZWN0LnNpemUoKSk7Ci0gICAgc3RkOjp1bmlx
dWVfcHRyPEltYWdlQnVmZmVyPiBpbWFnZSA9IEltYWdlQnVmZmVyOjpjcmVhdGUoY2xhbXBlZFNp
emUsIDEsIGNvbG9yU3BhY2UsIHJlbmRlcmluZ01vZGUpOwotICAgIGlmICghaW1hZ2UpCi0gICAg
ICAgIHJldHVybiBmYWxzZTsKKyAgICBGbG9hdFNpemUgc2NhbGU7CisgICAgRmxvYXRTaXplIGNs
YW1wZWRTaXplID0gSW1hZ2VCdWZmZXI6OmNsYW1wZWRTaXplKHBhaW50UmVjdC5zaXplKCksIHNj
YWxlKTsKIAotICAgIEdyYXBoaWNzQ29udGV4dCogaW1hZ2VDb250ZXh0ID0gaW1hZ2UtPmNvbnRl
eHQoKTsKLSAgICBBU1NFUlQoaW1hZ2VDb250ZXh0KTsKKyAgICBhdXRvIGltYWdlQnVmZmVyID0g
SW1hZ2VCdWZmZXI6OmNyZWF0ZShjbGFtcGVkU2l6ZSwgMSwgY29sb3JTcGFjZSwgcmVuZGVyaW5n
TW9kZSk7CisgICAgaWYgKCFpbWFnZUJ1ZmZlcikKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAK
LSAgICBpbWFnZUNvbnRleHQtPnNjYWxlKEZsb2F0U2l6ZShzdGF0aWNfY2FzdDxmbG9hdD4oY2xh
bXBlZFNpemUud2lkdGgoKSkgLyBwYWludFJlY3Qud2lkdGgoKSwKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBzdGF0aWNfY2FzdDxmbG9hdD4oY2xhbXBlZFNpemUuaGVpZ2h0KCkp
IC8gcGFpbnRSZWN0LmhlaWdodCgpKSk7Ci0gICAgaW1hZ2VDb250ZXh0LT50cmFuc2xhdGUoLXBh
aW50UmVjdC54KCksIC1wYWludFJlY3QueSgpKTsKLSAgICBpbWFnZUNvbnRleHQtPmNvbmNhdENU
TShhYnNvbHV0ZVRyYW5zZm9ybSk7CisgICAgQWZmaW5lVHJhbnNmb3JtIHRyYW5zZm9ybTsKKyAg
ICB0cmFuc2Zvcm0gKj0gQWZmaW5lVHJhbnNmb3JtKCkuc2NhbGUoc2NhbGUud2lkdGgoKSwgc2Nh
bGUuaGVpZ2h0KCkpOworICAgIHRyYW5zZm9ybSAqPSBBZmZpbmVUcmFuc2Zvcm0oKS50cmFuc2xh
dGUoLXBhaW50UmVjdC54KCksIC1wYWludFJlY3QueSgpKTsKKyAgICB0cmFuc2Zvcm0gKj0gYWJz
b2x1dGVUcmFuc2Zvcm07CiAKLSAgICBpbWFnZUJ1ZmZlciA9IFdURjo6bW92ZShpbWFnZSk7Ci0g
ICAgcmV0dXJuIHRydWU7CisgICAgR3JhcGhpY3NDb250ZXh0KiBpbWFnZUNvbnRleHQgPSBpbWFn
ZUJ1ZmZlci0+Y29udGV4dCgpOworICAgIEFTU0VSVChpbWFnZUNvbnRleHQpOworICAgIGltYWdl
Q29udGV4dC0+Y29uY2F0Q1RNKHRyYW5zZm9ybSk7CisKKyAgICByZXR1cm4gaW1hZ2VCdWZmZXI7
CiB9CiAKLWJvb2wgU1ZHUmVuZGVyaW5nQ29udGV4dDo6Y3JlYXRlSW1hZ2VCdWZmZXJGb3JQYXR0
ZXJuKGNvbnN0IEZsb2F0UmVjdCYgYWJzb2x1dGVUYXJnZXRSZWN0LCBjb25zdCBGbG9hdFJlY3Qm
IGNsYW1wZWRBYnNvbHV0ZVRhcmdldFJlY3QsIHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlcj4m
IGltYWdlQnVmZmVyLCBDb2xvclNwYWNlIGNvbG9yU3BhY2UsIFJlbmRlcmluZ01vZGUgcmVuZGVy
aW5nTW9kZSkKK3N0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlcj4gU1ZHUmVuZGVyaW5nQ29udGV4
dDo6Y3JlYXRlSW1hZ2VCdWZmZXIoY29uc3QgRmxvYXRSZWN0JiB0YXJnZXRSZWN0LCBjb25zdCBG
bG9hdFJlY3QmIGNsYW1wZWRSZWN0LCBDb2xvclNwYWNlIGNvbG9yU3BhY2UsIFJlbmRlcmluZ01v
ZGUgcmVuZGVyaW5nTW9kZSkKIHsKLSAgICBJbnRTaXplIGltYWdlU2l6ZShyb3VuZGVkSW50U2l6
ZShjbGFtcGVkQWJzb2x1dGVUYXJnZXRSZWN0LnNpemUoKSkpOwotICAgIEludFNpemUgdW5jbGFt
cGVkSW1hZ2VTaXplKHJvdW5kZWRJbnRTaXplKGFic29sdXRlVGFyZ2V0UmVjdC5zaXplKCkpKTsK
KyAgICBJbnRTaXplIGNsYW1wZWRTaXplID0gcm91bmRlZEludFNpemUoY2xhbXBlZFJlY3Quc2l6
ZSgpKTsKKyAgICBJbnRTaXplIHVuY2xhbXBlZFNpemUgPSByb3VuZGVkSW50U2l6ZSh0YXJnZXRS
ZWN0LnNpemUoKSk7CiAKICAgICAvLyBEb24ndCBjcmVhdGUgZW1wdHkgSW1hZ2VCdWZmZXJzLgot
ICAgIGlmIChpbWFnZVNpemUuaXNFbXB0eSgpKQotICAgICAgICByZXR1cm4gZmFsc2U7CisgICAg
aWYgKGNsYW1wZWRTaXplLmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAKLSAg
ICBzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXI+IGltYWdlID0gSW1hZ2VCdWZmZXI6OmNyZWF0
ZShpbWFnZVNpemUsIDEsIGNvbG9yU3BhY2UsIHJlbmRlcmluZ01vZGUpOwotICAgIGlmICghaW1h
Z2UpCi0gICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBhdXRvIGltYWdlQnVmZmVyID0gSW1hZ2VC
dWZmZXI6OmNyZWF0ZShjbGFtcGVkU2l6ZSwgMSwgY29sb3JTcGFjZSwgcmVuZGVyaW5nTW9kZSk7
CisgICAgaWYgKCFpbWFnZUJ1ZmZlcikKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAKLSAgICBH
cmFwaGljc0NvbnRleHQqIGltYWdlQ29udGV4dCA9IGltYWdlLT5jb250ZXh0KCk7CisgICAgR3Jh
cGhpY3NDb250ZXh0KiBpbWFnZUNvbnRleHQgPSBpbWFnZUJ1ZmZlci0+Y29udGV4dCgpOwogICAg
IEFTU0VSVChpbWFnZUNvbnRleHQpOwogCiAgICAgLy8gQ29tcGVuc2F0ZSByb3VuZGluZyBlZmZl
Y3RzLCBhcyB0aGUgYWJzb2x1dGUgdGFyZ2V0IHJlY3QgaXMgdXNpbmcgZmxvYXRpbmctcG9pbnQg
bnVtYmVycyBhbmQgdGhlIGltYWdlIGJ1ZmZlciBzaXplIGlzIGludGVnZXIuCi0gICAgaW1hZ2VD
b250ZXh0LT5zY2FsZShGbG9hdFNpemUodW5jbGFtcGVkSW1hZ2VTaXplLndpZHRoKCkgLyBhYnNv
bHV0ZVRhcmdldFJlY3Qud2lkdGgoKSwgdW5jbGFtcGVkSW1hZ2VTaXplLmhlaWdodCgpIC8gYWJz
b2x1dGVUYXJnZXRSZWN0LmhlaWdodCgpKSk7CisgICAgaW1hZ2VDb250ZXh0LT5zY2FsZShGbG9h
dFNpemUodW5jbGFtcGVkU2l6ZS53aWR0aCgpIC8gdGFyZ2V0UmVjdC53aWR0aCgpLCB1bmNsYW1w
ZWRTaXplLmhlaWdodCgpIC8gdGFyZ2V0UmVjdC5oZWlnaHQoKSkpOwogCi0gICAgaW1hZ2VCdWZm
ZXIgPSBXVEY6Om1vdmUoaW1hZ2UpOwotICAgIHJldHVybiB0cnVlOworICAgIHJldHVybiBpbWFn
ZUJ1ZmZlcjsKIH0KIAogdm9pZCBTVkdSZW5kZXJpbmdDb250ZXh0OjpyZW5kZXJTdWJ0cmVlVG9J
bWFnZUJ1ZmZlcihJbWFnZUJ1ZmZlciogaW1hZ2UsIFJlbmRlckVsZW1lbnQmIGl0ZW0sIGNvbnN0
IEFmZmluZVRyYW5zZm9ybSYgc3VidHJlZUNvbnRlbnRUcmFuc2Zvcm1hdGlvbikKQEAgLTMyMiwx
OCArMzIxLDYgQEAgdm9pZCBTVkdSZW5kZXJpbmdDb250ZXh0OjpjbGlwVG9JbWFnZUJ1ZgogICAg
ICAgICBpbWFnZUJ1ZmZlci5yZXNldCgpOwogfQogCi1GbG9hdFJlY3QgU1ZHUmVuZGVyaW5nQ29u
dGV4dDo6Y2xhbXBlZEFic29sdXRlVGFyZ2V0UmVjdChjb25zdCBGbG9hdFJlY3QmIGFic29sdXRl
VGFyZ2V0UmVjdCkKLXsKLSAgICBjb25zdCBGbG9hdFNpemUgbWF4SW1hZ2VCdWZmZXJTaXplKGtN
YXhJbWFnZUJ1ZmZlclNpemUsIGtNYXhJbWFnZUJ1ZmZlclNpemUpOwotICAgIHJldHVybiBGbG9h
dFJlY3QoYWJzb2x1dGVUYXJnZXRSZWN0LmxvY2F0aW9uKCksIGFic29sdXRlVGFyZ2V0UmVjdC5z
aXplKCkuc2hydW5rVG8obWF4SW1hZ2VCdWZmZXJTaXplKSk7Ci19Ci0KLUludFNpemUgU1ZHUmVu
ZGVyaW5nQ29udGV4dDo6Y2xhbXBlZEFic29sdXRlU2l6ZShjb25zdCBJbnRTaXplJiBhYnNvbHV0
ZVNpemUpCi17Ci0gICAgY29uc3QgSW50U2l6ZSBtYXhJbWFnZUJ1ZmZlclNpemUoa01heEltYWdl
QnVmZmVyU2l6ZSwga01heEltYWdlQnVmZmVyU2l6ZSk7Ci0gICAgcmV0dXJuIGFic29sdXRlU2l6
ZS5zaHJ1bmtUbyhtYXhJbWFnZUJ1ZmZlclNpemUpOwotfQotCiB2b2lkIFNWR1JlbmRlcmluZ0Nv
bnRleHQ6OmNsZWFyMkRSb3RhdGlvbihBZmZpbmVUcmFuc2Zvcm0mIHRyYW5zZm9ybSkKIHsKICAg
ICBBZmZpbmVUcmFuc2Zvcm06OkRlY29tcG9zZWRUeXBlIGRlY29tcG9zaXRpb247CkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR1JlbmRlcmluZ0NvbnRleHQuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR1JlbmRlcmluZ0NvbnRleHQu
aAkocmV2aXNpb24gMTgzNzU2KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdS
ZW5kZXJpbmdDb250ZXh0LmgJKHdvcmtpbmcgY29weSkKQEAgLTcxLDE3ICs3MSwxNCBAQCBwdWJs
aWM6CiAgICAgdm9pZCBwcmVwYXJlVG9SZW5kZXJTVkdDb250ZW50KFJlbmRlckVsZW1lbnQmLCBQ
YWludEluZm8mLCBOZWVkc0dyYXBoaWNzQ29udGV4dFNhdmUgPSBEb250U2F2ZUdyYXBoaWNzQ29u
dGV4dCk7CiAgICAgYm9vbCBpc1JlbmRlcmluZ1ByZXBhcmVkKCkgY29uc3QgeyByZXR1cm4gbV9y
ZW5kZXJpbmdGbGFncyAmIFJlbmRlcmluZ1ByZXBhcmVkOyB9CiAKLSAgICBzdGF0aWMgYm9vbCBj
cmVhdGVJbWFnZUJ1ZmZlcihjb25zdCBGbG9hdFJlY3QmIHBhaW50UmVjdCwgY29uc3QgQWZmaW5l
VHJhbnNmb3JtJiBhYnNvbHV0ZVRyYW5zZm9ybSwgc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVy
PiYsIENvbG9yU3BhY2UsIFJlbmRlcmluZ01vZGUpOwotICAgIC8vIFBhdHRlcm5zIG5lZWQgYSBk
aWZmZXJlbnQgZmxvYXQtdG8taW50ZWdlciBjb29yZGluYXRlIG1hcHBpbmcuCi0gICAgc3RhdGlj
IGJvb2wgY3JlYXRlSW1hZ2VCdWZmZXJGb3JQYXR0ZXJuKGNvbnN0IEZsb2F0UmVjdCYgYWJzb2x1
dGVUYXJnZXRSZWN0LCBjb25zdCBGbG9hdFJlY3QmIGNsYW1wZWRBYnNvbHV0ZVRhcmdldFJlY3Qs
IHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlcj4mLCBDb2xvclNwYWNlLCBSZW5kZXJpbmdNb2Rl
KTsKKyAgICBzdGF0aWMgc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVyPiBjcmVhdGVJbWFnZUJ1
ZmZlcihjb25zdCBGbG9hdFJlY3QmIHRhcmdldFJlY3QsIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYg
YWJzb2x1dGVUcmFuc2Zvcm0sIENvbG9yU3BhY2UsIFJlbmRlcmluZ01vZGUpOworICAgIHN0YXRp
YyBzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXI+IGNyZWF0ZUltYWdlQnVmZmVyKGNvbnN0IEZs
b2F0UmVjdCYgdGFyZ2V0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBjbGFtcGVkUmVjdCwgQ29sb3JT
cGFjZSwgUmVuZGVyaW5nTW9kZSk7CiAKICAgICBzdGF0aWMgdm9pZCByZW5kZXJTdWJ0cmVlVG9J
bWFnZUJ1ZmZlcihJbWFnZUJ1ZmZlciosIFJlbmRlckVsZW1lbnQmLCBjb25zdCBBZmZpbmVUcmFu
c2Zvcm0mKTsKICAgICBzdGF0aWMgdm9pZCBjbGlwVG9JbWFnZUJ1ZmZlcihHcmFwaGljc0NvbnRl
eHQqLCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIGFic29sdXRlVHJhbnNmb3JtLCBjb25zdCBGbG9h
dFJlY3QmIHRhcmdldFJlY3QsIHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlcj4mLCBib29sIHNh
ZmVUb0NsZWFyKTsKIAogICAgIHN0YXRpYyBmbG9hdCBjYWxjdWxhdGVTY3JlZW5Gb250U2l6ZVNj
YWxpbmdGYWN0b3IoY29uc3QgUmVuZGVyT2JqZWN0Jik7Ci0gICAgc3RhdGljIHZvaWQgY2FsY3Vs
YXRlVHJhbnNmb3JtYXRpb25Ub091dGVybW9zdENvb3JkaW5hdGVTeXN0ZW0oY29uc3QgUmVuZGVy
T2JqZWN0JiwgQWZmaW5lVHJhbnNmb3JtJiBhYnNvbHV0ZVRyYW5zZm9ybSk7Ci0gICAgc3RhdGlj
IEludFNpemUgY2xhbXBlZEFic29sdXRlU2l6ZShjb25zdCBJbnRTaXplJik7Ci0gICAgc3RhdGlj
IEZsb2F0UmVjdCBjbGFtcGVkQWJzb2x1dGVUYXJnZXRSZWN0KGNvbnN0IEZsb2F0UmVjdCYgYWJz
b2x1dGVUYXJnZXRSZWN0KTsKKyAgICBzdGF0aWMgQWZmaW5lVHJhbnNmb3JtIGNhbGN1bGF0ZVRy
YW5zZm9ybWF0aW9uVG9PdXRlcm1vc3RDb29yZGluYXRlU3lzdGVtKGNvbnN0IFJlbmRlck9iamVj
dCYpOwogICAgIHN0YXRpYyB2b2lkIGNsZWFyMkRSb3RhdGlvbihBZmZpbmVUcmFuc2Zvcm0mKTsK
IAogICAgIHN0YXRpYyBJbnRSZWN0IGNhbGN1bGF0ZUltYWdlQnVmZmVyUmVjdChjb25zdCBGbG9h
dFJlY3QmIHRhcmdldFJlY3QsIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgYWJzb2x1dGVUcmFuc2Zv
cm0pCkluZGV4OiBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVz
dHMvQ2hhbmdlTG9nCShyZXZpc2lvbiAxODM4OTkpCisrKyBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cJ
KHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwxNSBAQAorMjAxNS0wNS0wNiAgU2FpZCBBYm91LUhh
bGxhd2EgIDxzYWJvdWhhbGxhd2FAYXBwbGUuY29tPgorCisgICAgICAgIEFwcGx5aW5nIGEgZmls
dGVyIG9uIGFuIFNWRyBlbGVtZW50LCB3aGljaCBpcyBsYXJnZXIgdGhhbiA0MDk2IHBpeGVscywg
Y2F1c2VzIHRoaXMgZWxlbWVudCB0byBiZSByZW5kZXJlZCBzaGlmdGVkIHRvIHRoZSBsZWZ0Cisg
ICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNDQzMzUKKwor
ICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIHN2Zy9maWx0
ZXJzL2JpZy1zaXplZC1vZmYtdmlld3BvcnQtZmlsdGVyLWV4cGVjdGVkLnN2ZzogQWRkZWQuCisg
ICAgICAgICogc3ZnL2ZpbHRlcnMvYmlnLXNpemVkLW9mZi12aWV3cG9ydC1maWx0ZXIuc3ZnOiBB
ZGRlZC4KKyAgICAgICAgRW5zdXJlIHdoZW4gYXBwbHlpbmcgYSBmaWx0ZXIgb24gYSBsYXJnZSBT
VkcgZWxlbWVudCwgdGhlIHZpZXdwb3J0IG9mIHRoZQorICAgICAgICBTVkcgaW5jbHVkZXMgdGhl
IGNvcnJlY3QgZHJhd2luZyBwYXJ0IG9mIHRoaXMgZWxlbWVudC4KKwogMjAxNS0wNS0wNiAgSm9u
IExlZSAgPGpvbmxlZUBhcHBsZS5jb20+CiAKICAgICAgICAgRXhwb3NlIG1vcmUgZm9udCB3ZWln
aHRzIGZvciAtYXBwbGUtc3lzdGVtCkluZGV4OiBMYXlvdXRUZXN0cy9zdmcvZmlsdGVycy9iaWct
c2l6ZWQtb2ZmLXZpZXdwb3J0LWZpbHRlci1leHBlY3RlZC5zdmcKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5
b3V0VGVzdHMvc3ZnL2ZpbHRlcnMvYmlnLXNpemVkLW9mZi12aWV3cG9ydC1maWx0ZXItZXhwZWN0
ZWQuc3ZnCShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvc3ZnL2ZpbHRlcnMvYmlnLXNpemVk
LW9mZi12aWV3cG9ydC1maWx0ZXItZXhwZWN0ZWQuc3ZnCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAg
KzEsMTAgQEAKKzxzdmcgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2aWV3Qm94
PSIwIDAgMTAwMCA1MDAiPgorICA8ZmlsdGVyIGlkPSJzYXR1cmF0ZS1iYWNrIj4KKyAgICA8ZmVD
b2xvck1hdHJpeCBpbj0iU291cmNlR3JhcGhpYyIgdHlwZT0ic2F0dXJhdGUiIHZhbHVlcz0iMSIv
PgorICA8L2ZpbHRlcj4KKyAgPGcgZmlsdGVyPSJ1cmwoI3NhdHVyYXRlLWJhY2spIj4KKyAgICA8
cmVjdCB4PSItNTAwIiB5PSIwIiB3aWR0aD0iOTUwIiBoZWlnaHQ9IjEwMCUiIGZpbGw9ImdyZWVu
Ii8+CisgICAgPHJlY3QgeD0iNTUwIiB5PSIwIiB3aWR0aD0iOTUwIiBoZWlnaHQ9IjEwMCUiIGZp
bGw9ImdyZWVuIi8+CisgIDwvZz4KKyAgPHJlY3QgeD0iNDUwIiB5PSIwIiB3aWR0aD0iMTAwIiBo
ZWlnaHQ9IjEwMCUiIGZpbGw9Im5vbmUiIHN0cm9rZT0id2hpdGUiIHN0cm9rZS13aWR0aD0iMTAi
Lz4KKzwvc3ZnPgpJbmRleDogTGF5b3V0VGVzdHMvc3ZnL2ZpbHRlcnMvYmlnLXNpemVkLW9mZi12
aWV3cG9ydC1maWx0ZXIuc3ZnCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL3N2Zy9maWx0ZXJz
L2JpZy1zaXplZC1vZmYtdmlld3BvcnQtZmlsdGVyLnN2ZwkocmV2aXNpb24gMCkKKysrIExheW91
dFRlc3RzL3N2Zy9maWx0ZXJzL2JpZy1zaXplZC1vZmYtdmlld3BvcnQtZmlsdGVyLnN2Zwkod29y
a2luZyBjb3B5KQpAQCAtMCwwICsxLDExIEBACis8c3ZnIHhtbG5zPSJodHRwOi8vd3d3LnczLm9y
Zy8yMDAwL3N2ZyIgdmlld0JveD0iMCAwIDEwMDAgNTAwIj4KKyAgPGZpbHRlciBpZD0ic2F0dXJh
dGUtYmFjayI+CisgICAgPGZlQ29sb3JNYXRyaXggaW49IlNvdXJjZUdyYXBoaWMiIHR5cGU9InNh
dHVyYXRlIiB2YWx1ZXM9IjEiLz4KKyAgPC9maWx0ZXI+CisgIDxnIGZpbHRlcj0idXJsKCNzYXR1
cmF0ZS1iYWNrKSI+CisgICAgPHJlY3QgeD0iLTM1MDAiIHk9IjAiIHdpZHRoPSIzOTUwIiBoZWln
aHQ9IjEwMCUiIGZpbGw9ImdyZWVuIi8+CisgICAgPHJlY3QgeD0iNTUwIiB5PSIwIiB3aWR0aD0i
Mzk1MCIgaGVpZ2h0PSIxMDAlIiBmaWxsPSJncmVlbiIvPgorICA8L2c+CisgIDwhLS0gbWFrZSB0
aGUgZWRnZXMgb2YgdGhlIHJlY3RhbmdsZXMgc2hhcnAgYWZ0ZXIgY2xhbXBpbmcgdGhlIGZpbHRl
ciBpbWFnZSBhbmQgc2NhbGluZyBpdCB1cCAtLT4KKyAgPHJlY3QgeD0iNDUwIiB5PSIwIiB3aWR0
aD0iMTAwIiBoZWlnaHQ9IjEwMCUiIGZpbGw9Im5vbmUiIHN0cm9rZT0id2hpdGUiIHN0cm9rZS13
aWR0aD0iMTAiLz4KKzwvc3ZnPgo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>252624</attachid>
            <date>2015-05-07 14:09:07 -0700</date>
            <delta_ts>2015-05-07 14:35:32 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-144335-20150507140750.patch</filename>
            <type>text/plain</type>
            <size>43857</size>
            <attacher name="Said Abou-Hallawa">sabouhallawa</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDE4Mzk0MCkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDEwOSBAQAorMjAxNS0wNS0wNyAgU2FpZCBB
Ym91LUhhbGxhd2EgIDxzYWJvdWhhbGxhd2FAYXBwbGUuY29tPgorCisgICAgICAgIEFwcGx5aW5n
IGEgZmlsdGVyIG9uIGFuIFNWRyBlbGVtZW50LCB3aGljaCBpcyBsYXJnZXIgdGhhbiA0MDk2IHBp
eGVscywgY2F1c2VzIHRoaXMgZWxlbWVudCB0byBiZSByZW5kZXJlZCBzaGlmdGVkIHRvIHRoZSBs
ZWZ0CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNDQz
MzUKKworICAgICAgICBSZXZpZXdlZCBieSBEYXJpbiBBZGxlci4KKworICAgICAgICBXaGVuIHRo
ZSBTVkcgZWxlbWVudCBpcyBsYXJnZXIgdGhhbiA0MDk2eDQwOTYgcGl4ZWxzIGFuZCBpdCBoYXMg
YSBmaWx0ZXIsCisgICAgICAgIGEgY2xpcHBlciBvciBhIG1hc2tlciwgdGhlIEltYWdlQnVmZmVy
IHdoaWNoIGlzIGNyZWF0ZWQgZm9yIGRyYXdpbmcgdGhlCisgICAgICAgIHNvdXJjZUdyYXBoaWNC
dWZmZXIgaGFzIHRvIGJlIGNsYW1wZWQgdG8gdGhpcyBzaXplLiBUaGUgcmVhc29uIGZvciB0aGlz
CisgICAgICAgIGNsYW1waW5nIGlzIHRoZSBGaWx0ZXJFZmZlY3Qgc2ltcGx5IGlnbm9yZXMgcHJv
Y2Vzc2luZyBhbnkgSW1hZ2VCdWZmZXIKKyAgICAgICAgbGFyZ2VyIHRoYW4gdGhpcyBzaXplLgor
ICAgICAgICAKKyAgICAgICAgVGhlIGJ1ZyB3YXMgaGFwcGVuaW5nIGJlY2F1c2Ugd2UgZGlkIG5v
dCBwcm9wYWdhdGUgdGhlIGNsYW1waW5nIGxvZ2ljIHRvCisgICAgICAgIHRoZSBGaWx0ZXJFZmZl
Y3QuIFRoZSBGaWx0ZXJFZmZlY3QgcmVzdWx0IEltYWdlQnVmZmVyIHdhcyBub3QgY2xhbXBlZCBh
cworICAgICAgICB3aGF0IHdlIGRvIGZvciBkcmF3aW5nIHRoZSBzb3VyY2VHcmFwaGljQnVmZmVy
LiBJZiBvbmx5IHRoZSBkZXN0aW5hdGlvbgorICAgICAgICBwb2ludCBpcyBzcGVjaWZpZWQsIHRo
ZSBHcmFwaGljc0NvbnRleHQ6OmRyYXdJbWFnZUJ1ZmZlcigpIGFzc3VtZXMgdGhlCisgICAgICAg
IHNvdXJjZSBhbmQgdGhlIGRlc3RpbmF0aW9uIGltYWdlcyBoYXZlIHRoZSBzYW1lIHNpemUgd2hp
Y2ggaXMgbm90IHRydWUKKyAgICAgICAgd2l0aCB0aGUgY2xhbXBpbmcuCisgICAgICAgIAorICAg
ICAgICBUaGUgZml4IGlzIHRvIGFkZCB0aGUgY2xhbXBpbmcgbG9naWMgdG8gdGhlIEZpbHRlckVm
ZmVjdC4gVHdvIHBsYWNlcyB3ZQorICAgICAgICBuZWVkIHRvIGNoYW5nZS4gKDEpIEZpbHRlckVm
ZmVjdDo6Y3JlYXRlSW1hZ2VCdWZmZXJSZXN1bHQoKSBoYXMgdG8gYXBwbHkKKyAgICAgICAgdGhl
IHNhbWUgY2xhbXBpbmcgd2UgZG8gaW4gU1ZHUmVuZGVyaW5nQ29udGV4dDo6Y3JlYXRlSW1hZ2VC
dWZmZXIoKS4gKDIpCisgICAgICAgIEZpbHRlckVmZmVjdDo6ZHJhd2luZ1JlZ2lvbk9mSW5wdXRJ
bWFnZSgpIGhhcyB0byBjb25zaWRlciB0aGUgY2xhbXBpbmcgCisgICAgICAgIHdoZW4gbWFwcGlu
ZyBmcm9tIGFic29sdXRlIGNvb3JkaW5hdGVzIHRvIHRoZSBJbWFnZUJ1ZmZlciBjb29yZGluYXRl
cy4KKyAgICAgICAgCisgICAgICAgIFRlc3RzOiBzdmcvZmlsdGVycy9iaWctc2l6ZWQtb2ZmLXZp
ZXdwb3J0LWZpbHRlci5zdmcKKworICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0ltYWdlQnVm
ZmVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyOjppc1NpemVDbGFtcGVkKToK
KyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyOjpjbGFtcGVkU2l6ZSk6CisgICAgICAgIChX
ZWJDb3JlOjpJbWFnZUJ1ZmZlcjo6Y2xhbXBlZFJlY3QpOgorICAgICAgICAqIHBsYXRmb3JtL2dy
YXBoaWNzL0ltYWdlQnVmZmVyLmg6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlcjo6c2V0
U3BhY2VTaXplKTogTW92ZSBhbGwgdGhlIGNsYW1waW5nIGhlbHBlciBtZXRob2RzCisgICAgICAg
IGZyb20gU1ZHUmVuZGVyaW5nQ29udGV4dCBhbmQgUmVuZGVyU1ZHUmVzb3VyY2VGaWx0ZXIgdG8g
dGhlIEltYWdlQnVmZmVyLgorCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9G
RUNvbG9yTWF0cml4LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZFQ29sb3JNYXRyaXg6OnBsYXRm
b3JtQXBwbHlTb2Z0d2FyZSk6IFVzZSBsb2dpY2FsU2l6ZSgpIG9mIHRoZQorICAgICAgICByZXN1
bHQgaW1hZ2UgaW5zdGVhZCBvZiB1c2luZyBhYnNvbHV0ZVBhaW50UmVjdCgpLiBUaGUgbGF0ZXIg
cmV0dXJucyB0aGUKKyAgICAgICAgcmVjdGFuZ2xlIG9mIHRoZSBlbGVtZW50IHdpdGhvdXQgY2xh
bXBpbmcuCisgICAgICAgIAorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVU
aWxlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZFVGlsZTo6cGxhdGZvcm1BcHBseVNvZnR3YXJl
KToKKyAgICAgICAgKiByZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291cmNlQ2xpcHBlci5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJTVkdSZXNvdXJjZUNsaXBwZXI6OmFwcGx5Q2xpcHBp
bmdUb0NvbnRleHQpOgorICAgICAgICAqIHJlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VG
aWx0ZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU1ZHUmVzb3VyY2VGaWx0ZXI6OmFw
cGx5UmVzb3VyY2UpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU1ZHUmVzb3VyY2VGaWx0ZXI6
OmZpdHNJbk1heGltdW1JbWFnZVNpemUpOiBEZWxldGVkLgorICAgICAgICAqIHJlbmRlcmluZy9z
dmcvUmVuZGVyU1ZHUmVzb3VyY2VGaWx0ZXIuaDoKKyAgICAgICAgKiByZW5kZXJpbmcvc3ZnL1Jl
bmRlclNWR1Jlc291cmNlR3JhZGllbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Y3JlYXRlTWFz
a0FuZFN3YXBDb250ZXh0Rm9yVGV4dEdyYWRpZW50KToKKyAgICAgICAgKFdlYkNvcmU6OmNsaXBU
b1RleHRNYXNrKToKKyAgICAgICAgKiByZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291cmNlTWFz
a2VyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclNWR1Jlc291cmNlTWFza2VyOjphcHBs
eVNWR01hc2spOgorICAgICAgICAqIHJlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VQYXR0
ZXJuLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclNWR1Jlc291cmNlUGF0dGVybjo6YnVp
bGRQYXR0ZXJuKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclNWR1Jlc291cmNlUGF0dGVybjo6
Y3JlYXRlVGlsZUltYWdlKTogTWFrZSB0aGUgbW9kaWZpY2F0aW9ucworICAgICAgICB3aGljaCBh
cmUgbmVlZGVkIGJlY2F1c2Ugb2YgbW92aW5nIHRoZSBjbGFtcGluZyBoZWxwZXIgbWV0aG9kcyB0
byBJbWFnZUJ1ZmZlcgorICAgICAgICBhbmQgYmVjYXVzZSBvZiBjaGFuZ2luZyB0aGUgcHJvdG90
eXBlIG9mIFNWR1JlbmRlcmluZ0NvbnRleHQgbWV0aG9kcy4KKworICAgICAgICAqIHBsYXRmb3Jt
L2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyRWZmZWN0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZp
bHRlckVmZmVjdDo6ZHJhd2luZ1JlZ2lvbk9mSW5wdXRJbWFnZSk6IENvbnNpZGVyIHRoZSBjbGFt
cGluZworICAgICAgICB3aGVuIG1hcHBpbmcgZnJvbSBhYnNvbHV0ZSBjb29yZGluYXRlcyB0byB0
aGUgSW1hZ2VCdWZmZXIgY29vcmRpbmF0ZXMuCisKKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVm
ZmVjdDo6Y3JlYXRlSW1hZ2VCdWZmZXJSZXN1bHQpOiBBcHBseSB0aGUgc2FtZSBjbGFtcGluZwor
ICAgICAgICB3ZSBkbyBpbiBTVkdSZW5kZXJpbmdDb250ZXh0OjpjcmVhdGVJbWFnZUJ1ZmZlcigp
IHdoZW4gY3JlYXRpbmcgdGhlIAorICAgICAgICBGaWx0ZXJFZmZlY3QgcmVzdWx0IEltYWdlQnVm
ZmVyLgorICAgICAgICAKKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6YXBwbHkpOgor
ICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0Ojphc1VubXVsdGlwbGllZEltYWdlKToKKyAg
ICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6YXNQcmVtdWx0aXBsaWVkSW1hZ2UpOgorICAg
ICAgICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0Ojpjb3B5VW5tdWx0aXBsaWVkSW1hZ2UpOgorICAg
ICAgICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0Ojpjb3B5UHJlbXVsdGlwbGllZEltYWdlKToKKyAg
ICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6Y3JlYXRlVW5tdWx0aXBsaWVkSW1hZ2VSZXN1
bHQpOgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0OjpjcmVhdGVQcmVtdWx0aXBsaWVk
SW1hZ2VSZXN1bHQpOgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0OjptYXhGaWx0ZXJB
cmVhKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6aXNGaWx0ZXJT
aXplVmFsaWQpOiBEZWxldGVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMv
RmlsdGVyRWZmZWN0Lmg6IFVzZSB0aGUgbmV3IEltYWdlQnVmZmVyIGNsYW1waW5nCisgICAgICAg
IGhlbHBlciBtZXRob2RzIGFuZCBkZWxldGUgdGhlIGxvY2FsIG9uZXMuCisKKyAgICAgICAgKiBw
bGF0Zm9ybS9ncmFwaGljcy90cmFuc2Zvcm1zL0FmZmluZVRyYW5zZm9ybS5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpBZmZpbmVUcmFuc2Zvcm06OnNjYWxlTm9uVW5pZm9ybSk6CisgICAgICAgIChX
ZWJDb3JlOjpBZmZpbmVUcmFuc2Zvcm06OnNjYWxlKToKKyAgICAgICAgKFdlYkNvcmU6OkFmZmlu
ZVRyYW5zZm9ybTo6dHJhbnNsYXRlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy90cmFu
c2Zvcm1zL0FmZmluZVRyYW5zZm9ybS5oOiBBZGQgbmV3IHNjYWxlIGFuZCB0cmFuc2xhdGUKKyAg
ICAgICAgb3ZlcmxvYWRzIHRvIEFmZmluZVRyYW5zZm9ybS4KKyAgICAgICAgCisgICAgICAgICog
cmVuZGVyaW5nL0ZpbHRlckVmZmVjdFJlbmRlcmVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZp
bHRlckVmZmVjdFJlbmRlcmVyOjp1cGRhdGVCYWNraW5nU3RvcmVSZWN0KToKKyAgICAgICAgKFdl
YkNvcmU6OkZpbHRlckVmZmVjdFJlbmRlcmVySGVscGVyOjpiZWdpbkZpbHRlckVmZmVjdCk6IENv
ZGUgY2xlYW4gdXAuCisgICAgICAgIAorICAgICAgICAqIHJlbmRlcmluZy9zdmcvU1ZHUmVuZGVy
aW5nQ29udGV4dC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTVkdSZW5kZXJpbmdDb250ZXh0Ojpj
YWxjdWxhdGVTY3JlZW5Gb250U2l6ZVNjYWxpbmdGYWN0b3IpOgorICAgICAgICAoV2ViQ29yZTo6
U1ZHUmVuZGVyaW5nQ29udGV4dDo6Y2FsY3VsYXRlVHJhbnNmb3JtYXRpb25Ub091dGVybW9zdENv
b3JkaW5hdGVTeXN0ZW0pOgorICAgICAgICBSZXR1cm4gdGhlIEFmZmluZVRyYW5zZm9ybSBpbnN0
ZWFkIG9mIHBhc3NpbmcgaXQgdGhyb3VnaCB0aGUgcmVmZXJlbmNlIG9mCisgICAgICAgIGFuIGFy
Z3VtZW50LgorICAgICAgICAKKyAgICAgICAgKFdlYkNvcmU6OlNWR1JlbmRlcmluZ0NvbnRleHQ6
OmNyZWF0ZUltYWdlQnVmZmVyKToKKyAgICAgICAgKFdlYkNvcmU6OlNWR1JlbmRlcmluZ0NvbnRl
eHQ6OmNyZWF0ZUltYWdlQnVmZmVyRm9yUGF0dGVybik6IERlbGV0ZWQuCisgICAgICAgIENvZGUg
Y2xlYW4gdXAgYW5kIG1ldGhvZCByZW5hbWUuCisgICAgICAgIAorICAgICAgICAoV2ViQ29yZTo6
U1ZHUmVuZGVyaW5nQ29udGV4dDo6Y2xhbXBlZEFic29sdXRlVGFyZ2V0UmVjdCk6IERlbGV0ZWQu
CisgICAgICAgIChXZWJDb3JlOjpTVkdSZW5kZXJpbmdDb250ZXh0OjpjbGFtcGVkQWJzb2x1dGVT
aXplKTogRGVsZXRlZC4KKyAgICAgICAgKiByZW5kZXJpbmcvc3ZnL1NWR1JlbmRlcmluZ0NvbnRl
eHQuaDogTW92ZSB0aGUgY2xhbXBpbmcgaGVscGVyIG1ldGhvZHMgdG8KKyAgICAgICAgdGhlIElt
YWdlQnVmZmVyIGNsYXNzLgorICAgIAogMjAxNS0wNS0wNSAgTXlsZXMgQy4gTWF4ZmllbGQgIDxt
bWF4ZmllbGRAYXBwbGUuY29tPgogCiAgICAgICAgIFJldmVydCAiSW50cm9kdWNpbmcgdGhlIFBs
YXRmb3JtIEFic3RyYWN0aW9uIExheWVyIChQQUwpIgpJbmRleDogU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvSW1hZ2VCdWZmZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlQnVmZmVyLmNwcAkocmV2aXNpb24gMTgzNzU2KQor
KysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VCdWZmZXIuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0zMyw2ICszMyw1NiBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKK3N0
YXRpYyBjb25zdCBmbG9hdCBNYXhDbGFtcGVkTGVuZ3RoID0gNDA5NjsKK3N0YXRpYyBjb25zdCBm
bG9hdCBNYXhDbGFtcGVkQXJlYSA9IE1heENsYW1wZWRMZW5ndGggKiBNYXhDbGFtcGVkTGVuZ3Ro
OworCitib29sIEltYWdlQnVmZmVyOjppc1NpemVDbGFtcGVkKGNvbnN0IEZsb2F0U2l6ZSYgc2l6
ZSkKK3sKKyAgICBpZiAoc2l6ZS53aWR0aCgpIDwgMCAmJiBzaXplLmhlaWdodCgpIDwgMCkKKyAg
ICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgaWYgKHNpemUuaXNFbXB0eSgpKQorICAgICAgICBy
ZXR1cm4gdHJ1ZTsKKworICAgIHJldHVybiBmbG9vcmYoc2l6ZS5oZWlnaHQoKSkgKiBmbG9vcmYo
c2l6ZS53aWR0aCgpKSA8PSBNYXhDbGFtcGVkQXJlYTsKK30KKworYm9vbCBJbWFnZUJ1ZmZlcjo6
aXNTaXplQ2xhbXBlZChjb25zdCBGbG9hdFNpemUmIHNpemUsIEZsb2F0U2l6ZSYgc2NhbGUpCit7
CisgICAgRmxvYXRTaXplIHNjYWxlZFNpemUoc2l6ZSk7CisgICAgc2NhbGVkU2l6ZS5zY2FsZShz
Y2FsZS53aWR0aCgpLCBzY2FsZS5oZWlnaHQoKSk7CisKKyAgICBpZiAoaXNTaXplQ2xhbXBlZChz
Y2FsZWRTaXplKSkKKyAgICAgICAgcmV0dXJuIHRydWU7CisKKyAgICAvLyBUaGUgYXJlYSBvZiBz
Y2FsZWQgc2l6ZSBpcyBiaWdnZXIgdGhhbiB0aGUgdXBwZXIgbGltaXQsIGFkanVzdCB0aGUgc2Nh
bGUgdG8gZml0LgorICAgIHNjYWxlLnNjYWxlKHNxcnQoTWF4Q2xhbXBlZEFyZWEgLyAoc2NhbGVk
U2l6ZS53aWR0aCgpICogc2NhbGVkU2l6ZS5oZWlnaHQoKSkpKTsKKyAgICBBU1NFUlQoaXNTaXpl
Q2xhbXBlZChzaXplLCBzY2FsZSkpOworICAgIHJldHVybiBmYWxzZTsKK30KKworRmxvYXRTaXpl
IEltYWdlQnVmZmVyOjpjbGFtcGVkU2l6ZShjb25zdCBGbG9hdFNpemUmIHNpemUpCit7CisgICAg
cmV0dXJuIHNpemUuc2hydW5rVG8oRmxvYXRTaXplKE1heENsYW1wZWRMZW5ndGgsIE1heENsYW1w
ZWRMZW5ndGgpKTsKK30KKworRmxvYXRTaXplIEltYWdlQnVmZmVyOjpjbGFtcGVkU2l6ZShjb25z
dCBGbG9hdFNpemUmIHNpemUsIEZsb2F0U2l6ZSYgc2NhbGUpCit7CisgICAgaWYgKHNpemUuaXNF
bXB0eSgpKQorICAgICAgICByZXR1cm4gc2l6ZTsKKworICAgIEZsb2F0U2l6ZSBjbGFtcGVkU2l6
ZSA9IEltYWdlQnVmZmVyOjpjbGFtcGVkU2l6ZShzaXplKTsKKyAgICBzY2FsZSA9IEZsb2F0U2l6
ZShjbGFtcGVkU2l6ZS53aWR0aCgpIC8gc2l6ZS53aWR0aCgpLCBjbGFtcGVkU2l6ZS5oZWlnaHQo
KSAvIHNpemUuaGVpZ2h0KCkpOworICAgIEFTU0VSVChpc1NpemVDbGFtcGVkKGNsYW1wZWRTaXpl
KSk7CisgICAgQVNTRVJUKGlzU2l6ZUNsYW1wZWQoc2l6ZSwgc2NhbGUpKTsKKyAgICByZXR1cm4g
Y2xhbXBlZFNpemU7Cit9CisKK0Zsb2F0UmVjdCBJbWFnZUJ1ZmZlcjo6Y2xhbXBlZFJlY3QoY29u
c3QgRmxvYXRSZWN0JiByZWN0KQoreworICAgIHJldHVybiBGbG9hdFJlY3QocmVjdC5sb2NhdGlv
bigpLCBjbGFtcGVkU2l6ZShyZWN0LnNpemUoKSkpOworfQorCiAjaWYgIVVTRShDRykKIHZvaWQg
SW1hZ2VCdWZmZXI6OnRyYW5zZm9ybUNvbG9yU3BhY2UoQ29sb3JTcGFjZSBzcmNDb2xvclNwYWNl
LCBDb2xvclNwYWNlIGRzdENvbG9yU3BhY2UpCiB7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9JbWFnZUJ1ZmZlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlQnVmZmVyLmgJKHJldmlzaW9uIDE4Mzc1NikKKysrIFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlQnVmZmVyLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTEyMywxMCArMTIzLDE0IEBAIHB1YmxpYzoKICAgICBib29sIGNvcHlUb1BsYXRmb3Jt
VGV4dHVyZShHcmFwaGljc0NvbnRleHQzRCYsIFBsYXRmb3JtM0RPYmplY3QsIEdDM0RlbnVtLCBi
b29sLCBib29sKTsKIAogICAgIEZsb2F0U2l6ZSBzcGFjZVNpemUoKSBjb25zdCB7IHJldHVybiBt
X3NwYWNlOyB9Ci0gICAgdm9pZCBzZXRTcGFjZVNpemUoY29uc3QgRmxvYXRTaXplJiBzcGFjZSkK
LSAgICB7Ci0gICAgICAgIG1fc3BhY2UgPSBzcGFjZTsKLSAgICB9CisgICAgdm9pZCBzZXRTcGFj
ZVNpemUoY29uc3QgRmxvYXRTaXplJiBzcGFjZSkgeyBtX3NwYWNlID0gc3BhY2U7IH0KKworICAg
IC8vIFRoZXNlIGZ1bmN0aW9ucyBhcmUgdXNlZCB3aGVuIGNsYW1waW5nIHRoZSBJbWFnZUJ1ZmZl
ciB3aGljaCBpcyBjcmVhdGVkIGZvciBmaWx0ZXIsIG1hc2tlciBvciBjbGlwcGVyLgorICAgIHN0
YXRpYyBib29sIGlzU2l6ZUNsYW1wZWQoY29uc3QgRmxvYXRTaXplJik7CisgICAgc3RhdGljIGJv
b2wgaXNTaXplQ2xhbXBlZChjb25zdCBGbG9hdFNpemUmLCBGbG9hdFNpemUmIHNjYWxlKTsKKyAg
ICBzdGF0aWMgRmxvYXRTaXplIGNsYW1wZWRTaXplKGNvbnN0IEZsb2F0U2l6ZSYpOworICAgIHN0
YXRpYyBGbG9hdFNpemUgY2xhbXBlZFNpemUoY29uc3QgRmxvYXRTaXplJiwgRmxvYXRTaXplJiBz
Y2FsZSk7CisgICAgc3RhdGljIEZsb2F0UmVjdCBjbGFtcGVkUmVjdChjb25zdCBGbG9hdFJlY3Qm
KTsKIAogcHJpdmF0ZToKICNpZiBVU0UoQ0cpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29sb3JNYXRyaXguY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDb2xvck1hdHJpeC5jcHAJKHJl
dmlzaW9uIDE4Mzc1NikKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRl
cnMvRkVDb2xvck1hdHJpeC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE0OSw3ICsxNDksNyBAQCB2
b2lkIEZFQ29sb3JNYXRyaXg6OnBsYXRmb3JtQXBwbHlTb2Z0d2FyCiAKICAgICByZXN1bHRJbWFn
ZS0+Y29udGV4dCgpLT5kcmF3SW1hZ2VCdWZmZXIoaW4tPmFzSW1hZ2VCdWZmZXIoKSwgQ29sb3JT
cGFjZURldmljZVJHQiwgZHJhd2luZ1JlZ2lvbk9mSW5wdXRJbWFnZShpbi0+YWJzb2x1dGVQYWlu
dFJlY3QoKSkpOwogCi0gICAgSW50UmVjdCBpbWFnZVJlY3QoSW50UG9pbnQoKSwgYWJzb2x1dGVQ
YWludFJlY3QoKS5zaXplKCkpOworICAgIEludFJlY3QgaW1hZ2VSZWN0KEludFBvaW50KCksIHJl
c3VsdEltYWdlLT5sb2dpY2FsU2l6ZSgpKTsKICAgICBSZWZQdHI8VWludDhDbGFtcGVkQXJyYXk+
IHBpeGVsQXJyYXkgPSByZXN1bHRJbWFnZS0+Z2V0VW5tdWx0aXBsaWVkSW1hZ2VEYXRhKGltYWdl
UmVjdCk7CiAKICAgICBzd2l0Y2ggKG1fdHlwZSkgewpJbmRleDogU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRVRpbGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVUaWxlLmNwcAkocmV2aXNpb24gMTgz
NzU2KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRVRpbGUu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC02Myw4ICs2Myw4IEBAIHZvaWQgRkVUaWxlOjpwbGF0Zm9y
bUFwcGx5U29mdHdhcmUoKQogICAgICAgICB0aWxlUmVjdC5zY2FsZShmaWx0ZXIuZmlsdGVyUmVz
b2x1dGlvbigpLndpZHRoKCksIGZpbHRlci5maWx0ZXJSZXNvbHV0aW9uKCkuaGVpZ2h0KCkpOwog
ICAgIH0KIAotICAgIHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlcj4gdGlsZUltYWdlOwotICAg
IGlmICghU1ZHUmVuZGVyaW5nQ29udGV4dDo6Y3JlYXRlSW1hZ2VCdWZmZXJGb3JQYXR0ZXJuKHRp
bGVSZWN0LCB0aWxlUmVjdCwgdGlsZUltYWdlLCBDb2xvclNwYWNlRGV2aWNlUkdCLCBmaWx0ZXIo
KS5yZW5kZXJpbmdNb2RlKCkpKQorICAgIGF1dG8gdGlsZUltYWdlID0gU1ZHUmVuZGVyaW5nQ29u
dGV4dDo6Y3JlYXRlSW1hZ2VCdWZmZXIodGlsZVJlY3QsIHRpbGVSZWN0LCBDb2xvclNwYWNlRGV2
aWNlUkdCLCBmaWx0ZXIoKS5yZW5kZXJpbmdNb2RlKCkpOworICAgIGlmICghdGlsZUltYWdlKQog
ICAgICAgICByZXR1cm47CiAKICAgICBHcmFwaGljc0NvbnRleHQqIHRpbGVJbWFnZUNvbnRleHQg
PSB0aWxlSW1hZ2UtPmNvbnRleHQoKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2ZpbHRlcnMvRmlsdGVyRWZmZWN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlckVmZmVjdC5jcHAJKHJldmlzaW9u
IDE4Mzc1NikKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmls
dGVyRWZmZWN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzYsOCArMzYsNiBAQAogCiBuYW1lc3Bh
Y2UgV2ViQ29yZSB7CiAKLXN0YXRpYyBjb25zdCBmbG9hdCBrTWF4RmlsdGVyQXJlYSA9IDQwOTYg
KiA0MDk2OwotCiBGaWx0ZXJFZmZlY3Q6OkZpbHRlckVmZmVjdChGaWx0ZXImIGZpbHRlcikKICAg
ICA6IG1fYWxwaGFJbWFnZShmYWxzZSkKICAgICAsIG1fZmlsdGVyKGZpbHRlcikKQEAgLTU1LDE5
ICs1Myw2IEBAIEZpbHRlckVmZmVjdDo6fkZpbHRlckVmZmVjdCgpCiB7CiB9CiAKLWZsb2F0IEZp
bHRlckVmZmVjdDo6bWF4RmlsdGVyQXJlYSgpCi17Ci0gICAgcmV0dXJuIGtNYXhGaWx0ZXJBcmVh
OwotfQotCi1ib29sIEZpbHRlckVmZmVjdDo6aXNGaWx0ZXJTaXplVmFsaWQoY29uc3QgRmxvYXRS
ZWN0JiByZWN0KQotewotICAgIGlmIChyZWN0LndpZHRoKCkgPCAwIHx8IHJlY3QuaGVpZ2h0KCkg
PCAwCi0gICAgICAgIHx8IChyZWN0LmhlaWdodCgpICogcmVjdC53aWR0aCgpID4ga01heEZpbHRl
ckFyZWEpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KIHZv
aWQgRmlsdGVyRWZmZWN0OjpkZXRlcm1pbmVBYnNvbHV0ZVBhaW50UmVjdCgpCiB7CiAgICAgbV9h
YnNvbHV0ZVBhaW50UmVjdCA9IEludFJlY3QoKTsKQEAgLTkzLDggKzc4LDE0IEBAIEludFJlY3Qg
RmlsdGVyRWZmZWN0OjpyZXF1ZXN0ZWRSZWdpb25PZkkKIAogRmxvYXRSZWN0IEZpbHRlckVmZmVj
dDo6ZHJhd2luZ1JlZ2lvbk9mSW5wdXRJbWFnZShjb25zdCBJbnRSZWN0JiBzcmNSZWN0KSBjb25z
dAogewotICAgIHJldHVybiBGbG9hdFJlY3QoRmxvYXRQb2ludChzcmNSZWN0LngoKSAtIG1fYWJz
b2x1dGVQYWludFJlY3QueCgpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNyY1JlY3Qu
eSgpIC0gbV9hYnNvbHV0ZVBhaW50UmVjdC55KCkpLCBzcmNSZWN0LnNpemUoKSk7CisgICAgQVNT
RVJUKGhhc1Jlc3VsdCgpKTsKKworICAgIEZsb2F0U2l6ZSBzY2FsZTsKKyAgICBJbWFnZUJ1ZmZl
cjo6Y2xhbXBlZFNpemUobV9hYnNvbHV0ZVBhaW50UmVjdC5zaXplKCksIHNjYWxlKTsKKworICAg
IEFmZmluZVRyYW5zZm9ybSB0cmFuc2Zvcm07CisgICAgdHJhbnNmb3JtLnNjYWxlKHNjYWxlKS50
cmFuc2xhdGUoLW1fYWJzb2x1dGVQYWludFJlY3QubG9jYXRpb24oKSk7CisgICAgcmV0dXJuIHRy
YW5zZm9ybS5tYXBSZWN0KHNyY1JlY3QpOwogfQogCiBGaWx0ZXJFZmZlY3QqIEZpbHRlckVmZmVj
dDo6aW5wdXRFZmZlY3QodW5zaWduZWQgbnVtYmVyKSBjb25zdApAQCAtMTU2LDcgKzE0Nyw3IEBA
IHZvaWQgRmlsdGVyRWZmZWN0OjphcHBseSgpCiAgICAgZGV0ZXJtaW5lQWJzb2x1dGVQYWludFJl
Y3QoKTsKICAgICBzZXRSZXN1bHRDb2xvclNwYWNlKG1fb3BlcmF0aW5nQ29sb3JTcGFjZSk7CiAK
LSAgICBpZiAoIWlzRmlsdGVyU2l6ZVZhbGlkKG1fYWJzb2x1dGVQYWludFJlY3QpKQorICAgIGlm
IChtX2Fic29sdXRlUGFpbnRSZWN0LmlzRW1wdHkoKSB8fCAhSW1hZ2VCdWZmZXI6OmlzU2l6ZUNs
YW1wZWQobV9hYnNvbHV0ZVBhaW50UmVjdC5zaXplKCkpKQogICAgICAgICByZXR1cm47CiAKICAg
ICBpZiAocmVxdWlyZXNWYWxpZFByZU11bHRpcGxpZWRQaXhlbHMoKSkgewpAQCAtMzIxLDggKzMx
Miw4IEBAIEltYWdlQnVmZmVyKiBGaWx0ZXJFZmZlY3Q6Om9wZW5DTEltYWdlVG8KIAogUGFzc1Jl
ZlB0cjxVaW50OENsYW1wZWRBcnJheT4gRmlsdGVyRWZmZWN0Ojphc1VubXVsdGlwbGllZEltYWdl
KGNvbnN0IEludFJlY3QmIHJlY3QpCiB7Ci0gICAgQVNTRVJUKGlzRmlsdGVyU2l6ZVZhbGlkKHJl
Y3QpKTsKICAgICBJbnRTaXplIHNjYWxlZFNpemUocmVjdC5zaXplKCkpOworICAgIEFTU0VSVChJ
bWFnZUJ1ZmZlcjo6aXNTaXplQ2xhbXBlZChzY2FsZWRTaXplKSk7CiAgICAgc2NhbGVkU2l6ZS5z
Y2FsZShtX2ZpbHRlci5maWx0ZXJTY2FsZSgpKTsKICAgICBSZWZQdHI8VWludDhDbGFtcGVkQXJy
YXk+IGltYWdlRGF0YSA9IFVpbnQ4Q2xhbXBlZEFycmF5OjpjcmVhdGVVbmluaXRpYWxpemVkKHNj
YWxlZFNpemUud2lkdGgoKSAqIHNjYWxlZFNpemUuaGVpZ2h0KCkgKiA0KTsKICAgICBjb3B5VW5t
dWx0aXBsaWVkSW1hZ2UoaW1hZ2VEYXRhLmdldCgpLCByZWN0KTsKQEAgLTMzMSw4ICszMjIsOCBA
QCBQYXNzUmVmUHRyPFVpbnQ4Q2xhbXBlZEFycmF5PiBGaWx0ZXJFZmZlCiAKIFBhc3NSZWZQdHI8
VWludDhDbGFtcGVkQXJyYXk+IEZpbHRlckVmZmVjdDo6YXNQcmVtdWx0aXBsaWVkSW1hZ2UoY29u
c3QgSW50UmVjdCYgcmVjdCkKIHsKLSAgICBBU1NFUlQoaXNGaWx0ZXJTaXplVmFsaWQocmVjdCkp
OwogICAgIEludFNpemUgc2NhbGVkU2l6ZShyZWN0LnNpemUoKSk7CisgICAgQVNTRVJUKEltYWdl
QnVmZmVyOjppc1NpemVDbGFtcGVkKHNjYWxlZFNpemUpKTsKICAgICBzY2FsZWRTaXplLnNjYWxl
KG1fZmlsdGVyLmZpbHRlclNjYWxlKCkpOwogICAgIFJlZlB0cjxVaW50OENsYW1wZWRBcnJheT4g
aW1hZ2VEYXRhID0gVWludDhDbGFtcGVkQXJyYXk6OmNyZWF0ZVVuaW5pdGlhbGl6ZWQoc2NhbGVk
U2l6ZS53aWR0aCgpICogc2NhbGVkU2l6ZS5oZWlnaHQoKSAqIDQpOwogICAgIGNvcHlQcmVtdWx0
aXBsaWVkSW1hZ2UoaW1hZ2VEYXRhLmdldCgpLCByZWN0KTsKQEAgLTM5Nyw4ICszODgsOCBAQCB2
b2lkIEZpbHRlckVmZmVjdDo6Y29weVVubXVsdGlwbGllZEltYWdlCiAgICAgICAgIGlmIChtX2lt
YWdlQnVmZmVyUmVzdWx0KQogICAgICAgICAgICAgbV91bm11bHRpcGxpZWRJbWFnZVJlc3VsdCA9
IG1faW1hZ2VCdWZmZXJSZXN1bHQtPmdldFVubXVsdGlwbGllZEltYWdlRGF0YShJbnRSZWN0KElu
dFBvaW50KCksIG1fYWJzb2x1dGVQYWludFJlY3Quc2l6ZSgpKSk7CiAgICAgICAgIGVsc2Ugewot
ICAgICAgICAgICAgQVNTRVJUKGlzRmlsdGVyU2l6ZVZhbGlkKG1fYWJzb2x1dGVQYWludFJlY3Qp
KTsKICAgICAgICAgICAgIEludFNpemUgaW5wdXRTaXplKG1fYWJzb2x1dGVQYWludFJlY3Quc2l6
ZSgpKTsKKyAgICAgICAgICAgIEFTU0VSVChJbWFnZUJ1ZmZlcjo6aXNTaXplQ2xhbXBlZChpbnB1
dFNpemUpKTsKICAgICAgICAgICAgIGlucHV0U2l6ZS5zY2FsZShtX2ZpbHRlci5maWx0ZXJTY2Fs
ZSgpKTsKICAgICAgICAgICAgIG1fdW5tdWx0aXBsaWVkSW1hZ2VSZXN1bHQgPSBVaW50OENsYW1w
ZWRBcnJheTo6Y3JlYXRlVW5pbml0aWFsaXplZChpbnB1dFNpemUud2lkdGgoKSAqIGlucHV0U2l6
ZS5oZWlnaHQoKSAqIDQpOwogICAgICAgICAgICAgdW5zaWduZWQgY2hhciogc291cmNlQ29tcG9u
ZW50ID0gbV9wcmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQtPmRhdGEoKTsKQEAgLTQzMyw4ICs0MjQs
OCBAQCB2b2lkIEZpbHRlckVmZmVjdDo6Y29weVByZW11bHRpcGxpZWRJbWFnCiAgICAgICAgIGlm
IChtX2ltYWdlQnVmZmVyUmVzdWx0KQogICAgICAgICAgICAgbV9wcmVtdWx0aXBsaWVkSW1hZ2VS
ZXN1bHQgPSBtX2ltYWdlQnVmZmVyUmVzdWx0LT5nZXRQcmVtdWx0aXBsaWVkSW1hZ2VEYXRhKElu
dFJlY3QoSW50UG9pbnQoKSwgbV9hYnNvbHV0ZVBhaW50UmVjdC5zaXplKCkpKTsKICAgICAgICAg
ZWxzZSB7Ci0gICAgICAgICAgICBBU1NFUlQoaXNGaWx0ZXJTaXplVmFsaWQobV9hYnNvbHV0ZVBh
aW50UmVjdCkpOwogICAgICAgICAgICAgSW50U2l6ZSBpbnB1dFNpemUobV9hYnNvbHV0ZVBhaW50
UmVjdC5zaXplKCkpOworICAgICAgICAgICAgQVNTRVJUKEltYWdlQnVmZmVyOjppc1NpemVDbGFt
cGVkKGlucHV0U2l6ZSkpOwogICAgICAgICAgICAgaW5wdXRTaXplLnNjYWxlKG1fZmlsdGVyLmZp
bHRlclNjYWxlKCkpOwogICAgICAgICAgICAgbV9wcmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQgPSBV
aW50OENsYW1wZWRBcnJheTo6Y3JlYXRlVW5pbml0aWFsaXplZChpbnB1dFNpemUud2lkdGgoKSAq
IGlucHV0U2l6ZS5oZWlnaHQoKSAqIDQpOwogICAgICAgICAgICAgdW5zaWduZWQgY2hhciogc291
cmNlQ29tcG9uZW50ID0gbV91bm11bHRpcGxpZWRJbWFnZVJlc3VsdC0+ZGF0YSgpOwpAQCAtNDU5
LDEwICs0NTAsMTMgQEAgSW1hZ2VCdWZmZXIqIEZpbHRlckVmZmVjdDo6Y3JlYXRlSW1hZ2VCdQog
ICAgIC8vIE9ubHkgb25lIHJlc3VsdCB0eXBlIGlzIGFsbG93ZWQuCiAgICAgQVNTRVJUKCFoYXNS
ZXN1bHQoKSk7CiAgICAgaWYgKG1fYWJzb2x1dGVQYWludFJlY3QuaXNFbXB0eSgpKQotICAgICAg
ICByZXR1cm4gMDsKLSAgICBtX2ltYWdlQnVmZmVyUmVzdWx0ID0gSW1hZ2VCdWZmZXI6OmNyZWF0
ZShtX2Fic29sdXRlUGFpbnRSZWN0LnNpemUoKSwgbV9maWx0ZXIuZmlsdGVyU2NhbGUoKSwgbV9y
ZXN1bHRDb2xvclNwYWNlLCBtX2ZpbHRlci5yZW5kZXJpbmdNb2RlKCkpOworICAgICAgICByZXR1
cm4gbnVsbHB0cjsKKworICAgIEZsb2F0U2l6ZSBjbGFtcGVkU2l6ZSA9IEltYWdlQnVmZmVyOjpj
bGFtcGVkU2l6ZShtX2Fic29sdXRlUGFpbnRSZWN0LnNpemUoKSk7CisgICAgbV9pbWFnZUJ1ZmZl
clJlc3VsdCA9IEltYWdlQnVmZmVyOjpjcmVhdGUoY2xhbXBlZFNpemUsIG1fZmlsdGVyLmZpbHRl
clNjYWxlKCksIG1fcmVzdWx0Q29sb3JTcGFjZSwgbV9maWx0ZXIucmVuZGVyaW5nTW9kZSgpKTsK
ICAgICBpZiAoIW1faW1hZ2VCdWZmZXJSZXN1bHQpCi0gICAgICAgIHJldHVybiAwOworICAgICAg
ICByZXR1cm4gbnVsbHB0cjsKKwogICAgIEFTU0VSVChtX2ltYWdlQnVmZmVyUmVzdWx0LT5jb250
ZXh0KCkpOwogICAgIHJldHVybiBtX2ltYWdlQnVmZmVyUmVzdWx0LmdldCgpOwogfQpAQCAtNDcx
LDExICs0NjUsMTEgQEAgVWludDhDbGFtcGVkQXJyYXkqIEZpbHRlckVmZmVjdDo6Y3JlYXRlVQog
ewogICAgIC8vIE9ubHkgb25lIHJlc3VsdCB0eXBlIGlzIGFsbG93ZWQuCiAgICAgQVNTRVJUKCFo
YXNSZXN1bHQoKSk7Ci0gICAgQVNTRVJUKGlzRmlsdGVyU2l6ZVZhbGlkKG1fYWJzb2x1dGVQYWlu
dFJlY3QpKTsKLQogICAgIGlmIChtX2Fic29sdXRlUGFpbnRSZWN0LmlzRW1wdHkoKSkKLSAgICAg
ICAgcmV0dXJuIDA7CisgICAgICAgIHJldHVybiBudWxscHRyOworCiAgICAgSW50U2l6ZSByZXN1
bHRTaXplKG1fYWJzb2x1dGVQYWludFJlY3Quc2l6ZSgpKTsKKyAgICBBU1NFUlQoSW1hZ2VCdWZm
ZXI6OmlzU2l6ZUNsYW1wZWQocmVzdWx0U2l6ZSkpOwogICAgIHJlc3VsdFNpemUuc2NhbGUobV9m
aWx0ZXIuZmlsdGVyU2NhbGUoKSk7CiAgICAgbV91bm11bHRpcGxpZWRJbWFnZVJlc3VsdCA9IFVp
bnQ4Q2xhbXBlZEFycmF5OjpjcmVhdGVVbmluaXRpYWxpemVkKHJlc3VsdFNpemUud2lkdGgoKSAq
IHJlc3VsdFNpemUuaGVpZ2h0KCkgKiA0KTsKICAgICByZXR1cm4gbV91bm11bHRpcGxpZWRJbWFn
ZVJlc3VsdC5nZXQoKTsKQEAgLTQ4NSwxMSArNDc5LDExIEBAIFVpbnQ4Q2xhbXBlZEFycmF5KiBG
aWx0ZXJFZmZlY3Q6OmNyZWF0ZVAKIHsKICAgICAvLyBPbmx5IG9uZSByZXN1bHQgdHlwZSBpcyBh
bGxvd2VkLgogICAgIEFTU0VSVCghaGFzUmVzdWx0KCkpOwotICAgIEFTU0VSVChpc0ZpbHRlclNp
emVWYWxpZChtX2Fic29sdXRlUGFpbnRSZWN0KSk7Ci0KICAgICBpZiAobV9hYnNvbHV0ZVBhaW50
UmVjdC5pc0VtcHR5KCkpCi0gICAgICAgIHJldHVybiAwOworICAgICAgICByZXR1cm4gbnVsbHB0
cjsKKwogICAgIEludFNpemUgcmVzdWx0U2l6ZShtX2Fic29sdXRlUGFpbnRSZWN0LnNpemUoKSk7
CisgICAgQVNTRVJUKEltYWdlQnVmZmVyOjppc1NpemVDbGFtcGVkKHJlc3VsdFNpemUpKTsKICAg
ICByZXN1bHRTaXplLnNjYWxlKG1fZmlsdGVyLmZpbHRlclNjYWxlKCkpOwogICAgIG1fcHJlbXVs
dGlwbGllZEltYWdlUmVzdWx0ID0gVWludDhDbGFtcGVkQXJyYXk6OmNyZWF0ZVVuaW5pdGlhbGl6
ZWQocmVzdWx0U2l6ZS53aWR0aCgpICogcmVzdWx0U2l6ZS5oZWlnaHQoKSAqIDQpOwogICAgIHJl
dHVybiBtX3ByZW11bHRpcGxpZWRJbWFnZVJlc3VsdC5nZXQoKTsKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyRWZmZWN0LmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJFZmZlY3Qu
aAkocmV2aXNpb24gMTgzNzU2KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
ZmlsdGVycy9GaWx0ZXJFZmZlY3QuaAkod29ya2luZyBjb3B5KQpAQCAtNTgsOSArNTgsNiBAQCBj
bGFzcyBGaWx0ZXJFZmZlY3QgOiBwdWJsaWMgUmVmQ291bnRlZDxGCiBwdWJsaWM6CiAgICAgdmly
dHVhbCB+RmlsdGVyRWZmZWN0KCk7CiAKLSAgICBzdGF0aWMgYm9vbCBpc0ZpbHRlclNpemVWYWxp
ZChjb25zdCBGbG9hdFJlY3QmKTsKLSAgICBzdGF0aWMgZmxvYXQgbWF4RmlsdGVyQXJlYSgpOwot
CiAgICAgdm9pZCBjbGVhclJlc3VsdCgpOwogICAgIHZvaWQgY2xlYXJSZXN1bHRzUmVjdXJzaXZl
KCk7CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RyYW5zZm9ybXMv
QWZmaW5lVHJhbnNmb3JtLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy90cmFuc2Zvcm1zL0FmZmluZVRyYW5zZm9ybS5jcHAJKHJldmlzaW9uIDE4Mzc1
NikKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RyYW5zZm9ybXMvQWZmaW5l
VHJhbnNmb3JtLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTcyLDYgKzE3MiwxNiBAQCBBZmZpbmVU
cmFuc2Zvcm0mIEFmZmluZVRyYW5zZm9ybTo6c2NhbGUoCiAgICAgcmV0dXJuICp0aGlzOwogfQog
CitBZmZpbmVUcmFuc2Zvcm0mIEFmZmluZVRyYW5zZm9ybTo6c2NhbGVOb25Vbmlmb3JtKGRvdWJs
ZSBzeCwgZG91YmxlIHN5KQoreworICAgIHJldHVybiBzY2FsZShzeCwgc3kpOworfQorCitBZmZp
bmVUcmFuc2Zvcm0mIEFmZmluZVRyYW5zZm9ybTo6c2NhbGUoY29uc3QgRmxvYXRTaXplJiBzKQor
eworICAgIHJldHVybiBzY2FsZShzLndpZHRoKCksIHMuaGVpZ2h0KCkpOworfQorCiAvLyAqdGhp
cyA9ICp0aGlzICogdHJhbnNsYXRpb24KIEFmZmluZVRyYW5zZm9ybSYgQWZmaW5lVHJhbnNmb3Jt
Ojp0cmFuc2xhdGUoZG91YmxlIHR4LCBkb3VibGUgdHkpCiB7CkBAIC0xODYsOSArMTk2LDkgQEAg
QWZmaW5lVHJhbnNmb3JtJiBBZmZpbmVUcmFuc2Zvcm06OnRyYW5zbAogICAgIHJldHVybiAqdGhp
czsKIH0KIAotQWZmaW5lVHJhbnNmb3JtJiBBZmZpbmVUcmFuc2Zvcm06OnNjYWxlTm9uVW5pZm9y
bShkb3VibGUgc3gsIGRvdWJsZSBzeSkKK0FmZmluZVRyYW5zZm9ybSYgQWZmaW5lVHJhbnNmb3Jt
Ojp0cmFuc2xhdGUoY29uc3QgRmxvYXRQb2ludCYgdCkKIHsKLSAgICByZXR1cm4gc2NhbGUoc3gs
IHN5KTsKKyAgICByZXR1cm4gdHJhbnNsYXRlKHQueCgpLCB0LnkoKSk7CiB9CiAKIEFmZmluZVRy
YW5zZm9ybSYgQWZmaW5lVHJhbnNmb3JtOjpyb3RhdGVGcm9tVmVjdG9yKGRvdWJsZSB4LCBkb3Vi
bGUgeSkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RyYW5zZm9ybXMv
QWZmaW5lVHJhbnNmb3JtLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvdHJhbnNmb3Jtcy9BZmZpbmVUcmFuc2Zvcm0uaAkocmV2aXNpb24gMTgzNzU2KQor
KysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdHJhbnNmb3Jtcy9BZmZpbmVUcmFu
c2Zvcm0uaAkod29ya2luZyBjb3B5KQpAQCAtOTgsOSArOTgsMTEgQEAgcHVibGljOgogICAgIFdF
QkNPUkVfRVhQT1JUIEFmZmluZVRyYW5zZm9ybSYgc2NhbGUoZG91YmxlKTsKICAgICBBZmZpbmVU
cmFuc2Zvcm0mIHNjYWxlKGRvdWJsZSBzeCwgZG91YmxlIHN5KTsgCiAgICAgQWZmaW5lVHJhbnNm
b3JtJiBzY2FsZU5vblVuaWZvcm0oZG91YmxlIHN4LCBkb3VibGUgc3kpOworICAgIEFmZmluZVRy
YW5zZm9ybSYgc2NhbGUoY29uc3QgRmxvYXRTaXplJik7CiAgICAgQWZmaW5lVHJhbnNmb3JtJiBy
b3RhdGUoZG91YmxlIGQpOwogICAgIEFmZmluZVRyYW5zZm9ybSYgcm90YXRlRnJvbVZlY3Rvcihk
b3VibGUgeCwgZG91YmxlIHkpOwogICAgIFdFQkNPUkVfRVhQT1JUIEFmZmluZVRyYW5zZm9ybSYg
dHJhbnNsYXRlKGRvdWJsZSB0eCwgZG91YmxlIHR5KTsKKyAgICBBZmZpbmVUcmFuc2Zvcm0mIHRy
YW5zbGF0ZShjb25zdCBGbG9hdFBvaW50Jik7CiAgICAgQWZmaW5lVHJhbnNmb3JtJiBzaGVhcihk
b3VibGUgc3gsIGRvdWJsZSBzeSk7CiAgICAgQWZmaW5lVHJhbnNmb3JtJiBmbGlwWCgpOwogICAg
IFdFQkNPUkVfRVhQT1JUIEFmZmluZVRyYW5zZm9ybSYgZmxpcFkoKTsKQEAgLTE3Miw3ICsxNzQs
NyBAQCBwdWJsaWM6CiAgICAgewogICAgICAgICByZXR1cm4gQWZmaW5lVHJhbnNmb3JtKDEsIDAs
IDAsIDEsIHgsIHkpOwogICAgIH0KLSAgICAKKwogICAgIC8vIGRlY29tcG9zZSB0aGUgbWF0cml4
IGludG8gaXRzIGNvbXBvbmVudCBwYXJ0cwogICAgIHR5cGVkZWYgc3RydWN0IHsKICAgICAgICAg
ZG91YmxlIHNjYWxlWCwgc2NhbGVZOwpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0Zp
bHRlckVmZmVjdFJlbmRlcmVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvRmlsdGVyRWZmZWN0UmVuZGVyZXIuY3BwCShyZXZpc2lvbiAxODM3NTYpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvRmlsdGVyRWZmZWN0UmVuZGVyZXIuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0zMDUsMTQgKzMwNSwxNCBAQCBib29sIEZpbHRlckVmZmVjdFJlbmRlcmVyOjpidWls
ZChSZW5kZXJFCiAKIGJvb2wgRmlsdGVyRWZmZWN0UmVuZGVyZXI6OnVwZGF0ZUJhY2tpbmdTdG9y
ZVJlY3QoY29uc3QgRmxvYXRSZWN0JiBmaWx0ZXJSZWN0KQogewotICAgIGlmICghZmlsdGVyUmVj
dC5pc1plcm8oKSAmJiBGaWx0ZXJFZmZlY3Q6OmlzRmlsdGVyU2l6ZVZhbGlkKGZpbHRlclJlY3Qp
KSB7Ci0gICAgICAgIEZsb2F0UmVjdCBjdXJyZW50U291cmNlUmVjdCA9IHNvdXJjZUltYWdlUmVj
dCgpOwotICAgICAgICBpZiAoZmlsdGVyUmVjdCAhPSBjdXJyZW50U291cmNlUmVjdCkgewotICAg
ICAgICAgICAgc2V0U291cmNlSW1hZ2VSZWN0KGZpbHRlclJlY3QpOwotICAgICAgICAgICAgcmV0
dXJuIHRydWU7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgcmV0dXJuIGZhbHNlOworICAgIGlmIChm
aWx0ZXJSZWN0LmlzRW1wdHkoKSB8fCAhSW1hZ2VCdWZmZXI6OmlzU2l6ZUNsYW1wZWQoZmlsdGVy
UmVjdC5zaXplKCkpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBpZiAoZmlsdGVyUmVj
dCA9PSBzb3VyY2VJbWFnZVJlY3QoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgc2V0
U291cmNlSW1hZ2VSZWN0KGZpbHRlclJlY3QpOworICAgIHJldHVybiB0cnVlOwogfQogCiB2b2lk
IEZpbHRlckVmZmVjdFJlbmRlcmVyOjphbGxvY2F0ZUJhY2tpbmdTdG9yZUlmTmVlZGVkKCkKQEAg
LTQwMSw3ICs0MDEsNyBAQCBib29sIEZpbHRlckVmZmVjdFJlbmRlcmVySGVscGVyOjpiZWdpbkZp
CiAgICAgZmlsdGVyLT5hbGxvY2F0ZUJhY2tpbmdTdG9yZUlmTmVlZGVkKCk7CiAgICAgLy8gUGFp
bnQgaW50byB0aGUgY29udGV4dCB0aGF0IHJlcHJlc2VudHMgdGhlIFNvdXJjZUdyYXBoaWMgb2Yg
dGhlIGZpbHRlci4KICAgICBHcmFwaGljc0NvbnRleHQqIHNvdXJjZUdyYXBoaWNzQ29udGV4dCA9
IGZpbHRlci0+aW5wdXRDb250ZXh0KCk7Ci0gICAgaWYgKCFzb3VyY2VHcmFwaGljc0NvbnRleHQg
fHwgIUZpbHRlckVmZmVjdDo6aXNGaWx0ZXJTaXplVmFsaWQoZmlsdGVyLT5maWx0ZXJSZWdpb24o
KSkpIHsKKyAgICBpZiAoIXNvdXJjZUdyYXBoaWNzQ29udGV4dCB8fCBmaWx0ZXItPmZpbHRlclJl
Z2lvbigpLmlzRW1wdHkoKSB8fCAhSW1hZ2VCdWZmZXI6OmlzU2l6ZUNsYW1wZWQoZmlsdGVyLT5m
aWx0ZXJSZWdpb24oKS5zaXplKCkpKSB7CiAgICAgICAgIC8vIERpc2FibGUgdGhlIGZpbHRlcnMg
YW5kIGNvbnRpbnVlLgogICAgICAgICBtX2hhdmVGaWx0ZXJFZmZlY3QgPSBmYWxzZTsKICAgICAg
ICAgcmV0dXJuIGZhbHNlOwpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5k
ZXJTVkdSZXNvdXJjZUNsaXBwZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VDbGlwcGVyLmNwcAkocmV2aXNpb24gMTgzNzU2
KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJjZUNsaXBw
ZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMzgsMTEgKzEzOCwxMSBAQCBib29sIFJlbmRlclNW
R1Jlc291cmNlQ2xpcHBlcjo6YXBwbHlDbGlwCiAgICAgaWYgKHNob3VsZENyZWF0ZUNsaXBwZXJN
YXNrSW1hZ2UgJiYgcGF0aE9ubHlDbGlwcGluZyhjb250ZXh0LCBhbmltYXRlZExvY2FsVHJhbnNm
b3JtLCBvYmplY3RCb3VuZGluZ0JveCkpCiAgICAgICAgIHJldHVybiB0cnVlOwogCi0gICAgQWZm
aW5lVHJhbnNmb3JtIGFic29sdXRlVHJhbnNmb3JtOwotICAgIFNWR1JlbmRlcmluZ0NvbnRleHQ6
OmNhbGN1bGF0ZVRyYW5zZm9ybWF0aW9uVG9PdXRlcm1vc3RDb29yZGluYXRlU3lzdGVtKHJlbmRl
cmVyLCBhYnNvbHV0ZVRyYW5zZm9ybSk7CisgICAgQWZmaW5lVHJhbnNmb3JtIGFic29sdXRlVHJh
bnNmb3JtID0gU1ZHUmVuZGVyaW5nQ29udGV4dDo6Y2FsY3VsYXRlVHJhbnNmb3JtYXRpb25Ub091
dGVybW9zdENvb3JkaW5hdGVTeXN0ZW0ocmVuZGVyZXIpOwogCiAgICAgaWYgKHNob3VsZENyZWF0
ZUNsaXBwZXJNYXNrSW1hZ2UgJiYgIXJlcGFpbnRSZWN0LmlzRW1wdHkoKSkgewotICAgICAgICBp
ZiAoIVNWR1JlbmRlcmluZ0NvbnRleHQ6OmNyZWF0ZUltYWdlQnVmZmVyKHJlcGFpbnRSZWN0LCBh
YnNvbHV0ZVRyYW5zZm9ybSwgY2xpcHBlck1hc2tJbWFnZSwgQ29sb3JTcGFjZURldmljZVJHQiwg
VW5hY2NlbGVyYXRlZCkpCisgICAgICAgIGNsaXBwZXJNYXNrSW1hZ2UgPSBTVkdSZW5kZXJpbmdD
b250ZXh0OjpjcmVhdGVJbWFnZUJ1ZmZlcihyZXBhaW50UmVjdCwgYWJzb2x1dGVUcmFuc2Zvcm0s
IENvbG9yU3BhY2VEZXZpY2VSR0IsIFVuYWNjZWxlcmF0ZWQpOworICAgICAgICBpZiAoIWNsaXBw
ZXJNYXNrSW1hZ2UpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICAgICAgR3JhcGhp
Y3NDb250ZXh0KiBtYXNrQ29udGV4dCA9IGNsaXBwZXJNYXNrSW1hZ2UtPmNvbnRleHQoKTsKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VGaWx0ZXIu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZH
UmVzb3VyY2VGaWx0ZXIuY3BwCShyZXZpc2lvbiAxODM3NTYpCisrKyBTb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291cmNlRmlsdGVyLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtOTYsMjEgKzk2LDYgQEAgc3RkOjp1bmlxdWVfcHRyPFNWR0ZpbHRlckJ1aWxkZXI+IFJlbmRl
cgogICAgIHJldHVybiBidWlsZGVyOwogfQogCi1ib29sIFJlbmRlclNWR1Jlc291cmNlRmlsdGVy
OjpmaXRzSW5NYXhpbXVtSW1hZ2VTaXplKGNvbnN0IEZsb2F0U2l6ZSYgc2l6ZSwgRmxvYXRTaXpl
JiBzY2FsZSkKLXsKLSAgICBGbG9hdFNpemUgc2NhbGVkU2l6ZShzaXplKTsKLSAgICBzY2FsZWRT
aXplLnNjYWxlKHNjYWxlLndpZHRoKCksIHNjYWxlLmhlaWdodCgpKTsKLSAgICBmbG9hdCBzY2Fs
ZWRBcmVhID0gc2NhbGVkU2l6ZS53aWR0aCgpICogc2NhbGVkU2l6ZS5oZWlnaHQoKTsKLQotICAg
IGlmIChzY2FsZWRBcmVhIDw9IEZpbHRlckVmZmVjdDo6bWF4RmlsdGVyQXJlYSgpKQotICAgICAg
ICByZXR1cm4gdHJ1ZTsKLQotICAgIC8vIElmIGFyZWEgb2Ygc2NhbGVkIHNpemUgaXMgYmlnZ2Vy
IHRoYW4gdGhlIHVwcGVyIGxpbWl0LCBhZGp1c3QgdGhlIHNjYWxlCi0gICAgLy8gdG8gZml0Lgot
ICAgIHNjYWxlLnNjYWxlKHNxcnQoRmlsdGVyRWZmZWN0OjptYXhGaWx0ZXJBcmVhKCkgLyBzY2Fs
ZWRBcmVhKSk7Ci0gICAgcmV0dXJuIGZhbHNlOwotfQotCiBib29sIFJlbmRlclNWR1Jlc291cmNl
RmlsdGVyOjphcHBseVJlc291cmNlKFJlbmRlckVsZW1lbnQmIHJlbmRlcmVyLCBjb25zdCBSZW5k
ZXJTdHlsZSYsIEdyYXBoaWNzQ29udGV4dComIGNvbnRleHQsIHVuc2lnbmVkIHNob3J0IHJlc291
cmNlTW9kZSkKIHsKICAgICBBU1NFUlQoY29udGV4dCk7CkBAIC0xMzEsOCArMTE2LDcgQEAgYm9v
bCBSZW5kZXJTVkdSZXNvdXJjZUZpbHRlcjo6YXBwbHlSZXNvdQogICAgICAgICByZXR1cm4gZmFs
c2U7CiAKICAgICAvLyBEZXRlcm1pbmUgYWJzb2x1dGUgdHJhbnNmb3JtYXRpb24gbWF0cml4IGZv
ciBmaWx0ZXIuIAotICAgIEFmZmluZVRyYW5zZm9ybSBhYnNvbHV0ZVRyYW5zZm9ybTsKLSAgICBT
VkdSZW5kZXJpbmdDb250ZXh0OjpjYWxjdWxhdGVUcmFuc2Zvcm1hdGlvblRvT3V0ZXJtb3N0Q29v
cmRpbmF0ZVN5c3RlbShyZW5kZXJlciwgYWJzb2x1dGVUcmFuc2Zvcm0pOworICAgIEFmZmluZVRy
YW5zZm9ybSBhYnNvbHV0ZVRyYW5zZm9ybSA9IFNWR1JlbmRlcmluZ0NvbnRleHQ6OmNhbGN1bGF0
ZVRyYW5zZm9ybWF0aW9uVG9PdXRlcm1vc3RDb29yZGluYXRlU3lzdGVtKHJlbmRlcmVyKTsKICAg
ICBpZiAoIWFic29sdXRlVHJhbnNmb3JtLmlzSW52ZXJ0aWJsZSgpKQogICAgICAgICByZXR1cm4g
ZmFsc2U7CiAKQEAgLTE2Nyw4ICsxNTEsOCBAQCBib29sIFJlbmRlclNWR1Jlc291cmNlRmlsdGVy
OjphcHBseVJlc291CiAKICAgICAvLyBEZXRlcm1pbmUgc2NhbGUgZmFjdG9yIGZvciBmaWx0ZXIu
IFRoZSBzaXplIG9mIGludGVybWVkaWF0ZSBJbWFnZUJ1ZmZlcnMgc2hvdWxkbid0IGJlIGJpZ2dl
ciB0aGFuIGtNYXhGaWx0ZXJTaXplLgogICAgIEZsb2F0UmVjdCB0ZW1wU291cmNlUmVjdCA9IGFi
c29sdXRlRHJhd2luZ1JlZ2lvbjsKKyAgICBJbWFnZUJ1ZmZlcjo6aXNTaXplQ2xhbXBlZCh0ZW1w
U291cmNlUmVjdC5zaXplKCksIHNjYWxlKTsKICAgICB0ZW1wU291cmNlUmVjdC5zY2FsZShzY2Fs
ZS53aWR0aCgpLCBzY2FsZS5oZWlnaHQoKSk7Ci0gICAgZml0c0luTWF4aW11bUltYWdlU2l6ZSh0
ZW1wU291cmNlUmVjdC5zaXplKCksIHNjYWxlKTsKIAogICAgIC8vIFNldCB0aGUgc2NhbGUgbGV2
ZWwgaW4gU1ZHRmlsdGVyLgogICAgIGZpbHRlckRhdGEtPmZpbHRlci0+c2V0RmlsdGVyUmVzb2x1
dGlvbihzY2FsZSk7CkBAIC0xODIsNyArMTY2LDcgQEAgYm9vbCBSZW5kZXJTVkdSZXNvdXJjZUZp
bHRlcjo6YXBwbHlSZXNvdQogICAgIEZsb2F0UmVjdCBzdWJSZWdpb24gPSBsYXN0RWZmZWN0LT5t
YXhFZmZlY3RSZWN0KCk7CiAgICAgLy8gQXQgbGVhc3Qgb25lIEZpbHRlckVmZmVjdCBoYXMgYSB0
b28gYmlnIGltYWdlIHNpemUsCiAgICAgLy8gcmVjYWxjdWxhdGUgdGhlIGVmZmVjdCBzaXplcyB3
aXRoIG5ldyBzY2FsZSBmYWN0b3JzLgotICAgIGlmICghZml0c0luTWF4aW11bUltYWdlU2l6ZShz
dWJSZWdpb24uc2l6ZSgpLCBzY2FsZSkpIHsKKyAgICBpZiAoIUltYWdlQnVmZmVyOjppc1NpemVD
bGFtcGVkKHN1YlJlZ2lvbi5zaXplKCksIHNjYWxlKSkgewogICAgICAgICBmaWx0ZXJEYXRhLT5m
aWx0ZXItPnNldEZpbHRlclJlc29sdXRpb24oc2NhbGUpOwogICAgICAgICBSZW5kZXJTVkdSZXNv
dXJjZUZpbHRlclByaW1pdGl2ZTo6ZGV0ZXJtaW5lRmlsdGVyUHJpbWl0aXZlU3VicmVnaW9uKCps
YXN0RWZmZWN0KTsKICAgICB9CkBAIC0yMDEsOSArMTg1LDEwIEBAIGJvb2wgUmVuZGVyU1ZHUmVz
b3VyY2VGaWx0ZXI6OmFwcGx5UmVzb3UKICAgICBlZmZlY3RpdmVUcmFuc2Zvcm0uc2NhbGUoc2Nh
bGUud2lkdGgoKSwgc2NhbGUuaGVpZ2h0KCkpOwogICAgIGVmZmVjdGl2ZVRyYW5zZm9ybS5tdWx0
aXBseShmaWx0ZXJEYXRhLT5zaGVhckZyZWVBYnNvbHV0ZVRyYW5zZm9ybSk7CiAKLSAgICBzdGQ6
OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXI+IHNvdXJjZUdyYXBoaWM7CiAgICAgUmVuZGVyaW5nTW9k
ZSByZW5kZXJpbmdNb2RlID0gcmVuZGVyZXIuZnJhbWUoKS5zZXR0aW5ncygpLmFjY2VsZXJhdGVk
RmlsdGVyc0VuYWJsZWQoKSA/IEFjY2VsZXJhdGVkIDogVW5hY2NlbGVyYXRlZDsKLSAgICBpZiAo
IVNWR1JlbmRlcmluZ0NvbnRleHQ6OmNyZWF0ZUltYWdlQnVmZmVyKGZpbHRlckRhdGEtPmRyYXdp
bmdSZWdpb24sIGVmZmVjdGl2ZVRyYW5zZm9ybSwgc291cmNlR3JhcGhpYywgQ29sb3JTcGFjZUxp
bmVhclJHQiwgcmVuZGVyaW5nTW9kZSkpIHsKKworICAgIGF1dG8gc291cmNlR3JhcGhpYyA9IFNW
R1JlbmRlcmluZ0NvbnRleHQ6OmNyZWF0ZUltYWdlQnVmZmVyKGZpbHRlckRhdGEtPmRyYXdpbmdS
ZWdpb24sIGVmZmVjdGl2ZVRyYW5zZm9ybSwgQ29sb3JTcGFjZUxpbmVhclJHQiwgcmVuZGVyaW5n
TW9kZSk7CisgICAgaWYgKCFzb3VyY2VHcmFwaGljKSB7CiAgICAgICAgIEFTU0VSVCghbV9maWx0
ZXIuY29udGFpbnMoJnJlbmRlcmVyKSk7CiAgICAgICAgIGZpbHRlckRhdGEtPnNhdmVkQ29udGV4
dCA9IGNvbnRleHQ7CiAgICAgICAgIG1fZmlsdGVyLnNldCgmcmVuZGVyZXIsIFdURjo6bW92ZShm
aWx0ZXJEYXRhKSk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNW
R1Jlc291cmNlRmlsdGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L3N2Zy9SZW5kZXJTVkdSZXNvdXJjZUZpbHRlci5oCShyZXZpc2lvbiAxODM3NTYpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291cmNlRmlsdGVyLmgJKHdvcmtp
bmcgY29weSkKQEAgLTkxLDggKzkxLDYgQEAgcHJpdmF0ZToKICAgICB2aXJ0dWFsIGNvbnN0IGNo
YXIqIHJlbmRlck5hbWUoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiAiUmVuZGVyU1ZHUmVzb3Vy
Y2VGaWx0ZXIiOyB9CiAgICAgdmlydHVhbCBib29sIGlzU1ZHUmVzb3VyY2VGaWx0ZXIoKSBjb25z
dCBvdmVycmlkZSB7IHJldHVybiB0cnVlOyB9CiAKLSAgICBib29sIGZpdHNJbk1heGltdW1JbWFn
ZVNpemUoY29uc3QgRmxvYXRTaXplJiwgRmxvYXRTaXplJik7Ci0KICAgICBIYXNoTWFwPFJlbmRl
ck9iamVjdCosIHN0ZDo6dW5pcXVlX3B0cjxGaWx0ZXJEYXRhPj4gbV9maWx0ZXI7CiB9OwogCklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291cmNlR3JhZGll
bnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVy
U1ZHUmVzb3VyY2VHcmFkaWVudC5jcHAJKHJldmlzaW9uIDE4Mzc1NikKKysrIFNvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VHcmFkaWVudC5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTU4LDEyICs1OCwxMSBAQCBzdGF0aWMgaW5saW5lIGJvb2wgY3JlYXRlTWFza0Fu
ZFN3YXBDb250CiAgICAgYXV0byogdGV4dFJvb3RCbG9jayA9IFJlbmRlclNWR1RleHQ6OmxvY2F0
ZVJlbmRlclNWR1RleHRBbmNlc3Rvcigqb2JqZWN0KTsKICAgICBBU1NFUlQodGV4dFJvb3RCbG9j
ayk7CiAKLSAgICBBZmZpbmVUcmFuc2Zvcm0gYWJzb2x1dGVUcmFuc2Zvcm07Ci0gICAgU1ZHUmVu
ZGVyaW5nQ29udGV4dDo6Y2FsY3VsYXRlVHJhbnNmb3JtYXRpb25Ub091dGVybW9zdENvb3JkaW5h
dGVTeXN0ZW0oKnRleHRSb290QmxvY2ssIGFic29sdXRlVHJhbnNmb3JtKTsKLQorICAgIEFmZmlu
ZVRyYW5zZm9ybSBhYnNvbHV0ZVRyYW5zZm9ybSA9IFNWR1JlbmRlcmluZ0NvbnRleHQ6OmNhbGN1
bGF0ZVRyYW5zZm9ybWF0aW9uVG9PdXRlcm1vc3RDb29yZGluYXRlU3lzdGVtKCp0ZXh0Um9vdEJs
b2NrKTsKICAgICBGbG9hdFJlY3QgcmVwYWludFJlY3QgPSB0ZXh0Um9vdEJsb2NrLT5yZXBhaW50
UmVjdEluTG9jYWxDb29yZGluYXRlcygpOwotICAgIHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZl
cj4gbWFza0ltYWdlOwotICAgIGlmICghU1ZHUmVuZGVyaW5nQ29udGV4dDo6Y3JlYXRlSW1hZ2VC
dWZmZXIocmVwYWludFJlY3QsIGFic29sdXRlVHJhbnNmb3JtLCBtYXNrSW1hZ2UsIENvbG9yU3Bh
Y2VEZXZpY2VSR0IsIFVuYWNjZWxlcmF0ZWQpKQorCisgICAgYXV0byBtYXNrSW1hZ2UgPSBTVkdS
ZW5kZXJpbmdDb250ZXh0OjpjcmVhdGVJbWFnZUJ1ZmZlcihyZXBhaW50UmVjdCwgYWJzb2x1dGVU
cmFuc2Zvcm0sIENvbG9yU3BhY2VEZXZpY2VSR0IsIFVuYWNjZWxlcmF0ZWQpOworICAgIGlmICgh
bWFza0ltYWdlKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICBHcmFwaGljc0NvbnRleHQq
IG1hc2tJbWFnZUNvbnRleHQgPSBtYXNrSW1hZ2UtPmNvbnRleHQoKTsKQEAgLTgwLDEwICs3OSwx
MCBAQCBzdGF0aWMgaW5saW5lIEFmZmluZVRyYW5zZm9ybSBjbGlwVG9UZXh0CiAgICAgYXV0byog
dGV4dFJvb3RCbG9jayA9IFJlbmRlclNWR1RleHQ6OmxvY2F0ZVJlbmRlclNWR1RleHRBbmNlc3Rv
cigqb2JqZWN0KTsKICAgICBBU1NFUlQodGV4dFJvb3RCbG9jayk7CiAKLSAgICBBZmZpbmVUcmFu
c2Zvcm0gYWJzb2x1dGVUcmFuc2Zvcm07Ci0gICAgU1ZHUmVuZGVyaW5nQ29udGV4dDo6Y2FsY3Vs
YXRlVHJhbnNmb3JtYXRpb25Ub091dGVybW9zdENvb3JkaW5hdGVTeXN0ZW0oKnRleHRSb290Qmxv
Y2ssIGFic29sdXRlVHJhbnNmb3JtKTsKKyAgICBBZmZpbmVUcmFuc2Zvcm0gYWJzb2x1dGVUcmFu
c2Zvcm0gPSBTVkdSZW5kZXJpbmdDb250ZXh0OjpjYWxjdWxhdGVUcmFuc2Zvcm1hdGlvblRvT3V0
ZXJtb3N0Q29vcmRpbmF0ZVN5c3RlbSgqdGV4dFJvb3RCbG9jayk7CiAKICAgICB0YXJnZXRSZWN0
ID0gdGV4dFJvb3RCbG9jay0+cmVwYWludFJlY3RJbkxvY2FsQ29vcmRpbmF0ZXMoKTsKKwogICAg
IFNWR1JlbmRlcmluZ0NvbnRleHQ6OmNsaXBUb0ltYWdlQnVmZmVyKGNvbnRleHQsIGFic29sdXRl
VHJhbnNmb3JtLCB0YXJnZXRSZWN0LCBpbWFnZUJ1ZmZlciwgZmFsc2UpOwogCiAgICAgQWZmaW5l
VHJhbnNmb3JtIG1hdHJpeDsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVu
ZGVyU1ZHUmVzb3VyY2VNYXNrZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VNYXNrZXIuY3BwCShyZXZpc2lvbiAxODM3NTYp
CisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291cmNlTWFza2Vy
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjMsMTYgKzYzLDE0IEBAIGJvb2wgUmVuZGVyU1ZHUmVz
b3VyY2VNYXNrZXI6OmFwcGx5U1ZHTWEKICAgICAgICAgbV9tYXNrZXIuc2V0KCZyZW5kZXJlciwg
c3RkOjptYWtlX3VuaXF1ZTxNYXNrZXJEYXRhPigpKTsKIAogICAgIE1hc2tlckRhdGEqIG1hc2tl
ckRhdGEgPSBtX21hc2tlci5nZXQoJnJlbmRlcmVyKTsKLQotICAgIEFmZmluZVRyYW5zZm9ybSBh
YnNvbHV0ZVRyYW5zZm9ybTsKLSAgICBTVkdSZW5kZXJpbmdDb250ZXh0OjpjYWxjdWxhdGVUcmFu
c2Zvcm1hdGlvblRvT3V0ZXJtb3N0Q29vcmRpbmF0ZVN5c3RlbShyZW5kZXJlciwgYWJzb2x1dGVU
cmFuc2Zvcm0pOwotCisgICAgQWZmaW5lVHJhbnNmb3JtIGFic29sdXRlVHJhbnNmb3JtID0gU1ZH
UmVuZGVyaW5nQ29udGV4dDo6Y2FsY3VsYXRlVHJhbnNmb3JtYXRpb25Ub091dGVybW9zdENvb3Jk
aW5hdGVTeXN0ZW0ocmVuZGVyZXIpOwogICAgIEZsb2F0UmVjdCByZXBhaW50UmVjdCA9IHJlbmRl
cmVyLnJlcGFpbnRSZWN0SW5Mb2NhbENvb3JkaW5hdGVzKCk7CiAKICAgICBpZiAoIW1hc2tlckRh
dGEtPm1hc2tJbWFnZSAmJiAhcmVwYWludFJlY3QuaXNFbXB0eSgpKSB7CiAgICAgICAgIGNvbnN0
IFNWR1JlbmRlclN0eWxlJiBzdmdTdHlsZSA9IHN0eWxlKCkuc3ZnU3R5bGUoKTsKICAgICAgICAg
Q29sb3JTcGFjZSBjb2xvclNwYWNlID0gc3ZnU3R5bGUuY29sb3JJbnRlcnBvbGF0aW9uKCkgPT0g
Q0lfTElORUFSUkdCID8gQ29sb3JTcGFjZUxpbmVhclJHQiA6IENvbG9yU3BhY2VEZXZpY2VSR0I7
Ci0gICAgICAgIGlmICghU1ZHUmVuZGVyaW5nQ29udGV4dDo6Y3JlYXRlSW1hZ2VCdWZmZXIocmVw
YWludFJlY3QsIGFic29sdXRlVHJhbnNmb3JtLCBtYXNrZXJEYXRhLT5tYXNrSW1hZ2UsIGNvbG9y
U3BhY2UsIFVuYWNjZWxlcmF0ZWQpKQorICAgICAgICBtYXNrZXJEYXRhLT5tYXNrSW1hZ2UgPSBT
VkdSZW5kZXJpbmdDb250ZXh0OjpjcmVhdGVJbWFnZUJ1ZmZlcihyZXBhaW50UmVjdCwgYWJzb2x1
dGVUcmFuc2Zvcm0sIGNvbG9yU3BhY2UsIFVuYWNjZWxlcmF0ZWQpOworICAgICAgICBpZiAoIW1h
c2tlckRhdGEtPm1hc2tJbWFnZSkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgICAg
ICBpZiAoIWRyYXdDb250ZW50SW50b01hc2tJbWFnZShtYXNrZXJEYXRhLCBjb2xvclNwYWNlLCAm
cmVuZGVyZXIpKQpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdS
ZXNvdXJjZVBhdHRlcm4uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VQYXR0ZXJuLmNwcAkocmV2aXNpb24gMTgzNzU2KQorKysg
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJjZVBhdHRlcm4uY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC03MCwyMCArNzAsMTkgQEAgUGF0dGVybkRhdGEqIFJlbmRlclNW
R1Jlc291cmNlUGF0dGVybjo6YgogCiAgICAgLy8gSWYgd2UgY291bGRuJ3QgZGV0ZXJtaW5lIHRo
ZSBwYXR0ZXJuIGNvbnRlbnQgZWxlbWVudCByb290LCBzdG9wIGhlcmUuCiAgICAgaWYgKCFtX2F0
dHJpYnV0ZXMucGF0dGVybkNvbnRlbnRFbGVtZW50KCkpCi0gICAgICAgIHJldHVybiAwOworICAg
ICAgICByZXR1cm4gbnVsbHB0cjsKIAogICAgIC8vIEFuIGVtcHR5IHZpZXdCb3ggZGlzYWJsZXMg
cmVuZGVyaW5nLgogICAgIGlmIChtX2F0dHJpYnV0ZXMuaGFzVmlld0JveCgpICYmIG1fYXR0cmli
dXRlcy52aWV3Qm94KCkuaXNFbXB0eSgpKQotICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgcmV0
dXJuIG51bGxwdHI7CiAKICAgICAvLyBDb21wdXRlIGFsbCBuZWNlc3NhcnkgdHJhbnNmb3JtYXRp
b25zIHRvIGJ1aWxkIHRoZSB0aWxlIGltYWdlICYgdGhlIHBhdHRlcm4uCiAgICAgRmxvYXRSZWN0
IHRpbGVCb3VuZGFyaWVzOwogICAgIEFmZmluZVRyYW5zZm9ybSB0aWxlSW1hZ2VUcmFuc2Zvcm07
CiAgICAgaWYgKCFidWlsZFRpbGVJbWFnZVRyYW5zZm9ybShyZW5kZXJlciwgbV9hdHRyaWJ1dGVz
LCBwYXR0ZXJuRWxlbWVudCgpLCB0aWxlQm91bmRhcmllcywgdGlsZUltYWdlVHJhbnNmb3JtKSkK
LSAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIHJldHVybiBudWxscHRyOwogCi0gICAgQWZmaW5l
VHJhbnNmb3JtIGFic29sdXRlVHJhbnNmb3JtSWdub3JpbmdSb3RhdGlvbjsKLSAgICBTVkdSZW5k
ZXJpbmdDb250ZXh0OjpjYWxjdWxhdGVUcmFuc2Zvcm1hdGlvblRvT3V0ZXJtb3N0Q29vcmRpbmF0
ZVN5c3RlbShyZW5kZXJlciwgYWJzb2x1dGVUcmFuc2Zvcm1JZ25vcmluZ1JvdGF0aW9uKTsKKyAg
ICBBZmZpbmVUcmFuc2Zvcm0gYWJzb2x1dGVUcmFuc2Zvcm1JZ25vcmluZ1JvdGF0aW9uID0gU1ZH
UmVuZGVyaW5nQ29udGV4dDo6Y2FsY3VsYXRlVHJhbnNmb3JtYXRpb25Ub091dGVybW9zdENvb3Jk
aW5hdGVTeXN0ZW0ocmVuZGVyZXIpOwogCiAgICAgLy8gSWdub3JlIDJEIHJvdGF0aW9uLCBhcyBp
dCBkb2Vzbid0IGFmZmVjdCB0aGUgc2l6ZSBvZiB0aGUgdGlsZS4KICAgICBTVkdSZW5kZXJpbmdD
b250ZXh0OjpjbGVhcjJEUm90YXRpb24oYWJzb2x1dGVUcmFuc2Zvcm1JZ25vcmluZ1JvdGF0aW9u
KTsKQEAgLTk1LDEzICs5NCwxMyBAQCBQYXR0ZXJuRGF0YSogUmVuZGVyU1ZHUmVzb3VyY2VQYXR0
ZXJuOjpiCiAgICAgICAgIHN0YXRpY19jYXN0PGZsb2F0PihtX2F0dHJpYnV0ZXMucGF0dGVyblRy
YW5zZm9ybSgpLnlTY2FsZSgpKSk7CiAKICAgICAvLyBCdWlsZCB0aWxlIGltYWdlLgotICAgIHN0
ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlcj4gdGlsZUltYWdlID0gY3JlYXRlVGlsZUltYWdlKG1f
YXR0cmlidXRlcywgdGlsZUJvdW5kYXJpZXMsIGFic29sdXRlVGlsZUJvdW5kYXJpZXMsIHRpbGVJ
bWFnZVRyYW5zZm9ybSwgY2xhbXBlZEFic29sdXRlVGlsZUJvdW5kYXJpZXMpOworICAgIGF1dG8g
dGlsZUltYWdlID0gY3JlYXRlVGlsZUltYWdlKG1fYXR0cmlidXRlcywgdGlsZUJvdW5kYXJpZXMs
IGFic29sdXRlVGlsZUJvdW5kYXJpZXMsIHRpbGVJbWFnZVRyYW5zZm9ybSwgY2xhbXBlZEFic29s
dXRlVGlsZUJvdW5kYXJpZXMpOwogICAgIGlmICghdGlsZUltYWdlKQotICAgICAgICByZXR1cm4g
MDsKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAKICAgICBSZWZQdHI8SW1hZ2U+IGNvcGllZElt
YWdlID0gdGlsZUltYWdlLT5jb3B5SW1hZ2UoQ29weUJhY2tpbmdTdG9yZSk7CiAgICAgaWYgKCFj
b3BpZWRJbWFnZSkKLSAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIHJldHVybiBudWxscHRyOwog
CiAgICAgLy8gQnVpbGQgcGF0dGVybi4KICAgICBhdXRvIHBhdHRlcm5EYXRhID0gc3RkOjptYWtl
X3VuaXF1ZTxQYXR0ZXJuRGF0YT4oKTsKQEAgLTIzMywxMSArMjMyLDkgQEAgYm9vbCBSZW5kZXJT
VkdSZXNvdXJjZVBhdHRlcm46OmJ1aWxkVGlsZQogCiBzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZm
ZXI+IFJlbmRlclNWR1Jlc291cmNlUGF0dGVybjo6Y3JlYXRlVGlsZUltYWdlKGNvbnN0IFBhdHRl
cm5BdHRyaWJ1dGVzJiBhdHRyaWJ1dGVzLCBjb25zdCBGbG9hdFJlY3QmIHRpbGVCb3VuZGFyaWVz
LCBjb25zdCBGbG9hdFJlY3QmIGFic29sdXRlVGlsZUJvdW5kYXJpZXMsIGNvbnN0IEFmZmluZVRy
YW5zZm9ybSYgdGlsZUltYWdlVHJhbnNmb3JtLCBGbG9hdFJlY3QmIGNsYW1wZWRBYnNvbHV0ZVRp
bGVCb3VuZGFyaWVzKSBjb25zdAogewotICAgIGNsYW1wZWRBYnNvbHV0ZVRpbGVCb3VuZGFyaWVz
ID0gU1ZHUmVuZGVyaW5nQ29udGV4dDo6Y2xhbXBlZEFic29sdXRlVGFyZ2V0UmVjdChhYnNvbHV0
ZVRpbGVCb3VuZGFyaWVzKTsKLQotICAgIHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlcj4gdGls
ZUltYWdlOwotCi0gICAgaWYgKCFTVkdSZW5kZXJpbmdDb250ZXh0OjpjcmVhdGVJbWFnZUJ1ZmZl
ckZvclBhdHRlcm4oYWJzb2x1dGVUaWxlQm91bmRhcmllcywgY2xhbXBlZEFic29sdXRlVGlsZUJv
dW5kYXJpZXMsIHRpbGVJbWFnZSwgQ29sb3JTcGFjZURldmljZVJHQiwgVW5hY2NlbGVyYXRlZCkp
CisgICAgY2xhbXBlZEFic29sdXRlVGlsZUJvdW5kYXJpZXMgPSBJbWFnZUJ1ZmZlcjo6Y2xhbXBl
ZFJlY3QoYWJzb2x1dGVUaWxlQm91bmRhcmllcyk7CisgICAgYXV0byB0aWxlSW1hZ2UgPSBTVkdS
ZW5kZXJpbmdDb250ZXh0OjpjcmVhdGVJbWFnZUJ1ZmZlcihhYnNvbHV0ZVRpbGVCb3VuZGFyaWVz
LCBjbGFtcGVkQWJzb2x1dGVUaWxlQm91bmRhcmllcywgQ29sb3JTcGFjZURldmljZVJHQiwgVW5h
Y2NlbGVyYXRlZCk7CisgICAgaWYgKCF0aWxlSW1hZ2UpCiAgICAgICAgIHJldHVybiBudWxscHRy
OwogCiAgICAgR3JhcGhpY3NDb250ZXh0KiB0aWxlSW1hZ2VDb250ZXh0ID0gdGlsZUltYWdlLT5j
b250ZXh0KCk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR1JlbmRlcmlu
Z0NvbnRleHQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcv
U1ZHUmVuZGVyaW5nQ29udGV4dC5jcHAJKHJldmlzaW9uIDE4Mzc1NikKKysrIFNvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9zdmcvU1ZHUmVuZGVyaW5nQ29udGV4dC5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTM5LDggKzM5LDYgQEAKICNpbmNsdWRlICJTVkdSZXNvdXJjZXMuaCIKICNpbmNsdWRlICJT
VkdSZXNvdXJjZXNDYWNoZS5oIgogCi1zdGF0aWMgaW50IGtNYXhJbWFnZUJ1ZmZlclNpemUgPSA0
MDk2OwotCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIHN0YXRpYyBpbmxpbmUgYm9vbCBpc1JlbmRl
cmluZ01hc2tJbWFnZShjb25zdCBSZW5kZXJPYmplY3QmIG9iamVjdCkKQEAgLTIwNCwxNCArMjAy
LDEzIEBAIHN0YXRpYyBBZmZpbmVUcmFuc2Zvcm0mIGN1cnJlbnRDb250ZW50VHIKIAogZmxvYXQg
U1ZHUmVuZGVyaW5nQ29udGV4dDo6Y2FsY3VsYXRlU2NyZWVuRm9udFNpemVTY2FsaW5nRmFjdG9y
KGNvbnN0IFJlbmRlck9iamVjdCYgcmVuZGVyZXIpCiB7Ci0gICAgQWZmaW5lVHJhbnNmb3JtIGN0
bTsKLSAgICBjYWxjdWxhdGVUcmFuc2Zvcm1hdGlvblRvT3V0ZXJtb3N0Q29vcmRpbmF0ZVN5c3Rl
bShyZW5kZXJlciwgY3RtKTsKKyAgICBBZmZpbmVUcmFuc2Zvcm0gY3RtID0gY2FsY3VsYXRlVHJh
bnNmb3JtYXRpb25Ub091dGVybW9zdENvb3JkaW5hdGVTeXN0ZW0ocmVuZGVyZXIpOwogICAgIHJl
dHVybiBuYXJyb3dQcmVjaXNpb25Ub0Zsb2F0KHNxcnQoKHBvdyhjdG0ueFNjYWxlKCksIDIpICsg
cG93KGN0bS55U2NhbGUoKSwgMikpIC8gMikpOwogfQogCi12b2lkIFNWR1JlbmRlcmluZ0NvbnRl
eHQ6OmNhbGN1bGF0ZVRyYW5zZm9ybWF0aW9uVG9PdXRlcm1vc3RDb29yZGluYXRlU3lzdGVtKGNv
bnN0IFJlbmRlck9iamVjdCYgcmVuZGVyZXIsIEFmZmluZVRyYW5zZm9ybSYgYWJzb2x1dGVUcmFu
c2Zvcm0pCitBZmZpbmVUcmFuc2Zvcm0gU1ZHUmVuZGVyaW5nQ29udGV4dDo6Y2FsY3VsYXRlVHJh
bnNmb3JtYXRpb25Ub091dGVybW9zdENvb3JkaW5hdGVTeXN0ZW0oY29uc3QgUmVuZGVyT2JqZWN0
JiByZW5kZXJlcikKIHsKLSAgICBhYnNvbHV0ZVRyYW5zZm9ybSA9IGN1cnJlbnRDb250ZW50VHJh
bnNmb3JtYXRpb24oKTsKKyAgICBBZmZpbmVUcmFuc2Zvcm0gYWJzb2x1dGVUcmFuc2Zvcm0gPSBj
dXJyZW50Q29udGVudFRyYW5zZm9ybWF0aW9uKCk7CiAKICAgICBmbG9hdCBkZXZpY2VTY2FsZUZh
Y3RvciA9IHJlbmRlcmVyLmRvY3VtZW50KCkuZGV2aWNlU2NhbGVGYWN0b3IoKTsKICAgICAvLyBX
YWxrIHVwIHRoZSByZW5kZXIgdHJlZSwgYWNjdW11bGF0aW5nIFNWRyB0cmFuc2Zvcm1zLgpAQCAt
MjM3LDUzICsyMzQsNTMgQEAgdm9pZCBTVkdSZW5kZXJpbmdDb250ZXh0OjpjYWxjdWxhdGVUcmFu
cwogICAgIH0KIAogICAgIGFic29sdXRlVHJhbnNmb3JtLnNjYWxlKGRldmljZVNjYWxlRmFjdG9y
KTsKKyAgICByZXR1cm4gYWJzb2x1dGVUcmFuc2Zvcm07CiB9CiAKLWJvb2wgU1ZHUmVuZGVyaW5n
Q29udGV4dDo6Y3JlYXRlSW1hZ2VCdWZmZXIoY29uc3QgRmxvYXRSZWN0JiB0YXJnZXRSZWN0LCBj
b25zdCBBZmZpbmVUcmFuc2Zvcm0mIGFic29sdXRlVHJhbnNmb3JtLCBzdGQ6OnVuaXF1ZV9wdHI8
SW1hZ2VCdWZmZXI+JiBpbWFnZUJ1ZmZlciwgQ29sb3JTcGFjZSBjb2xvclNwYWNlLCBSZW5kZXJp
bmdNb2RlIHJlbmRlcmluZ01vZGUpCitzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXI+IFNWR1Jl
bmRlcmluZ0NvbnRleHQ6OmNyZWF0ZUltYWdlQnVmZmVyKGNvbnN0IEZsb2F0UmVjdCYgdGFyZ2V0
UmVjdCwgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiBhYnNvbHV0ZVRyYW5zZm9ybSwgQ29sb3JTcGFj
ZSBjb2xvclNwYWNlLCBSZW5kZXJpbmdNb2RlIHJlbmRlcmluZ01vZGUpCiB7CiAgICAgSW50UmVj
dCBwYWludFJlY3QgPSBjYWxjdWxhdGVJbWFnZUJ1ZmZlclJlY3QodGFyZ2V0UmVjdCwgYWJzb2x1
dGVUcmFuc2Zvcm0pOwogICAgIC8vIERvbid0IGNyZWF0ZSBlbXB0eSBJbWFnZUJ1ZmZlcnMuCiAg
ICAgaWYgKHBhaW50UmVjdC5pc0VtcHR5KCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAg
ICAgcmV0dXJuIG51bGxwdHI7CiAKLSAgICBJbnRTaXplIGNsYW1wZWRTaXplID0gY2xhbXBlZEFi
c29sdXRlU2l6ZShwYWludFJlY3Quc2l6ZSgpKTsKLSAgICBzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VC
dWZmZXI+IGltYWdlID0gSW1hZ2VCdWZmZXI6OmNyZWF0ZShjbGFtcGVkU2l6ZSwgMSwgY29sb3JT
cGFjZSwgcmVuZGVyaW5nTW9kZSk7Ci0gICAgaWYgKCFpbWFnZSkKLSAgICAgICAgcmV0dXJuIGZh
bHNlOworICAgIEZsb2F0U2l6ZSBzY2FsZTsKKyAgICBGbG9hdFNpemUgY2xhbXBlZFNpemUgPSBJ
bWFnZUJ1ZmZlcjo6Y2xhbXBlZFNpemUocGFpbnRSZWN0LnNpemUoKSwgc2NhbGUpOwogCi0gICAg
R3JhcGhpY3NDb250ZXh0KiBpbWFnZUNvbnRleHQgPSBpbWFnZS0+Y29udGV4dCgpOwotICAgIEFT
U0VSVChpbWFnZUNvbnRleHQpOworICAgIGF1dG8gaW1hZ2VCdWZmZXIgPSBJbWFnZUJ1ZmZlcjo6
Y3JlYXRlKGNsYW1wZWRTaXplLCAxLCBjb2xvclNwYWNlLCByZW5kZXJpbmdNb2RlKTsKKyAgICBp
ZiAoIWltYWdlQnVmZmVyKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKIAotICAgIGltYWdlQ29u
dGV4dC0+c2NhbGUoRmxvYXRTaXplKHN0YXRpY19jYXN0PGZsb2F0PihjbGFtcGVkU2l6ZS53aWR0
aCgpKSAvIHBhaW50UmVjdC53aWR0aCgpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHN0YXRpY19jYXN0PGZsb2F0PihjbGFtcGVkU2l6ZS5oZWlnaHQoKSkgLyBwYWludFJlY3Qu
aGVpZ2h0KCkpKTsKLSAgICBpbWFnZUNvbnRleHQtPnRyYW5zbGF0ZSgtcGFpbnRSZWN0LngoKSwg
LXBhaW50UmVjdC55KCkpOwotICAgIGltYWdlQ29udGV4dC0+Y29uY2F0Q1RNKGFic29sdXRlVHJh
bnNmb3JtKTsKKyAgICBBZmZpbmVUcmFuc2Zvcm0gdHJhbnNmb3JtOworICAgIHRyYW5zZm9ybS5z
Y2FsZShzY2FsZSkudHJhbnNsYXRlKC1wYWludFJlY3QubG9jYXRpb24oKSkubXVsdGlwbHkoYWJz
b2x1dGVUcmFuc2Zvcm0pOwogCi0gICAgaW1hZ2VCdWZmZXIgPSBXVEY6Om1vdmUoaW1hZ2UpOwot
ICAgIHJldHVybiB0cnVlOworICAgIEdyYXBoaWNzQ29udGV4dCogaW1hZ2VDb250ZXh0ID0gaW1h
Z2VCdWZmZXItPmNvbnRleHQoKTsKKyAgICBBU1NFUlQoaW1hZ2VDb250ZXh0KTsKKyAgICBpbWFn
ZUNvbnRleHQtPmNvbmNhdENUTSh0cmFuc2Zvcm0pOworCisgICAgcmV0dXJuIGltYWdlQnVmZmVy
OwogfQogCi1ib29sIFNWR1JlbmRlcmluZ0NvbnRleHQ6OmNyZWF0ZUltYWdlQnVmZmVyRm9yUGF0
dGVybihjb25zdCBGbG9hdFJlY3QmIGFic29sdXRlVGFyZ2V0UmVjdCwgY29uc3QgRmxvYXRSZWN0
JiBjbGFtcGVkQWJzb2x1dGVUYXJnZXRSZWN0LCBzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXI+
JiBpbWFnZUJ1ZmZlciwgQ29sb3JTcGFjZSBjb2xvclNwYWNlLCBSZW5kZXJpbmdNb2RlIHJlbmRl
cmluZ01vZGUpCitzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXI+IFNWR1JlbmRlcmluZ0NvbnRl
eHQ6OmNyZWF0ZUltYWdlQnVmZmVyKGNvbnN0IEZsb2F0UmVjdCYgdGFyZ2V0UmVjdCwgY29uc3Qg
RmxvYXRSZWN0JiBjbGFtcGVkUmVjdCwgQ29sb3JTcGFjZSBjb2xvclNwYWNlLCBSZW5kZXJpbmdN
b2RlIHJlbmRlcmluZ01vZGUpCiB7Ci0gICAgSW50U2l6ZSBpbWFnZVNpemUocm91bmRlZEludFNp
emUoY2xhbXBlZEFic29sdXRlVGFyZ2V0UmVjdC5zaXplKCkpKTsKLSAgICBJbnRTaXplIHVuY2xh
bXBlZEltYWdlU2l6ZShyb3VuZGVkSW50U2l6ZShhYnNvbHV0ZVRhcmdldFJlY3Quc2l6ZSgpKSk7
CisgICAgSW50U2l6ZSBjbGFtcGVkU2l6ZSA9IHJvdW5kZWRJbnRTaXplKGNsYW1wZWRSZWN0LnNp
emUoKSk7CisgICAgSW50U2l6ZSB1bmNsYW1wZWRTaXplID0gcm91bmRlZEludFNpemUodGFyZ2V0
UmVjdC5zaXplKCkpOwogCiAgICAgLy8gRG9uJ3QgY3JlYXRlIGVtcHR5IEltYWdlQnVmZmVycy4K
LSAgICBpZiAoaW1hZ2VTaXplLmlzRW1wdHkoKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOworICAg
IGlmIChjbGFtcGVkU2l6ZS5pc0VtcHR5KCkpCisgICAgICAgIHJldHVybiBudWxscHRyOwogCi0g
ICAgc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVyPiBpbWFnZSA9IEltYWdlQnVmZmVyOjpjcmVh
dGUoaW1hZ2VTaXplLCAxLCBjb2xvclNwYWNlLCByZW5kZXJpbmdNb2RlKTsKLSAgICBpZiAoIWlt
YWdlKQotICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgYXV0byBpbWFnZUJ1ZmZlciA9IEltYWdl
QnVmZmVyOjpjcmVhdGUoY2xhbXBlZFNpemUsIDEsIGNvbG9yU3BhY2UsIHJlbmRlcmluZ01vZGUp
OworICAgIGlmICghaW1hZ2VCdWZmZXIpCisgICAgICAgIHJldHVybiBudWxscHRyOwogCi0gICAg
R3JhcGhpY3NDb250ZXh0KiBpbWFnZUNvbnRleHQgPSBpbWFnZS0+Y29udGV4dCgpOworICAgIEdy
YXBoaWNzQ29udGV4dCogaW1hZ2VDb250ZXh0ID0gaW1hZ2VCdWZmZXItPmNvbnRleHQoKTsKICAg
ICBBU1NFUlQoaW1hZ2VDb250ZXh0KTsKIAogICAgIC8vIENvbXBlbnNhdGUgcm91bmRpbmcgZWZm
ZWN0cywgYXMgdGhlIGFic29sdXRlIHRhcmdldCByZWN0IGlzIHVzaW5nIGZsb2F0aW5nLXBvaW50
IG51bWJlcnMgYW5kIHRoZSBpbWFnZSBidWZmZXIgc2l6ZSBpcyBpbnRlZ2VyLgotICAgIGltYWdl
Q29udGV4dC0+c2NhbGUoRmxvYXRTaXplKHVuY2xhbXBlZEltYWdlU2l6ZS53aWR0aCgpIC8gYWJz
b2x1dGVUYXJnZXRSZWN0LndpZHRoKCksIHVuY2xhbXBlZEltYWdlU2l6ZS5oZWlnaHQoKSAvIGFi
c29sdXRlVGFyZ2V0UmVjdC5oZWlnaHQoKSkpOworICAgIGltYWdlQ29udGV4dC0+c2NhbGUoRmxv
YXRTaXplKHVuY2xhbXBlZFNpemUud2lkdGgoKSAvIHRhcmdldFJlY3Qud2lkdGgoKSwgdW5jbGFt
cGVkU2l6ZS5oZWlnaHQoKSAvIHRhcmdldFJlY3QuaGVpZ2h0KCkpKTsKIAotICAgIGltYWdlQnVm
ZmVyID0gV1RGOjptb3ZlKGltYWdlKTsKLSAgICByZXR1cm4gdHJ1ZTsKKyAgICByZXR1cm4gaW1h
Z2VCdWZmZXI7CiB9CiAKIHZvaWQgU1ZHUmVuZGVyaW5nQ29udGV4dDo6cmVuZGVyU3VidHJlZVRv
SW1hZ2VCdWZmZXIoSW1hZ2VCdWZmZXIqIGltYWdlLCBSZW5kZXJFbGVtZW50JiBpdGVtLCBjb25z
dCBBZmZpbmVUcmFuc2Zvcm0mIHN1YnRyZWVDb250ZW50VHJhbnNmb3JtYXRpb24pCkBAIC0zMjIs
MTggKzMxOSw2IEBAIHZvaWQgU1ZHUmVuZGVyaW5nQ29udGV4dDo6Y2xpcFRvSW1hZ2VCdWYKICAg
ICAgICAgaW1hZ2VCdWZmZXIucmVzZXQoKTsKIH0KIAotRmxvYXRSZWN0IFNWR1JlbmRlcmluZ0Nv
bnRleHQ6OmNsYW1wZWRBYnNvbHV0ZVRhcmdldFJlY3QoY29uc3QgRmxvYXRSZWN0JiBhYnNvbHV0
ZVRhcmdldFJlY3QpCi17Ci0gICAgY29uc3QgRmxvYXRTaXplIG1heEltYWdlQnVmZmVyU2l6ZShr
TWF4SW1hZ2VCdWZmZXJTaXplLCBrTWF4SW1hZ2VCdWZmZXJTaXplKTsKLSAgICByZXR1cm4gRmxv
YXRSZWN0KGFic29sdXRlVGFyZ2V0UmVjdC5sb2NhdGlvbigpLCBhYnNvbHV0ZVRhcmdldFJlY3Qu
c2l6ZSgpLnNocnVua1RvKG1heEltYWdlQnVmZmVyU2l6ZSkpOwotfQotCi1JbnRTaXplIFNWR1Jl
bmRlcmluZ0NvbnRleHQ6OmNsYW1wZWRBYnNvbHV0ZVNpemUoY29uc3QgSW50U2l6ZSYgYWJzb2x1
dGVTaXplKQotewotICAgIGNvbnN0IEludFNpemUgbWF4SW1hZ2VCdWZmZXJTaXplKGtNYXhJbWFn
ZUJ1ZmZlclNpemUsIGtNYXhJbWFnZUJ1ZmZlclNpemUpOwotICAgIHJldHVybiBhYnNvbHV0ZVNp
emUuc2hydW5rVG8obWF4SW1hZ2VCdWZmZXJTaXplKTsKLX0KLQogdm9pZCBTVkdSZW5kZXJpbmdD
b250ZXh0OjpjbGVhcjJEUm90YXRpb24oQWZmaW5lVHJhbnNmb3JtJiB0cmFuc2Zvcm0pCiB7CiAg
ICAgQWZmaW5lVHJhbnNmb3JtOjpEZWNvbXBvc2VkVHlwZSBkZWNvbXBvc2l0aW9uOwpJbmRleDog
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdSZW5kZXJpbmdDb250ZXh0LmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdSZW5kZXJpbmdDb250ZXh0
LmgJKHJldmlzaW9uIDE4Mzc1NikKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZH
UmVuZGVyaW5nQ29udGV4dC5oCSh3b3JraW5nIGNvcHkpCkBAIC03MSwxNyArNzEsMTQgQEAgcHVi
bGljOgogICAgIHZvaWQgcHJlcGFyZVRvUmVuZGVyU1ZHQ29udGVudChSZW5kZXJFbGVtZW50Jiwg
UGFpbnRJbmZvJiwgTmVlZHNHcmFwaGljc0NvbnRleHRTYXZlID0gRG9udFNhdmVHcmFwaGljc0Nv
bnRleHQpOwogICAgIGJvb2wgaXNSZW5kZXJpbmdQcmVwYXJlZCgpIGNvbnN0IHsgcmV0dXJuIG1f
cmVuZGVyaW5nRmxhZ3MgJiBSZW5kZXJpbmdQcmVwYXJlZDsgfQogCi0gICAgc3RhdGljIGJvb2wg
Y3JlYXRlSW1hZ2VCdWZmZXIoY29uc3QgRmxvYXRSZWN0JiBwYWludFJlY3QsIGNvbnN0IEFmZmlu
ZVRyYW5zZm9ybSYgYWJzb2x1dGVUcmFuc2Zvcm0sIHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZl
cj4mLCBDb2xvclNwYWNlLCBSZW5kZXJpbmdNb2RlKTsKLSAgICAvLyBQYXR0ZXJucyBuZWVkIGEg
ZGlmZmVyZW50IGZsb2F0LXRvLWludGVnZXIgY29vcmRpbmF0ZSBtYXBwaW5nLgotICAgIHN0YXRp
YyBib29sIGNyZWF0ZUltYWdlQnVmZmVyRm9yUGF0dGVybihjb25zdCBGbG9hdFJlY3QmIGFic29s
dXRlVGFyZ2V0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBjbGFtcGVkQWJzb2x1dGVUYXJnZXRSZWN0
LCBzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXI+JiwgQ29sb3JTcGFjZSwgUmVuZGVyaW5nTW9k
ZSk7CisgICAgc3RhdGljIHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlcj4gY3JlYXRlSW1hZ2VC
dWZmZXIoY29uc3QgRmxvYXRSZWN0JiB0YXJnZXRSZWN0LCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0m
IGFic29sdXRlVHJhbnNmb3JtLCBDb2xvclNwYWNlLCBSZW5kZXJpbmdNb2RlKTsKKyAgICBzdGF0
aWMgc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVyPiBjcmVhdGVJbWFnZUJ1ZmZlcihjb25zdCBG
bG9hdFJlY3QmIHRhcmdldFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgY2xhbXBlZFJlY3QsIENvbG9y
U3BhY2UsIFJlbmRlcmluZ01vZGUpOwogCiAgICAgc3RhdGljIHZvaWQgcmVuZGVyU3VidHJlZVRv
SW1hZ2VCdWZmZXIoSW1hZ2VCdWZmZXIqLCBSZW5kZXJFbGVtZW50JiwgY29uc3QgQWZmaW5lVHJh
bnNmb3JtJik7CiAgICAgc3RhdGljIHZvaWQgY2xpcFRvSW1hZ2VCdWZmZXIoR3JhcGhpY3NDb250
ZXh0KiwgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiBhYnNvbHV0ZVRyYW5zZm9ybSwgY29uc3QgRmxv
YXRSZWN0JiB0YXJnZXRSZWN0LCBzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXI+JiwgYm9vbCBz
YWZlVG9DbGVhcik7CiAKICAgICBzdGF0aWMgZmxvYXQgY2FsY3VsYXRlU2NyZWVuRm9udFNpemVT
Y2FsaW5nRmFjdG9yKGNvbnN0IFJlbmRlck9iamVjdCYpOwotICAgIHN0YXRpYyB2b2lkIGNhbGN1
bGF0ZVRyYW5zZm9ybWF0aW9uVG9PdXRlcm1vc3RDb29yZGluYXRlU3lzdGVtKGNvbnN0IFJlbmRl
ck9iamVjdCYsIEFmZmluZVRyYW5zZm9ybSYgYWJzb2x1dGVUcmFuc2Zvcm0pOwotICAgIHN0YXRp
YyBJbnRTaXplIGNsYW1wZWRBYnNvbHV0ZVNpemUoY29uc3QgSW50U2l6ZSYpOwotICAgIHN0YXRp
YyBGbG9hdFJlY3QgY2xhbXBlZEFic29sdXRlVGFyZ2V0UmVjdChjb25zdCBGbG9hdFJlY3QmIGFi
c29sdXRlVGFyZ2V0UmVjdCk7CisgICAgc3RhdGljIEFmZmluZVRyYW5zZm9ybSBjYWxjdWxhdGVU
cmFuc2Zvcm1hdGlvblRvT3V0ZXJtb3N0Q29vcmRpbmF0ZVN5c3RlbShjb25zdCBSZW5kZXJPYmpl
Y3QmKTsKICAgICBzdGF0aWMgdm9pZCBjbGVhcjJEUm90YXRpb24oQWZmaW5lVHJhbnNmb3JtJik7
CiAKICAgICBzdGF0aWMgSW50UmVjdCBjYWxjdWxhdGVJbWFnZUJ1ZmZlclJlY3QoY29uc3QgRmxv
YXRSZWN0JiB0YXJnZXRSZWN0LCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIGFic29sdXRlVHJhbnNm
b3JtKQpJbmRleDogTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRl
c3RzL0NoYW5nZUxvZwkocmV2aXNpb24gMTgzODk5KQorKysgTGF5b3V0VGVzdHMvQ2hhbmdlTG9n
CSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTUgQEAKKzIwMTUtMDUtMDYgIFNhaWQgQWJvdS1I
YWxsYXdhICA8c2Fib3VoYWxsYXdhQGFwcGxlLmNvbT4KKworICAgICAgICBBcHBseWluZyBhIGZp
bHRlciBvbiBhbiBTVkcgZWxlbWVudCwgd2hpY2ggaXMgbGFyZ2VyIHRoYW4gNDA5NiBwaXhlbHMs
IGNhdXNlcyB0aGlzIGVsZW1lbnQgdG8gYmUgcmVuZGVyZWQgc2hpZnRlZCB0byB0aGUgbGVmdAor
ICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTQ0MzM1CisK
KyAgICAgICAgUmV2aWV3ZWQgYnkgRGFyaW4gQWRsZXIuCisKKyAgICAgICAgKiBzdmcvZmlsdGVy
cy9iaWctc2l6ZWQtb2ZmLXZpZXdwb3J0LWZpbHRlci1leHBlY3RlZC5zdmc6IEFkZGVkLgorICAg
ICAgICAqIHN2Zy9maWx0ZXJzL2JpZy1zaXplZC1vZmYtdmlld3BvcnQtZmlsdGVyLnN2ZzogQWRk
ZWQuCisgICAgICAgIEVuc3VyZSB3aGVuIGFwcGx5aW5nIGEgZmlsdGVyIG9uIGEgbGFyZ2UgU1ZH
IGVsZW1lbnQsIHRoZSB2aWV3cG9ydCBvZiB0aGUKKyAgICAgICAgU1ZHIGluY2x1ZGVzIHRoZSBj
b3JyZWN0IGRyYXdpbmcgcGFydCBvZiB0aGlzIGVsZW1lbnQuCisKIDIwMTUtMDUtMDYgIEpvbiBM
ZWUgIDxqb25sZWVAYXBwbGUuY29tPgogCiAgICAgICAgIEV4cG9zZSBtb3JlIGZvbnQgd2VpZ2h0
cyBmb3IgLWFwcGxlLXN5c3RlbQpJbmRleDogTGF5b3V0VGVzdHMvc3ZnL2ZpbHRlcnMvYmlnLXNp
emVkLW9mZi12aWV3cG9ydC1maWx0ZXItZXhwZWN0ZWQuc3ZnCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91
dFRlc3RzL3N2Zy9maWx0ZXJzL2JpZy1zaXplZC1vZmYtdmlld3BvcnQtZmlsdGVyLWV4cGVjdGVk
LnN2ZwkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL3N2Zy9maWx0ZXJzL2JpZy1zaXplZC1v
ZmYtdmlld3BvcnQtZmlsdGVyLWV4cGVjdGVkLnN2Zwkod29ya2luZyBjb3B5KQpAQCAtMCwwICsx
LDEwIEBACis8c3ZnIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgdmlld0JveD0i
MCAwIDEwMDAgNTAwIj4KKyAgPGZpbHRlciBpZD0ic2F0dXJhdGUtYmFjayI+CisgICAgPGZlQ29s
b3JNYXRyaXggaW49IlNvdXJjZUdyYXBoaWMiIHR5cGU9InNhdHVyYXRlIiB2YWx1ZXM9IjEiLz4K
KyAgPC9maWx0ZXI+CisgIDxnIGZpbHRlcj0idXJsKCNzYXR1cmF0ZS1iYWNrKSI+CisgICAgPHJl
Y3QgeD0iLTUwMCIgeT0iMCIgd2lkdGg9Ijk1MCIgaGVpZ2h0PSIxMDAlIiBmaWxsPSJncmVlbiIv
PgorICAgIDxyZWN0IHg9IjU1MCIgeT0iMCIgd2lkdGg9Ijk1MCIgaGVpZ2h0PSIxMDAlIiBmaWxs
PSJncmVlbiIvPgorICA8L2c+CisgIDxyZWN0IHg9IjQ1MCIgeT0iMCIgd2lkdGg9IjEwMCIgaGVp
Z2h0PSIxMDAlIiBmaWxsPSJub25lIiBzdHJva2U9IndoaXRlIiBzdHJva2Utd2lkdGg9IjEwIi8+
Cis8L3N2Zz4KSW5kZXg6IExheW91dFRlc3RzL3N2Zy9maWx0ZXJzL2JpZy1zaXplZC1vZmYtdmll
d3BvcnQtZmlsdGVyLnN2Zwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9zdmcvZmlsdGVycy9i
aWctc2l6ZWQtb2ZmLXZpZXdwb3J0LWZpbHRlci5zdmcJKHJldmlzaW9uIDApCisrKyBMYXlvdXRU
ZXN0cy9zdmcvZmlsdGVycy9iaWctc2l6ZWQtb2ZmLXZpZXdwb3J0LWZpbHRlci5zdmcJKHdvcmtp
bmcgY29weSkKQEAgLTAsMCArMSwxMSBAQAorPHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcv
MjAwMC9zdmciIHZpZXdCb3g9IjAgMCAxMDAwIDUwMCI+CisgIDxmaWx0ZXIgaWQ9InNhdHVyYXRl
LWJhY2siPgorICAgIDxmZUNvbG9yTWF0cml4IGluPSJTb3VyY2VHcmFwaGljIiB0eXBlPSJzYXR1
cmF0ZSIgdmFsdWVzPSIxIi8+CisgIDwvZmlsdGVyPgorICA8ZyBmaWx0ZXI9InVybCgjc2F0dXJh
dGUtYmFjaykiPgorICAgIDxyZWN0IHg9Ii0zNTAwIiB5PSIwIiB3aWR0aD0iMzk1MCIgaGVpZ2h0
PSIxMDAlIiBmaWxsPSJncmVlbiIvPgorICAgIDxyZWN0IHg9IjU1MCIgeT0iMCIgd2lkdGg9IjM5
NTAiIGhlaWdodD0iMTAwJSIgZmlsbD0iZ3JlZW4iLz4KKyAgPC9nPgorICA8IS0tIEVuc3VyZSB0
aGUgZWRnZXMgb2YgdGhlIHJlY3RhbmdsZXMgYXJlIHNoYXJwIGFmdGVyIGNsYW1waW5nIHRoZSBm
aWx0ZXIgaW1hZ2UgYW5kIHNjYWxpbmcgaXQgdXAgLS0+CisgIDxyZWN0IHg9IjQ1MCIgeT0iMCIg
d2lkdGg9IjEwMCIgaGVpZ2h0PSIxMDAlIiBmaWxsPSJub25lIiBzdHJva2U9IndoaXRlIiBzdHJv
a2Utd2lkdGg9IjEwIi8+Cis8L3N2Zz4K
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>252629</attachid>
            <date>2015-05-07 14:35:35 -0700</date>
            <delta_ts>2015-05-07 15:48:06 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-144335-20150507143418.patch</filename>
            <type>text/plain</type>
            <size>43858</size>
            <attacher name="Said Abou-Hallawa">sabouhallawa</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDE4Mzk0MCkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDEwOSBAQAorMjAxNS0wNS0wNyAgU2FpZCBB
Ym91LUhhbGxhd2EgIDxzYWJvdWhhbGxhd2FAYXBwbGUuY29tPgorCisgICAgICAgIEFwcGx5aW5n
IGEgZmlsdGVyIG9uIGFuIFNWRyBlbGVtZW50LCB3aGljaCBpcyBsYXJnZXIgdGhhbiA0MDk2IHBp
eGVscywgY2F1c2VzIHRoaXMgZWxlbWVudCB0byBiZSByZW5kZXJlZCBzaGlmdGVkIHRvIHRoZSBs
ZWZ0CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNDQz
MzUKKworICAgICAgICBSZXZpZXdlZCBieSBEYXJpbiBBZGxlci4KKworICAgICAgICBXaGVuIHRo
ZSBTVkcgZWxlbWVudCBpcyBsYXJnZXIgdGhhbiA0MDk2eDQwOTYgcGl4ZWxzIGFuZCBpdCBoYXMg
YSBmaWx0ZXIsCisgICAgICAgIGEgY2xpcHBlciBvciBhIG1hc2tlciwgdGhlIEltYWdlQnVmZmVy
IHdoaWNoIGlzIGNyZWF0ZWQgZm9yIGRyYXdpbmcgdGhlCisgICAgICAgIHNvdXJjZUdyYXBoaWNC
dWZmZXIgaGFzIHRvIGJlIGNsYW1wZWQgdG8gdGhpcyBzaXplLiBUaGUgcmVhc29uIGZvciB0aGlz
CisgICAgICAgIGNsYW1waW5nIGlzIHRoZSBGaWx0ZXJFZmZlY3Qgc2ltcGx5IGlnbm9yZXMgcHJv
Y2Vzc2luZyBhbnkgSW1hZ2VCdWZmZXIKKyAgICAgICAgbGFyZ2VyIHRoYW4gdGhpcyBzaXplLgor
ICAgICAgICAKKyAgICAgICAgVGhlIGJ1ZyB3YXMgaGFwcGVuaW5nIGJlY2F1c2Ugd2UgZGlkIG5v
dCBwcm9wYWdhdGUgdGhlIGNsYW1waW5nIGxvZ2ljIHRvCisgICAgICAgIHRoZSBGaWx0ZXJFZmZl
Y3QuIFRoZSBGaWx0ZXJFZmZlY3QgcmVzdWx0IEltYWdlQnVmZmVyIHdhcyBub3QgY2xhbXBlZCBh
cworICAgICAgICB3aGF0IHdlIGRvIGZvciBkcmF3aW5nIHRoZSBzb3VyY2VHcmFwaGljQnVmZmVy
LiBJZiBvbmx5IHRoZSBkZXN0aW5hdGlvbgorICAgICAgICBwb2ludCBpcyBzcGVjaWZpZWQsIHRo
ZSBHcmFwaGljc0NvbnRleHQ6OmRyYXdJbWFnZUJ1ZmZlcigpIGFzc3VtZXMgdGhlCisgICAgICAg
IHNvdXJjZSBhbmQgdGhlIGRlc3RpbmF0aW9uIGltYWdlcyBoYXZlIHRoZSBzYW1lIHNpemUgd2hp
Y2ggaXMgbm90IHRydWUKKyAgICAgICAgd2l0aCB0aGUgY2xhbXBpbmcuCisgICAgICAgIAorICAg
ICAgICBUaGUgZml4IGlzIHRvIGFkZCB0aGUgY2xhbXBpbmcgbG9naWMgdG8gdGhlIEZpbHRlckVm
ZmVjdC4gVHdvIHBsYWNlcyB3ZQorICAgICAgICBuZWVkIHRvIGNoYW5nZS4gKDEpIEZpbHRlckVm
ZmVjdDo6Y3JlYXRlSW1hZ2VCdWZmZXJSZXN1bHQoKSBoYXMgdG8gYXBwbHkKKyAgICAgICAgdGhl
IHNhbWUgY2xhbXBpbmcgd2UgZG8gaW4gU1ZHUmVuZGVyaW5nQ29udGV4dDo6Y3JlYXRlSW1hZ2VC
dWZmZXIoKS4gKDIpCisgICAgICAgIEZpbHRlckVmZmVjdDo6ZHJhd2luZ1JlZ2lvbk9mSW5wdXRJ
bWFnZSgpIGhhcyB0byBjb25zaWRlciB0aGUgY2xhbXBpbmcgCisgICAgICAgIHdoZW4gbWFwcGlu
ZyBmcm9tIGFic29sdXRlIGNvb3JkaW5hdGVzIHRvIHRoZSBJbWFnZUJ1ZmZlciBjb29yZGluYXRl
cy4KKyAgICAgICAgCisgICAgICAgIFRlc3RzOiBzdmcvZmlsdGVycy9iaWctc2l6ZWQtb2ZmLXZp
ZXdwb3J0LWZpbHRlci5zdmcKKworICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0ltYWdlQnVm
ZmVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyOjppc1NpemVDbGFtcGVkKToK
KyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyOjpjbGFtcGVkU2l6ZSk6CisgICAgICAgIChX
ZWJDb3JlOjpJbWFnZUJ1ZmZlcjo6Y2xhbXBlZFJlY3QpOgorICAgICAgICAqIHBsYXRmb3JtL2dy
YXBoaWNzL0ltYWdlQnVmZmVyLmg6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlcjo6c2V0
U3BhY2VTaXplKTogTW92ZSBhbGwgdGhlIGNsYW1waW5nIGhlbHBlciBtZXRob2RzCisgICAgICAg
IGZyb20gU1ZHUmVuZGVyaW5nQ29udGV4dCBhbmQgUmVuZGVyU1ZHUmVzb3VyY2VGaWx0ZXIgdG8g
dGhlIEltYWdlQnVmZmVyLgorCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9G
RUNvbG9yTWF0cml4LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZFQ29sb3JNYXRyaXg6OnBsYXRm
b3JtQXBwbHlTb2Z0d2FyZSk6IFVzZSBsb2dpY2FsU2l6ZSgpIG9mIHRoZQorICAgICAgICByZXN1
bHQgaW1hZ2UgaW5zdGVhZCBvZiB1c2luZyBhYnNvbHV0ZVBhaW50UmVjdCgpLiBUaGUgbGF0ZXIg
cmV0dXJucyB0aGUKKyAgICAgICAgcmVjdGFuZ2xlIG9mIHRoZSBlbGVtZW50IHdpdGhvdXQgY2xh
bXBpbmcuCisgICAgICAgIAorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVU
aWxlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZFVGlsZTo6cGxhdGZvcm1BcHBseVNvZnR3YXJl
KToKKyAgICAgICAgKiByZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291cmNlQ2xpcHBlci5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJTVkdSZXNvdXJjZUNsaXBwZXI6OmFwcGx5Q2xpcHBp
bmdUb0NvbnRleHQpOgorICAgICAgICAqIHJlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VG
aWx0ZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU1ZHUmVzb3VyY2VGaWx0ZXI6OmFw
cGx5UmVzb3VyY2UpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU1ZHUmVzb3VyY2VGaWx0ZXI6
OmZpdHNJbk1heGltdW1JbWFnZVNpemUpOiBEZWxldGVkLgorICAgICAgICAqIHJlbmRlcmluZy9z
dmcvUmVuZGVyU1ZHUmVzb3VyY2VGaWx0ZXIuaDoKKyAgICAgICAgKiByZW5kZXJpbmcvc3ZnL1Jl
bmRlclNWR1Jlc291cmNlR3JhZGllbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Y3JlYXRlTWFz
a0FuZFN3YXBDb250ZXh0Rm9yVGV4dEdyYWRpZW50KToKKyAgICAgICAgKFdlYkNvcmU6OmNsaXBU
b1RleHRNYXNrKToKKyAgICAgICAgKiByZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291cmNlTWFz
a2VyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclNWR1Jlc291cmNlTWFza2VyOjphcHBs
eVNWR01hc2spOgorICAgICAgICAqIHJlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VQYXR0
ZXJuLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclNWR1Jlc291cmNlUGF0dGVybjo6YnVp
bGRQYXR0ZXJuKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclNWR1Jlc291cmNlUGF0dGVybjo6
Y3JlYXRlVGlsZUltYWdlKTogTWFrZSB0aGUgbW9kaWZpY2F0aW9ucworICAgICAgICB3aGljaCBh
cmUgbmVlZGVkIGJlY2F1c2Ugb2YgbW92aW5nIHRoZSBjbGFtcGluZyBoZWxwZXIgbWV0aG9kcyB0
byBJbWFnZUJ1ZmZlcgorICAgICAgICBhbmQgYmVjYXVzZSBvZiBjaGFuZ2luZyB0aGUgcHJvdG90
eXBlIG9mIFNWR1JlbmRlcmluZ0NvbnRleHQgbWV0aG9kcy4KKworICAgICAgICAqIHBsYXRmb3Jt
L2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyRWZmZWN0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZp
bHRlckVmZmVjdDo6ZHJhd2luZ1JlZ2lvbk9mSW5wdXRJbWFnZSk6IENvbnNpZGVyIHRoZSBjbGFt
cGluZworICAgICAgICB3aGVuIG1hcHBpbmcgZnJvbSBhYnNvbHV0ZSBjb29yZGluYXRlcyB0byB0
aGUgSW1hZ2VCdWZmZXIgY29vcmRpbmF0ZXMuCisKKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVm
ZmVjdDo6Y3JlYXRlSW1hZ2VCdWZmZXJSZXN1bHQpOiBBcHBseSB0aGUgc2FtZSBjbGFtcGluZwor
ICAgICAgICB3ZSBkbyBpbiBTVkdSZW5kZXJpbmdDb250ZXh0OjpjcmVhdGVJbWFnZUJ1ZmZlcigp
IHdoZW4gY3JlYXRpbmcgdGhlIAorICAgICAgICBGaWx0ZXJFZmZlY3QgcmVzdWx0IEltYWdlQnVm
ZmVyLgorICAgICAgICAKKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6YXBwbHkpOgor
ICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0Ojphc1VubXVsdGlwbGllZEltYWdlKToKKyAg
ICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6YXNQcmVtdWx0aXBsaWVkSW1hZ2UpOgorICAg
ICAgICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0Ojpjb3B5VW5tdWx0aXBsaWVkSW1hZ2UpOgorICAg
ICAgICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0Ojpjb3B5UHJlbXVsdGlwbGllZEltYWdlKToKKyAg
ICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6Y3JlYXRlVW5tdWx0aXBsaWVkSW1hZ2VSZXN1
bHQpOgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0OjpjcmVhdGVQcmVtdWx0aXBsaWVk
SW1hZ2VSZXN1bHQpOgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0OjptYXhGaWx0ZXJB
cmVhKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6aXNGaWx0ZXJT
aXplVmFsaWQpOiBEZWxldGVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMv
RmlsdGVyRWZmZWN0Lmg6IFVzZSB0aGUgbmV3IEltYWdlQnVmZmVyIGNsYW1waW5nCisgICAgICAg
IGhlbHBlciBtZXRob2RzIGFuZCBkZWxldGUgdGhlIGxvY2FsIG9uZXMuCisKKyAgICAgICAgKiBw
bGF0Zm9ybS9ncmFwaGljcy90cmFuc2Zvcm1zL0FmZmluZVRyYW5zZm9ybS5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpBZmZpbmVUcmFuc2Zvcm06OnNjYWxlTm9uVW5pZm9ybSk6CisgICAgICAgIChX
ZWJDb3JlOjpBZmZpbmVUcmFuc2Zvcm06OnNjYWxlKToKKyAgICAgICAgKFdlYkNvcmU6OkFmZmlu
ZVRyYW5zZm9ybTo6dHJhbnNsYXRlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy90cmFu
c2Zvcm1zL0FmZmluZVRyYW5zZm9ybS5oOiBBZGQgbmV3IHNjYWxlIGFuZCB0cmFuc2xhdGUKKyAg
ICAgICAgb3ZlcmxvYWRzIHRvIEFmZmluZVRyYW5zZm9ybS4KKyAgICAgICAgCisgICAgICAgICog
cmVuZGVyaW5nL0ZpbHRlckVmZmVjdFJlbmRlcmVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZp
bHRlckVmZmVjdFJlbmRlcmVyOjp1cGRhdGVCYWNraW5nU3RvcmVSZWN0KToKKyAgICAgICAgKFdl
YkNvcmU6OkZpbHRlckVmZmVjdFJlbmRlcmVySGVscGVyOjpiZWdpbkZpbHRlckVmZmVjdCk6IENv
ZGUgY2xlYW4gdXAuCisgICAgICAgIAorICAgICAgICAqIHJlbmRlcmluZy9zdmcvU1ZHUmVuZGVy
aW5nQ29udGV4dC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTVkdSZW5kZXJpbmdDb250ZXh0Ojpj
YWxjdWxhdGVTY3JlZW5Gb250U2l6ZVNjYWxpbmdGYWN0b3IpOgorICAgICAgICAoV2ViQ29yZTo6
U1ZHUmVuZGVyaW5nQ29udGV4dDo6Y2FsY3VsYXRlVHJhbnNmb3JtYXRpb25Ub091dGVybW9zdENv
b3JkaW5hdGVTeXN0ZW0pOgorICAgICAgICBSZXR1cm4gdGhlIEFmZmluZVRyYW5zZm9ybSBpbnN0
ZWFkIG9mIHBhc3NpbmcgaXQgdGhyb3VnaCB0aGUgcmVmZXJlbmNlIG9mCisgICAgICAgIGFuIGFy
Z3VtZW50LgorICAgICAgICAKKyAgICAgICAgKFdlYkNvcmU6OlNWR1JlbmRlcmluZ0NvbnRleHQ6
OmNyZWF0ZUltYWdlQnVmZmVyKToKKyAgICAgICAgKFdlYkNvcmU6OlNWR1JlbmRlcmluZ0NvbnRl
eHQ6OmNyZWF0ZUltYWdlQnVmZmVyRm9yUGF0dGVybik6IERlbGV0ZWQuCisgICAgICAgIENvZGUg
Y2xlYW4gdXAgYW5kIG1ldGhvZCByZW5hbWUuCisgICAgICAgIAorICAgICAgICAoV2ViQ29yZTo6
U1ZHUmVuZGVyaW5nQ29udGV4dDo6Y2xhbXBlZEFic29sdXRlVGFyZ2V0UmVjdCk6IERlbGV0ZWQu
CisgICAgICAgIChXZWJDb3JlOjpTVkdSZW5kZXJpbmdDb250ZXh0OjpjbGFtcGVkQWJzb2x1dGVT
aXplKTogRGVsZXRlZC4KKyAgICAgICAgKiByZW5kZXJpbmcvc3ZnL1NWR1JlbmRlcmluZ0NvbnRl
eHQuaDogTW92ZSB0aGUgY2xhbXBpbmcgaGVscGVyIG1ldGhvZHMgdG8KKyAgICAgICAgdGhlIElt
YWdlQnVmZmVyIGNsYXNzLgorICAgIAogMjAxNS0wNS0wNSAgTXlsZXMgQy4gTWF4ZmllbGQgIDxt
bWF4ZmllbGRAYXBwbGUuY29tPgogCiAgICAgICAgIFJldmVydCAiSW50cm9kdWNpbmcgdGhlIFBs
YXRmb3JtIEFic3RyYWN0aW9uIExheWVyIChQQUwpIgpJbmRleDogU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvSW1hZ2VCdWZmZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlQnVmZmVyLmNwcAkocmV2aXNpb24gMTgzNzU2KQor
KysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VCdWZmZXIuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0zMyw2ICszMyw1NiBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKK3N0
YXRpYyBjb25zdCBmbG9hdCBNYXhDbGFtcGVkTGVuZ3RoID0gNDA5NjsKK3N0YXRpYyBjb25zdCBm
bG9hdCBNYXhDbGFtcGVkQXJlYSA9IE1heENsYW1wZWRMZW5ndGggKiBNYXhDbGFtcGVkTGVuZ3Ro
OworCitib29sIEltYWdlQnVmZmVyOjppc1NpemVDbGFtcGVkKGNvbnN0IEZsb2F0U2l6ZSYgc2l6
ZSkKK3sKKyAgICBpZiAoc2l6ZS53aWR0aCgpIDwgMCAmJiBzaXplLmhlaWdodCgpIDwgMCkKKyAg
ICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgaWYgKHNpemUuaXNFbXB0eSgpKQorICAgICAgICBy
ZXR1cm4gdHJ1ZTsKKworICAgIHJldHVybiBmbG9vcmYoc2l6ZS5oZWlnaHQoKSkgKiBmbG9vcmYo
c2l6ZS53aWR0aCgpKSA8PSBNYXhDbGFtcGVkQXJlYTsKK30KKworYm9vbCBJbWFnZUJ1ZmZlcjo6
aXNTaXplQ2xhbXBlZChjb25zdCBGbG9hdFNpemUmIHNpemUsIEZsb2F0U2l6ZSYgc2NhbGUpCit7
CisgICAgRmxvYXRTaXplIHNjYWxlZFNpemUoc2l6ZSk7CisgICAgc2NhbGVkU2l6ZS5zY2FsZShz
Y2FsZS53aWR0aCgpLCBzY2FsZS5oZWlnaHQoKSk7CisKKyAgICBpZiAoaXNTaXplQ2xhbXBlZChz
Y2FsZWRTaXplKSkKKyAgICAgICAgcmV0dXJuIHRydWU7CisKKyAgICAvLyBUaGUgYXJlYSBvZiBz
Y2FsZWQgc2l6ZSBpcyBiaWdnZXIgdGhhbiB0aGUgdXBwZXIgbGltaXQsIGFkanVzdCB0aGUgc2Nh
bGUgdG8gZml0LgorICAgIHNjYWxlLnNjYWxlKHNxcnRmKE1heENsYW1wZWRBcmVhIC8gKHNjYWxl
ZFNpemUud2lkdGgoKSAqIHNjYWxlZFNpemUuaGVpZ2h0KCkpKSk7CisgICAgQVNTRVJUKGlzU2l6
ZUNsYW1wZWQoc2l6ZSwgc2NhbGUpKTsKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK0Zsb2F0U2l6
ZSBJbWFnZUJ1ZmZlcjo6Y2xhbXBlZFNpemUoY29uc3QgRmxvYXRTaXplJiBzaXplKQoreworICAg
IHJldHVybiBzaXplLnNocnVua1RvKEZsb2F0U2l6ZShNYXhDbGFtcGVkTGVuZ3RoLCBNYXhDbGFt
cGVkTGVuZ3RoKSk7Cit9CisKK0Zsb2F0U2l6ZSBJbWFnZUJ1ZmZlcjo6Y2xhbXBlZFNpemUoY29u
c3QgRmxvYXRTaXplJiBzaXplLCBGbG9hdFNpemUmIHNjYWxlKQoreworICAgIGlmIChzaXplLmlz
RW1wdHkoKSkKKyAgICAgICAgcmV0dXJuIHNpemU7CisKKyAgICBGbG9hdFNpemUgY2xhbXBlZFNp
emUgPSBJbWFnZUJ1ZmZlcjo6Y2xhbXBlZFNpemUoc2l6ZSk7CisgICAgc2NhbGUgPSBGbG9hdFNp
emUoY2xhbXBlZFNpemUud2lkdGgoKSAvIHNpemUud2lkdGgoKSwgY2xhbXBlZFNpemUuaGVpZ2h0
KCkgLyBzaXplLmhlaWdodCgpKTsKKyAgICBBU1NFUlQoaXNTaXplQ2xhbXBlZChjbGFtcGVkU2l6
ZSkpOworICAgIEFTU0VSVChpc1NpemVDbGFtcGVkKHNpemUsIHNjYWxlKSk7CisgICAgcmV0dXJu
IGNsYW1wZWRTaXplOworfQorCitGbG9hdFJlY3QgSW1hZ2VCdWZmZXI6OmNsYW1wZWRSZWN0KGNv
bnN0IEZsb2F0UmVjdCYgcmVjdCkKK3sKKyAgICByZXR1cm4gRmxvYXRSZWN0KHJlY3QubG9jYXRp
b24oKSwgY2xhbXBlZFNpemUocmVjdC5zaXplKCkpKTsKK30KKwogI2lmICFVU0UoQ0cpCiB2b2lk
IEltYWdlQnVmZmVyOjp0cmFuc2Zvcm1Db2xvclNwYWNlKENvbG9yU3BhY2Ugc3JjQ29sb3JTcGFj
ZSwgQ29sb3JTcGFjZSBkc3RDb2xvclNwYWNlKQogewpJbmRleDogU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvSW1hZ2VCdWZmZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFnZUJ1ZmZlci5oCShyZXZpc2lvbiAxODM3NTYpCisrKyBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFnZUJ1ZmZlci5oCSh3b3JraW5nIGNv
cHkpCkBAIC0xMjMsMTAgKzEyMywxNCBAQCBwdWJsaWM6CiAgICAgYm9vbCBjb3B5VG9QbGF0Zm9y
bVRleHR1cmUoR3JhcGhpY3NDb250ZXh0M0QmLCBQbGF0Zm9ybTNET2JqZWN0LCBHQzNEZW51bSwg
Ym9vbCwgYm9vbCk7CiAKICAgICBGbG9hdFNpemUgc3BhY2VTaXplKCkgY29uc3QgeyByZXR1cm4g
bV9zcGFjZTsgfQotICAgIHZvaWQgc2V0U3BhY2VTaXplKGNvbnN0IEZsb2F0U2l6ZSYgc3BhY2Up
Ci0gICAgewotICAgICAgICBtX3NwYWNlID0gc3BhY2U7Ci0gICAgfQorICAgIHZvaWQgc2V0U3Bh
Y2VTaXplKGNvbnN0IEZsb2F0U2l6ZSYgc3BhY2UpIHsgbV9zcGFjZSA9IHNwYWNlOyB9CisKKyAg
ICAvLyBUaGVzZSBmdW5jdGlvbnMgYXJlIHVzZWQgd2hlbiBjbGFtcGluZyB0aGUgSW1hZ2VCdWZm
ZXIgd2hpY2ggaXMgY3JlYXRlZCBmb3IgZmlsdGVyLCBtYXNrZXIgb3IgY2xpcHBlci4KKyAgICBz
dGF0aWMgYm9vbCBpc1NpemVDbGFtcGVkKGNvbnN0IEZsb2F0U2l6ZSYpOworICAgIHN0YXRpYyBi
b29sIGlzU2l6ZUNsYW1wZWQoY29uc3QgRmxvYXRTaXplJiwgRmxvYXRTaXplJiBzY2FsZSk7Cisg
ICAgc3RhdGljIEZsb2F0U2l6ZSBjbGFtcGVkU2l6ZShjb25zdCBGbG9hdFNpemUmKTsKKyAgICBz
dGF0aWMgRmxvYXRTaXplIGNsYW1wZWRTaXplKGNvbnN0IEZsb2F0U2l6ZSYsIEZsb2F0U2l6ZSYg
c2NhbGUpOworICAgIHN0YXRpYyBGbG9hdFJlY3QgY2xhbXBlZFJlY3QoY29uc3QgRmxvYXRSZWN0
Jik7CiAKIHByaXZhdGU6CiAjaWYgVVNFKENHKQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvZmlsdGVycy9GRUNvbG9yTWF0cml4LmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29sb3JNYXRyaXguY3BwCShy
ZXZpc2lvbiAxODM3NTYpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0
ZXJzL0ZFQ29sb3JNYXRyaXguY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNDksNyArMTQ5LDcgQEAg
dm9pZCBGRUNvbG9yTWF0cml4OjpwbGF0Zm9ybUFwcGx5U29mdHdhcgogCiAgICAgcmVzdWx0SW1h
Z2UtPmNvbnRleHQoKS0+ZHJhd0ltYWdlQnVmZmVyKGluLT5hc0ltYWdlQnVmZmVyKCksIENvbG9y
U3BhY2VEZXZpY2VSR0IsIGRyYXdpbmdSZWdpb25PZklucHV0SW1hZ2UoaW4tPmFic29sdXRlUGFp
bnRSZWN0KCkpKTsKIAotICAgIEludFJlY3QgaW1hZ2VSZWN0KEludFBvaW50KCksIGFic29sdXRl
UGFpbnRSZWN0KCkuc2l6ZSgpKTsKKyAgICBJbnRSZWN0IGltYWdlUmVjdChJbnRQb2ludCgpLCBy
ZXN1bHRJbWFnZS0+bG9naWNhbFNpemUoKSk7CiAgICAgUmVmUHRyPFVpbnQ4Q2xhbXBlZEFycmF5
PiBwaXhlbEFycmF5ID0gcmVzdWx0SW1hZ2UtPmdldFVubXVsdGlwbGllZEltYWdlRGF0YShpbWFn
ZVJlY3QpOwogCiAgICAgc3dpdGNoIChtX3R5cGUpIHsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVUaWxlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFVGlsZS5jcHAJKHJldmlzaW9uIDE4
Mzc1NikKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVUaWxl
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjMsOCArNjMsOCBAQCB2b2lkIEZFVGlsZTo6cGxhdGZv
cm1BcHBseVNvZnR3YXJlKCkKICAgICAgICAgdGlsZVJlY3Quc2NhbGUoZmlsdGVyLmZpbHRlclJl
c29sdXRpb24oKS53aWR0aCgpLCBmaWx0ZXIuZmlsdGVyUmVzb2x1dGlvbigpLmhlaWdodCgpKTsK
ICAgICB9CiAKLSAgICBzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXI+IHRpbGVJbWFnZTsKLSAg
ICBpZiAoIVNWR1JlbmRlcmluZ0NvbnRleHQ6OmNyZWF0ZUltYWdlQnVmZmVyRm9yUGF0dGVybih0
aWxlUmVjdCwgdGlsZVJlY3QsIHRpbGVJbWFnZSwgQ29sb3JTcGFjZURldmljZVJHQiwgZmlsdGVy
KCkucmVuZGVyaW5nTW9kZSgpKSkKKyAgICBhdXRvIHRpbGVJbWFnZSA9IFNWR1JlbmRlcmluZ0Nv
bnRleHQ6OmNyZWF0ZUltYWdlQnVmZmVyKHRpbGVSZWN0LCB0aWxlUmVjdCwgQ29sb3JTcGFjZURl
dmljZVJHQiwgZmlsdGVyKCkucmVuZGVyaW5nTW9kZSgpKTsKKyAgICBpZiAoIXRpbGVJbWFnZSkK
ICAgICAgICAgcmV0dXJuOwogCiAgICAgR3JhcGhpY3NDb250ZXh0KiB0aWxlSW1hZ2VDb250ZXh0
ID0gdGlsZUltYWdlLT5jb250ZXh0KCk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9maWx0ZXJzL0ZpbHRlckVmZmVjdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJFZmZlY3QuY3BwCShyZXZpc2lv
biAxODM3NTYpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0Zp
bHRlckVmZmVjdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM2LDggKzM2LDYgQEAKIAogbmFtZXNw
YWNlIFdlYkNvcmUgewogCi1zdGF0aWMgY29uc3QgZmxvYXQga01heEZpbHRlckFyZWEgPSA0MDk2
ICogNDA5NjsKLQogRmlsdGVyRWZmZWN0OjpGaWx0ZXJFZmZlY3QoRmlsdGVyJiBmaWx0ZXIpCiAg
ICAgOiBtX2FscGhhSW1hZ2UoZmFsc2UpCiAgICAgLCBtX2ZpbHRlcihmaWx0ZXIpCkBAIC01NSwx
OSArNTMsNiBAQCBGaWx0ZXJFZmZlY3Q6On5GaWx0ZXJFZmZlY3QoKQogewogfQogCi1mbG9hdCBG
aWx0ZXJFZmZlY3Q6Om1heEZpbHRlckFyZWEoKQotewotICAgIHJldHVybiBrTWF4RmlsdGVyQXJl
YTsKLX0KLQotYm9vbCBGaWx0ZXJFZmZlY3Q6OmlzRmlsdGVyU2l6ZVZhbGlkKGNvbnN0IEZsb2F0
UmVjdCYgcmVjdCkKLXsKLSAgICBpZiAocmVjdC53aWR0aCgpIDwgMCB8fCByZWN0LmhlaWdodCgp
IDwgMAotICAgICAgICB8fCAocmVjdC5oZWlnaHQoKSAqIHJlY3Qud2lkdGgoKSA+IGtNYXhGaWx0
ZXJBcmVhKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIHJldHVybiB0cnVlOwotfQotCiB2
b2lkIEZpbHRlckVmZmVjdDo6ZGV0ZXJtaW5lQWJzb2x1dGVQYWludFJlY3QoKQogewogICAgIG1f
YWJzb2x1dGVQYWludFJlY3QgPSBJbnRSZWN0KCk7CkBAIC05Myw4ICs3OCwxNCBAQCBJbnRSZWN0
IEZpbHRlckVmZmVjdDo6cmVxdWVzdGVkUmVnaW9uT2ZJCiAKIEZsb2F0UmVjdCBGaWx0ZXJFZmZl
Y3Q6OmRyYXdpbmdSZWdpb25PZklucHV0SW1hZ2UoY29uc3QgSW50UmVjdCYgc3JjUmVjdCkgY29u
c3QKIHsKLSAgICByZXR1cm4gRmxvYXRSZWN0KEZsb2F0UG9pbnQoc3JjUmVjdC54KCkgLSBtX2Fi
c29sdXRlUGFpbnRSZWN0LngoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcmNSZWN0
LnkoKSAtIG1fYWJzb2x1dGVQYWludFJlY3QueSgpKSwgc3JjUmVjdC5zaXplKCkpOworICAgIEFT
U0VSVChoYXNSZXN1bHQoKSk7CisKKyAgICBGbG9hdFNpemUgc2NhbGU7CisgICAgSW1hZ2VCdWZm
ZXI6OmNsYW1wZWRTaXplKG1fYWJzb2x1dGVQYWludFJlY3Quc2l6ZSgpLCBzY2FsZSk7CisKKyAg
ICBBZmZpbmVUcmFuc2Zvcm0gdHJhbnNmb3JtOworICAgIHRyYW5zZm9ybS5zY2FsZShzY2FsZSku
dHJhbnNsYXRlKC1tX2Fic29sdXRlUGFpbnRSZWN0LmxvY2F0aW9uKCkpOworICAgIHJldHVybiB0
cmFuc2Zvcm0ubWFwUmVjdChzcmNSZWN0KTsKIH0KIAogRmlsdGVyRWZmZWN0KiBGaWx0ZXJFZmZl
Y3Q6OmlucHV0RWZmZWN0KHVuc2lnbmVkIG51bWJlcikgY29uc3QKQEAgLTE1Niw3ICsxNDcsNyBA
QCB2b2lkIEZpbHRlckVmZmVjdDo6YXBwbHkoKQogICAgIGRldGVybWluZUFic29sdXRlUGFpbnRS
ZWN0KCk7CiAgICAgc2V0UmVzdWx0Q29sb3JTcGFjZShtX29wZXJhdGluZ0NvbG9yU3BhY2UpOwog
Ci0gICAgaWYgKCFpc0ZpbHRlclNpemVWYWxpZChtX2Fic29sdXRlUGFpbnRSZWN0KSkKKyAgICBp
ZiAobV9hYnNvbHV0ZVBhaW50UmVjdC5pc0VtcHR5KCkgfHwgIUltYWdlQnVmZmVyOjppc1NpemVD
bGFtcGVkKG1fYWJzb2x1dGVQYWludFJlY3Quc2l6ZSgpKSkKICAgICAgICAgcmV0dXJuOwogCiAg
ICAgaWYgKHJlcXVpcmVzVmFsaWRQcmVNdWx0aXBsaWVkUGl4ZWxzKCkpIHsKQEAgLTMyMSw4ICsz
MTIsOCBAQCBJbWFnZUJ1ZmZlciogRmlsdGVyRWZmZWN0OjpvcGVuQ0xJbWFnZVRvCiAKIFBhc3NS
ZWZQdHI8VWludDhDbGFtcGVkQXJyYXk+IEZpbHRlckVmZmVjdDo6YXNVbm11bHRpcGxpZWRJbWFn
ZShjb25zdCBJbnRSZWN0JiByZWN0KQogewotICAgIEFTU0VSVChpc0ZpbHRlclNpemVWYWxpZChy
ZWN0KSk7CiAgICAgSW50U2l6ZSBzY2FsZWRTaXplKHJlY3Quc2l6ZSgpKTsKKyAgICBBU1NFUlQo
SW1hZ2VCdWZmZXI6OmlzU2l6ZUNsYW1wZWQoc2NhbGVkU2l6ZSkpOwogICAgIHNjYWxlZFNpemUu
c2NhbGUobV9maWx0ZXIuZmlsdGVyU2NhbGUoKSk7CiAgICAgUmVmUHRyPFVpbnQ4Q2xhbXBlZEFy
cmF5PiBpbWFnZURhdGEgPSBVaW50OENsYW1wZWRBcnJheTo6Y3JlYXRlVW5pbml0aWFsaXplZChz
Y2FsZWRTaXplLndpZHRoKCkgKiBzY2FsZWRTaXplLmhlaWdodCgpICogNCk7CiAgICAgY29weVVu
bXVsdGlwbGllZEltYWdlKGltYWdlRGF0YS5nZXQoKSwgcmVjdCk7CkBAIC0zMzEsOCArMzIyLDgg
QEAgUGFzc1JlZlB0cjxVaW50OENsYW1wZWRBcnJheT4gRmlsdGVyRWZmZQogCiBQYXNzUmVmUHRy
PFVpbnQ4Q2xhbXBlZEFycmF5PiBGaWx0ZXJFZmZlY3Q6OmFzUHJlbXVsdGlwbGllZEltYWdlKGNv
bnN0IEludFJlY3QmIHJlY3QpCiB7Ci0gICAgQVNTRVJUKGlzRmlsdGVyU2l6ZVZhbGlkKHJlY3Qp
KTsKICAgICBJbnRTaXplIHNjYWxlZFNpemUocmVjdC5zaXplKCkpOworICAgIEFTU0VSVChJbWFn
ZUJ1ZmZlcjo6aXNTaXplQ2xhbXBlZChzY2FsZWRTaXplKSk7CiAgICAgc2NhbGVkU2l6ZS5zY2Fs
ZShtX2ZpbHRlci5maWx0ZXJTY2FsZSgpKTsKICAgICBSZWZQdHI8VWludDhDbGFtcGVkQXJyYXk+
IGltYWdlRGF0YSA9IFVpbnQ4Q2xhbXBlZEFycmF5OjpjcmVhdGVVbmluaXRpYWxpemVkKHNjYWxl
ZFNpemUud2lkdGgoKSAqIHNjYWxlZFNpemUuaGVpZ2h0KCkgKiA0KTsKICAgICBjb3B5UHJlbXVs
dGlwbGllZEltYWdlKGltYWdlRGF0YS5nZXQoKSwgcmVjdCk7CkBAIC0zOTcsOCArMzg4LDggQEAg
dm9pZCBGaWx0ZXJFZmZlY3Q6OmNvcHlVbm11bHRpcGxpZWRJbWFnZQogICAgICAgICBpZiAobV9p
bWFnZUJ1ZmZlclJlc3VsdCkKICAgICAgICAgICAgIG1fdW5tdWx0aXBsaWVkSW1hZ2VSZXN1bHQg
PSBtX2ltYWdlQnVmZmVyUmVzdWx0LT5nZXRVbm11bHRpcGxpZWRJbWFnZURhdGEoSW50UmVjdChJ
bnRQb2ludCgpLCBtX2Fic29sdXRlUGFpbnRSZWN0LnNpemUoKSkpOwogICAgICAgICBlbHNlIHsK
LSAgICAgICAgICAgIEFTU0VSVChpc0ZpbHRlclNpemVWYWxpZChtX2Fic29sdXRlUGFpbnRSZWN0
KSk7CiAgICAgICAgICAgICBJbnRTaXplIGlucHV0U2l6ZShtX2Fic29sdXRlUGFpbnRSZWN0LnNp
emUoKSk7CisgICAgICAgICAgICBBU1NFUlQoSW1hZ2VCdWZmZXI6OmlzU2l6ZUNsYW1wZWQoaW5w
dXRTaXplKSk7CiAgICAgICAgICAgICBpbnB1dFNpemUuc2NhbGUobV9maWx0ZXIuZmlsdGVyU2Nh
bGUoKSk7CiAgICAgICAgICAgICBtX3VubXVsdGlwbGllZEltYWdlUmVzdWx0ID0gVWludDhDbGFt
cGVkQXJyYXk6OmNyZWF0ZVVuaW5pdGlhbGl6ZWQoaW5wdXRTaXplLndpZHRoKCkgKiBpbnB1dFNp
emUuaGVpZ2h0KCkgKiA0KTsKICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIqIHNvdXJjZUNvbXBv
bmVudCA9IG1fcHJlbXVsdGlwbGllZEltYWdlUmVzdWx0LT5kYXRhKCk7CkBAIC00MzMsOCArNDI0
LDggQEAgdm9pZCBGaWx0ZXJFZmZlY3Q6OmNvcHlQcmVtdWx0aXBsaWVkSW1hZwogICAgICAgICBp
ZiAobV9pbWFnZUJ1ZmZlclJlc3VsdCkKICAgICAgICAgICAgIG1fcHJlbXVsdGlwbGllZEltYWdl
UmVzdWx0ID0gbV9pbWFnZUJ1ZmZlclJlc3VsdC0+Z2V0UHJlbXVsdGlwbGllZEltYWdlRGF0YShJ
bnRSZWN0KEludFBvaW50KCksIG1fYWJzb2x1dGVQYWludFJlY3Quc2l6ZSgpKSk7CiAgICAgICAg
IGVsc2UgewotICAgICAgICAgICAgQVNTRVJUKGlzRmlsdGVyU2l6ZVZhbGlkKG1fYWJzb2x1dGVQ
YWludFJlY3QpKTsKICAgICAgICAgICAgIEludFNpemUgaW5wdXRTaXplKG1fYWJzb2x1dGVQYWlu
dFJlY3Quc2l6ZSgpKTsKKyAgICAgICAgICAgIEFTU0VSVChJbWFnZUJ1ZmZlcjo6aXNTaXplQ2xh
bXBlZChpbnB1dFNpemUpKTsKICAgICAgICAgICAgIGlucHV0U2l6ZS5zY2FsZShtX2ZpbHRlci5m
aWx0ZXJTY2FsZSgpKTsKICAgICAgICAgICAgIG1fcHJlbXVsdGlwbGllZEltYWdlUmVzdWx0ID0g
VWludDhDbGFtcGVkQXJyYXk6OmNyZWF0ZVVuaW5pdGlhbGl6ZWQoaW5wdXRTaXplLndpZHRoKCkg
KiBpbnB1dFNpemUuaGVpZ2h0KCkgKiA0KTsKICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIqIHNv
dXJjZUNvbXBvbmVudCA9IG1fdW5tdWx0aXBsaWVkSW1hZ2VSZXN1bHQtPmRhdGEoKTsKQEAgLTQ1
OSwxMCArNDUwLDEzIEBAIEltYWdlQnVmZmVyKiBGaWx0ZXJFZmZlY3Q6OmNyZWF0ZUltYWdlQnUK
ICAgICAvLyBPbmx5IG9uZSByZXN1bHQgdHlwZSBpcyBhbGxvd2VkLgogICAgIEFTU0VSVCghaGFz
UmVzdWx0KCkpOwogICAgIGlmIChtX2Fic29sdXRlUGFpbnRSZWN0LmlzRW1wdHkoKSkKLSAgICAg
ICAgcmV0dXJuIDA7Ci0gICAgbV9pbWFnZUJ1ZmZlclJlc3VsdCA9IEltYWdlQnVmZmVyOjpjcmVh
dGUobV9hYnNvbHV0ZVBhaW50UmVjdC5zaXplKCksIG1fZmlsdGVyLmZpbHRlclNjYWxlKCksIG1f
cmVzdWx0Q29sb3JTcGFjZSwgbV9maWx0ZXIucmVuZGVyaW5nTW9kZSgpKTsKKyAgICAgICAgcmV0
dXJuIG51bGxwdHI7CisKKyAgICBGbG9hdFNpemUgY2xhbXBlZFNpemUgPSBJbWFnZUJ1ZmZlcjo6
Y2xhbXBlZFNpemUobV9hYnNvbHV0ZVBhaW50UmVjdC5zaXplKCkpOworICAgIG1faW1hZ2VCdWZm
ZXJSZXN1bHQgPSBJbWFnZUJ1ZmZlcjo6Y3JlYXRlKGNsYW1wZWRTaXplLCBtX2ZpbHRlci5maWx0
ZXJTY2FsZSgpLCBtX3Jlc3VsdENvbG9yU3BhY2UsIG1fZmlsdGVyLnJlbmRlcmluZ01vZGUoKSk7
CiAgICAgaWYgKCFtX2ltYWdlQnVmZmVyUmVzdWx0KQotICAgICAgICByZXR1cm4gMDsKKyAgICAg
ICAgcmV0dXJuIG51bGxwdHI7CisKICAgICBBU1NFUlQobV9pbWFnZUJ1ZmZlclJlc3VsdC0+Y29u
dGV4dCgpKTsKICAgICByZXR1cm4gbV9pbWFnZUJ1ZmZlclJlc3VsdC5nZXQoKTsKIH0KQEAgLTQ3
MSwxMSArNDY1LDExIEBAIFVpbnQ4Q2xhbXBlZEFycmF5KiBGaWx0ZXJFZmZlY3Q6OmNyZWF0ZVUK
IHsKICAgICAvLyBPbmx5IG9uZSByZXN1bHQgdHlwZSBpcyBhbGxvd2VkLgogICAgIEFTU0VSVCgh
aGFzUmVzdWx0KCkpOwotICAgIEFTU0VSVChpc0ZpbHRlclNpemVWYWxpZChtX2Fic29sdXRlUGFp
bnRSZWN0KSk7Ci0KICAgICBpZiAobV9hYnNvbHV0ZVBhaW50UmVjdC5pc0VtcHR5KCkpCi0gICAg
ICAgIHJldHVybiAwOworICAgICAgICByZXR1cm4gbnVsbHB0cjsKKwogICAgIEludFNpemUgcmVz
dWx0U2l6ZShtX2Fic29sdXRlUGFpbnRSZWN0LnNpemUoKSk7CisgICAgQVNTRVJUKEltYWdlQnVm
ZmVyOjppc1NpemVDbGFtcGVkKHJlc3VsdFNpemUpKTsKICAgICByZXN1bHRTaXplLnNjYWxlKG1f
ZmlsdGVyLmZpbHRlclNjYWxlKCkpOwogICAgIG1fdW5tdWx0aXBsaWVkSW1hZ2VSZXN1bHQgPSBV
aW50OENsYW1wZWRBcnJheTo6Y3JlYXRlVW5pbml0aWFsaXplZChyZXN1bHRTaXplLndpZHRoKCkg
KiByZXN1bHRTaXplLmhlaWdodCgpICogNCk7CiAgICAgcmV0dXJuIG1fdW5tdWx0aXBsaWVkSW1h
Z2VSZXN1bHQuZ2V0KCk7CkBAIC00ODUsMTEgKzQ3OSwxMSBAQCBVaW50OENsYW1wZWRBcnJheSog
RmlsdGVyRWZmZWN0OjpjcmVhdGVQCiB7CiAgICAgLy8gT25seSBvbmUgcmVzdWx0IHR5cGUgaXMg
YWxsb3dlZC4KICAgICBBU1NFUlQoIWhhc1Jlc3VsdCgpKTsKLSAgICBBU1NFUlQoaXNGaWx0ZXJT
aXplVmFsaWQobV9hYnNvbHV0ZVBhaW50UmVjdCkpOwotCiAgICAgaWYgKG1fYWJzb2x1dGVQYWlu
dFJlY3QuaXNFbXB0eSgpKQotICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgcmV0dXJuIG51bGxw
dHI7CisKICAgICBJbnRTaXplIHJlc3VsdFNpemUobV9hYnNvbHV0ZVBhaW50UmVjdC5zaXplKCkp
OworICAgIEFTU0VSVChJbWFnZUJ1ZmZlcjo6aXNTaXplQ2xhbXBlZChyZXN1bHRTaXplKSk7CiAg
ICAgcmVzdWx0U2l6ZS5zY2FsZShtX2ZpbHRlci5maWx0ZXJTY2FsZSgpKTsKICAgICBtX3ByZW11
bHRpcGxpZWRJbWFnZVJlc3VsdCA9IFVpbnQ4Q2xhbXBlZEFycmF5OjpjcmVhdGVVbmluaXRpYWxp
emVkKHJlc3VsdFNpemUud2lkdGgoKSAqIHJlc3VsdFNpemUuaGVpZ2h0KCkgKiA0KTsKICAgICBy
ZXR1cm4gbV9wcmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQuZ2V0KCk7CkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlckVmZmVjdC5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyRWZmZWN0
LmgJKHJldmlzaW9uIDE4Mzc1NikKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2ZpbHRlcnMvRmlsdGVyRWZmZWN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTU4LDkgKzU4LDYgQEAg
Y2xhc3MgRmlsdGVyRWZmZWN0IDogcHVibGljIFJlZkNvdW50ZWQ8RgogcHVibGljOgogICAgIHZp
cnR1YWwgfkZpbHRlckVmZmVjdCgpOwogCi0gICAgc3RhdGljIGJvb2wgaXNGaWx0ZXJTaXplVmFs
aWQoY29uc3QgRmxvYXRSZWN0Jik7Ci0gICAgc3RhdGljIGZsb2F0IG1heEZpbHRlckFyZWEoKTsK
LQogICAgIHZvaWQgY2xlYXJSZXN1bHQoKTsKICAgICB2b2lkIGNsZWFyUmVzdWx0c1JlY3Vyc2l2
ZSgpOwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90cmFuc2Zvcm1z
L0FmZmluZVRyYW5zZm9ybS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvdHJhbnNmb3Jtcy9BZmZpbmVUcmFuc2Zvcm0uY3BwCShyZXZpc2lvbiAxODM3
NTYpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90cmFuc2Zvcm1zL0FmZmlu
ZVRyYW5zZm9ybS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE3Miw2ICsxNzIsMTYgQEAgQWZmaW5l
VHJhbnNmb3JtJiBBZmZpbmVUcmFuc2Zvcm06OnNjYWxlKAogICAgIHJldHVybiAqdGhpczsKIH0K
IAorQWZmaW5lVHJhbnNmb3JtJiBBZmZpbmVUcmFuc2Zvcm06OnNjYWxlTm9uVW5pZm9ybShkb3Vi
bGUgc3gsIGRvdWJsZSBzeSkKK3sKKyAgICByZXR1cm4gc2NhbGUoc3gsIHN5KTsKK30KKworQWZm
aW5lVHJhbnNmb3JtJiBBZmZpbmVUcmFuc2Zvcm06OnNjYWxlKGNvbnN0IEZsb2F0U2l6ZSYgcykK
K3sKKyAgICByZXR1cm4gc2NhbGUocy53aWR0aCgpLCBzLmhlaWdodCgpKTsKK30KKwogLy8gKnRo
aXMgPSAqdGhpcyAqIHRyYW5zbGF0aW9uCiBBZmZpbmVUcmFuc2Zvcm0mIEFmZmluZVRyYW5zZm9y
bTo6dHJhbnNsYXRlKGRvdWJsZSB0eCwgZG91YmxlIHR5KQogewpAQCAtMTg2LDkgKzE5Niw5IEBA
IEFmZmluZVRyYW5zZm9ybSYgQWZmaW5lVHJhbnNmb3JtOjp0cmFuc2wKICAgICByZXR1cm4gKnRo
aXM7CiB9CiAKLUFmZmluZVRyYW5zZm9ybSYgQWZmaW5lVHJhbnNmb3JtOjpzY2FsZU5vblVuaWZv
cm0oZG91YmxlIHN4LCBkb3VibGUgc3kpCitBZmZpbmVUcmFuc2Zvcm0mIEFmZmluZVRyYW5zZm9y
bTo6dHJhbnNsYXRlKGNvbnN0IEZsb2F0UG9pbnQmIHQpCiB7Ci0gICAgcmV0dXJuIHNjYWxlKHN4
LCBzeSk7CisgICAgcmV0dXJuIHRyYW5zbGF0ZSh0LngoKSwgdC55KCkpOwogfQogCiBBZmZpbmVU
cmFuc2Zvcm0mIEFmZmluZVRyYW5zZm9ybTo6cm90YXRlRnJvbVZlY3Rvcihkb3VibGUgeCwgZG91
YmxlIHkpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90cmFuc2Zvcm1z
L0FmZmluZVRyYW5zZm9ybS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL3RyYW5zZm9ybXMvQWZmaW5lVHJhbnNmb3JtLmgJKHJldmlzaW9uIDE4Mzc1NikK
KysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RyYW5zZm9ybXMvQWZmaW5lVHJh
bnNmb3JtLmgJKHdvcmtpbmcgY29weSkKQEAgLTk4LDkgKzk4LDExIEBAIHB1YmxpYzoKICAgICBX
RUJDT1JFX0VYUE9SVCBBZmZpbmVUcmFuc2Zvcm0mIHNjYWxlKGRvdWJsZSk7CiAgICAgQWZmaW5l
VHJhbnNmb3JtJiBzY2FsZShkb3VibGUgc3gsIGRvdWJsZSBzeSk7IAogICAgIEFmZmluZVRyYW5z
Zm9ybSYgc2NhbGVOb25Vbmlmb3JtKGRvdWJsZSBzeCwgZG91YmxlIHN5KTsKKyAgICBBZmZpbmVU
cmFuc2Zvcm0mIHNjYWxlKGNvbnN0IEZsb2F0U2l6ZSYpOwogICAgIEFmZmluZVRyYW5zZm9ybSYg
cm90YXRlKGRvdWJsZSBkKTsKICAgICBBZmZpbmVUcmFuc2Zvcm0mIHJvdGF0ZUZyb21WZWN0b3Io
ZG91YmxlIHgsIGRvdWJsZSB5KTsKICAgICBXRUJDT1JFX0VYUE9SVCBBZmZpbmVUcmFuc2Zvcm0m
IHRyYW5zbGF0ZShkb3VibGUgdHgsIGRvdWJsZSB0eSk7CisgICAgQWZmaW5lVHJhbnNmb3JtJiB0
cmFuc2xhdGUoY29uc3QgRmxvYXRQb2ludCYpOwogICAgIEFmZmluZVRyYW5zZm9ybSYgc2hlYXIo
ZG91YmxlIHN4LCBkb3VibGUgc3kpOwogICAgIEFmZmluZVRyYW5zZm9ybSYgZmxpcFgoKTsKICAg
ICBXRUJDT1JFX0VYUE9SVCBBZmZpbmVUcmFuc2Zvcm0mIGZsaXBZKCk7CkBAIC0xNzIsNyArMTc0
LDcgQEAgcHVibGljOgogICAgIHsKICAgICAgICAgcmV0dXJuIEFmZmluZVRyYW5zZm9ybSgxLCAw
LCAwLCAxLCB4LCB5KTsKICAgICB9Ci0gICAgCisKICAgICAvLyBkZWNvbXBvc2UgdGhlIG1hdHJp
eCBpbnRvIGl0cyBjb21wb25lbnQgcGFydHMKICAgICB0eXBlZGVmIHN0cnVjdCB7CiAgICAgICAg
IGRvdWJsZSBzY2FsZVgsIHNjYWxlWTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9G
aWx0ZXJFZmZlY3RSZW5kZXJlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL0ZpbHRlckVmZmVjdFJlbmRlcmVyLmNwcAkocmV2aXNpb24gMTgzNzU2KQorKysgU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0ZpbHRlckVmZmVjdFJlbmRlcmVyLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMzA1LDE0ICszMDUsMTQgQEAgYm9vbCBGaWx0ZXJFZmZlY3RSZW5kZXJlcjo6YnVp
bGQoUmVuZGVyRQogCiBib29sIEZpbHRlckVmZmVjdFJlbmRlcmVyOjp1cGRhdGVCYWNraW5nU3Rv
cmVSZWN0KGNvbnN0IEZsb2F0UmVjdCYgZmlsdGVyUmVjdCkKIHsKLSAgICBpZiAoIWZpbHRlclJl
Y3QuaXNaZXJvKCkgJiYgRmlsdGVyRWZmZWN0Ojppc0ZpbHRlclNpemVWYWxpZChmaWx0ZXJSZWN0
KSkgewotICAgICAgICBGbG9hdFJlY3QgY3VycmVudFNvdXJjZVJlY3QgPSBzb3VyY2VJbWFnZVJl
Y3QoKTsKLSAgICAgICAgaWYgKGZpbHRlclJlY3QgIT0gY3VycmVudFNvdXJjZVJlY3QpIHsKLSAg
ICAgICAgICAgIHNldFNvdXJjZUltYWdlUmVjdChmaWx0ZXJSZWN0KTsKLSAgICAgICAgICAgIHJl
dHVybiB0cnVlOwotICAgICAgICB9Ci0gICAgfQotICAgIHJldHVybiBmYWxzZTsKKyAgICBpZiAo
ZmlsdGVyUmVjdC5pc0VtcHR5KCkgfHwgIUltYWdlQnVmZmVyOjppc1NpemVDbGFtcGVkKGZpbHRl
clJlY3Quc2l6ZSgpKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgaWYgKGZpbHRlclJl
Y3QgPT0gc291cmNlSW1hZ2VSZWN0KCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIHNl
dFNvdXJjZUltYWdlUmVjdChmaWx0ZXJSZWN0KTsKKyAgICByZXR1cm4gdHJ1ZTsKIH0KIAogdm9p
ZCBGaWx0ZXJFZmZlY3RSZW5kZXJlcjo6YWxsb2NhdGVCYWNraW5nU3RvcmVJZk5lZWRlZCgpCkBA
IC00MDEsNyArNDAxLDcgQEAgYm9vbCBGaWx0ZXJFZmZlY3RSZW5kZXJlckhlbHBlcjo6YmVnaW5G
aQogICAgIGZpbHRlci0+YWxsb2NhdGVCYWNraW5nU3RvcmVJZk5lZWRlZCgpOwogICAgIC8vIFBh
aW50IGludG8gdGhlIGNvbnRleHQgdGhhdCByZXByZXNlbnRzIHRoZSBTb3VyY2VHcmFwaGljIG9m
IHRoZSBmaWx0ZXIuCiAgICAgR3JhcGhpY3NDb250ZXh0KiBzb3VyY2VHcmFwaGljc0NvbnRleHQg
PSBmaWx0ZXItPmlucHV0Q29udGV4dCgpOwotICAgIGlmICghc291cmNlR3JhcGhpY3NDb250ZXh0
IHx8ICFGaWx0ZXJFZmZlY3Q6OmlzRmlsdGVyU2l6ZVZhbGlkKGZpbHRlci0+ZmlsdGVyUmVnaW9u
KCkpKSB7CisgICAgaWYgKCFzb3VyY2VHcmFwaGljc0NvbnRleHQgfHwgZmlsdGVyLT5maWx0ZXJS
ZWdpb24oKS5pc0VtcHR5KCkgfHwgIUltYWdlQnVmZmVyOjppc1NpemVDbGFtcGVkKGZpbHRlci0+
ZmlsdGVyUmVnaW9uKCkuc2l6ZSgpKSkgewogICAgICAgICAvLyBEaXNhYmxlIHRoZSBmaWx0ZXJz
IGFuZCBjb250aW51ZS4KICAgICAgICAgbV9oYXZlRmlsdGVyRWZmZWN0ID0gZmFsc2U7CiAgICAg
ICAgIHJldHVybiBmYWxzZTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVu
ZGVyU1ZHUmVzb3VyY2VDbGlwcGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291cmNlQ2xpcHBlci5jcHAJKHJldmlzaW9uIDE4Mzc1
NikKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VDbGlw
cGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTM4LDExICsxMzgsMTEgQEAgYm9vbCBSZW5kZXJT
VkdSZXNvdXJjZUNsaXBwZXI6OmFwcGx5Q2xpcAogICAgIGlmIChzaG91bGRDcmVhdGVDbGlwcGVy
TWFza0ltYWdlICYmIHBhdGhPbmx5Q2xpcHBpbmcoY29udGV4dCwgYW5pbWF0ZWRMb2NhbFRyYW5z
Zm9ybSwgb2JqZWN0Qm91bmRpbmdCb3gpKQogICAgICAgICByZXR1cm4gdHJ1ZTsKIAotICAgIEFm
ZmluZVRyYW5zZm9ybSBhYnNvbHV0ZVRyYW5zZm9ybTsKLSAgICBTVkdSZW5kZXJpbmdDb250ZXh0
OjpjYWxjdWxhdGVUcmFuc2Zvcm1hdGlvblRvT3V0ZXJtb3N0Q29vcmRpbmF0ZVN5c3RlbShyZW5k
ZXJlciwgYWJzb2x1dGVUcmFuc2Zvcm0pOworICAgIEFmZmluZVRyYW5zZm9ybSBhYnNvbHV0ZVRy
YW5zZm9ybSA9IFNWR1JlbmRlcmluZ0NvbnRleHQ6OmNhbGN1bGF0ZVRyYW5zZm9ybWF0aW9uVG9P
dXRlcm1vc3RDb29yZGluYXRlU3lzdGVtKHJlbmRlcmVyKTsKIAogICAgIGlmIChzaG91bGRDcmVh
dGVDbGlwcGVyTWFza0ltYWdlICYmICFyZXBhaW50UmVjdC5pc0VtcHR5KCkpIHsKLSAgICAgICAg
aWYgKCFTVkdSZW5kZXJpbmdDb250ZXh0OjpjcmVhdGVJbWFnZUJ1ZmZlcihyZXBhaW50UmVjdCwg
YWJzb2x1dGVUcmFuc2Zvcm0sIGNsaXBwZXJNYXNrSW1hZ2UsIENvbG9yU3BhY2VEZXZpY2VSR0Is
IFVuYWNjZWxlcmF0ZWQpKQorICAgICAgICBjbGlwcGVyTWFza0ltYWdlID0gU1ZHUmVuZGVyaW5n
Q29udGV4dDo6Y3JlYXRlSW1hZ2VCdWZmZXIocmVwYWludFJlY3QsIGFic29sdXRlVHJhbnNmb3Jt
LCBDb2xvclNwYWNlRGV2aWNlUkdCLCBVbmFjY2VsZXJhdGVkKTsKKyAgICAgICAgaWYgKCFjbGlw
cGVyTWFza0ltYWdlKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgICAgIEdyYXBo
aWNzQ29udGV4dCogbWFza0NvbnRleHQgPSBjbGlwcGVyTWFza0ltYWdlLT5jb250ZXh0KCk7Cklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291cmNlRmlsdGVy
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNW
R1Jlc291cmNlRmlsdGVyLmNwcAkocmV2aXNpb24gMTgzNzU2KQorKysgU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJjZUZpbHRlci5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTk2LDIxICs5Niw2IEBAIHN0ZDo6dW5pcXVlX3B0cjxTVkdGaWx0ZXJCdWlsZGVyPiBSZW5k
ZXIKICAgICByZXR1cm4gYnVpbGRlcjsKIH0KIAotYm9vbCBSZW5kZXJTVkdSZXNvdXJjZUZpbHRl
cjo6Zml0c0luTWF4aW11bUltYWdlU2l6ZShjb25zdCBGbG9hdFNpemUmIHNpemUsIEZsb2F0U2l6
ZSYgc2NhbGUpCi17Ci0gICAgRmxvYXRTaXplIHNjYWxlZFNpemUoc2l6ZSk7Ci0gICAgc2NhbGVk
U2l6ZS5zY2FsZShzY2FsZS53aWR0aCgpLCBzY2FsZS5oZWlnaHQoKSk7Ci0gICAgZmxvYXQgc2Nh
bGVkQXJlYSA9IHNjYWxlZFNpemUud2lkdGgoKSAqIHNjYWxlZFNpemUuaGVpZ2h0KCk7Ci0KLSAg
ICBpZiAoc2NhbGVkQXJlYSA8PSBGaWx0ZXJFZmZlY3Q6Om1heEZpbHRlckFyZWEoKSkKLSAgICAg
ICAgcmV0dXJuIHRydWU7Ci0KLSAgICAvLyBJZiBhcmVhIG9mIHNjYWxlZCBzaXplIGlzIGJpZ2dl
ciB0aGFuIHRoZSB1cHBlciBsaW1pdCwgYWRqdXN0IHRoZSBzY2FsZQotICAgIC8vIHRvIGZpdC4K
LSAgICBzY2FsZS5zY2FsZShzcXJ0KEZpbHRlckVmZmVjdDo6bWF4RmlsdGVyQXJlYSgpIC8gc2Nh
bGVkQXJlYSkpOwotICAgIHJldHVybiBmYWxzZTsKLX0KLQogYm9vbCBSZW5kZXJTVkdSZXNvdXJj
ZUZpbHRlcjo6YXBwbHlSZXNvdXJjZShSZW5kZXJFbGVtZW50JiByZW5kZXJlciwgY29uc3QgUmVu
ZGVyU3R5bGUmLCBHcmFwaGljc0NvbnRleHQqJiBjb250ZXh0LCB1bnNpZ25lZCBzaG9ydCByZXNv
dXJjZU1vZGUpCiB7CiAgICAgQVNTRVJUKGNvbnRleHQpOwpAQCAtMTMxLDggKzExNiw3IEBAIGJv
b2wgUmVuZGVyU1ZHUmVzb3VyY2VGaWx0ZXI6OmFwcGx5UmVzb3UKICAgICAgICAgcmV0dXJuIGZh
bHNlOwogCiAgICAgLy8gRGV0ZXJtaW5lIGFic29sdXRlIHRyYW5zZm9ybWF0aW9uIG1hdHJpeCBm
b3IgZmlsdGVyLiAKLSAgICBBZmZpbmVUcmFuc2Zvcm0gYWJzb2x1dGVUcmFuc2Zvcm07Ci0gICAg
U1ZHUmVuZGVyaW5nQ29udGV4dDo6Y2FsY3VsYXRlVHJhbnNmb3JtYXRpb25Ub091dGVybW9zdENv
b3JkaW5hdGVTeXN0ZW0ocmVuZGVyZXIsIGFic29sdXRlVHJhbnNmb3JtKTsKKyAgICBBZmZpbmVU
cmFuc2Zvcm0gYWJzb2x1dGVUcmFuc2Zvcm0gPSBTVkdSZW5kZXJpbmdDb250ZXh0OjpjYWxjdWxh
dGVUcmFuc2Zvcm1hdGlvblRvT3V0ZXJtb3N0Q29vcmRpbmF0ZVN5c3RlbShyZW5kZXJlcik7CiAg
ICAgaWYgKCFhYnNvbHV0ZVRyYW5zZm9ybS5pc0ludmVydGlibGUoKSkKICAgICAgICAgcmV0dXJu
IGZhbHNlOwogCkBAIC0xNjcsOCArMTUxLDggQEAgYm9vbCBSZW5kZXJTVkdSZXNvdXJjZUZpbHRl
cjo6YXBwbHlSZXNvdQogCiAgICAgLy8gRGV0ZXJtaW5lIHNjYWxlIGZhY3RvciBmb3IgZmlsdGVy
LiBUaGUgc2l6ZSBvZiBpbnRlcm1lZGlhdGUgSW1hZ2VCdWZmZXJzIHNob3VsZG4ndCBiZSBiaWdn
ZXIgdGhhbiBrTWF4RmlsdGVyU2l6ZS4KICAgICBGbG9hdFJlY3QgdGVtcFNvdXJjZVJlY3QgPSBh
YnNvbHV0ZURyYXdpbmdSZWdpb247CisgICAgSW1hZ2VCdWZmZXI6OmlzU2l6ZUNsYW1wZWQodGVt
cFNvdXJjZVJlY3Quc2l6ZSgpLCBzY2FsZSk7CiAgICAgdGVtcFNvdXJjZVJlY3Quc2NhbGUoc2Nh
bGUud2lkdGgoKSwgc2NhbGUuaGVpZ2h0KCkpOwotICAgIGZpdHNJbk1heGltdW1JbWFnZVNpemUo
dGVtcFNvdXJjZVJlY3Quc2l6ZSgpLCBzY2FsZSk7CiAKICAgICAvLyBTZXQgdGhlIHNjYWxlIGxl
dmVsIGluIFNWR0ZpbHRlci4KICAgICBmaWx0ZXJEYXRhLT5maWx0ZXItPnNldEZpbHRlclJlc29s
dXRpb24oc2NhbGUpOwpAQCAtMTgyLDcgKzE2Niw3IEBAIGJvb2wgUmVuZGVyU1ZHUmVzb3VyY2VG
aWx0ZXI6OmFwcGx5UmVzb3UKICAgICBGbG9hdFJlY3Qgc3ViUmVnaW9uID0gbGFzdEVmZmVjdC0+
bWF4RWZmZWN0UmVjdCgpOwogICAgIC8vIEF0IGxlYXN0IG9uZSBGaWx0ZXJFZmZlY3QgaGFzIGEg
dG9vIGJpZyBpbWFnZSBzaXplLAogICAgIC8vIHJlY2FsY3VsYXRlIHRoZSBlZmZlY3Qgc2l6ZXMg
d2l0aCBuZXcgc2NhbGUgZmFjdG9ycy4KLSAgICBpZiAoIWZpdHNJbk1heGltdW1JbWFnZVNpemUo
c3ViUmVnaW9uLnNpemUoKSwgc2NhbGUpKSB7CisgICAgaWYgKCFJbWFnZUJ1ZmZlcjo6aXNTaXpl
Q2xhbXBlZChzdWJSZWdpb24uc2l6ZSgpLCBzY2FsZSkpIHsKICAgICAgICAgZmlsdGVyRGF0YS0+
ZmlsdGVyLT5zZXRGaWx0ZXJSZXNvbHV0aW9uKHNjYWxlKTsKICAgICAgICAgUmVuZGVyU1ZHUmVz
b3VyY2VGaWx0ZXJQcmltaXRpdmU6OmRldGVybWluZUZpbHRlclByaW1pdGl2ZVN1YnJlZ2lvbigq
bGFzdEVmZmVjdCk7CiAgICAgfQpAQCAtMjAxLDkgKzE4NSwxMCBAQCBib29sIFJlbmRlclNWR1Jl
c291cmNlRmlsdGVyOjphcHBseVJlc291CiAgICAgZWZmZWN0aXZlVHJhbnNmb3JtLnNjYWxlKHNj
YWxlLndpZHRoKCksIHNjYWxlLmhlaWdodCgpKTsKICAgICBlZmZlY3RpdmVUcmFuc2Zvcm0ubXVs
dGlwbHkoZmlsdGVyRGF0YS0+c2hlYXJGcmVlQWJzb2x1dGVUcmFuc2Zvcm0pOwogCi0gICAgc3Rk
Ojp1bmlxdWVfcHRyPEltYWdlQnVmZmVyPiBzb3VyY2VHcmFwaGljOwogICAgIFJlbmRlcmluZ01v
ZGUgcmVuZGVyaW5nTW9kZSA9IHJlbmRlcmVyLmZyYW1lKCkuc2V0dGluZ3MoKS5hY2NlbGVyYXRl
ZEZpbHRlcnNFbmFibGVkKCkgPyBBY2NlbGVyYXRlZCA6IFVuYWNjZWxlcmF0ZWQ7Ci0gICAgaWYg
KCFTVkdSZW5kZXJpbmdDb250ZXh0OjpjcmVhdGVJbWFnZUJ1ZmZlcihmaWx0ZXJEYXRhLT5kcmF3
aW5nUmVnaW9uLCBlZmZlY3RpdmVUcmFuc2Zvcm0sIHNvdXJjZUdyYXBoaWMsIENvbG9yU3BhY2VM
aW5lYXJSR0IsIHJlbmRlcmluZ01vZGUpKSB7CisKKyAgICBhdXRvIHNvdXJjZUdyYXBoaWMgPSBT
VkdSZW5kZXJpbmdDb250ZXh0OjpjcmVhdGVJbWFnZUJ1ZmZlcihmaWx0ZXJEYXRhLT5kcmF3aW5n
UmVnaW9uLCBlZmZlY3RpdmVUcmFuc2Zvcm0sIENvbG9yU3BhY2VMaW5lYXJSR0IsIHJlbmRlcmlu
Z01vZGUpOworICAgIGlmICghc291cmNlR3JhcGhpYykgewogICAgICAgICBBU1NFUlQoIW1fZmls
dGVyLmNvbnRhaW5zKCZyZW5kZXJlcikpOwogICAgICAgICBmaWx0ZXJEYXRhLT5zYXZlZENvbnRl
eHQgPSBjb250ZXh0OwogICAgICAgICBtX2ZpbHRlci5zZXQoJnJlbmRlcmVyLCBXVEY6Om1vdmUo
ZmlsdGVyRGF0YSkpOwpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJT
VkdSZXNvdXJjZUZpbHRlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VGaWx0ZXIuaAkocmV2aXNpb24gMTgzNzU2KQorKysgU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJjZUZpbHRlci5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC05MSw4ICs5MSw2IEBAIHByaXZhdGU6CiAgICAgdmlydHVhbCBjb25zdCBj
aGFyKiByZW5kZXJOYW1lKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gIlJlbmRlclNWR1Jlc291
cmNlRmlsdGVyIjsgfQogICAgIHZpcnR1YWwgYm9vbCBpc1NWR1Jlc291cmNlRmlsdGVyKCkgY29u
c3Qgb3ZlcnJpZGUgeyByZXR1cm4gdHJ1ZTsgfQogCi0gICAgYm9vbCBmaXRzSW5NYXhpbXVtSW1h
Z2VTaXplKGNvbnN0IEZsb2F0U2l6ZSYsIEZsb2F0U2l6ZSYpOwotCiAgICAgSGFzaE1hcDxSZW5k
ZXJPYmplY3QqLCBzdGQ6OnVuaXF1ZV9wdHI8RmlsdGVyRGF0YT4+IG1fZmlsdGVyOwogfTsKIApJ
bmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJjZUdyYWRp
ZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRl
clNWR1Jlc291cmNlR3JhZGllbnQuY3BwCShyZXZpc2lvbiAxODM3NTYpCisrKyBTb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291cmNlR3JhZGllbnQuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC01OCwxMiArNTgsMTEgQEAgc3RhdGljIGlubGluZSBib29sIGNyZWF0ZU1hc2tB
bmRTd2FwQ29udAogICAgIGF1dG8qIHRleHRSb290QmxvY2sgPSBSZW5kZXJTVkdUZXh0Ojpsb2Nh
dGVSZW5kZXJTVkdUZXh0QW5jZXN0b3IoKm9iamVjdCk7CiAgICAgQVNTRVJUKHRleHRSb290Qmxv
Y2spOwogCi0gICAgQWZmaW5lVHJhbnNmb3JtIGFic29sdXRlVHJhbnNmb3JtOwotICAgIFNWR1Jl
bmRlcmluZ0NvbnRleHQ6OmNhbGN1bGF0ZVRyYW5zZm9ybWF0aW9uVG9PdXRlcm1vc3RDb29yZGlu
YXRlU3lzdGVtKCp0ZXh0Um9vdEJsb2NrLCBhYnNvbHV0ZVRyYW5zZm9ybSk7Ci0KKyAgICBBZmZp
bmVUcmFuc2Zvcm0gYWJzb2x1dGVUcmFuc2Zvcm0gPSBTVkdSZW5kZXJpbmdDb250ZXh0OjpjYWxj
dWxhdGVUcmFuc2Zvcm1hdGlvblRvT3V0ZXJtb3N0Q29vcmRpbmF0ZVN5c3RlbSgqdGV4dFJvb3RC
bG9jayk7CiAgICAgRmxvYXRSZWN0IHJlcGFpbnRSZWN0ID0gdGV4dFJvb3RCbG9jay0+cmVwYWlu
dFJlY3RJbkxvY2FsQ29vcmRpbmF0ZXMoKTsKLSAgICBzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZm
ZXI+IG1hc2tJbWFnZTsKLSAgICBpZiAoIVNWR1JlbmRlcmluZ0NvbnRleHQ6OmNyZWF0ZUltYWdl
QnVmZmVyKHJlcGFpbnRSZWN0LCBhYnNvbHV0ZVRyYW5zZm9ybSwgbWFza0ltYWdlLCBDb2xvclNw
YWNlRGV2aWNlUkdCLCBVbmFjY2VsZXJhdGVkKSkKKworICAgIGF1dG8gbWFza0ltYWdlID0gU1ZH
UmVuZGVyaW5nQ29udGV4dDo6Y3JlYXRlSW1hZ2VCdWZmZXIocmVwYWludFJlY3QsIGFic29sdXRl
VHJhbnNmb3JtLCBDb2xvclNwYWNlRGV2aWNlUkdCLCBVbmFjY2VsZXJhdGVkKTsKKyAgICBpZiAo
IW1hc2tJbWFnZSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgR3JhcGhpY3NDb250ZXh0
KiBtYXNrSW1hZ2VDb250ZXh0ID0gbWFza0ltYWdlLT5jb250ZXh0KCk7CkBAIC04MCwxMCArNzks
MTAgQEAgc3RhdGljIGlubGluZSBBZmZpbmVUcmFuc2Zvcm0gY2xpcFRvVGV4dAogICAgIGF1dG8q
IHRleHRSb290QmxvY2sgPSBSZW5kZXJTVkdUZXh0Ojpsb2NhdGVSZW5kZXJTVkdUZXh0QW5jZXN0
b3IoKm9iamVjdCk7CiAgICAgQVNTRVJUKHRleHRSb290QmxvY2spOwogCi0gICAgQWZmaW5lVHJh
bnNmb3JtIGFic29sdXRlVHJhbnNmb3JtOwotICAgIFNWR1JlbmRlcmluZ0NvbnRleHQ6OmNhbGN1
bGF0ZVRyYW5zZm9ybWF0aW9uVG9PdXRlcm1vc3RDb29yZGluYXRlU3lzdGVtKCp0ZXh0Um9vdEJs
b2NrLCBhYnNvbHV0ZVRyYW5zZm9ybSk7CisgICAgQWZmaW5lVHJhbnNmb3JtIGFic29sdXRlVHJh
bnNmb3JtID0gU1ZHUmVuZGVyaW5nQ29udGV4dDo6Y2FsY3VsYXRlVHJhbnNmb3JtYXRpb25Ub091
dGVybW9zdENvb3JkaW5hdGVTeXN0ZW0oKnRleHRSb290QmxvY2spOwogCiAgICAgdGFyZ2V0UmVj
dCA9IHRleHRSb290QmxvY2stPnJlcGFpbnRSZWN0SW5Mb2NhbENvb3JkaW5hdGVzKCk7CisKICAg
ICBTVkdSZW5kZXJpbmdDb250ZXh0OjpjbGlwVG9JbWFnZUJ1ZmZlcihjb250ZXh0LCBhYnNvbHV0
ZVRyYW5zZm9ybSwgdGFyZ2V0UmVjdCwgaW1hZ2VCdWZmZXIsIGZhbHNlKTsKIAogICAgIEFmZmlu
ZVRyYW5zZm9ybSBtYXRyaXg7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1Jl
bmRlclNWR1Jlc291cmNlTWFza2VyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291cmNlTWFza2VyLmNwcAkocmV2aXNpb24gMTgzNzU2
KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJjZU1hc2tl
ci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTYzLDE2ICs2MywxNCBAQCBib29sIFJlbmRlclNWR1Jl
c291cmNlTWFza2VyOjphcHBseVNWR01hCiAgICAgICAgIG1fbWFza2VyLnNldCgmcmVuZGVyZXIs
IHN0ZDo6bWFrZV91bmlxdWU8TWFza2VyRGF0YT4oKSk7CiAKICAgICBNYXNrZXJEYXRhKiBtYXNr
ZXJEYXRhID0gbV9tYXNrZXIuZ2V0KCZyZW5kZXJlcik7Ci0KLSAgICBBZmZpbmVUcmFuc2Zvcm0g
YWJzb2x1dGVUcmFuc2Zvcm07Ci0gICAgU1ZHUmVuZGVyaW5nQ29udGV4dDo6Y2FsY3VsYXRlVHJh
bnNmb3JtYXRpb25Ub091dGVybW9zdENvb3JkaW5hdGVTeXN0ZW0ocmVuZGVyZXIsIGFic29sdXRl
VHJhbnNmb3JtKTsKLQorICAgIEFmZmluZVRyYW5zZm9ybSBhYnNvbHV0ZVRyYW5zZm9ybSA9IFNW
R1JlbmRlcmluZ0NvbnRleHQ6OmNhbGN1bGF0ZVRyYW5zZm9ybWF0aW9uVG9PdXRlcm1vc3RDb29y
ZGluYXRlU3lzdGVtKHJlbmRlcmVyKTsKICAgICBGbG9hdFJlY3QgcmVwYWludFJlY3QgPSByZW5k
ZXJlci5yZXBhaW50UmVjdEluTG9jYWxDb29yZGluYXRlcygpOwogCiAgICAgaWYgKCFtYXNrZXJE
YXRhLT5tYXNrSW1hZ2UgJiYgIXJlcGFpbnRSZWN0LmlzRW1wdHkoKSkgewogICAgICAgICBjb25z
dCBTVkdSZW5kZXJTdHlsZSYgc3ZnU3R5bGUgPSBzdHlsZSgpLnN2Z1N0eWxlKCk7CiAgICAgICAg
IENvbG9yU3BhY2UgY29sb3JTcGFjZSA9IHN2Z1N0eWxlLmNvbG9ySW50ZXJwb2xhdGlvbigpID09
IENJX0xJTkVBUlJHQiA/IENvbG9yU3BhY2VMaW5lYXJSR0IgOiBDb2xvclNwYWNlRGV2aWNlUkdC
OwotICAgICAgICBpZiAoIVNWR1JlbmRlcmluZ0NvbnRleHQ6OmNyZWF0ZUltYWdlQnVmZmVyKHJl
cGFpbnRSZWN0LCBhYnNvbHV0ZVRyYW5zZm9ybSwgbWFza2VyRGF0YS0+bWFza0ltYWdlLCBjb2xv
clNwYWNlLCBVbmFjY2VsZXJhdGVkKSkKKyAgICAgICAgbWFza2VyRGF0YS0+bWFza0ltYWdlID0g
U1ZHUmVuZGVyaW5nQ29udGV4dDo6Y3JlYXRlSW1hZ2VCdWZmZXIocmVwYWludFJlY3QsIGFic29s
dXRlVHJhbnNmb3JtLCBjb2xvclNwYWNlLCBVbmFjY2VsZXJhdGVkKTsKKyAgICAgICAgaWYgKCFt
YXNrZXJEYXRhLT5tYXNrSW1hZ2UpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICAg
ICAgaWYgKCFkcmF3Q29udGVudEludG9NYXNrSW1hZ2UobWFza2VyRGF0YSwgY29sb3JTcGFjZSwg
JnJlbmRlcmVyKSkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZH
UmVzb3VyY2VQYXR0ZXJuLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvc3ZnL1JlbmRlclNWR1Jlc291cmNlUGF0dGVybi5jcHAJKHJldmlzaW9uIDE4Mzc1NikKKysr
IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VQYXR0ZXJuLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtNzAsMjAgKzcwLDE5IEBAIFBhdHRlcm5EYXRhKiBSZW5kZXJT
VkdSZXNvdXJjZVBhdHRlcm46OmIKIAogICAgIC8vIElmIHdlIGNvdWxkbid0IGRldGVybWluZSB0
aGUgcGF0dGVybiBjb250ZW50IGVsZW1lbnQgcm9vdCwgc3RvcCBoZXJlLgogICAgIGlmICghbV9h
dHRyaWJ1dGVzLnBhdHRlcm5Db250ZW50RWxlbWVudCgpKQotICAgICAgICByZXR1cm4gMDsKKyAg
ICAgICAgcmV0dXJuIG51bGxwdHI7CiAKICAgICAvLyBBbiBlbXB0eSB2aWV3Qm94IGRpc2FibGVz
IHJlbmRlcmluZy4KICAgICBpZiAobV9hdHRyaWJ1dGVzLmhhc1ZpZXdCb3goKSAmJiBtX2F0dHJp
YnV0ZXMudmlld0JveCgpLmlzRW1wdHkoKSkKLSAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIHJl
dHVybiBudWxscHRyOwogCiAgICAgLy8gQ29tcHV0ZSBhbGwgbmVjZXNzYXJ5IHRyYW5zZm9ybWF0
aW9ucyB0byBidWlsZCB0aGUgdGlsZSBpbWFnZSAmIHRoZSBwYXR0ZXJuLgogICAgIEZsb2F0UmVj
dCB0aWxlQm91bmRhcmllczsKICAgICBBZmZpbmVUcmFuc2Zvcm0gdGlsZUltYWdlVHJhbnNmb3Jt
OwogICAgIGlmICghYnVpbGRUaWxlSW1hZ2VUcmFuc2Zvcm0ocmVuZGVyZXIsIG1fYXR0cmlidXRl
cywgcGF0dGVybkVsZW1lbnQoKSwgdGlsZUJvdW5kYXJpZXMsIHRpbGVJbWFnZVRyYW5zZm9ybSkp
Ci0gICAgICAgIHJldHVybiAwOworICAgICAgICByZXR1cm4gbnVsbHB0cjsKIAotICAgIEFmZmlu
ZVRyYW5zZm9ybSBhYnNvbHV0ZVRyYW5zZm9ybUlnbm9yaW5nUm90YXRpb247Ci0gICAgU1ZHUmVu
ZGVyaW5nQ29udGV4dDo6Y2FsY3VsYXRlVHJhbnNmb3JtYXRpb25Ub091dGVybW9zdENvb3JkaW5h
dGVTeXN0ZW0ocmVuZGVyZXIsIGFic29sdXRlVHJhbnNmb3JtSWdub3JpbmdSb3RhdGlvbik7Cisg
ICAgQWZmaW5lVHJhbnNmb3JtIGFic29sdXRlVHJhbnNmb3JtSWdub3JpbmdSb3RhdGlvbiA9IFNW
R1JlbmRlcmluZ0NvbnRleHQ6OmNhbGN1bGF0ZVRyYW5zZm9ybWF0aW9uVG9PdXRlcm1vc3RDb29y
ZGluYXRlU3lzdGVtKHJlbmRlcmVyKTsKIAogICAgIC8vIElnbm9yZSAyRCByb3RhdGlvbiwgYXMg
aXQgZG9lc24ndCBhZmZlY3QgdGhlIHNpemUgb2YgdGhlIHRpbGUuCiAgICAgU1ZHUmVuZGVyaW5n
Q29udGV4dDo6Y2xlYXIyRFJvdGF0aW9uKGFic29sdXRlVHJhbnNmb3JtSWdub3JpbmdSb3RhdGlv
bik7CkBAIC05NSwxMyArOTQsMTMgQEAgUGF0dGVybkRhdGEqIFJlbmRlclNWR1Jlc291cmNlUGF0
dGVybjo6YgogICAgICAgICBzdGF0aWNfY2FzdDxmbG9hdD4obV9hdHRyaWJ1dGVzLnBhdHRlcm5U
cmFuc2Zvcm0oKS55U2NhbGUoKSkpOwogCiAgICAgLy8gQnVpbGQgdGlsZSBpbWFnZS4KLSAgICBz
dGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXI+IHRpbGVJbWFnZSA9IGNyZWF0ZVRpbGVJbWFnZSht
X2F0dHJpYnV0ZXMsIHRpbGVCb3VuZGFyaWVzLCBhYnNvbHV0ZVRpbGVCb3VuZGFyaWVzLCB0aWxl
SW1hZ2VUcmFuc2Zvcm0sIGNsYW1wZWRBYnNvbHV0ZVRpbGVCb3VuZGFyaWVzKTsKKyAgICBhdXRv
IHRpbGVJbWFnZSA9IGNyZWF0ZVRpbGVJbWFnZShtX2F0dHJpYnV0ZXMsIHRpbGVCb3VuZGFyaWVz
LCBhYnNvbHV0ZVRpbGVCb3VuZGFyaWVzLCB0aWxlSW1hZ2VUcmFuc2Zvcm0sIGNsYW1wZWRBYnNv
bHV0ZVRpbGVCb3VuZGFyaWVzKTsKICAgICBpZiAoIXRpbGVJbWFnZSkKLSAgICAgICAgcmV0dXJu
IDA7CisgICAgICAgIHJldHVybiBudWxscHRyOwogCiAgICAgUmVmUHRyPEltYWdlPiBjb3BpZWRJ
bWFnZSA9IHRpbGVJbWFnZS0+Y29weUltYWdlKENvcHlCYWNraW5nU3RvcmUpOwogICAgIGlmICgh
Y29waWVkSW1hZ2UpCi0gICAgICAgIHJldHVybiAwOworICAgICAgICByZXR1cm4gbnVsbHB0cjsK
IAogICAgIC8vIEJ1aWxkIHBhdHRlcm4uCiAgICAgYXV0byBwYXR0ZXJuRGF0YSA9IHN0ZDo6bWFr
ZV91bmlxdWU8UGF0dGVybkRhdGE+KCk7CkBAIC0yMzMsMTEgKzIzMiw5IEBAIGJvb2wgUmVuZGVy
U1ZHUmVzb3VyY2VQYXR0ZXJuOjpidWlsZFRpbGUKIAogc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVm
ZmVyPiBSZW5kZXJTVkdSZXNvdXJjZVBhdHRlcm46OmNyZWF0ZVRpbGVJbWFnZShjb25zdCBQYXR0
ZXJuQXR0cmlidXRlcyYgYXR0cmlidXRlcywgY29uc3QgRmxvYXRSZWN0JiB0aWxlQm91bmRhcmll
cywgY29uc3QgRmxvYXRSZWN0JiBhYnNvbHV0ZVRpbGVCb3VuZGFyaWVzLCBjb25zdCBBZmZpbmVU
cmFuc2Zvcm0mIHRpbGVJbWFnZVRyYW5zZm9ybSwgRmxvYXRSZWN0JiBjbGFtcGVkQWJzb2x1dGVU
aWxlQm91bmRhcmllcykgY29uc3QKIHsKLSAgICBjbGFtcGVkQWJzb2x1dGVUaWxlQm91bmRhcmll
cyA9IFNWR1JlbmRlcmluZ0NvbnRleHQ6OmNsYW1wZWRBYnNvbHV0ZVRhcmdldFJlY3QoYWJzb2x1
dGVUaWxlQm91bmRhcmllcyk7Ci0KLSAgICBzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXI+IHRp
bGVJbWFnZTsKLQotICAgIGlmICghU1ZHUmVuZGVyaW5nQ29udGV4dDo6Y3JlYXRlSW1hZ2VCdWZm
ZXJGb3JQYXR0ZXJuKGFic29sdXRlVGlsZUJvdW5kYXJpZXMsIGNsYW1wZWRBYnNvbHV0ZVRpbGVC
b3VuZGFyaWVzLCB0aWxlSW1hZ2UsIENvbG9yU3BhY2VEZXZpY2VSR0IsIFVuYWNjZWxlcmF0ZWQp
KQorICAgIGNsYW1wZWRBYnNvbHV0ZVRpbGVCb3VuZGFyaWVzID0gSW1hZ2VCdWZmZXI6OmNsYW1w
ZWRSZWN0KGFic29sdXRlVGlsZUJvdW5kYXJpZXMpOworICAgIGF1dG8gdGlsZUltYWdlID0gU1ZH
UmVuZGVyaW5nQ29udGV4dDo6Y3JlYXRlSW1hZ2VCdWZmZXIoYWJzb2x1dGVUaWxlQm91bmRhcmll
cywgY2xhbXBlZEFic29sdXRlVGlsZUJvdW5kYXJpZXMsIENvbG9yU3BhY2VEZXZpY2VSR0IsIFVu
YWNjZWxlcmF0ZWQpOworICAgIGlmICghdGlsZUltYWdlKQogICAgICAgICByZXR1cm4gbnVsbHB0
cjsKIAogICAgIEdyYXBoaWNzQ29udGV4dCogdGlsZUltYWdlQ29udGV4dCA9IHRpbGVJbWFnZS0+
Y29udGV4dCgpOwpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdSZW5kZXJp
bmdDb250ZXh0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3Zn
L1NWR1JlbmRlcmluZ0NvbnRleHQuY3BwCShyZXZpc2lvbiAxODM3NTYpCisrKyBTb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvc3ZnL1NWR1JlbmRlcmluZ0NvbnRleHQuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0zOSw4ICszOSw2IEBACiAjaW5jbHVkZSAiU1ZHUmVzb3VyY2VzLmgiCiAjaW5jbHVkZSAi
U1ZHUmVzb3VyY2VzQ2FjaGUuaCIKIAotc3RhdGljIGludCBrTWF4SW1hZ2VCdWZmZXJTaXplID0g
NDA5NjsKLQogbmFtZXNwYWNlIFdlYkNvcmUgewogCiBzdGF0aWMgaW5saW5lIGJvb2wgaXNSZW5k
ZXJpbmdNYXNrSW1hZ2UoY29uc3QgUmVuZGVyT2JqZWN0JiBvYmplY3QpCkBAIC0yMDQsMTQgKzIw
MiwxMyBAQCBzdGF0aWMgQWZmaW5lVHJhbnNmb3JtJiBjdXJyZW50Q29udGVudFRyCiAKIGZsb2F0
IFNWR1JlbmRlcmluZ0NvbnRleHQ6OmNhbGN1bGF0ZVNjcmVlbkZvbnRTaXplU2NhbGluZ0ZhY3Rv
cihjb25zdCBSZW5kZXJPYmplY3QmIHJlbmRlcmVyKQogewotICAgIEFmZmluZVRyYW5zZm9ybSBj
dG07Ci0gICAgY2FsY3VsYXRlVHJhbnNmb3JtYXRpb25Ub091dGVybW9zdENvb3JkaW5hdGVTeXN0
ZW0ocmVuZGVyZXIsIGN0bSk7CisgICAgQWZmaW5lVHJhbnNmb3JtIGN0bSA9IGNhbGN1bGF0ZVRy
YW5zZm9ybWF0aW9uVG9PdXRlcm1vc3RDb29yZGluYXRlU3lzdGVtKHJlbmRlcmVyKTsKICAgICBy
ZXR1cm4gbmFycm93UHJlY2lzaW9uVG9GbG9hdChzcXJ0KChwb3coY3RtLnhTY2FsZSgpLCAyKSAr
IHBvdyhjdG0ueVNjYWxlKCksIDIpKSAvIDIpKTsKIH0KIAotdm9pZCBTVkdSZW5kZXJpbmdDb250
ZXh0OjpjYWxjdWxhdGVUcmFuc2Zvcm1hdGlvblRvT3V0ZXJtb3N0Q29vcmRpbmF0ZVN5c3RlbShj
b25zdCBSZW5kZXJPYmplY3QmIHJlbmRlcmVyLCBBZmZpbmVUcmFuc2Zvcm0mIGFic29sdXRlVHJh
bnNmb3JtKQorQWZmaW5lVHJhbnNmb3JtIFNWR1JlbmRlcmluZ0NvbnRleHQ6OmNhbGN1bGF0ZVRy
YW5zZm9ybWF0aW9uVG9PdXRlcm1vc3RDb29yZGluYXRlU3lzdGVtKGNvbnN0IFJlbmRlck9iamVj
dCYgcmVuZGVyZXIpCiB7Ci0gICAgYWJzb2x1dGVUcmFuc2Zvcm0gPSBjdXJyZW50Q29udGVudFRy
YW5zZm9ybWF0aW9uKCk7CisgICAgQWZmaW5lVHJhbnNmb3JtIGFic29sdXRlVHJhbnNmb3JtID0g
Y3VycmVudENvbnRlbnRUcmFuc2Zvcm1hdGlvbigpOwogCiAgICAgZmxvYXQgZGV2aWNlU2NhbGVG
YWN0b3IgPSByZW5kZXJlci5kb2N1bWVudCgpLmRldmljZVNjYWxlRmFjdG9yKCk7CiAgICAgLy8g
V2FsayB1cCB0aGUgcmVuZGVyIHRyZWUsIGFjY3VtdWxhdGluZyBTVkcgdHJhbnNmb3Jtcy4KQEAg
LTIzNyw1MyArMjM0LDUzIEBAIHZvaWQgU1ZHUmVuZGVyaW5nQ29udGV4dDo6Y2FsY3VsYXRlVHJh
bnMKICAgICB9CiAKICAgICBhYnNvbHV0ZVRyYW5zZm9ybS5zY2FsZShkZXZpY2VTY2FsZUZhY3Rv
cik7CisgICAgcmV0dXJuIGFic29sdXRlVHJhbnNmb3JtOwogfQogCi1ib29sIFNWR1JlbmRlcmlu
Z0NvbnRleHQ6OmNyZWF0ZUltYWdlQnVmZmVyKGNvbnN0IEZsb2F0UmVjdCYgdGFyZ2V0UmVjdCwg
Y29uc3QgQWZmaW5lVHJhbnNmb3JtJiBhYnNvbHV0ZVRyYW5zZm9ybSwgc3RkOjp1bmlxdWVfcHRy
PEltYWdlQnVmZmVyPiYgaW1hZ2VCdWZmZXIsIENvbG9yU3BhY2UgY29sb3JTcGFjZSwgUmVuZGVy
aW5nTW9kZSByZW5kZXJpbmdNb2RlKQorc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVyPiBTVkdS
ZW5kZXJpbmdDb250ZXh0OjpjcmVhdGVJbWFnZUJ1ZmZlcihjb25zdCBGbG9hdFJlY3QmIHRhcmdl
dFJlY3QsIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgYWJzb2x1dGVUcmFuc2Zvcm0sIENvbG9yU3Bh
Y2UgY29sb3JTcGFjZSwgUmVuZGVyaW5nTW9kZSByZW5kZXJpbmdNb2RlKQogewogICAgIEludFJl
Y3QgcGFpbnRSZWN0ID0gY2FsY3VsYXRlSW1hZ2VCdWZmZXJSZWN0KHRhcmdldFJlY3QsIGFic29s
dXRlVHJhbnNmb3JtKTsKICAgICAvLyBEb24ndCBjcmVhdGUgZW1wdHkgSW1hZ2VCdWZmZXJzLgog
ICAgIGlmIChwYWludFJlY3QuaXNFbXB0eSgpKQotICAgICAgICByZXR1cm4gZmFsc2U7CisgICAg
ICAgIHJldHVybiBudWxscHRyOwogCi0gICAgSW50U2l6ZSBjbGFtcGVkU2l6ZSA9IGNsYW1wZWRB
YnNvbHV0ZVNpemUocGFpbnRSZWN0LnNpemUoKSk7Ci0gICAgc3RkOjp1bmlxdWVfcHRyPEltYWdl
QnVmZmVyPiBpbWFnZSA9IEltYWdlQnVmZmVyOjpjcmVhdGUoY2xhbXBlZFNpemUsIDEsIGNvbG9y
U3BhY2UsIHJlbmRlcmluZ01vZGUpOwotICAgIGlmICghaW1hZ2UpCi0gICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICBGbG9hdFNpemUgc2NhbGU7CisgICAgRmxvYXRTaXplIGNsYW1wZWRTaXplID0g
SW1hZ2VCdWZmZXI6OmNsYW1wZWRTaXplKHBhaW50UmVjdC5zaXplKCksIHNjYWxlKTsKIAotICAg
IEdyYXBoaWNzQ29udGV4dCogaW1hZ2VDb250ZXh0ID0gaW1hZ2UtPmNvbnRleHQoKTsKLSAgICBB
U1NFUlQoaW1hZ2VDb250ZXh0KTsKKyAgICBhdXRvIGltYWdlQnVmZmVyID0gSW1hZ2VCdWZmZXI6
OmNyZWF0ZShjbGFtcGVkU2l6ZSwgMSwgY29sb3JTcGFjZSwgcmVuZGVyaW5nTW9kZSk7CisgICAg
aWYgKCFpbWFnZUJ1ZmZlcikKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAKLSAgICBpbWFnZUNv
bnRleHQtPnNjYWxlKEZsb2F0U2l6ZShzdGF0aWNfY2FzdDxmbG9hdD4oY2xhbXBlZFNpemUud2lk
dGgoKSkgLyBwYWludFJlY3Qud2lkdGgoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBzdGF0aWNfY2FzdDxmbG9hdD4oY2xhbXBlZFNpemUuaGVpZ2h0KCkpIC8gcGFpbnRSZWN0
LmhlaWdodCgpKSk7Ci0gICAgaW1hZ2VDb250ZXh0LT50cmFuc2xhdGUoLXBhaW50UmVjdC54KCks
IC1wYWludFJlY3QueSgpKTsKLSAgICBpbWFnZUNvbnRleHQtPmNvbmNhdENUTShhYnNvbHV0ZVRy
YW5zZm9ybSk7CisgICAgQWZmaW5lVHJhbnNmb3JtIHRyYW5zZm9ybTsKKyAgICB0cmFuc2Zvcm0u
c2NhbGUoc2NhbGUpLnRyYW5zbGF0ZSgtcGFpbnRSZWN0LmxvY2F0aW9uKCkpLm11bHRpcGx5KGFi
c29sdXRlVHJhbnNmb3JtKTsKIAotICAgIGltYWdlQnVmZmVyID0gV1RGOjptb3ZlKGltYWdlKTsK
LSAgICByZXR1cm4gdHJ1ZTsKKyAgICBHcmFwaGljc0NvbnRleHQqIGltYWdlQ29udGV4dCA9IGlt
YWdlQnVmZmVyLT5jb250ZXh0KCk7CisgICAgQVNTRVJUKGltYWdlQ29udGV4dCk7CisgICAgaW1h
Z2VDb250ZXh0LT5jb25jYXRDVE0odHJhbnNmb3JtKTsKKworICAgIHJldHVybiBpbWFnZUJ1ZmZl
cjsKIH0KIAotYm9vbCBTVkdSZW5kZXJpbmdDb250ZXh0OjpjcmVhdGVJbWFnZUJ1ZmZlckZvclBh
dHRlcm4oY29uc3QgRmxvYXRSZWN0JiBhYnNvbHV0ZVRhcmdldFJlY3QsIGNvbnN0IEZsb2F0UmVj
dCYgY2xhbXBlZEFic29sdXRlVGFyZ2V0UmVjdCwgc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVy
PiYgaW1hZ2VCdWZmZXIsIENvbG9yU3BhY2UgY29sb3JTcGFjZSwgUmVuZGVyaW5nTW9kZSByZW5k
ZXJpbmdNb2RlKQorc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVyPiBTVkdSZW5kZXJpbmdDb250
ZXh0OjpjcmVhdGVJbWFnZUJ1ZmZlcihjb25zdCBGbG9hdFJlY3QmIHRhcmdldFJlY3QsIGNvbnN0
IEZsb2F0UmVjdCYgY2xhbXBlZFJlY3QsIENvbG9yU3BhY2UgY29sb3JTcGFjZSwgUmVuZGVyaW5n
TW9kZSByZW5kZXJpbmdNb2RlKQogewotICAgIEludFNpemUgaW1hZ2VTaXplKHJvdW5kZWRJbnRT
aXplKGNsYW1wZWRBYnNvbHV0ZVRhcmdldFJlY3Quc2l6ZSgpKSk7Ci0gICAgSW50U2l6ZSB1bmNs
YW1wZWRJbWFnZVNpemUocm91bmRlZEludFNpemUoYWJzb2x1dGVUYXJnZXRSZWN0LnNpemUoKSkp
OworICAgIEludFNpemUgY2xhbXBlZFNpemUgPSByb3VuZGVkSW50U2l6ZShjbGFtcGVkUmVjdC5z
aXplKCkpOworICAgIEludFNpemUgdW5jbGFtcGVkU2l6ZSA9IHJvdW5kZWRJbnRTaXplKHRhcmdl
dFJlY3Quc2l6ZSgpKTsKIAogICAgIC8vIERvbid0IGNyZWF0ZSBlbXB0eSBJbWFnZUJ1ZmZlcnMu
Ci0gICAgaWYgKGltYWdlU2l6ZS5pc0VtcHR5KCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKKyAg
ICBpZiAoY2xhbXBlZFNpemUuaXNFbXB0eSgpKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKIAot
ICAgIHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlcj4gaW1hZ2UgPSBJbWFnZUJ1ZmZlcjo6Y3Jl
YXRlKGltYWdlU2l6ZSwgMSwgY29sb3JTcGFjZSwgcmVuZGVyaW5nTW9kZSk7Ci0gICAgaWYgKCFp
bWFnZSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGF1dG8gaW1hZ2VCdWZmZXIgPSBJbWFn
ZUJ1ZmZlcjo6Y3JlYXRlKGNsYW1wZWRTaXplLCAxLCBjb2xvclNwYWNlLCByZW5kZXJpbmdNb2Rl
KTsKKyAgICBpZiAoIWltYWdlQnVmZmVyKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKIAotICAg
IEdyYXBoaWNzQ29udGV4dCogaW1hZ2VDb250ZXh0ID0gaW1hZ2UtPmNvbnRleHQoKTsKKyAgICBH
cmFwaGljc0NvbnRleHQqIGltYWdlQ29udGV4dCA9IGltYWdlQnVmZmVyLT5jb250ZXh0KCk7CiAg
ICAgQVNTRVJUKGltYWdlQ29udGV4dCk7CiAKICAgICAvLyBDb21wZW5zYXRlIHJvdW5kaW5nIGVm
ZmVjdHMsIGFzIHRoZSBhYnNvbHV0ZSB0YXJnZXQgcmVjdCBpcyB1c2luZyBmbG9hdGluZy1wb2lu
dCBudW1iZXJzIGFuZCB0aGUgaW1hZ2UgYnVmZmVyIHNpemUgaXMgaW50ZWdlci4KLSAgICBpbWFn
ZUNvbnRleHQtPnNjYWxlKEZsb2F0U2l6ZSh1bmNsYW1wZWRJbWFnZVNpemUud2lkdGgoKSAvIGFi
c29sdXRlVGFyZ2V0UmVjdC53aWR0aCgpLCB1bmNsYW1wZWRJbWFnZVNpemUuaGVpZ2h0KCkgLyBh
YnNvbHV0ZVRhcmdldFJlY3QuaGVpZ2h0KCkpKTsKKyAgICBpbWFnZUNvbnRleHQtPnNjYWxlKEZs
b2F0U2l6ZSh1bmNsYW1wZWRTaXplLndpZHRoKCkgLyB0YXJnZXRSZWN0LndpZHRoKCksIHVuY2xh
bXBlZFNpemUuaGVpZ2h0KCkgLyB0YXJnZXRSZWN0LmhlaWdodCgpKSk7CiAKLSAgICBpbWFnZUJ1
ZmZlciA9IFdURjo6bW92ZShpbWFnZSk7Ci0gICAgcmV0dXJuIHRydWU7CisgICAgcmV0dXJuIGlt
YWdlQnVmZmVyOwogfQogCiB2b2lkIFNWR1JlbmRlcmluZ0NvbnRleHQ6OnJlbmRlclN1YnRyZWVU
b0ltYWdlQnVmZmVyKEltYWdlQnVmZmVyKiBpbWFnZSwgUmVuZGVyRWxlbWVudCYgaXRlbSwgY29u
c3QgQWZmaW5lVHJhbnNmb3JtJiBzdWJ0cmVlQ29udGVudFRyYW5zZm9ybWF0aW9uKQpAQCAtMzIy
LDE4ICszMTksNiBAQCB2b2lkIFNWR1JlbmRlcmluZ0NvbnRleHQ6OmNsaXBUb0ltYWdlQnVmCiAg
ICAgICAgIGltYWdlQnVmZmVyLnJlc2V0KCk7CiB9CiAKLUZsb2F0UmVjdCBTVkdSZW5kZXJpbmdD
b250ZXh0OjpjbGFtcGVkQWJzb2x1dGVUYXJnZXRSZWN0KGNvbnN0IEZsb2F0UmVjdCYgYWJzb2x1
dGVUYXJnZXRSZWN0KQotewotICAgIGNvbnN0IEZsb2F0U2l6ZSBtYXhJbWFnZUJ1ZmZlclNpemUo
a01heEltYWdlQnVmZmVyU2l6ZSwga01heEltYWdlQnVmZmVyU2l6ZSk7Ci0gICAgcmV0dXJuIEZs
b2F0UmVjdChhYnNvbHV0ZVRhcmdldFJlY3QubG9jYXRpb24oKSwgYWJzb2x1dGVUYXJnZXRSZWN0
LnNpemUoKS5zaHJ1bmtUbyhtYXhJbWFnZUJ1ZmZlclNpemUpKTsKLX0KLQotSW50U2l6ZSBTVkdS
ZW5kZXJpbmdDb250ZXh0OjpjbGFtcGVkQWJzb2x1dGVTaXplKGNvbnN0IEludFNpemUmIGFic29s
dXRlU2l6ZSkKLXsKLSAgICBjb25zdCBJbnRTaXplIG1heEltYWdlQnVmZmVyU2l6ZShrTWF4SW1h
Z2VCdWZmZXJTaXplLCBrTWF4SW1hZ2VCdWZmZXJTaXplKTsKLSAgICByZXR1cm4gYWJzb2x1dGVT
aXplLnNocnVua1RvKG1heEltYWdlQnVmZmVyU2l6ZSk7Ci19Ci0KIHZvaWQgU1ZHUmVuZGVyaW5n
Q29udGV4dDo6Y2xlYXIyRFJvdGF0aW9uKEFmZmluZVRyYW5zZm9ybSYgdHJhbnNmb3JtKQogewog
ICAgIEFmZmluZVRyYW5zZm9ybTo6RGVjb21wb3NlZFR5cGUgZGVjb21wb3NpdGlvbjsKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHUmVuZGVyaW5nQ29udGV4dC5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHUmVuZGVyaW5nQ29udGV4
dC5oCShyZXZpc2lvbiAxODM3NTYpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NW
R1JlbmRlcmluZ0NvbnRleHQuaAkod29ya2luZyBjb3B5KQpAQCAtNzEsMTcgKzcxLDE0IEBAIHB1
YmxpYzoKICAgICB2b2lkIHByZXBhcmVUb1JlbmRlclNWR0NvbnRlbnQoUmVuZGVyRWxlbWVudCYs
IFBhaW50SW5mbyYsIE5lZWRzR3JhcGhpY3NDb250ZXh0U2F2ZSA9IERvbnRTYXZlR3JhcGhpY3ND
b250ZXh0KTsKICAgICBib29sIGlzUmVuZGVyaW5nUHJlcGFyZWQoKSBjb25zdCB7IHJldHVybiBt
X3JlbmRlcmluZ0ZsYWdzICYgUmVuZGVyaW5nUHJlcGFyZWQ7IH0KIAotICAgIHN0YXRpYyBib29s
IGNyZWF0ZUltYWdlQnVmZmVyKGNvbnN0IEZsb2F0UmVjdCYgcGFpbnRSZWN0LCBjb25zdCBBZmZp
bmVUcmFuc2Zvcm0mIGFic29sdXRlVHJhbnNmb3JtLCBzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZm
ZXI+JiwgQ29sb3JTcGFjZSwgUmVuZGVyaW5nTW9kZSk7Ci0gICAgLy8gUGF0dGVybnMgbmVlZCBh
IGRpZmZlcmVudCBmbG9hdC10by1pbnRlZ2VyIGNvb3JkaW5hdGUgbWFwcGluZy4KLSAgICBzdGF0
aWMgYm9vbCBjcmVhdGVJbWFnZUJ1ZmZlckZvclBhdHRlcm4oY29uc3QgRmxvYXRSZWN0JiBhYnNv
bHV0ZVRhcmdldFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgY2xhbXBlZEFic29sdXRlVGFyZ2V0UmVj
dCwgc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVyPiYsIENvbG9yU3BhY2UsIFJlbmRlcmluZ01v
ZGUpOworICAgIHN0YXRpYyBzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXI+IGNyZWF0ZUltYWdl
QnVmZmVyKGNvbnN0IEZsb2F0UmVjdCYgdGFyZ2V0UmVjdCwgY29uc3QgQWZmaW5lVHJhbnNmb3Jt
JiBhYnNvbHV0ZVRyYW5zZm9ybSwgQ29sb3JTcGFjZSwgUmVuZGVyaW5nTW9kZSk7CisgICAgc3Rh
dGljIHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlcj4gY3JlYXRlSW1hZ2VCdWZmZXIoY29uc3Qg
RmxvYXRSZWN0JiB0YXJnZXRSZWN0LCBjb25zdCBGbG9hdFJlY3QmIGNsYW1wZWRSZWN0LCBDb2xv
clNwYWNlLCBSZW5kZXJpbmdNb2RlKTsKIAogICAgIHN0YXRpYyB2b2lkIHJlbmRlclN1YnRyZWVU
b0ltYWdlQnVmZmVyKEltYWdlQnVmZmVyKiwgUmVuZGVyRWxlbWVudCYsIGNvbnN0IEFmZmluZVRy
YW5zZm9ybSYpOwogICAgIHN0YXRpYyB2b2lkIGNsaXBUb0ltYWdlQnVmZmVyKEdyYXBoaWNzQ29u
dGV4dCosIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgYWJzb2x1dGVUcmFuc2Zvcm0sIGNvbnN0IEZs
b2F0UmVjdCYgdGFyZ2V0UmVjdCwgc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVyPiYsIGJvb2wg
c2FmZVRvQ2xlYXIpOwogCiAgICAgc3RhdGljIGZsb2F0IGNhbGN1bGF0ZVNjcmVlbkZvbnRTaXpl
U2NhbGluZ0ZhY3Rvcihjb25zdCBSZW5kZXJPYmplY3QmKTsKLSAgICBzdGF0aWMgdm9pZCBjYWxj
dWxhdGVUcmFuc2Zvcm1hdGlvblRvT3V0ZXJtb3N0Q29vcmRpbmF0ZVN5c3RlbShjb25zdCBSZW5k
ZXJPYmplY3QmLCBBZmZpbmVUcmFuc2Zvcm0mIGFic29sdXRlVHJhbnNmb3JtKTsKLSAgICBzdGF0
aWMgSW50U2l6ZSBjbGFtcGVkQWJzb2x1dGVTaXplKGNvbnN0IEludFNpemUmKTsKLSAgICBzdGF0
aWMgRmxvYXRSZWN0IGNsYW1wZWRBYnNvbHV0ZVRhcmdldFJlY3QoY29uc3QgRmxvYXRSZWN0JiBh
YnNvbHV0ZVRhcmdldFJlY3QpOworICAgIHN0YXRpYyBBZmZpbmVUcmFuc2Zvcm0gY2FsY3VsYXRl
VHJhbnNmb3JtYXRpb25Ub091dGVybW9zdENvb3JkaW5hdGVTeXN0ZW0oY29uc3QgUmVuZGVyT2Jq
ZWN0Jik7CiAgICAgc3RhdGljIHZvaWQgY2xlYXIyRFJvdGF0aW9uKEFmZmluZVRyYW5zZm9ybSYp
OwogCiAgICAgc3RhdGljIEludFJlY3QgY2FsY3VsYXRlSW1hZ2VCdWZmZXJSZWN0KGNvbnN0IEZs
b2F0UmVjdCYgdGFyZ2V0UmVjdCwgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiBhYnNvbHV0ZVRyYW5z
Zm9ybSkKSW5kZXg6IExheW91dFRlc3RzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRU
ZXN0cy9DaGFuZ2VMb2cJKHJldmlzaW9uIDE4Mzg5OSkKKysrIExheW91dFRlc3RzL0NoYW5nZUxv
Zwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE1IEBACisyMDE1LTA1LTA2ICBTYWlkIEFib3Ut
SGFsbGF3YSAgPHNhYm91aGFsbGF3YUBhcHBsZS5jb20+CisKKyAgICAgICAgQXBwbHlpbmcgYSBm
aWx0ZXIgb24gYW4gU1ZHIGVsZW1lbnQsIHdoaWNoIGlzIGxhcmdlciB0aGFuIDQwOTYgcGl4ZWxz
LCBjYXVzZXMgdGhpcyBlbGVtZW50IHRvIGJlIHJlbmRlcmVkIHNoaWZ0ZWQgdG8gdGhlIGxlZnQK
KyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE0NDMzNQor
CisgICAgICAgIFJldmlld2VkIGJ5IERhcmluIEFkbGVyLgorCisgICAgICAgICogc3ZnL2ZpbHRl
cnMvYmlnLXNpemVkLW9mZi12aWV3cG9ydC1maWx0ZXItZXhwZWN0ZWQuc3ZnOiBBZGRlZC4KKyAg
ICAgICAgKiBzdmcvZmlsdGVycy9iaWctc2l6ZWQtb2ZmLXZpZXdwb3J0LWZpbHRlci5zdmc6IEFk
ZGVkLgorICAgICAgICBFbnN1cmUgd2hlbiBhcHBseWluZyBhIGZpbHRlciBvbiBhIGxhcmdlIFNW
RyBlbGVtZW50LCB0aGUgdmlld3BvcnQgb2YgdGhlCisgICAgICAgIFNWRyBpbmNsdWRlcyB0aGUg
Y29ycmVjdCBkcmF3aW5nIHBhcnQgb2YgdGhpcyBlbGVtZW50LgorCiAyMDE1LTA1LTA2ICBKb24g
TGVlICA8am9ubGVlQGFwcGxlLmNvbT4KIAogICAgICAgICBFeHBvc2UgbW9yZSBmb250IHdlaWdo
dHMgZm9yIC1hcHBsZS1zeXN0ZW0KSW5kZXg6IExheW91dFRlc3RzL3N2Zy9maWx0ZXJzL2JpZy1z
aXplZC1vZmYtdmlld3BvcnQtZmlsdGVyLWV4cGVjdGVkLnN2Zwo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlv
dXRUZXN0cy9zdmcvZmlsdGVycy9iaWctc2l6ZWQtb2ZmLXZpZXdwb3J0LWZpbHRlci1leHBlY3Rl
ZC5zdmcJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9zdmcvZmlsdGVycy9iaWctc2l6ZWQt
b2ZmLXZpZXdwb3J0LWZpbHRlci1leHBlY3RlZC5zdmcJKHdvcmtpbmcgY29weSkKQEAgLTAsMCAr
MSwxMCBAQAorPHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9
IjAgMCAxMDAwIDUwMCI+CisgIDxmaWx0ZXIgaWQ9InNhdHVyYXRlLWJhY2siPgorICAgIDxmZUNv
bG9yTWF0cml4IGluPSJTb3VyY2VHcmFwaGljIiB0eXBlPSJzYXR1cmF0ZSIgdmFsdWVzPSIxIi8+
CisgIDwvZmlsdGVyPgorICA8ZyBmaWx0ZXI9InVybCgjc2F0dXJhdGUtYmFjaykiPgorICAgIDxy
ZWN0IHg9Ii01MDAiIHk9IjAiIHdpZHRoPSI5NTAiIGhlaWdodD0iMTAwJSIgZmlsbD0iZ3JlZW4i
Lz4KKyAgICA8cmVjdCB4PSI1NTAiIHk9IjAiIHdpZHRoPSI5NTAiIGhlaWdodD0iMTAwJSIgZmls
bD0iZ3JlZW4iLz4KKyAgPC9nPgorICA8cmVjdCB4PSI0NTAiIHk9IjAiIHdpZHRoPSIxMDAiIGhl
aWdodD0iMTAwJSIgZmlsbD0ibm9uZSIgc3Ryb2tlPSJ3aGl0ZSIgc3Ryb2tlLXdpZHRoPSIxMCIv
PgorPC9zdmc+CkluZGV4OiBMYXlvdXRUZXN0cy9zdmcvZmlsdGVycy9iaWctc2l6ZWQtb2ZmLXZp
ZXdwb3J0LWZpbHRlci5zdmcKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvc3ZnL2ZpbHRlcnMv
YmlnLXNpemVkLW9mZi12aWV3cG9ydC1maWx0ZXIuc3ZnCShyZXZpc2lvbiAwKQorKysgTGF5b3V0
VGVzdHMvc3ZnL2ZpbHRlcnMvYmlnLXNpemVkLW9mZi12aWV3cG9ydC1maWx0ZXIuc3ZnCSh3b3Jr
aW5nIGNvcHkpCkBAIC0wLDAgKzEsMTEgQEAKKzxzdmcgeG1sbnM9Imh0dHA6Ly93d3cudzMub3Jn
LzIwMDAvc3ZnIiB2aWV3Qm94PSIwIDAgMTAwMCA1MDAiPgorICA8ZmlsdGVyIGlkPSJzYXR1cmF0
ZS1iYWNrIj4KKyAgICA8ZmVDb2xvck1hdHJpeCBpbj0iU291cmNlR3JhcGhpYyIgdHlwZT0ic2F0
dXJhdGUiIHZhbHVlcz0iMSIvPgorICA8L2ZpbHRlcj4KKyAgPGcgZmlsdGVyPSJ1cmwoI3NhdHVy
YXRlLWJhY2spIj4KKyAgICA8cmVjdCB4PSItMzUwMCIgeT0iMCIgd2lkdGg9IjM5NTAiIGhlaWdo
dD0iMTAwJSIgZmlsbD0iZ3JlZW4iLz4KKyAgICA8cmVjdCB4PSI1NTAiIHk9IjAiIHdpZHRoPSIz
OTUwIiBoZWlnaHQ9IjEwMCUiIGZpbGw9ImdyZWVuIi8+CisgIDwvZz4KKyAgPCEtLSBFbnN1cmUg
dGhlIGVkZ2VzIG9mIHRoZSByZWN0YW5nbGVzIGFyZSBzaGFycCBhZnRlciBjbGFtcGluZyB0aGUg
ZmlsdGVyIGltYWdlIGFuZCBzY2FsaW5nIGl0IHVwIC0tPgorICA8cmVjdCB4PSI0NTAiIHk9IjAi
IHdpZHRoPSIxMDAiIGhlaWdodD0iMTAwJSIgZmlsbD0ibm9uZSIgc3Ryb2tlPSJ3aGl0ZSIgc3Ry
b2tlLXdpZHRoPSIxMCIvPgorPC9zdmc+Cg==
</data>

          </attachment>
      

    </bug>

</bugzilla>