<?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>46052</bug_id>
          
          <creation_ts>2010-09-19 09:25:53 -0700</creation_ts>
          <short_desc>SVG: Remove &quot;create&quot; methods and use port-specific &quot;add&quot; counterparts</short_desc>
          <delta_ts>2010-10-12 01:12:45 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>SVG</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>46051</dependson>
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Andreas Kling">kling</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>abarth</cc>
    
    <cc>darin</cc>
    
    <cc>eric</cc>
    
    <cc>jeffschiller</cc>
    
    <cc>krit</cc>
    
    <cc>ossy</cc>
    
    <cc>webkit.review.bot</cc>
    
    <cc>zimmermann</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>281277</commentid>
    <comment_count>0</comment_count>
    <who name="Andreas Kling">kling</who>
    <bug_when>2010-09-19 09:25:53 -0700</bug_when>
    <thetext>We should use the port-specific Path::addEllipse() to speed up Path::createEllipse() (which is also used by Path::createCircle()) instead of manually constructing the ellipses from lines.

See also: https://lists.webkit.org/pipermail/webkit-dev/2010-September/014419.html</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>281289</commentid>
    <comment_count>1</comment_count>
      <attachid>68030</attachid>
    <who name="Andreas Kling">kling</who>
    <bug_when>2010-09-19 11:17:20 -0700</bug_when>
    <thetext>Created attachment 68030
Proposed patch (not to be landed before 46051 is resolved)

Note that this patch will require re-baselining of many tests, so I won&apos;t be landing it until 46051 is resolved.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>281484</commentid>
    <comment_count>2</comment_count>
      <attachid>68030</attachid>
    <who name="Nikolas Zimmermann">zimmermann</who>
    <bug_when>2010-09-20 04:04:57 -0700</bug_when>
    <thetext>Comment on attachment 68030
Proposed patch (not to be landed before 46051 is resolved)

r=me, as soon as the DRT bug is resolved first.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>291602</commentid>
    <comment_count>3</comment_count>
      <attachid>70238</attachid>
    <who name="Andreas Kling">kling</who>
    <bug_when>2010-10-08 06:22:53 -0700</bug_when>
    <thetext>Created attachment 70238
Proposed patch v2

New patch as discussed on IRC.
I&apos;ve removed all the static Path::create* methods and replaced their usage with Path::add*</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>291610</commentid>
    <comment_count>4</comment_count>
      <attachid>70238</attachid>
    <who name="Nikolas Zimmermann">zimmermann</who>
    <bug_when>2010-10-08 06:37:15 -0700</bug_when>
    <thetext>Comment on attachment 70238
Proposed patch v2

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

Good first try, looking forward to the next version.

&gt; WebCore/platform/graphics/Path.cpp:121
&gt;      if (width &lt;= 0.0f || height &lt;= 0.0f)

Please use if (width &lt;= 0 || height &lt;= 0).
If there are more cases of &quot;.f&quot; postfixes in this file, please kill them.

&gt; WebCore/platform/graphics/Path.cpp:133
&gt;      if (dy &gt; height * 0.5f)
&gt;          dy = height * 0.5f;

s/0.5f/0.5/

&gt; WebCore/platform/graphics/Path.cpp:140
&gt; +    addBezierCurveTo(FloatPoint(x + width - dx * (1 - QUARTER), y), FloatPoint(x + width, y + dy * (1 - QUARTER)), FloatPoint(x + width, y + dy));

QUARTER has an evil name, please rename it to something sensible, and use the &quot;g&quot; prefix.

&gt; WebCore/platform/graphics/Path.cpp:164
&gt;      if (width &lt;= 0.0 || height &lt;= 0.0)

if (width &lt;= 0 || height &lt;= 0)

&gt; WebCore/platform/graphics/Path.cpp:204
&gt; +#if 0

No #if 0 code please remove it alltogether, or is there a difference between addRect and addRectangle?

&gt; WebCore/platform/graphics/Path.h:147
&gt; +        void addRoundedRectangle(const FloatRect&amp;, const FloatSize&amp; roundingRadii);

Can you move them below the existing add methods?

&gt; WebCore/platform/graphics/cairo/GraphicsContextCairo.cpp:706
&gt; +    for (unsigned i = 0; i &lt; rectCount; i++) {

While you&apos;re at it s/i++/++i/

&gt; WebCore/platform/graphics/cairo/GraphicsContextCairo.cpp:1282
&gt; +    {

Why do you wrap this in braces?

&gt; WebCore/rendering/RenderBoxModelObject.cpp:1756
&gt; +                Path path;

Declare the Path path;  outside of hasBorderRadius and...

&gt; WebCore/rendering/RenderBoxModelObject.cpp:1767
&gt; +                Path path;

... reuse it hear (with a path.clear() before)...

&gt; WebCore/rendering/RenderBoxModelObject.cpp:1776
&gt; +                Path path;

...here...

&gt; WebCore/rendering/RenderBoxModelObject.cpp:1780
&gt; +                Path path;

...and here...

&gt; WebCore/svg/SVGCircleElement.cpp:131
&gt; +    path.addEllipse(FloatRect(cx().value(this) - radius,

I wouldn&apos;t wrap the lines here.

&gt; WebCore/svg/SVGEllipseElement.cpp:135
&gt; +    float radiusX = rx().value(this);

Micro optimization: immediately check if (radiusX &lt;= 0) return;.
No need to call ry().value() in that case.

&gt; WebCore/svg/SVGEllipseElement.cpp:141
&gt; +    path.addEllipse(FloatRect(cx().value(this) - radiusX,

I wouldn&apos;t wrap the lines here.

&gt; WebCore/svg/SVGRectElement.cpp:154
&gt;      FloatRect rect(x().value(this), y().value(this), width().value(this), height().value(this));
&gt;  
&gt; +    if (rect.width() &lt;= 0 || rect.height() &lt;= 0)

This is flawed, please use:
float widthValue = width().value(this);
if (widthValue &lt;= 0)
    return;

float heightValue = height().value(this);
if (heightValue &lt;= 0)
    return;

float xValue = x().value(this);
float yValue = y().value(this);

&gt; WebCore/svg/SVGRectElement.cpp:160
&gt;          float _rx = hasRx ? rx().value(this) : ry().value(this);

if (hasRx || hasRy) {
    float rxValue = rx().value(this);
    float ryValue = ry().value(this);
    if (!hasRx)
        rxValue = ryValue;
    else if (!hasRy)
        ryValue = rxValue;
....
}
This should be sightly faster.

&gt; WebCore/svg/SVGStyledTransformableElement.cpp:110
&gt;  Path SVGStyledTransformableElement::toClipPath() const

toClipPath should also take a Path&amp; parameter.

&gt; WebCore/svg/SVGStyledTransformableElement.h:50
&gt; +    virtual void toPathData(Path&amp;) const {}

Please use { } instead of {}.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>292135</commentid>
    <comment_count>5</comment_count>
      <attachid>70355</attachid>
    <who name="Andreas Kling">kling</who>
    <bug_when>2010-10-09 10:37:47 -0700</bug_when>
    <thetext>Created attachment 70355
Proposed patch v4

Updated patch addressing all of Niko&apos;s comments.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>292141</commentid>
    <comment_count>6</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2010-10-09 11:11:26 -0700</bug_when>
    <thetext>Attachment 70355 did not build on mac:
Build output: http://queues.webkit.org/results/4360008</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>292154</commentid>
    <comment_count>7</comment_count>
      <attachid>70355</attachid>
    <who name="Andreas Kling">kling</who>
    <bug_when>2010-10-09 12:13:06 -0700</bug_when>
    <thetext>Comment on attachment 70355
Proposed patch v4

Broke MathML, new patch coming..</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>292183</commentid>
    <comment_count>8</comment_count>
      <attachid>70370</attachid>
    <who name="Andreas Kling">kling</who>
    <bug_when>2010-10-09 13:37:42 -0700</bug_when>
    <thetext>Created attachment 70370
Proposed patch v5

Removed Path::create* usage in MathML code.
Also removed the relevant symbols from WebCore.order</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>292197</commentid>
    <comment_count>9</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2010-10-09 14:10:42 -0700</bug_when>
    <thetext>Attachment 70370 did not build on mac:
Build output: http://queues.webkit.org/results/4365003</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>292215</commentid>
    <comment_count>10</comment_count>
    <who name="Andreas Kling">kling</who>
    <bug_when>2010-10-09 15:17:00 -0700</bug_when>
    <thetext>(In reply to comment #9)
&gt; Attachment 70370 [details] did not build on mac:
&gt; Build output: http://queues.webkit.org/results/4365003

Don&apos;t know how to make sense of this log, and it builds fine on a Mac here.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>292272</commentid>
    <comment_count>11</comment_count>
      <attachid>70370</attachid>
    <who name="Nikolas Zimmermann">zimmermann</who>
    <bug_when>2010-10-10 03:15:10 -0700</bug_when>
    <thetext>Comment on attachment 70370
Proposed patch v5

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

Almost there, still giving r- as it&apos;s not perfect yet.

&gt; WebCore/ChangeLog:5
&gt; +        SVG: Leverage platform&apos;s Path::addEllipse() in Path::createEllipse()

The bug title should be changed, you&apos;re modifying more than addEllipse.

&gt; WebCore/platform/graphics/Path.cpp:80
&gt; +            static const float rad2deg = 180.0 / piFloat;

Ok, this is unrelated, but please remove thie rad2deg static and use the one in wtf/MathExtras.h

&gt; WebCore/platform/graphics/Path.cpp:128
&gt; +    if (dx &gt; width * 0.5)

I think it makes sense to declare:
float halfWidth = width / 2;
if (dx &gt; halfWidth)
   dx = halfWidth;

As width * 0.5 is used several times below., Same for height * 0.5 Just a little optimization.

&gt; WebCore/platform/graphics/Path.cpp:141
&gt; +    addBezierCurveTo(FloatPoint(x + width - dx * (1 - gCircleControlPoint), y), FloatPoint(x + width, y + dy * (1 - gCircleControlPoint)), FloatPoint(x + width, y + dy));

If we&apos;re always using 1 - gCircleControlPoint, that should go into the static directly. so it read FloatPoint(x + width - dx * gCircle...

&gt; WebCore/platform/graphics/Path.cpp:161
&gt; +void Path::addRoundedRectangle(const FloatRect&amp; rectangle, const FloatSize&amp; topLeftRadius, const FloatSize&amp; topRightRadius, const FloatSize&amp; bottomLeftRadius, const FloatSize&amp; bottomRightRadius)

For consistency, this should be renamed addRoundedRect. Or rename addRect to addRectangle.

&gt; WebCore/platform/graphics/Path.cpp:183
&gt; +    addLineTo(FloatPoint(x + width, y + height - bottomRightRadius.height()));

I&apos;d add a newline before this addLineTo line, and split the upper bezier curveTo in two lines,
addBezierCurveTo(FloatPoint(x + width, ..., y),
                                 FloatPoint(x + width, ....),
(aligning the FloatPoints

&gt; WebCore/platform/graphics/Path.cpp:185
&gt; +    addLineTo(FloatPoint(x + bottomLeftRadius.width(), y + height));

Ditto.

&gt; WebCore/platform/graphics/Path.cpp:187
&gt; +    addLineTo(FloatPoint(x, y + topLeftRadius.height()));

Ditto.

&gt; WebCore/platform/graphics/cairo/ContextShadowCairo.cpp:243
&gt; +    {

Why this extra brace?

&gt; WebCore/platform/graphics/cairo/GraphicsContextCairo.cpp:707
&gt; +        Path path;

How about declaring this before the loop, and using if (i &gt; 0) path.clear() here ?

&gt; WebCore/rendering/RenderBoxModelObject.cpp:1766
&gt; +            path.clear();

You only need the clear, if (hasBorderRadius), avoids an unncessary call.

&gt; WebCore/rendering/svg/SVGInlineTextBox.cpp:496
&gt; +    if (fragment.width &gt; 0 &amp;&amp; thickness &gt; 0)

I&apos;d change this:
if (fragment.width &lt;= 0 || thickness &lt;= 0)
    return;


And move the float y computation etc. below this check. Early exit if there&apos;s nothing to do.

&gt; WebCore/svg/SVGAnimateMotionElement.cpp:118
&gt; +            return path;

Evil Path copying.... but not something you should change now.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>292456</commentid>
    <comment_count>12</comment_count>
      <attachid>70431</attachid>
    <who name="Andreas Kling">kling</who>
    <bug_when>2010-10-11 05:29:47 -0700</bug_when>
    <thetext>Created attachment 70431
Proposed patch v6

Updated patch, addressing all of Niko&apos;s comments.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>292460</commentid>
    <comment_count>13</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2010-10-11 06:03:57 -0700</bug_when>
    <thetext>Attachment 70431 did not build on mac:
Build output: http://queues.webkit.org/results/4328023</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>292505</commentid>
    <comment_count>14</comment_count>
      <attachid>70431</attachid>
    <who name="Dirk Schulze">krit</who>
    <bug_when>2010-10-11 09:18:00 -0700</bug_when>
    <thetext>Comment on attachment 70431
Proposed patch v6

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

I&apos;m not sure if we should add an ASSERT to all toClipPath as well as toPathData if the path is empty. (not sure how platforms implemented it, but they should check the number of segments internally). Maybe we can trust the programmer to never call this functions with a none empty path ;-)

These are just some notes.

&gt; WebCore/platform/graphics/Path.cpp:112
&gt; +void Path::addRoundedRect(const FloatRect&amp; rectangle, const FloatSize&amp; roundingRadii)

You should use rect instead of rectangle for the variable, at least if you change the function name.

&gt; WebCore/platform/graphics/Path.cpp:117
&gt;      float x = rectangle.x();
&gt;      float y = rectangle.y();
&gt;      float width = rectangle.width();
&gt;      float height = rectangle.height();

Why not FloatRect rect(rectangle) so maybe leave the name above.

&gt; WebCore/platform/graphics/Path.cpp:119
&gt;      float rx = roundingRadii.width();
&gt;      float ry = roundingRadii.height();

Can&apos;t we use FloatSize radius here?

If we copy all data, we might just use
void Path::addRoundedRect(FloatRect rect, FloatSize roundingRadii) instead of void Path::addRoundedRect(const FloatRect&amp; rectangle, const FloatSize&amp; roundingRadii). What do you think?

&gt; WebCore/platform/graphics/Path.cpp:126
&gt; +    float dx = rx;
&gt; +    float dy = ry;
&gt; +    float halfWidth = width / 2;
&gt; +    float halfHeight = height / 2;

Maybe we can use FloatSize for the 4 values as well.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>292507</commentid>
    <comment_count>15</comment_count>
    <who name="Dirk Schulze">krit</who>
    <bug_when>2010-10-11 09:24:20 -0700</bug_when>
    <thetext>*** Bug 44375 has been marked as a duplicate of this bug. ***</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>292550</commentid>
    <comment_count>16</comment_count>
      <attachid>70451</attachid>
    <who name="Andreas Kling">kling</who>
    <bug_when>2010-10-11 10:45:53 -0700</bug_when>
    <thetext>Created attachment 70451
Proposed patch v7

Addressed Dirk&apos;s comments. Didn&apos;t add the ASSERTs though, since Path::isEmpty() is very slow on some platforms (CG, ?) and this would slow down debug builds.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>292551</commentid>
    <comment_count>17</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2010-10-11 10:50:12 -0700</bug_when>
    <thetext>(In reply to comment #16)
&gt; Didn&apos;t add the ASSERTs though, since Path::isEmpty() is very slow on some platforms (CG, ?) and this would slow down debug builds.

Normally we include assertions even if they would slow down debug builds. Is the slowdown so dramatic it causes a major problem?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>292553</commentid>
    <comment_count>18</comment_count>
      <attachid>70451</attachid>
    <who name="Dirk Schulze">krit</who>
    <bug_when>2010-10-11 10:53:32 -0700</bug_when>
    <thetext>Comment on attachment 70451
Proposed patch v7

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

&gt; WebCore/ChangeLog:9
&gt; +        Circles and ellipses will be significantly faster on platforms that
&gt; +        implement Path::addEllipse() in a sane fashion.

Can you mention, that you avoid copying paths?

&gt; WebCore/platform/graphics/Path.cpp:118
&gt; +    float dx = roundingRadii.width();
&gt; +    float dy = roundingRadii.height();

Why not FloatSize radius= roundingRadii; ?

&gt; WebCore/platform/graphics/Path.cpp:120
&gt; +    float halfWidth = rect.width() / 2;
&gt; +    float halfHeight = rect.height() / 2;

You could use FloatSize here as well. But it is also ok to use two floats.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>292555</commentid>
    <comment_count>19</comment_count>
    <who name="Nikolas Zimmermann">zimmermann</who>
    <bug_when>2010-10-11 10:57:09 -0700</bug_when>
    <thetext>(In reply to comment #17)
&gt; (In reply to comment #16)
&gt; &gt; Didn&apos;t add the ASSERTs though, since Path::isEmpty() is very slow on some platforms (CG, ?) and this would slow down debug builds.
&gt; 
&gt; Normally we include assertions even if they would slow down debug builds. Is the slowdown so dramatic it causes a major problem?

We tried to eliminate most calls to Path::isEmpty() in the past, as at least on CG CGPathIsEmpty is quite slow, at least it showed up on shark profiles quite often in the past.

But as it&apos;s an assertion, that&apos;s not present in release builds, maybe it&apos;s not so dramatic after all.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>292559</commentid>
    <comment_count>20</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2010-10-11 11:03:11 -0700</bug_when>
    <thetext>(In reply to comment #19)
&gt; We tried to eliminate most calls to Path::isEmpty() in the past, as at least on CG CGPathIsEmpty is quite slow, at least it showed up on shark profiles quite often in the past.

Note that if CGPathIsEmpty was showing up as a bottleneck in a way that’s difficult to avoid, we could possibly change the augment CG implementation of Path to cache additional state so that in most cases a call to CGPathIsEmpty would not be necessary.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>292570</commentid>
    <comment_count>21</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2010-10-11 11:18:39 -0700</bug_when>
    <thetext>Attachment 70451 did not build on mac:
Build output: http://queues.webkit.org/results/4368010</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>292586</commentid>
    <comment_count>22</comment_count>
    <who name="Nikolas Zimmermann">zimmermann</who>
    <bug_when>2010-10-11 11:37:45 -0700</bug_when>
    <thetext>(In reply to comment #20)
&gt; (In reply to comment #19)
&gt; &gt; We tried to eliminate most calls to Path::isEmpty() in the past, as at least on CG CGPathIsEmpty is quite slow, at least it showed up on shark profiles quite often in the past.
&gt; 
&gt; Note that if CGPathIsEmpty was showing up as a bottleneck in a way that’s difficult to avoid, we could possibly change the augment CG implementation of Path to cache additional state so that in most cases a call to CGPathIsEmpty would not be necessary.

That&apos;s right, a simple boolean would be sufficient. Let&apos;s add the assertions and see if it&apos;s still a problem, if so, we&apos;ll just cache a &quot;bool m_isEmpty&quot; variable in PathCg.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>292587</commentid>
    <comment_count>23</comment_count>
      <attachid>70451</attachid>
    <who name="Nikolas Zimmermann">zimmermann</who>
    <bug_when>2010-10-11 11:39:17 -0700</bug_when>
    <thetext>Comment on attachment 70451
Proposed patch v7

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

Please add the path isEmpty assertion in toPathData, an let&apos;s find out why it doesn&apos;t build on mac...

&gt; WebCore/platform/graphics/Path.cpp:132
&gt; +    moveTo(FloatPoint(rect.x() + dx, rect.y()));

Please cache rect.x() / y() / width() / height() in local variables.

&gt; WebCore/platform/graphics/Path.cpp:162
&gt; +    if (rect.width() &lt; topLeftRadius.width() + topRightRadius.width()

Please cache rect.x() / y() / width() / height() in local variables.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>292589</commentid>
    <comment_count>24</comment_count>
    <who name="Nikolas Zimmermann">zimmermann</who>
    <bug_when>2010-10-11 11:44:17 -0700</bug_when>
    <thetext>(In reply to comment #23)
&gt; (From update of attachment 70451 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=70451&amp;action=review
&gt; 
&gt; Please add the path isEmpty assertion in toPathData, an let&apos;s find out why it doesn&apos;t build on mac...
&gt; 
&gt; &gt; WebCore/platform/graphics/Path.cpp:132
&gt; &gt; +    moveTo(FloatPoint(rect.x() + dx, rect.y()));
&gt; 
&gt; Please cache rect.x() / y() / width() / height() in local variables.
&gt; 
&gt; &gt; WebCore/platform/graphics/Path.cpp:162
&gt; &gt; +    if (rect.width() &lt; topLeftRadius.width() + topRightRadius.width()
&gt; 
&gt; Please cache rect.x() / y() / width() / height() in local variables.

I take those back, as rect.x() etc. are inline function calls.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>292593</commentid>
    <comment_count>25</comment_count>
      <attachid>70460</attachid>
    <who name="Andreas Kling">kling</who>
    <bug_when>2010-10-11 11:52:26 -0700</bug_when>
    <thetext>Created attachment 70460
Proposed patch v8

Added the ASSERTs.
Didn&apos;t cache x(), y() etc in locals though since they&apos;re inline functions (as discussed on IRC.)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>292600</commentid>
    <comment_count>26</comment_count>
      <attachid>70460</attachid>
    <who name="Dirk Schulze">krit</who>
    <bug_when>2010-10-11 12:07:15 -0700</bug_when>
    <thetext>Comment on attachment 70460
Proposed patch v8

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

&gt; WebCore/platform/graphics/Path.cpp:117
&gt; +    FloatSize radius = roundingRadii;

Use FloatSize radius(roundingRadii);

&gt; WebCore/svg/SVGStyledTransformableElement.cpp:118
&gt; +    ASSERT(path.isEmpty());
&gt; +
&gt; +    toPathData(path);

You&apos;re calling ASSERT(path.isEmpty()); in toPathData, no need to assert twice.

Please change this before landing. Great patch! r=me.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>292611</commentid>
    <comment_count>27</comment_count>
    <who name="Andreas Kling">kling</who>
    <bug_when>2010-10-11 12:22:09 -0700</bug_when>
    <thetext>Committed r69517: &lt;http://trac.webkit.org/changeset/69517&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>292614</commentid>
    <comment_count>28</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2010-10-11 12:30:09 -0700</bug_when>
    <thetext>Attachment 70460 did not build on mac:
Build output: http://queues.webkit.org/results/4275026</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>292745</commentid>
    <comment_count>29</comment_count>
    <who name="Andreas Kling">kling</who>
    <bug_when>2010-10-11 16:14:03 -0700</bug_when>
    <thetext>*** Bug 30994 has been marked as a duplicate of this bug. ***</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>292882</commentid>
    <comment_count>30</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-10-12 01:02:43 -0700</bug_when>
    <thetext>http://trac.webkit.org/changeset/69517 might have broken Qt Linux Release</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>292883</commentid>
    <comment_count>31</comment_count>
    <who name="Csaba Osztrogonác">ossy</who>
    <bug_when>2010-10-12 01:12:45 -0700</bug_when>
    <thetext>(In reply to comment #30)
&gt; http://trac.webkit.org/changeset/69517 might have broken Qt Linux Release

Qt specifix expected file updated in http://trac.webkit.org/changeset/69565</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>68030</attachid>
            <date>2010-09-19 11:17:20 -0700</date>
            <delta_ts>2010-10-08 06:23:17 -0700</delta_ts>
            <desc>Proposed patch (not to be landed before 46051 is resolved)</desc>
            <filename>bug-46052.diff</filename>
            <type>text/plain</type>
            <size>1806</size>
            <attacher name="Andreas Kling">kling</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ2hhbmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXgg
NzVmNTJiZi4uM2Q4NGIwOSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvV2Vi
Q29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxNCBAQAorMjAxMC0wOS0xOSAgQW5kcmVhcyBLbGlu
ZyAgPGFuZHJlYXMua2xpbmdAbm9raWEuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9E
WSAoT09QUyEpLgorCisgICAgICAgIFNWRzogTGV2ZXJhZ2UgcGxhdGZvcm0ncyBQYXRoOjphZGRF
bGxpcHNlKCkgaW4gUGF0aDo6Y3JlYXRlRWxsaXBzZSgpCisgICAgICAgIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD00NjA1MgorCisgICAgICAgICogcGxhdGZvcm0vZ3Jh
cGhpY3MvUGF0aC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpQYXRoOjpjcmVhdGVFbGxpcHNlKTog
VXNlIFBhdGg6OmFkZEVsbGlwc2UoKSBpbnN0ZWFkIG9mCisgICAgICAgIG1hbnVhbGx5IHN0cm9r
aW5nIHRoZSBlbGxpcHNlIHVzaW5nIFBhdGg6OmxpbmVUbygpLgorCiAyMDEwLTA5LTE5ICBLZW50
IFRhbXVyYSAgPHRrZW50QGNocm9taXVtLm9yZz4KIAogICAgICAgICBSZXZpZXdlZCBieSBEaW1p
dHJpIEdsYXprb3YuCmRpZmYgLS1naXQgYS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1BhdGgu
Y3BwIGIvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9QYXRoLmNwcAppbmRleCA0ZTJkZTUzLi5i
NTliN2Y2IDEwMDY0NAotLS0gYS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1BhdGguY3BwCisr
KyBiL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvUGF0aC5jcHAKQEAgLTIyMywzOCArMjIzLDEx
IEBAIFBhdGggUGF0aDo6Y3JlYXRlUmVjdGFuZ2xlKGNvbnN0IEZsb2F0UmVjdCYgcmVjdGFuZ2xl
KQogCiBQYXRoIFBhdGg6OmNyZWF0ZUVsbGlwc2UoY29uc3QgRmxvYXRQb2ludCYgY2VudGVyLCBm
bG9hdCByeCwgZmxvYXQgcnkpCiB7Ci0gICAgZmxvYXQgY3ggPSBjZW50ZXIueCgpOwotICAgIGZs
b2F0IGN5ID0gY2VudGVyLnkoKTsKICAgICBQYXRoIHBhdGg7CiAgICAgaWYgKHJ4IDw9IDAuMGYg
fHwgcnkgPD0gMC4wZikKICAgICAgICAgcmV0dXJuIHBhdGg7Ci0KLSAgICBmbG9hdCB4ID0gY3g7
Ci0gICAgZmxvYXQgeSA9IGN5OwotCi0gICAgdW5zaWduZWQgc3RlcCA9IDAsIG51bSA9IDEwMDsK
LSAgICBib29sIHJ1bm5pbmcgPSB0cnVlOwotICAgIHdoaWxlIChydW5uaW5nKQotICAgIHsKLSAg
ICAgICAgaWYgKHN0ZXAgPT0gbnVtKQotICAgICAgICB7Ci0gICAgICAgICAgICBydW5uaW5nID0g
ZmFsc2U7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotCi0gICAgICAgIGZsb2F0IGFu
Z2xlID0gc3RhdGljX2Nhc3Q8ZmxvYXQ+KHN0ZXApIC8gc3RhdGljX2Nhc3Q8ZmxvYXQ+KG51bSkg
KiAyLjBmICogcGlGbG9hdDsKLSAgICAgICAgeCA9IGN4ICsgY29zZihhbmdsZSkgKiByeDsKLSAg
ICAgICAgeSA9IGN5ICsgc2luZihhbmdsZSkgKiByeTsKLQotICAgICAgICBzdGVwKys7Ci0gICAg
ICAgIGlmIChzdGVwID09IDEpCi0gICAgICAgICAgICBwYXRoLm1vdmVUbyhGbG9hdFBvaW50KHgs
IHkpKTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgcGF0aC5hZGRMaW5lVG8oRmxvYXRQb2lu
dCh4LCB5KSk7Ci0gICAgfQotCisgICAgcGF0aC5hZGRFbGxpcHNlKEZsb2F0UmVjdChjZW50ZXIu
eCgpIC0gcngsIGNlbnRlci55KCkgLSByeSwgcnggKiAyLCByeSAqIDIpKTsKICAgICBwYXRoLmNs
b3NlU3VicGF0aCgpOwotCiAgICAgcmV0dXJuIHBhdGg7CiB9CiAK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>70238</attachid>
            <date>2010-10-08 06:22:53 -0700</date>
            <delta_ts>2010-10-09 10:37:47 -0700</delta_ts>
            <desc>Proposed patch v2</desc>
            <filename>bug-46052-v2.diff</filename>
            <type>text/plain</type>
            <size>37373</size>
            <attacher name="Andreas Kling">kling</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ2hhbmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXgg
MzgxYTllOS4uMjdhNDE2ZSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvV2Vi
Q29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSw3MiBAQAorMjAxMC0xMC0wOCAgQW5kcmVhcyBLbGlu
ZyAgPGtsaW5nQHdlYmtpdC5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BT
ISkuCisKKyAgICAgICAgU1ZHOiBMZXZlcmFnZSBwbGF0Zm9ybSdzIFBhdGg6OmFkZEVsbGlwc2Uo
KSBpbiBQYXRoOjpjcmVhdGVFbGxpcHNlKCkKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTQ2MDUyCisKKyAgICAgICAgUmVtb3ZlIHRoZSBzdGF0aWMgUGF0
aDo6Y3JlYXRlKiBtZXRob2RzIGFuZCB1c2UgUGF0aDo6YWRkKiB3aGVyZXZlcgorICAgICAgICB0
aGVzZSB3ZXJlIHVzZWQuCisKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0Nv
bnRleHQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjphZGRSb3VuZGVk
UmVjdENsaXApOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpjbGlwT3V0Um91
bmRlZFJlY3QpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL1BhdGguY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6UGF0aDo6YWRkUm91bmRlZFJlY3RhbmdsZSk6CisgICAgICAgIChXZWJDb3Jl
OjpQYXRoOjphZGRSZWN0YW5nbGUpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL1BhdGgu
aDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9Db250ZXh0U2hhZG93Q2Fpcm8u
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6Q29udGV4dFNoYWRvdzo6ZHJhd1JlY3RTaGFkb3dXaXRo
b3V0VGlsaW5nKToKKyAgICAgICAgKFdlYkNvcmU6OkNvbnRleHRTaGFkb3c6OmRyYXdSZWN0U2hh
ZG93KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9HcmFwaGljc0NvbnRleHRD
YWlyby5jcHA6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OmRyYXdGb2N1c1Jp
bmcpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpkcmF3VGlsZWRTaGFkb3cp
OgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpmaWxsUm91bmRlZFJlY3QpOgor
ICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NnL0dyYXBoaWNzQ29udGV4dENHLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6ZmlsbFJvdW5kZWRSZWN0KToKKyAgICAg
ICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9xdC9HcmFwaGljc0NvbnRleHRRdC5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OmZpbGxSb3VuZGVkUmVjdCk6CisgICAgICAgICog
cmVuZGVyaW5nL1JlbmRlckJveE1vZGVsT2JqZWN0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJl
bmRlckJveE1vZGVsT2JqZWN0OjpwYWludEJvcmRlcik6CisgICAgICAgIChXZWJDb3JlOjpSZW5k
ZXJCb3hNb2RlbE9iamVjdDo6cGFpbnRCb3hTaGFkb3cpOgorICAgICAgICAqIHJlbmRlcmluZy9S
ZW5kZXJFbWJlZGRlZE9iamVjdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJFbWJlZGRl
ZE9iamVjdDo6Z2V0UmVwbGFjZW1lbnRUZXh0R2VvbWV0cnkpOgorICAgICAgICAqIHJlbmRlcmlu
Zy9zdmcvUmVuZGVyU1ZHUGF0aC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJTVkdQYXRo
OjpsYXlvdXQpOgorICAgICAgICAqIHJlbmRlcmluZy9zdmcvUmVuZGVyU1ZHVGV4dFBhdGguY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU1ZHVGV4dFBhdGg6OmxheW91dFBhdGgpOgorICAg
ICAgICAqIHJlbmRlcmluZy9zdmcvU1ZHSW5saW5lVGV4dEJveC5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpTVkdJbmxpbmVUZXh0Qm94OjpwYWludERlY29yYXRpb25XaXRoU3R5bGUpOgorICAgICAg
ICAqIHN2Zy9TVkdBbmltYXRlTW90aW9uRWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpT
VkdBbmltYXRlTW90aW9uRWxlbWVudDo6YW5pbWF0aW9uUGF0aCk6CisgICAgICAgICogc3ZnL1NW
R0NpcmNsZUVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U1ZHQ2lyY2xlRWxlbWVudDo6
dG9QYXRoRGF0YSk6CisgICAgICAgICogc3ZnL1NWR0NpcmNsZUVsZW1lbnQuaDoKKyAgICAgICAg
KiBzdmcvU1ZHRWxsaXBzZUVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U1ZHRWxsaXBz
ZUVsZW1lbnQ6OnRvUGF0aERhdGEpOgorICAgICAgICAqIHN2Zy9TVkdFbGxpcHNlRWxlbWVudC5o
OgorICAgICAgICAqIHN2Zy9TVkdMaW5lRWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpT
VkdMaW5lRWxlbWVudDo6dG9QYXRoRGF0YSk6CisgICAgICAgICogc3ZnL1NWR0xpbmVFbGVtZW50
Lmg6CisgICAgICAgICogc3ZnL1NWR1BhdGhFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OlNWR1BhdGhFbGVtZW50OjpnZXRUb3RhbExlbmd0aCk6CisgICAgICAgIChXZWJDb3JlOjpTVkdQ
YXRoRWxlbWVudDo6Z2V0UG9pbnRBdExlbmd0aCk6CisgICAgICAgIChXZWJDb3JlOjpTVkdQYXRo
RWxlbWVudDo6dG9QYXRoRGF0YSk6CisgICAgICAgICogc3ZnL1NWR1BhdGhFbGVtZW50Lmg6Cisg
ICAgICAgICogc3ZnL1NWR1BvbHlnb25FbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNW
R1BvbHlnb25FbGVtZW50Ojp0b1BhdGhEYXRhKToKKyAgICAgICAgKiBzdmcvU1ZHUG9seWdvbkVs
ZW1lbnQuaDoKKyAgICAgICAgKiBzdmcvU1ZHUG9seWxpbmVFbGVtZW50LmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OlNWR1BvbHlsaW5lRWxlbWVudDo6dG9QYXRoRGF0YSk6CisgICAgICAgICogc3Zn
L1NWR1BvbHlsaW5lRWxlbWVudC5oOgorICAgICAgICAqIHN2Zy9TVkdSZWN0RWxlbWVudC5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpTVkdSZWN0RWxlbWVudDo6dG9QYXRoRGF0YSk6CisgICAgICAg
ICogc3ZnL1NWR1JlY3RFbGVtZW50Lmg6CisgICAgICAgICogc3ZnL1NWR1N0eWxlZFRyYW5zZm9y
bWFibGVFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR1N0eWxlZFRyYW5zZm9ybWFi
bGVFbGVtZW50Ojp0b0NsaXBQYXRoKToKKyAgICAgICAgKiBzdmcvU1ZHU3R5bGVkVHJhbnNmb3Jt
YWJsZUVsZW1lbnQuaDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR1N0eWxlZFRyYW5zZm9ybWFibGVF
bGVtZW50Ojp0b1BhdGhEYXRhKToKKwogMjAxMC0xMC0wOCAgQW5kcmVhcyBLbGluZyAgPGFuZHJl
YXMua2xpbmdAbm9raWEuY29tPgogCiAgICAgICAgIFJldmlld2VkIGJ5IE5pa29sYXMgWmltbWVy
bWFubi4KZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250
ZXh0LmNwcCBiL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0LmNwcApp
bmRleCAyYzk0YmVjLi5iZjYyMDYwIDEwMDY0NAotLS0gYS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL0dyYXBoaWNzQ29udGV4dC5jcHAKKysrIGIvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9H
cmFwaGljc0NvbnRleHQuY3BwCkBAIC01MDAsNyArNTAwLDkgQEAgdm9pZCBHcmFwaGljc0NvbnRl
eHQ6OmFkZFJvdW5kZWRSZWN0Q2xpcChjb25zdCBJbnRSZWN0JiByZWN0LCBjb25zdCBJbnRTaXpl
JiB0b3AKICAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQogICAgICAgICByZXR1cm47CiAKLSAg
ICBjbGlwKFBhdGg6OmNyZWF0ZVJvdW5kZWRSZWN0YW5nbGUocmVjdCwgdG9wTGVmdCwgdG9wUmln
aHQsIGJvdHRvbUxlZnQsIGJvdHRvbVJpZ2h0KSk7CisgICAgUGF0aCBwYXRoOworICAgIHBhdGgu
YWRkUm91bmRlZFJlY3RhbmdsZShyZWN0LCB0b3BMZWZ0LCB0b3BSaWdodCwgYm90dG9tTGVmdCwg
Ym90dG9tUmlnaHQpOworICAgIGNsaXAocGF0aCk7CiB9CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0
OjpjbGlwT3V0Um91bmRlZFJlY3QoY29uc3QgSW50UmVjdCYgcmVjdCwgY29uc3QgSW50U2l6ZSYg
dG9wTGVmdCwgY29uc3QgSW50U2l6ZSYgdG9wUmlnaHQsCkBAIC01MDksNyArNTExLDkgQEAgdm9p
ZCBHcmFwaGljc0NvbnRleHQ6OmNsaXBPdXRSb3VuZGVkUmVjdChjb25zdCBJbnRSZWN0JiByZWN0
LCBjb25zdCBJbnRTaXplJiB0b3AKICAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQogICAgICAg
ICByZXR1cm47CiAKLSAgICBjbGlwT3V0KFBhdGg6OmNyZWF0ZVJvdW5kZWRSZWN0YW5nbGUocmVj
dCwgdG9wTGVmdCwgdG9wUmlnaHQsIGJvdHRvbUxlZnQsIGJvdHRvbVJpZ2h0KSk7CisgICAgUGF0
aCBwYXRoOworICAgIHBhdGguYWRkUm91bmRlZFJlY3RhbmdsZShyZWN0LCB0b3BMZWZ0LCB0b3BS
aWdodCwgYm90dG9tTGVmdCwgYm90dG9tUmlnaHQpOworICAgIGNsaXBPdXQocGF0aCk7CiB9CiAK
IHZvaWQgR3JhcGhpY3NDb250ZXh0OjpjbGlwVG9JbWFnZUJ1ZmZlcihJbWFnZUJ1ZmZlciogYnVm
ZmVyLCBjb25zdCBGbG9hdFJlY3QmIHJlY3QpCmRpZmYgLS1naXQgYS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL1BhdGguY3BwIGIvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9QYXRoLmNwcApp
bmRleCA0ZTJkZTUzLi4xYmU5NGUyIDEwMDY0NAotLS0gYS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL1BhdGguY3BwCisrKyBiL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvUGF0aC5jcHAKQEAg
LTExMCw5ICsxMTAsOCBAQCBmbG9hdCBQYXRoOjpub3JtYWxBbmdsZUF0TGVuZ3RoKGZsb2F0IGxl
bmd0aCwgYm9vbCYgb2spCiB9CiAjZW5kaWYKIAotUGF0aCBQYXRoOjpjcmVhdGVSb3VuZGVkUmVj
dGFuZ2xlKGNvbnN0IEZsb2F0UmVjdCYgcmVjdGFuZ2xlLCBjb25zdCBGbG9hdFNpemUmIHJvdW5k
aW5nUmFkaWkpCit2b2lkIFBhdGg6OmFkZFJvdW5kZWRSZWN0YW5nbGUoY29uc3QgRmxvYXRSZWN0
JiByZWN0YW5nbGUsIGNvbnN0IEZsb2F0U2l6ZSYgcm91bmRpbmdSYWRpaSkKIHsKLSAgICBQYXRo
IHBhdGg7CiAgICAgZmxvYXQgeCA9IHJlY3RhbmdsZS54KCk7CiAgICAgZmxvYXQgeSA9IHJlY3Rh
bmdsZS55KCk7CiAgICAgZmxvYXQgd2lkdGggPSByZWN0YW5nbGUud2lkdGgoKTsKQEAgLTEyMCw3
ICsxMTksNyBAQCBQYXRoIFBhdGg6OmNyZWF0ZVJvdW5kZWRSZWN0YW5nbGUoY29uc3QgRmxvYXRS
ZWN0JiByZWN0YW5nbGUsIGNvbnN0IEZsb2F0U2l6ZSYgcgogICAgIGZsb2F0IHJ4ID0gcm91bmRp
bmdSYWRpaS53aWR0aCgpOwogICAgIGZsb2F0IHJ5ID0gcm91bmRpbmdSYWRpaS5oZWlnaHQoKTsK
ICAgICBpZiAod2lkdGggPD0gMC4wZiB8fCBoZWlnaHQgPD0gMC4wZikKLSAgICAgICAgcmV0dXJu
IHBhdGg7CisgICAgICAgIHJldHVybjsKIAogICAgIGZsb2F0IGR4ID0gcngsIGR5ID0gcnk7CiAg
ICAgLy8gSWYgcnggaXMgZ3JlYXRlciB0aGFuIGhhbGYgb2YgdGhlIHdpZHRoIG9mIHRoZSByZWN0
YW5nbGUKQEAgLTEzMyw0OCArMTMyLDQ4IEBAIFBhdGggUGF0aDo6Y3JlYXRlUm91bmRlZFJlY3Rh
bmdsZShjb25zdCBGbG9hdFJlY3QmIHJlY3RhbmdsZSwgY29uc3QgRmxvYXRTaXplJiByCiAgICAg
aWYgKGR5ID4gaGVpZ2h0ICogMC41ZikKICAgICAgICAgZHkgPSBoZWlnaHQgKiAwLjVmOwogCi0g
ICAgcGF0aC5tb3ZlVG8oRmxvYXRQb2ludCh4ICsgZHgsIHkpKTsKKyAgICBtb3ZlVG8oRmxvYXRQ
b2ludCh4ICsgZHgsIHkpKTsKIAogICAgIGlmIChkeCA8IHdpZHRoICogMC41ZikKLSAgICAgICAg
cGF0aC5hZGRMaW5lVG8oRmxvYXRQb2ludCh4ICsgd2lkdGggLSByeCwgeSkpOworICAgICAgICBh
ZGRMaW5lVG8oRmxvYXRQb2ludCh4ICsgd2lkdGggLSByeCwgeSkpOwogCi0gICAgcGF0aC5hZGRC
ZXppZXJDdXJ2ZVRvKEZsb2F0UG9pbnQoeCArIHdpZHRoIC0gZHggKiAoMSAtIFFVQVJURVIpLCB5
KSwgRmxvYXRQb2ludCh4ICsgd2lkdGgsIHkgKyBkeSAqICgxIC0gUVVBUlRFUikpLCBGbG9hdFBv
aW50KHggKyB3aWR0aCwgeSArIGR5KSk7CisgICAgYWRkQmV6aWVyQ3VydmVUbyhGbG9hdFBvaW50
KHggKyB3aWR0aCAtIGR4ICogKDEgLSBRVUFSVEVSKSwgeSksIEZsb2F0UG9pbnQoeCArIHdpZHRo
LCB5ICsgZHkgKiAoMSAtIFFVQVJURVIpKSwgRmxvYXRQb2ludCh4ICsgd2lkdGgsIHkgKyBkeSkp
OwogCiAgICAgaWYgKGR5IDwgaGVpZ2h0ICogMC41KQotICAgICAgICBwYXRoLmFkZExpbmVUbyhG
bG9hdFBvaW50KHggKyB3aWR0aCwgeSArIGhlaWdodCAtIGR5KSk7CisgICAgICAgIGFkZExpbmVU
byhGbG9hdFBvaW50KHggKyB3aWR0aCwgeSArIGhlaWdodCAtIGR5KSk7CiAKLSAgICBwYXRoLmFk
ZEJlemllckN1cnZlVG8oRmxvYXRQb2ludCh4ICsgd2lkdGgsIHkgKyBoZWlnaHQgLSBkeSAqICgx
IC0gUVVBUlRFUikpLCBGbG9hdFBvaW50KHggKyB3aWR0aCAtIGR4ICogKDEgLSBRVUFSVEVSKSwg
eSArIGhlaWdodCksIEZsb2F0UG9pbnQoeCArIHdpZHRoIC0gZHgsIHkgKyBoZWlnaHQpKTsKKyAg
ICBhZGRCZXppZXJDdXJ2ZVRvKEZsb2F0UG9pbnQoeCArIHdpZHRoLCB5ICsgaGVpZ2h0IC0gZHkg
KiAoMSAtIFFVQVJURVIpKSwgRmxvYXRQb2ludCh4ICsgd2lkdGggLSBkeCAqICgxIC0gUVVBUlRF
UiksIHkgKyBoZWlnaHQpLCBGbG9hdFBvaW50KHggKyB3aWR0aCAtIGR4LCB5ICsgaGVpZ2h0KSk7
CiAKICAgICBpZiAoZHggPCB3aWR0aCAqIDAuNSkKLSAgICAgICAgcGF0aC5hZGRMaW5lVG8oRmxv
YXRQb2ludCh4ICsgZHgsIHkgKyBoZWlnaHQpKTsKKyAgICAgICAgYWRkTGluZVRvKEZsb2F0UG9p
bnQoeCArIGR4LCB5ICsgaGVpZ2h0KSk7CiAKLSAgICBwYXRoLmFkZEJlemllckN1cnZlVG8oRmxv
YXRQb2ludCh4ICsgZHggKiAoMSAtIFFVQVJURVIpLCB5ICsgaGVpZ2h0KSwgRmxvYXRQb2ludCh4
LCB5ICsgaGVpZ2h0IC0gZHkgKiAoMSAtIFFVQVJURVIpKSwgRmxvYXRQb2ludCh4LCB5ICsgaGVp
Z2h0IC0gZHkpKTsKKyAgICBhZGRCZXppZXJDdXJ2ZVRvKEZsb2F0UG9pbnQoeCArIGR4ICogKDEg
LSBRVUFSVEVSKSwgeSArIGhlaWdodCksIEZsb2F0UG9pbnQoeCwgeSArIGhlaWdodCAtIGR5ICog
KDEgLSBRVUFSVEVSKSksIEZsb2F0UG9pbnQoeCwgeSArIGhlaWdodCAtIGR5KSk7CiAKICAgICBp
ZiAoZHkgPCBoZWlnaHQgKiAwLjUpCi0gICAgICAgIHBhdGguYWRkTGluZVRvKEZsb2F0UG9pbnQo
eCwgeSArIGR5KSk7CisgICAgICAgIGFkZExpbmVUbyhGbG9hdFBvaW50KHgsIHkgKyBkeSkpOwog
Ci0gICAgcGF0aC5hZGRCZXppZXJDdXJ2ZVRvKEZsb2F0UG9pbnQoeCwgeSArIGR5ICogKDEgLSBR
VUFSVEVSKSksIEZsb2F0UG9pbnQoeCArIGR4ICogKDEgLSBRVUFSVEVSKSwgeSksIEZsb2F0UG9p
bnQoeCArIGR4LCB5KSk7CisgICAgYWRkQmV6aWVyQ3VydmVUbyhGbG9hdFBvaW50KHgsIHkgKyBk
eSAqICgxIC0gUVVBUlRFUikpLCBGbG9hdFBvaW50KHggKyBkeCAqICgxIC0gUVVBUlRFUiksIHkp
LCBGbG9hdFBvaW50KHggKyBkeCwgeSkpOwogCi0gICAgcGF0aC5jbG9zZVN1YnBhdGgoKTsKLQot
ICAgIHJldHVybiBwYXRoOworICAgIGNsb3NlU3VicGF0aCgpOwogfQogCi1QYXRoIFBhdGg6OmNy
ZWF0ZVJvdW5kZWRSZWN0YW5nbGUoY29uc3QgRmxvYXRSZWN0JiByZWN0YW5nbGUsIGNvbnN0IEZs
b2F0U2l6ZSYgdG9wTGVmdFJhZGl1cywgY29uc3QgRmxvYXRTaXplJiB0b3BSaWdodFJhZGl1cywg
Y29uc3QgRmxvYXRTaXplJiBib3R0b21MZWZ0UmFkaXVzLCBjb25zdCBGbG9hdFNpemUmIGJvdHRv
bVJpZ2h0UmFkaXVzKQordm9pZCBQYXRoOjphZGRSb3VuZGVkUmVjdGFuZ2xlKGNvbnN0IEZsb2F0
UmVjdCYgcmVjdGFuZ2xlLCBjb25zdCBGbG9hdFNpemUmIHRvcExlZnRSYWRpdXMsIGNvbnN0IEZs
b2F0U2l6ZSYgdG9wUmlnaHRSYWRpdXMsIGNvbnN0IEZsb2F0U2l6ZSYgYm90dG9tTGVmdFJhZGl1
cywgY29uc3QgRmxvYXRTaXplJiBib3R0b21SaWdodFJhZGl1cykKIHsKLSAgICBQYXRoIHBhdGg7
Ci0KICAgICBmbG9hdCB3aWR0aCA9IHJlY3RhbmdsZS53aWR0aCgpOwogICAgIGZsb2F0IGhlaWdo
dCA9IHJlY3RhbmdsZS5oZWlnaHQoKTsKICAgICBpZiAod2lkdGggPD0gMC4wIHx8IGhlaWdodCA8
PSAwLjApCi0gICAgICAgIHJldHVybiBwYXRoOworICAgICAgICByZXR1cm47CisKKyAgICBQYXRo
IHBhdGg7CiAKICAgICBpZiAod2lkdGggPCB0b3BMZWZ0UmFkaXVzLndpZHRoKCkgKyB0b3BSaWdo
dFJhZGl1cy53aWR0aCgpCiAgICAgICAgICAgICB8fCB3aWR0aCA8IGJvdHRvbUxlZnRSYWRpdXMu
d2lkdGgoKSArIGJvdHRvbVJpZ2h0UmFkaXVzLndpZHRoKCkKICAgICAgICAgICAgIHx8IGhlaWdo
dCA8IHRvcExlZnRSYWRpdXMuaGVpZ2h0KCkgKyBib3R0b21MZWZ0UmFkaXVzLmhlaWdodCgpCi0g
ICAgICAgICAgICB8fCBoZWlnaHQgPCB0b3BSaWdodFJhZGl1cy5oZWlnaHQoKSArIGJvdHRvbVJp
Z2h0UmFkaXVzLmhlaWdodCgpKQorICAgICAgICAgICAgfHwgaGVpZ2h0IDwgdG9wUmlnaHRSYWRp
dXMuaGVpZ2h0KCkgKyBib3R0b21SaWdodFJhZGl1cy5oZWlnaHQoKSkgewogICAgICAgICAvLyBJ
ZiBhbGwgdGhlIHJhZGlpIGNhbm5vdCBiZSBhY2NvbW1vZGF0ZWQsIHJldHVybiBhIHJlY3QuCi0g
ICAgICAgIHJldHVybiBjcmVhdGVSZWN0YW5nbGUocmVjdGFuZ2xlKTsKKyAgICAgICAgcGF0aC5h
ZGRSZWN0KHJlY3RhbmdsZSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CiAKICAgICBmbG9hdCB4
ID0gcmVjdGFuZ2xlLngoKTsKICAgICBmbG9hdCB5ID0gcmVjdGFuZ2xlLnkoKTsKQEAgLTE5OSw3
OCArMTk4LDI2IEBAIFBhdGggUGF0aDo6Y3JlYXRlUm91bmRlZFJlY3RhbmdsZShjb25zdCBGbG9h
dFJlY3QmIHJlY3RhbmdsZSwgY29uc3QgRmxvYXRTaXplJiB0CiAKICAgICBwYXRoLmNsb3NlU3Vi
cGF0aCgpOwogCi0gICAgcmV0dXJuIHBhdGg7CisgICAgcmV0dXJuOwogfQogCi1QYXRoIFBhdGg6
OmNyZWF0ZVJlY3RhbmdsZShjb25zdCBGbG9hdFJlY3QmIHJlY3RhbmdsZSkKKyNpZiAwCit2b2lk
IFBhdGg6OmFkZFJlY3RhbmdsZShjb25zdCBGbG9hdFJlY3QmIHJlY3RhbmdsZSkKIHsKLSAgICBQ
YXRoIHBhdGg7CiAgICAgZmxvYXQgeCA9IHJlY3RhbmdsZS54KCk7CiAgICAgZmxvYXQgeSA9IHJl
Y3RhbmdsZS55KCk7CiAgICAgZmxvYXQgd2lkdGggPSByZWN0YW5nbGUud2lkdGgoKTsKICAgICBm
bG9hdCBoZWlnaHQgPSByZWN0YW5nbGUuaGVpZ2h0KCk7CiAgICAgaWYgKHdpZHRoIDw9IDAuMGYg
fHwgaGVpZ2h0IDw9IDAuMGYpCi0gICAgICAgIHJldHVybiBwYXRoOwotICAgIAorICAgICAgICBy
ZXR1cm47CisKKyAgICBQYXRoIHBhdGg7CiAgICAgcGF0aC5tb3ZlVG8oRmxvYXRQb2ludCh4LCB5
KSk7CiAgICAgcGF0aC5hZGRMaW5lVG8oRmxvYXRQb2ludCh4ICsgd2lkdGgsIHkpKTsKICAgICBw
YXRoLmFkZExpbmVUbyhGbG9hdFBvaW50KHggKyB3aWR0aCwgeSArIGhlaWdodCkpOwogICAgIHBh
dGguYWRkTGluZVRvKEZsb2F0UG9pbnQoeCwgeSArIGhlaWdodCkpOwogICAgIHBhdGguY2xvc2VT
dWJwYXRoKCk7Ci0KLSAgICByZXR1cm4gcGF0aDsKLX0KLQotUGF0aCBQYXRoOjpjcmVhdGVFbGxp
cHNlKGNvbnN0IEZsb2F0UG9pbnQmIGNlbnRlciwgZmxvYXQgcngsIGZsb2F0IHJ5KQotewotICAg
IGZsb2F0IGN4ID0gY2VudGVyLngoKTsKLSAgICBmbG9hdCBjeSA9IGNlbnRlci55KCk7Ci0gICAg
UGF0aCBwYXRoOwotICAgIGlmIChyeCA8PSAwLjBmIHx8IHJ5IDw9IDAuMGYpCi0gICAgICAgIHJl
dHVybiBwYXRoOwotCi0gICAgZmxvYXQgeCA9IGN4OwotICAgIGZsb2F0IHkgPSBjeTsKLQotICAg
IHVuc2lnbmVkIHN0ZXAgPSAwLCBudW0gPSAxMDA7Ci0gICAgYm9vbCBydW5uaW5nID0gdHJ1ZTsK
LSAgICB3aGlsZSAocnVubmluZykKLSAgICB7Ci0gICAgICAgIGlmIChzdGVwID09IG51bSkKLSAg
ICAgICAgewotICAgICAgICAgICAgcnVubmluZyA9IGZhbHNlOwotICAgICAgICAgICAgYnJlYWs7
Ci0gICAgICAgIH0KLQotICAgICAgICBmbG9hdCBhbmdsZSA9IHN0YXRpY19jYXN0PGZsb2F0Pihz
dGVwKSAvIHN0YXRpY19jYXN0PGZsb2F0PihudW0pICogMi4wZiAqIHBpRmxvYXQ7Ci0gICAgICAg
IHggPSBjeCArIGNvc2YoYW5nbGUpICogcng7Ci0gICAgICAgIHkgPSBjeSArIHNpbmYoYW5nbGUp
ICogcnk7Ci0KLSAgICAgICAgc3RlcCsrOwotICAgICAgICBpZiAoc3RlcCA9PSAxKQotICAgICAg
ICAgICAgcGF0aC5tb3ZlVG8oRmxvYXRQb2ludCh4LCB5KSk7Ci0gICAgICAgIGVsc2UKLSAgICAg
ICAgICAgIHBhdGguYWRkTGluZVRvKEZsb2F0UG9pbnQoeCwgeSkpOwotICAgIH0KLQotICAgIHBh
dGguY2xvc2VTdWJwYXRoKCk7Ci0KLSAgICByZXR1cm4gcGF0aDsKLX0KLQotUGF0aCBQYXRoOjpj
cmVhdGVDaXJjbGUoY29uc3QgRmxvYXRQb2ludCYgY2VudGVyLCBmbG9hdCByKQotewotICAgIHJl
dHVybiBjcmVhdGVFbGxpcHNlKGNlbnRlciwgciwgcik7Ci19Ci0KLVBhdGggUGF0aDo6Y3JlYXRl
TGluZShjb25zdCBGbG9hdFBvaW50JiBzdGFydCwgY29uc3QgRmxvYXRQb2ludCYgZW5kKQotewot
ICAgIFBhdGggcGF0aDsKLQotICAgIHBhdGgubW92ZVRvKHN0YXJ0KTsKLSAgICBwYXRoLmFkZExp
bmVUbyhlbmQpOwotCi0gICAgcmV0dXJuIHBhdGg7CiB9CisjZW5kaWYKIAogfQpkaWZmIC0tZ2l0
IGEvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9QYXRoLmggYi9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL1BhdGguaAppbmRleCA0M2JhODg5Li5mYmRlOTY4IDEwMDY0NAotLS0gYS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL1BhdGguaAorKysgYi9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L1BhdGguaApAQCAtMTQ0LDEyICsxNDQsOCBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKICAgICAg
ICAgUGxhdGZvcm1QYXRoUHRyIHBsYXRmb3JtUGF0aCgpIGNvbnN0IHsgcmV0dXJuIG1fcGF0aDsg
fQogCi0gICAgICAgIHN0YXRpYyBQYXRoIGNyZWF0ZVJvdW5kZWRSZWN0YW5nbGUoY29uc3QgRmxv
YXRSZWN0JiwgY29uc3QgRmxvYXRTaXplJiByb3VuZGluZ1JhZGlpKTsKLSAgICAgICAgc3RhdGlj
IFBhdGggY3JlYXRlUm91bmRlZFJlY3RhbmdsZShjb25zdCBGbG9hdFJlY3QmLCBjb25zdCBGbG9h
dFNpemUmIHRvcExlZnRSYWRpdXMsIGNvbnN0IEZsb2F0U2l6ZSYgdG9wUmlnaHRSYWRpdXMsIGNv
bnN0IEZsb2F0U2l6ZSYgYm90dG9tTGVmdFJhZGl1cywgY29uc3QgRmxvYXRTaXplJiBib3R0b21S
aWdodFJhZGl1cyk7Ci0gICAgICAgIHN0YXRpYyBQYXRoIGNyZWF0ZVJlY3RhbmdsZShjb25zdCBG
bG9hdFJlY3QmKTsKLSAgICAgICAgc3RhdGljIFBhdGggY3JlYXRlRWxsaXBzZShjb25zdCBGbG9h
dFBvaW50JiBjZW50ZXIsIGZsb2F0IHJ4LCBmbG9hdCByeSk7Ci0gICAgICAgIHN0YXRpYyBQYXRo
IGNyZWF0ZUNpcmNsZShjb25zdCBGbG9hdFBvaW50JiBjZW50ZXIsIGZsb2F0IHIpOwotICAgICAg
ICBzdGF0aWMgUGF0aCBjcmVhdGVMaW5lKGNvbnN0IEZsb2F0UG9pbnQmLCBjb25zdCBGbG9hdFBv
aW50Jik7CisgICAgICAgIHZvaWQgYWRkUm91bmRlZFJlY3RhbmdsZShjb25zdCBGbG9hdFJlY3Qm
LCBjb25zdCBGbG9hdFNpemUmIHJvdW5kaW5nUmFkaWkpOworICAgICAgICB2b2lkIGFkZFJvdW5k
ZWRSZWN0YW5nbGUoY29uc3QgRmxvYXRSZWN0JiwgY29uc3QgRmxvYXRTaXplJiB0b3BMZWZ0UmFk
aXVzLCBjb25zdCBGbG9hdFNpemUmIHRvcFJpZ2h0UmFkaXVzLCBjb25zdCBGbG9hdFNpemUmIGJv
dHRvbUxlZnRSYWRpdXMsIGNvbnN0IEZsb2F0U2l6ZSYgYm90dG9tUmlnaHRSYWRpdXMpOwogCiAg
ICAgICAgIHZvaWQgYXBwbHkodm9pZCogaW5mbywgUGF0aEFwcGxpZXJGdW5jdGlvbikgY29uc3Q7
CiAgICAgICAgIHZvaWQgdHJhbnNmb3JtKGNvbnN0IEFmZmluZVRyYW5zZm9ybSYpOwpkaWZmIC0t
Z2l0IGEvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9Db250ZXh0U2hhZG93Q2Fpcm8u
Y3BwIGIvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9Db250ZXh0U2hhZG93Q2Fpcm8u
Y3BwCmluZGV4IDZmNWJlMjguLjRjYmNjMWEgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2Fpcm8vQ29udGV4dFNoYWRvd0NhaXJvLmNwcAorKysgYi9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2NhaXJvL0NvbnRleHRTaGFkb3dDYWlyby5jcHAKQEAgLTEzNCw4ICsxMzQs
MTAgQEAgdm9pZCBDb250ZXh0U2hhZG93OjpkcmF3UmVjdFNoYWRvd1dpdGhvdXRUaWxpbmcoUGxh
dGZvcm1Db250ZXh0IGNvbnRleHQsIGNvbnN0IEkKICAgICBpZiAoIW1fbGF5ZXJDb250ZXh0KQog
ICAgICAgICByZXR1cm47CiAKLSAgICBhcHBlbmRXZWJDb3JlUGF0aFRvQ2Fpcm9Db250ZXh0KG1f
bGF5ZXJDb250ZXh0LCBQYXRoOjpjcmVhdGVSb3VuZGVkUmVjdGFuZ2xlKHNoYWRvd1JlY3QsIHRv
cExlZnRSYWRpdXMsIHRvcFJpZ2h0UmFkaXVzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm90
dG9tTGVmdFJhZGl1cywgYm90dG9tUmlnaHRSYWRpdXMpKTsKKyAgICBQYXRoIHBhdGg7CisgICAg
cGF0aC5hZGRSb3VuZGVkUmVjdGFuZ2xlKHNoYWRvd1JlY3QsIHRvcExlZnRSYWRpdXMsIHRvcFJp
Z2h0UmFkaXVzLCBib3R0b21MZWZ0UmFkaXVzLCBib3R0b21SaWdodFJhZGl1cyk7CisKKyAgICBh
cHBlbmRXZWJDb3JlUGF0aFRvQ2Fpcm9Db250ZXh0KG1fbGF5ZXJDb250ZXh0LCBwYXRoKTsKICAg
ICBjYWlyb19zZXRfc291cmNlX3JnYmEobV9sYXllckNvbnRleHQsIDAsIDAsIDAsIGFscGhhKTsK
ICAgICBjYWlyb19maWxsKG1fbGF5ZXJDb250ZXh0KTsKIApAQCAtMjM4LDEwICsyNDAsMTMgQEAg
dm9pZCBDb250ZXh0U2hhZG93OjpkcmF3UmVjdFNoYWRvdyhHcmFwaGljc0NvbnRleHQqIGNvbnRl
eHQsIGNvbnN0IEludFJlY3QmIHJlY3QKICAgICBjYWlyb19wYWludChtX2xheWVyQ29udGV4dCk7
CiAgICAgY2Fpcm9fc2V0X29wZXJhdG9yKG1fbGF5ZXJDb250ZXh0LCBDQUlST19PUEVSQVRPUl9P
VkVSKTsKIAotICAgIC8vIERyYXcgdGhlIHJlY3RhbmdsZS4KLSAgICBJbnRSZWN0IHRlbXBsYXRl
UmVjdCA9IEludFJlY3QobV9ibHVyRGlzdGFuY2UsIG1fYmx1ckRpc3RhbmNlLCBzaGFkb3dUZW1w
bGF0ZVNpemUud2lkdGgoKSAtIHJhZGl1c1R3aWNlLCBzaGFkb3dUZW1wbGF0ZVNpemUuaGVpZ2h0
KCkgLSByYWRpdXNUd2ljZSk7Ci0gICAgYXBwZW5kV2ViQ29yZVBhdGhUb0NhaXJvQ29udGV4dCht
X2xheWVyQ29udGV4dCwgUGF0aDo6Y3JlYXRlUm91bmRlZFJlY3RhbmdsZSh0ZW1wbGF0ZVJlY3Qs
IHRvcExlZnRSYWRpdXMsIHRvcFJpZ2h0UmFkaXVzLAotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Ym90dG9tTGVmdFJhZGl1cywgYm90dG9tUmlnaHRSYWRpdXMpKTsKKyAgICB7CisgICAgICAgIC8v
IERyYXcgdGhlIHJlY3RhbmdsZS4KKyAgICAgICAgSW50UmVjdCB0ZW1wbGF0ZVJlY3QgPSBJbnRS
ZWN0KG1fYmx1ckRpc3RhbmNlLCBtX2JsdXJEaXN0YW5jZSwgc2hhZG93VGVtcGxhdGVTaXplLndp
ZHRoKCkgLSByYWRpdXNUd2ljZSwgc2hhZG93VGVtcGxhdGVTaXplLmhlaWdodCgpIC0gcmFkaXVz
VHdpY2UpOworICAgICAgICBQYXRoIHBhdGg7CisgICAgICAgIHBhdGguYWRkUm91bmRlZFJlY3Rh
bmdsZSh0ZW1wbGF0ZVJlY3QsIHRvcExlZnRSYWRpdXMsIHRvcFJpZ2h0UmFkaXVzLCBib3R0b21M
ZWZ0UmFkaXVzLCBib3R0b21SaWdodFJhZGl1cyk7CisgICAgICAgIGFwcGVuZFdlYkNvcmVQYXRo
VG9DYWlyb0NvbnRleHQobV9sYXllckNvbnRleHQsIHBhdGgpOworICAgIH0KIAogICAgIGNhaXJv
X3NldF9zb3VyY2VfcmdiYShtX2xheWVyQ29udGV4dCwgMCwgMCwgMCwgY29udGV4dC0+Z2V0QWxw
aGEoKSk7CiAgICAgY2Fpcm9fZmlsbChtX2xheWVyQ29udGV4dCk7CkBAIC0yNjMsOCArMjY4LDkg
QEAgdm9pZCBDb250ZXh0U2hhZG93OjpkcmF3UmVjdFNoYWRvdyhHcmFwaGljc0NvbnRleHQqIGNv
bnRleHQsIGNvbnN0IEludFJlY3QmIHJlY3QKICAgICBzaGFkb3dSZWN0LmluZmxhdGUoLXJhZGl1
c1R3aWNlKTsKICAgICBpZiAoIXNoYWRvd1JlY3QuaXNFbXB0eSgpKSB7CiAgICAgICAgIGNhaXJv
X3NhdmUoY3IpOwotICAgICAgICBhcHBlbmRXZWJDb3JlUGF0aFRvQ2Fpcm9Db250ZXh0KGNyLCBQ
YXRoOjpjcmVhdGVSb3VuZGVkUmVjdGFuZ2xlKHNoYWRvd1JlY3QsIHRvcExlZnRSYWRpdXMsCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICB0b3BSaWdodFJhZGl1cywgYm90dG9tTGVmdFJhZGl1cywgYm90
dG9tUmlnaHRSYWRpdXMpKTsKKyAgICAgICAgUGF0aCBwYXRoOworICAgICAgICBwYXRoLmFkZFJv
dW5kZWRSZWN0YW5nbGUoc2hhZG93UmVjdCwgdG9wTGVmdFJhZGl1cywgdG9wUmlnaHRSYWRpdXMs
IGJvdHRvbUxlZnRSYWRpdXMsIGJvdHRvbVJpZ2h0UmFkaXVzKTsKKyAgICAgICAgYXBwZW5kV2Vi
Q29yZVBhdGhUb0NhaXJvQ29udGV4dChjciwgcGF0aCk7CiAgICAgICAgIHNldFNvdXJjZVJHQkFG
cm9tQ29sb3IoY3IsIG1fY29sb3IpOwogICAgICAgICBjYWlyb19maWxsKGNyKTsKICAgICAgICAg
Y2Fpcm9fcmVzdG9yZShjcik7CmRpZmYgLS1naXQgYS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2NhaXJvL0dyYXBoaWNzQ29udGV4dENhaXJvLmNwcCBiL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY2Fpcm8vR3JhcGhpY3NDb250ZXh0Q2Fpcm8uY3BwCmluZGV4IGU5NGRmYmEuLjAyM2U2NGUg
MTAwNjQ0Ci0tLSBhL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vR3JhcGhpY3NDb250
ZXh0Q2Fpcm8uY3BwCisrKyBiL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vR3JhcGhp
Y3NDb250ZXh0Q2Fpcm8uY3BwCkBAIC03MDMsOCArNzAzLDExIEBAIHZvaWQgR3JhcGhpY3NDb250
ZXh0OjpkcmF3Rm9jdXNSaW5nKGNvbnN0IFZlY3RvcjxJbnRSZWN0PiYgcmVjdHMsIGludCB3aWR0
aCwgaW50CiAgICAgc2V0UGxhdGZvcm1TdHJva2VTdHlsZShEb3R0ZWRTdHJva2UpOwogI2Vsc2UK
ICAgICBpbnQgcmFkaXVzID0gKHdpZHRoIC0gMSkgLyAyOwotICAgIGZvciAodW5zaWduZWQgaSA9
IDA7IGkgPCByZWN0Q291bnQ7IGkrKykKLSAgICAgICAgYXBwZW5kV2ViQ29yZVBhdGhUb0NhaXJv
Q29udGV4dChjciwgUGF0aDo6Y3JlYXRlUm91bmRlZFJlY3RhbmdsZShyZWN0c1tpXSwgRmxvYXRT
aXplKHJhZGl1cywgcmFkaXVzKSkpOworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCByZWN0
Q291bnQ7IGkrKykgeworICAgICAgICBQYXRoIHBhdGg7CisgICAgICAgIHBhdGguYWRkUm91bmRl
ZFJlY3RhbmdsZShyZWN0c1tpXSwgRmxvYXRTaXplKHJhZGl1cywgcmFkaXVzKSk7CisgICAgICAg
IGFwcGVuZFdlYkNvcmVQYXRoVG9DYWlyb0NvbnRleHQoY3IsIHBhdGgpOworICAgIH0KIAogICAg
IC8vIEZvcmNlIHRoZSBhbHBoYSB0byA1MCUuICBUaGlzIG1hdGNoZXMgd2hhdCB0aGUgTWFjIGRv
ZXMgd2l0aCBvdXRsaW5lIHJpbmdzLgogICAgIENvbG9yIHJpbmdDb2xvcihjb2xvci5yZWQoKSwg
Y29sb3IuZ3JlZW4oKSwgY29sb3IuYmx1ZSgpLCAxMjcpOwpAQCAtMTI3NSw3ICsxMjc4LDEyIEBA
IHZvaWQgR3JhcGhpY3NDb250ZXh0OjpkcmF3VGlsZWRTaGFkb3coY29uc3QgSW50UmVjdCYgcmVj
dCwgY29uc3QgRmxvYXRTaXplJiB0b3BMCiAgICAgLy8gRHJhdyBzaGFkb3cgaW50byBhIG5ldyBJ
bWFnZUJ1ZmZlci4KICAgICBjYWlyb190KiBzbWFsbEJ1ZmZlckNvbnRleHQgPSBzbWFsbEJ1ZmZl
ci0+Y29udGV4dCgpLT5wbGF0Zm9ybUNvbnRleHQoKTsKICAgICBjb3B5Q29udGV4dFByb3BlcnRp
ZXMoY3IsIHNtYWxsQnVmZmVyQ29udGV4dCk7Ci0gICAgYXBwZW5kV2ViQ29yZVBhdGhUb0NhaXJv
Q29udGV4dChzbWFsbEJ1ZmZlci0+Y29udGV4dCgpLT5wbGF0Zm9ybUNvbnRleHQoKSwgUGF0aDo6
Y3JlYXRlUm91bmRlZFJlY3RhbmdsZShzbWFsbFJlY3QsIHRvcExlZnRSYWRpdXMsIHRvcFJpZ2h0
UmFkaXVzLCBib3R0b21MZWZ0UmFkaXVzLCBib3R0b21SaWdodFJhZGl1cykpOworCisgICAgewor
ICAgICAgICBQYXRoIHBhdGg7CisgICAgICAgIHBhdGguYWRkUm91bmRlZFJlY3RhbmdsZShzbWFs
bFJlY3QsIHRvcExlZnRSYWRpdXMsIHRvcFJpZ2h0UmFkaXVzLCBib3R0b21MZWZ0UmFkaXVzLCBi
b3R0b21SaWdodFJhZGl1cyk7CisgICAgICAgIGFwcGVuZFdlYkNvcmVQYXRoVG9DYWlyb0NvbnRl
eHQoc21hbGxCdWZmZXItPmNvbnRleHQoKS0+cGxhdGZvcm1Db250ZXh0KCksIHBhdGgpOworICAg
IH0KICAgICBzZXRQbGF0Zm9ybUZpbGwodGhpcywgc21hbGxCdWZmZXJDb250ZXh0LCBtX2NvbW1v
bik7CiAKICAgICBPd25QdHI8SW1hZ2VCdWZmZXI+IHNoYWRvd0J1ZmZlciA9IEltYWdlQnVmZmVy
OjpjcmVhdGUoc21hbGxCdWZmZXJTaXplKTsKQEAgLTEyOTQsNyArMTMwMiw5IEBAIHZvaWQgR3Jh
cGhpY3NDb250ZXh0OjpkcmF3VGlsZWRTaGFkb3coY29uc3QgSW50UmVjdCYgcmVjdCwgY29uc3Qg
RmxvYXRTaXplJiB0b3BMCiAgICAgc2hhZG93UmVjdC5pbmZsYXRlKC1yYWRpdXNUd2ljZSk7CiAg
ICAgaWYgKCFzaGFkb3dSZWN0LmlzRW1wdHkoKSkgewogICAgICAgICBjYWlyb19zYXZlKGNyKTsK
LSAgICAgICAgYXBwZW5kV2ViQ29yZVBhdGhUb0NhaXJvQ29udGV4dChjciwgUGF0aDo6Y3JlYXRl
Um91bmRlZFJlY3RhbmdsZShzaGFkb3dSZWN0LCB0b3BMZWZ0UmFkaXVzLCB0b3BSaWdodFJhZGl1
cywgYm90dG9tTGVmdFJhZGl1cywgYm90dG9tUmlnaHRSYWRpdXMpKTsKKyAgICAgICAgUGF0aCBw
YXRoOworICAgICAgICBwYXRoLmFkZFJvdW5kZWRSZWN0YW5nbGUoc2hhZG93UmVjdCwgdG9wTGVm
dFJhZGl1cywgdG9wUmlnaHRSYWRpdXMsIGJvdHRvbUxlZnRSYWRpdXMsIGJvdHRvbVJpZ2h0UmFk
aXVzKTsKKyAgICAgICAgYXBwZW5kV2ViQ29yZVBhdGhUb0NhaXJvQ29udGV4dChjciwgcGF0aCk7
CiAgICAgICAgIHNldENvbG9yKGNyLCBzaGFkb3dDb2xvcik7CiAgICAgICAgIGNhaXJvX2ZpbGwo
Y3IpOwogICAgICAgICBjYWlyb19yZXN0b3JlKGNyKTsKQEAgLTEzNzMsNyArMTM4Myw5IEBAIHZv
aWQgR3JhcGhpY3NDb250ZXh0OjpmaWxsUm91bmRlZFJlY3QoY29uc3QgSW50UmVjdCYgciwgY29u
c3QgSW50U2l6ZSYgdG9wTGVmdCwKIAogICAgIGNhaXJvX3QqIGNyID0gbV9kYXRhLT5jcjsKICAg
ICBjYWlyb19zYXZlKGNyKTsKLSAgICBhcHBlbmRXZWJDb3JlUGF0aFRvQ2Fpcm9Db250ZXh0KGNy
LCBQYXRoOjpjcmVhdGVSb3VuZGVkUmVjdGFuZ2xlKHIsIHRvcExlZnQsIHRvcFJpZ2h0LCBib3R0
b21MZWZ0LCBib3R0b21SaWdodCkpOworICAgIFBhdGggcGF0aDsKKyAgICBwYXRoLmFkZFJvdW5k
ZWRSZWN0YW5nbGUociwgdG9wTGVmdCwgdG9wUmlnaHQsIGJvdHRvbUxlZnQsIGJvdHRvbVJpZ2h0
KTsKKyAgICBhcHBlbmRXZWJDb3JlUGF0aFRvQ2Fpcm9Db250ZXh0KGNyLCBwYXRoKTsKICAgICBz
ZXRDb2xvcihjciwgY29sb3IpOwogICAgIGRyYXdQYXRoU2hhZG93KHRoaXMsIG1fY29tbW9uLCB0
cnVlLCBmYWxzZSk7CiAgICAgY2Fpcm9fZmlsbChjcik7CmRpZmYgLS1naXQgYS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2NnL0dyYXBoaWNzQ29udGV4dENHLmNwcCBiL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY2cvR3JhcGhpY3NDb250ZXh0Q0cuY3BwCmluZGV4IGJkOGU4NTAuLjI1ZWZi
N2IgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvR3JhcGhpY3NDb250
ZXh0Q0cuY3BwCisrKyBiL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvR3JhcGhpY3NDb250
ZXh0Q0cuY3BwCkBAIC02NjcsNyArNjY3LDkgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6OmZpbGxS
b3VuZGVkUmVjdChjb25zdCBJbnRSZWN0JiByZWN0LCBjb25zdCBJbnRTaXplJiB0b3BMZWYKICAg
ICBpZiAob2xkRmlsbENvbG9yICE9IGNvbG9yIHx8IG9sZENvbG9yU3BhY2UgIT0gY29sb3JTcGFj
ZSkKICAgICAgICAgc2V0Q0dGaWxsQ29sb3IoY29udGV4dCwgY29sb3IsIGNvbG9yU3BhY2UpOwog
Ci0gICAgYWRkUGF0aChQYXRoOjpjcmVhdGVSb3VuZGVkUmVjdGFuZ2xlKHJlY3QsIHRvcExlZnQs
IHRvcFJpZ2h0LCBib3R0b21MZWZ0LCBib3R0b21SaWdodCkpOworICAgIFBhdGggcGF0aDsKKyAg
ICBwYXRoLmFkZFJvdW5kZWRSZWN0YW5nbGUocmVjdCwgdG9wTGVmdCwgdG9wUmlnaHQsIGJvdHRv
bUxlZnQsIGJvdHRvbVJpZ2h0KTsKKyAgICBhZGRQYXRoKHBhdGgpOwogICAgIGZpbGxQYXRoKCk7
CiAKICAgICBpZiAob2xkRmlsbENvbG9yICE9IGNvbG9yIHx8IG9sZENvbG9yU3BhY2UgIT0gY29s
b3JTcGFjZSkKZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvcXQvR3JhcGhp
Y3NDb250ZXh0UXQuY3BwIGIvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9xdC9HcmFwaGljc0Nv
bnRleHRRdC5jcHAKaW5kZXggN2U0YWY0MC4uNzI5MjExZiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9xdC9HcmFwaGljc0NvbnRleHRRdC5jcHAKKysrIGIvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9xdC9HcmFwaGljc0NvbnRleHRRdC5jcHAKQEAgLTcyMiw3ICs3MjIs
OCBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6ZmlsbFJvdW5kZWRSZWN0KGNvbnN0IEludFJlY3Qm
IHJlY3QsIGNvbnN0IEludFNpemUmIHRvcExlZgogICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkg
fHwgIWNvbG9yLmlzVmFsaWQoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgUGF0aCBwYXRoID0g
UGF0aDo6Y3JlYXRlUm91bmRlZFJlY3RhbmdsZShyZWN0LCB0b3BMZWZ0LCB0b3BSaWdodCwgYm90
dG9tTGVmdCwgYm90dG9tUmlnaHQpOworICAgIFBhdGggcGF0aDsKKyAgICBwYXRoLmFkZFJvdW5k
ZWRSZWN0YW5nbGUocmVjdCwgdG9wTGVmdCwgdG9wUmlnaHQsIGJvdHRvbUxlZnQsIGJvdHRvbVJp
Z2h0KTsKICAgICBRUGFpbnRlciogcCA9IG1fZGF0YS0+cCgpOwogICAgIGlmIChtX2RhdGEtPmhh
c1NoYWRvdygpKSB7CiAgICAgICAgIHAtPnRyYW5zbGF0ZShtX2RhdGEtPnNoYWRvdy5vZmZzZXQo
KSk7CmRpZmYgLS1naXQgYS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCb3hNb2RlbE9iamVjdC5j
cHAgYi9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCb3hNb2RlbE9iamVjdC5jcHAKaW5kZXggMDJh
Mjg0Ny4uZWMxZmI0NCAxMDA2NDQKLS0tIGEvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQm94TW9k
ZWxPYmplY3QuY3BwCisrKyBiL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJveE1vZGVsT2JqZWN0
LmNwcApAQCAtMTA2MSw3ICsxMDYxLDcgQEAgdm9pZCBSZW5kZXJCb3hNb2RlbE9iamVjdDo6cGFp
bnRCb3JkZXIoR3JhcGhpY3NDb250ZXh0KiBncmFwaGljc0NvbnRleHQsIGludCB0eCwKICAgICAg
ICAgZ3JhcGhpY3NDb250ZXh0LT5hZGRSb3VuZGVkUmVjdENsaXAoYm9yZGVyUmVjdCwgdG9wTGVm
dCwgdG9wUmlnaHQsIGJvdHRvbUxlZnQsIGJvdHRvbVJpZ2h0KTsKICAgICAgICAgZ3JhcGhpY3ND
b250ZXh0LT5jbGlwT3V0Um91bmRlZFJlY3QoaW5uZXJCb3JkZXJSZWN0LCBpbm5lclRvcExlZnRS
YWRpdXMsIGlubmVyVG9wUmlnaHRSYWRpdXMsIGlubmVyQm90dG9tTGVmdFJhZGl1cywgaW5uZXJC
b3R0b21SaWdodFJhZGl1cyk7CiAKLSAgICAgICAgcm91bmRlZFBhdGggPSBQYXRoOjpjcmVhdGVS
b3VuZGVkUmVjdGFuZ2xlKGJvcmRlclJlY3QsIHRvcExlZnQsIHRvcFJpZ2h0LCBib3R0b21MZWZ0
LCBib3R0b21SaWdodCk7CisgICAgICAgIHJvdW5kZWRQYXRoLmFkZFJvdW5kZWRSZWN0YW5nbGUo
Ym9yZGVyUmVjdCwgdG9wTGVmdCwgdG9wUmlnaHQsIGJvdHRvbUxlZnQsIGJvdHRvbVJpZ2h0KTsK
ICAgICAgICAgZ3JhcGhpY3NDb250ZXh0LT5hZGRQYXRoKHJvdW5kZWRQYXRoKTsKICAgICB9CiAK
QEAgLTE3NTIsMjQgKzE3NTIsMzUgQEAgdm9pZCBSZW5kZXJCb3hNb2RlbE9iamVjdDo6cGFpbnRC
b3hTaGFkb3coR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0LCBpbnQgdHgsIGludAogCiAgICAgICAg
ICAgICBjb250ZXh0LT5zYXZlKCk7CiAKLSAgICAgICAgICAgIGlmIChoYXNCb3JkZXJSYWRpdXMp
Ci0gICAgICAgICAgICAgICAgY29udGV4dC0+Y2xpcChQYXRoOjpjcmVhdGVSb3VuZGVkUmVjdGFu
Z2xlKHJlY3QsIHRvcExlZnQsIHRvcFJpZ2h0LCBib3R0b21MZWZ0LCBib3R0b21SaWdodCkpOwot
ICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgaWYgKGhhc0JvcmRlclJhZGl1cykgeworICAg
ICAgICAgICAgICAgIFBhdGggcGF0aDsKKyAgICAgICAgICAgICAgICBwYXRoLmFkZFJvdW5kZWRS
ZWN0YW5nbGUocmVjdCwgdG9wTGVmdCwgdG9wUmlnaHQsIGJvdHRvbUxlZnQsIGJvdHRvbVJpZ2h0
KTsKKyAgICAgICAgICAgICAgICBjb250ZXh0LT5jbGlwKHBhdGgpOworICAgICAgICAgICAgfSBl
bHNlCiAgICAgICAgICAgICAgICAgY29udGV4dC0+Y2xpcChyZWN0KTsKIAogICAgICAgICAgICAg
SW50U2l6ZSBleHRyYU9mZnNldCgyICogdyArIG1heCgwLCBzaGFkb3dPZmZzZXQud2lkdGgoKSkg
KyBzaGFkb3dCbHVyIC0gMiAqIHNoYWRvd1NwcmVhZCArIDEsIDApOwogICAgICAgICAgICAgY29u
dGV4dC0+dHJhbnNsYXRlKGV4dHJhT2Zmc2V0LndpZHRoKCksIGV4dHJhT2Zmc2V0LmhlaWdodCgp
KTsKICAgICAgICAgICAgIHNoYWRvd09mZnNldCAtPSBleHRyYU9mZnNldDsKIAotICAgICAgICAg
ICAgY29udGV4dC0+YmVnaW5QYXRoKCk7Ci0gICAgICAgICAgICBjb250ZXh0LT5hZGRQYXRoKFBh
dGg6OmNyZWF0ZVJlY3RhbmdsZShvdXRlclJlY3QpKTsKKyAgICAgICAgICAgIHsKKyAgICAgICAg
ICAgICAgICBQYXRoIHBhdGg7CisgICAgICAgICAgICAgICAgcGF0aC5hZGRSZWN0KG91dGVyUmVj
dCk7CisgICAgICAgICAgICAgICAgY29udGV4dC0+YmVnaW5QYXRoKCk7CisgICAgICAgICAgICAg
ICAgY29udGV4dC0+YWRkUGF0aChwYXRoKTsKKyAgICAgICAgICAgIH0KIAogICAgICAgICAgICAg
aWYgKGhhc0JvcmRlclJhZGl1cykgewogICAgICAgICAgICAgICAgIGlmIChzaGFkb3dTcHJlYWQg
PiAwKQogICAgICAgICAgICAgICAgICAgICB1bmlmb3JtbHlFeHBhbmRCb3JkZXJSYWRpaSgtc2hh
ZG93U3ByZWFkLCB0b3BMZWZ0LCB0b3BSaWdodCwgYm90dG9tTGVmdCwgYm90dG9tUmlnaHQpOwot
ICAgICAgICAgICAgICAgIGNvbnRleHQtPmFkZFBhdGgoUGF0aDo6Y3JlYXRlUm91bmRlZFJlY3Rh
bmdsZShob2xlUmVjdCwgdG9wTGVmdCwgdG9wUmlnaHQsIGJvdHRvbUxlZnQsIGJvdHRvbVJpZ2h0
KSk7Ci0gICAgICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgICAgICBjb250ZXh0LT5hZGRQYXRo
KFBhdGg6OmNyZWF0ZVJlY3RhbmdsZShob2xlUmVjdCkpOworICAgICAgICAgICAgICAgIFBhdGgg
cGF0aDsKKyAgICAgICAgICAgICAgICBwYXRoLmFkZFJvdW5kZWRSZWN0YW5nbGUoaG9sZVJlY3Qs
IHRvcExlZnQsIHRvcFJpZ2h0LCBib3R0b21MZWZ0LCBib3R0b21SaWdodCk7CisgICAgICAgICAg
ICAgICAgY29udGV4dC0+YWRkUGF0aChwYXRoKTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAg
ICAgICAgICAgICAgUGF0aCBwYXRoOworICAgICAgICAgICAgICAgIHBhdGguYWRkUmVjdChob2xl
UmVjdCk7CisgICAgICAgICAgICAgICAgY29udGV4dC0+YWRkUGF0aChwYXRoKTsKKyAgICAgICAg
ICAgIH0KIAogICAgICAgICAgICAgY29udGV4dC0+c2V0RmlsbFJ1bGUoUlVMRV9FVkVOT0REKTsK
ICAgICAgICAgICAgIGNvbnRleHQtPnNldEZpbGxDb2xvcihmaWxsQ29sb3IsIHMtPmNvbG9yU3Bh
Y2UoKSk7CmRpZmYgLS1naXQgYS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJFbWJlZGRlZE9iamVj
dC5jcHAgYi9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJFbWJlZGRlZE9iamVjdC5jcHAKaW5kZXgg
YWEzMDFlMi4uNTM2NTAwYyAxMDA2NDQKLS0tIGEvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyRW1i
ZWRkZWRPYmplY3QuY3BwCisrKyBiL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckVtYmVkZGVkT2Jq
ZWN0LmNwcApAQCAtMjA2LDcgKzIwNiw3IEBAIGJvb2wgUmVuZGVyRW1iZWRkZWRPYmplY3Q6Omdl
dFJlcGxhY2VtZW50VGV4dEdlb21ldHJ5KGludCB0eCwgaW50IHR5LCBGbG9hdFJlY3QmCiAgICAg
ZmxvYXQgeSA9IChjb250ZW50UmVjdC5zaXplKCkuaGVpZ2h0KCkgLyAyIC0gcmVwbGFjZW1lbnRU
ZXh0UmVjdC5zaXplKCkuaGVpZ2h0KCkgLyAyKSArIGNvbnRlbnRSZWN0LmxvY2F0aW9uKCkueSgp
OwogICAgIHJlcGxhY2VtZW50VGV4dFJlY3Quc2V0TG9jYXRpb24oRmxvYXRQb2ludCh4LCB5KSk7
CiAgICAgCi0gICAgcGF0aCA9IFBhdGg6OmNyZWF0ZVJvdW5kZWRSZWN0YW5nbGUocmVwbGFjZW1l
bnRUZXh0UmVjdCwgRmxvYXRTaXplKHJlcGxhY2VtZW50VGV4dFJvdW5kZWRSZWN0UmFkaXVzLCBy
ZXBsYWNlbWVudFRleHRSb3VuZGVkUmVjdFJhZGl1cykpOworICAgIHBhdGguYWRkUm91bmRlZFJl
Y3RhbmdsZShyZXBsYWNlbWVudFRleHRSZWN0LCBGbG9hdFNpemUocmVwbGFjZW1lbnRUZXh0Um91
bmRlZFJlY3RSYWRpdXMsIHJlcGxhY2VtZW50VGV4dFJvdW5kZWRSZWN0UmFkaXVzKSk7CiAKICAg
ICByZXR1cm4gdHJ1ZTsKIH0KZGlmZiAtLWdpdCBhL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5k
ZXJTVkdQYXRoLmNwcCBiL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdQYXRoLmNwcApp
bmRleCA5MDdiNjBjLi5mNzYxYjUyIDEwMDY0NAotLS0gYS9XZWJDb3JlL3JlbmRlcmluZy9zdmcv
UmVuZGVyU1ZHUGF0aC5jcHAKKysrIGIvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Bh
dGguY3BwCkBAIC0xMDUsNyArMTA1LDggQEAgdm9pZCBSZW5kZXJTVkdQYXRoOjpsYXlvdXQoKQog
CiAgICAgYm9vbCBuZWVkc1BhdGhVcGRhdGUgPSBtX25lZWRzUGF0aFVwZGF0ZTsKICAgICBpZiAo
bmVlZHNQYXRoVXBkYXRlKSB7Ci0gICAgICAgIG1fcGF0aCA9IGVsZW1lbnQtPnRvUGF0aERhdGEo
KTsKKyAgICAgICAgbV9wYXRoLmNsZWFyKCk7CisgICAgICAgIGVsZW1lbnQtPnRvUGF0aERhdGEo
bV9wYXRoKTsKICAgICAgICAgbV9uZWVkc1BhdGhVcGRhdGUgPSBmYWxzZTsKICAgICAgICAgdXBk
YXRlQ2FjaGVkQm91bmRhcmllc0luUGFyZW50cyA9IHRydWU7CiAgICAgfQpkaWZmIC0tZ2l0IGEv
V2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1RleHRQYXRoLmNwcCBiL1dlYkNvcmUvcmVu
ZGVyaW5nL3N2Zy9SZW5kZXJTVkdUZXh0UGF0aC5jcHAKaW5kZXggNWQ5NzdmOS4uNjRlYmM2ZCAx
MDA2NDQKLS0tIGEvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1RleHRQYXRoLmNwcAor
KysgYi9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHVGV4dFBhdGguY3BwCkBAIC01Myw3
ICs1Myw4IEBAIFBhdGggUmVuZGVyU1ZHVGV4dFBhdGg6OmxheW91dFBhdGgoKSBjb25zdAogICAg
IAogICAgIFNWR1BhdGhFbGVtZW50KiBwYXRoRWxlbWVudCA9IHN0YXRpY19jYXN0PFNWR1BhdGhF
bGVtZW50Kj4odGFyZ2V0RWxlbWVudCk7CiAgICAgCi0gICAgUGF0aCBwYXRoRGF0YSA9IHBhdGhF
bGVtZW50LT50b1BhdGhEYXRhKCk7CisgICAgUGF0aCBwYXRoRGF0YTsKKyAgICBwYXRoRWxlbWVu
dC0+dG9QYXRoRGF0YShwYXRoRGF0YSk7CiAgICAgLy8gU3BlYzogIFRoZSB0cmFuc2Zvcm0gYXR0
cmlidXRlIG9uIHRoZSByZWZlcmVuY2VkICdwYXRoJyBlbGVtZW50IHJlcHJlc2VudHMgYQogICAg
IC8vIHN1cHBsZW1lbnRhbCB0cmFuc2Zvcm1hdGlvbiByZWxhdGl2ZSB0byB0aGUgY3VycmVudCB1
c2VyIGNvb3JkaW5hdGUgc3lzdGVtIGZvcgogICAgIC8vIHRoZSBjdXJyZW50ICd0ZXh0JyBlbGVt
ZW50LCBpbmNsdWRpbmcgYW55IGFkanVzdG1lbnRzIHRvIHRoZSBjdXJyZW50IHVzZXIgY29vcmRp
bmF0ZQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR0lubGluZVRleHRCb3gu
Y3BwIGIvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR0lubGluZVRleHRCb3guY3BwCmluZGV4IDRj
OWNjODEuLjI4Mjg0MGMgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdJbmxp
bmVUZXh0Qm94LmNwcAorKysgYi9XZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHSW5saW5lVGV4dEJv
eC5jcHAKQEAgLTQ4MSw5ICs0ODEsMTIgQEAgdm9pZCBTVkdJbmxpbmVUZXh0Qm94OjpwYWludERl
Y29yYXRpb25XaXRoU3R5bGUoR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0LCBFVGV4dEQKICAgICBm
bG9hdCB0aGlja25lc3MgPSB0aGlja25lc3NGb3JEZWNvcmF0aW9uKGRlY29yYXRpb24sIGZvbnQp
OwogICAgIGZsb2F0IHkgPSBmcmFnbWVudC55IC0gZm9udC5hc2NlbnQoKSArIHBvc2l0aW9uT2Zm
c2V0Rm9yRGVjb3JhdGlvbihkZWNvcmF0aW9uLCBmb250LCB0aGlja25lc3MpOwogCisgICAgUGF0
aCBwYXRoOworICAgIHBhdGguYWRkUmVjdChGbG9hdFJlY3QoZnJhZ21lbnQueCwgeSwgZnJhZ21l
bnQud2lkdGgsIHRoaWNrbmVzcykpOworCiAgICAgY29udGV4dC0+c2F2ZSgpOwogICAgIGNvbnRl
eHQtPmJlZ2luUGF0aCgpOwotICAgIGNvbnRleHQtPmFkZFBhdGgoUGF0aDo6Y3JlYXRlUmVjdGFu
Z2xlKEZsb2F0UmVjdChmcmFnbWVudC54LCB5LCBmcmFnbWVudC53aWR0aCwgdGhpY2tuZXNzKSkp
OworICAgIGNvbnRleHQtPmFkZFBhdGgocGF0aCk7CiAKICAgICBpZiAoYWNxdWlyZVBhaW50aW5n
UmVzb3VyY2UoY29udGV4dCwgZGVjb3JhdGlvblJlbmRlcmVyLCBkZWNvcmF0aW9uU3R5bGUpKQog
ICAgICAgICByZWxlYXNlUGFpbnRpbmdSZXNvdXJjZShjb250ZXh0KTsKZGlmZiAtLWdpdCBhL1dl
YkNvcmUvc3ZnL1NWR0FuaW1hdGVNb3Rpb25FbGVtZW50LmNwcCBiL1dlYkNvcmUvc3ZnL1NWR0Fu
aW1hdGVNb3Rpb25FbGVtZW50LmNwcAppbmRleCBiNTBhOTkzLi4yNjE1MWVkIDEwMDY0NAotLS0g
YS9XZWJDb3JlL3N2Zy9TVkdBbmltYXRlTW90aW9uRWxlbWVudC5jcHAKKysrIGIvV2ViQ29yZS9z
dmcvU1ZHQW5pbWF0ZU1vdGlvbkVsZW1lbnQuY3BwCkBAIC0xMTIsOSArMTEyLDEwIEBAIFBhdGgg
U1ZHQW5pbWF0ZU1vdGlvbkVsZW1lbnQ6OmFuaW1hdGlvblBhdGgoKSBjb25zdAogICAgICAgICBp
ZiAoY2hpbGQtPmhhc1RhZ05hbWUoU1ZHTmFtZXM6Om1wYXRoVGFnKSkgewogICAgICAgICAgICAg
U1ZHTVBhdGhFbGVtZW50KiBtUGF0aCA9IHN0YXRpY19jYXN0PFNWR01QYXRoRWxlbWVudCo+KGNo
aWxkKTsKICAgICAgICAgICAgIFNWR1BhdGhFbGVtZW50KiBwYXRoRWxlbWVudCA9IG1QYXRoLT5w
YXRoRWxlbWVudCgpOworICAgICAgICAgICAgUGF0aCBwYXRoOwogICAgICAgICAgICAgaWYgKHBh
dGhFbGVtZW50KQotICAgICAgICAgICAgICAgIHJldHVybiBwYXRoRWxlbWVudC0+dG9QYXRoRGF0
YSgpOwotICAgICAgICAgICAgcmV0dXJuIFBhdGgoKTsKKyAgICAgICAgICAgICAgICBwYXRoRWxl
bWVudC0+dG9QYXRoRGF0YShwYXRoKTsKKyAgICAgICAgICAgIHJldHVybiBwYXRoOwogICAgICAg
ICB9CiAgICAgfQogICAgIGlmIChoYXNBdHRyaWJ1dGUoU1ZHTmFtZXM6OnBhdGhBdHRyKSkKZGlm
ZiAtLWdpdCBhL1dlYkNvcmUvc3ZnL1NWR0NpcmNsZUVsZW1lbnQuY3BwIGIvV2ViQ29yZS9zdmcv
U1ZHQ2lyY2xlRWxlbWVudC5jcHAKaW5kZXggNGVkNGVmZS4uMzViZjdkMSAxMDA2NDQKLS0tIGEv
V2ViQ29yZS9zdmcvU1ZHQ2lyY2xlRWxlbWVudC5jcHAKKysrIGIvV2ViQ29yZS9zdmcvU1ZHQ2ly
Y2xlRWxlbWVudC5jcHAKQEAgLTEyMSw5ICsxMjEsMTcgQEAgdm9pZCBTVkdDaXJjbGVFbGVtZW50
OjpzeW5jaHJvbml6ZVByb3BlcnR5KGNvbnN0IFF1YWxpZmllZE5hbWUmIGF0dHJOYW1lKQogICAg
ICAgICBzeW5jaHJvbml6ZUV4dGVybmFsUmVzb3VyY2VzUmVxdWlyZWQoKTsKIH0KIAotUGF0aCBT
VkdDaXJjbGVFbGVtZW50Ojp0b1BhdGhEYXRhKCkgY29uc3QKK3ZvaWQgU1ZHQ2lyY2xlRWxlbWVu
dDo6dG9QYXRoRGF0YShQYXRoJiBwYXRoKSBjb25zdAogewotICAgIHJldHVybiBQYXRoOjpjcmVh
dGVDaXJjbGUoRmxvYXRQb2ludChjeCgpLnZhbHVlKHRoaXMpLCBjeSgpLnZhbHVlKHRoaXMpKSwg
cigpLnZhbHVlKHRoaXMpKTsKKyAgICBmbG9hdCByYWRpdXMgPSByKCkudmFsdWUodGhpcyk7CisK
KyAgICBpZiAocmFkaXVzIDw9IDApCisgICAgICAgIHJldHVybjsKKworICAgIHBhdGguYWRkRWxs
aXBzZShGbG9hdFJlY3QoY3goKS52YWx1ZSh0aGlzKSAtIHJhZGl1cywKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGN5KCkudmFsdWUodGhpcykgLSByYWRpdXMsCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICByYWRpdXMgKiAyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgcmFkaXVzICogMikpOwogfQogCiBib29sIFNWR0NpcmNsZUVsZW1lbnQ6OnNlbGZIYXNSZWxh
dGl2ZUxlbmd0aHMoKSBjb25zdApkaWZmIC0tZ2l0IGEvV2ViQ29yZS9zdmcvU1ZHQ2lyY2xlRWxl
bWVudC5oIGIvV2ViQ29yZS9zdmcvU1ZHQ2lyY2xlRWxlbWVudC5oCmluZGV4IGRkMTE3OTIuLjRl
YjkyNjIgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvc3ZnL1NWR0NpcmNsZUVsZW1lbnQuaAorKysgYi9X
ZWJDb3JlL3N2Zy9TVkdDaXJjbGVFbGVtZW50LmgKQEAgLTQ1LDcgKzQ1LDcgQEAgbmFtZXNwYWNl
IFdlYkNvcmUgewogICAgICAgICB2aXJ0dWFsIHZvaWQgc3ZnQXR0cmlidXRlQ2hhbmdlZChjb25z
dCBRdWFsaWZpZWROYW1lJik7CiAgICAgICAgIHZpcnR1YWwgdm9pZCBzeW5jaHJvbml6ZVByb3Bl
cnR5KGNvbnN0IFF1YWxpZmllZE5hbWUmKTsKIAotICAgICAgICB2aXJ0dWFsIFBhdGggdG9QYXRo
RGF0YSgpIGNvbnN0OworICAgICAgICB2aXJ0dWFsIHZvaWQgdG9QYXRoRGF0YShQYXRoJikgY29u
c3Q7CiAKICAgICAgICAgdmlydHVhbCBib29sIHNlbGZIYXNSZWxhdGl2ZUxlbmd0aHMoKSBjb25z
dDsKIApkaWZmIC0tZ2l0IGEvV2ViQ29yZS9zdmcvU1ZHRWxsaXBzZUVsZW1lbnQuY3BwIGIvV2Vi
Q29yZS9zdmcvU1ZHRWxsaXBzZUVsZW1lbnQuY3BwCmluZGV4IDE2NzQzZWQuLjBhNzAxOTMgMTAw
NjQ0Ci0tLSBhL1dlYkNvcmUvc3ZnL1NWR0VsbGlwc2VFbGVtZW50LmNwcAorKysgYi9XZWJDb3Jl
L3N2Zy9TVkdFbGxpcHNlRWxlbWVudC5jcHAKQEAgLTEzMCwxMCArMTMwLDE4IEBAIHZvaWQgU1ZH
RWxsaXBzZUVsZW1lbnQ6OnN5bmNocm9uaXplUHJvcGVydHkoY29uc3QgUXVhbGlmaWVkTmFtZSYg
YXR0ck5hbWUpCiAgICAgICAgIHN5bmNocm9uaXplRXh0ZXJuYWxSZXNvdXJjZXNSZXF1aXJlZCgp
OwogfQogCi1QYXRoIFNWR0VsbGlwc2VFbGVtZW50Ojp0b1BhdGhEYXRhKCkgY29uc3QKK3ZvaWQg
U1ZHRWxsaXBzZUVsZW1lbnQ6OnRvUGF0aERhdGEoUGF0aCYgcGF0aCkgY29uc3QKIHsKLSAgICBy
ZXR1cm4gUGF0aDo6Y3JlYXRlRWxsaXBzZShGbG9hdFBvaW50KGN4KCkudmFsdWUodGhpcyksIGN5
KCkudmFsdWUodGhpcykpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgcngoKS52YWx1ZSh0aGlzKSwgcnkoKS52YWx1ZSh0aGlzKSk7CisgICAgZmxvYXQgcmFkaXVz
WCA9IHJ4KCkudmFsdWUodGhpcyk7CisgICAgZmxvYXQgcmFkaXVzWSA9IHJ5KCkudmFsdWUodGhp
cyk7CisKKyAgICBpZiAocmFkaXVzWCA8PSAwIHx8IHJhZGl1c1kgPD0gMCkKKyAgICAgICAgcmV0
dXJuOworCisgICAgcGF0aC5hZGRFbGxpcHNlKEZsb2F0UmVjdChjeCgpLnZhbHVlKHRoaXMpIC0g
cmFkaXVzWCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN5KCkudmFsdWUodGhpcykg
LSByYWRpdXNZLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmFkaXVzWCAqIDIsCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICByYWRpdXNZICogMikpOwogfQogIAogYm9vbCBT
VkdFbGxpcHNlRWxlbWVudDo6c2VsZkhhc1JlbGF0aXZlTGVuZ3RocygpIGNvbnN0CmRpZmYgLS1n
aXQgYS9XZWJDb3JlL3N2Zy9TVkdFbGxpcHNlRWxlbWVudC5oIGIvV2ViQ29yZS9zdmcvU1ZHRWxs
aXBzZUVsZW1lbnQuaAppbmRleCBiZWU4MTVjLi5jYWQzMjllIDEwMDY0NAotLS0gYS9XZWJDb3Jl
L3N2Zy9TVkdFbGxpcHNlRWxlbWVudC5oCisrKyBiL1dlYkNvcmUvc3ZnL1NWR0VsbGlwc2VFbGVt
ZW50LmgKQEAgLTQ1LDcgKzQ1LDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICB2aXJ0
dWFsIHZvaWQgc3ZnQXR0cmlidXRlQ2hhbmdlZChjb25zdCBRdWFsaWZpZWROYW1lJik7CiAgICAg
ICAgIHZpcnR1YWwgdm9pZCBzeW5jaHJvbml6ZVByb3BlcnR5KGNvbnN0IFF1YWxpZmllZE5hbWUm
KTsKIAotICAgICAgICB2aXJ0dWFsIFBhdGggdG9QYXRoRGF0YSgpIGNvbnN0OworICAgICAgICB2
aXJ0dWFsIHZvaWQgdG9QYXRoRGF0YShQYXRoJikgY29uc3Q7CiAKICAgICAgICAgdmlydHVhbCBi
b29sIHNlbGZIYXNSZWxhdGl2ZUxlbmd0aHMoKSBjb25zdDsKIApkaWZmIC0tZ2l0IGEvV2ViQ29y
ZS9zdmcvU1ZHTGluZUVsZW1lbnQuY3BwIGIvV2ViQ29yZS9zdmcvU1ZHTGluZUVsZW1lbnQuY3Bw
CmluZGV4IDIyOWRmYTkuLjhhMDgzNWUgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvc3ZnL1NWR0xpbmVF
bGVtZW50LmNwcAorKysgYi9XZWJDb3JlL3N2Zy9TVkdMaW5lRWxlbWVudC5jcHAKQEAgLTEyNiwx
MCArMTI2LDEwIEBAIHZvaWQgU1ZHTGluZUVsZW1lbnQ6OnN5bmNocm9uaXplUHJvcGVydHkoY29u
c3QgUXVhbGlmaWVkTmFtZSYgYXR0ck5hbWUpCiAgICAgICAgIHN5bmNocm9uaXplRXh0ZXJuYWxS
ZXNvdXJjZXNSZXF1aXJlZCgpOwogfQogCi1QYXRoIFNWR0xpbmVFbGVtZW50Ojp0b1BhdGhEYXRh
KCkgY29uc3QKK3ZvaWQgU1ZHTGluZUVsZW1lbnQ6OnRvUGF0aERhdGEoUGF0aCYgcGF0aCkgY29u
c3QKIHsKLSAgICByZXR1cm4gUGF0aDo6Y3JlYXRlTGluZShGbG9hdFBvaW50KHgxKCkudmFsdWUo
dGhpcyksIHkxKCkudmFsdWUodGhpcykpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZs
b2F0UG9pbnQoeDIoKS52YWx1ZSh0aGlzKSwgeTIoKS52YWx1ZSh0aGlzKSkpOworICAgIHBhdGgu
bW92ZVRvKEZsb2F0UG9pbnQoeDEoKS52YWx1ZSh0aGlzKSwgeTEoKS52YWx1ZSh0aGlzKSkpOwor
ICAgIHBhdGguYWRkTGluZVRvKEZsb2F0UG9pbnQoeDIoKS52YWx1ZSh0aGlzKSwgeTIoKS52YWx1
ZSh0aGlzKSkpOwogfQogCiBib29sIFNWR0xpbmVFbGVtZW50OjpzZWxmSGFzUmVsYXRpdmVMZW5n
dGhzKCkgY29uc3QKZGlmZiAtLWdpdCBhL1dlYkNvcmUvc3ZnL1NWR0xpbmVFbGVtZW50LmggYi9X
ZWJDb3JlL3N2Zy9TVkdMaW5lRWxlbWVudC5oCmluZGV4IDIxMDA3ZjAuLjU1YTI2OGMgMTAwNjQ0
Ci0tLSBhL1dlYkNvcmUvc3ZnL1NWR0xpbmVFbGVtZW50LmgKKysrIGIvV2ViQ29yZS9zdmcvU1ZH
TGluZUVsZW1lbnQuaApAQCAtNDcsNyArNDcsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAg
ICAgIHZpcnR1YWwgdm9pZCBzdmdBdHRyaWJ1dGVDaGFuZ2VkKGNvbnN0IFF1YWxpZmllZE5hbWUm
KTsKICAgICAgICAgdmlydHVhbCB2b2lkIHN5bmNocm9uaXplUHJvcGVydHkoY29uc3QgUXVhbGlm
aWVkTmFtZSYpOwogCi0gICAgICAgIHZpcnR1YWwgUGF0aCB0b1BhdGhEYXRhKCkgY29uc3Q7Cisg
ICAgICAgIHZpcnR1YWwgdm9pZCB0b1BhdGhEYXRhKFBhdGgmKSBjb25zdDsKIAogICAgICAgICB2
aXJ0dWFsIGJvb2wgc3VwcG9ydHNNYXJrZXJzKCkgY29uc3QgeyByZXR1cm4gdHJ1ZTsgfQogCmRp
ZmYgLS1naXQgYS9XZWJDb3JlL3N2Zy9TVkdQYXRoRWxlbWVudC5jcHAgYi9XZWJDb3JlL3N2Zy9T
VkdQYXRoRWxlbWVudC5jcHAKaW5kZXggZDFmYzExYi4uNmYyMjJlZCAxMDA2NDQKLS0tIGEvV2Vi
Q29yZS9zdmcvU1ZHUGF0aEVsZW1lbnQuY3BwCisrKyBiL1dlYkNvcmUvc3ZnL1NWR1BhdGhFbGVt
ZW50LmNwcApAQCAtNTcsMTQgKzU3LDE4IEBAIFBhc3NSZWZQdHI8U1ZHUGF0aEVsZW1lbnQ+IFNW
R1BhdGhFbGVtZW50OjpjcmVhdGUoY29uc3QgUXVhbGlmaWVkTmFtZSYgdGFnTmFtZSwKIGZsb2F0
IFNWR1BhdGhFbGVtZW50OjpnZXRUb3RhbExlbmd0aCgpCiB7CiAgICAgLy8gRklYTUU6IHRoaXMg
bWF5IHdpc2ggdG8gdXNlIHRoZSBwYXRoU2VnTGlzdCBpbnN0ZWFkIG9mIHRoZSBwYXRoZGF0YSBp
ZiB0aGF0J3MgY2hlYXBlciB0byBidWlsZCAob3IgY2FjaGVkKQotICAgIHJldHVybiB0b1BhdGhE
YXRhKCkubGVuZ3RoKCk7CisgICAgUGF0aCBwYXRoOworICAgIHRvUGF0aERhdGEocGF0aCk7Cisg
ICAgcmV0dXJuIHBhdGgubGVuZ3RoKCk7CiB9CiAKIEZsb2F0UG9pbnQgU1ZHUGF0aEVsZW1lbnQ6
OmdldFBvaW50QXRMZW5ndGgoZmxvYXQgbGVuZ3RoKQogewogICAgIC8vIEZJWE1FOiB0aGlzIG1h
eSB3aXNoIHRvIHVzZSB0aGUgcGF0aFNlZ0xpc3QgaW5zdGVhZCBvZiB0aGUgcGF0aGRhdGEgaWYg
dGhhdCdzIGNoZWFwZXIgdG8gYnVpbGQgKG9yIGNhY2hlZCkKICAgICBib29sIG9rID0gZmFsc2U7
Ci0gICAgcmV0dXJuIHRvUGF0aERhdGEoKS5wb2ludEF0TGVuZ3RoKGxlbmd0aCwgb2spOworICAg
IFBhdGggcGF0aDsKKyAgICB0b1BhdGhEYXRhKHBhdGgpOworICAgIHJldHVybiBwYXRoLnBvaW50
QXRMZW5ndGgobGVuZ3RoLCBvayk7CiB9CiAKIHVuc2lnbmVkIGxvbmcgU1ZHUGF0aEVsZW1lbnQ6
OmdldFBhdGhTZWdBdExlbmd0aChmbG9hdCBsZW5ndGgpCkBAIC0yNjIsMTIgKzI2NiwxMCBAQCBT
VkdQYXRoU2VnTGlzdCogU1ZHUGF0aEVsZW1lbnQ6OmFuaW1hdGVkTm9ybWFsaXplZFBhdGhTZWdM
aXN0KCkgY29uc3QKICAgICByZXR1cm4gMDsKIH0KIAotUGF0aCBTVkdQYXRoRWxlbWVudDo6dG9Q
YXRoRGF0YSgpIGNvbnN0Cit2b2lkIFNWR1BhdGhFbGVtZW50Ojp0b1BhdGhEYXRhKFBhdGgmIHBh
dGgpIGNvbnN0CiB7Ci0gICAgUGF0aCByZXN1bHQ7CiAgICAgU1ZHUGF0aFBhcnNlckZhY3Rvcnkq
IGZhY3RvcnkgPSBTVkdQYXRoUGFyc2VyRmFjdG9yeTo6c2VsZigpOwotICAgIGZhY3RvcnktPmJ1
aWxkUGF0aEZyb21TVkdQYXRoU2VnTGlzdChwYXRoU2VnTGlzdCgpLCByZXN1bHQpOwotICAgIHJl
dHVybiByZXN1bHQ7CisgICAgZmFjdG9yeS0+YnVpbGRQYXRoRnJvbVNWR1BhdGhTZWdMaXN0KHBh
dGhTZWdMaXN0KCksIHBhdGgpOwogfQogCiB9CmRpZmYgLS1naXQgYS9XZWJDb3JlL3N2Zy9TVkdQ
YXRoRWxlbWVudC5oIGIvV2ViQ29yZS9zdmcvU1ZHUGF0aEVsZW1lbnQuaAppbmRleCBjYzRlN2Jk
Li4zOTQ5ODNkIDEwMDY0NAotLS0gYS9XZWJDb3JlL3N2Zy9TVkdQYXRoRWxlbWVudC5oCisrKyBi
L1dlYkNvcmUvc3ZnL1NWR1BhdGhFbGVtZW50LmgKQEAgLTg5LDcgKzg5LDcgQEAgbmFtZXNwYWNl
IFdlYkNvcmUgewogICAgICAgICB2aXJ0dWFsIFNWR1BhdGhTZWdMaXN0KiBhbmltYXRlZFBhdGhT
ZWdMaXN0KCkgY29uc3Q7CiAgICAgICAgIHZpcnR1YWwgU1ZHUGF0aFNlZ0xpc3QqIGFuaW1hdGVk
Tm9ybWFsaXplZFBhdGhTZWdMaXN0KCkgY29uc3Q7CiAKLSAgICAgICAgdmlydHVhbCBQYXRoIHRv
UGF0aERhdGEoKSBjb25zdDsKKyAgICAgICAgdmlydHVhbCB2b2lkIHRvUGF0aERhdGEoUGF0aCYp
IGNvbnN0OwogCiAgICAgcHJpdmF0ZToKICAgICAgICAgU1ZHUGF0aEVsZW1lbnQoY29uc3QgUXVh
bGlmaWVkTmFtZSYsIERvY3VtZW50Kik7CmRpZmYgLS1naXQgYS9XZWJDb3JlL3N2Zy9TVkdQb2x5
Z29uRWxlbWVudC5jcHAgYi9XZWJDb3JlL3N2Zy9TVkdQb2x5Z29uRWxlbWVudC5jcHAKaW5kZXgg
NTdlMmQ1My4uNTI0Y2QyZiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9zdmcvU1ZHUG9seWdvbkVsZW1l
bnQuY3BwCisrKyBiL1dlYkNvcmUvc3ZnL1NWR1BvbHlnb25FbGVtZW50LmNwcApAQCAtMzcsMjIg
KzM3LDE5IEBAIFBhc3NSZWZQdHI8U1ZHUG9seWdvbkVsZW1lbnQ+IFNWR1BvbHlnb25FbGVtZW50
OjpjcmVhdGUoY29uc3QgUXVhbGlmaWVkTmFtZSYgdGFnCiAgICAgcmV0dXJuIGFkb3B0UmVmKG5l
dyBTVkdQb2x5Z29uRWxlbWVudCh0YWdOYW1lLCBkb2N1bWVudCkpOwogfQogCi1QYXRoIFNWR1Bv
bHlnb25FbGVtZW50Ojp0b1BhdGhEYXRhKCkgY29uc3QKK3ZvaWQgU1ZHUG9seWdvbkVsZW1lbnQ6
OnRvUGF0aERhdGEoUGF0aCYgcGF0aCkgY29uc3QKIHsKLSAgICBQYXRoIHBvbHlEYXRhOwotCiAg
ICAgaW50IGxlbiA9IHBvaW50cygpLT5udW1iZXJPZkl0ZW1zKCk7CiAgICAgaWYgKGxlbiA8IDEp
Ci0gICAgICAgIHJldHVybiBwb2x5RGF0YTsKKyAgICAgICAgcmV0dXJuOwogICAgIAogICAgIEV4
Y2VwdGlvbkNvZGUgZWMgPSAwOwotICAgIHBvbHlEYXRhLm1vdmVUbyhwb2ludHMoKS0+Z2V0SXRl
bSgwLCBlYykpOworICAgIHBhdGgubW92ZVRvKHBvaW50cygpLT5nZXRJdGVtKDAsIGVjKSk7CiAK
ICAgICBmb3IgKGludCBpID0gMTsgaSA8IGxlbjsgKytpKQotICAgICAgICBwb2x5RGF0YS5hZGRM
aW5lVG8ocG9pbnRzKCktPmdldEl0ZW0oaSwgZWMpKTsKKyAgICAgICAgcGF0aC5hZGRMaW5lVG8o
cG9pbnRzKCktPmdldEl0ZW0oaSwgZWMpKTsKIAotICAgIHBvbHlEYXRhLmNsb3NlU3VicGF0aCgp
OwotICAgIHJldHVybiBwb2x5RGF0YTsKKyAgICBwYXRoLmNsb3NlU3VicGF0aCgpOwogfQogCiB9
CmRpZmYgLS1naXQgYS9XZWJDb3JlL3N2Zy9TVkdQb2x5Z29uRWxlbWVudC5oIGIvV2ViQ29yZS9z
dmcvU1ZHUG9seWdvbkVsZW1lbnQuaAppbmRleCA3YTViZGE4Li41Yzg4ZDExIDEwMDY0NAotLS0g
YS9XZWJDb3JlL3N2Zy9TVkdQb2x5Z29uRWxlbWVudC5oCisrKyBiL1dlYkNvcmUvc3ZnL1NWR1Bv
bHlnb25FbGVtZW50LmgKQEAgLTMzLDcgKzMzLDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAg
IHByaXZhdGU6CiAgICAgICAgIFNWR1BvbHlnb25FbGVtZW50KGNvbnN0IFF1YWxpZmllZE5hbWUm
LCBEb2N1bWVudCopOwogCi0gICAgICAgIHZpcnR1YWwgUGF0aCB0b1BhdGhEYXRhKCkgY29uc3Q7
CisgICAgICAgIHZpcnR1YWwgdm9pZCB0b1BhdGhEYXRhKFBhdGgmKSBjb25zdDsKICAgICB9Owog
CiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9XZWJDb3JlL3N2Zy9TVkdQb2x5
bGluZUVsZW1lbnQuY3BwIGIvV2ViQ29yZS9zdmcvU1ZHUG9seWxpbmVFbGVtZW50LmNwcAppbmRl
eCA3ZWM4NDMxLi5lOTRlYzg0IDEwMDY0NAotLS0gYS9XZWJDb3JlL3N2Zy9TVkdQb2x5bGluZUVs
ZW1lbnQuY3BwCisrKyBiL1dlYkNvcmUvc3ZnL1NWR1BvbHlsaW5lRWxlbWVudC5jcHAKQEAgLTM3
LDIxICszNywxNyBAQCBQYXNzUmVmUHRyPFNWR1BvbHlsaW5lRWxlbWVudD4gU1ZHUG9seWxpbmVF
bGVtZW50OjpjcmVhdGUoY29uc3QgUXVhbGlmaWVkTmFtZSYgdAogICAgIHJldHVybiBhZG9wdFJl
ZihuZXcgU1ZHUG9seWxpbmVFbGVtZW50KHRhZ05hbWUsIGRvY3VtZW50KSk7CiB9CiAKLVBhdGgg
U1ZHUG9seWxpbmVFbGVtZW50Ojp0b1BhdGhEYXRhKCkgY29uc3QKK3ZvaWQgU1ZHUG9seWxpbmVF
bGVtZW50Ojp0b1BhdGhEYXRhKFBhdGgmIHBhdGgpIGNvbnN0CiB7Ci0gICAgUGF0aCBwb2x5RGF0
YTsKLQogICAgIGludCBsZW4gPSBwb2ludHMoKS0+bnVtYmVyT2ZJdGVtcygpOwogICAgIGlmIChs
ZW4gPCAxKQotICAgICAgICByZXR1cm4gcG9seURhdGE7CisgICAgICAgIHJldHVybjsKIAogICAg
IEV4Y2VwdGlvbkNvZGUgZWMgPSAwOwotICAgIHBvbHlEYXRhLm1vdmVUbyhwb2ludHMoKS0+Z2V0
SXRlbSgwLCBlYykpOworICAgIHBhdGgubW92ZVRvKHBvaW50cygpLT5nZXRJdGVtKDAsIGVjKSk7
CiAKICAgICBmb3IgKGludCBpID0gMTsgaSA8IGxlbjsgKytpKQotICAgICAgICBwb2x5RGF0YS5h
ZGRMaW5lVG8ocG9pbnRzKCktPmdldEl0ZW0oaSwgZWMpKTsKLSAgICAKLSAgICByZXR1cm4gcG9s
eURhdGE7CisgICAgICAgIHBhdGguYWRkTGluZVRvKHBvaW50cygpLT5nZXRJdGVtKGksIGVjKSk7
CiB9CiAKIH0KZGlmZiAtLWdpdCBhL1dlYkNvcmUvc3ZnL1NWR1BvbHlsaW5lRWxlbWVudC5oIGIv
V2ViQ29yZS9zdmcvU1ZHUG9seWxpbmVFbGVtZW50LmgKaW5kZXggZDNmZTU1NS4uZGZjZmNkYSAx
MDA2NDQKLS0tIGEvV2ViQ29yZS9zdmcvU1ZHUG9seWxpbmVFbGVtZW50LmgKKysrIGIvV2ViQ29y
ZS9zdmcvU1ZHUG9seWxpbmVFbGVtZW50LmgKQEAgLTMzLDcgKzMzLDcgQEAgbmFtZXNwYWNlIFdl
YkNvcmUgewogICAgIHByaXZhdGU6CiAgICAgICAgIFNWR1BvbHlsaW5lRWxlbWVudChjb25zdCBR
dWFsaWZpZWROYW1lJiwgRG9jdW1lbnQqKTsKIAotICAgICAgICB2aXJ0dWFsIFBhdGggdG9QYXRo
RGF0YSgpIGNvbnN0OworICAgICAgICB2aXJ0dWFsIHZvaWQgdG9QYXRoRGF0YShQYXRoJikgY29u
c3Q7CiAgICAgfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvV2ViQ29y
ZS9zdmcvU1ZHUmVjdEVsZW1lbnQuY3BwIGIvV2ViQ29yZS9zdmcvU1ZHUmVjdEVsZW1lbnQuY3Bw
CmluZGV4IDliNjgzMGUuLjE2MzBmMTkgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvc3ZnL1NWR1JlY3RF
bGVtZW50LmNwcAorKysgYi9XZWJDb3JlL3N2Zy9TVkdSZWN0RWxlbWVudC5jcHAKQEAgLTE0Nywx
OSArMTQ3LDIzIEBAIHZvaWQgU1ZHUmVjdEVsZW1lbnQ6OnN5bmNocm9uaXplUHJvcGVydHkoY29u
c3QgUXVhbGlmaWVkTmFtZSYgYXR0ck5hbWUpCiAgICAgICAgIHN5bmNocm9uaXplRXh0ZXJuYWxS
ZXNvdXJjZXNSZXF1aXJlZCgpOwogfQogCi1QYXRoIFNWR1JlY3RFbGVtZW50Ojp0b1BhdGhEYXRh
KCkgY29uc3QKK3ZvaWQgU1ZHUmVjdEVsZW1lbnQ6OnRvUGF0aERhdGEoUGF0aCYgcGF0aCkgY29u
c3QKIHsKICAgICBGbG9hdFJlY3QgcmVjdCh4KCkudmFsdWUodGhpcyksIHkoKS52YWx1ZSh0aGlz
KSwgd2lkdGgoKS52YWx1ZSh0aGlzKSwgaGVpZ2h0KCkudmFsdWUodGhpcykpOwogCisgICAgaWYg
KHJlY3Qud2lkdGgoKSA8PSAwIHx8IHJlY3QuaGVpZ2h0KCkgPD0gMCkKKyAgICAgICAgcmV0dXJu
OworCiAgICAgYm9vbCBoYXNSeCA9IGhhc0F0dHJpYnV0ZShTVkdOYW1lczo6cnhBdHRyKTsKICAg
ICBib29sIGhhc1J5ID0gaGFzQXR0cmlidXRlKFNWR05hbWVzOjpyeUF0dHIpOwogICAgIGlmICho
YXNSeCB8fCBoYXNSeSkgewogICAgICAgICBmbG9hdCBfcnggPSBoYXNSeCA/IHJ4KCkudmFsdWUo
dGhpcykgOiByeSgpLnZhbHVlKHRoaXMpOwogICAgICAgICBmbG9hdCBfcnkgPSBoYXNSeSA/IHJ5
KCkudmFsdWUodGhpcykgOiByeCgpLnZhbHVlKHRoaXMpOwotICAgICAgICByZXR1cm4gUGF0aDo6
Y3JlYXRlUm91bmRlZFJlY3RhbmdsZShyZWN0LCBGbG9hdFNpemUoX3J4LCBfcnkpKTsKKyAgICAg
ICAgcGF0aC5hZGRSb3VuZGVkUmVjdGFuZ2xlKHJlY3QsIEZsb2F0U2l6ZShfcngsIF9yeSkpOwor
ICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgcmV0dXJuIFBhdGg6OmNyZWF0ZVJlY3Rhbmds
ZShyZWN0KTsKKyAgICBwYXRoLmFkZFJlY3QocmVjdCk7CiB9CiAKIGJvb2wgU1ZHUmVjdEVsZW1l
bnQ6OnNlbGZIYXNSZWxhdGl2ZUxlbmd0aHMoKSBjb25zdApkaWZmIC0tZ2l0IGEvV2ViQ29yZS9z
dmcvU1ZHUmVjdEVsZW1lbnQuaCBiL1dlYkNvcmUvc3ZnL1NWR1JlY3RFbGVtZW50LmgKaW5kZXgg
MzgyMDc4ZC4uNjY4MzY2YiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9zdmcvU1ZHUmVjdEVsZW1lbnQu
aAorKysgYi9XZWJDb3JlL3N2Zy9TVkdSZWN0RWxlbWVudC5oCkBAIC00NSw3ICs0NSw3IEBAIG5h
bWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgdmlydHVhbCB2b2lkIHN2Z0F0dHJpYnV0ZUNoYW5n
ZWQoY29uc3QgUXVhbGlmaWVkTmFtZSYpOwogICAgICAgICB2aXJ0dWFsIHZvaWQgc3luY2hyb25p
emVQcm9wZXJ0eShjb25zdCBRdWFsaWZpZWROYW1lJik7CiAKLSAgICAgICAgdmlydHVhbCBQYXRo
IHRvUGF0aERhdGEoKSBjb25zdDsKKyAgICAgICAgdmlydHVhbCB2b2lkIHRvUGF0aERhdGEoUGF0
aCYpIGNvbnN0OwogCiAgICAgICAgIHZpcnR1YWwgYm9vbCBzZWxmSGFzUmVsYXRpdmVMZW5ndGhz
KCkgY29uc3Q7CiAKZGlmZiAtLWdpdCBhL1dlYkNvcmUvc3ZnL1NWR1N0eWxlZFRyYW5zZm9ybWFi
bGVFbGVtZW50LmNwcCBiL1dlYkNvcmUvc3ZnL1NWR1N0eWxlZFRyYW5zZm9ybWFibGVFbGVtZW50
LmNwcAppbmRleCBiOTA4ODdhLi4wMDBlZjU2IDEwMDY0NAotLS0gYS9XZWJDb3JlL3N2Zy9TVkdT
dHlsZWRUcmFuc2Zvcm1hYmxlRWxlbWVudC5jcHAKKysrIGIvV2ViQ29yZS9zdmcvU1ZHU3R5bGVk
VHJhbnNmb3JtYWJsZUVsZW1lbnQuY3BwCkBAIC0xMDksMTAgKzEwOSwxMSBAQCBSZW5kZXJPYmpl
Y3QqIFNWR1N0eWxlZFRyYW5zZm9ybWFibGVFbGVtZW50OjpjcmVhdGVSZW5kZXJlcihSZW5kZXJB
cmVuYSogYXJlbmEsCiAKIFBhdGggU1ZHU3R5bGVkVHJhbnNmb3JtYWJsZUVsZW1lbnQ6OnRvQ2xp
cFBhdGgoKSBjb25zdAogewotICAgIFBhdGggcGF0aERhdGEgPSB0b1BhdGhEYXRhKCk7CisgICAg
UGF0aCBwYXRoOworICAgIHRvUGF0aERhdGEocGF0aCk7CiAgICAgLy8gRklYTUU6IEhvdyBkbyB3
ZSBrbm93IHRoZSBlbGVtZW50IGhhcyBkb25lIGEgbGF5b3V0PwotICAgIHBhdGhEYXRhLnRyYW5z
Zm9ybShhbmltYXRlZExvY2FsVHJhbnNmb3JtKCkpOwotICAgIHJldHVybiBwYXRoRGF0YTsKKyAg
ICBwYXRoLnRyYW5zZm9ybShhbmltYXRlZExvY2FsVHJhbnNmb3JtKCkpOworICAgIHJldHVybiBw
YXRoOwogfQogCiB9CmRpZmYgLS1naXQgYS9XZWJDb3JlL3N2Zy9TVkdTdHlsZWRUcmFuc2Zvcm1h
YmxlRWxlbWVudC5oIGIvV2ViQ29yZS9zdmcvU1ZHU3R5bGVkVHJhbnNmb3JtYWJsZUVsZW1lbnQu
aAppbmRleCA3NjY4ODg5Li4wODdhYWNhIDEwMDY0NAotLS0gYS9XZWJDb3JlL3N2Zy9TVkdTdHls
ZWRUcmFuc2Zvcm1hYmxlRWxlbWVudC5oCisrKyBiL1dlYkNvcmUvc3ZnL1NWR1N0eWxlZFRyYW5z
Zm9ybWFibGVFbGVtZW50LmgKQEAgLTQ3LDcgKzQ3LDcgQEAgcHVibGljOgogICAgIGJvb2wgaXNL
bm93bkF0dHJpYnV0ZShjb25zdCBRdWFsaWZpZWROYW1lJik7CiAKICAgICAvLyAiYmFzZSBjbGFz
cyIgbWV0aG9kcyBmb3IgYWxsIHRoZSBlbGVtZW50cyB3aGljaCByZW5kZXIgYXMgcGF0aHMKLSAg
ICB2aXJ0dWFsIFBhdGggdG9QYXRoRGF0YSgpIGNvbnN0IHsgcmV0dXJuIFBhdGgoKTsgfQorICAg
IHZpcnR1YWwgdm9pZCB0b1BhdGhEYXRhKFBhdGgmKSBjb25zdCB7fQogICAgIHZpcnR1YWwgUGF0
aCB0b0NsaXBQYXRoKCkgY29uc3Q7CiAgICAgdmlydHVhbCBSZW5kZXJPYmplY3QqIGNyZWF0ZVJl
bmRlcmVyKFJlbmRlckFyZW5hKiwgUmVuZGVyU3R5bGUqKTsKIAo=
</data>
<flag name="review"
          id="60055"
          type_id="1"
          status="-"
          setter="zimmermann"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>70355</attachid>
            <date>2010-10-09 10:37:47 -0700</date>
            <delta_ts>2010-10-09 13:37:42 -0700</delta_ts>
            <desc>Proposed patch v4</desc>
            <filename>bug-46052-v4.diff</filename>
            <type>text/plain</type>
            <size>44689</size>
            <attacher name="Andreas Kling">kling</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ2hhbmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXgg
MTM0ZjE0Ny4uYWNiYWZlMyAxMDA2NDQKLS0tIGEvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvV2Vi
Q29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSw3NyBAQAorMjAxMC0xMC0wOSAgQW5kcmVhcyBLbGlu
ZyAgPGtsaW5nQHdlYmtpdC5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BT
ISkuCisKKyAgICAgICAgU1ZHOiBMZXZlcmFnZSBwbGF0Zm9ybSdzIFBhdGg6OmFkZEVsbGlwc2Uo
KSBpbiBQYXRoOjpjcmVhdGVFbGxpcHNlKCkKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTQ2MDUyCisKKyAgICAgICAgUmVtb3ZlIHRoZSBzdGF0aWMgUGF0
aDo6Y3JlYXRlKiBtZXRob2RzIGFuZCB1c2UgUGF0aDo6YWRkKiB3aGVyZXZlcgorICAgICAgICB0
aGVzZSB3ZXJlIHVzZWQuCisKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0Nv
bnRleHQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjphZGRSb3VuZGVk
UmVjdENsaXApOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpjbGlwT3V0Um91
bmRlZFJlY3QpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL1BhdGguY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6cGF0aExlbmd0aEFwcGxpZXJGdW5jdGlvbik6CisgICAgICAgIChXZWJDb3Jl
OjpQYXRoOjphZGRSb3VuZGVkUmVjdGFuZ2xlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGlj
cy9QYXRoLmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vQ29udGV4dFNoYWRv
d0NhaXJvLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNvbnRleHRTaGFkb3c6OmRyYXdSZWN0U2hh
ZG93V2l0aG91dFRpbGluZyk6CisgICAgICAgIChXZWJDb3JlOjpDb250ZXh0U2hhZG93OjpkcmF3
UmVjdFNoYWRvdyk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vR3JhcGhpY3ND
b250ZXh0Q2Fpcm8uY3BwOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpkcmF3
Rm9jdXNSaW5nKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6ZHJhd1RpbGVk
U2hhZG93KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6ZmlsbFJvdW5kZWRS
ZWN0KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jZy9HcmFwaGljc0NvbnRleHRDRy5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OmZpbGxSb3VuZGVkUmVjdCk6
CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvcXQvR3JhcGhpY3NDb250ZXh0UXQuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpmaWxsUm91bmRlZFJlY3QpOgorICAg
ICAgICAqIHJlbmRlcmluZy9SZW5kZXJCb3hNb2RlbE9iamVjdC5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpSZW5kZXJCb3hNb2RlbE9iamVjdDo6cGFpbnRCb3JkZXIpOgorICAgICAgICAoV2ViQ29y
ZTo6UmVuZGVyQm94TW9kZWxPYmplY3Q6OnBhaW50Qm94U2hhZG93KToKKyAgICAgICAgKiByZW5k
ZXJpbmcvUmVuZGVyRW1iZWRkZWRPYmplY3QuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVy
RW1iZWRkZWRPYmplY3Q6OmdldFJlcGxhY2VtZW50VGV4dEdlb21ldHJ5KToKKyAgICAgICAgKiBy
ZW5kZXJpbmcvUmVuZGVyU1ZHUmVzb3VyY2VDbGlwcGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OlJlbmRlclNWR1Jlc291cmNlQ2xpcHBlcjo6cGF0aE9ubHlDbGlwcGluZyk6CisgICAgICAgICog
cmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdQYXRoLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRl
clNWR1BhdGg6OmxheW91dCk6CisgICAgICAgICogcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdUZXh0
UGF0aC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJTVkdUZXh0UGF0aDo6bGF5b3V0UGF0
aCk6CisgICAgICAgICogcmVuZGVyaW5nL3N2Zy9TVkdJbmxpbmVUZXh0Qm94LmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OlNWR0lubGluZVRleHRCb3g6OnBhaW50RGVjb3JhdGlvbldpdGhTdHlsZSk6
CisgICAgICAgICogc3ZnL1NWR0FuaW1hdGVNb3Rpb25FbGVtZW50LmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OlNWR0FuaW1hdGVNb3Rpb25FbGVtZW50OjphbmltYXRpb25QYXRoKToKKyAgICAgICAg
KiBzdmcvU1ZHQ2lyY2xlRWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTVkdDaXJjbGVF
bGVtZW50Ojp0b1BhdGhEYXRhKToKKyAgICAgICAgKiBzdmcvU1ZHQ2lyY2xlRWxlbWVudC5oOgor
ICAgICAgICAqIHN2Zy9TVkdFbGxpcHNlRWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpT
VkdFbGxpcHNlRWxlbWVudDo6dG9QYXRoRGF0YSk6CisgICAgICAgICogc3ZnL1NWR0VsbGlwc2VF
bGVtZW50Lmg6CisgICAgICAgICogc3ZnL1NWR0xpbmVFbGVtZW50LmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OlNWR0xpbmVFbGVtZW50Ojp0b1BhdGhEYXRhKToKKyAgICAgICAgKiBzdmcvU1ZHTGlu
ZUVsZW1lbnQuaDoKKyAgICAgICAgKiBzdmcvU1ZHUGF0aEVsZW1lbnQuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6U1ZHUGF0aEVsZW1lbnQ6OmdldFRvdGFsTGVuZ3RoKToKKyAgICAgICAgKFdlYkNv
cmU6OlNWR1BhdGhFbGVtZW50OjpnZXRQb2ludEF0TGVuZ3RoKToKKyAgICAgICAgKFdlYkNvcmU6
OlNWR1BhdGhFbGVtZW50Ojp0b1BhdGhEYXRhKToKKyAgICAgICAgKiBzdmcvU1ZHUGF0aEVsZW1l
bnQuaDoKKyAgICAgICAgKiBzdmcvU1ZHUG9seWdvbkVsZW1lbnQuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6U1ZHUG9seWdvbkVsZW1lbnQ6OnRvUGF0aERhdGEpOgorICAgICAgICAqIHN2Zy9TVkdQ
b2x5Z29uRWxlbWVudC5oOgorICAgICAgICAqIHN2Zy9TVkdQb2x5bGluZUVsZW1lbnQuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6U1ZHUG9seWxpbmVFbGVtZW50Ojp0b1BhdGhEYXRhKToKKyAgICAg
ICAgKiBzdmcvU1ZHUG9seWxpbmVFbGVtZW50Lmg6CisgICAgICAgICogc3ZnL1NWR1JlY3RFbGVt
ZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR1JlY3RFbGVtZW50Ojp0b1BhdGhEYXRhKToK
KyAgICAgICAgKiBzdmcvU1ZHUmVjdEVsZW1lbnQuaDoKKyAgICAgICAgKiBzdmcvU1ZHU3R5bGVk
VHJhbnNmb3JtYWJsZUVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U1ZHU3R5bGVkVHJh
bnNmb3JtYWJsZUVsZW1lbnQ6OnRvQ2xpcFBhdGgpOgorICAgICAgICAqIHN2Zy9TVkdTdHlsZWRU
cmFuc2Zvcm1hYmxlRWxlbWVudC5oOgorICAgICAgICAoV2ViQ29yZTo6U1ZHU3R5bGVkVHJhbnNm
b3JtYWJsZUVsZW1lbnQ6OnRvUGF0aERhdGEpOgorICAgICAgICAqIHN2Zy9TVkdVc2VFbGVtZW50
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR1VzZUVsZW1lbnQ6OnRvQ2xpcFBhdGgpOgorICAg
ICAgICAqIHN2Zy9TVkdVc2VFbGVtZW50Lmg6CisKIDIwMTAtMTAtMDkgIEtlbnQgVGFtdXJhICA8
dGtlbnRAY2hyb21pdW0ub3JnPgogCiAgICAgICAgIFVucmV2aWV3ZWQsIHRyaXZpYWwgcmVncmVz
c2lvbiBmaXggZm9yIHI2OTQ0NS4KZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvR3JhcGhpY3NDb250ZXh0LmNwcCBiL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhp
Y3NDb250ZXh0LmNwcAppbmRleCAyYzk0YmVjLi5iZjYyMDYwIDEwMDY0NAotLS0gYS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dC5jcHAKKysrIGIvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQuY3BwCkBAIC01MDAsNyArNTAwLDkgQEAgdm9p
ZCBHcmFwaGljc0NvbnRleHQ6OmFkZFJvdW5kZWRSZWN0Q2xpcChjb25zdCBJbnRSZWN0JiByZWN0
LCBjb25zdCBJbnRTaXplJiB0b3AKICAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQogICAgICAg
ICByZXR1cm47CiAKLSAgICBjbGlwKFBhdGg6OmNyZWF0ZVJvdW5kZWRSZWN0YW5nbGUocmVjdCwg
dG9wTGVmdCwgdG9wUmlnaHQsIGJvdHRvbUxlZnQsIGJvdHRvbVJpZ2h0KSk7CisgICAgUGF0aCBw
YXRoOworICAgIHBhdGguYWRkUm91bmRlZFJlY3RhbmdsZShyZWN0LCB0b3BMZWZ0LCB0b3BSaWdo
dCwgYm90dG9tTGVmdCwgYm90dG9tUmlnaHQpOworICAgIGNsaXAocGF0aCk7CiB9CiAKIHZvaWQg
R3JhcGhpY3NDb250ZXh0OjpjbGlwT3V0Um91bmRlZFJlY3QoY29uc3QgSW50UmVjdCYgcmVjdCwg
Y29uc3QgSW50U2l6ZSYgdG9wTGVmdCwgY29uc3QgSW50U2l6ZSYgdG9wUmlnaHQsCkBAIC01MDks
NyArNTExLDkgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6OmNsaXBPdXRSb3VuZGVkUmVjdChjb25z
dCBJbnRSZWN0JiByZWN0LCBjb25zdCBJbnRTaXplJiB0b3AKICAgICBpZiAocGFpbnRpbmdEaXNh
YmxlZCgpKQogICAgICAgICByZXR1cm47CiAKLSAgICBjbGlwT3V0KFBhdGg6OmNyZWF0ZVJvdW5k
ZWRSZWN0YW5nbGUocmVjdCwgdG9wTGVmdCwgdG9wUmlnaHQsIGJvdHRvbUxlZnQsIGJvdHRvbVJp
Z2h0KSk7CisgICAgUGF0aCBwYXRoOworICAgIHBhdGguYWRkUm91bmRlZFJlY3RhbmdsZShyZWN0
LCB0b3BMZWZ0LCB0b3BSaWdodCwgYm90dG9tTGVmdCwgYm90dG9tUmlnaHQpOworICAgIGNsaXBP
dXQocGF0aCk7CiB9CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpjbGlwVG9JbWFnZUJ1ZmZlcihJ
bWFnZUJ1ZmZlciogYnVmZmVyLCBjb25zdCBGbG9hdFJlY3QmIHJlY3QpCmRpZmYgLS1naXQgYS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1BhdGguY3BwIGIvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9QYXRoLmNwcAppbmRleCA0ZTJkZTUzLi43YWYxZmZhIDEwMDY0NAotLS0gYS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL1BhdGguY3BwCisrKyBiL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvUGF0aC5jcHAKQEAgLTM1LDggKzM1LDkgQEAKICNpbmNsdWRlIDxtYXRoLmg+CiAjaW5jbHVk
ZSA8d3RmL01hdGhFeHRyYXMuaD4KIAotc3RhdGljIGNvbnN0IGZsb2F0IFFVQVJURVIgPSAwLjU1
MmY7IC8vIGFwcHJveGltYXRpb24gb2YgY29udHJvbCBwb2ludCBwb3NpdGlvbnMgb24gYSBiZXpp
ZXIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHRvIHNpbXVsYXRlIGEgcXVhcnRl
ciBvZiBhIGNpcmNsZS4KKy8vIEFwcHJveGltYXRpb24gb2YgY29udHJvbCBwb2ludCBwb3NpdGlv
bnMgb24gYSBiZXppZXIgdG8gc2ltdWxhdGUgYSBxdWFydGVyIG9mIGEgY2lyY2xlLgorc3RhdGlj
IGNvbnN0IGZsb2F0IGdDaXJjbGVDb250cm9sUG9pbnQgPSAwLjU1MjsKKwogbmFtZXNwYWNlIFdl
YkNvcmUgewogCiAjaWYgIVBMQVRGT1JNKE9QRU5WRykgJiYgIVBMQVRGT1JNKFFUKQpAQCAtNDcs
NyArNDgsNyBAQCBzdGF0aWMgdm9pZCBwYXRoTGVuZ3RoQXBwbGllckZ1bmN0aW9uKHZvaWQqIGlu
Zm8sIGNvbnN0IFBhdGhFbGVtZW50KiBlbGVtZW50KQogICAgICAgICByZXR1cm47CiAgICAgdHJh
dmVyc2FsU3RhdGUubV9wcmV2aW91cyA9IHRyYXZlcnNhbFN0YXRlLm1fY3VycmVudDsKICAgICBG
bG9hdFBvaW50KiBwb2ludHMgPSBlbGVtZW50LT5wb2ludHM7Ci0gICAgZmxvYXQgc2VnbWVudExl
bmd0aCA9IDAuMGY7CisgICAgZmxvYXQgc2VnbWVudExlbmd0aCA9IDA7CiAgICAgc3dpdGNoIChl
bGVtZW50LT50eXBlKSB7CiAgICAgICAgIGNhc2UgUGF0aEVsZW1lbnRNb3ZlVG9Qb2ludDoKICAg
ICAgICAgICAgIHNlZ21lbnRMZW5ndGggPSB0cmF2ZXJzYWxTdGF0ZS5tb3ZlVG8ocG9pbnRzWzBd
KTsKQEAgLTc2LDcgKzc3LDcgQEAgc3RhdGljIHZvaWQgcGF0aExlbmd0aEFwcGxpZXJGdW5jdGlv
bih2b2lkKiBpbmZvLCBjb25zdCBQYXRoRWxlbWVudCogZWxlbWVudCkKICAgICAgICAgICAgIGZs
b2F0IG9mZnNldCA9IHRyYXZlcnNhbFN0YXRlLm1fZGVzaXJlZExlbmd0aCAtIHRyYXZlcnNhbFN0
YXRlLm1fdG90YWxMZW5ndGg7CiAgICAgICAgICAgICB0cmF2ZXJzYWxTdGF0ZS5tX2N1cnJlbnQu
bW92ZShvZmZzZXQgKiBjb3NmKHNsb3BlKSwgb2Zmc2V0ICogc2luZihzbG9wZSkpOwogICAgICAg
ICB9IGVsc2UgewotICAgICAgICAgICAgc3RhdGljIGNvbnN0IGZsb2F0IHJhZDJkZWcgPSAxODAu
MGYgLyBwaUZsb2F0OworICAgICAgICAgICAgc3RhdGljIGNvbnN0IGZsb2F0IHJhZDJkZWcgPSAx
ODAgLyBwaUZsb2F0OwogICAgICAgICAgICAgdHJhdmVyc2FsU3RhdGUubV9ub3JtYWxBbmdsZSA9
IHNsb3BlICogcmFkMmRlZzsKICAgICAgICAgfQogCkBAIC0xMTAsMTY3ICsxMTEsODMgQEAgZmxv
YXQgUGF0aDo6bm9ybWFsQW5nbGVBdExlbmd0aChmbG9hdCBsZW5ndGgsIGJvb2wmIG9rKQogfQog
I2VuZGlmCiAKLVBhdGggUGF0aDo6Y3JlYXRlUm91bmRlZFJlY3RhbmdsZShjb25zdCBGbG9hdFJl
Y3QmIHJlY3RhbmdsZSwgY29uc3QgRmxvYXRTaXplJiByb3VuZGluZ1JhZGlpKQordm9pZCBQYXRo
OjphZGRSb3VuZGVkUmVjdGFuZ2xlKGNvbnN0IEZsb2F0UmVjdCYgcmVjdGFuZ2xlLCBjb25zdCBG
bG9hdFNpemUmIHJvdW5kaW5nUmFkaWkpCiB7Ci0gICAgUGF0aCBwYXRoOwogICAgIGZsb2F0IHgg
PSByZWN0YW5nbGUueCgpOwogICAgIGZsb2F0IHkgPSByZWN0YW5nbGUueSgpOwogICAgIGZsb2F0
IHdpZHRoID0gcmVjdGFuZ2xlLndpZHRoKCk7CiAgICAgZmxvYXQgaGVpZ2h0ID0gcmVjdGFuZ2xl
LmhlaWdodCgpOwogICAgIGZsb2F0IHJ4ID0gcm91bmRpbmdSYWRpaS53aWR0aCgpOwogICAgIGZs
b2F0IHJ5ID0gcm91bmRpbmdSYWRpaS5oZWlnaHQoKTsKLSAgICBpZiAod2lkdGggPD0gMC4wZiB8
fCBoZWlnaHQgPD0gMC4wZikKLSAgICAgICAgcmV0dXJuIHBhdGg7CisgICAgaWYgKHdpZHRoIDw9
IDAgfHwgaGVpZ2h0IDw9IDApCisgICAgICAgIHJldHVybjsKIAogICAgIGZsb2F0IGR4ID0gcngs
IGR5ID0gcnk7CiAgICAgLy8gSWYgcnggaXMgZ3JlYXRlciB0aGFuIGhhbGYgb2YgdGhlIHdpZHRo
IG9mIHRoZSByZWN0YW5nbGUKICAgICAvLyB0aGVuIHNldCByeCB0byBoYWxmIG9mIHRoZSB3aWR0
aCAocmVxdWlyZWQgaW4gU1ZHIHNwZWMpCi0gICAgaWYgKGR4ID4gd2lkdGggKiAwLjVmKQotICAg
ICAgICBkeCA9IHdpZHRoICogMC41ZjsKKyAgICBpZiAoZHggPiB3aWR0aCAqIDAuNSkKKyAgICAg
ICAgZHggPSB3aWR0aCAqIDAuNTsKIAogICAgIC8vIElmIHJ5IGlzIGdyZWF0ZXIgdGhhbiBoYWxm
IG9mIHRoZSBoZWlnaHQgb2YgdGhlIHJlY3RhbmdsZQogICAgIC8vIHRoZW4gc2V0IHJ5IHRvIGhh
bGYgb2YgdGhlIGhlaWdodCAocmVxdWlyZWQgaW4gU1ZHIHNwZWMpCi0gICAgaWYgKGR5ID4gaGVp
Z2h0ICogMC41ZikKLSAgICAgICAgZHkgPSBoZWlnaHQgKiAwLjVmOworICAgIGlmIChkeSA+IGhl
aWdodCAqIDAuNSkKKyAgICAgICAgZHkgPSBoZWlnaHQgKiAwLjU7CiAKLSAgICBwYXRoLm1vdmVU
byhGbG9hdFBvaW50KHggKyBkeCwgeSkpOworICAgIG1vdmVUbyhGbG9hdFBvaW50KHggKyBkeCwg
eSkpOwogCi0gICAgaWYgKGR4IDwgd2lkdGggKiAwLjVmKQotICAgICAgICBwYXRoLmFkZExpbmVU
byhGbG9hdFBvaW50KHggKyB3aWR0aCAtIHJ4LCB5KSk7CisgICAgaWYgKGR4IDwgd2lkdGggKiAw
LjUpCisgICAgICAgIGFkZExpbmVUbyhGbG9hdFBvaW50KHggKyB3aWR0aCAtIHJ4LCB5KSk7CiAK
LSAgICBwYXRoLmFkZEJlemllckN1cnZlVG8oRmxvYXRQb2ludCh4ICsgd2lkdGggLSBkeCAqICgx
IC0gUVVBUlRFUiksIHkpLCBGbG9hdFBvaW50KHggKyB3aWR0aCwgeSArIGR5ICogKDEgLSBRVUFS
VEVSKSksIEZsb2F0UG9pbnQoeCArIHdpZHRoLCB5ICsgZHkpKTsKKyAgICBhZGRCZXppZXJDdXJ2
ZVRvKEZsb2F0UG9pbnQoeCArIHdpZHRoIC0gZHggKiAoMSAtIGdDaXJjbGVDb250cm9sUG9pbnQp
LCB5KSwgRmxvYXRQb2ludCh4ICsgd2lkdGgsIHkgKyBkeSAqICgxIC0gZ0NpcmNsZUNvbnRyb2xQ
b2ludCkpLCBGbG9hdFBvaW50KHggKyB3aWR0aCwgeSArIGR5KSk7CiAKICAgICBpZiAoZHkgPCBo
ZWlnaHQgKiAwLjUpCi0gICAgICAgIHBhdGguYWRkTGluZVRvKEZsb2F0UG9pbnQoeCArIHdpZHRo
LCB5ICsgaGVpZ2h0IC0gZHkpKTsKKyAgICAgICAgYWRkTGluZVRvKEZsb2F0UG9pbnQoeCArIHdp
ZHRoLCB5ICsgaGVpZ2h0IC0gZHkpKTsKIAotICAgIHBhdGguYWRkQmV6aWVyQ3VydmVUbyhGbG9h
dFBvaW50KHggKyB3aWR0aCwgeSArIGhlaWdodCAtIGR5ICogKDEgLSBRVUFSVEVSKSksIEZsb2F0
UG9pbnQoeCArIHdpZHRoIC0gZHggKiAoMSAtIFFVQVJURVIpLCB5ICsgaGVpZ2h0KSwgRmxvYXRQ
b2ludCh4ICsgd2lkdGggLSBkeCwgeSArIGhlaWdodCkpOworICAgIGFkZEJlemllckN1cnZlVG8o
RmxvYXRQb2ludCh4ICsgd2lkdGgsIHkgKyBoZWlnaHQgLSBkeSAqICgxIC0gZ0NpcmNsZUNvbnRy
b2xQb2ludCkpLCBGbG9hdFBvaW50KHggKyB3aWR0aCAtIGR4ICogKDEgLSBnQ2lyY2xlQ29udHJv
bFBvaW50KSwgeSArIGhlaWdodCksIEZsb2F0UG9pbnQoeCArIHdpZHRoIC0gZHgsIHkgKyBoZWln
aHQpKTsKIAogICAgIGlmIChkeCA8IHdpZHRoICogMC41KQotICAgICAgICBwYXRoLmFkZExpbmVU
byhGbG9hdFBvaW50KHggKyBkeCwgeSArIGhlaWdodCkpOworICAgICAgICBhZGRMaW5lVG8oRmxv
YXRQb2ludCh4ICsgZHgsIHkgKyBoZWlnaHQpKTsKIAotICAgIHBhdGguYWRkQmV6aWVyQ3VydmVU
byhGbG9hdFBvaW50KHggKyBkeCAqICgxIC0gUVVBUlRFUiksIHkgKyBoZWlnaHQpLCBGbG9hdFBv
aW50KHgsIHkgKyBoZWlnaHQgLSBkeSAqICgxIC0gUVVBUlRFUikpLCBGbG9hdFBvaW50KHgsIHkg
KyBoZWlnaHQgLSBkeSkpOworICAgIGFkZEJlemllckN1cnZlVG8oRmxvYXRQb2ludCh4ICsgZHgg
KiAoMSAtIGdDaXJjbGVDb250cm9sUG9pbnQpLCB5ICsgaGVpZ2h0KSwgRmxvYXRQb2ludCh4LCB5
ICsgaGVpZ2h0IC0gZHkgKiAoMSAtIGdDaXJjbGVDb250cm9sUG9pbnQpKSwgRmxvYXRQb2ludCh4
LCB5ICsgaGVpZ2h0IC0gZHkpKTsKIAogICAgIGlmIChkeSA8IGhlaWdodCAqIDAuNSkKLSAgICAg
ICAgcGF0aC5hZGRMaW5lVG8oRmxvYXRQb2ludCh4LCB5ICsgZHkpKTsKKyAgICAgICAgYWRkTGlu
ZVRvKEZsb2F0UG9pbnQoeCwgeSArIGR5KSk7CiAKLSAgICBwYXRoLmFkZEJlemllckN1cnZlVG8o
RmxvYXRQb2ludCh4LCB5ICsgZHkgKiAoMSAtIFFVQVJURVIpKSwgRmxvYXRQb2ludCh4ICsgZHgg
KiAoMSAtIFFVQVJURVIpLCB5KSwgRmxvYXRQb2ludCh4ICsgZHgsIHkpKTsKKyAgICBhZGRCZXpp
ZXJDdXJ2ZVRvKEZsb2F0UG9pbnQoeCwgeSArIGR5ICogKDEgLSBnQ2lyY2xlQ29udHJvbFBvaW50
KSksIEZsb2F0UG9pbnQoeCArIGR4ICogKDEgLSBnQ2lyY2xlQ29udHJvbFBvaW50KSwgeSksIEZs
b2F0UG9pbnQoeCArIGR4LCB5KSk7CiAKLSAgICBwYXRoLmNsb3NlU3VicGF0aCgpOwotCi0gICAg
cmV0dXJuIHBhdGg7CisgICAgY2xvc2VTdWJwYXRoKCk7CiB9CiAKLVBhdGggUGF0aDo6Y3JlYXRl
Um91bmRlZFJlY3RhbmdsZShjb25zdCBGbG9hdFJlY3QmIHJlY3RhbmdsZSwgY29uc3QgRmxvYXRT
aXplJiB0b3BMZWZ0UmFkaXVzLCBjb25zdCBGbG9hdFNpemUmIHRvcFJpZ2h0UmFkaXVzLCBjb25z
dCBGbG9hdFNpemUmIGJvdHRvbUxlZnRSYWRpdXMsIGNvbnN0IEZsb2F0U2l6ZSYgYm90dG9tUmln
aHRSYWRpdXMpCit2b2lkIFBhdGg6OmFkZFJvdW5kZWRSZWN0YW5nbGUoY29uc3QgRmxvYXRSZWN0
JiByZWN0YW5nbGUsIGNvbnN0IEZsb2F0U2l6ZSYgdG9wTGVmdFJhZGl1cywgY29uc3QgRmxvYXRT
aXplJiB0b3BSaWdodFJhZGl1cywgY29uc3QgRmxvYXRTaXplJiBib3R0b21MZWZ0UmFkaXVzLCBj
b25zdCBGbG9hdFNpemUmIGJvdHRvbVJpZ2h0UmFkaXVzKQogewotICAgIFBhdGggcGF0aDsKLQog
ICAgIGZsb2F0IHdpZHRoID0gcmVjdGFuZ2xlLndpZHRoKCk7CiAgICAgZmxvYXQgaGVpZ2h0ID0g
cmVjdGFuZ2xlLmhlaWdodCgpOwotICAgIGlmICh3aWR0aCA8PSAwLjAgfHwgaGVpZ2h0IDw9IDAu
MCkKLSAgICAgICAgcmV0dXJuIHBhdGg7CisgICAgaWYgKHdpZHRoIDw9IDAgfHwgaGVpZ2h0IDw9
IDApCisgICAgICAgIHJldHVybjsKIAogICAgIGlmICh3aWR0aCA8IHRvcExlZnRSYWRpdXMud2lk
dGgoKSArIHRvcFJpZ2h0UmFkaXVzLndpZHRoKCkKICAgICAgICAgICAgIHx8IHdpZHRoIDwgYm90
dG9tTGVmdFJhZGl1cy53aWR0aCgpICsgYm90dG9tUmlnaHRSYWRpdXMud2lkdGgoKQogICAgICAg
ICAgICAgfHwgaGVpZ2h0IDwgdG9wTGVmdFJhZGl1cy5oZWlnaHQoKSArIGJvdHRvbUxlZnRSYWRp
dXMuaGVpZ2h0KCkKLSAgICAgICAgICAgIHx8IGhlaWdodCA8IHRvcFJpZ2h0UmFkaXVzLmhlaWdo
dCgpICsgYm90dG9tUmlnaHRSYWRpdXMuaGVpZ2h0KCkpCisgICAgICAgICAgICB8fCBoZWlnaHQg
PCB0b3BSaWdodFJhZGl1cy5oZWlnaHQoKSArIGJvdHRvbVJpZ2h0UmFkaXVzLmhlaWdodCgpKSB7
CiAgICAgICAgIC8vIElmIGFsbCB0aGUgcmFkaWkgY2Fubm90IGJlIGFjY29tbW9kYXRlZCwgcmV0
dXJuIGEgcmVjdC4KLSAgICAgICAgcmV0dXJuIGNyZWF0ZVJlY3RhbmdsZShyZWN0YW5nbGUpOwot
Ci0gICAgZmxvYXQgeCA9IHJlY3RhbmdsZS54KCk7Ci0gICAgZmxvYXQgeSA9IHJlY3RhbmdsZS55
KCk7Ci0KLSAgICBwYXRoLm1vdmVUbyhGbG9hdFBvaW50KHggKyB0b3BMZWZ0UmFkaXVzLndpZHRo
KCksIHkpKTsKLQotICAgIHBhdGguYWRkTGluZVRvKEZsb2F0UG9pbnQoeCArIHdpZHRoIC0gdG9w
UmlnaHRSYWRpdXMud2lkdGgoKSwgeSkpOwotCi0gICAgcGF0aC5hZGRCZXppZXJDdXJ2ZVRvKEZs
b2F0UG9pbnQoeCArIHdpZHRoIC0gdG9wUmlnaHRSYWRpdXMud2lkdGgoKSAqICgxIC0gUVVBUlRF
UiksIHkpLCBGbG9hdFBvaW50KHggKyB3aWR0aCwgeSArIHRvcFJpZ2h0UmFkaXVzLmhlaWdodCgp
ICogKDEgLSBRVUFSVEVSKSksIEZsb2F0UG9pbnQoeCArIHdpZHRoLCB5ICsgdG9wUmlnaHRSYWRp
dXMuaGVpZ2h0KCkpKTsKLQotICAgIHBhdGguYWRkTGluZVRvKEZsb2F0UG9pbnQoeCArIHdpZHRo
LCB5ICsgaGVpZ2h0IC0gYm90dG9tUmlnaHRSYWRpdXMuaGVpZ2h0KCkpKTsKLQotICAgIHBhdGgu
YWRkQmV6aWVyQ3VydmVUbyhGbG9hdFBvaW50KHggKyB3aWR0aCwgeSArIGhlaWdodCAtIGJvdHRv
bVJpZ2h0UmFkaXVzLmhlaWdodCgpICogKDEgLSBRVUFSVEVSKSksIEZsb2F0UG9pbnQoeCArIHdp
ZHRoIC0gYm90dG9tUmlnaHRSYWRpdXMud2lkdGgoKSAqICgxIC0gUVVBUlRFUiksIHkgKyBoZWln
aHQpLCBGbG9hdFBvaW50KHggKyB3aWR0aCAtIGJvdHRvbVJpZ2h0UmFkaXVzLndpZHRoKCksIHkg
KyBoZWlnaHQpKTsKLQotICAgIHBhdGguYWRkTGluZVRvKEZsb2F0UG9pbnQoeCArIGJvdHRvbUxl
ZnRSYWRpdXMud2lkdGgoKSwgeSArIGhlaWdodCkpOwotCi0gICAgcGF0aC5hZGRCZXppZXJDdXJ2
ZVRvKEZsb2F0UG9pbnQoeCArIGJvdHRvbUxlZnRSYWRpdXMud2lkdGgoKSAqICgxIC0gUVVBUlRF
UiksIHkgKyBoZWlnaHQpLCBGbG9hdFBvaW50KHgsIHkgKyBoZWlnaHQgLSBib3R0b21MZWZ0UmFk
aXVzLmhlaWdodCgpICogKDEgLSBRVUFSVEVSKSksIEZsb2F0UG9pbnQoeCwgeSArIGhlaWdodCAt
IGJvdHRvbUxlZnRSYWRpdXMuaGVpZ2h0KCkpKTsKLQotICAgIHBhdGguYWRkTGluZVRvKEZsb2F0
UG9pbnQoeCwgeSArIHRvcExlZnRSYWRpdXMuaGVpZ2h0KCkpKTsKLQotICAgIHBhdGguYWRkQmV6
aWVyQ3VydmVUbyhGbG9hdFBvaW50KHgsIHkgKyB0b3BMZWZ0UmFkaXVzLmhlaWdodCgpICogKDEg
LSBRVUFSVEVSKSksIEZsb2F0UG9pbnQoeCArIHRvcExlZnRSYWRpdXMud2lkdGgoKSAqICgxIC0g
UVVBUlRFUiksIHkpLCBGbG9hdFBvaW50KHggKyB0b3BMZWZ0UmFkaXVzLndpZHRoKCksIHkpKTsK
LQotICAgIHBhdGguY2xvc2VTdWJwYXRoKCk7Ci0KLSAgICByZXR1cm4gcGF0aDsKLX0KKyAgICAg
ICAgYWRkUmVjdChyZWN0YW5nbGUpOworICAgICAgICByZXR1cm47CisgICAgfQogCi1QYXRoIFBh
dGg6OmNyZWF0ZVJlY3RhbmdsZShjb25zdCBGbG9hdFJlY3QmIHJlY3RhbmdsZSkKLXsKLSAgICBQ
YXRoIHBhdGg7CiAgICAgZmxvYXQgeCA9IHJlY3RhbmdsZS54KCk7CiAgICAgZmxvYXQgeSA9IHJl
Y3RhbmdsZS55KCk7Ci0gICAgZmxvYXQgd2lkdGggPSByZWN0YW5nbGUud2lkdGgoKTsKLSAgICBm
bG9hdCBoZWlnaHQgPSByZWN0YW5nbGUuaGVpZ2h0KCk7Ci0gICAgaWYgKHdpZHRoIDw9IDAuMGYg
fHwgaGVpZ2h0IDw9IDAuMGYpCi0gICAgICAgIHJldHVybiBwYXRoOwotICAgIAotICAgIHBhdGgu
bW92ZVRvKEZsb2F0UG9pbnQoeCwgeSkpOwotICAgIHBhdGguYWRkTGluZVRvKEZsb2F0UG9pbnQo
eCArIHdpZHRoLCB5KSk7Ci0gICAgcGF0aC5hZGRMaW5lVG8oRmxvYXRQb2ludCh4ICsgd2lkdGgs
IHkgKyBoZWlnaHQpKTsKLSAgICBwYXRoLmFkZExpbmVUbyhGbG9hdFBvaW50KHgsIHkgKyBoZWln
aHQpKTsKLSAgICBwYXRoLmNsb3NlU3VicGF0aCgpOwotCi0gICAgcmV0dXJuIHBhdGg7Ci19Ci0K
LVBhdGggUGF0aDo6Y3JlYXRlRWxsaXBzZShjb25zdCBGbG9hdFBvaW50JiBjZW50ZXIsIGZsb2F0
IHJ4LCBmbG9hdCByeSkKLXsKLSAgICBmbG9hdCBjeCA9IGNlbnRlci54KCk7Ci0gICAgZmxvYXQg
Y3kgPSBjZW50ZXIueSgpOwotICAgIFBhdGggcGF0aDsKLSAgICBpZiAocnggPD0gMC4wZiB8fCBy
eSA8PSAwLjBmKQotICAgICAgICByZXR1cm4gcGF0aDsKLQotICAgIGZsb2F0IHggPSBjeDsKLSAg
ICBmbG9hdCB5ID0gY3k7Ci0KLSAgICB1bnNpZ25lZCBzdGVwID0gMCwgbnVtID0gMTAwOwotICAg
IGJvb2wgcnVubmluZyA9IHRydWU7Ci0gICAgd2hpbGUgKHJ1bm5pbmcpCi0gICAgewotICAgICAg
ICBpZiAoc3RlcCA9PSBudW0pCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJ1bm5pbmcgPSBmYWxz
ZTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0KLSAgICAgICAgZmxvYXQgYW5nbGUg
PSBzdGF0aWNfY2FzdDxmbG9hdD4oc3RlcCkgLyBzdGF0aWNfY2FzdDxmbG9hdD4obnVtKSAqIDIu
MGYgKiBwaUZsb2F0OwotICAgICAgICB4ID0gY3ggKyBjb3NmKGFuZ2xlKSAqIHJ4OwotICAgICAg
ICB5ID0gY3kgKyBzaW5mKGFuZ2xlKSAqIHJ5OwotCi0gICAgICAgIHN0ZXArKzsKLSAgICAgICAg
aWYgKHN0ZXAgPT0gMSkKLSAgICAgICAgICAgIHBhdGgubW92ZVRvKEZsb2F0UG9pbnQoeCwgeSkp
OwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBwYXRoLmFkZExpbmVUbyhGbG9hdFBvaW50KHgs
IHkpKTsKLSAgICB9Ci0KLSAgICBwYXRoLmNsb3NlU3VicGF0aCgpOwotCi0gICAgcmV0dXJuIHBh
dGg7Ci19Ci0KLVBhdGggUGF0aDo6Y3JlYXRlQ2lyY2xlKGNvbnN0IEZsb2F0UG9pbnQmIGNlbnRl
ciwgZmxvYXQgcikKLXsKLSAgICByZXR1cm4gY3JlYXRlRWxsaXBzZShjZW50ZXIsIHIsIHIpOwot
fQotCi1QYXRoIFBhdGg6OmNyZWF0ZUxpbmUoY29uc3QgRmxvYXRQb2ludCYgc3RhcnQsIGNvbnN0
IEZsb2F0UG9pbnQmIGVuZCkKLXsKLSAgICBQYXRoIHBhdGg7Ci0KLSAgICBwYXRoLm1vdmVUbyhz
dGFydCk7Ci0gICAgcGF0aC5hZGRMaW5lVG8oZW5kKTsKIAotICAgIHJldHVybiBwYXRoOworICAg
IG1vdmVUbyhGbG9hdFBvaW50KHggKyB0b3BMZWZ0UmFkaXVzLndpZHRoKCksIHkpKTsKKyAgICBh
ZGRMaW5lVG8oRmxvYXRQb2ludCh4ICsgd2lkdGggLSB0b3BSaWdodFJhZGl1cy53aWR0aCgpLCB5
KSk7CisgICAgYWRkQmV6aWVyQ3VydmVUbyhGbG9hdFBvaW50KHggKyB3aWR0aCAtIHRvcFJpZ2h0
UmFkaXVzLndpZHRoKCkgKiAoMSAtIGdDaXJjbGVDb250cm9sUG9pbnQpLCB5KSwgRmxvYXRQb2lu
dCh4ICsgd2lkdGgsIHkgKyB0b3BSaWdodFJhZGl1cy5oZWlnaHQoKSAqICgxIC0gZ0NpcmNsZUNv
bnRyb2xQb2ludCkpLCBGbG9hdFBvaW50KHggKyB3aWR0aCwgeSArIHRvcFJpZ2h0UmFkaXVzLmhl
aWdodCgpKSk7CisgICAgYWRkTGluZVRvKEZsb2F0UG9pbnQoeCArIHdpZHRoLCB5ICsgaGVpZ2h0
IC0gYm90dG9tUmlnaHRSYWRpdXMuaGVpZ2h0KCkpKTsKKyAgICBhZGRCZXppZXJDdXJ2ZVRvKEZs
b2F0UG9pbnQoeCArIHdpZHRoLCB5ICsgaGVpZ2h0IC0gYm90dG9tUmlnaHRSYWRpdXMuaGVpZ2h0
KCkgKiAoMSAtIGdDaXJjbGVDb250cm9sUG9pbnQpKSwgRmxvYXRQb2ludCh4ICsgd2lkdGggLSBi
b3R0b21SaWdodFJhZGl1cy53aWR0aCgpICogKDEgLSBnQ2lyY2xlQ29udHJvbFBvaW50KSwgeSAr
IGhlaWdodCksIEZsb2F0UG9pbnQoeCArIHdpZHRoIC0gYm90dG9tUmlnaHRSYWRpdXMud2lkdGgo
KSwgeSArIGhlaWdodCkpOworICAgIGFkZExpbmVUbyhGbG9hdFBvaW50KHggKyBib3R0b21MZWZ0
UmFkaXVzLndpZHRoKCksIHkgKyBoZWlnaHQpKTsKKyAgICBhZGRCZXppZXJDdXJ2ZVRvKEZsb2F0
UG9pbnQoeCArIGJvdHRvbUxlZnRSYWRpdXMud2lkdGgoKSAqICgxIC0gZ0NpcmNsZUNvbnRyb2xQ
b2ludCksIHkgKyBoZWlnaHQpLCBGbG9hdFBvaW50KHgsIHkgKyBoZWlnaHQgLSBib3R0b21MZWZ0
UmFkaXVzLmhlaWdodCgpICogKDEgLSBnQ2lyY2xlQ29udHJvbFBvaW50KSksIEZsb2F0UG9pbnQo
eCwgeSArIGhlaWdodCAtIGJvdHRvbUxlZnRSYWRpdXMuaGVpZ2h0KCkpKTsKKyAgICBhZGRMaW5l
VG8oRmxvYXRQb2ludCh4LCB5ICsgdG9wTGVmdFJhZGl1cy5oZWlnaHQoKSkpOworICAgIGFkZEJl
emllckN1cnZlVG8oRmxvYXRQb2ludCh4LCB5ICsgdG9wTGVmdFJhZGl1cy5oZWlnaHQoKSAqICgx
IC0gZ0NpcmNsZUNvbnRyb2xQb2ludCkpLCBGbG9hdFBvaW50KHggKyB0b3BMZWZ0UmFkaXVzLndp
ZHRoKCkgKiAoMSAtIGdDaXJjbGVDb250cm9sUG9pbnQpLCB5KSwgRmxvYXRQb2ludCh4ICsgdG9w
TGVmdFJhZGl1cy53aWR0aCgpLCB5KSk7CisKKyAgICBjbG9zZVN1YnBhdGgoKTsKIH0KIAogfQpk
aWZmIC0tZ2l0IGEvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9QYXRoLmggYi9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL1BhdGguaAppbmRleCA0M2JhODg5Li4xNmRkZGIxIDEwMDY0NAotLS0g
YS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1BhdGguaAorKysgYi9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL1BhdGguaApAQCAtMTM3LDIwICsxMzcsMTQgQEAgbmFtZXNwYWNlIFdlYkNvcmUg
ewogICAgICAgICB2b2lkIGFkZEFyYyhjb25zdCBGbG9hdFBvaW50JiwgZmxvYXQgcmFkaXVzLCBm
bG9hdCBzdGFydEFuZ2xlLCBmbG9hdCBlbmRBbmdsZSwgYm9vbCBhbnRpY2xvY2t3aXNlKTsKICAg
ICAgICAgdm9pZCBhZGRSZWN0KGNvbnN0IEZsb2F0UmVjdCYpOwogICAgICAgICB2b2lkIGFkZEVs
bGlwc2UoY29uc3QgRmxvYXRSZWN0Jik7CisgICAgICAgIHZvaWQgYWRkUm91bmRlZFJlY3Rhbmds
ZShjb25zdCBGbG9hdFJlY3QmLCBjb25zdCBGbG9hdFNpemUmIHJvdW5kaW5nUmFkaWkpOworICAg
ICAgICB2b2lkIGFkZFJvdW5kZWRSZWN0YW5nbGUoY29uc3QgRmxvYXRSZWN0JiwgY29uc3QgRmxv
YXRTaXplJiB0b3BMZWZ0UmFkaXVzLCBjb25zdCBGbG9hdFNpemUmIHRvcFJpZ2h0UmFkaXVzLCBj
b25zdCBGbG9hdFNpemUmIGJvdHRvbUxlZnRSYWRpdXMsIGNvbnN0IEZsb2F0U2l6ZSYgYm90dG9t
UmlnaHRSYWRpdXMpOwogCiAgICAgICAgIHZvaWQgdHJhbnNsYXRlKGNvbnN0IEZsb2F0U2l6ZSYp
OwogCiAgICAgICAgIFN0cmluZyBkZWJ1Z1N0cmluZygpIGNvbnN0OwogCiAgICAgICAgIFBsYXRm
b3JtUGF0aFB0ciBwbGF0Zm9ybVBhdGgoKSBjb25zdCB7IHJldHVybiBtX3BhdGg7IH0KLQotICAg
ICAgICBzdGF0aWMgUGF0aCBjcmVhdGVSb3VuZGVkUmVjdGFuZ2xlKGNvbnN0IEZsb2F0UmVjdCYs
IGNvbnN0IEZsb2F0U2l6ZSYgcm91bmRpbmdSYWRpaSk7Ci0gICAgICAgIHN0YXRpYyBQYXRoIGNy
ZWF0ZVJvdW5kZWRSZWN0YW5nbGUoY29uc3QgRmxvYXRSZWN0JiwgY29uc3QgRmxvYXRTaXplJiB0
b3BMZWZ0UmFkaXVzLCBjb25zdCBGbG9hdFNpemUmIHRvcFJpZ2h0UmFkaXVzLCBjb25zdCBGbG9h
dFNpemUmIGJvdHRvbUxlZnRSYWRpdXMsIGNvbnN0IEZsb2F0U2l6ZSYgYm90dG9tUmlnaHRSYWRp
dXMpOwotICAgICAgICBzdGF0aWMgUGF0aCBjcmVhdGVSZWN0YW5nbGUoY29uc3QgRmxvYXRSZWN0
Jik7Ci0gICAgICAgIHN0YXRpYyBQYXRoIGNyZWF0ZUVsbGlwc2UoY29uc3QgRmxvYXRQb2ludCYg
Y2VudGVyLCBmbG9hdCByeCwgZmxvYXQgcnkpOwotICAgICAgICBzdGF0aWMgUGF0aCBjcmVhdGVD
aXJjbGUoY29uc3QgRmxvYXRQb2ludCYgY2VudGVyLCBmbG9hdCByKTsKLSAgICAgICAgc3RhdGlj
IFBhdGggY3JlYXRlTGluZShjb25zdCBGbG9hdFBvaW50JiwgY29uc3QgRmxvYXRQb2ludCYpOwot
CiAgICAgICAgIHZvaWQgYXBwbHkodm9pZCogaW5mbywgUGF0aEFwcGxpZXJGdW5jdGlvbikgY29u
c3Q7CiAgICAgICAgIHZvaWQgdHJhbnNmb3JtKGNvbnN0IEFmZmluZVRyYW5zZm9ybSYpOwogCmRp
ZmYgLS1naXQgYS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0NvbnRleHRTaGFkb3dD
YWlyby5jcHAgYi9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0NvbnRleHRTaGFkb3dD
YWlyby5jcHAKaW5kZXggNmY1YmUyOC4uNGNiY2MxYSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jYWlyby9Db250ZXh0U2hhZG93Q2Fpcm8uY3BwCisrKyBiL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vQ29udGV4dFNoYWRvd0NhaXJvLmNwcApAQCAtMTM0LDgg
KzEzNCwxMCBAQCB2b2lkIENvbnRleHRTaGFkb3c6OmRyYXdSZWN0U2hhZG93V2l0aG91dFRpbGlu
ZyhQbGF0Zm9ybUNvbnRleHQgY29udGV4dCwgY29uc3QgSQogICAgIGlmICghbV9sYXllckNvbnRl
eHQpCiAgICAgICAgIHJldHVybjsKIAotICAgIGFwcGVuZFdlYkNvcmVQYXRoVG9DYWlyb0NvbnRl
eHQobV9sYXllckNvbnRleHQsIFBhdGg6OmNyZWF0ZVJvdW5kZWRSZWN0YW5nbGUoc2hhZG93UmVj
dCwgdG9wTGVmdFJhZGl1cywgdG9wUmlnaHRSYWRpdXMsCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBib3R0b21MZWZ0UmFkaXVzLCBib3R0b21SaWdodFJhZGl1cykpOworICAgIFBhdGggcGF0aDsK
KyAgICBwYXRoLmFkZFJvdW5kZWRSZWN0YW5nbGUoc2hhZG93UmVjdCwgdG9wTGVmdFJhZGl1cywg
dG9wUmlnaHRSYWRpdXMsIGJvdHRvbUxlZnRSYWRpdXMsIGJvdHRvbVJpZ2h0UmFkaXVzKTsKKwor
ICAgIGFwcGVuZFdlYkNvcmVQYXRoVG9DYWlyb0NvbnRleHQobV9sYXllckNvbnRleHQsIHBhdGgp
OwogICAgIGNhaXJvX3NldF9zb3VyY2VfcmdiYShtX2xheWVyQ29udGV4dCwgMCwgMCwgMCwgYWxw
aGEpOwogICAgIGNhaXJvX2ZpbGwobV9sYXllckNvbnRleHQpOwogCkBAIC0yMzgsMTAgKzI0MCwx
MyBAQCB2b2lkIENvbnRleHRTaGFkb3c6OmRyYXdSZWN0U2hhZG93KEdyYXBoaWNzQ29udGV4dCog
Y29udGV4dCwgY29uc3QgSW50UmVjdCYgcmVjdAogICAgIGNhaXJvX3BhaW50KG1fbGF5ZXJDb250
ZXh0KTsKICAgICBjYWlyb19zZXRfb3BlcmF0b3IobV9sYXllckNvbnRleHQsIENBSVJPX09QRVJB
VE9SX09WRVIpOwogCi0gICAgLy8gRHJhdyB0aGUgcmVjdGFuZ2xlLgotICAgIEludFJlY3QgdGVt
cGxhdGVSZWN0ID0gSW50UmVjdChtX2JsdXJEaXN0YW5jZSwgbV9ibHVyRGlzdGFuY2UsIHNoYWRv
d1RlbXBsYXRlU2l6ZS53aWR0aCgpIC0gcmFkaXVzVHdpY2UsIHNoYWRvd1RlbXBsYXRlU2l6ZS5o
ZWlnaHQoKSAtIHJhZGl1c1R3aWNlKTsKLSAgICBhcHBlbmRXZWJDb3JlUGF0aFRvQ2Fpcm9Db250
ZXh0KG1fbGF5ZXJDb250ZXh0LCBQYXRoOjpjcmVhdGVSb3VuZGVkUmVjdGFuZ2xlKHRlbXBsYXRl
UmVjdCwgdG9wTGVmdFJhZGl1cywgdG9wUmlnaHRSYWRpdXMsCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBib3R0b21MZWZ0UmFkaXVzLCBib3R0b21SaWdodFJhZGl1cykpOworICAgIHsKKyAgICAg
ICAgLy8gRHJhdyB0aGUgcmVjdGFuZ2xlLgorICAgICAgICBJbnRSZWN0IHRlbXBsYXRlUmVjdCA9
IEludFJlY3QobV9ibHVyRGlzdGFuY2UsIG1fYmx1ckRpc3RhbmNlLCBzaGFkb3dUZW1wbGF0ZVNp
emUud2lkdGgoKSAtIHJhZGl1c1R3aWNlLCBzaGFkb3dUZW1wbGF0ZVNpemUuaGVpZ2h0KCkgLSBy
YWRpdXNUd2ljZSk7CisgICAgICAgIFBhdGggcGF0aDsKKyAgICAgICAgcGF0aC5hZGRSb3VuZGVk
UmVjdGFuZ2xlKHRlbXBsYXRlUmVjdCwgdG9wTGVmdFJhZGl1cywgdG9wUmlnaHRSYWRpdXMsIGJv
dHRvbUxlZnRSYWRpdXMsIGJvdHRvbVJpZ2h0UmFkaXVzKTsKKyAgICAgICAgYXBwZW5kV2ViQ29y
ZVBhdGhUb0NhaXJvQ29udGV4dChtX2xheWVyQ29udGV4dCwgcGF0aCk7CisgICAgfQogCiAgICAg
Y2Fpcm9fc2V0X3NvdXJjZV9yZ2JhKG1fbGF5ZXJDb250ZXh0LCAwLCAwLCAwLCBjb250ZXh0LT5n
ZXRBbHBoYSgpKTsKICAgICBjYWlyb19maWxsKG1fbGF5ZXJDb250ZXh0KTsKQEAgLTI2Myw4ICsy
NjgsOSBAQCB2b2lkIENvbnRleHRTaGFkb3c6OmRyYXdSZWN0U2hhZG93KEdyYXBoaWNzQ29udGV4
dCogY29udGV4dCwgY29uc3QgSW50UmVjdCYgcmVjdAogICAgIHNoYWRvd1JlY3QuaW5mbGF0ZSgt
cmFkaXVzVHdpY2UpOwogICAgIGlmICghc2hhZG93UmVjdC5pc0VtcHR5KCkpIHsKICAgICAgICAg
Y2Fpcm9fc2F2ZShjcik7Ci0gICAgICAgIGFwcGVuZFdlYkNvcmVQYXRoVG9DYWlyb0NvbnRleHQo
Y3IsIFBhdGg6OmNyZWF0ZVJvdW5kZWRSZWN0YW5nbGUoc2hhZG93UmVjdCwgdG9wTGVmdFJhZGl1
cywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHRvcFJpZ2h0UmFkaXVzLCBib3R0b21MZWZ0UmFkaXVz
LCBib3R0b21SaWdodFJhZGl1cykpOworICAgICAgICBQYXRoIHBhdGg7CisgICAgICAgIHBhdGgu
YWRkUm91bmRlZFJlY3RhbmdsZShzaGFkb3dSZWN0LCB0b3BMZWZ0UmFkaXVzLCB0b3BSaWdodFJh
ZGl1cywgYm90dG9tTGVmdFJhZGl1cywgYm90dG9tUmlnaHRSYWRpdXMpOworICAgICAgICBhcHBl
bmRXZWJDb3JlUGF0aFRvQ2Fpcm9Db250ZXh0KGNyLCBwYXRoKTsKICAgICAgICAgc2V0U291cmNl
UkdCQUZyb21Db2xvcihjciwgbV9jb2xvcik7CiAgICAgICAgIGNhaXJvX2ZpbGwoY3IpOwogICAg
ICAgICBjYWlyb19yZXN0b3JlKGNyKTsKZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY2Fpcm8vR3JhcGhpY3NDb250ZXh0Q2Fpcm8uY3BwIGIvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jYWlyby9HcmFwaGljc0NvbnRleHRDYWlyby5jcHAKaW5kZXggZTk0ZGZiYS4uZDkz
ZTI1NyAxMDA2NDQKLS0tIGEvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9HcmFwaGlj
c0NvbnRleHRDYWlyby5jcHAKKysrIGIvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9H
cmFwaGljc0NvbnRleHRDYWlyby5jcHAKQEAgLTcwMyw4ICs3MDMsMTEgQEAgdm9pZCBHcmFwaGlj
c0NvbnRleHQ6OmRyYXdGb2N1c1JpbmcoY29uc3QgVmVjdG9yPEludFJlY3Q+JiByZWN0cywgaW50
IHdpZHRoLCBpbnQKICAgICBzZXRQbGF0Zm9ybVN0cm9rZVN0eWxlKERvdHRlZFN0cm9rZSk7CiAj
ZWxzZQogICAgIGludCByYWRpdXMgPSAod2lkdGggLSAxKSAvIDI7Ci0gICAgZm9yICh1bnNpZ25l
ZCBpID0gMDsgaSA8IHJlY3RDb3VudDsgaSsrKQotICAgICAgICBhcHBlbmRXZWJDb3JlUGF0aFRv
Q2Fpcm9Db250ZXh0KGNyLCBQYXRoOjpjcmVhdGVSb3VuZGVkUmVjdGFuZ2xlKHJlY3RzW2ldLCBG
bG9hdFNpemUocmFkaXVzLCByYWRpdXMpKSk7CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8
IHJlY3RDb3VudDsgKytpKSB7CisgICAgICAgIFBhdGggcGF0aDsKKyAgICAgICAgcGF0aC5hZGRS
b3VuZGVkUmVjdGFuZ2xlKHJlY3RzW2ldLCBGbG9hdFNpemUocmFkaXVzLCByYWRpdXMpKTsKKyAg
ICAgICAgYXBwZW5kV2ViQ29yZVBhdGhUb0NhaXJvQ29udGV4dChjciwgcGF0aCk7CisgICAgfQog
CiAgICAgLy8gRm9yY2UgdGhlIGFscGhhIHRvIDUwJS4gIFRoaXMgbWF0Y2hlcyB3aGF0IHRoZSBN
YWMgZG9lcyB3aXRoIG91dGxpbmUgcmluZ3MuCiAgICAgQ29sb3IgcmluZ0NvbG9yKGNvbG9yLnJl
ZCgpLCBjb2xvci5ncmVlbigpLCBjb2xvci5ibHVlKCksIDEyNyk7CkBAIC0xMjc1LDcgKzEyNzgs
MTAgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6OmRyYXdUaWxlZFNoYWRvdyhjb25zdCBJbnRSZWN0
JiByZWN0LCBjb25zdCBGbG9hdFNpemUmIHRvcEwKICAgICAvLyBEcmF3IHNoYWRvdyBpbnRvIGEg
bmV3IEltYWdlQnVmZmVyLgogICAgIGNhaXJvX3QqIHNtYWxsQnVmZmVyQ29udGV4dCA9IHNtYWxs
QnVmZmVyLT5jb250ZXh0KCktPnBsYXRmb3JtQ29udGV4dCgpOwogICAgIGNvcHlDb250ZXh0UHJv
cGVydGllcyhjciwgc21hbGxCdWZmZXJDb250ZXh0KTsKLSAgICBhcHBlbmRXZWJDb3JlUGF0aFRv
Q2Fpcm9Db250ZXh0KHNtYWxsQnVmZmVyLT5jb250ZXh0KCktPnBsYXRmb3JtQ29udGV4dCgpLCBQ
YXRoOjpjcmVhdGVSb3VuZGVkUmVjdGFuZ2xlKHNtYWxsUmVjdCwgdG9wTGVmdFJhZGl1cywgdG9w
UmlnaHRSYWRpdXMsIGJvdHRvbUxlZnRSYWRpdXMsIGJvdHRvbVJpZ2h0UmFkaXVzKSk7CisKKyAg
ICBQYXRoIHBhdGg7CisgICAgcGF0aC5hZGRSb3VuZGVkUmVjdGFuZ2xlKHNtYWxsUmVjdCwgdG9w
TGVmdFJhZGl1cywgdG9wUmlnaHRSYWRpdXMsIGJvdHRvbUxlZnRSYWRpdXMsIGJvdHRvbVJpZ2h0
UmFkaXVzKTsKKyAgICBhcHBlbmRXZWJDb3JlUGF0aFRvQ2Fpcm9Db250ZXh0KHNtYWxsQnVmZmVy
LT5jb250ZXh0KCktPnBsYXRmb3JtQ29udGV4dCgpLCBwYXRoKTsKICAgICBzZXRQbGF0Zm9ybUZp
bGwodGhpcywgc21hbGxCdWZmZXJDb250ZXh0LCBtX2NvbW1vbik7CiAKICAgICBPd25QdHI8SW1h
Z2VCdWZmZXI+IHNoYWRvd0J1ZmZlciA9IEltYWdlQnVmZmVyOjpjcmVhdGUoc21hbGxCdWZmZXJT
aXplKTsKQEAgLTEyOTQsNyArMTMwMCw5IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpkcmF3VGls
ZWRTaGFkb3coY29uc3QgSW50UmVjdCYgcmVjdCwgY29uc3QgRmxvYXRTaXplJiB0b3BMCiAgICAg
c2hhZG93UmVjdC5pbmZsYXRlKC1yYWRpdXNUd2ljZSk7CiAgICAgaWYgKCFzaGFkb3dSZWN0Lmlz
RW1wdHkoKSkgewogICAgICAgICBjYWlyb19zYXZlKGNyKTsKLSAgICAgICAgYXBwZW5kV2ViQ29y
ZVBhdGhUb0NhaXJvQ29udGV4dChjciwgUGF0aDo6Y3JlYXRlUm91bmRlZFJlY3RhbmdsZShzaGFk
b3dSZWN0LCB0b3BMZWZ0UmFkaXVzLCB0b3BSaWdodFJhZGl1cywgYm90dG9tTGVmdFJhZGl1cywg
Ym90dG9tUmlnaHRSYWRpdXMpKTsKKyAgICAgICAgcGF0aC5jbGVhcigpOworICAgICAgICBwYXRo
LmFkZFJvdW5kZWRSZWN0YW5nbGUoc2hhZG93UmVjdCwgdG9wTGVmdFJhZGl1cywgdG9wUmlnaHRS
YWRpdXMsIGJvdHRvbUxlZnRSYWRpdXMsIGJvdHRvbVJpZ2h0UmFkaXVzKTsKKyAgICAgICAgYXBw
ZW5kV2ViQ29yZVBhdGhUb0NhaXJvQ29udGV4dChjciwgcGF0aCk7CiAgICAgICAgIHNldENvbG9y
KGNyLCBzaGFkb3dDb2xvcik7CiAgICAgICAgIGNhaXJvX2ZpbGwoY3IpOwogICAgICAgICBjYWly
b19yZXN0b3JlKGNyKTsKQEAgLTEzNzMsNyArMTM4MSw5IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0
OjpmaWxsUm91bmRlZFJlY3QoY29uc3QgSW50UmVjdCYgciwgY29uc3QgSW50U2l6ZSYgdG9wTGVm
dCwKIAogICAgIGNhaXJvX3QqIGNyID0gbV9kYXRhLT5jcjsKICAgICBjYWlyb19zYXZlKGNyKTsK
LSAgICBhcHBlbmRXZWJDb3JlUGF0aFRvQ2Fpcm9Db250ZXh0KGNyLCBQYXRoOjpjcmVhdGVSb3Vu
ZGVkUmVjdGFuZ2xlKHIsIHRvcExlZnQsIHRvcFJpZ2h0LCBib3R0b21MZWZ0LCBib3R0b21SaWdo
dCkpOworICAgIFBhdGggcGF0aDsKKyAgICBwYXRoLmFkZFJvdW5kZWRSZWN0YW5nbGUociwgdG9w
TGVmdCwgdG9wUmlnaHQsIGJvdHRvbUxlZnQsIGJvdHRvbVJpZ2h0KTsKKyAgICBhcHBlbmRXZWJD
b3JlUGF0aFRvQ2Fpcm9Db250ZXh0KGNyLCBwYXRoKTsKICAgICBzZXRDb2xvcihjciwgY29sb3Ip
OwogICAgIGRyYXdQYXRoU2hhZG93KHRoaXMsIG1fY29tbW9uLCB0cnVlLCBmYWxzZSk7CiAgICAg
Y2Fpcm9fZmlsbChjcik7CmRpZmYgLS1naXQgYS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nn
L0dyYXBoaWNzQ29udGV4dENHLmNwcCBiL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvR3Jh
cGhpY3NDb250ZXh0Q0cuY3BwCmluZGV4IGJkOGU4NTAuLjI1ZWZiN2IgMTAwNjQ0Ci0tLSBhL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvR3JhcGhpY3NDb250ZXh0Q0cuY3BwCisrKyBiL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvR3JhcGhpY3NDb250ZXh0Q0cuY3BwCkBAIC02Njcs
NyArNjY3LDkgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6OmZpbGxSb3VuZGVkUmVjdChjb25zdCBJ
bnRSZWN0JiByZWN0LCBjb25zdCBJbnRTaXplJiB0b3BMZWYKICAgICBpZiAob2xkRmlsbENvbG9y
ICE9IGNvbG9yIHx8IG9sZENvbG9yU3BhY2UgIT0gY29sb3JTcGFjZSkKICAgICAgICAgc2V0Q0dG
aWxsQ29sb3IoY29udGV4dCwgY29sb3IsIGNvbG9yU3BhY2UpOwogCi0gICAgYWRkUGF0aChQYXRo
OjpjcmVhdGVSb3VuZGVkUmVjdGFuZ2xlKHJlY3QsIHRvcExlZnQsIHRvcFJpZ2h0LCBib3R0b21M
ZWZ0LCBib3R0b21SaWdodCkpOworICAgIFBhdGggcGF0aDsKKyAgICBwYXRoLmFkZFJvdW5kZWRS
ZWN0YW5nbGUocmVjdCwgdG9wTGVmdCwgdG9wUmlnaHQsIGJvdHRvbUxlZnQsIGJvdHRvbVJpZ2h0
KTsKKyAgICBhZGRQYXRoKHBhdGgpOwogICAgIGZpbGxQYXRoKCk7CiAKICAgICBpZiAob2xkRmls
bENvbG9yICE9IGNvbG9yIHx8IG9sZENvbG9yU3BhY2UgIT0gY29sb3JTcGFjZSkKZGlmZiAtLWdp
dCBhL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvcXQvR3JhcGhpY3NDb250ZXh0UXQuY3BwIGIv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9xdC9HcmFwaGljc0NvbnRleHRRdC5jcHAKaW5kZXgg
N2U0YWY0MC4uNzI5MjExZiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9x
dC9HcmFwaGljc0NvbnRleHRRdC5jcHAKKysrIGIvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9x
dC9HcmFwaGljc0NvbnRleHRRdC5jcHAKQEAgLTcyMiw3ICs3MjIsOCBAQCB2b2lkIEdyYXBoaWNz
Q29udGV4dDo6ZmlsbFJvdW5kZWRSZWN0KGNvbnN0IEludFJlY3QmIHJlY3QsIGNvbnN0IEludFNp
emUmIHRvcExlZgogICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkgfHwgIWNvbG9yLmlzVmFsaWQo
KSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgUGF0aCBwYXRoID0gUGF0aDo6Y3JlYXRlUm91bmRl
ZFJlY3RhbmdsZShyZWN0LCB0b3BMZWZ0LCB0b3BSaWdodCwgYm90dG9tTGVmdCwgYm90dG9tUmln
aHQpOworICAgIFBhdGggcGF0aDsKKyAgICBwYXRoLmFkZFJvdW5kZWRSZWN0YW5nbGUocmVjdCwg
dG9wTGVmdCwgdG9wUmlnaHQsIGJvdHRvbUxlZnQsIGJvdHRvbVJpZ2h0KTsKICAgICBRUGFpbnRl
ciogcCA9IG1fZGF0YS0+cCgpOwogICAgIGlmIChtX2RhdGEtPmhhc1NoYWRvdygpKSB7CiAgICAg
ICAgIHAtPnRyYW5zbGF0ZShtX2RhdGEtPnNoYWRvdy5vZmZzZXQoKSk7CmRpZmYgLS1naXQgYS9X
ZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCb3hNb2RlbE9iamVjdC5jcHAgYi9XZWJDb3JlL3JlbmRl
cmluZy9SZW5kZXJCb3hNb2RlbE9iamVjdC5jcHAKaW5kZXggMDJhMjg0Ny4uN2UwYTJlOSAxMDA2
NDQKLS0tIGEvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQm94TW9kZWxPYmplY3QuY3BwCisrKyBi
L1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJveE1vZGVsT2JqZWN0LmNwcApAQCAtMTA2MSw3ICsx
MDYxLDcgQEAgdm9pZCBSZW5kZXJCb3hNb2RlbE9iamVjdDo6cGFpbnRCb3JkZXIoR3JhcGhpY3ND
b250ZXh0KiBncmFwaGljc0NvbnRleHQsIGludCB0eCwKICAgICAgICAgZ3JhcGhpY3NDb250ZXh0
LT5hZGRSb3VuZGVkUmVjdENsaXAoYm9yZGVyUmVjdCwgdG9wTGVmdCwgdG9wUmlnaHQsIGJvdHRv
bUxlZnQsIGJvdHRvbVJpZ2h0KTsKICAgICAgICAgZ3JhcGhpY3NDb250ZXh0LT5jbGlwT3V0Um91
bmRlZFJlY3QoaW5uZXJCb3JkZXJSZWN0LCBpbm5lclRvcExlZnRSYWRpdXMsIGlubmVyVG9wUmln
aHRSYWRpdXMsIGlubmVyQm90dG9tTGVmdFJhZGl1cywgaW5uZXJCb3R0b21SaWdodFJhZGl1cyk7
CiAKLSAgICAgICAgcm91bmRlZFBhdGggPSBQYXRoOjpjcmVhdGVSb3VuZGVkUmVjdGFuZ2xlKGJv
cmRlclJlY3QsIHRvcExlZnQsIHRvcFJpZ2h0LCBib3R0b21MZWZ0LCBib3R0b21SaWdodCk7Cisg
ICAgICAgIHJvdW5kZWRQYXRoLmFkZFJvdW5kZWRSZWN0YW5nbGUoYm9yZGVyUmVjdCwgdG9wTGVm
dCwgdG9wUmlnaHQsIGJvdHRvbUxlZnQsIGJvdHRvbVJpZ2h0KTsKICAgICAgICAgZ3JhcGhpY3ND
b250ZXh0LT5hZGRQYXRoKHJvdW5kZWRQYXRoKTsKICAgICB9CiAKQEAgLTE3NTIsMjQgKzE3NTIs
MjkgQEAgdm9pZCBSZW5kZXJCb3hNb2RlbE9iamVjdDo6cGFpbnRCb3hTaGFkb3coR3JhcGhpY3ND
b250ZXh0KiBjb250ZXh0LCBpbnQgdHgsIGludAogCiAgICAgICAgICAgICBjb250ZXh0LT5zYXZl
KCk7CiAKLSAgICAgICAgICAgIGlmIChoYXNCb3JkZXJSYWRpdXMpCi0gICAgICAgICAgICAgICAg
Y29udGV4dC0+Y2xpcChQYXRoOjpjcmVhdGVSb3VuZGVkUmVjdGFuZ2xlKHJlY3QsIHRvcExlZnQs
IHRvcFJpZ2h0LCBib3R0b21MZWZ0LCBib3R0b21SaWdodCkpOwotICAgICAgICAgICAgZWxzZQor
ICAgICAgICAgICAgUGF0aCBwYXRoOworICAgICAgICAgICAgaWYgKGhhc0JvcmRlclJhZGl1cykg
eworICAgICAgICAgICAgICAgIHBhdGguYWRkUm91bmRlZFJlY3RhbmdsZShyZWN0LCB0b3BMZWZ0
LCB0b3BSaWdodCwgYm90dG9tTGVmdCwgYm90dG9tUmlnaHQpOworICAgICAgICAgICAgICAgIGNv
bnRleHQtPmNsaXAocGF0aCk7CisgICAgICAgICAgICB9IGVsc2UKICAgICAgICAgICAgICAgICBj
b250ZXh0LT5jbGlwKHJlY3QpOwogCiAgICAgICAgICAgICBJbnRTaXplIGV4dHJhT2Zmc2V0KDIg
KiB3ICsgbWF4KDAsIHNoYWRvd09mZnNldC53aWR0aCgpKSArIHNoYWRvd0JsdXIgLSAyICogc2hh
ZG93U3ByZWFkICsgMSwgMCk7CiAgICAgICAgICAgICBjb250ZXh0LT50cmFuc2xhdGUoZXh0cmFP
ZmZzZXQud2lkdGgoKSwgZXh0cmFPZmZzZXQuaGVpZ2h0KCkpOwogICAgICAgICAgICAgc2hhZG93
T2Zmc2V0IC09IGV4dHJhT2Zmc2V0OwogCi0gICAgICAgICAgICBjb250ZXh0LT5iZWdpblBhdGgo
KTsKLSAgICAgICAgICAgIGNvbnRleHQtPmFkZFBhdGgoUGF0aDo6Y3JlYXRlUmVjdGFuZ2xlKG91
dGVyUmVjdCkpOworICAgICAgICAgICAgcGF0aC5jbGVhcigpOworICAgICAgICAgICAgcGF0aC5h
ZGRSZWN0KG91dGVyUmVjdCk7CiAKICAgICAgICAgICAgIGlmIChoYXNCb3JkZXJSYWRpdXMpIHsK
ICAgICAgICAgICAgICAgICBpZiAoc2hhZG93U3ByZWFkID4gMCkKICAgICAgICAgICAgICAgICAg
ICAgdW5pZm9ybWx5RXhwYW5kQm9yZGVyUmFkaWkoLXNoYWRvd1NwcmVhZCwgdG9wTGVmdCwgdG9w
UmlnaHQsIGJvdHRvbUxlZnQsIGJvdHRvbVJpZ2h0KTsKLSAgICAgICAgICAgICAgICBjb250ZXh0
LT5hZGRQYXRoKFBhdGg6OmNyZWF0ZVJvdW5kZWRSZWN0YW5nbGUoaG9sZVJlY3QsIHRvcExlZnQs
IHRvcFJpZ2h0LCBib3R0b21MZWZ0LCBib3R0b21SaWdodCkpOworICAgICAgICAgICAgICAgIHBh
dGguYWRkUm91bmRlZFJlY3RhbmdsZShob2xlUmVjdCwgdG9wTGVmdCwgdG9wUmlnaHQsIGJvdHRv
bUxlZnQsIGJvdHRvbVJpZ2h0KTsKICAgICAgICAgICAgIH0gZWxzZQotICAgICAgICAgICAgICAg
IGNvbnRleHQtPmFkZFBhdGgoUGF0aDo6Y3JlYXRlUmVjdGFuZ2xlKGhvbGVSZWN0KSk7CisgICAg
ICAgICAgICAgICAgcGF0aC5hZGRSZWN0KGhvbGVSZWN0KTsKKworICAgICAgICAgICAgY29udGV4
dC0+YmVnaW5QYXRoKCk7CisgICAgICAgICAgICBjb250ZXh0LT5hZGRQYXRoKHBhdGgpOwogCiAg
ICAgICAgICAgICBjb250ZXh0LT5zZXRGaWxsUnVsZShSVUxFX0VWRU5PREQpOwogICAgICAgICAg
ICAgY29udGV4dC0+c2V0RmlsbENvbG9yKGZpbGxDb2xvciwgcy0+Y29sb3JTcGFjZSgpKTsKZGlm
ZiAtLWdpdCBhL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckVtYmVkZGVkT2JqZWN0LmNwcCBiL1dl
YkNvcmUvcmVuZGVyaW5nL1JlbmRlckVtYmVkZGVkT2JqZWN0LmNwcAppbmRleCBhYTMwMWUyLi41
MzY1MDBjIDEwMDY0NAotLS0gYS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJFbWJlZGRlZE9iamVj
dC5jcHAKKysrIGIvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyRW1iZWRkZWRPYmplY3QuY3BwCkBA
IC0yMDYsNyArMjA2LDcgQEAgYm9vbCBSZW5kZXJFbWJlZGRlZE9iamVjdDo6Z2V0UmVwbGFjZW1l
bnRUZXh0R2VvbWV0cnkoaW50IHR4LCBpbnQgdHksIEZsb2F0UmVjdCYKICAgICBmbG9hdCB5ID0g
KGNvbnRlbnRSZWN0LnNpemUoKS5oZWlnaHQoKSAvIDIgLSByZXBsYWNlbWVudFRleHRSZWN0LnNp
emUoKS5oZWlnaHQoKSAvIDIpICsgY29udGVudFJlY3QubG9jYXRpb24oKS55KCk7CiAgICAgcmVw
bGFjZW1lbnRUZXh0UmVjdC5zZXRMb2NhdGlvbihGbG9hdFBvaW50KHgsIHkpKTsKICAgICAKLSAg
ICBwYXRoID0gUGF0aDo6Y3JlYXRlUm91bmRlZFJlY3RhbmdsZShyZXBsYWNlbWVudFRleHRSZWN0
LCBGbG9hdFNpemUocmVwbGFjZW1lbnRUZXh0Um91bmRlZFJlY3RSYWRpdXMsIHJlcGxhY2VtZW50
VGV4dFJvdW5kZWRSZWN0UmFkaXVzKSk7CisgICAgcGF0aC5hZGRSb3VuZGVkUmVjdGFuZ2xlKHJl
cGxhY2VtZW50VGV4dFJlY3QsIEZsb2F0U2l6ZShyZXBsYWNlbWVudFRleHRSb3VuZGVkUmVjdFJh
ZGl1cywgcmVwbGFjZW1lbnRUZXh0Um91bmRlZFJlY3RSYWRpdXMpKTsKIAogICAgIHJldHVybiB0
cnVlOwogfQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyU1ZHUmVzb3VyY2VD
bGlwcGVyLmNwcCBiL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclNWR1Jlc291cmNlQ2xpcHBlci5j
cHAKaW5kZXggYTA5YWZiMi4uMjY1OWQ2NCAxMDA2NDQKLS0tIGEvV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyU1ZHUmVzb3VyY2VDbGlwcGVyLmNwcAorKysgYi9XZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJTVkdSZXNvdXJjZUNsaXBwZXIuY3BwCkBAIC0xMzYsNyArMTM2LDcgQEAgYm9vbCBSZW5kZXJT
VkdSZXNvdXJjZUNsaXBwZXI6OnBhdGhPbmx5Q2xpcHBpbmcoR3JhcGhpY3NDb250ZXh0KiBjb250
ZXh0LCBjb25zdAogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICAvLyBGYWxsYmFj
ayB0byBtYXNraW5nLCBpZiB0aGVyZSBpcyBtb3JlIHRoYW4gb25lIGNsaXBwaW5nIHBhdGguCiAg
ICAgICAgIGlmIChjbGlwUGF0aC5pc0VtcHR5KCkpIHsKLSAgICAgICAgICAgIGNsaXBQYXRoID0g
c3R5bGVkLT50b0NsaXBQYXRoKCk7CisgICAgICAgICAgICBzdHlsZWQtPnRvQ2xpcFBhdGgoY2xp
cFBhdGgpOwogICAgICAgICAgICAgY2xpcFJ1bGUgPSBzdmdTdHlsZS0+Y2xpcFJ1bGUoKTsKICAg
ICAgICAgfSBlbHNlCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CmRpZmYgLS1naXQgYS9XZWJD
b3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUGF0aC5jcHAgYi9XZWJDb3JlL3JlbmRlcmluZy9z
dmcvUmVuZGVyU1ZHUGF0aC5jcHAKaW5kZXggYWRhMzYwYS4uNDgzMzAzZiAxMDA2NDQKLS0tIGEv
V2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1BhdGguY3BwCisrKyBiL1dlYkNvcmUvcmVu
ZGVyaW5nL3N2Zy9SZW5kZXJTVkdQYXRoLmNwcApAQCAtMTEyLDcgKzExMiw4IEBAIHZvaWQgUmVu
ZGVyU1ZHUGF0aDo6bGF5b3V0KCkKIAogICAgIGJvb2wgbmVlZHNQYXRoVXBkYXRlID0gbV9uZWVk
c1BhdGhVcGRhdGU7CiAgICAgaWYgKG5lZWRzUGF0aFVwZGF0ZSkgewotICAgICAgICBtX3BhdGgg
PSBlbGVtZW50LT50b1BhdGhEYXRhKCk7CisgICAgICAgIG1fcGF0aC5jbGVhcigpOworICAgICAg
ICBlbGVtZW50LT50b1BhdGhEYXRhKG1fcGF0aCk7CiAgICAgICAgIG1fbmVlZHNQYXRoVXBkYXRl
ID0gZmFsc2U7CiAgICAgICAgIHVwZGF0ZUNhY2hlZEJvdW5kYXJpZXNJblBhcmVudHMgPSB0cnVl
OwogICAgIH0KZGlmZiAtLWdpdCBhL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdUZXh0
UGF0aC5jcHAgYi9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHVGV4dFBhdGguY3BwCmlu
ZGV4IDVkOTc3ZjkuLjY0ZWJjNmQgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9S
ZW5kZXJTVkdUZXh0UGF0aC5jcHAKKysrIGIvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNW
R1RleHRQYXRoLmNwcApAQCAtNTMsNyArNTMsOCBAQCBQYXRoIFJlbmRlclNWR1RleHRQYXRoOjps
YXlvdXRQYXRoKCkgY29uc3QKICAgICAKICAgICBTVkdQYXRoRWxlbWVudCogcGF0aEVsZW1lbnQg
PSBzdGF0aWNfY2FzdDxTVkdQYXRoRWxlbWVudCo+KHRhcmdldEVsZW1lbnQpOwogICAgIAotICAg
IFBhdGggcGF0aERhdGEgPSBwYXRoRWxlbWVudC0+dG9QYXRoRGF0YSgpOworICAgIFBhdGggcGF0
aERhdGE7CisgICAgcGF0aEVsZW1lbnQtPnRvUGF0aERhdGEocGF0aERhdGEpOwogICAgIC8vIFNw
ZWM6ICBUaGUgdHJhbnNmb3JtIGF0dHJpYnV0ZSBvbiB0aGUgcmVmZXJlbmNlZCAncGF0aCcgZWxl
bWVudCByZXByZXNlbnRzIGEKICAgICAvLyBzdXBwbGVtZW50YWwgdHJhbnNmb3JtYXRpb24gcmVs
YXRpdmUgdG8gdGhlIGN1cnJlbnQgdXNlciBjb29yZGluYXRlIHN5c3RlbSBmb3IKICAgICAvLyB0
aGUgY3VycmVudCAndGV4dCcgZWxlbWVudCwgaW5jbHVkaW5nIGFueSBhZGp1c3RtZW50cyB0byB0
aGUgY3VycmVudCB1c2VyIGNvb3JkaW5hdGUKZGlmZiAtLWdpdCBhL1dlYkNvcmUvcmVuZGVyaW5n
L3N2Zy9TVkdJbmxpbmVUZXh0Qm94LmNwcCBiL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdJbmxp
bmVUZXh0Qm94LmNwcAppbmRleCA4MzUyZWU1Li45YjA4YTg2IDEwMDY0NAotLS0gYS9XZWJDb3Jl
L3JlbmRlcmluZy9zdmcvU1ZHSW5saW5lVGV4dEJveC5jcHAKKysrIGIvV2ViQ29yZS9yZW5kZXJp
bmcvc3ZnL1NWR0lubGluZVRleHRCb3guY3BwCkBAIC00OTIsOSArNDkyLDEzIEBAIHZvaWQgU1ZH
SW5saW5lVGV4dEJveDo6cGFpbnREZWNvcmF0aW9uV2l0aFN0eWxlKEdyYXBoaWNzQ29udGV4dCog
Y29udGV4dCwgRVRleHRECiAgICAgZmxvYXQgdGhpY2tuZXNzID0gdGhpY2tuZXNzRm9yRGVjb3Jh
dGlvbihkZWNvcmF0aW9uLCBmb250KTsKICAgICBmbG9hdCB5ID0gZnJhZ21lbnQueSAtIGZvbnQu
YXNjZW50KCkgKyBwb3NpdGlvbk9mZnNldEZvckRlY29yYXRpb24oZGVjb3JhdGlvbiwgZm9udCwg
dGhpY2tuZXNzKTsKIAorICAgIFBhdGggcGF0aDsKKyAgICBpZiAoZnJhZ21lbnQud2lkdGggPiAw
ICYmIHRoaWNrbmVzcyA+IDApCisgICAgICAgIHBhdGguYWRkUmVjdChGbG9hdFJlY3QoZnJhZ21l
bnQueCwgeSwgZnJhZ21lbnQud2lkdGgsIHRoaWNrbmVzcykpOworCiAgICAgY29udGV4dC0+c2F2
ZSgpOwogICAgIGNvbnRleHQtPmJlZ2luUGF0aCgpOwotICAgIGNvbnRleHQtPmFkZFBhdGgoUGF0
aDo6Y3JlYXRlUmVjdGFuZ2xlKEZsb2F0UmVjdChmcmFnbWVudC54LCB5LCBmcmFnbWVudC53aWR0
aCwgdGhpY2tuZXNzKSkpOworICAgIGNvbnRleHQtPmFkZFBhdGgocGF0aCk7CiAKICAgICBpZiAo
YWNxdWlyZVBhaW50aW5nUmVzb3VyY2UoY29udGV4dCwgZGVjb3JhdGlvblJlbmRlcmVyLCBkZWNv
cmF0aW9uU3R5bGUpKQogICAgICAgICByZWxlYXNlUGFpbnRpbmdSZXNvdXJjZShjb250ZXh0KTsK
ZGlmZiAtLWdpdCBhL1dlYkNvcmUvc3ZnL1NWR0FuaW1hdGVNb3Rpb25FbGVtZW50LmNwcCBiL1dl
YkNvcmUvc3ZnL1NWR0FuaW1hdGVNb3Rpb25FbGVtZW50LmNwcAppbmRleCBiNTBhOTkzLi4yNjE1
MWVkIDEwMDY0NAotLS0gYS9XZWJDb3JlL3N2Zy9TVkdBbmltYXRlTW90aW9uRWxlbWVudC5jcHAK
KysrIGIvV2ViQ29yZS9zdmcvU1ZHQW5pbWF0ZU1vdGlvbkVsZW1lbnQuY3BwCkBAIC0xMTIsOSAr
MTEyLDEwIEBAIFBhdGggU1ZHQW5pbWF0ZU1vdGlvbkVsZW1lbnQ6OmFuaW1hdGlvblBhdGgoKSBj
b25zdAogICAgICAgICBpZiAoY2hpbGQtPmhhc1RhZ05hbWUoU1ZHTmFtZXM6Om1wYXRoVGFnKSkg
ewogICAgICAgICAgICAgU1ZHTVBhdGhFbGVtZW50KiBtUGF0aCA9IHN0YXRpY19jYXN0PFNWR01Q
YXRoRWxlbWVudCo+KGNoaWxkKTsKICAgICAgICAgICAgIFNWR1BhdGhFbGVtZW50KiBwYXRoRWxl
bWVudCA9IG1QYXRoLT5wYXRoRWxlbWVudCgpOworICAgICAgICAgICAgUGF0aCBwYXRoOwogICAg
ICAgICAgICAgaWYgKHBhdGhFbGVtZW50KQotICAgICAgICAgICAgICAgIHJldHVybiBwYXRoRWxl
bWVudC0+dG9QYXRoRGF0YSgpOwotICAgICAgICAgICAgcmV0dXJuIFBhdGgoKTsKKyAgICAgICAg
ICAgICAgICBwYXRoRWxlbWVudC0+dG9QYXRoRGF0YShwYXRoKTsKKyAgICAgICAgICAgIHJldHVy
biBwYXRoOwogICAgICAgICB9CiAgICAgfQogICAgIGlmIChoYXNBdHRyaWJ1dGUoU1ZHTmFtZXM6
OnBhdGhBdHRyKSkKZGlmZiAtLWdpdCBhL1dlYkNvcmUvc3ZnL1NWR0NpcmNsZUVsZW1lbnQuY3Bw
IGIvV2ViQ29yZS9zdmcvU1ZHQ2lyY2xlRWxlbWVudC5jcHAKaW5kZXggNGVkNGVmZS4uNWZjNTBj
MyAxMDA2NDQKLS0tIGEvV2ViQ29yZS9zdmcvU1ZHQ2lyY2xlRWxlbWVudC5jcHAKKysrIGIvV2Vi
Q29yZS9zdmcvU1ZHQ2lyY2xlRWxlbWVudC5jcHAKQEAgLTEyMSw5ICsxMjEsMTQgQEAgdm9pZCBT
VkdDaXJjbGVFbGVtZW50OjpzeW5jaHJvbml6ZVByb3BlcnR5KGNvbnN0IFF1YWxpZmllZE5hbWUm
IGF0dHJOYW1lKQogICAgICAgICBzeW5jaHJvbml6ZUV4dGVybmFsUmVzb3VyY2VzUmVxdWlyZWQo
KTsKIH0KIAotUGF0aCBTVkdDaXJjbGVFbGVtZW50Ojp0b1BhdGhEYXRhKCkgY29uc3QKK3ZvaWQg
U1ZHQ2lyY2xlRWxlbWVudDo6dG9QYXRoRGF0YShQYXRoJiBwYXRoKSBjb25zdAogewotICAgIHJl
dHVybiBQYXRoOjpjcmVhdGVDaXJjbGUoRmxvYXRQb2ludChjeCgpLnZhbHVlKHRoaXMpLCBjeSgp
LnZhbHVlKHRoaXMpKSwgcigpLnZhbHVlKHRoaXMpKTsKKyAgICBmbG9hdCByYWRpdXMgPSByKCku
dmFsdWUodGhpcyk7CisKKyAgICBpZiAocmFkaXVzIDw9IDApCisgICAgICAgIHJldHVybjsKKwor
ICAgIHBhdGguYWRkRWxsaXBzZShGbG9hdFJlY3QoY3goKS52YWx1ZSh0aGlzKSAtIHJhZGl1cywg
Y3koKS52YWx1ZSh0aGlzKSAtIHJhZGl1cywgcmFkaXVzICogMiwgcmFkaXVzICogMikpOwogfQog
CiBib29sIFNWR0NpcmNsZUVsZW1lbnQ6OnNlbGZIYXNSZWxhdGl2ZUxlbmd0aHMoKSBjb25zdApk
aWZmIC0tZ2l0IGEvV2ViQ29yZS9zdmcvU1ZHQ2lyY2xlRWxlbWVudC5oIGIvV2ViQ29yZS9zdmcv
U1ZHQ2lyY2xlRWxlbWVudC5oCmluZGV4IGRkMTE3OTIuLjRlYjkyNjIgMTAwNjQ0Ci0tLSBhL1dl
YkNvcmUvc3ZnL1NWR0NpcmNsZUVsZW1lbnQuaAorKysgYi9XZWJDb3JlL3N2Zy9TVkdDaXJjbGVF
bGVtZW50LmgKQEAgLTQ1LDcgKzQ1LDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICB2
aXJ0dWFsIHZvaWQgc3ZnQXR0cmlidXRlQ2hhbmdlZChjb25zdCBRdWFsaWZpZWROYW1lJik7CiAg
ICAgICAgIHZpcnR1YWwgdm9pZCBzeW5jaHJvbml6ZVByb3BlcnR5KGNvbnN0IFF1YWxpZmllZE5h
bWUmKTsKIAotICAgICAgICB2aXJ0dWFsIFBhdGggdG9QYXRoRGF0YSgpIGNvbnN0OworICAgICAg
ICB2aXJ0dWFsIHZvaWQgdG9QYXRoRGF0YShQYXRoJikgY29uc3Q7CiAKICAgICAgICAgdmlydHVh
bCBib29sIHNlbGZIYXNSZWxhdGl2ZUxlbmd0aHMoKSBjb25zdDsKIApkaWZmIC0tZ2l0IGEvV2Vi
Q29yZS9zdmcvU1ZHRWxsaXBzZUVsZW1lbnQuY3BwIGIvV2ViQ29yZS9zdmcvU1ZHRWxsaXBzZUVs
ZW1lbnQuY3BwCmluZGV4IDE2NzQzZWQuLjAxZWE2MTkgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvc3Zn
L1NWR0VsbGlwc2VFbGVtZW50LmNwcAorKysgYi9XZWJDb3JlL3N2Zy9TVkdFbGxpcHNlRWxlbWVu
dC5jcHAKQEAgLTEzMCwxMCArMTMwLDE3IEBAIHZvaWQgU1ZHRWxsaXBzZUVsZW1lbnQ6OnN5bmNo
cm9uaXplUHJvcGVydHkoY29uc3QgUXVhbGlmaWVkTmFtZSYgYXR0ck5hbWUpCiAgICAgICAgIHN5
bmNocm9uaXplRXh0ZXJuYWxSZXNvdXJjZXNSZXF1aXJlZCgpOwogfQogCi1QYXRoIFNWR0VsbGlw
c2VFbGVtZW50Ojp0b1BhdGhEYXRhKCkgY29uc3QKK3ZvaWQgU1ZHRWxsaXBzZUVsZW1lbnQ6OnRv
UGF0aERhdGEoUGF0aCYgcGF0aCkgY29uc3QKIHsKLSAgICByZXR1cm4gUGF0aDo6Y3JlYXRlRWxs
aXBzZShGbG9hdFBvaW50KGN4KCkudmFsdWUodGhpcyksIGN5KCkudmFsdWUodGhpcykpLAotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcngoKS52YWx1ZSh0aGlzKSwg
cnkoKS52YWx1ZSh0aGlzKSk7CisgICAgZmxvYXQgcmFkaXVzWCA9IHJ4KCkudmFsdWUodGhpcyk7
CisgICAgaWYgKHJhZGl1c1ggPD0gMCkKKyAgICAgICAgcmV0dXJuOworCisgICAgZmxvYXQgcmFk
aXVzWSA9IHJ5KCkudmFsdWUodGhpcyk7CisgICAgaWYgKHJhZGl1c1kgPD0gMCkKKyAgICAgICAg
cmV0dXJuOworCisgICAgcGF0aC5hZGRFbGxpcHNlKEZsb2F0UmVjdChjeCgpLnZhbHVlKHRoaXMp
IC0gcmFkaXVzWCwgY3koKS52YWx1ZSh0aGlzKSAtIHJhZGl1c1ksIHJhZGl1c1ggKiAyLCByYWRp
dXNZICogMikpOwogfQogIAogYm9vbCBTVkdFbGxpcHNlRWxlbWVudDo6c2VsZkhhc1JlbGF0aXZl
TGVuZ3RocygpIGNvbnN0CmRpZmYgLS1naXQgYS9XZWJDb3JlL3N2Zy9TVkdFbGxpcHNlRWxlbWVu
dC5oIGIvV2ViQ29yZS9zdmcvU1ZHRWxsaXBzZUVsZW1lbnQuaAppbmRleCBiZWU4MTVjLi5jYWQz
MjllIDEwMDY0NAotLS0gYS9XZWJDb3JlL3N2Zy9TVkdFbGxpcHNlRWxlbWVudC5oCisrKyBiL1dl
YkNvcmUvc3ZnL1NWR0VsbGlwc2VFbGVtZW50LmgKQEAgLTQ1LDcgKzQ1LDcgQEAgbmFtZXNwYWNl
IFdlYkNvcmUgewogICAgICAgICB2aXJ0dWFsIHZvaWQgc3ZnQXR0cmlidXRlQ2hhbmdlZChjb25z
dCBRdWFsaWZpZWROYW1lJik7CiAgICAgICAgIHZpcnR1YWwgdm9pZCBzeW5jaHJvbml6ZVByb3Bl
cnR5KGNvbnN0IFF1YWxpZmllZE5hbWUmKTsKIAotICAgICAgICB2aXJ0dWFsIFBhdGggdG9QYXRo
RGF0YSgpIGNvbnN0OworICAgICAgICB2aXJ0dWFsIHZvaWQgdG9QYXRoRGF0YShQYXRoJikgY29u
c3Q7CiAKICAgICAgICAgdmlydHVhbCBib29sIHNlbGZIYXNSZWxhdGl2ZUxlbmd0aHMoKSBjb25z
dDsKIApkaWZmIC0tZ2l0IGEvV2ViQ29yZS9zdmcvU1ZHTGluZUVsZW1lbnQuY3BwIGIvV2ViQ29y
ZS9zdmcvU1ZHTGluZUVsZW1lbnQuY3BwCmluZGV4IDIyOWRmYTkuLjhhMDgzNWUgMTAwNjQ0Ci0t
LSBhL1dlYkNvcmUvc3ZnL1NWR0xpbmVFbGVtZW50LmNwcAorKysgYi9XZWJDb3JlL3N2Zy9TVkdM
aW5lRWxlbWVudC5jcHAKQEAgLTEyNiwxMCArMTI2LDEwIEBAIHZvaWQgU1ZHTGluZUVsZW1lbnQ6
OnN5bmNocm9uaXplUHJvcGVydHkoY29uc3QgUXVhbGlmaWVkTmFtZSYgYXR0ck5hbWUpCiAgICAg
ICAgIHN5bmNocm9uaXplRXh0ZXJuYWxSZXNvdXJjZXNSZXF1aXJlZCgpOwogfQogCi1QYXRoIFNW
R0xpbmVFbGVtZW50Ojp0b1BhdGhEYXRhKCkgY29uc3QKK3ZvaWQgU1ZHTGluZUVsZW1lbnQ6OnRv
UGF0aERhdGEoUGF0aCYgcGF0aCkgY29uc3QKIHsKLSAgICByZXR1cm4gUGF0aDo6Y3JlYXRlTGlu
ZShGbG9hdFBvaW50KHgxKCkudmFsdWUodGhpcyksIHkxKCkudmFsdWUodGhpcykpLAotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIEZsb2F0UG9pbnQoeDIoKS52YWx1ZSh0aGlzKSwgeTIoKS52
YWx1ZSh0aGlzKSkpOworICAgIHBhdGgubW92ZVRvKEZsb2F0UG9pbnQoeDEoKS52YWx1ZSh0aGlz
KSwgeTEoKS52YWx1ZSh0aGlzKSkpOworICAgIHBhdGguYWRkTGluZVRvKEZsb2F0UG9pbnQoeDIo
KS52YWx1ZSh0aGlzKSwgeTIoKS52YWx1ZSh0aGlzKSkpOwogfQogCiBib29sIFNWR0xpbmVFbGVt
ZW50OjpzZWxmSGFzUmVsYXRpdmVMZW5ndGhzKCkgY29uc3QKZGlmZiAtLWdpdCBhL1dlYkNvcmUv
c3ZnL1NWR0xpbmVFbGVtZW50LmggYi9XZWJDb3JlL3N2Zy9TVkdMaW5lRWxlbWVudC5oCmluZGV4
IDIxMDA3ZjAuLjU1YTI2OGMgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvc3ZnL1NWR0xpbmVFbGVtZW50
LmgKKysrIGIvV2ViQ29yZS9zdmcvU1ZHTGluZUVsZW1lbnQuaApAQCAtNDcsNyArNDcsNyBAQCBu
YW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIHZpcnR1YWwgdm9pZCBzdmdBdHRyaWJ1dGVDaGFu
Z2VkKGNvbnN0IFF1YWxpZmllZE5hbWUmKTsKICAgICAgICAgdmlydHVhbCB2b2lkIHN5bmNocm9u
aXplUHJvcGVydHkoY29uc3QgUXVhbGlmaWVkTmFtZSYpOwogCi0gICAgICAgIHZpcnR1YWwgUGF0
aCB0b1BhdGhEYXRhKCkgY29uc3Q7CisgICAgICAgIHZpcnR1YWwgdm9pZCB0b1BhdGhEYXRhKFBh
dGgmKSBjb25zdDsKIAogICAgICAgICB2aXJ0dWFsIGJvb2wgc3VwcG9ydHNNYXJrZXJzKCkgY29u
c3QgeyByZXR1cm4gdHJ1ZTsgfQogCmRpZmYgLS1naXQgYS9XZWJDb3JlL3N2Zy9TVkdQYXRoRWxl
bWVudC5jcHAgYi9XZWJDb3JlL3N2Zy9TVkdQYXRoRWxlbWVudC5jcHAKaW5kZXggZDFmYzExYi4u
NmYyMjJlZCAxMDA2NDQKLS0tIGEvV2ViQ29yZS9zdmcvU1ZHUGF0aEVsZW1lbnQuY3BwCisrKyBi
L1dlYkNvcmUvc3ZnL1NWR1BhdGhFbGVtZW50LmNwcApAQCAtNTcsMTQgKzU3LDE4IEBAIFBhc3NS
ZWZQdHI8U1ZHUGF0aEVsZW1lbnQ+IFNWR1BhdGhFbGVtZW50OjpjcmVhdGUoY29uc3QgUXVhbGlm
aWVkTmFtZSYgdGFnTmFtZSwKIGZsb2F0IFNWR1BhdGhFbGVtZW50OjpnZXRUb3RhbExlbmd0aCgp
CiB7CiAgICAgLy8gRklYTUU6IHRoaXMgbWF5IHdpc2ggdG8gdXNlIHRoZSBwYXRoU2VnTGlzdCBp
bnN0ZWFkIG9mIHRoZSBwYXRoZGF0YSBpZiB0aGF0J3MgY2hlYXBlciB0byBidWlsZCAob3IgY2Fj
aGVkKQotICAgIHJldHVybiB0b1BhdGhEYXRhKCkubGVuZ3RoKCk7CisgICAgUGF0aCBwYXRoOwor
ICAgIHRvUGF0aERhdGEocGF0aCk7CisgICAgcmV0dXJuIHBhdGgubGVuZ3RoKCk7CiB9CiAKIEZs
b2F0UG9pbnQgU1ZHUGF0aEVsZW1lbnQ6OmdldFBvaW50QXRMZW5ndGgoZmxvYXQgbGVuZ3RoKQog
ewogICAgIC8vIEZJWE1FOiB0aGlzIG1heSB3aXNoIHRvIHVzZSB0aGUgcGF0aFNlZ0xpc3QgaW5z
dGVhZCBvZiB0aGUgcGF0aGRhdGEgaWYgdGhhdCdzIGNoZWFwZXIgdG8gYnVpbGQgKG9yIGNhY2hl
ZCkKICAgICBib29sIG9rID0gZmFsc2U7Ci0gICAgcmV0dXJuIHRvUGF0aERhdGEoKS5wb2ludEF0
TGVuZ3RoKGxlbmd0aCwgb2spOworICAgIFBhdGggcGF0aDsKKyAgICB0b1BhdGhEYXRhKHBhdGgp
OworICAgIHJldHVybiBwYXRoLnBvaW50QXRMZW5ndGgobGVuZ3RoLCBvayk7CiB9CiAKIHVuc2ln
bmVkIGxvbmcgU1ZHUGF0aEVsZW1lbnQ6OmdldFBhdGhTZWdBdExlbmd0aChmbG9hdCBsZW5ndGgp
CkBAIC0yNjIsMTIgKzI2NiwxMCBAQCBTVkdQYXRoU2VnTGlzdCogU1ZHUGF0aEVsZW1lbnQ6OmFu
aW1hdGVkTm9ybWFsaXplZFBhdGhTZWdMaXN0KCkgY29uc3QKICAgICByZXR1cm4gMDsKIH0KIAot
UGF0aCBTVkdQYXRoRWxlbWVudDo6dG9QYXRoRGF0YSgpIGNvbnN0Cit2b2lkIFNWR1BhdGhFbGVt
ZW50Ojp0b1BhdGhEYXRhKFBhdGgmIHBhdGgpIGNvbnN0CiB7Ci0gICAgUGF0aCByZXN1bHQ7CiAg
ICAgU1ZHUGF0aFBhcnNlckZhY3RvcnkqIGZhY3RvcnkgPSBTVkdQYXRoUGFyc2VyRmFjdG9yeTo6
c2VsZigpOwotICAgIGZhY3RvcnktPmJ1aWxkUGF0aEZyb21TVkdQYXRoU2VnTGlzdChwYXRoU2Vn
TGlzdCgpLCByZXN1bHQpOwotICAgIHJldHVybiByZXN1bHQ7CisgICAgZmFjdG9yeS0+YnVpbGRQ
YXRoRnJvbVNWR1BhdGhTZWdMaXN0KHBhdGhTZWdMaXN0KCksIHBhdGgpOwogfQogCiB9CmRpZmYg
LS1naXQgYS9XZWJDb3JlL3N2Zy9TVkdQYXRoRWxlbWVudC5oIGIvV2ViQ29yZS9zdmcvU1ZHUGF0
aEVsZW1lbnQuaAppbmRleCBjYzRlN2JkLi4zOTQ5ODNkIDEwMDY0NAotLS0gYS9XZWJDb3JlL3N2
Zy9TVkdQYXRoRWxlbWVudC5oCisrKyBiL1dlYkNvcmUvc3ZnL1NWR1BhdGhFbGVtZW50LmgKQEAg
LTg5LDcgKzg5LDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICB2aXJ0dWFsIFNWR1Bh
dGhTZWdMaXN0KiBhbmltYXRlZFBhdGhTZWdMaXN0KCkgY29uc3Q7CiAgICAgICAgIHZpcnR1YWwg
U1ZHUGF0aFNlZ0xpc3QqIGFuaW1hdGVkTm9ybWFsaXplZFBhdGhTZWdMaXN0KCkgY29uc3Q7CiAK
LSAgICAgICAgdmlydHVhbCBQYXRoIHRvUGF0aERhdGEoKSBjb25zdDsKKyAgICAgICAgdmlydHVh
bCB2b2lkIHRvUGF0aERhdGEoUGF0aCYpIGNvbnN0OwogCiAgICAgcHJpdmF0ZToKICAgICAgICAg
U1ZHUGF0aEVsZW1lbnQoY29uc3QgUXVhbGlmaWVkTmFtZSYsIERvY3VtZW50Kik7CmRpZmYgLS1n
aXQgYS9XZWJDb3JlL3N2Zy9TVkdQb2x5Z29uRWxlbWVudC5jcHAgYi9XZWJDb3JlL3N2Zy9TVkdQ
b2x5Z29uRWxlbWVudC5jcHAKaW5kZXggNTdlMmQ1My4uNTI0Y2QyZiAxMDA2NDQKLS0tIGEvV2Vi
Q29yZS9zdmcvU1ZHUG9seWdvbkVsZW1lbnQuY3BwCisrKyBiL1dlYkNvcmUvc3ZnL1NWR1BvbHln
b25FbGVtZW50LmNwcApAQCAtMzcsMjIgKzM3LDE5IEBAIFBhc3NSZWZQdHI8U1ZHUG9seWdvbkVs
ZW1lbnQ+IFNWR1BvbHlnb25FbGVtZW50OjpjcmVhdGUoY29uc3QgUXVhbGlmaWVkTmFtZSYgdGFn
CiAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBTVkdQb2x5Z29uRWxlbWVudCh0YWdOYW1lLCBkb2N1
bWVudCkpOwogfQogCi1QYXRoIFNWR1BvbHlnb25FbGVtZW50Ojp0b1BhdGhEYXRhKCkgY29uc3QK
K3ZvaWQgU1ZHUG9seWdvbkVsZW1lbnQ6OnRvUGF0aERhdGEoUGF0aCYgcGF0aCkgY29uc3QKIHsK
LSAgICBQYXRoIHBvbHlEYXRhOwotCiAgICAgaW50IGxlbiA9IHBvaW50cygpLT5udW1iZXJPZkl0
ZW1zKCk7CiAgICAgaWYgKGxlbiA8IDEpCi0gICAgICAgIHJldHVybiBwb2x5RGF0YTsKKyAgICAg
ICAgcmV0dXJuOwogICAgIAogICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAwOwotICAgIHBvbHlEYXRh
Lm1vdmVUbyhwb2ludHMoKS0+Z2V0SXRlbSgwLCBlYykpOworICAgIHBhdGgubW92ZVRvKHBvaW50
cygpLT5nZXRJdGVtKDAsIGVjKSk7CiAKICAgICBmb3IgKGludCBpID0gMTsgaSA8IGxlbjsgKytp
KQotICAgICAgICBwb2x5RGF0YS5hZGRMaW5lVG8ocG9pbnRzKCktPmdldEl0ZW0oaSwgZWMpKTsK
KyAgICAgICAgcGF0aC5hZGRMaW5lVG8ocG9pbnRzKCktPmdldEl0ZW0oaSwgZWMpKTsKIAotICAg
IHBvbHlEYXRhLmNsb3NlU3VicGF0aCgpOwotICAgIHJldHVybiBwb2x5RGF0YTsKKyAgICBwYXRo
LmNsb3NlU3VicGF0aCgpOwogfQogCiB9CmRpZmYgLS1naXQgYS9XZWJDb3JlL3N2Zy9TVkdQb2x5
Z29uRWxlbWVudC5oIGIvV2ViQ29yZS9zdmcvU1ZHUG9seWdvbkVsZW1lbnQuaAppbmRleCA3YTVi
ZGE4Li41Yzg4ZDExIDEwMDY0NAotLS0gYS9XZWJDb3JlL3N2Zy9TVkdQb2x5Z29uRWxlbWVudC5o
CisrKyBiL1dlYkNvcmUvc3ZnL1NWR1BvbHlnb25FbGVtZW50LmgKQEAgLTMzLDcgKzMzLDcgQEAg
bmFtZXNwYWNlIFdlYkNvcmUgewogICAgIHByaXZhdGU6CiAgICAgICAgIFNWR1BvbHlnb25FbGVt
ZW50KGNvbnN0IFF1YWxpZmllZE5hbWUmLCBEb2N1bWVudCopOwogCi0gICAgICAgIHZpcnR1YWwg
UGF0aCB0b1BhdGhEYXRhKCkgY29uc3Q7CisgICAgICAgIHZpcnR1YWwgdm9pZCB0b1BhdGhEYXRh
KFBhdGgmKSBjb25zdDsKICAgICB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1n
aXQgYS9XZWJDb3JlL3N2Zy9TVkdQb2x5bGluZUVsZW1lbnQuY3BwIGIvV2ViQ29yZS9zdmcvU1ZH
UG9seWxpbmVFbGVtZW50LmNwcAppbmRleCA3ZWM4NDMxLi5lOTRlYzg0IDEwMDY0NAotLS0gYS9X
ZWJDb3JlL3N2Zy9TVkdQb2x5bGluZUVsZW1lbnQuY3BwCisrKyBiL1dlYkNvcmUvc3ZnL1NWR1Bv
bHlsaW5lRWxlbWVudC5jcHAKQEAgLTM3LDIxICszNywxNyBAQCBQYXNzUmVmUHRyPFNWR1BvbHls
aW5lRWxlbWVudD4gU1ZHUG9seWxpbmVFbGVtZW50OjpjcmVhdGUoY29uc3QgUXVhbGlmaWVkTmFt
ZSYgdAogICAgIHJldHVybiBhZG9wdFJlZihuZXcgU1ZHUG9seWxpbmVFbGVtZW50KHRhZ05hbWUs
IGRvY3VtZW50KSk7CiB9CiAKLVBhdGggU1ZHUG9seWxpbmVFbGVtZW50Ojp0b1BhdGhEYXRhKCkg
Y29uc3QKK3ZvaWQgU1ZHUG9seWxpbmVFbGVtZW50Ojp0b1BhdGhEYXRhKFBhdGgmIHBhdGgpIGNv
bnN0CiB7Ci0gICAgUGF0aCBwb2x5RGF0YTsKLQogICAgIGludCBsZW4gPSBwb2ludHMoKS0+bnVt
YmVyT2ZJdGVtcygpOwogICAgIGlmIChsZW4gPCAxKQotICAgICAgICByZXR1cm4gcG9seURhdGE7
CisgICAgICAgIHJldHVybjsKIAogICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAwOwotICAgIHBvbHlE
YXRhLm1vdmVUbyhwb2ludHMoKS0+Z2V0SXRlbSgwLCBlYykpOworICAgIHBhdGgubW92ZVRvKHBv
aW50cygpLT5nZXRJdGVtKDAsIGVjKSk7CiAKICAgICBmb3IgKGludCBpID0gMTsgaSA8IGxlbjsg
KytpKQotICAgICAgICBwb2x5RGF0YS5hZGRMaW5lVG8ocG9pbnRzKCktPmdldEl0ZW0oaSwgZWMp
KTsKLSAgICAKLSAgICByZXR1cm4gcG9seURhdGE7CisgICAgICAgIHBhdGguYWRkTGluZVRvKHBv
aW50cygpLT5nZXRJdGVtKGksIGVjKSk7CiB9CiAKIH0KZGlmZiAtLWdpdCBhL1dlYkNvcmUvc3Zn
L1NWR1BvbHlsaW5lRWxlbWVudC5oIGIvV2ViQ29yZS9zdmcvU1ZHUG9seWxpbmVFbGVtZW50LmgK
aW5kZXggZDNmZTU1NS4uZGZjZmNkYSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9zdmcvU1ZHUG9seWxp
bmVFbGVtZW50LmgKKysrIGIvV2ViQ29yZS9zdmcvU1ZHUG9seWxpbmVFbGVtZW50LmgKQEAgLTMz
LDcgKzMzLDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgIHByaXZhdGU6CiAgICAgICAgIFNW
R1BvbHlsaW5lRWxlbWVudChjb25zdCBRdWFsaWZpZWROYW1lJiwgRG9jdW1lbnQqKTsKIAotICAg
ICAgICB2aXJ0dWFsIFBhdGggdG9QYXRoRGF0YSgpIGNvbnN0OworICAgICAgICB2aXJ0dWFsIHZv
aWQgdG9QYXRoRGF0YShQYXRoJikgY29uc3Q7CiAgICAgfTsKIAogfSAvLyBuYW1lc3BhY2UgV2Vi
Q29yZQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9zdmcvU1ZHUmVjdEVsZW1lbnQuY3BwIGIvV2ViQ29y
ZS9zdmcvU1ZHUmVjdEVsZW1lbnQuY3BwCmluZGV4IDliNjgzMGUuLjhlNTVjZDAgMTAwNjQ0Ci0t
LSBhL1dlYkNvcmUvc3ZnL1NWR1JlY3RFbGVtZW50LmNwcAorKysgYi9XZWJDb3JlL3N2Zy9TVkdS
ZWN0RWxlbWVudC5jcHAKQEAgLTE0NywxOSArMTQ3LDM1IEBAIHZvaWQgU1ZHUmVjdEVsZW1lbnQ6
OnN5bmNocm9uaXplUHJvcGVydHkoY29uc3QgUXVhbGlmaWVkTmFtZSYgYXR0ck5hbWUpCiAgICAg
ICAgIHN5bmNocm9uaXplRXh0ZXJuYWxSZXNvdXJjZXNSZXF1aXJlZCgpOwogfQogCi1QYXRoIFNW
R1JlY3RFbGVtZW50Ojp0b1BhdGhEYXRhKCkgY29uc3QKK3ZvaWQgU1ZHUmVjdEVsZW1lbnQ6OnRv
UGF0aERhdGEoUGF0aCYgcGF0aCkgY29uc3QKIHsKLSAgICBGbG9hdFJlY3QgcmVjdCh4KCkudmFs
dWUodGhpcyksIHkoKS52YWx1ZSh0aGlzKSwgd2lkdGgoKS52YWx1ZSh0aGlzKSwgaGVpZ2h0KCku
dmFsdWUodGhpcykpOworICAgIGZsb2F0IHdpZHRoVmFsdWUgPSB3aWR0aCgpLnZhbHVlKHRoaXMp
OworICAgIGlmICh3aWR0aFZhbHVlIDw9IDApCisgICAgICAgIHJldHVybjsKKworICAgIGZsb2F0
IGhlaWdodFZhbHVlID0gaGVpZ2h0KCkudmFsdWUodGhpcyk7CisgICAgaWYgKGhlaWdodFZhbHVl
IDw9IDApCisgICAgICAgIHJldHVybjsKKworICAgIGZsb2F0IHhWYWx1ZSA9IHgoKS52YWx1ZSh0
aGlzKTsKKyAgICBmbG9hdCB5VmFsdWUgPSB5KCkudmFsdWUodGhpcyk7CisKKyAgICBGbG9hdFJl
Y3QgcmVjdCh4VmFsdWUsIHlWYWx1ZSwgd2lkdGhWYWx1ZSwgaGVpZ2h0VmFsdWUpOwogCiAgICAg
Ym9vbCBoYXNSeCA9IGhhc0F0dHJpYnV0ZShTVkdOYW1lczo6cnhBdHRyKTsKICAgICBib29sIGhh
c1J5ID0gaGFzQXR0cmlidXRlKFNWR05hbWVzOjpyeUF0dHIpOwogICAgIGlmIChoYXNSeCB8fCBo
YXNSeSkgewotICAgICAgICBmbG9hdCBfcnggPSBoYXNSeCA/IHJ4KCkudmFsdWUodGhpcykgOiBy
eSgpLnZhbHVlKHRoaXMpOwotICAgICAgICBmbG9hdCBfcnkgPSBoYXNSeSA/IHJ5KCkudmFsdWUo
dGhpcykgOiByeCgpLnZhbHVlKHRoaXMpOwotICAgICAgICByZXR1cm4gUGF0aDo6Y3JlYXRlUm91
bmRlZFJlY3RhbmdsZShyZWN0LCBGbG9hdFNpemUoX3J4LCBfcnkpKTsKKyAgICAgICAgZmxvYXQg
cnhWYWx1ZSA9IHJ4KCkudmFsdWUodGhpcyk7CisgICAgICAgIGZsb2F0IHJ5VmFsdWUgPSByeSgp
LnZhbHVlKHRoaXMpOworICAgICAgICBpZiAoIWhhc1J4KQorICAgICAgICAgICAgcnhWYWx1ZSA9
IHJ5VmFsdWU7CisgICAgICAgIGVsc2UgaWYgKCFoYXNSeSkKKyAgICAgICAgICAgIHJ5VmFsdWUg
PSByeFZhbHVlOworICAgICAgICBwYXRoLmFkZFJvdW5kZWRSZWN0YW5nbGUocmVjdCwgRmxvYXRT
aXplKHJ4VmFsdWUsIHJ5VmFsdWUpKTsKKyAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIHJl
dHVybiBQYXRoOjpjcmVhdGVSZWN0YW5nbGUocmVjdCk7CisgICAgcGF0aC5hZGRSZWN0KHJlY3Qp
OwogfQogCiBib29sIFNWR1JlY3RFbGVtZW50OjpzZWxmSGFzUmVsYXRpdmVMZW5ndGhzKCkgY29u
c3QKZGlmZiAtLWdpdCBhL1dlYkNvcmUvc3ZnL1NWR1JlY3RFbGVtZW50LmggYi9XZWJDb3JlL3N2
Zy9TVkdSZWN0RWxlbWVudC5oCmluZGV4IDM4MjA3OGQuLjY2ODM2NmIgMTAwNjQ0Ci0tLSBhL1dl
YkNvcmUvc3ZnL1NWR1JlY3RFbGVtZW50LmgKKysrIGIvV2ViQ29yZS9zdmcvU1ZHUmVjdEVsZW1l
bnQuaApAQCAtNDUsNyArNDUsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIHZpcnR1
YWwgdm9pZCBzdmdBdHRyaWJ1dGVDaGFuZ2VkKGNvbnN0IFF1YWxpZmllZE5hbWUmKTsKICAgICAg
ICAgdmlydHVhbCB2b2lkIHN5bmNocm9uaXplUHJvcGVydHkoY29uc3QgUXVhbGlmaWVkTmFtZSYp
OwogCi0gICAgICAgIHZpcnR1YWwgUGF0aCB0b1BhdGhEYXRhKCkgY29uc3Q7CisgICAgICAgIHZp
cnR1YWwgdm9pZCB0b1BhdGhEYXRhKFBhdGgmKSBjb25zdDsKIAogICAgICAgICB2aXJ0dWFsIGJv
b2wgc2VsZkhhc1JlbGF0aXZlTGVuZ3RocygpIGNvbnN0OwogCmRpZmYgLS1naXQgYS9XZWJDb3Jl
L3N2Zy9TVkdTdHlsZWRUcmFuc2Zvcm1hYmxlRWxlbWVudC5jcHAgYi9XZWJDb3JlL3N2Zy9TVkdT
dHlsZWRUcmFuc2Zvcm1hYmxlRWxlbWVudC5jcHAKaW5kZXggNDQxOTQ0My4uOWIzNDIwMyAxMDA2
NDQKLS0tIGEvV2ViQ29yZS9zdmcvU1ZHU3R5bGVkVHJhbnNmb3JtYWJsZUVsZW1lbnQuY3BwCisr
KyBiL1dlYkNvcmUvc3ZnL1NWR1N0eWxlZFRyYW5zZm9ybWFibGVFbGVtZW50LmNwcApAQCAtMTEx
LDEyICsxMTEsMTEgQEAgUmVuZGVyT2JqZWN0KiBTVkdTdHlsZWRUcmFuc2Zvcm1hYmxlRWxlbWVu
dDo6Y3JlYXRlUmVuZGVyZXIoUmVuZGVyQXJlbmEqIGFyZW5hLAogICAgIHJldHVybiBuZXcgKGFy
ZW5hKSBSZW5kZXJTVkdQYXRoKHRoaXMpOwogfQogCi1QYXRoIFNWR1N0eWxlZFRyYW5zZm9ybWFi
bGVFbGVtZW50Ojp0b0NsaXBQYXRoKCkgY29uc3QKK3ZvaWQgU1ZHU3R5bGVkVHJhbnNmb3JtYWJs
ZUVsZW1lbnQ6OnRvQ2xpcFBhdGgoUGF0aCYgcGF0aCkgY29uc3QKIHsKLSAgICBQYXRoIHBhdGhE
YXRhID0gdG9QYXRoRGF0YSgpOworICAgIHRvUGF0aERhdGEocGF0aCk7CiAgICAgLy8gRklYTUU6
IEhvdyBkbyB3ZSBrbm93IHRoZSBlbGVtZW50IGhhcyBkb25lIGEgbGF5b3V0PwotICAgIHBhdGhE
YXRhLnRyYW5zZm9ybShhbmltYXRlZExvY2FsVHJhbnNmb3JtKCkpOwotICAgIHJldHVybiBwYXRo
RGF0YTsKKyAgICBwYXRoLnRyYW5zZm9ybShhbmltYXRlZExvY2FsVHJhbnNmb3JtKCkpOwogfQog
CiB9CmRpZmYgLS1naXQgYS9XZWJDb3JlL3N2Zy9TVkdTdHlsZWRUcmFuc2Zvcm1hYmxlRWxlbWVu
dC5oIGIvV2ViQ29yZS9zdmcvU1ZHU3R5bGVkVHJhbnNmb3JtYWJsZUVsZW1lbnQuaAppbmRleCAy
OTBmN2Y4Li41MzQ5Y2ZhIDEwMDY0NAotLS0gYS9XZWJDb3JlL3N2Zy9TVkdTdHlsZWRUcmFuc2Zv
cm1hYmxlRWxlbWVudC5oCisrKyBiL1dlYkNvcmUvc3ZnL1NWR1N0eWxlZFRyYW5zZm9ybWFibGVF
bGVtZW50LmgKQEAgLTQ5LDggKzQ5LDggQEAgcHVibGljOgogICAgIGJvb2wgaXNLbm93bkF0dHJp
YnV0ZShjb25zdCBRdWFsaWZpZWROYW1lJik7CiAKICAgICAvLyAiYmFzZSBjbGFzcyIgbWV0aG9k
cyBmb3IgYWxsIHRoZSBlbGVtZW50cyB3aGljaCByZW5kZXIgYXMgcGF0aHMKLSAgICB2aXJ0dWFs
IFBhdGggdG9QYXRoRGF0YSgpIGNvbnN0IHsgcmV0dXJuIFBhdGgoKTsgfQotICAgIHZpcnR1YWwg
UGF0aCB0b0NsaXBQYXRoKCkgY29uc3Q7CisgICAgdmlydHVhbCB2b2lkIHRvUGF0aERhdGEoUGF0
aCYpIGNvbnN0IHsgfQorICAgIHZpcnR1YWwgdm9pZCB0b0NsaXBQYXRoKFBhdGgmKSBjb25zdDsK
ICAgICB2aXJ0dWFsIFJlbmRlck9iamVjdCogY3JlYXRlUmVuZGVyZXIoUmVuZGVyQXJlbmEqLCBS
ZW5kZXJTdHlsZSopOwogCiBwcm90ZWN0ZWQ6CmRpZmYgLS1naXQgYS9XZWJDb3JlL3N2Zy9TVkdV
c2VFbGVtZW50LmNwcCBiL1dlYkNvcmUvc3ZnL1NWR1VzZUVsZW1lbnQuY3BwCmluZGV4IDc4MmVm
YTguLjM0ZTdkODggMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvc3ZnL1NWR1VzZUVsZW1lbnQuY3BwCisr
KyBiL1dlYkNvcmUvc3ZnL1NWR1VzZUVsZW1lbnQuY3BwCkBAIC02MjQsMjUgKzYyNCwyMiBAQCBz
dGF0aWMgYm9vbCBpc0RpcmVjdFJlZmVyZW5jZShOb2RlKiBuKQogICAgICAgICAgICBuLT5oYXNU
YWdOYW1lKFNWR05hbWVzOjp0ZXh0VGFnKTsKIH0KIAotUGF0aCBTVkdVc2VFbGVtZW50Ojp0b0Ns
aXBQYXRoKCkgY29uc3QKK3ZvaWQgU1ZHVXNlRWxlbWVudDo6dG9DbGlwUGF0aChQYXRoJiBwYXRo
KSBjb25zdAogewogICAgIE5vZGUqIG4gPSBtX3RhcmdldEVsZW1lbnRJbnN0YW5jZSA/IG1fdGFy
Z2V0RWxlbWVudEluc3RhbmNlLT5zaGFkb3dUcmVlRWxlbWVudCgpIDogMDsKICAgICBpZiAoIW4p
Ci0gICAgICAgIHJldHVybiBQYXRoKCk7CisgICAgICAgIHJldHVybjsKIAogICAgIGlmIChuLT5p
c1NWR0VsZW1lbnQoKSAmJiBzdGF0aWNfY2FzdDxTVkdFbGVtZW50Kj4obiktPmlzU3R5bGVkVHJh
bnNmb3JtYWJsZSgpKSB7CiAgICAgICAgIGlmICghaXNEaXJlY3RSZWZlcmVuY2UobikpCiAgICAg
ICAgICAgICAvLyBTcGVjOiBJbmRpcmVjdCByZWZlcmVuY2VzIGFyZSBhbiBlcnJvciAoMTQuMy41
KQogICAgICAgICAgICAgZG9jdW1lbnQoKS0+YWNjZXNzU1ZHRXh0ZW5zaW9ucygpLT5yZXBvcnRF
cnJvcigiTm90IGFsbG93ZWQgdG8gdXNlIGluZGlyZWN0IHJlZmVyZW5jZSBpbiA8Y2xpcC1wYXRo
PiIpOwogICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgIFBhdGggY2xpcFBhdGggPSBzdGF0aWNf
Y2FzdDxTVkdTdHlsZWRUcmFuc2Zvcm1hYmxlRWxlbWVudCo+KG4pLT50b0NsaXBQYXRoKCk7Ci0g
ICAgICAgICAgICBjbGlwUGF0aC50cmFuc2xhdGUoRmxvYXRTaXplKHgoKS52YWx1ZSh0aGlzKSwg
eSgpLnZhbHVlKHRoaXMpKSk7Ci0gICAgICAgICAgICBjbGlwUGF0aC50cmFuc2Zvcm0oYW5pbWF0
ZWRMb2NhbFRyYW5zZm9ybSgpKTsKLSAgICAgICAgICAgIHJldHVybiBjbGlwUGF0aDsKKyAgICAg
ICAgICAgIHN0YXRpY19jYXN0PFNWR1N0eWxlZFRyYW5zZm9ybWFibGVFbGVtZW50Kj4obiktPnRv
Q2xpcFBhdGgocGF0aCk7CisgICAgICAgICAgICBwYXRoLnRyYW5zbGF0ZShGbG9hdFNpemUoeCgp
LnZhbHVlKHRoaXMpLCB5KCkudmFsdWUodGhpcykpKTsKKyAgICAgICAgICAgIHBhdGgudHJhbnNm
b3JtKGFuaW1hdGVkTG9jYWxUcmFuc2Zvcm0oKSk7CiAgICAgICAgIH0KICAgICB9Ci0KLSAgICBy
ZXR1cm4gUGF0aCgpOwogfQogCiBSZW5kZXJPYmplY3QqIFNWR1VzZUVsZW1lbnQ6OnJlbmRlcmVy
Q2xpcENoaWxkKCkgY29uc3QKZGlmZiAtLWdpdCBhL1dlYkNvcmUvc3ZnL1NWR1VzZUVsZW1lbnQu
aCBiL1dlYkNvcmUvc3ZnL1NWR1VzZUVsZW1lbnQuaAppbmRleCA5MzY2ZDI1Li5iOGJhNzFkIDEw
MDY0NAotLS0gYS9XZWJDb3JlL3N2Zy9TVkdVc2VFbGVtZW50LmgKKysrIGIvV2ViQ29yZS9zdmcv
U1ZHVXNlRWxlbWVudC5oCkBAIC02Nyw3ICs2Nyw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAg
ICAgICAgdmlydHVhbCB2b2lkIGF0dGFjaCgpOwogICAgICAgICB2aXJ0dWFsIHZvaWQgZGV0YWNo
KCk7CiAKLSAgICAgICAgdmlydHVhbCBQYXRoIHRvQ2xpcFBhdGgoKSBjb25zdDsKKyAgICAgICAg
dmlydHVhbCB2b2lkIHRvQ2xpcFBhdGgoUGF0aCYpIGNvbnN0OwogCiAgICAgICAgIHN0YXRpYyB2
b2lkIHJlbW92ZURpc2FsbG93ZWRFbGVtZW50c0Zyb21TdWJ0cmVlKE5vZGUqIGVsZW1lbnQpOwog
Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>70370</attachid>
            <date>2010-10-09 13:37:42 -0700</date>
            <delta_ts>2010-10-11 05:29:47 -0700</delta_ts>
            <desc>Proposed patch v5</desc>
            <filename>bug-46052-v5.diff</filename>
            <type>text/plain</type>
            <size>48165</size>
            <attacher name="Andreas Kling">kling</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ2hhbmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXgg
NWFmZTA2Ni4uZDBmYzM2MCAxMDA2NDQKLS0tIGEvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvV2Vi
Q29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSw4MiBAQAorMjAxMC0xMC0wOSAgQW5kcmVhcyBLbGlu
ZyAgPGtsaW5nQHdlYmtpdC5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BT
ISkuCisKKyAgICAgICAgU1ZHOiBMZXZlcmFnZSBwbGF0Zm9ybSdzIFBhdGg6OmFkZEVsbGlwc2Uo
KSBpbiBQYXRoOjpjcmVhdGVFbGxpcHNlKCkKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTQ2MDUyCisKKyAgICAgICAgUmVtb3ZlIHRoZSBzdGF0aWMgUGF0
aDo6Y3JlYXRlKiBtZXRob2RzIGFuZCB1c2UgUGF0aDo6YWRkKiB3aGVyZXZlcgorICAgICAgICB0
aGVzZSB3ZXJlIHVzZWQuCisKKyAgICAgICAgKiBXZWJDb3JlLm9yZGVyOgorICAgICAgICAqIG1h
dGhtbC9SZW5kZXJNYXRoTUxSb290LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlck1hdGhN
TFJvb3Q6OnBhaW50KToKKyAgICAgICAgKiBtYXRobWwvUmVuZGVyTWF0aE1MU3F1YXJlUm9vdC5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJNYXRoTUxTcXVhcmVSb290OjpwYWludCk6Cisg
ICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0LmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6YWRkUm91bmRlZFJlY3RDbGlwKToKKyAgICAgICAg
KFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6Y2xpcE91dFJvdW5kZWRSZWN0KToKKyAgICAgICAg
KiBwbGF0Zm9ybS9ncmFwaGljcy9QYXRoLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OnBhdGhMZW5n
dGhBcHBsaWVyRnVuY3Rpb24pOgorICAgICAgICAoV2ViQ29yZTo6UGF0aDo6YWRkUm91bmRlZFJl
Y3RhbmdsZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvUGF0aC5oOgorICAgICAgICAq
IHBsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0NvbnRleHRTaGFkb3dDYWlyby5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpDb250ZXh0U2hhZG93OjpkcmF3UmVjdFNoYWRvd1dpdGhvdXRUaWxpbmcpOgor
ICAgICAgICAoV2ViQ29yZTo6Q29udGV4dFNoYWRvdzo6ZHJhd1JlY3RTaGFkb3cpOgorICAgICAg
ICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0dyYXBoaWNzQ29udGV4dENhaXJvLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6ZHJhd0ZvY3VzUmluZyk6CisgICAgICAg
IChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OmRyYXdUaWxlZFNoYWRvdyk6CisgICAgICAgIChX
ZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OmZpbGxSb3VuZGVkUmVjdCk6CisgICAgICAgICogcGxh
dGZvcm0vZ3JhcGhpY3MvY2cvR3JhcGhpY3NDb250ZXh0Q0cuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6R3JhcGhpY3NDb250ZXh0OjpmaWxsUm91bmRlZFJlY3QpOgorICAgICAgICAqIHBsYXRmb3Jt
L2dyYXBoaWNzL3F0L0dyYXBoaWNzQ29udGV4dFF0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Okdy
YXBoaWNzQ29udGV4dDo6ZmlsbFJvdW5kZWRSZWN0KToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVu
ZGVyQm94TW9kZWxPYmplY3QuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQm94TW9kZWxP
YmplY3Q6OnBhaW50Qm9yZGVyKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJveE1vZGVsT2Jq
ZWN0OjpwYWludEJveFNoYWRvdyk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckVtYmVkZGVk
T2JqZWN0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckVtYmVkZGVkT2JqZWN0OjpnZXRS
ZXBsYWNlbWVudFRleHRHZW9tZXRyeSk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlclNWR1Jl
c291cmNlQ2xpcHBlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJTVkdSZXNvdXJjZUNs
aXBwZXI6OnBhdGhPbmx5Q2xpcHBpbmcpOgorICAgICAgICAqIHJlbmRlcmluZy9zdmcvUmVuZGVy
U1ZHUGF0aC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJTVkdQYXRoOjpsYXlvdXQpOgor
ICAgICAgICAqIHJlbmRlcmluZy9zdmcvUmVuZGVyU1ZHVGV4dFBhdGguY3BwOgorICAgICAgICAo
V2ViQ29yZTo6UmVuZGVyU1ZHVGV4dFBhdGg6OmxheW91dFBhdGgpOgorICAgICAgICAqIHJlbmRl
cmluZy9zdmcvU1ZHSW5saW5lVGV4dEJveC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTVkdJbmxp
bmVUZXh0Qm94OjpwYWludERlY29yYXRpb25XaXRoU3R5bGUpOgorICAgICAgICAqIHN2Zy9TVkdB
bmltYXRlTW90aW9uRWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTVkdBbmltYXRlTW90
aW9uRWxlbWVudDo6YW5pbWF0aW9uUGF0aCk6CisgICAgICAgICogc3ZnL1NWR0NpcmNsZUVsZW1l
bnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U1ZHQ2lyY2xlRWxlbWVudDo6dG9QYXRoRGF0YSk6
CisgICAgICAgICogc3ZnL1NWR0NpcmNsZUVsZW1lbnQuaDoKKyAgICAgICAgKiBzdmcvU1ZHRWxs
aXBzZUVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U1ZHRWxsaXBzZUVsZW1lbnQ6OnRv
UGF0aERhdGEpOgorICAgICAgICAqIHN2Zy9TVkdFbGxpcHNlRWxlbWVudC5oOgorICAgICAgICAq
IHN2Zy9TVkdMaW5lRWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTVkdMaW5lRWxlbWVu
dDo6dG9QYXRoRGF0YSk6CisgICAgICAgICogc3ZnL1NWR0xpbmVFbGVtZW50Lmg6CisgICAgICAg
ICogc3ZnL1NWR1BhdGhFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR1BhdGhFbGVt
ZW50OjpnZXRUb3RhbExlbmd0aCk6CisgICAgICAgIChXZWJDb3JlOjpTVkdQYXRoRWxlbWVudDo6
Z2V0UG9pbnRBdExlbmd0aCk6CisgICAgICAgIChXZWJDb3JlOjpTVkdQYXRoRWxlbWVudDo6dG9Q
YXRoRGF0YSk6CisgICAgICAgICogc3ZnL1NWR1BhdGhFbGVtZW50Lmg6CisgICAgICAgICogc3Zn
L1NWR1BvbHlnb25FbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR1BvbHlnb25FbGVt
ZW50Ojp0b1BhdGhEYXRhKToKKyAgICAgICAgKiBzdmcvU1ZHUG9seWdvbkVsZW1lbnQuaDoKKyAg
ICAgICAgKiBzdmcvU1ZHUG9seWxpbmVFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNW
R1BvbHlsaW5lRWxlbWVudDo6dG9QYXRoRGF0YSk6CisgICAgICAgICogc3ZnL1NWR1BvbHlsaW5l
RWxlbWVudC5oOgorICAgICAgICAqIHN2Zy9TVkdSZWN0RWxlbWVudC5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpTVkdSZWN0RWxlbWVudDo6dG9QYXRoRGF0YSk6CisgICAgICAgICogc3ZnL1NWR1Jl
Y3RFbGVtZW50Lmg6CisgICAgICAgICogc3ZnL1NWR1N0eWxlZFRyYW5zZm9ybWFibGVFbGVtZW50
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR1N0eWxlZFRyYW5zZm9ybWFibGVFbGVtZW50Ojp0
b0NsaXBQYXRoKToKKyAgICAgICAgKiBzdmcvU1ZHU3R5bGVkVHJhbnNmb3JtYWJsZUVsZW1lbnQu
aDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR1N0eWxlZFRyYW5zZm9ybWFibGVFbGVtZW50Ojp0b1Bh
dGhEYXRhKToKKyAgICAgICAgKiBzdmcvU1ZHVXNlRWxlbWVudC5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpTVkdVc2VFbGVtZW50Ojp0b0NsaXBQYXRoKToKKyAgICAgICAgKiBzdmcvU1ZHVXNlRWxl
bWVudC5oOgorCiAyMDEwLTEwLTA5ICBDYXJsb3MgR2FyY2lhIENhbXBvcyAgPGNnYXJjaWFAaWdh
bGlhLmNvbT4KIAogICAgICAgICBSZXZpZXdlZCBieSBNYXJ0aW4gUm9iaW5zb24uCmRpZmYgLS1n
aXQgYS9XZWJDb3JlL1dlYkNvcmUub3JkZXIgYi9XZWJDb3JlL1dlYkNvcmUub3JkZXIKaW5kZXgg
N2ViOTgwYy4uNzJjNzJiMSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9XZWJDb3JlLm9yZGVyCisrKyBi
L1dlYkNvcmUvV2ViQ29yZS5vcmRlcgpAQCAtMTA4MDQsNyArMTA4MDQsNiBAQCBfX1pOSzdXZWJD
b3JlMTRHZW5lcmF0ZWRJbWFnZTRzaXplRXYKIF9fWk5LN1dlYkNvcmUxNEdlbmVyYXRlZEltYWdl
MTZoYXNSZWxhdGl2ZVdpZHRoRXYKIF9fWk5LN1dlYkNvcmUxNEdlbmVyYXRlZEltYWdlMTdoYXNS
ZWxhdGl2ZUhlaWdodEV2CiBfX1pTdDVtZXJnZUlQTjdXZWJDb3JlMjBDU1NHcmFkaWVudENvbG9y
U3RvcEVTMl9TMl9QRmJSS1MxX1M0X0VFVDFfVF9TOF9UMF9TOV9TN19UMl8KLV9fWk43V2ViQ29y
ZTRQYXRoMTVjcmVhdGVSZWN0YW5nbGVFUktOU185RmxvYXRSZWN0RQogX19aTjdXZWJDb3JlMTVH
cmFwaGljc0NvbnRleHQxMXNldEZpbGxSdWxlRU5TXzhXaW5kUnVsZUUKIF9fWk43V2ViQ29yZTE4
SlNBdWRpb0NvbnN0cnVjdG9yRDFFdgogX19aVGhuOF9ON1dlYkNvcmUxNkhUTUxBdWRpb0VsZW1l
bnREMEV2CkBAIC0xODE2OSw3ICsxODE2OCw2IEBAIF9fWk43V2ViQ29yZTE4UmVuZGVyU1ZHQ29u
dGFpbmVyMTJjYWxjVmlld3BvcnRFdgogX19aTks3V2ViQ29yZTE4UmVuZGVyU1ZHQ29udGFpbmVy
MTNzZWxmV2lsbFBhaW50RXYKIF9fWk43V2ViQ29yZTMxUmVuZGVyU1ZHVHJhbnNmb3JtYWJsZUNv
bnRhaW5lcjIzY2FsY3VsYXRlTG9jYWxUcmFuc2Zvcm1FdgogX19aTks3V2ViQ29yZTE3U1ZHRWxs
aXBzZUVsZW1lbnQxMHRvUGF0aERhdGFFdgotX19aTjdXZWJDb3JlNFBhdGgxM2NyZWF0ZUVsbGlw
c2VFUktOU18xMEZsb2F0UG9pbnRFZmYKIF9fWk5LN1dlYkNvcmUxM1JlbmRlclNWR1Jvb3QxMGxp
bmVIZWlnaHRFYmIKIF9fWk5LN1dlYkNvcmUxM1JlbmRlclNWR1Jvb3QxNmJhc2VsaW5lUG9zaXRp
b25FYmIKIF9fWk5LN1dlYkNvcmUxNlNWR1N0eWxlZEVsZW1lbnQxN2hhc1JlbGF0aXZlVmFsdWVz
RXYKQEAgLTE4NTUwLDcgKzE4NTQ4LDYgQEAgX19aTks3V2ViQ29yZTExU1ZHR0VsZW1lbnQyOGlz
U2hhZG93VHJlZUNvbnRhaW5lckVsZW1lbnRFdgogX19aTjdXZWJDb3JlMTJTVkdUcmFuc2Zvcm1D
MUVSS05TXzE1QWZmaW5lVHJhbnNmb3JtRQogX19aTjdXZWJDb3JlMTJTVkdUcmFuc2Zvcm1DMkVS
S05TXzE1QWZmaW5lVHJhbnNmb3JtRQogX19aTks3V2ViQ29yZTE0U1ZHTGluZUVsZW1lbnQxMHRv
UGF0aERhdGFFdgotX19aTjdXZWJDb3JlNFBhdGgxMGNyZWF0ZUxpbmVFUktOU18xMEZsb2F0UG9p
bnRFUzNfCiBfX1pON1dlYkNvcmUzMEJvdW5kaW5nUmVjdFN0cm9rZVN0eWxlQXBwbGllcjExc3Ry
b2tlU3R5bGVFUE5TXzE1R3JhcGhpY3NDb250ZXh0RQogX19aTjdXZWJDb3JlMjVhcHBseVN0cm9r
ZVN0eWxlVG9Db250ZXh0RVBOU18xNUdyYXBoaWNzQ29udGV4dEVQS05TXzExUmVuZGVyU3R5bGVF
UEtOU18xMlJlbmRlck9iamVjdEUKIF9fWk43V2ViQ29yZTE0U1ZHUmVuZGVyU3R5bGUyMGNzc1By
aW1pdGl2ZVRvTGVuZ3RoRVBLTlNfMTJSZW5kZXJPYmplY3RFUE5TXzhDU1NWYWx1ZUVmCkBAIC0x
ODY2MSw3ICsxODY1OCw2IEBAIF9fWk43V2ViQ29yZTE2U1ZHQ2lyY2xlRWxlbWVudDE5c3ZnQXR0
cmlidXRlQ2hhbmdlZEVSS05TXzEzUXVhbGlmaWVkTmFtZUUKIF9fWk43V2ViQ29yZTE2U1ZHQ2ly
Y2xlRWxlbWVudDE5c3luY2hyb25pemVQcm9wZXJ0eUVSS05TXzEzUXVhbGlmaWVkTmFtZUUKIF9f
Wk5LN1dlYkNvcmUxNlNWR0NpcmNsZUVsZW1lbnQ3aXNWYWxpZEV2CiBfX1pOSzdXZWJDb3JlMTZT
VkdDaXJjbGVFbGVtZW50MTB0b1BhdGhEYXRhRXYKLV9fWk43V2ViQ29yZTRQYXRoMTJjcmVhdGVD
aXJjbGVFUktOU18xMEZsb2F0UG9pbnRFZgogX19aTjdXZWJDb3JlTDM2Y2FsY3VsYXRlVGV4dEFu
Y2hvclNoaWZ0Rm9yVGV4dENodW5rRVJOU18xMlNWR1RleHRDaHVua0VOU18xMUVUZXh0QW5jaG9y
RQogX19aTjdXZWJDb3JlTDI2Y3VtbXVsYXRlZFdpZHRoT2ZUZXh0Q2h1bmtFUk5TXzEyU1ZHVGV4
dENodW5rRQogX19aTjdXZWJDb3JlTDM0Y3VtbXVsYXRlZFdpZHRoT3JIZWlnaHRPZlRleHRDaHVu
a0VSTlNfMTJTVkdUZXh0Q2h1bmtFYgpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9tYXRobWwvUmVuZGVy
TWF0aE1MUm9vdC5jcHAgYi9XZWJDb3JlL21hdGhtbC9SZW5kZXJNYXRoTUxSb290LmNwcAppbmRl
eCBkYTMwM2M5Li45OWI1ZGM2IDEwMDY0NAotLS0gYS9XZWJDb3JlL21hdGhtbC9SZW5kZXJNYXRo
TUxSb290LmNwcAorKysgYi9XZWJDb3JlL21hdGhtbC9SZW5kZXJNYXRoTUxSb290LmNwcApAQCAt
MTkwLDkgKzE5MCw5IEBAIHZvaWQgUmVuZGVyTWF0aE1MUm9vdDo6cGFpbnQoUGFpbnRJbmZvJiBp
bmZvLCBpbnQgdHgsIGludCB0eSkKICAgICBpbmZvLmNvbnRleHQtPnNldExpbmVDYXAoU3F1YXJl
Q2FwKTsKICAgICAKICAgICBQYXRoIGxpbmU7Ci0gICAgCi0gICAgbGluZSA9IGxpbmUuY3JlYXRl
TGluZShib3R0b21MZWZ0LCB0b3BMZWZ0KTsKLSAgICAKKyAgICBsaW5lLm1vdmVUbyhib3R0b21M
ZWZ0KTsKKyAgICBsaW5lLmFkZExpbmVUbyh0b3BMZWZ0KTsKKwogICAgIGluZm8uY29udGV4dC0+
YmVnaW5QYXRoKCk7CiAgICAgaW5mby5jb250ZXh0LT5hZGRQYXRoKGxpbmUpOwogICAgIGluZm8u
Y29udGV4dC0+c3Ryb2tlUGF0aCgpOwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9tYXRobWwvUmVuZGVy
TWF0aE1MU3F1YXJlUm9vdC5jcHAgYi9XZWJDb3JlL21hdGhtbC9SZW5kZXJNYXRoTUxTcXVhcmVS
b290LmNwcAppbmRleCA4NmFkZDdhLi5kMmU3MDQ5IDEwMDY0NAotLS0gYS9XZWJDb3JlL21hdGht
bC9SZW5kZXJNYXRoTUxTcXVhcmVSb290LmNwcAorKysgYi9XZWJDb3JlL21hdGhtbC9SZW5kZXJN
YXRoTUxTcXVhcmVSb290LmNwcApAQCAtMTU2LDggKzE1Niw4IEBAIHZvaWQgUmVuZGVyTWF0aE1M
U3F1YXJlUm9vdDo6cGFpbnQoUGFpbnRJbmZvJiBpbmZvLCBpbnQgdHgsIGludCB0eSkKICAgICBp
bmZvLmNvbnRleHQtPnNldExpbmVDYXAoU3F1YXJlQ2FwKTsKICAgICAKICAgICBQYXRoIGxpbmU7
Ci0gICAgCi0gICAgbGluZSA9IGxpbmUuY3JlYXRlTGluZShib3R0b21MZWZ0LCB0b3BMZWZ0KTsK
KyAgICBsaW5lLm1vdmVUbyhib3R0b21MZWZ0KTsKKyAgICBsaW5lLmFkZExpbmVUbyh0b3BMZWZ0
KTsKICAgICAKICAgICBpbmZvLmNvbnRleHQtPmJlZ2luUGF0aCgpOwogICAgIGluZm8uY29udGV4
dC0+YWRkUGF0aChsaW5lKTsKZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
R3JhcGhpY3NDb250ZXh0LmNwcCBiL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3ND
b250ZXh0LmNwcAppbmRleCAyYzk0YmVjLi5iZjYyMDYwIDEwMDY0NAotLS0gYS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dC5jcHAKKysrIGIvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQuY3BwCkBAIC01MDAsNyArNTAwLDkgQEAgdm9pZCBH
cmFwaGljc0NvbnRleHQ6OmFkZFJvdW5kZWRSZWN0Q2xpcChjb25zdCBJbnRSZWN0JiByZWN0LCBj
b25zdCBJbnRTaXplJiB0b3AKICAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQogICAgICAgICBy
ZXR1cm47CiAKLSAgICBjbGlwKFBhdGg6OmNyZWF0ZVJvdW5kZWRSZWN0YW5nbGUocmVjdCwgdG9w
TGVmdCwgdG9wUmlnaHQsIGJvdHRvbUxlZnQsIGJvdHRvbVJpZ2h0KSk7CisgICAgUGF0aCBwYXRo
OworICAgIHBhdGguYWRkUm91bmRlZFJlY3RhbmdsZShyZWN0LCB0b3BMZWZ0LCB0b3BSaWdodCwg
Ym90dG9tTGVmdCwgYm90dG9tUmlnaHQpOworICAgIGNsaXAocGF0aCk7CiB9CiAKIHZvaWQgR3Jh
cGhpY3NDb250ZXh0OjpjbGlwT3V0Um91bmRlZFJlY3QoY29uc3QgSW50UmVjdCYgcmVjdCwgY29u
c3QgSW50U2l6ZSYgdG9wTGVmdCwgY29uc3QgSW50U2l6ZSYgdG9wUmlnaHQsCkBAIC01MDksNyAr
NTExLDkgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6OmNsaXBPdXRSb3VuZGVkUmVjdChjb25zdCBJ
bnRSZWN0JiByZWN0LCBjb25zdCBJbnRTaXplJiB0b3AKICAgICBpZiAocGFpbnRpbmdEaXNhYmxl
ZCgpKQogICAgICAgICByZXR1cm47CiAKLSAgICBjbGlwT3V0KFBhdGg6OmNyZWF0ZVJvdW5kZWRS
ZWN0YW5nbGUocmVjdCwgdG9wTGVmdCwgdG9wUmlnaHQsIGJvdHRvbUxlZnQsIGJvdHRvbVJpZ2h0
KSk7CisgICAgUGF0aCBwYXRoOworICAgIHBhdGguYWRkUm91bmRlZFJlY3RhbmdsZShyZWN0LCB0
b3BMZWZ0LCB0b3BSaWdodCwgYm90dG9tTGVmdCwgYm90dG9tUmlnaHQpOworICAgIGNsaXBPdXQo
cGF0aCk7CiB9CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpjbGlwVG9JbWFnZUJ1ZmZlcihJbWFn
ZUJ1ZmZlciogYnVmZmVyLCBjb25zdCBGbG9hdFJlY3QmIHJlY3QpCmRpZmYgLS1naXQgYS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL1BhdGguY3BwIGIvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9QYXRoLmNwcAppbmRleCA0ZTJkZTUzLi5hNWY0N2U3IDEwMDY0NAotLS0gYS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL1BhdGguY3BwCisrKyBiL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
UGF0aC5jcHAKQEAgLTM1LDggKzM1LDkgQEAKICNpbmNsdWRlIDxtYXRoLmg+CiAjaW5jbHVkZSA8
d3RmL01hdGhFeHRyYXMuaD4KIAotc3RhdGljIGNvbnN0IGZsb2F0IFFVQVJURVIgPSAwLjU1MmY7
IC8vIGFwcHJveGltYXRpb24gb2YgY29udHJvbCBwb2ludCBwb3NpdGlvbnMgb24gYSBiZXppZXIK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHRvIHNpbXVsYXRlIGEgcXVhcnRlciBv
ZiBhIGNpcmNsZS4KKy8vIEFwcHJveGltYXRpb24gb2YgY29udHJvbCBwb2ludCBwb3NpdGlvbnMg
b24gYSBiZXppZXIgdG8gc2ltdWxhdGUgYSBxdWFydGVyIG9mIGEgY2lyY2xlLgorc3RhdGljIGNv
bnN0IGZsb2F0IGdDaXJjbGVDb250cm9sUG9pbnQgPSAwLjU1MjsKKwogbmFtZXNwYWNlIFdlYkNv
cmUgewogCiAjaWYgIVBMQVRGT1JNKE9QRU5WRykgJiYgIVBMQVRGT1JNKFFUKQpAQCAtNDcsNyAr
NDgsNyBAQCBzdGF0aWMgdm9pZCBwYXRoTGVuZ3RoQXBwbGllckZ1bmN0aW9uKHZvaWQqIGluZm8s
IGNvbnN0IFBhdGhFbGVtZW50KiBlbGVtZW50KQogICAgICAgICByZXR1cm47CiAgICAgdHJhdmVy
c2FsU3RhdGUubV9wcmV2aW91cyA9IHRyYXZlcnNhbFN0YXRlLm1fY3VycmVudDsKICAgICBGbG9h
dFBvaW50KiBwb2ludHMgPSBlbGVtZW50LT5wb2ludHM7Ci0gICAgZmxvYXQgc2VnbWVudExlbmd0
aCA9IDAuMGY7CisgICAgZmxvYXQgc2VnbWVudExlbmd0aCA9IDA7CiAgICAgc3dpdGNoIChlbGVt
ZW50LT50eXBlKSB7CiAgICAgICAgIGNhc2UgUGF0aEVsZW1lbnRNb3ZlVG9Qb2ludDoKICAgICAg
ICAgICAgIHNlZ21lbnRMZW5ndGggPSB0cmF2ZXJzYWxTdGF0ZS5tb3ZlVG8ocG9pbnRzWzBdKTsK
QEAgLTc2LDcgKzc3LDcgQEAgc3RhdGljIHZvaWQgcGF0aExlbmd0aEFwcGxpZXJGdW5jdGlvbih2
b2lkKiBpbmZvLCBjb25zdCBQYXRoRWxlbWVudCogZWxlbWVudCkKICAgICAgICAgICAgIGZsb2F0
IG9mZnNldCA9IHRyYXZlcnNhbFN0YXRlLm1fZGVzaXJlZExlbmd0aCAtIHRyYXZlcnNhbFN0YXRl
Lm1fdG90YWxMZW5ndGg7CiAgICAgICAgICAgICB0cmF2ZXJzYWxTdGF0ZS5tX2N1cnJlbnQubW92
ZShvZmZzZXQgKiBjb3NmKHNsb3BlKSwgb2Zmc2V0ICogc2luZihzbG9wZSkpOwogICAgICAgICB9
IGVsc2UgewotICAgICAgICAgICAgc3RhdGljIGNvbnN0IGZsb2F0IHJhZDJkZWcgPSAxODAuMGYg
LyBwaUZsb2F0OworICAgICAgICAgICAgc3RhdGljIGNvbnN0IGZsb2F0IHJhZDJkZWcgPSAxODAu
MCAvIHBpRmxvYXQ7CiAgICAgICAgICAgICB0cmF2ZXJzYWxTdGF0ZS5tX25vcm1hbEFuZ2xlID0g
c2xvcGUgKiByYWQyZGVnOwogICAgICAgICB9CiAKQEAgLTExMCwxNjcgKzExMSw4MyBAQCBmbG9h
dCBQYXRoOjpub3JtYWxBbmdsZUF0TGVuZ3RoKGZsb2F0IGxlbmd0aCwgYm9vbCYgb2spCiB9CiAj
ZW5kaWYKIAotUGF0aCBQYXRoOjpjcmVhdGVSb3VuZGVkUmVjdGFuZ2xlKGNvbnN0IEZsb2F0UmVj
dCYgcmVjdGFuZ2xlLCBjb25zdCBGbG9hdFNpemUmIHJvdW5kaW5nUmFkaWkpCit2b2lkIFBhdGg6
OmFkZFJvdW5kZWRSZWN0YW5nbGUoY29uc3QgRmxvYXRSZWN0JiByZWN0YW5nbGUsIGNvbnN0IEZs
b2F0U2l6ZSYgcm91bmRpbmdSYWRpaSkKIHsKLSAgICBQYXRoIHBhdGg7CiAgICAgZmxvYXQgeCA9
IHJlY3RhbmdsZS54KCk7CiAgICAgZmxvYXQgeSA9IHJlY3RhbmdsZS55KCk7CiAgICAgZmxvYXQg
d2lkdGggPSByZWN0YW5nbGUud2lkdGgoKTsKICAgICBmbG9hdCBoZWlnaHQgPSByZWN0YW5nbGUu
aGVpZ2h0KCk7CiAgICAgZmxvYXQgcnggPSByb3VuZGluZ1JhZGlpLndpZHRoKCk7CiAgICAgZmxv
YXQgcnkgPSByb3VuZGluZ1JhZGlpLmhlaWdodCgpOwotICAgIGlmICh3aWR0aCA8PSAwLjBmIHx8
IGhlaWdodCA8PSAwLjBmKQotICAgICAgICByZXR1cm4gcGF0aDsKKyAgICBpZiAod2lkdGggPD0g
MCB8fCBoZWlnaHQgPD0gMCkKKyAgICAgICAgcmV0dXJuOwogCiAgICAgZmxvYXQgZHggPSByeCwg
ZHkgPSByeTsKICAgICAvLyBJZiByeCBpcyBncmVhdGVyIHRoYW4gaGFsZiBvZiB0aGUgd2lkdGgg
b2YgdGhlIHJlY3RhbmdsZQogICAgIC8vIHRoZW4gc2V0IHJ4IHRvIGhhbGYgb2YgdGhlIHdpZHRo
IChyZXF1aXJlZCBpbiBTVkcgc3BlYykKLSAgICBpZiAoZHggPiB3aWR0aCAqIDAuNWYpCi0gICAg
ICAgIGR4ID0gd2lkdGggKiAwLjVmOworICAgIGlmIChkeCA+IHdpZHRoICogMC41KQorICAgICAg
ICBkeCA9IHdpZHRoICogMC41OwogCiAgICAgLy8gSWYgcnkgaXMgZ3JlYXRlciB0aGFuIGhhbGYg
b2YgdGhlIGhlaWdodCBvZiB0aGUgcmVjdGFuZ2xlCiAgICAgLy8gdGhlbiBzZXQgcnkgdG8gaGFs
ZiBvZiB0aGUgaGVpZ2h0IChyZXF1aXJlZCBpbiBTVkcgc3BlYykKLSAgICBpZiAoZHkgPiBoZWln
aHQgKiAwLjVmKQotICAgICAgICBkeSA9IGhlaWdodCAqIDAuNWY7CisgICAgaWYgKGR5ID4gaGVp
Z2h0ICogMC41KQorICAgICAgICBkeSA9IGhlaWdodCAqIDAuNTsKIAotICAgIHBhdGgubW92ZVRv
KEZsb2F0UG9pbnQoeCArIGR4LCB5KSk7CisgICAgbW92ZVRvKEZsb2F0UG9pbnQoeCArIGR4LCB5
KSk7CiAKLSAgICBpZiAoZHggPCB3aWR0aCAqIDAuNWYpCi0gICAgICAgIHBhdGguYWRkTGluZVRv
KEZsb2F0UG9pbnQoeCArIHdpZHRoIC0gcngsIHkpKTsKKyAgICBpZiAoZHggPCB3aWR0aCAqIDAu
NSkKKyAgICAgICAgYWRkTGluZVRvKEZsb2F0UG9pbnQoeCArIHdpZHRoIC0gcngsIHkpKTsKIAot
ICAgIHBhdGguYWRkQmV6aWVyQ3VydmVUbyhGbG9hdFBvaW50KHggKyB3aWR0aCAtIGR4ICogKDEg
LSBRVUFSVEVSKSwgeSksIEZsb2F0UG9pbnQoeCArIHdpZHRoLCB5ICsgZHkgKiAoMSAtIFFVQVJU
RVIpKSwgRmxvYXRQb2ludCh4ICsgd2lkdGgsIHkgKyBkeSkpOworICAgIGFkZEJlemllckN1cnZl
VG8oRmxvYXRQb2ludCh4ICsgd2lkdGggLSBkeCAqICgxIC0gZ0NpcmNsZUNvbnRyb2xQb2ludCks
IHkpLCBGbG9hdFBvaW50KHggKyB3aWR0aCwgeSArIGR5ICogKDEgLSBnQ2lyY2xlQ29udHJvbFBv
aW50KSksIEZsb2F0UG9pbnQoeCArIHdpZHRoLCB5ICsgZHkpKTsKIAogICAgIGlmIChkeSA8IGhl
aWdodCAqIDAuNSkKLSAgICAgICAgcGF0aC5hZGRMaW5lVG8oRmxvYXRQb2ludCh4ICsgd2lkdGgs
IHkgKyBoZWlnaHQgLSBkeSkpOworICAgICAgICBhZGRMaW5lVG8oRmxvYXRQb2ludCh4ICsgd2lk
dGgsIHkgKyBoZWlnaHQgLSBkeSkpOwogCi0gICAgcGF0aC5hZGRCZXppZXJDdXJ2ZVRvKEZsb2F0
UG9pbnQoeCArIHdpZHRoLCB5ICsgaGVpZ2h0IC0gZHkgKiAoMSAtIFFVQVJURVIpKSwgRmxvYXRQ
b2ludCh4ICsgd2lkdGggLSBkeCAqICgxIC0gUVVBUlRFUiksIHkgKyBoZWlnaHQpLCBGbG9hdFBv
aW50KHggKyB3aWR0aCAtIGR4LCB5ICsgaGVpZ2h0KSk7CisgICAgYWRkQmV6aWVyQ3VydmVUbyhG
bG9hdFBvaW50KHggKyB3aWR0aCwgeSArIGhlaWdodCAtIGR5ICogKDEgLSBnQ2lyY2xlQ29udHJv
bFBvaW50KSksIEZsb2F0UG9pbnQoeCArIHdpZHRoIC0gZHggKiAoMSAtIGdDaXJjbGVDb250cm9s
UG9pbnQpLCB5ICsgaGVpZ2h0KSwgRmxvYXRQb2ludCh4ICsgd2lkdGggLSBkeCwgeSArIGhlaWdo
dCkpOwogCiAgICAgaWYgKGR4IDwgd2lkdGggKiAwLjUpCi0gICAgICAgIHBhdGguYWRkTGluZVRv
KEZsb2F0UG9pbnQoeCArIGR4LCB5ICsgaGVpZ2h0KSk7CisgICAgICAgIGFkZExpbmVUbyhGbG9h
dFBvaW50KHggKyBkeCwgeSArIGhlaWdodCkpOwogCi0gICAgcGF0aC5hZGRCZXppZXJDdXJ2ZVRv
KEZsb2F0UG9pbnQoeCArIGR4ICogKDEgLSBRVUFSVEVSKSwgeSArIGhlaWdodCksIEZsb2F0UG9p
bnQoeCwgeSArIGhlaWdodCAtIGR5ICogKDEgLSBRVUFSVEVSKSksIEZsb2F0UG9pbnQoeCwgeSAr
IGhlaWdodCAtIGR5KSk7CisgICAgYWRkQmV6aWVyQ3VydmVUbyhGbG9hdFBvaW50KHggKyBkeCAq
ICgxIC0gZ0NpcmNsZUNvbnRyb2xQb2ludCksIHkgKyBoZWlnaHQpLCBGbG9hdFBvaW50KHgsIHkg
KyBoZWlnaHQgLSBkeSAqICgxIC0gZ0NpcmNsZUNvbnRyb2xQb2ludCkpLCBGbG9hdFBvaW50KHgs
IHkgKyBoZWlnaHQgLSBkeSkpOwogCiAgICAgaWYgKGR5IDwgaGVpZ2h0ICogMC41KQotICAgICAg
ICBwYXRoLmFkZExpbmVUbyhGbG9hdFBvaW50KHgsIHkgKyBkeSkpOworICAgICAgICBhZGRMaW5l
VG8oRmxvYXRQb2ludCh4LCB5ICsgZHkpKTsKIAotICAgIHBhdGguYWRkQmV6aWVyQ3VydmVUbyhG
bG9hdFBvaW50KHgsIHkgKyBkeSAqICgxIC0gUVVBUlRFUikpLCBGbG9hdFBvaW50KHggKyBkeCAq
ICgxIC0gUVVBUlRFUiksIHkpLCBGbG9hdFBvaW50KHggKyBkeCwgeSkpOworICAgIGFkZEJlemll
ckN1cnZlVG8oRmxvYXRQb2ludCh4LCB5ICsgZHkgKiAoMSAtIGdDaXJjbGVDb250cm9sUG9pbnQp
KSwgRmxvYXRQb2ludCh4ICsgZHggKiAoMSAtIGdDaXJjbGVDb250cm9sUG9pbnQpLCB5KSwgRmxv
YXRQb2ludCh4ICsgZHgsIHkpKTsKIAotICAgIHBhdGguY2xvc2VTdWJwYXRoKCk7Ci0KLSAgICBy
ZXR1cm4gcGF0aDsKKyAgICBjbG9zZVN1YnBhdGgoKTsKIH0KIAotUGF0aCBQYXRoOjpjcmVhdGVS
b3VuZGVkUmVjdGFuZ2xlKGNvbnN0IEZsb2F0UmVjdCYgcmVjdGFuZ2xlLCBjb25zdCBGbG9hdFNp
emUmIHRvcExlZnRSYWRpdXMsIGNvbnN0IEZsb2F0U2l6ZSYgdG9wUmlnaHRSYWRpdXMsIGNvbnN0
IEZsb2F0U2l6ZSYgYm90dG9tTGVmdFJhZGl1cywgY29uc3QgRmxvYXRTaXplJiBib3R0b21SaWdo
dFJhZGl1cykKK3ZvaWQgUGF0aDo6YWRkUm91bmRlZFJlY3RhbmdsZShjb25zdCBGbG9hdFJlY3Qm
IHJlY3RhbmdsZSwgY29uc3QgRmxvYXRTaXplJiB0b3BMZWZ0UmFkaXVzLCBjb25zdCBGbG9hdFNp
emUmIHRvcFJpZ2h0UmFkaXVzLCBjb25zdCBGbG9hdFNpemUmIGJvdHRvbUxlZnRSYWRpdXMsIGNv
bnN0IEZsb2F0U2l6ZSYgYm90dG9tUmlnaHRSYWRpdXMpCiB7Ci0gICAgUGF0aCBwYXRoOwotCiAg
ICAgZmxvYXQgd2lkdGggPSByZWN0YW5nbGUud2lkdGgoKTsKICAgICBmbG9hdCBoZWlnaHQgPSBy
ZWN0YW5nbGUuaGVpZ2h0KCk7Ci0gICAgaWYgKHdpZHRoIDw9IDAuMCB8fCBoZWlnaHQgPD0gMC4w
KQotICAgICAgICByZXR1cm4gcGF0aDsKKyAgICBpZiAod2lkdGggPD0gMCB8fCBoZWlnaHQgPD0g
MCkKKyAgICAgICAgcmV0dXJuOwogCiAgICAgaWYgKHdpZHRoIDwgdG9wTGVmdFJhZGl1cy53aWR0
aCgpICsgdG9wUmlnaHRSYWRpdXMud2lkdGgoKQogICAgICAgICAgICAgfHwgd2lkdGggPCBib3R0
b21MZWZ0UmFkaXVzLndpZHRoKCkgKyBib3R0b21SaWdodFJhZGl1cy53aWR0aCgpCiAgICAgICAg
ICAgICB8fCBoZWlnaHQgPCB0b3BMZWZ0UmFkaXVzLmhlaWdodCgpICsgYm90dG9tTGVmdFJhZGl1
cy5oZWlnaHQoKQotICAgICAgICAgICAgfHwgaGVpZ2h0IDwgdG9wUmlnaHRSYWRpdXMuaGVpZ2h0
KCkgKyBib3R0b21SaWdodFJhZGl1cy5oZWlnaHQoKSkKKyAgICAgICAgICAgIHx8IGhlaWdodCA8
IHRvcFJpZ2h0UmFkaXVzLmhlaWdodCgpICsgYm90dG9tUmlnaHRSYWRpdXMuaGVpZ2h0KCkpIHsK
ICAgICAgICAgLy8gSWYgYWxsIHRoZSByYWRpaSBjYW5ub3QgYmUgYWNjb21tb2RhdGVkLCByZXR1
cm4gYSByZWN0LgotICAgICAgICByZXR1cm4gY3JlYXRlUmVjdGFuZ2xlKHJlY3RhbmdsZSk7Ci0K
LSAgICBmbG9hdCB4ID0gcmVjdGFuZ2xlLngoKTsKLSAgICBmbG9hdCB5ID0gcmVjdGFuZ2xlLnko
KTsKLQotICAgIHBhdGgubW92ZVRvKEZsb2F0UG9pbnQoeCArIHRvcExlZnRSYWRpdXMud2lkdGgo
KSwgeSkpOwotCi0gICAgcGF0aC5hZGRMaW5lVG8oRmxvYXRQb2ludCh4ICsgd2lkdGggLSB0b3BS
aWdodFJhZGl1cy53aWR0aCgpLCB5KSk7Ci0KLSAgICBwYXRoLmFkZEJlemllckN1cnZlVG8oRmxv
YXRQb2ludCh4ICsgd2lkdGggLSB0b3BSaWdodFJhZGl1cy53aWR0aCgpICogKDEgLSBRVUFSVEVS
KSwgeSksIEZsb2F0UG9pbnQoeCArIHdpZHRoLCB5ICsgdG9wUmlnaHRSYWRpdXMuaGVpZ2h0KCkg
KiAoMSAtIFFVQVJURVIpKSwgRmxvYXRQb2ludCh4ICsgd2lkdGgsIHkgKyB0b3BSaWdodFJhZGl1
cy5oZWlnaHQoKSkpOwotCi0gICAgcGF0aC5hZGRMaW5lVG8oRmxvYXRQb2ludCh4ICsgd2lkdGgs
IHkgKyBoZWlnaHQgLSBib3R0b21SaWdodFJhZGl1cy5oZWlnaHQoKSkpOwotCi0gICAgcGF0aC5h
ZGRCZXppZXJDdXJ2ZVRvKEZsb2F0UG9pbnQoeCArIHdpZHRoLCB5ICsgaGVpZ2h0IC0gYm90dG9t
UmlnaHRSYWRpdXMuaGVpZ2h0KCkgKiAoMSAtIFFVQVJURVIpKSwgRmxvYXRQb2ludCh4ICsgd2lk
dGggLSBib3R0b21SaWdodFJhZGl1cy53aWR0aCgpICogKDEgLSBRVUFSVEVSKSwgeSArIGhlaWdo
dCksIEZsb2F0UG9pbnQoeCArIHdpZHRoIC0gYm90dG9tUmlnaHRSYWRpdXMud2lkdGgoKSwgeSAr
IGhlaWdodCkpOwotCi0gICAgcGF0aC5hZGRMaW5lVG8oRmxvYXRQb2ludCh4ICsgYm90dG9tTGVm
dFJhZGl1cy53aWR0aCgpLCB5ICsgaGVpZ2h0KSk7Ci0KLSAgICBwYXRoLmFkZEJlemllckN1cnZl
VG8oRmxvYXRQb2ludCh4ICsgYm90dG9tTGVmdFJhZGl1cy53aWR0aCgpICogKDEgLSBRVUFSVEVS
KSwgeSArIGhlaWdodCksIEZsb2F0UG9pbnQoeCwgeSArIGhlaWdodCAtIGJvdHRvbUxlZnRSYWRp
dXMuaGVpZ2h0KCkgKiAoMSAtIFFVQVJURVIpKSwgRmxvYXRQb2ludCh4LCB5ICsgaGVpZ2h0IC0g
Ym90dG9tTGVmdFJhZGl1cy5oZWlnaHQoKSkpOwotCi0gICAgcGF0aC5hZGRMaW5lVG8oRmxvYXRQ
b2ludCh4LCB5ICsgdG9wTGVmdFJhZGl1cy5oZWlnaHQoKSkpOwotCi0gICAgcGF0aC5hZGRCZXpp
ZXJDdXJ2ZVRvKEZsb2F0UG9pbnQoeCwgeSArIHRvcExlZnRSYWRpdXMuaGVpZ2h0KCkgKiAoMSAt
IFFVQVJURVIpKSwgRmxvYXRQb2ludCh4ICsgdG9wTGVmdFJhZGl1cy53aWR0aCgpICogKDEgLSBR
VUFSVEVSKSwgeSksIEZsb2F0UG9pbnQoeCArIHRvcExlZnRSYWRpdXMud2lkdGgoKSwgeSkpOwot
Ci0gICAgcGF0aC5jbG9zZVN1YnBhdGgoKTsKLQotICAgIHJldHVybiBwYXRoOwotfQorICAgICAg
ICBhZGRSZWN0KHJlY3RhbmdsZSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CiAKLVBhdGggUGF0
aDo6Y3JlYXRlUmVjdGFuZ2xlKGNvbnN0IEZsb2F0UmVjdCYgcmVjdGFuZ2xlKQotewotICAgIFBh
dGggcGF0aDsKICAgICBmbG9hdCB4ID0gcmVjdGFuZ2xlLngoKTsKICAgICBmbG9hdCB5ID0gcmVj
dGFuZ2xlLnkoKTsKLSAgICBmbG9hdCB3aWR0aCA9IHJlY3RhbmdsZS53aWR0aCgpOwotICAgIGZs
b2F0IGhlaWdodCA9IHJlY3RhbmdsZS5oZWlnaHQoKTsKLSAgICBpZiAod2lkdGggPD0gMC4wZiB8
fCBoZWlnaHQgPD0gMC4wZikKLSAgICAgICAgcmV0dXJuIHBhdGg7Ci0gICAgCi0gICAgcGF0aC5t
b3ZlVG8oRmxvYXRQb2ludCh4LCB5KSk7Ci0gICAgcGF0aC5hZGRMaW5lVG8oRmxvYXRQb2ludCh4
ICsgd2lkdGgsIHkpKTsKLSAgICBwYXRoLmFkZExpbmVUbyhGbG9hdFBvaW50KHggKyB3aWR0aCwg
eSArIGhlaWdodCkpOwotICAgIHBhdGguYWRkTGluZVRvKEZsb2F0UG9pbnQoeCwgeSArIGhlaWdo
dCkpOwotICAgIHBhdGguY2xvc2VTdWJwYXRoKCk7Ci0KLSAgICByZXR1cm4gcGF0aDsKLX0KLQot
UGF0aCBQYXRoOjpjcmVhdGVFbGxpcHNlKGNvbnN0IEZsb2F0UG9pbnQmIGNlbnRlciwgZmxvYXQg
cngsIGZsb2F0IHJ5KQotewotICAgIGZsb2F0IGN4ID0gY2VudGVyLngoKTsKLSAgICBmbG9hdCBj
eSA9IGNlbnRlci55KCk7Ci0gICAgUGF0aCBwYXRoOwotICAgIGlmIChyeCA8PSAwLjBmIHx8IHJ5
IDw9IDAuMGYpCi0gICAgICAgIHJldHVybiBwYXRoOwotCi0gICAgZmxvYXQgeCA9IGN4OwotICAg
IGZsb2F0IHkgPSBjeTsKLQotICAgIHVuc2lnbmVkIHN0ZXAgPSAwLCBudW0gPSAxMDA7Ci0gICAg
Ym9vbCBydW5uaW5nID0gdHJ1ZTsKLSAgICB3aGlsZSAocnVubmluZykKLSAgICB7Ci0gICAgICAg
IGlmIChzdGVwID09IG51bSkKLSAgICAgICAgewotICAgICAgICAgICAgcnVubmluZyA9IGZhbHNl
OwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLQotICAgICAgICBmbG9hdCBhbmdsZSA9
IHN0YXRpY19jYXN0PGZsb2F0PihzdGVwKSAvIHN0YXRpY19jYXN0PGZsb2F0PihudW0pICogMi4w
ZiAqIHBpRmxvYXQ7Ci0gICAgICAgIHggPSBjeCArIGNvc2YoYW5nbGUpICogcng7Ci0gICAgICAg
IHkgPSBjeSArIHNpbmYoYW5nbGUpICogcnk7Ci0KLSAgICAgICAgc3RlcCsrOwotICAgICAgICBp
ZiAoc3RlcCA9PSAxKQotICAgICAgICAgICAgcGF0aC5tb3ZlVG8oRmxvYXRQb2ludCh4LCB5KSk7
Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIHBhdGguYWRkTGluZVRvKEZsb2F0UG9pbnQoeCwg
eSkpOwotICAgIH0KLQotICAgIHBhdGguY2xvc2VTdWJwYXRoKCk7Ci0KLSAgICByZXR1cm4gcGF0
aDsKLX0KLQotUGF0aCBQYXRoOjpjcmVhdGVDaXJjbGUoY29uc3QgRmxvYXRQb2ludCYgY2VudGVy
LCBmbG9hdCByKQotewotICAgIHJldHVybiBjcmVhdGVFbGxpcHNlKGNlbnRlciwgciwgcik7Ci19
Ci0KLVBhdGggUGF0aDo6Y3JlYXRlTGluZShjb25zdCBGbG9hdFBvaW50JiBzdGFydCwgY29uc3Qg
RmxvYXRQb2ludCYgZW5kKQotewotICAgIFBhdGggcGF0aDsKLQotICAgIHBhdGgubW92ZVRvKHN0
YXJ0KTsKLSAgICBwYXRoLmFkZExpbmVUbyhlbmQpOwogCi0gICAgcmV0dXJuIHBhdGg7CisgICAg
bW92ZVRvKEZsb2F0UG9pbnQoeCArIHRvcExlZnRSYWRpdXMud2lkdGgoKSwgeSkpOworICAgIGFk
ZExpbmVUbyhGbG9hdFBvaW50KHggKyB3aWR0aCAtIHRvcFJpZ2h0UmFkaXVzLndpZHRoKCksIHkp
KTsKKyAgICBhZGRCZXppZXJDdXJ2ZVRvKEZsb2F0UG9pbnQoeCArIHdpZHRoIC0gdG9wUmlnaHRS
YWRpdXMud2lkdGgoKSAqICgxIC0gZ0NpcmNsZUNvbnRyb2xQb2ludCksIHkpLCBGbG9hdFBvaW50
KHggKyB3aWR0aCwgeSArIHRvcFJpZ2h0UmFkaXVzLmhlaWdodCgpICogKDEgLSBnQ2lyY2xlQ29u
dHJvbFBvaW50KSksIEZsb2F0UG9pbnQoeCArIHdpZHRoLCB5ICsgdG9wUmlnaHRSYWRpdXMuaGVp
Z2h0KCkpKTsKKyAgICBhZGRMaW5lVG8oRmxvYXRQb2ludCh4ICsgd2lkdGgsIHkgKyBoZWlnaHQg
LSBib3R0b21SaWdodFJhZGl1cy5oZWlnaHQoKSkpOworICAgIGFkZEJlemllckN1cnZlVG8oRmxv
YXRQb2ludCh4ICsgd2lkdGgsIHkgKyBoZWlnaHQgLSBib3R0b21SaWdodFJhZGl1cy5oZWlnaHQo
KSAqICgxIC0gZ0NpcmNsZUNvbnRyb2xQb2ludCkpLCBGbG9hdFBvaW50KHggKyB3aWR0aCAtIGJv
dHRvbVJpZ2h0UmFkaXVzLndpZHRoKCkgKiAoMSAtIGdDaXJjbGVDb250cm9sUG9pbnQpLCB5ICsg
aGVpZ2h0KSwgRmxvYXRQb2ludCh4ICsgd2lkdGggLSBib3R0b21SaWdodFJhZGl1cy53aWR0aCgp
LCB5ICsgaGVpZ2h0KSk7CisgICAgYWRkTGluZVRvKEZsb2F0UG9pbnQoeCArIGJvdHRvbUxlZnRS
YWRpdXMud2lkdGgoKSwgeSArIGhlaWdodCkpOworICAgIGFkZEJlemllckN1cnZlVG8oRmxvYXRQ
b2ludCh4ICsgYm90dG9tTGVmdFJhZGl1cy53aWR0aCgpICogKDEgLSBnQ2lyY2xlQ29udHJvbFBv
aW50KSwgeSArIGhlaWdodCksIEZsb2F0UG9pbnQoeCwgeSArIGhlaWdodCAtIGJvdHRvbUxlZnRS
YWRpdXMuaGVpZ2h0KCkgKiAoMSAtIGdDaXJjbGVDb250cm9sUG9pbnQpKSwgRmxvYXRQb2ludCh4
LCB5ICsgaGVpZ2h0IC0gYm90dG9tTGVmdFJhZGl1cy5oZWlnaHQoKSkpOworICAgIGFkZExpbmVU
byhGbG9hdFBvaW50KHgsIHkgKyB0b3BMZWZ0UmFkaXVzLmhlaWdodCgpKSk7CisgICAgYWRkQmV6
aWVyQ3VydmVUbyhGbG9hdFBvaW50KHgsIHkgKyB0b3BMZWZ0UmFkaXVzLmhlaWdodCgpICogKDEg
LSBnQ2lyY2xlQ29udHJvbFBvaW50KSksIEZsb2F0UG9pbnQoeCArIHRvcExlZnRSYWRpdXMud2lk
dGgoKSAqICgxIC0gZ0NpcmNsZUNvbnRyb2xQb2ludCksIHkpLCBGbG9hdFBvaW50KHggKyB0b3BM
ZWZ0UmFkaXVzLndpZHRoKCksIHkpKTsKKworICAgIGNsb3NlU3VicGF0aCgpOwogfQogCiB9CmRp
ZmYgLS1naXQgYS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1BhdGguaCBiL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvUGF0aC5oCmluZGV4IDQzYmE4ODkuLjE2ZGRkYjEgMTAwNjQ0Ci0tLSBh
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvUGF0aC5oCisrKyBiL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvUGF0aC5oCkBAIC0xMzcsMjAgKzEzNywxNCBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7
CiAgICAgICAgIHZvaWQgYWRkQXJjKGNvbnN0IEZsb2F0UG9pbnQmLCBmbG9hdCByYWRpdXMsIGZs
b2F0IHN0YXJ0QW5nbGUsIGZsb2F0IGVuZEFuZ2xlLCBib29sIGFudGljbG9ja3dpc2UpOwogICAg
ICAgICB2b2lkIGFkZFJlY3QoY29uc3QgRmxvYXRSZWN0Jik7CiAgICAgICAgIHZvaWQgYWRkRWxs
aXBzZShjb25zdCBGbG9hdFJlY3QmKTsKKyAgICAgICAgdm9pZCBhZGRSb3VuZGVkUmVjdGFuZ2xl
KGNvbnN0IEZsb2F0UmVjdCYsIGNvbnN0IEZsb2F0U2l6ZSYgcm91bmRpbmdSYWRpaSk7CisgICAg
ICAgIHZvaWQgYWRkUm91bmRlZFJlY3RhbmdsZShjb25zdCBGbG9hdFJlY3QmLCBjb25zdCBGbG9h
dFNpemUmIHRvcExlZnRSYWRpdXMsIGNvbnN0IEZsb2F0U2l6ZSYgdG9wUmlnaHRSYWRpdXMsIGNv
bnN0IEZsb2F0U2l6ZSYgYm90dG9tTGVmdFJhZGl1cywgY29uc3QgRmxvYXRTaXplJiBib3R0b21S
aWdodFJhZGl1cyk7CiAKICAgICAgICAgdm9pZCB0cmFuc2xhdGUoY29uc3QgRmxvYXRTaXplJik7
CiAKICAgICAgICAgU3RyaW5nIGRlYnVnU3RyaW5nKCkgY29uc3Q7CiAKICAgICAgICAgUGxhdGZv
cm1QYXRoUHRyIHBsYXRmb3JtUGF0aCgpIGNvbnN0IHsgcmV0dXJuIG1fcGF0aDsgfQotCi0gICAg
ICAgIHN0YXRpYyBQYXRoIGNyZWF0ZVJvdW5kZWRSZWN0YW5nbGUoY29uc3QgRmxvYXRSZWN0Jiwg
Y29uc3QgRmxvYXRTaXplJiByb3VuZGluZ1JhZGlpKTsKLSAgICAgICAgc3RhdGljIFBhdGggY3Jl
YXRlUm91bmRlZFJlY3RhbmdsZShjb25zdCBGbG9hdFJlY3QmLCBjb25zdCBGbG9hdFNpemUmIHRv
cExlZnRSYWRpdXMsIGNvbnN0IEZsb2F0U2l6ZSYgdG9wUmlnaHRSYWRpdXMsIGNvbnN0IEZsb2F0
U2l6ZSYgYm90dG9tTGVmdFJhZGl1cywgY29uc3QgRmxvYXRTaXplJiBib3R0b21SaWdodFJhZGl1
cyk7Ci0gICAgICAgIHN0YXRpYyBQYXRoIGNyZWF0ZVJlY3RhbmdsZShjb25zdCBGbG9hdFJlY3Qm
KTsKLSAgICAgICAgc3RhdGljIFBhdGggY3JlYXRlRWxsaXBzZShjb25zdCBGbG9hdFBvaW50JiBj
ZW50ZXIsIGZsb2F0IHJ4LCBmbG9hdCByeSk7Ci0gICAgICAgIHN0YXRpYyBQYXRoIGNyZWF0ZUNp
cmNsZShjb25zdCBGbG9hdFBvaW50JiBjZW50ZXIsIGZsb2F0IHIpOwotICAgICAgICBzdGF0aWMg
UGF0aCBjcmVhdGVMaW5lKGNvbnN0IEZsb2F0UG9pbnQmLCBjb25zdCBGbG9hdFBvaW50Jik7Ci0K
ICAgICAgICAgdm9pZCBhcHBseSh2b2lkKiBpbmZvLCBQYXRoQXBwbGllckZ1bmN0aW9uKSBjb25z
dDsKICAgICAgICAgdm9pZCB0cmFuc2Zvcm0oY29uc3QgQWZmaW5lVHJhbnNmb3JtJik7CiAKZGlm
ZiAtLWdpdCBhL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vQ29udGV4dFNoYWRvd0Nh
aXJvLmNwcCBiL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vQ29udGV4dFNoYWRvd0Nh
aXJvLmNwcAppbmRleCA2ZjViZTI4Li40Y2JjYzFhIDEwMDY0NAotLS0gYS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2NhaXJvL0NvbnRleHRTaGFkb3dDYWlyby5jcHAKKysrIGIvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jYWlyby9Db250ZXh0U2hhZG93Q2Fpcm8uY3BwCkBAIC0xMzQsOCAr
MTM0LDEwIEBAIHZvaWQgQ29udGV4dFNoYWRvdzo6ZHJhd1JlY3RTaGFkb3dXaXRob3V0VGlsaW5n
KFBsYXRmb3JtQ29udGV4dCBjb250ZXh0LCBjb25zdCBJCiAgICAgaWYgKCFtX2xheWVyQ29udGV4
dCkKICAgICAgICAgcmV0dXJuOwogCi0gICAgYXBwZW5kV2ViQ29yZVBhdGhUb0NhaXJvQ29udGV4
dChtX2xheWVyQ29udGV4dCwgUGF0aDo6Y3JlYXRlUm91bmRlZFJlY3RhbmdsZShzaGFkb3dSZWN0
LCB0b3BMZWZ0UmFkaXVzLCB0b3BSaWdodFJhZGl1cywKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGJvdHRvbUxlZnRSYWRpdXMsIGJvdHRvbVJpZ2h0UmFkaXVzKSk7CisgICAgUGF0aCBwYXRoOwor
ICAgIHBhdGguYWRkUm91bmRlZFJlY3RhbmdsZShzaGFkb3dSZWN0LCB0b3BMZWZ0UmFkaXVzLCB0
b3BSaWdodFJhZGl1cywgYm90dG9tTGVmdFJhZGl1cywgYm90dG9tUmlnaHRSYWRpdXMpOworCisg
ICAgYXBwZW5kV2ViQ29yZVBhdGhUb0NhaXJvQ29udGV4dChtX2xheWVyQ29udGV4dCwgcGF0aCk7
CiAgICAgY2Fpcm9fc2V0X3NvdXJjZV9yZ2JhKG1fbGF5ZXJDb250ZXh0LCAwLCAwLCAwLCBhbHBo
YSk7CiAgICAgY2Fpcm9fZmlsbChtX2xheWVyQ29udGV4dCk7CiAKQEAgLTIzOCwxMCArMjQwLDEz
IEBAIHZvaWQgQ29udGV4dFNoYWRvdzo6ZHJhd1JlY3RTaGFkb3coR3JhcGhpY3NDb250ZXh0KiBj
b250ZXh0LCBjb25zdCBJbnRSZWN0JiByZWN0CiAgICAgY2Fpcm9fcGFpbnQobV9sYXllckNvbnRl
eHQpOwogICAgIGNhaXJvX3NldF9vcGVyYXRvcihtX2xheWVyQ29udGV4dCwgQ0FJUk9fT1BFUkFU
T1JfT1ZFUik7CiAKLSAgICAvLyBEcmF3IHRoZSByZWN0YW5nbGUuCi0gICAgSW50UmVjdCB0ZW1w
bGF0ZVJlY3QgPSBJbnRSZWN0KG1fYmx1ckRpc3RhbmNlLCBtX2JsdXJEaXN0YW5jZSwgc2hhZG93
VGVtcGxhdGVTaXplLndpZHRoKCkgLSByYWRpdXNUd2ljZSwgc2hhZG93VGVtcGxhdGVTaXplLmhl
aWdodCgpIC0gcmFkaXVzVHdpY2UpOwotICAgIGFwcGVuZFdlYkNvcmVQYXRoVG9DYWlyb0NvbnRl
eHQobV9sYXllckNvbnRleHQsIFBhdGg6OmNyZWF0ZVJvdW5kZWRSZWN0YW5nbGUodGVtcGxhdGVS
ZWN0LCB0b3BMZWZ0UmFkaXVzLCB0b3BSaWdodFJhZGl1cywKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGJvdHRvbUxlZnRSYWRpdXMsIGJvdHRvbVJpZ2h0UmFkaXVzKSk7CisgICAgeworICAgICAg
ICAvLyBEcmF3IHRoZSByZWN0YW5nbGUuCisgICAgICAgIEludFJlY3QgdGVtcGxhdGVSZWN0ID0g
SW50UmVjdChtX2JsdXJEaXN0YW5jZSwgbV9ibHVyRGlzdGFuY2UsIHNoYWRvd1RlbXBsYXRlU2l6
ZS53aWR0aCgpIC0gcmFkaXVzVHdpY2UsIHNoYWRvd1RlbXBsYXRlU2l6ZS5oZWlnaHQoKSAtIHJh
ZGl1c1R3aWNlKTsKKyAgICAgICAgUGF0aCBwYXRoOworICAgICAgICBwYXRoLmFkZFJvdW5kZWRS
ZWN0YW5nbGUodGVtcGxhdGVSZWN0LCB0b3BMZWZ0UmFkaXVzLCB0b3BSaWdodFJhZGl1cywgYm90
dG9tTGVmdFJhZGl1cywgYm90dG9tUmlnaHRSYWRpdXMpOworICAgICAgICBhcHBlbmRXZWJDb3Jl
UGF0aFRvQ2Fpcm9Db250ZXh0KG1fbGF5ZXJDb250ZXh0LCBwYXRoKTsKKyAgICB9CiAKICAgICBj
YWlyb19zZXRfc291cmNlX3JnYmEobV9sYXllckNvbnRleHQsIDAsIDAsIDAsIGNvbnRleHQtPmdl
dEFscGhhKCkpOwogICAgIGNhaXJvX2ZpbGwobV9sYXllckNvbnRleHQpOwpAQCAtMjYzLDggKzI2
OCw5IEBAIHZvaWQgQ29udGV4dFNoYWRvdzo6ZHJhd1JlY3RTaGFkb3coR3JhcGhpY3NDb250ZXh0
KiBjb250ZXh0LCBjb25zdCBJbnRSZWN0JiByZWN0CiAgICAgc2hhZG93UmVjdC5pbmZsYXRlKC1y
YWRpdXNUd2ljZSk7CiAgICAgaWYgKCFzaGFkb3dSZWN0LmlzRW1wdHkoKSkgewogICAgICAgICBj
YWlyb19zYXZlKGNyKTsKLSAgICAgICAgYXBwZW5kV2ViQ29yZVBhdGhUb0NhaXJvQ29udGV4dChj
ciwgUGF0aDo6Y3JlYXRlUm91bmRlZFJlY3RhbmdsZShzaGFkb3dSZWN0LCB0b3BMZWZ0UmFkaXVz
LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgdG9wUmlnaHRSYWRpdXMsIGJvdHRvbUxlZnRSYWRpdXMs
IGJvdHRvbVJpZ2h0UmFkaXVzKSk7CisgICAgICAgIFBhdGggcGF0aDsKKyAgICAgICAgcGF0aC5h
ZGRSb3VuZGVkUmVjdGFuZ2xlKHNoYWRvd1JlY3QsIHRvcExlZnRSYWRpdXMsIHRvcFJpZ2h0UmFk
aXVzLCBib3R0b21MZWZ0UmFkaXVzLCBib3R0b21SaWdodFJhZGl1cyk7CisgICAgICAgIGFwcGVu
ZFdlYkNvcmVQYXRoVG9DYWlyb0NvbnRleHQoY3IsIHBhdGgpOwogICAgICAgICBzZXRTb3VyY2VS
R0JBRnJvbUNvbG9yKGNyLCBtX2NvbG9yKTsKICAgICAgICAgY2Fpcm9fZmlsbChjcik7CiAgICAg
ICAgIGNhaXJvX3Jlc3RvcmUoY3IpOwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jYWlyby9HcmFwaGljc0NvbnRleHRDYWlyby5jcHAgYi9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2NhaXJvL0dyYXBoaWNzQ29udGV4dENhaXJvLmNwcAppbmRleCBlOTRkZmJhLi5kOTNl
MjU3IDEwMDY0NAotLS0gYS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0dyYXBoaWNz
Q29udGV4dENhaXJvLmNwcAorKysgYi9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0dy
YXBoaWNzQ29udGV4dENhaXJvLmNwcApAQCAtNzAzLDggKzcwMywxMSBAQCB2b2lkIEdyYXBoaWNz
Q29udGV4dDo6ZHJhd0ZvY3VzUmluZyhjb25zdCBWZWN0b3I8SW50UmVjdD4mIHJlY3RzLCBpbnQg
d2lkdGgsIGludAogICAgIHNldFBsYXRmb3JtU3Ryb2tlU3R5bGUoRG90dGVkU3Ryb2tlKTsKICNl
bHNlCiAgICAgaW50IHJhZGl1cyA9ICh3aWR0aCAtIDEpIC8gMjsKLSAgICBmb3IgKHVuc2lnbmVk
IGkgPSAwOyBpIDwgcmVjdENvdW50OyBpKyspCi0gICAgICAgIGFwcGVuZFdlYkNvcmVQYXRoVG9D
YWlyb0NvbnRleHQoY3IsIFBhdGg6OmNyZWF0ZVJvdW5kZWRSZWN0YW5nbGUocmVjdHNbaV0sIEZs
b2F0U2l6ZShyYWRpdXMsIHJhZGl1cykpKTsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwg
cmVjdENvdW50OyArK2kpIHsKKyAgICAgICAgUGF0aCBwYXRoOworICAgICAgICBwYXRoLmFkZFJv
dW5kZWRSZWN0YW5nbGUocmVjdHNbaV0sIEZsb2F0U2l6ZShyYWRpdXMsIHJhZGl1cykpOworICAg
ICAgICBhcHBlbmRXZWJDb3JlUGF0aFRvQ2Fpcm9Db250ZXh0KGNyLCBwYXRoKTsKKyAgICB9CiAK
ICAgICAvLyBGb3JjZSB0aGUgYWxwaGEgdG8gNTAlLiAgVGhpcyBtYXRjaGVzIHdoYXQgdGhlIE1h
YyBkb2VzIHdpdGggb3V0bGluZSByaW5ncy4KICAgICBDb2xvciByaW5nQ29sb3IoY29sb3IucmVk
KCksIGNvbG9yLmdyZWVuKCksIGNvbG9yLmJsdWUoKSwgMTI3KTsKQEAgLTEyNzUsNyArMTI3OCwx
MCBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6ZHJhd1RpbGVkU2hhZG93KGNvbnN0IEludFJlY3Qm
IHJlY3QsIGNvbnN0IEZsb2F0U2l6ZSYgdG9wTAogICAgIC8vIERyYXcgc2hhZG93IGludG8gYSBu
ZXcgSW1hZ2VCdWZmZXIuCiAgICAgY2Fpcm9fdCogc21hbGxCdWZmZXJDb250ZXh0ID0gc21hbGxC
dWZmZXItPmNvbnRleHQoKS0+cGxhdGZvcm1Db250ZXh0KCk7CiAgICAgY29weUNvbnRleHRQcm9w
ZXJ0aWVzKGNyLCBzbWFsbEJ1ZmZlckNvbnRleHQpOwotICAgIGFwcGVuZFdlYkNvcmVQYXRoVG9D
YWlyb0NvbnRleHQoc21hbGxCdWZmZXItPmNvbnRleHQoKS0+cGxhdGZvcm1Db250ZXh0KCksIFBh
dGg6OmNyZWF0ZVJvdW5kZWRSZWN0YW5nbGUoc21hbGxSZWN0LCB0b3BMZWZ0UmFkaXVzLCB0b3BS
aWdodFJhZGl1cywgYm90dG9tTGVmdFJhZGl1cywgYm90dG9tUmlnaHRSYWRpdXMpKTsKKworICAg
IFBhdGggcGF0aDsKKyAgICBwYXRoLmFkZFJvdW5kZWRSZWN0YW5nbGUoc21hbGxSZWN0LCB0b3BM
ZWZ0UmFkaXVzLCB0b3BSaWdodFJhZGl1cywgYm90dG9tTGVmdFJhZGl1cywgYm90dG9tUmlnaHRS
YWRpdXMpOworICAgIGFwcGVuZFdlYkNvcmVQYXRoVG9DYWlyb0NvbnRleHQoc21hbGxCdWZmZXIt
PmNvbnRleHQoKS0+cGxhdGZvcm1Db250ZXh0KCksIHBhdGgpOwogICAgIHNldFBsYXRmb3JtRmls
bCh0aGlzLCBzbWFsbEJ1ZmZlckNvbnRleHQsIG1fY29tbW9uKTsKIAogICAgIE93blB0cjxJbWFn
ZUJ1ZmZlcj4gc2hhZG93QnVmZmVyID0gSW1hZ2VCdWZmZXI6OmNyZWF0ZShzbWFsbEJ1ZmZlclNp
emUpOwpAQCAtMTI5NCw3ICsxMzAwLDkgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6OmRyYXdUaWxl
ZFNoYWRvdyhjb25zdCBJbnRSZWN0JiByZWN0LCBjb25zdCBGbG9hdFNpemUmIHRvcEwKICAgICBz
aGFkb3dSZWN0LmluZmxhdGUoLXJhZGl1c1R3aWNlKTsKICAgICBpZiAoIXNoYWRvd1JlY3QuaXNF
bXB0eSgpKSB7CiAgICAgICAgIGNhaXJvX3NhdmUoY3IpOwotICAgICAgICBhcHBlbmRXZWJDb3Jl
UGF0aFRvQ2Fpcm9Db250ZXh0KGNyLCBQYXRoOjpjcmVhdGVSb3VuZGVkUmVjdGFuZ2xlKHNoYWRv
d1JlY3QsIHRvcExlZnRSYWRpdXMsIHRvcFJpZ2h0UmFkaXVzLCBib3R0b21MZWZ0UmFkaXVzLCBi
b3R0b21SaWdodFJhZGl1cykpOworICAgICAgICBwYXRoLmNsZWFyKCk7CisgICAgICAgIHBhdGgu
YWRkUm91bmRlZFJlY3RhbmdsZShzaGFkb3dSZWN0LCB0b3BMZWZ0UmFkaXVzLCB0b3BSaWdodFJh
ZGl1cywgYm90dG9tTGVmdFJhZGl1cywgYm90dG9tUmlnaHRSYWRpdXMpOworICAgICAgICBhcHBl
bmRXZWJDb3JlUGF0aFRvQ2Fpcm9Db250ZXh0KGNyLCBwYXRoKTsKICAgICAgICAgc2V0Q29sb3Io
Y3IsIHNoYWRvd0NvbG9yKTsKICAgICAgICAgY2Fpcm9fZmlsbChjcik7CiAgICAgICAgIGNhaXJv
X3Jlc3RvcmUoY3IpOwpAQCAtMTM3Myw3ICsxMzgxLDkgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6
OmZpbGxSb3VuZGVkUmVjdChjb25zdCBJbnRSZWN0JiByLCBjb25zdCBJbnRTaXplJiB0b3BMZWZ0
LAogCiAgICAgY2Fpcm9fdCogY3IgPSBtX2RhdGEtPmNyOwogICAgIGNhaXJvX3NhdmUoY3IpOwot
ICAgIGFwcGVuZFdlYkNvcmVQYXRoVG9DYWlyb0NvbnRleHQoY3IsIFBhdGg6OmNyZWF0ZVJvdW5k
ZWRSZWN0YW5nbGUociwgdG9wTGVmdCwgdG9wUmlnaHQsIGJvdHRvbUxlZnQsIGJvdHRvbVJpZ2h0
KSk7CisgICAgUGF0aCBwYXRoOworICAgIHBhdGguYWRkUm91bmRlZFJlY3RhbmdsZShyLCB0b3BM
ZWZ0LCB0b3BSaWdodCwgYm90dG9tTGVmdCwgYm90dG9tUmlnaHQpOworICAgIGFwcGVuZFdlYkNv
cmVQYXRoVG9DYWlyb0NvbnRleHQoY3IsIHBhdGgpOwogICAgIHNldENvbG9yKGNyLCBjb2xvcik7
CiAgICAgZHJhd1BhdGhTaGFkb3codGhpcywgbV9jb21tb24sIHRydWUsIGZhbHNlKTsKICAgICBj
YWlyb19maWxsKGNyKTsKZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cv
R3JhcGhpY3NDb250ZXh0Q0cuY3BwIGIvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9HcmFw
aGljc0NvbnRleHRDRy5jcHAKaW5kZXggYmQ4ZTg1MC4uMjVlZmI3YiAxMDA2NDQKLS0tIGEvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9HcmFwaGljc0NvbnRleHRDRy5jcHAKKysrIGIvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9HcmFwaGljc0NvbnRleHRDRy5jcHAKQEAgLTY2Nyw3
ICs2NjcsOSBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6ZmlsbFJvdW5kZWRSZWN0KGNvbnN0IElu
dFJlY3QmIHJlY3QsIGNvbnN0IEludFNpemUmIHRvcExlZgogICAgIGlmIChvbGRGaWxsQ29sb3Ig
IT0gY29sb3IgfHwgb2xkQ29sb3JTcGFjZSAhPSBjb2xvclNwYWNlKQogICAgICAgICBzZXRDR0Zp
bGxDb2xvcihjb250ZXh0LCBjb2xvciwgY29sb3JTcGFjZSk7CiAKLSAgICBhZGRQYXRoKFBhdGg6
OmNyZWF0ZVJvdW5kZWRSZWN0YW5nbGUocmVjdCwgdG9wTGVmdCwgdG9wUmlnaHQsIGJvdHRvbUxl
ZnQsIGJvdHRvbVJpZ2h0KSk7CisgICAgUGF0aCBwYXRoOworICAgIHBhdGguYWRkUm91bmRlZFJl
Y3RhbmdsZShyZWN0LCB0b3BMZWZ0LCB0b3BSaWdodCwgYm90dG9tTGVmdCwgYm90dG9tUmlnaHQp
OworICAgIGFkZFBhdGgocGF0aCk7CiAgICAgZmlsbFBhdGgoKTsKIAogICAgIGlmIChvbGRGaWxs
Q29sb3IgIT0gY29sb3IgfHwgb2xkQ29sb3JTcGFjZSAhPSBjb2xvclNwYWNlKQpkaWZmIC0tZ2l0
IGEvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9xdC9HcmFwaGljc0NvbnRleHRRdC5jcHAgYi9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3F0L0dyYXBoaWNzQ29udGV4dFF0LmNwcAppbmRleCA3
ZTRhZjQwLi43MjkyMTFmIDEwMDY0NAotLS0gYS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3F0
L0dyYXBoaWNzQ29udGV4dFF0LmNwcAorKysgYi9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3F0
L0dyYXBoaWNzQ29udGV4dFF0LmNwcApAQCAtNzIyLDcgKzcyMiw4IEBAIHZvaWQgR3JhcGhpY3ND
b250ZXh0OjpmaWxsUm91bmRlZFJlY3QoY29uc3QgSW50UmVjdCYgcmVjdCwgY29uc3QgSW50U2l6
ZSYgdG9wTGVmCiAgICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSB8fCAhY29sb3IuaXNWYWxpZCgp
KQogICAgICAgICByZXR1cm47CiAKLSAgICBQYXRoIHBhdGggPSBQYXRoOjpjcmVhdGVSb3VuZGVk
UmVjdGFuZ2xlKHJlY3QsIHRvcExlZnQsIHRvcFJpZ2h0LCBib3R0b21MZWZ0LCBib3R0b21SaWdo
dCk7CisgICAgUGF0aCBwYXRoOworICAgIHBhdGguYWRkUm91bmRlZFJlY3RhbmdsZShyZWN0LCB0
b3BMZWZ0LCB0b3BSaWdodCwgYm90dG9tTGVmdCwgYm90dG9tUmlnaHQpOwogICAgIFFQYWludGVy
KiBwID0gbV9kYXRhLT5wKCk7CiAgICAgaWYgKG1fZGF0YS0+aGFzU2hhZG93KCkpIHsKICAgICAg
ICAgcC0+dHJhbnNsYXRlKG1fZGF0YS0+c2hhZG93Lm9mZnNldCgpKTsKZGlmZiAtLWdpdCBhL1dl
YkNvcmUvcmVuZGVyaW5nL1JlbmRlckJveE1vZGVsT2JqZWN0LmNwcCBiL1dlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlckJveE1vZGVsT2JqZWN0LmNwcAppbmRleCAwMmEyODQ3Li43ZTBhMmU5IDEwMDY0
NAotLS0gYS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCb3hNb2RlbE9iamVjdC5jcHAKKysrIGIv
V2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQm94TW9kZWxPYmplY3QuY3BwCkBAIC0xMDYxLDcgKzEw
NjEsNyBAQCB2b2lkIFJlbmRlckJveE1vZGVsT2JqZWN0OjpwYWludEJvcmRlcihHcmFwaGljc0Nv
bnRleHQqIGdyYXBoaWNzQ29udGV4dCwgaW50IHR4LAogICAgICAgICBncmFwaGljc0NvbnRleHQt
PmFkZFJvdW5kZWRSZWN0Q2xpcChib3JkZXJSZWN0LCB0b3BMZWZ0LCB0b3BSaWdodCwgYm90dG9t
TGVmdCwgYm90dG9tUmlnaHQpOwogICAgICAgICBncmFwaGljc0NvbnRleHQtPmNsaXBPdXRSb3Vu
ZGVkUmVjdChpbm5lckJvcmRlclJlY3QsIGlubmVyVG9wTGVmdFJhZGl1cywgaW5uZXJUb3BSaWdo
dFJhZGl1cywgaW5uZXJCb3R0b21MZWZ0UmFkaXVzLCBpbm5lckJvdHRvbVJpZ2h0UmFkaXVzKTsK
IAotICAgICAgICByb3VuZGVkUGF0aCA9IFBhdGg6OmNyZWF0ZVJvdW5kZWRSZWN0YW5nbGUoYm9y
ZGVyUmVjdCwgdG9wTGVmdCwgdG9wUmlnaHQsIGJvdHRvbUxlZnQsIGJvdHRvbVJpZ2h0KTsKKyAg
ICAgICAgcm91bmRlZFBhdGguYWRkUm91bmRlZFJlY3RhbmdsZShib3JkZXJSZWN0LCB0b3BMZWZ0
LCB0b3BSaWdodCwgYm90dG9tTGVmdCwgYm90dG9tUmlnaHQpOwogICAgICAgICBncmFwaGljc0Nv
bnRleHQtPmFkZFBhdGgocm91bmRlZFBhdGgpOwogICAgIH0KIApAQCAtMTc1MiwyNCArMTc1Miwy
OSBAQCB2b2lkIFJlbmRlckJveE1vZGVsT2JqZWN0OjpwYWludEJveFNoYWRvdyhHcmFwaGljc0Nv
bnRleHQqIGNvbnRleHQsIGludCB0eCwgaW50CiAKICAgICAgICAgICAgIGNvbnRleHQtPnNhdmUo
KTsKIAotICAgICAgICAgICAgaWYgKGhhc0JvcmRlclJhZGl1cykKLSAgICAgICAgICAgICAgICBj
b250ZXh0LT5jbGlwKFBhdGg6OmNyZWF0ZVJvdW5kZWRSZWN0YW5nbGUocmVjdCwgdG9wTGVmdCwg
dG9wUmlnaHQsIGJvdHRvbUxlZnQsIGJvdHRvbVJpZ2h0KSk7Ci0gICAgICAgICAgICBlbHNlCisg
ICAgICAgICAgICBQYXRoIHBhdGg7CisgICAgICAgICAgICBpZiAoaGFzQm9yZGVyUmFkaXVzKSB7
CisgICAgICAgICAgICAgICAgcGF0aC5hZGRSb3VuZGVkUmVjdGFuZ2xlKHJlY3QsIHRvcExlZnQs
IHRvcFJpZ2h0LCBib3R0b21MZWZ0LCBib3R0b21SaWdodCk7CisgICAgICAgICAgICAgICAgY29u
dGV4dC0+Y2xpcChwYXRoKTsKKyAgICAgICAgICAgIH0gZWxzZQogICAgICAgICAgICAgICAgIGNv
bnRleHQtPmNsaXAocmVjdCk7CiAKICAgICAgICAgICAgIEludFNpemUgZXh0cmFPZmZzZXQoMiAq
IHcgKyBtYXgoMCwgc2hhZG93T2Zmc2V0LndpZHRoKCkpICsgc2hhZG93Qmx1ciAtIDIgKiBzaGFk
b3dTcHJlYWQgKyAxLCAwKTsKICAgICAgICAgICAgIGNvbnRleHQtPnRyYW5zbGF0ZShleHRyYU9m
ZnNldC53aWR0aCgpLCBleHRyYU9mZnNldC5oZWlnaHQoKSk7CiAgICAgICAgICAgICBzaGFkb3dP
ZmZzZXQgLT0gZXh0cmFPZmZzZXQ7CiAKLSAgICAgICAgICAgIGNvbnRleHQtPmJlZ2luUGF0aCgp
OwotICAgICAgICAgICAgY29udGV4dC0+YWRkUGF0aChQYXRoOjpjcmVhdGVSZWN0YW5nbGUob3V0
ZXJSZWN0KSk7CisgICAgICAgICAgICBwYXRoLmNsZWFyKCk7CisgICAgICAgICAgICBwYXRoLmFk
ZFJlY3Qob3V0ZXJSZWN0KTsKIAogICAgICAgICAgICAgaWYgKGhhc0JvcmRlclJhZGl1cykgewog
ICAgICAgICAgICAgICAgIGlmIChzaGFkb3dTcHJlYWQgPiAwKQogICAgICAgICAgICAgICAgICAg
ICB1bmlmb3JtbHlFeHBhbmRCb3JkZXJSYWRpaSgtc2hhZG93U3ByZWFkLCB0b3BMZWZ0LCB0b3BS
aWdodCwgYm90dG9tTGVmdCwgYm90dG9tUmlnaHQpOwotICAgICAgICAgICAgICAgIGNvbnRleHQt
PmFkZFBhdGgoUGF0aDo6Y3JlYXRlUm91bmRlZFJlY3RhbmdsZShob2xlUmVjdCwgdG9wTGVmdCwg
dG9wUmlnaHQsIGJvdHRvbUxlZnQsIGJvdHRvbVJpZ2h0KSk7CisgICAgICAgICAgICAgICAgcGF0
aC5hZGRSb3VuZGVkUmVjdGFuZ2xlKGhvbGVSZWN0LCB0b3BMZWZ0LCB0b3BSaWdodCwgYm90dG9t
TGVmdCwgYm90dG9tUmlnaHQpOwogICAgICAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICAgICAg
Y29udGV4dC0+YWRkUGF0aChQYXRoOjpjcmVhdGVSZWN0YW5nbGUoaG9sZVJlY3QpKTsKKyAgICAg
ICAgICAgICAgICBwYXRoLmFkZFJlY3QoaG9sZVJlY3QpOworCisgICAgICAgICAgICBjb250ZXh0
LT5iZWdpblBhdGgoKTsKKyAgICAgICAgICAgIGNvbnRleHQtPmFkZFBhdGgocGF0aCk7CiAKICAg
ICAgICAgICAgIGNvbnRleHQtPnNldEZpbGxSdWxlKFJVTEVfRVZFTk9ERCk7CiAgICAgICAgICAg
ICBjb250ZXh0LT5zZXRGaWxsQ29sb3IoZmlsbENvbG9yLCBzLT5jb2xvclNwYWNlKCkpOwpkaWZm
IC0tZ2l0IGEvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyRW1iZWRkZWRPYmplY3QuY3BwIGIvV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVyRW1iZWRkZWRPYmplY3QuY3BwCmluZGV4IGFhMzAxZTIuLjUz
NjUwMGMgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckVtYmVkZGVkT2JqZWN0
LmNwcAorKysgYi9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJFbWJlZGRlZE9iamVjdC5jcHAKQEAg
LTIwNiw3ICsyMDYsNyBAQCBib29sIFJlbmRlckVtYmVkZGVkT2JqZWN0OjpnZXRSZXBsYWNlbWVu
dFRleHRHZW9tZXRyeShpbnQgdHgsIGludCB0eSwgRmxvYXRSZWN0JgogICAgIGZsb2F0IHkgPSAo
Y29udGVudFJlY3Quc2l6ZSgpLmhlaWdodCgpIC8gMiAtIHJlcGxhY2VtZW50VGV4dFJlY3Quc2l6
ZSgpLmhlaWdodCgpIC8gMikgKyBjb250ZW50UmVjdC5sb2NhdGlvbigpLnkoKTsKICAgICByZXBs
YWNlbWVudFRleHRSZWN0LnNldExvY2F0aW9uKEZsb2F0UG9pbnQoeCwgeSkpOwogICAgIAotICAg
IHBhdGggPSBQYXRoOjpjcmVhdGVSb3VuZGVkUmVjdGFuZ2xlKHJlcGxhY2VtZW50VGV4dFJlY3Qs
IEZsb2F0U2l6ZShyZXBsYWNlbWVudFRleHRSb3VuZGVkUmVjdFJhZGl1cywgcmVwbGFjZW1lbnRU
ZXh0Um91bmRlZFJlY3RSYWRpdXMpKTsKKyAgICBwYXRoLmFkZFJvdW5kZWRSZWN0YW5nbGUocmVw
bGFjZW1lbnRUZXh0UmVjdCwgRmxvYXRTaXplKHJlcGxhY2VtZW50VGV4dFJvdW5kZWRSZWN0UmFk
aXVzLCByZXBsYWNlbWVudFRleHRSb3VuZGVkUmVjdFJhZGl1cykpOwogCiAgICAgcmV0dXJuIHRy
dWU7CiB9CmRpZmYgLS1naXQgYS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJTVkdSZXNvdXJjZUNs
aXBwZXIuY3BwIGIvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyU1ZHUmVzb3VyY2VDbGlwcGVyLmNw
cAppbmRleCBhMDlhZmIyLi4yNjU5ZDY0IDEwMDY0NAotLS0gYS9XZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJTVkdSZXNvdXJjZUNsaXBwZXIuY3BwCisrKyBiL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
clNWR1Jlc291cmNlQ2xpcHBlci5jcHAKQEAgLTEzNiw3ICsxMzYsNyBAQCBib29sIFJlbmRlclNW
R1Jlc291cmNlQ2xpcHBlcjo6cGF0aE9ubHlDbGlwcGluZyhHcmFwaGljc0NvbnRleHQqIGNvbnRl
eHQsIGNvbnN0CiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIC8vIEZhbGxiYWNr
IHRvIG1hc2tpbmcsIGlmIHRoZXJlIGlzIG1vcmUgdGhhbiBvbmUgY2xpcHBpbmcgcGF0aC4KICAg
ICAgICAgaWYgKGNsaXBQYXRoLmlzRW1wdHkoKSkgewotICAgICAgICAgICAgY2xpcFBhdGggPSBz
dHlsZWQtPnRvQ2xpcFBhdGgoKTsKKyAgICAgICAgICAgIHN0eWxlZC0+dG9DbGlwUGF0aChjbGlw
UGF0aCk7CiAgICAgICAgICAgICBjbGlwUnVsZSA9IHN2Z1N0eWxlLT5jbGlwUnVsZSgpOwogICAg
ICAgICB9IGVsc2UKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKZGlmZiAtLWdpdCBhL1dlYkNv
cmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdQYXRoLmNwcCBiL1dlYkNvcmUvcmVuZGVyaW5nL3N2
Zy9SZW5kZXJTVkdQYXRoLmNwcAppbmRleCBhZGEzNjBhLi40ODMzMDNmIDEwMDY0NAotLS0gYS9X
ZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUGF0aC5jcHAKKysrIGIvV2ViQ29yZS9yZW5k
ZXJpbmcvc3ZnL1JlbmRlclNWR1BhdGguY3BwCkBAIC0xMTIsNyArMTEyLDggQEAgdm9pZCBSZW5k
ZXJTVkdQYXRoOjpsYXlvdXQoKQogCiAgICAgYm9vbCBuZWVkc1BhdGhVcGRhdGUgPSBtX25lZWRz
UGF0aFVwZGF0ZTsKICAgICBpZiAobmVlZHNQYXRoVXBkYXRlKSB7Ci0gICAgICAgIG1fcGF0aCA9
IGVsZW1lbnQtPnRvUGF0aERhdGEoKTsKKyAgICAgICAgbV9wYXRoLmNsZWFyKCk7CisgICAgICAg
IGVsZW1lbnQtPnRvUGF0aERhdGEobV9wYXRoKTsKICAgICAgICAgbV9uZWVkc1BhdGhVcGRhdGUg
PSBmYWxzZTsKICAgICAgICAgdXBkYXRlQ2FjaGVkQm91bmRhcmllc0luUGFyZW50cyA9IHRydWU7
CiAgICAgfQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1RleHRQ
YXRoLmNwcCBiL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdUZXh0UGF0aC5jcHAKaW5k
ZXggNWQ5NzdmOS4uNjRlYmM2ZCAxMDA2NDQKLS0tIGEvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1Jl
bmRlclNWR1RleHRQYXRoLmNwcAorKysgYi9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZH
VGV4dFBhdGguY3BwCkBAIC01Myw3ICs1Myw4IEBAIFBhdGggUmVuZGVyU1ZHVGV4dFBhdGg6Omxh
eW91dFBhdGgoKSBjb25zdAogICAgIAogICAgIFNWR1BhdGhFbGVtZW50KiBwYXRoRWxlbWVudCA9
IHN0YXRpY19jYXN0PFNWR1BhdGhFbGVtZW50Kj4odGFyZ2V0RWxlbWVudCk7CiAgICAgCi0gICAg
UGF0aCBwYXRoRGF0YSA9IHBhdGhFbGVtZW50LT50b1BhdGhEYXRhKCk7CisgICAgUGF0aCBwYXRo
RGF0YTsKKyAgICBwYXRoRWxlbWVudC0+dG9QYXRoRGF0YShwYXRoRGF0YSk7CiAgICAgLy8gU3Bl
YzogIFRoZSB0cmFuc2Zvcm0gYXR0cmlidXRlIG9uIHRoZSByZWZlcmVuY2VkICdwYXRoJyBlbGVt
ZW50IHJlcHJlc2VudHMgYQogICAgIC8vIHN1cHBsZW1lbnRhbCB0cmFuc2Zvcm1hdGlvbiByZWxh
dGl2ZSB0byB0aGUgY3VycmVudCB1c2VyIGNvb3JkaW5hdGUgc3lzdGVtIGZvcgogICAgIC8vIHRo
ZSBjdXJyZW50ICd0ZXh0JyBlbGVtZW50LCBpbmNsdWRpbmcgYW55IGFkanVzdG1lbnRzIHRvIHRo
ZSBjdXJyZW50IHVzZXIgY29vcmRpbmF0ZQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9yZW5kZXJpbmcv
c3ZnL1NWR0lubGluZVRleHRCb3guY3BwIGIvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR0lubGlu
ZVRleHRCb3guY3BwCmluZGV4IDgzNTJlZTUuLjliMDhhODYgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUv
cmVuZGVyaW5nL3N2Zy9TVkdJbmxpbmVUZXh0Qm94LmNwcAorKysgYi9XZWJDb3JlL3JlbmRlcmlu
Zy9zdmcvU1ZHSW5saW5lVGV4dEJveC5jcHAKQEAgLTQ5Miw5ICs0OTIsMTMgQEAgdm9pZCBTVkdJ
bmxpbmVUZXh0Qm94OjpwYWludERlY29yYXRpb25XaXRoU3R5bGUoR3JhcGhpY3NDb250ZXh0KiBj
b250ZXh0LCBFVGV4dEQKICAgICBmbG9hdCB0aGlja25lc3MgPSB0aGlja25lc3NGb3JEZWNvcmF0
aW9uKGRlY29yYXRpb24sIGZvbnQpOwogICAgIGZsb2F0IHkgPSBmcmFnbWVudC55IC0gZm9udC5h
c2NlbnQoKSArIHBvc2l0aW9uT2Zmc2V0Rm9yRGVjb3JhdGlvbihkZWNvcmF0aW9uLCBmb250LCB0
aGlja25lc3MpOwogCisgICAgUGF0aCBwYXRoOworICAgIGlmIChmcmFnbWVudC53aWR0aCA+IDAg
JiYgdGhpY2tuZXNzID4gMCkKKyAgICAgICAgcGF0aC5hZGRSZWN0KEZsb2F0UmVjdChmcmFnbWVu
dC54LCB5LCBmcmFnbWVudC53aWR0aCwgdGhpY2tuZXNzKSk7CisKICAgICBjb250ZXh0LT5zYXZl
KCk7CiAgICAgY29udGV4dC0+YmVnaW5QYXRoKCk7Ci0gICAgY29udGV4dC0+YWRkUGF0aChQYXRo
OjpjcmVhdGVSZWN0YW5nbGUoRmxvYXRSZWN0KGZyYWdtZW50LngsIHksIGZyYWdtZW50LndpZHRo
LCB0aGlja25lc3MpKSk7CisgICAgY29udGV4dC0+YWRkUGF0aChwYXRoKTsKIAogICAgIGlmIChh
Y3F1aXJlUGFpbnRpbmdSZXNvdXJjZShjb250ZXh0LCBkZWNvcmF0aW9uUmVuZGVyZXIsIGRlY29y
YXRpb25TdHlsZSkpCiAgICAgICAgIHJlbGVhc2VQYWludGluZ1Jlc291cmNlKGNvbnRleHQpOwpk
aWZmIC0tZ2l0IGEvV2ViQ29yZS9zdmcvU1ZHQW5pbWF0ZU1vdGlvbkVsZW1lbnQuY3BwIGIvV2Vi
Q29yZS9zdmcvU1ZHQW5pbWF0ZU1vdGlvbkVsZW1lbnQuY3BwCmluZGV4IGI1MGE5OTMuLjI2MTUx
ZWQgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvc3ZnL1NWR0FuaW1hdGVNb3Rpb25FbGVtZW50LmNwcAor
KysgYi9XZWJDb3JlL3N2Zy9TVkdBbmltYXRlTW90aW9uRWxlbWVudC5jcHAKQEAgLTExMiw5ICsx
MTIsMTAgQEAgUGF0aCBTVkdBbmltYXRlTW90aW9uRWxlbWVudDo6YW5pbWF0aW9uUGF0aCgpIGNv
bnN0CiAgICAgICAgIGlmIChjaGlsZC0+aGFzVGFnTmFtZShTVkdOYW1lczo6bXBhdGhUYWcpKSB7
CiAgICAgICAgICAgICBTVkdNUGF0aEVsZW1lbnQqIG1QYXRoID0gc3RhdGljX2Nhc3Q8U1ZHTVBh
dGhFbGVtZW50Kj4oY2hpbGQpOwogICAgICAgICAgICAgU1ZHUGF0aEVsZW1lbnQqIHBhdGhFbGVt
ZW50ID0gbVBhdGgtPnBhdGhFbGVtZW50KCk7CisgICAgICAgICAgICBQYXRoIHBhdGg7CiAgICAg
ICAgICAgICBpZiAocGF0aEVsZW1lbnQpCi0gICAgICAgICAgICAgICAgcmV0dXJuIHBhdGhFbGVt
ZW50LT50b1BhdGhEYXRhKCk7Ci0gICAgICAgICAgICByZXR1cm4gUGF0aCgpOworICAgICAgICAg
ICAgICAgIHBhdGhFbGVtZW50LT50b1BhdGhEYXRhKHBhdGgpOworICAgICAgICAgICAgcmV0dXJu
IHBhdGg7CiAgICAgICAgIH0KICAgICB9CiAgICAgaWYgKGhhc0F0dHJpYnV0ZShTVkdOYW1lczo6
cGF0aEF0dHIpKQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9zdmcvU1ZHQ2lyY2xlRWxlbWVudC5jcHAg
Yi9XZWJDb3JlL3N2Zy9TVkdDaXJjbGVFbGVtZW50LmNwcAppbmRleCA0ZWQ0ZWZlLi41ZmM1MGMz
IDEwMDY0NAotLS0gYS9XZWJDb3JlL3N2Zy9TVkdDaXJjbGVFbGVtZW50LmNwcAorKysgYi9XZWJD
b3JlL3N2Zy9TVkdDaXJjbGVFbGVtZW50LmNwcApAQCAtMTIxLDkgKzEyMSwxNCBAQCB2b2lkIFNW
R0NpcmNsZUVsZW1lbnQ6OnN5bmNocm9uaXplUHJvcGVydHkoY29uc3QgUXVhbGlmaWVkTmFtZSYg
YXR0ck5hbWUpCiAgICAgICAgIHN5bmNocm9uaXplRXh0ZXJuYWxSZXNvdXJjZXNSZXF1aXJlZCgp
OwogfQogCi1QYXRoIFNWR0NpcmNsZUVsZW1lbnQ6OnRvUGF0aERhdGEoKSBjb25zdAordm9pZCBT
VkdDaXJjbGVFbGVtZW50Ojp0b1BhdGhEYXRhKFBhdGgmIHBhdGgpIGNvbnN0CiB7Ci0gICAgcmV0
dXJuIFBhdGg6OmNyZWF0ZUNpcmNsZShGbG9hdFBvaW50KGN4KCkudmFsdWUodGhpcyksIGN5KCku
dmFsdWUodGhpcykpLCByKCkudmFsdWUodGhpcykpOworICAgIGZsb2F0IHJhZGl1cyA9IHIoKS52
YWx1ZSh0aGlzKTsKKworICAgIGlmIChyYWRpdXMgPD0gMCkKKyAgICAgICAgcmV0dXJuOworCisg
ICAgcGF0aC5hZGRFbGxpcHNlKEZsb2F0UmVjdChjeCgpLnZhbHVlKHRoaXMpIC0gcmFkaXVzLCBj
eSgpLnZhbHVlKHRoaXMpIC0gcmFkaXVzLCByYWRpdXMgKiAyLCByYWRpdXMgKiAyKSk7CiB9CiAK
IGJvb2wgU1ZHQ2lyY2xlRWxlbWVudDo6c2VsZkhhc1JlbGF0aXZlTGVuZ3RocygpIGNvbnN0CmRp
ZmYgLS1naXQgYS9XZWJDb3JlL3N2Zy9TVkdDaXJjbGVFbGVtZW50LmggYi9XZWJDb3JlL3N2Zy9T
VkdDaXJjbGVFbGVtZW50LmgKaW5kZXggZGQxMTc5Mi4uNGViOTI2MiAxMDA2NDQKLS0tIGEvV2Vi
Q29yZS9zdmcvU1ZHQ2lyY2xlRWxlbWVudC5oCisrKyBiL1dlYkNvcmUvc3ZnL1NWR0NpcmNsZUVs
ZW1lbnQuaApAQCAtNDUsNyArNDUsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIHZp
cnR1YWwgdm9pZCBzdmdBdHRyaWJ1dGVDaGFuZ2VkKGNvbnN0IFF1YWxpZmllZE5hbWUmKTsKICAg
ICAgICAgdmlydHVhbCB2b2lkIHN5bmNocm9uaXplUHJvcGVydHkoY29uc3QgUXVhbGlmaWVkTmFt
ZSYpOwogCi0gICAgICAgIHZpcnR1YWwgUGF0aCB0b1BhdGhEYXRhKCkgY29uc3Q7CisgICAgICAg
IHZpcnR1YWwgdm9pZCB0b1BhdGhEYXRhKFBhdGgmKSBjb25zdDsKIAogICAgICAgICB2aXJ0dWFs
IGJvb2wgc2VsZkhhc1JlbGF0aXZlTGVuZ3RocygpIGNvbnN0OwogCmRpZmYgLS1naXQgYS9XZWJD
b3JlL3N2Zy9TVkdFbGxpcHNlRWxlbWVudC5jcHAgYi9XZWJDb3JlL3N2Zy9TVkdFbGxpcHNlRWxl
bWVudC5jcHAKaW5kZXggMTY3NDNlZC4uMDFlYTYxOSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9zdmcv
U1ZHRWxsaXBzZUVsZW1lbnQuY3BwCisrKyBiL1dlYkNvcmUvc3ZnL1NWR0VsbGlwc2VFbGVtZW50
LmNwcApAQCAtMTMwLDEwICsxMzAsMTcgQEAgdm9pZCBTVkdFbGxpcHNlRWxlbWVudDo6c3luY2hy
b25pemVQcm9wZXJ0eShjb25zdCBRdWFsaWZpZWROYW1lJiBhdHRyTmFtZSkKICAgICAgICAgc3lu
Y2hyb25pemVFeHRlcm5hbFJlc291cmNlc1JlcXVpcmVkKCk7CiB9CiAKLVBhdGggU1ZHRWxsaXBz
ZUVsZW1lbnQ6OnRvUGF0aERhdGEoKSBjb25zdAordm9pZCBTVkdFbGxpcHNlRWxlbWVudDo6dG9Q
YXRoRGF0YShQYXRoJiBwYXRoKSBjb25zdAogewotICAgIHJldHVybiBQYXRoOjpjcmVhdGVFbGxp
cHNlKEZsb2F0UG9pbnQoY3goKS52YWx1ZSh0aGlzKSwgY3koKS52YWx1ZSh0aGlzKSksCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByeCgpLnZhbHVlKHRoaXMpLCBy
eSgpLnZhbHVlKHRoaXMpKTsKKyAgICBmbG9hdCByYWRpdXNYID0gcngoKS52YWx1ZSh0aGlzKTsK
KyAgICBpZiAocmFkaXVzWCA8PSAwKQorICAgICAgICByZXR1cm47CisKKyAgICBmbG9hdCByYWRp
dXNZID0gcnkoKS52YWx1ZSh0aGlzKTsKKyAgICBpZiAocmFkaXVzWSA8PSAwKQorICAgICAgICBy
ZXR1cm47CisKKyAgICBwYXRoLmFkZEVsbGlwc2UoRmxvYXRSZWN0KGN4KCkudmFsdWUodGhpcykg
LSByYWRpdXNYLCBjeSgpLnZhbHVlKHRoaXMpIC0gcmFkaXVzWSwgcmFkaXVzWCAqIDIsIHJhZGl1
c1kgKiAyKSk7CiB9CiAgCiBib29sIFNWR0VsbGlwc2VFbGVtZW50OjpzZWxmSGFzUmVsYXRpdmVM
ZW5ndGhzKCkgY29uc3QKZGlmZiAtLWdpdCBhL1dlYkNvcmUvc3ZnL1NWR0VsbGlwc2VFbGVtZW50
LmggYi9XZWJDb3JlL3N2Zy9TVkdFbGxpcHNlRWxlbWVudC5oCmluZGV4IGJlZTgxNWMuLmNhZDMy
OWUgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvc3ZnL1NWR0VsbGlwc2VFbGVtZW50LmgKKysrIGIvV2Vi
Q29yZS9zdmcvU1ZHRWxsaXBzZUVsZW1lbnQuaApAQCAtNDUsNyArNDUsNyBAQCBuYW1lc3BhY2Ug
V2ViQ29yZSB7CiAgICAgICAgIHZpcnR1YWwgdm9pZCBzdmdBdHRyaWJ1dGVDaGFuZ2VkKGNvbnN0
IFF1YWxpZmllZE5hbWUmKTsKICAgICAgICAgdmlydHVhbCB2b2lkIHN5bmNocm9uaXplUHJvcGVy
dHkoY29uc3QgUXVhbGlmaWVkTmFtZSYpOwogCi0gICAgICAgIHZpcnR1YWwgUGF0aCB0b1BhdGhE
YXRhKCkgY29uc3Q7CisgICAgICAgIHZpcnR1YWwgdm9pZCB0b1BhdGhEYXRhKFBhdGgmKSBjb25z
dDsKIAogICAgICAgICB2aXJ0dWFsIGJvb2wgc2VsZkhhc1JlbGF0aXZlTGVuZ3RocygpIGNvbnN0
OwogCmRpZmYgLS1naXQgYS9XZWJDb3JlL3N2Zy9TVkdMaW5lRWxlbWVudC5jcHAgYi9XZWJDb3Jl
L3N2Zy9TVkdMaW5lRWxlbWVudC5jcHAKaW5kZXggMjI5ZGZhOS4uOGEwODM1ZSAxMDA2NDQKLS0t
IGEvV2ViQ29yZS9zdmcvU1ZHTGluZUVsZW1lbnQuY3BwCisrKyBiL1dlYkNvcmUvc3ZnL1NWR0xp
bmVFbGVtZW50LmNwcApAQCAtMTI2LDEwICsxMjYsMTAgQEAgdm9pZCBTVkdMaW5lRWxlbWVudDo6
c3luY2hyb25pemVQcm9wZXJ0eShjb25zdCBRdWFsaWZpZWROYW1lJiBhdHRyTmFtZSkKICAgICAg
ICAgc3luY2hyb25pemVFeHRlcm5hbFJlc291cmNlc1JlcXVpcmVkKCk7CiB9CiAKLVBhdGggU1ZH
TGluZUVsZW1lbnQ6OnRvUGF0aERhdGEoKSBjb25zdAordm9pZCBTVkdMaW5lRWxlbWVudDo6dG9Q
YXRoRGF0YShQYXRoJiBwYXRoKSBjb25zdAogewotICAgIHJldHVybiBQYXRoOjpjcmVhdGVMaW5l
KEZsb2F0UG9pbnQoeDEoKS52YWx1ZSh0aGlzKSwgeTEoKS52YWx1ZSh0aGlzKSksCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgRmxvYXRQb2ludCh4MigpLnZhbHVlKHRoaXMpLCB5MigpLnZh
bHVlKHRoaXMpKSk7CisgICAgcGF0aC5tb3ZlVG8oRmxvYXRQb2ludCh4MSgpLnZhbHVlKHRoaXMp
LCB5MSgpLnZhbHVlKHRoaXMpKSk7CisgICAgcGF0aC5hZGRMaW5lVG8oRmxvYXRQb2ludCh4Migp
LnZhbHVlKHRoaXMpLCB5MigpLnZhbHVlKHRoaXMpKSk7CiB9CiAKIGJvb2wgU1ZHTGluZUVsZW1l
bnQ6OnNlbGZIYXNSZWxhdGl2ZUxlbmd0aHMoKSBjb25zdApkaWZmIC0tZ2l0IGEvV2ViQ29yZS9z
dmcvU1ZHTGluZUVsZW1lbnQuaCBiL1dlYkNvcmUvc3ZnL1NWR0xpbmVFbGVtZW50LmgKaW5kZXgg
MjEwMDdmMC4uNTVhMjY4YyAxMDA2NDQKLS0tIGEvV2ViQ29yZS9zdmcvU1ZHTGluZUVsZW1lbnQu
aAorKysgYi9XZWJDb3JlL3N2Zy9TVkdMaW5lRWxlbWVudC5oCkBAIC00Nyw3ICs0Nyw3IEBAIG5h
bWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgdmlydHVhbCB2b2lkIHN2Z0F0dHJpYnV0ZUNoYW5n
ZWQoY29uc3QgUXVhbGlmaWVkTmFtZSYpOwogICAgICAgICB2aXJ0dWFsIHZvaWQgc3luY2hyb25p
emVQcm9wZXJ0eShjb25zdCBRdWFsaWZpZWROYW1lJik7CiAKLSAgICAgICAgdmlydHVhbCBQYXRo
IHRvUGF0aERhdGEoKSBjb25zdDsKKyAgICAgICAgdmlydHVhbCB2b2lkIHRvUGF0aERhdGEoUGF0
aCYpIGNvbnN0OwogCiAgICAgICAgIHZpcnR1YWwgYm9vbCBzdXBwb3J0c01hcmtlcnMoKSBjb25z
dCB7IHJldHVybiB0cnVlOyB9CiAKZGlmZiAtLWdpdCBhL1dlYkNvcmUvc3ZnL1NWR1BhdGhFbGVt
ZW50LmNwcCBiL1dlYkNvcmUvc3ZnL1NWR1BhdGhFbGVtZW50LmNwcAppbmRleCBkMWZjMTFiLi42
ZjIyMmVkIDEwMDY0NAotLS0gYS9XZWJDb3JlL3N2Zy9TVkdQYXRoRWxlbWVudC5jcHAKKysrIGIv
V2ViQ29yZS9zdmcvU1ZHUGF0aEVsZW1lbnQuY3BwCkBAIC01NywxNCArNTcsMTggQEAgUGFzc1Jl
ZlB0cjxTVkdQYXRoRWxlbWVudD4gU1ZHUGF0aEVsZW1lbnQ6OmNyZWF0ZShjb25zdCBRdWFsaWZp
ZWROYW1lJiB0YWdOYW1lLAogZmxvYXQgU1ZHUGF0aEVsZW1lbnQ6OmdldFRvdGFsTGVuZ3RoKCkK
IHsKICAgICAvLyBGSVhNRTogdGhpcyBtYXkgd2lzaCB0byB1c2UgdGhlIHBhdGhTZWdMaXN0IGlu
c3RlYWQgb2YgdGhlIHBhdGhkYXRhIGlmIHRoYXQncyBjaGVhcGVyIHRvIGJ1aWxkIChvciBjYWNo
ZWQpCi0gICAgcmV0dXJuIHRvUGF0aERhdGEoKS5sZW5ndGgoKTsKKyAgICBQYXRoIHBhdGg7Cisg
ICAgdG9QYXRoRGF0YShwYXRoKTsKKyAgICByZXR1cm4gcGF0aC5sZW5ndGgoKTsKIH0KIAogRmxv
YXRQb2ludCBTVkdQYXRoRWxlbWVudDo6Z2V0UG9pbnRBdExlbmd0aChmbG9hdCBsZW5ndGgpCiB7
CiAgICAgLy8gRklYTUU6IHRoaXMgbWF5IHdpc2ggdG8gdXNlIHRoZSBwYXRoU2VnTGlzdCBpbnN0
ZWFkIG9mIHRoZSBwYXRoZGF0YSBpZiB0aGF0J3MgY2hlYXBlciB0byBidWlsZCAob3IgY2FjaGVk
KQogICAgIGJvb2wgb2sgPSBmYWxzZTsKLSAgICByZXR1cm4gdG9QYXRoRGF0YSgpLnBvaW50QXRM
ZW5ndGgobGVuZ3RoLCBvayk7CisgICAgUGF0aCBwYXRoOworICAgIHRvUGF0aERhdGEocGF0aCk7
CisgICAgcmV0dXJuIHBhdGgucG9pbnRBdExlbmd0aChsZW5ndGgsIG9rKTsKIH0KIAogdW5zaWdu
ZWQgbG9uZyBTVkdQYXRoRWxlbWVudDo6Z2V0UGF0aFNlZ0F0TGVuZ3RoKGZsb2F0IGxlbmd0aCkK
QEAgLTI2MiwxMiArMjY2LDEwIEBAIFNWR1BhdGhTZWdMaXN0KiBTVkdQYXRoRWxlbWVudDo6YW5p
bWF0ZWROb3JtYWxpemVkUGF0aFNlZ0xpc3QoKSBjb25zdAogICAgIHJldHVybiAwOwogfQogCi1Q
YXRoIFNWR1BhdGhFbGVtZW50Ojp0b1BhdGhEYXRhKCkgY29uc3QKK3ZvaWQgU1ZHUGF0aEVsZW1l
bnQ6OnRvUGF0aERhdGEoUGF0aCYgcGF0aCkgY29uc3QKIHsKLSAgICBQYXRoIHJlc3VsdDsKICAg
ICBTVkdQYXRoUGFyc2VyRmFjdG9yeSogZmFjdG9yeSA9IFNWR1BhdGhQYXJzZXJGYWN0b3J5Ojpz
ZWxmKCk7Ci0gICAgZmFjdG9yeS0+YnVpbGRQYXRoRnJvbVNWR1BhdGhTZWdMaXN0KHBhdGhTZWdM
aXN0KCksIHJlc3VsdCk7Ci0gICAgcmV0dXJuIHJlc3VsdDsKKyAgICBmYWN0b3J5LT5idWlsZFBh
dGhGcm9tU1ZHUGF0aFNlZ0xpc3QocGF0aFNlZ0xpc3QoKSwgcGF0aCk7CiB9CiAKIH0KZGlmZiAt
LWdpdCBhL1dlYkNvcmUvc3ZnL1NWR1BhdGhFbGVtZW50LmggYi9XZWJDb3JlL3N2Zy9TVkdQYXRo
RWxlbWVudC5oCmluZGV4IGNjNGU3YmQuLjM5NDk4M2QgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvc3Zn
L1NWR1BhdGhFbGVtZW50LmgKKysrIGIvV2ViQ29yZS9zdmcvU1ZHUGF0aEVsZW1lbnQuaApAQCAt
ODksNyArODksNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIHZpcnR1YWwgU1ZHUGF0
aFNlZ0xpc3QqIGFuaW1hdGVkUGF0aFNlZ0xpc3QoKSBjb25zdDsKICAgICAgICAgdmlydHVhbCBT
VkdQYXRoU2VnTGlzdCogYW5pbWF0ZWROb3JtYWxpemVkUGF0aFNlZ0xpc3QoKSBjb25zdDsKIAot
ICAgICAgICB2aXJ0dWFsIFBhdGggdG9QYXRoRGF0YSgpIGNvbnN0OworICAgICAgICB2aXJ0dWFs
IHZvaWQgdG9QYXRoRGF0YShQYXRoJikgY29uc3Q7CiAKICAgICBwcml2YXRlOgogICAgICAgICBT
VkdQYXRoRWxlbWVudChjb25zdCBRdWFsaWZpZWROYW1lJiwgRG9jdW1lbnQqKTsKZGlmZiAtLWdp
dCBhL1dlYkNvcmUvc3ZnL1NWR1BvbHlnb25FbGVtZW50LmNwcCBiL1dlYkNvcmUvc3ZnL1NWR1Bv
bHlnb25FbGVtZW50LmNwcAppbmRleCA1N2UyZDUzLi41MjRjZDJmIDEwMDY0NAotLS0gYS9XZWJD
b3JlL3N2Zy9TVkdQb2x5Z29uRWxlbWVudC5jcHAKKysrIGIvV2ViQ29yZS9zdmcvU1ZHUG9seWdv
bkVsZW1lbnQuY3BwCkBAIC0zNywyMiArMzcsMTkgQEAgUGFzc1JlZlB0cjxTVkdQb2x5Z29uRWxl
bWVudD4gU1ZHUG9seWdvbkVsZW1lbnQ6OmNyZWF0ZShjb25zdCBRdWFsaWZpZWROYW1lJiB0YWcK
ICAgICByZXR1cm4gYWRvcHRSZWYobmV3IFNWR1BvbHlnb25FbGVtZW50KHRhZ05hbWUsIGRvY3Vt
ZW50KSk7CiB9CiAKLVBhdGggU1ZHUG9seWdvbkVsZW1lbnQ6OnRvUGF0aERhdGEoKSBjb25zdAor
dm9pZCBTVkdQb2x5Z29uRWxlbWVudDo6dG9QYXRoRGF0YShQYXRoJiBwYXRoKSBjb25zdAogewot
ICAgIFBhdGggcG9seURhdGE7Ci0KICAgICBpbnQgbGVuID0gcG9pbnRzKCktPm51bWJlck9mSXRl
bXMoKTsKICAgICBpZiAobGVuIDwgMSkKLSAgICAgICAgcmV0dXJuIHBvbHlEYXRhOworICAgICAg
ICByZXR1cm47CiAgICAgCiAgICAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7Ci0gICAgcG9seURhdGEu
bW92ZVRvKHBvaW50cygpLT5nZXRJdGVtKDAsIGVjKSk7CisgICAgcGF0aC5tb3ZlVG8ocG9pbnRz
KCktPmdldEl0ZW0oMCwgZWMpKTsKIAogICAgIGZvciAoaW50IGkgPSAxOyBpIDwgbGVuOyArK2kp
Ci0gICAgICAgIHBvbHlEYXRhLmFkZExpbmVUbyhwb2ludHMoKS0+Z2V0SXRlbShpLCBlYykpOwor
ICAgICAgICBwYXRoLmFkZExpbmVUbyhwb2ludHMoKS0+Z2V0SXRlbShpLCBlYykpOwogCi0gICAg
cG9seURhdGEuY2xvc2VTdWJwYXRoKCk7Ci0gICAgcmV0dXJuIHBvbHlEYXRhOworICAgIHBhdGgu
Y2xvc2VTdWJwYXRoKCk7CiB9CiAKIH0KZGlmZiAtLWdpdCBhL1dlYkNvcmUvc3ZnL1NWR1BvbHln
b25FbGVtZW50LmggYi9XZWJDb3JlL3N2Zy9TVkdQb2x5Z29uRWxlbWVudC5oCmluZGV4IDdhNWJk
YTguLjVjODhkMTEgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvc3ZnL1NWR1BvbHlnb25FbGVtZW50LmgK
KysrIGIvV2ViQ29yZS9zdmcvU1ZHUG9seWdvbkVsZW1lbnQuaApAQCAtMzMsNyArMzMsNyBAQCBu
YW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgcHJpdmF0ZToKICAgICAgICAgU1ZHUG9seWdvbkVsZW1l
bnQoY29uc3QgUXVhbGlmaWVkTmFtZSYsIERvY3VtZW50Kik7CiAKLSAgICAgICAgdmlydHVhbCBQ
YXRoIHRvUGF0aERhdGEoKSBjb25zdDsKKyAgICAgICAgdmlydHVhbCB2b2lkIHRvUGF0aERhdGEo
UGF0aCYpIGNvbnN0OwogICAgIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdp
dCBhL1dlYkNvcmUvc3ZnL1NWR1BvbHlsaW5lRWxlbWVudC5jcHAgYi9XZWJDb3JlL3N2Zy9TVkdQ
b2x5bGluZUVsZW1lbnQuY3BwCmluZGV4IDdlYzg0MzEuLmU5NGVjODQgMTAwNjQ0Ci0tLSBhL1dl
YkNvcmUvc3ZnL1NWR1BvbHlsaW5lRWxlbWVudC5jcHAKKysrIGIvV2ViQ29yZS9zdmcvU1ZHUG9s
eWxpbmVFbGVtZW50LmNwcApAQCAtMzcsMjEgKzM3LDE3IEBAIFBhc3NSZWZQdHI8U1ZHUG9seWxp
bmVFbGVtZW50PiBTVkdQb2x5bGluZUVsZW1lbnQ6OmNyZWF0ZShjb25zdCBRdWFsaWZpZWROYW1l
JiB0CiAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBTVkdQb2x5bGluZUVsZW1lbnQodGFnTmFtZSwg
ZG9jdW1lbnQpKTsKIH0KIAotUGF0aCBTVkdQb2x5bGluZUVsZW1lbnQ6OnRvUGF0aERhdGEoKSBj
b25zdAordm9pZCBTVkdQb2x5bGluZUVsZW1lbnQ6OnRvUGF0aERhdGEoUGF0aCYgcGF0aCkgY29u
c3QKIHsKLSAgICBQYXRoIHBvbHlEYXRhOwotCiAgICAgaW50IGxlbiA9IHBvaW50cygpLT5udW1i
ZXJPZkl0ZW1zKCk7CiAgICAgaWYgKGxlbiA8IDEpCi0gICAgICAgIHJldHVybiBwb2x5RGF0YTsK
KyAgICAgICAgcmV0dXJuOwogCiAgICAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7Ci0gICAgcG9seURh
dGEubW92ZVRvKHBvaW50cygpLT5nZXRJdGVtKDAsIGVjKSk7CisgICAgcGF0aC5tb3ZlVG8ocG9p
bnRzKCktPmdldEl0ZW0oMCwgZWMpKTsKIAogICAgIGZvciAoaW50IGkgPSAxOyBpIDwgbGVuOyAr
K2kpCi0gICAgICAgIHBvbHlEYXRhLmFkZExpbmVUbyhwb2ludHMoKS0+Z2V0SXRlbShpLCBlYykp
OwotICAgIAotICAgIHJldHVybiBwb2x5RGF0YTsKKyAgICAgICAgcGF0aC5hZGRMaW5lVG8ocG9p
bnRzKCktPmdldEl0ZW0oaSwgZWMpKTsKIH0KIAogfQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9zdmcv
U1ZHUG9seWxpbmVFbGVtZW50LmggYi9XZWJDb3JlL3N2Zy9TVkdQb2x5bGluZUVsZW1lbnQuaApp
bmRleCBkM2ZlNTU1Li5kZmNmY2RhIDEwMDY0NAotLS0gYS9XZWJDb3JlL3N2Zy9TVkdQb2x5bGlu
ZUVsZW1lbnQuaAorKysgYi9XZWJDb3JlL3N2Zy9TVkdQb2x5bGluZUVsZW1lbnQuaApAQCAtMzMs
NyArMzMsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgcHJpdmF0ZToKICAgICAgICAgU1ZH
UG9seWxpbmVFbGVtZW50KGNvbnN0IFF1YWxpZmllZE5hbWUmLCBEb2N1bWVudCopOwogCi0gICAg
ICAgIHZpcnR1YWwgUGF0aCB0b1BhdGhEYXRhKCkgY29uc3Q7CisgICAgICAgIHZpcnR1YWwgdm9p
ZCB0b1BhdGhEYXRhKFBhdGgmKSBjb25zdDsKICAgICB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJD
b3JlCmRpZmYgLS1naXQgYS9XZWJDb3JlL3N2Zy9TVkdSZWN0RWxlbWVudC5jcHAgYi9XZWJDb3Jl
L3N2Zy9TVkdSZWN0RWxlbWVudC5jcHAKaW5kZXggOWI2ODMwZS4uOGU1NWNkMCAxMDA2NDQKLS0t
IGEvV2ViQ29yZS9zdmcvU1ZHUmVjdEVsZW1lbnQuY3BwCisrKyBiL1dlYkNvcmUvc3ZnL1NWR1Jl
Y3RFbGVtZW50LmNwcApAQCAtMTQ3LDE5ICsxNDcsMzUgQEAgdm9pZCBTVkdSZWN0RWxlbWVudDo6
c3luY2hyb25pemVQcm9wZXJ0eShjb25zdCBRdWFsaWZpZWROYW1lJiBhdHRyTmFtZSkKICAgICAg
ICAgc3luY2hyb25pemVFeHRlcm5hbFJlc291cmNlc1JlcXVpcmVkKCk7CiB9CiAKLVBhdGggU1ZH
UmVjdEVsZW1lbnQ6OnRvUGF0aERhdGEoKSBjb25zdAordm9pZCBTVkdSZWN0RWxlbWVudDo6dG9Q
YXRoRGF0YShQYXRoJiBwYXRoKSBjb25zdAogewotICAgIEZsb2F0UmVjdCByZWN0KHgoKS52YWx1
ZSh0aGlzKSwgeSgpLnZhbHVlKHRoaXMpLCB3aWR0aCgpLnZhbHVlKHRoaXMpLCBoZWlnaHQoKS52
YWx1ZSh0aGlzKSk7CisgICAgZmxvYXQgd2lkdGhWYWx1ZSA9IHdpZHRoKCkudmFsdWUodGhpcyk7
CisgICAgaWYgKHdpZHRoVmFsdWUgPD0gMCkKKyAgICAgICAgcmV0dXJuOworCisgICAgZmxvYXQg
aGVpZ2h0VmFsdWUgPSBoZWlnaHQoKS52YWx1ZSh0aGlzKTsKKyAgICBpZiAoaGVpZ2h0VmFsdWUg
PD0gMCkKKyAgICAgICAgcmV0dXJuOworCisgICAgZmxvYXQgeFZhbHVlID0geCgpLnZhbHVlKHRo
aXMpOworICAgIGZsb2F0IHlWYWx1ZSA9IHkoKS52YWx1ZSh0aGlzKTsKKworICAgIEZsb2F0UmVj
dCByZWN0KHhWYWx1ZSwgeVZhbHVlLCB3aWR0aFZhbHVlLCBoZWlnaHRWYWx1ZSk7CiAKICAgICBi
b29sIGhhc1J4ID0gaGFzQXR0cmlidXRlKFNWR05hbWVzOjpyeEF0dHIpOwogICAgIGJvb2wgaGFz
UnkgPSBoYXNBdHRyaWJ1dGUoU1ZHTmFtZXM6OnJ5QXR0cik7CiAgICAgaWYgKGhhc1J4IHx8IGhh
c1J5KSB7Ci0gICAgICAgIGZsb2F0IF9yeCA9IGhhc1J4ID8gcngoKS52YWx1ZSh0aGlzKSA6IHJ5
KCkudmFsdWUodGhpcyk7Ci0gICAgICAgIGZsb2F0IF9yeSA9IGhhc1J5ID8gcnkoKS52YWx1ZSh0
aGlzKSA6IHJ4KCkudmFsdWUodGhpcyk7Ci0gICAgICAgIHJldHVybiBQYXRoOjpjcmVhdGVSb3Vu
ZGVkUmVjdGFuZ2xlKHJlY3QsIEZsb2F0U2l6ZShfcngsIF9yeSkpOworICAgICAgICBmbG9hdCBy
eFZhbHVlID0gcngoKS52YWx1ZSh0aGlzKTsKKyAgICAgICAgZmxvYXQgcnlWYWx1ZSA9IHJ5KCku
dmFsdWUodGhpcyk7CisgICAgICAgIGlmICghaGFzUngpCisgICAgICAgICAgICByeFZhbHVlID0g
cnlWYWx1ZTsKKyAgICAgICAgZWxzZSBpZiAoIWhhc1J5KQorICAgICAgICAgICAgcnlWYWx1ZSA9
IHJ4VmFsdWU7CisgICAgICAgIHBhdGguYWRkUm91bmRlZFJlY3RhbmdsZShyZWN0LCBGbG9hdFNp
emUocnhWYWx1ZSwgcnlWYWx1ZSkpOworICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgcmV0
dXJuIFBhdGg6OmNyZWF0ZVJlY3RhbmdsZShyZWN0KTsKKyAgICBwYXRoLmFkZFJlY3QocmVjdCk7
CiB9CiAKIGJvb2wgU1ZHUmVjdEVsZW1lbnQ6OnNlbGZIYXNSZWxhdGl2ZUxlbmd0aHMoKSBjb25z
dApkaWZmIC0tZ2l0IGEvV2ViQ29yZS9zdmcvU1ZHUmVjdEVsZW1lbnQuaCBiL1dlYkNvcmUvc3Zn
L1NWR1JlY3RFbGVtZW50LmgKaW5kZXggMzgyMDc4ZC4uNjY4MzY2YiAxMDA2NDQKLS0tIGEvV2Vi
Q29yZS9zdmcvU1ZHUmVjdEVsZW1lbnQuaAorKysgYi9XZWJDb3JlL3N2Zy9TVkdSZWN0RWxlbWVu
dC5oCkBAIC00NSw3ICs0NSw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgdmlydHVh
bCB2b2lkIHN2Z0F0dHJpYnV0ZUNoYW5nZWQoY29uc3QgUXVhbGlmaWVkTmFtZSYpOwogICAgICAg
ICB2aXJ0dWFsIHZvaWQgc3luY2hyb25pemVQcm9wZXJ0eShjb25zdCBRdWFsaWZpZWROYW1lJik7
CiAKLSAgICAgICAgdmlydHVhbCBQYXRoIHRvUGF0aERhdGEoKSBjb25zdDsKKyAgICAgICAgdmly
dHVhbCB2b2lkIHRvUGF0aERhdGEoUGF0aCYpIGNvbnN0OwogCiAgICAgICAgIHZpcnR1YWwgYm9v
bCBzZWxmSGFzUmVsYXRpdmVMZW5ndGhzKCkgY29uc3Q7CiAKZGlmZiAtLWdpdCBhL1dlYkNvcmUv
c3ZnL1NWR1N0eWxlZFRyYW5zZm9ybWFibGVFbGVtZW50LmNwcCBiL1dlYkNvcmUvc3ZnL1NWR1N0
eWxlZFRyYW5zZm9ybWFibGVFbGVtZW50LmNwcAppbmRleCA0NDE5NDQzLi45YjM0MjAzIDEwMDY0
NAotLS0gYS9XZWJDb3JlL3N2Zy9TVkdTdHlsZWRUcmFuc2Zvcm1hYmxlRWxlbWVudC5jcHAKKysr
IGIvV2ViQ29yZS9zdmcvU1ZHU3R5bGVkVHJhbnNmb3JtYWJsZUVsZW1lbnQuY3BwCkBAIC0xMTEs
MTIgKzExMSwxMSBAQCBSZW5kZXJPYmplY3QqIFNWR1N0eWxlZFRyYW5zZm9ybWFibGVFbGVtZW50
OjpjcmVhdGVSZW5kZXJlcihSZW5kZXJBcmVuYSogYXJlbmEsCiAgICAgcmV0dXJuIG5ldyAoYXJl
bmEpIFJlbmRlclNWR1BhdGgodGhpcyk7CiB9CiAKLVBhdGggU1ZHU3R5bGVkVHJhbnNmb3JtYWJs
ZUVsZW1lbnQ6OnRvQ2xpcFBhdGgoKSBjb25zdAordm9pZCBTVkdTdHlsZWRUcmFuc2Zvcm1hYmxl
RWxlbWVudDo6dG9DbGlwUGF0aChQYXRoJiBwYXRoKSBjb25zdAogewotICAgIFBhdGggcGF0aERh
dGEgPSB0b1BhdGhEYXRhKCk7CisgICAgdG9QYXRoRGF0YShwYXRoKTsKICAgICAvLyBGSVhNRTog
SG93IGRvIHdlIGtub3cgdGhlIGVsZW1lbnQgaGFzIGRvbmUgYSBsYXlvdXQ/Ci0gICAgcGF0aERh
dGEudHJhbnNmb3JtKGFuaW1hdGVkTG9jYWxUcmFuc2Zvcm0oKSk7Ci0gICAgcmV0dXJuIHBhdGhE
YXRhOworICAgIHBhdGgudHJhbnNmb3JtKGFuaW1hdGVkTG9jYWxUcmFuc2Zvcm0oKSk7CiB9CiAK
IH0KZGlmZiAtLWdpdCBhL1dlYkNvcmUvc3ZnL1NWR1N0eWxlZFRyYW5zZm9ybWFibGVFbGVtZW50
LmggYi9XZWJDb3JlL3N2Zy9TVkdTdHlsZWRUcmFuc2Zvcm1hYmxlRWxlbWVudC5oCmluZGV4IDI5
MGY3ZjguLjUzNDljZmEgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvc3ZnL1NWR1N0eWxlZFRyYW5zZm9y
bWFibGVFbGVtZW50LmgKKysrIGIvV2ViQ29yZS9zdmcvU1ZHU3R5bGVkVHJhbnNmb3JtYWJsZUVs
ZW1lbnQuaApAQCAtNDksOCArNDksOCBAQCBwdWJsaWM6CiAgICAgYm9vbCBpc0tub3duQXR0cmli
dXRlKGNvbnN0IFF1YWxpZmllZE5hbWUmKTsKIAogICAgIC8vICJiYXNlIGNsYXNzIiBtZXRob2Rz
IGZvciBhbGwgdGhlIGVsZW1lbnRzIHdoaWNoIHJlbmRlciBhcyBwYXRocwotICAgIHZpcnR1YWwg
UGF0aCB0b1BhdGhEYXRhKCkgY29uc3QgeyByZXR1cm4gUGF0aCgpOyB9Ci0gICAgdmlydHVhbCBQ
YXRoIHRvQ2xpcFBhdGgoKSBjb25zdDsKKyAgICB2aXJ0dWFsIHZvaWQgdG9QYXRoRGF0YShQYXRo
JikgY29uc3QgeyB9CisgICAgdmlydHVhbCB2b2lkIHRvQ2xpcFBhdGgoUGF0aCYpIGNvbnN0Owog
ICAgIHZpcnR1YWwgUmVuZGVyT2JqZWN0KiBjcmVhdGVSZW5kZXJlcihSZW5kZXJBcmVuYSosIFJl
bmRlclN0eWxlKik7CiAKIHByb3RlY3RlZDoKZGlmZiAtLWdpdCBhL1dlYkNvcmUvc3ZnL1NWR1Vz
ZUVsZW1lbnQuY3BwIGIvV2ViQ29yZS9zdmcvU1ZHVXNlRWxlbWVudC5jcHAKaW5kZXggNzgyZWZh
OC4uMzRlN2Q4OCAxMDA2NDQKLS0tIGEvV2ViQ29yZS9zdmcvU1ZHVXNlRWxlbWVudC5jcHAKKysr
IGIvV2ViQ29yZS9zdmcvU1ZHVXNlRWxlbWVudC5jcHAKQEAgLTYyNCwyNSArNjI0LDIyIEBAIHN0
YXRpYyBib29sIGlzRGlyZWN0UmVmZXJlbmNlKE5vZGUqIG4pCiAgICAgICAgICAgIG4tPmhhc1Rh
Z05hbWUoU1ZHTmFtZXM6OnRleHRUYWcpOwogfQogCi1QYXRoIFNWR1VzZUVsZW1lbnQ6OnRvQ2xp
cFBhdGgoKSBjb25zdAordm9pZCBTVkdVc2VFbGVtZW50Ojp0b0NsaXBQYXRoKFBhdGgmIHBhdGgp
IGNvbnN0CiB7CiAgICAgTm9kZSogbiA9IG1fdGFyZ2V0RWxlbWVudEluc3RhbmNlID8gbV90YXJn
ZXRFbGVtZW50SW5zdGFuY2UtPnNoYWRvd1RyZWVFbGVtZW50KCkgOiAwOwogICAgIGlmICghbikK
LSAgICAgICAgcmV0dXJuIFBhdGgoKTsKKyAgICAgICAgcmV0dXJuOwogCiAgICAgaWYgKG4tPmlz
U1ZHRWxlbWVudCgpICYmIHN0YXRpY19jYXN0PFNWR0VsZW1lbnQqPihuKS0+aXNTdHlsZWRUcmFu
c2Zvcm1hYmxlKCkpIHsKICAgICAgICAgaWYgKCFpc0RpcmVjdFJlZmVyZW5jZShuKSkKICAgICAg
ICAgICAgIC8vIFNwZWM6IEluZGlyZWN0IHJlZmVyZW5jZXMgYXJlIGFuIGVycm9yICgxNC4zLjUp
CiAgICAgICAgICAgICBkb2N1bWVudCgpLT5hY2Nlc3NTVkdFeHRlbnNpb25zKCktPnJlcG9ydEVy
cm9yKCJOb3QgYWxsb3dlZCB0byB1c2UgaW5kaXJlY3QgcmVmZXJlbmNlIGluIDxjbGlwLXBhdGg+
Iik7CiAgICAgICAgIGVsc2UgewotICAgICAgICAgICAgUGF0aCBjbGlwUGF0aCA9IHN0YXRpY19j
YXN0PFNWR1N0eWxlZFRyYW5zZm9ybWFibGVFbGVtZW50Kj4obiktPnRvQ2xpcFBhdGgoKTsKLSAg
ICAgICAgICAgIGNsaXBQYXRoLnRyYW5zbGF0ZShGbG9hdFNpemUoeCgpLnZhbHVlKHRoaXMpLCB5
KCkudmFsdWUodGhpcykpKTsKLSAgICAgICAgICAgIGNsaXBQYXRoLnRyYW5zZm9ybShhbmltYXRl
ZExvY2FsVHJhbnNmb3JtKCkpOwotICAgICAgICAgICAgcmV0dXJuIGNsaXBQYXRoOworICAgICAg
ICAgICAgc3RhdGljX2Nhc3Q8U1ZHU3R5bGVkVHJhbnNmb3JtYWJsZUVsZW1lbnQqPihuKS0+dG9D
bGlwUGF0aChwYXRoKTsKKyAgICAgICAgICAgIHBhdGgudHJhbnNsYXRlKEZsb2F0U2l6ZSh4KCku
dmFsdWUodGhpcyksIHkoKS52YWx1ZSh0aGlzKSkpOworICAgICAgICAgICAgcGF0aC50cmFuc2Zv
cm0oYW5pbWF0ZWRMb2NhbFRyYW5zZm9ybSgpKTsKICAgICAgICAgfQogICAgIH0KLQotICAgIHJl
dHVybiBQYXRoKCk7CiB9CiAKIFJlbmRlck9iamVjdCogU1ZHVXNlRWxlbWVudDo6cmVuZGVyZXJD
bGlwQ2hpbGQoKSBjb25zdApkaWZmIC0tZ2l0IGEvV2ViQ29yZS9zdmcvU1ZHVXNlRWxlbWVudC5o
IGIvV2ViQ29yZS9zdmcvU1ZHVXNlRWxlbWVudC5oCmluZGV4IDkzNjZkMjUuLmI4YmE3MWQgMTAw
NjQ0Ci0tLSBhL1dlYkNvcmUvc3ZnL1NWR1VzZUVsZW1lbnQuaAorKysgYi9XZWJDb3JlL3N2Zy9T
VkdVc2VFbGVtZW50LmgKQEAgLTY3LDcgKzY3LDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAg
ICAgICB2aXJ0dWFsIHZvaWQgYXR0YWNoKCk7CiAgICAgICAgIHZpcnR1YWwgdm9pZCBkZXRhY2go
KTsKIAotICAgICAgICB2aXJ0dWFsIFBhdGggdG9DbGlwUGF0aCgpIGNvbnN0OworICAgICAgICB2
aXJ0dWFsIHZvaWQgdG9DbGlwUGF0aChQYXRoJikgY29uc3Q7CiAKICAgICAgICAgc3RhdGljIHZv
aWQgcmVtb3ZlRGlzYWxsb3dlZEVsZW1lbnRzRnJvbVN1YnRyZWUoTm9kZSogZWxlbWVudCk7CiAK
</data>
<flag name="review"
          id="60211"
          type_id="1"
          status="-"
          setter="zimmermann"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>70431</attachid>
            <date>2010-10-11 05:29:47 -0700</date>
            <delta_ts>2010-10-11 10:45:53 -0700</delta_ts>
            <desc>Proposed patch v6</desc>
            <filename>bug-46052-v6.diff</filename>
            <type>text/plain</type>
            <size>46149</size>
            <attacher name="Andreas Kling">kling</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ2hhbmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXgg
MTQ1MGEyMS4uYzgzNTBjMSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvV2Vi
Q29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSw4MSBAQAorMjAxMC0xMC0xMSAgQW5kcmVhcyBLbGlu
ZyAgPGtsaW5nQHdlYmtpdC5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BT
ISkuCisKKyAgICAgICAgU1ZHOiBSZW1vdmUgImNyZWF0ZSIgbWV0aG9kcyBhbmQgdXNlIHBvcnQt
c3BlY2lmaWMgImFkZCIgY291bnRlcnBhcnRzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD00NjA1MgorCisgICAgICAgIENpcmNsZXMgYW5kIGVsbGlwc2Vz
IHdpbGwgYmUgc2lnbmlmaWNhbnRseSBmYXN0ZXIgb24gcGxhdGZvcm1zIHRoYXQKKyAgICAgICAg
aW1wbGVtZW50IFBhdGg6OmFkZEVsbGlwc2UoKSBpbiBhIHNhbmUgZmFzaGlvbi4KKworICAgICAg
ICAqIG1hdGhtbC9SZW5kZXJNYXRoTUxSb290LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRl
ck1hdGhNTFJvb3Q6OnBhaW50KToKKyAgICAgICAgKiBtYXRobWwvUmVuZGVyTWF0aE1MU3F1YXJl
Um9vdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJNYXRoTUxTcXVhcmVSb290OjpwYWlu
dCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0LmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6YWRkUm91bmRlZFJlY3RDbGlwKToKKyAg
ICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6Y2xpcE91dFJvdW5kZWRSZWN0KToKKyAg
ICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9QYXRoLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OnBh
dGhMZW5ndGhBcHBsaWVyRnVuY3Rpb24pOgorICAgICAgICAoV2ViQ29yZTo6UGF0aDo6YWRkUm91
bmRlZFJlY3QpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL1BhdGguaDoKKyAgICAgICAg
KiBwbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9Db250ZXh0U2hhZG93Q2Fpcm8uY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6Q29udGV4dFNoYWRvdzo6ZHJhd1JlY3RTaGFkb3dXaXRob3V0VGlsaW5nKToK
KyAgICAgICAgKFdlYkNvcmU6OkNvbnRleHRTaGFkb3c6OmRyYXdSZWN0U2hhZG93KToKKyAgICAg
ICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9HcmFwaGljc0NvbnRleHRDYWlyby5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OmRyYXdGb2N1c1JpbmcpOgorICAgICAg
ICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpkcmF3VGlsZWRTaGFkb3cpOgorICAgICAgICAo
V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpmaWxsUm91bmRlZFJlY3QpOgorICAgICAgICAqIHBs
YXRmb3JtL2dyYXBoaWNzL2NnL0dyYXBoaWNzQ29udGV4dENHLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OkdyYXBoaWNzQ29udGV4dDo6ZmlsbFJvdW5kZWRSZWN0KToKKyAgICAgICAgKiBwbGF0Zm9y
bS9ncmFwaGljcy9xdC9HcmFwaGljc0NvbnRleHRRdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHQ6OmZpbGxSb3VuZGVkUmVjdCk6CisgICAgICAgICogcmVuZGVyaW5nL1Jl
bmRlckJveE1vZGVsT2JqZWN0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJveE1vZGVs
T2JqZWN0OjpwYWludEJvcmRlcik6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCb3hNb2RlbE9i
amVjdDo6cGFpbnRCb3hTaGFkb3cpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJFbWJlZGRl
ZE9iamVjdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJFbWJlZGRlZE9iamVjdDo6Z2V0
UmVwbGFjZW1lbnRUZXh0R2VvbWV0cnkpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJTVkdS
ZXNvdXJjZUNsaXBwZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU1ZHUmVzb3VyY2VD
bGlwcGVyOjpwYXRoT25seUNsaXBwaW5nKToKKyAgICAgICAgKiByZW5kZXJpbmcvc3ZnL1JlbmRl
clNWR1BhdGguY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU1ZHUGF0aDo6bGF5b3V0KToK
KyAgICAgICAgKiByZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1RleHRQYXRoLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OlJlbmRlclNWR1RleHRQYXRoOjpsYXlvdXRQYXRoKToKKyAgICAgICAgKiByZW5k
ZXJpbmcvc3ZnL1NWR0lubGluZVRleHRCb3guY3BwOgorICAgICAgICAoV2ViQ29yZTo6U1ZHSW5s
aW5lVGV4dEJveDo6cGFpbnREZWNvcmF0aW9uV2l0aFN0eWxlKToKKyAgICAgICAgKiBzdmcvU1ZH
QW5pbWF0ZU1vdGlvbkVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U1ZHQW5pbWF0ZU1v
dGlvbkVsZW1lbnQ6OmFuaW1hdGlvblBhdGgpOgorICAgICAgICAqIHN2Zy9TVkdDaXJjbGVFbGVt
ZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR0NpcmNsZUVsZW1lbnQ6OnRvUGF0aERhdGEp
OgorICAgICAgICAqIHN2Zy9TVkdDaXJjbGVFbGVtZW50Lmg6CisgICAgICAgICogc3ZnL1NWR0Vs
bGlwc2VFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR0VsbGlwc2VFbGVtZW50Ojp0
b1BhdGhEYXRhKToKKyAgICAgICAgKiBzdmcvU1ZHRWxsaXBzZUVsZW1lbnQuaDoKKyAgICAgICAg
KiBzdmcvU1ZHTGluZUVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U1ZHTGluZUVsZW1l
bnQ6OnRvUGF0aERhdGEpOgorICAgICAgICAqIHN2Zy9TVkdMaW5lRWxlbWVudC5oOgorICAgICAg
ICAqIHN2Zy9TVkdQYXRoRWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTVkdQYXRoRWxl
bWVudDo6Z2V0VG90YWxMZW5ndGgpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHUGF0aEVsZW1lbnQ6
OmdldFBvaW50QXRMZW5ndGgpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHUGF0aEVsZW1lbnQ6OnRv
UGF0aERhdGEpOgorICAgICAgICAqIHN2Zy9TVkdQYXRoRWxlbWVudC5oOgorICAgICAgICAqIHN2
Zy9TVkdQb2x5Z29uRWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTVkdQb2x5Z29uRWxl
bWVudDo6dG9QYXRoRGF0YSk6CisgICAgICAgICogc3ZnL1NWR1BvbHlnb25FbGVtZW50Lmg6Cisg
ICAgICAgICogc3ZnL1NWR1BvbHlsaW5lRWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpT
VkdQb2x5bGluZUVsZW1lbnQ6OnRvUGF0aERhdGEpOgorICAgICAgICAqIHN2Zy9TVkdQb2x5bGlu
ZUVsZW1lbnQuaDoKKyAgICAgICAgKiBzdmcvU1ZHUmVjdEVsZW1lbnQuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6U1ZHUmVjdEVsZW1lbnQ6OnRvUGF0aERhdGEpOgorICAgICAgICAqIHN2Zy9TVkdS
ZWN0RWxlbWVudC5oOgorICAgICAgICAqIHN2Zy9TVkdTdHlsZWRUcmFuc2Zvcm1hYmxlRWxlbWVu
dC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTVkdTdHlsZWRUcmFuc2Zvcm1hYmxlRWxlbWVudDo6
dG9DbGlwUGF0aCk6CisgICAgICAgICogc3ZnL1NWR1N0eWxlZFRyYW5zZm9ybWFibGVFbGVtZW50
Lmg6CisgICAgICAgIChXZWJDb3JlOjpTVkdTdHlsZWRUcmFuc2Zvcm1hYmxlRWxlbWVudDo6dG9Q
YXRoRGF0YSk6CisgICAgICAgICogc3ZnL1NWR1VzZUVsZW1lbnQuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6U1ZHVXNlRWxlbWVudDo6dG9DbGlwUGF0aCk6CisgICAgICAgICogc3ZnL1NWR1VzZUVs
ZW1lbnQuaDoKKwogMjAxMC0xMC0xMSAgS2ludWtvIFlhc3VkYSAgPGtpbnVrb0BjaHJvbWl1bS5v
cmc+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgRGF2aWQgTGV2aW4uCmRpZmYgLS1naXQgYS9XZWJD
b3JlL21hdGhtbC9SZW5kZXJNYXRoTUxSb290LmNwcCBiL1dlYkNvcmUvbWF0aG1sL1JlbmRlck1h
dGhNTFJvb3QuY3BwCmluZGV4IGRhMzAzYzkuLjk5YjVkYzYgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUv
bWF0aG1sL1JlbmRlck1hdGhNTFJvb3QuY3BwCisrKyBiL1dlYkNvcmUvbWF0aG1sL1JlbmRlck1h
dGhNTFJvb3QuY3BwCkBAIC0xOTAsOSArMTkwLDkgQEAgdm9pZCBSZW5kZXJNYXRoTUxSb290Ojpw
YWludChQYWludEluZm8mIGluZm8sIGludCB0eCwgaW50IHR5KQogICAgIGluZm8uY29udGV4dC0+
c2V0TGluZUNhcChTcXVhcmVDYXApOwogICAgIAogICAgIFBhdGggbGluZTsKLSAgICAKLSAgICBs
aW5lID0gbGluZS5jcmVhdGVMaW5lKGJvdHRvbUxlZnQsIHRvcExlZnQpOwotICAgIAorICAgIGxp
bmUubW92ZVRvKGJvdHRvbUxlZnQpOworICAgIGxpbmUuYWRkTGluZVRvKHRvcExlZnQpOworCiAg
ICAgaW5mby5jb250ZXh0LT5iZWdpblBhdGgoKTsKICAgICBpbmZvLmNvbnRleHQtPmFkZFBhdGgo
bGluZSk7CiAgICAgaW5mby5jb250ZXh0LT5zdHJva2VQYXRoKCk7CmRpZmYgLS1naXQgYS9XZWJD
b3JlL21hdGhtbC9SZW5kZXJNYXRoTUxTcXVhcmVSb290LmNwcCBiL1dlYkNvcmUvbWF0aG1sL1Jl
bmRlck1hdGhNTFNxdWFyZVJvb3QuY3BwCmluZGV4IDg2YWRkN2EuLmQyZTcwNDkgMTAwNjQ0Ci0t
LSBhL1dlYkNvcmUvbWF0aG1sL1JlbmRlck1hdGhNTFNxdWFyZVJvb3QuY3BwCisrKyBiL1dlYkNv
cmUvbWF0aG1sL1JlbmRlck1hdGhNTFNxdWFyZVJvb3QuY3BwCkBAIC0xNTYsOCArMTU2LDggQEAg
dm9pZCBSZW5kZXJNYXRoTUxTcXVhcmVSb290OjpwYWludChQYWludEluZm8mIGluZm8sIGludCB0
eCwgaW50IHR5KQogICAgIGluZm8uY29udGV4dC0+c2V0TGluZUNhcChTcXVhcmVDYXApOwogICAg
IAogICAgIFBhdGggbGluZTsKLSAgICAKLSAgICBsaW5lID0gbGluZS5jcmVhdGVMaW5lKGJvdHRv
bUxlZnQsIHRvcExlZnQpOworICAgIGxpbmUubW92ZVRvKGJvdHRvbUxlZnQpOworICAgIGxpbmUu
YWRkTGluZVRvKHRvcExlZnQpOwogICAgIAogICAgIGluZm8uY29udGV4dC0+YmVnaW5QYXRoKCk7
CiAgICAgaW5mby5jb250ZXh0LT5hZGRQYXRoKGxpbmUpOwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQuY3BwIGIvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9HcmFwaGljc0NvbnRleHQuY3BwCmluZGV4IDJjOTRiZWMuLjg1OWYzOGEgMTAwNjQ0
Ci0tLSBhL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0LmNwcAorKysg
Yi9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dC5jcHAKQEAgLTUwMCw3
ICs1MDAsOSBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6YWRkUm91bmRlZFJlY3RDbGlwKGNvbnN0
IEludFJlY3QmIHJlY3QsIGNvbnN0IEludFNpemUmIHRvcAogICAgIGlmIChwYWludGluZ0Rpc2Fi
bGVkKCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIGNsaXAoUGF0aDo6Y3JlYXRlUm91bmRlZFJl
Y3RhbmdsZShyZWN0LCB0b3BMZWZ0LCB0b3BSaWdodCwgYm90dG9tTGVmdCwgYm90dG9tUmlnaHQp
KTsKKyAgICBQYXRoIHBhdGg7CisgICAgcGF0aC5hZGRSb3VuZGVkUmVjdChyZWN0LCB0b3BMZWZ0
LCB0b3BSaWdodCwgYm90dG9tTGVmdCwgYm90dG9tUmlnaHQpOworICAgIGNsaXAocGF0aCk7CiB9
CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpjbGlwT3V0Um91bmRlZFJlY3QoY29uc3QgSW50UmVj
dCYgcmVjdCwgY29uc3QgSW50U2l6ZSYgdG9wTGVmdCwgY29uc3QgSW50U2l6ZSYgdG9wUmlnaHQs
CkBAIC01MDksNyArNTExLDkgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6OmNsaXBPdXRSb3VuZGVk
UmVjdChjb25zdCBJbnRSZWN0JiByZWN0LCBjb25zdCBJbnRTaXplJiB0b3AKICAgICBpZiAocGFp
bnRpbmdEaXNhYmxlZCgpKQogICAgICAgICByZXR1cm47CiAKLSAgICBjbGlwT3V0KFBhdGg6OmNy
ZWF0ZVJvdW5kZWRSZWN0YW5nbGUocmVjdCwgdG9wTGVmdCwgdG9wUmlnaHQsIGJvdHRvbUxlZnQs
IGJvdHRvbVJpZ2h0KSk7CisgICAgUGF0aCBwYXRoOworICAgIHBhdGguYWRkUm91bmRlZFJlY3Qo
cmVjdCwgdG9wTGVmdCwgdG9wUmlnaHQsIGJvdHRvbUxlZnQsIGJvdHRvbVJpZ2h0KTsKKyAgICBj
bGlwT3V0KHBhdGgpOwogfQogCiB2b2lkIEdyYXBoaWNzQ29udGV4dDo6Y2xpcFRvSW1hZ2VCdWZm
ZXIoSW1hZ2VCdWZmZXIqIGJ1ZmZlciwgY29uc3QgRmxvYXRSZWN0JiByZWN0KQpkaWZmIC0tZ2l0
IGEvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9QYXRoLmNwcCBiL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvUGF0aC5jcHAKaW5kZXggNGUyZGU1My4uM2NhZDg0YyAxMDA2NDQKLS0tIGEvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9QYXRoLmNwcAorKysgYi9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL1BhdGguY3BwCkBAIC0zNSw4ICszNSw5IEBACiAjaW5jbHVkZSA8bWF0aC5oPgogI2lu
Y2x1ZGUgPHd0Zi9NYXRoRXh0cmFzLmg+CiAKLXN0YXRpYyBjb25zdCBmbG9hdCBRVUFSVEVSID0g
MC41NTJmOyAvLyBhcHByb3hpbWF0aW9uIG9mIGNvbnRyb2wgcG9pbnQgcG9zaXRpb25zIG9uIGEg
YmV6aWVyCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyB0byBzaW11bGF0ZSBhIHF1
YXJ0ZXIgb2YgYSBjaXJjbGUuCisvLyBBcHByb3hpbWF0aW9uIG9mIGNvbnRyb2wgcG9pbnQgcG9z
aXRpb25zIG9uIGEgYmV6aWVyIHRvIHNpbXVsYXRlIGEgcXVhcnRlciBvZiBhIGNpcmNsZS4KK3N0
YXRpYyBjb25zdCBmbG9hdCBnQ2lyY2xlQ29udHJvbFBvaW50ID0gMSAtIDAuNTUyOworCiBuYW1l
c3BhY2UgV2ViQ29yZSB7CiAKICNpZiAhUExBVEZPUk0oT1BFTlZHKSAmJiAhUExBVEZPUk0oUVQp
CkBAIC00Nyw3ICs0OCw3IEBAIHN0YXRpYyB2b2lkIHBhdGhMZW5ndGhBcHBsaWVyRnVuY3Rpb24o
dm9pZCogaW5mbywgY29uc3QgUGF0aEVsZW1lbnQqIGVsZW1lbnQpCiAgICAgICAgIHJldHVybjsK
ICAgICB0cmF2ZXJzYWxTdGF0ZS5tX3ByZXZpb3VzID0gdHJhdmVyc2FsU3RhdGUubV9jdXJyZW50
OwogICAgIEZsb2F0UG9pbnQqIHBvaW50cyA9IGVsZW1lbnQtPnBvaW50czsKLSAgICBmbG9hdCBz
ZWdtZW50TGVuZ3RoID0gMC4wZjsKKyAgICBmbG9hdCBzZWdtZW50TGVuZ3RoID0gMDsKICAgICBz
d2l0Y2ggKGVsZW1lbnQtPnR5cGUpIHsKICAgICAgICAgY2FzZSBQYXRoRWxlbWVudE1vdmVUb1Bv
aW50OgogICAgICAgICAgICAgc2VnbWVudExlbmd0aCA9IHRyYXZlcnNhbFN0YXRlLm1vdmVUbyhw
b2ludHNbMF0pOwpAQCAtNzUsMTAgKzc2LDggQEAgc3RhdGljIHZvaWQgcGF0aExlbmd0aEFwcGxp
ZXJGdW5jdGlvbih2b2lkKiBpbmZvLCBjb25zdCBQYXRoRWxlbWVudCogZWxlbWVudCkKICAgICAg
ICAgaWYgKHRyYXZlcnNhbFN0YXRlLm1fYWN0aW9uID09IFBhdGhUcmF2ZXJzYWxTdGF0ZTo6VHJh
dmVyc2FsUG9pbnRBdExlbmd0aCkgewogICAgICAgICAgICAgZmxvYXQgb2Zmc2V0ID0gdHJhdmVy
c2FsU3RhdGUubV9kZXNpcmVkTGVuZ3RoIC0gdHJhdmVyc2FsU3RhdGUubV90b3RhbExlbmd0aDsK
ICAgICAgICAgICAgIHRyYXZlcnNhbFN0YXRlLm1fY3VycmVudC5tb3ZlKG9mZnNldCAqIGNvc2Yo
c2xvcGUpLCBvZmZzZXQgKiBzaW5mKHNsb3BlKSk7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAg
ICAgICBzdGF0aWMgY29uc3QgZmxvYXQgcmFkMmRlZyA9IDE4MC4wZiAvIHBpRmxvYXQ7Ci0gICAg
ICAgICAgICB0cmF2ZXJzYWxTdGF0ZS5tX25vcm1hbEFuZ2xlID0gc2xvcGUgKiByYWQyZGVnOwot
ICAgICAgICB9CisgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgdHJhdmVyc2FsU3RhdGUubV9u
b3JtYWxBbmdsZSA9IHJhZDJkZWcoc2xvcGUpOwogCiAgICAgICAgIHRyYXZlcnNhbFN0YXRlLm1f
c3VjY2VzcyA9IHRydWU7CiAgICAgfQpAQCAtMTEwLDE2NyArMTA5LDk2IEBAIGZsb2F0IFBhdGg6
Om5vcm1hbEFuZ2xlQXRMZW5ndGgoZmxvYXQgbGVuZ3RoLCBib29sJiBvaykKIH0KICNlbmRpZgog
Ci1QYXRoIFBhdGg6OmNyZWF0ZVJvdW5kZWRSZWN0YW5nbGUoY29uc3QgRmxvYXRSZWN0JiByZWN0
YW5nbGUsIGNvbnN0IEZsb2F0U2l6ZSYgcm91bmRpbmdSYWRpaSkKK3ZvaWQgUGF0aDo6YWRkUm91
bmRlZFJlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0YW5nbGUsIGNvbnN0IEZsb2F0U2l6ZSYgcm91
bmRpbmdSYWRpaSkKIHsKLSAgICBQYXRoIHBhdGg7CiAgICAgZmxvYXQgeCA9IHJlY3RhbmdsZS54
KCk7CiAgICAgZmxvYXQgeSA9IHJlY3RhbmdsZS55KCk7CiAgICAgZmxvYXQgd2lkdGggPSByZWN0
YW5nbGUud2lkdGgoKTsKICAgICBmbG9hdCBoZWlnaHQgPSByZWN0YW5nbGUuaGVpZ2h0KCk7CiAg
ICAgZmxvYXQgcnggPSByb3VuZGluZ1JhZGlpLndpZHRoKCk7CiAgICAgZmxvYXQgcnkgPSByb3Vu
ZGluZ1JhZGlpLmhlaWdodCgpOwotICAgIGlmICh3aWR0aCA8PSAwLjBmIHx8IGhlaWdodCA8PSAw
LjBmKQotICAgICAgICByZXR1cm4gcGF0aDsKKyAgICBpZiAod2lkdGggPD0gMCB8fCBoZWlnaHQg
PD0gMCkKKyAgICAgICAgcmV0dXJuOworCisgICAgZmxvYXQgZHggPSByeDsKKyAgICBmbG9hdCBk
eSA9IHJ5OworICAgIGZsb2F0IGhhbGZXaWR0aCA9IHdpZHRoIC8gMjsKKyAgICBmbG9hdCBoYWxm
SGVpZ2h0ID0gaGVpZ2h0IC8gMjsKIAotICAgIGZsb2F0IGR4ID0gcngsIGR5ID0gcnk7CiAgICAg
Ly8gSWYgcnggaXMgZ3JlYXRlciB0aGFuIGhhbGYgb2YgdGhlIHdpZHRoIG9mIHRoZSByZWN0YW5n
bGUKICAgICAvLyB0aGVuIHNldCByeCB0byBoYWxmIG9mIHRoZSB3aWR0aCAocmVxdWlyZWQgaW4g
U1ZHIHNwZWMpCi0gICAgaWYgKGR4ID4gd2lkdGggKiAwLjVmKQotICAgICAgICBkeCA9IHdpZHRo
ICogMC41ZjsKKyAgICBpZiAoZHggPiBoYWxmV2lkdGgpCisgICAgICAgIGR4ID0gaGFsZldpZHRo
OwogCiAgICAgLy8gSWYgcnkgaXMgZ3JlYXRlciB0aGFuIGhhbGYgb2YgdGhlIGhlaWdodCBvZiB0
aGUgcmVjdGFuZ2xlCiAgICAgLy8gdGhlbiBzZXQgcnkgdG8gaGFsZiBvZiB0aGUgaGVpZ2h0IChy
ZXF1aXJlZCBpbiBTVkcgc3BlYykKLSAgICBpZiAoZHkgPiBoZWlnaHQgKiAwLjVmKQotICAgICAg
ICBkeSA9IGhlaWdodCAqIDAuNWY7CisgICAgaWYgKGR5ID4gaGFsZkhlaWdodCkKKyAgICAgICAg
ZHkgPSBoYWxmSGVpZ2h0OwogCi0gICAgcGF0aC5tb3ZlVG8oRmxvYXRQb2ludCh4ICsgZHgsIHkp
KTsKKyAgICBtb3ZlVG8oRmxvYXRQb2ludCh4ICsgZHgsIHkpKTsKIAotICAgIGlmIChkeCA8IHdp
ZHRoICogMC41ZikKLSAgICAgICAgcGF0aC5hZGRMaW5lVG8oRmxvYXRQb2ludCh4ICsgd2lkdGgg
LSByeCwgeSkpOworICAgIGlmIChkeCA8IGhhbGZXaWR0aCkKKyAgICAgICAgYWRkTGluZVRvKEZs
b2F0UG9pbnQoeCArIHdpZHRoIC0gcngsIHkpKTsKIAotICAgIHBhdGguYWRkQmV6aWVyQ3VydmVU
byhGbG9hdFBvaW50KHggKyB3aWR0aCAtIGR4ICogKDEgLSBRVUFSVEVSKSwgeSksIEZsb2F0UG9p
bnQoeCArIHdpZHRoLCB5ICsgZHkgKiAoMSAtIFFVQVJURVIpKSwgRmxvYXRQb2ludCh4ICsgd2lk
dGgsIHkgKyBkeSkpOworICAgIGFkZEJlemllckN1cnZlVG8oRmxvYXRQb2ludCh4ICsgd2lkdGgg
LSBkeCAqIGdDaXJjbGVDb250cm9sUG9pbnQsIHkpLCBGbG9hdFBvaW50KHggKyB3aWR0aCwgeSAr
IGR5ICogZ0NpcmNsZUNvbnRyb2xQb2ludCksIEZsb2F0UG9pbnQoeCArIHdpZHRoLCB5ICsgZHkp
KTsKIAotICAgIGlmIChkeSA8IGhlaWdodCAqIDAuNSkKLSAgICAgICAgcGF0aC5hZGRMaW5lVG8o
RmxvYXRQb2ludCh4ICsgd2lkdGgsIHkgKyBoZWlnaHQgLSBkeSkpOworICAgIGlmIChkeSA8IGhh
bGZIZWlnaHQpCisgICAgICAgIGFkZExpbmVUbyhGbG9hdFBvaW50KHggKyB3aWR0aCwgeSArIGhl
aWdodCAtIGR5KSk7CiAKLSAgICBwYXRoLmFkZEJlemllckN1cnZlVG8oRmxvYXRQb2ludCh4ICsg
d2lkdGgsIHkgKyBoZWlnaHQgLSBkeSAqICgxIC0gUVVBUlRFUikpLCBGbG9hdFBvaW50KHggKyB3
aWR0aCAtIGR4ICogKDEgLSBRVUFSVEVSKSwgeSArIGhlaWdodCksIEZsb2F0UG9pbnQoeCArIHdp
ZHRoIC0gZHgsIHkgKyBoZWlnaHQpKTsKKyAgICBhZGRCZXppZXJDdXJ2ZVRvKEZsb2F0UG9pbnQo
eCArIHdpZHRoLCB5ICsgaGVpZ2h0IC0gZHkgKiBnQ2lyY2xlQ29udHJvbFBvaW50KSwgRmxvYXRQ
b2ludCh4ICsgd2lkdGggLSBkeCAqIGdDaXJjbGVDb250cm9sUG9pbnQsIHkgKyBoZWlnaHQpLCBG
bG9hdFBvaW50KHggKyB3aWR0aCAtIGR4LCB5ICsgaGVpZ2h0KSk7CiAKLSAgICBpZiAoZHggPCB3
aWR0aCAqIDAuNSkKLSAgICAgICAgcGF0aC5hZGRMaW5lVG8oRmxvYXRQb2ludCh4ICsgZHgsIHkg
KyBoZWlnaHQpKTsKKyAgICBpZiAoZHggPCBoYWxmV2lkdGgpCisgICAgICAgIGFkZExpbmVUbyhG
bG9hdFBvaW50KHggKyBkeCwgeSArIGhlaWdodCkpOwogCi0gICAgcGF0aC5hZGRCZXppZXJDdXJ2
ZVRvKEZsb2F0UG9pbnQoeCArIGR4ICogKDEgLSBRVUFSVEVSKSwgeSArIGhlaWdodCksIEZsb2F0
UG9pbnQoeCwgeSArIGhlaWdodCAtIGR5ICogKDEgLSBRVUFSVEVSKSksIEZsb2F0UG9pbnQoeCwg
eSArIGhlaWdodCAtIGR5KSk7CisgICAgYWRkQmV6aWVyQ3VydmVUbyhGbG9hdFBvaW50KHggKyBk
eCAqIGdDaXJjbGVDb250cm9sUG9pbnQsIHkgKyBoZWlnaHQpLCBGbG9hdFBvaW50KHgsIHkgKyBo
ZWlnaHQgLSBkeSAqIGdDaXJjbGVDb250cm9sUG9pbnQpLCBGbG9hdFBvaW50KHgsIHkgKyBoZWln
aHQgLSBkeSkpOwogCi0gICAgaWYgKGR5IDwgaGVpZ2h0ICogMC41KQotICAgICAgICBwYXRoLmFk
ZExpbmVUbyhGbG9hdFBvaW50KHgsIHkgKyBkeSkpOworICAgIGlmIChkeSA8IGhhbGZIZWlnaHQp
CisgICAgICAgIGFkZExpbmVUbyhGbG9hdFBvaW50KHgsIHkgKyBkeSkpOwogCi0gICAgcGF0aC5h
ZGRCZXppZXJDdXJ2ZVRvKEZsb2F0UG9pbnQoeCwgeSArIGR5ICogKDEgLSBRVUFSVEVSKSksIEZs
b2F0UG9pbnQoeCArIGR4ICogKDEgLSBRVUFSVEVSKSwgeSksIEZsb2F0UG9pbnQoeCArIGR4LCB5
KSk7CisgICAgYWRkQmV6aWVyQ3VydmVUbyhGbG9hdFBvaW50KHgsIHkgKyBkeSAqIGdDaXJjbGVD
b250cm9sUG9pbnQpLCBGbG9hdFBvaW50KHggKyBkeCAqIGdDaXJjbGVDb250cm9sUG9pbnQsIHkp
LCBGbG9hdFBvaW50KHggKyBkeCwgeSkpOwogCi0gICAgcGF0aC5jbG9zZVN1YnBhdGgoKTsKLQot
ICAgIHJldHVybiBwYXRoOworICAgIGNsb3NlU3VicGF0aCgpOwogfQogCi1QYXRoIFBhdGg6OmNy
ZWF0ZVJvdW5kZWRSZWN0YW5nbGUoY29uc3QgRmxvYXRSZWN0JiByZWN0YW5nbGUsIGNvbnN0IEZs
b2F0U2l6ZSYgdG9wTGVmdFJhZGl1cywgY29uc3QgRmxvYXRTaXplJiB0b3BSaWdodFJhZGl1cywg
Y29uc3QgRmxvYXRTaXplJiBib3R0b21MZWZ0UmFkaXVzLCBjb25zdCBGbG9hdFNpemUmIGJvdHRv
bVJpZ2h0UmFkaXVzKQordm9pZCBQYXRoOjphZGRSb3VuZGVkUmVjdChjb25zdCBGbG9hdFJlY3Qm
IHJlY3RhbmdsZSwgY29uc3QgRmxvYXRTaXplJiB0b3BMZWZ0UmFkaXVzLCBjb25zdCBGbG9hdFNp
emUmIHRvcFJpZ2h0UmFkaXVzLCBjb25zdCBGbG9hdFNpemUmIGJvdHRvbUxlZnRSYWRpdXMsIGNv
bnN0IEZsb2F0U2l6ZSYgYm90dG9tUmlnaHRSYWRpdXMpCiB7Ci0gICAgUGF0aCBwYXRoOwotCiAg
ICAgZmxvYXQgd2lkdGggPSByZWN0YW5nbGUud2lkdGgoKTsKICAgICBmbG9hdCBoZWlnaHQgPSBy
ZWN0YW5nbGUuaGVpZ2h0KCk7Ci0gICAgaWYgKHdpZHRoIDw9IDAuMCB8fCBoZWlnaHQgPD0gMC4w
KQotICAgICAgICByZXR1cm4gcGF0aDsKKyAgICBpZiAod2lkdGggPD0gMCB8fCBoZWlnaHQgPD0g
MCkKKyAgICAgICAgcmV0dXJuOwogCiAgICAgaWYgKHdpZHRoIDwgdG9wTGVmdFJhZGl1cy53aWR0
aCgpICsgdG9wUmlnaHRSYWRpdXMud2lkdGgoKQogICAgICAgICAgICAgfHwgd2lkdGggPCBib3R0
b21MZWZ0UmFkaXVzLndpZHRoKCkgKyBib3R0b21SaWdodFJhZGl1cy53aWR0aCgpCiAgICAgICAg
ICAgICB8fCBoZWlnaHQgPCB0b3BMZWZ0UmFkaXVzLmhlaWdodCgpICsgYm90dG9tTGVmdFJhZGl1
cy5oZWlnaHQoKQotICAgICAgICAgICAgfHwgaGVpZ2h0IDwgdG9wUmlnaHRSYWRpdXMuaGVpZ2h0
KCkgKyBib3R0b21SaWdodFJhZGl1cy5oZWlnaHQoKSkKKyAgICAgICAgICAgIHx8IGhlaWdodCA8
IHRvcFJpZ2h0UmFkaXVzLmhlaWdodCgpICsgYm90dG9tUmlnaHRSYWRpdXMuaGVpZ2h0KCkpIHsK
ICAgICAgICAgLy8gSWYgYWxsIHRoZSByYWRpaSBjYW5ub3QgYmUgYWNjb21tb2RhdGVkLCByZXR1
cm4gYSByZWN0LgotICAgICAgICByZXR1cm4gY3JlYXRlUmVjdGFuZ2xlKHJlY3RhbmdsZSk7Ci0K
LSAgICBmbG9hdCB4ID0gcmVjdGFuZ2xlLngoKTsKLSAgICBmbG9hdCB5ID0gcmVjdGFuZ2xlLnko
KTsKLQotICAgIHBhdGgubW92ZVRvKEZsb2F0UG9pbnQoeCArIHRvcExlZnRSYWRpdXMud2lkdGgo
KSwgeSkpOwotCi0gICAgcGF0aC5hZGRMaW5lVG8oRmxvYXRQb2ludCh4ICsgd2lkdGggLSB0b3BS
aWdodFJhZGl1cy53aWR0aCgpLCB5KSk7Ci0KLSAgICBwYXRoLmFkZEJlemllckN1cnZlVG8oRmxv
YXRQb2ludCh4ICsgd2lkdGggLSB0b3BSaWdodFJhZGl1cy53aWR0aCgpICogKDEgLSBRVUFSVEVS
KSwgeSksIEZsb2F0UG9pbnQoeCArIHdpZHRoLCB5ICsgdG9wUmlnaHRSYWRpdXMuaGVpZ2h0KCkg
KiAoMSAtIFFVQVJURVIpKSwgRmxvYXRQb2ludCh4ICsgd2lkdGgsIHkgKyB0b3BSaWdodFJhZGl1
cy5oZWlnaHQoKSkpOwotCi0gICAgcGF0aC5hZGRMaW5lVG8oRmxvYXRQb2ludCh4ICsgd2lkdGgs
IHkgKyBoZWlnaHQgLSBib3R0b21SaWdodFJhZGl1cy5oZWlnaHQoKSkpOwotCi0gICAgcGF0aC5h
ZGRCZXppZXJDdXJ2ZVRvKEZsb2F0UG9pbnQoeCArIHdpZHRoLCB5ICsgaGVpZ2h0IC0gYm90dG9t
UmlnaHRSYWRpdXMuaGVpZ2h0KCkgKiAoMSAtIFFVQVJURVIpKSwgRmxvYXRQb2ludCh4ICsgd2lk
dGggLSBib3R0b21SaWdodFJhZGl1cy53aWR0aCgpICogKDEgLSBRVUFSVEVSKSwgeSArIGhlaWdo
dCksIEZsb2F0UG9pbnQoeCArIHdpZHRoIC0gYm90dG9tUmlnaHRSYWRpdXMud2lkdGgoKSwgeSAr
IGhlaWdodCkpOwotCi0gICAgcGF0aC5hZGRMaW5lVG8oRmxvYXRQb2ludCh4ICsgYm90dG9tTGVm
dFJhZGl1cy53aWR0aCgpLCB5ICsgaGVpZ2h0KSk7Ci0KLSAgICBwYXRoLmFkZEJlemllckN1cnZl
VG8oRmxvYXRQb2ludCh4ICsgYm90dG9tTGVmdFJhZGl1cy53aWR0aCgpICogKDEgLSBRVUFSVEVS
KSwgeSArIGhlaWdodCksIEZsb2F0UG9pbnQoeCwgeSArIGhlaWdodCAtIGJvdHRvbUxlZnRSYWRp
dXMuaGVpZ2h0KCkgKiAoMSAtIFFVQVJURVIpKSwgRmxvYXRQb2ludCh4LCB5ICsgaGVpZ2h0IC0g
Ym90dG9tTGVmdFJhZGl1cy5oZWlnaHQoKSkpOwotCi0gICAgcGF0aC5hZGRMaW5lVG8oRmxvYXRQ
b2ludCh4LCB5ICsgdG9wTGVmdFJhZGl1cy5oZWlnaHQoKSkpOwotCi0gICAgcGF0aC5hZGRCZXpp
ZXJDdXJ2ZVRvKEZsb2F0UG9pbnQoeCwgeSArIHRvcExlZnRSYWRpdXMuaGVpZ2h0KCkgKiAoMSAt
IFFVQVJURVIpKSwgRmxvYXRQb2ludCh4ICsgdG9wTGVmdFJhZGl1cy53aWR0aCgpICogKDEgLSBR
VUFSVEVSKSwgeSksIEZsb2F0UG9pbnQoeCArIHRvcExlZnRSYWRpdXMud2lkdGgoKSwgeSkpOwot
Ci0gICAgcGF0aC5jbG9zZVN1YnBhdGgoKTsKLQotICAgIHJldHVybiBwYXRoOwotfQorICAgICAg
ICBhZGRSZWN0KHJlY3RhbmdsZSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CiAKLVBhdGggUGF0
aDo6Y3JlYXRlUmVjdGFuZ2xlKGNvbnN0IEZsb2F0UmVjdCYgcmVjdGFuZ2xlKQotewotICAgIFBh
dGggcGF0aDsKICAgICBmbG9hdCB4ID0gcmVjdGFuZ2xlLngoKTsKICAgICBmbG9hdCB5ID0gcmVj
dGFuZ2xlLnkoKTsKLSAgICBmbG9hdCB3aWR0aCA9IHJlY3RhbmdsZS53aWR0aCgpOwotICAgIGZs
b2F0IGhlaWdodCA9IHJlY3RhbmdsZS5oZWlnaHQoKTsKLSAgICBpZiAod2lkdGggPD0gMC4wZiB8
fCBoZWlnaHQgPD0gMC4wZikKLSAgICAgICAgcmV0dXJuIHBhdGg7Ci0gICAgCi0gICAgcGF0aC5t
b3ZlVG8oRmxvYXRQb2ludCh4LCB5KSk7Ci0gICAgcGF0aC5hZGRMaW5lVG8oRmxvYXRQb2ludCh4
ICsgd2lkdGgsIHkpKTsKLSAgICBwYXRoLmFkZExpbmVUbyhGbG9hdFBvaW50KHggKyB3aWR0aCwg
eSArIGhlaWdodCkpOwotICAgIHBhdGguYWRkTGluZVRvKEZsb2F0UG9pbnQoeCwgeSArIGhlaWdo
dCkpOwotICAgIHBhdGguY2xvc2VTdWJwYXRoKCk7Ci0KLSAgICByZXR1cm4gcGF0aDsKLX0KLQot
UGF0aCBQYXRoOjpjcmVhdGVFbGxpcHNlKGNvbnN0IEZsb2F0UG9pbnQmIGNlbnRlciwgZmxvYXQg
cngsIGZsb2F0IHJ5KQotewotICAgIGZsb2F0IGN4ID0gY2VudGVyLngoKTsKLSAgICBmbG9hdCBj
eSA9IGNlbnRlci55KCk7Ci0gICAgUGF0aCBwYXRoOwotICAgIGlmIChyeCA8PSAwLjBmIHx8IHJ5
IDw9IDAuMGYpCi0gICAgICAgIHJldHVybiBwYXRoOwotCi0gICAgZmxvYXQgeCA9IGN4OwotICAg
IGZsb2F0IHkgPSBjeTsKLQotICAgIHVuc2lnbmVkIHN0ZXAgPSAwLCBudW0gPSAxMDA7Ci0gICAg
Ym9vbCBydW5uaW5nID0gdHJ1ZTsKLSAgICB3aGlsZSAocnVubmluZykKLSAgICB7Ci0gICAgICAg
IGlmIChzdGVwID09IG51bSkKLSAgICAgICAgewotICAgICAgICAgICAgcnVubmluZyA9IGZhbHNl
OwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLQotICAgICAgICBmbG9hdCBhbmdsZSA9
IHN0YXRpY19jYXN0PGZsb2F0PihzdGVwKSAvIHN0YXRpY19jYXN0PGZsb2F0PihudW0pICogMi4w
ZiAqIHBpRmxvYXQ7Ci0gICAgICAgIHggPSBjeCArIGNvc2YoYW5nbGUpICogcng7Ci0gICAgICAg
IHkgPSBjeSArIHNpbmYoYW5nbGUpICogcnk7Ci0KLSAgICAgICAgc3RlcCsrOwotICAgICAgICBp
ZiAoc3RlcCA9PSAxKQotICAgICAgICAgICAgcGF0aC5tb3ZlVG8oRmxvYXRQb2ludCh4LCB5KSk7
Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIHBhdGguYWRkTGluZVRvKEZsb2F0UG9pbnQoeCwg
eSkpOwotICAgIH0KLQotICAgIHBhdGguY2xvc2VTdWJwYXRoKCk7Ci0KLSAgICByZXR1cm4gcGF0
aDsKLX0KLQotUGF0aCBQYXRoOjpjcmVhdGVDaXJjbGUoY29uc3QgRmxvYXRQb2ludCYgY2VudGVy
LCBmbG9hdCByKQotewotICAgIHJldHVybiBjcmVhdGVFbGxpcHNlKGNlbnRlciwgciwgcik7Ci19
Ci0KLVBhdGggUGF0aDo6Y3JlYXRlTGluZShjb25zdCBGbG9hdFBvaW50JiBzdGFydCwgY29uc3Qg
RmxvYXRQb2ludCYgZW5kKQotewotICAgIFBhdGggcGF0aDsKLQotICAgIHBhdGgubW92ZVRvKHN0
YXJ0KTsKLSAgICBwYXRoLmFkZExpbmVUbyhlbmQpOwogCi0gICAgcmV0dXJuIHBhdGg7CisgICAg
bW92ZVRvKEZsb2F0UG9pbnQoeCArIHRvcExlZnRSYWRpdXMud2lkdGgoKSwgeSkpOworCisgICAg
YWRkTGluZVRvKEZsb2F0UG9pbnQoeCArIHdpZHRoIC0gdG9wUmlnaHRSYWRpdXMud2lkdGgoKSwg
eSkpOworICAgIGFkZEJlemllckN1cnZlVG8oRmxvYXRQb2ludCh4ICsgd2lkdGggLSB0b3BSaWdo
dFJhZGl1cy53aWR0aCgpICogZ0NpcmNsZUNvbnRyb2xQb2ludCwgeSksCisgICAgICAgICAgICAg
ICAgICAgICBGbG9hdFBvaW50KHggKyB3aWR0aCwgeSArIHRvcFJpZ2h0UmFkaXVzLmhlaWdodCgp
ICogZ0NpcmNsZUNvbnRyb2xQb2ludCksCisgICAgICAgICAgICAgICAgICAgICBGbG9hdFBvaW50
KHggKyB3aWR0aCwgeSArIHRvcFJpZ2h0UmFkaXVzLmhlaWdodCgpKSk7CisgICAgYWRkTGluZVRv
KEZsb2F0UG9pbnQoeCArIHdpZHRoLCB5ICsgaGVpZ2h0IC0gYm90dG9tUmlnaHRSYWRpdXMuaGVp
Z2h0KCkpKTsKKyAgICBhZGRCZXppZXJDdXJ2ZVRvKEZsb2F0UG9pbnQoeCArIHdpZHRoLCB5ICsg
aGVpZ2h0IC0gYm90dG9tUmlnaHRSYWRpdXMuaGVpZ2h0KCkgKiBnQ2lyY2xlQ29udHJvbFBvaW50
KSwKKyAgICAgICAgICAgICAgICAgICAgIEZsb2F0UG9pbnQoeCArIHdpZHRoIC0gYm90dG9tUmln
aHRSYWRpdXMud2lkdGgoKSAqIGdDaXJjbGVDb250cm9sUG9pbnQsIHkgKyBoZWlnaHQpLAorICAg
ICAgICAgICAgICAgICAgICAgRmxvYXRQb2ludCh4ICsgd2lkdGggLSBib3R0b21SaWdodFJhZGl1
cy53aWR0aCgpLCB5ICsgaGVpZ2h0KSk7CisgICAgYWRkTGluZVRvKEZsb2F0UG9pbnQoeCArIGJv
dHRvbUxlZnRSYWRpdXMud2lkdGgoKSwgeSArIGhlaWdodCkpOworICAgIGFkZEJlemllckN1cnZl
VG8oRmxvYXRQb2ludCh4ICsgYm90dG9tTGVmdFJhZGl1cy53aWR0aCgpICogZ0NpcmNsZUNvbnRy
b2xQb2ludCwgeSArIGhlaWdodCksCisgICAgICAgICAgICAgICAgICAgICBGbG9hdFBvaW50KHgs
IHkgKyBoZWlnaHQgLSBib3R0b21MZWZ0UmFkaXVzLmhlaWdodCgpICogZ0NpcmNsZUNvbnRyb2xQ
b2ludCksCisgICAgICAgICAgICAgICAgICAgICBGbG9hdFBvaW50KHgsIHkgKyBoZWlnaHQgLSBi
b3R0b21MZWZ0UmFkaXVzLmhlaWdodCgpKSk7CisgICAgYWRkTGluZVRvKEZsb2F0UG9pbnQoeCwg
eSArIHRvcExlZnRSYWRpdXMuaGVpZ2h0KCkpKTsKKyAgICBhZGRCZXppZXJDdXJ2ZVRvKEZsb2F0
UG9pbnQoeCwgeSArIHRvcExlZnRSYWRpdXMuaGVpZ2h0KCkgKiBnQ2lyY2xlQ29udHJvbFBvaW50
KSwKKyAgICAgICAgICAgICAgICAgICAgIEZsb2F0UG9pbnQoeCArIHRvcExlZnRSYWRpdXMud2lk
dGgoKSAqIGdDaXJjbGVDb250cm9sUG9pbnQsIHkpLAorICAgICAgICAgICAgICAgICAgICAgRmxv
YXRQb2ludCh4ICsgdG9wTGVmdFJhZGl1cy53aWR0aCgpLCB5KSk7CisKKyAgICBjbG9zZVN1YnBh
dGgoKTsKIH0KIAogfQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9QYXRo
LmggYi9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1BhdGguaAppbmRleCA0M2JhODg5Li43YWNk
M2JlIDEwMDY0NAotLS0gYS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1BhdGguaAorKysgYi9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1BhdGguaApAQCAtMTM3LDIwICsxMzcsMTQgQEAgbmFt
ZXNwYWNlIFdlYkNvcmUgewogICAgICAgICB2b2lkIGFkZEFyYyhjb25zdCBGbG9hdFBvaW50Jiwg
ZmxvYXQgcmFkaXVzLCBmbG9hdCBzdGFydEFuZ2xlLCBmbG9hdCBlbmRBbmdsZSwgYm9vbCBhbnRp
Y2xvY2t3aXNlKTsKICAgICAgICAgdm9pZCBhZGRSZWN0KGNvbnN0IEZsb2F0UmVjdCYpOwogICAg
ICAgICB2b2lkIGFkZEVsbGlwc2UoY29uc3QgRmxvYXRSZWN0Jik7CisgICAgICAgIHZvaWQgYWRk
Um91bmRlZFJlY3QoY29uc3QgRmxvYXRSZWN0JiwgY29uc3QgRmxvYXRTaXplJiByb3VuZGluZ1Jh
ZGlpKTsKKyAgICAgICAgdm9pZCBhZGRSb3VuZGVkUmVjdChjb25zdCBGbG9hdFJlY3QmLCBjb25z
dCBGbG9hdFNpemUmIHRvcExlZnRSYWRpdXMsIGNvbnN0IEZsb2F0U2l6ZSYgdG9wUmlnaHRSYWRp
dXMsIGNvbnN0IEZsb2F0U2l6ZSYgYm90dG9tTGVmdFJhZGl1cywgY29uc3QgRmxvYXRTaXplJiBi
b3R0b21SaWdodFJhZGl1cyk7CiAKICAgICAgICAgdm9pZCB0cmFuc2xhdGUoY29uc3QgRmxvYXRT
aXplJik7CiAKICAgICAgICAgU3RyaW5nIGRlYnVnU3RyaW5nKCkgY29uc3Q7CiAKICAgICAgICAg
UGxhdGZvcm1QYXRoUHRyIHBsYXRmb3JtUGF0aCgpIGNvbnN0IHsgcmV0dXJuIG1fcGF0aDsgfQot
Ci0gICAgICAgIHN0YXRpYyBQYXRoIGNyZWF0ZVJvdW5kZWRSZWN0YW5nbGUoY29uc3QgRmxvYXRS
ZWN0JiwgY29uc3QgRmxvYXRTaXplJiByb3VuZGluZ1JhZGlpKTsKLSAgICAgICAgc3RhdGljIFBh
dGggY3JlYXRlUm91bmRlZFJlY3RhbmdsZShjb25zdCBGbG9hdFJlY3QmLCBjb25zdCBGbG9hdFNp
emUmIHRvcExlZnRSYWRpdXMsIGNvbnN0IEZsb2F0U2l6ZSYgdG9wUmlnaHRSYWRpdXMsIGNvbnN0
IEZsb2F0U2l6ZSYgYm90dG9tTGVmdFJhZGl1cywgY29uc3QgRmxvYXRTaXplJiBib3R0b21SaWdo
dFJhZGl1cyk7Ci0gICAgICAgIHN0YXRpYyBQYXRoIGNyZWF0ZVJlY3RhbmdsZShjb25zdCBGbG9h
dFJlY3QmKTsKLSAgICAgICAgc3RhdGljIFBhdGggY3JlYXRlRWxsaXBzZShjb25zdCBGbG9hdFBv
aW50JiBjZW50ZXIsIGZsb2F0IHJ4LCBmbG9hdCByeSk7Ci0gICAgICAgIHN0YXRpYyBQYXRoIGNy
ZWF0ZUNpcmNsZShjb25zdCBGbG9hdFBvaW50JiBjZW50ZXIsIGZsb2F0IHIpOwotICAgICAgICBz
dGF0aWMgUGF0aCBjcmVhdGVMaW5lKGNvbnN0IEZsb2F0UG9pbnQmLCBjb25zdCBGbG9hdFBvaW50
Jik7Ci0KICAgICAgICAgdm9pZCBhcHBseSh2b2lkKiBpbmZvLCBQYXRoQXBwbGllckZ1bmN0aW9u
KSBjb25zdDsKICAgICAgICAgdm9pZCB0cmFuc2Zvcm0oY29uc3QgQWZmaW5lVHJhbnNmb3JtJik7
CiAKZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vQ29udGV4dFNo
YWRvd0NhaXJvLmNwcCBiL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vQ29udGV4dFNo
YWRvd0NhaXJvLmNwcAppbmRleCA2ZjViZTI4Li44Mjk5YjZhIDEwMDY0NAotLS0gYS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0NvbnRleHRTaGFkb3dDYWlyby5jcHAKKysrIGIvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9Db250ZXh0U2hhZG93Q2Fpcm8uY3BwCkBAIC0x
MzQsOCArMTM0LDEwIEBAIHZvaWQgQ29udGV4dFNoYWRvdzo6ZHJhd1JlY3RTaGFkb3dXaXRob3V0
VGlsaW5nKFBsYXRmb3JtQ29udGV4dCBjb250ZXh0LCBjb25zdCBJCiAgICAgaWYgKCFtX2xheWVy
Q29udGV4dCkKICAgICAgICAgcmV0dXJuOwogCi0gICAgYXBwZW5kV2ViQ29yZVBhdGhUb0NhaXJv
Q29udGV4dChtX2xheWVyQ29udGV4dCwgUGF0aDo6Y3JlYXRlUm91bmRlZFJlY3RhbmdsZShzaGFk
b3dSZWN0LCB0b3BMZWZ0UmFkaXVzLCB0b3BSaWdodFJhZGl1cywKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGJvdHRvbUxlZnRSYWRpdXMsIGJvdHRvbVJpZ2h0UmFkaXVzKSk7CisgICAgUGF0aCBw
YXRoOworICAgIHBhdGguYWRkUm91bmRlZFJlY3Qoc2hhZG93UmVjdCwgdG9wTGVmdFJhZGl1cywg
dG9wUmlnaHRSYWRpdXMsIGJvdHRvbUxlZnRSYWRpdXMsIGJvdHRvbVJpZ2h0UmFkaXVzKTsKKwor
ICAgIGFwcGVuZFdlYkNvcmVQYXRoVG9DYWlyb0NvbnRleHQobV9sYXllckNvbnRleHQsIHBhdGgp
OwogICAgIGNhaXJvX3NldF9zb3VyY2VfcmdiYShtX2xheWVyQ29udGV4dCwgMCwgMCwgMCwgYWxw
aGEpOwogICAgIGNhaXJvX2ZpbGwobV9sYXllckNvbnRleHQpOwogCkBAIC0yNDAsOCArMjQyLDkg
QEAgdm9pZCBDb250ZXh0U2hhZG93OjpkcmF3UmVjdFNoYWRvdyhHcmFwaGljc0NvbnRleHQqIGNv
bnRleHQsIGNvbnN0IEludFJlY3QmIHJlY3QKIAogICAgIC8vIERyYXcgdGhlIHJlY3RhbmdsZS4K
ICAgICBJbnRSZWN0IHRlbXBsYXRlUmVjdCA9IEludFJlY3QobV9ibHVyRGlzdGFuY2UsIG1fYmx1
ckRpc3RhbmNlLCBzaGFkb3dUZW1wbGF0ZVNpemUud2lkdGgoKSAtIHJhZGl1c1R3aWNlLCBzaGFk
b3dUZW1wbGF0ZVNpemUuaGVpZ2h0KCkgLSByYWRpdXNUd2ljZSk7Ci0gICAgYXBwZW5kV2ViQ29y
ZVBhdGhUb0NhaXJvQ29udGV4dChtX2xheWVyQ29udGV4dCwgUGF0aDo6Y3JlYXRlUm91bmRlZFJl
Y3RhbmdsZSh0ZW1wbGF0ZVJlY3QsIHRvcExlZnRSYWRpdXMsIHRvcFJpZ2h0UmFkaXVzLAotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgYm90dG9tTGVmdFJhZGl1cywgYm90dG9tUmlnaHRSYWRpdXMp
KTsKKyAgICBQYXRoIHBhdGg7CisgICAgcGF0aC5hZGRSb3VuZGVkUmVjdCh0ZW1wbGF0ZVJlY3Qs
IHRvcExlZnRSYWRpdXMsIHRvcFJpZ2h0UmFkaXVzLCBib3R0b21MZWZ0UmFkaXVzLCBib3R0b21S
aWdodFJhZGl1cyk7CisgICAgYXBwZW5kV2ViQ29yZVBhdGhUb0NhaXJvQ29udGV4dChtX2xheWVy
Q29udGV4dCwgcGF0aCk7CiAKICAgICBjYWlyb19zZXRfc291cmNlX3JnYmEobV9sYXllckNvbnRl
eHQsIDAsIDAsIDAsIGNvbnRleHQtPmdldEFscGhhKCkpOwogICAgIGNhaXJvX2ZpbGwobV9sYXll
ckNvbnRleHQpOwpAQCAtMjYzLDggKzI2Niw5IEBAIHZvaWQgQ29udGV4dFNoYWRvdzo6ZHJhd1Jl
Y3RTaGFkb3coR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0LCBjb25zdCBJbnRSZWN0JiByZWN0CiAg
ICAgc2hhZG93UmVjdC5pbmZsYXRlKC1yYWRpdXNUd2ljZSk7CiAgICAgaWYgKCFzaGFkb3dSZWN0
LmlzRW1wdHkoKSkgewogICAgICAgICBjYWlyb19zYXZlKGNyKTsKLSAgICAgICAgYXBwZW5kV2Vi
Q29yZVBhdGhUb0NhaXJvQ29udGV4dChjciwgUGF0aDo6Y3JlYXRlUm91bmRlZFJlY3RhbmdsZShz
aGFkb3dSZWN0LCB0b3BMZWZ0UmFkaXVzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG9wUmlnaHRS
YWRpdXMsIGJvdHRvbUxlZnRSYWRpdXMsIGJvdHRvbVJpZ2h0UmFkaXVzKSk7CisgICAgICAgIHBh
dGguY2xlYXIoKTsKKyAgICAgICAgcGF0aC5hZGRSb3VuZGVkUmVjdChzaGFkb3dSZWN0LCB0b3BM
ZWZ0UmFkaXVzLCB0b3BSaWdodFJhZGl1cywgYm90dG9tTGVmdFJhZGl1cywgYm90dG9tUmlnaHRS
YWRpdXMpOworICAgICAgICBhcHBlbmRXZWJDb3JlUGF0aFRvQ2Fpcm9Db250ZXh0KGNyLCBwYXRo
KTsKICAgICAgICAgc2V0U291cmNlUkdCQUZyb21Db2xvcihjciwgbV9jb2xvcik7CiAgICAgICAg
IGNhaXJvX2ZpbGwoY3IpOwogICAgICAgICBjYWlyb19yZXN0b3JlKGNyKTsKZGlmZiAtLWdpdCBh
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vR3JhcGhpY3NDb250ZXh0Q2Fpcm8uY3Bw
IGIvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9HcmFwaGljc0NvbnRleHRDYWlyby5j
cHAKaW5kZXggZTk0ZGZiYS4uYTRiNjQ0YyAxMDA2NDQKLS0tIGEvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jYWlyby9HcmFwaGljc0NvbnRleHRDYWlyby5jcHAKKysrIGIvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jYWlyby9HcmFwaGljc0NvbnRleHRDYWlyby5jcHAKQEAgLTcwMyw4ICs3
MDMsMTMgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6OmRyYXdGb2N1c1JpbmcoY29uc3QgVmVjdG9y
PEludFJlY3Q+JiByZWN0cywgaW50IHdpZHRoLCBpbnQKICAgICBzZXRQbGF0Zm9ybVN0cm9rZVN0
eWxlKERvdHRlZFN0cm9rZSk7CiAjZWxzZQogICAgIGludCByYWRpdXMgPSAod2lkdGggLSAxKSAv
IDI7Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHJlY3RDb3VudDsgaSsrKQotICAgICAg
ICBhcHBlbmRXZWJDb3JlUGF0aFRvQ2Fpcm9Db250ZXh0KGNyLCBQYXRoOjpjcmVhdGVSb3VuZGVk
UmVjdGFuZ2xlKHJlY3RzW2ldLCBGbG9hdFNpemUocmFkaXVzLCByYWRpdXMpKSk7CisgICAgUGF0
aCBwYXRoOworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCByZWN0Q291bnQ7ICsraSkgewor
ICAgICAgICBpZiAoaSA+IDApCisgICAgICAgICAgICBwYXRoLmNsZWFyKCk7CisgICAgICAgIHBh
dGguYWRkUm91bmRlZFJlY3QocmVjdHNbaV0sIEZsb2F0U2l6ZShyYWRpdXMsIHJhZGl1cykpOwor
ICAgICAgICBhcHBlbmRXZWJDb3JlUGF0aFRvQ2Fpcm9Db250ZXh0KGNyLCBwYXRoKTsKKyAgICB9
CiAKICAgICAvLyBGb3JjZSB0aGUgYWxwaGEgdG8gNTAlLiAgVGhpcyBtYXRjaGVzIHdoYXQgdGhl
IE1hYyBkb2VzIHdpdGggb3V0bGluZSByaW5ncy4KICAgICBDb2xvciByaW5nQ29sb3IoY29sb3Iu
cmVkKCksIGNvbG9yLmdyZWVuKCksIGNvbG9yLmJsdWUoKSwgMTI3KTsKQEAgLTEyNzUsNyArMTI4
MCwxMCBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6ZHJhd1RpbGVkU2hhZG93KGNvbnN0IEludFJl
Y3QmIHJlY3QsIGNvbnN0IEZsb2F0U2l6ZSYgdG9wTAogICAgIC8vIERyYXcgc2hhZG93IGludG8g
YSBuZXcgSW1hZ2VCdWZmZXIuCiAgICAgY2Fpcm9fdCogc21hbGxCdWZmZXJDb250ZXh0ID0gc21h
bGxCdWZmZXItPmNvbnRleHQoKS0+cGxhdGZvcm1Db250ZXh0KCk7CiAgICAgY29weUNvbnRleHRQ
cm9wZXJ0aWVzKGNyLCBzbWFsbEJ1ZmZlckNvbnRleHQpOwotICAgIGFwcGVuZFdlYkNvcmVQYXRo
VG9DYWlyb0NvbnRleHQoc21hbGxCdWZmZXItPmNvbnRleHQoKS0+cGxhdGZvcm1Db250ZXh0KCks
IFBhdGg6OmNyZWF0ZVJvdW5kZWRSZWN0YW5nbGUoc21hbGxSZWN0LCB0b3BMZWZ0UmFkaXVzLCB0
b3BSaWdodFJhZGl1cywgYm90dG9tTGVmdFJhZGl1cywgYm90dG9tUmlnaHRSYWRpdXMpKTsKKwor
ICAgIFBhdGggcGF0aDsKKyAgICBwYXRoLmFkZFJvdW5kZWRSZWN0KHNtYWxsUmVjdCwgdG9wTGVm
dFJhZGl1cywgdG9wUmlnaHRSYWRpdXMsIGJvdHRvbUxlZnRSYWRpdXMsIGJvdHRvbVJpZ2h0UmFk
aXVzKTsKKyAgICBhcHBlbmRXZWJDb3JlUGF0aFRvQ2Fpcm9Db250ZXh0KHNtYWxsQnVmZmVyLT5j
b250ZXh0KCktPnBsYXRmb3JtQ29udGV4dCgpLCBwYXRoKTsKICAgICBzZXRQbGF0Zm9ybUZpbGwo
dGhpcywgc21hbGxCdWZmZXJDb250ZXh0LCBtX2NvbW1vbik7CiAKICAgICBPd25QdHI8SW1hZ2VC
dWZmZXI+IHNoYWRvd0J1ZmZlciA9IEltYWdlQnVmZmVyOjpjcmVhdGUoc21hbGxCdWZmZXJTaXpl
KTsKQEAgLTEyOTQsNyArMTMwMiw5IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpkcmF3VGlsZWRT
aGFkb3coY29uc3QgSW50UmVjdCYgcmVjdCwgY29uc3QgRmxvYXRTaXplJiB0b3BMCiAgICAgc2hh
ZG93UmVjdC5pbmZsYXRlKC1yYWRpdXNUd2ljZSk7CiAgICAgaWYgKCFzaGFkb3dSZWN0LmlzRW1w
dHkoKSkgewogICAgICAgICBjYWlyb19zYXZlKGNyKTsKLSAgICAgICAgYXBwZW5kV2ViQ29yZVBh
dGhUb0NhaXJvQ29udGV4dChjciwgUGF0aDo6Y3JlYXRlUm91bmRlZFJlY3RhbmdsZShzaGFkb3dS
ZWN0LCB0b3BMZWZ0UmFkaXVzLCB0b3BSaWdodFJhZGl1cywgYm90dG9tTGVmdFJhZGl1cywgYm90
dG9tUmlnaHRSYWRpdXMpKTsKKyAgICAgICAgcGF0aC5jbGVhcigpOworICAgICAgICBwYXRoLmFk
ZFJvdW5kZWRSZWN0KHNoYWRvd1JlY3QsIHRvcExlZnRSYWRpdXMsIHRvcFJpZ2h0UmFkaXVzLCBi
b3R0b21MZWZ0UmFkaXVzLCBib3R0b21SaWdodFJhZGl1cyk7CisgICAgICAgIGFwcGVuZFdlYkNv
cmVQYXRoVG9DYWlyb0NvbnRleHQoY3IsIHBhdGgpOwogICAgICAgICBzZXRDb2xvcihjciwgc2hh
ZG93Q29sb3IpOwogICAgICAgICBjYWlyb19maWxsKGNyKTsKICAgICAgICAgY2Fpcm9fcmVzdG9y
ZShjcik7CkBAIC0xMzczLDcgKzEzODMsOSBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6ZmlsbFJv
dW5kZWRSZWN0KGNvbnN0IEludFJlY3QmIHIsIGNvbnN0IEludFNpemUmIHRvcExlZnQsCiAKICAg
ICBjYWlyb190KiBjciA9IG1fZGF0YS0+Y3I7CiAgICAgY2Fpcm9fc2F2ZShjcik7Ci0gICAgYXBw
ZW5kV2ViQ29yZVBhdGhUb0NhaXJvQ29udGV4dChjciwgUGF0aDo6Y3JlYXRlUm91bmRlZFJlY3Rh
bmdsZShyLCB0b3BMZWZ0LCB0b3BSaWdodCwgYm90dG9tTGVmdCwgYm90dG9tUmlnaHQpKTsKKyAg
ICBQYXRoIHBhdGg7CisgICAgcGF0aC5hZGRSb3VuZGVkUmVjdChyLCB0b3BMZWZ0LCB0b3BSaWdo
dCwgYm90dG9tTGVmdCwgYm90dG9tUmlnaHQpOworICAgIGFwcGVuZFdlYkNvcmVQYXRoVG9DYWly
b0NvbnRleHQoY3IsIHBhdGgpOwogICAgIHNldENvbG9yKGNyLCBjb2xvcik7CiAgICAgZHJhd1Bh
dGhTaGFkb3codGhpcywgbV9jb21tb24sIHRydWUsIGZhbHNlKTsKICAgICBjYWlyb19maWxsKGNy
KTsKZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvR3JhcGhpY3NDb250
ZXh0Q0cuY3BwIGIvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9HcmFwaGljc0NvbnRleHRD
Ry5jcHAKaW5kZXggYmQ4ZTg1MC4uMDZjMGYwMCAxMDA2NDQKLS0tIGEvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jZy9HcmFwaGljc0NvbnRleHRDRy5jcHAKKysrIGIvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jZy9HcmFwaGljc0NvbnRleHRDRy5jcHAKQEAgLTY2Nyw3ICs2NjcsOSBAQCB2
b2lkIEdyYXBoaWNzQ29udGV4dDo6ZmlsbFJvdW5kZWRSZWN0KGNvbnN0IEludFJlY3QmIHJlY3Qs
IGNvbnN0IEludFNpemUmIHRvcExlZgogICAgIGlmIChvbGRGaWxsQ29sb3IgIT0gY29sb3IgfHwg
b2xkQ29sb3JTcGFjZSAhPSBjb2xvclNwYWNlKQogICAgICAgICBzZXRDR0ZpbGxDb2xvcihjb250
ZXh0LCBjb2xvciwgY29sb3JTcGFjZSk7CiAKLSAgICBhZGRQYXRoKFBhdGg6OmNyZWF0ZVJvdW5k
ZWRSZWN0YW5nbGUocmVjdCwgdG9wTGVmdCwgdG9wUmlnaHQsIGJvdHRvbUxlZnQsIGJvdHRvbVJp
Z2h0KSk7CisgICAgUGF0aCBwYXRoOworICAgIHBhdGguYWRkUm91bmRlZFJlY3QocmVjdCwgdG9w
TGVmdCwgdG9wUmlnaHQsIGJvdHRvbUxlZnQsIGJvdHRvbVJpZ2h0KTsKKyAgICBhZGRQYXRoKHBh
dGgpOwogICAgIGZpbGxQYXRoKCk7CiAKICAgICBpZiAob2xkRmlsbENvbG9yICE9IGNvbG9yIHx8
IG9sZENvbG9yU3BhY2UgIT0gY29sb3JTcGFjZSkKZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvcXQvR3JhcGhpY3NDb250ZXh0UXQuY3BwIGIvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9xdC9HcmFwaGljc0NvbnRleHRRdC5jcHAKaW5kZXggN2U0YWY0MC4uYzg4NDY0ZiAx
MDA2NDQKLS0tIGEvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9xdC9HcmFwaGljc0NvbnRleHRR
dC5jcHAKKysrIGIvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9xdC9HcmFwaGljc0NvbnRleHRR
dC5jcHAKQEAgLTcyMiw3ICs3MjIsOCBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6ZmlsbFJvdW5k
ZWRSZWN0KGNvbnN0IEludFJlY3QmIHJlY3QsIGNvbnN0IEludFNpemUmIHRvcExlZgogICAgIGlm
IChwYWludGluZ0Rpc2FibGVkKCkgfHwgIWNvbG9yLmlzVmFsaWQoKSkKICAgICAgICAgcmV0dXJu
OwogCi0gICAgUGF0aCBwYXRoID0gUGF0aDo6Y3JlYXRlUm91bmRlZFJlY3RhbmdsZShyZWN0LCB0
b3BMZWZ0LCB0b3BSaWdodCwgYm90dG9tTGVmdCwgYm90dG9tUmlnaHQpOworICAgIFBhdGggcGF0
aDsKKyAgICBwYXRoLmFkZFJvdW5kZWRSZWN0KHJlY3QsIHRvcExlZnQsIHRvcFJpZ2h0LCBib3R0
b21MZWZ0LCBib3R0b21SaWdodCk7CiAgICAgUVBhaW50ZXIqIHAgPSBtX2RhdGEtPnAoKTsKICAg
ICBpZiAobV9kYXRhLT5oYXNTaGFkb3coKSkgewogICAgICAgICBwLT50cmFuc2xhdGUobV9kYXRh
LT5zaGFkb3cub2Zmc2V0KCkpOwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVy
Qm94TW9kZWxPYmplY3QuY3BwIGIvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQm94TW9kZWxPYmpl
Y3QuY3BwCmluZGV4IDAyYTI4NDcuLjliOGNhYjkgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlckJveE1vZGVsT2JqZWN0LmNwcAorKysgYi9XZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJCb3hNb2RlbE9iamVjdC5jcHAKQEAgLTEwNjEsNyArMTA2MSw3IEBAIHZvaWQgUmVuZGVyQm94
TW9kZWxPYmplY3Q6OnBhaW50Qm9yZGVyKEdyYXBoaWNzQ29udGV4dCogZ3JhcGhpY3NDb250ZXh0
LCBpbnQgdHgsCiAgICAgICAgIGdyYXBoaWNzQ29udGV4dC0+YWRkUm91bmRlZFJlY3RDbGlwKGJv
cmRlclJlY3QsIHRvcExlZnQsIHRvcFJpZ2h0LCBib3R0b21MZWZ0LCBib3R0b21SaWdodCk7CiAg
ICAgICAgIGdyYXBoaWNzQ29udGV4dC0+Y2xpcE91dFJvdW5kZWRSZWN0KGlubmVyQm9yZGVyUmVj
dCwgaW5uZXJUb3BMZWZ0UmFkaXVzLCBpbm5lclRvcFJpZ2h0UmFkaXVzLCBpbm5lckJvdHRvbUxl
ZnRSYWRpdXMsIGlubmVyQm90dG9tUmlnaHRSYWRpdXMpOwogCi0gICAgICAgIHJvdW5kZWRQYXRo
ID0gUGF0aDo6Y3JlYXRlUm91bmRlZFJlY3RhbmdsZShib3JkZXJSZWN0LCB0b3BMZWZ0LCB0b3BS
aWdodCwgYm90dG9tTGVmdCwgYm90dG9tUmlnaHQpOworICAgICAgICByb3VuZGVkUGF0aC5hZGRS
b3VuZGVkUmVjdChib3JkZXJSZWN0LCB0b3BMZWZ0LCB0b3BSaWdodCwgYm90dG9tTGVmdCwgYm90
dG9tUmlnaHQpOwogICAgICAgICBncmFwaGljc0NvbnRleHQtPmFkZFBhdGgocm91bmRlZFBhdGgp
OwogICAgIH0KIApAQCAtMTc1MiwyNCArMTc1MiwyOSBAQCB2b2lkIFJlbmRlckJveE1vZGVsT2Jq
ZWN0OjpwYWludEJveFNoYWRvdyhHcmFwaGljc0NvbnRleHQqIGNvbnRleHQsIGludCB0eCwgaW50
CiAKICAgICAgICAgICAgIGNvbnRleHQtPnNhdmUoKTsKIAotICAgICAgICAgICAgaWYgKGhhc0Jv
cmRlclJhZGl1cykKLSAgICAgICAgICAgICAgICBjb250ZXh0LT5jbGlwKFBhdGg6OmNyZWF0ZVJv
dW5kZWRSZWN0YW5nbGUocmVjdCwgdG9wTGVmdCwgdG9wUmlnaHQsIGJvdHRvbUxlZnQsIGJvdHRv
bVJpZ2h0KSk7Ci0gICAgICAgICAgICBlbHNlCisgICAgICAgICAgICBQYXRoIHBhdGg7CisgICAg
ICAgICAgICBpZiAoaGFzQm9yZGVyUmFkaXVzKSB7CisgICAgICAgICAgICAgICAgcGF0aC5hZGRS
b3VuZGVkUmVjdChyZWN0LCB0b3BMZWZ0LCB0b3BSaWdodCwgYm90dG9tTGVmdCwgYm90dG9tUmln
aHQpOworICAgICAgICAgICAgICAgIGNvbnRleHQtPmNsaXAocGF0aCk7CisgICAgICAgICAgICAg
ICAgcGF0aC5jbGVhcigpOworICAgICAgICAgICAgfSBlbHNlCiAgICAgICAgICAgICAgICAgY29u
dGV4dC0+Y2xpcChyZWN0KTsKIAogICAgICAgICAgICAgSW50U2l6ZSBleHRyYU9mZnNldCgyICog
dyArIG1heCgwLCBzaGFkb3dPZmZzZXQud2lkdGgoKSkgKyBzaGFkb3dCbHVyIC0gMiAqIHNoYWRv
d1NwcmVhZCArIDEsIDApOwogICAgICAgICAgICAgY29udGV4dC0+dHJhbnNsYXRlKGV4dHJhT2Zm
c2V0LndpZHRoKCksIGV4dHJhT2Zmc2V0LmhlaWdodCgpKTsKICAgICAgICAgICAgIHNoYWRvd09m
ZnNldCAtPSBleHRyYU9mZnNldDsKIAotICAgICAgICAgICAgY29udGV4dC0+YmVnaW5QYXRoKCk7
Ci0gICAgICAgICAgICBjb250ZXh0LT5hZGRQYXRoKFBhdGg6OmNyZWF0ZVJlY3RhbmdsZShvdXRl
clJlY3QpKTsKKyAgICAgICAgICAgIHBhdGguYWRkUmVjdChvdXRlclJlY3QpOwogCiAgICAgICAg
ICAgICBpZiAoaGFzQm9yZGVyUmFkaXVzKSB7CiAgICAgICAgICAgICAgICAgaWYgKHNoYWRvd1Nw
cmVhZCA+IDApCiAgICAgICAgICAgICAgICAgICAgIHVuaWZvcm1seUV4cGFuZEJvcmRlclJhZGlp
KC1zaGFkb3dTcHJlYWQsIHRvcExlZnQsIHRvcFJpZ2h0LCBib3R0b21MZWZ0LCBib3R0b21SaWdo
dCk7Ci0gICAgICAgICAgICAgICAgY29udGV4dC0+YWRkUGF0aChQYXRoOjpjcmVhdGVSb3VuZGVk
UmVjdGFuZ2xlKGhvbGVSZWN0LCB0b3BMZWZ0LCB0b3BSaWdodCwgYm90dG9tTGVmdCwgYm90dG9t
UmlnaHQpKTsKKyAgICAgICAgICAgICAgICBwYXRoLmFkZFJvdW5kZWRSZWN0KGhvbGVSZWN0LCB0
b3BMZWZ0LCB0b3BSaWdodCwgYm90dG9tTGVmdCwgYm90dG9tUmlnaHQpOwogICAgICAgICAgICAg
fSBlbHNlCi0gICAgICAgICAgICAgICAgY29udGV4dC0+YWRkUGF0aChQYXRoOjpjcmVhdGVSZWN0
YW5nbGUoaG9sZVJlY3QpKTsKKyAgICAgICAgICAgICAgICBwYXRoLmFkZFJlY3QoaG9sZVJlY3Qp
OworCisgICAgICAgICAgICBjb250ZXh0LT5iZWdpblBhdGgoKTsKKyAgICAgICAgICAgIGNvbnRl
eHQtPmFkZFBhdGgocGF0aCk7CiAKICAgICAgICAgICAgIGNvbnRleHQtPnNldEZpbGxSdWxlKFJV
TEVfRVZFTk9ERCk7CiAgICAgICAgICAgICBjb250ZXh0LT5zZXRGaWxsQ29sb3IoZmlsbENvbG9y
LCBzLT5jb2xvclNwYWNlKCkpOwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVy
RW1iZWRkZWRPYmplY3QuY3BwIGIvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyRW1iZWRkZWRPYmpl
Y3QuY3BwCmluZGV4IGFhMzAxZTIuLjE2NjEzYTUgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlckVtYmVkZGVkT2JqZWN0LmNwcAorKysgYi9XZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJFbWJlZGRlZE9iamVjdC5jcHAKQEAgLTIwNiw3ICsyMDYsNyBAQCBib29sIFJlbmRlckVtYmVk
ZGVkT2JqZWN0OjpnZXRSZXBsYWNlbWVudFRleHRHZW9tZXRyeShpbnQgdHgsIGludCB0eSwgRmxv
YXRSZWN0JgogICAgIGZsb2F0IHkgPSAoY29udGVudFJlY3Quc2l6ZSgpLmhlaWdodCgpIC8gMiAt
IHJlcGxhY2VtZW50VGV4dFJlY3Quc2l6ZSgpLmhlaWdodCgpIC8gMikgKyBjb250ZW50UmVjdC5s
b2NhdGlvbigpLnkoKTsKICAgICByZXBsYWNlbWVudFRleHRSZWN0LnNldExvY2F0aW9uKEZsb2F0
UG9pbnQoeCwgeSkpOwogICAgIAotICAgIHBhdGggPSBQYXRoOjpjcmVhdGVSb3VuZGVkUmVjdGFu
Z2xlKHJlcGxhY2VtZW50VGV4dFJlY3QsIEZsb2F0U2l6ZShyZXBsYWNlbWVudFRleHRSb3VuZGVk
UmVjdFJhZGl1cywgcmVwbGFjZW1lbnRUZXh0Um91bmRlZFJlY3RSYWRpdXMpKTsKKyAgICBwYXRo
LmFkZFJvdW5kZWRSZWN0KHJlcGxhY2VtZW50VGV4dFJlY3QsIEZsb2F0U2l6ZShyZXBsYWNlbWVu
dFRleHRSb3VuZGVkUmVjdFJhZGl1cywgcmVwbGFjZW1lbnRUZXh0Um91bmRlZFJlY3RSYWRpdXMp
KTsKIAogICAgIHJldHVybiB0cnVlOwogfQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyU1ZHUmVzb3VyY2VDbGlwcGVyLmNwcCBiL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclNW
R1Jlc291cmNlQ2xpcHBlci5jcHAKaW5kZXggYTA5YWZiMi4uMjY1OWQ2NCAxMDA2NDQKLS0tIGEv
V2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyU1ZHUmVzb3VyY2VDbGlwcGVyLmNwcAorKysgYi9XZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJTVkdSZXNvdXJjZUNsaXBwZXIuY3BwCkBAIC0xMzYsNyArMTM2
LDcgQEAgYm9vbCBSZW5kZXJTVkdSZXNvdXJjZUNsaXBwZXI6OnBhdGhPbmx5Q2xpcHBpbmcoR3Jh
cGhpY3NDb250ZXh0KiBjb250ZXh0LCBjb25zdAogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwog
ICAgICAgICAvLyBGYWxsYmFjayB0byBtYXNraW5nLCBpZiB0aGVyZSBpcyBtb3JlIHRoYW4gb25l
IGNsaXBwaW5nIHBhdGguCiAgICAgICAgIGlmIChjbGlwUGF0aC5pc0VtcHR5KCkpIHsKLSAgICAg
ICAgICAgIGNsaXBQYXRoID0gc3R5bGVkLT50b0NsaXBQYXRoKCk7CisgICAgICAgICAgICBzdHls
ZWQtPnRvQ2xpcFBhdGgoY2xpcFBhdGgpOwogICAgICAgICAgICAgY2xpcFJ1bGUgPSBzdmdTdHls
ZS0+Y2xpcFJ1bGUoKTsKICAgICAgICAgfSBlbHNlCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7
CmRpZmYgLS1naXQgYS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUGF0aC5jcHAgYi9X
ZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUGF0aC5jcHAKaW5kZXggYWRhMzYwYS4uNDgz
MzAzZiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1BhdGguY3Bw
CisrKyBiL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdQYXRoLmNwcApAQCAtMTEyLDcg
KzExMiw4IEBAIHZvaWQgUmVuZGVyU1ZHUGF0aDo6bGF5b3V0KCkKIAogICAgIGJvb2wgbmVlZHNQ
YXRoVXBkYXRlID0gbV9uZWVkc1BhdGhVcGRhdGU7CiAgICAgaWYgKG5lZWRzUGF0aFVwZGF0ZSkg
ewotICAgICAgICBtX3BhdGggPSBlbGVtZW50LT50b1BhdGhEYXRhKCk7CisgICAgICAgIG1fcGF0
aC5jbGVhcigpOworICAgICAgICBlbGVtZW50LT50b1BhdGhEYXRhKG1fcGF0aCk7CiAgICAgICAg
IG1fbmVlZHNQYXRoVXBkYXRlID0gZmFsc2U7CiAgICAgICAgIHVwZGF0ZUNhY2hlZEJvdW5kYXJp
ZXNJblBhcmVudHMgPSB0cnVlOwogICAgIH0KZGlmZiAtLWdpdCBhL1dlYkNvcmUvcmVuZGVyaW5n
L3N2Zy9SZW5kZXJTVkdUZXh0UGF0aC5jcHAgYi9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVy
U1ZHVGV4dFBhdGguY3BwCmluZGV4IDVkOTc3ZjkuLjY0ZWJjNmQgMTAwNjQ0Ci0tLSBhL1dlYkNv
cmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdUZXh0UGF0aC5jcHAKKysrIGIvV2ViQ29yZS9yZW5k
ZXJpbmcvc3ZnL1JlbmRlclNWR1RleHRQYXRoLmNwcApAQCAtNTMsNyArNTMsOCBAQCBQYXRoIFJl
bmRlclNWR1RleHRQYXRoOjpsYXlvdXRQYXRoKCkgY29uc3QKICAgICAKICAgICBTVkdQYXRoRWxl
bWVudCogcGF0aEVsZW1lbnQgPSBzdGF0aWNfY2FzdDxTVkdQYXRoRWxlbWVudCo+KHRhcmdldEVs
ZW1lbnQpOwogICAgIAotICAgIFBhdGggcGF0aERhdGEgPSBwYXRoRWxlbWVudC0+dG9QYXRoRGF0
YSgpOworICAgIFBhdGggcGF0aERhdGE7CisgICAgcGF0aEVsZW1lbnQtPnRvUGF0aERhdGEocGF0
aERhdGEpOwogICAgIC8vIFNwZWM6ICBUaGUgdHJhbnNmb3JtIGF0dHJpYnV0ZSBvbiB0aGUgcmVm
ZXJlbmNlZCAncGF0aCcgZWxlbWVudCByZXByZXNlbnRzIGEKICAgICAvLyBzdXBwbGVtZW50YWwg
dHJhbnNmb3JtYXRpb24gcmVsYXRpdmUgdG8gdGhlIGN1cnJlbnQgdXNlciBjb29yZGluYXRlIHN5
c3RlbSBmb3IKICAgICAvLyB0aGUgY3VycmVudCAndGV4dCcgZWxlbWVudCwgaW5jbHVkaW5nIGFu
eSBhZGp1c3RtZW50cyB0byB0aGUgY3VycmVudCB1c2VyIGNvb3JkaW5hdGUKZGlmZiAtLWdpdCBh
L1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdJbmxpbmVUZXh0Qm94LmNwcCBiL1dlYkNvcmUvcmVu
ZGVyaW5nL3N2Zy9TVkdJbmxpbmVUZXh0Qm94LmNwcAppbmRleCA4MzUyZWU1Li43MmYxNWRkIDEw
MDY0NAotLS0gYS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHSW5saW5lVGV4dEJveC5jcHAKKysr
IGIvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR0lubGluZVRleHRCb3guY3BwCkBAIC00OTAsMTEg
KzQ5MCwxOCBAQCB2b2lkIFNWR0lubGluZVRleHRCb3g6OnBhaW50RGVjb3JhdGlvbldpdGhTdHls
ZShHcmFwaGljc0NvbnRleHQqIGNvbnRleHQsIEVUZXh0RAogCiAgICAgLy8gVGhlIGluaXRpYWwg
eSB2YWx1ZSByZWZlcnMgdG8gb3ZlcmxpbmUgcG9zaXRpb24uCiAgICAgZmxvYXQgdGhpY2tuZXNz
ID0gdGhpY2tuZXNzRm9yRGVjb3JhdGlvbihkZWNvcmF0aW9uLCBmb250KTsKKworICAgIGlmIChm
cmFnbWVudC53aWR0aCA8PSAwICYmIHRoaWNrbmVzcyA8PSAwKQorICAgICAgICByZXR1cm47CisK
ICAgICBmbG9hdCB5ID0gZnJhZ21lbnQueSAtIGZvbnQuYXNjZW50KCkgKyBwb3NpdGlvbk9mZnNl
dEZvckRlY29yYXRpb24oZGVjb3JhdGlvbiwgZm9udCwgdGhpY2tuZXNzKTsKIAorICAgIFBhdGgg
cGF0aDsKKyAgICBwYXRoLmFkZFJlY3QoRmxvYXRSZWN0KGZyYWdtZW50LngsIHksIGZyYWdtZW50
LndpZHRoLCB0aGlja25lc3MpKTsKKwogICAgIGNvbnRleHQtPnNhdmUoKTsKICAgICBjb250ZXh0
LT5iZWdpblBhdGgoKTsKLSAgICBjb250ZXh0LT5hZGRQYXRoKFBhdGg6OmNyZWF0ZVJlY3Rhbmds
ZShGbG9hdFJlY3QoZnJhZ21lbnQueCwgeSwgZnJhZ21lbnQud2lkdGgsIHRoaWNrbmVzcykpKTsK
KyAgICBjb250ZXh0LT5hZGRQYXRoKHBhdGgpOwogCiAgICAgaWYgKGFjcXVpcmVQYWludGluZ1Jl
c291cmNlKGNvbnRleHQsIGRlY29yYXRpb25SZW5kZXJlciwgZGVjb3JhdGlvblN0eWxlKSkKICAg
ICAgICAgcmVsZWFzZVBhaW50aW5nUmVzb3VyY2UoY29udGV4dCk7CmRpZmYgLS1naXQgYS9XZWJD
b3JlL3N2Zy9TVkdBbmltYXRlTW90aW9uRWxlbWVudC5jcHAgYi9XZWJDb3JlL3N2Zy9TVkdBbmlt
YXRlTW90aW9uRWxlbWVudC5jcHAKaW5kZXggYjUwYTk5My4uMjYxNTFlZCAxMDA2NDQKLS0tIGEv
V2ViQ29yZS9zdmcvU1ZHQW5pbWF0ZU1vdGlvbkVsZW1lbnQuY3BwCisrKyBiL1dlYkNvcmUvc3Zn
L1NWR0FuaW1hdGVNb3Rpb25FbGVtZW50LmNwcApAQCAtMTEyLDkgKzExMiwxMCBAQCBQYXRoIFNW
R0FuaW1hdGVNb3Rpb25FbGVtZW50OjphbmltYXRpb25QYXRoKCkgY29uc3QKICAgICAgICAgaWYg
KGNoaWxkLT5oYXNUYWdOYW1lKFNWR05hbWVzOjptcGF0aFRhZykpIHsKICAgICAgICAgICAgIFNW
R01QYXRoRWxlbWVudCogbVBhdGggPSBzdGF0aWNfY2FzdDxTVkdNUGF0aEVsZW1lbnQqPihjaGls
ZCk7CiAgICAgICAgICAgICBTVkdQYXRoRWxlbWVudCogcGF0aEVsZW1lbnQgPSBtUGF0aC0+cGF0
aEVsZW1lbnQoKTsKKyAgICAgICAgICAgIFBhdGggcGF0aDsKICAgICAgICAgICAgIGlmIChwYXRo
RWxlbWVudCkKLSAgICAgICAgICAgICAgICByZXR1cm4gcGF0aEVsZW1lbnQtPnRvUGF0aERhdGEo
KTsKLSAgICAgICAgICAgIHJldHVybiBQYXRoKCk7CisgICAgICAgICAgICAgICAgcGF0aEVsZW1l
bnQtPnRvUGF0aERhdGEocGF0aCk7CisgICAgICAgICAgICByZXR1cm4gcGF0aDsKICAgICAgICAg
fQogICAgIH0KICAgICBpZiAoaGFzQXR0cmlidXRlKFNWR05hbWVzOjpwYXRoQXR0cikpCmRpZmYg
LS1naXQgYS9XZWJDb3JlL3N2Zy9TVkdDaXJjbGVFbGVtZW50LmNwcCBiL1dlYkNvcmUvc3ZnL1NW
R0NpcmNsZUVsZW1lbnQuY3BwCmluZGV4IDRlZDRlZmUuLjVmYzUwYzMgMTAwNjQ0Ci0tLSBhL1dl
YkNvcmUvc3ZnL1NWR0NpcmNsZUVsZW1lbnQuY3BwCisrKyBiL1dlYkNvcmUvc3ZnL1NWR0NpcmNs
ZUVsZW1lbnQuY3BwCkBAIC0xMjEsOSArMTIxLDE0IEBAIHZvaWQgU1ZHQ2lyY2xlRWxlbWVudDo6
c3luY2hyb25pemVQcm9wZXJ0eShjb25zdCBRdWFsaWZpZWROYW1lJiBhdHRyTmFtZSkKICAgICAg
ICAgc3luY2hyb25pemVFeHRlcm5hbFJlc291cmNlc1JlcXVpcmVkKCk7CiB9CiAKLVBhdGggU1ZH
Q2lyY2xlRWxlbWVudDo6dG9QYXRoRGF0YSgpIGNvbnN0Cit2b2lkIFNWR0NpcmNsZUVsZW1lbnQ6
OnRvUGF0aERhdGEoUGF0aCYgcGF0aCkgY29uc3QKIHsKLSAgICByZXR1cm4gUGF0aDo6Y3JlYXRl
Q2lyY2xlKEZsb2F0UG9pbnQoY3goKS52YWx1ZSh0aGlzKSwgY3koKS52YWx1ZSh0aGlzKSksIHIo
KS52YWx1ZSh0aGlzKSk7CisgICAgZmxvYXQgcmFkaXVzID0gcigpLnZhbHVlKHRoaXMpOworCisg
ICAgaWYgKHJhZGl1cyA8PSAwKQorICAgICAgICByZXR1cm47CisKKyAgICBwYXRoLmFkZEVsbGlw
c2UoRmxvYXRSZWN0KGN4KCkudmFsdWUodGhpcykgLSByYWRpdXMsIGN5KCkudmFsdWUodGhpcykg
LSByYWRpdXMsIHJhZGl1cyAqIDIsIHJhZGl1cyAqIDIpKTsKIH0KIAogYm9vbCBTVkdDaXJjbGVF
bGVtZW50OjpzZWxmSGFzUmVsYXRpdmVMZW5ndGhzKCkgY29uc3QKZGlmZiAtLWdpdCBhL1dlYkNv
cmUvc3ZnL1NWR0NpcmNsZUVsZW1lbnQuaCBiL1dlYkNvcmUvc3ZnL1NWR0NpcmNsZUVsZW1lbnQu
aAppbmRleCBkZDExNzkyLi40ZWI5MjYyIDEwMDY0NAotLS0gYS9XZWJDb3JlL3N2Zy9TVkdDaXJj
bGVFbGVtZW50LmgKKysrIGIvV2ViQ29yZS9zdmcvU1ZHQ2lyY2xlRWxlbWVudC5oCkBAIC00NSw3
ICs0NSw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgdmlydHVhbCB2b2lkIHN2Z0F0
dHJpYnV0ZUNoYW5nZWQoY29uc3QgUXVhbGlmaWVkTmFtZSYpOwogICAgICAgICB2aXJ0dWFsIHZv
aWQgc3luY2hyb25pemVQcm9wZXJ0eShjb25zdCBRdWFsaWZpZWROYW1lJik7CiAKLSAgICAgICAg
dmlydHVhbCBQYXRoIHRvUGF0aERhdGEoKSBjb25zdDsKKyAgICAgICAgdmlydHVhbCB2b2lkIHRv
UGF0aERhdGEoUGF0aCYpIGNvbnN0OwogCiAgICAgICAgIHZpcnR1YWwgYm9vbCBzZWxmSGFzUmVs
YXRpdmVMZW5ndGhzKCkgY29uc3Q7CiAKZGlmZiAtLWdpdCBhL1dlYkNvcmUvc3ZnL1NWR0VsbGlw
c2VFbGVtZW50LmNwcCBiL1dlYkNvcmUvc3ZnL1NWR0VsbGlwc2VFbGVtZW50LmNwcAppbmRleCAx
Njc0M2VkLi4wMWVhNjE5IDEwMDY0NAotLS0gYS9XZWJDb3JlL3N2Zy9TVkdFbGxpcHNlRWxlbWVu
dC5jcHAKKysrIGIvV2ViQ29yZS9zdmcvU1ZHRWxsaXBzZUVsZW1lbnQuY3BwCkBAIC0xMzAsMTAg
KzEzMCwxNyBAQCB2b2lkIFNWR0VsbGlwc2VFbGVtZW50OjpzeW5jaHJvbml6ZVByb3BlcnR5KGNv
bnN0IFF1YWxpZmllZE5hbWUmIGF0dHJOYW1lKQogICAgICAgICBzeW5jaHJvbml6ZUV4dGVybmFs
UmVzb3VyY2VzUmVxdWlyZWQoKTsKIH0KIAotUGF0aCBTVkdFbGxpcHNlRWxlbWVudDo6dG9QYXRo
RGF0YSgpIGNvbnN0Cit2b2lkIFNWR0VsbGlwc2VFbGVtZW50Ojp0b1BhdGhEYXRhKFBhdGgmIHBh
dGgpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIFBhdGg6OmNyZWF0ZUVsbGlwc2UoRmxvYXRQb2ludChj
eCgpLnZhbHVlKHRoaXMpLCBjeSgpLnZhbHVlKHRoaXMpKSwKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHJ4KCkudmFsdWUodGhpcyksIHJ5KCkudmFsdWUodGhpcykp
OworICAgIGZsb2F0IHJhZGl1c1ggPSByeCgpLnZhbHVlKHRoaXMpOworICAgIGlmIChyYWRpdXNY
IDw9IDApCisgICAgICAgIHJldHVybjsKKworICAgIGZsb2F0IHJhZGl1c1kgPSByeSgpLnZhbHVl
KHRoaXMpOworICAgIGlmIChyYWRpdXNZIDw9IDApCisgICAgICAgIHJldHVybjsKKworICAgIHBh
dGguYWRkRWxsaXBzZShGbG9hdFJlY3QoY3goKS52YWx1ZSh0aGlzKSAtIHJhZGl1c1gsIGN5KCku
dmFsdWUodGhpcykgLSByYWRpdXNZLCByYWRpdXNYICogMiwgcmFkaXVzWSAqIDIpKTsKIH0KICAK
IGJvb2wgU1ZHRWxsaXBzZUVsZW1lbnQ6OnNlbGZIYXNSZWxhdGl2ZUxlbmd0aHMoKSBjb25zdApk
aWZmIC0tZ2l0IGEvV2ViQ29yZS9zdmcvU1ZHRWxsaXBzZUVsZW1lbnQuaCBiL1dlYkNvcmUvc3Zn
L1NWR0VsbGlwc2VFbGVtZW50LmgKaW5kZXggYmVlODE1Yy4uY2FkMzI5ZSAxMDA2NDQKLS0tIGEv
V2ViQ29yZS9zdmcvU1ZHRWxsaXBzZUVsZW1lbnQuaAorKysgYi9XZWJDb3JlL3N2Zy9TVkdFbGxp
cHNlRWxlbWVudC5oCkBAIC00NSw3ICs0NSw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAg
ICAgdmlydHVhbCB2b2lkIHN2Z0F0dHJpYnV0ZUNoYW5nZWQoY29uc3QgUXVhbGlmaWVkTmFtZSYp
OwogICAgICAgICB2aXJ0dWFsIHZvaWQgc3luY2hyb25pemVQcm9wZXJ0eShjb25zdCBRdWFsaWZp
ZWROYW1lJik7CiAKLSAgICAgICAgdmlydHVhbCBQYXRoIHRvUGF0aERhdGEoKSBjb25zdDsKKyAg
ICAgICAgdmlydHVhbCB2b2lkIHRvUGF0aERhdGEoUGF0aCYpIGNvbnN0OwogCiAgICAgICAgIHZp
cnR1YWwgYm9vbCBzZWxmSGFzUmVsYXRpdmVMZW5ndGhzKCkgY29uc3Q7CiAKZGlmZiAtLWdpdCBh
L1dlYkNvcmUvc3ZnL1NWR0xpbmVFbGVtZW50LmNwcCBiL1dlYkNvcmUvc3ZnL1NWR0xpbmVFbGVt
ZW50LmNwcAppbmRleCAyMjlkZmE5Li44YTA4MzVlIDEwMDY0NAotLS0gYS9XZWJDb3JlL3N2Zy9T
VkdMaW5lRWxlbWVudC5jcHAKKysrIGIvV2ViQ29yZS9zdmcvU1ZHTGluZUVsZW1lbnQuY3BwCkBA
IC0xMjYsMTAgKzEyNiwxMCBAQCB2b2lkIFNWR0xpbmVFbGVtZW50OjpzeW5jaHJvbml6ZVByb3Bl
cnR5KGNvbnN0IFF1YWxpZmllZE5hbWUmIGF0dHJOYW1lKQogICAgICAgICBzeW5jaHJvbml6ZUV4
dGVybmFsUmVzb3VyY2VzUmVxdWlyZWQoKTsKIH0KIAotUGF0aCBTVkdMaW5lRWxlbWVudDo6dG9Q
YXRoRGF0YSgpIGNvbnN0Cit2b2lkIFNWR0xpbmVFbGVtZW50Ojp0b1BhdGhEYXRhKFBhdGgmIHBh
dGgpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIFBhdGg6OmNyZWF0ZUxpbmUoRmxvYXRQb2ludCh4MSgp
LnZhbHVlKHRoaXMpLCB5MSgpLnZhbHVlKHRoaXMpKSwKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBGbG9hdFBvaW50KHgyKCkudmFsdWUodGhpcyksIHkyKCkudmFsdWUodGhpcykpKTsKKyAg
ICBwYXRoLm1vdmVUbyhGbG9hdFBvaW50KHgxKCkudmFsdWUodGhpcyksIHkxKCkudmFsdWUodGhp
cykpKTsKKyAgICBwYXRoLmFkZExpbmVUbyhGbG9hdFBvaW50KHgyKCkudmFsdWUodGhpcyksIHky
KCkudmFsdWUodGhpcykpKTsKIH0KIAogYm9vbCBTVkdMaW5lRWxlbWVudDo6c2VsZkhhc1JlbGF0
aXZlTGVuZ3RocygpIGNvbnN0CmRpZmYgLS1naXQgYS9XZWJDb3JlL3N2Zy9TVkdMaW5lRWxlbWVu
dC5oIGIvV2ViQ29yZS9zdmcvU1ZHTGluZUVsZW1lbnQuaAppbmRleCAyMTAwN2YwLi41NWEyNjhj
IDEwMDY0NAotLS0gYS9XZWJDb3JlL3N2Zy9TVkdMaW5lRWxlbWVudC5oCisrKyBiL1dlYkNvcmUv
c3ZnL1NWR0xpbmVFbGVtZW50LmgKQEAgLTQ3LDcgKzQ3LDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUg
ewogICAgICAgICB2aXJ0dWFsIHZvaWQgc3ZnQXR0cmlidXRlQ2hhbmdlZChjb25zdCBRdWFsaWZp
ZWROYW1lJik7CiAgICAgICAgIHZpcnR1YWwgdm9pZCBzeW5jaHJvbml6ZVByb3BlcnR5KGNvbnN0
IFF1YWxpZmllZE5hbWUmKTsKIAotICAgICAgICB2aXJ0dWFsIFBhdGggdG9QYXRoRGF0YSgpIGNv
bnN0OworICAgICAgICB2aXJ0dWFsIHZvaWQgdG9QYXRoRGF0YShQYXRoJikgY29uc3Q7CiAKICAg
ICAgICAgdmlydHVhbCBib29sIHN1cHBvcnRzTWFya2VycygpIGNvbnN0IHsgcmV0dXJuIHRydWU7
IH0KIApkaWZmIC0tZ2l0IGEvV2ViQ29yZS9zdmcvU1ZHUGF0aEVsZW1lbnQuY3BwIGIvV2ViQ29y
ZS9zdmcvU1ZHUGF0aEVsZW1lbnQuY3BwCmluZGV4IGQxZmMxMWIuLjZmMjIyZWQgMTAwNjQ0Ci0t
LSBhL1dlYkNvcmUvc3ZnL1NWR1BhdGhFbGVtZW50LmNwcAorKysgYi9XZWJDb3JlL3N2Zy9TVkdQ
YXRoRWxlbWVudC5jcHAKQEAgLTU3LDE0ICs1NywxOCBAQCBQYXNzUmVmUHRyPFNWR1BhdGhFbGVt
ZW50PiBTVkdQYXRoRWxlbWVudDo6Y3JlYXRlKGNvbnN0IFF1YWxpZmllZE5hbWUmIHRhZ05hbWUs
CiBmbG9hdCBTVkdQYXRoRWxlbWVudDo6Z2V0VG90YWxMZW5ndGgoKQogewogICAgIC8vIEZJWE1F
OiB0aGlzIG1heSB3aXNoIHRvIHVzZSB0aGUgcGF0aFNlZ0xpc3QgaW5zdGVhZCBvZiB0aGUgcGF0
aGRhdGEgaWYgdGhhdCdzIGNoZWFwZXIgdG8gYnVpbGQgKG9yIGNhY2hlZCkKLSAgICByZXR1cm4g
dG9QYXRoRGF0YSgpLmxlbmd0aCgpOworICAgIFBhdGggcGF0aDsKKyAgICB0b1BhdGhEYXRhKHBh
dGgpOworICAgIHJldHVybiBwYXRoLmxlbmd0aCgpOwogfQogCiBGbG9hdFBvaW50IFNWR1BhdGhF
bGVtZW50OjpnZXRQb2ludEF0TGVuZ3RoKGZsb2F0IGxlbmd0aCkKIHsKICAgICAvLyBGSVhNRTog
dGhpcyBtYXkgd2lzaCB0byB1c2UgdGhlIHBhdGhTZWdMaXN0IGluc3RlYWQgb2YgdGhlIHBhdGhk
YXRhIGlmIHRoYXQncyBjaGVhcGVyIHRvIGJ1aWxkIChvciBjYWNoZWQpCiAgICAgYm9vbCBvayA9
IGZhbHNlOwotICAgIHJldHVybiB0b1BhdGhEYXRhKCkucG9pbnRBdExlbmd0aChsZW5ndGgsIG9r
KTsKKyAgICBQYXRoIHBhdGg7CisgICAgdG9QYXRoRGF0YShwYXRoKTsKKyAgICByZXR1cm4gcGF0
aC5wb2ludEF0TGVuZ3RoKGxlbmd0aCwgb2spOwogfQogCiB1bnNpZ25lZCBsb25nIFNWR1BhdGhF
bGVtZW50OjpnZXRQYXRoU2VnQXRMZW5ndGgoZmxvYXQgbGVuZ3RoKQpAQCAtMjYyLDEyICsyNjYs
MTAgQEAgU1ZHUGF0aFNlZ0xpc3QqIFNWR1BhdGhFbGVtZW50OjphbmltYXRlZE5vcm1hbGl6ZWRQ
YXRoU2VnTGlzdCgpIGNvbnN0CiAgICAgcmV0dXJuIDA7CiB9CiAKLVBhdGggU1ZHUGF0aEVsZW1l
bnQ6OnRvUGF0aERhdGEoKSBjb25zdAordm9pZCBTVkdQYXRoRWxlbWVudDo6dG9QYXRoRGF0YShQ
YXRoJiBwYXRoKSBjb25zdAogewotICAgIFBhdGggcmVzdWx0OwogICAgIFNWR1BhdGhQYXJzZXJG
YWN0b3J5KiBmYWN0b3J5ID0gU1ZHUGF0aFBhcnNlckZhY3Rvcnk6OnNlbGYoKTsKLSAgICBmYWN0
b3J5LT5idWlsZFBhdGhGcm9tU1ZHUGF0aFNlZ0xpc3QocGF0aFNlZ0xpc3QoKSwgcmVzdWx0KTsK
LSAgICByZXR1cm4gcmVzdWx0OworICAgIGZhY3RvcnktPmJ1aWxkUGF0aEZyb21TVkdQYXRoU2Vn
TGlzdChwYXRoU2VnTGlzdCgpLCBwYXRoKTsKIH0KIAogfQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9z
dmcvU1ZHUGF0aEVsZW1lbnQuaCBiL1dlYkNvcmUvc3ZnL1NWR1BhdGhFbGVtZW50LmgKaW5kZXgg
Y2M0ZTdiZC4uMzk0OTgzZCAxMDA2NDQKLS0tIGEvV2ViQ29yZS9zdmcvU1ZHUGF0aEVsZW1lbnQu
aAorKysgYi9XZWJDb3JlL3N2Zy9TVkdQYXRoRWxlbWVudC5oCkBAIC04OSw3ICs4OSw3IEBAIG5h
bWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgdmlydHVhbCBTVkdQYXRoU2VnTGlzdCogYW5pbWF0
ZWRQYXRoU2VnTGlzdCgpIGNvbnN0OwogICAgICAgICB2aXJ0dWFsIFNWR1BhdGhTZWdMaXN0KiBh
bmltYXRlZE5vcm1hbGl6ZWRQYXRoU2VnTGlzdCgpIGNvbnN0OwogCi0gICAgICAgIHZpcnR1YWwg
UGF0aCB0b1BhdGhEYXRhKCkgY29uc3Q7CisgICAgICAgIHZpcnR1YWwgdm9pZCB0b1BhdGhEYXRh
KFBhdGgmKSBjb25zdDsKIAogICAgIHByaXZhdGU6CiAgICAgICAgIFNWR1BhdGhFbGVtZW50KGNv
bnN0IFF1YWxpZmllZE5hbWUmLCBEb2N1bWVudCopOwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9zdmcv
U1ZHUG9seWdvbkVsZW1lbnQuY3BwIGIvV2ViQ29yZS9zdmcvU1ZHUG9seWdvbkVsZW1lbnQuY3Bw
CmluZGV4IDU3ZTJkNTMuLjUyNGNkMmYgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvc3ZnL1NWR1BvbHln
b25FbGVtZW50LmNwcAorKysgYi9XZWJDb3JlL3N2Zy9TVkdQb2x5Z29uRWxlbWVudC5jcHAKQEAg
LTM3LDIyICszNywxOSBAQCBQYXNzUmVmUHRyPFNWR1BvbHlnb25FbGVtZW50PiBTVkdQb2x5Z29u
RWxlbWVudDo6Y3JlYXRlKGNvbnN0IFF1YWxpZmllZE5hbWUmIHRhZwogICAgIHJldHVybiBhZG9w
dFJlZihuZXcgU1ZHUG9seWdvbkVsZW1lbnQodGFnTmFtZSwgZG9jdW1lbnQpKTsKIH0KIAotUGF0
aCBTVkdQb2x5Z29uRWxlbWVudDo6dG9QYXRoRGF0YSgpIGNvbnN0Cit2b2lkIFNWR1BvbHlnb25F
bGVtZW50Ojp0b1BhdGhEYXRhKFBhdGgmIHBhdGgpIGNvbnN0CiB7Ci0gICAgUGF0aCBwb2x5RGF0
YTsKLQogICAgIGludCBsZW4gPSBwb2ludHMoKS0+bnVtYmVyT2ZJdGVtcygpOwogICAgIGlmIChs
ZW4gPCAxKQotICAgICAgICByZXR1cm4gcG9seURhdGE7CisgICAgICAgIHJldHVybjsKICAgICAK
ICAgICBFeGNlcHRpb25Db2RlIGVjID0gMDsKLSAgICBwb2x5RGF0YS5tb3ZlVG8ocG9pbnRzKCkt
PmdldEl0ZW0oMCwgZWMpKTsKKyAgICBwYXRoLm1vdmVUbyhwb2ludHMoKS0+Z2V0SXRlbSgwLCBl
YykpOwogCiAgICAgZm9yIChpbnQgaSA9IDE7IGkgPCBsZW47ICsraSkKLSAgICAgICAgcG9seURh
dGEuYWRkTGluZVRvKHBvaW50cygpLT5nZXRJdGVtKGksIGVjKSk7CisgICAgICAgIHBhdGguYWRk
TGluZVRvKHBvaW50cygpLT5nZXRJdGVtKGksIGVjKSk7CiAKLSAgICBwb2x5RGF0YS5jbG9zZVN1
YnBhdGgoKTsKLSAgICByZXR1cm4gcG9seURhdGE7CisgICAgcGF0aC5jbG9zZVN1YnBhdGgoKTsK
IH0KIAogfQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9zdmcvU1ZHUG9seWdvbkVsZW1lbnQuaCBiL1dl
YkNvcmUvc3ZnL1NWR1BvbHlnb25FbGVtZW50LmgKaW5kZXggN2E1YmRhOC4uNWM4OGQxMSAxMDA2
NDQKLS0tIGEvV2ViQ29yZS9zdmcvU1ZHUG9seWdvbkVsZW1lbnQuaAorKysgYi9XZWJDb3JlL3N2
Zy9TVkdQb2x5Z29uRWxlbWVudC5oCkBAIC0zMyw3ICszMyw3IEBAIG5hbWVzcGFjZSBXZWJDb3Jl
IHsKICAgICBwcml2YXRlOgogICAgICAgICBTVkdQb2x5Z29uRWxlbWVudChjb25zdCBRdWFsaWZp
ZWROYW1lJiwgRG9jdW1lbnQqKTsKIAotICAgICAgICB2aXJ0dWFsIFBhdGggdG9QYXRoRGF0YSgp
IGNvbnN0OworICAgICAgICB2aXJ0dWFsIHZvaWQgdG9QYXRoRGF0YShQYXRoJikgY29uc3Q7CiAg
ICAgfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9zdmcv
U1ZHUG9seWxpbmVFbGVtZW50LmNwcCBiL1dlYkNvcmUvc3ZnL1NWR1BvbHlsaW5lRWxlbWVudC5j
cHAKaW5kZXggN2VjODQzMS4uZTk0ZWM4NCAxMDA2NDQKLS0tIGEvV2ViQ29yZS9zdmcvU1ZHUG9s
eWxpbmVFbGVtZW50LmNwcAorKysgYi9XZWJDb3JlL3N2Zy9TVkdQb2x5bGluZUVsZW1lbnQuY3Bw
CkBAIC0zNywyMSArMzcsMTcgQEAgUGFzc1JlZlB0cjxTVkdQb2x5bGluZUVsZW1lbnQ+IFNWR1Bv
bHlsaW5lRWxlbWVudDo6Y3JlYXRlKGNvbnN0IFF1YWxpZmllZE5hbWUmIHQKICAgICByZXR1cm4g
YWRvcHRSZWYobmV3IFNWR1BvbHlsaW5lRWxlbWVudCh0YWdOYW1lLCBkb2N1bWVudCkpOwogfQog
Ci1QYXRoIFNWR1BvbHlsaW5lRWxlbWVudDo6dG9QYXRoRGF0YSgpIGNvbnN0Cit2b2lkIFNWR1Bv
bHlsaW5lRWxlbWVudDo6dG9QYXRoRGF0YShQYXRoJiBwYXRoKSBjb25zdAogewotICAgIFBhdGgg
cG9seURhdGE7Ci0KICAgICBpbnQgbGVuID0gcG9pbnRzKCktPm51bWJlck9mSXRlbXMoKTsKICAg
ICBpZiAobGVuIDwgMSkKLSAgICAgICAgcmV0dXJuIHBvbHlEYXRhOworICAgICAgICByZXR1cm47
CiAKICAgICBFeGNlcHRpb25Db2RlIGVjID0gMDsKLSAgICBwb2x5RGF0YS5tb3ZlVG8ocG9pbnRz
KCktPmdldEl0ZW0oMCwgZWMpKTsKKyAgICBwYXRoLm1vdmVUbyhwb2ludHMoKS0+Z2V0SXRlbSgw
LCBlYykpOwogCiAgICAgZm9yIChpbnQgaSA9IDE7IGkgPCBsZW47ICsraSkKLSAgICAgICAgcG9s
eURhdGEuYWRkTGluZVRvKHBvaW50cygpLT5nZXRJdGVtKGksIGVjKSk7Ci0gICAgCi0gICAgcmV0
dXJuIHBvbHlEYXRhOworICAgICAgICBwYXRoLmFkZExpbmVUbyhwb2ludHMoKS0+Z2V0SXRlbShp
LCBlYykpOwogfQogCiB9CmRpZmYgLS1naXQgYS9XZWJDb3JlL3N2Zy9TVkdQb2x5bGluZUVsZW1l
bnQuaCBiL1dlYkNvcmUvc3ZnL1NWR1BvbHlsaW5lRWxlbWVudC5oCmluZGV4IGQzZmU1NTUuLmRm
Y2ZjZGEgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvc3ZnL1NWR1BvbHlsaW5lRWxlbWVudC5oCisrKyBi
L1dlYkNvcmUvc3ZnL1NWR1BvbHlsaW5lRWxlbWVudC5oCkBAIC0zMyw3ICszMyw3IEBAIG5hbWVz
cGFjZSBXZWJDb3JlIHsKICAgICBwcml2YXRlOgogICAgICAgICBTVkdQb2x5bGluZUVsZW1lbnQo
Y29uc3QgUXVhbGlmaWVkTmFtZSYsIERvY3VtZW50Kik7CiAKLSAgICAgICAgdmlydHVhbCBQYXRo
IHRvUGF0aERhdGEoKSBjb25zdDsKKyAgICAgICAgdmlydHVhbCB2b2lkIHRvUGF0aERhdGEoUGF0
aCYpIGNvbnN0OwogICAgIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBh
L1dlYkNvcmUvc3ZnL1NWR1JlY3RFbGVtZW50LmNwcCBiL1dlYkNvcmUvc3ZnL1NWR1JlY3RFbGVt
ZW50LmNwcAppbmRleCA5YjY4MzBlLi40YjI3YzAzIDEwMDY0NAotLS0gYS9XZWJDb3JlL3N2Zy9T
VkdSZWN0RWxlbWVudC5jcHAKKysrIGIvV2ViQ29yZS9zdmcvU1ZHUmVjdEVsZW1lbnQuY3BwCkBA
IC0xNDcsMTkgKzE0NywzNSBAQCB2b2lkIFNWR1JlY3RFbGVtZW50OjpzeW5jaHJvbml6ZVByb3Bl
cnR5KGNvbnN0IFF1YWxpZmllZE5hbWUmIGF0dHJOYW1lKQogICAgICAgICBzeW5jaHJvbml6ZUV4
dGVybmFsUmVzb3VyY2VzUmVxdWlyZWQoKTsKIH0KIAotUGF0aCBTVkdSZWN0RWxlbWVudDo6dG9Q
YXRoRGF0YSgpIGNvbnN0Cit2b2lkIFNWR1JlY3RFbGVtZW50Ojp0b1BhdGhEYXRhKFBhdGgmIHBh
dGgpIGNvbnN0CiB7Ci0gICAgRmxvYXRSZWN0IHJlY3QoeCgpLnZhbHVlKHRoaXMpLCB5KCkudmFs
dWUodGhpcyksIHdpZHRoKCkudmFsdWUodGhpcyksIGhlaWdodCgpLnZhbHVlKHRoaXMpKTsKKyAg
ICBmbG9hdCB3aWR0aFZhbHVlID0gd2lkdGgoKS52YWx1ZSh0aGlzKTsKKyAgICBpZiAod2lkdGhW
YWx1ZSA8PSAwKQorICAgICAgICByZXR1cm47CisKKyAgICBmbG9hdCBoZWlnaHRWYWx1ZSA9IGhl
aWdodCgpLnZhbHVlKHRoaXMpOworICAgIGlmIChoZWlnaHRWYWx1ZSA8PSAwKQorICAgICAgICBy
ZXR1cm47CisKKyAgICBmbG9hdCB4VmFsdWUgPSB4KCkudmFsdWUodGhpcyk7CisgICAgZmxvYXQg
eVZhbHVlID0geSgpLnZhbHVlKHRoaXMpOworCisgICAgRmxvYXRSZWN0IHJlY3QoeFZhbHVlLCB5
VmFsdWUsIHdpZHRoVmFsdWUsIGhlaWdodFZhbHVlKTsKIAogICAgIGJvb2wgaGFzUnggPSBoYXNB
dHRyaWJ1dGUoU1ZHTmFtZXM6OnJ4QXR0cik7CiAgICAgYm9vbCBoYXNSeSA9IGhhc0F0dHJpYnV0
ZShTVkdOYW1lczo6cnlBdHRyKTsKICAgICBpZiAoaGFzUnggfHwgaGFzUnkpIHsKLSAgICAgICAg
ZmxvYXQgX3J4ID0gaGFzUnggPyByeCgpLnZhbHVlKHRoaXMpIDogcnkoKS52YWx1ZSh0aGlzKTsK
LSAgICAgICAgZmxvYXQgX3J5ID0gaGFzUnkgPyByeSgpLnZhbHVlKHRoaXMpIDogcngoKS52YWx1
ZSh0aGlzKTsKLSAgICAgICAgcmV0dXJuIFBhdGg6OmNyZWF0ZVJvdW5kZWRSZWN0YW5nbGUocmVj
dCwgRmxvYXRTaXplKF9yeCwgX3J5KSk7CisgICAgICAgIGZsb2F0IHJ4VmFsdWUgPSByeCgpLnZh
bHVlKHRoaXMpOworICAgICAgICBmbG9hdCByeVZhbHVlID0gcnkoKS52YWx1ZSh0aGlzKTsKKyAg
ICAgICAgaWYgKCFoYXNSeCkKKyAgICAgICAgICAgIHJ4VmFsdWUgPSByeVZhbHVlOworICAgICAg
ICBlbHNlIGlmICghaGFzUnkpCisgICAgICAgICAgICByeVZhbHVlID0gcnhWYWx1ZTsKKyAgICAg
ICAgcGF0aC5hZGRSb3VuZGVkUmVjdChyZWN0LCBGbG9hdFNpemUocnhWYWx1ZSwgcnlWYWx1ZSkp
OworICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgcmV0dXJuIFBhdGg6OmNyZWF0ZVJlY3Rh
bmdsZShyZWN0KTsKKyAgICBwYXRoLmFkZFJlY3QocmVjdCk7CiB9CiAKIGJvb2wgU1ZHUmVjdEVs
ZW1lbnQ6OnNlbGZIYXNSZWxhdGl2ZUxlbmd0aHMoKSBjb25zdApkaWZmIC0tZ2l0IGEvV2ViQ29y
ZS9zdmcvU1ZHUmVjdEVsZW1lbnQuaCBiL1dlYkNvcmUvc3ZnL1NWR1JlY3RFbGVtZW50LmgKaW5k
ZXggMzgyMDc4ZC4uNjY4MzY2YiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9zdmcvU1ZHUmVjdEVsZW1l
bnQuaAorKysgYi9XZWJDb3JlL3N2Zy9TVkdSZWN0RWxlbWVudC5oCkBAIC00NSw3ICs0NSw3IEBA
IG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgdmlydHVhbCB2b2lkIHN2Z0F0dHJpYnV0ZUNo
YW5nZWQoY29uc3QgUXVhbGlmaWVkTmFtZSYpOwogICAgICAgICB2aXJ0dWFsIHZvaWQgc3luY2hy
b25pemVQcm9wZXJ0eShjb25zdCBRdWFsaWZpZWROYW1lJik7CiAKLSAgICAgICAgdmlydHVhbCBQ
YXRoIHRvUGF0aERhdGEoKSBjb25zdDsKKyAgICAgICAgdmlydHVhbCB2b2lkIHRvUGF0aERhdGEo
UGF0aCYpIGNvbnN0OwogCiAgICAgICAgIHZpcnR1YWwgYm9vbCBzZWxmSGFzUmVsYXRpdmVMZW5n
dGhzKCkgY29uc3Q7CiAKZGlmZiAtLWdpdCBhL1dlYkNvcmUvc3ZnL1NWR1N0eWxlZFRyYW5zZm9y
bWFibGVFbGVtZW50LmNwcCBiL1dlYkNvcmUvc3ZnL1NWR1N0eWxlZFRyYW5zZm9ybWFibGVFbGVt
ZW50LmNwcAppbmRleCA0NDE5NDQzLi45YjM0MjAzIDEwMDY0NAotLS0gYS9XZWJDb3JlL3N2Zy9T
VkdTdHlsZWRUcmFuc2Zvcm1hYmxlRWxlbWVudC5jcHAKKysrIGIvV2ViQ29yZS9zdmcvU1ZHU3R5
bGVkVHJhbnNmb3JtYWJsZUVsZW1lbnQuY3BwCkBAIC0xMTEsMTIgKzExMSwxMSBAQCBSZW5kZXJP
YmplY3QqIFNWR1N0eWxlZFRyYW5zZm9ybWFibGVFbGVtZW50OjpjcmVhdGVSZW5kZXJlcihSZW5k
ZXJBcmVuYSogYXJlbmEsCiAgICAgcmV0dXJuIG5ldyAoYXJlbmEpIFJlbmRlclNWR1BhdGgodGhp
cyk7CiB9CiAKLVBhdGggU1ZHU3R5bGVkVHJhbnNmb3JtYWJsZUVsZW1lbnQ6OnRvQ2xpcFBhdGgo
KSBjb25zdAordm9pZCBTVkdTdHlsZWRUcmFuc2Zvcm1hYmxlRWxlbWVudDo6dG9DbGlwUGF0aChQ
YXRoJiBwYXRoKSBjb25zdAogewotICAgIFBhdGggcGF0aERhdGEgPSB0b1BhdGhEYXRhKCk7Cisg
ICAgdG9QYXRoRGF0YShwYXRoKTsKICAgICAvLyBGSVhNRTogSG93IGRvIHdlIGtub3cgdGhlIGVs
ZW1lbnQgaGFzIGRvbmUgYSBsYXlvdXQ/Ci0gICAgcGF0aERhdGEudHJhbnNmb3JtKGFuaW1hdGVk
TG9jYWxUcmFuc2Zvcm0oKSk7Ci0gICAgcmV0dXJuIHBhdGhEYXRhOworICAgIHBhdGgudHJhbnNm
b3JtKGFuaW1hdGVkTG9jYWxUcmFuc2Zvcm0oKSk7CiB9CiAKIH0KZGlmZiAtLWdpdCBhL1dlYkNv
cmUvc3ZnL1NWR1N0eWxlZFRyYW5zZm9ybWFibGVFbGVtZW50LmggYi9XZWJDb3JlL3N2Zy9TVkdT
dHlsZWRUcmFuc2Zvcm1hYmxlRWxlbWVudC5oCmluZGV4IDI5MGY3ZjguLjUzNDljZmEgMTAwNjQ0
Ci0tLSBhL1dlYkNvcmUvc3ZnL1NWR1N0eWxlZFRyYW5zZm9ybWFibGVFbGVtZW50LmgKKysrIGIv
V2ViQ29yZS9zdmcvU1ZHU3R5bGVkVHJhbnNmb3JtYWJsZUVsZW1lbnQuaApAQCAtNDksOCArNDks
OCBAQCBwdWJsaWM6CiAgICAgYm9vbCBpc0tub3duQXR0cmlidXRlKGNvbnN0IFF1YWxpZmllZE5h
bWUmKTsKIAogICAgIC8vICJiYXNlIGNsYXNzIiBtZXRob2RzIGZvciBhbGwgdGhlIGVsZW1lbnRz
IHdoaWNoIHJlbmRlciBhcyBwYXRocwotICAgIHZpcnR1YWwgUGF0aCB0b1BhdGhEYXRhKCkgY29u
c3QgeyByZXR1cm4gUGF0aCgpOyB9Ci0gICAgdmlydHVhbCBQYXRoIHRvQ2xpcFBhdGgoKSBjb25z
dDsKKyAgICB2aXJ0dWFsIHZvaWQgdG9QYXRoRGF0YShQYXRoJikgY29uc3QgeyB9CisgICAgdmly
dHVhbCB2b2lkIHRvQ2xpcFBhdGgoUGF0aCYpIGNvbnN0OwogICAgIHZpcnR1YWwgUmVuZGVyT2Jq
ZWN0KiBjcmVhdGVSZW5kZXJlcihSZW5kZXJBcmVuYSosIFJlbmRlclN0eWxlKik7CiAKIHByb3Rl
Y3RlZDoKZGlmZiAtLWdpdCBhL1dlYkNvcmUvc3ZnL1NWR1VzZUVsZW1lbnQuY3BwIGIvV2ViQ29y
ZS9zdmcvU1ZHVXNlRWxlbWVudC5jcHAKaW5kZXggNzgyZWZhOC4uMzRlN2Q4OCAxMDA2NDQKLS0t
IGEvV2ViQ29yZS9zdmcvU1ZHVXNlRWxlbWVudC5jcHAKKysrIGIvV2ViQ29yZS9zdmcvU1ZHVXNl
RWxlbWVudC5jcHAKQEAgLTYyNCwyNSArNjI0LDIyIEBAIHN0YXRpYyBib29sIGlzRGlyZWN0UmVm
ZXJlbmNlKE5vZGUqIG4pCiAgICAgICAgICAgIG4tPmhhc1RhZ05hbWUoU1ZHTmFtZXM6OnRleHRU
YWcpOwogfQogCi1QYXRoIFNWR1VzZUVsZW1lbnQ6OnRvQ2xpcFBhdGgoKSBjb25zdAordm9pZCBT
VkdVc2VFbGVtZW50Ojp0b0NsaXBQYXRoKFBhdGgmIHBhdGgpIGNvbnN0CiB7CiAgICAgTm9kZSog
biA9IG1fdGFyZ2V0RWxlbWVudEluc3RhbmNlID8gbV90YXJnZXRFbGVtZW50SW5zdGFuY2UtPnNo
YWRvd1RyZWVFbGVtZW50KCkgOiAwOwogICAgIGlmICghbikKLSAgICAgICAgcmV0dXJuIFBhdGgo
KTsKKyAgICAgICAgcmV0dXJuOwogCiAgICAgaWYgKG4tPmlzU1ZHRWxlbWVudCgpICYmIHN0YXRp
Y19jYXN0PFNWR0VsZW1lbnQqPihuKS0+aXNTdHlsZWRUcmFuc2Zvcm1hYmxlKCkpIHsKICAgICAg
ICAgaWYgKCFpc0RpcmVjdFJlZmVyZW5jZShuKSkKICAgICAgICAgICAgIC8vIFNwZWM6IEluZGly
ZWN0IHJlZmVyZW5jZXMgYXJlIGFuIGVycm9yICgxNC4zLjUpCiAgICAgICAgICAgICBkb2N1bWVu
dCgpLT5hY2Nlc3NTVkdFeHRlbnNpb25zKCktPnJlcG9ydEVycm9yKCJOb3QgYWxsb3dlZCB0byB1
c2UgaW5kaXJlY3QgcmVmZXJlbmNlIGluIDxjbGlwLXBhdGg+Iik7CiAgICAgICAgIGVsc2Ugewot
ICAgICAgICAgICAgUGF0aCBjbGlwUGF0aCA9IHN0YXRpY19jYXN0PFNWR1N0eWxlZFRyYW5zZm9y
bWFibGVFbGVtZW50Kj4obiktPnRvQ2xpcFBhdGgoKTsKLSAgICAgICAgICAgIGNsaXBQYXRoLnRy
YW5zbGF0ZShGbG9hdFNpemUoeCgpLnZhbHVlKHRoaXMpLCB5KCkudmFsdWUodGhpcykpKTsKLSAg
ICAgICAgICAgIGNsaXBQYXRoLnRyYW5zZm9ybShhbmltYXRlZExvY2FsVHJhbnNmb3JtKCkpOwot
ICAgICAgICAgICAgcmV0dXJuIGNsaXBQYXRoOworICAgICAgICAgICAgc3RhdGljX2Nhc3Q8U1ZH
U3R5bGVkVHJhbnNmb3JtYWJsZUVsZW1lbnQqPihuKS0+dG9DbGlwUGF0aChwYXRoKTsKKyAgICAg
ICAgICAgIHBhdGgudHJhbnNsYXRlKEZsb2F0U2l6ZSh4KCkudmFsdWUodGhpcyksIHkoKS52YWx1
ZSh0aGlzKSkpOworICAgICAgICAgICAgcGF0aC50cmFuc2Zvcm0oYW5pbWF0ZWRMb2NhbFRyYW5z
Zm9ybSgpKTsKICAgICAgICAgfQogICAgIH0KLQotICAgIHJldHVybiBQYXRoKCk7CiB9CiAKIFJl
bmRlck9iamVjdCogU1ZHVXNlRWxlbWVudDo6cmVuZGVyZXJDbGlwQ2hpbGQoKSBjb25zdApkaWZm
IC0tZ2l0IGEvV2ViQ29yZS9zdmcvU1ZHVXNlRWxlbWVudC5oIGIvV2ViQ29yZS9zdmcvU1ZHVXNl
RWxlbWVudC5oCmluZGV4IDkzNjZkMjUuLmI4YmE3MWQgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvc3Zn
L1NWR1VzZUVsZW1lbnQuaAorKysgYi9XZWJDb3JlL3N2Zy9TVkdVc2VFbGVtZW50LmgKQEAgLTY3
LDcgKzY3LDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICB2aXJ0dWFsIHZvaWQgYXR0
YWNoKCk7CiAgICAgICAgIHZpcnR1YWwgdm9pZCBkZXRhY2goKTsKIAotICAgICAgICB2aXJ0dWFs
IFBhdGggdG9DbGlwUGF0aCgpIGNvbnN0OworICAgICAgICB2aXJ0dWFsIHZvaWQgdG9DbGlwUGF0
aChQYXRoJikgY29uc3Q7CiAKICAgICAgICAgc3RhdGljIHZvaWQgcmVtb3ZlRGlzYWxsb3dlZEVs
ZW1lbnRzRnJvbVN1YnRyZWUoTm9kZSogZWxlbWVudCk7CiAK
</data>
<flag name="review"
          id="60275"
          type_id="1"
          status="-"
          setter="krit"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>70451</attachid>
            <date>2010-10-11 10:45:53 -0700</date>
            <delta_ts>2010-10-11 11:52:26 -0700</delta_ts>
            <desc>Proposed patch v7</desc>
            <filename>bug-46052-v7.diff</filename>
            <type>text/plain</type>
            <size>47090</size>
            <attacher name="Andreas Kling">kling</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ2hhbmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXgg
OTk1ZGMyNC4uMGRjNjgwYiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvV2Vi
Q29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSw4MSBAQAorMjAxMC0xMC0xMSAgQW5kcmVhcyBLbGlu
ZyAgPGtsaW5nQHdlYmtpdC5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BT
ISkuCisKKyAgICAgICAgU1ZHOiBSZW1vdmUgImNyZWF0ZSIgbWV0aG9kcyBhbmQgdXNlIHBvcnQt
c3BlY2lmaWMgImFkZCIgY291bnRlcnBhcnRzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD00NjA1MgorCisgICAgICAgIENpcmNsZXMgYW5kIGVsbGlwc2Vz
IHdpbGwgYmUgc2lnbmlmaWNhbnRseSBmYXN0ZXIgb24gcGxhdGZvcm1zIHRoYXQKKyAgICAgICAg
aW1wbGVtZW50IFBhdGg6OmFkZEVsbGlwc2UoKSBpbiBhIHNhbmUgZmFzaGlvbi4KKworICAgICAg
ICAqIG1hdGhtbC9SZW5kZXJNYXRoTUxSb290LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRl
ck1hdGhNTFJvb3Q6OnBhaW50KToKKyAgICAgICAgKiBtYXRobWwvUmVuZGVyTWF0aE1MU3F1YXJl
Um9vdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJNYXRoTUxTcXVhcmVSb290OjpwYWlu
dCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0LmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6YWRkUm91bmRlZFJlY3RDbGlwKToKKyAg
ICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6Y2xpcE91dFJvdW5kZWRSZWN0KToKKyAg
ICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9QYXRoLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OnBh
dGhMZW5ndGhBcHBsaWVyRnVuY3Rpb24pOgorICAgICAgICAoV2ViQ29yZTo6UGF0aDo6YWRkUm91
bmRlZFJlY3QpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL1BhdGguaDoKKyAgICAgICAg
KiBwbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9Db250ZXh0U2hhZG93Q2Fpcm8uY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6Q29udGV4dFNoYWRvdzo6ZHJhd1JlY3RTaGFkb3dXaXRob3V0VGlsaW5nKToK
KyAgICAgICAgKFdlYkNvcmU6OkNvbnRleHRTaGFkb3c6OmRyYXdSZWN0U2hhZG93KToKKyAgICAg
ICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9HcmFwaGljc0NvbnRleHRDYWlyby5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OmRyYXdGb2N1c1JpbmcpOgorICAgICAg
ICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpkcmF3VGlsZWRTaGFkb3cpOgorICAgICAgICAo
V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpmaWxsUm91bmRlZFJlY3QpOgorICAgICAgICAqIHBs
YXRmb3JtL2dyYXBoaWNzL2NnL0dyYXBoaWNzQ29udGV4dENHLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OkdyYXBoaWNzQ29udGV4dDo6ZmlsbFJvdW5kZWRSZWN0KToKKyAgICAgICAgKiBwbGF0Zm9y
bS9ncmFwaGljcy9xdC9HcmFwaGljc0NvbnRleHRRdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHQ6OmZpbGxSb3VuZGVkUmVjdCk6CisgICAgICAgICogcmVuZGVyaW5nL1Jl
bmRlckJveE1vZGVsT2JqZWN0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJveE1vZGVs
T2JqZWN0OjpwYWludEJvcmRlcik6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCb3hNb2RlbE9i
amVjdDo6cGFpbnRCb3hTaGFkb3cpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJFbWJlZGRl
ZE9iamVjdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJFbWJlZGRlZE9iamVjdDo6Z2V0
UmVwbGFjZW1lbnRUZXh0R2VvbWV0cnkpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJTVkdS
ZXNvdXJjZUNsaXBwZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU1ZHUmVzb3VyY2VD
bGlwcGVyOjpwYXRoT25seUNsaXBwaW5nKToKKyAgICAgICAgKiByZW5kZXJpbmcvc3ZnL1JlbmRl
clNWR1BhdGguY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU1ZHUGF0aDo6bGF5b3V0KToK
KyAgICAgICAgKiByZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1RleHRQYXRoLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OlJlbmRlclNWR1RleHRQYXRoOjpsYXlvdXRQYXRoKToKKyAgICAgICAgKiByZW5k
ZXJpbmcvc3ZnL1NWR0lubGluZVRleHRCb3guY3BwOgorICAgICAgICAoV2ViQ29yZTo6U1ZHSW5s
aW5lVGV4dEJveDo6cGFpbnREZWNvcmF0aW9uV2l0aFN0eWxlKToKKyAgICAgICAgKiBzdmcvU1ZH
QW5pbWF0ZU1vdGlvbkVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U1ZHQW5pbWF0ZU1v
dGlvbkVsZW1lbnQ6OmFuaW1hdGlvblBhdGgpOgorICAgICAgICAqIHN2Zy9TVkdDaXJjbGVFbGVt
ZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR0NpcmNsZUVsZW1lbnQ6OnRvUGF0aERhdGEp
OgorICAgICAgICAqIHN2Zy9TVkdDaXJjbGVFbGVtZW50Lmg6CisgICAgICAgICogc3ZnL1NWR0Vs
bGlwc2VFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR0VsbGlwc2VFbGVtZW50Ojp0
b1BhdGhEYXRhKToKKyAgICAgICAgKiBzdmcvU1ZHRWxsaXBzZUVsZW1lbnQuaDoKKyAgICAgICAg
KiBzdmcvU1ZHTGluZUVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U1ZHTGluZUVsZW1l
bnQ6OnRvUGF0aERhdGEpOgorICAgICAgICAqIHN2Zy9TVkdMaW5lRWxlbWVudC5oOgorICAgICAg
ICAqIHN2Zy9TVkdQYXRoRWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTVkdQYXRoRWxl
bWVudDo6Z2V0VG90YWxMZW5ndGgpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHUGF0aEVsZW1lbnQ6
OmdldFBvaW50QXRMZW5ndGgpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHUGF0aEVsZW1lbnQ6OnRv
UGF0aERhdGEpOgorICAgICAgICAqIHN2Zy9TVkdQYXRoRWxlbWVudC5oOgorICAgICAgICAqIHN2
Zy9TVkdQb2x5Z29uRWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTVkdQb2x5Z29uRWxl
bWVudDo6dG9QYXRoRGF0YSk6CisgICAgICAgICogc3ZnL1NWR1BvbHlnb25FbGVtZW50Lmg6Cisg
ICAgICAgICogc3ZnL1NWR1BvbHlsaW5lRWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpT
VkdQb2x5bGluZUVsZW1lbnQ6OnRvUGF0aERhdGEpOgorICAgICAgICAqIHN2Zy9TVkdQb2x5bGlu
ZUVsZW1lbnQuaDoKKyAgICAgICAgKiBzdmcvU1ZHUmVjdEVsZW1lbnQuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6U1ZHUmVjdEVsZW1lbnQ6OnRvUGF0aERhdGEpOgorICAgICAgICAqIHN2Zy9TVkdS
ZWN0RWxlbWVudC5oOgorICAgICAgICAqIHN2Zy9TVkdTdHlsZWRUcmFuc2Zvcm1hYmxlRWxlbWVu
dC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTVkdTdHlsZWRUcmFuc2Zvcm1hYmxlRWxlbWVudDo6
dG9DbGlwUGF0aCk6CisgICAgICAgICogc3ZnL1NWR1N0eWxlZFRyYW5zZm9ybWFibGVFbGVtZW50
Lmg6CisgICAgICAgIChXZWJDb3JlOjpTVkdTdHlsZWRUcmFuc2Zvcm1hYmxlRWxlbWVudDo6dG9Q
YXRoRGF0YSk6CisgICAgICAgICogc3ZnL1NWR1VzZUVsZW1lbnQuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6U1ZHVXNlRWxlbWVudDo6dG9DbGlwUGF0aCk6CisgICAgICAgICogc3ZnL1NWR1VzZUVs
ZW1lbnQuaDoKKwogMjAxMC0xMC0xMSAgTmlrb2xhcyBaaW1tZXJtYW5uICA8bnppbW1lcm1hbm5A
cmltLmNvbT4KIAogICAgICAgICBSZXZpZXdlZCBieSBBbmRyZWFzIEtsaW5nLgpkaWZmIC0tZ2l0
IGEvV2ViQ29yZS9tYXRobWwvUmVuZGVyTWF0aE1MUm9vdC5jcHAgYi9XZWJDb3JlL21hdGhtbC9S
ZW5kZXJNYXRoTUxSb290LmNwcAppbmRleCBkYTMwM2M5Li45OWI1ZGM2IDEwMDY0NAotLS0gYS9X
ZWJDb3JlL21hdGhtbC9SZW5kZXJNYXRoTUxSb290LmNwcAorKysgYi9XZWJDb3JlL21hdGhtbC9S
ZW5kZXJNYXRoTUxSb290LmNwcApAQCAtMTkwLDkgKzE5MCw5IEBAIHZvaWQgUmVuZGVyTWF0aE1M
Um9vdDo6cGFpbnQoUGFpbnRJbmZvJiBpbmZvLCBpbnQgdHgsIGludCB0eSkKICAgICBpbmZvLmNv
bnRleHQtPnNldExpbmVDYXAoU3F1YXJlQ2FwKTsKICAgICAKICAgICBQYXRoIGxpbmU7Ci0gICAg
Ci0gICAgbGluZSA9IGxpbmUuY3JlYXRlTGluZShib3R0b21MZWZ0LCB0b3BMZWZ0KTsKLSAgICAK
KyAgICBsaW5lLm1vdmVUbyhib3R0b21MZWZ0KTsKKyAgICBsaW5lLmFkZExpbmVUbyh0b3BMZWZ0
KTsKKwogICAgIGluZm8uY29udGV4dC0+YmVnaW5QYXRoKCk7CiAgICAgaW5mby5jb250ZXh0LT5h
ZGRQYXRoKGxpbmUpOwogICAgIGluZm8uY29udGV4dC0+c3Ryb2tlUGF0aCgpOwpkaWZmIC0tZ2l0
IGEvV2ViQ29yZS9tYXRobWwvUmVuZGVyTWF0aE1MU3F1YXJlUm9vdC5jcHAgYi9XZWJDb3JlL21h
dGhtbC9SZW5kZXJNYXRoTUxTcXVhcmVSb290LmNwcAppbmRleCA4NmFkZDdhLi5kMmU3MDQ5IDEw
MDY0NAotLS0gYS9XZWJDb3JlL21hdGhtbC9SZW5kZXJNYXRoTUxTcXVhcmVSb290LmNwcAorKysg
Yi9XZWJDb3JlL21hdGhtbC9SZW5kZXJNYXRoTUxTcXVhcmVSb290LmNwcApAQCAtMTU2LDggKzE1
Niw4IEBAIHZvaWQgUmVuZGVyTWF0aE1MU3F1YXJlUm9vdDo6cGFpbnQoUGFpbnRJbmZvJiBpbmZv
LCBpbnQgdHgsIGludCB0eSkKICAgICBpbmZvLmNvbnRleHQtPnNldExpbmVDYXAoU3F1YXJlQ2Fw
KTsKICAgICAKICAgICBQYXRoIGxpbmU7Ci0gICAgCi0gICAgbGluZSA9IGxpbmUuY3JlYXRlTGlu
ZShib3R0b21MZWZ0LCB0b3BMZWZ0KTsKKyAgICBsaW5lLm1vdmVUbyhib3R0b21MZWZ0KTsKKyAg
ICBsaW5lLmFkZExpbmVUbyh0b3BMZWZ0KTsKICAgICAKICAgICBpbmZvLmNvbnRleHQtPmJlZ2lu
UGF0aCgpOwogICAgIGluZm8uY29udGV4dC0+YWRkUGF0aChsaW5lKTsKZGlmZiAtLWdpdCBhL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0LmNwcCBiL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0LmNwcAppbmRleCAyYzk0YmVjLi44NTlmMzhh
IDEwMDY0NAotLS0gYS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dC5j
cHAKKysrIGIvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQuY3BwCkBA
IC01MDAsNyArNTAwLDkgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6OmFkZFJvdW5kZWRSZWN0Q2xp
cChjb25zdCBJbnRSZWN0JiByZWN0LCBjb25zdCBJbnRTaXplJiB0b3AKICAgICBpZiAocGFpbnRp
bmdEaXNhYmxlZCgpKQogICAgICAgICByZXR1cm47CiAKLSAgICBjbGlwKFBhdGg6OmNyZWF0ZVJv
dW5kZWRSZWN0YW5nbGUocmVjdCwgdG9wTGVmdCwgdG9wUmlnaHQsIGJvdHRvbUxlZnQsIGJvdHRv
bVJpZ2h0KSk7CisgICAgUGF0aCBwYXRoOworICAgIHBhdGguYWRkUm91bmRlZFJlY3QocmVjdCwg
dG9wTGVmdCwgdG9wUmlnaHQsIGJvdHRvbUxlZnQsIGJvdHRvbVJpZ2h0KTsKKyAgICBjbGlwKHBh
dGgpOwogfQogCiB2b2lkIEdyYXBoaWNzQ29udGV4dDo6Y2xpcE91dFJvdW5kZWRSZWN0KGNvbnN0
IEludFJlY3QmIHJlY3QsIGNvbnN0IEludFNpemUmIHRvcExlZnQsIGNvbnN0IEludFNpemUmIHRv
cFJpZ2h0LApAQCAtNTA5LDcgKzUxMSw5IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpjbGlwT3V0
Um91bmRlZFJlY3QoY29uc3QgSW50UmVjdCYgcmVjdCwgY29uc3QgSW50U2l6ZSYgdG9wCiAgICAg
aWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgY2xpcE91dChQ
YXRoOjpjcmVhdGVSb3VuZGVkUmVjdGFuZ2xlKHJlY3QsIHRvcExlZnQsIHRvcFJpZ2h0LCBib3R0
b21MZWZ0LCBib3R0b21SaWdodCkpOworICAgIFBhdGggcGF0aDsKKyAgICBwYXRoLmFkZFJvdW5k
ZWRSZWN0KHJlY3QsIHRvcExlZnQsIHRvcFJpZ2h0LCBib3R0b21MZWZ0LCBib3R0b21SaWdodCk7
CisgICAgY2xpcE91dChwYXRoKTsKIH0KIAogdm9pZCBHcmFwaGljc0NvbnRleHQ6OmNsaXBUb0lt
YWdlQnVmZmVyKEltYWdlQnVmZmVyKiBidWZmZXIsIGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKZGlm
ZiAtLWdpdCBhL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvUGF0aC5jcHAgYi9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL1BhdGguY3BwCmluZGV4IDRlMmRlNTMuLjA3MmE1YjMgMTAwNjQ0Ci0t
LSBhL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvUGF0aC5jcHAKKysrIGIvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9QYXRoLmNwcApAQCAtMzUsOCArMzUsOSBAQAogI2luY2x1ZGUgPG1hdGgu
aD4KICNpbmNsdWRlIDx3dGYvTWF0aEV4dHJhcy5oPgogCi1zdGF0aWMgY29uc3QgZmxvYXQgUVVB
UlRFUiA9IDAuNTUyZjsgLy8gYXBwcm94aW1hdGlvbiBvZiBjb250cm9sIHBvaW50IHBvc2l0aW9u
cyBvbiBhIGJlemllcgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gdG8gc2ltdWxh
dGUgYSBxdWFydGVyIG9mIGEgY2lyY2xlLgorLy8gQXBwcm94aW1hdGlvbiBvZiBjb250cm9sIHBv
aW50IHBvc2l0aW9ucyBvbiBhIGJlemllciB0byBzaW11bGF0ZSBhIHF1YXJ0ZXIgb2YgYSBjaXJj
bGUuCitzdGF0aWMgY29uc3QgZmxvYXQgZ0NpcmNsZUNvbnRyb2xQb2ludCA9IDEgLSAwLjU1MjsK
KwogbmFtZXNwYWNlIFdlYkNvcmUgewogCiAjaWYgIVBMQVRGT1JNKE9QRU5WRykgJiYgIVBMQVRG
T1JNKFFUKQpAQCAtNDcsNyArNDgsNyBAQCBzdGF0aWMgdm9pZCBwYXRoTGVuZ3RoQXBwbGllckZ1
bmN0aW9uKHZvaWQqIGluZm8sIGNvbnN0IFBhdGhFbGVtZW50KiBlbGVtZW50KQogICAgICAgICBy
ZXR1cm47CiAgICAgdHJhdmVyc2FsU3RhdGUubV9wcmV2aW91cyA9IHRyYXZlcnNhbFN0YXRlLm1f
Y3VycmVudDsKICAgICBGbG9hdFBvaW50KiBwb2ludHMgPSBlbGVtZW50LT5wb2ludHM7Ci0gICAg
ZmxvYXQgc2VnbWVudExlbmd0aCA9IDAuMGY7CisgICAgZmxvYXQgc2VnbWVudExlbmd0aCA9IDA7
CiAgICAgc3dpdGNoIChlbGVtZW50LT50eXBlKSB7CiAgICAgICAgIGNhc2UgUGF0aEVsZW1lbnRN
b3ZlVG9Qb2ludDoKICAgICAgICAgICAgIHNlZ21lbnRMZW5ndGggPSB0cmF2ZXJzYWxTdGF0ZS5t
b3ZlVG8ocG9pbnRzWzBdKTsKQEAgLTc1LDEwICs3Niw4IEBAIHN0YXRpYyB2b2lkIHBhdGhMZW5n
dGhBcHBsaWVyRnVuY3Rpb24odm9pZCogaW5mbywgY29uc3QgUGF0aEVsZW1lbnQqIGVsZW1lbnQp
CiAgICAgICAgIGlmICh0cmF2ZXJzYWxTdGF0ZS5tX2FjdGlvbiA9PSBQYXRoVHJhdmVyc2FsU3Rh
dGU6OlRyYXZlcnNhbFBvaW50QXRMZW5ndGgpIHsKICAgICAgICAgICAgIGZsb2F0IG9mZnNldCA9
IHRyYXZlcnNhbFN0YXRlLm1fZGVzaXJlZExlbmd0aCAtIHRyYXZlcnNhbFN0YXRlLm1fdG90YWxM
ZW5ndGg7CiAgICAgICAgICAgICB0cmF2ZXJzYWxTdGF0ZS5tX2N1cnJlbnQubW92ZShvZmZzZXQg
KiBjb3NmKHNsb3BlKSwgb2Zmc2V0ICogc2luZihzbG9wZSkpOwotICAgICAgICB9IGVsc2Ugewot
ICAgICAgICAgICAgc3RhdGljIGNvbnN0IGZsb2F0IHJhZDJkZWcgPSAxODAuMGYgLyBwaUZsb2F0
OwotICAgICAgICAgICAgdHJhdmVyc2FsU3RhdGUubV9ub3JtYWxBbmdsZSA9IHNsb3BlICogcmFk
MmRlZzsKLSAgICAgICAgfQorICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgIHRyYXZlcnNhbFN0
YXRlLm1fbm9ybWFsQW5nbGUgPSByYWQyZGVnKHNsb3BlKTsKIAogICAgICAgICB0cmF2ZXJzYWxT
dGF0ZS5tX3N1Y2Nlc3MgPSB0cnVlOwogICAgIH0KQEAgLTExMCwxNjcgKzEwOSw4NSBAQCBmbG9h
dCBQYXRoOjpub3JtYWxBbmdsZUF0TGVuZ3RoKGZsb2F0IGxlbmd0aCwgYm9vbCYgb2spCiB9CiAj
ZW5kaWYKIAotUGF0aCBQYXRoOjpjcmVhdGVSb3VuZGVkUmVjdGFuZ2xlKGNvbnN0IEZsb2F0UmVj
dCYgcmVjdGFuZ2xlLCBjb25zdCBGbG9hdFNpemUmIHJvdW5kaW5nUmFkaWkpCit2b2lkIFBhdGg6
OmFkZFJvdW5kZWRSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgY29uc3QgRmxvYXRTaXplJiBy
b3VuZGluZ1JhZGlpKQogewotICAgIFBhdGggcGF0aDsKLSAgICBmbG9hdCB4ID0gcmVjdGFuZ2xl
LngoKTsKLSAgICBmbG9hdCB5ID0gcmVjdGFuZ2xlLnkoKTsKLSAgICBmbG9hdCB3aWR0aCA9IHJl
Y3RhbmdsZS53aWR0aCgpOwotICAgIGZsb2F0IGhlaWdodCA9IHJlY3RhbmdsZS5oZWlnaHQoKTsK
LSAgICBmbG9hdCByeCA9IHJvdW5kaW5nUmFkaWkud2lkdGgoKTsKLSAgICBmbG9hdCByeSA9IHJv
dW5kaW5nUmFkaWkuaGVpZ2h0KCk7Ci0gICAgaWYgKHdpZHRoIDw9IDAuMGYgfHwgaGVpZ2h0IDw9
IDAuMGYpCi0gICAgICAgIHJldHVybiBwYXRoOworICAgIGlmIChyZWN0LmlzRW1wdHkoKSkKKyAg
ICAgICAgcmV0dXJuOworCisgICAgZmxvYXQgZHggPSByb3VuZGluZ1JhZGlpLndpZHRoKCk7Cisg
ICAgZmxvYXQgZHkgPSByb3VuZGluZ1JhZGlpLmhlaWdodCgpOworICAgIGZsb2F0IGhhbGZXaWR0
aCA9IHJlY3Qud2lkdGgoKSAvIDI7CisgICAgZmxvYXQgaGFsZkhlaWdodCA9IHJlY3QuaGVpZ2h0
KCkgLyAyOwogCi0gICAgZmxvYXQgZHggPSByeCwgZHkgPSByeTsKICAgICAvLyBJZiByeCBpcyBn
cmVhdGVyIHRoYW4gaGFsZiBvZiB0aGUgd2lkdGggb2YgdGhlIHJlY3RhbmdsZQogICAgIC8vIHRo
ZW4gc2V0IHJ4IHRvIGhhbGYgb2YgdGhlIHdpZHRoIChyZXF1aXJlZCBpbiBTVkcgc3BlYykKLSAg
ICBpZiAoZHggPiB3aWR0aCAqIDAuNWYpCi0gICAgICAgIGR4ID0gd2lkdGggKiAwLjVmOworICAg
IGlmIChkeCA+IGhhbGZXaWR0aCkKKyAgICAgICAgZHggPSBoYWxmV2lkdGg7CiAKICAgICAvLyBJ
ZiByeSBpcyBncmVhdGVyIHRoYW4gaGFsZiBvZiB0aGUgaGVpZ2h0IG9mIHRoZSByZWN0YW5nbGUK
ICAgICAvLyB0aGVuIHNldCByeSB0byBoYWxmIG9mIHRoZSBoZWlnaHQgKHJlcXVpcmVkIGluIFNW
RyBzcGVjKQotICAgIGlmIChkeSA+IGhlaWdodCAqIDAuNWYpCi0gICAgICAgIGR5ID0gaGVpZ2h0
ICogMC41ZjsKKyAgICBpZiAoZHkgPiBoYWxmSGVpZ2h0KQorICAgICAgICBkeSA9IGhhbGZIZWln
aHQ7CiAKLSAgICBwYXRoLm1vdmVUbyhGbG9hdFBvaW50KHggKyBkeCwgeSkpOworICAgIG1vdmVU
byhGbG9hdFBvaW50KHJlY3QueCgpICsgZHgsIHJlY3QueSgpKSk7CiAKLSAgICBpZiAoZHggPCB3
aWR0aCAqIDAuNWYpCi0gICAgICAgIHBhdGguYWRkTGluZVRvKEZsb2F0UG9pbnQoeCArIHdpZHRo
IC0gcngsIHkpKTsKKyAgICBpZiAoZHggPCBoYWxmV2lkdGgpCisgICAgICAgIGFkZExpbmVUbyhG
bG9hdFBvaW50KHJlY3QueCgpICsgcmVjdC53aWR0aCgpIC0gcm91bmRpbmdSYWRpaS53aWR0aCgp
LCByZWN0LnkoKSkpOwogCi0gICAgcGF0aC5hZGRCZXppZXJDdXJ2ZVRvKEZsb2F0UG9pbnQoeCAr
IHdpZHRoIC0gZHggKiAoMSAtIFFVQVJURVIpLCB5KSwgRmxvYXRQb2ludCh4ICsgd2lkdGgsIHkg
KyBkeSAqICgxIC0gUVVBUlRFUikpLCBGbG9hdFBvaW50KHggKyB3aWR0aCwgeSArIGR5KSk7Cisg
ICAgYWRkQmV6aWVyQ3VydmVUbyhGbG9hdFBvaW50KHJlY3QueCgpICsgcmVjdC53aWR0aCgpIC0g
ZHggKiBnQ2lyY2xlQ29udHJvbFBvaW50LCByZWN0LnkoKSksIEZsb2F0UG9pbnQocmVjdC54KCkg
KyByZWN0LndpZHRoKCksIHJlY3QueSgpICsgZHkgKiBnQ2lyY2xlQ29udHJvbFBvaW50KSwgRmxv
YXRQb2ludChyZWN0LngoKSArIHJlY3Qud2lkdGgoKSwgcmVjdC55KCkgKyBkeSkpOwogCi0gICAg
aWYgKGR5IDwgaGVpZ2h0ICogMC41KQotICAgICAgICBwYXRoLmFkZExpbmVUbyhGbG9hdFBvaW50
KHggKyB3aWR0aCwgeSArIGhlaWdodCAtIGR5KSk7CisgICAgaWYgKGR5IDwgaGFsZkhlaWdodCkK
KyAgICAgICAgYWRkTGluZVRvKEZsb2F0UG9pbnQocmVjdC54KCkgKyByZWN0LndpZHRoKCksIHJl
Y3QueSgpICsgcmVjdC5oZWlnaHQoKSAtIGR5KSk7CiAKLSAgICBwYXRoLmFkZEJlemllckN1cnZl
VG8oRmxvYXRQb2ludCh4ICsgd2lkdGgsIHkgKyBoZWlnaHQgLSBkeSAqICgxIC0gUVVBUlRFUikp
LCBGbG9hdFBvaW50KHggKyB3aWR0aCAtIGR4ICogKDEgLSBRVUFSVEVSKSwgeSArIGhlaWdodCks
IEZsb2F0UG9pbnQoeCArIHdpZHRoIC0gZHgsIHkgKyBoZWlnaHQpKTsKKyAgICBhZGRCZXppZXJD
dXJ2ZVRvKEZsb2F0UG9pbnQocmVjdC54KCkgKyByZWN0LndpZHRoKCksIHJlY3QueSgpICsgcmVj
dC5oZWlnaHQoKSAtIGR5ICogZ0NpcmNsZUNvbnRyb2xQb2ludCksIEZsb2F0UG9pbnQocmVjdC54
KCkgKyByZWN0LndpZHRoKCkgLSBkeCAqIGdDaXJjbGVDb250cm9sUG9pbnQsIHJlY3QueSgpICsg
cmVjdC5oZWlnaHQoKSksIEZsb2F0UG9pbnQocmVjdC54KCkgKyByZWN0LndpZHRoKCkgLSBkeCwg
cmVjdC55KCkgKyByZWN0LmhlaWdodCgpKSk7CiAKLSAgICBpZiAoZHggPCB3aWR0aCAqIDAuNSkK
LSAgICAgICAgcGF0aC5hZGRMaW5lVG8oRmxvYXRQb2ludCh4ICsgZHgsIHkgKyBoZWlnaHQpKTsK
KyAgICBpZiAoZHggPCBoYWxmV2lkdGgpCisgICAgICAgIGFkZExpbmVUbyhGbG9hdFBvaW50KHJl
Y3QueCgpICsgZHgsIHJlY3QueSgpICsgcmVjdC5oZWlnaHQoKSkpOwogCi0gICAgcGF0aC5hZGRC
ZXppZXJDdXJ2ZVRvKEZsb2F0UG9pbnQoeCArIGR4ICogKDEgLSBRVUFSVEVSKSwgeSArIGhlaWdo
dCksIEZsb2F0UG9pbnQoeCwgeSArIGhlaWdodCAtIGR5ICogKDEgLSBRVUFSVEVSKSksIEZsb2F0
UG9pbnQoeCwgeSArIGhlaWdodCAtIGR5KSk7CisgICAgYWRkQmV6aWVyQ3VydmVUbyhGbG9hdFBv
aW50KHJlY3QueCgpICsgZHggKiBnQ2lyY2xlQ29udHJvbFBvaW50LCByZWN0LnkoKSArIHJlY3Qu
aGVpZ2h0KCkpLCBGbG9hdFBvaW50KHJlY3QueCgpLCByZWN0LnkoKSArIHJlY3QuaGVpZ2h0KCkg
LSBkeSAqIGdDaXJjbGVDb250cm9sUG9pbnQpLCBGbG9hdFBvaW50KHJlY3QueCgpLCByZWN0Lnko
KSArIHJlY3QuaGVpZ2h0KCkgLSBkeSkpOwogCi0gICAgaWYgKGR5IDwgaGVpZ2h0ICogMC41KQot
ICAgICAgICBwYXRoLmFkZExpbmVUbyhGbG9hdFBvaW50KHgsIHkgKyBkeSkpOworICAgIGlmIChk
eSA8IGhhbGZIZWlnaHQpCisgICAgICAgIGFkZExpbmVUbyhGbG9hdFBvaW50KHJlY3QueCgpLCBy
ZWN0LnkoKSArIGR5KSk7CiAKLSAgICBwYXRoLmFkZEJlemllckN1cnZlVG8oRmxvYXRQb2ludCh4
LCB5ICsgZHkgKiAoMSAtIFFVQVJURVIpKSwgRmxvYXRQb2ludCh4ICsgZHggKiAoMSAtIFFVQVJU
RVIpLCB5KSwgRmxvYXRQb2ludCh4ICsgZHgsIHkpKTsKKyAgICBhZGRCZXppZXJDdXJ2ZVRvKEZs
b2F0UG9pbnQocmVjdC54KCksIHJlY3QueSgpICsgZHkgKiBnQ2lyY2xlQ29udHJvbFBvaW50KSwg
RmxvYXRQb2ludChyZWN0LngoKSArIGR4ICogZ0NpcmNsZUNvbnRyb2xQb2ludCwgcmVjdC55KCkp
LCBGbG9hdFBvaW50KHJlY3QueCgpICsgZHgsIHJlY3QueSgpKSk7CiAKLSAgICBwYXRoLmNsb3Nl
U3VicGF0aCgpOwotCi0gICAgcmV0dXJuIHBhdGg7CisgICAgY2xvc2VTdWJwYXRoKCk7CiB9CiAK
LVBhdGggUGF0aDo6Y3JlYXRlUm91bmRlZFJlY3RhbmdsZShjb25zdCBGbG9hdFJlY3QmIHJlY3Rh
bmdsZSwgY29uc3QgRmxvYXRTaXplJiB0b3BMZWZ0UmFkaXVzLCBjb25zdCBGbG9hdFNpemUmIHRv
cFJpZ2h0UmFkaXVzLCBjb25zdCBGbG9hdFNpemUmIGJvdHRvbUxlZnRSYWRpdXMsIGNvbnN0IEZs
b2F0U2l6ZSYgYm90dG9tUmlnaHRSYWRpdXMpCit2b2lkIFBhdGg6OmFkZFJvdW5kZWRSZWN0KGNv
bnN0IEZsb2F0UmVjdCYgcmVjdCwgY29uc3QgRmxvYXRTaXplJiB0b3BMZWZ0UmFkaXVzLCBjb25z
dCBGbG9hdFNpemUmIHRvcFJpZ2h0UmFkaXVzLCBjb25zdCBGbG9hdFNpemUmIGJvdHRvbUxlZnRS
YWRpdXMsIGNvbnN0IEZsb2F0U2l6ZSYgYm90dG9tUmlnaHRSYWRpdXMpCiB7Ci0gICAgUGF0aCBw
YXRoOwotCi0gICAgZmxvYXQgd2lkdGggPSByZWN0YW5nbGUud2lkdGgoKTsKLSAgICBmbG9hdCBo
ZWlnaHQgPSByZWN0YW5nbGUuaGVpZ2h0KCk7Ci0gICAgaWYgKHdpZHRoIDw9IDAuMCB8fCBoZWln
aHQgPD0gMC4wKQotICAgICAgICByZXR1cm4gcGF0aDsKKyAgICBpZiAocmVjdC5pc0VtcHR5KCkp
CisgICAgICAgIHJldHVybjsKIAotICAgIGlmICh3aWR0aCA8IHRvcExlZnRSYWRpdXMud2lkdGgo
KSArIHRvcFJpZ2h0UmFkaXVzLndpZHRoKCkKLSAgICAgICAgICAgIHx8IHdpZHRoIDwgYm90dG9t
TGVmdFJhZGl1cy53aWR0aCgpICsgYm90dG9tUmlnaHRSYWRpdXMud2lkdGgoKQotICAgICAgICAg
ICAgfHwgaGVpZ2h0IDwgdG9wTGVmdFJhZGl1cy5oZWlnaHQoKSArIGJvdHRvbUxlZnRSYWRpdXMu
aGVpZ2h0KCkKLSAgICAgICAgICAgIHx8IGhlaWdodCA8IHRvcFJpZ2h0UmFkaXVzLmhlaWdodCgp
ICsgYm90dG9tUmlnaHRSYWRpdXMuaGVpZ2h0KCkpCisgICAgaWYgKHJlY3Qud2lkdGgoKSA8IHRv
cExlZnRSYWRpdXMud2lkdGgoKSArIHRvcFJpZ2h0UmFkaXVzLndpZHRoKCkKKyAgICAgICAgICAg
IHx8IHJlY3Qud2lkdGgoKSA8IGJvdHRvbUxlZnRSYWRpdXMud2lkdGgoKSArIGJvdHRvbVJpZ2h0
UmFkaXVzLndpZHRoKCkKKyAgICAgICAgICAgIHx8IHJlY3QuaGVpZ2h0KCkgPCB0b3BMZWZ0UmFk
aXVzLmhlaWdodCgpICsgYm90dG9tTGVmdFJhZGl1cy5oZWlnaHQoKQorICAgICAgICAgICAgfHwg
cmVjdC5oZWlnaHQoKSA8IHRvcFJpZ2h0UmFkaXVzLmhlaWdodCgpICsgYm90dG9tUmlnaHRSYWRp
dXMuaGVpZ2h0KCkpIHsKICAgICAgICAgLy8gSWYgYWxsIHRoZSByYWRpaSBjYW5ub3QgYmUgYWNj
b21tb2RhdGVkLCByZXR1cm4gYSByZWN0LgotICAgICAgICByZXR1cm4gY3JlYXRlUmVjdGFuZ2xl
KHJlY3RhbmdsZSk7Ci0KLSAgICBmbG9hdCB4ID0gcmVjdGFuZ2xlLngoKTsKLSAgICBmbG9hdCB5
ID0gcmVjdGFuZ2xlLnkoKTsKLQotICAgIHBhdGgubW92ZVRvKEZsb2F0UG9pbnQoeCArIHRvcExl
ZnRSYWRpdXMud2lkdGgoKSwgeSkpOwotCi0gICAgcGF0aC5hZGRMaW5lVG8oRmxvYXRQb2ludCh4
ICsgd2lkdGggLSB0b3BSaWdodFJhZGl1cy53aWR0aCgpLCB5KSk7Ci0KLSAgICBwYXRoLmFkZEJl
emllckN1cnZlVG8oRmxvYXRQb2ludCh4ICsgd2lkdGggLSB0b3BSaWdodFJhZGl1cy53aWR0aCgp
ICogKDEgLSBRVUFSVEVSKSwgeSksIEZsb2F0UG9pbnQoeCArIHdpZHRoLCB5ICsgdG9wUmlnaHRS
YWRpdXMuaGVpZ2h0KCkgKiAoMSAtIFFVQVJURVIpKSwgRmxvYXRQb2ludCh4ICsgd2lkdGgsIHkg
KyB0b3BSaWdodFJhZGl1cy5oZWlnaHQoKSkpOwotCi0gICAgcGF0aC5hZGRMaW5lVG8oRmxvYXRQ
b2ludCh4ICsgd2lkdGgsIHkgKyBoZWlnaHQgLSBib3R0b21SaWdodFJhZGl1cy5oZWlnaHQoKSkp
OwotCi0gICAgcGF0aC5hZGRCZXppZXJDdXJ2ZVRvKEZsb2F0UG9pbnQoeCArIHdpZHRoLCB5ICsg
aGVpZ2h0IC0gYm90dG9tUmlnaHRSYWRpdXMuaGVpZ2h0KCkgKiAoMSAtIFFVQVJURVIpKSwgRmxv
YXRQb2ludCh4ICsgd2lkdGggLSBib3R0b21SaWdodFJhZGl1cy53aWR0aCgpICogKDEgLSBRVUFS
VEVSKSwgeSArIGhlaWdodCksIEZsb2F0UG9pbnQoeCArIHdpZHRoIC0gYm90dG9tUmlnaHRSYWRp
dXMud2lkdGgoKSwgeSArIGhlaWdodCkpOwotCi0gICAgcGF0aC5hZGRMaW5lVG8oRmxvYXRQb2lu
dCh4ICsgYm90dG9tTGVmdFJhZGl1cy53aWR0aCgpLCB5ICsgaGVpZ2h0KSk7Ci0KLSAgICBwYXRo
LmFkZEJlemllckN1cnZlVG8oRmxvYXRQb2ludCh4ICsgYm90dG9tTGVmdFJhZGl1cy53aWR0aCgp
ICogKDEgLSBRVUFSVEVSKSwgeSArIGhlaWdodCksIEZsb2F0UG9pbnQoeCwgeSArIGhlaWdodCAt
IGJvdHRvbUxlZnRSYWRpdXMuaGVpZ2h0KCkgKiAoMSAtIFFVQVJURVIpKSwgRmxvYXRQb2ludCh4
LCB5ICsgaGVpZ2h0IC0gYm90dG9tTGVmdFJhZGl1cy5oZWlnaHQoKSkpOwotCi0gICAgcGF0aC5h
ZGRMaW5lVG8oRmxvYXRQb2ludCh4LCB5ICsgdG9wTGVmdFJhZGl1cy5oZWlnaHQoKSkpOwotCi0g
ICAgcGF0aC5hZGRCZXppZXJDdXJ2ZVRvKEZsb2F0UG9pbnQoeCwgeSArIHRvcExlZnRSYWRpdXMu
aGVpZ2h0KCkgKiAoMSAtIFFVQVJURVIpKSwgRmxvYXRQb2ludCh4ICsgdG9wTGVmdFJhZGl1cy53
aWR0aCgpICogKDEgLSBRVUFSVEVSKSwgeSksIEZsb2F0UG9pbnQoeCArIHRvcExlZnRSYWRpdXMu
d2lkdGgoKSwgeSkpOwotCi0gICAgcGF0aC5jbG9zZVN1YnBhdGgoKTsKLQotICAgIHJldHVybiBw
YXRoOwotfQotCi1QYXRoIFBhdGg6OmNyZWF0ZVJlY3RhbmdsZShjb25zdCBGbG9hdFJlY3QmIHJl
Y3RhbmdsZSkKLXsKLSAgICBQYXRoIHBhdGg7Ci0gICAgZmxvYXQgeCA9IHJlY3RhbmdsZS54KCk7
Ci0gICAgZmxvYXQgeSA9IHJlY3RhbmdsZS55KCk7Ci0gICAgZmxvYXQgd2lkdGggPSByZWN0YW5n
bGUud2lkdGgoKTsKLSAgICBmbG9hdCBoZWlnaHQgPSByZWN0YW5nbGUuaGVpZ2h0KCk7Ci0gICAg
aWYgKHdpZHRoIDw9IDAuMGYgfHwgaGVpZ2h0IDw9IDAuMGYpCi0gICAgICAgIHJldHVybiBwYXRo
OwotICAgIAotICAgIHBhdGgubW92ZVRvKEZsb2F0UG9pbnQoeCwgeSkpOwotICAgIHBhdGguYWRk
TGluZVRvKEZsb2F0UG9pbnQoeCArIHdpZHRoLCB5KSk7Ci0gICAgcGF0aC5hZGRMaW5lVG8oRmxv
YXRQb2ludCh4ICsgd2lkdGgsIHkgKyBoZWlnaHQpKTsKLSAgICBwYXRoLmFkZExpbmVUbyhGbG9h
dFBvaW50KHgsIHkgKyBoZWlnaHQpKTsKLSAgICBwYXRoLmNsb3NlU3VicGF0aCgpOwotCi0gICAg
cmV0dXJuIHBhdGg7Ci19Ci0KLVBhdGggUGF0aDo6Y3JlYXRlRWxsaXBzZShjb25zdCBGbG9hdFBv
aW50JiBjZW50ZXIsIGZsb2F0IHJ4LCBmbG9hdCByeSkKLXsKLSAgICBmbG9hdCBjeCA9IGNlbnRl
ci54KCk7Ci0gICAgZmxvYXQgY3kgPSBjZW50ZXIueSgpOwotICAgIFBhdGggcGF0aDsKLSAgICBp
ZiAocnggPD0gMC4wZiB8fCByeSA8PSAwLjBmKQotICAgICAgICByZXR1cm4gcGF0aDsKLQotICAg
IGZsb2F0IHggPSBjeDsKLSAgICBmbG9hdCB5ID0gY3k7Ci0KLSAgICB1bnNpZ25lZCBzdGVwID0g
MCwgbnVtID0gMTAwOwotICAgIGJvb2wgcnVubmluZyA9IHRydWU7Ci0gICAgd2hpbGUgKHJ1bm5p
bmcpCi0gICAgewotICAgICAgICBpZiAoc3RlcCA9PSBudW0pCi0gICAgICAgIHsKLSAgICAgICAg
ICAgIHJ1bm5pbmcgPSBmYWxzZTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0KLSAg
ICAgICAgZmxvYXQgYW5nbGUgPSBzdGF0aWNfY2FzdDxmbG9hdD4oc3RlcCkgLyBzdGF0aWNfY2Fz
dDxmbG9hdD4obnVtKSAqIDIuMGYgKiBwaUZsb2F0OwotICAgICAgICB4ID0gY3ggKyBjb3NmKGFu
Z2xlKSAqIHJ4OwotICAgICAgICB5ID0gY3kgKyBzaW5mKGFuZ2xlKSAqIHJ5OwotCi0gICAgICAg
IHN0ZXArKzsKLSAgICAgICAgaWYgKHN0ZXAgPT0gMSkKLSAgICAgICAgICAgIHBhdGgubW92ZVRv
KEZsb2F0UG9pbnQoeCwgeSkpOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBwYXRoLmFkZExp
bmVUbyhGbG9hdFBvaW50KHgsIHkpKTsKKyAgICAgICAgYWRkUmVjdChyZWN0KTsKKyAgICAgICAg
cmV0dXJuOwogICAgIH0KIAotICAgIHBhdGguY2xvc2VTdWJwYXRoKCk7Ci0KLSAgICByZXR1cm4g
cGF0aDsKLX0KLQotUGF0aCBQYXRoOjpjcmVhdGVDaXJjbGUoY29uc3QgRmxvYXRQb2ludCYgY2Vu
dGVyLCBmbG9hdCByKQotewotICAgIHJldHVybiBjcmVhdGVFbGxpcHNlKGNlbnRlciwgciwgcik7
Ci19Ci0KLVBhdGggUGF0aDo6Y3JlYXRlTGluZShjb25zdCBGbG9hdFBvaW50JiBzdGFydCwgY29u
c3QgRmxvYXRQb2ludCYgZW5kKQotewotICAgIFBhdGggcGF0aDsKLQotICAgIHBhdGgubW92ZVRv
KHN0YXJ0KTsKLSAgICBwYXRoLmFkZExpbmVUbyhlbmQpOwotCi0gICAgcmV0dXJuIHBhdGg7Cisg
ICAgbW92ZVRvKEZsb2F0UG9pbnQocmVjdC54KCkgKyB0b3BMZWZ0UmFkaXVzLndpZHRoKCksIHJl
Y3QueSgpKSk7CisKKyAgICBhZGRMaW5lVG8oRmxvYXRQb2ludChyZWN0LngoKSArIHJlY3Qud2lk
dGgoKSAtIHRvcFJpZ2h0UmFkaXVzLndpZHRoKCksIHJlY3QueSgpKSk7CisgICAgYWRkQmV6aWVy
Q3VydmVUbyhGbG9hdFBvaW50KHJlY3QueCgpICsgcmVjdC53aWR0aCgpIC0gdG9wUmlnaHRSYWRp
dXMud2lkdGgoKSAqIGdDaXJjbGVDb250cm9sUG9pbnQsIHJlY3QueSgpKSwKKyAgICAgICAgICAg
ICAgICAgICAgIEZsb2F0UG9pbnQocmVjdC54KCkgKyByZWN0LndpZHRoKCksIHJlY3QueSgpICsg
dG9wUmlnaHRSYWRpdXMuaGVpZ2h0KCkgKiBnQ2lyY2xlQ29udHJvbFBvaW50KSwKKyAgICAgICAg
ICAgICAgICAgICAgIEZsb2F0UG9pbnQocmVjdC54KCkgKyByZWN0LndpZHRoKCksIHJlY3QueSgp
ICsgdG9wUmlnaHRSYWRpdXMuaGVpZ2h0KCkpKTsKKyAgICBhZGRMaW5lVG8oRmxvYXRQb2ludChy
ZWN0LngoKSArIHJlY3Qud2lkdGgoKSwgcmVjdC55KCkgKyByZWN0LmhlaWdodCgpIC0gYm90dG9t
UmlnaHRSYWRpdXMuaGVpZ2h0KCkpKTsKKyAgICBhZGRCZXppZXJDdXJ2ZVRvKEZsb2F0UG9pbnQo
cmVjdC54KCkgKyByZWN0LndpZHRoKCksIHJlY3QueSgpICsgcmVjdC5oZWlnaHQoKSAtIGJvdHRv
bVJpZ2h0UmFkaXVzLmhlaWdodCgpICogZ0NpcmNsZUNvbnRyb2xQb2ludCksCisgICAgICAgICAg
ICAgICAgICAgICBGbG9hdFBvaW50KHJlY3QueCgpICsgcmVjdC53aWR0aCgpIC0gYm90dG9tUmln
aHRSYWRpdXMud2lkdGgoKSAqIGdDaXJjbGVDb250cm9sUG9pbnQsIHJlY3QueSgpICsgcmVjdC5o
ZWlnaHQoKSksCisgICAgICAgICAgICAgICAgICAgICBGbG9hdFBvaW50KHJlY3QueCgpICsgcmVj
dC53aWR0aCgpIC0gYm90dG9tUmlnaHRSYWRpdXMud2lkdGgoKSwgcmVjdC55KCkgKyByZWN0Lmhl
aWdodCgpKSk7CisgICAgYWRkTGluZVRvKEZsb2F0UG9pbnQocmVjdC54KCkgKyBib3R0b21MZWZ0
UmFkaXVzLndpZHRoKCksIHJlY3QueSgpICsgcmVjdC5oZWlnaHQoKSkpOworICAgIGFkZEJlemll
ckN1cnZlVG8oRmxvYXRQb2ludChyZWN0LngoKSArIGJvdHRvbUxlZnRSYWRpdXMud2lkdGgoKSAq
IGdDaXJjbGVDb250cm9sUG9pbnQsIHJlY3QueSgpICsgcmVjdC5oZWlnaHQoKSksCisgICAgICAg
ICAgICAgICAgICAgICBGbG9hdFBvaW50KHJlY3QueCgpLCByZWN0LnkoKSArIHJlY3QuaGVpZ2h0
KCkgLSBib3R0b21MZWZ0UmFkaXVzLmhlaWdodCgpICogZ0NpcmNsZUNvbnRyb2xQb2ludCksCisg
ICAgICAgICAgICAgICAgICAgICBGbG9hdFBvaW50KHJlY3QueCgpLCByZWN0LnkoKSArIHJlY3Qu
aGVpZ2h0KCkgLSBib3R0b21MZWZ0UmFkaXVzLmhlaWdodCgpKSk7CisgICAgYWRkTGluZVRvKEZs
b2F0UG9pbnQocmVjdC54KCksIHJlY3QueSgpICsgdG9wTGVmdFJhZGl1cy5oZWlnaHQoKSkpOwor
ICAgIGFkZEJlemllckN1cnZlVG8oRmxvYXRQb2ludChyZWN0LngoKSwgcmVjdC55KCkgKyB0b3BM
ZWZ0UmFkaXVzLmhlaWdodCgpICogZ0NpcmNsZUNvbnRyb2xQb2ludCksCisgICAgICAgICAgICAg
ICAgICAgICBGbG9hdFBvaW50KHJlY3QueCgpICsgdG9wTGVmdFJhZGl1cy53aWR0aCgpICogZ0Np
cmNsZUNvbnRyb2xQb2ludCwgcmVjdC55KCkpLAorICAgICAgICAgICAgICAgICAgICAgRmxvYXRQ
b2ludChyZWN0LngoKSArIHRvcExlZnRSYWRpdXMud2lkdGgoKSwgcmVjdC55KCkpKTsKKworICAg
IGNsb3NlU3VicGF0aCgpOwogfQogCiB9CmRpZmYgLS1naXQgYS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL1BhdGguaCBiL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvUGF0aC5oCmluZGV4IDgy
NjBhMzguLjg2YmE4MzEgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvUGF0
aC5oCisrKyBiL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvUGF0aC5oCkBAIC0xMzcsMTggKzEz
NywxMyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIHZvaWQgYWRkQXJjKGNvbnN0IEZs
b2F0UG9pbnQmLCBmbG9hdCByYWRpdXMsIGZsb2F0IHN0YXJ0QW5nbGUsIGZsb2F0IGVuZEFuZ2xl
LCBib29sIGFudGljbG9ja3dpc2UpOwogICAgICAgICB2b2lkIGFkZFJlY3QoY29uc3QgRmxvYXRS
ZWN0Jik7CiAgICAgICAgIHZvaWQgYWRkRWxsaXBzZShjb25zdCBGbG9hdFJlY3QmKTsKKyAgICAg
ICAgdm9pZCBhZGRSb3VuZGVkUmVjdChjb25zdCBGbG9hdFJlY3QmLCBjb25zdCBGbG9hdFNpemUm
IHJvdW5kaW5nUmFkaWkpOworICAgICAgICB2b2lkIGFkZFJvdW5kZWRSZWN0KGNvbnN0IEZsb2F0
UmVjdCYsIGNvbnN0IEZsb2F0U2l6ZSYgdG9wTGVmdFJhZGl1cywgY29uc3QgRmxvYXRTaXplJiB0
b3BSaWdodFJhZGl1cywgY29uc3QgRmxvYXRTaXplJiBib3R0b21MZWZ0UmFkaXVzLCBjb25zdCBG
bG9hdFNpemUmIGJvdHRvbVJpZ2h0UmFkaXVzKTsKIAogICAgICAgICB2b2lkIHRyYW5zbGF0ZShj
b25zdCBGbG9hdFNpemUmKTsKIAogICAgICAgICBQbGF0Zm9ybVBhdGhQdHIgcGxhdGZvcm1QYXRo
KCkgY29uc3QgeyByZXR1cm4gbV9wYXRoOyB9CiAKLSAgICAgICAgc3RhdGljIFBhdGggY3JlYXRl
Um91bmRlZFJlY3RhbmdsZShjb25zdCBGbG9hdFJlY3QmLCBjb25zdCBGbG9hdFNpemUmIHJvdW5k
aW5nUmFkaWkpOwotICAgICAgICBzdGF0aWMgUGF0aCBjcmVhdGVSb3VuZGVkUmVjdGFuZ2xlKGNv
bnN0IEZsb2F0UmVjdCYsIGNvbnN0IEZsb2F0U2l6ZSYgdG9wTGVmdFJhZGl1cywgY29uc3QgRmxv
YXRTaXplJiB0b3BSaWdodFJhZGl1cywgY29uc3QgRmxvYXRTaXplJiBib3R0b21MZWZ0UmFkaXVz
LCBjb25zdCBGbG9hdFNpemUmIGJvdHRvbVJpZ2h0UmFkaXVzKTsKLSAgICAgICAgc3RhdGljIFBh
dGggY3JlYXRlUmVjdGFuZ2xlKGNvbnN0IEZsb2F0UmVjdCYpOwotICAgICAgICBzdGF0aWMgUGF0
aCBjcmVhdGVFbGxpcHNlKGNvbnN0IEZsb2F0UG9pbnQmIGNlbnRlciwgZmxvYXQgcngsIGZsb2F0
IHJ5KTsKLSAgICAgICAgc3RhdGljIFBhdGggY3JlYXRlQ2lyY2xlKGNvbnN0IEZsb2F0UG9pbnQm
IGNlbnRlciwgZmxvYXQgcik7Ci0gICAgICAgIHN0YXRpYyBQYXRoIGNyZWF0ZUxpbmUoY29uc3Qg
RmxvYXRQb2ludCYsIGNvbnN0IEZsb2F0UG9pbnQmKTsKLQogICAgICAgICB2b2lkIGFwcGx5KHZv
aWQqIGluZm8sIFBhdGhBcHBsaWVyRnVuY3Rpb24pIGNvbnN0OwogICAgICAgICB2b2lkIHRyYW5z
Zm9ybShjb25zdCBBZmZpbmVUcmFuc2Zvcm0mKTsKIApkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jYWlyby9Db250ZXh0U2hhZG93Q2Fpcm8uY3BwIGIvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jYWlyby9Db250ZXh0U2hhZG93Q2Fpcm8uY3BwCmluZGV4IDZmNWJlMjgu
LjgyOTliNmEgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vQ29u
dGV4dFNoYWRvd0NhaXJvLmNwcAorKysgYi9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJv
L0NvbnRleHRTaGFkb3dDYWlyby5jcHAKQEAgLTEzNCw4ICsxMzQsMTAgQEAgdm9pZCBDb250ZXh0
U2hhZG93OjpkcmF3UmVjdFNoYWRvd1dpdGhvdXRUaWxpbmcoUGxhdGZvcm1Db250ZXh0IGNvbnRl
eHQsIGNvbnN0IEkKICAgICBpZiAoIW1fbGF5ZXJDb250ZXh0KQogICAgICAgICByZXR1cm47CiAK
LSAgICBhcHBlbmRXZWJDb3JlUGF0aFRvQ2Fpcm9Db250ZXh0KG1fbGF5ZXJDb250ZXh0LCBQYXRo
OjpjcmVhdGVSb3VuZGVkUmVjdGFuZ2xlKHNoYWRvd1JlY3QsIHRvcExlZnRSYWRpdXMsIHRvcFJp
Z2h0UmFkaXVzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm90dG9tTGVmdFJhZGl1cywgYm90
dG9tUmlnaHRSYWRpdXMpKTsKKyAgICBQYXRoIHBhdGg7CisgICAgcGF0aC5hZGRSb3VuZGVkUmVj
dChzaGFkb3dSZWN0LCB0b3BMZWZ0UmFkaXVzLCB0b3BSaWdodFJhZGl1cywgYm90dG9tTGVmdFJh
ZGl1cywgYm90dG9tUmlnaHRSYWRpdXMpOworCisgICAgYXBwZW5kV2ViQ29yZVBhdGhUb0NhaXJv
Q29udGV4dChtX2xheWVyQ29udGV4dCwgcGF0aCk7CiAgICAgY2Fpcm9fc2V0X3NvdXJjZV9yZ2Jh
KG1fbGF5ZXJDb250ZXh0LCAwLCAwLCAwLCBhbHBoYSk7CiAgICAgY2Fpcm9fZmlsbChtX2xheWVy
Q29udGV4dCk7CiAKQEAgLTI0MCw4ICsyNDIsOSBAQCB2b2lkIENvbnRleHRTaGFkb3c6OmRyYXdS
ZWN0U2hhZG93KEdyYXBoaWNzQ29udGV4dCogY29udGV4dCwgY29uc3QgSW50UmVjdCYgcmVjdAog
CiAgICAgLy8gRHJhdyB0aGUgcmVjdGFuZ2xlLgogICAgIEludFJlY3QgdGVtcGxhdGVSZWN0ID0g
SW50UmVjdChtX2JsdXJEaXN0YW5jZSwgbV9ibHVyRGlzdGFuY2UsIHNoYWRvd1RlbXBsYXRlU2l6
ZS53aWR0aCgpIC0gcmFkaXVzVHdpY2UsIHNoYWRvd1RlbXBsYXRlU2l6ZS5oZWlnaHQoKSAtIHJh
ZGl1c1R3aWNlKTsKLSAgICBhcHBlbmRXZWJDb3JlUGF0aFRvQ2Fpcm9Db250ZXh0KG1fbGF5ZXJD
b250ZXh0LCBQYXRoOjpjcmVhdGVSb3VuZGVkUmVjdGFuZ2xlKHRlbXBsYXRlUmVjdCwgdG9wTGVm
dFJhZGl1cywgdG9wUmlnaHRSYWRpdXMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib3R0b21M
ZWZ0UmFkaXVzLCBib3R0b21SaWdodFJhZGl1cykpOworICAgIFBhdGggcGF0aDsKKyAgICBwYXRo
LmFkZFJvdW5kZWRSZWN0KHRlbXBsYXRlUmVjdCwgdG9wTGVmdFJhZGl1cywgdG9wUmlnaHRSYWRp
dXMsIGJvdHRvbUxlZnRSYWRpdXMsIGJvdHRvbVJpZ2h0UmFkaXVzKTsKKyAgICBhcHBlbmRXZWJD
b3JlUGF0aFRvQ2Fpcm9Db250ZXh0KG1fbGF5ZXJDb250ZXh0LCBwYXRoKTsKIAogICAgIGNhaXJv
X3NldF9zb3VyY2VfcmdiYShtX2xheWVyQ29udGV4dCwgMCwgMCwgMCwgY29udGV4dC0+Z2V0QWxw
aGEoKSk7CiAgICAgY2Fpcm9fZmlsbChtX2xheWVyQ29udGV4dCk7CkBAIC0yNjMsOCArMjY2LDkg
QEAgdm9pZCBDb250ZXh0U2hhZG93OjpkcmF3UmVjdFNoYWRvdyhHcmFwaGljc0NvbnRleHQqIGNv
bnRleHQsIGNvbnN0IEludFJlY3QmIHJlY3QKICAgICBzaGFkb3dSZWN0LmluZmxhdGUoLXJhZGl1
c1R3aWNlKTsKICAgICBpZiAoIXNoYWRvd1JlY3QuaXNFbXB0eSgpKSB7CiAgICAgICAgIGNhaXJv
X3NhdmUoY3IpOwotICAgICAgICBhcHBlbmRXZWJDb3JlUGF0aFRvQ2Fpcm9Db250ZXh0KGNyLCBQ
YXRoOjpjcmVhdGVSb3VuZGVkUmVjdGFuZ2xlKHNoYWRvd1JlY3QsIHRvcExlZnRSYWRpdXMsCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICB0b3BSaWdodFJhZGl1cywgYm90dG9tTGVmdFJhZGl1cywgYm90
dG9tUmlnaHRSYWRpdXMpKTsKKyAgICAgICAgcGF0aC5jbGVhcigpOworICAgICAgICBwYXRoLmFk
ZFJvdW5kZWRSZWN0KHNoYWRvd1JlY3QsIHRvcExlZnRSYWRpdXMsIHRvcFJpZ2h0UmFkaXVzLCBi
b3R0b21MZWZ0UmFkaXVzLCBib3R0b21SaWdodFJhZGl1cyk7CisgICAgICAgIGFwcGVuZFdlYkNv
cmVQYXRoVG9DYWlyb0NvbnRleHQoY3IsIHBhdGgpOwogICAgICAgICBzZXRTb3VyY2VSR0JBRnJv
bUNvbG9yKGNyLCBtX2NvbG9yKTsKICAgICAgICAgY2Fpcm9fZmlsbChjcik7CiAgICAgICAgIGNh
aXJvX3Jlc3RvcmUoY3IpOwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
YWlyby9HcmFwaGljc0NvbnRleHRDYWlyby5jcHAgYi9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2NhaXJvL0dyYXBoaWNzQ29udGV4dENhaXJvLmNwcAppbmRleCBlOTRkZmJhLi5hNGI2NDRjIDEw
MDY0NAotLS0gYS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0dyYXBoaWNzQ29udGV4
dENhaXJvLmNwcAorKysgYi9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0dyYXBoaWNz
Q29udGV4dENhaXJvLmNwcApAQCAtNzAzLDggKzcwMywxMyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4
dDo6ZHJhd0ZvY3VzUmluZyhjb25zdCBWZWN0b3I8SW50UmVjdD4mIHJlY3RzLCBpbnQgd2lkdGgs
IGludAogICAgIHNldFBsYXRmb3JtU3Ryb2tlU3R5bGUoRG90dGVkU3Ryb2tlKTsKICNlbHNlCiAg
ICAgaW50IHJhZGl1cyA9ICh3aWR0aCAtIDEpIC8gMjsKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAw
OyBpIDwgcmVjdENvdW50OyBpKyspCi0gICAgICAgIGFwcGVuZFdlYkNvcmVQYXRoVG9DYWlyb0Nv
bnRleHQoY3IsIFBhdGg6OmNyZWF0ZVJvdW5kZWRSZWN0YW5nbGUocmVjdHNbaV0sIEZsb2F0U2l6
ZShyYWRpdXMsIHJhZGl1cykpKTsKKyAgICBQYXRoIHBhdGg7CisgICAgZm9yICh1bnNpZ25lZCBp
ID0gMDsgaSA8IHJlY3RDb3VudDsgKytpKSB7CisgICAgICAgIGlmIChpID4gMCkKKyAgICAgICAg
ICAgIHBhdGguY2xlYXIoKTsKKyAgICAgICAgcGF0aC5hZGRSb3VuZGVkUmVjdChyZWN0c1tpXSwg
RmxvYXRTaXplKHJhZGl1cywgcmFkaXVzKSk7CisgICAgICAgIGFwcGVuZFdlYkNvcmVQYXRoVG9D
YWlyb0NvbnRleHQoY3IsIHBhdGgpOworICAgIH0KIAogICAgIC8vIEZvcmNlIHRoZSBhbHBoYSB0
byA1MCUuICBUaGlzIG1hdGNoZXMgd2hhdCB0aGUgTWFjIGRvZXMgd2l0aCBvdXRsaW5lIHJpbmdz
LgogICAgIENvbG9yIHJpbmdDb2xvcihjb2xvci5yZWQoKSwgY29sb3IuZ3JlZW4oKSwgY29sb3Iu
Ymx1ZSgpLCAxMjcpOwpAQCAtMTI3NSw3ICsxMjgwLDEwIEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0
OjpkcmF3VGlsZWRTaGFkb3coY29uc3QgSW50UmVjdCYgcmVjdCwgY29uc3QgRmxvYXRTaXplJiB0
b3BMCiAgICAgLy8gRHJhdyBzaGFkb3cgaW50byBhIG5ldyBJbWFnZUJ1ZmZlci4KICAgICBjYWly
b190KiBzbWFsbEJ1ZmZlckNvbnRleHQgPSBzbWFsbEJ1ZmZlci0+Y29udGV4dCgpLT5wbGF0Zm9y
bUNvbnRleHQoKTsKICAgICBjb3B5Q29udGV4dFByb3BlcnRpZXMoY3IsIHNtYWxsQnVmZmVyQ29u
dGV4dCk7Ci0gICAgYXBwZW5kV2ViQ29yZVBhdGhUb0NhaXJvQ29udGV4dChzbWFsbEJ1ZmZlci0+
Y29udGV4dCgpLT5wbGF0Zm9ybUNvbnRleHQoKSwgUGF0aDo6Y3JlYXRlUm91bmRlZFJlY3Rhbmds
ZShzbWFsbFJlY3QsIHRvcExlZnRSYWRpdXMsIHRvcFJpZ2h0UmFkaXVzLCBib3R0b21MZWZ0UmFk
aXVzLCBib3R0b21SaWdodFJhZGl1cykpOworCisgICAgUGF0aCBwYXRoOworICAgIHBhdGguYWRk
Um91bmRlZFJlY3Qoc21hbGxSZWN0LCB0b3BMZWZ0UmFkaXVzLCB0b3BSaWdodFJhZGl1cywgYm90
dG9tTGVmdFJhZGl1cywgYm90dG9tUmlnaHRSYWRpdXMpOworICAgIGFwcGVuZFdlYkNvcmVQYXRo
VG9DYWlyb0NvbnRleHQoc21hbGxCdWZmZXItPmNvbnRleHQoKS0+cGxhdGZvcm1Db250ZXh0KCks
IHBhdGgpOwogICAgIHNldFBsYXRmb3JtRmlsbCh0aGlzLCBzbWFsbEJ1ZmZlckNvbnRleHQsIG1f
Y29tbW9uKTsKIAogICAgIE93blB0cjxJbWFnZUJ1ZmZlcj4gc2hhZG93QnVmZmVyID0gSW1hZ2VC
dWZmZXI6OmNyZWF0ZShzbWFsbEJ1ZmZlclNpemUpOwpAQCAtMTI5NCw3ICsxMzAyLDkgQEAgdm9p
ZCBHcmFwaGljc0NvbnRleHQ6OmRyYXdUaWxlZFNoYWRvdyhjb25zdCBJbnRSZWN0JiByZWN0LCBj
b25zdCBGbG9hdFNpemUmIHRvcEwKICAgICBzaGFkb3dSZWN0LmluZmxhdGUoLXJhZGl1c1R3aWNl
KTsKICAgICBpZiAoIXNoYWRvd1JlY3QuaXNFbXB0eSgpKSB7CiAgICAgICAgIGNhaXJvX3NhdmUo
Y3IpOwotICAgICAgICBhcHBlbmRXZWJDb3JlUGF0aFRvQ2Fpcm9Db250ZXh0KGNyLCBQYXRoOjpj
cmVhdGVSb3VuZGVkUmVjdGFuZ2xlKHNoYWRvd1JlY3QsIHRvcExlZnRSYWRpdXMsIHRvcFJpZ2h0
UmFkaXVzLCBib3R0b21MZWZ0UmFkaXVzLCBib3R0b21SaWdodFJhZGl1cykpOworICAgICAgICBw
YXRoLmNsZWFyKCk7CisgICAgICAgIHBhdGguYWRkUm91bmRlZFJlY3Qoc2hhZG93UmVjdCwgdG9w
TGVmdFJhZGl1cywgdG9wUmlnaHRSYWRpdXMsIGJvdHRvbUxlZnRSYWRpdXMsIGJvdHRvbVJpZ2h0
UmFkaXVzKTsKKyAgICAgICAgYXBwZW5kV2ViQ29yZVBhdGhUb0NhaXJvQ29udGV4dChjciwgcGF0
aCk7CiAgICAgICAgIHNldENvbG9yKGNyLCBzaGFkb3dDb2xvcik7CiAgICAgICAgIGNhaXJvX2Zp
bGwoY3IpOwogICAgICAgICBjYWlyb19yZXN0b3JlKGNyKTsKQEAgLTEzNzMsNyArMTM4Myw5IEBA
IHZvaWQgR3JhcGhpY3NDb250ZXh0OjpmaWxsUm91bmRlZFJlY3QoY29uc3QgSW50UmVjdCYgciwg
Y29uc3QgSW50U2l6ZSYgdG9wTGVmdCwKIAogICAgIGNhaXJvX3QqIGNyID0gbV9kYXRhLT5jcjsK
ICAgICBjYWlyb19zYXZlKGNyKTsKLSAgICBhcHBlbmRXZWJDb3JlUGF0aFRvQ2Fpcm9Db250ZXh0
KGNyLCBQYXRoOjpjcmVhdGVSb3VuZGVkUmVjdGFuZ2xlKHIsIHRvcExlZnQsIHRvcFJpZ2h0LCBi
b3R0b21MZWZ0LCBib3R0b21SaWdodCkpOworICAgIFBhdGggcGF0aDsKKyAgICBwYXRoLmFkZFJv
dW5kZWRSZWN0KHIsIHRvcExlZnQsIHRvcFJpZ2h0LCBib3R0b21MZWZ0LCBib3R0b21SaWdodCk7
CisgICAgYXBwZW5kV2ViQ29yZVBhdGhUb0NhaXJvQ29udGV4dChjciwgcGF0aCk7CiAgICAgc2V0
Q29sb3IoY3IsIGNvbG9yKTsKICAgICBkcmF3UGF0aFNoYWRvdyh0aGlzLCBtX2NvbW1vbiwgdHJ1
ZSwgZmFsc2UpOwogICAgIGNhaXJvX2ZpbGwoY3IpOwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jZy9HcmFwaGljc0NvbnRleHRDRy5jcHAgYi9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2NnL0dyYXBoaWNzQ29udGV4dENHLmNwcAppbmRleCBiZDhlODUwLi4wNmMwZjAw
IDEwMDY0NAotLS0gYS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0dyYXBoaWNzQ29udGV4
dENHLmNwcAorKysgYi9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0dyYXBoaWNzQ29udGV4
dENHLmNwcApAQCAtNjY3LDcgKzY2Nyw5IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpmaWxsUm91
bmRlZFJlY3QoY29uc3QgSW50UmVjdCYgcmVjdCwgY29uc3QgSW50U2l6ZSYgdG9wTGVmCiAgICAg
aWYgKG9sZEZpbGxDb2xvciAhPSBjb2xvciB8fCBvbGRDb2xvclNwYWNlICE9IGNvbG9yU3BhY2Up
CiAgICAgICAgIHNldENHRmlsbENvbG9yKGNvbnRleHQsIGNvbG9yLCBjb2xvclNwYWNlKTsKIAot
ICAgIGFkZFBhdGgoUGF0aDo6Y3JlYXRlUm91bmRlZFJlY3RhbmdsZShyZWN0LCB0b3BMZWZ0LCB0
b3BSaWdodCwgYm90dG9tTGVmdCwgYm90dG9tUmlnaHQpKTsKKyAgICBQYXRoIHBhdGg7CisgICAg
cGF0aC5hZGRSb3VuZGVkUmVjdChyZWN0LCB0b3BMZWZ0LCB0b3BSaWdodCwgYm90dG9tTGVmdCwg
Ym90dG9tUmlnaHQpOworICAgIGFkZFBhdGgocGF0aCk7CiAgICAgZmlsbFBhdGgoKTsKIAogICAg
IGlmIChvbGRGaWxsQ29sb3IgIT0gY29sb3IgfHwgb2xkQ29sb3JTcGFjZSAhPSBjb2xvclNwYWNl
KQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9xdC9HcmFwaGljc0NvbnRl
eHRRdC5jcHAgYi9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3F0L0dyYXBoaWNzQ29udGV4dFF0
LmNwcAppbmRleCA3Nzc1NzIxLi42ZDZjMWZjIDEwMDY0NAotLS0gYS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL3F0L0dyYXBoaWNzQ29udGV4dFF0LmNwcAorKysgYi9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL3F0L0dyYXBoaWNzQ29udGV4dFF0LmNwcApAQCAtNzI5LDcgKzcyOSw4IEBAIHZv
aWQgR3JhcGhpY3NDb250ZXh0OjpmaWxsUm91bmRlZFJlY3QoY29uc3QgSW50UmVjdCYgcmVjdCwg
Y29uc3QgSW50U2l6ZSYgdG9wTGVmCiAgICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSB8fCAhY29s
b3IuaXNWYWxpZCgpKQogICAgICAgICByZXR1cm47CiAKLSAgICBQYXRoIHBhdGggPSBQYXRoOjpj
cmVhdGVSb3VuZGVkUmVjdGFuZ2xlKHJlY3QsIHRvcExlZnQsIHRvcFJpZ2h0LCBib3R0b21MZWZ0
LCBib3R0b21SaWdodCk7CisgICAgUGF0aCBwYXRoOworICAgIHBhdGguYWRkUm91bmRlZFJlY3Qo
cmVjdCwgdG9wTGVmdCwgdG9wUmlnaHQsIGJvdHRvbUxlZnQsIGJvdHRvbVJpZ2h0KTsKICAgICBR
UGFpbnRlciogcCA9IG1fZGF0YS0+cCgpOwogICAgIGlmIChtX2RhdGEtPmhhc1NoYWRvdygpKSB7
CiAgICAgICAgIHAtPnRyYW5zbGF0ZShtX2RhdGEtPnNoYWRvdy5vZmZzZXQoKSk7CmRpZmYgLS1n
aXQgYS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCb3hNb2RlbE9iamVjdC5jcHAgYi9XZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJCb3hNb2RlbE9iamVjdC5jcHAKaW5kZXggMDJhMjg0Ny4uOWI4Y2Fi
OSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQm94TW9kZWxPYmplY3QuY3Bw
CisrKyBiL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJveE1vZGVsT2JqZWN0LmNwcApAQCAtMTA2
MSw3ICsxMDYxLDcgQEAgdm9pZCBSZW5kZXJCb3hNb2RlbE9iamVjdDo6cGFpbnRCb3JkZXIoR3Jh
cGhpY3NDb250ZXh0KiBncmFwaGljc0NvbnRleHQsIGludCB0eCwKICAgICAgICAgZ3JhcGhpY3ND
b250ZXh0LT5hZGRSb3VuZGVkUmVjdENsaXAoYm9yZGVyUmVjdCwgdG9wTGVmdCwgdG9wUmlnaHQs
IGJvdHRvbUxlZnQsIGJvdHRvbVJpZ2h0KTsKICAgICAgICAgZ3JhcGhpY3NDb250ZXh0LT5jbGlw
T3V0Um91bmRlZFJlY3QoaW5uZXJCb3JkZXJSZWN0LCBpbm5lclRvcExlZnRSYWRpdXMsIGlubmVy
VG9wUmlnaHRSYWRpdXMsIGlubmVyQm90dG9tTGVmdFJhZGl1cywgaW5uZXJCb3R0b21SaWdodFJh
ZGl1cyk7CiAKLSAgICAgICAgcm91bmRlZFBhdGggPSBQYXRoOjpjcmVhdGVSb3VuZGVkUmVjdGFu
Z2xlKGJvcmRlclJlY3QsIHRvcExlZnQsIHRvcFJpZ2h0LCBib3R0b21MZWZ0LCBib3R0b21SaWdo
dCk7CisgICAgICAgIHJvdW5kZWRQYXRoLmFkZFJvdW5kZWRSZWN0KGJvcmRlclJlY3QsIHRvcExl
ZnQsIHRvcFJpZ2h0LCBib3R0b21MZWZ0LCBib3R0b21SaWdodCk7CiAgICAgICAgIGdyYXBoaWNz
Q29udGV4dC0+YWRkUGF0aChyb3VuZGVkUGF0aCk7CiAgICAgfQogCkBAIC0xNzUyLDI0ICsxNzUy
LDI5IEBAIHZvaWQgUmVuZGVyQm94TW9kZWxPYmplY3Q6OnBhaW50Qm94U2hhZG93KEdyYXBoaWNz
Q29udGV4dCogY29udGV4dCwgaW50IHR4LCBpbnQKIAogICAgICAgICAgICAgY29udGV4dC0+c2F2
ZSgpOwogCi0gICAgICAgICAgICBpZiAoaGFzQm9yZGVyUmFkaXVzKQotICAgICAgICAgICAgICAg
IGNvbnRleHQtPmNsaXAoUGF0aDo6Y3JlYXRlUm91bmRlZFJlY3RhbmdsZShyZWN0LCB0b3BMZWZ0
LCB0b3BSaWdodCwgYm90dG9tTGVmdCwgYm90dG9tUmlnaHQpKTsKLSAgICAgICAgICAgIGVsc2UK
KyAgICAgICAgICAgIFBhdGggcGF0aDsKKyAgICAgICAgICAgIGlmIChoYXNCb3JkZXJSYWRpdXMp
IHsKKyAgICAgICAgICAgICAgICBwYXRoLmFkZFJvdW5kZWRSZWN0KHJlY3QsIHRvcExlZnQsIHRv
cFJpZ2h0LCBib3R0b21MZWZ0LCBib3R0b21SaWdodCk7CisgICAgICAgICAgICAgICAgY29udGV4
dC0+Y2xpcChwYXRoKTsKKyAgICAgICAgICAgICAgICBwYXRoLmNsZWFyKCk7CisgICAgICAgICAg
ICB9IGVsc2UKICAgICAgICAgICAgICAgICBjb250ZXh0LT5jbGlwKHJlY3QpOwogCiAgICAgICAg
ICAgICBJbnRTaXplIGV4dHJhT2Zmc2V0KDIgKiB3ICsgbWF4KDAsIHNoYWRvd09mZnNldC53aWR0
aCgpKSArIHNoYWRvd0JsdXIgLSAyICogc2hhZG93U3ByZWFkICsgMSwgMCk7CiAgICAgICAgICAg
ICBjb250ZXh0LT50cmFuc2xhdGUoZXh0cmFPZmZzZXQud2lkdGgoKSwgZXh0cmFPZmZzZXQuaGVp
Z2h0KCkpOwogICAgICAgICAgICAgc2hhZG93T2Zmc2V0IC09IGV4dHJhT2Zmc2V0OwogCi0gICAg
ICAgICAgICBjb250ZXh0LT5iZWdpblBhdGgoKTsKLSAgICAgICAgICAgIGNvbnRleHQtPmFkZFBh
dGgoUGF0aDo6Y3JlYXRlUmVjdGFuZ2xlKG91dGVyUmVjdCkpOworICAgICAgICAgICAgcGF0aC5h
ZGRSZWN0KG91dGVyUmVjdCk7CiAKICAgICAgICAgICAgIGlmIChoYXNCb3JkZXJSYWRpdXMpIHsK
ICAgICAgICAgICAgICAgICBpZiAoc2hhZG93U3ByZWFkID4gMCkKICAgICAgICAgICAgICAgICAg
ICAgdW5pZm9ybWx5RXhwYW5kQm9yZGVyUmFkaWkoLXNoYWRvd1NwcmVhZCwgdG9wTGVmdCwgdG9w
UmlnaHQsIGJvdHRvbUxlZnQsIGJvdHRvbVJpZ2h0KTsKLSAgICAgICAgICAgICAgICBjb250ZXh0
LT5hZGRQYXRoKFBhdGg6OmNyZWF0ZVJvdW5kZWRSZWN0YW5nbGUoaG9sZVJlY3QsIHRvcExlZnQs
IHRvcFJpZ2h0LCBib3R0b21MZWZ0LCBib3R0b21SaWdodCkpOworICAgICAgICAgICAgICAgIHBh
dGguYWRkUm91bmRlZFJlY3QoaG9sZVJlY3QsIHRvcExlZnQsIHRvcFJpZ2h0LCBib3R0b21MZWZ0
LCBib3R0b21SaWdodCk7CiAgICAgICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgICAgICBjb250
ZXh0LT5hZGRQYXRoKFBhdGg6OmNyZWF0ZVJlY3RhbmdsZShob2xlUmVjdCkpOworICAgICAgICAg
ICAgICAgIHBhdGguYWRkUmVjdChob2xlUmVjdCk7CisKKyAgICAgICAgICAgIGNvbnRleHQtPmJl
Z2luUGF0aCgpOworICAgICAgICAgICAgY29udGV4dC0+YWRkUGF0aChwYXRoKTsKIAogICAgICAg
ICAgICAgY29udGV4dC0+c2V0RmlsbFJ1bGUoUlVMRV9FVkVOT0REKTsKICAgICAgICAgICAgIGNv
bnRleHQtPnNldEZpbGxDb2xvcihmaWxsQ29sb3IsIHMtPmNvbG9yU3BhY2UoKSk7CmRpZmYgLS1n
aXQgYS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJFbWJlZGRlZE9iamVjdC5jcHAgYi9XZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJFbWJlZGRlZE9iamVjdC5jcHAKaW5kZXggYWEzMDFlMi4uMTY2MTNh
NSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyRW1iZWRkZWRPYmplY3QuY3Bw
CisrKyBiL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckVtYmVkZGVkT2JqZWN0LmNwcApAQCAtMjA2
LDcgKzIwNiw3IEBAIGJvb2wgUmVuZGVyRW1iZWRkZWRPYmplY3Q6OmdldFJlcGxhY2VtZW50VGV4
dEdlb21ldHJ5KGludCB0eCwgaW50IHR5LCBGbG9hdFJlY3QmCiAgICAgZmxvYXQgeSA9IChjb250
ZW50UmVjdC5zaXplKCkuaGVpZ2h0KCkgLyAyIC0gcmVwbGFjZW1lbnRUZXh0UmVjdC5zaXplKCku
aGVpZ2h0KCkgLyAyKSArIGNvbnRlbnRSZWN0LmxvY2F0aW9uKCkueSgpOwogICAgIHJlcGxhY2Vt
ZW50VGV4dFJlY3Quc2V0TG9jYXRpb24oRmxvYXRQb2ludCh4LCB5KSk7CiAgICAgCi0gICAgcGF0
aCA9IFBhdGg6OmNyZWF0ZVJvdW5kZWRSZWN0YW5nbGUocmVwbGFjZW1lbnRUZXh0UmVjdCwgRmxv
YXRTaXplKHJlcGxhY2VtZW50VGV4dFJvdW5kZWRSZWN0UmFkaXVzLCByZXBsYWNlbWVudFRleHRS
b3VuZGVkUmVjdFJhZGl1cykpOworICAgIHBhdGguYWRkUm91bmRlZFJlY3QocmVwbGFjZW1lbnRU
ZXh0UmVjdCwgRmxvYXRTaXplKHJlcGxhY2VtZW50VGV4dFJvdW5kZWRSZWN0UmFkaXVzLCByZXBs
YWNlbWVudFRleHRSb3VuZGVkUmVjdFJhZGl1cykpOwogCiAgICAgcmV0dXJuIHRydWU7CiB9CmRp
ZmYgLS1naXQgYS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJTVkdSZXNvdXJjZUNsaXBwZXIuY3Bw
IGIvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyU1ZHUmVzb3VyY2VDbGlwcGVyLmNwcAppbmRleCBh
MDlhZmIyLi4yNjU5ZDY0IDEwMDY0NAotLS0gYS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJTVkdS
ZXNvdXJjZUNsaXBwZXIuY3BwCisrKyBiL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclNWR1Jlc291
cmNlQ2xpcHBlci5jcHAKQEAgLTEzNiw3ICsxMzYsNyBAQCBib29sIFJlbmRlclNWR1Jlc291cmNl
Q2xpcHBlcjo6cGF0aE9ubHlDbGlwcGluZyhHcmFwaGljc0NvbnRleHQqIGNvbnRleHQsIGNvbnN0
CiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIC8vIEZhbGxiYWNrIHRvIG1hc2tp
bmcsIGlmIHRoZXJlIGlzIG1vcmUgdGhhbiBvbmUgY2xpcHBpbmcgcGF0aC4KICAgICAgICAgaWYg
KGNsaXBQYXRoLmlzRW1wdHkoKSkgewotICAgICAgICAgICAgY2xpcFBhdGggPSBzdHlsZWQtPnRv
Q2xpcFBhdGgoKTsKKyAgICAgICAgICAgIHN0eWxlZC0+dG9DbGlwUGF0aChjbGlwUGF0aCk7CiAg
ICAgICAgICAgICBjbGlwUnVsZSA9IHN2Z1N0eWxlLT5jbGlwUnVsZSgpOwogICAgICAgICB9IGVs
c2UKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKZGlmZiAtLWdpdCBhL1dlYkNvcmUvcmVuZGVy
aW5nL3N2Zy9SZW5kZXJTVkdQYXRoLmNwcCBiL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJT
VkdQYXRoLmNwcAppbmRleCBhZGEzNjBhLi40ODMzMDNmIDEwMDY0NAotLS0gYS9XZWJDb3JlL3Jl
bmRlcmluZy9zdmcvUmVuZGVyU1ZHUGF0aC5jcHAKKysrIGIvV2ViQ29yZS9yZW5kZXJpbmcvc3Zn
L1JlbmRlclNWR1BhdGguY3BwCkBAIC0xMTIsNyArMTEyLDggQEAgdm9pZCBSZW5kZXJTVkdQYXRo
OjpsYXlvdXQoKQogCiAgICAgYm9vbCBuZWVkc1BhdGhVcGRhdGUgPSBtX25lZWRzUGF0aFVwZGF0
ZTsKICAgICBpZiAobmVlZHNQYXRoVXBkYXRlKSB7Ci0gICAgICAgIG1fcGF0aCA9IGVsZW1lbnQt
PnRvUGF0aERhdGEoKTsKKyAgICAgICAgbV9wYXRoLmNsZWFyKCk7CisgICAgICAgIGVsZW1lbnQt
PnRvUGF0aERhdGEobV9wYXRoKTsKICAgICAgICAgbV9uZWVkc1BhdGhVcGRhdGUgPSBmYWxzZTsK
ICAgICAgICAgdXBkYXRlQ2FjaGVkQm91bmRhcmllc0luUGFyZW50cyA9IHRydWU7CiAgICAgfQpk
aWZmIC0tZ2l0IGEvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1RleHRQYXRoLmNwcCBi
L1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdUZXh0UGF0aC5jcHAKaW5kZXggNWQ5Nzdm
OS4uNjRlYmM2ZCAxMDA2NDQKLS0tIGEvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Rl
eHRQYXRoLmNwcAorKysgYi9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHVGV4dFBhdGgu
Y3BwCkBAIC01Myw3ICs1Myw4IEBAIFBhdGggUmVuZGVyU1ZHVGV4dFBhdGg6OmxheW91dFBhdGgo
KSBjb25zdAogICAgIAogICAgIFNWR1BhdGhFbGVtZW50KiBwYXRoRWxlbWVudCA9IHN0YXRpY19j
YXN0PFNWR1BhdGhFbGVtZW50Kj4odGFyZ2V0RWxlbWVudCk7CiAgICAgCi0gICAgUGF0aCBwYXRo
RGF0YSA9IHBhdGhFbGVtZW50LT50b1BhdGhEYXRhKCk7CisgICAgUGF0aCBwYXRoRGF0YTsKKyAg
ICBwYXRoRWxlbWVudC0+dG9QYXRoRGF0YShwYXRoRGF0YSk7CiAgICAgLy8gU3BlYzogIFRoZSB0
cmFuc2Zvcm0gYXR0cmlidXRlIG9uIHRoZSByZWZlcmVuY2VkICdwYXRoJyBlbGVtZW50IHJlcHJl
c2VudHMgYQogICAgIC8vIHN1cHBsZW1lbnRhbCB0cmFuc2Zvcm1hdGlvbiByZWxhdGl2ZSB0byB0
aGUgY3VycmVudCB1c2VyIGNvb3JkaW5hdGUgc3lzdGVtIGZvcgogICAgIC8vIHRoZSBjdXJyZW50
ICd0ZXh0JyBlbGVtZW50LCBpbmNsdWRpbmcgYW55IGFkanVzdG1lbnRzIHRvIHRoZSBjdXJyZW50
IHVzZXIgY29vcmRpbmF0ZQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR0lu
bGluZVRleHRCb3guY3BwIGIvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR0lubGluZVRleHRCb3gu
Y3BwCmluZGV4IDgzNTJlZTUuLjcyZjE1ZGQgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvcmVuZGVyaW5n
L3N2Zy9TVkdJbmxpbmVUZXh0Qm94LmNwcAorKysgYi9XZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZH
SW5saW5lVGV4dEJveC5jcHAKQEAgLTQ5MCwxMSArNDkwLDE4IEBAIHZvaWQgU1ZHSW5saW5lVGV4
dEJveDo6cGFpbnREZWNvcmF0aW9uV2l0aFN0eWxlKEdyYXBoaWNzQ29udGV4dCogY29udGV4dCwg
RVRleHRECiAKICAgICAvLyBUaGUgaW5pdGlhbCB5IHZhbHVlIHJlZmVycyB0byBvdmVybGluZSBw
b3NpdGlvbi4KICAgICBmbG9hdCB0aGlja25lc3MgPSB0aGlja25lc3NGb3JEZWNvcmF0aW9uKGRl
Y29yYXRpb24sIGZvbnQpOworCisgICAgaWYgKGZyYWdtZW50LndpZHRoIDw9IDAgJiYgdGhpY2tu
ZXNzIDw9IDApCisgICAgICAgIHJldHVybjsKKwogICAgIGZsb2F0IHkgPSBmcmFnbWVudC55IC0g
Zm9udC5hc2NlbnQoKSArIHBvc2l0aW9uT2Zmc2V0Rm9yRGVjb3JhdGlvbihkZWNvcmF0aW9uLCBm
b250LCB0aGlja25lc3MpOwogCisgICAgUGF0aCBwYXRoOworICAgIHBhdGguYWRkUmVjdChGbG9h
dFJlY3QoZnJhZ21lbnQueCwgeSwgZnJhZ21lbnQud2lkdGgsIHRoaWNrbmVzcykpOworCiAgICAg
Y29udGV4dC0+c2F2ZSgpOwogICAgIGNvbnRleHQtPmJlZ2luUGF0aCgpOwotICAgIGNvbnRleHQt
PmFkZFBhdGgoUGF0aDo6Y3JlYXRlUmVjdGFuZ2xlKEZsb2F0UmVjdChmcmFnbWVudC54LCB5LCBm
cmFnbWVudC53aWR0aCwgdGhpY2tuZXNzKSkpOworICAgIGNvbnRleHQtPmFkZFBhdGgocGF0aCk7
CiAKICAgICBpZiAoYWNxdWlyZVBhaW50aW5nUmVzb3VyY2UoY29udGV4dCwgZGVjb3JhdGlvblJl
bmRlcmVyLCBkZWNvcmF0aW9uU3R5bGUpKQogICAgICAgICByZWxlYXNlUGFpbnRpbmdSZXNvdXJj
ZShjb250ZXh0KTsKZGlmZiAtLWdpdCBhL1dlYkNvcmUvc3ZnL1NWR0FuaW1hdGVNb3Rpb25FbGVt
ZW50LmNwcCBiL1dlYkNvcmUvc3ZnL1NWR0FuaW1hdGVNb3Rpb25FbGVtZW50LmNwcAppbmRleCBi
NTBhOTkzLi4yNjE1MWVkIDEwMDY0NAotLS0gYS9XZWJDb3JlL3N2Zy9TVkdBbmltYXRlTW90aW9u
RWxlbWVudC5jcHAKKysrIGIvV2ViQ29yZS9zdmcvU1ZHQW5pbWF0ZU1vdGlvbkVsZW1lbnQuY3Bw
CkBAIC0xMTIsOSArMTEyLDEwIEBAIFBhdGggU1ZHQW5pbWF0ZU1vdGlvbkVsZW1lbnQ6OmFuaW1h
dGlvblBhdGgoKSBjb25zdAogICAgICAgICBpZiAoY2hpbGQtPmhhc1RhZ05hbWUoU1ZHTmFtZXM6
Om1wYXRoVGFnKSkgewogICAgICAgICAgICAgU1ZHTVBhdGhFbGVtZW50KiBtUGF0aCA9IHN0YXRp
Y19jYXN0PFNWR01QYXRoRWxlbWVudCo+KGNoaWxkKTsKICAgICAgICAgICAgIFNWR1BhdGhFbGVt
ZW50KiBwYXRoRWxlbWVudCA9IG1QYXRoLT5wYXRoRWxlbWVudCgpOworICAgICAgICAgICAgUGF0
aCBwYXRoOwogICAgICAgICAgICAgaWYgKHBhdGhFbGVtZW50KQotICAgICAgICAgICAgICAgIHJl
dHVybiBwYXRoRWxlbWVudC0+dG9QYXRoRGF0YSgpOwotICAgICAgICAgICAgcmV0dXJuIFBhdGgo
KTsKKyAgICAgICAgICAgICAgICBwYXRoRWxlbWVudC0+dG9QYXRoRGF0YShwYXRoKTsKKyAgICAg
ICAgICAgIHJldHVybiBwYXRoOwogICAgICAgICB9CiAgICAgfQogICAgIGlmIChoYXNBdHRyaWJ1
dGUoU1ZHTmFtZXM6OnBhdGhBdHRyKSkKZGlmZiAtLWdpdCBhL1dlYkNvcmUvc3ZnL1NWR0NpcmNs
ZUVsZW1lbnQuY3BwIGIvV2ViQ29yZS9zdmcvU1ZHQ2lyY2xlRWxlbWVudC5jcHAKaW5kZXggNGVk
NGVmZS4uNWZjNTBjMyAxMDA2NDQKLS0tIGEvV2ViQ29yZS9zdmcvU1ZHQ2lyY2xlRWxlbWVudC5j
cHAKKysrIGIvV2ViQ29yZS9zdmcvU1ZHQ2lyY2xlRWxlbWVudC5jcHAKQEAgLTEyMSw5ICsxMjEs
MTQgQEAgdm9pZCBTVkdDaXJjbGVFbGVtZW50OjpzeW5jaHJvbml6ZVByb3BlcnR5KGNvbnN0IFF1
YWxpZmllZE5hbWUmIGF0dHJOYW1lKQogICAgICAgICBzeW5jaHJvbml6ZUV4dGVybmFsUmVzb3Vy
Y2VzUmVxdWlyZWQoKTsKIH0KIAotUGF0aCBTVkdDaXJjbGVFbGVtZW50Ojp0b1BhdGhEYXRhKCkg
Y29uc3QKK3ZvaWQgU1ZHQ2lyY2xlRWxlbWVudDo6dG9QYXRoRGF0YShQYXRoJiBwYXRoKSBjb25z
dAogewotICAgIHJldHVybiBQYXRoOjpjcmVhdGVDaXJjbGUoRmxvYXRQb2ludChjeCgpLnZhbHVl
KHRoaXMpLCBjeSgpLnZhbHVlKHRoaXMpKSwgcigpLnZhbHVlKHRoaXMpKTsKKyAgICBmbG9hdCBy
YWRpdXMgPSByKCkudmFsdWUodGhpcyk7CisKKyAgICBpZiAocmFkaXVzIDw9IDApCisgICAgICAg
IHJldHVybjsKKworICAgIHBhdGguYWRkRWxsaXBzZShGbG9hdFJlY3QoY3goKS52YWx1ZSh0aGlz
KSAtIHJhZGl1cywgY3koKS52YWx1ZSh0aGlzKSAtIHJhZGl1cywgcmFkaXVzICogMiwgcmFkaXVz
ICogMikpOwogfQogCiBib29sIFNWR0NpcmNsZUVsZW1lbnQ6OnNlbGZIYXNSZWxhdGl2ZUxlbmd0
aHMoKSBjb25zdApkaWZmIC0tZ2l0IGEvV2ViQ29yZS9zdmcvU1ZHQ2lyY2xlRWxlbWVudC5oIGIv
V2ViQ29yZS9zdmcvU1ZHQ2lyY2xlRWxlbWVudC5oCmluZGV4IGRkMTE3OTIuLjRlYjkyNjIgMTAw
NjQ0Ci0tLSBhL1dlYkNvcmUvc3ZnL1NWR0NpcmNsZUVsZW1lbnQuaAorKysgYi9XZWJDb3JlL3N2
Zy9TVkdDaXJjbGVFbGVtZW50LmgKQEAgLTQ1LDcgKzQ1LDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUg
ewogICAgICAgICB2aXJ0dWFsIHZvaWQgc3ZnQXR0cmlidXRlQ2hhbmdlZChjb25zdCBRdWFsaWZp
ZWROYW1lJik7CiAgICAgICAgIHZpcnR1YWwgdm9pZCBzeW5jaHJvbml6ZVByb3BlcnR5KGNvbnN0
IFF1YWxpZmllZE5hbWUmKTsKIAotICAgICAgICB2aXJ0dWFsIFBhdGggdG9QYXRoRGF0YSgpIGNv
bnN0OworICAgICAgICB2aXJ0dWFsIHZvaWQgdG9QYXRoRGF0YShQYXRoJikgY29uc3Q7CiAKICAg
ICAgICAgdmlydHVhbCBib29sIHNlbGZIYXNSZWxhdGl2ZUxlbmd0aHMoKSBjb25zdDsKIApkaWZm
IC0tZ2l0IGEvV2ViQ29yZS9zdmcvU1ZHRWxsaXBzZUVsZW1lbnQuY3BwIGIvV2ViQ29yZS9zdmcv
U1ZHRWxsaXBzZUVsZW1lbnQuY3BwCmluZGV4IDE2NzQzZWQuLjAxZWE2MTkgMTAwNjQ0Ci0tLSBh
L1dlYkNvcmUvc3ZnL1NWR0VsbGlwc2VFbGVtZW50LmNwcAorKysgYi9XZWJDb3JlL3N2Zy9TVkdF
bGxpcHNlRWxlbWVudC5jcHAKQEAgLTEzMCwxMCArMTMwLDE3IEBAIHZvaWQgU1ZHRWxsaXBzZUVs
ZW1lbnQ6OnN5bmNocm9uaXplUHJvcGVydHkoY29uc3QgUXVhbGlmaWVkTmFtZSYgYXR0ck5hbWUp
CiAgICAgICAgIHN5bmNocm9uaXplRXh0ZXJuYWxSZXNvdXJjZXNSZXF1aXJlZCgpOwogfQogCi1Q
YXRoIFNWR0VsbGlwc2VFbGVtZW50Ojp0b1BhdGhEYXRhKCkgY29uc3QKK3ZvaWQgU1ZHRWxsaXBz
ZUVsZW1lbnQ6OnRvUGF0aERhdGEoUGF0aCYgcGF0aCkgY29uc3QKIHsKLSAgICByZXR1cm4gUGF0
aDo6Y3JlYXRlRWxsaXBzZShGbG9hdFBvaW50KGN4KCkudmFsdWUodGhpcyksIGN5KCkudmFsdWUo
dGhpcykpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcngoKS52
YWx1ZSh0aGlzKSwgcnkoKS52YWx1ZSh0aGlzKSk7CisgICAgZmxvYXQgcmFkaXVzWCA9IHJ4KCku
dmFsdWUodGhpcyk7CisgICAgaWYgKHJhZGl1c1ggPD0gMCkKKyAgICAgICAgcmV0dXJuOworCisg
ICAgZmxvYXQgcmFkaXVzWSA9IHJ5KCkudmFsdWUodGhpcyk7CisgICAgaWYgKHJhZGl1c1kgPD0g
MCkKKyAgICAgICAgcmV0dXJuOworCisgICAgcGF0aC5hZGRFbGxpcHNlKEZsb2F0UmVjdChjeCgp
LnZhbHVlKHRoaXMpIC0gcmFkaXVzWCwgY3koKS52YWx1ZSh0aGlzKSAtIHJhZGl1c1ksIHJhZGl1
c1ggKiAyLCByYWRpdXNZICogMikpOwogfQogIAogYm9vbCBTVkdFbGxpcHNlRWxlbWVudDo6c2Vs
Zkhhc1JlbGF0aXZlTGVuZ3RocygpIGNvbnN0CmRpZmYgLS1naXQgYS9XZWJDb3JlL3N2Zy9TVkdF
bGxpcHNlRWxlbWVudC5oIGIvV2ViQ29yZS9zdmcvU1ZHRWxsaXBzZUVsZW1lbnQuaAppbmRleCBi
ZWU4MTVjLi5jYWQzMjllIDEwMDY0NAotLS0gYS9XZWJDb3JlL3N2Zy9TVkdFbGxpcHNlRWxlbWVu
dC5oCisrKyBiL1dlYkNvcmUvc3ZnL1NWR0VsbGlwc2VFbGVtZW50LmgKQEAgLTQ1LDcgKzQ1LDcg
QEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICB2aXJ0dWFsIHZvaWQgc3ZnQXR0cmlidXRl
Q2hhbmdlZChjb25zdCBRdWFsaWZpZWROYW1lJik7CiAgICAgICAgIHZpcnR1YWwgdm9pZCBzeW5j
aHJvbml6ZVByb3BlcnR5KGNvbnN0IFF1YWxpZmllZE5hbWUmKTsKIAotICAgICAgICB2aXJ0dWFs
IFBhdGggdG9QYXRoRGF0YSgpIGNvbnN0OworICAgICAgICB2aXJ0dWFsIHZvaWQgdG9QYXRoRGF0
YShQYXRoJikgY29uc3Q7CiAKICAgICAgICAgdmlydHVhbCBib29sIHNlbGZIYXNSZWxhdGl2ZUxl
bmd0aHMoKSBjb25zdDsKIApkaWZmIC0tZ2l0IGEvV2ViQ29yZS9zdmcvU1ZHTGluZUVsZW1lbnQu
Y3BwIGIvV2ViQ29yZS9zdmcvU1ZHTGluZUVsZW1lbnQuY3BwCmluZGV4IDIyOWRmYTkuLjhhMDgz
NWUgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvc3ZnL1NWR0xpbmVFbGVtZW50LmNwcAorKysgYi9XZWJD
b3JlL3N2Zy9TVkdMaW5lRWxlbWVudC5jcHAKQEAgLTEyNiwxMCArMTI2LDEwIEBAIHZvaWQgU1ZH
TGluZUVsZW1lbnQ6OnN5bmNocm9uaXplUHJvcGVydHkoY29uc3QgUXVhbGlmaWVkTmFtZSYgYXR0
ck5hbWUpCiAgICAgICAgIHN5bmNocm9uaXplRXh0ZXJuYWxSZXNvdXJjZXNSZXF1aXJlZCgpOwog
fQogCi1QYXRoIFNWR0xpbmVFbGVtZW50Ojp0b1BhdGhEYXRhKCkgY29uc3QKK3ZvaWQgU1ZHTGlu
ZUVsZW1lbnQ6OnRvUGF0aERhdGEoUGF0aCYgcGF0aCkgY29uc3QKIHsKLSAgICByZXR1cm4gUGF0
aDo6Y3JlYXRlTGluZShGbG9hdFBvaW50KHgxKCkudmFsdWUodGhpcyksIHkxKCkudmFsdWUodGhp
cykpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZsb2F0UG9pbnQoeDIoKS52YWx1ZSh0
aGlzKSwgeTIoKS52YWx1ZSh0aGlzKSkpOworICAgIHBhdGgubW92ZVRvKEZsb2F0UG9pbnQoeDEo
KS52YWx1ZSh0aGlzKSwgeTEoKS52YWx1ZSh0aGlzKSkpOworICAgIHBhdGguYWRkTGluZVRvKEZs
b2F0UG9pbnQoeDIoKS52YWx1ZSh0aGlzKSwgeTIoKS52YWx1ZSh0aGlzKSkpOwogfQogCiBib29s
IFNWR0xpbmVFbGVtZW50OjpzZWxmSGFzUmVsYXRpdmVMZW5ndGhzKCkgY29uc3QKZGlmZiAtLWdp
dCBhL1dlYkNvcmUvc3ZnL1NWR0xpbmVFbGVtZW50LmggYi9XZWJDb3JlL3N2Zy9TVkdMaW5lRWxl
bWVudC5oCmluZGV4IDIxMDA3ZjAuLjU1YTI2OGMgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvc3ZnL1NW
R0xpbmVFbGVtZW50LmgKKysrIGIvV2ViQ29yZS9zdmcvU1ZHTGluZUVsZW1lbnQuaApAQCAtNDcs
NyArNDcsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIHZpcnR1YWwgdm9pZCBzdmdB
dHRyaWJ1dGVDaGFuZ2VkKGNvbnN0IFF1YWxpZmllZE5hbWUmKTsKICAgICAgICAgdmlydHVhbCB2
b2lkIHN5bmNocm9uaXplUHJvcGVydHkoY29uc3QgUXVhbGlmaWVkTmFtZSYpOwogCi0gICAgICAg
IHZpcnR1YWwgUGF0aCB0b1BhdGhEYXRhKCkgY29uc3Q7CisgICAgICAgIHZpcnR1YWwgdm9pZCB0
b1BhdGhEYXRhKFBhdGgmKSBjb25zdDsKIAogICAgICAgICB2aXJ0dWFsIGJvb2wgc3VwcG9ydHNN
YXJrZXJzKCkgY29uc3QgeyByZXR1cm4gdHJ1ZTsgfQogCmRpZmYgLS1naXQgYS9XZWJDb3JlL3N2
Zy9TVkdQYXRoRWxlbWVudC5jcHAgYi9XZWJDb3JlL3N2Zy9TVkdQYXRoRWxlbWVudC5jcHAKaW5k
ZXggZDFmYzExYi4uNmYyMjJlZCAxMDA2NDQKLS0tIGEvV2ViQ29yZS9zdmcvU1ZHUGF0aEVsZW1l
bnQuY3BwCisrKyBiL1dlYkNvcmUvc3ZnL1NWR1BhdGhFbGVtZW50LmNwcApAQCAtNTcsMTQgKzU3
LDE4IEBAIFBhc3NSZWZQdHI8U1ZHUGF0aEVsZW1lbnQ+IFNWR1BhdGhFbGVtZW50OjpjcmVhdGUo
Y29uc3QgUXVhbGlmaWVkTmFtZSYgdGFnTmFtZSwKIGZsb2F0IFNWR1BhdGhFbGVtZW50OjpnZXRU
b3RhbExlbmd0aCgpCiB7CiAgICAgLy8gRklYTUU6IHRoaXMgbWF5IHdpc2ggdG8gdXNlIHRoZSBw
YXRoU2VnTGlzdCBpbnN0ZWFkIG9mIHRoZSBwYXRoZGF0YSBpZiB0aGF0J3MgY2hlYXBlciB0byBi
dWlsZCAob3IgY2FjaGVkKQotICAgIHJldHVybiB0b1BhdGhEYXRhKCkubGVuZ3RoKCk7CisgICAg
UGF0aCBwYXRoOworICAgIHRvUGF0aERhdGEocGF0aCk7CisgICAgcmV0dXJuIHBhdGgubGVuZ3Ro
KCk7CiB9CiAKIEZsb2F0UG9pbnQgU1ZHUGF0aEVsZW1lbnQ6OmdldFBvaW50QXRMZW5ndGgoZmxv
YXQgbGVuZ3RoKQogewogICAgIC8vIEZJWE1FOiB0aGlzIG1heSB3aXNoIHRvIHVzZSB0aGUgcGF0
aFNlZ0xpc3QgaW5zdGVhZCBvZiB0aGUgcGF0aGRhdGEgaWYgdGhhdCdzIGNoZWFwZXIgdG8gYnVp
bGQgKG9yIGNhY2hlZCkKICAgICBib29sIG9rID0gZmFsc2U7Ci0gICAgcmV0dXJuIHRvUGF0aERh
dGEoKS5wb2ludEF0TGVuZ3RoKGxlbmd0aCwgb2spOworICAgIFBhdGggcGF0aDsKKyAgICB0b1Bh
dGhEYXRhKHBhdGgpOworICAgIHJldHVybiBwYXRoLnBvaW50QXRMZW5ndGgobGVuZ3RoLCBvayk7
CiB9CiAKIHVuc2lnbmVkIGxvbmcgU1ZHUGF0aEVsZW1lbnQ6OmdldFBhdGhTZWdBdExlbmd0aChm
bG9hdCBsZW5ndGgpCkBAIC0yNjIsMTIgKzI2NiwxMCBAQCBTVkdQYXRoU2VnTGlzdCogU1ZHUGF0
aEVsZW1lbnQ6OmFuaW1hdGVkTm9ybWFsaXplZFBhdGhTZWdMaXN0KCkgY29uc3QKICAgICByZXR1
cm4gMDsKIH0KIAotUGF0aCBTVkdQYXRoRWxlbWVudDo6dG9QYXRoRGF0YSgpIGNvbnN0Cit2b2lk
IFNWR1BhdGhFbGVtZW50Ojp0b1BhdGhEYXRhKFBhdGgmIHBhdGgpIGNvbnN0CiB7Ci0gICAgUGF0
aCByZXN1bHQ7CiAgICAgU1ZHUGF0aFBhcnNlckZhY3RvcnkqIGZhY3RvcnkgPSBTVkdQYXRoUGFy
c2VyRmFjdG9yeTo6c2VsZigpOwotICAgIGZhY3RvcnktPmJ1aWxkUGF0aEZyb21TVkdQYXRoU2Vn
TGlzdChwYXRoU2VnTGlzdCgpLCByZXN1bHQpOwotICAgIHJldHVybiByZXN1bHQ7CisgICAgZmFj
dG9yeS0+YnVpbGRQYXRoRnJvbVNWR1BhdGhTZWdMaXN0KHBhdGhTZWdMaXN0KCksIHBhdGgpOwog
fQogCiB9CmRpZmYgLS1naXQgYS9XZWJDb3JlL3N2Zy9TVkdQYXRoRWxlbWVudC5oIGIvV2ViQ29y
ZS9zdmcvU1ZHUGF0aEVsZW1lbnQuaAppbmRleCBjYzRlN2JkLi4zOTQ5ODNkIDEwMDY0NAotLS0g
YS9XZWJDb3JlL3N2Zy9TVkdQYXRoRWxlbWVudC5oCisrKyBiL1dlYkNvcmUvc3ZnL1NWR1BhdGhF
bGVtZW50LmgKQEAgLTg5LDcgKzg5LDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICB2
aXJ0dWFsIFNWR1BhdGhTZWdMaXN0KiBhbmltYXRlZFBhdGhTZWdMaXN0KCkgY29uc3Q7CiAgICAg
ICAgIHZpcnR1YWwgU1ZHUGF0aFNlZ0xpc3QqIGFuaW1hdGVkTm9ybWFsaXplZFBhdGhTZWdMaXN0
KCkgY29uc3Q7CiAKLSAgICAgICAgdmlydHVhbCBQYXRoIHRvUGF0aERhdGEoKSBjb25zdDsKKyAg
ICAgICAgdmlydHVhbCB2b2lkIHRvUGF0aERhdGEoUGF0aCYpIGNvbnN0OwogCiAgICAgcHJpdmF0
ZToKICAgICAgICAgU1ZHUGF0aEVsZW1lbnQoY29uc3QgUXVhbGlmaWVkTmFtZSYsIERvY3VtZW50
Kik7CmRpZmYgLS1naXQgYS9XZWJDb3JlL3N2Zy9TVkdQb2x5Z29uRWxlbWVudC5jcHAgYi9XZWJD
b3JlL3N2Zy9TVkdQb2x5Z29uRWxlbWVudC5jcHAKaW5kZXggNTdlMmQ1My4uNTI0Y2QyZiAxMDA2
NDQKLS0tIGEvV2ViQ29yZS9zdmcvU1ZHUG9seWdvbkVsZW1lbnQuY3BwCisrKyBiL1dlYkNvcmUv
c3ZnL1NWR1BvbHlnb25FbGVtZW50LmNwcApAQCAtMzcsMjIgKzM3LDE5IEBAIFBhc3NSZWZQdHI8
U1ZHUG9seWdvbkVsZW1lbnQ+IFNWR1BvbHlnb25FbGVtZW50OjpjcmVhdGUoY29uc3QgUXVhbGlm
aWVkTmFtZSYgdGFnCiAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBTVkdQb2x5Z29uRWxlbWVudCh0
YWdOYW1lLCBkb2N1bWVudCkpOwogfQogCi1QYXRoIFNWR1BvbHlnb25FbGVtZW50Ojp0b1BhdGhE
YXRhKCkgY29uc3QKK3ZvaWQgU1ZHUG9seWdvbkVsZW1lbnQ6OnRvUGF0aERhdGEoUGF0aCYgcGF0
aCkgY29uc3QKIHsKLSAgICBQYXRoIHBvbHlEYXRhOwotCiAgICAgaW50IGxlbiA9IHBvaW50cygp
LT5udW1iZXJPZkl0ZW1zKCk7CiAgICAgaWYgKGxlbiA8IDEpCi0gICAgICAgIHJldHVybiBwb2x5
RGF0YTsKKyAgICAgICAgcmV0dXJuOwogICAgIAogICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAwOwot
ICAgIHBvbHlEYXRhLm1vdmVUbyhwb2ludHMoKS0+Z2V0SXRlbSgwLCBlYykpOworICAgIHBhdGgu
bW92ZVRvKHBvaW50cygpLT5nZXRJdGVtKDAsIGVjKSk7CiAKICAgICBmb3IgKGludCBpID0gMTsg
aSA8IGxlbjsgKytpKQotICAgICAgICBwb2x5RGF0YS5hZGRMaW5lVG8ocG9pbnRzKCktPmdldEl0
ZW0oaSwgZWMpKTsKKyAgICAgICAgcGF0aC5hZGRMaW5lVG8ocG9pbnRzKCktPmdldEl0ZW0oaSwg
ZWMpKTsKIAotICAgIHBvbHlEYXRhLmNsb3NlU3VicGF0aCgpOwotICAgIHJldHVybiBwb2x5RGF0
YTsKKyAgICBwYXRoLmNsb3NlU3VicGF0aCgpOwogfQogCiB9CmRpZmYgLS1naXQgYS9XZWJDb3Jl
L3N2Zy9TVkdQb2x5Z29uRWxlbWVudC5oIGIvV2ViQ29yZS9zdmcvU1ZHUG9seWdvbkVsZW1lbnQu
aAppbmRleCA3YTViZGE4Li41Yzg4ZDExIDEwMDY0NAotLS0gYS9XZWJDb3JlL3N2Zy9TVkdQb2x5
Z29uRWxlbWVudC5oCisrKyBiL1dlYkNvcmUvc3ZnL1NWR1BvbHlnb25FbGVtZW50LmgKQEAgLTMz
LDcgKzMzLDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgIHByaXZhdGU6CiAgICAgICAgIFNW
R1BvbHlnb25FbGVtZW50KGNvbnN0IFF1YWxpZmllZE5hbWUmLCBEb2N1bWVudCopOwogCi0gICAg
ICAgIHZpcnR1YWwgUGF0aCB0b1BhdGhEYXRhKCkgY29uc3Q7CisgICAgICAgIHZpcnR1YWwgdm9p
ZCB0b1BhdGhEYXRhKFBhdGgmKSBjb25zdDsKICAgICB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJD
b3JlCmRpZmYgLS1naXQgYS9XZWJDb3JlL3N2Zy9TVkdQb2x5bGluZUVsZW1lbnQuY3BwIGIvV2Vi
Q29yZS9zdmcvU1ZHUG9seWxpbmVFbGVtZW50LmNwcAppbmRleCA3ZWM4NDMxLi5lOTRlYzg0IDEw
MDY0NAotLS0gYS9XZWJDb3JlL3N2Zy9TVkdQb2x5bGluZUVsZW1lbnQuY3BwCisrKyBiL1dlYkNv
cmUvc3ZnL1NWR1BvbHlsaW5lRWxlbWVudC5jcHAKQEAgLTM3LDIxICszNywxNyBAQCBQYXNzUmVm
UHRyPFNWR1BvbHlsaW5lRWxlbWVudD4gU1ZHUG9seWxpbmVFbGVtZW50OjpjcmVhdGUoY29uc3Qg
UXVhbGlmaWVkTmFtZSYgdAogICAgIHJldHVybiBhZG9wdFJlZihuZXcgU1ZHUG9seWxpbmVFbGVt
ZW50KHRhZ05hbWUsIGRvY3VtZW50KSk7CiB9CiAKLVBhdGggU1ZHUG9seWxpbmVFbGVtZW50Ojp0
b1BhdGhEYXRhKCkgY29uc3QKK3ZvaWQgU1ZHUG9seWxpbmVFbGVtZW50Ojp0b1BhdGhEYXRhKFBh
dGgmIHBhdGgpIGNvbnN0CiB7Ci0gICAgUGF0aCBwb2x5RGF0YTsKLQogICAgIGludCBsZW4gPSBw
b2ludHMoKS0+bnVtYmVyT2ZJdGVtcygpOwogICAgIGlmIChsZW4gPCAxKQotICAgICAgICByZXR1
cm4gcG9seURhdGE7CisgICAgICAgIHJldHVybjsKIAogICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAw
OwotICAgIHBvbHlEYXRhLm1vdmVUbyhwb2ludHMoKS0+Z2V0SXRlbSgwLCBlYykpOworICAgIHBh
dGgubW92ZVRvKHBvaW50cygpLT5nZXRJdGVtKDAsIGVjKSk7CiAKICAgICBmb3IgKGludCBpID0g
MTsgaSA8IGxlbjsgKytpKQotICAgICAgICBwb2x5RGF0YS5hZGRMaW5lVG8ocG9pbnRzKCktPmdl
dEl0ZW0oaSwgZWMpKTsKLSAgICAKLSAgICByZXR1cm4gcG9seURhdGE7CisgICAgICAgIHBhdGgu
YWRkTGluZVRvKHBvaW50cygpLT5nZXRJdGVtKGksIGVjKSk7CiB9CiAKIH0KZGlmZiAtLWdpdCBh
L1dlYkNvcmUvc3ZnL1NWR1BvbHlsaW5lRWxlbWVudC5oIGIvV2ViQ29yZS9zdmcvU1ZHUG9seWxp
bmVFbGVtZW50LmgKaW5kZXggZDNmZTU1NS4uZGZjZmNkYSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9z
dmcvU1ZHUG9seWxpbmVFbGVtZW50LmgKKysrIGIvV2ViQ29yZS9zdmcvU1ZHUG9seWxpbmVFbGVt
ZW50LmgKQEAgLTMzLDcgKzMzLDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgIHByaXZhdGU6
CiAgICAgICAgIFNWR1BvbHlsaW5lRWxlbWVudChjb25zdCBRdWFsaWZpZWROYW1lJiwgRG9jdW1l
bnQqKTsKIAotICAgICAgICB2aXJ0dWFsIFBhdGggdG9QYXRoRGF0YSgpIGNvbnN0OworICAgICAg
ICB2aXJ0dWFsIHZvaWQgdG9QYXRoRGF0YShQYXRoJikgY29uc3Q7CiAgICAgfTsKIAogfSAvLyBu
YW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9zdmcvU1ZHUmVjdEVsZW1lbnQu
Y3BwIGIvV2ViQ29yZS9zdmcvU1ZHUmVjdEVsZW1lbnQuY3BwCmluZGV4IDliNjgzMGUuLjRiMjdj
MDMgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvc3ZnL1NWR1JlY3RFbGVtZW50LmNwcAorKysgYi9XZWJD
b3JlL3N2Zy9TVkdSZWN0RWxlbWVudC5jcHAKQEAgLTE0NywxOSArMTQ3LDM1IEBAIHZvaWQgU1ZH
UmVjdEVsZW1lbnQ6OnN5bmNocm9uaXplUHJvcGVydHkoY29uc3QgUXVhbGlmaWVkTmFtZSYgYXR0
ck5hbWUpCiAgICAgICAgIHN5bmNocm9uaXplRXh0ZXJuYWxSZXNvdXJjZXNSZXF1aXJlZCgpOwog
fQogCi1QYXRoIFNWR1JlY3RFbGVtZW50Ojp0b1BhdGhEYXRhKCkgY29uc3QKK3ZvaWQgU1ZHUmVj
dEVsZW1lbnQ6OnRvUGF0aERhdGEoUGF0aCYgcGF0aCkgY29uc3QKIHsKLSAgICBGbG9hdFJlY3Qg
cmVjdCh4KCkudmFsdWUodGhpcyksIHkoKS52YWx1ZSh0aGlzKSwgd2lkdGgoKS52YWx1ZSh0aGlz
KSwgaGVpZ2h0KCkudmFsdWUodGhpcykpOworICAgIGZsb2F0IHdpZHRoVmFsdWUgPSB3aWR0aCgp
LnZhbHVlKHRoaXMpOworICAgIGlmICh3aWR0aFZhbHVlIDw9IDApCisgICAgICAgIHJldHVybjsK
KworICAgIGZsb2F0IGhlaWdodFZhbHVlID0gaGVpZ2h0KCkudmFsdWUodGhpcyk7CisgICAgaWYg
KGhlaWdodFZhbHVlIDw9IDApCisgICAgICAgIHJldHVybjsKKworICAgIGZsb2F0IHhWYWx1ZSA9
IHgoKS52YWx1ZSh0aGlzKTsKKyAgICBmbG9hdCB5VmFsdWUgPSB5KCkudmFsdWUodGhpcyk7CisK
KyAgICBGbG9hdFJlY3QgcmVjdCh4VmFsdWUsIHlWYWx1ZSwgd2lkdGhWYWx1ZSwgaGVpZ2h0VmFs
dWUpOwogCiAgICAgYm9vbCBoYXNSeCA9IGhhc0F0dHJpYnV0ZShTVkdOYW1lczo6cnhBdHRyKTsK
ICAgICBib29sIGhhc1J5ID0gaGFzQXR0cmlidXRlKFNWR05hbWVzOjpyeUF0dHIpOwogICAgIGlm
IChoYXNSeCB8fCBoYXNSeSkgewotICAgICAgICBmbG9hdCBfcnggPSBoYXNSeCA/IHJ4KCkudmFs
dWUodGhpcykgOiByeSgpLnZhbHVlKHRoaXMpOwotICAgICAgICBmbG9hdCBfcnkgPSBoYXNSeSA/
IHJ5KCkudmFsdWUodGhpcykgOiByeCgpLnZhbHVlKHRoaXMpOwotICAgICAgICByZXR1cm4gUGF0
aDo6Y3JlYXRlUm91bmRlZFJlY3RhbmdsZShyZWN0LCBGbG9hdFNpemUoX3J4LCBfcnkpKTsKKyAg
ICAgICAgZmxvYXQgcnhWYWx1ZSA9IHJ4KCkudmFsdWUodGhpcyk7CisgICAgICAgIGZsb2F0IHJ5
VmFsdWUgPSByeSgpLnZhbHVlKHRoaXMpOworICAgICAgICBpZiAoIWhhc1J4KQorICAgICAgICAg
ICAgcnhWYWx1ZSA9IHJ5VmFsdWU7CisgICAgICAgIGVsc2UgaWYgKCFoYXNSeSkKKyAgICAgICAg
ICAgIHJ5VmFsdWUgPSByeFZhbHVlOworICAgICAgICBwYXRoLmFkZFJvdW5kZWRSZWN0KHJlY3Qs
IEZsb2F0U2l6ZShyeFZhbHVlLCByeVZhbHVlKSk7CisgICAgICAgIHJldHVybjsKICAgICB9CiAK
LSAgICByZXR1cm4gUGF0aDo6Y3JlYXRlUmVjdGFuZ2xlKHJlY3QpOworICAgIHBhdGguYWRkUmVj
dChyZWN0KTsKIH0KIAogYm9vbCBTVkdSZWN0RWxlbWVudDo6c2VsZkhhc1JlbGF0aXZlTGVuZ3Ro
cygpIGNvbnN0CmRpZmYgLS1naXQgYS9XZWJDb3JlL3N2Zy9TVkdSZWN0RWxlbWVudC5oIGIvV2Vi
Q29yZS9zdmcvU1ZHUmVjdEVsZW1lbnQuaAppbmRleCAzODIwNzhkLi42NjgzNjZiIDEwMDY0NAot
LS0gYS9XZWJDb3JlL3N2Zy9TVkdSZWN0RWxlbWVudC5oCisrKyBiL1dlYkNvcmUvc3ZnL1NWR1Jl
Y3RFbGVtZW50LmgKQEAgLTQ1LDcgKzQ1LDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAg
ICB2aXJ0dWFsIHZvaWQgc3ZnQXR0cmlidXRlQ2hhbmdlZChjb25zdCBRdWFsaWZpZWROYW1lJik7
CiAgICAgICAgIHZpcnR1YWwgdm9pZCBzeW5jaHJvbml6ZVByb3BlcnR5KGNvbnN0IFF1YWxpZmll
ZE5hbWUmKTsKIAotICAgICAgICB2aXJ0dWFsIFBhdGggdG9QYXRoRGF0YSgpIGNvbnN0OworICAg
ICAgICB2aXJ0dWFsIHZvaWQgdG9QYXRoRGF0YShQYXRoJikgY29uc3Q7CiAKICAgICAgICAgdmly
dHVhbCBib29sIHNlbGZIYXNSZWxhdGl2ZUxlbmd0aHMoKSBjb25zdDsKIApkaWZmIC0tZ2l0IGEv
V2ViQ29yZS9zdmcvU1ZHU3R5bGVkVHJhbnNmb3JtYWJsZUVsZW1lbnQuY3BwIGIvV2ViQ29yZS9z
dmcvU1ZHU3R5bGVkVHJhbnNmb3JtYWJsZUVsZW1lbnQuY3BwCmluZGV4IDQ0MTk0NDMuLjliMzQy
MDMgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvc3ZnL1NWR1N0eWxlZFRyYW5zZm9ybWFibGVFbGVtZW50
LmNwcAorKysgYi9XZWJDb3JlL3N2Zy9TVkdTdHlsZWRUcmFuc2Zvcm1hYmxlRWxlbWVudC5jcHAK
QEAgLTExMSwxMiArMTExLDExIEBAIFJlbmRlck9iamVjdCogU1ZHU3R5bGVkVHJhbnNmb3JtYWJs
ZUVsZW1lbnQ6OmNyZWF0ZVJlbmRlcmVyKFJlbmRlckFyZW5hKiBhcmVuYSwKICAgICByZXR1cm4g
bmV3IChhcmVuYSkgUmVuZGVyU1ZHUGF0aCh0aGlzKTsKIH0KIAotUGF0aCBTVkdTdHlsZWRUcmFu
c2Zvcm1hYmxlRWxlbWVudDo6dG9DbGlwUGF0aCgpIGNvbnN0Cit2b2lkIFNWR1N0eWxlZFRyYW5z
Zm9ybWFibGVFbGVtZW50Ojp0b0NsaXBQYXRoKFBhdGgmIHBhdGgpIGNvbnN0CiB7Ci0gICAgUGF0
aCBwYXRoRGF0YSA9IHRvUGF0aERhdGEoKTsKKyAgICB0b1BhdGhEYXRhKHBhdGgpOwogICAgIC8v
IEZJWE1FOiBIb3cgZG8gd2Uga25vdyB0aGUgZWxlbWVudCBoYXMgZG9uZSBhIGxheW91dD8KLSAg
ICBwYXRoRGF0YS50cmFuc2Zvcm0oYW5pbWF0ZWRMb2NhbFRyYW5zZm9ybSgpKTsKLSAgICByZXR1
cm4gcGF0aERhdGE7CisgICAgcGF0aC50cmFuc2Zvcm0oYW5pbWF0ZWRMb2NhbFRyYW5zZm9ybSgp
KTsKIH0KIAogfQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9zdmcvU1ZHU3R5bGVkVHJhbnNmb3JtYWJs
ZUVsZW1lbnQuaCBiL1dlYkNvcmUvc3ZnL1NWR1N0eWxlZFRyYW5zZm9ybWFibGVFbGVtZW50LmgK
aW5kZXggMjkwZjdmOC4uNTM0OWNmYSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9zdmcvU1ZHU3R5bGVk
VHJhbnNmb3JtYWJsZUVsZW1lbnQuaAorKysgYi9XZWJDb3JlL3N2Zy9TVkdTdHlsZWRUcmFuc2Zv
cm1hYmxlRWxlbWVudC5oCkBAIC00OSw4ICs0OSw4IEBAIHB1YmxpYzoKICAgICBib29sIGlzS25v
d25BdHRyaWJ1dGUoY29uc3QgUXVhbGlmaWVkTmFtZSYpOwogCiAgICAgLy8gImJhc2UgY2xhc3Mi
IG1ldGhvZHMgZm9yIGFsbCB0aGUgZWxlbWVudHMgd2hpY2ggcmVuZGVyIGFzIHBhdGhzCi0gICAg
dmlydHVhbCBQYXRoIHRvUGF0aERhdGEoKSBjb25zdCB7IHJldHVybiBQYXRoKCk7IH0KLSAgICB2
aXJ0dWFsIFBhdGggdG9DbGlwUGF0aCgpIGNvbnN0OworICAgIHZpcnR1YWwgdm9pZCB0b1BhdGhE
YXRhKFBhdGgmKSBjb25zdCB7IH0KKyAgICB2aXJ0dWFsIHZvaWQgdG9DbGlwUGF0aChQYXRoJikg
Y29uc3Q7CiAgICAgdmlydHVhbCBSZW5kZXJPYmplY3QqIGNyZWF0ZVJlbmRlcmVyKFJlbmRlckFy
ZW5hKiwgUmVuZGVyU3R5bGUqKTsKIAogcHJvdGVjdGVkOgpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9z
dmcvU1ZHVXNlRWxlbWVudC5jcHAgYi9XZWJDb3JlL3N2Zy9TVkdVc2VFbGVtZW50LmNwcAppbmRl
eCA3ODJlZmE4Li4zNGU3ZDg4IDEwMDY0NAotLS0gYS9XZWJDb3JlL3N2Zy9TVkdVc2VFbGVtZW50
LmNwcAorKysgYi9XZWJDb3JlL3N2Zy9TVkdVc2VFbGVtZW50LmNwcApAQCAtNjI0LDI1ICs2MjQs
MjIgQEAgc3RhdGljIGJvb2wgaXNEaXJlY3RSZWZlcmVuY2UoTm9kZSogbikKICAgICAgICAgICAg
bi0+aGFzVGFnTmFtZShTVkdOYW1lczo6dGV4dFRhZyk7CiB9CiAKLVBhdGggU1ZHVXNlRWxlbWVu
dDo6dG9DbGlwUGF0aCgpIGNvbnN0Cit2b2lkIFNWR1VzZUVsZW1lbnQ6OnRvQ2xpcFBhdGgoUGF0
aCYgcGF0aCkgY29uc3QKIHsKICAgICBOb2RlKiBuID0gbV90YXJnZXRFbGVtZW50SW5zdGFuY2Ug
PyBtX3RhcmdldEVsZW1lbnRJbnN0YW5jZS0+c2hhZG93VHJlZUVsZW1lbnQoKSA6IDA7CiAgICAg
aWYgKCFuKQotICAgICAgICByZXR1cm4gUGF0aCgpOworICAgICAgICByZXR1cm47CiAKICAgICBp
ZiAobi0+aXNTVkdFbGVtZW50KCkgJiYgc3RhdGljX2Nhc3Q8U1ZHRWxlbWVudCo+KG4pLT5pc1N0
eWxlZFRyYW5zZm9ybWFibGUoKSkgewogICAgICAgICBpZiAoIWlzRGlyZWN0UmVmZXJlbmNlKG4p
KQogICAgICAgICAgICAgLy8gU3BlYzogSW5kaXJlY3QgcmVmZXJlbmNlcyBhcmUgYW4gZXJyb3Ig
KDE0LjMuNSkKICAgICAgICAgICAgIGRvY3VtZW50KCktPmFjY2Vzc1NWR0V4dGVuc2lvbnMoKS0+
cmVwb3J0RXJyb3IoIk5vdCBhbGxvd2VkIHRvIHVzZSBpbmRpcmVjdCByZWZlcmVuY2UgaW4gPGNs
aXAtcGF0aD4iKTsKICAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICBQYXRoIGNsaXBQYXRoID0g
c3RhdGljX2Nhc3Q8U1ZHU3R5bGVkVHJhbnNmb3JtYWJsZUVsZW1lbnQqPihuKS0+dG9DbGlwUGF0
aCgpOwotICAgICAgICAgICAgY2xpcFBhdGgudHJhbnNsYXRlKEZsb2F0U2l6ZSh4KCkudmFsdWUo
dGhpcyksIHkoKS52YWx1ZSh0aGlzKSkpOwotICAgICAgICAgICAgY2xpcFBhdGgudHJhbnNmb3Jt
KGFuaW1hdGVkTG9jYWxUcmFuc2Zvcm0oKSk7Ci0gICAgICAgICAgICByZXR1cm4gY2xpcFBhdGg7
CisgICAgICAgICAgICBzdGF0aWNfY2FzdDxTVkdTdHlsZWRUcmFuc2Zvcm1hYmxlRWxlbWVudCo+
KG4pLT50b0NsaXBQYXRoKHBhdGgpOworICAgICAgICAgICAgcGF0aC50cmFuc2xhdGUoRmxvYXRT
aXplKHgoKS52YWx1ZSh0aGlzKSwgeSgpLnZhbHVlKHRoaXMpKSk7CisgICAgICAgICAgICBwYXRo
LnRyYW5zZm9ybShhbmltYXRlZExvY2FsVHJhbnNmb3JtKCkpOwogICAgICAgICB9CiAgICAgfQot
Ci0gICAgcmV0dXJuIFBhdGgoKTsKIH0KIAogUmVuZGVyT2JqZWN0KiBTVkdVc2VFbGVtZW50Ojpy
ZW5kZXJlckNsaXBDaGlsZCgpIGNvbnN0CmRpZmYgLS1naXQgYS9XZWJDb3JlL3N2Zy9TVkdVc2VF
bGVtZW50LmggYi9XZWJDb3JlL3N2Zy9TVkdVc2VFbGVtZW50LmgKaW5kZXggOTM2NmQyNS4uYjhi
YTcxZCAxMDA2NDQKLS0tIGEvV2ViQ29yZS9zdmcvU1ZHVXNlRWxlbWVudC5oCisrKyBiL1dlYkNv
cmUvc3ZnL1NWR1VzZUVsZW1lbnQuaApAQCAtNjcsNyArNjcsNyBAQCBuYW1lc3BhY2UgV2ViQ29y
ZSB7CiAgICAgICAgIHZpcnR1YWwgdm9pZCBhdHRhY2goKTsKICAgICAgICAgdmlydHVhbCB2b2lk
IGRldGFjaCgpOwogCi0gICAgICAgIHZpcnR1YWwgUGF0aCB0b0NsaXBQYXRoKCkgY29uc3Q7Cisg
ICAgICAgIHZpcnR1YWwgdm9pZCB0b0NsaXBQYXRoKFBhdGgmKSBjb25zdDsKIAogICAgICAgICBz
dGF0aWMgdm9pZCByZW1vdmVEaXNhbGxvd2VkRWxlbWVudHNGcm9tU3VidHJlZShOb2RlKiBlbGVt
ZW50KTsKIAo=
</data>
<flag name="review"
          id="60297"
          type_id="1"
          status="-"
          setter="zimmermann"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>70460</attachid>
            <date>2010-10-11 11:52:26 -0700</date>
            <delta_ts>2010-10-11 12:07:15 -0700</delta_ts>
            <desc>Proposed patch v8</desc>
            <filename>bug-46052-v8.diff</filename>
            <type>text/plain</type>
            <size>47832</size>
            <attacher name="Andreas Kling">kling</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ2hhbmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXgg
OTk1ZGMyNC4uNWMyYjkyYyAxMDA2NDQKLS0tIGEvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvV2Vi
Q29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSw4NCBAQAorMjAxMC0xMC0xMSAgQW5kcmVhcyBLbGlu
ZyAgPGtsaW5nQHdlYmtpdC5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BT
ISkuCisKKyAgICAgICAgU1ZHOiBSZW1vdmUgImNyZWF0ZSIgbWV0aG9kcyBhbmQgdXNlIHBvcnQt
c3BlY2lmaWMgImFkZCIgY291bnRlcnBhcnRzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD00NjA1MgorCisgICAgICAgIENpcmNsZXMgYW5kIGVsbGlwc2Vz
IHdpbGwgYmUgc2lnbmlmaWNhbnRseSBmYXN0ZXIgb24gcGxhdGZvcm1zIHRoYXQKKyAgICAgICAg
aW1wbGVtZW50IFBhdGg6OmFkZEVsbGlwc2UoKSBpbiBhIHNhbmUgZmFzaGlvbi4KKworICAgICAg
ICBBbHNvLCBhIGxvdCBvZiBQYXRoIGNvcHlpbmcgaGFzIGJlZW4gZmFjdG9yZWQgb3V0IGJ5IGNo
YW5naW5nIGZ1bmN0aW9ucworICAgICAgICB0aGF0IHdvdWxkIHJldHVybiBQYXRocyB0byB0YWtl
IFBhdGgmIGFyZ3VtZW50cyBpbnN0ZWFkICh0b1BhdGhEYXRhLCB0b0NsaXBQYXRoKQorCisgICAg
ICAgICogbWF0aG1sL1JlbmRlck1hdGhNTFJvb3QuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVu
ZGVyTWF0aE1MUm9vdDo6cGFpbnQpOgorICAgICAgICAqIG1hdGhtbC9SZW5kZXJNYXRoTUxTcXVh
cmVSb290LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlck1hdGhNTFNxdWFyZVJvb3Q6OnBh
aW50KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjphZGRSb3VuZGVkUmVjdENsaXApOgor
ICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpjbGlwT3V0Um91bmRlZFJlY3QpOgor
ICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL1BhdGguY3BwOgorICAgICAgICAoV2ViQ29yZTo6
cGF0aExlbmd0aEFwcGxpZXJGdW5jdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpQYXRoOjphZGRS
b3VuZGVkUmVjdCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvUGF0aC5oOgorICAgICAg
ICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0NvbnRleHRTaGFkb3dDYWlyby5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpDb250ZXh0U2hhZG93OjpkcmF3UmVjdFNoYWRvd1dpdGhvdXRUaWxpbmcp
OgorICAgICAgICAoV2ViQ29yZTo6Q29udGV4dFNoYWRvdzo6ZHJhd1JlY3RTaGFkb3cpOgorICAg
ICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0dyYXBoaWNzQ29udGV4dENhaXJvLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6ZHJhd0ZvY3VzUmluZyk6CisgICAg
ICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OmRyYXdUaWxlZFNoYWRvdyk6CisgICAgICAg
IChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OmZpbGxSb3VuZGVkUmVjdCk6CisgICAgICAgICog
cGxhdGZvcm0vZ3JhcGhpY3MvY2cvR3JhcGhpY3NDb250ZXh0Q0cuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6R3JhcGhpY3NDb250ZXh0OjpmaWxsUm91bmRlZFJlY3QpOgorICAgICAgICAqIHBsYXRm
b3JtL2dyYXBoaWNzL3F0L0dyYXBoaWNzQ29udGV4dFF0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OkdyYXBoaWNzQ29udGV4dDo6ZmlsbFJvdW5kZWRSZWN0KToKKyAgICAgICAgKiByZW5kZXJpbmcv
UmVuZGVyQm94TW9kZWxPYmplY3QuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQm94TW9k
ZWxPYmplY3Q6OnBhaW50Qm9yZGVyKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJveE1vZGVs
T2JqZWN0OjpwYWludEJveFNoYWRvdyk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckVtYmVk
ZGVkT2JqZWN0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckVtYmVkZGVkT2JqZWN0Ojpn
ZXRSZXBsYWNlbWVudFRleHRHZW9tZXRyeSk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlclNW
R1Jlc291cmNlQ2xpcHBlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJTVkdSZXNvdXJj
ZUNsaXBwZXI6OnBhdGhPbmx5Q2xpcHBpbmcpOgorICAgICAgICAqIHJlbmRlcmluZy9zdmcvUmVu
ZGVyU1ZHUGF0aC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJTVkdQYXRoOjpsYXlvdXQp
OgorICAgICAgICAqIHJlbmRlcmluZy9zdmcvUmVuZGVyU1ZHVGV4dFBhdGguY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6UmVuZGVyU1ZHVGV4dFBhdGg6OmxheW91dFBhdGgpOgorICAgICAgICAqIHJl
bmRlcmluZy9zdmcvU1ZHSW5saW5lVGV4dEJveC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTVkdJ
bmxpbmVUZXh0Qm94OjpwYWludERlY29yYXRpb25XaXRoU3R5bGUpOgorICAgICAgICAqIHN2Zy9T
VkdBbmltYXRlTW90aW9uRWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTVkdBbmltYXRl
TW90aW9uRWxlbWVudDo6YW5pbWF0aW9uUGF0aCk6CisgICAgICAgICogc3ZnL1NWR0NpcmNsZUVs
ZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U1ZHQ2lyY2xlRWxlbWVudDo6dG9QYXRoRGF0
YSk6CisgICAgICAgICogc3ZnL1NWR0NpcmNsZUVsZW1lbnQuaDoKKyAgICAgICAgKiBzdmcvU1ZH
RWxsaXBzZUVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U1ZHRWxsaXBzZUVsZW1lbnQ6
OnRvUGF0aERhdGEpOgorICAgICAgICAqIHN2Zy9TVkdFbGxpcHNlRWxlbWVudC5oOgorICAgICAg
ICAqIHN2Zy9TVkdMaW5lRWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTVkdMaW5lRWxl
bWVudDo6dG9QYXRoRGF0YSk6CisgICAgICAgICogc3ZnL1NWR0xpbmVFbGVtZW50Lmg6CisgICAg
ICAgICogc3ZnL1NWR1BhdGhFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR1BhdGhF
bGVtZW50OjpnZXRUb3RhbExlbmd0aCk6CisgICAgICAgIChXZWJDb3JlOjpTVkdQYXRoRWxlbWVu
dDo6Z2V0UG9pbnRBdExlbmd0aCk6CisgICAgICAgIChXZWJDb3JlOjpTVkdQYXRoRWxlbWVudDo6
dG9QYXRoRGF0YSk6CisgICAgICAgICogc3ZnL1NWR1BhdGhFbGVtZW50Lmg6CisgICAgICAgICog
c3ZnL1NWR1BvbHlnb25FbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR1BvbHlnb25F
bGVtZW50Ojp0b1BhdGhEYXRhKToKKyAgICAgICAgKiBzdmcvU1ZHUG9seWdvbkVsZW1lbnQuaDoK
KyAgICAgICAgKiBzdmcvU1ZHUG9seWxpbmVFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OlNWR1BvbHlsaW5lRWxlbWVudDo6dG9QYXRoRGF0YSk6CisgICAgICAgICogc3ZnL1NWR1BvbHls
aW5lRWxlbWVudC5oOgorICAgICAgICAqIHN2Zy9TVkdSZWN0RWxlbWVudC5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpTVkdSZWN0RWxlbWVudDo6dG9QYXRoRGF0YSk6CisgICAgICAgICogc3ZnL1NW
R1JlY3RFbGVtZW50Lmg6CisgICAgICAgICogc3ZnL1NWR1N0eWxlZFRyYW5zZm9ybWFibGVFbGVt
ZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR1N0eWxlZFRyYW5zZm9ybWFibGVFbGVtZW50
Ojp0b0NsaXBQYXRoKToKKyAgICAgICAgKiBzdmcvU1ZHU3R5bGVkVHJhbnNmb3JtYWJsZUVsZW1l
bnQuaDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR1N0eWxlZFRyYW5zZm9ybWFibGVFbGVtZW50Ojp0
b1BhdGhEYXRhKToKKyAgICAgICAgKiBzdmcvU1ZHVXNlRWxlbWVudC5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpTVkdVc2VFbGVtZW50Ojp0b0NsaXBQYXRoKToKKyAgICAgICAgKiBzdmcvU1ZHVXNl
RWxlbWVudC5oOgorCiAyMDEwLTEwLTExICBOaWtvbGFzIFppbW1lcm1hbm4gIDxuemltbWVybWFu
bkByaW0uY29tPgogCiAgICAgICAgIFJldmlld2VkIGJ5IEFuZHJlYXMgS2xpbmcuCmRpZmYgLS1n
aXQgYS9XZWJDb3JlL21hdGhtbC9SZW5kZXJNYXRoTUxSb290LmNwcCBiL1dlYkNvcmUvbWF0aG1s
L1JlbmRlck1hdGhNTFJvb3QuY3BwCmluZGV4IGRhMzAzYzkuLjk5YjVkYzYgMTAwNjQ0Ci0tLSBh
L1dlYkNvcmUvbWF0aG1sL1JlbmRlck1hdGhNTFJvb3QuY3BwCisrKyBiL1dlYkNvcmUvbWF0aG1s
L1JlbmRlck1hdGhNTFJvb3QuY3BwCkBAIC0xOTAsOSArMTkwLDkgQEAgdm9pZCBSZW5kZXJNYXRo
TUxSb290OjpwYWludChQYWludEluZm8mIGluZm8sIGludCB0eCwgaW50IHR5KQogICAgIGluZm8u
Y29udGV4dC0+c2V0TGluZUNhcChTcXVhcmVDYXApOwogICAgIAogICAgIFBhdGggbGluZTsKLSAg
ICAKLSAgICBsaW5lID0gbGluZS5jcmVhdGVMaW5lKGJvdHRvbUxlZnQsIHRvcExlZnQpOwotICAg
IAorICAgIGxpbmUubW92ZVRvKGJvdHRvbUxlZnQpOworICAgIGxpbmUuYWRkTGluZVRvKHRvcExl
ZnQpOworCiAgICAgaW5mby5jb250ZXh0LT5iZWdpblBhdGgoKTsKICAgICBpbmZvLmNvbnRleHQt
PmFkZFBhdGgobGluZSk7CiAgICAgaW5mby5jb250ZXh0LT5zdHJva2VQYXRoKCk7CmRpZmYgLS1n
aXQgYS9XZWJDb3JlL21hdGhtbC9SZW5kZXJNYXRoTUxTcXVhcmVSb290LmNwcCBiL1dlYkNvcmUv
bWF0aG1sL1JlbmRlck1hdGhNTFNxdWFyZVJvb3QuY3BwCmluZGV4IDg2YWRkN2EuLmQyZTcwNDkg
MTAwNjQ0Ci0tLSBhL1dlYkNvcmUvbWF0aG1sL1JlbmRlck1hdGhNTFNxdWFyZVJvb3QuY3BwCisr
KyBiL1dlYkNvcmUvbWF0aG1sL1JlbmRlck1hdGhNTFNxdWFyZVJvb3QuY3BwCkBAIC0xNTYsOCAr
MTU2LDggQEAgdm9pZCBSZW5kZXJNYXRoTUxTcXVhcmVSb290OjpwYWludChQYWludEluZm8mIGlu
Zm8sIGludCB0eCwgaW50IHR5KQogICAgIGluZm8uY29udGV4dC0+c2V0TGluZUNhcChTcXVhcmVD
YXApOwogICAgIAogICAgIFBhdGggbGluZTsKLSAgICAKLSAgICBsaW5lID0gbGluZS5jcmVhdGVM
aW5lKGJvdHRvbUxlZnQsIHRvcExlZnQpOworICAgIGxpbmUubW92ZVRvKGJvdHRvbUxlZnQpOwor
ICAgIGxpbmUuYWRkTGluZVRvKHRvcExlZnQpOwogICAgIAogICAgIGluZm8uY29udGV4dC0+YmVn
aW5QYXRoKCk7CiAgICAgaW5mby5jb250ZXh0LT5hZGRQYXRoKGxpbmUpOwpkaWZmIC0tZ2l0IGEv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQuY3BwIGIvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQuY3BwCmluZGV4IDJjOTRiZWMuLjg1OWYz
OGEgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0
LmNwcAorKysgYi9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dC5jcHAK
QEAgLTUwMCw3ICs1MDAsOSBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6YWRkUm91bmRlZFJlY3RD
bGlwKGNvbnN0IEludFJlY3QmIHJlY3QsIGNvbnN0IEludFNpemUmIHRvcAogICAgIGlmIChwYWlu
dGluZ0Rpc2FibGVkKCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIGNsaXAoUGF0aDo6Y3JlYXRl
Um91bmRlZFJlY3RhbmdsZShyZWN0LCB0b3BMZWZ0LCB0b3BSaWdodCwgYm90dG9tTGVmdCwgYm90
dG9tUmlnaHQpKTsKKyAgICBQYXRoIHBhdGg7CisgICAgcGF0aC5hZGRSb3VuZGVkUmVjdChyZWN0
LCB0b3BMZWZ0LCB0b3BSaWdodCwgYm90dG9tTGVmdCwgYm90dG9tUmlnaHQpOworICAgIGNsaXAo
cGF0aCk7CiB9CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpjbGlwT3V0Um91bmRlZFJlY3QoY29u
c3QgSW50UmVjdCYgcmVjdCwgY29uc3QgSW50U2l6ZSYgdG9wTGVmdCwgY29uc3QgSW50U2l6ZSYg
dG9wUmlnaHQsCkBAIC01MDksNyArNTExLDkgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6OmNsaXBP
dXRSb3VuZGVkUmVjdChjb25zdCBJbnRSZWN0JiByZWN0LCBjb25zdCBJbnRTaXplJiB0b3AKICAg
ICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQogICAgICAgICByZXR1cm47CiAKLSAgICBjbGlwT3V0
KFBhdGg6OmNyZWF0ZVJvdW5kZWRSZWN0YW5nbGUocmVjdCwgdG9wTGVmdCwgdG9wUmlnaHQsIGJv
dHRvbUxlZnQsIGJvdHRvbVJpZ2h0KSk7CisgICAgUGF0aCBwYXRoOworICAgIHBhdGguYWRkUm91
bmRlZFJlY3QocmVjdCwgdG9wTGVmdCwgdG9wUmlnaHQsIGJvdHRvbUxlZnQsIGJvdHRvbVJpZ2h0
KTsKKyAgICBjbGlwT3V0KHBhdGgpOwogfQogCiB2b2lkIEdyYXBoaWNzQ29udGV4dDo6Y2xpcFRv
SW1hZ2VCdWZmZXIoSW1hZ2VCdWZmZXIqIGJ1ZmZlciwgY29uc3QgRmxvYXRSZWN0JiByZWN0KQpk
aWZmIC0tZ2l0IGEvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9QYXRoLmNwcCBiL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvUGF0aC5jcHAKaW5kZXggNGUyZGU1My4uMTY4MjljMCAxMDA2NDQK
LS0tIGEvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9QYXRoLmNwcAorKysgYi9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL1BhdGguY3BwCkBAIC0zNSw4ICszNSw5IEBACiAjaW5jbHVkZSA8bWF0
aC5oPgogI2luY2x1ZGUgPHd0Zi9NYXRoRXh0cmFzLmg+CiAKLXN0YXRpYyBjb25zdCBmbG9hdCBR
VUFSVEVSID0gMC41NTJmOyAvLyBhcHByb3hpbWF0aW9uIG9mIGNvbnRyb2wgcG9pbnQgcG9zaXRp
b25zIG9uIGEgYmV6aWVyCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyB0byBzaW11
bGF0ZSBhIHF1YXJ0ZXIgb2YgYSBjaXJjbGUuCisvLyBBcHByb3hpbWF0aW9uIG9mIGNvbnRyb2wg
cG9pbnQgcG9zaXRpb25zIG9uIGEgYmV6aWVyIHRvIHNpbXVsYXRlIGEgcXVhcnRlciBvZiBhIGNp
cmNsZS4KK3N0YXRpYyBjb25zdCBmbG9hdCBnQ2lyY2xlQ29udHJvbFBvaW50ID0gMSAtIDAuNTUy
OworCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKICNpZiAhUExBVEZPUk0oT1BFTlZHKSAmJiAhUExB
VEZPUk0oUVQpCkBAIC00Nyw3ICs0OCw3IEBAIHN0YXRpYyB2b2lkIHBhdGhMZW5ndGhBcHBsaWVy
RnVuY3Rpb24odm9pZCogaW5mbywgY29uc3QgUGF0aEVsZW1lbnQqIGVsZW1lbnQpCiAgICAgICAg
IHJldHVybjsKICAgICB0cmF2ZXJzYWxTdGF0ZS5tX3ByZXZpb3VzID0gdHJhdmVyc2FsU3RhdGUu
bV9jdXJyZW50OwogICAgIEZsb2F0UG9pbnQqIHBvaW50cyA9IGVsZW1lbnQtPnBvaW50czsKLSAg
ICBmbG9hdCBzZWdtZW50TGVuZ3RoID0gMC4wZjsKKyAgICBmbG9hdCBzZWdtZW50TGVuZ3RoID0g
MDsKICAgICBzd2l0Y2ggKGVsZW1lbnQtPnR5cGUpIHsKICAgICAgICAgY2FzZSBQYXRoRWxlbWVu
dE1vdmVUb1BvaW50OgogICAgICAgICAgICAgc2VnbWVudExlbmd0aCA9IHRyYXZlcnNhbFN0YXRl
Lm1vdmVUbyhwb2ludHNbMF0pOwpAQCAtNzUsMTAgKzc2LDggQEAgc3RhdGljIHZvaWQgcGF0aExl
bmd0aEFwcGxpZXJGdW5jdGlvbih2b2lkKiBpbmZvLCBjb25zdCBQYXRoRWxlbWVudCogZWxlbWVu
dCkKICAgICAgICAgaWYgKHRyYXZlcnNhbFN0YXRlLm1fYWN0aW9uID09IFBhdGhUcmF2ZXJzYWxT
dGF0ZTo6VHJhdmVyc2FsUG9pbnRBdExlbmd0aCkgewogICAgICAgICAgICAgZmxvYXQgb2Zmc2V0
ID0gdHJhdmVyc2FsU3RhdGUubV9kZXNpcmVkTGVuZ3RoIC0gdHJhdmVyc2FsU3RhdGUubV90b3Rh
bExlbmd0aDsKICAgICAgICAgICAgIHRyYXZlcnNhbFN0YXRlLm1fY3VycmVudC5tb3ZlKG9mZnNl
dCAqIGNvc2Yoc2xvcGUpLCBvZmZzZXQgKiBzaW5mKHNsb3BlKSk7Ci0gICAgICAgIH0gZWxzZSB7
Ci0gICAgICAgICAgICBzdGF0aWMgY29uc3QgZmxvYXQgcmFkMmRlZyA9IDE4MC4wZiAvIHBpRmxv
YXQ7Ci0gICAgICAgICAgICB0cmF2ZXJzYWxTdGF0ZS5tX25vcm1hbEFuZ2xlID0gc2xvcGUgKiBy
YWQyZGVnOwotICAgICAgICB9CisgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgdHJhdmVyc2Fs
U3RhdGUubV9ub3JtYWxBbmdsZSA9IHJhZDJkZWcoc2xvcGUpOwogCiAgICAgICAgIHRyYXZlcnNh
bFN0YXRlLm1fc3VjY2VzcyA9IHRydWU7CiAgICAgfQpAQCAtMTEwLDE2NyArMTA5LDgzIEBAIGZs
b2F0IFBhdGg6Om5vcm1hbEFuZ2xlQXRMZW5ndGgoZmxvYXQgbGVuZ3RoLCBib29sJiBvaykKIH0K
ICNlbmRpZgogCi1QYXRoIFBhdGg6OmNyZWF0ZVJvdW5kZWRSZWN0YW5nbGUoY29uc3QgRmxvYXRS
ZWN0JiByZWN0YW5nbGUsIGNvbnN0IEZsb2F0U2l6ZSYgcm91bmRpbmdSYWRpaSkKK3ZvaWQgUGF0
aDo6YWRkUm91bmRlZFJlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBjb25zdCBGbG9hdFNpemUm
IHJvdW5kaW5nUmFkaWkpCiB7Ci0gICAgUGF0aCBwYXRoOwotICAgIGZsb2F0IHggPSByZWN0YW5n
bGUueCgpOwotICAgIGZsb2F0IHkgPSByZWN0YW5nbGUueSgpOwotICAgIGZsb2F0IHdpZHRoID0g
cmVjdGFuZ2xlLndpZHRoKCk7Ci0gICAgZmxvYXQgaGVpZ2h0ID0gcmVjdGFuZ2xlLmhlaWdodCgp
OwotICAgIGZsb2F0IHJ4ID0gcm91bmRpbmdSYWRpaS53aWR0aCgpOwotICAgIGZsb2F0IHJ5ID0g
cm91bmRpbmdSYWRpaS5oZWlnaHQoKTsKLSAgICBpZiAod2lkdGggPD0gMC4wZiB8fCBoZWlnaHQg
PD0gMC4wZikKLSAgICAgICAgcmV0dXJuIHBhdGg7CisgICAgaWYgKHJlY3QuaXNFbXB0eSgpKQor
ICAgICAgICByZXR1cm47CisKKyAgICBGbG9hdFNpemUgcmFkaXVzID0gcm91bmRpbmdSYWRpaTsK
KyAgICBGbG9hdFNpemUgaGFsZlNpemUocmVjdC53aWR0aCgpIC8gMiwgcmVjdC5oZWlnaHQoKSAv
IDIpOwogCi0gICAgZmxvYXQgZHggPSByeCwgZHkgPSByeTsKICAgICAvLyBJZiByeCBpcyBncmVh
dGVyIHRoYW4gaGFsZiBvZiB0aGUgd2lkdGggb2YgdGhlIHJlY3RhbmdsZQogICAgIC8vIHRoZW4g
c2V0IHJ4IHRvIGhhbGYgb2YgdGhlIHdpZHRoIChyZXF1aXJlZCBpbiBTVkcgc3BlYykKLSAgICBp
ZiAoZHggPiB3aWR0aCAqIDAuNWYpCi0gICAgICAgIGR4ID0gd2lkdGggKiAwLjVmOworICAgIGlm
IChyYWRpdXMud2lkdGgoKSA+IGhhbGZTaXplLndpZHRoKCkpCisgICAgICAgIHJhZGl1cy5zZXRX
aWR0aChoYWxmU2l6ZS53aWR0aCgpKTsKIAogICAgIC8vIElmIHJ5IGlzIGdyZWF0ZXIgdGhhbiBo
YWxmIG9mIHRoZSBoZWlnaHQgb2YgdGhlIHJlY3RhbmdsZQogICAgIC8vIHRoZW4gc2V0IHJ5IHRv
IGhhbGYgb2YgdGhlIGhlaWdodCAocmVxdWlyZWQgaW4gU1ZHIHNwZWMpCi0gICAgaWYgKGR5ID4g
aGVpZ2h0ICogMC41ZikKLSAgICAgICAgZHkgPSBoZWlnaHQgKiAwLjVmOworICAgIGlmIChyYWRp
dXMuaGVpZ2h0KCkgPiBoYWxmU2l6ZS5oZWlnaHQoKSkKKyAgICAgICAgcmFkaXVzLnNldEhlaWdo
dChoYWxmU2l6ZS5oZWlnaHQoKSk7CiAKLSAgICBwYXRoLm1vdmVUbyhGbG9hdFBvaW50KHggKyBk
eCwgeSkpOworICAgIG1vdmVUbyhGbG9hdFBvaW50KHJlY3QueCgpICsgcmFkaXVzLndpZHRoKCks
IHJlY3QueSgpKSk7CiAKLSAgICBpZiAoZHggPCB3aWR0aCAqIDAuNWYpCi0gICAgICAgIHBhdGgu
YWRkTGluZVRvKEZsb2F0UG9pbnQoeCArIHdpZHRoIC0gcngsIHkpKTsKKyAgICBpZiAocmFkaXVz
LndpZHRoKCkgPCBoYWxmU2l6ZS53aWR0aCgpKQorICAgICAgICBhZGRMaW5lVG8oRmxvYXRQb2lu
dChyZWN0LngoKSArIHJlY3Qud2lkdGgoKSAtIHJvdW5kaW5nUmFkaWkud2lkdGgoKSwgcmVjdC55
KCkpKTsKIAotICAgIHBhdGguYWRkQmV6aWVyQ3VydmVUbyhGbG9hdFBvaW50KHggKyB3aWR0aCAt
IGR4ICogKDEgLSBRVUFSVEVSKSwgeSksIEZsb2F0UG9pbnQoeCArIHdpZHRoLCB5ICsgZHkgKiAo
MSAtIFFVQVJURVIpKSwgRmxvYXRQb2ludCh4ICsgd2lkdGgsIHkgKyBkeSkpOworICAgIGFkZEJl
emllckN1cnZlVG8oRmxvYXRQb2ludChyZWN0LngoKSArIHJlY3Qud2lkdGgoKSAtIHJhZGl1cy53
aWR0aCgpICogZ0NpcmNsZUNvbnRyb2xQb2ludCwgcmVjdC55KCkpLCBGbG9hdFBvaW50KHJlY3Qu
eCgpICsgcmVjdC53aWR0aCgpLCByZWN0LnkoKSArIHJhZGl1cy5oZWlnaHQoKSAqIGdDaXJjbGVD
b250cm9sUG9pbnQpLCBGbG9hdFBvaW50KHJlY3QueCgpICsgcmVjdC53aWR0aCgpLCByZWN0Lnko
KSArIHJhZGl1cy5oZWlnaHQoKSkpOwogCi0gICAgaWYgKGR5IDwgaGVpZ2h0ICogMC41KQotICAg
ICAgICBwYXRoLmFkZExpbmVUbyhGbG9hdFBvaW50KHggKyB3aWR0aCwgeSArIGhlaWdodCAtIGR5
KSk7CisgICAgaWYgKHJhZGl1cy5oZWlnaHQoKSA8IGhhbGZTaXplLmhlaWdodCgpKQorICAgICAg
ICBhZGRMaW5lVG8oRmxvYXRQb2ludChyZWN0LngoKSArIHJlY3Qud2lkdGgoKSwgcmVjdC55KCkg
KyByZWN0LmhlaWdodCgpIC0gcmFkaXVzLmhlaWdodCgpKSk7CiAKLSAgICBwYXRoLmFkZEJlemll
ckN1cnZlVG8oRmxvYXRQb2ludCh4ICsgd2lkdGgsIHkgKyBoZWlnaHQgLSBkeSAqICgxIC0gUVVB
UlRFUikpLCBGbG9hdFBvaW50KHggKyB3aWR0aCAtIGR4ICogKDEgLSBRVUFSVEVSKSwgeSArIGhl
aWdodCksIEZsb2F0UG9pbnQoeCArIHdpZHRoIC0gZHgsIHkgKyBoZWlnaHQpKTsKKyAgICBhZGRC
ZXppZXJDdXJ2ZVRvKEZsb2F0UG9pbnQocmVjdC54KCkgKyByZWN0LndpZHRoKCksIHJlY3QueSgp
ICsgcmVjdC5oZWlnaHQoKSAtIHJhZGl1cy5oZWlnaHQoKSAqIGdDaXJjbGVDb250cm9sUG9pbnQp
LCBGbG9hdFBvaW50KHJlY3QueCgpICsgcmVjdC53aWR0aCgpIC0gcmFkaXVzLndpZHRoKCkgKiBn
Q2lyY2xlQ29udHJvbFBvaW50LCByZWN0LnkoKSArIHJlY3QuaGVpZ2h0KCkpLCBGbG9hdFBvaW50
KHJlY3QueCgpICsgcmVjdC53aWR0aCgpIC0gcmFkaXVzLndpZHRoKCksIHJlY3QueSgpICsgcmVj
dC5oZWlnaHQoKSkpOwogCi0gICAgaWYgKGR4IDwgd2lkdGggKiAwLjUpCi0gICAgICAgIHBhdGgu
YWRkTGluZVRvKEZsb2F0UG9pbnQoeCArIGR4LCB5ICsgaGVpZ2h0KSk7CisgICAgaWYgKHJhZGl1
cy53aWR0aCgpIDwgaGFsZlNpemUud2lkdGgoKSkKKyAgICAgICAgYWRkTGluZVRvKEZsb2F0UG9p
bnQocmVjdC54KCkgKyByYWRpdXMud2lkdGgoKSwgcmVjdC55KCkgKyByZWN0LmhlaWdodCgpKSk7
CiAKLSAgICBwYXRoLmFkZEJlemllckN1cnZlVG8oRmxvYXRQb2ludCh4ICsgZHggKiAoMSAtIFFV
QVJURVIpLCB5ICsgaGVpZ2h0KSwgRmxvYXRQb2ludCh4LCB5ICsgaGVpZ2h0IC0gZHkgKiAoMSAt
IFFVQVJURVIpKSwgRmxvYXRQb2ludCh4LCB5ICsgaGVpZ2h0IC0gZHkpKTsKKyAgICBhZGRCZXpp
ZXJDdXJ2ZVRvKEZsb2F0UG9pbnQocmVjdC54KCkgKyByYWRpdXMud2lkdGgoKSAqIGdDaXJjbGVD
b250cm9sUG9pbnQsIHJlY3QueSgpICsgcmVjdC5oZWlnaHQoKSksIEZsb2F0UG9pbnQocmVjdC54
KCksIHJlY3QueSgpICsgcmVjdC5oZWlnaHQoKSAtIHJhZGl1cy5oZWlnaHQoKSAqIGdDaXJjbGVD
b250cm9sUG9pbnQpLCBGbG9hdFBvaW50KHJlY3QueCgpLCByZWN0LnkoKSArIHJlY3QuaGVpZ2h0
KCkgLSByYWRpdXMuaGVpZ2h0KCkpKTsKIAotICAgIGlmIChkeSA8IGhlaWdodCAqIDAuNSkKLSAg
ICAgICAgcGF0aC5hZGRMaW5lVG8oRmxvYXRQb2ludCh4LCB5ICsgZHkpKTsKKyAgICBpZiAocmFk
aXVzLmhlaWdodCgpIDwgaGFsZlNpemUuaGVpZ2h0KCkpCisgICAgICAgIGFkZExpbmVUbyhGbG9h
dFBvaW50KHJlY3QueCgpLCByZWN0LnkoKSArIHJhZGl1cy5oZWlnaHQoKSkpOwogCi0gICAgcGF0
aC5hZGRCZXppZXJDdXJ2ZVRvKEZsb2F0UG9pbnQoeCwgeSArIGR5ICogKDEgLSBRVUFSVEVSKSks
IEZsb2F0UG9pbnQoeCArIGR4ICogKDEgLSBRVUFSVEVSKSwgeSksIEZsb2F0UG9pbnQoeCArIGR4
LCB5KSk7CisgICAgYWRkQmV6aWVyQ3VydmVUbyhGbG9hdFBvaW50KHJlY3QueCgpLCByZWN0Lnko
KSArIHJhZGl1cy5oZWlnaHQoKSAqIGdDaXJjbGVDb250cm9sUG9pbnQpLCBGbG9hdFBvaW50KHJl
Y3QueCgpICsgcmFkaXVzLndpZHRoKCkgKiBnQ2lyY2xlQ29udHJvbFBvaW50LCByZWN0LnkoKSks
IEZsb2F0UG9pbnQocmVjdC54KCkgKyByYWRpdXMud2lkdGgoKSwgcmVjdC55KCkpKTsKIAotICAg
IHBhdGguY2xvc2VTdWJwYXRoKCk7Ci0KLSAgICByZXR1cm4gcGF0aDsKKyAgICBjbG9zZVN1YnBh
dGgoKTsKIH0KIAotUGF0aCBQYXRoOjpjcmVhdGVSb3VuZGVkUmVjdGFuZ2xlKGNvbnN0IEZsb2F0
UmVjdCYgcmVjdGFuZ2xlLCBjb25zdCBGbG9hdFNpemUmIHRvcExlZnRSYWRpdXMsIGNvbnN0IEZs
b2F0U2l6ZSYgdG9wUmlnaHRSYWRpdXMsIGNvbnN0IEZsb2F0U2l6ZSYgYm90dG9tTGVmdFJhZGl1
cywgY29uc3QgRmxvYXRTaXplJiBib3R0b21SaWdodFJhZGl1cykKK3ZvaWQgUGF0aDo6YWRkUm91
bmRlZFJlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBjb25zdCBGbG9hdFNpemUmIHRvcExlZnRS
YWRpdXMsIGNvbnN0IEZsb2F0U2l6ZSYgdG9wUmlnaHRSYWRpdXMsIGNvbnN0IEZsb2F0U2l6ZSYg
Ym90dG9tTGVmdFJhZGl1cywgY29uc3QgRmxvYXRTaXplJiBib3R0b21SaWdodFJhZGl1cykKIHsK
LSAgICBQYXRoIHBhdGg7Ci0KLSAgICBmbG9hdCB3aWR0aCA9IHJlY3RhbmdsZS53aWR0aCgpOwot
ICAgIGZsb2F0IGhlaWdodCA9IHJlY3RhbmdsZS5oZWlnaHQoKTsKLSAgICBpZiAod2lkdGggPD0g
MC4wIHx8IGhlaWdodCA8PSAwLjApCi0gICAgICAgIHJldHVybiBwYXRoOworICAgIGlmIChyZWN0
LmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJuOwogCi0gICAgaWYgKHdpZHRoIDwgdG9wTGVmdFJh
ZGl1cy53aWR0aCgpICsgdG9wUmlnaHRSYWRpdXMud2lkdGgoKQotICAgICAgICAgICAgfHwgd2lk
dGggPCBib3R0b21MZWZ0UmFkaXVzLndpZHRoKCkgKyBib3R0b21SaWdodFJhZGl1cy53aWR0aCgp
Ci0gICAgICAgICAgICB8fCBoZWlnaHQgPCB0b3BMZWZ0UmFkaXVzLmhlaWdodCgpICsgYm90dG9t
TGVmdFJhZGl1cy5oZWlnaHQoKQotICAgICAgICAgICAgfHwgaGVpZ2h0IDwgdG9wUmlnaHRSYWRp
dXMuaGVpZ2h0KCkgKyBib3R0b21SaWdodFJhZGl1cy5oZWlnaHQoKSkKKyAgICBpZiAocmVjdC53
aWR0aCgpIDwgdG9wTGVmdFJhZGl1cy53aWR0aCgpICsgdG9wUmlnaHRSYWRpdXMud2lkdGgoKQor
ICAgICAgICAgICAgfHwgcmVjdC53aWR0aCgpIDwgYm90dG9tTGVmdFJhZGl1cy53aWR0aCgpICsg
Ym90dG9tUmlnaHRSYWRpdXMud2lkdGgoKQorICAgICAgICAgICAgfHwgcmVjdC5oZWlnaHQoKSA8
IHRvcExlZnRSYWRpdXMuaGVpZ2h0KCkgKyBib3R0b21MZWZ0UmFkaXVzLmhlaWdodCgpCisgICAg
ICAgICAgICB8fCByZWN0LmhlaWdodCgpIDwgdG9wUmlnaHRSYWRpdXMuaGVpZ2h0KCkgKyBib3R0
b21SaWdodFJhZGl1cy5oZWlnaHQoKSkgewogICAgICAgICAvLyBJZiBhbGwgdGhlIHJhZGlpIGNh
bm5vdCBiZSBhY2NvbW1vZGF0ZWQsIHJldHVybiBhIHJlY3QuCi0gICAgICAgIHJldHVybiBjcmVh
dGVSZWN0YW5nbGUocmVjdGFuZ2xlKTsKLQotICAgIGZsb2F0IHggPSByZWN0YW5nbGUueCgpOwot
ICAgIGZsb2F0IHkgPSByZWN0YW5nbGUueSgpOwotCi0gICAgcGF0aC5tb3ZlVG8oRmxvYXRQb2lu
dCh4ICsgdG9wTGVmdFJhZGl1cy53aWR0aCgpLCB5KSk7Ci0KLSAgICBwYXRoLmFkZExpbmVUbyhG
bG9hdFBvaW50KHggKyB3aWR0aCAtIHRvcFJpZ2h0UmFkaXVzLndpZHRoKCksIHkpKTsKLQotICAg
IHBhdGguYWRkQmV6aWVyQ3VydmVUbyhGbG9hdFBvaW50KHggKyB3aWR0aCAtIHRvcFJpZ2h0UmFk
aXVzLndpZHRoKCkgKiAoMSAtIFFVQVJURVIpLCB5KSwgRmxvYXRQb2ludCh4ICsgd2lkdGgsIHkg
KyB0b3BSaWdodFJhZGl1cy5oZWlnaHQoKSAqICgxIC0gUVVBUlRFUikpLCBGbG9hdFBvaW50KHgg
KyB3aWR0aCwgeSArIHRvcFJpZ2h0UmFkaXVzLmhlaWdodCgpKSk7Ci0KLSAgICBwYXRoLmFkZExp
bmVUbyhGbG9hdFBvaW50KHggKyB3aWR0aCwgeSArIGhlaWdodCAtIGJvdHRvbVJpZ2h0UmFkaXVz
LmhlaWdodCgpKSk7Ci0KLSAgICBwYXRoLmFkZEJlemllckN1cnZlVG8oRmxvYXRQb2ludCh4ICsg
d2lkdGgsIHkgKyBoZWlnaHQgLSBib3R0b21SaWdodFJhZGl1cy5oZWlnaHQoKSAqICgxIC0gUVVB
UlRFUikpLCBGbG9hdFBvaW50KHggKyB3aWR0aCAtIGJvdHRvbVJpZ2h0UmFkaXVzLndpZHRoKCkg
KiAoMSAtIFFVQVJURVIpLCB5ICsgaGVpZ2h0KSwgRmxvYXRQb2ludCh4ICsgd2lkdGggLSBib3R0
b21SaWdodFJhZGl1cy53aWR0aCgpLCB5ICsgaGVpZ2h0KSk7Ci0KLSAgICBwYXRoLmFkZExpbmVU
byhGbG9hdFBvaW50KHggKyBib3R0b21MZWZ0UmFkaXVzLndpZHRoKCksIHkgKyBoZWlnaHQpKTsK
LQotICAgIHBhdGguYWRkQmV6aWVyQ3VydmVUbyhGbG9hdFBvaW50KHggKyBib3R0b21MZWZ0UmFk
aXVzLndpZHRoKCkgKiAoMSAtIFFVQVJURVIpLCB5ICsgaGVpZ2h0KSwgRmxvYXRQb2ludCh4LCB5
ICsgaGVpZ2h0IC0gYm90dG9tTGVmdFJhZGl1cy5oZWlnaHQoKSAqICgxIC0gUVVBUlRFUikpLCBG
bG9hdFBvaW50KHgsIHkgKyBoZWlnaHQgLSBib3R0b21MZWZ0UmFkaXVzLmhlaWdodCgpKSk7Ci0K
LSAgICBwYXRoLmFkZExpbmVUbyhGbG9hdFBvaW50KHgsIHkgKyB0b3BMZWZ0UmFkaXVzLmhlaWdo
dCgpKSk7Ci0KLSAgICBwYXRoLmFkZEJlemllckN1cnZlVG8oRmxvYXRQb2ludCh4LCB5ICsgdG9w
TGVmdFJhZGl1cy5oZWlnaHQoKSAqICgxIC0gUVVBUlRFUikpLCBGbG9hdFBvaW50KHggKyB0b3BM
ZWZ0UmFkaXVzLndpZHRoKCkgKiAoMSAtIFFVQVJURVIpLCB5KSwgRmxvYXRQb2ludCh4ICsgdG9w
TGVmdFJhZGl1cy53aWR0aCgpLCB5KSk7Ci0KLSAgICBwYXRoLmNsb3NlU3VicGF0aCgpOwotCi0g
ICAgcmV0dXJuIHBhdGg7Ci19Ci0KLVBhdGggUGF0aDo6Y3JlYXRlUmVjdGFuZ2xlKGNvbnN0IEZs
b2F0UmVjdCYgcmVjdGFuZ2xlKQotewotICAgIFBhdGggcGF0aDsKLSAgICBmbG9hdCB4ID0gcmVj
dGFuZ2xlLngoKTsKLSAgICBmbG9hdCB5ID0gcmVjdGFuZ2xlLnkoKTsKLSAgICBmbG9hdCB3aWR0
aCA9IHJlY3RhbmdsZS53aWR0aCgpOwotICAgIGZsb2F0IGhlaWdodCA9IHJlY3RhbmdsZS5oZWln
aHQoKTsKLSAgICBpZiAod2lkdGggPD0gMC4wZiB8fCBoZWlnaHQgPD0gMC4wZikKLSAgICAgICAg
cmV0dXJuIHBhdGg7Ci0gICAgCi0gICAgcGF0aC5tb3ZlVG8oRmxvYXRQb2ludCh4LCB5KSk7Ci0g
ICAgcGF0aC5hZGRMaW5lVG8oRmxvYXRQb2ludCh4ICsgd2lkdGgsIHkpKTsKLSAgICBwYXRoLmFk
ZExpbmVUbyhGbG9hdFBvaW50KHggKyB3aWR0aCwgeSArIGhlaWdodCkpOwotICAgIHBhdGguYWRk
TGluZVRvKEZsb2F0UG9pbnQoeCwgeSArIGhlaWdodCkpOwotICAgIHBhdGguY2xvc2VTdWJwYXRo
KCk7Ci0KLSAgICByZXR1cm4gcGF0aDsKLX0KLQotUGF0aCBQYXRoOjpjcmVhdGVFbGxpcHNlKGNv
bnN0IEZsb2F0UG9pbnQmIGNlbnRlciwgZmxvYXQgcngsIGZsb2F0IHJ5KQotewotICAgIGZsb2F0
IGN4ID0gY2VudGVyLngoKTsKLSAgICBmbG9hdCBjeSA9IGNlbnRlci55KCk7Ci0gICAgUGF0aCBw
YXRoOwotICAgIGlmIChyeCA8PSAwLjBmIHx8IHJ5IDw9IDAuMGYpCi0gICAgICAgIHJldHVybiBw
YXRoOwotCi0gICAgZmxvYXQgeCA9IGN4OwotICAgIGZsb2F0IHkgPSBjeTsKLQotICAgIHVuc2ln
bmVkIHN0ZXAgPSAwLCBudW0gPSAxMDA7Ci0gICAgYm9vbCBydW5uaW5nID0gdHJ1ZTsKLSAgICB3
aGlsZSAocnVubmluZykKLSAgICB7Ci0gICAgICAgIGlmIChzdGVwID09IG51bSkKLSAgICAgICAg
ewotICAgICAgICAgICAgcnVubmluZyA9IGZhbHNlOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAg
ICAgIH0KLQotICAgICAgICBmbG9hdCBhbmdsZSA9IHN0YXRpY19jYXN0PGZsb2F0PihzdGVwKSAv
IHN0YXRpY19jYXN0PGZsb2F0PihudW0pICogMi4wZiAqIHBpRmxvYXQ7Ci0gICAgICAgIHggPSBj
eCArIGNvc2YoYW5nbGUpICogcng7Ci0gICAgICAgIHkgPSBjeSArIHNpbmYoYW5nbGUpICogcnk7
Ci0KLSAgICAgICAgc3RlcCsrOwotICAgICAgICBpZiAoc3RlcCA9PSAxKQotICAgICAgICAgICAg
cGF0aC5tb3ZlVG8oRmxvYXRQb2ludCh4LCB5KSk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAg
IHBhdGguYWRkTGluZVRvKEZsb2F0UG9pbnQoeCwgeSkpOworICAgICAgICBhZGRSZWN0KHJlY3Qp
OworICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgcGF0aC5jbG9zZVN1YnBhdGgoKTsKLQot
ICAgIHJldHVybiBwYXRoOwotfQotCi1QYXRoIFBhdGg6OmNyZWF0ZUNpcmNsZShjb25zdCBGbG9h
dFBvaW50JiBjZW50ZXIsIGZsb2F0IHIpCi17Ci0gICAgcmV0dXJuIGNyZWF0ZUVsbGlwc2UoY2Vu
dGVyLCByLCByKTsKLX0KLQotUGF0aCBQYXRoOjpjcmVhdGVMaW5lKGNvbnN0IEZsb2F0UG9pbnQm
IHN0YXJ0LCBjb25zdCBGbG9hdFBvaW50JiBlbmQpCi17Ci0gICAgUGF0aCBwYXRoOwotCi0gICAg
cGF0aC5tb3ZlVG8oc3RhcnQpOwotICAgIHBhdGguYWRkTGluZVRvKGVuZCk7Ci0KLSAgICByZXR1
cm4gcGF0aDsKKyAgICBtb3ZlVG8oRmxvYXRQb2ludChyZWN0LngoKSArIHRvcExlZnRSYWRpdXMu
d2lkdGgoKSwgcmVjdC55KCkpKTsKKworICAgIGFkZExpbmVUbyhGbG9hdFBvaW50KHJlY3QueCgp
ICsgcmVjdC53aWR0aCgpIC0gdG9wUmlnaHRSYWRpdXMud2lkdGgoKSwgcmVjdC55KCkpKTsKKyAg
ICBhZGRCZXppZXJDdXJ2ZVRvKEZsb2F0UG9pbnQocmVjdC54KCkgKyByZWN0LndpZHRoKCkgLSB0
b3BSaWdodFJhZGl1cy53aWR0aCgpICogZ0NpcmNsZUNvbnRyb2xQb2ludCwgcmVjdC55KCkpLAor
ICAgICAgICAgICAgICAgICAgICAgRmxvYXRQb2ludChyZWN0LngoKSArIHJlY3Qud2lkdGgoKSwg
cmVjdC55KCkgKyB0b3BSaWdodFJhZGl1cy5oZWlnaHQoKSAqIGdDaXJjbGVDb250cm9sUG9pbnQp
LAorICAgICAgICAgICAgICAgICAgICAgRmxvYXRQb2ludChyZWN0LngoKSArIHJlY3Qud2lkdGgo
KSwgcmVjdC55KCkgKyB0b3BSaWdodFJhZGl1cy5oZWlnaHQoKSkpOworICAgIGFkZExpbmVUbyhG
bG9hdFBvaW50KHJlY3QueCgpICsgcmVjdC53aWR0aCgpLCByZWN0LnkoKSArIHJlY3QuaGVpZ2h0
KCkgLSBib3R0b21SaWdodFJhZGl1cy5oZWlnaHQoKSkpOworICAgIGFkZEJlemllckN1cnZlVG8o
RmxvYXRQb2ludChyZWN0LngoKSArIHJlY3Qud2lkdGgoKSwgcmVjdC55KCkgKyByZWN0LmhlaWdo
dCgpIC0gYm90dG9tUmlnaHRSYWRpdXMuaGVpZ2h0KCkgKiBnQ2lyY2xlQ29udHJvbFBvaW50KSwK
KyAgICAgICAgICAgICAgICAgICAgIEZsb2F0UG9pbnQocmVjdC54KCkgKyByZWN0LndpZHRoKCkg
LSBib3R0b21SaWdodFJhZGl1cy53aWR0aCgpICogZ0NpcmNsZUNvbnRyb2xQb2ludCwgcmVjdC55
KCkgKyByZWN0LmhlaWdodCgpKSwKKyAgICAgICAgICAgICAgICAgICAgIEZsb2F0UG9pbnQocmVj
dC54KCkgKyByZWN0LndpZHRoKCkgLSBib3R0b21SaWdodFJhZGl1cy53aWR0aCgpLCByZWN0Lnko
KSArIHJlY3QuaGVpZ2h0KCkpKTsKKyAgICBhZGRMaW5lVG8oRmxvYXRQb2ludChyZWN0LngoKSAr
IGJvdHRvbUxlZnRSYWRpdXMud2lkdGgoKSwgcmVjdC55KCkgKyByZWN0LmhlaWdodCgpKSk7Cisg
ICAgYWRkQmV6aWVyQ3VydmVUbyhGbG9hdFBvaW50KHJlY3QueCgpICsgYm90dG9tTGVmdFJhZGl1
cy53aWR0aCgpICogZ0NpcmNsZUNvbnRyb2xQb2ludCwgcmVjdC55KCkgKyByZWN0LmhlaWdodCgp
KSwKKyAgICAgICAgICAgICAgICAgICAgIEZsb2F0UG9pbnQocmVjdC54KCksIHJlY3QueSgpICsg
cmVjdC5oZWlnaHQoKSAtIGJvdHRvbUxlZnRSYWRpdXMuaGVpZ2h0KCkgKiBnQ2lyY2xlQ29udHJv
bFBvaW50KSwKKyAgICAgICAgICAgICAgICAgICAgIEZsb2F0UG9pbnQocmVjdC54KCksIHJlY3Qu
eSgpICsgcmVjdC5oZWlnaHQoKSAtIGJvdHRvbUxlZnRSYWRpdXMuaGVpZ2h0KCkpKTsKKyAgICBh
ZGRMaW5lVG8oRmxvYXRQb2ludChyZWN0LngoKSwgcmVjdC55KCkgKyB0b3BMZWZ0UmFkaXVzLmhl
aWdodCgpKSk7CisgICAgYWRkQmV6aWVyQ3VydmVUbyhGbG9hdFBvaW50KHJlY3QueCgpLCByZWN0
LnkoKSArIHRvcExlZnRSYWRpdXMuaGVpZ2h0KCkgKiBnQ2lyY2xlQ29udHJvbFBvaW50KSwKKyAg
ICAgICAgICAgICAgICAgICAgIEZsb2F0UG9pbnQocmVjdC54KCkgKyB0b3BMZWZ0UmFkaXVzLndp
ZHRoKCkgKiBnQ2lyY2xlQ29udHJvbFBvaW50LCByZWN0LnkoKSksCisgICAgICAgICAgICAgICAg
ICAgICBGbG9hdFBvaW50KHJlY3QueCgpICsgdG9wTGVmdFJhZGl1cy53aWR0aCgpLCByZWN0Lnko
KSkpOworCisgICAgY2xvc2VTdWJwYXRoKCk7CiB9CiAKIH0KZGlmZiAtLWdpdCBhL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvUGF0aC5oIGIvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9QYXRo
LmgKaW5kZXggODI2MGEzOC4uODZiYTgzMSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9QYXRoLmgKKysrIGIvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9QYXRoLmgKQEAg
LTEzNywxOCArMTM3LDEzIEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgdm9pZCBhZGRB
cmMoY29uc3QgRmxvYXRQb2ludCYsIGZsb2F0IHJhZGl1cywgZmxvYXQgc3RhcnRBbmdsZSwgZmxv
YXQgZW5kQW5nbGUsIGJvb2wgYW50aWNsb2Nrd2lzZSk7CiAgICAgICAgIHZvaWQgYWRkUmVjdChj
b25zdCBGbG9hdFJlY3QmKTsKICAgICAgICAgdm9pZCBhZGRFbGxpcHNlKGNvbnN0IEZsb2F0UmVj
dCYpOworICAgICAgICB2b2lkIGFkZFJvdW5kZWRSZWN0KGNvbnN0IEZsb2F0UmVjdCYsIGNvbnN0
IEZsb2F0U2l6ZSYgcm91bmRpbmdSYWRpaSk7CisgICAgICAgIHZvaWQgYWRkUm91bmRlZFJlY3Qo
Y29uc3QgRmxvYXRSZWN0JiwgY29uc3QgRmxvYXRTaXplJiB0b3BMZWZ0UmFkaXVzLCBjb25zdCBG
bG9hdFNpemUmIHRvcFJpZ2h0UmFkaXVzLCBjb25zdCBGbG9hdFNpemUmIGJvdHRvbUxlZnRSYWRp
dXMsIGNvbnN0IEZsb2F0U2l6ZSYgYm90dG9tUmlnaHRSYWRpdXMpOwogCiAgICAgICAgIHZvaWQg
dHJhbnNsYXRlKGNvbnN0IEZsb2F0U2l6ZSYpOwogCiAgICAgICAgIFBsYXRmb3JtUGF0aFB0ciBw
bGF0Zm9ybVBhdGgoKSBjb25zdCB7IHJldHVybiBtX3BhdGg7IH0KIAotICAgICAgICBzdGF0aWMg
UGF0aCBjcmVhdGVSb3VuZGVkUmVjdGFuZ2xlKGNvbnN0IEZsb2F0UmVjdCYsIGNvbnN0IEZsb2F0
U2l6ZSYgcm91bmRpbmdSYWRpaSk7Ci0gICAgICAgIHN0YXRpYyBQYXRoIGNyZWF0ZVJvdW5kZWRS
ZWN0YW5nbGUoY29uc3QgRmxvYXRSZWN0JiwgY29uc3QgRmxvYXRTaXplJiB0b3BMZWZ0UmFkaXVz
LCBjb25zdCBGbG9hdFNpemUmIHRvcFJpZ2h0UmFkaXVzLCBjb25zdCBGbG9hdFNpemUmIGJvdHRv
bUxlZnRSYWRpdXMsIGNvbnN0IEZsb2F0U2l6ZSYgYm90dG9tUmlnaHRSYWRpdXMpOwotICAgICAg
ICBzdGF0aWMgUGF0aCBjcmVhdGVSZWN0YW5nbGUoY29uc3QgRmxvYXRSZWN0Jik7Ci0gICAgICAg
IHN0YXRpYyBQYXRoIGNyZWF0ZUVsbGlwc2UoY29uc3QgRmxvYXRQb2ludCYgY2VudGVyLCBmbG9h
dCByeCwgZmxvYXQgcnkpOwotICAgICAgICBzdGF0aWMgUGF0aCBjcmVhdGVDaXJjbGUoY29uc3Qg
RmxvYXRQb2ludCYgY2VudGVyLCBmbG9hdCByKTsKLSAgICAgICAgc3RhdGljIFBhdGggY3JlYXRl
TGluZShjb25zdCBGbG9hdFBvaW50JiwgY29uc3QgRmxvYXRQb2ludCYpOwotCiAgICAgICAgIHZv
aWQgYXBwbHkodm9pZCogaW5mbywgUGF0aEFwcGxpZXJGdW5jdGlvbikgY29uc3Q7CiAgICAgICAg
IHZvaWQgdHJhbnNmb3JtKGNvbnN0IEFmZmluZVRyYW5zZm9ybSYpOwogCmRpZmYgLS1naXQgYS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0NvbnRleHRTaGFkb3dDYWlyby5jcHAgYi9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0NvbnRleHRTaGFkb3dDYWlyby5jcHAKaW5k
ZXggNmY1YmUyOC4uODI5OWI2YSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jYWlyby9Db250ZXh0U2hhZG93Q2Fpcm8uY3BwCisrKyBiL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY2Fpcm8vQ29udGV4dFNoYWRvd0NhaXJvLmNwcApAQCAtMTM0LDggKzEzNCwxMCBAQCB2
b2lkIENvbnRleHRTaGFkb3c6OmRyYXdSZWN0U2hhZG93V2l0aG91dFRpbGluZyhQbGF0Zm9ybUNv
bnRleHQgY29udGV4dCwgY29uc3QgSQogICAgIGlmICghbV9sYXllckNvbnRleHQpCiAgICAgICAg
IHJldHVybjsKIAotICAgIGFwcGVuZFdlYkNvcmVQYXRoVG9DYWlyb0NvbnRleHQobV9sYXllckNv
bnRleHQsIFBhdGg6OmNyZWF0ZVJvdW5kZWRSZWN0YW5nbGUoc2hhZG93UmVjdCwgdG9wTGVmdFJh
ZGl1cywgdG9wUmlnaHRSYWRpdXMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib3R0b21MZWZ0
UmFkaXVzLCBib3R0b21SaWdodFJhZGl1cykpOworICAgIFBhdGggcGF0aDsKKyAgICBwYXRoLmFk
ZFJvdW5kZWRSZWN0KHNoYWRvd1JlY3QsIHRvcExlZnRSYWRpdXMsIHRvcFJpZ2h0UmFkaXVzLCBi
b3R0b21MZWZ0UmFkaXVzLCBib3R0b21SaWdodFJhZGl1cyk7CisKKyAgICBhcHBlbmRXZWJDb3Jl
UGF0aFRvQ2Fpcm9Db250ZXh0KG1fbGF5ZXJDb250ZXh0LCBwYXRoKTsKICAgICBjYWlyb19zZXRf
c291cmNlX3JnYmEobV9sYXllckNvbnRleHQsIDAsIDAsIDAsIGFscGhhKTsKICAgICBjYWlyb19m
aWxsKG1fbGF5ZXJDb250ZXh0KTsKIApAQCAtMjQwLDggKzI0Miw5IEBAIHZvaWQgQ29udGV4dFNo
YWRvdzo6ZHJhd1JlY3RTaGFkb3coR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0LCBjb25zdCBJbnRS
ZWN0JiByZWN0CiAKICAgICAvLyBEcmF3IHRoZSByZWN0YW5nbGUuCiAgICAgSW50UmVjdCB0ZW1w
bGF0ZVJlY3QgPSBJbnRSZWN0KG1fYmx1ckRpc3RhbmNlLCBtX2JsdXJEaXN0YW5jZSwgc2hhZG93
VGVtcGxhdGVTaXplLndpZHRoKCkgLSByYWRpdXNUd2ljZSwgc2hhZG93VGVtcGxhdGVTaXplLmhl
aWdodCgpIC0gcmFkaXVzVHdpY2UpOwotICAgIGFwcGVuZFdlYkNvcmVQYXRoVG9DYWlyb0NvbnRl
eHQobV9sYXllckNvbnRleHQsIFBhdGg6OmNyZWF0ZVJvdW5kZWRSZWN0YW5nbGUodGVtcGxhdGVS
ZWN0LCB0b3BMZWZ0UmFkaXVzLCB0b3BSaWdodFJhZGl1cywKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGJvdHRvbUxlZnRSYWRpdXMsIGJvdHRvbVJpZ2h0UmFkaXVzKSk7CisgICAgUGF0aCBwYXRo
OworICAgIHBhdGguYWRkUm91bmRlZFJlY3QodGVtcGxhdGVSZWN0LCB0b3BMZWZ0UmFkaXVzLCB0
b3BSaWdodFJhZGl1cywgYm90dG9tTGVmdFJhZGl1cywgYm90dG9tUmlnaHRSYWRpdXMpOworICAg
IGFwcGVuZFdlYkNvcmVQYXRoVG9DYWlyb0NvbnRleHQobV9sYXllckNvbnRleHQsIHBhdGgpOwog
CiAgICAgY2Fpcm9fc2V0X3NvdXJjZV9yZ2JhKG1fbGF5ZXJDb250ZXh0LCAwLCAwLCAwLCBjb250
ZXh0LT5nZXRBbHBoYSgpKTsKICAgICBjYWlyb19maWxsKG1fbGF5ZXJDb250ZXh0KTsKQEAgLTI2
Myw4ICsyNjYsOSBAQCB2b2lkIENvbnRleHRTaGFkb3c6OmRyYXdSZWN0U2hhZG93KEdyYXBoaWNz
Q29udGV4dCogY29udGV4dCwgY29uc3QgSW50UmVjdCYgcmVjdAogICAgIHNoYWRvd1JlY3QuaW5m
bGF0ZSgtcmFkaXVzVHdpY2UpOwogICAgIGlmICghc2hhZG93UmVjdC5pc0VtcHR5KCkpIHsKICAg
ICAgICAgY2Fpcm9fc2F2ZShjcik7Ci0gICAgICAgIGFwcGVuZFdlYkNvcmVQYXRoVG9DYWlyb0Nv
bnRleHQoY3IsIFBhdGg6OmNyZWF0ZVJvdW5kZWRSZWN0YW5nbGUoc2hhZG93UmVjdCwgdG9wTGVm
dFJhZGl1cywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvcFJpZ2h0UmFkaXVzLCBib3R0b21MZWZ0
UmFkaXVzLCBib3R0b21SaWdodFJhZGl1cykpOworICAgICAgICBwYXRoLmNsZWFyKCk7CisgICAg
ICAgIHBhdGguYWRkUm91bmRlZFJlY3Qoc2hhZG93UmVjdCwgdG9wTGVmdFJhZGl1cywgdG9wUmln
aHRSYWRpdXMsIGJvdHRvbUxlZnRSYWRpdXMsIGJvdHRvbVJpZ2h0UmFkaXVzKTsKKyAgICAgICAg
YXBwZW5kV2ViQ29yZVBhdGhUb0NhaXJvQ29udGV4dChjciwgcGF0aCk7CiAgICAgICAgIHNldFNv
dXJjZVJHQkFGcm9tQ29sb3IoY3IsIG1fY29sb3IpOwogICAgICAgICBjYWlyb19maWxsKGNyKTsK
ICAgICAgICAgY2Fpcm9fcmVzdG9yZShjcik7CmRpZmYgLS1naXQgYS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2NhaXJvL0dyYXBoaWNzQ29udGV4dENhaXJvLmNwcCBiL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY2Fpcm8vR3JhcGhpY3NDb250ZXh0Q2Fpcm8uY3BwCmluZGV4IGU5NGRmYmEu
LmE0YjY0NGMgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vR3Jh
cGhpY3NDb250ZXh0Q2Fpcm8uY3BwCisrKyBiL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fp
cm8vR3JhcGhpY3NDb250ZXh0Q2Fpcm8uY3BwCkBAIC03MDMsOCArNzAzLDEzIEBAIHZvaWQgR3Jh
cGhpY3NDb250ZXh0OjpkcmF3Rm9jdXNSaW5nKGNvbnN0IFZlY3RvcjxJbnRSZWN0PiYgcmVjdHMs
IGludCB3aWR0aCwgaW50CiAgICAgc2V0UGxhdGZvcm1TdHJva2VTdHlsZShEb3R0ZWRTdHJva2Up
OwogI2Vsc2UKICAgICBpbnQgcmFkaXVzID0gKHdpZHRoIC0gMSkgLyAyOwotICAgIGZvciAodW5z
aWduZWQgaSA9IDA7IGkgPCByZWN0Q291bnQ7IGkrKykKLSAgICAgICAgYXBwZW5kV2ViQ29yZVBh
dGhUb0NhaXJvQ29udGV4dChjciwgUGF0aDo6Y3JlYXRlUm91bmRlZFJlY3RhbmdsZShyZWN0c1tp
XSwgRmxvYXRTaXplKHJhZGl1cywgcmFkaXVzKSkpOworICAgIFBhdGggcGF0aDsKKyAgICBmb3Ig
KHVuc2lnbmVkIGkgPSAwOyBpIDwgcmVjdENvdW50OyArK2kpIHsKKyAgICAgICAgaWYgKGkgPiAw
KQorICAgICAgICAgICAgcGF0aC5jbGVhcigpOworICAgICAgICBwYXRoLmFkZFJvdW5kZWRSZWN0
KHJlY3RzW2ldLCBGbG9hdFNpemUocmFkaXVzLCByYWRpdXMpKTsKKyAgICAgICAgYXBwZW5kV2Vi
Q29yZVBhdGhUb0NhaXJvQ29udGV4dChjciwgcGF0aCk7CisgICAgfQogCiAgICAgLy8gRm9yY2Ug
dGhlIGFscGhhIHRvIDUwJS4gIFRoaXMgbWF0Y2hlcyB3aGF0IHRoZSBNYWMgZG9lcyB3aXRoIG91
dGxpbmUgcmluZ3MuCiAgICAgQ29sb3IgcmluZ0NvbG9yKGNvbG9yLnJlZCgpLCBjb2xvci5ncmVl
bigpLCBjb2xvci5ibHVlKCksIDEyNyk7CkBAIC0xMjc1LDcgKzEyODAsMTAgQEAgdm9pZCBHcmFw
aGljc0NvbnRleHQ6OmRyYXdUaWxlZFNoYWRvdyhjb25zdCBJbnRSZWN0JiByZWN0LCBjb25zdCBG
bG9hdFNpemUmIHRvcEwKICAgICAvLyBEcmF3IHNoYWRvdyBpbnRvIGEgbmV3IEltYWdlQnVmZmVy
LgogICAgIGNhaXJvX3QqIHNtYWxsQnVmZmVyQ29udGV4dCA9IHNtYWxsQnVmZmVyLT5jb250ZXh0
KCktPnBsYXRmb3JtQ29udGV4dCgpOwogICAgIGNvcHlDb250ZXh0UHJvcGVydGllcyhjciwgc21h
bGxCdWZmZXJDb250ZXh0KTsKLSAgICBhcHBlbmRXZWJDb3JlUGF0aFRvQ2Fpcm9Db250ZXh0KHNt
YWxsQnVmZmVyLT5jb250ZXh0KCktPnBsYXRmb3JtQ29udGV4dCgpLCBQYXRoOjpjcmVhdGVSb3Vu
ZGVkUmVjdGFuZ2xlKHNtYWxsUmVjdCwgdG9wTGVmdFJhZGl1cywgdG9wUmlnaHRSYWRpdXMsIGJv
dHRvbUxlZnRSYWRpdXMsIGJvdHRvbVJpZ2h0UmFkaXVzKSk7CisKKyAgICBQYXRoIHBhdGg7Cisg
ICAgcGF0aC5hZGRSb3VuZGVkUmVjdChzbWFsbFJlY3QsIHRvcExlZnRSYWRpdXMsIHRvcFJpZ2h0
UmFkaXVzLCBib3R0b21MZWZ0UmFkaXVzLCBib3R0b21SaWdodFJhZGl1cyk7CisgICAgYXBwZW5k
V2ViQ29yZVBhdGhUb0NhaXJvQ29udGV4dChzbWFsbEJ1ZmZlci0+Y29udGV4dCgpLT5wbGF0Zm9y
bUNvbnRleHQoKSwgcGF0aCk7CiAgICAgc2V0UGxhdGZvcm1GaWxsKHRoaXMsIHNtYWxsQnVmZmVy
Q29udGV4dCwgbV9jb21tb24pOwogCiAgICAgT3duUHRyPEltYWdlQnVmZmVyPiBzaGFkb3dCdWZm
ZXIgPSBJbWFnZUJ1ZmZlcjo6Y3JlYXRlKHNtYWxsQnVmZmVyU2l6ZSk7CkBAIC0xMjk0LDcgKzEz
MDIsOSBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6ZHJhd1RpbGVkU2hhZG93KGNvbnN0IEludFJl
Y3QmIHJlY3QsIGNvbnN0IEZsb2F0U2l6ZSYgdG9wTAogICAgIHNoYWRvd1JlY3QuaW5mbGF0ZSgt
cmFkaXVzVHdpY2UpOwogICAgIGlmICghc2hhZG93UmVjdC5pc0VtcHR5KCkpIHsKICAgICAgICAg
Y2Fpcm9fc2F2ZShjcik7Ci0gICAgICAgIGFwcGVuZFdlYkNvcmVQYXRoVG9DYWlyb0NvbnRleHQo
Y3IsIFBhdGg6OmNyZWF0ZVJvdW5kZWRSZWN0YW5nbGUoc2hhZG93UmVjdCwgdG9wTGVmdFJhZGl1
cywgdG9wUmlnaHRSYWRpdXMsIGJvdHRvbUxlZnRSYWRpdXMsIGJvdHRvbVJpZ2h0UmFkaXVzKSk7
CisgICAgICAgIHBhdGguY2xlYXIoKTsKKyAgICAgICAgcGF0aC5hZGRSb3VuZGVkUmVjdChzaGFk
b3dSZWN0LCB0b3BMZWZ0UmFkaXVzLCB0b3BSaWdodFJhZGl1cywgYm90dG9tTGVmdFJhZGl1cywg
Ym90dG9tUmlnaHRSYWRpdXMpOworICAgICAgICBhcHBlbmRXZWJDb3JlUGF0aFRvQ2Fpcm9Db250
ZXh0KGNyLCBwYXRoKTsKICAgICAgICAgc2V0Q29sb3IoY3IsIHNoYWRvd0NvbG9yKTsKICAgICAg
ICAgY2Fpcm9fZmlsbChjcik7CiAgICAgICAgIGNhaXJvX3Jlc3RvcmUoY3IpOwpAQCAtMTM3Myw3
ICsxMzgzLDkgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6OmZpbGxSb3VuZGVkUmVjdChjb25zdCBJ
bnRSZWN0JiByLCBjb25zdCBJbnRTaXplJiB0b3BMZWZ0LAogCiAgICAgY2Fpcm9fdCogY3IgPSBt
X2RhdGEtPmNyOwogICAgIGNhaXJvX3NhdmUoY3IpOwotICAgIGFwcGVuZFdlYkNvcmVQYXRoVG9D
YWlyb0NvbnRleHQoY3IsIFBhdGg6OmNyZWF0ZVJvdW5kZWRSZWN0YW5nbGUociwgdG9wTGVmdCwg
dG9wUmlnaHQsIGJvdHRvbUxlZnQsIGJvdHRvbVJpZ2h0KSk7CisgICAgUGF0aCBwYXRoOworICAg
IHBhdGguYWRkUm91bmRlZFJlY3QociwgdG9wTGVmdCwgdG9wUmlnaHQsIGJvdHRvbUxlZnQsIGJv
dHRvbVJpZ2h0KTsKKyAgICBhcHBlbmRXZWJDb3JlUGF0aFRvQ2Fpcm9Db250ZXh0KGNyLCBwYXRo
KTsKICAgICBzZXRDb2xvcihjciwgY29sb3IpOwogICAgIGRyYXdQYXRoU2hhZG93KHRoaXMsIG1f
Y29tbW9uLCB0cnVlLCBmYWxzZSk7CiAgICAgY2Fpcm9fZmlsbChjcik7CmRpZmYgLS1naXQgYS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0dyYXBoaWNzQ29udGV4dENHLmNwcCBiL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvR3JhcGhpY3NDb250ZXh0Q0cuY3BwCmluZGV4IGJkOGU4
NTAuLjA2YzBmMDAgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvR3Jh
cGhpY3NDb250ZXh0Q0cuY3BwCisrKyBiL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvR3Jh
cGhpY3NDb250ZXh0Q0cuY3BwCkBAIC02NjcsNyArNjY3LDkgQEAgdm9pZCBHcmFwaGljc0NvbnRl
eHQ6OmZpbGxSb3VuZGVkUmVjdChjb25zdCBJbnRSZWN0JiByZWN0LCBjb25zdCBJbnRTaXplJiB0
b3BMZWYKICAgICBpZiAob2xkRmlsbENvbG9yICE9IGNvbG9yIHx8IG9sZENvbG9yU3BhY2UgIT0g
Y29sb3JTcGFjZSkKICAgICAgICAgc2V0Q0dGaWxsQ29sb3IoY29udGV4dCwgY29sb3IsIGNvbG9y
U3BhY2UpOwogCi0gICAgYWRkUGF0aChQYXRoOjpjcmVhdGVSb3VuZGVkUmVjdGFuZ2xlKHJlY3Qs
IHRvcExlZnQsIHRvcFJpZ2h0LCBib3R0b21MZWZ0LCBib3R0b21SaWdodCkpOworICAgIFBhdGgg
cGF0aDsKKyAgICBwYXRoLmFkZFJvdW5kZWRSZWN0KHJlY3QsIHRvcExlZnQsIHRvcFJpZ2h0LCBi
b3R0b21MZWZ0LCBib3R0b21SaWdodCk7CisgICAgYWRkUGF0aChwYXRoKTsKICAgICBmaWxsUGF0
aCgpOwogCiAgICAgaWYgKG9sZEZpbGxDb2xvciAhPSBjb2xvciB8fCBvbGRDb2xvclNwYWNlICE9
IGNvbG9yU3BhY2UpCmRpZmYgLS1naXQgYS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3F0L0dy
YXBoaWNzQ29udGV4dFF0LmNwcCBiL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvcXQvR3JhcGhp
Y3NDb250ZXh0UXQuY3BwCmluZGV4IDc3NzU3MjEuLjZkNmMxZmMgMTAwNjQ0Ci0tLSBhL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvcXQvR3JhcGhpY3NDb250ZXh0UXQuY3BwCisrKyBiL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvcXQvR3JhcGhpY3NDb250ZXh0UXQuY3BwCkBAIC03MjksNyAr
NzI5LDggQEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6OmZpbGxSb3VuZGVkUmVjdChjb25zdCBJbnRS
ZWN0JiByZWN0LCBjb25zdCBJbnRTaXplJiB0b3BMZWYKICAgICBpZiAocGFpbnRpbmdEaXNhYmxl
ZCgpIHx8ICFjb2xvci5pc1ZhbGlkKCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIFBhdGggcGF0
aCA9IFBhdGg6OmNyZWF0ZVJvdW5kZWRSZWN0YW5nbGUocmVjdCwgdG9wTGVmdCwgdG9wUmlnaHQs
IGJvdHRvbUxlZnQsIGJvdHRvbVJpZ2h0KTsKKyAgICBQYXRoIHBhdGg7CisgICAgcGF0aC5hZGRS
b3VuZGVkUmVjdChyZWN0LCB0b3BMZWZ0LCB0b3BSaWdodCwgYm90dG9tTGVmdCwgYm90dG9tUmln
aHQpOwogICAgIFFQYWludGVyKiBwID0gbV9kYXRhLT5wKCk7CiAgICAgaWYgKG1fZGF0YS0+aGFz
U2hhZG93KCkpIHsKICAgICAgICAgcC0+dHJhbnNsYXRlKG1fZGF0YS0+c2hhZG93Lm9mZnNldCgp
KTsKZGlmZiAtLWdpdCBhL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJveE1vZGVsT2JqZWN0LmNw
cCBiL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJveE1vZGVsT2JqZWN0LmNwcAppbmRleCAwMmEy
ODQ3Li45YjhjYWI5IDEwMDY0NAotLS0gYS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCb3hNb2Rl
bE9iamVjdC5jcHAKKysrIGIvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQm94TW9kZWxPYmplY3Qu
Y3BwCkBAIC0xMDYxLDcgKzEwNjEsNyBAQCB2b2lkIFJlbmRlckJveE1vZGVsT2JqZWN0OjpwYWlu
dEJvcmRlcihHcmFwaGljc0NvbnRleHQqIGdyYXBoaWNzQ29udGV4dCwgaW50IHR4LAogICAgICAg
ICBncmFwaGljc0NvbnRleHQtPmFkZFJvdW5kZWRSZWN0Q2xpcChib3JkZXJSZWN0LCB0b3BMZWZ0
LCB0b3BSaWdodCwgYm90dG9tTGVmdCwgYm90dG9tUmlnaHQpOwogICAgICAgICBncmFwaGljc0Nv
bnRleHQtPmNsaXBPdXRSb3VuZGVkUmVjdChpbm5lckJvcmRlclJlY3QsIGlubmVyVG9wTGVmdFJh
ZGl1cywgaW5uZXJUb3BSaWdodFJhZGl1cywgaW5uZXJCb3R0b21MZWZ0UmFkaXVzLCBpbm5lckJv
dHRvbVJpZ2h0UmFkaXVzKTsKIAotICAgICAgICByb3VuZGVkUGF0aCA9IFBhdGg6OmNyZWF0ZVJv
dW5kZWRSZWN0YW5nbGUoYm9yZGVyUmVjdCwgdG9wTGVmdCwgdG9wUmlnaHQsIGJvdHRvbUxlZnQs
IGJvdHRvbVJpZ2h0KTsKKyAgICAgICAgcm91bmRlZFBhdGguYWRkUm91bmRlZFJlY3QoYm9yZGVy
UmVjdCwgdG9wTGVmdCwgdG9wUmlnaHQsIGJvdHRvbUxlZnQsIGJvdHRvbVJpZ2h0KTsKICAgICAg
ICAgZ3JhcGhpY3NDb250ZXh0LT5hZGRQYXRoKHJvdW5kZWRQYXRoKTsKICAgICB9CiAKQEAgLTE3
NTIsMjQgKzE3NTIsMjkgQEAgdm9pZCBSZW5kZXJCb3hNb2RlbE9iamVjdDo6cGFpbnRCb3hTaGFk
b3coR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0LCBpbnQgdHgsIGludAogCiAgICAgICAgICAgICBj
b250ZXh0LT5zYXZlKCk7CiAKLSAgICAgICAgICAgIGlmIChoYXNCb3JkZXJSYWRpdXMpCi0gICAg
ICAgICAgICAgICAgY29udGV4dC0+Y2xpcChQYXRoOjpjcmVhdGVSb3VuZGVkUmVjdGFuZ2xlKHJl
Y3QsIHRvcExlZnQsIHRvcFJpZ2h0LCBib3R0b21MZWZ0LCBib3R0b21SaWdodCkpOwotICAgICAg
ICAgICAgZWxzZQorICAgICAgICAgICAgUGF0aCBwYXRoOworICAgICAgICAgICAgaWYgKGhhc0Jv
cmRlclJhZGl1cykgeworICAgICAgICAgICAgICAgIHBhdGguYWRkUm91bmRlZFJlY3QocmVjdCwg
dG9wTGVmdCwgdG9wUmlnaHQsIGJvdHRvbUxlZnQsIGJvdHRvbVJpZ2h0KTsKKyAgICAgICAgICAg
ICAgICBjb250ZXh0LT5jbGlwKHBhdGgpOworICAgICAgICAgICAgICAgIHBhdGguY2xlYXIoKTsK
KyAgICAgICAgICAgIH0gZWxzZQogICAgICAgICAgICAgICAgIGNvbnRleHQtPmNsaXAocmVjdCk7
CiAKICAgICAgICAgICAgIEludFNpemUgZXh0cmFPZmZzZXQoMiAqIHcgKyBtYXgoMCwgc2hhZG93
T2Zmc2V0LndpZHRoKCkpICsgc2hhZG93Qmx1ciAtIDIgKiBzaGFkb3dTcHJlYWQgKyAxLCAwKTsK
ICAgICAgICAgICAgIGNvbnRleHQtPnRyYW5zbGF0ZShleHRyYU9mZnNldC53aWR0aCgpLCBleHRy
YU9mZnNldC5oZWlnaHQoKSk7CiAgICAgICAgICAgICBzaGFkb3dPZmZzZXQgLT0gZXh0cmFPZmZz
ZXQ7CiAKLSAgICAgICAgICAgIGNvbnRleHQtPmJlZ2luUGF0aCgpOwotICAgICAgICAgICAgY29u
dGV4dC0+YWRkUGF0aChQYXRoOjpjcmVhdGVSZWN0YW5nbGUob3V0ZXJSZWN0KSk7CisgICAgICAg
ICAgICBwYXRoLmFkZFJlY3Qob3V0ZXJSZWN0KTsKIAogICAgICAgICAgICAgaWYgKGhhc0JvcmRl
clJhZGl1cykgewogICAgICAgICAgICAgICAgIGlmIChzaGFkb3dTcHJlYWQgPiAwKQogICAgICAg
ICAgICAgICAgICAgICB1bmlmb3JtbHlFeHBhbmRCb3JkZXJSYWRpaSgtc2hhZG93U3ByZWFkLCB0
b3BMZWZ0LCB0b3BSaWdodCwgYm90dG9tTGVmdCwgYm90dG9tUmlnaHQpOwotICAgICAgICAgICAg
ICAgIGNvbnRleHQtPmFkZFBhdGgoUGF0aDo6Y3JlYXRlUm91bmRlZFJlY3RhbmdsZShob2xlUmVj
dCwgdG9wTGVmdCwgdG9wUmlnaHQsIGJvdHRvbUxlZnQsIGJvdHRvbVJpZ2h0KSk7CisgICAgICAg
ICAgICAgICAgcGF0aC5hZGRSb3VuZGVkUmVjdChob2xlUmVjdCwgdG9wTGVmdCwgdG9wUmlnaHQs
IGJvdHRvbUxlZnQsIGJvdHRvbVJpZ2h0KTsKICAgICAgICAgICAgIH0gZWxzZQotICAgICAgICAg
ICAgICAgIGNvbnRleHQtPmFkZFBhdGgoUGF0aDo6Y3JlYXRlUmVjdGFuZ2xlKGhvbGVSZWN0KSk7
CisgICAgICAgICAgICAgICAgcGF0aC5hZGRSZWN0KGhvbGVSZWN0KTsKKworICAgICAgICAgICAg
Y29udGV4dC0+YmVnaW5QYXRoKCk7CisgICAgICAgICAgICBjb250ZXh0LT5hZGRQYXRoKHBhdGgp
OwogCiAgICAgICAgICAgICBjb250ZXh0LT5zZXRGaWxsUnVsZShSVUxFX0VWRU5PREQpOwogICAg
ICAgICAgICAgY29udGV4dC0+c2V0RmlsbENvbG9yKGZpbGxDb2xvciwgcy0+Y29sb3JTcGFjZSgp
KTsKZGlmZiAtLWdpdCBhL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckVtYmVkZGVkT2JqZWN0LmNw
cCBiL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckVtYmVkZGVkT2JqZWN0LmNwcAppbmRleCBhYTMw
MWUyLi4xNjYxM2E1IDEwMDY0NAotLS0gYS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJFbWJlZGRl
ZE9iamVjdC5jcHAKKysrIGIvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyRW1iZWRkZWRPYmplY3Qu
Y3BwCkBAIC0yMDYsNyArMjA2LDcgQEAgYm9vbCBSZW5kZXJFbWJlZGRlZE9iamVjdDo6Z2V0UmVw
bGFjZW1lbnRUZXh0R2VvbWV0cnkoaW50IHR4LCBpbnQgdHksIEZsb2F0UmVjdCYKICAgICBmbG9h
dCB5ID0gKGNvbnRlbnRSZWN0LnNpemUoKS5oZWlnaHQoKSAvIDIgLSByZXBsYWNlbWVudFRleHRS
ZWN0LnNpemUoKS5oZWlnaHQoKSAvIDIpICsgY29udGVudFJlY3QubG9jYXRpb24oKS55KCk7CiAg
ICAgcmVwbGFjZW1lbnRUZXh0UmVjdC5zZXRMb2NhdGlvbihGbG9hdFBvaW50KHgsIHkpKTsKICAg
ICAKLSAgICBwYXRoID0gUGF0aDo6Y3JlYXRlUm91bmRlZFJlY3RhbmdsZShyZXBsYWNlbWVudFRl
eHRSZWN0LCBGbG9hdFNpemUocmVwbGFjZW1lbnRUZXh0Um91bmRlZFJlY3RSYWRpdXMsIHJlcGxh
Y2VtZW50VGV4dFJvdW5kZWRSZWN0UmFkaXVzKSk7CisgICAgcGF0aC5hZGRSb3VuZGVkUmVjdChy
ZXBsYWNlbWVudFRleHRSZWN0LCBGbG9hdFNpemUocmVwbGFjZW1lbnRUZXh0Um91bmRlZFJlY3RS
YWRpdXMsIHJlcGxhY2VtZW50VGV4dFJvdW5kZWRSZWN0UmFkaXVzKSk7CiAKICAgICByZXR1cm4g
dHJ1ZTsKIH0KZGlmZiAtLWdpdCBhL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclNWR1Jlc291cmNl
Q2xpcHBlci5jcHAgYi9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJTVkdSZXNvdXJjZUNsaXBwZXIu
Y3BwCmluZGV4IGEwOWFmYjIuLjI2NTlkNjQgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlclNWR1Jlc291cmNlQ2xpcHBlci5jcHAKKysrIGIvV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVyU1ZHUmVzb3VyY2VDbGlwcGVyLmNwcApAQCAtMTM2LDcgKzEzNiw3IEBAIGJvb2wgUmVuZGVy
U1ZHUmVzb3VyY2VDbGlwcGVyOjpwYXRoT25seUNsaXBwaW5nKEdyYXBoaWNzQ29udGV4dCogY29u
dGV4dCwgY29uc3QKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgLy8gRmFsbGJh
Y2sgdG8gbWFza2luZywgaWYgdGhlcmUgaXMgbW9yZSB0aGFuIG9uZSBjbGlwcGluZyBwYXRoLgog
ICAgICAgICBpZiAoY2xpcFBhdGguaXNFbXB0eSgpKSB7Ci0gICAgICAgICAgICBjbGlwUGF0aCA9
IHN0eWxlZC0+dG9DbGlwUGF0aCgpOworICAgICAgICAgICAgc3R5bGVkLT50b0NsaXBQYXRoKGNs
aXBQYXRoKTsKICAgICAgICAgICAgIGNsaXBSdWxlID0gc3ZnU3R5bGUtPmNsaXBSdWxlKCk7CiAg
ICAgICAgIH0gZWxzZQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwpkaWZmIC0tZ2l0IGEvV2Vi
Q29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1BhdGguY3BwIGIvV2ViQ29yZS9yZW5kZXJpbmcv
c3ZnL1JlbmRlclNWR1BhdGguY3BwCmluZGV4IGFkYTM2MGEuLjQ4MzMwM2YgMTAwNjQ0Ci0tLSBh
L1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdQYXRoLmNwcAorKysgYi9XZWJDb3JlL3Jl
bmRlcmluZy9zdmcvUmVuZGVyU1ZHUGF0aC5jcHAKQEAgLTExMiw3ICsxMTIsOCBAQCB2b2lkIFJl
bmRlclNWR1BhdGg6OmxheW91dCgpCiAKICAgICBib29sIG5lZWRzUGF0aFVwZGF0ZSA9IG1fbmVl
ZHNQYXRoVXBkYXRlOwogICAgIGlmIChuZWVkc1BhdGhVcGRhdGUpIHsKLSAgICAgICAgbV9wYXRo
ID0gZWxlbWVudC0+dG9QYXRoRGF0YSgpOworICAgICAgICBtX3BhdGguY2xlYXIoKTsKKyAgICAg
ICAgZWxlbWVudC0+dG9QYXRoRGF0YShtX3BhdGgpOwogICAgICAgICBtX25lZWRzUGF0aFVwZGF0
ZSA9IGZhbHNlOwogICAgICAgICB1cGRhdGVDYWNoZWRCb3VuZGFyaWVzSW5QYXJlbnRzID0gdHJ1
ZTsKICAgICB9CmRpZmYgLS1naXQgYS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHVGV4
dFBhdGguY3BwIGIvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1RleHRQYXRoLmNwcApp
bmRleCA1ZDk3N2Y5Li42NGViYzZkIDEwMDY0NAotLS0gYS9XZWJDb3JlL3JlbmRlcmluZy9zdmcv
UmVuZGVyU1ZHVGV4dFBhdGguY3BwCisrKyBiL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJT
VkdUZXh0UGF0aC5jcHAKQEAgLTUzLDcgKzUzLDggQEAgUGF0aCBSZW5kZXJTVkdUZXh0UGF0aDo6
bGF5b3V0UGF0aCgpIGNvbnN0CiAgICAgCiAgICAgU1ZHUGF0aEVsZW1lbnQqIHBhdGhFbGVtZW50
ID0gc3RhdGljX2Nhc3Q8U1ZHUGF0aEVsZW1lbnQqPih0YXJnZXRFbGVtZW50KTsKICAgICAKLSAg
ICBQYXRoIHBhdGhEYXRhID0gcGF0aEVsZW1lbnQtPnRvUGF0aERhdGEoKTsKKyAgICBQYXRoIHBh
dGhEYXRhOworICAgIHBhdGhFbGVtZW50LT50b1BhdGhEYXRhKHBhdGhEYXRhKTsKICAgICAvLyBT
cGVjOiAgVGhlIHRyYW5zZm9ybSBhdHRyaWJ1dGUgb24gdGhlIHJlZmVyZW5jZWQgJ3BhdGgnIGVs
ZW1lbnQgcmVwcmVzZW50cyBhCiAgICAgLy8gc3VwcGxlbWVudGFsIHRyYW5zZm9ybWF0aW9uIHJl
bGF0aXZlIHRvIHRoZSBjdXJyZW50IHVzZXIgY29vcmRpbmF0ZSBzeXN0ZW0gZm9yCiAgICAgLy8g
dGhlIGN1cnJlbnQgJ3RleHQnIGVsZW1lbnQsIGluY2x1ZGluZyBhbnkgYWRqdXN0bWVudHMgdG8g
dGhlIGN1cnJlbnQgdXNlciBjb29yZGluYXRlCmRpZmYgLS1naXQgYS9XZWJDb3JlL3JlbmRlcmlu
Zy9zdmcvU1ZHSW5saW5lVGV4dEJveC5jcHAgYi9XZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHSW5s
aW5lVGV4dEJveC5jcHAKaW5kZXggODM1MmVlNS4uNzJmMTVkZCAxMDA2NDQKLS0tIGEvV2ViQ29y
ZS9yZW5kZXJpbmcvc3ZnL1NWR0lubGluZVRleHRCb3guY3BwCisrKyBiL1dlYkNvcmUvcmVuZGVy
aW5nL3N2Zy9TVkdJbmxpbmVUZXh0Qm94LmNwcApAQCAtNDkwLDExICs0OTAsMTggQEAgdm9pZCBT
VkdJbmxpbmVUZXh0Qm94OjpwYWludERlY29yYXRpb25XaXRoU3R5bGUoR3JhcGhpY3NDb250ZXh0
KiBjb250ZXh0LCBFVGV4dEQKIAogICAgIC8vIFRoZSBpbml0aWFsIHkgdmFsdWUgcmVmZXJzIHRv
IG92ZXJsaW5lIHBvc2l0aW9uLgogICAgIGZsb2F0IHRoaWNrbmVzcyA9IHRoaWNrbmVzc0ZvckRl
Y29yYXRpb24oZGVjb3JhdGlvbiwgZm9udCk7CisKKyAgICBpZiAoZnJhZ21lbnQud2lkdGggPD0g
MCAmJiB0aGlja25lc3MgPD0gMCkKKyAgICAgICAgcmV0dXJuOworCiAgICAgZmxvYXQgeSA9IGZy
YWdtZW50LnkgLSBmb250LmFzY2VudCgpICsgcG9zaXRpb25PZmZzZXRGb3JEZWNvcmF0aW9uKGRl
Y29yYXRpb24sIGZvbnQsIHRoaWNrbmVzcyk7CiAKKyAgICBQYXRoIHBhdGg7CisgICAgcGF0aC5h
ZGRSZWN0KEZsb2F0UmVjdChmcmFnbWVudC54LCB5LCBmcmFnbWVudC53aWR0aCwgdGhpY2tuZXNz
KSk7CisKICAgICBjb250ZXh0LT5zYXZlKCk7CiAgICAgY29udGV4dC0+YmVnaW5QYXRoKCk7Ci0g
ICAgY29udGV4dC0+YWRkUGF0aChQYXRoOjpjcmVhdGVSZWN0YW5nbGUoRmxvYXRSZWN0KGZyYWdt
ZW50LngsIHksIGZyYWdtZW50LndpZHRoLCB0aGlja25lc3MpKSk7CisgICAgY29udGV4dC0+YWRk
UGF0aChwYXRoKTsKIAogICAgIGlmIChhY3F1aXJlUGFpbnRpbmdSZXNvdXJjZShjb250ZXh0LCBk
ZWNvcmF0aW9uUmVuZGVyZXIsIGRlY29yYXRpb25TdHlsZSkpCiAgICAgICAgIHJlbGVhc2VQYWlu
dGluZ1Jlc291cmNlKGNvbnRleHQpOwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9zdmcvU1ZHQW5pbWF0
ZU1vdGlvbkVsZW1lbnQuY3BwIGIvV2ViQ29yZS9zdmcvU1ZHQW5pbWF0ZU1vdGlvbkVsZW1lbnQu
Y3BwCmluZGV4IGI1MGE5OTMuLjI2MTUxZWQgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvc3ZnL1NWR0Fu
aW1hdGVNb3Rpb25FbGVtZW50LmNwcAorKysgYi9XZWJDb3JlL3N2Zy9TVkdBbmltYXRlTW90aW9u
RWxlbWVudC5jcHAKQEAgLTExMiw5ICsxMTIsMTAgQEAgUGF0aCBTVkdBbmltYXRlTW90aW9uRWxl
bWVudDo6YW5pbWF0aW9uUGF0aCgpIGNvbnN0CiAgICAgICAgIGlmIChjaGlsZC0+aGFzVGFnTmFt
ZShTVkdOYW1lczo6bXBhdGhUYWcpKSB7CiAgICAgICAgICAgICBTVkdNUGF0aEVsZW1lbnQqIG1Q
YXRoID0gc3RhdGljX2Nhc3Q8U1ZHTVBhdGhFbGVtZW50Kj4oY2hpbGQpOwogICAgICAgICAgICAg
U1ZHUGF0aEVsZW1lbnQqIHBhdGhFbGVtZW50ID0gbVBhdGgtPnBhdGhFbGVtZW50KCk7CisgICAg
ICAgICAgICBQYXRoIHBhdGg7CiAgICAgICAgICAgICBpZiAocGF0aEVsZW1lbnQpCi0gICAgICAg
ICAgICAgICAgcmV0dXJuIHBhdGhFbGVtZW50LT50b1BhdGhEYXRhKCk7Ci0gICAgICAgICAgICBy
ZXR1cm4gUGF0aCgpOworICAgICAgICAgICAgICAgIHBhdGhFbGVtZW50LT50b1BhdGhEYXRhKHBh
dGgpOworICAgICAgICAgICAgcmV0dXJuIHBhdGg7CiAgICAgICAgIH0KICAgICB9CiAgICAgaWYg
KGhhc0F0dHJpYnV0ZShTVkdOYW1lczo6cGF0aEF0dHIpKQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9z
dmcvU1ZHQ2lyY2xlRWxlbWVudC5jcHAgYi9XZWJDb3JlL3N2Zy9TVkdDaXJjbGVFbGVtZW50LmNw
cAppbmRleCA0ZWQ0ZWZlLi5lYjM4Yjg3IDEwMDY0NAotLS0gYS9XZWJDb3JlL3N2Zy9TVkdDaXJj
bGVFbGVtZW50LmNwcAorKysgYi9XZWJDb3JlL3N2Zy9TVkdDaXJjbGVFbGVtZW50LmNwcApAQCAt
MTIxLDkgKzEyMSwxNiBAQCB2b2lkIFNWR0NpcmNsZUVsZW1lbnQ6OnN5bmNocm9uaXplUHJvcGVy
dHkoY29uc3QgUXVhbGlmaWVkTmFtZSYgYXR0ck5hbWUpCiAgICAgICAgIHN5bmNocm9uaXplRXh0
ZXJuYWxSZXNvdXJjZXNSZXF1aXJlZCgpOwogfQogCi1QYXRoIFNWR0NpcmNsZUVsZW1lbnQ6OnRv
UGF0aERhdGEoKSBjb25zdAordm9pZCBTVkdDaXJjbGVFbGVtZW50Ojp0b1BhdGhEYXRhKFBhdGgm
IHBhdGgpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIFBhdGg6OmNyZWF0ZUNpcmNsZShGbG9hdFBvaW50
KGN4KCkudmFsdWUodGhpcyksIGN5KCkudmFsdWUodGhpcykpLCByKCkudmFsdWUodGhpcykpOwor
ICAgIEFTU0VSVChwYXRoLmlzRW1wdHkoKSk7CisKKyAgICBmbG9hdCByYWRpdXMgPSByKCkudmFs
dWUodGhpcyk7CisKKyAgICBpZiAocmFkaXVzIDw9IDApCisgICAgICAgIHJldHVybjsKKworICAg
IHBhdGguYWRkRWxsaXBzZShGbG9hdFJlY3QoY3goKS52YWx1ZSh0aGlzKSAtIHJhZGl1cywgY3ko
KS52YWx1ZSh0aGlzKSAtIHJhZGl1cywgcmFkaXVzICogMiwgcmFkaXVzICogMikpOwogfQogCiBi
b29sIFNWR0NpcmNsZUVsZW1lbnQ6OnNlbGZIYXNSZWxhdGl2ZUxlbmd0aHMoKSBjb25zdApkaWZm
IC0tZ2l0IGEvV2ViQ29yZS9zdmcvU1ZHQ2lyY2xlRWxlbWVudC5oIGIvV2ViQ29yZS9zdmcvU1ZH
Q2lyY2xlRWxlbWVudC5oCmluZGV4IGRkMTE3OTIuLjRlYjkyNjIgMTAwNjQ0Ci0tLSBhL1dlYkNv
cmUvc3ZnL1NWR0NpcmNsZUVsZW1lbnQuaAorKysgYi9XZWJDb3JlL3N2Zy9TVkdDaXJjbGVFbGVt
ZW50LmgKQEAgLTQ1LDcgKzQ1LDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICB2aXJ0
dWFsIHZvaWQgc3ZnQXR0cmlidXRlQ2hhbmdlZChjb25zdCBRdWFsaWZpZWROYW1lJik7CiAgICAg
ICAgIHZpcnR1YWwgdm9pZCBzeW5jaHJvbml6ZVByb3BlcnR5KGNvbnN0IFF1YWxpZmllZE5hbWUm
KTsKIAotICAgICAgICB2aXJ0dWFsIFBhdGggdG9QYXRoRGF0YSgpIGNvbnN0OworICAgICAgICB2
aXJ0dWFsIHZvaWQgdG9QYXRoRGF0YShQYXRoJikgY29uc3Q7CiAKICAgICAgICAgdmlydHVhbCBi
b29sIHNlbGZIYXNSZWxhdGl2ZUxlbmd0aHMoKSBjb25zdDsKIApkaWZmIC0tZ2l0IGEvV2ViQ29y
ZS9zdmcvU1ZHRWxsaXBzZUVsZW1lbnQuY3BwIGIvV2ViQ29yZS9zdmcvU1ZHRWxsaXBzZUVsZW1l
bnQuY3BwCmluZGV4IDE2NzQzZWQuLjc2MTVhMjQgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvc3ZnL1NW
R0VsbGlwc2VFbGVtZW50LmNwcAorKysgYi9XZWJDb3JlL3N2Zy9TVkdFbGxpcHNlRWxlbWVudC5j
cHAKQEAgLTEzMCwxMCArMTMwLDE5IEBAIHZvaWQgU1ZHRWxsaXBzZUVsZW1lbnQ6OnN5bmNocm9u
aXplUHJvcGVydHkoY29uc3QgUXVhbGlmaWVkTmFtZSYgYXR0ck5hbWUpCiAgICAgICAgIHN5bmNo
cm9uaXplRXh0ZXJuYWxSZXNvdXJjZXNSZXF1aXJlZCgpOwogfQogCi1QYXRoIFNWR0VsbGlwc2VF
bGVtZW50Ojp0b1BhdGhEYXRhKCkgY29uc3QKK3ZvaWQgU1ZHRWxsaXBzZUVsZW1lbnQ6OnRvUGF0
aERhdGEoUGF0aCYgcGF0aCkgY29uc3QKIHsKLSAgICByZXR1cm4gUGF0aDo6Y3JlYXRlRWxsaXBz
ZShGbG9hdFBvaW50KGN4KCkudmFsdWUodGhpcyksIGN5KCkudmFsdWUodGhpcykpLAotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcngoKS52YWx1ZSh0aGlzKSwgcnko
KS52YWx1ZSh0aGlzKSk7CisgICAgQVNTRVJUKHBhdGguaXNFbXB0eSgpKTsKKworICAgIGZsb2F0
IHJhZGl1c1ggPSByeCgpLnZhbHVlKHRoaXMpOworICAgIGlmIChyYWRpdXNYIDw9IDApCisgICAg
ICAgIHJldHVybjsKKworICAgIGZsb2F0IHJhZGl1c1kgPSByeSgpLnZhbHVlKHRoaXMpOworICAg
IGlmIChyYWRpdXNZIDw9IDApCisgICAgICAgIHJldHVybjsKKworICAgIHBhdGguYWRkRWxsaXBz
ZShGbG9hdFJlY3QoY3goKS52YWx1ZSh0aGlzKSAtIHJhZGl1c1gsIGN5KCkudmFsdWUodGhpcykg
LSByYWRpdXNZLCByYWRpdXNYICogMiwgcmFkaXVzWSAqIDIpKTsKIH0KICAKIGJvb2wgU1ZHRWxs
aXBzZUVsZW1lbnQ6OnNlbGZIYXNSZWxhdGl2ZUxlbmd0aHMoKSBjb25zdApkaWZmIC0tZ2l0IGEv
V2ViQ29yZS9zdmcvU1ZHRWxsaXBzZUVsZW1lbnQuaCBiL1dlYkNvcmUvc3ZnL1NWR0VsbGlwc2VF
bGVtZW50LmgKaW5kZXggYmVlODE1Yy4uY2FkMzI5ZSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9zdmcv
U1ZHRWxsaXBzZUVsZW1lbnQuaAorKysgYi9XZWJDb3JlL3N2Zy9TVkdFbGxpcHNlRWxlbWVudC5o
CkBAIC00NSw3ICs0NSw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgdmlydHVhbCB2
b2lkIHN2Z0F0dHJpYnV0ZUNoYW5nZWQoY29uc3QgUXVhbGlmaWVkTmFtZSYpOwogICAgICAgICB2
aXJ0dWFsIHZvaWQgc3luY2hyb25pemVQcm9wZXJ0eShjb25zdCBRdWFsaWZpZWROYW1lJik7CiAK
LSAgICAgICAgdmlydHVhbCBQYXRoIHRvUGF0aERhdGEoKSBjb25zdDsKKyAgICAgICAgdmlydHVh
bCB2b2lkIHRvUGF0aERhdGEoUGF0aCYpIGNvbnN0OwogCiAgICAgICAgIHZpcnR1YWwgYm9vbCBz
ZWxmSGFzUmVsYXRpdmVMZW5ndGhzKCkgY29uc3Q7CiAKZGlmZiAtLWdpdCBhL1dlYkNvcmUvc3Zn
L1NWR0xpbmVFbGVtZW50LmNwcCBiL1dlYkNvcmUvc3ZnL1NWR0xpbmVFbGVtZW50LmNwcAppbmRl
eCAyMjlkZmE5Li40ZWU1ZjBkIDEwMDY0NAotLS0gYS9XZWJDb3JlL3N2Zy9TVkdMaW5lRWxlbWVu
dC5jcHAKKysrIGIvV2ViQ29yZS9zdmcvU1ZHTGluZUVsZW1lbnQuY3BwCkBAIC0xMjYsMTAgKzEy
NiwxMiBAQCB2b2lkIFNWR0xpbmVFbGVtZW50OjpzeW5jaHJvbml6ZVByb3BlcnR5KGNvbnN0IFF1
YWxpZmllZE5hbWUmIGF0dHJOYW1lKQogICAgICAgICBzeW5jaHJvbml6ZUV4dGVybmFsUmVzb3Vy
Y2VzUmVxdWlyZWQoKTsKIH0KIAotUGF0aCBTVkdMaW5lRWxlbWVudDo6dG9QYXRoRGF0YSgpIGNv
bnN0Cit2b2lkIFNWR0xpbmVFbGVtZW50Ojp0b1BhdGhEYXRhKFBhdGgmIHBhdGgpIGNvbnN0CiB7
Ci0gICAgcmV0dXJuIFBhdGg6OmNyZWF0ZUxpbmUoRmxvYXRQb2ludCh4MSgpLnZhbHVlKHRoaXMp
LCB5MSgpLnZhbHVlKHRoaXMpKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBGbG9hdFBv
aW50KHgyKCkudmFsdWUodGhpcyksIHkyKCkudmFsdWUodGhpcykpKTsKKyAgICBBU1NFUlQocGF0
aC5pc0VtcHR5KCkpOworCisgICAgcGF0aC5tb3ZlVG8oRmxvYXRQb2ludCh4MSgpLnZhbHVlKHRo
aXMpLCB5MSgpLnZhbHVlKHRoaXMpKSk7CisgICAgcGF0aC5hZGRMaW5lVG8oRmxvYXRQb2ludCh4
MigpLnZhbHVlKHRoaXMpLCB5MigpLnZhbHVlKHRoaXMpKSk7CiB9CiAKIGJvb2wgU1ZHTGluZUVs
ZW1lbnQ6OnNlbGZIYXNSZWxhdGl2ZUxlbmd0aHMoKSBjb25zdApkaWZmIC0tZ2l0IGEvV2ViQ29y
ZS9zdmcvU1ZHTGluZUVsZW1lbnQuaCBiL1dlYkNvcmUvc3ZnL1NWR0xpbmVFbGVtZW50LmgKaW5k
ZXggMjEwMDdmMC4uNTVhMjY4YyAxMDA2NDQKLS0tIGEvV2ViQ29yZS9zdmcvU1ZHTGluZUVsZW1l
bnQuaAorKysgYi9XZWJDb3JlL3N2Zy9TVkdMaW5lRWxlbWVudC5oCkBAIC00Nyw3ICs0Nyw3IEBA
IG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgdmlydHVhbCB2b2lkIHN2Z0F0dHJpYnV0ZUNo
YW5nZWQoY29uc3QgUXVhbGlmaWVkTmFtZSYpOwogICAgICAgICB2aXJ0dWFsIHZvaWQgc3luY2hy
b25pemVQcm9wZXJ0eShjb25zdCBRdWFsaWZpZWROYW1lJik7CiAKLSAgICAgICAgdmlydHVhbCBQ
YXRoIHRvUGF0aERhdGEoKSBjb25zdDsKKyAgICAgICAgdmlydHVhbCB2b2lkIHRvUGF0aERhdGEo
UGF0aCYpIGNvbnN0OwogCiAgICAgICAgIHZpcnR1YWwgYm9vbCBzdXBwb3J0c01hcmtlcnMoKSBj
b25zdCB7IHJldHVybiB0cnVlOyB9CiAKZGlmZiAtLWdpdCBhL1dlYkNvcmUvc3ZnL1NWR1BhdGhF
bGVtZW50LmNwcCBiL1dlYkNvcmUvc3ZnL1NWR1BhdGhFbGVtZW50LmNwcAppbmRleCBkMWZjMTFi
Li45MjBlOTQ3IDEwMDY0NAotLS0gYS9XZWJDb3JlL3N2Zy9TVkdQYXRoRWxlbWVudC5jcHAKKysr
IGIvV2ViQ29yZS9zdmcvU1ZHUGF0aEVsZW1lbnQuY3BwCkBAIC01NywxNCArNTcsMTggQEAgUGFz
c1JlZlB0cjxTVkdQYXRoRWxlbWVudD4gU1ZHUGF0aEVsZW1lbnQ6OmNyZWF0ZShjb25zdCBRdWFs
aWZpZWROYW1lJiB0YWdOYW1lLAogZmxvYXQgU1ZHUGF0aEVsZW1lbnQ6OmdldFRvdGFsTGVuZ3Ro
KCkKIHsKICAgICAvLyBGSVhNRTogdGhpcyBtYXkgd2lzaCB0byB1c2UgdGhlIHBhdGhTZWdMaXN0
IGluc3RlYWQgb2YgdGhlIHBhdGhkYXRhIGlmIHRoYXQncyBjaGVhcGVyIHRvIGJ1aWxkIChvciBj
YWNoZWQpCi0gICAgcmV0dXJuIHRvUGF0aERhdGEoKS5sZW5ndGgoKTsKKyAgICBQYXRoIHBhdGg7
CisgICAgdG9QYXRoRGF0YShwYXRoKTsKKyAgICByZXR1cm4gcGF0aC5sZW5ndGgoKTsKIH0KIAog
RmxvYXRQb2ludCBTVkdQYXRoRWxlbWVudDo6Z2V0UG9pbnRBdExlbmd0aChmbG9hdCBsZW5ndGgp
CiB7CiAgICAgLy8gRklYTUU6IHRoaXMgbWF5IHdpc2ggdG8gdXNlIHRoZSBwYXRoU2VnTGlzdCBp
bnN0ZWFkIG9mIHRoZSBwYXRoZGF0YSBpZiB0aGF0J3MgY2hlYXBlciB0byBidWlsZCAob3IgY2Fj
aGVkKQogICAgIGJvb2wgb2sgPSBmYWxzZTsKLSAgICByZXR1cm4gdG9QYXRoRGF0YSgpLnBvaW50
QXRMZW5ndGgobGVuZ3RoLCBvayk7CisgICAgUGF0aCBwYXRoOworICAgIHRvUGF0aERhdGEocGF0
aCk7CisgICAgcmV0dXJuIHBhdGgucG9pbnRBdExlbmd0aChsZW5ndGgsIG9rKTsKIH0KIAogdW5z
aWduZWQgbG9uZyBTVkdQYXRoRWxlbWVudDo6Z2V0UGF0aFNlZ0F0TGVuZ3RoKGZsb2F0IGxlbmd0
aCkKQEAgLTI2MiwxMiArMjY2LDEyIEBAIFNWR1BhdGhTZWdMaXN0KiBTVkdQYXRoRWxlbWVudDo6
YW5pbWF0ZWROb3JtYWxpemVkUGF0aFNlZ0xpc3QoKSBjb25zdAogICAgIHJldHVybiAwOwogfQog
Ci1QYXRoIFNWR1BhdGhFbGVtZW50Ojp0b1BhdGhEYXRhKCkgY29uc3QKK3ZvaWQgU1ZHUGF0aEVs
ZW1lbnQ6OnRvUGF0aERhdGEoUGF0aCYgcGF0aCkgY29uc3QKIHsKLSAgICBQYXRoIHJlc3VsdDsK
KyAgICBBU1NFUlQocGF0aC5pc0VtcHR5KCkpOworCiAgICAgU1ZHUGF0aFBhcnNlckZhY3Rvcnkq
IGZhY3RvcnkgPSBTVkdQYXRoUGFyc2VyRmFjdG9yeTo6c2VsZigpOwotICAgIGZhY3RvcnktPmJ1
aWxkUGF0aEZyb21TVkdQYXRoU2VnTGlzdChwYXRoU2VnTGlzdCgpLCByZXN1bHQpOwotICAgIHJl
dHVybiByZXN1bHQ7CisgICAgZmFjdG9yeS0+YnVpbGRQYXRoRnJvbVNWR1BhdGhTZWdMaXN0KHBh
dGhTZWdMaXN0KCksIHBhdGgpOwogfQogCiB9CmRpZmYgLS1naXQgYS9XZWJDb3JlL3N2Zy9TVkdQ
YXRoRWxlbWVudC5oIGIvV2ViQ29yZS9zdmcvU1ZHUGF0aEVsZW1lbnQuaAppbmRleCBjYzRlN2Jk
Li4zOTQ5ODNkIDEwMDY0NAotLS0gYS9XZWJDb3JlL3N2Zy9TVkdQYXRoRWxlbWVudC5oCisrKyBi
L1dlYkNvcmUvc3ZnL1NWR1BhdGhFbGVtZW50LmgKQEAgLTg5LDcgKzg5LDcgQEAgbmFtZXNwYWNl
IFdlYkNvcmUgewogICAgICAgICB2aXJ0dWFsIFNWR1BhdGhTZWdMaXN0KiBhbmltYXRlZFBhdGhT
ZWdMaXN0KCkgY29uc3Q7CiAgICAgICAgIHZpcnR1YWwgU1ZHUGF0aFNlZ0xpc3QqIGFuaW1hdGVk
Tm9ybWFsaXplZFBhdGhTZWdMaXN0KCkgY29uc3Q7CiAKLSAgICAgICAgdmlydHVhbCBQYXRoIHRv
UGF0aERhdGEoKSBjb25zdDsKKyAgICAgICAgdmlydHVhbCB2b2lkIHRvUGF0aERhdGEoUGF0aCYp
IGNvbnN0OwogCiAgICAgcHJpdmF0ZToKICAgICAgICAgU1ZHUGF0aEVsZW1lbnQoY29uc3QgUXVh
bGlmaWVkTmFtZSYsIERvY3VtZW50Kik7CmRpZmYgLS1naXQgYS9XZWJDb3JlL3N2Zy9TVkdQb2x5
Z29uRWxlbWVudC5jcHAgYi9XZWJDb3JlL3N2Zy9TVkdQb2x5Z29uRWxlbWVudC5jcHAKaW5kZXgg
NTdlMmQ1My4uMzhmNWJjZSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9zdmcvU1ZHUG9seWdvbkVsZW1l
bnQuY3BwCisrKyBiL1dlYkNvcmUvc3ZnL1NWR1BvbHlnb25FbGVtZW50LmNwcApAQCAtMzcsMjIg
KzM3LDIxIEBAIFBhc3NSZWZQdHI8U1ZHUG9seWdvbkVsZW1lbnQ+IFNWR1BvbHlnb25FbGVtZW50
OjpjcmVhdGUoY29uc3QgUXVhbGlmaWVkTmFtZSYgdGFnCiAgICAgcmV0dXJuIGFkb3B0UmVmKG5l
dyBTVkdQb2x5Z29uRWxlbWVudCh0YWdOYW1lLCBkb2N1bWVudCkpOwogfQogCi1QYXRoIFNWR1Bv
bHlnb25FbGVtZW50Ojp0b1BhdGhEYXRhKCkgY29uc3QKK3ZvaWQgU1ZHUG9seWdvbkVsZW1lbnQ6
OnRvUGF0aERhdGEoUGF0aCYgcGF0aCkgY29uc3QKIHsKLSAgICBQYXRoIHBvbHlEYXRhOworICAg
IEFTU0VSVChwYXRoLmlzRW1wdHkoKSk7CiAKICAgICBpbnQgbGVuID0gcG9pbnRzKCktPm51bWJl
ck9mSXRlbXMoKTsKICAgICBpZiAobGVuIDwgMSkKLSAgICAgICAgcmV0dXJuIHBvbHlEYXRhOwor
ICAgICAgICByZXR1cm47CiAgICAgCiAgICAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7Ci0gICAgcG9s
eURhdGEubW92ZVRvKHBvaW50cygpLT5nZXRJdGVtKDAsIGVjKSk7CisgICAgcGF0aC5tb3ZlVG8o
cG9pbnRzKCktPmdldEl0ZW0oMCwgZWMpKTsKIAogICAgIGZvciAoaW50IGkgPSAxOyBpIDwgbGVu
OyArK2kpCi0gICAgICAgIHBvbHlEYXRhLmFkZExpbmVUbyhwb2ludHMoKS0+Z2V0SXRlbShpLCBl
YykpOworICAgICAgICBwYXRoLmFkZExpbmVUbyhwb2ludHMoKS0+Z2V0SXRlbShpLCBlYykpOwog
Ci0gICAgcG9seURhdGEuY2xvc2VTdWJwYXRoKCk7Ci0gICAgcmV0dXJuIHBvbHlEYXRhOworICAg
IHBhdGguY2xvc2VTdWJwYXRoKCk7CiB9CiAKIH0KZGlmZiAtLWdpdCBhL1dlYkNvcmUvc3ZnL1NW
R1BvbHlnb25FbGVtZW50LmggYi9XZWJDb3JlL3N2Zy9TVkdQb2x5Z29uRWxlbWVudC5oCmluZGV4
IDdhNWJkYTguLjVjODhkMTEgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvc3ZnL1NWR1BvbHlnb25FbGVt
ZW50LmgKKysrIGIvV2ViQ29yZS9zdmcvU1ZHUG9seWdvbkVsZW1lbnQuaApAQCAtMzMsNyArMzMs
NyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgcHJpdmF0ZToKICAgICAgICAgU1ZHUG9seWdv
bkVsZW1lbnQoY29uc3QgUXVhbGlmaWVkTmFtZSYsIERvY3VtZW50Kik7CiAKLSAgICAgICAgdmly
dHVhbCBQYXRoIHRvUGF0aERhdGEoKSBjb25zdDsKKyAgICAgICAgdmlydHVhbCB2b2lkIHRvUGF0
aERhdGEoUGF0aCYpIGNvbnN0OwogICAgIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlm
ZiAtLWdpdCBhL1dlYkNvcmUvc3ZnL1NWR1BvbHlsaW5lRWxlbWVudC5jcHAgYi9XZWJDb3JlL3N2
Zy9TVkdQb2x5bGluZUVsZW1lbnQuY3BwCmluZGV4IDdlYzg0MzEuLmM5NzUwYjIgMTAwNjQ0Ci0t
LSBhL1dlYkNvcmUvc3ZnL1NWR1BvbHlsaW5lRWxlbWVudC5jcHAKKysrIGIvV2ViQ29yZS9zdmcv
U1ZHUG9seWxpbmVFbGVtZW50LmNwcApAQCAtMzcsMjEgKzM3LDE5IEBAIFBhc3NSZWZQdHI8U1ZH
UG9seWxpbmVFbGVtZW50PiBTVkdQb2x5bGluZUVsZW1lbnQ6OmNyZWF0ZShjb25zdCBRdWFsaWZp
ZWROYW1lJiB0CiAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBTVkdQb2x5bGluZUVsZW1lbnQodGFn
TmFtZSwgZG9jdW1lbnQpKTsKIH0KIAotUGF0aCBTVkdQb2x5bGluZUVsZW1lbnQ6OnRvUGF0aERh
dGEoKSBjb25zdAordm9pZCBTVkdQb2x5bGluZUVsZW1lbnQ6OnRvUGF0aERhdGEoUGF0aCYgcGF0
aCkgY29uc3QKIHsKLSAgICBQYXRoIHBvbHlEYXRhOworICAgIEFTU0VSVChwYXRoLmlzRW1wdHko
KSk7CiAKICAgICBpbnQgbGVuID0gcG9pbnRzKCktPm51bWJlck9mSXRlbXMoKTsKICAgICBpZiAo
bGVuIDwgMSkKLSAgICAgICAgcmV0dXJuIHBvbHlEYXRhOworICAgICAgICByZXR1cm47CiAKICAg
ICBFeGNlcHRpb25Db2RlIGVjID0gMDsKLSAgICBwb2x5RGF0YS5tb3ZlVG8ocG9pbnRzKCktPmdl
dEl0ZW0oMCwgZWMpKTsKKyAgICBwYXRoLm1vdmVUbyhwb2ludHMoKS0+Z2V0SXRlbSgwLCBlYykp
OwogCiAgICAgZm9yIChpbnQgaSA9IDE7IGkgPCBsZW47ICsraSkKLSAgICAgICAgcG9seURhdGEu
YWRkTGluZVRvKHBvaW50cygpLT5nZXRJdGVtKGksIGVjKSk7Ci0gICAgCi0gICAgcmV0dXJuIHBv
bHlEYXRhOworICAgICAgICBwYXRoLmFkZExpbmVUbyhwb2ludHMoKS0+Z2V0SXRlbShpLCBlYykp
OwogfQogCiB9CmRpZmYgLS1naXQgYS9XZWJDb3JlL3N2Zy9TVkdQb2x5bGluZUVsZW1lbnQuaCBi
L1dlYkNvcmUvc3ZnL1NWR1BvbHlsaW5lRWxlbWVudC5oCmluZGV4IGQzZmU1NTUuLmRmY2ZjZGEg
MTAwNjQ0Ci0tLSBhL1dlYkNvcmUvc3ZnL1NWR1BvbHlsaW5lRWxlbWVudC5oCisrKyBiL1dlYkNv
cmUvc3ZnL1NWR1BvbHlsaW5lRWxlbWVudC5oCkBAIC0zMyw3ICszMyw3IEBAIG5hbWVzcGFjZSBX
ZWJDb3JlIHsKICAgICBwcml2YXRlOgogICAgICAgICBTVkdQb2x5bGluZUVsZW1lbnQoY29uc3Qg
UXVhbGlmaWVkTmFtZSYsIERvY3VtZW50Kik7CiAKLSAgICAgICAgdmlydHVhbCBQYXRoIHRvUGF0
aERhdGEoKSBjb25zdDsKKyAgICAgICAgdmlydHVhbCB2b2lkIHRvUGF0aERhdGEoUGF0aCYpIGNv
bnN0OwogICAgIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1dlYkNv
cmUvc3ZnL1NWR1JlY3RFbGVtZW50LmNwcCBiL1dlYkNvcmUvc3ZnL1NWR1JlY3RFbGVtZW50LmNw
cAppbmRleCA5YjY4MzBlLi40NmVkOGRlIDEwMDY0NAotLS0gYS9XZWJDb3JlL3N2Zy9TVkdSZWN0
RWxlbWVudC5jcHAKKysrIGIvV2ViQ29yZS9zdmcvU1ZHUmVjdEVsZW1lbnQuY3BwCkBAIC0xNDcs
MTkgKzE0NywzNyBAQCB2b2lkIFNWR1JlY3RFbGVtZW50OjpzeW5jaHJvbml6ZVByb3BlcnR5KGNv
bnN0IFF1YWxpZmllZE5hbWUmIGF0dHJOYW1lKQogICAgICAgICBzeW5jaHJvbml6ZUV4dGVybmFs
UmVzb3VyY2VzUmVxdWlyZWQoKTsKIH0KIAotUGF0aCBTVkdSZWN0RWxlbWVudDo6dG9QYXRoRGF0
YSgpIGNvbnN0Cit2b2lkIFNWR1JlY3RFbGVtZW50Ojp0b1BhdGhEYXRhKFBhdGgmIHBhdGgpIGNv
bnN0CiB7Ci0gICAgRmxvYXRSZWN0IHJlY3QoeCgpLnZhbHVlKHRoaXMpLCB5KCkudmFsdWUodGhp
cyksIHdpZHRoKCkudmFsdWUodGhpcyksIGhlaWdodCgpLnZhbHVlKHRoaXMpKTsKKyAgICBBU1NF
UlQocGF0aC5pc0VtcHR5KCkpOworCisgICAgZmxvYXQgd2lkdGhWYWx1ZSA9IHdpZHRoKCkudmFs
dWUodGhpcyk7CisgICAgaWYgKHdpZHRoVmFsdWUgPD0gMCkKKyAgICAgICAgcmV0dXJuOworCisg
ICAgZmxvYXQgaGVpZ2h0VmFsdWUgPSBoZWlnaHQoKS52YWx1ZSh0aGlzKTsKKyAgICBpZiAoaGVp
Z2h0VmFsdWUgPD0gMCkKKyAgICAgICAgcmV0dXJuOworCisgICAgZmxvYXQgeFZhbHVlID0geCgp
LnZhbHVlKHRoaXMpOworICAgIGZsb2F0IHlWYWx1ZSA9IHkoKS52YWx1ZSh0aGlzKTsKKworICAg
IEZsb2F0UmVjdCByZWN0KHhWYWx1ZSwgeVZhbHVlLCB3aWR0aFZhbHVlLCBoZWlnaHRWYWx1ZSk7
CiAKICAgICBib29sIGhhc1J4ID0gaGFzQXR0cmlidXRlKFNWR05hbWVzOjpyeEF0dHIpOwogICAg
IGJvb2wgaGFzUnkgPSBoYXNBdHRyaWJ1dGUoU1ZHTmFtZXM6OnJ5QXR0cik7CiAgICAgaWYgKGhh
c1J4IHx8IGhhc1J5KSB7Ci0gICAgICAgIGZsb2F0IF9yeCA9IGhhc1J4ID8gcngoKS52YWx1ZSh0
aGlzKSA6IHJ5KCkudmFsdWUodGhpcyk7Ci0gICAgICAgIGZsb2F0IF9yeSA9IGhhc1J5ID8gcnko
KS52YWx1ZSh0aGlzKSA6IHJ4KCkudmFsdWUodGhpcyk7Ci0gICAgICAgIHJldHVybiBQYXRoOjpj
cmVhdGVSb3VuZGVkUmVjdGFuZ2xlKHJlY3QsIEZsb2F0U2l6ZShfcngsIF9yeSkpOworICAgICAg
ICBmbG9hdCByeFZhbHVlID0gcngoKS52YWx1ZSh0aGlzKTsKKyAgICAgICAgZmxvYXQgcnlWYWx1
ZSA9IHJ5KCkudmFsdWUodGhpcyk7CisgICAgICAgIGlmICghaGFzUngpCisgICAgICAgICAgICBy
eFZhbHVlID0gcnlWYWx1ZTsKKyAgICAgICAgZWxzZSBpZiAoIWhhc1J5KQorICAgICAgICAgICAg
cnlWYWx1ZSA9IHJ4VmFsdWU7CisgICAgICAgIHBhdGguYWRkUm91bmRlZFJlY3QocmVjdCwgRmxv
YXRTaXplKHJ4VmFsdWUsIHJ5VmFsdWUpKTsKKyAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAg
IHJldHVybiBQYXRoOjpjcmVhdGVSZWN0YW5nbGUocmVjdCk7CisgICAgcGF0aC5hZGRSZWN0KHJl
Y3QpOwogfQogCiBib29sIFNWR1JlY3RFbGVtZW50OjpzZWxmSGFzUmVsYXRpdmVMZW5ndGhzKCkg
Y29uc3QKZGlmZiAtLWdpdCBhL1dlYkNvcmUvc3ZnL1NWR1JlY3RFbGVtZW50LmggYi9XZWJDb3Jl
L3N2Zy9TVkdSZWN0RWxlbWVudC5oCmluZGV4IDM4MjA3OGQuLjY2ODM2NmIgMTAwNjQ0Ci0tLSBh
L1dlYkNvcmUvc3ZnL1NWR1JlY3RFbGVtZW50LmgKKysrIGIvV2ViQ29yZS9zdmcvU1ZHUmVjdEVs
ZW1lbnQuaApAQCAtNDUsNyArNDUsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIHZp
cnR1YWwgdm9pZCBzdmdBdHRyaWJ1dGVDaGFuZ2VkKGNvbnN0IFF1YWxpZmllZE5hbWUmKTsKICAg
ICAgICAgdmlydHVhbCB2b2lkIHN5bmNocm9uaXplUHJvcGVydHkoY29uc3QgUXVhbGlmaWVkTmFt
ZSYpOwogCi0gICAgICAgIHZpcnR1YWwgUGF0aCB0b1BhdGhEYXRhKCkgY29uc3Q7CisgICAgICAg
IHZpcnR1YWwgdm9pZCB0b1BhdGhEYXRhKFBhdGgmKSBjb25zdDsKIAogICAgICAgICB2aXJ0dWFs
IGJvb2wgc2VsZkhhc1JlbGF0aXZlTGVuZ3RocygpIGNvbnN0OwogCmRpZmYgLS1naXQgYS9XZWJD
b3JlL3N2Zy9TVkdTdHlsZWRUcmFuc2Zvcm1hYmxlRWxlbWVudC5jcHAgYi9XZWJDb3JlL3N2Zy9T
VkdTdHlsZWRUcmFuc2Zvcm1hYmxlRWxlbWVudC5jcHAKaW5kZXggNDQxOTQ0My4uMjJjZmYzZCAx
MDA2NDQKLS0tIGEvV2ViQ29yZS9zdmcvU1ZHU3R5bGVkVHJhbnNmb3JtYWJsZUVsZW1lbnQuY3Bw
CisrKyBiL1dlYkNvcmUvc3ZnL1NWR1N0eWxlZFRyYW5zZm9ybWFibGVFbGVtZW50LmNwcApAQCAt
MTExLDEyICsxMTEsMTMgQEAgUmVuZGVyT2JqZWN0KiBTVkdTdHlsZWRUcmFuc2Zvcm1hYmxlRWxl
bWVudDo6Y3JlYXRlUmVuZGVyZXIoUmVuZGVyQXJlbmEqIGFyZW5hLAogICAgIHJldHVybiBuZXcg
KGFyZW5hKSBSZW5kZXJTVkdQYXRoKHRoaXMpOwogfQogCi1QYXRoIFNWR1N0eWxlZFRyYW5zZm9y
bWFibGVFbGVtZW50Ojp0b0NsaXBQYXRoKCkgY29uc3QKK3ZvaWQgU1ZHU3R5bGVkVHJhbnNmb3Jt
YWJsZUVsZW1lbnQ6OnRvQ2xpcFBhdGgoUGF0aCYgcGF0aCkgY29uc3QKIHsKLSAgICBQYXRoIHBh
dGhEYXRhID0gdG9QYXRoRGF0YSgpOworICAgIEFTU0VSVChwYXRoLmlzRW1wdHkoKSk7CisKKyAg
ICB0b1BhdGhEYXRhKHBhdGgpOwogICAgIC8vIEZJWE1FOiBIb3cgZG8gd2Uga25vdyB0aGUgZWxl
bWVudCBoYXMgZG9uZSBhIGxheW91dD8KLSAgICBwYXRoRGF0YS50cmFuc2Zvcm0oYW5pbWF0ZWRM
b2NhbFRyYW5zZm9ybSgpKTsKLSAgICByZXR1cm4gcGF0aERhdGE7CisgICAgcGF0aC50cmFuc2Zv
cm0oYW5pbWF0ZWRMb2NhbFRyYW5zZm9ybSgpKTsKIH0KIAogfQpkaWZmIC0tZ2l0IGEvV2ViQ29y
ZS9zdmcvU1ZHU3R5bGVkVHJhbnNmb3JtYWJsZUVsZW1lbnQuaCBiL1dlYkNvcmUvc3ZnL1NWR1N0
eWxlZFRyYW5zZm9ybWFibGVFbGVtZW50LmgKaW5kZXggMjkwZjdmOC4uNTM0OWNmYSAxMDA2NDQK
LS0tIGEvV2ViQ29yZS9zdmcvU1ZHU3R5bGVkVHJhbnNmb3JtYWJsZUVsZW1lbnQuaAorKysgYi9X
ZWJDb3JlL3N2Zy9TVkdTdHlsZWRUcmFuc2Zvcm1hYmxlRWxlbWVudC5oCkBAIC00OSw4ICs0OSw4
IEBAIHB1YmxpYzoKICAgICBib29sIGlzS25vd25BdHRyaWJ1dGUoY29uc3QgUXVhbGlmaWVkTmFt
ZSYpOwogCiAgICAgLy8gImJhc2UgY2xhc3MiIG1ldGhvZHMgZm9yIGFsbCB0aGUgZWxlbWVudHMg
d2hpY2ggcmVuZGVyIGFzIHBhdGhzCi0gICAgdmlydHVhbCBQYXRoIHRvUGF0aERhdGEoKSBjb25z
dCB7IHJldHVybiBQYXRoKCk7IH0KLSAgICB2aXJ0dWFsIFBhdGggdG9DbGlwUGF0aCgpIGNvbnN0
OworICAgIHZpcnR1YWwgdm9pZCB0b1BhdGhEYXRhKFBhdGgmKSBjb25zdCB7IH0KKyAgICB2aXJ0
dWFsIHZvaWQgdG9DbGlwUGF0aChQYXRoJikgY29uc3Q7CiAgICAgdmlydHVhbCBSZW5kZXJPYmpl
Y3QqIGNyZWF0ZVJlbmRlcmVyKFJlbmRlckFyZW5hKiwgUmVuZGVyU3R5bGUqKTsKIAogcHJvdGVj
dGVkOgpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9zdmcvU1ZHVXNlRWxlbWVudC5jcHAgYi9XZWJDb3Jl
L3N2Zy9TVkdVc2VFbGVtZW50LmNwcAppbmRleCA3ODJlZmE4Li4xMjc4NmVlIDEwMDY0NAotLS0g
YS9XZWJDb3JlL3N2Zy9TVkdVc2VFbGVtZW50LmNwcAorKysgYi9XZWJDb3JlL3N2Zy9TVkdVc2VF
bGVtZW50LmNwcApAQCAtNjI0LDI1ICs2MjQsMjQgQEAgc3RhdGljIGJvb2wgaXNEaXJlY3RSZWZl
cmVuY2UoTm9kZSogbikKICAgICAgICAgICAgbi0+aGFzVGFnTmFtZShTVkdOYW1lczo6dGV4dFRh
Zyk7CiB9CiAKLVBhdGggU1ZHVXNlRWxlbWVudDo6dG9DbGlwUGF0aCgpIGNvbnN0Cit2b2lkIFNW
R1VzZUVsZW1lbnQ6OnRvQ2xpcFBhdGgoUGF0aCYgcGF0aCkgY29uc3QKIHsKKyAgICBBU1NFUlQo
cGF0aC5pc0VtcHR5KCkpOworCiAgICAgTm9kZSogbiA9IG1fdGFyZ2V0RWxlbWVudEluc3RhbmNl
ID8gbV90YXJnZXRFbGVtZW50SW5zdGFuY2UtPnNoYWRvd1RyZWVFbGVtZW50KCkgOiAwOwogICAg
IGlmICghbikKLSAgICAgICAgcmV0dXJuIFBhdGgoKTsKKyAgICAgICAgcmV0dXJuOwogCiAgICAg
aWYgKG4tPmlzU1ZHRWxlbWVudCgpICYmIHN0YXRpY19jYXN0PFNWR0VsZW1lbnQqPihuKS0+aXNT
dHlsZWRUcmFuc2Zvcm1hYmxlKCkpIHsKICAgICAgICAgaWYgKCFpc0RpcmVjdFJlZmVyZW5jZShu
KSkKICAgICAgICAgICAgIC8vIFNwZWM6IEluZGlyZWN0IHJlZmVyZW5jZXMgYXJlIGFuIGVycm9y
ICgxNC4zLjUpCiAgICAgICAgICAgICBkb2N1bWVudCgpLT5hY2Nlc3NTVkdFeHRlbnNpb25zKCkt
PnJlcG9ydEVycm9yKCJOb3QgYWxsb3dlZCB0byB1c2UgaW5kaXJlY3QgcmVmZXJlbmNlIGluIDxj
bGlwLXBhdGg+Iik7CiAgICAgICAgIGVsc2UgewotICAgICAgICAgICAgUGF0aCBjbGlwUGF0aCA9
IHN0YXRpY19jYXN0PFNWR1N0eWxlZFRyYW5zZm9ybWFibGVFbGVtZW50Kj4obiktPnRvQ2xpcFBh
dGgoKTsKLSAgICAgICAgICAgIGNsaXBQYXRoLnRyYW5zbGF0ZShGbG9hdFNpemUoeCgpLnZhbHVl
KHRoaXMpLCB5KCkudmFsdWUodGhpcykpKTsKLSAgICAgICAgICAgIGNsaXBQYXRoLnRyYW5zZm9y
bShhbmltYXRlZExvY2FsVHJhbnNmb3JtKCkpOwotICAgICAgICAgICAgcmV0dXJuIGNsaXBQYXRo
OworICAgICAgICAgICAgc3RhdGljX2Nhc3Q8U1ZHU3R5bGVkVHJhbnNmb3JtYWJsZUVsZW1lbnQq
PihuKS0+dG9DbGlwUGF0aChwYXRoKTsKKyAgICAgICAgICAgIHBhdGgudHJhbnNsYXRlKEZsb2F0
U2l6ZSh4KCkudmFsdWUodGhpcyksIHkoKS52YWx1ZSh0aGlzKSkpOworICAgICAgICAgICAgcGF0
aC50cmFuc2Zvcm0oYW5pbWF0ZWRMb2NhbFRyYW5zZm9ybSgpKTsKICAgICAgICAgfQogICAgIH0K
LQotICAgIHJldHVybiBQYXRoKCk7CiB9CiAKIFJlbmRlck9iamVjdCogU1ZHVXNlRWxlbWVudDo6
cmVuZGVyZXJDbGlwQ2hpbGQoKSBjb25zdApkaWZmIC0tZ2l0IGEvV2ViQ29yZS9zdmcvU1ZHVXNl
RWxlbWVudC5oIGIvV2ViQ29yZS9zdmcvU1ZHVXNlRWxlbWVudC5oCmluZGV4IDkzNjZkMjUuLmI4
YmE3MWQgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvc3ZnL1NWR1VzZUVsZW1lbnQuaAorKysgYi9XZWJD
b3JlL3N2Zy9TVkdVc2VFbGVtZW50LmgKQEAgLTY3LDcgKzY3LDcgQEAgbmFtZXNwYWNlIFdlYkNv
cmUgewogICAgICAgICB2aXJ0dWFsIHZvaWQgYXR0YWNoKCk7CiAgICAgICAgIHZpcnR1YWwgdm9p
ZCBkZXRhY2goKTsKIAotICAgICAgICB2aXJ0dWFsIFBhdGggdG9DbGlwUGF0aCgpIGNvbnN0Owor
ICAgICAgICB2aXJ0dWFsIHZvaWQgdG9DbGlwUGF0aChQYXRoJikgY29uc3Q7CiAKICAgICAgICAg
c3RhdGljIHZvaWQgcmVtb3ZlRGlzYWxsb3dlZEVsZW1lbnRzRnJvbVN1YnRyZWUoTm9kZSogZWxl
bWVudCk7CiAK
</data>
<flag name="review"
          id="60312"
          type_id="1"
          status="+"
          setter="krit"
    />
          </attachment>
      

    </bug>

</bugzilla>