<?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>49907</bug_id>
          
          <creation_ts>2010-11-22 06:50:08 -0800</creation_ts>
          <short_desc>Better result passing in filter primitives</short_desc>
          <delta_ts>2010-12-13 02:45:51 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>SVG</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>PC</rep_platform>
          <op_sys>OS X 10.5</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Zoltan Herczeg">zherczeg</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>krit</cc>
    
    <cc>mdelaney7</cc>
    
    <cc>oliver</cc>
    
    <cc>simon.fraser</cc>
    
    <cc>webkit.review.bot</cc>
    
    <cc>zimmermann</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>312321</commentid>
    <comment_count>0</comment_count>
    <who name="Zoltan Herczeg">zherczeg</who>
    <bug_when>2010-11-22 06:50:08 -0800</bug_when>
    <thetext>Filter primitives always converts their result to image buffer, and getting the image from it. This is really expensive operation on some ports, especially on Qt. I have started to work on a better result passing behaviour. The patch is highly conceptual, not finished, etc., but you can see what I plan to do. What is your opinion about this approach?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>312322</commentid>
    <comment_count>1</comment_count>
      <attachid>74548</attachid>
    <who name="Zoltan Herczeg">zherczeg</who>
    <bug_when>2010-11-22 06:50:35 -0800</bug_when>
    <thetext>Created attachment 74548
concept</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>312334</commentid>
    <comment_count>2</comment_count>
    <who name="Dirk Schulze">krit</who>
    <bug_when>2010-11-22 07:23:39 -0800</bug_when>
    <thetext>In general I think this is a great idea! But I couldn&apos;t look into detail. Reading your patch tis evening. But the idea sounds great.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>312812</commentid>
    <comment_count>3</comment_count>
      <attachid>74657</attachid>
    <who name="Zoltan Herczeg">zherczeg</who>
    <bug_when>2010-11-23 06:42:53 -0800</bug_when>
    <thetext>Created attachment 74657
updated concept

Working on small tests (hopefully mostly finished). Would like to hear your opinion.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>312902</commentid>
    <comment_count>4</comment_count>
      <attachid>74657</attachid>
    <who name="Dirk Schulze">krit</who>
    <bug_when>2010-11-23 10:01:48 -0800</bug_when>
    <thetext>Comment on attachment 74657
updated concept

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

Even if I really like the idea, I fear that we and up with 3 image results per FilterEffect. But of course I see the performance win. But we also have to think about hardware acceleration. Some platforms support effects directly and I always saw the software rendering as a fallback if a platform does not support one or more effects. Eg on a Mac we can emulate all effects, on Skia and OpenVG we can at least emulate many effects, while we don&apos;t have effects on Qt and Cairo _yet_! At the moment every FilterEffect just has the ImageBuffer and the absolutePaintRect, so that it should be possible to replace some effects by platform effects and use the fallback on other ones. If we use your design, it will be much harder and maybe impossible to use platform effects. And I bet even Cairo and Qt will implement effects sooner or later. Do you have some proposals?

&gt; WebCore/platform/graphics/filters/FEComposite.cpp:150
&gt; +    GraphicsContext* filterContext = resultImage-&gt;context();

return if a filterContext does not exist. Make sure thet this-&gt;hasResult does not return true.

&gt; WebCore/platform/graphics/filters/FEConvolveMatrix.cpp:396
&gt; +    RefPtr&lt;ImageData&gt; imageData = ImageData::create(absolutePaintRect().width(), absolutePaintRect().height());

Save absolutePaintRect().size() locally.

&gt; WebCore/platform/graphics/filters/FEDisplacementMap.cpp:112
&gt; +    int stride = absolutePaintRect().width() * 4;

is it better to save absolutePaintRect() in a local variable here?

&gt; WebCore/platform/graphics/filters/FEFlood.cpp:72
&gt; +    resultImage-&gt;context()-&gt;fillRect(FloatRect(FloatPoint(), absolutePaintRect().size()), color, ColorSpaceDeviceRGB);

Make sure that getting the context was successful.

&gt; WebCore/platform/graphics/filters/FEGaussianBlur.cpp:209
&gt; +            boxBlur(tmpPixelArray, srcPixelArray, kernelSizeY, dyLeft, dyRight, stride, 4, absolutePaintRect().height(), absolutePaintRect().width(), isAlphaImage());

Save absolutePaintRect() in a local variable

&gt; WebCore/platform/graphics/filters/FEOffset.cpp:91
&gt; +    resultImage-&gt;context()-&gt;drawImageBuffer(in-&gt;asImageBuffer(), ColorSpaceDeviceRGB, drawingRegion);

check for the context first.

&gt; WebCore/platform/graphics/filters/FETile.cpp:83
&gt; +    resultImage-&gt;context()-&gt;setFillPattern(pattern);

Ditto.

&gt; WebCore/platform/graphics/filters/FETurbulence.cpp:327
&gt; +    if (!absolutePaintRect().width() || !absolutePaintRect().height())

save the size of absolutePaintRect in a local variable

&gt; WebCore/platform/graphics/filters/FilterEffect.cpp:104
&gt; +inline void FilterEffect::copyImageBytes(ImageData* dst, ImageData* src, const IntRect&amp; rect)

just a minor detail, can you switch src an dst, please? :-)

&gt; WebCore/platform/graphics/filters/FilterEffect.cpp:107
&gt; +    ASSERT(dst-&gt;width() == rect.width() &amp;&amp; dst-&gt;height() == rect.height());

don&apos;t we have an operator== for IntSize? I&apos;d prefer IntSize(dst-&gt;width(), dst-&gt;height()) == rect.size() Why don&apos;t we have a IntSize for ImageData? Could you take a look at it?

&gt; WebCore/platform/graphics/filters/FilterEffect.cpp:172
&gt; +            m_unmultipliedImageResult = m_imageBufferResult-&gt;getUnmultipliedImageData(IntRect(IntPoint(), m_absolutePaintRect.size()));

I guess it really depends on the platform if it is faster to do it manually here. Some platforms just copy the data. Can you take a look at this again please?

&gt; WebCore/platform/graphics/filters/FilterEffect.cpp:198
&gt; +            m_premultipliedImageResult = m_imageBufferResult-&gt;getPremultipliedImageData(IntRect(IntPoint(), m_absolutePaintRect.size()));

Ditto.

&gt; WebCore/platform/graphics/filters/SourceGraphic.cpp:59
&gt; +    resultImage-&gt;context()-&gt;drawImageBuffer(filter-&gt;sourceImage(), ColorSpaceDeviceRGB, IntPoint());

I&apos;m really unsure if it can happen that a GC doesn&apos;t exist while the ImageBuffer does. Is it absolutely save? Can check this please? You&apos;re using this pattern on quite some other places.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>312911</commentid>
    <comment_count>5</comment_count>
    <who name="Zoltan Herczeg">zherczeg</who>
    <bug_when>2010-11-23 10:31:22 -0800</bug_when>
    <thetext>&gt; Even if I really like the idea, I fear that we and up with 3 image results per FilterEffect. But of course I see the performance win. But we also have to think about hardware acceleration. 

I have no strong opinion here. I know most filters (light, turbulence, gaussian blur, morphology, convolve matrix, displacement) will never be hw accelerated except the simplest ones (offset, merge). And yeah, we can have 3 results for each filters, although the filter itself only creates one, and the others are created on demand. But you should decide whether it is worth to work on this project. That is why I submit conceptual patches, since if this is not a good idea, at least I don&apos;t have to spend full days working on it.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>312923</commentid>
    <comment_count>6</comment_count>
    <who name="Dirk Schulze">krit</who>
    <bug_when>2010-11-23 10:48:25 -0800</bug_when>
    <thetext>(In reply to comment #5)
&gt; &gt; Even if I really like the idea, I fear that we and up with 3 image results per FilterEffect. But of course I see the performance win. But we also have to think about hardware acceleration. 
&gt; 
&gt; I have no strong opinion here. I know most filters (light, turbulence, gaussian blur, morphology, convolve matrix, displacement) will never be hw accelerated except the simplest ones (offset, merge). And yeah, we can have 3 results for each filters, although the filter itself only creates one, and the others are created on demand. But you should decide whether it is worth to work on this project. That is why I submit conceptual patches, since if this is not a good idea, at least I don&apos;t have to spend full days working on it.

Yes, thanks for the great proposal, but maybe others should also comment on this bug.

To the hwa. I know of OpenVG that they support fast filter effects for gaussian blur and convolve matrix, not sure how they calculate it. But I wouldn&apos;t say for sure that they can&apos;t be faster with hwa :-)
And I&apos;m pretty sure that these filter can be a lot faster on a GPU because they are very good to parallelize.

Adding Simon and Oliver, since hwa is not my field of knowledge.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>313159</commentid>
    <comment_count>7</comment_count>
    <who name="Zoltan Herczeg">zherczeg</who>
    <bug_when>2010-11-24 00:31:31 -0800</bug_when>
    <thetext>If we ever want to support hw accelerators, they would require a special code path (specialized apply functions), and we need to write specialized code for them. Thus, this could be a sw rendering (SMP accelerated) code path, which could be enabled by compiler directives. The 3 new functions can fallback to the original ImageBuffer based implementations when we don&apos;t want to use these buffers in a mixed (sh/hw accelerated) environment.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>313241</commentid>
    <comment_count>8</comment_count>
    <who name="Dirk Schulze">krit</who>
    <bug_when>2010-11-24 05:09:24 -0800</bug_when>
    <thetext>(In reply to comment #7)
&gt; If we ever want to support hw accelerators, they would require a special code path (specialized apply functions), and we need to write specialized code for them. Thus, this could be a sw rendering (SMP accelerated) code path, which could be enabled by compiler directives. The 3 new functions can fallback to the original ImageBuffer based implementations when we don&apos;t want to use these buffers in a mixed (sh/hw accelerated) environment.

Talked about this topic with zherzeg on IRC. It should still be possible to combine HW and SW rendering if needed. The ImageBuffer is always accessible like it is right now.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>313242</commentid>
    <comment_count>9</comment_count>
    <who name="Zoltan Herczeg">zherczeg</who>
    <bug_when>2010-11-24 05:13:43 -0800</bug_when>
    <thetext>&gt; &gt; WebCore/platform/graphics/filters/FEComposite.cpp:150
&gt; &gt; +    GraphicsContext* filterContext = resultImage-&gt;context();
&gt; 
&gt; return if a filterContext does not exist. Make sure thet this-&gt;hasResult does not return true.

Thinking about this. Is it possible, that the image is allocated, but the context is not? Anyway, I would add this check to FilterEffect::createImageBufferResult() (All filters, which allocates an imageBuffer will use the context!) An ASSERT(!hasResult()) added to all create.*Result functions.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>313673</commentid>
    <comment_count>10</comment_count>
      <attachid>74848</attachid>
    <who name="Zoltan Herczeg">zherczeg</who>
    <bug_when>2010-11-25 03:45:28 -0800</bug_when>
    <thetext>Created attachment 74848
patch

This patch is tested and working (On mac leopard with -p and --tolerance 0).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>314088</commentid>
    <comment_count>11</comment_count>
      <attachid>74848</attachid>
    <who name="Dirk Schulze">krit</who>
    <bug_when>2010-11-26 13:20:41 -0800</bug_when>
    <thetext>Comment on attachment 74848
patch

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

The style bot is red, did you check the style manually on your machine?

&gt; WebCore/platform/graphics/filters/FEGaussianBlur.cpp:179
&gt; +    in-&gt;asPremultipliedImage(resultImage, effectDrawingRect);

Can you explain how this works? the resultImage is possibly larger than the sourceImage, in every direction. How do you copy the data to the resultImage?

&gt; WebCore/platform/graphics/filters/FEGaussianBlur.cpp:192
&gt; +    RefPtr&lt;ImageData&gt; tmpImageData = ImageData::create(absolutePaintRect().width(), absolutePaintRect().height());
&gt;      ByteArray* tmpPixelArray = tmpImageData-&gt;data()-&gt;data();
&gt;  
&gt; -    int stride = 4 * imageRect.width();
&gt; +    IntSize paintSize = absolutePaintRect().size();

Can you move the intsize some line above and replace the absolutePainRect() calls?

&gt; WebCore/platform/graphics/filters/FETile.cpp:84
&gt; +    resultImage-&gt;context()-&gt;setFillPattern(pattern);
&gt; +    resultImage-&gt;context()-&gt;fillRect(FloatRect(FloatPoint(), absolutePaintRect().size()));

save context in a local var before using it here.

&gt; WebCore/platform/graphics/filters/FilterEffect.cpp:78
&gt; +    // This function is allowed to return with NULL.

I think this sentence is unnecessary.

&gt; WebCore/platform/graphics/filters/FilterEffect.cpp:94
&gt; +    PassRefPtr&lt;ImageData&gt; imageData = ImageData::create(rect.width(), rect.height());

You have to take the ownership first: RefPtr&lt;ImageData&gt;

&gt; WebCore/platform/graphics/filters/FilterEffect.cpp:101
&gt; +    PassRefPtr&lt;ImageData&gt; imageData = ImageData::create(rect.width(), rect.height());

Ditto.

&gt; WebCore/platform/graphics/filters/FilterEffect.cpp:223
&gt; +    if (!m_imageBufferResult-&gt;context()) {
&gt; +        // All filter effects, which allocates an imageBufferResult
&gt; +        // will use its context. If we would not destroy the image here
&gt; +        // the filter would return a black rectangle, which is not desired.
&gt; +        // (I would prefer an ASSERT here, since I think the context must be exists)
&gt; +        m_imageBufferResult.clear();
&gt; +    }

I agree. ;)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>314285</commentid>
    <comment_count>12</comment_count>
      <attachid>74995</attachid>
    <who name="Zoltan Herczeg">zherczeg</who>
    <bug_when>2010-11-29 00:56:21 -0800</bug_when>
    <thetext>Created attachment 74995
patch 2

Fixed everything.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>314288</commentid>
    <comment_count>13</comment_count>
    <who name="Zoltan Herczeg">zherczeg</who>
    <bug_when>2010-11-29 01:02:21 -0800</bug_when>
    <thetext>&gt; Can you explain how this works? the resultImage is possibly larger than the sourceImage, in every direction. How do you copy the data to the resultImage?

Same way as get/put pre/unmultiplied data-s. If the rect is bigger than the source area, it fills with 0 first (transparent black pixels).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>314297</commentid>
    <comment_count>14</comment_count>
    <who name="Zoltan Herczeg">zherczeg</who>
    <bug_when>2010-11-29 01:24:02 -0800</bug_when>
    <thetext>&gt; The style bot is red, did you check the style manually on your machine?

No idea about this. It did not report an error, and now it is green... Perhaps an internal error?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>314556</commentid>
    <comment_count>15</comment_count>
      <attachid>74995</attachid>
    <who name="Nikolas Zimmermann">zimmermann</who>
    <bug_when>2010-11-29 12:14:56 -0800</bug_when>
    <thetext>Comment on attachment 74995
patch 2

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

I love the general idea of this patch! Some comments below, Dirk might have additional ones:

&gt; WebCore/ChangeLog:8
&gt; +        SVN filter primitives can use the output of other filters. The

s/SVN/SVG/

&gt; WebCore/ChangeLog:11
&gt; +        primitive result was converted to image buffer before, which

s/result was/results were/, s/buffer/buffers/

&gt; WebCore/ChangeLog:15
&gt; +        this patch. All apply() methods updated according to this new

s/updated/are updated/

&gt; WebCore/platform/graphics/filters/FEBlend.cpp:-135
&gt; -    resultImage()-&gt;putPremultipliedImageData(imageData.get(), imageRect, IntPoint());

Ah, this is correct, as you&apos;re using the resultImage instead of creating a new one.

&gt; WebCore/platform/graphics/filters/FEComponentTransfer.cpp:172
&gt; +    in-&gt;asUnmultipliedImage(imageData, drawingRect);

Hm, why is the return value ignored?
(Ignore this, I was confused as there are two variants of asUnmultipliedImage, this one returns void.... see below)

&gt; WebCore/platform/graphics/filters/FilterEffect.cpp:84
&gt; +    m_imageBufferResult = ImageBuffer::create(m_absolutePaintRect.size(), ColorSpaceLinearRGB);
&gt; +    IntRect dst(IntPoint(), m_absolutePaintRect.size());

line 84: s/dst/destinationRect/

&gt; WebCore/platform/graphics/filters/FilterEffect.cpp:96
&gt; +    return imageData;

A call to .release() is missing here!

&gt; WebCore/platform/graphics/filters/FilterEffect.cpp:103
&gt; +    return imageData;

Ditto.

&gt; WebCore/platform/graphics/filters/FilterEffect.cpp:106
&gt; +inline void FilterEffect::copyImageBytes(ImageData* src, ImageData* dst, const IntRect&amp; rect)

Avoid abbrevations, while it is convienent here, I&apos;d prefer source and destination.

&gt; WebCore/platform/graphics/filters/FilterEffect.cpp:113
&gt; +    int originx = rect.x();

I&apos;d prefer originX or xOrigin here.

&gt; WebCore/platform/graphics/filters/FilterEffect.cpp:114
&gt; +    int destx = 0;

Same here, destX or xDest (I&apos;d prefer the latter ;-)

&gt; WebCore/platform/graphics/filters/FilterEffect.cpp:119
&gt; +    int endx = rect.x() + rect.width();

rect.right() ?

&gt; WebCore/platform/graphics/filters/FilterEffect.cpp:129
&gt; +    int endy = rect.y() + rect.height();

rect.bottom() ?

&gt; WebCore/platform/graphics/filters/FilterEffect.cpp:137
&gt; +    int dstScanline = rect.width() * 4;
&gt; +    int srcScanline = m_absolutePaintRect.width() * 4;
&gt; +    unsigned char *dstPixel = dst-&gt;data()-&gt;data()-&gt;data() + (((desty * rect.width()) + destx) * 4);
&gt; +    unsigned char *srcPixel = src-&gt;data()-&gt;data()-&gt;data() + (((originy * m_absolutePaintRect.width()) + originx) * 4);

unsigned char* destinationPixel,  and one useless pair of braces at the end. Same for sourcePixel.
dstScanline should be &quot;destinationScanline&quot;, same for srcScanline.

&gt; WebCore/platform/graphics/filters/FilterEffect.cpp:143
&gt; +        originy++;

I&apos;d prefer ++originy.

&gt; WebCore/platform/graphics/filters/FilterEffect.cpp:151
&gt; +    if (!m_unmultipliedImageResult) {

Can you rewrite this with a early return for m_unmultipliedImageResult=true.

&gt; WebCore/platform/graphics/filters/FilterEffect.cpp:159
&gt; +            unsigned char* src = m_premultipliedImageResult-&gt;data()-&gt;data()-&gt;data();
&gt; +            unsigned char* dst = m_unmultipliedImageResult-&gt;data()-&gt;data()-&gt;data();
&gt; +            unsigned char* end = src + (m_absolutePaintRect.width() * m_absolutePaintRect.height() * 4);

Again, src -&gt; source, dst -&gt; destination etc.

&gt; WebCore/platform/graphics/filters/FilterEffect.cpp:184
&gt; +    if (!m_premultipliedImageResult) {

Same comments as abobe, early return style please, and variable renamings.

&gt; WebCore/platform/graphics/filters/FilterEffect.h:58
&gt; +    PassRefPtr&lt;ImageData&gt; asUnmultipliedImage(const IntRect&amp;);
&gt; +    PassRefPtr&lt;ImageData&gt; asPremultipliedImage(const IntRect&amp;);
&gt; +    void asUnmultipliedImage(ImageData* dst, const IntRect&amp;);
&gt; +    void asPremultipliedImage(ImageData* dst, const IntRect&amp;);

The naming of these methods is misleading, I stared at 172     in-&gt;asUnmultipliedImage(imageData, drawingRect); before, wondering why you ignore the returned PassRefPtr&lt;ImageData&gt; until I realized there are two variants of the same method, one which returns void and the other with the PassRefPtr.

Can you rename the last two methods, to something like &quot;convertToXXXImage&quot; or maybe even a better name..
Also the &quot;dst&quot; parameter name is not needed.

&gt; WebCore/platform/graphics/filters/FilterEffect.h:132
&gt; +    inline void copyImageBytes(ImageData* src, ImageData* dst, const IntRect&amp;);

s/src/source/ s/dst/destination/</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>314674</commentid>
    <comment_count>16</comment_count>
      <attachid>74995</attachid>
    <who name="Dirk Schulze">krit</who>
    <bug_when>2010-11-29 15:01:16 -0800</bug_when>
    <thetext>Comment on attachment 74995
patch 2

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

Great patch. Just some minor notes. Could you write a manual perf test which shows the affect of your changes please? You can place the test in WebCore/manual-test. If it could measure the timings it would be a great tool for performance patches in the future, but it doesn&apos;t need it. Beth wrote a perf test for SVG clipping. It is placed there too. Maybe you can take a look at it.

&gt; WebCore/platform/graphics/filters/FilterEffect.cpp:25
&gt; +

IIRC we don&apos;t add newlines here.

&gt;&gt; WebCore/platform/graphics/filters/FilterEffect.cpp:106
&gt;&gt; +inline void FilterEffect::copyImageBytes(ImageData* src, ImageData* dst, const IntRect&amp; rect)
&gt; 
&gt; Avoid abbrevations, while it is convienent here, I&apos;d prefer source and destination.

I guess you&apos;re following the style in ImageBuffer*.cpp, but maybe Niko is right here.

&gt; WebCore/platform/graphics/filters/FilterEffect.cpp:110
&gt; +    if (rect.x() &lt; 0 || rect.y() &lt; 0 || (rect.x() + rect.width()) &gt; m_absolutePaintRect.width() || (rect.y() + rect.height()) &gt; m_absolutePaintRect.height())

(rect.x() + rect.width())
See Nikos comment about right(), the same for the vertical position, just bottom()

&gt;&gt; WebCore/platform/graphics/filters/FilterEffect.cpp:159
&gt;&gt; +            unsigned char* end = src + (m_absolutePaintRect.width() * m_absolutePaintRect.height() * 4);
&gt; 
&gt; Again, src -&gt; source, dst -&gt; destination etc.

Would mean to write copyImageBytes(m_unmultipliedImageResult.get(), dst, rect); twice. Bu maybe it&apos;s still better to read. So...</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>317475</commentid>
    <comment_count>17</comment_count>
    <who name="Zoltan Herczeg">zherczeg</who>
    <bug_when>2010-12-06 00:30:23 -0800</bug_when>
    <thetext>&gt; &gt; WebCore/platform/graphics/filters/FilterEffect.h:58
&gt; &gt; +    PassRefPtr&lt;ImageData&gt; asUnmultipliedImage(const IntRect&amp;);
&gt; &gt; +    PassRefPtr&lt;ImageData&gt; asPremultipliedImage(const IntRect&amp;);
&gt; &gt; +    void asUnmultipliedImage(ImageData* dst, const IntRect&amp;);
&gt; &gt; +    void asPremultipliedImage(ImageData* dst, const IntRect&amp;);

Renamed to copyUnmultipliedImage and copyPremultipliedImage.

About the renamings, bottoms(), etc.: As Krit said, they all come from the GraphicsContext (platform dependent) implementation, and perhaps they should be renamed there as well (they probably copied the mac code). Unfortunately there are lots of platforms.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>317478</commentid>
    <comment_count>18</comment_count>
    <who name="Dirk Schulze">krit</who>
    <bug_when>2010-12-06 00:47:34 -0800</bug_when>
    <thetext>(In reply to comment #17)
&gt; &gt; &gt; WebCore/platform/graphics/filters/FilterEffect.h:58
&gt; &gt; &gt; +    PassRefPtr&lt;ImageData&gt; asUnmultipliedImage(const IntRect&amp;);
&gt; &gt; &gt; +    PassRefPtr&lt;ImageData&gt; asPremultipliedImage(const IntRect&amp;);
&gt; &gt; &gt; +    void asUnmultipliedImage(ImageData* dst, const IntRect&amp;);
&gt; &gt; &gt; +    void asPremultipliedImage(ImageData* dst, const IntRect&amp;);
&gt; 
&gt; Renamed to copyUnmultipliedImage and copyPremultipliedImage.
&gt; 
&gt; About the renamings, bottoms(), etc.: As Krit said, they all come from the GraphicsContext (platform dependent) implementation, and perhaps they should be renamed there as well (they probably copied the mac code). Unfortunately there are lots of platforms.

Not your problem now. Just fix it for your patch and just for SVG. If you want, you can change the style in ImageBuffer* and GraphicsContext* in another patch afterwards.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>317570</commentid>
    <comment_count>19</comment_count>
      <attachid>75679</attachid>
    <who name="Zoltan Herczeg">zherczeg</who>
    <bug_when>2010-12-06 05:28:11 -0800</bug_when>
    <thetext>Created attachment 75679
patch 3

Added a nice manual test. 73% speedup with my patch (on a mac mini).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>318064</commentid>
    <comment_count>20</comment_count>
      <attachid>75679</attachid>
    <who name="Dirk Schulze">krit</who>
    <bug_when>2010-12-06 22:47:30 -0800</bug_when>
    <thetext>Comment on attachment 75679
patch 3

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

The patch looks great, still some notes from me.

&gt; WebCore/platform/graphics/filters/FEBlend.cpp:92
&gt; +    if (hasResult())
&gt; +        return;

You should mention this in the changelog, that you do not create the same filter effect result twice.

&gt; WebCore/platform/graphics/filters/FETurbulence.cpp:329
&gt; +    if (!absolutePaintRect().width() || !absolutePaintRect().height())

do we allow negative width or height? If not you could use isEmpty() here.

&gt; WebCore/platform/graphics/filters/FilterEffect.cpp:130
&gt; +    int xOrigin = rect.x();
&gt; +    int xDest = 0;
&gt; +    if (xOrigin &lt; 0) {
&gt; +        xDest = -xOrigin;
&gt; +        xOrigin = 0;
&gt; +    }
&gt; +    int xEnd = rect.right();
&gt; +    if (xEnd &gt; m_absolutePaintRect.width())
&gt; +        xEnd = m_absolutePaintRect.width();
&gt; +
&gt; +    int yOrigin = rect.y();
&gt; +    int yDest = 0;
&gt; +    if (yOrigin &lt; 0) {
&gt; +        yDest = -yOrigin;
&gt; +        yOrigin = 0;
&gt; +    }
&gt; +    int yEnd = rect.bottom();
&gt; +    if (yEnd &gt; m_absolutePaintRect.height())
&gt; +        yEnd = m_absolutePaintRect.height();

I wounder if we could use the intersect functionality of FloatRect instead doing it ourself here.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>318081</commentid>
    <comment_count>21</comment_count>
    <who name="Zoltan Herczeg">zherczeg</who>
    <bug_when>2010-12-07 00:45:57 -0800</bug_when>
    <thetext>&gt; I wounder if we could use the intersect functionality of FloatRect instead doing it ourself here.

Don&apos;t think so as we need the info &apos;how&apos; the intersection happens.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>318093</commentid>
    <comment_count>22</comment_count>
      <attachid>75793</attachid>
    <who name="Zoltan Herczeg">zherczeg</who>
    <bug_when>2010-12-07 01:41:50 -0800</bug_when>
    <thetext>Created attachment 75793
patch 4

Minor changes. Hopefully this is the last iteration.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>318211</commentid>
    <comment_count>23</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-12-07 08:38:30 -0800</bug_when>
    <thetext>Attachment 75793 did not pass style-queue:

Failed to run &quot;[u&apos;git&apos;, u&apos;reset&apos;, u&apos;--hard&apos;, u&apos;refs/remotes/trunk&apos;]&quot; exit_code: 128
error: Could not write new index file.
fatal: Could not reset index file to revision &apos;refs/remotes/trunk&apos;.


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>318258</commentid>
    <comment_count>24</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-12-07 09:39:39 -0800</bug_when>
    <thetext>Attachment 75793 did not pass style-queue:

Failed to run &quot;[u&apos;git&apos;, u&apos;reset&apos;, u&apos;--hard&apos;, u&apos;refs/remotes/trunk&apos;]&quot; exit_code: 128
error: Could not write new index file.
fatal: Could not reset index file to revision &apos;refs/remotes/trunk&apos;.


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>318308</commentid>
    <comment_count>25</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-12-07 10:40:50 -0800</bug_when>
    <thetext>Attachment 75793 did not pass style-queue:

Failed to run &quot;[u&apos;git&apos;, u&apos;reset&apos;, u&apos;--hard&apos;, u&apos;refs/remotes/trunk&apos;]&quot; exit_code: 128
error: Could not write new index file.
fatal: Could not reset index file to revision &apos;refs/remotes/trunk&apos;.


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>318359</commentid>
    <comment_count>26</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-12-07 11:42:04 -0800</bug_when>
    <thetext>Attachment 75793 did not pass style-queue:

Failed to run &quot;[u&apos;git&apos;, u&apos;reset&apos;, u&apos;--hard&apos;, u&apos;refs/remotes/trunk&apos;]&quot; exit_code: 128
error: Could not write new index file.
fatal: Could not reset index file to revision &apos;refs/remotes/trunk&apos;.


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>318589</commentid>
    <comment_count>27</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-12-07 21:32:11 -0800</bug_when>
    <thetext>Attachment 75793 did not pass style-queue:

Failed to run &quot;[&apos;WebKitTools/Scripts/update-webkit&apos;]&quot; exit_code: 2
Updating OpenSource
Incomplete data: Delta source ended unexpectedly at /usr/lib/git-core/git-svn line 5061

Died at WebKitTools/Scripts/update-webkit line 132.


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>320862</commentid>
    <comment_count>28</comment_count>
    <who name="Dirk Schulze">krit</who>
    <bug_when>2010-12-12 11:06:22 -0800</bug_when>
    <thetext>Sorry, I reviewed the patch a while ago, somehow the review was not commited and I didn&apos;t check it afterwards :-(</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>320863</commentid>
    <comment_count>29</comment_count>
      <attachid>75793</attachid>
    <who name="Dirk Schulze">krit</who>
    <bug_when>2010-12-12 11:13:30 -0800</bug_when>
    <thetext>Comment on attachment 75793
patch 4

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

r=me. Sorry for the delay. Just ping me, write me a mail if you are waiting more than a week.

&gt; WebCore/ChangeLog:18
&gt; +        Filters do not generate their results twice (or more), when

..twice (or more) anymore. ...</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>320867</commentid>
    <comment_count>30</comment_count>
    <who name="Zoltan Herczeg">zherczeg</who>
    <bug_when>2010-12-12 12:20:05 -0800</bug_when>
    <thetext>&gt; r=me. Sorry for the delay. Just ping me, write me a mail if you are waiting more than a week.

No poblem. I thought you were busy, and I had other task to do anyway.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>321007</commentid>
    <comment_count>31</comment_count>
    <who name="Zoltan Herczeg">zherczeg</who>
    <bug_when>2010-12-13 02:45:51 -0800</bug_when>
    <thetext>Landed in r73894
Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>74548</attachid>
            <date>2010-11-22 06:50:35 -0800</date>
            <delta_ts>2010-11-23 06:42:53 -0800</delta_ts>
            <desc>concept</desc>
            <filename>0001-resultImage.patch</filename>
            <type>text/plain</type>
            <size>26621</size>
            <attacher name="Zoltan Herczeg">zherczeg</attacher>
            
              <data encoding="base64">RnJvbSA5MjM0MWRiYjYyZDExNzFmZDE3MTYzMjEzNzk1MjQ2OTAyODBmMzEzIE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBab2x0YW4gSGVyY3plZyA8emhlcmN6ZWdAaW5mLnUtc3plZ2Vk
Lmh1PgpEYXRlOiBNb24sIDIyIE5vdiAyMDEwIDE1OjQ0OjI1ICswMTAwClN1YmplY3Q6IFtQQVRD
SF0gcmVzdWx0SW1hZ2UKClNpZ25lZC1vZmYtYnk6IFpvbHRhbiBIZXJjemVnIDx6aGVyY3plZ0Bp
bmYudS1zemVnZWQuaHU+Ci0tLQogV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZF
QmxlbmQuY3BwICAgICAgfCAgIDE1ICsrKy0tLS0KIC4uLi9wbGF0Zm9ybS9ncmFwaGljcy9maWx0
ZXJzL0ZFQ29sb3JNYXRyaXguY3BwICAgIHwgICAxNCArKystLS0KIC4uLi9ncmFwaGljcy9maWx0
ZXJzL0ZFQ29tcG9uZW50VHJhbnNmZXIuY3BwICAgICAgIHwgICAgOSArKy0tCiBXZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDb21wb3NpdGUuY3BwICB8ICAgMzMgKysrKysrKy0t
LS0tLS0KIC4uLi9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29udm9sdmVNYXRyaXguY3Bw
IHwgICA0MSArKysrKysrKy0tLS0tLS0tLQogLi4uL2dyYXBoaWNzL2ZpbHRlcnMvRkVEaXNwbGFj
ZW1lbnRNYXAuY3BwICAgICAgICAgfCAgIDIyICsrKystLS0tLQogV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9maWx0ZXJzL0ZFRmxvb2QuY3BwICAgICAgfCAgICA2ICstCiAuLi4vcGxhdGZvcm0v
Z3JhcGhpY3MvZmlsdGVycy9GRUdhdXNzaWFuQmx1ci5jcHAgICB8ICAgMjQgKysrKy0tLS0tLQog
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlckVmZmVjdC5jcHAgfCAgIDQ3
ICsrKysrKysrKysrKysrKysrKy0tCiBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMv
RmlsdGVyRWZmZWN0LmggICB8ICAgMjEgKysrKystLS0KIDEwIGZpbGVzIGNoYW5nZWQsIDEzMyBp
bnNlcnRpb25zKCspLCA5OSBkZWxldGlvbnMoLSkKCmRpZmYgLS1naXQgYS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVCbGVuZC5jcHAgYi9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2ZpbHRlcnMvRkVCbGVuZC5jcHAKaW5kZXggODliNDRlMC4uZmNkMzlhMyAxMDA2NDQKLS0t
IGEvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQmxlbmQuY3BwCisrKyBiL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUJsZW5kLmNwcApAQCAtOTIsMjYgKzky
LDI1IEBAIHZvaWQgRkVCbGVuZDo6YXBwbHkoKQogICAgIEZpbHRlckVmZmVjdCogaW4yID0gaW5w
dXRFZmZlY3QoMSk7CiAgICAgaW4tPmFwcGx5KCk7CiAgICAgaW4yLT5hcHBseSgpOwotICAgIGlm
ICghaW4tPnJlc3VsdEltYWdlKCkgfHwgIWluMi0+cmVzdWx0SW1hZ2UoKSkKKyAgICBpZiAoIWlu
LT5oYXNSZXN1bHQoKSB8fCAhaW4yLT5oYXNSZXN1bHQoKSkKICAgICAgICAgcmV0dXJuOwogCiAg
ICAgaWYgKG1fbW9kZSA8PSBGRUJMRU5EX01PREVfVU5LTk9XTiB8fCBtX21vZGUgPiBGRUJMRU5E
X01PREVfTElHSFRFTikKICAgICAgICAgcmV0dXJuOwogCi0gICAgaWYgKCFlZmZlY3RDb250ZXh0
KCkpCisgICAgSW1hZ2VEYXRhKiByZXN1bHRJbWFnZSA9IGNyZWF0ZVByZW11bHRpcGxpZWRJbWFn
ZVJlc3VsdCgpOworICAgIGlmICghcmVzdWx0SW1hZ2UpCiAgICAgICAgIHJldHVybjsKIAogICAg
IEludFJlY3QgZWZmZWN0QURyYXdpbmdSZWN0ID0gcmVxdWVzdGVkUmVnaW9uT2ZJbnB1dEltYWdl
RGF0YShpbi0+YWJzb2x1dGVQYWludFJlY3QoKSk7Ci0gICAgUmVmUHRyPEltYWdlRGF0YT4gc3Jj
SW1hZ2VEYXRhQSA9IGluLT5yZXN1bHRJbWFnZSgpLT5nZXRQcmVtdWx0aXBsaWVkSW1hZ2VEYXRh
KGVmZmVjdEFEcmF3aW5nUmVjdCk7CisgICAgUmVmUHRyPEltYWdlRGF0YT4gc3JjSW1hZ2VEYXRh
QSA9IGluLT5hc1ByZW11bHRpcGxpZWRJbWFnZShlZmZlY3RBRHJhd2luZ1JlY3QpOwogICAgIEJ5
dGVBcnJheSogc3JjUGl4ZWxBcnJheUEgPSBzcmNJbWFnZURhdGFBLT5kYXRhKCktPmRhdGEoKTsK
IAogICAgIEludFJlY3QgZWZmZWN0QkRyYXdpbmdSZWN0ID0gcmVxdWVzdGVkUmVnaW9uT2ZJbnB1
dEltYWdlRGF0YShpbjItPmFic29sdXRlUGFpbnRSZWN0KCkpOwotICAgIFJlZlB0cjxJbWFnZURh
dGE+IHNyY0ltYWdlRGF0YUIgPSBpbjItPnJlc3VsdEltYWdlKCktPmdldFByZW11bHRpcGxpZWRJ
bWFnZURhdGEoZWZmZWN0QkRyYXdpbmdSZWN0KTsKKyAgICBSZWZQdHI8SW1hZ2VEYXRhPiBzcmNJ
bWFnZURhdGFCID0gaW4yLT5hc1ByZW11bHRpcGxpZWRJbWFnZShlZmZlY3RCRHJhd2luZ1JlY3Qp
OwogICAgIEJ5dGVBcnJheSogc3JjUGl4ZWxBcnJheUIgPSBzcmNJbWFnZURhdGFCLT5kYXRhKCkt
PmRhdGEoKTsKIAotICAgIEludFJlY3QgaW1hZ2VSZWN0KEludFBvaW50KCksIHJlc3VsdEltYWdl
KCktPnNpemUoKSk7Ci0gICAgUmVmUHRyPEltYWdlRGF0YT4gaW1hZ2VEYXRhID0gSW1hZ2VEYXRh
OjpjcmVhdGUoaW1hZ2VSZWN0LndpZHRoKCksIGltYWdlUmVjdC5oZWlnaHQoKSk7Ci0gICAgQnl0
ZUFycmF5KiBkc3RQaXhlbEFycmF5ID0gaW1hZ2VEYXRhLT5kYXRhKCktPmRhdGEoKTsKKyAgICBC
eXRlQXJyYXkqIGRzdFBpeGVsQXJyYXkgPSByZXN1bHRJbWFnZS0+ZGF0YSgpLT5kYXRhKCk7CiAK
ICAgICAvLyBLZWVwIHN5bmNocm9uaXplZCB3aXRoIEJsZW5kTW9kZVR5cGUKICAgICBzdGF0aWMg
Y29uc3QgQmxlbmRUeXBlIGNhbGxFZmZlY3RbXSA9IHt1bmtub3duLCBub3JtYWwsIG11bHRpcGx5
LCBzY3JlZW4sIGRhcmtlbiwgbGlnaHRlbn07CkBAIC0xMzEsOCArMTMwLDYgQEAgdm9pZCBGRUJs
ZW5kOjphcHBseSgpCiAgICAgICAgIHVuc2lnbmVkIGNoYXIgYWxwaGFSID0gMjU1IC0gKCgyNTUg
LSBhbHBoYUEpICogKDI1NSAtIGFscGhhQikpIC8gMjU1OwogICAgICAgICBkc3RQaXhlbEFycmF5
LT5zZXQocGl4ZWxPZmZzZXQgKyAzLCBhbHBoYVIpOwogICAgIH0KLQotICAgIHJlc3VsdEltYWdl
KCktPnB1dFByZW11bHRpcGxpZWRJbWFnZURhdGEoaW1hZ2VEYXRhLmdldCgpLCBpbWFnZVJlY3Qs
IEludFBvaW50KCkpOwogfQogCiB2b2lkIEZFQmxlbmQ6OmR1bXAoKQpkaWZmIC0tZ2l0IGEvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29sb3JNYXRyaXguY3BwIGIvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29sb3JNYXRyaXguY3BwCmluZGV4IDFjOTli
MWUuLjRjNWEwYjggMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVy
cy9GRUNvbG9yTWF0cml4LmNwcAorKysgYi9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRl
cnMvRkVDb2xvck1hdHJpeC5jcHAKQEAgLTE1MiwxNyArMTUyLDE3IEBAIHZvaWQgRkVDb2xvck1h
dHJpeDo6YXBwbHkoKQogewogICAgIEZpbHRlckVmZmVjdCogaW4gPSBpbnB1dEVmZmVjdCgwKTsK
ICAgICBpbi0+YXBwbHkoKTsKLSAgICBpZiAoIWluLT5yZXN1bHRJbWFnZSgpKQorICAgIGlmICgh
aW4tPmhhc1Jlc3VsdCgpKQogICAgICAgICByZXR1cm47CiAKLSAgICBHcmFwaGljc0NvbnRleHQq
IGZpbHRlckNvbnRleHQgPSBlZmZlY3RDb250ZXh0KCk7Ci0gICAgaWYgKCFmaWx0ZXJDb250ZXh0
KQorICAgIEltYWdlQnVmZmVyKiByZXN1bHRJbWFnZSA9IGNyZWF0ZUltYWdlQnVmZmVyUmVzdWx0
KCk7CisgICAgaWYgKCFyZXN1bHRJbWFnZSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgZmlsdGVy
Q29udGV4dC0+ZHJhd0ltYWdlQnVmZmVyKGluLT5yZXN1bHRJbWFnZSgpLCBDb2xvclNwYWNlRGV2
aWNlUkdCLCBkcmF3aW5nUmVnaW9uT2ZJbnB1dEltYWdlKGluLT5hYnNvbHV0ZVBhaW50UmVjdCgp
KSk7CisgICAgcmVzdWx0SW1hZ2UtPmNvbnRleHQoKS0+ZHJhd0ltYWdlQnVmZmVyKGluLT5hc0lt
YWdlQnVmZmVyKCksIENvbG9yU3BhY2VEZXZpY2VSR0IsIGRyYXdpbmdSZWdpb25PZklucHV0SW1h
Z2UoaW4tPmFic29sdXRlUGFpbnRSZWN0KCkpKTsKIAotICAgIEludFJlY3QgaW1hZ2VSZWN0KElu
dFBvaW50KCksIHJlc3VsdEltYWdlKCktPnNpemUoKSk7Ci0gICAgUmVmUHRyPEltYWdlRGF0YT4g
aW1hZ2VEYXRhID0gcmVzdWx0SW1hZ2UoKS0+Z2V0VW5tdWx0aXBsaWVkSW1hZ2VEYXRhKGltYWdl
UmVjdCk7CisgICAgSW50UmVjdCBpbWFnZVJlY3QoSW50UG9pbnQoKSwgYWJzb2x1dGVQYWludFJl
Y3QoKS5zaXplKCkpOworICAgIFJlZlB0cjxJbWFnZURhdGE+IGltYWdlRGF0YSA9IHJlc3VsdElt
YWdlLT5nZXRVbm11bHRpcGxpZWRJbWFnZURhdGEoaW1hZ2VSZWN0KTsKICAgICBCeXRlQXJyYXkq
IHBpeGVsQXJyYXkgPSBpbWFnZURhdGEtPmRhdGEoKS0+ZGF0YSgpOwogCiAgICAgc3dpdGNoICht
X3R5cGUpIHsKQEAgLTE4Myw3ICsxODMsNyBAQCB2b2lkIEZFQ29sb3JNYXRyaXg6OmFwcGx5KCkK
ICAgICAgICAgICAgIGJyZWFrOwogICAgIH0KIAotICAgIHJlc3VsdEltYWdlKCktPnB1dFVubXVs
dGlwbGllZEltYWdlRGF0YShpbWFnZURhdGEuZ2V0KCksIGltYWdlUmVjdCwgSW50UG9pbnQoKSk7
CisgICAgcmVzdWx0SW1hZ2UtPnB1dFVubXVsdGlwbGllZEltYWdlRGF0YShpbWFnZURhdGEuZ2V0
KCksIGltYWdlUmVjdCwgSW50UG9pbnQoKSk7CiB9CiAKIHZvaWQgRkVDb2xvck1hdHJpeDo6ZHVt
cCgpCmRpZmYgLS1naXQgYS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDb21w
b25lbnRUcmFuc2Zlci5jcHAgYi9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVD
b21wb25lbnRUcmFuc2Zlci5jcHAKaW5kZXggY2ZhYjUwYi4uOTczNGQ3YSAxMDA2NDQKLS0tIGEv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29tcG9uZW50VHJhbnNmZXIuY3Bw
CisrKyBiL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUNvbXBvbmVudFRyYW5z
ZmVyLmNwcApAQCAtMTUxLDEwICsxNTEsMTEgQEAgdm9pZCBGRUNvbXBvbmVudFRyYW5zZmVyOjph
cHBseSgpCiB7CiAgICAgRmlsdGVyRWZmZWN0KiBpbiA9IGlucHV0RWZmZWN0KDApOwogICAgIGlu
LT5hcHBseSgpOwotICAgIGlmICghaW4tPnJlc3VsdEltYWdlKCkpCisgICAgaWYgKCFpbi0+aGFz
UmVzdWx0KCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIGlmICghZWZmZWN0Q29udGV4dCgpKQor
ICAgIEltYWdlRGF0YSogaW1hZ2VEYXRhID0gY3JlYXRlVW5tdWx0aXBsaWVkSW1hZ2VSZXN1bHQo
KTsKKyAgICBpZiAoIWltYWdlRGF0YSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgdW5zaWduZWQg
Y2hhciByVmFsdWVzWzI1Nl0sIGdWYWx1ZXNbMjU2XSwgYlZhbHVlc1syNTZdLCBhVmFsdWVzWzI1
Nl07CkBAIC0xNjgsNyArMTY5LDcgQEAgdm9pZCBGRUNvbXBvbmVudFRyYW5zZmVyOjphcHBseSgp
CiAgICAgICAgICgqY2FsbEVmZmVjdFt0cmFuc2ZlckZ1bmN0aW9uW2NoYW5uZWxdLnR5cGVdKSh0
YWJsZXNbY2hhbm5lbF0sIHRyYW5zZmVyRnVuY3Rpb25bY2hhbm5lbF0pOwogCiAgICAgSW50UmVj
dCBkcmF3aW5nUmVjdCA9IHJlcXVlc3RlZFJlZ2lvbk9mSW5wdXRJbWFnZURhdGEoaW4tPmFic29s
dXRlUGFpbnRSZWN0KCkpOwotICAgIFJlZlB0cjxJbWFnZURhdGE+IGltYWdlRGF0YSA9IGluLT5y
ZXN1bHRJbWFnZSgpLT5nZXRVbm11bHRpcGxpZWRJbWFnZURhdGEoZHJhd2luZ1JlY3QpOworICAg
IGluLT5hc1VubXVsdGlwbGllZEltYWdlKGltYWdlRGF0YSwgZHJhd2luZ1JlY3QpOwogICAgIEJ5
dGVBcnJheSogcGl4ZWxBcnJheSA9IGltYWdlRGF0YS0+ZGF0YSgpLT5kYXRhKCk7CiAKICAgICB1
bnNpZ25lZCBwaXhlbEFycmF5TGVuZ3RoID0gcGl4ZWxBcnJheS0+bGVuZ3RoKCk7CkBAIC0xNzgs
OCArMTc5LDYgQEAgdm9pZCBGRUNvbXBvbmVudFRyYW5zZmVyOjphcHBseSgpCiAgICAgICAgICAg
ICBwaXhlbEFycmF5LT5zZXQocGl4ZWxPZmZzZXQgKyBjaGFubmVsLCB0YWJsZXNbY2hhbm5lbF1b
Y10pOwogICAgICAgICB9CiAgICAgfQotCi0gICAgcmVzdWx0SW1hZ2UoKS0+cHV0VW5tdWx0aXBs
aWVkSW1hZ2VEYXRhKGltYWdlRGF0YS5nZXQoKSwgSW50UmVjdChJbnRQb2ludCgpLCByZXN1bHRJ
bWFnZSgpLT5zaXplKCkpLCBJbnRQb2ludCgpKTsKIH0KIAogdm9pZCBGRUNvbXBvbmVudFRyYW5z
ZmVyOjpkdW1wKCkKZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVy
cy9GRUNvbXBvc2l0ZS5jcHAgYi9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVD
b21wb3NpdGUuY3BwCmluZGV4IGQyNzMyMWYuLmM1MDU4NWYgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUNvbXBvc2l0ZS5jcHAKKysrIGIvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29tcG9zaXRlLmNwcApAQCAtMTQxLDQ4ICsxNDEs
NDkgQEAgdm9pZCBGRUNvbXBvc2l0ZTo6YXBwbHkoKQogICAgIEZpbHRlckVmZmVjdCogaW4yID0g
aW5wdXRFZmZlY3QoMSk7CiAgICAgaW4tPmFwcGx5KCk7CiAgICAgaW4yLT5hcHBseSgpOwotICAg
IGlmICghaW4tPnJlc3VsdEltYWdlKCkgfHwgIWluMi0+cmVzdWx0SW1hZ2UoKSkKKyAgICBpZiAo
IWluLT5oYXNSZXN1bHQoKSB8fCAhaW4yLT5oYXNSZXN1bHQoKSkKICAgICAgICAgcmV0dXJuOwog
Ci0gICAgR3JhcGhpY3NDb250ZXh0KiBmaWx0ZXJDb250ZXh0ID0gZWZmZWN0Q29udGV4dCgpOwot
ICAgIGlmICghZmlsdGVyQ29udGV4dCkKKyAgICBJbWFnZUJ1ZmZlciogcmVzdWx0SW1hZ2UgPSBj
cmVhdGVJbWFnZUJ1ZmZlclJlc3VsdCgpOworICAgIGlmICghcmVzdWx0SW1hZ2UpCiAgICAgICAg
IHJldHVybjsKKyAgICBHcmFwaGljc0NvbnRleHQqIGZpbHRlckNvbnRleHQgPSByZXN1bHRJbWFn
ZS0+Y29udGV4dCgpOwogCiAgICAgRmxvYXRSZWN0IHNyY1JlY3QgPSBGbG9hdFJlY3QoMCwgMCwg
LTEsIC0xKTsKICAgICBzd2l0Y2ggKG1fdHlwZSkgewogICAgIGNhc2UgRkVDT01QT1NJVEVfT1BF
UkFUT1JfT1ZFUjoKLSAgICAgICAgZmlsdGVyQ29udGV4dC0+ZHJhd0ltYWdlQnVmZmVyKGluMi0+
cmVzdWx0SW1hZ2UoKSwgQ29sb3JTcGFjZURldmljZVJHQiwgZHJhd2luZ1JlZ2lvbk9mSW5wdXRJ
bWFnZShpbjItPmFic29sdXRlUGFpbnRSZWN0KCkpKTsKLSAgICAgICAgZmlsdGVyQ29udGV4dC0+
ZHJhd0ltYWdlQnVmZmVyKGluLT5yZXN1bHRJbWFnZSgpLCBDb2xvclNwYWNlRGV2aWNlUkdCLCBk
cmF3aW5nUmVnaW9uT2ZJbnB1dEltYWdlKGluLT5hYnNvbHV0ZVBhaW50UmVjdCgpKSk7CisgICAg
ICAgIGZpbHRlckNvbnRleHQtPmRyYXdJbWFnZUJ1ZmZlcihpbjItPmFzSW1hZ2VCdWZmZXIoKSwg
Q29sb3JTcGFjZURldmljZVJHQiwgZHJhd2luZ1JlZ2lvbk9mSW5wdXRJbWFnZShpbjItPmFic29s
dXRlUGFpbnRSZWN0KCkpKTsKKyAgICAgICAgZmlsdGVyQ29udGV4dC0+ZHJhd0ltYWdlQnVmZmVy
KGluLT5hc0ltYWdlQnVmZmVyKCksIENvbG9yU3BhY2VEZXZpY2VSR0IsIGRyYXdpbmdSZWdpb25P
ZklucHV0SW1hZ2UoaW4tPmFic29sdXRlUGFpbnRSZWN0KCkpKTsKICAgICAgICAgYnJlYWs7CiAg
ICAgY2FzZSBGRUNPTVBPU0lURV9PUEVSQVRPUl9JTjoKICAgICAgICAgZmlsdGVyQ29udGV4dC0+
c2F2ZSgpOwotICAgICAgICBmaWx0ZXJDb250ZXh0LT5jbGlwVG9JbWFnZUJ1ZmZlcihpbjItPnJl
c3VsdEltYWdlKCksIGRyYXdpbmdSZWdpb25PZklucHV0SW1hZ2UoaW4yLT5hYnNvbHV0ZVBhaW50
UmVjdCgpKSk7Ci0gICAgICAgIGZpbHRlckNvbnRleHQtPmRyYXdJbWFnZUJ1ZmZlcihpbi0+cmVz
dWx0SW1hZ2UoKSwgQ29sb3JTcGFjZURldmljZVJHQiwgZHJhd2luZ1JlZ2lvbk9mSW5wdXRJbWFn
ZShpbi0+YWJzb2x1dGVQYWludFJlY3QoKSkpOworICAgICAgICBmaWx0ZXJDb250ZXh0LT5jbGlw
VG9JbWFnZUJ1ZmZlcihpbjItPmFzSW1hZ2VCdWZmZXIoKSwgZHJhd2luZ1JlZ2lvbk9mSW5wdXRJ
bWFnZShpbjItPmFic29sdXRlUGFpbnRSZWN0KCkpKTsKKyAgICAgICAgZmlsdGVyQ29udGV4dC0+
ZHJhd0ltYWdlQnVmZmVyKGluLT5hc0ltYWdlQnVmZmVyKCksIENvbG9yU3BhY2VEZXZpY2VSR0Is
IGRyYXdpbmdSZWdpb25PZklucHV0SW1hZ2UoaW4tPmFic29sdXRlUGFpbnRSZWN0KCkpKTsKICAg
ICAgICAgZmlsdGVyQ29udGV4dC0+cmVzdG9yZSgpOwogICAgICAgICBicmVhazsKICAgICBjYXNl
IEZFQ09NUE9TSVRFX09QRVJBVE9SX09VVDoKLSAgICAgICAgZmlsdGVyQ29udGV4dC0+ZHJhd0lt
YWdlQnVmZmVyKGluLT5yZXN1bHRJbWFnZSgpLCBDb2xvclNwYWNlRGV2aWNlUkdCLCBkcmF3aW5n
UmVnaW9uT2ZJbnB1dEltYWdlKGluLT5hYnNvbHV0ZVBhaW50UmVjdCgpKSk7Ci0gICAgICAgIGZp
bHRlckNvbnRleHQtPmRyYXdJbWFnZUJ1ZmZlcihpbjItPnJlc3VsdEltYWdlKCksIENvbG9yU3Bh
Y2VEZXZpY2VSR0IsIGRyYXdpbmdSZWdpb25PZklucHV0SW1hZ2UoaW4yLT5hYnNvbHV0ZVBhaW50
UmVjdCgpKSwgc3JjUmVjdCwgQ29tcG9zaXRlRGVzdGluYXRpb25PdXQpOworICAgICAgICBmaWx0
ZXJDb250ZXh0LT5kcmF3SW1hZ2VCdWZmZXIoaW4tPmFzSW1hZ2VCdWZmZXIoKSwgQ29sb3JTcGFj
ZURldmljZVJHQiwgZHJhd2luZ1JlZ2lvbk9mSW5wdXRJbWFnZShpbi0+YWJzb2x1dGVQYWludFJl
Y3QoKSkpOworICAgICAgICBmaWx0ZXJDb250ZXh0LT5kcmF3SW1hZ2VCdWZmZXIoaW4yLT5hc0lt
YWdlQnVmZmVyKCksIENvbG9yU3BhY2VEZXZpY2VSR0IsIGRyYXdpbmdSZWdpb25PZklucHV0SW1h
Z2UoaW4yLT5hYnNvbHV0ZVBhaW50UmVjdCgpKSwgc3JjUmVjdCwgQ29tcG9zaXRlRGVzdGluYXRp
b25PdXQpOwogICAgICAgICBicmVhazsKICAgICBjYXNlIEZFQ09NUE9TSVRFX09QRVJBVE9SX0FU
T1A6Ci0gICAgICAgIGZpbHRlckNvbnRleHQtPmRyYXdJbWFnZUJ1ZmZlcihpbjItPnJlc3VsdElt
YWdlKCksIENvbG9yU3BhY2VEZXZpY2VSR0IsIGRyYXdpbmdSZWdpb25PZklucHV0SW1hZ2UoaW4y
LT5hYnNvbHV0ZVBhaW50UmVjdCgpKSk7Ci0gICAgICAgIGZpbHRlckNvbnRleHQtPmRyYXdJbWFn
ZUJ1ZmZlcihpbi0+cmVzdWx0SW1hZ2UoKSwgQ29sb3JTcGFjZURldmljZVJHQiwgZHJhd2luZ1Jl
Z2lvbk9mSW5wdXRJbWFnZShpbi0+YWJzb2x1dGVQYWludFJlY3QoKSksIHNyY1JlY3QsIENvbXBv
c2l0ZVNvdXJjZUF0b3ApOworICAgICAgICBmaWx0ZXJDb250ZXh0LT5kcmF3SW1hZ2VCdWZmZXIo
aW4yLT5hc0ltYWdlQnVmZmVyKCksIENvbG9yU3BhY2VEZXZpY2VSR0IsIGRyYXdpbmdSZWdpb25P
ZklucHV0SW1hZ2UoaW4yLT5hYnNvbHV0ZVBhaW50UmVjdCgpKSk7CisgICAgICAgIGZpbHRlckNv
bnRleHQtPmRyYXdJbWFnZUJ1ZmZlcihpbi0+YXNJbWFnZUJ1ZmZlcigpLCBDb2xvclNwYWNlRGV2
aWNlUkdCLCBkcmF3aW5nUmVnaW9uT2ZJbnB1dEltYWdlKGluLT5hYnNvbHV0ZVBhaW50UmVjdCgp
KSwgc3JjUmVjdCwgQ29tcG9zaXRlU291cmNlQXRvcCk7CiAgICAgICAgIGJyZWFrOwogICAgIGNh
c2UgRkVDT01QT1NJVEVfT1BFUkFUT1JfWE9SOgotICAgICAgICBmaWx0ZXJDb250ZXh0LT5kcmF3
SW1hZ2VCdWZmZXIoaW4yLT5yZXN1bHRJbWFnZSgpLCBDb2xvclNwYWNlRGV2aWNlUkdCLCBkcmF3
aW5nUmVnaW9uT2ZJbnB1dEltYWdlKGluMi0+YWJzb2x1dGVQYWludFJlY3QoKSkpOwotICAgICAg
ICBmaWx0ZXJDb250ZXh0LT5kcmF3SW1hZ2VCdWZmZXIoaW4tPnJlc3VsdEltYWdlKCksIENvbG9y
U3BhY2VEZXZpY2VSR0IsIGRyYXdpbmdSZWdpb25PZklucHV0SW1hZ2UoaW4tPmFic29sdXRlUGFp
bnRSZWN0KCkpLCBzcmNSZWN0LCBDb21wb3NpdGVYT1IpOworICAgICAgICBmaWx0ZXJDb250ZXh0
LT5kcmF3SW1hZ2VCdWZmZXIoaW4yLT5hc0ltYWdlQnVmZmVyKCksIENvbG9yU3BhY2VEZXZpY2VS
R0IsIGRyYXdpbmdSZWdpb25PZklucHV0SW1hZ2UoaW4yLT5hYnNvbHV0ZVBhaW50UmVjdCgpKSk7
CisgICAgICAgIGZpbHRlckNvbnRleHQtPmRyYXdJbWFnZUJ1ZmZlcihpbi0+YXNJbWFnZUJ1ZmZl
cigpLCBDb2xvclNwYWNlRGV2aWNlUkdCLCBkcmF3aW5nUmVnaW9uT2ZJbnB1dEltYWdlKGluLT5h
YnNvbHV0ZVBhaW50UmVjdCgpKSwgc3JjUmVjdCwgQ29tcG9zaXRlWE9SKTsKICAgICAgICAgYnJl
YWs7CiAgICAgY2FzZSBGRUNPTVBPU0lURV9PUEVSQVRPUl9BUklUSE1FVElDOiB7CiAgICAgICAg
IEludFJlY3QgZWZmZWN0QURyYXdpbmdSZWN0ID0gcmVxdWVzdGVkUmVnaW9uT2ZJbnB1dEltYWdl
RGF0YShpbi0+YWJzb2x1dGVQYWludFJlY3QoKSk7Ci0gICAgICAgIFJlZlB0cjxJbWFnZURhdGE+
IHNyY0ltYWdlRGF0YSA9IGluLT5yZXN1bHRJbWFnZSgpLT5nZXRQcmVtdWx0aXBsaWVkSW1hZ2VE
YXRhKGVmZmVjdEFEcmF3aW5nUmVjdCk7CisgICAgICAgIFJlZlB0cjxJbWFnZURhdGE+IHNyY0lt
YWdlRGF0YSA9IGluLT5hc0ltYWdlQnVmZmVyKCktPmdldFByZW11bHRpcGxpZWRJbWFnZURhdGEo
ZWZmZWN0QURyYXdpbmdSZWN0KTsKICAgICAgICAgQnl0ZUFycmF5KiBzcmNQaXhlbEFycmF5QSA9
IHNyY0ltYWdlRGF0YS0+ZGF0YSgpLT5kYXRhKCk7CiAKICAgICAgICAgSW50UmVjdCBlZmZlY3RC
RHJhd2luZ1JlY3QgPSByZXF1ZXN0ZWRSZWdpb25PZklucHV0SW1hZ2VEYXRhKGluMi0+YWJzb2x1
dGVQYWludFJlY3QoKSk7Ci0gICAgICAgIFJlZlB0cjxJbWFnZURhdGE+IGltYWdlRGF0YSA9IGlu
Mi0+cmVzdWx0SW1hZ2UoKS0+Z2V0UHJlbXVsdGlwbGllZEltYWdlRGF0YShlZmZlY3RCRHJhd2lu
Z1JlY3QpOworICAgICAgICBSZWZQdHI8SW1hZ2VEYXRhPiBpbWFnZURhdGEgPSBpbjItPmFzSW1h
Z2VCdWZmZXIoKS0+Z2V0UHJlbXVsdGlwbGllZEltYWdlRGF0YShlZmZlY3RCRHJhd2luZ1JlY3Qp
OwogICAgICAgICBCeXRlQXJyYXkqIHNyY1BpeGVsQXJyYXlCID0gaW1hZ2VEYXRhLT5kYXRhKCkt
PmRhdGEoKTsKIAogICAgICAgICBhcml0aG1ldGljKHNyY1BpeGVsQXJyYXlBLCBzcmNQaXhlbEFy
cmF5QiwgbV9rMSwgbV9rMiwgbV9rMywgbV9rNCk7Ci0gICAgICAgIHJlc3VsdEltYWdlKCktPnB1
dFByZW11bHRpcGxpZWRJbWFnZURhdGEoaW1hZ2VEYXRhLmdldCgpLCBJbnRSZWN0KEludFBvaW50
KCksIHJlc3VsdEltYWdlKCktPnNpemUoKSksIEludFBvaW50KCkpOworICAgICAgICByZXN1bHRJ
bWFnZS0+cHV0UHJlbXVsdGlwbGllZEltYWdlRGF0YShpbWFnZURhdGEuZ2V0KCksIEludFJlY3Qo
SW50UG9pbnQoKSwgcmVzdWx0SW1hZ2UtPnNpemUoKSksIEludFBvaW50KCkpOwogICAgICAgICB9
CiAgICAgICAgIGJyZWFrOwogICAgIGRlZmF1bHQ6CmRpZmYgLS1naXQgYS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDb252b2x2ZU1hdHJpeC5jcHAgYi9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDb252b2x2ZU1hdHJpeC5jcHAKaW5kZXggMTk4ZDc2NC4u
YTllZjRhMyAxMDA2NDQKLS0tIGEvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZF
Q29udm9sdmVNYXRyaXguY3BwCisrKyBiL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVy
cy9GRUNvbnZvbHZlTWF0cml4LmNwcApAQCAtMzc0LDMzICszNzQsMzcgQEAgdm9pZCBGRUNvbnZv
bHZlTWF0cml4OjphcHBseSgpCiB7CiAgICAgRmlsdGVyRWZmZWN0KiBpbiA9IGlucHV0RWZmZWN0
KDApOwogICAgIGluLT5hcHBseSgpOwotICAgIGlmICghaW4tPnJlc3VsdEltYWdlKCkpCisgICAg
aWYgKCFpbi0+aGFzUmVzdWx0KCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIGlmICghZWZmZWN0
Q29udGV4dCgpKQorICAgIEltYWdlRGF0YSogcmVzdWx0SW1hZ2U7CisgICAgaWYgKG1fcHJlc2Vy
dmVBbHBoYSkKKyAgICAgICAgcmVzdWx0SW1hZ2UgPSBjcmVhdGVVbm11bHRpcGxpZWRJbWFnZVJl
c3VsdCgpOworICAgIGVsc2UKKyAgICAgICAgcmVzdWx0SW1hZ2UgPSBjcmVhdGVQcmVtdWx0aXBs
aWVkSW1hZ2VSZXN1bHQoKTsKKyAgICBpZiAoIXJlc3VsdEltYWdlKQogICAgICAgICByZXR1cm47
CiAKLSAgICBJbnRSZWN0IGltYWdlUmVjdChJbnRQb2ludCgpLCByZXN1bHRJbWFnZSgpLT5zaXpl
KCkpOwogICAgIEludFJlY3QgZWZmZWN0RHJhd2luZ1JlY3QgPSByZXF1ZXN0ZWRSZWdpb25PZklu
cHV0SW1hZ2VEYXRhKGluLT5hYnNvbHV0ZVBhaW50UmVjdCgpKTsKIAogICAgIFJlZlB0cjxDYW52
YXNQaXhlbEFycmF5PiBzcmNQaXhlbEFycmF5OwogICAgIGlmIChtX3ByZXNlcnZlQWxwaGEpCi0g
ICAgICAgIHNyY1BpeGVsQXJyYXkgPSBpbi0+cmVzdWx0SW1hZ2UoKS0+Z2V0VW5tdWx0aXBsaWVk
SW1hZ2VEYXRhKGVmZmVjdERyYXdpbmdSZWN0KS0+ZGF0YSgpOworICAgICAgICBzcmNQaXhlbEFy
cmF5ID0gaW4tPmFzVW5tdWx0aXBsaWVkSW1hZ2UoZWZmZWN0RHJhd2luZ1JlY3QpLT5kYXRhKCk7
CiAgICAgZWxzZQotICAgICAgICBzcmNQaXhlbEFycmF5ID0gaW4tPnJlc3VsdEltYWdlKCktPmdl
dFByZW11bHRpcGxpZWRJbWFnZURhdGEoZWZmZWN0RHJhd2luZ1JlY3QpLT5kYXRhKCk7CisgICAg
ICAgIHNyY1BpeGVsQXJyYXkgPSBpbi0+YXNQcmVtdWx0aXBsaWVkSW1hZ2UoZWZmZWN0RHJhd2lu
Z1JlY3QpLT5kYXRhKCk7CiAKLSAgICBSZWZQdHI8SW1hZ2VEYXRhPiBpbWFnZURhdGEgPSBJbWFn
ZURhdGE6OmNyZWF0ZShpbWFnZVJlY3Qud2lkdGgoKSwgaW1hZ2VSZWN0LmhlaWdodCgpKTsKKyAg
ICBSZWZQdHI8SW1hZ2VEYXRhPiBpbWFnZURhdGEgPSBJbWFnZURhdGE6OmNyZWF0ZShhYnNvbHV0
ZVBhaW50UmVjdCgpLndpZHRoKCksIGFic29sdXRlUGFpbnRSZWN0KCkuaGVpZ2h0KCkpOwogCiAg
ICAgUGFpbnRpbmdEYXRhIHBhaW50aW5nRGF0YTsKICAgICBwYWludGluZ0RhdGEuc3JjUGl4ZWxB
cnJheSA9IHNyY1BpeGVsQXJyYXkuZ2V0KCk7CiAgICAgcGFpbnRpbmdEYXRhLmRzdFBpeGVsQXJy
YXkgPSBpbWFnZURhdGEtPmRhdGEoKTsKLSAgICBwYWludGluZ0RhdGEud2lkdGggPSBpbWFnZVJl
Y3Qud2lkdGgoKTsKLSAgICBwYWludGluZ0RhdGEuaGVpZ2h0ID0gaW1hZ2VSZWN0LmhlaWdodCgp
OworICAgIHBhaW50aW5nRGF0YS53aWR0aCA9IGFic29sdXRlUGFpbnRSZWN0KCkud2lkdGgoKTsK
KyAgICBwYWludGluZ0RhdGEuaGVpZ2h0ID0gYWJzb2x1dGVQYWludFJlY3QoKS5oZWlnaHQoKTsK
ICAgICBwYWludGluZ0RhdGEuYmlhcyA9IG1fYmlhcyAqIDI1NTsKIAogICAgIC8vIERyYXdpbmcg
ZnVsbHkgY292ZXJlZCBwaXhlbHMKLSAgICBpbnQgY2xpcFJpZ2h0ID0gaW1hZ2VSZWN0LndpZHRo
KCkgLSBtX2tlcm5lbFNpemUud2lkdGgoKTsKLSAgICBpbnQgY2xpcEJvdHRvbSA9IGltYWdlUmVj
dC5oZWlnaHQoKSAtIG1fa2VybmVsU2l6ZS5oZWlnaHQoKTsKKyAgICBpbnQgY2xpcFJpZ2h0ID0g
YWJzb2x1dGVQYWludFJlY3QoKS53aWR0aCgpIC0gbV9rZXJuZWxTaXplLndpZHRoKCk7CisgICAg
aW50IGNsaXBCb3R0b20gPSBhYnNvbHV0ZVBhaW50UmVjdCgpLmhlaWdodCgpIC0gbV9rZXJuZWxT
aXplLmhlaWdodCgpOwogCiAgICAgaWYgKGNsaXBSaWdodCA+PSAwICYmIGNsaXBCb3R0b20gPj0g
MCkgewogICAgICAgICBzZXRJbnRlcmlvclBpeGVscyhwYWludGluZ0RhdGEsIGNsaXBSaWdodCwg
Y2xpcEJvdHRvbSk7CkBAIC00MDgsMjIgKzQxMiwxNyBAQCB2b2lkIEZFQ29udm9sdmVNYXRyaXg6
OmFwcGx5KCkKICAgICAgICAgY2xpcFJpZ2h0ICs9IG1fdGFyZ2V0T2Zmc2V0LngoKSArIDE7CiAg
ICAgICAgIGNsaXBCb3R0b20gKz0gbV90YXJnZXRPZmZzZXQueSgpICsgMTsKICAgICAgICAgaWYg
KG1fdGFyZ2V0T2Zmc2V0LnkoKSA+IDApCi0gICAgICAgICAgICBzZXRPdXRlclBpeGVscyhwYWlu
dGluZ0RhdGEsIDAsIDAsIGltYWdlUmVjdC53aWR0aCgpLCBtX3RhcmdldE9mZnNldC55KCkpOwot
ICAgICAgICBpZiAoY2xpcEJvdHRvbSA8IGltYWdlUmVjdC5oZWlnaHQoKSkKLSAgICAgICAgICAg
IHNldE91dGVyUGl4ZWxzKHBhaW50aW5nRGF0YSwgMCwgY2xpcEJvdHRvbSwgaW1hZ2VSZWN0Lndp
ZHRoKCksIGltYWdlUmVjdC5oZWlnaHQoKSk7CisgICAgICAgICAgICBzZXRPdXRlclBpeGVscyhw
YWludGluZ0RhdGEsIDAsIDAsIGFic29sdXRlUGFpbnRSZWN0KCkud2lkdGgoKSwgbV90YXJnZXRP
ZmZzZXQueSgpKTsKKyAgICAgICAgaWYgKGNsaXBCb3R0b20gPCBhYnNvbHV0ZVBhaW50UmVjdCgp
LmhlaWdodCgpKQorICAgICAgICAgICAgc2V0T3V0ZXJQaXhlbHMocGFpbnRpbmdEYXRhLCAwLCBj
bGlwQm90dG9tLCBhYnNvbHV0ZVBhaW50UmVjdCgpLndpZHRoKCksIGFic29sdXRlUGFpbnRSZWN0
KCkuaGVpZ2h0KCkpOwogICAgICAgICBpZiAobV90YXJnZXRPZmZzZXQueCgpID4gMCkKICAgICAg
ICAgICAgIHNldE91dGVyUGl4ZWxzKHBhaW50aW5nRGF0YSwgMCwgbV90YXJnZXRPZmZzZXQueSgp
LCBtX3RhcmdldE9mZnNldC54KCksIGNsaXBCb3R0b20pOwotICAgICAgICBpZiAoY2xpcFJpZ2h0
IDwgaW1hZ2VSZWN0LndpZHRoKCkpCi0gICAgICAgICAgICBzZXRPdXRlclBpeGVscyhwYWludGlu
Z0RhdGEsIGNsaXBSaWdodCwgbV90YXJnZXRPZmZzZXQueSgpLCBpbWFnZVJlY3Qud2lkdGgoKSwg
Y2xpcEJvdHRvbSk7CisgICAgICAgIGlmIChjbGlwUmlnaHQgPCBhYnNvbHV0ZVBhaW50UmVjdCgp
LndpZHRoKCkpCisgICAgICAgICAgICBzZXRPdXRlclBpeGVscyhwYWludGluZ0RhdGEsIGNsaXBS
aWdodCwgbV90YXJnZXRPZmZzZXQueSgpLCBhYnNvbHV0ZVBhaW50UmVjdCgpLndpZHRoKCksIGNs
aXBCb3R0b20pOwogICAgIH0gZWxzZSB7CiAgICAgICAgIC8vIFJhcmUgc2l0dWF0aW9uLCBub3Qg
b3B0aW1pemllZCBmb3Igc3BlZWQKLSAgICAgICAgc2V0T3V0ZXJQaXhlbHMocGFpbnRpbmdEYXRh
LCAwLCAwLCBpbWFnZVJlY3Qud2lkdGgoKSwgaW1hZ2VSZWN0LmhlaWdodCgpKTsKKyAgICAgICAg
c2V0T3V0ZXJQaXhlbHMocGFpbnRpbmdEYXRhLCAwLCAwLCBhYnNvbHV0ZVBhaW50UmVjdCgpLndp
ZHRoKCksIGFic29sdXRlUGFpbnRSZWN0KCkuaGVpZ2h0KCkpOwogICAgIH0KLQotICAgIGlmICht
X3ByZXNlcnZlQWxwaGEpCi0gICAgICAgIHJlc3VsdEltYWdlKCktPnB1dFVubXVsdGlwbGllZElt
YWdlRGF0YShpbWFnZURhdGEuZ2V0KCksIGltYWdlUmVjdCwgSW50UG9pbnQoKSk7Ci0gICAgZWxz
ZQotICAgICAgICByZXN1bHRJbWFnZSgpLT5wdXRQcmVtdWx0aXBsaWVkSW1hZ2VEYXRhKGltYWdl
RGF0YS5nZXQoKSwgaW1hZ2VSZWN0LCBJbnRQb2ludCgpKTsKIH0KIAogdm9pZCBGRUNvbnZvbHZl
TWF0cml4OjpkdW1wKCkKZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmls
dGVycy9GRURpc3BsYWNlbWVudE1hcC5jcHAgYi9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Zp
bHRlcnMvRkVEaXNwbGFjZW1lbnRNYXAuY3BwCmluZGV4IDU1MzIxZTYuLjYzOWE0MDMgMTAwNjQ0
Ci0tLSBhL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRURpc3BsYWNlbWVudE1h
cC5jcHAKKysrIGIvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFRGlzcGxhY2Vt
ZW50TWFwLmNwcApAQCAtODIsMjYgKzgyLDI1IEBAIHZvaWQgRkVEaXNwbGFjZW1lbnRNYXA6OmFw
cGx5KCkKICAgICBGaWx0ZXJFZmZlY3QqIGluMiA9IGlucHV0RWZmZWN0KDEpOwogICAgIGluLT5h
cHBseSgpOwogICAgIGluMi0+YXBwbHkoKTsKLSAgICBpZiAoIWluLT5yZXN1bHRJbWFnZSgpIHx8
ICFpbjItPnJlc3VsdEltYWdlKCkpCisgICAgaWYgKCFpbi0+aGFzUmVzdWx0KCkgfHwgIWluMi0+
aGFzUmVzdWx0KCkpCiAgICAgICAgIHJldHVybjsKIAogICAgIGlmIChtX3hDaGFubmVsU2VsZWN0
b3IgPT0gQ0hBTk5FTF9VTktOT1dOIHx8IG1feUNoYW5uZWxTZWxlY3RvciA9PSBDSEFOTkVMX1VO
S05PV04pCiAgICAgICAgIHJldHVybjsKIAotICAgIGlmICghZWZmZWN0Q29udGV4dCgpKQorICAg
IEltYWdlRGF0YSogcmVzdWx0SW1hZ2UgPSBjcmVhdGVQcmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQo
KTsKKyAgICBpZiAoIXJlc3VsdEltYWdlKQogICAgICAgICByZXR1cm47CiAKICAgICBJbnRSZWN0
IGVmZmVjdEFEcmF3aW5nUmVjdCA9IHJlcXVlc3RlZFJlZ2lvbk9mSW5wdXRJbWFnZURhdGEoaW4t
PmFic29sdXRlUGFpbnRSZWN0KCkpOwotICAgIFJlZlB0cjxJbWFnZURhdGE+IHNyY0ltYWdlRGF0
YUEgPSBpbi0+cmVzdWx0SW1hZ2UoKS0+Z2V0UHJlbXVsdGlwbGllZEltYWdlRGF0YShlZmZlY3RB
RHJhd2luZ1JlY3QpOworICAgIFJlZlB0cjxJbWFnZURhdGE+IHNyY0ltYWdlRGF0YUEgPSBpbi0+
YXNQcmVtdWx0aXBsaWVkSW1hZ2UoZWZmZWN0QURyYXdpbmdSZWN0KTsKICAgICBCeXRlQXJyYXkq
IHNyY1BpeGVsQXJyYXlBID0gc3JjSW1hZ2VEYXRhQS0+ZGF0YSgpLT5kYXRhKCkgOwogCiAgICAg
SW50UmVjdCBlZmZlY3RCRHJhd2luZ1JlY3QgPSByZXF1ZXN0ZWRSZWdpb25PZklucHV0SW1hZ2VE
YXRhKGluMi0+YWJzb2x1dGVQYWludFJlY3QoKSk7Ci0gICAgUmVmUHRyPEltYWdlRGF0YT4gc3Jj
SW1hZ2VEYXRhQiA9IGluMi0+cmVzdWx0SW1hZ2UoKS0+Z2V0VW5tdWx0aXBsaWVkSW1hZ2VEYXRh
KGVmZmVjdEJEcmF3aW5nUmVjdCk7CisgICAgUmVmUHRyPEltYWdlRGF0YT4gc3JjSW1hZ2VEYXRh
QiA9IGluMi0+YXNVbm11bHRpcGxpZWRJbWFnZShlZmZlY3RCRHJhd2luZ1JlY3QpOwogICAgIEJ5
dGVBcnJheSogc3JjUGl4ZWxBcnJheUIgPSBzcmNJbWFnZURhdGFCLT5kYXRhKCktPmRhdGEoKTsK
IAotICAgIEludFJlY3QgaW1hZ2VSZWN0KEludFBvaW50KCksIHJlc3VsdEltYWdlKCktPnNpemUo
KSk7Ci0gICAgUmVmUHRyPEltYWdlRGF0YT4gaW1hZ2VEYXRhID0gSW1hZ2VEYXRhOjpjcmVhdGUo
aW1hZ2VSZWN0LndpZHRoKCksIGltYWdlUmVjdC5oZWlnaHQoKSk7Ci0gICAgQnl0ZUFycmF5KiBk
c3RQaXhlbEFycmF5ID0gaW1hZ2VEYXRhLT5kYXRhKCktPmRhdGEoKTsKKyAgICBCeXRlQXJyYXkq
IGRzdFBpeGVsQXJyYXkgPSByZXN1bHRJbWFnZS0+ZGF0YSgpLT5kYXRhKCk7CiAKICAgICBBU1NF
UlQoc3JjUGl4ZWxBcnJheUEtPmxlbmd0aCgpID09IHNyY1BpeGVsQXJyYXlCLT5sZW5ndGgoKSk7
CiAKQEAgLTExMCwxNSArMTA5LDE1IEBAIHZvaWQgRkVEaXNwbGFjZW1lbnRNYXA6OmFwcGx5KCkK
ICAgICBmbG9hdCBzY2FsZVkgPSBmaWx0ZXItPmFwcGx5VmVydGljYWxTY2FsZShtX3NjYWxlIC8g
MjU1KTsKICAgICBmbG9hdCBzY2FsZUFkanVzdG1lbnRYID0gZmlsdGVyLT5hcHBseUhvcml6b250
YWxTY2FsZSgwLjVmIC0gMC41ZiAqIG1fc2NhbGUpOwogICAgIGZsb2F0IHNjYWxlQWRqdXN0bWVu
dFkgPSBmaWx0ZXItPmFwcGx5VmVydGljYWxTY2FsZSgwLjVmIC0gMC41ZiAqIG1fc2NhbGUpOwot
ICAgIGludCBzdHJpZGUgPSBpbWFnZVJlY3Qud2lkdGgoKSAqIDQ7Ci0gICAgZm9yIChpbnQgeSA9
IDA7IHkgPCBpbWFnZVJlY3QuaGVpZ2h0KCk7ICsreSkgeworICAgIGludCBzdHJpZGUgPSBhYnNv
bHV0ZVBhaW50UmVjdCgpLndpZHRoKCkgKiA0OworICAgIGZvciAoaW50IHkgPSAwOyB5IDwgYWJz
b2x1dGVQYWludFJlY3QoKS5oZWlnaHQoKTsgKyt5KSB7CiAgICAgICAgIGludCBsaW5lID0geSAq
IHN0cmlkZTsKLSAgICAgICAgZm9yIChpbnQgeCA9IDA7IHggPCBpbWFnZVJlY3Qud2lkdGgoKTsg
Kyt4KSB7CisgICAgICAgIGZvciAoaW50IHggPSAwOyB4IDwgYWJzb2x1dGVQYWludFJlY3QoKS53
aWR0aCgpOyArK3gpIHsKICAgICAgICAgICAgIGludCBkc3RJbmRleCA9IGxpbmUgKyB4ICogNDsK
ICAgICAgICAgICAgIGludCBzcmNYID0geCArIHN0YXRpY19jYXN0PGludD4oc2NhbGVYICogc3Jj
UGl4ZWxBcnJheUItPmdldChkc3RJbmRleCArIG1feENoYW5uZWxTZWxlY3RvciAtIDEpICsgc2Nh
bGVBZGp1c3RtZW50WCk7CiAgICAgICAgICAgICBpbnQgc3JjWSA9IHkgKyBzdGF0aWNfY2FzdDxp
bnQ+KHNjYWxlWSAqIHNyY1BpeGVsQXJyYXlCLT5nZXQoZHN0SW5kZXggKyBtX3lDaGFubmVsU2Vs
ZWN0b3IgLSAxKSArIHNjYWxlQWRqdXN0bWVudFkpOwogICAgICAgICAgICAgZm9yICh1bnNpZ25l
ZCBjaGFubmVsID0gMDsgY2hhbm5lbCA8IDQ7ICsrY2hhbm5lbCkgewotICAgICAgICAgICAgICAg
IGlmIChzcmNYIDwgMCB8fCBzcmNYID49IGltYWdlUmVjdC53aWR0aCgpIHx8IHNyY1kgPCAwIHx8
IHNyY1kgPj0gaW1hZ2VSZWN0LmhlaWdodCgpKQorICAgICAgICAgICAgICAgIGlmIChzcmNYIDwg
MCB8fCBzcmNYID49IGFic29sdXRlUGFpbnRSZWN0KCkud2lkdGgoKSB8fCBzcmNZIDwgMCB8fCBz
cmNZID49IGFic29sdXRlUGFpbnRSZWN0KCkuaGVpZ2h0KCkpCiAgICAgICAgICAgICAgICAgICAg
IGRzdFBpeGVsQXJyYXktPnNldChkc3RJbmRleCArIGNoYW5uZWwsIHN0YXRpY19jYXN0PHVuc2ln
bmVkIGNoYXI+KDApKTsKICAgICAgICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgICAg
ICAgdW5zaWduZWQgY2hhciBwaXhlbFZhbHVlID0gc3JjUGl4ZWxBcnJheUEtPmdldChzcmNZICog
c3RyaWRlICsgc3JjWCAqIDQgKyBjaGFubmVsKTsKQEAgLTEyOCw3ICsxMjcsNiBAQCB2b2lkIEZF
RGlzcGxhY2VtZW50TWFwOjphcHBseSgpCiAKICAgICAgICAgfQogICAgIH0KLSAgICByZXN1bHRJ
bWFnZSgpLT5wdXRQcmVtdWx0aXBsaWVkSW1hZ2VEYXRhKGltYWdlRGF0YS5nZXQoKSwgaW1hZ2VS
ZWN0LCBJbnRQb2ludCgpKTsKIH0KIAogdm9pZCBGRURpc3BsYWNlbWVudE1hcDo6ZHVtcCgpCmRp
ZmYgLS1naXQgYS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVGbG9vZC5jcHAg
Yi9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVGbG9vZC5jcHAKaW5kZXggYmM2
NzIxYi4uNTZhOGIyZCAxMDA2NDQKLS0tIGEvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0
ZXJzL0ZFRmxvb2QuY3BwCisrKyBiL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9G
RUZsb29kLmNwcApAQCAtNjQsMTIgKzY0LDEyIEBAIHZvaWQgRkVGbG9vZDo6c2V0Rmxvb2RPcGFj
aXR5KGZsb2F0IGZsb29kT3BhY2l0eSkKIAogdm9pZCBGRUZsb29kOjphcHBseSgpCiB7Ci0gICAg
R3JhcGhpY3NDb250ZXh0KiBmaWx0ZXJDb250ZXh0ID0gZWZmZWN0Q29udGV4dCgpOwotICAgIGlm
ICghZmlsdGVyQ29udGV4dCkKKyAgICBJbWFnZUJ1ZmZlciogcmVzdWx0SW1hZ2UgPSBjcmVhdGVJ
bWFnZUJ1ZmZlclJlc3VsdCgpOworICAgIGlmICghcmVzdWx0SW1hZ2UpCiAgICAgICAgIHJldHVy
bjsKIAogICAgIENvbG9yIGNvbG9yID0gY29sb3JXaXRoT3ZlcnJpZGVBbHBoYShmbG9vZENvbG9y
KCkucmdiKCksIGZsb29kT3BhY2l0eSgpKTsKLSAgICBmaWx0ZXJDb250ZXh0LT5maWxsUmVjdChG
bG9hdFJlY3QoRmxvYXRQb2ludCgpLCBhYnNvbHV0ZVBhaW50UmVjdCgpLnNpemUoKSksIGNvbG9y
LCBDb2xvclNwYWNlRGV2aWNlUkdCKTsKKyAgICByZXN1bHRJbWFnZS0+Y29udGV4dCgpLT5maWxs
UmVjdChGbG9hdFJlY3QoRmxvYXRQb2ludCgpLCBhYnNvbHV0ZVBhaW50UmVjdCgpLnNpemUoKSks
IGNvbG9yLCBDb2xvclNwYWNlRGV2aWNlUkdCKTsKIH0KIAogdm9pZCBGRUZsb29kOjpkdW1wKCkK
ZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUdhdXNzaWFu
Qmx1ci5jcHAgYi9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVHYXVzc2lhbkJs
dXIuY3BwCmluZGV4IDg3NmU0YjMuLmQ2MDNkODUgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvZmlsdGVycy9GRUdhdXNzaWFuQmx1ci5jcHAKKysrIGIvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFR2F1c3NpYW5CbHVyLmNwcApAQCAtMTY2LDMyICsxNjYs
MzAgQEAgdm9pZCBGRUdhdXNzaWFuQmx1cjo6YXBwbHkoKQogewogICAgIEZpbHRlckVmZmVjdCog
aW4gPSBpbnB1dEVmZmVjdCgwKTsKICAgICBpbi0+YXBwbHkoKTsKLSAgICBpZiAoIWluLT5yZXN1
bHRJbWFnZSgpKQorICAgIGlmICghaW4tPmhhc1Jlc3VsdCgpKQogICAgICAgICByZXR1cm47CiAK
LSAgICBpZiAoIWVmZmVjdENvbnRleHQoKSkKKyAgICBJbWFnZURhdGEqIHJlc3VsdEltYWdlID0g
Y3JlYXRlUHJlbXVsdGlwbGllZEltYWdlUmVzdWx0KCk7CisgICAgaWYgKCFyZXN1bHRJbWFnZSkK
ICAgICAgICAgcmV0dXJuOwogCiAgICAgc2V0SXNBbHBoYUltYWdlKGluLT5pc0FscGhhSW1hZ2Uo
KSk7CiAKICAgICBJbnRSZWN0IGVmZmVjdERyYXdpbmdSZWN0ID0gcmVxdWVzdGVkUmVnaW9uT2ZJ
bnB1dEltYWdlRGF0YShpbi0+YWJzb2x1dGVQYWludFJlY3QoKSk7Ci0gICAgUmVmUHRyPEltYWdl
RGF0YT4gc3JjSW1hZ2VEYXRhID0gaW4tPnJlc3VsdEltYWdlKCktPmdldFByZW11bHRpcGxpZWRJ
bWFnZURhdGEoZWZmZWN0RHJhd2luZ1JlY3QpOwotICAgIEludFJlY3QgaW1hZ2VSZWN0KEludFBv
aW50KCksIHJlc3VsdEltYWdlKCktPnNpemUoKSk7CisgICAgaW4tPmFzUHJlbXVsdGlwbGllZElt
YWdlKHJlc3VsdEltYWdlLCBlZmZlY3REcmF3aW5nUmVjdCk7CiAKLSAgICBpZiAoIW1fc3RkWCAm
JiAhbV9zdGRZKSB7Ci0gICAgICAgIHJlc3VsdEltYWdlKCktPnB1dFByZW11bHRpcGxpZWRJbWFn
ZURhdGEoc3JjSW1hZ2VEYXRhLmdldCgpLCBpbWFnZVJlY3QsIEludFBvaW50KCkpOworICAgIGlm
ICghbV9zdGRYICYmICFtX3N0ZFkpCiAgICAgICAgIHJldHVybjsKLSAgICB9CiAKICAgICB1bnNp
Z25lZCBrZXJuZWxTaXplWCA9IDA7CiAgICAgdW5zaWduZWQga2VybmVsU2l6ZVkgPSAwOwogICAg
IGNhbGN1bGF0ZUtlcm5lbFNpemUoZmlsdGVyKCksIGtlcm5lbFNpemVYLCBrZXJuZWxTaXplWSwg
bV9zdGRYLCBtX3N0ZFkpOwogCi0gICAgQnl0ZUFycmF5KiBzcmNQaXhlbEFycmF5ID0gc3JjSW1h
Z2VEYXRhLT5kYXRhKCktPmRhdGEoKTsKLSAgICBSZWZQdHI8SW1hZ2VEYXRhPiB0bXBJbWFnZURh
dGEgPSBJbWFnZURhdGE6OmNyZWF0ZShpbWFnZVJlY3Qud2lkdGgoKSwgaW1hZ2VSZWN0LmhlaWdo
dCgpKTsKKyAgICBCeXRlQXJyYXkqIHNyY1BpeGVsQXJyYXkgPSByZXN1bHRJbWFnZS0+ZGF0YSgp
LT5kYXRhKCk7CisgICAgUmVmUHRyPEltYWdlRGF0YT4gdG1wSW1hZ2VEYXRhID0gSW1hZ2VEYXRh
OjpjcmVhdGUoYWJzb2x1dGVQYWludFJlY3QoKS53aWR0aCgpLCBhYnNvbHV0ZVBhaW50UmVjdCgp
LmhlaWdodCgpKTsKICAgICBCeXRlQXJyYXkqIHRtcFBpeGVsQXJyYXkgPSB0bXBJbWFnZURhdGEt
PmRhdGEoKS0+ZGF0YSgpOwogCi0gICAgaW50IHN0cmlkZSA9IDQgKiBpbWFnZVJlY3Qud2lkdGgo
KTsKKyAgICBpbnQgc3RyaWRlID0gNCAqIGFic29sdXRlUGFpbnRSZWN0KCkud2lkdGgoKTsKICAg
ICBpbnQgZHhMZWZ0ID0gMDsKICAgICBpbnQgZHhSaWdodCA9IDA7CiAgICAgaW50IGR5TGVmdCA9
IDA7CkBAIC0xOTksNyArMTk3LDcgQEAgdm9pZCBGRUdhdXNzaWFuQmx1cjo6YXBwbHkoKQogICAg
IGZvciAoaW50IGkgPSAwOyBpIDwgMzsgKytpKSB7CiAgICAgICAgIGlmIChrZXJuZWxTaXplWCkg
ewogICAgICAgICAgICAga2VybmVsUG9zaXRpb24oaSwga2VybmVsU2l6ZVgsIGR4TGVmdCwgZHhS
aWdodCk7Ci0gICAgICAgICAgICBib3hCbHVyKHNyY1BpeGVsQXJyYXksIHRtcFBpeGVsQXJyYXks
IGtlcm5lbFNpemVYLCBkeExlZnQsIGR4UmlnaHQsIDQsIHN0cmlkZSwgaW1hZ2VSZWN0LndpZHRo
KCksIGltYWdlUmVjdC5oZWlnaHQoKSwgaXNBbHBoYUltYWdlKCkpOworICAgICAgICAgICAgYm94
Qmx1cihzcmNQaXhlbEFycmF5LCB0bXBQaXhlbEFycmF5LCBrZXJuZWxTaXplWCwgZHhMZWZ0LCBk
eFJpZ2h0LCA0LCBzdHJpZGUsIGFic29sdXRlUGFpbnRSZWN0KCkud2lkdGgoKSwgYWJzb2x1dGVQ
YWludFJlY3QoKS5oZWlnaHQoKSwgaXNBbHBoYUltYWdlKCkpOwogICAgICAgICB9IGVsc2Ugewog
ICAgICAgICAgICAgQnl0ZUFycmF5KiBhdXhQaXhlbEFycmF5ID0gdG1wUGl4ZWxBcnJheTsKICAg
ICAgICAgICAgIHRtcFBpeGVsQXJyYXkgPSBzcmNQaXhlbEFycmF5OwpAQCAtMjA4LDE1ICsyMDYs
MTMgQEAgdm9pZCBGRUdhdXNzaWFuQmx1cjo6YXBwbHkoKQogCiAgICAgICAgIGlmIChrZXJuZWxT
aXplWSkgewogICAgICAgICAgICAga2VybmVsUG9zaXRpb24oaSwga2VybmVsU2l6ZVksIGR5TGVm
dCwgZHlSaWdodCk7Ci0gICAgICAgICAgICBib3hCbHVyKHRtcFBpeGVsQXJyYXksIHNyY1BpeGVs
QXJyYXksIGtlcm5lbFNpemVZLCBkeUxlZnQsIGR5UmlnaHQsIHN0cmlkZSwgNCwgaW1hZ2VSZWN0
LmhlaWdodCgpLCBpbWFnZVJlY3Qud2lkdGgoKSwgaXNBbHBoYUltYWdlKCkpOworICAgICAgICAg
ICAgYm94Qmx1cih0bXBQaXhlbEFycmF5LCBzcmNQaXhlbEFycmF5LCBrZXJuZWxTaXplWSwgZHlM
ZWZ0LCBkeVJpZ2h0LCBzdHJpZGUsIDQsIGFic29sdXRlUGFpbnRSZWN0KCkuaGVpZ2h0KCksIGFi
c29sdXRlUGFpbnRSZWN0KCkud2lkdGgoKSwgaXNBbHBoYUltYWdlKCkpOwogICAgICAgICB9IGVs
c2UgewogICAgICAgICAgICAgQnl0ZUFycmF5KiBhdXhQaXhlbEFycmF5ID0gdG1wUGl4ZWxBcnJh
eTsKICAgICAgICAgICAgIHRtcFBpeGVsQXJyYXkgPSBzcmNQaXhlbEFycmF5OwogICAgICAgICAg
ICAgc3JjUGl4ZWxBcnJheSA9IGF1eFBpeGVsQXJyYXk7CiAgICAgICAgIH0KICAgICB9Ci0KLSAg
ICByZXN1bHRJbWFnZSgpLT5wdXRQcmVtdWx0aXBsaWVkSW1hZ2VEYXRhKHNyY0ltYWdlRGF0YS5n
ZXQoKSwgaW1hZ2VSZWN0LCBJbnRQb2ludCgpKTsKIH0KIAogdm9pZCBGRUdhdXNzaWFuQmx1cjo6
ZHVtcCgpCmRpZmYgLS1naXQgYS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmls
dGVyRWZmZWN0LmNwcCBiL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJF
ZmZlY3QuY3BwCmluZGV4IGMyMjg3MzEuLmI1YjQ4YTAgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJFZmZlY3QuY3BwCisrKyBiL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJFZmZlY3QuY3BwCkBAIC03MiwxNSArNzIsNTQg
QEAgRmlsdGVyRWZmZWN0KiBGaWx0ZXJFZmZlY3Q6OmlucHV0RWZmZWN0KHVuc2lnbmVkIG51bWJl
cikgY29uc3QKICAgICByZXR1cm4gbV9pbnB1dEVmZmVjdHMuYXQobnVtYmVyKS5nZXQoKTsKIH0K
IAotR3JhcGhpY3NDb250ZXh0KiBGaWx0ZXJFZmZlY3Q6OmVmZmVjdENvbnRleHQoKQorSW1hZ2VC
dWZmZXIqIEZpbHRlckVmZmVjdDo6YXNJbWFnZUJ1ZmZlcigpCit7CisKK30KKworUGFzc1JlZlB0
cjxJbWFnZURhdGE+IEZpbHRlckVmZmVjdDo6YXNVbm11bHRpcGxpZWRJbWFnZShjb25zdCBJbnRS
ZWN0JikKK3sKK30KKworUGFzc1JlZlB0cjxJbWFnZURhdGE+IEZpbHRlckVmZmVjdDo6YXNQcmVt
dWx0aXBsaWVkSW1hZ2UoY29uc3QgSW50UmVjdCYpCit7Cit9CisKK3ZvaWQgRmlsdGVyRWZmZWN0
Ojphc1VubXVsdGlwbGllZEltYWdlKEltYWdlRGF0YSogZHN0LCBjb25zdCBJbnRSZWN0JikKK3sK
KworfQorCit2b2lkIEZpbHRlckVmZmVjdDo6YXNQcmVtdWx0aXBsaWVkSW1hZ2UoSW1hZ2VEYXRh
KiBkc3QsIGNvbnN0IEludFJlY3QmKQoreworCit9CisKK0ltYWdlQnVmZmVyKiBGaWx0ZXJFZmZl
Y3Q6OmNyZWF0ZUltYWdlQnVmZmVyUmVzdWx0KCkKK3sKKyAgICBkZXRlcm1pbmVBYnNvbHV0ZVBh
aW50UmVjdCgpOworICAgIGlmIChtX2Fic29sdXRlUGFpbnRSZWN0LmlzRW1wdHkoKSkKKyAgICAg
ICAgcmV0dXJuIDA7CisgICAgbV9pbWFnZUJ1ZmZlclJlc3VsdCA9IEltYWdlQnVmZmVyOjpjcmVh
dGUobV9hYnNvbHV0ZVBhaW50UmVjdC5zaXplKCksIENvbG9yU3BhY2VMaW5lYXJSR0IpOworICAg
IHJldHVybiBtX2ltYWdlQnVmZmVyUmVzdWx0OworfQorCitJbWFnZURhdGEqIEZpbHRlckVmZmVj
dDo6Y3JlYXRlVW5tdWx0aXBsaWVkSW1hZ2VSZXN1bHQoKQogewogICAgIGRldGVybWluZUFic29s
dXRlUGFpbnRSZWN0KCk7CiAgICAgaWYgKG1fYWJzb2x1dGVQYWludFJlY3QuaXNFbXB0eSgpKQog
ICAgICAgICByZXR1cm4gMDsKLSAgICBtX2VmZmVjdEJ1ZmZlciA9IEltYWdlQnVmZmVyOjpjcmVh
dGUobV9hYnNvbHV0ZVBhaW50UmVjdC5zaXplKCksIENvbG9yU3BhY2VMaW5lYXJSR0IpOwotICAg
IGlmICghbV9lZmZlY3RCdWZmZXIpCisgICAgbV91bm11bHRpcGxpZWRJbWFnZVJlc3VsdCA9IElt
YWdlRGF0YTo6Y3JlYXRlKG1fYWJzb2x1dGVQYWludFJlY3Qud2lkdGgoKSwgbV9hYnNvbHV0ZVBh
aW50UmVjdC5oZWlnaHQoKSk7CisgICAgcmV0dXJuIG1fdW5tdWx0aXBsaWVkSW1hZ2VSZXN1bHQ7
Cit9CisKK0ltYWdlRGF0YSogRmlsdGVyRWZmZWN0OjpjcmVhdGVQcmVtdWx0aXBsaWVkSW1hZ2VS
ZXN1bHQoKQoreworICAgIGRldGVybWluZUFic29sdXRlUGFpbnRSZWN0KCk7CisgICAgaWYgKG1f
YWJzb2x1dGVQYWludFJlY3QuaXNFbXB0eSgpKQogICAgICAgICByZXR1cm4gMDsKLSAgICByZXR1
cm4gbV9lZmZlY3RCdWZmZXItPmNvbnRleHQoKTsKKyAgICBtX3ByZW11bHRpcGxpZWRJbWFnZVJl
c3VsdCA9IEltYWdlRGF0YTo6Y3JlYXRlKG1fYWJzb2x1dGVQYWludFJlY3Qud2lkdGgoKSwgbV9h
YnNvbHV0ZVBhaW50UmVjdC5oZWlnaHQoKSk7CisgICAgcmV0dXJuIG1fcHJlbXVsdGlwbGllZElt
YWdlUmVzdWx0OwogfQogCiBUZXh0U3RyZWFtJiBGaWx0ZXJFZmZlY3Q6OmV4dGVybmFsUmVwcmVz
ZW50YXRpb24oVGV4dFN0cmVhbSYgdHMsIGludCkgY29uc3QKZGlmZiAtLWdpdCBhL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJFZmZlY3QuaCBiL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJFZmZlY3QuaAppbmRleCBmOTY3NGUyLi5iMWYyZjRl
IDEwMDY0NAotLS0gYS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyRWZm
ZWN0LmgKKysrIGIvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlckVmZmVj
dC5oCkBAIC01MCwxMyArNTAsMTIgQEAgY2xhc3MgRmlsdGVyRWZmZWN0IDogcHVibGljIFJlZkNv
dW50ZWQ8RmlsdGVyRWZmZWN0PiB7CiBwdWJsaWM6CiAgICAgdmlydHVhbCB+RmlsdGVyRWZmZWN0
KCk7CiAKLSAgICAvLyBUaGUgcmVzdWx0IGlzIGJvdW5kZWQgdG8gdGhlIHNpemUgb2YgdGhlIGZp
bHRlciBwcmltaXRpdmUgdG8gc2F2ZSByZXNvdXJjZXMuCi0gICAgSW1hZ2VCdWZmZXIqIHJlc3Vs
dEltYWdlKCkgY29uc3QgeyByZXR1cm4gbV9lZmZlY3RCdWZmZXIuZ2V0KCk7IH0KLSAgICB2b2lk
IHNldEVmZmVjdEJ1ZmZlcihQYXNzT3duUHRyPEltYWdlQnVmZmVyPiBlZmZlY3RCdWZmZXIpIHsg
bV9lZmZlY3RCdWZmZXIgPSBlZmZlY3RCdWZmZXI7IH0KLQotICAgIC8vIENyZWF0ZXMgdGhlIElt
YWdlQnVmZmVyIGZvciB0aGUgY3VycmVudCBmaWx0ZXIgcHJpbWl0aXZlIHJlc3VsdCBpbiB0aGUg
c2l6ZSBvZiB0aGUKLSAgICAvLyByZXBhaW50UmVjdC4gR2l2ZXMgYmFjayB0aGUgR3JhcGhpY3ND
b250ZXh0IG9mIHRoZSBvd24gSW1hZ2VCdWZmZXIuCi0gICAgR3JhcGhpY3NDb250ZXh0KiBlZmZl
Y3RDb250ZXh0KCk7CisgICAgYm9vbCBoYXNSZXN1bHQoKSB7IHJldHVybiBtX2ltYWdlQnVmZmVy
UmVzdWx0IHx8IG1fdW5tdWx0aXBsaWVkSW1hZ2VSZXN1bHQgfHwgbV9wcmVtdWx0aXBsaWVkSW1h
Z2VSZXN1bHQ7IH0KKyAgICBJbWFnZUJ1ZmZlciogYXNJbWFnZUJ1ZmZlcigpOworICAgIFBhc3NS
ZWZQdHI8SW1hZ2VEYXRhPiBhc1VubXVsdGlwbGllZEltYWdlKGNvbnN0IEludFJlY3QmKTsKKyAg
ICBQYXNzUmVmUHRyPEltYWdlRGF0YT4gYXNQcmVtdWx0aXBsaWVkSW1hZ2UoY29uc3QgSW50UmVj
dCYpOworICAgIHZvaWQgYXNVbm11bHRpcGxpZWRJbWFnZShJbWFnZURhdGEqIGRzdCwgY29uc3Qg
SW50UmVjdCYpOworICAgIHZvaWQgYXNQcmVtdWx0aXBsaWVkSW1hZ2UoSW1hZ2VEYXRhKiBkc3Qs
IGNvbnN0IEludFJlY3QmKTsKIAogICAgIEZpbHRlckVmZmVjdFZlY3RvciYgaW5wdXRFZmZlY3Rz
KCkgeyByZXR1cm4gbV9pbnB1dEVmZmVjdHM7IH0KICAgICBGaWx0ZXJFZmZlY3QqIGlucHV0RWZm
ZWN0KHVuc2lnbmVkKSBjb25zdDsKQEAgLTExMCw4ICsxMDksMTQgQEAgcHVibGljOgogcHJvdGVj
dGVkOgogICAgIEZpbHRlckVmZmVjdChGaWx0ZXIqKTsKIAorICAgIEltYWdlQnVmZmVyKiBjcmVh
dGVJbWFnZUJ1ZmZlclJlc3VsdCgpOworICAgIEltYWdlRGF0YSogY3JlYXRlVW5tdWx0aXBsaWVk
SW1hZ2VSZXN1bHQoKTsKKyAgICBJbWFnZURhdGEqIGNyZWF0ZVByZW11bHRpcGxpZWRJbWFnZVJl
c3VsdCgpOworCiBwcml2YXRlOgotICAgIE93blB0cjxJbWFnZUJ1ZmZlcj4gbV9lZmZlY3RCdWZm
ZXI7CisgICAgT3duUHRyPEltYWdlQnVmZmVyPiBtX2ltYWdlQnVmZmVyUmVzdWx0OworICAgIE93
blB0cjxJbWFnZURhdGE+IG1fdW5tdWx0aXBsaWVkSW1hZ2VSZXN1bHQ7CisgICAgT3duUHRyPElt
YWdlRGF0YT4gbV9wcmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQ7CiAgICAgRmlsdGVyRWZmZWN0VmVj
dG9yIG1faW5wdXRFZmZlY3RzOwogCiAgICAgYm9vbCBtX2FscGhhSW1hZ2U7Ci0tIAoxLjYuMC40
Cgo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>74657</attachid>
            <date>2010-11-23 06:42:53 -0800</date>
            <delta_ts>2010-11-25 03:45:28 -0800</delta_ts>
            <desc>updated concept</desc>
            <filename>0001-filter-result.patch</filename>
            <type>text/plain</type>
            <size>46266</size>
            <attacher name="Zoltan Herczeg">zherczeg</attacher>
            
              <data encoding="base64">RnJvbSAyODQxZjY4ZmUyMTUzNTlmMmUzMmI2MmFiMDg4M2NlZjYwMWNhZTkzIE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBab2x0YW4gSGVyY3plZyA8emhlcmN6ZWdAaW5mLnUtc3plZ2Vk
Lmh1PgpEYXRlOiBUdWUsIDIzIE5vdiAyMDEwIDE1OjM2OjM4ICswMTAwClN1YmplY3Q6IFtQQVRD
SF0gZmlsdGVyLXJlc3VsdAoKU2lnbmVkLW9mZi1ieTogWm9sdGFuIEhlcmN6ZWcgPHpoZXJjemVn
QGluZi51LXN6ZWdlZC5odT4KLS0tCiBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMv
RkVCbGVuZC5jcHAgICAgICB8ICAgMTUgKy0KIC4uLi9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJz
L0ZFQ29sb3JNYXRyaXguY3BwICAgIHwgICAxNCArLQogLi4uL2dyYXBoaWNzL2ZpbHRlcnMvRkVD
b21wb25lbnRUcmFuc2Zlci5jcHAgICAgICAgfCAgICA5ICstCiBXZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2ZpbHRlcnMvRkVDb21wb3NpdGUuY3BwICB8ICAgMzMgKystLQogLi4uL3BsYXRmb3Jt
L2dyYXBoaWNzL2ZpbHRlcnMvRkVDb252b2x2ZU1hdHJpeC5jcHAgfCAgIDQxICsrKy0tLQogLi4u
L2dyYXBoaWNzL2ZpbHRlcnMvRkVEaXNwbGFjZW1lbnRNYXAuY3BwICAgICAgICAgfCAgIDIyICsr
LS0KIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUZsb29kLmNwcCAgICAgIHwg
ICAgNiArLQogLi4uL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVHYXVzc2lhbkJsdXIuY3Bw
ICAgfCAgIDI0ICsrLS0KIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUxpZ2h0
aW5nLmNwcCAgIHwgICAxMiArLQogV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZF
TWVyZ2UuY3BwICAgICAgfCAgICA5ICstCiBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRl
cnMvRkVNb3JwaG9sb2d5LmNwcCB8ICAgMTIgKy0KIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
ZmlsdGVycy9GRU9mZnNldC5jcHAgICAgIHwgICAgOCArLQogV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9maWx0ZXJzL0ZFVGlsZS5jcHAgICAgICAgfCAgIDEyICstCiBXZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2ZpbHRlcnMvRkVUdXJidWxlbmNlLmNwcCB8ICAgMTQgKy0KIFdlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJFZmZlY3QuY3BwIHwgIDE1NiArKysrKysrKysr
KysrKysrKysrLQogV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlckVmZmVj
dC5oICAgfCAgIDIzICsrLQogV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL1NvdXJj
ZUFscGhhLmNwcCAgfCAgICA1ICstCiAuLi4vcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9Tb3Vy
Y2VHcmFwaGljLmNwcCAgICB8ICAgIDYgKy0KIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclNWR1Jl
c291cmNlRmlsdGVyLmNwcCAgICAgIHwgICAgNCArLQogV2ViQ29yZS9zdmcvZ3JhcGhpY3MvZmls
dGVycy9TVkdGRUltYWdlLmNwcCAgICAgICAgfCAgICA4ICstCiAyMCBmaWxlcyBjaGFuZ2VkLCAy
ODYgaW5zZXJ0aW9ucygrKSwgMTQ3IGRlbGV0aW9ucygtKQoKZGlmZiAtLWdpdCBhL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUJsZW5kLmNwcCBiL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvZmlsdGVycy9GRUJsZW5kLmNwcAppbmRleCA4OWI0NGUwLi5mY2QzOWEzIDEwMDY0
NAotLS0gYS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVCbGVuZC5jcHAKKysr
IGIvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQmxlbmQuY3BwCkBAIC05Miwy
NiArOTIsMjUgQEAgdm9pZCBGRUJsZW5kOjphcHBseSgpCiAgICAgRmlsdGVyRWZmZWN0KiBpbjIg
PSBpbnB1dEVmZmVjdCgxKTsKICAgICBpbi0+YXBwbHkoKTsKICAgICBpbjItPmFwcGx5KCk7Ci0g
ICAgaWYgKCFpbi0+cmVzdWx0SW1hZ2UoKSB8fCAhaW4yLT5yZXN1bHRJbWFnZSgpKQorICAgIGlm
ICghaW4tPmhhc1Jlc3VsdCgpIHx8ICFpbjItPmhhc1Jlc3VsdCgpKQogICAgICAgICByZXR1cm47
CiAKICAgICBpZiAobV9tb2RlIDw9IEZFQkxFTkRfTU9ERV9VTktOT1dOIHx8IG1fbW9kZSA+IEZF
QkxFTkRfTU9ERV9MSUdIVEVOKQogICAgICAgICByZXR1cm47CiAKLSAgICBpZiAoIWVmZmVjdENv
bnRleHQoKSkKKyAgICBJbWFnZURhdGEqIHJlc3VsdEltYWdlID0gY3JlYXRlUHJlbXVsdGlwbGll
ZEltYWdlUmVzdWx0KCk7CisgICAgaWYgKCFyZXN1bHRJbWFnZSkKICAgICAgICAgcmV0dXJuOwog
CiAgICAgSW50UmVjdCBlZmZlY3RBRHJhd2luZ1JlY3QgPSByZXF1ZXN0ZWRSZWdpb25PZklucHV0
SW1hZ2VEYXRhKGluLT5hYnNvbHV0ZVBhaW50UmVjdCgpKTsKLSAgICBSZWZQdHI8SW1hZ2VEYXRh
PiBzcmNJbWFnZURhdGFBID0gaW4tPnJlc3VsdEltYWdlKCktPmdldFByZW11bHRpcGxpZWRJbWFn
ZURhdGEoZWZmZWN0QURyYXdpbmdSZWN0KTsKKyAgICBSZWZQdHI8SW1hZ2VEYXRhPiBzcmNJbWFn
ZURhdGFBID0gaW4tPmFzUHJlbXVsdGlwbGllZEltYWdlKGVmZmVjdEFEcmF3aW5nUmVjdCk7CiAg
ICAgQnl0ZUFycmF5KiBzcmNQaXhlbEFycmF5QSA9IHNyY0ltYWdlRGF0YUEtPmRhdGEoKS0+ZGF0
YSgpOwogCiAgICAgSW50UmVjdCBlZmZlY3RCRHJhd2luZ1JlY3QgPSByZXF1ZXN0ZWRSZWdpb25P
ZklucHV0SW1hZ2VEYXRhKGluMi0+YWJzb2x1dGVQYWludFJlY3QoKSk7Ci0gICAgUmVmUHRyPElt
YWdlRGF0YT4gc3JjSW1hZ2VEYXRhQiA9IGluMi0+cmVzdWx0SW1hZ2UoKS0+Z2V0UHJlbXVsdGlw
bGllZEltYWdlRGF0YShlZmZlY3RCRHJhd2luZ1JlY3QpOworICAgIFJlZlB0cjxJbWFnZURhdGE+
IHNyY0ltYWdlRGF0YUIgPSBpbjItPmFzUHJlbXVsdGlwbGllZEltYWdlKGVmZmVjdEJEcmF3aW5n
UmVjdCk7CiAgICAgQnl0ZUFycmF5KiBzcmNQaXhlbEFycmF5QiA9IHNyY0ltYWdlRGF0YUItPmRh
dGEoKS0+ZGF0YSgpOwogCi0gICAgSW50UmVjdCBpbWFnZVJlY3QoSW50UG9pbnQoKSwgcmVzdWx0
SW1hZ2UoKS0+c2l6ZSgpKTsKLSAgICBSZWZQdHI8SW1hZ2VEYXRhPiBpbWFnZURhdGEgPSBJbWFn
ZURhdGE6OmNyZWF0ZShpbWFnZVJlY3Qud2lkdGgoKSwgaW1hZ2VSZWN0LmhlaWdodCgpKTsKLSAg
ICBCeXRlQXJyYXkqIGRzdFBpeGVsQXJyYXkgPSBpbWFnZURhdGEtPmRhdGEoKS0+ZGF0YSgpOwor
ICAgIEJ5dGVBcnJheSogZHN0UGl4ZWxBcnJheSA9IHJlc3VsdEltYWdlLT5kYXRhKCktPmRhdGEo
KTsKIAogICAgIC8vIEtlZXAgc3luY2hyb25pemVkIHdpdGggQmxlbmRNb2RlVHlwZQogICAgIHN0
YXRpYyBjb25zdCBCbGVuZFR5cGUgY2FsbEVmZmVjdFtdID0ge3Vua25vd24sIG5vcm1hbCwgbXVs
dGlwbHksIHNjcmVlbiwgZGFya2VuLCBsaWdodGVufTsKQEAgLTEzMSw4ICsxMzAsNiBAQCB2b2lk
IEZFQmxlbmQ6OmFwcGx5KCkKICAgICAgICAgdW5zaWduZWQgY2hhciBhbHBoYVIgPSAyNTUgLSAo
KDI1NSAtIGFscGhhQSkgKiAoMjU1IC0gYWxwaGFCKSkgLyAyNTU7CiAgICAgICAgIGRzdFBpeGVs
QXJyYXktPnNldChwaXhlbE9mZnNldCArIDMsIGFscGhhUik7CiAgICAgfQotCi0gICAgcmVzdWx0
SW1hZ2UoKS0+cHV0UHJlbXVsdGlwbGllZEltYWdlRGF0YShpbWFnZURhdGEuZ2V0KCksIGltYWdl
UmVjdCwgSW50UG9pbnQoKSk7CiB9CiAKIHZvaWQgRkVCbGVuZDo6ZHVtcCgpCmRpZmYgLS1naXQg
YS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDb2xvck1hdHJpeC5jcHAgYi9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDb2xvck1hdHJpeC5jcHAKaW5kZXgg
MWM5OWIxZS4uNGM1YTBiOCAxMDA2NDQKLS0tIGEvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9m
aWx0ZXJzL0ZFQ29sb3JNYXRyaXguY3BwCisrKyBiL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
ZmlsdGVycy9GRUNvbG9yTWF0cml4LmNwcApAQCAtMTUyLDE3ICsxNTIsMTcgQEAgdm9pZCBGRUNv
bG9yTWF0cml4OjphcHBseSgpCiB7CiAgICAgRmlsdGVyRWZmZWN0KiBpbiA9IGlucHV0RWZmZWN0
KDApOwogICAgIGluLT5hcHBseSgpOwotICAgIGlmICghaW4tPnJlc3VsdEltYWdlKCkpCisgICAg
aWYgKCFpbi0+aGFzUmVzdWx0KCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIEdyYXBoaWNzQ29u
dGV4dCogZmlsdGVyQ29udGV4dCA9IGVmZmVjdENvbnRleHQoKTsKLSAgICBpZiAoIWZpbHRlckNv
bnRleHQpCisgICAgSW1hZ2VCdWZmZXIqIHJlc3VsdEltYWdlID0gY3JlYXRlSW1hZ2VCdWZmZXJS
ZXN1bHQoKTsKKyAgICBpZiAoIXJlc3VsdEltYWdlKQogICAgICAgICByZXR1cm47CiAKLSAgICBm
aWx0ZXJDb250ZXh0LT5kcmF3SW1hZ2VCdWZmZXIoaW4tPnJlc3VsdEltYWdlKCksIENvbG9yU3Bh
Y2VEZXZpY2VSR0IsIGRyYXdpbmdSZWdpb25PZklucHV0SW1hZ2UoaW4tPmFic29sdXRlUGFpbnRS
ZWN0KCkpKTsKKyAgICByZXN1bHRJbWFnZS0+Y29udGV4dCgpLT5kcmF3SW1hZ2VCdWZmZXIoaW4t
PmFzSW1hZ2VCdWZmZXIoKSwgQ29sb3JTcGFjZURldmljZVJHQiwgZHJhd2luZ1JlZ2lvbk9mSW5w
dXRJbWFnZShpbi0+YWJzb2x1dGVQYWludFJlY3QoKSkpOwogCi0gICAgSW50UmVjdCBpbWFnZVJl
Y3QoSW50UG9pbnQoKSwgcmVzdWx0SW1hZ2UoKS0+c2l6ZSgpKTsKLSAgICBSZWZQdHI8SW1hZ2VE
YXRhPiBpbWFnZURhdGEgPSByZXN1bHRJbWFnZSgpLT5nZXRVbm11bHRpcGxpZWRJbWFnZURhdGEo
aW1hZ2VSZWN0KTsKKyAgICBJbnRSZWN0IGltYWdlUmVjdChJbnRQb2ludCgpLCBhYnNvbHV0ZVBh
aW50UmVjdCgpLnNpemUoKSk7CisgICAgUmVmUHRyPEltYWdlRGF0YT4gaW1hZ2VEYXRhID0gcmVz
dWx0SW1hZ2UtPmdldFVubXVsdGlwbGllZEltYWdlRGF0YShpbWFnZVJlY3QpOwogICAgIEJ5dGVB
cnJheSogcGl4ZWxBcnJheSA9IGltYWdlRGF0YS0+ZGF0YSgpLT5kYXRhKCk7CiAKICAgICBzd2l0
Y2ggKG1fdHlwZSkgewpAQCAtMTgzLDcgKzE4Myw3IEBAIHZvaWQgRkVDb2xvck1hdHJpeDo6YXBw
bHkoKQogICAgICAgICAgICAgYnJlYWs7CiAgICAgfQogCi0gICAgcmVzdWx0SW1hZ2UoKS0+cHV0
VW5tdWx0aXBsaWVkSW1hZ2VEYXRhKGltYWdlRGF0YS5nZXQoKSwgaW1hZ2VSZWN0LCBJbnRQb2lu
dCgpKTsKKyAgICByZXN1bHRJbWFnZS0+cHV0VW5tdWx0aXBsaWVkSW1hZ2VEYXRhKGltYWdlRGF0
YS5nZXQoKSwgaW1hZ2VSZWN0LCBJbnRQb2ludCgpKTsKIH0KIAogdm9pZCBGRUNvbG9yTWF0cml4
OjpkdW1wKCkKZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9G
RUNvbXBvbmVudFRyYW5zZmVyLmNwcCBiL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVy
cy9GRUNvbXBvbmVudFRyYW5zZmVyLmNwcAppbmRleCBjZmFiNTBiLi45NzM0ZDdhIDEwMDY0NAot
LS0gYS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDb21wb25lbnRUcmFuc2Zl
ci5jcHAKKysrIGIvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29tcG9uZW50
VHJhbnNmZXIuY3BwCkBAIC0xNTEsMTAgKzE1MSwxMSBAQCB2b2lkIEZFQ29tcG9uZW50VHJhbnNm
ZXI6OmFwcGx5KCkKIHsKICAgICBGaWx0ZXJFZmZlY3QqIGluID0gaW5wdXRFZmZlY3QoMCk7CiAg
ICAgaW4tPmFwcGx5KCk7Ci0gICAgaWYgKCFpbi0+cmVzdWx0SW1hZ2UoKSkKKyAgICBpZiAoIWlu
LT5oYXNSZXN1bHQoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgaWYgKCFlZmZlY3RDb250ZXh0
KCkpCisgICAgSW1hZ2VEYXRhKiBpbWFnZURhdGEgPSBjcmVhdGVVbm11bHRpcGxpZWRJbWFnZVJl
c3VsdCgpOworICAgIGlmICghaW1hZ2VEYXRhKQogICAgICAgICByZXR1cm47CiAKICAgICB1bnNp
Z25lZCBjaGFyIHJWYWx1ZXNbMjU2XSwgZ1ZhbHVlc1syNTZdLCBiVmFsdWVzWzI1Nl0sIGFWYWx1
ZXNbMjU2XTsKQEAgLTE2OCw3ICsxNjksNyBAQCB2b2lkIEZFQ29tcG9uZW50VHJhbnNmZXI6OmFw
cGx5KCkKICAgICAgICAgKCpjYWxsRWZmZWN0W3RyYW5zZmVyRnVuY3Rpb25bY2hhbm5lbF0udHlw
ZV0pKHRhYmxlc1tjaGFubmVsXSwgdHJhbnNmZXJGdW5jdGlvbltjaGFubmVsXSk7CiAKICAgICBJ
bnRSZWN0IGRyYXdpbmdSZWN0ID0gcmVxdWVzdGVkUmVnaW9uT2ZJbnB1dEltYWdlRGF0YShpbi0+
YWJzb2x1dGVQYWludFJlY3QoKSk7Ci0gICAgUmVmUHRyPEltYWdlRGF0YT4gaW1hZ2VEYXRhID0g
aW4tPnJlc3VsdEltYWdlKCktPmdldFVubXVsdGlwbGllZEltYWdlRGF0YShkcmF3aW5nUmVjdCk7
CisgICAgaW4tPmFzVW5tdWx0aXBsaWVkSW1hZ2UoaW1hZ2VEYXRhLCBkcmF3aW5nUmVjdCk7CiAg
ICAgQnl0ZUFycmF5KiBwaXhlbEFycmF5ID0gaW1hZ2VEYXRhLT5kYXRhKCktPmRhdGEoKTsKIAog
ICAgIHVuc2lnbmVkIHBpeGVsQXJyYXlMZW5ndGggPSBwaXhlbEFycmF5LT5sZW5ndGgoKTsKQEAg
LTE3OCw4ICsxNzksNiBAQCB2b2lkIEZFQ29tcG9uZW50VHJhbnNmZXI6OmFwcGx5KCkKICAgICAg
ICAgICAgIHBpeGVsQXJyYXktPnNldChwaXhlbE9mZnNldCArIGNoYW5uZWwsIHRhYmxlc1tjaGFu
bmVsXVtjXSk7CiAgICAgICAgIH0KICAgICB9Ci0KLSAgICByZXN1bHRJbWFnZSgpLT5wdXRVbm11
bHRpcGxpZWRJbWFnZURhdGEoaW1hZ2VEYXRhLmdldCgpLCBJbnRSZWN0KEludFBvaW50KCksIHJl
c3VsdEltYWdlKCktPnNpemUoKSksIEludFBvaW50KCkpOwogfQogCiB2b2lkIEZFQ29tcG9uZW50
VHJhbnNmZXI6OmR1bXAoKQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9m
aWx0ZXJzL0ZFQ29tcG9zaXRlLmNwcCBiL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVy
cy9GRUNvbXBvc2l0ZS5jcHAKaW5kZXggZDI3MzIxZi4uYzUwNTg1ZiAxMDA2NDQKLS0tIGEvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29tcG9zaXRlLmNwcAorKysgYi9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDb21wb3NpdGUuY3BwCkBAIC0xNDEsNDgg
KzE0MSw0OSBAQCB2b2lkIEZFQ29tcG9zaXRlOjphcHBseSgpCiAgICAgRmlsdGVyRWZmZWN0KiBp
bjIgPSBpbnB1dEVmZmVjdCgxKTsKICAgICBpbi0+YXBwbHkoKTsKICAgICBpbjItPmFwcGx5KCk7
Ci0gICAgaWYgKCFpbi0+cmVzdWx0SW1hZ2UoKSB8fCAhaW4yLT5yZXN1bHRJbWFnZSgpKQorICAg
IGlmICghaW4tPmhhc1Jlc3VsdCgpIHx8ICFpbjItPmhhc1Jlc3VsdCgpKQogICAgICAgICByZXR1
cm47CiAKLSAgICBHcmFwaGljc0NvbnRleHQqIGZpbHRlckNvbnRleHQgPSBlZmZlY3RDb250ZXh0
KCk7Ci0gICAgaWYgKCFmaWx0ZXJDb250ZXh0KQorICAgIEltYWdlQnVmZmVyKiByZXN1bHRJbWFn
ZSA9IGNyZWF0ZUltYWdlQnVmZmVyUmVzdWx0KCk7CisgICAgaWYgKCFyZXN1bHRJbWFnZSkKICAg
ICAgICAgcmV0dXJuOworICAgIEdyYXBoaWNzQ29udGV4dCogZmlsdGVyQ29udGV4dCA9IHJlc3Vs
dEltYWdlLT5jb250ZXh0KCk7CiAKICAgICBGbG9hdFJlY3Qgc3JjUmVjdCA9IEZsb2F0UmVjdCgw
LCAwLCAtMSwgLTEpOwogICAgIHN3aXRjaCAobV90eXBlKSB7CiAgICAgY2FzZSBGRUNPTVBPU0lU
RV9PUEVSQVRPUl9PVkVSOgotICAgICAgICBmaWx0ZXJDb250ZXh0LT5kcmF3SW1hZ2VCdWZmZXIo
aW4yLT5yZXN1bHRJbWFnZSgpLCBDb2xvclNwYWNlRGV2aWNlUkdCLCBkcmF3aW5nUmVnaW9uT2ZJ
bnB1dEltYWdlKGluMi0+YWJzb2x1dGVQYWludFJlY3QoKSkpOwotICAgICAgICBmaWx0ZXJDb250
ZXh0LT5kcmF3SW1hZ2VCdWZmZXIoaW4tPnJlc3VsdEltYWdlKCksIENvbG9yU3BhY2VEZXZpY2VS
R0IsIGRyYXdpbmdSZWdpb25PZklucHV0SW1hZ2UoaW4tPmFic29sdXRlUGFpbnRSZWN0KCkpKTsK
KyAgICAgICAgZmlsdGVyQ29udGV4dC0+ZHJhd0ltYWdlQnVmZmVyKGluMi0+YXNJbWFnZUJ1ZmZl
cigpLCBDb2xvclNwYWNlRGV2aWNlUkdCLCBkcmF3aW5nUmVnaW9uT2ZJbnB1dEltYWdlKGluMi0+
YWJzb2x1dGVQYWludFJlY3QoKSkpOworICAgICAgICBmaWx0ZXJDb250ZXh0LT5kcmF3SW1hZ2VC
dWZmZXIoaW4tPmFzSW1hZ2VCdWZmZXIoKSwgQ29sb3JTcGFjZURldmljZVJHQiwgZHJhd2luZ1Jl
Z2lvbk9mSW5wdXRJbWFnZShpbi0+YWJzb2x1dGVQYWludFJlY3QoKSkpOwogICAgICAgICBicmVh
azsKICAgICBjYXNlIEZFQ09NUE9TSVRFX09QRVJBVE9SX0lOOgogICAgICAgICBmaWx0ZXJDb250
ZXh0LT5zYXZlKCk7Ci0gICAgICAgIGZpbHRlckNvbnRleHQtPmNsaXBUb0ltYWdlQnVmZmVyKGlu
Mi0+cmVzdWx0SW1hZ2UoKSwgZHJhd2luZ1JlZ2lvbk9mSW5wdXRJbWFnZShpbjItPmFic29sdXRl
UGFpbnRSZWN0KCkpKTsKLSAgICAgICAgZmlsdGVyQ29udGV4dC0+ZHJhd0ltYWdlQnVmZmVyKGlu
LT5yZXN1bHRJbWFnZSgpLCBDb2xvclNwYWNlRGV2aWNlUkdCLCBkcmF3aW5nUmVnaW9uT2ZJbnB1
dEltYWdlKGluLT5hYnNvbHV0ZVBhaW50UmVjdCgpKSk7CisgICAgICAgIGZpbHRlckNvbnRleHQt
PmNsaXBUb0ltYWdlQnVmZmVyKGluMi0+YXNJbWFnZUJ1ZmZlcigpLCBkcmF3aW5nUmVnaW9uT2ZJ
bnB1dEltYWdlKGluMi0+YWJzb2x1dGVQYWludFJlY3QoKSkpOworICAgICAgICBmaWx0ZXJDb250
ZXh0LT5kcmF3SW1hZ2VCdWZmZXIoaW4tPmFzSW1hZ2VCdWZmZXIoKSwgQ29sb3JTcGFjZURldmlj
ZVJHQiwgZHJhd2luZ1JlZ2lvbk9mSW5wdXRJbWFnZShpbi0+YWJzb2x1dGVQYWludFJlY3QoKSkp
OwogICAgICAgICBmaWx0ZXJDb250ZXh0LT5yZXN0b3JlKCk7CiAgICAgICAgIGJyZWFrOwogICAg
IGNhc2UgRkVDT01QT1NJVEVfT1BFUkFUT1JfT1VUOgotICAgICAgICBmaWx0ZXJDb250ZXh0LT5k
cmF3SW1hZ2VCdWZmZXIoaW4tPnJlc3VsdEltYWdlKCksIENvbG9yU3BhY2VEZXZpY2VSR0IsIGRy
YXdpbmdSZWdpb25PZklucHV0SW1hZ2UoaW4tPmFic29sdXRlUGFpbnRSZWN0KCkpKTsKLSAgICAg
ICAgZmlsdGVyQ29udGV4dC0+ZHJhd0ltYWdlQnVmZmVyKGluMi0+cmVzdWx0SW1hZ2UoKSwgQ29s
b3JTcGFjZURldmljZVJHQiwgZHJhd2luZ1JlZ2lvbk9mSW5wdXRJbWFnZShpbjItPmFic29sdXRl
UGFpbnRSZWN0KCkpLCBzcmNSZWN0LCBDb21wb3NpdGVEZXN0aW5hdGlvbk91dCk7CisgICAgICAg
IGZpbHRlckNvbnRleHQtPmRyYXdJbWFnZUJ1ZmZlcihpbi0+YXNJbWFnZUJ1ZmZlcigpLCBDb2xv
clNwYWNlRGV2aWNlUkdCLCBkcmF3aW5nUmVnaW9uT2ZJbnB1dEltYWdlKGluLT5hYnNvbHV0ZVBh
aW50UmVjdCgpKSk7CisgICAgICAgIGZpbHRlckNvbnRleHQtPmRyYXdJbWFnZUJ1ZmZlcihpbjIt
PmFzSW1hZ2VCdWZmZXIoKSwgQ29sb3JTcGFjZURldmljZVJHQiwgZHJhd2luZ1JlZ2lvbk9mSW5w
dXRJbWFnZShpbjItPmFic29sdXRlUGFpbnRSZWN0KCkpLCBzcmNSZWN0LCBDb21wb3NpdGVEZXN0
aW5hdGlvbk91dCk7CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgRkVDT01QT1NJVEVfT1BFUkFU
T1JfQVRPUDoKLSAgICAgICAgZmlsdGVyQ29udGV4dC0+ZHJhd0ltYWdlQnVmZmVyKGluMi0+cmVz
dWx0SW1hZ2UoKSwgQ29sb3JTcGFjZURldmljZVJHQiwgZHJhd2luZ1JlZ2lvbk9mSW5wdXRJbWFn
ZShpbjItPmFic29sdXRlUGFpbnRSZWN0KCkpKTsKLSAgICAgICAgZmlsdGVyQ29udGV4dC0+ZHJh
d0ltYWdlQnVmZmVyKGluLT5yZXN1bHRJbWFnZSgpLCBDb2xvclNwYWNlRGV2aWNlUkdCLCBkcmF3
aW5nUmVnaW9uT2ZJbnB1dEltYWdlKGluLT5hYnNvbHV0ZVBhaW50UmVjdCgpKSwgc3JjUmVjdCwg
Q29tcG9zaXRlU291cmNlQXRvcCk7CisgICAgICAgIGZpbHRlckNvbnRleHQtPmRyYXdJbWFnZUJ1
ZmZlcihpbjItPmFzSW1hZ2VCdWZmZXIoKSwgQ29sb3JTcGFjZURldmljZVJHQiwgZHJhd2luZ1Jl
Z2lvbk9mSW5wdXRJbWFnZShpbjItPmFic29sdXRlUGFpbnRSZWN0KCkpKTsKKyAgICAgICAgZmls
dGVyQ29udGV4dC0+ZHJhd0ltYWdlQnVmZmVyKGluLT5hc0ltYWdlQnVmZmVyKCksIENvbG9yU3Bh
Y2VEZXZpY2VSR0IsIGRyYXdpbmdSZWdpb25PZklucHV0SW1hZ2UoaW4tPmFic29sdXRlUGFpbnRS
ZWN0KCkpLCBzcmNSZWN0LCBDb21wb3NpdGVTb3VyY2VBdG9wKTsKICAgICAgICAgYnJlYWs7CiAg
ICAgY2FzZSBGRUNPTVBPU0lURV9PUEVSQVRPUl9YT1I6Ci0gICAgICAgIGZpbHRlckNvbnRleHQt
PmRyYXdJbWFnZUJ1ZmZlcihpbjItPnJlc3VsdEltYWdlKCksIENvbG9yU3BhY2VEZXZpY2VSR0Is
IGRyYXdpbmdSZWdpb25PZklucHV0SW1hZ2UoaW4yLT5hYnNvbHV0ZVBhaW50UmVjdCgpKSk7Ci0g
ICAgICAgIGZpbHRlckNvbnRleHQtPmRyYXdJbWFnZUJ1ZmZlcihpbi0+cmVzdWx0SW1hZ2UoKSwg
Q29sb3JTcGFjZURldmljZVJHQiwgZHJhd2luZ1JlZ2lvbk9mSW5wdXRJbWFnZShpbi0+YWJzb2x1
dGVQYWludFJlY3QoKSksIHNyY1JlY3QsIENvbXBvc2l0ZVhPUik7CisgICAgICAgIGZpbHRlckNv
bnRleHQtPmRyYXdJbWFnZUJ1ZmZlcihpbjItPmFzSW1hZ2VCdWZmZXIoKSwgQ29sb3JTcGFjZURl
dmljZVJHQiwgZHJhd2luZ1JlZ2lvbk9mSW5wdXRJbWFnZShpbjItPmFic29sdXRlUGFpbnRSZWN0
KCkpKTsKKyAgICAgICAgZmlsdGVyQ29udGV4dC0+ZHJhd0ltYWdlQnVmZmVyKGluLT5hc0ltYWdl
QnVmZmVyKCksIENvbG9yU3BhY2VEZXZpY2VSR0IsIGRyYXdpbmdSZWdpb25PZklucHV0SW1hZ2Uo
aW4tPmFic29sdXRlUGFpbnRSZWN0KCkpLCBzcmNSZWN0LCBDb21wb3NpdGVYT1IpOwogICAgICAg
ICBicmVhazsKICAgICBjYXNlIEZFQ09NUE9TSVRFX09QRVJBVE9SX0FSSVRITUVUSUM6IHsKICAg
ICAgICAgSW50UmVjdCBlZmZlY3RBRHJhd2luZ1JlY3QgPSByZXF1ZXN0ZWRSZWdpb25PZklucHV0
SW1hZ2VEYXRhKGluLT5hYnNvbHV0ZVBhaW50UmVjdCgpKTsKLSAgICAgICAgUmVmUHRyPEltYWdl
RGF0YT4gc3JjSW1hZ2VEYXRhID0gaW4tPnJlc3VsdEltYWdlKCktPmdldFByZW11bHRpcGxpZWRJ
bWFnZURhdGEoZWZmZWN0QURyYXdpbmdSZWN0KTsKKyAgICAgICAgUmVmUHRyPEltYWdlRGF0YT4g
c3JjSW1hZ2VEYXRhID0gaW4tPmFzSW1hZ2VCdWZmZXIoKS0+Z2V0UHJlbXVsdGlwbGllZEltYWdl
RGF0YShlZmZlY3RBRHJhd2luZ1JlY3QpOwogICAgICAgICBCeXRlQXJyYXkqIHNyY1BpeGVsQXJy
YXlBID0gc3JjSW1hZ2VEYXRhLT5kYXRhKCktPmRhdGEoKTsKIAogICAgICAgICBJbnRSZWN0IGVm
ZmVjdEJEcmF3aW5nUmVjdCA9IHJlcXVlc3RlZFJlZ2lvbk9mSW5wdXRJbWFnZURhdGEoaW4yLT5h
YnNvbHV0ZVBhaW50UmVjdCgpKTsKLSAgICAgICAgUmVmUHRyPEltYWdlRGF0YT4gaW1hZ2VEYXRh
ID0gaW4yLT5yZXN1bHRJbWFnZSgpLT5nZXRQcmVtdWx0aXBsaWVkSW1hZ2VEYXRhKGVmZmVjdEJE
cmF3aW5nUmVjdCk7CisgICAgICAgIFJlZlB0cjxJbWFnZURhdGE+IGltYWdlRGF0YSA9IGluMi0+
YXNJbWFnZUJ1ZmZlcigpLT5nZXRQcmVtdWx0aXBsaWVkSW1hZ2VEYXRhKGVmZmVjdEJEcmF3aW5n
UmVjdCk7CiAgICAgICAgIEJ5dGVBcnJheSogc3JjUGl4ZWxBcnJheUIgPSBpbWFnZURhdGEtPmRh
dGEoKS0+ZGF0YSgpOwogCiAgICAgICAgIGFyaXRobWV0aWMoc3JjUGl4ZWxBcnJheUEsIHNyY1Bp
eGVsQXJyYXlCLCBtX2sxLCBtX2syLCBtX2szLCBtX2s0KTsKLSAgICAgICAgcmVzdWx0SW1hZ2Uo
KS0+cHV0UHJlbXVsdGlwbGllZEltYWdlRGF0YShpbWFnZURhdGEuZ2V0KCksIEludFJlY3QoSW50
UG9pbnQoKSwgcmVzdWx0SW1hZ2UoKS0+c2l6ZSgpKSwgSW50UG9pbnQoKSk7CisgICAgICAgIHJl
c3VsdEltYWdlLT5wdXRQcmVtdWx0aXBsaWVkSW1hZ2VEYXRhKGltYWdlRGF0YS5nZXQoKSwgSW50
UmVjdChJbnRQb2ludCgpLCByZXN1bHRJbWFnZS0+c2l6ZSgpKSwgSW50UG9pbnQoKSk7CiAgICAg
ICAgIH0KICAgICAgICAgYnJlYWs7CiAgICAgZGVmYXVsdDoKZGlmZiAtLWdpdCBhL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUNvbnZvbHZlTWF0cml4LmNwcCBiL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUNvbnZvbHZlTWF0cml4LmNwcAppbmRleCAxOThk
NzY0Li5hOWVmNGEzIDEwMDY0NAotLS0gYS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRl
cnMvRkVDb252b2x2ZU1hdHJpeC5jcHAKKysrIGIvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9m
aWx0ZXJzL0ZFQ29udm9sdmVNYXRyaXguY3BwCkBAIC0zNzQsMzMgKzM3NCwzNyBAQCB2b2lkIEZF
Q29udm9sdmVNYXRyaXg6OmFwcGx5KCkKIHsKICAgICBGaWx0ZXJFZmZlY3QqIGluID0gaW5wdXRF
ZmZlY3QoMCk7CiAgICAgaW4tPmFwcGx5KCk7Ci0gICAgaWYgKCFpbi0+cmVzdWx0SW1hZ2UoKSkK
KyAgICBpZiAoIWluLT5oYXNSZXN1bHQoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgaWYgKCFl
ZmZlY3RDb250ZXh0KCkpCisgICAgSW1hZ2VEYXRhKiByZXN1bHRJbWFnZTsKKyAgICBpZiAobV9w
cmVzZXJ2ZUFscGhhKQorICAgICAgICByZXN1bHRJbWFnZSA9IGNyZWF0ZVVubXVsdGlwbGllZElt
YWdlUmVzdWx0KCk7CisgICAgZWxzZQorICAgICAgICByZXN1bHRJbWFnZSA9IGNyZWF0ZVByZW11
bHRpcGxpZWRJbWFnZVJlc3VsdCgpOworICAgIGlmICghcmVzdWx0SW1hZ2UpCiAgICAgICAgIHJl
dHVybjsKIAotICAgIEludFJlY3QgaW1hZ2VSZWN0KEludFBvaW50KCksIHJlc3VsdEltYWdlKCkt
PnNpemUoKSk7CiAgICAgSW50UmVjdCBlZmZlY3REcmF3aW5nUmVjdCA9IHJlcXVlc3RlZFJlZ2lv
bk9mSW5wdXRJbWFnZURhdGEoaW4tPmFic29sdXRlUGFpbnRSZWN0KCkpOwogCiAgICAgUmVmUHRy
PENhbnZhc1BpeGVsQXJyYXk+IHNyY1BpeGVsQXJyYXk7CiAgICAgaWYgKG1fcHJlc2VydmVBbHBo
YSkKLSAgICAgICAgc3JjUGl4ZWxBcnJheSA9IGluLT5yZXN1bHRJbWFnZSgpLT5nZXRVbm11bHRp
cGxpZWRJbWFnZURhdGEoZWZmZWN0RHJhd2luZ1JlY3QpLT5kYXRhKCk7CisgICAgICAgIHNyY1Bp
eGVsQXJyYXkgPSBpbi0+YXNVbm11bHRpcGxpZWRJbWFnZShlZmZlY3REcmF3aW5nUmVjdCktPmRh
dGEoKTsKICAgICBlbHNlCi0gICAgICAgIHNyY1BpeGVsQXJyYXkgPSBpbi0+cmVzdWx0SW1hZ2Uo
KS0+Z2V0UHJlbXVsdGlwbGllZEltYWdlRGF0YShlZmZlY3REcmF3aW5nUmVjdCktPmRhdGEoKTsK
KyAgICAgICAgc3JjUGl4ZWxBcnJheSA9IGluLT5hc1ByZW11bHRpcGxpZWRJbWFnZShlZmZlY3RE
cmF3aW5nUmVjdCktPmRhdGEoKTsKIAotICAgIFJlZlB0cjxJbWFnZURhdGE+IGltYWdlRGF0YSA9
IEltYWdlRGF0YTo6Y3JlYXRlKGltYWdlUmVjdC53aWR0aCgpLCBpbWFnZVJlY3QuaGVpZ2h0KCkp
OworICAgIFJlZlB0cjxJbWFnZURhdGE+IGltYWdlRGF0YSA9IEltYWdlRGF0YTo6Y3JlYXRlKGFi
c29sdXRlUGFpbnRSZWN0KCkud2lkdGgoKSwgYWJzb2x1dGVQYWludFJlY3QoKS5oZWlnaHQoKSk7
CiAKICAgICBQYWludGluZ0RhdGEgcGFpbnRpbmdEYXRhOwogICAgIHBhaW50aW5nRGF0YS5zcmNQ
aXhlbEFycmF5ID0gc3JjUGl4ZWxBcnJheS5nZXQoKTsKICAgICBwYWludGluZ0RhdGEuZHN0UGl4
ZWxBcnJheSA9IGltYWdlRGF0YS0+ZGF0YSgpOwotICAgIHBhaW50aW5nRGF0YS53aWR0aCA9IGlt
YWdlUmVjdC53aWR0aCgpOwotICAgIHBhaW50aW5nRGF0YS5oZWlnaHQgPSBpbWFnZVJlY3QuaGVp
Z2h0KCk7CisgICAgcGFpbnRpbmdEYXRhLndpZHRoID0gYWJzb2x1dGVQYWludFJlY3QoKS53aWR0
aCgpOworICAgIHBhaW50aW5nRGF0YS5oZWlnaHQgPSBhYnNvbHV0ZVBhaW50UmVjdCgpLmhlaWdo
dCgpOwogICAgIHBhaW50aW5nRGF0YS5iaWFzID0gbV9iaWFzICogMjU1OwogCiAgICAgLy8gRHJh
d2luZyBmdWxseSBjb3ZlcmVkIHBpeGVscwotICAgIGludCBjbGlwUmlnaHQgPSBpbWFnZVJlY3Qu
d2lkdGgoKSAtIG1fa2VybmVsU2l6ZS53aWR0aCgpOwotICAgIGludCBjbGlwQm90dG9tID0gaW1h
Z2VSZWN0LmhlaWdodCgpIC0gbV9rZXJuZWxTaXplLmhlaWdodCgpOworICAgIGludCBjbGlwUmln
aHQgPSBhYnNvbHV0ZVBhaW50UmVjdCgpLndpZHRoKCkgLSBtX2tlcm5lbFNpemUud2lkdGgoKTsK
KyAgICBpbnQgY2xpcEJvdHRvbSA9IGFic29sdXRlUGFpbnRSZWN0KCkuaGVpZ2h0KCkgLSBtX2tl
cm5lbFNpemUuaGVpZ2h0KCk7CiAKICAgICBpZiAoY2xpcFJpZ2h0ID49IDAgJiYgY2xpcEJvdHRv
bSA+PSAwKSB7CiAgICAgICAgIHNldEludGVyaW9yUGl4ZWxzKHBhaW50aW5nRGF0YSwgY2xpcFJp
Z2h0LCBjbGlwQm90dG9tKTsKQEAgLTQwOCwyMiArNDEyLDE3IEBAIHZvaWQgRkVDb252b2x2ZU1h
dHJpeDo6YXBwbHkoKQogICAgICAgICBjbGlwUmlnaHQgKz0gbV90YXJnZXRPZmZzZXQueCgpICsg
MTsKICAgICAgICAgY2xpcEJvdHRvbSArPSBtX3RhcmdldE9mZnNldC55KCkgKyAxOwogICAgICAg
ICBpZiAobV90YXJnZXRPZmZzZXQueSgpID4gMCkKLSAgICAgICAgICAgIHNldE91dGVyUGl4ZWxz
KHBhaW50aW5nRGF0YSwgMCwgMCwgaW1hZ2VSZWN0LndpZHRoKCksIG1fdGFyZ2V0T2Zmc2V0Lnko
KSk7Ci0gICAgICAgIGlmIChjbGlwQm90dG9tIDwgaW1hZ2VSZWN0LmhlaWdodCgpKQotICAgICAg
ICAgICAgc2V0T3V0ZXJQaXhlbHMocGFpbnRpbmdEYXRhLCAwLCBjbGlwQm90dG9tLCBpbWFnZVJl
Y3Qud2lkdGgoKSwgaW1hZ2VSZWN0LmhlaWdodCgpKTsKKyAgICAgICAgICAgIHNldE91dGVyUGl4
ZWxzKHBhaW50aW5nRGF0YSwgMCwgMCwgYWJzb2x1dGVQYWludFJlY3QoKS53aWR0aCgpLCBtX3Rh
cmdldE9mZnNldC55KCkpOworICAgICAgICBpZiAoY2xpcEJvdHRvbSA8IGFic29sdXRlUGFpbnRS
ZWN0KCkuaGVpZ2h0KCkpCisgICAgICAgICAgICBzZXRPdXRlclBpeGVscyhwYWludGluZ0RhdGEs
IDAsIGNsaXBCb3R0b20sIGFic29sdXRlUGFpbnRSZWN0KCkud2lkdGgoKSwgYWJzb2x1dGVQYWlu
dFJlY3QoKS5oZWlnaHQoKSk7CiAgICAgICAgIGlmIChtX3RhcmdldE9mZnNldC54KCkgPiAwKQog
ICAgICAgICAgICAgc2V0T3V0ZXJQaXhlbHMocGFpbnRpbmdEYXRhLCAwLCBtX3RhcmdldE9mZnNl
dC55KCksIG1fdGFyZ2V0T2Zmc2V0LngoKSwgY2xpcEJvdHRvbSk7Ci0gICAgICAgIGlmIChjbGlw
UmlnaHQgPCBpbWFnZVJlY3Qud2lkdGgoKSkKLSAgICAgICAgICAgIHNldE91dGVyUGl4ZWxzKHBh
aW50aW5nRGF0YSwgY2xpcFJpZ2h0LCBtX3RhcmdldE9mZnNldC55KCksIGltYWdlUmVjdC53aWR0
aCgpLCBjbGlwQm90dG9tKTsKKyAgICAgICAgaWYgKGNsaXBSaWdodCA8IGFic29sdXRlUGFpbnRS
ZWN0KCkud2lkdGgoKSkKKyAgICAgICAgICAgIHNldE91dGVyUGl4ZWxzKHBhaW50aW5nRGF0YSwg
Y2xpcFJpZ2h0LCBtX3RhcmdldE9mZnNldC55KCksIGFic29sdXRlUGFpbnRSZWN0KCkud2lkdGgo
KSwgY2xpcEJvdHRvbSk7CiAgICAgfSBlbHNlIHsKICAgICAgICAgLy8gUmFyZSBzaXR1YXRpb24s
IG5vdCBvcHRpbWl6aWVkIGZvciBzcGVlZAotICAgICAgICBzZXRPdXRlclBpeGVscyhwYWludGlu
Z0RhdGEsIDAsIDAsIGltYWdlUmVjdC53aWR0aCgpLCBpbWFnZVJlY3QuaGVpZ2h0KCkpOworICAg
ICAgICBzZXRPdXRlclBpeGVscyhwYWludGluZ0RhdGEsIDAsIDAsIGFic29sdXRlUGFpbnRSZWN0
KCkud2lkdGgoKSwgYWJzb2x1dGVQYWludFJlY3QoKS5oZWlnaHQoKSk7CiAgICAgfQotCi0gICAg
aWYgKG1fcHJlc2VydmVBbHBoYSkKLSAgICAgICAgcmVzdWx0SW1hZ2UoKS0+cHV0VW5tdWx0aXBs
aWVkSW1hZ2VEYXRhKGltYWdlRGF0YS5nZXQoKSwgaW1hZ2VSZWN0LCBJbnRQb2ludCgpKTsKLSAg
ICBlbHNlCi0gICAgICAgIHJlc3VsdEltYWdlKCktPnB1dFByZW11bHRpcGxpZWRJbWFnZURhdGEo
aW1hZ2VEYXRhLmdldCgpLCBpbWFnZVJlY3QsIEludFBvaW50KCkpOwogfQogCiB2b2lkIEZFQ29u
dm9sdmVNYXRyaXg6OmR1bXAoKQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9maWx0ZXJzL0ZFRGlzcGxhY2VtZW50TWFwLmNwcCBiL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvZmlsdGVycy9GRURpc3BsYWNlbWVudE1hcC5jcHAKaW5kZXggNTUzMjFlNi4uNjM5YTQwMyAx
MDA2NDQKLS0tIGEvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFRGlzcGxhY2Vt
ZW50TWFwLmNwcAorKysgYi9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVEaXNw
bGFjZW1lbnRNYXAuY3BwCkBAIC04MiwyNiArODIsMjUgQEAgdm9pZCBGRURpc3BsYWNlbWVudE1h
cDo6YXBwbHkoKQogICAgIEZpbHRlckVmZmVjdCogaW4yID0gaW5wdXRFZmZlY3QoMSk7CiAgICAg
aW4tPmFwcGx5KCk7CiAgICAgaW4yLT5hcHBseSgpOwotICAgIGlmICghaW4tPnJlc3VsdEltYWdl
KCkgfHwgIWluMi0+cmVzdWx0SW1hZ2UoKSkKKyAgICBpZiAoIWluLT5oYXNSZXN1bHQoKSB8fCAh
aW4yLT5oYXNSZXN1bHQoKSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgaWYgKG1feENoYW5uZWxT
ZWxlY3RvciA9PSBDSEFOTkVMX1VOS05PV04gfHwgbV95Q2hhbm5lbFNlbGVjdG9yID09IENIQU5O
RUxfVU5LTk9XTikKICAgICAgICAgcmV0dXJuOwogCi0gICAgaWYgKCFlZmZlY3RDb250ZXh0KCkp
CisgICAgSW1hZ2VEYXRhKiByZXN1bHRJbWFnZSA9IGNyZWF0ZVByZW11bHRpcGxpZWRJbWFnZVJl
c3VsdCgpOworICAgIGlmICghcmVzdWx0SW1hZ2UpCiAgICAgICAgIHJldHVybjsKIAogICAgIElu
dFJlY3QgZWZmZWN0QURyYXdpbmdSZWN0ID0gcmVxdWVzdGVkUmVnaW9uT2ZJbnB1dEltYWdlRGF0
YShpbi0+YWJzb2x1dGVQYWludFJlY3QoKSk7Ci0gICAgUmVmUHRyPEltYWdlRGF0YT4gc3JjSW1h
Z2VEYXRhQSA9IGluLT5yZXN1bHRJbWFnZSgpLT5nZXRQcmVtdWx0aXBsaWVkSW1hZ2VEYXRhKGVm
ZmVjdEFEcmF3aW5nUmVjdCk7CisgICAgUmVmUHRyPEltYWdlRGF0YT4gc3JjSW1hZ2VEYXRhQSA9
IGluLT5hc1ByZW11bHRpcGxpZWRJbWFnZShlZmZlY3RBRHJhd2luZ1JlY3QpOwogICAgIEJ5dGVB
cnJheSogc3JjUGl4ZWxBcnJheUEgPSBzcmNJbWFnZURhdGFBLT5kYXRhKCktPmRhdGEoKSA7CiAK
ICAgICBJbnRSZWN0IGVmZmVjdEJEcmF3aW5nUmVjdCA9IHJlcXVlc3RlZFJlZ2lvbk9mSW5wdXRJ
bWFnZURhdGEoaW4yLT5hYnNvbHV0ZVBhaW50UmVjdCgpKTsKLSAgICBSZWZQdHI8SW1hZ2VEYXRh
PiBzcmNJbWFnZURhdGFCID0gaW4yLT5yZXN1bHRJbWFnZSgpLT5nZXRVbm11bHRpcGxpZWRJbWFn
ZURhdGEoZWZmZWN0QkRyYXdpbmdSZWN0KTsKKyAgICBSZWZQdHI8SW1hZ2VEYXRhPiBzcmNJbWFn
ZURhdGFCID0gaW4yLT5hc1VubXVsdGlwbGllZEltYWdlKGVmZmVjdEJEcmF3aW5nUmVjdCk7CiAg
ICAgQnl0ZUFycmF5KiBzcmNQaXhlbEFycmF5QiA9IHNyY0ltYWdlRGF0YUItPmRhdGEoKS0+ZGF0
YSgpOwogCi0gICAgSW50UmVjdCBpbWFnZVJlY3QoSW50UG9pbnQoKSwgcmVzdWx0SW1hZ2UoKS0+
c2l6ZSgpKTsKLSAgICBSZWZQdHI8SW1hZ2VEYXRhPiBpbWFnZURhdGEgPSBJbWFnZURhdGE6OmNy
ZWF0ZShpbWFnZVJlY3Qud2lkdGgoKSwgaW1hZ2VSZWN0LmhlaWdodCgpKTsKLSAgICBCeXRlQXJy
YXkqIGRzdFBpeGVsQXJyYXkgPSBpbWFnZURhdGEtPmRhdGEoKS0+ZGF0YSgpOworICAgIEJ5dGVB
cnJheSogZHN0UGl4ZWxBcnJheSA9IHJlc3VsdEltYWdlLT5kYXRhKCktPmRhdGEoKTsKIAogICAg
IEFTU0VSVChzcmNQaXhlbEFycmF5QS0+bGVuZ3RoKCkgPT0gc3JjUGl4ZWxBcnJheUItPmxlbmd0
aCgpKTsKIApAQCAtMTEwLDE1ICsxMDksMTUgQEAgdm9pZCBGRURpc3BsYWNlbWVudE1hcDo6YXBw
bHkoKQogICAgIGZsb2F0IHNjYWxlWSA9IGZpbHRlci0+YXBwbHlWZXJ0aWNhbFNjYWxlKG1fc2Nh
bGUgLyAyNTUpOwogICAgIGZsb2F0IHNjYWxlQWRqdXN0bWVudFggPSBmaWx0ZXItPmFwcGx5SG9y
aXpvbnRhbFNjYWxlKDAuNWYgLSAwLjVmICogbV9zY2FsZSk7CiAgICAgZmxvYXQgc2NhbGVBZGp1
c3RtZW50WSA9IGZpbHRlci0+YXBwbHlWZXJ0aWNhbFNjYWxlKDAuNWYgLSAwLjVmICogbV9zY2Fs
ZSk7Ci0gICAgaW50IHN0cmlkZSA9IGltYWdlUmVjdC53aWR0aCgpICogNDsKLSAgICBmb3IgKGlu
dCB5ID0gMDsgeSA8IGltYWdlUmVjdC5oZWlnaHQoKTsgKyt5KSB7CisgICAgaW50IHN0cmlkZSA9
IGFic29sdXRlUGFpbnRSZWN0KCkud2lkdGgoKSAqIDQ7CisgICAgZm9yIChpbnQgeSA9IDA7IHkg
PCBhYnNvbHV0ZVBhaW50UmVjdCgpLmhlaWdodCgpOyArK3kpIHsKICAgICAgICAgaW50IGxpbmUg
PSB5ICogc3RyaWRlOwotICAgICAgICBmb3IgKGludCB4ID0gMDsgeCA8IGltYWdlUmVjdC53aWR0
aCgpOyArK3gpIHsKKyAgICAgICAgZm9yIChpbnQgeCA9IDA7IHggPCBhYnNvbHV0ZVBhaW50UmVj
dCgpLndpZHRoKCk7ICsreCkgewogICAgICAgICAgICAgaW50IGRzdEluZGV4ID0gbGluZSArIHgg
KiA0OwogICAgICAgICAgICAgaW50IHNyY1ggPSB4ICsgc3RhdGljX2Nhc3Q8aW50PihzY2FsZVgg
KiBzcmNQaXhlbEFycmF5Qi0+Z2V0KGRzdEluZGV4ICsgbV94Q2hhbm5lbFNlbGVjdG9yIC0gMSkg
KyBzY2FsZUFkanVzdG1lbnRYKTsKICAgICAgICAgICAgIGludCBzcmNZID0geSArIHN0YXRpY19j
YXN0PGludD4oc2NhbGVZICogc3JjUGl4ZWxBcnJheUItPmdldChkc3RJbmRleCArIG1feUNoYW5u
ZWxTZWxlY3RvciAtIDEpICsgc2NhbGVBZGp1c3RtZW50WSk7CiAgICAgICAgICAgICBmb3IgKHVu
c2lnbmVkIGNoYW5uZWwgPSAwOyBjaGFubmVsIDwgNDsgKytjaGFubmVsKSB7Ci0gICAgICAgICAg
ICAgICAgaWYgKHNyY1ggPCAwIHx8IHNyY1ggPj0gaW1hZ2VSZWN0LndpZHRoKCkgfHwgc3JjWSA8
IDAgfHwgc3JjWSA+PSBpbWFnZVJlY3QuaGVpZ2h0KCkpCisgICAgICAgICAgICAgICAgaWYgKHNy
Y1ggPCAwIHx8IHNyY1ggPj0gYWJzb2x1dGVQYWludFJlY3QoKS53aWR0aCgpIHx8IHNyY1kgPCAw
IHx8IHNyY1kgPj0gYWJzb2x1dGVQYWludFJlY3QoKS5oZWlnaHQoKSkKICAgICAgICAgICAgICAg
ICAgICAgZHN0UGl4ZWxBcnJheS0+c2V0KGRzdEluZGV4ICsgY2hhbm5lbCwgc3RhdGljX2Nhc3Q8
dW5zaWduZWQgY2hhcj4oMCkpOwogICAgICAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAg
ICAgICAgICB1bnNpZ25lZCBjaGFyIHBpeGVsVmFsdWUgPSBzcmNQaXhlbEFycmF5QS0+Z2V0KHNy
Y1kgKiBzdHJpZGUgKyBzcmNYICogNCArIGNoYW5uZWwpOwpAQCAtMTI4LDcgKzEyNyw2IEBAIHZv
aWQgRkVEaXNwbGFjZW1lbnRNYXA6OmFwcGx5KCkKIAogICAgICAgICB9CiAgICAgfQotICAgIHJl
c3VsdEltYWdlKCktPnB1dFByZW11bHRpcGxpZWRJbWFnZURhdGEoaW1hZ2VEYXRhLmdldCgpLCBp
bWFnZVJlY3QsIEludFBvaW50KCkpOwogfQogCiB2b2lkIEZFRGlzcGxhY2VtZW50TWFwOjpkdW1w
KCkKZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUZsb29k
LmNwcCBiL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUZsb29kLmNwcAppbmRl
eCBiYzY3MjFiLi41NmE4YjJkIDEwMDY0NAotLS0gYS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2ZpbHRlcnMvRkVGbG9vZC5jcHAKKysrIGIvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0
ZXJzL0ZFRmxvb2QuY3BwCkBAIC02NCwxMiArNjQsMTIgQEAgdm9pZCBGRUZsb29kOjpzZXRGbG9v
ZE9wYWNpdHkoZmxvYXQgZmxvb2RPcGFjaXR5KQogCiB2b2lkIEZFRmxvb2Q6OmFwcGx5KCkKIHsK
LSAgICBHcmFwaGljc0NvbnRleHQqIGZpbHRlckNvbnRleHQgPSBlZmZlY3RDb250ZXh0KCk7Ci0g
ICAgaWYgKCFmaWx0ZXJDb250ZXh0KQorICAgIEltYWdlQnVmZmVyKiByZXN1bHRJbWFnZSA9IGNy
ZWF0ZUltYWdlQnVmZmVyUmVzdWx0KCk7CisgICAgaWYgKCFyZXN1bHRJbWFnZSkKICAgICAgICAg
cmV0dXJuOwogCiAgICAgQ29sb3IgY29sb3IgPSBjb2xvcldpdGhPdmVycmlkZUFscGhhKGZsb29k
Q29sb3IoKS5yZ2IoKSwgZmxvb2RPcGFjaXR5KCkpOwotICAgIGZpbHRlckNvbnRleHQtPmZpbGxS
ZWN0KEZsb2F0UmVjdChGbG9hdFBvaW50KCksIGFic29sdXRlUGFpbnRSZWN0KCkuc2l6ZSgpKSwg
Y29sb3IsIENvbG9yU3BhY2VEZXZpY2VSR0IpOworICAgIHJlc3VsdEltYWdlLT5jb250ZXh0KCkt
PmZpbGxSZWN0KEZsb2F0UmVjdChGbG9hdFBvaW50KCksIGFic29sdXRlUGFpbnRSZWN0KCkuc2l6
ZSgpKSwgY29sb3IsIENvbG9yU3BhY2VEZXZpY2VSR0IpOwogfQogCiB2b2lkIEZFRmxvb2Q6OmR1
bXAoKQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFR2F1
c3NpYW5CbHVyLmNwcCBiL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUdhdXNz
aWFuQmx1ci5jcHAKaW5kZXggODc2ZTRiMy4uZDYwM2Q4NSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFR2F1c3NpYW5CbHVyLmNwcAorKysgYi9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVHYXVzc2lhbkJsdXIuY3BwCkBAIC0xNjYsMzIg
KzE2NiwzMCBAQCB2b2lkIEZFR2F1c3NpYW5CbHVyOjphcHBseSgpCiB7CiAgICAgRmlsdGVyRWZm
ZWN0KiBpbiA9IGlucHV0RWZmZWN0KDApOwogICAgIGluLT5hcHBseSgpOwotICAgIGlmICghaW4t
PnJlc3VsdEltYWdlKCkpCisgICAgaWYgKCFpbi0+aGFzUmVzdWx0KCkpCiAgICAgICAgIHJldHVy
bjsKIAotICAgIGlmICghZWZmZWN0Q29udGV4dCgpKQorICAgIEltYWdlRGF0YSogcmVzdWx0SW1h
Z2UgPSBjcmVhdGVQcmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQoKTsKKyAgICBpZiAoIXJlc3VsdElt
YWdlKQogICAgICAgICByZXR1cm47CiAKICAgICBzZXRJc0FscGhhSW1hZ2UoaW4tPmlzQWxwaGFJ
bWFnZSgpKTsKIAogICAgIEludFJlY3QgZWZmZWN0RHJhd2luZ1JlY3QgPSByZXF1ZXN0ZWRSZWdp
b25PZklucHV0SW1hZ2VEYXRhKGluLT5hYnNvbHV0ZVBhaW50UmVjdCgpKTsKLSAgICBSZWZQdHI8
SW1hZ2VEYXRhPiBzcmNJbWFnZURhdGEgPSBpbi0+cmVzdWx0SW1hZ2UoKS0+Z2V0UHJlbXVsdGlw
bGllZEltYWdlRGF0YShlZmZlY3REcmF3aW5nUmVjdCk7Ci0gICAgSW50UmVjdCBpbWFnZVJlY3Qo
SW50UG9pbnQoKSwgcmVzdWx0SW1hZ2UoKS0+c2l6ZSgpKTsKKyAgICBpbi0+YXNQcmVtdWx0aXBs
aWVkSW1hZ2UocmVzdWx0SW1hZ2UsIGVmZmVjdERyYXdpbmdSZWN0KTsKIAotICAgIGlmICghbV9z
dGRYICYmICFtX3N0ZFkpIHsKLSAgICAgICAgcmVzdWx0SW1hZ2UoKS0+cHV0UHJlbXVsdGlwbGll
ZEltYWdlRGF0YShzcmNJbWFnZURhdGEuZ2V0KCksIGltYWdlUmVjdCwgSW50UG9pbnQoKSk7Cisg
ICAgaWYgKCFtX3N0ZFggJiYgIW1fc3RkWSkKICAgICAgICAgcmV0dXJuOwotICAgIH0KIAogICAg
IHVuc2lnbmVkIGtlcm5lbFNpemVYID0gMDsKICAgICB1bnNpZ25lZCBrZXJuZWxTaXplWSA9IDA7
CiAgICAgY2FsY3VsYXRlS2VybmVsU2l6ZShmaWx0ZXIoKSwga2VybmVsU2l6ZVgsIGtlcm5lbFNp
emVZLCBtX3N0ZFgsIG1fc3RkWSk7CiAKLSAgICBCeXRlQXJyYXkqIHNyY1BpeGVsQXJyYXkgPSBz
cmNJbWFnZURhdGEtPmRhdGEoKS0+ZGF0YSgpOwotICAgIFJlZlB0cjxJbWFnZURhdGE+IHRtcElt
YWdlRGF0YSA9IEltYWdlRGF0YTo6Y3JlYXRlKGltYWdlUmVjdC53aWR0aCgpLCBpbWFnZVJlY3Qu
aGVpZ2h0KCkpOworICAgIEJ5dGVBcnJheSogc3JjUGl4ZWxBcnJheSA9IHJlc3VsdEltYWdlLT5k
YXRhKCktPmRhdGEoKTsKKyAgICBSZWZQdHI8SW1hZ2VEYXRhPiB0bXBJbWFnZURhdGEgPSBJbWFn
ZURhdGE6OmNyZWF0ZShhYnNvbHV0ZVBhaW50UmVjdCgpLndpZHRoKCksIGFic29sdXRlUGFpbnRS
ZWN0KCkuaGVpZ2h0KCkpOwogICAgIEJ5dGVBcnJheSogdG1wUGl4ZWxBcnJheSA9IHRtcEltYWdl
RGF0YS0+ZGF0YSgpLT5kYXRhKCk7CiAKLSAgICBpbnQgc3RyaWRlID0gNCAqIGltYWdlUmVjdC53
aWR0aCgpOworICAgIGludCBzdHJpZGUgPSA0ICogYWJzb2x1dGVQYWludFJlY3QoKS53aWR0aCgp
OwogICAgIGludCBkeExlZnQgPSAwOwogICAgIGludCBkeFJpZ2h0ID0gMDsKICAgICBpbnQgZHlM
ZWZ0ID0gMDsKQEAgLTE5OSw3ICsxOTcsNyBAQCB2b2lkIEZFR2F1c3NpYW5CbHVyOjphcHBseSgp
CiAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCAzOyArK2kpIHsKICAgICAgICAgaWYgKGtlcm5lbFNp
emVYKSB7CiAgICAgICAgICAgICBrZXJuZWxQb3NpdGlvbihpLCBrZXJuZWxTaXplWCwgZHhMZWZ0
LCBkeFJpZ2h0KTsKLSAgICAgICAgICAgIGJveEJsdXIoc3JjUGl4ZWxBcnJheSwgdG1wUGl4ZWxB
cnJheSwga2VybmVsU2l6ZVgsIGR4TGVmdCwgZHhSaWdodCwgNCwgc3RyaWRlLCBpbWFnZVJlY3Qu
d2lkdGgoKSwgaW1hZ2VSZWN0LmhlaWdodCgpLCBpc0FscGhhSW1hZ2UoKSk7CisgICAgICAgICAg
ICBib3hCbHVyKHNyY1BpeGVsQXJyYXksIHRtcFBpeGVsQXJyYXksIGtlcm5lbFNpemVYLCBkeExl
ZnQsIGR4UmlnaHQsIDQsIHN0cmlkZSwgYWJzb2x1dGVQYWludFJlY3QoKS53aWR0aCgpLCBhYnNv
bHV0ZVBhaW50UmVjdCgpLmhlaWdodCgpLCBpc0FscGhhSW1hZ2UoKSk7CiAgICAgICAgIH0gZWxz
ZSB7CiAgICAgICAgICAgICBCeXRlQXJyYXkqIGF1eFBpeGVsQXJyYXkgPSB0bXBQaXhlbEFycmF5
OwogICAgICAgICAgICAgdG1wUGl4ZWxBcnJheSA9IHNyY1BpeGVsQXJyYXk7CkBAIC0yMDgsMTUg
KzIwNiwxMyBAQCB2b2lkIEZFR2F1c3NpYW5CbHVyOjphcHBseSgpCiAKICAgICAgICAgaWYgKGtl
cm5lbFNpemVZKSB7CiAgICAgICAgICAgICBrZXJuZWxQb3NpdGlvbihpLCBrZXJuZWxTaXplWSwg
ZHlMZWZ0LCBkeVJpZ2h0KTsKLSAgICAgICAgICAgIGJveEJsdXIodG1wUGl4ZWxBcnJheSwgc3Jj
UGl4ZWxBcnJheSwga2VybmVsU2l6ZVksIGR5TGVmdCwgZHlSaWdodCwgc3RyaWRlLCA0LCBpbWFn
ZVJlY3QuaGVpZ2h0KCksIGltYWdlUmVjdC53aWR0aCgpLCBpc0FscGhhSW1hZ2UoKSk7CisgICAg
ICAgICAgICBib3hCbHVyKHRtcFBpeGVsQXJyYXksIHNyY1BpeGVsQXJyYXksIGtlcm5lbFNpemVZ
LCBkeUxlZnQsIGR5UmlnaHQsIHN0cmlkZSwgNCwgYWJzb2x1dGVQYWludFJlY3QoKS5oZWlnaHQo
KSwgYWJzb2x1dGVQYWludFJlY3QoKS53aWR0aCgpLCBpc0FscGhhSW1hZ2UoKSk7CiAgICAgICAg
IH0gZWxzZSB7CiAgICAgICAgICAgICBCeXRlQXJyYXkqIGF1eFBpeGVsQXJyYXkgPSB0bXBQaXhl
bEFycmF5OwogICAgICAgICAgICAgdG1wUGl4ZWxBcnJheSA9IHNyY1BpeGVsQXJyYXk7CiAgICAg
ICAgICAgICBzcmNQaXhlbEFycmF5ID0gYXV4UGl4ZWxBcnJheTsKICAgICAgICAgfQogICAgIH0K
LQotICAgIHJlc3VsdEltYWdlKCktPnB1dFByZW11bHRpcGxpZWRJbWFnZURhdGEoc3JjSW1hZ2VE
YXRhLmdldCgpLCBpbWFnZVJlY3QsIEludFBvaW50KCkpOwogfQogCiB2b2lkIEZFR2F1c3NpYW5C
bHVyOjpkdW1wKCkKZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVy
cy9GRUxpZ2h0aW5nLmNwcCBiL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUxp
Z2h0aW5nLmNwcAppbmRleCA4MTI5MjBjLi42MmU0OTA5IDEwMDY0NAotLS0gYS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVMaWdodGluZy5jcHAKKysrIGIvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFTGlnaHRpbmcuY3BwCkBAIC0zMzMsMTcgKzMzMywxOCBA
QCB2b2lkIEZFTGlnaHRpbmc6OmFwcGx5KCkKIHsKICAgICBGaWx0ZXJFZmZlY3QqIGluID0gaW5w
dXRFZmZlY3QoMCk7CiAgICAgaW4tPmFwcGx5KCk7Ci0gICAgaWYgKCFpbi0+cmVzdWx0SW1hZ2Uo
KSkKKyAgICBpZiAoIWluLT5oYXNSZXN1bHQoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgaWYg
KCFlZmZlY3RDb250ZXh0KCkpCisgICAgSW1hZ2VEYXRhKiByZXN1bHRJbWFnZSA9IGNyZWF0ZVVu
bXVsdGlwbGllZEltYWdlUmVzdWx0KCk7CisgICAgaWYgKCFyZXN1bHRJbWFnZSkKICAgICAgICAg
cmV0dXJuOwogCiAgICAgc2V0SXNBbHBoYUltYWdlKGZhbHNlKTsKIAogICAgIEludFJlY3QgZWZm
ZWN0RHJhd2luZ1JlY3QgPSByZXF1ZXN0ZWRSZWdpb25PZklucHV0SW1hZ2VEYXRhKGluLT5hYnNv
bHV0ZVBhaW50UmVjdCgpKTsKLSAgICBSZWZQdHI8SW1hZ2VEYXRhPiBzcmNJbWFnZURhdGEgPSBp
bi0+cmVzdWx0SW1hZ2UoKS0+Z2V0VW5tdWx0aXBsaWVkSW1hZ2VEYXRhKGVmZmVjdERyYXdpbmdS
ZWN0KTsKLSAgICBCeXRlQXJyYXkqIHNyY1BpeGVsQXJyYXkgPSBzcmNJbWFnZURhdGEtPmRhdGEo
KS0+ZGF0YSgpOworICAgIGluLT5hc1VubXVsdGlwbGllZEltYWdlKHJlc3VsdEltYWdlLCBlZmZl
Y3REcmF3aW5nUmVjdCk7CisgICAgQnl0ZUFycmF5KiBzcmNQaXhlbEFycmF5ID0gcmVzdWx0SW1h
Z2UtPmRhdGEoKS0+ZGF0YSgpOwogCiAgICAgLy8gRklYTUU6IHN1cHBvcnQga2VybmVsVW5pdExl
bmd0aHMgb3RoZXIgdGhhbiAoMSwxKS4gVGhlIGlzc3VlIGhlcmUgaXMgdGhhdCB0aGUgVzMKICAg
ICAvLyBzdGFuZGFyZCBoYXMgbm8gdGVzdCBjYXNlIGZvciB0aGVtLCBhbmQgb3RoZXIgYnJvd3Nl
cnMgKGxpa2UgRmlyZWZveCkgaGFzIHN0cmFuZ2UKQEAgLTM1MSw4ICszNTIsNyBAQCB2b2lkIEZF
TGlnaHRpbmc6OmFwcGx5KCkKICAgICAvLyBBbnl3YXksIGZlQ29udm9sdmVNYXRyaXggc2hvdWxk
IGFsc28gdXNlIHRoZSBpbXBsZW1lbnRhdGlvbgogCiAgICAgSW50U2l6ZSBhYnNvbHV0ZVBhaW50
U2l6ZSA9IGFic29sdXRlUGFpbnRSZWN0KCkuc2l6ZSgpOwotICAgIGlmIChkcmF3TGlnaHRpbmco
c3JjUGl4ZWxBcnJheSwgYWJzb2x1dGVQYWludFNpemUud2lkdGgoKSwgYWJzb2x1dGVQYWludFNp
emUuaGVpZ2h0KCkpKQotICAgICAgICByZXN1bHRJbWFnZSgpLT5wdXRVbm11bHRpcGxpZWRJbWFn
ZURhdGEoc3JjSW1hZ2VEYXRhLmdldCgpLCBJbnRSZWN0KEludFBvaW50KCksIGFic29sdXRlUGFp
bnRTaXplKSwgSW50UG9pbnQoKSk7CisgICAgZHJhd0xpZ2h0aW5nKHNyY1BpeGVsQXJyYXksIGFi
c29sdXRlUGFpbnRTaXplLndpZHRoKCksIGFic29sdXRlUGFpbnRTaXplLmhlaWdodCgpKTsKIH0K
IAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9maWx0ZXJzL0ZFTWVyZ2UuY3BwIGIvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9m
aWx0ZXJzL0ZFTWVyZ2UuY3BwCmluZGV4IGNhNTNhODYuLjM5N2M2NjYgMTAwNjQ0Ci0tLSBhL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRU1lcmdlLmNwcAorKysgYi9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVNZXJnZS5jcHAKQEAgLTQ2LDE3ICs0NiwxOCBA
QCB2b2lkIEZFTWVyZ2U6OmFwcGx5KCkKICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgc2l6
ZTsgKytpKSB7CiAgICAgICAgIEZpbHRlckVmZmVjdCogaW4gPSBpbnB1dEVmZmVjdChpKTsKICAg
ICAgICAgaW4tPmFwcGx5KCk7Ci0gICAgICAgIGlmICghaW4tPnJlc3VsdEltYWdlKCkpCisgICAg
ICAgIGlmICghaW4tPmhhc1Jlc3VsdCgpKQogICAgICAgICAgICAgcmV0dXJuOwogICAgIH0KIAot
ICAgIEdyYXBoaWNzQ29udGV4dCogZmlsdGVyQ29udGV4dCA9IGVmZmVjdENvbnRleHQoKTsKLSAg
ICBpZiAoIWZpbHRlckNvbnRleHQpCisgICAgSW1hZ2VCdWZmZXIqIHJlc3VsdEltYWdlID0gY3Jl
YXRlSW1hZ2VCdWZmZXJSZXN1bHQoKTsKKyAgICBpZiAoIXJlc3VsdEltYWdlKQogICAgICAgICBy
ZXR1cm47CiAKKyAgICBHcmFwaGljc0NvbnRleHQqIGZpbHRlckNvbnRleHQgPSByZXN1bHRJbWFn
ZS0+Y29udGV4dCgpOwogICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBzaXplOyArK2kpIHsK
ICAgICAgICAgRmlsdGVyRWZmZWN0KiBpbiA9IGlucHV0RWZmZWN0KGkpOwotICAgICAgICBmaWx0
ZXJDb250ZXh0LT5kcmF3SW1hZ2VCdWZmZXIoaW4tPnJlc3VsdEltYWdlKCksIENvbG9yU3BhY2VE
ZXZpY2VSR0IsIGRyYXdpbmdSZWdpb25PZklucHV0SW1hZ2UoaW4tPmFic29sdXRlUGFpbnRSZWN0
KCkpKTsKKyAgICAgICAgZmlsdGVyQ29udGV4dC0+ZHJhd0ltYWdlQnVmZmVyKGluLT5hc0ltYWdl
QnVmZmVyKCksIENvbG9yU3BhY2VEZXZpY2VSR0IsIGRyYXdpbmdSZWdpb25PZklucHV0SW1hZ2Uo
aW4tPmFic29sdXRlUGFpbnRSZWN0KCkpKTsKICAgICB9CiB9CiAKZGlmZiAtLWdpdCBhL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRU1vcnBob2xvZ3kuY3BwIGIvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFTW9ycGhvbG9neS5jcHAKaW5kZXggZGQ3NjU5YS4u
NTE1ODUwYiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZF
TW9ycGhvbG9neS5jcHAKKysrIGIvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZF
TW9ycGhvbG9neS5jcHAKQEAgLTkzLDEwICs5MywxMSBAQCB2b2lkIEZFTW9ycGhvbG9neTo6YXBw
bHkoKQogewogICAgIEZpbHRlckVmZmVjdCogaW4gPSBpbnB1dEVmZmVjdCgwKTsKICAgICBpbi0+
YXBwbHkoKTsKLSAgICBpZiAoIWluLT5yZXN1bHRJbWFnZSgpKQorICAgIGlmICghaW4tPmhhc1Jl
c3VsdCgpKQogICAgICAgICByZXR1cm47CiAKLSAgICBpZiAoIWVmZmVjdENvbnRleHQoKSkKKyAg
ICBJbWFnZURhdGEqIHJlc3VsdEltYWdlID0gY3JlYXRlUHJlbXVsdGlwbGllZEltYWdlUmVzdWx0
KCk7CisgICAgaWYgKCFyZXN1bHRJbWFnZSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgc2V0SXNB
bHBoYUltYWdlKGluLT5pc0FscGhhSW1hZ2UoKSk7CkBAIC0xMDcsMTIgKzEwOCwxMCBAQCB2b2lk
IEZFTW9ycGhvbG9neTo6YXBwbHkoKQogICAgIGludCByYWRpdXNYID0gc3RhdGljX2Nhc3Q8aW50
PihmbG9vcmYoZmlsdGVyLT5hcHBseUhvcml6b250YWxTY2FsZShtX3JhZGl1c1gpKSk7CiAgICAg
aW50IHJhZGl1c1kgPSBzdGF0aWNfY2FzdDxpbnQ+KGZsb29yZihmaWx0ZXItPmFwcGx5VmVydGlj
YWxTY2FsZShtX3JhZGl1c1kpKSk7CiAKLSAgICBJbnRSZWN0IGltYWdlUmVjdChJbnRQb2ludCgp
LCByZXN1bHRJbWFnZSgpLT5zaXplKCkpOwogICAgIEludFJlY3QgZWZmZWN0RHJhd2luZ1JlY3Qg
PSByZXF1ZXN0ZWRSZWdpb25PZklucHV0SW1hZ2VEYXRhKGluLT5hYnNvbHV0ZVBhaW50UmVjdCgp
KTsKLSAgICBSZWZQdHI8SW1hZ2VEYXRhPiBzcmNJbWFnZURhdGEgPSBpbi0+cmVzdWx0SW1hZ2Uo
KS0+Z2V0UHJlbXVsdGlwbGllZEltYWdlRGF0YShlZmZlY3REcmF3aW5nUmVjdCk7CisgICAgUmVm
UHRyPEltYWdlRGF0YT4gc3JjSW1hZ2VEYXRhID0gaW4tPmFzUHJlbXVsdGlwbGllZEltYWdlKGVm
ZmVjdERyYXdpbmdSZWN0KTsKICAgICBCeXRlQXJyYXkqIHNyY1BpeGVsQXJyYXkgPSBzcmNJbWFn
ZURhdGEtPmRhdGEoKS0+ZGF0YSgpOwotICAgIFJlZlB0cjxJbWFnZURhdGE+IGltYWdlRGF0YSA9
IEltYWdlRGF0YTo6Y3JlYXRlKGltYWdlUmVjdC53aWR0aCgpLCBpbWFnZVJlY3QuaGVpZ2h0KCkp
OwotICAgIEJ5dGVBcnJheSogZHN0UGl4ZWxBcnJheSA9IGltYWdlRGF0YS0+ZGF0YSgpLT5kYXRh
KCk7CisgICAgQnl0ZUFycmF5KiBkc3RQaXhlbEFycmF5ID0gcmVzdWx0SW1hZ2UtPmRhdGEoKS0+
ZGF0YSgpOwogCiAgICAgaW50IGVmZmVjdFdpZHRoID0gZWZmZWN0RHJhd2luZ1JlY3Qud2lkdGgo
KSAqIDQ7CiAgICAgCkBAIC0xNjIsNyArMTYxLDYgQEAgdm9pZCBGRU1vcnBob2xvZ3k6OmFwcGx5
KCkKICAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgIH0KLSAgICByZXN1bHRJbWFnZSgpLT5w
dXRQcmVtdWx0aXBsaWVkSW1hZ2VEYXRhKGltYWdlRGF0YS5nZXQoKSwgaW1hZ2VSZWN0LCBJbnRQ
b2ludCgpKTsKIH0KIAogdm9pZCBGRU1vcnBob2xvZ3k6OmR1bXAoKQpkaWZmIC0tZ2l0IGEvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFT2Zmc2V0LmNwcCBiL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRU9mZnNldC5jcHAKaW5kZXggYjY0MDA1NC4uNTJmMWRl
MyAxMDA2NDQKLS0tIGEvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFT2Zmc2V0
LmNwcAorKysgYi9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVPZmZzZXQuY3Bw
CkBAIC03NiwxMSArNzYsMTEgQEAgdm9pZCBGRU9mZnNldDo6YXBwbHkoKQogewogICAgIEZpbHRl
ckVmZmVjdCogaW4gPSBpbnB1dEVmZmVjdCgwKTsKICAgICBpbi0+YXBwbHkoKTsKLSAgICBpZiAo
IWluLT5yZXN1bHRJbWFnZSgpKQorICAgIGlmICghaW4tPmhhc1Jlc3VsdCgpKQogICAgICAgICBy
ZXR1cm47CiAKLSAgICBHcmFwaGljc0NvbnRleHQqIGZpbHRlckNvbnRleHQgPSBlZmZlY3RDb250
ZXh0KCk7Ci0gICAgaWYgKCFmaWx0ZXJDb250ZXh0KQorICAgIEltYWdlQnVmZmVyKiByZXN1bHRJ
bWFnZSA9IGNyZWF0ZUltYWdlQnVmZmVyUmVzdWx0KCk7CisgICAgaWYgKCFyZXN1bHRJbWFnZSkK
ICAgICAgICAgcmV0dXJuOwogCiAgICAgc2V0SXNBbHBoYUltYWdlKGluLT5pc0FscGhhSW1hZ2Uo
KSk7CkBAIC04OCw3ICs4OCw3IEBAIHZvaWQgRkVPZmZzZXQ6OmFwcGx5KCkKICAgICBGbG9hdFJl
Y3QgZHJhd2luZ1JlZ2lvbiA9IGRyYXdpbmdSZWdpb25PZklucHV0SW1hZ2UoaW4tPmFic29sdXRl
UGFpbnRSZWN0KCkpOwogICAgIEZpbHRlciogZmlsdGVyID0gdGhpcy0+ZmlsdGVyKCk7CiAgICAg
ZHJhd2luZ1JlZ2lvbi5tb3ZlKGZpbHRlci0+YXBwbHlIb3Jpem9udGFsU2NhbGUobV9keCksIGZp
bHRlci0+YXBwbHlWZXJ0aWNhbFNjYWxlKG1fZHkpKTsKLSAgICBmaWx0ZXJDb250ZXh0LT5kcmF3
SW1hZ2VCdWZmZXIoaW4tPnJlc3VsdEltYWdlKCksIENvbG9yU3BhY2VEZXZpY2VSR0IsIGRyYXdp
bmdSZWdpb24pOworICAgIHJlc3VsdEltYWdlLT5jb250ZXh0KCktPmRyYXdJbWFnZUJ1ZmZlcihp
bi0+YXNJbWFnZUJ1ZmZlcigpLCBDb2xvclNwYWNlRGV2aWNlUkdCLCBkcmF3aW5nUmVnaW9uKTsK
IH0KIAogdm9pZCBGRU9mZnNldDo6ZHVtcCgpCmRpZmYgLS1naXQgYS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2ZpbHRlcnMvRkVUaWxlLmNwcCBiL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
ZmlsdGVycy9GRVRpbGUuY3BwCmluZGV4IDZiMTE0MDEuLjAxNGY0ZjUgMTAwNjQ0Ci0tLSBhL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRVRpbGUuY3BwCisrKyBiL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRVRpbGUuY3BwCkBAIC00NywxMSArNDcsMTEgQEAg
dm9pZCBGRVRpbGU6OmFwcGx5KCkKICNpZiBFTkFCTEUoU1ZHKQogICAgIEZpbHRlckVmZmVjdCog
aW4gPSBpbnB1dEVmZmVjdCgwKTsKICAgICBpbi0+YXBwbHkoKTsKLSAgICBpZiAoIWluLT5yZXN1
bHRJbWFnZSgpKQorICAgIGlmICghaW4tPmhhc1Jlc3VsdCgpKQogICAgICAgICByZXR1cm47CiAK
LSAgICBHcmFwaGljc0NvbnRleHQqIGZpbHRlckNvbnRleHQgPSBlZmZlY3RDb250ZXh0KCk7Ci0g
ICAgaWYgKCFmaWx0ZXJDb250ZXh0KQorICAgIEltYWdlQnVmZmVyKiByZXN1bHRJbWFnZSA9IGNy
ZWF0ZUltYWdlQnVmZmVyUmVzdWx0KCk7CisgICAgaWYgKCFyZXN1bHRJbWFnZSkKICAgICAgICAg
cmV0dXJuOwogCiAgICAgc2V0SXNBbHBoYUltYWdlKGluLT5pc0FscGhhSW1hZ2UoKSk7CkBAIC03
MywxNSArNzMsMTUgQEAgdm9pZCBGRVRpbGU6OmFwcGx5KCkKIAogICAgIEdyYXBoaWNzQ29udGV4
dCogdGlsZUltYWdlQ29udGV4dCA9IHRpbGVJbWFnZS0+Y29udGV4dCgpOwogICAgIHRpbGVJbWFn
ZUNvbnRleHQtPnRyYW5zbGF0ZSgtaW5NYXhFZmZlY3RMb2NhdGlvbi54KCksIC1pbk1heEVmZmVj
dExvY2F0aW9uLnkoKSk7Ci0gICAgdGlsZUltYWdlQ29udGV4dC0+ZHJhd0ltYWdlQnVmZmVyKGlu
LT5yZXN1bHRJbWFnZSgpLCBDb2xvclNwYWNlRGV2aWNlUkdCLCBpbi0+YWJzb2x1dGVQYWludFJl
Y3QoKS5sb2NhdGlvbigpKTsKKyAgICB0aWxlSW1hZ2VDb250ZXh0LT5kcmF3SW1hZ2VCdWZmZXIo
aW4tPmFzSW1hZ2VCdWZmZXIoKSwgQ29sb3JTcGFjZURldmljZVJHQiwgaW4tPmFic29sdXRlUGFp
bnRSZWN0KCkubG9jYXRpb24oKSk7CiAKICAgICBSZWZQdHI8UGF0dGVybj4gcGF0dGVybiA9IFBh
dHRlcm46OmNyZWF0ZSh0aWxlSW1hZ2UtPmNvcHlJbWFnZSgpLCB0cnVlLCB0cnVlKTsKIAogICAg
IEFmZmluZVRyYW5zZm9ybSBwYXR0ZXJuVHJhbnNmb3JtOwogICAgIHBhdHRlcm5UcmFuc2Zvcm0u
dHJhbnNsYXRlKGluTWF4RWZmZWN0TG9jYXRpb24ueCgpIC0gbWF4RWZmZWN0TG9jYXRpb24ueCgp
LCBpbk1heEVmZmVjdExvY2F0aW9uLnkoKSAtIG1heEVmZmVjdExvY2F0aW9uLnkoKSk7CiAgICAg
cGF0dGVybi0+c2V0UGF0dGVyblNwYWNlVHJhbnNmb3JtKHBhdHRlcm5UcmFuc2Zvcm0pOwotICAg
IGZpbHRlckNvbnRleHQtPnNldEZpbGxQYXR0ZXJuKHBhdHRlcm4pOwotICAgIGZpbHRlckNvbnRl
eHQtPmZpbGxSZWN0KEZsb2F0UmVjdChGbG9hdFBvaW50KCksIGFic29sdXRlUGFpbnRSZWN0KCku
c2l6ZSgpKSk7CisgICAgcmVzdWx0SW1hZ2UtPmNvbnRleHQoKS0+c2V0RmlsbFBhdHRlcm4ocGF0
dGVybik7CisgICAgcmVzdWx0SW1hZ2UtPmNvbnRleHQoKS0+ZmlsbFJlY3QoRmxvYXRSZWN0KEZs
b2F0UG9pbnQoKSwgYWJzb2x1dGVQYWludFJlY3QoKS5zaXplKCkpKTsKICNlbmRpZgogfQogCmRp
ZmYgLS1naXQgYS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVUdXJidWxlbmNl
LmNwcCBiL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRVR1cmJ1bGVuY2UuY3Bw
CmluZGV4IDg5MTRkYjcuLmRmN2M0ZjMgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvZmlsdGVycy9GRVR1cmJ1bGVuY2UuY3BwCisrKyBiL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvZmlsdGVycy9GRVR1cmJ1bGVuY2UuY3BwCkBAIC0zMjAsMTUgKzMyMCwxNCBAQCB1bnNp
Z25lZCBjaGFyIEZFVHVyYnVsZW5jZTo6Y2FsY3VsYXRlVHVyYnVsZW5jZVZhbHVlRm9yUG9pbnQo
UGFpbnRpbmdEYXRhJiBwYWludAogCiB2b2lkIEZFVHVyYnVsZW5jZTo6YXBwbHkoKQogewotICAg
IGlmICghZWZmZWN0Q29udGV4dCgpKQorICAgIEltYWdlRGF0YSogcmVzdWx0SW1hZ2UgPSBjcmVh
dGVVbm11bHRpcGxpZWRJbWFnZVJlc3VsdCgpOworICAgIGlmICghcmVzdWx0SW1hZ2UpCiAgICAg
ICAgIHJldHVybjsKIAotICAgIEludFJlY3QgaW1hZ2VSZWN0KEludFBvaW50KCksIHJlc3VsdElt
YWdlKCktPnNpemUoKSk7Ci0gICAgaWYgKCFpbWFnZVJlY3Quc2l6ZSgpLndpZHRoKCkgfHwgIWlt
YWdlUmVjdC5zaXplKCkuaGVpZ2h0KCkpCisgICAgaWYgKCFhYnNvbHV0ZVBhaW50UmVjdCgpLndp
ZHRoKCkgfHwgIWFic29sdXRlUGFpbnRSZWN0KCkuaGVpZ2h0KCkpCiAgICAgICAgIHJldHVybjsK
IAotICAgIFJlZlB0cjxJbWFnZURhdGE+IGltYWdlRGF0YSA9IEltYWdlRGF0YTo6Y3JlYXRlKGlt
YWdlUmVjdC53aWR0aCgpLCBpbWFnZVJlY3QuaGVpZ2h0KCkpOwotICAgIEJ5dGVBcnJheSogcGl4
ZWxBcnJheSA9IGltYWdlRGF0YS0+ZGF0YSgpLT5kYXRhKCk7CisgICAgQnl0ZUFycmF5KiBwaXhl
bEFycmF5ID0gcmVzdWx0SW1hZ2UtPmRhdGEoKS0+ZGF0YSgpOwogICAgIFBhaW50aW5nRGF0YSBw
YWludGluZ0RhdGEobV9zZWVkLCByb3VuZGVkSW50U2l6ZShmaWx0ZXJQcmltaXRpdmVTdWJyZWdp
b24oKS5zaXplKCkpKTsKICAgICBpbml0UGFpbnQocGFpbnRpbmdEYXRhKTsKIApAQCAtMzM2LDE2
ICszMzUsMTUgQEAgdm9pZCBGRVR1cmJ1bGVuY2U6OmFwcGx5KCkKICAgICBGbG9hdFBvaW50IHBv
aW50OwogICAgIHBvaW50LnNldFkoZmlsdGVyUmVnaW9uLnkoKSk7CiAgICAgaW50IGluZGV4T2ZQ
aXhlbENoYW5uZWwgPSAwOwotICAgIGZvciAoaW50IHkgPSAwOyB5IDwgaW1hZ2VSZWN0LmhlaWdo
dCgpOyArK3kpIHsKKyAgICBmb3IgKGludCB5ID0gMDsgeSA8IGFic29sdXRlUGFpbnRSZWN0KCku
aGVpZ2h0KCk7ICsreSkgewogICAgICAgICBwb2ludC5zZXRZKHBvaW50LnkoKSArIDEpOwogICAg
ICAgICBwb2ludC5zZXRYKGZpbHRlclJlZ2lvbi54KCkpOwotICAgICAgICBmb3IgKGludCB4ID0g
MDsgeCA8IGltYWdlUmVjdC53aWR0aCgpOyArK3gpIHsKKyAgICAgICAgZm9yIChpbnQgeCA9IDA7
IHggPCBhYnNvbHV0ZVBhaW50UmVjdCgpLndpZHRoKCk7ICsreCkgewogICAgICAgICAgICAgcG9p
bnQuc2V0WChwb2ludC54KCkgKyAxKTsKICAgICAgICAgICAgIGZvciAocGFpbnRpbmdEYXRhLmNo
YW5uZWwgPSAwOyBwYWludGluZ0RhdGEuY2hhbm5lbCA8IDQ7ICsrcGFpbnRpbmdEYXRhLmNoYW5u
ZWwsICsraW5kZXhPZlBpeGVsQ2hhbm5lbCkKICAgICAgICAgICAgICAgICBwaXhlbEFycmF5LT5z
ZXQoaW5kZXhPZlBpeGVsQ2hhbm5lbCwgY2FsY3VsYXRlVHVyYnVsZW5jZVZhbHVlRm9yUG9pbnQo
cGFpbnRpbmdEYXRhLCBmaWx0ZXIoKS0+bWFwQWJzb2x1dGVQb2ludFRvTG9jYWxQb2ludChwb2lu
dCkpKTsKICAgICAgICAgfQogICAgIH0KLSAgICByZXN1bHRJbWFnZSgpLT5wdXRVbm11bHRpcGxp
ZWRJbWFnZURhdGEoaW1hZ2VEYXRhLmdldCgpLCBpbWFnZVJlY3QsIEludFBvaW50KCkpOwogfQog
CiB2b2lkIEZFVHVyYnVsZW5jZTo6ZHVtcCgpCmRpZmYgLS1naXQgYS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyRWZmZWN0LmNwcCBiL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvZmlsdGVycy9GaWx0ZXJFZmZlY3QuY3BwCmluZGV4IGMyMjg3MzEuLmUxYjQyYWMgMTAw
NjQ0Ci0tLSBhL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJFZmZlY3Qu
Y3BwCisrKyBiL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJFZmZlY3Qu
Y3BwCkBAIC0yMyw2ICsyMyw3IEBACiAKICNpZiBFTkFCTEUoRklMVEVSUykKICNpbmNsdWRlICJG
aWx0ZXJFZmZlY3QuaCIKKyNpbmNsdWRlICJJbWFnZURhdGEuaCIKIAogbmFtZXNwYWNlIFdlYkNv
cmUgewogCkBAIC01NCwxMCArNTUsMTAgQEAgdm9pZCBGaWx0ZXJFZmZlY3Q6OmRldGVybWluZUFi
c29sdXRlUGFpbnRSZWN0KCkKIAogSW50UmVjdCBGaWx0ZXJFZmZlY3Q6OnJlcXVlc3RlZFJlZ2lv
bk9mSW5wdXRJbWFnZURhdGEoY29uc3QgSW50UmVjdCYgZWZmZWN0UmVjdCkgY29uc3QKIHsKLSAg
ICBBU1NFUlQobV9lZmZlY3RCdWZmZXIpOworICAgIEFTU0VSVChoYXNSZXN1bHQoKSk7CiAgICAg
SW50UG9pbnQgbG9jYXRpb24gPSBtX2Fic29sdXRlUGFpbnRSZWN0LmxvY2F0aW9uKCk7CiAgICAg
bG9jYXRpb24ubW92ZSgtZWZmZWN0UmVjdC54KCksIC1lZmZlY3RSZWN0LnkoKSk7Ci0gICAgcmV0
dXJuIEludFJlY3QobG9jYXRpb24sIG1fZWZmZWN0QnVmZmVyLT5zaXplKCkpOworICAgIHJldHVy
biBJbnRSZWN0KGxvY2F0aW9uLCBtX2Fic29sdXRlUGFpbnRSZWN0LnNpemUoKSk7CiB9CiAKIElu
dFJlY3QgRmlsdGVyRWZmZWN0OjpkcmF3aW5nUmVnaW9uT2ZJbnB1dEltYWdlKGNvbnN0IEludFJl
Y3QmIHNyY1JlY3QpIGNvbnN0CkBAIC03MiwxNSArNzMsMTU4IEBAIEZpbHRlckVmZmVjdCogRmls
dGVyRWZmZWN0OjppbnB1dEVmZmVjdCh1bnNpZ25lZCBudW1iZXIpIGNvbnN0CiAgICAgcmV0dXJu
IG1faW5wdXRFZmZlY3RzLmF0KG51bWJlcikuZ2V0KCk7CiB9CiAKLUdyYXBoaWNzQ29udGV4dCog
RmlsdGVyRWZmZWN0OjplZmZlY3RDb250ZXh0KCkKK0ltYWdlQnVmZmVyKiBGaWx0ZXJFZmZlY3Q6
OmFzSW1hZ2VCdWZmZXIoKQoreworICAgIEFTU0VSVChoYXNSZXN1bHQoKSk7CisgICAgaWYgKG1f
aW1hZ2VCdWZmZXJSZXN1bHQpCisgICAgICAgIHJldHVybiBtX2ltYWdlQnVmZmVyUmVzdWx0Lmdl
dCgpOworICAgIG1faW1hZ2VCdWZmZXJSZXN1bHQgPSBJbWFnZUJ1ZmZlcjo6Y3JlYXRlKG1fYWJz
b2x1dGVQYWludFJlY3Quc2l6ZSgpLCBDb2xvclNwYWNlTGluZWFyUkdCKTsKKyAgICBJbnRSZWN0
IGRzdChJbnRQb2ludCgpLCBtX2Fic29sdXRlUGFpbnRSZWN0LnNpemUoKSk7CisgICAgaWYgKG1f
cHJlbXVsdGlwbGllZEltYWdlUmVzdWx0KQorICAgICAgICBtX2ltYWdlQnVmZmVyUmVzdWx0LT5w
dXRQcmVtdWx0aXBsaWVkSW1hZ2VEYXRhKG1fcHJlbXVsdGlwbGllZEltYWdlUmVzdWx0LmdldCgp
LCBkc3QsIEludFBvaW50KCkpOworICAgIGVsc2UKKyAgICAgICAgbV9pbWFnZUJ1ZmZlclJlc3Vs
dC0+cHV0VW5tdWx0aXBsaWVkSW1hZ2VEYXRhKG1fdW5tdWx0aXBsaWVkSW1hZ2VSZXN1bHQuZ2V0
KCksIGRzdCwgSW50UG9pbnQoKSk7CisgICAgcmV0dXJuIG1faW1hZ2VCdWZmZXJSZXN1bHQuZ2V0
KCk7Cit9CisKK1Bhc3NSZWZQdHI8SW1hZ2VEYXRhPiBGaWx0ZXJFZmZlY3Q6OmFzVW5tdWx0aXBs
aWVkSW1hZ2UoY29uc3QgSW50UmVjdCYgcmVjdCkKK3sKKyAgICBQYXNzUmVmUHRyPEltYWdlRGF0
YT4gaW1hZ2VEYXRhID0gSW1hZ2VEYXRhOjpjcmVhdGUocmVjdC53aWR0aCgpLCByZWN0LmhlaWdo
dCgpKTsKKyAgICBhc1VubXVsdGlwbGllZEltYWdlKGltYWdlRGF0YS5nZXQoKSwgcmVjdCk7Cisg
ICAgcmV0dXJuIGltYWdlRGF0YTsKK30KKworUGFzc1JlZlB0cjxJbWFnZURhdGE+IEZpbHRlckVm
ZmVjdDo6YXNQcmVtdWx0aXBsaWVkSW1hZ2UoY29uc3QgSW50UmVjdCYgcmVjdCkKK3sKKyAgICBQ
YXNzUmVmUHRyPEltYWdlRGF0YT4gaW1hZ2VEYXRhID0gSW1hZ2VEYXRhOjpjcmVhdGUocmVjdC53
aWR0aCgpLCByZWN0LmhlaWdodCgpKTsKKyAgICBhc1ByZW11bHRpcGxpZWRJbWFnZShpbWFnZURh
dGEuZ2V0KCksIHJlY3QpOworICAgIHJldHVybiBpbWFnZURhdGE7Cit9CisKK2lubGluZSB2b2lk
IEZpbHRlckVmZmVjdDo6Y29weUltYWdlQnl0ZXMoSW1hZ2VEYXRhKiBkc3QsIEltYWdlRGF0YSog
c3JjLCBjb25zdCBJbnRSZWN0JiByZWN0KQoreworICAgIC8vIENvcHkgdGhlIG5lY2Vzc2FyeSBs
aW5lcworICAgIEFTU0VSVChkc3QtPndpZHRoKCkgPT0gcmVjdC53aWR0aCgpICYmIGRzdC0+aGVp
Z2h0KCkgPT0gcmVjdC5oZWlnaHQoKSk7CisgICAgaWYgKHJlY3QueCgpIDwgMCB8fCByZWN0Lnko
KSA8IDAgfHwgKHJlY3QueCgpICsgcmVjdC53aWR0aCgpKSA+IG1fYWJzb2x1dGVQYWludFJlY3Qu
d2lkdGgoKSB8fCAocmVjdC55KCkgKyByZWN0LmhlaWdodCgpKSA+IG1fYWJzb2x1dGVQYWludFJl
Y3QuaGVpZ2h0KCkpCisgICAgICAgIG1lbXNldChkc3QtPmRhdGEoKS0+ZGF0YSgpLT5kYXRhKCks
IDAsIGRzdC0+ZGF0YSgpLT5sZW5ndGgoKSk7CisKKyAgICBpbnQgb3JpZ2lueCA9IHJlY3QueCgp
OworICAgIGludCBkZXN0eCA9IDA7CisgICAgaWYgKG9yaWdpbnggPCAwKSB7CisgICAgICAgIGRl
c3R4ID0gLW9yaWdpbng7CisgICAgICAgIG9yaWdpbnggPSAwOworICAgIH0KKyAgICBpbnQgZW5k
eCA9IHJlY3QueCgpICsgcmVjdC53aWR0aCgpOworICAgIGlmIChlbmR4ID4gbV9hYnNvbHV0ZVBh
aW50UmVjdC53aWR0aCgpKQorICAgICAgICBlbmR4ID0gbV9hYnNvbHV0ZVBhaW50UmVjdC53aWR0
aCgpOworCisgICAgaW50IG9yaWdpbnkgPSByZWN0LnkoKTsKKyAgICBpbnQgZGVzdHkgPSAwOwor
ICAgIGlmIChvcmlnaW55IDwgMCkgeworICAgICAgICBkZXN0eSA9IC1vcmlnaW55OworICAgICAg
ICBvcmlnaW55ID0gMDsKKyAgICB9CisgICAgaW50IGVuZHkgPSByZWN0LnkoKSArIHJlY3QuaGVp
Z2h0KCk7CisgICAgaWYgKGVuZHkgPiBtX2Fic29sdXRlUGFpbnRSZWN0LmhlaWdodCgpKQorICAg
ICAgICBlbmR5ID0gbV9hYnNvbHV0ZVBhaW50UmVjdC5oZWlnaHQoKTsKKworICAgIGludCBzaXpl
ID0gKGVuZHggLSBvcmlnaW54KSAqIDQ7CisgICAgaW50IGRzdFNjYW5saW5lID0gcmVjdC53aWR0
aCgpICogNDsKKyAgICBpbnQgc3JjU2NhbmxpbmUgPSBtX2Fic29sdXRlUGFpbnRSZWN0LndpZHRo
KCkgKiA0OworICAgIHVuc2lnbmVkIGNoYXIgKmRzdFBpeGVsID0gZHN0LT5kYXRhKCktPmRhdGEo
KS0+ZGF0YSgpICsgKCgoZGVzdHkgKiByZWN0LndpZHRoKCkpICsgZGVzdHgpICogNCk7CisgICAg
dW5zaWduZWQgY2hhciAqc3JjUGl4ZWwgPSBzcmMtPmRhdGEoKS0+ZGF0YSgpLT5kYXRhKCkgKyAo
KChvcmlnaW55ICogbV9hYnNvbHV0ZVBhaW50UmVjdC53aWR0aCgpKSArIG9yaWdpbngpICogNCk7
CisKKyAgICB3aGlsZSAob3JpZ2lueSA8IGVuZHkpIHsKKyAgICAgICAgbWVtY3B5KGRzdFBpeGVs
LCBzcmNQaXhlbCwgc2l6ZSk7CisgICAgICAgIGRzdFBpeGVsICs9IGRzdFNjYW5saW5lOworICAg
ICAgICBzcmNQaXhlbCArPSBzcmNTY2FubGluZTsKKyAgICAgICAgb3JpZ2lueSsrOworICAgIH0K
K30KKwordm9pZCBGaWx0ZXJFZmZlY3Q6OmFzVW5tdWx0aXBsaWVkSW1hZ2UoSW1hZ2VEYXRhKiBk
c3QsIGNvbnN0IEludFJlY3QmIHJlY3QpCit7CisgICAgQVNTRVJUKGhhc1Jlc3VsdCgpKTsKKwor
ICAgIGlmICghbV91bm11bHRpcGxpZWRJbWFnZVJlc3VsdCkgeworICAgICAgICAvLyBXZSBwcmVm
ZXIgYSBjb252ZXJzaW9uIGZyb20gb3VyIGJ5dGUgYXJyYXkuCisgICAgICAgIGlmIChtX3ByZW11
bHRpcGxpZWRJbWFnZVJlc3VsdCkgeworICAgICAgICAgICAgbV91bm11bHRpcGxpZWRJbWFnZVJl
c3VsdCA9IEltYWdlRGF0YTo6Y3JlYXRlKG1fYWJzb2x1dGVQYWludFJlY3Qud2lkdGgoKSwgbV9h
YnNvbHV0ZVBhaW50UmVjdC5oZWlnaHQoKSk7CisgICAgICAgICAgICB1bnNpZ25lZCBjaGFyKiBz
cmMgPSBtX3ByZW11bHRpcGxpZWRJbWFnZVJlc3VsdC0+ZGF0YSgpLT5kYXRhKCktPmRhdGEoKTsK
KyAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIqIGRzdCA9IG1fdW5tdWx0aXBsaWVkSW1hZ2VSZXN1
bHQtPmRhdGEoKS0+ZGF0YSgpLT5kYXRhKCk7CisgICAgICAgICAgICB1bnNpZ25lZCBjaGFyKiBl
bmQgPSBzcmMgKyAobV9hYnNvbHV0ZVBhaW50UmVjdC53aWR0aCgpICogbV9hYnNvbHV0ZVBhaW50
UmVjdC5oZWlnaHQoKSAqIDQpOworICAgICAgICAgICAgd2hpbGUgKHNyYyA8IGVuZCkgeworICAg
ICAgICAgICAgICAgIGludCBhbHBoYSA9IHNyY1szXTsKKyAgICAgICAgICAgICAgICBpZiAoYWxw
aGEpIHsKKyAgICAgICAgICAgICAgICAgICAgZHN0WzBdID0gc3RhdGljX2Nhc3Q8aW50PihzcmNb
MF0pICogMjU1IC8gYWxwaGE7CisgICAgICAgICAgICAgICAgICAgIGRzdFsxXSA9IHN0YXRpY19j
YXN0PGludD4oc3JjWzFdKSAqIDI1NSAvIGFscGhhOworICAgICAgICAgICAgICAgICAgICBkc3Rb
Ml0gPSBzdGF0aWNfY2FzdDxpbnQ+KHNyY1syXSkgKiAyNTUgLyBhbHBoYTsKKyAgICAgICAgICAg
ICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICBkc3RbMF0gPSAwOworICAgICAgICAg
ICAgICAgICAgICBkc3RbMV0gPSAwOworICAgICAgICAgICAgICAgICAgICBkc3RbMl0gPSAwOwor
ICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBkc3RbM10gPSBhbHBoYTsKKyAgICAg
ICAgICAgICAgICBzcmMgKz0gNDsKKyAgICAgICAgICAgICAgICBkc3QgKz0gNDsKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgfSBlbHNlCisgICAgICAgICAgICBtX3VubXVsdGlwbGllZEltYWdlUmVz
dWx0ID0gbV9pbWFnZUJ1ZmZlclJlc3VsdC0+Z2V0VW5tdWx0aXBsaWVkSW1hZ2VEYXRhKEludFJl
Y3QoSW50UG9pbnQoKSwgbV9hYnNvbHV0ZVBhaW50UmVjdC5zaXplKCkpKTsKKyAgICB9CisgICAg
Y29weUltYWdlQnl0ZXMoZHN0LCBtX3VubXVsdGlwbGllZEltYWdlUmVzdWx0LmdldCgpLCByZWN0
KTsKK30KKwordm9pZCBGaWx0ZXJFZmZlY3Q6OmFzUHJlbXVsdGlwbGllZEltYWdlKEltYWdlRGF0
YSogZHN0LCBjb25zdCBJbnRSZWN0JiByZWN0KQoreworICAgIEFTU0VSVChoYXNSZXN1bHQoKSk7
CisKKyAgICBpZiAoIW1fcHJlbXVsdGlwbGllZEltYWdlUmVzdWx0KSB7CisgICAgICAgIC8vIFdl
IHByZWZlciBhIGNvbnZlcnNpb24gZnJvbSBvdXIgYnl0ZSBhcnJheS4KKyAgICAgICAgaWYgKG1f
dW5tdWx0aXBsaWVkSW1hZ2VSZXN1bHQpIHsKKyAgICAgICAgICAgIG1fcHJlbXVsdGlwbGllZElt
YWdlUmVzdWx0ID0gSW1hZ2VEYXRhOjpjcmVhdGUobV9hYnNvbHV0ZVBhaW50UmVjdC53aWR0aCgp
LCBtX2Fic29sdXRlUGFpbnRSZWN0LmhlaWdodCgpKTsKKyAgICAgICAgICAgIHVuc2lnbmVkIGNo
YXIqIHNyYyA9IG1fdW5tdWx0aXBsaWVkSW1hZ2VSZXN1bHQtPmRhdGEoKS0+ZGF0YSgpLT5kYXRh
KCk7CisgICAgICAgICAgICB1bnNpZ25lZCBjaGFyKiBkc3QgPSBtX3ByZW11bHRpcGxpZWRJbWFn
ZVJlc3VsdC0+ZGF0YSgpLT5kYXRhKCktPmRhdGEoKTsKKyAgICAgICAgICAgIHVuc2lnbmVkIGNo
YXIqIGVuZCA9IHNyYyArIChtX2Fic29sdXRlUGFpbnRSZWN0LndpZHRoKCkgKiBtX2Fic29sdXRl
UGFpbnRSZWN0LmhlaWdodCgpICogNCk7CisgICAgICAgICAgICB3aGlsZSAoc3JjIDwgZW5kKSB7
CisgICAgICAgICAgICAgICAgaW50IGFscGhhID0gc3JjWzNdOworICAgICAgICAgICAgICAgIGRz
dFswXSA9IHN0YXRpY19jYXN0PGludD4oc3JjWzBdKSAqIGFscGhhIC8gMjU1OworICAgICAgICAg
ICAgICAgIGRzdFsxXSA9IHN0YXRpY19jYXN0PGludD4oc3JjWzFdKSAqIGFscGhhIC8gMjU1Owor
ICAgICAgICAgICAgICAgIGRzdFsyXSA9IHN0YXRpY19jYXN0PGludD4oc3JjWzJdKSAqIGFscGhh
IC8gMjU1OworICAgICAgICAgICAgICAgIGRzdFszXSA9IGFscGhhOworICAgICAgICAgICAgICAg
IHNyYyArPSA0OworICAgICAgICAgICAgICAgIGRzdCArPSA0OworICAgICAgICAgICAgfQorICAg
ICAgICB9IGVsc2UKKyAgICAgICAgICAgIG1fcHJlbXVsdGlwbGllZEltYWdlUmVzdWx0ID0gbV9p
bWFnZUJ1ZmZlclJlc3VsdC0+Z2V0UHJlbXVsdGlwbGllZEltYWdlRGF0YShJbnRSZWN0KEludFBv
aW50KCksIG1fYWJzb2x1dGVQYWludFJlY3Quc2l6ZSgpKSk7CisgICAgfQorICAgIGNvcHlJbWFn
ZUJ5dGVzKGRzdCwgbV9wcmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQuZ2V0KCksIHJlY3QpOworfQor
CitJbWFnZUJ1ZmZlciogRmlsdGVyRWZmZWN0OjpjcmVhdGVJbWFnZUJ1ZmZlclJlc3VsdCgpCiB7
CiAgICAgZGV0ZXJtaW5lQWJzb2x1dGVQYWludFJlY3QoKTsKICAgICBpZiAobV9hYnNvbHV0ZVBh
aW50UmVjdC5pc0VtcHR5KCkpCiAgICAgICAgIHJldHVybiAwOwotICAgIG1fZWZmZWN0QnVmZmVy
ID0gSW1hZ2VCdWZmZXI6OmNyZWF0ZShtX2Fic29sdXRlUGFpbnRSZWN0LnNpemUoKSwgQ29sb3JT
cGFjZUxpbmVhclJHQik7Ci0gICAgaWYgKCFtX2VmZmVjdEJ1ZmZlcikKKyAgICBtX2ltYWdlQnVm
ZmVyUmVzdWx0ID0gSW1hZ2VCdWZmZXI6OmNyZWF0ZShtX2Fic29sdXRlUGFpbnRSZWN0LnNpemUo
KSwgQ29sb3JTcGFjZUxpbmVhclJHQik7CisgICAgcmV0dXJuIG1faW1hZ2VCdWZmZXJSZXN1bHQu
Z2V0KCk7Cit9CisKK0ltYWdlRGF0YSogRmlsdGVyRWZmZWN0OjpjcmVhdGVVbm11bHRpcGxpZWRJ
bWFnZVJlc3VsdCgpCit7CisgICAgZGV0ZXJtaW5lQWJzb2x1dGVQYWludFJlY3QoKTsKKyAgICBp
ZiAobV9hYnNvbHV0ZVBhaW50UmVjdC5pc0VtcHR5KCkpCisgICAgICAgIHJldHVybiAwOworICAg
IG1fdW5tdWx0aXBsaWVkSW1hZ2VSZXN1bHQgPSBJbWFnZURhdGE6OmNyZWF0ZShtX2Fic29sdXRl
UGFpbnRSZWN0LndpZHRoKCksIG1fYWJzb2x1dGVQYWludFJlY3QuaGVpZ2h0KCkpOworICAgIHJl
dHVybiBtX3VubXVsdGlwbGllZEltYWdlUmVzdWx0LmdldCgpOworfQorCitJbWFnZURhdGEqIEZp
bHRlckVmZmVjdDo6Y3JlYXRlUHJlbXVsdGlwbGllZEltYWdlUmVzdWx0KCkKK3sKKyAgICBkZXRl
cm1pbmVBYnNvbHV0ZVBhaW50UmVjdCgpOworICAgIGlmIChtX2Fic29sdXRlUGFpbnRSZWN0Lmlz
RW1wdHkoKSkKICAgICAgICAgcmV0dXJuIDA7Ci0gICAgcmV0dXJuIG1fZWZmZWN0QnVmZmVyLT5j
b250ZXh0KCk7CisgICAgbV9wcmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQgPSBJbWFnZURhdGE6OmNy
ZWF0ZShtX2Fic29sdXRlUGFpbnRSZWN0LndpZHRoKCksIG1fYWJzb2x1dGVQYWludFJlY3QuaGVp
Z2h0KCkpOworICAgIHJldHVybiBtX3ByZW11bHRpcGxpZWRJbWFnZVJlc3VsdC5nZXQoKTsKIH0K
IAogVGV4dFN0cmVhbSYgRmlsdGVyRWZmZWN0OjpleHRlcm5hbFJlcHJlc2VudGF0aW9uKFRleHRT
dHJlYW0mIHRzLCBpbnQpIGNvbnN0CmRpZmYgLS1naXQgYS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2ZpbHRlcnMvRmlsdGVyRWZmZWN0LmggYi9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Zp
bHRlcnMvRmlsdGVyRWZmZWN0LmgKaW5kZXggZjk2NzRlMi4uMDg4NDJhYyAxMDA2NDQKLS0tIGEv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlckVmZmVjdC5oCisrKyBiL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJFZmZlY3QuaApAQCAtNTAsMTMg
KzUwLDEyIEBAIGNsYXNzIEZpbHRlckVmZmVjdCA6IHB1YmxpYyBSZWZDb3VudGVkPEZpbHRlckVm
ZmVjdD4gewogcHVibGljOgogICAgIHZpcnR1YWwgfkZpbHRlckVmZmVjdCgpOwogCi0gICAgLy8g
VGhlIHJlc3VsdCBpcyBib3VuZGVkIHRvIHRoZSBzaXplIG9mIHRoZSBmaWx0ZXIgcHJpbWl0aXZl
IHRvIHNhdmUgcmVzb3VyY2VzLgotICAgIEltYWdlQnVmZmVyKiByZXN1bHRJbWFnZSgpIGNvbnN0
IHsgcmV0dXJuIG1fZWZmZWN0QnVmZmVyLmdldCgpOyB9Ci0gICAgdm9pZCBzZXRFZmZlY3RCdWZm
ZXIoUGFzc093blB0cjxJbWFnZUJ1ZmZlcj4gZWZmZWN0QnVmZmVyKSB7IG1fZWZmZWN0QnVmZmVy
ID0gZWZmZWN0QnVmZmVyOyB9Ci0KLSAgICAvLyBDcmVhdGVzIHRoZSBJbWFnZUJ1ZmZlciBmb3Ig
dGhlIGN1cnJlbnQgZmlsdGVyIHByaW1pdGl2ZSByZXN1bHQgaW4gdGhlIHNpemUgb2YgdGhlCi0g
ICAgLy8gcmVwYWludFJlY3QuIEdpdmVzIGJhY2sgdGhlIEdyYXBoaWNzQ29udGV4dCBvZiB0aGUg
b3duIEltYWdlQnVmZmVyLgotICAgIEdyYXBoaWNzQ29udGV4dCogZWZmZWN0Q29udGV4dCgpOwor
ICAgIGJvb2wgaGFzUmVzdWx0KCkgY29uc3QgeyByZXR1cm4gbV9pbWFnZUJ1ZmZlclJlc3VsdCB8
fCBtX3VubXVsdGlwbGllZEltYWdlUmVzdWx0IHx8IG1fcHJlbXVsdGlwbGllZEltYWdlUmVzdWx0
OyB9CisgICAgSW1hZ2VCdWZmZXIqIGFzSW1hZ2VCdWZmZXIoKTsKKyAgICBQYXNzUmVmUHRyPElt
YWdlRGF0YT4gYXNVbm11bHRpcGxpZWRJbWFnZShjb25zdCBJbnRSZWN0Jik7CisgICAgUGFzc1Jl
ZlB0cjxJbWFnZURhdGE+IGFzUHJlbXVsdGlwbGllZEltYWdlKGNvbnN0IEludFJlY3QmKTsKKyAg
ICB2b2lkIGFzVW5tdWx0aXBsaWVkSW1hZ2UoSW1hZ2VEYXRhKiBkc3QsIGNvbnN0IEludFJlY3Qm
KTsKKyAgICB2b2lkIGFzUHJlbXVsdGlwbGllZEltYWdlKEltYWdlRGF0YSogZHN0LCBjb25zdCBJ
bnRSZWN0Jik7CiAKICAgICBGaWx0ZXJFZmZlY3RWZWN0b3ImIGlucHV0RWZmZWN0cygpIHsgcmV0
dXJuIG1faW5wdXRFZmZlY3RzOyB9CiAgICAgRmlsdGVyRWZmZWN0KiBpbnB1dEVmZmVjdCh1bnNp
Z25lZCkgY29uc3Q7CkBAIC0xMTAsOCArMTA5LDE0IEBAIHB1YmxpYzoKIHByb3RlY3RlZDoKICAg
ICBGaWx0ZXJFZmZlY3QoRmlsdGVyKik7CiAKKyAgICBJbWFnZUJ1ZmZlciogY3JlYXRlSW1hZ2VC
dWZmZXJSZXN1bHQoKTsKKyAgICBJbWFnZURhdGEqIGNyZWF0ZVVubXVsdGlwbGllZEltYWdlUmVz
dWx0KCk7CisgICAgSW1hZ2VEYXRhKiBjcmVhdGVQcmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQoKTsK
KwogcHJpdmF0ZToKLSAgICBPd25QdHI8SW1hZ2VCdWZmZXI+IG1fZWZmZWN0QnVmZmVyOworICAg
IE93blB0cjxJbWFnZUJ1ZmZlcj4gbV9pbWFnZUJ1ZmZlclJlc3VsdDsKKyAgICBSZWZQdHI8SW1h
Z2VEYXRhPiBtX3VubXVsdGlwbGllZEltYWdlUmVzdWx0OworICAgIFJlZlB0cjxJbWFnZURhdGE+
IG1fcHJlbXVsdGlwbGllZEltYWdlUmVzdWx0OwogICAgIEZpbHRlckVmZmVjdFZlY3RvciBtX2lu
cHV0RWZmZWN0czsKIAogICAgIGJvb2wgbV9hbHBoYUltYWdlOwpAQCAtMTI0LDYgKzEyOSw4IEBA
IHByaXZhdGU6CiAgICAgRmlsdGVyKiBtX2ZpbHRlcjsKIAogcHJpdmF0ZToKKyAgICBpbmxpbmUg
dm9pZCBjb3B5SW1hZ2VCeXRlcyhJbWFnZURhdGEqIGRzdCwgSW1hZ2VEYXRhKiBzcmMsIGNvbnN0
IEludFJlY3QmKTsKKwogICAgIC8vIFRoZSBmb2xsb3dpbmcgbWVtYmVyIHZhcmlhYmxlcyBhcmUg
U1ZHIHNwZWNpZmljIGFuZCB3aWxsIG1vdmUgdG8gUmVuZGVyU1ZHUmVzb3VyY2VGaWx0ZXJQcmlt
aXRpdmUuCiAgICAgLy8gU2VlIGJ1ZyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9NDU2MTQuCiAKZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmls
dGVycy9Tb3VyY2VBbHBoYS5jcHAgYi9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMv
U291cmNlQWxwaGEuY3BwCmluZGV4IGE1MDViNGIuLjRjOTIxYjcgMTAwNjQ0Ci0tLSBhL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9Tb3VyY2VBbHBoYS5jcHAKKysrIGIvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL1NvdXJjZUFscGhhLmNwcApAQCAtNTIsMTQgKzUy
LDE1IEBAIHZvaWQgU291cmNlQWxwaGE6OmRldGVybWluZUFic29sdXRlUGFpbnRSZWN0KCkKIAog
dm9pZCBTb3VyY2VBbHBoYTo6YXBwbHkoKQogewotICAgIEdyYXBoaWNzQ29udGV4dCogZmlsdGVy
Q29udGV4dCA9IGVmZmVjdENvbnRleHQoKTsKKyAgICBJbWFnZUJ1ZmZlciogcmVzdWx0SW1hZ2Ug
PSBjcmVhdGVJbWFnZUJ1ZmZlclJlc3VsdCgpOwogICAgIEZpbHRlciogZmlsdGVyID0gdGhpcy0+
ZmlsdGVyKCk7Ci0gICAgaWYgKCFmaWx0ZXJDb250ZXh0IHx8ICFmaWx0ZXItPnNvdXJjZUltYWdl
KCkpCisgICAgaWYgKCFyZXN1bHRJbWFnZSB8fCAhZmlsdGVyLT5zb3VyY2VJbWFnZSgpKQogICAg
ICAgICByZXR1cm47CiAKICAgICBzZXRJc0FscGhhSW1hZ2UodHJ1ZSk7CiAKICAgICBGbG9hdFJl
Y3QgaW1hZ2VSZWN0KEZsb2F0UG9pbnQoKSwgYWJzb2x1dGVQYWludFJlY3QoKS5zaXplKCkpOwor
ICAgIEdyYXBoaWNzQ29udGV4dCogZmlsdGVyQ29udGV4dCA9IHJlc3VsdEltYWdlLT5jb250ZXh0
KCk7CiAgICAgZmlsdGVyQ29udGV4dC0+c2F2ZSgpOwogICAgIGZpbHRlckNvbnRleHQtPmNsaXBU
b0ltYWdlQnVmZmVyKGZpbHRlci0+c291cmNlSW1hZ2UoKSwgaW1hZ2VSZWN0KTsKICAgICBmaWx0
ZXJDb250ZXh0LT5maWxsUmVjdChpbWFnZVJlY3QsIENvbG9yOjpibGFjaywgQ29sb3JTcGFjZURl
dmljZVJHQik7CmRpZmYgLS1naXQgYS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMv
U291cmNlR3JhcGhpYy5jcHAgYi9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvU291
cmNlR3JhcGhpYy5jcHAKaW5kZXggNmFhYzM2Ny4uYTgwOTQ3YSAxMDA2NDQKLS0tIGEvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL1NvdXJjZUdyYXBoaWMuY3BwCisrKyBiL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9Tb3VyY2VHcmFwaGljLmNwcApAQCAtNTEsMTIg
KzUxLDEyIEBAIHZvaWQgU291cmNlR3JhcGhpYzo6ZGV0ZXJtaW5lQWJzb2x1dGVQYWludFJlY3Qo
KQogCiB2b2lkIFNvdXJjZUdyYXBoaWM6OmFwcGx5KCkKIHsKLSAgICBHcmFwaGljc0NvbnRleHQq
IGZpbHRlckNvbnRleHQgPSBlZmZlY3RDb250ZXh0KCk7CisgICAgSW1hZ2VCdWZmZXIqIHJlc3Vs
dEltYWdlID0gY3JlYXRlSW1hZ2VCdWZmZXJSZXN1bHQoKTsKICAgICBGaWx0ZXIqIGZpbHRlciA9
IHRoaXMtPmZpbHRlcigpOwotICAgIGlmICghZmlsdGVyQ29udGV4dCB8fCAhZmlsdGVyLT5zb3Vy
Y2VJbWFnZSgpKQorICAgIGlmICghcmVzdWx0SW1hZ2UgfHwgIWZpbHRlci0+c291cmNlSW1hZ2Uo
KSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgZmlsdGVyQ29udGV4dC0+ZHJhd0ltYWdlQnVmZmVy
KGZpbHRlci0+c291cmNlSW1hZ2UoKSwgQ29sb3JTcGFjZURldmljZVJHQiwgSW50UG9pbnQoKSk7
CisgICAgcmVzdWx0SW1hZ2UtPmNvbnRleHQoKS0+ZHJhd0ltYWdlQnVmZmVyKGZpbHRlci0+c291
cmNlSW1hZ2UoKSwgQ29sb3JTcGFjZURldmljZVJHQiwgSW50UG9pbnQoKSk7CiB9CiAKIHZvaWQg
U291cmNlR3JhcGhpYzo6ZHVtcCgpCmRpZmYgLS1naXQgYS9XZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJTVkdSZXNvdXJjZUZpbHRlci5jcHAgYi9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJTVkdSZXNv
dXJjZUZpbHRlci5jcHAKaW5kZXggNzI4NzJmNi4uMzM3ODNlOCAxMDA2NDQKLS0tIGEvV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyU1ZHUmVzb3VyY2VGaWx0ZXIuY3BwCisrKyBiL1dlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlclNWR1Jlc291cmNlRmlsdGVyLmNwcApAQCAtMjkyLDE0ICsyOTIsMTQgQEAg
dm9pZCBSZW5kZXJTVkdSZXNvdXJjZUZpbHRlcjo6cG9zdEFwcGx5UmVzb3VyY2UoUmVuZGVyT2Jq
ZWN0KiBvYmplY3QsIEdyYXBoaWNzQ28KICAgICAgICAgICAgIGZpbHRlckRhdGEtPmZpbHRlci0+
c2V0U291cmNlSW1hZ2UoZmlsdGVyRGF0YS0+c291cmNlR3JhcGhpY0J1ZmZlci5yZWxlYXNlKCkp
OwogICAgICAgICAgICAgbGFzdEVmZmVjdC0+YXBwbHkoKTsKICNpZiAhUExBVEZPUk0oQ0cpCi0g
ICAgICAgICAgICBJbWFnZUJ1ZmZlciogcmVzdWx0SW1hZ2UgPSBsYXN0RWZmZWN0LT5yZXN1bHRJ
bWFnZSgpOworICAgICAgICAgICAgSW1hZ2VCdWZmZXIqIHJlc3VsdEltYWdlID0gbGFzdEVmZmVj
dC0+YXNJbWFnZUJ1ZmZlcigpOwogICAgICAgICAgICAgaWYgKHJlc3VsdEltYWdlKQogICAgICAg
ICAgICAgICAgIHJlc3VsdEltYWdlLT50cmFuc2Zvcm1Db2xvclNwYWNlKENvbG9yU3BhY2VMaW5l
YXJSR0IsIENvbG9yU3BhY2VEZXZpY2VSR0IpOwogI2VuZGlmCiAgICAgICAgICAgICBmaWx0ZXJE
YXRhLT5idWlsZGVkID0gdHJ1ZTsKICAgICAgICAgfQogCi0gICAgICAgIEltYWdlQnVmZmVyKiBy
ZXN1bHRJbWFnZSA9IGxhc3RFZmZlY3QtPnJlc3VsdEltYWdlKCk7CisgICAgICAgIEltYWdlQnVm
ZmVyKiByZXN1bHRJbWFnZSA9IGxhc3RFZmZlY3QtPmFzSW1hZ2VCdWZmZXIoKTsKICAgICAgICAg
aWYgKHJlc3VsdEltYWdlKSB7CiAgICAgICAgICAgICBjb250ZXh0LT5jb25jYXRDVE0oZmlsdGVy
RGF0YS0+c2hlYXJGcmVlQWJzb2x1dGVUcmFuc2Zvcm0uaW52ZXJzZSgpKTsKIApkaWZmIC0tZ2l0
IGEvV2ViQ29yZS9zdmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdGRUltYWdlLmNwcCBiL1dlYkNvcmUv
c3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZHRkVJbWFnZS5jcHAKaW5kZXggNmExOTE0YS4uODAxMTU0
MiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9zdmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdGRUltYWdlLmNw
cAorKysgYi9XZWJDb3JlL3N2Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0ZFSW1hZ2UuY3BwCkBAIC01
OSwxOCArNTksMTggQEAgdm9pZCBGRUltYWdlOjphcHBseSgpCiAgICAgaWYgKCFtX2ltYWdlLmdl
dCgpKQogICAgICAgICByZXR1cm47CiAKLSAgICBHcmFwaGljc0NvbnRleHQqIGZpbHRlckNvbnRl
eHQgPSBlZmZlY3RDb250ZXh0KCk7Ci0gICAgaWYgKCFmaWx0ZXJDb250ZXh0KQorICAgIEltYWdl
QnVmZmVyKiByZXN1bHRJbWFnZSA9IGNyZWF0ZUltYWdlQnVmZmVyUmVzdWx0KCk7CisgICAgaWYg
KCFyZXN1bHRJbWFnZSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgRmxvYXRSZWN0IHNyY1JlY3Qo
RmxvYXRQb2ludCgpLCBtX2ltYWdlLT5zaXplKCkpOworICAgIEZsb2F0UmVjdCBzcmNSZWN0KEZs
b2F0UG9pbnQoKSwgYWJzb2x1dGVQYWludFJlY3QoKS5zaXplKCkpOwogICAgIEZsb2F0UmVjdCBk
ZXN0UmVjdChtX2Fic29sdXRlU3VicmVnaW9uKTsKICAgICBtX3ByZXNlcnZlQXNwZWN0UmF0aW8u
dHJhbnNmb3JtUmVjdChkZXN0UmVjdCwgc3JjUmVjdCk7CiAKICAgICBJbnRQb2ludCBwYWludExv
Y2F0aW9uID0gYWJzb2x1dGVQYWludFJlY3QoKS5sb2NhdGlvbigpOwogICAgIGRlc3RSZWN0Lm1v
dmUoLXBhaW50TG9jYXRpb24ueCgpLCAtcGFpbnRMb2NhdGlvbi55KCkpOwogCi0gICAgZmlsdGVy
Q29udGV4dC0+ZHJhd0ltYWdlKG1faW1hZ2UuZ2V0KCksIENvbG9yU3BhY2VEZXZpY2VSR0IsIGRl
c3RSZWN0LCBzcmNSZWN0KTsKKyAgICByZXN1bHRJbWFnZS0+Y29udGV4dCgpLT5kcmF3SW1hZ2Uo
bV9pbWFnZS5nZXQoKSwgQ29sb3JTcGFjZURldmljZVJHQiwgZGVzdFJlY3QsIHNyY1JlY3QpOwog
fQogCiB2b2lkIEZFSW1hZ2U6OmR1bXAoKQotLSAKMS42LjAuNAoK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>74848</attachid>
            <date>2010-11-25 03:45:28 -0800</date>
            <delta_ts>2010-11-29 00:56:21 -0800</delta_ts>
            <desc>patch</desc>
            <filename>0001-filter-result.patch</filename>
            <type>text/plain</type>
            <size>50382</size>
            <attacher name="Zoltan Herczeg">zherczeg</attacher>
            
              <data encoding="base64">RnJvbSBhZGViNWZkODI3ZjM0ODdjNTY4ODlhY2E5YzgwMzZmNjYyOTM1NDI4IE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBab2x0YW4gSGVyY3plZyA8emhlcmN6ZWdAaW5mLnUtc3plZ2Vk
Lmh1PgpEYXRlOiBUaHUsIDI1IE5vdiAyMDEwIDEyOjQyOjA0ICswMTAwClN1YmplY3Q6IFtQQVRD
SF0gZmlsdGVyLXJlc3VsdAoKU2lnbmVkLW9mZi1ieTogWm9sdGFuIEhlcmN6ZWcgPHpoZXJjemVn
QGluZi51LXN6ZWdlZC5odT4KLS0tCiBXZWJDb3JlL0NoYW5nZUxvZyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICB8ICAgNjcgKysrKysrKysKIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvZmlsdGVycy9GRUJsZW5kLmNwcCAgICAgIHwgICAxNSArLQogLi4uL3BsYXRmb3JtL2dyYXBo
aWNzL2ZpbHRlcnMvRkVDb2xvck1hdHJpeC5jcHAgICAgfCAgIDE0ICstCiAuLi4vZ3JhcGhpY3Mv
ZmlsdGVycy9GRUNvbXBvbmVudFRyYW5zZmVyLmNwcCAgICAgICB8ICAgIDkgKy0KIFdlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUNvbXBvc2l0ZS5jcHAgIHwgICAzMyArKy0tCiAu
Li4vcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUNvbnZvbHZlTWF0cml4LmNwcCB8ICAgNDQg
KysrLS0tCiAuLi4vZ3JhcGhpY3MvZmlsdGVycy9GRURpc3BsYWNlbWVudE1hcC5jcHAgICAgICAg
ICB8ICAgMjQgKystLQogV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFRmxvb2Qu
Y3BwICAgICAgfCAgICA2ICstCiAuLi4vcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUdhdXNz
aWFuQmx1ci5jcHAgICB8ICAgMjUgKystLQogV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0
ZXJzL0ZFTGlnaHRpbmcuY3BwICAgfCAgIDEyICstCiBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2ZpbHRlcnMvRkVNZXJnZS5jcHAgICAgICB8ICAgIDkgKy0KIFdlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvZmlsdGVycy9GRU1vcnBob2xvZ3kuY3BwIHwgICAxMiArLQogV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9maWx0ZXJzL0ZFT2Zmc2V0LmNwcCAgICAgfCAgICA4ICstCiBXZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVUaWxlLmNwcCAgICAgICB8ICAgMTIgKy0KIFdlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRVR1cmJ1bGVuY2UuY3BwIHwgICAxNCArLQog
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlckVmZmVjdC5jcHAgfCAgMTc2
ICsrKysrKysrKysrKysrKysrKystCiBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMv
RmlsdGVyRWZmZWN0LmggICB8ICAgMjMgKystCiBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Zp
bHRlcnMvU291cmNlQWxwaGEuY3BwICB8ICAgIDUgKy0KIC4uLi9wbGF0Zm9ybS9ncmFwaGljcy9m
aWx0ZXJzL1NvdXJjZUdyYXBoaWMuY3BwICAgIHwgICAgNiArLQogV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyU1ZHUmVzb3VyY2VGaWx0ZXIuY3BwICAgICAgfCAgICA0ICstCiBXZWJDb3JlL3N2Zy9n
cmFwaGljcy9maWx0ZXJzL1NWR0ZFSW1hZ2UuY3BwICAgICAgICB8ICAgIDYgKy0KIDIxIGZpbGVz
IGNoYW5nZWQsIDM3NSBpbnNlcnRpb25zKCspLCAxNDkgZGVsZXRpb25zKC0pCgpkaWZmIC0tZ2l0
IGEvV2ViQ29yZS9DaGFuZ2VMb2cgYi9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCAyMzI4YTllLi5m
YmE5MTNmIDEwMDY0NAotLS0gYS9XZWJDb3JlL0NoYW5nZUxvZworKysgYi9XZWJDb3JlL0NoYW5n
ZUxvZwpAQCAtMSwzICsxLDcwIEBACisyMDEwLTExLTI1ICBab2x0YW4gSGVyY3plZyAgPHpoZXJj
emVnQHdlYmtpdC5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisK
KyAgICAgICAgQmV0dGVyIHJlc3VsdCBwYXNzaW5nIGluIGZpbHRlciBwcmltaXRpdmVzCisgICAg
ICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD00OTkwNworCisgICAg
ICAgIFNWTiBmaWx0ZXIgcHJpbWl0aXZlcyBjYW4gdXNlIHRoZSBvdXRwdXQgb2Ygb3RoZXIgZmls
dGVycy4gVGhlCisgICAgICAgIGlucHV0IGFuZCBvdXRwdXQgZm9ybWF0IG9mIGEgZmlsdGVyIGNh
biBiZSBhIHByZW11bHRpcGxpZWQgb3IKKyAgICAgICAgdW5tdWx0aXBsaWVkIFJHQkEgYXJyYXks
IG9yIGFuIGltYWdlIGJ1ZmZlci4gQWxsIGZpbHRlcgorICAgICAgICBwcmltaXRpdmUgcmVzdWx0
IHdhcyBjb252ZXJ0ZWQgdG8gaW1hZ2UgYnVmZmVyIGJlZm9yZSwgd2hpY2gKKyAgICAgICAgY291
bGQgYmUgYW4gdW5lY2Vzc2FyeSAoYW5kIHJlYWxseSBjb3N0bHkpIG9wZXJhdGlvbiwgaWYKKyAg
ICAgICAgYSBmaWx0ZXIgZXhwZWN0cyBpdHMgaW5wdXQgaW4gdGhlIHNhbWUgZm9ybWF0IGFzIHRo
ZSBvdXRwdXQKKyAgICAgICAgb2YgdGhlIGlucHV0IGZpbHRlciBwcmltaXRpdmUuIFRoaXMgb3Zl
cmhlYWQgaXMgcmVtb3ZlZCBieQorICAgICAgICB0aGlzIHBhdGNoLiBBbGwgYXBwbHkoKSBtZXRo
b2RzIHVwZGF0ZWQgYWNjb3JkaW5nIHRvIHRoaXMgbmV3CisgICAgICAgIGZpbHRlciBwcmltaXRp
dmUgaW50ZXJmYWNlLgorCisgICAgICAgIFRoZSBleGlzdGluZyB0ZXN0cyBjb3ZlciB0aGlzIGZl
YXR1cmUKKworICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVCbGVuZC5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpGRUJsZW5kOjphcHBseSk6CisgICAgICAgICogcGxhdGZvcm0v
Z3JhcGhpY3MvZmlsdGVycy9GRUNvbG9yTWF0cml4LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZF
Q29sb3JNYXRyaXg6OmFwcGx5KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJz
L0ZFQ29tcG9uZW50VHJhbnNmZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RkVDb21wb25lbnRU
cmFuc2Zlcjo6YXBwbHkpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVD
b21wb3NpdGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RkVDb21wb3NpdGU6OmFwcGx5KToKKyAg
ICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29udm9sdmVNYXRyaXguY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6RkVDb252b2x2ZU1hdHJpeDo6YXBwbHkpOgorICAgICAgICAqIHBs
YXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVEaXNwbGFjZW1lbnRNYXAuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6RkVEaXNwbGFjZW1lbnRNYXA6OmFwcGx5KToKKyAgICAgICAgKiBwbGF0Zm9ybS9n
cmFwaGljcy9maWx0ZXJzL0ZFRmxvb2QuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RkVGbG9vZDo6
YXBwbHkpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVHYXVzc2lhbkJs
dXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RkVHYXVzc2lhbkJsdXI6OmFwcGx5KToKKyAgICAg
ICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFTGlnaHRpbmcuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6RkVMaWdodGluZzo6YXBwbHkpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNz
L2ZpbHRlcnMvRkVNZXJnZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGRU1lcmdlOjphcHBseSk6
CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRU1vcnBob2xvZ3kuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6RkVNb3JwaG9sb2d5OjphcHBseSk6CisgICAgICAgICogcGxhdGZv
cm0vZ3JhcGhpY3MvZmlsdGVycy9GRU9mZnNldC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGRU9m
ZnNldDo6YXBwbHkpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVUaWxl
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZFVGlsZTo6YXBwbHkpOgorICAgICAgICAqIHBsYXRm
b3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVUdXJidWxlbmNlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OkZFVHVyYnVsZW5jZTo6YXBwbHkpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRl
cnMvRmlsdGVyRWZmZWN0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6cmVx
dWVzdGVkUmVnaW9uT2ZJbnB1dEltYWdlRGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJF
ZmZlY3Q6OmFzSW1hZ2VCdWZmZXIpOgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0Ojph
c1VubXVsdGlwbGllZEltYWdlKToKKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6YXNQ
cmVtdWx0aXBsaWVkSW1hZ2UpOgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0Ojpjb3B5
SW1hZ2VCeXRlcyk6CisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6OmNyZWF0ZUltYWdl
QnVmZmVyUmVzdWx0KToKKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6Y3JlYXRlVW5t
dWx0aXBsaWVkSW1hZ2VSZXN1bHQpOgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0Ojpj
cmVhdGVQcmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBo
aWNzL2ZpbHRlcnMvRmlsdGVyRWZmZWN0Lmg6CisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZl
Y3Q6Omhhc1Jlc3VsdCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9Tb3Vy
Y2VBbHBoYS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTb3VyY2VBbHBoYTo6YXBwbHkpOgorICAg
ICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvU291cmNlR3JhcGhpYy5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpTb3VyY2VHcmFwaGljOjphcHBseSk6CisgICAgICAgICogcmVuZGVyaW5n
L1JlbmRlclNWR1Jlc291cmNlRmlsdGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclNW
R1Jlc291cmNlRmlsdGVyOjpwb3N0QXBwbHlSZXNvdXJjZSk6CisgICAgICAgICogc3ZnL2dyYXBo
aWNzL2ZpbHRlcnMvU1ZHRkVJbWFnZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGRUltYWdlOjph
cHBseSk6CisKIDIwMTAtMTEtMjQgIEphbWVzIFJvYmluc29uICA8amFtZXNyQGNocm9taXVtLm9y
Zz4KIAogICAgICAgICBSZXZpZXdlZCBieSBLZW5uZXRoIFJ1c3NlbGwuCmRpZmYgLS1naXQgYS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVCbGVuZC5jcHAgYi9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVCbGVuZC5jcHAKaW5kZXggODliNDRlMC4uZmNkMzlh
MyAxMDA2NDQKLS0tIGEvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQmxlbmQu
Y3BwCisrKyBiL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUJsZW5kLmNwcApA
QCAtOTIsMjYgKzkyLDI1IEBAIHZvaWQgRkVCbGVuZDo6YXBwbHkoKQogICAgIEZpbHRlckVmZmVj
dCogaW4yID0gaW5wdXRFZmZlY3QoMSk7CiAgICAgaW4tPmFwcGx5KCk7CiAgICAgaW4yLT5hcHBs
eSgpOwotICAgIGlmICghaW4tPnJlc3VsdEltYWdlKCkgfHwgIWluMi0+cmVzdWx0SW1hZ2UoKSkK
KyAgICBpZiAoIWluLT5oYXNSZXN1bHQoKSB8fCAhaW4yLT5oYXNSZXN1bHQoKSkKICAgICAgICAg
cmV0dXJuOwogCiAgICAgaWYgKG1fbW9kZSA8PSBGRUJMRU5EX01PREVfVU5LTk9XTiB8fCBtX21v
ZGUgPiBGRUJMRU5EX01PREVfTElHSFRFTikKICAgICAgICAgcmV0dXJuOwogCi0gICAgaWYgKCFl
ZmZlY3RDb250ZXh0KCkpCisgICAgSW1hZ2VEYXRhKiByZXN1bHRJbWFnZSA9IGNyZWF0ZVByZW11
bHRpcGxpZWRJbWFnZVJlc3VsdCgpOworICAgIGlmICghcmVzdWx0SW1hZ2UpCiAgICAgICAgIHJl
dHVybjsKIAogICAgIEludFJlY3QgZWZmZWN0QURyYXdpbmdSZWN0ID0gcmVxdWVzdGVkUmVnaW9u
T2ZJbnB1dEltYWdlRGF0YShpbi0+YWJzb2x1dGVQYWludFJlY3QoKSk7Ci0gICAgUmVmUHRyPElt
YWdlRGF0YT4gc3JjSW1hZ2VEYXRhQSA9IGluLT5yZXN1bHRJbWFnZSgpLT5nZXRQcmVtdWx0aXBs
aWVkSW1hZ2VEYXRhKGVmZmVjdEFEcmF3aW5nUmVjdCk7CisgICAgUmVmUHRyPEltYWdlRGF0YT4g
c3JjSW1hZ2VEYXRhQSA9IGluLT5hc1ByZW11bHRpcGxpZWRJbWFnZShlZmZlY3RBRHJhd2luZ1Jl
Y3QpOwogICAgIEJ5dGVBcnJheSogc3JjUGl4ZWxBcnJheUEgPSBzcmNJbWFnZURhdGFBLT5kYXRh
KCktPmRhdGEoKTsKIAogICAgIEludFJlY3QgZWZmZWN0QkRyYXdpbmdSZWN0ID0gcmVxdWVzdGVk
UmVnaW9uT2ZJbnB1dEltYWdlRGF0YShpbjItPmFic29sdXRlUGFpbnRSZWN0KCkpOwotICAgIFJl
ZlB0cjxJbWFnZURhdGE+IHNyY0ltYWdlRGF0YUIgPSBpbjItPnJlc3VsdEltYWdlKCktPmdldFBy
ZW11bHRpcGxpZWRJbWFnZURhdGEoZWZmZWN0QkRyYXdpbmdSZWN0KTsKKyAgICBSZWZQdHI8SW1h
Z2VEYXRhPiBzcmNJbWFnZURhdGFCID0gaW4yLT5hc1ByZW11bHRpcGxpZWRJbWFnZShlZmZlY3RC
RHJhd2luZ1JlY3QpOwogICAgIEJ5dGVBcnJheSogc3JjUGl4ZWxBcnJheUIgPSBzcmNJbWFnZURh
dGFCLT5kYXRhKCktPmRhdGEoKTsKIAotICAgIEludFJlY3QgaW1hZ2VSZWN0KEludFBvaW50KCks
IHJlc3VsdEltYWdlKCktPnNpemUoKSk7Ci0gICAgUmVmUHRyPEltYWdlRGF0YT4gaW1hZ2VEYXRh
ID0gSW1hZ2VEYXRhOjpjcmVhdGUoaW1hZ2VSZWN0LndpZHRoKCksIGltYWdlUmVjdC5oZWlnaHQo
KSk7Ci0gICAgQnl0ZUFycmF5KiBkc3RQaXhlbEFycmF5ID0gaW1hZ2VEYXRhLT5kYXRhKCktPmRh
dGEoKTsKKyAgICBCeXRlQXJyYXkqIGRzdFBpeGVsQXJyYXkgPSByZXN1bHRJbWFnZS0+ZGF0YSgp
LT5kYXRhKCk7CiAKICAgICAvLyBLZWVwIHN5bmNocm9uaXplZCB3aXRoIEJsZW5kTW9kZVR5cGUK
ICAgICBzdGF0aWMgY29uc3QgQmxlbmRUeXBlIGNhbGxFZmZlY3RbXSA9IHt1bmtub3duLCBub3Jt
YWwsIG11bHRpcGx5LCBzY3JlZW4sIGRhcmtlbiwgbGlnaHRlbn07CkBAIC0xMzEsOCArMTMwLDYg
QEAgdm9pZCBGRUJsZW5kOjphcHBseSgpCiAgICAgICAgIHVuc2lnbmVkIGNoYXIgYWxwaGFSID0g
MjU1IC0gKCgyNTUgLSBhbHBoYUEpICogKDI1NSAtIGFscGhhQikpIC8gMjU1OwogICAgICAgICBk
c3RQaXhlbEFycmF5LT5zZXQocGl4ZWxPZmZzZXQgKyAzLCBhbHBoYVIpOwogICAgIH0KLQotICAg
IHJlc3VsdEltYWdlKCktPnB1dFByZW11bHRpcGxpZWRJbWFnZURhdGEoaW1hZ2VEYXRhLmdldCgp
LCBpbWFnZVJlY3QsIEludFBvaW50KCkpOwogfQogCiB2b2lkIEZFQmxlbmQ6OmR1bXAoKQpkaWZm
IC0tZ2l0IGEvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29sb3JNYXRyaXgu
Y3BwIGIvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29sb3JNYXRyaXguY3Bw
CmluZGV4IDFjOTliMWUuLjRjNWEwYjggMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvZmlsdGVycy9GRUNvbG9yTWF0cml4LmNwcAorKysgYi9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2ZpbHRlcnMvRkVDb2xvck1hdHJpeC5jcHAKQEAgLTE1MiwxNyArMTUyLDE3IEBAIHZv
aWQgRkVDb2xvck1hdHJpeDo6YXBwbHkoKQogewogICAgIEZpbHRlckVmZmVjdCogaW4gPSBpbnB1
dEVmZmVjdCgwKTsKICAgICBpbi0+YXBwbHkoKTsKLSAgICBpZiAoIWluLT5yZXN1bHRJbWFnZSgp
KQorICAgIGlmICghaW4tPmhhc1Jlc3VsdCgpKQogICAgICAgICByZXR1cm47CiAKLSAgICBHcmFw
aGljc0NvbnRleHQqIGZpbHRlckNvbnRleHQgPSBlZmZlY3RDb250ZXh0KCk7Ci0gICAgaWYgKCFm
aWx0ZXJDb250ZXh0KQorICAgIEltYWdlQnVmZmVyKiByZXN1bHRJbWFnZSA9IGNyZWF0ZUltYWdl
QnVmZmVyUmVzdWx0KCk7CisgICAgaWYgKCFyZXN1bHRJbWFnZSkKICAgICAgICAgcmV0dXJuOwog
Ci0gICAgZmlsdGVyQ29udGV4dC0+ZHJhd0ltYWdlQnVmZmVyKGluLT5yZXN1bHRJbWFnZSgpLCBD
b2xvclNwYWNlRGV2aWNlUkdCLCBkcmF3aW5nUmVnaW9uT2ZJbnB1dEltYWdlKGluLT5hYnNvbHV0
ZVBhaW50UmVjdCgpKSk7CisgICAgcmVzdWx0SW1hZ2UtPmNvbnRleHQoKS0+ZHJhd0ltYWdlQnVm
ZmVyKGluLT5hc0ltYWdlQnVmZmVyKCksIENvbG9yU3BhY2VEZXZpY2VSR0IsIGRyYXdpbmdSZWdp
b25PZklucHV0SW1hZ2UoaW4tPmFic29sdXRlUGFpbnRSZWN0KCkpKTsKIAotICAgIEludFJlY3Qg
aW1hZ2VSZWN0KEludFBvaW50KCksIHJlc3VsdEltYWdlKCktPnNpemUoKSk7Ci0gICAgUmVmUHRy
PEltYWdlRGF0YT4gaW1hZ2VEYXRhID0gcmVzdWx0SW1hZ2UoKS0+Z2V0VW5tdWx0aXBsaWVkSW1h
Z2VEYXRhKGltYWdlUmVjdCk7CisgICAgSW50UmVjdCBpbWFnZVJlY3QoSW50UG9pbnQoKSwgYWJz
b2x1dGVQYWludFJlY3QoKS5zaXplKCkpOworICAgIFJlZlB0cjxJbWFnZURhdGE+IGltYWdlRGF0
YSA9IHJlc3VsdEltYWdlLT5nZXRVbm11bHRpcGxpZWRJbWFnZURhdGEoaW1hZ2VSZWN0KTsKICAg
ICBCeXRlQXJyYXkqIHBpeGVsQXJyYXkgPSBpbWFnZURhdGEtPmRhdGEoKS0+ZGF0YSgpOwogCiAg
ICAgc3dpdGNoIChtX3R5cGUpIHsKQEAgLTE4Myw3ICsxODMsNyBAQCB2b2lkIEZFQ29sb3JNYXRy
aXg6OmFwcGx5KCkKICAgICAgICAgICAgIGJyZWFrOwogICAgIH0KIAotICAgIHJlc3VsdEltYWdl
KCktPnB1dFVubXVsdGlwbGllZEltYWdlRGF0YShpbWFnZURhdGEuZ2V0KCksIGltYWdlUmVjdCwg
SW50UG9pbnQoKSk7CisgICAgcmVzdWx0SW1hZ2UtPnB1dFVubXVsdGlwbGllZEltYWdlRGF0YShp
bWFnZURhdGEuZ2V0KCksIGltYWdlUmVjdCwgSW50UG9pbnQoKSk7CiB9CiAKIHZvaWQgRkVDb2xv
ck1hdHJpeDo6ZHVtcCgpCmRpZmYgLS1naXQgYS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Zp
bHRlcnMvRkVDb21wb25lbnRUcmFuc2Zlci5jcHAgYi9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2ZpbHRlcnMvRkVDb21wb25lbnRUcmFuc2Zlci5jcHAKaW5kZXggY2ZhYjUwYi4uOTczNGQ3YSAx
MDA2NDQKLS0tIGEvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29tcG9uZW50
VHJhbnNmZXIuY3BwCisrKyBiL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUNv
bXBvbmVudFRyYW5zZmVyLmNwcApAQCAtMTUxLDEwICsxNTEsMTEgQEAgdm9pZCBGRUNvbXBvbmVu
dFRyYW5zZmVyOjphcHBseSgpCiB7CiAgICAgRmlsdGVyRWZmZWN0KiBpbiA9IGlucHV0RWZmZWN0
KDApOwogICAgIGluLT5hcHBseSgpOwotICAgIGlmICghaW4tPnJlc3VsdEltYWdlKCkpCisgICAg
aWYgKCFpbi0+aGFzUmVzdWx0KCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIGlmICghZWZmZWN0
Q29udGV4dCgpKQorICAgIEltYWdlRGF0YSogaW1hZ2VEYXRhID0gY3JlYXRlVW5tdWx0aXBsaWVk
SW1hZ2VSZXN1bHQoKTsKKyAgICBpZiAoIWltYWdlRGF0YSkKICAgICAgICAgcmV0dXJuOwogCiAg
ICAgdW5zaWduZWQgY2hhciByVmFsdWVzWzI1Nl0sIGdWYWx1ZXNbMjU2XSwgYlZhbHVlc1syNTZd
LCBhVmFsdWVzWzI1Nl07CkBAIC0xNjgsNyArMTY5LDcgQEAgdm9pZCBGRUNvbXBvbmVudFRyYW5z
ZmVyOjphcHBseSgpCiAgICAgICAgICgqY2FsbEVmZmVjdFt0cmFuc2ZlckZ1bmN0aW9uW2NoYW5u
ZWxdLnR5cGVdKSh0YWJsZXNbY2hhbm5lbF0sIHRyYW5zZmVyRnVuY3Rpb25bY2hhbm5lbF0pOwog
CiAgICAgSW50UmVjdCBkcmF3aW5nUmVjdCA9IHJlcXVlc3RlZFJlZ2lvbk9mSW5wdXRJbWFnZURh
dGEoaW4tPmFic29sdXRlUGFpbnRSZWN0KCkpOwotICAgIFJlZlB0cjxJbWFnZURhdGE+IGltYWdl
RGF0YSA9IGluLT5yZXN1bHRJbWFnZSgpLT5nZXRVbm11bHRpcGxpZWRJbWFnZURhdGEoZHJhd2lu
Z1JlY3QpOworICAgIGluLT5hc1VubXVsdGlwbGllZEltYWdlKGltYWdlRGF0YSwgZHJhd2luZ1Jl
Y3QpOwogICAgIEJ5dGVBcnJheSogcGl4ZWxBcnJheSA9IGltYWdlRGF0YS0+ZGF0YSgpLT5kYXRh
KCk7CiAKICAgICB1bnNpZ25lZCBwaXhlbEFycmF5TGVuZ3RoID0gcGl4ZWxBcnJheS0+bGVuZ3Ro
KCk7CkBAIC0xNzgsOCArMTc5LDYgQEAgdm9pZCBGRUNvbXBvbmVudFRyYW5zZmVyOjphcHBseSgp
CiAgICAgICAgICAgICBwaXhlbEFycmF5LT5zZXQocGl4ZWxPZmZzZXQgKyBjaGFubmVsLCB0YWJs
ZXNbY2hhbm5lbF1bY10pOwogICAgICAgICB9CiAgICAgfQotCi0gICAgcmVzdWx0SW1hZ2UoKS0+
cHV0VW5tdWx0aXBsaWVkSW1hZ2VEYXRhKGltYWdlRGF0YS5nZXQoKSwgSW50UmVjdChJbnRQb2lu
dCgpLCByZXN1bHRJbWFnZSgpLT5zaXplKCkpLCBJbnRQb2ludCgpKTsKIH0KIAogdm9pZCBGRUNv
bXBvbmVudFRyYW5zZmVyOjpkdW1wKCkKZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvZmlsdGVycy9GRUNvbXBvc2l0ZS5jcHAgYi9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2ZpbHRlcnMvRkVDb21wb3NpdGUuY3BwCmluZGV4IGQyNzMyMWYuLmM1MDU4NWYgMTAwNjQ0Ci0t
LSBhL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUNvbXBvc2l0ZS5jcHAKKysr
IGIvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29tcG9zaXRlLmNwcApAQCAt
MTQxLDQ4ICsxNDEsNDkgQEAgdm9pZCBGRUNvbXBvc2l0ZTo6YXBwbHkoKQogICAgIEZpbHRlckVm
ZmVjdCogaW4yID0gaW5wdXRFZmZlY3QoMSk7CiAgICAgaW4tPmFwcGx5KCk7CiAgICAgaW4yLT5h
cHBseSgpOwotICAgIGlmICghaW4tPnJlc3VsdEltYWdlKCkgfHwgIWluMi0+cmVzdWx0SW1hZ2Uo
KSkKKyAgICBpZiAoIWluLT5oYXNSZXN1bHQoKSB8fCAhaW4yLT5oYXNSZXN1bHQoKSkKICAgICAg
ICAgcmV0dXJuOwogCi0gICAgR3JhcGhpY3NDb250ZXh0KiBmaWx0ZXJDb250ZXh0ID0gZWZmZWN0
Q29udGV4dCgpOwotICAgIGlmICghZmlsdGVyQ29udGV4dCkKKyAgICBJbWFnZUJ1ZmZlciogcmVz
dWx0SW1hZ2UgPSBjcmVhdGVJbWFnZUJ1ZmZlclJlc3VsdCgpOworICAgIGlmICghcmVzdWx0SW1h
Z2UpCiAgICAgICAgIHJldHVybjsKKyAgICBHcmFwaGljc0NvbnRleHQqIGZpbHRlckNvbnRleHQg
PSByZXN1bHRJbWFnZS0+Y29udGV4dCgpOwogCiAgICAgRmxvYXRSZWN0IHNyY1JlY3QgPSBGbG9h
dFJlY3QoMCwgMCwgLTEsIC0xKTsKICAgICBzd2l0Y2ggKG1fdHlwZSkgewogICAgIGNhc2UgRkVD
T01QT1NJVEVfT1BFUkFUT1JfT1ZFUjoKLSAgICAgICAgZmlsdGVyQ29udGV4dC0+ZHJhd0ltYWdl
QnVmZmVyKGluMi0+cmVzdWx0SW1hZ2UoKSwgQ29sb3JTcGFjZURldmljZVJHQiwgZHJhd2luZ1Jl
Z2lvbk9mSW5wdXRJbWFnZShpbjItPmFic29sdXRlUGFpbnRSZWN0KCkpKTsKLSAgICAgICAgZmls
dGVyQ29udGV4dC0+ZHJhd0ltYWdlQnVmZmVyKGluLT5yZXN1bHRJbWFnZSgpLCBDb2xvclNwYWNl
RGV2aWNlUkdCLCBkcmF3aW5nUmVnaW9uT2ZJbnB1dEltYWdlKGluLT5hYnNvbHV0ZVBhaW50UmVj
dCgpKSk7CisgICAgICAgIGZpbHRlckNvbnRleHQtPmRyYXdJbWFnZUJ1ZmZlcihpbjItPmFzSW1h
Z2VCdWZmZXIoKSwgQ29sb3JTcGFjZURldmljZVJHQiwgZHJhd2luZ1JlZ2lvbk9mSW5wdXRJbWFn
ZShpbjItPmFic29sdXRlUGFpbnRSZWN0KCkpKTsKKyAgICAgICAgZmlsdGVyQ29udGV4dC0+ZHJh
d0ltYWdlQnVmZmVyKGluLT5hc0ltYWdlQnVmZmVyKCksIENvbG9yU3BhY2VEZXZpY2VSR0IsIGRy
YXdpbmdSZWdpb25PZklucHV0SW1hZ2UoaW4tPmFic29sdXRlUGFpbnRSZWN0KCkpKTsKICAgICAg
ICAgYnJlYWs7CiAgICAgY2FzZSBGRUNPTVBPU0lURV9PUEVSQVRPUl9JTjoKICAgICAgICAgZmls
dGVyQ29udGV4dC0+c2F2ZSgpOwotICAgICAgICBmaWx0ZXJDb250ZXh0LT5jbGlwVG9JbWFnZUJ1
ZmZlcihpbjItPnJlc3VsdEltYWdlKCksIGRyYXdpbmdSZWdpb25PZklucHV0SW1hZ2UoaW4yLT5h
YnNvbHV0ZVBhaW50UmVjdCgpKSk7Ci0gICAgICAgIGZpbHRlckNvbnRleHQtPmRyYXdJbWFnZUJ1
ZmZlcihpbi0+cmVzdWx0SW1hZ2UoKSwgQ29sb3JTcGFjZURldmljZVJHQiwgZHJhd2luZ1JlZ2lv
bk9mSW5wdXRJbWFnZShpbi0+YWJzb2x1dGVQYWludFJlY3QoKSkpOworICAgICAgICBmaWx0ZXJD
b250ZXh0LT5jbGlwVG9JbWFnZUJ1ZmZlcihpbjItPmFzSW1hZ2VCdWZmZXIoKSwgZHJhd2luZ1Jl
Z2lvbk9mSW5wdXRJbWFnZShpbjItPmFic29sdXRlUGFpbnRSZWN0KCkpKTsKKyAgICAgICAgZmls
dGVyQ29udGV4dC0+ZHJhd0ltYWdlQnVmZmVyKGluLT5hc0ltYWdlQnVmZmVyKCksIENvbG9yU3Bh
Y2VEZXZpY2VSR0IsIGRyYXdpbmdSZWdpb25PZklucHV0SW1hZ2UoaW4tPmFic29sdXRlUGFpbnRS
ZWN0KCkpKTsKICAgICAgICAgZmlsdGVyQ29udGV4dC0+cmVzdG9yZSgpOwogICAgICAgICBicmVh
azsKICAgICBjYXNlIEZFQ09NUE9TSVRFX09QRVJBVE9SX09VVDoKLSAgICAgICAgZmlsdGVyQ29u
dGV4dC0+ZHJhd0ltYWdlQnVmZmVyKGluLT5yZXN1bHRJbWFnZSgpLCBDb2xvclNwYWNlRGV2aWNl
UkdCLCBkcmF3aW5nUmVnaW9uT2ZJbnB1dEltYWdlKGluLT5hYnNvbHV0ZVBhaW50UmVjdCgpKSk7
Ci0gICAgICAgIGZpbHRlckNvbnRleHQtPmRyYXdJbWFnZUJ1ZmZlcihpbjItPnJlc3VsdEltYWdl
KCksIENvbG9yU3BhY2VEZXZpY2VSR0IsIGRyYXdpbmdSZWdpb25PZklucHV0SW1hZ2UoaW4yLT5h
YnNvbHV0ZVBhaW50UmVjdCgpKSwgc3JjUmVjdCwgQ29tcG9zaXRlRGVzdGluYXRpb25PdXQpOwor
ICAgICAgICBmaWx0ZXJDb250ZXh0LT5kcmF3SW1hZ2VCdWZmZXIoaW4tPmFzSW1hZ2VCdWZmZXIo
KSwgQ29sb3JTcGFjZURldmljZVJHQiwgZHJhd2luZ1JlZ2lvbk9mSW5wdXRJbWFnZShpbi0+YWJz
b2x1dGVQYWludFJlY3QoKSkpOworICAgICAgICBmaWx0ZXJDb250ZXh0LT5kcmF3SW1hZ2VCdWZm
ZXIoaW4yLT5hc0ltYWdlQnVmZmVyKCksIENvbG9yU3BhY2VEZXZpY2VSR0IsIGRyYXdpbmdSZWdp
b25PZklucHV0SW1hZ2UoaW4yLT5hYnNvbHV0ZVBhaW50UmVjdCgpKSwgc3JjUmVjdCwgQ29tcG9z
aXRlRGVzdGluYXRpb25PdXQpOwogICAgICAgICBicmVhazsKICAgICBjYXNlIEZFQ09NUE9TSVRF
X09QRVJBVE9SX0FUT1A6Ci0gICAgICAgIGZpbHRlckNvbnRleHQtPmRyYXdJbWFnZUJ1ZmZlcihp
bjItPnJlc3VsdEltYWdlKCksIENvbG9yU3BhY2VEZXZpY2VSR0IsIGRyYXdpbmdSZWdpb25PZklu
cHV0SW1hZ2UoaW4yLT5hYnNvbHV0ZVBhaW50UmVjdCgpKSk7Ci0gICAgICAgIGZpbHRlckNvbnRl
eHQtPmRyYXdJbWFnZUJ1ZmZlcihpbi0+cmVzdWx0SW1hZ2UoKSwgQ29sb3JTcGFjZURldmljZVJH
QiwgZHJhd2luZ1JlZ2lvbk9mSW5wdXRJbWFnZShpbi0+YWJzb2x1dGVQYWludFJlY3QoKSksIHNy
Y1JlY3QsIENvbXBvc2l0ZVNvdXJjZUF0b3ApOworICAgICAgICBmaWx0ZXJDb250ZXh0LT5kcmF3
SW1hZ2VCdWZmZXIoaW4yLT5hc0ltYWdlQnVmZmVyKCksIENvbG9yU3BhY2VEZXZpY2VSR0IsIGRy
YXdpbmdSZWdpb25PZklucHV0SW1hZ2UoaW4yLT5hYnNvbHV0ZVBhaW50UmVjdCgpKSk7CisgICAg
ICAgIGZpbHRlckNvbnRleHQtPmRyYXdJbWFnZUJ1ZmZlcihpbi0+YXNJbWFnZUJ1ZmZlcigpLCBD
b2xvclNwYWNlRGV2aWNlUkdCLCBkcmF3aW5nUmVnaW9uT2ZJbnB1dEltYWdlKGluLT5hYnNvbHV0
ZVBhaW50UmVjdCgpKSwgc3JjUmVjdCwgQ29tcG9zaXRlU291cmNlQXRvcCk7CiAgICAgICAgIGJy
ZWFrOwogICAgIGNhc2UgRkVDT01QT1NJVEVfT1BFUkFUT1JfWE9SOgotICAgICAgICBmaWx0ZXJD
b250ZXh0LT5kcmF3SW1hZ2VCdWZmZXIoaW4yLT5yZXN1bHRJbWFnZSgpLCBDb2xvclNwYWNlRGV2
aWNlUkdCLCBkcmF3aW5nUmVnaW9uT2ZJbnB1dEltYWdlKGluMi0+YWJzb2x1dGVQYWludFJlY3Qo
KSkpOwotICAgICAgICBmaWx0ZXJDb250ZXh0LT5kcmF3SW1hZ2VCdWZmZXIoaW4tPnJlc3VsdElt
YWdlKCksIENvbG9yU3BhY2VEZXZpY2VSR0IsIGRyYXdpbmdSZWdpb25PZklucHV0SW1hZ2UoaW4t
PmFic29sdXRlUGFpbnRSZWN0KCkpLCBzcmNSZWN0LCBDb21wb3NpdGVYT1IpOworICAgICAgICBm
aWx0ZXJDb250ZXh0LT5kcmF3SW1hZ2VCdWZmZXIoaW4yLT5hc0ltYWdlQnVmZmVyKCksIENvbG9y
U3BhY2VEZXZpY2VSR0IsIGRyYXdpbmdSZWdpb25PZklucHV0SW1hZ2UoaW4yLT5hYnNvbHV0ZVBh
aW50UmVjdCgpKSk7CisgICAgICAgIGZpbHRlckNvbnRleHQtPmRyYXdJbWFnZUJ1ZmZlcihpbi0+
YXNJbWFnZUJ1ZmZlcigpLCBDb2xvclNwYWNlRGV2aWNlUkdCLCBkcmF3aW5nUmVnaW9uT2ZJbnB1
dEltYWdlKGluLT5hYnNvbHV0ZVBhaW50UmVjdCgpKSwgc3JjUmVjdCwgQ29tcG9zaXRlWE9SKTsK
ICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBGRUNPTVBPU0lURV9PUEVSQVRPUl9BUklUSE1FVElD
OiB7CiAgICAgICAgIEludFJlY3QgZWZmZWN0QURyYXdpbmdSZWN0ID0gcmVxdWVzdGVkUmVnaW9u
T2ZJbnB1dEltYWdlRGF0YShpbi0+YWJzb2x1dGVQYWludFJlY3QoKSk7Ci0gICAgICAgIFJlZlB0
cjxJbWFnZURhdGE+IHNyY0ltYWdlRGF0YSA9IGluLT5yZXN1bHRJbWFnZSgpLT5nZXRQcmVtdWx0
aXBsaWVkSW1hZ2VEYXRhKGVmZmVjdEFEcmF3aW5nUmVjdCk7CisgICAgICAgIFJlZlB0cjxJbWFn
ZURhdGE+IHNyY0ltYWdlRGF0YSA9IGluLT5hc0ltYWdlQnVmZmVyKCktPmdldFByZW11bHRpcGxp
ZWRJbWFnZURhdGEoZWZmZWN0QURyYXdpbmdSZWN0KTsKICAgICAgICAgQnl0ZUFycmF5KiBzcmNQ
aXhlbEFycmF5QSA9IHNyY0ltYWdlRGF0YS0+ZGF0YSgpLT5kYXRhKCk7CiAKICAgICAgICAgSW50
UmVjdCBlZmZlY3RCRHJhd2luZ1JlY3QgPSByZXF1ZXN0ZWRSZWdpb25PZklucHV0SW1hZ2VEYXRh
KGluMi0+YWJzb2x1dGVQYWludFJlY3QoKSk7Ci0gICAgICAgIFJlZlB0cjxJbWFnZURhdGE+IGlt
YWdlRGF0YSA9IGluMi0+cmVzdWx0SW1hZ2UoKS0+Z2V0UHJlbXVsdGlwbGllZEltYWdlRGF0YShl
ZmZlY3RCRHJhd2luZ1JlY3QpOworICAgICAgICBSZWZQdHI8SW1hZ2VEYXRhPiBpbWFnZURhdGEg
PSBpbjItPmFzSW1hZ2VCdWZmZXIoKS0+Z2V0UHJlbXVsdGlwbGllZEltYWdlRGF0YShlZmZlY3RC
RHJhd2luZ1JlY3QpOwogICAgICAgICBCeXRlQXJyYXkqIHNyY1BpeGVsQXJyYXlCID0gaW1hZ2VE
YXRhLT5kYXRhKCktPmRhdGEoKTsKIAogICAgICAgICBhcml0aG1ldGljKHNyY1BpeGVsQXJyYXlB
LCBzcmNQaXhlbEFycmF5QiwgbV9rMSwgbV9rMiwgbV9rMywgbV9rNCk7Ci0gICAgICAgIHJlc3Vs
dEltYWdlKCktPnB1dFByZW11bHRpcGxpZWRJbWFnZURhdGEoaW1hZ2VEYXRhLmdldCgpLCBJbnRS
ZWN0KEludFBvaW50KCksIHJlc3VsdEltYWdlKCktPnNpemUoKSksIEludFBvaW50KCkpOworICAg
ICAgICByZXN1bHRJbWFnZS0+cHV0UHJlbXVsdGlwbGllZEltYWdlRGF0YShpbWFnZURhdGEuZ2V0
KCksIEludFJlY3QoSW50UG9pbnQoKSwgcmVzdWx0SW1hZ2UtPnNpemUoKSksIEludFBvaW50KCkp
OwogICAgICAgICB9CiAgICAgICAgIGJyZWFrOwogICAgIGRlZmF1bHQ6CmRpZmYgLS1naXQgYS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDb252b2x2ZU1hdHJpeC5jcHAgYi9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDb252b2x2ZU1hdHJpeC5jcHAKaW5k
ZXggMTk4ZDc2NC4uZWU3MjlmNCAxMDA2NDQKLS0tIGEvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9maWx0ZXJzL0ZFQ29udm9sdmVNYXRyaXguY3BwCisrKyBiL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvZmlsdGVycy9GRUNvbnZvbHZlTWF0cml4LmNwcApAQCAtMzc0LDMzICszNzQsMzYgQEAg
dm9pZCBGRUNvbnZvbHZlTWF0cml4OjphcHBseSgpCiB7CiAgICAgRmlsdGVyRWZmZWN0KiBpbiA9
IGlucHV0RWZmZWN0KDApOwogICAgIGluLT5hcHBseSgpOwotICAgIGlmICghaW4tPnJlc3VsdElt
YWdlKCkpCisgICAgaWYgKCFpbi0+aGFzUmVzdWx0KCkpCiAgICAgICAgIHJldHVybjsKIAotICAg
IGlmICghZWZmZWN0Q29udGV4dCgpKQorICAgIEltYWdlRGF0YSogcmVzdWx0SW1hZ2U7CisgICAg
aWYgKG1fcHJlc2VydmVBbHBoYSkKKyAgICAgICAgcmVzdWx0SW1hZ2UgPSBjcmVhdGVVbm11bHRp
cGxpZWRJbWFnZVJlc3VsdCgpOworICAgIGVsc2UKKyAgICAgICAgcmVzdWx0SW1hZ2UgPSBjcmVh
dGVQcmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQoKTsKKyAgICBpZiAoIXJlc3VsdEltYWdlKQogICAg
ICAgICByZXR1cm47CiAKLSAgICBJbnRSZWN0IGltYWdlUmVjdChJbnRQb2ludCgpLCByZXN1bHRJ
bWFnZSgpLT5zaXplKCkpOwogICAgIEludFJlY3QgZWZmZWN0RHJhd2luZ1JlY3QgPSByZXF1ZXN0
ZWRSZWdpb25PZklucHV0SW1hZ2VEYXRhKGluLT5hYnNvbHV0ZVBhaW50UmVjdCgpKTsKIAogICAg
IFJlZlB0cjxDYW52YXNQaXhlbEFycmF5PiBzcmNQaXhlbEFycmF5OwogICAgIGlmIChtX3ByZXNl
cnZlQWxwaGEpCi0gICAgICAgIHNyY1BpeGVsQXJyYXkgPSBpbi0+cmVzdWx0SW1hZ2UoKS0+Z2V0
VW5tdWx0aXBsaWVkSW1hZ2VEYXRhKGVmZmVjdERyYXdpbmdSZWN0KS0+ZGF0YSgpOworICAgICAg
ICBzcmNQaXhlbEFycmF5ID0gaW4tPmFzVW5tdWx0aXBsaWVkSW1hZ2UoZWZmZWN0RHJhd2luZ1Jl
Y3QpLT5kYXRhKCk7CiAgICAgZWxzZQotICAgICAgICBzcmNQaXhlbEFycmF5ID0gaW4tPnJlc3Vs
dEltYWdlKCktPmdldFByZW11bHRpcGxpZWRJbWFnZURhdGEoZWZmZWN0RHJhd2luZ1JlY3QpLT5k
YXRhKCk7Ci0KLSAgICBSZWZQdHI8SW1hZ2VEYXRhPiBpbWFnZURhdGEgPSBJbWFnZURhdGE6OmNy
ZWF0ZShpbWFnZVJlY3Qud2lkdGgoKSwgaW1hZ2VSZWN0LmhlaWdodCgpKTsKKyAgICAgICAgc3Jj
UGl4ZWxBcnJheSA9IGluLT5hc1ByZW11bHRpcGxpZWRJbWFnZShlZmZlY3REcmF3aW5nUmVjdCkt
PmRhdGEoKTsKIAorICAgIEludFNpemUgcGFpbnRTaXplID0gYWJzb2x1dGVQYWludFJlY3QoKS5z
aXplKCk7CiAgICAgUGFpbnRpbmdEYXRhIHBhaW50aW5nRGF0YTsKICAgICBwYWludGluZ0RhdGEu
c3JjUGl4ZWxBcnJheSA9IHNyY1BpeGVsQXJyYXkuZ2V0KCk7Ci0gICAgcGFpbnRpbmdEYXRhLmRz
dFBpeGVsQXJyYXkgPSBpbWFnZURhdGEtPmRhdGEoKTsKLSAgICBwYWludGluZ0RhdGEud2lkdGgg
PSBpbWFnZVJlY3Qud2lkdGgoKTsKLSAgICBwYWludGluZ0RhdGEuaGVpZ2h0ID0gaW1hZ2VSZWN0
LmhlaWdodCgpOworICAgIHBhaW50aW5nRGF0YS5kc3RQaXhlbEFycmF5ID0gcmVzdWx0SW1hZ2Ut
PmRhdGEoKTsKKyAgICBwYWludGluZ0RhdGEud2lkdGggPSBwYWludFNpemUud2lkdGgoKTsKKyAg
ICBwYWludGluZ0RhdGEuaGVpZ2h0ID0gcGFpbnRTaXplLmhlaWdodCgpOwogICAgIHBhaW50aW5n
RGF0YS5iaWFzID0gbV9iaWFzICogMjU1OwogCiAgICAgLy8gRHJhd2luZyBmdWxseSBjb3ZlcmVk
IHBpeGVscwotICAgIGludCBjbGlwUmlnaHQgPSBpbWFnZVJlY3Qud2lkdGgoKSAtIG1fa2VybmVs
U2l6ZS53aWR0aCgpOwotICAgIGludCBjbGlwQm90dG9tID0gaW1hZ2VSZWN0LmhlaWdodCgpIC0g
bV9rZXJuZWxTaXplLmhlaWdodCgpOworICAgIGludCBjbGlwUmlnaHQgPSBwYWludFNpemUud2lk
dGgoKSAtIG1fa2VybmVsU2l6ZS53aWR0aCgpOworICAgIGludCBjbGlwQm90dG9tID0gcGFpbnRT
aXplLmhlaWdodCgpIC0gbV9rZXJuZWxTaXplLmhlaWdodCgpOwogCiAgICAgaWYgKGNsaXBSaWdo
dCA+PSAwICYmIGNsaXBCb3R0b20gPj0gMCkgewogICAgICAgICBzZXRJbnRlcmlvclBpeGVscyhw
YWludGluZ0RhdGEsIGNsaXBSaWdodCwgY2xpcEJvdHRvbSk7CkBAIC00MDgsMjIgKzQxMSwxNyBA
QCB2b2lkIEZFQ29udm9sdmVNYXRyaXg6OmFwcGx5KCkKICAgICAgICAgY2xpcFJpZ2h0ICs9IG1f
dGFyZ2V0T2Zmc2V0LngoKSArIDE7CiAgICAgICAgIGNsaXBCb3R0b20gKz0gbV90YXJnZXRPZmZz
ZXQueSgpICsgMTsKICAgICAgICAgaWYgKG1fdGFyZ2V0T2Zmc2V0LnkoKSA+IDApCi0gICAgICAg
ICAgICBzZXRPdXRlclBpeGVscyhwYWludGluZ0RhdGEsIDAsIDAsIGltYWdlUmVjdC53aWR0aCgp
LCBtX3RhcmdldE9mZnNldC55KCkpOwotICAgICAgICBpZiAoY2xpcEJvdHRvbSA8IGltYWdlUmVj
dC5oZWlnaHQoKSkKLSAgICAgICAgICAgIHNldE91dGVyUGl4ZWxzKHBhaW50aW5nRGF0YSwgMCwg
Y2xpcEJvdHRvbSwgaW1hZ2VSZWN0LndpZHRoKCksIGltYWdlUmVjdC5oZWlnaHQoKSk7CisgICAg
ICAgICAgICBzZXRPdXRlclBpeGVscyhwYWludGluZ0RhdGEsIDAsIDAsIHBhaW50U2l6ZS53aWR0
aCgpLCBtX3RhcmdldE9mZnNldC55KCkpOworICAgICAgICBpZiAoY2xpcEJvdHRvbSA8IHBhaW50
U2l6ZS5oZWlnaHQoKSkKKyAgICAgICAgICAgIHNldE91dGVyUGl4ZWxzKHBhaW50aW5nRGF0YSwg
MCwgY2xpcEJvdHRvbSwgcGFpbnRTaXplLndpZHRoKCksIHBhaW50U2l6ZS5oZWlnaHQoKSk7CiAg
ICAgICAgIGlmIChtX3RhcmdldE9mZnNldC54KCkgPiAwKQogICAgICAgICAgICAgc2V0T3V0ZXJQ
aXhlbHMocGFpbnRpbmdEYXRhLCAwLCBtX3RhcmdldE9mZnNldC55KCksIG1fdGFyZ2V0T2Zmc2V0
LngoKSwgY2xpcEJvdHRvbSk7Ci0gICAgICAgIGlmIChjbGlwUmlnaHQgPCBpbWFnZVJlY3Qud2lk
dGgoKSkKLSAgICAgICAgICAgIHNldE91dGVyUGl4ZWxzKHBhaW50aW5nRGF0YSwgY2xpcFJpZ2h0
LCBtX3RhcmdldE9mZnNldC55KCksIGltYWdlUmVjdC53aWR0aCgpLCBjbGlwQm90dG9tKTsKKyAg
ICAgICAgaWYgKGNsaXBSaWdodCA8IHBhaW50U2l6ZS53aWR0aCgpKQorICAgICAgICAgICAgc2V0
T3V0ZXJQaXhlbHMocGFpbnRpbmdEYXRhLCBjbGlwUmlnaHQsIG1fdGFyZ2V0T2Zmc2V0LnkoKSwg
cGFpbnRTaXplLndpZHRoKCksIGNsaXBCb3R0b20pOwogICAgIH0gZWxzZSB7CiAgICAgICAgIC8v
IFJhcmUgc2l0dWF0aW9uLCBub3Qgb3B0aW1pemllZCBmb3Igc3BlZWQKLSAgICAgICAgc2V0T3V0
ZXJQaXhlbHMocGFpbnRpbmdEYXRhLCAwLCAwLCBpbWFnZVJlY3Qud2lkdGgoKSwgaW1hZ2VSZWN0
LmhlaWdodCgpKTsKKyAgICAgICAgc2V0T3V0ZXJQaXhlbHMocGFpbnRpbmdEYXRhLCAwLCAwLCBw
YWludFNpemUud2lkdGgoKSwgcGFpbnRTaXplLmhlaWdodCgpKTsKICAgICB9Ci0KLSAgICBpZiAo
bV9wcmVzZXJ2ZUFscGhhKQotICAgICAgICByZXN1bHRJbWFnZSgpLT5wdXRVbm11bHRpcGxpZWRJ
bWFnZURhdGEoaW1hZ2VEYXRhLmdldCgpLCBpbWFnZVJlY3QsIEludFBvaW50KCkpOwotICAgIGVs
c2UKLSAgICAgICAgcmVzdWx0SW1hZ2UoKS0+cHV0UHJlbXVsdGlwbGllZEltYWdlRGF0YShpbWFn
ZURhdGEuZ2V0KCksIGltYWdlUmVjdCwgSW50UG9pbnQoKSk7CiB9CiAKIHZvaWQgRkVDb252b2x2
ZU1hdHJpeDo6ZHVtcCgpCmRpZmYgLS1naXQgYS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Zp
bHRlcnMvRkVEaXNwbGFjZW1lbnRNYXAuY3BwIGIvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9m
aWx0ZXJzL0ZFRGlzcGxhY2VtZW50TWFwLmNwcAppbmRleCA1NTMyMWU2Li4xNmJkMDlkIDEwMDY0
NAotLS0gYS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVEaXNwbGFjZW1lbnRN
YXAuY3BwCisrKyBiL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRURpc3BsYWNl
bWVudE1hcC5jcHAKQEAgLTgyLDUzICs4Miw1MSBAQCB2b2lkIEZFRGlzcGxhY2VtZW50TWFwOjph
cHBseSgpCiAgICAgRmlsdGVyRWZmZWN0KiBpbjIgPSBpbnB1dEVmZmVjdCgxKTsKICAgICBpbi0+
YXBwbHkoKTsKICAgICBpbjItPmFwcGx5KCk7Ci0gICAgaWYgKCFpbi0+cmVzdWx0SW1hZ2UoKSB8
fCAhaW4yLT5yZXN1bHRJbWFnZSgpKQorICAgIGlmICghaW4tPmhhc1Jlc3VsdCgpIHx8ICFpbjIt
Pmhhc1Jlc3VsdCgpKQogICAgICAgICByZXR1cm47CiAKICAgICBpZiAobV94Q2hhbm5lbFNlbGVj
dG9yID09IENIQU5ORUxfVU5LTk9XTiB8fCBtX3lDaGFubmVsU2VsZWN0b3IgPT0gQ0hBTk5FTF9V
TktOT1dOKQogICAgICAgICByZXR1cm47CiAKLSAgICBpZiAoIWVmZmVjdENvbnRleHQoKSkKKyAg
ICBJbWFnZURhdGEqIHJlc3VsdEltYWdlID0gY3JlYXRlUHJlbXVsdGlwbGllZEltYWdlUmVzdWx0
KCk7CisgICAgaWYgKCFyZXN1bHRJbWFnZSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgSW50UmVj
dCBlZmZlY3RBRHJhd2luZ1JlY3QgPSByZXF1ZXN0ZWRSZWdpb25PZklucHV0SW1hZ2VEYXRhKGlu
LT5hYnNvbHV0ZVBhaW50UmVjdCgpKTsKLSAgICBSZWZQdHI8SW1hZ2VEYXRhPiBzcmNJbWFnZURh
dGFBID0gaW4tPnJlc3VsdEltYWdlKCktPmdldFByZW11bHRpcGxpZWRJbWFnZURhdGEoZWZmZWN0
QURyYXdpbmdSZWN0KTsKKyAgICBSZWZQdHI8SW1hZ2VEYXRhPiBzcmNJbWFnZURhdGFBID0gaW4t
PmFzUHJlbXVsdGlwbGllZEltYWdlKGVmZmVjdEFEcmF3aW5nUmVjdCk7CiAgICAgQnl0ZUFycmF5
KiBzcmNQaXhlbEFycmF5QSA9IHNyY0ltYWdlRGF0YUEtPmRhdGEoKS0+ZGF0YSgpIDsKIAogICAg
IEludFJlY3QgZWZmZWN0QkRyYXdpbmdSZWN0ID0gcmVxdWVzdGVkUmVnaW9uT2ZJbnB1dEltYWdl
RGF0YShpbjItPmFic29sdXRlUGFpbnRSZWN0KCkpOwotICAgIFJlZlB0cjxJbWFnZURhdGE+IHNy
Y0ltYWdlRGF0YUIgPSBpbjItPnJlc3VsdEltYWdlKCktPmdldFVubXVsdGlwbGllZEltYWdlRGF0
YShlZmZlY3RCRHJhd2luZ1JlY3QpOworICAgIFJlZlB0cjxJbWFnZURhdGE+IHNyY0ltYWdlRGF0
YUIgPSBpbjItPmFzVW5tdWx0aXBsaWVkSW1hZ2UoZWZmZWN0QkRyYXdpbmdSZWN0KTsKICAgICBC
eXRlQXJyYXkqIHNyY1BpeGVsQXJyYXlCID0gc3JjSW1hZ2VEYXRhQi0+ZGF0YSgpLT5kYXRhKCk7
CiAKLSAgICBJbnRSZWN0IGltYWdlUmVjdChJbnRQb2ludCgpLCByZXN1bHRJbWFnZSgpLT5zaXpl
KCkpOwotICAgIFJlZlB0cjxJbWFnZURhdGE+IGltYWdlRGF0YSA9IEltYWdlRGF0YTo6Y3JlYXRl
KGltYWdlUmVjdC53aWR0aCgpLCBpbWFnZVJlY3QuaGVpZ2h0KCkpOwotICAgIEJ5dGVBcnJheSog
ZHN0UGl4ZWxBcnJheSA9IGltYWdlRGF0YS0+ZGF0YSgpLT5kYXRhKCk7CisgICAgQnl0ZUFycmF5
KiBkc3RQaXhlbEFycmF5ID0gcmVzdWx0SW1hZ2UtPmRhdGEoKS0+ZGF0YSgpOwogCiAgICAgQVNT
RVJUKHNyY1BpeGVsQXJyYXlBLT5sZW5ndGgoKSA9PSBzcmNQaXhlbEFycmF5Qi0+bGVuZ3RoKCkp
OwogCiAgICAgRmlsdGVyKiBmaWx0ZXIgPSB0aGlzLT5maWx0ZXIoKTsKKyAgICBJbnRTaXplIHBh
aW50U2l6ZSA9IGFic29sdXRlUGFpbnRSZWN0KCkuc2l6ZSgpOwogICAgIGZsb2F0IHNjYWxlWCA9
IGZpbHRlci0+YXBwbHlIb3Jpem9udGFsU2NhbGUobV9zY2FsZSAvIDI1NSk7CiAgICAgZmxvYXQg
c2NhbGVZID0gZmlsdGVyLT5hcHBseVZlcnRpY2FsU2NhbGUobV9zY2FsZSAvIDI1NSk7CiAgICAg
ZmxvYXQgc2NhbGVBZGp1c3RtZW50WCA9IGZpbHRlci0+YXBwbHlIb3Jpem9udGFsU2NhbGUoMC41
ZiAtIDAuNWYgKiBtX3NjYWxlKTsKICAgICBmbG9hdCBzY2FsZUFkanVzdG1lbnRZID0gZmlsdGVy
LT5hcHBseVZlcnRpY2FsU2NhbGUoMC41ZiAtIDAuNWYgKiBtX3NjYWxlKTsKLSAgICBpbnQgc3Ry
aWRlID0gaW1hZ2VSZWN0LndpZHRoKCkgKiA0OwotICAgIGZvciAoaW50IHkgPSAwOyB5IDwgaW1h
Z2VSZWN0LmhlaWdodCgpOyArK3kpIHsKKyAgICBpbnQgc3RyaWRlID0gcGFpbnRTaXplLndpZHRo
KCkgKiA0OworICAgIGZvciAoaW50IHkgPSAwOyB5IDwgcGFpbnRTaXplLmhlaWdodCgpOyArK3kp
IHsKICAgICAgICAgaW50IGxpbmUgPSB5ICogc3RyaWRlOwotICAgICAgICBmb3IgKGludCB4ID0g
MDsgeCA8IGltYWdlUmVjdC53aWR0aCgpOyArK3gpIHsKKyAgICAgICAgZm9yIChpbnQgeCA9IDA7
IHggPCBwYWludFNpemUud2lkdGgoKTsgKyt4KSB7CiAgICAgICAgICAgICBpbnQgZHN0SW5kZXgg
PSBsaW5lICsgeCAqIDQ7CiAgICAgICAgICAgICBpbnQgc3JjWCA9IHggKyBzdGF0aWNfY2FzdDxp
bnQ+KHNjYWxlWCAqIHNyY1BpeGVsQXJyYXlCLT5nZXQoZHN0SW5kZXggKyBtX3hDaGFubmVsU2Vs
ZWN0b3IgLSAxKSArIHNjYWxlQWRqdXN0bWVudFgpOwogICAgICAgICAgICAgaW50IHNyY1kgPSB5
ICsgc3RhdGljX2Nhc3Q8aW50PihzY2FsZVkgKiBzcmNQaXhlbEFycmF5Qi0+Z2V0KGRzdEluZGV4
ICsgbV95Q2hhbm5lbFNlbGVjdG9yIC0gMSkgKyBzY2FsZUFkanVzdG1lbnRZKTsKICAgICAgICAg
ICAgIGZvciAodW5zaWduZWQgY2hhbm5lbCA9IDA7IGNoYW5uZWwgPCA0OyArK2NoYW5uZWwpIHsK
LSAgICAgICAgICAgICAgICBpZiAoc3JjWCA8IDAgfHwgc3JjWCA+PSBpbWFnZVJlY3Qud2lkdGgo
KSB8fCBzcmNZIDwgMCB8fCBzcmNZID49IGltYWdlUmVjdC5oZWlnaHQoKSkKKyAgICAgICAgICAg
ICAgICBpZiAoc3JjWCA8IDAgfHwgc3JjWCA+PSBwYWludFNpemUud2lkdGgoKSB8fCBzcmNZIDwg
MCB8fCBzcmNZID49IHBhaW50U2l6ZS5oZWlnaHQoKSkKICAgICAgICAgICAgICAgICAgICAgZHN0
UGl4ZWxBcnJheS0+c2V0KGRzdEluZGV4ICsgY2hhbm5lbCwgc3RhdGljX2Nhc3Q8dW5zaWduZWQg
Y2hhcj4oMCkpOwogICAgICAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgICAgICB1
bnNpZ25lZCBjaGFyIHBpeGVsVmFsdWUgPSBzcmNQaXhlbEFycmF5QS0+Z2V0KHNyY1kgKiBzdHJp
ZGUgKyBzcmNYICogNCArIGNoYW5uZWwpOwogICAgICAgICAgICAgICAgICAgICBkc3RQaXhlbEFy
cmF5LT5zZXQoZHN0SW5kZXggKyBjaGFubmVsLCBwaXhlbFZhbHVlKTsKICAgICAgICAgICAgICAg
ICB9CiAgICAgICAgICAgICB9Ci0KICAgICAgICAgfQogICAgIH0KLSAgICByZXN1bHRJbWFnZSgp
LT5wdXRQcmVtdWx0aXBsaWVkSW1hZ2VEYXRhKGltYWdlRGF0YS5nZXQoKSwgaW1hZ2VSZWN0LCBJ
bnRQb2ludCgpKTsKIH0KIAogdm9pZCBGRURpc3BsYWNlbWVudE1hcDo6ZHVtcCgpCmRpZmYgLS1n
aXQgYS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVGbG9vZC5jcHAgYi9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVGbG9vZC5jcHAKaW5kZXggYmM2NzIxYi4u
NTZhOGIyZCAxMDA2NDQKLS0tIGEvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZF
Rmxvb2QuY3BwCisrKyBiL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUZsb29k
LmNwcApAQCAtNjQsMTIgKzY0LDEyIEBAIHZvaWQgRkVGbG9vZDo6c2V0Rmxvb2RPcGFjaXR5KGZs
b2F0IGZsb29kT3BhY2l0eSkKIAogdm9pZCBGRUZsb29kOjphcHBseSgpCiB7Ci0gICAgR3JhcGhp
Y3NDb250ZXh0KiBmaWx0ZXJDb250ZXh0ID0gZWZmZWN0Q29udGV4dCgpOwotICAgIGlmICghZmls
dGVyQ29udGV4dCkKKyAgICBJbWFnZUJ1ZmZlciogcmVzdWx0SW1hZ2UgPSBjcmVhdGVJbWFnZUJ1
ZmZlclJlc3VsdCgpOworICAgIGlmICghcmVzdWx0SW1hZ2UpCiAgICAgICAgIHJldHVybjsKIAog
ICAgIENvbG9yIGNvbG9yID0gY29sb3JXaXRoT3ZlcnJpZGVBbHBoYShmbG9vZENvbG9yKCkucmdi
KCksIGZsb29kT3BhY2l0eSgpKTsKLSAgICBmaWx0ZXJDb250ZXh0LT5maWxsUmVjdChGbG9hdFJl
Y3QoRmxvYXRQb2ludCgpLCBhYnNvbHV0ZVBhaW50UmVjdCgpLnNpemUoKSksIGNvbG9yLCBDb2xv
clNwYWNlRGV2aWNlUkdCKTsKKyAgICByZXN1bHRJbWFnZS0+Y29udGV4dCgpLT5maWxsUmVjdChG
bG9hdFJlY3QoRmxvYXRQb2ludCgpLCBhYnNvbHV0ZVBhaW50UmVjdCgpLnNpemUoKSksIGNvbG9y
LCBDb2xvclNwYWNlRGV2aWNlUkdCKTsKIH0KIAogdm9pZCBGRUZsb29kOjpkdW1wKCkKZGlmZiAt
LWdpdCBhL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUdhdXNzaWFuQmx1ci5j
cHAgYi9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVHYXVzc2lhbkJsdXIuY3Bw
CmluZGV4IDg3NmU0YjMuLjhkMWE1ZTUgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvZmlsdGVycy9GRUdhdXNzaWFuQmx1ci5jcHAKKysrIGIvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9maWx0ZXJzL0ZFR2F1c3NpYW5CbHVyLmNwcApAQCAtMTY2LDMyICsxNjYsMzEgQEAg
dm9pZCBGRUdhdXNzaWFuQmx1cjo6YXBwbHkoKQogewogICAgIEZpbHRlckVmZmVjdCogaW4gPSBp
bnB1dEVmZmVjdCgwKTsKICAgICBpbi0+YXBwbHkoKTsKLSAgICBpZiAoIWluLT5yZXN1bHRJbWFn
ZSgpKQorICAgIGlmICghaW4tPmhhc1Jlc3VsdCgpKQogICAgICAgICByZXR1cm47CiAKLSAgICBp
ZiAoIWVmZmVjdENvbnRleHQoKSkKKyAgICBJbWFnZURhdGEqIHJlc3VsdEltYWdlID0gY3JlYXRl
UHJlbXVsdGlwbGllZEltYWdlUmVzdWx0KCk7CisgICAgaWYgKCFyZXN1bHRJbWFnZSkKICAgICAg
ICAgcmV0dXJuOwogCiAgICAgc2V0SXNBbHBoYUltYWdlKGluLT5pc0FscGhhSW1hZ2UoKSk7CiAK
ICAgICBJbnRSZWN0IGVmZmVjdERyYXdpbmdSZWN0ID0gcmVxdWVzdGVkUmVnaW9uT2ZJbnB1dElt
YWdlRGF0YShpbi0+YWJzb2x1dGVQYWludFJlY3QoKSk7Ci0gICAgUmVmUHRyPEltYWdlRGF0YT4g
c3JjSW1hZ2VEYXRhID0gaW4tPnJlc3VsdEltYWdlKCktPmdldFByZW11bHRpcGxpZWRJbWFnZURh
dGEoZWZmZWN0RHJhd2luZ1JlY3QpOwotICAgIEludFJlY3QgaW1hZ2VSZWN0KEludFBvaW50KCks
IHJlc3VsdEltYWdlKCktPnNpemUoKSk7CisgICAgaW4tPmFzUHJlbXVsdGlwbGllZEltYWdlKHJl
c3VsdEltYWdlLCBlZmZlY3REcmF3aW5nUmVjdCk7CiAKLSAgICBpZiAoIW1fc3RkWCAmJiAhbV9z
dGRZKSB7Ci0gICAgICAgIHJlc3VsdEltYWdlKCktPnB1dFByZW11bHRpcGxpZWRJbWFnZURhdGEo
c3JjSW1hZ2VEYXRhLmdldCgpLCBpbWFnZVJlY3QsIEludFBvaW50KCkpOworICAgIGlmICghbV9z
dGRYICYmICFtX3N0ZFkpCiAgICAgICAgIHJldHVybjsKLSAgICB9CiAKICAgICB1bnNpZ25lZCBr
ZXJuZWxTaXplWCA9IDA7CiAgICAgdW5zaWduZWQga2VybmVsU2l6ZVkgPSAwOwogICAgIGNhbGN1
bGF0ZUtlcm5lbFNpemUoZmlsdGVyKCksIGtlcm5lbFNpemVYLCBrZXJuZWxTaXplWSwgbV9zdGRY
LCBtX3N0ZFkpOwogCi0gICAgQnl0ZUFycmF5KiBzcmNQaXhlbEFycmF5ID0gc3JjSW1hZ2VEYXRh
LT5kYXRhKCktPmRhdGEoKTsKLSAgICBSZWZQdHI8SW1hZ2VEYXRhPiB0bXBJbWFnZURhdGEgPSBJ
bWFnZURhdGE6OmNyZWF0ZShpbWFnZVJlY3Qud2lkdGgoKSwgaW1hZ2VSZWN0LmhlaWdodCgpKTsK
KyAgICBCeXRlQXJyYXkqIHNyY1BpeGVsQXJyYXkgPSByZXN1bHRJbWFnZS0+ZGF0YSgpLT5kYXRh
KCk7CisgICAgUmVmUHRyPEltYWdlRGF0YT4gdG1wSW1hZ2VEYXRhID0gSW1hZ2VEYXRhOjpjcmVh
dGUoYWJzb2x1dGVQYWludFJlY3QoKS53aWR0aCgpLCBhYnNvbHV0ZVBhaW50UmVjdCgpLmhlaWdo
dCgpKTsKICAgICBCeXRlQXJyYXkqIHRtcFBpeGVsQXJyYXkgPSB0bXBJbWFnZURhdGEtPmRhdGEo
KS0+ZGF0YSgpOwogCi0gICAgaW50IHN0cmlkZSA9IDQgKiBpbWFnZVJlY3Qud2lkdGgoKTsKKyAg
ICBJbnRTaXplIHBhaW50U2l6ZSA9IGFic29sdXRlUGFpbnRSZWN0KCkuc2l6ZSgpOworICAgIGlu
dCBzdHJpZGUgPSA0ICogYWJzb2x1dGVQYWludFJlY3QoKS53aWR0aCgpOwogICAgIGludCBkeExl
ZnQgPSAwOwogICAgIGludCBkeFJpZ2h0ID0gMDsKICAgICBpbnQgZHlMZWZ0ID0gMDsKQEAgLTE5
OSw3ICsxOTgsNyBAQCB2b2lkIEZFR2F1c3NpYW5CbHVyOjphcHBseSgpCiAgICAgZm9yIChpbnQg
aSA9IDA7IGkgPCAzOyArK2kpIHsKICAgICAgICAgaWYgKGtlcm5lbFNpemVYKSB7CiAgICAgICAg
ICAgICBrZXJuZWxQb3NpdGlvbihpLCBrZXJuZWxTaXplWCwgZHhMZWZ0LCBkeFJpZ2h0KTsKLSAg
ICAgICAgICAgIGJveEJsdXIoc3JjUGl4ZWxBcnJheSwgdG1wUGl4ZWxBcnJheSwga2VybmVsU2l6
ZVgsIGR4TGVmdCwgZHhSaWdodCwgNCwgc3RyaWRlLCBpbWFnZVJlY3Qud2lkdGgoKSwgaW1hZ2VS
ZWN0LmhlaWdodCgpLCBpc0FscGhhSW1hZ2UoKSk7CisgICAgICAgICAgICBib3hCbHVyKHNyY1Bp
eGVsQXJyYXksIHRtcFBpeGVsQXJyYXksIGtlcm5lbFNpemVYLCBkeExlZnQsIGR4UmlnaHQsIDQs
IHN0cmlkZSwgcGFpbnRTaXplLndpZHRoKCksIHBhaW50U2l6ZS5oZWlnaHQoKSwgaXNBbHBoYUlt
YWdlKCkpOwogICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgQnl0ZUFycmF5KiBhdXhQaXhl
bEFycmF5ID0gdG1wUGl4ZWxBcnJheTsKICAgICAgICAgICAgIHRtcFBpeGVsQXJyYXkgPSBzcmNQ
aXhlbEFycmF5OwpAQCAtMjA4LDE1ICsyMDcsMTMgQEAgdm9pZCBGRUdhdXNzaWFuQmx1cjo6YXBw
bHkoKQogCiAgICAgICAgIGlmIChrZXJuZWxTaXplWSkgewogICAgICAgICAgICAga2VybmVsUG9z
aXRpb24oaSwga2VybmVsU2l6ZVksIGR5TGVmdCwgZHlSaWdodCk7Ci0gICAgICAgICAgICBib3hC
bHVyKHRtcFBpeGVsQXJyYXksIHNyY1BpeGVsQXJyYXksIGtlcm5lbFNpemVZLCBkeUxlZnQsIGR5
UmlnaHQsIHN0cmlkZSwgNCwgaW1hZ2VSZWN0LmhlaWdodCgpLCBpbWFnZVJlY3Qud2lkdGgoKSwg
aXNBbHBoYUltYWdlKCkpOworICAgICAgICAgICAgYm94Qmx1cih0bXBQaXhlbEFycmF5LCBzcmNQ
aXhlbEFycmF5LCBrZXJuZWxTaXplWSwgZHlMZWZ0LCBkeVJpZ2h0LCBzdHJpZGUsIDQsIHBhaW50
U2l6ZS5oZWlnaHQoKSwgcGFpbnRTaXplLndpZHRoKCksIGlzQWxwaGFJbWFnZSgpKTsKICAgICAg
ICAgfSBlbHNlIHsKICAgICAgICAgICAgIEJ5dGVBcnJheSogYXV4UGl4ZWxBcnJheSA9IHRtcFBp
eGVsQXJyYXk7CiAgICAgICAgICAgICB0bXBQaXhlbEFycmF5ID0gc3JjUGl4ZWxBcnJheTsKICAg
ICAgICAgICAgIHNyY1BpeGVsQXJyYXkgPSBhdXhQaXhlbEFycmF5OwogICAgICAgICB9CiAgICAg
fQotCi0gICAgcmVzdWx0SW1hZ2UoKS0+cHV0UHJlbXVsdGlwbGllZEltYWdlRGF0YShzcmNJbWFn
ZURhdGEuZ2V0KCksIGltYWdlUmVjdCwgSW50UG9pbnQoKSk7CiB9CiAKIHZvaWQgRkVHYXVzc2lh
bkJsdXI6OmR1bXAoKQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0
ZXJzL0ZFTGlnaHRpbmcuY3BwIGIvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZF
TGlnaHRpbmcuY3BwCmluZGV4IDgxMjkyMGMuLjYyZTQ5MDkgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUxpZ2h0aW5nLmNwcAorKysgYi9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVMaWdodGluZy5jcHAKQEAgLTMzMywxNyArMzMzLDE4
IEBAIHZvaWQgRkVMaWdodGluZzo6YXBwbHkoKQogewogICAgIEZpbHRlckVmZmVjdCogaW4gPSBp
bnB1dEVmZmVjdCgwKTsKICAgICBpbi0+YXBwbHkoKTsKLSAgICBpZiAoIWluLT5yZXN1bHRJbWFn
ZSgpKQorICAgIGlmICghaW4tPmhhc1Jlc3VsdCgpKQogICAgICAgICByZXR1cm47CiAKLSAgICBp
ZiAoIWVmZmVjdENvbnRleHQoKSkKKyAgICBJbWFnZURhdGEqIHJlc3VsdEltYWdlID0gY3JlYXRl
VW5tdWx0aXBsaWVkSW1hZ2VSZXN1bHQoKTsKKyAgICBpZiAoIXJlc3VsdEltYWdlKQogICAgICAg
ICByZXR1cm47CiAKICAgICBzZXRJc0FscGhhSW1hZ2UoZmFsc2UpOwogCiAgICAgSW50UmVjdCBl
ZmZlY3REcmF3aW5nUmVjdCA9IHJlcXVlc3RlZFJlZ2lvbk9mSW5wdXRJbWFnZURhdGEoaW4tPmFi
c29sdXRlUGFpbnRSZWN0KCkpOwotICAgIFJlZlB0cjxJbWFnZURhdGE+IHNyY0ltYWdlRGF0YSA9
IGluLT5yZXN1bHRJbWFnZSgpLT5nZXRVbm11bHRpcGxpZWRJbWFnZURhdGEoZWZmZWN0RHJhd2lu
Z1JlY3QpOwotICAgIEJ5dGVBcnJheSogc3JjUGl4ZWxBcnJheSA9IHNyY0ltYWdlRGF0YS0+ZGF0
YSgpLT5kYXRhKCk7CisgICAgaW4tPmFzVW5tdWx0aXBsaWVkSW1hZ2UocmVzdWx0SW1hZ2UsIGVm
ZmVjdERyYXdpbmdSZWN0KTsKKyAgICBCeXRlQXJyYXkqIHNyY1BpeGVsQXJyYXkgPSByZXN1bHRJ
bWFnZS0+ZGF0YSgpLT5kYXRhKCk7CiAKICAgICAvLyBGSVhNRTogc3VwcG9ydCBrZXJuZWxVbml0
TGVuZ3RocyBvdGhlciB0aGFuICgxLDEpLiBUaGUgaXNzdWUgaGVyZSBpcyB0aGF0IHRoZSBXMwog
ICAgIC8vIHN0YW5kYXJkIGhhcyBubyB0ZXN0IGNhc2UgZm9yIHRoZW0sIGFuZCBvdGhlciBicm93
c2VycyAobGlrZSBGaXJlZm94KSBoYXMgc3RyYW5nZQpAQCAtMzUxLDggKzM1Miw3IEBAIHZvaWQg
RkVMaWdodGluZzo6YXBwbHkoKQogICAgIC8vIEFueXdheSwgZmVDb252b2x2ZU1hdHJpeCBzaG91
bGQgYWxzbyB1c2UgdGhlIGltcGxlbWVudGF0aW9uCiAKICAgICBJbnRTaXplIGFic29sdXRlUGFp
bnRTaXplID0gYWJzb2x1dGVQYWludFJlY3QoKS5zaXplKCk7Ci0gICAgaWYgKGRyYXdMaWdodGlu
ZyhzcmNQaXhlbEFycmF5LCBhYnNvbHV0ZVBhaW50U2l6ZS53aWR0aCgpLCBhYnNvbHV0ZVBhaW50
U2l6ZS5oZWlnaHQoKSkpCi0gICAgICAgIHJlc3VsdEltYWdlKCktPnB1dFVubXVsdGlwbGllZElt
YWdlRGF0YShzcmNJbWFnZURhdGEuZ2V0KCksIEludFJlY3QoSW50UG9pbnQoKSwgYWJzb2x1dGVQ
YWludFNpemUpLCBJbnRQb2ludCgpKTsKKyAgICBkcmF3TGlnaHRpbmcoc3JjUGl4ZWxBcnJheSwg
YWJzb2x1dGVQYWludFNpemUud2lkdGgoKSwgYWJzb2x1dGVQYWludFNpemUuaGVpZ2h0KCkpOwog
fQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2ZpbHRlcnMvRkVNZXJnZS5jcHAgYi9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2ZpbHRlcnMvRkVNZXJnZS5jcHAKaW5kZXggY2E1M2E4Ni4uMzk3YzY2NiAxMDA2NDQKLS0tIGEv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFTWVyZ2UuY3BwCisrKyBiL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRU1lcmdlLmNwcApAQCAtNDYsMTcgKzQ2LDE4
IEBAIHZvaWQgRkVNZXJnZTo6YXBwbHkoKQogICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBz
aXplOyArK2kpIHsKICAgICAgICAgRmlsdGVyRWZmZWN0KiBpbiA9IGlucHV0RWZmZWN0KGkpOwog
ICAgICAgICBpbi0+YXBwbHkoKTsKLSAgICAgICAgaWYgKCFpbi0+cmVzdWx0SW1hZ2UoKSkKKyAg
ICAgICAgaWYgKCFpbi0+aGFzUmVzdWx0KCkpCiAgICAgICAgICAgICByZXR1cm47CiAgICAgfQog
Ci0gICAgR3JhcGhpY3NDb250ZXh0KiBmaWx0ZXJDb250ZXh0ID0gZWZmZWN0Q29udGV4dCgpOwot
ICAgIGlmICghZmlsdGVyQ29udGV4dCkKKyAgICBJbWFnZUJ1ZmZlciogcmVzdWx0SW1hZ2UgPSBj
cmVhdGVJbWFnZUJ1ZmZlclJlc3VsdCgpOworICAgIGlmICghcmVzdWx0SW1hZ2UpCiAgICAgICAg
IHJldHVybjsKIAorICAgIEdyYXBoaWNzQ29udGV4dCogZmlsdGVyQ29udGV4dCA9IHJlc3VsdElt
YWdlLT5jb250ZXh0KCk7CiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHNpemU7ICsraSkg
ewogICAgICAgICBGaWx0ZXJFZmZlY3QqIGluID0gaW5wdXRFZmZlY3QoaSk7Ci0gICAgICAgIGZp
bHRlckNvbnRleHQtPmRyYXdJbWFnZUJ1ZmZlcihpbi0+cmVzdWx0SW1hZ2UoKSwgQ29sb3JTcGFj
ZURldmljZVJHQiwgZHJhd2luZ1JlZ2lvbk9mSW5wdXRJbWFnZShpbi0+YWJzb2x1dGVQYWludFJl
Y3QoKSkpOworICAgICAgICBmaWx0ZXJDb250ZXh0LT5kcmF3SW1hZ2VCdWZmZXIoaW4tPmFzSW1h
Z2VCdWZmZXIoKSwgQ29sb3JTcGFjZURldmljZVJHQiwgZHJhd2luZ1JlZ2lvbk9mSW5wdXRJbWFn
ZShpbi0+YWJzb2x1dGVQYWludFJlY3QoKSkpOwogICAgIH0KIH0KIApkaWZmIC0tZ2l0IGEvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFTW9ycGhvbG9neS5jcHAgYi9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVNb3JwaG9sb2d5LmNwcAppbmRleCBkZDc2NTlh
Li41MTU4NTBiIDEwMDY0NAotLS0gYS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMv
RkVNb3JwaG9sb2d5LmNwcAorKysgYi9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMv
RkVNb3JwaG9sb2d5LmNwcApAQCAtOTMsMTAgKzkzLDExIEBAIHZvaWQgRkVNb3JwaG9sb2d5Ojph
cHBseSgpCiB7CiAgICAgRmlsdGVyRWZmZWN0KiBpbiA9IGlucHV0RWZmZWN0KDApOwogICAgIGlu
LT5hcHBseSgpOwotICAgIGlmICghaW4tPnJlc3VsdEltYWdlKCkpCisgICAgaWYgKCFpbi0+aGFz
UmVzdWx0KCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIGlmICghZWZmZWN0Q29udGV4dCgpKQor
ICAgIEltYWdlRGF0YSogcmVzdWx0SW1hZ2UgPSBjcmVhdGVQcmVtdWx0aXBsaWVkSW1hZ2VSZXN1
bHQoKTsKKyAgICBpZiAoIXJlc3VsdEltYWdlKQogICAgICAgICByZXR1cm47CiAKICAgICBzZXRJ
c0FscGhhSW1hZ2UoaW4tPmlzQWxwaGFJbWFnZSgpKTsKQEAgLTEwNywxMiArMTA4LDEwIEBAIHZv
aWQgRkVNb3JwaG9sb2d5OjphcHBseSgpCiAgICAgaW50IHJhZGl1c1ggPSBzdGF0aWNfY2FzdDxp
bnQ+KGZsb29yZihmaWx0ZXItPmFwcGx5SG9yaXpvbnRhbFNjYWxlKG1fcmFkaXVzWCkpKTsKICAg
ICBpbnQgcmFkaXVzWSA9IHN0YXRpY19jYXN0PGludD4oZmxvb3JmKGZpbHRlci0+YXBwbHlWZXJ0
aWNhbFNjYWxlKG1fcmFkaXVzWSkpKTsKIAotICAgIEludFJlY3QgaW1hZ2VSZWN0KEludFBvaW50
KCksIHJlc3VsdEltYWdlKCktPnNpemUoKSk7CiAgICAgSW50UmVjdCBlZmZlY3REcmF3aW5nUmVj
dCA9IHJlcXVlc3RlZFJlZ2lvbk9mSW5wdXRJbWFnZURhdGEoaW4tPmFic29sdXRlUGFpbnRSZWN0
KCkpOwotICAgIFJlZlB0cjxJbWFnZURhdGE+IHNyY0ltYWdlRGF0YSA9IGluLT5yZXN1bHRJbWFn
ZSgpLT5nZXRQcmVtdWx0aXBsaWVkSW1hZ2VEYXRhKGVmZmVjdERyYXdpbmdSZWN0KTsKKyAgICBS
ZWZQdHI8SW1hZ2VEYXRhPiBzcmNJbWFnZURhdGEgPSBpbi0+YXNQcmVtdWx0aXBsaWVkSW1hZ2Uo
ZWZmZWN0RHJhd2luZ1JlY3QpOwogICAgIEJ5dGVBcnJheSogc3JjUGl4ZWxBcnJheSA9IHNyY0lt
YWdlRGF0YS0+ZGF0YSgpLT5kYXRhKCk7Ci0gICAgUmVmUHRyPEltYWdlRGF0YT4gaW1hZ2VEYXRh
ID0gSW1hZ2VEYXRhOjpjcmVhdGUoaW1hZ2VSZWN0LndpZHRoKCksIGltYWdlUmVjdC5oZWlnaHQo
KSk7Ci0gICAgQnl0ZUFycmF5KiBkc3RQaXhlbEFycmF5ID0gaW1hZ2VEYXRhLT5kYXRhKCktPmRh
dGEoKTsKKyAgICBCeXRlQXJyYXkqIGRzdFBpeGVsQXJyYXkgPSByZXN1bHRJbWFnZS0+ZGF0YSgp
LT5kYXRhKCk7CiAKICAgICBpbnQgZWZmZWN0V2lkdGggPSBlZmZlY3REcmF3aW5nUmVjdC53aWR0
aCgpICogNDsKICAgICAKQEAgLTE2Miw3ICsxNjEsNiBAQCB2b2lkIEZFTW9ycGhvbG9neTo6YXBw
bHkoKQogICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgfQotICAgIHJlc3VsdEltYWdlKCkt
PnB1dFByZW11bHRpcGxpZWRJbWFnZURhdGEoaW1hZ2VEYXRhLmdldCgpLCBpbWFnZVJlY3QsIElu
dFBvaW50KCkpOwogfQogCiB2b2lkIEZFTW9ycGhvbG9neTo6ZHVtcCgpCmRpZmYgLS1naXQgYS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVPZmZzZXQuY3BwIGIvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFT2Zmc2V0LmNwcAppbmRleCBiNjQwMDU0Li41MmYx
ZGUzIDEwMDY0NAotLS0gYS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVPZmZz
ZXQuY3BwCisrKyBiL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRU9mZnNldC5j
cHAKQEAgLTc2LDExICs3NiwxMSBAQCB2b2lkIEZFT2Zmc2V0OjphcHBseSgpCiB7CiAgICAgRmls
dGVyRWZmZWN0KiBpbiA9IGlucHV0RWZmZWN0KDApOwogICAgIGluLT5hcHBseSgpOwotICAgIGlm
ICghaW4tPnJlc3VsdEltYWdlKCkpCisgICAgaWYgKCFpbi0+aGFzUmVzdWx0KCkpCiAgICAgICAg
IHJldHVybjsKIAotICAgIEdyYXBoaWNzQ29udGV4dCogZmlsdGVyQ29udGV4dCA9IGVmZmVjdENv
bnRleHQoKTsKLSAgICBpZiAoIWZpbHRlckNvbnRleHQpCisgICAgSW1hZ2VCdWZmZXIqIHJlc3Vs
dEltYWdlID0gY3JlYXRlSW1hZ2VCdWZmZXJSZXN1bHQoKTsKKyAgICBpZiAoIXJlc3VsdEltYWdl
KQogICAgICAgICByZXR1cm47CiAKICAgICBzZXRJc0FscGhhSW1hZ2UoaW4tPmlzQWxwaGFJbWFn
ZSgpKTsKQEAgLTg4LDcgKzg4LDcgQEAgdm9pZCBGRU9mZnNldDo6YXBwbHkoKQogICAgIEZsb2F0
UmVjdCBkcmF3aW5nUmVnaW9uID0gZHJhd2luZ1JlZ2lvbk9mSW5wdXRJbWFnZShpbi0+YWJzb2x1
dGVQYWludFJlY3QoKSk7CiAgICAgRmlsdGVyKiBmaWx0ZXIgPSB0aGlzLT5maWx0ZXIoKTsKICAg
ICBkcmF3aW5nUmVnaW9uLm1vdmUoZmlsdGVyLT5hcHBseUhvcml6b250YWxTY2FsZShtX2R4KSwg
ZmlsdGVyLT5hcHBseVZlcnRpY2FsU2NhbGUobV9keSkpOwotICAgIGZpbHRlckNvbnRleHQtPmRy
YXdJbWFnZUJ1ZmZlcihpbi0+cmVzdWx0SW1hZ2UoKSwgQ29sb3JTcGFjZURldmljZVJHQiwgZHJh
d2luZ1JlZ2lvbik7CisgICAgcmVzdWx0SW1hZ2UtPmNvbnRleHQoKS0+ZHJhd0ltYWdlQnVmZmVy
KGluLT5hc0ltYWdlQnVmZmVyKCksIENvbG9yU3BhY2VEZXZpY2VSR0IsIGRyYXdpbmdSZWdpb24p
OwogfQogCiB2b2lkIEZFT2Zmc2V0OjpkdW1wKCkKZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvZmlsdGVycy9GRVRpbGUuY3BwIGIvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9maWx0ZXJzL0ZFVGlsZS5jcHAKaW5kZXggNmIxMTQwMS4uMDE0ZjRmNSAxMDA2NDQKLS0tIGEv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFVGlsZS5jcHAKKysrIGIvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFVGlsZS5jcHAKQEAgLTQ3LDExICs0NywxMSBA
QCB2b2lkIEZFVGlsZTo6YXBwbHkoKQogI2lmIEVOQUJMRShTVkcpCiAgICAgRmlsdGVyRWZmZWN0
KiBpbiA9IGlucHV0RWZmZWN0KDApOwogICAgIGluLT5hcHBseSgpOwotICAgIGlmICghaW4tPnJl
c3VsdEltYWdlKCkpCisgICAgaWYgKCFpbi0+aGFzUmVzdWx0KCkpCiAgICAgICAgIHJldHVybjsK
IAotICAgIEdyYXBoaWNzQ29udGV4dCogZmlsdGVyQ29udGV4dCA9IGVmZmVjdENvbnRleHQoKTsK
LSAgICBpZiAoIWZpbHRlckNvbnRleHQpCisgICAgSW1hZ2VCdWZmZXIqIHJlc3VsdEltYWdlID0g
Y3JlYXRlSW1hZ2VCdWZmZXJSZXN1bHQoKTsKKyAgICBpZiAoIXJlc3VsdEltYWdlKQogICAgICAg
ICByZXR1cm47CiAKICAgICBzZXRJc0FscGhhSW1hZ2UoaW4tPmlzQWxwaGFJbWFnZSgpKTsKQEAg
LTczLDE1ICs3MywxNSBAQCB2b2lkIEZFVGlsZTo6YXBwbHkoKQogCiAgICAgR3JhcGhpY3NDb250
ZXh0KiB0aWxlSW1hZ2VDb250ZXh0ID0gdGlsZUltYWdlLT5jb250ZXh0KCk7CiAgICAgdGlsZUlt
YWdlQ29udGV4dC0+dHJhbnNsYXRlKC1pbk1heEVmZmVjdExvY2F0aW9uLngoKSwgLWluTWF4RWZm
ZWN0TG9jYXRpb24ueSgpKTsKLSAgICB0aWxlSW1hZ2VDb250ZXh0LT5kcmF3SW1hZ2VCdWZmZXIo
aW4tPnJlc3VsdEltYWdlKCksIENvbG9yU3BhY2VEZXZpY2VSR0IsIGluLT5hYnNvbHV0ZVBhaW50
UmVjdCgpLmxvY2F0aW9uKCkpOworICAgIHRpbGVJbWFnZUNvbnRleHQtPmRyYXdJbWFnZUJ1ZmZl
cihpbi0+YXNJbWFnZUJ1ZmZlcigpLCBDb2xvclNwYWNlRGV2aWNlUkdCLCBpbi0+YWJzb2x1dGVQ
YWludFJlY3QoKS5sb2NhdGlvbigpKTsKIAogICAgIFJlZlB0cjxQYXR0ZXJuPiBwYXR0ZXJuID0g
UGF0dGVybjo6Y3JlYXRlKHRpbGVJbWFnZS0+Y29weUltYWdlKCksIHRydWUsIHRydWUpOwogCiAg
ICAgQWZmaW5lVHJhbnNmb3JtIHBhdHRlcm5UcmFuc2Zvcm07CiAgICAgcGF0dGVyblRyYW5zZm9y
bS50cmFuc2xhdGUoaW5NYXhFZmZlY3RMb2NhdGlvbi54KCkgLSBtYXhFZmZlY3RMb2NhdGlvbi54
KCksIGluTWF4RWZmZWN0TG9jYXRpb24ueSgpIC0gbWF4RWZmZWN0TG9jYXRpb24ueSgpKTsKICAg
ICBwYXR0ZXJuLT5zZXRQYXR0ZXJuU3BhY2VUcmFuc2Zvcm0ocGF0dGVyblRyYW5zZm9ybSk7Ci0g
ICAgZmlsdGVyQ29udGV4dC0+c2V0RmlsbFBhdHRlcm4ocGF0dGVybik7Ci0gICAgZmlsdGVyQ29u
dGV4dC0+ZmlsbFJlY3QoRmxvYXRSZWN0KEZsb2F0UG9pbnQoKSwgYWJzb2x1dGVQYWludFJlY3Qo
KS5zaXplKCkpKTsKKyAgICByZXN1bHRJbWFnZS0+Y29udGV4dCgpLT5zZXRGaWxsUGF0dGVybihw
YXR0ZXJuKTsKKyAgICByZXN1bHRJbWFnZS0+Y29udGV4dCgpLT5maWxsUmVjdChGbG9hdFJlY3Qo
RmxvYXRQb2ludCgpLCBhYnNvbHV0ZVBhaW50UmVjdCgpLnNpemUoKSkpOwogI2VuZGlmCiB9CiAK
ZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRVR1cmJ1bGVu
Y2UuY3BwIGIvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFVHVyYnVsZW5jZS5j
cHAKaW5kZXggODkxNGRiNy4uZGY3YzRmMyAxMDA2NDQKLS0tIGEvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9maWx0ZXJzL0ZFVHVyYnVsZW5jZS5jcHAKKysrIGIvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9maWx0ZXJzL0ZFVHVyYnVsZW5jZS5jcHAKQEAgLTMyMCwxNSArMzIwLDE0IEBAIHVu
c2lnbmVkIGNoYXIgRkVUdXJidWxlbmNlOjpjYWxjdWxhdGVUdXJidWxlbmNlVmFsdWVGb3JQb2lu
dChQYWludGluZ0RhdGEmIHBhaW50CiAKIHZvaWQgRkVUdXJidWxlbmNlOjphcHBseSgpCiB7Ci0g
ICAgaWYgKCFlZmZlY3RDb250ZXh0KCkpCisgICAgSW1hZ2VEYXRhKiByZXN1bHRJbWFnZSA9IGNy
ZWF0ZVVubXVsdGlwbGllZEltYWdlUmVzdWx0KCk7CisgICAgaWYgKCFyZXN1bHRJbWFnZSkKICAg
ICAgICAgcmV0dXJuOwogCi0gICAgSW50UmVjdCBpbWFnZVJlY3QoSW50UG9pbnQoKSwgcmVzdWx0
SW1hZ2UoKS0+c2l6ZSgpKTsKLSAgICBpZiAoIWltYWdlUmVjdC5zaXplKCkud2lkdGgoKSB8fCAh
aW1hZ2VSZWN0LnNpemUoKS5oZWlnaHQoKSkKKyAgICBpZiAoIWFic29sdXRlUGFpbnRSZWN0KCku
d2lkdGgoKSB8fCAhYWJzb2x1dGVQYWludFJlY3QoKS5oZWlnaHQoKSkKICAgICAgICAgcmV0dXJu
OwogCi0gICAgUmVmUHRyPEltYWdlRGF0YT4gaW1hZ2VEYXRhID0gSW1hZ2VEYXRhOjpjcmVhdGUo
aW1hZ2VSZWN0LndpZHRoKCksIGltYWdlUmVjdC5oZWlnaHQoKSk7Ci0gICAgQnl0ZUFycmF5KiBw
aXhlbEFycmF5ID0gaW1hZ2VEYXRhLT5kYXRhKCktPmRhdGEoKTsKKyAgICBCeXRlQXJyYXkqIHBp
eGVsQXJyYXkgPSByZXN1bHRJbWFnZS0+ZGF0YSgpLT5kYXRhKCk7CiAgICAgUGFpbnRpbmdEYXRh
IHBhaW50aW5nRGF0YShtX3NlZWQsIHJvdW5kZWRJbnRTaXplKGZpbHRlclByaW1pdGl2ZVN1YnJl
Z2lvbigpLnNpemUoKSkpOwogICAgIGluaXRQYWludChwYWludGluZ0RhdGEpOwogCkBAIC0zMzYs
MTYgKzMzNSwxNSBAQCB2b2lkIEZFVHVyYnVsZW5jZTo6YXBwbHkoKQogICAgIEZsb2F0UG9pbnQg
cG9pbnQ7CiAgICAgcG9pbnQuc2V0WShmaWx0ZXJSZWdpb24ueSgpKTsKICAgICBpbnQgaW5kZXhP
ZlBpeGVsQ2hhbm5lbCA9IDA7Ci0gICAgZm9yIChpbnQgeSA9IDA7IHkgPCBpbWFnZVJlY3QuaGVp
Z2h0KCk7ICsreSkgeworICAgIGZvciAoaW50IHkgPSAwOyB5IDwgYWJzb2x1dGVQYWludFJlY3Qo
KS5oZWlnaHQoKTsgKyt5KSB7CiAgICAgICAgIHBvaW50LnNldFkocG9pbnQueSgpICsgMSk7CiAg
ICAgICAgIHBvaW50LnNldFgoZmlsdGVyUmVnaW9uLngoKSk7Ci0gICAgICAgIGZvciAoaW50IHgg
PSAwOyB4IDwgaW1hZ2VSZWN0LndpZHRoKCk7ICsreCkgeworICAgICAgICBmb3IgKGludCB4ID0g
MDsgeCA8IGFic29sdXRlUGFpbnRSZWN0KCkud2lkdGgoKTsgKyt4KSB7CiAgICAgICAgICAgICBw
b2ludC5zZXRYKHBvaW50LngoKSArIDEpOwogICAgICAgICAgICAgZm9yIChwYWludGluZ0RhdGEu
Y2hhbm5lbCA9IDA7IHBhaW50aW5nRGF0YS5jaGFubmVsIDwgNDsgKytwYWludGluZ0RhdGEuY2hh
bm5lbCwgKytpbmRleE9mUGl4ZWxDaGFubmVsKQogICAgICAgICAgICAgICAgIHBpeGVsQXJyYXkt
PnNldChpbmRleE9mUGl4ZWxDaGFubmVsLCBjYWxjdWxhdGVUdXJidWxlbmNlVmFsdWVGb3JQb2lu
dChwYWludGluZ0RhdGEsIGZpbHRlcigpLT5tYXBBYnNvbHV0ZVBvaW50VG9Mb2NhbFBvaW50KHBv
aW50KSkpOwogICAgICAgICB9CiAgICAgfQotICAgIHJlc3VsdEltYWdlKCktPnB1dFVubXVsdGlw
bGllZEltYWdlRGF0YShpbWFnZURhdGEuZ2V0KCksIGltYWdlUmVjdCwgSW50UG9pbnQoKSk7CiB9
CiAKIHZvaWQgRkVUdXJidWxlbmNlOjpkdW1wKCkKZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJFZmZlY3QuY3BwIGIvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9maWx0ZXJzL0ZpbHRlckVmZmVjdC5jcHAKaW5kZXggYzIyODczMS4uNjQ2MjVmNiAx
MDA2NDQKLS0tIGEvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlckVmZmVj
dC5jcHAKKysrIGIvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlckVmZmVj
dC5jcHAKQEAgLTIzLDYgKzIzLDcgQEAKIAogI2lmIEVOQUJMRShGSUxURVJTKQogI2luY2x1ZGUg
IkZpbHRlckVmZmVjdC5oIgorI2luY2x1ZGUgIkltYWdlRGF0YS5oIgogCiBuYW1lc3BhY2UgV2Vi
Q29yZSB7CiAKQEAgLTU0LDEwICs1NSwxMCBAQCB2b2lkIEZpbHRlckVmZmVjdDo6ZGV0ZXJtaW5l
QWJzb2x1dGVQYWludFJlY3QoKQogCiBJbnRSZWN0IEZpbHRlckVmZmVjdDo6cmVxdWVzdGVkUmVn
aW9uT2ZJbnB1dEltYWdlRGF0YShjb25zdCBJbnRSZWN0JiBlZmZlY3RSZWN0KSBjb25zdAogewot
ICAgIEFTU0VSVChtX2VmZmVjdEJ1ZmZlcik7CisgICAgQVNTRVJUKGhhc1Jlc3VsdCgpKTsKICAg
ICBJbnRQb2ludCBsb2NhdGlvbiA9IG1fYWJzb2x1dGVQYWludFJlY3QubG9jYXRpb24oKTsKICAg
ICBsb2NhdGlvbi5tb3ZlKC1lZmZlY3RSZWN0LngoKSwgLWVmZmVjdFJlY3QueSgpKTsKLSAgICBy
ZXR1cm4gSW50UmVjdChsb2NhdGlvbiwgbV9lZmZlY3RCdWZmZXItPnNpemUoKSk7CisgICAgcmV0
dXJuIEludFJlY3QobG9jYXRpb24sIG1fYWJzb2x1dGVQYWludFJlY3Quc2l6ZSgpKTsKIH0KIAog
SW50UmVjdCBGaWx0ZXJFZmZlY3Q6OmRyYXdpbmdSZWdpb25PZklucHV0SW1hZ2UoY29uc3QgSW50
UmVjdCYgc3JjUmVjdCkgY29uc3QKQEAgLTcyLDE1ICs3MywxNzggQEAgRmlsdGVyRWZmZWN0KiBG
aWx0ZXJFZmZlY3Q6OmlucHV0RWZmZWN0KHVuc2lnbmVkIG51bWJlcikgY29uc3QKICAgICByZXR1
cm4gbV9pbnB1dEVmZmVjdHMuYXQobnVtYmVyKS5nZXQoKTsKIH0KIAotR3JhcGhpY3NDb250ZXh0
KiBGaWx0ZXJFZmZlY3Q6OmVmZmVjdENvbnRleHQoKQorSW1hZ2VCdWZmZXIqIEZpbHRlckVmZmVj
dDo6YXNJbWFnZUJ1ZmZlcigpCiB7CisgICAgLy8gVGhpcyBmdW5jdGlvbiBpcyBhbGxvd2VkIHRv
IHJldHVybiB3aXRoIE5VTEwuCisgICAgaWYgKCFoYXNSZXN1bHQoKSkKKyAgICAgICAgcmV0dXJu
IDA7CisgICAgaWYgKG1faW1hZ2VCdWZmZXJSZXN1bHQpCisgICAgICAgIHJldHVybiBtX2ltYWdl
QnVmZmVyUmVzdWx0LmdldCgpOworICAgIG1faW1hZ2VCdWZmZXJSZXN1bHQgPSBJbWFnZUJ1ZmZl
cjo6Y3JlYXRlKG1fYWJzb2x1dGVQYWludFJlY3Quc2l6ZSgpLCBDb2xvclNwYWNlTGluZWFyUkdC
KTsKKyAgICBJbnRSZWN0IGRzdChJbnRQb2ludCgpLCBtX2Fic29sdXRlUGFpbnRSZWN0LnNpemUo
KSk7CisgICAgaWYgKG1fcHJlbXVsdGlwbGllZEltYWdlUmVzdWx0KQorICAgICAgICBtX2ltYWdl
QnVmZmVyUmVzdWx0LT5wdXRQcmVtdWx0aXBsaWVkSW1hZ2VEYXRhKG1fcHJlbXVsdGlwbGllZElt
YWdlUmVzdWx0LmdldCgpLCBkc3QsIEludFBvaW50KCkpOworICAgIGVsc2UKKyAgICAgICAgbV9p
bWFnZUJ1ZmZlclJlc3VsdC0+cHV0VW5tdWx0aXBsaWVkSW1hZ2VEYXRhKG1fdW5tdWx0aXBsaWVk
SW1hZ2VSZXN1bHQuZ2V0KCksIGRzdCwgSW50UG9pbnQoKSk7CisgICAgcmV0dXJuIG1faW1hZ2VC
dWZmZXJSZXN1bHQuZ2V0KCk7Cit9CisKK1Bhc3NSZWZQdHI8SW1hZ2VEYXRhPiBGaWx0ZXJFZmZl
Y3Q6OmFzVW5tdWx0aXBsaWVkSW1hZ2UoY29uc3QgSW50UmVjdCYgcmVjdCkKK3sKKyAgICBQYXNz
UmVmUHRyPEltYWdlRGF0YT4gaW1hZ2VEYXRhID0gSW1hZ2VEYXRhOjpjcmVhdGUocmVjdC53aWR0
aCgpLCByZWN0LmhlaWdodCgpKTsKKyAgICBhc1VubXVsdGlwbGllZEltYWdlKGltYWdlRGF0YS5n
ZXQoKSwgcmVjdCk7CisgICAgcmV0dXJuIGltYWdlRGF0YTsKK30KKworUGFzc1JlZlB0cjxJbWFn
ZURhdGE+IEZpbHRlckVmZmVjdDo6YXNQcmVtdWx0aXBsaWVkSW1hZ2UoY29uc3QgSW50UmVjdCYg
cmVjdCkKK3sKKyAgICBQYXNzUmVmUHRyPEltYWdlRGF0YT4gaW1hZ2VEYXRhID0gSW1hZ2VEYXRh
OjpjcmVhdGUocmVjdC53aWR0aCgpLCByZWN0LmhlaWdodCgpKTsKKyAgICBhc1ByZW11bHRpcGxp
ZWRJbWFnZShpbWFnZURhdGEuZ2V0KCksIHJlY3QpOworICAgIHJldHVybiBpbWFnZURhdGE7Cit9
CisKK2lubGluZSB2b2lkIEZpbHRlckVmZmVjdDo6Y29weUltYWdlQnl0ZXMoSW1hZ2VEYXRhKiBz
cmMsIEltYWdlRGF0YSogZHN0LCBjb25zdCBJbnRSZWN0JiByZWN0KQoreworICAgIC8vIENvcHkg
dGhlIG5lY2Vzc2FyeSBsaW5lcy4KKyAgICBBU1NFUlQoSW50U2l6ZShkc3QtPndpZHRoKCksIGRz
dC0+aGVpZ2h0KCkpID09IHJlY3Quc2l6ZSgpKTsKKyAgICBpZiAocmVjdC54KCkgPCAwIHx8IHJl
Y3QueSgpIDwgMCB8fCAocmVjdC54KCkgKyByZWN0LndpZHRoKCkpID4gbV9hYnNvbHV0ZVBhaW50
UmVjdC53aWR0aCgpIHx8IChyZWN0LnkoKSArIHJlY3QuaGVpZ2h0KCkpID4gbV9hYnNvbHV0ZVBh
aW50UmVjdC5oZWlnaHQoKSkKKyAgICAgICAgbWVtc2V0KGRzdC0+ZGF0YSgpLT5kYXRhKCktPmRh
dGEoKSwgMCwgZHN0LT5kYXRhKCktPmxlbmd0aCgpKTsKKworICAgIGludCBvcmlnaW54ID0gcmVj
dC54KCk7CisgICAgaW50IGRlc3R4ID0gMDsKKyAgICBpZiAob3JpZ2lueCA8IDApIHsKKyAgICAg
ICAgZGVzdHggPSAtb3JpZ2lueDsKKyAgICAgICAgb3JpZ2lueCA9IDA7CisgICAgfQorICAgIGlu
dCBlbmR4ID0gcmVjdC54KCkgKyByZWN0LndpZHRoKCk7CisgICAgaWYgKGVuZHggPiBtX2Fic29s
dXRlUGFpbnRSZWN0LndpZHRoKCkpCisgICAgICAgIGVuZHggPSBtX2Fic29sdXRlUGFpbnRSZWN0
LndpZHRoKCk7CisKKyAgICBpbnQgb3JpZ2lueSA9IHJlY3QueSgpOworICAgIGludCBkZXN0eSA9
IDA7CisgICAgaWYgKG9yaWdpbnkgPCAwKSB7CisgICAgICAgIGRlc3R5ID0gLW9yaWdpbnk7Cisg
ICAgICAgIG9yaWdpbnkgPSAwOworICAgIH0KKyAgICBpbnQgZW5keSA9IHJlY3QueSgpICsgcmVj
dC5oZWlnaHQoKTsKKyAgICBpZiAoZW5keSA+IG1fYWJzb2x1dGVQYWludFJlY3QuaGVpZ2h0KCkp
CisgICAgICAgIGVuZHkgPSBtX2Fic29sdXRlUGFpbnRSZWN0LmhlaWdodCgpOworCisgICAgaW50
IHNpemUgPSAoZW5keCAtIG9yaWdpbngpICogNDsKKyAgICBpbnQgZHN0U2NhbmxpbmUgPSByZWN0
LndpZHRoKCkgKiA0OworICAgIGludCBzcmNTY2FubGluZSA9IG1fYWJzb2x1dGVQYWludFJlY3Qu
d2lkdGgoKSAqIDQ7CisgICAgdW5zaWduZWQgY2hhciAqZHN0UGl4ZWwgPSBkc3QtPmRhdGEoKS0+
ZGF0YSgpLT5kYXRhKCkgKyAoKChkZXN0eSAqIHJlY3Qud2lkdGgoKSkgKyBkZXN0eCkgKiA0KTsK
KyAgICB1bnNpZ25lZCBjaGFyICpzcmNQaXhlbCA9IHNyYy0+ZGF0YSgpLT5kYXRhKCktPmRhdGEo
KSArICgoKG9yaWdpbnkgKiBtX2Fic29sdXRlUGFpbnRSZWN0LndpZHRoKCkpICsgb3JpZ2lueCkg
KiA0KTsKKworICAgIHdoaWxlIChvcmlnaW55IDwgZW5keSkgeworICAgICAgICBtZW1jcHkoZHN0
UGl4ZWwsIHNyY1BpeGVsLCBzaXplKTsKKyAgICAgICAgZHN0UGl4ZWwgKz0gZHN0U2NhbmxpbmU7
CisgICAgICAgIHNyY1BpeGVsICs9IHNyY1NjYW5saW5lOworICAgICAgICBvcmlnaW55Kys7Cisg
ICAgfQorfQorCit2b2lkIEZpbHRlckVmZmVjdDo6YXNVbm11bHRpcGxpZWRJbWFnZShJbWFnZURh
dGEqIGRzdCwgY29uc3QgSW50UmVjdCYgcmVjdCkKK3sKKyAgICBBU1NFUlQoaGFzUmVzdWx0KCkp
OworCisgICAgaWYgKCFtX3VubXVsdGlwbGllZEltYWdlUmVzdWx0KSB7CisgICAgICAgIC8vIFdl
IHByZWZlciBhIGNvbnZlcnNpb24gZnJvbSB0aGUgaW1hZ2UgYnVmZmVyLgorICAgICAgICBpZiAo
bV9pbWFnZUJ1ZmZlclJlc3VsdCkKKyAgICAgICAgICAgIG1fdW5tdWx0aXBsaWVkSW1hZ2VSZXN1
bHQgPSBtX2ltYWdlQnVmZmVyUmVzdWx0LT5nZXRVbm11bHRpcGxpZWRJbWFnZURhdGEoSW50UmVj
dChJbnRQb2ludCgpLCBtX2Fic29sdXRlUGFpbnRSZWN0LnNpemUoKSkpOworICAgICAgICBlbHNl
IHsKKyAgICAgICAgICAgIG1fdW5tdWx0aXBsaWVkSW1hZ2VSZXN1bHQgPSBJbWFnZURhdGE6OmNy
ZWF0ZShtX2Fic29sdXRlUGFpbnRSZWN0LndpZHRoKCksIG1fYWJzb2x1dGVQYWludFJlY3QuaGVp
Z2h0KCkpOworICAgICAgICAgICAgdW5zaWduZWQgY2hhciogc3JjID0gbV9wcmVtdWx0aXBsaWVk
SW1hZ2VSZXN1bHQtPmRhdGEoKS0+ZGF0YSgpLT5kYXRhKCk7CisgICAgICAgICAgICB1bnNpZ25l
ZCBjaGFyKiBkc3QgPSBtX3VubXVsdGlwbGllZEltYWdlUmVzdWx0LT5kYXRhKCktPmRhdGEoKS0+
ZGF0YSgpOworICAgICAgICAgICAgdW5zaWduZWQgY2hhciogZW5kID0gc3JjICsgKG1fYWJzb2x1
dGVQYWludFJlY3Qud2lkdGgoKSAqIG1fYWJzb2x1dGVQYWludFJlY3QuaGVpZ2h0KCkgKiA0KTsK
KyAgICAgICAgICAgIHdoaWxlIChzcmMgPCBlbmQpIHsKKyAgICAgICAgICAgICAgICBpbnQgYWxw
aGEgPSBzcmNbM107CisgICAgICAgICAgICAgICAgaWYgKGFscGhhKSB7CisgICAgICAgICAgICAg
ICAgICAgIGRzdFswXSA9IHN0YXRpY19jYXN0PGludD4oc3JjWzBdKSAqIDI1NSAvIGFscGhhOwor
ICAgICAgICAgICAgICAgICAgICBkc3RbMV0gPSBzdGF0aWNfY2FzdDxpbnQ+KHNyY1sxXSkgKiAy
NTUgLyBhbHBoYTsKKyAgICAgICAgICAgICAgICAgICAgZHN0WzJdID0gc3RhdGljX2Nhc3Q8aW50
PihzcmNbMl0pICogMjU1IC8gYWxwaGE7CisgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAg
ICAgICAgICAgICAgICAgZHN0WzBdID0gMDsKKyAgICAgICAgICAgICAgICAgICAgZHN0WzFdID0g
MDsKKyAgICAgICAgICAgICAgICAgICAgZHN0WzJdID0gMDsKKyAgICAgICAgICAgICAgICB9Cisg
ICAgICAgICAgICAgICAgZHN0WzNdID0gYWxwaGE7CisgICAgICAgICAgICAgICAgc3JjICs9IDQ7
CisgICAgICAgICAgICAgICAgZHN0ICs9IDQ7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAg
ICB9CisgICAgY29weUltYWdlQnl0ZXMobV91bm11bHRpcGxpZWRJbWFnZVJlc3VsdC5nZXQoKSwg
ZHN0LCByZWN0KTsKK30KKwordm9pZCBGaWx0ZXJFZmZlY3Q6OmFzUHJlbXVsdGlwbGllZEltYWdl
KEltYWdlRGF0YSogZHN0LCBjb25zdCBJbnRSZWN0JiByZWN0KQoreworICAgIEFTU0VSVChoYXNS
ZXN1bHQoKSk7CisKKyAgICBpZiAoIW1fcHJlbXVsdGlwbGllZEltYWdlUmVzdWx0KSB7CisgICAg
ICAgIC8vIFdlIHByZWZlciBhIGNvbnZlcnNpb24gZnJvbSB0aGUgaW1hZ2UgYnVmZmVyLgorICAg
ICAgICBpZiAobV9pbWFnZUJ1ZmZlclJlc3VsdCkKKyAgICAgICAgICAgIG1fcHJlbXVsdGlwbGll
ZEltYWdlUmVzdWx0ID0gbV9pbWFnZUJ1ZmZlclJlc3VsdC0+Z2V0UHJlbXVsdGlwbGllZEltYWdl
RGF0YShJbnRSZWN0KEludFBvaW50KCksIG1fYWJzb2x1dGVQYWludFJlY3Quc2l6ZSgpKSk7Cisg
ICAgICAgIGVsc2UgeworICAgICAgICAgICAgbV9wcmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQgPSBJ
bWFnZURhdGE6OmNyZWF0ZShtX2Fic29sdXRlUGFpbnRSZWN0LndpZHRoKCksIG1fYWJzb2x1dGVQ
YWludFJlY3QuaGVpZ2h0KCkpOworICAgICAgICAgICAgdW5zaWduZWQgY2hhciogc3JjID0gbV91
bm11bHRpcGxpZWRJbWFnZVJlc3VsdC0+ZGF0YSgpLT5kYXRhKCktPmRhdGEoKTsKKyAgICAgICAg
ICAgIHVuc2lnbmVkIGNoYXIqIGRzdCA9IG1fcHJlbXVsdGlwbGllZEltYWdlUmVzdWx0LT5kYXRh
KCktPmRhdGEoKS0+ZGF0YSgpOworICAgICAgICAgICAgdW5zaWduZWQgY2hhciogZW5kID0gc3Jj
ICsgKG1fYWJzb2x1dGVQYWludFJlY3Qud2lkdGgoKSAqIG1fYWJzb2x1dGVQYWludFJlY3QuaGVp
Z2h0KCkgKiA0KTsKKyAgICAgICAgICAgIHdoaWxlIChzcmMgPCBlbmQpIHsKKyAgICAgICAgICAg
ICAgICBpbnQgYWxwaGEgPSBzcmNbM107CisgICAgICAgICAgICAgICAgZHN0WzBdID0gc3RhdGlj
X2Nhc3Q8aW50PihzcmNbMF0pICogYWxwaGEgLyAyNTU7CisgICAgICAgICAgICAgICAgZHN0WzFd
ID0gc3RhdGljX2Nhc3Q8aW50PihzcmNbMV0pICogYWxwaGEgLyAyNTU7CisgICAgICAgICAgICAg
ICAgZHN0WzJdID0gc3RhdGljX2Nhc3Q8aW50PihzcmNbMl0pICogYWxwaGEgLyAyNTU7CisgICAg
ICAgICAgICAgICAgZHN0WzNdID0gYWxwaGE7CisgICAgICAgICAgICAgICAgc3JjICs9IDQ7Cisg
ICAgICAgICAgICAgICAgZHN0ICs9IDQ7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9
CisgICAgY29weUltYWdlQnl0ZXMobV9wcmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQuZ2V0KCksIGRz
dCwgcmVjdCk7Cit9CisKK0ltYWdlQnVmZmVyKiBGaWx0ZXJFZmZlY3Q6OmNyZWF0ZUltYWdlQnVm
ZmVyUmVzdWx0KCkKK3sKKyAgICAvLyBPbmx5IG9uZSByZXN1bHQgdHlwZSBpcyBhbGxvd2VkLgor
ICAgIEFTU0VSVCghaGFzUmVzdWx0KCkpOworICAgIGRldGVybWluZUFic29sdXRlUGFpbnRSZWN0
KCk7CisgICAgaWYgKG1fYWJzb2x1dGVQYWludFJlY3QuaXNFbXB0eSgpKQorICAgICAgICByZXR1
cm4gMDsKKyAgICBtX2ltYWdlQnVmZmVyUmVzdWx0ID0gSW1hZ2VCdWZmZXI6OmNyZWF0ZShtX2Fi
c29sdXRlUGFpbnRSZWN0LnNpemUoKSwgQ29sb3JTcGFjZUxpbmVhclJHQik7CisgICAgaWYgKCFt
X2ltYWdlQnVmZmVyUmVzdWx0KQorICAgICAgICByZXR1cm4gMDsKKyAgICBpZiAoIW1faW1hZ2VC
dWZmZXJSZXN1bHQtPmNvbnRleHQoKSkgeworICAgICAgICAvLyBBbGwgZmlsdGVyIGVmZmVjdHMs
IHdoaWNoIGFsbG9jYXRlcyBhbiBpbWFnZUJ1ZmZlclJlc3VsdAorICAgICAgICAvLyB3aWxsIHVz
ZSBpdHMgY29udGV4dC4gSWYgd2Ugd291bGQgbm90IGRlc3Ryb3kgdGhlIGltYWdlIGhlcmUKKyAg
ICAgICAgLy8gdGhlIGZpbHRlciB3b3VsZCByZXR1cm4gYSBibGFjayByZWN0YW5nbGUsIHdoaWNo
IGlzIG5vdCBkZXNpcmVkLgorICAgICAgICAvLyAoSSB3b3VsZCBwcmVmZXIgYW4gQVNTRVJUIGhl
cmUsIHNpbmNlIEkgdGhpbmsgdGhlIGNvbnRleHQgbXVzdCBiZSBleGlzdHMpCisgICAgICAgIG1f
aW1hZ2VCdWZmZXJSZXN1bHQuY2xlYXIoKTsKKyAgICB9CisgICAgLy8gVGhpcyBpcyBvaywgZXZl
biBpZiBtX2ltYWdlQnVmZmVyUmVzdWx0IGlzIE5VTEwuCisgICAgcmV0dXJuIG1faW1hZ2VCdWZm
ZXJSZXN1bHQuZ2V0KCk7Cit9CisKK0ltYWdlRGF0YSogRmlsdGVyRWZmZWN0OjpjcmVhdGVVbm11
bHRpcGxpZWRJbWFnZVJlc3VsdCgpCit7CisgICAgLy8gT25seSBvbmUgcmVzdWx0IHR5cGUgaXMg
YWxsb3dlZC4KKyAgICBBU1NFUlQoIWhhc1Jlc3VsdCgpKTsKICAgICBkZXRlcm1pbmVBYnNvbHV0
ZVBhaW50UmVjdCgpOwogICAgIGlmIChtX2Fic29sdXRlUGFpbnRSZWN0LmlzRW1wdHkoKSkKICAg
ICAgICAgcmV0dXJuIDA7Ci0gICAgbV9lZmZlY3RCdWZmZXIgPSBJbWFnZUJ1ZmZlcjo6Y3JlYXRl
KG1fYWJzb2x1dGVQYWludFJlY3Quc2l6ZSgpLCBDb2xvclNwYWNlTGluZWFyUkdCKTsKLSAgICBp
ZiAoIW1fZWZmZWN0QnVmZmVyKQorICAgIG1fdW5tdWx0aXBsaWVkSW1hZ2VSZXN1bHQgPSBJbWFn
ZURhdGE6OmNyZWF0ZShtX2Fic29sdXRlUGFpbnRSZWN0LndpZHRoKCksIG1fYWJzb2x1dGVQYWlu
dFJlY3QuaGVpZ2h0KCkpOworICAgIHJldHVybiBtX3VubXVsdGlwbGllZEltYWdlUmVzdWx0Lmdl
dCgpOworfQorCitJbWFnZURhdGEqIEZpbHRlckVmZmVjdDo6Y3JlYXRlUHJlbXVsdGlwbGllZElt
YWdlUmVzdWx0KCkKK3sKKyAgICAvLyBPbmx5IG9uZSByZXN1bHQgdHlwZSBpcyBhbGxvd2VkLgor
ICAgIEFTU0VSVCghaGFzUmVzdWx0KCkpOworICAgIGRldGVybWluZUFic29sdXRlUGFpbnRSZWN0
KCk7CisgICAgaWYgKG1fYWJzb2x1dGVQYWludFJlY3QuaXNFbXB0eSgpKQogICAgICAgICByZXR1
cm4gMDsKLSAgICByZXR1cm4gbV9lZmZlY3RCdWZmZXItPmNvbnRleHQoKTsKKyAgICBtX3ByZW11
bHRpcGxpZWRJbWFnZVJlc3VsdCA9IEltYWdlRGF0YTo6Y3JlYXRlKG1fYWJzb2x1dGVQYWludFJl
Y3Qud2lkdGgoKSwgbV9hYnNvbHV0ZVBhaW50UmVjdC5oZWlnaHQoKSk7CisgICAgcmV0dXJuIG1f
cHJlbXVsdGlwbGllZEltYWdlUmVzdWx0LmdldCgpOwogfQogCiBUZXh0U3RyZWFtJiBGaWx0ZXJF
ZmZlY3Q6OmV4dGVybmFsUmVwcmVzZW50YXRpb24oVGV4dFN0cmVhbSYgdHMsIGludCkgY29uc3QK
ZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJFZmZl
Y3QuaCBiL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJFZmZlY3QuaApp
bmRleCBmOTY3NGUyLi43NDk0MzNjIDEwMDY0NAotLS0gYS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2ZpbHRlcnMvRmlsdGVyRWZmZWN0LmgKKysrIGIvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9maWx0ZXJzL0ZpbHRlckVmZmVjdC5oCkBAIC01MCwxMyArNTAsMTIgQEAgY2xhc3MgRmlsdGVy
RWZmZWN0IDogcHVibGljIFJlZkNvdW50ZWQ8RmlsdGVyRWZmZWN0PiB7CiBwdWJsaWM6CiAgICAg
dmlydHVhbCB+RmlsdGVyRWZmZWN0KCk7CiAKLSAgICAvLyBUaGUgcmVzdWx0IGlzIGJvdW5kZWQg
dG8gdGhlIHNpemUgb2YgdGhlIGZpbHRlciBwcmltaXRpdmUgdG8gc2F2ZSByZXNvdXJjZXMuCi0g
ICAgSW1hZ2VCdWZmZXIqIHJlc3VsdEltYWdlKCkgY29uc3QgeyByZXR1cm4gbV9lZmZlY3RCdWZm
ZXIuZ2V0KCk7IH0KLSAgICB2b2lkIHNldEVmZmVjdEJ1ZmZlcihQYXNzT3duUHRyPEltYWdlQnVm
ZmVyPiBlZmZlY3RCdWZmZXIpIHsgbV9lZmZlY3RCdWZmZXIgPSBlZmZlY3RCdWZmZXI7IH0KLQot
ICAgIC8vIENyZWF0ZXMgdGhlIEltYWdlQnVmZmVyIGZvciB0aGUgY3VycmVudCBmaWx0ZXIgcHJp
bWl0aXZlIHJlc3VsdCBpbiB0aGUgc2l6ZSBvZiB0aGUKLSAgICAvLyByZXBhaW50UmVjdC4gR2l2
ZXMgYmFjayB0aGUgR3JhcGhpY3NDb250ZXh0IG9mIHRoZSBvd24gSW1hZ2VCdWZmZXIuCi0gICAg
R3JhcGhpY3NDb250ZXh0KiBlZmZlY3RDb250ZXh0KCk7CisgICAgYm9vbCBoYXNSZXN1bHQoKSBj
b25zdCB7IHJldHVybiBtX2ltYWdlQnVmZmVyUmVzdWx0IHx8IG1fdW5tdWx0aXBsaWVkSW1hZ2VS
ZXN1bHQgfHwgbV9wcmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQ7IH0KKyAgICBJbWFnZUJ1ZmZlciog
YXNJbWFnZUJ1ZmZlcigpOworICAgIFBhc3NSZWZQdHI8SW1hZ2VEYXRhPiBhc1VubXVsdGlwbGll
ZEltYWdlKGNvbnN0IEludFJlY3QmKTsKKyAgICBQYXNzUmVmUHRyPEltYWdlRGF0YT4gYXNQcmVt
dWx0aXBsaWVkSW1hZ2UoY29uc3QgSW50UmVjdCYpOworICAgIHZvaWQgYXNVbm11bHRpcGxpZWRJ
bWFnZShJbWFnZURhdGEqIGRzdCwgY29uc3QgSW50UmVjdCYpOworICAgIHZvaWQgYXNQcmVtdWx0
aXBsaWVkSW1hZ2UoSW1hZ2VEYXRhKiBkc3QsIGNvbnN0IEludFJlY3QmKTsKIAogICAgIEZpbHRl
ckVmZmVjdFZlY3RvciYgaW5wdXRFZmZlY3RzKCkgeyByZXR1cm4gbV9pbnB1dEVmZmVjdHM7IH0K
ICAgICBGaWx0ZXJFZmZlY3QqIGlucHV0RWZmZWN0KHVuc2lnbmVkKSBjb25zdDsKQEAgLTExMCw4
ICsxMDksMTQgQEAgcHVibGljOgogcHJvdGVjdGVkOgogICAgIEZpbHRlckVmZmVjdChGaWx0ZXIq
KTsKIAorICAgIEltYWdlQnVmZmVyKiBjcmVhdGVJbWFnZUJ1ZmZlclJlc3VsdCgpOworICAgIElt
YWdlRGF0YSogY3JlYXRlVW5tdWx0aXBsaWVkSW1hZ2VSZXN1bHQoKTsKKyAgICBJbWFnZURhdGEq
IGNyZWF0ZVByZW11bHRpcGxpZWRJbWFnZVJlc3VsdCgpOworCiBwcml2YXRlOgotICAgIE93blB0
cjxJbWFnZUJ1ZmZlcj4gbV9lZmZlY3RCdWZmZXI7CisgICAgT3duUHRyPEltYWdlQnVmZmVyPiBt
X2ltYWdlQnVmZmVyUmVzdWx0OworICAgIFJlZlB0cjxJbWFnZURhdGE+IG1fdW5tdWx0aXBsaWVk
SW1hZ2VSZXN1bHQ7CisgICAgUmVmUHRyPEltYWdlRGF0YT4gbV9wcmVtdWx0aXBsaWVkSW1hZ2VS
ZXN1bHQ7CiAgICAgRmlsdGVyRWZmZWN0VmVjdG9yIG1faW5wdXRFZmZlY3RzOwogCiAgICAgYm9v
bCBtX2FscGhhSW1hZ2U7CkBAIC0xMjQsNiArMTI5LDggQEAgcHJpdmF0ZToKICAgICBGaWx0ZXIq
IG1fZmlsdGVyOwogCiBwcml2YXRlOgorICAgIGlubGluZSB2b2lkIGNvcHlJbWFnZUJ5dGVzKElt
YWdlRGF0YSogc3JjLCBJbWFnZURhdGEqIGRzdCwgY29uc3QgSW50UmVjdCYpOworCiAgICAgLy8g
VGhlIGZvbGxvd2luZyBtZW1iZXIgdmFyaWFibGVzIGFyZSBTVkcgc3BlY2lmaWMgYW5kIHdpbGwg
bW92ZSB0byBSZW5kZXJTVkdSZXNvdXJjZUZpbHRlclByaW1pdGl2ZS4KICAgICAvLyBTZWUgYnVn
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD00NTYxNC4KIApkaWZmIC0t
Z2l0IGEvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL1NvdXJjZUFscGhhLmNwcCBi
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9Tb3VyY2VBbHBoYS5jcHAKaW5kZXgg
YTUwNWI0Yi4uNGM5MjFiNyAxMDA2NDQKLS0tIGEvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9m
aWx0ZXJzL1NvdXJjZUFscGhhLmNwcAorKysgYi9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Zp
bHRlcnMvU291cmNlQWxwaGEuY3BwCkBAIC01MiwxNCArNTIsMTUgQEAgdm9pZCBTb3VyY2VBbHBo
YTo6ZGV0ZXJtaW5lQWJzb2x1dGVQYWludFJlY3QoKQogCiB2b2lkIFNvdXJjZUFscGhhOjphcHBs
eSgpCiB7Ci0gICAgR3JhcGhpY3NDb250ZXh0KiBmaWx0ZXJDb250ZXh0ID0gZWZmZWN0Q29udGV4
dCgpOworICAgIEltYWdlQnVmZmVyKiByZXN1bHRJbWFnZSA9IGNyZWF0ZUltYWdlQnVmZmVyUmVz
dWx0KCk7CiAgICAgRmlsdGVyKiBmaWx0ZXIgPSB0aGlzLT5maWx0ZXIoKTsKLSAgICBpZiAoIWZp
bHRlckNvbnRleHQgfHwgIWZpbHRlci0+c291cmNlSW1hZ2UoKSkKKyAgICBpZiAoIXJlc3VsdElt
YWdlIHx8ICFmaWx0ZXItPnNvdXJjZUltYWdlKCkpCiAgICAgICAgIHJldHVybjsKIAogICAgIHNl
dElzQWxwaGFJbWFnZSh0cnVlKTsKIAogICAgIEZsb2F0UmVjdCBpbWFnZVJlY3QoRmxvYXRQb2lu
dCgpLCBhYnNvbHV0ZVBhaW50UmVjdCgpLnNpemUoKSk7CisgICAgR3JhcGhpY3NDb250ZXh0KiBm
aWx0ZXJDb250ZXh0ID0gcmVzdWx0SW1hZ2UtPmNvbnRleHQoKTsKICAgICBmaWx0ZXJDb250ZXh0
LT5zYXZlKCk7CiAgICAgZmlsdGVyQ29udGV4dC0+Y2xpcFRvSW1hZ2VCdWZmZXIoZmlsdGVyLT5z
b3VyY2VJbWFnZSgpLCBpbWFnZVJlY3QpOwogICAgIGZpbHRlckNvbnRleHQtPmZpbGxSZWN0KGlt
YWdlUmVjdCwgQ29sb3I6OmJsYWNrLCBDb2xvclNwYWNlRGV2aWNlUkdCKTsKZGlmZiAtLWdpdCBh
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9Tb3VyY2VHcmFwaGljLmNwcCBiL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9Tb3VyY2VHcmFwaGljLmNwcAppbmRleCA2
YWFjMzY3Li5hODA5NDdhIDEwMDY0NAotLS0gYS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Zp
bHRlcnMvU291cmNlR3JhcGhpYy5jcHAKKysrIGIvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9m
aWx0ZXJzL1NvdXJjZUdyYXBoaWMuY3BwCkBAIC01MSwxMiArNTEsMTIgQEAgdm9pZCBTb3VyY2VH
cmFwaGljOjpkZXRlcm1pbmVBYnNvbHV0ZVBhaW50UmVjdCgpCiAKIHZvaWQgU291cmNlR3JhcGhp
Yzo6YXBwbHkoKQogewotICAgIEdyYXBoaWNzQ29udGV4dCogZmlsdGVyQ29udGV4dCA9IGVmZmVj
dENvbnRleHQoKTsKKyAgICBJbWFnZUJ1ZmZlciogcmVzdWx0SW1hZ2UgPSBjcmVhdGVJbWFnZUJ1
ZmZlclJlc3VsdCgpOwogICAgIEZpbHRlciogZmlsdGVyID0gdGhpcy0+ZmlsdGVyKCk7Ci0gICAg
aWYgKCFmaWx0ZXJDb250ZXh0IHx8ICFmaWx0ZXItPnNvdXJjZUltYWdlKCkpCisgICAgaWYgKCFy
ZXN1bHRJbWFnZSB8fCAhZmlsdGVyLT5zb3VyY2VJbWFnZSgpKQogICAgICAgICByZXR1cm47CiAK
LSAgICBmaWx0ZXJDb250ZXh0LT5kcmF3SW1hZ2VCdWZmZXIoZmlsdGVyLT5zb3VyY2VJbWFnZSgp
LCBDb2xvclNwYWNlRGV2aWNlUkdCLCBJbnRQb2ludCgpKTsKKyAgICByZXN1bHRJbWFnZS0+Y29u
dGV4dCgpLT5kcmF3SW1hZ2VCdWZmZXIoZmlsdGVyLT5zb3VyY2VJbWFnZSgpLCBDb2xvclNwYWNl
RGV2aWNlUkdCLCBJbnRQb2ludCgpKTsKIH0KIAogdm9pZCBTb3VyY2VHcmFwaGljOjpkdW1wKCkK
ZGlmZiAtLWdpdCBhL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclNWR1Jlc291cmNlRmlsdGVyLmNw
cCBiL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclNWR1Jlc291cmNlRmlsdGVyLmNwcAppbmRleCA3
Mjg3MmY2Li4zMzc4M2U4IDEwMDY0NAotLS0gYS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJTVkdS
ZXNvdXJjZUZpbHRlci5jcHAKKysrIGIvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyU1ZHUmVzb3Vy
Y2VGaWx0ZXIuY3BwCkBAIC0yOTIsMTQgKzI5MiwxNCBAQCB2b2lkIFJlbmRlclNWR1Jlc291cmNl
RmlsdGVyOjpwb3N0QXBwbHlSZXNvdXJjZShSZW5kZXJPYmplY3QqIG9iamVjdCwgR3JhcGhpY3ND
bwogICAgICAgICAgICAgZmlsdGVyRGF0YS0+ZmlsdGVyLT5zZXRTb3VyY2VJbWFnZShmaWx0ZXJE
YXRhLT5zb3VyY2VHcmFwaGljQnVmZmVyLnJlbGVhc2UoKSk7CiAgICAgICAgICAgICBsYXN0RWZm
ZWN0LT5hcHBseSgpOwogI2lmICFQTEFURk9STShDRykKLSAgICAgICAgICAgIEltYWdlQnVmZmVy
KiByZXN1bHRJbWFnZSA9IGxhc3RFZmZlY3QtPnJlc3VsdEltYWdlKCk7CisgICAgICAgICAgICBJ
bWFnZUJ1ZmZlciogcmVzdWx0SW1hZ2UgPSBsYXN0RWZmZWN0LT5hc0ltYWdlQnVmZmVyKCk7CiAg
ICAgICAgICAgICBpZiAocmVzdWx0SW1hZ2UpCiAgICAgICAgICAgICAgICAgcmVzdWx0SW1hZ2Ut
PnRyYW5zZm9ybUNvbG9yU3BhY2UoQ29sb3JTcGFjZUxpbmVhclJHQiwgQ29sb3JTcGFjZURldmlj
ZVJHQik7CiAjZW5kaWYKICAgICAgICAgICAgIGZpbHRlckRhdGEtPmJ1aWxkZWQgPSB0cnVlOwog
ICAgICAgICB9CiAKLSAgICAgICAgSW1hZ2VCdWZmZXIqIHJlc3VsdEltYWdlID0gbGFzdEVmZmVj
dC0+cmVzdWx0SW1hZ2UoKTsKKyAgICAgICAgSW1hZ2VCdWZmZXIqIHJlc3VsdEltYWdlID0gbGFz
dEVmZmVjdC0+YXNJbWFnZUJ1ZmZlcigpOwogICAgICAgICBpZiAocmVzdWx0SW1hZ2UpIHsKICAg
ICAgICAgICAgIGNvbnRleHQtPmNvbmNhdENUTShmaWx0ZXJEYXRhLT5zaGVhckZyZWVBYnNvbHV0
ZVRyYW5zZm9ybS5pbnZlcnNlKCkpOwogCmRpZmYgLS1naXQgYS9XZWJDb3JlL3N2Zy9ncmFwaGlj
cy9maWx0ZXJzL1NWR0ZFSW1hZ2UuY3BwIGIvV2ViQ29yZS9zdmcvZ3JhcGhpY3MvZmlsdGVycy9T
VkdGRUltYWdlLmNwcAppbmRleCA2YTE5MTRhLi5iNWFlNDY2IDEwMDY0NAotLS0gYS9XZWJDb3Jl
L3N2Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0ZFSW1hZ2UuY3BwCisrKyBiL1dlYkNvcmUvc3ZnL2dy
YXBoaWNzL2ZpbHRlcnMvU1ZHRkVJbWFnZS5jcHAKQEAgLTU5LDggKzU5LDggQEAgdm9pZCBGRUlt
YWdlOjphcHBseSgpCiAgICAgaWYgKCFtX2ltYWdlLmdldCgpKQogICAgICAgICByZXR1cm47CiAK
LSAgICBHcmFwaGljc0NvbnRleHQqIGZpbHRlckNvbnRleHQgPSBlZmZlY3RDb250ZXh0KCk7Ci0g
ICAgaWYgKCFmaWx0ZXJDb250ZXh0KQorICAgIEltYWdlQnVmZmVyKiByZXN1bHRJbWFnZSA9IGNy
ZWF0ZUltYWdlQnVmZmVyUmVzdWx0KCk7CisgICAgaWYgKCFyZXN1bHRJbWFnZSkKICAgICAgICAg
cmV0dXJuOwogCiAgICAgRmxvYXRSZWN0IHNyY1JlY3QoRmxvYXRQb2ludCgpLCBtX2ltYWdlLT5z
aXplKCkpOwpAQCAtNzAsNyArNzAsNyBAQCB2b2lkIEZFSW1hZ2U6OmFwcGx5KCkKICAgICBJbnRQ
b2ludCBwYWludExvY2F0aW9uID0gYWJzb2x1dGVQYWludFJlY3QoKS5sb2NhdGlvbigpOwogICAg
IGRlc3RSZWN0Lm1vdmUoLXBhaW50TG9jYXRpb24ueCgpLCAtcGFpbnRMb2NhdGlvbi55KCkpOwog
Ci0gICAgZmlsdGVyQ29udGV4dC0+ZHJhd0ltYWdlKG1faW1hZ2UuZ2V0KCksIENvbG9yU3BhY2VE
ZXZpY2VSR0IsIGRlc3RSZWN0LCBzcmNSZWN0KTsKKyAgICByZXN1bHRJbWFnZS0+Y29udGV4dCgp
LT5kcmF3SW1hZ2UobV9pbWFnZS5nZXQoKSwgQ29sb3JTcGFjZURldmljZVJHQiwgZGVzdFJlY3Qs
IHNyY1JlY3QpOwogfQogCiB2b2lkIEZFSW1hZ2U6OmR1bXAoKQotLSAKMS42LjAuNAoK
</data>
<flag name="review"
          id="65554"
          type_id="1"
          status="-"
          setter="krit"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>74995</attachid>
            <date>2010-11-29 00:56:21 -0800</date>
            <delta_ts>2010-12-06 05:28:11 -0800</delta_ts>
            <desc>patch 2</desc>
            <filename>0001-filter-result.patch</filename>
            <type>text/plain</type>
            <size>50777</size>
            <attacher name="Zoltan Herczeg">zherczeg</attacher>
            
              <data encoding="base64">RnJvbSBjNjUwNDIzNWEzM2E5ZDE3OGIwNDlhNjg2NWY4OTNhN2RmZWUwY2NkIE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBab2x0YW4gSGVyY3plZyA8emhlcmN6ZWdAaW5mLnUtc3plZ2Vk
Lmh1PgpEYXRlOiBNb24sIDI5IE5vdiAyMDEwIDA5OjEyOjAzICswMTAwClN1YmplY3Q6IFtQQVRD
SF0gZmlsdGVyLXJlc3VsdAoKU2lnbmVkLW9mZi1ieTogWm9sdGFuIEhlcmN6ZWcgPHpoZXJjemVn
QGluZi51LXN6ZWdlZC5odT4KLS0tCiBXZWJDb3JlL0NoYW5nZUxvZyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICB8ICAgNjcgKysrKysrKysKIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvZmlsdGVycy9GRUJsZW5kLmNwcCAgICAgIHwgICAxNSArLQogLi4uL3BsYXRmb3JtL2dyYXBo
aWNzL2ZpbHRlcnMvRkVDb2xvck1hdHJpeC5jcHAgICAgfCAgIDE0ICstCiAuLi4vZ3JhcGhpY3Mv
ZmlsdGVycy9GRUNvbXBvbmVudFRyYW5zZmVyLmNwcCAgICAgICB8ICAgIDkgKy0KIFdlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUNvbXBvc2l0ZS5jcHAgIHwgICAzMyArKy0tCiAu
Li4vcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUNvbnZvbHZlTWF0cml4LmNwcCB8ICAgNDQg
KysrLS0tCiAuLi4vZ3JhcGhpY3MvZmlsdGVycy9GRURpc3BsYWNlbWVudE1hcC5jcHAgICAgICAg
ICB8ICAgMjYgKystLQogV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFRmxvb2Qu
Y3BwICAgICAgfCAgICA2ICstCiAuLi4vcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUdhdXNz
aWFuQmx1ci5jcHAgICB8ICAgMjUgKystLQogV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0
ZXJzL0ZFTGlnaHRpbmcuY3BwICAgfCAgIDEyICstCiBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2ZpbHRlcnMvRkVNZXJnZS5jcHAgICAgICB8ICAgIDkgKy0KIFdlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvZmlsdGVycy9GRU1lcmdlLmggICAgICAgIHwgICAgMiArLQogV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9maWx0ZXJzL0ZFTW9ycGhvbG9neS5jcHAgfCAgIDEyICstCiBXZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVPZmZzZXQuY3BwICAgICB8ICAgIDggKy0KIFdlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRVRpbGUuY3BwICAgICAgIHwgICAgOSArLQog
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFVHVyYnVsZW5jZS5jcHAgfCAgIDE0
ICstCiBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyRWZmZWN0LmNwcCB8
ICAxNjkgKysrKysrKysrKysrKysrKysrKy0KIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmls
dGVycy9GaWx0ZXJFZmZlY3QuaCAgIHwgICAyMyArKy0KIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvZmlsdGVycy9Tb3VyY2VBbHBoYS5jcHAgIHwgICAgNSArLQogLi4uL3BsYXRmb3JtL2dyYXBo
aWNzL2ZpbHRlcnMvU291cmNlR3JhcGhpYy5jcHAgICAgfCAgICA2ICstCiBXZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2ZpbHRlcnMvU291cmNlR3JhcGhpYy5oICB8ICAgIDIgKy0KIFdlYkNvcmUv
cmVuZGVyaW5nL1JlbmRlclNWR1Jlc291cmNlRmlsdGVyLmNwcCAgICAgIHwgICAgNCArLQogV2Vi
Q29yZS9zdmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdGRUltYWdlLmNwcCAgICAgICAgfCAgICA2ICst
CiAyMyBmaWxlcyBjaGFuZ2VkLCAzNzAgaW5zZXJ0aW9ucygrKSwgMTUwIGRlbGV0aW9ucygtKQoK
ZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ2hhbmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXgg
OWRiMDE1Yi4uZTI4YTc2MSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvV2Vi
Q29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSw3MCBAQAorMjAxMC0xMS0yOSAgWm9sdGFuIEhlcmN6
ZWcgIDx6aGVyY3plZ0B3ZWJraXQub3JnPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAo
T09QUyEpLgorCisgICAgICAgIEJldHRlciByZXN1bHQgcGFzc2luZyBpbiBmaWx0ZXIgcHJpbWl0
aXZlcworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NDk5
MDcKKworICAgICAgICBTVk4gZmlsdGVyIHByaW1pdGl2ZXMgY2FuIHVzZSB0aGUgb3V0cHV0IG9m
IG90aGVyIGZpbHRlcnMuIFRoZQorICAgICAgICBpbnB1dCBhbmQgb3V0cHV0IGZvcm1hdCBvZiBh
IGZpbHRlciBjYW4gYmUgYSBwcmVtdWx0aXBsaWVkIG9yCisgICAgICAgIHVubXVsdGlwbGllZCBS
R0JBIGFycmF5LCBvciBhbiBpbWFnZSBidWZmZXIuIEFsbCBmaWx0ZXIKKyAgICAgICAgcHJpbWl0
aXZlIHJlc3VsdCB3YXMgY29udmVydGVkIHRvIGltYWdlIGJ1ZmZlciBiZWZvcmUsIHdoaWNoCisg
ICAgICAgIGNvdWxkIGJlIGFuIHVuZWNlc3NhcnkgKGFuZCByZWFsbHkgY29zdGx5KSBvcGVyYXRp
b24sIGlmCisgICAgICAgIGEgZmlsdGVyIGV4cGVjdHMgaXRzIGlucHV0IGluIHRoZSBzYW1lIGZv
cm1hdCBhcyB0aGUgb3V0cHV0CisgICAgICAgIG9mIHRoZSBpbnB1dCBmaWx0ZXIgcHJpbWl0aXZl
LiBUaGlzIG92ZXJoZWFkIGlzIHJlbW92ZWQgYnkKKyAgICAgICAgdGhpcyBwYXRjaC4gQWxsIGFw
cGx5KCkgbWV0aG9kcyB1cGRhdGVkIGFjY29yZGluZyB0byB0aGlzIG5ldworICAgICAgICBmaWx0
ZXIgcHJpbWl0aXZlIGludGVyZmFjZS4KKworICAgICAgICBUaGUgZXhpc3RpbmcgdGVzdHMgY292
ZXIgdGhpcyBmZWF0dXJlLgorCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9G
RUJsZW5kLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZFQmxlbmQ6OmFwcGx5KToKKyAgICAgICAg
KiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29sb3JNYXRyaXguY3BwOgorICAgICAgICAo
V2ViQ29yZTo6RkVDb2xvck1hdHJpeDo6YXBwbHkpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBo
aWNzL2ZpbHRlcnMvRkVDb21wb25lbnRUcmFuc2Zlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpG
RUNvbXBvbmVudFRyYW5zZmVyOjphcHBseSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mv
ZmlsdGVycy9GRUNvbXBvc2l0ZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGRUNvbXBvc2l0ZTo6
YXBwbHkpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDb252b2x2ZU1h
dHJpeC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGRUNvbnZvbHZlTWF0cml4OjphcHBseSk6Cisg
ICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRURpc3BsYWNlbWVudE1hcC5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpGRURpc3BsYWNlbWVudE1hcDo6YXBwbHkpOgorICAgICAgICAq
IHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVGbG9vZC5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpGRUZsb29kOjphcHBseSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9G
RUdhdXNzaWFuQmx1ci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGRUdhdXNzaWFuQmx1cjo6YXBw
bHkpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVMaWdodGluZy5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpGRUxpZ2h0aW5nOjphcHBseSk6CisgICAgICAgICogcGxhdGZv
cm0vZ3JhcGhpY3MvZmlsdGVycy9GRU1lcmdlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZFTWVy
Z2U6OmFwcGx5KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFTW9ycGhv
bG9neS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGRU1vcnBob2xvZ3k6OmFwcGx5KToKKyAgICAg
ICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFT2Zmc2V0LmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OkZFT2Zmc2V0OjphcHBseSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmls
dGVycy9GRVRpbGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RkVUaWxlOjphcHBseSk6CisgICAg
ICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRVR1cmJ1bGVuY2UuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6RkVUdXJidWxlbmNlOjphcHBseSk6CisgICAgICAgICogcGxhdGZvcm0vZ3Jh
cGhpY3MvZmlsdGVycy9GaWx0ZXJFZmZlY3QuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVy
RWZmZWN0OjpyZXF1ZXN0ZWRSZWdpb25PZklucHV0SW1hZ2VEYXRhKToKKyAgICAgICAgKFdlYkNv
cmU6OkZpbHRlckVmZmVjdDo6YXNJbWFnZUJ1ZmZlcik6CisgICAgICAgIChXZWJDb3JlOjpGaWx0
ZXJFZmZlY3Q6OmFzVW5tdWx0aXBsaWVkSW1hZ2UpOgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVy
RWZmZWN0Ojphc1ByZW11bHRpcGxpZWRJbWFnZSk6CisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJF
ZmZlY3Q6OmNvcHlJbWFnZUJ5dGVzKToKKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6
Y3JlYXRlSW1hZ2VCdWZmZXJSZXN1bHQpOgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0
OjpjcmVhdGVVbm11bHRpcGxpZWRJbWFnZVJlc3VsdCk6CisgICAgICAgIChXZWJDb3JlOjpGaWx0
ZXJFZmZlY3Q6OmNyZWF0ZVByZW11bHRpcGxpZWRJbWFnZVJlc3VsdCk6CisgICAgICAgICogcGxh
dGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJFZmZlY3QuaDoKKyAgICAgICAgKFdlYkNvcmU6
OkZpbHRlckVmZmVjdDo6aGFzUmVzdWx0KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9m
aWx0ZXJzL1NvdXJjZUFscGhhLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNvdXJjZUFscGhhOjph
cHBseSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9Tb3VyY2VHcmFwaGlj
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNvdXJjZUdyYXBoaWM6OmFwcGx5KToKKyAgICAgICAg
KiByZW5kZXJpbmcvUmVuZGVyU1ZHUmVzb3VyY2VGaWx0ZXIuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6UmVuZGVyU1ZHUmVzb3VyY2VGaWx0ZXI6OnBvc3RBcHBseVJlc291cmNlKToKKyAgICAgICAg
KiBzdmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdGRUltYWdlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OkZFSW1hZ2U6OmFwcGx5KToKKwogMjAxMC0xMS0yOCAgRGltaXRyaSBHbGF6a292ICA8ZGdsYXpr
b3ZAY2hyb21pdW0ub3JnPgogCiAgICAgICAgIFJldmlld2VkIGJ5IERhcmluIEFkbGVyLgpkaWZm
IC0tZ2l0IGEvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQmxlbmQuY3BwIGIv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQmxlbmQuY3BwCmluZGV4IDg5YjQ0
ZTAuLmZjZDM5YTMgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVy
cy9GRUJsZW5kLmNwcAorKysgYi9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVC
bGVuZC5jcHAKQEAgLTkyLDI2ICs5MiwyNSBAQCB2b2lkIEZFQmxlbmQ6OmFwcGx5KCkKICAgICBG
aWx0ZXJFZmZlY3QqIGluMiA9IGlucHV0RWZmZWN0KDEpOwogICAgIGluLT5hcHBseSgpOwogICAg
IGluMi0+YXBwbHkoKTsKLSAgICBpZiAoIWluLT5yZXN1bHRJbWFnZSgpIHx8ICFpbjItPnJlc3Vs
dEltYWdlKCkpCisgICAgaWYgKCFpbi0+aGFzUmVzdWx0KCkgfHwgIWluMi0+aGFzUmVzdWx0KCkp
CiAgICAgICAgIHJldHVybjsKIAogICAgIGlmIChtX21vZGUgPD0gRkVCTEVORF9NT0RFX1VOS05P
V04gfHwgbV9tb2RlID4gRkVCTEVORF9NT0RFX0xJR0hURU4pCiAgICAgICAgIHJldHVybjsKIAot
ICAgIGlmICghZWZmZWN0Q29udGV4dCgpKQorICAgIEltYWdlRGF0YSogcmVzdWx0SW1hZ2UgPSBj
cmVhdGVQcmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQoKTsKKyAgICBpZiAoIXJlc3VsdEltYWdlKQog
ICAgICAgICByZXR1cm47CiAKICAgICBJbnRSZWN0IGVmZmVjdEFEcmF3aW5nUmVjdCA9IHJlcXVl
c3RlZFJlZ2lvbk9mSW5wdXRJbWFnZURhdGEoaW4tPmFic29sdXRlUGFpbnRSZWN0KCkpOwotICAg
IFJlZlB0cjxJbWFnZURhdGE+IHNyY0ltYWdlRGF0YUEgPSBpbi0+cmVzdWx0SW1hZ2UoKS0+Z2V0
UHJlbXVsdGlwbGllZEltYWdlRGF0YShlZmZlY3RBRHJhd2luZ1JlY3QpOworICAgIFJlZlB0cjxJ
bWFnZURhdGE+IHNyY0ltYWdlRGF0YUEgPSBpbi0+YXNQcmVtdWx0aXBsaWVkSW1hZ2UoZWZmZWN0
QURyYXdpbmdSZWN0KTsKICAgICBCeXRlQXJyYXkqIHNyY1BpeGVsQXJyYXlBID0gc3JjSW1hZ2VE
YXRhQS0+ZGF0YSgpLT5kYXRhKCk7CiAKICAgICBJbnRSZWN0IGVmZmVjdEJEcmF3aW5nUmVjdCA9
IHJlcXVlc3RlZFJlZ2lvbk9mSW5wdXRJbWFnZURhdGEoaW4yLT5hYnNvbHV0ZVBhaW50UmVjdCgp
KTsKLSAgICBSZWZQdHI8SW1hZ2VEYXRhPiBzcmNJbWFnZURhdGFCID0gaW4yLT5yZXN1bHRJbWFn
ZSgpLT5nZXRQcmVtdWx0aXBsaWVkSW1hZ2VEYXRhKGVmZmVjdEJEcmF3aW5nUmVjdCk7CisgICAg
UmVmUHRyPEltYWdlRGF0YT4gc3JjSW1hZ2VEYXRhQiA9IGluMi0+YXNQcmVtdWx0aXBsaWVkSW1h
Z2UoZWZmZWN0QkRyYXdpbmdSZWN0KTsKICAgICBCeXRlQXJyYXkqIHNyY1BpeGVsQXJyYXlCID0g
c3JjSW1hZ2VEYXRhQi0+ZGF0YSgpLT5kYXRhKCk7CiAKLSAgICBJbnRSZWN0IGltYWdlUmVjdChJ
bnRQb2ludCgpLCByZXN1bHRJbWFnZSgpLT5zaXplKCkpOwotICAgIFJlZlB0cjxJbWFnZURhdGE+
IGltYWdlRGF0YSA9IEltYWdlRGF0YTo6Y3JlYXRlKGltYWdlUmVjdC53aWR0aCgpLCBpbWFnZVJl
Y3QuaGVpZ2h0KCkpOwotICAgIEJ5dGVBcnJheSogZHN0UGl4ZWxBcnJheSA9IGltYWdlRGF0YS0+
ZGF0YSgpLT5kYXRhKCk7CisgICAgQnl0ZUFycmF5KiBkc3RQaXhlbEFycmF5ID0gcmVzdWx0SW1h
Z2UtPmRhdGEoKS0+ZGF0YSgpOwogCiAgICAgLy8gS2VlcCBzeW5jaHJvbml6ZWQgd2l0aCBCbGVu
ZE1vZGVUeXBlCiAgICAgc3RhdGljIGNvbnN0IEJsZW5kVHlwZSBjYWxsRWZmZWN0W10gPSB7dW5r
bm93biwgbm9ybWFsLCBtdWx0aXBseSwgc2NyZWVuLCBkYXJrZW4sIGxpZ2h0ZW59OwpAQCAtMTMx
LDggKzEzMCw2IEBAIHZvaWQgRkVCbGVuZDo6YXBwbHkoKQogICAgICAgICB1bnNpZ25lZCBjaGFy
IGFscGhhUiA9IDI1NSAtICgoMjU1IC0gYWxwaGFBKSAqICgyNTUgLSBhbHBoYUIpKSAvIDI1NTsK
ICAgICAgICAgZHN0UGl4ZWxBcnJheS0+c2V0KHBpeGVsT2Zmc2V0ICsgMywgYWxwaGFSKTsKICAg
ICB9Ci0KLSAgICByZXN1bHRJbWFnZSgpLT5wdXRQcmVtdWx0aXBsaWVkSW1hZ2VEYXRhKGltYWdl
RGF0YS5nZXQoKSwgaW1hZ2VSZWN0LCBJbnRQb2ludCgpKTsKIH0KIAogdm9pZCBGRUJsZW5kOjpk
dW1wKCkKZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUNv
bG9yTWF0cml4LmNwcCBiL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUNvbG9y
TWF0cml4LmNwcAppbmRleCAxYzk5YjFlLi40YzVhMGI4IDEwMDY0NAotLS0gYS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDb2xvck1hdHJpeC5jcHAKKysrIGIvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29sb3JNYXRyaXguY3BwCkBAIC0xNTIsMTcgKzE1
MiwxNyBAQCB2b2lkIEZFQ29sb3JNYXRyaXg6OmFwcGx5KCkKIHsKICAgICBGaWx0ZXJFZmZlY3Qq
IGluID0gaW5wdXRFZmZlY3QoMCk7CiAgICAgaW4tPmFwcGx5KCk7Ci0gICAgaWYgKCFpbi0+cmVz
dWx0SW1hZ2UoKSkKKyAgICBpZiAoIWluLT5oYXNSZXN1bHQoKSkKICAgICAgICAgcmV0dXJuOwog
Ci0gICAgR3JhcGhpY3NDb250ZXh0KiBmaWx0ZXJDb250ZXh0ID0gZWZmZWN0Q29udGV4dCgpOwot
ICAgIGlmICghZmlsdGVyQ29udGV4dCkKKyAgICBJbWFnZUJ1ZmZlciogcmVzdWx0SW1hZ2UgPSBj
cmVhdGVJbWFnZUJ1ZmZlclJlc3VsdCgpOworICAgIGlmICghcmVzdWx0SW1hZ2UpCiAgICAgICAg
IHJldHVybjsKIAotICAgIGZpbHRlckNvbnRleHQtPmRyYXdJbWFnZUJ1ZmZlcihpbi0+cmVzdWx0
SW1hZ2UoKSwgQ29sb3JTcGFjZURldmljZVJHQiwgZHJhd2luZ1JlZ2lvbk9mSW5wdXRJbWFnZShp
bi0+YWJzb2x1dGVQYWludFJlY3QoKSkpOworICAgIHJlc3VsdEltYWdlLT5jb250ZXh0KCktPmRy
YXdJbWFnZUJ1ZmZlcihpbi0+YXNJbWFnZUJ1ZmZlcigpLCBDb2xvclNwYWNlRGV2aWNlUkdCLCBk
cmF3aW5nUmVnaW9uT2ZJbnB1dEltYWdlKGluLT5hYnNvbHV0ZVBhaW50UmVjdCgpKSk7CiAKLSAg
ICBJbnRSZWN0IGltYWdlUmVjdChJbnRQb2ludCgpLCByZXN1bHRJbWFnZSgpLT5zaXplKCkpOwot
ICAgIFJlZlB0cjxJbWFnZURhdGE+IGltYWdlRGF0YSA9IHJlc3VsdEltYWdlKCktPmdldFVubXVs
dGlwbGllZEltYWdlRGF0YShpbWFnZVJlY3QpOworICAgIEludFJlY3QgaW1hZ2VSZWN0KEludFBv
aW50KCksIGFic29sdXRlUGFpbnRSZWN0KCkuc2l6ZSgpKTsKKyAgICBSZWZQdHI8SW1hZ2VEYXRh
PiBpbWFnZURhdGEgPSByZXN1bHRJbWFnZS0+Z2V0VW5tdWx0aXBsaWVkSW1hZ2VEYXRhKGltYWdl
UmVjdCk7CiAgICAgQnl0ZUFycmF5KiBwaXhlbEFycmF5ID0gaW1hZ2VEYXRhLT5kYXRhKCktPmRh
dGEoKTsKIAogICAgIHN3aXRjaCAobV90eXBlKSB7CkBAIC0xODMsNyArMTgzLDcgQEAgdm9pZCBG
RUNvbG9yTWF0cml4OjphcHBseSgpCiAgICAgICAgICAgICBicmVhazsKICAgICB9CiAKLSAgICBy
ZXN1bHRJbWFnZSgpLT5wdXRVbm11bHRpcGxpZWRJbWFnZURhdGEoaW1hZ2VEYXRhLmdldCgpLCBp
bWFnZVJlY3QsIEludFBvaW50KCkpOworICAgIHJlc3VsdEltYWdlLT5wdXRVbm11bHRpcGxpZWRJ
bWFnZURhdGEoaW1hZ2VEYXRhLmdldCgpLCBpbWFnZVJlY3QsIEludFBvaW50KCkpOwogfQogCiB2
b2lkIEZFQ29sb3JNYXRyaXg6OmR1bXAoKQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9maWx0ZXJzL0ZFQ29tcG9uZW50VHJhbnNmZXIuY3BwIGIvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29tcG9uZW50VHJhbnNmZXIuY3BwCmluZGV4IGNmYWI1MGIu
Ljk3MzRkN2EgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9G
RUNvbXBvbmVudFRyYW5zZmVyLmNwcAorKysgYi9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Zp
bHRlcnMvRkVDb21wb25lbnRUcmFuc2Zlci5jcHAKQEAgLTE1MSwxMCArMTUxLDExIEBAIHZvaWQg
RkVDb21wb25lbnRUcmFuc2Zlcjo6YXBwbHkoKQogewogICAgIEZpbHRlckVmZmVjdCogaW4gPSBp
bnB1dEVmZmVjdCgwKTsKICAgICBpbi0+YXBwbHkoKTsKLSAgICBpZiAoIWluLT5yZXN1bHRJbWFn
ZSgpKQorICAgIGlmICghaW4tPmhhc1Jlc3VsdCgpKQogICAgICAgICByZXR1cm47CiAKLSAgICBp
ZiAoIWVmZmVjdENvbnRleHQoKSkKKyAgICBJbWFnZURhdGEqIGltYWdlRGF0YSA9IGNyZWF0ZVVu
bXVsdGlwbGllZEltYWdlUmVzdWx0KCk7CisgICAgaWYgKCFpbWFnZURhdGEpCiAgICAgICAgIHJl
dHVybjsKIAogICAgIHVuc2lnbmVkIGNoYXIgclZhbHVlc1syNTZdLCBnVmFsdWVzWzI1Nl0sIGJW
YWx1ZXNbMjU2XSwgYVZhbHVlc1syNTZdOwpAQCAtMTY4LDcgKzE2OSw3IEBAIHZvaWQgRkVDb21w
b25lbnRUcmFuc2Zlcjo6YXBwbHkoKQogICAgICAgICAoKmNhbGxFZmZlY3RbdHJhbnNmZXJGdW5j
dGlvbltjaGFubmVsXS50eXBlXSkodGFibGVzW2NoYW5uZWxdLCB0cmFuc2ZlckZ1bmN0aW9uW2No
YW5uZWxdKTsKIAogICAgIEludFJlY3QgZHJhd2luZ1JlY3QgPSByZXF1ZXN0ZWRSZWdpb25PZklu
cHV0SW1hZ2VEYXRhKGluLT5hYnNvbHV0ZVBhaW50UmVjdCgpKTsKLSAgICBSZWZQdHI8SW1hZ2VE
YXRhPiBpbWFnZURhdGEgPSBpbi0+cmVzdWx0SW1hZ2UoKS0+Z2V0VW5tdWx0aXBsaWVkSW1hZ2VE
YXRhKGRyYXdpbmdSZWN0KTsKKyAgICBpbi0+YXNVbm11bHRpcGxpZWRJbWFnZShpbWFnZURhdGEs
IGRyYXdpbmdSZWN0KTsKICAgICBCeXRlQXJyYXkqIHBpeGVsQXJyYXkgPSBpbWFnZURhdGEtPmRh
dGEoKS0+ZGF0YSgpOwogCiAgICAgdW5zaWduZWQgcGl4ZWxBcnJheUxlbmd0aCA9IHBpeGVsQXJy
YXktPmxlbmd0aCgpOwpAQCAtMTc4LDggKzE3OSw2IEBAIHZvaWQgRkVDb21wb25lbnRUcmFuc2Zl
cjo6YXBwbHkoKQogICAgICAgICAgICAgcGl4ZWxBcnJheS0+c2V0KHBpeGVsT2Zmc2V0ICsgY2hh
bm5lbCwgdGFibGVzW2NoYW5uZWxdW2NdKTsKICAgICAgICAgfQogICAgIH0KLQotICAgIHJlc3Vs
dEltYWdlKCktPnB1dFVubXVsdGlwbGllZEltYWdlRGF0YShpbWFnZURhdGEuZ2V0KCksIEludFJl
Y3QoSW50UG9pbnQoKSwgcmVzdWx0SW1hZ2UoKS0+c2l6ZSgpKSwgSW50UG9pbnQoKSk7CiB9CiAK
IHZvaWQgRkVDb21wb25lbnRUcmFuc2Zlcjo6ZHVtcCgpCmRpZmYgLS1naXQgYS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDb21wb3NpdGUuY3BwIGIvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29tcG9zaXRlLmNwcAppbmRleCBkMjczMjFmLi5jNTA1ODVm
IDEwMDY0NAotLS0gYS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDb21wb3Np
dGUuY3BwCisrKyBiL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUNvbXBvc2l0
ZS5jcHAKQEAgLTE0MSw0OCArMTQxLDQ5IEBAIHZvaWQgRkVDb21wb3NpdGU6OmFwcGx5KCkKICAg
ICBGaWx0ZXJFZmZlY3QqIGluMiA9IGlucHV0RWZmZWN0KDEpOwogICAgIGluLT5hcHBseSgpOwog
ICAgIGluMi0+YXBwbHkoKTsKLSAgICBpZiAoIWluLT5yZXN1bHRJbWFnZSgpIHx8ICFpbjItPnJl
c3VsdEltYWdlKCkpCisgICAgaWYgKCFpbi0+aGFzUmVzdWx0KCkgfHwgIWluMi0+aGFzUmVzdWx0
KCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIEdyYXBoaWNzQ29udGV4dCogZmlsdGVyQ29udGV4
dCA9IGVmZmVjdENvbnRleHQoKTsKLSAgICBpZiAoIWZpbHRlckNvbnRleHQpCisgICAgSW1hZ2VC
dWZmZXIqIHJlc3VsdEltYWdlID0gY3JlYXRlSW1hZ2VCdWZmZXJSZXN1bHQoKTsKKyAgICBpZiAo
IXJlc3VsdEltYWdlKQogICAgICAgICByZXR1cm47CisgICAgR3JhcGhpY3NDb250ZXh0KiBmaWx0
ZXJDb250ZXh0ID0gcmVzdWx0SW1hZ2UtPmNvbnRleHQoKTsKIAogICAgIEZsb2F0UmVjdCBzcmNS
ZWN0ID0gRmxvYXRSZWN0KDAsIDAsIC0xLCAtMSk7CiAgICAgc3dpdGNoIChtX3R5cGUpIHsKICAg
ICBjYXNlIEZFQ09NUE9TSVRFX09QRVJBVE9SX09WRVI6Ci0gICAgICAgIGZpbHRlckNvbnRleHQt
PmRyYXdJbWFnZUJ1ZmZlcihpbjItPnJlc3VsdEltYWdlKCksIENvbG9yU3BhY2VEZXZpY2VSR0Is
IGRyYXdpbmdSZWdpb25PZklucHV0SW1hZ2UoaW4yLT5hYnNvbHV0ZVBhaW50UmVjdCgpKSk7Ci0g
ICAgICAgIGZpbHRlckNvbnRleHQtPmRyYXdJbWFnZUJ1ZmZlcihpbi0+cmVzdWx0SW1hZ2UoKSwg
Q29sb3JTcGFjZURldmljZVJHQiwgZHJhd2luZ1JlZ2lvbk9mSW5wdXRJbWFnZShpbi0+YWJzb2x1
dGVQYWludFJlY3QoKSkpOworICAgICAgICBmaWx0ZXJDb250ZXh0LT5kcmF3SW1hZ2VCdWZmZXIo
aW4yLT5hc0ltYWdlQnVmZmVyKCksIENvbG9yU3BhY2VEZXZpY2VSR0IsIGRyYXdpbmdSZWdpb25P
ZklucHV0SW1hZ2UoaW4yLT5hYnNvbHV0ZVBhaW50UmVjdCgpKSk7CisgICAgICAgIGZpbHRlckNv
bnRleHQtPmRyYXdJbWFnZUJ1ZmZlcihpbi0+YXNJbWFnZUJ1ZmZlcigpLCBDb2xvclNwYWNlRGV2
aWNlUkdCLCBkcmF3aW5nUmVnaW9uT2ZJbnB1dEltYWdlKGluLT5hYnNvbHV0ZVBhaW50UmVjdCgp
KSk7CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgRkVDT01QT1NJVEVfT1BFUkFUT1JfSU46CiAg
ICAgICAgIGZpbHRlckNvbnRleHQtPnNhdmUoKTsKLSAgICAgICAgZmlsdGVyQ29udGV4dC0+Y2xp
cFRvSW1hZ2VCdWZmZXIoaW4yLT5yZXN1bHRJbWFnZSgpLCBkcmF3aW5nUmVnaW9uT2ZJbnB1dElt
YWdlKGluMi0+YWJzb2x1dGVQYWludFJlY3QoKSkpOwotICAgICAgICBmaWx0ZXJDb250ZXh0LT5k
cmF3SW1hZ2VCdWZmZXIoaW4tPnJlc3VsdEltYWdlKCksIENvbG9yU3BhY2VEZXZpY2VSR0IsIGRy
YXdpbmdSZWdpb25PZklucHV0SW1hZ2UoaW4tPmFic29sdXRlUGFpbnRSZWN0KCkpKTsKKyAgICAg
ICAgZmlsdGVyQ29udGV4dC0+Y2xpcFRvSW1hZ2VCdWZmZXIoaW4yLT5hc0ltYWdlQnVmZmVyKCks
IGRyYXdpbmdSZWdpb25PZklucHV0SW1hZ2UoaW4yLT5hYnNvbHV0ZVBhaW50UmVjdCgpKSk7Cisg
ICAgICAgIGZpbHRlckNvbnRleHQtPmRyYXdJbWFnZUJ1ZmZlcihpbi0+YXNJbWFnZUJ1ZmZlcigp
LCBDb2xvclNwYWNlRGV2aWNlUkdCLCBkcmF3aW5nUmVnaW9uT2ZJbnB1dEltYWdlKGluLT5hYnNv
bHV0ZVBhaW50UmVjdCgpKSk7CiAgICAgICAgIGZpbHRlckNvbnRleHQtPnJlc3RvcmUoKTsKICAg
ICAgICAgYnJlYWs7CiAgICAgY2FzZSBGRUNPTVBPU0lURV9PUEVSQVRPUl9PVVQ6Ci0gICAgICAg
IGZpbHRlckNvbnRleHQtPmRyYXdJbWFnZUJ1ZmZlcihpbi0+cmVzdWx0SW1hZ2UoKSwgQ29sb3JT
cGFjZURldmljZVJHQiwgZHJhd2luZ1JlZ2lvbk9mSW5wdXRJbWFnZShpbi0+YWJzb2x1dGVQYWlu
dFJlY3QoKSkpOwotICAgICAgICBmaWx0ZXJDb250ZXh0LT5kcmF3SW1hZ2VCdWZmZXIoaW4yLT5y
ZXN1bHRJbWFnZSgpLCBDb2xvclNwYWNlRGV2aWNlUkdCLCBkcmF3aW5nUmVnaW9uT2ZJbnB1dElt
YWdlKGluMi0+YWJzb2x1dGVQYWludFJlY3QoKSksIHNyY1JlY3QsIENvbXBvc2l0ZURlc3RpbmF0
aW9uT3V0KTsKKyAgICAgICAgZmlsdGVyQ29udGV4dC0+ZHJhd0ltYWdlQnVmZmVyKGluLT5hc0lt
YWdlQnVmZmVyKCksIENvbG9yU3BhY2VEZXZpY2VSR0IsIGRyYXdpbmdSZWdpb25PZklucHV0SW1h
Z2UoaW4tPmFic29sdXRlUGFpbnRSZWN0KCkpKTsKKyAgICAgICAgZmlsdGVyQ29udGV4dC0+ZHJh
d0ltYWdlQnVmZmVyKGluMi0+YXNJbWFnZUJ1ZmZlcigpLCBDb2xvclNwYWNlRGV2aWNlUkdCLCBk
cmF3aW5nUmVnaW9uT2ZJbnB1dEltYWdlKGluMi0+YWJzb2x1dGVQYWludFJlY3QoKSksIHNyY1Jl
Y3QsIENvbXBvc2l0ZURlc3RpbmF0aW9uT3V0KTsKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBG
RUNPTVBPU0lURV9PUEVSQVRPUl9BVE9QOgotICAgICAgICBmaWx0ZXJDb250ZXh0LT5kcmF3SW1h
Z2VCdWZmZXIoaW4yLT5yZXN1bHRJbWFnZSgpLCBDb2xvclNwYWNlRGV2aWNlUkdCLCBkcmF3aW5n
UmVnaW9uT2ZJbnB1dEltYWdlKGluMi0+YWJzb2x1dGVQYWludFJlY3QoKSkpOwotICAgICAgICBm
aWx0ZXJDb250ZXh0LT5kcmF3SW1hZ2VCdWZmZXIoaW4tPnJlc3VsdEltYWdlKCksIENvbG9yU3Bh
Y2VEZXZpY2VSR0IsIGRyYXdpbmdSZWdpb25PZklucHV0SW1hZ2UoaW4tPmFic29sdXRlUGFpbnRS
ZWN0KCkpLCBzcmNSZWN0LCBDb21wb3NpdGVTb3VyY2VBdG9wKTsKKyAgICAgICAgZmlsdGVyQ29u
dGV4dC0+ZHJhd0ltYWdlQnVmZmVyKGluMi0+YXNJbWFnZUJ1ZmZlcigpLCBDb2xvclNwYWNlRGV2
aWNlUkdCLCBkcmF3aW5nUmVnaW9uT2ZJbnB1dEltYWdlKGluMi0+YWJzb2x1dGVQYWludFJlY3Qo
KSkpOworICAgICAgICBmaWx0ZXJDb250ZXh0LT5kcmF3SW1hZ2VCdWZmZXIoaW4tPmFzSW1hZ2VC
dWZmZXIoKSwgQ29sb3JTcGFjZURldmljZVJHQiwgZHJhd2luZ1JlZ2lvbk9mSW5wdXRJbWFnZShp
bi0+YWJzb2x1dGVQYWludFJlY3QoKSksIHNyY1JlY3QsIENvbXBvc2l0ZVNvdXJjZUF0b3ApOwog
ICAgICAgICBicmVhazsKICAgICBjYXNlIEZFQ09NUE9TSVRFX09QRVJBVE9SX1hPUjoKLSAgICAg
ICAgZmlsdGVyQ29udGV4dC0+ZHJhd0ltYWdlQnVmZmVyKGluMi0+cmVzdWx0SW1hZ2UoKSwgQ29s
b3JTcGFjZURldmljZVJHQiwgZHJhd2luZ1JlZ2lvbk9mSW5wdXRJbWFnZShpbjItPmFic29sdXRl
UGFpbnRSZWN0KCkpKTsKLSAgICAgICAgZmlsdGVyQ29udGV4dC0+ZHJhd0ltYWdlQnVmZmVyKGlu
LT5yZXN1bHRJbWFnZSgpLCBDb2xvclNwYWNlRGV2aWNlUkdCLCBkcmF3aW5nUmVnaW9uT2ZJbnB1
dEltYWdlKGluLT5hYnNvbHV0ZVBhaW50UmVjdCgpKSwgc3JjUmVjdCwgQ29tcG9zaXRlWE9SKTsK
KyAgICAgICAgZmlsdGVyQ29udGV4dC0+ZHJhd0ltYWdlQnVmZmVyKGluMi0+YXNJbWFnZUJ1ZmZl
cigpLCBDb2xvclNwYWNlRGV2aWNlUkdCLCBkcmF3aW5nUmVnaW9uT2ZJbnB1dEltYWdlKGluMi0+
YWJzb2x1dGVQYWludFJlY3QoKSkpOworICAgICAgICBmaWx0ZXJDb250ZXh0LT5kcmF3SW1hZ2VC
dWZmZXIoaW4tPmFzSW1hZ2VCdWZmZXIoKSwgQ29sb3JTcGFjZURldmljZVJHQiwgZHJhd2luZ1Jl
Z2lvbk9mSW5wdXRJbWFnZShpbi0+YWJzb2x1dGVQYWludFJlY3QoKSksIHNyY1JlY3QsIENvbXBv
c2l0ZVhPUik7CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgRkVDT01QT1NJVEVfT1BFUkFUT1Jf
QVJJVEhNRVRJQzogewogICAgICAgICBJbnRSZWN0IGVmZmVjdEFEcmF3aW5nUmVjdCA9IHJlcXVl
c3RlZFJlZ2lvbk9mSW5wdXRJbWFnZURhdGEoaW4tPmFic29sdXRlUGFpbnRSZWN0KCkpOwotICAg
ICAgICBSZWZQdHI8SW1hZ2VEYXRhPiBzcmNJbWFnZURhdGEgPSBpbi0+cmVzdWx0SW1hZ2UoKS0+
Z2V0UHJlbXVsdGlwbGllZEltYWdlRGF0YShlZmZlY3RBRHJhd2luZ1JlY3QpOworICAgICAgICBS
ZWZQdHI8SW1hZ2VEYXRhPiBzcmNJbWFnZURhdGEgPSBpbi0+YXNJbWFnZUJ1ZmZlcigpLT5nZXRQ
cmVtdWx0aXBsaWVkSW1hZ2VEYXRhKGVmZmVjdEFEcmF3aW5nUmVjdCk7CiAgICAgICAgIEJ5dGVB
cnJheSogc3JjUGl4ZWxBcnJheUEgPSBzcmNJbWFnZURhdGEtPmRhdGEoKS0+ZGF0YSgpOwogCiAg
ICAgICAgIEludFJlY3QgZWZmZWN0QkRyYXdpbmdSZWN0ID0gcmVxdWVzdGVkUmVnaW9uT2ZJbnB1
dEltYWdlRGF0YShpbjItPmFic29sdXRlUGFpbnRSZWN0KCkpOwotICAgICAgICBSZWZQdHI8SW1h
Z2VEYXRhPiBpbWFnZURhdGEgPSBpbjItPnJlc3VsdEltYWdlKCktPmdldFByZW11bHRpcGxpZWRJ
bWFnZURhdGEoZWZmZWN0QkRyYXdpbmdSZWN0KTsKKyAgICAgICAgUmVmUHRyPEltYWdlRGF0YT4g
aW1hZ2VEYXRhID0gaW4yLT5hc0ltYWdlQnVmZmVyKCktPmdldFByZW11bHRpcGxpZWRJbWFnZURh
dGEoZWZmZWN0QkRyYXdpbmdSZWN0KTsKICAgICAgICAgQnl0ZUFycmF5KiBzcmNQaXhlbEFycmF5
QiA9IGltYWdlRGF0YS0+ZGF0YSgpLT5kYXRhKCk7CiAKICAgICAgICAgYXJpdGhtZXRpYyhzcmNQ
aXhlbEFycmF5QSwgc3JjUGl4ZWxBcnJheUIsIG1fazEsIG1fazIsIG1fazMsIG1fazQpOwotICAg
ICAgICByZXN1bHRJbWFnZSgpLT5wdXRQcmVtdWx0aXBsaWVkSW1hZ2VEYXRhKGltYWdlRGF0YS5n
ZXQoKSwgSW50UmVjdChJbnRQb2ludCgpLCByZXN1bHRJbWFnZSgpLT5zaXplKCkpLCBJbnRQb2lu
dCgpKTsKKyAgICAgICAgcmVzdWx0SW1hZ2UtPnB1dFByZW11bHRpcGxpZWRJbWFnZURhdGEoaW1h
Z2VEYXRhLmdldCgpLCBJbnRSZWN0KEludFBvaW50KCksIHJlc3VsdEltYWdlLT5zaXplKCkpLCBJ
bnRQb2ludCgpKTsKICAgICAgICAgfQogICAgICAgICBicmVhazsKICAgICBkZWZhdWx0OgpkaWZm
IC0tZ2l0IGEvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29udm9sdmVNYXRy
aXguY3BwIGIvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29udm9sdmVNYXRy
aXguY3BwCmluZGV4IDE5OGQ3NjQuLmVlNzI5ZjQgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvZmlsdGVycy9GRUNvbnZvbHZlTWF0cml4LmNwcAorKysgYi9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDb252b2x2ZU1hdHJpeC5jcHAKQEAgLTM3NCwzMyAr
Mzc0LDM2IEBAIHZvaWQgRkVDb252b2x2ZU1hdHJpeDo6YXBwbHkoKQogewogICAgIEZpbHRlckVm
ZmVjdCogaW4gPSBpbnB1dEVmZmVjdCgwKTsKICAgICBpbi0+YXBwbHkoKTsKLSAgICBpZiAoIWlu
LT5yZXN1bHRJbWFnZSgpKQorICAgIGlmICghaW4tPmhhc1Jlc3VsdCgpKQogICAgICAgICByZXR1
cm47CiAKLSAgICBpZiAoIWVmZmVjdENvbnRleHQoKSkKKyAgICBJbWFnZURhdGEqIHJlc3VsdElt
YWdlOworICAgIGlmIChtX3ByZXNlcnZlQWxwaGEpCisgICAgICAgIHJlc3VsdEltYWdlID0gY3Jl
YXRlVW5tdWx0aXBsaWVkSW1hZ2VSZXN1bHQoKTsKKyAgICBlbHNlCisgICAgICAgIHJlc3VsdElt
YWdlID0gY3JlYXRlUHJlbXVsdGlwbGllZEltYWdlUmVzdWx0KCk7CisgICAgaWYgKCFyZXN1bHRJ
bWFnZSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgSW50UmVjdCBpbWFnZVJlY3QoSW50UG9pbnQo
KSwgcmVzdWx0SW1hZ2UoKS0+c2l6ZSgpKTsKICAgICBJbnRSZWN0IGVmZmVjdERyYXdpbmdSZWN0
ID0gcmVxdWVzdGVkUmVnaW9uT2ZJbnB1dEltYWdlRGF0YShpbi0+YWJzb2x1dGVQYWludFJlY3Qo
KSk7CiAKICAgICBSZWZQdHI8Q2FudmFzUGl4ZWxBcnJheT4gc3JjUGl4ZWxBcnJheTsKICAgICBp
ZiAobV9wcmVzZXJ2ZUFscGhhKQotICAgICAgICBzcmNQaXhlbEFycmF5ID0gaW4tPnJlc3VsdElt
YWdlKCktPmdldFVubXVsdGlwbGllZEltYWdlRGF0YShlZmZlY3REcmF3aW5nUmVjdCktPmRhdGEo
KTsKKyAgICAgICAgc3JjUGl4ZWxBcnJheSA9IGluLT5hc1VubXVsdGlwbGllZEltYWdlKGVmZmVj
dERyYXdpbmdSZWN0KS0+ZGF0YSgpOwogICAgIGVsc2UKLSAgICAgICAgc3JjUGl4ZWxBcnJheSA9
IGluLT5yZXN1bHRJbWFnZSgpLT5nZXRQcmVtdWx0aXBsaWVkSW1hZ2VEYXRhKGVmZmVjdERyYXdp
bmdSZWN0KS0+ZGF0YSgpOwotCi0gICAgUmVmUHRyPEltYWdlRGF0YT4gaW1hZ2VEYXRhID0gSW1h
Z2VEYXRhOjpjcmVhdGUoaW1hZ2VSZWN0LndpZHRoKCksIGltYWdlUmVjdC5oZWlnaHQoKSk7Cisg
ICAgICAgIHNyY1BpeGVsQXJyYXkgPSBpbi0+YXNQcmVtdWx0aXBsaWVkSW1hZ2UoZWZmZWN0RHJh
d2luZ1JlY3QpLT5kYXRhKCk7CiAKKyAgICBJbnRTaXplIHBhaW50U2l6ZSA9IGFic29sdXRlUGFp
bnRSZWN0KCkuc2l6ZSgpOwogICAgIFBhaW50aW5nRGF0YSBwYWludGluZ0RhdGE7CiAgICAgcGFp
bnRpbmdEYXRhLnNyY1BpeGVsQXJyYXkgPSBzcmNQaXhlbEFycmF5LmdldCgpOwotICAgIHBhaW50
aW5nRGF0YS5kc3RQaXhlbEFycmF5ID0gaW1hZ2VEYXRhLT5kYXRhKCk7Ci0gICAgcGFpbnRpbmdE
YXRhLndpZHRoID0gaW1hZ2VSZWN0LndpZHRoKCk7Ci0gICAgcGFpbnRpbmdEYXRhLmhlaWdodCA9
IGltYWdlUmVjdC5oZWlnaHQoKTsKKyAgICBwYWludGluZ0RhdGEuZHN0UGl4ZWxBcnJheSA9IHJl
c3VsdEltYWdlLT5kYXRhKCk7CisgICAgcGFpbnRpbmdEYXRhLndpZHRoID0gcGFpbnRTaXplLndp
ZHRoKCk7CisgICAgcGFpbnRpbmdEYXRhLmhlaWdodCA9IHBhaW50U2l6ZS5oZWlnaHQoKTsKICAg
ICBwYWludGluZ0RhdGEuYmlhcyA9IG1fYmlhcyAqIDI1NTsKIAogICAgIC8vIERyYXdpbmcgZnVs
bHkgY292ZXJlZCBwaXhlbHMKLSAgICBpbnQgY2xpcFJpZ2h0ID0gaW1hZ2VSZWN0LndpZHRoKCkg
LSBtX2tlcm5lbFNpemUud2lkdGgoKTsKLSAgICBpbnQgY2xpcEJvdHRvbSA9IGltYWdlUmVjdC5o
ZWlnaHQoKSAtIG1fa2VybmVsU2l6ZS5oZWlnaHQoKTsKKyAgICBpbnQgY2xpcFJpZ2h0ID0gcGFp
bnRTaXplLndpZHRoKCkgLSBtX2tlcm5lbFNpemUud2lkdGgoKTsKKyAgICBpbnQgY2xpcEJvdHRv
bSA9IHBhaW50U2l6ZS5oZWlnaHQoKSAtIG1fa2VybmVsU2l6ZS5oZWlnaHQoKTsKIAogICAgIGlm
IChjbGlwUmlnaHQgPj0gMCAmJiBjbGlwQm90dG9tID49IDApIHsKICAgICAgICAgc2V0SW50ZXJp
b3JQaXhlbHMocGFpbnRpbmdEYXRhLCBjbGlwUmlnaHQsIGNsaXBCb3R0b20pOwpAQCAtNDA4LDIy
ICs0MTEsMTcgQEAgdm9pZCBGRUNvbnZvbHZlTWF0cml4OjphcHBseSgpCiAgICAgICAgIGNsaXBS
aWdodCArPSBtX3RhcmdldE9mZnNldC54KCkgKyAxOwogICAgICAgICBjbGlwQm90dG9tICs9IG1f
dGFyZ2V0T2Zmc2V0LnkoKSArIDE7CiAgICAgICAgIGlmIChtX3RhcmdldE9mZnNldC55KCkgPiAw
KQotICAgICAgICAgICAgc2V0T3V0ZXJQaXhlbHMocGFpbnRpbmdEYXRhLCAwLCAwLCBpbWFnZVJl
Y3Qud2lkdGgoKSwgbV90YXJnZXRPZmZzZXQueSgpKTsKLSAgICAgICAgaWYgKGNsaXBCb3R0b20g
PCBpbWFnZVJlY3QuaGVpZ2h0KCkpCi0gICAgICAgICAgICBzZXRPdXRlclBpeGVscyhwYWludGlu
Z0RhdGEsIDAsIGNsaXBCb3R0b20sIGltYWdlUmVjdC53aWR0aCgpLCBpbWFnZVJlY3QuaGVpZ2h0
KCkpOworICAgICAgICAgICAgc2V0T3V0ZXJQaXhlbHMocGFpbnRpbmdEYXRhLCAwLCAwLCBwYWlu
dFNpemUud2lkdGgoKSwgbV90YXJnZXRPZmZzZXQueSgpKTsKKyAgICAgICAgaWYgKGNsaXBCb3R0
b20gPCBwYWludFNpemUuaGVpZ2h0KCkpCisgICAgICAgICAgICBzZXRPdXRlclBpeGVscyhwYWlu
dGluZ0RhdGEsIDAsIGNsaXBCb3R0b20sIHBhaW50U2l6ZS53aWR0aCgpLCBwYWludFNpemUuaGVp
Z2h0KCkpOwogICAgICAgICBpZiAobV90YXJnZXRPZmZzZXQueCgpID4gMCkKICAgICAgICAgICAg
IHNldE91dGVyUGl4ZWxzKHBhaW50aW5nRGF0YSwgMCwgbV90YXJnZXRPZmZzZXQueSgpLCBtX3Rh
cmdldE9mZnNldC54KCksIGNsaXBCb3R0b20pOwotICAgICAgICBpZiAoY2xpcFJpZ2h0IDwgaW1h
Z2VSZWN0LndpZHRoKCkpCi0gICAgICAgICAgICBzZXRPdXRlclBpeGVscyhwYWludGluZ0RhdGEs
IGNsaXBSaWdodCwgbV90YXJnZXRPZmZzZXQueSgpLCBpbWFnZVJlY3Qud2lkdGgoKSwgY2xpcEJv
dHRvbSk7CisgICAgICAgIGlmIChjbGlwUmlnaHQgPCBwYWludFNpemUud2lkdGgoKSkKKyAgICAg
ICAgICAgIHNldE91dGVyUGl4ZWxzKHBhaW50aW5nRGF0YSwgY2xpcFJpZ2h0LCBtX3RhcmdldE9m
ZnNldC55KCksIHBhaW50U2l6ZS53aWR0aCgpLCBjbGlwQm90dG9tKTsKICAgICB9IGVsc2Ugewog
ICAgICAgICAvLyBSYXJlIHNpdHVhdGlvbiwgbm90IG9wdGltaXppZWQgZm9yIHNwZWVkCi0gICAg
ICAgIHNldE91dGVyUGl4ZWxzKHBhaW50aW5nRGF0YSwgMCwgMCwgaW1hZ2VSZWN0LndpZHRoKCks
IGltYWdlUmVjdC5oZWlnaHQoKSk7CisgICAgICAgIHNldE91dGVyUGl4ZWxzKHBhaW50aW5nRGF0
YSwgMCwgMCwgcGFpbnRTaXplLndpZHRoKCksIHBhaW50U2l6ZS5oZWlnaHQoKSk7CiAgICAgfQot
Ci0gICAgaWYgKG1fcHJlc2VydmVBbHBoYSkKLSAgICAgICAgcmVzdWx0SW1hZ2UoKS0+cHV0VW5t
dWx0aXBsaWVkSW1hZ2VEYXRhKGltYWdlRGF0YS5nZXQoKSwgaW1hZ2VSZWN0LCBJbnRQb2ludCgp
KTsKLSAgICBlbHNlCi0gICAgICAgIHJlc3VsdEltYWdlKCktPnB1dFByZW11bHRpcGxpZWRJbWFn
ZURhdGEoaW1hZ2VEYXRhLmdldCgpLCBpbWFnZVJlY3QsIEludFBvaW50KCkpOwogfQogCiB2b2lk
IEZFQ29udm9sdmVNYXRyaXg6OmR1bXAoKQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9maWx0ZXJzL0ZFRGlzcGxhY2VtZW50TWFwLmNwcCBiL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvZmlsdGVycy9GRURpc3BsYWNlbWVudE1hcC5jcHAKaW5kZXggNTUzMjFlNi4uMzkx
MWIxMyAxMDA2NDQKLS0tIGEvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFRGlz
cGxhY2VtZW50TWFwLmNwcAorKysgYi9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMv
RkVEaXNwbGFjZW1lbnRNYXAuY3BwCkBAIC04Miw1MyArODIsNTEgQEAgdm9pZCBGRURpc3BsYWNl
bWVudE1hcDo6YXBwbHkoKQogICAgIEZpbHRlckVmZmVjdCogaW4yID0gaW5wdXRFZmZlY3QoMSk7
CiAgICAgaW4tPmFwcGx5KCk7CiAgICAgaW4yLT5hcHBseSgpOwotICAgIGlmICghaW4tPnJlc3Vs
dEltYWdlKCkgfHwgIWluMi0+cmVzdWx0SW1hZ2UoKSkKKyAgICBpZiAoIWluLT5oYXNSZXN1bHQo
KSB8fCAhaW4yLT5oYXNSZXN1bHQoKSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgaWYgKG1feENo
YW5uZWxTZWxlY3RvciA9PSBDSEFOTkVMX1VOS05PV04gfHwgbV95Q2hhbm5lbFNlbGVjdG9yID09
IENIQU5ORUxfVU5LTk9XTikKICAgICAgICAgcmV0dXJuOwogCi0gICAgaWYgKCFlZmZlY3RDb250
ZXh0KCkpCisgICAgSW1hZ2VEYXRhKiByZXN1bHRJbWFnZSA9IGNyZWF0ZVByZW11bHRpcGxpZWRJ
bWFnZVJlc3VsdCgpOworICAgIGlmICghcmVzdWx0SW1hZ2UpCiAgICAgICAgIHJldHVybjsKIAog
ICAgIEludFJlY3QgZWZmZWN0QURyYXdpbmdSZWN0ID0gcmVxdWVzdGVkUmVnaW9uT2ZJbnB1dElt
YWdlRGF0YShpbi0+YWJzb2x1dGVQYWludFJlY3QoKSk7Ci0gICAgUmVmUHRyPEltYWdlRGF0YT4g
c3JjSW1hZ2VEYXRhQSA9IGluLT5yZXN1bHRJbWFnZSgpLT5nZXRQcmVtdWx0aXBsaWVkSW1hZ2VE
YXRhKGVmZmVjdEFEcmF3aW5nUmVjdCk7Ci0gICAgQnl0ZUFycmF5KiBzcmNQaXhlbEFycmF5QSA9
IHNyY0ltYWdlRGF0YUEtPmRhdGEoKS0+ZGF0YSgpIDsKKyAgICBSZWZQdHI8SW1hZ2VEYXRhPiBz
cmNJbWFnZURhdGFBID0gaW4tPmFzUHJlbXVsdGlwbGllZEltYWdlKGVmZmVjdEFEcmF3aW5nUmVj
dCk7CisgICAgQnl0ZUFycmF5KiBzcmNQaXhlbEFycmF5QSA9IHNyY0ltYWdlRGF0YUEtPmRhdGEo
KS0+ZGF0YSgpOwogCiAgICAgSW50UmVjdCBlZmZlY3RCRHJhd2luZ1JlY3QgPSByZXF1ZXN0ZWRS
ZWdpb25PZklucHV0SW1hZ2VEYXRhKGluMi0+YWJzb2x1dGVQYWludFJlY3QoKSk7Ci0gICAgUmVm
UHRyPEltYWdlRGF0YT4gc3JjSW1hZ2VEYXRhQiA9IGluMi0+cmVzdWx0SW1hZ2UoKS0+Z2V0VW5t
dWx0aXBsaWVkSW1hZ2VEYXRhKGVmZmVjdEJEcmF3aW5nUmVjdCk7CisgICAgUmVmUHRyPEltYWdl
RGF0YT4gc3JjSW1hZ2VEYXRhQiA9IGluMi0+YXNVbm11bHRpcGxpZWRJbWFnZShlZmZlY3RCRHJh
d2luZ1JlY3QpOwogICAgIEJ5dGVBcnJheSogc3JjUGl4ZWxBcnJheUIgPSBzcmNJbWFnZURhdGFC
LT5kYXRhKCktPmRhdGEoKTsKIAotICAgIEludFJlY3QgaW1hZ2VSZWN0KEludFBvaW50KCksIHJl
c3VsdEltYWdlKCktPnNpemUoKSk7Ci0gICAgUmVmUHRyPEltYWdlRGF0YT4gaW1hZ2VEYXRhID0g
SW1hZ2VEYXRhOjpjcmVhdGUoaW1hZ2VSZWN0LndpZHRoKCksIGltYWdlUmVjdC5oZWlnaHQoKSk7
Ci0gICAgQnl0ZUFycmF5KiBkc3RQaXhlbEFycmF5ID0gaW1hZ2VEYXRhLT5kYXRhKCktPmRhdGEo
KTsKKyAgICBCeXRlQXJyYXkqIGRzdFBpeGVsQXJyYXkgPSByZXN1bHRJbWFnZS0+ZGF0YSgpLT5k
YXRhKCk7CiAKICAgICBBU1NFUlQoc3JjUGl4ZWxBcnJheUEtPmxlbmd0aCgpID09IHNyY1BpeGVs
QXJyYXlCLT5sZW5ndGgoKSk7CiAKICAgICBGaWx0ZXIqIGZpbHRlciA9IHRoaXMtPmZpbHRlcigp
OworICAgIEludFNpemUgcGFpbnRTaXplID0gYWJzb2x1dGVQYWludFJlY3QoKS5zaXplKCk7CiAg
ICAgZmxvYXQgc2NhbGVYID0gZmlsdGVyLT5hcHBseUhvcml6b250YWxTY2FsZShtX3NjYWxlIC8g
MjU1KTsKICAgICBmbG9hdCBzY2FsZVkgPSBmaWx0ZXItPmFwcGx5VmVydGljYWxTY2FsZShtX3Nj
YWxlIC8gMjU1KTsKICAgICBmbG9hdCBzY2FsZUFkanVzdG1lbnRYID0gZmlsdGVyLT5hcHBseUhv
cml6b250YWxTY2FsZSgwLjVmIC0gMC41ZiAqIG1fc2NhbGUpOwogICAgIGZsb2F0IHNjYWxlQWRq
dXN0bWVudFkgPSBmaWx0ZXItPmFwcGx5VmVydGljYWxTY2FsZSgwLjVmIC0gMC41ZiAqIG1fc2Nh
bGUpOwotICAgIGludCBzdHJpZGUgPSBpbWFnZVJlY3Qud2lkdGgoKSAqIDQ7Ci0gICAgZm9yIChp
bnQgeSA9IDA7IHkgPCBpbWFnZVJlY3QuaGVpZ2h0KCk7ICsreSkgeworICAgIGludCBzdHJpZGUg
PSBwYWludFNpemUud2lkdGgoKSAqIDQ7CisgICAgZm9yIChpbnQgeSA9IDA7IHkgPCBwYWludFNp
emUuaGVpZ2h0KCk7ICsreSkgewogICAgICAgICBpbnQgbGluZSA9IHkgKiBzdHJpZGU7Ci0gICAg
ICAgIGZvciAoaW50IHggPSAwOyB4IDwgaW1hZ2VSZWN0LndpZHRoKCk7ICsreCkgeworICAgICAg
ICBmb3IgKGludCB4ID0gMDsgeCA8IHBhaW50U2l6ZS53aWR0aCgpOyArK3gpIHsKICAgICAgICAg
ICAgIGludCBkc3RJbmRleCA9IGxpbmUgKyB4ICogNDsKICAgICAgICAgICAgIGludCBzcmNYID0g
eCArIHN0YXRpY19jYXN0PGludD4oc2NhbGVYICogc3JjUGl4ZWxBcnJheUItPmdldChkc3RJbmRl
eCArIG1feENoYW5uZWxTZWxlY3RvciAtIDEpICsgc2NhbGVBZGp1c3RtZW50WCk7CiAgICAgICAg
ICAgICBpbnQgc3JjWSA9IHkgKyBzdGF0aWNfY2FzdDxpbnQ+KHNjYWxlWSAqIHNyY1BpeGVsQXJy
YXlCLT5nZXQoZHN0SW5kZXggKyBtX3lDaGFubmVsU2VsZWN0b3IgLSAxKSArIHNjYWxlQWRqdXN0
bWVudFkpOwogICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBjaGFubmVsID0gMDsgY2hhbm5lbCA8
IDQ7ICsrY2hhbm5lbCkgewotICAgICAgICAgICAgICAgIGlmIChzcmNYIDwgMCB8fCBzcmNYID49
IGltYWdlUmVjdC53aWR0aCgpIHx8IHNyY1kgPCAwIHx8IHNyY1kgPj0gaW1hZ2VSZWN0LmhlaWdo
dCgpKQorICAgICAgICAgICAgICAgIGlmIChzcmNYIDwgMCB8fCBzcmNYID49IHBhaW50U2l6ZS53
aWR0aCgpIHx8IHNyY1kgPCAwIHx8IHNyY1kgPj0gcGFpbnRTaXplLmhlaWdodCgpKQogICAgICAg
ICAgICAgICAgICAgICBkc3RQaXhlbEFycmF5LT5zZXQoZHN0SW5kZXggKyBjaGFubmVsLCBzdGF0
aWNfY2FzdDx1bnNpZ25lZCBjaGFyPigwKSk7CiAgICAgICAgICAgICAgICAgZWxzZSB7CiAgICAg
ICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgcGl4ZWxWYWx1ZSA9IHNyY1BpeGVsQXJyYXlB
LT5nZXQoc3JjWSAqIHN0cmlkZSArIHNyY1ggKiA0ICsgY2hhbm5lbCk7CiAgICAgICAgICAgICAg
ICAgICAgIGRzdFBpeGVsQXJyYXktPnNldChkc3RJbmRleCArIGNoYW5uZWwsIHBpeGVsVmFsdWUp
OwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KLQogICAgICAgICB9CiAgICAgfQot
ICAgIHJlc3VsdEltYWdlKCktPnB1dFByZW11bHRpcGxpZWRJbWFnZURhdGEoaW1hZ2VEYXRhLmdl
dCgpLCBpbWFnZVJlY3QsIEludFBvaW50KCkpOwogfQogCiB2b2lkIEZFRGlzcGxhY2VtZW50TWFw
OjpkdW1wKCkKZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9G
RUZsb29kLmNwcCBiL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUZsb29kLmNw
cAppbmRleCBiYzY3MjFiLi41NmE4YjJkIDEwMDY0NAotLS0gYS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2ZpbHRlcnMvRkVGbG9vZC5jcHAKKysrIGIvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9maWx0ZXJzL0ZFRmxvb2QuY3BwCkBAIC02NCwxMiArNjQsMTIgQEAgdm9pZCBGRUZsb29kOjpz
ZXRGbG9vZE9wYWNpdHkoZmxvYXQgZmxvb2RPcGFjaXR5KQogCiB2b2lkIEZFRmxvb2Q6OmFwcGx5
KCkKIHsKLSAgICBHcmFwaGljc0NvbnRleHQqIGZpbHRlckNvbnRleHQgPSBlZmZlY3RDb250ZXh0
KCk7Ci0gICAgaWYgKCFmaWx0ZXJDb250ZXh0KQorICAgIEltYWdlQnVmZmVyKiByZXN1bHRJbWFn
ZSA9IGNyZWF0ZUltYWdlQnVmZmVyUmVzdWx0KCk7CisgICAgaWYgKCFyZXN1bHRJbWFnZSkKICAg
ICAgICAgcmV0dXJuOwogCiAgICAgQ29sb3IgY29sb3IgPSBjb2xvcldpdGhPdmVycmlkZUFscGhh
KGZsb29kQ29sb3IoKS5yZ2IoKSwgZmxvb2RPcGFjaXR5KCkpOwotICAgIGZpbHRlckNvbnRleHQt
PmZpbGxSZWN0KEZsb2F0UmVjdChGbG9hdFBvaW50KCksIGFic29sdXRlUGFpbnRSZWN0KCkuc2l6
ZSgpKSwgY29sb3IsIENvbG9yU3BhY2VEZXZpY2VSR0IpOworICAgIHJlc3VsdEltYWdlLT5jb250
ZXh0KCktPmZpbGxSZWN0KEZsb2F0UmVjdChGbG9hdFBvaW50KCksIGFic29sdXRlUGFpbnRSZWN0
KCkuc2l6ZSgpKSwgY29sb3IsIENvbG9yU3BhY2VEZXZpY2VSR0IpOwogfQogCiB2b2lkIEZFRmxv
b2Q6OmR1bXAoKQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJz
L0ZFR2F1c3NpYW5CbHVyLmNwcCBiL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9G
RUdhdXNzaWFuQmx1ci5jcHAKaW5kZXggODc2ZTRiMy4uNjU1MWJiMCAxMDA2NDQKLS0tIGEvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFR2F1c3NpYW5CbHVyLmNwcAorKysgYi9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVHYXVzc2lhbkJsdXIuY3BwCkBAIC0x
NjYsMzIgKzE2NiwzMSBAQCB2b2lkIEZFR2F1c3NpYW5CbHVyOjphcHBseSgpCiB7CiAgICAgRmls
dGVyRWZmZWN0KiBpbiA9IGlucHV0RWZmZWN0KDApOwogICAgIGluLT5hcHBseSgpOwotICAgIGlm
ICghaW4tPnJlc3VsdEltYWdlKCkpCisgICAgaWYgKCFpbi0+aGFzUmVzdWx0KCkpCiAgICAgICAg
IHJldHVybjsKIAotICAgIGlmICghZWZmZWN0Q29udGV4dCgpKQorICAgIEltYWdlRGF0YSogcmVz
dWx0SW1hZ2UgPSBjcmVhdGVQcmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQoKTsKKyAgICBpZiAoIXJl
c3VsdEltYWdlKQogICAgICAgICByZXR1cm47CiAKICAgICBzZXRJc0FscGhhSW1hZ2UoaW4tPmlz
QWxwaGFJbWFnZSgpKTsKIAogICAgIEludFJlY3QgZWZmZWN0RHJhd2luZ1JlY3QgPSByZXF1ZXN0
ZWRSZWdpb25PZklucHV0SW1hZ2VEYXRhKGluLT5hYnNvbHV0ZVBhaW50UmVjdCgpKTsKLSAgICBS
ZWZQdHI8SW1hZ2VEYXRhPiBzcmNJbWFnZURhdGEgPSBpbi0+cmVzdWx0SW1hZ2UoKS0+Z2V0UHJl
bXVsdGlwbGllZEltYWdlRGF0YShlZmZlY3REcmF3aW5nUmVjdCk7Ci0gICAgSW50UmVjdCBpbWFn
ZVJlY3QoSW50UG9pbnQoKSwgcmVzdWx0SW1hZ2UoKS0+c2l6ZSgpKTsKKyAgICBpbi0+YXNQcmVt
dWx0aXBsaWVkSW1hZ2UocmVzdWx0SW1hZ2UsIGVmZmVjdERyYXdpbmdSZWN0KTsKIAotICAgIGlm
ICghbV9zdGRYICYmICFtX3N0ZFkpIHsKLSAgICAgICAgcmVzdWx0SW1hZ2UoKS0+cHV0UHJlbXVs
dGlwbGllZEltYWdlRGF0YShzcmNJbWFnZURhdGEuZ2V0KCksIGltYWdlUmVjdCwgSW50UG9pbnQo
KSk7CisgICAgaWYgKCFtX3N0ZFggJiYgIW1fc3RkWSkKICAgICAgICAgcmV0dXJuOwotICAgIH0K
IAogICAgIHVuc2lnbmVkIGtlcm5lbFNpemVYID0gMDsKICAgICB1bnNpZ25lZCBrZXJuZWxTaXpl
WSA9IDA7CiAgICAgY2FsY3VsYXRlS2VybmVsU2l6ZShmaWx0ZXIoKSwga2VybmVsU2l6ZVgsIGtl
cm5lbFNpemVZLCBtX3N0ZFgsIG1fc3RkWSk7CiAKLSAgICBCeXRlQXJyYXkqIHNyY1BpeGVsQXJy
YXkgPSBzcmNJbWFnZURhdGEtPmRhdGEoKS0+ZGF0YSgpOwotICAgIFJlZlB0cjxJbWFnZURhdGE+
IHRtcEltYWdlRGF0YSA9IEltYWdlRGF0YTo6Y3JlYXRlKGltYWdlUmVjdC53aWR0aCgpLCBpbWFn
ZVJlY3QuaGVpZ2h0KCkpOworICAgIEludFNpemUgcGFpbnRTaXplID0gYWJzb2x1dGVQYWludFJl
Y3QoKS5zaXplKCk7CisgICAgQnl0ZUFycmF5KiBzcmNQaXhlbEFycmF5ID0gcmVzdWx0SW1hZ2Ut
PmRhdGEoKS0+ZGF0YSgpOworICAgIFJlZlB0cjxJbWFnZURhdGE+IHRtcEltYWdlRGF0YSA9IElt
YWdlRGF0YTo6Y3JlYXRlKHBhaW50U2l6ZS53aWR0aCgpLCBwYWludFNpemUuaGVpZ2h0KCkpOwog
ICAgIEJ5dGVBcnJheSogdG1wUGl4ZWxBcnJheSA9IHRtcEltYWdlRGF0YS0+ZGF0YSgpLT5kYXRh
KCk7CiAKLSAgICBpbnQgc3RyaWRlID0gNCAqIGltYWdlUmVjdC53aWR0aCgpOworICAgIGludCBz
dHJpZGUgPSA0ICogcGFpbnRTaXplLndpZHRoKCk7CiAgICAgaW50IGR4TGVmdCA9IDA7CiAgICAg
aW50IGR4UmlnaHQgPSAwOwogICAgIGludCBkeUxlZnQgPSAwOwpAQCAtMTk5LDcgKzE5OCw3IEBA
IHZvaWQgRkVHYXVzc2lhbkJsdXI6OmFwcGx5KCkKICAgICBmb3IgKGludCBpID0gMDsgaSA8IDM7
ICsraSkgewogICAgICAgICBpZiAoa2VybmVsU2l6ZVgpIHsKICAgICAgICAgICAgIGtlcm5lbFBv
c2l0aW9uKGksIGtlcm5lbFNpemVYLCBkeExlZnQsIGR4UmlnaHQpOwotICAgICAgICAgICAgYm94
Qmx1cihzcmNQaXhlbEFycmF5LCB0bXBQaXhlbEFycmF5LCBrZXJuZWxTaXplWCwgZHhMZWZ0LCBk
eFJpZ2h0LCA0LCBzdHJpZGUsIGltYWdlUmVjdC53aWR0aCgpLCBpbWFnZVJlY3QuaGVpZ2h0KCks
IGlzQWxwaGFJbWFnZSgpKTsKKyAgICAgICAgICAgIGJveEJsdXIoc3JjUGl4ZWxBcnJheSwgdG1w
UGl4ZWxBcnJheSwga2VybmVsU2l6ZVgsIGR4TGVmdCwgZHhSaWdodCwgNCwgc3RyaWRlLCBwYWlu
dFNpemUud2lkdGgoKSwgcGFpbnRTaXplLmhlaWdodCgpLCBpc0FscGhhSW1hZ2UoKSk7CiAgICAg
ICAgIH0gZWxzZSB7CiAgICAgICAgICAgICBCeXRlQXJyYXkqIGF1eFBpeGVsQXJyYXkgPSB0bXBQ
aXhlbEFycmF5OwogICAgICAgICAgICAgdG1wUGl4ZWxBcnJheSA9IHNyY1BpeGVsQXJyYXk7CkBA
IC0yMDgsMTUgKzIwNywxMyBAQCB2b2lkIEZFR2F1c3NpYW5CbHVyOjphcHBseSgpCiAKICAgICAg
ICAgaWYgKGtlcm5lbFNpemVZKSB7CiAgICAgICAgICAgICBrZXJuZWxQb3NpdGlvbihpLCBrZXJu
ZWxTaXplWSwgZHlMZWZ0LCBkeVJpZ2h0KTsKLSAgICAgICAgICAgIGJveEJsdXIodG1wUGl4ZWxB
cnJheSwgc3JjUGl4ZWxBcnJheSwga2VybmVsU2l6ZVksIGR5TGVmdCwgZHlSaWdodCwgc3RyaWRl
LCA0LCBpbWFnZVJlY3QuaGVpZ2h0KCksIGltYWdlUmVjdC53aWR0aCgpLCBpc0FscGhhSW1hZ2Uo
KSk7CisgICAgICAgICAgICBib3hCbHVyKHRtcFBpeGVsQXJyYXksIHNyY1BpeGVsQXJyYXksIGtl
cm5lbFNpemVZLCBkeUxlZnQsIGR5UmlnaHQsIHN0cmlkZSwgNCwgcGFpbnRTaXplLmhlaWdodCgp
LCBwYWludFNpemUud2lkdGgoKSwgaXNBbHBoYUltYWdlKCkpOwogICAgICAgICB9IGVsc2Ugewog
ICAgICAgICAgICAgQnl0ZUFycmF5KiBhdXhQaXhlbEFycmF5ID0gdG1wUGl4ZWxBcnJheTsKICAg
ICAgICAgICAgIHRtcFBpeGVsQXJyYXkgPSBzcmNQaXhlbEFycmF5OwogICAgICAgICAgICAgc3Jj
UGl4ZWxBcnJheSA9IGF1eFBpeGVsQXJyYXk7CiAgICAgICAgIH0KICAgICB9Ci0KLSAgICByZXN1
bHRJbWFnZSgpLT5wdXRQcmVtdWx0aXBsaWVkSW1hZ2VEYXRhKHNyY0ltYWdlRGF0YS5nZXQoKSwg
aW1hZ2VSZWN0LCBJbnRQb2ludCgpKTsKIH0KIAogdm9pZCBGRUdhdXNzaWFuQmx1cjo6ZHVtcCgp
CmRpZmYgLS1naXQgYS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVMaWdodGlu
Zy5jcHAgYi9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVMaWdodGluZy5jcHAK
aW5kZXggODEyOTIwYy4uNjJlNDkwOSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9maWx0ZXJzL0ZFTGlnaHRpbmcuY3BwCisrKyBiL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvZmlsdGVycy9GRUxpZ2h0aW5nLmNwcApAQCAtMzMzLDE3ICszMzMsMTggQEAgdm9pZCBGRUxp
Z2h0aW5nOjphcHBseSgpCiB7CiAgICAgRmlsdGVyRWZmZWN0KiBpbiA9IGlucHV0RWZmZWN0KDAp
OwogICAgIGluLT5hcHBseSgpOwotICAgIGlmICghaW4tPnJlc3VsdEltYWdlKCkpCisgICAgaWYg
KCFpbi0+aGFzUmVzdWx0KCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIGlmICghZWZmZWN0Q29u
dGV4dCgpKQorICAgIEltYWdlRGF0YSogcmVzdWx0SW1hZ2UgPSBjcmVhdGVVbm11bHRpcGxpZWRJ
bWFnZVJlc3VsdCgpOworICAgIGlmICghcmVzdWx0SW1hZ2UpCiAgICAgICAgIHJldHVybjsKIAog
ICAgIHNldElzQWxwaGFJbWFnZShmYWxzZSk7CiAKICAgICBJbnRSZWN0IGVmZmVjdERyYXdpbmdS
ZWN0ID0gcmVxdWVzdGVkUmVnaW9uT2ZJbnB1dEltYWdlRGF0YShpbi0+YWJzb2x1dGVQYWludFJl
Y3QoKSk7Ci0gICAgUmVmUHRyPEltYWdlRGF0YT4gc3JjSW1hZ2VEYXRhID0gaW4tPnJlc3VsdElt
YWdlKCktPmdldFVubXVsdGlwbGllZEltYWdlRGF0YShlZmZlY3REcmF3aW5nUmVjdCk7Ci0gICAg
Qnl0ZUFycmF5KiBzcmNQaXhlbEFycmF5ID0gc3JjSW1hZ2VEYXRhLT5kYXRhKCktPmRhdGEoKTsK
KyAgICBpbi0+YXNVbm11bHRpcGxpZWRJbWFnZShyZXN1bHRJbWFnZSwgZWZmZWN0RHJhd2luZ1Jl
Y3QpOworICAgIEJ5dGVBcnJheSogc3JjUGl4ZWxBcnJheSA9IHJlc3VsdEltYWdlLT5kYXRhKCkt
PmRhdGEoKTsKIAogICAgIC8vIEZJWE1FOiBzdXBwb3J0IGtlcm5lbFVuaXRMZW5ndGhzIG90aGVy
IHRoYW4gKDEsMSkuIFRoZSBpc3N1ZSBoZXJlIGlzIHRoYXQgdGhlIFczCiAgICAgLy8gc3RhbmRh
cmQgaGFzIG5vIHRlc3QgY2FzZSBmb3IgdGhlbSwgYW5kIG90aGVyIGJyb3dzZXJzIChsaWtlIEZp
cmVmb3gpIGhhcyBzdHJhbmdlCkBAIC0zNTEsOCArMzUyLDcgQEAgdm9pZCBGRUxpZ2h0aW5nOjph
cHBseSgpCiAgICAgLy8gQW55d2F5LCBmZUNvbnZvbHZlTWF0cml4IHNob3VsZCBhbHNvIHVzZSB0
aGUgaW1wbGVtZW50YXRpb24KIAogICAgIEludFNpemUgYWJzb2x1dGVQYWludFNpemUgPSBhYnNv
bHV0ZVBhaW50UmVjdCgpLnNpemUoKTsKLSAgICBpZiAoZHJhd0xpZ2h0aW5nKHNyY1BpeGVsQXJy
YXksIGFic29sdXRlUGFpbnRTaXplLndpZHRoKCksIGFic29sdXRlUGFpbnRTaXplLmhlaWdodCgp
KSkKLSAgICAgICAgcmVzdWx0SW1hZ2UoKS0+cHV0VW5tdWx0aXBsaWVkSW1hZ2VEYXRhKHNyY0lt
YWdlRGF0YS5nZXQoKSwgSW50UmVjdChJbnRQb2ludCgpLCBhYnNvbHV0ZVBhaW50U2l6ZSksIElu
dFBvaW50KCkpOworICAgIGRyYXdMaWdodGluZyhzcmNQaXhlbEFycmF5LCBhYnNvbHV0ZVBhaW50
U2l6ZS53aWR0aCgpLCBhYnNvbHV0ZVBhaW50U2l6ZS5oZWlnaHQoKSk7CiB9CiAKIH0gLy8gbmFt
ZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmls
dGVycy9GRU1lcmdlLmNwcCBiL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRU1l
cmdlLmNwcAppbmRleCBjYTUzYTg2Li4zOTdjNjY2IDEwMDY0NAotLS0gYS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVNZXJnZS5jcHAKKysrIGIvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9maWx0ZXJzL0ZFTWVyZ2UuY3BwCkBAIC00NiwxNyArNDYsMTggQEAgdm9pZCBGRU1l
cmdlOjphcHBseSgpCiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHNpemU7ICsraSkgewog
ICAgICAgICBGaWx0ZXJFZmZlY3QqIGluID0gaW5wdXRFZmZlY3QoaSk7CiAgICAgICAgIGluLT5h
cHBseSgpOwotICAgICAgICBpZiAoIWluLT5yZXN1bHRJbWFnZSgpKQorICAgICAgICBpZiAoIWlu
LT5oYXNSZXN1bHQoKSkKICAgICAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBHcmFwaGlj
c0NvbnRleHQqIGZpbHRlckNvbnRleHQgPSBlZmZlY3RDb250ZXh0KCk7Ci0gICAgaWYgKCFmaWx0
ZXJDb250ZXh0KQorICAgIEltYWdlQnVmZmVyKiByZXN1bHRJbWFnZSA9IGNyZWF0ZUltYWdlQnVm
ZmVyUmVzdWx0KCk7CisgICAgaWYgKCFyZXN1bHRJbWFnZSkKICAgICAgICAgcmV0dXJuOwogCisg
ICAgR3JhcGhpY3NDb250ZXh0KiBmaWx0ZXJDb250ZXh0ID0gcmVzdWx0SW1hZ2UtPmNvbnRleHQo
KTsKICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgc2l6ZTsgKytpKSB7CiAgICAgICAgIEZp
bHRlckVmZmVjdCogaW4gPSBpbnB1dEVmZmVjdChpKTsKLSAgICAgICAgZmlsdGVyQ29udGV4dC0+
ZHJhd0ltYWdlQnVmZmVyKGluLT5yZXN1bHRJbWFnZSgpLCBDb2xvclNwYWNlRGV2aWNlUkdCLCBk
cmF3aW5nUmVnaW9uT2ZJbnB1dEltYWdlKGluLT5hYnNvbHV0ZVBhaW50UmVjdCgpKSk7CisgICAg
ICAgIGZpbHRlckNvbnRleHQtPmRyYXdJbWFnZUJ1ZmZlcihpbi0+YXNJbWFnZUJ1ZmZlcigpLCBD
b2xvclNwYWNlRGV2aWNlUkdCLCBkcmF3aW5nUmVnaW9uT2ZJbnB1dEltYWdlKGluLT5hYnNvbHV0
ZVBhaW50UmVjdCgpKSk7CiAgICAgfQogfQogCmRpZmYgLS1naXQgYS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2ZpbHRlcnMvRkVNZXJnZS5oIGIvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9m
aWx0ZXJzL0ZFTWVyZ2UuaAppbmRleCAyNGQwNzFlLi5kYmVlNjEwIDEwMDY0NAotLS0gYS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVNZXJnZS5oCisrKyBiL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRU1lcmdlLmgKQEAgLTIwLDcgKzIwLDcgQEAKICAqLwog
CiAjaWZuZGVmIEZFTWVyZ2VfaAotI2RlZmluZSBFTWVyZ2VfaAorI2RlZmluZSBGRU1lcmdlX2gK
IAogI2lmIEVOQUJMRShGSUxURVJTKQogI2luY2x1ZGUgIkZpbHRlckVmZmVjdC5oIgpkaWZmIC0t
Z2l0IGEvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFTW9ycGhvbG9neS5jcHAg
Yi9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVNb3JwaG9sb2d5LmNwcAppbmRl
eCBkZDc2NTlhLi41MTU4NTBiIDEwMDY0NAotLS0gYS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2ZpbHRlcnMvRkVNb3JwaG9sb2d5LmNwcAorKysgYi9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2ZpbHRlcnMvRkVNb3JwaG9sb2d5LmNwcApAQCAtOTMsMTAgKzkzLDExIEBAIHZvaWQgRkVNb3Jw
aG9sb2d5OjphcHBseSgpCiB7CiAgICAgRmlsdGVyRWZmZWN0KiBpbiA9IGlucHV0RWZmZWN0KDAp
OwogICAgIGluLT5hcHBseSgpOwotICAgIGlmICghaW4tPnJlc3VsdEltYWdlKCkpCisgICAgaWYg
KCFpbi0+aGFzUmVzdWx0KCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIGlmICghZWZmZWN0Q29u
dGV4dCgpKQorICAgIEltYWdlRGF0YSogcmVzdWx0SW1hZ2UgPSBjcmVhdGVQcmVtdWx0aXBsaWVk
SW1hZ2VSZXN1bHQoKTsKKyAgICBpZiAoIXJlc3VsdEltYWdlKQogICAgICAgICByZXR1cm47CiAK
ICAgICBzZXRJc0FscGhhSW1hZ2UoaW4tPmlzQWxwaGFJbWFnZSgpKTsKQEAgLTEwNywxMiArMTA4
LDEwIEBAIHZvaWQgRkVNb3JwaG9sb2d5OjphcHBseSgpCiAgICAgaW50IHJhZGl1c1ggPSBzdGF0
aWNfY2FzdDxpbnQ+KGZsb29yZihmaWx0ZXItPmFwcGx5SG9yaXpvbnRhbFNjYWxlKG1fcmFkaXVz
WCkpKTsKICAgICBpbnQgcmFkaXVzWSA9IHN0YXRpY19jYXN0PGludD4oZmxvb3JmKGZpbHRlci0+
YXBwbHlWZXJ0aWNhbFNjYWxlKG1fcmFkaXVzWSkpKTsKIAotICAgIEludFJlY3QgaW1hZ2VSZWN0
KEludFBvaW50KCksIHJlc3VsdEltYWdlKCktPnNpemUoKSk7CiAgICAgSW50UmVjdCBlZmZlY3RE
cmF3aW5nUmVjdCA9IHJlcXVlc3RlZFJlZ2lvbk9mSW5wdXRJbWFnZURhdGEoaW4tPmFic29sdXRl
UGFpbnRSZWN0KCkpOwotICAgIFJlZlB0cjxJbWFnZURhdGE+IHNyY0ltYWdlRGF0YSA9IGluLT5y
ZXN1bHRJbWFnZSgpLT5nZXRQcmVtdWx0aXBsaWVkSW1hZ2VEYXRhKGVmZmVjdERyYXdpbmdSZWN0
KTsKKyAgICBSZWZQdHI8SW1hZ2VEYXRhPiBzcmNJbWFnZURhdGEgPSBpbi0+YXNQcmVtdWx0aXBs
aWVkSW1hZ2UoZWZmZWN0RHJhd2luZ1JlY3QpOwogICAgIEJ5dGVBcnJheSogc3JjUGl4ZWxBcnJh
eSA9IHNyY0ltYWdlRGF0YS0+ZGF0YSgpLT5kYXRhKCk7Ci0gICAgUmVmUHRyPEltYWdlRGF0YT4g
aW1hZ2VEYXRhID0gSW1hZ2VEYXRhOjpjcmVhdGUoaW1hZ2VSZWN0LndpZHRoKCksIGltYWdlUmVj
dC5oZWlnaHQoKSk7Ci0gICAgQnl0ZUFycmF5KiBkc3RQaXhlbEFycmF5ID0gaW1hZ2VEYXRhLT5k
YXRhKCktPmRhdGEoKTsKKyAgICBCeXRlQXJyYXkqIGRzdFBpeGVsQXJyYXkgPSByZXN1bHRJbWFn
ZS0+ZGF0YSgpLT5kYXRhKCk7CiAKICAgICBpbnQgZWZmZWN0V2lkdGggPSBlZmZlY3REcmF3aW5n
UmVjdC53aWR0aCgpICogNDsKICAgICAKQEAgLTE2Miw3ICsxNjEsNiBAQCB2b2lkIEZFTW9ycGhv
bG9neTo6YXBwbHkoKQogICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgfQotICAgIHJlc3Vs
dEltYWdlKCktPnB1dFByZW11bHRpcGxpZWRJbWFnZURhdGEoaW1hZ2VEYXRhLmdldCgpLCBpbWFn
ZVJlY3QsIEludFBvaW50KCkpOwogfQogCiB2b2lkIEZFTW9ycGhvbG9neTo6ZHVtcCgpCmRpZmYg
LS1naXQgYS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVPZmZzZXQuY3BwIGIv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFT2Zmc2V0LmNwcAppbmRleCBiNjQw
MDU0Li41MmYxZGUzIDEwMDY0NAotLS0gYS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRl
cnMvRkVPZmZzZXQuY3BwCisrKyBiL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9G
RU9mZnNldC5jcHAKQEAgLTc2LDExICs3NiwxMSBAQCB2b2lkIEZFT2Zmc2V0OjphcHBseSgpCiB7
CiAgICAgRmlsdGVyRWZmZWN0KiBpbiA9IGlucHV0RWZmZWN0KDApOwogICAgIGluLT5hcHBseSgp
OwotICAgIGlmICghaW4tPnJlc3VsdEltYWdlKCkpCisgICAgaWYgKCFpbi0+aGFzUmVzdWx0KCkp
CiAgICAgICAgIHJldHVybjsKIAotICAgIEdyYXBoaWNzQ29udGV4dCogZmlsdGVyQ29udGV4dCA9
IGVmZmVjdENvbnRleHQoKTsKLSAgICBpZiAoIWZpbHRlckNvbnRleHQpCisgICAgSW1hZ2VCdWZm
ZXIqIHJlc3VsdEltYWdlID0gY3JlYXRlSW1hZ2VCdWZmZXJSZXN1bHQoKTsKKyAgICBpZiAoIXJl
c3VsdEltYWdlKQogICAgICAgICByZXR1cm47CiAKICAgICBzZXRJc0FscGhhSW1hZ2UoaW4tPmlz
QWxwaGFJbWFnZSgpKTsKQEAgLTg4LDcgKzg4LDcgQEAgdm9pZCBGRU9mZnNldDo6YXBwbHkoKQog
ICAgIEZsb2F0UmVjdCBkcmF3aW5nUmVnaW9uID0gZHJhd2luZ1JlZ2lvbk9mSW5wdXRJbWFnZShp
bi0+YWJzb2x1dGVQYWludFJlY3QoKSk7CiAgICAgRmlsdGVyKiBmaWx0ZXIgPSB0aGlzLT5maWx0
ZXIoKTsKICAgICBkcmF3aW5nUmVnaW9uLm1vdmUoZmlsdGVyLT5hcHBseUhvcml6b250YWxTY2Fs
ZShtX2R4KSwgZmlsdGVyLT5hcHBseVZlcnRpY2FsU2NhbGUobV9keSkpOwotICAgIGZpbHRlckNv
bnRleHQtPmRyYXdJbWFnZUJ1ZmZlcihpbi0+cmVzdWx0SW1hZ2UoKSwgQ29sb3JTcGFjZURldmlj
ZVJHQiwgZHJhd2luZ1JlZ2lvbik7CisgICAgcmVzdWx0SW1hZ2UtPmNvbnRleHQoKS0+ZHJhd0lt
YWdlQnVmZmVyKGluLT5hc0ltYWdlQnVmZmVyKCksIENvbG9yU3BhY2VEZXZpY2VSR0IsIGRyYXdp
bmdSZWdpb24pOwogfQogCiB2b2lkIEZFT2Zmc2V0OjpkdW1wKCkKZGlmZiAtLWdpdCBhL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRVRpbGUuY3BwIGIvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9maWx0ZXJzL0ZFVGlsZS5jcHAKaW5kZXggNmIxMTQwMS4uMDUyMjdiMSAxMDA2
NDQKLS0tIGEvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFVGlsZS5jcHAKKysr
IGIvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFVGlsZS5jcHAKQEAgLTQ3LDEx
ICs0NywxMSBAQCB2b2lkIEZFVGlsZTo6YXBwbHkoKQogI2lmIEVOQUJMRShTVkcpCiAgICAgRmls
dGVyRWZmZWN0KiBpbiA9IGlucHV0RWZmZWN0KDApOwogICAgIGluLT5hcHBseSgpOwotICAgIGlm
ICghaW4tPnJlc3VsdEltYWdlKCkpCisgICAgaWYgKCFpbi0+aGFzUmVzdWx0KCkpCiAgICAgICAg
IHJldHVybjsKIAotICAgIEdyYXBoaWNzQ29udGV4dCogZmlsdGVyQ29udGV4dCA9IGVmZmVjdENv
bnRleHQoKTsKLSAgICBpZiAoIWZpbHRlckNvbnRleHQpCisgICAgSW1hZ2VCdWZmZXIqIHJlc3Vs
dEltYWdlID0gY3JlYXRlSW1hZ2VCdWZmZXJSZXN1bHQoKTsKKyAgICBpZiAoIXJlc3VsdEltYWdl
KQogICAgICAgICByZXR1cm47CiAKICAgICBzZXRJc0FscGhhSW1hZ2UoaW4tPmlzQWxwaGFJbWFn
ZSgpKTsKQEAgLTczLDEzICs3MywxNCBAQCB2b2lkIEZFVGlsZTo6YXBwbHkoKQogCiAgICAgR3Jh
cGhpY3NDb250ZXh0KiB0aWxlSW1hZ2VDb250ZXh0ID0gdGlsZUltYWdlLT5jb250ZXh0KCk7CiAg
ICAgdGlsZUltYWdlQ29udGV4dC0+dHJhbnNsYXRlKC1pbk1heEVmZmVjdExvY2F0aW9uLngoKSwg
LWluTWF4RWZmZWN0TG9jYXRpb24ueSgpKTsKLSAgICB0aWxlSW1hZ2VDb250ZXh0LT5kcmF3SW1h
Z2VCdWZmZXIoaW4tPnJlc3VsdEltYWdlKCksIENvbG9yU3BhY2VEZXZpY2VSR0IsIGluLT5hYnNv
bHV0ZVBhaW50UmVjdCgpLmxvY2F0aW9uKCkpOworICAgIHRpbGVJbWFnZUNvbnRleHQtPmRyYXdJ
bWFnZUJ1ZmZlcihpbi0+YXNJbWFnZUJ1ZmZlcigpLCBDb2xvclNwYWNlRGV2aWNlUkdCLCBpbi0+
YWJzb2x1dGVQYWludFJlY3QoKS5sb2NhdGlvbigpKTsKIAogICAgIFJlZlB0cjxQYXR0ZXJuPiBw
YXR0ZXJuID0gUGF0dGVybjo6Y3JlYXRlKHRpbGVJbWFnZS0+Y29weUltYWdlKCksIHRydWUsIHRy
dWUpOwogCiAgICAgQWZmaW5lVHJhbnNmb3JtIHBhdHRlcm5UcmFuc2Zvcm07CiAgICAgcGF0dGVy
blRyYW5zZm9ybS50cmFuc2xhdGUoaW5NYXhFZmZlY3RMb2NhdGlvbi54KCkgLSBtYXhFZmZlY3RM
b2NhdGlvbi54KCksIGluTWF4RWZmZWN0TG9jYXRpb24ueSgpIC0gbWF4RWZmZWN0TG9jYXRpb24u
eSgpKTsKICAgICBwYXR0ZXJuLT5zZXRQYXR0ZXJuU3BhY2VUcmFuc2Zvcm0ocGF0dGVyblRyYW5z
Zm9ybSk7CisgICAgR3JhcGhpY3NDb250ZXh0KiBmaWx0ZXJDb250ZXh0ID0gcmVzdWx0SW1hZ2Ut
PmNvbnRleHQoKTsKICAgICBmaWx0ZXJDb250ZXh0LT5zZXRGaWxsUGF0dGVybihwYXR0ZXJuKTsK
ICAgICBmaWx0ZXJDb250ZXh0LT5maWxsUmVjdChGbG9hdFJlY3QoRmxvYXRQb2ludCgpLCBhYnNv
bHV0ZVBhaW50UmVjdCgpLnNpemUoKSkpOwogI2VuZGlmCmRpZmYgLS1naXQgYS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVUdXJidWxlbmNlLmNwcCBiL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvZmlsdGVycy9GRVR1cmJ1bGVuY2UuY3BwCmluZGV4IDg5MTRkYjcuLmRmN2M0
ZjMgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRVR1cmJ1
bGVuY2UuY3BwCisrKyBiL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRVR1cmJ1
bGVuY2UuY3BwCkBAIC0zMjAsMTUgKzMyMCwxNCBAQCB1bnNpZ25lZCBjaGFyIEZFVHVyYnVsZW5j
ZTo6Y2FsY3VsYXRlVHVyYnVsZW5jZVZhbHVlRm9yUG9pbnQoUGFpbnRpbmdEYXRhJiBwYWludAog
CiB2b2lkIEZFVHVyYnVsZW5jZTo6YXBwbHkoKQogewotICAgIGlmICghZWZmZWN0Q29udGV4dCgp
KQorICAgIEltYWdlRGF0YSogcmVzdWx0SW1hZ2UgPSBjcmVhdGVVbm11bHRpcGxpZWRJbWFnZVJl
c3VsdCgpOworICAgIGlmICghcmVzdWx0SW1hZ2UpCiAgICAgICAgIHJldHVybjsKIAotICAgIElu
dFJlY3QgaW1hZ2VSZWN0KEludFBvaW50KCksIHJlc3VsdEltYWdlKCktPnNpemUoKSk7Ci0gICAg
aWYgKCFpbWFnZVJlY3Quc2l6ZSgpLndpZHRoKCkgfHwgIWltYWdlUmVjdC5zaXplKCkuaGVpZ2h0
KCkpCisgICAgaWYgKCFhYnNvbHV0ZVBhaW50UmVjdCgpLndpZHRoKCkgfHwgIWFic29sdXRlUGFp
bnRSZWN0KCkuaGVpZ2h0KCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIFJlZlB0cjxJbWFnZURh
dGE+IGltYWdlRGF0YSA9IEltYWdlRGF0YTo6Y3JlYXRlKGltYWdlUmVjdC53aWR0aCgpLCBpbWFn
ZVJlY3QuaGVpZ2h0KCkpOwotICAgIEJ5dGVBcnJheSogcGl4ZWxBcnJheSA9IGltYWdlRGF0YS0+
ZGF0YSgpLT5kYXRhKCk7CisgICAgQnl0ZUFycmF5KiBwaXhlbEFycmF5ID0gcmVzdWx0SW1hZ2Ut
PmRhdGEoKS0+ZGF0YSgpOwogICAgIFBhaW50aW5nRGF0YSBwYWludGluZ0RhdGEobV9zZWVkLCBy
b3VuZGVkSW50U2l6ZShmaWx0ZXJQcmltaXRpdmVTdWJyZWdpb24oKS5zaXplKCkpKTsKICAgICBp
bml0UGFpbnQocGFpbnRpbmdEYXRhKTsKIApAQCAtMzM2LDE2ICszMzUsMTUgQEAgdm9pZCBGRVR1
cmJ1bGVuY2U6OmFwcGx5KCkKICAgICBGbG9hdFBvaW50IHBvaW50OwogICAgIHBvaW50LnNldFko
ZmlsdGVyUmVnaW9uLnkoKSk7CiAgICAgaW50IGluZGV4T2ZQaXhlbENoYW5uZWwgPSAwOwotICAg
IGZvciAoaW50IHkgPSAwOyB5IDwgaW1hZ2VSZWN0LmhlaWdodCgpOyArK3kpIHsKKyAgICBmb3Ig
KGludCB5ID0gMDsgeSA8IGFic29sdXRlUGFpbnRSZWN0KCkuaGVpZ2h0KCk7ICsreSkgewogICAg
ICAgICBwb2ludC5zZXRZKHBvaW50LnkoKSArIDEpOwogICAgICAgICBwb2ludC5zZXRYKGZpbHRl
clJlZ2lvbi54KCkpOwotICAgICAgICBmb3IgKGludCB4ID0gMDsgeCA8IGltYWdlUmVjdC53aWR0
aCgpOyArK3gpIHsKKyAgICAgICAgZm9yIChpbnQgeCA9IDA7IHggPCBhYnNvbHV0ZVBhaW50UmVj
dCgpLndpZHRoKCk7ICsreCkgewogICAgICAgICAgICAgcG9pbnQuc2V0WChwb2ludC54KCkgKyAx
KTsKICAgICAgICAgICAgIGZvciAocGFpbnRpbmdEYXRhLmNoYW5uZWwgPSAwOyBwYWludGluZ0Rh
dGEuY2hhbm5lbCA8IDQ7ICsrcGFpbnRpbmdEYXRhLmNoYW5uZWwsICsraW5kZXhPZlBpeGVsQ2hh
bm5lbCkKICAgICAgICAgICAgICAgICBwaXhlbEFycmF5LT5zZXQoaW5kZXhPZlBpeGVsQ2hhbm5l
bCwgY2FsY3VsYXRlVHVyYnVsZW5jZVZhbHVlRm9yUG9pbnQocGFpbnRpbmdEYXRhLCBmaWx0ZXIo
KS0+bWFwQWJzb2x1dGVQb2ludFRvTG9jYWxQb2ludChwb2ludCkpKTsKICAgICAgICAgfQogICAg
IH0KLSAgICByZXN1bHRJbWFnZSgpLT5wdXRVbm11bHRpcGxpZWRJbWFnZURhdGEoaW1hZ2VEYXRh
LmdldCgpLCBpbWFnZVJlY3QsIEludFBvaW50KCkpOwogfQogCiB2b2lkIEZFVHVyYnVsZW5jZTo6
ZHVtcCgpCmRpZmYgLS1naXQgYS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmls
dGVyRWZmZWN0LmNwcCBiL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJF
ZmZlY3QuY3BwCmluZGV4IGMyMjg3MzEuLjExYjhkYzkgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJFZmZlY3QuY3BwCisrKyBiL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJFZmZlY3QuY3BwCkBAIC0yMiw3ICsyMiw5IEBA
CiAjaW5jbHVkZSAiY29uZmlnLmgiCiAKICNpZiBFTkFCTEUoRklMVEVSUykKKwogI2luY2x1ZGUg
IkZpbHRlckVmZmVjdC5oIgorI2luY2x1ZGUgIkltYWdlRGF0YS5oIgogCiBuYW1lc3BhY2UgV2Vi
Q29yZSB7CiAKQEAgLTU0LDEwICs1NiwxMCBAQCB2b2lkIEZpbHRlckVmZmVjdDo6ZGV0ZXJtaW5l
QWJzb2x1dGVQYWludFJlY3QoKQogCiBJbnRSZWN0IEZpbHRlckVmZmVjdDo6cmVxdWVzdGVkUmVn
aW9uT2ZJbnB1dEltYWdlRGF0YShjb25zdCBJbnRSZWN0JiBlZmZlY3RSZWN0KSBjb25zdAogewot
ICAgIEFTU0VSVChtX2VmZmVjdEJ1ZmZlcik7CisgICAgQVNTRVJUKGhhc1Jlc3VsdCgpKTsKICAg
ICBJbnRQb2ludCBsb2NhdGlvbiA9IG1fYWJzb2x1dGVQYWludFJlY3QubG9jYXRpb24oKTsKICAg
ICBsb2NhdGlvbi5tb3ZlKC1lZmZlY3RSZWN0LngoKSwgLWVmZmVjdFJlY3QueSgpKTsKLSAgICBy
ZXR1cm4gSW50UmVjdChsb2NhdGlvbiwgbV9lZmZlY3RCdWZmZXItPnNpemUoKSk7CisgICAgcmV0
dXJuIEludFJlY3QobG9jYXRpb24sIG1fYWJzb2x1dGVQYWludFJlY3Quc2l6ZSgpKTsKIH0KIAog
SW50UmVjdCBGaWx0ZXJFZmZlY3Q6OmRyYXdpbmdSZWdpb25PZklucHV0SW1hZ2UoY29uc3QgSW50
UmVjdCYgc3JjUmVjdCkgY29uc3QKQEAgLTcyLDE1ICs3NCwxNzAgQEAgRmlsdGVyRWZmZWN0KiBG
aWx0ZXJFZmZlY3Q6OmlucHV0RWZmZWN0KHVuc2lnbmVkIG51bWJlcikgY29uc3QKICAgICByZXR1
cm4gbV9pbnB1dEVmZmVjdHMuYXQobnVtYmVyKS5nZXQoKTsKIH0KIAotR3JhcGhpY3NDb250ZXh0
KiBGaWx0ZXJFZmZlY3Q6OmVmZmVjdENvbnRleHQoKQorSW1hZ2VCdWZmZXIqIEZpbHRlckVmZmVj
dDo6YXNJbWFnZUJ1ZmZlcigpCit7CisgICAgaWYgKCFoYXNSZXN1bHQoKSkKKyAgICAgICAgcmV0
dXJuIDA7CisgICAgaWYgKG1faW1hZ2VCdWZmZXJSZXN1bHQpCisgICAgICAgIHJldHVybiBtX2lt
YWdlQnVmZmVyUmVzdWx0LmdldCgpOworICAgIG1faW1hZ2VCdWZmZXJSZXN1bHQgPSBJbWFnZUJ1
ZmZlcjo6Y3JlYXRlKG1fYWJzb2x1dGVQYWludFJlY3Quc2l6ZSgpLCBDb2xvclNwYWNlTGluZWFy
UkdCKTsKKyAgICBJbnRSZWN0IGRzdChJbnRQb2ludCgpLCBtX2Fic29sdXRlUGFpbnRSZWN0LnNp
emUoKSk7CisgICAgaWYgKG1fcHJlbXVsdGlwbGllZEltYWdlUmVzdWx0KQorICAgICAgICBtX2lt
YWdlQnVmZmVyUmVzdWx0LT5wdXRQcmVtdWx0aXBsaWVkSW1hZ2VEYXRhKG1fcHJlbXVsdGlwbGll
ZEltYWdlUmVzdWx0LmdldCgpLCBkc3QsIEludFBvaW50KCkpOworICAgIGVsc2UKKyAgICAgICAg
bV9pbWFnZUJ1ZmZlclJlc3VsdC0+cHV0VW5tdWx0aXBsaWVkSW1hZ2VEYXRhKG1fdW5tdWx0aXBs
aWVkSW1hZ2VSZXN1bHQuZ2V0KCksIGRzdCwgSW50UG9pbnQoKSk7CisgICAgcmV0dXJuIG1faW1h
Z2VCdWZmZXJSZXN1bHQuZ2V0KCk7Cit9CisKK1Bhc3NSZWZQdHI8SW1hZ2VEYXRhPiBGaWx0ZXJF
ZmZlY3Q6OmFzVW5tdWx0aXBsaWVkSW1hZ2UoY29uc3QgSW50UmVjdCYgcmVjdCkKK3sKKyAgICBS
ZWZQdHI8SW1hZ2VEYXRhPiBpbWFnZURhdGEgPSBJbWFnZURhdGE6OmNyZWF0ZShyZWN0LndpZHRo
KCksIHJlY3QuaGVpZ2h0KCkpOworICAgIGFzVW5tdWx0aXBsaWVkSW1hZ2UoaW1hZ2VEYXRhLmdl
dCgpLCByZWN0KTsKKyAgICByZXR1cm4gaW1hZ2VEYXRhOworfQorCitQYXNzUmVmUHRyPEltYWdl
RGF0YT4gRmlsdGVyRWZmZWN0Ojphc1ByZW11bHRpcGxpZWRJbWFnZShjb25zdCBJbnRSZWN0JiBy
ZWN0KQoreworICAgIFJlZlB0cjxJbWFnZURhdGE+IGltYWdlRGF0YSA9IEltYWdlRGF0YTo6Y3Jl
YXRlKHJlY3Qud2lkdGgoKSwgcmVjdC5oZWlnaHQoKSk7CisgICAgYXNQcmVtdWx0aXBsaWVkSW1h
Z2UoaW1hZ2VEYXRhLmdldCgpLCByZWN0KTsKKyAgICByZXR1cm4gaW1hZ2VEYXRhOworfQorCitp
bmxpbmUgdm9pZCBGaWx0ZXJFZmZlY3Q6OmNvcHlJbWFnZUJ5dGVzKEltYWdlRGF0YSogc3JjLCBJ
bWFnZURhdGEqIGRzdCwgY29uc3QgSW50UmVjdCYgcmVjdCkKK3sKKyAgICAvLyBDb3B5IHRoZSBu
ZWNlc3NhcnkgbGluZXMuCisgICAgQVNTRVJUKEludFNpemUoZHN0LT53aWR0aCgpLCBkc3QtPmhl
aWdodCgpKSA9PSByZWN0LnNpemUoKSk7CisgICAgaWYgKHJlY3QueCgpIDwgMCB8fCByZWN0Lnko
KSA8IDAgfHwgKHJlY3QueCgpICsgcmVjdC53aWR0aCgpKSA+IG1fYWJzb2x1dGVQYWludFJlY3Qu
d2lkdGgoKSB8fCAocmVjdC55KCkgKyByZWN0LmhlaWdodCgpKSA+IG1fYWJzb2x1dGVQYWludFJl
Y3QuaGVpZ2h0KCkpCisgICAgICAgIG1lbXNldChkc3QtPmRhdGEoKS0+ZGF0YSgpLT5kYXRhKCks
IDAsIGRzdC0+ZGF0YSgpLT5sZW5ndGgoKSk7CisKKyAgICBpbnQgb3JpZ2lueCA9IHJlY3QueCgp
OworICAgIGludCBkZXN0eCA9IDA7CisgICAgaWYgKG9yaWdpbnggPCAwKSB7CisgICAgICAgIGRl
c3R4ID0gLW9yaWdpbng7CisgICAgICAgIG9yaWdpbnggPSAwOworICAgIH0KKyAgICBpbnQgZW5k
eCA9IHJlY3QueCgpICsgcmVjdC53aWR0aCgpOworICAgIGlmIChlbmR4ID4gbV9hYnNvbHV0ZVBh
aW50UmVjdC53aWR0aCgpKQorICAgICAgICBlbmR4ID0gbV9hYnNvbHV0ZVBhaW50UmVjdC53aWR0
aCgpOworCisgICAgaW50IG9yaWdpbnkgPSByZWN0LnkoKTsKKyAgICBpbnQgZGVzdHkgPSAwOwor
ICAgIGlmIChvcmlnaW55IDwgMCkgeworICAgICAgICBkZXN0eSA9IC1vcmlnaW55OworICAgICAg
ICBvcmlnaW55ID0gMDsKKyAgICB9CisgICAgaW50IGVuZHkgPSByZWN0LnkoKSArIHJlY3QuaGVp
Z2h0KCk7CisgICAgaWYgKGVuZHkgPiBtX2Fic29sdXRlUGFpbnRSZWN0LmhlaWdodCgpKQorICAg
ICAgICBlbmR5ID0gbV9hYnNvbHV0ZVBhaW50UmVjdC5oZWlnaHQoKTsKKworICAgIGludCBzaXpl
ID0gKGVuZHggLSBvcmlnaW54KSAqIDQ7CisgICAgaW50IGRzdFNjYW5saW5lID0gcmVjdC53aWR0
aCgpICogNDsKKyAgICBpbnQgc3JjU2NhbmxpbmUgPSBtX2Fic29sdXRlUGFpbnRSZWN0LndpZHRo
KCkgKiA0OworICAgIHVuc2lnbmVkIGNoYXIgKmRzdFBpeGVsID0gZHN0LT5kYXRhKCktPmRhdGEo
KS0+ZGF0YSgpICsgKCgoZGVzdHkgKiByZWN0LndpZHRoKCkpICsgZGVzdHgpICogNCk7CisgICAg
dW5zaWduZWQgY2hhciAqc3JjUGl4ZWwgPSBzcmMtPmRhdGEoKS0+ZGF0YSgpLT5kYXRhKCkgKyAo
KChvcmlnaW55ICogbV9hYnNvbHV0ZVBhaW50UmVjdC53aWR0aCgpKSArIG9yaWdpbngpICogNCk7
CisKKyAgICB3aGlsZSAob3JpZ2lueSA8IGVuZHkpIHsKKyAgICAgICAgbWVtY3B5KGRzdFBpeGVs
LCBzcmNQaXhlbCwgc2l6ZSk7CisgICAgICAgIGRzdFBpeGVsICs9IGRzdFNjYW5saW5lOworICAg
ICAgICBzcmNQaXhlbCArPSBzcmNTY2FubGluZTsKKyAgICAgICAgb3JpZ2lueSsrOworICAgIH0K
K30KKwordm9pZCBGaWx0ZXJFZmZlY3Q6OmFzVW5tdWx0aXBsaWVkSW1hZ2UoSW1hZ2VEYXRhKiBk
c3QsIGNvbnN0IEludFJlY3QmIHJlY3QpCit7CisgICAgQVNTRVJUKGhhc1Jlc3VsdCgpKTsKKwor
ICAgIGlmICghbV91bm11bHRpcGxpZWRJbWFnZVJlc3VsdCkgeworICAgICAgICAvLyBXZSBwcmVm
ZXIgYSBjb252ZXJzaW9uIGZyb20gdGhlIGltYWdlIGJ1ZmZlci4KKyAgICAgICAgaWYgKG1faW1h
Z2VCdWZmZXJSZXN1bHQpCisgICAgICAgICAgICBtX3VubXVsdGlwbGllZEltYWdlUmVzdWx0ID0g
bV9pbWFnZUJ1ZmZlclJlc3VsdC0+Z2V0VW5tdWx0aXBsaWVkSW1hZ2VEYXRhKEludFJlY3QoSW50
UG9pbnQoKSwgbV9hYnNvbHV0ZVBhaW50UmVjdC5zaXplKCkpKTsKKyAgICAgICAgZWxzZSB7Cisg
ICAgICAgICAgICBtX3VubXVsdGlwbGllZEltYWdlUmVzdWx0ID0gSW1hZ2VEYXRhOjpjcmVhdGUo
bV9hYnNvbHV0ZVBhaW50UmVjdC53aWR0aCgpLCBtX2Fic29sdXRlUGFpbnRSZWN0LmhlaWdodCgp
KTsKKyAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIqIHNyYyA9IG1fcHJlbXVsdGlwbGllZEltYWdl
UmVzdWx0LT5kYXRhKCktPmRhdGEoKS0+ZGF0YSgpOworICAgICAgICAgICAgdW5zaWduZWQgY2hh
ciogZHN0ID0gbV91bm11bHRpcGxpZWRJbWFnZVJlc3VsdC0+ZGF0YSgpLT5kYXRhKCktPmRhdGEo
KTsKKyAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIqIGVuZCA9IHNyYyArIChtX2Fic29sdXRlUGFp
bnRSZWN0LndpZHRoKCkgKiBtX2Fic29sdXRlUGFpbnRSZWN0LmhlaWdodCgpICogNCk7CisgICAg
ICAgICAgICB3aGlsZSAoc3JjIDwgZW5kKSB7CisgICAgICAgICAgICAgICAgaW50IGFscGhhID0g
c3JjWzNdOworICAgICAgICAgICAgICAgIGlmIChhbHBoYSkgeworICAgICAgICAgICAgICAgICAg
ICBkc3RbMF0gPSBzdGF0aWNfY2FzdDxpbnQ+KHNyY1swXSkgKiAyNTUgLyBhbHBoYTsKKyAgICAg
ICAgICAgICAgICAgICAgZHN0WzFdID0gc3RhdGljX2Nhc3Q8aW50PihzcmNbMV0pICogMjU1IC8g
YWxwaGE7CisgICAgICAgICAgICAgICAgICAgIGRzdFsyXSA9IHN0YXRpY19jYXN0PGludD4oc3Jj
WzJdKSAqIDI1NSAvIGFscGhhOworICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAg
ICAgICAgICAgIGRzdFswXSA9IDA7CisgICAgICAgICAgICAgICAgICAgIGRzdFsxXSA9IDA7Cisg
ICAgICAgICAgICAgICAgICAgIGRzdFsyXSA9IDA7CisgICAgICAgICAgICAgICAgfQorICAgICAg
ICAgICAgICAgIGRzdFszXSA9IGFscGhhOworICAgICAgICAgICAgICAgIHNyYyArPSA0OworICAg
ICAgICAgICAgICAgIGRzdCArPSA0OworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQor
ICAgIGNvcHlJbWFnZUJ5dGVzKG1fdW5tdWx0aXBsaWVkSW1hZ2VSZXN1bHQuZ2V0KCksIGRzdCwg
cmVjdCk7Cit9CisKK3ZvaWQgRmlsdGVyRWZmZWN0Ojphc1ByZW11bHRpcGxpZWRJbWFnZShJbWFn
ZURhdGEqIGRzdCwgY29uc3QgSW50UmVjdCYgcmVjdCkKK3sKKyAgICBBU1NFUlQoaGFzUmVzdWx0
KCkpOworCisgICAgaWYgKCFtX3ByZW11bHRpcGxpZWRJbWFnZVJlc3VsdCkgeworICAgICAgICAv
LyBXZSBwcmVmZXIgYSBjb252ZXJzaW9uIGZyb20gdGhlIGltYWdlIGJ1ZmZlci4KKyAgICAgICAg
aWYgKG1faW1hZ2VCdWZmZXJSZXN1bHQpCisgICAgICAgICAgICBtX3ByZW11bHRpcGxpZWRJbWFn
ZVJlc3VsdCA9IG1faW1hZ2VCdWZmZXJSZXN1bHQtPmdldFByZW11bHRpcGxpZWRJbWFnZURhdGEo
SW50UmVjdChJbnRQb2ludCgpLCBtX2Fic29sdXRlUGFpbnRSZWN0LnNpemUoKSkpOworICAgICAg
ICBlbHNlIHsKKyAgICAgICAgICAgIG1fcHJlbXVsdGlwbGllZEltYWdlUmVzdWx0ID0gSW1hZ2VE
YXRhOjpjcmVhdGUobV9hYnNvbHV0ZVBhaW50UmVjdC53aWR0aCgpLCBtX2Fic29sdXRlUGFpbnRS
ZWN0LmhlaWdodCgpKTsKKyAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIqIHNyYyA9IG1fdW5tdWx0
aXBsaWVkSW1hZ2VSZXN1bHQtPmRhdGEoKS0+ZGF0YSgpLT5kYXRhKCk7CisgICAgICAgICAgICB1
bnNpZ25lZCBjaGFyKiBkc3QgPSBtX3ByZW11bHRpcGxpZWRJbWFnZVJlc3VsdC0+ZGF0YSgpLT5k
YXRhKCktPmRhdGEoKTsKKyAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIqIGVuZCA9IHNyYyArICht
X2Fic29sdXRlUGFpbnRSZWN0LndpZHRoKCkgKiBtX2Fic29sdXRlUGFpbnRSZWN0LmhlaWdodCgp
ICogNCk7CisgICAgICAgICAgICB3aGlsZSAoc3JjIDwgZW5kKSB7CisgICAgICAgICAgICAgICAg
aW50IGFscGhhID0gc3JjWzNdOworICAgICAgICAgICAgICAgIGRzdFswXSA9IHN0YXRpY19jYXN0
PGludD4oc3JjWzBdKSAqIGFscGhhIC8gMjU1OworICAgICAgICAgICAgICAgIGRzdFsxXSA9IHN0
YXRpY19jYXN0PGludD4oc3JjWzFdKSAqIGFscGhhIC8gMjU1OworICAgICAgICAgICAgICAgIGRz
dFsyXSA9IHN0YXRpY19jYXN0PGludD4oc3JjWzJdKSAqIGFscGhhIC8gMjU1OworICAgICAgICAg
ICAgICAgIGRzdFszXSA9IGFscGhhOworICAgICAgICAgICAgICAgIHNyYyArPSA0OworICAgICAg
ICAgICAgICAgIGRzdCArPSA0OworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorICAg
IGNvcHlJbWFnZUJ5dGVzKG1fcHJlbXVsdGlwbGllZEltYWdlUmVzdWx0LmdldCgpLCBkc3QsIHJl
Y3QpOworfQorCitJbWFnZUJ1ZmZlciogRmlsdGVyRWZmZWN0OjpjcmVhdGVJbWFnZUJ1ZmZlclJl
c3VsdCgpCiB7CisgICAgLy8gT25seSBvbmUgcmVzdWx0IHR5cGUgaXMgYWxsb3dlZC4KKyAgICBB
U1NFUlQoIWhhc1Jlc3VsdCgpKTsKICAgICBkZXRlcm1pbmVBYnNvbHV0ZVBhaW50UmVjdCgpOwog
ICAgIGlmIChtX2Fic29sdXRlUGFpbnRSZWN0LmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuIDA7
Ci0gICAgbV9lZmZlY3RCdWZmZXIgPSBJbWFnZUJ1ZmZlcjo6Y3JlYXRlKG1fYWJzb2x1dGVQYWlu
dFJlY3Quc2l6ZSgpLCBDb2xvclNwYWNlTGluZWFyUkdCKTsKLSAgICBpZiAoIW1fZWZmZWN0QnVm
ZmVyKQorICAgIG1faW1hZ2VCdWZmZXJSZXN1bHQgPSBJbWFnZUJ1ZmZlcjo6Y3JlYXRlKG1fYWJz
b2x1dGVQYWludFJlY3Quc2l6ZSgpLCBDb2xvclNwYWNlTGluZWFyUkdCKTsKKyAgICBpZiAoIW1f
aW1hZ2VCdWZmZXJSZXN1bHQpCisgICAgICAgIHJldHVybiAwOworICAgIEFTU0VSVChtX2ltYWdl
QnVmZmVyUmVzdWx0LT5jb250ZXh0KCkpOworICAgIHJldHVybiBtX2ltYWdlQnVmZmVyUmVzdWx0
LmdldCgpOworfQorCitJbWFnZURhdGEqIEZpbHRlckVmZmVjdDo6Y3JlYXRlVW5tdWx0aXBsaWVk
SW1hZ2VSZXN1bHQoKQoreworICAgIC8vIE9ubHkgb25lIHJlc3VsdCB0eXBlIGlzIGFsbG93ZWQu
CisgICAgQVNTRVJUKCFoYXNSZXN1bHQoKSk7CisgICAgZGV0ZXJtaW5lQWJzb2x1dGVQYWludFJl
Y3QoKTsKKyAgICBpZiAobV9hYnNvbHV0ZVBhaW50UmVjdC5pc0VtcHR5KCkpCisgICAgICAgIHJl
dHVybiAwOworICAgIG1fdW5tdWx0aXBsaWVkSW1hZ2VSZXN1bHQgPSBJbWFnZURhdGE6OmNyZWF0
ZShtX2Fic29sdXRlUGFpbnRSZWN0LndpZHRoKCksIG1fYWJzb2x1dGVQYWludFJlY3QuaGVpZ2h0
KCkpOworICAgIHJldHVybiBtX3VubXVsdGlwbGllZEltYWdlUmVzdWx0LmdldCgpOworfQorCitJ
bWFnZURhdGEqIEZpbHRlckVmZmVjdDo6Y3JlYXRlUHJlbXVsdGlwbGllZEltYWdlUmVzdWx0KCkK
K3sKKyAgICAvLyBPbmx5IG9uZSByZXN1bHQgdHlwZSBpcyBhbGxvd2VkLgorICAgIEFTU0VSVCgh
aGFzUmVzdWx0KCkpOworICAgIGRldGVybWluZUFic29sdXRlUGFpbnRSZWN0KCk7CisgICAgaWYg
KG1fYWJzb2x1dGVQYWludFJlY3QuaXNFbXB0eSgpKQogICAgICAgICByZXR1cm4gMDsKLSAgICBy
ZXR1cm4gbV9lZmZlY3RCdWZmZXItPmNvbnRleHQoKTsKKyAgICBtX3ByZW11bHRpcGxpZWRJbWFn
ZVJlc3VsdCA9IEltYWdlRGF0YTo6Y3JlYXRlKG1fYWJzb2x1dGVQYWludFJlY3Qud2lkdGgoKSwg
bV9hYnNvbHV0ZVBhaW50UmVjdC5oZWlnaHQoKSk7CisgICAgcmV0dXJuIG1fcHJlbXVsdGlwbGll
ZEltYWdlUmVzdWx0LmdldCgpOwogfQogCiBUZXh0U3RyZWFtJiBGaWx0ZXJFZmZlY3Q6OmV4dGVy
bmFsUmVwcmVzZW50YXRpb24oVGV4dFN0cmVhbSYgdHMsIGludCkgY29uc3QKZGlmZiAtLWdpdCBh
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJFZmZlY3QuaCBiL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJFZmZlY3QuaAppbmRleCBmOTY3NGUy
Li43NDk0MzNjIDEwMDY0NAotLS0gYS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMv
RmlsdGVyRWZmZWN0LmgKKysrIGIvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0Zp
bHRlckVmZmVjdC5oCkBAIC01MCwxMyArNTAsMTIgQEAgY2xhc3MgRmlsdGVyRWZmZWN0IDogcHVi
bGljIFJlZkNvdW50ZWQ8RmlsdGVyRWZmZWN0PiB7CiBwdWJsaWM6CiAgICAgdmlydHVhbCB+Rmls
dGVyRWZmZWN0KCk7CiAKLSAgICAvLyBUaGUgcmVzdWx0IGlzIGJvdW5kZWQgdG8gdGhlIHNpemUg
b2YgdGhlIGZpbHRlciBwcmltaXRpdmUgdG8gc2F2ZSByZXNvdXJjZXMuCi0gICAgSW1hZ2VCdWZm
ZXIqIHJlc3VsdEltYWdlKCkgY29uc3QgeyByZXR1cm4gbV9lZmZlY3RCdWZmZXIuZ2V0KCk7IH0K
LSAgICB2b2lkIHNldEVmZmVjdEJ1ZmZlcihQYXNzT3duUHRyPEltYWdlQnVmZmVyPiBlZmZlY3RC
dWZmZXIpIHsgbV9lZmZlY3RCdWZmZXIgPSBlZmZlY3RCdWZmZXI7IH0KLQotICAgIC8vIENyZWF0
ZXMgdGhlIEltYWdlQnVmZmVyIGZvciB0aGUgY3VycmVudCBmaWx0ZXIgcHJpbWl0aXZlIHJlc3Vs
dCBpbiB0aGUgc2l6ZSBvZiB0aGUKLSAgICAvLyByZXBhaW50UmVjdC4gR2l2ZXMgYmFjayB0aGUg
R3JhcGhpY3NDb250ZXh0IG9mIHRoZSBvd24gSW1hZ2VCdWZmZXIuCi0gICAgR3JhcGhpY3NDb250
ZXh0KiBlZmZlY3RDb250ZXh0KCk7CisgICAgYm9vbCBoYXNSZXN1bHQoKSBjb25zdCB7IHJldHVy
biBtX2ltYWdlQnVmZmVyUmVzdWx0IHx8IG1fdW5tdWx0aXBsaWVkSW1hZ2VSZXN1bHQgfHwgbV9w
cmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQ7IH0KKyAgICBJbWFnZUJ1ZmZlciogYXNJbWFnZUJ1ZmZl
cigpOworICAgIFBhc3NSZWZQdHI8SW1hZ2VEYXRhPiBhc1VubXVsdGlwbGllZEltYWdlKGNvbnN0
IEludFJlY3QmKTsKKyAgICBQYXNzUmVmUHRyPEltYWdlRGF0YT4gYXNQcmVtdWx0aXBsaWVkSW1h
Z2UoY29uc3QgSW50UmVjdCYpOworICAgIHZvaWQgYXNVbm11bHRpcGxpZWRJbWFnZShJbWFnZURh
dGEqIGRzdCwgY29uc3QgSW50UmVjdCYpOworICAgIHZvaWQgYXNQcmVtdWx0aXBsaWVkSW1hZ2Uo
SW1hZ2VEYXRhKiBkc3QsIGNvbnN0IEludFJlY3QmKTsKIAogICAgIEZpbHRlckVmZmVjdFZlY3Rv
ciYgaW5wdXRFZmZlY3RzKCkgeyByZXR1cm4gbV9pbnB1dEVmZmVjdHM7IH0KICAgICBGaWx0ZXJF
ZmZlY3QqIGlucHV0RWZmZWN0KHVuc2lnbmVkKSBjb25zdDsKQEAgLTExMCw4ICsxMDksMTQgQEAg
cHVibGljOgogcHJvdGVjdGVkOgogICAgIEZpbHRlckVmZmVjdChGaWx0ZXIqKTsKIAorICAgIElt
YWdlQnVmZmVyKiBjcmVhdGVJbWFnZUJ1ZmZlclJlc3VsdCgpOworICAgIEltYWdlRGF0YSogY3Jl
YXRlVW5tdWx0aXBsaWVkSW1hZ2VSZXN1bHQoKTsKKyAgICBJbWFnZURhdGEqIGNyZWF0ZVByZW11
bHRpcGxpZWRJbWFnZVJlc3VsdCgpOworCiBwcml2YXRlOgotICAgIE93blB0cjxJbWFnZUJ1ZmZl
cj4gbV9lZmZlY3RCdWZmZXI7CisgICAgT3duUHRyPEltYWdlQnVmZmVyPiBtX2ltYWdlQnVmZmVy
UmVzdWx0OworICAgIFJlZlB0cjxJbWFnZURhdGE+IG1fdW5tdWx0aXBsaWVkSW1hZ2VSZXN1bHQ7
CisgICAgUmVmUHRyPEltYWdlRGF0YT4gbV9wcmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQ7CiAgICAg
RmlsdGVyRWZmZWN0VmVjdG9yIG1faW5wdXRFZmZlY3RzOwogCiAgICAgYm9vbCBtX2FscGhhSW1h
Z2U7CkBAIC0xMjQsNiArMTI5LDggQEAgcHJpdmF0ZToKICAgICBGaWx0ZXIqIG1fZmlsdGVyOwog
CiBwcml2YXRlOgorICAgIGlubGluZSB2b2lkIGNvcHlJbWFnZUJ5dGVzKEltYWdlRGF0YSogc3Jj
LCBJbWFnZURhdGEqIGRzdCwgY29uc3QgSW50UmVjdCYpOworCiAgICAgLy8gVGhlIGZvbGxvd2lu
ZyBtZW1iZXIgdmFyaWFibGVzIGFyZSBTVkcgc3BlY2lmaWMgYW5kIHdpbGwgbW92ZSB0byBSZW5k
ZXJTVkdSZXNvdXJjZUZpbHRlclByaW1pdGl2ZS4KICAgICAvLyBTZWUgYnVnIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD00NTYxNC4KIApkaWZmIC0tZ2l0IGEvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL1NvdXJjZUFscGhhLmNwcCBiL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9Tb3VyY2VBbHBoYS5jcHAKaW5kZXggYTUwNWI0Yi4uNGM5
MjFiNyAxMDA2NDQKLS0tIGEvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL1NvdXJj
ZUFscGhhLmNwcAorKysgYi9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvU291cmNl
QWxwaGEuY3BwCkBAIC01MiwxNCArNTIsMTUgQEAgdm9pZCBTb3VyY2VBbHBoYTo6ZGV0ZXJtaW5l
QWJzb2x1dGVQYWludFJlY3QoKQogCiB2b2lkIFNvdXJjZUFscGhhOjphcHBseSgpCiB7Ci0gICAg
R3JhcGhpY3NDb250ZXh0KiBmaWx0ZXJDb250ZXh0ID0gZWZmZWN0Q29udGV4dCgpOworICAgIElt
YWdlQnVmZmVyKiByZXN1bHRJbWFnZSA9IGNyZWF0ZUltYWdlQnVmZmVyUmVzdWx0KCk7CiAgICAg
RmlsdGVyKiBmaWx0ZXIgPSB0aGlzLT5maWx0ZXIoKTsKLSAgICBpZiAoIWZpbHRlckNvbnRleHQg
fHwgIWZpbHRlci0+c291cmNlSW1hZ2UoKSkKKyAgICBpZiAoIXJlc3VsdEltYWdlIHx8ICFmaWx0
ZXItPnNvdXJjZUltYWdlKCkpCiAgICAgICAgIHJldHVybjsKIAogICAgIHNldElzQWxwaGFJbWFn
ZSh0cnVlKTsKIAogICAgIEZsb2F0UmVjdCBpbWFnZVJlY3QoRmxvYXRQb2ludCgpLCBhYnNvbHV0
ZVBhaW50UmVjdCgpLnNpemUoKSk7CisgICAgR3JhcGhpY3NDb250ZXh0KiBmaWx0ZXJDb250ZXh0
ID0gcmVzdWx0SW1hZ2UtPmNvbnRleHQoKTsKICAgICBmaWx0ZXJDb250ZXh0LT5zYXZlKCk7CiAg
ICAgZmlsdGVyQ29udGV4dC0+Y2xpcFRvSW1hZ2VCdWZmZXIoZmlsdGVyLT5zb3VyY2VJbWFnZSgp
LCBpbWFnZVJlY3QpOwogICAgIGZpbHRlckNvbnRleHQtPmZpbGxSZWN0KGltYWdlUmVjdCwgQ29s
b3I6OmJsYWNrLCBDb2xvclNwYWNlRGV2aWNlUkdCKTsKZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9Tb3VyY2VHcmFwaGljLmNwcCBiL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvZmlsdGVycy9Tb3VyY2VHcmFwaGljLmNwcAppbmRleCA2YWFjMzY3Li5hODA5
NDdhIDEwMDY0NAotLS0gYS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvU291cmNl
R3JhcGhpYy5jcHAKKysrIGIvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL1NvdXJj
ZUdyYXBoaWMuY3BwCkBAIC01MSwxMiArNTEsMTIgQEAgdm9pZCBTb3VyY2VHcmFwaGljOjpkZXRl
cm1pbmVBYnNvbHV0ZVBhaW50UmVjdCgpCiAKIHZvaWQgU291cmNlR3JhcGhpYzo6YXBwbHkoKQog
ewotICAgIEdyYXBoaWNzQ29udGV4dCogZmlsdGVyQ29udGV4dCA9IGVmZmVjdENvbnRleHQoKTsK
KyAgICBJbWFnZUJ1ZmZlciogcmVzdWx0SW1hZ2UgPSBjcmVhdGVJbWFnZUJ1ZmZlclJlc3VsdCgp
OwogICAgIEZpbHRlciogZmlsdGVyID0gdGhpcy0+ZmlsdGVyKCk7Ci0gICAgaWYgKCFmaWx0ZXJD
b250ZXh0IHx8ICFmaWx0ZXItPnNvdXJjZUltYWdlKCkpCisgICAgaWYgKCFyZXN1bHRJbWFnZSB8
fCAhZmlsdGVyLT5zb3VyY2VJbWFnZSgpKQogICAgICAgICByZXR1cm47CiAKLSAgICBmaWx0ZXJD
b250ZXh0LT5kcmF3SW1hZ2VCdWZmZXIoZmlsdGVyLT5zb3VyY2VJbWFnZSgpLCBDb2xvclNwYWNl
RGV2aWNlUkdCLCBJbnRQb2ludCgpKTsKKyAgICByZXN1bHRJbWFnZS0+Y29udGV4dCgpLT5kcmF3
SW1hZ2VCdWZmZXIoZmlsdGVyLT5zb3VyY2VJbWFnZSgpLCBDb2xvclNwYWNlRGV2aWNlUkdCLCBJ
bnRQb2ludCgpKTsKIH0KIAogdm9pZCBTb3VyY2VHcmFwaGljOjpkdW1wKCkKZGlmZiAtLWdpdCBh
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9Tb3VyY2VHcmFwaGljLmggYi9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvU291cmNlR3JhcGhpYy5oCmluZGV4IGZhNDdm
MTIuLjk3ZDY4ODIgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVy
cy9Tb3VyY2VHcmFwaGljLmgKKysrIGIvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJz
L1NvdXJjZUdyYXBoaWMuaApAQCAtMTksNyArMTksNyBAQAogICovCiAKICNpZm5kZWYgU291cmNl
R3JhcGhpY19oCi0jZGVmaW5lIFNvdXJjZUdyYWhwaWNfaAorI2RlZmluZSBTb3VyY2VHcmFwaGlj
X2gKIAogI2lmIEVOQUJMRShGSUxURVJTKQogI2luY2x1ZGUgIkZpbHRlckVmZmVjdC5oIgpkaWZm
IC0tZ2l0IGEvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyU1ZHUmVzb3VyY2VGaWx0ZXIuY3BwIGIv
V2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyU1ZHUmVzb3VyY2VGaWx0ZXIuY3BwCmluZGV4IDcyODcy
ZjYuLjMzNzgzZTggMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclNWR1Jlc291
cmNlRmlsdGVyLmNwcAorKysgYi9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJTVkdSZXNvdXJjZUZp
bHRlci5jcHAKQEAgLTI5MiwxNCArMjkyLDE0IEBAIHZvaWQgUmVuZGVyU1ZHUmVzb3VyY2VGaWx0
ZXI6OnBvc3RBcHBseVJlc291cmNlKFJlbmRlck9iamVjdCogb2JqZWN0LCBHcmFwaGljc0NvCiAg
ICAgICAgICAgICBmaWx0ZXJEYXRhLT5maWx0ZXItPnNldFNvdXJjZUltYWdlKGZpbHRlckRhdGEt
PnNvdXJjZUdyYXBoaWNCdWZmZXIucmVsZWFzZSgpKTsKICAgICAgICAgICAgIGxhc3RFZmZlY3Qt
PmFwcGx5KCk7CiAjaWYgIVBMQVRGT1JNKENHKQotICAgICAgICAgICAgSW1hZ2VCdWZmZXIqIHJl
c3VsdEltYWdlID0gbGFzdEVmZmVjdC0+cmVzdWx0SW1hZ2UoKTsKKyAgICAgICAgICAgIEltYWdl
QnVmZmVyKiByZXN1bHRJbWFnZSA9IGxhc3RFZmZlY3QtPmFzSW1hZ2VCdWZmZXIoKTsKICAgICAg
ICAgICAgIGlmIChyZXN1bHRJbWFnZSkKICAgICAgICAgICAgICAgICByZXN1bHRJbWFnZS0+dHJh
bnNmb3JtQ29sb3JTcGFjZShDb2xvclNwYWNlTGluZWFyUkdCLCBDb2xvclNwYWNlRGV2aWNlUkdC
KTsKICNlbmRpZgogICAgICAgICAgICAgZmlsdGVyRGF0YS0+YnVpbGRlZCA9IHRydWU7CiAgICAg
ICAgIH0KIAotICAgICAgICBJbWFnZUJ1ZmZlciogcmVzdWx0SW1hZ2UgPSBsYXN0RWZmZWN0LT5y
ZXN1bHRJbWFnZSgpOworICAgICAgICBJbWFnZUJ1ZmZlciogcmVzdWx0SW1hZ2UgPSBsYXN0RWZm
ZWN0LT5hc0ltYWdlQnVmZmVyKCk7CiAgICAgICAgIGlmIChyZXN1bHRJbWFnZSkgewogICAgICAg
ICAgICAgY29udGV4dC0+Y29uY2F0Q1RNKGZpbHRlckRhdGEtPnNoZWFyRnJlZUFic29sdXRlVHJh
bnNmb3JtLmludmVyc2UoKSk7CiAKZGlmZiAtLWdpdCBhL1dlYkNvcmUvc3ZnL2dyYXBoaWNzL2Zp
bHRlcnMvU1ZHRkVJbWFnZS5jcHAgYi9XZWJDb3JlL3N2Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0ZF
SW1hZ2UuY3BwCmluZGV4IDZhMTkxNGEuLmI1YWU0NjYgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvc3Zn
L2dyYXBoaWNzL2ZpbHRlcnMvU1ZHRkVJbWFnZS5jcHAKKysrIGIvV2ViQ29yZS9zdmcvZ3JhcGhp
Y3MvZmlsdGVycy9TVkdGRUltYWdlLmNwcApAQCAtNTksOCArNTksOCBAQCB2b2lkIEZFSW1hZ2U6
OmFwcGx5KCkKICAgICBpZiAoIW1faW1hZ2UuZ2V0KCkpCiAgICAgICAgIHJldHVybjsKIAotICAg
IEdyYXBoaWNzQ29udGV4dCogZmlsdGVyQ29udGV4dCA9IGVmZmVjdENvbnRleHQoKTsKLSAgICBp
ZiAoIWZpbHRlckNvbnRleHQpCisgICAgSW1hZ2VCdWZmZXIqIHJlc3VsdEltYWdlID0gY3JlYXRl
SW1hZ2VCdWZmZXJSZXN1bHQoKTsKKyAgICBpZiAoIXJlc3VsdEltYWdlKQogICAgICAgICByZXR1
cm47CiAKICAgICBGbG9hdFJlY3Qgc3JjUmVjdChGbG9hdFBvaW50KCksIG1faW1hZ2UtPnNpemUo
KSk7CkBAIC03MCw3ICs3MCw3IEBAIHZvaWQgRkVJbWFnZTo6YXBwbHkoKQogICAgIEludFBvaW50
IHBhaW50TG9jYXRpb24gPSBhYnNvbHV0ZVBhaW50UmVjdCgpLmxvY2F0aW9uKCk7CiAgICAgZGVz
dFJlY3QubW92ZSgtcGFpbnRMb2NhdGlvbi54KCksIC1wYWludExvY2F0aW9uLnkoKSk7CiAKLSAg
ICBmaWx0ZXJDb250ZXh0LT5kcmF3SW1hZ2UobV9pbWFnZS5nZXQoKSwgQ29sb3JTcGFjZURldmlj
ZVJHQiwgZGVzdFJlY3QsIHNyY1JlY3QpOworICAgIHJlc3VsdEltYWdlLT5jb250ZXh0KCktPmRy
YXdJbWFnZShtX2ltYWdlLmdldCgpLCBDb2xvclNwYWNlRGV2aWNlUkdCLCBkZXN0UmVjdCwgc3Jj
UmVjdCk7CiB9CiAKIHZvaWQgRkVJbWFnZTo6ZHVtcCgpCi0tIAoxLjYuMC40Cgo=
</data>
<flag name="review"
          id="65714"
          type_id="1"
          status="-"
          setter="zimmermann"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>75679</attachid>
            <date>2010-12-06 05:28:11 -0800</date>
            <delta_ts>2010-12-07 01:41:50 -0800</delta_ts>
            <desc>patch 3</desc>
            <filename>0001-filter-result.patch</filename>
            <type>text/plain</type>
            <size>58572</size>
            <attacher name="Zoltan Herczeg">zherczeg</attacher>
            
              <data encoding="base64">RnJvbSAzNDE0NzY0MTBmNDU1ZGVhMTI1YTljMGUzYjAwMDU3NDJmMjFjMWEzIE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBab2x0YW4gSGVyY3plZyA8emhlcmN6ZWdAaW5mLnUtc3plZ2Vk
Lmh1PgpEYXRlOiBNb24sIDYgRGVjIDIwMTAgMTM6MjQ6NTcgKzAxMDAKU3ViamVjdDogW1BBVENI
XSBmaWx0ZXItcmVzdWx0CgpTaWduZWQtb2ZmLWJ5OiBab2x0YW4gSGVyY3plZyA8emhlcmN6ZWdA
aW5mLnUtc3plZ2VkLmh1PgotLS0KIFdlYkNvcmUvQ2hhbmdlTG9nICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHwgICA3MiArKysrKysrKysKIFdlYkNvcmUvbWFudWFsLXRlc3RzL3N2
Zy1maWx0ZXItYW5pbWF0aW9uLnN2ZyAgICAgIHwgIDEyMCArKysrKysrKysrKysrKwogV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQmxlbmQuY3BwICAgICAgfCAgIDE3ICstCiAu
Li4vcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUNvbG9yTWF0cml4LmNwcCAgICB8ICAgMTYg
Ky0KIC4uLi9ncmFwaGljcy9maWx0ZXJzL0ZFQ29tcG9uZW50VHJhbnNmZXIuY3BwICAgICAgIHwg
ICAxMSArLQogV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29tcG9zaXRlLmNw
cCAgfCAgIDM1ICsrKy0tCiAuLi4vcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUNvbnZvbHZl
TWF0cml4LmNwcCB8ICAgNDYgKysrLS0tCiAuLi4vZ3JhcGhpY3MvZmlsdGVycy9GRURpc3BsYWNl
bWVudE1hcC5jcHAgICAgICAgICB8ICAgMjggKystLQogV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9maWx0ZXJzL0ZFRmxvb2QuY3BwICAgICAgfCAgICA4ICstCiAuLi4vcGxhdGZvcm0vZ3JhcGhp
Y3MvZmlsdGVycy9GRUdhdXNzaWFuQmx1ci5jcHAgICB8ICAgMjcgKystLQogV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFTGlnaHRpbmcuY3BwICAgfCAgIDE0ICstCiBXZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVNZXJnZS5jcHAgICAgICB8ICAgMTEgKy0KIFdl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRU1lcmdlLmggICAgICAgIHwgICAgMiAr
LQogV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFTW9ycGhvbG9neS5jcHAgfCAg
IDE0ICstCiBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVPZmZzZXQuY3BwICAg
ICB8ICAgMTAgKy0KIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRVRpbGUuY3Bw
ICAgICAgIHwgICAxMSArLQogV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFVHVy
YnVsZW5jZS5jcHAgfCAgIDE2ICstCiBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMv
RmlsdGVyRWZmZWN0LmNwcCB8ICAxNjggKysrKysrKysrKysrKysrKysrKy0KIFdlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJFZmZlY3QuaCAgIHwgICAyMyArKy0KIFdlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9Tb3VyY2VBbHBoYS5jcHAgIHwgICAgNyArLQog
Li4uL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvU291cmNlR3JhcGhpYy5jcHAgICAgfCAgICA4
ICstCiBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvU291cmNlR3JhcGhpYy5oICB8
ICAgIDIgKy0KIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclNWR1Jlc291cmNlRmlsdGVyLmNwcCAg
ICAgIHwgICAgNCArLQogV2ViQ29yZS9zdmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdGRUltYWdlLmNw
cCAgICAgICAgfCAgICA2ICstCiAyNCBmaWxlcyBjaGFuZ2VkLCA1MjYgaW5zZXJ0aW9ucygrKSwg
MTUwIGRlbGV0aW9ucygtKQogY3JlYXRlIG1vZGUgMTAwNjQ0IFdlYkNvcmUvbWFudWFsLXRlc3Rz
L3N2Zy1maWx0ZXItYW5pbWF0aW9uLnN2ZwoKZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ2hhbmdlTG9n
IGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNjA4OGQ5Yi4uMjllODZiNiAxMDA2NDQKLS0tIGEv
V2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvV2ViQ29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSw3NSBA
QAorMjAxMC0xMi0wNiAgWm9sdGFuIEhlcmN6ZWcgIDx6aGVyY3plZ0B3ZWJraXQub3JnPgorCisg
ICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEJldHRlciByZXN1
bHQgcGFzc2luZyBpbiBmaWx0ZXIgcHJpbWl0aXZlcworICAgICAgICBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NDk5MDcKKworICAgICAgICBTVkcgZmlsdGVyIHByaW1p
dGl2ZXMgY2FuIHVzZSB0aGUgb3V0cHV0IG9mIG90aGVyIGZpbHRlcnMuIFRoZQorICAgICAgICBp
bnB1dCBhbmQgb3V0cHV0IGZvcm1hdCBvZiBhIGZpbHRlciBjYW4gYmUgYSBwcmVtdWx0aXBsaWVk
IG9yCisgICAgICAgIHVubXVsdGlwbGllZCBSR0JBIGFycmF5LCBvciBhbiBpbWFnZSBidWZmZXIu
IEFsbCBmaWx0ZXIKKyAgICAgICAgcHJpbWl0aXZlIHJlc3VsdHMgd2VyZSBjb252ZXJ0ZWQgdG8g
aW1hZ2UgYnVmZmVycyBiZWZvcmUsIHdoaWNoCisgICAgICAgIGNvdWxkIGJlIGFuIHVuZWNlc3Nh
cnkgKGFuZCByZWFsbHkgY29zdGx5KSBvcGVyYXRpb24sIGlmCisgICAgICAgIGEgZmlsdGVyIGV4
cGVjdHMgaXRzIGlucHV0IGluIHRoZSBzYW1lIGZvcm1hdCBhcyB0aGUgb3V0cHV0CisgICAgICAg
IG9mIHRoZSBpbnB1dCBmaWx0ZXIgcHJpbWl0aXZlLiBUaGlzIG92ZXJoZWFkIGlzIHJlbW92ZWQg
YnkKKyAgICAgICAgdGhpcyBwYXRjaC4gQWxsIGFwcGx5KCkgbWV0aG9kcyBhcmUgdXBkYXRlZCBh
Y2NvcmRpbmcgdG8gdGhpcworICAgICAgICBuZXcgZmlsdGVyIHByaW1pdGl2ZSBpbnRlcmZhY2Uu
CisKKyAgICAgICAgVGhlIGV4aXN0aW5nIHRlc3RzIGNvdmVyIHRoaXMgZmVhdHVyZS4KKworICAg
ICAgICAqIG1hbnVhbC10ZXN0cy9zdmctZmlsdGVyLWFuaW1hdGlvbi5zdmc6IEFkZGVkLgorICAg
ICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVCbGVuZC5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpGRUJsZW5kOjphcHBseSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmls
dGVycy9GRUNvbG9yTWF0cml4LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZFQ29sb3JNYXRyaXg6
OmFwcGx5KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29tcG9uZW50
VHJhbnNmZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RkVDb21wb25lbnRUcmFuc2Zlcjo6YXBw
bHkpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDb21wb3NpdGUuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6RkVDb21wb3NpdGU6OmFwcGx5KToKKyAgICAgICAgKiBwbGF0
Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29udm9sdmVNYXRyaXguY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6RkVDb252b2x2ZU1hdHJpeDo6YXBwbHkpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBo
aWNzL2ZpbHRlcnMvRkVEaXNwbGFjZW1lbnRNYXAuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RkVE
aXNwbGFjZW1lbnRNYXA6OmFwcGx5KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0
ZXJzL0ZFRmxvb2QuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RkVGbG9vZDo6YXBwbHkpOgorICAg
ICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVHYXVzc2lhbkJsdXIuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6RkVHYXVzc2lhbkJsdXI6OmFwcGx5KToKKyAgICAgICAgKiBwbGF0Zm9y
bS9ncmFwaGljcy9maWx0ZXJzL0ZFTGlnaHRpbmcuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RkVM
aWdodGluZzo6YXBwbHkpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVN
ZXJnZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGRU1lcmdlOjphcHBseSk6CisgICAgICAgICog
cGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRU1lcmdlLmg6CisgICAgICAgICogcGxhdGZvcm0v
Z3JhcGhpY3MvZmlsdGVycy9GRU1vcnBob2xvZ3kuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RkVN
b3JwaG9sb2d5OjphcHBseSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9G
RU9mZnNldC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGRU9mZnNldDo6YXBwbHkpOgorICAgICAg
ICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVUaWxlLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OkZFVGlsZTo6YXBwbHkpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMv
RkVUdXJidWxlbmNlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZFVHVyYnVsZW5jZTo6YXBwbHkp
OgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyRWZmZWN0LmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6cmVxdWVzdGVkUmVnaW9uT2ZJbnB1dElt
YWdlRGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6OmFzSW1hZ2VCdWZmZXIp
OgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0Ojphc1VubXVsdGlwbGllZEltYWdlKToK
KyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6YXNQcmVtdWx0aXBsaWVkSW1hZ2UpOgor
ICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0Ojpjb3B5SW1hZ2VCeXRlcyk6CisgICAgICAg
IChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6OmNvcHlVbm11bHRpcGxpZWRJbWFnZSk6CisgICAgICAg
IChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6OmNvcHlQcmVtdWx0aXBsaWVkSW1hZ2UpOgorICAgICAg
ICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0OjpjcmVhdGVJbWFnZUJ1ZmZlclJlc3VsdCk6CisgICAg
ICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6OmNyZWF0ZVVubXVsdGlwbGllZEltYWdlUmVzdWx0
KToKKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6Y3JlYXRlUHJlbXVsdGlwbGllZElt
YWdlUmVzdWx0KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlckVm
ZmVjdC5oOgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0OjpoYXNSZXN1bHQpOgorICAg
ICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvU291cmNlQWxwaGEuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6U291cmNlQWxwaGE6OmFwcGx5KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFw
aGljcy9maWx0ZXJzL1NvdXJjZUdyYXBoaWMuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U291cmNl
R3JhcGhpYzo6YXBwbHkpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvU291
cmNlR3JhcGhpYy5oOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJTVkdSZXNvdXJjZUZpbHRl
ci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJTVkdSZXNvdXJjZUZpbHRlcjo6cG9zdEFw
cGx5UmVzb3VyY2UpOgorICAgICAgICAqIHN2Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0ZFSW1hZ2Uu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6RkVJbWFnZTo6YXBwbHkpOgorCiAyMDEwLTEyLTA1ICBL
ZW50IFRhbXVyYSAgPHRrZW50QGNocm9taXVtLm9yZz4KIAogICAgICAgICBVbnJldmlld2VkLiBS
dW4gc29ydC1YY29kZS1wcm9qZWN0LWZpbGUuCmRpZmYgLS1naXQgYS9XZWJDb3JlL21hbnVhbC10
ZXN0cy9zdmctZmlsdGVyLWFuaW1hdGlvbi5zdmcgYi9XZWJDb3JlL21hbnVhbC10ZXN0cy9zdmct
ZmlsdGVyLWFuaW1hdGlvbi5zdmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4u
NWI3YzljYwotLS0gL2Rldi9udWxsCisrKyBiL1dlYkNvcmUvbWFudWFsLXRlc3RzL3N2Zy1maWx0
ZXItYW5pbWF0aW9uLnN2ZwpAQCAtMCwwICsxLDEyMCBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBz
dGFuZGFsb25lPSJubyI/PgorPCFET0NUWVBFIHN2ZyBQVUJMSUMgIi0vL1czQy8vRFREIFNWRyAx
LjEvL0VOIiAiaHR0cDovL3d3dy53My5vcmcvR3JhcGhpY3MvU1ZHLzEuMS9EVEQvc3ZnMTEuZHRk
Ij4KKworPCEtLQorICBDb3B5cmlnaHQgKEMpIDIwMTAgVW5pdmVyc2l0eSBvZiBTemVnZWQKKyAg
Q29weXJpZ2h0IChDKSAyMDEwIFpvbHRhbiBIZXJjemVnCisgIENvcHlyaWdodCAoQykgMjAxMCBH
YWJvciBMb2tpCisgIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisKKyAgUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworICBhcmUgbWV0OgorICAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKKyAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKworICBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIFVOSVZFUlNJVFkgT0YgU1pFR0VEIGBgQVMgSVMnJyBBTkQgQU5ZCisgIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
VEhFCisgIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgorICBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQg
U0hBTEwgVU5JVkVSU0lUWSBPRiBTWkVHRUQgT1IKKyAgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgIEVYRU1QTEFS
WSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKKyAgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SCisgIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAgT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgorLS0+CisKKzxzdmcgd2lkdGg9IjEwMCUiIGhlaWdodD0iMTAwJSIgdmVyc2lv
bj0iMS4xIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPgorPHJlY3QgeD0iMCUi
IHk9IjAlIiB3aWR0aD0iMTAwJSIgaGVpZ2h0PSIxMDAlIiBmaWxsPSJibGFjayIgLz4KKworPGRl
ZnM+Cis8ZmlsdGVyIGlkPSJmaWx0IiBmaWx0ZXJVbml0cz0ib2JqZWN0Qm91bmRpbmdCb3giIHg9
IjAiIHk9IjAiIHdpZHRoPSIxMDAlIiBoZWlnaHQ9IjEwMCUiPgorICAgIDxmZVR1cmJ1bGVuY2Ug
aWQ9InR1cmIiIGJhc2VGcmVxdWVuY3k9IjAuMDMiIG51bU9jdGF2ZXM9IjQiIHNlZWQ9IjY3IiBy
ZXN1bHQ9InR1cmIiLz4KKyAgICA8ZmVHYXVzc2lhbkJsdXIgaW49IlNvdXJjZUdyYXBoaWMiIHBy
aW1pdGl2ZVVuaXRzPSJvYmplY3RCb3VuZGluZ0JveCIgaWQ9ImJsdXIiIHN0ZERldmlhdGlvbj0i
MSIgcmVzdWx0PSJibHVyIi8+CisgICAgPGZlQ29tcG9zaXRlIGluPSJ0dXJiIiBpbjI9ImJsdXIi
IG9wZXJhdG9yPSJhcml0aG1ldGljIiBrMj0iMC4zIiBrMz0iMSIgcmVzdWx0PSJjb21wIi8+Cisg
ICAgPGZlRGlmZnVzZUxpZ2h0aW5nIGluPSJjb21wIiBwcmltaXRpdmVVbml0cz0ib2JqZWN0Qm91
bmRpbmdCb3giIGlkPSJkaWZmIiBkaWZmdXNlQ29uc3RhbnQ9IjEiIGxpZ2h0aW5nLWNvbG9yPSJ3
aGl0ZSIgc3VyZmFjZVNjYWxlPSIxMCIgcmVzdWx0PSJsaWdodCIgPgorICAgICAgICA8ZmVTcG90
TGlnaHQgaWQ9ImxpZ2h0IiB4PSIwIiB5PSIzMDAiIHo9IjIwMCIgcG9pbnRzQXRYPSItMjAwIiBw
b2ludHNBdFk9IjEwMCIgcG9pbnRzQXRaPSIwIiBsaW1pdGluZ0NvbmVBbmdsZT0iOTAiIHNwZWN1
bGFyRXhwb25lbnQ9IjIwIiAvPgorICAgIDwvZmVEaWZmdXNlTGlnaHRpbmc+CisgICAgPGZlU3Bl
Y3VsYXJMaWdodGluZyBpbj0iY29tcCIgcHJpbWl0aXZlVW5pdHM9Im9iamVjdEJvdW5kaW5nQm94
IiBpZD0iZGlmZiIgZGlmZnVzZUNvbnN0YW50PSIxIiBsaWdodGluZy1jb2xvcj0iI0E2NjEwMiIg
c3VyZmFjZVNjYWxlPSIxMCIgcmVzdWx0PSJhbWJpZW50IiA+CisgICAgICAgIDxmZURpc3RhbnRM
aWdodCBpZD0ibGlnaHQiIGF6aW11dGg9IjAiIGVsZXZhdGlvbj0iOTAiIC8+CisgICAgPC9mZVNw
ZWN1bGFyTGlnaHRpbmc+CisgICAgICAgIDxmZUNvbXBvc2l0ZSBpbj0ibGlnaHQiIGluMj0iYW1i
aWVudCIgb3BlcmF0b3I9ImFyaXRobWV0aWMiIGsyPSIxLjIiIGszPSIuOCIvPgorPC9maWx0ZXI+
Cis8L2RlZnM+CisKKzxnIGZpbHRlcj0idXJsKCNmaWx0KSIgZmlsbD0id2hpdGUiIHN0cm9rZT0i
YmxhY2siIG9uY2xpY2s9InN0YXJ0KCkiPgorICAgIDxyZWN0IHg9IjAiIHk9IjAiIHdpZHRoPSI0
MDAiIGhlaWdodD0iNSIgLz4KKyAgICA8cmVjdCB4PSIwIiB5PSIwIiB3aWR0aD0iNSIgaGVpZ2h0
PSIyMDAiIC8+CisgICAgPHJlY3QgeD0iMCIgeT0iMTk1IiB3aWR0aD0iNDAwIiBoZWlnaHQ9IjUi
IC8+CisgICAgPHJlY3QgeD0iMzk1IiB5PSIwIiB3aWR0aD0iNSIgaGVpZ2h0PSIyMDAiIC8+Cisg
ICAgPHRleHQgZm9udC1zaXplPSIxNTAiIGZvbnQtd2VpZ2h0PSJib2xkIiB4PSI0MCIgeT0iMTUw
Ij5TVkc8L3RleHQ+Cis8L2c+CisKKzx0ZXh0IGlkPSJmcHMiIHg9IjE1MCIgeT0iMjQwIiBmb250
LXNpemU9IjIwIiBmaWxsPSJ3aGl0ZSIgc3Ryb2tlPSJ3aGl0ZSI+YWZwczo8L3RleHQ+Cis8dGV4
dCB4PSIzMCIgeT0iMjY1IiBmb250LXNpemU9IjIwIiBmb250LXdlaWdodD0iYm9sZCIgZmlsbD0i
d2hpdGUiIHN0cm9rZT0id2hpdGUiPmNsaWNrIG9uIHRoZSBpbWFnZSB0byBzdGFydCB0aGUgYW5p
bWF0aW9uPC90ZXh0PgorCis8c2NyaXB0PgorPCFbQ0RBVEFbCit2YXIgbGlnaHRfeCA9IGRvY3Vt
ZW50LmdldEVsZW1lbnRCeUlkKCdsaWdodCcpLng7Cit2YXIgbGlnaHRfeSA9IGRvY3VtZW50Lmdl
dEVsZW1lbnRCeUlkKCdsaWdodCcpLnk7Cit2YXIgbGlnaHRfcG9pbnRzQXRYID0gZG9jdW1lbnQu
Z2V0RWxlbWVudEJ5SWQoJ2xpZ2h0JykucG9pbnRzQXRYOwordmFyIGxpZ2h0X3BvaW50c0F0WSA9
IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsaWdodCcpLnBvaW50c0F0WTsKK3ZhciBmcHMgPSBk
b2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZnBzJyk7CisKK3ZhciByb3VuZCA9IE1hdGgucm91bmQK
KwordmFyIHN0YXJ0RGF0ZSA9IDA7Cit2YXIgZnJhbWVDb3VudGVyID0gMDsKK3ZhciBwaGFzZSA9
IDA7CitmdW5jdGlvbiBhbmltKCkgeworICAgIHN3aXRjaChwaGFzZSkgeworICAgIGNhc2UgMDoK
KyAgICAgICAgbGlnaHRfcG9pbnRzQXRYLmJhc2VWYWwgKz0gMTA7CisgICAgICAgIGlmIChsaWdo
dF9wb2ludHNBdFguYmFzZVZhbCA+PSAzODApCisgICAgICAgICAgICArK3BoYXNlOworICAgICAg
ICBicmVhazsKKyAgICBjYXNlIDE6CisgICAgICAgIGxpZ2h0X3guYmFzZVZhbCArPSAxMDsKKyAg
ICAgICAgbGlnaHRfcG9pbnRzQXRYLmJhc2VWYWwgLT0gMTA7CisgICAgICAgIGlmIChsaWdodF94
LmJhc2VWYWwgPj0gNDUwKSB7CisgICAgICAgICAgICArK3BoYXNlOworICAgICAgICAgICAgd2Fp
dENvdW50ZXIgPSAwOworICAgICAgICB9CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgMjoKKyAg
ICAgICAgbGlnaHRfeS5iYXNlVmFsIC09IDU7CisgICAgICAgIGlmIChsaWdodF95LmJhc2VWYWwg
PD0gLTEwMCkKKyAgICAgICAgICAgICsrcGhhc2U7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ug
MzoKKyAgICAgICAgbGlnaHRfcG9pbnRzQXRYLmJhc2VWYWwgKz0gMTA7CisgICAgICAgIGlmIChs
aWdodF9wb2ludHNBdFguYmFzZVZhbCA+PSA0NTApIHsKKyAgICAgICAgICAgIGxpZ2h0X3guYmFz
ZVZhbCA9IDA7CisgICAgICAgICAgICBsaWdodF9wb2ludHNBdFguYmFzZVZhbCA9IC0yMDA7Cisg
ICAgICAgICAgICBsaWdodF95LmJhc2VWYWwgPSAzMDA7CisgICAgICAgICAgICBsaWdodF9wb2lu
dHNBdFkuYmFzZVZhbCA9IDEwMDsKKyAgICAgICAgICAgIHBoYXNlID0gMDsKKyAgICAgICAgfQor
ICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICBmcmFtZUNvdW50ZXIrKzsKKyAgICBmcHMudGV4
dENvbnRlbnQgPSAiYWZwczogIiArKHJvdW5kKGZyYW1lQ291bnRlciAqIDEwMDAwMCAvIChuZXcg
RGF0ZSgpIC0gc3RhcnREYXRlKSkgLyAxMDApOworfQorCitmdW5jdGlvbiBzdGFydCgpIHsKKyAg
ICBpZiAoIXN0YXJ0RGF0ZSkgeworICAgICAgICBzdGFydERhdGUgPSBuZXcgRGF0ZSgpOworICAg
ICAgICBzZXRJbnRlcnZhbChhbmltLDEpOworICAgIH0KK30KKworLy9dXT4KKzwvc2NyaXB0Pgor
Cis8L3N2Zz4KZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9G
RUJsZW5kLmNwcCBiL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUJsZW5kLmNw
cAppbmRleCA4OWI0NGUwLi5mODYzNDg3IDEwMDY0NAotLS0gYS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2ZpbHRlcnMvRkVCbGVuZC5jcHAKKysrIGIvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9maWx0ZXJzL0ZFQmxlbmQuY3BwCkBAIC04OCwzMCArODgsMzEgQEAgc3RhdGljIHVuc2lnbmVk
IGNoYXIgbGlnaHRlbih1bnNpZ25lZCBjaGFyIGNvbG9yQSwgdW5zaWduZWQgY2hhciBjb2xvckIs
IHVuc2lnbmUKIAogdm9pZCBGRUJsZW5kOjphcHBseSgpCiB7CisgICAgaWYgKGhhc1Jlc3VsdCgp
KQorICAgICAgICByZXR1cm47CiAgICAgRmlsdGVyRWZmZWN0KiBpbiA9IGlucHV0RWZmZWN0KDAp
OwogICAgIEZpbHRlckVmZmVjdCogaW4yID0gaW5wdXRFZmZlY3QoMSk7CiAgICAgaW4tPmFwcGx5
KCk7CiAgICAgaW4yLT5hcHBseSgpOwotICAgIGlmICghaW4tPnJlc3VsdEltYWdlKCkgfHwgIWlu
Mi0+cmVzdWx0SW1hZ2UoKSkKKyAgICBpZiAoIWluLT5oYXNSZXN1bHQoKSB8fCAhaW4yLT5oYXNS
ZXN1bHQoKSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgaWYgKG1fbW9kZSA8PSBGRUJMRU5EX01P
REVfVU5LTk9XTiB8fCBtX21vZGUgPiBGRUJMRU5EX01PREVfTElHSFRFTikKICAgICAgICAgcmV0
dXJuOwogCi0gICAgaWYgKCFlZmZlY3RDb250ZXh0KCkpCisgICAgSW1hZ2VEYXRhKiByZXN1bHRJ
bWFnZSA9IGNyZWF0ZVByZW11bHRpcGxpZWRJbWFnZVJlc3VsdCgpOworICAgIGlmICghcmVzdWx0
SW1hZ2UpCiAgICAgICAgIHJldHVybjsKIAogICAgIEludFJlY3QgZWZmZWN0QURyYXdpbmdSZWN0
ID0gcmVxdWVzdGVkUmVnaW9uT2ZJbnB1dEltYWdlRGF0YShpbi0+YWJzb2x1dGVQYWludFJlY3Qo
KSk7Ci0gICAgUmVmUHRyPEltYWdlRGF0YT4gc3JjSW1hZ2VEYXRhQSA9IGluLT5yZXN1bHRJbWFn
ZSgpLT5nZXRQcmVtdWx0aXBsaWVkSW1hZ2VEYXRhKGVmZmVjdEFEcmF3aW5nUmVjdCk7CisgICAg
UmVmUHRyPEltYWdlRGF0YT4gc3JjSW1hZ2VEYXRhQSA9IGluLT5hc1ByZW11bHRpcGxpZWRJbWFn
ZShlZmZlY3RBRHJhd2luZ1JlY3QpOwogICAgIEJ5dGVBcnJheSogc3JjUGl4ZWxBcnJheUEgPSBz
cmNJbWFnZURhdGFBLT5kYXRhKCktPmRhdGEoKTsKIAogICAgIEludFJlY3QgZWZmZWN0QkRyYXdp
bmdSZWN0ID0gcmVxdWVzdGVkUmVnaW9uT2ZJbnB1dEltYWdlRGF0YShpbjItPmFic29sdXRlUGFp
bnRSZWN0KCkpOwotICAgIFJlZlB0cjxJbWFnZURhdGE+IHNyY0ltYWdlRGF0YUIgPSBpbjItPnJl
c3VsdEltYWdlKCktPmdldFByZW11bHRpcGxpZWRJbWFnZURhdGEoZWZmZWN0QkRyYXdpbmdSZWN0
KTsKKyAgICBSZWZQdHI8SW1hZ2VEYXRhPiBzcmNJbWFnZURhdGFCID0gaW4yLT5hc1ByZW11bHRp
cGxpZWRJbWFnZShlZmZlY3RCRHJhd2luZ1JlY3QpOwogICAgIEJ5dGVBcnJheSogc3JjUGl4ZWxB
cnJheUIgPSBzcmNJbWFnZURhdGFCLT5kYXRhKCktPmRhdGEoKTsKIAotICAgIEludFJlY3QgaW1h
Z2VSZWN0KEludFBvaW50KCksIHJlc3VsdEltYWdlKCktPnNpemUoKSk7Ci0gICAgUmVmUHRyPElt
YWdlRGF0YT4gaW1hZ2VEYXRhID0gSW1hZ2VEYXRhOjpjcmVhdGUoaW1hZ2VSZWN0LndpZHRoKCks
IGltYWdlUmVjdC5oZWlnaHQoKSk7Ci0gICAgQnl0ZUFycmF5KiBkc3RQaXhlbEFycmF5ID0gaW1h
Z2VEYXRhLT5kYXRhKCktPmRhdGEoKTsKKyAgICBCeXRlQXJyYXkqIGRzdFBpeGVsQXJyYXkgPSBy
ZXN1bHRJbWFnZS0+ZGF0YSgpLT5kYXRhKCk7CiAKICAgICAvLyBLZWVwIHN5bmNocm9uaXplZCB3
aXRoIEJsZW5kTW9kZVR5cGUKICAgICBzdGF0aWMgY29uc3QgQmxlbmRUeXBlIGNhbGxFZmZlY3Rb
XSA9IHt1bmtub3duLCBub3JtYWwsIG11bHRpcGx5LCBzY3JlZW4sIGRhcmtlbiwgbGlnaHRlbn07
CkBAIC0xMzEsOCArMTMyLDYgQEAgdm9pZCBGRUJsZW5kOjphcHBseSgpCiAgICAgICAgIHVuc2ln
bmVkIGNoYXIgYWxwaGFSID0gMjU1IC0gKCgyNTUgLSBhbHBoYUEpICogKDI1NSAtIGFscGhhQikp
IC8gMjU1OwogICAgICAgICBkc3RQaXhlbEFycmF5LT5zZXQocGl4ZWxPZmZzZXQgKyAzLCBhbHBo
YVIpOwogICAgIH0KLQotICAgIHJlc3VsdEltYWdlKCktPnB1dFByZW11bHRpcGxpZWRJbWFnZURh
dGEoaW1hZ2VEYXRhLmdldCgpLCBpbWFnZVJlY3QsIEludFBvaW50KCkpOwogfQogCiB2b2lkIEZF
QmxlbmQ6OmR1bXAoKQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0
ZXJzL0ZFQ29sb3JNYXRyaXguY3BwIGIvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJz
L0ZFQ29sb3JNYXRyaXguY3BwCmluZGV4IDFjOTliMWUuLjM4MjQ2Y2YgMTAwNjQ0Ci0tLSBhL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUNvbG9yTWF0cml4LmNwcAorKysgYi9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDb2xvck1hdHJpeC5jcHAKQEAgLTE1
MCwxOSArMTUwLDIxIEBAIHZvaWQgZWZmZWN0VHlwZShCeXRlQXJyYXkqIHBpeGVsQXJyYXksIGNv
bnN0IFZlY3RvcjxmbG9hdD4mIHZhbHVlcykKIAogdm9pZCBGRUNvbG9yTWF0cml4OjphcHBseSgp
CiB7CisgICAgaWYgKGhhc1Jlc3VsdCgpKQorICAgICAgICByZXR1cm47CiAgICAgRmlsdGVyRWZm
ZWN0KiBpbiA9IGlucHV0RWZmZWN0KDApOwogICAgIGluLT5hcHBseSgpOwotICAgIGlmICghaW4t
PnJlc3VsdEltYWdlKCkpCisgICAgaWYgKCFpbi0+aGFzUmVzdWx0KCkpCiAgICAgICAgIHJldHVy
bjsKIAotICAgIEdyYXBoaWNzQ29udGV4dCogZmlsdGVyQ29udGV4dCA9IGVmZmVjdENvbnRleHQo
KTsKLSAgICBpZiAoIWZpbHRlckNvbnRleHQpCisgICAgSW1hZ2VCdWZmZXIqIHJlc3VsdEltYWdl
ID0gY3JlYXRlSW1hZ2VCdWZmZXJSZXN1bHQoKTsKKyAgICBpZiAoIXJlc3VsdEltYWdlKQogICAg
ICAgICByZXR1cm47CiAKLSAgICBmaWx0ZXJDb250ZXh0LT5kcmF3SW1hZ2VCdWZmZXIoaW4tPnJl
c3VsdEltYWdlKCksIENvbG9yU3BhY2VEZXZpY2VSR0IsIGRyYXdpbmdSZWdpb25PZklucHV0SW1h
Z2UoaW4tPmFic29sdXRlUGFpbnRSZWN0KCkpKTsKKyAgICByZXN1bHRJbWFnZS0+Y29udGV4dCgp
LT5kcmF3SW1hZ2VCdWZmZXIoaW4tPmFzSW1hZ2VCdWZmZXIoKSwgQ29sb3JTcGFjZURldmljZVJH
QiwgZHJhd2luZ1JlZ2lvbk9mSW5wdXRJbWFnZShpbi0+YWJzb2x1dGVQYWludFJlY3QoKSkpOwog
Ci0gICAgSW50UmVjdCBpbWFnZVJlY3QoSW50UG9pbnQoKSwgcmVzdWx0SW1hZ2UoKS0+c2l6ZSgp
KTsKLSAgICBSZWZQdHI8SW1hZ2VEYXRhPiBpbWFnZURhdGEgPSByZXN1bHRJbWFnZSgpLT5nZXRV
bm11bHRpcGxpZWRJbWFnZURhdGEoaW1hZ2VSZWN0KTsKKyAgICBJbnRSZWN0IGltYWdlUmVjdChJ
bnRQb2ludCgpLCBhYnNvbHV0ZVBhaW50UmVjdCgpLnNpemUoKSk7CisgICAgUmVmUHRyPEltYWdl
RGF0YT4gaW1hZ2VEYXRhID0gcmVzdWx0SW1hZ2UtPmdldFVubXVsdGlwbGllZEltYWdlRGF0YShp
bWFnZVJlY3QpOwogICAgIEJ5dGVBcnJheSogcGl4ZWxBcnJheSA9IGltYWdlRGF0YS0+ZGF0YSgp
LT5kYXRhKCk7CiAKICAgICBzd2l0Y2ggKG1fdHlwZSkgewpAQCAtMTgzLDcgKzE4NSw3IEBAIHZv
aWQgRkVDb2xvck1hdHJpeDo6YXBwbHkoKQogICAgICAgICAgICAgYnJlYWs7CiAgICAgfQogCi0g
ICAgcmVzdWx0SW1hZ2UoKS0+cHV0VW5tdWx0aXBsaWVkSW1hZ2VEYXRhKGltYWdlRGF0YS5nZXQo
KSwgaW1hZ2VSZWN0LCBJbnRQb2ludCgpKTsKKyAgICByZXN1bHRJbWFnZS0+cHV0VW5tdWx0aXBs
aWVkSW1hZ2VEYXRhKGltYWdlRGF0YS5nZXQoKSwgaW1hZ2VSZWN0LCBJbnRQb2ludCgpKTsKIH0K
IAogdm9pZCBGRUNvbG9yTWF0cml4OjpkdW1wKCkKZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvZmlsdGVycy9GRUNvbXBvbmVudFRyYW5zZmVyLmNwcCBiL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUNvbXBvbmVudFRyYW5zZmVyLmNwcAppbmRleCBjZmFi
NTBiLi5mOGY2NTFjIDEwMDY0NAotLS0gYS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRl
cnMvRkVDb21wb25lbnRUcmFuc2Zlci5jcHAKKysrIGIvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9maWx0ZXJzL0ZFQ29tcG9uZW50VHJhbnNmZXIuY3BwCkBAIC0xNDksMTIgKzE0OSwxNSBAQCBz
dGF0aWMgdm9pZCBnYW1tYSh1bnNpZ25lZCBjaGFyKiB2YWx1ZXMsIGNvbnN0IENvbXBvbmVudFRy
YW5zZmVyRnVuY3Rpb24mIHRyYW5zZgogCiB2b2lkIEZFQ29tcG9uZW50VHJhbnNmZXI6OmFwcGx5
KCkKIHsKKyAgICBpZiAoaGFzUmVzdWx0KCkpCisgICAgICAgIHJldHVybjsKICAgICBGaWx0ZXJF
ZmZlY3QqIGluID0gaW5wdXRFZmZlY3QoMCk7CiAgICAgaW4tPmFwcGx5KCk7Ci0gICAgaWYgKCFp
bi0+cmVzdWx0SW1hZ2UoKSkKKyAgICBpZiAoIWluLT5oYXNSZXN1bHQoKSkKICAgICAgICAgcmV0
dXJuOwogCi0gICAgaWYgKCFlZmZlY3RDb250ZXh0KCkpCisgICAgSW1hZ2VEYXRhKiBpbWFnZURh
dGEgPSBjcmVhdGVVbm11bHRpcGxpZWRJbWFnZVJlc3VsdCgpOworICAgIGlmICghaW1hZ2VEYXRh
KQogICAgICAgICByZXR1cm47CiAKICAgICB1bnNpZ25lZCBjaGFyIHJWYWx1ZXNbMjU2XSwgZ1Zh
bHVlc1syNTZdLCBiVmFsdWVzWzI1Nl0sIGFWYWx1ZXNbMjU2XTsKQEAgLTE2OCw3ICsxNzEsNyBA
QCB2b2lkIEZFQ29tcG9uZW50VHJhbnNmZXI6OmFwcGx5KCkKICAgICAgICAgKCpjYWxsRWZmZWN0
W3RyYW5zZmVyRnVuY3Rpb25bY2hhbm5lbF0udHlwZV0pKHRhYmxlc1tjaGFubmVsXSwgdHJhbnNm
ZXJGdW5jdGlvbltjaGFubmVsXSk7CiAKICAgICBJbnRSZWN0IGRyYXdpbmdSZWN0ID0gcmVxdWVz
dGVkUmVnaW9uT2ZJbnB1dEltYWdlRGF0YShpbi0+YWJzb2x1dGVQYWludFJlY3QoKSk7Ci0gICAg
UmVmUHRyPEltYWdlRGF0YT4gaW1hZ2VEYXRhID0gaW4tPnJlc3VsdEltYWdlKCktPmdldFVubXVs
dGlwbGllZEltYWdlRGF0YShkcmF3aW5nUmVjdCk7CisgICAgaW4tPmNvcHlVbm11bHRpcGxpZWRJ
bWFnZShpbWFnZURhdGEsIGRyYXdpbmdSZWN0KTsKICAgICBCeXRlQXJyYXkqIHBpeGVsQXJyYXkg
PSBpbWFnZURhdGEtPmRhdGEoKS0+ZGF0YSgpOwogCiAgICAgdW5zaWduZWQgcGl4ZWxBcnJheUxl
bmd0aCA9IHBpeGVsQXJyYXktPmxlbmd0aCgpOwpAQCAtMTc4LDggKzE4MSw2IEBAIHZvaWQgRkVD
b21wb25lbnRUcmFuc2Zlcjo6YXBwbHkoKQogICAgICAgICAgICAgcGl4ZWxBcnJheS0+c2V0KHBp
eGVsT2Zmc2V0ICsgY2hhbm5lbCwgdGFibGVzW2NoYW5uZWxdW2NdKTsKICAgICAgICAgfQogICAg
IH0KLQotICAgIHJlc3VsdEltYWdlKCktPnB1dFVubXVsdGlwbGllZEltYWdlRGF0YShpbWFnZURh
dGEuZ2V0KCksIEludFJlY3QoSW50UG9pbnQoKSwgcmVzdWx0SW1hZ2UoKS0+c2l6ZSgpKSwgSW50
UG9pbnQoKSk7CiB9CiAKIHZvaWQgRkVDb21wb25lbnRUcmFuc2Zlcjo6ZHVtcCgpCmRpZmYgLS1n
aXQgYS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDb21wb3NpdGUuY3BwIGIv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29tcG9zaXRlLmNwcAppbmRleCBk
MjczMjFmLi4wMTBjZWVmIDEwMDY0NAotLS0gYS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Zp
bHRlcnMvRkVDb21wb3NpdGUuY3BwCisrKyBiL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmls
dGVycy9GRUNvbXBvc2l0ZS5jcHAKQEAgLTEzNyw1MiArMTM3LDU1IEBAIHZvaWQgRkVDb21wb3Np
dGU6OmRldGVybWluZUFic29sdXRlUGFpbnRSZWN0KCkKIAogdm9pZCBGRUNvbXBvc2l0ZTo6YXBw
bHkoKQogeworICAgIGlmIChoYXNSZXN1bHQoKSkKKyAgICAgICAgcmV0dXJuOwogICAgIEZpbHRl
ckVmZmVjdCogaW4gPSBpbnB1dEVmZmVjdCgwKTsKICAgICBGaWx0ZXJFZmZlY3QqIGluMiA9IGlu
cHV0RWZmZWN0KDEpOwogICAgIGluLT5hcHBseSgpOwogICAgIGluMi0+YXBwbHkoKTsKLSAgICBp
ZiAoIWluLT5yZXN1bHRJbWFnZSgpIHx8ICFpbjItPnJlc3VsdEltYWdlKCkpCisgICAgaWYgKCFp
bi0+aGFzUmVzdWx0KCkgfHwgIWluMi0+aGFzUmVzdWx0KCkpCiAgICAgICAgIHJldHVybjsKIAot
ICAgIEdyYXBoaWNzQ29udGV4dCogZmlsdGVyQ29udGV4dCA9IGVmZmVjdENvbnRleHQoKTsKLSAg
ICBpZiAoIWZpbHRlckNvbnRleHQpCisgICAgSW1hZ2VCdWZmZXIqIHJlc3VsdEltYWdlID0gY3Jl
YXRlSW1hZ2VCdWZmZXJSZXN1bHQoKTsKKyAgICBpZiAoIXJlc3VsdEltYWdlKQogICAgICAgICBy
ZXR1cm47CisgICAgR3JhcGhpY3NDb250ZXh0KiBmaWx0ZXJDb250ZXh0ID0gcmVzdWx0SW1hZ2Ut
PmNvbnRleHQoKTsKIAogICAgIEZsb2F0UmVjdCBzcmNSZWN0ID0gRmxvYXRSZWN0KDAsIDAsIC0x
LCAtMSk7CiAgICAgc3dpdGNoIChtX3R5cGUpIHsKICAgICBjYXNlIEZFQ09NUE9TSVRFX09QRVJB
VE9SX09WRVI6Ci0gICAgICAgIGZpbHRlckNvbnRleHQtPmRyYXdJbWFnZUJ1ZmZlcihpbjItPnJl
c3VsdEltYWdlKCksIENvbG9yU3BhY2VEZXZpY2VSR0IsIGRyYXdpbmdSZWdpb25PZklucHV0SW1h
Z2UoaW4yLT5hYnNvbHV0ZVBhaW50UmVjdCgpKSk7Ci0gICAgICAgIGZpbHRlckNvbnRleHQtPmRy
YXdJbWFnZUJ1ZmZlcihpbi0+cmVzdWx0SW1hZ2UoKSwgQ29sb3JTcGFjZURldmljZVJHQiwgZHJh
d2luZ1JlZ2lvbk9mSW5wdXRJbWFnZShpbi0+YWJzb2x1dGVQYWludFJlY3QoKSkpOworICAgICAg
ICBmaWx0ZXJDb250ZXh0LT5kcmF3SW1hZ2VCdWZmZXIoaW4yLT5hc0ltYWdlQnVmZmVyKCksIENv
bG9yU3BhY2VEZXZpY2VSR0IsIGRyYXdpbmdSZWdpb25PZklucHV0SW1hZ2UoaW4yLT5hYnNvbHV0
ZVBhaW50UmVjdCgpKSk7CisgICAgICAgIGZpbHRlckNvbnRleHQtPmRyYXdJbWFnZUJ1ZmZlcihp
bi0+YXNJbWFnZUJ1ZmZlcigpLCBDb2xvclNwYWNlRGV2aWNlUkdCLCBkcmF3aW5nUmVnaW9uT2ZJ
bnB1dEltYWdlKGluLT5hYnNvbHV0ZVBhaW50UmVjdCgpKSk7CiAgICAgICAgIGJyZWFrOwogICAg
IGNhc2UgRkVDT01QT1NJVEVfT1BFUkFUT1JfSU46CiAgICAgICAgIGZpbHRlckNvbnRleHQtPnNh
dmUoKTsKLSAgICAgICAgZmlsdGVyQ29udGV4dC0+Y2xpcFRvSW1hZ2VCdWZmZXIoaW4yLT5yZXN1
bHRJbWFnZSgpLCBkcmF3aW5nUmVnaW9uT2ZJbnB1dEltYWdlKGluMi0+YWJzb2x1dGVQYWludFJl
Y3QoKSkpOwotICAgICAgICBmaWx0ZXJDb250ZXh0LT5kcmF3SW1hZ2VCdWZmZXIoaW4tPnJlc3Vs
dEltYWdlKCksIENvbG9yU3BhY2VEZXZpY2VSR0IsIGRyYXdpbmdSZWdpb25PZklucHV0SW1hZ2Uo
aW4tPmFic29sdXRlUGFpbnRSZWN0KCkpKTsKKyAgICAgICAgZmlsdGVyQ29udGV4dC0+Y2xpcFRv
SW1hZ2VCdWZmZXIoaW4yLT5hc0ltYWdlQnVmZmVyKCksIGRyYXdpbmdSZWdpb25PZklucHV0SW1h
Z2UoaW4yLT5hYnNvbHV0ZVBhaW50UmVjdCgpKSk7CisgICAgICAgIGZpbHRlckNvbnRleHQtPmRy
YXdJbWFnZUJ1ZmZlcihpbi0+YXNJbWFnZUJ1ZmZlcigpLCBDb2xvclNwYWNlRGV2aWNlUkdCLCBk
cmF3aW5nUmVnaW9uT2ZJbnB1dEltYWdlKGluLT5hYnNvbHV0ZVBhaW50UmVjdCgpKSk7CiAgICAg
ICAgIGZpbHRlckNvbnRleHQtPnJlc3RvcmUoKTsKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBG
RUNPTVBPU0lURV9PUEVSQVRPUl9PVVQ6Ci0gICAgICAgIGZpbHRlckNvbnRleHQtPmRyYXdJbWFn
ZUJ1ZmZlcihpbi0+cmVzdWx0SW1hZ2UoKSwgQ29sb3JTcGFjZURldmljZVJHQiwgZHJhd2luZ1Jl
Z2lvbk9mSW5wdXRJbWFnZShpbi0+YWJzb2x1dGVQYWludFJlY3QoKSkpOwotICAgICAgICBmaWx0
ZXJDb250ZXh0LT5kcmF3SW1hZ2VCdWZmZXIoaW4yLT5yZXN1bHRJbWFnZSgpLCBDb2xvclNwYWNl
RGV2aWNlUkdCLCBkcmF3aW5nUmVnaW9uT2ZJbnB1dEltYWdlKGluMi0+YWJzb2x1dGVQYWludFJl
Y3QoKSksIHNyY1JlY3QsIENvbXBvc2l0ZURlc3RpbmF0aW9uT3V0KTsKKyAgICAgICAgZmlsdGVy
Q29udGV4dC0+ZHJhd0ltYWdlQnVmZmVyKGluLT5hc0ltYWdlQnVmZmVyKCksIENvbG9yU3BhY2VE
ZXZpY2VSR0IsIGRyYXdpbmdSZWdpb25PZklucHV0SW1hZ2UoaW4tPmFic29sdXRlUGFpbnRSZWN0
KCkpKTsKKyAgICAgICAgZmlsdGVyQ29udGV4dC0+ZHJhd0ltYWdlQnVmZmVyKGluMi0+YXNJbWFn
ZUJ1ZmZlcigpLCBDb2xvclNwYWNlRGV2aWNlUkdCLCBkcmF3aW5nUmVnaW9uT2ZJbnB1dEltYWdl
KGluMi0+YWJzb2x1dGVQYWludFJlY3QoKSksIHNyY1JlY3QsIENvbXBvc2l0ZURlc3RpbmF0aW9u
T3V0KTsKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBGRUNPTVBPU0lURV9PUEVSQVRPUl9BVE9Q
OgotICAgICAgICBmaWx0ZXJDb250ZXh0LT5kcmF3SW1hZ2VCdWZmZXIoaW4yLT5yZXN1bHRJbWFn
ZSgpLCBDb2xvclNwYWNlRGV2aWNlUkdCLCBkcmF3aW5nUmVnaW9uT2ZJbnB1dEltYWdlKGluMi0+
YWJzb2x1dGVQYWludFJlY3QoKSkpOwotICAgICAgICBmaWx0ZXJDb250ZXh0LT5kcmF3SW1hZ2VC
dWZmZXIoaW4tPnJlc3VsdEltYWdlKCksIENvbG9yU3BhY2VEZXZpY2VSR0IsIGRyYXdpbmdSZWdp
b25PZklucHV0SW1hZ2UoaW4tPmFic29sdXRlUGFpbnRSZWN0KCkpLCBzcmNSZWN0LCBDb21wb3Np
dGVTb3VyY2VBdG9wKTsKKyAgICAgICAgZmlsdGVyQ29udGV4dC0+ZHJhd0ltYWdlQnVmZmVyKGlu
Mi0+YXNJbWFnZUJ1ZmZlcigpLCBDb2xvclNwYWNlRGV2aWNlUkdCLCBkcmF3aW5nUmVnaW9uT2ZJ
bnB1dEltYWdlKGluMi0+YWJzb2x1dGVQYWludFJlY3QoKSkpOworICAgICAgICBmaWx0ZXJDb250
ZXh0LT5kcmF3SW1hZ2VCdWZmZXIoaW4tPmFzSW1hZ2VCdWZmZXIoKSwgQ29sb3JTcGFjZURldmlj
ZVJHQiwgZHJhd2luZ1JlZ2lvbk9mSW5wdXRJbWFnZShpbi0+YWJzb2x1dGVQYWludFJlY3QoKSks
IHNyY1JlY3QsIENvbXBvc2l0ZVNvdXJjZUF0b3ApOwogICAgICAgICBicmVhazsKICAgICBjYXNl
IEZFQ09NUE9TSVRFX09QRVJBVE9SX1hPUjoKLSAgICAgICAgZmlsdGVyQ29udGV4dC0+ZHJhd0lt
YWdlQnVmZmVyKGluMi0+cmVzdWx0SW1hZ2UoKSwgQ29sb3JTcGFjZURldmljZVJHQiwgZHJhd2lu
Z1JlZ2lvbk9mSW5wdXRJbWFnZShpbjItPmFic29sdXRlUGFpbnRSZWN0KCkpKTsKLSAgICAgICAg
ZmlsdGVyQ29udGV4dC0+ZHJhd0ltYWdlQnVmZmVyKGluLT5yZXN1bHRJbWFnZSgpLCBDb2xvclNw
YWNlRGV2aWNlUkdCLCBkcmF3aW5nUmVnaW9uT2ZJbnB1dEltYWdlKGluLT5hYnNvbHV0ZVBhaW50
UmVjdCgpKSwgc3JjUmVjdCwgQ29tcG9zaXRlWE9SKTsKKyAgICAgICAgZmlsdGVyQ29udGV4dC0+
ZHJhd0ltYWdlQnVmZmVyKGluMi0+YXNJbWFnZUJ1ZmZlcigpLCBDb2xvclNwYWNlRGV2aWNlUkdC
LCBkcmF3aW5nUmVnaW9uT2ZJbnB1dEltYWdlKGluMi0+YWJzb2x1dGVQYWludFJlY3QoKSkpOwor
ICAgICAgICBmaWx0ZXJDb250ZXh0LT5kcmF3SW1hZ2VCdWZmZXIoaW4tPmFzSW1hZ2VCdWZmZXIo
KSwgQ29sb3JTcGFjZURldmljZVJHQiwgZHJhd2luZ1JlZ2lvbk9mSW5wdXRJbWFnZShpbi0+YWJz
b2x1dGVQYWludFJlY3QoKSksIHNyY1JlY3QsIENvbXBvc2l0ZVhPUik7CiAgICAgICAgIGJyZWFr
OwogICAgIGNhc2UgRkVDT01QT1NJVEVfT1BFUkFUT1JfQVJJVEhNRVRJQzogewogICAgICAgICBJ
bnRSZWN0IGVmZmVjdEFEcmF3aW5nUmVjdCA9IHJlcXVlc3RlZFJlZ2lvbk9mSW5wdXRJbWFnZURh
dGEoaW4tPmFic29sdXRlUGFpbnRSZWN0KCkpOwotICAgICAgICBSZWZQdHI8SW1hZ2VEYXRhPiBz
cmNJbWFnZURhdGEgPSBpbi0+cmVzdWx0SW1hZ2UoKS0+Z2V0UHJlbXVsdGlwbGllZEltYWdlRGF0
YShlZmZlY3RBRHJhd2luZ1JlY3QpOworICAgICAgICBSZWZQdHI8SW1hZ2VEYXRhPiBzcmNJbWFn
ZURhdGEgPSBpbi0+YXNJbWFnZUJ1ZmZlcigpLT5nZXRQcmVtdWx0aXBsaWVkSW1hZ2VEYXRhKGVm
ZmVjdEFEcmF3aW5nUmVjdCk7CiAgICAgICAgIEJ5dGVBcnJheSogc3JjUGl4ZWxBcnJheUEgPSBz
cmNJbWFnZURhdGEtPmRhdGEoKS0+ZGF0YSgpOwogCiAgICAgICAgIEludFJlY3QgZWZmZWN0QkRy
YXdpbmdSZWN0ID0gcmVxdWVzdGVkUmVnaW9uT2ZJbnB1dEltYWdlRGF0YShpbjItPmFic29sdXRl
UGFpbnRSZWN0KCkpOwotICAgICAgICBSZWZQdHI8SW1hZ2VEYXRhPiBpbWFnZURhdGEgPSBpbjIt
PnJlc3VsdEltYWdlKCktPmdldFByZW11bHRpcGxpZWRJbWFnZURhdGEoZWZmZWN0QkRyYXdpbmdS
ZWN0KTsKKyAgICAgICAgUmVmUHRyPEltYWdlRGF0YT4gaW1hZ2VEYXRhID0gaW4yLT5hc0ltYWdl
QnVmZmVyKCktPmdldFByZW11bHRpcGxpZWRJbWFnZURhdGEoZWZmZWN0QkRyYXdpbmdSZWN0KTsK
ICAgICAgICAgQnl0ZUFycmF5KiBzcmNQaXhlbEFycmF5QiA9IGltYWdlRGF0YS0+ZGF0YSgpLT5k
YXRhKCk7CiAKICAgICAgICAgYXJpdGhtZXRpYyhzcmNQaXhlbEFycmF5QSwgc3JjUGl4ZWxBcnJh
eUIsIG1fazEsIG1fazIsIG1fazMsIG1fazQpOwotICAgICAgICByZXN1bHRJbWFnZSgpLT5wdXRQ
cmVtdWx0aXBsaWVkSW1hZ2VEYXRhKGltYWdlRGF0YS5nZXQoKSwgSW50UmVjdChJbnRQb2ludCgp
LCByZXN1bHRJbWFnZSgpLT5zaXplKCkpLCBJbnRQb2ludCgpKTsKKyAgICAgICAgcmVzdWx0SW1h
Z2UtPnB1dFByZW11bHRpcGxpZWRJbWFnZURhdGEoaW1hZ2VEYXRhLmdldCgpLCBJbnRSZWN0KElu
dFBvaW50KCksIHJlc3VsdEltYWdlLT5zaXplKCkpLCBJbnRQb2ludCgpKTsKICAgICAgICAgfQog
ICAgICAgICBicmVhazsKICAgICBkZWZhdWx0OgpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29udm9sdmVNYXRyaXguY3BwIGIvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29udm9sdmVNYXRyaXguY3BwCmluZGV4IDE5OGQ3NjQuLmQx
ZjljN2IgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUNv
bnZvbHZlTWF0cml4LmNwcAorKysgYi9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMv
RkVDb252b2x2ZU1hdHJpeC5jcHAKQEAgLTM3MiwzNSArMzcyLDQwIEBAIEFMV0FZU19JTkxJTkUg
dm9pZCBGRUNvbnZvbHZlTWF0cml4OjpzZXRPdXRlclBpeGVscyhQYWludGluZ0RhdGEmIHBhaW50
aW5nRGF0YSwKIAogdm9pZCBGRUNvbnZvbHZlTWF0cml4OjphcHBseSgpCiB7CisgICAgaWYgKGhh
c1Jlc3VsdCgpKQorICAgICAgICByZXR1cm47CiAgICAgRmlsdGVyRWZmZWN0KiBpbiA9IGlucHV0
RWZmZWN0KDApOwogICAgIGluLT5hcHBseSgpOwotICAgIGlmICghaW4tPnJlc3VsdEltYWdlKCkp
CisgICAgaWYgKCFpbi0+aGFzUmVzdWx0KCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIGlmICgh
ZWZmZWN0Q29udGV4dCgpKQorICAgIEltYWdlRGF0YSogcmVzdWx0SW1hZ2U7CisgICAgaWYgKG1f
cHJlc2VydmVBbHBoYSkKKyAgICAgICAgcmVzdWx0SW1hZ2UgPSBjcmVhdGVVbm11bHRpcGxpZWRJ
bWFnZVJlc3VsdCgpOworICAgIGVsc2UKKyAgICAgICAgcmVzdWx0SW1hZ2UgPSBjcmVhdGVQcmVt
dWx0aXBsaWVkSW1hZ2VSZXN1bHQoKTsKKyAgICBpZiAoIXJlc3VsdEltYWdlKQogICAgICAgICBy
ZXR1cm47CiAKLSAgICBJbnRSZWN0IGltYWdlUmVjdChJbnRQb2ludCgpLCByZXN1bHRJbWFnZSgp
LT5zaXplKCkpOwogICAgIEludFJlY3QgZWZmZWN0RHJhd2luZ1JlY3QgPSByZXF1ZXN0ZWRSZWdp
b25PZklucHV0SW1hZ2VEYXRhKGluLT5hYnNvbHV0ZVBhaW50UmVjdCgpKTsKIAogICAgIFJlZlB0
cjxDYW52YXNQaXhlbEFycmF5PiBzcmNQaXhlbEFycmF5OwogICAgIGlmIChtX3ByZXNlcnZlQWxw
aGEpCi0gICAgICAgIHNyY1BpeGVsQXJyYXkgPSBpbi0+cmVzdWx0SW1hZ2UoKS0+Z2V0VW5tdWx0
aXBsaWVkSW1hZ2VEYXRhKGVmZmVjdERyYXdpbmdSZWN0KS0+ZGF0YSgpOworICAgICAgICBzcmNQ
aXhlbEFycmF5ID0gaW4tPmFzVW5tdWx0aXBsaWVkSW1hZ2UoZWZmZWN0RHJhd2luZ1JlY3QpLT5k
YXRhKCk7CiAgICAgZWxzZQotICAgICAgICBzcmNQaXhlbEFycmF5ID0gaW4tPnJlc3VsdEltYWdl
KCktPmdldFByZW11bHRpcGxpZWRJbWFnZURhdGEoZWZmZWN0RHJhd2luZ1JlY3QpLT5kYXRhKCk7
Ci0KLSAgICBSZWZQdHI8SW1hZ2VEYXRhPiBpbWFnZURhdGEgPSBJbWFnZURhdGE6OmNyZWF0ZShp
bWFnZVJlY3Qud2lkdGgoKSwgaW1hZ2VSZWN0LmhlaWdodCgpKTsKKyAgICAgICAgc3JjUGl4ZWxB
cnJheSA9IGluLT5hc1ByZW11bHRpcGxpZWRJbWFnZShlZmZlY3REcmF3aW5nUmVjdCktPmRhdGEo
KTsKIAorICAgIEludFNpemUgcGFpbnRTaXplID0gYWJzb2x1dGVQYWludFJlY3QoKS5zaXplKCk7
CiAgICAgUGFpbnRpbmdEYXRhIHBhaW50aW5nRGF0YTsKICAgICBwYWludGluZ0RhdGEuc3JjUGl4
ZWxBcnJheSA9IHNyY1BpeGVsQXJyYXkuZ2V0KCk7Ci0gICAgcGFpbnRpbmdEYXRhLmRzdFBpeGVs
QXJyYXkgPSBpbWFnZURhdGEtPmRhdGEoKTsKLSAgICBwYWludGluZ0RhdGEud2lkdGggPSBpbWFn
ZVJlY3Qud2lkdGgoKTsKLSAgICBwYWludGluZ0RhdGEuaGVpZ2h0ID0gaW1hZ2VSZWN0LmhlaWdo
dCgpOworICAgIHBhaW50aW5nRGF0YS5kc3RQaXhlbEFycmF5ID0gcmVzdWx0SW1hZ2UtPmRhdGEo
KTsKKyAgICBwYWludGluZ0RhdGEud2lkdGggPSBwYWludFNpemUud2lkdGgoKTsKKyAgICBwYWlu
dGluZ0RhdGEuaGVpZ2h0ID0gcGFpbnRTaXplLmhlaWdodCgpOwogICAgIHBhaW50aW5nRGF0YS5i
aWFzID0gbV9iaWFzICogMjU1OwogCiAgICAgLy8gRHJhd2luZyBmdWxseSBjb3ZlcmVkIHBpeGVs
cwotICAgIGludCBjbGlwUmlnaHQgPSBpbWFnZVJlY3Qud2lkdGgoKSAtIG1fa2VybmVsU2l6ZS53
aWR0aCgpOwotICAgIGludCBjbGlwQm90dG9tID0gaW1hZ2VSZWN0LmhlaWdodCgpIC0gbV9rZXJu
ZWxTaXplLmhlaWdodCgpOworICAgIGludCBjbGlwUmlnaHQgPSBwYWludFNpemUud2lkdGgoKSAt
IG1fa2VybmVsU2l6ZS53aWR0aCgpOworICAgIGludCBjbGlwQm90dG9tID0gcGFpbnRTaXplLmhl
aWdodCgpIC0gbV9rZXJuZWxTaXplLmhlaWdodCgpOwogCiAgICAgaWYgKGNsaXBSaWdodCA+PSAw
ICYmIGNsaXBCb3R0b20gPj0gMCkgewogICAgICAgICBzZXRJbnRlcmlvclBpeGVscyhwYWludGlu
Z0RhdGEsIGNsaXBSaWdodCwgY2xpcEJvdHRvbSk7CkBAIC00MDgsMjIgKzQxMywxNyBAQCB2b2lk
IEZFQ29udm9sdmVNYXRyaXg6OmFwcGx5KCkKICAgICAgICAgY2xpcFJpZ2h0ICs9IG1fdGFyZ2V0
T2Zmc2V0LngoKSArIDE7CiAgICAgICAgIGNsaXBCb3R0b20gKz0gbV90YXJnZXRPZmZzZXQueSgp
ICsgMTsKICAgICAgICAgaWYgKG1fdGFyZ2V0T2Zmc2V0LnkoKSA+IDApCi0gICAgICAgICAgICBz
ZXRPdXRlclBpeGVscyhwYWludGluZ0RhdGEsIDAsIDAsIGltYWdlUmVjdC53aWR0aCgpLCBtX3Rh
cmdldE9mZnNldC55KCkpOwotICAgICAgICBpZiAoY2xpcEJvdHRvbSA8IGltYWdlUmVjdC5oZWln
aHQoKSkKLSAgICAgICAgICAgIHNldE91dGVyUGl4ZWxzKHBhaW50aW5nRGF0YSwgMCwgY2xpcEJv
dHRvbSwgaW1hZ2VSZWN0LndpZHRoKCksIGltYWdlUmVjdC5oZWlnaHQoKSk7CisgICAgICAgICAg
ICBzZXRPdXRlclBpeGVscyhwYWludGluZ0RhdGEsIDAsIDAsIHBhaW50U2l6ZS53aWR0aCgpLCBt
X3RhcmdldE9mZnNldC55KCkpOworICAgICAgICBpZiAoY2xpcEJvdHRvbSA8IHBhaW50U2l6ZS5o
ZWlnaHQoKSkKKyAgICAgICAgICAgIHNldE91dGVyUGl4ZWxzKHBhaW50aW5nRGF0YSwgMCwgY2xp
cEJvdHRvbSwgcGFpbnRTaXplLndpZHRoKCksIHBhaW50U2l6ZS5oZWlnaHQoKSk7CiAgICAgICAg
IGlmIChtX3RhcmdldE9mZnNldC54KCkgPiAwKQogICAgICAgICAgICAgc2V0T3V0ZXJQaXhlbHMo
cGFpbnRpbmdEYXRhLCAwLCBtX3RhcmdldE9mZnNldC55KCksIG1fdGFyZ2V0T2Zmc2V0LngoKSwg
Y2xpcEJvdHRvbSk7Ci0gICAgICAgIGlmIChjbGlwUmlnaHQgPCBpbWFnZVJlY3Qud2lkdGgoKSkK
LSAgICAgICAgICAgIHNldE91dGVyUGl4ZWxzKHBhaW50aW5nRGF0YSwgY2xpcFJpZ2h0LCBtX3Rh
cmdldE9mZnNldC55KCksIGltYWdlUmVjdC53aWR0aCgpLCBjbGlwQm90dG9tKTsKKyAgICAgICAg
aWYgKGNsaXBSaWdodCA8IHBhaW50U2l6ZS53aWR0aCgpKQorICAgICAgICAgICAgc2V0T3V0ZXJQ
aXhlbHMocGFpbnRpbmdEYXRhLCBjbGlwUmlnaHQsIG1fdGFyZ2V0T2Zmc2V0LnkoKSwgcGFpbnRT
aXplLndpZHRoKCksIGNsaXBCb3R0b20pOwogICAgIH0gZWxzZSB7CiAgICAgICAgIC8vIFJhcmUg
c2l0dWF0aW9uLCBub3Qgb3B0aW1pemllZCBmb3Igc3BlZWQKLSAgICAgICAgc2V0T3V0ZXJQaXhl
bHMocGFpbnRpbmdEYXRhLCAwLCAwLCBpbWFnZVJlY3Qud2lkdGgoKSwgaW1hZ2VSZWN0LmhlaWdo
dCgpKTsKKyAgICAgICAgc2V0T3V0ZXJQaXhlbHMocGFpbnRpbmdEYXRhLCAwLCAwLCBwYWludFNp
emUud2lkdGgoKSwgcGFpbnRTaXplLmhlaWdodCgpKTsKICAgICB9Ci0KLSAgICBpZiAobV9wcmVz
ZXJ2ZUFscGhhKQotICAgICAgICByZXN1bHRJbWFnZSgpLT5wdXRVbm11bHRpcGxpZWRJbWFnZURh
dGEoaW1hZ2VEYXRhLmdldCgpLCBpbWFnZVJlY3QsIEludFBvaW50KCkpOwotICAgIGVsc2UKLSAg
ICAgICAgcmVzdWx0SW1hZ2UoKS0+cHV0UHJlbXVsdGlwbGllZEltYWdlRGF0YShpbWFnZURhdGEu
Z2V0KCksIGltYWdlUmVjdCwgSW50UG9pbnQoKSk7CiB9CiAKIHZvaWQgRkVDb252b2x2ZU1hdHJp
eDo6ZHVtcCgpCmRpZmYgLS1naXQgYS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMv
RkVEaXNwbGFjZW1lbnRNYXAuY3BwIGIvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJz
L0ZFRGlzcGxhY2VtZW50TWFwLmNwcAppbmRleCA1NTMyMWU2Li45MzIzOWM0IDEwMDY0NAotLS0g
YS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVEaXNwbGFjZW1lbnRNYXAuY3Bw
CisrKyBiL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRURpc3BsYWNlbWVudE1h
cC5jcHAKQEAgLTc4LDU3ICs3OCw1NyBAQCB2b2lkIEZFRGlzcGxhY2VtZW50TWFwOjpzZXRTY2Fs
ZShmbG9hdCBzY2FsZSkKIAogdm9pZCBGRURpc3BsYWNlbWVudE1hcDo6YXBwbHkoKQogeworICAg
IGlmIChoYXNSZXN1bHQoKSkKKyAgICAgICAgcmV0dXJuOwogICAgIEZpbHRlckVmZmVjdCogaW4g
PSBpbnB1dEVmZmVjdCgwKTsKICAgICBGaWx0ZXJFZmZlY3QqIGluMiA9IGlucHV0RWZmZWN0KDEp
OwogICAgIGluLT5hcHBseSgpOwogICAgIGluMi0+YXBwbHkoKTsKLSAgICBpZiAoIWluLT5yZXN1
bHRJbWFnZSgpIHx8ICFpbjItPnJlc3VsdEltYWdlKCkpCisgICAgaWYgKCFpbi0+aGFzUmVzdWx0
KCkgfHwgIWluMi0+aGFzUmVzdWx0KCkpCiAgICAgICAgIHJldHVybjsKIAogICAgIGlmIChtX3hD
aGFubmVsU2VsZWN0b3IgPT0gQ0hBTk5FTF9VTktOT1dOIHx8IG1feUNoYW5uZWxTZWxlY3RvciA9
PSBDSEFOTkVMX1VOS05PV04pCiAgICAgICAgIHJldHVybjsKIAotICAgIGlmICghZWZmZWN0Q29u
dGV4dCgpKQorICAgIEltYWdlRGF0YSogcmVzdWx0SW1hZ2UgPSBjcmVhdGVQcmVtdWx0aXBsaWVk
SW1hZ2VSZXN1bHQoKTsKKyAgICBpZiAoIXJlc3VsdEltYWdlKQogICAgICAgICByZXR1cm47CiAK
ICAgICBJbnRSZWN0IGVmZmVjdEFEcmF3aW5nUmVjdCA9IHJlcXVlc3RlZFJlZ2lvbk9mSW5wdXRJ
bWFnZURhdGEoaW4tPmFic29sdXRlUGFpbnRSZWN0KCkpOwotICAgIFJlZlB0cjxJbWFnZURhdGE+
IHNyY0ltYWdlRGF0YUEgPSBpbi0+cmVzdWx0SW1hZ2UoKS0+Z2V0UHJlbXVsdGlwbGllZEltYWdl
RGF0YShlZmZlY3RBRHJhd2luZ1JlY3QpOwotICAgIEJ5dGVBcnJheSogc3JjUGl4ZWxBcnJheUEg
PSBzcmNJbWFnZURhdGFBLT5kYXRhKCktPmRhdGEoKSA7CisgICAgUmVmUHRyPEltYWdlRGF0YT4g
c3JjSW1hZ2VEYXRhQSA9IGluLT5hc1ByZW11bHRpcGxpZWRJbWFnZShlZmZlY3RBRHJhd2luZ1Jl
Y3QpOworICAgIEJ5dGVBcnJheSogc3JjUGl4ZWxBcnJheUEgPSBzcmNJbWFnZURhdGFBLT5kYXRh
KCktPmRhdGEoKTsKIAogICAgIEludFJlY3QgZWZmZWN0QkRyYXdpbmdSZWN0ID0gcmVxdWVzdGVk
UmVnaW9uT2ZJbnB1dEltYWdlRGF0YShpbjItPmFic29sdXRlUGFpbnRSZWN0KCkpOwotICAgIFJl
ZlB0cjxJbWFnZURhdGE+IHNyY0ltYWdlRGF0YUIgPSBpbjItPnJlc3VsdEltYWdlKCktPmdldFVu
bXVsdGlwbGllZEltYWdlRGF0YShlZmZlY3RCRHJhd2luZ1JlY3QpOworICAgIFJlZlB0cjxJbWFn
ZURhdGE+IHNyY0ltYWdlRGF0YUIgPSBpbjItPmFzVW5tdWx0aXBsaWVkSW1hZ2UoZWZmZWN0QkRy
YXdpbmdSZWN0KTsKICAgICBCeXRlQXJyYXkqIHNyY1BpeGVsQXJyYXlCID0gc3JjSW1hZ2VEYXRh
Qi0+ZGF0YSgpLT5kYXRhKCk7CiAKLSAgICBJbnRSZWN0IGltYWdlUmVjdChJbnRQb2ludCgpLCBy
ZXN1bHRJbWFnZSgpLT5zaXplKCkpOwotICAgIFJlZlB0cjxJbWFnZURhdGE+IGltYWdlRGF0YSA9
IEltYWdlRGF0YTo6Y3JlYXRlKGltYWdlUmVjdC53aWR0aCgpLCBpbWFnZVJlY3QuaGVpZ2h0KCkp
OwotICAgIEJ5dGVBcnJheSogZHN0UGl4ZWxBcnJheSA9IGltYWdlRGF0YS0+ZGF0YSgpLT5kYXRh
KCk7CisgICAgQnl0ZUFycmF5KiBkc3RQaXhlbEFycmF5ID0gcmVzdWx0SW1hZ2UtPmRhdGEoKS0+
ZGF0YSgpOwogCiAgICAgQVNTRVJUKHNyY1BpeGVsQXJyYXlBLT5sZW5ndGgoKSA9PSBzcmNQaXhl
bEFycmF5Qi0+bGVuZ3RoKCkpOwogCiAgICAgRmlsdGVyKiBmaWx0ZXIgPSB0aGlzLT5maWx0ZXIo
KTsKKyAgICBJbnRTaXplIHBhaW50U2l6ZSA9IGFic29sdXRlUGFpbnRSZWN0KCkuc2l6ZSgpOwog
ICAgIGZsb2F0IHNjYWxlWCA9IGZpbHRlci0+YXBwbHlIb3Jpem9udGFsU2NhbGUobV9zY2FsZSAv
IDI1NSk7CiAgICAgZmxvYXQgc2NhbGVZID0gZmlsdGVyLT5hcHBseVZlcnRpY2FsU2NhbGUobV9z
Y2FsZSAvIDI1NSk7CiAgICAgZmxvYXQgc2NhbGVBZGp1c3RtZW50WCA9IGZpbHRlci0+YXBwbHlI
b3Jpem9udGFsU2NhbGUoMC41ZiAtIDAuNWYgKiBtX3NjYWxlKTsKICAgICBmbG9hdCBzY2FsZUFk
anVzdG1lbnRZID0gZmlsdGVyLT5hcHBseVZlcnRpY2FsU2NhbGUoMC41ZiAtIDAuNWYgKiBtX3Nj
YWxlKTsKLSAgICBpbnQgc3RyaWRlID0gaW1hZ2VSZWN0LndpZHRoKCkgKiA0OwotICAgIGZvciAo
aW50IHkgPSAwOyB5IDwgaW1hZ2VSZWN0LmhlaWdodCgpOyArK3kpIHsKKyAgICBpbnQgc3RyaWRl
ID0gcGFpbnRTaXplLndpZHRoKCkgKiA0OworICAgIGZvciAoaW50IHkgPSAwOyB5IDwgcGFpbnRT
aXplLmhlaWdodCgpOyArK3kpIHsKICAgICAgICAgaW50IGxpbmUgPSB5ICogc3RyaWRlOwotICAg
ICAgICBmb3IgKGludCB4ID0gMDsgeCA8IGltYWdlUmVjdC53aWR0aCgpOyArK3gpIHsKKyAgICAg
ICAgZm9yIChpbnQgeCA9IDA7IHggPCBwYWludFNpemUud2lkdGgoKTsgKyt4KSB7CiAgICAgICAg
ICAgICBpbnQgZHN0SW5kZXggPSBsaW5lICsgeCAqIDQ7CiAgICAgICAgICAgICBpbnQgc3JjWCA9
IHggKyBzdGF0aWNfY2FzdDxpbnQ+KHNjYWxlWCAqIHNyY1BpeGVsQXJyYXlCLT5nZXQoZHN0SW5k
ZXggKyBtX3hDaGFubmVsU2VsZWN0b3IgLSAxKSArIHNjYWxlQWRqdXN0bWVudFgpOwogICAgICAg
ICAgICAgaW50IHNyY1kgPSB5ICsgc3RhdGljX2Nhc3Q8aW50PihzY2FsZVkgKiBzcmNQaXhlbEFy
cmF5Qi0+Z2V0KGRzdEluZGV4ICsgbV95Q2hhbm5lbFNlbGVjdG9yIC0gMSkgKyBzY2FsZUFkanVz
dG1lbnRZKTsKICAgICAgICAgICAgIGZvciAodW5zaWduZWQgY2hhbm5lbCA9IDA7IGNoYW5uZWwg
PCA0OyArK2NoYW5uZWwpIHsKLSAgICAgICAgICAgICAgICBpZiAoc3JjWCA8IDAgfHwgc3JjWCA+
PSBpbWFnZVJlY3Qud2lkdGgoKSB8fCBzcmNZIDwgMCB8fCBzcmNZID49IGltYWdlUmVjdC5oZWln
aHQoKSkKKyAgICAgICAgICAgICAgICBpZiAoc3JjWCA8IDAgfHwgc3JjWCA+PSBwYWludFNpemUu
d2lkdGgoKSB8fCBzcmNZIDwgMCB8fCBzcmNZID49IHBhaW50U2l6ZS5oZWlnaHQoKSkKICAgICAg
ICAgICAgICAgICAgICAgZHN0UGl4ZWxBcnJheS0+c2V0KGRzdEluZGV4ICsgY2hhbm5lbCwgc3Rh
dGljX2Nhc3Q8dW5zaWduZWQgY2hhcj4oMCkpOwogICAgICAgICAgICAgICAgIGVsc2UgewogICAg
ICAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyIHBpeGVsVmFsdWUgPSBzcmNQaXhlbEFycmF5
QS0+Z2V0KHNyY1kgKiBzdHJpZGUgKyBzcmNYICogNCArIGNoYW5uZWwpOwogICAgICAgICAgICAg
ICAgICAgICBkc3RQaXhlbEFycmF5LT5zZXQoZHN0SW5kZXggKyBjaGFubmVsLCBwaXhlbFZhbHVl
KTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9Ci0KICAgICAgICAgfQogICAgIH0K
LSAgICByZXN1bHRJbWFnZSgpLT5wdXRQcmVtdWx0aXBsaWVkSW1hZ2VEYXRhKGltYWdlRGF0YS5n
ZXQoKSwgaW1hZ2VSZWN0LCBJbnRQb2ludCgpKTsKIH0KIAogdm9pZCBGRURpc3BsYWNlbWVudE1h
cDo6ZHVtcCgpCmRpZmYgLS1naXQgYS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMv
RkVGbG9vZC5jcHAgYi9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVGbG9vZC5j
cHAKaW5kZXggYmM2NzIxYi4uOGJmZGVmOCAxMDA2NDQKLS0tIGEvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9maWx0ZXJzL0ZFRmxvb2QuY3BwCisrKyBiL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvZmlsdGVycy9GRUZsb29kLmNwcApAQCAtNjQsMTIgKzY0LDE0IEBAIHZvaWQgRkVGbG9vZDo6
c2V0Rmxvb2RPcGFjaXR5KGZsb2F0IGZsb29kT3BhY2l0eSkKIAogdm9pZCBGRUZsb29kOjphcHBs
eSgpCiB7Ci0gICAgR3JhcGhpY3NDb250ZXh0KiBmaWx0ZXJDb250ZXh0ID0gZWZmZWN0Q29udGV4
dCgpOwotICAgIGlmICghZmlsdGVyQ29udGV4dCkKKyAgICBpZiAoaGFzUmVzdWx0KCkpCisgICAg
ICAgIHJldHVybjsKKyAgICBJbWFnZUJ1ZmZlciogcmVzdWx0SW1hZ2UgPSBjcmVhdGVJbWFnZUJ1
ZmZlclJlc3VsdCgpOworICAgIGlmICghcmVzdWx0SW1hZ2UpCiAgICAgICAgIHJldHVybjsKIAog
ICAgIENvbG9yIGNvbG9yID0gY29sb3JXaXRoT3ZlcnJpZGVBbHBoYShmbG9vZENvbG9yKCkucmdi
KCksIGZsb29kT3BhY2l0eSgpKTsKLSAgICBmaWx0ZXJDb250ZXh0LT5maWxsUmVjdChGbG9hdFJl
Y3QoRmxvYXRQb2ludCgpLCBhYnNvbHV0ZVBhaW50UmVjdCgpLnNpemUoKSksIGNvbG9yLCBDb2xv
clNwYWNlRGV2aWNlUkdCKTsKKyAgICByZXN1bHRJbWFnZS0+Y29udGV4dCgpLT5maWxsUmVjdChG
bG9hdFJlY3QoRmxvYXRQb2ludCgpLCBhYnNvbHV0ZVBhaW50UmVjdCgpLnNpemUoKSksIGNvbG9y
LCBDb2xvclNwYWNlRGV2aWNlUkdCKTsKIH0KIAogdm9pZCBGRUZsb29kOjpkdW1wKCkKZGlmZiAt
LWdpdCBhL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUdhdXNzaWFuQmx1ci5j
cHAgYi9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVHYXVzc2lhbkJsdXIuY3Bw
CmluZGV4IDg3NmU0YjMuLmUxZmZjYjcgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvZmlsdGVycy9GRUdhdXNzaWFuQmx1ci5jcHAKKysrIGIvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9maWx0ZXJzL0ZFR2F1c3NpYW5CbHVyLmNwcApAQCAtMTY0LDM0ICsxNjQsMzUgQEAg
dm9pZCBGRUdhdXNzaWFuQmx1cjo6ZGV0ZXJtaW5lQWJzb2x1dGVQYWludFJlY3QoKQogCiB2b2lk
IEZFR2F1c3NpYW5CbHVyOjphcHBseSgpCiB7CisgICAgaWYgKGhhc1Jlc3VsdCgpKQorICAgICAg
ICByZXR1cm47CiAgICAgRmlsdGVyRWZmZWN0KiBpbiA9IGlucHV0RWZmZWN0KDApOwogICAgIGlu
LT5hcHBseSgpOwotICAgIGlmICghaW4tPnJlc3VsdEltYWdlKCkpCisgICAgaWYgKCFpbi0+aGFz
UmVzdWx0KCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIGlmICghZWZmZWN0Q29udGV4dCgpKQor
ICAgIEltYWdlRGF0YSogcmVzdWx0SW1hZ2UgPSBjcmVhdGVQcmVtdWx0aXBsaWVkSW1hZ2VSZXN1
bHQoKTsKKyAgICBpZiAoIXJlc3VsdEltYWdlKQogICAgICAgICByZXR1cm47CiAKICAgICBzZXRJ
c0FscGhhSW1hZ2UoaW4tPmlzQWxwaGFJbWFnZSgpKTsKIAogICAgIEludFJlY3QgZWZmZWN0RHJh
d2luZ1JlY3QgPSByZXF1ZXN0ZWRSZWdpb25PZklucHV0SW1hZ2VEYXRhKGluLT5hYnNvbHV0ZVBh
aW50UmVjdCgpKTsKLSAgICBSZWZQdHI8SW1hZ2VEYXRhPiBzcmNJbWFnZURhdGEgPSBpbi0+cmVz
dWx0SW1hZ2UoKS0+Z2V0UHJlbXVsdGlwbGllZEltYWdlRGF0YShlZmZlY3REcmF3aW5nUmVjdCk7
Ci0gICAgSW50UmVjdCBpbWFnZVJlY3QoSW50UG9pbnQoKSwgcmVzdWx0SW1hZ2UoKS0+c2l6ZSgp
KTsKKyAgICBpbi0+Y29weVByZW11bHRpcGxpZWRJbWFnZShyZXN1bHRJbWFnZSwgZWZmZWN0RHJh
d2luZ1JlY3QpOwogCi0gICAgaWYgKCFtX3N0ZFggJiYgIW1fc3RkWSkgewotICAgICAgICByZXN1
bHRJbWFnZSgpLT5wdXRQcmVtdWx0aXBsaWVkSW1hZ2VEYXRhKHNyY0ltYWdlRGF0YS5nZXQoKSwg
aW1hZ2VSZWN0LCBJbnRQb2ludCgpKTsKKyAgICBpZiAoIW1fc3RkWCAmJiAhbV9zdGRZKQogICAg
ICAgICByZXR1cm47Ci0gICAgfQogCiAgICAgdW5zaWduZWQga2VybmVsU2l6ZVggPSAwOwogICAg
IHVuc2lnbmVkIGtlcm5lbFNpemVZID0gMDsKICAgICBjYWxjdWxhdGVLZXJuZWxTaXplKGZpbHRl
cigpLCBrZXJuZWxTaXplWCwga2VybmVsU2l6ZVksIG1fc3RkWCwgbV9zdGRZKTsKIAotICAgIEJ5
dGVBcnJheSogc3JjUGl4ZWxBcnJheSA9IHNyY0ltYWdlRGF0YS0+ZGF0YSgpLT5kYXRhKCk7Ci0g
ICAgUmVmUHRyPEltYWdlRGF0YT4gdG1wSW1hZ2VEYXRhID0gSW1hZ2VEYXRhOjpjcmVhdGUoaW1h
Z2VSZWN0LndpZHRoKCksIGltYWdlUmVjdC5oZWlnaHQoKSk7CisgICAgSW50U2l6ZSBwYWludFNp
emUgPSBhYnNvbHV0ZVBhaW50UmVjdCgpLnNpemUoKTsKKyAgICBCeXRlQXJyYXkqIHNyY1BpeGVs
QXJyYXkgPSByZXN1bHRJbWFnZS0+ZGF0YSgpLT5kYXRhKCk7CisgICAgUmVmUHRyPEltYWdlRGF0
YT4gdG1wSW1hZ2VEYXRhID0gSW1hZ2VEYXRhOjpjcmVhdGUocGFpbnRTaXplLndpZHRoKCksIHBh
aW50U2l6ZS5oZWlnaHQoKSk7CiAgICAgQnl0ZUFycmF5KiB0bXBQaXhlbEFycmF5ID0gdG1wSW1h
Z2VEYXRhLT5kYXRhKCktPmRhdGEoKTsKIAotICAgIGludCBzdHJpZGUgPSA0ICogaW1hZ2VSZWN0
LndpZHRoKCk7CisgICAgaW50IHN0cmlkZSA9IDQgKiBwYWludFNpemUud2lkdGgoKTsKICAgICBp
bnQgZHhMZWZ0ID0gMDsKICAgICBpbnQgZHhSaWdodCA9IDA7CiAgICAgaW50IGR5TGVmdCA9IDA7
CkBAIC0xOTksNyArMjAwLDcgQEAgdm9pZCBGRUdhdXNzaWFuQmx1cjo6YXBwbHkoKQogICAgIGZv
ciAoaW50IGkgPSAwOyBpIDwgMzsgKytpKSB7CiAgICAgICAgIGlmIChrZXJuZWxTaXplWCkgewog
ICAgICAgICAgICAga2VybmVsUG9zaXRpb24oaSwga2VybmVsU2l6ZVgsIGR4TGVmdCwgZHhSaWdo
dCk7Ci0gICAgICAgICAgICBib3hCbHVyKHNyY1BpeGVsQXJyYXksIHRtcFBpeGVsQXJyYXksIGtl
cm5lbFNpemVYLCBkeExlZnQsIGR4UmlnaHQsIDQsIHN0cmlkZSwgaW1hZ2VSZWN0LndpZHRoKCks
IGltYWdlUmVjdC5oZWlnaHQoKSwgaXNBbHBoYUltYWdlKCkpOworICAgICAgICAgICAgYm94Qmx1
cihzcmNQaXhlbEFycmF5LCB0bXBQaXhlbEFycmF5LCBrZXJuZWxTaXplWCwgZHhMZWZ0LCBkeFJp
Z2h0LCA0LCBzdHJpZGUsIHBhaW50U2l6ZS53aWR0aCgpLCBwYWludFNpemUuaGVpZ2h0KCksIGlz
QWxwaGFJbWFnZSgpKTsKICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgIEJ5dGVBcnJheSog
YXV4UGl4ZWxBcnJheSA9IHRtcFBpeGVsQXJyYXk7CiAgICAgICAgICAgICB0bXBQaXhlbEFycmF5
ID0gc3JjUGl4ZWxBcnJheTsKQEAgLTIwOCwxNSArMjA5LDEzIEBAIHZvaWQgRkVHYXVzc2lhbkJs
dXI6OmFwcGx5KCkKIAogICAgICAgICBpZiAoa2VybmVsU2l6ZVkpIHsKICAgICAgICAgICAgIGtl
cm5lbFBvc2l0aW9uKGksIGtlcm5lbFNpemVZLCBkeUxlZnQsIGR5UmlnaHQpOwotICAgICAgICAg
ICAgYm94Qmx1cih0bXBQaXhlbEFycmF5LCBzcmNQaXhlbEFycmF5LCBrZXJuZWxTaXplWSwgZHlM
ZWZ0LCBkeVJpZ2h0LCBzdHJpZGUsIDQsIGltYWdlUmVjdC5oZWlnaHQoKSwgaW1hZ2VSZWN0Lndp
ZHRoKCksIGlzQWxwaGFJbWFnZSgpKTsKKyAgICAgICAgICAgIGJveEJsdXIodG1wUGl4ZWxBcnJh
eSwgc3JjUGl4ZWxBcnJheSwga2VybmVsU2l6ZVksIGR5TGVmdCwgZHlSaWdodCwgc3RyaWRlLCA0
LCBwYWludFNpemUuaGVpZ2h0KCksIHBhaW50U2l6ZS53aWR0aCgpLCBpc0FscGhhSW1hZ2UoKSk7
CiAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICBCeXRlQXJyYXkqIGF1eFBpeGVsQXJyYXkg
PSB0bXBQaXhlbEFycmF5OwogICAgICAgICAgICAgdG1wUGl4ZWxBcnJheSA9IHNyY1BpeGVsQXJy
YXk7CiAgICAgICAgICAgICBzcmNQaXhlbEFycmF5ID0gYXV4UGl4ZWxBcnJheTsKICAgICAgICAg
fQogICAgIH0KLQotICAgIHJlc3VsdEltYWdlKCktPnB1dFByZW11bHRpcGxpZWRJbWFnZURhdGEo
c3JjSW1hZ2VEYXRhLmdldCgpLCBpbWFnZVJlY3QsIEludFBvaW50KCkpOwogfQogCiB2b2lkIEZF
R2F1c3NpYW5CbHVyOjpkdW1wKCkKZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvZmlsdGVycy9GRUxpZ2h0aW5nLmNwcCBiL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmls
dGVycy9GRUxpZ2h0aW5nLmNwcAppbmRleCA4MTI5MjBjLi40ZGI0MGYxIDEwMDY0NAotLS0gYS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVMaWdodGluZy5jcHAKKysrIGIvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFTGlnaHRpbmcuY3BwCkBAIC0zMzEsMTkg
KzMzMSwyMiBAQCBib29sIEZFTGlnaHRpbmc6OmRyYXdMaWdodGluZyhCeXRlQXJyYXkqIHBpeGVs
cywgaW50IHdpZHRoLCBpbnQgaGVpZ2h0KQogCiB2b2lkIEZFTGlnaHRpbmc6OmFwcGx5KCkKIHsK
KyAgICBpZiAoaGFzUmVzdWx0KCkpCisgICAgICAgIHJldHVybjsKICAgICBGaWx0ZXJFZmZlY3Qq
IGluID0gaW5wdXRFZmZlY3QoMCk7CiAgICAgaW4tPmFwcGx5KCk7Ci0gICAgaWYgKCFpbi0+cmVz
dWx0SW1hZ2UoKSkKKyAgICBpZiAoIWluLT5oYXNSZXN1bHQoKSkKICAgICAgICAgcmV0dXJuOwog
Ci0gICAgaWYgKCFlZmZlY3RDb250ZXh0KCkpCisgICAgSW1hZ2VEYXRhKiByZXN1bHRJbWFnZSA9
IGNyZWF0ZVVubXVsdGlwbGllZEltYWdlUmVzdWx0KCk7CisgICAgaWYgKCFyZXN1bHRJbWFnZSkK
ICAgICAgICAgcmV0dXJuOwogCiAgICAgc2V0SXNBbHBoYUltYWdlKGZhbHNlKTsKIAogICAgIElu
dFJlY3QgZWZmZWN0RHJhd2luZ1JlY3QgPSByZXF1ZXN0ZWRSZWdpb25PZklucHV0SW1hZ2VEYXRh
KGluLT5hYnNvbHV0ZVBhaW50UmVjdCgpKTsKLSAgICBSZWZQdHI8SW1hZ2VEYXRhPiBzcmNJbWFn
ZURhdGEgPSBpbi0+cmVzdWx0SW1hZ2UoKS0+Z2V0VW5tdWx0aXBsaWVkSW1hZ2VEYXRhKGVmZmVj
dERyYXdpbmdSZWN0KTsKLSAgICBCeXRlQXJyYXkqIHNyY1BpeGVsQXJyYXkgPSBzcmNJbWFnZURh
dGEtPmRhdGEoKS0+ZGF0YSgpOworICAgIGluLT5jb3B5VW5tdWx0aXBsaWVkSW1hZ2UocmVzdWx0
SW1hZ2UsIGVmZmVjdERyYXdpbmdSZWN0KTsKKyAgICBCeXRlQXJyYXkqIHNyY1BpeGVsQXJyYXkg
PSByZXN1bHRJbWFnZS0+ZGF0YSgpLT5kYXRhKCk7CiAKICAgICAvLyBGSVhNRTogc3VwcG9ydCBr
ZXJuZWxVbml0TGVuZ3RocyBvdGhlciB0aGFuICgxLDEpLiBUaGUgaXNzdWUgaGVyZSBpcyB0aGF0
IHRoZSBXMwogICAgIC8vIHN0YW5kYXJkIGhhcyBubyB0ZXN0IGNhc2UgZm9yIHRoZW0sIGFuZCBv
dGhlciBicm93c2VycyAobGlrZSBGaXJlZm94KSBoYXMgc3RyYW5nZQpAQCAtMzUxLDggKzM1NCw3
IEBAIHZvaWQgRkVMaWdodGluZzo6YXBwbHkoKQogICAgIC8vIEFueXdheSwgZmVDb252b2x2ZU1h
dHJpeCBzaG91bGQgYWxzbyB1c2UgdGhlIGltcGxlbWVudGF0aW9uCiAKICAgICBJbnRTaXplIGFi
c29sdXRlUGFpbnRTaXplID0gYWJzb2x1dGVQYWludFJlY3QoKS5zaXplKCk7Ci0gICAgaWYgKGRy
YXdMaWdodGluZyhzcmNQaXhlbEFycmF5LCBhYnNvbHV0ZVBhaW50U2l6ZS53aWR0aCgpLCBhYnNv
bHV0ZVBhaW50U2l6ZS5oZWlnaHQoKSkpCi0gICAgICAgIHJlc3VsdEltYWdlKCktPnB1dFVubXVs
dGlwbGllZEltYWdlRGF0YShzcmNJbWFnZURhdGEuZ2V0KCksIEludFJlY3QoSW50UG9pbnQoKSwg
YWJzb2x1dGVQYWludFNpemUpLCBJbnRQb2ludCgpKTsKKyAgICBkcmF3TGlnaHRpbmcoc3JjUGl4
ZWxBcnJheSwgYWJzb2x1dGVQYWludFNpemUud2lkdGgoKSwgYWJzb2x1dGVQYWludFNpemUuaGVp
Z2h0KCkpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVNZXJnZS5jcHAgYi9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2ZpbHRlcnMvRkVNZXJnZS5jcHAKaW5kZXggY2E1M2E4Ni4uNDM5NTMyMSAxMDA2
NDQKLS0tIGEvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFTWVyZ2UuY3BwCisr
KyBiL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRU1lcmdlLmNwcApAQCAtNDEs
MjIgKzQxLDI1IEBAIFBhc3NSZWZQdHI8RkVNZXJnZT4gRkVNZXJnZTo6Y3JlYXRlKEZpbHRlciog
ZmlsdGVyKQogCiB2b2lkIEZFTWVyZ2U6OmFwcGx5KCkKIHsKKyAgICBpZiAoaGFzUmVzdWx0KCkp
CisgICAgICAgIHJldHVybjsKICAgICB1bnNpZ25lZCBzaXplID0gbnVtYmVyT2ZFZmZlY3RJbnB1
dHMoKTsKICAgICBBU1NFUlQoc2l6ZSA+IDApOwogICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkg
PCBzaXplOyArK2kpIHsKICAgICAgICAgRmlsdGVyRWZmZWN0KiBpbiA9IGlucHV0RWZmZWN0KGkp
OwogICAgICAgICBpbi0+YXBwbHkoKTsKLSAgICAgICAgaWYgKCFpbi0+cmVzdWx0SW1hZ2UoKSkK
KyAgICAgICAgaWYgKCFpbi0+aGFzUmVzdWx0KCkpCiAgICAgICAgICAgICByZXR1cm47CiAgICAg
fQogCi0gICAgR3JhcGhpY3NDb250ZXh0KiBmaWx0ZXJDb250ZXh0ID0gZWZmZWN0Q29udGV4dCgp
OwotICAgIGlmICghZmlsdGVyQ29udGV4dCkKKyAgICBJbWFnZUJ1ZmZlciogcmVzdWx0SW1hZ2Ug
PSBjcmVhdGVJbWFnZUJ1ZmZlclJlc3VsdCgpOworICAgIGlmICghcmVzdWx0SW1hZ2UpCiAgICAg
ICAgIHJldHVybjsKIAorICAgIEdyYXBoaWNzQ29udGV4dCogZmlsdGVyQ29udGV4dCA9IHJlc3Vs
dEltYWdlLT5jb250ZXh0KCk7CiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHNpemU7ICsr
aSkgewogICAgICAgICBGaWx0ZXJFZmZlY3QqIGluID0gaW5wdXRFZmZlY3QoaSk7Ci0gICAgICAg
IGZpbHRlckNvbnRleHQtPmRyYXdJbWFnZUJ1ZmZlcihpbi0+cmVzdWx0SW1hZ2UoKSwgQ29sb3JT
cGFjZURldmljZVJHQiwgZHJhd2luZ1JlZ2lvbk9mSW5wdXRJbWFnZShpbi0+YWJzb2x1dGVQYWlu
dFJlY3QoKSkpOworICAgICAgICBmaWx0ZXJDb250ZXh0LT5kcmF3SW1hZ2VCdWZmZXIoaW4tPmFz
SW1hZ2VCdWZmZXIoKSwgQ29sb3JTcGFjZURldmljZVJHQiwgZHJhd2luZ1JlZ2lvbk9mSW5wdXRJ
bWFnZShpbi0+YWJzb2x1dGVQYWludFJlY3QoKSkpOwogICAgIH0KIH0KIApkaWZmIC0tZ2l0IGEv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFTWVyZ2UuaCBiL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRU1lcmdlLmgKaW5kZXggMjRkMDcxZS4uZGJlZTYxMCAx
MDA2NDQKLS0tIGEvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFTWVyZ2UuaAor
KysgYi9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVNZXJnZS5oCkBAIC0yMCw3
ICsyMCw3IEBACiAgKi8KIAogI2lmbmRlZiBGRU1lcmdlX2gKLSNkZWZpbmUgRU1lcmdlX2gKKyNk
ZWZpbmUgRkVNZXJnZV9oCiAKICNpZiBFTkFCTEUoRklMVEVSUykKICNpbmNsdWRlICJGaWx0ZXJF
ZmZlY3QuaCIKZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9G
RU1vcnBob2xvZ3kuY3BwIGIvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFTW9y
cGhvbG9neS5jcHAKaW5kZXggZGQ3NjU5YS4uYjIwYWRjNSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFTW9ycGhvbG9neS5jcHAKKysrIGIvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFTW9ycGhvbG9neS5jcHAKQEAgLTkxLDEyICs5MSwx
NSBAQCB2b2lkIEZFTW9ycGhvbG9neTo6c2V0UmFkaXVzWShmbG9hdCByYWRpdXNZKQogCiB2b2lk
IEZFTW9ycGhvbG9neTo6YXBwbHkoKQogeworICAgIGlmIChoYXNSZXN1bHQoKSkKKyAgICAgICAg
cmV0dXJuOwogICAgIEZpbHRlckVmZmVjdCogaW4gPSBpbnB1dEVmZmVjdCgwKTsKICAgICBpbi0+
YXBwbHkoKTsKLSAgICBpZiAoIWluLT5yZXN1bHRJbWFnZSgpKQorICAgIGlmICghaW4tPmhhc1Jl
c3VsdCgpKQogICAgICAgICByZXR1cm47CiAKLSAgICBpZiAoIWVmZmVjdENvbnRleHQoKSkKKyAg
ICBJbWFnZURhdGEqIHJlc3VsdEltYWdlID0gY3JlYXRlUHJlbXVsdGlwbGllZEltYWdlUmVzdWx0
KCk7CisgICAgaWYgKCFyZXN1bHRJbWFnZSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgc2V0SXNB
bHBoYUltYWdlKGluLT5pc0FscGhhSW1hZ2UoKSk7CkBAIC0xMDcsMTIgKzExMCwxMCBAQCB2b2lk
IEZFTW9ycGhvbG9neTo6YXBwbHkoKQogICAgIGludCByYWRpdXNYID0gc3RhdGljX2Nhc3Q8aW50
PihmbG9vcmYoZmlsdGVyLT5hcHBseUhvcml6b250YWxTY2FsZShtX3JhZGl1c1gpKSk7CiAgICAg
aW50IHJhZGl1c1kgPSBzdGF0aWNfY2FzdDxpbnQ+KGZsb29yZihmaWx0ZXItPmFwcGx5VmVydGlj
YWxTY2FsZShtX3JhZGl1c1kpKSk7CiAKLSAgICBJbnRSZWN0IGltYWdlUmVjdChJbnRQb2ludCgp
LCByZXN1bHRJbWFnZSgpLT5zaXplKCkpOwogICAgIEludFJlY3QgZWZmZWN0RHJhd2luZ1JlY3Qg
PSByZXF1ZXN0ZWRSZWdpb25PZklucHV0SW1hZ2VEYXRhKGluLT5hYnNvbHV0ZVBhaW50UmVjdCgp
KTsKLSAgICBSZWZQdHI8SW1hZ2VEYXRhPiBzcmNJbWFnZURhdGEgPSBpbi0+cmVzdWx0SW1hZ2Uo
KS0+Z2V0UHJlbXVsdGlwbGllZEltYWdlRGF0YShlZmZlY3REcmF3aW5nUmVjdCk7CisgICAgUmVm
UHRyPEltYWdlRGF0YT4gc3JjSW1hZ2VEYXRhID0gaW4tPmFzUHJlbXVsdGlwbGllZEltYWdlKGVm
ZmVjdERyYXdpbmdSZWN0KTsKICAgICBCeXRlQXJyYXkqIHNyY1BpeGVsQXJyYXkgPSBzcmNJbWFn
ZURhdGEtPmRhdGEoKS0+ZGF0YSgpOwotICAgIFJlZlB0cjxJbWFnZURhdGE+IGltYWdlRGF0YSA9
IEltYWdlRGF0YTo6Y3JlYXRlKGltYWdlUmVjdC53aWR0aCgpLCBpbWFnZVJlY3QuaGVpZ2h0KCkp
OwotICAgIEJ5dGVBcnJheSogZHN0UGl4ZWxBcnJheSA9IGltYWdlRGF0YS0+ZGF0YSgpLT5kYXRh
KCk7CisgICAgQnl0ZUFycmF5KiBkc3RQaXhlbEFycmF5ID0gcmVzdWx0SW1hZ2UtPmRhdGEoKS0+
ZGF0YSgpOwogCiAgICAgaW50IGVmZmVjdFdpZHRoID0gZWZmZWN0RHJhd2luZ1JlY3Qud2lkdGgo
KSAqIDQ7CiAgICAgCkBAIC0xNjIsNyArMTYzLDYgQEAgdm9pZCBGRU1vcnBob2xvZ3k6OmFwcGx5
KCkKICAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgIH0KLSAgICByZXN1bHRJbWFnZSgpLT5w
dXRQcmVtdWx0aXBsaWVkSW1hZ2VEYXRhKGltYWdlRGF0YS5nZXQoKSwgaW1hZ2VSZWN0LCBJbnRQ
b2ludCgpKTsKIH0KIAogdm9pZCBGRU1vcnBob2xvZ3k6OmR1bXAoKQpkaWZmIC0tZ2l0IGEvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFT2Zmc2V0LmNwcCBiL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRU9mZnNldC5jcHAKaW5kZXggYjY0MDA1NC4uZjFkNTkx
NCAxMDA2NDQKLS0tIGEvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFT2Zmc2V0
LmNwcAorKysgYi9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVPZmZzZXQuY3Bw
CkBAIC03NCwxMyArNzQsMTUgQEAgdm9pZCBGRU9mZnNldDo6ZGV0ZXJtaW5lQWJzb2x1dGVQYWlu
dFJlY3QoKQogCiB2b2lkIEZFT2Zmc2V0OjphcHBseSgpCiB7CisgICAgaWYgKGhhc1Jlc3VsdCgp
KQorICAgICAgICByZXR1cm47CiAgICAgRmlsdGVyRWZmZWN0KiBpbiA9IGlucHV0RWZmZWN0KDAp
OwogICAgIGluLT5hcHBseSgpOwotICAgIGlmICghaW4tPnJlc3VsdEltYWdlKCkpCisgICAgaWYg
KCFpbi0+aGFzUmVzdWx0KCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIEdyYXBoaWNzQ29udGV4
dCogZmlsdGVyQ29udGV4dCA9IGVmZmVjdENvbnRleHQoKTsKLSAgICBpZiAoIWZpbHRlckNvbnRl
eHQpCisgICAgSW1hZ2VCdWZmZXIqIHJlc3VsdEltYWdlID0gY3JlYXRlSW1hZ2VCdWZmZXJSZXN1
bHQoKTsKKyAgICBpZiAoIXJlc3VsdEltYWdlKQogICAgICAgICByZXR1cm47CiAKICAgICBzZXRJ
c0FscGhhSW1hZ2UoaW4tPmlzQWxwaGFJbWFnZSgpKTsKQEAgLTg4LDcgKzkwLDcgQEAgdm9pZCBG
RU9mZnNldDo6YXBwbHkoKQogICAgIEZsb2F0UmVjdCBkcmF3aW5nUmVnaW9uID0gZHJhd2luZ1Jl
Z2lvbk9mSW5wdXRJbWFnZShpbi0+YWJzb2x1dGVQYWludFJlY3QoKSk7CiAgICAgRmlsdGVyKiBm
aWx0ZXIgPSB0aGlzLT5maWx0ZXIoKTsKICAgICBkcmF3aW5nUmVnaW9uLm1vdmUoZmlsdGVyLT5h
cHBseUhvcml6b250YWxTY2FsZShtX2R4KSwgZmlsdGVyLT5hcHBseVZlcnRpY2FsU2NhbGUobV9k
eSkpOwotICAgIGZpbHRlckNvbnRleHQtPmRyYXdJbWFnZUJ1ZmZlcihpbi0+cmVzdWx0SW1hZ2Uo
KSwgQ29sb3JTcGFjZURldmljZVJHQiwgZHJhd2luZ1JlZ2lvbik7CisgICAgcmVzdWx0SW1hZ2Ut
PmNvbnRleHQoKS0+ZHJhd0ltYWdlQnVmZmVyKGluLT5hc0ltYWdlQnVmZmVyKCksIENvbG9yU3Bh
Y2VEZXZpY2VSR0IsIGRyYXdpbmdSZWdpb24pOwogfQogCiB2b2lkIEZFT2Zmc2V0OjpkdW1wKCkK
ZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRVRpbGUuY3Bw
IGIvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFVGlsZS5jcHAKaW5kZXggNmIx
MTQwMS4uZTUxNmM3ZSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0
ZXJzL0ZFVGlsZS5jcHAKKysrIGIvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZF
VGlsZS5jcHAKQEAgLTQ1LDEzICs0NSwxNSBAQCB2b2lkIEZFVGlsZTo6YXBwbHkoKQogewogLy8g
RklYTUU6IFNlZSBidWcgNDczMTUuIFRoaXMgaXMgYSBoYWNrIHRvIHdvcmsgYXJvdW5kIGEgY29t
cGlsZSBmYWlsdXJlLCBidXQgaXMgaW5jb3JyZWN0IGJlaGF2aW9yIG90aGVyd2lzZS4KICNpZiBF
TkFCTEUoU1ZHKQorICAgIGlmIChoYXNSZXN1bHQoKSkKKyAgICAgICAgcmV0dXJuOwogICAgIEZp
bHRlckVmZmVjdCogaW4gPSBpbnB1dEVmZmVjdCgwKTsKICAgICBpbi0+YXBwbHkoKTsKLSAgICBp
ZiAoIWluLT5yZXN1bHRJbWFnZSgpKQorICAgIGlmICghaW4tPmhhc1Jlc3VsdCgpKQogICAgICAg
ICByZXR1cm47CiAKLSAgICBHcmFwaGljc0NvbnRleHQqIGZpbHRlckNvbnRleHQgPSBlZmZlY3RD
b250ZXh0KCk7Ci0gICAgaWYgKCFmaWx0ZXJDb250ZXh0KQorICAgIEltYWdlQnVmZmVyKiByZXN1
bHRJbWFnZSA9IGNyZWF0ZUltYWdlQnVmZmVyUmVzdWx0KCk7CisgICAgaWYgKCFyZXN1bHRJbWFn
ZSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgc2V0SXNBbHBoYUltYWdlKGluLT5pc0FscGhhSW1h
Z2UoKSk7CkBAIC03MywxMyArNzUsMTQgQEAgdm9pZCBGRVRpbGU6OmFwcGx5KCkKIAogICAgIEdy
YXBoaWNzQ29udGV4dCogdGlsZUltYWdlQ29udGV4dCA9IHRpbGVJbWFnZS0+Y29udGV4dCgpOwog
ICAgIHRpbGVJbWFnZUNvbnRleHQtPnRyYW5zbGF0ZSgtaW5NYXhFZmZlY3RMb2NhdGlvbi54KCks
IC1pbk1heEVmZmVjdExvY2F0aW9uLnkoKSk7Ci0gICAgdGlsZUltYWdlQ29udGV4dC0+ZHJhd0lt
YWdlQnVmZmVyKGluLT5yZXN1bHRJbWFnZSgpLCBDb2xvclNwYWNlRGV2aWNlUkdCLCBpbi0+YWJz
b2x1dGVQYWludFJlY3QoKS5sb2NhdGlvbigpKTsKKyAgICB0aWxlSW1hZ2VDb250ZXh0LT5kcmF3
SW1hZ2VCdWZmZXIoaW4tPmFzSW1hZ2VCdWZmZXIoKSwgQ29sb3JTcGFjZURldmljZVJHQiwgaW4t
PmFic29sdXRlUGFpbnRSZWN0KCkubG9jYXRpb24oKSk7CiAKICAgICBSZWZQdHI8UGF0dGVybj4g
cGF0dGVybiA9IFBhdHRlcm46OmNyZWF0ZSh0aWxlSW1hZ2UtPmNvcHlJbWFnZSgpLCB0cnVlLCB0
cnVlKTsKIAogICAgIEFmZmluZVRyYW5zZm9ybSBwYXR0ZXJuVHJhbnNmb3JtOwogICAgIHBhdHRl
cm5UcmFuc2Zvcm0udHJhbnNsYXRlKGluTWF4RWZmZWN0TG9jYXRpb24ueCgpIC0gbWF4RWZmZWN0
TG9jYXRpb24ueCgpLCBpbk1heEVmZmVjdExvY2F0aW9uLnkoKSAtIG1heEVmZmVjdExvY2F0aW9u
LnkoKSk7CiAgICAgcGF0dGVybi0+c2V0UGF0dGVyblNwYWNlVHJhbnNmb3JtKHBhdHRlcm5UcmFu
c2Zvcm0pOworICAgIEdyYXBoaWNzQ29udGV4dCogZmlsdGVyQ29udGV4dCA9IHJlc3VsdEltYWdl
LT5jb250ZXh0KCk7CiAgICAgZmlsdGVyQ29udGV4dC0+c2V0RmlsbFBhdHRlcm4ocGF0dGVybik7
CiAgICAgZmlsdGVyQ29udGV4dC0+ZmlsbFJlY3QoRmxvYXRSZWN0KEZsb2F0UG9pbnQoKSwgYWJz
b2x1dGVQYWludFJlY3QoKS5zaXplKCkpKTsKICNlbmRpZgpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFVHVyYnVsZW5jZS5jcHAgYi9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVUdXJidWxlbmNlLmNwcAppbmRleCA4OTE0ZGI3Li4zNjg2
YzE1IDEwMDY0NAotLS0gYS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVUdXJi
dWxlbmNlLmNwcAorKysgYi9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVUdXJi
dWxlbmNlLmNwcApAQCAtMzIwLDE1ICszMjAsMTYgQEAgdW5zaWduZWQgY2hhciBGRVR1cmJ1bGVu
Y2U6OmNhbGN1bGF0ZVR1cmJ1bGVuY2VWYWx1ZUZvclBvaW50KFBhaW50aW5nRGF0YSYgcGFpbnQK
IAogdm9pZCBGRVR1cmJ1bGVuY2U6OmFwcGx5KCkKIHsKLSAgICBpZiAoIWVmZmVjdENvbnRleHQo
KSkKKyAgICBpZiAoaGFzUmVzdWx0KCkpCisgICAgICAgIHJldHVybjsKKyAgICBJbWFnZURhdGEq
IHJlc3VsdEltYWdlID0gY3JlYXRlVW5tdWx0aXBsaWVkSW1hZ2VSZXN1bHQoKTsKKyAgICBpZiAo
IXJlc3VsdEltYWdlKQogICAgICAgICByZXR1cm47CiAKLSAgICBJbnRSZWN0IGltYWdlUmVjdChJ
bnRQb2ludCgpLCByZXN1bHRJbWFnZSgpLT5zaXplKCkpOwotICAgIGlmICghaW1hZ2VSZWN0LnNp
emUoKS53aWR0aCgpIHx8ICFpbWFnZVJlY3Quc2l6ZSgpLmhlaWdodCgpKQorICAgIGlmICghYWJz
b2x1dGVQYWludFJlY3QoKS53aWR0aCgpIHx8ICFhYnNvbHV0ZVBhaW50UmVjdCgpLmhlaWdodCgp
KQogICAgICAgICByZXR1cm47CiAKLSAgICBSZWZQdHI8SW1hZ2VEYXRhPiBpbWFnZURhdGEgPSBJ
bWFnZURhdGE6OmNyZWF0ZShpbWFnZVJlY3Qud2lkdGgoKSwgaW1hZ2VSZWN0LmhlaWdodCgpKTsK
LSAgICBCeXRlQXJyYXkqIHBpeGVsQXJyYXkgPSBpbWFnZURhdGEtPmRhdGEoKS0+ZGF0YSgpOwor
ICAgIEJ5dGVBcnJheSogcGl4ZWxBcnJheSA9IHJlc3VsdEltYWdlLT5kYXRhKCktPmRhdGEoKTsK
ICAgICBQYWludGluZ0RhdGEgcGFpbnRpbmdEYXRhKG1fc2VlZCwgcm91bmRlZEludFNpemUoZmls
dGVyUHJpbWl0aXZlU3VicmVnaW9uKCkuc2l6ZSgpKSk7CiAgICAgaW5pdFBhaW50KHBhaW50aW5n
RGF0YSk7CiAKQEAgLTMzNiwxNiArMzM3LDE1IEBAIHZvaWQgRkVUdXJidWxlbmNlOjphcHBseSgp
CiAgICAgRmxvYXRQb2ludCBwb2ludDsKICAgICBwb2ludC5zZXRZKGZpbHRlclJlZ2lvbi55KCkp
OwogICAgIGludCBpbmRleE9mUGl4ZWxDaGFubmVsID0gMDsKLSAgICBmb3IgKGludCB5ID0gMDsg
eSA8IGltYWdlUmVjdC5oZWlnaHQoKTsgKyt5KSB7CisgICAgZm9yIChpbnQgeSA9IDA7IHkgPCBh
YnNvbHV0ZVBhaW50UmVjdCgpLmhlaWdodCgpOyArK3kpIHsKICAgICAgICAgcG9pbnQuc2V0WShw
b2ludC55KCkgKyAxKTsKICAgICAgICAgcG9pbnQuc2V0WChmaWx0ZXJSZWdpb24ueCgpKTsKLSAg
ICAgICAgZm9yIChpbnQgeCA9IDA7IHggPCBpbWFnZVJlY3Qud2lkdGgoKTsgKyt4KSB7CisgICAg
ICAgIGZvciAoaW50IHggPSAwOyB4IDwgYWJzb2x1dGVQYWludFJlY3QoKS53aWR0aCgpOyArK3gp
IHsKICAgICAgICAgICAgIHBvaW50LnNldFgocG9pbnQueCgpICsgMSk7CiAgICAgICAgICAgICBm
b3IgKHBhaW50aW5nRGF0YS5jaGFubmVsID0gMDsgcGFpbnRpbmdEYXRhLmNoYW5uZWwgPCA0OyAr
K3BhaW50aW5nRGF0YS5jaGFubmVsLCArK2luZGV4T2ZQaXhlbENoYW5uZWwpCiAgICAgICAgICAg
ICAgICAgcGl4ZWxBcnJheS0+c2V0KGluZGV4T2ZQaXhlbENoYW5uZWwsIGNhbGN1bGF0ZVR1cmJ1
bGVuY2VWYWx1ZUZvclBvaW50KHBhaW50aW5nRGF0YSwgZmlsdGVyKCktPm1hcEFic29sdXRlUG9p
bnRUb0xvY2FsUG9pbnQocG9pbnQpKSk7CiAgICAgICAgIH0KICAgICB9Ci0gICAgcmVzdWx0SW1h
Z2UoKS0+cHV0VW5tdWx0aXBsaWVkSW1hZ2VEYXRhKGltYWdlRGF0YS5nZXQoKSwgaW1hZ2VSZWN0
LCBJbnRQb2ludCgpKTsKIH0KIAogdm9pZCBGRVR1cmJ1bGVuY2U6OmR1bXAoKQpkaWZmIC0tZ2l0
IGEvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlckVmZmVjdC5jcHAgYi9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyRWZmZWN0LmNwcAppbmRleCBj
MjI4NzMxLi5lYmM2YWYwIDEwMDY0NAotLS0gYS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Zp
bHRlcnMvRmlsdGVyRWZmZWN0LmNwcAorKysgYi9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Zp
bHRlcnMvRmlsdGVyRWZmZWN0LmNwcApAQCAtMjMsNiArMjMsNyBAQAogCiAjaWYgRU5BQkxFKEZJ
TFRFUlMpCiAjaW5jbHVkZSAiRmlsdGVyRWZmZWN0LmgiCisjaW5jbHVkZSAiSW1hZ2VEYXRhLmgi
CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIApAQCAtNTQsMTAgKzU1LDEwIEBAIHZvaWQgRmlsdGVy
RWZmZWN0OjpkZXRlcm1pbmVBYnNvbHV0ZVBhaW50UmVjdCgpCiAKIEludFJlY3QgRmlsdGVyRWZm
ZWN0OjpyZXF1ZXN0ZWRSZWdpb25PZklucHV0SW1hZ2VEYXRhKGNvbnN0IEludFJlY3QmIGVmZmVj
dFJlY3QpIGNvbnN0CiB7Ci0gICAgQVNTRVJUKG1fZWZmZWN0QnVmZmVyKTsKKyAgICBBU1NFUlQo
aGFzUmVzdWx0KCkpOwogICAgIEludFBvaW50IGxvY2F0aW9uID0gbV9hYnNvbHV0ZVBhaW50UmVj
dC5sb2NhdGlvbigpOwogICAgIGxvY2F0aW9uLm1vdmUoLWVmZmVjdFJlY3QueCgpLCAtZWZmZWN0
UmVjdC55KCkpOwotICAgIHJldHVybiBJbnRSZWN0KGxvY2F0aW9uLCBtX2VmZmVjdEJ1ZmZlci0+
c2l6ZSgpKTsKKyAgICByZXR1cm4gSW50UmVjdChsb2NhdGlvbiwgbV9hYnNvbHV0ZVBhaW50UmVj
dC5zaXplKCkpOwogfQogCiBJbnRSZWN0IEZpbHRlckVmZmVjdDo6ZHJhd2luZ1JlZ2lvbk9mSW5w
dXRJbWFnZShjb25zdCBJbnRSZWN0JiBzcmNSZWN0KSBjb25zdApAQCAtNzIsMTUgKzczLDE3MCBA
QCBGaWx0ZXJFZmZlY3QqIEZpbHRlckVmZmVjdDo6aW5wdXRFZmZlY3QodW5zaWduZWQgbnVtYmVy
KSBjb25zdAogICAgIHJldHVybiBtX2lucHV0RWZmZWN0cy5hdChudW1iZXIpLmdldCgpOwogfQog
Ci1HcmFwaGljc0NvbnRleHQqIEZpbHRlckVmZmVjdDo6ZWZmZWN0Q29udGV4dCgpCitJbWFnZUJ1
ZmZlciogRmlsdGVyRWZmZWN0Ojphc0ltYWdlQnVmZmVyKCkKIHsKKyAgICBpZiAoIWhhc1Jlc3Vs
dCgpKQorICAgICAgICByZXR1cm4gMDsKKyAgICBpZiAobV9pbWFnZUJ1ZmZlclJlc3VsdCkKKyAg
ICAgICAgcmV0dXJuIG1faW1hZ2VCdWZmZXJSZXN1bHQuZ2V0KCk7CisgICAgbV9pbWFnZUJ1ZmZl
clJlc3VsdCA9IEltYWdlQnVmZmVyOjpjcmVhdGUobV9hYnNvbHV0ZVBhaW50UmVjdC5zaXplKCks
IENvbG9yU3BhY2VMaW5lYXJSR0IpOworICAgIEludFJlY3QgZGVzdGluYXRpb25SZWN0KEludFBv
aW50KCksIG1fYWJzb2x1dGVQYWludFJlY3Quc2l6ZSgpKTsKKyAgICBpZiAobV9wcmVtdWx0aXBs
aWVkSW1hZ2VSZXN1bHQpCisgICAgICAgIG1faW1hZ2VCdWZmZXJSZXN1bHQtPnB1dFByZW11bHRp
cGxpZWRJbWFnZURhdGEobV9wcmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQuZ2V0KCksIGRlc3RpbmF0
aW9uUmVjdCwgSW50UG9pbnQoKSk7CisgICAgZWxzZQorICAgICAgICBtX2ltYWdlQnVmZmVyUmVz
dWx0LT5wdXRVbm11bHRpcGxpZWRJbWFnZURhdGEobV91bm11bHRpcGxpZWRJbWFnZVJlc3VsdC5n
ZXQoKSwgZGVzdGluYXRpb25SZWN0LCBJbnRQb2ludCgpKTsKKyAgICByZXR1cm4gbV9pbWFnZUJ1
ZmZlclJlc3VsdC5nZXQoKTsKK30KKworUGFzc1JlZlB0cjxJbWFnZURhdGE+IEZpbHRlckVmZmVj
dDo6YXNVbm11bHRpcGxpZWRJbWFnZShjb25zdCBJbnRSZWN0JiByZWN0KQoreworICAgIFJlZlB0
cjxJbWFnZURhdGE+IGltYWdlRGF0YSA9IEltYWdlRGF0YTo6Y3JlYXRlKHJlY3Qud2lkdGgoKSwg
cmVjdC5oZWlnaHQoKSk7CisgICAgY29weVVubXVsdGlwbGllZEltYWdlKGltYWdlRGF0YS5nZXQo
KSwgcmVjdCk7CisgICAgcmV0dXJuIGltYWdlRGF0YS5yZWxlYXNlKCk7Cit9CisKK1Bhc3NSZWZQ
dHI8SW1hZ2VEYXRhPiBGaWx0ZXJFZmZlY3Q6OmFzUHJlbXVsdGlwbGllZEltYWdlKGNvbnN0IElu
dFJlY3QmIHJlY3QpCit7CisgICAgUmVmUHRyPEltYWdlRGF0YT4gaW1hZ2VEYXRhID0gSW1hZ2VE
YXRhOjpjcmVhdGUocmVjdC53aWR0aCgpLCByZWN0LmhlaWdodCgpKTsKKyAgICBjb3B5UHJlbXVs
dGlwbGllZEltYWdlKGltYWdlRGF0YS5nZXQoKSwgcmVjdCk7CisgICAgcmV0dXJuIGltYWdlRGF0
YS5yZWxlYXNlKCk7Cit9CisKK2lubGluZSB2b2lkIEZpbHRlckVmZmVjdDo6Y29weUltYWdlQnl0
ZXMoSW1hZ2VEYXRhKiBzb3VyY2UsIEltYWdlRGF0YSogZGVzdGluYXRpb24sIGNvbnN0IEludFJl
Y3QmIHJlY3QpCit7CisgICAgLy8gQ29weSB0aGUgbmVjZXNzYXJ5IGxpbmVzLgorICAgIEFTU0VS
VChJbnRTaXplKGRlc3RpbmF0aW9uLT53aWR0aCgpLCBkZXN0aW5hdGlvbi0+aGVpZ2h0KCkpID09
IHJlY3Quc2l6ZSgpKTsKKyAgICBpZiAocmVjdC54KCkgPCAwIHx8IHJlY3QueSgpIDwgMCB8fCBy
ZWN0LmJvdHRvbSgpID4gbV9hYnNvbHV0ZVBhaW50UmVjdC53aWR0aCgpIHx8IHJlY3QuYm90dG9t
KCkgPiBtX2Fic29sdXRlUGFpbnRSZWN0LmhlaWdodCgpKQorICAgICAgICBtZW1zZXQoZGVzdGlu
YXRpb24tPmRhdGEoKS0+ZGF0YSgpLT5kYXRhKCksIDAsIGRlc3RpbmF0aW9uLT5kYXRhKCktPmxl
bmd0aCgpKTsKKworICAgIGludCB4T3JpZ2luID0gcmVjdC54KCk7CisgICAgaW50IHhEZXN0ID0g
MDsKKyAgICBpZiAoeE9yaWdpbiA8IDApIHsKKyAgICAgICAgeERlc3QgPSAteE9yaWdpbjsKKyAg
ICAgICAgeE9yaWdpbiA9IDA7CisgICAgfQorICAgIGludCB4RW5kID0gcmVjdC5yaWdodCgpOwor
ICAgIGlmICh4RW5kID4gbV9hYnNvbHV0ZVBhaW50UmVjdC53aWR0aCgpKQorICAgICAgICB4RW5k
ID0gbV9hYnNvbHV0ZVBhaW50UmVjdC53aWR0aCgpOworCisgICAgaW50IHlPcmlnaW4gPSByZWN0
LnkoKTsKKyAgICBpbnQgeURlc3QgPSAwOworICAgIGlmICh5T3JpZ2luIDwgMCkgeworICAgICAg
ICB5RGVzdCA9IC15T3JpZ2luOworICAgICAgICB5T3JpZ2luID0gMDsKKyAgICB9CisgICAgaW50
IHlFbmQgPSByZWN0LmJvdHRvbSgpOworICAgIGlmICh5RW5kID4gbV9hYnNvbHV0ZVBhaW50UmVj
dC5oZWlnaHQoKSkKKyAgICAgICAgeUVuZCA9IG1fYWJzb2x1dGVQYWludFJlY3QuaGVpZ2h0KCk7
CisKKyAgICBpbnQgc2l6ZSA9ICh4RW5kIC0geE9yaWdpbikgKiA0OworICAgIGludCBkZXN0aW5h
dGlvblNjYW5saW5lID0gcmVjdC53aWR0aCgpICogNDsKKyAgICBpbnQgc291cmNlU2NhbmxpbmUg
PSBtX2Fic29sdXRlUGFpbnRSZWN0LndpZHRoKCkgKiA0OworICAgIHVuc2lnbmVkIGNoYXIgKmRl
c3RpbmF0aW9uUGl4ZWwgPSBkZXN0aW5hdGlvbi0+ZGF0YSgpLT5kYXRhKCktPmRhdGEoKSArICgo
eURlc3QgKiByZWN0LndpZHRoKCkpICsgeERlc3QpICogNDsKKyAgICB1bnNpZ25lZCBjaGFyICpz
b3VyY2VQaXhlbCA9IHNvdXJjZS0+ZGF0YSgpLT5kYXRhKCktPmRhdGEoKSArICgoeU9yaWdpbiAq
IG1fYWJzb2x1dGVQYWludFJlY3Qud2lkdGgoKSkgKyB4T3JpZ2luKSAqIDQ7CisKKyAgICB3aGls
ZSAoeU9yaWdpbiA8IHlFbmQpIHsKKyAgICAgICAgbWVtY3B5KGRlc3RpbmF0aW9uUGl4ZWwsIHNv
dXJjZVBpeGVsLCBzaXplKTsKKyAgICAgICAgZGVzdGluYXRpb25QaXhlbCArPSBkZXN0aW5hdGlv
blNjYW5saW5lOworICAgICAgICBzb3VyY2VQaXhlbCArPSBzb3VyY2VTY2FubGluZTsKKyAgICAg
ICAgKyt5T3JpZ2luOworICAgIH0KK30KKwordm9pZCBGaWx0ZXJFZmZlY3Q6OmNvcHlVbm11bHRp
cGxpZWRJbWFnZShJbWFnZURhdGEqIGRlc3RpbmF0aW9uLCBjb25zdCBJbnRSZWN0JiByZWN0KQor
eworICAgIEFTU0VSVChoYXNSZXN1bHQoKSk7CisKKyAgICBpZiAoIW1fdW5tdWx0aXBsaWVkSW1h
Z2VSZXN1bHQpIHsKKyAgICAgICAgLy8gV2UgcHJlZmVyIGEgY29udmVyc2lvbiBmcm9tIHRoZSBp
bWFnZSBidWZmZXIuCisgICAgICAgIGlmIChtX2ltYWdlQnVmZmVyUmVzdWx0KQorICAgICAgICAg
ICAgbV91bm11bHRpcGxpZWRJbWFnZVJlc3VsdCA9IG1faW1hZ2VCdWZmZXJSZXN1bHQtPmdldFVu
bXVsdGlwbGllZEltYWdlRGF0YShJbnRSZWN0KEludFBvaW50KCksIG1fYWJzb2x1dGVQYWludFJl
Y3Quc2l6ZSgpKSk7CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgbV91bm11bHRpcGxpZWRJ
bWFnZVJlc3VsdCA9IEltYWdlRGF0YTo6Y3JlYXRlKG1fYWJzb2x1dGVQYWludFJlY3Qud2lkdGgo
KSwgbV9hYnNvbHV0ZVBhaW50UmVjdC5oZWlnaHQoKSk7CisgICAgICAgICAgICB1bnNpZ25lZCBj
aGFyKiBzb3VyY2VDb21wb25lbnQgPSBtX3ByZW11bHRpcGxpZWRJbWFnZVJlc3VsdC0+ZGF0YSgp
LT5kYXRhKCktPmRhdGEoKTsKKyAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIqIGRlc3RpbmF0aW9u
Q29tcG9uZW50ID0gbV91bm11bHRpcGxpZWRJbWFnZVJlc3VsdC0+ZGF0YSgpLT5kYXRhKCktPmRh
dGEoKTsKKyAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIqIGVuZCA9IHNvdXJjZUNvbXBvbmVudCAr
IChtX2Fic29sdXRlUGFpbnRSZWN0LndpZHRoKCkgKiBtX2Fic29sdXRlUGFpbnRSZWN0LmhlaWdo
dCgpICogNCk7CisgICAgICAgICAgICB3aGlsZSAoc291cmNlQ29tcG9uZW50IDwgZW5kKSB7Cisg
ICAgICAgICAgICAgICAgaW50IGFscGhhID0gc291cmNlQ29tcG9uZW50WzNdOworICAgICAgICAg
ICAgICAgIGlmIChhbHBoYSkgeworICAgICAgICAgICAgICAgICAgICBkZXN0aW5hdGlvbkNvbXBv
bmVudFswXSA9IHN0YXRpY19jYXN0PGludD4oc291cmNlQ29tcG9uZW50WzBdKSAqIDI1NSAvIGFs
cGhhOworICAgICAgICAgICAgICAgICAgICBkZXN0aW5hdGlvbkNvbXBvbmVudFsxXSA9IHN0YXRp
Y19jYXN0PGludD4oc291cmNlQ29tcG9uZW50WzFdKSAqIDI1NSAvIGFscGhhOworICAgICAgICAg
ICAgICAgICAgICBkZXN0aW5hdGlvbkNvbXBvbmVudFsyXSA9IHN0YXRpY19jYXN0PGludD4oc291
cmNlQ29tcG9uZW50WzJdKSAqIDI1NSAvIGFscGhhOworICAgICAgICAgICAgICAgIH0gZWxzZSB7
CisgICAgICAgICAgICAgICAgICAgIGRlc3RpbmF0aW9uQ29tcG9uZW50WzBdID0gMDsKKyAgICAg
ICAgICAgICAgICAgICAgZGVzdGluYXRpb25Db21wb25lbnRbMV0gPSAwOworICAgICAgICAgICAg
ICAgICAgICBkZXN0aW5hdGlvbkNvbXBvbmVudFsyXSA9IDA7CisgICAgICAgICAgICAgICAgfQor
ICAgICAgICAgICAgICAgIGRlc3RpbmF0aW9uQ29tcG9uZW50WzNdID0gYWxwaGE7CisgICAgICAg
ICAgICAgICAgc291cmNlQ29tcG9uZW50ICs9IDQ7CisgICAgICAgICAgICAgICAgZGVzdGluYXRp
b25Db21wb25lbnQgKz0gNDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKyAgICBj
b3B5SW1hZ2VCeXRlcyhtX3VubXVsdGlwbGllZEltYWdlUmVzdWx0LmdldCgpLCBkZXN0aW5hdGlv
biwgcmVjdCk7Cit9CisKK3ZvaWQgRmlsdGVyRWZmZWN0Ojpjb3B5UHJlbXVsdGlwbGllZEltYWdl
KEltYWdlRGF0YSogZGVzdGluYXRpb24sIGNvbnN0IEludFJlY3QmIHJlY3QpCit7CisgICAgQVNT
RVJUKGhhc1Jlc3VsdCgpKTsKKworICAgIGlmICghbV9wcmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQp
IHsKKyAgICAgICAgLy8gV2UgcHJlZmVyIGEgY29udmVyc2lvbiBmcm9tIHRoZSBpbWFnZSBidWZm
ZXIuCisgICAgICAgIGlmIChtX2ltYWdlQnVmZmVyUmVzdWx0KQorICAgICAgICAgICAgbV9wcmVt
dWx0aXBsaWVkSW1hZ2VSZXN1bHQgPSBtX2ltYWdlQnVmZmVyUmVzdWx0LT5nZXRQcmVtdWx0aXBs
aWVkSW1hZ2VEYXRhKEludFJlY3QoSW50UG9pbnQoKSwgbV9hYnNvbHV0ZVBhaW50UmVjdC5zaXpl
KCkpKTsKKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICBtX3ByZW11bHRpcGxpZWRJbWFnZVJl
c3VsdCA9IEltYWdlRGF0YTo6Y3JlYXRlKG1fYWJzb2x1dGVQYWludFJlY3Qud2lkdGgoKSwgbV9h
YnNvbHV0ZVBhaW50UmVjdC5oZWlnaHQoKSk7CisgICAgICAgICAgICB1bnNpZ25lZCBjaGFyKiBz
b3VyY2VDb21wb25lbnQgPSBtX3VubXVsdGlwbGllZEltYWdlUmVzdWx0LT5kYXRhKCktPmRhdGEo
KS0+ZGF0YSgpOworICAgICAgICAgICAgdW5zaWduZWQgY2hhciogZGVzdGluYXRpb25Db21wb25l
bnQgPSBtX3ByZW11bHRpcGxpZWRJbWFnZVJlc3VsdC0+ZGF0YSgpLT5kYXRhKCktPmRhdGEoKTsK
KyAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIqIGVuZCA9IHNvdXJjZUNvbXBvbmVudCArIChtX2Fi
c29sdXRlUGFpbnRSZWN0LndpZHRoKCkgKiBtX2Fic29sdXRlUGFpbnRSZWN0LmhlaWdodCgpICog
NCk7CisgICAgICAgICAgICB3aGlsZSAoc291cmNlQ29tcG9uZW50IDwgZW5kKSB7CisgICAgICAg
ICAgICAgICAgaW50IGFscGhhID0gc291cmNlQ29tcG9uZW50WzNdOworICAgICAgICAgICAgICAg
IGRlc3RpbmF0aW9uQ29tcG9uZW50WzBdID0gc3RhdGljX2Nhc3Q8aW50Pihzb3VyY2VDb21wb25l
bnRbMF0pICogYWxwaGEgLyAyNTU7CisgICAgICAgICAgICAgICAgZGVzdGluYXRpb25Db21wb25l
bnRbMV0gPSBzdGF0aWNfY2FzdDxpbnQ+KHNvdXJjZUNvbXBvbmVudFsxXSkgKiBhbHBoYSAvIDI1
NTsKKyAgICAgICAgICAgICAgICBkZXN0aW5hdGlvbkNvbXBvbmVudFsyXSA9IHN0YXRpY19jYXN0
PGludD4oc291cmNlQ29tcG9uZW50WzJdKSAqIGFscGhhIC8gMjU1OworICAgICAgICAgICAgICAg
IGRlc3RpbmF0aW9uQ29tcG9uZW50WzNdID0gYWxwaGE7CisgICAgICAgICAgICAgICAgc291cmNl
Q29tcG9uZW50ICs9IDQ7CisgICAgICAgICAgICAgICAgZGVzdGluYXRpb25Db21wb25lbnQgKz0g
NDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKyAgICBjb3B5SW1hZ2VCeXRlcyht
X3ByZW11bHRpcGxpZWRJbWFnZVJlc3VsdC5nZXQoKSwgZGVzdGluYXRpb24sIHJlY3QpOworfQor
CitJbWFnZUJ1ZmZlciogRmlsdGVyRWZmZWN0OjpjcmVhdGVJbWFnZUJ1ZmZlclJlc3VsdCgpCit7
CisgICAgLy8gT25seSBvbmUgcmVzdWx0IHR5cGUgaXMgYWxsb3dlZC4KKyAgICBBU1NFUlQoIWhh
c1Jlc3VsdCgpKTsKKyAgICBkZXRlcm1pbmVBYnNvbHV0ZVBhaW50UmVjdCgpOworICAgIGlmICht
X2Fic29sdXRlUGFpbnRSZWN0LmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJuIDA7CisgICAgbV9p
bWFnZUJ1ZmZlclJlc3VsdCA9IEltYWdlQnVmZmVyOjpjcmVhdGUobV9hYnNvbHV0ZVBhaW50UmVj
dC5zaXplKCksIENvbG9yU3BhY2VMaW5lYXJSR0IpOworICAgIGlmICghbV9pbWFnZUJ1ZmZlclJl
c3VsdCkKKyAgICAgICAgcmV0dXJuIDA7CisgICAgQVNTRVJUKG1faW1hZ2VCdWZmZXJSZXN1bHQt
PmNvbnRleHQoKSk7CisgICAgcmV0dXJuIG1faW1hZ2VCdWZmZXJSZXN1bHQuZ2V0KCk7Cit9CisK
K0ltYWdlRGF0YSogRmlsdGVyRWZmZWN0OjpjcmVhdGVVbm11bHRpcGxpZWRJbWFnZVJlc3VsdCgp
Cit7CisgICAgLy8gT25seSBvbmUgcmVzdWx0IHR5cGUgaXMgYWxsb3dlZC4KKyAgICBBU1NFUlQo
IWhhc1Jlc3VsdCgpKTsKICAgICBkZXRlcm1pbmVBYnNvbHV0ZVBhaW50UmVjdCgpOwogICAgIGlm
IChtX2Fic29sdXRlUGFpbnRSZWN0LmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuIDA7Ci0gICAg
bV9lZmZlY3RCdWZmZXIgPSBJbWFnZUJ1ZmZlcjo6Y3JlYXRlKG1fYWJzb2x1dGVQYWludFJlY3Qu
c2l6ZSgpLCBDb2xvclNwYWNlTGluZWFyUkdCKTsKLSAgICBpZiAoIW1fZWZmZWN0QnVmZmVyKQor
ICAgIG1fdW5tdWx0aXBsaWVkSW1hZ2VSZXN1bHQgPSBJbWFnZURhdGE6OmNyZWF0ZShtX2Fic29s
dXRlUGFpbnRSZWN0LndpZHRoKCksIG1fYWJzb2x1dGVQYWludFJlY3QuaGVpZ2h0KCkpOworICAg
IHJldHVybiBtX3VubXVsdGlwbGllZEltYWdlUmVzdWx0LmdldCgpOworfQorCitJbWFnZURhdGEq
IEZpbHRlckVmZmVjdDo6Y3JlYXRlUHJlbXVsdGlwbGllZEltYWdlUmVzdWx0KCkKK3sKKyAgICAv
LyBPbmx5IG9uZSByZXN1bHQgdHlwZSBpcyBhbGxvd2VkLgorICAgIEFTU0VSVCghaGFzUmVzdWx0
KCkpOworICAgIGRldGVybWluZUFic29sdXRlUGFpbnRSZWN0KCk7CisgICAgaWYgKG1fYWJzb2x1
dGVQYWludFJlY3QuaXNFbXB0eSgpKQogICAgICAgICByZXR1cm4gMDsKLSAgICByZXR1cm4gbV9l
ZmZlY3RCdWZmZXItPmNvbnRleHQoKTsKKyAgICBtX3ByZW11bHRpcGxpZWRJbWFnZVJlc3VsdCA9
IEltYWdlRGF0YTo6Y3JlYXRlKG1fYWJzb2x1dGVQYWludFJlY3Qud2lkdGgoKSwgbV9hYnNvbHV0
ZVBhaW50UmVjdC5oZWlnaHQoKSk7CisgICAgcmV0dXJuIG1fcHJlbXVsdGlwbGllZEltYWdlUmVz
dWx0LmdldCgpOwogfQogCiBUZXh0U3RyZWFtJiBGaWx0ZXJFZmZlY3Q6OmV4dGVybmFsUmVwcmVz
ZW50YXRpb24oVGV4dFN0cmVhbSYgdHMsIGludCkgY29uc3QKZGlmZiAtLWdpdCBhL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJFZmZlY3QuaCBiL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJFZmZlY3QuaAppbmRleCBmOTY3NGUyLi44MWQ1NDA5
IDEwMDY0NAotLS0gYS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyRWZm
ZWN0LmgKKysrIGIvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlckVmZmVj
dC5oCkBAIC01MCwxMyArNTAsMTIgQEAgY2xhc3MgRmlsdGVyRWZmZWN0IDogcHVibGljIFJlZkNv
dW50ZWQ8RmlsdGVyRWZmZWN0PiB7CiBwdWJsaWM6CiAgICAgdmlydHVhbCB+RmlsdGVyRWZmZWN0
KCk7CiAKLSAgICAvLyBUaGUgcmVzdWx0IGlzIGJvdW5kZWQgdG8gdGhlIHNpemUgb2YgdGhlIGZp
bHRlciBwcmltaXRpdmUgdG8gc2F2ZSByZXNvdXJjZXMuCi0gICAgSW1hZ2VCdWZmZXIqIHJlc3Vs
dEltYWdlKCkgY29uc3QgeyByZXR1cm4gbV9lZmZlY3RCdWZmZXIuZ2V0KCk7IH0KLSAgICB2b2lk
IHNldEVmZmVjdEJ1ZmZlcihQYXNzT3duUHRyPEltYWdlQnVmZmVyPiBlZmZlY3RCdWZmZXIpIHsg
bV9lZmZlY3RCdWZmZXIgPSBlZmZlY3RCdWZmZXI7IH0KLQotICAgIC8vIENyZWF0ZXMgdGhlIElt
YWdlQnVmZmVyIGZvciB0aGUgY3VycmVudCBmaWx0ZXIgcHJpbWl0aXZlIHJlc3VsdCBpbiB0aGUg
c2l6ZSBvZiB0aGUKLSAgICAvLyByZXBhaW50UmVjdC4gR2l2ZXMgYmFjayB0aGUgR3JhcGhpY3ND
b250ZXh0IG9mIHRoZSBvd24gSW1hZ2VCdWZmZXIuCi0gICAgR3JhcGhpY3NDb250ZXh0KiBlZmZl
Y3RDb250ZXh0KCk7CisgICAgYm9vbCBoYXNSZXN1bHQoKSBjb25zdCB7IHJldHVybiBtX2ltYWdl
QnVmZmVyUmVzdWx0IHx8IG1fdW5tdWx0aXBsaWVkSW1hZ2VSZXN1bHQgfHwgbV9wcmVtdWx0aXBs
aWVkSW1hZ2VSZXN1bHQ7IH0KKyAgICBJbWFnZUJ1ZmZlciogYXNJbWFnZUJ1ZmZlcigpOworICAg
IFBhc3NSZWZQdHI8SW1hZ2VEYXRhPiBhc1VubXVsdGlwbGllZEltYWdlKGNvbnN0IEludFJlY3Qm
KTsKKyAgICBQYXNzUmVmUHRyPEltYWdlRGF0YT4gYXNQcmVtdWx0aXBsaWVkSW1hZ2UoY29uc3Qg
SW50UmVjdCYpOworICAgIHZvaWQgY29weVVubXVsdGlwbGllZEltYWdlKEltYWdlRGF0YSogZGVz
dGluYXRpb24sIGNvbnN0IEludFJlY3QmKTsKKyAgICB2b2lkIGNvcHlQcmVtdWx0aXBsaWVkSW1h
Z2UoSW1hZ2VEYXRhKiBkZXN0aW5hdGlvbiwgY29uc3QgSW50UmVjdCYpOwogCiAgICAgRmlsdGVy
RWZmZWN0VmVjdG9yJiBpbnB1dEVmZmVjdHMoKSB7IHJldHVybiBtX2lucHV0RWZmZWN0czsgfQog
ICAgIEZpbHRlckVmZmVjdCogaW5wdXRFZmZlY3QodW5zaWduZWQpIGNvbnN0OwpAQCAtMTEwLDgg
KzEwOSwxNCBAQCBwdWJsaWM6CiBwcm90ZWN0ZWQ6CiAgICAgRmlsdGVyRWZmZWN0KEZpbHRlciop
OwogCisgICAgSW1hZ2VCdWZmZXIqIGNyZWF0ZUltYWdlQnVmZmVyUmVzdWx0KCk7CisgICAgSW1h
Z2VEYXRhKiBjcmVhdGVVbm11bHRpcGxpZWRJbWFnZVJlc3VsdCgpOworICAgIEltYWdlRGF0YSog
Y3JlYXRlUHJlbXVsdGlwbGllZEltYWdlUmVzdWx0KCk7CisKIHByaXZhdGU6Ci0gICAgT3duUHRy
PEltYWdlQnVmZmVyPiBtX2VmZmVjdEJ1ZmZlcjsKKyAgICBPd25QdHI8SW1hZ2VCdWZmZXI+IG1f
aW1hZ2VCdWZmZXJSZXN1bHQ7CisgICAgUmVmUHRyPEltYWdlRGF0YT4gbV91bm11bHRpcGxpZWRJ
bWFnZVJlc3VsdDsKKyAgICBSZWZQdHI8SW1hZ2VEYXRhPiBtX3ByZW11bHRpcGxpZWRJbWFnZVJl
c3VsdDsKICAgICBGaWx0ZXJFZmZlY3RWZWN0b3IgbV9pbnB1dEVmZmVjdHM7CiAKICAgICBib29s
IG1fYWxwaGFJbWFnZTsKQEAgLTEyNCw2ICsxMjksOCBAQCBwcml2YXRlOgogICAgIEZpbHRlciog
bV9maWx0ZXI7CiAKIHByaXZhdGU6CisgICAgaW5saW5lIHZvaWQgY29weUltYWdlQnl0ZXMoSW1h
Z2VEYXRhKiBzb3VyY2UsIEltYWdlRGF0YSogZGVzdGluYXRpb24sIGNvbnN0IEludFJlY3QmKTsK
KwogICAgIC8vIFRoZSBmb2xsb3dpbmcgbWVtYmVyIHZhcmlhYmxlcyBhcmUgU1ZHIHNwZWNpZmlj
IGFuZCB3aWxsIG1vdmUgdG8gUmVuZGVyU1ZHUmVzb3VyY2VGaWx0ZXJQcmltaXRpdmUuCiAgICAg
Ly8gU2VlIGJ1ZyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NDU2MTQu
CiAKZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9Tb3VyY2VB
bHBoYS5jcHAgYi9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvU291cmNlQWxwaGEu
Y3BwCmluZGV4IGE1MDViNGIuLjJkMmRlMDAgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvZmlsdGVycy9Tb3VyY2VBbHBoYS5jcHAKKysrIGIvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9maWx0ZXJzL1NvdXJjZUFscGhhLmNwcApAQCAtNTIsMTQgKzUyLDE3IEBAIHZvaWQg
U291cmNlQWxwaGE6OmRldGVybWluZUFic29sdXRlUGFpbnRSZWN0KCkKIAogdm9pZCBTb3VyY2VB
bHBoYTo6YXBwbHkoKQogewotICAgIEdyYXBoaWNzQ29udGV4dCogZmlsdGVyQ29udGV4dCA9IGVm
ZmVjdENvbnRleHQoKTsKKyAgICBpZiAoaGFzUmVzdWx0KCkpCisgICAgICAgIHJldHVybjsKKyAg
ICBJbWFnZUJ1ZmZlciogcmVzdWx0SW1hZ2UgPSBjcmVhdGVJbWFnZUJ1ZmZlclJlc3VsdCgpOwog
ICAgIEZpbHRlciogZmlsdGVyID0gdGhpcy0+ZmlsdGVyKCk7Ci0gICAgaWYgKCFmaWx0ZXJDb250
ZXh0IHx8ICFmaWx0ZXItPnNvdXJjZUltYWdlKCkpCisgICAgaWYgKCFyZXN1bHRJbWFnZSB8fCAh
ZmlsdGVyLT5zb3VyY2VJbWFnZSgpKQogICAgICAgICByZXR1cm47CiAKICAgICBzZXRJc0FscGhh
SW1hZ2UodHJ1ZSk7CiAKICAgICBGbG9hdFJlY3QgaW1hZ2VSZWN0KEZsb2F0UG9pbnQoKSwgYWJz
b2x1dGVQYWludFJlY3QoKS5zaXplKCkpOworICAgIEdyYXBoaWNzQ29udGV4dCogZmlsdGVyQ29u
dGV4dCA9IHJlc3VsdEltYWdlLT5jb250ZXh0KCk7CiAgICAgZmlsdGVyQ29udGV4dC0+c2F2ZSgp
OwogICAgIGZpbHRlckNvbnRleHQtPmNsaXBUb0ltYWdlQnVmZmVyKGZpbHRlci0+c291cmNlSW1h
Z2UoKSwgaW1hZ2VSZWN0KTsKICAgICBmaWx0ZXJDb250ZXh0LT5maWxsUmVjdChpbWFnZVJlY3Qs
IENvbG9yOjpibGFjaywgQ29sb3JTcGFjZURldmljZVJHQik7CmRpZmYgLS1naXQgYS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvU291cmNlR3JhcGhpYy5jcHAgYi9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvU291cmNlR3JhcGhpYy5jcHAKaW5kZXggNmFhYzM2Ny4u
MDQwODJhZCAxMDA2NDQKLS0tIGEvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL1Nv
dXJjZUdyYXBoaWMuY3BwCisrKyBiL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9T
b3VyY2VHcmFwaGljLmNwcApAQCAtNTEsMTIgKzUxLDE0IEBAIHZvaWQgU291cmNlR3JhcGhpYzo6
ZGV0ZXJtaW5lQWJzb2x1dGVQYWludFJlY3QoKQogCiB2b2lkIFNvdXJjZUdyYXBoaWM6OmFwcGx5
KCkKIHsKLSAgICBHcmFwaGljc0NvbnRleHQqIGZpbHRlckNvbnRleHQgPSBlZmZlY3RDb250ZXh0
KCk7CisgICAgaWYgKGhhc1Jlc3VsdCgpKQorICAgICAgICByZXR1cm47CisgICAgSW1hZ2VCdWZm
ZXIqIHJlc3VsdEltYWdlID0gY3JlYXRlSW1hZ2VCdWZmZXJSZXN1bHQoKTsKICAgICBGaWx0ZXIq
IGZpbHRlciA9IHRoaXMtPmZpbHRlcigpOwotICAgIGlmICghZmlsdGVyQ29udGV4dCB8fCAhZmls
dGVyLT5zb3VyY2VJbWFnZSgpKQorICAgIGlmICghcmVzdWx0SW1hZ2UgfHwgIWZpbHRlci0+c291
cmNlSW1hZ2UoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgZmlsdGVyQ29udGV4dC0+ZHJhd0lt
YWdlQnVmZmVyKGZpbHRlci0+c291cmNlSW1hZ2UoKSwgQ29sb3JTcGFjZURldmljZVJHQiwgSW50
UG9pbnQoKSk7CisgICAgcmVzdWx0SW1hZ2UtPmNvbnRleHQoKS0+ZHJhd0ltYWdlQnVmZmVyKGZp
bHRlci0+c291cmNlSW1hZ2UoKSwgQ29sb3JTcGFjZURldmljZVJHQiwgSW50UG9pbnQoKSk7CiB9
CiAKIHZvaWQgU291cmNlR3JhcGhpYzo6ZHVtcCgpCmRpZmYgLS1naXQgYS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2ZpbHRlcnMvU291cmNlR3JhcGhpYy5oIGIvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9maWx0ZXJzL1NvdXJjZUdyYXBoaWMuaAppbmRleCBmYTQ3ZjEyLi45N2Q2ODgyIDEw
MDY0NAotLS0gYS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvU291cmNlR3JhcGhp
Yy5oCisrKyBiL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9Tb3VyY2VHcmFwaGlj
LmgKQEAgLTE5LDcgKzE5LDcgQEAKICAqLwogCiAjaWZuZGVmIFNvdXJjZUdyYXBoaWNfaAotI2Rl
ZmluZSBTb3VyY2VHcmFocGljX2gKKyNkZWZpbmUgU291cmNlR3JhcGhpY19oCiAKICNpZiBFTkFC
TEUoRklMVEVSUykKICNpbmNsdWRlICJGaWx0ZXJFZmZlY3QuaCIKZGlmZiAtLWdpdCBhL1dlYkNv
cmUvcmVuZGVyaW5nL1JlbmRlclNWR1Jlc291cmNlRmlsdGVyLmNwcCBiL1dlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlclNWR1Jlc291cmNlRmlsdGVyLmNwcAppbmRleCAyZWQ5MmJkLi44YWE5MzcwIDEw
MDY0NAotLS0gYS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJTVkdSZXNvdXJjZUZpbHRlci5jcHAK
KysrIGIvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyU1ZHUmVzb3VyY2VGaWx0ZXIuY3BwCkBAIC0y
OTMsMTQgKzI5MywxNCBAQCB2b2lkIFJlbmRlclNWR1Jlc291cmNlRmlsdGVyOjpwb3N0QXBwbHlS
ZXNvdXJjZShSZW5kZXJPYmplY3QqIG9iamVjdCwgR3JhcGhpY3NDbwogICAgICAgICAgICAgZmls
dGVyRGF0YS0+ZmlsdGVyLT5zZXRTb3VyY2VJbWFnZShmaWx0ZXJEYXRhLT5zb3VyY2VHcmFwaGlj
QnVmZmVyLnJlbGVhc2UoKSk7CiAgICAgICAgICAgICBsYXN0RWZmZWN0LT5hcHBseSgpOwogI2lm
ICFQTEFURk9STShDRykKLSAgICAgICAgICAgIEltYWdlQnVmZmVyKiByZXN1bHRJbWFnZSA9IGxh
c3RFZmZlY3QtPnJlc3VsdEltYWdlKCk7CisgICAgICAgICAgICBJbWFnZUJ1ZmZlciogcmVzdWx0
SW1hZ2UgPSBsYXN0RWZmZWN0LT5hc0ltYWdlQnVmZmVyKCk7CiAgICAgICAgICAgICBpZiAocmVz
dWx0SW1hZ2UpCiAgICAgICAgICAgICAgICAgcmVzdWx0SW1hZ2UtPnRyYW5zZm9ybUNvbG9yU3Bh
Y2UoQ29sb3JTcGFjZUxpbmVhclJHQiwgQ29sb3JTcGFjZURldmljZVJHQik7CiAjZW5kaWYKICAg
ICAgICAgICAgIGZpbHRlckRhdGEtPmJ1aWxkZWQgPSB0cnVlOwogICAgICAgICB9CiAKLSAgICAg
ICAgSW1hZ2VCdWZmZXIqIHJlc3VsdEltYWdlID0gbGFzdEVmZmVjdC0+cmVzdWx0SW1hZ2UoKTsK
KyAgICAgICAgSW1hZ2VCdWZmZXIqIHJlc3VsdEltYWdlID0gbGFzdEVmZmVjdC0+YXNJbWFnZUJ1
ZmZlcigpOwogICAgICAgICBpZiAocmVzdWx0SW1hZ2UpIHsKICAgICAgICAgICAgIGNvbnRleHQt
PmNvbmNhdENUTShmaWx0ZXJEYXRhLT5zaGVhckZyZWVBYnNvbHV0ZVRyYW5zZm9ybS5pbnZlcnNl
KCkpOwogCmRpZmYgLS1naXQgYS9XZWJDb3JlL3N2Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0ZFSW1h
Z2UuY3BwIGIvV2ViQ29yZS9zdmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdGRUltYWdlLmNwcAppbmRl
eCA2YTE5MTRhLi5iNWFlNDY2IDEwMDY0NAotLS0gYS9XZWJDb3JlL3N2Zy9ncmFwaGljcy9maWx0
ZXJzL1NWR0ZFSW1hZ2UuY3BwCisrKyBiL1dlYkNvcmUvc3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZH
RkVJbWFnZS5jcHAKQEAgLTU5LDggKzU5LDggQEAgdm9pZCBGRUltYWdlOjphcHBseSgpCiAgICAg
aWYgKCFtX2ltYWdlLmdldCgpKQogICAgICAgICByZXR1cm47CiAKLSAgICBHcmFwaGljc0NvbnRl
eHQqIGZpbHRlckNvbnRleHQgPSBlZmZlY3RDb250ZXh0KCk7Ci0gICAgaWYgKCFmaWx0ZXJDb250
ZXh0KQorICAgIEltYWdlQnVmZmVyKiByZXN1bHRJbWFnZSA9IGNyZWF0ZUltYWdlQnVmZmVyUmVz
dWx0KCk7CisgICAgaWYgKCFyZXN1bHRJbWFnZSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgRmxv
YXRSZWN0IHNyY1JlY3QoRmxvYXRQb2ludCgpLCBtX2ltYWdlLT5zaXplKCkpOwpAQCAtNzAsNyAr
NzAsNyBAQCB2b2lkIEZFSW1hZ2U6OmFwcGx5KCkKICAgICBJbnRQb2ludCBwYWludExvY2F0aW9u
ID0gYWJzb2x1dGVQYWludFJlY3QoKS5sb2NhdGlvbigpOwogICAgIGRlc3RSZWN0Lm1vdmUoLXBh
aW50TG9jYXRpb24ueCgpLCAtcGFpbnRMb2NhdGlvbi55KCkpOwogCi0gICAgZmlsdGVyQ29udGV4
dC0+ZHJhd0ltYWdlKG1faW1hZ2UuZ2V0KCksIENvbG9yU3BhY2VEZXZpY2VSR0IsIGRlc3RSZWN0
LCBzcmNSZWN0KTsKKyAgICByZXN1bHRJbWFnZS0+Y29udGV4dCgpLT5kcmF3SW1hZ2UobV9pbWFn
ZS5nZXQoKSwgQ29sb3JTcGFjZURldmljZVJHQiwgZGVzdFJlY3QsIHNyY1JlY3QpOwogfQogCiB2
b2lkIEZFSW1hZ2U6OmR1bXAoKQotLSAKMS42LjAuNAoK
</data>
<flag name="review"
          id="66508"
          type_id="1"
          status="-"
          setter="krit"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>75793</attachid>
            <date>2010-12-07 01:41:50 -0800</date>
            <delta_ts>2010-12-12 11:13:30 -0800</delta_ts>
            <desc>patch 4</desc>
            <filename>0001-filter-result.patch</filename>
            <type>text/plain</type>
            <size>58676</size>
            <attacher name="Zoltan Herczeg">zherczeg</attacher>
            
              <data encoding="base64">RnJvbSBkYjY4ZWZkZTA5Njk2MGRiYzE0ZTM3YWY0NGQ3MDc1OThhZGRkZDU2IE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBab2x0YW4gSGVyY3plZyA8emhlcmN6ZWdAaW5mLnUtc3plZ2Vk
Lmh1PgpEYXRlOiBUdWUsIDcgRGVjIDIwMTAgMTA6Mzc6MzkgKzAxMDAKU3ViamVjdDogW1BBVENI
XSBmaWx0ZXItcmVzdWx0CgpTaWduZWQtb2ZmLWJ5OiBab2x0YW4gSGVyY3plZyA8emhlcmN6ZWdA
aW5mLnUtc3plZ2VkLmh1PgotLS0KIFdlYkNvcmUvQ2hhbmdlTG9nICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHwgICA3NSArKysrKysrKysKIFdlYkNvcmUvbWFudWFsLXRlc3RzL3N2
Zy1maWx0ZXItYW5pbWF0aW9uLnN2ZyAgICAgIHwgIDEyMCArKysrKysrKysrKysrKwogV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQmxlbmQuY3BwICAgICAgfCAgIDE3ICstCiAu
Li4vcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUNvbG9yTWF0cml4LmNwcCAgICB8ICAgMTYg
Ky0KIC4uLi9ncmFwaGljcy9maWx0ZXJzL0ZFQ29tcG9uZW50VHJhbnNmZXIuY3BwICAgICAgIHwg
ICAxMSArLQogV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29tcG9zaXRlLmNw
cCAgfCAgIDM1ICsrKy0tCiAuLi4vcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUNvbnZvbHZl
TWF0cml4LmNwcCB8ICAgNDYgKysrLS0tCiAuLi4vZ3JhcGhpY3MvZmlsdGVycy9GRURpc3BsYWNl
bWVudE1hcC5jcHAgICAgICAgICB8ICAgMjggKystLQogV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9maWx0ZXJzL0ZFRmxvb2QuY3BwICAgICAgfCAgICA4ICstCiAuLi4vcGxhdGZvcm0vZ3JhcGhp
Y3MvZmlsdGVycy9GRUdhdXNzaWFuQmx1ci5jcHAgICB8ICAgMjcgKystLQogV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFTGlnaHRpbmcuY3BwICAgfCAgIDE0ICstCiBXZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVNZXJnZS5jcHAgICAgICB8ICAgMTEgKy0KIFdl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRU1lcmdlLmggICAgICAgIHwgICAgMiAr
LQogV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFTW9ycGhvbG9neS5jcHAgfCAg
IDE0ICstCiBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVPZmZzZXQuY3BwICAg
ICB8ICAgMTAgKy0KIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRVRpbGUuY3Bw
ICAgICAgIHwgICAxMSArLQogV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFVHVy
YnVsZW5jZS5jcHAgfCAgIDE2ICstCiBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMv
RmlsdGVyRWZmZWN0LmNwcCB8ICAxNjggKysrKysrKysrKysrKysrKysrKy0KIFdlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJFZmZlY3QuaCAgIHwgICAyMyArKy0KIFdlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9Tb3VyY2VBbHBoYS5jcHAgIHwgICAgNyArLQog
Li4uL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvU291cmNlR3JhcGhpYy5jcHAgICAgfCAgICA4
ICstCiBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvU291cmNlR3JhcGhpYy5oICB8
ICAgIDIgKy0KIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclNWR1Jlc291cmNlRmlsdGVyLmNwcCAg
ICAgIHwgICAgNCArLQogV2ViQ29yZS9zdmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdGRUltYWdlLmNw
cCAgICAgICAgfCAgICA2ICstCiAyNCBmaWxlcyBjaGFuZ2VkLCA1MjkgaW5zZXJ0aW9ucygrKSwg
MTUwIGRlbGV0aW9ucygtKQogY3JlYXRlIG1vZGUgMTAwNjQ0IFdlYkNvcmUvbWFudWFsLXRlc3Rz
L3N2Zy1maWx0ZXItYW5pbWF0aW9uLnN2ZwoKZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ2hhbmdlTG9n
IGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZDQ4N2YyNi4uZTY3NjQ4YSAxMDA2NDQKLS0tIGEv
V2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvV2ViQ29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSw3OCBA
QAorMjAxMC0xMi0wNiAgWm9sdGFuIEhlcmN6ZWcgIDx6aGVyY3plZ0B3ZWJraXQub3JnPgorCisg
ICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEJldHRlciByZXN1
bHQgcGFzc2luZyBpbiBmaWx0ZXIgcHJpbWl0aXZlcworICAgICAgICBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NDk5MDcKKworICAgICAgICBTVkcgZmlsdGVyIHByaW1p
dGl2ZXMgY2FuIHVzZSB0aGUgb3V0cHV0IG9mIG90aGVyIGZpbHRlcnMuIFRoZQorICAgICAgICBp
bnB1dCBhbmQgb3V0cHV0IGZvcm1hdCBvZiBhIGZpbHRlciBjYW4gYmUgYSBwcmVtdWx0aXBsaWVk
IG9yCisgICAgICAgIHVubXVsdGlwbGllZCBSR0JBIGFycmF5LCBvciBhbiBpbWFnZSBidWZmZXIu
IEFsbCBmaWx0ZXIKKyAgICAgICAgcHJpbWl0aXZlIHJlc3VsdHMgd2VyZSBjb252ZXJ0ZWQgdG8g
aW1hZ2UgYnVmZmVycyBiZWZvcmUsIHdoaWNoCisgICAgICAgIGNvdWxkIGJlIGFuIHVuZWNlc3Nh
cnkgKGFuZCByZWFsbHkgY29zdGx5KSBvcGVyYXRpb24sIGlmCisgICAgICAgIGEgZmlsdGVyIGV4
cGVjdHMgaXRzIGlucHV0IGluIHRoZSBzYW1lIGZvcm1hdCBhcyB0aGUgb3V0cHV0CisgICAgICAg
IG9mIHRoZSBpbnB1dCBmaWx0ZXIgcHJpbWl0aXZlLiBUaGlzIG92ZXJoZWFkIGlzIHJlbW92ZWQg
YnkKKyAgICAgICAgdGhpcyBwYXRjaC4gQWxsIGFwcGx5KCkgbWV0aG9kcyBhcmUgdXBkYXRlZCBh
Y2NvcmRpbmcgdG8gdGhpcworICAgICAgICBuZXcgZmlsdGVyIHByaW1pdGl2ZSBpbnRlcmZhY2Uu
CisKKyAgICAgICAgRmlsdGVycyBkbyBub3QgZ2VuZXJhdGUgdGhlaXIgcmVzdWx0cyB0d2ljZSAo
b3IgbW9yZSksIHdoZW4KKyAgICAgICAgdGhlaXIgYXBwbHkoKSBjYWxsZWQgbXVsdGlwbGUgdGlt
ZXMuCisKKyAgICAgICAgVGhlIGV4aXN0aW5nIHRlc3RzIGNvdmVyIHRoaXMgZmVhdHVyZS4KKwor
ICAgICAgICAqIG1hbnVhbC10ZXN0cy9zdmctZmlsdGVyLWFuaW1hdGlvbi5zdmc6IEFkZGVkLgor
ICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVCbGVuZC5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpGRUJsZW5kOjphcHBseSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mv
ZmlsdGVycy9GRUNvbG9yTWF0cml4LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZFQ29sb3JNYXRy
aXg6OmFwcGx5KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29tcG9u
ZW50VHJhbnNmZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RkVDb21wb25lbnRUcmFuc2Zlcjo6
YXBwbHkpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDb21wb3NpdGUu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6RkVDb21wb3NpdGU6OmFwcGx5KToKKyAgICAgICAgKiBw
bGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29udm9sdmVNYXRyaXguY3BwOgorICAgICAgICAo
V2ViQ29yZTo6RkVDb252b2x2ZU1hdHJpeDo6YXBwbHkpOgorICAgICAgICAqIHBsYXRmb3JtL2dy
YXBoaWNzL2ZpbHRlcnMvRkVEaXNwbGFjZW1lbnRNYXAuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
RkVEaXNwbGFjZW1lbnRNYXA6OmFwcGx5KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9m
aWx0ZXJzL0ZFRmxvb2QuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RkVGbG9vZDo6YXBwbHkpOgor
ICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVHYXVzc2lhbkJsdXIuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6RkVHYXVzc2lhbkJsdXI6OmFwcGx5KToKKyAgICAgICAgKiBwbGF0
Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFTGlnaHRpbmcuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
RkVMaWdodGluZzo6YXBwbHkpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMv
RkVNZXJnZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGRU1lcmdlOjphcHBseSk6CisgICAgICAg
ICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRU1lcmdlLmg6CisgICAgICAgICogcGxhdGZv
cm0vZ3JhcGhpY3MvZmlsdGVycy9GRU1vcnBob2xvZ3kuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
RkVNb3JwaG9sb2d5OjphcHBseSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVy
cy9GRU9mZnNldC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGRU9mZnNldDo6YXBwbHkpOgorICAg
ICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVUaWxlLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OkZFVGlsZTo6YXBwbHkpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRl
cnMvRkVUdXJidWxlbmNlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZFVHVyYnVsZW5jZTo6YXBw
bHkpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyRWZmZWN0LmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6cmVxdWVzdGVkUmVnaW9uT2ZJbnB1
dEltYWdlRGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6OmFzSW1hZ2VCdWZm
ZXIpOgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0Ojphc1VubXVsdGlwbGllZEltYWdl
KToKKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6YXNQcmVtdWx0aXBsaWVkSW1hZ2Up
OgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0Ojpjb3B5SW1hZ2VCeXRlcyk6CisgICAg
ICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6OmNvcHlVbm11bHRpcGxpZWRJbWFnZSk6CisgICAg
ICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6OmNvcHlQcmVtdWx0aXBsaWVkSW1hZ2UpOgorICAg
ICAgICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0OjpjcmVhdGVJbWFnZUJ1ZmZlclJlc3VsdCk6Cisg
ICAgICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6OmNyZWF0ZVVubXVsdGlwbGllZEltYWdlUmVz
dWx0KToKKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6Y3JlYXRlUHJlbXVsdGlwbGll
ZEltYWdlUmVzdWx0KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRl
ckVmZmVjdC5oOgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0OjpoYXNSZXN1bHQpOgor
ICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvU291cmNlQWxwaGEuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6U291cmNlQWxwaGE6OmFwcGx5KToKKyAgICAgICAgKiBwbGF0Zm9ybS9n
cmFwaGljcy9maWx0ZXJzL1NvdXJjZUdyYXBoaWMuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U291
cmNlR3JhcGhpYzo6YXBwbHkpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMv
U291cmNlR3JhcGhpYy5oOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJTVkdSZXNvdXJjZUZp
bHRlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJTVkdSZXNvdXJjZUZpbHRlcjo6cG9z
dEFwcGx5UmVzb3VyY2UpOgorICAgICAgICAqIHN2Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0ZFSW1h
Z2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RkVJbWFnZTo6YXBwbHkpOgorCiAyMDEwLTEyLTA2
ICBQYXZlbCBGZWxkbWFuICA8cGZlbGRtYW5AY2hyb21pdW0ub3JnPgogCiAgICAgICAgIE5vdCBy
ZXZpZXdlZC4gUm9sbGluZyBvdXQgcjcyOTg4IGZvciBicmVha2luZyBpZnJhbWVzLgpkaWZmIC0t
Z2l0IGEvV2ViQ29yZS9tYW51YWwtdGVzdHMvc3ZnLWZpbHRlci1hbmltYXRpb24uc3ZnIGIvV2Vi
Q29yZS9tYW51YWwtdGVzdHMvc3ZnLWZpbHRlci1hbmltYXRpb24uc3ZnCm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAuLjViN2M5Y2MKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJDb3Jl
L21hbnVhbC10ZXN0cy9zdmctZmlsdGVyLWFuaW1hdGlvbi5zdmcKQEAgLTAsMCArMSwxMjAgQEAK
Kzw/eG1sIHZlcnNpb249IjEuMCIgc3RhbmRhbG9uZT0ibm8iPz4KKzwhRE9DVFlQRSBzdmcgUFVC
TElDICItLy9XM0MvL0RURCBTVkcgMS4xLy9FTiIgImh0dHA6Ly93d3cudzMub3JnL0dyYXBoaWNz
L1NWRy8xLjEvRFREL3N2ZzExLmR0ZCI+CisKKzwhLS0KKyAgQ29weXJpZ2h0IChDKSAyMDEwIFVu
aXZlcnNpdHkgb2YgU3plZ2VkCisgIENvcHlyaWdodCAoQykgMjAxMCBab2x0YW4gSGVyY3plZwor
ICBDb3B5cmlnaHQgKEMpIDIwMTAgR2Fib3IgTG9raQorICBBbGwgcmlnaHRzIHJlc2VydmVkLgor
CisgIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAgYXJlIG1ldDoKKyAgMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAgICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorICAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisK
KyAgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBVTklWRVJTSVRZIE9GIFNaRUdFRCBgYEFT
IElTJycgQU5EIEFOWQorICBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAgUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFVOSVZFUlNJVFkgT0YgU1pFR0VEIE9SCisgIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLAorICBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VAorICAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UKKyAgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKy0tPgorCis8c3ZnIHdpZHRoPSIxMDAl
IiBoZWlnaHQ9IjEwMCUiIHZlcnNpb249IjEuMSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIw
MDAvc3ZnIj4KKzxyZWN0IHg9IjAlIiB5PSIwJSIgd2lkdGg9IjEwMCUiIGhlaWdodD0iMTAwJSIg
ZmlsbD0iYmxhY2siIC8+CisKKzxkZWZzPgorPGZpbHRlciBpZD0iZmlsdCIgZmlsdGVyVW5pdHM9
Im9iamVjdEJvdW5kaW5nQm94IiB4PSIwIiB5PSIwIiB3aWR0aD0iMTAwJSIgaGVpZ2h0PSIxMDAl
Ij4KKyAgICA8ZmVUdXJidWxlbmNlIGlkPSJ0dXJiIiBiYXNlRnJlcXVlbmN5PSIwLjAzIiBudW1P
Y3RhdmVzPSI0IiBzZWVkPSI2NyIgcmVzdWx0PSJ0dXJiIi8+CisgICAgPGZlR2F1c3NpYW5CbHVy
IGluPSJTb3VyY2VHcmFwaGljIiBwcmltaXRpdmVVbml0cz0ib2JqZWN0Qm91bmRpbmdCb3giIGlk
PSJibHVyIiBzdGREZXZpYXRpb249IjEiIHJlc3VsdD0iYmx1ciIvPgorICAgIDxmZUNvbXBvc2l0
ZSBpbj0idHVyYiIgaW4yPSJibHVyIiBvcGVyYXRvcj0iYXJpdGhtZXRpYyIgazI9IjAuMyIgazM9
IjEiIHJlc3VsdD0iY29tcCIvPgorICAgIDxmZURpZmZ1c2VMaWdodGluZyBpbj0iY29tcCIgcHJp
bWl0aXZlVW5pdHM9Im9iamVjdEJvdW5kaW5nQm94IiBpZD0iZGlmZiIgZGlmZnVzZUNvbnN0YW50
PSIxIiBsaWdodGluZy1jb2xvcj0id2hpdGUiIHN1cmZhY2VTY2FsZT0iMTAiIHJlc3VsdD0ibGln
aHQiID4KKyAgICAgICAgPGZlU3BvdExpZ2h0IGlkPSJsaWdodCIgeD0iMCIgeT0iMzAwIiB6PSIy
MDAiIHBvaW50c0F0WD0iLTIwMCIgcG9pbnRzQXRZPSIxMDAiIHBvaW50c0F0Wj0iMCIgbGltaXRp
bmdDb25lQW5nbGU9IjkwIiBzcGVjdWxhckV4cG9uZW50PSIyMCIgLz4KKyAgICA8L2ZlRGlmZnVz
ZUxpZ2h0aW5nPgorICAgIDxmZVNwZWN1bGFyTGlnaHRpbmcgaW49ImNvbXAiIHByaW1pdGl2ZVVu
aXRzPSJvYmplY3RCb3VuZGluZ0JveCIgaWQ9ImRpZmYiIGRpZmZ1c2VDb25zdGFudD0iMSIgbGln
aHRpbmctY29sb3I9IiNBNjYxMDIiIHN1cmZhY2VTY2FsZT0iMTAiIHJlc3VsdD0iYW1iaWVudCIg
PgorICAgICAgICA8ZmVEaXN0YW50TGlnaHQgaWQ9ImxpZ2h0IiBhemltdXRoPSIwIiBlbGV2YXRp
b249IjkwIiAvPgorICAgIDwvZmVTcGVjdWxhckxpZ2h0aW5nPgorICAgICAgICA8ZmVDb21wb3Np
dGUgaW49ImxpZ2h0IiBpbjI9ImFtYmllbnQiIG9wZXJhdG9yPSJhcml0aG1ldGljIiBrMj0iMS4y
IiBrMz0iLjgiLz4KKzwvZmlsdGVyPgorPC9kZWZzPgorCis8ZyBmaWx0ZXI9InVybCgjZmlsdCki
IGZpbGw9IndoaXRlIiBzdHJva2U9ImJsYWNrIiBvbmNsaWNrPSJzdGFydCgpIj4KKyAgICA8cmVj
dCB4PSIwIiB5PSIwIiB3aWR0aD0iNDAwIiBoZWlnaHQ9IjUiIC8+CisgICAgPHJlY3QgeD0iMCIg
eT0iMCIgd2lkdGg9IjUiIGhlaWdodD0iMjAwIiAvPgorICAgIDxyZWN0IHg9IjAiIHk9IjE5NSIg
d2lkdGg9IjQwMCIgaGVpZ2h0PSI1IiAvPgorICAgIDxyZWN0IHg9IjM5NSIgeT0iMCIgd2lkdGg9
IjUiIGhlaWdodD0iMjAwIiAvPgorICAgIDx0ZXh0IGZvbnQtc2l6ZT0iMTUwIiBmb250LXdlaWdo
dD0iYm9sZCIgeD0iNDAiIHk9IjE1MCI+U1ZHPC90ZXh0PgorPC9nPgorCis8dGV4dCBpZD0iZnBz
IiB4PSIxNTAiIHk9IjI0MCIgZm9udC1zaXplPSIyMCIgZmlsbD0id2hpdGUiIHN0cm9rZT0id2hp
dGUiPmFmcHM6PC90ZXh0PgorPHRleHQgeD0iMzAiIHk9IjI2NSIgZm9udC1zaXplPSIyMCIgZm9u
dC13ZWlnaHQ9ImJvbGQiIGZpbGw9IndoaXRlIiBzdHJva2U9IndoaXRlIj5jbGljayBvbiB0aGUg
aW1hZ2UgdG8gc3RhcnQgdGhlIGFuaW1hdGlvbjwvdGV4dD4KKworPHNjcmlwdD4KKzwhW0NEQVRB
WwordmFyIGxpZ2h0X3ggPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGlnaHQnKS54OwordmFy
IGxpZ2h0X3kgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGlnaHQnKS55OwordmFyIGxpZ2h0
X3BvaW50c0F0WCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsaWdodCcpLnBvaW50c0F0WDsK
K3ZhciBsaWdodF9wb2ludHNBdFkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGlnaHQnKS5w
b2ludHNBdFk7Cit2YXIgZnBzID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2ZwcycpOworCit2
YXIgcm91bmQgPSBNYXRoLnJvdW5kCisKK3ZhciBzdGFydERhdGUgPSAwOwordmFyIGZyYW1lQ291
bnRlciA9IDA7Cit2YXIgcGhhc2UgPSAwOworZnVuY3Rpb24gYW5pbSgpIHsKKyAgICBzd2l0Y2go
cGhhc2UpIHsKKyAgICBjYXNlIDA6CisgICAgICAgIGxpZ2h0X3BvaW50c0F0WC5iYXNlVmFsICs9
IDEwOworICAgICAgICBpZiAobGlnaHRfcG9pbnRzQXRYLmJhc2VWYWwgPj0gMzgwKQorICAgICAg
ICAgICAgKytwaGFzZTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSAxOgorICAgICAgICBsaWdo
dF94LmJhc2VWYWwgKz0gMTA7CisgICAgICAgIGxpZ2h0X3BvaW50c0F0WC5iYXNlVmFsIC09IDEw
OworICAgICAgICBpZiAobGlnaHRfeC5iYXNlVmFsID49IDQ1MCkgeworICAgICAgICAgICAgKytw
aGFzZTsKKyAgICAgICAgICAgIHdhaXRDb3VudGVyID0gMDsKKyAgICAgICAgfQorICAgICAgICBi
cmVhazsKKyAgICBjYXNlIDI6CisgICAgICAgIGxpZ2h0X3kuYmFzZVZhbCAtPSA1OworICAgICAg
ICBpZiAobGlnaHRfeS5iYXNlVmFsIDw9IC0xMDApCisgICAgICAgICAgICArK3BoYXNlOworICAg
ICAgICBicmVhazsKKyAgICBjYXNlIDM6CisgICAgICAgIGxpZ2h0X3BvaW50c0F0WC5iYXNlVmFs
ICs9IDEwOworICAgICAgICBpZiAobGlnaHRfcG9pbnRzQXRYLmJhc2VWYWwgPj0gNDUwKSB7Cisg
ICAgICAgICAgICBsaWdodF94LmJhc2VWYWwgPSAwOworICAgICAgICAgICAgbGlnaHRfcG9pbnRz
QXRYLmJhc2VWYWwgPSAtMjAwOworICAgICAgICAgICAgbGlnaHRfeS5iYXNlVmFsID0gMzAwOwor
ICAgICAgICAgICAgbGlnaHRfcG9pbnRzQXRZLmJhc2VWYWwgPSAxMDA7CisgICAgICAgICAgICBw
aGFzZSA9IDA7CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAgZnJhbWVD
b3VudGVyKys7CisgICAgZnBzLnRleHRDb250ZW50ID0gImFmcHM6ICIgKyhyb3VuZChmcmFtZUNv
dW50ZXIgKiAxMDAwMDAgLyAobmV3IERhdGUoKSAtIHN0YXJ0RGF0ZSkpIC8gMTAwKTsKK30KKwor
ZnVuY3Rpb24gc3RhcnQoKSB7CisgICAgaWYgKCFzdGFydERhdGUpIHsKKyAgICAgICAgc3RhcnRE
YXRlID0gbmV3IERhdGUoKTsKKyAgICAgICAgc2V0SW50ZXJ2YWwoYW5pbSwxKTsKKyAgICB9Cit9
CisKKy8vXV0+Cis8L3NjcmlwdD4KKworPC9zdmc+CmRpZmYgLS1naXQgYS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVCbGVuZC5jcHAgYi9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2ZpbHRlcnMvRkVCbGVuZC5jcHAKaW5kZXggODliNDRlMC4uZjg2MzQ4NyAxMDA2NDQKLS0t
IGEvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQmxlbmQuY3BwCisrKyBiL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUJsZW5kLmNwcApAQCAtODgsMzAgKzg4
LDMxIEBAIHN0YXRpYyB1bnNpZ25lZCBjaGFyIGxpZ2h0ZW4odW5zaWduZWQgY2hhciBjb2xvckEs
IHVuc2lnbmVkIGNoYXIgY29sb3JCLCB1bnNpZ25lCiAKIHZvaWQgRkVCbGVuZDo6YXBwbHkoKQog
eworICAgIGlmIChoYXNSZXN1bHQoKSkKKyAgICAgICAgcmV0dXJuOwogICAgIEZpbHRlckVmZmVj
dCogaW4gPSBpbnB1dEVmZmVjdCgwKTsKICAgICBGaWx0ZXJFZmZlY3QqIGluMiA9IGlucHV0RWZm
ZWN0KDEpOwogICAgIGluLT5hcHBseSgpOwogICAgIGluMi0+YXBwbHkoKTsKLSAgICBpZiAoIWlu
LT5yZXN1bHRJbWFnZSgpIHx8ICFpbjItPnJlc3VsdEltYWdlKCkpCisgICAgaWYgKCFpbi0+aGFz
UmVzdWx0KCkgfHwgIWluMi0+aGFzUmVzdWx0KCkpCiAgICAgICAgIHJldHVybjsKIAogICAgIGlm
IChtX21vZGUgPD0gRkVCTEVORF9NT0RFX1VOS05PV04gfHwgbV9tb2RlID4gRkVCTEVORF9NT0RF
X0xJR0hURU4pCiAgICAgICAgIHJldHVybjsKIAotICAgIGlmICghZWZmZWN0Q29udGV4dCgpKQor
ICAgIEltYWdlRGF0YSogcmVzdWx0SW1hZ2UgPSBjcmVhdGVQcmVtdWx0aXBsaWVkSW1hZ2VSZXN1
bHQoKTsKKyAgICBpZiAoIXJlc3VsdEltYWdlKQogICAgICAgICByZXR1cm47CiAKICAgICBJbnRS
ZWN0IGVmZmVjdEFEcmF3aW5nUmVjdCA9IHJlcXVlc3RlZFJlZ2lvbk9mSW5wdXRJbWFnZURhdGEo
aW4tPmFic29sdXRlUGFpbnRSZWN0KCkpOwotICAgIFJlZlB0cjxJbWFnZURhdGE+IHNyY0ltYWdl
RGF0YUEgPSBpbi0+cmVzdWx0SW1hZ2UoKS0+Z2V0UHJlbXVsdGlwbGllZEltYWdlRGF0YShlZmZl
Y3RBRHJhd2luZ1JlY3QpOworICAgIFJlZlB0cjxJbWFnZURhdGE+IHNyY0ltYWdlRGF0YUEgPSBp
bi0+YXNQcmVtdWx0aXBsaWVkSW1hZ2UoZWZmZWN0QURyYXdpbmdSZWN0KTsKICAgICBCeXRlQXJy
YXkqIHNyY1BpeGVsQXJyYXlBID0gc3JjSW1hZ2VEYXRhQS0+ZGF0YSgpLT5kYXRhKCk7CiAKICAg
ICBJbnRSZWN0IGVmZmVjdEJEcmF3aW5nUmVjdCA9IHJlcXVlc3RlZFJlZ2lvbk9mSW5wdXRJbWFn
ZURhdGEoaW4yLT5hYnNvbHV0ZVBhaW50UmVjdCgpKTsKLSAgICBSZWZQdHI8SW1hZ2VEYXRhPiBz
cmNJbWFnZURhdGFCID0gaW4yLT5yZXN1bHRJbWFnZSgpLT5nZXRQcmVtdWx0aXBsaWVkSW1hZ2VE
YXRhKGVmZmVjdEJEcmF3aW5nUmVjdCk7CisgICAgUmVmUHRyPEltYWdlRGF0YT4gc3JjSW1hZ2VE
YXRhQiA9IGluMi0+YXNQcmVtdWx0aXBsaWVkSW1hZ2UoZWZmZWN0QkRyYXdpbmdSZWN0KTsKICAg
ICBCeXRlQXJyYXkqIHNyY1BpeGVsQXJyYXlCID0gc3JjSW1hZ2VEYXRhQi0+ZGF0YSgpLT5kYXRh
KCk7CiAKLSAgICBJbnRSZWN0IGltYWdlUmVjdChJbnRQb2ludCgpLCByZXN1bHRJbWFnZSgpLT5z
aXplKCkpOwotICAgIFJlZlB0cjxJbWFnZURhdGE+IGltYWdlRGF0YSA9IEltYWdlRGF0YTo6Y3Jl
YXRlKGltYWdlUmVjdC53aWR0aCgpLCBpbWFnZVJlY3QuaGVpZ2h0KCkpOwotICAgIEJ5dGVBcnJh
eSogZHN0UGl4ZWxBcnJheSA9IGltYWdlRGF0YS0+ZGF0YSgpLT5kYXRhKCk7CisgICAgQnl0ZUFy
cmF5KiBkc3RQaXhlbEFycmF5ID0gcmVzdWx0SW1hZ2UtPmRhdGEoKS0+ZGF0YSgpOwogCiAgICAg
Ly8gS2VlcCBzeW5jaHJvbml6ZWQgd2l0aCBCbGVuZE1vZGVUeXBlCiAgICAgc3RhdGljIGNvbnN0
IEJsZW5kVHlwZSBjYWxsRWZmZWN0W10gPSB7dW5rbm93biwgbm9ybWFsLCBtdWx0aXBseSwgc2Ny
ZWVuLCBkYXJrZW4sIGxpZ2h0ZW59OwpAQCAtMTMxLDggKzEzMiw2IEBAIHZvaWQgRkVCbGVuZDo6
YXBwbHkoKQogICAgICAgICB1bnNpZ25lZCBjaGFyIGFscGhhUiA9IDI1NSAtICgoMjU1IC0gYWxw
aGFBKSAqICgyNTUgLSBhbHBoYUIpKSAvIDI1NTsKICAgICAgICAgZHN0UGl4ZWxBcnJheS0+c2V0
KHBpeGVsT2Zmc2V0ICsgMywgYWxwaGFSKTsKICAgICB9Ci0KLSAgICByZXN1bHRJbWFnZSgpLT5w
dXRQcmVtdWx0aXBsaWVkSW1hZ2VEYXRhKGltYWdlRGF0YS5nZXQoKSwgaW1hZ2VSZWN0LCBJbnRQ
b2ludCgpKTsKIH0KIAogdm9pZCBGRUJsZW5kOjpkdW1wKCkKZGlmZiAtLWdpdCBhL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUNvbG9yTWF0cml4LmNwcCBiL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUNvbG9yTWF0cml4LmNwcAppbmRleCAxYzk5YjFlLi4z
ODI0NmNmIDEwMDY0NAotLS0gYS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVD
b2xvck1hdHJpeC5jcHAKKysrIGIvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZF
Q29sb3JNYXRyaXguY3BwCkBAIC0xNTAsMTkgKzE1MCwyMSBAQCB2b2lkIGVmZmVjdFR5cGUoQnl0
ZUFycmF5KiBwaXhlbEFycmF5LCBjb25zdCBWZWN0b3I8ZmxvYXQ+JiB2YWx1ZXMpCiAKIHZvaWQg
RkVDb2xvck1hdHJpeDo6YXBwbHkoKQogeworICAgIGlmIChoYXNSZXN1bHQoKSkKKyAgICAgICAg
cmV0dXJuOwogICAgIEZpbHRlckVmZmVjdCogaW4gPSBpbnB1dEVmZmVjdCgwKTsKICAgICBpbi0+
YXBwbHkoKTsKLSAgICBpZiAoIWluLT5yZXN1bHRJbWFnZSgpKQorICAgIGlmICghaW4tPmhhc1Jl
c3VsdCgpKQogICAgICAgICByZXR1cm47CiAKLSAgICBHcmFwaGljc0NvbnRleHQqIGZpbHRlckNv
bnRleHQgPSBlZmZlY3RDb250ZXh0KCk7Ci0gICAgaWYgKCFmaWx0ZXJDb250ZXh0KQorICAgIElt
YWdlQnVmZmVyKiByZXN1bHRJbWFnZSA9IGNyZWF0ZUltYWdlQnVmZmVyUmVzdWx0KCk7CisgICAg
aWYgKCFyZXN1bHRJbWFnZSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgZmlsdGVyQ29udGV4dC0+
ZHJhd0ltYWdlQnVmZmVyKGluLT5yZXN1bHRJbWFnZSgpLCBDb2xvclNwYWNlRGV2aWNlUkdCLCBk
cmF3aW5nUmVnaW9uT2ZJbnB1dEltYWdlKGluLT5hYnNvbHV0ZVBhaW50UmVjdCgpKSk7CisgICAg
cmVzdWx0SW1hZ2UtPmNvbnRleHQoKS0+ZHJhd0ltYWdlQnVmZmVyKGluLT5hc0ltYWdlQnVmZmVy
KCksIENvbG9yU3BhY2VEZXZpY2VSR0IsIGRyYXdpbmdSZWdpb25PZklucHV0SW1hZ2UoaW4tPmFi
c29sdXRlUGFpbnRSZWN0KCkpKTsKIAotICAgIEludFJlY3QgaW1hZ2VSZWN0KEludFBvaW50KCks
IHJlc3VsdEltYWdlKCktPnNpemUoKSk7Ci0gICAgUmVmUHRyPEltYWdlRGF0YT4gaW1hZ2VEYXRh
ID0gcmVzdWx0SW1hZ2UoKS0+Z2V0VW5tdWx0aXBsaWVkSW1hZ2VEYXRhKGltYWdlUmVjdCk7Cisg
ICAgSW50UmVjdCBpbWFnZVJlY3QoSW50UG9pbnQoKSwgYWJzb2x1dGVQYWludFJlY3QoKS5zaXpl
KCkpOworICAgIFJlZlB0cjxJbWFnZURhdGE+IGltYWdlRGF0YSA9IHJlc3VsdEltYWdlLT5nZXRV
bm11bHRpcGxpZWRJbWFnZURhdGEoaW1hZ2VSZWN0KTsKICAgICBCeXRlQXJyYXkqIHBpeGVsQXJy
YXkgPSBpbWFnZURhdGEtPmRhdGEoKS0+ZGF0YSgpOwogCiAgICAgc3dpdGNoIChtX3R5cGUpIHsK
QEAgLTE4Myw3ICsxODUsNyBAQCB2b2lkIEZFQ29sb3JNYXRyaXg6OmFwcGx5KCkKICAgICAgICAg
ICAgIGJyZWFrOwogICAgIH0KIAotICAgIHJlc3VsdEltYWdlKCktPnB1dFVubXVsdGlwbGllZElt
YWdlRGF0YShpbWFnZURhdGEuZ2V0KCksIGltYWdlUmVjdCwgSW50UG9pbnQoKSk7CisgICAgcmVz
dWx0SW1hZ2UtPnB1dFVubXVsdGlwbGllZEltYWdlRGF0YShpbWFnZURhdGEuZ2V0KCksIGltYWdl
UmVjdCwgSW50UG9pbnQoKSk7CiB9CiAKIHZvaWQgRkVDb2xvck1hdHJpeDo6ZHVtcCgpCmRpZmYg
LS1naXQgYS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDb21wb25lbnRUcmFu
c2Zlci5jcHAgYi9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDb21wb25lbnRU
cmFuc2Zlci5jcHAKaW5kZXggY2ZhYjUwYi4uZjhmNjUxYyAxMDA2NDQKLS0tIGEvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29tcG9uZW50VHJhbnNmZXIuY3BwCisrKyBiL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUNvbXBvbmVudFRyYW5zZmVyLmNwcApA
QCAtMTQ5LDEyICsxNDksMTUgQEAgc3RhdGljIHZvaWQgZ2FtbWEodW5zaWduZWQgY2hhciogdmFs
dWVzLCBjb25zdCBDb21wb25lbnRUcmFuc2ZlckZ1bmN0aW9uJiB0cmFuc2YKIAogdm9pZCBGRUNv
bXBvbmVudFRyYW5zZmVyOjphcHBseSgpCiB7CisgICAgaWYgKGhhc1Jlc3VsdCgpKQorICAgICAg
ICByZXR1cm47CiAgICAgRmlsdGVyRWZmZWN0KiBpbiA9IGlucHV0RWZmZWN0KDApOwogICAgIGlu
LT5hcHBseSgpOwotICAgIGlmICghaW4tPnJlc3VsdEltYWdlKCkpCisgICAgaWYgKCFpbi0+aGFz
UmVzdWx0KCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIGlmICghZWZmZWN0Q29udGV4dCgpKQor
ICAgIEltYWdlRGF0YSogaW1hZ2VEYXRhID0gY3JlYXRlVW5tdWx0aXBsaWVkSW1hZ2VSZXN1bHQo
KTsKKyAgICBpZiAoIWltYWdlRGF0YSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgdW5zaWduZWQg
Y2hhciByVmFsdWVzWzI1Nl0sIGdWYWx1ZXNbMjU2XSwgYlZhbHVlc1syNTZdLCBhVmFsdWVzWzI1
Nl07CkBAIC0xNjgsNyArMTcxLDcgQEAgdm9pZCBGRUNvbXBvbmVudFRyYW5zZmVyOjphcHBseSgp
CiAgICAgICAgICgqY2FsbEVmZmVjdFt0cmFuc2ZlckZ1bmN0aW9uW2NoYW5uZWxdLnR5cGVdKSh0
YWJsZXNbY2hhbm5lbF0sIHRyYW5zZmVyRnVuY3Rpb25bY2hhbm5lbF0pOwogCiAgICAgSW50UmVj
dCBkcmF3aW5nUmVjdCA9IHJlcXVlc3RlZFJlZ2lvbk9mSW5wdXRJbWFnZURhdGEoaW4tPmFic29s
dXRlUGFpbnRSZWN0KCkpOwotICAgIFJlZlB0cjxJbWFnZURhdGE+IGltYWdlRGF0YSA9IGluLT5y
ZXN1bHRJbWFnZSgpLT5nZXRVbm11bHRpcGxpZWRJbWFnZURhdGEoZHJhd2luZ1JlY3QpOworICAg
IGluLT5jb3B5VW5tdWx0aXBsaWVkSW1hZ2UoaW1hZ2VEYXRhLCBkcmF3aW5nUmVjdCk7CiAgICAg
Qnl0ZUFycmF5KiBwaXhlbEFycmF5ID0gaW1hZ2VEYXRhLT5kYXRhKCktPmRhdGEoKTsKIAogICAg
IHVuc2lnbmVkIHBpeGVsQXJyYXlMZW5ndGggPSBwaXhlbEFycmF5LT5sZW5ndGgoKTsKQEAgLTE3
OCw4ICsxODEsNiBAQCB2b2lkIEZFQ29tcG9uZW50VHJhbnNmZXI6OmFwcGx5KCkKICAgICAgICAg
ICAgIHBpeGVsQXJyYXktPnNldChwaXhlbE9mZnNldCArIGNoYW5uZWwsIHRhYmxlc1tjaGFubmVs
XVtjXSk7CiAgICAgICAgIH0KICAgICB9Ci0KLSAgICByZXN1bHRJbWFnZSgpLT5wdXRVbm11bHRp
cGxpZWRJbWFnZURhdGEoaW1hZ2VEYXRhLmdldCgpLCBJbnRSZWN0KEludFBvaW50KCksIHJlc3Vs
dEltYWdlKCktPnNpemUoKSksIEludFBvaW50KCkpOwogfQogCiB2b2lkIEZFQ29tcG9uZW50VHJh
bnNmZXI6OmR1bXAoKQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0
ZXJzL0ZFQ29tcG9zaXRlLmNwcCBiL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9G
RUNvbXBvc2l0ZS5jcHAKaW5kZXggZDI3MzIxZi4uMDEwY2VlZiAxMDA2NDQKLS0tIGEvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29tcG9zaXRlLmNwcAorKysgYi9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDb21wb3NpdGUuY3BwCkBAIC0xMzcsNTIgKzEz
Nyw1NSBAQCB2b2lkIEZFQ29tcG9zaXRlOjpkZXRlcm1pbmVBYnNvbHV0ZVBhaW50UmVjdCgpCiAK
IHZvaWQgRkVDb21wb3NpdGU6OmFwcGx5KCkKIHsKKyAgICBpZiAoaGFzUmVzdWx0KCkpCisgICAg
ICAgIHJldHVybjsKICAgICBGaWx0ZXJFZmZlY3QqIGluID0gaW5wdXRFZmZlY3QoMCk7CiAgICAg
RmlsdGVyRWZmZWN0KiBpbjIgPSBpbnB1dEVmZmVjdCgxKTsKICAgICBpbi0+YXBwbHkoKTsKICAg
ICBpbjItPmFwcGx5KCk7Ci0gICAgaWYgKCFpbi0+cmVzdWx0SW1hZ2UoKSB8fCAhaW4yLT5yZXN1
bHRJbWFnZSgpKQorICAgIGlmICghaW4tPmhhc1Jlc3VsdCgpIHx8ICFpbjItPmhhc1Jlc3VsdCgp
KQogICAgICAgICByZXR1cm47CiAKLSAgICBHcmFwaGljc0NvbnRleHQqIGZpbHRlckNvbnRleHQg
PSBlZmZlY3RDb250ZXh0KCk7Ci0gICAgaWYgKCFmaWx0ZXJDb250ZXh0KQorICAgIEltYWdlQnVm
ZmVyKiByZXN1bHRJbWFnZSA9IGNyZWF0ZUltYWdlQnVmZmVyUmVzdWx0KCk7CisgICAgaWYgKCFy
ZXN1bHRJbWFnZSkKICAgICAgICAgcmV0dXJuOworICAgIEdyYXBoaWNzQ29udGV4dCogZmlsdGVy
Q29udGV4dCA9IHJlc3VsdEltYWdlLT5jb250ZXh0KCk7CiAKICAgICBGbG9hdFJlY3Qgc3JjUmVj
dCA9IEZsb2F0UmVjdCgwLCAwLCAtMSwgLTEpOwogICAgIHN3aXRjaCAobV90eXBlKSB7CiAgICAg
Y2FzZSBGRUNPTVBPU0lURV9PUEVSQVRPUl9PVkVSOgotICAgICAgICBmaWx0ZXJDb250ZXh0LT5k
cmF3SW1hZ2VCdWZmZXIoaW4yLT5yZXN1bHRJbWFnZSgpLCBDb2xvclNwYWNlRGV2aWNlUkdCLCBk
cmF3aW5nUmVnaW9uT2ZJbnB1dEltYWdlKGluMi0+YWJzb2x1dGVQYWludFJlY3QoKSkpOwotICAg
ICAgICBmaWx0ZXJDb250ZXh0LT5kcmF3SW1hZ2VCdWZmZXIoaW4tPnJlc3VsdEltYWdlKCksIENv
bG9yU3BhY2VEZXZpY2VSR0IsIGRyYXdpbmdSZWdpb25PZklucHV0SW1hZ2UoaW4tPmFic29sdXRl
UGFpbnRSZWN0KCkpKTsKKyAgICAgICAgZmlsdGVyQ29udGV4dC0+ZHJhd0ltYWdlQnVmZmVyKGlu
Mi0+YXNJbWFnZUJ1ZmZlcigpLCBDb2xvclNwYWNlRGV2aWNlUkdCLCBkcmF3aW5nUmVnaW9uT2ZJ
bnB1dEltYWdlKGluMi0+YWJzb2x1dGVQYWludFJlY3QoKSkpOworICAgICAgICBmaWx0ZXJDb250
ZXh0LT5kcmF3SW1hZ2VCdWZmZXIoaW4tPmFzSW1hZ2VCdWZmZXIoKSwgQ29sb3JTcGFjZURldmlj
ZVJHQiwgZHJhd2luZ1JlZ2lvbk9mSW5wdXRJbWFnZShpbi0+YWJzb2x1dGVQYWludFJlY3QoKSkp
OwogICAgICAgICBicmVhazsKICAgICBjYXNlIEZFQ09NUE9TSVRFX09QRVJBVE9SX0lOOgogICAg
ICAgICBmaWx0ZXJDb250ZXh0LT5zYXZlKCk7Ci0gICAgICAgIGZpbHRlckNvbnRleHQtPmNsaXBU
b0ltYWdlQnVmZmVyKGluMi0+cmVzdWx0SW1hZ2UoKSwgZHJhd2luZ1JlZ2lvbk9mSW5wdXRJbWFn
ZShpbjItPmFic29sdXRlUGFpbnRSZWN0KCkpKTsKLSAgICAgICAgZmlsdGVyQ29udGV4dC0+ZHJh
d0ltYWdlQnVmZmVyKGluLT5yZXN1bHRJbWFnZSgpLCBDb2xvclNwYWNlRGV2aWNlUkdCLCBkcmF3
aW5nUmVnaW9uT2ZJbnB1dEltYWdlKGluLT5hYnNvbHV0ZVBhaW50UmVjdCgpKSk7CisgICAgICAg
IGZpbHRlckNvbnRleHQtPmNsaXBUb0ltYWdlQnVmZmVyKGluMi0+YXNJbWFnZUJ1ZmZlcigpLCBk
cmF3aW5nUmVnaW9uT2ZJbnB1dEltYWdlKGluMi0+YWJzb2x1dGVQYWludFJlY3QoKSkpOworICAg
ICAgICBmaWx0ZXJDb250ZXh0LT5kcmF3SW1hZ2VCdWZmZXIoaW4tPmFzSW1hZ2VCdWZmZXIoKSwg
Q29sb3JTcGFjZURldmljZVJHQiwgZHJhd2luZ1JlZ2lvbk9mSW5wdXRJbWFnZShpbi0+YWJzb2x1
dGVQYWludFJlY3QoKSkpOwogICAgICAgICBmaWx0ZXJDb250ZXh0LT5yZXN0b3JlKCk7CiAgICAg
ICAgIGJyZWFrOwogICAgIGNhc2UgRkVDT01QT1NJVEVfT1BFUkFUT1JfT1VUOgotICAgICAgICBm
aWx0ZXJDb250ZXh0LT5kcmF3SW1hZ2VCdWZmZXIoaW4tPnJlc3VsdEltYWdlKCksIENvbG9yU3Bh
Y2VEZXZpY2VSR0IsIGRyYXdpbmdSZWdpb25PZklucHV0SW1hZ2UoaW4tPmFic29sdXRlUGFpbnRS
ZWN0KCkpKTsKLSAgICAgICAgZmlsdGVyQ29udGV4dC0+ZHJhd0ltYWdlQnVmZmVyKGluMi0+cmVz
dWx0SW1hZ2UoKSwgQ29sb3JTcGFjZURldmljZVJHQiwgZHJhd2luZ1JlZ2lvbk9mSW5wdXRJbWFn
ZShpbjItPmFic29sdXRlUGFpbnRSZWN0KCkpLCBzcmNSZWN0LCBDb21wb3NpdGVEZXN0aW5hdGlv
bk91dCk7CisgICAgICAgIGZpbHRlckNvbnRleHQtPmRyYXdJbWFnZUJ1ZmZlcihpbi0+YXNJbWFn
ZUJ1ZmZlcigpLCBDb2xvclNwYWNlRGV2aWNlUkdCLCBkcmF3aW5nUmVnaW9uT2ZJbnB1dEltYWdl
KGluLT5hYnNvbHV0ZVBhaW50UmVjdCgpKSk7CisgICAgICAgIGZpbHRlckNvbnRleHQtPmRyYXdJ
bWFnZUJ1ZmZlcihpbjItPmFzSW1hZ2VCdWZmZXIoKSwgQ29sb3JTcGFjZURldmljZVJHQiwgZHJh
d2luZ1JlZ2lvbk9mSW5wdXRJbWFnZShpbjItPmFic29sdXRlUGFpbnRSZWN0KCkpLCBzcmNSZWN0
LCBDb21wb3NpdGVEZXN0aW5hdGlvbk91dCk7CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgRkVD
T01QT1NJVEVfT1BFUkFUT1JfQVRPUDoKLSAgICAgICAgZmlsdGVyQ29udGV4dC0+ZHJhd0ltYWdl
QnVmZmVyKGluMi0+cmVzdWx0SW1hZ2UoKSwgQ29sb3JTcGFjZURldmljZVJHQiwgZHJhd2luZ1Jl
Z2lvbk9mSW5wdXRJbWFnZShpbjItPmFic29sdXRlUGFpbnRSZWN0KCkpKTsKLSAgICAgICAgZmls
dGVyQ29udGV4dC0+ZHJhd0ltYWdlQnVmZmVyKGluLT5yZXN1bHRJbWFnZSgpLCBDb2xvclNwYWNl
RGV2aWNlUkdCLCBkcmF3aW5nUmVnaW9uT2ZJbnB1dEltYWdlKGluLT5hYnNvbHV0ZVBhaW50UmVj
dCgpKSwgc3JjUmVjdCwgQ29tcG9zaXRlU291cmNlQXRvcCk7CisgICAgICAgIGZpbHRlckNvbnRl
eHQtPmRyYXdJbWFnZUJ1ZmZlcihpbjItPmFzSW1hZ2VCdWZmZXIoKSwgQ29sb3JTcGFjZURldmlj
ZVJHQiwgZHJhd2luZ1JlZ2lvbk9mSW5wdXRJbWFnZShpbjItPmFic29sdXRlUGFpbnRSZWN0KCkp
KTsKKyAgICAgICAgZmlsdGVyQ29udGV4dC0+ZHJhd0ltYWdlQnVmZmVyKGluLT5hc0ltYWdlQnVm
ZmVyKCksIENvbG9yU3BhY2VEZXZpY2VSR0IsIGRyYXdpbmdSZWdpb25PZklucHV0SW1hZ2UoaW4t
PmFic29sdXRlUGFpbnRSZWN0KCkpLCBzcmNSZWN0LCBDb21wb3NpdGVTb3VyY2VBdG9wKTsKICAg
ICAgICAgYnJlYWs7CiAgICAgY2FzZSBGRUNPTVBPU0lURV9PUEVSQVRPUl9YT1I6Ci0gICAgICAg
IGZpbHRlckNvbnRleHQtPmRyYXdJbWFnZUJ1ZmZlcihpbjItPnJlc3VsdEltYWdlKCksIENvbG9y
U3BhY2VEZXZpY2VSR0IsIGRyYXdpbmdSZWdpb25PZklucHV0SW1hZ2UoaW4yLT5hYnNvbHV0ZVBh
aW50UmVjdCgpKSk7Ci0gICAgICAgIGZpbHRlckNvbnRleHQtPmRyYXdJbWFnZUJ1ZmZlcihpbi0+
cmVzdWx0SW1hZ2UoKSwgQ29sb3JTcGFjZURldmljZVJHQiwgZHJhd2luZ1JlZ2lvbk9mSW5wdXRJ
bWFnZShpbi0+YWJzb2x1dGVQYWludFJlY3QoKSksIHNyY1JlY3QsIENvbXBvc2l0ZVhPUik7Cisg
ICAgICAgIGZpbHRlckNvbnRleHQtPmRyYXdJbWFnZUJ1ZmZlcihpbjItPmFzSW1hZ2VCdWZmZXIo
KSwgQ29sb3JTcGFjZURldmljZVJHQiwgZHJhd2luZ1JlZ2lvbk9mSW5wdXRJbWFnZShpbjItPmFi
c29sdXRlUGFpbnRSZWN0KCkpKTsKKyAgICAgICAgZmlsdGVyQ29udGV4dC0+ZHJhd0ltYWdlQnVm
ZmVyKGluLT5hc0ltYWdlQnVmZmVyKCksIENvbG9yU3BhY2VEZXZpY2VSR0IsIGRyYXdpbmdSZWdp
b25PZklucHV0SW1hZ2UoaW4tPmFic29sdXRlUGFpbnRSZWN0KCkpLCBzcmNSZWN0LCBDb21wb3Np
dGVYT1IpOwogICAgICAgICBicmVhazsKICAgICBjYXNlIEZFQ09NUE9TSVRFX09QRVJBVE9SX0FS
SVRITUVUSUM6IHsKICAgICAgICAgSW50UmVjdCBlZmZlY3RBRHJhd2luZ1JlY3QgPSByZXF1ZXN0
ZWRSZWdpb25PZklucHV0SW1hZ2VEYXRhKGluLT5hYnNvbHV0ZVBhaW50UmVjdCgpKTsKLSAgICAg
ICAgUmVmUHRyPEltYWdlRGF0YT4gc3JjSW1hZ2VEYXRhID0gaW4tPnJlc3VsdEltYWdlKCktPmdl
dFByZW11bHRpcGxpZWRJbWFnZURhdGEoZWZmZWN0QURyYXdpbmdSZWN0KTsKKyAgICAgICAgUmVm
UHRyPEltYWdlRGF0YT4gc3JjSW1hZ2VEYXRhID0gaW4tPmFzSW1hZ2VCdWZmZXIoKS0+Z2V0UHJl
bXVsdGlwbGllZEltYWdlRGF0YShlZmZlY3RBRHJhd2luZ1JlY3QpOwogICAgICAgICBCeXRlQXJy
YXkqIHNyY1BpeGVsQXJyYXlBID0gc3JjSW1hZ2VEYXRhLT5kYXRhKCktPmRhdGEoKTsKIAogICAg
ICAgICBJbnRSZWN0IGVmZmVjdEJEcmF3aW5nUmVjdCA9IHJlcXVlc3RlZFJlZ2lvbk9mSW5wdXRJ
bWFnZURhdGEoaW4yLT5hYnNvbHV0ZVBhaW50UmVjdCgpKTsKLSAgICAgICAgUmVmUHRyPEltYWdl
RGF0YT4gaW1hZ2VEYXRhID0gaW4yLT5yZXN1bHRJbWFnZSgpLT5nZXRQcmVtdWx0aXBsaWVkSW1h
Z2VEYXRhKGVmZmVjdEJEcmF3aW5nUmVjdCk7CisgICAgICAgIFJlZlB0cjxJbWFnZURhdGE+IGlt
YWdlRGF0YSA9IGluMi0+YXNJbWFnZUJ1ZmZlcigpLT5nZXRQcmVtdWx0aXBsaWVkSW1hZ2VEYXRh
KGVmZmVjdEJEcmF3aW5nUmVjdCk7CiAgICAgICAgIEJ5dGVBcnJheSogc3JjUGl4ZWxBcnJheUIg
PSBpbWFnZURhdGEtPmRhdGEoKS0+ZGF0YSgpOwogCiAgICAgICAgIGFyaXRobWV0aWMoc3JjUGl4
ZWxBcnJheUEsIHNyY1BpeGVsQXJyYXlCLCBtX2sxLCBtX2syLCBtX2szLCBtX2s0KTsKLSAgICAg
ICAgcmVzdWx0SW1hZ2UoKS0+cHV0UHJlbXVsdGlwbGllZEltYWdlRGF0YShpbWFnZURhdGEuZ2V0
KCksIEludFJlY3QoSW50UG9pbnQoKSwgcmVzdWx0SW1hZ2UoKS0+c2l6ZSgpKSwgSW50UG9pbnQo
KSk7CisgICAgICAgIHJlc3VsdEltYWdlLT5wdXRQcmVtdWx0aXBsaWVkSW1hZ2VEYXRhKGltYWdl
RGF0YS5nZXQoKSwgSW50UmVjdChJbnRQb2ludCgpLCByZXN1bHRJbWFnZS0+c2l6ZSgpKSwgSW50
UG9pbnQoKSk7CiAgICAgICAgIH0KICAgICAgICAgYnJlYWs7CiAgICAgZGVmYXVsdDoKZGlmZiAt
LWdpdCBhL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUNvbnZvbHZlTWF0cml4
LmNwcCBiL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUNvbnZvbHZlTWF0cml4
LmNwcAppbmRleCAxOThkNzY0Li5kMWY5YzdiIDEwMDY0NAotLS0gYS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2ZpbHRlcnMvRkVDb252b2x2ZU1hdHJpeC5jcHAKKysrIGIvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29udm9sdmVNYXRyaXguY3BwCkBAIC0zNzIsMzUgKzM3
Miw0MCBAQCBBTFdBWVNfSU5MSU5FIHZvaWQgRkVDb252b2x2ZU1hdHJpeDo6c2V0T3V0ZXJQaXhl
bHMoUGFpbnRpbmdEYXRhJiBwYWludGluZ0RhdGEsCiAKIHZvaWQgRkVDb252b2x2ZU1hdHJpeDo6
YXBwbHkoKQogeworICAgIGlmIChoYXNSZXN1bHQoKSkKKyAgICAgICAgcmV0dXJuOwogICAgIEZp
bHRlckVmZmVjdCogaW4gPSBpbnB1dEVmZmVjdCgwKTsKICAgICBpbi0+YXBwbHkoKTsKLSAgICBp
ZiAoIWluLT5yZXN1bHRJbWFnZSgpKQorICAgIGlmICghaW4tPmhhc1Jlc3VsdCgpKQogICAgICAg
ICByZXR1cm47CiAKLSAgICBpZiAoIWVmZmVjdENvbnRleHQoKSkKKyAgICBJbWFnZURhdGEqIHJl
c3VsdEltYWdlOworICAgIGlmIChtX3ByZXNlcnZlQWxwaGEpCisgICAgICAgIHJlc3VsdEltYWdl
ID0gY3JlYXRlVW5tdWx0aXBsaWVkSW1hZ2VSZXN1bHQoKTsKKyAgICBlbHNlCisgICAgICAgIHJl
c3VsdEltYWdlID0gY3JlYXRlUHJlbXVsdGlwbGllZEltYWdlUmVzdWx0KCk7CisgICAgaWYgKCFy
ZXN1bHRJbWFnZSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgSW50UmVjdCBpbWFnZVJlY3QoSW50
UG9pbnQoKSwgcmVzdWx0SW1hZ2UoKS0+c2l6ZSgpKTsKICAgICBJbnRSZWN0IGVmZmVjdERyYXdp
bmdSZWN0ID0gcmVxdWVzdGVkUmVnaW9uT2ZJbnB1dEltYWdlRGF0YShpbi0+YWJzb2x1dGVQYWlu
dFJlY3QoKSk7CiAKICAgICBSZWZQdHI8Q2FudmFzUGl4ZWxBcnJheT4gc3JjUGl4ZWxBcnJheTsK
ICAgICBpZiAobV9wcmVzZXJ2ZUFscGhhKQotICAgICAgICBzcmNQaXhlbEFycmF5ID0gaW4tPnJl
c3VsdEltYWdlKCktPmdldFVubXVsdGlwbGllZEltYWdlRGF0YShlZmZlY3REcmF3aW5nUmVjdCkt
PmRhdGEoKTsKKyAgICAgICAgc3JjUGl4ZWxBcnJheSA9IGluLT5hc1VubXVsdGlwbGllZEltYWdl
KGVmZmVjdERyYXdpbmdSZWN0KS0+ZGF0YSgpOwogICAgIGVsc2UKLSAgICAgICAgc3JjUGl4ZWxB
cnJheSA9IGluLT5yZXN1bHRJbWFnZSgpLT5nZXRQcmVtdWx0aXBsaWVkSW1hZ2VEYXRhKGVmZmVj
dERyYXdpbmdSZWN0KS0+ZGF0YSgpOwotCi0gICAgUmVmUHRyPEltYWdlRGF0YT4gaW1hZ2VEYXRh
ID0gSW1hZ2VEYXRhOjpjcmVhdGUoaW1hZ2VSZWN0LndpZHRoKCksIGltYWdlUmVjdC5oZWlnaHQo
KSk7CisgICAgICAgIHNyY1BpeGVsQXJyYXkgPSBpbi0+YXNQcmVtdWx0aXBsaWVkSW1hZ2UoZWZm
ZWN0RHJhd2luZ1JlY3QpLT5kYXRhKCk7CiAKKyAgICBJbnRTaXplIHBhaW50U2l6ZSA9IGFic29s
dXRlUGFpbnRSZWN0KCkuc2l6ZSgpOwogICAgIFBhaW50aW5nRGF0YSBwYWludGluZ0RhdGE7CiAg
ICAgcGFpbnRpbmdEYXRhLnNyY1BpeGVsQXJyYXkgPSBzcmNQaXhlbEFycmF5LmdldCgpOwotICAg
IHBhaW50aW5nRGF0YS5kc3RQaXhlbEFycmF5ID0gaW1hZ2VEYXRhLT5kYXRhKCk7Ci0gICAgcGFp
bnRpbmdEYXRhLndpZHRoID0gaW1hZ2VSZWN0LndpZHRoKCk7Ci0gICAgcGFpbnRpbmdEYXRhLmhl
aWdodCA9IGltYWdlUmVjdC5oZWlnaHQoKTsKKyAgICBwYWludGluZ0RhdGEuZHN0UGl4ZWxBcnJh
eSA9IHJlc3VsdEltYWdlLT5kYXRhKCk7CisgICAgcGFpbnRpbmdEYXRhLndpZHRoID0gcGFpbnRT
aXplLndpZHRoKCk7CisgICAgcGFpbnRpbmdEYXRhLmhlaWdodCA9IHBhaW50U2l6ZS5oZWlnaHQo
KTsKICAgICBwYWludGluZ0RhdGEuYmlhcyA9IG1fYmlhcyAqIDI1NTsKIAogICAgIC8vIERyYXdp
bmcgZnVsbHkgY292ZXJlZCBwaXhlbHMKLSAgICBpbnQgY2xpcFJpZ2h0ID0gaW1hZ2VSZWN0Lndp
ZHRoKCkgLSBtX2tlcm5lbFNpemUud2lkdGgoKTsKLSAgICBpbnQgY2xpcEJvdHRvbSA9IGltYWdl
UmVjdC5oZWlnaHQoKSAtIG1fa2VybmVsU2l6ZS5oZWlnaHQoKTsKKyAgICBpbnQgY2xpcFJpZ2h0
ID0gcGFpbnRTaXplLndpZHRoKCkgLSBtX2tlcm5lbFNpemUud2lkdGgoKTsKKyAgICBpbnQgY2xp
cEJvdHRvbSA9IHBhaW50U2l6ZS5oZWlnaHQoKSAtIG1fa2VybmVsU2l6ZS5oZWlnaHQoKTsKIAog
ICAgIGlmIChjbGlwUmlnaHQgPj0gMCAmJiBjbGlwQm90dG9tID49IDApIHsKICAgICAgICAgc2V0
SW50ZXJpb3JQaXhlbHMocGFpbnRpbmdEYXRhLCBjbGlwUmlnaHQsIGNsaXBCb3R0b20pOwpAQCAt
NDA4LDIyICs0MTMsMTcgQEAgdm9pZCBGRUNvbnZvbHZlTWF0cml4OjphcHBseSgpCiAgICAgICAg
IGNsaXBSaWdodCArPSBtX3RhcmdldE9mZnNldC54KCkgKyAxOwogICAgICAgICBjbGlwQm90dG9t
ICs9IG1fdGFyZ2V0T2Zmc2V0LnkoKSArIDE7CiAgICAgICAgIGlmIChtX3RhcmdldE9mZnNldC55
KCkgPiAwKQotICAgICAgICAgICAgc2V0T3V0ZXJQaXhlbHMocGFpbnRpbmdEYXRhLCAwLCAwLCBp
bWFnZVJlY3Qud2lkdGgoKSwgbV90YXJnZXRPZmZzZXQueSgpKTsKLSAgICAgICAgaWYgKGNsaXBC
b3R0b20gPCBpbWFnZVJlY3QuaGVpZ2h0KCkpCi0gICAgICAgICAgICBzZXRPdXRlclBpeGVscyhw
YWludGluZ0RhdGEsIDAsIGNsaXBCb3R0b20sIGltYWdlUmVjdC53aWR0aCgpLCBpbWFnZVJlY3Qu
aGVpZ2h0KCkpOworICAgICAgICAgICAgc2V0T3V0ZXJQaXhlbHMocGFpbnRpbmdEYXRhLCAwLCAw
LCBwYWludFNpemUud2lkdGgoKSwgbV90YXJnZXRPZmZzZXQueSgpKTsKKyAgICAgICAgaWYgKGNs
aXBCb3R0b20gPCBwYWludFNpemUuaGVpZ2h0KCkpCisgICAgICAgICAgICBzZXRPdXRlclBpeGVs
cyhwYWludGluZ0RhdGEsIDAsIGNsaXBCb3R0b20sIHBhaW50U2l6ZS53aWR0aCgpLCBwYWludFNp
emUuaGVpZ2h0KCkpOwogICAgICAgICBpZiAobV90YXJnZXRPZmZzZXQueCgpID4gMCkKICAgICAg
ICAgICAgIHNldE91dGVyUGl4ZWxzKHBhaW50aW5nRGF0YSwgMCwgbV90YXJnZXRPZmZzZXQueSgp
LCBtX3RhcmdldE9mZnNldC54KCksIGNsaXBCb3R0b20pOwotICAgICAgICBpZiAoY2xpcFJpZ2h0
IDwgaW1hZ2VSZWN0LndpZHRoKCkpCi0gICAgICAgICAgICBzZXRPdXRlclBpeGVscyhwYWludGlu
Z0RhdGEsIGNsaXBSaWdodCwgbV90YXJnZXRPZmZzZXQueSgpLCBpbWFnZVJlY3Qud2lkdGgoKSwg
Y2xpcEJvdHRvbSk7CisgICAgICAgIGlmIChjbGlwUmlnaHQgPCBwYWludFNpemUud2lkdGgoKSkK
KyAgICAgICAgICAgIHNldE91dGVyUGl4ZWxzKHBhaW50aW5nRGF0YSwgY2xpcFJpZ2h0LCBtX3Rh
cmdldE9mZnNldC55KCksIHBhaW50U2l6ZS53aWR0aCgpLCBjbGlwQm90dG9tKTsKICAgICB9IGVs
c2UgewogICAgICAgICAvLyBSYXJlIHNpdHVhdGlvbiwgbm90IG9wdGltaXppZWQgZm9yIHNwZWVk
Ci0gICAgICAgIHNldE91dGVyUGl4ZWxzKHBhaW50aW5nRGF0YSwgMCwgMCwgaW1hZ2VSZWN0Lndp
ZHRoKCksIGltYWdlUmVjdC5oZWlnaHQoKSk7CisgICAgICAgIHNldE91dGVyUGl4ZWxzKHBhaW50
aW5nRGF0YSwgMCwgMCwgcGFpbnRTaXplLndpZHRoKCksIHBhaW50U2l6ZS5oZWlnaHQoKSk7CiAg
ICAgfQotCi0gICAgaWYgKG1fcHJlc2VydmVBbHBoYSkKLSAgICAgICAgcmVzdWx0SW1hZ2UoKS0+
cHV0VW5tdWx0aXBsaWVkSW1hZ2VEYXRhKGltYWdlRGF0YS5nZXQoKSwgaW1hZ2VSZWN0LCBJbnRQ
b2ludCgpKTsKLSAgICBlbHNlCi0gICAgICAgIHJlc3VsdEltYWdlKCktPnB1dFByZW11bHRpcGxp
ZWRJbWFnZURhdGEoaW1hZ2VEYXRhLmdldCgpLCBpbWFnZVJlY3QsIEludFBvaW50KCkpOwogfQog
CiB2b2lkIEZFQ29udm9sdmVNYXRyaXg6OmR1bXAoKQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFRGlzcGxhY2VtZW50TWFwLmNwcCBiL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRURpc3BsYWNlbWVudE1hcC5jcHAKaW5kZXggNTUzMjFl
Ni4uOTMyMzljNCAxMDA2NDQKLS0tIGEvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJz
L0ZFRGlzcGxhY2VtZW50TWFwLmNwcAorKysgYi9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Zp
bHRlcnMvRkVEaXNwbGFjZW1lbnRNYXAuY3BwCkBAIC03OCw1NyArNzgsNTcgQEAgdm9pZCBGRURp
c3BsYWNlbWVudE1hcDo6c2V0U2NhbGUoZmxvYXQgc2NhbGUpCiAKIHZvaWQgRkVEaXNwbGFjZW1l
bnRNYXA6OmFwcGx5KCkKIHsKKyAgICBpZiAoaGFzUmVzdWx0KCkpCisgICAgICAgIHJldHVybjsK
ICAgICBGaWx0ZXJFZmZlY3QqIGluID0gaW5wdXRFZmZlY3QoMCk7CiAgICAgRmlsdGVyRWZmZWN0
KiBpbjIgPSBpbnB1dEVmZmVjdCgxKTsKICAgICBpbi0+YXBwbHkoKTsKICAgICBpbjItPmFwcGx5
KCk7Ci0gICAgaWYgKCFpbi0+cmVzdWx0SW1hZ2UoKSB8fCAhaW4yLT5yZXN1bHRJbWFnZSgpKQor
ICAgIGlmICghaW4tPmhhc1Jlc3VsdCgpIHx8ICFpbjItPmhhc1Jlc3VsdCgpKQogICAgICAgICBy
ZXR1cm47CiAKICAgICBpZiAobV94Q2hhbm5lbFNlbGVjdG9yID09IENIQU5ORUxfVU5LTk9XTiB8
fCBtX3lDaGFubmVsU2VsZWN0b3IgPT0gQ0hBTk5FTF9VTktOT1dOKQogICAgICAgICByZXR1cm47
CiAKLSAgICBpZiAoIWVmZmVjdENvbnRleHQoKSkKKyAgICBJbWFnZURhdGEqIHJlc3VsdEltYWdl
ID0gY3JlYXRlUHJlbXVsdGlwbGllZEltYWdlUmVzdWx0KCk7CisgICAgaWYgKCFyZXN1bHRJbWFn
ZSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgSW50UmVjdCBlZmZlY3RBRHJhd2luZ1JlY3QgPSBy
ZXF1ZXN0ZWRSZWdpb25PZklucHV0SW1hZ2VEYXRhKGluLT5hYnNvbHV0ZVBhaW50UmVjdCgpKTsK
LSAgICBSZWZQdHI8SW1hZ2VEYXRhPiBzcmNJbWFnZURhdGFBID0gaW4tPnJlc3VsdEltYWdlKCkt
PmdldFByZW11bHRpcGxpZWRJbWFnZURhdGEoZWZmZWN0QURyYXdpbmdSZWN0KTsKLSAgICBCeXRl
QXJyYXkqIHNyY1BpeGVsQXJyYXlBID0gc3JjSW1hZ2VEYXRhQS0+ZGF0YSgpLT5kYXRhKCkgOwor
ICAgIFJlZlB0cjxJbWFnZURhdGE+IHNyY0ltYWdlRGF0YUEgPSBpbi0+YXNQcmVtdWx0aXBsaWVk
SW1hZ2UoZWZmZWN0QURyYXdpbmdSZWN0KTsKKyAgICBCeXRlQXJyYXkqIHNyY1BpeGVsQXJyYXlB
ID0gc3JjSW1hZ2VEYXRhQS0+ZGF0YSgpLT5kYXRhKCk7CiAKICAgICBJbnRSZWN0IGVmZmVjdEJE
cmF3aW5nUmVjdCA9IHJlcXVlc3RlZFJlZ2lvbk9mSW5wdXRJbWFnZURhdGEoaW4yLT5hYnNvbHV0
ZVBhaW50UmVjdCgpKTsKLSAgICBSZWZQdHI8SW1hZ2VEYXRhPiBzcmNJbWFnZURhdGFCID0gaW4y
LT5yZXN1bHRJbWFnZSgpLT5nZXRVbm11bHRpcGxpZWRJbWFnZURhdGEoZWZmZWN0QkRyYXdpbmdS
ZWN0KTsKKyAgICBSZWZQdHI8SW1hZ2VEYXRhPiBzcmNJbWFnZURhdGFCID0gaW4yLT5hc1VubXVs
dGlwbGllZEltYWdlKGVmZmVjdEJEcmF3aW5nUmVjdCk7CiAgICAgQnl0ZUFycmF5KiBzcmNQaXhl
bEFycmF5QiA9IHNyY0ltYWdlRGF0YUItPmRhdGEoKS0+ZGF0YSgpOwogCi0gICAgSW50UmVjdCBp
bWFnZVJlY3QoSW50UG9pbnQoKSwgcmVzdWx0SW1hZ2UoKS0+c2l6ZSgpKTsKLSAgICBSZWZQdHI8
SW1hZ2VEYXRhPiBpbWFnZURhdGEgPSBJbWFnZURhdGE6OmNyZWF0ZShpbWFnZVJlY3Qud2lkdGgo
KSwgaW1hZ2VSZWN0LmhlaWdodCgpKTsKLSAgICBCeXRlQXJyYXkqIGRzdFBpeGVsQXJyYXkgPSBp
bWFnZURhdGEtPmRhdGEoKS0+ZGF0YSgpOworICAgIEJ5dGVBcnJheSogZHN0UGl4ZWxBcnJheSA9
IHJlc3VsdEltYWdlLT5kYXRhKCktPmRhdGEoKTsKIAogICAgIEFTU0VSVChzcmNQaXhlbEFycmF5
QS0+bGVuZ3RoKCkgPT0gc3JjUGl4ZWxBcnJheUItPmxlbmd0aCgpKTsKIAogICAgIEZpbHRlciog
ZmlsdGVyID0gdGhpcy0+ZmlsdGVyKCk7CisgICAgSW50U2l6ZSBwYWludFNpemUgPSBhYnNvbHV0
ZVBhaW50UmVjdCgpLnNpemUoKTsKICAgICBmbG9hdCBzY2FsZVggPSBmaWx0ZXItPmFwcGx5SG9y
aXpvbnRhbFNjYWxlKG1fc2NhbGUgLyAyNTUpOwogICAgIGZsb2F0IHNjYWxlWSA9IGZpbHRlci0+
YXBwbHlWZXJ0aWNhbFNjYWxlKG1fc2NhbGUgLyAyNTUpOwogICAgIGZsb2F0IHNjYWxlQWRqdXN0
bWVudFggPSBmaWx0ZXItPmFwcGx5SG9yaXpvbnRhbFNjYWxlKDAuNWYgLSAwLjVmICogbV9zY2Fs
ZSk7CiAgICAgZmxvYXQgc2NhbGVBZGp1c3RtZW50WSA9IGZpbHRlci0+YXBwbHlWZXJ0aWNhbFNj
YWxlKDAuNWYgLSAwLjVmICogbV9zY2FsZSk7Ci0gICAgaW50IHN0cmlkZSA9IGltYWdlUmVjdC53
aWR0aCgpICogNDsKLSAgICBmb3IgKGludCB5ID0gMDsgeSA8IGltYWdlUmVjdC5oZWlnaHQoKTsg
Kyt5KSB7CisgICAgaW50IHN0cmlkZSA9IHBhaW50U2l6ZS53aWR0aCgpICogNDsKKyAgICBmb3Ig
KGludCB5ID0gMDsgeSA8IHBhaW50U2l6ZS5oZWlnaHQoKTsgKyt5KSB7CiAgICAgICAgIGludCBs
aW5lID0geSAqIHN0cmlkZTsKLSAgICAgICAgZm9yIChpbnQgeCA9IDA7IHggPCBpbWFnZVJlY3Qu
d2lkdGgoKTsgKyt4KSB7CisgICAgICAgIGZvciAoaW50IHggPSAwOyB4IDwgcGFpbnRTaXplLndp
ZHRoKCk7ICsreCkgewogICAgICAgICAgICAgaW50IGRzdEluZGV4ID0gbGluZSArIHggKiA0Owog
ICAgICAgICAgICAgaW50IHNyY1ggPSB4ICsgc3RhdGljX2Nhc3Q8aW50PihzY2FsZVggKiBzcmNQ
aXhlbEFycmF5Qi0+Z2V0KGRzdEluZGV4ICsgbV94Q2hhbm5lbFNlbGVjdG9yIC0gMSkgKyBzY2Fs
ZUFkanVzdG1lbnRYKTsKICAgICAgICAgICAgIGludCBzcmNZID0geSArIHN0YXRpY19jYXN0PGlu
dD4oc2NhbGVZICogc3JjUGl4ZWxBcnJheUItPmdldChkc3RJbmRleCArIG1feUNoYW5uZWxTZWxl
Y3RvciAtIDEpICsgc2NhbGVBZGp1c3RtZW50WSk7CiAgICAgICAgICAgICBmb3IgKHVuc2lnbmVk
IGNoYW5uZWwgPSAwOyBjaGFubmVsIDwgNDsgKytjaGFubmVsKSB7Ci0gICAgICAgICAgICAgICAg
aWYgKHNyY1ggPCAwIHx8IHNyY1ggPj0gaW1hZ2VSZWN0LndpZHRoKCkgfHwgc3JjWSA8IDAgfHwg
c3JjWSA+PSBpbWFnZVJlY3QuaGVpZ2h0KCkpCisgICAgICAgICAgICAgICAgaWYgKHNyY1ggPCAw
IHx8IHNyY1ggPj0gcGFpbnRTaXplLndpZHRoKCkgfHwgc3JjWSA8IDAgfHwgc3JjWSA+PSBwYWlu
dFNpemUuaGVpZ2h0KCkpCiAgICAgICAgICAgICAgICAgICAgIGRzdFBpeGVsQXJyYXktPnNldChk
c3RJbmRleCArIGNoYW5uZWwsIHN0YXRpY19jYXN0PHVuc2lnbmVkIGNoYXI+KDApKTsKICAgICAg
ICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgY2hhciBwaXhl
bFZhbHVlID0gc3JjUGl4ZWxBcnJheUEtPmdldChzcmNZICogc3RyaWRlICsgc3JjWCAqIDQgKyBj
aGFubmVsKTsKICAgICAgICAgICAgICAgICAgICAgZHN0UGl4ZWxBcnJheS0+c2V0KGRzdEluZGV4
ICsgY2hhbm5lbCwgcGl4ZWxWYWx1ZSk7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAg
fQotCiAgICAgICAgIH0KICAgICB9Ci0gICAgcmVzdWx0SW1hZ2UoKS0+cHV0UHJlbXVsdGlwbGll
ZEltYWdlRGF0YShpbWFnZURhdGEuZ2V0KCksIGltYWdlUmVjdCwgSW50UG9pbnQoKSk7CiB9CiAK
IHZvaWQgRkVEaXNwbGFjZW1lbnRNYXA6OmR1bXAoKQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFRmxvb2QuY3BwIGIvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9maWx0ZXJzL0ZFRmxvb2QuY3BwCmluZGV4IGJjNjcyMWIuLjhiZmRlZjggMTAwNjQ0Ci0t
LSBhL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUZsb29kLmNwcAorKysgYi9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVGbG9vZC5jcHAKQEAgLTY0LDEyICs2
NCwxNCBAQCB2b2lkIEZFRmxvb2Q6OnNldEZsb29kT3BhY2l0eShmbG9hdCBmbG9vZE9wYWNpdHkp
CiAKIHZvaWQgRkVGbG9vZDo6YXBwbHkoKQogewotICAgIEdyYXBoaWNzQ29udGV4dCogZmlsdGVy
Q29udGV4dCA9IGVmZmVjdENvbnRleHQoKTsKLSAgICBpZiAoIWZpbHRlckNvbnRleHQpCisgICAg
aWYgKGhhc1Jlc3VsdCgpKQorICAgICAgICByZXR1cm47CisgICAgSW1hZ2VCdWZmZXIqIHJlc3Vs
dEltYWdlID0gY3JlYXRlSW1hZ2VCdWZmZXJSZXN1bHQoKTsKKyAgICBpZiAoIXJlc3VsdEltYWdl
KQogICAgICAgICByZXR1cm47CiAKICAgICBDb2xvciBjb2xvciA9IGNvbG9yV2l0aE92ZXJyaWRl
QWxwaGEoZmxvb2RDb2xvcigpLnJnYigpLCBmbG9vZE9wYWNpdHkoKSk7Ci0gICAgZmlsdGVyQ29u
dGV4dC0+ZmlsbFJlY3QoRmxvYXRSZWN0KEZsb2F0UG9pbnQoKSwgYWJzb2x1dGVQYWludFJlY3Qo
KS5zaXplKCkpLCBjb2xvciwgQ29sb3JTcGFjZURldmljZVJHQik7CisgICAgcmVzdWx0SW1hZ2Ut
PmNvbnRleHQoKS0+ZmlsbFJlY3QoRmxvYXRSZWN0KEZsb2F0UG9pbnQoKSwgYWJzb2x1dGVQYWlu
dFJlY3QoKS5zaXplKCkpLCBjb2xvciwgQ29sb3JTcGFjZURldmljZVJHQik7CiB9CiAKIHZvaWQg
RkVGbG9vZDo6ZHVtcCgpCmRpZmYgLS1naXQgYS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Zp
bHRlcnMvRkVHYXVzc2lhbkJsdXIuY3BwIGIvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0
ZXJzL0ZFR2F1c3NpYW5CbHVyLmNwcAppbmRleCA4NzZlNGIzLi5lMWZmY2I3IDEwMDY0NAotLS0g
YS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVHYXVzc2lhbkJsdXIuY3BwCisr
KyBiL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUdhdXNzaWFuQmx1ci5jcHAK
QEAgLTE2NCwzNCArMTY0LDM1IEBAIHZvaWQgRkVHYXVzc2lhbkJsdXI6OmRldGVybWluZUFic29s
dXRlUGFpbnRSZWN0KCkKIAogdm9pZCBGRUdhdXNzaWFuQmx1cjo6YXBwbHkoKQogeworICAgIGlm
IChoYXNSZXN1bHQoKSkKKyAgICAgICAgcmV0dXJuOwogICAgIEZpbHRlckVmZmVjdCogaW4gPSBp
bnB1dEVmZmVjdCgwKTsKICAgICBpbi0+YXBwbHkoKTsKLSAgICBpZiAoIWluLT5yZXN1bHRJbWFn
ZSgpKQorICAgIGlmICghaW4tPmhhc1Jlc3VsdCgpKQogICAgICAgICByZXR1cm47CiAKLSAgICBp
ZiAoIWVmZmVjdENvbnRleHQoKSkKKyAgICBJbWFnZURhdGEqIHJlc3VsdEltYWdlID0gY3JlYXRl
UHJlbXVsdGlwbGllZEltYWdlUmVzdWx0KCk7CisgICAgaWYgKCFyZXN1bHRJbWFnZSkKICAgICAg
ICAgcmV0dXJuOwogCiAgICAgc2V0SXNBbHBoYUltYWdlKGluLT5pc0FscGhhSW1hZ2UoKSk7CiAK
ICAgICBJbnRSZWN0IGVmZmVjdERyYXdpbmdSZWN0ID0gcmVxdWVzdGVkUmVnaW9uT2ZJbnB1dElt
YWdlRGF0YShpbi0+YWJzb2x1dGVQYWludFJlY3QoKSk7Ci0gICAgUmVmUHRyPEltYWdlRGF0YT4g
c3JjSW1hZ2VEYXRhID0gaW4tPnJlc3VsdEltYWdlKCktPmdldFByZW11bHRpcGxpZWRJbWFnZURh
dGEoZWZmZWN0RHJhd2luZ1JlY3QpOwotICAgIEludFJlY3QgaW1hZ2VSZWN0KEludFBvaW50KCks
IHJlc3VsdEltYWdlKCktPnNpemUoKSk7CisgICAgaW4tPmNvcHlQcmVtdWx0aXBsaWVkSW1hZ2Uo
cmVzdWx0SW1hZ2UsIGVmZmVjdERyYXdpbmdSZWN0KTsKIAotICAgIGlmICghbV9zdGRYICYmICFt
X3N0ZFkpIHsKLSAgICAgICAgcmVzdWx0SW1hZ2UoKS0+cHV0UHJlbXVsdGlwbGllZEltYWdlRGF0
YShzcmNJbWFnZURhdGEuZ2V0KCksIGltYWdlUmVjdCwgSW50UG9pbnQoKSk7CisgICAgaWYgKCFt
X3N0ZFggJiYgIW1fc3RkWSkKICAgICAgICAgcmV0dXJuOwotICAgIH0KIAogICAgIHVuc2lnbmVk
IGtlcm5lbFNpemVYID0gMDsKICAgICB1bnNpZ25lZCBrZXJuZWxTaXplWSA9IDA7CiAgICAgY2Fs
Y3VsYXRlS2VybmVsU2l6ZShmaWx0ZXIoKSwga2VybmVsU2l6ZVgsIGtlcm5lbFNpemVZLCBtX3N0
ZFgsIG1fc3RkWSk7CiAKLSAgICBCeXRlQXJyYXkqIHNyY1BpeGVsQXJyYXkgPSBzcmNJbWFnZURh
dGEtPmRhdGEoKS0+ZGF0YSgpOwotICAgIFJlZlB0cjxJbWFnZURhdGE+IHRtcEltYWdlRGF0YSA9
IEltYWdlRGF0YTo6Y3JlYXRlKGltYWdlUmVjdC53aWR0aCgpLCBpbWFnZVJlY3QuaGVpZ2h0KCkp
OworICAgIEludFNpemUgcGFpbnRTaXplID0gYWJzb2x1dGVQYWludFJlY3QoKS5zaXplKCk7Cisg
ICAgQnl0ZUFycmF5KiBzcmNQaXhlbEFycmF5ID0gcmVzdWx0SW1hZ2UtPmRhdGEoKS0+ZGF0YSgp
OworICAgIFJlZlB0cjxJbWFnZURhdGE+IHRtcEltYWdlRGF0YSA9IEltYWdlRGF0YTo6Y3JlYXRl
KHBhaW50U2l6ZS53aWR0aCgpLCBwYWludFNpemUuaGVpZ2h0KCkpOwogICAgIEJ5dGVBcnJheSog
dG1wUGl4ZWxBcnJheSA9IHRtcEltYWdlRGF0YS0+ZGF0YSgpLT5kYXRhKCk7CiAKLSAgICBpbnQg
c3RyaWRlID0gNCAqIGltYWdlUmVjdC53aWR0aCgpOworICAgIGludCBzdHJpZGUgPSA0ICogcGFp
bnRTaXplLndpZHRoKCk7CiAgICAgaW50IGR4TGVmdCA9IDA7CiAgICAgaW50IGR4UmlnaHQgPSAw
OwogICAgIGludCBkeUxlZnQgPSAwOwpAQCAtMTk5LDcgKzIwMCw3IEBAIHZvaWQgRkVHYXVzc2lh
bkJsdXI6OmFwcGx5KCkKICAgICBmb3IgKGludCBpID0gMDsgaSA8IDM7ICsraSkgewogICAgICAg
ICBpZiAoa2VybmVsU2l6ZVgpIHsKICAgICAgICAgICAgIGtlcm5lbFBvc2l0aW9uKGksIGtlcm5l
bFNpemVYLCBkeExlZnQsIGR4UmlnaHQpOwotICAgICAgICAgICAgYm94Qmx1cihzcmNQaXhlbEFy
cmF5LCB0bXBQaXhlbEFycmF5LCBrZXJuZWxTaXplWCwgZHhMZWZ0LCBkeFJpZ2h0LCA0LCBzdHJp
ZGUsIGltYWdlUmVjdC53aWR0aCgpLCBpbWFnZVJlY3QuaGVpZ2h0KCksIGlzQWxwaGFJbWFnZSgp
KTsKKyAgICAgICAgICAgIGJveEJsdXIoc3JjUGl4ZWxBcnJheSwgdG1wUGl4ZWxBcnJheSwga2Vy
bmVsU2l6ZVgsIGR4TGVmdCwgZHhSaWdodCwgNCwgc3RyaWRlLCBwYWludFNpemUud2lkdGgoKSwg
cGFpbnRTaXplLmhlaWdodCgpLCBpc0FscGhhSW1hZ2UoKSk7CiAgICAgICAgIH0gZWxzZSB7CiAg
ICAgICAgICAgICBCeXRlQXJyYXkqIGF1eFBpeGVsQXJyYXkgPSB0bXBQaXhlbEFycmF5OwogICAg
ICAgICAgICAgdG1wUGl4ZWxBcnJheSA9IHNyY1BpeGVsQXJyYXk7CkBAIC0yMDgsMTUgKzIwOSwx
MyBAQCB2b2lkIEZFR2F1c3NpYW5CbHVyOjphcHBseSgpCiAKICAgICAgICAgaWYgKGtlcm5lbFNp
emVZKSB7CiAgICAgICAgICAgICBrZXJuZWxQb3NpdGlvbihpLCBrZXJuZWxTaXplWSwgZHlMZWZ0
LCBkeVJpZ2h0KTsKLSAgICAgICAgICAgIGJveEJsdXIodG1wUGl4ZWxBcnJheSwgc3JjUGl4ZWxB
cnJheSwga2VybmVsU2l6ZVksIGR5TGVmdCwgZHlSaWdodCwgc3RyaWRlLCA0LCBpbWFnZVJlY3Qu
aGVpZ2h0KCksIGltYWdlUmVjdC53aWR0aCgpLCBpc0FscGhhSW1hZ2UoKSk7CisgICAgICAgICAg
ICBib3hCbHVyKHRtcFBpeGVsQXJyYXksIHNyY1BpeGVsQXJyYXksIGtlcm5lbFNpemVZLCBkeUxl
ZnQsIGR5UmlnaHQsIHN0cmlkZSwgNCwgcGFpbnRTaXplLmhlaWdodCgpLCBwYWludFNpemUud2lk
dGgoKSwgaXNBbHBoYUltYWdlKCkpOwogICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgQnl0
ZUFycmF5KiBhdXhQaXhlbEFycmF5ID0gdG1wUGl4ZWxBcnJheTsKICAgICAgICAgICAgIHRtcFBp
eGVsQXJyYXkgPSBzcmNQaXhlbEFycmF5OwogICAgICAgICAgICAgc3JjUGl4ZWxBcnJheSA9IGF1
eFBpeGVsQXJyYXk7CiAgICAgICAgIH0KICAgICB9Ci0KLSAgICByZXN1bHRJbWFnZSgpLT5wdXRQ
cmVtdWx0aXBsaWVkSW1hZ2VEYXRhKHNyY0ltYWdlRGF0YS5nZXQoKSwgaW1hZ2VSZWN0LCBJbnRQ
b2ludCgpKTsKIH0KIAogdm9pZCBGRUdhdXNzaWFuQmx1cjo6ZHVtcCgpCmRpZmYgLS1naXQgYS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVMaWdodGluZy5jcHAgYi9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVMaWdodGluZy5jcHAKaW5kZXggODEyOTIwYy4u
NGRiNDBmMSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZF
TGlnaHRpbmcuY3BwCisrKyBiL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUxp
Z2h0aW5nLmNwcApAQCAtMzMxLDE5ICszMzEsMjIgQEAgYm9vbCBGRUxpZ2h0aW5nOjpkcmF3TGln
aHRpbmcoQnl0ZUFycmF5KiBwaXhlbHMsIGludCB3aWR0aCwgaW50IGhlaWdodCkKIAogdm9pZCBG
RUxpZ2h0aW5nOjphcHBseSgpCiB7CisgICAgaWYgKGhhc1Jlc3VsdCgpKQorICAgICAgICByZXR1
cm47CiAgICAgRmlsdGVyRWZmZWN0KiBpbiA9IGlucHV0RWZmZWN0KDApOwogICAgIGluLT5hcHBs
eSgpOwotICAgIGlmICghaW4tPnJlc3VsdEltYWdlKCkpCisgICAgaWYgKCFpbi0+aGFzUmVzdWx0
KCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIGlmICghZWZmZWN0Q29udGV4dCgpKQorICAgIElt
YWdlRGF0YSogcmVzdWx0SW1hZ2UgPSBjcmVhdGVVbm11bHRpcGxpZWRJbWFnZVJlc3VsdCgpOwor
ICAgIGlmICghcmVzdWx0SW1hZ2UpCiAgICAgICAgIHJldHVybjsKIAogICAgIHNldElzQWxwaGFJ
bWFnZShmYWxzZSk7CiAKICAgICBJbnRSZWN0IGVmZmVjdERyYXdpbmdSZWN0ID0gcmVxdWVzdGVk
UmVnaW9uT2ZJbnB1dEltYWdlRGF0YShpbi0+YWJzb2x1dGVQYWludFJlY3QoKSk7Ci0gICAgUmVm
UHRyPEltYWdlRGF0YT4gc3JjSW1hZ2VEYXRhID0gaW4tPnJlc3VsdEltYWdlKCktPmdldFVubXVs
dGlwbGllZEltYWdlRGF0YShlZmZlY3REcmF3aW5nUmVjdCk7Ci0gICAgQnl0ZUFycmF5KiBzcmNQ
aXhlbEFycmF5ID0gc3JjSW1hZ2VEYXRhLT5kYXRhKCktPmRhdGEoKTsKKyAgICBpbi0+Y29weVVu
bXVsdGlwbGllZEltYWdlKHJlc3VsdEltYWdlLCBlZmZlY3REcmF3aW5nUmVjdCk7CisgICAgQnl0
ZUFycmF5KiBzcmNQaXhlbEFycmF5ID0gcmVzdWx0SW1hZ2UtPmRhdGEoKS0+ZGF0YSgpOwogCiAg
ICAgLy8gRklYTUU6IHN1cHBvcnQga2VybmVsVW5pdExlbmd0aHMgb3RoZXIgdGhhbiAoMSwxKS4g
VGhlIGlzc3VlIGhlcmUgaXMgdGhhdCB0aGUgVzMKICAgICAvLyBzdGFuZGFyZCBoYXMgbm8gdGVz
dCBjYXNlIGZvciB0aGVtLCBhbmQgb3RoZXIgYnJvd3NlcnMgKGxpa2UgRmlyZWZveCkgaGFzIHN0
cmFuZ2UKQEAgLTM1MSw4ICszNTQsNyBAQCB2b2lkIEZFTGlnaHRpbmc6OmFwcGx5KCkKICAgICAv
LyBBbnl3YXksIGZlQ29udm9sdmVNYXRyaXggc2hvdWxkIGFsc28gdXNlIHRoZSBpbXBsZW1lbnRh
dGlvbgogCiAgICAgSW50U2l6ZSBhYnNvbHV0ZVBhaW50U2l6ZSA9IGFic29sdXRlUGFpbnRSZWN0
KCkuc2l6ZSgpOwotICAgIGlmIChkcmF3TGlnaHRpbmcoc3JjUGl4ZWxBcnJheSwgYWJzb2x1dGVQ
YWludFNpemUud2lkdGgoKSwgYWJzb2x1dGVQYWludFNpemUuaGVpZ2h0KCkpKQotICAgICAgICBy
ZXN1bHRJbWFnZSgpLT5wdXRVbm11bHRpcGxpZWRJbWFnZURhdGEoc3JjSW1hZ2VEYXRhLmdldCgp
LCBJbnRSZWN0KEludFBvaW50KCksIGFic29sdXRlUGFpbnRTaXplKSwgSW50UG9pbnQoKSk7Cisg
ICAgZHJhd0xpZ2h0aW5nKHNyY1BpeGVsQXJyYXksIGFic29sdXRlUGFpbnRTaXplLndpZHRoKCks
IGFic29sdXRlUGFpbnRTaXplLmhlaWdodCgpKTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29y
ZQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFTWVyZ2Uu
Y3BwIGIvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFTWVyZ2UuY3BwCmluZGV4
IGNhNTNhODYuLjQzOTUzMjEgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
ZmlsdGVycy9GRU1lcmdlLmNwcAorKysgYi9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRl
cnMvRkVNZXJnZS5jcHAKQEAgLTQxLDIyICs0MSwyNSBAQCBQYXNzUmVmUHRyPEZFTWVyZ2U+IEZF
TWVyZ2U6OmNyZWF0ZShGaWx0ZXIqIGZpbHRlcikKIAogdm9pZCBGRU1lcmdlOjphcHBseSgpCiB7
CisgICAgaWYgKGhhc1Jlc3VsdCgpKQorICAgICAgICByZXR1cm47CiAgICAgdW5zaWduZWQgc2l6
ZSA9IG51bWJlck9mRWZmZWN0SW5wdXRzKCk7CiAgICAgQVNTRVJUKHNpemUgPiAwKTsKICAgICBm
b3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgc2l6ZTsgKytpKSB7CiAgICAgICAgIEZpbHRlckVmZmVj
dCogaW4gPSBpbnB1dEVmZmVjdChpKTsKICAgICAgICAgaW4tPmFwcGx5KCk7Ci0gICAgICAgIGlm
ICghaW4tPnJlc3VsdEltYWdlKCkpCisgICAgICAgIGlmICghaW4tPmhhc1Jlc3VsdCgpKQogICAg
ICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIEdyYXBoaWNzQ29udGV4dCogZmlsdGVyQ29u
dGV4dCA9IGVmZmVjdENvbnRleHQoKTsKLSAgICBpZiAoIWZpbHRlckNvbnRleHQpCisgICAgSW1h
Z2VCdWZmZXIqIHJlc3VsdEltYWdlID0gY3JlYXRlSW1hZ2VCdWZmZXJSZXN1bHQoKTsKKyAgICBp
ZiAoIXJlc3VsdEltYWdlKQogICAgICAgICByZXR1cm47CiAKKyAgICBHcmFwaGljc0NvbnRleHQq
IGZpbHRlckNvbnRleHQgPSByZXN1bHRJbWFnZS0+Y29udGV4dCgpOwogICAgIGZvciAodW5zaWdu
ZWQgaSA9IDA7IGkgPCBzaXplOyArK2kpIHsKICAgICAgICAgRmlsdGVyRWZmZWN0KiBpbiA9IGlu
cHV0RWZmZWN0KGkpOwotICAgICAgICBmaWx0ZXJDb250ZXh0LT5kcmF3SW1hZ2VCdWZmZXIoaW4t
PnJlc3VsdEltYWdlKCksIENvbG9yU3BhY2VEZXZpY2VSR0IsIGRyYXdpbmdSZWdpb25PZklucHV0
SW1hZ2UoaW4tPmFic29sdXRlUGFpbnRSZWN0KCkpKTsKKyAgICAgICAgZmlsdGVyQ29udGV4dC0+
ZHJhd0ltYWdlQnVmZmVyKGluLT5hc0ltYWdlQnVmZmVyKCksIENvbG9yU3BhY2VEZXZpY2VSR0Is
IGRyYXdpbmdSZWdpb25PZklucHV0SW1hZ2UoaW4tPmFic29sdXRlUGFpbnRSZWN0KCkpKTsKICAg
ICB9CiB9CiAKZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9G
RU1lcmdlLmggYi9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVNZXJnZS5oCmlu
ZGV4IDI0ZDA3MWUuLmRiZWU2MTAgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvZmlsdGVycy9GRU1lcmdlLmgKKysrIGIvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0
ZXJzL0ZFTWVyZ2UuaApAQCAtMjAsNyArMjAsNyBAQAogICovCiAKICNpZm5kZWYgRkVNZXJnZV9o
Ci0jZGVmaW5lIEVNZXJnZV9oCisjZGVmaW5lIEZFTWVyZ2VfaAogCiAjaWYgRU5BQkxFKEZJTFRF
UlMpCiAjaW5jbHVkZSAiRmlsdGVyRWZmZWN0LmgiCmRpZmYgLS1naXQgYS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVNb3JwaG9sb2d5LmNwcCBiL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvZmlsdGVycy9GRU1vcnBob2xvZ3kuY3BwCmluZGV4IGRkNzY1OWEuLmIyMGFkYzUg
MTAwNjQ0Ci0tLSBhL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRU1vcnBob2xv
Z3kuY3BwCisrKyBiL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRU1vcnBob2xv
Z3kuY3BwCkBAIC05MSwxMiArOTEsMTUgQEAgdm9pZCBGRU1vcnBob2xvZ3k6OnNldFJhZGl1c1ko
ZmxvYXQgcmFkaXVzWSkKIAogdm9pZCBGRU1vcnBob2xvZ3k6OmFwcGx5KCkKIHsKKyAgICBpZiAo
aGFzUmVzdWx0KCkpCisgICAgICAgIHJldHVybjsKICAgICBGaWx0ZXJFZmZlY3QqIGluID0gaW5w
dXRFZmZlY3QoMCk7CiAgICAgaW4tPmFwcGx5KCk7Ci0gICAgaWYgKCFpbi0+cmVzdWx0SW1hZ2Uo
KSkKKyAgICBpZiAoIWluLT5oYXNSZXN1bHQoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgaWYg
KCFlZmZlY3RDb250ZXh0KCkpCisgICAgSW1hZ2VEYXRhKiByZXN1bHRJbWFnZSA9IGNyZWF0ZVBy
ZW11bHRpcGxpZWRJbWFnZVJlc3VsdCgpOworICAgIGlmICghcmVzdWx0SW1hZ2UpCiAgICAgICAg
IHJldHVybjsKIAogICAgIHNldElzQWxwaGFJbWFnZShpbi0+aXNBbHBoYUltYWdlKCkpOwpAQCAt
MTA3LDEyICsxMTAsMTAgQEAgdm9pZCBGRU1vcnBob2xvZ3k6OmFwcGx5KCkKICAgICBpbnQgcmFk
aXVzWCA9IHN0YXRpY19jYXN0PGludD4oZmxvb3JmKGZpbHRlci0+YXBwbHlIb3Jpem9udGFsU2Nh
bGUobV9yYWRpdXNYKSkpOwogICAgIGludCByYWRpdXNZID0gc3RhdGljX2Nhc3Q8aW50PihmbG9v
cmYoZmlsdGVyLT5hcHBseVZlcnRpY2FsU2NhbGUobV9yYWRpdXNZKSkpOwogCi0gICAgSW50UmVj
dCBpbWFnZVJlY3QoSW50UG9pbnQoKSwgcmVzdWx0SW1hZ2UoKS0+c2l6ZSgpKTsKICAgICBJbnRS
ZWN0IGVmZmVjdERyYXdpbmdSZWN0ID0gcmVxdWVzdGVkUmVnaW9uT2ZJbnB1dEltYWdlRGF0YShp
bi0+YWJzb2x1dGVQYWludFJlY3QoKSk7Ci0gICAgUmVmUHRyPEltYWdlRGF0YT4gc3JjSW1hZ2VE
YXRhID0gaW4tPnJlc3VsdEltYWdlKCktPmdldFByZW11bHRpcGxpZWRJbWFnZURhdGEoZWZmZWN0
RHJhd2luZ1JlY3QpOworICAgIFJlZlB0cjxJbWFnZURhdGE+IHNyY0ltYWdlRGF0YSA9IGluLT5h
c1ByZW11bHRpcGxpZWRJbWFnZShlZmZlY3REcmF3aW5nUmVjdCk7CiAgICAgQnl0ZUFycmF5KiBz
cmNQaXhlbEFycmF5ID0gc3JjSW1hZ2VEYXRhLT5kYXRhKCktPmRhdGEoKTsKLSAgICBSZWZQdHI8
SW1hZ2VEYXRhPiBpbWFnZURhdGEgPSBJbWFnZURhdGE6OmNyZWF0ZShpbWFnZVJlY3Qud2lkdGgo
KSwgaW1hZ2VSZWN0LmhlaWdodCgpKTsKLSAgICBCeXRlQXJyYXkqIGRzdFBpeGVsQXJyYXkgPSBp
bWFnZURhdGEtPmRhdGEoKS0+ZGF0YSgpOworICAgIEJ5dGVBcnJheSogZHN0UGl4ZWxBcnJheSA9
IHJlc3VsdEltYWdlLT5kYXRhKCktPmRhdGEoKTsKIAogICAgIGludCBlZmZlY3RXaWR0aCA9IGVm
ZmVjdERyYXdpbmdSZWN0LndpZHRoKCkgKiA0OwogICAgIApAQCAtMTYyLDcgKzE2Myw2IEBAIHZv
aWQgRkVNb3JwaG9sb2d5OjphcHBseSgpCiAgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICB9
Ci0gICAgcmVzdWx0SW1hZ2UoKS0+cHV0UHJlbXVsdGlwbGllZEltYWdlRGF0YShpbWFnZURhdGEu
Z2V0KCksIGltYWdlUmVjdCwgSW50UG9pbnQoKSk7CiB9CiAKIHZvaWQgRkVNb3JwaG9sb2d5Ojpk
dW1wKCkKZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRU9m
ZnNldC5jcHAgYi9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVPZmZzZXQuY3Bw
CmluZGV4IGI2NDAwNTQuLmYxZDU5MTQgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvZmlsdGVycy9GRU9mZnNldC5jcHAKKysrIGIvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9maWx0ZXJzL0ZFT2Zmc2V0LmNwcApAQCAtNzQsMTMgKzc0LDE1IEBAIHZvaWQgRkVPZmZzZXQ6
OmRldGVybWluZUFic29sdXRlUGFpbnRSZWN0KCkKIAogdm9pZCBGRU9mZnNldDo6YXBwbHkoKQog
eworICAgIGlmIChoYXNSZXN1bHQoKSkKKyAgICAgICAgcmV0dXJuOwogICAgIEZpbHRlckVmZmVj
dCogaW4gPSBpbnB1dEVmZmVjdCgwKTsKICAgICBpbi0+YXBwbHkoKTsKLSAgICBpZiAoIWluLT5y
ZXN1bHRJbWFnZSgpKQorICAgIGlmICghaW4tPmhhc1Jlc3VsdCgpKQogICAgICAgICByZXR1cm47
CiAKLSAgICBHcmFwaGljc0NvbnRleHQqIGZpbHRlckNvbnRleHQgPSBlZmZlY3RDb250ZXh0KCk7
Ci0gICAgaWYgKCFmaWx0ZXJDb250ZXh0KQorICAgIEltYWdlQnVmZmVyKiByZXN1bHRJbWFnZSA9
IGNyZWF0ZUltYWdlQnVmZmVyUmVzdWx0KCk7CisgICAgaWYgKCFyZXN1bHRJbWFnZSkKICAgICAg
ICAgcmV0dXJuOwogCiAgICAgc2V0SXNBbHBoYUltYWdlKGluLT5pc0FscGhhSW1hZ2UoKSk7CkBA
IC04OCw3ICs5MCw3IEBAIHZvaWQgRkVPZmZzZXQ6OmFwcGx5KCkKICAgICBGbG9hdFJlY3QgZHJh
d2luZ1JlZ2lvbiA9IGRyYXdpbmdSZWdpb25PZklucHV0SW1hZ2UoaW4tPmFic29sdXRlUGFpbnRS
ZWN0KCkpOwogICAgIEZpbHRlciogZmlsdGVyID0gdGhpcy0+ZmlsdGVyKCk7CiAgICAgZHJhd2lu
Z1JlZ2lvbi5tb3ZlKGZpbHRlci0+YXBwbHlIb3Jpem9udGFsU2NhbGUobV9keCksIGZpbHRlci0+
YXBwbHlWZXJ0aWNhbFNjYWxlKG1fZHkpKTsKLSAgICBmaWx0ZXJDb250ZXh0LT5kcmF3SW1hZ2VC
dWZmZXIoaW4tPnJlc3VsdEltYWdlKCksIENvbG9yU3BhY2VEZXZpY2VSR0IsIGRyYXdpbmdSZWdp
b24pOworICAgIHJlc3VsdEltYWdlLT5jb250ZXh0KCktPmRyYXdJbWFnZUJ1ZmZlcihpbi0+YXNJ
bWFnZUJ1ZmZlcigpLCBDb2xvclNwYWNlRGV2aWNlUkdCLCBkcmF3aW5nUmVnaW9uKTsKIH0KIAog
dm9pZCBGRU9mZnNldDo6ZHVtcCgpCmRpZmYgLS1naXQgYS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2ZpbHRlcnMvRkVUaWxlLmNwcCBiL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVy
cy9GRVRpbGUuY3BwCmluZGV4IDZiMTE0MDEuLmU1MTZjN2UgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRVRpbGUuY3BwCisrKyBiL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvZmlsdGVycy9GRVRpbGUuY3BwCkBAIC00NSwxMyArNDUsMTUgQEAgdm9pZCBG
RVRpbGU6OmFwcGx5KCkKIHsKIC8vIEZJWE1FOiBTZWUgYnVnIDQ3MzE1LiBUaGlzIGlzIGEgaGFj
ayB0byB3b3JrIGFyb3VuZCBhIGNvbXBpbGUgZmFpbHVyZSwgYnV0IGlzIGluY29ycmVjdCBiZWhh
dmlvciBvdGhlcndpc2UuCiAjaWYgRU5BQkxFKFNWRykKKyAgICBpZiAoaGFzUmVzdWx0KCkpCisg
ICAgICAgIHJldHVybjsKICAgICBGaWx0ZXJFZmZlY3QqIGluID0gaW5wdXRFZmZlY3QoMCk7CiAg
ICAgaW4tPmFwcGx5KCk7Ci0gICAgaWYgKCFpbi0+cmVzdWx0SW1hZ2UoKSkKKyAgICBpZiAoIWlu
LT5oYXNSZXN1bHQoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgR3JhcGhpY3NDb250ZXh0KiBm
aWx0ZXJDb250ZXh0ID0gZWZmZWN0Q29udGV4dCgpOwotICAgIGlmICghZmlsdGVyQ29udGV4dCkK
KyAgICBJbWFnZUJ1ZmZlciogcmVzdWx0SW1hZ2UgPSBjcmVhdGVJbWFnZUJ1ZmZlclJlc3VsdCgp
OworICAgIGlmICghcmVzdWx0SW1hZ2UpCiAgICAgICAgIHJldHVybjsKIAogICAgIHNldElzQWxw
aGFJbWFnZShpbi0+aXNBbHBoYUltYWdlKCkpOwpAQCAtNzMsMTMgKzc1LDE0IEBAIHZvaWQgRkVU
aWxlOjphcHBseSgpCiAKICAgICBHcmFwaGljc0NvbnRleHQqIHRpbGVJbWFnZUNvbnRleHQgPSB0
aWxlSW1hZ2UtPmNvbnRleHQoKTsKICAgICB0aWxlSW1hZ2VDb250ZXh0LT50cmFuc2xhdGUoLWlu
TWF4RWZmZWN0TG9jYXRpb24ueCgpLCAtaW5NYXhFZmZlY3RMb2NhdGlvbi55KCkpOwotICAgIHRp
bGVJbWFnZUNvbnRleHQtPmRyYXdJbWFnZUJ1ZmZlcihpbi0+cmVzdWx0SW1hZ2UoKSwgQ29sb3JT
cGFjZURldmljZVJHQiwgaW4tPmFic29sdXRlUGFpbnRSZWN0KCkubG9jYXRpb24oKSk7CisgICAg
dGlsZUltYWdlQ29udGV4dC0+ZHJhd0ltYWdlQnVmZmVyKGluLT5hc0ltYWdlQnVmZmVyKCksIENv
bG9yU3BhY2VEZXZpY2VSR0IsIGluLT5hYnNvbHV0ZVBhaW50UmVjdCgpLmxvY2F0aW9uKCkpOwog
CiAgICAgUmVmUHRyPFBhdHRlcm4+IHBhdHRlcm4gPSBQYXR0ZXJuOjpjcmVhdGUodGlsZUltYWdl
LT5jb3B5SW1hZ2UoKSwgdHJ1ZSwgdHJ1ZSk7CiAKICAgICBBZmZpbmVUcmFuc2Zvcm0gcGF0dGVy
blRyYW5zZm9ybTsKICAgICBwYXR0ZXJuVHJhbnNmb3JtLnRyYW5zbGF0ZShpbk1heEVmZmVjdExv
Y2F0aW9uLngoKSAtIG1heEVmZmVjdExvY2F0aW9uLngoKSwgaW5NYXhFZmZlY3RMb2NhdGlvbi55
KCkgLSBtYXhFZmZlY3RMb2NhdGlvbi55KCkpOwogICAgIHBhdHRlcm4tPnNldFBhdHRlcm5TcGFj
ZVRyYW5zZm9ybShwYXR0ZXJuVHJhbnNmb3JtKTsKKyAgICBHcmFwaGljc0NvbnRleHQqIGZpbHRl
ckNvbnRleHQgPSByZXN1bHRJbWFnZS0+Y29udGV4dCgpOwogICAgIGZpbHRlckNvbnRleHQtPnNl
dEZpbGxQYXR0ZXJuKHBhdHRlcm4pOwogICAgIGZpbHRlckNvbnRleHQtPmZpbGxSZWN0KEZsb2F0
UmVjdChGbG9hdFBvaW50KCksIGFic29sdXRlUGFpbnRSZWN0KCkuc2l6ZSgpKSk7CiAjZW5kaWYK
ZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRVR1cmJ1bGVu
Y2UuY3BwIGIvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFVHVyYnVsZW5jZS5j
cHAKaW5kZXggODkxNGRiNy4uYmVjZjc4NCAxMDA2NDQKLS0tIGEvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9maWx0ZXJzL0ZFVHVyYnVsZW5jZS5jcHAKKysrIGIvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9maWx0ZXJzL0ZFVHVyYnVsZW5jZS5jcHAKQEAgLTMyMCwxNSArMzIwLDE2IEBAIHVu
c2lnbmVkIGNoYXIgRkVUdXJidWxlbmNlOjpjYWxjdWxhdGVUdXJidWxlbmNlVmFsdWVGb3JQb2lu
dChQYWludGluZ0RhdGEmIHBhaW50CiAKIHZvaWQgRkVUdXJidWxlbmNlOjphcHBseSgpCiB7Ci0g
ICAgaWYgKCFlZmZlY3RDb250ZXh0KCkpCisgICAgaWYgKGhhc1Jlc3VsdCgpKQorICAgICAgICBy
ZXR1cm47CisgICAgSW1hZ2VEYXRhKiByZXN1bHRJbWFnZSA9IGNyZWF0ZVVubXVsdGlwbGllZElt
YWdlUmVzdWx0KCk7CisgICAgaWYgKCFyZXN1bHRJbWFnZSkKICAgICAgICAgcmV0dXJuOwogCi0g
ICAgSW50UmVjdCBpbWFnZVJlY3QoSW50UG9pbnQoKSwgcmVzdWx0SW1hZ2UoKS0+c2l6ZSgpKTsK
LSAgICBpZiAoIWltYWdlUmVjdC5zaXplKCkud2lkdGgoKSB8fCAhaW1hZ2VSZWN0LnNpemUoKS5o
ZWlnaHQoKSkKKyAgICBpZiAoYWJzb2x1dGVQYWludFJlY3QoKS5pc0VtcHR5KCkpCiAgICAgICAg
IHJldHVybjsKIAotICAgIFJlZlB0cjxJbWFnZURhdGE+IGltYWdlRGF0YSA9IEltYWdlRGF0YTo6
Y3JlYXRlKGltYWdlUmVjdC53aWR0aCgpLCBpbWFnZVJlY3QuaGVpZ2h0KCkpOwotICAgIEJ5dGVB
cnJheSogcGl4ZWxBcnJheSA9IGltYWdlRGF0YS0+ZGF0YSgpLT5kYXRhKCk7CisgICAgQnl0ZUFy
cmF5KiBwaXhlbEFycmF5ID0gcmVzdWx0SW1hZ2UtPmRhdGEoKS0+ZGF0YSgpOwogICAgIFBhaW50
aW5nRGF0YSBwYWludGluZ0RhdGEobV9zZWVkLCByb3VuZGVkSW50U2l6ZShmaWx0ZXJQcmltaXRp
dmVTdWJyZWdpb24oKS5zaXplKCkpKTsKICAgICBpbml0UGFpbnQocGFpbnRpbmdEYXRhKTsKIApA
QCAtMzM2LDE2ICszMzcsMTUgQEAgdm9pZCBGRVR1cmJ1bGVuY2U6OmFwcGx5KCkKICAgICBGbG9h
dFBvaW50IHBvaW50OwogICAgIHBvaW50LnNldFkoZmlsdGVyUmVnaW9uLnkoKSk7CiAgICAgaW50
IGluZGV4T2ZQaXhlbENoYW5uZWwgPSAwOwotICAgIGZvciAoaW50IHkgPSAwOyB5IDwgaW1hZ2VS
ZWN0LmhlaWdodCgpOyArK3kpIHsKKyAgICBmb3IgKGludCB5ID0gMDsgeSA8IGFic29sdXRlUGFp
bnRSZWN0KCkuaGVpZ2h0KCk7ICsreSkgewogICAgICAgICBwb2ludC5zZXRZKHBvaW50LnkoKSAr
IDEpOwogICAgICAgICBwb2ludC5zZXRYKGZpbHRlclJlZ2lvbi54KCkpOwotICAgICAgICBmb3Ig
KGludCB4ID0gMDsgeCA8IGltYWdlUmVjdC53aWR0aCgpOyArK3gpIHsKKyAgICAgICAgZm9yIChp
bnQgeCA9IDA7IHggPCBhYnNvbHV0ZVBhaW50UmVjdCgpLndpZHRoKCk7ICsreCkgewogICAgICAg
ICAgICAgcG9pbnQuc2V0WChwb2ludC54KCkgKyAxKTsKICAgICAgICAgICAgIGZvciAocGFpbnRp
bmdEYXRhLmNoYW5uZWwgPSAwOyBwYWludGluZ0RhdGEuY2hhbm5lbCA8IDQ7ICsrcGFpbnRpbmdE
YXRhLmNoYW5uZWwsICsraW5kZXhPZlBpeGVsQ2hhbm5lbCkKICAgICAgICAgICAgICAgICBwaXhl
bEFycmF5LT5zZXQoaW5kZXhPZlBpeGVsQ2hhbm5lbCwgY2FsY3VsYXRlVHVyYnVsZW5jZVZhbHVl
Rm9yUG9pbnQocGFpbnRpbmdEYXRhLCBmaWx0ZXIoKS0+bWFwQWJzb2x1dGVQb2ludFRvTG9jYWxQ
b2ludChwb2ludCkpKTsKICAgICAgICAgfQogICAgIH0KLSAgICByZXN1bHRJbWFnZSgpLT5wdXRV
bm11bHRpcGxpZWRJbWFnZURhdGEoaW1hZ2VEYXRhLmdldCgpLCBpbWFnZVJlY3QsIEludFBvaW50
KCkpOwogfQogCiB2b2lkIEZFVHVyYnVsZW5jZTo6ZHVtcCgpCmRpZmYgLS1naXQgYS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyRWZmZWN0LmNwcCBiL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJFZmZlY3QuY3BwCmluZGV4IGMyMjg3MzEuLmVi
YzZhZjAgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0
ZXJFZmZlY3QuY3BwCisrKyBiL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0
ZXJFZmZlY3QuY3BwCkBAIC0yMyw2ICsyMyw3IEBACiAKICNpZiBFTkFCTEUoRklMVEVSUykKICNp
bmNsdWRlICJGaWx0ZXJFZmZlY3QuaCIKKyNpbmNsdWRlICJJbWFnZURhdGEuaCIKIAogbmFtZXNw
YWNlIFdlYkNvcmUgewogCkBAIC01NCwxMCArNTUsMTAgQEAgdm9pZCBGaWx0ZXJFZmZlY3Q6OmRl
dGVybWluZUFic29sdXRlUGFpbnRSZWN0KCkKIAogSW50UmVjdCBGaWx0ZXJFZmZlY3Q6OnJlcXVl
c3RlZFJlZ2lvbk9mSW5wdXRJbWFnZURhdGEoY29uc3QgSW50UmVjdCYgZWZmZWN0UmVjdCkgY29u
c3QKIHsKLSAgICBBU1NFUlQobV9lZmZlY3RCdWZmZXIpOworICAgIEFTU0VSVChoYXNSZXN1bHQo
KSk7CiAgICAgSW50UG9pbnQgbG9jYXRpb24gPSBtX2Fic29sdXRlUGFpbnRSZWN0LmxvY2F0aW9u
KCk7CiAgICAgbG9jYXRpb24ubW92ZSgtZWZmZWN0UmVjdC54KCksIC1lZmZlY3RSZWN0LnkoKSk7
Ci0gICAgcmV0dXJuIEludFJlY3QobG9jYXRpb24sIG1fZWZmZWN0QnVmZmVyLT5zaXplKCkpOwor
ICAgIHJldHVybiBJbnRSZWN0KGxvY2F0aW9uLCBtX2Fic29sdXRlUGFpbnRSZWN0LnNpemUoKSk7
CiB9CiAKIEludFJlY3QgRmlsdGVyRWZmZWN0OjpkcmF3aW5nUmVnaW9uT2ZJbnB1dEltYWdlKGNv
bnN0IEludFJlY3QmIHNyY1JlY3QpIGNvbnN0CkBAIC03MiwxNSArNzMsMTcwIEBAIEZpbHRlckVm
ZmVjdCogRmlsdGVyRWZmZWN0OjppbnB1dEVmZmVjdCh1bnNpZ25lZCBudW1iZXIpIGNvbnN0CiAg
ICAgcmV0dXJuIG1faW5wdXRFZmZlY3RzLmF0KG51bWJlcikuZ2V0KCk7CiB9CiAKLUdyYXBoaWNz
Q29udGV4dCogRmlsdGVyRWZmZWN0OjplZmZlY3RDb250ZXh0KCkKK0ltYWdlQnVmZmVyKiBGaWx0
ZXJFZmZlY3Q6OmFzSW1hZ2VCdWZmZXIoKQogeworICAgIGlmICghaGFzUmVzdWx0KCkpCisgICAg
ICAgIHJldHVybiAwOworICAgIGlmIChtX2ltYWdlQnVmZmVyUmVzdWx0KQorICAgICAgICByZXR1
cm4gbV9pbWFnZUJ1ZmZlclJlc3VsdC5nZXQoKTsKKyAgICBtX2ltYWdlQnVmZmVyUmVzdWx0ID0g
SW1hZ2VCdWZmZXI6OmNyZWF0ZShtX2Fic29sdXRlUGFpbnRSZWN0LnNpemUoKSwgQ29sb3JTcGFj
ZUxpbmVhclJHQik7CisgICAgSW50UmVjdCBkZXN0aW5hdGlvblJlY3QoSW50UG9pbnQoKSwgbV9h
YnNvbHV0ZVBhaW50UmVjdC5zaXplKCkpOworICAgIGlmIChtX3ByZW11bHRpcGxpZWRJbWFnZVJl
c3VsdCkKKyAgICAgICAgbV9pbWFnZUJ1ZmZlclJlc3VsdC0+cHV0UHJlbXVsdGlwbGllZEltYWdl
RGF0YShtX3ByZW11bHRpcGxpZWRJbWFnZVJlc3VsdC5nZXQoKSwgZGVzdGluYXRpb25SZWN0LCBJ
bnRQb2ludCgpKTsKKyAgICBlbHNlCisgICAgICAgIG1faW1hZ2VCdWZmZXJSZXN1bHQtPnB1dFVu
bXVsdGlwbGllZEltYWdlRGF0YShtX3VubXVsdGlwbGllZEltYWdlUmVzdWx0LmdldCgpLCBkZXN0
aW5hdGlvblJlY3QsIEludFBvaW50KCkpOworICAgIHJldHVybiBtX2ltYWdlQnVmZmVyUmVzdWx0
LmdldCgpOworfQorCitQYXNzUmVmUHRyPEltYWdlRGF0YT4gRmlsdGVyRWZmZWN0Ojphc1VubXVs
dGlwbGllZEltYWdlKGNvbnN0IEludFJlY3QmIHJlY3QpCit7CisgICAgUmVmUHRyPEltYWdlRGF0
YT4gaW1hZ2VEYXRhID0gSW1hZ2VEYXRhOjpjcmVhdGUocmVjdC53aWR0aCgpLCByZWN0LmhlaWdo
dCgpKTsKKyAgICBjb3B5VW5tdWx0aXBsaWVkSW1hZ2UoaW1hZ2VEYXRhLmdldCgpLCByZWN0KTsK
KyAgICByZXR1cm4gaW1hZ2VEYXRhLnJlbGVhc2UoKTsKK30KKworUGFzc1JlZlB0cjxJbWFnZURh
dGE+IEZpbHRlckVmZmVjdDo6YXNQcmVtdWx0aXBsaWVkSW1hZ2UoY29uc3QgSW50UmVjdCYgcmVj
dCkKK3sKKyAgICBSZWZQdHI8SW1hZ2VEYXRhPiBpbWFnZURhdGEgPSBJbWFnZURhdGE6OmNyZWF0
ZShyZWN0LndpZHRoKCksIHJlY3QuaGVpZ2h0KCkpOworICAgIGNvcHlQcmVtdWx0aXBsaWVkSW1h
Z2UoaW1hZ2VEYXRhLmdldCgpLCByZWN0KTsKKyAgICByZXR1cm4gaW1hZ2VEYXRhLnJlbGVhc2Uo
KTsKK30KKworaW5saW5lIHZvaWQgRmlsdGVyRWZmZWN0Ojpjb3B5SW1hZ2VCeXRlcyhJbWFnZURh
dGEqIHNvdXJjZSwgSW1hZ2VEYXRhKiBkZXN0aW5hdGlvbiwgY29uc3QgSW50UmVjdCYgcmVjdCkK
K3sKKyAgICAvLyBDb3B5IHRoZSBuZWNlc3NhcnkgbGluZXMuCisgICAgQVNTRVJUKEludFNpemUo
ZGVzdGluYXRpb24tPndpZHRoKCksIGRlc3RpbmF0aW9uLT5oZWlnaHQoKSkgPT0gcmVjdC5zaXpl
KCkpOworICAgIGlmIChyZWN0LngoKSA8IDAgfHwgcmVjdC55KCkgPCAwIHx8IHJlY3QuYm90dG9t
KCkgPiBtX2Fic29sdXRlUGFpbnRSZWN0LndpZHRoKCkgfHwgcmVjdC5ib3R0b20oKSA+IG1fYWJz
b2x1dGVQYWludFJlY3QuaGVpZ2h0KCkpCisgICAgICAgIG1lbXNldChkZXN0aW5hdGlvbi0+ZGF0
YSgpLT5kYXRhKCktPmRhdGEoKSwgMCwgZGVzdGluYXRpb24tPmRhdGEoKS0+bGVuZ3RoKCkpOwor
CisgICAgaW50IHhPcmlnaW4gPSByZWN0LngoKTsKKyAgICBpbnQgeERlc3QgPSAwOworICAgIGlm
ICh4T3JpZ2luIDwgMCkgeworICAgICAgICB4RGVzdCA9IC14T3JpZ2luOworICAgICAgICB4T3Jp
Z2luID0gMDsKKyAgICB9CisgICAgaW50IHhFbmQgPSByZWN0LnJpZ2h0KCk7CisgICAgaWYgKHhF
bmQgPiBtX2Fic29sdXRlUGFpbnRSZWN0LndpZHRoKCkpCisgICAgICAgIHhFbmQgPSBtX2Fic29s
dXRlUGFpbnRSZWN0LndpZHRoKCk7CisKKyAgICBpbnQgeU9yaWdpbiA9IHJlY3QueSgpOworICAg
IGludCB5RGVzdCA9IDA7CisgICAgaWYgKHlPcmlnaW4gPCAwKSB7CisgICAgICAgIHlEZXN0ID0g
LXlPcmlnaW47CisgICAgICAgIHlPcmlnaW4gPSAwOworICAgIH0KKyAgICBpbnQgeUVuZCA9IHJl
Y3QuYm90dG9tKCk7CisgICAgaWYgKHlFbmQgPiBtX2Fic29sdXRlUGFpbnRSZWN0LmhlaWdodCgp
KQorICAgICAgICB5RW5kID0gbV9hYnNvbHV0ZVBhaW50UmVjdC5oZWlnaHQoKTsKKworICAgIGlu
dCBzaXplID0gKHhFbmQgLSB4T3JpZ2luKSAqIDQ7CisgICAgaW50IGRlc3RpbmF0aW9uU2Nhbmxp
bmUgPSByZWN0LndpZHRoKCkgKiA0OworICAgIGludCBzb3VyY2VTY2FubGluZSA9IG1fYWJzb2x1
dGVQYWludFJlY3Qud2lkdGgoKSAqIDQ7CisgICAgdW5zaWduZWQgY2hhciAqZGVzdGluYXRpb25Q
aXhlbCA9IGRlc3RpbmF0aW9uLT5kYXRhKCktPmRhdGEoKS0+ZGF0YSgpICsgKCh5RGVzdCAqIHJl
Y3Qud2lkdGgoKSkgKyB4RGVzdCkgKiA0OworICAgIHVuc2lnbmVkIGNoYXIgKnNvdXJjZVBpeGVs
ID0gc291cmNlLT5kYXRhKCktPmRhdGEoKS0+ZGF0YSgpICsgKCh5T3JpZ2luICogbV9hYnNvbHV0
ZVBhaW50UmVjdC53aWR0aCgpKSArIHhPcmlnaW4pICogNDsKKworICAgIHdoaWxlICh5T3JpZ2lu
IDwgeUVuZCkgeworICAgICAgICBtZW1jcHkoZGVzdGluYXRpb25QaXhlbCwgc291cmNlUGl4ZWws
IHNpemUpOworICAgICAgICBkZXN0aW5hdGlvblBpeGVsICs9IGRlc3RpbmF0aW9uU2NhbmxpbmU7
CisgICAgICAgIHNvdXJjZVBpeGVsICs9IHNvdXJjZVNjYW5saW5lOworICAgICAgICArK3lPcmln
aW47CisgICAgfQorfQorCit2b2lkIEZpbHRlckVmZmVjdDo6Y29weVVubXVsdGlwbGllZEltYWdl
KEltYWdlRGF0YSogZGVzdGluYXRpb24sIGNvbnN0IEludFJlY3QmIHJlY3QpCit7CisgICAgQVNT
RVJUKGhhc1Jlc3VsdCgpKTsKKworICAgIGlmICghbV91bm11bHRpcGxpZWRJbWFnZVJlc3VsdCkg
eworICAgICAgICAvLyBXZSBwcmVmZXIgYSBjb252ZXJzaW9uIGZyb20gdGhlIGltYWdlIGJ1ZmZl
ci4KKyAgICAgICAgaWYgKG1faW1hZ2VCdWZmZXJSZXN1bHQpCisgICAgICAgICAgICBtX3VubXVs
dGlwbGllZEltYWdlUmVzdWx0ID0gbV9pbWFnZUJ1ZmZlclJlc3VsdC0+Z2V0VW5tdWx0aXBsaWVk
SW1hZ2VEYXRhKEludFJlY3QoSW50UG9pbnQoKSwgbV9hYnNvbHV0ZVBhaW50UmVjdC5zaXplKCkp
KTsKKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICBtX3VubXVsdGlwbGllZEltYWdlUmVzdWx0
ID0gSW1hZ2VEYXRhOjpjcmVhdGUobV9hYnNvbHV0ZVBhaW50UmVjdC53aWR0aCgpLCBtX2Fic29s
dXRlUGFpbnRSZWN0LmhlaWdodCgpKTsKKyAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIqIHNvdXJj
ZUNvbXBvbmVudCA9IG1fcHJlbXVsdGlwbGllZEltYWdlUmVzdWx0LT5kYXRhKCktPmRhdGEoKS0+
ZGF0YSgpOworICAgICAgICAgICAgdW5zaWduZWQgY2hhciogZGVzdGluYXRpb25Db21wb25lbnQg
PSBtX3VubXVsdGlwbGllZEltYWdlUmVzdWx0LT5kYXRhKCktPmRhdGEoKS0+ZGF0YSgpOworICAg
ICAgICAgICAgdW5zaWduZWQgY2hhciogZW5kID0gc291cmNlQ29tcG9uZW50ICsgKG1fYWJzb2x1
dGVQYWludFJlY3Qud2lkdGgoKSAqIG1fYWJzb2x1dGVQYWludFJlY3QuaGVpZ2h0KCkgKiA0KTsK
KyAgICAgICAgICAgIHdoaWxlIChzb3VyY2VDb21wb25lbnQgPCBlbmQpIHsKKyAgICAgICAgICAg
ICAgICBpbnQgYWxwaGEgPSBzb3VyY2VDb21wb25lbnRbM107CisgICAgICAgICAgICAgICAgaWYg
KGFscGhhKSB7CisgICAgICAgICAgICAgICAgICAgIGRlc3RpbmF0aW9uQ29tcG9uZW50WzBdID0g
c3RhdGljX2Nhc3Q8aW50Pihzb3VyY2VDb21wb25lbnRbMF0pICogMjU1IC8gYWxwaGE7CisgICAg
ICAgICAgICAgICAgICAgIGRlc3RpbmF0aW9uQ29tcG9uZW50WzFdID0gc3RhdGljX2Nhc3Q8aW50
Pihzb3VyY2VDb21wb25lbnRbMV0pICogMjU1IC8gYWxwaGE7CisgICAgICAgICAgICAgICAgICAg
IGRlc3RpbmF0aW9uQ29tcG9uZW50WzJdID0gc3RhdGljX2Nhc3Q8aW50Pihzb3VyY2VDb21wb25l
bnRbMl0pICogMjU1IC8gYWxwaGE7CisgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAg
ICAgICAgICAgICAgZGVzdGluYXRpb25Db21wb25lbnRbMF0gPSAwOworICAgICAgICAgICAgICAg
ICAgICBkZXN0aW5hdGlvbkNvbXBvbmVudFsxXSA9IDA7CisgICAgICAgICAgICAgICAgICAgIGRl
c3RpbmF0aW9uQ29tcG9uZW50WzJdID0gMDsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAg
ICAgICAgZGVzdGluYXRpb25Db21wb25lbnRbM10gPSBhbHBoYTsKKyAgICAgICAgICAgICAgICBz
b3VyY2VDb21wb25lbnQgKz0gNDsKKyAgICAgICAgICAgICAgICBkZXN0aW5hdGlvbkNvbXBvbmVu
dCArPSA0OworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorICAgIGNvcHlJbWFnZUJ5
dGVzKG1fdW5tdWx0aXBsaWVkSW1hZ2VSZXN1bHQuZ2V0KCksIGRlc3RpbmF0aW9uLCByZWN0KTsK
K30KKwordm9pZCBGaWx0ZXJFZmZlY3Q6OmNvcHlQcmVtdWx0aXBsaWVkSW1hZ2UoSW1hZ2VEYXRh
KiBkZXN0aW5hdGlvbiwgY29uc3QgSW50UmVjdCYgcmVjdCkKK3sKKyAgICBBU1NFUlQoaGFzUmVz
dWx0KCkpOworCisgICAgaWYgKCFtX3ByZW11bHRpcGxpZWRJbWFnZVJlc3VsdCkgeworICAgICAg
ICAvLyBXZSBwcmVmZXIgYSBjb252ZXJzaW9uIGZyb20gdGhlIGltYWdlIGJ1ZmZlci4KKyAgICAg
ICAgaWYgKG1faW1hZ2VCdWZmZXJSZXN1bHQpCisgICAgICAgICAgICBtX3ByZW11bHRpcGxpZWRJ
bWFnZVJlc3VsdCA9IG1faW1hZ2VCdWZmZXJSZXN1bHQtPmdldFByZW11bHRpcGxpZWRJbWFnZURh
dGEoSW50UmVjdChJbnRQb2ludCgpLCBtX2Fic29sdXRlUGFpbnRSZWN0LnNpemUoKSkpOworICAg
ICAgICBlbHNlIHsKKyAgICAgICAgICAgIG1fcHJlbXVsdGlwbGllZEltYWdlUmVzdWx0ID0gSW1h
Z2VEYXRhOjpjcmVhdGUobV9hYnNvbHV0ZVBhaW50UmVjdC53aWR0aCgpLCBtX2Fic29sdXRlUGFp
bnRSZWN0LmhlaWdodCgpKTsKKyAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIqIHNvdXJjZUNvbXBv
bmVudCA9IG1fdW5tdWx0aXBsaWVkSW1hZ2VSZXN1bHQtPmRhdGEoKS0+ZGF0YSgpLT5kYXRhKCk7
CisgICAgICAgICAgICB1bnNpZ25lZCBjaGFyKiBkZXN0aW5hdGlvbkNvbXBvbmVudCA9IG1fcHJl
bXVsdGlwbGllZEltYWdlUmVzdWx0LT5kYXRhKCktPmRhdGEoKS0+ZGF0YSgpOworICAgICAgICAg
ICAgdW5zaWduZWQgY2hhciogZW5kID0gc291cmNlQ29tcG9uZW50ICsgKG1fYWJzb2x1dGVQYWlu
dFJlY3Qud2lkdGgoKSAqIG1fYWJzb2x1dGVQYWludFJlY3QuaGVpZ2h0KCkgKiA0KTsKKyAgICAg
ICAgICAgIHdoaWxlIChzb3VyY2VDb21wb25lbnQgPCBlbmQpIHsKKyAgICAgICAgICAgICAgICBp
bnQgYWxwaGEgPSBzb3VyY2VDb21wb25lbnRbM107CisgICAgICAgICAgICAgICAgZGVzdGluYXRp
b25Db21wb25lbnRbMF0gPSBzdGF0aWNfY2FzdDxpbnQ+KHNvdXJjZUNvbXBvbmVudFswXSkgKiBh
bHBoYSAvIDI1NTsKKyAgICAgICAgICAgICAgICBkZXN0aW5hdGlvbkNvbXBvbmVudFsxXSA9IHN0
YXRpY19jYXN0PGludD4oc291cmNlQ29tcG9uZW50WzFdKSAqIGFscGhhIC8gMjU1OworICAgICAg
ICAgICAgICAgIGRlc3RpbmF0aW9uQ29tcG9uZW50WzJdID0gc3RhdGljX2Nhc3Q8aW50Pihzb3Vy
Y2VDb21wb25lbnRbMl0pICogYWxwaGEgLyAyNTU7CisgICAgICAgICAgICAgICAgZGVzdGluYXRp
b25Db21wb25lbnRbM10gPSBhbHBoYTsKKyAgICAgICAgICAgICAgICBzb3VyY2VDb21wb25lbnQg
Kz0gNDsKKyAgICAgICAgICAgICAgICBkZXN0aW5hdGlvbkNvbXBvbmVudCArPSA0OworICAgICAg
ICAgICAgfQorICAgICAgICB9CisgICAgfQorICAgIGNvcHlJbWFnZUJ5dGVzKG1fcHJlbXVsdGlw
bGllZEltYWdlUmVzdWx0LmdldCgpLCBkZXN0aW5hdGlvbiwgcmVjdCk7Cit9CisKK0ltYWdlQnVm
ZmVyKiBGaWx0ZXJFZmZlY3Q6OmNyZWF0ZUltYWdlQnVmZmVyUmVzdWx0KCkKK3sKKyAgICAvLyBP
bmx5IG9uZSByZXN1bHQgdHlwZSBpcyBhbGxvd2VkLgorICAgIEFTU0VSVCghaGFzUmVzdWx0KCkp
OworICAgIGRldGVybWluZUFic29sdXRlUGFpbnRSZWN0KCk7CisgICAgaWYgKG1fYWJzb2x1dGVQ
YWludFJlY3QuaXNFbXB0eSgpKQorICAgICAgICByZXR1cm4gMDsKKyAgICBtX2ltYWdlQnVmZmVy
UmVzdWx0ID0gSW1hZ2VCdWZmZXI6OmNyZWF0ZShtX2Fic29sdXRlUGFpbnRSZWN0LnNpemUoKSwg
Q29sb3JTcGFjZUxpbmVhclJHQik7CisgICAgaWYgKCFtX2ltYWdlQnVmZmVyUmVzdWx0KQorICAg
ICAgICByZXR1cm4gMDsKKyAgICBBU1NFUlQobV9pbWFnZUJ1ZmZlclJlc3VsdC0+Y29udGV4dCgp
KTsKKyAgICByZXR1cm4gbV9pbWFnZUJ1ZmZlclJlc3VsdC5nZXQoKTsKK30KKworSW1hZ2VEYXRh
KiBGaWx0ZXJFZmZlY3Q6OmNyZWF0ZVVubXVsdGlwbGllZEltYWdlUmVzdWx0KCkKK3sKKyAgICAv
LyBPbmx5IG9uZSByZXN1bHQgdHlwZSBpcyBhbGxvd2VkLgorICAgIEFTU0VSVCghaGFzUmVzdWx0
KCkpOwogICAgIGRldGVybWluZUFic29sdXRlUGFpbnRSZWN0KCk7CiAgICAgaWYgKG1fYWJzb2x1
dGVQYWludFJlY3QuaXNFbXB0eSgpKQogICAgICAgICByZXR1cm4gMDsKLSAgICBtX2VmZmVjdEJ1
ZmZlciA9IEltYWdlQnVmZmVyOjpjcmVhdGUobV9hYnNvbHV0ZVBhaW50UmVjdC5zaXplKCksIENv
bG9yU3BhY2VMaW5lYXJSR0IpOwotICAgIGlmICghbV9lZmZlY3RCdWZmZXIpCisgICAgbV91bm11
bHRpcGxpZWRJbWFnZVJlc3VsdCA9IEltYWdlRGF0YTo6Y3JlYXRlKG1fYWJzb2x1dGVQYWludFJl
Y3Qud2lkdGgoKSwgbV9hYnNvbHV0ZVBhaW50UmVjdC5oZWlnaHQoKSk7CisgICAgcmV0dXJuIG1f
dW5tdWx0aXBsaWVkSW1hZ2VSZXN1bHQuZ2V0KCk7Cit9CisKK0ltYWdlRGF0YSogRmlsdGVyRWZm
ZWN0OjpjcmVhdGVQcmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQoKQoreworICAgIC8vIE9ubHkgb25l
IHJlc3VsdCB0eXBlIGlzIGFsbG93ZWQuCisgICAgQVNTRVJUKCFoYXNSZXN1bHQoKSk7CisgICAg
ZGV0ZXJtaW5lQWJzb2x1dGVQYWludFJlY3QoKTsKKyAgICBpZiAobV9hYnNvbHV0ZVBhaW50UmVj
dC5pc0VtcHR5KCkpCiAgICAgICAgIHJldHVybiAwOwotICAgIHJldHVybiBtX2VmZmVjdEJ1ZmZl
ci0+Y29udGV4dCgpOworICAgIG1fcHJlbXVsdGlwbGllZEltYWdlUmVzdWx0ID0gSW1hZ2VEYXRh
OjpjcmVhdGUobV9hYnNvbHV0ZVBhaW50UmVjdC53aWR0aCgpLCBtX2Fic29sdXRlUGFpbnRSZWN0
LmhlaWdodCgpKTsKKyAgICByZXR1cm4gbV9wcmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQuZ2V0KCk7
CiB9CiAKIFRleHRTdHJlYW0mIEZpbHRlckVmZmVjdDo6ZXh0ZXJuYWxSZXByZXNlbnRhdGlvbihU
ZXh0U3RyZWFtJiB0cywgaW50KSBjb25zdApkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9maWx0ZXJzL0ZpbHRlckVmZmVjdC5oIGIvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9maWx0ZXJzL0ZpbHRlckVmZmVjdC5oCmluZGV4IGY5Njc0ZTIuLjgxZDU0MDkgMTAwNjQ0Ci0t
LSBhL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJFZmZlY3QuaAorKysg
Yi9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyRWZmZWN0LmgKQEAgLTUw
LDEzICs1MCwxMiBAQCBjbGFzcyBGaWx0ZXJFZmZlY3QgOiBwdWJsaWMgUmVmQ291bnRlZDxGaWx0
ZXJFZmZlY3Q+IHsKIHB1YmxpYzoKICAgICB2aXJ0dWFsIH5GaWx0ZXJFZmZlY3QoKTsKIAotICAg
IC8vIFRoZSByZXN1bHQgaXMgYm91bmRlZCB0byB0aGUgc2l6ZSBvZiB0aGUgZmlsdGVyIHByaW1p
dGl2ZSB0byBzYXZlIHJlc291cmNlcy4KLSAgICBJbWFnZUJ1ZmZlciogcmVzdWx0SW1hZ2UoKSBj
b25zdCB7IHJldHVybiBtX2VmZmVjdEJ1ZmZlci5nZXQoKTsgfQotICAgIHZvaWQgc2V0RWZmZWN0
QnVmZmVyKFBhc3NPd25QdHI8SW1hZ2VCdWZmZXI+IGVmZmVjdEJ1ZmZlcikgeyBtX2VmZmVjdEJ1
ZmZlciA9IGVmZmVjdEJ1ZmZlcjsgfQotCi0gICAgLy8gQ3JlYXRlcyB0aGUgSW1hZ2VCdWZmZXIg
Zm9yIHRoZSBjdXJyZW50IGZpbHRlciBwcmltaXRpdmUgcmVzdWx0IGluIHRoZSBzaXplIG9mIHRo
ZQotICAgIC8vIHJlcGFpbnRSZWN0LiBHaXZlcyBiYWNrIHRoZSBHcmFwaGljc0NvbnRleHQgb2Yg
dGhlIG93biBJbWFnZUJ1ZmZlci4KLSAgICBHcmFwaGljc0NvbnRleHQqIGVmZmVjdENvbnRleHQo
KTsKKyAgICBib29sIGhhc1Jlc3VsdCgpIGNvbnN0IHsgcmV0dXJuIG1faW1hZ2VCdWZmZXJSZXN1
bHQgfHwgbV91bm11bHRpcGxpZWRJbWFnZVJlc3VsdCB8fCBtX3ByZW11bHRpcGxpZWRJbWFnZVJl
c3VsdDsgfQorICAgIEltYWdlQnVmZmVyKiBhc0ltYWdlQnVmZmVyKCk7CisgICAgUGFzc1JlZlB0
cjxJbWFnZURhdGE+IGFzVW5tdWx0aXBsaWVkSW1hZ2UoY29uc3QgSW50UmVjdCYpOworICAgIFBh
c3NSZWZQdHI8SW1hZ2VEYXRhPiBhc1ByZW11bHRpcGxpZWRJbWFnZShjb25zdCBJbnRSZWN0Jik7
CisgICAgdm9pZCBjb3B5VW5tdWx0aXBsaWVkSW1hZ2UoSW1hZ2VEYXRhKiBkZXN0aW5hdGlvbiwg
Y29uc3QgSW50UmVjdCYpOworICAgIHZvaWQgY29weVByZW11bHRpcGxpZWRJbWFnZShJbWFnZURh
dGEqIGRlc3RpbmF0aW9uLCBjb25zdCBJbnRSZWN0Jik7CiAKICAgICBGaWx0ZXJFZmZlY3RWZWN0
b3ImIGlucHV0RWZmZWN0cygpIHsgcmV0dXJuIG1faW5wdXRFZmZlY3RzOyB9CiAgICAgRmlsdGVy
RWZmZWN0KiBpbnB1dEVmZmVjdCh1bnNpZ25lZCkgY29uc3Q7CkBAIC0xMTAsOCArMTA5LDE0IEBA
IHB1YmxpYzoKIHByb3RlY3RlZDoKICAgICBGaWx0ZXJFZmZlY3QoRmlsdGVyKik7CiAKKyAgICBJ
bWFnZUJ1ZmZlciogY3JlYXRlSW1hZ2VCdWZmZXJSZXN1bHQoKTsKKyAgICBJbWFnZURhdGEqIGNy
ZWF0ZVVubXVsdGlwbGllZEltYWdlUmVzdWx0KCk7CisgICAgSW1hZ2VEYXRhKiBjcmVhdGVQcmVt
dWx0aXBsaWVkSW1hZ2VSZXN1bHQoKTsKKwogcHJpdmF0ZToKLSAgICBPd25QdHI8SW1hZ2VCdWZm
ZXI+IG1fZWZmZWN0QnVmZmVyOworICAgIE93blB0cjxJbWFnZUJ1ZmZlcj4gbV9pbWFnZUJ1ZmZl
clJlc3VsdDsKKyAgICBSZWZQdHI8SW1hZ2VEYXRhPiBtX3VubXVsdGlwbGllZEltYWdlUmVzdWx0
OworICAgIFJlZlB0cjxJbWFnZURhdGE+IG1fcHJlbXVsdGlwbGllZEltYWdlUmVzdWx0OwogICAg
IEZpbHRlckVmZmVjdFZlY3RvciBtX2lucHV0RWZmZWN0czsKIAogICAgIGJvb2wgbV9hbHBoYUlt
YWdlOwpAQCAtMTI0LDYgKzEyOSw4IEBAIHByaXZhdGU6CiAgICAgRmlsdGVyKiBtX2ZpbHRlcjsK
IAogcHJpdmF0ZToKKyAgICBpbmxpbmUgdm9pZCBjb3B5SW1hZ2VCeXRlcyhJbWFnZURhdGEqIHNv
dXJjZSwgSW1hZ2VEYXRhKiBkZXN0aW5hdGlvbiwgY29uc3QgSW50UmVjdCYpOworCiAgICAgLy8g
VGhlIGZvbGxvd2luZyBtZW1iZXIgdmFyaWFibGVzIGFyZSBTVkcgc3BlY2lmaWMgYW5kIHdpbGwg
bW92ZSB0byBSZW5kZXJTVkdSZXNvdXJjZUZpbHRlclByaW1pdGl2ZS4KICAgICAvLyBTZWUgYnVn
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD00NTYxNC4KIApkaWZmIC0t
Z2l0IGEvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL1NvdXJjZUFscGhhLmNwcCBi
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9Tb3VyY2VBbHBoYS5jcHAKaW5kZXgg
YTUwNWI0Yi4uMmQyZGUwMCAxMDA2NDQKLS0tIGEvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9m
aWx0ZXJzL1NvdXJjZUFscGhhLmNwcAorKysgYi9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Zp
bHRlcnMvU291cmNlQWxwaGEuY3BwCkBAIC01MiwxNCArNTIsMTcgQEAgdm9pZCBTb3VyY2VBbHBo
YTo6ZGV0ZXJtaW5lQWJzb2x1dGVQYWludFJlY3QoKQogCiB2b2lkIFNvdXJjZUFscGhhOjphcHBs
eSgpCiB7Ci0gICAgR3JhcGhpY3NDb250ZXh0KiBmaWx0ZXJDb250ZXh0ID0gZWZmZWN0Q29udGV4
dCgpOworICAgIGlmIChoYXNSZXN1bHQoKSkKKyAgICAgICAgcmV0dXJuOworICAgIEltYWdlQnVm
ZmVyKiByZXN1bHRJbWFnZSA9IGNyZWF0ZUltYWdlQnVmZmVyUmVzdWx0KCk7CiAgICAgRmlsdGVy
KiBmaWx0ZXIgPSB0aGlzLT5maWx0ZXIoKTsKLSAgICBpZiAoIWZpbHRlckNvbnRleHQgfHwgIWZp
bHRlci0+c291cmNlSW1hZ2UoKSkKKyAgICBpZiAoIXJlc3VsdEltYWdlIHx8ICFmaWx0ZXItPnNv
dXJjZUltYWdlKCkpCiAgICAgICAgIHJldHVybjsKIAogICAgIHNldElzQWxwaGFJbWFnZSh0cnVl
KTsKIAogICAgIEZsb2F0UmVjdCBpbWFnZVJlY3QoRmxvYXRQb2ludCgpLCBhYnNvbHV0ZVBhaW50
UmVjdCgpLnNpemUoKSk7CisgICAgR3JhcGhpY3NDb250ZXh0KiBmaWx0ZXJDb250ZXh0ID0gcmVz
dWx0SW1hZ2UtPmNvbnRleHQoKTsKICAgICBmaWx0ZXJDb250ZXh0LT5zYXZlKCk7CiAgICAgZmls
dGVyQ29udGV4dC0+Y2xpcFRvSW1hZ2VCdWZmZXIoZmlsdGVyLT5zb3VyY2VJbWFnZSgpLCBpbWFn
ZVJlY3QpOwogICAgIGZpbHRlckNvbnRleHQtPmZpbGxSZWN0KGltYWdlUmVjdCwgQ29sb3I6OmJs
YWNrLCBDb2xvclNwYWNlRGV2aWNlUkdCKTsKZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvZmlsdGVycy9Tb3VyY2VHcmFwaGljLmNwcCBiL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvZmlsdGVycy9Tb3VyY2VHcmFwaGljLmNwcAppbmRleCA2YWFjMzY3Li4wNDA4MmFkIDEw
MDY0NAotLS0gYS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvU291cmNlR3JhcGhp
Yy5jcHAKKysrIGIvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL1NvdXJjZUdyYXBo
aWMuY3BwCkBAIC01MSwxMiArNTEsMTQgQEAgdm9pZCBTb3VyY2VHcmFwaGljOjpkZXRlcm1pbmVB
YnNvbHV0ZVBhaW50UmVjdCgpCiAKIHZvaWQgU291cmNlR3JhcGhpYzo6YXBwbHkoKQogewotICAg
IEdyYXBoaWNzQ29udGV4dCogZmlsdGVyQ29udGV4dCA9IGVmZmVjdENvbnRleHQoKTsKKyAgICBp
ZiAoaGFzUmVzdWx0KCkpCisgICAgICAgIHJldHVybjsKKyAgICBJbWFnZUJ1ZmZlciogcmVzdWx0
SW1hZ2UgPSBjcmVhdGVJbWFnZUJ1ZmZlclJlc3VsdCgpOwogICAgIEZpbHRlciogZmlsdGVyID0g
dGhpcy0+ZmlsdGVyKCk7Ci0gICAgaWYgKCFmaWx0ZXJDb250ZXh0IHx8ICFmaWx0ZXItPnNvdXJj
ZUltYWdlKCkpCisgICAgaWYgKCFyZXN1bHRJbWFnZSB8fCAhZmlsdGVyLT5zb3VyY2VJbWFnZSgp
KQogICAgICAgICByZXR1cm47CiAKLSAgICBmaWx0ZXJDb250ZXh0LT5kcmF3SW1hZ2VCdWZmZXIo
ZmlsdGVyLT5zb3VyY2VJbWFnZSgpLCBDb2xvclNwYWNlRGV2aWNlUkdCLCBJbnRQb2ludCgpKTsK
KyAgICByZXN1bHRJbWFnZS0+Y29udGV4dCgpLT5kcmF3SW1hZ2VCdWZmZXIoZmlsdGVyLT5zb3Vy
Y2VJbWFnZSgpLCBDb2xvclNwYWNlRGV2aWNlUkdCLCBJbnRQb2ludCgpKTsKIH0KIAogdm9pZCBT
b3VyY2VHcmFwaGljOjpkdW1wKCkKZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvZmlsdGVycy9Tb3VyY2VHcmFwaGljLmggYi9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Zp
bHRlcnMvU291cmNlR3JhcGhpYy5oCmluZGV4IGZhNDdmMTIuLjk3ZDY4ODIgMTAwNjQ0Ci0tLSBh
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9Tb3VyY2VHcmFwaGljLmgKKysrIGIv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL1NvdXJjZUdyYXBoaWMuaApAQCAtMTks
NyArMTksNyBAQAogICovCiAKICNpZm5kZWYgU291cmNlR3JhcGhpY19oCi0jZGVmaW5lIFNvdXJj
ZUdyYWhwaWNfaAorI2RlZmluZSBTb3VyY2VHcmFwaGljX2gKIAogI2lmIEVOQUJMRShGSUxURVJT
KQogI2luY2x1ZGUgIkZpbHRlckVmZmVjdC5oIgpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9yZW5kZXJp
bmcvUmVuZGVyU1ZHUmVzb3VyY2VGaWx0ZXIuY3BwIGIvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVy
U1ZHUmVzb3VyY2VGaWx0ZXIuY3BwCmluZGV4IDJlZDkyYmQuLjhhYTkzNzAgMTAwNjQ0Ci0tLSBh
L1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclNWR1Jlc291cmNlRmlsdGVyLmNwcAorKysgYi9XZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJTVkdSZXNvdXJjZUZpbHRlci5jcHAKQEAgLTI5MywxNCArMjkz
LDE0IEBAIHZvaWQgUmVuZGVyU1ZHUmVzb3VyY2VGaWx0ZXI6OnBvc3RBcHBseVJlc291cmNlKFJl
bmRlck9iamVjdCogb2JqZWN0LCBHcmFwaGljc0NvCiAgICAgICAgICAgICBmaWx0ZXJEYXRhLT5m
aWx0ZXItPnNldFNvdXJjZUltYWdlKGZpbHRlckRhdGEtPnNvdXJjZUdyYXBoaWNCdWZmZXIucmVs
ZWFzZSgpKTsKICAgICAgICAgICAgIGxhc3RFZmZlY3QtPmFwcGx5KCk7CiAjaWYgIVBMQVRGT1JN
KENHKQotICAgICAgICAgICAgSW1hZ2VCdWZmZXIqIHJlc3VsdEltYWdlID0gbGFzdEVmZmVjdC0+
cmVzdWx0SW1hZ2UoKTsKKyAgICAgICAgICAgIEltYWdlQnVmZmVyKiByZXN1bHRJbWFnZSA9IGxh
c3RFZmZlY3QtPmFzSW1hZ2VCdWZmZXIoKTsKICAgICAgICAgICAgIGlmIChyZXN1bHRJbWFnZSkK
ICAgICAgICAgICAgICAgICByZXN1bHRJbWFnZS0+dHJhbnNmb3JtQ29sb3JTcGFjZShDb2xvclNw
YWNlTGluZWFyUkdCLCBDb2xvclNwYWNlRGV2aWNlUkdCKTsKICNlbmRpZgogICAgICAgICAgICAg
ZmlsdGVyRGF0YS0+YnVpbGRlZCA9IHRydWU7CiAgICAgICAgIH0KIAotICAgICAgICBJbWFnZUJ1
ZmZlciogcmVzdWx0SW1hZ2UgPSBsYXN0RWZmZWN0LT5yZXN1bHRJbWFnZSgpOworICAgICAgICBJ
bWFnZUJ1ZmZlciogcmVzdWx0SW1hZ2UgPSBsYXN0RWZmZWN0LT5hc0ltYWdlQnVmZmVyKCk7CiAg
ICAgICAgIGlmIChyZXN1bHRJbWFnZSkgewogICAgICAgICAgICAgY29udGV4dC0+Y29uY2F0Q1RN
KGZpbHRlckRhdGEtPnNoZWFyRnJlZUFic29sdXRlVHJhbnNmb3JtLmludmVyc2UoKSk7CiAKZGlm
ZiAtLWdpdCBhL1dlYkNvcmUvc3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZHRkVJbWFnZS5jcHAgYi9X
ZWJDb3JlL3N2Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0ZFSW1hZ2UuY3BwCmluZGV4IDZhMTkxNGEu
LmI1YWU0NjYgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvc3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZHRkVJ
bWFnZS5jcHAKKysrIGIvV2ViQ29yZS9zdmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdGRUltYWdlLmNw
cApAQCAtNTksOCArNTksOCBAQCB2b2lkIEZFSW1hZ2U6OmFwcGx5KCkKICAgICBpZiAoIW1faW1h
Z2UuZ2V0KCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIEdyYXBoaWNzQ29udGV4dCogZmlsdGVy
Q29udGV4dCA9IGVmZmVjdENvbnRleHQoKTsKLSAgICBpZiAoIWZpbHRlckNvbnRleHQpCisgICAg
SW1hZ2VCdWZmZXIqIHJlc3VsdEltYWdlID0gY3JlYXRlSW1hZ2VCdWZmZXJSZXN1bHQoKTsKKyAg
ICBpZiAoIXJlc3VsdEltYWdlKQogICAgICAgICByZXR1cm47CiAKICAgICBGbG9hdFJlY3Qgc3Jj
UmVjdChGbG9hdFBvaW50KCksIG1faW1hZ2UtPnNpemUoKSk7CkBAIC03MCw3ICs3MCw3IEBAIHZv
aWQgRkVJbWFnZTo6YXBwbHkoKQogICAgIEludFBvaW50IHBhaW50TG9jYXRpb24gPSBhYnNvbHV0
ZVBhaW50UmVjdCgpLmxvY2F0aW9uKCk7CiAgICAgZGVzdFJlY3QubW92ZSgtcGFpbnRMb2NhdGlv
bi54KCksIC1wYWludExvY2F0aW9uLnkoKSk7CiAKLSAgICBmaWx0ZXJDb250ZXh0LT5kcmF3SW1h
Z2UobV9pbWFnZS5nZXQoKSwgQ29sb3JTcGFjZURldmljZVJHQiwgZGVzdFJlY3QsIHNyY1JlY3Qp
OworICAgIHJlc3VsdEltYWdlLT5jb250ZXh0KCktPmRyYXdJbWFnZShtX2ltYWdlLmdldCgpLCBD
b2xvclNwYWNlRGV2aWNlUkdCLCBkZXN0UmVjdCwgc3JjUmVjdCk7CiB9CiAKIHZvaWQgRkVJbWFn
ZTo6ZHVtcCgpCi0tIAoxLjYuMC40Cgo=
</data>
<flag name="review"
          id="66631"
          type_id="1"
          status="+"
          setter="krit"
    />
          </attachment>
      

    </bug>

</bugzilla>