<?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>65769</bug_id>
          
          <creation_ts>2011-08-05 07:48:17 -0700</creation_ts>
          <short_desc>New renderer for SVGRectElement</short_desc>
          <delta_ts>2011-12-21 07:32:43 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>SVG</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</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>
          
          <blocked>65236</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Renata Hodovan">rhodovan.u-szeged</reporter>
          <assigned_to name="Renata Hodovan">rhodovan.u-szeged</assigned_to>
          <cc>abarth</cc>
    
    <cc>darin</cc>
    
    <cc>dglazkov</cc>
    
    <cc>gustavo.noronha</cc>
    
    <cc>gustavo</cc>
    
    <cc>kling</cc>
    
    <cc>krit</cc>
    
    <cc>scheib</cc>
    
    <cc>webkit.review.bot</cc>
    
    <cc>xan.lopez</cc>
    
    <cc>zherczeg</cc>
    
    <cc>zimmermann</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>447208</commentid>
    <comment_count>0</comment_count>
    <who name="Renata Hodovan">rhodovan.u-szeged</who>
    <bug_when>2011-08-05 07:48:17 -0700</bug_when>
    <thetext>New renderer for SVGRectElement</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>447212</commentid>
    <comment_count>1</comment_count>
      <attachid>103073</attachid>
    <who name="Renata Hodovan">rhodovan.u-szeged</who>
    <bug_when>2011-08-05 08:21:53 -0700</bug_when>
    <thetext>Created attachment 103073
Proposed patch

This patch is just a draft so I didn&apos;t update the layout tests (but almost all SVG related tests need it, because DRT will dump RenderSVGRect instead of RenderSVGPath if the SVG graphics contains rect object).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>447216</commentid>
    <comment_count>2</comment_count>
      <attachid>103073</attachid>
    <who name="Gyuyoung Kim">gyuyoung.kim</who>
    <bug_when>2011-08-05 08:34:56 -0700</bug_when>
    <thetext>Comment on attachment 103073
Proposed patch

Attachment 103073 did not pass efl-ews (efl):
Output: http://queues.webkit.org/results/9305852</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>447219</commentid>
    <comment_count>3</comment_count>
      <attachid>103073</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-08-05 08:42:05 -0700</bug_when>
    <thetext>Comment on attachment 103073
Proposed patch

Attachment 103073 did not pass chromium-ews (chromium-xvfb):
Output: http://queues.webkit.org/results/9321104</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>447224</commentid>
    <comment_count>4</comment_count>
      <attachid>103073</attachid>
    <who name="Gustavo Noronha (kov)">gustavo</who>
    <bug_when>2011-08-05 08:52:21 -0700</bug_when>
    <thetext>Comment on attachment 103073
Proposed patch

Attachment 103073 did not pass gtk-ews (gtk):
Output: http://queues.webkit.org/results/9301984</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>447234</commentid>
    <comment_count>5</comment_count>
      <attachid>103073</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-08-05 09:16:23 -0700</bug_when>
    <thetext>Comment on attachment 103073
Proposed patch

Attachment 103073 did not pass cr-mac-ews (chromium):
Output: http://queues.webkit.org/results/9301986</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>447578</commentid>
    <comment_count>6</comment_count>
      <attachid>103073</attachid>
    <who name="Dirk Schulze">krit</who>
    <bug_when>2011-08-05 23:18:58 -0700</bug_when>
    <thetext>Comment on attachment 103073
Proposed patch

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

We need performance tests for this. If we have stupid graphic libs that recreate a path internally for every fillRect or strokeRect operation, this would be significant slower! That&apos;s why I&apos;d begin with circles/ellipses, there is a very good Test to check the performance for circles, but it can indeed be adapted to rects. http://themaninblue.com/experiment/AnimationBenchmark/svg

But again, we need to test this on all platforms! I&apos;ll be willing to run the tests on mac as well, if that helps. I can try CG but maybe Skia as well.

The following comment are not a complete review. I have more comments later, we just need to clarify some fact first. 

A lot of code looks like code duplication, can&apos;t you just call shapeSpecific functions in RenderSVGBasicShape? Do we need all these paint, layout, fillAndStroke, nodeAtPoint functions again?

&gt; Source/WebCore/rendering/svg/RenderSVGRect.cpp:189
&gt; +    if (RenderSVGResource* fillPaintingResource = RenderSVGResource::fillPaintingResource(this, style, fallbackColor)) {

Is it really a fallback _color_ ? Can&apos;t a gradient or pattern be a fallback as well? I have to look for that myself first. Seems not to be your problem anyway here.

&gt; Source/WebCore/rendering/svg/RenderSVGRect.cpp:196
&gt; +                Path path;
&gt; +                path.addRoundedRect(m_rect, FloatSize(m_rxValue, m_ryValue));
&gt; +                context-&gt;fillPath(path);

That is a bad idea. On every Paint operation we have to recreate the path to draw it. This is significant slower than the current behavior, where we store the path. We should fallback to BasicShape in this situation. Or you could store a RefPtr&lt;Path&gt; like we do in BasicShape as well.

&gt; Source/WebCore/rendering/svg/RenderSVGRect.cpp:207
&gt; +                    Path path;
&gt; +                    path.addRoundedRect(m_rect, FloatSize(m_rxValue, m_ryValue));
&gt; +                    context-&gt;fillPath(path);

ditto.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>447595</commentid>
    <comment_count>7</comment_count>
      <attachid>103073</attachid>
    <who name="Nikolas Zimmermann">zimmermann</who>
    <bug_when>2011-08-06 03:12:01 -0700</bug_when>
    <thetext>Comment on attachment 103073
Proposed patch

I only had a quick glance over this patch, though I&apos;m imaging the amount of new code that would be needed if we had RenderSVGRect/Circle/Ellipse/... A bit too much overhead for my taste.

My initial thought would be to have sth like RenderSVGShape, that takes an enum ShapeMode { ShapeRect, ShapeCircle, ShapeEllipse, ...}
to have one single class for all shapes. RenderSVGShape could even inherit from RenderSVGPath (fallback for eg. rectangles with rounded corners, etc.).

What do you think?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>447711</commentid>
    <comment_count>8</comment_count>
      <attachid>103073</attachid>
    <who name="Dirk Schulze">krit</who>
    <bug_when>2011-08-06 23:46:02 -0700</bug_when>
    <thetext>Comment on attachment 103073
Proposed patch

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

&gt; Source/WebCore/rendering/svg/RenderSVGRect.cpp:59
&gt; +    if (determinePointLocation(point, m_rect) != OutsideShape)
&gt; +        return true;
&gt; +    return false;

This is not correct for rects with rounded corners.

&gt; Source/WebCore/rendering/svg/RenderSVGRect.cpp:72
&gt; +    const SVGRenderStyle* svgStyle = style()-&gt;svgStyle();
&gt; +    float strokeWidth = svgStyle-&gt;strokeWidth().value(static_cast&lt;SVGRectElement*&gt;(node()));
&gt; +    FloatRect innerStrokeRect = m_rect;
&gt; +    FloatRect outerStrokeRect = m_rect;
&gt; +    innerStrokeRect.inflate(-strokeWidth / 2);
&gt; +    outerStrokeRect.inflate(strokeWidth / 2);
&gt; +    if (determinePointLocation(point, innerStrokeRect) != InsideShape &amp;&amp; determinePointLocation(point, outerStrokeRect) != OutsideShape)
&gt; +        return true;
&gt; +    return false;

This will cause regressions as well. First it is not correct for rects with rounded corners, second: it will fire events for gaps in dash arrays as well.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>449133</commentid>
    <comment_count>9</comment_count>
      <attachid>103487</attachid>
    <who name="Renata Hodovan">rhodovan.u-szeged</who>
    <bug_when>2011-08-10 07:29:41 -0700</bug_when>
    <thetext>Created attachment 103487
Proposed patch

After discussing with Niko on IRC we declared the introduction of the new RenderSVGRect in three steps:
1) Adding a pure RenderSVGRect class inherited from RenderSVGPath. It only contains two functions (isSVGRect() and renderName()) what it can identify itself with. This requires the update a mass of expected text files.
2) The most part of RenderSVGPath will be moved to RenderSVGShape and it will be inherited from RenderSVGShape.
3) Decouple RenderSVGRect to use RenderSVGShape as base instead of RenderSVGPath

This patch perform the first step.
I couldn&apos;t upload the whole expected update, because of the size of diff. It was ~13Mb, but bugzilla can receive patches maximum with 10Mb (even if i check the Big patch option)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>449156</commentid>
    <comment_count>10</comment_count>
    <who name="Dirk Schulze">krit</who>
    <bug_when>2011-08-10 08:15:05 -0700</bug_when>
    <thetext>Your patch is too big for pretty diff.  The only change on DRT seems to be the change from RenderSVGPath to RenderSVGRect, can you post the tests in another patch please?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>449162</commentid>
    <comment_count>11</comment_count>
      <attachid>103487</attachid>
    <who name="Dirk Schulze">krit</who>
    <bug_when>2011-08-10 08:27:27 -0700</bug_when>
    <thetext>Comment on attachment 103487
Proposed patch

I&apos;d like to know how you want to deal with rounded rects before you add a new renderer named RenderSVGRect. See comment #8 rounded rects should be RenderSVGPath (or Shape), otherwise we would get performance issues and regressions on pointer events.

Btw. where is RenderSVGRect.cpp in your patch?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>449183</commentid>
    <comment_count>12</comment_count>
      <attachid>103498</attachid>
    <who name="Renata Hodovan">rhodovan.u-szeged</who>
    <bug_when>2011-08-10 08:55:09 -0700</bug_when>
    <thetext>Created attachment 103498
Proposed patch

First part</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>449186</commentid>
    <comment_count>13</comment_count>
    <who name="Renata Hodovan">rhodovan.u-szeged</who>
    <bug_when>2011-08-10 09:09:23 -0700</bug_when>
    <thetext>(In reply to comment #11)
&gt; (From update of attachment 103487 [details])
&gt; I&apos;d like to know how you want to deal with rounded rects before you add a new renderer named RenderSVGRect. See comment #8 rounded rects should be RenderSVGPath (or Shape), otherwise we would get performance issues and regressions on pointer events.
Yeah, I didn&apos;t write too much detail about our plans. Btw you are right. Rounded rects could be properly rendered just via path object. So we will have a RefPtr&lt;Path&gt; member in the base class and we can fallback to it if it&apos;s needed. (this was your idea too :) )

&gt; Btw. where is RenderSVGRect.cpp in your patch?
Yes, I missed to add them in my previous patch, but I fixed it.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>449189</commentid>
    <comment_count>14</comment_count>
    <who name="Renata Hodovan">rhodovan.u-szeged</who>
    <bug_when>2011-08-10 09:11:06 -0700</bug_when>
    <thetext>It seems I killed ews again B-) Maybe should I split the patch into three parts?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>449196</commentid>
    <comment_count>15</comment_count>
      <attachid>103498</attachid>
    <who name="Dirk Schulze">krit</who>
    <bug_when>2011-08-10 09:35:50 -0700</bug_when>
    <thetext>Comment on attachment 103498
Proposed patch

I asked you to just upload the changes in WebCore, without DRT results.

The rounded corner issue still exists. I&apos;d create an RenderSVGPath renderer for that case like discussed on IRC.

RenderSVGRect inherits from RenderSVGPath. Do you plan to use RefPtr&lt;Path&gt; for special cases on RenderSVGRect? If so I&apos;m fine. RenderSVGRect would be faster in calculating bounding boxes, but falls back to RenderSVGPath logic when it comes to pointer events. We can just handle pointer events for simple fill and stroke operations. If we have dashed arrays or special line caps, we need to fallback to RenderSVGPath logic.

Also I thought Niko did not want a new class but switches in RenderSVGPath? Did you change his mind? :P I prefer the classes, but again, we need to be careful.

For the long term. Which renderer do you plan to create? I would think of RenderSVGRect and RenderSVGEllipse, circle could be handled by ellipses as well. I don&apos;t see other renderers, right?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>449680</commentid>
    <comment_count>16</comment_count>
    <who name="Renata Hodovan">rhodovan.u-szeged</who>
    <bug_when>2011-08-11 03:23:35 -0700</bug_when>
    <thetext>&gt; I asked you to just upload the changes in WebCore, without DRT results.
Sorry, should I send it again?
 
&gt; The rounded corner issue still exists. I&apos;d create an RenderSVGPath renderer for that case like discussed on IRC.
&gt;
&gt; RenderSVGRect inherits from RenderSVGPath. 
That&apos;s right. But only in this first step. Our goal is to inherit the renderers of all SVG shapes (Path&apos;s to) from RenderSVGShape what will contain a lot of code from the current RenderSVGPath. This common renderer will have the RefPtr&lt;Path&gt; member for the cases what need fallback.

&gt; Do you plan to use RefPtr&lt;Path&gt; for special cases on RenderSVGRect? If so I&apos;m fine. RenderSVGRect would be faster in calculating bounding boxes, but falls back to RenderSVGPath logic when it comes to pointer events. We can just handle pointer events for simple fill and stroke operations. If we have dashed arrays or special line caps, we need to fallback to RenderSVGPath logic.
&gt; 
&gt; Also I thought Niko did not want a new class but switches in RenderSVGPath? Did you change his mind? :P I prefer the classes, but again, we need to be careful.
Yeah, Niko gave me his blessing :P

&gt; For the long term. Which renderer do you plan to create? I would think of RenderSVGRect and RenderSVGEllipse, circle could be handled by ellipses as well. I don&apos;t see other renderers, right?
Rect, ellipse, line, path...</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>449685</commentid>
    <comment_count>17</comment_count>
    <who name="Dirk Schulze">krit</who>
    <bug_when>2011-08-11 04:21:05 -0700</bug_when>
    <thetext>(In reply to comment #16)
&gt; &gt; I asked you to just upload the changes in WebCore, without DRT results.
&gt; Sorry, should I send it again?
RenderSVGPath to RenderSVGShape is just a renaming. I really do fear regressions with pointer events. I wrote it in multiple comments before. I&apos;d like to hear your ideas how to avoid that! Again, painting is not the problem, and I&apos;m fine with these changes as long as we do not have performance regressions on cairo, cg, qt, skia.

But how do you want to manage pointer events on stroke? Your first indention definitely doesn&apos;t work. You need a path to determine if a pointer is on the stroke or not!

And if we have to create a path, the only benefit would be painting. This would be a progression anyway. But I&apos;d like to have a concept before creating new classes.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>452155</commentid>
    <comment_count>18</comment_count>
      <attachid>104154</attachid>
    <who name="Renata Hodovan">rhodovan.u-szeged</who>
    <bug_when>2011-08-17 00:13:33 -0700</bug_when>
    <thetext>Created attachment 104154
Draft patch

This is just a draft patch. I tried to follow Krit&apos;s instructions and this is how I can imagine the introduction of the new renderers. Any comments are welcomed. :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>452162</commentid>
    <comment_count>19</comment_count>
    <who name="Renata Hodovan">rhodovan.u-szeged</who>
    <bug_when>2011-08-17 00:29:56 -0700</bug_when>
    <thetext>Sorry for the licences of RenderSVGPath... copy-paste error... I&apos;ll fix them ofc :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>452174</commentid>
    <comment_count>20</comment_count>
      <attachid>104154</attachid>
    <who name="Nikolas Zimmermann">zimmermann</who>
    <bug_when>2011-08-17 01:39:01 -0700</bug_when>
    <thetext>Comment on attachment 104154
Draft patch

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

First extensive round of review! :-)

&gt; Source/WebCore/rendering/svg/RenderSVGPath.cpp:-50
&gt; -class BoundingRectStrokeStyleApplier : public StrokeStyleApplier {
&gt; -public:

Did you use &quot;svn cp RenderSVGPath.cpp RenderSVGShape.cpp&quot; as first thing to preserve the history of everything that you&apos;re moving?
Otherwhise you&apos;ll have to redo it :-)

&gt; Source/WebCore/rendering/svg/RenderSVGPath.h:3
&gt; + * Copyright (C) 2011 University of Szeged
&gt; + * Copyright (C) 2011 Renata Hodovan (reni@webkit.org)

You already commented about the wrong license changes, I just wanted to re-mention it.

&gt; Source/WebCore/rendering/svg/RenderSVGRect.cpp:40
&gt; +    , m_rect(FloatRect())

Not needed.

&gt; Source/WebCore/rendering/svg/RenderSVGRect.cpp:54
&gt; +FloatRect RenderSVGRect::shapeBoundingRect()

This should be const, no?
Why use a different terminology here btw, I&apos;d say &quot;objectBoundingBox&quot; is the right name.

&gt; Source/WebCore/rendering/svg/RenderSVGRect.cpp:64
&gt; +    SVGStyledTransformableElement* element = static_cast&lt;SVGStyledTransformableElement*&gt;(node());
&gt; +    SVGRectElement* rect = static_cast&lt;SVGRectElement*&gt;(element);

Why cast to SVGStyledTrafoElem first?

&gt; Source/WebCore/rendering/svg/RenderSVGRect.cpp:68
&gt; +    if (m_hasRx || m_hasRy || !style()-&gt;svgStyle()-&gt;strokeDashArray().isEmpty()) {
&gt; +       RenderSVGShape::createShape();

The fallback path should be described with a comment.
Is this enough? What about combinations of stroke-linecap=&quot;join&quot; and different miter limits? I&apos;m sure Dirk can come up with more cases.

&gt; Source/WebCore/rendering/svg/RenderSVGRect.cpp:80
&gt; +    float xValue = rect-&gt;x().value(rect);
&gt; +    float yValue = rect-&gt;y().value(rect);

Side note: This code is derived from SVGRectElement::toPathData.
It should be possible to eliminate this method as well now - aka. move it into RenderSVGRect, and use it from RenderSVGShape when path fallback mode is enabled.
Needs a bit more investigation, but I wanted to mention it so we won&apos;t forget.

&gt; Source/WebCore/rendering/svg/RenderSVGRect.cpp:82
&gt; +    FloatRect frect(xValue, yValue, widthValue, heightValue);
&gt; +    m_rect = frect;

Avoid this temporary variable, just use m_rect = FloatRect(...

&gt; Source/WebCore/rendering/svg/RenderSVGRect.cpp:85
&gt; +FloatRect RenderSVGRect::strokeBoundingShape()

Here a const should be added as well, and this could be named &quot;strokeBoundingBox&quot; for consistency.

&gt; Source/WebCore/rendering/svg/RenderSVGRect.cpp:93
&gt; +    float strokeWidth = style()-&gt;svgStyle()-&gt;strokeWidth().value(static_cast&lt;SVGRectElement*&gt;(node()));
&gt; +    BoundingRectStrokeStyleApplier strokeStyle(this, style());
&gt; +    FloatRect strokeRect = m_rect;
&gt; +    strokeRect.inflate(strokeWidth / 2);
&gt; +    return strokeRect;

This deserves a comment as well, that this approximation always holds true for the cases we&apos;re handling with in non-fallback path mode.
The strokeWidth calculation should be moved to either a free static inline function taking a RenderStyle* or a private member function, as it&apos;s duplicated in several places.

&gt; Source/WebCore/rendering/svg/RenderSVGRect.cpp:101
&gt; +    if (!hasPath())
&gt; +        context-&gt;fillRect(m_rect);
&gt; +    else
&gt; +        RenderSVGShape::fillShape(context);

I&apos;d use the early return style for the hasPath() case consistently. If you don&apos;t want this, swap conditions to save one negation.

&gt; Source/WebCore/rendering/svg/RenderSVGRect.cpp:111
&gt; +    float strokeWidth = style()-&gt;svgStyle()-&gt;strokeWidth().value(static_cast&lt;SVGRectElement*&gt;(node()));
&gt; +    context-&gt;strokeRect(m_rect, strokeWidth);

You could avoid the temporary variable loosing readability. Hm, I guess all our compilers will optimize that out anyway, so it&apos;s probably fine.

&gt; Source/WebCore/rendering/svg/RenderSVGRect.cpp:123
&gt; +    float strokeWidth = svgStyle-&gt;strokeWidth().value(static_cast&lt;SVGRectElement*&gt;(node()));
&gt; +    FloatRect innerStrokeRect = m_rect;
&gt; +    FloatRect outerStrokeRect = m_rect;
&gt; +    innerStrokeRect.inflate(-strokeWidth / 2);
&gt; +    outerStrokeRect.inflate(strokeWidth / 2);
&gt; +    if (determinePointLocation(point, innerStrokeRect) != InsideShape &amp;&amp; determinePointLocation(point, outerStrokeRect) != OutsideShape)
&gt; +        return true;

While this is beautiful readable, it deserves a comment as well and could be compactified further with the use of ternary operator.

&gt; Source/WebCore/rendering/svg/RenderSVGRect.cpp:131
&gt; +    if (determinePointLocation(point, m_rect) != OutsideShape)
&gt; +        return true;
&gt; +    return false;

You can fold this to be more compact with the ternary operator.

&gt; Source/WebCore/rendering/svg/RenderSVGRect.cpp:137
&gt; +    if (rect.x() &lt;= point.x() &amp;&amp; rect.maxX() &gt;= point.x() &amp;&amp; rect.y() &lt;= point.y() &amp;&amp; rect.maxY() &gt;= point.y())

if (rect.contains(point)) is equivalent.

The whole function is more readable if you&apos;d use
if (!rect.contains(point))
    return OutsideShape;
first.

&gt; Source/WebCore/rendering/svg/RenderSVGRect.h:38
&gt; +    RenderSVGRect(SVGStyledTransformableElement*);

This should be explicit, so RenderSVGRect(12) is not constructable.

&gt; Source/WebCore/rendering/svg/RenderSVGRect.h:46
&gt; +    void clearShape();
&gt; +    void createShape();

clearShape is only ever used in conjuncation with createShape. It seems superfluous to call m_path.clear() and then assiging m_path to a new RefPtr afterwards, same for clearing m_rect and then re-assigning it eventually.
We should rather watch out that createShape() clears m_rect on failure. Then clearShape() can be removed alltogether.

&gt; Source/WebCore/rendering/svg/RenderSVGRect.h:47
&gt; +    bool isEmpty() { return pathPtr() ? RenderSVGShape::isEmpty() : m_rect.isEmpty(); };

How is that supposed to work? pathPtr() ASSERTS that m_path.get() is true. So you&apos;ll never hit the m_rect.isEmpty() branch.
Did you test this with a debug build?

&gt; Source/WebCore/rendering/svg/RenderSVGShape.cpp:69
&gt; +    m_path = adoptPtr(new Path());

s/Path()/Path/.

Hm, we have to watch out for the possible impact of that change. Previously Path was allocated on the stack in RenderSVGPath -- you&apos;re changing this.
Path is fast malloced though I&apos;m worried about fragmentation issues when allocing/deallocing thousands of &lt;path&gt; dynamically.
I&apos;d love if you could benchmark the impact on memory consumption/fragmentation.

&gt; Source/WebCore/rendering/svg/RenderSVGShape.cpp:73
&gt; +    element-&gt;toPathData(path());

This toPathData() method could be a virtual method of RenderSVGShape.
SVGRectElement::toPathData() can then move to RenderSVGRect and override toPathData().
This way we can slowly eliminate the toPathData() spread in svg/ and have shape/path creation completly encapsulated in the render tree.

&gt; Source/WebCore/rendering/svg/RenderSVGShape.cpp:76
&gt; +bool RenderSVGShape::isEmpty()

This could be const as well, no?

&gt; Source/WebCore/rendering/svg/RenderSVGShape.cpp:113
&gt; +bool RenderSVGShape::fillContains(const FloatPoint&amp; point, bool requiresFill, WindRule fillRule)

I guess you really only moved this method from RenderSVGPath w/o any fundamental change?
Could it be const?

&gt; Source/WebCore/rendering/svg/RenderSVGShape.cpp:114
&gt; +{

Hmm, isn&apos;t m_fillBoundingBox of RenderSVGShape and RenderSVGRect::m_fillBoundingBox equal all the time? (when non-fallback mode is used).
Seems unfortunate to duplicate the storage. (Though I see why it&apos;s needed atm).

&gt; Source/WebCore/rendering/svg/RenderSVGShape.cpp:115
&gt; +    if (!m_fillBoundingBox.contains(point))

Ah here you&apos;re using the FloatRect contains method, should do that as well in RenderSVGRect, as I demanded there.

&gt; Source/WebCore/rendering/svg/RenderSVGShape.cpp:125
&gt; +bool RenderSVGShape::strokeContains(const FloatPoint&amp; point, bool requiresStroke)

I guess you really only moved this method from RenderSVGPath w/o any fundamental change?

&gt; Source/WebCore/rendering/svg/RenderSVGShape.cpp:153
&gt; +        clearShape();
&gt; +        createShape();

As said before, this should be folded into a single call.

&gt; Source/WebCore/rendering/svg/RenderSVGShape.cpp:226
&gt; +    tempPath = path();

tempPath = m_path is faster.

&gt; Source/WebCore/rendering/svg/RenderSVGShape.cpp:268
&gt; +        usePath = pathPtr();

usePath = &amp;m_path is faster.

&gt; Source/WebCore/rendering/svg/RenderSVGShape.cpp:272
&gt; +        usePath = pathPtr();

Ditto.

&gt; Source/WebCore/rendering/svg/RenderSVGShape.cpp:277
&gt; +        strokeShape(context);

Early return here.

&gt; Source/WebCore/rendering/svg/RenderSVGShape.cpp:278
&gt; +    } else if (fallbackColor.isValid()) {

Early return if fallbackColor is invalid.

&gt; Source/WebCore/rendering/svg/RenderSVGShape.cpp:394
&gt; +    m_fillBoundingBox = shapeBoundingRect();

Maybe RenderSVGRects shapeBoundingRect should calculate the x/y/w/h FloatRect here, instead of returning m_rect.
This way we could save the additional m_rect in RenderSVGRect, maybe?

&gt; Source/WebCore/rendering/svg/RenderSVGShape.cpp:413
&gt; +    if (this-&gt;isSVGPath()) {

this-&gt; is not needed.

&gt; Source/WebCore/rendering/svg/RenderSVGShape.h:74
&gt; +    void setNeedsPathUpdate() { m_needsShapeUpdate = true; }

This needs a rename!

&gt; Source/WebCore/rendering/svg/RenderSVGShape.h:107
&gt; +    virtual bool isEmpty();

const.

&gt; Source/WebCore/rendering/svg/RenderSVGShape.h:111
&gt; +    virtual FloatRect shapeBoundingRect();
&gt; +    virtual FloatRect strokeBoundingShape();

const + rename.

&gt; Source/WebCore/rendering/svg/RenderSVGShape.h:116
&gt; +    Path&amp; path()

This shouldn&apos;t be needed.

&gt; Source/WebCore/rendering/svg/RenderSVGShape.h:122
&gt; +    Path* pathPtr()

Ditto.

&gt; Source/WebCore/rendering/svg/RenderSVGShape.h:128
&gt; +    bool hasPath() { return m_path.get(); }

const.

&gt; Source/WebCore/rendering/svg/SVGRenderSupport.cpp:228
&gt;                      // When the layout size changed and when using relative values tell the RenderSVGPath to update its Path object

the comment is outdated now, please update.

&gt; Source/WebCore/rendering/svg/SVGRenderTreeAsText.cpp:293
&gt; +    if (object.isSVGShape()) {
&gt;          const RenderSVGPath&amp; path = static_cast&lt;const RenderSVGPath&amp;&gt;(object);

Be careful here! this is wrong and crashy. Needs investigation. I&apos;d immediately think you want to have two isSVGPath/isSVGRect branches
and then share code for in &quot;writeSVGShape&quot; that are common to path and rect.

&gt; Source/WebCore/svg/SVGRectElement.cpp:-169
&gt; -

I&apos;d leave this out.

&gt; Source/WebCore/svg/SVGRectElement.cpp:-187
&gt; -

Ditto.

&gt; Source/WebCore/svg/SVGRectElement.cpp:203
&gt; +    // By default, any subclass is expected to do path-based drawing

The comment is not needed I think.

&gt; Source/WebCore/svg/SVGRectElement.h:25
&gt; +#include &quot;RenderSVGRect.h&quot;

You should move this include to the cpp file.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>454627</commentid>
    <comment_count>21</comment_count>
      <attachid>104684</attachid>
    <who name="Renata Hodovan">rhodovan.u-szeged</who>
    <bug_when>2011-08-22 09:21:07 -0700</bug_when>
    <thetext>Created attachment 104684
Draft patch

It&apos;s still a draft patch (without changelog and layout test updates).

&gt;&gt; Source/WebCore/rendering/svg/RenderSVGRect.cpp:68
&gt;&gt; +       RenderSVGShape::createShape();
&gt; 
&gt; The fallback path should be described with a comment.
&gt; Is this enough? What about combinations of stroke-linecap=&quot;join&quot; and different miter limits? I&apos;m sure Dirk can come up with more cases.

I&apos;m waiting for the other fallback ideas :)

&gt;&gt; Source/WebCore/rendering/svg/RenderSVGRect.cpp:80
&gt;&gt; +    float yValue = rect-&gt;y().value(rect);
&gt; 
&gt; Side note: This code is derived from SVGRectElement::toPathData.
&gt; It should be possible to eliminate this method as well now - aka. move it into RenderSVGRect, and use it from RenderSVGShape when path fallback mode is enabled.
&gt; Needs a bit more investigation, but I wanted to mention it so we won&apos;t forget.

I agree with this but I think it should be made in a follow-up patch (I should do the same with the toPathData() funtions of the other SVG elements, which are not touched by this patch)

&gt;&gt; Source/WebCore/rendering/svg/RenderSVGShape.cpp:226
&gt;&gt; +    tempPath = path();
&gt; 
&gt; tempPath = m_path is faster.

m_path is an OwnPtr, so tempPath = m_path doesn&apos;t work. I could change it to tempPath = *m_path; if you like it better.

&gt;&gt; Source/WebCore/rendering/svg/RenderSVGShape.cpp:268
&gt;&gt; +        usePath = pathPtr();
&gt; 
&gt; usePath = &amp;m_path is faster.

The same problem here. Maybe: usePath = m_path.get();  ?

&gt;&gt; Source/WebCore/rendering/svg/RenderSVGShape.cpp:272
&gt;&gt; +        usePath = pathPtr();
&gt; 
&gt; Ditto.

The same again...

&gt;&gt; Source/WebCore/rendering/svg/RenderSVGShape.cpp:394
&gt;&gt; +    m_fillBoundingBox = shapeBoundingRect();
&gt; 
&gt; Maybe RenderSVGRects shapeBoundingRect should calculate the x/y/w/h FloatRect here, instead of returning m_rect.
&gt; This way we could save the additional m_rect in RenderSVGRect, maybe?

I think we need to store this because m_fillBoundingBox is used at several places.

&gt;&gt; Source/WebCore/rendering/svg/SVGRenderTreeAsText.cpp:293
&gt;&gt;          const RenderSVGPath&amp; path = static_cast&lt;const RenderSVGPath&amp;&gt;(object);
&gt; 
&gt; Be careful here! this is wrong and crashy. Needs investigation. I&apos;d immediately think you want to have two isSVGPath/isSVGRect branches
&gt; and then share code for in &quot;writeSVGShape&quot; that are common to path and rect.

This part really was a bit messy. I refactored it.

All the other suggestions are fixed. Besides I made a little refatoring around the fallback of strokeContains.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>454628</commentid>
    <comment_count>22</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-08-22 09:24:53 -0700</bug_when>
    <thetext>Attachment 104684 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;Source/WebCore/CMakeLists.txt&apos;, u&apos;Source/W...&quot; exit_code: 1

Source/WebCore/rendering/svg/RenderSVGShape.cpp:145:  More than one command on the same line in if  [whitespace/parens] [4]
Total errors found: 1 in 26 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>454630</commentid>
    <comment_count>23</comment_count>
      <attachid>104684</attachid>
    <who name="Gyuyoung Kim">gyuyoung.kim</who>
    <bug_when>2011-08-22 09:34:18 -0700</bug_when>
    <thetext>Comment on attachment 104684
Draft patch

Attachment 104684 did not pass efl-ews (efl):
Output: http://queues.webkit.org/results/9464788</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>454639</commentid>
    <comment_count>24</comment_count>
      <attachid>104684</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-08-22 09:53:11 -0700</bug_when>
    <thetext>Comment on attachment 104684
Draft patch

Attachment 104684 did not pass chromium-ews (chromium-xvfb):
Output: http://queues.webkit.org/results/9465840</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>454640</commentid>
    <comment_count>25</comment_count>
      <attachid>104684</attachid>
    <who name="Collabora GTK+ EWS bot">gustavo.noronha</who>
    <bug_when>2011-08-22 09:54:06 -0700</bug_when>
    <thetext>Comment on attachment 104684
Draft patch

Attachment 104684 did not pass gtk-ews (gtk):
Output: http://queues.webkit.org/results/9468732</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>454642</commentid>
    <comment_count>26</comment_count>
      <attachid>104684</attachid>
    <who name="Early Warning System Bot">webkit-ews</who>
    <bug_when>2011-08-22 09:56:30 -0700</bug_when>
    <thetext>Comment on attachment 104684
Draft patch

Attachment 104684 did not pass qt-ews (qt):
Output: http://queues.webkit.org/results/9468731</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>454646</commentid>
    <comment_count>27</comment_count>
      <attachid>104687</attachid>
    <who name="Renata Hodovan">rhodovan.u-szeged</who>
    <bug_when>2011-08-22 09:59:14 -0700</bug_when>
    <thetext>Created attachment 104687
Draft patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>454656</commentid>
    <comment_count>28</comment_count>
      <attachid>104687</attachid>
    <who name="Gyuyoung Kim">gyuyoung.kim</who>
    <bug_when>2011-08-22 10:18:04 -0700</bug_when>
    <thetext>Comment on attachment 104687
Draft patch

Attachment 104687 did not pass efl-ews (efl):
Output: http://queues.webkit.org/results/9461897</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>454658</commentid>
    <comment_count>29</comment_count>
      <attachid>104687</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-08-22 10:20:09 -0700</bug_when>
    <thetext>Comment on attachment 104687
Draft patch

Attachment 104687 did not pass chromium-ews (chromium-xvfb):
Output: http://queues.webkit.org/results/9467813</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>454670</commentid>
    <comment_count>30</comment_count>
      <attachid>104687</attachid>
    <who name="Collabora GTK+ EWS bot">gustavo.noronha</who>
    <bug_when>2011-08-22 10:30:57 -0700</bug_when>
    <thetext>Comment on attachment 104687
Draft patch

Attachment 104687 did not pass gtk-ews (gtk):
Output: http://queues.webkit.org/results/9463844</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>454680</commentid>
    <comment_count>31</comment_count>
      <attachid>104687</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-08-22 10:42:33 -0700</bug_when>
    <thetext>Comment on attachment 104687
Draft patch

Attachment 104687 did not pass mac-ews (mac):
Output: http://queues.webkit.org/results/9468742</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>455392</commentid>
    <comment_count>32</comment_count>
      <attachid>104841</attachid>
    <who name="Renata Hodovan">rhodovan.u-szeged</who>
    <bug_when>2011-08-23 06:53:14 -0700</bug_when>
    <thetext>Created attachment 104841
Draft patch

Build fix</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>455855</commentid>
    <comment_count>33</comment_count>
      <attachid>104841</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-08-23 17:21:17 -0700</bug_when>
    <thetext>Comment on attachment 104841
Draft patch

Attachment 104841 did not pass chromium-ews (chromium-xvfb):
Output: http://queues.webkit.org/results/9477706

New failing tests:
css2.1/20110323/replaced-intrinsic-002.htm
http/tests/misc/object-embedding-svg-delayed-size-negotiation.xhtml
fast/backgrounds/size/contain-and-cover.html
svg/W3C-I18N/text-anchor-dirNone-anchorMiddle.svg
svg/W3C-I18N/g-dirRTL-ubNone.svg
svg/W3C-I18N/text-anchor-dirLTR-anchorStart.svg
fast/repaint/svg-layout-root-style-attr-update.html
svg/W3C-I18N/text-anchor-dirLTR-anchorMiddle.svg
svg/W3C-I18N/text-anchor-dirLTR-anchorEnd.svg
svg/W3C-I18N/text-anchor-dirNone-anchorEnd.svg
svg/W3C-I18N/g-dirLTR-ubOverride.svg
svg/W3C-I18N/g-dirLTR-ubNone.svg
svg/W3C-I18N/g-dirRTL-ubOverride.svg
fast/forms/implicit-submission.html
css2.1/20110323/replaced-intrinsic-001.htm</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>458146</commentid>
    <comment_count>34</comment_count>
      <attachid>105479</attachid>
    <who name="Renata Hodovan">rhodovan.u-szeged</who>
    <bug_when>2011-08-29 02:45:09 -0700</bug_when>
    <thetext>Created attachment 105479
Propsed patch

SVG resources were used incorrectly in my previous patch (postApplyResource() was never called and every resources were considered as SolidColorResource).
With this patch we don&apos;t have regressions anymore and we get 4-5% performace improvement by this test: http://www.themaninblue.com/experiment/AnimationBenchmark/html/ (ofc I substituted the circles with rects)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>458168</commentid>
    <comment_count>35</comment_count>
    <who name="Renata Hodovan">rhodovan.u-szeged</who>
    <bug_when>2011-08-29 04:45:51 -0700</bug_when>
    <thetext>&gt; With this patch we don&apos;t have regressions anymore and we get 4-5% performace improvement by this test: http://www.themaninblue.com/experiment/AnimationBenchmark/html/ (ofc I substituted the circles with rects)

This one is the right test: http://www.themaninblue.com/experiment/AnimationBenchmark/svg/</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>458202</commentid>
    <comment_count>36</comment_count>
      <attachid>105479</attachid>
    <who name="Dirk Schulze">krit</who>
    <bug_when>2011-08-29 07:08:40 -0700</bug_when>
    <thetext>Comment on attachment 105479
Propsed patch

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

Some more comments.

&gt; Source/WebCore/rendering/svg/RenderSVGPath.h:34
&gt; +class RenderSVGPath : public RenderSVGShape {

Add a FIXME that you plan to remove RenderSVGPath with all the changes in DRT afterwards in a followup.

&gt; Source/WebCore/rendering/svg/RenderSVGRect.cpp:51
&gt; +    SVGRectElement* rect = static_cast&lt;SVGRectElement*&gt;(node());

Can you add an assert here for rect please?

&gt; Source/WebCore/rendering/svg/RenderSVGRect.cpp:55
&gt; +    if (m_hasRx || m_hasRy || !style()-&gt;svgStyle()-&gt;strokeDashArray().isEmpty()) {

just create the path for rects with rounded corners. More later on this review...

&gt; Source/WebCore/rendering/svg/RenderSVGRect.cpp:96
&gt; +    if (hasPath())
&gt; +        RenderSVGShape::fillShape(context);
&gt; +    else
&gt; +        context-&gt;fillRect(m_rect);

even if we have to create paths for pointer events, it could be faster to use context-&gt;fillRect instead of filling the path (of course just if fillRect respects dashArray and different styles; you have to check this first). We just need path for rects with rounded corners.

&gt; Source/WebCore/rendering/svg/RenderSVGRect.cpp:105
&gt; +    if (hasPath()) {
&gt; +        RenderSVGShape::strokeShape(context);
&gt; +        return;
&gt; +    }
&gt; +    context-&gt;strokeRect(m_rect, this-&gt;strokeWidth());

Ditto

&gt; Source/WebCore/rendering/svg/RenderSVGRect.cpp:108
&gt; +bool RenderSVGRect::strokeContainsSlowCase(const FloatPoint&amp; point)

what is the fast case?

&gt; Source/WebCore/rendering/svg/RenderSVGRect.cpp:110
&gt; +    if (hasPath())

You just created a path for dash arrays. But there is more stuff to respect: lineCap, mitterLimit. The W3C test suite has more examples. This is not needed for stroking or filling a rect, since the graphic libraries support it with rects automatically. But you have to think about this on pointer events.

I&apos;d just create the path, for _pointer events_ if we have either have a dahsarray, some special settings for mitterlimit or lineCap, and not on every layout call. Use the stored rects as much as possible. Just fallback to the path if there is no other way to determine something. Would it make sense to store a boolean for isPath() in RenderShape instead of checking the pointer? Not sure if we loose time on the check.

&gt; Source/WebCore/rendering/svg/RenderSVGRect.cpp:121
&gt; +    FloatRect innerStrokeRect = m_rect;
&gt; +    FloatRect outerStrokeRect = m_rect;
&gt; +    innerStrokeRect.inflate(-strokeWidth / 2);
&gt; +    outerStrokeRect.inflate(strokeWidth / 2);
&gt; +    return (determinePointLocation(point, innerStrokeRect) != InsideShape
&gt; +            &amp;&amp; determinePointLocation(point, outerStrokeRect) != OutsideShape) ?  true : false;

you should store inner and outer rect. But don&apos;t forget to clear the rects on style changes. This could be

&gt; Source/WebCore/rendering/svg/RenderSVGRect.cpp:126
&gt; +    return (determinePointLocation(point, m_rect) != OutsideShape) ? true : false;

isn&apos;t m_rect.contains(point.x(), point.y()) enough here? Also, you are missing the rounded corner case.

And I&apos;d like to see a test case for pointer events with rounded corners, if you didn&apos;t see regressions.

&gt; Source/WebCore/rendering/svg/RenderSVGRect.cpp:134
&gt; +    // Test whether the rect contains the certain point or not
&gt; +    if (!rect.contains(point))
&gt; +        return OutsideShape;
&gt; +    return (rect.x() &lt; point.x() &amp;&amp; rect.maxX() &gt; point.x() &amp;&amp; rect.y() &lt; point.y() &amp;&amp; rect.maxY() &gt; point.y()) ? InsideShape : OnStroke;

Can we add a comprises() method in FloatRect, that does not include the boundingBox of the rect? So we would not need this method here.

&gt; Source/WebCore/rendering/svg/RenderSVGResourceSolidColor.cpp:83
&gt; +    if (/*path &amp;&amp; */!(resourceMode &amp; ApplyToTextMode)) {

can you remove this comment?

&gt; Source/WebCore/rendering/svg/RenderSVGShape.cpp:75
&gt; +    return path().isEmpty();

why not just m_path-&gt;isEmpty();?

&gt; Source/WebCore/rendering/svg/RenderSVGShape.cpp:91
&gt; +    return path().strokeBoundingRect(&amp;strokeStyle);

m_path-&gt;stroke...

&gt; Source/WebCore/rendering/svg/RenderSVGShape.cpp:102
&gt; +    return path().strokeContains(&amp;applier, point);

m_path-&gt;strokeC...

&gt; Source/WebCore/rendering/svg/RenderSVGShape.cpp:107
&gt; +    return path().contains(point, fillRule);

m_path-&gt;contains(...

&gt; Source/WebCore/rendering/svg/RenderSVGShape.h:108
&gt; +protected:

The order should be public, protected, private sections

&gt; Source/WebCore/rendering/svg/RenderSVGShape.h:127
&gt; +    Path* pathPtr() const
&gt; +    {
&gt; +        ASSERT(m_path.get());
&gt; +        return m_path.get();
&gt; +    };

Looks like you don&apos;t use it. Remove it please.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>458952</commentid>
    <comment_count>37</comment_count>
      <attachid>105641</attachid>
    <who name="Renata Hodovan">rhodovan.u-szeged</who>
    <bug_when>2011-08-30 09:26:59 -0700</bug_when>
    <thetext>Created attachment 105641
Proposed patch

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

&gt;&gt; Source/WebCore/rendering/svg/RenderSVGPath.h:34
&gt;&gt; +class RenderSVGPath : public RenderSVGShape {
&gt; 
&gt; Add a FIXME that you plan to remove RenderSVGPath with all the changes in DRT afterwards in a followup.

Done.

&gt;&gt; Source/WebCore/rendering/svg/RenderSVGRect.cpp:51
&gt;&gt; +    SVGRectElement* rect = static_cast&lt;SVGRectElement*&gt;(node());
&gt; 
&gt; Can you add an assert here for rect please?

Done.

&gt;&gt; Source/WebCore/rendering/svg/RenderSVGRect.cpp:55
&gt;&gt; +    if (m_hasRx || m_hasRy || !style()-&gt;svgStyle()-&gt;strokeDashArray().isEmpty()) {
&gt; 
&gt; just create the path for rects with rounded corners. More later on this review...

Done.

&gt;&gt; Source/WebCore/rendering/svg/RenderSVGRect.cpp:96
&gt;&gt; +        context-&gt;fillRect(m_rect);
&gt; 
&gt; even if we have to create paths for pointer events, it could be faster to use context-&gt;fillRect instead of filling the path (of course just if fillRect respects dashArray and different styles; you have to check this first). We just need path for rects with rounded corners.

Okay, fillRect() can handle these styles. Updated.

&gt;&gt; Source/WebCore/rendering/svg/RenderSVGRect.cpp:105
&gt;&gt; +    context-&gt;strokeRect(m_rect, this-&gt;strokeWidth());
&gt; 
&gt; Ditto

Done.

&gt;&gt; Source/WebCore/rendering/svg/RenderSVGRect.cpp:108
&gt;&gt; +bool RenderSVGRect::strokeContainsSlowCase(const FloatPoint&amp; point)
&gt; 
&gt; what is the fast case?

This virtual function will contain the shape specific calculation of strokeContains() operation.

&gt;&gt; Source/WebCore/rendering/svg/RenderSVGRect.cpp:110
&gt;&gt; +    if (hasPath())
&gt; 
&gt; You just created a path for dash arrays. But there is more stuff to respect: lineCap, mitterLimit. The W3C test suite has more examples. This is not needed for stroking or filling a rect, since the graphic libraries support it with rects automatically. But you have to think about this on pointer events.
&gt; 
&gt; I&apos;d just create the path, for _pointer events_ if we have either have a dahsarray, some special settings for mitterlimit or lineCap, and not on every layout call. Use the stored rects as much as possible. Just fallback to the path if there is no other way to determine something. Would it make sense to store a boolean for isPath() in RenderShape instead of checking the pointer? Not sure if we loose time on the check.

Done.

&gt;&gt; Source/WebCore/rendering/svg/RenderSVGRect.cpp:121
&gt;&gt; +            &amp;&amp; determinePointLocation(point, outerStrokeRect) != OutsideShape) ?  true : false;
&gt; 
&gt; you should store inner and outer rect. But don&apos;t forget to clear the rects on style changes. This could be

I&apos;m not sure it&apos;s worth to store them constatly, so I left out this modification fo far. But if you are sure, I will do it ofc. Btw where should I catch the style change in this case?

&gt;&gt; Source/WebCore/rendering/svg/RenderSVGRect.cpp:126
&gt;&gt; +    return (determinePointLocation(point, m_rect) != OutsideShape) ? true : false;
&gt; 
&gt; isn&apos;t m_rect.contains(point.x(), point.y()) enough here? Also, you are missing the rounded corner case.
&gt; 
&gt; And I&apos;d like to see a test case for pointer events with rounded corners, if you didn&apos;t see regressions.

It&apos;s enuogh. I just wanted to use a uniform way to determine the location of the points. But determainPointLocation() is fade into the past, so this solution is a trash too.

&gt;&gt; Source/WebCore/rendering/svg/RenderSVGRect.cpp:134
&gt;&gt; +    return (rect.x() &lt; point.x() &amp;&amp; rect.maxX() &gt; point.x() &amp;&amp; rect.y() &lt; point.y() &amp;&amp; rect.maxY() &gt; point.y()) ? InsideShape : OnStroke;
&gt; 
&gt; Can we add a comprises() method in FloatRect, that does not include the boundingBox of the rect? So we would not need this method here.

Done.

&gt;&gt; Source/WebCore/rendering/svg/RenderSVGResourceSolidColor.cpp:83
&gt;&gt; +    if (/*path &amp;&amp; */!(resourceMode &amp; ApplyToTextMode)) {
&gt; 
&gt; can you remove this comment?

Done.

&gt;&gt; Source/WebCore/rendering/svg/RenderSVGShape.cpp:75
&gt;&gt; +    return path().isEmpty();
&gt; 
&gt; why not just m_path-&gt;isEmpty();?

I do already :P

&gt;&gt; Source/WebCore/rendering/svg/RenderSVGShape.cpp:91
&gt;&gt; +    return path().strokeBoundingRect(&amp;strokeStyle);
&gt; 
&gt; m_path-&gt;stroke...

Done.

&gt;&gt; Source/WebCore/rendering/svg/RenderSVGShape.cpp:102
&gt;&gt; +    return path().strokeContains(&amp;applier, point);
&gt; 
&gt; m_path-&gt;strokeC...

Done.

&gt;&gt; Source/WebCore/rendering/svg/RenderSVGShape.cpp:107
&gt;&gt; +    return path().contains(point, fillRule);
&gt; 
&gt; m_path-&gt;contains(...

Done.

&gt;&gt; Source/WebCore/rendering/svg/RenderSVGShape.h:108
&gt;&gt; +protected:
&gt; 
&gt; The order should be public, protected, private sections

Done.

&gt;&gt; Source/WebCore/rendering/svg/RenderSVGShape.h:127
&gt;&gt; +    };
&gt; 
&gt; Looks like you don&apos;t use it. Remove it please.

Done.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>458970</commentid>
    <comment_count>38</comment_count>
      <attachid>105641</attachid>
    <who name="Dirk Schulze">krit</who>
    <bug_when>2011-08-30 09:48:23 -0700</bug_when>
    <thetext>Comment on attachment 105641
Proposed patch

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

Some more snippets.

&gt; LayoutTests/svg/custom/pointer-events-on-rounded-rect.svg:19
&gt; +&lt;rect x=&quot;40&quot; y=&quot;40&quot; rx=&quot;30&quot; ry=&quot;30&quot; width=&quot;400&quot; height=&quot;300&quot; pointer-events=&quot;visibleStroke&quot; /&gt;

the test looks good, just missing the mousmove commends :)

&gt; Source/WebCore/platform/graphics/FloatRect.cpp:67
&gt; +        return (x() &lt; point.x() &amp;&amp; maxX() &gt; point.x() &amp;&amp; y() &lt; point.y() &amp;&amp; maxY() &gt; y()) ? true : false;

remove ? true : false and the unnecessary braces.

&gt; Source/WebCore/platform/graphics/FloatRect.cpp:68
&gt; +    return false;

what about early return if rect does not contain point?

&gt; Source/WebCore/rendering/svg/RenderSVGRect.cpp:110
&gt; +    // To deceide the stroke containing we create two rects which represent the inner and
&gt; +    // the outer stroke borders. The containing exists, if the point is between them.
&gt; +    float strokeWidth = this-&gt;strokeWidth();

You forgot to check for mitterlimit, dash array and line cap, if they do not use the default values, you might need to create the path and check the style in RenderSVGShape::strokeContainsSlowCase.

&gt; Source/WebCore/rendering/svg/RenderSVGRect.cpp:116
&gt; +    return ((!innerStrokeRect.contains(point) || !innerStrokeRect.comprises(point))
&gt; +            &amp;&amp; outerStrokeRect.contains(point)) ?  true : false;

Remove ?  true : false; and unnecessary braces.

&gt; Source/WebCore/rendering/svg/RenderSVGRect.cpp:122
&gt; +    if (isPath())
&gt; +        return RenderSVGShape::fillContainsSlowCase(point, fillRule);

Because you might create a path just for strokeContains (because of the different stroke styles), it might be unnecessary to call RenderSVGShape::fillContainsSlowCase. You just need this call for rounded corners. Check for the rounded corner instead.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>459037</commentid>
    <comment_count>39</comment_count>
      <attachid>105641</attachid>
    <who name="Dirk Schulze">krit</who>
    <bug_when>2011-08-30 11:23:19 -0700</bug_when>
    <thetext>Comment on attachment 105641
Proposed patch

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

&gt; Source/WebCore/rendering/svg/RenderSVGRect.cpp:90
&gt; +    if (isPath())
&gt; +        return RenderSVGShape::strokeBoundingBox();
&gt; +    // If we inflate the m_rect with the half size strokeWidth, we get the strokeBoundingBox in non-fallback path mode.
&gt; +    BoundingRectStrokeStyleApplier strokeStyle(this, style());
&gt; +    FloatRect strokeRect = m_rect;
&gt; +    strokeRect.inflate(this-&gt;strokeWidth() / 2);
&gt; +    return strokeRect;

we might need a fallback for dash array. If dash array was set, we might get no stroke, or at least one side of the rect does not need to have a stroke. Hard to determine that without the help of the underlaying graphic platform.

Also we don&apos;t need to the path just for rounded corners... The same for mitterlimit and other styles... Just dash array needs a fallback to path.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>460377</commentid>
    <comment_count>40</comment_count>
      <attachid>105940</attachid>
    <who name="Renata Hodovan">rhodovan.u-szeged</who>
    <bug_when>2011-09-01 04:38:59 -0700</bug_when>
    <thetext>Created attachment 105940
Propsed patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>460418</commentid>
    <comment_count>41</comment_count>
      <attachid>105940</attachid>
    <who name="Dirk Schulze">krit</who>
    <bug_when>2011-09-01 06:53:52 -0700</bug_when>
    <thetext>Comment on attachment 105940
Propsed patch

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

Can you check if the cursor &quot;hand&quot;is just visible over the visible parts of the rect on this example please? :

&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; xmlns:xlink=&quot;http://www.w3.org/1999/xlink&quot;&gt;
&lt;clipPath id=&quot;clip&quot;&gt;
    &lt;rect width=&quot;55&quot; height=&quot;110&quot;/&gt;        
&lt;/clipPath&gt;
&lt;a xlink:href=&quot;#&quot;&gt;
&lt;rect x=&quot;5&quot; y=&quot;5&quot; width=&quot;100&quot; height=&quot;100&quot; stroke=&quot;blue&quot; fill=&quot;green&quot; stroke-width=&quot;10&quot; clip-path=&quot;url(#clip)&quot;/&gt;
&lt;/a&gt;
&lt;/svg&gt;

&gt; Source/WebCore/rendering/svg/RenderSVGRect.cpp:50
&gt; +    // Clear m_rect.
&gt; +    m_rect = FloatRect();

Can you call it m_boundingBox?

&gt; Source/WebCore/rendering/svg/RenderSVGRect.cpp:55
&gt; +    // Fallback to the parent if rect has special features.

Fallback to RenderSVGShape...

&gt; Source/WebCore/rendering/svg/RenderSVGRect.cpp:73
&gt; +    // To deceide the stroke containing we create two rects which represent the inner and
&gt; +    // the outer stroke borders. The containing exists, if the point is between them.

To decide if the stroke contains a point.... A stroke contains the point, if ...

&gt; Source/WebCore/rendering/svg/RenderSVGRect.cpp:93
&gt; +    // If we inflate the m_rect with the half size strokeWidth, we get the strokeBoundingBox in non-fallback path mode.

s/m_rect/bounding box/

&gt; Source/WebCore/rendering/svg/RenderSVGRect.cpp:95
&gt; +    FloatRect strokeRect = m_rect;
&gt; +    strokeRect.inflate(this-&gt;strokeWidth() / 2);

hm, isn&apos;t it just m_outerStrokeRect?

&gt; Source/WebCore/rendering/svg/RenderSVGRect.cpp:109
&gt; +bool RenderSVGRect::strokeContainsSlowCase(const FloatPoint&amp; point)

I really dislike this name, because this is clearly not the slow case. What about shapeDependentStrokeContains?

&gt; Source/WebCore/rendering/svg/RenderSVGRect.cpp:115
&gt; +bool RenderSVGRect::fillContainsSlowCase(const FloatPoint&amp; point, const WindRule&amp; fillRule) const

same here, what about shapeDependentFillContains?

&gt; Source/WebCore/rendering/svg/RenderSVGShape.cpp:166
&gt; +    if (m_needsBoundariesUpdate)
&gt; +        updateCachedBoundariesInParents = true;

Don&apos;t you need to clear the rects for RenderSVGRect here as well and look if you must set/remove fallback flag? I thought this is called for stroke style changes.

&gt; Source/WebCore/rendering/svg/RenderSVGShape.cpp:179
&gt; +    if (needsShapeUpdate || m_needsBoundariesUpdate) {
&gt; +        updateCachedBoundaries();
&gt; +        m_needsBoundariesUpdate = false;
&gt; +    }

Maybe you can make updateCachedBoundaries() virtual and add it ti RenderSVGRect as well. After calling this function you have to decide if you need to update boundaries or may need to call RenderSVGShape::updateCachedBoundaries(). Make sure that you don&apos;t do work twice. Would be insane to refresh all boundaries in createShape() and right afterwards in updateCacheBoundaries().

&gt; Source/WebCore/rendering/svg/RenderSVGShape.h:85
&gt; +    void setIsFillFallback() { m_fillFallback = true; }
&gt; +    bool isFillFallback() const { return m_fillFallback; }

Shouldn&apos;t setIsFallback take a argument, so that you can reset it later if needed?


I couldn&apos;t review everything. I&apos;ll definitely come back to the review, but must go... I didn&apos;t not check the correct use of isFallback right now. Still some comments that need to address.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>460717</commentid>
    <comment_count>42</comment_count>
      <attachid>105940</attachid>
    <who name="Dirk Schulze">krit</who>
    <bug_when>2011-09-01 12:53:26 -0700</bug_when>
    <thetext>Comment on attachment 105940
Propsed patch

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

Second part of the review. The handling of fallback looks good to me.

&gt; LayoutTests/svg/custom/pointer-events-on-rounded-rect.svg:21
&gt; +&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot;&gt;
&gt; +&lt;defs&gt;
&gt; +
&gt; +&lt;style type=&quot;text/css&quot;&gt;&lt;![CDATA[
&gt; +rect {
&gt; +	fill: yellow;
&gt; +	fill-opacity: 0.5;
&gt; +	stroke: green;
&gt; +	stroke-width: 20px;
&gt; +	stroke-linejoin: bevel;
&gt; +	stroke-dasharray: 50 15;
&gt; +}
&gt; +rect:hover {
&gt; +	stroke: red;
&gt; +} 
&gt; +]]&gt;&lt;/style&gt;
&gt; +&lt;/defs&gt;
&gt; +
&gt; +&lt;rect x=&quot;40&quot; y=&quot;40&quot; rx=&quot;30&quot; ry=&quot;30&quot; width=&quot;400&quot; height=&quot;300&quot; pointer-events=&quot;visibleStroke&quot; /&gt;
&gt; +
&gt; +&lt;/svg&gt;

I&apos;d like to see automatized dumpAsText tests. You added manual tests. See LayoutTests/svg/custom/pointer-events-on-svg-with-pointer.xhtml

&gt; LayoutTests/svg/custom/pointer-events-with-linecaps-and-miterlimits.svg:22
&gt; +&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot;&gt;
&gt; +&lt;defs&gt;
&gt; +
&gt; +&lt;style type=&quot;text/css&quot;&gt;&lt;![CDATA[
&gt; +rect {
&gt; +	fill: none;
&gt; +	fill-opacity: 0.5;
&gt; +	stroke: green;
&gt; +	stroke-width: 40px;
&gt; +	stroke-miterlimit: 1;
&gt; +	stroke-linecap: round;
&gt; +	stroke-dasharray: 50 54;
&gt; +}
&gt; +rect:hover {
&gt; +	stroke: red;
&gt; +} 
&gt; +]]&gt;&lt;/style&gt;
&gt; +&lt;/defs&gt;
&gt; +
&gt; +&lt;rect x=&quot;40&quot; y=&quot;40&quot; width=&quot;400&quot; height=&quot;300&quot; pointer-events=&quot;visibleStroke&quot; /&gt;
&gt; +
&gt; +&lt;/svg&gt;

ditto.

&gt; Source/WebCore/rendering/svg/RenderSVGRect.cpp:86
&gt; +    if (isFillFallback())
&gt; +        return RenderSVGShape::objectBoundingBox();
&gt; +    return m_rect;

hm, why do you need the fallback here? rounded corners don&apos;t matter for the bounding box. Ah I guess because you created a Path, you don&apos;t have information.

&gt; Source/WebCore/rendering/svg/RenderSVGRect.cpp:111
&gt; +    return (!m_innerStrokeRect.contains(point) || !m_innerStrokeRect.comprises(point))

Isn&apos;t it enough ti check for !m_innerStrokeRect.comprises(point)? Doesn&apos;t comprises just check if a point is inside the rect boundaries?

&gt; Source/WebCore/rendering/svg/RenderSVGShape.cpp:56
&gt; +    , m_needsBoundariesUpdate(false) // default is false, the cached rects are empty from the beginning
&gt; +    , m_needsShapeUpdate(true) // default is true, so we grab a Path object once from SVGStyledTransformableElement
&gt; +    , m_needsTransformUpdate(true) // default is true, so we grab a AffineTransform object once from SVGStyledTransformableElement

Can you change the style of these comments to sentences.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>462078</commentid>
    <comment_count>43</comment_count>
    <who name="Renata Hodovan">rhodovan.u-szeged</who>
    <bug_when>2011-09-05 02:24:37 -0700</bug_when>
    <thetext>&gt; &gt; Source/WebCore/rendering/svg/RenderSVGShape.cpp:179
&gt; &gt; +    if (needsShapeUpdate || m_needsBoundariesUpdate) {
&gt; &gt; +        updateCachedBoundaries();
&gt; &gt; +        m_needsBoundariesUpdate = false;
&gt; &gt; +    }
&gt; 
&gt; Maybe you can make updateCachedBoundaries() virtual and add it ti RenderSVGRect as well. After calling this function you have to decide if you need to update boundaries or may need to call RenderSVGShape::updateCachedBoundaries(). Make sure that you don&apos;t do work twice. Would be insane to refresh all boundaries in createShape() and right afterwards in updateCacheBoundaries().
updateCacheBoundaries() contains only general tasks, except the part with markers. I can separate it into a new virtual function, but the others should stay where they are now. In my opinion at least :)

&gt; I&apos;d like to see automatized dumpAsText tests. You added manual tests. See LayoutTests/svg/custom/pointer-events-on-svg-with-pointer.xhtml
This test works with SVG elements and not attributes. How can I bind attributes, like stroke, to an eventlistener?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>462116</commentid>
    <comment_count>44</comment_count>
    <who name="Dirk Schulze">krit</who>
    <bug_when>2011-09-05 05:08:35 -0700</bug_when>
    <thetext>(In reply to comment #43)
&gt; &gt; &gt; Source/WebCore/rendering/svg/RenderSVGShape.cpp:179
&gt; &gt; &gt; +    if (needsShapeUpdate || m_needsBoundariesUpdate) {
&gt; &gt; &gt; +        updateCachedBoundaries();
&gt; &gt; &gt; +        m_needsBoundariesUpdate = false;
&gt; &gt; &gt; +    }
&gt; &gt; 
&gt; &gt; Maybe you can make updateCachedBoundaries() virtual and add it ti RenderSVGRect as well. After calling this function you have to decide if you need to update boundaries or may need to call RenderSVGShape::updateCachedBoundaries(). Make sure that you don&apos;t do work twice. Would be insane to refresh all boundaries in createShape() and right afterwards in updateCacheBoundaries().
&gt; updateCacheBoundaries() contains only general tasks, except the part with markers. I can separate it into a new virtual function, but the others should stay where they are now. In my opinion at least :)
I&apos;m fine with this idea as well.

&gt; 
&gt; &gt; I&apos;d like to see automatized dumpAsText tests. You added manual tests. See LayoutTests/svg/custom/pointer-events-on-svg-with-pointer.xhtml
&gt; This test works with SVG elements and not attributes. How can I bind attributes, like stroke, to an event listener?
You don&apos;t need dynamic testing of stroke. You just want to know if an event listener fires if you use pointer-events. Some pseudo code:

&lt;rect id=&quot;fallback&quot; width=&quot;200&quot; height=&quot;200&quot; fill=&quot;green&quot; onclick=&quot;shouldFire()&quot;/&gt;
&lt;rect id=&quot;strokedRect&quot; x=&quot;5&quot; y=&quot;5&quot; width=&quot;190&quot; height=&quot;190&quot; fill=&quot;none&quot; stroke=&quot;blue&quot; stroke-width=&quot;10&quot; pointer-events=&quot;visibleStroke&quot; style=&quot;&lt;yourStrokeStyle&gt;&quot; onclick=&quot;shouldNotFire()&quot;/&gt;
&lt;script&gt;
function shouldFire() {
  alert(&quot;great it works!&quot;);
}
function shouldNotFire() {
  alert(&quot;Oops! Something is wrong&quot;);
}
&lt;/script&gt;

You have to move the pointer of the mouse to a point on the stroke of the second rect, where the pointer _is not_ visible and fire the mouse click event.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>464011</commentid>
    <comment_count>45</comment_count>
      <attachid>106727</attachid>
    <who name="Renata Hodovan">rhodovan.u-szeged</who>
    <bug_when>2011-09-08 06:05:26 -0700</bug_when>
    <thetext>Created attachment 106727
Propsed patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>465283</commentid>
    <comment_count>46</comment_count>
      <attachid>106727</attachid>
    <who name="Andreas Kling">kling</who>
    <bug_when>2011-09-10 04:46:41 -0700</bug_when>
    <thetext>Comment on attachment 106727
Propsed patch

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

A little drive-by nitpicking on my way to work:

&gt; Source/WebCore/rendering/svg/RenderSVGRect.cpp:56
&gt; +    bool hasRx = rect-&gt;hasAttribute(SVGNames::rxAttr);
&gt; +    bool hasRy = rect-&gt;hasAttribute(SVGNames::ryAttr);
&gt; +    // Fallback to RenderSVGShape if rect has special features.
&gt; +    if (hasRx || hasRy) {

This would be slightly more efficient if written as:
if (rect-&gt;hasAttribute(SVGNames::rxAttr) || rect-&gt;hasAttribute(SVGNames::ryAttr) {
(Since you don&apos;t use hasRx or hasRy for anything but this.)

&gt; Source/WebCore/rendering/svg/RenderSVGRect.cpp:89
&gt; +FloatRect RenderSVGRect::strokeBoundingBox()

This method reads like it should be const, just like objectBoundingBox().
Maybe I&apos;m missing something?

&gt; Source/WebCore/rendering/svg/RenderSVGRect.cpp:106
&gt; +bool RenderSVGRect::shapeDependentStrokeContains(const FloatPoint&amp; point)

Ditto.

&gt; Source/WebCore/rendering/svg/RenderSVGRect.cpp:111
&gt; +bool RenderSVGRect::shapeDependentFillContains(const FloatPoint&amp; point, const WindRule&amp; fillRule) const

There&apos;s no benefit to passing an enum (like WindRule) as a const-reference. &quot;const WindRule fillRule&quot; would be just fine.

&gt; Source/WebCore/rendering/svg/RenderSVGShape.cpp:107
&gt; +bool RenderSVGShape::shapeDependentFillContains(const FloatPoint&amp; point, const WindRule&amp; fillRule) const

Same comment as earlier about &quot;const WindRule&amp;&quot;

&gt; Source/WebCore/rendering/svg/RenderSVGShape.cpp:112
&gt; +bool RenderSVGShape::fillContains(const FloatPoint&amp; point, bool requiresFill, WindRule fillRule)

&quot;WindRule fillRule&quot; could be marked const since the function does not modify it. NABD really.

&gt; Source/WebCore/rendering/svg/RenderSVGShape.h:97
&gt; +    // Hit-detection seperated for the fill and the stroke

seperated -&gt; separated

&gt; Source/WebCore/rendering/svg/RenderSVGShape.h:130
&gt; +    bool m_needsBoundariesUpdate : 1;
&gt; +    bool m_needsShapeUpdate : 1;
&gt; +    bool m_needsTransformUpdate : 1;
&gt; +    bool m_fillFallback : 1;
&gt; +    bool m_strokeContainsFallBack : 1;

You should move these to the end of the member list to maximize space efficiency.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>465287</commentid>
    <comment_count>47</comment_count>
      <attachid>106727</attachid>
    <who name="Dirk Schulze">krit</who>
    <bug_when>2011-09-10 06:20:51 -0700</bug_when>
    <thetext>Comment on attachment 106727
Propsed patch

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

It definitely looks a lot better and you&apos;re nearly done! But still some more comments.

&gt; LayoutTests/svg/custom/pointer-events-on-rounded-rect.xhtml:14
&gt; +	stroke-dasharray: 50 15;

se later comment.

&gt; LayoutTests/svg/custom/pointer-events-with-linecaps-and-miterlimits.xhtml:14
&gt; +	stroke-dasharray: 20 50;

lion changed the behavior of dash array. Not sure if we can influence it in GraphicsContextCG (just noticed it on running pixel tests). Maybe we should leave out dash array and check just the corner (11, 11). Not that we have to roll out the patch because lion comments about failures.

&gt; Source/WebCore/ChangeLog:9
&gt; +        handle the fallback cases (e.g.: rounded rects, special strokes, pointer events, etc.)

Missing dot at the end of the sentence :)

&gt; Source/WebCore/rendering/svg/RenderSVGPath.cpp:52
&gt; +    if (style()-&gt;svgStyle()-&gt;hasMarkers()) {
&gt;          FloatRect markerBounds = calculateMarkerBoundsIfNeeded();
&gt;          if (!markerBounds.isEmpty())
&gt; -            m_strokeAndMarkerBoundingBox.unite(markerBounds);
&gt; +            strokeBoundingBox().unite(markerBounds);

Oh that looks wrong! That makes no sense. You get a FloatRect from strokeBoundingBox() and make a union with markerBounds but neither return it nor store it? What about m_strokeAndMarkerBoundingBox? Why not store the values here?

Doesn&apos;t it fire on a test? maybe on dynamically removing the markers of a path? Is so, I&apos;d like to see another test.

&gt; Source/WebCore/rendering/svg/RenderSVGPath.h:44
&gt; +    void inflateWithMarkerBounds();

put a virtual in front of this.

&gt; Source/WebCore/rendering/svg/RenderSVGRect.cpp:67
&gt; +    float widthValue = rect-&gt;width().value(rect);
&gt; +    if (widthValue &lt;= 0)
&gt; +        return;
&gt; +
&gt; +    float heightValue = rect-&gt;height().value(rect);
&gt; +    if (heightValue &lt;= 0)
&gt; +        return;

What about:

FloatSize boundingBoxSize(rect-&gt;width().value(rect), rect-&gt;height().value(rect));
if (boundingBoxSize.isEmpty())
    return;

&gt; Source/WebCore/rendering/svg/RenderSVGRect.cpp:71
&gt; +    float xValue = rect-&gt;x().value(rect);
&gt; +    float yValue = rect-&gt;y().value(rect);
&gt; +    m_boundingBox = FloatRect(xValue, yValue, widthValue, heightValue);

m_boundingBox = FloatRect(FloatPoint(rect-&gt;x().value(rect), rect-&gt;y().value(rect)), boundingBoxSize);

&gt; Source/WebCore/rendering/svg/RenderSVGShape.cpp:392
&gt; +void RenderSVGShape::inflateWithMarkerBounds()
&gt; +{
&gt; +}

remove it here.

&gt; Source/WebCore/rendering/svg/RenderSVGShape.h:112
&gt; +    virtual void inflateWithMarkerBounds();

empty braces behind the function.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>465535</commentid>
    <comment_count>48</comment_count>
      <attachid>107031</attachid>
    <who name="Renata Hodovan">rhodovan.u-szeged</who>
    <bug_when>2011-09-12 02:17:54 -0700</bug_when>
    <thetext>Created attachment 107031
Propsed patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>465536</commentid>
    <comment_count>49</comment_count>
      <attachid>107032</attachid>
    <who name="Renata Hodovan">rhodovan.u-szeged</who>
    <bug_when>2011-09-12 02:19:25 -0700</bug_when>
    <thetext>Created attachment 107032
Propsed patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>465537</commentid>
    <comment_count>50</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-09-12 02:20:14 -0700</bug_when>
    <thetext>Attachment 107031 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;]&quot; exit_code: 1

Total errors found: 0 in 0 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>465548</commentid>
    <comment_count>51</comment_count>
    <who name="Dirk Schulze">krit</who>
    <bug_when>2011-09-12 03:12:30 -0700</bug_when>
    <thetext>Did you forgot to address kliegs mentions?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>465549</commentid>
    <comment_count>52</comment_count>
      <attachid>107032</attachid>
    <who name="Nikolas Zimmermann">zimmermann</who>
    <bug_when>2011-09-12 03:13:42 -0700</bug_when>
    <thetext>Comment on attachment 107032
Propsed patch

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

You&apos;re making good progress, still lots of comments from a first quick round of review. Still didn&apos;t check everything in detail.

&gt; LayoutTests/svg/custom/pointer-events-on-rounded-rect-expected.txt:1
&gt; +PASSED: fallbackRect had pointer

No ChangeLog for LayoutTests included?

&gt; LayoutTests/svg/custom/pointer-events-on-svg-with-pointer.xhtml:6
&gt; +&lt;defs&gt;

What&apos;s this change about? Needs explanation in the ChangeLog.

&gt; Source/WebCore/ChangeLog:6
&gt; +        Adding a new framework to support the rendering of SVG shapes.

I&apos;d propose: Adding a new framework to support more efficient rendering of SVG shapes.

&gt; Source/WebCore/ChangeLog:8
&gt; +        The main logic takes place in RenderSVGShape class and every renderer will
&gt; +        inherit from it. Since its code base is mostly moved from RenderSVGPath it&apos;s suitable to

Well this is not correct. RenderSVGEllipse/Rect etc will inherit from it, but not RenderSVGText etc. It&apos;s worded a bit unfortunate, please fix it :-)

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

In general this ChangeLog should be more descriptive, this is a heavy change and thus deserves a good explaination.

&gt; Source/WebCore/platform/graphics/FloatRect.h:149
&gt; +    bool comprises(const FloatPoint&amp;) const;

Interssting, never heard the term &quot;comprises&quot; before. The only difference to contains is &lt; -&gt; &lt;= right?
Couldn&apos;t this be an enum passed to contains() named &quot;ContainsMode&quot;?

&gt; Source/WebCore/rendering/RenderObject.h:359
&gt; +    virtual bool isSVGLine() const { return false; }

Line? This is not yet in, is it?

&gt; Source/WebCore/rendering/svg/RenderSVGPath.h:35
&gt; +// FIXME: RenderSVGPath will be removed when all SVG shapes will be rendered via RenderSVGShape.
&gt; +class RenderSVGPath : public RenderSVGShape {

Huh, really? I thought it would still stay. It would be confusing if RenderSVGShape would be the main renderer for &lt;path&gt;, and RenderSVGRect inheriting from RenderSVGShape for &lt;rect&gt;.
I think we should only let &quot;leaf&quot; classes be used for specific svg elements like &lt;circle&gt;, &lt;rect&gt;, &lt;path&gt;.

&gt; Source/WebCore/rendering/svg/RenderSVGRect.cpp:49
&gt; +    // Clear m_boundingBox.

Does this serve a comment? It&apos;s not really helpful, it doesn&apos;t state a reason.

&gt; Source/WebCore/rendering/svg/RenderSVGRect.cpp:56
&gt; +    bool hasRx = rect-&gt;hasAttribute(SVGNames::rxAttr);
&gt; +    bool hasRy = rect-&gt;hasAttribute(SVGNames::ryAttr);
&gt; +    // Fallback to RenderSVGShape if rect has special features.
&gt; +    if (hasRx || hasRy) {

I&apos;d rather see the fallback code decision in a seperated function:
bool shouldFallbackToPathRendering().

Hm, I thought Dirk mentioned more corner cases, you&apos;re not handling them here?

&gt; Source/WebCore/rendering/svg/RenderSVGRect.cpp:86
&gt; +    if (isFillFallback() &amp;&amp; !style()-&gt;svgStyle()-&gt;strokeDashArray().isEmpty())

Why that extra condition? If the strokeDashArray is empty and isFillFallback is true, shouldn&apos;t RenderSVGshape be asked for its stroke bbox??

&gt; Source/WebCore/rendering/svg/RenderSVGRect.cpp:98
&gt; +    context-&gt;strokeRect(m_boundingBox, this-&gt;strokeWidth());

s/this-&gt;//

&gt; Source/WebCore/rendering/svg/RenderSVGRect.h:46
&gt; +    virtual bool isEmpty() const { return hasPath() ? RenderSVGShape::isEmpty() : m_boundingBox.isEmpty(); };

Here hasPath() is used not isFillFallback(), is that on purpose?
You should make this a multi-line function, and/or move in the cpp file.

&gt; Source/WebCore/rendering/svg/RenderSVGResourcePattern.cpp:191
&gt; +    if (/*path &amp;&amp; */!(resourceMode &amp; ApplyToTextMode)) {

You can remove the comment.

&gt; Source/WebCore/rendering/svg/RenderSVGResourceSolidColor.cpp:83
&gt; +    if (!(resourceMode &amp; ApplyToTextMode)) {

We could add an early return here.

&gt; Source/WebCore/rendering/svg/RenderSVGShape.cpp:139
&gt; +        if (!m_path.get())

The .get() is superfluous.

&gt; Source/WebCore/rendering/svg/RenderSVGShape.cpp:140
&gt; +            RenderSVGShape::createShape();

This should be encapsulated in a descriptive named function, otherwhise we&apos;ll wonder why only these conditions are checked.

&gt; Source/WebCore/rendering/svg/RenderSVGShape.cpp:141
&gt; +        return RenderSVGShape::shapeDependentStrokeContains(point);

You want to avoid calling the shapeDependent function from the derived class, thus that RenderSVGShape:: prefix here?
This is easy to misread.
The whole stuff should be commented more, hard to follow at the moment.

&gt; Source/WebCore/rendering/svg/SVGRenderSupport.cpp:156
&gt; +            filter-&gt;postApplyResource(static_cast&lt;RenderSVGShape*&gt;(object), paintInfo.context, ApplyToDefaultMode, 0);

That&apos;s not a good idea, to blindly cast here!
This is also used for eg. RenderSVGContainer or Text who call finish/preparerenderSVGContent.
How is this supposed to work?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>467014</commentid>
    <comment_count>53</comment_count>
      <attachid>107330</attachid>
    <who name="Renata Hodovan">rhodovan.u-szeged</who>
    <bug_when>2011-09-14 07:09:19 -0700</bug_when>
    <thetext>Created attachment 107330
Propsed patch

&gt; &gt; Source/WebCore/ChangeLog:6
&gt; &gt; +        Adding a new framework to support the rendering of SVG shapes.
&gt; 
&gt; I&apos;d propose: Adding a new framework to support more efficient rendering of SVG shapes.
OK.

&gt; &gt; Source/WebCore/ChangeLog:8
&gt; &gt; +        The main logic takes place in RenderSVGShape class and every renderer will
&gt; &gt; +        inherit from it. Since its code base is mostly moved from RenderSVGPath it&apos;s suitable to
&gt; 
&gt; Well this is not correct. RenderSVGEllipse/Rect etc will inherit from it, but not RenderSVGText etc. It&apos;s worded a bit unfortunate, please fix it :-)
OK.

&gt; &gt; Source/WebCore/ChangeLog:10
&gt; &gt; +
&gt; 
&gt; In general this ChangeLog should be more descriptive, this is a heavy change and thus deserves a good explaination.
&gt; 
&gt; &gt; Source/WebCore/platform/graphics/FloatRect.h:149
&gt; &gt; +    bool comprises(const FloatPoint&amp;) const;
&gt; 
&gt; Interssting, never heard the term &quot;comprises&quot; before. The only difference to contains is &lt; -&gt; &lt;= right?
&gt; Couldn&apos;t this be an enum passed to contains() named &quot;ContainsMode&quot;?
I don&apos;t think so it would be a good idea. Contains() is used in many places but compraises() just twice. What about if I give it a better name, eg.: isInsideRect() ?

&gt; &gt; Source/WebCore/rendering/RenderObject.h:359
&gt; &gt; +    virtual bool isSVGLine() const { return false; }
&gt; 
&gt; Line? This is not yet in, is it?
Ooops, I&apos;ve started to work on SVGLines and this snippet remained here. Deleted.

&gt; &gt; Source/WebCore/rendering/svg/RenderSVGPath.h:35
&gt; &gt; +// FIXME: RenderSVGPath will be removed when all SVG shapes will be rendered via RenderSVGShape.
&gt; &gt; +class RenderSVGPath : public RenderSVGShape {
&gt; 
&gt; Huh, really? I thought it would still stay. It would be confusing if RenderSVGShape would be the main renderer for &lt;path&gt;, and RenderSVGRect inheriting from RenderSVGShape for &lt;rect&gt;.
OK.

&gt; &gt; Source/WebCore/rendering/svg/RenderSVGRect.cpp:49
&gt; &gt; +    // Clear m_boundingBox.
&gt; 
&gt; Does this serve a comment? It&apos;s not really helpful, it doesn&apos;t state a reason.
OK.

&gt; &gt; Source/WebCore/rendering/svg/RenderSVGRect.cpp:56
&gt; &gt; +    bool hasRx = rect-&gt;hasAttribute(SVGNames::rxAttr);
&gt; &gt; +    bool hasRy = rect-&gt;hasAttribute(SVGNames::ryAttr);
&gt; &gt; +    // Fallback to RenderSVGShape if rect has special features.
&gt; &gt; +    if (hasRx || hasRy) {
&gt; 
&gt; I&apos;d rather see the fallback code decision in a seperated function:
&gt; bool shouldFallbackToPathRendering().
This function would be used from only this point. I could add an inline function what got two boolean and made a decison according to them. It seems useless, so I left out this modification now, but the comment above is updated.

&gt; Hm, I thought Dirk mentioned more corner cases, you&apos;re not handling them here?
There are handled in different places. We talked about it before. We distinguish two different fallback cases. One for painting and an other for pointer-events. Painting fallback is needed just by rounded corners and pointer events by rounded rects and special strokes.

&gt; &gt; Source/WebCore/rendering/svg/RenderSVGRect.cpp:86
&gt; &gt; +    if (isFillFallback() &amp;&amp; !style()-&gt;svgStyle()-&gt;strokeDashArray().isEmpty())
&gt; 
&gt; Why that extra condition? If the strokeDashArray is empty and isFillFallback is true, shouldn&apos;t RenderSVGshape be asked for its stroke bbox??
StrokeBoundingBox() is called by handling pointer events and as I mentioned in my previous comment we need to fallback both of rounded corners and special strokes.
 
&gt; &gt; Source/WebCore/rendering/svg/RenderSVGRect.cpp:98
&gt; &gt; +    context-&gt;strokeRect(m_boundingBox, this-&gt;strokeWidth());
&gt; 
&gt; s/this-&gt;//
Ok.

&gt; &gt; Source/WebCore/rendering/svg/RenderSVGRect.h:46
&gt; &gt; +    virtual bool isEmpty() const { return hasPath() ? RenderSVGShape::isEmpty() : m_boundingBox.isEmpty(); };
&gt; 
&gt; Here hasPath() is used not isFillFallback(), is that on purpose?
&gt; You should make this a multi-line function, and/or move in the cpp file.
I have to refer again to the two different fallback cases. It&apos;s possible that we don&apos;t have fallback by painting, because we don&apos;t have rounded rect. At the same time we have dashed stroke with pointer event, so m_path is filled.

&gt; &gt; Source/WebCore/rendering/svg/RenderSVGResourcePattern.cpp:191
&gt; &gt; +    if (/*path &amp;&amp; */!(resourceMode &amp; ApplyToTextMode)) {
&gt; 
&gt; You can remove the comment.
OK.

&gt; &gt; Source/WebCore/rendering/svg/RenderSVGResourceSolidColor.cpp:83
&gt; &gt; +    if (!(resourceMode &amp; ApplyToTextMode)) {
&gt; 
&gt; We could add an early return here.
OK. 

&gt; &gt; Source/WebCore/rendering/svg/RenderSVGShape.cpp:139
&gt; &gt; +        if (!m_path.get())
&gt; 
&gt; The .get() is superfluous.
OK.

&gt; &gt; Source/WebCore/rendering/svg/RenderSVGShape.cpp:140
&gt; &gt; +            RenderSVGShape::createShape();
&gt; 
&gt; This should be encapsulated in a descriptive named function, otherwhise we&apos;ll wonder why only these conditions are checked.
&gt; 
&gt; &gt; Source/WebCore/rendering/svg/RenderSVGShape.cpp:141
&gt; &gt; +        return RenderSVGShape::shapeDependentStrokeContains(point);
&gt; 
&gt; You want to avoid calling the shapeDependent function from the derived class, thus that RenderSVGShape:: prefix here?
Exactly! In this case I want to be sure that the ancestor is called because the derived class isn&apos;t able to handle the problem (we need fallback). The same situation like by your previous comment.

&gt; This is easy to misread.
&gt; The whole stuff should be commented more, hard to follow at the moment.
&gt; 
&gt; &gt; Source/WebCore/rendering/svg/SVGRenderSupport.cpp:156
&gt; &gt; +            filter-&gt;postApplyResource(static_cast&lt;RenderSVGShape*&gt;(object), paintInfo.context, ApplyToDefaultMode, 0);
&gt; 
&gt; That&apos;s not a good idea, to blindly cast here!
&gt; This is also used for eg. RenderSVGContainer or Text who call finish/preparerenderSVGContent.
&gt; How is this supposed to work?
You are right. It wasn&apos;t common enough. It&apos;s updated.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>467022</commentid>
    <comment_count>54</comment_count>
      <attachid>107330</attachid>
    <who name="Dirk Schulze">krit</who>
    <bug_when>2011-09-14 07:21:18 -0700</bug_when>
    <thetext>Comment on attachment 107330
Propsed patch

You did not address klieg&apos;s comments - again! https://bugs.webkit.org/show_bug.cgi?id=65769#c46</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>467025</commentid>
    <comment_count>55</comment_count>
      <attachid>107330</attachid>
    <who name="Dirk Schulze">krit</who>
    <bug_when>2011-09-14 07:39:13 -0700</bug_when>
    <thetext>Comment on attachment 107330
Propsed patch

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

Maybe Niko has more comments to RenderTreeAsText. r- because of missing changes of kling and some more comments. The code looks great in general.

&gt; Source/WebCore/ChangeLog:58
&gt; +        (WebCore::RenderSVGRect::shapeDependentStrokeContains):
&gt; +        (WebCore::RenderSVGRect::shapeDependentFillContains):

Niko is right. A line by line comment what the new functions do is not a bad idea.

&gt; Source/WebCore/platform/graphics/FloatRect.cpp:76
&gt; +bool FloatRect::isInsideRect(const FloatPoint&amp; point) const
&gt; +{
&gt; +    if (!contains(point))
&gt; +        return false;
&gt; +    return x() &lt; point.x() &amp;&amp; maxX() &gt; point.x() &amp;&amp; y() &lt; point.y() &amp;&amp; maxY() &gt; y();
&gt; +}

Niko mentioned to add a new argument to contains(const FloatPoint&amp; point, Enum ...). The default value could be the normal contains. (Even if I&apos;m not sure if that is really needed.)

&gt; Source/WebCore/rendering/svg/RenderSVGRect.cpp:56
&gt; +    ASSERT(rect);
&gt; +    bool hasRx = rect-&gt;hasAttribute(SVGNames::rxAttr);
&gt; +    bool hasRy = rect-&gt;hasAttribute(SVGNames::ryAttr);
&gt; +    // Fallback to RenderSVGShape if rect has rounded corners.

Please add a new line before comments. Makes it easier to read the code. Please consider to write 
if (rect-&gt;hasAttribute(SVGNames::rxAttr) || rect-&gt;hasAttribute(SVGNames::ryAttr)) instead like mentioned by kling.

&gt; Source/WebCore/rendering/svg/RenderSVGRect.cpp:68
&gt; +    m_boundingBox = FloatRect(FloatPoint(rect-&gt;x().value(rect), rect-&gt;y().value(rect)), boundingBoxSize);
&gt; +    // To decide if the stroke contains a point we create two rects which represent the inner and

ditto.

&gt; Source/WebCore/rendering/svg/RenderSVGResourceGradient.cpp:273
&gt; +            else if (shape)
&gt; +                shape-&gt;isPaintingFallback() ? context-&gt;fillPath(shape-&gt;path()) : shape-&gt;fillShape(context);
&gt; +        } else if (resourceMode &amp; ApplyToStrokeMode) {
&gt; +            if (path)
&gt; +                context-&gt;strokePath(*path);
&gt; +            else if (shape)
&gt; +                shape-&gt;isPaintingFallback() ? context-&gt;strokePath(shape-&gt;path()) : shape-&gt;strokeShape(context);

The code style rules mention not to use &apos;else if&apos; is it needed here? can we just use if here?

&gt; Source/WebCore/rendering/svg/RenderSVGResourcePattern.cpp:200
&gt; +        if (path)
&gt;              context-&gt;strokePath(*path);
&gt; +        else if (shape)
&gt; +            shape-&gt;isPaintingFallback() ? context-&gt;strokePath(shape-&gt;path()) : shape-&gt;strokeShape(context);

Ditto.

&gt; Source/WebCore/rendering/svg/RenderSVGResourceSolidColor.cpp:92
&gt; +    if (resourceMode &amp; ApplyToFillMode) {
&gt; +        if (path)
&gt;              context-&gt;fillPath(*path);
&gt; -        else if (resourceMode &amp; ApplyToStrokeMode)
&gt; +        else if (shape)
&gt; +            shape-&gt;isPaintingFallback() ? context-&gt;fillPath(shape-&gt;path()) : shape-&gt;fillShape(context);
&gt; +    } else if (resourceMode &amp; ApplyToStrokeMode) {
&gt; +        if (path)
&gt;              context-&gt;strokePath(*path);
&gt; +        else if (shape)
&gt; +            shape-&gt;isPaintingFallback() ? context-&gt;strokePath(shape-&gt;path()) : shape-&gt;strokeShape(context);

Ditto.

&gt; Source/WebCore/rendering/svg/RenderSVGShape.cpp:175
&gt; +        setisPaintingFallback(false);

setIsPaintingFallback, is with big I.

&gt; Source/WebCore/rendering/svg/RenderSVGShape.h:80
&gt; +        ASSERT(m_path.get());

Can the .get() removed here?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>467027</commentid>
    <comment_count>56</comment_count>
      <attachid>107331</attachid>
    <who name="Renata Hodovan">rhodovan.u-szeged</who>
    <bug_when>2011-09-14 07:53:28 -0700</bug_when>
    <thetext>Created attachment 107331
Propsed patch

(In reply to comment #54)
&gt; (From update of attachment 107330 [details])
&gt; You did not address klieg&apos;s comments - again! https://bugs.webkit.org/show_bug.cgi?id=65769#c46
To tell the truth, yes :$ Sorry, I forgot it. Updated.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>467028</commentid>
    <comment_count>57</comment_count>
    <who name="Renata Hodovan">rhodovan.u-szeged</who>
    <bug_when>2011-09-14 07:56:26 -0700</bug_when>
    <thetext>(In reply to comment #55)
&gt; (From update of attachment 107330 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=107330&amp;action=review
&gt; 
&gt; Maybe Niko has more comments to RenderTreeAsText. r- because of missing changes of kling and some more comments. The code looks great in general.
&gt; 
&gt; &gt; Source/WebCore/ChangeLog:58
&gt; &gt; +        (WebCore::RenderSVGRect::shapeDependentStrokeContains):
&gt; &gt; +        (WebCore::RenderSVGRect::shapeDependentFillContains):
&gt; 
&gt; Niko is right. A line by line comment what the new functions do is not a bad idea.
&gt; 
&gt; &gt; Source/WebCore/platform/graphics/FloatRect.cpp:76
&gt; &gt; +bool FloatRect::isInsideRect(const FloatPoint&amp; point) const
&gt; &gt; +{
&gt; &gt; +    if (!contains(point))
&gt; &gt; +        return false;
&gt; &gt; +    return x() &lt; point.x() &amp;&amp; maxX() &gt; point.x() &amp;&amp; y() &lt; point.y() &amp;&amp; maxY() &gt; y();
&gt; &gt; +}
&gt; 
&gt; Niko mentioned to add a new argument to contains(const FloatPoint&amp; point, Enum ...). The default value could be the normal contains. (Even if I&apos;m not sure if that is really needed.)
&gt; 
&gt; &gt; Source/WebCore/rendering/svg/RenderSVGRect.cpp:56
&gt; &gt; +    ASSERT(rect);
&gt; &gt; +    bool hasRx = rect-&gt;hasAttribute(SVGNames::rxAttr);
&gt; &gt; +    bool hasRy = rect-&gt;hasAttribute(SVGNames::ryAttr);
&gt; &gt; +    // Fallback to RenderSVGShape if rect has rounded corners.
&gt; 
&gt; Please add a new line before comments. Makes it easier to read the code. Please consider to write 
&gt; if (rect-&gt;hasAttribute(SVGNames::rxAttr) || rect-&gt;hasAttribute(SVGNames::ryAttr)) instead like mentioned by kling.
&gt; 
&gt; &gt; Source/WebCore/rendering/svg/RenderSVGRect.cpp:68
&gt; &gt; +    m_boundingBox = FloatRect(FloatPoint(rect-&gt;x().value(rect), rect-&gt;y().value(rect)), boundingBoxSize);
&gt; &gt; +    // To decide if the stroke contains a point we create two rects which represent the inner and
&gt; 
&gt; ditto.
&gt; 
&gt; &gt; Source/WebCore/rendering/svg/RenderSVGResourceGradient.cpp:273
&gt; &gt; +            else if (shape)
&gt; &gt; +                shape-&gt;isPaintingFallback() ? context-&gt;fillPath(shape-&gt;path()) : shape-&gt;fillShape(context);
&gt; &gt; +        } else if (resourceMode &amp; ApplyToStrokeMode) {
&gt; &gt; +            if (path)
&gt; &gt; +                context-&gt;strokePath(*path);
&gt; &gt; +            else if (shape)
&gt; &gt; +                shape-&gt;isPaintingFallback() ? context-&gt;strokePath(shape-&gt;path()) : shape-&gt;strokeShape(context);
&gt; 
&gt; The code style rules mention not to use &apos;else if&apos; is it needed here? can we just use if here?
&gt; 
&gt; &gt; Source/WebCore/rendering/svg/RenderSVGResourcePattern.cpp:200
&gt; &gt; +        if (path)
&gt; &gt;              context-&gt;strokePath(*path);
&gt; &gt; +        else if (shape)
&gt; &gt; +            shape-&gt;isPaintingFallback() ? context-&gt;strokePath(shape-&gt;path()) : shape-&gt;strokeShape(context);
&gt; 
&gt; Ditto.
&gt; 
&gt; &gt; Source/WebCore/rendering/svg/RenderSVGResourceSolidColor.cpp:92
&gt; &gt; +    if (resourceMode &amp; ApplyToFillMode) {
&gt; &gt; +        if (path)
&gt; &gt;              context-&gt;fillPath(*path);
&gt; &gt; -        else if (resourceMode &amp; ApplyToStrokeMode)
&gt; &gt; +        else if (shape)
&gt; &gt; +            shape-&gt;isPaintingFallback() ? context-&gt;fillPath(shape-&gt;path()) : shape-&gt;fillShape(context);
&gt; &gt; +    } else if (resourceMode &amp; ApplyToStrokeMode) {
&gt; &gt; +        if (path)
&gt; &gt;              context-&gt;strokePath(*path);
&gt; &gt; +        else if (shape)
&gt; &gt; +            shape-&gt;isPaintingFallback() ? context-&gt;strokePath(shape-&gt;path()) : shape-&gt;strokeShape(context);
&gt; 
&gt; Ditto.
&gt; 
&gt; &gt; Source/WebCore/rendering/svg/RenderSVGShape.cpp:175
&gt; &gt; +        setisPaintingFallback(false);
&gt; 
&gt; setIsPaintingFallback, is with big I.
&gt; 
&gt; &gt; Source/WebCore/rendering/svg/RenderSVGShape.h:80
&gt; &gt; +        ASSERT(m_path.get());
&gt; 
&gt; Can the .get() removed here?
Oohh, I&apos;ve just read this second comment, but have to run. I&apos;ll update it tonight or tomorrow :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>467820</commentid>
    <comment_count>58</comment_count>
      <attachid>107500</attachid>
    <who name="Renata Hodovan">rhodovan.u-szeged</who>
    <bug_when>2011-09-15 08:40:39 -0700</bug_when>
    <thetext>Created attachment 107500
Propsed patch

Style bot will be red because of the line:
bool contains(const FloatPoint&amp;, ContainsMode containsMode = ContainsRect) const;
containsMode should be removed, but it would be really ugly solution for me...</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>467822</commentid>
    <comment_count>59</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-09-15 08:44:24 -0700</bug_when>
    <thetext>Attachment 107500 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;LayoutTests/ChangeLog&apos;, u&apos;LayoutTests/svg/...&quot; exit_code: 1

Source/WebCore/platform/graphics/FloatRect.h:154:  The parameter name &quot;containsMode&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Total errors found: 1 in 47 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>467895</commentid>
    <comment_count>60</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2011-09-15 10:32:14 -0700</bug_when>
    <thetext>(In reply to comment #58)
&gt; Style bot will be red because of the line:
&gt; bool contains(const FloatPoint&amp;, ContainsMode containsMode = ContainsRect) const;
&gt; containsMode should be removed, but it would be really ugly solution for me...

I suppose it’s a matter of taste. I like it much better without containsMode.

    bool contains(const FloatPoint&amp;, ContainsMode = ContainsRect) const;

Maybe it’s that you’re not used to code that looks like that and I am. We definitely have lines like that in many places in WebKit.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>467979</commentid>
    <comment_count>61</comment_count>
      <attachid>107524</attachid>
    <who name="Renata Hodovan">rhodovan.u-szeged</who>
    <bug_when>2011-09-15 12:08:03 -0700</bug_when>
    <thetext>Created attachment 107524
Proposed patch

Fix style error and FloatRect::contains() function.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>467999</commentid>
    <comment_count>62</comment_count>
      <attachid>107500</attachid>
    <who name="Dirk Schulze">krit</who>
    <bug_when>2011-09-15 12:29:34 -0700</bug_when>
    <thetext>Comment on attachment 107500
Propsed patch

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

Looks great. I just found some snippets.

&gt; Source/WebCore/ChangeLog:47
&gt; +        (WebCore::RenderSVGPath::inflateWithMarkerBounds):Unite the markerBounds with strokeBoundingBox.

space after &apos;:&apos;

&gt; Source/WebCore/ChangeLog:64
&gt; +        (WebCore::RenderSVGResource::postApplyResource):A new shape argument was added to allow shape specific faster painting.

ditto.

&gt;&gt; Source/WebCore/platform/graphics/FloatRect.h:154
&gt;&gt; +    bool contains(const FloatPoint&amp;, ContainsMode containsMode = ContainsRect) const;
&gt; 
&gt; The parameter name &quot;containsMode&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]

I agree to reni. ContainsMode = ContainsRect looks strange to me as well. On the other hand: it is no code duplication.

&gt; Source/WebCore/rendering/svg/RenderSVGResourceGradient.cpp:268
&gt; +            else if (shape)
&gt; +                shape-&gt;isPaintingFallback() ? context-&gt;fillPath(shape-&gt;path()) : shape-&gt;fillShape(context);

Can&apos;t shape-&gt;fillShape(context) look itself if it is using the fallback? Someone reading the resources code might not understand the sense of this. 
Same for the other resources.

When else do we get a path that is not a shape here? For texts? I think so. Hm.. don&apos;t see a way to avoid passing RenderSVGShape*. Still the checkup should be done in the renderer.

&gt; Source/WebCore/rendering/svg/RenderSVGResourceGradient.cpp:274
&gt; +            if (path)
&gt; +                context-&gt;strokePath(*path);
&gt; +            else if (shape)
&gt; +                shape-&gt;isPaintingFallback() ? context-&gt;strokePath(shape-&gt;path()) : shape-&gt;strokeShape(context);

Ditto.

Marking it for r- because of shape-&gt;fillShape for now. If it should not be possible to change that, write a comment. Great work!!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>468000</commentid>
    <comment_count>63</comment_count>
      <attachid>107524</attachid>
    <who name="Dirk Schulze">krit</who>
    <bug_when>2011-09-15 12:30:30 -0700</bug_when>
    <thetext>Comment on attachment 107524
Proposed patch

See comment before.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>468589</commentid>
    <comment_count>64</comment_count>
      <attachid>107681</attachid>
    <who name="Renata Hodovan">rhodovan.u-szeged</who>
    <bug_when>2011-09-16 10:36:39 -0700</bug_when>
    <thetext>Created attachment 107681
Propsed patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>469067</commentid>
    <comment_count>65</comment_count>
    <who name="Renata Hodovan">rhodovan.u-szeged</who>
    <bug_when>2011-09-17 05:42:56 -0700</bug_when>
    <thetext>The WIN bot is red because I missed to set back the ASSERT&apos;s condition in RenderSVGResourceFilter::postApplyResource() from shape to object. It didn&apos;t turn out in release build, sorry. Should I upload it again?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>469369</commentid>
    <comment_count>66</comment_count>
      <attachid>107681</attachid>
    <who name="Andreas Kling">kling</who>
    <bug_when>2011-09-19 06:55:12 -0700</bug_when>
    <thetext>Comment on attachment 107681
Propsed patch

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

&gt; Source/WebCore/platform/graphics/FloatRect.h:154
&gt; +    bool contains(const FloatPoint&amp;, ContainsMode = ContainsRect) const;

I am not a fan of this API for three reasons:

1) We&apos;re out-of-lining FloatRect::contains() which may have performance implications. Do we know it doesn&apos;t? Could we keep it inline?
2) The enum values in ContainsMode (ContainsRect and InsideRect) are bad. What is the difference between ContainsRect and InsideRect? The names of the modes should make it perfectly clear what they do, I shouldn&apos;t have to look inside FloatRect.cpp for this information.
3) I don&apos;t see the InsideRect mode used anywhere!

&gt; Source/WebCore/rendering/svg/RenderSVGPath.h:36
&gt; -    explicit RenderSVGPath(SVGStyledTransformableElement*);
&gt; +    RenderSVGPath(SVGStyledTransformableElement*);

Why no longer explicit?

&gt; Source/WebCore/rendering/svg/RenderSVGRect.cpp:112
&gt; +    return !m_innerStrokeRect.contains(point, FloatRect::ContainsRect);

Since ContainsRect is the default value of the 2nd parameter, you can (and should) omit it here.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>476043</commentid>
    <comment_count>67</comment_count>
      <attachid>109287</attachid>
    <who name="Renata Hodovan">rhodovan.u-szeged</who>
    <bug_when>2011-09-30 05:37:54 -0700</bug_when>
    <thetext>Created attachment 109287
Propsed patch

Calculating of bounding boxes are updated and a bug is filed about the shadow drawing of fillRect() function (https://bugs.webkit.org/show_bug.cgi?id=68899). It affects 3 tests. I plan to skip them until the problem will be solved.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>476660</commentid>
    <comment_count>68</comment_count>
      <attachid>109287</attachid>
    <who name="Dirk Schulze">krit</who>
    <bug_when>2011-10-02 03:44:48 -0700</bug_when>
    <thetext>Comment on attachment 109287
Propsed patch

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

The patch looks great in general. Please make sure that the commented out code doesn&apos;t cause regressions and remove it before landing!

&gt; Source/WebCore/platform/graphics/cg/GraphicsContextCG.cpp:740
&gt; +

unnecessary change.

&gt; Source/WebCore/rendering/svg/RenderSVGRect.cpp:57
&gt; +    if (rect-&gt;hasAttribute(SVGNames::rxAttr) || rect-&gt;hasAttribute(SVGNames::ryAttr) || nonScalingStroke/* || static_cast&lt;SVGElement*&gt;(node())-&gt;customStyleForRenderer()-&gt;svgStyle()-&gt;shadow()*/) {

I don&apos;t understand the commented out code. Please add a fix me what you expect in the future and remove that code. Add a ling to a bug report as well please. I hope this won&apos;t cause regressions? If so you can&apos;t land this patch.

&gt; Source/WebCore/rendering/svg/RenderSVGShape.cpp:428
&gt; +        m_strokeAndMarkerBoundingBox.unite(/*outerStrokeBoundingBox()*/strokeBoundingBox());

Do not land dead code. Are you sure strokeBoundingBox() is doing the same like outerStrokeBoundingBox()? I assume that the original code was added, because strokBoundingBox() might not give the correct result at this point? Can you clarify this first please?

&gt; Source/WebCore/rendering/svg/RenderSVGShape.h:100
&gt; +    /*virtual FloatRect outerStrokeBoundingBox() const
&gt; +    {
&gt; +        BoundingRectStrokeStyleApplier strokeStyle(this, style());
&gt; +        return m_path-&gt;strokeBoundingRect(&amp;strokeStyle);
&gt; +    }*/

Why is this commented out? Dead code shouldn&apos;t land. Remove it please.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>476885</commentid>
    <comment_count>69</comment_count>
      <attachid>109287</attachid>
    <who name="Nikolas Zimmermann">zimmermann</who>
    <bug_when>2011-10-03 04:21:09 -0700</bug_when>
    <thetext>Comment on attachment 109287
Propsed patch

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

Okay, I&apos;m revoking Dirks r+. I want to see 0 failures from cr-linux pixel test EWS first. This patch is too important.
I also have some more comments, and like to see a final patch w/o any commented code etc.

&gt; Source/WebCore/rendering/svg/RenderSVGRect.h:38
&gt; +    explicit RenderSVGRect(SVGStyledTransformableElement*);

Shouldn&apos;t this be SVGRectElement* ?

&gt; Source/WebCore/rendering/svg/RenderSVGResourceClipper.cpp:-103
&gt; -

Unncessary change.

&gt; Source/WebCore/rendering/svg/RenderSVGResourceFilter.cpp:-271
&gt; -

Ditto.

&gt; Source/WebCore/rendering/svg/RenderSVGResourceFilter.cpp:-296
&gt; -    

Ditto.

&gt; Source/WebCore/rendering/svg/RenderSVGResourceGradient.cpp:268
&gt; +            if (path)
&gt; +                context-&gt;fillPath(*path);
&gt; +            else if (shape)
&gt; +                shape-&gt;fillShape(context);

I guess at some point, we want to stop passing const Path* path to postApplyResource completly and only pass/use the RenderSVGShape object right?
This currently looks a bit weird. Maybe a FIXME would clarify it.

&gt; Source/WebCore/rendering/svg/RenderSVGResourcePattern.cpp:187
&gt; +void RenderSVGResourcePattern::postApplyResource(RenderObject*, GraphicsContext*&amp; context, unsigned short resourceMode, const Path* path, const RenderSVGShape* shape)

Same here.

&gt; Source/WebCore/rendering/svg/RenderSVGShape.cpp:66
&gt; +     m_path = adoptPtr(path);

Can&apos;t this be written as , m_path(adopPtr(path)) ?

&gt; Source/WebCore/rendering/svg/RenderSVGShape.cpp:75
&gt; +    m_path = adoptPtr(new Path);

Can m_path already be set here? Can we assert m_path is null before

&gt; Source/WebCore/rendering/svg/RenderSVGShape.cpp:147
&gt; +        if (!m_path)
&gt; +            RenderSVGShape::createShape();

Aha, so I think we can safely ASSERT(!m_path) in createShape, right?

&gt; Source/WebCore/rendering/svg/RenderSVGShape.h:55
&gt; +    void strokeStyle(GraphicsContext* gc)

s/gc/context/</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>478300</commentid>
    <comment_count>70</comment_count>
      <attachid>109781</attachid>
    <who name="Renata Hodovan">rhodovan.u-szeged</who>
    <bug_when>2011-10-05 06:29:33 -0700</bug_when>
    <thetext>Created attachment 109781
Propsed patch

&gt; Source/WebCore/rendering/svg/RenderSVGResourceGradient.cpp:268
&gt; +            if (path)
&gt; +                context-&gt;fillPath(*path);
&gt; +            else if (shape)
&gt; +                shape-&gt;fillShape(context);

I guess at some point, we want to stop passing const Path* path to postApplyResource completly and only pass/use the RenderSVGShape object right?
This currently looks a bit weird. Maybe a FIXME would clarify it.

We need to pass const Path* to postApplyResource() because it&apos;s called from SVGTextRunRenderingContext::drawSVGGlyphs() as well which is not inherited from RenderSVGShape(). So it needs to get the path value from the parameter list.

@krit: Sorry about the dead codes, I missed to delete them after the usage of the different bounding boxes was clarified. I runned layout tests with this version, so deleting the comments won&apos;t cause any regressions (btw I tested it again).

All the other propsals are fulfilled.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>478383</commentid>
    <comment_count>71</comment_count>
    <who name="Renata Hodovan">rhodovan.u-szeged</who>
    <bug_when>2011-10-05 08:36:19 -0700</bug_when>
    <thetext>I don&apos;t understand what&apos;s up with chromium ews.. these failures seem unrelated to my patch. Help me pls! O_o</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>478495</commentid>
    <comment_count>72</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2011-10-05 10:42:00 -0700</bug_when>
    <thetext>Not sure.  Something about your patch is confusing the EWS.  I wouldn&apos;t worry too much about it.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>478500</commentid>
    <comment_count>73</comment_count>
      <attachid>109781</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2011-10-05 10:47:37 -0700</bug_when>
    <thetext>Comment on attachment 109781
Propsed patch

I bet this patch causes a massive number of image test to fail, which is what&apos;s causing the problem.  I&apos;m R-ing this patch to let the bot get to the purple state so that it&apos;s not burning up tons of server resources.  Please feel free to re-nominate for review after the bot goes purple.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>479847</commentid>
    <comment_count>74</comment_count>
    <who name="Renata Hodovan">rhodovan.u-szeged</who>
    <bug_when>2011-10-07 00:27:28 -0700</bug_when>
    <thetext>(In reply to comment #73)
&gt; (From update of attachment 109781 [details])
&gt; I bet this patch causes a massive number of image test to fail, which is what&apos;s causing the problem.  I&apos;m R-ing this patch to let the bot get to the purple state so that it&apos;s not burning up tons of server resources.  Please feel free to re-nominate for review after the bot goes purple.

I tried to manage a chromium build by myself, but I faced a build error. It seems chromium doesn&apos;t see the newly added files (RenderSVGRect and RenderSVGShape). Tracking the build log I realized they aren&apos;t in the compile queue. An observation: WebCore/WebCore.gyp/webcore_svg.target.chromium.mk contains RenderSVGPath.o but it doesn&apos;t have the new files objects. Any idea what could be the problem?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>479936</commentid>
    <comment_count>75</comment_count>
    <who name="Renata Hodovan">rhodovan.u-szeged</who>
    <bug_when>2011-10-07 04:58:01 -0700</bug_when>
    <thetext>&gt; I tried to manage a chromium build by myself, but I faced a build error. It seems chromium doesn&apos;t see the newly added files (RenderSVGRect and RenderSVGShape). Tracking the build log I realized they aren&apos;t in the compile queue. An observation: WebCore/WebCore.gyp/webcore_svg.target.chromium.mk contains RenderSVGPath.o but it doesn&apos;t have the new files objects. Any idea what could be the problem?

I&apos;ve found an interesting thing... there is a line in Source/WebCore/gyp/WebCore.gyp:

[&apos;exclude&apos;, &apos;rendering/svg/[^/]+\\.cpp&apos;]

After changing &quot;exclude&quot; to &quot;include&quot; the build was successfull. It&apos;s a hack ofc and I&apos;m not sure how it worked. Any idea?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>486050</commentid>
    <comment_count>76</comment_count>
      <attachid>111444</attachid>
    <who name="Renata Hodovan">rhodovan.u-szeged</who>
    <bug_when>2011-10-18 07:48:52 -0700</bug_when>
    <thetext>Created attachment 111444
Proposed patch

Shadow related MAC problem is solved. The problem was css shadows (--webkit-svg-shadow) should be applied via transparency layer and not via the shape&apos;s renderer. It&apos;s turned off now and the tests run fine. (Comment is also added to this part.)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>486269</commentid>
    <comment_count>77</comment_count>
    <who name="Dirk Schulze">krit</who>
    <bug_when>2011-10-18 13:22:09 -0700</bug_when>
    <thetext>(In reply to comment #76)
&gt; Created an attachment (id=111444) [details]
&gt; Proposed patch
&gt; 
&gt; Shadow related MAC problem is solved. The problem was css shadows (--webkit-svg-shadow) should be applied via transparency layer and not via the shape&apos;s renderer. It&apos;s turned off now and the tests run fine. (Comment is also added to this part.)

That sounds great! Did you fix the masking/clipping problem on chromium as well?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>486298</commentid>
    <comment_count>78</comment_count>
      <attachid>111444</attachid>
    <who name="Dirk Schulze">krit</who>
    <bug_when>2011-10-18 14:08:39 -0700</bug_when>
    <thetext>Comment on attachment 111444
Proposed patch

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

Still great patch ;) I just have some questions to your new added code.

&gt; Source/WebCore/ChangeLog:23
&gt; +        This patch introduces a new common base class called RenderSVGShape which
&gt; +        replaces the RenderSVGPath. This new base class has the same purpose
&gt; +        as the replaced class and has specialized descendants for common
&gt; +        shapes (like Rectangles and Circles), which allows faster painting
&gt; +        of these shapes when certain conditions are fulfilled. On some
&gt; +        benchmark programs we have seen 5% speedup.
&gt; +
&gt; +        The biggest motivation of this refactor is taking advantage
&gt; +        of faster primitive drawing in the most common and frequent
&gt; +        cases. However in some rare cases, like painting rounded
&gt; +        rects, we need to fallback to the original code path, which
&gt; +        is fully kept in the RenderSVGShape base class. Some other
&gt; +        cases, like dashed strokes, can be painted but mouse pointer
&gt; +        events cannot be handled by the descendant classes. A different
&gt; +        fallback mechanism is used in such cases which redirects
&gt; +        only the pointer event handling to the base class.
&gt; +
&gt; +        Reviewed by NOBODY (OOPS!).

Unsure right now, but shouldn&apos;t the review comment be right after the bug title and link? :P

&gt; Source/WebCore/rendering/svg/RenderSVGRect.cpp:3
&gt; + * Copyright (C) 2011 Renata Hodovan (reni@webkit.org)

Wrong braces.

&gt; Source/WebCore/rendering/svg/RenderSVGRect.cpp:98
&gt; +        // --webkit-svg-shadow should be applied via transparency layer,

Just -webkit-svg-shadow.

&gt; Source/WebCore/rendering/svg/RenderSVGRect.cpp:106
&gt; +        if (context-&gt;hasShadow()) {
&gt; +            context-&gt;save();
&gt; +            context-&gt;clearShadow();
&gt; +            context-&gt;fillRect(m_boundingBox);
&gt; +            context-&gt;restore();
&gt; +            return;
&gt; +        }

If I understand Simon correctly, you should use GraphicsContextStateSaver here. But maybe you can read the shadow data, clear it on the context and write it back afterwards? Wouldn&apos;t that be more performant?
 
&gt; Source/WebCore/rendering/svg/RenderSVGRect.cpp:116
&gt; +        context-&gt;strokeRect(m_boundingBox, strokeWidth());

Don&apos;t we have the same problem with -webkit-svg-shadow here?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>486581</commentid>
    <comment_count>79</comment_count>
    <who name="Zoltan Herczeg">zherczeg</who>
    <bug_when>2011-10-18 23:45:01 -0700</bug_when>
    <thetext>&gt; &gt; Source/WebCore/rendering/svg/RenderSVGRect.cpp:116
&gt; &gt; +        context-&gt;strokeRect(m_boundingBox, strokeWidth());
&gt; 
&gt; Don&apos;t we have the same problem with -webkit-svg-shadow here?

Hey Krit! Actuaully the logic is flawed here. In other words, there is an ugly hack here. Would be a good idea to fix it someday.

According to the GraphicsContext object of WebKit the shadow is enabled, but the higher level Mac CG object knows the other way, its shadow property is disabled. So you actually draw a shadowed object without shadow &gt;:]

That happens with lines.

However, the FillRect has a custom shadow drawing method with ShadowBlur. It detects whether the shadow must be drawn depending on the GraphicsContext, not the Mac specific CG object, so it thinks a shadow must be drawn here! (By the way, is it possible to query the shadow status from the CG object? We checked the help of XCode and we found many setters, but no getters. It seems pretty lame to me.)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>486600</commentid>
    <comment_count>80</comment_count>
    <who name="Dirk Schulze">krit</who>
    <bug_when>2011-10-19 00:46:22 -0700</bug_when>
    <thetext>(In reply to comment #79)
&gt; &gt; &gt; Source/WebCore/rendering/svg/RenderSVGRect.cpp:116
&gt; &gt; &gt; +        context-&gt;strokeRect(m_boundingBox, strokeWidth());
&gt; &gt; 
&gt; &gt; Don&apos;t we have the same problem with -webkit-svg-shadow here?
&gt; 
&gt; Hey Krit! Actuaully the logic is flawed here. In other words, there is an ugly hack here. Would be a good idea to fix it someday.
&gt; 
&gt; According to the GraphicsContext object of WebKit the shadow is enabled, but the higher level Mac CG object knows the other way, its shadow property is disabled. So you actually draw a shadowed object without shadow &gt;:]
&gt; 
&gt; That happens with lines.
&gt; 
&gt; However, the FillRect has a custom shadow drawing method with ShadowBlur. It detects whether the shadow must be drawn depending on the GraphicsContext, not the Mac specific CG object, so it thinks a shadow must be drawn here! (By the way, is it possible to query the shadow status from the CG object? We checked the help of XCode and we found many setters, but no getters. It seems pretty lame to me.)

Hm, I&apos;m not a fan of hacks. Now that you know what happens, how difficult is it to fix it before landing this bug?

Anyway, if we really need this hack and it is Mac specific, surround it with ifdefs, add a FIXME and point to the bug report. Please also add a note to the bug report itself after landing. I&apos;d still use GraphicsContextStateSaver for consistency.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>486723</commentid>
    <comment_count>81</comment_count>
      <attachid>111604</attachid>
    <who name="Renata Hodovan">rhodovan.u-szeged</who>
    <bug_when>2011-10-19 06:23:14 -0700</bug_when>
    <thetext>Created attachment 111604
Proposed patch

&gt; Hm, I&apos;m not a fan of hacks. Now that you know what happens, how difficult is it to fix it before landing this bug?
It&apos;s a bigger task, so it should be solved in a follow-up patch.

The other suggestions of you are fulfilled.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>486725</commentid>
    <comment_count>82</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-10-19 06:25:50 -0700</bug_when>
    <thetext>Attachment 111604 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;LayoutTests/ChangeLog&apos;, u&apos;LayoutTests/svg/...&quot; exit_code: 1

Source/WebCore/WebCore.vcproj/WebCore.vcproj:25583:  mismatched tag  [xml/syntax] [5]
Total errors found: 1 in 47 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>486731</commentid>
    <comment_count>83</comment_count>
      <attachid>111604</attachid>
    <who name="Dirk Schulze">krit</who>
    <bug_when>2011-10-19 06:33:33 -0700</bug_when>
    <thetext>Comment on attachment 111604
Proposed patch

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

Great patch reni! r=me.

&gt; Source/WebCore/rendering/svg/RenderSVGRect.h:3
&gt; + * Copyright (C) 2011 Renata Hodovan (reni@webkit.org)

Braces still wrong.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>486794</commentid>
    <comment_count>84</comment_count>
    <who name="Renata Hodovan">rhodovan.u-szeged</who>
    <bug_when>2011-10-19 07:59:09 -0700</bug_when>
    <thetext>Committed r97863: &lt;http://trac.webkit.org/changeset/97863&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>486862</commentid>
    <comment_count>85</comment_count>
    <who name="Dimitri Glazkov (Google)">dglazkov</who>
    <bug_when>2011-10-19 09:58:01 -0700</bug_when>
    <thetext>(In reply to comment #84)
&gt; Committed r97863: &lt;http://trac.webkit.org/changeset/97863&gt;

This patch is causing ASSERTs in Chromium:

	0x2aaee8766af0
	WebCore::RenderSVGShape::createShape() [0x19c7d0f]
	WebCore::RenderSVGShape::layout() [0x19c84d5]
	WebCore::SVGRenderSupport::layoutChildren() [0x18b4e45]
	WebCore::RenderSVGRoot::layout() [0x19c5b9f]
	WebCore::RenderBlock::layoutBlockChild() [0x14fbe64]
	WebCore::RenderBlock::layoutBlockChildren() [0x14fba86]
	WebCore::RenderBlock::layoutBlock() [0x14f88ae]
	WebCore::RenderBlock::layout() [0x14f80aa]
	WebCore::RenderView::layout() [0x162f0e6]
	WebCore::FrameView::layout() [0x127a22d]
	WebCore::Document::implicitClose() [0xc3bae3]
	WebCore::FrameLoader::checkCallImplicitClose() [0x11cf68f]
	WebCore::FrameLoader::checkCompleted() [0x11cf462]
	WebCore::FrameLoader::finishedParsing() [0x11cf1bb]
	WebCore::Document::finishedParsing() [0xc44422]
	WebCore::XMLDocumentParser::end() [0x1346304]
	WebCore::XMLDocumentParser::finish() [0x134633e]
	WebCore::DocumentWriter::endIfNotLoadingMainResource() [0x11c51ef]
	WebCore::DocumentWriter::end() [0x11c50f7]
	WebCore::DocumentLoader::finishedLoading() [0x11b6585]
	WebCore::FrameLoader::finishedLoading() [0x11d5f1b]
	WebCore::MainResourceLoader::didFinishLoading() [0x11eadf1]
	WebCore::ResourceLoader::didFinishLoading() [0x11fdbd9]
	WebCore::ResourceHandleInternal::didFinishLoading() [0x4faa14]
	webkit_glue::WebURLLoaderImpl::Context::OnCompletedRequest() [0x1a47c54]
	(anonymous namespace)::RequestProxy::NotifyCompletedRequest() [0x1b04559]
	base::internal::Invoker4&lt;&gt;::DoInvoke() [0x1b09a6a]
	base::Callback&lt;&gt;::Run() [0x67d9b3]
	MessageLoop::RunTask() [0x698986]
	MessageLoop::DeferOrRunPendingTask() [0x698ab1]
	MessageLoop::DoWork() [0x6992c7]
	base::MessagePumpGlib::HandleDispatch() [0x6f2715]
	(anonymous namespace)::WorkSourceDispatch() [0x6f1c67]
	0x2aaee2ffe8c2
	0x2aaee3002748
	0x2aaee30028fc
	base::MessagePumpGtk::RunOnce() [0x6f3f7d]
	base::MessagePumpGlib::RunWithDispatcher() [0x6f23c8]
	base::MessagePumpGlib::Run() [0x6f27f2]
	MessageLoop::RunInternal() [0x698611]
	MessageLoop::RunHandler() [0x6984c4]
	MessageLoop::Run() [0x697e67]
	webkit_support::RunMessageLoop() [0x60f2af]
	TestShell::waitTestFinished() [0x463e89]
	TestShell::runFileTest() [0x45cbce]
	runTest() [0x430fc8]
	main [0x431a20]
	0x2aaee8751c4d
	0x41df09

I bet you&apos;ll see it in other ports too.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>486880</commentid>
    <comment_count>86</comment_count>
    <who name="Dirk Schulze">krit</who>
    <bug_when>2011-10-19 10:44:06 -0700</bug_when>
    <thetext>Reverted r97863 for reason:

Rollout

Committed r97870: &lt;http://trac.webkit.org/changeset/97870&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>491556</commentid>
    <comment_count>87</comment_count>
      <attachid>112678</attachid>
    <who name="Renata Hodovan">rhodovan.u-szeged</who>
    <bug_when>2011-10-27 07:34:20 -0700</bug_when>
    <thetext>Created attachment 112678
Proposed patch

The assertions in the previous version was caused by some missing clearing method in fallback cases. They are added already, so we really don&apos;t have any regressions neither in release nor in debug version.

As we discussed on IRC, RenderSVGRect lies about itself being a &quot;RenderSVGPath&quot; and this way we don&apos;t need layouttest updates (because DRT produces the same output as before).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>492320</commentid>
    <comment_count>88</comment_count>
      <attachid>112678</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-10-28 02:04:22 -0700</bug_when>
    <thetext>Comment on attachment 112678
Proposed patch

Attachment 112678 did not pass chromium-ews (chromium-xvfb):
Output: http://queues.webkit.org/results/10238161

New failing tests:
svg/W3C-SVG-1.1/animate-elem-64-t.svg
svg/W3C-SVG-1.1/animate-elem-63-t.svg
svg/W3C-SVG-1.1-SE/coords-units-03-b.svg
svg/W3C-SVG-1.1/animate-elem-60-t.svg
svg/W3C-SVG-1.1/animate-elem-23-t.svg
svg/W3C-SVG-1.1/animate-elem-40-t.svg
svg/W3C-SVG-1.1-SE/types-dom-05-b.svg
svg/W3C-SVG-1.1-SE/styling-pres-02-f.svg
svg/W3C-SVG-1.1-SE/coords-dom-04-f.svg
svg/W3C-SVG-1.1/animate-elem-62-t.svg
svg/W3C-SVG-1.1/animate-elem-61-t.svg
svg/W3C-SVG-1.1/animate-elem-30-t.svg
svg/W3C-SVG-1.1-SE/styling-css-04-f.svg
svg/W3C-SVG-1.1/animate-elem-46-t.svg
svg/W3C-SVG-1.1/animate-elem-41-t.svg</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>505769</commentid>
    <comment_count>89</comment_count>
      <attachid>115805</attachid>
    <who name="Renata Hodovan">rhodovan.u-szeged</who>
    <bug_when>2011-11-18 07:25:53 -0800</bug_when>
    <thetext>Created attachment 115805
Proposed patch

This new version contains the following:
 * Adapting it to the relevant modifications what are commited from the previous version (e.g.: the removed toPathData(), etc.)
 * Few refactoring, mainly related to the calculating of the boundingboxes.
 * Merge inflateWithMarkerBounds() and stroke plumping code snippet into one common inflateWithStrokeandMarkerBounds() function.
 * The previous version contained a solution for avoiding the shadow painting problem on mac. Since Chromium uses the same painting method like mac we needed to extend the #if PLATFORM(MAC) condition with (PLATFORM(CHROMIUM) &amp;&amp; OS(MAC_OS_X)).
 * Pixel expecteds of the following tests are updated:
       * svg/W3C-SVG-1.1/coords-trans-01-b.svg
       * svg/custom/percentage-rect.svg
   Their results were one pixel slimmer than it was expected. The problematic rects had transformations and its sizes were defined in percentages.
   I dumped a mass of datas and got the following: all the bounding boxes and transformations paramters remained the same like in the original RenderSVGPath&apos;s implementation. Additionally, I tried to use fillPath() in my patch instead of fillRect() and the tests were succeeded again. That&apos;s in RenderSVGRect::fillShape() :

       context-&gt;fillRect(m_boundingBox);

       was changed to:

       Path tmp;
       tmp.addRect(m_boundingBox);
       context-&gt;fillPath(tmp);

    I suppose it means that just the difference of precision of the two methods was resposible for the fail. Any other idea?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>505784</commentid>
    <comment_count>90</comment_count>
      <attachid>115805</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-11-18 07:49:30 -0800</bug_when>
    <thetext>Comment on attachment 115805
Proposed patch

Attachment 115805 did not pass chromium-ews (chromium-xvfb):
Output: http://queues.webkit.org/results/10393157</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>505786</commentid>
    <comment_count>91</comment_count>
      <attachid>115805</attachid>
    <who name="Gyuyoung Kim">gyuyoung.kim</who>
    <bug_when>2011-11-18 07:51:16 -0800</bug_when>
    <thetext>Comment on attachment 115805
Proposed patch

Attachment 115805 did not pass efl-ews (efl):
Output: http://queues.webkit.org/results/10495123</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>505814</commentid>
    <comment_count>92</comment_count>
      <attachid>115816</attachid>
    <who name="Renata Hodovan">rhodovan.u-szeged</who>
    <bug_when>2011-11-18 08:29:42 -0800</bug_when>
    <thetext>Created attachment 115816
Proposed patch

Sorry for the previous. After an alphabetical sorting style error one include was accidentally deleted.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>507574</commentid>
    <comment_count>93</comment_count>
    <who name="Renata Hodovan">rhodovan.u-szeged</who>
    <bug_when>2011-11-22 06:36:12 -0800</bug_when>
    <thetext>I have some dummy quesitons...
I checked the dump of ews and it was not really clear to me what i saw.
E.g.: here is one of the result pages created by mac ews:
http://queues.webkit.org/results/10559080
what contains a table:

Found:  27268 tests
Expect: 17002 passes   (17002 now,    0 wontfix)
Expect:   788 failures (  760 now,   28 wontfix)
Expect:  1305 flaky    ( 1150 now,  155 wontfix)
Expect:  8173 skipped  (  403 now, 7770 wontfix)

The first line told me that we expected 17002 pass what we also got according to the second column. Am I wrong? If not then why is ews still yellow and why are running tests again and again?

The second question is: why does start the mac ews dump with:
&quot;Failed to run &quot;[&apos;/mnt/git/webkit-chromium-ews/Tools/Scripts/webkit-patch&apos;...&quot;
The *webkit-chromium-ews* part makes me confused... 

I would be happy to fix all regressions at last but unless knowing the problems it&apos;s pretty hard :(
Any comment would be welcomed!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>508086</commentid>
    <comment_count>94</comment_count>
      <attachid>115816</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-11-23 05:44:01 -0800</bug_when>
    <thetext>Comment on attachment 115816
Proposed patch

Attachment 115816 did not pass chromium-ews (chromium-xvfb):
Output: http://queues.webkit.org/results/10607295

New failing tests:
css2.1/20110323/abspos-containing-block-initial-004b.htm
fast/replaced/width100percent-textarea.html
css2.1/20110323/background-intrinsic-004.htm
svg/W3C-SVG-1.1-SE/coords-units-03-b.svg
svg/W3C-SVG-1.1/animate-elem-60-t.svg
svg/W3C-SVG-1.1/animate-elem-23-t.svg
css2.1/20110323/background-intrinsic-005.htm
svg/W3C-SVG-1.1-SE/styling-pres-02-f.svg
svg/W3C-SVG-1.1-SE/coords-dom-04-f.svg
svg/W3C-SVG-1.1/animate-elem-30-t.svg
svg/W3C-SVG-1.1-SE/styling-css-04-f.svg
svg/W3C-SVG-1.1/animate-elem-40-t.svg
css2.1/20110323/abspos-containing-block-initial-004d.htm
svg/W3C-SVG-1.1/animate-elem-46-t.svg
svg/W3C-SVG-1.1/animate-elem-41-t.svg</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>510634</commentid>
    <comment_count>95</comment_count>
      <attachid>115816</attachid>
    <who name="Nikolas Zimmermann">zimmermann</who>
    <bug_when>2011-11-29 02:20:44 -0800</bug_when>
    <thetext>Comment on attachment 115816
Proposed patch

Looks good to me, but I fear it now needs an update due the recent changes in ToT, still r=me.
Please delay landing until the gtk/qt/win/mac rebaselines are done, that would be great.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>512332</commentid>
    <comment_count>96</comment_count>
    <who name="Vincent Scheib">scheib</who>
    <bug_when>2011-11-30 18:51:07 -0800</bug_when>
    <thetext>This patch caused a pretty large workload for chromium rebaselines, and caused some disruption due to the large number of test failures making it hard to see what other tests were having issues. 

The early warning system was giving indication that this would happen. It would have been good to address before landing. Probably by adjusting test_expectations to suppress failures until new images were generated on bots.

I see that Renata asked about this, and can suggest that the question should have been repeated in #webkit until someone came up with an answer. ;)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>512563</commentid>
    <comment_count>97</comment_count>
    <who name="Renata Hodovan">rhodovan.u-szeged</who>
    <bug_when>2011-12-01 00:19:37 -0800</bug_when>
    <thetext>(In reply to comment #96)
&gt; This patch caused a pretty large workload for chromium rebaselines, and caused some disruption due to the large number of test failures making it hard to see what other tests were having issues. 
&gt; 
&gt; The early warning system was giving indication that this would happen. It would have been good to address before landing. Probably by adjusting test_expectations to suppress failures until new images were generated on bots.
&gt; 
&gt; I see that Renata asked about this, and can suggest that the question should have been repeated in #webkit until someone came up with an answer. ;)

You are right. I will do this way next time. Thanks again for your help :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>512566</commentid>
    <comment_count>98</comment_count>
    <who name="Renata Hodovan">rhodovan.u-szeged</who>
    <bug_when>2011-12-01 00:20:56 -0800</bug_when>
    <thetext>Patch is landed in &lt;http://trac.webkit.org/changeset/101517&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>512614</commentid>
    <comment_count>99</comment_count>
    <who name="Nikolas Zimmermann">zimmermann</who>
    <bug_when>2011-12-01 01:28:35 -0800</bug_when>
    <thetext>(In reply to comment #96)
&gt; This patch caused a pretty large workload for chromium rebaselines, and caused some disruption due to the large number of test failures making it hard to see what other tests were having issues. 

Are you sure about that? Renatas patch should only have caused in the order of 20 changes for you.
My patch impacted chromium much more requiring 500+ rebaselines. My patch was given r+ last Thursday, and I waited until after the thanksgiving weekend on Tuesday to land it, and I discussed it before with zmo, the WebKit gardener at the team, who said I should go ahead and land it.
He didn&apos;t finish the SVG rebaselines, as he told me on IRC, as he had to leave.

Anyhow, I don&apos;t think Renatas patch caused problems, but rather mine.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>525263</commentid>
    <comment_count>100</comment_count>
    <who name="Renata Hodovan">rhodovan.u-szeged</who>
    <bug_when>2011-12-21 07:32:43 -0800</bug_when>
    <thetext>Committed r103407: &lt;http://trac.webkit.org/changeset/103407&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>103073</attachid>
            <date>2011-08-05 08:21:53 -0700</date>
            <delta_ts>2011-08-10 07:29:41 -0700</delta_ts>
            <desc>Proposed patch</desc>
            <filename>0001-render-svg-rect.patch</filename>
            <type>text/plain</type>
            <size>40950</size>
            <attacher name="Renata Hodovan">rhodovan.u-szeged</attacher>
            
              <data encoding="base64">RnJvbSBhZmY3OGMwNmQ2ZTNjMDAwN2Y5ZmQyYzI5MDQyNzI0NjhkMWY2ZWQ1IE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBSZW5hdGEgSG9kb3ZhbiA8cmVuaUB3ZWJraXQub3JnPgpEYXRl
OiBGcmksIDUgQXVnIDIwMTEgMTc6MDc6NDggKzAyMDAKU3ViamVjdDogW1BBVENIXSByZW5kZXIg
c3ZnIHJlY3QKCi0tLQogU291cmNlL1dlYkNvcmUvQ01ha2VMaXN0cy50eHQgICAgICAgICAgICAg
ICAgICAgICAgfCAgICAxICsKIFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHwgICA2NCArKysrKwogU291cmNlL1dlYkNvcmUvV2ViQ29yZS5wcm8gICAg
ICAgICAgICAgICAgICAgICAgICAgfCAgICA0ICsKIFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNv
ZGVwcm9qL3Byb2plY3QucGJ4cHJvaiAgIHwgICAgOCArCiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvUmVuZGVyT2JqZWN0LmggICAgICAgICAgICB8ICAgIDIgKwogU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL3N2Zy9SZW5kZXJTVkdBbGxJbk9uZS5jcHAgfCAgICAyICsKIC4uLi9XZWJDb3JlL3Jl
bmRlcmluZy9zdmcvUmVuZGVyU1ZHQmFzaWNTaGFwZS5jcHAgIHwgIDEyNSArKysrKysrKwogU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdCYXNpY1NoYXBlLmggfCAgIDg0ICsr
KysrKwogLi4uL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdNb2RlbE9iamVjdC5jcHAg
fCAgICAyICstCiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1BhdGguY3Bw
ICAgICB8ICAgIDIgKy0KIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVj
dC5jcHAgICAgIHwgIDI5NyArKysrKysrKysrKysrKysrKysrKwogU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZWN0LmggICAgICAgfCAgIDc1ICsrKysrCiAuLi4vcmVuZGVy
aW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJjZUNsaXBwZXIuY3BwICAgICB8ICAgIDYgKy0KIFNvdXJj
ZS9XZWJDb3JlL3N2Zy9TVkdSZWN0RWxlbWVudC5jcHAgICAgICAgICAgICAgIHwgICAxMiArLQog
U291cmNlL1dlYkNvcmUvc3ZnL1NWR1JlY3RFbGVtZW50LmggICAgICAgICAgICAgICAgfCAgICAz
ICsKIDE1IGZpbGVzIGNoYW5nZWQsIDY4MCBpbnNlcnRpb25zKCspLCA3IGRlbGV0aW9ucygtKQog
Y3JlYXRlIG1vZGUgMTAwNjQ0IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZH
QmFzaWNTaGFwZS5jcHAKIGNyZWF0ZSBtb2RlIDEwMDY0NCBTb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvc3ZnL1JlbmRlclNWR0Jhc2ljU2hhcGUuaAogY3JlYXRlIG1vZGUgMTAwNjQ0IFNvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVjdC5jcHAKIGNyZWF0ZSBtb2RlIDEwMDY0
NCBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1JlY3QuaAoKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL0NNYWtlTGlzdHMudHh0IGIvU291cmNlL1dlYkNvcmUvQ01ha2VM
aXN0cy50eHQKaW5kZXggNTNiZWRiNC4uYmE3YmRjOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvQ01ha2VMaXN0cy50eHQKKysrIGIvU291cmNlL1dlYkNvcmUvQ01ha2VMaXN0cy50eHQKQEAg
LTE2MDgsNiArMTYwOCw3IEBAIElGIChFTkFCTEVfU1ZHKQogICAgICAgICByZW5kZXJpbmcvc3Zn
L1JlbmRlclNWR0lubGluZVRleHQuY3BwCiAgICAgICAgIHJlbmRlcmluZy9zdmcvUmVuZGVyU1ZH
TW9kZWxPYmplY3QuY3BwCiAgICAgICAgIHJlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUGF0aC5jcHAK
KyAgICAgICAgcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZWN0LmNwcAogICAgICAgICByZW5kZXJp
bmcvc3ZnL1JlbmRlclNWR1Jlc291cmNlLmNwcAogICAgICAgICByZW5kZXJpbmcvc3ZnL1JlbmRl
clNWR1Jlc291cmNlQ2xpcHBlci5jcHAKICAgICAgICAgcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdS
ZXNvdXJjZUNvbnRhaW5lci5jcHAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxv
ZyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCAxYjQwZGQwLi5jZjI4YTg0IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hh
bmdlTG9nCkBAIC0xLDMgKzEsNjcgQEAKKzIwMTEtMDgtMDUgIFJlbmF0YSBIb2RvdmFuICA8cmVu
aUB3ZWJraXQub3JnPgorCisgICAgICAgIEFkZCBuZXcgcmVuZGVyZXJzIGZvciB0aGUgYmFzaWMg
U1ZHIHNoYXBlcy4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTY1NzY5CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAg
ICAgVGhpcyBmaXJzdCBwYXRjaCBpbXBsZW1lbnRzIHRoZSBSZW5kZXJTVkdCYXNpY1NoYXBlIGNs
YXNzIHdoYXQgY29udGFpbnMKKyAgICAgICAgdGhlIGNvbW1vbiBmdW5jdGlvbnMgYW5kIG1lbWJl
cnMgb2YgYWxsIGZ1cnRoZXIgcmVuZGVyZXJzLiBJbiBhZGRpdGlvbiBhIG5ldworICAgICAgICBy
ZW5kZXJlciBmb3IgU1ZHUmVjdCBlbGVtZW50IGlzIGFsc28gYWRkZWQuCisKKyAgICAgICAgTm8g
Y2hhbmdlcyB0byBmdW5jdGlvbmFsaXR5IHNvIG5vIG5ldyB0ZXN0cy4KKworICAgICAgICAqIENN
YWtlTGlzdHMudHh0OgorICAgICAgICAqIFdlYkNvcmUucHJvOgorICAgICAgICAqIFdlYkNvcmUu
eGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyT2Jq
ZWN0Lmg6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJPYmplY3Q6OmlzU1ZHQmFzaWNTaGFwZSk6
CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJPYmplY3Q6OmlzU1ZHUmVjdCk6CisgICAgICAgICog
cmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdBbGxJbk9uZS5jcHA6CisgICAgICAgICogcmVuZGVyaW5n
L3N2Zy9SZW5kZXJTVkdCYXNpY1NoYXBlLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpS
ZW5kZXJTVkdCYXNpY1NoYXBlOjpSZW5kZXJTVkdCYXNpY1NoYXBlKToKKyAgICAgICAgKFdlYkNv
cmU6OlJlbmRlclNWR0Jhc2ljU2hhcGU6On5SZW5kZXJTVkdCYXNpY1NoYXBlKToKKyAgICAgICAg
KFdlYkNvcmU6OlJlbmRlclNWR0Jhc2ljU2hhcGU6OmZpbGxDb250YWlucyk6CisgICAgICAgIChX
ZWJDb3JlOjpSZW5kZXJTVkdCYXNpY1NoYXBlOjpmaWxsQ29udGFpbnNTbG93Q2FzZSk6CisgICAg
ICAgIChXZWJDb3JlOjpSZW5kZXJTVkdCYXNpY1NoYXBlOjpzdHJva2VDb250YWluc1Nsb3dDYXNl
KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclNWR0Jhc2ljU2hhcGU6OnN0cm9rZUNvbnRhaW5z
KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclNWR0Jhc2ljU2hhcGU6OmFkZEZvY3VzUmluZ1Jl
Y3RzKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclNWR0Jhc2ljU2hhcGU6Om5vZGVBdEZsb2F0
UG9pbnQpOgorICAgICAgICAqIHJlbmRlcmluZy9zdmcvUmVuZGVyU1ZHQmFzaWNTaGFwZS5oOiBB
ZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclNWR0Jhc2ljU2hhcGU6OnNldE5lZWRzU2hh
cGVVcGRhdGUpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU1ZHQmFzaWNTaGFwZTo6aXNTVkdC
YXNpY1NoYXBlKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclNWR0Jhc2ljU2hhcGU6OnJlbmRl
ck5hbWUpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU1ZHQmFzaWNTaGFwZTo6b2JqZWN0Qm91
bmRpbmdCb3gpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU1ZHQmFzaWNTaGFwZTo6c3Ryb2tl
Qm91bmRpbmdCb3gpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU1ZHQmFzaWNTaGFwZTo6cmVw
YWludFJlY3RJbkxvY2FsQ29vcmRpbmF0ZXMpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU1ZH
QmFzaWNTaGFwZTo6bG9jYWxUb1BhcmVudFRyYW5zZm9ybSk6CisgICAgICAgICogcmVuZGVyaW5n
L3N2Zy9SZW5kZXJTVkdNb2RlbE9iamVjdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjppc0dyYXBo
aWNzRWxlbWVudCk6CisgICAgICAgICogcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdQYXRoLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclNWR1BhdGg6OmFkZEZvY3VzUmluZ1JlY3RzKToKKyAg
ICAgICAgKiByZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1JlY3QuY3BwOiBBZGRlZC4KKyAgICAgICAg
KFdlYkNvcmU6OlJlbmRlclNWR1JlY3Q6OlJlbmRlclNWR1JlY3QpOgorICAgICAgICAoV2ViQ29y
ZTo6UmVuZGVyU1ZHUmVjdDo6flJlbmRlclNWR1JlY3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVu
ZGVyU1ZHUmVjdDo6ZmlsbENvbnRhaW5zU2xvd0Nhc2UpOgorICAgICAgICAoV2ViQ29yZTo6UmVu
ZGVyU1ZHUmVjdDo6c3Ryb2tlQ29udGFpbnNTbG93Q2FzZSk6CisgICAgICAgIChXZWJDb3JlOjpS
ZW5kZXJTVkdSZWN0OjpkZXRlcm1pbmVQb2ludExvY2F0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6
OlJlbmRlclNWR1JlY3Q6OmxheW91dCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJTVkdSZWN0
OjpwYWludCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJTVkdSZWN0OjpmaWxsQW5kU3Ryb2tl
UmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJTVkdSZWN0OjpzdHJva2VCb3VuZGluZ1Jl
Y3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU1ZHUmVjdDo6dXBkYXRlQ2FjaGVkQm91bmRh
cmllcyk6CisgICAgICAgICogcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZWN0Lmg6IEFkZGVkLgor
ICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU1ZHUmVjdDo6aXNTVkdSZWN0KToKKyAgICAgICAgKFdl
YkNvcmU6OlJlbmRlclNWR1JlY3Q6OnJlbmRlck5hbWUpOgorICAgICAgICAqIHJlbmRlcmluZy9z
dmcvUmVuZGVyU1ZHUmVzb3VyY2VDbGlwcGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRl
clNWR1Jlc291cmNlQ2xpcHBlcjo6ZHJhd0NvbnRlbnRJbnRvTWFza0ltYWdlKToKKyAgICAgICAg
KFdlYkNvcmU6OlJlbmRlclNWR1Jlc291cmNlQ2xpcHBlcjo6Y2FsY3VsYXRlQ2xpcENvbnRlbnRS
ZXBhaW50UmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJTVkdSZXNvdXJjZUNsaXBwZXI6
OmhpdFRlc3RDbGlwQ29udGVudCk6CisgICAgICAgICogc3ZnL1NWR1JlY3RFbGVtZW50LmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OlNWR1JlY3RFbGVtZW50OjpzdmdBdHRyaWJ1dGVDaGFuZ2VkKToK
KyAgICAgICAgKFdlYkNvcmU6OlNWR1JlY3RFbGVtZW50OjpjcmVhdGVSZW5kZXJlcik6CisgICAg
ICAgICogc3ZnL1NWR1JlY3RFbGVtZW50Lmg6CisKIDIwMTEtMDgtMDEgIEx1a2UgTWFjcGhlcnNv
biAgIDxtYWNwaGVyc29uQGNocm9taXVtLm9yZz4KIAogICAgICAgICBEb24ndCBzZXQgbV9mb250
RGlydHkgd2hlbiBzZXR0aW5nIHpvb20gdW5sZXNzIHpvb20gaGFzIGFjdHVhbGx5IGNoYW5nZWQK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUucHJvIGIvU291cmNlL1dlYkNvcmUv
V2ViQ29yZS5wcm8KaW5kZXggN2EzYmVmMS4uNjM5N2M5ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvV2ViQ29yZS5wcm8KKysrIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5wcm8KQEAgLTIy
NTAsNiArMjI1MCw3IEBAIEhFQURFUlMgKz0gXAogICAgIHJlbmRlcmluZy9zdHlsZS9TdHlsZVZp
c3VhbERhdGEuaCBcCiAgICAgcmVuZGVyaW5nL3N0eWxlL1NWR1JlbmRlclN0eWxlRGVmcy5oIFwK
ICAgICByZW5kZXJpbmcvc3R5bGUvU1ZHUmVuZGVyU3R5bGUuaCBcCisgICAgcmVuZGVyaW5nL3N2
Zy9SZW5kZXJTVkdCYXNpY1NoYXBlLmggXAogICAgIHJlbmRlcmluZy9zdmcvUmVuZGVyU1ZHQmxv
Y2suaCBcCiAgICAgcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdDb250YWluZXIuaCBcCiAgICAgcmVu
ZGVyaW5nL3N2Zy9SZW5kZXJTVkdGb3JlaWduT2JqZWN0LmggXApAQCAtMjI2MCw2ICsyMjYxLDcg
QEAgSEVBREVSUyArPSBcCiAgICAgcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdJbmxpbmVUZXh0Lmgg
XAogICAgIHJlbmRlcmluZy9zdmcvUmVuZGVyU1ZHTW9kZWxPYmplY3QuaCBcCiAgICAgcmVuZGVy
aW5nL3N2Zy9SZW5kZXJTVkdQYXRoLmggXAorICAgIHJlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVj
dC5oIFwKICAgICByZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291cmNlLmggXAogICAgIHJlbmRl
cmluZy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VDbGlwcGVyLmggXAogICAgIHJlbmRlcmluZy9zdmcv
UmVuZGVyU1ZHUmVzb3VyY2VDb250YWluZXIuaCBcCkBAIC0zMjgzLDcgKzMyODUsOSBAQCBjb250
YWlucyhERUZJTkVTLCBFTkFCTEVfU1ZHPTEpIHsKICAgICAgICAgcmVuZGVyaW5nL3N0eWxlL1NW
R1JlbmRlclN0eWxlLmNwcCBcCiAgICAgICAgIHJlbmRlcmluZy9zdHlsZS9TVkdSZW5kZXJTdHls
ZURlZnMuY3BwIFwKICAgICAgICAgcmVuZGVyaW5nL1BvaW50ZXJFdmVudHNIaXRSdWxlcy5jcHAg
XAorICAgICAgICByZW5kZXJpbmcvc3ZnL1JlbmRlclNWR0Jhc2ljU2hhcGUuY3BwIFwKICAgICAg
ICAgcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdQYXRoLmNwcCBcCisgICAgICAgIHJlbmRlcmluZy9z
dmcvUmVuZGVyU1ZHUmVjdC5jcHAgXAogICAgICAgICBzdmcvYW5pbWF0aW9uL1NNSUxUaW1lLmNw
cCBcCiAgICAgICAgIHN2Zy9hbmltYXRpb24vU01JTFRpbWVDb250YWluZXIuY3BwIFwKICAgICAg
ICAgc3ZnL2FuaW1hdGlvbi9TVkdTTUlMRWxlbWVudC5jcHAgXApkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qIGIvU291cmNlL1dlYkNv
cmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCmluZGV4IDY4MjE5NTkuLmM1MzA2
NWMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3Qu
cGJ4cHJvagorKysgYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBi
eHByb2oKQEAgLTk4NjIsNiArOTg2MiwxMCBAQAogCQlBMTM2QTAwQjExMzREQkQyMDBDQzhENTAg
LyogWE1MSHR0cFJlcXVlc3RQcm9ncmVzc0V2ZW50VGhyb3R0bGUuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gWE1MSHR0cFJlcXVlc3RQcm9ncmVzc0V2ZW50VGhyb3R0bGUuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQTE3QzgxMjAwRjJBNUNGNzAwNURBQUVCIC8q
IEhUTUxFbGVtZW50RmFjdG9yeS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBh
dGggPSBIVE1MRWxlbWVudEZhY3RvcnkuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQlBMTdDODEyMTBGMkE1Q0Y3MDA1REFBRUIgLyogSFRNTEVsZW1lbnRGYWN0b3J5LmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEhUTUxFbGVtZW50RmFjdG9yeS5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OworCQlBMUFGMjkwODEzRTdFQTAwMDAzRThCMjMgLyogUmVuZGVy
U1ZHQmFzaWNTaGFwZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBS
ZW5kZXJTVkdCYXNpY1NoYXBlLmNwcDsgcGF0aCA9IHJlbmRlcmluZy9zdmcvUmVuZGVyU1ZHQmFz
aWNTaGFwZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUExQUYyOTBDMTNFN0VB
MTQwMDNFOEIyMyAvKiBSZW5kZXJTVkdCYXNpY1NoYXBlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgbmFtZSA9IFJlbmRlclNWR0Jhc2ljU2hhcGUuaDsgcGF0aCA9IHJlbmRlcmluZy9zdmcv
UmVuZGVyU1ZHQmFzaWNTaGFwZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlBMUFG
MjkxMDEzRTdFQTM5MDAzRThCMjMgLyogUmVuZGVyU1ZHUmVjdC5jcHAgKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBSZW5kZXJTVkdSZWN0LmNwcDsgcGF0aCA9IHJlbmRlcmlu
Zy9zdmcvUmVuZGVyU1ZHUmVjdC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUEx
QUYyOTE0MTNFN0VBNEIwMDNFOEIyMyAvKiBSZW5kZXJTVkdSZWN0LmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgbmFtZSA9IFJlbmRlclNWR1JlY3QuaDsgcGF0aCA9IHJlbmRlcmluZy9zdmcv
UmVuZGVyU1ZHUmVjdC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlBMUM3RkFBMTEz
M0E1RDM1MDBENjczMkQgLyogSlNYUGF0aFJlc3VsdEN1c3RvbS5jcHAgKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBKU1hQYXRoUmVzdWx0Q3VzdG9tLmNwcDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQTFFMTE1NDMxMzAxNUMzRDAwNTRBQzhDIC8qIERpc3RhbnRM
aWdodFNvdXJjZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBEaXN0
YW50TGlnaHRTb3VyY2UuY3BwOyBwYXRoID0gZmlsdGVycy9EaXN0YW50TGlnaHRTb3VyY2UuY3Bw
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlBMUUxMTU0NTEzMDE1QzRFMDA1NEFDOEMg
LyogUG9pbnRMaWdodFNvdXJjZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5h
bWUgPSBQb2ludExpZ2h0U291cmNlLmNwcDsgcGF0aCA9IGZpbHRlcnMvUG9pbnRMaWdodFNvdXJj
ZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0xMjg4NSw2ICsxMjg4OSwxMCBA
QAogCQkwODY3RDY5MUZFODQwMjhGQzAyQUFDMDcgLyogV2ViS2l0ICovID0gewogCQkJaXNhID0g
UEJYR3JvdXA7CiAJCQljaGlsZHJlbiA9ICgKKwkJCQlBMUFGMjkxNDEzRTdFQTRCMDAzRThCMjMg
LyogUmVuZGVyU1ZHUmVjdC5oICovLAorCQkJCUExQUYyOTEwMTNFN0VBMzkwMDNFOEIyMyAvKiBS
ZW5kZXJTVkdSZWN0LmNwcCAqLywKKwkJCQlBMUFGMjkwQzEzRTdFQTE0MDAzRThCMjMgLyogUmVu
ZGVyU1ZHQmFzaWNTaGFwZS5oICovLAorCQkJCUExQUYyOTA4MTNFN0VBMDAwMDNFOEIyMyAvKiBS
ZW5kZXJTVkdCYXNpY1NoYXBlLmNwcCAqLywKIAkJCQk2NUM5N0FGMjA4RUE5MDg4MDBBQ0QyNzMg
LyogY29uZmlnLmggKi8sCiAJCQkJRURFQzk4MDIwQUVEN0UxNzAwNTkxMzdGIC8qIFdlYkNvcmVQ
cmVmaXguaCAqLywKIAkJCQk5MzA3MDYxMzA5RTBDQTgyMDBCMTdGRTQgLyogRGVyaXZlZFNvdXJj
ZXMubWFrZSAqLywKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJP
YmplY3QuaCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJPYmplY3QuaAppbmRleCAy
YWFlYjM5Li41MjExZmFhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVyT2JqZWN0LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck9iamVjdC5o
CkBAIC0zNDYsMTIgKzM0NiwxNCBAQCBwdWJsaWM6CiAjaWYgRU5BQkxFKFNWRykKICAgICAvLyBG
SVhNRTogVW50aWwgYWxsIFNWRyByZW5kZXJzIGNhbiBiZSBzdWJjbGFzc2VzIG9mIFJlbmRlclNW
R01vZGVsT2JqZWN0IHdlIGhhdmUKICAgICAvLyB0byBhZGQgU1ZHIHJlbmRlcmVyIG1ldGhvZHMg
dG8gUmVuZGVyT2JqZWN0IHdpdGggYW4gQVNTRVJUX05PVF9SRUFDSEVEKCkgZGVmYXVsdCBpbXBs
ZW1lbnRhdGlvbi4KKyAgICB2aXJ0dWFsIGJvb2wgaXNTVkdCYXNpY1NoYXBlKCkgY29uc3QgeyBy
ZXR1cm4gZmFsc2U7IH0KICAgICB2aXJ0dWFsIGJvb2wgaXNTVkdSb290KCkgY29uc3QgeyByZXR1
cm4gZmFsc2U7IH0KICAgICB2aXJ0dWFsIGJvb2wgaXNTVkdDb250YWluZXIoKSBjb25zdCB7IHJl
dHVybiBmYWxzZTsgfQogICAgIHZpcnR1YWwgYm9vbCBpc1NWR1ZpZXdwb3J0Q29udGFpbmVyKCkg
Y29uc3QgeyByZXR1cm4gZmFsc2U7IH0gCiAgICAgdmlydHVhbCBib29sIGlzU1ZHR3JhZGllbnRT
dG9wKCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KICAgICB2aXJ0dWFsIGJvb2wgaXNTVkdIaWRk
ZW5Db250YWluZXIoKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQogICAgIHZpcnR1YWwgYm9vbCBp
c1NWR1BhdGgoKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQorICAgIHZpcnR1YWwgYm9vbCBpc1NW
R1JlY3QoKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQogICAgIHZpcnR1YWwgYm9vbCBpc1NWR1Rl
eHQoKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQogICAgIHZpcnR1YWwgYm9vbCBpc1NWR1RleHRQ
YXRoKCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KICAgICB2aXJ0dWFsIGJvb2wgaXNTVkdJbmxp
bmUoKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdBbGxJbk9uZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvc3ZnL1JlbmRlclNWR0FsbEluT25lLmNwcAppbmRleCA5ZWEzYmU1Li45YWQyYTQ1IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR0FsbEluT25l
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR0FsbEluT25l
LmNwcApAQCAtMjUsNiArMjUsNyBAQAogCiAvLyBUaGlzIGFsbC1pbi1vbmUgY3BwIGZpbGUgY3V0
cyBkb3duIG9uIHRlbXBsYXRlIGJsb2F0IHRvIGFsbG93IHVzIHRvIGJ1aWxkIG91ciBXaW5kb3dz
IHJlbGVhc2UgYnVpbGQuCiAKKyNpbmNsdWRlICJSZW5kZXJTVkdCYXNpY1NoYXBlLmNwcCIKICNp
bmNsdWRlICJSZW5kZXJTVkdCbG9jay5jcHAiCiAjaW5jbHVkZSAiUmVuZGVyU1ZHQ29udGFpbmVy
LmNwcCIKICNpbmNsdWRlICJSZW5kZXJTVkdGb3JlaWduT2JqZWN0LmNwcCIKQEAgLTM1LDYgKzM2
LDcgQEAKICNpbmNsdWRlICJSZW5kZXJTVkdJbmxpbmVUZXh0LmNwcCIKICNpbmNsdWRlICJSZW5k
ZXJTVkdNb2RlbE9iamVjdC5jcHAiCiAjaW5jbHVkZSAiUmVuZGVyU1ZHUGF0aC5jcHAiCisjaW5j
bHVkZSAiUmVuZGVyU1ZHUmVjdC5jcHAiCiAjaW5jbHVkZSAiUmVuZGVyU1ZHUmVzb3VyY2UuY3Bw
IgogI2luY2x1ZGUgIlJlbmRlclNWR1Jlc291cmNlQ2xpcHBlci5jcHAiCiAjaW5jbHVkZSAiUmVu
ZGVyU1ZHUmVzb3VyY2VDb250YWluZXIuY3BwIgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdCYXNpY1NoYXBlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9zdmcvUmVuZGVyU1ZHQmFzaWNTaGFwZS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDAwMDAwMC4uMzliMDdkNAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHQmFzaWNTaGFwZS5jcHAKQEAgLTAsMCArMSwxMjUgQEAK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgVW5pdmVyc2l0eSBvZiBTemVnZWQKKyAqIENvcHly
aWdodCAoQykgMjAxMSBSZW5hdGEgSG9kb3ZhbiAocmVuaUB3ZWJraXQub3JnKQorICogQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1l
dDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIFVOSVZFUlNJVFkgT0YgU1pFR0VEIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQor
ICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hB
TEwgVU5JVkVSU0lUWSBPRiBTWkVHRUQgT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQor
ICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisKKyNpZiBFTkFCTEUo
U1ZHKQorI2luY2x1ZGUgIlJlbmRlclNWR0Jhc2ljU2hhcGUuaCIKKworI2luY2x1ZGUgIlBvaW50
ZXJFdmVudHNIaXRSdWxlcy5oIgorI2luY2x1ZGUgIlJlbmRlclNWR1Jlc291cmNlLmgiCisjaW5j
bHVkZSAiU1ZHU3R5bGVkVHJhbnNmb3JtYWJsZUVsZW1lbnQuaCIKKworbmFtZXNwYWNlIFdlYkNv
cmUgeworCitSZW5kZXJTVkdCYXNpY1NoYXBlOjpSZW5kZXJTVkdCYXNpY1NoYXBlKFNWR1N0eWxl
ZFRyYW5zZm9ybWFibGVFbGVtZW50KiBub2RlKQorICAgIDogUmVuZGVyU1ZHTW9kZWxPYmplY3Qo
bm9kZSkKKyAgICAsIG1fbmVlZHNCb3VuZGFyaWVzVXBkYXRlKGZhbHNlKSAvLyBEZWZhdWx0IGlz
IGZhbHNlLCB0aGUgY2FjaGVkIHJlY3RzIGFyZSBlbXB0eSBmcm9tIHRoZSBiZWdpbm5pbmcuCisg
ICAgLCBtX25lZWRzU2hhcGVVcGRhdGUodHJ1ZSkgLy8gRGVmYXVsdCBpcyB0cnVlLCBzbyB3ZSBn
cmFiIGEgUGF0aCBvYmplY3Qgb25jZSBmcm9tIFNWR1N0eWxlZFRyYW5zZm9ybWFibGVFbGVtZW50
LgorICAgICwgbV9uZWVkc1RyYW5zZm9ybVVwZGF0ZSh0cnVlKSAvLyBEZWZhdWx0IGlzIHRydWUs
IHNvIHdlIGdyYWIgYSBBZmZpbmVUcmFuc2Zvcm0gb2JqZWN0IG9uY2UgZnJvbSBTVkdTdHlsZWRU
cmFuc2Zvcm1hYmxlRWxlbWVudC4KK3sKK30KKworUmVuZGVyU1ZHQmFzaWNTaGFwZTo6flJlbmRl
clNWR0Jhc2ljU2hhcGUoKQoreworfQorCitib29sIFJlbmRlclNWR0Jhc2ljU2hhcGU6OmZpbGxD
b250YWlucyhjb25zdCBGbG9hdFBvaW50JiBwb2ludCwgYm9vbCByZXF1aXJlc0ZpbGwpCit7Cisg
ICAgaWYgKCFtX2ZpbGxCb3VuZGluZ0JveC5jb250YWlucyhwb2ludCkpCisgICAgICAgIHJldHVy
biBmYWxzZTsKKworICAgIGlmIChyZXF1aXJlc0ZpbGwpIHsKKyAgICAgICAgQ29sb3IgZmFsbGJh
Y2tDb2xvcjsKKyAgICAgICAgaWYgKCFSZW5kZXJTVkdSZXNvdXJjZTo6ZmlsbFBhaW50aW5nUmVz
b3VyY2UodGhpcywgc3R5bGUoKSwgZmFsbGJhY2tDb2xvcikpCisgICAgICAgICAgICByZXR1cm4g
ZmFsc2U7CisgICAgfQorICAgIHJldHVybiBmaWxsQ29udGFpbnNTbG93Q2FzZShwb2ludCk7Cit9
CisKK2Jvb2wgUmVuZGVyU1ZHQmFzaWNTaGFwZTo6ZmlsbENvbnRhaW5zU2xvd0Nhc2UoY29uc3Qg
RmxvYXRQb2ludCYpCit7CisgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgcmV0dXJuIGZh
bHNlOworfQorCitib29sIFJlbmRlclNWR0Jhc2ljU2hhcGU6OnN0cm9rZUNvbnRhaW5zU2xvd0Nh
c2UoY29uc3QgRmxvYXRQb2ludCYpCit7CisgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAg
cmV0dXJuIGZhbHNlOworfQorCitib29sIFJlbmRlclNWR0Jhc2ljU2hhcGU6OnN0cm9rZUNvbnRh
aW5zKGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50LCBib29sIHJlcXVpcmVzU3Ryb2tlKQoreworICAg
IGlmICghbV9zdHJva2VBbmRNYXJrZXJCb3VuZGluZ0JveC5jb250YWlucyhwb2ludCkpCisgICAg
ICAgIHJldHVybiBmYWxzZTsKKworICAgIENvbG9yIGZhbGxiYWNrQ29sb3I7CisgICAgaWYgKHJl
cXVpcmVzU3Ryb2tlICYmICFSZW5kZXJTVkdSZXNvdXJjZTo6c3Ryb2tlUGFpbnRpbmdSZXNvdXJj
ZSh0aGlzLCBzdHlsZSgpLCBmYWxsYmFja0NvbG9yKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOwor
ICAgIHJldHVybiBzdHJva2VDb250YWluc1Nsb3dDYXNlKHBvaW50KTsKK30KKworLy8gVGhpcyBt
ZXRob2QgaXMgY2FsbGVkIGZyb20gaW5zaWRlIHBhaW50T3V0bGluZSgpIHNpbmNlIHdlIGNhbGwg
cGFpbnRPdXRsaW5lKCkKKy8vIHdoaWxlIHRyYW5zZm9ybWVkIHRvIG91ciBjb29yZCBzeXN0ZW0s
IHJldHVybiBsb2NhbCBjb29yZHMKK3ZvaWQgUmVuZGVyU1ZHQmFzaWNTaGFwZTo6YWRkRm9jdXNS
aW5nUmVjdHMoVmVjdG9yPEludFJlY3Q+JiByZWN0cywgY29uc3QgSW50UG9pbnQmKQoreworICAg
IEludFJlY3QgcmVjdCA9IGVuY2xvc2luZ0ludFJlY3QocmVwYWludFJlY3RJbkxvY2FsQ29vcmRp
bmF0ZXMoKSk7CisgICAgaWYgKCFyZWN0LmlzRW1wdHkoKSkKKyAgICAgICAgcmVjdHMuYXBwZW5k
KHJlY3QpOworfQorCitib29sIFJlbmRlclNWR0Jhc2ljU2hhcGU6Om5vZGVBdEZsb2F0UG9pbnQo
Y29uc3QgSGl0VGVzdFJlcXVlc3QmIHJlcXVlc3QsIEhpdFRlc3RSZXN1bHQmIHJlc3VsdCwgY29u
c3QgRmxvYXRQb2ludCYgcG9pbnRJblBhcmVudCwgSGl0VGVzdEFjdGlvbiBoaXRUZXN0QWN0aW9u
KQoreworICAgIC8vIFdlIG9ubHkgZHJhdyBpbiB0aGUgZm9yZ3JvdW5kIHBoYXNlLCBzbyB3ZSBv
bmx5IGhpdC10ZXN0IHRoZW4uCisgICAgaWYgKGhpdFRlc3RBY3Rpb24gIT0gSGl0VGVzdEZvcmVn
cm91bmQpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIEZsb2F0UG9pbnQgbG9jYWxQb2lu
dCA9IG1fbG9jYWxUcmFuc2Zvcm0uaW52ZXJzZSgpLm1hcFBvaW50KHBvaW50SW5QYXJlbnQpOwor
CisgICAgaWYgKCFTVkdSZW5kZXJTdXBwb3J0Ojpwb2ludEluQ2xpcHBpbmdBcmVhKHRoaXMsIGxv
Y2FsUG9pbnQpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBQb2ludGVyRXZlbnRzSGl0
UnVsZXMgaGl0UnVsZXMoUG9pbnRlckV2ZW50c0hpdFJ1bGVzOjpTVkdfUEFUSF9ISVRURVNUSU5H
LCByZXF1ZXN0LCBzdHlsZSgpLT5wb2ludGVyRXZlbnRzKCkpOworICAgIGJvb2wgaXNWaXNpYmxl
ID0gKHN0eWxlKCktPnZpc2liaWxpdHkoKSA9PSBWSVNJQkxFKTsKKyAgICBpZiAoaXNWaXNpYmxl
IHx8ICFoaXRSdWxlcy5yZXF1aXJlVmlzaWJsZSkgeworICAgICAgICBjb25zdCBTVkdSZW5kZXJT
dHlsZSogc3ZnU3R5bGUgPSBzdHlsZSgpLT5zdmdTdHlsZSgpOworICAgICAgICBXaW5kUnVsZSBm
aWxsUnVsZSA9IHN2Z1N0eWxlLT5maWxsUnVsZSgpOworICAgICAgICBpZiAocmVxdWVzdC5zdmdD
bGlwQ29udGVudCgpKQorICAgICAgICAgICAgZmlsbFJ1bGUgPSBzdmdTdHlsZS0+Y2xpcFJ1bGUo
KTsKKyAgICAgICAgaWYgKChoaXRSdWxlcy5jYW5IaXRTdHJva2UgJiYgKHN2Z1N0eWxlLT5oYXNT
dHJva2UoKSB8fCAhaGl0UnVsZXMucmVxdWlyZVN0cm9rZSkgJiYgc3Ryb2tlQ29udGFpbnMobG9j
YWxQb2ludCwgaGl0UnVsZXMucmVxdWlyZVN0cm9rZSkpCisgICAgICAgICAgICB8fCAoaGl0UnVs
ZXMuY2FuSGl0RmlsbCAmJiAoc3ZnU3R5bGUtPmhhc0ZpbGwoKSB8fCAhaGl0UnVsZXMucmVxdWly
ZUZpbGwpICYmIGZpbGxDb250YWlucyhsb2NhbFBvaW50LCBoaXRSdWxlcy5yZXF1aXJlRmlsbCkp
KSB7CisgICAgICAgICAgICB1cGRhdGVIaXRUZXN0UmVzdWx0KHJlc3VsdCwgcm91bmRlZEludFBv
aW50KGxvY2FsUG9pbnQpKTsKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9Cisg
ICAgfQorICAgIHJldHVybiBmYWxzZTsKK30KKworfQorCisjZW5kaWYgLy8gRU5BQkxFKFNWRykK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHQmFzaWNT
aGFwZS5oIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdCYXNpY1NoYXBl
LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDliYzk2MgotLS0gL2Rldi9u
dWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHQmFzaWNTaGFw
ZS5oCkBAIC0wLDAgKzEsODQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgVW5pdmVyc2l0
eSBvZiBTemVnZWQKKyAqIENvcHlyaWdodCAoQykgMjAxMSBSZW5hdGEgSG9kb3ZhbiAocmVuaUB3
ZWJraXQub3JnKQorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFVOSVZFUlNJVFkgT0YgU1pFR0VEIGBgQVMgSVMnJyBB
TkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVU5JVkVSU0lUWSBPRiBTWkVHRUQgT1IKKyAqIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIFJlbmRl
clNWR0Jhc2ljU2hhcGVfaAorI2RlZmluZSBSZW5kZXJTVkdCYXNpY1NoYXBlX2gKKworI2lmIEVO
QUJMRShTVkcpCisjaW5jbHVkZSAiUmVuZGVyU1ZHTW9kZWxPYmplY3QuaCIKKyNpbmNsdWRlICJT
dHJva2VTdHlsZUFwcGxpZXIuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBTVkdT
dHlsZWRUcmFuc2Zvcm1hYmxlRWxlbWVudDsKKworZW51bSBQb2ludExvY2F0aW9uIHsKKyAgICBJ
bnNpZGVTaGFwZSwKKyAgICBPdXRzaWRlU2hhcGUsCisgICAgT25TdHJva2UKK307CisKK2NsYXNz
IFJlbmRlclNWR0Jhc2ljU2hhcGUgOiBwdWJsaWMgUmVuZGVyU1ZHTW9kZWxPYmplY3QgeworcHVi
bGljOgorICAgIFJlbmRlclNWR0Jhc2ljU2hhcGUoU1ZHU3R5bGVkVHJhbnNmb3JtYWJsZUVsZW1l
bnQqKTsKKyAgICB2aXJ0dWFsIH5SZW5kZXJTVkdCYXNpY1NoYXBlKCk7CisKKyAgICB2b2lkIHNl
dE5lZWRzU2hhcGVVcGRhdGUoKSB7IG1fbmVlZHNTaGFwZVVwZGF0ZSA9IHRydWU7IH0KKyAgICB2
aXJ0dWFsIGJvb2wgaXNTVkdCYXNpY1NoYXBlKCkgY29uc3QgeyByZXR1cm4gdHJ1ZTsgfQorICAg
IHZpcnR1YWwgY29uc3QgY2hhciogcmVuZGVyTmFtZSgpIGNvbnN0IHsgcmV0dXJuICJSZW5kZXJT
VkdCYXNpY1NoYXBlIjsgfQorCitwcm90ZWN0ZWQ6CisgICAgLy8gSGl0LWRldGVjdGlvbiBzZXBl
cmF0ZWQgZm9yIHRoZSBmaWxsIGFuZCB0aGUgc3Ryb2tlCisgICAgYm9vbCBmaWxsQ29udGFpbnMo
Y29uc3QgRmxvYXRQb2ludCYsIGJvb2wgcmVxdWlyZXNGaWxsID0gdHJ1ZSk7CisgICAgdmlydHVh
bCBib29sIGZpbGxDb250YWluc1Nsb3dDYXNlKGNvbnN0IEZsb2F0UG9pbnQmKTsKKyAgICBib29s
IHN0cm9rZUNvbnRhaW5zKGNvbnN0IEZsb2F0UG9pbnQmLCBib29sIHJlcXVpcmVzU3Ryb2tlID0g
dHJ1ZSk7CisgICAgdmlydHVhbCBib29sIHN0cm9rZUNvbnRhaW5zU2xvd0Nhc2UoY29uc3QgRmxv
YXRQb2ludCYpOworICAgIHZpcnR1YWwgdm9pZCBhZGRGb2N1c1JpbmdSZWN0cyhWZWN0b3I8SW50
UmVjdD4mLCBjb25zdCBJbnRQb2ludCYpOworCisgICAgdmlydHVhbCBGbG9hdFJlY3Qgb2JqZWN0
Qm91bmRpbmdCb3goKSBjb25zdCB7IHJldHVybiBtX2ZpbGxCb3VuZGluZ0JveDsgfQorICAgIHZp
cnR1YWwgRmxvYXRSZWN0IHN0cm9rZUJvdW5kaW5nQm94KCkgY29uc3QgeyByZXR1cm4gbV9zdHJv
a2VBbmRNYXJrZXJCb3VuZGluZ0JveDsgfQorICAgIHZpcnR1YWwgRmxvYXRSZWN0IHJlcGFpbnRS
ZWN0SW5Mb2NhbENvb3JkaW5hdGVzKCkgY29uc3QgeyByZXR1cm4gbV9yZXBhaW50Qm91bmRpbmdC
b3g7IH0KKyAgICB2aXJ0dWFsIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgbG9jYWxUb1BhcmVudFRy
YW5zZm9ybSgpIGNvbnN0IHsgcmV0dXJuIG1fbG9jYWxUcmFuc2Zvcm07IH0KKworICAgIHZpcnR1
YWwgYm9vbCBub2RlQXRGbG9hdFBvaW50KGNvbnN0IEhpdFRlc3RSZXF1ZXN0JiwgSGl0VGVzdFJl
c3VsdCYsIGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50SW5QYXJlbnQsIEhpdFRlc3RBY3Rpb24pOwor
Citwcm90ZWN0ZWQ6CisgICAgYm9vbCBtX25lZWRzQm91bmRhcmllc1VwZGF0ZSA6IDE7CisgICAg
Ym9vbCBtX25lZWRzU2hhcGVVcGRhdGUgOiAxOworICAgIGJvb2wgbV9uZWVkc1RyYW5zZm9ybVVw
ZGF0ZSA6IDE7CisKKyAgICBGbG9hdFJlY3QgbV9maWxsQm91bmRpbmdCb3g7CisgICAgRmxvYXRS
ZWN0IG1fcmVwYWludEJvdW5kaW5nQm94OworICAgIEZsb2F0UmVjdCBtX3N0cm9rZUFuZE1hcmtl
ckJvdW5kaW5nQm94OworCisgICAgQWZmaW5lVHJhbnNmb3JtIG1fbG9jYWxUcmFuc2Zvcm07Cit9
OworCit9CisKKyNlbmRpZiAvLyBFTkFCTEUoU1ZHKQorI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR01vZGVsT2JqZWN0LmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHTW9kZWxPYmplY3QuY3BwCmluZGV4IDIy
NjIxMWEuLjFiMDc0YmIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcv
UmVuZGVyU1ZHTW9kZWxPYmplY3QuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9z
dmcvUmVuZGVyU1ZHTW9kZWxPYmplY3QuY3BwCkBAIC0xNTMsNyArMTUzLDcgQEAgc3RhdGljIGJv
b2wgaW50ZXJzZWN0c0FsbG93aW5nRW1wdHkoY29uc3QgRmxvYXRSZWN0JiByLCBjb25zdCBGbG9h
dFJlY3QmIG90aGVyKQogLy8gaW1hZ2UsIGxpbmUsIHBhdGgsIHBvbHlnb24sIHBvbHlsaW5lLCBy
ZWN0LCB0ZXh0IGFuZCB1c2UuCiBzdGF0aWMgYm9vbCBpc0dyYXBoaWNzRWxlbWVudChSZW5kZXJP
YmplY3QqIHJlbmRlcmVyKQogewotICAgIHJldHVybiByZW5kZXJlci0+aXNTVkdQYXRoKCkgfHwg
cmVuZGVyZXItPmlzU1ZHVGV4dCgpIHx8IHJlbmRlcmVyLT5pc1NWR0ltYWdlKCkgfHwgcmVuZGVy
ZXItPmlzU1ZHU2hhZG93VHJlZVJvb3RDb250YWluZXIoKTsKKyAgICByZXR1cm4gcmVuZGVyZXIt
PmlzU1ZHUGF0aCgpIHx8IHJlbmRlcmVyLT5pc1NWR0Jhc2ljU2hhcGUoKSB8fCByZW5kZXJlci0+
aXNTVkdUZXh0KCkgfHwgcmVuZGVyZXItPmlzU1ZHSW1hZ2UoKSB8fCByZW5kZXJlci0+aXNTVkdT
aGFkb3dUcmVlUm9vdENvbnRhaW5lcigpOwogfQogCiBib29sIFJlbmRlclNWR01vZGVsT2JqZWN0
OjpjaGVja0ludGVyc2VjdGlvbihSZW5kZXJPYmplY3QqIHJlbmRlcmVyLCBjb25zdCBGbG9hdFJl
Y3QmIHJlY3QpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRl
clNWR1BhdGguY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdQYXRo
LmNwcAppbmRleCBkZWJhYjc3Li5hOTkxNzBlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1BhdGguY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9zdmcvUmVuZGVyU1ZHUGF0aC5jcHAKQEAgLTI4NSw3ICsyODUsNyBAQCB2b2lkIFJlbmRl
clNWR1BhdGg6OnBhaW50KFBhaW50SW5mbyYgcGFpbnRJbmZvLCBjb25zdCBJbnRQb2ludCYpCiAK
IC8vIFRoaXMgbWV0aG9kIGlzIGNhbGxlZCBmcm9tIGluc2lkZSBwYWludE91dGxpbmUoKSBzaW5j
ZSB3ZSBjYWxsIHBhaW50T3V0bGluZSgpCiAvLyB3aGlsZSB0cmFuc2Zvcm1lZCB0byBvdXIgY29v
cmQgc3lzdGVtLCByZXR1cm4gbG9jYWwgY29vcmRzCi12b2lkIFJlbmRlclNWR1BhdGg6OmFkZEZv
Y3VzUmluZ1JlY3RzKFZlY3RvcjxMYXlvdXRSZWN0PiYgcmVjdHMsIGNvbnN0IExheW91dFBvaW50
JikgCit2b2lkIFJlbmRlclNWR1BhdGg6OmFkZEZvY3VzUmluZ1JlY3RzKFZlY3RvcjxMYXlvdXRS
ZWN0PiYgcmVjdHMsIGNvbnN0IExheW91dFBvaW50JikKIHsKICAgICBMYXlvdXRSZWN0IHJlY3Qg
PSBlbmNsb3NpbmdMYXlvdXRSZWN0KHJlcGFpbnRSZWN0SW5Mb2NhbENvb3JkaW5hdGVzKCkpOwog
ICAgIGlmICghcmVjdC5pc0VtcHR5KCkpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvc3ZnL1JlbmRlclNWR1JlY3QuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2
Zy9SZW5kZXJTVkdSZWN0LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5m
ZTFjYmI5Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9S
ZW5kZXJTVkdSZWN0LmNwcApAQCAtMCwwICsxLDI5NyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAxMSBVbml2ZXJzaXR5IG9mIFN6ZWdlZAorICogQ29weXJpZ2h0IChDKSAyMDExIFJlbmF0YSBI
b2RvdmFuIChyZW5pQHdlYmtpdC5vcmcpCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVU5JVkVSU0lUWSBPRiBTWkVH
RUQgYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBVTklWRVJTSVRZIE9GIFNaRUdF
RCBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBS
T0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkg
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisK
KyNpbmNsdWRlICJjb25maWcuaCIKKworI2lmIEVOQUJMRShTVkcpCisjaW5jbHVkZSAiUmVuZGVy
U1ZHUmVjdC5oIgorCisjaW5jbHVkZSAiUG9pbnRlckV2ZW50c0hpdFJ1bGVzLmgiCisjaW5jbHVk
ZSAiUmVuZGVyU1ZHUmVzb3VyY2UuaCIKKyNpbmNsdWRlICJSZW5kZXJTVkdSZXNvdXJjZVNvbGlk
Q29sb3IuaCIKKyNpbmNsdWRlICJTVkdOYW1lcy5oIgorI2luY2x1ZGUgIlNWR1JlY3RFbGVtZW50
LmgiCisjaW5jbHVkZSAiU1ZHUmVuZGVyU3VwcG9ydC5oIgorI2luY2x1ZGUgIlNWR1Jlc291cmNl
c0NhY2hlLmgiCisjaW5jbHVkZSAiU1ZHU3R5bGVkVHJhbnNmb3JtYWJsZUVsZW1lbnQuaCIKKwor
bmFtZXNwYWNlIFdlYkNvcmUgeworCitSZW5kZXJTVkdSZWN0OjpSZW5kZXJTVkdSZWN0KFNWR1N0
eWxlZFRyYW5zZm9ybWFibGVFbGVtZW50KiBub2RlKQorICAgIDogUmVuZGVyU1ZHQmFzaWNTaGFw
ZShub2RlKQorICAgICwgbV9oYXNSeChmYWxzZSkKKyAgICAsIG1faGFzUnkoZmFsc2UpCit7Cit9
CisKK1JlbmRlclNWR1JlY3Q6On5SZW5kZXJTVkdSZWN0KCkKK3sKK30KKworYm9vbCBSZW5kZXJT
VkdSZWN0OjpmaWxsQ29udGFpbnNTbG93Q2FzZShjb25zdCBGbG9hdFBvaW50JiBwb2ludCkKK3sK
KyAgICBpZiAoZGV0ZXJtaW5lUG9pbnRMb2NhdGlvbihwb2ludCwgbV9yZWN0KSAhPSBPdXRzaWRl
U2hhcGUpCisgICAgICAgIHJldHVybiB0cnVlOworICAgIHJldHVybiBmYWxzZTsKK30KKworYm9v
bCBSZW5kZXJTVkdSZWN0OjpzdHJva2VDb250YWluc1Nsb3dDYXNlKGNvbnN0IEZsb2F0UG9pbnQm
IHBvaW50KQoreworICAgIGNvbnN0IFNWR1JlbmRlclN0eWxlKiBzdmdTdHlsZSA9IHN0eWxlKCkt
PnN2Z1N0eWxlKCk7CisgICAgZmxvYXQgc3Ryb2tlV2lkdGggPSBzdmdTdHlsZS0+c3Ryb2tlV2lk
dGgoKS52YWx1ZShzdGF0aWNfY2FzdDxTVkdSZWN0RWxlbWVudCo+KG5vZGUoKSkpOworICAgIEZs
b2F0UmVjdCBpbm5lclN0cm9rZVJlY3QgPSBtX3JlY3Q7CisgICAgRmxvYXRSZWN0IG91dGVyU3Ry
b2tlUmVjdCA9IG1fcmVjdDsKKyAgICBpbm5lclN0cm9rZVJlY3QuaW5mbGF0ZSgtc3Ryb2tlV2lk
dGggLyAyKTsKKyAgICBvdXRlclN0cm9rZVJlY3QuaW5mbGF0ZShzdHJva2VXaWR0aCAvIDIpOwor
ICAgIGlmIChkZXRlcm1pbmVQb2ludExvY2F0aW9uKHBvaW50LCBpbm5lclN0cm9rZVJlY3QpICE9
IEluc2lkZVNoYXBlICYmIGRldGVybWluZVBvaW50TG9jYXRpb24ocG9pbnQsIG91dGVyU3Ryb2tl
UmVjdCkgIT0gT3V0c2lkZVNoYXBlKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICByZXR1cm4g
ZmFsc2U7Cit9CisKK1BvaW50TG9jYXRpb24gUmVuZGVyU1ZHUmVjdDo6ZGV0ZXJtaW5lUG9pbnRM
b2NhdGlvbihjb25zdCBGbG9hdFBvaW50JiBwb2ludCwgY29uc3QgRmxvYXRSZWN0JiByZWN0KQor
eworICAgIC8vIFRlc3Qgd2hldGhlciB0aGUgcmVjdCBjb250YWlucyB0aGUgY2VydGFpbiBwb2lu
dCBvciBub3QKKyAgICBpZiAocmVjdC54KCkgPD0gcG9pbnQueCgpICYmIHJlY3QubWF4WCgpID49
IHBvaW50LngoKSAmJiByZWN0LnkoKSA8PSBwb2ludC55KCkgJiYgcmVjdC5tYXhZKCkgPj0gcG9p
bnQueSgpKQorICAgICAgICByZXR1cm4gKHJlY3QueCgpIDwgcG9pbnQueCgpICYmIHJlY3QubWF4
WCgpID4gcG9pbnQueCgpICYmIHJlY3QueSgpIDwgcG9pbnQueSgpICYmIHJlY3QubWF4WSgpID4g
cG9pbnQueSgpKSA/IEluc2lkZVNoYXBlIDogT25TdHJva2U7CisgICAgcmV0dXJuIE91dHNpZGVT
aGFwZTsKK30KKwordm9pZCBSZW5kZXJTVkdSZWN0OjpsYXlvdXQoKQoreworICAgIExheW91dFJl
cGFpbnRlciByZXBhaW50ZXIoKnRoaXMsIGNoZWNrRm9yUmVwYWludER1cmluZ0xheW91dCgpICYm
IHNlbGZOZWVkc0xheW91dCgpKTsKKyAgICBTVkdTdHlsZWRUcmFuc2Zvcm1hYmxlRWxlbWVudCog
ZWxlbWVudCA9IHN0YXRpY19jYXN0PFNWR1N0eWxlZFRyYW5zZm9ybWFibGVFbGVtZW50Kj4obm9k
ZSgpKTsKKworICAgIGJvb2wgdXBkYXRlQ2FjaGVkQm91bmRhcmllc0luUGFyZW50cyA9IGZhbHNl
OworCisgICAgYm9vbCBuZWVkc1NoYXBlVXBkYXRlID0gbV9uZWVkc1NoYXBlVXBkYXRlOworICAg
IGlmIChuZWVkc1NoYXBlVXBkYXRlKSB7CisgICAgICAgIFNWR1JlY3RFbGVtZW50KiByZWN0ID0g
c3RhdGljX2Nhc3Q8U1ZHUmVjdEVsZW1lbnQqPihlbGVtZW50KTsKKyAgICAgICAgZmxvYXQgd2lk
dGhWYWx1ZSA9IHJlY3QtPndpZHRoKCkudmFsdWUocmVjdCk7CisgICAgICAgIGlmICh3aWR0aFZh
bHVlIDw9IDApCisgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgZmxvYXQgaGVpZ2h0VmFs
dWUgPSByZWN0LT5oZWlnaHQoKS52YWx1ZShyZWN0KTsKKyAgICAgICAgaWYgKGhlaWdodFZhbHVl
IDw9IDApCisgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgZmxvYXQgeFZhbHVlID0gcmVj
dC0+eCgpLnZhbHVlKHJlY3QpOworICAgICAgICBmbG9hdCB5VmFsdWUgPSByZWN0LT55KCkudmFs
dWUocmVjdCk7CisKKyAgICAgICAgRmxvYXRSZWN0IGZyZWN0KHhWYWx1ZSwgeVZhbHVlLCB3aWR0
aFZhbHVlLCBoZWlnaHRWYWx1ZSk7CisgICAgICAgIG1fcmVjdCA9IGZyZWN0OworICAgICAgICBt
X2hhc1J4ID0gcmVjdC0+aGFzQXR0cmlidXRlKFNWR05hbWVzOjpyeEF0dHIpOworICAgICAgICBt
X2hhc1J5ID0gcmVjdC0+aGFzQXR0cmlidXRlKFNWR05hbWVzOjpyeUF0dHIpOworICAgICAgICBp
ZiAobV9oYXNSeCB8fCBtX2hhc1J5KSB7CisgICAgICAgICAgICBtX3J4VmFsdWUgPSByZWN0LT5y
eCgpLnZhbHVlKHJlY3QpOworICAgICAgICAgICAgbV9yeVZhbHVlID0gcmVjdC0+cnkoKS52YWx1
ZShyZWN0KTsKKyAgICAgICAgICAgIGlmICghbV9oYXNSeCkKKyAgICAgICAgICAgICAgICBtX3J4
VmFsdWUgPSBtX3J5VmFsdWU7CisgICAgICAgICAgICBlbHNlIGlmICghbV9oYXNSeSkKKyAgICAg
ICAgICAgICAgICBtX3J5VmFsdWUgPSBtX3J4VmFsdWU7CisgICAgICAgIH0KKyAgICAgICAgbV9u
ZWVkc1NoYXBlVXBkYXRlID0gZmFsc2U7CisgICAgICAgIHVwZGF0ZUNhY2hlZEJvdW5kYXJpZXNJ
blBhcmVudHMgPSB0cnVlOworICAgIH0KKworICAgIGlmIChtX25lZWRzVHJhbnNmb3JtVXBkYXRl
KSB7CisgICAgICAgIG1fbG9jYWxUcmFuc2Zvcm0gPSBlbGVtZW50LT5hbmltYXRlZExvY2FsVHJh
bnNmb3JtKCk7CisgICAgICAgIG1fbmVlZHNUcmFuc2Zvcm1VcGRhdGUgPSBmYWxzZTsKKyAgICAg
ICAgdXBkYXRlQ2FjaGVkQm91bmRhcmllc0luUGFyZW50cyA9IHRydWU7CisgICAgfQorCisgICAg
aWYgKG1fbmVlZHNCb3VuZGFyaWVzVXBkYXRlKQorICAgICAgICB1cGRhdGVDYWNoZWRCb3VuZGFy
aWVzSW5QYXJlbnRzID0gdHJ1ZTsKKworICAgIC8vIEludmFsaWRhdGUgYWxsIHJlc291cmNlcyBv
ZiB0aGlzIGNsaWVudCBpZiBvdXIgbGF5b3V0IGNoYW5nZWQuCisgICAgaWYgKG1fZXZlckhhZExh
eW91dCAmJiBzZWxmTmVlZHNMYXlvdXQoKSkKKyAgICAgICAgU1ZHUmVzb3VyY2VzQ2FjaGU6OmNs
aWVudExheW91dENoYW5nZWQodGhpcyk7CisKKyAgICAvLyBBdCB0aGlzIHBvaW50IExheW91dFJl
cGFpbnRlciBhbHJlYWR5IGdyYWJiZWQgdGhlIG9sZCBib3VuZHMsCisgICAgLy8gcmVjYWxjdWxh
dGUgdGhlbSBub3cgc28gcmVwYWludEFmdGVyTGF5b3V0KCkgdXNlcyB0aGUgbmV3IGJvdW5kcy4K
KyAgICBpZiAobmVlZHNTaGFwZVVwZGF0ZSB8fCBtX25lZWRzQm91bmRhcmllc1VwZGF0ZSkgewor
ICAgICAgICB1cGRhdGVDYWNoZWRCb3VuZGFyaWVzKCk7CisgICAgICAgIG1fbmVlZHNCb3VuZGFy
aWVzVXBkYXRlID0gZmFsc2U7CisgICAgfQorCisgICAgLy8gSWYgb3VyIGJvdW5kcyBjaGFuZ2Vk
LCBub3RpZnkgdGhlIHBhcmVudHMuCisgICAgaWYgKHVwZGF0ZUNhY2hlZEJvdW5kYXJpZXNJblBh
cmVudHMpCisgICAgICAgIFJlbmRlclNWR01vZGVsT2JqZWN0OjpzZXROZWVkc0JvdW5kYXJpZXNV
cGRhdGUoKTsKKworICAgIHJlcGFpbnRlci5yZXBhaW50QWZ0ZXJMYXlvdXQoKTsKKyAgICBzZXRO
ZWVkc0xheW91dChmYWxzZSk7Cit9CisKK3ZvaWQgUmVuZGVyU1ZHUmVjdDo6cGFpbnQoUGFpbnRJ
bmZvJiBwYWludEluZm8sIGNvbnN0IExheW91dFBvaW50JikKK3sKKyAgICBpZiAocGFpbnRJbmZv
LmNvbnRleHQtPnBhaW50aW5nRGlzYWJsZWQoKSB8fCBzdHlsZSgpLT52aXNpYmlsaXR5KCkgPT0g
SElEREVOIHx8IG1fcmVjdC5pc0VtcHR5KCkpCisgICAgICAgIHJldHVybjsKKworICAgIEZsb2F0
UmVjdCBib3VuZGluZ0JveCA9IHJlcGFpbnRSZWN0SW5Mb2NhbENvb3JkaW5hdGVzKCk7CisgICAg
aWYgKCFTVkdSZW5kZXJTdXBwb3J0OjpwYWludEluZm9JbnRlcnNlY3RzUmVwYWludFJlY3QoYm91
bmRpbmdCb3gsIG1fbG9jYWxUcmFuc2Zvcm0sIHBhaW50SW5mbykpCisgICAgICAgIHJldHVybjsK
KworICAgIFBhaW50SW5mbyBjaGlsZFBhaW50SW5mbyhwYWludEluZm8pOworICAgIGJvb2wgZHJh
d3NPdXRsaW5lID0gc3R5bGUoKS0+b3V0bGluZVdpZHRoKCkgJiYgKGNoaWxkUGFpbnRJbmZvLnBo
YXNlID09IFBhaW50UGhhc2VPdXRsaW5lIHx8IGNoaWxkUGFpbnRJbmZvLnBoYXNlID09IFBhaW50
UGhhc2VTZWxmT3V0bGluZSk7CisgICAgaWYgKGRyYXdzT3V0bGluZSB8fCBjaGlsZFBhaW50SW5m
by5waGFzZSA9PSBQYWludFBoYXNlRm9yZWdyb3VuZCkgeworICAgICAgICBjaGlsZFBhaW50SW5m
by5jb250ZXh0LT5zYXZlKCk7CisgICAgICAgIGNoaWxkUGFpbnRJbmZvLmFwcGx5VHJhbnNmb3Jt
KG1fbG9jYWxUcmFuc2Zvcm0pOworCisgICAgICAgIGlmIChjaGlsZFBhaW50SW5mby5waGFzZSA9
PSBQYWludFBoYXNlRm9yZWdyb3VuZCkgeworICAgICAgICAgICAgUGFpbnRJbmZvIHNhdmVkSW5m
byhjaGlsZFBhaW50SW5mbyk7CisKKyAgICAgICAgICAgIGlmIChTVkdSZW5kZXJTdXBwb3J0Ojpw
cmVwYXJlVG9SZW5kZXJTVkdDb250ZW50KHRoaXMsIGNoaWxkUGFpbnRJbmZvKSkgeworICAgICAg
ICAgICAgICAgIGNvbnN0IFNWR1JlbmRlclN0eWxlKiBzdmdTdHlsZSA9IHN0eWxlKCktPnN2Z1N0
eWxlKCk7CisgICAgICAgICAgICAgICAgaWYgKHN2Z1N0eWxlLT5zaGFwZVJlbmRlcmluZygpID09
IFNSX0NSSVNQRURHRVMpCisgICAgICAgICAgICAgICAgICAgIGNoaWxkUGFpbnRJbmZvLmNvbnRl
eHQtPnNldFNob3VsZEFudGlhbGlhcyhmYWxzZSk7CisKKyAgICAgICAgICAgICAgICBmaWxsQW5k
U3Ryb2tlUmVjdChjaGlsZFBhaW50SW5mby5jb250ZXh0KTsKKyAgICAgICAgICAgIH0KKworICAg
ICAgICAgICAgU1ZHUmVuZGVyU3VwcG9ydDo6ZmluaXNoUmVuZGVyU1ZHQ29udGVudCh0aGlzLCBj
aGlsZFBhaW50SW5mbywgc2F2ZWRJbmZvLmNvbnRleHQpOworICAgICAgICB9CisKKyAgICAgICAg
aWYgKGRyYXdzT3V0bGluZSkKKyAgICAgICAgICAgIHBhaW50T3V0bGluZShjaGlsZFBhaW50SW5m
by5jb250ZXh0LCBJbnRSZWN0KGJvdW5kaW5nQm94KSk7CisKKyAgICAgICAgY2hpbGRQYWludElu
Zm8uY29udGV4dC0+cmVzdG9yZSgpOworICAgIH0KK30KKwordm9pZCBSZW5kZXJTVkdSZWN0Ojpm
aWxsQW5kU3Ryb2tlUmVjdChHcmFwaGljc0NvbnRleHQqIGNvbnRleHQpCit7CisgICAgUmVuZGVy
U3R5bGUqIHN0eWxlID0gdGhpcy0+c3R5bGUoKTsKKworICAgIENvbG9yIGZhbGxiYWNrQ29sb3I7
CisgICAgaWYgKFJlbmRlclNWR1Jlc291cmNlKiBmaWxsUGFpbnRpbmdSZXNvdXJjZSA9IFJlbmRl
clNWR1Jlc291cmNlOjpmaWxsUGFpbnRpbmdSZXNvdXJjZSh0aGlzLCBzdHlsZSwgZmFsbGJhY2tD
b2xvcikpIHsKKyAgICAgICAgaWYgKGZpbGxQYWludGluZ1Jlc291cmNlLT5hcHBseVJlc291cmNl
KHRoaXMsIHN0eWxlLCBjb250ZXh0LCBBcHBseVRvRmlsbE1vZGUpKSB7CisgICAgICAgICAgICBp
ZiAoIW1faGFzUnggJiYgIW1faGFzUnkpCisgICAgICAgICAgICAgICAgY29udGV4dC0+ZmlsbFJl
Y3QobV9yZWN0KTsKKyAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgIFBhdGggcGF0
aDsKKyAgICAgICAgICAgICAgICBwYXRoLmFkZFJvdW5kZWRSZWN0KG1fcmVjdCwgRmxvYXRTaXpl
KG1fcnhWYWx1ZSwgbV9yeVZhbHVlKSk7CisgICAgICAgICAgICAgICAgY29udGV4dC0+ZmlsbFBh
dGgocGF0aCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0gZWxzZSBpZiAoZmFsbGJhY2tDb2xv
ci5pc1ZhbGlkKCkpIHsKKyAgICAgICAgICAgIFJlbmRlclNWR1Jlc291cmNlU29saWRDb2xvciog
ZmFsbGJhY2tSZXNvdXJjZSA9IFJlbmRlclNWR1Jlc291cmNlOjpzaGFyZWRTb2xpZFBhaW50aW5n
UmVzb3VyY2UoKTsKKyAgICAgICAgICAgIGZhbGxiYWNrUmVzb3VyY2UtPnNldENvbG9yKGZhbGxi
YWNrQ29sb3IpOworICAgICAgICAgICAgaWYgKGZhbGxiYWNrUmVzb3VyY2UtPmFwcGx5UmVzb3Vy
Y2UodGhpcywgc3R5bGUsIGNvbnRleHQsIEFwcGx5VG9GaWxsTW9kZSkpIHsKKyAgICAgICAgICAg
ICAgICBpZiAoIW1faGFzUnggJiYgIW1faGFzUnkpCisgICAgICAgICAgICAgICAgICAgIGNvbnRl
eHQtPmZpbGxSZWN0KG1fcmVjdCk7CisgICAgICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAg
ICAgICAgICAgIFBhdGggcGF0aDsKKyAgICAgICAgICAgICAgICAgICAgcGF0aC5hZGRSb3VuZGVk
UmVjdChtX3JlY3QsIEZsb2F0U2l6ZShtX3J4VmFsdWUsIG1fcnlWYWx1ZSkpOworICAgICAgICAg
ICAgICAgICAgICBjb250ZXh0LT5maWxsUGF0aChwYXRoKTsKKyAgICAgICAgICAgICAgICB9Cisg
ICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisKKyAgICBmYWxsYmFja0NvbG9yID0gQ29s
b3IoKTsKKyAgICBSZW5kZXJTVkdSZXNvdXJjZSogc3Ryb2tlUGFpbnRpbmdSZXNvdXJjZSA9IFJl
bmRlclNWR1Jlc291cmNlOjpzdHJva2VQYWludGluZ1Jlc291cmNlKHRoaXMsIHN0eWxlLCBmYWxs
YmFja0NvbG9yKTsKKyAgICBpZiAoIXN0cm9rZVBhaW50aW5nUmVzb3VyY2UpCisgICAgICAgIHJl
dHVybjsKKworICAgIEZsb2F0UmVjdCByZWN0OworCisgICAgYm9vbCBub25TY2FsaW5nU3Ryb2tl
ID0gc3R5bGUtPnN2Z1N0eWxlKCktPnZlY3RvckVmZmVjdCgpID09IFZFX05PTl9TQ0FMSU5HX1NU
Uk9LRTsKKyAgICBib29sIHJlc3RvcmVDb250ZXh0ID0gZmFsc2U7CisgICAgU1ZHU3R5bGVkVHJh
bnNmb3JtYWJsZUVsZW1lbnQqIGVsZW1lbnQgPSBzdGF0aWNfY2FzdDxTVkdTdHlsZWRUcmFuc2Zv
cm1hYmxlRWxlbWVudCo+KG5vZGUoKSk7CisgICAgaWYgKG5vblNjYWxpbmdTdHJva2UpIHsKKyAg
ICAgICAgQWZmaW5lVHJhbnNmb3JtIG5vblNjYWxpbmdTdHJva2VUcmFuc2Zvcm0gPSBlbGVtZW50
LT5nZXRTY3JlZW5DVE0oU1ZHTG9jYXRhYmxlOjpEaXNhbGxvd1N0eWxlVXBkYXRlKTsKKyAgICAg
ICAgaWYgKCFub25TY2FsaW5nU3Ryb2tlVHJhbnNmb3JtLmlzSW52ZXJ0aWJsZSgpKQorICAgICAg
ICAgICAgcmV0dXJuOworCisgICAgICAgIHJlY3QgPSBub25TY2FsaW5nU3Ryb2tlVHJhbnNmb3Jt
Lm1hcFJlY3QobV9yZWN0KTsKKworICAgICAgICBjb250ZXh0LT5zYXZlKCk7CisgICAgICAgIGNv
bnRleHQtPmNvbmNhdENUTShub25TY2FsaW5nU3Ryb2tlVHJhbnNmb3JtLmludmVyc2UoKSk7Cisg
ICAgICAgIHJlc3RvcmVDb250ZXh0ID0gdHJ1ZTsKKyAgICB9CisKKyAgICBpZiAoc3Ryb2tlUGFp
bnRpbmdSZXNvdXJjZS0+YXBwbHlSZXNvdXJjZSh0aGlzLCBzdHlsZSwgY29udGV4dCwgQXBwbHlU
b1N0cm9rZU1vZGUpKSB7CisgICAgICAgIGlmICghbV9oYXNSeCAmJiAhbV9oYXNSeSkKKyAgICAg
ICAgICAgIGNvbnRleHQtPnN0cm9rZVJlY3Qobm9uU2NhbGluZ1N0cm9rZSA/IHJlY3QgOiBtX3Jl
Y3QsIHN0eWxlLT5zdmdTdHlsZSgpLT5zdHJva2VXaWR0aCgpLnZhbHVlKGVsZW1lbnQpKTsKKyAg
ICAgICAgZWxzZSB7CisgICAgICAgICAgICBQYXRoIHBhdGg7CisgICAgICAgICAgICBwYXRoLmFk
ZFJvdW5kZWRSZWN0KG1fcmVjdCwgRmxvYXRTaXplKG1fcnhWYWx1ZSwgbV9yeVZhbHVlKSk7Cisg
ICAgICAgICAgICBjb250ZXh0LT5zdHJva2VQYXRoKHBhdGgpOworICAgICAgICB9CisgICAgfSBl
bHNlIGlmIChmYWxsYmFja0NvbG9yLmlzVmFsaWQoKSkgeworICAgICAgICBSZW5kZXJTVkdSZXNv
dXJjZVNvbGlkQ29sb3IqIGZhbGxiYWNrUmVzb3VyY2UgPSBSZW5kZXJTVkdSZXNvdXJjZTo6c2hh
cmVkU29saWRQYWludGluZ1Jlc291cmNlKCk7CisgICAgICAgIGZhbGxiYWNrUmVzb3VyY2UtPnNl
dENvbG9yKGZhbGxiYWNrQ29sb3IpOworICAgICAgICBpZiAoZmFsbGJhY2tSZXNvdXJjZS0+YXBw
bHlSZXNvdXJjZSh0aGlzLCBzdHlsZSwgY29udGV4dCwgQXBwbHlUb1N0cm9rZU1vZGUpKSB7Cisg
ICAgICAgICAgICBpZiAoIW1faGFzUnggJiYgIW1faGFzUnkpCisgICAgICAgICAgICAgICAgY29u
dGV4dC0+c3Ryb2tlUmVjdChub25TY2FsaW5nU3Ryb2tlID8gcmVjdCA6IG1fcmVjdCwgc3R5bGUt
PnN2Z1N0eWxlKCktPnN0cm9rZVdpZHRoKCkudmFsdWUoZWxlbWVudCkpOworICAgICAgICAgICAg
ZWxzZSB7CisgICAgICAgICAgICAgICAgUGF0aCBwYXRoOworICAgICAgICAgICAgICAgIHBhdGgu
YWRkUm91bmRlZFJlY3QobV9yZWN0LCBGbG9hdFNpemUobV9yeFZhbHVlLCBtX3J5VmFsdWUpKTsK
KyAgICAgICAgICAgICAgICBjb250ZXh0LT5zdHJva2VQYXRoKHBhdGgpOworICAgICAgICAgICAg
fQorICAgICAgICB9CisgICAgfQorCisgICAgaWYgKHJlc3RvcmVDb250ZXh0KQorICAgICAgICBj
b250ZXh0LT5yZXN0b3JlKCk7Cit9CisKK0Zsb2F0UmVjdCBSZW5kZXJTVkdSZWN0OjpzdHJva2VC
b3VuZGluZ1JlY3QoKQoreworICAgIGNvbnN0IFNWR1JlbmRlclN0eWxlKiBzdmdTdHlsZSA9IHN0
eWxlKCktPnN2Z1N0eWxlKCk7CisgICAgZmxvYXQgc3Ryb2tlV2lkdGggPSBzdmdTdHlsZS0+c3Ry
b2tlV2lkdGgoKS52YWx1ZShzdGF0aWNfY2FzdDxTVkdSZWN0RWxlbWVudCo+KG5vZGUoKSkpOwor
ICAgIEZsb2F0UmVjdCBpbmZsYXRlZFJlY3RXaXRoU3Ryb2tlID0gbV9yZWN0OworCisgICAgaW5m
bGF0ZWRSZWN0V2l0aFN0cm9rZS5pbmZsYXRlKHN0cm9rZVdpZHRoIC8gMik7CisgICAgcmV0dXJu
IEZsb2F0UmVjdChpbmZsYXRlZFJlY3RXaXRoU3Ryb2tlLngoKSwgaW5mbGF0ZWRSZWN0V2l0aFN0
cm9rZS55KCksIGluZmxhdGVkUmVjdFdpdGhTdHJva2UubWF4WCgpLCBpbmZsYXRlZFJlY3RXaXRo
U3Ryb2tlLm1heFkoKSk7Cit9CisKK3ZvaWQgUmVuZGVyU1ZHUmVjdDo6dXBkYXRlQ2FjaGVkQm91
bmRhcmllcygpCit7CisgICAgaWYgKG1fcmVjdC5pc0VtcHR5KCkpIHsKKyAgICAgICAgbV9maWxs
Qm91bmRpbmdCb3ggPSBGbG9hdFJlY3QoKTsKKyAgICAgICAgbV9zdHJva2VBbmRNYXJrZXJCb3Vu
ZGluZ0JveCA9IEZsb2F0UmVjdCgpOworICAgICAgICBtX3JlcGFpbnRCb3VuZGluZ0JveCA9IEZs
b2F0UmVjdCgpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgLy8gQ2FjaGUgX3VuY2xp
cHBlZF8gZmlsbCBib3VuZGluZyBib3gsIHVzZWQgZm9yIGNhbGN1bGF0aW9ucyBpbiByZXNvdXJj
ZXMKKyAgICBtX2ZpbGxCb3VuZGluZ0JveCA9IG1fcmVjdDsKKworICAgIC8vIENhY2hlIF91bmNs
aXBwZWRfIHN0cm9rZSBib3VuZGluZyBib3gsIHVzZWQgZm9yIGNhbGN1bGF0aW9ucyBpbiByZXNv
dXJjZXMgKGluY2x1ZGVzIG1hcmtlciBib3VuZGFyaWVzKQorICAgIG1fc3Ryb2tlQW5kTWFya2Vy
Qm91bmRpbmdCb3ggPSBtX2ZpbGxCb3VuZGluZ0JveDsKKworICAgIGNvbnN0IFNWR1JlbmRlclN0
eWxlKiBzdmdTdHlsZSA9IHN0eWxlKCktPnN2Z1N0eWxlKCk7CisgICAgaWYgKHN2Z1N0eWxlLT5o
YXNTdHJva2UoKSkKKyAgICAgICAgbV9zdHJva2VBbmRNYXJrZXJCb3VuZGluZ0JveC51bml0ZShz
dHJva2VCb3VuZGluZ1JlY3QoKSk7CisKKyAgICAvLyBDYWNoZSBzbWFsbGVzdCBwb3NzaWJsZSBy
ZXBhaW50IHJlY3RhbmdsZQorICAgIG1fcmVwYWludEJvdW5kaW5nQm94ID0gbV9zdHJva2VBbmRN
YXJrZXJCb3VuZGluZ0JveDsKKyAgICBTVkdSZW5kZXJTdXBwb3J0OjppbnRlcnNlY3RSZXBhaW50
UmVjdFdpdGhSZXNvdXJjZXModGhpcywgbV9yZXBhaW50Qm91bmRpbmdCb3gpOworfQorCit9CisK
KyNlbmRpZiAvLyBFTkFCTEUoU1ZHKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL3N2Zy9SZW5kZXJTVkdSZWN0LmggYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1Jl
bmRlclNWR1JlY3QuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43OTAyMDRm
Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJT
VkdSZWN0LmgKQEAgLTAsMCArMSw3NSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMSBVbml2
ZXJzaXR5IG9mIFN6ZWdlZAorICogQ29weXJpZ2h0IChDKSAyMDExIFJlbmF0YSBIb2RvdmFuIChy
ZW5pQHdlYmtpdC5vcmcpCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVU5JVkVSU0lUWSBPRiBTWkVHRUQgYGBBUyBJ
UycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBVTklWRVJTSVRZIE9GIFNaRUdFRCBPUgorICog
Q09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkK
KyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYg
UmVuZGVyU1ZHUmVjdF9oCisjZGVmaW5lIFJlbmRlclNWR1JlY3RfaAorCisjaWYgRU5BQkxFKFNW
RykKKyNpbmNsdWRlICJBZmZpbmVUcmFuc2Zvcm0uaCIKKyNpbmNsdWRlICJGbG9hdFJlY3QuaCIK
KyNpbmNsdWRlICJSZW5kZXJTVkdCYXNpY1NoYXBlLmgiCisjaW5jbHVkZSAiU1ZHTWFya2VyTGF5
b3V0SW5mby5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIFNWR1N0eWxlZFRyYW5z
Zm9ybWFibGVFbGVtZW50OworCitjbGFzcyBSZW5kZXJTVkdSZWN0IDogcHVibGljIFJlbmRlclNW
R0Jhc2ljU2hhcGUgeworcHVibGljOgorICAgIFJlbmRlclNWR1JlY3QoU1ZHU3R5bGVkVHJhbnNm
b3JtYWJsZUVsZW1lbnQqKTsKKyAgICB2aXJ0dWFsIH5SZW5kZXJTVkdSZWN0KCk7CisKK3ByaXZh
dGU6CisgICAgLy8gSGl0LWRldGVjdGlvbiBzZXBlcmF0ZWQgZm9yIHRoZSBmaWxsIGFuZCB0aGUg
c3Ryb2tlCisgICAgdmlydHVhbCBib29sIGZpbGxDb250YWluc1Nsb3dDYXNlKGNvbnN0IEZsb2F0
UG9pbnQmKTsKKyAgICB2aXJ0dWFsIGJvb2wgc3Ryb2tlQ29udGFpbnNTbG93Q2FzZShjb25zdCBG
bG9hdFBvaW50Jik7CisKKyAgICBQb2ludExvY2F0aW9uIGRldGVybWluZVBvaW50TG9jYXRpb24o
Y29uc3QgRmxvYXRQb2ludCYsIGNvbnN0IEZsb2F0UmVjdCYpOworICAgIGJvb2wgc3Ryb2tlQ29u
dGFpbnNTaGFwZShjb25zdCBGbG9hdFBvaW50Jik7CisgICAgZmxvYXQgY2FsY3VsYXRlRGV0ZXJt
aW5hbnRGb3JUaHJlZVBvaW50KGZsb2F0LCBmbG9hdCwgZmxvYXQsIGZsb2F0LCBmbG9hdCwgZmxv
YXQpOworICAgIEZsb2F0UmVjdCBzdHJva2VCb3VuZGluZ1JlY3QoKTsKKworICAgIHZpcnR1YWwg
Ym9vbCBpc1NWR1JlY3QoKSBjb25zdCB7IHJldHVybiB0cnVlOyB9CisgICAgdmlydHVhbCBjb25z
dCBjaGFyKiByZW5kZXJOYW1lKCkgY29uc3QgeyByZXR1cm4gIlJlbmRlclNWR1JlY3QiOyB9CisK
KyAgICB2aXJ0dWFsIHZvaWQgbGF5b3V0KCk7CisgICAgdmlydHVhbCB2b2lkIHBhaW50KFBhaW50
SW5mbyYsIGNvbnN0IExheW91dFBvaW50Jik7CisKKyAgICB2b2lkIGZpbGxBbmRTdHJva2VSZWN0
KEdyYXBoaWNzQ29udGV4dCopOworICAgIHZvaWQgdXBkYXRlQ2FjaGVkQm91bmRhcmllcygpOwor
CisgICAgRmxvYXRSZWN0IG1fcmVjdDsKKyAgICBmbG9hdCBtX3J4VmFsdWU7CisgICAgZmxvYXQg
bV9yeVZhbHVlOworICAgIGJvb2wgbV9oYXNSeDsKKyAgICBib29sIG1faGFzUnk7Cit9OworCit9
CisKKyNlbmRpZiAvLyBFTkFCTEUoU1ZHKQorI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291cmNlQ2xpcHBlci5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291cmNlQ2xpcHBlci5jcHAKaW5kZXgg
MjM4YzA5Ni4uNDU3N2FlZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2
Zy9SZW5kZXJTVkdSZXNvdXJjZUNsaXBwZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VDbGlwcGVyLmNwcApAQCAtMjQyLDcgKzI0Miw3IEBA
IGJvb2wgUmVuZGVyU1ZHUmVzb3VyY2VDbGlwcGVyOjpkcmF3Q29udGVudEludG9NYXNrSW1hZ2Uo
Q2xpcHBlckRhdGEqIGNsaXBwZXJEYXRhCiAgICAgICAgIH0KIAogICAgICAgICAvLyBPbmx5IHNo
YXBlcywgcGF0aHMgYW5kIHRleHRzIGFyZSBhbGxvd2VkIGZvciBjbGlwcGluZy4KLSAgICAgICAg
aWYgKCFyZW5kZXJlci0+aXNTVkdQYXRoKCkgJiYgIXJlbmRlcmVyLT5pc1NWR1RleHQoKSkKKyAg
ICAgICAgaWYgKCFyZW5kZXJlci0+aXNTVkdQYXRoKCkgJiYgIXJlbmRlcmVyLT5pc1NWR0Jhc2lj
U2hhcGUoKSAmJiAhcmVuZGVyZXItPmlzU1ZHVGV4dCgpKQogICAgICAgICAgICAgY29udGludWU7
CiAKICAgICAgICAgLy8gU2F2ZSB0aGUgb2xkIFJlbmRlclN0eWxlIG9mIHRoZSBjdXJyZW50IG9i
amVjdCBmb3IgcmVzdG9yaW5nIGFmdGVyIGRyYXdpbmcKQEAgLTI4NCw3ICsyODQsNyBAQCB2b2lk
IFJlbmRlclNWR1Jlc291cmNlQ2xpcHBlcjo6Y2FsY3VsYXRlQ2xpcENvbnRlbnRSZXBhaW50UmVj
dCgpCiAgICAgICAgIFJlbmRlck9iamVjdCogcmVuZGVyZXIgPSBjaGlsZE5vZGUtPnJlbmRlcmVy
KCk7CiAgICAgICAgIGlmICghY2hpbGROb2RlLT5pc1NWR0VsZW1lbnQoKSB8fCAhc3RhdGljX2Nh
c3Q8U1ZHRWxlbWVudCo+KGNoaWxkTm9kZSktPmlzU3R5bGVkKCkgfHwgIXJlbmRlcmVyKQogICAg
ICAgICAgICAgY29udGludWU7Ci0gICAgICAgIGlmICghcmVuZGVyZXItPmlzU1ZHUGF0aCgpICYm
ICFyZW5kZXJlci0+aXNTVkdUZXh0KCkgJiYgIXJlbmRlcmVyLT5pc1NWR1NoYWRvd1RyZWVSb290
Q29udGFpbmVyKCkpCisgICAgICAgIGlmICghcmVuZGVyZXItPmlzU1ZHUGF0aCgpICYmICFyZW5k
ZXJlci0+aXNTVkdCYXNpY1NoYXBlKCkgJiYgIXJlbmRlcmVyLT5pc1NWR1RleHQoKSAmJiAhcmVu
ZGVyZXItPmlzU1ZHU2hhZG93VHJlZVJvb3RDb250YWluZXIoKSkKICAgICAgICAgICAgIGNvbnRp
bnVlOwogICAgICAgICBSZW5kZXJTdHlsZSogc3R5bGUgPSByZW5kZXJlci0+c3R5bGUoKTsKICAg
ICAgICAgaWYgKCFzdHlsZSB8fCBzdHlsZS0+ZGlzcGxheSgpID09IE5PTkUgfHwgc3R5bGUtPnZp
c2liaWxpdHkoKSAhPSBWSVNJQkxFKQpAQCAtMzEwLDcgKzMxMCw3IEBAIGJvb2wgUmVuZGVyU1ZH
UmVzb3VyY2VDbGlwcGVyOjpoaXRUZXN0Q2xpcENvbnRlbnQoY29uc3QgRmxvYXRSZWN0JiBvYmpl
Y3RCb3VuZGluCiAgICAgICAgIFJlbmRlck9iamVjdCogcmVuZGVyZXIgPSBjaGlsZE5vZGUtPnJl
bmRlcmVyKCk7CiAgICAgICAgIGlmICghY2hpbGROb2RlLT5pc1NWR0VsZW1lbnQoKSB8fCAhc3Rh
dGljX2Nhc3Q8U1ZHRWxlbWVudCo+KGNoaWxkTm9kZSktPmlzU3R5bGVkKCkgfHwgIXJlbmRlcmVy
KQogICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIGlmICghcmVuZGVyZXItPmlzU1ZHUGF0
aCgpICYmICFyZW5kZXJlci0+aXNTVkdUZXh0KCkgJiYgIXJlbmRlcmVyLT5pc1NWR1NoYWRvd1Ry
ZWVSb290Q29udGFpbmVyKCkpCisgICAgICAgIGlmICghcmVuZGVyZXItPmlzU1ZHUGF0aCgpICYm
ICFyZW5kZXJlci0+aXNTVkdCYXNpY1NoYXBlKCkgJiYgIXJlbmRlcmVyLT5pc1NWR1RleHQoKSAm
JiAhcmVuZGVyZXItPmlzU1ZHU2hhZG93VHJlZVJvb3RDb250YWluZXIoKSkKICAgICAgICAgICAg
IGNvbnRpbnVlOwogICAgICAgICBJbnRQb2ludCBoaXRQb2ludDsKICAgICAgICAgSGl0VGVzdFJl
c3VsdCByZXN1bHQoaGl0UG9pbnQpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvc3ZnL1NW
R1JlY3RFbGVtZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdSZWN0RWxlbWVudC5jcHAK
aW5kZXggMDA0MzdkYS4uZTQ0ZmE2ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvc3ZnL1NW
R1JlY3RFbGVtZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHUmVjdEVsZW1lbnQu
Y3BwCkBAIC0zMiw2ICszMiw4IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAorY2xhc3MgUmVu
ZGVyU1ZHUmVjdDsKKwogLy8gQW5pbWF0ZWQgcHJvcGVydHkgZGVmaW5pdGlvbnMKIERFRklORV9B
TklNQVRFRF9MRU5HVEgoU1ZHUmVjdEVsZW1lbnQsIFNWR05hbWVzOjp4QXR0ciwgWCwgeCkKIERF
RklORV9BTklNQVRFRF9MRU5HVEgoU1ZHUmVjdEVsZW1lbnQsIFNWR05hbWVzOjp5QXR0ciwgWSwg
eSkKQEAgLTE2NSwxMiArMTY3LDEyIEBAIHZvaWQgU1ZHUmVjdEVsZW1lbnQ6OnN2Z0F0dHJpYnV0
ZUNoYW5nZWQoY29uc3QgUXVhbGlmaWVkTmFtZSYgYXR0ck5hbWUpCiAgICAgaWYgKFNWR1Rlc3Rz
OjpoYW5kbGVBdHRyaWJ1dGVDaGFuZ2UodGhpcywgYXR0ck5hbWUpKQogICAgICAgICByZXR1cm47
CiAKLSAgICBSZW5kZXJTVkdQYXRoKiByZW5kZXJlciA9IHN0YXRpY19jYXN0PFJlbmRlclNWR1Bh
dGgqPih0aGlzLT5yZW5kZXJlcigpKTsKKyAgICBSZW5kZXJTVkdSZWN0KiByZW5kZXJlciA9IHN0
YXRpY19jYXN0PFJlbmRlclNWR1JlY3QqPih0aGlzLT5yZW5kZXJlcigpKTsKICAgICBpZiAoIXJl
bmRlcmVyKQogICAgICAgICByZXR1cm47CiAKICAgICBpZiAoaXNMZW5ndGhBdHRyaWJ1dGUpIHsK
LSAgICAgICAgcmVuZGVyZXItPnNldE5lZWRzUGF0aFVwZGF0ZSgpOworICAgICAgICByZW5kZXJl
ci0+c2V0TmVlZHNTaGFwZVVwZGF0ZSgpOwogICAgICAgICBSZW5kZXJTVkdSZXNvdXJjZTo6bWFy
a0ZvckxheW91dEFuZFBhcmVudFJlc291cmNlSW52YWxpZGF0aW9uKHJlbmRlcmVyKTsKICAgICAg
ICAgcmV0dXJuOwogICAgIH0KQEAgLTIyNiw2ICsyMjgsMTIgQEAgYm9vbCBTVkdSZWN0RWxlbWVu
dDo6c2VsZkhhc1JlbGF0aXZlTGVuZ3RocygpIGNvbnN0CiAgICAgICAgIHx8IHJ5KCkuaXNSZWxh
dGl2ZSgpOwogfQogCitSZW5kZXJPYmplY3QqIFNWR1JlY3RFbGVtZW50OjpjcmVhdGVSZW5kZXJl
cihSZW5kZXJBcmVuYSogYXJlbmEsIFJlbmRlclN0eWxlKikKK3sKKyAgICAvLyBCeSBkZWZhdWx0
LCBhbnkgc3ViY2xhc3MgaXMgZXhwZWN0ZWQgdG8gZG8gcGF0aC1iYXNlZCBkcmF3aW5nCisgICAg
cmV0dXJuIG5ldyAoYXJlbmEpIFJlbmRlclNWR1JlY3QodGhpcyk7Cit9CisKIH0KIAogI2VuZGlm
IC8vIEVOQUJMRShTVkcpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHUmVjdEVs
ZW1lbnQuaCBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdSZWN0RWxlbWVudC5oCmluZGV4IDk5NDM3
ZjMuLjVmNTI5MTEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdSZWN0RWxlbWVu
dC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdSZWN0RWxlbWVudC5oCkBAIC0yMiw2ICsy
Miw3IEBACiAjZGVmaW5lIFNWR1JlY3RFbGVtZW50X2gKIAogI2lmIEVOQUJMRShTVkcpCisjaW5j
bHVkZSAiUmVuZGVyU1ZHUmVjdC5oIgogI2luY2x1ZGUgIlNWR0FuaW1hdGVkQm9vbGVhbi5oIgog
I2luY2x1ZGUgIlNWR0FuaW1hdGVkTGVuZ3RoLmgiCiAjaW5jbHVkZSAiU1ZHRXh0ZXJuYWxSZXNv
dXJjZXNSZXF1aXJlZC5oIgpAQCAtNTIsNiArNTMsOCBAQCBwcml2YXRlOgogCiAgICAgdmlydHVh
bCBib29sIHNlbGZIYXNSZWxhdGl2ZUxlbmd0aHMoKSBjb25zdDsKIAorICAgIFJlbmRlck9iamVj
dCogY3JlYXRlUmVuZGVyZXIoUmVuZGVyQXJlbmEqLCBSZW5kZXJTdHlsZSopOworCiAgICAgQkVH
SU5fREVDTEFSRV9BTklNQVRFRF9QUk9QRVJUSUVTKFNWR1JlY3RFbGVtZW50KQogICAgICAgICBE
RUNMQVJFX0FOSU1BVEVEX0xFTkdUSChYLCB4KQogICAgICAgICBERUNMQVJFX0FOSU1BVEVEX0xF
TkdUSChZLCB5KQotLSAKMS43LjUuNAoK
</data>
<flag name="review"
          id="98540"
          type_id="1"
          status="-"
          setter="krit"
    />
    <flag name="commit-queue"
          id="98541"
          type_id="3"
          status="-"
          setter="gyuyoung.kim"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>103487</attachid>
            <date>2011-08-10 07:29:41 -0700</date>
            <delta_ts>2011-08-10 08:55:09 -0700</delta_ts>
            <desc>Proposed patch</desc>
            <filename>0001-send.patch</filename>
            <type>text/plain</type>
            <size>0</size>
            <attacher name="Renata Hodovan">rhodovan.u-szeged</attacher>
            
              <data encoding="base64"></data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>103498</attachid>
            <date>2011-08-10 08:55:09 -0700</date>
            <delta_ts>2011-08-17 00:13:33 -0700</delta_ts>
            <desc>Proposed patch</desc>
            <filename>0001-first_part_layout.patch</filename>
            <type>text/plain</type>
            <size>0</size>
            <attacher name="Renata Hodovan">rhodovan.u-szeged</attacher>
            
              <data encoding="base64"></data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>104154</attachid>
            <date>2011-08-17 00:13:33 -0700</date>
            <delta_ts>2011-08-22 09:21:07 -0700</delta_ts>
            <desc>Draft patch</desc>
            <filename>renderRect.patch</filename>
            <type>text/plain</type>
            <size>70084</size>
            <attacher name="Renata Hodovan">rhodovan.u-szeged</attacher>
            
              <data encoding="base64">RnJvbSBjNTY3ODhjNjRiOGI1YjZjMjZjMDAzMjkzMTg1ZDY1YjkyNmJjMzNhIE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBSZW5hdGEgSG9kb3ZhbiA8cmVuaUB3ZWJraXQub3JnPgpEYXRl
OiBXZWQsIDE3IEF1ZyAyMDExIDA4OjQ3OjQ0ICswMjAwClN1YmplY3Q6IFtQQVRDSF0gcmVuZGVy
UmVjdAoKLS0tCiBTb3VyY2UvV2ViQ29yZS9DTWFrZUxpc3RzLnR4dCAgICAgICAgICAgICAgICAg
ICAgICB8ICAgIDEgKwogU291cmNlL1dlYkNvcmUvR05VbWFrZWZpbGUubGlzdC5hbSAgICAgICAg
ICAgICAgICAgfCAgICAyICsKIFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwaSAgICAgICAgICAg
ICAgICAgICAgICAgIHwgICAgMiArCiBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnBybyAgICAgICAg
ICAgICAgICAgICAgICAgICB8ICAgIDQgKwogU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXBy
b2ovcHJvamVjdC5wYnhwcm9qICAgfCAgICA0ICsKIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJPYmplY3QuaCAgICAgICAgICAgIHwgICAgMiArCiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvUmVuZGVyVHJlZUFzVGV4dC5jcHAgICAgICB8ICAgIDQgKy0KIFNvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9zdmcvUmVuZGVyU1ZHQWxsSW5PbmUuY3BwIHwgICAgMiArCiBTb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1BhdGguY3BwICAgICB8ICAzOTIgKy0tLS0tLS0tLS0t
LS0tLS0KIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUGF0aC5oICAgICAg
IHwgIDExMiArKy0tLS0KIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVj
dC5jcHAgICAgIHwgIDE0NCArKysrKysrCiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1Jl
bmRlclNWR1JlY3QuaCAgICAgICB8ICAgNjMgKysrCiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
c3ZnL1JlbmRlclNWR1NoYXBlLmNwcCAgICB8ICA0MjcgKysrKysrKysrKysrKysrKysrKwogU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdTaGFwZS5oICAgICAgfCAgMTY0ICsr
KysrKysrCiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR1JlbmRlclN1cHBvcnQuY3Bw
ICB8ICAgIDQgKy0KIC4uLi9XZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHUmVuZGVyVHJlZUFzVGV4
dC5jcHAgIHwgICAgNiArLQogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdSZW5kZXJU
cmVlQXNUZXh0LmggfCAgICA0ICstCiBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHUGF0aEVsZW1lbnQu
Y3BwICAgICAgICAgICAgICB8ICAgIDYgKwogU291cmNlL1dlYkNvcmUvc3ZnL1NWR1BhdGhFbGVt
ZW50LmggICAgICAgICAgICAgICAgfCAgICAyICsKIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdSZWN0
RWxlbWVudC5jcHAgICAgICAgICAgICAgIHwgICAxMiArLQogU291cmNlL1dlYkNvcmUvc3ZnL1NW
R1JlY3RFbGVtZW50LmggICAgICAgICAgICAgICAgfCAgICAzICsKIDM2NTUgZmlsZXMgY2hhbmdl
ZCwgMjE1MTIgaW5zZXJ0aW9ucygrKSwgMjEwNTIgZGVsZXRpb25zKC0pCiBjcmVhdGUgbW9kZSAx
MDA2NDQgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZWN0LmNwcAogY3Jl
YXRlIG1vZGUgMTAwNjQ0IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVj
dC5oCiBjcmVhdGUgbW9kZSAxMDA2NDQgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5k
ZXJTVkdTaGFwZS5jcHAKIGNyZWF0ZSBtb2RlIDEwMDY0NCBTb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvc3ZnL1JlbmRlclNWR1NoYXBlLmgKCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9DTWFr
ZUxpc3RzLnR4dCBiL1NvdXJjZS9XZWJDb3JlL0NNYWtlTGlzdHMudHh0CmluZGV4IDRiODNhZGEu
LjM3NmQ2MDggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL0NNYWtlTGlzdHMudHh0CisrKyBi
L1NvdXJjZS9XZWJDb3JlL0NNYWtlTGlzdHMudHh0CkBAIC0xNjEyLDYgKzE2MTIsNyBAQCBJRiAo
RU5BQkxFX1NWRykKICAgICAgICAgcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdJbmxpbmVUZXh0LmNw
cAogICAgICAgICByZW5kZXJpbmcvc3ZnL1JlbmRlclNWR01vZGVsT2JqZWN0LmNwcAogICAgICAg
ICByZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1BhdGguY3BwCisgICAgICAgIHJlbmRlcmluZy9zdmcv
UmVuZGVyU1ZHUmVjdC5jcHAKICAgICAgICAgcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJj
ZS5jcHAKICAgICAgICAgcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJjZUNsaXBwZXIuY3Bw
CiAgICAgICAgIHJlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VDb250YWluZXIuY3BwCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9HTlVtYWtlZmlsZS5saXN0LmFtIGIvU291cmNlL1dl
YkNvcmUvR05VbWFrZWZpbGUubGlzdC5hbQppbmRleCBhMDY4YzAyLi5hZDhlYmZlIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9HTlVtYWtlZmlsZS5saXN0LmFtCisrKyBiL1NvdXJjZS9XZWJD
b3JlL0dOVW1ha2VmaWxlLmxpc3QuYW0KQEAgLTMxNzksNiArMzE3OSw4IEBAIHdlYmNvcmVfc291
cmNlcyArPSBcCiAJU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdNb2RlbE9i
amVjdC5oIFwKIAlTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1BhdGguY3Bw
IFwKIAlTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1BhdGguaCBcCisJU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZWN0LmNwcCBcCisJU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZWN0LmggXAogCVNvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VDbGlwcGVyLmNwcCBcCiAJU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJjZUNsaXBwZXIuaCBcCiAJU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJjZUNvbnRhaW5lci5jcHAgXApkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBpIGIvU291cmNlL1dlYkNvcmUvV2Vi
Q29yZS5neXBpCmluZGV4IDc5YmU5Y2QuLmZkMTk4ZTkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL1dlYkNvcmUuZ3lwaQorKysgYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkKQEAgLTU4
NTUsNiArNTg1NSw4IEBACiAgICAgICAgICAgICAncmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdNb2Rl
bE9iamVjdC5oJywKICAgICAgICAgICAgICdyZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1BhdGguY3Bw
JywKICAgICAgICAgICAgICdyZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1BhdGguaCcsCisgICAgICAg
ICAgICAncmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZWN0LmNwcCcsCisgICAgICAgICAgICAncmVu
ZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZWN0LmgnLAogICAgICAgICAgICAgJ3JlbmRlcmluZy9zdmcv
UmVuZGVyU1ZHUmVzb3VyY2UuY3BwJywKICAgICAgICAgICAgICdyZW5kZXJpbmcvc3ZnL1JlbmRl
clNWR1Jlc291cmNlLmgnLAogICAgICAgICAgICAgJ3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVz
b3VyY2VDbGlwcGVyLmNwcCcsCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnBy
byBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUucHJvCmluZGV4IGE2Zjg5YTQuLmU4OWVlMTkgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUucHJvCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L1dlYkNvcmUucHJvCkBAIC0yMjY2LDYgKzIyNjYsNyBAQCBIRUFERVJTICs9IFwKICAgICByZW5k
ZXJpbmcvc3ZnL1JlbmRlclNWR0lubGluZVRleHQuaCBcCiAgICAgcmVuZGVyaW5nL3N2Zy9SZW5k
ZXJTVkdNb2RlbE9iamVjdC5oIFwKICAgICByZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1BhdGguaCBc
CisgICAgcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZWN0LmggXAogICAgIHJlbmRlcmluZy9zdmcv
UmVuZGVyU1ZHUmVzb3VyY2UuaCBcCiAgICAgcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJj
ZUNsaXBwZXIuaCBcCiAgICAgcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJjZUNvbnRhaW5l
ci5oIFwKQEAgLTIyODAsNiArMjI4MSw3IEBAIEhFQURFUlMgKz0gXAogICAgIHJlbmRlcmluZy9z
dmcvUmVuZGVyU1ZHUmVzb3VyY2VTb2xpZENvbG9yLmggXAogICAgIHJlbmRlcmluZy9zdmcvUmVu
ZGVyU1ZHUm9vdC5oIFwKICAgICByZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1NoYWRvd1RyZWVSb290
Q29udGFpbmVyLmggXAorICAgIHJlbmRlcmluZy9zdmcvUmVuZGVyU1ZHU2hhcGUuaCBcCiAgICAg
cmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdUU3Bhbi5oIFwKICAgICByZW5kZXJpbmcvc3ZnL1JlbmRl
clNWR1RleHQuaCBcCiAgICAgcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdUZXh0UGF0aC5oIFwKQEAg
LTMyOTgsNiArMzMwMCw4IEBAIGNvbnRhaW5zKERFRklORVMsIEVOQUJMRV9TVkc9MSkgewogICAg
ICAgICByZW5kZXJpbmcvc3R5bGUvU1ZHUmVuZGVyU3R5bGVEZWZzLmNwcCBcCiAgICAgICAgIHJl
bmRlcmluZy9Qb2ludGVyRXZlbnRzSGl0UnVsZXMuY3BwIFwKICAgICAgICAgcmVuZGVyaW5nL3N2
Zy9SZW5kZXJTVkdQYXRoLmNwcCBcCisgICAgICAgIHJlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVj
dC5jcHAgXAorICAgICAgICByZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1NoYXBlLmNwcCBcCiAgICAg
ICAgIHN2Zy9hbmltYXRpb24vU01JTFRpbWUuY3BwIFwKICAgICAgICAgc3ZnL2FuaW1hdGlvbi9T
TUlMVGltZUNvbnRhaW5lci5jcHAgXAogICAgICAgICBzdmcvYW5pbWF0aW9uL1NWR1NNSUxFbGVt
ZW50LmNwcCBcCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9w
cm9qZWN0LnBieHByb2ogYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0
LnBieHByb2oKaW5kZXggN2Q2ZjdhZS4uYWVmMGM2MyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagpAQCAtOTg5Myw2ICs5ODkzLDggQEAK
IAkJOUZGRTNFQTMxMUI1QTQzOTAwMzc4NzRFIC8qIEpTTWVtb3J5SW5mby5jcHAgKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBKU01lbW9yeUluZm8uY3BwOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQk5RkZFM0VBNDExQjVBNDM5MDAzNzg3NEUgLyogSlNNZW1vcnlJ
bmZvLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpTTWVtb3J5SW5mby5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlBMDBCNzIxOTExREU2NDI3MDA4QUI5RkYgLyog
Q2hlY2tlZEludC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBDaGVja2VkSW50
Lmg7IHBhdGggPSBjYW52YXMvQ2hlY2tlZEludC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OworCQlBMTMwOUI2NDEzRjE4RDkzMDBDOEEwNjUgLyogUmVuZGVyU1ZHUmVjdC5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBSZW5kZXJTVkdSZWN0LmNwcDsgcGF0aCA9
IHJlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVjdC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CisJCUExMzA5QjY4MTNGMThEQTEwMEM4QTA2NSAvKiBSZW5kZXJTVkdSZWN0LmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IFJlbmRlclNWR1JlY3QuaDsgcGF0aCA9IHJlbmRl
cmluZy9zdmcvUmVuZGVyU1ZHUmVjdC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlB
MTM2QTAwQTExMzREQkQyMDBDQzhENTAgLyogWE1MSHR0cFJlcXVlc3RQcm9ncmVzc0V2ZW50VGhy
b3R0bGUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gWE1MSHR0cFJl
cXVlc3RQcm9ncmVzc0V2ZW50VGhyb3R0bGUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQlBMTM2QTAwQjExMzREQkQyMDBDQzhENTAgLyogWE1MSHR0cFJlcXVlc3RQcm9ncmVzc0V2
ZW50VGhyb3R0bGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gWE1MSHR0cFJl
cXVlc3RQcm9ncmVzc0V2ZW50VGhyb3R0bGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJQTE3QzgxMjAwRjJBNUNGNzAwNURBQUVCIC8qIEhUTUxFbGVtZW50RmFjdG9yeS5jcHAgKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBIVE1MRWxlbWVudEZhY3RvcnkuY3Bw
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMTI5MjMsNiArMTI5MjUsOCBAQAogCQkw
ODY3RDY5MUZFODQwMjhGQzAyQUFDMDcgLyogV2ViS2l0ICovID0gewogCQkJaXNhID0gUEJYR3Jv
dXA7CiAJCQljaGlsZHJlbiA9ICgKKwkJCQlBMTMwOUI2ODEzRjE4REExMDBDOEEwNjUgLyogUmVu
ZGVyU1ZHUmVjdC5oICovLAorCQkJCUExMzA5QjY0MTNGMThEOTMwMEM4QTA2NSAvKiBSZW5kZXJT
VkdSZWN0LmNwcCAqLywKIAkJCQk2NUM5N0FGMjA4RUE5MDg4MDBBQ0QyNzMgLyogY29uZmlnLmgg
Ki8sCiAJCQkJRURFQzk4MDIwQUVEN0UxNzAwNTkxMzdGIC8qIFdlYkNvcmVQcmVmaXguaCAqLywK
IAkJCQk5MzA3MDYxMzA5RTBDQTgyMDBCMTdGRTQgLyogRGVyaXZlZFNvdXJjZXMubWFrZSAqLywK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJPYmplY3QuaCBiL1Nv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJPYmplY3QuaAppbmRleCA4MDYyNjY5Li4zM2I1
MGI1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyT2JqZWN0LmgK
KysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck9iamVjdC5oCkBAIC0zNTIsNiAr
MzUyLDggQEAgcHVibGljOgogICAgIHZpcnR1YWwgYm9vbCBpc1NWR0dyYWRpZW50U3RvcCgpIGNv
bnN0IHsgcmV0dXJuIGZhbHNlOyB9CiAgICAgdmlydHVhbCBib29sIGlzU1ZHSGlkZGVuQ29udGFp
bmVyKCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KICAgICB2aXJ0dWFsIGJvb2wgaXNTVkdQYXRo
KCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KKyAgICB2aXJ0dWFsIGJvb2wgaXNTVkdSZWN0KCkg
Y29uc3QgeyByZXR1cm4gZmFsc2U7IH0KKyAgICB2aXJ0dWFsIGJvb2wgaXNTVkdTaGFwZSgpIGNv
bnN0IHsgcmV0dXJuIGZhbHNlOyB9CiAgICAgdmlydHVhbCBib29sIGlzU1ZHVGV4dCgpIGNvbnN0
IHsgcmV0dXJuIGZhbHNlOyB9CiAgICAgdmlydHVhbCBib29sIGlzU1ZHVGV4dFBhdGgoKSBjb25z
dCB7IHJldHVybiBmYWxzZTsgfQogICAgIHZpcnR1YWwgYm9vbCBpc1NWR0lubGluZSgpIGNvbnN0
IHsgcmV0dXJuIGZhbHNlOyB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyVHJlZUFzVGV4dC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVHJl
ZUFzVGV4dC5jcHAKaW5kZXggNzY5NGQzMy4uNGQxMDY2OSAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL1JlbmRlclRyZWVBc1RleHQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJUcmVlQXNUZXh0LmNwcApAQCAtNTE5LDggKzUxOSw4IEBAIHN0YXRp
YyB2b2lkIHdyaXRlVGV4dFJ1bihUZXh0U3RyZWFtJiB0cywgY29uc3QgUmVuZGVyVGV4dCYgbywg
Y29uc3QgSW5saW5lVGV4dEJvCiB2b2lkIHdyaXRlKFRleHRTdHJlYW0mIHRzLCBjb25zdCBSZW5k
ZXJPYmplY3QmIG8sIGludCBpbmRlbnQsIFJlbmRlckFzVGV4dEJlaGF2aW9yIGJlaGF2aW9yKQog
ewogI2lmIEVOQUJMRShTVkcpCi0gICAgaWYgKG8uaXNTVkdQYXRoKCkpIHsKLSAgICAgICAgd3Jp
dGUodHMsICp0b1JlbmRlclNWR1BhdGgoJm8pLCBpbmRlbnQpOworICAgIGlmIChvLmlzU1ZHU2hh
cGUoKSkgeworICAgICAgICB3cml0ZSh0cywgKnRvUmVuZGVyU1ZHU2hhcGUoJm8pLCBpbmRlbnQp
OwogICAgICAgICByZXR1cm47CiAgICAgfQogICAgIGlmIChvLmlzU1ZHR3JhZGllbnRTdG9wKCkp
IHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHQWxs
SW5PbmUuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdBbGxJbk9u
ZS5jcHAKaW5kZXggOWVhM2JlNS4uMjk2OTAwOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdBbGxJbk9uZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdBbGxJbk9uZS5jcHAKQEAgLTM1LDYgKzM1LDcgQEAKICNp
bmNsdWRlICJSZW5kZXJTVkdJbmxpbmVUZXh0LmNwcCIKICNpbmNsdWRlICJSZW5kZXJTVkdNb2Rl
bE9iamVjdC5jcHAiCiAjaW5jbHVkZSAiUmVuZGVyU1ZHUGF0aC5jcHAiCisjaW5jbHVkZSAiUmVu
ZGVyU1ZHUmVjdC5jcHAiCiAjaW5jbHVkZSAiUmVuZGVyU1ZHUmVzb3VyY2UuY3BwIgogI2luY2x1
ZGUgIlJlbmRlclNWR1Jlc291cmNlQ2xpcHBlci5jcHAiCiAjaW5jbHVkZSAiUmVuZGVyU1ZHUmVz
b3VyY2VDb250YWluZXIuY3BwIgpAQCAtNDksNiArNTAsNyBAQAogI2luY2x1ZGUgIlJlbmRlclNW
R1Jlc291cmNlU29saWRDb2xvci5jcHAiCiAjaW5jbHVkZSAiUmVuZGVyU1ZHUm9vdC5jcHAiCiAj
aW5jbHVkZSAiUmVuZGVyU1ZHU2hhZG93VHJlZVJvb3RDb250YWluZXIuY3BwIgorI2luY2x1ZGUg
IlJlbmRlclNWR1NoYXBlLmNwcCIKICNpbmNsdWRlICJSZW5kZXJTVkdUU3Bhbi5jcHAiCiAjaW5j
bHVkZSAiUmVuZGVyU1ZHVGV4dC5jcHAiCiAjaW5jbHVkZSAiUmVuZGVyU1ZHVGV4dFBhdGguY3Bw
IgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdQYXRo
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUGF0aC5jcHAKaW5k
ZXggZGViYWI3Ny4uMWJmMzY1NiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L3N2Zy9SZW5kZXJTVkdQYXRoLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3Zn
L1JlbmRlclNWR1BhdGguY3BwCkBAIC0xLDI2ICsxLDI4IEBACiAvKgotICogQ29weXJpZ2h0IChD
KSAyMDA0LCAyMDA1LCAyMDA3IE5pa29sYXMgWmltbWVybWFubiA8emltbWVybWFubkBrZGUub3Jn
PgotICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1LCAyMDA4IFJvYiBCdWlzIDxidWlzQGtkZS5v
cmc+Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMDUsIDIwMDcgRXJpYyBTZWlkZWwgPGVyaWNAd2Via2l0
Lm9yZz4KLSAqIENvcHlyaWdodCAoQykgMjAwOSBHb29nbGUsIEluYy4KLSAqIENvcHlyaWdodCAo
QykgMjAwOSBEaXJrIFNjaHVsemUgPGtyaXRAd2Via2l0Lm9yZz4KLSAqIENvcHlyaWdodCAoQykg
UmVzZWFyY2ggSW4gTW90aW9uIExpbWl0ZWQgMjAxMC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAq
IENvcHlyaWdodCAoQykgMjAwOSBKZWZmIFNjaGlsbGVyIDxjb2RlZHJlYWRAZ21haWwuY29tPgor
ICogQ29weXJpZ2h0IChDKSAyMDExIFVuaXZlcnNpdHkgb2YgU3plZ2VkCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTEgUmVuYXRhIEhvZG92YW4gKHJlbmlAd2Via2l0Lm9yZykKKyAqIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCiAgKgotICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4g
cmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0
aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5
IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogdmVyc2lvbiAyIG9mIHRo
ZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCiAg
KgotICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2ls
bCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0
aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExpYnJhcnkgR2VuZXJhbCBQ
dWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSBy
ZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UK
LSAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJ
ZiBub3QsIHdyaXRlIHRvCi0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1
MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAotICogQm9zdG9uLCBNQSAwMjExMC0xMzAx
LCBVU0EuCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFVOSVZFUlNJVFkgT0YgU1pF
R0VEIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVU5JVkVSU0lUWSBPRiBTWkVH
RUQgT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0Yg
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KICAqLwog
CiAjaW5jbHVkZSAiY29uZmlnLmgiCkBAIC0yOCw0OSArMzAsMTMgQEAKICNpZiBFTkFCTEUoU1ZH
KQogI2luY2x1ZGUgIlJlbmRlclNWR1BhdGguaCIKIAotI2luY2x1ZGUgIkZsb2F0UG9pbnQuaCIK
LSNpbmNsdWRlICJGbG9hdFF1YWQuaCIKLSNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKLSNp
bmNsdWRlICJIaXRUZXN0UmVxdWVzdC5oIgotI2luY2x1ZGUgIlBvaW50ZXJFdmVudHNIaXRSdWxl
cy5oIgotI2luY2x1ZGUgIlJlbmRlclNWR0NvbnRhaW5lci5oIgotI2luY2x1ZGUgIlJlbmRlclNW
R1Jlc291cmNlTWFya2VyLmgiCi0jaW5jbHVkZSAiUmVuZGVyU1ZHUmVzb3VyY2VTb2xpZENvbG9y
LmgiCi0jaW5jbHVkZSAiU1ZHUmVuZGVyU3VwcG9ydC5oIgotI2luY2x1ZGUgIlNWR1Jlc291cmNl
cy5oIgorI2luY2x1ZGUgIlNWR1BhdGhFbGVtZW50LmgiCiAjaW5jbHVkZSAiU1ZHU3R5bGVkVHJh
bnNmb3JtYWJsZUVsZW1lbnQuaCIKLSNpbmNsdWRlICJTVkdUcmFuc2Zvcm1MaXN0LmgiCi0jaW5j
bHVkZSAiU1ZHVVJJUmVmZXJlbmNlLmgiCi0jaW5jbHVkZSAiU3Ryb2tlU3R5bGVBcHBsaWVyLmgi
Ci0jaW5jbHVkZSA8d3RmL01hdGhFeHRyYXMuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1j
bGFzcyBCb3VuZGluZ1JlY3RTdHJva2VTdHlsZUFwcGxpZXIgOiBwdWJsaWMgU3Ryb2tlU3R5bGVB
cHBsaWVyIHsKLXB1YmxpYzoKLSAgICBCb3VuZGluZ1JlY3RTdHJva2VTdHlsZUFwcGxpZXIoY29u
c3QgUmVuZGVyT2JqZWN0KiBvYmplY3QsIFJlbmRlclN0eWxlKiBzdHlsZSkKLSAgICAgICAgOiBt
X29iamVjdChvYmplY3QpCi0gICAgICAgICwgbV9zdHlsZShzdHlsZSkKLSAgICB7Ci0gICAgICAg
IEFTU0VSVChzdHlsZSk7Ci0gICAgICAgIEFTU0VSVChvYmplY3QpOwotICAgIH0KLQotICAgIHZv
aWQgc3Ryb2tlU3R5bGUoR3JhcGhpY3NDb250ZXh0KiBnYykKLSAgICB7Ci0gICAgICAgIFNWR1Jl
bmRlclN1cHBvcnQ6OmFwcGx5U3Ryb2tlU3R5bGVUb0NvbnRleHQoZ2MsIG1fc3R5bGUsIG1fb2Jq
ZWN0KTsKLSAgICB9Ci0KLXByaXZhdGU6Ci0gICAgY29uc3QgUmVuZGVyT2JqZWN0KiBtX29iamVj
dDsKLSAgICBSZW5kZXJTdHlsZSogbV9zdHlsZTsKLX07Ci0KIFJlbmRlclNWR1BhdGg6OlJlbmRl
clNWR1BhdGgoU1ZHU3R5bGVkVHJhbnNmb3JtYWJsZUVsZW1lbnQqIG5vZGUpCi0gICAgOiBSZW5k
ZXJTVkdNb2RlbE9iamVjdChub2RlKQotICAgICwgbV9uZWVkc0JvdW5kYXJpZXNVcGRhdGUoZmFs
c2UpIC8vIGRlZmF1bHQgaXMgZmFsc2UsIHRoZSBjYWNoZWQgcmVjdHMgYXJlIGVtcHR5IGZyb20g
dGhlIGJlZ2lubmluZwotICAgICwgbV9uZWVkc1BhdGhVcGRhdGUodHJ1ZSkgLy8gZGVmYXVsdCBp
cyB0cnVlLCBzbyB3ZSBncmFiIGEgUGF0aCBvYmplY3Qgb25jZSBmcm9tIFNWR1N0eWxlZFRyYW5z
Zm9ybWFibGVFbGVtZW50Ci0gICAgLCBtX25lZWRzVHJhbnNmb3JtVXBkYXRlKHRydWUpIC8vIGRl
ZmF1bHQgaXMgdHJ1ZSwgc28gd2UgZ3JhYiBhIEFmZmluZVRyYW5zZm9ybSBvYmplY3Qgb25jZSBm
cm9tIFNWR1N0eWxlZFRyYW5zZm9ybWFibGVFbGVtZW50CisgICAgOiBSZW5kZXJTVkdTaGFwZShu
b2RlKQogewogfQogCkBAIC03OCwzMTYgKzQ0LDYgQEAgUmVuZGVyU1ZHUGF0aDo6flJlbmRlclNW
R1BhdGgoKQogewogfQogCi1ib29sIFJlbmRlclNWR1BhdGg6OmZpbGxDb250YWlucyhjb25zdCBG
bG9hdFBvaW50JiBwb2ludCwgYm9vbCByZXF1aXJlc0ZpbGwsIFdpbmRSdWxlIGZpbGxSdWxlKQot
ewotICAgIGlmICghbV9maWxsQm91bmRpbmdCb3guY29udGFpbnMocG9pbnQpKQotICAgICAgICBy
ZXR1cm4gZmFsc2U7Ci0KLSAgICBDb2xvciBmYWxsYmFja0NvbG9yOwotICAgIGlmIChyZXF1aXJl
c0ZpbGwgJiYgIVJlbmRlclNWR1Jlc291cmNlOjpmaWxsUGFpbnRpbmdSZXNvdXJjZSh0aGlzLCBz
dHlsZSgpLCBmYWxsYmFja0NvbG9yKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgcmV0
dXJuIG1fcGF0aC5jb250YWlucyhwb2ludCwgZmlsbFJ1bGUpOwotfQotCi1ib29sIFJlbmRlclNW
R1BhdGg6OnN0cm9rZUNvbnRhaW5zKGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50LCBib29sIHJlcXVp
cmVzU3Ryb2tlKQotewotICAgIGlmICghbV9zdHJva2VBbmRNYXJrZXJCb3VuZGluZ0JveC5jb250
YWlucyhwb2ludCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIENvbG9yIGZhbGxiYWNr
Q29sb3I7Ci0gICAgaWYgKHJlcXVpcmVzU3Ryb2tlICYmICFSZW5kZXJTVkdSZXNvdXJjZTo6c3Ry
b2tlUGFpbnRpbmdSZXNvdXJjZSh0aGlzLCBzdHlsZSgpLCBmYWxsYmFja0NvbG9yKSkKLSAgICAg
ICAgcmV0dXJuIGZhbHNlOwotCi0gICAgaWYgKHNob3VsZFN0cm9rZVplcm9MZW5ndGhTdWJwYXRo
KCkpCi0gICAgICAgIHJldHVybiB6ZXJvTGVuZ3RoU3VicGF0aFJlY3QoKS5jb250YWlucyhwb2lu
dCk7Ci0KLSAgICBCb3VuZGluZ1JlY3RTdHJva2VTdHlsZUFwcGxpZXIgc3Ryb2tlU3R5bGUodGhp
cywgc3R5bGUoKSk7Ci0gICAgcmV0dXJuIG1fcGF0aC5zdHJva2VDb250YWlucygmc3Ryb2tlU3R5
bGUsIHBvaW50KTsKLX0KLQotdm9pZCBSZW5kZXJTVkdQYXRoOjpsYXlvdXQoKQotewotICAgIExh
eW91dFJlcGFpbnRlciByZXBhaW50ZXIoKnRoaXMsIGNoZWNrRm9yUmVwYWludER1cmluZ0xheW91
dCgpICYmIHNlbGZOZWVkc0xheW91dCgpKTsKLSAgICBTVkdTdHlsZWRUcmFuc2Zvcm1hYmxlRWxl
bWVudCogZWxlbWVudCA9IHN0YXRpY19jYXN0PFNWR1N0eWxlZFRyYW5zZm9ybWFibGVFbGVtZW50
Kj4obm9kZSgpKTsKLQotICAgIGJvb2wgdXBkYXRlQ2FjaGVkQm91bmRhcmllc0luUGFyZW50cyA9
IGZhbHNlOwotCi0gICAgYm9vbCBuZWVkc1BhdGhVcGRhdGUgPSBtX25lZWRzUGF0aFVwZGF0ZTsK
LSAgICBpZiAobmVlZHNQYXRoVXBkYXRlKSB7Ci0gICAgICAgIG1fcGF0aC5jbGVhcigpOwotICAg
ICAgICBlbGVtZW50LT50b1BhdGhEYXRhKG1fcGF0aCk7Ci0gICAgICAgIG1fbmVlZHNQYXRoVXBk
YXRlID0gZmFsc2U7Ci0gICAgICAgIHVwZGF0ZUNhY2hlZEJvdW5kYXJpZXNJblBhcmVudHMgPSB0
cnVlOwotICAgIH0KLQotICAgIGlmIChtX25lZWRzVHJhbnNmb3JtVXBkYXRlKSB7Ci0gICAgICAg
IG1fbG9jYWxUcmFuc2Zvcm0gPSBlbGVtZW50LT5hbmltYXRlZExvY2FsVHJhbnNmb3JtKCk7Ci0g
ICAgICAgIG1fbmVlZHNUcmFuc2Zvcm1VcGRhdGUgPSBmYWxzZTsKLSAgICAgICAgdXBkYXRlQ2Fj
aGVkQm91bmRhcmllc0luUGFyZW50cyA9IHRydWU7Ci0gICAgfQotCi0gICAgaWYgKG1fbmVlZHNC
b3VuZGFyaWVzVXBkYXRlKQotICAgICAgICB1cGRhdGVDYWNoZWRCb3VuZGFyaWVzSW5QYXJlbnRz
ID0gdHJ1ZTsKLQotICAgIC8vIEludmFsaWRhdGUgYWxsIHJlc291cmNlcyBvZiB0aGlzIGNsaWVu
dCBpZiBvdXIgbGF5b3V0IGNoYW5nZWQuCi0gICAgaWYgKG1fZXZlckhhZExheW91dCAmJiBzZWxm
TmVlZHNMYXlvdXQoKSkgewotICAgICAgICBTVkdSZXNvdXJjZXNDYWNoZTo6Y2xpZW50TGF5b3V0
Q2hhbmdlZCh0aGlzKTsKLSAgICAgICAgbV9tYXJrZXJMYXlvdXRJbmZvLmNsZWFyKCk7Ci0gICAg
fQotCi0gICAgLy8gQXQgdGhpcyBwb2ludCBMYXlvdXRSZXBhaW50ZXIgYWxyZWFkeSBncmFiYmVk
IHRoZSBvbGQgYm91bmRzLAotICAgIC8vIHJlY2FsY3VsYXRlIHRoZW0gbm93IHNvIHJlcGFpbnRB
ZnRlckxheW91dCgpIHVzZXMgdGhlIG5ldyBib3VuZHMuCi0gICAgaWYgKG5lZWRzUGF0aFVwZGF0
ZSB8fCBtX25lZWRzQm91bmRhcmllc1VwZGF0ZSkgewotICAgICAgICB1cGRhdGVDYWNoZWRCb3Vu
ZGFyaWVzKCk7Ci0gICAgICAgIG1fbmVlZHNCb3VuZGFyaWVzVXBkYXRlID0gZmFsc2U7Ci0gICAg
fQotCi0gICAgLy8gSWYgb3VyIGJvdW5kcyBjaGFuZ2VkLCBub3RpZnkgdGhlIHBhcmVudHMuCi0g
ICAgaWYgKHVwZGF0ZUNhY2hlZEJvdW5kYXJpZXNJblBhcmVudHMpCi0gICAgICAgIFJlbmRlclNW
R01vZGVsT2JqZWN0OjpzZXROZWVkc0JvdW5kYXJpZXNVcGRhdGUoKTsKLQotICAgIHJlcGFpbnRl
ci5yZXBhaW50QWZ0ZXJMYXlvdXQoKTsKLSAgICBzZXROZWVkc0xheW91dChmYWxzZSk7Ci19Ci0K
LWJvb2wgUmVuZGVyU1ZHUGF0aDo6c2hvdWxkU3Ryb2tlWmVyb0xlbmd0aFN1YnBhdGgoKSBjb25z
dAotewotICAgIC8vIFNwZWMoMTEuNCk6IEFueSB6ZXJvIGxlbmd0aCBzdWJwYXRoIHNoYWxsIG5v
dCBiZSBzdHJva2VkIGlmIHRoZSDigJhzdHJva2UtbGluZWNhcOKAmSBwcm9wZXJ0eSBoYXMgYSB2
YWx1ZSBvZiBidXR0Ci0gICAgLy8gYnV0IHNoYWxsIGJlIHN0cm9rZWQgaWYgdGhlIOKAmHN0cm9r
ZS1saW5lY2Fw4oCZIHByb3BlcnR5IGhhcyBhIHZhbHVlIG9mIHJvdW5kIG9yIHNxdWFyZQotICAg
IHJldHVybiBzdHlsZSgpLT5zdmdTdHlsZSgpLT5oYXNTdHJva2UoKSAmJiBzdHlsZSgpLT5zdmdT
dHlsZSgpLT5jYXBTdHlsZSgpICE9IEJ1dHRDYXAgJiYgIW1fZmlsbEJvdW5kaW5nQm94LndpZHRo
KCkgJiYgIW1fZmlsbEJvdW5kaW5nQm94LmhlaWdodCgpOwotfQotCi1GbG9hdFJlY3QgUmVuZGVy
U1ZHUGF0aDo6emVyb0xlbmd0aFN1YnBhdGhSZWN0KCkgY29uc3QKLXsKLSAgICBTVkdFbGVtZW50
KiBzdmdFbGVtZW50ID0gc3RhdGljX2Nhc3Q8U1ZHRWxlbWVudCo+KG5vZGUoKSk7Ci0gICAgZmxv
YXQgc3Ryb2tlV2lkdGggPSBzdHlsZSgpLT5zdmdTdHlsZSgpLT5zdHJva2VXaWR0aCgpLnZhbHVl
KHN2Z0VsZW1lbnQpOwotICAgIHJldHVybiBGbG9hdFJlY3QobV9maWxsQm91bmRpbmdCb3gueCgp
IC0gc3Ryb2tlV2lkdGggLyAyLCBtX2ZpbGxCb3VuZGluZ0JveC55KCkgLSBzdHJva2VXaWR0aCAv
IDIsIHN0cm9rZVdpZHRoLCBzdHJva2VXaWR0aCk7Ci19Ci0KLXZvaWQgUmVuZGVyU1ZHUGF0aDo6
c2V0dXBTcXVhcmVDYXBQYXRoKFBhdGgqJiB1c2VQYXRoLCBpbnQmIGFwcGx5TW9kZSkKLXsKLSAg
ICAvLyBTcGVjKDExLjQpOiBBbnkgemVybyBsZW5ndGggc3VicGF0aCBzaGFsbCBub3QgYmUgc3Ry
b2tlZCBpZiB0aGUg4oCYc3Ryb2tlLWxpbmVjYXDigJkgcHJvcGVydHkgaGFzIGEgdmFsdWUgb2Yg
YnV0dAotICAgIC8vIGJ1dCBzaGFsbCBiZSBzdHJva2VkIGlmIHRoZSDigJhzdHJva2UtbGluZWNh
cOKAmSBwcm9wZXJ0eSBoYXMgYSB2YWx1ZSBvZiByb3VuZCBvciBzcXVhcmUKLSAgICBERUZJTkVf
U1RBVElDX0xPQ0FMKFBhdGgsIHRlbXBQYXRoLCAoKSk7Ci0KLSAgICBhcHBseU1vZGUgPSBBcHBs
eVRvRmlsbE1vZGU7Ci0gICAgdXNlUGF0aCA9ICZ0ZW1wUGF0aDsKLSAgICB1c2VQYXRoLT5jbGVh
cigpOwotICAgIGlmIChzdHlsZSgpLT5zdmdTdHlsZSgpLT5jYXBTdHlsZSgpID09IFNxdWFyZUNh
cCkKLSAgICAgICAgdXNlUGF0aC0+YWRkUmVjdCh6ZXJvTGVuZ3RoU3VicGF0aFJlY3QoKSk7Ci0g
ICAgZWxzZQotICAgICAgICB1c2VQYXRoLT5hZGRFbGxpcHNlKHplcm9MZW5ndGhTdWJwYXRoUmVj
dCgpKTsKLX0KLQotYm9vbCBSZW5kZXJTVkdQYXRoOjpzZXR1cE5vblNjYWxpbmdTdHJva2VQYXRo
KFBhdGgqJiB1c2VQYXRoLCBHcmFwaGljc0NvbnRleHRTdGF0ZVNhdmVyJiBzdGF0ZVNhdmVyKQot
ewotICAgIERFRklORV9TVEFUSUNfTE9DQUwoUGF0aCwgdGVtcFBhdGgsICgpKTsKLQotICAgIFNW
R1N0eWxlZFRyYW5zZm9ybWFibGVFbGVtZW50KiBlbGVtZW50ID0gc3RhdGljX2Nhc3Q8U1ZHU3R5
bGVkVHJhbnNmb3JtYWJsZUVsZW1lbnQqPihub2RlKCkpOwotICAgIEFmZmluZVRyYW5zZm9ybSBu
b25TY2FsaW5nU3Ryb2tlVHJhbnNmb3JtID0gZWxlbWVudC0+Z2V0U2NyZWVuQ1RNKFNWR0xvY2F0
YWJsZTo6RGlzYWxsb3dTdHlsZVVwZGF0ZSk7Ci0gICAgaWYgKCFub25TY2FsaW5nU3Ryb2tlVHJh
bnNmb3JtLmlzSW52ZXJ0aWJsZSgpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICB0ZW1w
UGF0aCA9IG1fcGF0aDsKLSAgICB1c2VQYXRoID0gJnRlbXBQYXRoOwotICAgIHRlbXBQYXRoLnRy
YW5zZm9ybShub25TY2FsaW5nU3Ryb2tlVHJhbnNmb3JtKTsKLQotICAgIHN0YXRlU2F2ZXIuc2F2
ZSgpOwotICAgIHN0YXRlU2F2ZXIuY29udGV4dCgpLT5jb25jYXRDVE0obm9uU2NhbGluZ1N0cm9r
ZVRyYW5zZm9ybS5pbnZlcnNlKCkpOwotICAgIHJldHVybiB0cnVlOwotfQotCi12b2lkIFJlbmRl
clNWR1BhdGg6OmZpbGxBbmRTdHJva2VQYXRoKEdyYXBoaWNzQ29udGV4dCogY29udGV4dCkKLXsK
LSAgICBSZW5kZXJTdHlsZSogc3R5bGUgPSB0aGlzLT5zdHlsZSgpOwotCi0gICAgQ29sb3IgZmFs
bGJhY2tDb2xvcjsKLSAgICBpZiAoUmVuZGVyU1ZHUmVzb3VyY2UqIGZpbGxQYWludGluZ1Jlc291
cmNlID0gUmVuZGVyU1ZHUmVzb3VyY2U6OmZpbGxQYWludGluZ1Jlc291cmNlKHRoaXMsIHN0eWxl
LCBmYWxsYmFja0NvbG9yKSkgewotICAgICAgICBpZiAoZmlsbFBhaW50aW5nUmVzb3VyY2UtPmFw
cGx5UmVzb3VyY2UodGhpcywgc3R5bGUsIGNvbnRleHQsIEFwcGx5VG9GaWxsTW9kZSkpCi0gICAg
ICAgICAgICBmaWxsUGFpbnRpbmdSZXNvdXJjZS0+cG9zdEFwcGx5UmVzb3VyY2UodGhpcywgY29u
dGV4dCwgQXBwbHlUb0ZpbGxNb2RlLCAmbV9wYXRoKTsKLSAgICAgICAgZWxzZSBpZiAoZmFsbGJh
Y2tDb2xvci5pc1ZhbGlkKCkpIHsKLSAgICAgICAgICAgIFJlbmRlclNWR1Jlc291cmNlU29saWRD
b2xvciogZmFsbGJhY2tSZXNvdXJjZSA9IFJlbmRlclNWR1Jlc291cmNlOjpzaGFyZWRTb2xpZFBh
aW50aW5nUmVzb3VyY2UoKTsKLSAgICAgICAgICAgIGZhbGxiYWNrUmVzb3VyY2UtPnNldENvbG9y
KGZhbGxiYWNrQ29sb3IpOwotICAgICAgICAgICAgaWYgKGZhbGxiYWNrUmVzb3VyY2UtPmFwcGx5
UmVzb3VyY2UodGhpcywgc3R5bGUsIGNvbnRleHQsIEFwcGx5VG9GaWxsTW9kZSkpCi0gICAgICAg
ICAgICAgICAgZmFsbGJhY2tSZXNvdXJjZS0+cG9zdEFwcGx5UmVzb3VyY2UodGhpcywgY29udGV4
dCwgQXBwbHlUb0ZpbGxNb2RlLCAmbV9wYXRoKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIGZh
bGxiYWNrQ29sb3IgPSBDb2xvcigpOwotICAgIFJlbmRlclNWR1Jlc291cmNlKiBzdHJva2VQYWlu
dGluZ1Jlc291cmNlID0gUmVuZGVyU1ZHUmVzb3VyY2U6OnN0cm9rZVBhaW50aW5nUmVzb3VyY2Uo
dGhpcywgc3R5bGUsIGZhbGxiYWNrQ29sb3IpOwotICAgIGlmICghc3Ryb2tlUGFpbnRpbmdSZXNv
dXJjZSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgUGF0aCogdXNlUGF0aCA9ICZtX3BhdGg7Ci0g
ICAgaW50IGFwcGx5TW9kZSA9IEFwcGx5VG9TdHJva2VNb2RlOwotCi0gICAgYm9vbCBub25TY2Fs
aW5nU3Ryb2tlID0gc3R5bGUtPnN2Z1N0eWxlKCktPnZlY3RvckVmZmVjdCgpID09IFZFX05PTl9T
Q0FMSU5HX1NUUk9LRTsKLQotICAgIEdyYXBoaWNzQ29udGV4dFN0YXRlU2F2ZXIgc3RhdGVTYXZl
cigqY29udGV4dCwgZmFsc2UpOwotCi0gICAgLy8gU3BlYygxMS40KTogQW55IHplcm8gbGVuZ3Ro
IHN1YnBhdGggc2hhbGwgbm90IGJlIHN0cm9rZWQgaWYgdGhlIOKAmHN0cm9rZS1saW5lY2Fw4oCZ
IHByb3BlcnR5IGhhcyBhIHZhbHVlIG9mIGJ1dHQKLSAgICAvLyBidXQgc2hhbGwgYmUgc3Ryb2tl
ZCBpZiB0aGUg4oCYc3Ryb2tlLWxpbmVjYXDigJkgcHJvcGVydHkgaGFzIGEgdmFsdWUgb2Ygcm91
bmQgb3Igc3F1YXJlCi0gICAgLy8gRklYTUU6IHRoaXMgZG9lcyBub3Qgd29yayBmb3IgemVyby1s
ZW5ndGggc3VicGF0aHMsIG9ubHkgd2hlbiB0b3RhbCBwYXRoIGlzIHplcm8tbGVuZ3RoCi0gICAg
aWYgKHNob3VsZFN0cm9rZVplcm9MZW5ndGhTdWJwYXRoKCkpCi0gICAgICAgIHNldHVwU3F1YXJl
Q2FwUGF0aCh1c2VQYXRoLCBhcHBseU1vZGUpOwotICAgIGVsc2UgaWYgKG5vblNjYWxpbmdTdHJv
a2UpIHsKLSAgICAgICBpZiAoIXNldHVwTm9uU2NhbGluZ1N0cm9rZVBhdGgodXNlUGF0aCwgc3Rh
dGVTYXZlcikpCi0gICAgICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBpZiAoc3Ryb2tlUGFp
bnRpbmdSZXNvdXJjZS0+YXBwbHlSZXNvdXJjZSh0aGlzLCBzdHlsZSwgY29udGV4dCwgYXBwbHlN
b2RlKSkKLSAgICAgICAgc3Ryb2tlUGFpbnRpbmdSZXNvdXJjZS0+cG9zdEFwcGx5UmVzb3VyY2Uo
dGhpcywgY29udGV4dCwgYXBwbHlNb2RlLCB1c2VQYXRoKTsKLSAgICBlbHNlIGlmIChmYWxsYmFj
a0NvbG9yLmlzVmFsaWQoKSkgewotICAgICAgICBSZW5kZXJTVkdSZXNvdXJjZVNvbGlkQ29sb3Iq
IGZhbGxiYWNrUmVzb3VyY2UgPSBSZW5kZXJTVkdSZXNvdXJjZTo6c2hhcmVkU29saWRQYWludGlu
Z1Jlc291cmNlKCk7Ci0gICAgICAgIGZhbGxiYWNrUmVzb3VyY2UtPnNldENvbG9yKGZhbGxiYWNr
Q29sb3IpOwotICAgICAgICBpZiAoZmFsbGJhY2tSZXNvdXJjZS0+YXBwbHlSZXNvdXJjZSh0aGlz
LCBzdHlsZSwgY29udGV4dCwgYXBwbHlNb2RlKSkKLSAgICAgICAgICAgIGZhbGxiYWNrUmVzb3Vy
Y2UtPnBvc3RBcHBseVJlc291cmNlKHRoaXMsIGNvbnRleHQsIGFwcGx5TW9kZSwgdXNlUGF0aCk7
Ci0gICAgfQotfQotCi12b2lkIFJlbmRlclNWR1BhdGg6OnBhaW50KFBhaW50SW5mbyYgcGFpbnRJ
bmZvLCBjb25zdCBJbnRQb2ludCYpCi17Ci0gICAgaWYgKHBhaW50SW5mby5jb250ZXh0LT5wYWlu
dGluZ0Rpc2FibGVkKCkgfHwgc3R5bGUoKS0+dmlzaWJpbGl0eSgpID09IEhJRERFTiB8fCBtX3Bh
dGguaXNFbXB0eSgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBGbG9hdFJlY3QgYm91bmRpbmdC
b3ggPSByZXBhaW50UmVjdEluTG9jYWxDb29yZGluYXRlcygpOwotICAgIGlmICghU1ZHUmVuZGVy
U3VwcG9ydDo6cGFpbnRJbmZvSW50ZXJzZWN0c1JlcGFpbnRSZWN0KGJvdW5kaW5nQm94LCBtX2xv
Y2FsVHJhbnNmb3JtLCBwYWludEluZm8pKQotICAgICAgICByZXR1cm47Ci0KLSAgICBQYWludElu
Zm8gY2hpbGRQYWludEluZm8ocGFpbnRJbmZvKTsKLSAgICBib29sIGRyYXdzT3V0bGluZSA9IHN0
eWxlKCktPm91dGxpbmVXaWR0aCgpICYmIChjaGlsZFBhaW50SW5mby5waGFzZSA9PSBQYWludFBo
YXNlT3V0bGluZSB8fCBjaGlsZFBhaW50SW5mby5waGFzZSA9PSBQYWludFBoYXNlU2VsZk91dGxp
bmUpOwotICAgIGlmIChkcmF3c091dGxpbmUgfHwgY2hpbGRQYWludEluZm8ucGhhc2UgPT0gUGFp
bnRQaGFzZUZvcmVncm91bmQpIHsKLSAgICAgICAgR3JhcGhpY3NDb250ZXh0U3RhdGVTYXZlciBz
dGF0ZVNhdmVyKCpjaGlsZFBhaW50SW5mby5jb250ZXh0KTsKLSAgICAgICAgY2hpbGRQYWludElu
Zm8uYXBwbHlUcmFuc2Zvcm0obV9sb2NhbFRyYW5zZm9ybSk7Ci0KLSAgICAgICAgaWYgKGNoaWxk
UGFpbnRJbmZvLnBoYXNlID09IFBhaW50UGhhc2VGb3JlZ3JvdW5kKSB7Ci0gICAgICAgICAgICBQ
YWludEluZm8gc2F2ZWRJbmZvKGNoaWxkUGFpbnRJbmZvKTsKLQotICAgICAgICAgICAgaWYgKFNW
R1JlbmRlclN1cHBvcnQ6OnByZXBhcmVUb1JlbmRlclNWR0NvbnRlbnQodGhpcywgY2hpbGRQYWlu
dEluZm8pKSB7Ci0gICAgICAgICAgICAgICAgY29uc3QgU1ZHUmVuZGVyU3R5bGUqIHN2Z1N0eWxl
ID0gc3R5bGUoKS0+c3ZnU3R5bGUoKTsKLSAgICAgICAgICAgICAgICBpZiAoc3ZnU3R5bGUtPnNo
YXBlUmVuZGVyaW5nKCkgPT0gU1JfQ1JJU1BFREdFUykKLSAgICAgICAgICAgICAgICAgICAgY2hp
bGRQYWludEluZm8uY29udGV4dC0+c2V0U2hvdWxkQW50aWFsaWFzKGZhbHNlKTsKLQotICAgICAg
ICAgICAgICAgIGZpbGxBbmRTdHJva2VQYXRoKGNoaWxkUGFpbnRJbmZvLmNvbnRleHQpOwotCi0g
ICAgICAgICAgICAgICAgaWYgKHN2Z1N0eWxlLT5oYXNNYXJrZXJzKCkpCi0gICAgICAgICAgICAg
ICAgICAgIG1fbWFya2VyTGF5b3V0SW5mby5kcmF3TWFya2VycyhjaGlsZFBhaW50SW5mbyk7Ci0g
ICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIFNWR1JlbmRlclN1cHBvcnQ6OmZpbmlzaFJlbmRl
clNWR0NvbnRlbnQodGhpcywgY2hpbGRQYWludEluZm8sIHNhdmVkSW5mby5jb250ZXh0KTsKLSAg
ICAgICAgfQotCi0gICAgICAgIGlmIChkcmF3c091dGxpbmUpCi0gICAgICAgICAgICBwYWludE91
dGxpbmUoY2hpbGRQYWludEluZm8uY29udGV4dCwgSW50UmVjdChib3VuZGluZ0JveCkpOwotICAg
IH0KLX0KLQotLy8gVGhpcyBtZXRob2QgaXMgY2FsbGVkIGZyb20gaW5zaWRlIHBhaW50T3V0bGlu
ZSgpIHNpbmNlIHdlIGNhbGwgcGFpbnRPdXRsaW5lKCkKLS8vIHdoaWxlIHRyYW5zZm9ybWVkIHRv
IG91ciBjb29yZCBzeXN0ZW0sIHJldHVybiBsb2NhbCBjb29yZHMKLXZvaWQgUmVuZGVyU1ZHUGF0
aDo6YWRkRm9jdXNSaW5nUmVjdHMoVmVjdG9yPExheW91dFJlY3Q+JiByZWN0cywgY29uc3QgTGF5
b3V0UG9pbnQmKSAKLXsKLSAgICBMYXlvdXRSZWN0IHJlY3QgPSBlbmNsb3NpbmdMYXlvdXRSZWN0
KHJlcGFpbnRSZWN0SW5Mb2NhbENvb3JkaW5hdGVzKCkpOwotICAgIGlmICghcmVjdC5pc0VtcHR5
KCkpCi0gICAgICAgIHJlY3RzLmFwcGVuZChyZWN0KTsKLX0KLQotYm9vbCBSZW5kZXJTVkdQYXRo
Ojpub2RlQXRGbG9hdFBvaW50KGNvbnN0IEhpdFRlc3RSZXF1ZXN0JiByZXF1ZXN0LCBIaXRUZXN0
UmVzdWx0JiByZXN1bHQsIGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50SW5QYXJlbnQsIEhpdFRlc3RB
Y3Rpb24gaGl0VGVzdEFjdGlvbikKLXsKLSAgICAvLyBXZSBvbmx5IGRyYXcgaW4gdGhlIGZvcmdy
b3VuZCBwaGFzZSwgc28gd2Ugb25seSBoaXQtdGVzdCB0aGVuLgotICAgIGlmIChoaXRUZXN0QWN0
aW9uICE9IEhpdFRlc3RGb3JlZ3JvdW5kKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBG
bG9hdFBvaW50IGxvY2FsUG9pbnQgPSBtX2xvY2FsVHJhbnNmb3JtLmludmVyc2UoKS5tYXBQb2lu
dChwb2ludEluUGFyZW50KTsKLQotICAgIGlmICghU1ZHUmVuZGVyU3VwcG9ydDo6cG9pbnRJbkNs
aXBwaW5nQXJlYSh0aGlzLCBsb2NhbFBvaW50KSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0g
ICAgUG9pbnRlckV2ZW50c0hpdFJ1bGVzIGhpdFJ1bGVzKFBvaW50ZXJFdmVudHNIaXRSdWxlczo6
U1ZHX1BBVEhfSElUVEVTVElORywgcmVxdWVzdCwgc3R5bGUoKS0+cG9pbnRlckV2ZW50cygpKTsK
LSAgICBib29sIGlzVmlzaWJsZSA9IChzdHlsZSgpLT52aXNpYmlsaXR5KCkgPT0gVklTSUJMRSk7
Ci0gICAgaWYgKGlzVmlzaWJsZSB8fCAhaGl0UnVsZXMucmVxdWlyZVZpc2libGUpIHsKLSAgICAg
ICAgY29uc3QgU1ZHUmVuZGVyU3R5bGUqIHN2Z1N0eWxlID0gc3R5bGUoKS0+c3ZnU3R5bGUoKTsK
LSAgICAgICAgV2luZFJ1bGUgZmlsbFJ1bGUgPSBzdmdTdHlsZS0+ZmlsbFJ1bGUoKTsKLSAgICAg
ICAgaWYgKHJlcXVlc3Quc3ZnQ2xpcENvbnRlbnQoKSkKLSAgICAgICAgICAgIGZpbGxSdWxlID0g
c3ZnU3R5bGUtPmNsaXBSdWxlKCk7Ci0gICAgICAgIGlmICgoaGl0UnVsZXMuY2FuSGl0U3Ryb2tl
ICYmIChzdmdTdHlsZS0+aGFzU3Ryb2tlKCkgfHwgIWhpdFJ1bGVzLnJlcXVpcmVTdHJva2UpICYm
IHN0cm9rZUNvbnRhaW5zKGxvY2FsUG9pbnQsIGhpdFJ1bGVzLnJlcXVpcmVTdHJva2UpKQotICAg
ICAgICAgICAgfHwgKGhpdFJ1bGVzLmNhbkhpdEZpbGwgJiYgKHN2Z1N0eWxlLT5oYXNGaWxsKCkg
fHwgIWhpdFJ1bGVzLnJlcXVpcmVGaWxsKSAmJiBmaWxsQ29udGFpbnMobG9jYWxQb2ludCwgaGl0
UnVsZXMucmVxdWlyZUZpbGwsIGZpbGxSdWxlKSkpIHsKLSAgICAgICAgICAgIHVwZGF0ZUhpdFRl
c3RSZXN1bHQocmVzdWx0LCByb3VuZGVkTGF5b3V0UG9pbnQobG9jYWxQb2ludCkpOwotICAgICAg
ICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgcmV0dXJuIGZhbHNlOwot
fQotCi1GbG9hdFJlY3QgUmVuZGVyU1ZHUGF0aDo6Y2FsY3VsYXRlTWFya2VyQm91bmRzSWZOZWVk
ZWQoKQotewotICAgIFNWR0VsZW1lbnQqIHN2Z0VsZW1lbnQgPSBzdGF0aWNfY2FzdDxTVkdFbGVt
ZW50Kj4obm9kZSgpKTsKLSAgICBBU1NFUlQoc3ZnRWxlbWVudCAmJiBzdmdFbGVtZW50LT5kb2N1
bWVudCgpKTsKLSAgICBpZiAoIXN2Z0VsZW1lbnQtPmlzU3R5bGVkKCkpCi0gICAgICAgIHJldHVy
biBGbG9hdFJlY3QoKTsKLQotICAgIFNWR1N0eWxlZEVsZW1lbnQqIHN0eWxlZEVsZW1lbnQgPSBz
dGF0aWNfY2FzdDxTVkdTdHlsZWRFbGVtZW50Kj4oc3ZnRWxlbWVudCk7Ci0gICAgaWYgKCFzdHls
ZWRFbGVtZW50LT5zdXBwb3J0c01hcmtlcnMoKSkKLSAgICAgICAgcmV0dXJuIEZsb2F0UmVjdCgp
OwotCi0gICAgY29uc3QgU1ZHUmVuZGVyU3R5bGUqIHN2Z1N0eWxlID0gc3R5bGUoKS0+c3ZnU3R5
bGUoKTsKLSAgICBBU1NFUlQoc3ZnU3R5bGUtPmhhc01hcmtlcnMoKSk7Ci0KLSAgICBTVkdSZXNv
dXJjZXMqIHJlc291cmNlcyA9IFNWR1Jlc291cmNlc0NhY2hlOjpjYWNoZWRSZXNvdXJjZXNGb3JS
ZW5kZXJPYmplY3QodGhpcyk7Ci0gICAgaWYgKCFyZXNvdXJjZXMpCi0gICAgICAgIHJldHVybiBG
bG9hdFJlY3QoKTsKLQotICAgIFJlbmRlclNWR1Jlc291cmNlTWFya2VyKiBtYXJrZXJTdGFydCA9
IHJlc291cmNlcy0+bWFya2VyU3RhcnQoKTsKLSAgICBSZW5kZXJTVkdSZXNvdXJjZU1hcmtlciog
bWFya2VyTWlkID0gcmVzb3VyY2VzLT5tYXJrZXJNaWQoKTsKLSAgICBSZW5kZXJTVkdSZXNvdXJj
ZU1hcmtlciogbWFya2VyRW5kID0gcmVzb3VyY2VzLT5tYXJrZXJFbmQoKTsKLSAgICBpZiAoIW1h
cmtlclN0YXJ0ICYmICFtYXJrZXJNaWQgJiYgIW1hcmtlckVuZCkKLSAgICAgICAgcmV0dXJuIEZs
b2F0UmVjdCgpOwotCi0gICAgcmV0dXJuIG1fbWFya2VyTGF5b3V0SW5mby5jYWxjdWxhdGVCb3Vu
ZGFyaWVzKG1hcmtlclN0YXJ0LCBtYXJrZXJNaWQsIG1hcmtlckVuZCwgc3ZnU3R5bGUtPnN0cm9r
ZVdpZHRoKCkudmFsdWUoc3ZnRWxlbWVudCksIG1fcGF0aCk7Ci19Ci0KLXZvaWQgUmVuZGVyU1ZH
UGF0aDo6dXBkYXRlQ2FjaGVkQm91bmRhcmllcygpCi17Ci0gICAgaWYgKG1fcGF0aC5pc0VtcHR5
KCkpIHsKLSAgICAgICAgbV9maWxsQm91bmRpbmdCb3ggPSBGbG9hdFJlY3QoKTsKLSAgICAgICAg
bV9zdHJva2VBbmRNYXJrZXJCb3VuZGluZ0JveCA9IEZsb2F0UmVjdCgpOwotICAgICAgICBtX3Jl
cGFpbnRCb3VuZGluZ0JveCA9IEZsb2F0UmVjdCgpOwotICAgICAgICByZXR1cm47Ci0gICAgfQot
Ci0gICAgLy8gQ2FjaGUgX3VuY2xpcHBlZF8gZmlsbCBib3VuZGluZyBib3gsIHVzZWQgZm9yIGNh
bGN1bGF0aW9ucyBpbiByZXNvdXJjZXMKLSAgICBtX2ZpbGxCb3VuZGluZ0JveCA9IG1fcGF0aC5i
b3VuZGluZ1JlY3QoKTsKLQotICAgIC8vIFNwZWMoMTEuNCk6IEFueSB6ZXJvIGxlbmd0aCBzdWJw
YXRoIHNoYWxsIG5vdCBiZSBzdHJva2VkIGlmIHRoZSDigJhzdHJva2UtbGluZWNhcOKAmSBwcm9w
ZXJ0eSBoYXMgYSB2YWx1ZSBvZiBidXR0Ci0gICAgLy8gYnV0IHNoYWxsIGJlIHN0cm9rZWQgaWYg
dGhlIOKAmHN0cm9rZS1saW5lY2Fw4oCZIHByb3BlcnR5IGhhcyBhIHZhbHVlIG9mIHJvdW5kIG9y
IHNxdWFyZQotICAgIGlmIChzaG91bGRTdHJva2VaZXJvTGVuZ3RoU3VicGF0aCgpKSB7Ci0gICAg
ICAgIG1fc3Ryb2tlQW5kTWFya2VyQm91bmRpbmdCb3ggPSB6ZXJvTGVuZ3RoU3VicGF0aFJlY3Qo
KTsKLSAgICAgICAgLy8gQ2FjaGUgc21hbGxlc3QgcG9zc2libGUgcmVwYWludCByZWN0YW5nbGUK
LSAgICAgICAgbV9yZXBhaW50Qm91bmRpbmdCb3ggPSBtX3N0cm9rZUFuZE1hcmtlckJvdW5kaW5n
Qm94OwotICAgICAgICBTVkdSZW5kZXJTdXBwb3J0OjppbnRlcnNlY3RSZXBhaW50UmVjdFdpdGhS
ZXNvdXJjZXModGhpcywgbV9yZXBhaW50Qm91bmRpbmdCb3gpOwotICAgICAgICByZXR1cm47Ci0g
ICAgfQotCi0gICAgLy8gQ2FjaGUgX3VuY2xpcHBlZF8gc3Ryb2tlIGJvdW5kaW5nIGJveCwgdXNl
ZCBmb3IgY2FsY3VsYXRpb25zIGluIHJlc291cmNlcyAoaW5jbHVkZXMgbWFya2VyIGJvdW5kYXJp
ZXMpCi0gICAgbV9zdHJva2VBbmRNYXJrZXJCb3VuZGluZ0JveCA9IG1fZmlsbEJvdW5kaW5nQm94
OwotCi0gICAgY29uc3QgU1ZHUmVuZGVyU3R5bGUqIHN2Z1N0eWxlID0gc3R5bGUoKS0+c3ZnU3R5
bGUoKTsKLSAgICBpZiAoc3ZnU3R5bGUtPmhhc1N0cm9rZSgpKSB7Ci0gICAgICAgIEJvdW5kaW5n
UmVjdFN0cm9rZVN0eWxlQXBwbGllciBzdHJva2VTdHlsZSh0aGlzLCBzdHlsZSgpKTsKLSAgICAg
ICAgbV9zdHJva2VBbmRNYXJrZXJCb3VuZGluZ0JveC51bml0ZShtX3BhdGguc3Ryb2tlQm91bmRp
bmdSZWN0KCZzdHJva2VTdHlsZSkpOwotICAgIH0KLQotICAgIGlmIChzdmdTdHlsZS0+aGFzTWFy
a2VycygpKSB7Ci0gICAgICAgIEZsb2F0UmVjdCBtYXJrZXJCb3VuZHMgPSBjYWxjdWxhdGVNYXJr
ZXJCb3VuZHNJZk5lZWRlZCgpOwotICAgICAgICBpZiAoIW1hcmtlckJvdW5kcy5pc0VtcHR5KCkp
Ci0gICAgICAgICAgICBtX3N0cm9rZUFuZE1hcmtlckJvdW5kaW5nQm94LnVuaXRlKG1hcmtlckJv
dW5kcyk7Ci0gICAgfQotCi0gICAgLy8gQ2FjaGUgc21hbGxlc3QgcG9zc2libGUgcmVwYWludCBy
ZWN0YW5nbGUKLSAgICBtX3JlcGFpbnRCb3VuZGluZ0JveCA9IG1fc3Ryb2tlQW5kTWFya2VyQm91
bmRpbmdCb3g7Ci0gICAgU1ZHUmVuZGVyU3VwcG9ydDo6aW50ZXJzZWN0UmVwYWludFJlY3RXaXRo
UmVzb3VyY2VzKHRoaXMsIG1fcmVwYWludEJvdW5kaW5nQm94KTsKLX0KLQogfQogCiAjZW5kaWYg
Ly8gRU5BQkxFKFNWRykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcv
UmVuZGVyU1ZHUGF0aC5oIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdQ
YXRoLmgKaW5kZXggOThlNjA4ZC4uYWZlNjA3MiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdQYXRoLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL3N2Zy9SZW5kZXJTVkdQYXRoLmgKQEAgLTEsMTEwICsxLDQ4IEBACiAvKgotICogQ29weXJp
Z2h0IChDKSAyMDA0LCAyMDA1LCAyMDA3IE5pa29sYXMgWmltbWVybWFubiA8emltbWVybWFubkBr
ZGUub3JnPgotICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1IFJvYiBCdWlzIDxidWlzQGtkZS5v
cmc+Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMDUgRXJpYyBTZWlkZWwgPGVyaWNAd2Via2l0Lm9yZz4K
LSAqIENvcHlyaWdodCAoQykgMjAwNiBBcHBsZSBDb21wdXRlciwgSW5jCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMDkgR29vZ2xlLCBJbmMuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgVW5pdmVyc2l0eSBv
ZiBTemVnZWQKKyAqIENvcHlyaWdodCAoQykgMjAxMSBSZW5hdGEgSG9kb3ZhbiAocmVuaUB3ZWJr
aXQub3JnKQorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCi0gKiBUaGlzIGxpYnJhcnkgaXMg
ZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkg
aXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICog
TGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0
aGVyCi0gKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55
IGxhdGVyIHZlcnNpb24uCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KICAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQg
aW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBX
QVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFO
VEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdO
VQotICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0g
KgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkg
R2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0
aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KLSAqIHRoZSBGcmVlIFNvZnR3
YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCi0g
KiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgVU5JVkVSU0lUWSBPRiBTWkVHRUQgYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhF
CisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBT
SEFMTCBVTklWRVJTSVRZIE9GIFNaRUdFRCBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
CisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgogICovCiAKICNpZm5kZWYgUmVuZGVyU1ZHUGF0aF9oCiAjZGVmaW5l
IFJlbmRlclNWR1BhdGhfaAogCiAjaWYgRU5BQkxFKFNWRykKLSNpbmNsdWRlICJBZmZpbmVUcmFu
c2Zvcm0uaCIKLSNpbmNsdWRlICJGbG9hdFJlY3QuaCIKLSNpbmNsdWRlICJSZW5kZXJTVkdNb2Rl
bE9iamVjdC5oIgotI2luY2x1ZGUgIlNWR01hcmtlckxheW91dEluZm8uaCIKKyNpbmNsdWRlICJS
ZW5kZXJTVkdTaGFwZS5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLWNsYXNzIEZsb2F0UG9p
bnQ7Ci1jbGFzcyBHcmFwaGljc0NvbnRleHRTdGF0ZVNhdmVyOwotY2xhc3MgUmVuZGVyU1ZHQ29u
dGFpbmVyOwotY2xhc3MgU1ZHU3R5bGVkVHJhbnNmb3JtYWJsZUVsZW1lbnQ7Ci0KLWNsYXNzIFJl
bmRlclNWR1BhdGggOiBwdWJsaWMgUmVuZGVyU1ZHTW9kZWxPYmplY3QgeworY2xhc3MgUmVuZGVy
U1ZHUGF0aCA6IHB1YmxpYyBSZW5kZXJTVkdTaGFwZSB7CiBwdWJsaWM6Ci0gICAgZXhwbGljaXQg
UmVuZGVyU1ZHUGF0aChTVkdTdHlsZWRUcmFuc2Zvcm1hYmxlRWxlbWVudCopOworICAgIFJlbmRl
clNWR1BhdGgoU1ZHU3R5bGVkVHJhbnNmb3JtYWJsZUVsZW1lbnQqKTsKICAgICB2aXJ0dWFsIH5S
ZW5kZXJTVkdQYXRoKCk7CiAKLSAgICBjb25zdCBQYXRoJiBwYXRoKCkgY29uc3QgeyByZXR1cm4g
bV9wYXRoOyB9Ci0gICAgdm9pZCBzZXROZWVkc1BhdGhVcGRhdGUoKSB7IG1fbmVlZHNQYXRoVXBk
YXRlID0gdHJ1ZTsgfQotICAgIHZpcnR1YWwgdm9pZCBzZXROZWVkc0JvdW5kYXJpZXNVcGRhdGUo
KSB7IG1fbmVlZHNCb3VuZGFyaWVzVXBkYXRlID0gdHJ1ZTsgfQotICAgIHZpcnR1YWwgdm9pZCBz
ZXROZWVkc1RyYW5zZm9ybVVwZGF0ZSgpIHsgbV9uZWVkc1RyYW5zZm9ybVVwZGF0ZSA9IHRydWU7
IH0KLQogcHJpdmF0ZToKLSAgICAvLyBIaXQtZGV0ZWN0aW9uIHNlcGVyYXRlZCBmb3IgdGhlIGZp
bGwgYW5kIHRoZSBzdHJva2UKLSAgICBib29sIGZpbGxDb250YWlucyhjb25zdCBGbG9hdFBvaW50
JiwgYm9vbCByZXF1aXJlc0ZpbGwgPSB0cnVlLCBXaW5kUnVsZSBmaWxsUnVsZSA9IFJVTEVfTk9O
WkVSTyk7Ci0gICAgYm9vbCBzdHJva2VDb250YWlucyhjb25zdCBGbG9hdFBvaW50JiwgYm9vbCBy
ZXF1aXJlc1N0cm9rZSA9IHRydWUpOwotCi0gICAgdmlydHVhbCBGbG9hdFJlY3Qgb2JqZWN0Qm91
bmRpbmdCb3goKSBjb25zdCB7IHJldHVybiBtX2ZpbGxCb3VuZGluZ0JveDsgfQotICAgIHZpcnR1
YWwgRmxvYXRSZWN0IHN0cm9rZUJvdW5kaW5nQm94KCkgY29uc3QgeyByZXR1cm4gbV9zdHJva2VB
bmRNYXJrZXJCb3VuZGluZ0JveDsgfQotICAgIHZpcnR1YWwgRmxvYXRSZWN0IHJlcGFpbnRSZWN0
SW5Mb2NhbENvb3JkaW5hdGVzKCkgY29uc3QgeyByZXR1cm4gbV9yZXBhaW50Qm91bmRpbmdCb3g7
IH0KLSAgICB2aXJ0dWFsIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgbG9jYWxUb1BhcmVudFRyYW5z
Zm9ybSgpIGNvbnN0IHsgcmV0dXJuIG1fbG9jYWxUcmFuc2Zvcm07IH0KLQogICAgIHZpcnR1YWwg
Ym9vbCBpc1NWR1BhdGgoKSBjb25zdCB7IHJldHVybiB0cnVlOyB9CiAgICAgdmlydHVhbCBjb25z
dCBjaGFyKiByZW5kZXJOYW1lKCkgY29uc3QgeyByZXR1cm4gIlJlbmRlclNWR1BhdGgiOyB9Ci0K
LSAgICB2aXJ0dWFsIHZvaWQgbGF5b3V0KCk7Ci0gICAgdmlydHVhbCB2b2lkIHBhaW50KFBhaW50
SW5mbyYsIGNvbnN0IExheW91dFBvaW50Jik7Ci0gICAgdmlydHVhbCB2b2lkIGFkZEZvY3VzUmlu
Z1JlY3RzKFZlY3RvcjxMYXlvdXRSZWN0PiYsIGNvbnN0IExheW91dFBvaW50Jik7Ci0KLSAgICB2
aXJ0dWFsIGJvb2wgbm9kZUF0RmxvYXRQb2ludChjb25zdCBIaXRUZXN0UmVxdWVzdCYsIEhpdFRl
c3RSZXN1bHQmLCBjb25zdCBGbG9hdFBvaW50JiBwb2ludEluUGFyZW50LCBIaXRUZXN0QWN0aW9u
KTsKLQotICAgIEZsb2F0UmVjdCBjYWxjdWxhdGVNYXJrZXJCb3VuZHNJZk5lZWRlZCgpOwotICAg
IHZvaWQgdXBkYXRlQ2FjaGVkQm91bmRhcmllcygpOwotCi0gICAgdm9pZCBzZXR1cFNxdWFyZUNh
cFBhdGgoUGF0aComIHVzZVBhdGgsIGludCYgYXBwbHlNb2RlKTsKLSAgICBib29sIHNldHVwTm9u
U2NhbGluZ1N0cm9rZVBhdGgoUGF0aComIHVzZVBhdGgsIEdyYXBoaWNzQ29udGV4dFN0YXRlU2F2
ZXImKTsKLSAgICBib29sIHNob3VsZFN0cm9rZVplcm9MZW5ndGhTdWJwYXRoKCkgY29uc3Q7Ci0g
ICAgRmxvYXRSZWN0IHplcm9MZW5ndGhTdWJwYXRoUmVjdCgpIGNvbnN0OwotCi1wcml2YXRlOgot
ICAgIHZpcnR1YWwgQWZmaW5lVHJhbnNmb3JtIGxvY2FsVHJhbnNmb3JtKCkgY29uc3QgeyByZXR1
cm4gbV9sb2NhbFRyYW5zZm9ybTsgfQotICAgIHZvaWQgZmlsbEFuZFN0cm9rZVBhdGgoR3JhcGhp
Y3NDb250ZXh0Kik7Ci0KLSAgICBib29sIG1fbmVlZHNCb3VuZGFyaWVzVXBkYXRlIDogMTsKLSAg
ICBib29sIG1fbmVlZHNQYXRoVXBkYXRlIDogMTsKLSAgICBib29sIG1fbmVlZHNUcmFuc2Zvcm1V
cGRhdGUgOiAxOwotCi0gICAgbXV0YWJsZSBQYXRoIG1fcGF0aDsKLSAgICBGbG9hdFJlY3QgbV9m
aWxsQm91bmRpbmdCb3g7Ci0gICAgRmxvYXRSZWN0IG1fc3Ryb2tlQW5kTWFya2VyQm91bmRpbmdC
b3g7Ci0gICAgRmxvYXRSZWN0IG1fcmVwYWludEJvdW5kaW5nQm94OwotICAgIFNWR01hcmtlckxh
eW91dEluZm8gbV9tYXJrZXJMYXlvdXRJbmZvOwotICAgIEFmZmluZVRyYW5zZm9ybSBtX2xvY2Fs
VHJhbnNmb3JtOwogfTsKIAotaW5saW5lIFJlbmRlclNWR1BhdGgqIHRvUmVuZGVyU1ZHUGF0aChS
ZW5kZXJPYmplY3QqIG9iamVjdCkKLXsKLSAgICBBU1NFUlQoIW9iamVjdCB8fCBvYmplY3QtPmlz
U1ZHUGF0aCgpKTsKLSAgICByZXR1cm4gc3RhdGljX2Nhc3Q8UmVuZGVyU1ZHUGF0aCo+KG9iamVj
dCk7Ci19Ci0KLWlubGluZSBjb25zdCBSZW5kZXJTVkdQYXRoKiB0b1JlbmRlclNWR1BhdGgoY29u
c3QgUmVuZGVyT2JqZWN0KiBvYmplY3QpCi17Ci0gICAgQVNTRVJUKCFvYmplY3QgfHwgb2JqZWN0
LT5pc1NWR1BhdGgoKSk7Ci0gICAgcmV0dXJuIHN0YXRpY19jYXN0PGNvbnN0IFJlbmRlclNWR1Bh
dGgqPihvYmplY3QpOwotfQotCi0vLyBUaGlzIHdpbGwgY2F0Y2ggYW55b25lIGRvaW5nIGFuIHVu
bmVjZXNzYXJ5IGNhc3QuCi12b2lkIHRvUmVuZGVyU1ZHUGF0aChjb25zdCBSZW5kZXJTVkdQYXRo
Kik7Ci0KIH0KIAogI2VuZGlmIC8vIEVOQUJMRShTVkcpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1JlY3QuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZWN0LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwLi5mMzIxZWNmCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL3N2Zy9SZW5kZXJTVkdSZWN0LmNwcApAQCAtMCwwICsxLDE0NCBAQAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAxMSBVbml2ZXJzaXR5IG9mIFN6ZWdlZAorICogQ29weXJpZ2h0IChDKSAyMDEx
IFJlbmF0YSBIb2RvdmFuIChyZW5pQHdlYmtpdC5vcmcpCisgKiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVU5JVkVSU0lU
WSBPRiBTWkVHRUQgYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
KyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBVTklWRVJTSVRZ
IE9GIFNaRUdFRCBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKworI2lmIEVOQUJMRShTVkcpCisjaW5jbHVk
ZSAiUmVuZGVyU1ZHUmVjdC5oIgorCisjaW5jbHVkZSAiU1ZHTmFtZXMuaCIKKyNpbmNsdWRlICJT
VkdSZWN0RWxlbWVudC5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK1JlbmRlclNWR1JlY3Q6
OlJlbmRlclNWR1JlY3QoU1ZHU3R5bGVkVHJhbnNmb3JtYWJsZUVsZW1lbnQqIG5vZGUpCisgICAg
OiBSZW5kZXJTVkdTaGFwZShub2RlKQorICAgICwgbV9yZWN0KEZsb2F0UmVjdCgpKQoreworfQor
CitSZW5kZXJTVkdSZWN0Ojp+UmVuZGVyU1ZHUmVjdCgpCit7Cit9CisKK3ZvaWQgUmVuZGVyU1ZH
UmVjdDo6Y2xlYXJTaGFwZSgpCit7CisgICAgbV9yZWN0ID0gRmxvYXRSZWN0KCk7CisgICAgUmVu
ZGVyU1ZHU2hhcGU6OmNsZWFyU2hhcGUoKTsKK30KKworRmxvYXRSZWN0IFJlbmRlclNWR1JlY3Q6
OnNoYXBlQm91bmRpbmdSZWN0KCkKK3sKKyAgICBpZiAoaGFzUGF0aCgpKQorICAgICAgICByZXR1
cm4gUmVuZGVyU1ZHU2hhcGU6OnNoYXBlQm91bmRpbmdSZWN0KCk7CisgICAgcmV0dXJuIG1fcmVj
dDsKK30KKwordm9pZCBSZW5kZXJTVkdSZWN0OjpjcmVhdGVTaGFwZSgpCit7CisgICAgU1ZHU3R5
bGVkVHJhbnNmb3JtYWJsZUVsZW1lbnQqIGVsZW1lbnQgPSBzdGF0aWNfY2FzdDxTVkdTdHlsZWRU
cmFuc2Zvcm1hYmxlRWxlbWVudCo+KG5vZGUoKSk7CisgICAgU1ZHUmVjdEVsZW1lbnQqIHJlY3Qg
PSBzdGF0aWNfY2FzdDxTVkdSZWN0RWxlbWVudCo+KGVsZW1lbnQpOworICAgIGJvb2wgbV9oYXNS
eCA9IHJlY3QtPmhhc0F0dHJpYnV0ZShTVkdOYW1lczo6cnhBdHRyKTsKKyAgICBib29sIG1faGFz
UnkgPSByZWN0LT5oYXNBdHRyaWJ1dGUoU1ZHTmFtZXM6OnJ5QXR0cik7CisgICAgaWYgKG1faGFz
UnggfHwgbV9oYXNSeSB8fCAhc3R5bGUoKS0+c3ZnU3R5bGUoKS0+c3Ryb2tlRGFzaEFycmF5KCku
aXNFbXB0eSgpKSB7CisgICAgICAgUmVuZGVyU1ZHU2hhcGU6OmNyZWF0ZVNoYXBlKCk7CisgICAg
ICAgcmV0dXJuOworICAgIH0KKyAgICBmbG9hdCB3aWR0aFZhbHVlID0gcmVjdC0+d2lkdGgoKS52
YWx1ZShyZWN0KTsKKyAgICBpZiAod2lkdGhWYWx1ZSA8PSAwKQorICAgICAgICByZXR1cm47CisK
KyAgICBmbG9hdCBoZWlnaHRWYWx1ZSA9IHJlY3QtPmhlaWdodCgpLnZhbHVlKHJlY3QpOworICAg
IGlmIChoZWlnaHRWYWx1ZSA8PSAwKQorICAgICAgICByZXR1cm47CisKKyAgICBmbG9hdCB4VmFs
dWUgPSByZWN0LT54KCkudmFsdWUocmVjdCk7CisgICAgZmxvYXQgeVZhbHVlID0gcmVjdC0+eSgp
LnZhbHVlKHJlY3QpOworICAgIEZsb2F0UmVjdCBmcmVjdCh4VmFsdWUsIHlWYWx1ZSwgd2lkdGhW
YWx1ZSwgaGVpZ2h0VmFsdWUpOworICAgIG1fcmVjdCA9IGZyZWN0OworfQorCitGbG9hdFJlY3Qg
UmVuZGVyU1ZHUmVjdDo6c3Ryb2tlQm91bmRpbmdTaGFwZSgpCit7CisgICAgaWYgKGhhc1BhdGgo
KSkKKyAgICAgICAgcmV0dXJuIFJlbmRlclNWR1NoYXBlOjpzdHJva2VCb3VuZGluZ1NoYXBlKCk7
CisgICAgZmxvYXQgc3Ryb2tlV2lkdGggPSBzdHlsZSgpLT5zdmdTdHlsZSgpLT5zdHJva2VXaWR0
aCgpLnZhbHVlKHN0YXRpY19jYXN0PFNWR1JlY3RFbGVtZW50Kj4obm9kZSgpKSk7CisgICAgQm91
bmRpbmdSZWN0U3Ryb2tlU3R5bGVBcHBsaWVyIHN0cm9rZVN0eWxlKHRoaXMsIHN0eWxlKCkpOwor
ICAgIEZsb2F0UmVjdCBzdHJva2VSZWN0ID0gbV9yZWN0OworICAgIHN0cm9rZVJlY3QuaW5mbGF0
ZShzdHJva2VXaWR0aCAvIDIpOworICAgIHJldHVybiBzdHJva2VSZWN0OworfQorCit2b2lkIFJl
bmRlclNWR1JlY3Q6OmZpbGxTaGFwZShHcmFwaGljc0NvbnRleHQqIGNvbnRleHQpCit7CisgICAg
aWYgKCFoYXNQYXRoKCkpCisgICAgICAgIGNvbnRleHQtPmZpbGxSZWN0KG1fcmVjdCk7CisgICAg
ZWxzZQorICAgICAgICBSZW5kZXJTVkdTaGFwZTo6ZmlsbFNoYXBlKGNvbnRleHQpOworfQorCit2
b2lkIFJlbmRlclNWR1JlY3Q6OnN0cm9rZVNoYXBlKEdyYXBoaWNzQ29udGV4dCogY29udGV4dCkK
K3sKKyAgICBpZiAoaGFzUGF0aCgpKSB7CisgICAgICAgIFJlbmRlclNWR1NoYXBlOjpzdHJva2VT
aGFwZShjb250ZXh0KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBmbG9hdCBzdHJva2VX
aWR0aCA9IHN0eWxlKCktPnN2Z1N0eWxlKCktPnN0cm9rZVdpZHRoKCkudmFsdWUoc3RhdGljX2Nh
c3Q8U1ZHUmVjdEVsZW1lbnQqPihub2RlKCkpKTsKKyAgICBjb250ZXh0LT5zdHJva2VSZWN0KG1f
cmVjdCwgc3Ryb2tlV2lkdGgpOworfQorCitib29sIFJlbmRlclNWR1JlY3Q6OnN0cm9rZUNvbnRh
aW5zU2xvd0Nhc2UoY29uc3QgRmxvYXRQb2ludCYgcG9pbnQpCit7CisgICAgY29uc3QgU1ZHUmVu
ZGVyU3R5bGUqIHN2Z1N0eWxlID0gc3R5bGUoKS0+c3ZnU3R5bGUoKTsKKyAgICBmbG9hdCBzdHJv
a2VXaWR0aCA9IHN2Z1N0eWxlLT5zdHJva2VXaWR0aCgpLnZhbHVlKHN0YXRpY19jYXN0PFNWR1Jl
Y3RFbGVtZW50Kj4obm9kZSgpKSk7CisgICAgRmxvYXRSZWN0IGlubmVyU3Ryb2tlUmVjdCA9IG1f
cmVjdDsKKyAgICBGbG9hdFJlY3Qgb3V0ZXJTdHJva2VSZWN0ID0gbV9yZWN0OworICAgIGlubmVy
U3Ryb2tlUmVjdC5pbmZsYXRlKC1zdHJva2VXaWR0aCAvIDIpOworICAgIG91dGVyU3Ryb2tlUmVj
dC5pbmZsYXRlKHN0cm9rZVdpZHRoIC8gMik7CisgICAgaWYgKGRldGVybWluZVBvaW50TG9jYXRp
b24ocG9pbnQsIGlubmVyU3Ryb2tlUmVjdCkgIT0gSW5zaWRlU2hhcGUgJiYgZGV0ZXJtaW5lUG9p
bnRMb2NhdGlvbihwb2ludCwgb3V0ZXJTdHJva2VSZWN0KSAhPSBPdXRzaWRlU2hhcGUpCisgICAg
ICAgIHJldHVybiB0cnVlOworICAgIHJldHVybiBmYWxzZTsKK30KKworYm9vbCBSZW5kZXJTVkdS
ZWN0OjpmaWxsQ29udGFpbnNTbG93Q2FzZShjb25zdCBGbG9hdFBvaW50JiBwb2ludCwgY29uc3Qg
V2luZFJ1bGUmKQoreworICAgIGlmIChkZXRlcm1pbmVQb2ludExvY2F0aW9uKHBvaW50LCBtX3Jl
Y3QpICE9IE91dHNpZGVTaGFwZSkKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgcmV0dXJuIGZh
bHNlOworfQorCitQb2ludExvY2F0aW9uIFJlbmRlclNWR1JlY3Q6OmRldGVybWluZVBvaW50TG9j
YXRpb24oY29uc3QgRmxvYXRQb2ludCYgcG9pbnQsIGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKK3sK
KyAgICAvLyBUZXN0IHdoZXRoZXIgdGhlIHJlY3QgY29udGFpbnMgdGhlIGNlcnRhaW4gcG9pbnQg
b3Igbm90CisgICAgaWYgKHJlY3QueCgpIDw9IHBvaW50LngoKSAmJiByZWN0Lm1heFgoKSA+PSBw
b2ludC54KCkgJiYgcmVjdC55KCkgPD0gcG9pbnQueSgpICYmIHJlY3QubWF4WSgpID49IHBvaW50
LnkoKSkKKyAgICAgICAgcmV0dXJuIChyZWN0LngoKSA8IHBvaW50LngoKSAmJiByZWN0Lm1heFgo
KSA+IHBvaW50LngoKSAmJiByZWN0LnkoKSA8IHBvaW50LnkoKSAmJiByZWN0Lm1heFkoKSA+IHBv
aW50LnkoKSkgPyBJbnNpZGVTaGFwZSA6IE9uU3Ryb2tlOworICAgIHJldHVybiBPdXRzaWRlU2hh
cGU7Cit9CisKK30KKworI2VuZGlmIC8vIEVOQUJMRShTVkcpCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1JlY3QuaCBiL1NvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVjdC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw
MDAwMDAuLjAxYzgwNmIKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvc3ZnL1JlbmRlclNWR1JlY3QuaApAQCAtMCwwICsxLDYzIEBACisvKgorICogQ29weXJpZ2h0
IChDKSAyMDExIFVuaXZlcnNpdHkgb2YgU3plZ2VkCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgUmVu
YXRhIEhvZG92YW4gKHJlbmlAd2Via2l0Lm9yZykKKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBVTklWRVJTSVRZIE9G
IFNaRUdFRCBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFVOSVZFUlNJVFkgT0Yg
U1pFR0VEIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgor
ICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisg
Ki8KKworI2lmbmRlZiBSZW5kZXJTVkdSZWN0X2gKKyNkZWZpbmUgUmVuZGVyU1ZHUmVjdF9oCisK
KyNpZiBFTkFCTEUoU1ZHKQorI2luY2x1ZGUgIlJlbmRlclNWR1BhdGguaCIKKworbmFtZXNwYWNl
IFdlYkNvcmUgeworCitjbGFzcyBSZW5kZXJTVkdSZWN0IDogcHVibGljIFJlbmRlclNWR1NoYXBl
IHsKK3B1YmxpYzoKKyAgICBSZW5kZXJTVkdSZWN0KFNWR1N0eWxlZFRyYW5zZm9ybWFibGVFbGVt
ZW50Kik7CisgICAgdmlydHVhbCB+UmVuZGVyU1ZHUmVjdCgpOworCitwcml2YXRlOgorICAgIHZp
cnR1YWwgYm9vbCBpc1NWR1JlY3QoKSBjb25zdCB7IHJldHVybiB0cnVlOyB9CisgICAgdmlydHVh
bCBjb25zdCBjaGFyKiByZW5kZXJOYW1lKCkgY29uc3QgeyByZXR1cm4gIlJlbmRlclNWR1JlY3Qi
OyB9CisKKyAgICB2b2lkIGNsZWFyU2hhcGUoKTsKKyAgICB2b2lkIGNyZWF0ZVNoYXBlKCk7Cisg
ICAgYm9vbCBpc0VtcHR5KCkgeyByZXR1cm4gcGF0aFB0cigpID8gUmVuZGVyU1ZHU2hhcGU6Omlz
RW1wdHkoKSA6IG1fcmVjdC5pc0VtcHR5KCk7IH07CisgICAgdm9pZCBmaWxsU2hhcGUoR3JhcGhp
Y3NDb250ZXh0Kik7CisgICAgRmxvYXRSZWN0IHNoYXBlQm91bmRpbmdSZWN0KCk7CisgICAgRmxv
YXRSZWN0IHN0cm9rZUJvdW5kaW5nU2hhcGUoKTsKKyAgICB2b2lkIHN0cm9rZVNoYXBlKEdyYXBo
aWNzQ29udGV4dCopOworICAgIGJvb2wgc3Ryb2tlQ29udGFpbnNTbG93Q2FzZShjb25zdCBGbG9h
dFBvaW50Jik7CisgICAgYm9vbCBmaWxsQ29udGFpbnNTbG93Q2FzZShjb25zdCBGbG9hdFBvaW50
JiwgY29uc3QgV2luZFJ1bGUmKTsKKyAgICBQb2ludExvY2F0aW9uIGRldGVybWluZVBvaW50TG9j
YXRpb24oY29uc3QgRmxvYXRQb2ludCYsIGNvbnN0IEZsb2F0UmVjdCYpOworCitwcml2YXRlOgor
ICAgIEZsb2F0UmVjdCBtX3JlY3Q7Cit9OworCit9CisKKyNlbmRpZiAvLyBFTkFCTEUoU1ZHKQor
I2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNW
R1NoYXBlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHU2hhcGUu
Y3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBjOGFmMjgKLS0tIC9kZXYv
bnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1NoYXBlLmNw
cApAQCAtMCwwICsxLDQyNyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSwgMjAw
NyBOaWtvbGFzIFppbW1lcm1hbm4gPHppbW1lcm1hbm5Aa2RlLm9yZz4KKyAqIENvcHlyaWdodCAo
QykgMjAwNCwgMjAwNSwgMjAwOCBSb2IgQnVpcyA8YnVpc0BrZGUub3JnPgorICogQ29weXJpZ2h0
IChDKSAyMDA1LCAyMDA3IEVyaWMgU2VpZGVsIDxlcmljQHdlYmtpdC5vcmc+CisgKiBDb3B5cmln
aHQgKEMpIDIwMDkgR29vZ2xlLCBJbmMuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgRGlyayBTY2h1
bHplIDxrcml0QHdlYmtpdC5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIFJlc2VhcmNoIEluIE1vdGlv
biBMaW1pdGVkIDIwMTAuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIw
MDkgSmVmZiBTY2hpbGxlciA8Y29kZWRyZWFkQGdtYWlsLmNvbT4KKyAqCisgKiBUaGlzIGxpYnJh
cnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBt
b2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1Ymxp
YworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlv
bjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlv
bikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVk
IGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkg
V0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hB
TlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBH
TlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgor
ICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5
IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUg
dGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0
d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAor
ICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5o
IgorCisjaWYgRU5BQkxFKFNWRykKKyNpbmNsdWRlICJSZW5kZXJTVkdTaGFwZS5oIgorCisjaW5j
bHVkZSAiRmxvYXRQb2ludC5oIgorI2luY2x1ZGUgIkZsb2F0UXVhZC5oIgorI2luY2x1ZGUgIkdy
YXBoaWNzQ29udGV4dC5oIgorI2luY2x1ZGUgIkhpdFRlc3RSZXF1ZXN0LmgiCisjaW5jbHVkZSAi
UG9pbnRlckV2ZW50c0hpdFJ1bGVzLmgiCisjaW5jbHVkZSAiUmVuZGVyU1ZHQ29udGFpbmVyLmgi
CisjaW5jbHVkZSAiUmVuZGVyU1ZHUmVzb3VyY2VNYXJrZXIuaCIKKyNpbmNsdWRlICJSZW5kZXJT
VkdSZXNvdXJjZVNvbGlkQ29sb3IuaCIKKyNpbmNsdWRlICJTVkdQYXRoRWxlbWVudC5oIgorI2lu
Y2x1ZGUgIlNWR1JlbmRlclN1cHBvcnQuaCIKKyNpbmNsdWRlICJTVkdSZXNvdXJjZXMuaCIKKyNp
bmNsdWRlICJTVkdTdHlsZWRUcmFuc2Zvcm1hYmxlRWxlbWVudC5oIgorI2luY2x1ZGUgIlNWR1Ry
YW5zZm9ybUxpc3QuaCIKKyNpbmNsdWRlICJTVkdVUklSZWZlcmVuY2UuaCIKKyNpbmNsdWRlICJT
dHJva2VTdHlsZUFwcGxpZXIuaCIKKyNpbmNsdWRlIDx3dGYvTWF0aEV4dHJhcy5oPgorCituYW1l
c3BhY2UgV2ViQ29yZSB7CisKK1JlbmRlclNWR1NoYXBlOjpSZW5kZXJTVkdTaGFwZShTVkdTdHls
ZWRUcmFuc2Zvcm1hYmxlRWxlbWVudCogbm9kZSkKKyAgICA6IFJlbmRlclNWR01vZGVsT2JqZWN0
KG5vZGUpCisgICAgLCBtX25lZWRzQm91bmRhcmllc1VwZGF0ZShmYWxzZSkgLy8gZGVmYXVsdCBp
cyBmYWxzZSwgdGhlIGNhY2hlZCByZWN0cyBhcmUgZW1wdHkgZnJvbSB0aGUgYmVnaW5uaW5nCisg
ICAgLCBtX25lZWRzU2hhcGVVcGRhdGUodHJ1ZSkgLy8gZGVmYXVsdCBpcyB0cnVlLCBzbyB3ZSBn
cmFiIGEgUGF0aCBvYmplY3Qgb25jZSBmcm9tIFNWR1N0eWxlZFRyYW5zZm9ybWFibGVFbGVtZW50
CisgICAgLCBtX25lZWRzVHJhbnNmb3JtVXBkYXRlKHRydWUpIC8vIGRlZmF1bHQgaXMgdHJ1ZSwg
c28gd2UgZ3JhYiBhIEFmZmluZVRyYW5zZm9ybSBvYmplY3Qgb25jZSBmcm9tIFNWR1N0eWxlZFRy
YW5zZm9ybWFibGVFbGVtZW50Cit7Cit9CisKK1JlbmRlclNWR1NoYXBlOjp+UmVuZGVyU1ZHU2hh
cGUoKQoreworfQorCit2b2lkIFJlbmRlclNWR1NoYXBlOjpjbGVhclNoYXBlKCkKK3sKKyAgICBt
X3BhdGguY2xlYXIoKTsKK30KKwordm9pZCBSZW5kZXJTVkdTaGFwZTo6Y3JlYXRlU2hhcGUoKQor
eworICAgIG1fcGF0aCA9IGFkb3B0UHRyKG5ldyBQYXRoKCkpOworICAgIEFTU0VSVChpc0VtcHR5
KCkpOworCisgICAgU1ZHUGF0aEVsZW1lbnQqIGVsZW1lbnQgPSBzdGF0aWNfY2FzdDxTVkdQYXRo
RWxlbWVudCo+KG5vZGUoKSk7CisgICAgZWxlbWVudC0+dG9QYXRoRGF0YShwYXRoKCkpOworfQor
Citib29sIFJlbmRlclNWR1NoYXBlOjppc0VtcHR5KCkKK3sKKyAgICByZXR1cm4gcGF0aCgpLmlz
RW1wdHkoKTsKK30KKwordm9pZCBSZW5kZXJTVkdTaGFwZTo6ZmlsbFNoYXBlKEdyYXBoaWNzQ29u
dGV4dCogY29udGV4dCkKK3sKKyAgICBjb250ZXh0LT5maWxsUGF0aChwYXRoKCkpOworfQorCitG
bG9hdFJlY3QgUmVuZGVyU1ZHU2hhcGU6OnNoYXBlQm91bmRpbmdSZWN0KCkKK3sKKyAgICByZXR1
cm4gcGF0aCgpLmJvdW5kaW5nUmVjdCgpOworfQorCitGbG9hdFJlY3QgUmVuZGVyU1ZHU2hhcGU6
OnN0cm9rZUJvdW5kaW5nU2hhcGUoKQoreworICAgIEJvdW5kaW5nUmVjdFN0cm9rZVN0eWxlQXBw
bGllciBzdHJva2VTdHlsZSh0aGlzLCBzdHlsZSgpKTsKKyAgICByZXR1cm4gcGF0aCgpLnN0cm9r
ZUJvdW5kaW5nUmVjdCgmc3Ryb2tlU3R5bGUpOworfQorCit2b2lkIFJlbmRlclNWR1NoYXBlOjpz
dHJva2VTaGFwZShHcmFwaGljc0NvbnRleHQqIGNvbnRleHQpCit7CisgICAgY29udGV4dC0+c3Ry
b2tlUGF0aChwYXRoKCkpOworfQorCitib29sIFJlbmRlclNWR1NoYXBlOjpzdHJva2VDb250YWlu
c1Nsb3dDYXNlKGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50KQoreworICAgIEJvdW5kaW5nUmVjdFN0
cm9rZVN0eWxlQXBwbGllciBhcHBsaWVyKHRoaXMsIHN0eWxlKCkpOworICAgIHJldHVybiBwYXRo
KCkuc3Ryb2tlQ29udGFpbnMoJmFwcGxpZXIsIHBvaW50KTsKK30KKworYm9vbCBSZW5kZXJTVkdT
aGFwZTo6ZmlsbENvbnRhaW5zU2xvd0Nhc2UoY29uc3QgRmxvYXRQb2ludCYgcG9pbnQsIGNvbnN0
IFdpbmRSdWxlJiBmaWxsUnVsZSkKK3sKKyAgICByZXR1cm4gcGF0aCgpLmNvbnRhaW5zKHBvaW50
LCBmaWxsUnVsZSk7Cit9CisKK2Jvb2wgUmVuZGVyU1ZHU2hhcGU6OmZpbGxDb250YWlucyhjb25z
dCBGbG9hdFBvaW50JiBwb2ludCwgYm9vbCByZXF1aXJlc0ZpbGwsIFdpbmRSdWxlIGZpbGxSdWxl
KQoreworICAgIGlmICghbV9maWxsQm91bmRpbmdCb3guY29udGFpbnMocG9pbnQpKQorICAgICAg
ICByZXR1cm4gZmFsc2U7CisKKyAgICBDb2xvciBmYWxsYmFja0NvbG9yOworICAgIGlmIChyZXF1
aXJlc0ZpbGwgJiYgIVJlbmRlclNWR1Jlc291cmNlOjpmaWxsUGFpbnRpbmdSZXNvdXJjZSh0aGlz
LCBzdHlsZSgpLCBmYWxsYmFja0NvbG9yKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAg
cmV0dXJuIGZpbGxDb250YWluc1Nsb3dDYXNlKHBvaW50LCBmaWxsUnVsZSk7Cit9CisKK2Jvb2wg
UmVuZGVyU1ZHU2hhcGU6OnN0cm9rZUNvbnRhaW5zKGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50LCBi
b29sIHJlcXVpcmVzU3Ryb2tlKQoreworICAgIGlmICghbV9zdHJva2VBbmRNYXJrZXJCb3VuZGlu
Z0JveC5jb250YWlucyhwb2ludCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIENvbG9y
IGZhbGxiYWNrQ29sb3I7CisgICAgaWYgKHJlcXVpcmVzU3Ryb2tlICYmICFSZW5kZXJTVkdSZXNv
dXJjZTo6c3Ryb2tlUGFpbnRpbmdSZXNvdXJjZSh0aGlzLCBzdHlsZSgpLCBmYWxsYmFja0NvbG9y
KSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgaWYgKHNob3VsZFN0cm9rZVplcm9MZW5n
dGhTdWJwYXRoKCkpCisgICAgICAgIHJldHVybiB6ZXJvTGVuZ3RoU3VicGF0aFJlY3QoKS5jb250
YWlucyhwb2ludCk7CisKKyAgICBpZiAoc3R5bGUoKS0+c3ZnU3R5bGUoKS0+c3Ryb2tlRGFzaEFy
cmF5KCkuaXNFbXB0eSgpKQorICAgICAgICByZXR1cm4gc3Ryb2tlQ29udGFpbnNTbG93Q2FzZShw
b2ludCk7CisgICAgQm91bmRpbmdSZWN0U3Ryb2tlU3R5bGVBcHBsaWVyIHN0cm9rZVN0eWxlKHRo
aXMsIHN0eWxlKCkpOworICAgIHJldHVybiBwYXRoKCkuc3Ryb2tlQ29udGFpbnMoJnN0cm9rZVN0
eWxlLCBwb2ludCk7Cit9CisKK3ZvaWQgUmVuZGVyU1ZHU2hhcGU6OmxheW91dCgpCit7CisgICAg
TGF5b3V0UmVwYWludGVyIHJlcGFpbnRlcigqdGhpcywgY2hlY2tGb3JSZXBhaW50RHVyaW5nTGF5
b3V0KCkgJiYgc2VsZk5lZWRzTGF5b3V0KCkpOworICAgIFNWR1N0eWxlZFRyYW5zZm9ybWFibGVF
bGVtZW50KiBlbGVtZW50ID0gc3RhdGljX2Nhc3Q8U1ZHU3R5bGVkVHJhbnNmb3JtYWJsZUVsZW1l
bnQqPihub2RlKCkpOworCisgICAgYm9vbCB1cGRhdGVDYWNoZWRCb3VuZGFyaWVzSW5QYXJlbnRz
ID0gZmFsc2U7CisKKyAgICBib29sIG5lZWRzU2hhcGVVcGRhdGUgPSBtX25lZWRzU2hhcGVVcGRh
dGU7CisgICAgaWYgKG5lZWRzU2hhcGVVcGRhdGUpIHsKKyAgICAgICAgY2xlYXJTaGFwZSgpOwor
ICAgICAgICBjcmVhdGVTaGFwZSgpOworICAgICAgICBtX25lZWRzU2hhcGVVcGRhdGUgPSBmYWxz
ZTsKKyAgICAgICAgdXBkYXRlQ2FjaGVkQm91bmRhcmllc0luUGFyZW50cyA9IHRydWU7CisgICAg
fQorCisgICAgaWYgKG1fbmVlZHNUcmFuc2Zvcm1VcGRhdGUpIHsKKyAgICAgICAgbV9sb2NhbFRy
YW5zZm9ybSA9IGVsZW1lbnQtPmFuaW1hdGVkTG9jYWxUcmFuc2Zvcm0oKTsKKyAgICAgICAgbV9u
ZWVkc1RyYW5zZm9ybVVwZGF0ZSA9IGZhbHNlOworICAgICAgICB1cGRhdGVDYWNoZWRCb3VuZGFy
aWVzSW5QYXJlbnRzID0gdHJ1ZTsKKyAgICB9CisKKyAgICBpZiAobV9uZWVkc0JvdW5kYXJpZXNV
cGRhdGUpCisgICAgICAgIHVwZGF0ZUNhY2hlZEJvdW5kYXJpZXNJblBhcmVudHMgPSB0cnVlOwor
CisgICAgLy8gSW52YWxpZGF0ZSBhbGwgcmVzb3VyY2VzIG9mIHRoaXMgY2xpZW50IGlmIG91ciBs
YXlvdXQgY2hhbmdlZC4KKyAgICBpZiAobV9ldmVySGFkTGF5b3V0ICYmIHNlbGZOZWVkc0xheW91
dCgpKSB7CisgICAgICAgIFNWR1Jlc291cmNlc0NhY2hlOjpjbGllbnRMYXlvdXRDaGFuZ2VkKHRo
aXMpOworICAgICAgICBtX21hcmtlckxheW91dEluZm8uY2xlYXIoKTsKKyAgICB9CisKKyAgICAv
LyBBdCB0aGlzIHBvaW50IExheW91dFJlcGFpbnRlciBhbHJlYWR5IGdyYWJiZWQgdGhlIG9sZCBi
b3VuZHMsCisgICAgLy8gcmVjYWxjdWxhdGUgdGhlbSBub3cgc28gcmVwYWludEFmdGVyTGF5b3V0
KCkgdXNlcyB0aGUgbmV3IGJvdW5kcy4KKyAgICBpZiAobmVlZHNTaGFwZVVwZGF0ZSB8fCBtX25l
ZWRzQm91bmRhcmllc1VwZGF0ZSkgeworICAgICAgICB1cGRhdGVDYWNoZWRCb3VuZGFyaWVzKCk7
CisgICAgICAgIG1fbmVlZHNCb3VuZGFyaWVzVXBkYXRlID0gZmFsc2U7CisgICAgfQorCisgICAg
Ly8gSWYgb3VyIGJvdW5kcyBjaGFuZ2VkLCBub3RpZnkgdGhlIHBhcmVudHMuCisgICAgaWYgKHVw
ZGF0ZUNhY2hlZEJvdW5kYXJpZXNJblBhcmVudHMpCisgICAgICAgIFJlbmRlclNWR01vZGVsT2Jq
ZWN0OjpzZXROZWVkc0JvdW5kYXJpZXNVcGRhdGUoKTsKKworICAgIHJlcGFpbnRlci5yZXBhaW50
QWZ0ZXJMYXlvdXQoKTsKKyAgICBzZXROZWVkc0xheW91dChmYWxzZSk7Cit9CisKK2Jvb2wgUmVu
ZGVyU1ZHU2hhcGU6OnNob3VsZFN0cm9rZVplcm9MZW5ndGhTdWJwYXRoKCkgY29uc3QKK3sKKyAg
ICAvLyBTcGVjKDExLjQpOiBBbnkgemVybyBsZW5ndGggc3VicGF0aCBzaGFsbCBub3QgYmUgc3Ry
b2tlZCBpZiB0aGUg4oCYc3Ryb2tlLWxpbmVjYXDigJkgcHJvcGVydHkgaGFzIGEgdmFsdWUgb2Yg
YnV0dAorICAgIC8vIGJ1dCBzaGFsbCBiZSBzdHJva2VkIGlmIHRoZSDigJhzdHJva2UtbGluZWNh
cOKAmSBwcm9wZXJ0eSBoYXMgYSB2YWx1ZSBvZiByb3VuZCBvciBzcXVhcmUKKyAgICByZXR1cm4g
c3R5bGUoKS0+c3ZnU3R5bGUoKS0+aGFzU3Ryb2tlKCkgJiYgc3R5bGUoKS0+c3ZnU3R5bGUoKS0+
Y2FwU3R5bGUoKSAhPSBCdXR0Q2FwICYmICFtX2ZpbGxCb3VuZGluZ0JveC53aWR0aCgpICYmICFt
X2ZpbGxCb3VuZGluZ0JveC5oZWlnaHQoKTsKK30KKworRmxvYXRSZWN0IFJlbmRlclNWR1NoYXBl
Ojp6ZXJvTGVuZ3RoU3VicGF0aFJlY3QoKSBjb25zdAoreworICAgIFNWR0VsZW1lbnQqIHN2Z0Vs
ZW1lbnQgPSBzdGF0aWNfY2FzdDxTVkdFbGVtZW50Kj4obm9kZSgpKTsKKyAgICBmbG9hdCBzdHJv
a2VXaWR0aCA9IHN0eWxlKCktPnN2Z1N0eWxlKCktPnN0cm9rZVdpZHRoKCkudmFsdWUoc3ZnRWxl
bWVudCk7CisgICAgcmV0dXJuIEZsb2F0UmVjdChtX2ZpbGxCb3VuZGluZ0JveC54KCkgLSBzdHJv
a2VXaWR0aCAvIDIsIG1fZmlsbEJvdW5kaW5nQm94LnkoKSAtIHN0cm9rZVdpZHRoIC8gMiwgc3Ry
b2tlV2lkdGgsIHN0cm9rZVdpZHRoKTsKK30KKwordm9pZCBSZW5kZXJTVkdTaGFwZTo6c2V0dXBT
cXVhcmVDYXBQYXRoKFBhdGgqJiB1c2VQYXRoLCBpbnQmIGFwcGx5TW9kZSkKK3sKKyAgICAvLyBT
cGVjKDExLjQpOiBBbnkgemVybyBsZW5ndGggc3VicGF0aCBzaGFsbCBub3QgYmUgc3Ryb2tlZCBp
ZiB0aGUg4oCYc3Ryb2tlLWxpbmVjYXDigJkgcHJvcGVydHkgaGFzIGEgdmFsdWUgb2YgYnV0dAor
ICAgIC8vIGJ1dCBzaGFsbCBiZSBzdHJva2VkIGlmIHRoZSDigJhzdHJva2UtbGluZWNhcOKAmSBw
cm9wZXJ0eSBoYXMgYSB2YWx1ZSBvZiByb3VuZCBvciBzcXVhcmUKKyAgICBERUZJTkVfU1RBVElD
X0xPQ0FMKFBhdGgsIHRlbXBQYXRoLCAoKSk7CisKKyAgICBhcHBseU1vZGUgPSBBcHBseVRvRmls
bE1vZGU7CisgICAgdXNlUGF0aCA9ICZ0ZW1wUGF0aDsKKyAgICB1c2VQYXRoLT5jbGVhcigpOwor
ICAgIGlmIChzdHlsZSgpLT5zdmdTdHlsZSgpLT5jYXBTdHlsZSgpID09IFNxdWFyZUNhcCkKKyAg
ICAgICAgdXNlUGF0aC0+YWRkUmVjdCh6ZXJvTGVuZ3RoU3VicGF0aFJlY3QoKSk7CisgICAgZWxz
ZQorICAgICAgICB1c2VQYXRoLT5hZGRFbGxpcHNlKHplcm9MZW5ndGhTdWJwYXRoUmVjdCgpKTsK
K30KKworYm9vbCBSZW5kZXJTVkdTaGFwZTo6c2V0dXBOb25TY2FsaW5nU3Ryb2tlUGF0aChQYXRo
KiYgdXNlUGF0aCwgR3JhcGhpY3NDb250ZXh0U3RhdGVTYXZlciYgc3RhdGVTYXZlcikKK3sKKyAg
ICBERUZJTkVfU1RBVElDX0xPQ0FMKFBhdGgsIHRlbXBQYXRoLCAoKSk7CisKKyAgICBTVkdTdHls
ZWRUcmFuc2Zvcm1hYmxlRWxlbWVudCogZWxlbWVudCA9IHN0YXRpY19jYXN0PFNWR1N0eWxlZFRy
YW5zZm9ybWFibGVFbGVtZW50Kj4obm9kZSgpKTsKKyAgICBBZmZpbmVUcmFuc2Zvcm0gbm9uU2Nh
bGluZ1N0cm9rZVRyYW5zZm9ybSA9IGVsZW1lbnQtPmdldFNjcmVlbkNUTShTVkdMb2NhdGFibGU6
OkRpc2FsbG93U3R5bGVVcGRhdGUpOworICAgIGlmICghbm9uU2NhbGluZ1N0cm9rZVRyYW5zZm9y
bS5pc0ludmVydGlibGUoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgdGVtcFBhdGgg
PSBwYXRoKCk7CisgICAgdXNlUGF0aCA9ICZ0ZW1wUGF0aDsKKyAgICB0ZW1wUGF0aC50cmFuc2Zv
cm0obm9uU2NhbGluZ1N0cm9rZVRyYW5zZm9ybSk7CisKKyAgICBzdGF0ZVNhdmVyLnNhdmUoKTsK
KyAgICBzdGF0ZVNhdmVyLmNvbnRleHQoKS0+Y29uY2F0Q1RNKG5vblNjYWxpbmdTdHJva2VUcmFu
c2Zvcm0uaW52ZXJzZSgpKTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKwordm9pZCBSZW5kZXJTVkdT
aGFwZTo6ZmlsbEFuZFN0cm9rZVBhdGgoR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0KQoreworICAg
IFJlbmRlclN0eWxlKiBzdHlsZSA9IHRoaXMtPnN0eWxlKCk7CisKKyAgICBDb2xvciBmYWxsYmFj
a0NvbG9yOworICAgIGlmIChSZW5kZXJTVkdSZXNvdXJjZSogZmlsbFBhaW50aW5nUmVzb3VyY2Ug
PSBSZW5kZXJTVkdSZXNvdXJjZTo6ZmlsbFBhaW50aW5nUmVzb3VyY2UodGhpcywgc3R5bGUsIGZh
bGxiYWNrQ29sb3IpKSB7CisgICAgICAgIGlmIChmaWxsUGFpbnRpbmdSZXNvdXJjZS0+YXBwbHlS
ZXNvdXJjZSh0aGlzLCBzdHlsZSwgY29udGV4dCwgQXBwbHlUb0ZpbGxNb2RlKSkgeworICAgICAg
ICAgICAgZmlsbFNoYXBlKGNvbnRleHQpOworICAgICAgICB9IGVsc2UgaWYgKGZhbGxiYWNrQ29s
b3IuaXNWYWxpZCgpKSB7CisgICAgICAgICAgICBSZW5kZXJTVkdSZXNvdXJjZVNvbGlkQ29sb3Iq
IGZhbGxiYWNrUmVzb3VyY2UgPSBSZW5kZXJTVkdSZXNvdXJjZTo6c2hhcmVkU29saWRQYWludGlu
Z1Jlc291cmNlKCk7CisgICAgICAgICAgICBmYWxsYmFja1Jlc291cmNlLT5zZXRDb2xvcihmYWxs
YmFja0NvbG9yKTsKKyAgICAgICAgICAgIGlmIChmYWxsYmFja1Jlc291cmNlLT5hcHBseVJlc291
cmNlKHRoaXMsIHN0eWxlLCBjb250ZXh0LCBBcHBseVRvRmlsbE1vZGUpKQorICAgICAgICAgICAg
ICAgIGZpbGxTaGFwZShjb250ZXh0KTsKKyAgICAgICAgfQorICAgIH0KKworICAgIGZhbGxiYWNr
Q29sb3IgPSBDb2xvcigpOworICAgIFJlbmRlclNWR1Jlc291cmNlKiBzdHJva2VQYWludGluZ1Jl
c291cmNlID0gUmVuZGVyU1ZHUmVzb3VyY2U6OnN0cm9rZVBhaW50aW5nUmVzb3VyY2UodGhpcywg
c3R5bGUsIGZhbGxiYWNrQ29sb3IpOworICAgIGlmICghc3Ryb2tlUGFpbnRpbmdSZXNvdXJjZSkK
KyAgICAgICAgcmV0dXJuOworCisgICAgUGF0aCogdXNlUGF0aDsKKyAgICBpbnQgYXBwbHlNb2Rl
ID0gQXBwbHlUb1N0cm9rZU1vZGU7CisKKyAgICBib29sIG5vblNjYWxpbmdTdHJva2UgPSBzdHls
ZS0+c3ZnU3R5bGUoKS0+dmVjdG9yRWZmZWN0KCkgPT0gVkVfTk9OX1NDQUxJTkdfU1RST0tFOwor
CisgICAgR3JhcGhpY3NDb250ZXh0U3RhdGVTYXZlciBzdGF0ZVNhdmVyKCpjb250ZXh0LCBmYWxz
ZSk7CisKKyAgICAvLyBTcGVjKDExLjQpOiBBbnkgemVybyBsZW5ndGggc3VicGF0aCBzaGFsbCBu
b3QgYmUgc3Ryb2tlZCBpZiB0aGUg4oCYc3Ryb2tlLWxpbmVjYXDigJkgcHJvcGVydHkgaGFzIGEg
dmFsdWUgb2YgYnV0dAorICAgIC8vIGJ1dCBzaGFsbCBiZSBzdHJva2VkIGlmIHRoZSDigJhzdHJv
a2UtbGluZWNhcOKAmSBwcm9wZXJ0eSBoYXMgYSB2YWx1ZSBvZiByb3VuZCBvciBzcXVhcmUKKyAg
ICAvLyBGSVhNRTogdGhpcyBkb2VzIG5vdCB3b3JrIGZvciB6ZXJvLWxlbmd0aCBzdWJwYXRocywg
b25seSB3aGVuIHRvdGFsIHBhdGggaXMgemVyby1sZW5ndGgKKyAgICBpZiAoc2hvdWxkU3Ryb2tl
WmVyb0xlbmd0aFN1YnBhdGgoKSkgeworICAgICAgICBSZW5kZXJTVkdTaGFwZTo6Y3JlYXRlU2hh
cGUoKTsKKyAgICAgICAgdXNlUGF0aCA9IHBhdGhQdHIoKTsKKyAgICAgICAgc2V0dXBTcXVhcmVD
YXBQYXRoKHVzZVBhdGgsIGFwcGx5TW9kZSk7CisgICAgfSBlbHNlIGlmIChub25TY2FsaW5nU3Ry
b2tlKSB7CisgICAgICAgIFJlbmRlclNWR1NoYXBlOjpjcmVhdGVTaGFwZSgpOworICAgICAgICB1
c2VQYXRoID0gcGF0aFB0cigpOworICAgICAgICBpZiAoIXNldHVwTm9uU2NhbGluZ1N0cm9rZVBh
dGgodXNlUGF0aCwgc3RhdGVTYXZlcikpCisgICAgICAgICAgICByZXR1cm47CisgICAgfQorICAg
IGlmIChzdHJva2VQYWludGluZ1Jlc291cmNlLT5hcHBseVJlc291cmNlKHRoaXMsIHN0eWxlLCBj
b250ZXh0LCBhcHBseU1vZGUpKSB7CisgICAgICAgIHN0cm9rZVNoYXBlKGNvbnRleHQpOworICAg
IH0gZWxzZSBpZiAoZmFsbGJhY2tDb2xvci5pc1ZhbGlkKCkpIHsKKyAgICAgICAgUmVuZGVyU1ZH
UmVzb3VyY2VTb2xpZENvbG9yKiBmYWxsYmFja1Jlc291cmNlID0gUmVuZGVyU1ZHUmVzb3VyY2U6
OnNoYXJlZFNvbGlkUGFpbnRpbmdSZXNvdXJjZSgpOworICAgICAgICBmYWxsYmFja1Jlc291cmNl
LT5zZXRDb2xvcihmYWxsYmFja0NvbG9yKTsKKyAgICAgICAgaWYgKGZhbGxiYWNrUmVzb3VyY2Ut
PmFwcGx5UmVzb3VyY2UodGhpcywgc3R5bGUsIGNvbnRleHQsIGFwcGx5TW9kZSkpCisgICAgICAg
ICAgICBzdHJva2VTaGFwZShjb250ZXh0KTsKKyAgICB9Cit9CisKK3ZvaWQgUmVuZGVyU1ZHU2hh
cGU6OnBhaW50KFBhaW50SW5mbyYgcGFpbnRJbmZvLCBjb25zdCBJbnRQb2ludCYpCit7CisgICAg
aWYgKHBhaW50SW5mby5jb250ZXh0LT5wYWludGluZ0Rpc2FibGVkKCkgfHwgc3R5bGUoKS0+dmlz
aWJpbGl0eSgpID09IEhJRERFTiB8fCBpc0VtcHR5KCkpCisgICAgICAgIHJldHVybjsKKyAgICBG
bG9hdFJlY3QgYm91bmRpbmdCb3ggPSByZXBhaW50UmVjdEluTG9jYWxDb29yZGluYXRlcygpOwor
ICAgIGlmICghU1ZHUmVuZGVyU3VwcG9ydDo6cGFpbnRJbmZvSW50ZXJzZWN0c1JlcGFpbnRSZWN0
KGJvdW5kaW5nQm94LCBtX2xvY2FsVHJhbnNmb3JtLCBwYWludEluZm8pKQorICAgICAgICByZXR1
cm47CisgICAgUGFpbnRJbmZvIGNoaWxkUGFpbnRJbmZvKHBhaW50SW5mbyk7CisgICAgYm9vbCBk
cmF3c091dGxpbmUgPSBzdHlsZSgpLT5vdXRsaW5lV2lkdGgoKSAmJiAoY2hpbGRQYWludEluZm8u
cGhhc2UgPT0gUGFpbnRQaGFzZU91dGxpbmUgfHwgY2hpbGRQYWludEluZm8ucGhhc2UgPT0gUGFp
bnRQaGFzZVNlbGZPdXRsaW5lKTsKKyAgICBpZiAoZHJhd3NPdXRsaW5lIHx8IGNoaWxkUGFpbnRJ
bmZvLnBoYXNlID09IFBhaW50UGhhc2VGb3JlZ3JvdW5kKSB7CisgICAgICAgIEdyYXBoaWNzQ29u
dGV4dFN0YXRlU2F2ZXIgc3RhdGVTYXZlcigqY2hpbGRQYWludEluZm8uY29udGV4dCk7CisgICAg
ICAgIGNoaWxkUGFpbnRJbmZvLmFwcGx5VHJhbnNmb3JtKG1fbG9jYWxUcmFuc2Zvcm0pOworCisg
ICAgICAgIGlmIChjaGlsZFBhaW50SW5mby5waGFzZSA9PSBQYWludFBoYXNlRm9yZWdyb3VuZCkg
eworICAgICAgICAgICAgUGFpbnRJbmZvIHNhdmVkSW5mbyhjaGlsZFBhaW50SW5mbyk7CisKKyAg
ICAgICAgICAgIGlmIChTVkdSZW5kZXJTdXBwb3J0OjpwcmVwYXJlVG9SZW5kZXJTVkdDb250ZW50
KHRoaXMsIGNoaWxkUGFpbnRJbmZvKSkgeworICAgICAgICAgICAgICAgIGNvbnN0IFNWR1JlbmRl
clN0eWxlKiBzdmdTdHlsZSA9IHN0eWxlKCktPnN2Z1N0eWxlKCk7CisgICAgICAgICAgICAgICAg
aWYgKHN2Z1N0eWxlLT5zaGFwZVJlbmRlcmluZygpID09IFNSX0NSSVNQRURHRVMpCisgICAgICAg
ICAgICAgICAgICAgIGNoaWxkUGFpbnRJbmZvLmNvbnRleHQtPnNldFNob3VsZEFudGlhbGlhcyhm
YWxzZSk7CisKKyAgICAgICAgICAgICAgICBmaWxsQW5kU3Ryb2tlUGF0aChjaGlsZFBhaW50SW5m
by5jb250ZXh0KTsKKworICAgICAgICAgICAgICAgIGlmIChzdmdTdHlsZS0+aGFzTWFya2Vycygp
KQorICAgICAgICAgICAgICAgICAgICBtX21hcmtlckxheW91dEluZm8uZHJhd01hcmtlcnMoY2hp
bGRQYWludEluZm8pOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBTVkdSZW5kZXJTdXBw
b3J0OjpmaW5pc2hSZW5kZXJTVkdDb250ZW50KHRoaXMsIGNoaWxkUGFpbnRJbmZvLCBzYXZlZElu
Zm8uY29udGV4dCk7CisgICAgICAgIH0KKworICAgICAgICBpZiAoZHJhd3NPdXRsaW5lKQorICAg
ICAgICAgICAgcGFpbnRPdXRsaW5lKGNoaWxkUGFpbnRJbmZvLmNvbnRleHQsIEludFJlY3QoYm91
bmRpbmdCb3gpKTsKKyAgICB9Cit9CisKKy8vIFRoaXMgbWV0aG9kIGlzIGNhbGxlZCBmcm9tIGlu
c2lkZSBwYWludE91dGxpbmUoKSBzaW5jZSB3ZSBjYWxsIHBhaW50T3V0bGluZSgpCisvLyB3aGls
ZSB0cmFuc2Zvcm1lZCB0byBvdXIgY29vcmQgc3lzdGVtLCByZXR1cm4gbG9jYWwgY29vcmRzCit2
b2lkIFJlbmRlclNWR1NoYXBlOjphZGRGb2N1c1JpbmdSZWN0cyhWZWN0b3I8TGF5b3V0UmVjdD4m
IHJlY3RzLCBjb25zdCBMYXlvdXRQb2ludCYpCit7CisgICAgTGF5b3V0UmVjdCByZWN0ID0gZW5j
bG9zaW5nTGF5b3V0UmVjdChyZXBhaW50UmVjdEluTG9jYWxDb29yZGluYXRlcygpKTsKKyAgICBp
ZiAoIXJlY3QuaXNFbXB0eSgpKQorICAgICAgICByZWN0cy5hcHBlbmQocmVjdCk7Cit9CisKK2Jv
b2wgUmVuZGVyU1ZHU2hhcGU6Om5vZGVBdEZsb2F0UG9pbnQoY29uc3QgSGl0VGVzdFJlcXVlc3Qm
IHJlcXVlc3QsIEhpdFRlc3RSZXN1bHQmIHJlc3VsdCwgY29uc3QgRmxvYXRQb2ludCYgcG9pbnRJ
blBhcmVudCwgSGl0VGVzdEFjdGlvbiBoaXRUZXN0QWN0aW9uKQoreworICAgIC8vIFdlIG9ubHkg
ZHJhdyBpbiB0aGUgZm9yZ3JvdW5kIHBoYXNlLCBzbyB3ZSBvbmx5IGhpdC10ZXN0IHRoZW4uCisg
ICAgaWYgKGhpdFRlc3RBY3Rpb24gIT0gSGl0VGVzdEZvcmVncm91bmQpCisgICAgICAgIHJldHVy
biBmYWxzZTsKKworICAgIEZsb2F0UG9pbnQgbG9jYWxQb2ludCA9IG1fbG9jYWxUcmFuc2Zvcm0u
aW52ZXJzZSgpLm1hcFBvaW50KHBvaW50SW5QYXJlbnQpOworCisgICAgaWYgKCFTVkdSZW5kZXJT
dXBwb3J0Ojpwb2ludEluQ2xpcHBpbmdBcmVhKHRoaXMsIGxvY2FsUG9pbnQpKQorICAgICAgICBy
ZXR1cm4gZmFsc2U7CisKKyAgICBQb2ludGVyRXZlbnRzSGl0UnVsZXMgaGl0UnVsZXMoUG9pbnRl
ckV2ZW50c0hpdFJ1bGVzOjpTVkdfUEFUSF9ISVRURVNUSU5HLCByZXF1ZXN0LCBzdHlsZSgpLT5w
b2ludGVyRXZlbnRzKCkpOworICAgIGJvb2wgaXNWaXNpYmxlID0gKHN0eWxlKCktPnZpc2liaWxp
dHkoKSA9PSBWSVNJQkxFKTsKKyAgICBpZiAoaXNWaXNpYmxlIHx8ICFoaXRSdWxlcy5yZXF1aXJl
VmlzaWJsZSkgeworICAgICAgICBjb25zdCBTVkdSZW5kZXJTdHlsZSogc3ZnU3R5bGUgPSBzdHls
ZSgpLT5zdmdTdHlsZSgpOworICAgICAgICBXaW5kUnVsZSBmaWxsUnVsZSA9IHN2Z1N0eWxlLT5m
aWxsUnVsZSgpOworICAgICAgICBpZiAocmVxdWVzdC5zdmdDbGlwQ29udGVudCgpKQorICAgICAg
ICAgICAgZmlsbFJ1bGUgPSBzdmdTdHlsZS0+Y2xpcFJ1bGUoKTsKKyAgICAgICAgaWYgKChoaXRS
dWxlcy5jYW5IaXRTdHJva2UgJiYgKHN2Z1N0eWxlLT5oYXNTdHJva2UoKSB8fCAhaGl0UnVsZXMu
cmVxdWlyZVN0cm9rZSkgJiYgc3Ryb2tlQ29udGFpbnMobG9jYWxQb2ludCwgaGl0UnVsZXMucmVx
dWlyZVN0cm9rZSkpCisgICAgICAgICAgICB8fCAoaGl0UnVsZXMuY2FuSGl0RmlsbCAmJiAoc3Zn
U3R5bGUtPmhhc0ZpbGwoKSB8fCAhaGl0UnVsZXMucmVxdWlyZUZpbGwpICYmIGZpbGxDb250YWlu
cyhsb2NhbFBvaW50LCBoaXRSdWxlcy5yZXF1aXJlRmlsbCwgZmlsbFJ1bGUpKSkgeworICAgICAg
ICAgICAgdXBkYXRlSGl0VGVzdFJlc3VsdChyZXN1bHQsIHJvdW5kZWRMYXlvdXRQb2ludChsb2Nh
bFBvaW50KSk7CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQorICAgIH0KKyAg
ICByZXR1cm4gZmFsc2U7Cit9CisKK0Zsb2F0UmVjdCBSZW5kZXJTVkdTaGFwZTo6Y2FsY3VsYXRl
TWFya2VyQm91bmRzSWZOZWVkZWQoKQoreworICAgIFNWR0VsZW1lbnQqIHN2Z0VsZW1lbnQgPSBz
dGF0aWNfY2FzdDxTVkdFbGVtZW50Kj4obm9kZSgpKTsKKyAgICBBU1NFUlQoc3ZnRWxlbWVudCAm
JiBzdmdFbGVtZW50LT5kb2N1bWVudCgpKTsKKyAgICBpZiAoIXN2Z0VsZW1lbnQtPmlzU3R5bGVk
KCkpCisgICAgICAgIHJldHVybiBGbG9hdFJlY3QoKTsKKworICAgIFNWR1N0eWxlZEVsZW1lbnQq
IHN0eWxlZEVsZW1lbnQgPSBzdGF0aWNfY2FzdDxTVkdTdHlsZWRFbGVtZW50Kj4oc3ZnRWxlbWVu
dCk7CisgICAgaWYgKCFzdHlsZWRFbGVtZW50LT5zdXBwb3J0c01hcmtlcnMoKSkKKyAgICAgICAg
cmV0dXJuIEZsb2F0UmVjdCgpOworCisgICAgY29uc3QgU1ZHUmVuZGVyU3R5bGUqIHN2Z1N0eWxl
ID0gc3R5bGUoKS0+c3ZnU3R5bGUoKTsKKyAgICBBU1NFUlQoc3ZnU3R5bGUtPmhhc01hcmtlcnMo
KSk7CisKKyAgICBTVkdSZXNvdXJjZXMqIHJlc291cmNlcyA9IFNWR1Jlc291cmNlc0NhY2hlOjpj
YWNoZWRSZXNvdXJjZXNGb3JSZW5kZXJPYmplY3QodGhpcyk7CisgICAgaWYgKCFyZXNvdXJjZXMp
CisgICAgICAgIHJldHVybiBGbG9hdFJlY3QoKTsKKworICAgIFJlbmRlclNWR1Jlc291cmNlTWFy
a2VyKiBtYXJrZXJTdGFydCA9IHJlc291cmNlcy0+bWFya2VyU3RhcnQoKTsKKyAgICBSZW5kZXJT
VkdSZXNvdXJjZU1hcmtlciogbWFya2VyTWlkID0gcmVzb3VyY2VzLT5tYXJrZXJNaWQoKTsKKyAg
ICBSZW5kZXJTVkdSZXNvdXJjZU1hcmtlciogbWFya2VyRW5kID0gcmVzb3VyY2VzLT5tYXJrZXJF
bmQoKTsKKyAgICBpZiAoIW1hcmtlclN0YXJ0ICYmICFtYXJrZXJNaWQgJiYgIW1hcmtlckVuZCkK
KyAgICAgICAgcmV0dXJuIEZsb2F0UmVjdCgpOworCisgICAgcmV0dXJuIG1fbWFya2VyTGF5b3V0
SW5mby5jYWxjdWxhdGVCb3VuZGFyaWVzKG1hcmtlclN0YXJ0LCBtYXJrZXJNaWQsIG1hcmtlckVu
ZCwgc3ZnU3R5bGUtPnN0cm9rZVdpZHRoKCkudmFsdWUoc3ZnRWxlbWVudCksIHBhdGgoKSk7Cit9
CisKK3ZvaWQgUmVuZGVyU1ZHU2hhcGU6OnVwZGF0ZUNhY2hlZEJvdW5kYXJpZXMoKQoreworICAg
IGlmIChpc0VtcHR5KCkpIHsKKyAgICAgICAgbV9maWxsQm91bmRpbmdCb3ggPSBGbG9hdFJlY3Qo
KTsKKyAgICAgICAgbV9zdHJva2VBbmRNYXJrZXJCb3VuZGluZ0JveCA9IEZsb2F0UmVjdCgpOwor
ICAgICAgICBtX3JlcGFpbnRCb3VuZGluZ0JveCA9IEZsb2F0UmVjdCgpOworICAgICAgICByZXR1
cm47CisgICAgfQorCisgICAgLy8gQ2FjaGUgX3VuY2xpcHBlZF8gZmlsbCBib3VuZGluZyBib3gs
IHVzZWQgZm9yIGNhbGN1bGF0aW9ucyBpbiByZXNvdXJjZXMKKyAgICBtX2ZpbGxCb3VuZGluZ0Jv
eCA9IHNoYXBlQm91bmRpbmdSZWN0KCk7CisKKyAgICAvLyBTcGVjKDExLjQpOiBBbnkgemVybyBs
ZW5ndGggc3VicGF0aCBzaGFsbCBub3QgYmUgc3Ryb2tlZCBpZiB0aGUg4oCYc3Ryb2tlLWxpbmVj
YXDigJkgcHJvcGVydHkgaGFzIGEgdmFsdWUgb2YgYnV0dAorICAgIC8vIGJ1dCBzaGFsbCBiZSBz
dHJva2VkIGlmIHRoZSDigJhzdHJva2UtbGluZWNhcOKAmSBwcm9wZXJ0eSBoYXMgYSB2YWx1ZSBv
ZiByb3VuZCBvciBzcXVhcmUKKyAgICBpZiAoc2hvdWxkU3Ryb2tlWmVyb0xlbmd0aFN1YnBhdGgo
KSkgeworICAgICAgICBtX3N0cm9rZUFuZE1hcmtlckJvdW5kaW5nQm94ID0gemVyb0xlbmd0aFN1
YnBhdGhSZWN0KCk7CisgICAgICAgIC8vIENhY2hlIHNtYWxsZXN0IHBvc3NpYmxlIHJlcGFpbnQg
cmVjdGFuZ2xlCisgICAgICAgIG1fcmVwYWludEJvdW5kaW5nQm94ID0gbV9zdHJva2VBbmRNYXJr
ZXJCb3VuZGluZ0JveDsKKyAgICAgICAgU1ZHUmVuZGVyU3VwcG9ydDo6aW50ZXJzZWN0UmVwYWlu
dFJlY3RXaXRoUmVzb3VyY2VzKHRoaXMsIG1fcmVwYWludEJvdW5kaW5nQm94KTsKKyAgICAgICAg
cmV0dXJuOworICAgIH0KKworICAgIC8vIENhY2hlIF91bmNsaXBwZWRfIHN0cm9rZSBib3VuZGlu
ZyBib3gsIHVzZWQgZm9yIGNhbGN1bGF0aW9ucyBpbiByZXNvdXJjZXMgKGluY2x1ZGVzIG1hcmtl
ciBib3VuZGFyaWVzKQorICAgIG1fc3Ryb2tlQW5kTWFya2VyQm91bmRpbmdCb3ggPSBtX2ZpbGxC
b3VuZGluZ0JveDsKKworICAgIGNvbnN0IFNWR1JlbmRlclN0eWxlKiBzdmdTdHlsZSA9IHN0eWxl
KCktPnN2Z1N0eWxlKCk7CisgICAgaWYgKHN2Z1N0eWxlLT5oYXNTdHJva2UoKSkKKyAgICAgICAg
bV9zdHJva2VBbmRNYXJrZXJCb3VuZGluZ0JveC51bml0ZShzdHJva2VCb3VuZGluZ1NoYXBlKCkp
OworCisgICAgaWYgKHRoaXMtPmlzU1ZHUGF0aCgpKSB7CisgICAgICAgIGlmIChzdmdTdHlsZS0+
aGFzTWFya2VycygpKSB7CisgICAgICAgICAgICBGbG9hdFJlY3QgbWFya2VyQm91bmRzID0gY2Fs
Y3VsYXRlTWFya2VyQm91bmRzSWZOZWVkZWQoKTsKKyAgICAgICAgICAgIGlmICghbWFya2VyQm91
bmRzLmlzRW1wdHkoKSkKKyAgICAgICAgICAgICAgICBtX3N0cm9rZUFuZE1hcmtlckJvdW5kaW5n
Qm94LnVuaXRlKG1hcmtlckJvdW5kcyk7CisgICAgICAgIH0KKyAgICB9CisgICAgLy8gQ2FjaGUg
c21hbGxlc3QgcG9zc2libGUgcmVwYWludCByZWN0YW5nbGUKKyAgICBtX3JlcGFpbnRCb3VuZGlu
Z0JveCA9IG1fc3Ryb2tlQW5kTWFya2VyQm91bmRpbmdCb3g7CisgICAgU1ZHUmVuZGVyU3VwcG9y
dDo6aW50ZXJzZWN0UmVwYWludFJlY3RXaXRoUmVzb3VyY2VzKHRoaXMsIG1fcmVwYWludEJvdW5k
aW5nQm94KTsKK30KKworfQorCisjZW5kaWYgLy8gRU5BQkxFKFNWRykKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHU2hhcGUuaCBiL1NvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHU2hhcGUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwMDAwMDAwLi41MmFlMjczCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdTaGFwZS5oCkBAIC0wLDAgKzEsMTY0IEBACisvKgorICog
Q29weXJpZ2h0IChDKSAyMDA0LCAyMDA1LCAyMDA3IE5pa29sYXMgWmltbWVybWFubiA8emltbWVy
bWFubkBrZGUub3JnPgorICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1IFJvYiBCdWlzIDxidWlz
QGtkZS5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDUgRXJpYyBTZWlkZWwgPGVyaWNAd2Via2l0
Lm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAwNiBBcHBsZSBDb21wdXRlciwgSW5jCisgKiBDb3B5
cmlnaHQgKEMpIDIwMDkgR29vZ2xlLCBJbmMuCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUg
c29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVu
ZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vu
c2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgor
ICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRl
ciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9w
ZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3
aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBv
ciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJy
YXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ug
c2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1
YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENP
UFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRh
dGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3Rvbiwg
TUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpZm5kZWYgUmVuZGVyU1ZHU2hhcGVfaAorI2Rl
ZmluZSBSZW5kZXJTVkdTaGFwZV9oCisKKyNpZiBFTkFCTEUoU1ZHKQorI2luY2x1ZGUgIkFmZmlu
ZVRyYW5zZm9ybS5oIgorI2luY2x1ZGUgIkZsb2F0UmVjdC5oIgorI2luY2x1ZGUgIlJlbmRlclNW
R01vZGVsT2JqZWN0LmgiCisjaW5jbHVkZSAiU1ZHTWFya2VyTGF5b3V0SW5mby5oIgorI2luY2x1
ZGUgIlN0cm9rZVN0eWxlQXBwbGllci5oIgorI2luY2x1ZGUgPHd0Zi9Pd25QdHIuaD4KKworbmFt
ZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBGbG9hdFBvaW50OworY2xhc3MgR3JhcGhpY3NDb250
ZXh0U3RhdGVTYXZlcjsKK2NsYXNzIFJlbmRlclNWR0NvbnRhaW5lcjsKK2NsYXNzIFJlbmRlclNW
R1BhdGg7CitjbGFzcyBTVkdTdHlsZWRUcmFuc2Zvcm1hYmxlRWxlbWVudDsKKworZW51bSBQb2lu
dExvY2F0aW9uIHsKKyAgICBJbnNpZGVTaGFwZSwKKyAgICBPdXRzaWRlU2hhcGUsCisgICAgT25T
dHJva2UKK307CisKK2NsYXNzIEJvdW5kaW5nUmVjdFN0cm9rZVN0eWxlQXBwbGllciA6IHB1Ymxp
YyBTdHJva2VTdHlsZUFwcGxpZXIgeworcHVibGljOgorICAgIEJvdW5kaW5nUmVjdFN0cm9rZVN0
eWxlQXBwbGllcihjb25zdCBSZW5kZXJPYmplY3QqIG9iamVjdCwgUmVuZGVyU3R5bGUqIHN0eWxl
KQorICAgICAgICA6IG1fb2JqZWN0KG9iamVjdCkKKyAgICAgICAgLCBtX3N0eWxlKHN0eWxlKQor
ICAgIHsKKyAgICAgICAgQVNTRVJUKHN0eWxlKTsKKyAgICAgICAgQVNTRVJUKG9iamVjdCk7Cisg
ICAgfQorCisgICAgdm9pZCBzdHJva2VTdHlsZShHcmFwaGljc0NvbnRleHQqIGdjKQorICAgIHsK
KyAgICAgICAgU1ZHUmVuZGVyU3VwcG9ydDo6YXBwbHlTdHJva2VTdHlsZVRvQ29udGV4dChnYywg
bV9zdHlsZSwgbV9vYmplY3QpOworICAgIH0KKworcHJpdmF0ZToKKyAgICBjb25zdCBSZW5kZXJP
YmplY3QqIG1fb2JqZWN0OworICAgIFJlbmRlclN0eWxlKiBtX3N0eWxlOworfTsKKworY2xhc3Mg
UmVuZGVyU1ZHU2hhcGUgOiBwdWJsaWMgUmVuZGVyU1ZHTW9kZWxPYmplY3QgeworcHVibGljOgor
ICAgIGV4cGxpY2l0IFJlbmRlclNWR1NoYXBlKFNWR1N0eWxlZFRyYW5zZm9ybWFibGVFbGVtZW50
Kik7CisgICAgdmlydHVhbCB+UmVuZGVyU1ZHU2hhcGUoKTsKKworICAgIHZvaWQgc2V0TmVlZHNQ
YXRoVXBkYXRlKCkgeyBtX25lZWRzU2hhcGVVcGRhdGUgPSB0cnVlOyB9CisgICAgdmlydHVhbCB2
b2lkIHNldE5lZWRzQm91bmRhcmllc1VwZGF0ZSgpIHsgbV9uZWVkc0JvdW5kYXJpZXNVcGRhdGUg
PSB0cnVlOyB9CisgICAgdmlydHVhbCB2b2lkIHNldE5lZWRzVHJhbnNmb3JtVXBkYXRlKCkgeyBt
X25lZWRzVHJhbnNmb3JtVXBkYXRlID0gdHJ1ZTsgfQorCitwcml2YXRlOgorICAgIC8vIEhpdC1k
ZXRlY3Rpb24gc2VwZXJhdGVkIGZvciB0aGUgZmlsbCBhbmQgdGhlIHN0cm9rZQorICAgIGJvb2wg
ZmlsbENvbnRhaW5zKGNvbnN0IEZsb2F0UG9pbnQmLCBib29sIHJlcXVpcmVzRmlsbCA9IHRydWUs
IFdpbmRSdWxlIGZpbGxSdWxlID0gUlVMRV9OT05aRVJPKTsKKyAgICBib29sIHN0cm9rZUNvbnRh
aW5zKGNvbnN0IEZsb2F0UG9pbnQmLCBib29sIHJlcXVpcmVzU3Ryb2tlID0gdHJ1ZSk7CisKKyAg
ICB2aXJ0dWFsIEZsb2F0UmVjdCBvYmplY3RCb3VuZGluZ0JveCgpIGNvbnN0IHsgcmV0dXJuIG1f
ZmlsbEJvdW5kaW5nQm94OyB9CisgICAgdmlydHVhbCBGbG9hdFJlY3Qgc3Ryb2tlQm91bmRpbmdC
b3goKSBjb25zdCB7IHJldHVybiBtX3N0cm9rZUFuZE1hcmtlckJvdW5kaW5nQm94OyB9CisgICAg
dmlydHVhbCBGbG9hdFJlY3QgcmVwYWludFJlY3RJbkxvY2FsQ29vcmRpbmF0ZXMoKSBjb25zdCB7
IHJldHVybiBtX3JlcGFpbnRCb3VuZGluZ0JveDsgfQorICAgIHZpcnR1YWwgY29uc3QgQWZmaW5l
VHJhbnNmb3JtJiBsb2NhbFRvUGFyZW50VHJhbnNmb3JtKCkgY29uc3QgeyByZXR1cm4gbV9sb2Nh
bFRyYW5zZm9ybTsgfQorCisgICAgdmlydHVhbCBib29sIGlzU1ZHU2hhcGUoKSBjb25zdCB7IHJl
dHVybiB0cnVlOyB9CisgICAgdmlydHVhbCBjb25zdCBjaGFyKiByZW5kZXJOYW1lKCkgY29uc3Qg
eyByZXR1cm4gIlJlbmRlclNWR1NoYXBlIjsgfQorCisgICAgdmlydHVhbCB2b2lkIGxheW91dCgp
OworICAgIHZpcnR1YWwgdm9pZCBwYWludChQYWludEluZm8mLCBjb25zdCBMYXlvdXRQb2ludCYp
OworICAgIHZpcnR1YWwgdm9pZCBhZGRGb2N1c1JpbmdSZWN0cyhWZWN0b3I8TGF5b3V0UmVjdD4m
LCBjb25zdCBMYXlvdXRQb2ludCYpOworCisgICAgdmlydHVhbCBib29sIG5vZGVBdEZsb2F0UG9p
bnQoY29uc3QgSGl0VGVzdFJlcXVlc3QmLCBIaXRUZXN0UmVzdWx0JiwgY29uc3QgRmxvYXRQb2lu
dCYgcG9pbnRJblBhcmVudCwgSGl0VGVzdEFjdGlvbik7CisKKyAgICBGbG9hdFJlY3QgY2FsY3Vs
YXRlTWFya2VyQm91bmRzSWZOZWVkZWQoKTsKKyAgICB2b2lkIHVwZGF0ZUNhY2hlZEJvdW5kYXJp
ZXMoKTsKKworICAgIHZvaWQgc2V0dXBTcXVhcmVDYXBQYXRoKFBhdGgqJiB1c2VQYXRoLCBpbnQm
IGFwcGx5TW9kZSk7CisgICAgYm9vbCBzZXR1cE5vblNjYWxpbmdTdHJva2VQYXRoKFBhdGgqJiB1
c2VQYXRoLCBHcmFwaGljc0NvbnRleHRTdGF0ZVNhdmVyJik7CisgICAgYm9vbCBzaG91bGRTdHJv
a2VaZXJvTGVuZ3RoU3VicGF0aCgpIGNvbnN0OworICAgIEZsb2F0UmVjdCB6ZXJvTGVuZ3RoU3Vi
cGF0aFJlY3QoKSBjb25zdDsKKworcHJvdGVjdGVkOgorICAgIHZpcnR1YWwgdm9pZCBjcmVhdGVT
aGFwZSgpOworICAgIHZpcnR1YWwgYm9vbCBpc0VtcHR5KCk7CisgICAgdmlydHVhbCB2b2lkIGNs
ZWFyU2hhcGUoKTsKKyAgICB2aXJ0dWFsIHZvaWQgZmlsbFNoYXBlKEdyYXBoaWNzQ29udGV4dCop
OworICAgIHZpcnR1YWwgRmxvYXRSZWN0IHNoYXBlQm91bmRpbmdSZWN0KCk7CisgICAgdmlydHVh
bCBGbG9hdFJlY3Qgc3Ryb2tlQm91bmRpbmdTaGFwZSgpOworICAgIHZpcnR1YWwgdm9pZCBzdHJv
a2VTaGFwZShHcmFwaGljc0NvbnRleHQqKTsKKyAgICB2aXJ0dWFsIGJvb2wgc3Ryb2tlQ29udGFp
bnNTbG93Q2FzZShjb25zdCBGbG9hdFBvaW50Jik7CisgICAgdmlydHVhbCBib29sIGZpbGxDb250
YWluc1Nsb3dDYXNlKGNvbnN0IEZsb2F0UG9pbnQmLCBjb25zdCBXaW5kUnVsZSYpOworCisgICAg
UGF0aCYgcGF0aCgpCisgICAgeworICAgICAgICBBU1NFUlQobV9wYXRoLmdldCgpKTsKKyAgICAg
ICAgcmV0dXJuICptX3BhdGg7CisgICAgfQorCisgICAgUGF0aCogcGF0aFB0cigpCisgICAgewor
ICAgICAgICBBU1NFUlQobV9wYXRoLmdldCgpKTsKKyAgICAgICAgcmV0dXJuIG1fcGF0aC5nZXQo
KTsKKyAgICB9OworCisgICAgYm9vbCBoYXNQYXRoKCkgeyByZXR1cm4gbV9wYXRoLmdldCgpOyB9
CisKK3ByaXZhdGU6CisgICAgdmlydHVhbCBBZmZpbmVUcmFuc2Zvcm0gbG9jYWxUcmFuc2Zvcm0o
KSBjb25zdCB7IHJldHVybiBtX2xvY2FsVHJhbnNmb3JtOyB9CisgICAgdm9pZCBmaWxsQW5kU3Ry
b2tlUGF0aChHcmFwaGljc0NvbnRleHQqKTsKKworICAgIGJvb2wgbV9uZWVkc0JvdW5kYXJpZXNV
cGRhdGUgOiAxOworICAgIGJvb2wgbV9uZWVkc1NoYXBlVXBkYXRlIDogMTsKKyAgICBib29sIG1f
bmVlZHNUcmFuc2Zvcm1VcGRhdGUgOiAxOworCisgICAgRmxvYXRSZWN0IG1fZmlsbEJvdW5kaW5n
Qm94OworICAgIEZsb2F0UmVjdCBtX3N0cm9rZUFuZE1hcmtlckJvdW5kaW5nQm94OworICAgIEZs
b2F0UmVjdCBtX3JlcGFpbnRCb3VuZGluZ0JveDsKKyAgICBTVkdNYXJrZXJMYXlvdXRJbmZvIG1f
bWFya2VyTGF5b3V0SW5mbzsKKyAgICBBZmZpbmVUcmFuc2Zvcm0gbV9sb2NhbFRyYW5zZm9ybTsK
KyAgICBPd25QdHI8UGF0aD4gbV9wYXRoOworfTsKKworaW5saW5lIFJlbmRlclNWR1NoYXBlKiB0
b1JlbmRlclNWR1NoYXBlKFJlbmRlck9iamVjdCogb2JqZWN0KQoreworICAgIEFTU0VSVCghb2Jq
ZWN0IHx8IG9iamVjdC0+aXNTVkdTaGFwZSgpKTsKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8UmVu
ZGVyU1ZHU2hhcGUqPihvYmplY3QpOworfQorCitpbmxpbmUgY29uc3QgUmVuZGVyU1ZHU2hhcGUq
IHRvUmVuZGVyU1ZHU2hhcGUoY29uc3QgUmVuZGVyT2JqZWN0KiBvYmplY3QpCit7CisgICAgQVNT
RVJUKCFvYmplY3QgfHwgb2JqZWN0LT5pc1NWR1NoYXBlKCkpOworICAgIHJldHVybiBzdGF0aWNf
Y2FzdDxjb25zdCBSZW5kZXJTVkdTaGFwZSo+KG9iamVjdCk7Cit9CisKKy8vIFRoaXMgd2lsbCBj
YXRjaCBhbnlvbmUgZG9pbmcgYW4gdW5uZWNlc3NhcnkgY2FzdC4KK3ZvaWQgdG9SZW5kZXJTVkdT
aGFwZShjb25zdCBSZW5kZXJTVkdTaGFwZSopOworCit9CisKKyNlbmRpZiAvLyBFTkFCTEUoU1ZH
KQorI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR1Jl
bmRlclN1cHBvcnQuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdSZW5kZXJT
dXBwb3J0LmNwcAppbmRleCA2OGUxOGVlLi5jMmI1MWQzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvc3ZnL1NWR1JlbmRlclN1cHBvcnQuY3BwCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9zdmcvU1ZHUmVuZGVyU3VwcG9ydC5jcHAKQEAgLTIyNiw4ICsyMjYsOCBA
QCB2b2lkIFNWR1JlbmRlclN1cHBvcnQ6OmxheW91dENoaWxkcmVuKFJlbmRlck9iamVjdCogc3Rh
cnQsIGJvb2wgc2VsZk5lZWRzTGF5b3V0KQogICAgICAgICAgICAgaWYgKFNWR0VsZW1lbnQqIGVs
ZW1lbnQgPSBjaGlsZC0+bm9kZSgpLT5pc1NWR0VsZW1lbnQoKSA/IHN0YXRpY19jYXN0PFNWR0Vs
ZW1lbnQqPihjaGlsZC0+bm9kZSgpKSA6IDApIHsKICAgICAgICAgICAgICAgICBpZiAoZWxlbWVu
dC0+aXNTdHlsZWQoKSAmJiBzdGF0aWNfY2FzdDxTVkdTdHlsZWRFbGVtZW50Kj4oZWxlbWVudCkt
Pmhhc1JlbGF0aXZlTGVuZ3RocygpKSB7CiAgICAgICAgICAgICAgICAgICAgIC8vIFdoZW4gdGhl
IGxheW91dCBzaXplIGNoYW5nZWQgYW5kIHdoZW4gdXNpbmcgcmVsYXRpdmUgdmFsdWVzIHRlbGwg
dGhlIFJlbmRlclNWR1BhdGggdG8gdXBkYXRlIGl0cyBQYXRoIG9iamVjdAotICAgICAgICAgICAg
ICAgICAgICBpZiAoY2hpbGQtPmlzU1ZHUGF0aCgpKQotICAgICAgICAgICAgICAgICAgICAgICAg
dG9SZW5kZXJTVkdQYXRoKGNoaWxkKS0+c2V0TmVlZHNQYXRoVXBkYXRlKCk7CisgICAgICAgICAg
ICAgICAgICAgIGlmIChjaGlsZC0+aXNTVkdTaGFwZSgpKQorICAgICAgICAgICAgICAgICAgICAg
ICAgdG9SZW5kZXJTVkdTaGFwZShjaGlsZCktPnNldE5lZWRzUGF0aFVwZGF0ZSgpOwogCiAgICAg
ICAgICAgICAgICAgICAgIG5lZWRzTGF5b3V0ID0gdHJ1ZTsKICAgICAgICAgICAgICAgICB9CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR1JlbmRlclRyZWVBc1Rl
eHQuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdSZW5kZXJUcmVlQXNUZXh0
LmNwcAppbmRleCBhMTYyOTY5Li4zMTlkZWEwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvc3ZnL1NWR1JlbmRlclRyZWVBc1RleHQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9zdmcvU1ZHUmVuZGVyVHJlZUFzVGV4dC5jcHAKQEAgLTI4OSw3ICsyODksNyBA
QCBzdGF0aWMgdm9pZCB3cml0ZVN0eWxlKFRleHRTdHJlYW0mIHRzLCBjb25zdCBSZW5kZXJPYmpl
Y3QmIG9iamVjdCkKICAgICAgICAgd3JpdGVOYW1lVmFsdWVQYWlyKHRzLCAidHJhbnNmb3JtIiwg
b2JqZWN0LmxvY2FsVHJhbnNmb3JtKCkpOwogICAgIHdyaXRlSWZOb3REZWZhdWx0KHRzLCAiaW1h
Z2UgcmVuZGVyaW5nIiwgc3R5bGUtPmltYWdlUmVuZGVyaW5nKCksIFJlbmRlclN0eWxlOjppbml0
aWFsSW1hZ2VSZW5kZXJpbmcoKSk7CiAgICAgd3JpdGVJZk5vdERlZmF1bHQodHMsICJvcGFjaXR5
Iiwgc3R5bGUtPm9wYWNpdHkoKSwgUmVuZGVyU3R5bGU6OmluaXRpYWxPcGFjaXR5KCkpOwotICAg
IGlmIChvYmplY3QuaXNTVkdQYXRoKCkpIHsKKyAgICBpZiAob2JqZWN0LmlzU1ZHU2hhcGUoKSkg
ewogICAgICAgICBjb25zdCBSZW5kZXJTVkdQYXRoJiBwYXRoID0gc3RhdGljX2Nhc3Q8Y29uc3Qg
UmVuZGVyU1ZHUGF0aCY+KG9iamVjdCk7CiAgICAgICAgIEFTU0VSVChwYXRoLm5vZGUoKSk7CiAg
ICAgICAgIEFTU0VSVChwYXRoLm5vZGUoKS0+aXNTVkdFbGVtZW50KCkpOwpAQCAtMzQ2LDcgKzM0
Niw3IEBAIHN0YXRpYyBUZXh0U3RyZWFtJiB3cml0ZVBvc2l0aW9uQW5kU3R5bGUoVGV4dFN0cmVh
bSYgdHMsIGNvbnN0IFJlbmRlck9iamVjdCYgb2JqCiAgICAgcmV0dXJuIHRzOwogfQogCi1zdGF0
aWMgVGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiB0cywgY29uc3QgUmVuZGVyU1ZH
UGF0aCYgcGF0aCkKK3N0YXRpYyBUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJlYW0mIHRz
LCBjb25zdCBSZW5kZXJTVkdTaGFwZSYgcGF0aCkKIHsKICAgICB3cml0ZVBvc2l0aW9uQW5kU3R5
bGUodHMsIHBhdGgpOwogCkBAIC02NTMsNyArNjUzLDcgQEAgdm9pZCB3cml0ZVNWR0ltYWdlKFRl
eHRTdHJlYW0mIHRzLCBjb25zdCBSZW5kZXJTVkdJbWFnZSYgaW1hZ2UsIGludCBpbmRlbnQpCiAg
ICAgd3JpdGVSZXNvdXJjZXModHMsIGltYWdlLCBpbmRlbnQpOwogfQogCi12b2lkIHdyaXRlKFRl
eHRTdHJlYW0mIHRzLCBjb25zdCBSZW5kZXJTVkdQYXRoJiBwYXRoLCBpbnQgaW5kZW50KQordm9p
ZCB3cml0ZShUZXh0U3RyZWFtJiB0cywgY29uc3QgUmVuZGVyU1ZHU2hhcGUmIHBhdGgsIGludCBp
bmRlbnQpCiB7CiAgICAgd3JpdGVTdGFuZGFyZFByZWZpeCh0cywgcGF0aCwgaW5kZW50KTsKICAg
ICB0cyA8PCBwYXRoIDw8ICJcbiI7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvc3ZnL1NWR1JlbmRlclRyZWVBc1RleHQuaCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9z
dmcvU1ZHUmVuZGVyVHJlZUFzVGV4dC5oCmluZGV4IGNlMDdhNWMuLjM1OThjODMgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHUmVuZGVyVHJlZUFzVGV4dC5oCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHUmVuZGVyVHJlZUFzVGV4dC5oCkBA
IC00MSwxNCArNDEsMTQgQEAgY2xhc3MgUmVuZGVySW1hZ2U7CiBjbGFzcyBSZW5kZXJPYmplY3Q7
CiBjbGFzcyBSZW5kZXJTVkdHcmFkaWVudFN0b3A7CiBjbGFzcyBSZW5kZXJTVkdJbWFnZTsKLWNs
YXNzIFJlbmRlclNWR1BhdGg7CitjbGFzcyBSZW5kZXJTVkdTaGFwZTsKIGNsYXNzIFJlbmRlclNW
R1Jvb3Q7CiBjbGFzcyBSZW5kZXJUZXh0OwogY2xhc3MgQWZmaW5lVHJhbnNmb3JtOwogY2xhc3Mg
U1ZHVW5pdFR5cGVzOwogCiAvLyBmdW5jdGlvbnMgdXNlZCBieSB0aGUgbWFpbiBSZW5kZXJUcmVl
QXNUZXh0IGNvZGUKLXZvaWQgd3JpdGUoVGV4dFN0cmVhbSYsIGNvbnN0IFJlbmRlclNWR1BhdGgm
LCBpbnQgaW5kZW50KTsKK3ZvaWQgd3JpdGUoVGV4dFN0cmVhbSYsIGNvbnN0IFJlbmRlclNWR1No
YXBlJiwgaW50IGluZGVudCk7CiB2b2lkIHdyaXRlKFRleHRTdHJlYW0mLCBjb25zdCBSZW5kZXJT
VkdSb290JiwgaW50IGluZGVudCk7CiB2b2lkIHdyaXRlU1ZHR3JhZGllbnRTdG9wKFRleHRTdHJl
YW0mLCBjb25zdCBSZW5kZXJTVkdHcmFkaWVudFN0b3AmLCBpbnQgaW5kZW50KTsKIHZvaWQgd3Jp
dGVTVkdSZXNvdXJjZUNvbnRhaW5lcihUZXh0U3RyZWFtJiwgY29uc3QgUmVuZGVyT2JqZWN0Jiwg
aW50IGluZGVudCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHUGF0aEVsZW1l
bnQuY3BwIGIvU291cmNlL1dlYkNvcmUvc3ZnL1NWR1BhdGhFbGVtZW50LmNwcAppbmRleCBhN2Ez
MzdlLi44NDM3MjgxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHUGF0aEVsZW1l
bnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdQYXRoRWxlbWVudC5jcHAKQEAgLTM1
OSw2ICszNTksMTIgQEAgdm9pZCBTVkdQYXRoRWxlbWVudDo6cGF0aFNlZ0xpc3RDaGFuZ2VkKFNW
R1BhdGhTZWdSb2xlIHJvbGUpCiAgICAgUmVuZGVyU1ZHUmVzb3VyY2U6Om1hcmtGb3JMYXlvdXRB
bmRQYXJlbnRSZXNvdXJjZUludmFsaWRhdGlvbihyZW5kZXJlcik7CiB9CiAKK1JlbmRlck9iamVj
dCogU1ZHUGF0aEVsZW1lbnQ6OmNyZWF0ZVJlbmRlcmVyKFJlbmRlckFyZW5hKiBhcmVuYSwgUmVu
ZGVyU3R5bGUqKQoreworICAgIC8vIEJ5IGRlZmF1bHQsIGFueSBzdWJjbGFzcyBpcyBleHBlY3Rl
ZCB0byBkbyBwYXRoLWJhc2VkIGRyYXdpbmcKKyAgICByZXR1cm4gbmV3IChhcmVuYSkgUmVuZGVy
U1ZHUGF0aCh0aGlzKTsKK30KKwogfQogCiAjZW5kaWYgLy8gRU5BQkxFKFNWRykKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdQYXRoRWxlbWVudC5oIGIvU291cmNlL1dlYkNvcmUv
c3ZnL1NWR1BhdGhFbGVtZW50LmgKaW5kZXggMWQzN2QwZS4uNTRiOGZlMiAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvc3ZnL1NWR1BhdGhFbGVtZW50LmgKKysrIGIvU291cmNlL1dlYkNvcmUv
c3ZnL1NWR1BhdGhFbGVtZW50LmgKQEAgLTEyMiw2ICsxMjIsOCBAQCBwcml2YXRlOgogICAgIHZp
cnR1YWwgdm9pZCBzeW5jaHJvbml6ZVJlcXVpcmVkRXh0ZW5zaW9ucygpIHsgU1ZHVGVzdHM6OnN5
bmNocm9uaXplUmVxdWlyZWRFeHRlbnNpb25zKHRoaXMpOyB9CiAgICAgdmlydHVhbCB2b2lkIHN5
bmNocm9uaXplU3lzdGVtTGFuZ3VhZ2UoKSB7IFNWR1Rlc3RzOjpzeW5jaHJvbml6ZVN5c3RlbUxh
bmd1YWdlKHRoaXMpOyB9CiAKKyAgICBSZW5kZXJPYmplY3QqIGNyZWF0ZVJlbmRlcmVyKFJlbmRl
ckFyZW5hKiwgUmVuZGVyU3R5bGUqKTsKKwogcHJpdmF0ZToKICAgICBPd25QdHI8U1ZHUGF0aEJ5
dGVTdHJlYW0+IG1fcGF0aEJ5dGVTdHJlYW07CiAgICAgbXV0YWJsZSBTVkdTeW5jaHJvbml6YWJs
ZUFuaW1hdGVkUHJvcGVydHk8U1ZHUGF0aFNlZ0xpc3Q+IG1fcGF0aFNlZ0xpc3Q7CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHUmVjdEVsZW1lbnQuY3BwIGIvU291cmNlL1dlYkNv
cmUvc3ZnL1NWR1JlY3RFbGVtZW50LmNwcAppbmRleCBlODQ3NzRkLi4wMWM1YmZjIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHUmVjdEVsZW1lbnQuY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3N2Zy9TVkdSZWN0RWxlbWVudC5jcHAKQEAgLTMyLDYgKzMyLDggQEAKIAogbmFtZXNw
YWNlIFdlYkNvcmUgewogCitjbGFzcyBSZW5kZXJTVkdSZWN0OworCiAvLyBBbmltYXRlZCBwcm9w
ZXJ0eSBkZWZpbml0aW9ucwogREVGSU5FX0FOSU1BVEVEX0xFTkdUSChTVkdSZWN0RWxlbWVudCwg
U1ZHTmFtZXM6OnhBdHRyLCBYLCB4KQogREVGSU5FX0FOSU1BVEVEX0xFTkdUSChTVkdSZWN0RWxl
bWVudCwgU1ZHTmFtZXM6OnlBdHRyLCBZLCB5KQpAQCAtMTM3LDcgKzEzOSw3IEBAIHZvaWQgU1ZH
UmVjdEVsZW1lbnQ6OnN2Z0F0dHJpYnV0ZUNoYW5nZWQoY29uc3QgUXVhbGlmaWVkTmFtZSYgYXR0
ck5hbWUpCiAgICAgaWYgKFNWR1Rlc3RzOjpoYW5kbGVBdHRyaWJ1dGVDaGFuZ2UodGhpcywgYXR0
ck5hbWUpKQogICAgICAgICByZXR1cm47CiAKLSAgICBSZW5kZXJTVkdQYXRoKiByZW5kZXJlciA9
IHN0YXRpY19jYXN0PFJlbmRlclNWR1BhdGgqPih0aGlzLT5yZW5kZXJlcigpKTsKKyAgICBSZW5k
ZXJTVkdSZWN0KiByZW5kZXJlciA9IHN0YXRpY19jYXN0PFJlbmRlclNWR1JlY3QqPih0aGlzLT5y
ZW5kZXJlcigpKTsKICAgICBpZiAoIXJlbmRlcmVyKQogICAgICAgICByZXR1cm47CiAKQEAgLTE2
Niw3ICsxNjgsNiBAQCB2b2lkIFNWR1JlY3RFbGVtZW50Ojp0b1BhdGhEYXRhKFBhdGgmIHBhdGgp
IGNvbnN0CiAgICAgZmxvYXQgaGVpZ2h0VmFsdWUgPSBoZWlnaHQoKS52YWx1ZSh0aGlzKTsKICAg
ICBpZiAoaGVpZ2h0VmFsdWUgPD0gMCkKICAgICAgICAgcmV0dXJuOwotCiAgICAgZmxvYXQgeFZh
bHVlID0geCgpLnZhbHVlKHRoaXMpOwogICAgIGZsb2F0IHlWYWx1ZSA9IHkoKS52YWx1ZSh0aGlz
KTsKIApAQCAtMTg0LDcgKzE4NSw2IEBAIHZvaWQgU1ZHUmVjdEVsZW1lbnQ6OnRvUGF0aERhdGEo
UGF0aCYgcGF0aCkgY29uc3QKICAgICAgICAgcGF0aC5hZGRSb3VuZGVkUmVjdChyZWN0LCBGbG9h
dFNpemUocnhWYWx1ZSwgcnlWYWx1ZSkpOwogICAgICAgICByZXR1cm47CiAgICAgfQotCiAgICAg
cGF0aC5hZGRSZWN0KHJlY3QpOwogfQogCkBAIC0xOTgsNiArMTk4LDEyIEBAIGJvb2wgU1ZHUmVj
dEVsZW1lbnQ6OnNlbGZIYXNSZWxhdGl2ZUxlbmd0aHMoKSBjb25zdAogICAgICAgICB8fCByeSgp
LmlzUmVsYXRpdmUoKTsKIH0KIAorUmVuZGVyT2JqZWN0KiBTVkdSZWN0RWxlbWVudDo6Y3JlYXRl
UmVuZGVyZXIoUmVuZGVyQXJlbmEqIGFyZW5hLCBSZW5kZXJTdHlsZSopCit7CisgICAgLy8gQnkg
ZGVmYXVsdCwgYW55IHN1YmNsYXNzIGlzIGV4cGVjdGVkIHRvIGRvIHBhdGgtYmFzZWQgZHJhd2lu
ZworICAgIHJldHVybiBuZXcgKGFyZW5hKSBSZW5kZXJTVkdSZWN0KHRoaXMpOworfQorCiB9CiAK
ICNlbmRpZiAvLyBFTkFCTEUoU1ZHKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvc3ZnL1NW
R1JlY3RFbGVtZW50LmggYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHUmVjdEVsZW1lbnQuaAppbmRl
eCA5OTQzN2YzLi41ZjUyOTExIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHUmVj
dEVsZW1lbnQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHUmVjdEVsZW1lbnQuaApAQCAt
MjIsNiArMjIsNyBAQAogI2RlZmluZSBTVkdSZWN0RWxlbWVudF9oCiAKICNpZiBFTkFCTEUoU1ZH
KQorI2luY2x1ZGUgIlJlbmRlclNWR1JlY3QuaCIKICNpbmNsdWRlICJTVkdBbmltYXRlZEJvb2xl
YW4uaCIKICNpbmNsdWRlICJTVkdBbmltYXRlZExlbmd0aC5oIgogI2luY2x1ZGUgIlNWR0V4dGVy
bmFsUmVzb3VyY2VzUmVxdWlyZWQuaCIKQEAgLTUyLDYgKzUzLDggQEAgcHJpdmF0ZToKIAogICAg
IHZpcnR1YWwgYm9vbCBzZWxmSGFzUmVsYXRpdmVMZW5ndGhzKCkgY29uc3Q7CiAKKyAgICBSZW5k
ZXJPYmplY3QqIGNyZWF0ZVJlbmRlcmVyKFJlbmRlckFyZW5hKiwgUmVuZGVyU3R5bGUqKTsKKwog
ICAgIEJFR0lOX0RFQ0xBUkVfQU5JTUFURURfUFJPUEVSVElFUyhTVkdSZWN0RWxlbWVudCkKICAg
ICAgICAgREVDTEFSRV9BTklNQVRFRF9MRU5HVEgoWCwgeCkKICAgICAgICAgREVDTEFSRV9BTklN
QVRFRF9MRU5HVEgoWSwgeSkKLS0gCjEuNy40LjEKCg==
</data>
<flag name="review"
          id="99903"
          type_id="1"
          status="-"
          setter="zimmermann"
    />
    <flag name="commit-queue"
          id="99904"
          type_id="3"
          status="-"
          setter="rhodovan.u-szeged"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>104684</attachid>
            <date>2011-08-22 09:21:07 -0700</date>
            <delta_ts>2011-08-22 09:56:30 -0700</delta_ts>
            <desc>Draft patch</desc>
            <filename>0001-renderer-ok.patch</filename>
            <type>text/plain</type>
            <size>72784</size>
            <attacher name="Renata Hodovan">rhodovan.u-szeged</attacher>
            
              <data encoding="base64">RnJvbSAyNDI1MTYwNjFlMjNkOTZjY2UzNGRhYTg5M2RjMmM3YjRhZjFhOGMzIE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBSZW5hdGEgSG9kb3ZhbiA8cmVuaUB3ZWJraXQub3JnPgpEYXRl
OiBNb24sIDIyIEF1ZyAyMDExIDE4OjA4OjQyICswMjAwClN1YmplY3Q6IFtQQVRDSF0gcmVuZGVy
ZXIgb2sKCi0tLQogU291cmNlL1dlYkNvcmUvQ01ha2VMaXN0cy50eHQgICAgICAgICAgICAgICAg
ICAgICAgfCAgICAxICsKIFNvdXJjZS9XZWJDb3JlL0dOVW1ha2VmaWxlLmxpc3QuYW0gICAgICAg
ICAgICAgICAgIHwgICAgMiArCiBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkgICAgICAgICAg
ICAgICAgICAgICAgICB8ICAgIDIgKwogU291cmNlL1dlYkNvcmUvV2ViQ29yZS5wcm8gICAgICAg
ICAgICAgICAgICAgICAgICAgfCAgICA0ICsKIFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVw
cm9qL3Byb2plY3QucGJ4cHJvaiAgIHwgICAgNCArCiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyT2JqZWN0LmggICAgICAgICAgICB8ICAgIDIgKwogU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlclRyZWVBc1RleHQuY3BwICAgICAgfCAgICA0ICstCiBTb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1BhdGguY3BwICAgICB8ICAzNTIgKy0tLS0tLS0tLS0tLS0t
LS0KIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUGF0aC5oICAgICAgIHwg
ICA3NCArLS0tLQogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZWN0LmNw
cCAgICAgfCAgMTM5ICsrKysrKysKIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVy
U1ZHUmVjdC5oICAgICAgIHwgICA2MiArKysKIC4uLi9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jl
c291cmNlQ2xpcHBlci5jcHAgICAgIHwgICAgNiArLQogLi4uL3JlbmRlcmluZy9zdmcvUmVuZGVy
U1ZHUmVzb3VyY2VDb250YWluZXIuY3BwICAgfCAgICAyICstCiBTb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvc3ZnL1JlbmRlclNWR1NoYXBlLmNwcCAgICB8ICA0MjQgKysrKysrKysrKysrKysrKysr
KysKIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHU2hhcGUuaCAgICAgIHwg
IDE2MyArKysrKysrKwogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdSZW5kZXJTdXBw
b3J0LmNwcCAgfCAgICA2ICstCiAuLi4vV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR1JlbmRlclRy
ZWVBc1RleHQuY3BwICB8ICAgMzEgKy0KIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZH
UmVuZGVyVHJlZUFzVGV4dC5oIHwgICAgNCArLQogU291cmNlL1dlYkNvcmUvc3ZnL1NWR0NpcmNs
ZUVsZW1lbnQuY3BwICAgICAgICAgICAgfCAgICAyICstCiBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZH
RWxsaXBzZUVsZW1lbnQuY3BwICAgICAgICAgICB8ICAgIDIgKy0KIFNvdXJjZS9XZWJDb3JlL3N2
Zy9TVkdMaW5lRWxlbWVudC5jcHAgICAgICAgICAgICAgIHwgICAgMiArLQogU291cmNlL1dlYkNv
cmUvc3ZnL1NWR1BhdGhFbGVtZW50LmNwcCAgICAgICAgICAgICAgfCAgIDEwICstCiBTb3VyY2Uv
V2ViQ29yZS9zdmcvU1ZHUGF0aEVsZW1lbnQuaCAgICAgICAgICAgICAgICB8ICAgIDIgKwogU291
cmNlL1dlYkNvcmUvc3ZnL1NWR1BvbHlFbGVtZW50LmNwcCAgICAgICAgICAgICAgfCAgICAyICst
CiBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHUmVjdEVsZW1lbnQuY3BwICAgICAgICAgICAgICB8ICAg
MTIgKy0KIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdSZWN0RWxlbWVudC5oICAgICAgICAgICAgICAg
IHwgICAgMiArCiAyNyBmaWxlcyBjaGFuZ2VkLCA4ODggaW5zZXJ0aW9ucygrKSwgNDUxIGRlbGV0
aW9ucygtKQogY3JlYXRlIG1vZGUgMTAwNjQ0IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcv
UmVuZGVyU1ZHUmVjdC5jcHAKIGNyZWF0ZSBtb2RlIDEwMDY0NCBTb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvc3ZnL1JlbmRlclNWR1JlY3QuaAogY3JlYXRlIG1vZGUgMTAwNjQ0IFNvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHU2hhcGUuY3BwCiBjcmVhdGUgbW9kZSAxMDA2NDQg
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdTaGFwZS5oCgpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvQ01ha2VMaXN0cy50eHQgYi9Tb3VyY2UvV2ViQ29yZS9DTWFrZUxp
c3RzLnR4dAppbmRleCA3Mjk0YjY5Li4wMTVlM2JlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9DTWFrZUxpc3RzLnR4dAorKysgYi9Tb3VyY2UvV2ViQ29yZS9DTWFrZUxpc3RzLnR4dApAQCAt
MTU4MCw2ICsxNTgwLDcgQEAgSUYgKEVOQUJMRV9TVkcpCiAgICAgICAgIHJlbmRlcmluZy9zdmcv
UmVuZGVyU1ZHSW5saW5lVGV4dC5jcHAKICAgICAgICAgcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdN
b2RlbE9iamVjdC5jcHAKICAgICAgICAgcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdQYXRoLmNwcAor
ICAgICAgICByZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1JlY3QuY3BwCiAgICAgICAgIHJlbmRlcmlu
Zy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2UuY3BwCiAgICAgICAgIHJlbmRlcmluZy9zdmcvUmVuZGVy
U1ZHUmVzb3VyY2VDbGlwcGVyLmNwcAogICAgICAgICByZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jl
c291cmNlQ29udGFpbmVyLmNwcApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvR05VbWFrZWZp
bGUubGlzdC5hbSBiL1NvdXJjZS9XZWJDb3JlL0dOVW1ha2VmaWxlLmxpc3QuYW0KaW5kZXggMjZm
MGE1Mi4uMzQyN2JjYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvR05VbWFrZWZpbGUubGlz
dC5hbQorKysgYi9Tb3VyY2UvV2ViQ29yZS9HTlVtYWtlZmlsZS5saXN0LmFtCkBAIC0zMTg5LDYg
KzMxODksOCBAQCB3ZWJjb3JlX3NvdXJjZXMgKz0gXAogCVNvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9zdmcvUmVuZGVyU1ZHTW9kZWxPYmplY3QuaCBcCiAJU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L3N2Zy9SZW5kZXJTVkdQYXRoLmNwcCBcCiAJU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9S
ZW5kZXJTVkdQYXRoLmggXAorCVNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZH
UmVjdC5jcHAgXAorCVNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVjdC5o
IFwKIAlTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291cmNlQ2xpcHBl
ci5jcHAgXAogCVNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VD
bGlwcGVyLmggXAogCVNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVzb3Vy
Y2VDb250YWluZXIuY3BwIFwKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lw
aSBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwaQppbmRleCBhNjM2YjJiLi42YjkwYzA5IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkKKysrIGIvU291cmNlL1dlYkNv
cmUvV2ViQ29yZS5neXBpCkBAIC01ODY5LDYgKzU4NjksOCBAQAogICAgICAgICAgICAgJ3JlbmRl
cmluZy9zdmcvUmVuZGVyU1ZHTW9kZWxPYmplY3QuaCcsCiAgICAgICAgICAgICAncmVuZGVyaW5n
L3N2Zy9SZW5kZXJTVkdQYXRoLmNwcCcsCiAgICAgICAgICAgICAncmVuZGVyaW5nL3N2Zy9SZW5k
ZXJTVkdQYXRoLmgnLAorICAgICAgICAgICAgJ3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVjdC5j
cHAnLAorICAgICAgICAgICAgJ3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVjdC5oJywKICAgICAg
ICAgICAgICdyZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291cmNlLmNwcCcsCiAgICAgICAgICAg
ICAncmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJjZS5oJywKICAgICAgICAgICAgICdyZW5k
ZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291cmNlQ2xpcHBlci5jcHAnLApkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvV2ViQ29yZS5wcm8gYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnBybwppbmRl
eCAxNzdmYjM1Li40MDJlNTIzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnBy
bworKysgYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnBybwpAQCAtMjI2Niw2ICsyMjY2LDcgQEAg
SEVBREVSUyArPSBcCiAgICAgcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdJbmxpbmVUZXh0LmggXAog
ICAgIHJlbmRlcmluZy9zdmcvUmVuZGVyU1ZHTW9kZWxPYmplY3QuaCBcCiAgICAgcmVuZGVyaW5n
L3N2Zy9SZW5kZXJTVkdQYXRoLmggXAorICAgIHJlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVjdC5o
IFwKICAgICByZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291cmNlLmggXAogICAgIHJlbmRlcmlu
Zy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VDbGlwcGVyLmggXAogICAgIHJlbmRlcmluZy9zdmcvUmVu
ZGVyU1ZHUmVzb3VyY2VDb250YWluZXIuaCBcCkBAIC0yMjgwLDYgKzIyODEsNyBAQCBIRUFERVJT
ICs9IFwKICAgICByZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291cmNlU29saWRDb2xvci5oIFwK
ICAgICByZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jvb3QuaCBcCiAgICAgcmVuZGVyaW5nL3N2Zy9S
ZW5kZXJTVkdTaGFkb3dUcmVlUm9vdENvbnRhaW5lci5oIFwKKyAgICByZW5kZXJpbmcvc3ZnL1Jl
bmRlclNWR1NoYXBlLmggXAogICAgIHJlbmRlcmluZy9zdmcvUmVuZGVyU1ZHVFNwYW4uaCBcCiAg
ICAgcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdUZXh0LmggXAogICAgIHJlbmRlcmluZy9zdmcvUmVu
ZGVyU1ZHVGV4dFBhdGguaCBcCkBAIC0zMjk5LDYgKzMzMDEsOCBAQCBjb250YWlucyhERUZJTkVT
LCBFTkFCTEVfU1ZHPTEpIHsKICAgICAgICAgcmVuZGVyaW5nL3N0eWxlL1NWR1JlbmRlclN0eWxl
RGVmcy5jcHAgXAogICAgICAgICByZW5kZXJpbmcvUG9pbnRlckV2ZW50c0hpdFJ1bGVzLmNwcCBc
CiAgICAgICAgIHJlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUGF0aC5jcHAgXAorICAgICAgICByZW5k
ZXJpbmcvc3ZnL1JlbmRlclNWR1JlY3QuY3BwIFwKKyAgICAgICAgcmVuZGVyaW5nL3N2Zy9SZW5k
ZXJTVkdTaGFwZS5jcHAgXAogICAgICAgICBzdmcvYW5pbWF0aW9uL1NNSUxUaW1lLmNwcCBcCiAg
ICAgICAgIHN2Zy9hbmltYXRpb24vU01JTFRpbWVDb250YWluZXIuY3BwIFwKICAgICAgICAgc3Zn
L2FuaW1hdGlvbi9TVkdTTUlMRWxlbWVudC5jcHAgXApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qIGIvU291cmNlL1dlYkNvcmUvV2Vi
Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCmluZGV4IDhiODNiZTUuLjgyZTU5MDIgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJv
agorKysgYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oK
QEAgLTk5MDMsNiArOTkwMyw4IEBACiAJCTlGRkUzRUEzMTFCNUE0MzkwMDM3ODc0RSAvKiBKU01l
bW9yeUluZm8uY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSlNNZW1v
cnlJbmZvLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJOUZGRTNFQTQxMUI1QTQz
OTAwMzc4NzRFIC8qIEpTTWVtb3J5SW5mby5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBKU01lbW9yeUluZm8uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQTAwQjcy
MTkxMURFNjQyNzAwOEFCOUZGIC8qIENoZWNrZWRJbnQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBuYW1lID0gQ2hlY2tlZEludC5oOyBwYXRoID0gY2FudmFzL0NoZWNrZWRJbnQuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQTEzMDlCNjQxM0YxOEQ5MzAwQzhBMDY1IC8qIFJl
bmRlclNWR1JlY3QuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gUmVu
ZGVyU1ZHUmVjdC5jcHA7IHBhdGggPSByZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1JlY3QuY3BwOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlBMTMwOUI2ODEzRjE4REExMDBDOEEwNjUgLyog
UmVuZGVyU1ZHUmVjdC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBSZW5kZXJT
VkdSZWN0Lmg7IHBhdGggPSByZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1JlY3QuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQTEzNkEwMEExMTM0REJEMjAwQ0M4RDUwIC8qIFhNTEh0dHBS
ZXF1ZXN0UHJvZ3Jlc3NFdmVudFRocm90dGxlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3Bw
LmNwcDsgcGF0aCA9IFhNTEh0dHBSZXF1ZXN0UHJvZ3Jlc3NFdmVudFRocm90dGxlLmNwcDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQTEzNkEwMEIxMTM0REJEMjAwQ0M4RDUwIC8qIFhN
TEh0dHBSZXF1ZXN0UHJvZ3Jlc3NFdmVudFRocm90dGxlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IFhNTEh0dHBSZXF1ZXN0UHJvZ3Jlc3NFdmVudFRocm90dGxlLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUExN0M4MTIwMEYyQTVDRjcwMDVEQUFFQiAvKiBIVE1M
RWxlbWVudEZhY3RvcnkuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0g
SFRNTEVsZW1lbnRGYWN0b3J5LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTEy
OTQ1LDYgKzEyOTQ3LDggQEAKIAkJMDg2N0Q2OTFGRTg0MDI4RkMwMkFBQzA3IC8qIFdlYktpdCAq
LyA9IHsKIAkJCWlzYSA9IFBCWEdyb3VwOwogCQkJY2hpbGRyZW4gPSAoCisJCQkJQTEzMDlCNjgx
M0YxOERBMTAwQzhBMDY1IC8qIFJlbmRlclNWR1JlY3QuaCAqLywKKwkJCQlBMTMwOUI2NDEzRjE4
RDkzMDBDOEEwNjUgLyogUmVuZGVyU1ZHUmVjdC5jcHAgKi8sCiAJCQkJNjVDOTdBRjIwOEVBOTA4
ODAwQUNEMjczIC8qIGNvbmZpZy5oICovLAogCQkJCUVERUM5ODAyMEFFRDdFMTcwMDU5MTM3RiAv
KiBXZWJDb3JlUHJlZml4LmggKi8sCiAJCQkJOTMwNzA2MTMwOUUwQ0E4MjAwQjE3RkU0IC8qIERl
cml2ZWRTb3VyY2VzLm1ha2UgKi8sCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvUmVuZGVyT2JqZWN0LmggYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyT2JqZWN0
LmgKaW5kZXggMmE5MDcwMS4uYTBlMmUyOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlck9iamVjdC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJPYmplY3QuaApAQCAtMzU0LDYgKzM1NCw4IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIGJvb2wg
aXNTVkdHcmFkaWVudFN0b3AoKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQogICAgIHZpcnR1YWwg
Ym9vbCBpc1NWR0hpZGRlbkNvbnRhaW5lcigpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CiAgICAg
dmlydHVhbCBib29sIGlzU1ZHUGF0aCgpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CisgICAgdmly
dHVhbCBib29sIGlzU1ZHUmVjdCgpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CisgICAgdmlydHVh
bCBib29sIGlzU1ZHU2hhcGUoKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQogICAgIHZpcnR1YWwg
Ym9vbCBpc1NWR1RleHQoKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQogICAgIHZpcnR1YWwgYm9v
bCBpc1NWR1RleHRQYXRoKCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KICAgICB2aXJ0dWFsIGJv
b2wgaXNTVkdJbmxpbmUoKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRyZWVBc1RleHQuY3BwIGIvU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL1JlbmRlclRyZWVBc1RleHQuY3BwCmluZGV4IGZkZDc5NGIuLjJkNjAyNzkg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUcmVlQXNUZXh0LmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVHJlZUFzVGV4dC5jcHAKQEAg
LTUyMCw4ICs1MjAsOCBAQCBzdGF0aWMgdm9pZCB3cml0ZVRleHRSdW4oVGV4dFN0cmVhbSYgdHMs
IGNvbnN0IFJlbmRlclRleHQmIG8sIGNvbnN0IElubGluZVRleHRCbwogdm9pZCB3cml0ZShUZXh0
U3RyZWFtJiB0cywgY29uc3QgUmVuZGVyT2JqZWN0JiBvLCBpbnQgaW5kZW50LCBSZW5kZXJBc1Rl
eHRCZWhhdmlvciBiZWhhdmlvcikKIHsKICNpZiBFTkFCTEUoU1ZHKQotICAgIGlmIChvLmlzU1ZH
UGF0aCgpKSB7Ci0gICAgICAgIHdyaXRlKHRzLCAqdG9SZW5kZXJTVkdQYXRoKCZvKSwgaW5kZW50
KTsKKyAgICBpZiAoby5pc1NWR1NoYXBlKCkpIHsKKyAgICAgICAgd3JpdGUodHMsICp0b1JlbmRl
clNWR1NoYXBlKCZvKSwgaW5kZW50KTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICBpZiAo
by5pc1NWR0dyYWRpZW50U3RvcCgpKSB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvc3ZnL1JlbmRlclNWR1BhdGguY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2
Zy9SZW5kZXJTVkdQYXRoLmNwcAppbmRleCBhMDM5MWY3Li5lZGFkNDM5IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1BhdGguY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUGF0aC5jcHAKQEAgLTYsNiArNiw4IEBA
CiAgKiBDb3B5cmlnaHQgKEMpIDIwMDkgRGlyayBTY2h1bHplIDxrcml0QHdlYmtpdC5vcmc+CiAg
KiBDb3B5cmlnaHQgKEMpIFJlc2VhcmNoIEluIE1vdGlvbiBMaW1pdGVkIDIwMTAuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDkgSmVmZiBTY2hpbGxlciA8Y29kZWRy
ZWFkQGdtYWlsLmNvbT4KKyAqIENvcHlyaWdodCAoQykgMjAxMSBSZW5hdGEgSG9kb3ZhbiA8cmVu
aUB3ZWJraXQub3JnPgorICogQ29weXJpZ2h0IChDKSAyMDExIFVuaXZlcnNpdHkgb2YgU3plZ2Vk
CiAgKgogICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmli
dXRlIGl0IGFuZC9vcgogICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExp
YnJhcnkgR2VuZXJhbCBQdWJsaWMKQEAgLTI4LDQ5ICszMCwxMyBAQAogI2lmIEVOQUJMRShTVkcp
CiAjaW5jbHVkZSAiUmVuZGVyU1ZHUGF0aC5oIgogCi0jaW5jbHVkZSAiRmxvYXRQb2ludC5oIgot
I2luY2x1ZGUgIkZsb2F0UXVhZC5oIgotI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgotI2lu
Y2x1ZGUgIkhpdFRlc3RSZXF1ZXN0LmgiCi0jaW5jbHVkZSAiUG9pbnRlckV2ZW50c0hpdFJ1bGVz
LmgiCi0jaW5jbHVkZSAiUmVuZGVyU1ZHQ29udGFpbmVyLmgiCi0jaW5jbHVkZSAiUmVuZGVyU1ZH
UmVzb3VyY2VNYXJrZXIuaCIKLSNpbmNsdWRlICJSZW5kZXJTVkdSZXNvdXJjZVNvbGlkQ29sb3Iu
aCIKLSNpbmNsdWRlICJTVkdSZW5kZXJTdXBwb3J0LmgiCi0jaW5jbHVkZSAiU1ZHUmVzb3VyY2Vz
LmgiCisjaW5jbHVkZSAiU1ZHUGF0aEVsZW1lbnQuaCIKICNpbmNsdWRlICJTVkdTdHlsZWRUcmFu
c2Zvcm1hYmxlRWxlbWVudC5oIgotI2luY2x1ZGUgIlNWR1RyYW5zZm9ybUxpc3QuaCIKLSNpbmNs
dWRlICJTVkdVUklSZWZlcmVuY2UuaCIKLSNpbmNsdWRlICJTdHJva2VTdHlsZUFwcGxpZXIuaCIK
LSNpbmNsdWRlIDx3dGYvTWF0aEV4dHJhcy5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLWNs
YXNzIEJvdW5kaW5nUmVjdFN0cm9rZVN0eWxlQXBwbGllciA6IHB1YmxpYyBTdHJva2VTdHlsZUFw
cGxpZXIgewotcHVibGljOgotICAgIEJvdW5kaW5nUmVjdFN0cm9rZVN0eWxlQXBwbGllcihjb25z
dCBSZW5kZXJPYmplY3QqIG9iamVjdCwgUmVuZGVyU3R5bGUqIHN0eWxlKQotICAgICAgICA6IG1f
b2JqZWN0KG9iamVjdCkKLSAgICAgICAgLCBtX3N0eWxlKHN0eWxlKQotICAgIHsKLSAgICAgICAg
QVNTRVJUKHN0eWxlKTsKLSAgICAgICAgQVNTRVJUKG9iamVjdCk7Ci0gICAgfQotCi0gICAgdm9p
ZCBzdHJva2VTdHlsZShHcmFwaGljc0NvbnRleHQqIGdjKQotICAgIHsKLSAgICAgICAgU1ZHUmVu
ZGVyU3VwcG9ydDo6YXBwbHlTdHJva2VTdHlsZVRvQ29udGV4dChnYywgbV9zdHlsZSwgbV9vYmpl
Y3QpOwotICAgIH0KLQotcHJpdmF0ZToKLSAgICBjb25zdCBSZW5kZXJPYmplY3QqIG1fb2JqZWN0
OwotICAgIFJlbmRlclN0eWxlKiBtX3N0eWxlOwotfTsKLQogUmVuZGVyU1ZHUGF0aDo6UmVuZGVy
U1ZHUGF0aChTVkdTdHlsZWRUcmFuc2Zvcm1hYmxlRWxlbWVudCogbm9kZSkKLSAgICA6IFJlbmRl
clNWR01vZGVsT2JqZWN0KG5vZGUpCi0gICAgLCBtX25lZWRzQm91bmRhcmllc1VwZGF0ZShmYWxz
ZSkgLy8gZGVmYXVsdCBpcyBmYWxzZSwgdGhlIGNhY2hlZCByZWN0cyBhcmUgZW1wdHkgZnJvbSB0
aGUgYmVnaW5uaW5nCi0gICAgLCBtX25lZWRzUGF0aFVwZGF0ZSh0cnVlKSAvLyBkZWZhdWx0IGlz
IHRydWUsIHNvIHdlIGdyYWIgYSBQYXRoIG9iamVjdCBvbmNlIGZyb20gU1ZHU3R5bGVkVHJhbnNm
b3JtYWJsZUVsZW1lbnQKLSAgICAsIG1fbmVlZHNUcmFuc2Zvcm1VcGRhdGUodHJ1ZSkgLy8gZGVm
YXVsdCBpcyB0cnVlLCBzbyB3ZSBncmFiIGEgQWZmaW5lVHJhbnNmb3JtIG9iamVjdCBvbmNlIGZy
b20gU1ZHU3R5bGVkVHJhbnNmb3JtYWJsZUVsZW1lbnQKKyAgICA6IFJlbmRlclNWR1NoYXBlKG5v
ZGUpCiB7CiB9CiAKQEAgLTc4LDMxNiArNDQsNiBAQCBSZW5kZXJTVkdQYXRoOjp+UmVuZGVyU1ZH
UGF0aCgpCiB7CiB9CiAKLWJvb2wgUmVuZGVyU1ZHUGF0aDo6ZmlsbENvbnRhaW5zKGNvbnN0IEZs
b2F0UG9pbnQmIHBvaW50LCBib29sIHJlcXVpcmVzRmlsbCwgV2luZFJ1bGUgZmlsbFJ1bGUpCi17
Ci0gICAgaWYgKCFtX2ZpbGxCb3VuZGluZ0JveC5jb250YWlucyhwb2ludCkpCi0gICAgICAgIHJl
dHVybiBmYWxzZTsKLQotICAgIENvbG9yIGZhbGxiYWNrQ29sb3I7Ci0gICAgaWYgKHJlcXVpcmVz
RmlsbCAmJiAhUmVuZGVyU1ZHUmVzb3VyY2U6OmZpbGxQYWludGluZ1Jlc291cmNlKHRoaXMsIHN0
eWxlKCksIGZhbGxiYWNrQ29sb3IpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICByZXR1
cm4gbV9wYXRoLmNvbnRhaW5zKHBvaW50LCBmaWxsUnVsZSk7Ci19Ci0KLWJvb2wgUmVuZGVyU1ZH
UGF0aDo6c3Ryb2tlQ29udGFpbnMoY29uc3QgRmxvYXRQb2ludCYgcG9pbnQsIGJvb2wgcmVxdWly
ZXNTdHJva2UpCi17Ci0gICAgaWYgKCFtX3N0cm9rZUFuZE1hcmtlckJvdW5kaW5nQm94LmNvbnRh
aW5zKHBvaW50KSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgQ29sb3IgZmFsbGJhY2tD
b2xvcjsKLSAgICBpZiAocmVxdWlyZXNTdHJva2UgJiYgIVJlbmRlclNWR1Jlc291cmNlOjpzdHJv
a2VQYWludGluZ1Jlc291cmNlKHRoaXMsIHN0eWxlKCksIGZhbGxiYWNrQ29sb3IpKQotICAgICAg
ICByZXR1cm4gZmFsc2U7Ci0KLSAgICBpZiAoc2hvdWxkU3Ryb2tlWmVyb0xlbmd0aFN1YnBhdGgo
KSkKLSAgICAgICAgcmV0dXJuIHplcm9MZW5ndGhTdWJwYXRoUmVjdCgpLmNvbnRhaW5zKHBvaW50
KTsKLQotICAgIEJvdW5kaW5nUmVjdFN0cm9rZVN0eWxlQXBwbGllciBzdHJva2VTdHlsZSh0aGlz
LCBzdHlsZSgpKTsKLSAgICByZXR1cm4gbV9wYXRoLnN0cm9rZUNvbnRhaW5zKCZzdHJva2VTdHls
ZSwgcG9pbnQpOwotfQotCi12b2lkIFJlbmRlclNWR1BhdGg6OmxheW91dCgpCi17Ci0gICAgTGF5
b3V0UmVwYWludGVyIHJlcGFpbnRlcigqdGhpcywgY2hlY2tGb3JSZXBhaW50RHVyaW5nTGF5b3V0
KCkgJiYgc2VsZk5lZWRzTGF5b3V0KCkpOwotICAgIFNWR1N0eWxlZFRyYW5zZm9ybWFibGVFbGVt
ZW50KiBlbGVtZW50ID0gc3RhdGljX2Nhc3Q8U1ZHU3R5bGVkVHJhbnNmb3JtYWJsZUVsZW1lbnQq
Pihub2RlKCkpOwotCi0gICAgYm9vbCB1cGRhdGVDYWNoZWRCb3VuZGFyaWVzSW5QYXJlbnRzID0g
ZmFsc2U7Ci0KLSAgICBib29sIG5lZWRzUGF0aFVwZGF0ZSA9IG1fbmVlZHNQYXRoVXBkYXRlOwot
ICAgIGlmIChuZWVkc1BhdGhVcGRhdGUpIHsKLSAgICAgICAgbV9wYXRoLmNsZWFyKCk7Ci0gICAg
ICAgIGVsZW1lbnQtPnRvUGF0aERhdGEobV9wYXRoKTsKLSAgICAgICAgbV9uZWVkc1BhdGhVcGRh
dGUgPSBmYWxzZTsKLSAgICAgICAgdXBkYXRlQ2FjaGVkQm91bmRhcmllc0luUGFyZW50cyA9IHRy
dWU7Ci0gICAgfQotCi0gICAgaWYgKG1fbmVlZHNUcmFuc2Zvcm1VcGRhdGUpIHsKLSAgICAgICAg
bV9sb2NhbFRyYW5zZm9ybSA9IGVsZW1lbnQtPmFuaW1hdGVkTG9jYWxUcmFuc2Zvcm0oKTsKLSAg
ICAgICAgbV9uZWVkc1RyYW5zZm9ybVVwZGF0ZSA9IGZhbHNlOwotICAgICAgICB1cGRhdGVDYWNo
ZWRCb3VuZGFyaWVzSW5QYXJlbnRzID0gdHJ1ZTsKLSAgICB9Ci0KLSAgICBpZiAobV9uZWVkc0Jv
dW5kYXJpZXNVcGRhdGUpCi0gICAgICAgIHVwZGF0ZUNhY2hlZEJvdW5kYXJpZXNJblBhcmVudHMg
PSB0cnVlOwotCi0gICAgLy8gSW52YWxpZGF0ZSBhbGwgcmVzb3VyY2VzIG9mIHRoaXMgY2xpZW50
IGlmIG91ciBsYXlvdXQgY2hhbmdlZC4KLSAgICBpZiAobV9ldmVySGFkTGF5b3V0ICYmIHNlbGZO
ZWVkc0xheW91dCgpKSB7Ci0gICAgICAgIFNWR1Jlc291cmNlc0NhY2hlOjpjbGllbnRMYXlvdXRD
aGFuZ2VkKHRoaXMpOwotICAgICAgICBtX21hcmtlckxheW91dEluZm8uY2xlYXIoKTsKLSAgICB9
Ci0KLSAgICAvLyBBdCB0aGlzIHBvaW50IExheW91dFJlcGFpbnRlciBhbHJlYWR5IGdyYWJiZWQg
dGhlIG9sZCBib3VuZHMsCi0gICAgLy8gcmVjYWxjdWxhdGUgdGhlbSBub3cgc28gcmVwYWludEFm
dGVyTGF5b3V0KCkgdXNlcyB0aGUgbmV3IGJvdW5kcy4KLSAgICBpZiAobmVlZHNQYXRoVXBkYXRl
IHx8IG1fbmVlZHNCb3VuZGFyaWVzVXBkYXRlKSB7Ci0gICAgICAgIHVwZGF0ZUNhY2hlZEJvdW5k
YXJpZXMoKTsKLSAgICAgICAgbV9uZWVkc0JvdW5kYXJpZXNVcGRhdGUgPSBmYWxzZTsKLSAgICB9
Ci0KLSAgICAvLyBJZiBvdXIgYm91bmRzIGNoYW5nZWQsIG5vdGlmeSB0aGUgcGFyZW50cy4KLSAg
ICBpZiAodXBkYXRlQ2FjaGVkQm91bmRhcmllc0luUGFyZW50cykKLSAgICAgICAgUmVuZGVyU1ZH
TW9kZWxPYmplY3Q6OnNldE5lZWRzQm91bmRhcmllc1VwZGF0ZSgpOwotCi0gICAgcmVwYWludGVy
LnJlcGFpbnRBZnRlckxheW91dCgpOwotICAgIHNldE5lZWRzTGF5b3V0KGZhbHNlKTsKLX0KLQot
Ym9vbCBSZW5kZXJTVkdQYXRoOjpzaG91bGRTdHJva2VaZXJvTGVuZ3RoU3VicGF0aCgpIGNvbnN0
Ci17Ci0gICAgLy8gU3BlYygxMS40KTogQW55IHplcm8gbGVuZ3RoIHN1YnBhdGggc2hhbGwgbm90
IGJlIHN0cm9rZWQgaWYgdGhlIOKAmHN0cm9rZS1saW5lY2Fw4oCZIHByb3BlcnR5IGhhcyBhIHZh
bHVlIG9mIGJ1dHQKLSAgICAvLyBidXQgc2hhbGwgYmUgc3Ryb2tlZCBpZiB0aGUg4oCYc3Ryb2tl
LWxpbmVjYXDigJkgcHJvcGVydHkgaGFzIGEgdmFsdWUgb2Ygcm91bmQgb3Igc3F1YXJlCi0gICAg
cmV0dXJuIHN0eWxlKCktPnN2Z1N0eWxlKCktPmhhc1N0cm9rZSgpICYmIHN0eWxlKCktPnN2Z1N0
eWxlKCktPmNhcFN0eWxlKCkgIT0gQnV0dENhcCAmJiAhbV9maWxsQm91bmRpbmdCb3gud2lkdGgo
KSAmJiAhbV9maWxsQm91bmRpbmdCb3guaGVpZ2h0KCk7Ci19Ci0KLUZsb2F0UmVjdCBSZW5kZXJT
VkdQYXRoOjp6ZXJvTGVuZ3RoU3VicGF0aFJlY3QoKSBjb25zdAotewotICAgIFNWR0VsZW1lbnQq
IHN2Z0VsZW1lbnQgPSBzdGF0aWNfY2FzdDxTVkdFbGVtZW50Kj4obm9kZSgpKTsKLSAgICBmbG9h
dCBzdHJva2VXaWR0aCA9IHN0eWxlKCktPnN2Z1N0eWxlKCktPnN0cm9rZVdpZHRoKCkudmFsdWUo
c3ZnRWxlbWVudCk7Ci0gICAgcmV0dXJuIEZsb2F0UmVjdChtX2ZpbGxCb3VuZGluZ0JveC54KCkg
LSBzdHJva2VXaWR0aCAvIDIsIG1fZmlsbEJvdW5kaW5nQm94LnkoKSAtIHN0cm9rZVdpZHRoIC8g
Miwgc3Ryb2tlV2lkdGgsIHN0cm9rZVdpZHRoKTsKLX0KLQotdm9pZCBSZW5kZXJTVkdQYXRoOjpz
ZXR1cFNxdWFyZUNhcFBhdGgoUGF0aComIHVzZVBhdGgsIGludCYgYXBwbHlNb2RlKQotewotICAg
IC8vIFNwZWMoMTEuNCk6IEFueSB6ZXJvIGxlbmd0aCBzdWJwYXRoIHNoYWxsIG5vdCBiZSBzdHJv
a2VkIGlmIHRoZSDigJhzdHJva2UtbGluZWNhcOKAmSBwcm9wZXJ0eSBoYXMgYSB2YWx1ZSBvZiBi
dXR0Ci0gICAgLy8gYnV0IHNoYWxsIGJlIHN0cm9rZWQgaWYgdGhlIOKAmHN0cm9rZS1saW5lY2Fw
4oCZIHByb3BlcnR5IGhhcyBhIHZhbHVlIG9mIHJvdW5kIG9yIHNxdWFyZQotICAgIERFRklORV9T
VEFUSUNfTE9DQUwoUGF0aCwgdGVtcFBhdGgsICgpKTsKLQotICAgIGFwcGx5TW9kZSA9IEFwcGx5
VG9GaWxsTW9kZTsKLSAgICB1c2VQYXRoID0gJnRlbXBQYXRoOwotICAgIHVzZVBhdGgtPmNsZWFy
KCk7Ci0gICAgaWYgKHN0eWxlKCktPnN2Z1N0eWxlKCktPmNhcFN0eWxlKCkgPT0gU3F1YXJlQ2Fw
KQotICAgICAgICB1c2VQYXRoLT5hZGRSZWN0KHplcm9MZW5ndGhTdWJwYXRoUmVjdCgpKTsKLSAg
ICBlbHNlCi0gICAgICAgIHVzZVBhdGgtPmFkZEVsbGlwc2UoemVyb0xlbmd0aFN1YnBhdGhSZWN0
KCkpOwotfQotCi1ib29sIFJlbmRlclNWR1BhdGg6OnNldHVwTm9uU2NhbGluZ1N0cm9rZVBhdGgo
UGF0aComIHVzZVBhdGgsIEdyYXBoaWNzQ29udGV4dFN0YXRlU2F2ZXImIHN0YXRlU2F2ZXIpCi17
Ci0gICAgREVGSU5FX1NUQVRJQ19MT0NBTChQYXRoLCB0ZW1wUGF0aCwgKCkpOwotCi0gICAgU1ZH
U3R5bGVkVHJhbnNmb3JtYWJsZUVsZW1lbnQqIGVsZW1lbnQgPSBzdGF0aWNfY2FzdDxTVkdTdHls
ZWRUcmFuc2Zvcm1hYmxlRWxlbWVudCo+KG5vZGUoKSk7Ci0gICAgQWZmaW5lVHJhbnNmb3JtIG5v
blNjYWxpbmdTdHJva2VUcmFuc2Zvcm0gPSBlbGVtZW50LT5nZXRTY3JlZW5DVE0oU1ZHTG9jYXRh
YmxlOjpEaXNhbGxvd1N0eWxlVXBkYXRlKTsKLSAgICBpZiAoIW5vblNjYWxpbmdTdHJva2VUcmFu
c2Zvcm0uaXNJbnZlcnRpYmxlKCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIHRlbXBQ
YXRoID0gbV9wYXRoOwotICAgIHVzZVBhdGggPSAmdGVtcFBhdGg7Ci0gICAgdGVtcFBhdGgudHJh
bnNmb3JtKG5vblNjYWxpbmdTdHJva2VUcmFuc2Zvcm0pOwotCi0gICAgc3RhdGVTYXZlci5zYXZl
KCk7Ci0gICAgc3RhdGVTYXZlci5jb250ZXh0KCktPmNvbmNhdENUTShub25TY2FsaW5nU3Ryb2tl
VHJhbnNmb3JtLmludmVyc2UoKSk7Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLXZvaWQgUmVuZGVy
U1ZHUGF0aDo6ZmlsbEFuZFN0cm9rZVBhdGgoR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0KQotewot
ICAgIFJlbmRlclN0eWxlKiBzdHlsZSA9IHRoaXMtPnN0eWxlKCk7Ci0KLSAgICBDb2xvciBmYWxs
YmFja0NvbG9yOwotICAgIGlmIChSZW5kZXJTVkdSZXNvdXJjZSogZmlsbFBhaW50aW5nUmVzb3Vy
Y2UgPSBSZW5kZXJTVkdSZXNvdXJjZTo6ZmlsbFBhaW50aW5nUmVzb3VyY2UodGhpcywgc3R5bGUs
IGZhbGxiYWNrQ29sb3IpKSB7Ci0gICAgICAgIGlmIChmaWxsUGFpbnRpbmdSZXNvdXJjZS0+YXBw
bHlSZXNvdXJjZSh0aGlzLCBzdHlsZSwgY29udGV4dCwgQXBwbHlUb0ZpbGxNb2RlKSkKLSAgICAg
ICAgICAgIGZpbGxQYWludGluZ1Jlc291cmNlLT5wb3N0QXBwbHlSZXNvdXJjZSh0aGlzLCBjb250
ZXh0LCBBcHBseVRvRmlsbE1vZGUsICZtX3BhdGgpOwotICAgICAgICBlbHNlIGlmIChmYWxsYmFj
a0NvbG9yLmlzVmFsaWQoKSkgewotICAgICAgICAgICAgUmVuZGVyU1ZHUmVzb3VyY2VTb2xpZENv
bG9yKiBmYWxsYmFja1Jlc291cmNlID0gUmVuZGVyU1ZHUmVzb3VyY2U6OnNoYXJlZFNvbGlkUGFp
bnRpbmdSZXNvdXJjZSgpOwotICAgICAgICAgICAgZmFsbGJhY2tSZXNvdXJjZS0+c2V0Q29sb3Io
ZmFsbGJhY2tDb2xvcik7Ci0gICAgICAgICAgICBpZiAoZmFsbGJhY2tSZXNvdXJjZS0+YXBwbHlS
ZXNvdXJjZSh0aGlzLCBzdHlsZSwgY29udGV4dCwgQXBwbHlUb0ZpbGxNb2RlKSkKLSAgICAgICAg
ICAgICAgICBmYWxsYmFja1Jlc291cmNlLT5wb3N0QXBwbHlSZXNvdXJjZSh0aGlzLCBjb250ZXh0
LCBBcHBseVRvRmlsbE1vZGUsICZtX3BhdGgpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgZmFs
bGJhY2tDb2xvciA9IENvbG9yKCk7Ci0gICAgUmVuZGVyU1ZHUmVzb3VyY2UqIHN0cm9rZVBhaW50
aW5nUmVzb3VyY2UgPSBSZW5kZXJTVkdSZXNvdXJjZTo6c3Ryb2tlUGFpbnRpbmdSZXNvdXJjZSh0
aGlzLCBzdHlsZSwgZmFsbGJhY2tDb2xvcik7Ci0gICAgaWYgKCFzdHJva2VQYWludGluZ1Jlc291
cmNlKQotICAgICAgICByZXR1cm47Ci0KLSAgICBQYXRoKiB1c2VQYXRoID0gJm1fcGF0aDsKLSAg
ICBpbnQgYXBwbHlNb2RlID0gQXBwbHlUb1N0cm9rZU1vZGU7Ci0KLSAgICBib29sIG5vblNjYWxp
bmdTdHJva2UgPSBzdHlsZS0+c3ZnU3R5bGUoKS0+dmVjdG9yRWZmZWN0KCkgPT0gVkVfTk9OX1ND
QUxJTkdfU1RST0tFOwotCi0gICAgR3JhcGhpY3NDb250ZXh0U3RhdGVTYXZlciBzdGF0ZVNhdmVy
KCpjb250ZXh0LCBmYWxzZSk7Ci0KLSAgICAvLyBTcGVjKDExLjQpOiBBbnkgemVybyBsZW5ndGgg
c3VicGF0aCBzaGFsbCBub3QgYmUgc3Ryb2tlZCBpZiB0aGUg4oCYc3Ryb2tlLWxpbmVjYXDigJkg
cHJvcGVydHkgaGFzIGEgdmFsdWUgb2YgYnV0dAotICAgIC8vIGJ1dCBzaGFsbCBiZSBzdHJva2Vk
IGlmIHRoZSDigJhzdHJva2UtbGluZWNhcOKAmSBwcm9wZXJ0eSBoYXMgYSB2YWx1ZSBvZiByb3Vu
ZCBvciBzcXVhcmUKLSAgICAvLyBGSVhNRTogdGhpcyBkb2VzIG5vdCB3b3JrIGZvciB6ZXJvLWxl
bmd0aCBzdWJwYXRocywgb25seSB3aGVuIHRvdGFsIHBhdGggaXMgemVyby1sZW5ndGgKLSAgICBp
ZiAoc2hvdWxkU3Ryb2tlWmVyb0xlbmd0aFN1YnBhdGgoKSkKLSAgICAgICAgc2V0dXBTcXVhcmVD
YXBQYXRoKHVzZVBhdGgsIGFwcGx5TW9kZSk7Ci0gICAgZWxzZSBpZiAobm9uU2NhbGluZ1N0cm9r
ZSkgewotICAgICAgIGlmICghc2V0dXBOb25TY2FsaW5nU3Ryb2tlUGF0aCh1c2VQYXRoLCBzdGF0
ZVNhdmVyKSkKLSAgICAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIGlmIChzdHJva2VQYWlu
dGluZ1Jlc291cmNlLT5hcHBseVJlc291cmNlKHRoaXMsIHN0eWxlLCBjb250ZXh0LCBhcHBseU1v
ZGUpKQotICAgICAgICBzdHJva2VQYWludGluZ1Jlc291cmNlLT5wb3N0QXBwbHlSZXNvdXJjZSh0
aGlzLCBjb250ZXh0LCBhcHBseU1vZGUsIHVzZVBhdGgpOwotICAgIGVsc2UgaWYgKGZhbGxiYWNr
Q29sb3IuaXNWYWxpZCgpKSB7Ci0gICAgICAgIFJlbmRlclNWR1Jlc291cmNlU29saWRDb2xvciog
ZmFsbGJhY2tSZXNvdXJjZSA9IFJlbmRlclNWR1Jlc291cmNlOjpzaGFyZWRTb2xpZFBhaW50aW5n
UmVzb3VyY2UoKTsKLSAgICAgICAgZmFsbGJhY2tSZXNvdXJjZS0+c2V0Q29sb3IoZmFsbGJhY2tD
b2xvcik7Ci0gICAgICAgIGlmIChmYWxsYmFja1Jlc291cmNlLT5hcHBseVJlc291cmNlKHRoaXMs
IHN0eWxlLCBjb250ZXh0LCBhcHBseU1vZGUpKQotICAgICAgICAgICAgZmFsbGJhY2tSZXNvdXJj
ZS0+cG9zdEFwcGx5UmVzb3VyY2UodGhpcywgY29udGV4dCwgYXBwbHlNb2RlLCB1c2VQYXRoKTsK
LSAgICB9Ci19Ci0KLXZvaWQgUmVuZGVyU1ZHUGF0aDo6cGFpbnQoUGFpbnRJbmZvJiBwYWludElu
Zm8sIGNvbnN0IExheW91dFBvaW50JikKLXsKLSAgICBpZiAocGFpbnRJbmZvLmNvbnRleHQtPnBh
aW50aW5nRGlzYWJsZWQoKSB8fCBzdHlsZSgpLT52aXNpYmlsaXR5KCkgPT0gSElEREVOIHx8IG1f
cGF0aC5pc0VtcHR5KCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIEZsb2F0UmVjdCBib3VuZGlu
Z0JveCA9IHJlcGFpbnRSZWN0SW5Mb2NhbENvb3JkaW5hdGVzKCk7Ci0gICAgaWYgKCFTVkdSZW5k
ZXJTdXBwb3J0OjpwYWludEluZm9JbnRlcnNlY3RzUmVwYWludFJlY3QoYm91bmRpbmdCb3gsIG1f
bG9jYWxUcmFuc2Zvcm0sIHBhaW50SW5mbykpCi0gICAgICAgIHJldHVybjsKLQotICAgIFBhaW50
SW5mbyBjaGlsZFBhaW50SW5mbyhwYWludEluZm8pOwotICAgIGJvb2wgZHJhd3NPdXRsaW5lID0g
c3R5bGUoKS0+b3V0bGluZVdpZHRoKCkgJiYgKGNoaWxkUGFpbnRJbmZvLnBoYXNlID09IFBhaW50
UGhhc2VPdXRsaW5lIHx8IGNoaWxkUGFpbnRJbmZvLnBoYXNlID09IFBhaW50UGhhc2VTZWxmT3V0
bGluZSk7Ci0gICAgaWYgKGRyYXdzT3V0bGluZSB8fCBjaGlsZFBhaW50SW5mby5waGFzZSA9PSBQ
YWludFBoYXNlRm9yZWdyb3VuZCkgewotICAgICAgICBHcmFwaGljc0NvbnRleHRTdGF0ZVNhdmVy
IHN0YXRlU2F2ZXIoKmNoaWxkUGFpbnRJbmZvLmNvbnRleHQpOwotICAgICAgICBjaGlsZFBhaW50
SW5mby5hcHBseVRyYW5zZm9ybShtX2xvY2FsVHJhbnNmb3JtKTsKLQotICAgICAgICBpZiAoY2hp
bGRQYWludEluZm8ucGhhc2UgPT0gUGFpbnRQaGFzZUZvcmVncm91bmQpIHsKLSAgICAgICAgICAg
IFBhaW50SW5mbyBzYXZlZEluZm8oY2hpbGRQYWludEluZm8pOwotCi0gICAgICAgICAgICBpZiAo
U1ZHUmVuZGVyU3VwcG9ydDo6cHJlcGFyZVRvUmVuZGVyU1ZHQ29udGVudCh0aGlzLCBjaGlsZFBh
aW50SW5mbykpIHsKLSAgICAgICAgICAgICAgICBjb25zdCBTVkdSZW5kZXJTdHlsZSogc3ZnU3R5
bGUgPSBzdHlsZSgpLT5zdmdTdHlsZSgpOwotICAgICAgICAgICAgICAgIGlmIChzdmdTdHlsZS0+
c2hhcGVSZW5kZXJpbmcoKSA9PSBTUl9DUklTUEVER0VTKQotICAgICAgICAgICAgICAgICAgICBj
aGlsZFBhaW50SW5mby5jb250ZXh0LT5zZXRTaG91bGRBbnRpYWxpYXMoZmFsc2UpOwotCi0gICAg
ICAgICAgICAgICAgZmlsbEFuZFN0cm9rZVBhdGgoY2hpbGRQYWludEluZm8uY29udGV4dCk7Ci0K
LSAgICAgICAgICAgICAgICBpZiAoc3ZnU3R5bGUtPmhhc01hcmtlcnMoKSkKLSAgICAgICAgICAg
ICAgICAgICAgbV9tYXJrZXJMYXlvdXRJbmZvLmRyYXdNYXJrZXJzKGNoaWxkUGFpbnRJbmZvKTsK
LSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgU1ZHUmVuZGVyU3VwcG9ydDo6ZmluaXNoUmVu
ZGVyU1ZHQ29udGVudCh0aGlzLCBjaGlsZFBhaW50SW5mbywgc2F2ZWRJbmZvLmNvbnRleHQpOwot
ICAgICAgICB9Ci0KLSAgICAgICAgaWYgKGRyYXdzT3V0bGluZSkKLSAgICAgICAgICAgIHBhaW50
T3V0bGluZShjaGlsZFBhaW50SW5mby5jb250ZXh0LCBJbnRSZWN0KGJvdW5kaW5nQm94KSk7Ci0g
ICAgfQotfQotCi0vLyBUaGlzIG1ldGhvZCBpcyBjYWxsZWQgZnJvbSBpbnNpZGUgcGFpbnRPdXRs
aW5lKCkgc2luY2Ugd2UgY2FsbCBwYWludE91dGxpbmUoKQotLy8gd2hpbGUgdHJhbnNmb3JtZWQg
dG8gb3VyIGNvb3JkIHN5c3RlbSwgcmV0dXJuIGxvY2FsIGNvb3Jkcwotdm9pZCBSZW5kZXJTVkdQ
YXRoOjphZGRGb2N1c1JpbmdSZWN0cyhWZWN0b3I8TGF5b3V0UmVjdD4mIHJlY3RzLCBjb25zdCBM
YXlvdXRQb2ludCYpIAotewotICAgIExheW91dFJlY3QgcmVjdCA9IGVuY2xvc2luZ0xheW91dFJl
Y3QocmVwYWludFJlY3RJbkxvY2FsQ29vcmRpbmF0ZXMoKSk7Ci0gICAgaWYgKCFyZWN0LmlzRW1w
dHkoKSkKLSAgICAgICAgcmVjdHMuYXBwZW5kKHJlY3QpOwotfQotCi1ib29sIFJlbmRlclNWR1Bh
dGg6Om5vZGVBdEZsb2F0UG9pbnQoY29uc3QgSGl0VGVzdFJlcXVlc3QmIHJlcXVlc3QsIEhpdFRl
c3RSZXN1bHQmIHJlc3VsdCwgY29uc3QgRmxvYXRQb2ludCYgcG9pbnRJblBhcmVudCwgSGl0VGVz
dEFjdGlvbiBoaXRUZXN0QWN0aW9uKQotewotICAgIC8vIFdlIG9ubHkgZHJhdyBpbiB0aGUgZm9y
Z3JvdW5kIHBoYXNlLCBzbyB3ZSBvbmx5IGhpdC10ZXN0IHRoZW4uCi0gICAgaWYgKGhpdFRlc3RB
Y3Rpb24gIT0gSGl0VGVzdEZvcmVncm91bmQpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAg
IEZsb2F0UG9pbnQgbG9jYWxQb2ludCA9IG1fbG9jYWxUcmFuc2Zvcm0uaW52ZXJzZSgpLm1hcFBv
aW50KHBvaW50SW5QYXJlbnQpOwotCi0gICAgaWYgKCFTVkdSZW5kZXJTdXBwb3J0Ojpwb2ludElu
Q2xpcHBpbmdBcmVhKHRoaXMsIGxvY2FsUG9pbnQpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0K
LSAgICBQb2ludGVyRXZlbnRzSGl0UnVsZXMgaGl0UnVsZXMoUG9pbnRlckV2ZW50c0hpdFJ1bGVz
OjpTVkdfUEFUSF9ISVRURVNUSU5HLCByZXF1ZXN0LCBzdHlsZSgpLT5wb2ludGVyRXZlbnRzKCkp
OwotICAgIGJvb2wgaXNWaXNpYmxlID0gKHN0eWxlKCktPnZpc2liaWxpdHkoKSA9PSBWSVNJQkxF
KTsKLSAgICBpZiAoaXNWaXNpYmxlIHx8ICFoaXRSdWxlcy5yZXF1aXJlVmlzaWJsZSkgewotICAg
ICAgICBjb25zdCBTVkdSZW5kZXJTdHlsZSogc3ZnU3R5bGUgPSBzdHlsZSgpLT5zdmdTdHlsZSgp
OwotICAgICAgICBXaW5kUnVsZSBmaWxsUnVsZSA9IHN2Z1N0eWxlLT5maWxsUnVsZSgpOwotICAg
ICAgICBpZiAocmVxdWVzdC5zdmdDbGlwQ29udGVudCgpKQotICAgICAgICAgICAgZmlsbFJ1bGUg
PSBzdmdTdHlsZS0+Y2xpcFJ1bGUoKTsKLSAgICAgICAgaWYgKChoaXRSdWxlcy5jYW5IaXRTdHJv
a2UgJiYgKHN2Z1N0eWxlLT5oYXNTdHJva2UoKSB8fCAhaGl0UnVsZXMucmVxdWlyZVN0cm9rZSkg
JiYgc3Ryb2tlQ29udGFpbnMobG9jYWxQb2ludCwgaGl0UnVsZXMucmVxdWlyZVN0cm9rZSkpCi0g
ICAgICAgICAgICB8fCAoaGl0UnVsZXMuY2FuSGl0RmlsbCAmJiAoc3ZnU3R5bGUtPmhhc0ZpbGwo
KSB8fCAhaGl0UnVsZXMucmVxdWlyZUZpbGwpICYmIGZpbGxDb250YWlucyhsb2NhbFBvaW50LCBo
aXRSdWxlcy5yZXF1aXJlRmlsbCwgZmlsbFJ1bGUpKSkgewotICAgICAgICAgICAgdXBkYXRlSGl0
VGVzdFJlc3VsdChyZXN1bHQsIHJvdW5kZWRMYXlvdXRQb2ludChsb2NhbFBvaW50KSk7Ci0gICAg
ICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgfQotICAgIH0KLSAgICByZXR1cm4gZmFsc2U7
Ci19Ci0KLUZsb2F0UmVjdCBSZW5kZXJTVkdQYXRoOjpjYWxjdWxhdGVNYXJrZXJCb3VuZHNJZk5l
ZWRlZCgpCi17Ci0gICAgU1ZHRWxlbWVudCogc3ZnRWxlbWVudCA9IHN0YXRpY19jYXN0PFNWR0Vs
ZW1lbnQqPihub2RlKCkpOwotICAgIEFTU0VSVChzdmdFbGVtZW50ICYmIHN2Z0VsZW1lbnQtPmRv
Y3VtZW50KCkpOwotICAgIGlmICghc3ZnRWxlbWVudC0+aXNTdHlsZWQoKSkKLSAgICAgICAgcmV0
dXJuIEZsb2F0UmVjdCgpOwotCi0gICAgU1ZHU3R5bGVkRWxlbWVudCogc3R5bGVkRWxlbWVudCA9
IHN0YXRpY19jYXN0PFNWR1N0eWxlZEVsZW1lbnQqPihzdmdFbGVtZW50KTsKLSAgICBpZiAoIXN0
eWxlZEVsZW1lbnQtPnN1cHBvcnRzTWFya2VycygpKQotICAgICAgICByZXR1cm4gRmxvYXRSZWN0
KCk7Ci0KLSAgICBjb25zdCBTVkdSZW5kZXJTdHlsZSogc3ZnU3R5bGUgPSBzdHlsZSgpLT5zdmdT
dHlsZSgpOwotICAgIEFTU0VSVChzdmdTdHlsZS0+aGFzTWFya2VycygpKTsKLQotICAgIFNWR1Jl
c291cmNlcyogcmVzb3VyY2VzID0gU1ZHUmVzb3VyY2VzQ2FjaGU6OmNhY2hlZFJlc291cmNlc0Zv
clJlbmRlck9iamVjdCh0aGlzKTsKLSAgICBpZiAoIXJlc291cmNlcykKLSAgICAgICAgcmV0dXJu
IEZsb2F0UmVjdCgpOwotCi0gICAgUmVuZGVyU1ZHUmVzb3VyY2VNYXJrZXIqIG1hcmtlclN0YXJ0
ID0gcmVzb3VyY2VzLT5tYXJrZXJTdGFydCgpOwotICAgIFJlbmRlclNWR1Jlc291cmNlTWFya2Vy
KiBtYXJrZXJNaWQgPSByZXNvdXJjZXMtPm1hcmtlck1pZCgpOwotICAgIFJlbmRlclNWR1Jlc291
cmNlTWFya2VyKiBtYXJrZXJFbmQgPSByZXNvdXJjZXMtPm1hcmtlckVuZCgpOwotICAgIGlmICgh
bWFya2VyU3RhcnQgJiYgIW1hcmtlck1pZCAmJiAhbWFya2VyRW5kKQotICAgICAgICByZXR1cm4g
RmxvYXRSZWN0KCk7Ci0KLSAgICByZXR1cm4gbV9tYXJrZXJMYXlvdXRJbmZvLmNhbGN1bGF0ZUJv
dW5kYXJpZXMobWFya2VyU3RhcnQsIG1hcmtlck1pZCwgbWFya2VyRW5kLCBzdmdTdHlsZS0+c3Ry
b2tlV2lkdGgoKS52YWx1ZShzdmdFbGVtZW50KSwgbV9wYXRoKTsKLX0KLQotdm9pZCBSZW5kZXJT
VkdQYXRoOjp1cGRhdGVDYWNoZWRCb3VuZGFyaWVzKCkKLXsKLSAgICBpZiAobV9wYXRoLmlzRW1w
dHkoKSkgewotICAgICAgICBtX2ZpbGxCb3VuZGluZ0JveCA9IEZsb2F0UmVjdCgpOwotICAgICAg
ICBtX3N0cm9rZUFuZE1hcmtlckJvdW5kaW5nQm94ID0gRmxvYXRSZWN0KCk7Ci0gICAgICAgIG1f
cmVwYWludEJvdW5kaW5nQm94ID0gRmxvYXRSZWN0KCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9
Ci0KLSAgICAvLyBDYWNoZSBfdW5jbGlwcGVkXyBmaWxsIGJvdW5kaW5nIGJveCwgdXNlZCBmb3Ig
Y2FsY3VsYXRpb25zIGluIHJlc291cmNlcwotICAgIG1fZmlsbEJvdW5kaW5nQm94ID0gbV9wYXRo
LmJvdW5kaW5nUmVjdCgpOwotCi0gICAgLy8gU3BlYygxMS40KTogQW55IHplcm8gbGVuZ3RoIHN1
YnBhdGggc2hhbGwgbm90IGJlIHN0cm9rZWQgaWYgdGhlIOKAmHN0cm9rZS1saW5lY2Fw4oCZIHBy
b3BlcnR5IGhhcyBhIHZhbHVlIG9mIGJ1dHQKLSAgICAvLyBidXQgc2hhbGwgYmUgc3Ryb2tlZCBp
ZiB0aGUg4oCYc3Ryb2tlLWxpbmVjYXDigJkgcHJvcGVydHkgaGFzIGEgdmFsdWUgb2Ygcm91bmQg
b3Igc3F1YXJlCi0gICAgaWYgKHNob3VsZFN0cm9rZVplcm9MZW5ndGhTdWJwYXRoKCkpIHsKLSAg
ICAgICAgbV9zdHJva2VBbmRNYXJrZXJCb3VuZGluZ0JveCA9IHplcm9MZW5ndGhTdWJwYXRoUmVj
dCgpOwotICAgICAgICAvLyBDYWNoZSBzbWFsbGVzdCBwb3NzaWJsZSByZXBhaW50IHJlY3Rhbmds
ZQotICAgICAgICBtX3JlcGFpbnRCb3VuZGluZ0JveCA9IG1fc3Ryb2tlQW5kTWFya2VyQm91bmRp
bmdCb3g7Ci0gICAgICAgIFNWR1JlbmRlclN1cHBvcnQ6OmludGVyc2VjdFJlcGFpbnRSZWN0V2l0
aFJlc291cmNlcyh0aGlzLCBtX3JlcGFpbnRCb3VuZGluZ0JveCk7Ci0gICAgICAgIHJldHVybjsK
LSAgICB9Ci0KLSAgICAvLyBDYWNoZSBfdW5jbGlwcGVkXyBzdHJva2UgYm91bmRpbmcgYm94LCB1
c2VkIGZvciBjYWxjdWxhdGlvbnMgaW4gcmVzb3VyY2VzIChpbmNsdWRlcyBtYXJrZXIgYm91bmRh
cmllcykKLSAgICBtX3N0cm9rZUFuZE1hcmtlckJvdW5kaW5nQm94ID0gbV9maWxsQm91bmRpbmdC
b3g7Ci0KLSAgICBjb25zdCBTVkdSZW5kZXJTdHlsZSogc3ZnU3R5bGUgPSBzdHlsZSgpLT5zdmdT
dHlsZSgpOwotICAgIGlmIChzdmdTdHlsZS0+aGFzU3Ryb2tlKCkpIHsKLSAgICAgICAgQm91bmRp
bmdSZWN0U3Ryb2tlU3R5bGVBcHBsaWVyIHN0cm9rZVN0eWxlKHRoaXMsIHN0eWxlKCkpOwotICAg
ICAgICBtX3N0cm9rZUFuZE1hcmtlckJvdW5kaW5nQm94LnVuaXRlKG1fcGF0aC5zdHJva2VCb3Vu
ZGluZ1JlY3QoJnN0cm9rZVN0eWxlKSk7Ci0gICAgfQotCi0gICAgaWYgKHN2Z1N0eWxlLT5oYXNN
YXJrZXJzKCkpIHsKLSAgICAgICAgRmxvYXRSZWN0IG1hcmtlckJvdW5kcyA9IGNhbGN1bGF0ZU1h
cmtlckJvdW5kc0lmTmVlZGVkKCk7Ci0gICAgICAgIGlmICghbWFya2VyQm91bmRzLmlzRW1wdHko
KSkKLSAgICAgICAgICAgIG1fc3Ryb2tlQW5kTWFya2VyQm91bmRpbmdCb3gudW5pdGUobWFya2Vy
Qm91bmRzKTsKLSAgICB9Ci0KLSAgICAvLyBDYWNoZSBzbWFsbGVzdCBwb3NzaWJsZSByZXBhaW50
IHJlY3RhbmdsZQotICAgIG1fcmVwYWludEJvdW5kaW5nQm94ID0gbV9zdHJva2VBbmRNYXJrZXJC
b3VuZGluZ0JveDsKLSAgICBTVkdSZW5kZXJTdXBwb3J0OjppbnRlcnNlY3RSZXBhaW50UmVjdFdp
dGhSZXNvdXJjZXModGhpcywgbV9yZXBhaW50Qm91bmRpbmdCb3gpOwotfQotCiB9CiAKICNlbmRp
ZiAvLyBFTkFCTEUoU1ZHKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2
Zy9SZW5kZXJTVkdQYXRoLmggYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNW
R1BhdGguaAppbmRleCA5OGU2MDhkLi41MjU2OGZmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1BhdGguaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvc3ZnL1JlbmRlclNWR1BhdGguaApAQCAtNCw2ICs0LDggQEAKICAqIENvcHlyaWdodCAo
QykgMjAwNSBFcmljIFNlaWRlbCA8ZXJpY0B3ZWJraXQub3JnPgogICogQ29weXJpZ2h0IChDKSAy
MDA2IEFwcGxlIENvbXB1dGVyLCBJbmMKICAqIENvcHlyaWdodCAoQykgMjAwOSBHb29nbGUsIElu
Yy4KKyAqIENvcHlyaWdodCAoQykgMjAxMSBSZW5hdGEgSG9kb3ZhbiA8cmVuaUB3ZWJraXQub3Jn
PgorICogQ29weXJpZ2h0IChDKSAyMDExIFVuaXZlcnNpdHkgb2YgU3plZ2VkCiAgKgogICogVGhp
cyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9v
cgogICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJh
bCBQdWJsaWMKQEAgLTI1LDg2ICsyNywyMCBAQAogI2RlZmluZSBSZW5kZXJTVkdQYXRoX2gKIAog
I2lmIEVOQUJMRShTVkcpCi0jaW5jbHVkZSAiQWZmaW5lVHJhbnNmb3JtLmgiCi0jaW5jbHVkZSAi
RmxvYXRSZWN0LmgiCi0jaW5jbHVkZSAiUmVuZGVyU1ZHTW9kZWxPYmplY3QuaCIKLSNpbmNsdWRl
ICJTVkdNYXJrZXJMYXlvdXRJbmZvLmgiCisjaW5jbHVkZSAiUmVuZGVyU1ZHU2hhcGUuaCIKIAog
bmFtZXNwYWNlIFdlYkNvcmUgewogCi1jbGFzcyBGbG9hdFBvaW50OwotY2xhc3MgR3JhcGhpY3ND
b250ZXh0U3RhdGVTYXZlcjsKLWNsYXNzIFJlbmRlclNWR0NvbnRhaW5lcjsKLWNsYXNzIFNWR1N0
eWxlZFRyYW5zZm9ybWFibGVFbGVtZW50OwotCi1jbGFzcyBSZW5kZXJTVkdQYXRoIDogcHVibGlj
IFJlbmRlclNWR01vZGVsT2JqZWN0IHsKK2NsYXNzIFJlbmRlclNWR1BhdGggOiBwdWJsaWMgUmVu
ZGVyU1ZHU2hhcGUgewogcHVibGljOgotICAgIGV4cGxpY2l0IFJlbmRlclNWR1BhdGgoU1ZHU3R5
bGVkVHJhbnNmb3JtYWJsZUVsZW1lbnQqKTsKKyAgICBSZW5kZXJTVkdQYXRoKFNWR1N0eWxlZFRy
YW5zZm9ybWFibGVFbGVtZW50Kik7CiAgICAgdmlydHVhbCB+UmVuZGVyU1ZHUGF0aCgpOwogCi0g
ICAgY29uc3QgUGF0aCYgcGF0aCgpIGNvbnN0IHsgcmV0dXJuIG1fcGF0aDsgfQotICAgIHZvaWQg
c2V0TmVlZHNQYXRoVXBkYXRlKCkgeyBtX25lZWRzUGF0aFVwZGF0ZSA9IHRydWU7IH0KLSAgICB2
aXJ0dWFsIHZvaWQgc2V0TmVlZHNCb3VuZGFyaWVzVXBkYXRlKCkgeyBtX25lZWRzQm91bmRhcmll
c1VwZGF0ZSA9IHRydWU7IH0KLSAgICB2aXJ0dWFsIHZvaWQgc2V0TmVlZHNUcmFuc2Zvcm1VcGRh
dGUoKSB7IG1fbmVlZHNUcmFuc2Zvcm1VcGRhdGUgPSB0cnVlOyB9Ci0KIHByaXZhdGU6Ci0gICAg
Ly8gSGl0LWRldGVjdGlvbiBzZXBlcmF0ZWQgZm9yIHRoZSBmaWxsIGFuZCB0aGUgc3Ryb2tlCi0g
ICAgYm9vbCBmaWxsQ29udGFpbnMoY29uc3QgRmxvYXRQb2ludCYsIGJvb2wgcmVxdWlyZXNGaWxs
ID0gdHJ1ZSwgV2luZFJ1bGUgZmlsbFJ1bGUgPSBSVUxFX05PTlpFUk8pOwotICAgIGJvb2wgc3Ry
b2tlQ29udGFpbnMoY29uc3QgRmxvYXRQb2ludCYsIGJvb2wgcmVxdWlyZXNTdHJva2UgPSB0cnVl
KTsKLQotICAgIHZpcnR1YWwgRmxvYXRSZWN0IG9iamVjdEJvdW5kaW5nQm94KCkgY29uc3QgeyBy
ZXR1cm4gbV9maWxsQm91bmRpbmdCb3g7IH0KLSAgICB2aXJ0dWFsIEZsb2F0UmVjdCBzdHJva2VC
b3VuZGluZ0JveCgpIGNvbnN0IHsgcmV0dXJuIG1fc3Ryb2tlQW5kTWFya2VyQm91bmRpbmdCb3g7
IH0KLSAgICB2aXJ0dWFsIEZsb2F0UmVjdCByZXBhaW50UmVjdEluTG9jYWxDb29yZGluYXRlcygp
IGNvbnN0IHsgcmV0dXJuIG1fcmVwYWludEJvdW5kaW5nQm94OyB9Ci0gICAgdmlydHVhbCBjb25z
dCBBZmZpbmVUcmFuc2Zvcm0mIGxvY2FsVG9QYXJlbnRUcmFuc2Zvcm0oKSBjb25zdCB7IHJldHVy
biBtX2xvY2FsVHJhbnNmb3JtOyB9Ci0KICAgICB2aXJ0dWFsIGJvb2wgaXNTVkdQYXRoKCkgY29u
c3QgeyByZXR1cm4gdHJ1ZTsgfQogICAgIHZpcnR1YWwgY29uc3QgY2hhciogcmVuZGVyTmFtZSgp
IGNvbnN0IHsgcmV0dXJuICJSZW5kZXJTVkdQYXRoIjsgfQotCi0gICAgdmlydHVhbCB2b2lkIGxh
eW91dCgpOwotICAgIHZpcnR1YWwgdm9pZCBwYWludChQYWludEluZm8mLCBjb25zdCBMYXlvdXRQ
b2ludCYpOwotICAgIHZpcnR1YWwgdm9pZCBhZGRGb2N1c1JpbmdSZWN0cyhWZWN0b3I8TGF5b3V0
UmVjdD4mLCBjb25zdCBMYXlvdXRQb2ludCYpOwotCi0gICAgdmlydHVhbCBib29sIG5vZGVBdEZs
b2F0UG9pbnQoY29uc3QgSGl0VGVzdFJlcXVlc3QmLCBIaXRUZXN0UmVzdWx0JiwgY29uc3QgRmxv
YXRQb2ludCYgcG9pbnRJblBhcmVudCwgSGl0VGVzdEFjdGlvbik7Ci0KLSAgICBGbG9hdFJlY3Qg
Y2FsY3VsYXRlTWFya2VyQm91bmRzSWZOZWVkZWQoKTsKLSAgICB2b2lkIHVwZGF0ZUNhY2hlZEJv
dW5kYXJpZXMoKTsKLQotICAgIHZvaWQgc2V0dXBTcXVhcmVDYXBQYXRoKFBhdGgqJiB1c2VQYXRo
LCBpbnQmIGFwcGx5TW9kZSk7Ci0gICAgYm9vbCBzZXR1cE5vblNjYWxpbmdTdHJva2VQYXRoKFBh
dGgqJiB1c2VQYXRoLCBHcmFwaGljc0NvbnRleHRTdGF0ZVNhdmVyJik7Ci0gICAgYm9vbCBzaG91
bGRTdHJva2VaZXJvTGVuZ3RoU3VicGF0aCgpIGNvbnN0OwotICAgIEZsb2F0UmVjdCB6ZXJvTGVu
Z3RoU3VicGF0aFJlY3QoKSBjb25zdDsKLQotcHJpdmF0ZToKLSAgICB2aXJ0dWFsIEFmZmluZVRy
YW5zZm9ybSBsb2NhbFRyYW5zZm9ybSgpIGNvbnN0IHsgcmV0dXJuIG1fbG9jYWxUcmFuc2Zvcm07
IH0KLSAgICB2b2lkIGZpbGxBbmRTdHJva2VQYXRoKEdyYXBoaWNzQ29udGV4dCopOwotCi0gICAg
Ym9vbCBtX25lZWRzQm91bmRhcmllc1VwZGF0ZSA6IDE7Ci0gICAgYm9vbCBtX25lZWRzUGF0aFVw
ZGF0ZSA6IDE7Ci0gICAgYm9vbCBtX25lZWRzVHJhbnNmb3JtVXBkYXRlIDogMTsKLQotICAgIG11
dGFibGUgUGF0aCBtX3BhdGg7Ci0gICAgRmxvYXRSZWN0IG1fZmlsbEJvdW5kaW5nQm94OwotICAg
IEZsb2F0UmVjdCBtX3N0cm9rZUFuZE1hcmtlckJvdW5kaW5nQm94OwotICAgIEZsb2F0UmVjdCBt
X3JlcGFpbnRCb3VuZGluZ0JveDsKLSAgICBTVkdNYXJrZXJMYXlvdXRJbmZvIG1fbWFya2VyTGF5
b3V0SW5mbzsKLSAgICBBZmZpbmVUcmFuc2Zvcm0gbV9sb2NhbFRyYW5zZm9ybTsKIH07CiAKLWlu
bGluZSBSZW5kZXJTVkdQYXRoKiB0b1JlbmRlclNWR1BhdGgoUmVuZGVyT2JqZWN0KiBvYmplY3Qp
Ci17Ci0gICAgQVNTRVJUKCFvYmplY3QgfHwgb2JqZWN0LT5pc1NWR1BhdGgoKSk7Ci0gICAgcmV0
dXJuIHN0YXRpY19jYXN0PFJlbmRlclNWR1BhdGgqPihvYmplY3QpOwotfQotCi1pbmxpbmUgY29u
c3QgUmVuZGVyU1ZHUGF0aCogdG9SZW5kZXJTVkdQYXRoKGNvbnN0IFJlbmRlck9iamVjdCogb2Jq
ZWN0KQotewotICAgIEFTU0VSVCghb2JqZWN0IHx8IG9iamVjdC0+aXNTVkdQYXRoKCkpOwotICAg
IHJldHVybiBzdGF0aWNfY2FzdDxjb25zdCBSZW5kZXJTVkdQYXRoKj4ob2JqZWN0KTsKLX0KLQot
Ly8gVGhpcyB3aWxsIGNhdGNoIGFueW9uZSBkb2luZyBhbiB1bm5lY2Vzc2FyeSBjYXN0Lgotdm9p
ZCB0b1JlbmRlclNWR1BhdGgoY29uc3QgUmVuZGVyU1ZHUGF0aCopOwotCiB9CiAKICNlbmRpZiAv
LyBFTkFCTEUoU1ZHKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9S
ZW5kZXJTVkdSZWN0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZH
UmVjdC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmJjMzVkZQotLS0g
L2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVj
dC5jcHAKQEAgLTAsMCArMSwxMzkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgVW5pdmVy
c2l0eSBvZiBTemVnZWQKKyAqIENvcHlyaWdodCAoQykgMjAxMSBSZW5hdGEgSG9kb3ZhbiAocmVu
aUB3ZWJraXQub3JnKQorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFVOSVZFUlNJVFkgT0YgU1pFR0VEIGBgQVMgSVMn
JyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVU5JVkVSU0lUWSBPRiBTWkVHRUQgT1IKKyAqIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisg
KiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAi
Y29uZmlnLmgiCisKKyNpZiBFTkFCTEUoU1ZHKQorI2luY2x1ZGUgIlJlbmRlclNWR1JlY3QuaCIK
KworI2luY2x1ZGUgIlNWR05hbWVzLmgiCisjaW5jbHVkZSAiU1ZHUmVjdEVsZW1lbnQuaCIKKwor
bmFtZXNwYWNlIFdlYkNvcmUgeworCitSZW5kZXJTVkdSZWN0OjpSZW5kZXJTVkdSZWN0KFNWR1N0
eWxlZFRyYW5zZm9ybWFibGVFbGVtZW50KiBub2RlKQorICAgIDogUmVuZGVyU1ZHU2hhcGUobm9k
ZSkKK3sKK30KKworUmVuZGVyU1ZHUmVjdDo6flJlbmRlclNWR1JlY3QoKQoreworfQorCit2b2lk
IFJlbmRlclNWR1JlY3Q6OmNyZWF0ZVNoYXBlKCkKK3sKKyAgICAvLyBDbGVhciBtX3JlY3QuCisg
ICAgbV9yZWN0ID0gRmxvYXRSZWN0KCk7CisgICAgU1ZHUmVjdEVsZW1lbnQqIHJlY3QgPSBzdGF0
aWNfY2FzdDxTVkdSZWN0RWxlbWVudCo+KG5vZGUoKSk7CisgICAgYm9vbCBtX2hhc1J4ID0gcmVj
dC0+aGFzQXR0cmlidXRlKFNWR05hbWVzOjpyeEF0dHIpOworICAgIGJvb2wgbV9oYXNSeSA9IHJl
Y3QtPmhhc0F0dHJpYnV0ZShTVkdOYW1lczo6cnlBdHRyKTsKKyAgICAvLyBGYWxsYmFjayB0byB0
aGUgcGFyZW50IGlmIHJlY3QgaGFzIHNwZWNpYWwgZmVhdHVyZXMuCisgICAgaWYgKG1faGFzUngg
fHwgbV9oYXNSeSB8fCAhc3R5bGUoKS0+c3ZnU3R5bGUoKS0+c3Ryb2tlRGFzaEFycmF5KCkuaXNF
bXB0eSgpKSB7CisgICAgICAgUmVuZGVyU1ZHU2hhcGU6OmNyZWF0ZVNoYXBlKCk7CisgICAgICAg
cmV0dXJuOworICAgIH0KKyAgICBmbG9hdCB3aWR0aFZhbHVlID0gcmVjdC0+d2lkdGgoKS52YWx1
ZShyZWN0KTsKKyAgICBpZiAod2lkdGhWYWx1ZSA8PSAwKQorICAgICAgICByZXR1cm47CisKKyAg
ICBmbG9hdCBoZWlnaHRWYWx1ZSA9IHJlY3QtPmhlaWdodCgpLnZhbHVlKHJlY3QpOworICAgIGlm
IChoZWlnaHRWYWx1ZSA8PSAwKQorICAgICAgICByZXR1cm47CisKKyAgICBmbG9hdCB4VmFsdWUg
PSByZWN0LT54KCkudmFsdWUocmVjdCk7CisgICAgZmxvYXQgeVZhbHVlID0gcmVjdC0+eSgpLnZh
bHVlKHJlY3QpOworICAgIG1fcmVjdCA9IEZsb2F0UmVjdCh4VmFsdWUsIHlWYWx1ZSwgd2lkdGhW
YWx1ZSwgaGVpZ2h0VmFsdWUpOworfQorCisKK0Zsb2F0UmVjdCBSZW5kZXJTVkdSZWN0OjpvYmpl
Y3RCb3VuZGluZ0JveCgpIGNvbnN0Cit7CisgICAgaWYgKGhhc1BhdGgoKSkKKyAgICAgICAgcmV0
dXJuIFJlbmRlclNWR1NoYXBlOjpvYmplY3RCb3VuZGluZ0JveCgpOworICAgIHJldHVybiBtX3Jl
Y3Q7Cit9CisKK0Zsb2F0UmVjdCBSZW5kZXJTVkdSZWN0OjpzdHJva2VCb3VuZGluZ0JveCgpCit7
CisgICAgaWYgKGhhc1BhdGgoKSkKKyAgICAgICAgcmV0dXJuIFJlbmRlclNWR1NoYXBlOjpzdHJv
a2VCb3VuZGluZ0JveCgpOworICAgIC8vIElmIHdlIGluZmxhdGUgdGhlIG1fcmVjdCB3aXRoIHRo
ZSBoYWxmIHNpemUgc3Ryb2tlV2lkdGgsIHdlIGdldCB0aGUgc3Ryb2tlQm91bmRpbmdCb3ggaW4g
bm9uLWZhbGxiYWNrIHBhdGggbW9kZS4KKyAgICBCb3VuZGluZ1JlY3RTdHJva2VTdHlsZUFwcGxp
ZXIgc3Ryb2tlU3R5bGUodGhpcywgc3R5bGUoKSk7CisgICAgRmxvYXRSZWN0IHN0cm9rZVJlY3Qg
PSBtX3JlY3Q7CisgICAgc3Ryb2tlUmVjdC5pbmZsYXRlKHRoaXMtPnN0cm9rZVdpZHRoKCkgLyAy
KTsKKyAgICByZXR1cm4gc3Ryb2tlUmVjdDsKK30KKwordm9pZCBSZW5kZXJTVkdSZWN0OjpmaWxs
U2hhcGUoR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0KQoreworICAgIGlmIChoYXNQYXRoKCkpCisg
ICAgICAgIFJlbmRlclNWR1NoYXBlOjpmaWxsU2hhcGUoY29udGV4dCk7CisgICAgZWxzZQorICAg
ICAgICBjb250ZXh0LT5maWxsUmVjdChtX3JlY3QpOworfQorCit2b2lkIFJlbmRlclNWR1JlY3Q6
OnN0cm9rZVNoYXBlKEdyYXBoaWNzQ29udGV4dCogY29udGV4dCkKK3sKKyAgICBpZiAoaGFzUGF0
aCgpKSB7CisgICAgICAgIFJlbmRlclNWR1NoYXBlOjpzdHJva2VTaGFwZShjb250ZXh0KTsKKyAg
ICAgICAgcmV0dXJuOworICAgIH0KKyAgICBjb250ZXh0LT5zdHJva2VSZWN0KG1fcmVjdCwgdGhp
cy0+c3Ryb2tlV2lkdGgoKSk7Cit9CisKK2Jvb2wgUmVuZGVyU1ZHUmVjdDo6c3Ryb2tlQ29udGFp
bnNTbG93Q2FzZShjb25zdCBGbG9hdFBvaW50JiBwb2ludCkKK3sKKyAgICBpZiAoaGFzUGF0aCgp
KQorICAgICAgICByZXR1cm4gUmVuZGVyU1ZHU2hhcGU6OnN0cm9rZUNvbnRhaW5zU2xvd0Nhc2Uo
cG9pbnQpOworCisgICAgLy8gVG8gZGVjZWlkZSB0aGUgc3Ryb2tlIGNvbnRhaW5pbmcgd2UgY3Jl
YXRlIHR3byByZWN0cyB3aGljaCByZXByZXNlbnQgdGhlIGlubmVyIGFuZAorICAgIC8vIHRoZSBv
dXRlciBzdHJva2UgYm9yZGVycy4gVGhlIGNvbnRhaW5pbmcgZXhpc3RzLCBpZiB0aGUgcG9pbnQg
aXMgYmV0d2VlbiB0aGVtLgorICAgIGZsb2F0IHN0cm9rZVdpZHRoID0gdGhpcy0+c3Ryb2tlV2lk
dGgoKTsKKyAgICBGbG9hdFJlY3QgaW5uZXJTdHJva2VSZWN0ID0gbV9yZWN0OworICAgIEZsb2F0
UmVjdCBvdXRlclN0cm9rZVJlY3QgPSBtX3JlY3Q7CisgICAgaW5uZXJTdHJva2VSZWN0LmluZmxh
dGUoLXN0cm9rZVdpZHRoIC8gMik7CisgICAgb3V0ZXJTdHJva2VSZWN0LmluZmxhdGUoc3Ryb2tl
V2lkdGggLyAyKTsKKyAgICByZXR1cm4gKGRldGVybWluZVBvaW50TG9jYXRpb24ocG9pbnQsIGlu
bmVyU3Ryb2tlUmVjdCkgIT0gSW5zaWRlU2hhcGUKKyAgICAgICAgICAgICYmIGRldGVybWluZVBv
aW50TG9jYXRpb24ocG9pbnQsIG91dGVyU3Ryb2tlUmVjdCkgIT0gT3V0c2lkZVNoYXBlKSA/ICB0
cnVlIDogZmFsc2U7Cit9CisKK2Jvb2wgUmVuZGVyU1ZHUmVjdDo6ZmlsbENvbnRhaW5zU2xvd0Nh
c2UoY29uc3QgRmxvYXRQb2ludCYgcG9pbnQsIGNvbnN0IFdpbmRSdWxlJikgY29uc3QKK3sKKyAg
ICByZXR1cm4gKGRldGVybWluZVBvaW50TG9jYXRpb24ocG9pbnQsIG1fcmVjdCkgIT0gT3V0c2lk
ZVNoYXBlKSA/IHRydWUgOiBmYWxzZTsKK30KKworUG9pbnRMb2NhdGlvbiBSZW5kZXJTVkdSZWN0
OjpkZXRlcm1pbmVQb2ludExvY2F0aW9uKGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50LCBjb25zdCBG
bG9hdFJlY3QmIHJlY3QpIGNvbnN0Cit7CisgICAgLy8gVGVzdCB3aGV0aGVyIHRoZSByZWN0IGNv
bnRhaW5zIHRoZSBjZXJ0YWluIHBvaW50IG9yIG5vdAorICAgIGlmICghcmVjdC5jb250YWlucyhw
b2ludCkpCisgICAgICAgIHJldHVybiBPdXRzaWRlU2hhcGU7CisgICAgcmV0dXJuIChyZWN0Lngo
KSA8IHBvaW50LngoKSAmJiByZWN0Lm1heFgoKSA+IHBvaW50LngoKSAmJiByZWN0LnkoKSA8IHBv
aW50LnkoKSAmJiByZWN0Lm1heFkoKSA+IHBvaW50LnkoKSkgPyBJbnNpZGVTaGFwZSA6IE9uU3Ry
b2tlOworfQorCit9CisKKyNlbmRpZiAvLyBFTkFCTEUoU1ZHKQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZWN0LmggYi9Tb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1JlY3QuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwLi4wNzFlZjJhCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL3N2Zy9SZW5kZXJTVkdSZWN0LmgKQEAgLTAsMCArMSw2MiBAQAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAxMSBVbml2ZXJzaXR5IG9mIFN6ZWdlZAorICogQ29weXJpZ2h0IChDKSAyMDExIFJl
bmF0YSBIb2RvdmFuIChyZW5pQHdlYmtpdC5vcmcpCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVU5JVkVSU0lUWSBP
RiBTWkVHRUQgYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBVTklWRVJTSVRZIE9G
IFNaRUdFRCBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVO
VCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IK
KyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgor
ICovCisKKyNpZm5kZWYgUmVuZGVyU1ZHUmVjdF9oCisjZGVmaW5lIFJlbmRlclNWR1JlY3RfaAor
CisjaWYgRU5BQkxFKFNWRykKKyNpbmNsdWRlICJSZW5kZXJTVkdQYXRoLmgiCisKK25hbWVzcGFj
ZSBXZWJDb3JlIHsKKworY2xhc3MgUmVuZGVyU1ZHUmVjdCA6IHB1YmxpYyBSZW5kZXJTVkdTaGFw
ZSB7CitwdWJsaWM6CisgICAgZXhwbGljaXQgUmVuZGVyU1ZHUmVjdChTVkdTdHlsZWRUcmFuc2Zv
cm1hYmxlRWxlbWVudCopOworICAgIHZpcnR1YWwgflJlbmRlclNWR1JlY3QoKTsKKworcHJpdmF0
ZToKKyAgICB2aXJ0dWFsIGJvb2wgaXNTVkdSZWN0KCkgY29uc3QgeyByZXR1cm4gdHJ1ZTsgfQor
ICAgIHZpcnR1YWwgY29uc3QgY2hhciogcmVuZGVyTmFtZSgpIGNvbnN0IHsgcmV0dXJuICJSZW5k
ZXJTVkdSZWN0IjsgfQorCisgICAgdm9pZCBjcmVhdGVTaGFwZSgpOworICAgIGJvb2wgaXNFbXB0
eSgpIGNvbnN0IHsgcmV0dXJuIGhhc1BhdGgoKSA/IFJlbmRlclNWR1NoYXBlOjppc0VtcHR5KCkg
OiBtX3JlY3QuaXNFbXB0eSgpOyB9OworICAgIHZvaWQgZmlsbFNoYXBlKEdyYXBoaWNzQ29udGV4
dCopOworICAgIEZsb2F0UmVjdCBvYmplY3RCb3VuZGluZ0JveCgpIGNvbnN0OworICAgIEZsb2F0
UmVjdCBzdHJva2VCb3VuZGluZ0JveCgpOworICAgIHZvaWQgc3Ryb2tlU2hhcGUoR3JhcGhpY3ND
b250ZXh0Kik7CisgICAgYm9vbCBzdHJva2VDb250YWluc1Nsb3dDYXNlKGNvbnN0IEZsb2F0UG9p
bnQmKTsKKyAgICBib29sIGZpbGxDb250YWluc1Nsb3dDYXNlKGNvbnN0IEZsb2F0UG9pbnQmLCBj
b25zdCBXaW5kUnVsZSYpIGNvbnN0OworICAgIFBvaW50TG9jYXRpb24gZGV0ZXJtaW5lUG9pbnRM
b2NhdGlvbihjb25zdCBGbG9hdFBvaW50JiwgY29uc3QgRmxvYXRSZWN0JikgY29uc3Q7CisKK3By
aXZhdGU6CisgICAgRmxvYXRSZWN0IG1fcmVjdDsKK307CisKK30KKworI2VuZGlmIC8vIEVOQUJM
RShTVkcpCisjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcv
UmVuZGVyU1ZHUmVzb3VyY2VDbGlwcGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9z
dmcvUmVuZGVyU1ZHUmVzb3VyY2VDbGlwcGVyLmNwcAppbmRleCAyMzhjMDk2Li4xZDgyMTIxIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291cmNl
Q2xpcHBlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdS
ZXNvdXJjZUNsaXBwZXIuY3BwCkBAIC0yNDIsNyArMjQyLDcgQEAgYm9vbCBSZW5kZXJTVkdSZXNv
dXJjZUNsaXBwZXI6OmRyYXdDb250ZW50SW50b01hc2tJbWFnZShDbGlwcGVyRGF0YSogY2xpcHBl
ckRhdGEKICAgICAgICAgfQogCiAgICAgICAgIC8vIE9ubHkgc2hhcGVzLCBwYXRocyBhbmQgdGV4
dHMgYXJlIGFsbG93ZWQgZm9yIGNsaXBwaW5nLgotICAgICAgICBpZiAoIXJlbmRlcmVyLT5pc1NW
R1BhdGgoKSAmJiAhcmVuZGVyZXItPmlzU1ZHVGV4dCgpKQorICAgICAgICBpZiAoIXJlbmRlcmVy
LT5pc1NWR1NoYXBlKCkgJiYgIXJlbmRlcmVyLT5pc1NWR1RleHQoKSkKICAgICAgICAgICAgIGNv
bnRpbnVlOwogCiAgICAgICAgIC8vIFNhdmUgdGhlIG9sZCBSZW5kZXJTdHlsZSBvZiB0aGUgY3Vy
cmVudCBvYmplY3QgZm9yIHJlc3RvcmluZyBhZnRlciBkcmF3aW5nCkBAIC0yODQsNyArMjg0LDcg
QEAgdm9pZCBSZW5kZXJTVkdSZXNvdXJjZUNsaXBwZXI6OmNhbGN1bGF0ZUNsaXBDb250ZW50UmVw
YWludFJlY3QoKQogICAgICAgICBSZW5kZXJPYmplY3QqIHJlbmRlcmVyID0gY2hpbGROb2RlLT5y
ZW5kZXJlcigpOwogICAgICAgICBpZiAoIWNoaWxkTm9kZS0+aXNTVkdFbGVtZW50KCkgfHwgIXN0
YXRpY19jYXN0PFNWR0VsZW1lbnQqPihjaGlsZE5vZGUpLT5pc1N0eWxlZCgpIHx8ICFyZW5kZXJl
cikKICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICBpZiAoIXJlbmRlcmVyLT5pc1NWR1Bh
dGgoKSAmJiAhcmVuZGVyZXItPmlzU1ZHVGV4dCgpICYmICFyZW5kZXJlci0+aXNTVkdTaGFkb3dU
cmVlUm9vdENvbnRhaW5lcigpKQorICAgICAgICBpZiAoIXJlbmRlcmVyLT5pc1NWR1NoYXBlKCkg
JiYgIXJlbmRlcmVyLT5pc1NWR1RleHQoKSAmJiAhcmVuZGVyZXItPmlzU1ZHU2hhZG93VHJlZVJv
b3RDb250YWluZXIoKSkKICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICBSZW5kZXJTdHls
ZSogc3R5bGUgPSByZW5kZXJlci0+c3R5bGUoKTsKICAgICAgICAgaWYgKCFzdHlsZSB8fCBzdHls
ZS0+ZGlzcGxheSgpID09IE5PTkUgfHwgc3R5bGUtPnZpc2liaWxpdHkoKSAhPSBWSVNJQkxFKQpA
QCAtMzEwLDcgKzMxMCw3IEBAIGJvb2wgUmVuZGVyU1ZHUmVzb3VyY2VDbGlwcGVyOjpoaXRUZXN0
Q2xpcENvbnRlbnQoY29uc3QgRmxvYXRSZWN0JiBvYmplY3RCb3VuZGluCiAgICAgICAgIFJlbmRl
ck9iamVjdCogcmVuZGVyZXIgPSBjaGlsZE5vZGUtPnJlbmRlcmVyKCk7CiAgICAgICAgIGlmICgh
Y2hpbGROb2RlLT5pc1NWR0VsZW1lbnQoKSB8fCAhc3RhdGljX2Nhc3Q8U1ZHRWxlbWVudCo+KGNo
aWxkTm9kZSktPmlzU3R5bGVkKCkgfHwgIXJlbmRlcmVyKQogICAgICAgICAgICAgY29udGludWU7
Ci0gICAgICAgIGlmICghcmVuZGVyZXItPmlzU1ZHUGF0aCgpICYmICFyZW5kZXJlci0+aXNTVkdU
ZXh0KCkgJiYgIXJlbmRlcmVyLT5pc1NWR1NoYWRvd1RyZWVSb290Q29udGFpbmVyKCkpCisgICAg
ICAgIGlmICghcmVuZGVyZXItPmlzU1ZHU2hhcGUoKSAmJiAhcmVuZGVyZXItPmlzU1ZHVGV4dCgp
ICYmICFyZW5kZXJlci0+aXNTVkdTaGFkb3dUcmVlUm9vdENvbnRhaW5lcigpKQogICAgICAgICAg
ICAgY29udGludWU7CiAgICAgICAgIEludFBvaW50IGhpdFBvaW50OwogICAgICAgICBIaXRUZXN0
UmVzdWx0IHJlc3VsdChoaXRQb2ludCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291cmNlQ29udGFpbmVyLmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VDb250YWluZXIuY3BwCmluZGV4IDc0ZDVk
NjkuLmI3NGFkNmIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVu
ZGVyU1ZHUmVzb3VyY2VDb250YWluZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VDb250YWluZXIuY3BwCkBAIC0xODAsNyArMTgwLDcgQEAg
dm9pZCBSZW5kZXJTVkdSZXNvdXJjZUNvbnRhaW5lcjo6cmVnaXN0ZXJSZXNvdXJjZSgpCiAvLyBG
SVhNRTogVGhpcyBkb2VzIG5vdCBiZWxvbmcgaGVyZS4KIEFmZmluZVRyYW5zZm9ybSBSZW5kZXJT
VkdSZXNvdXJjZUNvbnRhaW5lcjo6dHJhbnNmb3JtT25Ob25TY2FsaW5nU3Ryb2tlKFJlbmRlck9i
amVjdCogb2JqZWN0LCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHJlc291cmNlVHJhbnNmb3JtKQog
ewotICAgIGlmICghb2JqZWN0LT5pc1NWR1BhdGgoKSkKKyAgICBpZiAoIW9iamVjdC0+aXNTVkdT
aGFwZSgpKQogICAgICAgICByZXR1cm4gcmVzb3VyY2VUcmFuc2Zvcm07CiAKICAgICBTVkdTdHls
ZWRUcmFuc2Zvcm1hYmxlRWxlbWVudCogZWxlbWVudCA9IHN0YXRpY19jYXN0PFNWR1N0eWxlZFRy
YW5zZm9ybWFibGVFbGVtZW50Kj4ob2JqZWN0LT5ub2RlKCkpOwpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdTaGFwZS5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1NoYXBlLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwMDAwMDAwLi5iZGM5NGVkCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdTaGFwZS5jcHAKQEAgLTAsMCArMSw0MjQgQEAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUsIDIwMDcgTmlrb2xhcyBaaW1tZXJtYW5uIDx6aW1t
ZXJtYW5uQGtkZS5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUsIDIwMDggUm9iIEJ1
aXMgPGJ1aXNAa2RlLm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAwNSwgMjAwNyBFcmljIFNlaWRl
bCA8ZXJpY0B3ZWJraXQub3JnPgorICogQ29weXJpZ2h0IChDKSAyMDA5IEdvb2dsZSwgSW5jLgor
ICogQ29weXJpZ2h0IChDKSAyMDA5IERpcmsgU2NodWx6ZSA8a3JpdEB3ZWJraXQub3JnPgorICog
Q29weXJpZ2h0IChDKSBSZXNlYXJjaCBJbiBNb3Rpb24gTGltaXRlZCAyMDEwLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA5IEplZmYgU2NoaWxsZXIgPGNvZGVkcmVh
ZEBnbWFpbC5jb20+CisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgUmVuYXRhIEhvZG92YW4gPHJlbmlA
d2Via2l0Lm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAxMSBVbml2ZXJzaXR5IG9mIFN6ZWdlZAor
ICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0
ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJy
YXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBT
b2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwg
b3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJh
cnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAq
IGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJh
bnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBV
UlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZv
ciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBv
ZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0
aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8K
KyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVl
dCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisj
aW5jbHVkZSAiY29uZmlnLmgiCisKKyNpZiBFTkFCTEUoU1ZHKQorI2luY2x1ZGUgIlJlbmRlclNW
R1NoYXBlLmgiCisKKyNpbmNsdWRlICJGbG9hdFBvaW50LmgiCisjaW5jbHVkZSAiRmxvYXRRdWFk
LmgiCisjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCisjaW5jbHVkZSAiSGl0VGVzdFJlcXVl
c3QuaCIKKyNpbmNsdWRlICJQb2ludGVyRXZlbnRzSGl0UnVsZXMuaCIKKyNpbmNsdWRlICJSZW5k
ZXJTVkdDb250YWluZXIuaCIKKyNpbmNsdWRlICJSZW5kZXJTVkdSZXNvdXJjZU1hcmtlci5oIgor
I2luY2x1ZGUgIlJlbmRlclNWR1Jlc291cmNlU29saWRDb2xvci5oIgorI2luY2x1ZGUgIlNWR1Bh
dGhFbGVtZW50LmgiCisjaW5jbHVkZSAiU1ZHUmVuZGVyU3VwcG9ydC5oIgorI2luY2x1ZGUgIlNW
R1Jlc291cmNlcy5oIgorI2luY2x1ZGUgIlNWR1N0eWxlZFRyYW5zZm9ybWFibGVFbGVtZW50Lmgi
CisjaW5jbHVkZSAiU1ZHVHJhbnNmb3JtTGlzdC5oIgorI2luY2x1ZGUgIlNWR1VSSVJlZmVyZW5j
ZS5oIgorI2luY2x1ZGUgIlN0cm9rZVN0eWxlQXBwbGllci5oIgorI2luY2x1ZGUgPHd0Zi9NYXRo
RXh0cmFzLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworUmVuZGVyU1ZHU2hhcGU6OlJlbmRl
clNWR1NoYXBlKFNWR1N0eWxlZFRyYW5zZm9ybWFibGVFbGVtZW50KiBub2RlKQorICAgIDogUmVu
ZGVyU1ZHTW9kZWxPYmplY3Qobm9kZSkKKyAgICAsIG1fbmVlZHNCb3VuZGFyaWVzVXBkYXRlKGZh
bHNlKSAvLyBkZWZhdWx0IGlzIGZhbHNlLCB0aGUgY2FjaGVkIHJlY3RzIGFyZSBlbXB0eSBmcm9t
IHRoZSBiZWdpbm5pbmcKKyAgICAsIG1fbmVlZHNTaGFwZVVwZGF0ZSh0cnVlKSAvLyBkZWZhdWx0
IGlzIHRydWUsIHNvIHdlIGdyYWIgYSBQYXRoIG9iamVjdCBvbmNlIGZyb20gU1ZHU3R5bGVkVHJh
bnNmb3JtYWJsZUVsZW1lbnQKKyAgICAsIG1fbmVlZHNUcmFuc2Zvcm1VcGRhdGUodHJ1ZSkgLy8g
ZGVmYXVsdCBpcyB0cnVlLCBzbyB3ZSBncmFiIGEgQWZmaW5lVHJhbnNmb3JtIG9iamVjdCBvbmNl
IGZyb20gU1ZHU3R5bGVkVHJhbnNmb3JtYWJsZUVsZW1lbnQKK3sKK30KKworUmVuZGVyU1ZHU2hh
cGU6On5SZW5kZXJTVkdTaGFwZSgpCit7Cit9CisKK3ZvaWQgUmVuZGVyU1ZHU2hhcGU6OmNyZWF0
ZVNoYXBlKCkKK3sKKyAgICBtX3BhdGggPSBhZG9wdFB0cihuZXcgUGF0aCk7CisgICAgQVNTRVJU
KGlzRW1wdHkoKSk7CisKKyAgICBTVkdQYXRoRWxlbWVudCogZWxlbWVudCA9IHN0YXRpY19jYXN0
PFNWR1BhdGhFbGVtZW50Kj4obm9kZSgpKTsKKyAgICBlbGVtZW50LT50b1BhdGhEYXRhKHBhdGgo
KSk7Cit9CisKK2Jvb2wgUmVuZGVyU1ZHU2hhcGU6OmlzRW1wdHkoKSBjb25zdAoreworICAgIHJl
dHVybiBwYXRoKCkuaXNFbXB0eSgpOworfQorCit2b2lkIFJlbmRlclNWR1NoYXBlOjpmaWxsU2hh
cGUoR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0KQoreworICAgIGNvbnRleHQtPmZpbGxQYXRoKHBh
dGgoKSk7Cit9CisKK0Zsb2F0UmVjdCBSZW5kZXJTVkdTaGFwZTo6b2JqZWN0Qm91bmRpbmdCb3go
KSBjb25zdAoreworICAgIHJldHVybiBtX3BhdGgtPmJvdW5kaW5nUmVjdCgpOworfQorCitGbG9h
dFJlY3QgUmVuZGVyU1ZHU2hhcGU6OnN0cm9rZUJvdW5kaW5nQm94KCkKK3sKKyAgICBCb3VuZGlu
Z1JlY3RTdHJva2VTdHlsZUFwcGxpZXIgc3Ryb2tlU3R5bGUodGhpcywgc3R5bGUoKSk7CisgICAg
cmV0dXJuIHBhdGgoKS5zdHJva2VCb3VuZGluZ1JlY3QoJnN0cm9rZVN0eWxlKTsKK30KKwordm9p
ZCBSZW5kZXJTVkdTaGFwZTo6c3Ryb2tlU2hhcGUoR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0KQor
eworICAgIGNvbnRleHQtPnN0cm9rZVBhdGgocGF0aCgpKTsKK30KKworYm9vbCBSZW5kZXJTVkdT
aGFwZTo6c3Ryb2tlQ29udGFpbnNTbG93Q2FzZShjb25zdCBGbG9hdFBvaW50JiBwb2ludCkKK3sK
KyAgICBCb3VuZGluZ1JlY3RTdHJva2VTdHlsZUFwcGxpZXIgYXBwbGllcih0aGlzLCBzdHlsZSgp
KTsKKyAgICByZXR1cm4gcGF0aCgpLnN0cm9rZUNvbnRhaW5zKCZhcHBsaWVyLCBwb2ludCk7Cit9
CisKK2Jvb2wgUmVuZGVyU1ZHU2hhcGU6OmZpbGxDb250YWluc1Nsb3dDYXNlKGNvbnN0IEZsb2F0
UG9pbnQmIHBvaW50LCBjb25zdCBXaW5kUnVsZSYgZmlsbFJ1bGUpIGNvbnN0Cit7CisgICAgcmV0
dXJuIHBhdGgoKS5jb250YWlucyhwb2ludCwgZmlsbFJ1bGUpOworfQorCitib29sIFJlbmRlclNW
R1NoYXBlOjpmaWxsQ29udGFpbnMoY29uc3QgRmxvYXRQb2ludCYgcG9pbnQsIGJvb2wgcmVxdWly
ZXNGaWxsLCBXaW5kUnVsZSBmaWxsUnVsZSkKK3sKKyAgICBpZiAoIW1fZmlsbEJvdW5kaW5nQm94
LmNvbnRhaW5zKHBvaW50KSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgQ29sb3IgZmFs
bGJhY2tDb2xvcjsKKyAgICBpZiAocmVxdWlyZXNGaWxsICYmICFSZW5kZXJTVkdSZXNvdXJjZTo6
ZmlsbFBhaW50aW5nUmVzb3VyY2UodGhpcywgc3R5bGUoKSwgZmFsbGJhY2tDb2xvcikpCisgICAg
ICAgIHJldHVybiBmYWxzZTsKKworICAgIHJldHVybiBmaWxsQ29udGFpbnNTbG93Q2FzZShwb2lu
dCwgZmlsbFJ1bGUpOworfQorCitib29sIFJlbmRlclNWR1NoYXBlOjpzdHJva2VDb250YWlucyhj
b25zdCBGbG9hdFBvaW50JiBwb2ludCwgYm9vbCByZXF1aXJlc1N0cm9rZSkKK3sKKyAgICBpZiAo
IW1fc3Ryb2tlQW5kTWFya2VyQm91bmRpbmdCb3guY29udGFpbnMocG9pbnQpKQorICAgICAgICBy
ZXR1cm4gZmFsc2U7CisKKyAgICBDb2xvciBmYWxsYmFja0NvbG9yOworICAgIGlmIChyZXF1aXJl
c1N0cm9rZSAmJiAhUmVuZGVyU1ZHUmVzb3VyY2U6OnN0cm9rZVBhaW50aW5nUmVzb3VyY2UodGhp
cywgc3R5bGUoKSwgZmFsbGJhY2tDb2xvcikpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAg
IGlmIChzaG91bGRTdHJva2VaZXJvTGVuZ3RoU3VicGF0aCgpKQorICAgICAgICByZXR1cm4gemVy
b0xlbmd0aFN1YnBhdGhSZWN0KCkuY29udGFpbnMocG9pbnQpOworCisgICAgcmV0dXJuIHN0cm9r
ZUNvbnRhaW5zU2xvd0Nhc2UocG9pbnQpOworfQorCit2b2lkIFJlbmRlclNWR1NoYXBlOjpsYXlv
dXQoKQoreworICAgIExheW91dFJlcGFpbnRlciByZXBhaW50ZXIoKnRoaXMsIGNoZWNrRm9yUmVw
YWludER1cmluZ0xheW91dCgpICYmIHNlbGZOZWVkc0xheW91dCgpKTsKKyAgICBTVkdTdHlsZWRU
cmFuc2Zvcm1hYmxlRWxlbWVudCogZWxlbWVudCA9IHN0YXRpY19jYXN0PFNWR1N0eWxlZFRyYW5z
Zm9ybWFibGVFbGVtZW50Kj4obm9kZSgpKTsKKworICAgIGJvb2wgdXBkYXRlQ2FjaGVkQm91bmRh
cmllc0luUGFyZW50cyA9IGZhbHNlOworCisgICAgYm9vbCBuZWVkc1NoYXBlVXBkYXRlID0gbV9u
ZWVkc1NoYXBlVXBkYXRlOworICAgIGlmIChuZWVkc1NoYXBlVXBkYXRlKSB7OworICAgICAgICBj
cmVhdGVTaGFwZSgpOworICAgICAgICBtX25lZWRzU2hhcGVVcGRhdGUgPSBmYWxzZTsKKyAgICAg
ICAgdXBkYXRlQ2FjaGVkQm91bmRhcmllc0luUGFyZW50cyA9IHRydWU7CisgICAgfQorCisgICAg
aWYgKG1fbmVlZHNUcmFuc2Zvcm1VcGRhdGUpIHsKKyAgICAgICAgbV9sb2NhbFRyYW5zZm9ybSA9
IGVsZW1lbnQtPmFuaW1hdGVkTG9jYWxUcmFuc2Zvcm0oKTsKKyAgICAgICAgbV9uZWVkc1RyYW5z
Zm9ybVVwZGF0ZSA9IGZhbHNlOworICAgICAgICB1cGRhdGVDYWNoZWRCb3VuZGFyaWVzSW5QYXJl
bnRzID0gdHJ1ZTsKKyAgICB9CisKKyAgICBpZiAobV9uZWVkc0JvdW5kYXJpZXNVcGRhdGUpCisg
ICAgICAgIHVwZGF0ZUNhY2hlZEJvdW5kYXJpZXNJblBhcmVudHMgPSB0cnVlOworCisgICAgLy8g
SW52YWxpZGF0ZSBhbGwgcmVzb3VyY2VzIG9mIHRoaXMgY2xpZW50IGlmIG91ciBsYXlvdXQgY2hh
bmdlZC4KKyAgICBpZiAobV9ldmVySGFkTGF5b3V0ICYmIHNlbGZOZWVkc0xheW91dCgpKSB7Cisg
ICAgICAgIFNWR1Jlc291cmNlc0NhY2hlOjpjbGllbnRMYXlvdXRDaGFuZ2VkKHRoaXMpOworICAg
ICAgICBtX21hcmtlckxheW91dEluZm8uY2xlYXIoKTsKKyAgICB9CisKKyAgICAvLyBBdCB0aGlz
IHBvaW50IExheW91dFJlcGFpbnRlciBhbHJlYWR5IGdyYWJiZWQgdGhlIG9sZCBib3VuZHMsCisg
ICAgLy8gcmVjYWxjdWxhdGUgdGhlbSBub3cgc28gcmVwYWludEFmdGVyTGF5b3V0KCkgdXNlcyB0
aGUgbmV3IGJvdW5kcy4KKyAgICBpZiAobmVlZHNTaGFwZVVwZGF0ZSB8fCBtX25lZWRzQm91bmRh
cmllc1VwZGF0ZSkgeworICAgICAgICB1cGRhdGVDYWNoZWRCb3VuZGFyaWVzKCk7CisgICAgICAg
IG1fbmVlZHNCb3VuZGFyaWVzVXBkYXRlID0gZmFsc2U7CisgICAgfQorCisgICAgLy8gSWYgb3Vy
IGJvdW5kcyBjaGFuZ2VkLCBub3RpZnkgdGhlIHBhcmVudHMuCisgICAgaWYgKHVwZGF0ZUNhY2hl
ZEJvdW5kYXJpZXNJblBhcmVudHMpCisgICAgICAgIFJlbmRlclNWR01vZGVsT2JqZWN0OjpzZXRO
ZWVkc0JvdW5kYXJpZXNVcGRhdGUoKTsKKworICAgIHJlcGFpbnRlci5yZXBhaW50QWZ0ZXJMYXlv
dXQoKTsKKyAgICBzZXROZWVkc0xheW91dChmYWxzZSk7Cit9CisKK2Jvb2wgUmVuZGVyU1ZHU2hh
cGU6OnNob3VsZFN0cm9rZVplcm9MZW5ndGhTdWJwYXRoKCkgY29uc3QKK3sKKyAgICAvLyBTcGVj
KDExLjQpOiBBbnkgemVybyBsZW5ndGggc3VicGF0aCBzaGFsbCBub3QgYmUgc3Ryb2tlZCBpZiB0
aGUg4oCYc3Ryb2tlLWxpbmVjYXDigJkgcHJvcGVydHkgaGFzIGEgdmFsdWUgb2YgYnV0dAorICAg
IC8vIGJ1dCBzaGFsbCBiZSBzdHJva2VkIGlmIHRoZSDigJhzdHJva2UtbGluZWNhcOKAmSBwcm9w
ZXJ0eSBoYXMgYSB2YWx1ZSBvZiByb3VuZCBvciBzcXVhcmUKKyAgICByZXR1cm4gc3R5bGUoKS0+
c3ZnU3R5bGUoKS0+aGFzU3Ryb2tlKCkgJiYgc3R5bGUoKS0+c3ZnU3R5bGUoKS0+Y2FwU3R5bGUo
KSAhPSBCdXR0Q2FwICYmICFtX2ZpbGxCb3VuZGluZ0JveC53aWR0aCgpICYmICFtX2ZpbGxCb3Vu
ZGluZ0JveC5oZWlnaHQoKTsKK30KKworRmxvYXRSZWN0IFJlbmRlclNWR1NoYXBlOjp6ZXJvTGVu
Z3RoU3VicGF0aFJlY3QoKSBjb25zdAoreworICAgIGZsb2F0IHN0cm9rZVdpZHRoID0gdGhpcy0+
c3Ryb2tlV2lkdGgoKTsKKyAgICByZXR1cm4gRmxvYXRSZWN0KG1fZmlsbEJvdW5kaW5nQm94Lngo
KSAtIHN0cm9rZVdpZHRoIC8gMiwgbV9maWxsQm91bmRpbmdCb3gueSgpIC0gc3Ryb2tlV2lkdGgg
LyAyLCBzdHJva2VXaWR0aCwgc3Ryb2tlV2lkdGgpOworfQorCit2b2lkIFJlbmRlclNWR1NoYXBl
OjpzZXR1cFNxdWFyZUNhcFBhdGgoUGF0aComIHVzZVBhdGgsIGludCYgYXBwbHlNb2RlKQorewor
ICAgIC8vIFNwZWMoMTEuNCk6IEFueSB6ZXJvIGxlbmd0aCBzdWJwYXRoIHNoYWxsIG5vdCBiZSBz
dHJva2VkIGlmIHRoZSDigJhzdHJva2UtbGluZWNhcOKAmSBwcm9wZXJ0eSBoYXMgYSB2YWx1ZSBv
ZiBidXR0CisgICAgLy8gYnV0IHNoYWxsIGJlIHN0cm9rZWQgaWYgdGhlIOKAmHN0cm9rZS1saW5l
Y2Fw4oCZIHByb3BlcnR5IGhhcyBhIHZhbHVlIG9mIHJvdW5kIG9yIHNxdWFyZQorICAgIERFRklO
RV9TVEFUSUNfTE9DQUwoUGF0aCwgdGVtcFBhdGgsICgpKTsKKworICAgIGFwcGx5TW9kZSA9IEFw
cGx5VG9GaWxsTW9kZTsKKyAgICB1c2VQYXRoID0gJnRlbXBQYXRoOworICAgIHVzZVBhdGgtPmNs
ZWFyKCk7CisgICAgaWYgKHN0eWxlKCktPnN2Z1N0eWxlKCktPmNhcFN0eWxlKCkgPT0gU3F1YXJl
Q2FwKQorICAgICAgICB1c2VQYXRoLT5hZGRSZWN0KHplcm9MZW5ndGhTdWJwYXRoUmVjdCgpKTsK
KyAgICBlbHNlCisgICAgICAgIHVzZVBhdGgtPmFkZEVsbGlwc2UoemVyb0xlbmd0aFN1YnBhdGhS
ZWN0KCkpOworfQorCitib29sIFJlbmRlclNWR1NoYXBlOjpzZXR1cE5vblNjYWxpbmdTdHJva2VQ
YXRoKFBhdGgqJiB1c2VQYXRoLCBHcmFwaGljc0NvbnRleHRTdGF0ZVNhdmVyJiBzdGF0ZVNhdmVy
KQoreworICAgIERFRklORV9TVEFUSUNfTE9DQUwoUGF0aCwgdGVtcFBhdGgsICgpKTsKKworICAg
IFNWR1N0eWxlZFRyYW5zZm9ybWFibGVFbGVtZW50KiBlbGVtZW50ID0gc3RhdGljX2Nhc3Q8U1ZH
U3R5bGVkVHJhbnNmb3JtYWJsZUVsZW1lbnQqPihub2RlKCkpOworICAgIEFmZmluZVRyYW5zZm9y
bSBub25TY2FsaW5nU3Ryb2tlVHJhbnNmb3JtID0gZWxlbWVudC0+Z2V0U2NyZWVuQ1RNKFNWR0xv
Y2F0YWJsZTo6RGlzYWxsb3dTdHlsZVVwZGF0ZSk7CisgICAgaWYgKCFub25TY2FsaW5nU3Ryb2tl
VHJhbnNmb3JtLmlzSW52ZXJ0aWJsZSgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICB0
ZW1wUGF0aCA9ICptX3BhdGg7CisgICAgdXNlUGF0aCA9ICZ0ZW1wUGF0aDsKKyAgICB0ZW1wUGF0
aC50cmFuc2Zvcm0obm9uU2NhbGluZ1N0cm9rZVRyYW5zZm9ybSk7CisKKyAgICBzdGF0ZVNhdmVy
LnNhdmUoKTsKKyAgICBzdGF0ZVNhdmVyLmNvbnRleHQoKS0+Y29uY2F0Q1RNKG5vblNjYWxpbmdT
dHJva2VUcmFuc2Zvcm0uaW52ZXJzZSgpKTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKwordm9pZCBS
ZW5kZXJTVkdTaGFwZTo6ZmlsbEFuZFN0cm9rZVBhdGgoR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0
KQoreworICAgIFJlbmRlclN0eWxlKiBzdHlsZSA9IHRoaXMtPnN0eWxlKCk7CisKKyAgICBDb2xv
ciBmYWxsYmFja0NvbG9yOworICAgIGlmIChSZW5kZXJTVkdSZXNvdXJjZSogZmlsbFBhaW50aW5n
UmVzb3VyY2UgPSBSZW5kZXJTVkdSZXNvdXJjZTo6ZmlsbFBhaW50aW5nUmVzb3VyY2UodGhpcywg
c3R5bGUsIGZhbGxiYWNrQ29sb3IpKSB7CisgICAgICAgIGlmIChmaWxsUGFpbnRpbmdSZXNvdXJj
ZS0+YXBwbHlSZXNvdXJjZSh0aGlzLCBzdHlsZSwgY29udGV4dCwgQXBwbHlUb0ZpbGxNb2RlKSkg
eworICAgICAgICAgICAgZmlsbFNoYXBlKGNvbnRleHQpOworICAgICAgICB9IGVsc2UgaWYgKGZh
bGxiYWNrQ29sb3IuaXNWYWxpZCgpKSB7CisgICAgICAgICAgICBSZW5kZXJTVkdSZXNvdXJjZVNv
bGlkQ29sb3IqIGZhbGxiYWNrUmVzb3VyY2UgPSBSZW5kZXJTVkdSZXNvdXJjZTo6c2hhcmVkU29s
aWRQYWludGluZ1Jlc291cmNlKCk7CisgICAgICAgICAgICBmYWxsYmFja1Jlc291cmNlLT5zZXRD
b2xvcihmYWxsYmFja0NvbG9yKTsKKyAgICAgICAgICAgIGlmIChmYWxsYmFja1Jlc291cmNlLT5h
cHBseVJlc291cmNlKHRoaXMsIHN0eWxlLCBjb250ZXh0LCBBcHBseVRvRmlsbE1vZGUpKQorICAg
ICAgICAgICAgICAgIGZpbGxTaGFwZShjb250ZXh0KTsKKyAgICAgICAgfQorICAgIH0KKworICAg
IGZhbGxiYWNrQ29sb3IgPSBDb2xvcigpOworICAgIFJlbmRlclNWR1Jlc291cmNlKiBzdHJva2VQ
YWludGluZ1Jlc291cmNlID0gUmVuZGVyU1ZHUmVzb3VyY2U6OnN0cm9rZVBhaW50aW5nUmVzb3Vy
Y2UodGhpcywgc3R5bGUsIGZhbGxiYWNrQ29sb3IpOworICAgIGlmICghc3Ryb2tlUGFpbnRpbmdS
ZXNvdXJjZSkKKyAgICAgICAgcmV0dXJuOworCisgICAgUGF0aCogdXNlUGF0aDsKKyAgICBpbnQg
YXBwbHlNb2RlID0gQXBwbHlUb1N0cm9rZU1vZGU7CisKKyAgICBib29sIG5vblNjYWxpbmdTdHJv
a2UgPSBzdHlsZS0+c3ZnU3R5bGUoKS0+dmVjdG9yRWZmZWN0KCkgPT0gVkVfTk9OX1NDQUxJTkdf
U1RST0tFOworCisgICAgR3JhcGhpY3NDb250ZXh0U3RhdGVTYXZlciBzdGF0ZVNhdmVyKCpjb250
ZXh0LCBmYWxzZSk7CisKKyAgICAvLyBTcGVjKDExLjQpOiBBbnkgemVybyBsZW5ndGggc3VicGF0
aCBzaGFsbCBub3QgYmUgc3Ryb2tlZCBpZiB0aGUg4oCYc3Ryb2tlLWxpbmVjYXDigJkgcHJvcGVy
dHkgaGFzIGEgdmFsdWUgb2YgYnV0dAorICAgIC8vIGJ1dCBzaGFsbCBiZSBzdHJva2VkIGlmIHRo
ZSDigJhzdHJva2UtbGluZWNhcOKAmSBwcm9wZXJ0eSBoYXMgYSB2YWx1ZSBvZiByb3VuZCBvciBz
cXVhcmUKKyAgICAvLyBGSVhNRTogdGhpcyBkb2VzIG5vdCB3b3JrIGZvciB6ZXJvLWxlbmd0aCBz
dWJwYXRocywgb25seSB3aGVuIHRvdGFsIHBhdGggaXMgemVyby1sZW5ndGgKKyAgICBpZiAoc2hv
dWxkU3Ryb2tlWmVyb0xlbmd0aFN1YnBhdGgoKSkgeworICAgICAgICBSZW5kZXJTVkdTaGFwZTo6
Y3JlYXRlU2hhcGUoKTsKKyAgICAgICAgdXNlUGF0aCA9IG1fcGF0aC5nZXQoKTsKKyAgICAgICAg
c2V0dXBTcXVhcmVDYXBQYXRoKHVzZVBhdGgsIGFwcGx5TW9kZSk7CisgICAgfSBlbHNlIGlmIChu
b25TY2FsaW5nU3Ryb2tlKSB7CisgICAgICAgIFJlbmRlclNWR1NoYXBlOjpjcmVhdGVTaGFwZSgp
OworICAgICAgICB1c2VQYXRoID0gbV9wYXRoLmdldCgpOworICAgICAgICBpZiAoIXNldHVwTm9u
U2NhbGluZ1N0cm9rZVBhdGgodXNlUGF0aCwgc3RhdGVTYXZlcikpCisgICAgICAgICAgICByZXR1
cm47CisgICAgfQorICAgIGlmIChzdHJva2VQYWludGluZ1Jlc291cmNlLT5hcHBseVJlc291cmNl
KHRoaXMsIHN0eWxlLCBjb250ZXh0LCBhcHBseU1vZGUpKSB7CisgICAgICAgIHN0cm9rZVNoYXBl
KGNvbnRleHQpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIGlmICghZmFsbGJhY2tDb2xv
ci5pc1ZhbGlkKCkpCisgICAgICAgIHJldHVybjsKKyAgICBSZW5kZXJTVkdSZXNvdXJjZVNvbGlk
Q29sb3IqIGZhbGxiYWNrUmVzb3VyY2UgPSBSZW5kZXJTVkdSZXNvdXJjZTo6c2hhcmVkU29saWRQ
YWludGluZ1Jlc291cmNlKCk7CisgICAgZmFsbGJhY2tSZXNvdXJjZS0+c2V0Q29sb3IoZmFsbGJh
Y2tDb2xvcik7CisgICAgaWYgKGZhbGxiYWNrUmVzb3VyY2UtPmFwcGx5UmVzb3VyY2UodGhpcywg
c3R5bGUsIGNvbnRleHQsIGFwcGx5TW9kZSkpCisgICAgICAgIHN0cm9rZVNoYXBlKGNvbnRleHQp
OworfQorCit2b2lkIFJlbmRlclNWR1NoYXBlOjpwYWludChQYWludEluZm8mIHBhaW50SW5mbywg
Y29uc3QgSW50UG9pbnQmKQoreworICAgIGlmIChwYWludEluZm8uY29udGV4dC0+cGFpbnRpbmdE
aXNhYmxlZCgpIHx8IHN0eWxlKCktPnZpc2liaWxpdHkoKSA9PSBISURERU4gfHwgaXNFbXB0eSgp
KQorICAgICAgICByZXR1cm47CisgICAgRmxvYXRSZWN0IGJvdW5kaW5nQm94ID0gcmVwYWludFJl
Y3RJbkxvY2FsQ29vcmRpbmF0ZXMoKTsKKyAgICBpZiAoIVNWR1JlbmRlclN1cHBvcnQ6OnBhaW50
SW5mb0ludGVyc2VjdHNSZXBhaW50UmVjdChib3VuZGluZ0JveCwgbV9sb2NhbFRyYW5zZm9ybSwg
cGFpbnRJbmZvKSkKKyAgICAgICAgcmV0dXJuOworICAgIFBhaW50SW5mbyBjaGlsZFBhaW50SW5m
byhwYWludEluZm8pOworICAgIGJvb2wgZHJhd3NPdXRsaW5lID0gc3R5bGUoKS0+b3V0bGluZVdp
ZHRoKCkgJiYgKGNoaWxkUGFpbnRJbmZvLnBoYXNlID09IFBhaW50UGhhc2VPdXRsaW5lIHx8IGNo
aWxkUGFpbnRJbmZvLnBoYXNlID09IFBhaW50UGhhc2VTZWxmT3V0bGluZSk7CisgICAgaWYgKGRy
YXdzT3V0bGluZSB8fCBjaGlsZFBhaW50SW5mby5waGFzZSA9PSBQYWludFBoYXNlRm9yZWdyb3Vu
ZCkgeworICAgICAgICBHcmFwaGljc0NvbnRleHRTdGF0ZVNhdmVyIHN0YXRlU2F2ZXIoKmNoaWxk
UGFpbnRJbmZvLmNvbnRleHQpOworICAgICAgICBjaGlsZFBhaW50SW5mby5hcHBseVRyYW5zZm9y
bShtX2xvY2FsVHJhbnNmb3JtKTsKKworICAgICAgICBpZiAoY2hpbGRQYWludEluZm8ucGhhc2Ug
PT0gUGFpbnRQaGFzZUZvcmVncm91bmQpIHsKKyAgICAgICAgICAgIFBhaW50SW5mbyBzYXZlZElu
Zm8oY2hpbGRQYWludEluZm8pOworCisgICAgICAgICAgICBpZiAoU1ZHUmVuZGVyU3VwcG9ydDo6
cHJlcGFyZVRvUmVuZGVyU1ZHQ29udGVudCh0aGlzLCBjaGlsZFBhaW50SW5mbykpIHsKKyAgICAg
ICAgICAgICAgICBjb25zdCBTVkdSZW5kZXJTdHlsZSogc3ZnU3R5bGUgPSBzdHlsZSgpLT5zdmdT
dHlsZSgpOworICAgICAgICAgICAgICAgIGlmIChzdmdTdHlsZS0+c2hhcGVSZW5kZXJpbmcoKSA9
PSBTUl9DUklTUEVER0VTKQorICAgICAgICAgICAgICAgICAgICBjaGlsZFBhaW50SW5mby5jb250
ZXh0LT5zZXRTaG91bGRBbnRpYWxpYXMoZmFsc2UpOworCisgICAgICAgICAgICAgICAgZmlsbEFu
ZFN0cm9rZVBhdGgoY2hpbGRQYWludEluZm8uY29udGV4dCk7CisKKyAgICAgICAgICAgICAgICBp
ZiAoc3ZnU3R5bGUtPmhhc01hcmtlcnMoKSkKKyAgICAgICAgICAgICAgICAgICAgbV9tYXJrZXJM
YXlvdXRJbmZvLmRyYXdNYXJrZXJzKGNoaWxkUGFpbnRJbmZvKTsKKyAgICAgICAgICAgIH0KKwor
ICAgICAgICAgICAgU1ZHUmVuZGVyU3VwcG9ydDo6ZmluaXNoUmVuZGVyU1ZHQ29udGVudCh0aGlz
LCBjaGlsZFBhaW50SW5mbywgc2F2ZWRJbmZvLmNvbnRleHQpOworICAgICAgICB9CisKKyAgICAg
ICAgaWYgKGRyYXdzT3V0bGluZSkKKyAgICAgICAgICAgIHBhaW50T3V0bGluZShjaGlsZFBhaW50
SW5mby5jb250ZXh0LCBJbnRSZWN0KGJvdW5kaW5nQm94KSk7CisgICAgfQorfQorCisvLyBUaGlz
IG1ldGhvZCBpcyBjYWxsZWQgZnJvbSBpbnNpZGUgcGFpbnRPdXRsaW5lKCkgc2luY2Ugd2UgY2Fs
bCBwYWludE91dGxpbmUoKQorLy8gd2hpbGUgdHJhbnNmb3JtZWQgdG8gb3VyIGNvb3JkIHN5c3Rl
bSwgcmV0dXJuIGxvY2FsIGNvb3Jkcwordm9pZCBSZW5kZXJTVkdTaGFwZTo6YWRkRm9jdXNSaW5n
UmVjdHMoVmVjdG9yPExheW91dFJlY3Q+JiByZWN0cywgY29uc3QgTGF5b3V0UG9pbnQmKQorewor
ICAgIExheW91dFJlY3QgcmVjdCA9IGVuY2xvc2luZ0xheW91dFJlY3QocmVwYWludFJlY3RJbkxv
Y2FsQ29vcmRpbmF0ZXMoKSk7CisgICAgaWYgKCFyZWN0LmlzRW1wdHkoKSkKKyAgICAgICAgcmVj
dHMuYXBwZW5kKHJlY3QpOworfQorCitib29sIFJlbmRlclNWR1NoYXBlOjpub2RlQXRGbG9hdFBv
aW50KGNvbnN0IEhpdFRlc3RSZXF1ZXN0JiByZXF1ZXN0LCBIaXRUZXN0UmVzdWx0JiByZXN1bHQs
IGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50SW5QYXJlbnQsIEhpdFRlc3RBY3Rpb24gaGl0VGVzdEFj
dGlvbikKK3sKKyAgICAvLyBXZSBvbmx5IGRyYXcgaW4gdGhlIGZvcmdyb3VuZCBwaGFzZSwgc28g
d2Ugb25seSBoaXQtdGVzdCB0aGVuLgorICAgIGlmIChoaXRUZXN0QWN0aW9uICE9IEhpdFRlc3RG
b3JlZ3JvdW5kKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBGbG9hdFBvaW50IGxvY2Fs
UG9pbnQgPSBtX2xvY2FsVHJhbnNmb3JtLmludmVyc2UoKS5tYXBQb2ludChwb2ludEluUGFyZW50
KTsKKworICAgIGlmICghU1ZHUmVuZGVyU3VwcG9ydDo6cG9pbnRJbkNsaXBwaW5nQXJlYSh0aGlz
LCBsb2NhbFBvaW50KSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgUG9pbnRlckV2ZW50
c0hpdFJ1bGVzIGhpdFJ1bGVzKFBvaW50ZXJFdmVudHNIaXRSdWxlczo6U1ZHX1BBVEhfSElUVEVT
VElORywgcmVxdWVzdCwgc3R5bGUoKS0+cG9pbnRlckV2ZW50cygpKTsKKyAgICBib29sIGlzVmlz
aWJsZSA9IChzdHlsZSgpLT52aXNpYmlsaXR5KCkgPT0gVklTSUJMRSk7CisgICAgaWYgKGlzVmlz
aWJsZSB8fCAhaGl0UnVsZXMucmVxdWlyZVZpc2libGUpIHsKKyAgICAgICAgY29uc3QgU1ZHUmVu
ZGVyU3R5bGUqIHN2Z1N0eWxlID0gc3R5bGUoKS0+c3ZnU3R5bGUoKTsKKyAgICAgICAgV2luZFJ1
bGUgZmlsbFJ1bGUgPSBzdmdTdHlsZS0+ZmlsbFJ1bGUoKTsKKyAgICAgICAgaWYgKHJlcXVlc3Qu
c3ZnQ2xpcENvbnRlbnQoKSkKKyAgICAgICAgICAgIGZpbGxSdWxlID0gc3ZnU3R5bGUtPmNsaXBS
dWxlKCk7CisgICAgICAgIGlmICgoaGl0UnVsZXMuY2FuSGl0U3Ryb2tlICYmIChzdmdTdHlsZS0+
aGFzU3Ryb2tlKCkgfHwgIWhpdFJ1bGVzLnJlcXVpcmVTdHJva2UpICYmIHN0cm9rZUNvbnRhaW5z
KGxvY2FsUG9pbnQsIGhpdFJ1bGVzLnJlcXVpcmVTdHJva2UpKQorICAgICAgICAgICAgfHwgKGhp
dFJ1bGVzLmNhbkhpdEZpbGwgJiYgKHN2Z1N0eWxlLT5oYXNGaWxsKCkgfHwgIWhpdFJ1bGVzLnJl
cXVpcmVGaWxsKSAmJiBmaWxsQ29udGFpbnMobG9jYWxQb2ludCwgaGl0UnVsZXMucmVxdWlyZUZp
bGwsIGZpbGxSdWxlKSkpIHsKKyAgICAgICAgICAgIHVwZGF0ZUhpdFRlc3RSZXN1bHQocmVzdWx0
LCByb3VuZGVkTGF5b3V0UG9pbnQobG9jYWxQb2ludCkpOworICAgICAgICAgICAgcmV0dXJuIHRy
dWU7CisgICAgICAgIH0KKyAgICB9CisgICAgcmV0dXJuIGZhbHNlOworfQorCitGbG9hdFJlY3Qg
UmVuZGVyU1ZHU2hhcGU6OmNhbGN1bGF0ZU1hcmtlckJvdW5kc0lmTmVlZGVkKCkKK3sKKyAgICBT
VkdFbGVtZW50KiBzdmdFbGVtZW50ID0gc3RhdGljX2Nhc3Q8U1ZHRWxlbWVudCo+KG5vZGUoKSk7
CisgICAgQVNTRVJUKHN2Z0VsZW1lbnQgJiYgc3ZnRWxlbWVudC0+ZG9jdW1lbnQoKSk7CisgICAg
aWYgKCFzdmdFbGVtZW50LT5pc1N0eWxlZCgpKQorICAgICAgICByZXR1cm4gRmxvYXRSZWN0KCk7
CisKKyAgICBTVkdTdHlsZWRFbGVtZW50KiBzdHlsZWRFbGVtZW50ID0gc3RhdGljX2Nhc3Q8U1ZH
U3R5bGVkRWxlbWVudCo+KHN2Z0VsZW1lbnQpOworICAgIGlmICghc3R5bGVkRWxlbWVudC0+c3Vw
cG9ydHNNYXJrZXJzKCkpCisgICAgICAgIHJldHVybiBGbG9hdFJlY3QoKTsKKworICAgIEFTU0VS
VChzdHlsZSgpLT5zdmdTdHlsZSgpLT5oYXNNYXJrZXJzKCkpOworCisgICAgU1ZHUmVzb3VyY2Vz
KiByZXNvdXJjZXMgPSBTVkdSZXNvdXJjZXNDYWNoZTo6Y2FjaGVkUmVzb3VyY2VzRm9yUmVuZGVy
T2JqZWN0KHRoaXMpOworICAgIGlmICghcmVzb3VyY2VzKQorICAgICAgICByZXR1cm4gRmxvYXRS
ZWN0KCk7CisKKyAgICBSZW5kZXJTVkdSZXNvdXJjZU1hcmtlciogbWFya2VyU3RhcnQgPSByZXNv
dXJjZXMtPm1hcmtlclN0YXJ0KCk7CisgICAgUmVuZGVyU1ZHUmVzb3VyY2VNYXJrZXIqIG1hcmtl
ck1pZCA9IHJlc291cmNlcy0+bWFya2VyTWlkKCk7CisgICAgUmVuZGVyU1ZHUmVzb3VyY2VNYXJr
ZXIqIG1hcmtlckVuZCA9IHJlc291cmNlcy0+bWFya2VyRW5kKCk7CisgICAgaWYgKCFtYXJrZXJT
dGFydCAmJiAhbWFya2VyTWlkICYmICFtYXJrZXJFbmQpCisgICAgICAgIHJldHVybiBGbG9hdFJl
Y3QoKTsKKworICAgIHJldHVybiBtX21hcmtlckxheW91dEluZm8uY2FsY3VsYXRlQm91bmRhcmll
cyhtYXJrZXJTdGFydCwgbWFya2VyTWlkLCBtYXJrZXJFbmQsIHN0cm9rZVdpZHRoKCksIHBhdGgo
KSk7Cit9CisKK3ZvaWQgUmVuZGVyU1ZHU2hhcGU6OnVwZGF0ZUNhY2hlZEJvdW5kYXJpZXMoKQor
eworICAgIGlmIChpc0VtcHR5KCkpIHsKKyAgICAgICAgbV9maWxsQm91bmRpbmdCb3ggPSBGbG9h
dFJlY3QoKTsKKyAgICAgICAgbV9zdHJva2VBbmRNYXJrZXJCb3VuZGluZ0JveCA9IEZsb2F0UmVj
dCgpOworICAgICAgICBtX3JlcGFpbnRCb3VuZGluZ0JveCA9IEZsb2F0UmVjdCgpOworICAgICAg
ICByZXR1cm47CisgICAgfQorCisgICAgLy8gQ2FjaGUgX3VuY2xpcHBlZF8gZmlsbCBib3VuZGlu
ZyBib3gsIHVzZWQgZm9yIGNhbGN1bGF0aW9ucyBpbiByZXNvdXJjZXMKKyAgICBtX2ZpbGxCb3Vu
ZGluZ0JveCA9IG9iamVjdEJvdW5kaW5nQm94KCk7CisKKyAgICAvLyBTcGVjKDExLjQpOiBBbnkg
emVybyBsZW5ndGggc3VicGF0aCBzaGFsbCBub3QgYmUgc3Ryb2tlZCBpZiB0aGUg4oCYc3Ryb2tl
LWxpbmVjYXDigJkgcHJvcGVydHkgaGFzIGEgdmFsdWUgb2YgYnV0dAorICAgIC8vIGJ1dCBzaGFs
bCBiZSBzdHJva2VkIGlmIHRoZSDigJhzdHJva2UtbGluZWNhcOKAmSBwcm9wZXJ0eSBoYXMgYSB2
YWx1ZSBvZiByb3VuZCBvciBzcXVhcmUKKyAgICBpZiAoc2hvdWxkU3Ryb2tlWmVyb0xlbmd0aFN1
YnBhdGgoKSkgeworICAgICAgICBtX3N0cm9rZUFuZE1hcmtlckJvdW5kaW5nQm94ID0gemVyb0xl
bmd0aFN1YnBhdGhSZWN0KCk7CisgICAgICAgIC8vIENhY2hlIHNtYWxsZXN0IHBvc3NpYmxlIHJl
cGFpbnQgcmVjdGFuZ2xlCisgICAgICAgIG1fcmVwYWludEJvdW5kaW5nQm94ID0gbV9zdHJva2VB
bmRNYXJrZXJCb3VuZGluZ0JveDsKKyAgICAgICAgU1ZHUmVuZGVyU3VwcG9ydDo6aW50ZXJzZWN0
UmVwYWludFJlY3RXaXRoUmVzb3VyY2VzKHRoaXMsIG1fcmVwYWludEJvdW5kaW5nQm94KTsKKyAg
ICAgICAgcmV0dXJuOworICAgIH0KKworICAgIC8vIENhY2hlIF91bmNsaXBwZWRfIHN0cm9rZSBi
b3VuZGluZyBib3gsIHVzZWQgZm9yIGNhbGN1bGF0aW9ucyBpbiByZXNvdXJjZXMgKGluY2x1ZGVz
IG1hcmtlciBib3VuZGFyaWVzKQorICAgIG1fc3Ryb2tlQW5kTWFya2VyQm91bmRpbmdCb3ggPSBt
X2ZpbGxCb3VuZGluZ0JveDsKKworICAgIGNvbnN0IFNWR1JlbmRlclN0eWxlKiBzdmdTdHlsZSA9
IHN0eWxlKCktPnN2Z1N0eWxlKCk7CisgICAgaWYgKHN2Z1N0eWxlLT5oYXNTdHJva2UoKSkKKyAg
ICAgICAgbV9zdHJva2VBbmRNYXJrZXJCb3VuZGluZ0JveC51bml0ZShzdHJva2VCb3VuZGluZ0Jv
eCgpKTsKKworICAgIGlmIChpc1NWR1BhdGgoKSkgeworICAgICAgICBpZiAoc3ZnU3R5bGUtPmhh
c01hcmtlcnMoKSkgeworICAgICAgICAgICAgRmxvYXRSZWN0IG1hcmtlckJvdW5kcyA9IGNhbGN1
bGF0ZU1hcmtlckJvdW5kc0lmTmVlZGVkKCk7CisgICAgICAgICAgICBpZiAoIW1hcmtlckJvdW5k
cy5pc0VtcHR5KCkpCisgICAgICAgICAgICAgICAgbV9zdHJva2VBbmRNYXJrZXJCb3VuZGluZ0Jv
eC51bml0ZShtYXJrZXJCb3VuZHMpOworICAgICAgICB9CisgICAgfQorICAgIC8vIENhY2hlIHNt
YWxsZXN0IHBvc3NpYmxlIHJlcGFpbnQgcmVjdGFuZ2xlCisgICAgbV9yZXBhaW50Qm91bmRpbmdC
b3ggPSBtX3N0cm9rZUFuZE1hcmtlckJvdW5kaW5nQm94OworICAgIFNWR1JlbmRlclN1cHBvcnQ6
OmludGVyc2VjdFJlcGFpbnRSZWN0V2l0aFJlc291cmNlcyh0aGlzLCBtX3JlcGFpbnRCb3VuZGlu
Z0JveCk7Cit9CisKK2Zsb2F0IFJlbmRlclNWR1NoYXBlOjpzdHJva2VXaWR0aCgpIGNvbnN0Cit7
CisgICAgU1ZHRWxlbWVudCogc3ZnRWxlbWVudCA9IHN0YXRpY19jYXN0PFNWR0VsZW1lbnQqPihu
b2RlKCkpOworICAgIHJldHVybiBzdHlsZSgpLT5zdmdTdHlsZSgpLT5zdHJva2VXaWR0aCgpLnZh
bHVlKHN2Z0VsZW1lbnQpOworfQorCit9CisKKyNlbmRpZiAvLyBFTkFCTEUoU1ZHKQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdTaGFwZS5oIGIvU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdTaGFwZS5oCm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYyMzFmODUKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1NoYXBlLmgKQEAgLTAsMCArMSwxNjMgQEAK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUsIDIwMDcgTmlrb2xhcyBaaW1tZXJtYW5u
IDx6aW1tZXJtYW5uQGtkZS5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUgUm9iIEJ1
aXMgPGJ1aXNAa2RlLm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAwNSBFcmljIFNlaWRlbCA8ZXJp
Y0B3ZWJraXQub3JnPgorICogQ29weXJpZ2h0IChDKSAyMDA2IEFwcGxlIENvbXB1dGVyLCBJbmMK
KyAqIENvcHlyaWdodCAoQykgMjAwOSBHb29nbGUsIEluYy4KKyAqIENvcHlyaWdodCAoQykgMjAx
MSBSZW5hdGEgSG9kb3ZhbiA8cmVuaUB3ZWJraXQub3JnPgorICogQ29weXJpZ2h0IChDKSAyMDEx
IFVuaXZlcnNpdHkgb2YgU3plZ2VkCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdh
cmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRo
ZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMg
cHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVy
c2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJz
aW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0
IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0
IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdl
bmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxk
IGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBM
aWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcu
TElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwg
SW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIx
MTAtMTMwMSwgVVNBLgorICovCisKKyNpZm5kZWYgUmVuZGVyU1ZHU2hhcGVfaAorI2RlZmluZSBS
ZW5kZXJTVkdTaGFwZV9oCisKKyNpZiBFTkFCTEUoU1ZHKQorI2luY2x1ZGUgIkFmZmluZVRyYW5z
Zm9ybS5oIgorI2luY2x1ZGUgIkZsb2F0UmVjdC5oIgorI2luY2x1ZGUgIlJlbmRlclNWR01vZGVs
T2JqZWN0LmgiCisjaW5jbHVkZSAiU1ZHTWFya2VyTGF5b3V0SW5mby5oIgorI2luY2x1ZGUgIlN0
cm9rZVN0eWxlQXBwbGllci5oIgorI2luY2x1ZGUgPHd0Zi9Pd25QdHIuaD4KKworbmFtZXNwYWNl
IFdlYkNvcmUgeworCitjbGFzcyBGbG9hdFBvaW50OworY2xhc3MgR3JhcGhpY3NDb250ZXh0U3Rh
dGVTYXZlcjsKK2NsYXNzIFJlbmRlclNWR0NvbnRhaW5lcjsKK2NsYXNzIFJlbmRlclNWR1BhdGg7
CitjbGFzcyBTVkdTdHlsZWRUcmFuc2Zvcm1hYmxlRWxlbWVudDsKKworZW51bSBQb2ludExvY2F0
aW9uIHsKKyAgICBJbnNpZGVTaGFwZSwKKyAgICBPdXRzaWRlU2hhcGUsCisgICAgT25TdHJva2UK
K307CisKK2NsYXNzIEJvdW5kaW5nUmVjdFN0cm9rZVN0eWxlQXBwbGllciA6IHB1YmxpYyBTdHJv
a2VTdHlsZUFwcGxpZXIgeworcHVibGljOgorICAgIEJvdW5kaW5nUmVjdFN0cm9rZVN0eWxlQXBw
bGllcihjb25zdCBSZW5kZXJPYmplY3QqIG9iamVjdCwgUmVuZGVyU3R5bGUqIHN0eWxlKQorICAg
ICAgICA6IG1fb2JqZWN0KG9iamVjdCkKKyAgICAgICAgLCBtX3N0eWxlKHN0eWxlKQorICAgIHsK
KyAgICAgICAgQVNTRVJUKHN0eWxlKTsKKyAgICAgICAgQVNTRVJUKG9iamVjdCk7CisgICAgfQor
CisgICAgdm9pZCBzdHJva2VTdHlsZShHcmFwaGljc0NvbnRleHQqIGdjKQorICAgIHsKKyAgICAg
ICAgU1ZHUmVuZGVyU3VwcG9ydDo6YXBwbHlTdHJva2VTdHlsZVRvQ29udGV4dChnYywgbV9zdHls
ZSwgbV9vYmplY3QpOworICAgIH0KKworcHJpdmF0ZToKKyAgICBjb25zdCBSZW5kZXJPYmplY3Qq
IG1fb2JqZWN0OworICAgIFJlbmRlclN0eWxlKiBtX3N0eWxlOworfTsKKworY2xhc3MgUmVuZGVy
U1ZHU2hhcGUgOiBwdWJsaWMgUmVuZGVyU1ZHTW9kZWxPYmplY3QgeworcHVibGljOgorICAgIGV4
cGxpY2l0IFJlbmRlclNWR1NoYXBlKFNWR1N0eWxlZFRyYW5zZm9ybWFibGVFbGVtZW50Kik7Cisg
ICAgdmlydHVhbCB+UmVuZGVyU1ZHU2hhcGUoKTsKKworICAgIHZvaWQgc2V0TmVlZHNTaGFwZVVw
ZGF0ZSgpIHsgbV9uZWVkc1NoYXBlVXBkYXRlID0gdHJ1ZTsgfQorICAgIHZpcnR1YWwgdm9pZCBz
ZXROZWVkc0JvdW5kYXJpZXNVcGRhdGUoKSB7IG1fbmVlZHNCb3VuZGFyaWVzVXBkYXRlID0gdHJ1
ZTsgfQorICAgIHZpcnR1YWwgdm9pZCBzZXROZWVkc1RyYW5zZm9ybVVwZGF0ZSgpIHsgbV9uZWVk
c1RyYW5zZm9ybVVwZGF0ZSA9IHRydWU7IH0KKworcHJpdmF0ZToKKyAgICAvLyBIaXQtZGV0ZWN0
aW9uIHNlcGVyYXRlZCBmb3IgdGhlIGZpbGwgYW5kIHRoZSBzdHJva2UKKyAgICBib29sIGZpbGxD
b250YWlucyhjb25zdCBGbG9hdFBvaW50JiwgYm9vbCByZXF1aXJlc0ZpbGwgPSB0cnVlLCBXaW5k
UnVsZSBmaWxsUnVsZSA9IFJVTEVfTk9OWkVSTyk7CisgICAgYm9vbCBzdHJva2VDb250YWlucyhj
b25zdCBGbG9hdFBvaW50JiwgYm9vbCByZXF1aXJlc1N0cm9rZSA9IHRydWUpOworCisgICAgdmly
dHVhbCBGbG9hdFJlY3Qgc3Ryb2tlQm91bmRpbmdCb3goKSBjb25zdCB7IHJldHVybiBtX3N0cm9r
ZUFuZE1hcmtlckJvdW5kaW5nQm94OyB9CisgICAgdmlydHVhbCBGbG9hdFJlY3QgcmVwYWludFJl
Y3RJbkxvY2FsQ29vcmRpbmF0ZXMoKSBjb25zdCB7IHJldHVybiBtX3JlcGFpbnRCb3VuZGluZ0Jv
eDsgfQorICAgIHZpcnR1YWwgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiBsb2NhbFRvUGFyZW50VHJh
bnNmb3JtKCkgY29uc3QgeyByZXR1cm4gbV9sb2NhbFRyYW5zZm9ybTsgfQorCisgICAgdmlydHVh
bCBib29sIGlzU1ZHU2hhcGUoKSBjb25zdCB7IHJldHVybiB0cnVlOyB9CisgICAgdmlydHVhbCBj
b25zdCBjaGFyKiByZW5kZXJOYW1lKCkgY29uc3QgeyByZXR1cm4gIlJlbmRlclNWR1NoYXBlIjsg
fQorCisgICAgdmlydHVhbCB2b2lkIGxheW91dCgpOworICAgIHZpcnR1YWwgdm9pZCBwYWludChQ
YWludEluZm8mLCBjb25zdCBMYXlvdXRQb2ludCYpOworICAgIHZpcnR1YWwgdm9pZCBhZGRGb2N1
c1JpbmdSZWN0cyhWZWN0b3I8TGF5b3V0UmVjdD4mLCBjb25zdCBMYXlvdXRQb2ludCYpOworCisg
ICAgdmlydHVhbCBib29sIG5vZGVBdEZsb2F0UG9pbnQoY29uc3QgSGl0VGVzdFJlcXVlc3QmLCBI
aXRUZXN0UmVzdWx0JiwgY29uc3QgRmxvYXRQb2ludCYgcG9pbnRJblBhcmVudCwgSGl0VGVzdEFj
dGlvbik7CisKKyAgICBGbG9hdFJlY3QgY2FsY3VsYXRlTWFya2VyQm91bmRzSWZOZWVkZWQoKTsK
KyAgICB2b2lkIHVwZGF0ZUNhY2hlZEJvdW5kYXJpZXMoKTsKKworICAgIHZvaWQgc2V0dXBTcXVh
cmVDYXBQYXRoKFBhdGgqJiB1c2VQYXRoLCBpbnQmIGFwcGx5TW9kZSk7CisgICAgYm9vbCBzZXR1
cE5vblNjYWxpbmdTdHJva2VQYXRoKFBhdGgqJiB1c2VQYXRoLCBHcmFwaGljc0NvbnRleHRTdGF0
ZVNhdmVyJik7CisgICAgYm9vbCBzaG91bGRTdHJva2VaZXJvTGVuZ3RoU3VicGF0aCgpIGNvbnN0
OworICAgIEZsb2F0UmVjdCB6ZXJvTGVuZ3RoU3VicGF0aFJlY3QoKSBjb25zdDsKKworcHJvdGVj
dGVkOgorICAgIHZpcnR1YWwgdm9pZCBjcmVhdGVTaGFwZSgpOworICAgIHZpcnR1YWwgYm9vbCBp
c0VtcHR5KCkgY29uc3Q7CisgICAgdmlydHVhbCB2b2lkIGZpbGxTaGFwZShHcmFwaGljc0NvbnRl
eHQqKTsKKyAgICB2aXJ0dWFsIEZsb2F0UmVjdCBvYmplY3RCb3VuZGluZ0JveCgpIGNvbnN0Owor
ICAgIHZpcnR1YWwgRmxvYXRSZWN0IHN0cm9rZUJvdW5kaW5nQm94KCk7CisgICAgdmlydHVhbCB2
b2lkIHN0cm9rZVNoYXBlKEdyYXBoaWNzQ29udGV4dCopOworICAgIHZpcnR1YWwgYm9vbCBzdHJv
a2VDb250YWluc1Nsb3dDYXNlKGNvbnN0IEZsb2F0UG9pbnQmKTsKKyAgICB2aXJ0dWFsIGJvb2wg
ZmlsbENvbnRhaW5zU2xvd0Nhc2UoY29uc3QgRmxvYXRQb2ludCYsIGNvbnN0IFdpbmRSdWxlJikg
Y29uc3Q7CisgICAgZmxvYXQgc3Ryb2tlV2lkdGgoKSBjb25zdDsKKworICAgIFBhdGgmIHBhdGgo
KSBjb25zdAorICAgIHsKKyAgICAgICAgQVNTRVJUKG1fcGF0aC5nZXQoKSk7CisgICAgICAgIHJl
dHVybiAqbV9wYXRoOworICAgIH0KKworICAgIFBhdGgqIHBhdGhQdHIoKSBjb25zdAorICAgIHsK
KyAgICAgICAgQVNTRVJUKG1fcGF0aC5nZXQoKSk7CisgICAgICAgIHJldHVybiBtX3BhdGguZ2V0
KCk7CisgICAgfTsKKworICAgIGJvb2wgaGFzUGF0aCgpIGNvbnN0IHsgcmV0dXJuIG1fcGF0aC5n
ZXQoKTsgfQorCitwcml2YXRlOgorICAgIHZpcnR1YWwgQWZmaW5lVHJhbnNmb3JtIGxvY2FsVHJh
bnNmb3JtKCkgY29uc3QgeyByZXR1cm4gbV9sb2NhbFRyYW5zZm9ybTsgfQorICAgIHZvaWQgZmls
bEFuZFN0cm9rZVBhdGgoR3JhcGhpY3NDb250ZXh0Kik7CisKKyAgICBib29sIG1fbmVlZHNCb3Vu
ZGFyaWVzVXBkYXRlIDogMTsKKyAgICBib29sIG1fbmVlZHNTaGFwZVVwZGF0ZSA6IDE7CisgICAg
Ym9vbCBtX25lZWRzVHJhbnNmb3JtVXBkYXRlIDogMTsKKworICAgIEZsb2F0UmVjdCBtX2ZpbGxC
b3VuZGluZ0JveDsKKyAgICBGbG9hdFJlY3QgbV9zdHJva2VBbmRNYXJrZXJCb3VuZGluZ0JveDsK
KyAgICBGbG9hdFJlY3QgbV9yZXBhaW50Qm91bmRpbmdCb3g7CisgICAgU1ZHTWFya2VyTGF5b3V0
SW5mbyBtX21hcmtlckxheW91dEluZm87CisgICAgQWZmaW5lVHJhbnNmb3JtIG1fbG9jYWxUcmFu
c2Zvcm07CisgICAgT3duUHRyPFBhdGg+IG1fcGF0aDsKK307CisKK2lubGluZSBSZW5kZXJTVkdT
aGFwZSogdG9SZW5kZXJTVkdTaGFwZShSZW5kZXJPYmplY3QqIG9iamVjdCkKK3sKKyAgICBBU1NF
UlQoIW9iamVjdCB8fCBvYmplY3QtPmlzU1ZHU2hhcGUoKSk7CisgICAgcmV0dXJuIHN0YXRpY19j
YXN0PFJlbmRlclNWR1NoYXBlKj4ob2JqZWN0KTsKK30KKworaW5saW5lIGNvbnN0IFJlbmRlclNW
R1NoYXBlKiB0b1JlbmRlclNWR1NoYXBlKGNvbnN0IFJlbmRlck9iamVjdCogb2JqZWN0KQorewor
ICAgIEFTU0VSVCghb2JqZWN0IHx8IG9iamVjdC0+aXNTVkdTaGFwZSgpKTsKKyAgICByZXR1cm4g
c3RhdGljX2Nhc3Q8Y29uc3QgUmVuZGVyU1ZHU2hhcGUqPihvYmplY3QpOworfQorCisvLyBUaGlz
IHdpbGwgY2F0Y2ggYW55b25lIGRvaW5nIGFuIHVubmVjZXNzYXJ5IGNhc3QuCit2b2lkIHRvUmVu
ZGVyU1ZHU2hhcGUoY29uc3QgUmVuZGVyU1ZHU2hhcGUqKTsKKworfQorCisjZW5kaWYgLy8gRU5B
QkxFKFNWRykKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2
Zy9TVkdSZW5kZXJTdXBwb3J0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZH
UmVuZGVyU3VwcG9ydC5jcHAKaW5kZXggMDA3OTIxOS4uNjY5NWI1MiAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdSZW5kZXJTdXBwb3J0LmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR1JlbmRlclN1cHBvcnQuY3BwCkBAIC0yMjUsOSAr
MjI1LDkgQEAgdm9pZCBTVkdSZW5kZXJTdXBwb3J0OjpsYXlvdXRDaGlsZHJlbihSZW5kZXJPYmpl
Y3QqIHN0YXJ0LCBib29sIHNlbGZOZWVkc0xheW91dCkKICAgICAgICAgICAgIC8vIFdoZW4gc2Vs
Zk5lZWRzTGF5b3V0IGlzIGZhbHNlIGFuZCB0aGUgbGF5b3V0IHNpemUgY2hhbmdlZCwgd2UgaGF2
ZSB0byBjaGVjayB3aGV0aGVyIHRoaXMgY2hpbGQgdXNlcyByZWxhdGl2ZSBsZW5ndGhzCiAgICAg
ICAgICAgICBpZiAoU1ZHRWxlbWVudCogZWxlbWVudCA9IGNoaWxkLT5ub2RlKCktPmlzU1ZHRWxl
bWVudCgpID8gc3RhdGljX2Nhc3Q8U1ZHRWxlbWVudCo+KGNoaWxkLT5ub2RlKCkpIDogMCkgewog
ICAgICAgICAgICAgICAgIGlmIChlbGVtZW50LT5pc1N0eWxlZCgpICYmIHN0YXRpY19jYXN0PFNW
R1N0eWxlZEVsZW1lbnQqPihlbGVtZW50KS0+aGFzUmVsYXRpdmVMZW5ndGhzKCkpIHsKLSAgICAg
ICAgICAgICAgICAgICAgLy8gV2hlbiB0aGUgbGF5b3V0IHNpemUgY2hhbmdlZCBhbmQgd2hlbiB1
c2luZyByZWxhdGl2ZSB2YWx1ZXMgdGVsbCB0aGUgUmVuZGVyU1ZHUGF0aCB0byB1cGRhdGUgaXRz
IFBhdGggb2JqZWN0Ci0gICAgICAgICAgICAgICAgICAgIGlmIChjaGlsZC0+aXNTVkdQYXRoKCkp
Ci0gICAgICAgICAgICAgICAgICAgICAgICB0b1JlbmRlclNWR1BhdGgoY2hpbGQpLT5zZXROZWVk
c1BhdGhVcGRhdGUoKTsKKyAgICAgICAgICAgICAgICAgICAgLy8gV2hlbiB0aGUgbGF5b3V0IHNp
emUgY2hhbmdlZCBhbmQgd2hlbiB1c2luZyByZWxhdGl2ZSB2YWx1ZXMgdGVsbCB0aGUgUmVuZGVy
U1ZHU2hhcGUgdG8gdXBkYXRlIGl0cyBzaGFwZSBvYmplY3QKKyAgICAgICAgICAgICAgICAgICAg
aWYgKGNoaWxkLT5pc1NWR1NoYXBlKCkpCisgICAgICAgICAgICAgICAgICAgICAgICB0b1JlbmRl
clNWR1NoYXBlKGNoaWxkKS0+c2V0TmVlZHNTaGFwZVVwZGF0ZSgpOwogCiAgICAgICAgICAgICAg
ICAgICAgIG5lZWRzTGF5b3V0ID0gdHJ1ZTsKICAgICAgICAgICAgICAgICB9CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR1JlbmRlclRyZWVBc1RleHQuY3BwIGIv
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdSZW5kZXJUcmVlQXNUZXh0LmNwcAppbmRl
eCBhMTYyOTY5Li5kMWFkNzJhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
c3ZnL1NWR1JlbmRlclRyZWVBc1RleHQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9zdmcvU1ZHUmVuZGVyVHJlZUFzVGV4dC5jcHAKQEAgLTU1LDYgKzU1LDcgQEAKICNpbmNsdWRl
ICJSZW5kZXJTVkdSZXNvdXJjZVJhZGlhbEdyYWRpZW50LmgiCiAjaW5jbHVkZSAiUmVuZGVyU1ZH
UmVzb3VyY2VTb2xpZENvbG9yLmgiCiAjaW5jbHVkZSAiUmVuZGVyU1ZHUm9vdC5oIgorI2luY2x1
ZGUgIlJlbmRlclNWR1NoYXBlLmgiCiAjaW5jbHVkZSAiUmVuZGVyU1ZHVGV4dC5oIgogI2luY2x1
ZGUgIlJlbmRlclRyZWVBc1RleHQuaCIKICNpbmNsdWRlICJTVkdDaXJjbGVFbGVtZW50LmgiCkBA
IC0yODksMTggKzI5MCwxOCBAQCBzdGF0aWMgdm9pZCB3cml0ZVN0eWxlKFRleHRTdHJlYW0mIHRz
LCBjb25zdCBSZW5kZXJPYmplY3QmIG9iamVjdCkKICAgICAgICAgd3JpdGVOYW1lVmFsdWVQYWly
KHRzLCAidHJhbnNmb3JtIiwgb2JqZWN0LmxvY2FsVHJhbnNmb3JtKCkpOwogICAgIHdyaXRlSWZO
b3REZWZhdWx0KHRzLCAiaW1hZ2UgcmVuZGVyaW5nIiwgc3R5bGUtPmltYWdlUmVuZGVyaW5nKCks
IFJlbmRlclN0eWxlOjppbml0aWFsSW1hZ2VSZW5kZXJpbmcoKSk7CiAgICAgd3JpdGVJZk5vdERl
ZmF1bHQodHMsICJvcGFjaXR5Iiwgc3R5bGUtPm9wYWNpdHkoKSwgUmVuZGVyU3R5bGU6OmluaXRp
YWxPcGFjaXR5KCkpOwotICAgIGlmIChvYmplY3QuaXNTVkdQYXRoKCkpIHsKLSAgICAgICAgY29u
c3QgUmVuZGVyU1ZHUGF0aCYgcGF0aCA9IHN0YXRpY19jYXN0PGNvbnN0IFJlbmRlclNWR1BhdGgm
PihvYmplY3QpOwotICAgICAgICBBU1NFUlQocGF0aC5ub2RlKCkpOwotICAgICAgICBBU1NFUlQo
cGF0aC5ub2RlKCktPmlzU1ZHRWxlbWVudCgpKTsKKyAgICBpZiAob2JqZWN0LmlzU1ZHU2hhcGUo
KSkgeworICAgICAgICBjb25zdCBSZW5kZXJTVkdTaGFwZSYgc2hhcGUgPSBzdGF0aWNfY2FzdDxj
b25zdCBSZW5kZXJTVkdTaGFwZSY+KG9iamVjdCk7CisgICAgICAgIEFTU0VSVChzaGFwZS5ub2Rl
KCkpOworICAgICAgICBBU1NFUlQoc2hhcGUubm9kZSgpLT5pc1NWR0VsZW1lbnQoKSk7CiAKICAg
ICAgICAgQ29sb3IgZmFsbGJhY2tDb2xvcjsKLSAgICAgICAgaWYgKFJlbmRlclNWR1Jlc291cmNl
KiBzdHJva2VQYWludGluZ1Jlc291cmNlID0gUmVuZGVyU1ZHUmVzb3VyY2U6OnN0cm9rZVBhaW50
aW5nUmVzb3VyY2UoY29uc3RfY2FzdDxSZW5kZXJTVkdQYXRoKj4oJnBhdGgpLCBwYXRoLnN0eWxl
KCksIGZhbGxiYWNrQ29sb3IpKSB7CisgICAgICAgIGlmIChSZW5kZXJTVkdSZXNvdXJjZSogc3Ry
b2tlUGFpbnRpbmdSZXNvdXJjZSA9IFJlbmRlclNWR1Jlc291cmNlOjpzdHJva2VQYWludGluZ1Jl
c291cmNlKGNvbnN0X2Nhc3Q8UmVuZGVyU1ZHU2hhcGUqPigmc2hhcGUpLCBzaGFwZS5zdHlsZSgp
LCBmYWxsYmFja0NvbG9yKSkgewogICAgICAgICAgICAgVGV4dFN0cmVhbVNlcGFyYXRvciBzKCIg
Iik7CiAgICAgICAgICAgICB0cyA8PCAiIFtzdHJva2U9eyIgPDwgczsKICAgICAgICAgICAgIHdy
aXRlU1ZHUGFpbnRpbmdSZXNvdXJjZSh0cywgc3Ryb2tlUGFpbnRpbmdSZXNvdXJjZSk7CiAKLSAg
ICAgICAgICAgIFNWR0VsZW1lbnQqIGVsZW1lbnQgPSBzdGF0aWNfY2FzdDxTVkdFbGVtZW50Kj4o
cGF0aC5ub2RlKCkpOworICAgICAgICAgICAgU1ZHRWxlbWVudCogZWxlbWVudCA9IHN0YXRpY19j
YXN0PFNWR0VsZW1lbnQqPihzaGFwZS5ub2RlKCkpOwogICAgICAgICAgICAgZG91YmxlIGRhc2hP
ZmZzZXQgPSBzdmdTdHlsZS0+c3Ryb2tlRGFzaE9mZnNldCgpLnZhbHVlKGVsZW1lbnQpOwogICAg
ICAgICAgICAgZG91YmxlIHN0cm9rZVdpZHRoID0gc3ZnU3R5bGUtPnN0cm9rZVdpZHRoKCkudmFs
dWUoZWxlbWVudCk7CiAgICAgICAgICAgICBjb25zdCBWZWN0b3I8U1ZHTGVuZ3RoPiYgZGFzaGVz
ID0gc3ZnU3R5bGUtPnN0cm9rZURhc2hBcnJheSgpOwpAQCAtMzIyLDcgKzMyMyw3IEBAIHN0YXRp
YyB2b2lkIHdyaXRlU3R5bGUoVGV4dFN0cmVhbSYgdHMsIGNvbnN0IFJlbmRlck9iamVjdCYgb2Jq
ZWN0KQogICAgICAgICAgICAgdHMgPDwgIn1dIjsKICAgICAgICAgfQogCi0gICAgICAgIGlmIChS
ZW5kZXJTVkdSZXNvdXJjZSogZmlsbFBhaW50aW5nUmVzb3VyY2UgPSBSZW5kZXJTVkdSZXNvdXJj
ZTo6ZmlsbFBhaW50aW5nUmVzb3VyY2UoY29uc3RfY2FzdDxSZW5kZXJTVkdQYXRoKj4oJnBhdGgp
LCBwYXRoLnN0eWxlKCksIGZhbGxiYWNrQ29sb3IpKSB7CisgICAgICAgIGlmIChSZW5kZXJTVkdS
ZXNvdXJjZSogZmlsbFBhaW50aW5nUmVzb3VyY2UgPSBSZW5kZXJTVkdSZXNvdXJjZTo6ZmlsbFBh
aW50aW5nUmVzb3VyY2UoY29uc3RfY2FzdDxSZW5kZXJTVkdTaGFwZSo+KCZzaGFwZSksIHNoYXBl
LnN0eWxlKCksIGZhbGxiYWNrQ29sb3IpKSB7CiAgICAgICAgICAgICBUZXh0U3RyZWFtU2VwYXJh
dG9yIHMoIiAiKTsKICAgICAgICAgICAgIHRzIDw8ICIgW2ZpbGw9eyIgPDwgczsKICAgICAgICAg
ICAgIHdyaXRlU1ZHUGFpbnRpbmdSZXNvdXJjZSh0cywgZmlsbFBhaW50aW5nUmVzb3VyY2UpOwpA
QCAtMzQ2LDEyICszNDcsMTIgQEAgc3RhdGljIFRleHRTdHJlYW0mIHdyaXRlUG9zaXRpb25BbmRT
dHlsZShUZXh0U3RyZWFtJiB0cywgY29uc3QgUmVuZGVyT2JqZWN0JiBvYmoKICAgICByZXR1cm4g
dHM7CiB9CiAKLXN0YXRpYyBUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJlYW0mIHRzLCBj
b25zdCBSZW5kZXJTVkdQYXRoJiBwYXRoKQorc3RhdGljIFRleHRTdHJlYW0mIG9wZXJhdG9yPDwo
VGV4dFN0cmVhbSYgdHMsIGNvbnN0IFJlbmRlclNWR1NoYXBlJiBzaGFwZSkKIHsKLSAgICB3cml0
ZVBvc2l0aW9uQW5kU3R5bGUodHMsIHBhdGgpOworICAgIHdyaXRlUG9zaXRpb25BbmRTdHlsZSh0
cywgc2hhcGUpOwogCi0gICAgQVNTRVJUKHBhdGgubm9kZSgpLT5pc1NWR0VsZW1lbnQoKSk7Ci0g
ICAgU1ZHRWxlbWVudCogc3ZnRWxlbWVudCA9IHN0YXRpY19jYXN0PFNWR0VsZW1lbnQqPihwYXRo
Lm5vZGUoKSk7CisgICAgQVNTRVJUKHNoYXBlLm5vZGUoKS0+aXNTVkdFbGVtZW50KCkpOworICAg
IFNWR0VsZW1lbnQqIHN2Z0VsZW1lbnQgPSBzdGF0aWNfY2FzdDxTVkdFbGVtZW50Kj4oc2hhcGUu
bm9kZSgpKTsKIAogICAgIGlmIChzdmdFbGVtZW50LT5oYXNUYWdOYW1lKFNWR05hbWVzOjpyZWN0
VGFnKSkgewogICAgICAgICBTVkdSZWN0RWxlbWVudCogZWxlbWVudCA9IHN0YXRpY19jYXN0PFNW
R1JlY3RFbGVtZW50Kj4oc3ZnRWxlbWVudCk7CkBAIC02NTMsMTEgKzY1NCwxMSBAQCB2b2lkIHdy
aXRlU1ZHSW1hZ2UoVGV4dFN0cmVhbSYgdHMsIGNvbnN0IFJlbmRlclNWR0ltYWdlJiBpbWFnZSwg
aW50IGluZGVudCkKICAgICB3cml0ZVJlc291cmNlcyh0cywgaW1hZ2UsIGluZGVudCk7CiB9CiAK
LXZvaWQgd3JpdGUoVGV4dFN0cmVhbSYgdHMsIGNvbnN0IFJlbmRlclNWR1BhdGgmIHBhdGgsIGlu
dCBpbmRlbnQpCit2b2lkIHdyaXRlKFRleHRTdHJlYW0mIHRzLCBjb25zdCBSZW5kZXJTVkdTaGFw
ZSYgc2hhcGUsIGludCBpbmRlbnQpCiB7Ci0gICAgd3JpdGVTdGFuZGFyZFByZWZpeCh0cywgcGF0
aCwgaW5kZW50KTsKLSAgICB0cyA8PCBwYXRoIDw8ICJcbiI7Ci0gICAgd3JpdGVSZXNvdXJjZXMo
dHMsIHBhdGgsIGluZGVudCk7CisgICAgd3JpdGVTdGFuZGFyZFByZWZpeCh0cywgc2hhcGUsIGlu
ZGVudCk7CisgICAgdHMgPDwgc2hhcGUgPDwgIlxuIjsKKyAgICB3cml0ZVJlc291cmNlcyh0cywg
c2hhcGUsIGluZGVudCk7CiB9CiAKIHZvaWQgd3JpdGVTVkdHcmFkaWVudFN0b3AoVGV4dFN0cmVh
bSYgdHMsIGNvbnN0IFJlbmRlclNWR0dyYWRpZW50U3RvcCYgc3RvcCwgaW50IGluZGVudCkKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHUmVuZGVyVHJlZUFzVGV4
dC5oIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdSZW5kZXJUcmVlQXNUZXh0LmgK
aW5kZXggY2UwN2E1Yy4uMzU5OGM4MyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL3N2Zy9TVkdSZW5kZXJUcmVlQXNUZXh0LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL3N2Zy9TVkdSZW5kZXJUcmVlQXNUZXh0LmgKQEAgLTQxLDE0ICs0MSwxNCBAQCBjbGFzcyBS
ZW5kZXJJbWFnZTsKIGNsYXNzIFJlbmRlck9iamVjdDsKIGNsYXNzIFJlbmRlclNWR0dyYWRpZW50
U3RvcDsKIGNsYXNzIFJlbmRlclNWR0ltYWdlOwotY2xhc3MgUmVuZGVyU1ZHUGF0aDsKK2NsYXNz
IFJlbmRlclNWR1NoYXBlOwogY2xhc3MgUmVuZGVyU1ZHUm9vdDsKIGNsYXNzIFJlbmRlclRleHQ7
CiBjbGFzcyBBZmZpbmVUcmFuc2Zvcm07CiBjbGFzcyBTVkdVbml0VHlwZXM7CiAKIC8vIGZ1bmN0
aW9ucyB1c2VkIGJ5IHRoZSBtYWluIFJlbmRlclRyZWVBc1RleHQgY29kZQotdm9pZCB3cml0ZShU
ZXh0U3RyZWFtJiwgY29uc3QgUmVuZGVyU1ZHUGF0aCYsIGludCBpbmRlbnQpOwordm9pZCB3cml0
ZShUZXh0U3RyZWFtJiwgY29uc3QgUmVuZGVyU1ZHU2hhcGUmLCBpbnQgaW5kZW50KTsKIHZvaWQg
d3JpdGUoVGV4dFN0cmVhbSYsIGNvbnN0IFJlbmRlclNWR1Jvb3QmLCBpbnQgaW5kZW50KTsKIHZv
aWQgd3JpdGVTVkdHcmFkaWVudFN0b3AoVGV4dFN0cmVhbSYsIGNvbnN0IFJlbmRlclNWR0dyYWRp
ZW50U3RvcCYsIGludCBpbmRlbnQpOwogdm9pZCB3cml0ZVNWR1Jlc291cmNlQ29udGFpbmVyKFRl
eHRTdHJlYW0mLCBjb25zdCBSZW5kZXJPYmplY3QmLCBpbnQgaW5kZW50KTsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdDaXJjbGVFbGVtZW50LmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L3N2Zy9TVkdDaXJjbGVFbGVtZW50LmNwcAppbmRleCAyYWU2OWI4Li4wMzY2OWUwIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHQ2lyY2xlRWxlbWVudC5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUvc3ZnL1NWR0NpcmNsZUVsZW1lbnQuY3BwCkBAIC0xMjQsNyArMTI0LDcgQEAgdm9p
ZCBTVkdDaXJjbGVFbGVtZW50OjpzdmdBdHRyaWJ1dGVDaGFuZ2VkKGNvbnN0IFF1YWxpZmllZE5h
bWUmIGF0dHJOYW1lKQogICAgICAgICByZXR1cm47CiAKICAgICBpZiAoaXNMZW5ndGhBdHRyaWJ1
dGUpIHsKLSAgICAgICAgcmVuZGVyZXItPnNldE5lZWRzUGF0aFVwZGF0ZSgpOworICAgICAgICBy
ZW5kZXJlci0+c2V0TmVlZHNTaGFwZVVwZGF0ZSgpOwogICAgICAgICBSZW5kZXJTVkdSZXNvdXJj
ZTo6bWFya0ZvckxheW91dEFuZFBhcmVudFJlc291cmNlSW52YWxpZGF0aW9uKHJlbmRlcmVyKTsK
ICAgICAgICAgcmV0dXJuOwogICAgIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9T
VkdFbGxpcHNlRWxlbWVudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRWxsaXBzZUVsZW1l
bnQuY3BwCmluZGV4IGNlYTA2NmQuLmNhMDE3YzQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3N2Zy9TVkdFbGxpcHNlRWxlbWVudC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0Vs
bGlwc2VFbGVtZW50LmNwcApAQCAtMTI5LDcgKzEyOSw3IEBAIHZvaWQgU1ZHRWxsaXBzZUVsZW1l
bnQ6OnN2Z0F0dHJpYnV0ZUNoYW5nZWQoY29uc3QgUXVhbGlmaWVkTmFtZSYgYXR0ck5hbWUpCiAg
ICAgICAgIHJldHVybjsKIAogICAgIGlmIChpc0xlbmd0aEF0dHJpYnV0ZSkgewotICAgICAgICBy
ZW5kZXJlci0+c2V0TmVlZHNQYXRoVXBkYXRlKCk7CisgICAgICAgIHJlbmRlcmVyLT5zZXROZWVk
c1NoYXBlVXBkYXRlKCk7CiAgICAgICAgIFJlbmRlclNWR1Jlc291cmNlOjptYXJrRm9yTGF5b3V0
QW5kUGFyZW50UmVzb3VyY2VJbnZhbGlkYXRpb24ocmVuZGVyZXIpOwogICAgICAgICByZXR1cm47
CiAgICAgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0xpbmVFbGVtZW50LmNw
cCBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdMaW5lRWxlbWVudC5jcHAKaW5kZXggYzdjYTExZS4u
YjFiYjhlYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0xpbmVFbGVtZW50LmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHTGluZUVsZW1lbnQuY3BwCkBAIC0xMjksNyAr
MTI5LDcgQEAgdm9pZCBTVkdMaW5lRWxlbWVudDo6c3ZnQXR0cmlidXRlQ2hhbmdlZChjb25zdCBR
dWFsaWZpZWROYW1lJiBhdHRyTmFtZSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgaWYgKGlzTGVu
Z3RoQXR0cmlidXRlKSB7Ci0gICAgICAgIHJlbmRlcmVyLT5zZXROZWVkc1BhdGhVcGRhdGUoKTsK
KyAgICAgICAgcmVuZGVyZXItPnNldE5lZWRzU2hhcGVVcGRhdGUoKTsKICAgICAgICAgUmVuZGVy
U1ZHUmVzb3VyY2U6Om1hcmtGb3JMYXlvdXRBbmRQYXJlbnRSZXNvdXJjZUludmFsaWRhdGlvbihy
ZW5kZXJlcik7CiAgICAgICAgIHJldHVybjsKICAgICB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9zdmcvU1ZHUGF0aEVsZW1lbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvc3ZnL1NWR1BhdGhF
bGVtZW50LmNwcAppbmRleCBhN2EzMzdlLi5mZTMzNTk1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9zdmcvU1ZHUGF0aEVsZW1lbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdQ
YXRoRWxlbWVudC5jcHAKQEAgLTI2OSw3ICsyNjksNyBAQCB2b2lkIFNWR1BhdGhFbGVtZW50Ojpz
dmdBdHRyaWJ1dGVDaGFuZ2VkKGNvbnN0IFF1YWxpZmllZE5hbWUmIGF0dHJOYW1lKQogICAgICAg
ICB9CiAKICAgICAgICAgaWYgKHJlbmRlcmVyKQotICAgICAgICAgICAgcmVuZGVyZXItPnNldE5l
ZWRzUGF0aFVwZGF0ZSgpOworICAgICAgICAgICAgcmVuZGVyZXItPnNldE5lZWRzU2hhcGVVcGRh
dGUoKTsKICAgICB9CiAKICAgICBpZiAocmVuZGVyZXIpCkBAIC0zNTUsMTAgKzM1NSwxNiBAQCB2
b2lkIFNWR1BhdGhFbGVtZW50OjpwYXRoU2VnTGlzdENoYW5nZWQoU1ZHUGF0aFNlZ1JvbGUgcm9s
ZSkKICAgICBpZiAoIXJlbmRlcmVyKQogICAgICAgICByZXR1cm47CiAKLSAgICByZW5kZXJlci0+
c2V0TmVlZHNQYXRoVXBkYXRlKCk7CisgICAgcmVuZGVyZXItPnNldE5lZWRzU2hhcGVVcGRhdGUo
KTsKICAgICBSZW5kZXJTVkdSZXNvdXJjZTo6bWFya0ZvckxheW91dEFuZFBhcmVudFJlc291cmNl
SW52YWxpZGF0aW9uKHJlbmRlcmVyKTsKIH0KIAorUmVuZGVyT2JqZWN0KiBTVkdQYXRoRWxlbWVu
dDo6Y3JlYXRlUmVuZGVyZXIoUmVuZGVyQXJlbmEqIGFyZW5hLCBSZW5kZXJTdHlsZSopCit7Cisg
ICAgLy8gQnkgZGVmYXVsdCwgYW55IHN1YmNsYXNzIGlzIGV4cGVjdGVkIHRvIGRvIHBhdGgtYmFz
ZWQgZHJhd2luZworICAgIHJldHVybiBuZXcgKGFyZW5hKSBSZW5kZXJTVkdQYXRoKHRoaXMpOwor
fQorCiB9CiAKICNlbmRpZiAvLyBFTkFCTEUoU1ZHKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvc3ZnL1NWR1BhdGhFbGVtZW50LmggYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHUGF0aEVsZW1l
bnQuaAppbmRleCAxZDM3ZDBlLi41NGI4ZmUyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9z
dmcvU1ZHUGF0aEVsZW1lbnQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHUGF0aEVsZW1l
bnQuaApAQCAtMTIyLDYgKzEyMiw4IEBAIHByaXZhdGU6CiAgICAgdmlydHVhbCB2b2lkIHN5bmNo
cm9uaXplUmVxdWlyZWRFeHRlbnNpb25zKCkgeyBTVkdUZXN0czo6c3luY2hyb25pemVSZXF1aXJl
ZEV4dGVuc2lvbnModGhpcyk7IH0KICAgICB2aXJ0dWFsIHZvaWQgc3luY2hyb25pemVTeXN0ZW1M
YW5ndWFnZSgpIHsgU1ZHVGVzdHM6OnN5bmNocm9uaXplU3lzdGVtTGFuZ3VhZ2UodGhpcyk7IH0K
IAorICAgIFJlbmRlck9iamVjdCogY3JlYXRlUmVuZGVyZXIoUmVuZGVyQXJlbmEqLCBSZW5kZXJT
dHlsZSopOworCiBwcml2YXRlOgogICAgIE93blB0cjxTVkdQYXRoQnl0ZVN0cmVhbT4gbV9wYXRo
Qnl0ZVN0cmVhbTsKICAgICBtdXRhYmxlIFNWR1N5bmNocm9uaXphYmxlQW5pbWF0ZWRQcm9wZXJ0
eTxTVkdQYXRoU2VnTGlzdD4gbV9wYXRoU2VnTGlzdDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3N2Zy9TVkdQb2x5RWxlbWVudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHUG9seUVs
ZW1lbnQuY3BwCmluZGV4IDYxNmI4NjcuLmYzMGNhNGEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3N2Zy9TVkdQb2x5RWxlbWVudC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvc3ZnL1NWR1Bv
bHlFbGVtZW50LmNwcApAQCAtMTI0LDcgKzEyNCw3IEBAIHZvaWQgU1ZHUG9seUVsZW1lbnQ6OnN2
Z0F0dHJpYnV0ZUNoYW5nZWQoY29uc3QgUXVhbGlmaWVkTmFtZSYgYXR0ck5hbWUpCiAgICAgICAg
IHJldHVybjsKIAogICAgIGlmIChhdHRyTmFtZSA9PSBTVkdOYW1lczo6cG9pbnRzQXR0cikgewot
ICAgICAgICByZW5kZXJlci0+c2V0TmVlZHNQYXRoVXBkYXRlKCk7CisgICAgICAgIHJlbmRlcmVy
LT5zZXROZWVkc1NoYXBlVXBkYXRlKCk7CiAgICAgICAgIFJlbmRlclNWR1Jlc291cmNlOjptYXJr
Rm9yTGF5b3V0QW5kUGFyZW50UmVzb3VyY2VJbnZhbGlkYXRpb24ocmVuZGVyZXIpOwogICAgICAg
ICByZXR1cm47CiAgICAgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvc3ZnL1NWR1JlY3RF
bGVtZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdSZWN0RWxlbWVudC5jcHAKaW5kZXgg
ZTg0Nzc0ZC4uMTg3OWUwYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvc3ZnL1NWR1JlY3RF
bGVtZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHUmVjdEVsZW1lbnQuY3BwCkBA
IC0yNSw2ICsyNSw3IEBACiAKICNpbmNsdWRlICJBdHRyaWJ1dGUuaCIKICNpbmNsdWRlICJSZW5k
ZXJTVkdQYXRoLmgiCisjaW5jbHVkZSAiUmVuZGVyU1ZHUmVjdC5oIgogI2luY2x1ZGUgIlJlbmRl
clNWR1Jlc291cmNlLmgiCiAjaW5jbHVkZSAiU1ZHRWxlbWVudEluc3RhbmNlLmgiCiAjaW5jbHVk
ZSAiU1ZHTGVuZ3RoLmgiCkBAIC0zMiw2ICszMyw4IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsK
IAorY2xhc3MgUmVuZGVyU1ZHUmVjdDsKKwogLy8gQW5pbWF0ZWQgcHJvcGVydHkgZGVmaW5pdGlv
bnMKIERFRklORV9BTklNQVRFRF9MRU5HVEgoU1ZHUmVjdEVsZW1lbnQsIFNWR05hbWVzOjp4QXR0
ciwgWCwgeCkKIERFRklORV9BTklNQVRFRF9MRU5HVEgoU1ZHUmVjdEVsZW1lbnQsIFNWR05hbWVz
Ojp5QXR0ciwgWSwgeSkKQEAgLTEzNywxMiArMTQwLDEyIEBAIHZvaWQgU1ZHUmVjdEVsZW1lbnQ6
OnN2Z0F0dHJpYnV0ZUNoYW5nZWQoY29uc3QgUXVhbGlmaWVkTmFtZSYgYXR0ck5hbWUpCiAgICAg
aWYgKFNWR1Rlc3RzOjpoYW5kbGVBdHRyaWJ1dGVDaGFuZ2UodGhpcywgYXR0ck5hbWUpKQogICAg
ICAgICByZXR1cm47CiAKLSAgICBSZW5kZXJTVkdQYXRoKiByZW5kZXJlciA9IHN0YXRpY19jYXN0
PFJlbmRlclNWR1BhdGgqPih0aGlzLT5yZW5kZXJlcigpKTsKKyAgICBSZW5kZXJTVkdSZWN0KiBy
ZW5kZXJlciA9IHN0YXRpY19jYXN0PFJlbmRlclNWR1JlY3QqPih0aGlzLT5yZW5kZXJlcigpKTsK
ICAgICBpZiAoIXJlbmRlcmVyKQogICAgICAgICByZXR1cm47CiAKICAgICBpZiAoaXNMZW5ndGhB
dHRyaWJ1dGUpIHsKLSAgICAgICAgcmVuZGVyZXItPnNldE5lZWRzUGF0aFVwZGF0ZSgpOworICAg
ICAgICByZW5kZXJlci0+c2V0TmVlZHNTaGFwZVVwZGF0ZSgpOwogICAgICAgICBSZW5kZXJTVkdS
ZXNvdXJjZTo6bWFya0ZvckxheW91dEFuZFBhcmVudFJlc291cmNlSW52YWxpZGF0aW9uKHJlbmRl
cmVyKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KQEAgLTE5OCw2ICsyMDEsMTEgQEAgYm9vbCBT
VkdSZWN0RWxlbWVudDo6c2VsZkhhc1JlbGF0aXZlTGVuZ3RocygpIGNvbnN0CiAgICAgICAgIHx8
IHJ5KCkuaXNSZWxhdGl2ZSgpOwogfQogCitSZW5kZXJPYmplY3QqIFNWR1JlY3RFbGVtZW50Ojpj
cmVhdGVSZW5kZXJlcihSZW5kZXJBcmVuYSogYXJlbmEsIFJlbmRlclN0eWxlKikKK3sKKyAgICBy
ZXR1cm4gbmV3IChhcmVuYSkgUmVuZGVyU1ZHUmVjdCh0aGlzKTsKK30KKwogfQogCiAjZW5kaWYg
Ly8gRU5BQkxFKFNWRykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdSZWN0RWxl
bWVudC5oIGIvU291cmNlL1dlYkNvcmUvc3ZnL1NWR1JlY3RFbGVtZW50LmgKaW5kZXggOTk0Mzdm
My4uOWJmNjAyZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvc3ZnL1NWR1JlY3RFbGVtZW50
LmgKKysrIGIvU291cmNlL1dlYkNvcmUvc3ZnL1NWR1JlY3RFbGVtZW50LmgKQEAgLTUyLDYgKzUy
LDggQEAgcHJpdmF0ZToKIAogICAgIHZpcnR1YWwgYm9vbCBzZWxmSGFzUmVsYXRpdmVMZW5ndGhz
KCkgY29uc3Q7CiAKKyAgICBSZW5kZXJPYmplY3QqIGNyZWF0ZVJlbmRlcmVyKFJlbmRlckFyZW5h
KiwgUmVuZGVyU3R5bGUqKTsKKwogICAgIEJFR0lOX0RFQ0xBUkVfQU5JTUFURURfUFJPUEVSVElF
UyhTVkdSZWN0RWxlbWVudCkKICAgICAgICAgREVDTEFSRV9BTklNQVRFRF9MRU5HVEgoWCwgeCkK
ICAgICAgICAgREVDTEFSRV9BTklNQVRFRF9MRU5HVEgoWSwgeSkKLS0gCjEuNy40LjEKCg==
</data>
<flag name="commit-queue"
          id="100600"
          type_id="3"
          status="-"
          setter="gyuyoung.kim"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>104687</attachid>
            <date>2011-08-22 09:59:14 -0700</date>
            <delta_ts>2011-08-23 06:53:14 -0700</delta_ts>
            <desc>Draft patch</desc>
            <filename>0001-render_fix.patch</filename>
            <type>text/plain</type>
            <size>72782</size>
            <attacher name="Renata Hodovan">rhodovan.u-szeged</attacher>
            
              <data encoding="base64">RnJvbSAyM2NmMDQ3OWJiMmM5NDkxYWUxYzA1ZWJmMDRmOWI1M2VmNjI0MjgwIE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBSZW5hdGEgSG9kb3ZhbiA8cmVuaUB3ZWJraXQub3JnPgpEYXRl
OiBNb24sIDIyIEF1ZyAyMDExIDE4OjU3OjI5ICswMjAwClN1YmplY3Q6IFtQQVRDSF0gcmVuZGVy
X2ZpeAoKLS0tCiBTb3VyY2UvV2ViQ29yZS9DTWFrZUxpc3RzLnR4dCAgICAgICAgICAgICAgICAg
ICAgICB8ICAgIDEgKwogU291cmNlL1dlYkNvcmUvR05VbWFrZWZpbGUubGlzdC5hbSAgICAgICAg
ICAgICAgICAgfCAgICAyICsKIFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwaSAgICAgICAgICAg
ICAgICAgICAgICAgIHwgICAgMiArCiBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnBybyAgICAgICAg
ICAgICAgICAgICAgICAgICB8ICAgIDQgKwogU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXBy
b2ovcHJvamVjdC5wYnhwcm9qICAgfCAgICA0ICsKIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJPYmplY3QuaCAgICAgICAgICAgIHwgICAgMiArCiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvUmVuZGVyVHJlZUFzVGV4dC5jcHAgICAgICB8ICAgIDQgKy0KIFNvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9zdmcvUmVuZGVyU1ZHUGF0aC5jcHAgICAgIHwgIDM1MiArLS0tLS0tLS0tLS0tLS0t
LQogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdQYXRoLmggICAgICAgfCAg
IDc0ICstLS0tCiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1JlY3QuY3Bw
ICAgICB8ICAxMzkgKysrKysrKwogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJT
VkdSZWN0LmggICAgICAgfCAgIDYyICsrKwogLi4uL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVz
b3VyY2VDbGlwcGVyLmNwcCAgICAgfCAgICA2ICstCiAuLi4vcmVuZGVyaW5nL3N2Zy9SZW5kZXJT
VkdSZXNvdXJjZUNvbnRhaW5lci5jcHAgICB8ICAgIDIgKy0KIFNvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9zdmcvUmVuZGVyU1ZHU2hhcGUuY3BwICAgIHwgIDQyNiArKysrKysrKysrKysrKysrKysr
KwogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdTaGFwZS5oICAgICAgfCAg
MTY1ICsrKysrKysrCiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR1JlbmRlclN1cHBv
cnQuY3BwICB8ICAgIDYgKy0KIC4uLi9XZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHUmVuZGVyVHJl
ZUFzVGV4dC5jcHAgIHwgICAzMSArLQogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdS
ZW5kZXJUcmVlQXNUZXh0LmggfCAgICA0ICstCiBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHQ2lyY2xl
RWxlbWVudC5jcHAgICAgICAgICAgICB8ICAgIDIgKy0KIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdF
bGxpcHNlRWxlbWVudC5jcHAgICAgICAgICAgIHwgICAgMiArLQogU291cmNlL1dlYkNvcmUvc3Zn
L1NWR0xpbmVFbGVtZW50LmNwcCAgICAgICAgICAgICAgfCAgICAyICstCiBTb3VyY2UvV2ViQ29y
ZS9zdmcvU1ZHUGF0aEVsZW1lbnQuY3BwICAgICAgICAgICAgICB8ICAgMTAgKy0KIFNvdXJjZS9X
ZWJDb3JlL3N2Zy9TVkdQYXRoRWxlbWVudC5oICAgICAgICAgICAgICAgIHwgICAgMiArCiBTb3Vy
Y2UvV2ViQ29yZS9zdmcvU1ZHUG9seUVsZW1lbnQuY3BwICAgICAgICAgICAgICB8ICAgIDIgKy0K
IFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdSZWN0RWxlbWVudC5jcHAgICAgICAgICAgICAgIHwgICAx
MiArLQogU291cmNlL1dlYkNvcmUvc3ZnL1NWR1JlY3RFbGVtZW50LmggICAgICAgICAgICAgICAg
fCAgICAyICsKIDI2IGZpbGVzIGNoYW5nZWQsIDg2OSBpbnNlcnRpb25zKCspLCA0NTEgZGVsZXRp
b25zKC0pCiBjcmVhdGUgbW9kZSAxMDA2NDQgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9S
ZW5kZXJTVkdSZWN0LmNwcAogY3JlYXRlIG1vZGUgMTAwNjQ0IFNvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9zdmcvUmVuZGVyU1ZHUmVjdC5oCiBjcmVhdGUgbW9kZSAxMDA2NDQgU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdTaGFwZS5jcHAKIGNyZWF0ZSBtb2RlIDEwMDY0NCBT
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1NoYXBlLmgKCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9DTWFrZUxpc3RzLnR4dCBiL1NvdXJjZS9XZWJDb3JlL0NNYWtlTGlz
dHMudHh0CmluZGV4IDcyOTRiNjkuLjAxNWUzYmUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L0NNYWtlTGlzdHMudHh0CisrKyBiL1NvdXJjZS9XZWJDb3JlL0NNYWtlTGlzdHMudHh0CkBAIC0x
NTgwLDYgKzE1ODAsNyBAQCBJRiAoRU5BQkxFX1NWRykKICAgICAgICAgcmVuZGVyaW5nL3N2Zy9S
ZW5kZXJTVkdJbmxpbmVUZXh0LmNwcAogICAgICAgICByZW5kZXJpbmcvc3ZnL1JlbmRlclNWR01v
ZGVsT2JqZWN0LmNwcAogICAgICAgICByZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1BhdGguY3BwCisg
ICAgICAgIHJlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVjdC5jcHAKICAgICAgICAgcmVuZGVyaW5n
L3N2Zy9SZW5kZXJTVkdSZXNvdXJjZS5jcHAKICAgICAgICAgcmVuZGVyaW5nL3N2Zy9SZW5kZXJT
VkdSZXNvdXJjZUNsaXBwZXIuY3BwCiAgICAgICAgIHJlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVz
b3VyY2VDb250YWluZXIuY3BwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9HTlVtYWtlZmls
ZS5saXN0LmFtIGIvU291cmNlL1dlYkNvcmUvR05VbWFrZWZpbGUubGlzdC5hbQppbmRleCAyNmYw
YTUyLi4zNDI3YmNhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9HTlVtYWtlZmlsZS5saXN0
LmFtCisrKyBiL1NvdXJjZS9XZWJDb3JlL0dOVW1ha2VmaWxlLmxpc3QuYW0KQEAgLTMxODksNiAr
MzE4OSw4IEBAIHdlYmNvcmVfc291cmNlcyArPSBcCiAJU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L3N2Zy9SZW5kZXJTVkdNb2RlbE9iamVjdC5oIFwKIAlTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
c3ZnL1JlbmRlclNWR1BhdGguY3BwIFwKIAlTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1Jl
bmRlclNWR1BhdGguaCBcCisJU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdS
ZWN0LmNwcCBcCisJU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZWN0Lmgg
XAogCVNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VDbGlwcGVy
LmNwcCBcCiAJU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJjZUNs
aXBwZXIuaCBcCiAJU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJj
ZUNvbnRhaW5lci5jcHAgXApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBp
IGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBpCmluZGV4IGE2MzZiMmIuLjZiOTBjMDkgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwaQorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9XZWJDb3JlLmd5cGkKQEAgLTU4NjksNiArNTg2OSw4IEBACiAgICAgICAgICAgICAncmVuZGVy
aW5nL3N2Zy9SZW5kZXJTVkdNb2RlbE9iamVjdC5oJywKICAgICAgICAgICAgICdyZW5kZXJpbmcv
c3ZnL1JlbmRlclNWR1BhdGguY3BwJywKICAgICAgICAgICAgICdyZW5kZXJpbmcvc3ZnL1JlbmRl
clNWR1BhdGguaCcsCisgICAgICAgICAgICAncmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZWN0LmNw
cCcsCisgICAgICAgICAgICAncmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZWN0LmgnLAogICAgICAg
ICAgICAgJ3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2UuY3BwJywKICAgICAgICAgICAg
ICdyZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291cmNlLmgnLAogICAgICAgICAgICAgJ3JlbmRl
cmluZy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VDbGlwcGVyLmNwcCcsCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9XZWJDb3JlLnBybyBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUucHJvCmluZGV4
IDE3N2ZiMzUuLjQwMmU1MjMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUucHJv
CisrKyBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUucHJvCkBAIC0yMjY2LDYgKzIyNjYsNyBAQCBI
RUFERVJTICs9IFwKICAgICByZW5kZXJpbmcvc3ZnL1JlbmRlclNWR0lubGluZVRleHQuaCBcCiAg
ICAgcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdNb2RlbE9iamVjdC5oIFwKICAgICByZW5kZXJpbmcv
c3ZnL1JlbmRlclNWR1BhdGguaCBcCisgICAgcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZWN0Lmgg
XAogICAgIHJlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2UuaCBcCiAgICAgcmVuZGVyaW5n
L3N2Zy9SZW5kZXJTVkdSZXNvdXJjZUNsaXBwZXIuaCBcCiAgICAgcmVuZGVyaW5nL3N2Zy9SZW5k
ZXJTVkdSZXNvdXJjZUNvbnRhaW5lci5oIFwKQEAgLTIyODAsNiArMjI4MSw3IEBAIEhFQURFUlMg
Kz0gXAogICAgIHJlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VTb2xpZENvbG9yLmggXAog
ICAgIHJlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUm9vdC5oIFwKICAgICByZW5kZXJpbmcvc3ZnL1Jl
bmRlclNWR1NoYWRvd1RyZWVSb290Q29udGFpbmVyLmggXAorICAgIHJlbmRlcmluZy9zdmcvUmVu
ZGVyU1ZHU2hhcGUuaCBcCiAgICAgcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdUU3Bhbi5oIFwKICAg
ICByZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1RleHQuaCBcCiAgICAgcmVuZGVyaW5nL3N2Zy9SZW5k
ZXJTVkdUZXh0UGF0aC5oIFwKQEAgLTMyOTksNiArMzMwMSw4IEBAIGNvbnRhaW5zKERFRklORVMs
IEVOQUJMRV9TVkc9MSkgewogICAgICAgICByZW5kZXJpbmcvc3R5bGUvU1ZHUmVuZGVyU3R5bGVE
ZWZzLmNwcCBcCiAgICAgICAgIHJlbmRlcmluZy9Qb2ludGVyRXZlbnRzSGl0UnVsZXMuY3BwIFwK
ICAgICAgICAgcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdQYXRoLmNwcCBcCisgICAgICAgIHJlbmRl
cmluZy9zdmcvUmVuZGVyU1ZHUmVjdC5jcHAgXAorICAgICAgICByZW5kZXJpbmcvc3ZnL1JlbmRl
clNWR1NoYXBlLmNwcCBcCiAgICAgICAgIHN2Zy9hbmltYXRpb24vU01JTFRpbWUuY3BwIFwKICAg
ICAgICAgc3ZnL2FuaW1hdGlvbi9TTUlMVGltZUNvbnRhaW5lci5jcHAgXAogICAgICAgICBzdmcv
YW5pbWF0aW9uL1NWR1NNSUxFbGVtZW50LmNwcCBcCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2ogYi9Tb3VyY2UvV2ViQ29yZS9XZWJD
b3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKaW5kZXggOGI4M2JlNS4uODJlNTkwMiAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9q
CisrKyBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagpA
QCAtOTkwMyw2ICs5OTAzLDggQEAKIAkJOUZGRTNFQTMxMUI1QTQzOTAwMzc4NzRFIC8qIEpTTWVt
b3J5SW5mby5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBKU01lbW9y
eUluZm8uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk5RkZFM0VBNDExQjVBNDM5
MDAzNzg3NEUgLyogSlNNZW1vcnlJbmZvLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IEpTTWVtb3J5SW5mby5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlBMDBCNzIx
OTExREU2NDI3MDA4QUI5RkYgLyogQ2hlY2tlZEludC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IG5hbWUgPSBDaGVja2VkSW50Lmg7IHBhdGggPSBjYW52YXMvQ2hlY2tlZEludC5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OworCQlBMTMwOUI2NDEzRjE4RDkzMDBDOEEwNjUgLyogUmVu
ZGVyU1ZHUmVjdC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBSZW5k
ZXJTVkdSZWN0LmNwcDsgcGF0aCA9IHJlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVjdC5jcHA7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUExMzA5QjY4MTNGMThEQTEwMEM4QTA2NSAvKiBS
ZW5kZXJTVkdSZWN0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IFJlbmRlclNW
R1JlY3QuaDsgcGF0aCA9IHJlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVjdC5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQlBMTM2QTAwQTExMzREQkQyMDBDQzhENTAgLyogWE1MSHR0cFJl
cXVlc3RQcm9ncmVzc0V2ZW50VGhyb3R0bGUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAu
Y3BwOyBwYXRoID0gWE1MSHR0cFJlcXVlc3RQcm9ncmVzc0V2ZW50VGhyb3R0bGUuY3BwOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlBMTM2QTAwQjExMzREQkQyMDBDQzhENTAgLyogWE1M
SHR0cFJlcXVlc3RQcm9ncmVzc0V2ZW50VGhyb3R0bGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gWE1MSHR0cFJlcXVlc3RQcm9ncmVzc0V2ZW50VGhyb3R0bGUuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQTE3QzgxMjAwRjJBNUNGNzAwNURBQUVCIC8qIEhUTUxF
bGVtZW50RmFjdG9yeS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBI
VE1MRWxlbWVudEZhY3RvcnkuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMTI5
NDUsNiArMTI5NDcsOCBAQAogCQkwODY3RDY5MUZFODQwMjhGQzAyQUFDMDcgLyogV2ViS2l0ICov
ID0gewogCQkJaXNhID0gUEJYR3JvdXA7CiAJCQljaGlsZHJlbiA9ICgKKwkJCQlBMTMwOUI2ODEz
RjE4REExMDBDOEEwNjUgLyogUmVuZGVyU1ZHUmVjdC5oICovLAorCQkJCUExMzA5QjY0MTNGMThE
OTMwMEM4QTA2NSAvKiBSZW5kZXJTVkdSZWN0LmNwcCAqLywKIAkJCQk2NUM5N0FGMjA4RUE5MDg4
MDBBQ0QyNzMgLyogY29uZmlnLmggKi8sCiAJCQkJRURFQzk4MDIwQUVEN0UxNzAwNTkxMzdGIC8q
IFdlYkNvcmVQcmVmaXguaCAqLywKIAkJCQk5MzA3MDYxMzA5RTBDQTgyMDBCMTdGRTQgLyogRGVy
aXZlZFNvdXJjZXMubWFrZSAqLywKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9SZW5kZXJPYmplY3QuaCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJPYmplY3Qu
aAppbmRleCAyYTkwNzAxLi5hMGUyZTI5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVyT2JqZWN0LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
ck9iamVjdC5oCkBAIC0zNTQsNiArMzU0LDggQEAgcHVibGljOgogICAgIHZpcnR1YWwgYm9vbCBp
c1NWR0dyYWRpZW50U3RvcCgpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CiAgICAgdmlydHVhbCBi
b29sIGlzU1ZHSGlkZGVuQ29udGFpbmVyKCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KICAgICB2
aXJ0dWFsIGJvb2wgaXNTVkdQYXRoKCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KKyAgICB2aXJ0
dWFsIGJvb2wgaXNTVkdSZWN0KCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KKyAgICB2aXJ0dWFs
IGJvb2wgaXNTVkdTaGFwZSgpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CiAgICAgdmlydHVhbCBi
b29sIGlzU1ZHVGV4dCgpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CiAgICAgdmlydHVhbCBib29s
IGlzU1ZHVGV4dFBhdGgoKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQogICAgIHZpcnR1YWwgYm9v
bCBpc1NWR0lubGluZSgpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVHJlZUFzVGV4dC5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyVHJlZUFzVGV4dC5jcHAKaW5kZXggZmRkNzk0Yi4uMmQ2MDI3OSAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRyZWVBc1RleHQuY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUcmVlQXNUZXh0LmNwcApAQCAt
NTIwLDggKzUyMCw4IEBAIHN0YXRpYyB2b2lkIHdyaXRlVGV4dFJ1bihUZXh0U3RyZWFtJiB0cywg
Y29uc3QgUmVuZGVyVGV4dCYgbywgY29uc3QgSW5saW5lVGV4dEJvCiB2b2lkIHdyaXRlKFRleHRT
dHJlYW0mIHRzLCBjb25zdCBSZW5kZXJPYmplY3QmIG8sIGludCBpbmRlbnQsIFJlbmRlckFzVGV4
dEJlaGF2aW9yIGJlaGF2aW9yKQogewogI2lmIEVOQUJMRShTVkcpCi0gICAgaWYgKG8uaXNTVkdQ
YXRoKCkpIHsKLSAgICAgICAgd3JpdGUodHMsICp0b1JlbmRlclNWR1BhdGgoJm8pLCBpbmRlbnQp
OworICAgIGlmIChvLmlzU1ZHU2hhcGUoKSkgeworICAgICAgICB3cml0ZSh0cywgKnRvUmVuZGVy
U1ZHU2hhcGUoJm8pLCBpbmRlbnQpOwogICAgICAgICByZXR1cm47CiAgICAgfQogICAgIGlmIChv
LmlzU1ZHR3JhZGllbnRTdG9wKCkpIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9zdmcvUmVuZGVyU1ZHUGF0aC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3Zn
L1JlbmRlclNWR1BhdGguY3BwCmluZGV4IGEwMzkxZjcuLmVkYWQ0MzkgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUGF0aC5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdQYXRoLmNwcApAQCAtNiw2ICs2LDggQEAK
ICAqIENvcHlyaWdodCAoQykgMjAwOSBEaXJrIFNjaHVsemUgPGtyaXRAd2Via2l0Lm9yZz4KICAq
IENvcHlyaWdodCAoQykgUmVzZWFyY2ggSW4gTW90aW9uIExpbWl0ZWQgMjAxMC4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KICAqIENvcHlyaWdodCAoQykgMjAwOSBKZWZmIFNjaGlsbGVyIDxjb2RlZHJl
YWRAZ21haWwuY29tPgorICogQ29weXJpZ2h0IChDKSAyMDExIFJlbmF0YSBIb2RvdmFuIDxyZW5p
QHdlYmtpdC5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgVW5pdmVyc2l0eSBvZiBTemVnZWQK
ICAqCiAgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1
dGUgaXQgYW5kL29yCiAgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGli
cmFyeSBHZW5lcmFsIFB1YmxpYwpAQCAtMjgsNDkgKzMwLDEzIEBACiAjaWYgRU5BQkxFKFNWRykK
ICNpbmNsdWRlICJSZW5kZXJTVkdQYXRoLmgiCiAKLSNpbmNsdWRlICJGbG9hdFBvaW50LmgiCi0j
aW5jbHVkZSAiRmxvYXRRdWFkLmgiCi0jaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCi0jaW5j
bHVkZSAiSGl0VGVzdFJlcXVlc3QuaCIKLSNpbmNsdWRlICJQb2ludGVyRXZlbnRzSGl0UnVsZXMu
aCIKLSNpbmNsdWRlICJSZW5kZXJTVkdDb250YWluZXIuaCIKLSNpbmNsdWRlICJSZW5kZXJTVkdS
ZXNvdXJjZU1hcmtlci5oIgotI2luY2x1ZGUgIlJlbmRlclNWR1Jlc291cmNlU29saWRDb2xvci5o
IgotI2luY2x1ZGUgIlNWR1JlbmRlclN1cHBvcnQuaCIKLSNpbmNsdWRlICJTVkdSZXNvdXJjZXMu
aCIKKyNpbmNsdWRlICJTVkdQYXRoRWxlbWVudC5oIgogI2luY2x1ZGUgIlNWR1N0eWxlZFRyYW5z
Zm9ybWFibGVFbGVtZW50LmgiCi0jaW5jbHVkZSAiU1ZHVHJhbnNmb3JtTGlzdC5oIgotI2luY2x1
ZGUgIlNWR1VSSVJlZmVyZW5jZS5oIgotI2luY2x1ZGUgIlN0cm9rZVN0eWxlQXBwbGllci5oIgot
I2luY2x1ZGUgPHd0Zi9NYXRoRXh0cmFzLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotY2xh
c3MgQm91bmRpbmdSZWN0U3Ryb2tlU3R5bGVBcHBsaWVyIDogcHVibGljIFN0cm9rZVN0eWxlQXBw
bGllciB7Ci1wdWJsaWM6Ci0gICAgQm91bmRpbmdSZWN0U3Ryb2tlU3R5bGVBcHBsaWVyKGNvbnN0
IFJlbmRlck9iamVjdCogb2JqZWN0LCBSZW5kZXJTdHlsZSogc3R5bGUpCi0gICAgICAgIDogbV9v
YmplY3Qob2JqZWN0KQotICAgICAgICAsIG1fc3R5bGUoc3R5bGUpCi0gICAgewotICAgICAgICBB
U1NFUlQoc3R5bGUpOwotICAgICAgICBBU1NFUlQob2JqZWN0KTsKLSAgICB9Ci0KLSAgICB2b2lk
IHN0cm9rZVN0eWxlKEdyYXBoaWNzQ29udGV4dCogZ2MpCi0gICAgewotICAgICAgICBTVkdSZW5k
ZXJTdXBwb3J0OjphcHBseVN0cm9rZVN0eWxlVG9Db250ZXh0KGdjLCBtX3N0eWxlLCBtX29iamVj
dCk7Ci0gICAgfQotCi1wcml2YXRlOgotICAgIGNvbnN0IFJlbmRlck9iamVjdCogbV9vYmplY3Q7
Ci0gICAgUmVuZGVyU3R5bGUqIG1fc3R5bGU7Ci19OwotCiBSZW5kZXJTVkdQYXRoOjpSZW5kZXJT
VkdQYXRoKFNWR1N0eWxlZFRyYW5zZm9ybWFibGVFbGVtZW50KiBub2RlKQotICAgIDogUmVuZGVy
U1ZHTW9kZWxPYmplY3Qobm9kZSkKLSAgICAsIG1fbmVlZHNCb3VuZGFyaWVzVXBkYXRlKGZhbHNl
KSAvLyBkZWZhdWx0IGlzIGZhbHNlLCB0aGUgY2FjaGVkIHJlY3RzIGFyZSBlbXB0eSBmcm9tIHRo
ZSBiZWdpbm5pbmcKLSAgICAsIG1fbmVlZHNQYXRoVXBkYXRlKHRydWUpIC8vIGRlZmF1bHQgaXMg
dHJ1ZSwgc28gd2UgZ3JhYiBhIFBhdGggb2JqZWN0IG9uY2UgZnJvbSBTVkdTdHlsZWRUcmFuc2Zv
cm1hYmxlRWxlbWVudAotICAgICwgbV9uZWVkc1RyYW5zZm9ybVVwZGF0ZSh0cnVlKSAvLyBkZWZh
dWx0IGlzIHRydWUsIHNvIHdlIGdyYWIgYSBBZmZpbmVUcmFuc2Zvcm0gb2JqZWN0IG9uY2UgZnJv
bSBTVkdTdHlsZWRUcmFuc2Zvcm1hYmxlRWxlbWVudAorICAgIDogUmVuZGVyU1ZHU2hhcGUobm9k
ZSkKIHsKIH0KIApAQCAtNzgsMzE2ICs0NCw2IEBAIFJlbmRlclNWR1BhdGg6On5SZW5kZXJTVkdQ
YXRoKCkKIHsKIH0KIAotYm9vbCBSZW5kZXJTVkdQYXRoOjpmaWxsQ29udGFpbnMoY29uc3QgRmxv
YXRQb2ludCYgcG9pbnQsIGJvb2wgcmVxdWlyZXNGaWxsLCBXaW5kUnVsZSBmaWxsUnVsZSkKLXsK
LSAgICBpZiAoIW1fZmlsbEJvdW5kaW5nQm94LmNvbnRhaW5zKHBvaW50KSkKLSAgICAgICAgcmV0
dXJuIGZhbHNlOwotCi0gICAgQ29sb3IgZmFsbGJhY2tDb2xvcjsKLSAgICBpZiAocmVxdWlyZXNG
aWxsICYmICFSZW5kZXJTVkdSZXNvdXJjZTo6ZmlsbFBhaW50aW5nUmVzb3VyY2UodGhpcywgc3R5
bGUoKSwgZmFsbGJhY2tDb2xvcikpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIHJldHVy
biBtX3BhdGguY29udGFpbnMocG9pbnQsIGZpbGxSdWxlKTsKLX0KLQotYm9vbCBSZW5kZXJTVkdQ
YXRoOjpzdHJva2VDb250YWlucyhjb25zdCBGbG9hdFBvaW50JiBwb2ludCwgYm9vbCByZXF1aXJl
c1N0cm9rZSkKLXsKLSAgICBpZiAoIW1fc3Ryb2tlQW5kTWFya2VyQm91bmRpbmdCb3guY29udGFp
bnMocG9pbnQpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBDb2xvciBmYWxsYmFja0Nv
bG9yOwotICAgIGlmIChyZXF1aXJlc1N0cm9rZSAmJiAhUmVuZGVyU1ZHUmVzb3VyY2U6OnN0cm9r
ZVBhaW50aW5nUmVzb3VyY2UodGhpcywgc3R5bGUoKSwgZmFsbGJhY2tDb2xvcikpCi0gICAgICAg
IHJldHVybiBmYWxzZTsKLQotICAgIGlmIChzaG91bGRTdHJva2VaZXJvTGVuZ3RoU3VicGF0aCgp
KQotICAgICAgICByZXR1cm4gemVyb0xlbmd0aFN1YnBhdGhSZWN0KCkuY29udGFpbnMocG9pbnQp
OwotCi0gICAgQm91bmRpbmdSZWN0U3Ryb2tlU3R5bGVBcHBsaWVyIHN0cm9rZVN0eWxlKHRoaXMs
IHN0eWxlKCkpOwotICAgIHJldHVybiBtX3BhdGguc3Ryb2tlQ29udGFpbnMoJnN0cm9rZVN0eWxl
LCBwb2ludCk7Ci19Ci0KLXZvaWQgUmVuZGVyU1ZHUGF0aDo6bGF5b3V0KCkKLXsKLSAgICBMYXlv
dXRSZXBhaW50ZXIgcmVwYWludGVyKCp0aGlzLCBjaGVja0ZvclJlcGFpbnREdXJpbmdMYXlvdXQo
KSAmJiBzZWxmTmVlZHNMYXlvdXQoKSk7Ci0gICAgU1ZHU3R5bGVkVHJhbnNmb3JtYWJsZUVsZW1l
bnQqIGVsZW1lbnQgPSBzdGF0aWNfY2FzdDxTVkdTdHlsZWRUcmFuc2Zvcm1hYmxlRWxlbWVudCo+
KG5vZGUoKSk7Ci0KLSAgICBib29sIHVwZGF0ZUNhY2hlZEJvdW5kYXJpZXNJblBhcmVudHMgPSBm
YWxzZTsKLQotICAgIGJvb2wgbmVlZHNQYXRoVXBkYXRlID0gbV9uZWVkc1BhdGhVcGRhdGU7Ci0g
ICAgaWYgKG5lZWRzUGF0aFVwZGF0ZSkgewotICAgICAgICBtX3BhdGguY2xlYXIoKTsKLSAgICAg
ICAgZWxlbWVudC0+dG9QYXRoRGF0YShtX3BhdGgpOwotICAgICAgICBtX25lZWRzUGF0aFVwZGF0
ZSA9IGZhbHNlOwotICAgICAgICB1cGRhdGVDYWNoZWRCb3VuZGFyaWVzSW5QYXJlbnRzID0gdHJ1
ZTsKLSAgICB9Ci0KLSAgICBpZiAobV9uZWVkc1RyYW5zZm9ybVVwZGF0ZSkgewotICAgICAgICBt
X2xvY2FsVHJhbnNmb3JtID0gZWxlbWVudC0+YW5pbWF0ZWRMb2NhbFRyYW5zZm9ybSgpOwotICAg
ICAgICBtX25lZWRzVHJhbnNmb3JtVXBkYXRlID0gZmFsc2U7Ci0gICAgICAgIHVwZGF0ZUNhY2hl
ZEJvdW5kYXJpZXNJblBhcmVudHMgPSB0cnVlOwotICAgIH0KLQotICAgIGlmIChtX25lZWRzQm91
bmRhcmllc1VwZGF0ZSkKLSAgICAgICAgdXBkYXRlQ2FjaGVkQm91bmRhcmllc0luUGFyZW50cyA9
IHRydWU7Ci0KLSAgICAvLyBJbnZhbGlkYXRlIGFsbCByZXNvdXJjZXMgb2YgdGhpcyBjbGllbnQg
aWYgb3VyIGxheW91dCBjaGFuZ2VkLgotICAgIGlmIChtX2V2ZXJIYWRMYXlvdXQgJiYgc2VsZk5l
ZWRzTGF5b3V0KCkpIHsKLSAgICAgICAgU1ZHUmVzb3VyY2VzQ2FjaGU6OmNsaWVudExheW91dENo
YW5nZWQodGhpcyk7Ci0gICAgICAgIG1fbWFya2VyTGF5b3V0SW5mby5jbGVhcigpOwotICAgIH0K
LQotICAgIC8vIEF0IHRoaXMgcG9pbnQgTGF5b3V0UmVwYWludGVyIGFscmVhZHkgZ3JhYmJlZCB0
aGUgb2xkIGJvdW5kcywKLSAgICAvLyByZWNhbGN1bGF0ZSB0aGVtIG5vdyBzbyByZXBhaW50QWZ0
ZXJMYXlvdXQoKSB1c2VzIHRoZSBuZXcgYm91bmRzLgotICAgIGlmIChuZWVkc1BhdGhVcGRhdGUg
fHwgbV9uZWVkc0JvdW5kYXJpZXNVcGRhdGUpIHsKLSAgICAgICAgdXBkYXRlQ2FjaGVkQm91bmRh
cmllcygpOwotICAgICAgICBtX25lZWRzQm91bmRhcmllc1VwZGF0ZSA9IGZhbHNlOwotICAgIH0K
LQotICAgIC8vIElmIG91ciBib3VuZHMgY2hhbmdlZCwgbm90aWZ5IHRoZSBwYXJlbnRzLgotICAg
IGlmICh1cGRhdGVDYWNoZWRCb3VuZGFyaWVzSW5QYXJlbnRzKQotICAgICAgICBSZW5kZXJTVkdN
b2RlbE9iamVjdDo6c2V0TmVlZHNCb3VuZGFyaWVzVXBkYXRlKCk7Ci0KLSAgICByZXBhaW50ZXIu
cmVwYWludEFmdGVyTGF5b3V0KCk7Ci0gICAgc2V0TmVlZHNMYXlvdXQoZmFsc2UpOwotfQotCi1i
b29sIFJlbmRlclNWR1BhdGg6OnNob3VsZFN0cm9rZVplcm9MZW5ndGhTdWJwYXRoKCkgY29uc3QK
LXsKLSAgICAvLyBTcGVjKDExLjQpOiBBbnkgemVybyBsZW5ndGggc3VicGF0aCBzaGFsbCBub3Qg
YmUgc3Ryb2tlZCBpZiB0aGUg4oCYc3Ryb2tlLWxpbmVjYXDigJkgcHJvcGVydHkgaGFzIGEgdmFs
dWUgb2YgYnV0dAotICAgIC8vIGJ1dCBzaGFsbCBiZSBzdHJva2VkIGlmIHRoZSDigJhzdHJva2Ut
bGluZWNhcOKAmSBwcm9wZXJ0eSBoYXMgYSB2YWx1ZSBvZiByb3VuZCBvciBzcXVhcmUKLSAgICBy
ZXR1cm4gc3R5bGUoKS0+c3ZnU3R5bGUoKS0+aGFzU3Ryb2tlKCkgJiYgc3R5bGUoKS0+c3ZnU3R5
bGUoKS0+Y2FwU3R5bGUoKSAhPSBCdXR0Q2FwICYmICFtX2ZpbGxCb3VuZGluZ0JveC53aWR0aCgp
ICYmICFtX2ZpbGxCb3VuZGluZ0JveC5oZWlnaHQoKTsKLX0KLQotRmxvYXRSZWN0IFJlbmRlclNW
R1BhdGg6Onplcm9MZW5ndGhTdWJwYXRoUmVjdCgpIGNvbnN0Ci17Ci0gICAgU1ZHRWxlbWVudCog
c3ZnRWxlbWVudCA9IHN0YXRpY19jYXN0PFNWR0VsZW1lbnQqPihub2RlKCkpOwotICAgIGZsb2F0
IHN0cm9rZVdpZHRoID0gc3R5bGUoKS0+c3ZnU3R5bGUoKS0+c3Ryb2tlV2lkdGgoKS52YWx1ZShz
dmdFbGVtZW50KTsKLSAgICByZXR1cm4gRmxvYXRSZWN0KG1fZmlsbEJvdW5kaW5nQm94LngoKSAt
IHN0cm9rZVdpZHRoIC8gMiwgbV9maWxsQm91bmRpbmdCb3gueSgpIC0gc3Ryb2tlV2lkdGggLyAy
LCBzdHJva2VXaWR0aCwgc3Ryb2tlV2lkdGgpOwotfQotCi12b2lkIFJlbmRlclNWR1BhdGg6OnNl
dHVwU3F1YXJlQ2FwUGF0aChQYXRoKiYgdXNlUGF0aCwgaW50JiBhcHBseU1vZGUpCi17Ci0gICAg
Ly8gU3BlYygxMS40KTogQW55IHplcm8gbGVuZ3RoIHN1YnBhdGggc2hhbGwgbm90IGJlIHN0cm9r
ZWQgaWYgdGhlIOKAmHN0cm9rZS1saW5lY2Fw4oCZIHByb3BlcnR5IGhhcyBhIHZhbHVlIG9mIGJ1
dHQKLSAgICAvLyBidXQgc2hhbGwgYmUgc3Ryb2tlZCBpZiB0aGUg4oCYc3Ryb2tlLWxpbmVjYXDi
gJkgcHJvcGVydHkgaGFzIGEgdmFsdWUgb2Ygcm91bmQgb3Igc3F1YXJlCi0gICAgREVGSU5FX1NU
QVRJQ19MT0NBTChQYXRoLCB0ZW1wUGF0aCwgKCkpOwotCi0gICAgYXBwbHlNb2RlID0gQXBwbHlU
b0ZpbGxNb2RlOwotICAgIHVzZVBhdGggPSAmdGVtcFBhdGg7Ci0gICAgdXNlUGF0aC0+Y2xlYXIo
KTsKLSAgICBpZiAoc3R5bGUoKS0+c3ZnU3R5bGUoKS0+Y2FwU3R5bGUoKSA9PSBTcXVhcmVDYXAp
Ci0gICAgICAgIHVzZVBhdGgtPmFkZFJlY3QoemVyb0xlbmd0aFN1YnBhdGhSZWN0KCkpOwotICAg
IGVsc2UKLSAgICAgICAgdXNlUGF0aC0+YWRkRWxsaXBzZSh6ZXJvTGVuZ3RoU3VicGF0aFJlY3Qo
KSk7Ci19Ci0KLWJvb2wgUmVuZGVyU1ZHUGF0aDo6c2V0dXBOb25TY2FsaW5nU3Ryb2tlUGF0aChQ
YXRoKiYgdXNlUGF0aCwgR3JhcGhpY3NDb250ZXh0U3RhdGVTYXZlciYgc3RhdGVTYXZlcikKLXsK
LSAgICBERUZJTkVfU1RBVElDX0xPQ0FMKFBhdGgsIHRlbXBQYXRoLCAoKSk7Ci0KLSAgICBTVkdT
dHlsZWRUcmFuc2Zvcm1hYmxlRWxlbWVudCogZWxlbWVudCA9IHN0YXRpY19jYXN0PFNWR1N0eWxl
ZFRyYW5zZm9ybWFibGVFbGVtZW50Kj4obm9kZSgpKTsKLSAgICBBZmZpbmVUcmFuc2Zvcm0gbm9u
U2NhbGluZ1N0cm9rZVRyYW5zZm9ybSA9IGVsZW1lbnQtPmdldFNjcmVlbkNUTShTVkdMb2NhdGFi
bGU6OkRpc2FsbG93U3R5bGVVcGRhdGUpOwotICAgIGlmICghbm9uU2NhbGluZ1N0cm9rZVRyYW5z
Zm9ybS5pc0ludmVydGlibGUoKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgdGVtcFBh
dGggPSBtX3BhdGg7Ci0gICAgdXNlUGF0aCA9ICZ0ZW1wUGF0aDsKLSAgICB0ZW1wUGF0aC50cmFu
c2Zvcm0obm9uU2NhbGluZ1N0cm9rZVRyYW5zZm9ybSk7Ci0KLSAgICBzdGF0ZVNhdmVyLnNhdmUo
KTsKLSAgICBzdGF0ZVNhdmVyLmNvbnRleHQoKS0+Y29uY2F0Q1RNKG5vblNjYWxpbmdTdHJva2VU
cmFuc2Zvcm0uaW52ZXJzZSgpKTsKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotdm9pZCBSZW5kZXJT
VkdQYXRoOjpmaWxsQW5kU3Ryb2tlUGF0aChHcmFwaGljc0NvbnRleHQqIGNvbnRleHQpCi17Ci0g
ICAgUmVuZGVyU3R5bGUqIHN0eWxlID0gdGhpcy0+c3R5bGUoKTsKLQotICAgIENvbG9yIGZhbGxi
YWNrQ29sb3I7Ci0gICAgaWYgKFJlbmRlclNWR1Jlc291cmNlKiBmaWxsUGFpbnRpbmdSZXNvdXJj
ZSA9IFJlbmRlclNWR1Jlc291cmNlOjpmaWxsUGFpbnRpbmdSZXNvdXJjZSh0aGlzLCBzdHlsZSwg
ZmFsbGJhY2tDb2xvcikpIHsKLSAgICAgICAgaWYgKGZpbGxQYWludGluZ1Jlc291cmNlLT5hcHBs
eVJlc291cmNlKHRoaXMsIHN0eWxlLCBjb250ZXh0LCBBcHBseVRvRmlsbE1vZGUpKQotICAgICAg
ICAgICAgZmlsbFBhaW50aW5nUmVzb3VyY2UtPnBvc3RBcHBseVJlc291cmNlKHRoaXMsIGNvbnRl
eHQsIEFwcGx5VG9GaWxsTW9kZSwgJm1fcGF0aCk7Ci0gICAgICAgIGVsc2UgaWYgKGZhbGxiYWNr
Q29sb3IuaXNWYWxpZCgpKSB7Ci0gICAgICAgICAgICBSZW5kZXJTVkdSZXNvdXJjZVNvbGlkQ29s
b3IqIGZhbGxiYWNrUmVzb3VyY2UgPSBSZW5kZXJTVkdSZXNvdXJjZTo6c2hhcmVkU29saWRQYWlu
dGluZ1Jlc291cmNlKCk7Ci0gICAgICAgICAgICBmYWxsYmFja1Jlc291cmNlLT5zZXRDb2xvcihm
YWxsYmFja0NvbG9yKTsKLSAgICAgICAgICAgIGlmIChmYWxsYmFja1Jlc291cmNlLT5hcHBseVJl
c291cmNlKHRoaXMsIHN0eWxlLCBjb250ZXh0LCBBcHBseVRvRmlsbE1vZGUpKQotICAgICAgICAg
ICAgICAgIGZhbGxiYWNrUmVzb3VyY2UtPnBvc3RBcHBseVJlc291cmNlKHRoaXMsIGNvbnRleHQs
IEFwcGx5VG9GaWxsTW9kZSwgJm1fcGF0aCk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBmYWxs
YmFja0NvbG9yID0gQ29sb3IoKTsKLSAgICBSZW5kZXJTVkdSZXNvdXJjZSogc3Ryb2tlUGFpbnRp
bmdSZXNvdXJjZSA9IFJlbmRlclNWR1Jlc291cmNlOjpzdHJva2VQYWludGluZ1Jlc291cmNlKHRo
aXMsIHN0eWxlLCBmYWxsYmFja0NvbG9yKTsKLSAgICBpZiAoIXN0cm9rZVBhaW50aW5nUmVzb3Vy
Y2UpCi0gICAgICAgIHJldHVybjsKLQotICAgIFBhdGgqIHVzZVBhdGggPSAmbV9wYXRoOwotICAg
IGludCBhcHBseU1vZGUgPSBBcHBseVRvU3Ryb2tlTW9kZTsKLQotICAgIGJvb2wgbm9uU2NhbGlu
Z1N0cm9rZSA9IHN0eWxlLT5zdmdTdHlsZSgpLT52ZWN0b3JFZmZlY3QoKSA9PSBWRV9OT05fU0NB
TElOR19TVFJPS0U7Ci0KLSAgICBHcmFwaGljc0NvbnRleHRTdGF0ZVNhdmVyIHN0YXRlU2F2ZXIo
KmNvbnRleHQsIGZhbHNlKTsKLQotICAgIC8vIFNwZWMoMTEuNCk6IEFueSB6ZXJvIGxlbmd0aCBz
dWJwYXRoIHNoYWxsIG5vdCBiZSBzdHJva2VkIGlmIHRoZSDigJhzdHJva2UtbGluZWNhcOKAmSBw
cm9wZXJ0eSBoYXMgYSB2YWx1ZSBvZiBidXR0Ci0gICAgLy8gYnV0IHNoYWxsIGJlIHN0cm9rZWQg
aWYgdGhlIOKAmHN0cm9rZS1saW5lY2Fw4oCZIHByb3BlcnR5IGhhcyBhIHZhbHVlIG9mIHJvdW5k
IG9yIHNxdWFyZQotICAgIC8vIEZJWE1FOiB0aGlzIGRvZXMgbm90IHdvcmsgZm9yIHplcm8tbGVu
Z3RoIHN1YnBhdGhzLCBvbmx5IHdoZW4gdG90YWwgcGF0aCBpcyB6ZXJvLWxlbmd0aAotICAgIGlm
IChzaG91bGRTdHJva2VaZXJvTGVuZ3RoU3VicGF0aCgpKQotICAgICAgICBzZXR1cFNxdWFyZUNh
cFBhdGgodXNlUGF0aCwgYXBwbHlNb2RlKTsKLSAgICBlbHNlIGlmIChub25TY2FsaW5nU3Ryb2tl
KSB7Ci0gICAgICAgaWYgKCFzZXR1cE5vblNjYWxpbmdTdHJva2VQYXRoKHVzZVBhdGgsIHN0YXRl
U2F2ZXIpKQotICAgICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgaWYgKHN0cm9rZVBhaW50
aW5nUmVzb3VyY2UtPmFwcGx5UmVzb3VyY2UodGhpcywgc3R5bGUsIGNvbnRleHQsIGFwcGx5TW9k
ZSkpCi0gICAgICAgIHN0cm9rZVBhaW50aW5nUmVzb3VyY2UtPnBvc3RBcHBseVJlc291cmNlKHRo
aXMsIGNvbnRleHQsIGFwcGx5TW9kZSwgdXNlUGF0aCk7Ci0gICAgZWxzZSBpZiAoZmFsbGJhY2tD
b2xvci5pc1ZhbGlkKCkpIHsKLSAgICAgICAgUmVuZGVyU1ZHUmVzb3VyY2VTb2xpZENvbG9yKiBm
YWxsYmFja1Jlc291cmNlID0gUmVuZGVyU1ZHUmVzb3VyY2U6OnNoYXJlZFNvbGlkUGFpbnRpbmdS
ZXNvdXJjZSgpOwotICAgICAgICBmYWxsYmFja1Jlc291cmNlLT5zZXRDb2xvcihmYWxsYmFja0Nv
bG9yKTsKLSAgICAgICAgaWYgKGZhbGxiYWNrUmVzb3VyY2UtPmFwcGx5UmVzb3VyY2UodGhpcywg
c3R5bGUsIGNvbnRleHQsIGFwcGx5TW9kZSkpCi0gICAgICAgICAgICBmYWxsYmFja1Jlc291cmNl
LT5wb3N0QXBwbHlSZXNvdXJjZSh0aGlzLCBjb250ZXh0LCBhcHBseU1vZGUsIHVzZVBhdGgpOwot
ICAgIH0KLX0KLQotdm9pZCBSZW5kZXJTVkdQYXRoOjpwYWludChQYWludEluZm8mIHBhaW50SW5m
bywgY29uc3QgTGF5b3V0UG9pbnQmKQotewotICAgIGlmIChwYWludEluZm8uY29udGV4dC0+cGFp
bnRpbmdEaXNhYmxlZCgpIHx8IHN0eWxlKCktPnZpc2liaWxpdHkoKSA9PSBISURERU4gfHwgbV9w
YXRoLmlzRW1wdHkoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgRmxvYXRSZWN0IGJvdW5kaW5n
Qm94ID0gcmVwYWludFJlY3RJbkxvY2FsQ29vcmRpbmF0ZXMoKTsKLSAgICBpZiAoIVNWR1JlbmRl
clN1cHBvcnQ6OnBhaW50SW5mb0ludGVyc2VjdHNSZXBhaW50UmVjdChib3VuZGluZ0JveCwgbV9s
b2NhbFRyYW5zZm9ybSwgcGFpbnRJbmZvKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgUGFpbnRJ
bmZvIGNoaWxkUGFpbnRJbmZvKHBhaW50SW5mbyk7Ci0gICAgYm9vbCBkcmF3c091dGxpbmUgPSBz
dHlsZSgpLT5vdXRsaW5lV2lkdGgoKSAmJiAoY2hpbGRQYWludEluZm8ucGhhc2UgPT0gUGFpbnRQ
aGFzZU91dGxpbmUgfHwgY2hpbGRQYWludEluZm8ucGhhc2UgPT0gUGFpbnRQaGFzZVNlbGZPdXRs
aW5lKTsKLSAgICBpZiAoZHJhd3NPdXRsaW5lIHx8IGNoaWxkUGFpbnRJbmZvLnBoYXNlID09IFBh
aW50UGhhc2VGb3JlZ3JvdW5kKSB7Ci0gICAgICAgIEdyYXBoaWNzQ29udGV4dFN0YXRlU2F2ZXIg
c3RhdGVTYXZlcigqY2hpbGRQYWludEluZm8uY29udGV4dCk7Ci0gICAgICAgIGNoaWxkUGFpbnRJ
bmZvLmFwcGx5VHJhbnNmb3JtKG1fbG9jYWxUcmFuc2Zvcm0pOwotCi0gICAgICAgIGlmIChjaGls
ZFBhaW50SW5mby5waGFzZSA9PSBQYWludFBoYXNlRm9yZWdyb3VuZCkgewotICAgICAgICAgICAg
UGFpbnRJbmZvIHNhdmVkSW5mbyhjaGlsZFBhaW50SW5mbyk7Ci0KLSAgICAgICAgICAgIGlmIChT
VkdSZW5kZXJTdXBwb3J0OjpwcmVwYXJlVG9SZW5kZXJTVkdDb250ZW50KHRoaXMsIGNoaWxkUGFp
bnRJbmZvKSkgewotICAgICAgICAgICAgICAgIGNvbnN0IFNWR1JlbmRlclN0eWxlKiBzdmdTdHls
ZSA9IHN0eWxlKCktPnN2Z1N0eWxlKCk7Ci0gICAgICAgICAgICAgICAgaWYgKHN2Z1N0eWxlLT5z
aGFwZVJlbmRlcmluZygpID09IFNSX0NSSVNQRURHRVMpCi0gICAgICAgICAgICAgICAgICAgIGNo
aWxkUGFpbnRJbmZvLmNvbnRleHQtPnNldFNob3VsZEFudGlhbGlhcyhmYWxzZSk7Ci0KLSAgICAg
ICAgICAgICAgICBmaWxsQW5kU3Ryb2tlUGF0aChjaGlsZFBhaW50SW5mby5jb250ZXh0KTsKLQot
ICAgICAgICAgICAgICAgIGlmIChzdmdTdHlsZS0+aGFzTWFya2VycygpKQotICAgICAgICAgICAg
ICAgICAgICBtX21hcmtlckxheW91dEluZm8uZHJhd01hcmtlcnMoY2hpbGRQYWludEluZm8pOwot
ICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBTVkdSZW5kZXJTdXBwb3J0OjpmaW5pc2hSZW5k
ZXJTVkdDb250ZW50KHRoaXMsIGNoaWxkUGFpbnRJbmZvLCBzYXZlZEluZm8uY29udGV4dCk7Ci0g
ICAgICAgIH0KLQotICAgICAgICBpZiAoZHJhd3NPdXRsaW5lKQotICAgICAgICAgICAgcGFpbnRP
dXRsaW5lKGNoaWxkUGFpbnRJbmZvLmNvbnRleHQsIEludFJlY3QoYm91bmRpbmdCb3gpKTsKLSAg
ICB9Ci19Ci0KLS8vIFRoaXMgbWV0aG9kIGlzIGNhbGxlZCBmcm9tIGluc2lkZSBwYWludE91dGxp
bmUoKSBzaW5jZSB3ZSBjYWxsIHBhaW50T3V0bGluZSgpCi0vLyB3aGlsZSB0cmFuc2Zvcm1lZCB0
byBvdXIgY29vcmQgc3lzdGVtLCByZXR1cm4gbG9jYWwgY29vcmRzCi12b2lkIFJlbmRlclNWR1Bh
dGg6OmFkZEZvY3VzUmluZ1JlY3RzKFZlY3RvcjxMYXlvdXRSZWN0PiYgcmVjdHMsIGNvbnN0IExh
eW91dFBvaW50JikgCi17Ci0gICAgTGF5b3V0UmVjdCByZWN0ID0gZW5jbG9zaW5nTGF5b3V0UmVj
dChyZXBhaW50UmVjdEluTG9jYWxDb29yZGluYXRlcygpKTsKLSAgICBpZiAoIXJlY3QuaXNFbXB0
eSgpKQotICAgICAgICByZWN0cy5hcHBlbmQocmVjdCk7Ci19Ci0KLWJvb2wgUmVuZGVyU1ZHUGF0
aDo6bm9kZUF0RmxvYXRQb2ludChjb25zdCBIaXRUZXN0UmVxdWVzdCYgcmVxdWVzdCwgSGl0VGVz
dFJlc3VsdCYgcmVzdWx0LCBjb25zdCBGbG9hdFBvaW50JiBwb2ludEluUGFyZW50LCBIaXRUZXN0
QWN0aW9uIGhpdFRlc3RBY3Rpb24pCi17Ci0gICAgLy8gV2Ugb25seSBkcmF3IGluIHRoZSBmb3Jn
cm91bmQgcGhhc2UsIHNvIHdlIG9ubHkgaGl0LXRlc3QgdGhlbi4KLSAgICBpZiAoaGl0VGVzdEFj
dGlvbiAhPSBIaXRUZXN0Rm9yZWdyb3VuZCkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAg
RmxvYXRQb2ludCBsb2NhbFBvaW50ID0gbV9sb2NhbFRyYW5zZm9ybS5pbnZlcnNlKCkubWFwUG9p
bnQocG9pbnRJblBhcmVudCk7Ci0KLSAgICBpZiAoIVNWR1JlbmRlclN1cHBvcnQ6OnBvaW50SW5D
bGlwcGluZ0FyZWEodGhpcywgbG9jYWxQb2ludCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQot
ICAgIFBvaW50ZXJFdmVudHNIaXRSdWxlcyBoaXRSdWxlcyhQb2ludGVyRXZlbnRzSGl0UnVsZXM6
OlNWR19QQVRIX0hJVFRFU1RJTkcsIHJlcXVlc3QsIHN0eWxlKCktPnBvaW50ZXJFdmVudHMoKSk7
Ci0gICAgYm9vbCBpc1Zpc2libGUgPSAoc3R5bGUoKS0+dmlzaWJpbGl0eSgpID09IFZJU0lCTEUp
OwotICAgIGlmIChpc1Zpc2libGUgfHwgIWhpdFJ1bGVzLnJlcXVpcmVWaXNpYmxlKSB7Ci0gICAg
ICAgIGNvbnN0IFNWR1JlbmRlclN0eWxlKiBzdmdTdHlsZSA9IHN0eWxlKCktPnN2Z1N0eWxlKCk7
Ci0gICAgICAgIFdpbmRSdWxlIGZpbGxSdWxlID0gc3ZnU3R5bGUtPmZpbGxSdWxlKCk7Ci0gICAg
ICAgIGlmIChyZXF1ZXN0LnN2Z0NsaXBDb250ZW50KCkpCi0gICAgICAgICAgICBmaWxsUnVsZSA9
IHN2Z1N0eWxlLT5jbGlwUnVsZSgpOwotICAgICAgICBpZiAoKGhpdFJ1bGVzLmNhbkhpdFN0cm9r
ZSAmJiAoc3ZnU3R5bGUtPmhhc1N0cm9rZSgpIHx8ICFoaXRSdWxlcy5yZXF1aXJlU3Ryb2tlKSAm
JiBzdHJva2VDb250YWlucyhsb2NhbFBvaW50LCBoaXRSdWxlcy5yZXF1aXJlU3Ryb2tlKSkKLSAg
ICAgICAgICAgIHx8IChoaXRSdWxlcy5jYW5IaXRGaWxsICYmIChzdmdTdHlsZS0+aGFzRmlsbCgp
IHx8ICFoaXRSdWxlcy5yZXF1aXJlRmlsbCkgJiYgZmlsbENvbnRhaW5zKGxvY2FsUG9pbnQsIGhp
dFJ1bGVzLnJlcXVpcmVGaWxsLCBmaWxsUnVsZSkpKSB7Ci0gICAgICAgICAgICB1cGRhdGVIaXRU
ZXN0UmVzdWx0KHJlc3VsdCwgcm91bmRlZExheW91dFBvaW50KGxvY2FsUG9pbnQpKTsKLSAgICAg
ICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICB9Ci0gICAgfQotICAgIHJldHVybiBmYWxzZTsK
LX0KLQotRmxvYXRSZWN0IFJlbmRlclNWR1BhdGg6OmNhbGN1bGF0ZU1hcmtlckJvdW5kc0lmTmVl
ZGVkKCkKLXsKLSAgICBTVkdFbGVtZW50KiBzdmdFbGVtZW50ID0gc3RhdGljX2Nhc3Q8U1ZHRWxl
bWVudCo+KG5vZGUoKSk7Ci0gICAgQVNTRVJUKHN2Z0VsZW1lbnQgJiYgc3ZnRWxlbWVudC0+ZG9j
dW1lbnQoKSk7Ci0gICAgaWYgKCFzdmdFbGVtZW50LT5pc1N0eWxlZCgpKQotICAgICAgICByZXR1
cm4gRmxvYXRSZWN0KCk7Ci0KLSAgICBTVkdTdHlsZWRFbGVtZW50KiBzdHlsZWRFbGVtZW50ID0g
c3RhdGljX2Nhc3Q8U1ZHU3R5bGVkRWxlbWVudCo+KHN2Z0VsZW1lbnQpOwotICAgIGlmICghc3R5
bGVkRWxlbWVudC0+c3VwcG9ydHNNYXJrZXJzKCkpCi0gICAgICAgIHJldHVybiBGbG9hdFJlY3Qo
KTsKLQotICAgIGNvbnN0IFNWR1JlbmRlclN0eWxlKiBzdmdTdHlsZSA9IHN0eWxlKCktPnN2Z1N0
eWxlKCk7Ci0gICAgQVNTRVJUKHN2Z1N0eWxlLT5oYXNNYXJrZXJzKCkpOwotCi0gICAgU1ZHUmVz
b3VyY2VzKiByZXNvdXJjZXMgPSBTVkdSZXNvdXJjZXNDYWNoZTo6Y2FjaGVkUmVzb3VyY2VzRm9y
UmVuZGVyT2JqZWN0KHRoaXMpOwotICAgIGlmICghcmVzb3VyY2VzKQotICAgICAgICByZXR1cm4g
RmxvYXRSZWN0KCk7Ci0KLSAgICBSZW5kZXJTVkdSZXNvdXJjZU1hcmtlciogbWFya2VyU3RhcnQg
PSByZXNvdXJjZXMtPm1hcmtlclN0YXJ0KCk7Ci0gICAgUmVuZGVyU1ZHUmVzb3VyY2VNYXJrZXIq
IG1hcmtlck1pZCA9IHJlc291cmNlcy0+bWFya2VyTWlkKCk7Ci0gICAgUmVuZGVyU1ZHUmVzb3Vy
Y2VNYXJrZXIqIG1hcmtlckVuZCA9IHJlc291cmNlcy0+bWFya2VyRW5kKCk7Ci0gICAgaWYgKCFt
YXJrZXJTdGFydCAmJiAhbWFya2VyTWlkICYmICFtYXJrZXJFbmQpCi0gICAgICAgIHJldHVybiBG
bG9hdFJlY3QoKTsKLQotICAgIHJldHVybiBtX21hcmtlckxheW91dEluZm8uY2FsY3VsYXRlQm91
bmRhcmllcyhtYXJrZXJTdGFydCwgbWFya2VyTWlkLCBtYXJrZXJFbmQsIHN2Z1N0eWxlLT5zdHJv
a2VXaWR0aCgpLnZhbHVlKHN2Z0VsZW1lbnQpLCBtX3BhdGgpOwotfQotCi12b2lkIFJlbmRlclNW
R1BhdGg6OnVwZGF0ZUNhY2hlZEJvdW5kYXJpZXMoKQotewotICAgIGlmIChtX3BhdGguaXNFbXB0
eSgpKSB7Ci0gICAgICAgIG1fZmlsbEJvdW5kaW5nQm94ID0gRmxvYXRSZWN0KCk7Ci0gICAgICAg
IG1fc3Ryb2tlQW5kTWFya2VyQm91bmRpbmdCb3ggPSBGbG9hdFJlY3QoKTsKLSAgICAgICAgbV9y
ZXBhaW50Qm91bmRpbmdCb3ggPSBGbG9hdFJlY3QoKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0K
LQotICAgIC8vIENhY2hlIF91bmNsaXBwZWRfIGZpbGwgYm91bmRpbmcgYm94LCB1c2VkIGZvciBj
YWxjdWxhdGlvbnMgaW4gcmVzb3VyY2VzCi0gICAgbV9maWxsQm91bmRpbmdCb3ggPSBtX3BhdGgu
Ym91bmRpbmdSZWN0KCk7Ci0KLSAgICAvLyBTcGVjKDExLjQpOiBBbnkgemVybyBsZW5ndGggc3Vi
cGF0aCBzaGFsbCBub3QgYmUgc3Ryb2tlZCBpZiB0aGUg4oCYc3Ryb2tlLWxpbmVjYXDigJkgcHJv
cGVydHkgaGFzIGEgdmFsdWUgb2YgYnV0dAotICAgIC8vIGJ1dCBzaGFsbCBiZSBzdHJva2VkIGlm
IHRoZSDigJhzdHJva2UtbGluZWNhcOKAmSBwcm9wZXJ0eSBoYXMgYSB2YWx1ZSBvZiByb3VuZCBv
ciBzcXVhcmUKLSAgICBpZiAoc2hvdWxkU3Ryb2tlWmVyb0xlbmd0aFN1YnBhdGgoKSkgewotICAg
ICAgICBtX3N0cm9rZUFuZE1hcmtlckJvdW5kaW5nQm94ID0gemVyb0xlbmd0aFN1YnBhdGhSZWN0
KCk7Ci0gICAgICAgIC8vIENhY2hlIHNtYWxsZXN0IHBvc3NpYmxlIHJlcGFpbnQgcmVjdGFuZ2xl
Ci0gICAgICAgIG1fcmVwYWludEJvdW5kaW5nQm94ID0gbV9zdHJva2VBbmRNYXJrZXJCb3VuZGlu
Z0JveDsKLSAgICAgICAgU1ZHUmVuZGVyU3VwcG9ydDo6aW50ZXJzZWN0UmVwYWludFJlY3RXaXRo
UmVzb3VyY2VzKHRoaXMsIG1fcmVwYWludEJvdW5kaW5nQm94KTsKLSAgICAgICAgcmV0dXJuOwot
ICAgIH0KLQotICAgIC8vIENhY2hlIF91bmNsaXBwZWRfIHN0cm9rZSBib3VuZGluZyBib3gsIHVz
ZWQgZm9yIGNhbGN1bGF0aW9ucyBpbiByZXNvdXJjZXMgKGluY2x1ZGVzIG1hcmtlciBib3VuZGFy
aWVzKQotICAgIG1fc3Ryb2tlQW5kTWFya2VyQm91bmRpbmdCb3ggPSBtX2ZpbGxCb3VuZGluZ0Jv
eDsKLQotICAgIGNvbnN0IFNWR1JlbmRlclN0eWxlKiBzdmdTdHlsZSA9IHN0eWxlKCktPnN2Z1N0
eWxlKCk7Ci0gICAgaWYgKHN2Z1N0eWxlLT5oYXNTdHJva2UoKSkgewotICAgICAgICBCb3VuZGlu
Z1JlY3RTdHJva2VTdHlsZUFwcGxpZXIgc3Ryb2tlU3R5bGUodGhpcywgc3R5bGUoKSk7Ci0gICAg
ICAgIG1fc3Ryb2tlQW5kTWFya2VyQm91bmRpbmdCb3gudW5pdGUobV9wYXRoLnN0cm9rZUJvdW5k
aW5nUmVjdCgmc3Ryb2tlU3R5bGUpKTsKLSAgICB9Ci0KLSAgICBpZiAoc3ZnU3R5bGUtPmhhc01h
cmtlcnMoKSkgewotICAgICAgICBGbG9hdFJlY3QgbWFya2VyQm91bmRzID0gY2FsY3VsYXRlTWFy
a2VyQm91bmRzSWZOZWVkZWQoKTsKLSAgICAgICAgaWYgKCFtYXJrZXJCb3VuZHMuaXNFbXB0eSgp
KQotICAgICAgICAgICAgbV9zdHJva2VBbmRNYXJrZXJCb3VuZGluZ0JveC51bml0ZShtYXJrZXJC
b3VuZHMpOwotICAgIH0KLQotICAgIC8vIENhY2hlIHNtYWxsZXN0IHBvc3NpYmxlIHJlcGFpbnQg
cmVjdGFuZ2xlCi0gICAgbV9yZXBhaW50Qm91bmRpbmdCb3ggPSBtX3N0cm9rZUFuZE1hcmtlckJv
dW5kaW5nQm94OwotICAgIFNWR1JlbmRlclN1cHBvcnQ6OmludGVyc2VjdFJlcGFpbnRSZWN0V2l0
aFJlc291cmNlcyh0aGlzLCBtX3JlcGFpbnRCb3VuZGluZ0JveCk7Ci19Ci0KIH0KIAogI2VuZGlm
IC8vIEVOQUJMRShTVkcpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3Zn
L1JlbmRlclNWR1BhdGguaCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZH
UGF0aC5oCmluZGV4IDk4ZTYwOGQuLjUyNTY4ZmYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUGF0aC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9zdmcvUmVuZGVyU1ZHUGF0aC5oCkBAIC00LDYgKzQsOCBAQAogICogQ29weXJpZ2h0IChD
KSAyMDA1IEVyaWMgU2VpZGVsIDxlcmljQHdlYmtpdC5vcmc+CiAgKiBDb3B5cmlnaHQgKEMpIDIw
MDYgQXBwbGUgQ29tcHV0ZXIsIEluYwogICogQ29weXJpZ2h0IChDKSAyMDA5IEdvb2dsZSwgSW5j
LgorICogQ29weXJpZ2h0IChDKSAyMDExIFJlbmF0YSBIb2RvdmFuIDxyZW5pQHdlYmtpdC5vcmc+
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgVW5pdmVyc2l0eSBvZiBTemVnZWQKICAqCiAgKiBUaGlz
IGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29y
CiAgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFs
IFB1YmxpYwpAQCAtMjUsODYgKzI3LDIwIEBACiAjZGVmaW5lIFJlbmRlclNWR1BhdGhfaAogCiAj
aWYgRU5BQkxFKFNWRykKLSNpbmNsdWRlICJBZmZpbmVUcmFuc2Zvcm0uaCIKLSNpbmNsdWRlICJG
bG9hdFJlY3QuaCIKLSNpbmNsdWRlICJSZW5kZXJTVkdNb2RlbE9iamVjdC5oIgotI2luY2x1ZGUg
IlNWR01hcmtlckxheW91dEluZm8uaCIKKyNpbmNsdWRlICJSZW5kZXJTVkdTaGFwZS5oIgogCiBu
YW1lc3BhY2UgV2ViQ29yZSB7CiAKLWNsYXNzIEZsb2F0UG9pbnQ7Ci1jbGFzcyBHcmFwaGljc0Nv
bnRleHRTdGF0ZVNhdmVyOwotY2xhc3MgUmVuZGVyU1ZHQ29udGFpbmVyOwotY2xhc3MgU1ZHU3R5
bGVkVHJhbnNmb3JtYWJsZUVsZW1lbnQ7Ci0KLWNsYXNzIFJlbmRlclNWR1BhdGggOiBwdWJsaWMg
UmVuZGVyU1ZHTW9kZWxPYmplY3QgeworY2xhc3MgUmVuZGVyU1ZHUGF0aCA6IHB1YmxpYyBSZW5k
ZXJTVkdTaGFwZSB7CiBwdWJsaWM6Ci0gICAgZXhwbGljaXQgUmVuZGVyU1ZHUGF0aChTVkdTdHls
ZWRUcmFuc2Zvcm1hYmxlRWxlbWVudCopOworICAgIFJlbmRlclNWR1BhdGgoU1ZHU3R5bGVkVHJh
bnNmb3JtYWJsZUVsZW1lbnQqKTsKICAgICB2aXJ0dWFsIH5SZW5kZXJTVkdQYXRoKCk7CiAKLSAg
ICBjb25zdCBQYXRoJiBwYXRoKCkgY29uc3QgeyByZXR1cm4gbV9wYXRoOyB9Ci0gICAgdm9pZCBz
ZXROZWVkc1BhdGhVcGRhdGUoKSB7IG1fbmVlZHNQYXRoVXBkYXRlID0gdHJ1ZTsgfQotICAgIHZp
cnR1YWwgdm9pZCBzZXROZWVkc0JvdW5kYXJpZXNVcGRhdGUoKSB7IG1fbmVlZHNCb3VuZGFyaWVz
VXBkYXRlID0gdHJ1ZTsgfQotICAgIHZpcnR1YWwgdm9pZCBzZXROZWVkc1RyYW5zZm9ybVVwZGF0
ZSgpIHsgbV9uZWVkc1RyYW5zZm9ybVVwZGF0ZSA9IHRydWU7IH0KLQogcHJpdmF0ZToKLSAgICAv
LyBIaXQtZGV0ZWN0aW9uIHNlcGVyYXRlZCBmb3IgdGhlIGZpbGwgYW5kIHRoZSBzdHJva2UKLSAg
ICBib29sIGZpbGxDb250YWlucyhjb25zdCBGbG9hdFBvaW50JiwgYm9vbCByZXF1aXJlc0ZpbGwg
PSB0cnVlLCBXaW5kUnVsZSBmaWxsUnVsZSA9IFJVTEVfTk9OWkVSTyk7Ci0gICAgYm9vbCBzdHJv
a2VDb250YWlucyhjb25zdCBGbG9hdFBvaW50JiwgYm9vbCByZXF1aXJlc1N0cm9rZSA9IHRydWUp
OwotCi0gICAgdmlydHVhbCBGbG9hdFJlY3Qgb2JqZWN0Qm91bmRpbmdCb3goKSBjb25zdCB7IHJl
dHVybiBtX2ZpbGxCb3VuZGluZ0JveDsgfQotICAgIHZpcnR1YWwgRmxvYXRSZWN0IHN0cm9rZUJv
dW5kaW5nQm94KCkgY29uc3QgeyByZXR1cm4gbV9zdHJva2VBbmRNYXJrZXJCb3VuZGluZ0JveDsg
fQotICAgIHZpcnR1YWwgRmxvYXRSZWN0IHJlcGFpbnRSZWN0SW5Mb2NhbENvb3JkaW5hdGVzKCkg
Y29uc3QgeyByZXR1cm4gbV9yZXBhaW50Qm91bmRpbmdCb3g7IH0KLSAgICB2aXJ0dWFsIGNvbnN0
IEFmZmluZVRyYW5zZm9ybSYgbG9jYWxUb1BhcmVudFRyYW5zZm9ybSgpIGNvbnN0IHsgcmV0dXJu
IG1fbG9jYWxUcmFuc2Zvcm07IH0KLQogICAgIHZpcnR1YWwgYm9vbCBpc1NWR1BhdGgoKSBjb25z
dCB7IHJldHVybiB0cnVlOyB9CiAgICAgdmlydHVhbCBjb25zdCBjaGFyKiByZW5kZXJOYW1lKCkg
Y29uc3QgeyByZXR1cm4gIlJlbmRlclNWR1BhdGgiOyB9Ci0KLSAgICB2aXJ0dWFsIHZvaWQgbGF5
b3V0KCk7Ci0gICAgdmlydHVhbCB2b2lkIHBhaW50KFBhaW50SW5mbyYsIGNvbnN0IExheW91dFBv
aW50Jik7Ci0gICAgdmlydHVhbCB2b2lkIGFkZEZvY3VzUmluZ1JlY3RzKFZlY3RvcjxMYXlvdXRS
ZWN0PiYsIGNvbnN0IExheW91dFBvaW50Jik7Ci0KLSAgICB2aXJ0dWFsIGJvb2wgbm9kZUF0Rmxv
YXRQb2ludChjb25zdCBIaXRUZXN0UmVxdWVzdCYsIEhpdFRlc3RSZXN1bHQmLCBjb25zdCBGbG9h
dFBvaW50JiBwb2ludEluUGFyZW50LCBIaXRUZXN0QWN0aW9uKTsKLQotICAgIEZsb2F0UmVjdCBj
YWxjdWxhdGVNYXJrZXJCb3VuZHNJZk5lZWRlZCgpOwotICAgIHZvaWQgdXBkYXRlQ2FjaGVkQm91
bmRhcmllcygpOwotCi0gICAgdm9pZCBzZXR1cFNxdWFyZUNhcFBhdGgoUGF0aComIHVzZVBhdGgs
IGludCYgYXBwbHlNb2RlKTsKLSAgICBib29sIHNldHVwTm9uU2NhbGluZ1N0cm9rZVBhdGgoUGF0
aComIHVzZVBhdGgsIEdyYXBoaWNzQ29udGV4dFN0YXRlU2F2ZXImKTsKLSAgICBib29sIHNob3Vs
ZFN0cm9rZVplcm9MZW5ndGhTdWJwYXRoKCkgY29uc3Q7Ci0gICAgRmxvYXRSZWN0IHplcm9MZW5n
dGhTdWJwYXRoUmVjdCgpIGNvbnN0OwotCi1wcml2YXRlOgotICAgIHZpcnR1YWwgQWZmaW5lVHJh
bnNmb3JtIGxvY2FsVHJhbnNmb3JtKCkgY29uc3QgeyByZXR1cm4gbV9sb2NhbFRyYW5zZm9ybTsg
fQotICAgIHZvaWQgZmlsbEFuZFN0cm9rZVBhdGgoR3JhcGhpY3NDb250ZXh0Kik7Ci0KLSAgICBi
b29sIG1fbmVlZHNCb3VuZGFyaWVzVXBkYXRlIDogMTsKLSAgICBib29sIG1fbmVlZHNQYXRoVXBk
YXRlIDogMTsKLSAgICBib29sIG1fbmVlZHNUcmFuc2Zvcm1VcGRhdGUgOiAxOwotCi0gICAgbXV0
YWJsZSBQYXRoIG1fcGF0aDsKLSAgICBGbG9hdFJlY3QgbV9maWxsQm91bmRpbmdCb3g7Ci0gICAg
RmxvYXRSZWN0IG1fc3Ryb2tlQW5kTWFya2VyQm91bmRpbmdCb3g7Ci0gICAgRmxvYXRSZWN0IG1f
cmVwYWludEJvdW5kaW5nQm94OwotICAgIFNWR01hcmtlckxheW91dEluZm8gbV9tYXJrZXJMYXlv
dXRJbmZvOwotICAgIEFmZmluZVRyYW5zZm9ybSBtX2xvY2FsVHJhbnNmb3JtOwogfTsKIAotaW5s
aW5lIFJlbmRlclNWR1BhdGgqIHRvUmVuZGVyU1ZHUGF0aChSZW5kZXJPYmplY3QqIG9iamVjdCkK
LXsKLSAgICBBU1NFUlQoIW9iamVjdCB8fCBvYmplY3QtPmlzU1ZHUGF0aCgpKTsKLSAgICByZXR1
cm4gc3RhdGljX2Nhc3Q8UmVuZGVyU1ZHUGF0aCo+KG9iamVjdCk7Ci19Ci0KLWlubGluZSBjb25z
dCBSZW5kZXJTVkdQYXRoKiB0b1JlbmRlclNWR1BhdGgoY29uc3QgUmVuZGVyT2JqZWN0KiBvYmpl
Y3QpCi17Ci0gICAgQVNTRVJUKCFvYmplY3QgfHwgb2JqZWN0LT5pc1NWR1BhdGgoKSk7Ci0gICAg
cmV0dXJuIHN0YXRpY19jYXN0PGNvbnN0IFJlbmRlclNWR1BhdGgqPihvYmplY3QpOwotfQotCi0v
LyBUaGlzIHdpbGwgY2F0Y2ggYW55b25lIGRvaW5nIGFuIHVubmVjZXNzYXJ5IGNhc3QuCi12b2lk
IHRvUmVuZGVyU1ZHUGF0aChjb25zdCBSZW5kZXJTVkdQYXRoKik7Ci0KIH0KIAogI2VuZGlmIC8v
IEVOQUJMRShTVkcpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1Jl
bmRlclNWR1JlY3QuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdS
ZWN0LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42YmMzNWRlCi0tLSAv
ZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZWN0
LmNwcApAQCAtMCwwICsxLDEzOSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMSBVbml2ZXJz
aXR5IG9mIFN6ZWdlZAorICogQ29weXJpZ2h0IChDKSAyMDExIFJlbmF0YSBIb2RvdmFuIChyZW5p
QHdlYmtpdC5vcmcpCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVU5JVkVSU0lUWSBPRiBTWkVHRUQgYGBBUyBJUycn
IEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBVTklWRVJTSVRZIE9GIFNaRUdFRCBPUgorICogQ09O
VFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJV
U0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAq
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJj
b25maWcuaCIKKworI2lmIEVOQUJMRShTVkcpCisjaW5jbHVkZSAiUmVuZGVyU1ZHUmVjdC5oIgor
CisjaW5jbHVkZSAiU1ZHTmFtZXMuaCIKKyNpbmNsdWRlICJTVkdSZWN0RWxlbWVudC5oIgorCitu
YW1lc3BhY2UgV2ViQ29yZSB7CisKK1JlbmRlclNWR1JlY3Q6OlJlbmRlclNWR1JlY3QoU1ZHU3R5
bGVkVHJhbnNmb3JtYWJsZUVsZW1lbnQqIG5vZGUpCisgICAgOiBSZW5kZXJTVkdTaGFwZShub2Rl
KQoreworfQorCitSZW5kZXJTVkdSZWN0Ojp+UmVuZGVyU1ZHUmVjdCgpCit7Cit9CisKK3ZvaWQg
UmVuZGVyU1ZHUmVjdDo6Y3JlYXRlU2hhcGUoKQoreworICAgIC8vIENsZWFyIG1fcmVjdC4KKyAg
ICBtX3JlY3QgPSBGbG9hdFJlY3QoKTsKKyAgICBTVkdSZWN0RWxlbWVudCogcmVjdCA9IHN0YXRp
Y19jYXN0PFNWR1JlY3RFbGVtZW50Kj4obm9kZSgpKTsKKyAgICBib29sIG1faGFzUnggPSByZWN0
LT5oYXNBdHRyaWJ1dGUoU1ZHTmFtZXM6OnJ4QXR0cik7CisgICAgYm9vbCBtX2hhc1J5ID0gcmVj
dC0+aGFzQXR0cmlidXRlKFNWR05hbWVzOjpyeUF0dHIpOworICAgIC8vIEZhbGxiYWNrIHRvIHRo
ZSBwYXJlbnQgaWYgcmVjdCBoYXMgc3BlY2lhbCBmZWF0dXJlcy4KKyAgICBpZiAobV9oYXNSeCB8
fCBtX2hhc1J5IHx8ICFzdHlsZSgpLT5zdmdTdHlsZSgpLT5zdHJva2VEYXNoQXJyYXkoKS5pc0Vt
cHR5KCkpIHsKKyAgICAgICBSZW5kZXJTVkdTaGFwZTo6Y3JlYXRlU2hhcGUoKTsKKyAgICAgICBy
ZXR1cm47CisgICAgfQorICAgIGZsb2F0IHdpZHRoVmFsdWUgPSByZWN0LT53aWR0aCgpLnZhbHVl
KHJlY3QpOworICAgIGlmICh3aWR0aFZhbHVlIDw9IDApCisgICAgICAgIHJldHVybjsKKworICAg
IGZsb2F0IGhlaWdodFZhbHVlID0gcmVjdC0+aGVpZ2h0KCkudmFsdWUocmVjdCk7CisgICAgaWYg
KGhlaWdodFZhbHVlIDw9IDApCisgICAgICAgIHJldHVybjsKKworICAgIGZsb2F0IHhWYWx1ZSA9
IHJlY3QtPngoKS52YWx1ZShyZWN0KTsKKyAgICBmbG9hdCB5VmFsdWUgPSByZWN0LT55KCkudmFs
dWUocmVjdCk7CisgICAgbV9yZWN0ID0gRmxvYXRSZWN0KHhWYWx1ZSwgeVZhbHVlLCB3aWR0aFZh
bHVlLCBoZWlnaHRWYWx1ZSk7Cit9CisKKworRmxvYXRSZWN0IFJlbmRlclNWR1JlY3Q6Om9iamVj
dEJvdW5kaW5nQm94KCkgY29uc3QKK3sKKyAgICBpZiAoaGFzUGF0aCgpKQorICAgICAgICByZXR1
cm4gUmVuZGVyU1ZHU2hhcGU6Om9iamVjdEJvdW5kaW5nQm94KCk7CisgICAgcmV0dXJuIG1fcmVj
dDsKK30KKworRmxvYXRSZWN0IFJlbmRlclNWR1JlY3Q6OnN0cm9rZUJvdW5kaW5nQm94KCkKK3sK
KyAgICBpZiAoaGFzUGF0aCgpKQorICAgICAgICByZXR1cm4gUmVuZGVyU1ZHU2hhcGU6OnN0cm9r
ZUJvdW5kaW5nQm94KCk7CisgICAgLy8gSWYgd2UgaW5mbGF0ZSB0aGUgbV9yZWN0IHdpdGggdGhl
IGhhbGYgc2l6ZSBzdHJva2VXaWR0aCwgd2UgZ2V0IHRoZSBzdHJva2VCb3VuZGluZ0JveCBpbiBu
b24tZmFsbGJhY2sgcGF0aCBtb2RlLgorICAgIEJvdW5kaW5nUmVjdFN0cm9rZVN0eWxlQXBwbGll
ciBzdHJva2VTdHlsZSh0aGlzLCBzdHlsZSgpKTsKKyAgICBGbG9hdFJlY3Qgc3Ryb2tlUmVjdCA9
IG1fcmVjdDsKKyAgICBzdHJva2VSZWN0LmluZmxhdGUodGhpcy0+c3Ryb2tlV2lkdGgoKSAvIDIp
OworICAgIHJldHVybiBzdHJva2VSZWN0OworfQorCit2b2lkIFJlbmRlclNWR1JlY3Q6OmZpbGxT
aGFwZShHcmFwaGljc0NvbnRleHQqIGNvbnRleHQpCit7CisgICAgaWYgKGhhc1BhdGgoKSkKKyAg
ICAgICAgUmVuZGVyU1ZHU2hhcGU6OmZpbGxTaGFwZShjb250ZXh0KTsKKyAgICBlbHNlCisgICAg
ICAgIGNvbnRleHQtPmZpbGxSZWN0KG1fcmVjdCk7Cit9CisKK3ZvaWQgUmVuZGVyU1ZHUmVjdDo6
c3Ryb2tlU2hhcGUoR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0KQoreworICAgIGlmIChoYXNQYXRo
KCkpIHsKKyAgICAgICAgUmVuZGVyU1ZHU2hhcGU6OnN0cm9rZVNoYXBlKGNvbnRleHQpOworICAg
ICAgICByZXR1cm47CisgICAgfQorICAgIGNvbnRleHQtPnN0cm9rZVJlY3QobV9yZWN0LCB0aGlz
LT5zdHJva2VXaWR0aCgpKTsKK30KKworYm9vbCBSZW5kZXJTVkdSZWN0OjpzdHJva2VDb250YWlu
c1Nsb3dDYXNlKGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50KQoreworICAgIGlmIChoYXNQYXRoKCkp
CisgICAgICAgIHJldHVybiBSZW5kZXJTVkdTaGFwZTo6c3Ryb2tlQ29udGFpbnNTbG93Q2FzZShw
b2ludCk7CisKKyAgICAvLyBUbyBkZWNlaWRlIHRoZSBzdHJva2UgY29udGFpbmluZyB3ZSBjcmVh
dGUgdHdvIHJlY3RzIHdoaWNoIHJlcHJlc2VudCB0aGUgaW5uZXIgYW5kCisgICAgLy8gdGhlIG91
dGVyIHN0cm9rZSBib3JkZXJzLiBUaGUgY29udGFpbmluZyBleGlzdHMsIGlmIHRoZSBwb2ludCBp
cyBiZXR3ZWVuIHRoZW0uCisgICAgZmxvYXQgc3Ryb2tlV2lkdGggPSB0aGlzLT5zdHJva2VXaWR0
aCgpOworICAgIEZsb2F0UmVjdCBpbm5lclN0cm9rZVJlY3QgPSBtX3JlY3Q7CisgICAgRmxvYXRS
ZWN0IG91dGVyU3Ryb2tlUmVjdCA9IG1fcmVjdDsKKyAgICBpbm5lclN0cm9rZVJlY3QuaW5mbGF0
ZSgtc3Ryb2tlV2lkdGggLyAyKTsKKyAgICBvdXRlclN0cm9rZVJlY3QuaW5mbGF0ZShzdHJva2VX
aWR0aCAvIDIpOworICAgIHJldHVybiAoZGV0ZXJtaW5lUG9pbnRMb2NhdGlvbihwb2ludCwgaW5u
ZXJTdHJva2VSZWN0KSAhPSBJbnNpZGVTaGFwZQorICAgICAgICAgICAgJiYgZGV0ZXJtaW5lUG9p
bnRMb2NhdGlvbihwb2ludCwgb3V0ZXJTdHJva2VSZWN0KSAhPSBPdXRzaWRlU2hhcGUpID8gIHRy
dWUgOiBmYWxzZTsKK30KKworYm9vbCBSZW5kZXJTVkdSZWN0OjpmaWxsQ29udGFpbnNTbG93Q2Fz
ZShjb25zdCBGbG9hdFBvaW50JiBwb2ludCwgY29uc3QgV2luZFJ1bGUmKSBjb25zdAoreworICAg
IHJldHVybiAoZGV0ZXJtaW5lUG9pbnRMb2NhdGlvbihwb2ludCwgbV9yZWN0KSAhPSBPdXRzaWRl
U2hhcGUpID8gdHJ1ZSA6IGZhbHNlOworfQorCitQb2ludExvY2F0aW9uIFJlbmRlclNWR1JlY3Q6
OmRldGVybWluZVBvaW50TG9jYXRpb24oY29uc3QgRmxvYXRQb2ludCYgcG9pbnQsIGNvbnN0IEZs
b2F0UmVjdCYgcmVjdCkgY29uc3QKK3sKKyAgICAvLyBUZXN0IHdoZXRoZXIgdGhlIHJlY3QgY29u
dGFpbnMgdGhlIGNlcnRhaW4gcG9pbnQgb3Igbm90CisgICAgaWYgKCFyZWN0LmNvbnRhaW5zKHBv
aW50KSkKKyAgICAgICAgcmV0dXJuIE91dHNpZGVTaGFwZTsKKyAgICByZXR1cm4gKHJlY3QueCgp
IDwgcG9pbnQueCgpICYmIHJlY3QubWF4WCgpID4gcG9pbnQueCgpICYmIHJlY3QueSgpIDwgcG9p
bnQueSgpICYmIHJlY3QubWF4WSgpID4gcG9pbnQueSgpKSA/IEluc2lkZVNoYXBlIDogT25TdHJv
a2U7Cit9CisKK30KKworI2VuZGlmIC8vIEVOQUJMRShTVkcpCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1JlY3QuaCBiL1NvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVjdC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw
MDAwMDAuLjA3MWVmMmEKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvc3ZnL1JlbmRlclNWR1JlY3QuaApAQCAtMCwwICsxLDYyIEBACisvKgorICogQ29weXJpZ2h0
IChDKSAyMDExIFVuaXZlcnNpdHkgb2YgU3plZ2VkCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgUmVu
YXRhIEhvZG92YW4gKHJlbmlAd2Via2l0Lm9yZykKKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBVTklWRVJTSVRZIE9G
IFNaRUdFRCBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFVOSVZFUlNJVFkgT0Yg
U1pFR0VEIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgor
ICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisg
Ki8KKworI2lmbmRlZiBSZW5kZXJTVkdSZWN0X2gKKyNkZWZpbmUgUmVuZGVyU1ZHUmVjdF9oCisK
KyNpZiBFTkFCTEUoU1ZHKQorI2luY2x1ZGUgIlJlbmRlclNWR1BhdGguaCIKKworbmFtZXNwYWNl
IFdlYkNvcmUgeworCitjbGFzcyBSZW5kZXJTVkdSZWN0IDogcHVibGljIFJlbmRlclNWR1NoYXBl
IHsKK3B1YmxpYzoKKyAgICBleHBsaWNpdCBSZW5kZXJTVkdSZWN0KFNWR1N0eWxlZFRyYW5zZm9y
bWFibGVFbGVtZW50Kik7CisgICAgdmlydHVhbCB+UmVuZGVyU1ZHUmVjdCgpOworCitwcml2YXRl
OgorICAgIHZpcnR1YWwgYm9vbCBpc1NWR1JlY3QoKSBjb25zdCB7IHJldHVybiB0cnVlOyB9Cisg
ICAgdmlydHVhbCBjb25zdCBjaGFyKiByZW5kZXJOYW1lKCkgY29uc3QgeyByZXR1cm4gIlJlbmRl
clNWR1JlY3QiOyB9CisKKyAgICB2b2lkIGNyZWF0ZVNoYXBlKCk7CisgICAgYm9vbCBpc0VtcHR5
KCkgY29uc3QgeyByZXR1cm4gaGFzUGF0aCgpID8gUmVuZGVyU1ZHU2hhcGU6OmlzRW1wdHkoKSA6
IG1fcmVjdC5pc0VtcHR5KCk7IH07CisgICAgdm9pZCBmaWxsU2hhcGUoR3JhcGhpY3NDb250ZXh0
Kik7CisgICAgRmxvYXRSZWN0IG9iamVjdEJvdW5kaW5nQm94KCkgY29uc3Q7CisgICAgRmxvYXRS
ZWN0IHN0cm9rZUJvdW5kaW5nQm94KCk7CisgICAgdm9pZCBzdHJva2VTaGFwZShHcmFwaGljc0Nv
bnRleHQqKTsKKyAgICBib29sIHN0cm9rZUNvbnRhaW5zU2xvd0Nhc2UoY29uc3QgRmxvYXRQb2lu
dCYpOworICAgIGJvb2wgZmlsbENvbnRhaW5zU2xvd0Nhc2UoY29uc3QgRmxvYXRQb2ludCYsIGNv
bnN0IFdpbmRSdWxlJikgY29uc3Q7CisgICAgUG9pbnRMb2NhdGlvbiBkZXRlcm1pbmVQb2ludExv
Y2F0aW9uKGNvbnN0IEZsb2F0UG9pbnQmLCBjb25zdCBGbG9hdFJlY3QmKSBjb25zdDsKKworcHJp
dmF0ZToKKyAgICBGbG9hdFJlY3QgbV9yZWN0OworfTsKKworfQorCisjZW5kaWYgLy8gRU5BQkxF
KFNWRykKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9S
ZW5kZXJTVkdSZXNvdXJjZUNsaXBwZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2
Zy9SZW5kZXJTVkdSZXNvdXJjZUNsaXBwZXIuY3BwCmluZGV4IDIzOGMwOTYuLjFkODIxMjEgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VD
bGlwcGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jl
c291cmNlQ2xpcHBlci5jcHAKQEAgLTI0Miw3ICsyNDIsNyBAQCBib29sIFJlbmRlclNWR1Jlc291
cmNlQ2xpcHBlcjo6ZHJhd0NvbnRlbnRJbnRvTWFza0ltYWdlKENsaXBwZXJEYXRhKiBjbGlwcGVy
RGF0YQogICAgICAgICB9CiAKICAgICAgICAgLy8gT25seSBzaGFwZXMsIHBhdGhzIGFuZCB0ZXh0
cyBhcmUgYWxsb3dlZCBmb3IgY2xpcHBpbmcuCi0gICAgICAgIGlmICghcmVuZGVyZXItPmlzU1ZH
UGF0aCgpICYmICFyZW5kZXJlci0+aXNTVkdUZXh0KCkpCisgICAgICAgIGlmICghcmVuZGVyZXIt
PmlzU1ZHU2hhcGUoKSAmJiAhcmVuZGVyZXItPmlzU1ZHVGV4dCgpKQogICAgICAgICAgICAgY29u
dGludWU7CiAKICAgICAgICAgLy8gU2F2ZSB0aGUgb2xkIFJlbmRlclN0eWxlIG9mIHRoZSBjdXJy
ZW50IG9iamVjdCBmb3IgcmVzdG9yaW5nIGFmdGVyIGRyYXdpbmcKQEAgLTI4NCw3ICsyODQsNyBA
QCB2b2lkIFJlbmRlclNWR1Jlc291cmNlQ2xpcHBlcjo6Y2FsY3VsYXRlQ2xpcENvbnRlbnRSZXBh
aW50UmVjdCgpCiAgICAgICAgIFJlbmRlck9iamVjdCogcmVuZGVyZXIgPSBjaGlsZE5vZGUtPnJl
bmRlcmVyKCk7CiAgICAgICAgIGlmICghY2hpbGROb2RlLT5pc1NWR0VsZW1lbnQoKSB8fCAhc3Rh
dGljX2Nhc3Q8U1ZHRWxlbWVudCo+KGNoaWxkTm9kZSktPmlzU3R5bGVkKCkgfHwgIXJlbmRlcmVy
KQogICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIGlmICghcmVuZGVyZXItPmlzU1ZHUGF0
aCgpICYmICFyZW5kZXJlci0+aXNTVkdUZXh0KCkgJiYgIXJlbmRlcmVyLT5pc1NWR1NoYWRvd1Ry
ZWVSb290Q29udGFpbmVyKCkpCisgICAgICAgIGlmICghcmVuZGVyZXItPmlzU1ZHU2hhcGUoKSAm
JiAhcmVuZGVyZXItPmlzU1ZHVGV4dCgpICYmICFyZW5kZXJlci0+aXNTVkdTaGFkb3dUcmVlUm9v
dENvbnRhaW5lcigpKQogICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgIFJlbmRlclN0eWxl
KiBzdHlsZSA9IHJlbmRlcmVyLT5zdHlsZSgpOwogICAgICAgICBpZiAoIXN0eWxlIHx8IHN0eWxl
LT5kaXNwbGF5KCkgPT0gTk9ORSB8fCBzdHlsZS0+dmlzaWJpbGl0eSgpICE9IFZJU0lCTEUpCkBA
IC0zMTAsNyArMzEwLDcgQEAgYm9vbCBSZW5kZXJTVkdSZXNvdXJjZUNsaXBwZXI6OmhpdFRlc3RD
bGlwQ29udGVudChjb25zdCBGbG9hdFJlY3QmIG9iamVjdEJvdW5kaW4KICAgICAgICAgUmVuZGVy
T2JqZWN0KiByZW5kZXJlciA9IGNoaWxkTm9kZS0+cmVuZGVyZXIoKTsKICAgICAgICAgaWYgKCFj
aGlsZE5vZGUtPmlzU1ZHRWxlbWVudCgpIHx8ICFzdGF0aWNfY2FzdDxTVkdFbGVtZW50Kj4oY2hp
bGROb2RlKS0+aXNTdHlsZWQoKSB8fCAhcmVuZGVyZXIpCiAgICAgICAgICAgICBjb250aW51ZTsK
LSAgICAgICAgaWYgKCFyZW5kZXJlci0+aXNTVkdQYXRoKCkgJiYgIXJlbmRlcmVyLT5pc1NWR1Rl
eHQoKSAmJiAhcmVuZGVyZXItPmlzU1ZHU2hhZG93VHJlZVJvb3RDb250YWluZXIoKSkKKyAgICAg
ICAgaWYgKCFyZW5kZXJlci0+aXNTVkdTaGFwZSgpICYmICFyZW5kZXJlci0+aXNTVkdUZXh0KCkg
JiYgIXJlbmRlcmVyLT5pc1NWR1NoYWRvd1RyZWVSb290Q29udGFpbmVyKCkpCiAgICAgICAgICAg
ICBjb250aW51ZTsKICAgICAgICAgSW50UG9pbnQgaGl0UG9pbnQ7CiAgICAgICAgIEhpdFRlc3RS
ZXN1bHQgcmVzdWx0KGhpdFBvaW50KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VDb250YWluZXIuY3BwIGIvU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJjZUNvbnRhaW5lci5jcHAKaW5kZXggNzRkNWQ2
OS4uYjc0YWQ2YiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5k
ZXJTVkdSZXNvdXJjZUNvbnRhaW5lci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L3N2Zy9SZW5kZXJTVkdSZXNvdXJjZUNvbnRhaW5lci5jcHAKQEAgLTE4MCw3ICsxODAsNyBAQCB2
b2lkIFJlbmRlclNWR1Jlc291cmNlQ29udGFpbmVyOjpyZWdpc3RlclJlc291cmNlKCkKIC8vIEZJ
WE1FOiBUaGlzIGRvZXMgbm90IGJlbG9uZyBoZXJlLgogQWZmaW5lVHJhbnNmb3JtIFJlbmRlclNW
R1Jlc291cmNlQ29udGFpbmVyOjp0cmFuc2Zvcm1Pbk5vblNjYWxpbmdTdHJva2UoUmVuZGVyT2Jq
ZWN0KiBvYmplY3QsIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgcmVzb3VyY2VUcmFuc2Zvcm0pCiB7
Ci0gICAgaWYgKCFvYmplY3QtPmlzU1ZHUGF0aCgpKQorICAgIGlmICghb2JqZWN0LT5pc1NWR1No
YXBlKCkpCiAgICAgICAgIHJldHVybiByZXNvdXJjZVRyYW5zZm9ybTsKIAogICAgIFNWR1N0eWxl
ZFRyYW5zZm9ybWFibGVFbGVtZW50KiBlbGVtZW50ID0gc3RhdGljX2Nhc3Q8U1ZHU3R5bGVkVHJh
bnNmb3JtYWJsZUVsZW1lbnQqPihvYmplY3QtPm5vZGUoKSk7CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1NoYXBlLmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHU2hhcGUuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAuLjE4ODUxYzMKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1NoYXBlLmNwcApAQCAtMCwwICsxLDQyNiBAQAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSwgMjAwNyBOaWtvbGFzIFppbW1lcm1hbm4gPHppbW1l
cm1hbm5Aa2RlLm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSwgMjAwOCBSb2IgQnVp
cyA8YnVpc0BrZGUub3JnPgorICogQ29weXJpZ2h0IChDKSAyMDA1LCAyMDA3IEVyaWMgU2VpZGVs
IDxlcmljQHdlYmtpdC5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgR29vZ2xlLCBJbmMuCisg
KiBDb3B5cmlnaHQgKEMpIDIwMDkgRGlyayBTY2h1bHplIDxrcml0QHdlYmtpdC5vcmc+CisgKiBD
b3B5cmlnaHQgKEMpIFJlc2VhcmNoIEluIE1vdGlvbiBMaW1pdGVkIDIwMTAuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgSmVmZiBTY2hpbGxlciA8Y29kZWRyZWFk
QGdtYWlsLmNvbT4KKyAqIENvcHlyaWdodCAoQykgMjAxMSBSZW5hdGEgSG9kb3ZhbiA8cmVuaUB3
ZWJraXQub3JnPgorICogQ29weXJpZ2h0IChDKSAyMDExIFVuaXZlcnNpdHkgb2YgU3plZ2VkCisg
KgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRl
IGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJh
cnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNv
ZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBv
ciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFy
eSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICog
YnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFu
dHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVS
UE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9y
IG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9m
IHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRo
aXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bwor
ICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0
LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNp
bmNsdWRlICJjb25maWcuaCIKKworI2lmIEVOQUJMRShTVkcpCisjaW5jbHVkZSAiUmVuZGVyU1ZH
U2hhcGUuaCIKKworI2luY2x1ZGUgIkZsb2F0UG9pbnQuaCIKKyNpbmNsdWRlICJGbG9hdFF1YWQu
aCIKKyNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKKyNpbmNsdWRlICJIaXRUZXN0UmVxdWVz
dC5oIgorI2luY2x1ZGUgIlBvaW50ZXJFdmVudHNIaXRSdWxlcy5oIgorI2luY2x1ZGUgIlJlbmRl
clNWR0NvbnRhaW5lci5oIgorI2luY2x1ZGUgIlJlbmRlclNWR1Jlc291cmNlTWFya2VyLmgiCisj
aW5jbHVkZSAiUmVuZGVyU1ZHUmVzb3VyY2VTb2xpZENvbG9yLmgiCisjaW5jbHVkZSAiU1ZHUGF0
aEVsZW1lbnQuaCIKKyNpbmNsdWRlICJTVkdSZW5kZXJTdXBwb3J0LmgiCisjaW5jbHVkZSAiU1ZH
UmVzb3VyY2VzLmgiCisjaW5jbHVkZSAiU1ZHU3R5bGVkVHJhbnNmb3JtYWJsZUVsZW1lbnQuaCIK
KyNpbmNsdWRlICJTVkdUcmFuc2Zvcm1MaXN0LmgiCisjaW5jbHVkZSAiU1ZHVVJJUmVmZXJlbmNl
LmgiCisjaW5jbHVkZSAiU3Ryb2tlU3R5bGVBcHBsaWVyLmgiCisjaW5jbHVkZSA8d3RmL01hdGhF
eHRyYXMuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitSZW5kZXJTVkdTaGFwZTo6UmVuZGVy
U1ZHU2hhcGUoU1ZHU3R5bGVkVHJhbnNmb3JtYWJsZUVsZW1lbnQqIG5vZGUpCisgICAgOiBSZW5k
ZXJTVkdNb2RlbE9iamVjdChub2RlKQorICAgICwgbV9uZWVkc0JvdW5kYXJpZXNVcGRhdGUoZmFs
c2UpIC8vIGRlZmF1bHQgaXMgZmFsc2UsIHRoZSBjYWNoZWQgcmVjdHMgYXJlIGVtcHR5IGZyb20g
dGhlIGJlZ2lubmluZworICAgICwgbV9uZWVkc1NoYXBlVXBkYXRlKHRydWUpIC8vIGRlZmF1bHQg
aXMgdHJ1ZSwgc28gd2UgZ3JhYiBhIFBhdGggb2JqZWN0IG9uY2UgZnJvbSBTVkdTdHlsZWRUcmFu
c2Zvcm1hYmxlRWxlbWVudAorICAgICwgbV9uZWVkc1RyYW5zZm9ybVVwZGF0ZSh0cnVlKSAvLyBk
ZWZhdWx0IGlzIHRydWUsIHNvIHdlIGdyYWIgYSBBZmZpbmVUcmFuc2Zvcm0gb2JqZWN0IG9uY2Ug
ZnJvbSBTVkdTdHlsZWRUcmFuc2Zvcm1hYmxlRWxlbWVudAoreworfQorCitSZW5kZXJTVkdTaGFw
ZTo6flJlbmRlclNWR1NoYXBlKCkKK3sKK30KKwordm9pZCBSZW5kZXJTVkdTaGFwZTo6Y3JlYXRl
U2hhcGUoKQoreworICAgIG1fcGF0aCA9IGFkb3B0UHRyKG5ldyBQYXRoKTsKKyAgICBBU1NFUlQo
aXNFbXB0eSgpKTsKKworICAgIFNWR1BhdGhFbGVtZW50KiBlbGVtZW50ID0gc3RhdGljX2Nhc3Q8
U1ZHUGF0aEVsZW1lbnQqPihub2RlKCkpOworICAgIGVsZW1lbnQtPnRvUGF0aERhdGEocGF0aCgp
KTsKK30KKworYm9vbCBSZW5kZXJTVkdTaGFwZTo6aXNFbXB0eSgpIGNvbnN0Cit7CisgICAgcmV0
dXJuIHBhdGgoKS5pc0VtcHR5KCk7Cit9CisKK3ZvaWQgUmVuZGVyU1ZHU2hhcGU6OmZpbGxTaGFw
ZShHcmFwaGljc0NvbnRleHQqIGNvbnRleHQpCit7CisgICAgY29udGV4dC0+ZmlsbFBhdGgocGF0
aCgpKTsKK30KKworRmxvYXRSZWN0IFJlbmRlclNWR1NoYXBlOjpvYmplY3RCb3VuZGluZ0JveCgp
IGNvbnN0Cit7CisgICAgcmV0dXJuIG1fcGF0aC0+Ym91bmRpbmdSZWN0KCk7Cit9CisKK0Zsb2F0
UmVjdCBSZW5kZXJTVkdTaGFwZTo6c3Ryb2tlQm91bmRpbmdCb3goKQoreworICAgIEJvdW5kaW5n
UmVjdFN0cm9rZVN0eWxlQXBwbGllciBzdHJva2VTdHlsZSh0aGlzLCBzdHlsZSgpKTsKKyAgICBy
ZXR1cm4gcGF0aCgpLnN0cm9rZUJvdW5kaW5nUmVjdCgmc3Ryb2tlU3R5bGUpOworfQorCit2b2lk
IFJlbmRlclNWR1NoYXBlOjpzdHJva2VTaGFwZShHcmFwaGljc0NvbnRleHQqIGNvbnRleHQpCit7
CisgICAgY29udGV4dC0+c3Ryb2tlUGF0aChwYXRoKCkpOworfQorCitib29sIFJlbmRlclNWR1No
YXBlOjpzdHJva2VDb250YWluc1Nsb3dDYXNlKGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50KQorewor
ICAgIEJvdW5kaW5nUmVjdFN0cm9rZVN0eWxlQXBwbGllciBhcHBsaWVyKHRoaXMsIHN0eWxlKCkp
OworICAgIHJldHVybiBwYXRoKCkuc3Ryb2tlQ29udGFpbnMoJmFwcGxpZXIsIHBvaW50KTsKK30K
KworYm9vbCBSZW5kZXJTVkdTaGFwZTo6ZmlsbENvbnRhaW5zU2xvd0Nhc2UoY29uc3QgRmxvYXRQ
b2ludCYgcG9pbnQsIGNvbnN0IFdpbmRSdWxlJiBmaWxsUnVsZSkgY29uc3QKK3sKKyAgICByZXR1
cm4gcGF0aCgpLmNvbnRhaW5zKHBvaW50LCBmaWxsUnVsZSk7Cit9CisKK2Jvb2wgUmVuZGVyU1ZH
U2hhcGU6OmZpbGxDb250YWlucyhjb25zdCBGbG9hdFBvaW50JiBwb2ludCwgYm9vbCByZXF1aXJl
c0ZpbGwsIFdpbmRSdWxlIGZpbGxSdWxlKQoreworICAgIGlmICghbV9maWxsQm91bmRpbmdCb3gu
Y29udGFpbnMocG9pbnQpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBDb2xvciBmYWxs
YmFja0NvbG9yOworICAgIGlmIChyZXF1aXJlc0ZpbGwgJiYgIVJlbmRlclNWR1Jlc291cmNlOjpm
aWxsUGFpbnRpbmdSZXNvdXJjZSh0aGlzLCBzdHlsZSgpLCBmYWxsYmFja0NvbG9yKSkKKyAgICAg
ICAgcmV0dXJuIGZhbHNlOworCisgICAgcmV0dXJuIGZpbGxDb250YWluc1Nsb3dDYXNlKHBvaW50
LCBmaWxsUnVsZSk7Cit9CisKK2Jvb2wgUmVuZGVyU1ZHU2hhcGU6OnN0cm9rZUNvbnRhaW5zKGNv
bnN0IEZsb2F0UG9pbnQmIHBvaW50LCBib29sIHJlcXVpcmVzU3Ryb2tlKQoreworICAgIGlmICgh
bV9zdHJva2VBbmRNYXJrZXJCb3VuZGluZ0JveC5jb250YWlucyhwb2ludCkpCisgICAgICAgIHJl
dHVybiBmYWxzZTsKKworICAgIENvbG9yIGZhbGxiYWNrQ29sb3I7CisgICAgaWYgKHJlcXVpcmVz
U3Ryb2tlICYmICFSZW5kZXJTVkdSZXNvdXJjZTo6c3Ryb2tlUGFpbnRpbmdSZXNvdXJjZSh0aGlz
LCBzdHlsZSgpLCBmYWxsYmFja0NvbG9yKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAg
aWYgKHNob3VsZFN0cm9rZVplcm9MZW5ndGhTdWJwYXRoKCkpCisgICAgICAgIHJldHVybiB6ZXJv
TGVuZ3RoU3VicGF0aFJlY3QoKS5jb250YWlucyhwb2ludCk7CisKKyAgICByZXR1cm4gc3Ryb2tl
Q29udGFpbnNTbG93Q2FzZShwb2ludCk7Cit9CisKK3ZvaWQgUmVuZGVyU1ZHU2hhcGU6OmxheW91
dCgpCit7CisgICAgTGF5b3V0UmVwYWludGVyIHJlcGFpbnRlcigqdGhpcywgY2hlY2tGb3JSZXBh
aW50RHVyaW5nTGF5b3V0KCkgJiYgc2VsZk5lZWRzTGF5b3V0KCkpOworICAgIFNWR1N0eWxlZFRy
YW5zZm9ybWFibGVFbGVtZW50KiBlbGVtZW50ID0gc3RhdGljX2Nhc3Q8U1ZHU3R5bGVkVHJhbnNm
b3JtYWJsZUVsZW1lbnQqPihub2RlKCkpOworCisgICAgYm9vbCB1cGRhdGVDYWNoZWRCb3VuZGFy
aWVzSW5QYXJlbnRzID0gZmFsc2U7CisKKyAgICBib29sIG5lZWRzU2hhcGVVcGRhdGUgPSBtX25l
ZWRzU2hhcGVVcGRhdGU7CisgICAgaWYgKG5lZWRzU2hhcGVVcGRhdGUpIHsKKyAgICAgICAgY3Jl
YXRlU2hhcGUoKTsKKyAgICAgICAgbV9uZWVkc1NoYXBlVXBkYXRlID0gZmFsc2U7CisgICAgICAg
IHVwZGF0ZUNhY2hlZEJvdW5kYXJpZXNJblBhcmVudHMgPSB0cnVlOworICAgIH0KKworICAgIGlm
IChtX25lZWRzVHJhbnNmb3JtVXBkYXRlKSB7CisgICAgICAgIG1fbG9jYWxUcmFuc2Zvcm0gPSBl
bGVtZW50LT5hbmltYXRlZExvY2FsVHJhbnNmb3JtKCk7CisgICAgICAgIG1fbmVlZHNUcmFuc2Zv
cm1VcGRhdGUgPSBmYWxzZTsKKyAgICAgICAgdXBkYXRlQ2FjaGVkQm91bmRhcmllc0luUGFyZW50
cyA9IHRydWU7CisgICAgfQorCisgICAgaWYgKG1fbmVlZHNCb3VuZGFyaWVzVXBkYXRlKQorICAg
ICAgICB1cGRhdGVDYWNoZWRCb3VuZGFyaWVzSW5QYXJlbnRzID0gdHJ1ZTsKKworICAgIC8vIElu
dmFsaWRhdGUgYWxsIHJlc291cmNlcyBvZiB0aGlzIGNsaWVudCBpZiBvdXIgbGF5b3V0IGNoYW5n
ZWQuCisgICAgaWYgKG1fZXZlckhhZExheW91dCAmJiBzZWxmTmVlZHNMYXlvdXQoKSkgeworICAg
ICAgICBTVkdSZXNvdXJjZXNDYWNoZTo6Y2xpZW50TGF5b3V0Q2hhbmdlZCh0aGlzKTsKKyAgICAg
ICAgbV9tYXJrZXJMYXlvdXRJbmZvLmNsZWFyKCk7CisgICAgfQorCisgICAgLy8gQXQgdGhpcyBw
b2ludCBMYXlvdXRSZXBhaW50ZXIgYWxyZWFkeSBncmFiYmVkIHRoZSBvbGQgYm91bmRzLAorICAg
IC8vIHJlY2FsY3VsYXRlIHRoZW0gbm93IHNvIHJlcGFpbnRBZnRlckxheW91dCgpIHVzZXMgdGhl
IG5ldyBib3VuZHMuCisgICAgaWYgKG5lZWRzU2hhcGVVcGRhdGUgfHwgbV9uZWVkc0JvdW5kYXJp
ZXNVcGRhdGUpIHsKKyAgICAgICAgdXBkYXRlQ2FjaGVkQm91bmRhcmllcygpOworICAgICAgICBt
X25lZWRzQm91bmRhcmllc1VwZGF0ZSA9IGZhbHNlOworICAgIH0KKworICAgIC8vIElmIG91ciBi
b3VuZHMgY2hhbmdlZCwgbm90aWZ5IHRoZSBwYXJlbnRzLgorICAgIGlmICh1cGRhdGVDYWNoZWRC
b3VuZGFyaWVzSW5QYXJlbnRzKQorICAgICAgICBSZW5kZXJTVkdNb2RlbE9iamVjdDo6c2V0TmVl
ZHNCb3VuZGFyaWVzVXBkYXRlKCk7CisKKyAgICByZXBhaW50ZXIucmVwYWludEFmdGVyTGF5b3V0
KCk7CisgICAgc2V0TmVlZHNMYXlvdXQoZmFsc2UpOworfQorCitib29sIFJlbmRlclNWR1NoYXBl
OjpzaG91bGRTdHJva2VaZXJvTGVuZ3RoU3VicGF0aCgpIGNvbnN0Cit7CisgICAgLy8gU3BlYygx
MS40KTogQW55IHplcm8gbGVuZ3RoIHN1YnBhdGggc2hhbGwgbm90IGJlIHN0cm9rZWQgaWYgdGhl
IOKAmHN0cm9rZS1saW5lY2Fw4oCZIHByb3BlcnR5IGhhcyBhIHZhbHVlIG9mIGJ1dHQKKyAgICAv
LyBidXQgc2hhbGwgYmUgc3Ryb2tlZCBpZiB0aGUg4oCYc3Ryb2tlLWxpbmVjYXDigJkgcHJvcGVy
dHkgaGFzIGEgdmFsdWUgb2Ygcm91bmQgb3Igc3F1YXJlCisgICAgcmV0dXJuIHN0eWxlKCktPnN2
Z1N0eWxlKCktPmhhc1N0cm9rZSgpICYmIHN0eWxlKCktPnN2Z1N0eWxlKCktPmNhcFN0eWxlKCkg
IT0gQnV0dENhcCAmJiAhbV9maWxsQm91bmRpbmdCb3gud2lkdGgoKSAmJiAhbV9maWxsQm91bmRp
bmdCb3guaGVpZ2h0KCk7Cit9CisKK0Zsb2F0UmVjdCBSZW5kZXJTVkdTaGFwZTo6emVyb0xlbmd0
aFN1YnBhdGhSZWN0KCkgY29uc3QKK3sKKyAgICBmbG9hdCBzdHJva2VXaWR0aCA9IHRoaXMtPnN0
cm9rZVdpZHRoKCk7CisgICAgcmV0dXJuIEZsb2F0UmVjdChtX2ZpbGxCb3VuZGluZ0JveC54KCkg
LSBzdHJva2VXaWR0aCAvIDIsIG1fZmlsbEJvdW5kaW5nQm94LnkoKSAtIHN0cm9rZVdpZHRoIC8g
Miwgc3Ryb2tlV2lkdGgsIHN0cm9rZVdpZHRoKTsKK30KKwordm9pZCBSZW5kZXJTVkdTaGFwZTo6
c2V0dXBTcXVhcmVDYXBQYXRoKFBhdGgqJiB1c2VQYXRoLCBpbnQmIGFwcGx5TW9kZSkKK3sKKyAg
ICAvLyBTcGVjKDExLjQpOiBBbnkgemVybyBsZW5ndGggc3VicGF0aCBzaGFsbCBub3QgYmUgc3Ry
b2tlZCBpZiB0aGUg4oCYc3Ryb2tlLWxpbmVjYXDigJkgcHJvcGVydHkgaGFzIGEgdmFsdWUgb2Yg
YnV0dAorICAgIC8vIGJ1dCBzaGFsbCBiZSBzdHJva2VkIGlmIHRoZSDigJhzdHJva2UtbGluZWNh
cOKAmSBwcm9wZXJ0eSBoYXMgYSB2YWx1ZSBvZiByb3VuZCBvciBzcXVhcmUKKyAgICBERUZJTkVf
U1RBVElDX0xPQ0FMKFBhdGgsIHRlbXBQYXRoLCAoKSk7CisKKyAgICBhcHBseU1vZGUgPSBBcHBs
eVRvRmlsbE1vZGU7CisgICAgdXNlUGF0aCA9ICZ0ZW1wUGF0aDsKKyAgICB1c2VQYXRoLT5jbGVh
cigpOworICAgIGlmIChzdHlsZSgpLT5zdmdTdHlsZSgpLT5jYXBTdHlsZSgpID09IFNxdWFyZUNh
cCkKKyAgICAgICAgdXNlUGF0aC0+YWRkUmVjdCh6ZXJvTGVuZ3RoU3VicGF0aFJlY3QoKSk7Cisg
ICAgZWxzZQorICAgICAgICB1c2VQYXRoLT5hZGRFbGxpcHNlKHplcm9MZW5ndGhTdWJwYXRoUmVj
dCgpKTsKK30KKworYm9vbCBSZW5kZXJTVkdTaGFwZTo6c2V0dXBOb25TY2FsaW5nU3Ryb2tlUGF0
aChQYXRoKiYgdXNlUGF0aCwgR3JhcGhpY3NDb250ZXh0U3RhdGVTYXZlciYgc3RhdGVTYXZlcikK
K3sKKyAgICBERUZJTkVfU1RBVElDX0xPQ0FMKFBhdGgsIHRlbXBQYXRoLCAoKSk7CisKKyAgICBT
VkdTdHlsZWRUcmFuc2Zvcm1hYmxlRWxlbWVudCogZWxlbWVudCA9IHN0YXRpY19jYXN0PFNWR1N0
eWxlZFRyYW5zZm9ybWFibGVFbGVtZW50Kj4obm9kZSgpKTsKKyAgICBBZmZpbmVUcmFuc2Zvcm0g
bm9uU2NhbGluZ1N0cm9rZVRyYW5zZm9ybSA9IGVsZW1lbnQtPmdldFNjcmVlbkNUTShTVkdMb2Nh
dGFibGU6OkRpc2FsbG93U3R5bGVVcGRhdGUpOworICAgIGlmICghbm9uU2NhbGluZ1N0cm9rZVRy
YW5zZm9ybS5pc0ludmVydGlibGUoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgdGVt
cFBhdGggPSAqbV9wYXRoOworICAgIHVzZVBhdGggPSAmdGVtcFBhdGg7CisgICAgdGVtcFBhdGgu
dHJhbnNmb3JtKG5vblNjYWxpbmdTdHJva2VUcmFuc2Zvcm0pOworCisgICAgc3RhdGVTYXZlci5z
YXZlKCk7CisgICAgc3RhdGVTYXZlci5jb250ZXh0KCktPmNvbmNhdENUTShub25TY2FsaW5nU3Ry
b2tlVHJhbnNmb3JtLmludmVyc2UoKSk7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK3ZvaWQgUmVu
ZGVyU1ZHU2hhcGU6OmZpbGxBbmRTdHJva2VQYXRoKEdyYXBoaWNzQ29udGV4dCogY29udGV4dCkK
K3sKKyAgICBSZW5kZXJTdHlsZSogc3R5bGUgPSB0aGlzLT5zdHlsZSgpOworCisgICAgQ29sb3Ig
ZmFsbGJhY2tDb2xvcjsKKyAgICBpZiAoUmVuZGVyU1ZHUmVzb3VyY2UqIGZpbGxQYWludGluZ1Jl
c291cmNlID0gUmVuZGVyU1ZHUmVzb3VyY2U6OmZpbGxQYWludGluZ1Jlc291cmNlKHRoaXMsIHN0
eWxlLCBmYWxsYmFja0NvbG9yKSkgeworICAgICAgICBpZiAoZmlsbFBhaW50aW5nUmVzb3VyY2Ut
PmFwcGx5UmVzb3VyY2UodGhpcywgc3R5bGUsIGNvbnRleHQsIEFwcGx5VG9GaWxsTW9kZSkpIHsK
KyAgICAgICAgICAgIGZpbGxTaGFwZShjb250ZXh0KTsKKyAgICAgICAgfSBlbHNlIGlmIChmYWxs
YmFja0NvbG9yLmlzVmFsaWQoKSkgeworICAgICAgICAgICAgUmVuZGVyU1ZHUmVzb3VyY2VTb2xp
ZENvbG9yKiBmYWxsYmFja1Jlc291cmNlID0gUmVuZGVyU1ZHUmVzb3VyY2U6OnNoYXJlZFNvbGlk
UGFpbnRpbmdSZXNvdXJjZSgpOworICAgICAgICAgICAgZmFsbGJhY2tSZXNvdXJjZS0+c2V0Q29s
b3IoZmFsbGJhY2tDb2xvcik7CisgICAgICAgICAgICBpZiAoZmFsbGJhY2tSZXNvdXJjZS0+YXBw
bHlSZXNvdXJjZSh0aGlzLCBzdHlsZSwgY29udGV4dCwgQXBwbHlUb0ZpbGxNb2RlKSkKKyAgICAg
ICAgICAgICAgICBmaWxsU2hhcGUoY29udGV4dCk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBm
YWxsYmFja0NvbG9yID0gQ29sb3IoKTsKKyAgICBSZW5kZXJTVkdSZXNvdXJjZSogc3Ryb2tlUGFp
bnRpbmdSZXNvdXJjZSA9IFJlbmRlclNWR1Jlc291cmNlOjpzdHJva2VQYWludGluZ1Jlc291cmNl
KHRoaXMsIHN0eWxlLCBmYWxsYmFja0NvbG9yKTsKKyAgICBpZiAoIXN0cm9rZVBhaW50aW5nUmVz
b3VyY2UpCisgICAgICAgIHJldHVybjsKKworICAgIFBhdGgqIHVzZVBhdGg7CisgICAgaW50IGFw
cGx5TW9kZSA9IEFwcGx5VG9TdHJva2VNb2RlOworCisgICAgYm9vbCBub25TY2FsaW5nU3Ryb2tl
ID0gc3R5bGUtPnN2Z1N0eWxlKCktPnZlY3RvckVmZmVjdCgpID09IFZFX05PTl9TQ0FMSU5HX1NU
Uk9LRTsKKworICAgIEdyYXBoaWNzQ29udGV4dFN0YXRlU2F2ZXIgc3RhdGVTYXZlcigqY29udGV4
dCwgZmFsc2UpOworCisgICAgLy8gU3BlYygxMS40KTogQW55IHplcm8gbGVuZ3RoIHN1YnBhdGgg
c2hhbGwgbm90IGJlIHN0cm9rZWQgaWYgdGhlIOKAmHN0cm9rZS1saW5lY2Fw4oCZIHByb3BlcnR5
IGhhcyBhIHZhbHVlIG9mIGJ1dHQKKyAgICAvLyBidXQgc2hhbGwgYmUgc3Ryb2tlZCBpZiB0aGUg
4oCYc3Ryb2tlLWxpbmVjYXDigJkgcHJvcGVydHkgaGFzIGEgdmFsdWUgb2Ygcm91bmQgb3Igc3F1
YXJlCisgICAgLy8gRklYTUU6IHRoaXMgZG9lcyBub3Qgd29yayBmb3IgemVyby1sZW5ndGggc3Vi
cGF0aHMsIG9ubHkgd2hlbiB0b3RhbCBwYXRoIGlzIHplcm8tbGVuZ3RoCisgICAgaWYgKHNob3Vs
ZFN0cm9rZVplcm9MZW5ndGhTdWJwYXRoKCkpIHsKKyAgICAgICAgUmVuZGVyU1ZHU2hhcGU6OmNy
ZWF0ZVNoYXBlKCk7CisgICAgICAgIHVzZVBhdGggPSBtX3BhdGguZ2V0KCk7CisgICAgICAgIHNl
dHVwU3F1YXJlQ2FwUGF0aCh1c2VQYXRoLCBhcHBseU1vZGUpOworICAgIH0gZWxzZSBpZiAobm9u
U2NhbGluZ1N0cm9rZSkgeworICAgICAgICBSZW5kZXJTVkdTaGFwZTo6Y3JlYXRlU2hhcGUoKTsK
KyAgICAgICAgdXNlUGF0aCA9IG1fcGF0aC5nZXQoKTsKKyAgICAgICAgaWYgKCFzZXR1cE5vblNj
YWxpbmdTdHJva2VQYXRoKHVzZVBhdGgsIHN0YXRlU2F2ZXIpKQorICAgICAgICAgICAgcmV0dXJu
OworICAgIH0KKyAgICBpZiAoc3Ryb2tlUGFpbnRpbmdSZXNvdXJjZS0+YXBwbHlSZXNvdXJjZSh0
aGlzLCBzdHlsZSwgY29udGV4dCwgYXBwbHlNb2RlKSkgeworICAgICAgICBzdHJva2VTaGFwZShj
b250ZXh0KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBpZiAoIWZhbGxiYWNrQ29sb3Iu
aXNWYWxpZCgpKQorICAgICAgICByZXR1cm47CisgICAgUmVuZGVyU1ZHUmVzb3VyY2VTb2xpZENv
bG9yKiBmYWxsYmFja1Jlc291cmNlID0gUmVuZGVyU1ZHUmVzb3VyY2U6OnNoYXJlZFNvbGlkUGFp
bnRpbmdSZXNvdXJjZSgpOworICAgIGZhbGxiYWNrUmVzb3VyY2UtPnNldENvbG9yKGZhbGxiYWNr
Q29sb3IpOworICAgIGlmIChmYWxsYmFja1Jlc291cmNlLT5hcHBseVJlc291cmNlKHRoaXMsIHN0
eWxlLCBjb250ZXh0LCBhcHBseU1vZGUpKQorICAgICAgICBzdHJva2VTaGFwZShjb250ZXh0KTsK
K30KKwordm9pZCBSZW5kZXJTVkdTaGFwZTo6cGFpbnQoUGFpbnRJbmZvJiBwYWludEluZm8sIGNv
bnN0IEludFBvaW50JikKK3sKKyAgICBpZiAocGFpbnRJbmZvLmNvbnRleHQtPnBhaW50aW5nRGlz
YWJsZWQoKSB8fCBzdHlsZSgpLT52aXNpYmlsaXR5KCkgPT0gSElEREVOIHx8IGlzRW1wdHkoKSkK
KyAgICAgICAgcmV0dXJuOworICAgIEZsb2F0UmVjdCBib3VuZGluZ0JveCA9IHJlcGFpbnRSZWN0
SW5Mb2NhbENvb3JkaW5hdGVzKCk7CisgICAgaWYgKCFTVkdSZW5kZXJTdXBwb3J0OjpwYWludElu
Zm9JbnRlcnNlY3RzUmVwYWludFJlY3QoYm91bmRpbmdCb3gsIG1fbG9jYWxUcmFuc2Zvcm0sIHBh
aW50SW5mbykpCisgICAgICAgIHJldHVybjsKKyAgICBQYWludEluZm8gY2hpbGRQYWludEluZm8o
cGFpbnRJbmZvKTsKKyAgICBib29sIGRyYXdzT3V0bGluZSA9IHN0eWxlKCktPm91dGxpbmVXaWR0
aCgpICYmIChjaGlsZFBhaW50SW5mby5waGFzZSA9PSBQYWludFBoYXNlT3V0bGluZSB8fCBjaGls
ZFBhaW50SW5mby5waGFzZSA9PSBQYWludFBoYXNlU2VsZk91dGxpbmUpOworICAgIGlmIChkcmF3
c091dGxpbmUgfHwgY2hpbGRQYWludEluZm8ucGhhc2UgPT0gUGFpbnRQaGFzZUZvcmVncm91bmQp
IHsKKyAgICAgICAgR3JhcGhpY3NDb250ZXh0U3RhdGVTYXZlciBzdGF0ZVNhdmVyKCpjaGlsZFBh
aW50SW5mby5jb250ZXh0KTsKKyAgICAgICAgY2hpbGRQYWludEluZm8uYXBwbHlUcmFuc2Zvcm0o
bV9sb2NhbFRyYW5zZm9ybSk7CisKKyAgICAgICAgaWYgKGNoaWxkUGFpbnRJbmZvLnBoYXNlID09
IFBhaW50UGhhc2VGb3JlZ3JvdW5kKSB7CisgICAgICAgICAgICBQYWludEluZm8gc2F2ZWRJbmZv
KGNoaWxkUGFpbnRJbmZvKTsKKworICAgICAgICAgICAgaWYgKFNWR1JlbmRlclN1cHBvcnQ6OnBy
ZXBhcmVUb1JlbmRlclNWR0NvbnRlbnQodGhpcywgY2hpbGRQYWludEluZm8pKSB7CisgICAgICAg
ICAgICAgICAgY29uc3QgU1ZHUmVuZGVyU3R5bGUqIHN2Z1N0eWxlID0gc3R5bGUoKS0+c3ZnU3R5
bGUoKTsKKyAgICAgICAgICAgICAgICBpZiAoc3ZnU3R5bGUtPnNoYXBlUmVuZGVyaW5nKCkgPT0g
U1JfQ1JJU1BFREdFUykKKyAgICAgICAgICAgICAgICAgICAgY2hpbGRQYWludEluZm8uY29udGV4
dC0+c2V0U2hvdWxkQW50aWFsaWFzKGZhbHNlKTsKKworICAgICAgICAgICAgICAgIGZpbGxBbmRT
dHJva2VQYXRoKGNoaWxkUGFpbnRJbmZvLmNvbnRleHQpOworCisgICAgICAgICAgICAgICAgaWYg
KHN2Z1N0eWxlLT5oYXNNYXJrZXJzKCkpCisgICAgICAgICAgICAgICAgICAgIG1fbWFya2VyTGF5
b3V0SW5mby5kcmF3TWFya2VycyhjaGlsZFBhaW50SW5mbyk7CisgICAgICAgICAgICB9CisKKyAg
ICAgICAgICAgIFNWR1JlbmRlclN1cHBvcnQ6OmZpbmlzaFJlbmRlclNWR0NvbnRlbnQodGhpcywg
Y2hpbGRQYWludEluZm8sIHNhdmVkSW5mby5jb250ZXh0KTsKKyAgICAgICAgfQorCisgICAgICAg
IGlmIChkcmF3c091dGxpbmUpCisgICAgICAgICAgICBwYWludE91dGxpbmUoY2hpbGRQYWludElu
Zm8uY29udGV4dCwgSW50UmVjdChib3VuZGluZ0JveCkpOworICAgIH0KK30KKworLy8gVGhpcyBt
ZXRob2QgaXMgY2FsbGVkIGZyb20gaW5zaWRlIHBhaW50T3V0bGluZSgpIHNpbmNlIHdlIGNhbGwg
cGFpbnRPdXRsaW5lKCkKKy8vIHdoaWxlIHRyYW5zZm9ybWVkIHRvIG91ciBjb29yZCBzeXN0ZW0s
IHJldHVybiBsb2NhbCBjb29yZHMKK3ZvaWQgUmVuZGVyU1ZHU2hhcGU6OmFkZEZvY3VzUmluZ1Jl
Y3RzKFZlY3RvcjxMYXlvdXRSZWN0PiYgcmVjdHMsIGNvbnN0IExheW91dFBvaW50JikKK3sKKyAg
ICBMYXlvdXRSZWN0IHJlY3QgPSBlbmNsb3NpbmdMYXlvdXRSZWN0KHJlcGFpbnRSZWN0SW5Mb2Nh
bENvb3JkaW5hdGVzKCkpOworICAgIGlmICghcmVjdC5pc0VtcHR5KCkpCisgICAgICAgIHJlY3Rz
LmFwcGVuZChyZWN0KTsKK30KKworYm9vbCBSZW5kZXJTVkdTaGFwZTo6bm9kZUF0RmxvYXRQb2lu
dChjb25zdCBIaXRUZXN0UmVxdWVzdCYgcmVxdWVzdCwgSGl0VGVzdFJlc3VsdCYgcmVzdWx0LCBj
b25zdCBGbG9hdFBvaW50JiBwb2ludEluUGFyZW50LCBIaXRUZXN0QWN0aW9uIGhpdFRlc3RBY3Rp
b24pCit7CisgICAgLy8gV2Ugb25seSBkcmF3IGluIHRoZSBmb3Jncm91bmQgcGhhc2UsIHNvIHdl
IG9ubHkgaGl0LXRlc3QgdGhlbi4KKyAgICBpZiAoaGl0VGVzdEFjdGlvbiAhPSBIaXRUZXN0Rm9y
ZWdyb3VuZCkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgRmxvYXRQb2ludCBsb2NhbFBv
aW50ID0gbV9sb2NhbFRyYW5zZm9ybS5pbnZlcnNlKCkubWFwUG9pbnQocG9pbnRJblBhcmVudCk7
CisKKyAgICBpZiAoIVNWR1JlbmRlclN1cHBvcnQ6OnBvaW50SW5DbGlwcGluZ0FyZWEodGhpcywg
bG9jYWxQb2ludCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIFBvaW50ZXJFdmVudHNI
aXRSdWxlcyBoaXRSdWxlcyhQb2ludGVyRXZlbnRzSGl0UnVsZXM6OlNWR19QQVRIX0hJVFRFU1RJ
TkcsIHJlcXVlc3QsIHN0eWxlKCktPnBvaW50ZXJFdmVudHMoKSk7CisgICAgYm9vbCBpc1Zpc2li
bGUgPSAoc3R5bGUoKS0+dmlzaWJpbGl0eSgpID09IFZJU0lCTEUpOworICAgIGlmIChpc1Zpc2li
bGUgfHwgIWhpdFJ1bGVzLnJlcXVpcmVWaXNpYmxlKSB7CisgICAgICAgIGNvbnN0IFNWR1JlbmRl
clN0eWxlKiBzdmdTdHlsZSA9IHN0eWxlKCktPnN2Z1N0eWxlKCk7CisgICAgICAgIFdpbmRSdWxl
IGZpbGxSdWxlID0gc3ZnU3R5bGUtPmZpbGxSdWxlKCk7CisgICAgICAgIGlmIChyZXF1ZXN0LnN2
Z0NsaXBDb250ZW50KCkpCisgICAgICAgICAgICBmaWxsUnVsZSA9IHN2Z1N0eWxlLT5jbGlwUnVs
ZSgpOworICAgICAgICBpZiAoKGhpdFJ1bGVzLmNhbkhpdFN0cm9rZSAmJiAoc3ZnU3R5bGUtPmhh
c1N0cm9rZSgpIHx8ICFoaXRSdWxlcy5yZXF1aXJlU3Ryb2tlKSAmJiBzdHJva2VDb250YWlucyhs
b2NhbFBvaW50LCBoaXRSdWxlcy5yZXF1aXJlU3Ryb2tlKSkKKyAgICAgICAgICAgIHx8IChoaXRS
dWxlcy5jYW5IaXRGaWxsICYmIChzdmdTdHlsZS0+aGFzRmlsbCgpIHx8ICFoaXRSdWxlcy5yZXF1
aXJlRmlsbCkgJiYgZmlsbENvbnRhaW5zKGxvY2FsUG9pbnQsIGhpdFJ1bGVzLnJlcXVpcmVGaWxs
LCBmaWxsUnVsZSkpKSB7CisgICAgICAgICAgICB1cGRhdGVIaXRUZXN0UmVzdWx0KHJlc3VsdCwg
cm91bmRlZExheW91dFBvaW50KGxvY2FsUG9pbnQpKTsKKyAgICAgICAgICAgIHJldHVybiB0cnVl
OworICAgICAgICB9CisgICAgfQorICAgIHJldHVybiBmYWxzZTsKK30KKworRmxvYXRSZWN0IFJl
bmRlclNWR1NoYXBlOjpjYWxjdWxhdGVNYXJrZXJCb3VuZHNJZk5lZWRlZCgpCit7CisgICAgU1ZH
RWxlbWVudCogc3ZnRWxlbWVudCA9IHN0YXRpY19jYXN0PFNWR0VsZW1lbnQqPihub2RlKCkpOwor
ICAgIEFTU0VSVChzdmdFbGVtZW50ICYmIHN2Z0VsZW1lbnQtPmRvY3VtZW50KCkpOworICAgIGlm
ICghc3ZnRWxlbWVudC0+aXNTdHlsZWQoKSkKKyAgICAgICAgcmV0dXJuIEZsb2F0UmVjdCgpOwor
CisgICAgU1ZHU3R5bGVkRWxlbWVudCogc3R5bGVkRWxlbWVudCA9IHN0YXRpY19jYXN0PFNWR1N0
eWxlZEVsZW1lbnQqPihzdmdFbGVtZW50KTsKKyAgICBpZiAoIXN0eWxlZEVsZW1lbnQtPnN1cHBv
cnRzTWFya2VycygpKQorICAgICAgICByZXR1cm4gRmxvYXRSZWN0KCk7CisKKyAgICBBU1NFUlQo
c3R5bGUoKS0+c3ZnU3R5bGUoKS0+aGFzTWFya2VycygpKTsKKworICAgIFNWR1Jlc291cmNlcyog
cmVzb3VyY2VzID0gU1ZHUmVzb3VyY2VzQ2FjaGU6OmNhY2hlZFJlc291cmNlc0ZvclJlbmRlck9i
amVjdCh0aGlzKTsKKyAgICBpZiAoIXJlc291cmNlcykKKyAgICAgICAgcmV0dXJuIEZsb2F0UmVj
dCgpOworCisgICAgUmVuZGVyU1ZHUmVzb3VyY2VNYXJrZXIqIG1hcmtlclN0YXJ0ID0gcmVzb3Vy
Y2VzLT5tYXJrZXJTdGFydCgpOworICAgIFJlbmRlclNWR1Jlc291cmNlTWFya2VyKiBtYXJrZXJN
aWQgPSByZXNvdXJjZXMtPm1hcmtlck1pZCgpOworICAgIFJlbmRlclNWR1Jlc291cmNlTWFya2Vy
KiBtYXJrZXJFbmQgPSByZXNvdXJjZXMtPm1hcmtlckVuZCgpOworICAgIGlmICghbWFya2VyU3Rh
cnQgJiYgIW1hcmtlck1pZCAmJiAhbWFya2VyRW5kKQorICAgICAgICByZXR1cm4gRmxvYXRSZWN0
KCk7CisKKyAgICByZXR1cm4gbV9tYXJrZXJMYXlvdXRJbmZvLmNhbGN1bGF0ZUJvdW5kYXJpZXMo
bWFya2VyU3RhcnQsIG1hcmtlck1pZCwgbWFya2VyRW5kLCBzdHJva2VXaWR0aCgpLCBwYXRoKCkp
OworfQorCit2b2lkIFJlbmRlclNWR1NoYXBlOjp1cGRhdGVDYWNoZWRCb3VuZGFyaWVzKCkKK3sK
KyAgICBpZiAoaXNFbXB0eSgpKSB7CisgICAgICAgIG1fZmlsbEJvdW5kaW5nQm94ID0gRmxvYXRS
ZWN0KCk7CisgICAgICAgIG1fc3Ryb2tlQW5kTWFya2VyQm91bmRpbmdCb3ggPSBGbG9hdFJlY3Qo
KTsKKyAgICAgICAgbV9yZXBhaW50Qm91bmRpbmdCb3ggPSBGbG9hdFJlY3QoKTsKKyAgICAgICAg
cmV0dXJuOworICAgIH0KKworICAgIC8vIENhY2hlIF91bmNsaXBwZWRfIGZpbGwgYm91bmRpbmcg
Ym94LCB1c2VkIGZvciBjYWxjdWxhdGlvbnMgaW4gcmVzb3VyY2VzCisgICAgbV9maWxsQm91bmRp
bmdCb3ggPSBvYmplY3RCb3VuZGluZ0JveCgpOworCisgICAgLy8gU3BlYygxMS40KTogQW55IHpl
cm8gbGVuZ3RoIHN1YnBhdGggc2hhbGwgbm90IGJlIHN0cm9rZWQgaWYgdGhlIOKAmHN0cm9rZS1s
aW5lY2Fw4oCZIHByb3BlcnR5IGhhcyBhIHZhbHVlIG9mIGJ1dHQKKyAgICAvLyBidXQgc2hhbGwg
YmUgc3Ryb2tlZCBpZiB0aGUg4oCYc3Ryb2tlLWxpbmVjYXDigJkgcHJvcGVydHkgaGFzIGEgdmFs
dWUgb2Ygcm91bmQgb3Igc3F1YXJlCisgICAgaWYgKHNob3VsZFN0cm9rZVplcm9MZW5ndGhTdWJw
YXRoKCkpIHsKKyAgICAgICAgbV9zdHJva2VBbmRNYXJrZXJCb3VuZGluZ0JveCA9IHplcm9MZW5n
dGhTdWJwYXRoUmVjdCgpOworICAgICAgICAvLyBDYWNoZSBzbWFsbGVzdCBwb3NzaWJsZSByZXBh
aW50IHJlY3RhbmdsZQorICAgICAgICBtX3JlcGFpbnRCb3VuZGluZ0JveCA9IG1fc3Ryb2tlQW5k
TWFya2VyQm91bmRpbmdCb3g7CisgICAgICAgIFNWR1JlbmRlclN1cHBvcnQ6OmludGVyc2VjdFJl
cGFpbnRSZWN0V2l0aFJlc291cmNlcyh0aGlzLCBtX3JlcGFpbnRCb3VuZGluZ0JveCk7CisgICAg
ICAgIHJldHVybjsKKyAgICB9CisKKyAgICAvLyBDYWNoZSBfdW5jbGlwcGVkXyBzdHJva2UgYm91
bmRpbmcgYm94LCB1c2VkIGZvciBjYWxjdWxhdGlvbnMgaW4gcmVzb3VyY2VzIChpbmNsdWRlcyBt
YXJrZXIgYm91bmRhcmllcykKKyAgICBtX3N0cm9rZUFuZE1hcmtlckJvdW5kaW5nQm94ID0gbV9m
aWxsQm91bmRpbmdCb3g7CisKKyAgICBjb25zdCBTVkdSZW5kZXJTdHlsZSogc3ZnU3R5bGUgPSBz
dHlsZSgpLT5zdmdTdHlsZSgpOworICAgIGlmIChzdmdTdHlsZS0+aGFzU3Ryb2tlKCkpCisgICAg
ICAgIG1fc3Ryb2tlQW5kTWFya2VyQm91bmRpbmdCb3gudW5pdGUoc3Ryb2tlQm91bmRpbmdCb3go
KSk7CisKKyAgICBpZiAoaXNTVkdQYXRoKCkpIHsKKyAgICAgICAgaWYgKHN2Z1N0eWxlLT5oYXNN
YXJrZXJzKCkpIHsKKyAgICAgICAgICAgIEZsb2F0UmVjdCBtYXJrZXJCb3VuZHMgPSBjYWxjdWxh
dGVNYXJrZXJCb3VuZHNJZk5lZWRlZCgpOworICAgICAgICAgICAgaWYgKCFtYXJrZXJCb3VuZHMu
aXNFbXB0eSgpKQorICAgICAgICAgICAgICAgIG1fc3Ryb2tlQW5kTWFya2VyQm91bmRpbmdCb3gu
dW5pdGUobWFya2VyQm91bmRzKTsKKyAgICAgICAgfQorICAgIH0KKyAgICAvLyBDYWNoZSBzbWFs
bGVzdCBwb3NzaWJsZSByZXBhaW50IHJlY3RhbmdsZQorICAgIG1fcmVwYWludEJvdW5kaW5nQm94
ID0gbV9zdHJva2VBbmRNYXJrZXJCb3VuZGluZ0JveDsKKyAgICBTVkdSZW5kZXJTdXBwb3J0Ojpp
bnRlcnNlY3RSZXBhaW50UmVjdFdpdGhSZXNvdXJjZXModGhpcywgbV9yZXBhaW50Qm91bmRpbmdC
b3gpOworfQorCitmbG9hdCBSZW5kZXJTVkdTaGFwZTo6c3Ryb2tlV2lkdGgoKSBjb25zdAorewor
ICAgIFNWR0VsZW1lbnQqIHN2Z0VsZW1lbnQgPSBzdGF0aWNfY2FzdDxTVkdFbGVtZW50Kj4obm9k
ZSgpKTsKKyAgICByZXR1cm4gc3R5bGUoKS0+c3ZnU3R5bGUoKS0+c3Ryb2tlV2lkdGgoKS52YWx1
ZShzdmdFbGVtZW50KTsKK30KKworfQorCisjZW5kaWYgLy8gRU5BQkxFKFNWRykKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHU2hhcGUuaCBiL1NvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHU2hhcGUuaApuZXcgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCAwMDAwMDAwLi43MTcyYTIxCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdTaGFwZS5oCkBAIC0wLDAgKzEsMTY1IEBACisv
KgorICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1LCAyMDA3IE5pa29sYXMgWmltbWVybWFubiA8
emltbWVybWFubkBrZGUub3JnPgorICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1IFJvYiBCdWlz
IDxidWlzQGtkZS5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDUgRXJpYyBTZWlkZWwgPGVyaWNA
d2Via2l0Lm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAwNiBBcHBsZSBDb21wdXRlciwgSW5jCisg
KiBDb3B5cmlnaHQgKEMpIDIwMDkgR29vZ2xlLCBJbmMuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEg
UmVuYXRhIEhvZG92YW4gPHJlbmlAd2Via2l0Lm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAxMSBV
bml2ZXJzaXR5IG9mIFN6ZWdlZAorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJl
OyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUg
dGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1
Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNp
b24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lv
bi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBp
dCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBl
dmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5l
cmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBo
YXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGlj
ZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJ
Qi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIElu
Yy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEw
LTEzMDEsIFVTQS4KKyAqLworCisjaWZuZGVmIFJlbmRlclNWR1NoYXBlX2gKKyNkZWZpbmUgUmVu
ZGVyU1ZHU2hhcGVfaAorCisjaWYgRU5BQkxFKFNWRykKKyNpbmNsdWRlICJBZmZpbmVUcmFuc2Zv
cm0uaCIKKyNpbmNsdWRlICJGbG9hdFJlY3QuaCIKKyNpbmNsdWRlICJSZW5kZXJTVkdNb2RlbE9i
amVjdC5oIgorI2luY2x1ZGUgIlNWR01hcmtlckxheW91dEluZm8uaCIKKyNpbmNsdWRlICJTdHJv
a2VTdHlsZUFwcGxpZXIuaCIKKyNpbmNsdWRlIDx3dGYvT3duUHRyLmg+CisKK25hbWVzcGFjZSBX
ZWJDb3JlIHsKKworY2xhc3MgRmxvYXRQb2ludDsKK2NsYXNzIEdyYXBoaWNzQ29udGV4dFN0YXRl
U2F2ZXI7CitjbGFzcyBSZW5kZXJTVkdDb250YWluZXI7CitjbGFzcyBSZW5kZXJTVkdQYXRoOwor
Y2xhc3MgU1ZHU3R5bGVkVHJhbnNmb3JtYWJsZUVsZW1lbnQ7CisKK2VudW0gUG9pbnRMb2NhdGlv
biB7CisgICAgSW5zaWRlU2hhcGUsCisgICAgT3V0c2lkZVNoYXBlLAorICAgIE9uU3Ryb2tlCit9
OworCitjbGFzcyBCb3VuZGluZ1JlY3RTdHJva2VTdHlsZUFwcGxpZXIgOiBwdWJsaWMgU3Ryb2tl
U3R5bGVBcHBsaWVyIHsKK3B1YmxpYzoKKyAgICBCb3VuZGluZ1JlY3RTdHJva2VTdHlsZUFwcGxp
ZXIoY29uc3QgUmVuZGVyT2JqZWN0KiBvYmplY3QsIFJlbmRlclN0eWxlKiBzdHlsZSkKKyAgICAg
ICAgOiBtX29iamVjdChvYmplY3QpCisgICAgICAgICwgbV9zdHlsZShzdHlsZSkKKyAgICB7Cisg
ICAgICAgIEFTU0VSVChzdHlsZSk7CisgICAgICAgIEFTU0VSVChvYmplY3QpOworICAgIH0KKwor
ICAgIHZvaWQgc3Ryb2tlU3R5bGUoR3JhcGhpY3NDb250ZXh0KiBnYykKKyAgICB7CisgICAgICAg
IFNWR1JlbmRlclN1cHBvcnQ6OmFwcGx5U3Ryb2tlU3R5bGVUb0NvbnRleHQoZ2MsIG1fc3R5bGUs
IG1fb2JqZWN0KTsKKyAgICB9CisKK3ByaXZhdGU6CisgICAgY29uc3QgUmVuZGVyT2JqZWN0KiBt
X29iamVjdDsKKyAgICBSZW5kZXJTdHlsZSogbV9zdHlsZTsKK307CisKK2NsYXNzIFJlbmRlclNW
R1NoYXBlIDogcHVibGljIFJlbmRlclNWR01vZGVsT2JqZWN0IHsKK3B1YmxpYzoKKyAgICBleHBs
aWNpdCBSZW5kZXJTVkdTaGFwZShTVkdTdHlsZWRUcmFuc2Zvcm1hYmxlRWxlbWVudCopOworICAg
IHZpcnR1YWwgflJlbmRlclNWR1NoYXBlKCk7CisKKyAgICB2b2lkIHNldE5lZWRzU2hhcGVVcGRh
dGUoKSB7IG1fbmVlZHNTaGFwZVVwZGF0ZSA9IHRydWU7IH0KKyAgICB2aXJ0dWFsIHZvaWQgc2V0
TmVlZHNCb3VuZGFyaWVzVXBkYXRlKCkgeyBtX25lZWRzQm91bmRhcmllc1VwZGF0ZSA9IHRydWU7
IH0KKyAgICB2aXJ0dWFsIHZvaWQgc2V0TmVlZHNUcmFuc2Zvcm1VcGRhdGUoKSB7IG1fbmVlZHNU
cmFuc2Zvcm1VcGRhdGUgPSB0cnVlOyB9CisKK3ByaXZhdGU6CisgICAgLy8gSGl0LWRldGVjdGlv
biBzZXBlcmF0ZWQgZm9yIHRoZSBmaWxsIGFuZCB0aGUgc3Ryb2tlCisgICAgYm9vbCBmaWxsQ29u
dGFpbnMoY29uc3QgRmxvYXRQb2ludCYsIGJvb2wgcmVxdWlyZXNGaWxsID0gdHJ1ZSwgV2luZFJ1
bGUgZmlsbFJ1bGUgPSBSVUxFX05PTlpFUk8pOworICAgIGJvb2wgc3Ryb2tlQ29udGFpbnMoY29u
c3QgRmxvYXRQb2ludCYsIGJvb2wgcmVxdWlyZXNTdHJva2UgPSB0cnVlKTsKKworICAgIHZpcnR1
YWwgRmxvYXRSZWN0IHN0cm9rZUJvdW5kaW5nQm94KCkgY29uc3QgeyByZXR1cm4gbV9zdHJva2VB
bmRNYXJrZXJCb3VuZGluZ0JveDsgfQorICAgIHZpcnR1YWwgRmxvYXRSZWN0IHJlcGFpbnRSZWN0
SW5Mb2NhbENvb3JkaW5hdGVzKCkgY29uc3QgeyByZXR1cm4gbV9yZXBhaW50Qm91bmRpbmdCb3g7
IH0KKyAgICB2aXJ0dWFsIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgbG9jYWxUb1BhcmVudFRyYW5z
Zm9ybSgpIGNvbnN0IHsgcmV0dXJuIG1fbG9jYWxUcmFuc2Zvcm07IH0KKworICAgIHZpcnR1YWwg
Ym9vbCBpc1NWR1NoYXBlKCkgY29uc3QgeyByZXR1cm4gdHJ1ZTsgfQorICAgIHZpcnR1YWwgY29u
c3QgY2hhciogcmVuZGVyTmFtZSgpIGNvbnN0IHsgcmV0dXJuICJSZW5kZXJTVkdTaGFwZSI7IH0K
KworICAgIHZpcnR1YWwgdm9pZCBsYXlvdXQoKTsKKyAgICB2aXJ0dWFsIHZvaWQgcGFpbnQoUGFp
bnRJbmZvJiwgY29uc3QgTGF5b3V0UG9pbnQmKTsKKyAgICB2aXJ0dWFsIHZvaWQgYWRkRm9jdXNS
aW5nUmVjdHMoVmVjdG9yPExheW91dFJlY3Q+JiwgY29uc3QgTGF5b3V0UG9pbnQmKTsKKworICAg
IHZpcnR1YWwgYm9vbCBub2RlQXRGbG9hdFBvaW50KGNvbnN0IEhpdFRlc3RSZXF1ZXN0JiwgSGl0
VGVzdFJlc3VsdCYsIGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50SW5QYXJlbnQsIEhpdFRlc3RBY3Rp
b24pOworCisgICAgRmxvYXRSZWN0IGNhbGN1bGF0ZU1hcmtlckJvdW5kc0lmTmVlZGVkKCk7Cisg
ICAgdm9pZCB1cGRhdGVDYWNoZWRCb3VuZGFyaWVzKCk7CisKKyAgICB2b2lkIHNldHVwU3F1YXJl
Q2FwUGF0aChQYXRoKiYgdXNlUGF0aCwgaW50JiBhcHBseU1vZGUpOworICAgIGJvb2wgc2V0dXBO
b25TY2FsaW5nU3Ryb2tlUGF0aChQYXRoKiYgdXNlUGF0aCwgR3JhcGhpY3NDb250ZXh0U3RhdGVT
YXZlciYpOworICAgIGJvb2wgc2hvdWxkU3Ryb2tlWmVyb0xlbmd0aFN1YnBhdGgoKSBjb25zdDsK
KyAgICBGbG9hdFJlY3QgemVyb0xlbmd0aFN1YnBhdGhSZWN0KCkgY29uc3Q7CisKK3Byb3RlY3Rl
ZDoKKyAgICB2aXJ0dWFsIHZvaWQgY3JlYXRlU2hhcGUoKTsKKyAgICB2aXJ0dWFsIGJvb2wgaXNF
bXB0eSgpIGNvbnN0OworICAgIHZpcnR1YWwgdm9pZCBmaWxsU2hhcGUoR3JhcGhpY3NDb250ZXh0
Kik7CisgICAgdmlydHVhbCBGbG9hdFJlY3Qgb2JqZWN0Qm91bmRpbmdCb3goKSBjb25zdDsKKyAg
ICB2aXJ0dWFsIEZsb2F0UmVjdCBzdHJva2VCb3VuZGluZ0JveCgpOworICAgIHZpcnR1YWwgdm9p
ZCBzdHJva2VTaGFwZShHcmFwaGljc0NvbnRleHQqKTsKKyAgICB2aXJ0dWFsIGJvb2wgc3Ryb2tl
Q29udGFpbnNTbG93Q2FzZShjb25zdCBGbG9hdFBvaW50Jik7CisgICAgdmlydHVhbCBib29sIGZp
bGxDb250YWluc1Nsb3dDYXNlKGNvbnN0IEZsb2F0UG9pbnQmLCBjb25zdCBXaW5kUnVsZSYpIGNv
bnN0OworICAgIGZsb2F0IHN0cm9rZVdpZHRoKCkgY29uc3Q7CisKKyAgICBQYXRoJiBwYXRoKCkg
Y29uc3QKKyAgICB7CisgICAgICAgIEFTU0VSVChtX3BhdGguZ2V0KCkpOworICAgICAgICByZXR1
cm4gKm1fcGF0aDsKKyAgICB9CisKKyAgICBQYXRoKiBwYXRoUHRyKCkgY29uc3QKKyAgICB7Cisg
ICAgICAgIEFTU0VSVChtX3BhdGguZ2V0KCkpOworICAgICAgICByZXR1cm4gbV9wYXRoLmdldCgp
OworICAgIH07CisKKyAgICBib29sIGhhc1BhdGgoKSBjb25zdCB7IHJldHVybiBtX3BhdGguZ2V0
KCk7IH0KKworcHJpdmF0ZToKKyAgICB2aXJ0dWFsIEFmZmluZVRyYW5zZm9ybSBsb2NhbFRyYW5z
Zm9ybSgpIGNvbnN0IHsgcmV0dXJuIG1fbG9jYWxUcmFuc2Zvcm07IH0KKyAgICB2b2lkIGZpbGxB
bmRTdHJva2VQYXRoKEdyYXBoaWNzQ29udGV4dCopOworCisgICAgYm9vbCBtX25lZWRzQm91bmRh
cmllc1VwZGF0ZSA6IDE7CisgICAgYm9vbCBtX25lZWRzU2hhcGVVcGRhdGUgOiAxOworICAgIGJv
b2wgbV9uZWVkc1RyYW5zZm9ybVVwZGF0ZSA6IDE7CisKKyAgICBGbG9hdFJlY3QgbV9maWxsQm91
bmRpbmdCb3g7CisgICAgRmxvYXRSZWN0IG1fc3Ryb2tlQW5kTWFya2VyQm91bmRpbmdCb3g7Cisg
ICAgRmxvYXRSZWN0IG1fcmVwYWludEJvdW5kaW5nQm94OworICAgIFNWR01hcmtlckxheW91dElu
Zm8gbV9tYXJrZXJMYXlvdXRJbmZvOworICAgIEFmZmluZVRyYW5zZm9ybSBtX2xvY2FsVHJhbnNm
b3JtOworICAgIE93blB0cjxQYXRoPiBtX3BhdGg7Cit9OworCitpbmxpbmUgUmVuZGVyU1ZHU2hh
cGUqIHRvUmVuZGVyU1ZHU2hhcGUoUmVuZGVyT2JqZWN0KiBvYmplY3QpCit7CisgICAgQVNTRVJU
KCFvYmplY3QgfHwgb2JqZWN0LT5pc1NWR1NoYXBlKCkpOworICAgIHJldHVybiBzdGF0aWNfY2Fz
dDxSZW5kZXJTVkdTaGFwZSo+KG9iamVjdCk7Cit9CisKK2lubGluZSBjb25zdCBSZW5kZXJTVkdT
aGFwZSogdG9SZW5kZXJTVkdTaGFwZShjb25zdCBSZW5kZXJPYmplY3QqIG9iamVjdCkKK3sKKyAg
ICBBU1NFUlQoIW9iamVjdCB8fCBvYmplY3QtPmlzU1ZHU2hhcGUoKSk7CisgICAgcmV0dXJuIHN0
YXRpY19jYXN0PGNvbnN0IFJlbmRlclNWR1NoYXBlKj4ob2JqZWN0KTsKK30KKworLy8gVGhpcyB3
aWxsIGNhdGNoIGFueW9uZSBkb2luZyBhbiB1bm5lY2Vzc2FyeSBjYXN0Lgordm9pZCB0b1JlbmRl
clNWR1NoYXBlKGNvbnN0IFJlbmRlclNWR1NoYXBlKik7CisKK30KKworI2VuZGlmIC8vIEVOQUJM
RShTVkcpCisjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcv
U1ZHUmVuZGVyU3VwcG9ydC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR1Jl
bmRlclN1cHBvcnQuY3BwCmluZGV4IDAwNzkyMTkuLjY2OTViNTIgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHUmVuZGVyU3VwcG9ydC5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdSZW5kZXJTdXBwb3J0LmNwcApAQCAtMjI1LDkgKzIy
NSw5IEBAIHZvaWQgU1ZHUmVuZGVyU3VwcG9ydDo6bGF5b3V0Q2hpbGRyZW4oUmVuZGVyT2JqZWN0
KiBzdGFydCwgYm9vbCBzZWxmTmVlZHNMYXlvdXQpCiAgICAgICAgICAgICAvLyBXaGVuIHNlbGZO
ZWVkc0xheW91dCBpcyBmYWxzZSBhbmQgdGhlIGxheW91dCBzaXplIGNoYW5nZWQsIHdlIGhhdmUg
dG8gY2hlY2sgd2hldGhlciB0aGlzIGNoaWxkIHVzZXMgcmVsYXRpdmUgbGVuZ3RocwogICAgICAg
ICAgICAgaWYgKFNWR0VsZW1lbnQqIGVsZW1lbnQgPSBjaGlsZC0+bm9kZSgpLT5pc1NWR0VsZW1l
bnQoKSA/IHN0YXRpY19jYXN0PFNWR0VsZW1lbnQqPihjaGlsZC0+bm9kZSgpKSA6IDApIHsKICAg
ICAgICAgICAgICAgICBpZiAoZWxlbWVudC0+aXNTdHlsZWQoKSAmJiBzdGF0aWNfY2FzdDxTVkdT
dHlsZWRFbGVtZW50Kj4oZWxlbWVudCktPmhhc1JlbGF0aXZlTGVuZ3RocygpKSB7Ci0gICAgICAg
ICAgICAgICAgICAgIC8vIFdoZW4gdGhlIGxheW91dCBzaXplIGNoYW5nZWQgYW5kIHdoZW4gdXNp
bmcgcmVsYXRpdmUgdmFsdWVzIHRlbGwgdGhlIFJlbmRlclNWR1BhdGggdG8gdXBkYXRlIGl0cyBQ
YXRoIG9iamVjdAotICAgICAgICAgICAgICAgICAgICBpZiAoY2hpbGQtPmlzU1ZHUGF0aCgpKQot
ICAgICAgICAgICAgICAgICAgICAgICAgdG9SZW5kZXJTVkdQYXRoKGNoaWxkKS0+c2V0TmVlZHNQ
YXRoVXBkYXRlKCk7CisgICAgICAgICAgICAgICAgICAgIC8vIFdoZW4gdGhlIGxheW91dCBzaXpl
IGNoYW5nZWQgYW5kIHdoZW4gdXNpbmcgcmVsYXRpdmUgdmFsdWVzIHRlbGwgdGhlIFJlbmRlclNW
R1NoYXBlIHRvIHVwZGF0ZSBpdHMgc2hhcGUgb2JqZWN0CisgICAgICAgICAgICAgICAgICAgIGlm
IChjaGlsZC0+aXNTVkdTaGFwZSgpKQorICAgICAgICAgICAgICAgICAgICAgICAgdG9SZW5kZXJT
VkdTaGFwZShjaGlsZCktPnNldE5lZWRzU2hhcGVVcGRhdGUoKTsKIAogICAgICAgICAgICAgICAg
ICAgICBuZWVkc0xheW91dCA9IHRydWU7CiAgICAgICAgICAgICAgICAgfQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdSZW5kZXJUcmVlQXNUZXh0LmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHUmVuZGVyVHJlZUFzVGV4dC5jcHAKaW5kZXgg
YTE2Mjk2OS4uZDFhZDcyYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2
Zy9TVkdSZW5kZXJUcmVlQXNUZXh0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
c3ZnL1NWR1JlbmRlclRyZWVBc1RleHQuY3BwCkBAIC01NSw2ICs1NSw3IEBACiAjaW5jbHVkZSAi
UmVuZGVyU1ZHUmVzb3VyY2VSYWRpYWxHcmFkaWVudC5oIgogI2luY2x1ZGUgIlJlbmRlclNWR1Jl
c291cmNlU29saWRDb2xvci5oIgogI2luY2x1ZGUgIlJlbmRlclNWR1Jvb3QuaCIKKyNpbmNsdWRl
ICJSZW5kZXJTVkdTaGFwZS5oIgogI2luY2x1ZGUgIlJlbmRlclNWR1RleHQuaCIKICNpbmNsdWRl
ICJSZW5kZXJUcmVlQXNUZXh0LmgiCiAjaW5jbHVkZSAiU1ZHQ2lyY2xlRWxlbWVudC5oIgpAQCAt
Mjg5LDE4ICsyOTAsMTggQEAgc3RhdGljIHZvaWQgd3JpdGVTdHlsZShUZXh0U3RyZWFtJiB0cywg
Y29uc3QgUmVuZGVyT2JqZWN0JiBvYmplY3QpCiAgICAgICAgIHdyaXRlTmFtZVZhbHVlUGFpcih0
cywgInRyYW5zZm9ybSIsIG9iamVjdC5sb2NhbFRyYW5zZm9ybSgpKTsKICAgICB3cml0ZUlmTm90
RGVmYXVsdCh0cywgImltYWdlIHJlbmRlcmluZyIsIHN0eWxlLT5pbWFnZVJlbmRlcmluZygpLCBS
ZW5kZXJTdHlsZTo6aW5pdGlhbEltYWdlUmVuZGVyaW5nKCkpOwogICAgIHdyaXRlSWZOb3REZWZh
dWx0KHRzLCAib3BhY2l0eSIsIHN0eWxlLT5vcGFjaXR5KCksIFJlbmRlclN0eWxlOjppbml0aWFs
T3BhY2l0eSgpKTsKLSAgICBpZiAob2JqZWN0LmlzU1ZHUGF0aCgpKSB7Ci0gICAgICAgIGNvbnN0
IFJlbmRlclNWR1BhdGgmIHBhdGggPSBzdGF0aWNfY2FzdDxjb25zdCBSZW5kZXJTVkdQYXRoJj4o
b2JqZWN0KTsKLSAgICAgICAgQVNTRVJUKHBhdGgubm9kZSgpKTsKLSAgICAgICAgQVNTRVJUKHBh
dGgubm9kZSgpLT5pc1NWR0VsZW1lbnQoKSk7CisgICAgaWYgKG9iamVjdC5pc1NWR1NoYXBlKCkp
IHsKKyAgICAgICAgY29uc3QgUmVuZGVyU1ZHU2hhcGUmIHNoYXBlID0gc3RhdGljX2Nhc3Q8Y29u
c3QgUmVuZGVyU1ZHU2hhcGUmPihvYmplY3QpOworICAgICAgICBBU1NFUlQoc2hhcGUubm9kZSgp
KTsKKyAgICAgICAgQVNTRVJUKHNoYXBlLm5vZGUoKS0+aXNTVkdFbGVtZW50KCkpOwogCiAgICAg
ICAgIENvbG9yIGZhbGxiYWNrQ29sb3I7Ci0gICAgICAgIGlmIChSZW5kZXJTVkdSZXNvdXJjZSog
c3Ryb2tlUGFpbnRpbmdSZXNvdXJjZSA9IFJlbmRlclNWR1Jlc291cmNlOjpzdHJva2VQYWludGlu
Z1Jlc291cmNlKGNvbnN0X2Nhc3Q8UmVuZGVyU1ZHUGF0aCo+KCZwYXRoKSwgcGF0aC5zdHlsZSgp
LCBmYWxsYmFja0NvbG9yKSkgeworICAgICAgICBpZiAoUmVuZGVyU1ZHUmVzb3VyY2UqIHN0cm9r
ZVBhaW50aW5nUmVzb3VyY2UgPSBSZW5kZXJTVkdSZXNvdXJjZTo6c3Ryb2tlUGFpbnRpbmdSZXNv
dXJjZShjb25zdF9jYXN0PFJlbmRlclNWR1NoYXBlKj4oJnNoYXBlKSwgc2hhcGUuc3R5bGUoKSwg
ZmFsbGJhY2tDb2xvcikpIHsKICAgICAgICAgICAgIFRleHRTdHJlYW1TZXBhcmF0b3IgcygiICIp
OwogICAgICAgICAgICAgdHMgPDwgIiBbc3Ryb2tlPXsiIDw8IHM7CiAgICAgICAgICAgICB3cml0
ZVNWR1BhaW50aW5nUmVzb3VyY2UodHMsIHN0cm9rZVBhaW50aW5nUmVzb3VyY2UpOwogCi0gICAg
ICAgICAgICBTVkdFbGVtZW50KiBlbGVtZW50ID0gc3RhdGljX2Nhc3Q8U1ZHRWxlbWVudCo+KHBh
dGgubm9kZSgpKTsKKyAgICAgICAgICAgIFNWR0VsZW1lbnQqIGVsZW1lbnQgPSBzdGF0aWNfY2Fz
dDxTVkdFbGVtZW50Kj4oc2hhcGUubm9kZSgpKTsKICAgICAgICAgICAgIGRvdWJsZSBkYXNoT2Zm
c2V0ID0gc3ZnU3R5bGUtPnN0cm9rZURhc2hPZmZzZXQoKS52YWx1ZShlbGVtZW50KTsKICAgICAg
ICAgICAgIGRvdWJsZSBzdHJva2VXaWR0aCA9IHN2Z1N0eWxlLT5zdHJva2VXaWR0aCgpLnZhbHVl
KGVsZW1lbnQpOwogICAgICAgICAgICAgY29uc3QgVmVjdG9yPFNWR0xlbmd0aD4mIGRhc2hlcyA9
IHN2Z1N0eWxlLT5zdHJva2VEYXNoQXJyYXkoKTsKQEAgLTMyMiw3ICszMjMsNyBAQCBzdGF0aWMg
dm9pZCB3cml0ZVN0eWxlKFRleHRTdHJlYW0mIHRzLCBjb25zdCBSZW5kZXJPYmplY3QmIG9iamVj
dCkKICAgICAgICAgICAgIHRzIDw8ICJ9XSI7CiAgICAgICAgIH0KIAotICAgICAgICBpZiAoUmVu
ZGVyU1ZHUmVzb3VyY2UqIGZpbGxQYWludGluZ1Jlc291cmNlID0gUmVuZGVyU1ZHUmVzb3VyY2U6
OmZpbGxQYWludGluZ1Jlc291cmNlKGNvbnN0X2Nhc3Q8UmVuZGVyU1ZHUGF0aCo+KCZwYXRoKSwg
cGF0aC5zdHlsZSgpLCBmYWxsYmFja0NvbG9yKSkgeworICAgICAgICBpZiAoUmVuZGVyU1ZHUmVz
b3VyY2UqIGZpbGxQYWludGluZ1Jlc291cmNlID0gUmVuZGVyU1ZHUmVzb3VyY2U6OmZpbGxQYWlu
dGluZ1Jlc291cmNlKGNvbnN0X2Nhc3Q8UmVuZGVyU1ZHU2hhcGUqPigmc2hhcGUpLCBzaGFwZS5z
dHlsZSgpLCBmYWxsYmFja0NvbG9yKSkgewogICAgICAgICAgICAgVGV4dFN0cmVhbVNlcGFyYXRv
ciBzKCIgIik7CiAgICAgICAgICAgICB0cyA8PCAiIFtmaWxsPXsiIDw8IHM7CiAgICAgICAgICAg
ICB3cml0ZVNWR1BhaW50aW5nUmVzb3VyY2UodHMsIGZpbGxQYWludGluZ1Jlc291cmNlKTsKQEAg
LTM0NiwxMiArMzQ3LDEyIEBAIHN0YXRpYyBUZXh0U3RyZWFtJiB3cml0ZVBvc2l0aW9uQW5kU3R5
bGUoVGV4dFN0cmVhbSYgdHMsIGNvbnN0IFJlbmRlck9iamVjdCYgb2JqCiAgICAgcmV0dXJuIHRz
OwogfQogCi1zdGF0aWMgVGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiB0cywgY29u
c3QgUmVuZGVyU1ZHUGF0aCYgcGF0aCkKK3N0YXRpYyBUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRl
eHRTdHJlYW0mIHRzLCBjb25zdCBSZW5kZXJTVkdTaGFwZSYgc2hhcGUpCiB7Ci0gICAgd3JpdGVQ
b3NpdGlvbkFuZFN0eWxlKHRzLCBwYXRoKTsKKyAgICB3cml0ZVBvc2l0aW9uQW5kU3R5bGUodHMs
IHNoYXBlKTsKIAotICAgIEFTU0VSVChwYXRoLm5vZGUoKS0+aXNTVkdFbGVtZW50KCkpOwotICAg
IFNWR0VsZW1lbnQqIHN2Z0VsZW1lbnQgPSBzdGF0aWNfY2FzdDxTVkdFbGVtZW50Kj4ocGF0aC5u
b2RlKCkpOworICAgIEFTU0VSVChzaGFwZS5ub2RlKCktPmlzU1ZHRWxlbWVudCgpKTsKKyAgICBT
VkdFbGVtZW50KiBzdmdFbGVtZW50ID0gc3RhdGljX2Nhc3Q8U1ZHRWxlbWVudCo+KHNoYXBlLm5v
ZGUoKSk7CiAKICAgICBpZiAoc3ZnRWxlbWVudC0+aGFzVGFnTmFtZShTVkdOYW1lczo6cmVjdFRh
ZykpIHsKICAgICAgICAgU1ZHUmVjdEVsZW1lbnQqIGVsZW1lbnQgPSBzdGF0aWNfY2FzdDxTVkdS
ZWN0RWxlbWVudCo+KHN2Z0VsZW1lbnQpOwpAQCAtNjUzLDExICs2NTQsMTEgQEAgdm9pZCB3cml0
ZVNWR0ltYWdlKFRleHRTdHJlYW0mIHRzLCBjb25zdCBSZW5kZXJTVkdJbWFnZSYgaW1hZ2UsIGlu
dCBpbmRlbnQpCiAgICAgd3JpdGVSZXNvdXJjZXModHMsIGltYWdlLCBpbmRlbnQpOwogfQogCi12
b2lkIHdyaXRlKFRleHRTdHJlYW0mIHRzLCBjb25zdCBSZW5kZXJTVkdQYXRoJiBwYXRoLCBpbnQg
aW5kZW50KQordm9pZCB3cml0ZShUZXh0U3RyZWFtJiB0cywgY29uc3QgUmVuZGVyU1ZHU2hhcGUm
IHNoYXBlLCBpbnQgaW5kZW50KQogewotICAgIHdyaXRlU3RhbmRhcmRQcmVmaXgodHMsIHBhdGgs
IGluZGVudCk7Ci0gICAgdHMgPDwgcGF0aCA8PCAiXG4iOwotICAgIHdyaXRlUmVzb3VyY2VzKHRz
LCBwYXRoLCBpbmRlbnQpOworICAgIHdyaXRlU3RhbmRhcmRQcmVmaXgodHMsIHNoYXBlLCBpbmRl
bnQpOworICAgIHRzIDw8IHNoYXBlIDw8ICJcbiI7CisgICAgd3JpdGVSZXNvdXJjZXModHMsIHNo
YXBlLCBpbmRlbnQpOwogfQogCiB2b2lkIHdyaXRlU1ZHR3JhZGllbnRTdG9wKFRleHRTdHJlYW0m
IHRzLCBjb25zdCBSZW5kZXJTVkdHcmFkaWVudFN0b3AmIHN0b3AsIGludCBpbmRlbnQpCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR1JlbmRlclRyZWVBc1RleHQu
aCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHUmVuZGVyVHJlZUFzVGV4dC5oCmlu
ZGV4IGNlMDdhNWMuLjM1OThjODMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9zdmcvU1ZHUmVuZGVyVHJlZUFzVGV4dC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9zdmcvU1ZHUmVuZGVyVHJlZUFzVGV4dC5oCkBAIC00MSwxNCArNDEsMTQgQEAgY2xhc3MgUmVu
ZGVySW1hZ2U7CiBjbGFzcyBSZW5kZXJPYmplY3Q7CiBjbGFzcyBSZW5kZXJTVkdHcmFkaWVudFN0
b3A7CiBjbGFzcyBSZW5kZXJTVkdJbWFnZTsKLWNsYXNzIFJlbmRlclNWR1BhdGg7CitjbGFzcyBS
ZW5kZXJTVkdTaGFwZTsKIGNsYXNzIFJlbmRlclNWR1Jvb3Q7CiBjbGFzcyBSZW5kZXJUZXh0Owog
Y2xhc3MgQWZmaW5lVHJhbnNmb3JtOwogY2xhc3MgU1ZHVW5pdFR5cGVzOwogCiAvLyBmdW5jdGlv
bnMgdXNlZCBieSB0aGUgbWFpbiBSZW5kZXJUcmVlQXNUZXh0IGNvZGUKLXZvaWQgd3JpdGUoVGV4
dFN0cmVhbSYsIGNvbnN0IFJlbmRlclNWR1BhdGgmLCBpbnQgaW5kZW50KTsKK3ZvaWQgd3JpdGUo
VGV4dFN0cmVhbSYsIGNvbnN0IFJlbmRlclNWR1NoYXBlJiwgaW50IGluZGVudCk7CiB2b2lkIHdy
aXRlKFRleHRTdHJlYW0mLCBjb25zdCBSZW5kZXJTVkdSb290JiwgaW50IGluZGVudCk7CiB2b2lk
IHdyaXRlU1ZHR3JhZGllbnRTdG9wKFRleHRTdHJlYW0mLCBjb25zdCBSZW5kZXJTVkdHcmFkaWVu
dFN0b3AmLCBpbnQgaW5kZW50KTsKIHZvaWQgd3JpdGVTVkdSZXNvdXJjZUNvbnRhaW5lcihUZXh0
U3RyZWFtJiwgY29uc3QgUmVuZGVyT2JqZWN0JiwgaW50IGluZGVudCk7CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9zdmcvU1ZHQ2lyY2xlRWxlbWVudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9z
dmcvU1ZHQ2lyY2xlRWxlbWVudC5jcHAKaW5kZXggMmFlNjliOC4uMDM2NjllMCAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0NpcmNsZUVsZW1lbnQuY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3N2Zy9TVkdDaXJjbGVFbGVtZW50LmNwcApAQCAtMTI0LDcgKzEyNCw3IEBAIHZvaWQg
U1ZHQ2lyY2xlRWxlbWVudDo6c3ZnQXR0cmlidXRlQ2hhbmdlZChjb25zdCBRdWFsaWZpZWROYW1l
JiBhdHRyTmFtZSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgaWYgKGlzTGVuZ3RoQXR0cmlidXRl
KSB7Ci0gICAgICAgIHJlbmRlcmVyLT5zZXROZWVkc1BhdGhVcGRhdGUoKTsKKyAgICAgICAgcmVu
ZGVyZXItPnNldE5lZWRzU2hhcGVVcGRhdGUoKTsKICAgICAgICAgUmVuZGVyU1ZHUmVzb3VyY2U6
Om1hcmtGb3JMYXlvdXRBbmRQYXJlbnRSZXNvdXJjZUludmFsaWRhdGlvbihyZW5kZXJlcik7CiAg
ICAgICAgIHJldHVybjsKICAgICB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZH
RWxsaXBzZUVsZW1lbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0VsbGlwc2VFbGVtZW50
LmNwcAppbmRleCBjZWEwNjZkLi5jYTAxN2M0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9z
dmcvU1ZHRWxsaXBzZUVsZW1lbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdFbGxp
cHNlRWxlbWVudC5jcHAKQEAgLTEyOSw3ICsxMjksNyBAQCB2b2lkIFNWR0VsbGlwc2VFbGVtZW50
OjpzdmdBdHRyaWJ1dGVDaGFuZ2VkKGNvbnN0IFF1YWxpZmllZE5hbWUmIGF0dHJOYW1lKQogICAg
ICAgICByZXR1cm47CiAKICAgICBpZiAoaXNMZW5ndGhBdHRyaWJ1dGUpIHsKLSAgICAgICAgcmVu
ZGVyZXItPnNldE5lZWRzUGF0aFVwZGF0ZSgpOworICAgICAgICByZW5kZXJlci0+c2V0TmVlZHNT
aGFwZVVwZGF0ZSgpOwogICAgICAgICBSZW5kZXJTVkdSZXNvdXJjZTo6bWFya0ZvckxheW91dEFu
ZFBhcmVudFJlc291cmNlSW52YWxpZGF0aW9uKHJlbmRlcmVyKTsKICAgICAgICAgcmV0dXJuOwog
ICAgIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdMaW5lRWxlbWVudC5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHTGluZUVsZW1lbnQuY3BwCmluZGV4IGM3Y2ExMWUuLmIx
YmI4ZWEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdMaW5lRWxlbWVudC5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0xpbmVFbGVtZW50LmNwcApAQCAtMTI5LDcgKzEy
OSw3IEBAIHZvaWQgU1ZHTGluZUVsZW1lbnQ6OnN2Z0F0dHJpYnV0ZUNoYW5nZWQoY29uc3QgUXVh
bGlmaWVkTmFtZSYgYXR0ck5hbWUpCiAgICAgICAgIHJldHVybjsKIAogICAgIGlmIChpc0xlbmd0
aEF0dHJpYnV0ZSkgewotICAgICAgICByZW5kZXJlci0+c2V0TmVlZHNQYXRoVXBkYXRlKCk7Cisg
ICAgICAgIHJlbmRlcmVyLT5zZXROZWVkc1NoYXBlVXBkYXRlKCk7CiAgICAgICAgIFJlbmRlclNW
R1Jlc291cmNlOjptYXJrRm9yTGF5b3V0QW5kUGFyZW50UmVzb3VyY2VJbnZhbGlkYXRpb24ocmVu
ZGVyZXIpOwogICAgICAgICByZXR1cm47CiAgICAgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvc3ZnL1NWR1BhdGhFbGVtZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdQYXRoRWxl
bWVudC5jcHAKaW5kZXggYTdhMzM3ZS4uZmUzMzU5NSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvc3ZnL1NWR1BhdGhFbGVtZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHUGF0
aEVsZW1lbnQuY3BwCkBAIC0yNjksNyArMjY5LDcgQEAgdm9pZCBTVkdQYXRoRWxlbWVudDo6c3Zn
QXR0cmlidXRlQ2hhbmdlZChjb25zdCBRdWFsaWZpZWROYW1lJiBhdHRyTmFtZSkKICAgICAgICAg
fQogCiAgICAgICAgIGlmIChyZW5kZXJlcikKLSAgICAgICAgICAgIHJlbmRlcmVyLT5zZXROZWVk
c1BhdGhVcGRhdGUoKTsKKyAgICAgICAgICAgIHJlbmRlcmVyLT5zZXROZWVkc1NoYXBlVXBkYXRl
KCk7CiAgICAgfQogCiAgICAgaWYgKHJlbmRlcmVyKQpAQCAtMzU1LDEwICszNTUsMTYgQEAgdm9p
ZCBTVkdQYXRoRWxlbWVudDo6cGF0aFNlZ0xpc3RDaGFuZ2VkKFNWR1BhdGhTZWdSb2xlIHJvbGUp
CiAgICAgaWYgKCFyZW5kZXJlcikKICAgICAgICAgcmV0dXJuOwogCi0gICAgcmVuZGVyZXItPnNl
dE5lZWRzUGF0aFVwZGF0ZSgpOworICAgIHJlbmRlcmVyLT5zZXROZWVkc1NoYXBlVXBkYXRlKCk7
CiAgICAgUmVuZGVyU1ZHUmVzb3VyY2U6Om1hcmtGb3JMYXlvdXRBbmRQYXJlbnRSZXNvdXJjZUlu
dmFsaWRhdGlvbihyZW5kZXJlcik7CiB9CiAKK1JlbmRlck9iamVjdCogU1ZHUGF0aEVsZW1lbnQ6
OmNyZWF0ZVJlbmRlcmVyKFJlbmRlckFyZW5hKiBhcmVuYSwgUmVuZGVyU3R5bGUqKQoreworICAg
IC8vIEJ5IGRlZmF1bHQsIGFueSBzdWJjbGFzcyBpcyBleHBlY3RlZCB0byBkbyBwYXRoLWJhc2Vk
IGRyYXdpbmcKKyAgICByZXR1cm4gbmV3IChhcmVuYSkgUmVuZGVyU1ZHUGF0aCh0aGlzKTsKK30K
KwogfQogCiAjZW5kaWYgLy8gRU5BQkxFKFNWRykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3N2Zy9TVkdQYXRoRWxlbWVudC5oIGIvU291cmNlL1dlYkNvcmUvc3ZnL1NWR1BhdGhFbGVtZW50
LmgKaW5kZXggMWQzN2QwZS4uNTRiOGZlMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvc3Zn
L1NWR1BhdGhFbGVtZW50LmgKKysrIGIvU291cmNlL1dlYkNvcmUvc3ZnL1NWR1BhdGhFbGVtZW50
LmgKQEAgLTEyMiw2ICsxMjIsOCBAQCBwcml2YXRlOgogICAgIHZpcnR1YWwgdm9pZCBzeW5jaHJv
bml6ZVJlcXVpcmVkRXh0ZW5zaW9ucygpIHsgU1ZHVGVzdHM6OnN5bmNocm9uaXplUmVxdWlyZWRF
eHRlbnNpb25zKHRoaXMpOyB9CiAgICAgdmlydHVhbCB2b2lkIHN5bmNocm9uaXplU3lzdGVtTGFu
Z3VhZ2UoKSB7IFNWR1Rlc3RzOjpzeW5jaHJvbml6ZVN5c3RlbUxhbmd1YWdlKHRoaXMpOyB9CiAK
KyAgICBSZW5kZXJPYmplY3QqIGNyZWF0ZVJlbmRlcmVyKFJlbmRlckFyZW5hKiwgUmVuZGVyU3R5
bGUqKTsKKwogcHJpdmF0ZToKICAgICBPd25QdHI8U1ZHUGF0aEJ5dGVTdHJlYW0+IG1fcGF0aEJ5
dGVTdHJlYW07CiAgICAgbXV0YWJsZSBTVkdTeW5jaHJvbml6YWJsZUFuaW1hdGVkUHJvcGVydHk8
U1ZHUGF0aFNlZ0xpc3Q+IG1fcGF0aFNlZ0xpc3Q7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9zdmcvU1ZHUG9seUVsZW1lbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvc3ZnL1NWR1BvbHlFbGVt
ZW50LmNwcAppbmRleCA2MTZiODY3Li5mMzBjYTRhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9zdmcvU1ZHUG9seUVsZW1lbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdQb2x5
RWxlbWVudC5jcHAKQEAgLTEyNCw3ICsxMjQsNyBAQCB2b2lkIFNWR1BvbHlFbGVtZW50OjpzdmdB
dHRyaWJ1dGVDaGFuZ2VkKGNvbnN0IFF1YWxpZmllZE5hbWUmIGF0dHJOYW1lKQogICAgICAgICBy
ZXR1cm47CiAKICAgICBpZiAoYXR0ck5hbWUgPT0gU1ZHTmFtZXM6OnBvaW50c0F0dHIpIHsKLSAg
ICAgICAgcmVuZGVyZXItPnNldE5lZWRzUGF0aFVwZGF0ZSgpOworICAgICAgICByZW5kZXJlci0+
c2V0TmVlZHNTaGFwZVVwZGF0ZSgpOwogICAgICAgICBSZW5kZXJTVkdSZXNvdXJjZTo6bWFya0Zv
ckxheW91dEFuZFBhcmVudFJlc291cmNlSW52YWxpZGF0aW9uKHJlbmRlcmVyKTsKICAgICAgICAg
cmV0dXJuOwogICAgIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdSZWN0RWxl
bWVudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHUmVjdEVsZW1lbnQuY3BwCmluZGV4IGU4
NDc3NGQuLjE4NzllMGEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdSZWN0RWxl
bWVudC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvc3ZnL1NWR1JlY3RFbGVtZW50LmNwcApAQCAt
MjUsNiArMjUsNyBAQAogCiAjaW5jbHVkZSAiQXR0cmlidXRlLmgiCiAjaW5jbHVkZSAiUmVuZGVy
U1ZHUGF0aC5oIgorI2luY2x1ZGUgIlJlbmRlclNWR1JlY3QuaCIKICNpbmNsdWRlICJSZW5kZXJT
VkdSZXNvdXJjZS5oIgogI2luY2x1ZGUgIlNWR0VsZW1lbnRJbnN0YW5jZS5oIgogI2luY2x1ZGUg
IlNWR0xlbmd0aC5oIgpAQCAtMzIsNiArMzMsOCBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAK
K2NsYXNzIFJlbmRlclNWR1JlY3Q7CisKIC8vIEFuaW1hdGVkIHByb3BlcnR5IGRlZmluaXRpb25z
CiBERUZJTkVfQU5JTUFURURfTEVOR1RIKFNWR1JlY3RFbGVtZW50LCBTVkdOYW1lczo6eEF0dHIs
IFgsIHgpCiBERUZJTkVfQU5JTUFURURfTEVOR1RIKFNWR1JlY3RFbGVtZW50LCBTVkdOYW1lczo6
eUF0dHIsIFksIHkpCkBAIC0xMzcsMTIgKzE0MCwxMiBAQCB2b2lkIFNWR1JlY3RFbGVtZW50Ojpz
dmdBdHRyaWJ1dGVDaGFuZ2VkKGNvbnN0IFF1YWxpZmllZE5hbWUmIGF0dHJOYW1lKQogICAgIGlm
IChTVkdUZXN0czo6aGFuZGxlQXR0cmlidXRlQ2hhbmdlKHRoaXMsIGF0dHJOYW1lKSkKICAgICAg
ICAgcmV0dXJuOwogCi0gICAgUmVuZGVyU1ZHUGF0aCogcmVuZGVyZXIgPSBzdGF0aWNfY2FzdDxS
ZW5kZXJTVkdQYXRoKj4odGhpcy0+cmVuZGVyZXIoKSk7CisgICAgUmVuZGVyU1ZHUmVjdCogcmVu
ZGVyZXIgPSBzdGF0aWNfY2FzdDxSZW5kZXJTVkdSZWN0Kj4odGhpcy0+cmVuZGVyZXIoKSk7CiAg
ICAgaWYgKCFyZW5kZXJlcikKICAgICAgICAgcmV0dXJuOwogCiAgICAgaWYgKGlzTGVuZ3RoQXR0
cmlidXRlKSB7Ci0gICAgICAgIHJlbmRlcmVyLT5zZXROZWVkc1BhdGhVcGRhdGUoKTsKKyAgICAg
ICAgcmVuZGVyZXItPnNldE5lZWRzU2hhcGVVcGRhdGUoKTsKICAgICAgICAgUmVuZGVyU1ZHUmVz
b3VyY2U6Om1hcmtGb3JMYXlvdXRBbmRQYXJlbnRSZXNvdXJjZUludmFsaWRhdGlvbihyZW5kZXJl
cik7CiAgICAgICAgIHJldHVybjsKICAgICB9CkBAIC0xOTgsNiArMjAxLDExIEBAIGJvb2wgU1ZH
UmVjdEVsZW1lbnQ6OnNlbGZIYXNSZWxhdGl2ZUxlbmd0aHMoKSBjb25zdAogICAgICAgICB8fCBy
eSgpLmlzUmVsYXRpdmUoKTsKIH0KIAorUmVuZGVyT2JqZWN0KiBTVkdSZWN0RWxlbWVudDo6Y3Jl
YXRlUmVuZGVyZXIoUmVuZGVyQXJlbmEqIGFyZW5hLCBSZW5kZXJTdHlsZSopCit7CisgICAgcmV0
dXJuIG5ldyAoYXJlbmEpIFJlbmRlclNWR1JlY3QodGhpcyk7Cit9CisKIH0KIAogI2VuZGlmIC8v
IEVOQUJMRShTVkcpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHUmVjdEVsZW1l
bnQuaCBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdSZWN0RWxlbWVudC5oCmluZGV4IDk5NDM3ZjMu
LjliZjYwMmYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdSZWN0RWxlbWVudC5o
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdSZWN0RWxlbWVudC5oCkBAIC01Miw2ICs1Miw4
IEBAIHByaXZhdGU6CiAKICAgICB2aXJ0dWFsIGJvb2wgc2VsZkhhc1JlbGF0aXZlTGVuZ3Rocygp
IGNvbnN0OwogCisgICAgUmVuZGVyT2JqZWN0KiBjcmVhdGVSZW5kZXJlcihSZW5kZXJBcmVuYSos
IFJlbmRlclN0eWxlKik7CisKICAgICBCRUdJTl9ERUNMQVJFX0FOSU1BVEVEX1BST1BFUlRJRVMo
U1ZHUmVjdEVsZW1lbnQpCiAgICAgICAgIERFQ0xBUkVfQU5JTUFURURfTEVOR1RIKFgsIHgpCiAg
ICAgICAgIERFQ0xBUkVfQU5JTUFURURfTEVOR1RIKFksIHkpCi0tIAoxLjcuNC4xCgo=
</data>
<flag name="commit-queue"
          id="100606"
          type_id="3"
          status="-"
          setter="rhodovan.u-szeged"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>104841</attachid>
            <date>2011-08-23 06:53:14 -0700</date>
            <delta_ts>2011-08-29 02:45:09 -0700</delta_ts>
            <desc>Draft patch</desc>
            <filename>0001-builds.patch</filename>
            <type>text/plain</type>
            <size>79325</size>
            <attacher name="Renata Hodovan">rhodovan.u-szeged</attacher>
            
              <data encoding="base64">RnJvbSAyZjNjOTZjZmE0OTg1NjYyYjM2MWUxNmI5NDQ3YjhlMzk5MDk1OWQ1IE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBSZW5hdGEgSG9kb3ZhbiA8cmVuaUB3ZWJraXQub3JnPgpEYXRl
OiBUdWUsIDIzIEF1ZyAyMDExIDE1OjM1OjUwICswMjAwClN1YmplY3Q6IFtQQVRDSF0gYnVpbGRz
CgotLS0KIFNvdXJjZS9XZWJDb3JlL0NNYWtlTGlzdHMudHh0ICAgICAgICAgICAgICAgICAgICAg
IHwgICAgMiArCiBTb3VyY2UvV2ViQ29yZS9HTlVtYWtlZmlsZS5saXN0LmFtICAgICAgICAgICAg
ICAgICB8ICAgIDQgKwogU291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBpICAgICAgICAgICAgICAg
ICAgICAgICAgfCAgICA0ICsKIFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUucHJvICAgICAgICAgICAg
ICAgICAgICAgICAgIHwgICAgNCArCiBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnZjcHJvai9XZWJD
b3JlLnZjcHJvaiAgICAgICB8ICAxMTIgKysrKysKIFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNv
ZGVwcm9qL3Byb2plY3QucGJ4cHJvaiAgIHwgICAgOCArCiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvUmVuZGVyT2JqZWN0LmggICAgICAgICAgICB8ICAgIDIgKwogU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlclRyZWVBc1RleHQuY3BwICAgICAgfCAgICA0ICstCiBTb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR0FsbEluT25lLmNwcCB8ICAgIDIgKwogU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdQYXRoLmNwcCAgICAgfCAgMzUyICstLS0tLS0t
LS0tLS0tLS0tCiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1BhdGguaCAg
ICAgICB8ICAgNzQgKy0tLS0KIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZH
UmVjdC5jcHAgICAgIHwgIDEzOSArKysrKysrCiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3Zn
L1JlbmRlclNWR1JlY3QuaCAgICAgICB8ICAgNjIgKysrCiAuLi4vcmVuZGVyaW5nL3N2Zy9SZW5k
ZXJTVkdSZXNvdXJjZUNsaXBwZXIuY3BwICAgICB8ICAgIDYgKy0KIC4uLi9yZW5kZXJpbmcvc3Zn
L1JlbmRlclNWR1Jlc291cmNlQ29udGFpbmVyLmNwcCAgIHwgICAgMiArLQogU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdTaGFwZS5jcHAgICAgfCAgNDI2ICsrKysrKysrKysr
KysrKysrKysrCiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1NoYXBlLmgg
ICAgICB8ICAxNjUgKysrKysrKysKIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHUmVu
ZGVyU3VwcG9ydC5jcHAgIHwgICAgNiArLQogLi4uL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdS
ZW5kZXJUcmVlQXNUZXh0LmNwcCAgfCAgIDMxICstCiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
c3ZnL1NWR1JlbmRlclRyZWVBc1RleHQuaCB8ICAgIDQgKy0KIFNvdXJjZS9XZWJDb3JlL3N2Zy9T
VkdDaXJjbGVFbGVtZW50LmNwcCAgICAgICAgICAgIHwgICAgMiArLQogU291cmNlL1dlYkNvcmUv
c3ZnL1NWR0VsbGlwc2VFbGVtZW50LmNwcCAgICAgICAgICAgfCAgICAyICstCiBTb3VyY2UvV2Vi
Q29yZS9zdmcvU1ZHTGluZUVsZW1lbnQuY3BwICAgICAgICAgICAgICB8ICAgIDIgKy0KIFNvdXJj
ZS9XZWJDb3JlL3N2Zy9TVkdQYXRoRWxlbWVudC5jcHAgICAgICAgICAgICAgIHwgICAxMCArLQog
U291cmNlL1dlYkNvcmUvc3ZnL1NWR1BhdGhFbGVtZW50LmggICAgICAgICAgICAgICAgfCAgICAy
ICsKIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdQb2x5RWxlbWVudC5jcHAgICAgICAgICAgICAgIHwg
ICAgMiArLQogU291cmNlL1dlYkNvcmUvc3ZnL1NWR1JlY3RFbGVtZW50LmNwcCAgICAgICAgICAg
ICAgfCAgIDEyICstCiBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHUmVjdEVsZW1lbnQuaCAgICAgICAg
ICAgICAgICB8ICAgIDIgKwogMjkgZmlsZXMgY2hhbmdlZCwgOTkyIGluc2VydGlvbnMoKyksIDQ1
MSBkZWxldGlvbnMoLSkKIGNyZWF0ZSBtb2RlIDEwMDY0NCBTb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvc3ZnL1JlbmRlclNWR1JlY3QuY3BwCiBjcmVhdGUgbW9kZSAxMDA2NDQgU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZWN0LmgKIGNyZWF0ZSBtb2RlIDEwMDY0NCBTb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1NoYXBlLmNwcAogY3JlYXRlIG1vZGUg
MTAwNjQ0IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHU2hhcGUuaAoKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NNYWtlTGlzdHMudHh0IGIvU291cmNlL1dlYkNvcmUv
Q01ha2VMaXN0cy50eHQKaW5kZXggNzlmNTlhYy4uNDE4Y2M4OCAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvQ01ha2VMaXN0cy50eHQKKysrIGIvU291cmNlL1dlYkNvcmUvQ01ha2VMaXN0cy50
eHQKQEAgLTE1ODEsNiArMTU4MSw3IEBAIElGIChFTkFCTEVfU1ZHKQogICAgICAgICByZW5kZXJp
bmcvc3ZnL1JlbmRlclNWR0lubGluZVRleHQuY3BwCiAgICAgICAgIHJlbmRlcmluZy9zdmcvUmVu
ZGVyU1ZHTW9kZWxPYmplY3QuY3BwCiAgICAgICAgIHJlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUGF0
aC5jcHAKKyAgICAgICAgcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZWN0LmNwcAogICAgICAgICBy
ZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291cmNlLmNwcAogICAgICAgICByZW5kZXJpbmcvc3Zn
L1JlbmRlclNWR1Jlc291cmNlQ2xpcHBlci5jcHAKICAgICAgICAgcmVuZGVyaW5nL3N2Zy9SZW5k
ZXJTVkdSZXNvdXJjZUNvbnRhaW5lci5jcHAKQEAgLTE1OTUsNiArMTU5Niw3IEBAIElGIChFTkFC
TEVfU1ZHKQogICAgICAgICByZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291cmNlU29saWRDb2xv
ci5jcHAKICAgICAgICAgcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSb290LmNwcAogICAgICAgICBy
ZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1NoYWRvd1RyZWVSb290Q29udGFpbmVyLmNwcAorICAgICAg
ICByZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1NoYXBlLmNwcAogICAgICAgICByZW5kZXJpbmcvc3Zn
L1JlbmRlclNWR1RTcGFuLmNwcAogICAgICAgICByZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1RleHQu
Y3BwCiAgICAgICAgIHJlbmRlcmluZy9zdmcvUmVuZGVyU1ZHVGV4dFBhdGguY3BwCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9HTlVtYWtlZmlsZS5saXN0LmFtIGIvU291cmNlL1dlYkNvcmUv
R05VbWFrZWZpbGUubGlzdC5hbQppbmRleCAzYWMyNTI1Li5iMDI0Y2MyIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9HTlVtYWtlZmlsZS5saXN0LmFtCisrKyBiL1NvdXJjZS9XZWJDb3JlL0dO
VW1ha2VmaWxlLmxpc3QuYW0KQEAgLTMxOTIsNiArMzE5Miw4IEBAIHdlYmNvcmVfc291cmNlcyAr
PSBcCiAJU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdNb2RlbE9iamVjdC5o
IFwKIAlTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1BhdGguY3BwIFwKIAlT
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1BhdGguaCBcCisJU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZWN0LmNwcCBcCisJU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZWN0LmggXAogCVNvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VDbGlwcGVyLmNwcCBcCiAJU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJjZUNsaXBwZXIuaCBcCiAJU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJjZUNvbnRhaW5lci5jcHAgXApAQCAtMzIyMCw2
ICszMjIyLDggQEAgd2ViY29yZV9zb3VyY2VzICs9IFwKIAlTb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvc3ZnL1JlbmRlclNWR1Jvb3QuaCBcCiAJU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9S
ZW5kZXJTVkdTaGFkb3dUcmVlUm9vdENvbnRhaW5lci5jcHAgXAogCVNvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9zdmcvUmVuZGVyU1ZHU2hhZG93VHJlZVJvb3RDb250YWluZXIuaCBcCisJU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdTaGFwZS5jcHAgXAorCVNvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHU2hhcGUuaCBcCiAJU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL3N2Zy9SZW5kZXJTVkdUU3Bhbi5jcHAgXAogCVNvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9zdmcvUmVuZGVyU1ZHVFNwYW4uaCBcCiAJU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9S
ZW5kZXJTVkdUZXh0LmNwcCBcCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5
cGkgYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkKaW5kZXggNjMzZTYzYS4uYzAyMGRlNSAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBpCisrKyBiL1NvdXJjZS9XZWJD
b3JlL1dlYkNvcmUuZ3lwaQpAQCAtNTg3Myw2ICs1ODczLDggQEAKICAgICAgICAgICAgICdyZW5k
ZXJpbmcvc3ZnL1JlbmRlclNWR01vZGVsT2JqZWN0LmgnLAogICAgICAgICAgICAgJ3JlbmRlcmlu
Zy9zdmcvUmVuZGVyU1ZHUGF0aC5jcHAnLAogICAgICAgICAgICAgJ3JlbmRlcmluZy9zdmcvUmVu
ZGVyU1ZHUGF0aC5oJywKKyAgICAgICAgICAgICdyZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1JlY3Qu
Y3BwJywKKyAgICAgICAgICAgICdyZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1JlY3QuaCcsCiAgICAg
ICAgICAgICAncmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJjZS5jcHAnLAogICAgICAgICAg
ICAgJ3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2UuaCcsCiAgICAgICAgICAgICAncmVu
ZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJjZUNsaXBwZXIuY3BwJywKQEAgLTU5MDEsNiArNTkw
Myw4IEBACiAgICAgICAgICAgICAncmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSb290LmgnLAogICAg
ICAgICAgICAgJ3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHU2hhZG93VHJlZVJvb3RDb250YWluZXIu
Y3BwJywKICAgICAgICAgICAgICdyZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1NoYWRvd1RyZWVSb290
Q29udGFpbmVyLmgnLAorICAgICAgICAgICAgJ3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHU2hhcGUu
Y3BwJywKKyAgICAgICAgICAgICdyZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1NoYXBlLmgnLAogICAg
ICAgICAgICAgJ3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHVFNwYW4uY3BwJywKICAgICAgICAgICAg
ICdyZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1RTcGFuLmgnLAogICAgICAgICAgICAgJ3JlbmRlcmlu
Zy9zdmcvUmVuZGVyU1ZHVGV4dC5jcHAnLApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvV2Vi
Q29yZS5wcm8gYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnBybwppbmRleCBhOTRjMjUyLi4xOTMw
YTEyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnBybworKysgYi9Tb3VyY2Uv
V2ViQ29yZS9XZWJDb3JlLnBybwpAQCAtMjI2OCw2ICsyMjY4LDcgQEAgSEVBREVSUyArPSBcCiAg
ICAgcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdJbmxpbmVUZXh0LmggXAogICAgIHJlbmRlcmluZy9z
dmcvUmVuZGVyU1ZHTW9kZWxPYmplY3QuaCBcCiAgICAgcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdQ
YXRoLmggXAorICAgIHJlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVjdC5oIFwKICAgICByZW5kZXJp
bmcvc3ZnL1JlbmRlclNWR1Jlc291cmNlLmggXAogICAgIHJlbmRlcmluZy9zdmcvUmVuZGVyU1ZH
UmVzb3VyY2VDbGlwcGVyLmggXAogICAgIHJlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VD
b250YWluZXIuaCBcCkBAIC0yMjgyLDYgKzIyODMsNyBAQCBIRUFERVJTICs9IFwKICAgICByZW5k
ZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291cmNlU29saWRDb2xvci5oIFwKICAgICByZW5kZXJpbmcv
c3ZnL1JlbmRlclNWR1Jvb3QuaCBcCiAgICAgcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdTaGFkb3dU
cmVlUm9vdENvbnRhaW5lci5oIFwKKyAgICByZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1NoYXBlLmgg
XAogICAgIHJlbmRlcmluZy9zdmcvUmVuZGVyU1ZHVFNwYW4uaCBcCiAgICAgcmVuZGVyaW5nL3N2
Zy9SZW5kZXJTVkdUZXh0LmggXAogICAgIHJlbmRlcmluZy9zdmcvUmVuZGVyU1ZHVGV4dFBhdGgu
aCBcCkBAIC0zMzAxLDYgKzMzMDMsOCBAQCBjb250YWlucyhERUZJTkVTLCBFTkFCTEVfU1ZHPTEp
IHsKICAgICAgICAgcmVuZGVyaW5nL3N0eWxlL1NWR1JlbmRlclN0eWxlRGVmcy5jcHAgXAogICAg
ICAgICByZW5kZXJpbmcvUG9pbnRlckV2ZW50c0hpdFJ1bGVzLmNwcCBcCiAgICAgICAgIHJlbmRl
cmluZy9zdmcvUmVuZGVyU1ZHUGF0aC5jcHAgXAorICAgICAgICByZW5kZXJpbmcvc3ZnL1JlbmRl
clNWR1JlY3QuY3BwIFwKKyAgICAgICAgcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdTaGFwZS5jcHAg
XAogICAgICAgICBzdmcvYW5pbWF0aW9uL1NNSUxUaW1lLmNwcCBcCiAgICAgICAgIHN2Zy9hbmlt
YXRpb24vU01JTFRpbWVDb250YWluZXIuY3BwIFwKICAgICAgICAgc3ZnL2FuaW1hdGlvbi9TVkdT
TUlMRWxlbWVudC5jcHAgXApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS52Y3By
b2ovV2ViQ29yZS52Y3Byb2ogYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnZjcHJvai9XZWJDb3Jl
LnZjcHJvagppbmRleCA3MmJmZTM4Li40NDVjYjAzIDEwMDc1NQotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9XZWJDb3JlLnZjcHJvai9XZWJDb3JlLnZjcHJvagorKysgYi9Tb3VyY2UvV2ViQ29yZS9XZWJD
b3JlLnZjcHJvai9XZWJDb3JlLnZjcHJvagpAQCAtNDE2MTEsNiArNDE2MTEsMTE4IEBACiAJCQkJ
CT4KIAkJCQk8L0ZpbGU+CiAJCQkJPEZpbGUKKwkJCQkJUmVsYXRpdmVQYXRoPSIuLlxyZW5kZXJp
bmdcc3ZnXFJlbmRlclNWR1JlY3QuY3BwIgorCQkJCQk+CisJCQkJCTxGaWxlQ29uZmlndXJhdGlv
bgorCQkJCQkJTmFtZT0iRGVidWd8V2luMzIiCisJCQkJCQlFeGNsdWRlZEZyb21CdWlsZD0idHJ1
ZSIKKwkJCQkJCT4KKwkJCQkJCTxUb29sCisJCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIK
KwkJCQkJCS8+CisJCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+CisJCQkJCTxGaWxlQ29uZmlndXJh
dGlvbgorCQkJCQkJTmFtZT0iUmVsZWFzZXxXaW4zMiIKKwkJCQkJCUV4Y2x1ZGVkRnJvbUJ1aWxk
PSJ0cnVlIgorCQkJCQkJPgorCQkJCQkJPFRvb2wKKwkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJU
b29sIgorCQkJCQkJLz4KKwkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4KKwkJCQkJPEZpbGVDb25m
aWd1cmF0aW9uCisJCQkJCQlOYW1lPSJEZWJ1Z19DYWlyb19DRkxpdGV8V2luMzIiCisJCQkJCQlF
eGNsdWRlZEZyb21CdWlsZD0idHJ1ZSIKKwkJCQkJCT4KKwkJCQkJCTxUb29sCisJCQkJCQkJTmFt
ZT0iVkNDTENvbXBpbGVyVG9vbCIKKwkJCQkJCS8+CisJCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+
CisJCQkJCTxGaWxlQ29uZmlndXJhdGlvbgorCQkJCQkJTmFtZT0iUmVsZWFzZV9DYWlyb19DRkxp
dGV8V2luMzIiCisJCQkJCQlFeGNsdWRlZEZyb21CdWlsZD0idHJ1ZSIKKwkJCQkJCT4KKwkJCQkJ
CTxUb29sCisJCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIKKwkJCQkJCS8+CisJCQkJCTwv
RmlsZUNvbmZpZ3VyYXRpb24+CisJCQkJCTxGaWxlQ29uZmlndXJhdGlvbgorCQkJCQkJTmFtZT0i
RGVidWdfQWxsfFdpbjMyIgorCQkJCQkJRXhjbHVkZWRGcm9tQnVpbGQ9InRydWUiCisJCQkJCQk+
CisJCQkJCQk8VG9vbAorCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiCisJCQkJCQkvPgor
CQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPgorCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24KKwkJCQkJ
CU5hbWU9IlByb2R1Y3Rpb258V2luMzIiCisJCQkJCQlFeGNsdWRlZEZyb21CdWlsZD0idHJ1ZSIK
KwkJCQkJCT4KKwkJCQkJCTxUb29sCisJCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIKKwkJ
CQkJCS8+CisJCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+CisJCQkJPC9GaWxlPgorCQkJCTxGaWxl
CisJCQkJCVJlbGF0aXZlUGF0aD0iLi5ccmVuZGVyaW5nXHN2Z1xSZW5kZXJTVkdSZWN0LmgiCisJ
CQkJCT4KKwkJCQk8L0ZpbGU+CisJCQkJPEZpbGUKKwkJCQkJUmVsYXRpdmVQYXRoPSIuLlxyZW5k
ZXJpbmdcc3ZnXFJlbmRlclNWR1NoYXBlLmNwcCIKKwkJCQkJPgorCQkJCQk8RmlsZUNvbmZpZ3Vy
YXRpb24KKwkJCQkJCU5hbWU9IkRlYnVnfFdpbjMyIgorCQkJCQkJRXhjbHVkZWRGcm9tQnVpbGQ9
InRydWUiCisJCQkJCQk+CisJCQkJCQk8VG9vbAorCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRv
b2wiCisJCQkJCQkvPgorCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPgorCQkJCQk8RmlsZUNvbmZp
Z3VyYXRpb24KKwkJCQkJCU5hbWU9IlJlbGVhc2V8V2luMzIiCisJCQkJCQlFeGNsdWRlZEZyb21C
dWlsZD0idHJ1ZSIKKwkJCQkJCT4KKwkJCQkJCTxUb29sCisJCQkJCQkJTmFtZT0iVkNDTENvbXBp
bGVyVG9vbCIKKwkJCQkJCS8+CisJCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+CisJCQkJCTxGaWxl
Q29uZmlndXJhdGlvbgorCQkJCQkJTmFtZT0iRGVidWdfQ2Fpcm9fQ0ZMaXRlfFdpbjMyIgorCQkJ
CQkJRXhjbHVkZWRGcm9tQnVpbGQ9InRydWUiCisJCQkJCQk+CisJCQkJCQk8VG9vbAorCQkJCQkJ
CU5hbWU9IlZDQ0xDb21waWxlclRvb2wiCisJCQkJCQkvPgorCQkJCQk8L0ZpbGVDb25maWd1cmF0
aW9uPgorCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24KKwkJCQkJCU5hbWU9IlJlbGVhc2VfQ2Fpcm9f
Q0ZMaXRlfFdpbjMyIgorCQkJCQkJRXhjbHVkZWRGcm9tQnVpbGQ9InRydWUiCisJCQkJCQk+CisJ
CQkJCQk8VG9vbAorCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiCisJCQkJCQkvPgorCQkJ
CQk8L0ZpbGVDb25maWd1cmF0aW9uPgorCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24KKwkJCQkJCU5h
bWU9IkRlYnVnX0FsbHxXaW4zMiIKKwkJCQkJCUV4Y2x1ZGVkRnJvbUJ1aWxkPSJ0cnVlIgorCQkJ
CQkJPgorCQkJCQkJPFRvb2wKKwkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIgorCQkJCQkJ
Lz4KKwkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4KKwkJCQkJPEZpbGVDb25maWd1cmF0aW9uCisJ
CQkJCQlOYW1lPSJQcm9kdWN0aW9ufFdpbjMyIgorCQkJCQkJRXhjbHVkZWRGcm9tQnVpbGQ9InRy
dWUiCisJCQkJCQk+CisJCQkJCQk8VG9vbAorCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wi
CisJCQkJCQkvPgorCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPgorCQkJCTwvRmlsZT4KKwkJCQk8
RmlsZQorCQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXHJlbmRlcmluZ1xzdmdcUmVuZGVyU1ZHU2hhcGUu
aCIKKwkJCQkJPgorCQkJCTwvRmlsZT4KKwkJCQk8RmlsZQogCQkJCQlSZWxhdGl2ZVBhdGg9Ii4u
XHJlbmRlcmluZ1xzdmdcUmVuZGVyU1ZHVGV4dC5jcHAiCiAJCQkJCT4KIAkJCQkJPEZpbGVDb25m
aWd1cmF0aW9uCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9w
cm9qZWN0LnBieHByb2ogYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0
LnBieHByb2oKaW5kZXggMjQ3NGQ1MS4uNDAyOWMyMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagpAQCAtOTkwNywxMCArOTkwNywxNCBA
QAogCQk5RkZFM0VBMzExQjVBNDM5MDAzNzg3NEUgLyogSlNNZW1vcnlJbmZvLmNwcCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpTTWVtb3J5SW5mby5jcHA7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCTlGRkUzRUE0MTFCNUE0MzkwMDM3ODc0RSAvKiBKU01lbW9y
eUluZm8uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSlNNZW1vcnlJbmZvLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUEwMEI3MjE5MTFERTY0MjcwMDhBQjlGRiAv
KiBDaGVja2VkSW50LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IENoZWNrZWRJ
bnQuaDsgcGF0aCA9IGNhbnZhcy9DaGVja2VkSW50Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CisJCUExMzA5QjY0MTNGMThEOTMwMEM4QTA2NSAvKiBSZW5kZXJTVkdSZWN0LmNwcCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IFJlbmRlclNWR1JlY3QuY3BwOyBwYXRo
ID0gcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZWN0LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKKwkJQTEzMDlCNjgxM0YxOERBMTAwQzhBMDY1IC8qIFJlbmRlclNWR1JlY3QuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gUmVuZGVyU1ZHUmVjdC5oOyBwYXRoID0gcmVu
ZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZWN0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CUExMzZBMDBBMTEzNERCRDIwMENDOEQ1MCAvKiBYTUxIdHRwUmVxdWVzdFByb2dyZXNzRXZlbnRU
aHJvdHRsZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBYTUxIdHRw
UmVxdWVzdFByb2dyZXNzRXZlbnRUaHJvdHRsZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCUExMzZBMDBCMTEzNERCRDIwMENDOEQ1MCAvKiBYTUxIdHRwUmVxdWVzdFByb2dyZXNz
RXZlbnRUaHJvdHRsZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBYTUxIdHRw
UmVxdWVzdFByb2dyZXNzRXZlbnRUaHJvdHRsZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQlBMTdDODEyMDBGMkE1Q0Y3MDA1REFBRUIgLyogSFRNTEVsZW1lbnRGYWN0b3J5LmNwcCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEhUTUxFbGVtZW50RmFjdG9yeS5j
cHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUExN0M4MTIxMEYyQTVDRjcwMDVEQUFF
QiAvKiBIVE1MRWxlbWVudEZhY3RvcnkuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gSFRNTEVsZW1lbnRGYWN0b3J5Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUEx
Qjc3OEMzMTQwM0E4RDQwMEQ5NjM5RiAvKiBSZW5kZXJTVkdTaGFwZS5jcHAgKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBSZW5kZXJTVkdTaGFwZS5jcHA7IHBhdGggPSByZW5k
ZXJpbmcvc3ZnL1JlbmRlclNWR1NoYXBlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
KwkJQTFCNzc4QzcxNDAzQThFNjAwRDk2MzlGIC8qIFJlbmRlclNWR1NoYXBlLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IFJlbmRlclNWR1NoYXBlLmg7IHBhdGggPSByZW5kZXJp
bmcvc3ZnL1JlbmRlclNWR1NoYXBlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUEx
QzdGQUExMTMzQTVEMzUwMEQ2NzMyRCAvKiBKU1hQYXRoUmVzdWx0Q3VzdG9tLmNwcCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpTWFBhdGhSZXN1bHRDdXN0b20uY3BwOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlBMUUxMTU0MzEzMDE1QzNEMDA1NEFDOEMgLyog
RGlzdGFudExpZ2h0U291cmNlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFt
ZSA9IERpc3RhbnRMaWdodFNvdXJjZS5jcHA7IHBhdGggPSBmaWx0ZXJzL0Rpc3RhbnRMaWdodFNv
dXJjZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUExRTExNTQ1MTMwMTVDNEUw
MDU0QUM4QyAvKiBQb2ludExpZ2h0U291cmNlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3Bw
LmNwcDsgbmFtZSA9IFBvaW50TGlnaHRTb3VyY2UuY3BwOyBwYXRoID0gZmlsdGVycy9Qb2ludExp
Z2h0U291cmNlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTEyOTUwLDYgKzEy
OTU0LDEwIEBACiAJCTA4NjdENjkxRkU4NDAyOEZDMDJBQUMwNyAvKiBXZWJLaXQgKi8gPSB7CiAJ
CQlpc2EgPSBQQlhHcm91cDsKIAkJCWNoaWxkcmVuID0gKAorCQkJCUExQjc3OEM3MTQwM0E4RTYw
MEQ5NjM5RiAvKiBSZW5kZXJTVkdTaGFwZS5oICovLAorCQkJCUExQjc3OEMzMTQwM0E4RDQwMEQ5
NjM5RiAvKiBSZW5kZXJTVkdTaGFwZS5jcHAgKi8sCisJCQkJQTEzMDlCNjgxM0YxOERBMTAwQzhB
MDY1IC8qIFJlbmRlclNWR1JlY3QuaCAqLywKKwkJCQlBMTMwOUI2NDEzRjE4RDkzMDBDOEEwNjUg
LyogUmVuZGVyU1ZHUmVjdC5jcHAgKi8sCiAJCQkJNjVDOTdBRjIwOEVBOTA4ODAwQUNEMjczIC8q
IGNvbmZpZy5oICovLAogCQkJCUVERUM5ODAyMEFFRDdFMTcwMDU5MTM3RiAvKiBXZWJDb3JlUHJl
Zml4LmggKi8sCiAJCQkJOTMwNzA2MTMwOUUwQ0E4MjAwQjE3RkU0IC8qIERlcml2ZWRTb3VyY2Vz
Lm1ha2UgKi8sCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyT2Jq
ZWN0LmggYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyT2JqZWN0LmgKaW5kZXggYmYx
MDQ2Ni4uNTUyNGRjMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
ck9iamVjdC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJPYmplY3QuaApA
QCAtMzU0LDYgKzM1NCw4IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIGJvb2wgaXNTVkdHcmFkaWVu
dFN0b3AoKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQogICAgIHZpcnR1YWwgYm9vbCBpc1NWR0hp
ZGRlbkNvbnRhaW5lcigpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CiAgICAgdmlydHVhbCBib29s
IGlzU1ZHUGF0aCgpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CisgICAgdmlydHVhbCBib29sIGlz
U1ZHUmVjdCgpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CisgICAgdmlydHVhbCBib29sIGlzU1ZH
U2hhcGUoKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQogICAgIHZpcnR1YWwgYm9vbCBpc1NWR1Rl
eHQoKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQogICAgIHZpcnR1YWwgYm9vbCBpc1NWR1RleHRQ
YXRoKCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KICAgICB2aXJ0dWFsIGJvb2wgaXNTVkdJbmxp
bmUoKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL1JlbmRlclRyZWVBc1RleHQuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlclRyZWVBc1RleHQuY3BwCmluZGV4IDViMjliYjUuLjYxZmFmZTIgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUcmVlQXNUZXh0LmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVHJlZUFzVGV4dC5jcHAKQEAgLTUyMCw4ICs1MjAs
OCBAQCBzdGF0aWMgdm9pZCB3cml0ZVRleHRSdW4oVGV4dFN0cmVhbSYgdHMsIGNvbnN0IFJlbmRl
clRleHQmIG8sIGNvbnN0IElubGluZVRleHRCbwogdm9pZCB3cml0ZShUZXh0U3RyZWFtJiB0cywg
Y29uc3QgUmVuZGVyT2JqZWN0JiBvLCBpbnQgaW5kZW50LCBSZW5kZXJBc1RleHRCZWhhdmlvciBi
ZWhhdmlvcikKIHsKICNpZiBFTkFCTEUoU1ZHKQotICAgIGlmIChvLmlzU1ZHUGF0aCgpKSB7Ci0g
ICAgICAgIHdyaXRlKHRzLCAqdG9SZW5kZXJTVkdQYXRoKCZvKSwgaW5kZW50KTsKKyAgICBpZiAo
by5pc1NWR1NoYXBlKCkpIHsKKyAgICAgICAgd3JpdGUodHMsICp0b1JlbmRlclNWR1NoYXBlKCZv
KSwgaW5kZW50KTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICBpZiAoby5pc1NWR0dyYWRp
ZW50U3RvcCgpKSB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1Jl
bmRlclNWR0FsbEluT25lLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVy
U1ZHQWxsSW5PbmUuY3BwCmluZGV4IDllYTNiZTUuLjI5NjkwMDggMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHQWxsSW5PbmUuY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHQWxsSW5PbmUuY3BwCkBAIC0zNSw2ICsz
NSw3IEBACiAjaW5jbHVkZSAiUmVuZGVyU1ZHSW5saW5lVGV4dC5jcHAiCiAjaW5jbHVkZSAiUmVu
ZGVyU1ZHTW9kZWxPYmplY3QuY3BwIgogI2luY2x1ZGUgIlJlbmRlclNWR1BhdGguY3BwIgorI2lu
Y2x1ZGUgIlJlbmRlclNWR1JlY3QuY3BwIgogI2luY2x1ZGUgIlJlbmRlclNWR1Jlc291cmNlLmNw
cCIKICNpbmNsdWRlICJSZW5kZXJTVkdSZXNvdXJjZUNsaXBwZXIuY3BwIgogI2luY2x1ZGUgIlJl
bmRlclNWR1Jlc291cmNlQ29udGFpbmVyLmNwcCIKQEAgLTQ5LDYgKzUwLDcgQEAKICNpbmNsdWRl
ICJSZW5kZXJTVkdSZXNvdXJjZVNvbGlkQ29sb3IuY3BwIgogI2luY2x1ZGUgIlJlbmRlclNWR1Jv
b3QuY3BwIgogI2luY2x1ZGUgIlJlbmRlclNWR1NoYWRvd1RyZWVSb290Q29udGFpbmVyLmNwcCIK
KyNpbmNsdWRlICJSZW5kZXJTVkdTaGFwZS5jcHAiCiAjaW5jbHVkZSAiUmVuZGVyU1ZHVFNwYW4u
Y3BwIgogI2luY2x1ZGUgIlJlbmRlclNWR1RleHQuY3BwIgogI2luY2x1ZGUgIlJlbmRlclNWR1Rl
eHRQYXRoLmNwcCIKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVu
ZGVyU1ZHUGF0aC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Bh
dGguY3BwCmluZGV4IGEwMzkxZjcuLmVkYWQ0MzkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUGF0aC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL3N2Zy9SZW5kZXJTVkdQYXRoLmNwcApAQCAtNiw2ICs2LDggQEAKICAqIENvcHlyaWdo
dCAoQykgMjAwOSBEaXJrIFNjaHVsemUgPGtyaXRAd2Via2l0Lm9yZz4KICAqIENvcHlyaWdodCAo
QykgUmVzZWFyY2ggSW4gTW90aW9uIExpbWl0ZWQgMjAxMC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
ICAqIENvcHlyaWdodCAoQykgMjAwOSBKZWZmIFNjaGlsbGVyIDxjb2RlZHJlYWRAZ21haWwuY29t
PgorICogQ29weXJpZ2h0IChDKSAyMDExIFJlbmF0YSBIb2RvdmFuIDxyZW5pQHdlYmtpdC5vcmc+
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgVW5pdmVyc2l0eSBvZiBTemVnZWQKICAqCiAgKiBUaGlz
IGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29y
CiAgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFs
IFB1YmxpYwpAQCAtMjgsNDkgKzMwLDEzIEBACiAjaWYgRU5BQkxFKFNWRykKICNpbmNsdWRlICJS
ZW5kZXJTVkdQYXRoLmgiCiAKLSNpbmNsdWRlICJGbG9hdFBvaW50LmgiCi0jaW5jbHVkZSAiRmxv
YXRRdWFkLmgiCi0jaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCi0jaW5jbHVkZSAiSGl0VGVz
dFJlcXVlc3QuaCIKLSNpbmNsdWRlICJQb2ludGVyRXZlbnRzSGl0UnVsZXMuaCIKLSNpbmNsdWRl
ICJSZW5kZXJTVkdDb250YWluZXIuaCIKLSNpbmNsdWRlICJSZW5kZXJTVkdSZXNvdXJjZU1hcmtl
ci5oIgotI2luY2x1ZGUgIlJlbmRlclNWR1Jlc291cmNlU29saWRDb2xvci5oIgotI2luY2x1ZGUg
IlNWR1JlbmRlclN1cHBvcnQuaCIKLSNpbmNsdWRlICJTVkdSZXNvdXJjZXMuaCIKKyNpbmNsdWRl
ICJTVkdQYXRoRWxlbWVudC5oIgogI2luY2x1ZGUgIlNWR1N0eWxlZFRyYW5zZm9ybWFibGVFbGVt
ZW50LmgiCi0jaW5jbHVkZSAiU1ZHVHJhbnNmb3JtTGlzdC5oIgotI2luY2x1ZGUgIlNWR1VSSVJl
ZmVyZW5jZS5oIgotI2luY2x1ZGUgIlN0cm9rZVN0eWxlQXBwbGllci5oIgotI2luY2x1ZGUgPHd0
Zi9NYXRoRXh0cmFzLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotY2xhc3MgQm91bmRpbmdS
ZWN0U3Ryb2tlU3R5bGVBcHBsaWVyIDogcHVibGljIFN0cm9rZVN0eWxlQXBwbGllciB7Ci1wdWJs
aWM6Ci0gICAgQm91bmRpbmdSZWN0U3Ryb2tlU3R5bGVBcHBsaWVyKGNvbnN0IFJlbmRlck9iamVj
dCogb2JqZWN0LCBSZW5kZXJTdHlsZSogc3R5bGUpCi0gICAgICAgIDogbV9vYmplY3Qob2JqZWN0
KQotICAgICAgICAsIG1fc3R5bGUoc3R5bGUpCi0gICAgewotICAgICAgICBBU1NFUlQoc3R5bGUp
OwotICAgICAgICBBU1NFUlQob2JqZWN0KTsKLSAgICB9Ci0KLSAgICB2b2lkIHN0cm9rZVN0eWxl
KEdyYXBoaWNzQ29udGV4dCogZ2MpCi0gICAgewotICAgICAgICBTVkdSZW5kZXJTdXBwb3J0Ojph
cHBseVN0cm9rZVN0eWxlVG9Db250ZXh0KGdjLCBtX3N0eWxlLCBtX29iamVjdCk7Ci0gICAgfQot
Ci1wcml2YXRlOgotICAgIGNvbnN0IFJlbmRlck9iamVjdCogbV9vYmplY3Q7Ci0gICAgUmVuZGVy
U3R5bGUqIG1fc3R5bGU7Ci19OwotCiBSZW5kZXJTVkdQYXRoOjpSZW5kZXJTVkdQYXRoKFNWR1N0
eWxlZFRyYW5zZm9ybWFibGVFbGVtZW50KiBub2RlKQotICAgIDogUmVuZGVyU1ZHTW9kZWxPYmpl
Y3Qobm9kZSkKLSAgICAsIG1fbmVlZHNCb3VuZGFyaWVzVXBkYXRlKGZhbHNlKSAvLyBkZWZhdWx0
IGlzIGZhbHNlLCB0aGUgY2FjaGVkIHJlY3RzIGFyZSBlbXB0eSBmcm9tIHRoZSBiZWdpbm5pbmcK
LSAgICAsIG1fbmVlZHNQYXRoVXBkYXRlKHRydWUpIC8vIGRlZmF1bHQgaXMgdHJ1ZSwgc28gd2Ug
Z3JhYiBhIFBhdGggb2JqZWN0IG9uY2UgZnJvbSBTVkdTdHlsZWRUcmFuc2Zvcm1hYmxlRWxlbWVu
dAotICAgICwgbV9uZWVkc1RyYW5zZm9ybVVwZGF0ZSh0cnVlKSAvLyBkZWZhdWx0IGlzIHRydWUs
IHNvIHdlIGdyYWIgYSBBZmZpbmVUcmFuc2Zvcm0gb2JqZWN0IG9uY2UgZnJvbSBTVkdTdHlsZWRU
cmFuc2Zvcm1hYmxlRWxlbWVudAorICAgIDogUmVuZGVyU1ZHU2hhcGUobm9kZSkKIHsKIH0KIApA
QCAtNzgsMzE2ICs0NCw2IEBAIFJlbmRlclNWR1BhdGg6On5SZW5kZXJTVkdQYXRoKCkKIHsKIH0K
IAotYm9vbCBSZW5kZXJTVkdQYXRoOjpmaWxsQ29udGFpbnMoY29uc3QgRmxvYXRQb2ludCYgcG9p
bnQsIGJvb2wgcmVxdWlyZXNGaWxsLCBXaW5kUnVsZSBmaWxsUnVsZSkKLXsKLSAgICBpZiAoIW1f
ZmlsbEJvdW5kaW5nQm94LmNvbnRhaW5zKHBvaW50KSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwot
Ci0gICAgQ29sb3IgZmFsbGJhY2tDb2xvcjsKLSAgICBpZiAocmVxdWlyZXNGaWxsICYmICFSZW5k
ZXJTVkdSZXNvdXJjZTo6ZmlsbFBhaW50aW5nUmVzb3VyY2UodGhpcywgc3R5bGUoKSwgZmFsbGJh
Y2tDb2xvcikpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIHJldHVybiBtX3BhdGguY29u
dGFpbnMocG9pbnQsIGZpbGxSdWxlKTsKLX0KLQotYm9vbCBSZW5kZXJTVkdQYXRoOjpzdHJva2VD
b250YWlucyhjb25zdCBGbG9hdFBvaW50JiBwb2ludCwgYm9vbCByZXF1aXJlc1N0cm9rZSkKLXsK
LSAgICBpZiAoIW1fc3Ryb2tlQW5kTWFya2VyQm91bmRpbmdCb3guY29udGFpbnMocG9pbnQpKQot
ICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBDb2xvciBmYWxsYmFja0NvbG9yOwotICAgIGlm
IChyZXF1aXJlc1N0cm9rZSAmJiAhUmVuZGVyU1ZHUmVzb3VyY2U6OnN0cm9rZVBhaW50aW5nUmVz
b3VyY2UodGhpcywgc3R5bGUoKSwgZmFsbGJhY2tDb2xvcikpCi0gICAgICAgIHJldHVybiBmYWxz
ZTsKLQotICAgIGlmIChzaG91bGRTdHJva2VaZXJvTGVuZ3RoU3VicGF0aCgpKQotICAgICAgICBy
ZXR1cm4gemVyb0xlbmd0aFN1YnBhdGhSZWN0KCkuY29udGFpbnMocG9pbnQpOwotCi0gICAgQm91
bmRpbmdSZWN0U3Ryb2tlU3R5bGVBcHBsaWVyIHN0cm9rZVN0eWxlKHRoaXMsIHN0eWxlKCkpOwot
ICAgIHJldHVybiBtX3BhdGguc3Ryb2tlQ29udGFpbnMoJnN0cm9rZVN0eWxlLCBwb2ludCk7Ci19
Ci0KLXZvaWQgUmVuZGVyU1ZHUGF0aDo6bGF5b3V0KCkKLXsKLSAgICBMYXlvdXRSZXBhaW50ZXIg
cmVwYWludGVyKCp0aGlzLCBjaGVja0ZvclJlcGFpbnREdXJpbmdMYXlvdXQoKSAmJiBzZWxmTmVl
ZHNMYXlvdXQoKSk7Ci0gICAgU1ZHU3R5bGVkVHJhbnNmb3JtYWJsZUVsZW1lbnQqIGVsZW1lbnQg
PSBzdGF0aWNfY2FzdDxTVkdTdHlsZWRUcmFuc2Zvcm1hYmxlRWxlbWVudCo+KG5vZGUoKSk7Ci0K
LSAgICBib29sIHVwZGF0ZUNhY2hlZEJvdW5kYXJpZXNJblBhcmVudHMgPSBmYWxzZTsKLQotICAg
IGJvb2wgbmVlZHNQYXRoVXBkYXRlID0gbV9uZWVkc1BhdGhVcGRhdGU7Ci0gICAgaWYgKG5lZWRz
UGF0aFVwZGF0ZSkgewotICAgICAgICBtX3BhdGguY2xlYXIoKTsKLSAgICAgICAgZWxlbWVudC0+
dG9QYXRoRGF0YShtX3BhdGgpOwotICAgICAgICBtX25lZWRzUGF0aFVwZGF0ZSA9IGZhbHNlOwot
ICAgICAgICB1cGRhdGVDYWNoZWRCb3VuZGFyaWVzSW5QYXJlbnRzID0gdHJ1ZTsKLSAgICB9Ci0K
LSAgICBpZiAobV9uZWVkc1RyYW5zZm9ybVVwZGF0ZSkgewotICAgICAgICBtX2xvY2FsVHJhbnNm
b3JtID0gZWxlbWVudC0+YW5pbWF0ZWRMb2NhbFRyYW5zZm9ybSgpOwotICAgICAgICBtX25lZWRz
VHJhbnNmb3JtVXBkYXRlID0gZmFsc2U7Ci0gICAgICAgIHVwZGF0ZUNhY2hlZEJvdW5kYXJpZXNJ
blBhcmVudHMgPSB0cnVlOwotICAgIH0KLQotICAgIGlmIChtX25lZWRzQm91bmRhcmllc1VwZGF0
ZSkKLSAgICAgICAgdXBkYXRlQ2FjaGVkQm91bmRhcmllc0luUGFyZW50cyA9IHRydWU7Ci0KLSAg
ICAvLyBJbnZhbGlkYXRlIGFsbCByZXNvdXJjZXMgb2YgdGhpcyBjbGllbnQgaWYgb3VyIGxheW91
dCBjaGFuZ2VkLgotICAgIGlmIChtX2V2ZXJIYWRMYXlvdXQgJiYgc2VsZk5lZWRzTGF5b3V0KCkp
IHsKLSAgICAgICAgU1ZHUmVzb3VyY2VzQ2FjaGU6OmNsaWVudExheW91dENoYW5nZWQodGhpcyk7
Ci0gICAgICAgIG1fbWFya2VyTGF5b3V0SW5mby5jbGVhcigpOwotICAgIH0KLQotICAgIC8vIEF0
IHRoaXMgcG9pbnQgTGF5b3V0UmVwYWludGVyIGFscmVhZHkgZ3JhYmJlZCB0aGUgb2xkIGJvdW5k
cywKLSAgICAvLyByZWNhbGN1bGF0ZSB0aGVtIG5vdyBzbyByZXBhaW50QWZ0ZXJMYXlvdXQoKSB1
c2VzIHRoZSBuZXcgYm91bmRzLgotICAgIGlmIChuZWVkc1BhdGhVcGRhdGUgfHwgbV9uZWVkc0Jv
dW5kYXJpZXNVcGRhdGUpIHsKLSAgICAgICAgdXBkYXRlQ2FjaGVkQm91bmRhcmllcygpOwotICAg
ICAgICBtX25lZWRzQm91bmRhcmllc1VwZGF0ZSA9IGZhbHNlOwotICAgIH0KLQotICAgIC8vIElm
IG91ciBib3VuZHMgY2hhbmdlZCwgbm90aWZ5IHRoZSBwYXJlbnRzLgotICAgIGlmICh1cGRhdGVD
YWNoZWRCb3VuZGFyaWVzSW5QYXJlbnRzKQotICAgICAgICBSZW5kZXJTVkdNb2RlbE9iamVjdDo6
c2V0TmVlZHNCb3VuZGFyaWVzVXBkYXRlKCk7Ci0KLSAgICByZXBhaW50ZXIucmVwYWludEFmdGVy
TGF5b3V0KCk7Ci0gICAgc2V0TmVlZHNMYXlvdXQoZmFsc2UpOwotfQotCi1ib29sIFJlbmRlclNW
R1BhdGg6OnNob3VsZFN0cm9rZVplcm9MZW5ndGhTdWJwYXRoKCkgY29uc3QKLXsKLSAgICAvLyBT
cGVjKDExLjQpOiBBbnkgemVybyBsZW5ndGggc3VicGF0aCBzaGFsbCBub3QgYmUgc3Ryb2tlZCBp
ZiB0aGUg4oCYc3Ryb2tlLWxpbmVjYXDigJkgcHJvcGVydHkgaGFzIGEgdmFsdWUgb2YgYnV0dAot
ICAgIC8vIGJ1dCBzaGFsbCBiZSBzdHJva2VkIGlmIHRoZSDigJhzdHJva2UtbGluZWNhcOKAmSBw
cm9wZXJ0eSBoYXMgYSB2YWx1ZSBvZiByb3VuZCBvciBzcXVhcmUKLSAgICByZXR1cm4gc3R5bGUo
KS0+c3ZnU3R5bGUoKS0+aGFzU3Ryb2tlKCkgJiYgc3R5bGUoKS0+c3ZnU3R5bGUoKS0+Y2FwU3R5
bGUoKSAhPSBCdXR0Q2FwICYmICFtX2ZpbGxCb3VuZGluZ0JveC53aWR0aCgpICYmICFtX2ZpbGxC
b3VuZGluZ0JveC5oZWlnaHQoKTsKLX0KLQotRmxvYXRSZWN0IFJlbmRlclNWR1BhdGg6Onplcm9M
ZW5ndGhTdWJwYXRoUmVjdCgpIGNvbnN0Ci17Ci0gICAgU1ZHRWxlbWVudCogc3ZnRWxlbWVudCA9
IHN0YXRpY19jYXN0PFNWR0VsZW1lbnQqPihub2RlKCkpOwotICAgIGZsb2F0IHN0cm9rZVdpZHRo
ID0gc3R5bGUoKS0+c3ZnU3R5bGUoKS0+c3Ryb2tlV2lkdGgoKS52YWx1ZShzdmdFbGVtZW50KTsK
LSAgICByZXR1cm4gRmxvYXRSZWN0KG1fZmlsbEJvdW5kaW5nQm94LngoKSAtIHN0cm9rZVdpZHRo
IC8gMiwgbV9maWxsQm91bmRpbmdCb3gueSgpIC0gc3Ryb2tlV2lkdGggLyAyLCBzdHJva2VXaWR0
aCwgc3Ryb2tlV2lkdGgpOwotfQotCi12b2lkIFJlbmRlclNWR1BhdGg6OnNldHVwU3F1YXJlQ2Fw
UGF0aChQYXRoKiYgdXNlUGF0aCwgaW50JiBhcHBseU1vZGUpCi17Ci0gICAgLy8gU3BlYygxMS40
KTogQW55IHplcm8gbGVuZ3RoIHN1YnBhdGggc2hhbGwgbm90IGJlIHN0cm9rZWQgaWYgdGhlIOKA
mHN0cm9rZS1saW5lY2Fw4oCZIHByb3BlcnR5IGhhcyBhIHZhbHVlIG9mIGJ1dHQKLSAgICAvLyBi
dXQgc2hhbGwgYmUgc3Ryb2tlZCBpZiB0aGUg4oCYc3Ryb2tlLWxpbmVjYXDigJkgcHJvcGVydHkg
aGFzIGEgdmFsdWUgb2Ygcm91bmQgb3Igc3F1YXJlCi0gICAgREVGSU5FX1NUQVRJQ19MT0NBTChQ
YXRoLCB0ZW1wUGF0aCwgKCkpOwotCi0gICAgYXBwbHlNb2RlID0gQXBwbHlUb0ZpbGxNb2RlOwot
ICAgIHVzZVBhdGggPSAmdGVtcFBhdGg7Ci0gICAgdXNlUGF0aC0+Y2xlYXIoKTsKLSAgICBpZiAo
c3R5bGUoKS0+c3ZnU3R5bGUoKS0+Y2FwU3R5bGUoKSA9PSBTcXVhcmVDYXApCi0gICAgICAgIHVz
ZVBhdGgtPmFkZFJlY3QoemVyb0xlbmd0aFN1YnBhdGhSZWN0KCkpOwotICAgIGVsc2UKLSAgICAg
ICAgdXNlUGF0aC0+YWRkRWxsaXBzZSh6ZXJvTGVuZ3RoU3VicGF0aFJlY3QoKSk7Ci19Ci0KLWJv
b2wgUmVuZGVyU1ZHUGF0aDo6c2V0dXBOb25TY2FsaW5nU3Ryb2tlUGF0aChQYXRoKiYgdXNlUGF0
aCwgR3JhcGhpY3NDb250ZXh0U3RhdGVTYXZlciYgc3RhdGVTYXZlcikKLXsKLSAgICBERUZJTkVf
U1RBVElDX0xPQ0FMKFBhdGgsIHRlbXBQYXRoLCAoKSk7Ci0KLSAgICBTVkdTdHlsZWRUcmFuc2Zv
cm1hYmxlRWxlbWVudCogZWxlbWVudCA9IHN0YXRpY19jYXN0PFNWR1N0eWxlZFRyYW5zZm9ybWFi
bGVFbGVtZW50Kj4obm9kZSgpKTsKLSAgICBBZmZpbmVUcmFuc2Zvcm0gbm9uU2NhbGluZ1N0cm9r
ZVRyYW5zZm9ybSA9IGVsZW1lbnQtPmdldFNjcmVlbkNUTShTVkdMb2NhdGFibGU6OkRpc2FsbG93
U3R5bGVVcGRhdGUpOwotICAgIGlmICghbm9uU2NhbGluZ1N0cm9rZVRyYW5zZm9ybS5pc0ludmVy
dGlibGUoKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgdGVtcFBhdGggPSBtX3BhdGg7
Ci0gICAgdXNlUGF0aCA9ICZ0ZW1wUGF0aDsKLSAgICB0ZW1wUGF0aC50cmFuc2Zvcm0obm9uU2Nh
bGluZ1N0cm9rZVRyYW5zZm9ybSk7Ci0KLSAgICBzdGF0ZVNhdmVyLnNhdmUoKTsKLSAgICBzdGF0
ZVNhdmVyLmNvbnRleHQoKS0+Y29uY2F0Q1RNKG5vblNjYWxpbmdTdHJva2VUcmFuc2Zvcm0uaW52
ZXJzZSgpKTsKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotdm9pZCBSZW5kZXJTVkdQYXRoOjpmaWxs
QW5kU3Ryb2tlUGF0aChHcmFwaGljc0NvbnRleHQqIGNvbnRleHQpCi17Ci0gICAgUmVuZGVyU3R5
bGUqIHN0eWxlID0gdGhpcy0+c3R5bGUoKTsKLQotICAgIENvbG9yIGZhbGxiYWNrQ29sb3I7Ci0g
ICAgaWYgKFJlbmRlclNWR1Jlc291cmNlKiBmaWxsUGFpbnRpbmdSZXNvdXJjZSA9IFJlbmRlclNW
R1Jlc291cmNlOjpmaWxsUGFpbnRpbmdSZXNvdXJjZSh0aGlzLCBzdHlsZSwgZmFsbGJhY2tDb2xv
cikpIHsKLSAgICAgICAgaWYgKGZpbGxQYWludGluZ1Jlc291cmNlLT5hcHBseVJlc291cmNlKHRo
aXMsIHN0eWxlLCBjb250ZXh0LCBBcHBseVRvRmlsbE1vZGUpKQotICAgICAgICAgICAgZmlsbFBh
aW50aW5nUmVzb3VyY2UtPnBvc3RBcHBseVJlc291cmNlKHRoaXMsIGNvbnRleHQsIEFwcGx5VG9G
aWxsTW9kZSwgJm1fcGF0aCk7Ci0gICAgICAgIGVsc2UgaWYgKGZhbGxiYWNrQ29sb3IuaXNWYWxp
ZCgpKSB7Ci0gICAgICAgICAgICBSZW5kZXJTVkdSZXNvdXJjZVNvbGlkQ29sb3IqIGZhbGxiYWNr
UmVzb3VyY2UgPSBSZW5kZXJTVkdSZXNvdXJjZTo6c2hhcmVkU29saWRQYWludGluZ1Jlc291cmNl
KCk7Ci0gICAgICAgICAgICBmYWxsYmFja1Jlc291cmNlLT5zZXRDb2xvcihmYWxsYmFja0NvbG9y
KTsKLSAgICAgICAgICAgIGlmIChmYWxsYmFja1Jlc291cmNlLT5hcHBseVJlc291cmNlKHRoaXMs
IHN0eWxlLCBjb250ZXh0LCBBcHBseVRvRmlsbE1vZGUpKQotICAgICAgICAgICAgICAgIGZhbGxi
YWNrUmVzb3VyY2UtPnBvc3RBcHBseVJlc291cmNlKHRoaXMsIGNvbnRleHQsIEFwcGx5VG9GaWxs
TW9kZSwgJm1fcGF0aCk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBmYWxsYmFja0NvbG9yID0g
Q29sb3IoKTsKLSAgICBSZW5kZXJTVkdSZXNvdXJjZSogc3Ryb2tlUGFpbnRpbmdSZXNvdXJjZSA9
IFJlbmRlclNWR1Jlc291cmNlOjpzdHJva2VQYWludGluZ1Jlc291cmNlKHRoaXMsIHN0eWxlLCBm
YWxsYmFja0NvbG9yKTsKLSAgICBpZiAoIXN0cm9rZVBhaW50aW5nUmVzb3VyY2UpCi0gICAgICAg
IHJldHVybjsKLQotICAgIFBhdGgqIHVzZVBhdGggPSAmbV9wYXRoOwotICAgIGludCBhcHBseU1v
ZGUgPSBBcHBseVRvU3Ryb2tlTW9kZTsKLQotICAgIGJvb2wgbm9uU2NhbGluZ1N0cm9rZSA9IHN0
eWxlLT5zdmdTdHlsZSgpLT52ZWN0b3JFZmZlY3QoKSA9PSBWRV9OT05fU0NBTElOR19TVFJPS0U7
Ci0KLSAgICBHcmFwaGljc0NvbnRleHRTdGF0ZVNhdmVyIHN0YXRlU2F2ZXIoKmNvbnRleHQsIGZh
bHNlKTsKLQotICAgIC8vIFNwZWMoMTEuNCk6IEFueSB6ZXJvIGxlbmd0aCBzdWJwYXRoIHNoYWxs
IG5vdCBiZSBzdHJva2VkIGlmIHRoZSDigJhzdHJva2UtbGluZWNhcOKAmSBwcm9wZXJ0eSBoYXMg
YSB2YWx1ZSBvZiBidXR0Ci0gICAgLy8gYnV0IHNoYWxsIGJlIHN0cm9rZWQgaWYgdGhlIOKAmHN0
cm9rZS1saW5lY2Fw4oCZIHByb3BlcnR5IGhhcyBhIHZhbHVlIG9mIHJvdW5kIG9yIHNxdWFyZQot
ICAgIC8vIEZJWE1FOiB0aGlzIGRvZXMgbm90IHdvcmsgZm9yIHplcm8tbGVuZ3RoIHN1YnBhdGhz
LCBvbmx5IHdoZW4gdG90YWwgcGF0aCBpcyB6ZXJvLWxlbmd0aAotICAgIGlmIChzaG91bGRTdHJv
a2VaZXJvTGVuZ3RoU3VicGF0aCgpKQotICAgICAgICBzZXR1cFNxdWFyZUNhcFBhdGgodXNlUGF0
aCwgYXBwbHlNb2RlKTsKLSAgICBlbHNlIGlmIChub25TY2FsaW5nU3Ryb2tlKSB7Ci0gICAgICAg
aWYgKCFzZXR1cE5vblNjYWxpbmdTdHJva2VQYXRoKHVzZVBhdGgsIHN0YXRlU2F2ZXIpKQotICAg
ICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgaWYgKHN0cm9rZVBhaW50aW5nUmVzb3VyY2Ut
PmFwcGx5UmVzb3VyY2UodGhpcywgc3R5bGUsIGNvbnRleHQsIGFwcGx5TW9kZSkpCi0gICAgICAg
IHN0cm9rZVBhaW50aW5nUmVzb3VyY2UtPnBvc3RBcHBseVJlc291cmNlKHRoaXMsIGNvbnRleHQs
IGFwcGx5TW9kZSwgdXNlUGF0aCk7Ci0gICAgZWxzZSBpZiAoZmFsbGJhY2tDb2xvci5pc1ZhbGlk
KCkpIHsKLSAgICAgICAgUmVuZGVyU1ZHUmVzb3VyY2VTb2xpZENvbG9yKiBmYWxsYmFja1Jlc291
cmNlID0gUmVuZGVyU1ZHUmVzb3VyY2U6OnNoYXJlZFNvbGlkUGFpbnRpbmdSZXNvdXJjZSgpOwot
ICAgICAgICBmYWxsYmFja1Jlc291cmNlLT5zZXRDb2xvcihmYWxsYmFja0NvbG9yKTsKLSAgICAg
ICAgaWYgKGZhbGxiYWNrUmVzb3VyY2UtPmFwcGx5UmVzb3VyY2UodGhpcywgc3R5bGUsIGNvbnRl
eHQsIGFwcGx5TW9kZSkpCi0gICAgICAgICAgICBmYWxsYmFja1Jlc291cmNlLT5wb3N0QXBwbHlS
ZXNvdXJjZSh0aGlzLCBjb250ZXh0LCBhcHBseU1vZGUsIHVzZVBhdGgpOwotICAgIH0KLX0KLQot
dm9pZCBSZW5kZXJTVkdQYXRoOjpwYWludChQYWludEluZm8mIHBhaW50SW5mbywgY29uc3QgTGF5
b3V0UG9pbnQmKQotewotICAgIGlmIChwYWludEluZm8uY29udGV4dC0+cGFpbnRpbmdEaXNhYmxl
ZCgpIHx8IHN0eWxlKCktPnZpc2liaWxpdHkoKSA9PSBISURERU4gfHwgbV9wYXRoLmlzRW1wdHko
KSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgRmxvYXRSZWN0IGJvdW5kaW5nQm94ID0gcmVwYWlu
dFJlY3RJbkxvY2FsQ29vcmRpbmF0ZXMoKTsKLSAgICBpZiAoIVNWR1JlbmRlclN1cHBvcnQ6OnBh
aW50SW5mb0ludGVyc2VjdHNSZXBhaW50UmVjdChib3VuZGluZ0JveCwgbV9sb2NhbFRyYW5zZm9y
bSwgcGFpbnRJbmZvKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgUGFpbnRJbmZvIGNoaWxkUGFp
bnRJbmZvKHBhaW50SW5mbyk7Ci0gICAgYm9vbCBkcmF3c091dGxpbmUgPSBzdHlsZSgpLT5vdXRs
aW5lV2lkdGgoKSAmJiAoY2hpbGRQYWludEluZm8ucGhhc2UgPT0gUGFpbnRQaGFzZU91dGxpbmUg
fHwgY2hpbGRQYWludEluZm8ucGhhc2UgPT0gUGFpbnRQaGFzZVNlbGZPdXRsaW5lKTsKLSAgICBp
ZiAoZHJhd3NPdXRsaW5lIHx8IGNoaWxkUGFpbnRJbmZvLnBoYXNlID09IFBhaW50UGhhc2VGb3Jl
Z3JvdW5kKSB7Ci0gICAgICAgIEdyYXBoaWNzQ29udGV4dFN0YXRlU2F2ZXIgc3RhdGVTYXZlcigq
Y2hpbGRQYWludEluZm8uY29udGV4dCk7Ci0gICAgICAgIGNoaWxkUGFpbnRJbmZvLmFwcGx5VHJh
bnNmb3JtKG1fbG9jYWxUcmFuc2Zvcm0pOwotCi0gICAgICAgIGlmIChjaGlsZFBhaW50SW5mby5w
aGFzZSA9PSBQYWludFBoYXNlRm9yZWdyb3VuZCkgewotICAgICAgICAgICAgUGFpbnRJbmZvIHNh
dmVkSW5mbyhjaGlsZFBhaW50SW5mbyk7Ci0KLSAgICAgICAgICAgIGlmIChTVkdSZW5kZXJTdXBw
b3J0OjpwcmVwYXJlVG9SZW5kZXJTVkdDb250ZW50KHRoaXMsIGNoaWxkUGFpbnRJbmZvKSkgewot
ICAgICAgICAgICAgICAgIGNvbnN0IFNWR1JlbmRlclN0eWxlKiBzdmdTdHlsZSA9IHN0eWxlKCkt
PnN2Z1N0eWxlKCk7Ci0gICAgICAgICAgICAgICAgaWYgKHN2Z1N0eWxlLT5zaGFwZVJlbmRlcmlu
ZygpID09IFNSX0NSSVNQRURHRVMpCi0gICAgICAgICAgICAgICAgICAgIGNoaWxkUGFpbnRJbmZv
LmNvbnRleHQtPnNldFNob3VsZEFudGlhbGlhcyhmYWxzZSk7Ci0KLSAgICAgICAgICAgICAgICBm
aWxsQW5kU3Ryb2tlUGF0aChjaGlsZFBhaW50SW5mby5jb250ZXh0KTsKLQotICAgICAgICAgICAg
ICAgIGlmIChzdmdTdHlsZS0+aGFzTWFya2VycygpKQotICAgICAgICAgICAgICAgICAgICBtX21h
cmtlckxheW91dEluZm8uZHJhd01hcmtlcnMoY2hpbGRQYWludEluZm8pOwotICAgICAgICAgICAg
fQotCi0gICAgICAgICAgICBTVkdSZW5kZXJTdXBwb3J0OjpmaW5pc2hSZW5kZXJTVkdDb250ZW50
KHRoaXMsIGNoaWxkUGFpbnRJbmZvLCBzYXZlZEluZm8uY29udGV4dCk7Ci0gICAgICAgIH0KLQot
ICAgICAgICBpZiAoZHJhd3NPdXRsaW5lKQotICAgICAgICAgICAgcGFpbnRPdXRsaW5lKGNoaWxk
UGFpbnRJbmZvLmNvbnRleHQsIEludFJlY3QoYm91bmRpbmdCb3gpKTsKLSAgICB9Ci19Ci0KLS8v
IFRoaXMgbWV0aG9kIGlzIGNhbGxlZCBmcm9tIGluc2lkZSBwYWludE91dGxpbmUoKSBzaW5jZSB3
ZSBjYWxsIHBhaW50T3V0bGluZSgpCi0vLyB3aGlsZSB0cmFuc2Zvcm1lZCB0byBvdXIgY29vcmQg
c3lzdGVtLCByZXR1cm4gbG9jYWwgY29vcmRzCi12b2lkIFJlbmRlclNWR1BhdGg6OmFkZEZvY3Vz
UmluZ1JlY3RzKFZlY3RvcjxMYXlvdXRSZWN0PiYgcmVjdHMsIGNvbnN0IExheW91dFBvaW50Jikg
Ci17Ci0gICAgTGF5b3V0UmVjdCByZWN0ID0gZW5jbG9zaW5nTGF5b3V0UmVjdChyZXBhaW50UmVj
dEluTG9jYWxDb29yZGluYXRlcygpKTsKLSAgICBpZiAoIXJlY3QuaXNFbXB0eSgpKQotICAgICAg
ICByZWN0cy5hcHBlbmQocmVjdCk7Ci19Ci0KLWJvb2wgUmVuZGVyU1ZHUGF0aDo6bm9kZUF0Rmxv
YXRQb2ludChjb25zdCBIaXRUZXN0UmVxdWVzdCYgcmVxdWVzdCwgSGl0VGVzdFJlc3VsdCYgcmVz
dWx0LCBjb25zdCBGbG9hdFBvaW50JiBwb2ludEluUGFyZW50LCBIaXRUZXN0QWN0aW9uIGhpdFRl
c3RBY3Rpb24pCi17Ci0gICAgLy8gV2Ugb25seSBkcmF3IGluIHRoZSBmb3Jncm91bmQgcGhhc2Us
IHNvIHdlIG9ubHkgaGl0LXRlc3QgdGhlbi4KLSAgICBpZiAoaGl0VGVzdEFjdGlvbiAhPSBIaXRU
ZXN0Rm9yZWdyb3VuZCkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgRmxvYXRQb2ludCBs
b2NhbFBvaW50ID0gbV9sb2NhbFRyYW5zZm9ybS5pbnZlcnNlKCkubWFwUG9pbnQocG9pbnRJblBh
cmVudCk7Ci0KLSAgICBpZiAoIVNWR1JlbmRlclN1cHBvcnQ6OnBvaW50SW5DbGlwcGluZ0FyZWEo
dGhpcywgbG9jYWxQb2ludCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIFBvaW50ZXJF
dmVudHNIaXRSdWxlcyBoaXRSdWxlcyhQb2ludGVyRXZlbnRzSGl0UnVsZXM6OlNWR19QQVRIX0hJ
VFRFU1RJTkcsIHJlcXVlc3QsIHN0eWxlKCktPnBvaW50ZXJFdmVudHMoKSk7Ci0gICAgYm9vbCBp
c1Zpc2libGUgPSAoc3R5bGUoKS0+dmlzaWJpbGl0eSgpID09IFZJU0lCTEUpOwotICAgIGlmIChp
c1Zpc2libGUgfHwgIWhpdFJ1bGVzLnJlcXVpcmVWaXNpYmxlKSB7Ci0gICAgICAgIGNvbnN0IFNW
R1JlbmRlclN0eWxlKiBzdmdTdHlsZSA9IHN0eWxlKCktPnN2Z1N0eWxlKCk7Ci0gICAgICAgIFdp
bmRSdWxlIGZpbGxSdWxlID0gc3ZnU3R5bGUtPmZpbGxSdWxlKCk7Ci0gICAgICAgIGlmIChyZXF1
ZXN0LnN2Z0NsaXBDb250ZW50KCkpCi0gICAgICAgICAgICBmaWxsUnVsZSA9IHN2Z1N0eWxlLT5j
bGlwUnVsZSgpOwotICAgICAgICBpZiAoKGhpdFJ1bGVzLmNhbkhpdFN0cm9rZSAmJiAoc3ZnU3R5
bGUtPmhhc1N0cm9rZSgpIHx8ICFoaXRSdWxlcy5yZXF1aXJlU3Ryb2tlKSAmJiBzdHJva2VDb250
YWlucyhsb2NhbFBvaW50LCBoaXRSdWxlcy5yZXF1aXJlU3Ryb2tlKSkKLSAgICAgICAgICAgIHx8
IChoaXRSdWxlcy5jYW5IaXRGaWxsICYmIChzdmdTdHlsZS0+aGFzRmlsbCgpIHx8ICFoaXRSdWxl
cy5yZXF1aXJlRmlsbCkgJiYgZmlsbENvbnRhaW5zKGxvY2FsUG9pbnQsIGhpdFJ1bGVzLnJlcXVp
cmVGaWxsLCBmaWxsUnVsZSkpKSB7Ci0gICAgICAgICAgICB1cGRhdGVIaXRUZXN0UmVzdWx0KHJl
c3VsdCwgcm91bmRlZExheW91dFBvaW50KGxvY2FsUG9pbnQpKTsKLSAgICAgICAgICAgIHJldHVy
biB0cnVlOwotICAgICAgICB9Ci0gICAgfQotICAgIHJldHVybiBmYWxzZTsKLX0KLQotRmxvYXRS
ZWN0IFJlbmRlclNWR1BhdGg6OmNhbGN1bGF0ZU1hcmtlckJvdW5kc0lmTmVlZGVkKCkKLXsKLSAg
ICBTVkdFbGVtZW50KiBzdmdFbGVtZW50ID0gc3RhdGljX2Nhc3Q8U1ZHRWxlbWVudCo+KG5vZGUo
KSk7Ci0gICAgQVNTRVJUKHN2Z0VsZW1lbnQgJiYgc3ZnRWxlbWVudC0+ZG9jdW1lbnQoKSk7Ci0g
ICAgaWYgKCFzdmdFbGVtZW50LT5pc1N0eWxlZCgpKQotICAgICAgICByZXR1cm4gRmxvYXRSZWN0
KCk7Ci0KLSAgICBTVkdTdHlsZWRFbGVtZW50KiBzdHlsZWRFbGVtZW50ID0gc3RhdGljX2Nhc3Q8
U1ZHU3R5bGVkRWxlbWVudCo+KHN2Z0VsZW1lbnQpOwotICAgIGlmICghc3R5bGVkRWxlbWVudC0+
c3VwcG9ydHNNYXJrZXJzKCkpCi0gICAgICAgIHJldHVybiBGbG9hdFJlY3QoKTsKLQotICAgIGNv
bnN0IFNWR1JlbmRlclN0eWxlKiBzdmdTdHlsZSA9IHN0eWxlKCktPnN2Z1N0eWxlKCk7Ci0gICAg
QVNTRVJUKHN2Z1N0eWxlLT5oYXNNYXJrZXJzKCkpOwotCi0gICAgU1ZHUmVzb3VyY2VzKiByZXNv
dXJjZXMgPSBTVkdSZXNvdXJjZXNDYWNoZTo6Y2FjaGVkUmVzb3VyY2VzRm9yUmVuZGVyT2JqZWN0
KHRoaXMpOwotICAgIGlmICghcmVzb3VyY2VzKQotICAgICAgICByZXR1cm4gRmxvYXRSZWN0KCk7
Ci0KLSAgICBSZW5kZXJTVkdSZXNvdXJjZU1hcmtlciogbWFya2VyU3RhcnQgPSByZXNvdXJjZXMt
Pm1hcmtlclN0YXJ0KCk7Ci0gICAgUmVuZGVyU1ZHUmVzb3VyY2VNYXJrZXIqIG1hcmtlck1pZCA9
IHJlc291cmNlcy0+bWFya2VyTWlkKCk7Ci0gICAgUmVuZGVyU1ZHUmVzb3VyY2VNYXJrZXIqIG1h
cmtlckVuZCA9IHJlc291cmNlcy0+bWFya2VyRW5kKCk7Ci0gICAgaWYgKCFtYXJrZXJTdGFydCAm
JiAhbWFya2VyTWlkICYmICFtYXJrZXJFbmQpCi0gICAgICAgIHJldHVybiBGbG9hdFJlY3QoKTsK
LQotICAgIHJldHVybiBtX21hcmtlckxheW91dEluZm8uY2FsY3VsYXRlQm91bmRhcmllcyhtYXJr
ZXJTdGFydCwgbWFya2VyTWlkLCBtYXJrZXJFbmQsIHN2Z1N0eWxlLT5zdHJva2VXaWR0aCgpLnZh
bHVlKHN2Z0VsZW1lbnQpLCBtX3BhdGgpOwotfQotCi12b2lkIFJlbmRlclNWR1BhdGg6OnVwZGF0
ZUNhY2hlZEJvdW5kYXJpZXMoKQotewotICAgIGlmIChtX3BhdGguaXNFbXB0eSgpKSB7Ci0gICAg
ICAgIG1fZmlsbEJvdW5kaW5nQm94ID0gRmxvYXRSZWN0KCk7Ci0gICAgICAgIG1fc3Ryb2tlQW5k
TWFya2VyQm91bmRpbmdCb3ggPSBGbG9hdFJlY3QoKTsKLSAgICAgICAgbV9yZXBhaW50Qm91bmRp
bmdCb3ggPSBGbG9hdFJlY3QoKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIC8vIENh
Y2hlIF91bmNsaXBwZWRfIGZpbGwgYm91bmRpbmcgYm94LCB1c2VkIGZvciBjYWxjdWxhdGlvbnMg
aW4gcmVzb3VyY2VzCi0gICAgbV9maWxsQm91bmRpbmdCb3ggPSBtX3BhdGguYm91bmRpbmdSZWN0
KCk7Ci0KLSAgICAvLyBTcGVjKDExLjQpOiBBbnkgemVybyBsZW5ndGggc3VicGF0aCBzaGFsbCBu
b3QgYmUgc3Ryb2tlZCBpZiB0aGUg4oCYc3Ryb2tlLWxpbmVjYXDigJkgcHJvcGVydHkgaGFzIGEg
dmFsdWUgb2YgYnV0dAotICAgIC8vIGJ1dCBzaGFsbCBiZSBzdHJva2VkIGlmIHRoZSDigJhzdHJv
a2UtbGluZWNhcOKAmSBwcm9wZXJ0eSBoYXMgYSB2YWx1ZSBvZiByb3VuZCBvciBzcXVhcmUKLSAg
ICBpZiAoc2hvdWxkU3Ryb2tlWmVyb0xlbmd0aFN1YnBhdGgoKSkgewotICAgICAgICBtX3N0cm9r
ZUFuZE1hcmtlckJvdW5kaW5nQm94ID0gemVyb0xlbmd0aFN1YnBhdGhSZWN0KCk7Ci0gICAgICAg
IC8vIENhY2hlIHNtYWxsZXN0IHBvc3NpYmxlIHJlcGFpbnQgcmVjdGFuZ2xlCi0gICAgICAgIG1f
cmVwYWludEJvdW5kaW5nQm94ID0gbV9zdHJva2VBbmRNYXJrZXJCb3VuZGluZ0JveDsKLSAgICAg
ICAgU1ZHUmVuZGVyU3VwcG9ydDo6aW50ZXJzZWN0UmVwYWludFJlY3RXaXRoUmVzb3VyY2VzKHRo
aXMsIG1fcmVwYWludEJvdW5kaW5nQm94KTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAg
IC8vIENhY2hlIF91bmNsaXBwZWRfIHN0cm9rZSBib3VuZGluZyBib3gsIHVzZWQgZm9yIGNhbGN1
bGF0aW9ucyBpbiByZXNvdXJjZXMgKGluY2x1ZGVzIG1hcmtlciBib3VuZGFyaWVzKQotICAgIG1f
c3Ryb2tlQW5kTWFya2VyQm91bmRpbmdCb3ggPSBtX2ZpbGxCb3VuZGluZ0JveDsKLQotICAgIGNv
bnN0IFNWR1JlbmRlclN0eWxlKiBzdmdTdHlsZSA9IHN0eWxlKCktPnN2Z1N0eWxlKCk7Ci0gICAg
aWYgKHN2Z1N0eWxlLT5oYXNTdHJva2UoKSkgewotICAgICAgICBCb3VuZGluZ1JlY3RTdHJva2VT
dHlsZUFwcGxpZXIgc3Ryb2tlU3R5bGUodGhpcywgc3R5bGUoKSk7Ci0gICAgICAgIG1fc3Ryb2tl
QW5kTWFya2VyQm91bmRpbmdCb3gudW5pdGUobV9wYXRoLnN0cm9rZUJvdW5kaW5nUmVjdCgmc3Ry
b2tlU3R5bGUpKTsKLSAgICB9Ci0KLSAgICBpZiAoc3ZnU3R5bGUtPmhhc01hcmtlcnMoKSkgewot
ICAgICAgICBGbG9hdFJlY3QgbWFya2VyQm91bmRzID0gY2FsY3VsYXRlTWFya2VyQm91bmRzSWZO
ZWVkZWQoKTsKLSAgICAgICAgaWYgKCFtYXJrZXJCb3VuZHMuaXNFbXB0eSgpKQotICAgICAgICAg
ICAgbV9zdHJva2VBbmRNYXJrZXJCb3VuZGluZ0JveC51bml0ZShtYXJrZXJCb3VuZHMpOwotICAg
IH0KLQotICAgIC8vIENhY2hlIHNtYWxsZXN0IHBvc3NpYmxlIHJlcGFpbnQgcmVjdGFuZ2xlCi0g
ICAgbV9yZXBhaW50Qm91bmRpbmdCb3ggPSBtX3N0cm9rZUFuZE1hcmtlckJvdW5kaW5nQm94Owot
ICAgIFNWR1JlbmRlclN1cHBvcnQ6OmludGVyc2VjdFJlcGFpbnRSZWN0V2l0aFJlc291cmNlcyh0
aGlzLCBtX3JlcGFpbnRCb3VuZGluZ0JveCk7Ci19Ci0KIH0KIAogI2VuZGlmIC8vIEVOQUJMRShT
VkcpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Bh
dGguaCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUGF0aC5oCmluZGV4
IDk4ZTYwOGQuLjUyNTY4ZmYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9z
dmcvUmVuZGVyU1ZHUGF0aC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVu
ZGVyU1ZHUGF0aC5oCkBAIC00LDYgKzQsOCBAQAogICogQ29weXJpZ2h0IChDKSAyMDA1IEVyaWMg
U2VpZGVsIDxlcmljQHdlYmtpdC5vcmc+CiAgKiBDb3B5cmlnaHQgKEMpIDIwMDYgQXBwbGUgQ29t
cHV0ZXIsIEluYwogICogQ29weXJpZ2h0IChDKSAyMDA5IEdvb2dsZSwgSW5jLgorICogQ29weXJp
Z2h0IChDKSAyMDExIFJlbmF0YSBIb2RvdmFuIDxyZW5pQHdlYmtpdC5vcmc+CisgKiBDb3B5cmln
aHQgKEMpIDIwMTEgVW5pdmVyc2l0eSBvZiBTemVnZWQKICAqCiAgKiBUaGlzIGxpYnJhcnkgaXMg
ZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgKiBtb2RpZnkg
aXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwpAQCAt
MjUsODYgKzI3LDIwIEBACiAjZGVmaW5lIFJlbmRlclNWR1BhdGhfaAogCiAjaWYgRU5BQkxFKFNW
RykKLSNpbmNsdWRlICJBZmZpbmVUcmFuc2Zvcm0uaCIKLSNpbmNsdWRlICJGbG9hdFJlY3QuaCIK
LSNpbmNsdWRlICJSZW5kZXJTVkdNb2RlbE9iamVjdC5oIgotI2luY2x1ZGUgIlNWR01hcmtlckxh
eW91dEluZm8uaCIKKyNpbmNsdWRlICJSZW5kZXJTVkdTaGFwZS5oIgogCiBuYW1lc3BhY2UgV2Vi
Q29yZSB7CiAKLWNsYXNzIEZsb2F0UG9pbnQ7Ci1jbGFzcyBHcmFwaGljc0NvbnRleHRTdGF0ZVNh
dmVyOwotY2xhc3MgUmVuZGVyU1ZHQ29udGFpbmVyOwotY2xhc3MgU1ZHU3R5bGVkVHJhbnNmb3Jt
YWJsZUVsZW1lbnQ7Ci0KLWNsYXNzIFJlbmRlclNWR1BhdGggOiBwdWJsaWMgUmVuZGVyU1ZHTW9k
ZWxPYmplY3QgeworY2xhc3MgUmVuZGVyU1ZHUGF0aCA6IHB1YmxpYyBSZW5kZXJTVkdTaGFwZSB7
CiBwdWJsaWM6Ci0gICAgZXhwbGljaXQgUmVuZGVyU1ZHUGF0aChTVkdTdHlsZWRUcmFuc2Zvcm1h
YmxlRWxlbWVudCopOworICAgIFJlbmRlclNWR1BhdGgoU1ZHU3R5bGVkVHJhbnNmb3JtYWJsZUVs
ZW1lbnQqKTsKICAgICB2aXJ0dWFsIH5SZW5kZXJTVkdQYXRoKCk7CiAKLSAgICBjb25zdCBQYXRo
JiBwYXRoKCkgY29uc3QgeyByZXR1cm4gbV9wYXRoOyB9Ci0gICAgdm9pZCBzZXROZWVkc1BhdGhV
cGRhdGUoKSB7IG1fbmVlZHNQYXRoVXBkYXRlID0gdHJ1ZTsgfQotICAgIHZpcnR1YWwgdm9pZCBz
ZXROZWVkc0JvdW5kYXJpZXNVcGRhdGUoKSB7IG1fbmVlZHNCb3VuZGFyaWVzVXBkYXRlID0gdHJ1
ZTsgfQotICAgIHZpcnR1YWwgdm9pZCBzZXROZWVkc1RyYW5zZm9ybVVwZGF0ZSgpIHsgbV9uZWVk
c1RyYW5zZm9ybVVwZGF0ZSA9IHRydWU7IH0KLQogcHJpdmF0ZToKLSAgICAvLyBIaXQtZGV0ZWN0
aW9uIHNlcGVyYXRlZCBmb3IgdGhlIGZpbGwgYW5kIHRoZSBzdHJva2UKLSAgICBib29sIGZpbGxD
b250YWlucyhjb25zdCBGbG9hdFBvaW50JiwgYm9vbCByZXF1aXJlc0ZpbGwgPSB0cnVlLCBXaW5k
UnVsZSBmaWxsUnVsZSA9IFJVTEVfTk9OWkVSTyk7Ci0gICAgYm9vbCBzdHJva2VDb250YWlucyhj
b25zdCBGbG9hdFBvaW50JiwgYm9vbCByZXF1aXJlc1N0cm9rZSA9IHRydWUpOwotCi0gICAgdmly
dHVhbCBGbG9hdFJlY3Qgb2JqZWN0Qm91bmRpbmdCb3goKSBjb25zdCB7IHJldHVybiBtX2ZpbGxC
b3VuZGluZ0JveDsgfQotICAgIHZpcnR1YWwgRmxvYXRSZWN0IHN0cm9rZUJvdW5kaW5nQm94KCkg
Y29uc3QgeyByZXR1cm4gbV9zdHJva2VBbmRNYXJrZXJCb3VuZGluZ0JveDsgfQotICAgIHZpcnR1
YWwgRmxvYXRSZWN0IHJlcGFpbnRSZWN0SW5Mb2NhbENvb3JkaW5hdGVzKCkgY29uc3QgeyByZXR1
cm4gbV9yZXBhaW50Qm91bmRpbmdCb3g7IH0KLSAgICB2aXJ0dWFsIGNvbnN0IEFmZmluZVRyYW5z
Zm9ybSYgbG9jYWxUb1BhcmVudFRyYW5zZm9ybSgpIGNvbnN0IHsgcmV0dXJuIG1fbG9jYWxUcmFu
c2Zvcm07IH0KLQogICAgIHZpcnR1YWwgYm9vbCBpc1NWR1BhdGgoKSBjb25zdCB7IHJldHVybiB0
cnVlOyB9CiAgICAgdmlydHVhbCBjb25zdCBjaGFyKiByZW5kZXJOYW1lKCkgY29uc3QgeyByZXR1
cm4gIlJlbmRlclNWR1BhdGgiOyB9Ci0KLSAgICB2aXJ0dWFsIHZvaWQgbGF5b3V0KCk7Ci0gICAg
dmlydHVhbCB2b2lkIHBhaW50KFBhaW50SW5mbyYsIGNvbnN0IExheW91dFBvaW50Jik7Ci0gICAg
dmlydHVhbCB2b2lkIGFkZEZvY3VzUmluZ1JlY3RzKFZlY3RvcjxMYXlvdXRSZWN0PiYsIGNvbnN0
IExheW91dFBvaW50Jik7Ci0KLSAgICB2aXJ0dWFsIGJvb2wgbm9kZUF0RmxvYXRQb2ludChjb25z
dCBIaXRUZXN0UmVxdWVzdCYsIEhpdFRlc3RSZXN1bHQmLCBjb25zdCBGbG9hdFBvaW50JiBwb2lu
dEluUGFyZW50LCBIaXRUZXN0QWN0aW9uKTsKLQotICAgIEZsb2F0UmVjdCBjYWxjdWxhdGVNYXJr
ZXJCb3VuZHNJZk5lZWRlZCgpOwotICAgIHZvaWQgdXBkYXRlQ2FjaGVkQm91bmRhcmllcygpOwot
Ci0gICAgdm9pZCBzZXR1cFNxdWFyZUNhcFBhdGgoUGF0aComIHVzZVBhdGgsIGludCYgYXBwbHlN
b2RlKTsKLSAgICBib29sIHNldHVwTm9uU2NhbGluZ1N0cm9rZVBhdGgoUGF0aComIHVzZVBhdGgs
IEdyYXBoaWNzQ29udGV4dFN0YXRlU2F2ZXImKTsKLSAgICBib29sIHNob3VsZFN0cm9rZVplcm9M
ZW5ndGhTdWJwYXRoKCkgY29uc3Q7Ci0gICAgRmxvYXRSZWN0IHplcm9MZW5ndGhTdWJwYXRoUmVj
dCgpIGNvbnN0OwotCi1wcml2YXRlOgotICAgIHZpcnR1YWwgQWZmaW5lVHJhbnNmb3JtIGxvY2Fs
VHJhbnNmb3JtKCkgY29uc3QgeyByZXR1cm4gbV9sb2NhbFRyYW5zZm9ybTsgfQotICAgIHZvaWQg
ZmlsbEFuZFN0cm9rZVBhdGgoR3JhcGhpY3NDb250ZXh0Kik7Ci0KLSAgICBib29sIG1fbmVlZHNC
b3VuZGFyaWVzVXBkYXRlIDogMTsKLSAgICBib29sIG1fbmVlZHNQYXRoVXBkYXRlIDogMTsKLSAg
ICBib29sIG1fbmVlZHNUcmFuc2Zvcm1VcGRhdGUgOiAxOwotCi0gICAgbXV0YWJsZSBQYXRoIG1f
cGF0aDsKLSAgICBGbG9hdFJlY3QgbV9maWxsQm91bmRpbmdCb3g7Ci0gICAgRmxvYXRSZWN0IG1f
c3Ryb2tlQW5kTWFya2VyQm91bmRpbmdCb3g7Ci0gICAgRmxvYXRSZWN0IG1fcmVwYWludEJvdW5k
aW5nQm94OwotICAgIFNWR01hcmtlckxheW91dEluZm8gbV9tYXJrZXJMYXlvdXRJbmZvOwotICAg
IEFmZmluZVRyYW5zZm9ybSBtX2xvY2FsVHJhbnNmb3JtOwogfTsKIAotaW5saW5lIFJlbmRlclNW
R1BhdGgqIHRvUmVuZGVyU1ZHUGF0aChSZW5kZXJPYmplY3QqIG9iamVjdCkKLXsKLSAgICBBU1NF
UlQoIW9iamVjdCB8fCBvYmplY3QtPmlzU1ZHUGF0aCgpKTsKLSAgICByZXR1cm4gc3RhdGljX2Nh
c3Q8UmVuZGVyU1ZHUGF0aCo+KG9iamVjdCk7Ci19Ci0KLWlubGluZSBjb25zdCBSZW5kZXJTVkdQ
YXRoKiB0b1JlbmRlclNWR1BhdGgoY29uc3QgUmVuZGVyT2JqZWN0KiBvYmplY3QpCi17Ci0gICAg
QVNTRVJUKCFvYmplY3QgfHwgb2JqZWN0LT5pc1NWR1BhdGgoKSk7Ci0gICAgcmV0dXJuIHN0YXRp
Y19jYXN0PGNvbnN0IFJlbmRlclNWR1BhdGgqPihvYmplY3QpOwotfQotCi0vLyBUaGlzIHdpbGwg
Y2F0Y2ggYW55b25lIGRvaW5nIGFuIHVubmVjZXNzYXJ5IGNhc3QuCi12b2lkIHRvUmVuZGVyU1ZH
UGF0aChjb25zdCBSZW5kZXJTVkdQYXRoKik7Ci0KIH0KIAogI2VuZGlmIC8vIEVOQUJMRShTVkcp
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1JlY3Qu
Y3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZWN0LmNwcApuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42YmMzNWRlCi0tLSAvZGV2L251bGwKKysr
IGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZWN0LmNwcApAQCAtMCww
ICsxLDEzOSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMSBVbml2ZXJzaXR5IG9mIFN6ZWdl
ZAorICogQ29weXJpZ2h0IChDKSAyMDExIFJlbmF0YSBIb2RvdmFuIChyZW5pQHdlYmtpdC5vcmcp
CisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgVU5JVkVSU0lUWSBPRiBTWkVHRUQgYGBBUyBJUycnIEFORCBBTlkKKyAq
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBO
TyBFVkVOVCBTSEFMTCBVTklWRVJTSVRZIE9GIFNaRUdFRCBPUgorICogQ09OVFJJQlVUT1JTIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisg
KiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKwor
I2lmIEVOQUJMRShTVkcpCisjaW5jbHVkZSAiUmVuZGVyU1ZHUmVjdC5oIgorCisjaW5jbHVkZSAi
U1ZHTmFtZXMuaCIKKyNpbmNsdWRlICJTVkdSZWN0RWxlbWVudC5oIgorCituYW1lc3BhY2UgV2Vi
Q29yZSB7CisKK1JlbmRlclNWR1JlY3Q6OlJlbmRlclNWR1JlY3QoU1ZHU3R5bGVkVHJhbnNmb3Jt
YWJsZUVsZW1lbnQqIG5vZGUpCisgICAgOiBSZW5kZXJTVkdTaGFwZShub2RlKQoreworfQorCitS
ZW5kZXJTVkdSZWN0Ojp+UmVuZGVyU1ZHUmVjdCgpCit7Cit9CisKK3ZvaWQgUmVuZGVyU1ZHUmVj
dDo6Y3JlYXRlU2hhcGUoKQoreworICAgIC8vIENsZWFyIG1fcmVjdC4KKyAgICBtX3JlY3QgPSBG
bG9hdFJlY3QoKTsKKyAgICBTVkdSZWN0RWxlbWVudCogcmVjdCA9IHN0YXRpY19jYXN0PFNWR1Jl
Y3RFbGVtZW50Kj4obm9kZSgpKTsKKyAgICBib29sIG1faGFzUnggPSByZWN0LT5oYXNBdHRyaWJ1
dGUoU1ZHTmFtZXM6OnJ4QXR0cik7CisgICAgYm9vbCBtX2hhc1J5ID0gcmVjdC0+aGFzQXR0cmli
dXRlKFNWR05hbWVzOjpyeUF0dHIpOworICAgIC8vIEZhbGxiYWNrIHRvIHRoZSBwYXJlbnQgaWYg
cmVjdCBoYXMgc3BlY2lhbCBmZWF0dXJlcy4KKyAgICBpZiAobV9oYXNSeCB8fCBtX2hhc1J5IHx8
ICFzdHlsZSgpLT5zdmdTdHlsZSgpLT5zdHJva2VEYXNoQXJyYXkoKS5pc0VtcHR5KCkpIHsKKyAg
ICAgICBSZW5kZXJTVkdTaGFwZTo6Y3JlYXRlU2hhcGUoKTsKKyAgICAgICByZXR1cm47CisgICAg
fQorICAgIGZsb2F0IHdpZHRoVmFsdWUgPSByZWN0LT53aWR0aCgpLnZhbHVlKHJlY3QpOworICAg
IGlmICh3aWR0aFZhbHVlIDw9IDApCisgICAgICAgIHJldHVybjsKKworICAgIGZsb2F0IGhlaWdo
dFZhbHVlID0gcmVjdC0+aGVpZ2h0KCkudmFsdWUocmVjdCk7CisgICAgaWYgKGhlaWdodFZhbHVl
IDw9IDApCisgICAgICAgIHJldHVybjsKKworICAgIGZsb2F0IHhWYWx1ZSA9IHJlY3QtPngoKS52
YWx1ZShyZWN0KTsKKyAgICBmbG9hdCB5VmFsdWUgPSByZWN0LT55KCkudmFsdWUocmVjdCk7Cisg
ICAgbV9yZWN0ID0gRmxvYXRSZWN0KHhWYWx1ZSwgeVZhbHVlLCB3aWR0aFZhbHVlLCBoZWlnaHRW
YWx1ZSk7Cit9CisKKworRmxvYXRSZWN0IFJlbmRlclNWR1JlY3Q6Om9iamVjdEJvdW5kaW5nQm94
KCkgY29uc3QKK3sKKyAgICBpZiAoaGFzUGF0aCgpKQorICAgICAgICByZXR1cm4gUmVuZGVyU1ZH
U2hhcGU6Om9iamVjdEJvdW5kaW5nQm94KCk7CisgICAgcmV0dXJuIG1fcmVjdDsKK30KKworRmxv
YXRSZWN0IFJlbmRlclNWR1JlY3Q6OnN0cm9rZUJvdW5kaW5nQm94KCkKK3sKKyAgICBpZiAoaGFz
UGF0aCgpKQorICAgICAgICByZXR1cm4gUmVuZGVyU1ZHU2hhcGU6OnN0cm9rZUJvdW5kaW5nQm94
KCk7CisgICAgLy8gSWYgd2UgaW5mbGF0ZSB0aGUgbV9yZWN0IHdpdGggdGhlIGhhbGYgc2l6ZSBz
dHJva2VXaWR0aCwgd2UgZ2V0IHRoZSBzdHJva2VCb3VuZGluZ0JveCBpbiBub24tZmFsbGJhY2sg
cGF0aCBtb2RlLgorICAgIEJvdW5kaW5nUmVjdFN0cm9rZVN0eWxlQXBwbGllciBzdHJva2VTdHls
ZSh0aGlzLCBzdHlsZSgpKTsKKyAgICBGbG9hdFJlY3Qgc3Ryb2tlUmVjdCA9IG1fcmVjdDsKKyAg
ICBzdHJva2VSZWN0LmluZmxhdGUodGhpcy0+c3Ryb2tlV2lkdGgoKSAvIDIpOworICAgIHJldHVy
biBzdHJva2VSZWN0OworfQorCit2b2lkIFJlbmRlclNWR1JlY3Q6OmZpbGxTaGFwZShHcmFwaGlj
c0NvbnRleHQqIGNvbnRleHQpCit7CisgICAgaWYgKGhhc1BhdGgoKSkKKyAgICAgICAgUmVuZGVy
U1ZHU2hhcGU6OmZpbGxTaGFwZShjb250ZXh0KTsKKyAgICBlbHNlCisgICAgICAgIGNvbnRleHQt
PmZpbGxSZWN0KG1fcmVjdCk7Cit9CisKK3ZvaWQgUmVuZGVyU1ZHUmVjdDo6c3Ryb2tlU2hhcGUo
R3JhcGhpY3NDb250ZXh0KiBjb250ZXh0KQoreworICAgIGlmIChoYXNQYXRoKCkpIHsKKyAgICAg
ICAgUmVuZGVyU1ZHU2hhcGU6OnN0cm9rZVNoYXBlKGNvbnRleHQpOworICAgICAgICByZXR1cm47
CisgICAgfQorICAgIGNvbnRleHQtPnN0cm9rZVJlY3QobV9yZWN0LCB0aGlzLT5zdHJva2VXaWR0
aCgpKTsKK30KKworYm9vbCBSZW5kZXJTVkdSZWN0OjpzdHJva2VDb250YWluc1Nsb3dDYXNlKGNv
bnN0IEZsb2F0UG9pbnQmIHBvaW50KQoreworICAgIGlmIChoYXNQYXRoKCkpCisgICAgICAgIHJl
dHVybiBSZW5kZXJTVkdTaGFwZTo6c3Ryb2tlQ29udGFpbnNTbG93Q2FzZShwb2ludCk7CisKKyAg
ICAvLyBUbyBkZWNlaWRlIHRoZSBzdHJva2UgY29udGFpbmluZyB3ZSBjcmVhdGUgdHdvIHJlY3Rz
IHdoaWNoIHJlcHJlc2VudCB0aGUgaW5uZXIgYW5kCisgICAgLy8gdGhlIG91dGVyIHN0cm9rZSBi
b3JkZXJzLiBUaGUgY29udGFpbmluZyBleGlzdHMsIGlmIHRoZSBwb2ludCBpcyBiZXR3ZWVuIHRo
ZW0uCisgICAgZmxvYXQgc3Ryb2tlV2lkdGggPSB0aGlzLT5zdHJva2VXaWR0aCgpOworICAgIEZs
b2F0UmVjdCBpbm5lclN0cm9rZVJlY3QgPSBtX3JlY3Q7CisgICAgRmxvYXRSZWN0IG91dGVyU3Ry
b2tlUmVjdCA9IG1fcmVjdDsKKyAgICBpbm5lclN0cm9rZVJlY3QuaW5mbGF0ZSgtc3Ryb2tlV2lk
dGggLyAyKTsKKyAgICBvdXRlclN0cm9rZVJlY3QuaW5mbGF0ZShzdHJva2VXaWR0aCAvIDIpOwor
ICAgIHJldHVybiAoZGV0ZXJtaW5lUG9pbnRMb2NhdGlvbihwb2ludCwgaW5uZXJTdHJva2VSZWN0
KSAhPSBJbnNpZGVTaGFwZQorICAgICAgICAgICAgJiYgZGV0ZXJtaW5lUG9pbnRMb2NhdGlvbihw
b2ludCwgb3V0ZXJTdHJva2VSZWN0KSAhPSBPdXRzaWRlU2hhcGUpID8gIHRydWUgOiBmYWxzZTsK
K30KKworYm9vbCBSZW5kZXJTVkdSZWN0OjpmaWxsQ29udGFpbnNTbG93Q2FzZShjb25zdCBGbG9h
dFBvaW50JiBwb2ludCwgY29uc3QgV2luZFJ1bGUmKSBjb25zdAoreworICAgIHJldHVybiAoZGV0
ZXJtaW5lUG9pbnRMb2NhdGlvbihwb2ludCwgbV9yZWN0KSAhPSBPdXRzaWRlU2hhcGUpID8gdHJ1
ZSA6IGZhbHNlOworfQorCitQb2ludExvY2F0aW9uIFJlbmRlclNWR1JlY3Q6OmRldGVybWluZVBv
aW50TG9jYXRpb24oY29uc3QgRmxvYXRQb2ludCYgcG9pbnQsIGNvbnN0IEZsb2F0UmVjdCYgcmVj
dCkgY29uc3QKK3sKKyAgICAvLyBUZXN0IHdoZXRoZXIgdGhlIHJlY3QgY29udGFpbnMgdGhlIGNl
cnRhaW4gcG9pbnQgb3Igbm90CisgICAgaWYgKCFyZWN0LmNvbnRhaW5zKHBvaW50KSkKKyAgICAg
ICAgcmV0dXJuIE91dHNpZGVTaGFwZTsKKyAgICByZXR1cm4gKHJlY3QueCgpIDwgcG9pbnQueCgp
ICYmIHJlY3QubWF4WCgpID4gcG9pbnQueCgpICYmIHJlY3QueSgpIDwgcG9pbnQueSgpICYmIHJl
Y3QubWF4WSgpID4gcG9pbnQueSgpKSA/IEluc2lkZVNoYXBlIDogT25TdHJva2U7Cit9CisKK30K
KworI2VuZGlmIC8vIEVOQUJMRShTVkcpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvc3ZnL1JlbmRlclNWR1JlY3QuaCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcv
UmVuZGVyU1ZHUmVjdC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA3MWVm
MmEKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRl
clNWR1JlY3QuaApAQCAtMCwwICsxLDYyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDExIFVu
aXZlcnNpdHkgb2YgU3plZ2VkCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgUmVuYXRhIEhvZG92YW4g
KHJlbmlAd2Via2l0Lm9yZykKKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBVTklWRVJTSVRZIE9GIFNaRUdFRCBgYEFT
IElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFVOSVZFUlNJVFkgT0YgU1pFR0VEIE9SCisg
KiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRl
ZiBSZW5kZXJTVkdSZWN0X2gKKyNkZWZpbmUgUmVuZGVyU1ZHUmVjdF9oCisKKyNpZiBFTkFCTEUo
U1ZHKQorI2luY2x1ZGUgIlJlbmRlclNWR1BhdGguaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgewor
CitjbGFzcyBSZW5kZXJTVkdSZWN0IDogcHVibGljIFJlbmRlclNWR1NoYXBlIHsKK3B1YmxpYzoK
KyAgICBleHBsaWNpdCBSZW5kZXJTVkdSZWN0KFNWR1N0eWxlZFRyYW5zZm9ybWFibGVFbGVtZW50
Kik7CisgICAgdmlydHVhbCB+UmVuZGVyU1ZHUmVjdCgpOworCitwcml2YXRlOgorICAgIHZpcnR1
YWwgYm9vbCBpc1NWR1JlY3QoKSBjb25zdCB7IHJldHVybiB0cnVlOyB9CisgICAgdmlydHVhbCBj
b25zdCBjaGFyKiByZW5kZXJOYW1lKCkgY29uc3QgeyByZXR1cm4gIlJlbmRlclNWR1JlY3QiOyB9
CisKKyAgICB2b2lkIGNyZWF0ZVNoYXBlKCk7CisgICAgYm9vbCBpc0VtcHR5KCkgY29uc3QgeyBy
ZXR1cm4gaGFzUGF0aCgpID8gUmVuZGVyU1ZHU2hhcGU6OmlzRW1wdHkoKSA6IG1fcmVjdC5pc0Vt
cHR5KCk7IH07CisgICAgdm9pZCBmaWxsU2hhcGUoR3JhcGhpY3NDb250ZXh0Kik7CisgICAgRmxv
YXRSZWN0IG9iamVjdEJvdW5kaW5nQm94KCkgY29uc3Q7CisgICAgRmxvYXRSZWN0IHN0cm9rZUJv
dW5kaW5nQm94KCk7CisgICAgdm9pZCBzdHJva2VTaGFwZShHcmFwaGljc0NvbnRleHQqKTsKKyAg
ICBib29sIHN0cm9rZUNvbnRhaW5zU2xvd0Nhc2UoY29uc3QgRmxvYXRQb2ludCYpOworICAgIGJv
b2wgZmlsbENvbnRhaW5zU2xvd0Nhc2UoY29uc3QgRmxvYXRQb2ludCYsIGNvbnN0IFdpbmRSdWxl
JikgY29uc3Q7CisgICAgUG9pbnRMb2NhdGlvbiBkZXRlcm1pbmVQb2ludExvY2F0aW9uKGNvbnN0
IEZsb2F0UG9pbnQmLCBjb25zdCBGbG9hdFJlY3QmKSBjb25zdDsKKworcHJpdmF0ZToKKyAgICBG
bG9hdFJlY3QgbV9yZWN0OworfTsKKworfQorCisjZW5kaWYgLy8gRU5BQkxFKFNWRykKKyNlbmRp
ZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNv
dXJjZUNsaXBwZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdS
ZXNvdXJjZUNsaXBwZXIuY3BwCmluZGV4IDIzOGMwOTYuLjFkODIxMjEgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VDbGlwcGVyLmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291cmNlQ2xpcHBl
ci5jcHAKQEAgLTI0Miw3ICsyNDIsNyBAQCBib29sIFJlbmRlclNWR1Jlc291cmNlQ2xpcHBlcjo6
ZHJhd0NvbnRlbnRJbnRvTWFza0ltYWdlKENsaXBwZXJEYXRhKiBjbGlwcGVyRGF0YQogICAgICAg
ICB9CiAKICAgICAgICAgLy8gT25seSBzaGFwZXMsIHBhdGhzIGFuZCB0ZXh0cyBhcmUgYWxsb3dl
ZCBmb3IgY2xpcHBpbmcuCi0gICAgICAgIGlmICghcmVuZGVyZXItPmlzU1ZHUGF0aCgpICYmICFy
ZW5kZXJlci0+aXNTVkdUZXh0KCkpCisgICAgICAgIGlmICghcmVuZGVyZXItPmlzU1ZHU2hhcGUo
KSAmJiAhcmVuZGVyZXItPmlzU1ZHVGV4dCgpKQogICAgICAgICAgICAgY29udGludWU7CiAKICAg
ICAgICAgLy8gU2F2ZSB0aGUgb2xkIFJlbmRlclN0eWxlIG9mIHRoZSBjdXJyZW50IG9iamVjdCBm
b3IgcmVzdG9yaW5nIGFmdGVyIGRyYXdpbmcKQEAgLTI4NCw3ICsyODQsNyBAQCB2b2lkIFJlbmRl
clNWR1Jlc291cmNlQ2xpcHBlcjo6Y2FsY3VsYXRlQ2xpcENvbnRlbnRSZXBhaW50UmVjdCgpCiAg
ICAgICAgIFJlbmRlck9iamVjdCogcmVuZGVyZXIgPSBjaGlsZE5vZGUtPnJlbmRlcmVyKCk7CiAg
ICAgICAgIGlmICghY2hpbGROb2RlLT5pc1NWR0VsZW1lbnQoKSB8fCAhc3RhdGljX2Nhc3Q8U1ZH
RWxlbWVudCo+KGNoaWxkTm9kZSktPmlzU3R5bGVkKCkgfHwgIXJlbmRlcmVyKQogICAgICAgICAg
ICAgY29udGludWU7Ci0gICAgICAgIGlmICghcmVuZGVyZXItPmlzU1ZHUGF0aCgpICYmICFyZW5k
ZXJlci0+aXNTVkdUZXh0KCkgJiYgIXJlbmRlcmVyLT5pc1NWR1NoYWRvd1RyZWVSb290Q29udGFp
bmVyKCkpCisgICAgICAgIGlmICghcmVuZGVyZXItPmlzU1ZHU2hhcGUoKSAmJiAhcmVuZGVyZXIt
PmlzU1ZHVGV4dCgpICYmICFyZW5kZXJlci0+aXNTVkdTaGFkb3dUcmVlUm9vdENvbnRhaW5lcigp
KQogICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgIFJlbmRlclN0eWxlKiBzdHlsZSA9IHJl
bmRlcmVyLT5zdHlsZSgpOwogICAgICAgICBpZiAoIXN0eWxlIHx8IHN0eWxlLT5kaXNwbGF5KCkg
PT0gTk9ORSB8fCBzdHlsZS0+dmlzaWJpbGl0eSgpICE9IFZJU0lCTEUpCkBAIC0zMTAsNyArMzEw
LDcgQEAgYm9vbCBSZW5kZXJTVkdSZXNvdXJjZUNsaXBwZXI6OmhpdFRlc3RDbGlwQ29udGVudChj
b25zdCBGbG9hdFJlY3QmIG9iamVjdEJvdW5kaW4KICAgICAgICAgUmVuZGVyT2JqZWN0KiByZW5k
ZXJlciA9IGNoaWxkTm9kZS0+cmVuZGVyZXIoKTsKICAgICAgICAgaWYgKCFjaGlsZE5vZGUtPmlz
U1ZHRWxlbWVudCgpIHx8ICFzdGF0aWNfY2FzdDxTVkdFbGVtZW50Kj4oY2hpbGROb2RlKS0+aXNT
dHlsZWQoKSB8fCAhcmVuZGVyZXIpCiAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgaWYg
KCFyZW5kZXJlci0+aXNTVkdQYXRoKCkgJiYgIXJlbmRlcmVyLT5pc1NWR1RleHQoKSAmJiAhcmVu
ZGVyZXItPmlzU1ZHU2hhZG93VHJlZVJvb3RDb250YWluZXIoKSkKKyAgICAgICAgaWYgKCFyZW5k
ZXJlci0+aXNTVkdTaGFwZSgpICYmICFyZW5kZXJlci0+aXNTVkdUZXh0KCkgJiYgIXJlbmRlcmVy
LT5pc1NWR1NoYWRvd1RyZWVSb290Q29udGFpbmVyKCkpCiAgICAgICAgICAgICBjb250aW51ZTsK
ICAgICAgICAgSW50UG9pbnQgaGl0UG9pbnQ7CiAgICAgICAgIEhpdFRlc3RSZXN1bHQgcmVzdWx0
KGhpdFBvaW50KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVu
ZGVyU1ZHUmVzb3VyY2VDb250YWluZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2
Zy9SZW5kZXJTVkdSZXNvdXJjZUNvbnRhaW5lci5jcHAKaW5kZXggNzRkNWQ2OS4uYjc0YWQ2YiAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJj
ZUNvbnRhaW5lci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJT
VkdSZXNvdXJjZUNvbnRhaW5lci5jcHAKQEAgLTE4MCw3ICsxODAsNyBAQCB2b2lkIFJlbmRlclNW
R1Jlc291cmNlQ29udGFpbmVyOjpyZWdpc3RlclJlc291cmNlKCkKIC8vIEZJWE1FOiBUaGlzIGRv
ZXMgbm90IGJlbG9uZyBoZXJlLgogQWZmaW5lVHJhbnNmb3JtIFJlbmRlclNWR1Jlc291cmNlQ29u
dGFpbmVyOjp0cmFuc2Zvcm1Pbk5vblNjYWxpbmdTdHJva2UoUmVuZGVyT2JqZWN0KiBvYmplY3Qs
IGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgcmVzb3VyY2VUcmFuc2Zvcm0pCiB7Ci0gICAgaWYgKCFv
YmplY3QtPmlzU1ZHUGF0aCgpKQorICAgIGlmICghb2JqZWN0LT5pc1NWR1NoYXBlKCkpCiAgICAg
ICAgIHJldHVybiByZXNvdXJjZVRyYW5zZm9ybTsKIAogICAgIFNWR1N0eWxlZFRyYW5zZm9ybWFi
bGVFbGVtZW50KiBlbGVtZW50ID0gc3RhdGljX2Nhc3Q8U1ZHU3R5bGVkVHJhbnNmb3JtYWJsZUVs
ZW1lbnQqPihvYmplY3QtPm5vZGUoKSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvc3ZnL1JlbmRlclNWR1NoYXBlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9z
dmcvUmVuZGVyU1ZHU2hhcGUuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAu
LjE4ODUxYzMKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3Zn
L1JlbmRlclNWR1NoYXBlLmNwcApAQCAtMCwwICsxLDQyNiBAQAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAwNCwgMjAwNSwgMjAwNyBOaWtvbGFzIFppbW1lcm1hbm4gPHppbW1lcm1hbm5Aa2RlLm9y
Zz4KKyAqIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSwgMjAwOCBSb2IgQnVpcyA8YnVpc0BrZGUu
b3JnPgorICogQ29weXJpZ2h0IChDKSAyMDA1LCAyMDA3IEVyaWMgU2VpZGVsIDxlcmljQHdlYmtp
dC5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgR29vZ2xlLCBJbmMuCisgKiBDb3B5cmlnaHQg
KEMpIDIwMDkgRGlyayBTY2h1bHplIDxrcml0QHdlYmtpdC5vcmc+CisgKiBDb3B5cmlnaHQgKEMp
IFJlc2VhcmNoIEluIE1vdGlvbiBMaW1pdGVkIDIwMTAuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KiBDb3B5cmlnaHQgKEMpIDIwMDkgSmVmZiBTY2hpbGxlciA8Y29kZWRyZWFkQGdtYWlsLmNvbT4K
KyAqIENvcHlyaWdodCAoQykgMjAxMSBSZW5hdGEgSG9kb3ZhbiA8cmVuaUB3ZWJraXQub3JnPgor
ICogQ29weXJpZ2h0IChDKSAyMDExIFVuaXZlcnNpdHkgb2YgU3plZ2VkCisgKgorICogVGhpcyBs
aWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgor
ICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQ
dWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5k
YXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBv
cHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmli
dXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQg
QU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1F
UkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0
aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWls
cy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGli
cmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsg
c2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUg
U29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9v
ciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpbmNsdWRlICJjb25m
aWcuaCIKKworI2lmIEVOQUJMRShTVkcpCisjaW5jbHVkZSAiUmVuZGVyU1ZHU2hhcGUuaCIKKwor
I2luY2x1ZGUgIkZsb2F0UG9pbnQuaCIKKyNpbmNsdWRlICJGbG9hdFF1YWQuaCIKKyNpbmNsdWRl
ICJHcmFwaGljc0NvbnRleHQuaCIKKyNpbmNsdWRlICJIaXRUZXN0UmVxdWVzdC5oIgorI2luY2x1
ZGUgIlBvaW50ZXJFdmVudHNIaXRSdWxlcy5oIgorI2luY2x1ZGUgIlJlbmRlclNWR0NvbnRhaW5l
ci5oIgorI2luY2x1ZGUgIlJlbmRlclNWR1Jlc291cmNlTWFya2VyLmgiCisjaW5jbHVkZSAiUmVu
ZGVyU1ZHUmVzb3VyY2VTb2xpZENvbG9yLmgiCisjaW5jbHVkZSAiU1ZHUGF0aEVsZW1lbnQuaCIK
KyNpbmNsdWRlICJTVkdSZW5kZXJTdXBwb3J0LmgiCisjaW5jbHVkZSAiU1ZHUmVzb3VyY2VzLmgi
CisjaW5jbHVkZSAiU1ZHU3R5bGVkVHJhbnNmb3JtYWJsZUVsZW1lbnQuaCIKKyNpbmNsdWRlICJT
VkdUcmFuc2Zvcm1MaXN0LmgiCisjaW5jbHVkZSAiU1ZHVVJJUmVmZXJlbmNlLmgiCisjaW5jbHVk
ZSAiU3Ryb2tlU3R5bGVBcHBsaWVyLmgiCisjaW5jbHVkZSA8d3RmL01hdGhFeHRyYXMuaD4KKwor
bmFtZXNwYWNlIFdlYkNvcmUgeworCitSZW5kZXJTVkdTaGFwZTo6UmVuZGVyU1ZHU2hhcGUoU1ZH
U3R5bGVkVHJhbnNmb3JtYWJsZUVsZW1lbnQqIG5vZGUpCisgICAgOiBSZW5kZXJTVkdNb2RlbE9i
amVjdChub2RlKQorICAgICwgbV9uZWVkc0JvdW5kYXJpZXNVcGRhdGUoZmFsc2UpIC8vIGRlZmF1
bHQgaXMgZmFsc2UsIHRoZSBjYWNoZWQgcmVjdHMgYXJlIGVtcHR5IGZyb20gdGhlIGJlZ2lubmlu
ZworICAgICwgbV9uZWVkc1NoYXBlVXBkYXRlKHRydWUpIC8vIGRlZmF1bHQgaXMgdHJ1ZSwgc28g
d2UgZ3JhYiBhIFBhdGggb2JqZWN0IG9uY2UgZnJvbSBTVkdTdHlsZWRUcmFuc2Zvcm1hYmxlRWxl
bWVudAorICAgICwgbV9uZWVkc1RyYW5zZm9ybVVwZGF0ZSh0cnVlKSAvLyBkZWZhdWx0IGlzIHRy
dWUsIHNvIHdlIGdyYWIgYSBBZmZpbmVUcmFuc2Zvcm0gb2JqZWN0IG9uY2UgZnJvbSBTVkdTdHls
ZWRUcmFuc2Zvcm1hYmxlRWxlbWVudAoreworfQorCitSZW5kZXJTVkdTaGFwZTo6flJlbmRlclNW
R1NoYXBlKCkKK3sKK30KKwordm9pZCBSZW5kZXJTVkdTaGFwZTo6Y3JlYXRlU2hhcGUoKQorewor
ICAgIG1fcGF0aCA9IGFkb3B0UHRyKG5ldyBQYXRoKTsKKyAgICBBU1NFUlQoaXNFbXB0eSgpKTsK
KworICAgIFNWR1BhdGhFbGVtZW50KiBlbGVtZW50ID0gc3RhdGljX2Nhc3Q8U1ZHUGF0aEVsZW1l
bnQqPihub2RlKCkpOworICAgIGVsZW1lbnQtPnRvUGF0aERhdGEocGF0aCgpKTsKK30KKworYm9v
bCBSZW5kZXJTVkdTaGFwZTo6aXNFbXB0eSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIHBhdGgoKS5p
c0VtcHR5KCk7Cit9CisKK3ZvaWQgUmVuZGVyU1ZHU2hhcGU6OmZpbGxTaGFwZShHcmFwaGljc0Nv
bnRleHQqIGNvbnRleHQpCit7CisgICAgY29udGV4dC0+ZmlsbFBhdGgocGF0aCgpKTsKK30KKwor
RmxvYXRSZWN0IFJlbmRlclNWR1NoYXBlOjpvYmplY3RCb3VuZGluZ0JveCgpIGNvbnN0Cit7Cisg
ICAgcmV0dXJuIG1fcGF0aC0+Ym91bmRpbmdSZWN0KCk7Cit9CisKK0Zsb2F0UmVjdCBSZW5kZXJT
VkdTaGFwZTo6c3Ryb2tlQm91bmRpbmdCb3goKQoreworICAgIEJvdW5kaW5nUmVjdFN0cm9rZVN0
eWxlQXBwbGllciBzdHJva2VTdHlsZSh0aGlzLCBzdHlsZSgpKTsKKyAgICByZXR1cm4gcGF0aCgp
LnN0cm9rZUJvdW5kaW5nUmVjdCgmc3Ryb2tlU3R5bGUpOworfQorCit2b2lkIFJlbmRlclNWR1No
YXBlOjpzdHJva2VTaGFwZShHcmFwaGljc0NvbnRleHQqIGNvbnRleHQpCit7CisgICAgY29udGV4
dC0+c3Ryb2tlUGF0aChwYXRoKCkpOworfQorCitib29sIFJlbmRlclNWR1NoYXBlOjpzdHJva2VD
b250YWluc1Nsb3dDYXNlKGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50KQoreworICAgIEJvdW5kaW5n
UmVjdFN0cm9rZVN0eWxlQXBwbGllciBhcHBsaWVyKHRoaXMsIHN0eWxlKCkpOworICAgIHJldHVy
biBwYXRoKCkuc3Ryb2tlQ29udGFpbnMoJmFwcGxpZXIsIHBvaW50KTsKK30KKworYm9vbCBSZW5k
ZXJTVkdTaGFwZTo6ZmlsbENvbnRhaW5zU2xvd0Nhc2UoY29uc3QgRmxvYXRQb2ludCYgcG9pbnQs
IGNvbnN0IFdpbmRSdWxlJiBmaWxsUnVsZSkgY29uc3QKK3sKKyAgICByZXR1cm4gcGF0aCgpLmNv
bnRhaW5zKHBvaW50LCBmaWxsUnVsZSk7Cit9CisKK2Jvb2wgUmVuZGVyU1ZHU2hhcGU6OmZpbGxD
b250YWlucyhjb25zdCBGbG9hdFBvaW50JiBwb2ludCwgYm9vbCByZXF1aXJlc0ZpbGwsIFdpbmRS
dWxlIGZpbGxSdWxlKQoreworICAgIGlmICghbV9maWxsQm91bmRpbmdCb3guY29udGFpbnMocG9p
bnQpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBDb2xvciBmYWxsYmFja0NvbG9yOwor
ICAgIGlmIChyZXF1aXJlc0ZpbGwgJiYgIVJlbmRlclNWR1Jlc291cmNlOjpmaWxsUGFpbnRpbmdS
ZXNvdXJjZSh0aGlzLCBzdHlsZSgpLCBmYWxsYmFja0NvbG9yKSkKKyAgICAgICAgcmV0dXJuIGZh
bHNlOworCisgICAgcmV0dXJuIGZpbGxDb250YWluc1Nsb3dDYXNlKHBvaW50LCBmaWxsUnVsZSk7
Cit9CisKK2Jvb2wgUmVuZGVyU1ZHU2hhcGU6OnN0cm9rZUNvbnRhaW5zKGNvbnN0IEZsb2F0UG9p
bnQmIHBvaW50LCBib29sIHJlcXVpcmVzU3Ryb2tlKQoreworICAgIGlmICghbV9zdHJva2VBbmRN
YXJrZXJCb3VuZGluZ0JveC5jb250YWlucyhwb2ludCkpCisgICAgICAgIHJldHVybiBmYWxzZTsK
KworICAgIENvbG9yIGZhbGxiYWNrQ29sb3I7CisgICAgaWYgKHJlcXVpcmVzU3Ryb2tlICYmICFS
ZW5kZXJTVkdSZXNvdXJjZTo6c3Ryb2tlUGFpbnRpbmdSZXNvdXJjZSh0aGlzLCBzdHlsZSgpLCBm
YWxsYmFja0NvbG9yKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgaWYgKHNob3VsZFN0
cm9rZVplcm9MZW5ndGhTdWJwYXRoKCkpCisgICAgICAgIHJldHVybiB6ZXJvTGVuZ3RoU3VicGF0
aFJlY3QoKS5jb250YWlucyhwb2ludCk7CisKKyAgICByZXR1cm4gc3Ryb2tlQ29udGFpbnNTbG93
Q2FzZShwb2ludCk7Cit9CisKK3ZvaWQgUmVuZGVyU1ZHU2hhcGU6OmxheW91dCgpCit7CisgICAg
TGF5b3V0UmVwYWludGVyIHJlcGFpbnRlcigqdGhpcywgY2hlY2tGb3JSZXBhaW50RHVyaW5nTGF5
b3V0KCkgJiYgc2VsZk5lZWRzTGF5b3V0KCkpOworICAgIFNWR1N0eWxlZFRyYW5zZm9ybWFibGVF
bGVtZW50KiBlbGVtZW50ID0gc3RhdGljX2Nhc3Q8U1ZHU3R5bGVkVHJhbnNmb3JtYWJsZUVsZW1l
bnQqPihub2RlKCkpOworCisgICAgYm9vbCB1cGRhdGVDYWNoZWRCb3VuZGFyaWVzSW5QYXJlbnRz
ID0gZmFsc2U7CisKKyAgICBib29sIG5lZWRzU2hhcGVVcGRhdGUgPSBtX25lZWRzU2hhcGVVcGRh
dGU7CisgICAgaWYgKG5lZWRzU2hhcGVVcGRhdGUpIHsKKyAgICAgICAgY3JlYXRlU2hhcGUoKTsK
KyAgICAgICAgbV9uZWVkc1NoYXBlVXBkYXRlID0gZmFsc2U7CisgICAgICAgIHVwZGF0ZUNhY2hl
ZEJvdW5kYXJpZXNJblBhcmVudHMgPSB0cnVlOworICAgIH0KKworICAgIGlmIChtX25lZWRzVHJh
bnNmb3JtVXBkYXRlKSB7CisgICAgICAgIG1fbG9jYWxUcmFuc2Zvcm0gPSBlbGVtZW50LT5hbmlt
YXRlZExvY2FsVHJhbnNmb3JtKCk7CisgICAgICAgIG1fbmVlZHNUcmFuc2Zvcm1VcGRhdGUgPSBm
YWxzZTsKKyAgICAgICAgdXBkYXRlQ2FjaGVkQm91bmRhcmllc0luUGFyZW50cyA9IHRydWU7Cisg
ICAgfQorCisgICAgaWYgKG1fbmVlZHNCb3VuZGFyaWVzVXBkYXRlKQorICAgICAgICB1cGRhdGVD
YWNoZWRCb3VuZGFyaWVzSW5QYXJlbnRzID0gdHJ1ZTsKKworICAgIC8vIEludmFsaWRhdGUgYWxs
IHJlc291cmNlcyBvZiB0aGlzIGNsaWVudCBpZiBvdXIgbGF5b3V0IGNoYW5nZWQuCisgICAgaWYg
KG1fZXZlckhhZExheW91dCAmJiBzZWxmTmVlZHNMYXlvdXQoKSkgeworICAgICAgICBTVkdSZXNv
dXJjZXNDYWNoZTo6Y2xpZW50TGF5b3V0Q2hhbmdlZCh0aGlzKTsKKyAgICAgICAgbV9tYXJrZXJM
YXlvdXRJbmZvLmNsZWFyKCk7CisgICAgfQorCisgICAgLy8gQXQgdGhpcyBwb2ludCBMYXlvdXRS
ZXBhaW50ZXIgYWxyZWFkeSBncmFiYmVkIHRoZSBvbGQgYm91bmRzLAorICAgIC8vIHJlY2FsY3Vs
YXRlIHRoZW0gbm93IHNvIHJlcGFpbnRBZnRlckxheW91dCgpIHVzZXMgdGhlIG5ldyBib3VuZHMu
CisgICAgaWYgKG5lZWRzU2hhcGVVcGRhdGUgfHwgbV9uZWVkc0JvdW5kYXJpZXNVcGRhdGUpIHsK
KyAgICAgICAgdXBkYXRlQ2FjaGVkQm91bmRhcmllcygpOworICAgICAgICBtX25lZWRzQm91bmRh
cmllc1VwZGF0ZSA9IGZhbHNlOworICAgIH0KKworICAgIC8vIElmIG91ciBib3VuZHMgY2hhbmdl
ZCwgbm90aWZ5IHRoZSBwYXJlbnRzLgorICAgIGlmICh1cGRhdGVDYWNoZWRCb3VuZGFyaWVzSW5Q
YXJlbnRzKQorICAgICAgICBSZW5kZXJTVkdNb2RlbE9iamVjdDo6c2V0TmVlZHNCb3VuZGFyaWVz
VXBkYXRlKCk7CisKKyAgICByZXBhaW50ZXIucmVwYWludEFmdGVyTGF5b3V0KCk7CisgICAgc2V0
TmVlZHNMYXlvdXQoZmFsc2UpOworfQorCitib29sIFJlbmRlclNWR1NoYXBlOjpzaG91bGRTdHJv
a2VaZXJvTGVuZ3RoU3VicGF0aCgpIGNvbnN0Cit7CisgICAgLy8gU3BlYygxMS40KTogQW55IHpl
cm8gbGVuZ3RoIHN1YnBhdGggc2hhbGwgbm90IGJlIHN0cm9rZWQgaWYgdGhlIOKAmHN0cm9rZS1s
aW5lY2Fw4oCZIHByb3BlcnR5IGhhcyBhIHZhbHVlIG9mIGJ1dHQKKyAgICAvLyBidXQgc2hhbGwg
YmUgc3Ryb2tlZCBpZiB0aGUg4oCYc3Ryb2tlLWxpbmVjYXDigJkgcHJvcGVydHkgaGFzIGEgdmFs
dWUgb2Ygcm91bmQgb3Igc3F1YXJlCisgICAgcmV0dXJuIHN0eWxlKCktPnN2Z1N0eWxlKCktPmhh
c1N0cm9rZSgpICYmIHN0eWxlKCktPnN2Z1N0eWxlKCktPmNhcFN0eWxlKCkgIT0gQnV0dENhcCAm
JiAhbV9maWxsQm91bmRpbmdCb3gud2lkdGgoKSAmJiAhbV9maWxsQm91bmRpbmdCb3guaGVpZ2h0
KCk7Cit9CisKK0Zsb2F0UmVjdCBSZW5kZXJTVkdTaGFwZTo6emVyb0xlbmd0aFN1YnBhdGhSZWN0
KCkgY29uc3QKK3sKKyAgICBmbG9hdCBzdHJva2VXaWR0aCA9IHRoaXMtPnN0cm9rZVdpZHRoKCk7
CisgICAgcmV0dXJuIEZsb2F0UmVjdChtX2ZpbGxCb3VuZGluZ0JveC54KCkgLSBzdHJva2VXaWR0
aCAvIDIsIG1fZmlsbEJvdW5kaW5nQm94LnkoKSAtIHN0cm9rZVdpZHRoIC8gMiwgc3Ryb2tlV2lk
dGgsIHN0cm9rZVdpZHRoKTsKK30KKwordm9pZCBSZW5kZXJTVkdTaGFwZTo6c2V0dXBTcXVhcmVD
YXBQYXRoKFBhdGgqJiB1c2VQYXRoLCBpbnQmIGFwcGx5TW9kZSkKK3sKKyAgICAvLyBTcGVjKDEx
LjQpOiBBbnkgemVybyBsZW5ndGggc3VicGF0aCBzaGFsbCBub3QgYmUgc3Ryb2tlZCBpZiB0aGUg
4oCYc3Ryb2tlLWxpbmVjYXDigJkgcHJvcGVydHkgaGFzIGEgdmFsdWUgb2YgYnV0dAorICAgIC8v
IGJ1dCBzaGFsbCBiZSBzdHJva2VkIGlmIHRoZSDigJhzdHJva2UtbGluZWNhcOKAmSBwcm9wZXJ0
eSBoYXMgYSB2YWx1ZSBvZiByb3VuZCBvciBzcXVhcmUKKyAgICBERUZJTkVfU1RBVElDX0xPQ0FM
KFBhdGgsIHRlbXBQYXRoLCAoKSk7CisKKyAgICBhcHBseU1vZGUgPSBBcHBseVRvRmlsbE1vZGU7
CisgICAgdXNlUGF0aCA9ICZ0ZW1wUGF0aDsKKyAgICB1c2VQYXRoLT5jbGVhcigpOworICAgIGlm
IChzdHlsZSgpLT5zdmdTdHlsZSgpLT5jYXBTdHlsZSgpID09IFNxdWFyZUNhcCkKKyAgICAgICAg
dXNlUGF0aC0+YWRkUmVjdCh6ZXJvTGVuZ3RoU3VicGF0aFJlY3QoKSk7CisgICAgZWxzZQorICAg
ICAgICB1c2VQYXRoLT5hZGRFbGxpcHNlKHplcm9MZW5ndGhTdWJwYXRoUmVjdCgpKTsKK30KKwor
Ym9vbCBSZW5kZXJTVkdTaGFwZTo6c2V0dXBOb25TY2FsaW5nU3Ryb2tlUGF0aChQYXRoKiYgdXNl
UGF0aCwgR3JhcGhpY3NDb250ZXh0U3RhdGVTYXZlciYgc3RhdGVTYXZlcikKK3sKKyAgICBERUZJ
TkVfU1RBVElDX0xPQ0FMKFBhdGgsIHRlbXBQYXRoLCAoKSk7CisKKyAgICBTVkdTdHlsZWRUcmFu
c2Zvcm1hYmxlRWxlbWVudCogZWxlbWVudCA9IHN0YXRpY19jYXN0PFNWR1N0eWxlZFRyYW5zZm9y
bWFibGVFbGVtZW50Kj4obm9kZSgpKTsKKyAgICBBZmZpbmVUcmFuc2Zvcm0gbm9uU2NhbGluZ1N0
cm9rZVRyYW5zZm9ybSA9IGVsZW1lbnQtPmdldFNjcmVlbkNUTShTVkdMb2NhdGFibGU6OkRpc2Fs
bG93U3R5bGVVcGRhdGUpOworICAgIGlmICghbm9uU2NhbGluZ1N0cm9rZVRyYW5zZm9ybS5pc0lu
dmVydGlibGUoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgdGVtcFBhdGggPSAqbV9w
YXRoOworICAgIHVzZVBhdGggPSAmdGVtcFBhdGg7CisgICAgdGVtcFBhdGgudHJhbnNmb3JtKG5v
blNjYWxpbmdTdHJva2VUcmFuc2Zvcm0pOworCisgICAgc3RhdGVTYXZlci5zYXZlKCk7CisgICAg
c3RhdGVTYXZlci5jb250ZXh0KCktPmNvbmNhdENUTShub25TY2FsaW5nU3Ryb2tlVHJhbnNmb3Jt
LmludmVyc2UoKSk7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK3ZvaWQgUmVuZGVyU1ZHU2hhcGU6
OmZpbGxBbmRTdHJva2VQYXRoKEdyYXBoaWNzQ29udGV4dCogY29udGV4dCkKK3sKKyAgICBSZW5k
ZXJTdHlsZSogc3R5bGUgPSB0aGlzLT5zdHlsZSgpOworCisgICAgQ29sb3IgZmFsbGJhY2tDb2xv
cjsKKyAgICBpZiAoUmVuZGVyU1ZHUmVzb3VyY2UqIGZpbGxQYWludGluZ1Jlc291cmNlID0gUmVu
ZGVyU1ZHUmVzb3VyY2U6OmZpbGxQYWludGluZ1Jlc291cmNlKHRoaXMsIHN0eWxlLCBmYWxsYmFj
a0NvbG9yKSkgeworICAgICAgICBpZiAoZmlsbFBhaW50aW5nUmVzb3VyY2UtPmFwcGx5UmVzb3Vy
Y2UodGhpcywgc3R5bGUsIGNvbnRleHQsIEFwcGx5VG9GaWxsTW9kZSkpIHsKKyAgICAgICAgICAg
IGZpbGxTaGFwZShjb250ZXh0KTsKKyAgICAgICAgfSBlbHNlIGlmIChmYWxsYmFja0NvbG9yLmlz
VmFsaWQoKSkgeworICAgICAgICAgICAgUmVuZGVyU1ZHUmVzb3VyY2VTb2xpZENvbG9yKiBmYWxs
YmFja1Jlc291cmNlID0gUmVuZGVyU1ZHUmVzb3VyY2U6OnNoYXJlZFNvbGlkUGFpbnRpbmdSZXNv
dXJjZSgpOworICAgICAgICAgICAgZmFsbGJhY2tSZXNvdXJjZS0+c2V0Q29sb3IoZmFsbGJhY2tD
b2xvcik7CisgICAgICAgICAgICBpZiAoZmFsbGJhY2tSZXNvdXJjZS0+YXBwbHlSZXNvdXJjZSh0
aGlzLCBzdHlsZSwgY29udGV4dCwgQXBwbHlUb0ZpbGxNb2RlKSkKKyAgICAgICAgICAgICAgICBm
aWxsU2hhcGUoY29udGV4dCk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBmYWxsYmFja0NvbG9y
ID0gQ29sb3IoKTsKKyAgICBSZW5kZXJTVkdSZXNvdXJjZSogc3Ryb2tlUGFpbnRpbmdSZXNvdXJj
ZSA9IFJlbmRlclNWR1Jlc291cmNlOjpzdHJva2VQYWludGluZ1Jlc291cmNlKHRoaXMsIHN0eWxl
LCBmYWxsYmFja0NvbG9yKTsKKyAgICBpZiAoIXN0cm9rZVBhaW50aW5nUmVzb3VyY2UpCisgICAg
ICAgIHJldHVybjsKKworICAgIFBhdGgqIHVzZVBhdGg7CisgICAgaW50IGFwcGx5TW9kZSA9IEFw
cGx5VG9TdHJva2VNb2RlOworCisgICAgYm9vbCBub25TY2FsaW5nU3Ryb2tlID0gc3R5bGUtPnN2
Z1N0eWxlKCktPnZlY3RvckVmZmVjdCgpID09IFZFX05PTl9TQ0FMSU5HX1NUUk9LRTsKKworICAg
IEdyYXBoaWNzQ29udGV4dFN0YXRlU2F2ZXIgc3RhdGVTYXZlcigqY29udGV4dCwgZmFsc2UpOwor
CisgICAgLy8gU3BlYygxMS40KTogQW55IHplcm8gbGVuZ3RoIHN1YnBhdGggc2hhbGwgbm90IGJl
IHN0cm9rZWQgaWYgdGhlIOKAmHN0cm9rZS1saW5lY2Fw4oCZIHByb3BlcnR5IGhhcyBhIHZhbHVl
IG9mIGJ1dHQKKyAgICAvLyBidXQgc2hhbGwgYmUgc3Ryb2tlZCBpZiB0aGUg4oCYc3Ryb2tlLWxp
bmVjYXDigJkgcHJvcGVydHkgaGFzIGEgdmFsdWUgb2Ygcm91bmQgb3Igc3F1YXJlCisgICAgLy8g
RklYTUU6IHRoaXMgZG9lcyBub3Qgd29yayBmb3IgemVyby1sZW5ndGggc3VicGF0aHMsIG9ubHkg
d2hlbiB0b3RhbCBwYXRoIGlzIHplcm8tbGVuZ3RoCisgICAgaWYgKHNob3VsZFN0cm9rZVplcm9M
ZW5ndGhTdWJwYXRoKCkpIHsKKyAgICAgICAgUmVuZGVyU1ZHU2hhcGU6OmNyZWF0ZVNoYXBlKCk7
CisgICAgICAgIHVzZVBhdGggPSBtX3BhdGguZ2V0KCk7CisgICAgICAgIHNldHVwU3F1YXJlQ2Fw
UGF0aCh1c2VQYXRoLCBhcHBseU1vZGUpOworICAgIH0gZWxzZSBpZiAobm9uU2NhbGluZ1N0cm9r
ZSkgeworICAgICAgICBSZW5kZXJTVkdTaGFwZTo6Y3JlYXRlU2hhcGUoKTsKKyAgICAgICAgdXNl
UGF0aCA9IG1fcGF0aC5nZXQoKTsKKyAgICAgICAgaWYgKCFzZXR1cE5vblNjYWxpbmdTdHJva2VQ
YXRoKHVzZVBhdGgsIHN0YXRlU2F2ZXIpKQorICAgICAgICAgICAgcmV0dXJuOworICAgIH0KKyAg
ICBpZiAoc3Ryb2tlUGFpbnRpbmdSZXNvdXJjZS0+YXBwbHlSZXNvdXJjZSh0aGlzLCBzdHlsZSwg
Y29udGV4dCwgYXBwbHlNb2RlKSkgeworICAgICAgICBzdHJva2VTaGFwZShjb250ZXh0KTsKKyAg
ICAgICAgcmV0dXJuOworICAgIH0KKyAgICBpZiAoIWZhbGxiYWNrQ29sb3IuaXNWYWxpZCgpKQor
ICAgICAgICByZXR1cm47CisgICAgUmVuZGVyU1ZHUmVzb3VyY2VTb2xpZENvbG9yKiBmYWxsYmFj
a1Jlc291cmNlID0gUmVuZGVyU1ZHUmVzb3VyY2U6OnNoYXJlZFNvbGlkUGFpbnRpbmdSZXNvdXJj
ZSgpOworICAgIGZhbGxiYWNrUmVzb3VyY2UtPnNldENvbG9yKGZhbGxiYWNrQ29sb3IpOworICAg
IGlmIChmYWxsYmFja1Jlc291cmNlLT5hcHBseVJlc291cmNlKHRoaXMsIHN0eWxlLCBjb250ZXh0
LCBhcHBseU1vZGUpKQorICAgICAgICBzdHJva2VTaGFwZShjb250ZXh0KTsKK30KKwordm9pZCBS
ZW5kZXJTVkdTaGFwZTo6cGFpbnQoUGFpbnRJbmZvJiBwYWludEluZm8sIGNvbnN0IEludFBvaW50
JikKK3sKKyAgICBpZiAocGFpbnRJbmZvLmNvbnRleHQtPnBhaW50aW5nRGlzYWJsZWQoKSB8fCBz
dHlsZSgpLT52aXNpYmlsaXR5KCkgPT0gSElEREVOIHx8IGlzRW1wdHkoKSkKKyAgICAgICAgcmV0
dXJuOworICAgIEZsb2F0UmVjdCBib3VuZGluZ0JveCA9IHJlcGFpbnRSZWN0SW5Mb2NhbENvb3Jk
aW5hdGVzKCk7CisgICAgaWYgKCFTVkdSZW5kZXJTdXBwb3J0OjpwYWludEluZm9JbnRlcnNlY3Rz
UmVwYWludFJlY3QoYm91bmRpbmdCb3gsIG1fbG9jYWxUcmFuc2Zvcm0sIHBhaW50SW5mbykpCisg
ICAgICAgIHJldHVybjsKKyAgICBQYWludEluZm8gY2hpbGRQYWludEluZm8ocGFpbnRJbmZvKTsK
KyAgICBib29sIGRyYXdzT3V0bGluZSA9IHN0eWxlKCktPm91dGxpbmVXaWR0aCgpICYmIChjaGls
ZFBhaW50SW5mby5waGFzZSA9PSBQYWludFBoYXNlT3V0bGluZSB8fCBjaGlsZFBhaW50SW5mby5w
aGFzZSA9PSBQYWludFBoYXNlU2VsZk91dGxpbmUpOworICAgIGlmIChkcmF3c091dGxpbmUgfHwg
Y2hpbGRQYWludEluZm8ucGhhc2UgPT0gUGFpbnRQaGFzZUZvcmVncm91bmQpIHsKKyAgICAgICAg
R3JhcGhpY3NDb250ZXh0U3RhdGVTYXZlciBzdGF0ZVNhdmVyKCpjaGlsZFBhaW50SW5mby5jb250
ZXh0KTsKKyAgICAgICAgY2hpbGRQYWludEluZm8uYXBwbHlUcmFuc2Zvcm0obV9sb2NhbFRyYW5z
Zm9ybSk7CisKKyAgICAgICAgaWYgKGNoaWxkUGFpbnRJbmZvLnBoYXNlID09IFBhaW50UGhhc2VG
b3JlZ3JvdW5kKSB7CisgICAgICAgICAgICBQYWludEluZm8gc2F2ZWRJbmZvKGNoaWxkUGFpbnRJ
bmZvKTsKKworICAgICAgICAgICAgaWYgKFNWR1JlbmRlclN1cHBvcnQ6OnByZXBhcmVUb1JlbmRl
clNWR0NvbnRlbnQodGhpcywgY2hpbGRQYWludEluZm8pKSB7CisgICAgICAgICAgICAgICAgY29u
c3QgU1ZHUmVuZGVyU3R5bGUqIHN2Z1N0eWxlID0gc3R5bGUoKS0+c3ZnU3R5bGUoKTsKKyAgICAg
ICAgICAgICAgICBpZiAoc3ZnU3R5bGUtPnNoYXBlUmVuZGVyaW5nKCkgPT0gU1JfQ1JJU1BFREdF
UykKKyAgICAgICAgICAgICAgICAgICAgY2hpbGRQYWludEluZm8uY29udGV4dC0+c2V0U2hvdWxk
QW50aWFsaWFzKGZhbHNlKTsKKworICAgICAgICAgICAgICAgIGZpbGxBbmRTdHJva2VQYXRoKGNo
aWxkUGFpbnRJbmZvLmNvbnRleHQpOworCisgICAgICAgICAgICAgICAgaWYgKHN2Z1N0eWxlLT5o
YXNNYXJrZXJzKCkpCisgICAgICAgICAgICAgICAgICAgIG1fbWFya2VyTGF5b3V0SW5mby5kcmF3
TWFya2VycyhjaGlsZFBhaW50SW5mbyk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIFNW
R1JlbmRlclN1cHBvcnQ6OmZpbmlzaFJlbmRlclNWR0NvbnRlbnQodGhpcywgY2hpbGRQYWludElu
Zm8sIHNhdmVkSW5mby5jb250ZXh0KTsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChkcmF3c091
dGxpbmUpCisgICAgICAgICAgICBwYWludE91dGxpbmUoY2hpbGRQYWludEluZm8uY29udGV4dCwg
SW50UmVjdChib3VuZGluZ0JveCkpOworICAgIH0KK30KKworLy8gVGhpcyBtZXRob2QgaXMgY2Fs
bGVkIGZyb20gaW5zaWRlIHBhaW50T3V0bGluZSgpIHNpbmNlIHdlIGNhbGwgcGFpbnRPdXRsaW5l
KCkKKy8vIHdoaWxlIHRyYW5zZm9ybWVkIHRvIG91ciBjb29yZCBzeXN0ZW0sIHJldHVybiBsb2Nh
bCBjb29yZHMKK3ZvaWQgUmVuZGVyU1ZHU2hhcGU6OmFkZEZvY3VzUmluZ1JlY3RzKFZlY3RvcjxM
YXlvdXRSZWN0PiYgcmVjdHMsIGNvbnN0IExheW91dFBvaW50JikKK3sKKyAgICBMYXlvdXRSZWN0
IHJlY3QgPSBlbmNsb3NpbmdMYXlvdXRSZWN0KHJlcGFpbnRSZWN0SW5Mb2NhbENvb3JkaW5hdGVz
KCkpOworICAgIGlmICghcmVjdC5pc0VtcHR5KCkpCisgICAgICAgIHJlY3RzLmFwcGVuZChyZWN0
KTsKK30KKworYm9vbCBSZW5kZXJTVkdTaGFwZTo6bm9kZUF0RmxvYXRQb2ludChjb25zdCBIaXRU
ZXN0UmVxdWVzdCYgcmVxdWVzdCwgSGl0VGVzdFJlc3VsdCYgcmVzdWx0LCBjb25zdCBGbG9hdFBv
aW50JiBwb2ludEluUGFyZW50LCBIaXRUZXN0QWN0aW9uIGhpdFRlc3RBY3Rpb24pCit7CisgICAg
Ly8gV2Ugb25seSBkcmF3IGluIHRoZSBmb3Jncm91bmQgcGhhc2UsIHNvIHdlIG9ubHkgaGl0LXRl
c3QgdGhlbi4KKyAgICBpZiAoaGl0VGVzdEFjdGlvbiAhPSBIaXRUZXN0Rm9yZWdyb3VuZCkKKyAg
ICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgRmxvYXRQb2ludCBsb2NhbFBvaW50ID0gbV9sb2Nh
bFRyYW5zZm9ybS5pbnZlcnNlKCkubWFwUG9pbnQocG9pbnRJblBhcmVudCk7CisKKyAgICBpZiAo
IVNWR1JlbmRlclN1cHBvcnQ6OnBvaW50SW5DbGlwcGluZ0FyZWEodGhpcywgbG9jYWxQb2ludCkp
CisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIFBvaW50ZXJFdmVudHNIaXRSdWxlcyBoaXRS
dWxlcyhQb2ludGVyRXZlbnRzSGl0UnVsZXM6OlNWR19QQVRIX0hJVFRFU1RJTkcsIHJlcXVlc3Qs
IHN0eWxlKCktPnBvaW50ZXJFdmVudHMoKSk7CisgICAgYm9vbCBpc1Zpc2libGUgPSAoc3R5bGUo
KS0+dmlzaWJpbGl0eSgpID09IFZJU0lCTEUpOworICAgIGlmIChpc1Zpc2libGUgfHwgIWhpdFJ1
bGVzLnJlcXVpcmVWaXNpYmxlKSB7CisgICAgICAgIGNvbnN0IFNWR1JlbmRlclN0eWxlKiBzdmdT
dHlsZSA9IHN0eWxlKCktPnN2Z1N0eWxlKCk7CisgICAgICAgIFdpbmRSdWxlIGZpbGxSdWxlID0g
c3ZnU3R5bGUtPmZpbGxSdWxlKCk7CisgICAgICAgIGlmIChyZXF1ZXN0LnN2Z0NsaXBDb250ZW50
KCkpCisgICAgICAgICAgICBmaWxsUnVsZSA9IHN2Z1N0eWxlLT5jbGlwUnVsZSgpOworICAgICAg
ICBpZiAoKGhpdFJ1bGVzLmNhbkhpdFN0cm9rZSAmJiAoc3ZnU3R5bGUtPmhhc1N0cm9rZSgpIHx8
ICFoaXRSdWxlcy5yZXF1aXJlU3Ryb2tlKSAmJiBzdHJva2VDb250YWlucyhsb2NhbFBvaW50LCBo
aXRSdWxlcy5yZXF1aXJlU3Ryb2tlKSkKKyAgICAgICAgICAgIHx8IChoaXRSdWxlcy5jYW5IaXRG
aWxsICYmIChzdmdTdHlsZS0+aGFzRmlsbCgpIHx8ICFoaXRSdWxlcy5yZXF1aXJlRmlsbCkgJiYg
ZmlsbENvbnRhaW5zKGxvY2FsUG9pbnQsIGhpdFJ1bGVzLnJlcXVpcmVGaWxsLCBmaWxsUnVsZSkp
KSB7CisgICAgICAgICAgICB1cGRhdGVIaXRUZXN0UmVzdWx0KHJlc3VsdCwgcm91bmRlZExheW91
dFBvaW50KGxvY2FsUG9pbnQpKTsKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9
CisgICAgfQorICAgIHJldHVybiBmYWxzZTsKK30KKworRmxvYXRSZWN0IFJlbmRlclNWR1NoYXBl
OjpjYWxjdWxhdGVNYXJrZXJCb3VuZHNJZk5lZWRlZCgpCit7CisgICAgU1ZHRWxlbWVudCogc3Zn
RWxlbWVudCA9IHN0YXRpY19jYXN0PFNWR0VsZW1lbnQqPihub2RlKCkpOworICAgIEFTU0VSVChz
dmdFbGVtZW50ICYmIHN2Z0VsZW1lbnQtPmRvY3VtZW50KCkpOworICAgIGlmICghc3ZnRWxlbWVu
dC0+aXNTdHlsZWQoKSkKKyAgICAgICAgcmV0dXJuIEZsb2F0UmVjdCgpOworCisgICAgU1ZHU3R5
bGVkRWxlbWVudCogc3R5bGVkRWxlbWVudCA9IHN0YXRpY19jYXN0PFNWR1N0eWxlZEVsZW1lbnQq
PihzdmdFbGVtZW50KTsKKyAgICBpZiAoIXN0eWxlZEVsZW1lbnQtPnN1cHBvcnRzTWFya2Vycygp
KQorICAgICAgICByZXR1cm4gRmxvYXRSZWN0KCk7CisKKyAgICBBU1NFUlQoc3R5bGUoKS0+c3Zn
U3R5bGUoKS0+aGFzTWFya2VycygpKTsKKworICAgIFNWR1Jlc291cmNlcyogcmVzb3VyY2VzID0g
U1ZHUmVzb3VyY2VzQ2FjaGU6OmNhY2hlZFJlc291cmNlc0ZvclJlbmRlck9iamVjdCh0aGlzKTsK
KyAgICBpZiAoIXJlc291cmNlcykKKyAgICAgICAgcmV0dXJuIEZsb2F0UmVjdCgpOworCisgICAg
UmVuZGVyU1ZHUmVzb3VyY2VNYXJrZXIqIG1hcmtlclN0YXJ0ID0gcmVzb3VyY2VzLT5tYXJrZXJT
dGFydCgpOworICAgIFJlbmRlclNWR1Jlc291cmNlTWFya2VyKiBtYXJrZXJNaWQgPSByZXNvdXJj
ZXMtPm1hcmtlck1pZCgpOworICAgIFJlbmRlclNWR1Jlc291cmNlTWFya2VyKiBtYXJrZXJFbmQg
PSByZXNvdXJjZXMtPm1hcmtlckVuZCgpOworICAgIGlmICghbWFya2VyU3RhcnQgJiYgIW1hcmtl
ck1pZCAmJiAhbWFya2VyRW5kKQorICAgICAgICByZXR1cm4gRmxvYXRSZWN0KCk7CisKKyAgICBy
ZXR1cm4gbV9tYXJrZXJMYXlvdXRJbmZvLmNhbGN1bGF0ZUJvdW5kYXJpZXMobWFya2VyU3RhcnQs
IG1hcmtlck1pZCwgbWFya2VyRW5kLCBzdHJva2VXaWR0aCgpLCBwYXRoKCkpOworfQorCit2b2lk
IFJlbmRlclNWR1NoYXBlOjp1cGRhdGVDYWNoZWRCb3VuZGFyaWVzKCkKK3sKKyAgICBpZiAoaXNF
bXB0eSgpKSB7CisgICAgICAgIG1fZmlsbEJvdW5kaW5nQm94ID0gRmxvYXRSZWN0KCk7CisgICAg
ICAgIG1fc3Ryb2tlQW5kTWFya2VyQm91bmRpbmdCb3ggPSBGbG9hdFJlY3QoKTsKKyAgICAgICAg
bV9yZXBhaW50Qm91bmRpbmdCb3ggPSBGbG9hdFJlY3QoKTsKKyAgICAgICAgcmV0dXJuOworICAg
IH0KKworICAgIC8vIENhY2hlIF91bmNsaXBwZWRfIGZpbGwgYm91bmRpbmcgYm94LCB1c2VkIGZv
ciBjYWxjdWxhdGlvbnMgaW4gcmVzb3VyY2VzCisgICAgbV9maWxsQm91bmRpbmdCb3ggPSBvYmpl
Y3RCb3VuZGluZ0JveCgpOworCisgICAgLy8gU3BlYygxMS40KTogQW55IHplcm8gbGVuZ3RoIHN1
YnBhdGggc2hhbGwgbm90IGJlIHN0cm9rZWQgaWYgdGhlIOKAmHN0cm9rZS1saW5lY2Fw4oCZIHBy
b3BlcnR5IGhhcyBhIHZhbHVlIG9mIGJ1dHQKKyAgICAvLyBidXQgc2hhbGwgYmUgc3Ryb2tlZCBp
ZiB0aGUg4oCYc3Ryb2tlLWxpbmVjYXDigJkgcHJvcGVydHkgaGFzIGEgdmFsdWUgb2Ygcm91bmQg
b3Igc3F1YXJlCisgICAgaWYgKHNob3VsZFN0cm9rZVplcm9MZW5ndGhTdWJwYXRoKCkpIHsKKyAg
ICAgICAgbV9zdHJva2VBbmRNYXJrZXJCb3VuZGluZ0JveCA9IHplcm9MZW5ndGhTdWJwYXRoUmVj
dCgpOworICAgICAgICAvLyBDYWNoZSBzbWFsbGVzdCBwb3NzaWJsZSByZXBhaW50IHJlY3Rhbmds
ZQorICAgICAgICBtX3JlcGFpbnRCb3VuZGluZ0JveCA9IG1fc3Ryb2tlQW5kTWFya2VyQm91bmRp
bmdCb3g7CisgICAgICAgIFNWR1JlbmRlclN1cHBvcnQ6OmludGVyc2VjdFJlcGFpbnRSZWN0V2l0
aFJlc291cmNlcyh0aGlzLCBtX3JlcGFpbnRCb3VuZGluZ0JveCk7CisgICAgICAgIHJldHVybjsK
KyAgICB9CisKKyAgICAvLyBDYWNoZSBfdW5jbGlwcGVkXyBzdHJva2UgYm91bmRpbmcgYm94LCB1
c2VkIGZvciBjYWxjdWxhdGlvbnMgaW4gcmVzb3VyY2VzIChpbmNsdWRlcyBtYXJrZXIgYm91bmRh
cmllcykKKyAgICBtX3N0cm9rZUFuZE1hcmtlckJvdW5kaW5nQm94ID0gbV9maWxsQm91bmRpbmdC
b3g7CisKKyAgICBjb25zdCBTVkdSZW5kZXJTdHlsZSogc3ZnU3R5bGUgPSBzdHlsZSgpLT5zdmdT
dHlsZSgpOworICAgIGlmIChzdmdTdHlsZS0+aGFzU3Ryb2tlKCkpCisgICAgICAgIG1fc3Ryb2tl
QW5kTWFya2VyQm91bmRpbmdCb3gudW5pdGUoc3Ryb2tlQm91bmRpbmdCb3goKSk7CisKKyAgICBp
ZiAoaXNTVkdQYXRoKCkpIHsKKyAgICAgICAgaWYgKHN2Z1N0eWxlLT5oYXNNYXJrZXJzKCkpIHsK
KyAgICAgICAgICAgIEZsb2F0UmVjdCBtYXJrZXJCb3VuZHMgPSBjYWxjdWxhdGVNYXJrZXJCb3Vu
ZHNJZk5lZWRlZCgpOworICAgICAgICAgICAgaWYgKCFtYXJrZXJCb3VuZHMuaXNFbXB0eSgpKQor
ICAgICAgICAgICAgICAgIG1fc3Ryb2tlQW5kTWFya2VyQm91bmRpbmdCb3gudW5pdGUobWFya2Vy
Qm91bmRzKTsKKyAgICAgICAgfQorICAgIH0KKyAgICAvLyBDYWNoZSBzbWFsbGVzdCBwb3NzaWJs
ZSByZXBhaW50IHJlY3RhbmdsZQorICAgIG1fcmVwYWludEJvdW5kaW5nQm94ID0gbV9zdHJva2VB
bmRNYXJrZXJCb3VuZGluZ0JveDsKKyAgICBTVkdSZW5kZXJTdXBwb3J0OjppbnRlcnNlY3RSZXBh
aW50UmVjdFdpdGhSZXNvdXJjZXModGhpcywgbV9yZXBhaW50Qm91bmRpbmdCb3gpOworfQorCitm
bG9hdCBSZW5kZXJTVkdTaGFwZTo6c3Ryb2tlV2lkdGgoKSBjb25zdAoreworICAgIFNWR0VsZW1l
bnQqIHN2Z0VsZW1lbnQgPSBzdGF0aWNfY2FzdDxTVkdFbGVtZW50Kj4obm9kZSgpKTsKKyAgICBy
ZXR1cm4gc3R5bGUoKS0+c3ZnU3R5bGUoKS0+c3Ryb2tlV2lkdGgoKS52YWx1ZShzdmdFbGVtZW50
KTsKK30KKworfQorCisjZW5kaWYgLy8gRU5BQkxFKFNWRykKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHU2hhcGUuaCBiL1NvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9zdmcvUmVuZGVyU1ZHU2hhcGUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwLi43MTcyYTIxCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL3N2Zy9SZW5kZXJTVkdTaGFwZS5oCkBAIC0wLDAgKzEsMTY1IEBACisvKgorICogQ29weXJp
Z2h0IChDKSAyMDA0LCAyMDA1LCAyMDA3IE5pa29sYXMgWmltbWVybWFubiA8emltbWVybWFubkBr
ZGUub3JnPgorICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1IFJvYiBCdWlzIDxidWlzQGtkZS5v
cmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDUgRXJpYyBTZWlkZWwgPGVyaWNAd2Via2l0Lm9yZz4K
KyAqIENvcHlyaWdodCAoQykgMjAwNiBBcHBsZSBDb21wdXRlciwgSW5jCisgKiBDb3B5cmlnaHQg
KEMpIDIwMDkgR29vZ2xlLCBJbmMuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgUmVuYXRhIEhvZG92
YW4gPHJlbmlAd2Via2l0Lm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAxMSBVbml2ZXJzaXR5IG9m
IFN6ZWdlZAorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJl
ZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhl
IEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0
aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUg
TGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBU
aGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVz
ZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBs
aWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBM
aWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVk
IGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxv
bmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwg
d3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5r
bGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4K
KyAqLworCisjaWZuZGVmIFJlbmRlclNWR1NoYXBlX2gKKyNkZWZpbmUgUmVuZGVyU1ZHU2hhcGVf
aAorCisjaWYgRU5BQkxFKFNWRykKKyNpbmNsdWRlICJBZmZpbmVUcmFuc2Zvcm0uaCIKKyNpbmNs
dWRlICJGbG9hdFJlY3QuaCIKKyNpbmNsdWRlICJSZW5kZXJTVkdNb2RlbE9iamVjdC5oIgorI2lu
Y2x1ZGUgIlNWR01hcmtlckxheW91dEluZm8uaCIKKyNpbmNsdWRlICJTdHJva2VTdHlsZUFwcGxp
ZXIuaCIKKyNpbmNsdWRlIDx3dGYvT3duUHRyLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKwor
Y2xhc3MgRmxvYXRQb2ludDsKK2NsYXNzIEdyYXBoaWNzQ29udGV4dFN0YXRlU2F2ZXI7CitjbGFz
cyBSZW5kZXJTVkdDb250YWluZXI7CitjbGFzcyBSZW5kZXJTVkdQYXRoOworY2xhc3MgU1ZHU3R5
bGVkVHJhbnNmb3JtYWJsZUVsZW1lbnQ7CisKK2VudW0gUG9pbnRMb2NhdGlvbiB7CisgICAgSW5z
aWRlU2hhcGUsCisgICAgT3V0c2lkZVNoYXBlLAorICAgIE9uU3Ryb2tlCit9OworCitjbGFzcyBC
b3VuZGluZ1JlY3RTdHJva2VTdHlsZUFwcGxpZXIgOiBwdWJsaWMgU3Ryb2tlU3R5bGVBcHBsaWVy
IHsKK3B1YmxpYzoKKyAgICBCb3VuZGluZ1JlY3RTdHJva2VTdHlsZUFwcGxpZXIoY29uc3QgUmVu
ZGVyT2JqZWN0KiBvYmplY3QsIFJlbmRlclN0eWxlKiBzdHlsZSkKKyAgICAgICAgOiBtX29iamVj
dChvYmplY3QpCisgICAgICAgICwgbV9zdHlsZShzdHlsZSkKKyAgICB7CisgICAgICAgIEFTU0VS
VChzdHlsZSk7CisgICAgICAgIEFTU0VSVChvYmplY3QpOworICAgIH0KKworICAgIHZvaWQgc3Ry
b2tlU3R5bGUoR3JhcGhpY3NDb250ZXh0KiBnYykKKyAgICB7CisgICAgICAgIFNWR1JlbmRlclN1
cHBvcnQ6OmFwcGx5U3Ryb2tlU3R5bGVUb0NvbnRleHQoZ2MsIG1fc3R5bGUsIG1fb2JqZWN0KTsK
KyAgICB9CisKK3ByaXZhdGU6CisgICAgY29uc3QgUmVuZGVyT2JqZWN0KiBtX29iamVjdDsKKyAg
ICBSZW5kZXJTdHlsZSogbV9zdHlsZTsKK307CisKK2NsYXNzIFJlbmRlclNWR1NoYXBlIDogcHVi
bGljIFJlbmRlclNWR01vZGVsT2JqZWN0IHsKK3B1YmxpYzoKKyAgICBleHBsaWNpdCBSZW5kZXJT
VkdTaGFwZShTVkdTdHlsZWRUcmFuc2Zvcm1hYmxlRWxlbWVudCopOworICAgIHZpcnR1YWwgflJl
bmRlclNWR1NoYXBlKCk7CisKKyAgICB2b2lkIHNldE5lZWRzU2hhcGVVcGRhdGUoKSB7IG1fbmVl
ZHNTaGFwZVVwZGF0ZSA9IHRydWU7IH0KKyAgICB2aXJ0dWFsIHZvaWQgc2V0TmVlZHNCb3VuZGFy
aWVzVXBkYXRlKCkgeyBtX25lZWRzQm91bmRhcmllc1VwZGF0ZSA9IHRydWU7IH0KKyAgICB2aXJ0
dWFsIHZvaWQgc2V0TmVlZHNUcmFuc2Zvcm1VcGRhdGUoKSB7IG1fbmVlZHNUcmFuc2Zvcm1VcGRh
dGUgPSB0cnVlOyB9CisKK3ByaXZhdGU6CisgICAgLy8gSGl0LWRldGVjdGlvbiBzZXBlcmF0ZWQg
Zm9yIHRoZSBmaWxsIGFuZCB0aGUgc3Ryb2tlCisgICAgYm9vbCBmaWxsQ29udGFpbnMoY29uc3Qg
RmxvYXRQb2ludCYsIGJvb2wgcmVxdWlyZXNGaWxsID0gdHJ1ZSwgV2luZFJ1bGUgZmlsbFJ1bGUg
PSBSVUxFX05PTlpFUk8pOworICAgIGJvb2wgc3Ryb2tlQ29udGFpbnMoY29uc3QgRmxvYXRQb2lu
dCYsIGJvb2wgcmVxdWlyZXNTdHJva2UgPSB0cnVlKTsKKworICAgIHZpcnR1YWwgRmxvYXRSZWN0
IHN0cm9rZUJvdW5kaW5nQm94KCkgY29uc3QgeyByZXR1cm4gbV9zdHJva2VBbmRNYXJrZXJCb3Vu
ZGluZ0JveDsgfQorICAgIHZpcnR1YWwgRmxvYXRSZWN0IHJlcGFpbnRSZWN0SW5Mb2NhbENvb3Jk
aW5hdGVzKCkgY29uc3QgeyByZXR1cm4gbV9yZXBhaW50Qm91bmRpbmdCb3g7IH0KKyAgICB2aXJ0
dWFsIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgbG9jYWxUb1BhcmVudFRyYW5zZm9ybSgpIGNvbnN0
IHsgcmV0dXJuIG1fbG9jYWxUcmFuc2Zvcm07IH0KKworICAgIHZpcnR1YWwgYm9vbCBpc1NWR1No
YXBlKCkgY29uc3QgeyByZXR1cm4gdHJ1ZTsgfQorICAgIHZpcnR1YWwgY29uc3QgY2hhciogcmVu
ZGVyTmFtZSgpIGNvbnN0IHsgcmV0dXJuICJSZW5kZXJTVkdTaGFwZSI7IH0KKworICAgIHZpcnR1
YWwgdm9pZCBsYXlvdXQoKTsKKyAgICB2aXJ0dWFsIHZvaWQgcGFpbnQoUGFpbnRJbmZvJiwgY29u
c3QgTGF5b3V0UG9pbnQmKTsKKyAgICB2aXJ0dWFsIHZvaWQgYWRkRm9jdXNSaW5nUmVjdHMoVmVj
dG9yPExheW91dFJlY3Q+JiwgY29uc3QgTGF5b3V0UG9pbnQmKTsKKworICAgIHZpcnR1YWwgYm9v
bCBub2RlQXRGbG9hdFBvaW50KGNvbnN0IEhpdFRlc3RSZXF1ZXN0JiwgSGl0VGVzdFJlc3VsdCYs
IGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50SW5QYXJlbnQsIEhpdFRlc3RBY3Rpb24pOworCisgICAg
RmxvYXRSZWN0IGNhbGN1bGF0ZU1hcmtlckJvdW5kc0lmTmVlZGVkKCk7CisgICAgdm9pZCB1cGRh
dGVDYWNoZWRCb3VuZGFyaWVzKCk7CisKKyAgICB2b2lkIHNldHVwU3F1YXJlQ2FwUGF0aChQYXRo
KiYgdXNlUGF0aCwgaW50JiBhcHBseU1vZGUpOworICAgIGJvb2wgc2V0dXBOb25TY2FsaW5nU3Ry
b2tlUGF0aChQYXRoKiYgdXNlUGF0aCwgR3JhcGhpY3NDb250ZXh0U3RhdGVTYXZlciYpOworICAg
IGJvb2wgc2hvdWxkU3Ryb2tlWmVyb0xlbmd0aFN1YnBhdGgoKSBjb25zdDsKKyAgICBGbG9hdFJl
Y3QgemVyb0xlbmd0aFN1YnBhdGhSZWN0KCkgY29uc3Q7CisKK3Byb3RlY3RlZDoKKyAgICB2aXJ0
dWFsIHZvaWQgY3JlYXRlU2hhcGUoKTsKKyAgICB2aXJ0dWFsIGJvb2wgaXNFbXB0eSgpIGNvbnN0
OworICAgIHZpcnR1YWwgdm9pZCBmaWxsU2hhcGUoR3JhcGhpY3NDb250ZXh0Kik7CisgICAgdmly
dHVhbCBGbG9hdFJlY3Qgb2JqZWN0Qm91bmRpbmdCb3goKSBjb25zdDsKKyAgICB2aXJ0dWFsIEZs
b2F0UmVjdCBzdHJva2VCb3VuZGluZ0JveCgpOworICAgIHZpcnR1YWwgdm9pZCBzdHJva2VTaGFw
ZShHcmFwaGljc0NvbnRleHQqKTsKKyAgICB2aXJ0dWFsIGJvb2wgc3Ryb2tlQ29udGFpbnNTbG93
Q2FzZShjb25zdCBGbG9hdFBvaW50Jik7CisgICAgdmlydHVhbCBib29sIGZpbGxDb250YWluc1Ns
b3dDYXNlKGNvbnN0IEZsb2F0UG9pbnQmLCBjb25zdCBXaW5kUnVsZSYpIGNvbnN0OworICAgIGZs
b2F0IHN0cm9rZVdpZHRoKCkgY29uc3Q7CisKKyAgICBQYXRoJiBwYXRoKCkgY29uc3QKKyAgICB7
CisgICAgICAgIEFTU0VSVChtX3BhdGguZ2V0KCkpOworICAgICAgICByZXR1cm4gKm1fcGF0aDsK
KyAgICB9CisKKyAgICBQYXRoKiBwYXRoUHRyKCkgY29uc3QKKyAgICB7CisgICAgICAgIEFTU0VS
VChtX3BhdGguZ2V0KCkpOworICAgICAgICByZXR1cm4gbV9wYXRoLmdldCgpOworICAgIH07CisK
KyAgICBib29sIGhhc1BhdGgoKSBjb25zdCB7IHJldHVybiBtX3BhdGguZ2V0KCk7IH0KKworcHJp
dmF0ZToKKyAgICB2aXJ0dWFsIEFmZmluZVRyYW5zZm9ybSBsb2NhbFRyYW5zZm9ybSgpIGNvbnN0
IHsgcmV0dXJuIG1fbG9jYWxUcmFuc2Zvcm07IH0KKyAgICB2b2lkIGZpbGxBbmRTdHJva2VQYXRo
KEdyYXBoaWNzQ29udGV4dCopOworCisgICAgYm9vbCBtX25lZWRzQm91bmRhcmllc1VwZGF0ZSA6
IDE7CisgICAgYm9vbCBtX25lZWRzU2hhcGVVcGRhdGUgOiAxOworICAgIGJvb2wgbV9uZWVkc1Ry
YW5zZm9ybVVwZGF0ZSA6IDE7CisKKyAgICBGbG9hdFJlY3QgbV9maWxsQm91bmRpbmdCb3g7Cisg
ICAgRmxvYXRSZWN0IG1fc3Ryb2tlQW5kTWFya2VyQm91bmRpbmdCb3g7CisgICAgRmxvYXRSZWN0
IG1fcmVwYWludEJvdW5kaW5nQm94OworICAgIFNWR01hcmtlckxheW91dEluZm8gbV9tYXJrZXJM
YXlvdXRJbmZvOworICAgIEFmZmluZVRyYW5zZm9ybSBtX2xvY2FsVHJhbnNmb3JtOworICAgIE93
blB0cjxQYXRoPiBtX3BhdGg7Cit9OworCitpbmxpbmUgUmVuZGVyU1ZHU2hhcGUqIHRvUmVuZGVy
U1ZHU2hhcGUoUmVuZGVyT2JqZWN0KiBvYmplY3QpCit7CisgICAgQVNTRVJUKCFvYmplY3QgfHwg
b2JqZWN0LT5pc1NWR1NoYXBlKCkpOworICAgIHJldHVybiBzdGF0aWNfY2FzdDxSZW5kZXJTVkdT
aGFwZSo+KG9iamVjdCk7Cit9CisKK2lubGluZSBjb25zdCBSZW5kZXJTVkdTaGFwZSogdG9SZW5k
ZXJTVkdTaGFwZShjb25zdCBSZW5kZXJPYmplY3QqIG9iamVjdCkKK3sKKyAgICBBU1NFUlQoIW9i
amVjdCB8fCBvYmplY3QtPmlzU1ZHU2hhcGUoKSk7CisgICAgcmV0dXJuIHN0YXRpY19jYXN0PGNv
bnN0IFJlbmRlclNWR1NoYXBlKj4ob2JqZWN0KTsKK30KKworLy8gVGhpcyB3aWxsIGNhdGNoIGFu
eW9uZSBkb2luZyBhbiB1bm5lY2Vzc2FyeSBjYXN0Lgordm9pZCB0b1JlbmRlclNWR1NoYXBlKGNv
bnN0IFJlbmRlclNWR1NoYXBlKik7CisKK30KKworI2VuZGlmIC8vIEVOQUJMRShTVkcpCisjZW5k
aWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHUmVuZGVyU3Vw
cG9ydC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR1JlbmRlclN1cHBvcnQu
Y3BwCmluZGV4IDAwNzkyMTkuLjY2OTViNTIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9zdmcvU1ZHUmVuZGVyU3VwcG9ydC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL3N2Zy9TVkdSZW5kZXJTdXBwb3J0LmNwcApAQCAtMjI1LDkgKzIyNSw5IEBAIHZvaWQg
U1ZHUmVuZGVyU3VwcG9ydDo6bGF5b3V0Q2hpbGRyZW4oUmVuZGVyT2JqZWN0KiBzdGFydCwgYm9v
bCBzZWxmTmVlZHNMYXlvdXQpCiAgICAgICAgICAgICAvLyBXaGVuIHNlbGZOZWVkc0xheW91dCBp
cyBmYWxzZSBhbmQgdGhlIGxheW91dCBzaXplIGNoYW5nZWQsIHdlIGhhdmUgdG8gY2hlY2sgd2hl
dGhlciB0aGlzIGNoaWxkIHVzZXMgcmVsYXRpdmUgbGVuZ3RocwogICAgICAgICAgICAgaWYgKFNW
R0VsZW1lbnQqIGVsZW1lbnQgPSBjaGlsZC0+bm9kZSgpLT5pc1NWR0VsZW1lbnQoKSA/IHN0YXRp
Y19jYXN0PFNWR0VsZW1lbnQqPihjaGlsZC0+bm9kZSgpKSA6IDApIHsKICAgICAgICAgICAgICAg
ICBpZiAoZWxlbWVudC0+aXNTdHlsZWQoKSAmJiBzdGF0aWNfY2FzdDxTVkdTdHlsZWRFbGVtZW50
Kj4oZWxlbWVudCktPmhhc1JlbGF0aXZlTGVuZ3RocygpKSB7Ci0gICAgICAgICAgICAgICAgICAg
IC8vIFdoZW4gdGhlIGxheW91dCBzaXplIGNoYW5nZWQgYW5kIHdoZW4gdXNpbmcgcmVsYXRpdmUg
dmFsdWVzIHRlbGwgdGhlIFJlbmRlclNWR1BhdGggdG8gdXBkYXRlIGl0cyBQYXRoIG9iamVjdAot
ICAgICAgICAgICAgICAgICAgICBpZiAoY2hpbGQtPmlzU1ZHUGF0aCgpKQotICAgICAgICAgICAg
ICAgICAgICAgICAgdG9SZW5kZXJTVkdQYXRoKGNoaWxkKS0+c2V0TmVlZHNQYXRoVXBkYXRlKCk7
CisgICAgICAgICAgICAgICAgICAgIC8vIFdoZW4gdGhlIGxheW91dCBzaXplIGNoYW5nZWQgYW5k
IHdoZW4gdXNpbmcgcmVsYXRpdmUgdmFsdWVzIHRlbGwgdGhlIFJlbmRlclNWR1NoYXBlIHRvIHVw
ZGF0ZSBpdHMgc2hhcGUgb2JqZWN0CisgICAgICAgICAgICAgICAgICAgIGlmIChjaGlsZC0+aXNT
VkdTaGFwZSgpKQorICAgICAgICAgICAgICAgICAgICAgICAgdG9SZW5kZXJTVkdTaGFwZShjaGls
ZCktPnNldE5lZWRzU2hhcGVVcGRhdGUoKTsKIAogICAgICAgICAgICAgICAgICAgICBuZWVkc0xh
eW91dCA9IHRydWU7CiAgICAgICAgICAgICAgICAgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL3N2Zy9TVkdSZW5kZXJUcmVlQXNUZXh0LmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9zdmcvU1ZHUmVuZGVyVHJlZUFzVGV4dC5jcHAKaW5kZXggYTE2Mjk2OS4uZDFh
ZDcyYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdSZW5kZXJU
cmVlQXNUZXh0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR1JlbmRl
clRyZWVBc1RleHQuY3BwCkBAIC01NSw2ICs1NSw3IEBACiAjaW5jbHVkZSAiUmVuZGVyU1ZHUmVz
b3VyY2VSYWRpYWxHcmFkaWVudC5oIgogI2luY2x1ZGUgIlJlbmRlclNWR1Jlc291cmNlU29saWRD
b2xvci5oIgogI2luY2x1ZGUgIlJlbmRlclNWR1Jvb3QuaCIKKyNpbmNsdWRlICJSZW5kZXJTVkdT
aGFwZS5oIgogI2luY2x1ZGUgIlJlbmRlclNWR1RleHQuaCIKICNpbmNsdWRlICJSZW5kZXJUcmVl
QXNUZXh0LmgiCiAjaW5jbHVkZSAiU1ZHQ2lyY2xlRWxlbWVudC5oIgpAQCAtMjg5LDE4ICsyOTAs
MTggQEAgc3RhdGljIHZvaWQgd3JpdGVTdHlsZShUZXh0U3RyZWFtJiB0cywgY29uc3QgUmVuZGVy
T2JqZWN0JiBvYmplY3QpCiAgICAgICAgIHdyaXRlTmFtZVZhbHVlUGFpcih0cywgInRyYW5zZm9y
bSIsIG9iamVjdC5sb2NhbFRyYW5zZm9ybSgpKTsKICAgICB3cml0ZUlmTm90RGVmYXVsdCh0cywg
ImltYWdlIHJlbmRlcmluZyIsIHN0eWxlLT5pbWFnZVJlbmRlcmluZygpLCBSZW5kZXJTdHlsZTo6
aW5pdGlhbEltYWdlUmVuZGVyaW5nKCkpOwogICAgIHdyaXRlSWZOb3REZWZhdWx0KHRzLCAib3Bh
Y2l0eSIsIHN0eWxlLT5vcGFjaXR5KCksIFJlbmRlclN0eWxlOjppbml0aWFsT3BhY2l0eSgpKTsK
LSAgICBpZiAob2JqZWN0LmlzU1ZHUGF0aCgpKSB7Ci0gICAgICAgIGNvbnN0IFJlbmRlclNWR1Bh
dGgmIHBhdGggPSBzdGF0aWNfY2FzdDxjb25zdCBSZW5kZXJTVkdQYXRoJj4ob2JqZWN0KTsKLSAg
ICAgICAgQVNTRVJUKHBhdGgubm9kZSgpKTsKLSAgICAgICAgQVNTRVJUKHBhdGgubm9kZSgpLT5p
c1NWR0VsZW1lbnQoKSk7CisgICAgaWYgKG9iamVjdC5pc1NWR1NoYXBlKCkpIHsKKyAgICAgICAg
Y29uc3QgUmVuZGVyU1ZHU2hhcGUmIHNoYXBlID0gc3RhdGljX2Nhc3Q8Y29uc3QgUmVuZGVyU1ZH
U2hhcGUmPihvYmplY3QpOworICAgICAgICBBU1NFUlQoc2hhcGUubm9kZSgpKTsKKyAgICAgICAg
QVNTRVJUKHNoYXBlLm5vZGUoKS0+aXNTVkdFbGVtZW50KCkpOwogCiAgICAgICAgIENvbG9yIGZh
bGxiYWNrQ29sb3I7Ci0gICAgICAgIGlmIChSZW5kZXJTVkdSZXNvdXJjZSogc3Ryb2tlUGFpbnRp
bmdSZXNvdXJjZSA9IFJlbmRlclNWR1Jlc291cmNlOjpzdHJva2VQYWludGluZ1Jlc291cmNlKGNv
bnN0X2Nhc3Q8UmVuZGVyU1ZHUGF0aCo+KCZwYXRoKSwgcGF0aC5zdHlsZSgpLCBmYWxsYmFja0Nv
bG9yKSkgeworICAgICAgICBpZiAoUmVuZGVyU1ZHUmVzb3VyY2UqIHN0cm9rZVBhaW50aW5nUmVz
b3VyY2UgPSBSZW5kZXJTVkdSZXNvdXJjZTo6c3Ryb2tlUGFpbnRpbmdSZXNvdXJjZShjb25zdF9j
YXN0PFJlbmRlclNWR1NoYXBlKj4oJnNoYXBlKSwgc2hhcGUuc3R5bGUoKSwgZmFsbGJhY2tDb2xv
cikpIHsKICAgICAgICAgICAgIFRleHRTdHJlYW1TZXBhcmF0b3IgcygiICIpOwogICAgICAgICAg
ICAgdHMgPDwgIiBbc3Ryb2tlPXsiIDw8IHM7CiAgICAgICAgICAgICB3cml0ZVNWR1BhaW50aW5n
UmVzb3VyY2UodHMsIHN0cm9rZVBhaW50aW5nUmVzb3VyY2UpOwogCi0gICAgICAgICAgICBTVkdF
bGVtZW50KiBlbGVtZW50ID0gc3RhdGljX2Nhc3Q8U1ZHRWxlbWVudCo+KHBhdGgubm9kZSgpKTsK
KyAgICAgICAgICAgIFNWR0VsZW1lbnQqIGVsZW1lbnQgPSBzdGF0aWNfY2FzdDxTVkdFbGVtZW50
Kj4oc2hhcGUubm9kZSgpKTsKICAgICAgICAgICAgIGRvdWJsZSBkYXNoT2Zmc2V0ID0gc3ZnU3R5
bGUtPnN0cm9rZURhc2hPZmZzZXQoKS52YWx1ZShlbGVtZW50KTsKICAgICAgICAgICAgIGRvdWJs
ZSBzdHJva2VXaWR0aCA9IHN2Z1N0eWxlLT5zdHJva2VXaWR0aCgpLnZhbHVlKGVsZW1lbnQpOwog
ICAgICAgICAgICAgY29uc3QgVmVjdG9yPFNWR0xlbmd0aD4mIGRhc2hlcyA9IHN2Z1N0eWxlLT5z
dHJva2VEYXNoQXJyYXkoKTsKQEAgLTMyMiw3ICszMjMsNyBAQCBzdGF0aWMgdm9pZCB3cml0ZVN0
eWxlKFRleHRTdHJlYW0mIHRzLCBjb25zdCBSZW5kZXJPYmplY3QmIG9iamVjdCkKICAgICAgICAg
ICAgIHRzIDw8ICJ9XSI7CiAgICAgICAgIH0KIAotICAgICAgICBpZiAoUmVuZGVyU1ZHUmVzb3Vy
Y2UqIGZpbGxQYWludGluZ1Jlc291cmNlID0gUmVuZGVyU1ZHUmVzb3VyY2U6OmZpbGxQYWludGlu
Z1Jlc291cmNlKGNvbnN0X2Nhc3Q8UmVuZGVyU1ZHUGF0aCo+KCZwYXRoKSwgcGF0aC5zdHlsZSgp
LCBmYWxsYmFja0NvbG9yKSkgeworICAgICAgICBpZiAoUmVuZGVyU1ZHUmVzb3VyY2UqIGZpbGxQ
YWludGluZ1Jlc291cmNlID0gUmVuZGVyU1ZHUmVzb3VyY2U6OmZpbGxQYWludGluZ1Jlc291cmNl
KGNvbnN0X2Nhc3Q8UmVuZGVyU1ZHU2hhcGUqPigmc2hhcGUpLCBzaGFwZS5zdHlsZSgpLCBmYWxs
YmFja0NvbG9yKSkgewogICAgICAgICAgICAgVGV4dFN0cmVhbVNlcGFyYXRvciBzKCIgIik7CiAg
ICAgICAgICAgICB0cyA8PCAiIFtmaWxsPXsiIDw8IHM7CiAgICAgICAgICAgICB3cml0ZVNWR1Bh
aW50aW5nUmVzb3VyY2UodHMsIGZpbGxQYWludGluZ1Jlc291cmNlKTsKQEAgLTM0NiwxMiArMzQ3
LDEyIEBAIHN0YXRpYyBUZXh0U3RyZWFtJiB3cml0ZVBvc2l0aW9uQW5kU3R5bGUoVGV4dFN0cmVh
bSYgdHMsIGNvbnN0IFJlbmRlck9iamVjdCYgb2JqCiAgICAgcmV0dXJuIHRzOwogfQogCi1zdGF0
aWMgVGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiB0cywgY29uc3QgUmVuZGVyU1ZH
UGF0aCYgcGF0aCkKK3N0YXRpYyBUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJlYW0mIHRz
LCBjb25zdCBSZW5kZXJTVkdTaGFwZSYgc2hhcGUpCiB7Ci0gICAgd3JpdGVQb3NpdGlvbkFuZFN0
eWxlKHRzLCBwYXRoKTsKKyAgICB3cml0ZVBvc2l0aW9uQW5kU3R5bGUodHMsIHNoYXBlKTsKIAot
ICAgIEFTU0VSVChwYXRoLm5vZGUoKS0+aXNTVkdFbGVtZW50KCkpOwotICAgIFNWR0VsZW1lbnQq
IHN2Z0VsZW1lbnQgPSBzdGF0aWNfY2FzdDxTVkdFbGVtZW50Kj4ocGF0aC5ub2RlKCkpOworICAg
IEFTU0VSVChzaGFwZS5ub2RlKCktPmlzU1ZHRWxlbWVudCgpKTsKKyAgICBTVkdFbGVtZW50KiBz
dmdFbGVtZW50ID0gc3RhdGljX2Nhc3Q8U1ZHRWxlbWVudCo+KHNoYXBlLm5vZGUoKSk7CiAKICAg
ICBpZiAoc3ZnRWxlbWVudC0+aGFzVGFnTmFtZShTVkdOYW1lczo6cmVjdFRhZykpIHsKICAgICAg
ICAgU1ZHUmVjdEVsZW1lbnQqIGVsZW1lbnQgPSBzdGF0aWNfY2FzdDxTVkdSZWN0RWxlbWVudCo+
KHN2Z0VsZW1lbnQpOwpAQCAtNjUzLDExICs2NTQsMTEgQEAgdm9pZCB3cml0ZVNWR0ltYWdlKFRl
eHRTdHJlYW0mIHRzLCBjb25zdCBSZW5kZXJTVkdJbWFnZSYgaW1hZ2UsIGludCBpbmRlbnQpCiAg
ICAgd3JpdGVSZXNvdXJjZXModHMsIGltYWdlLCBpbmRlbnQpOwogfQogCi12b2lkIHdyaXRlKFRl
eHRTdHJlYW0mIHRzLCBjb25zdCBSZW5kZXJTVkdQYXRoJiBwYXRoLCBpbnQgaW5kZW50KQordm9p
ZCB3cml0ZShUZXh0U3RyZWFtJiB0cywgY29uc3QgUmVuZGVyU1ZHU2hhcGUmIHNoYXBlLCBpbnQg
aW5kZW50KQogewotICAgIHdyaXRlU3RhbmRhcmRQcmVmaXgodHMsIHBhdGgsIGluZGVudCk7Ci0g
ICAgdHMgPDwgcGF0aCA8PCAiXG4iOwotICAgIHdyaXRlUmVzb3VyY2VzKHRzLCBwYXRoLCBpbmRl
bnQpOworICAgIHdyaXRlU3RhbmRhcmRQcmVmaXgodHMsIHNoYXBlLCBpbmRlbnQpOworICAgIHRz
IDw8IHNoYXBlIDw8ICJcbiI7CisgICAgd3JpdGVSZXNvdXJjZXModHMsIHNoYXBlLCBpbmRlbnQp
OwogfQogCiB2b2lkIHdyaXRlU1ZHR3JhZGllbnRTdG9wKFRleHRTdHJlYW0mIHRzLCBjb25zdCBS
ZW5kZXJTVkdHcmFkaWVudFN0b3AmIHN0b3AsIGludCBpbmRlbnQpCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR1JlbmRlclRyZWVBc1RleHQuaCBiL1NvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHUmVuZGVyVHJlZUFzVGV4dC5oCmluZGV4IGNlMDdhNWMu
LjM1OThjODMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHUmVu
ZGVyVHJlZUFzVGV4dC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHUmVu
ZGVyVHJlZUFzVGV4dC5oCkBAIC00MSwxNCArNDEsMTQgQEAgY2xhc3MgUmVuZGVySW1hZ2U7CiBj
bGFzcyBSZW5kZXJPYmplY3Q7CiBjbGFzcyBSZW5kZXJTVkdHcmFkaWVudFN0b3A7CiBjbGFzcyBS
ZW5kZXJTVkdJbWFnZTsKLWNsYXNzIFJlbmRlclNWR1BhdGg7CitjbGFzcyBSZW5kZXJTVkdTaGFw
ZTsKIGNsYXNzIFJlbmRlclNWR1Jvb3Q7CiBjbGFzcyBSZW5kZXJUZXh0OwogY2xhc3MgQWZmaW5l
VHJhbnNmb3JtOwogY2xhc3MgU1ZHVW5pdFR5cGVzOwogCiAvLyBmdW5jdGlvbnMgdXNlZCBieSB0
aGUgbWFpbiBSZW5kZXJUcmVlQXNUZXh0IGNvZGUKLXZvaWQgd3JpdGUoVGV4dFN0cmVhbSYsIGNv
bnN0IFJlbmRlclNWR1BhdGgmLCBpbnQgaW5kZW50KTsKK3ZvaWQgd3JpdGUoVGV4dFN0cmVhbSYs
IGNvbnN0IFJlbmRlclNWR1NoYXBlJiwgaW50IGluZGVudCk7CiB2b2lkIHdyaXRlKFRleHRTdHJl
YW0mLCBjb25zdCBSZW5kZXJTVkdSb290JiwgaW50IGluZGVudCk7CiB2b2lkIHdyaXRlU1ZHR3Jh
ZGllbnRTdG9wKFRleHRTdHJlYW0mLCBjb25zdCBSZW5kZXJTVkdHcmFkaWVudFN0b3AmLCBpbnQg
aW5kZW50KTsKIHZvaWQgd3JpdGVTVkdSZXNvdXJjZUNvbnRhaW5lcihUZXh0U3RyZWFtJiwgY29u
c3QgUmVuZGVyT2JqZWN0JiwgaW50IGluZGVudCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9zdmcvU1ZHQ2lyY2xlRWxlbWVudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHQ2lyY2xl
RWxlbWVudC5jcHAKaW5kZXggMmFlNjliOC4uMDM2NjllMCAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvc3ZnL1NWR0NpcmNsZUVsZW1lbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9T
VkdDaXJjbGVFbGVtZW50LmNwcApAQCAtMTI0LDcgKzEyNCw3IEBAIHZvaWQgU1ZHQ2lyY2xlRWxl
bWVudDo6c3ZnQXR0cmlidXRlQ2hhbmdlZChjb25zdCBRdWFsaWZpZWROYW1lJiBhdHRyTmFtZSkK
ICAgICAgICAgcmV0dXJuOwogCiAgICAgaWYgKGlzTGVuZ3RoQXR0cmlidXRlKSB7Ci0gICAgICAg
IHJlbmRlcmVyLT5zZXROZWVkc1BhdGhVcGRhdGUoKTsKKyAgICAgICAgcmVuZGVyZXItPnNldE5l
ZWRzU2hhcGVVcGRhdGUoKTsKICAgICAgICAgUmVuZGVyU1ZHUmVzb3VyY2U6Om1hcmtGb3JMYXlv
dXRBbmRQYXJlbnRSZXNvdXJjZUludmFsaWRhdGlvbihyZW5kZXJlcik7CiAgICAgICAgIHJldHVy
bjsKICAgICB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRWxsaXBzZUVsZW1l
bnQuY3BwIGIvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0VsbGlwc2VFbGVtZW50LmNwcAppbmRleCBj
ZWEwNjZkLi5jYTAxN2M0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRWxsaXBz
ZUVsZW1lbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdFbGxpcHNlRWxlbWVudC5j
cHAKQEAgLTEyOSw3ICsxMjksNyBAQCB2b2lkIFNWR0VsbGlwc2VFbGVtZW50OjpzdmdBdHRyaWJ1
dGVDaGFuZ2VkKGNvbnN0IFF1YWxpZmllZE5hbWUmIGF0dHJOYW1lKQogICAgICAgICByZXR1cm47
CiAKICAgICBpZiAoaXNMZW5ndGhBdHRyaWJ1dGUpIHsKLSAgICAgICAgcmVuZGVyZXItPnNldE5l
ZWRzUGF0aFVwZGF0ZSgpOworICAgICAgICByZW5kZXJlci0+c2V0TmVlZHNTaGFwZVVwZGF0ZSgp
OwogICAgICAgICBSZW5kZXJTVkdSZXNvdXJjZTo6bWFya0ZvckxheW91dEFuZFBhcmVudFJlc291
cmNlSW52YWxpZGF0aW9uKHJlbmRlcmVyKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdMaW5lRWxlbWVudC5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9zdmcvU1ZHTGluZUVsZW1lbnQuY3BwCmluZGV4IGM3Y2ExMWUuLmIxYmI4ZWEgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdMaW5lRWxlbWVudC5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUvc3ZnL1NWR0xpbmVFbGVtZW50LmNwcApAQCAtMTI5LDcgKzEyOSw3IEBAIHZvaWQg
U1ZHTGluZUVsZW1lbnQ6OnN2Z0F0dHJpYnV0ZUNoYW5nZWQoY29uc3QgUXVhbGlmaWVkTmFtZSYg
YXR0ck5hbWUpCiAgICAgICAgIHJldHVybjsKIAogICAgIGlmIChpc0xlbmd0aEF0dHJpYnV0ZSkg
ewotICAgICAgICByZW5kZXJlci0+c2V0TmVlZHNQYXRoVXBkYXRlKCk7CisgICAgICAgIHJlbmRl
cmVyLT5zZXROZWVkc1NoYXBlVXBkYXRlKCk7CiAgICAgICAgIFJlbmRlclNWR1Jlc291cmNlOjpt
YXJrRm9yTGF5b3V0QW5kUGFyZW50UmVzb3VyY2VJbnZhbGlkYXRpb24ocmVuZGVyZXIpOwogICAg
ICAgICByZXR1cm47CiAgICAgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvc3ZnL1NWR1Bh
dGhFbGVtZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdQYXRoRWxlbWVudC5jcHAKaW5k
ZXggYTdhMzM3ZS4uZmUzMzU5NSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvc3ZnL1NWR1Bh
dGhFbGVtZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHUGF0aEVsZW1lbnQuY3Bw
CkBAIC0yNjksNyArMjY5LDcgQEAgdm9pZCBTVkdQYXRoRWxlbWVudDo6c3ZnQXR0cmlidXRlQ2hh
bmdlZChjb25zdCBRdWFsaWZpZWROYW1lJiBhdHRyTmFtZSkKICAgICAgICAgfQogCiAgICAgICAg
IGlmIChyZW5kZXJlcikKLSAgICAgICAgICAgIHJlbmRlcmVyLT5zZXROZWVkc1BhdGhVcGRhdGUo
KTsKKyAgICAgICAgICAgIHJlbmRlcmVyLT5zZXROZWVkc1NoYXBlVXBkYXRlKCk7CiAgICAgfQog
CiAgICAgaWYgKHJlbmRlcmVyKQpAQCAtMzU1LDEwICszNTUsMTYgQEAgdm9pZCBTVkdQYXRoRWxl
bWVudDo6cGF0aFNlZ0xpc3RDaGFuZ2VkKFNWR1BhdGhTZWdSb2xlIHJvbGUpCiAgICAgaWYgKCFy
ZW5kZXJlcikKICAgICAgICAgcmV0dXJuOwogCi0gICAgcmVuZGVyZXItPnNldE5lZWRzUGF0aFVw
ZGF0ZSgpOworICAgIHJlbmRlcmVyLT5zZXROZWVkc1NoYXBlVXBkYXRlKCk7CiAgICAgUmVuZGVy
U1ZHUmVzb3VyY2U6Om1hcmtGb3JMYXlvdXRBbmRQYXJlbnRSZXNvdXJjZUludmFsaWRhdGlvbihy
ZW5kZXJlcik7CiB9CiAKK1JlbmRlck9iamVjdCogU1ZHUGF0aEVsZW1lbnQ6OmNyZWF0ZVJlbmRl
cmVyKFJlbmRlckFyZW5hKiBhcmVuYSwgUmVuZGVyU3R5bGUqKQoreworICAgIC8vIEJ5IGRlZmF1
bHQsIGFueSBzdWJjbGFzcyBpcyBleHBlY3RlZCB0byBkbyBwYXRoLWJhc2VkIGRyYXdpbmcKKyAg
ICByZXR1cm4gbmV3IChhcmVuYSkgUmVuZGVyU1ZHUGF0aCh0aGlzKTsKK30KKwogfQogCiAjZW5k
aWYgLy8gRU5BQkxFKFNWRykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdQYXRo
RWxlbWVudC5oIGIvU291cmNlL1dlYkNvcmUvc3ZnL1NWR1BhdGhFbGVtZW50LmgKaW5kZXggMWQz
N2QwZS4uNTRiOGZlMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvc3ZnL1NWR1BhdGhFbGVt
ZW50LmgKKysrIGIvU291cmNlL1dlYkNvcmUvc3ZnL1NWR1BhdGhFbGVtZW50LmgKQEAgLTEyMiw2
ICsxMjIsOCBAQCBwcml2YXRlOgogICAgIHZpcnR1YWwgdm9pZCBzeW5jaHJvbml6ZVJlcXVpcmVk
RXh0ZW5zaW9ucygpIHsgU1ZHVGVzdHM6OnN5bmNocm9uaXplUmVxdWlyZWRFeHRlbnNpb25zKHRo
aXMpOyB9CiAgICAgdmlydHVhbCB2b2lkIHN5bmNocm9uaXplU3lzdGVtTGFuZ3VhZ2UoKSB7IFNW
R1Rlc3RzOjpzeW5jaHJvbml6ZVN5c3RlbUxhbmd1YWdlKHRoaXMpOyB9CiAKKyAgICBSZW5kZXJP
YmplY3QqIGNyZWF0ZVJlbmRlcmVyKFJlbmRlckFyZW5hKiwgUmVuZGVyU3R5bGUqKTsKKwogcHJp
dmF0ZToKICAgICBPd25QdHI8U1ZHUGF0aEJ5dGVTdHJlYW0+IG1fcGF0aEJ5dGVTdHJlYW07CiAg
ICAgbXV0YWJsZSBTVkdTeW5jaHJvbml6YWJsZUFuaW1hdGVkUHJvcGVydHk8U1ZHUGF0aFNlZ0xp
c3Q+IG1fcGF0aFNlZ0xpc3Q7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHUG9s
eUVsZW1lbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvc3ZnL1NWR1BvbHlFbGVtZW50LmNwcAppbmRl
eCA2MTZiODY3Li5mMzBjYTRhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHUG9s
eUVsZW1lbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdQb2x5RWxlbWVudC5jcHAK
QEAgLTEyNCw3ICsxMjQsNyBAQCB2b2lkIFNWR1BvbHlFbGVtZW50OjpzdmdBdHRyaWJ1dGVDaGFu
Z2VkKGNvbnN0IFF1YWxpZmllZE5hbWUmIGF0dHJOYW1lKQogICAgICAgICByZXR1cm47CiAKICAg
ICBpZiAoYXR0ck5hbWUgPT0gU1ZHTmFtZXM6OnBvaW50c0F0dHIpIHsKLSAgICAgICAgcmVuZGVy
ZXItPnNldE5lZWRzUGF0aFVwZGF0ZSgpOworICAgICAgICByZW5kZXJlci0+c2V0TmVlZHNTaGFw
ZVVwZGF0ZSgpOwogICAgICAgICBSZW5kZXJTVkdSZXNvdXJjZTo6bWFya0ZvckxheW91dEFuZFBh
cmVudFJlc291cmNlSW52YWxpZGF0aW9uKHJlbmRlcmVyKTsKICAgICAgICAgcmV0dXJuOwogICAg
IH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdSZWN0RWxlbWVudC5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9zdmcvU1ZHUmVjdEVsZW1lbnQuY3BwCmluZGV4IGU4NDc3NGQuLjE4Nzll
MGEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdSZWN0RWxlbWVudC5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvc3ZnL1NWR1JlY3RFbGVtZW50LmNwcApAQCAtMjUsNiArMjUsNyBA
QAogCiAjaW5jbHVkZSAiQXR0cmlidXRlLmgiCiAjaW5jbHVkZSAiUmVuZGVyU1ZHUGF0aC5oIgor
I2luY2x1ZGUgIlJlbmRlclNWR1JlY3QuaCIKICNpbmNsdWRlICJSZW5kZXJTVkdSZXNvdXJjZS5o
IgogI2luY2x1ZGUgIlNWR0VsZW1lbnRJbnN0YW5jZS5oIgogI2luY2x1ZGUgIlNWR0xlbmd0aC5o
IgpAQCAtMzIsNiArMzMsOCBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKK2NsYXNzIFJlbmRl
clNWR1JlY3Q7CisKIC8vIEFuaW1hdGVkIHByb3BlcnR5IGRlZmluaXRpb25zCiBERUZJTkVfQU5J
TUFURURfTEVOR1RIKFNWR1JlY3RFbGVtZW50LCBTVkdOYW1lczo6eEF0dHIsIFgsIHgpCiBERUZJ
TkVfQU5JTUFURURfTEVOR1RIKFNWR1JlY3RFbGVtZW50LCBTVkdOYW1lczo6eUF0dHIsIFksIHkp
CkBAIC0xMzcsMTIgKzE0MCwxMiBAQCB2b2lkIFNWR1JlY3RFbGVtZW50OjpzdmdBdHRyaWJ1dGVD
aGFuZ2VkKGNvbnN0IFF1YWxpZmllZE5hbWUmIGF0dHJOYW1lKQogICAgIGlmIChTVkdUZXN0czo6
aGFuZGxlQXR0cmlidXRlQ2hhbmdlKHRoaXMsIGF0dHJOYW1lKSkKICAgICAgICAgcmV0dXJuOwog
Ci0gICAgUmVuZGVyU1ZHUGF0aCogcmVuZGVyZXIgPSBzdGF0aWNfY2FzdDxSZW5kZXJTVkdQYXRo
Kj4odGhpcy0+cmVuZGVyZXIoKSk7CisgICAgUmVuZGVyU1ZHUmVjdCogcmVuZGVyZXIgPSBzdGF0
aWNfY2FzdDxSZW5kZXJTVkdSZWN0Kj4odGhpcy0+cmVuZGVyZXIoKSk7CiAgICAgaWYgKCFyZW5k
ZXJlcikKICAgICAgICAgcmV0dXJuOwogCiAgICAgaWYgKGlzTGVuZ3RoQXR0cmlidXRlKSB7Ci0g
ICAgICAgIHJlbmRlcmVyLT5zZXROZWVkc1BhdGhVcGRhdGUoKTsKKyAgICAgICAgcmVuZGVyZXIt
PnNldE5lZWRzU2hhcGVVcGRhdGUoKTsKICAgICAgICAgUmVuZGVyU1ZHUmVzb3VyY2U6Om1hcmtG
b3JMYXlvdXRBbmRQYXJlbnRSZXNvdXJjZUludmFsaWRhdGlvbihyZW5kZXJlcik7CiAgICAgICAg
IHJldHVybjsKICAgICB9CkBAIC0xOTgsNiArMjAxLDExIEBAIGJvb2wgU1ZHUmVjdEVsZW1lbnQ6
OnNlbGZIYXNSZWxhdGl2ZUxlbmd0aHMoKSBjb25zdAogICAgICAgICB8fCByeSgpLmlzUmVsYXRp
dmUoKTsKIH0KIAorUmVuZGVyT2JqZWN0KiBTVkdSZWN0RWxlbWVudDo6Y3JlYXRlUmVuZGVyZXIo
UmVuZGVyQXJlbmEqIGFyZW5hLCBSZW5kZXJTdHlsZSopCit7CisgICAgcmV0dXJuIG5ldyAoYXJl
bmEpIFJlbmRlclNWR1JlY3QodGhpcyk7Cit9CisKIH0KIAogI2VuZGlmIC8vIEVOQUJMRShTVkcp
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHUmVjdEVsZW1lbnQuaCBiL1NvdXJj
ZS9XZWJDb3JlL3N2Zy9TVkdSZWN0RWxlbWVudC5oCmluZGV4IDk5NDM3ZjMuLjliZjYwMmYgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdSZWN0RWxlbWVudC5oCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3N2Zy9TVkdSZWN0RWxlbWVudC5oCkBAIC01Miw2ICs1Miw4IEBAIHByaXZhdGU6
CiAKICAgICB2aXJ0dWFsIGJvb2wgc2VsZkhhc1JlbGF0aXZlTGVuZ3RocygpIGNvbnN0OwogCisg
ICAgUmVuZGVyT2JqZWN0KiBjcmVhdGVSZW5kZXJlcihSZW5kZXJBcmVuYSosIFJlbmRlclN0eWxl
Kik7CisKICAgICBCRUdJTl9ERUNMQVJFX0FOSU1BVEVEX1BST1BFUlRJRVMoU1ZHUmVjdEVsZW1l
bnQpCiAgICAgICAgIERFQ0xBUkVfQU5JTUFURURfTEVOR1RIKFgsIHgpCiAgICAgICAgIERFQ0xB
UkVfQU5JTUFURURfTEVOR1RIKFksIHkpCi0tIAoxLjcuNS40Cgo=
</data>
<flag name="commit-queue"
          id="100819"
          type_id="3"
          status="-"
          setter="rhodovan.u-szeged"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>105479</attachid>
            <date>2011-08-29 02:45:09 -0700</date>
            <delta_ts>2011-08-30 09:26:59 -0700</delta_ts>
            <desc>Propsed patch</desc>
            <filename>0001-fix-resources.patch</filename>
            <type>text/plain</type>
            <size>100730</size>
            <attacher name="Renata Hodovan">rhodovan.u-szeged</attacher>
            
              <data encoding="base64">RnJvbSBhMzE0ZjY2YzgzMzYwM2UxMTZlNWJhODFiYWRjMTBlYmFkMzA5NTg4IE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBSZW5hdGEgSG9kb3ZhbiA8cmVuaUB3ZWJraXQub3JnPgpEYXRl
OiBNb24sIDI5IEF1ZyAyMDExIDExOjM0OjQ2ICswMjAwClN1YmplY3Q6IFtQQVRDSF0gZml4IHJl
c291cmNlcwoKLS0tCiBTb3VyY2UvV2ViQ29yZS9DTWFrZUxpc3RzLnR4dCAgICAgICAgICAgICAg
ICAgICAgICB8ICAgIDIgKwogU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nICAgICAgICAgICAgICAg
ICAgICAgICAgICAgfCAgMTM2ICsrKysrKysKIFNvdXJjZS9XZWJDb3JlL0dOVW1ha2VmaWxlLmxp
c3QuYW0gICAgICAgICAgICAgICAgIHwgICAgNCArCiBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5
cGkgICAgICAgICAgICAgICAgICAgICAgICB8ICAgIDQgKwogU291cmNlL1dlYkNvcmUvV2ViQ29y
ZS5wcm8gICAgICAgICAgICAgICAgICAgICAgICAgfCAgICA0ICsKIFNvdXJjZS9XZWJDb3JlL1dl
YkNvcmUudmNwcm9qL1dlYkNvcmUudmNwcm9qICAgICAgIHwgIDExMiArKysrKwogU291cmNlL1dl
YkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qICAgfCAgICA4ICsKIFNvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJPYmplY3QuaCAgICAgICAgICAgIHwgICAgMyArCiBT
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVHJlZUFzVGV4dC5jcHAgICAgICB8ICAgIDQg
Ky0KIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHQWxsSW5PbmUuY3BwIHwg
ICAgMiArCiAuLi4vV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR01vZGVsT2JqZWN0LmNw
cCB8ICAgIDIgKy0KIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUGF0aC5j
cHAgICAgIHwgIDM1MiArLS0tLS0tLS0tLS0tLS0tLQogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L3N2Zy9SZW5kZXJTVkdQYXRoLmggICAgICAgfCAgIDc0ICstLS0tCiBTb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1JlY3QuY3BwICAgICB8ICAxMzkgKysrKysrKwogU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZWN0LmggICAgICAgfCAgIDYyICsrKwog
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJjZS5oICAgfCAgICAz
ICstCiAuLi4vcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJjZUNsaXBwZXIuY3BwICAgICB8
ICAgIDYgKy0KIC4uLi9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291cmNlQ29udGFpbmVyLmNw
cCAgIHwgICAgMiArLQogLi4uL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VGaWx0ZXIu
Y3BwICAgICAgfCAgICA1ICstCiAuLi4vcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJjZUZp
bHRlci5oICAgICAgICB8ICAgIDIgKy0KIC4uLi9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291
cmNlR3JhZGllbnQuY3BwICAgIHwgICAxMCArLQogLi4uL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZH
UmVzb3VyY2VHcmFkaWVudC5oICAgICAgfCAgICAyICstCiAuLi4vcmVuZGVyaW5nL3N2Zy9SZW5k
ZXJTVkdSZXNvdXJjZVBhdHRlcm4uY3BwICAgICB8ICAgIDggKy0KIC4uLi9yZW5kZXJpbmcvc3Zn
L1JlbmRlclNWR1Jlc291cmNlUGF0dGVybi5oICAgICAgIHwgICAgMiArLQogLi4uL3JlbmRlcmlu
Zy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VTb2xpZENvbG9yLmNwcCAgfCAgICA5ICstCiAuLi4vcmVu
ZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJjZVNvbGlkQ29sb3IuaCAgICB8ICAgIDIgKy0KIFNv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHU2hhcGUuY3BwICAgIHwgIDQyNiAr
KysrKysrKysrKysrKysrKysrKwogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJT
VkdTaGFwZS5oICAgICAgfCAgMTY1ICsrKysrKysrCiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
c3ZnL1NWR0lubGluZVRleHRCb3guY3BwICB8ICAgIDIgKy0KIFNvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9zdmcvU1ZHUmVuZGVyU3VwcG9ydC5jcHAgIHwgICAgOCArLQogLi4uL1dlYkNvcmUvcmVu
ZGVyaW5nL3N2Zy9TVkdSZW5kZXJUcmVlQXNUZXh0LmNwcCAgfCAgIDMxICstCiBTb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvc3ZnL1NWR1JlbmRlclRyZWVBc1RleHQuaCB8ICAgIDQgKy0KIC4uLi9y
ZW5kZXJpbmcvc3ZnL1NWR1RleHRSdW5SZW5kZXJpbmdDb250ZXh0LmNwcCAgIHwgICAgMiArLQog
U291cmNlL1dlYkNvcmUvc3ZnL1NWR0NpcmNsZUVsZW1lbnQuY3BwICAgICAgICAgICAgfCAgICAy
ICstCiBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRWxsaXBzZUVsZW1lbnQuY3BwICAgICAgICAgICB8
ICAgIDIgKy0KIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdMaW5lRWxlbWVudC5jcHAgICAgICAgICAg
ICAgIHwgICAgMiArLQogU291cmNlL1dlYkNvcmUvc3ZnL1NWR1BhdGhFbGVtZW50LmNwcCAgICAg
ICAgICAgICAgfCAgIDEwICstCiBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHUGF0aEVsZW1lbnQuaCAg
ICAgICAgICAgICAgICB8ICAgIDIgKwogU291cmNlL1dlYkNvcmUvc3ZnL1NWR1BvbHlFbGVtZW50
LmNwcCAgICAgICAgICAgICAgfCAgICAyICstCiBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHUmVjdEVs
ZW1lbnQuY3BwICAgICAgICAgICAgICB8ICAgMTIgKy0KIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdS
ZWN0RWxlbWVudC5oICAgICAgICAgICAgICAgIHwgICAgMiArCiA0MiBmaWxlcyBjaGFuZ2VkLCAx
MTU3IGluc2VydGlvbnMoKyksIDQ3NCBkZWxldGlvbnMoLSkKIGNyZWF0ZSBtb2RlIDEwMDY0NCBT
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1JlY3QuY3BwCiBjcmVhdGUgbW9k
ZSAxMDA2NDQgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZWN0LmgKIGNy
ZWF0ZSBtb2RlIDEwMDY0NCBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1No
YXBlLmNwcAogY3JlYXRlIG1vZGUgMTAwNjQ0IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcv
UmVuZGVyU1ZHU2hhcGUuaAoKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NNYWtlTGlzdHMu
dHh0IGIvU291cmNlL1dlYkNvcmUvQ01ha2VMaXN0cy50eHQKaW5kZXggNzlmNTlhYy4uNDE4Y2M4
OCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ01ha2VMaXN0cy50eHQKKysrIGIvU291cmNl
L1dlYkNvcmUvQ01ha2VMaXN0cy50eHQKQEAgLTE1ODEsNiArMTU4MSw3IEBAIElGIChFTkFCTEVf
U1ZHKQogICAgICAgICByZW5kZXJpbmcvc3ZnL1JlbmRlclNWR0lubGluZVRleHQuY3BwCiAgICAg
ICAgIHJlbmRlcmluZy9zdmcvUmVuZGVyU1ZHTW9kZWxPYmplY3QuY3BwCiAgICAgICAgIHJlbmRl
cmluZy9zdmcvUmVuZGVyU1ZHUGF0aC5jcHAKKyAgICAgICAgcmVuZGVyaW5nL3N2Zy9SZW5kZXJT
VkdSZWN0LmNwcAogICAgICAgICByZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291cmNlLmNwcAog
ICAgICAgICByZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291cmNlQ2xpcHBlci5jcHAKICAgICAg
ICAgcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJjZUNvbnRhaW5lci5jcHAKQEAgLTE1OTUs
NiArMTU5Niw3IEBAIElGIChFTkFCTEVfU1ZHKQogICAgICAgICByZW5kZXJpbmcvc3ZnL1JlbmRl
clNWR1Jlc291cmNlU29saWRDb2xvci5jcHAKICAgICAgICAgcmVuZGVyaW5nL3N2Zy9SZW5kZXJT
VkdSb290LmNwcAogICAgICAgICByZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1NoYWRvd1RyZWVSb290
Q29udGFpbmVyLmNwcAorICAgICAgICByZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1NoYXBlLmNwcAog
ICAgICAgICByZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1RTcGFuLmNwcAogICAgICAgICByZW5kZXJp
bmcvc3ZnL1JlbmRlclNWR1RleHQuY3BwCiAgICAgICAgIHJlbmRlcmluZy9zdmcvUmVuZGVyU1ZH
VGV4dFBhdGguY3BwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cgYi9Tb3Vy
Y2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMDZmNTkwMS4uY2VhZjBjYyAxMDA3NTUKLS0tIGEv
U291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpA
QCAtMSwzICsxLDEzOSBAQAorMjAxMS0wOC0yOSAgUmVuYXRhIEhvZG92YW4gIDxyZW5pQHdlYmtp
dC5vcmc+CisKKyAgICAgICAgQWRkIG5ldyByZW5kZXJlciBmb3IgU1ZHUmVjdEVsZW1lbnQuCisg
ICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD02NTc2OQorCisg
ICAgICAgIEFkZGluZyBhIG5ldyBmcmFtZXdvcmsgdG8gc3VwcG9ydCB0aGUgcmVuZGVyaW5nIG9m
IFNWRyBzaGFwZXMuCisgICAgICAgIFRoZSBtYWluIGxvZ2ljIHRha2VzIHBsYWNlIGluIFJlbmRl
clNWR1NoYXBlIGNsYXNzIGFuZCBldmVyeSByZW5kZXJlciB3aWxsCisgICAgICAgIGluaGVyaXQg
ZnJvbSBpdC4gU2luY2UgaXRzIGNvZGUgYmFzZSBpcyBtb3N0bHkgbW92ZWQgZnJvbSBSZW5kZXJT
VkdQYXRoIGl0J3Mgc3VpdGFibGUgdG8KKyAgICAgICAgaGFuZGxlIHRoZSBmYWxsYmFjayBjYXNl
cyAoZS5nLjogcm91bmRlZCByZWN0cywgc3BlY2lhbCBzdHJva2VzLCBwb2ludGVyIGV2ZW50cywg
ZXRjLikKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAq
IENNYWtlTGlzdHMudHh0OgorICAgICAgICAqIEdOVW1ha2VmaWxlLmxpc3QuYW06CisgICAgICAg
ICogV2ViQ29yZS5neXBpOgorICAgICAgICAqIFdlYkNvcmUucHJvOgorICAgICAgICAqIFdlYkNv
cmUudmNwcm9qL1dlYkNvcmUudmNwcm9qOgorICAgICAgICAqIFdlYkNvcmUueGNvZGVwcm9qL3By
b2plY3QucGJ4cHJvajoKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyT2JqZWN0Lmg6CisgICAg
ICAgIChXZWJDb3JlOjpSZW5kZXJPYmplY3Q6OmlzU1ZHTGluZSk6CisgICAgICAgIChXZWJDb3Jl
OjpSZW5kZXJPYmplY3Q6OmlzU1ZHUmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJPYmpl
Y3Q6OmlzU1ZHU2hhcGUpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJUcmVlQXNUZXh0LmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OndyaXRlKToKKyAgICAgICAgKiByZW5kZXJpbmcvc3ZnL1Jl
bmRlclNWR0FsbEluT25lLmNwcDoKKyAgICAgICAgKiByZW5kZXJpbmcvc3ZnL1JlbmRlclNWR01v
ZGVsT2JqZWN0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmlzR3JhcGhpY3NFbGVtZW50KToKKyAg
ICAgICAgKiByZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1BhdGguY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6UmVuZGVyU1ZHUGF0aDo6UmVuZGVyU1ZHUGF0aCk6CisgICAgICAgICogcmVuZGVyaW5nL3N2
Zy9SZW5kZXJTVkdQYXRoLmg6CisgICAgICAgICogcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZWN0
LmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJTVkdSZWN0OjpSZW5kZXJTVkdS
ZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclNWR1JlY3Q6On5SZW5kZXJTVkdSZWN0KToK
KyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclNWR1JlY3Q6OmNyZWF0ZVNoYXBlKToKKyAgICAgICAg
KFdlYkNvcmU6OlJlbmRlclNWR1JlY3Q6Om9iamVjdEJvdW5kaW5nQm94KToKKyAgICAgICAgKFdl
YkNvcmU6OlJlbmRlclNWR1JlY3Q6OnN0cm9rZUJvdW5kaW5nQm94KToKKyAgICAgICAgKFdlYkNv
cmU6OlJlbmRlclNWR1JlY3Q6OmZpbGxTaGFwZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJT
VkdSZWN0OjpzdHJva2VTaGFwZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJTVkdSZWN0Ojpz
dHJva2VDb250YWluc1Nsb3dDYXNlKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclNWR1JlY3Q6
OmZpbGxDb250YWluc1Nsb3dDYXNlKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclNWR1JlY3Q6
OmRldGVybWluZVBvaW50TG9jYXRpb24pOgorICAgICAgICAqIHJlbmRlcmluZy9zdmcvUmVuZGVy
U1ZHUmVjdC5oOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclNWR1JlY3Q6OmlzU1ZH
UmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJTVkdSZWN0OjpyZW5kZXJOYW1lKToKKyAg
ICAgICAgKFdlYkNvcmU6OlJlbmRlclNWR1JlY3Q6OmlzRW1wdHkpOgorICAgICAgICAqIHJlbmRl
cmluZy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2UuaDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclNW
R1Jlc291cmNlOjpwb3N0QXBwbHlSZXNvdXJjZSk6CisgICAgICAgICogcmVuZGVyaW5nL3N2Zy9S
ZW5kZXJTVkdSZXNvdXJjZUNsaXBwZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU1ZH
UmVzb3VyY2VDbGlwcGVyOjpkcmF3Q29udGVudEludG9NYXNrSW1hZ2UpOgorICAgICAgICAoV2Vi
Q29yZTo6UmVuZGVyU1ZHUmVzb3VyY2VDbGlwcGVyOjpjYWxjdWxhdGVDbGlwQ29udGVudFJlcGFp
bnRSZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclNWR1Jlc291cmNlQ2xpcHBlcjo6aGl0
VGVzdENsaXBDb250ZW50KToKKyAgICAgICAgKiByZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291
cmNlQ29udGFpbmVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclNWR1Jlc291cmNlQ29u
dGFpbmVyOjp0cmFuc2Zvcm1Pbk5vblNjYWxpbmdTdHJva2UpOgorICAgICAgICAqIHJlbmRlcmlu
Zy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VGaWx0ZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVu
ZGVyU1ZHUmVzb3VyY2VGaWx0ZXI6OnBvc3RBcHBseVJlc291cmNlKToKKyAgICAgICAgKiByZW5k
ZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291cmNlRmlsdGVyLmg6CisgICAgICAgICogcmVuZGVyaW5n
L3N2Zy9SZW5kZXJTVkdSZXNvdXJjZUdyYWRpZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJl
bmRlclNWR1Jlc291cmNlR3JhZGllbnQ6OmFwcGx5UmVzb3VyY2UpOgorICAgICAgICAqIHJlbmRl
cmluZy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VHcmFkaWVudC5oOgorICAgICAgICAqIHJlbmRlcmlu
Zy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VQYXR0ZXJuLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJl
bmRlclNWR1Jlc291cmNlUGF0dGVybjo6cG9zdEFwcGx5UmVzb3VyY2UpOgorICAgICAgICAqIHJl
bmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VQYXR0ZXJuLmg6CisgICAgICAgICogcmVuZGVy
aW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJjZVNvbGlkQ29sb3IuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6UmVuZGVyU1ZHUmVzb3VyY2VTb2xpZENvbG9yOjpwb3N0QXBwbHlSZXNvdXJjZSk6CisgICAg
ICAgICogcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJjZVNvbGlkQ29sb3IuaDoKKyAgICAg
ICAgKiByZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1NoYXBlLmNwcDogQ29waWVkIGZyb20gU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdQYXRoLmNwcC4KKyAgICAgICAgKFdlYkNv
cmU6OlJlbmRlclNWR1NoYXBlOjpSZW5kZXJTVkdTaGFwZSk6CisgICAgICAgIChXZWJDb3JlOjpS
ZW5kZXJTVkdTaGFwZTo6flJlbmRlclNWR1NoYXBlKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRl
clNWR1NoYXBlOjpjcmVhdGVTaGFwZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJTVkdTaGFw
ZTo6aXNFbXB0eSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJTVkdTaGFwZTo6ZmlsbFNoYXBl
KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclNWR1NoYXBlOjpvYmplY3RCb3VuZGluZ0JveCk6
CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJTVkdTaGFwZTo6c3Ryb2tlQm91bmRpbmdCb3gpOgor
ICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU1ZHU2hhcGU6OnN0cm9rZVNoYXBlKToKKyAgICAgICAg
KFdlYkNvcmU6OlJlbmRlclNWR1NoYXBlOjpzdHJva2VDb250YWluc1Nsb3dDYXNlKToKKyAgICAg
ICAgKFdlYkNvcmU6OlJlbmRlclNWR1NoYXBlOjpmaWxsQ29udGFpbnNTbG93Q2FzZSk6CisgICAg
ICAgIChXZWJDb3JlOjpSZW5kZXJTVkdTaGFwZTo6ZmlsbENvbnRhaW5zKToKKyAgICAgICAgKFdl
YkNvcmU6OlJlbmRlclNWR1NoYXBlOjpzdHJva2VDb250YWlucyk6CisgICAgICAgIChXZWJDb3Jl
OjpSZW5kZXJTVkdTaGFwZTo6bGF5b3V0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclNWR1No
YXBlOjpzaG91bGRTdHJva2VaZXJvTGVuZ3RoU3VicGF0aCk6CisgICAgICAgIChXZWJDb3JlOjpS
ZW5kZXJTVkdTaGFwZTo6emVyb0xlbmd0aFN1YnBhdGhSZWN0KToKKyAgICAgICAgKFdlYkNvcmU6
OlJlbmRlclNWR1NoYXBlOjpzZXR1cFNxdWFyZUNhcFBhdGgpOgorICAgICAgICAoV2ViQ29yZTo6
UmVuZGVyU1ZHU2hhcGU6OnNldHVwTm9uU2NhbGluZ1N0cm9rZVBhdGgpOgorICAgICAgICAoV2Vi
Q29yZTo6UmVuZGVyU1ZHU2hhcGU6OmZpbGxBbmRTdHJva2VQYXRoKToKKyAgICAgICAgKFdlYkNv
cmU6OlJlbmRlclNWR1NoYXBlOjpwYWludCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJTVkdT
aGFwZTo6YWRkRm9jdXNSaW5nUmVjdHMpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU1ZHU2hh
cGU6Om5vZGVBdEZsb2F0UG9pbnQpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU1ZHU2hhcGU6
OmNhbGN1bGF0ZU1hcmtlckJvdW5kc0lmTmVlZGVkKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRl
clNWR1NoYXBlOjp1cGRhdGVDYWNoZWRCb3VuZGFyaWVzKToKKyAgICAgICAgKFdlYkNvcmU6OlJl
bmRlclNWR1NoYXBlOjpzdHJva2VXaWR0aCk6CisgICAgICAgICogcmVuZGVyaW5nL3N2Zy9SZW5k
ZXJTVkdTaGFwZS5oOiBDb3BpZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1Jl
bmRlclNWR1BhdGguaC4KKyAgICAgICAgKFdlYkNvcmU6OkJvdW5kaW5nUmVjdFN0cm9rZVN0eWxl
QXBwbGllcjo6Qm91bmRpbmdSZWN0U3Ryb2tlU3R5bGVBcHBsaWVyKToKKyAgICAgICAgKFdlYkNv
cmU6OkJvdW5kaW5nUmVjdFN0cm9rZVN0eWxlQXBwbGllcjo6c3Ryb2tlU3R5bGUpOgorICAgICAg
ICAoV2ViQ29yZTo6UmVuZGVyU1ZHU2hhcGU6OnNldE5lZWRzU2hhcGVVcGRhdGUpOgorICAgICAg
ICAoV2ViQ29yZTo6UmVuZGVyU1ZHU2hhcGU6OnNldE5lZWRzQm91bmRhcmllc1VwZGF0ZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpSZW5kZXJTVkdTaGFwZTo6c2V0TmVlZHNUcmFuc2Zvcm1VcGRhdGUp
OgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU1ZHU2hhcGU6OnN0cm9rZUJvdW5kaW5nQm94KToK
KyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclNWR1NoYXBlOjpyZXBhaW50UmVjdEluTG9jYWxDb29y
ZGluYXRlcyk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJTVkdTaGFwZTo6bG9jYWxUb1BhcmVu
dFRyYW5zZm9ybSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJTVkdTaGFwZTo6aXNTVkdTaGFw
ZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJTVkdTaGFwZTo6cmVuZGVyTmFtZSk6CisgICAg
ICAgIChXZWJDb3JlOjpSZW5kZXJTVkdTaGFwZTo6cGF0aCk6CisgICAgICAgIChXZWJDb3JlOjpS
ZW5kZXJTVkdTaGFwZTo6cGF0aFB0cik6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJTVkdTaGFw
ZTo6aGFzUGF0aCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJTVkdTaGFwZTo6bG9jYWxUcmFu
c2Zvcm0pOgorICAgICAgICAoV2ViQ29yZTo6dG9SZW5kZXJTVkdTaGFwZSk6CisgICAgICAgICog
cmVuZGVyaW5nL3N2Zy9TVkdJbmxpbmVUZXh0Qm94LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNW
R0lubGluZVRleHRCb3g6OnJlbGVhc2VQYWludGluZ1Jlc291cmNlKToKKyAgICAgICAgKiByZW5k
ZXJpbmcvc3ZnL1NWR1JlbmRlclN1cHBvcnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U1ZHUmVu
ZGVyU3VwcG9ydDo6ZmluaXNoUmVuZGVyU1ZHQ29udGVudCk6CisgICAgICAgIChXZWJDb3JlOjpT
VkdSZW5kZXJTdXBwb3J0OjpsYXlvdXRDaGlsZHJlbik6CisgICAgICAgICogcmVuZGVyaW5nL3N2
Zy9TVkdSZW5kZXJUcmVlQXNUZXh0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OndyaXRlU3R5bGUp
OgorICAgICAgICAoV2ViQ29yZTo6b3BlcmF0b3I8PCk6CisgICAgICAgIChXZWJDb3JlOjp3cml0
ZSk6CisgICAgICAgICogcmVuZGVyaW5nL3N2Zy9TVkdSZW5kZXJUcmVlQXNUZXh0Lmg6CisgICAg
ICAgICogcmVuZGVyaW5nL3N2Zy9TVkdUZXh0UnVuUmVuZGVyaW5nQ29udGV4dC5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpTVkdUZXh0UnVuUmVuZGVyaW5nQ29udGV4dDo6ZHJhd1NWR0dseXBocyk6
CisgICAgICAgICogc3ZnL1NWR0NpcmNsZUVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
U1ZHQ2lyY2xlRWxlbWVudDo6c3ZnQXR0cmlidXRlQ2hhbmdlZCk6CisgICAgICAgICogc3ZnL1NW
R0VsbGlwc2VFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR0VsbGlwc2VFbGVtZW50
OjpzdmdBdHRyaWJ1dGVDaGFuZ2VkKToKKyAgICAgICAgKiBzdmcvU1ZHTGluZUVsZW1lbnQuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6U1ZHTGluZUVsZW1lbnQ6OnN2Z0F0dHJpYnV0ZUNoYW5nZWQp
OgorICAgICAgICAqIHN2Zy9TVkdQYXRoRWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpT
VkdQYXRoRWxlbWVudDo6c3ZnQXR0cmlidXRlQ2hhbmdlZCk6CisgICAgICAgIChXZWJDb3JlOjpT
VkdQYXRoRWxlbWVudDo6cGF0aFNlZ0xpc3RDaGFuZ2VkKToKKyAgICAgICAgKFdlYkNvcmU6OlNW
R1BhdGhFbGVtZW50OjpjcmVhdGVSZW5kZXJlcik6CisgICAgICAgICogc3ZnL1NWR1BhdGhFbGVt
ZW50Lmg6CisgICAgICAgICogc3ZnL1NWR1BvbHlFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OlNWR1BvbHlFbGVtZW50OjpzdmdBdHRyaWJ1dGVDaGFuZ2VkKToKKyAgICAgICAgKiBzdmcv
U1ZHUmVjdEVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U1ZHUmVjdEVsZW1lbnQ6OnN2
Z0F0dHJpYnV0ZUNoYW5nZWQpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHUmVjdEVsZW1lbnQ6OmNy
ZWF0ZVJlbmRlcmVyKToKKyAgICAgICAgKiBzdmcvU1ZHUmVjdEVsZW1lbnQuaDoKKwogMjAxMS0w
OC0yMiAgVG9ueSBDaGFuZyAgPHRvbnlAY2hyb21pdW0ub3JnPgogCiAgICAgICAgIEFkZCBDU1Mg
cGFyc2luZyBvZiAtd2Via2l0LWZsZXgtcGFjawpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
R05VbWFrZWZpbGUubGlzdC5hbSBiL1NvdXJjZS9XZWJDb3JlL0dOVW1ha2VmaWxlLmxpc3QuYW0K
aW5kZXggM2FjMjUyNS4uYjAyNGNjMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvR05VbWFr
ZWZpbGUubGlzdC5hbQorKysgYi9Tb3VyY2UvV2ViQ29yZS9HTlVtYWtlZmlsZS5saXN0LmFtCkBA
IC0zMTkyLDYgKzMxOTIsOCBAQCB3ZWJjb3JlX3NvdXJjZXMgKz0gXAogCVNvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHTW9kZWxPYmplY3QuaCBcCiAJU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdQYXRoLmNwcCBcCiAJU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL3N2Zy9SZW5kZXJTVkdQYXRoLmggXAorCVNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcv
UmVuZGVyU1ZHUmVjdC5jcHAgXAorCVNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVy
U1ZHUmVjdC5oIFwKIAlTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291
cmNlQ2xpcHBlci5jcHAgXAogCVNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZH
UmVzb3VyY2VDbGlwcGVyLmggXAogCVNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVy
U1ZHUmVzb3VyY2VDb250YWluZXIuY3BwIFwKQEAgLTMyMjAsNiArMzIyMiw4IEBAIHdlYmNvcmVf
c291cmNlcyArPSBcCiAJU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSb290
LmggXAogCVNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHU2hhZG93VHJlZVJv
b3RDb250YWluZXIuY3BwIFwKIAlTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNW
R1NoYWRvd1RyZWVSb290Q29udGFpbmVyLmggXAorCVNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9z
dmcvUmVuZGVyU1ZHU2hhcGUuY3BwIFwKKwlTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1Jl
bmRlclNWR1NoYXBlLmggXAogCVNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZH
VFNwYW4uY3BwIFwKIAlTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1RTcGFu
LmggXAogCVNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHVGV4dC5jcHAgXApk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBpIGIvU291cmNlL1dlYkNvcmUv
V2ViQ29yZS5neXBpCmluZGV4IDYzM2U2M2EuLmMwMjBkZTUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL1dlYkNvcmUuZ3lwaQorKysgYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkKQEAg
LTU4NzMsNiArNTg3Myw4IEBACiAgICAgICAgICAgICAncmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdN
b2RlbE9iamVjdC5oJywKICAgICAgICAgICAgICdyZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1BhdGgu
Y3BwJywKICAgICAgICAgICAgICdyZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1BhdGguaCcsCisgICAg
ICAgICAgICAncmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZWN0LmNwcCcsCisgICAgICAgICAgICAn
cmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZWN0LmgnLAogICAgICAgICAgICAgJ3JlbmRlcmluZy9z
dmcvUmVuZGVyU1ZHUmVzb3VyY2UuY3BwJywKICAgICAgICAgICAgICdyZW5kZXJpbmcvc3ZnL1Jl
bmRlclNWR1Jlc291cmNlLmgnLAogICAgICAgICAgICAgJ3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZH
UmVzb3VyY2VDbGlwcGVyLmNwcCcsCkBAIC01OTAxLDYgKzU5MDMsOCBAQAogICAgICAgICAgICAg
J3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUm9vdC5oJywKICAgICAgICAgICAgICdyZW5kZXJpbmcv
c3ZnL1JlbmRlclNWR1NoYWRvd1RyZWVSb290Q29udGFpbmVyLmNwcCcsCiAgICAgICAgICAgICAn
cmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdTaGFkb3dUcmVlUm9vdENvbnRhaW5lci5oJywKKyAgICAg
ICAgICAgICdyZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1NoYXBlLmNwcCcsCisgICAgICAgICAgICAn
cmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdTaGFwZS5oJywKICAgICAgICAgICAgICdyZW5kZXJpbmcv
c3ZnL1JlbmRlclNWR1RTcGFuLmNwcCcsCiAgICAgICAgICAgICAncmVuZGVyaW5nL3N2Zy9SZW5k
ZXJTVkdUU3Bhbi5oJywKICAgICAgICAgICAgICdyZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1RleHQu
Y3BwJywKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUucHJvIGIvU291cmNlL1dl
YkNvcmUvV2ViQ29yZS5wcm8KaW5kZXggYTk0YzI1Mi4uMTkzMGExMiAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvV2ViQ29yZS5wcm8KKysrIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5wcm8K
QEAgLTIyNjgsNiArMjI2OCw3IEBAIEhFQURFUlMgKz0gXAogICAgIHJlbmRlcmluZy9zdmcvUmVu
ZGVyU1ZHSW5saW5lVGV4dC5oIFwKICAgICByZW5kZXJpbmcvc3ZnL1JlbmRlclNWR01vZGVsT2Jq
ZWN0LmggXAogICAgIHJlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUGF0aC5oIFwKKyAgICByZW5kZXJp
bmcvc3ZnL1JlbmRlclNWR1JlY3QuaCBcCiAgICAgcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNv
dXJjZS5oIFwKICAgICByZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291cmNlQ2xpcHBlci5oIFwK
ICAgICByZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291cmNlQ29udGFpbmVyLmggXApAQCAtMjI4
Miw2ICsyMjgzLDcgQEAgSEVBREVSUyArPSBcCiAgICAgcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdS
ZXNvdXJjZVNvbGlkQ29sb3IuaCBcCiAgICAgcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSb290Lmgg
XAogICAgIHJlbmRlcmluZy9zdmcvUmVuZGVyU1ZHU2hhZG93VHJlZVJvb3RDb250YWluZXIuaCBc
CisgICAgcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdTaGFwZS5oIFwKICAgICByZW5kZXJpbmcvc3Zn
L1JlbmRlclNWR1RTcGFuLmggXAogICAgIHJlbmRlcmluZy9zdmcvUmVuZGVyU1ZHVGV4dC5oIFwK
ICAgICByZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1RleHRQYXRoLmggXApAQCAtMzMwMSw2ICszMzAz
LDggQEAgY29udGFpbnMoREVGSU5FUywgRU5BQkxFX1NWRz0xKSB7CiAgICAgICAgIHJlbmRlcmlu
Zy9zdHlsZS9TVkdSZW5kZXJTdHlsZURlZnMuY3BwIFwKICAgICAgICAgcmVuZGVyaW5nL1BvaW50
ZXJFdmVudHNIaXRSdWxlcy5jcHAgXAogICAgICAgICByZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Bh
dGguY3BwIFwKKyAgICAgICAgcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZWN0LmNwcCBcCisgICAg
ICAgIHJlbmRlcmluZy9zdmcvUmVuZGVyU1ZHU2hhcGUuY3BwIFwKICAgICAgICAgc3ZnL2FuaW1h
dGlvbi9TTUlMVGltZS5jcHAgXAogICAgICAgICBzdmcvYW5pbWF0aW9uL1NNSUxUaW1lQ29udGFp
bmVyLmNwcCBcCiAgICAgICAgIHN2Zy9hbmltYXRpb24vU1ZHU01JTEVsZW1lbnQuY3BwIFwKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUudmNwcm9qL1dlYkNvcmUudmNwcm9qIGIv
U291cmNlL1dlYkNvcmUvV2ViQ29yZS52Y3Byb2ovV2ViQ29yZS52Y3Byb2oKaW5kZXggNzJiZmUz
OC4uNDQ1Y2IwMyAxMDA3NTUKLS0tIGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS52Y3Byb2ovV2Vi
Q29yZS52Y3Byb2oKKysrIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS52Y3Byb2ovV2ViQ29yZS52
Y3Byb2oKQEAgLTQxNjExLDYgKzQxNjExLDExOCBAQAogCQkJCQk+CiAJCQkJPC9GaWxlPgogCQkJ
CTxGaWxlCisJCQkJCVJlbGF0aXZlUGF0aD0iLi5ccmVuZGVyaW5nXHN2Z1xSZW5kZXJTVkdSZWN0
LmNwcCIKKwkJCQkJPgorCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24KKwkJCQkJCU5hbWU9IkRlYnVn
fFdpbjMyIgorCQkJCQkJRXhjbHVkZWRGcm9tQnVpbGQ9InRydWUiCisJCQkJCQk+CisJCQkJCQk8
VG9vbAorCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiCisJCQkJCQkvPgorCQkJCQk8L0Zp
bGVDb25maWd1cmF0aW9uPgorCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24KKwkJCQkJCU5hbWU9IlJl
bGVhc2V8V2luMzIiCisJCQkJCQlFeGNsdWRlZEZyb21CdWlsZD0idHJ1ZSIKKwkJCQkJCT4KKwkJ
CQkJCTxUb29sCisJCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIKKwkJCQkJCS8+CisJCQkJ
CTwvRmlsZUNvbmZpZ3VyYXRpb24+CisJCQkJCTxGaWxlQ29uZmlndXJhdGlvbgorCQkJCQkJTmFt
ZT0iRGVidWdfQ2Fpcm9fQ0ZMaXRlfFdpbjMyIgorCQkJCQkJRXhjbHVkZWRGcm9tQnVpbGQ9InRy
dWUiCisJCQkJCQk+CisJCQkJCQk8VG9vbAorCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wi
CisJCQkJCQkvPgorCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPgorCQkJCQk8RmlsZUNvbmZpZ3Vy
YXRpb24KKwkJCQkJCU5hbWU9IlJlbGVhc2VfQ2Fpcm9fQ0ZMaXRlfFdpbjMyIgorCQkJCQkJRXhj
bHVkZWRGcm9tQnVpbGQ9InRydWUiCisJCQkJCQk+CisJCQkJCQk8VG9vbAorCQkJCQkJCU5hbWU9
IlZDQ0xDb21waWxlclRvb2wiCisJCQkJCQkvPgorCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPgor
CQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24KKwkJCQkJCU5hbWU9IkRlYnVnX0FsbHxXaW4zMiIKKwkJ
CQkJCUV4Y2x1ZGVkRnJvbUJ1aWxkPSJ0cnVlIgorCQkJCQkJPgorCQkJCQkJPFRvb2wKKwkJCQkJ
CQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIgorCQkJCQkJLz4KKwkJCQkJPC9GaWxlQ29uZmlndXJh
dGlvbj4KKwkJCQkJPEZpbGVDb25maWd1cmF0aW9uCisJCQkJCQlOYW1lPSJQcm9kdWN0aW9ufFdp
bjMyIgorCQkJCQkJRXhjbHVkZWRGcm9tQnVpbGQ9InRydWUiCisJCQkJCQk+CisJCQkJCQk8VG9v
bAorCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiCisJCQkJCQkvPgorCQkJCQk8L0ZpbGVD
b25maWd1cmF0aW9uPgorCQkJCTwvRmlsZT4KKwkJCQk8RmlsZQorCQkJCQlSZWxhdGl2ZVBhdGg9
Ii4uXHJlbmRlcmluZ1xzdmdcUmVuZGVyU1ZHUmVjdC5oIgorCQkJCQk+CisJCQkJPC9GaWxlPgor
CQkJCTxGaWxlCisJCQkJCVJlbGF0aXZlUGF0aD0iLi5ccmVuZGVyaW5nXHN2Z1xSZW5kZXJTVkdT
aGFwZS5jcHAiCisJCQkJCT4KKwkJCQkJPEZpbGVDb25maWd1cmF0aW9uCisJCQkJCQlOYW1lPSJE
ZWJ1Z3xXaW4zMiIKKwkJCQkJCUV4Y2x1ZGVkRnJvbUJ1aWxkPSJ0cnVlIgorCQkJCQkJPgorCQkJ
CQkJPFRvb2wKKwkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIgorCQkJCQkJLz4KKwkJCQkJ
PC9GaWxlQ29uZmlndXJhdGlvbj4KKwkJCQkJPEZpbGVDb25maWd1cmF0aW9uCisJCQkJCQlOYW1l
PSJSZWxlYXNlfFdpbjMyIgorCQkJCQkJRXhjbHVkZWRGcm9tQnVpbGQ9InRydWUiCisJCQkJCQk+
CisJCQkJCQk8VG9vbAorCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiCisJCQkJCQkvPgor
CQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPgorCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24KKwkJCQkJ
CU5hbWU9IkRlYnVnX0NhaXJvX0NGTGl0ZXxXaW4zMiIKKwkJCQkJCUV4Y2x1ZGVkRnJvbUJ1aWxk
PSJ0cnVlIgorCQkJCQkJPgorCQkJCQkJPFRvb2wKKwkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJU
b29sIgorCQkJCQkJLz4KKwkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4KKwkJCQkJPEZpbGVDb25m
aWd1cmF0aW9uCisJCQkJCQlOYW1lPSJSZWxlYXNlX0NhaXJvX0NGTGl0ZXxXaW4zMiIKKwkJCQkJ
CUV4Y2x1ZGVkRnJvbUJ1aWxkPSJ0cnVlIgorCQkJCQkJPgorCQkJCQkJPFRvb2wKKwkJCQkJCQlO
YW1lPSJWQ0NMQ29tcGlsZXJUb29sIgorCQkJCQkJLz4KKwkJCQkJPC9GaWxlQ29uZmlndXJhdGlv
bj4KKwkJCQkJPEZpbGVDb25maWd1cmF0aW9uCisJCQkJCQlOYW1lPSJEZWJ1Z19BbGx8V2luMzIi
CisJCQkJCQlFeGNsdWRlZEZyb21CdWlsZD0idHJ1ZSIKKwkJCQkJCT4KKwkJCQkJCTxUb29sCisJ
CQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIKKwkJCQkJCS8+CisJCQkJCTwvRmlsZUNvbmZp
Z3VyYXRpb24+CisJCQkJCTxGaWxlQ29uZmlndXJhdGlvbgorCQkJCQkJTmFtZT0iUHJvZHVjdGlv
bnxXaW4zMiIKKwkJCQkJCUV4Y2x1ZGVkRnJvbUJ1aWxkPSJ0cnVlIgorCQkJCQkJPgorCQkJCQkJ
PFRvb2wKKwkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIgorCQkJCQkJLz4KKwkJCQkJPC9G
aWxlQ29uZmlndXJhdGlvbj4KKwkJCQk8L0ZpbGU+CisJCQkJPEZpbGUKKwkJCQkJUmVsYXRpdmVQ
YXRoPSIuLlxyZW5kZXJpbmdcc3ZnXFJlbmRlclNWR1NoYXBlLmgiCisJCQkJCT4KKwkJCQk8L0Zp
bGU+CisJCQkJPEZpbGUKIAkJCQkJUmVsYXRpdmVQYXRoPSIuLlxyZW5kZXJpbmdcc3ZnXFJlbmRl
clNWR1RleHQuY3BwIgogCQkJCQk+CiAJCQkJCTxGaWxlQ29uZmlndXJhdGlvbgpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qIGIvU291
cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCmluZGV4IDI0NzRk
NTEuLjQwMjljMjEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9q
L3Byb2plY3QucGJ4cHJvagorKysgYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9w
cm9qZWN0LnBieHByb2oKQEAgLTk5MDcsMTAgKzk5MDcsMTQgQEAKIAkJOUZGRTNFQTMxMUI1QTQz
OTAwMzc4NzRFIC8qIEpTTWVtb3J5SW5mby5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5j
cHA7IHBhdGggPSBKU01lbW9yeUluZm8uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQk5RkZFM0VBNDExQjVBNDM5MDAzNzg3NEUgLyogSlNNZW1vcnlJbmZvLmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpTTWVtb3J5SW5mby5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQlBMDBCNzIxOTExREU2NDI3MDA4QUI5RkYgLyogQ2hlY2tlZEludC5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBDaGVja2VkSW50Lmg7IHBhdGggPSBjYW52YXMv
Q2hlY2tlZEludC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlBMTMwOUI2NDEzRjE4
RDkzMDBDOEEwNjUgLyogUmVuZGVyU1ZHUmVjdC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNw
cC5jcHA7IG5hbWUgPSBSZW5kZXJTVkdSZWN0LmNwcDsgcGF0aCA9IHJlbmRlcmluZy9zdmcvUmVu
ZGVyU1ZHUmVjdC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUExMzA5QjY4MTNG
MThEQTEwMEM4QTA2NSAvKiBSZW5kZXJTVkdSZWN0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgbmFtZSA9IFJlbmRlclNWR1JlY3QuaDsgcGF0aCA9IHJlbmRlcmluZy9zdmcvUmVuZGVyU1ZH
UmVjdC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlBMTM2QTAwQTExMzREQkQyMDBD
QzhENTAgLyogWE1MSHR0cFJlcXVlc3RQcm9ncmVzc0V2ZW50VGhyb3R0bGUuY3BwICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gWE1MSHR0cFJlcXVlc3RQcm9ncmVzc0V2ZW50
VGhyb3R0bGUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlBMTM2QTAwQjExMzRE
QkQyMDBDQzhENTAgLyogWE1MSHR0cFJlcXVlc3RQcm9ncmVzc0V2ZW50VGhyb3R0bGUuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gWE1MSHR0cFJlcXVlc3RQcm9ncmVzc0V2ZW50
VGhyb3R0bGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQTE3QzgxMjAwRjJBNUNG
NzAwNURBQUVCIC8qIEhUTUxFbGVtZW50RmFjdG9yeS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmNwcC5jcHA7IHBhdGggPSBIVE1MRWxlbWVudEZhY3RvcnkuY3BwOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQlBMTdDODEyMTBGMkE1Q0Y3MDA1REFBRUIgLyogSFRNTEVsZW1lbnRGYWN0
b3J5LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEhUTUxFbGVtZW50RmFjdG9y
eS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlBMUI3NzhDMzE0MDNBOEQ0MDBEOTYz
OUYgLyogUmVuZGVyU1ZHU2hhcGUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBu
YW1lID0gUmVuZGVyU1ZHU2hhcGUuY3BwOyBwYXRoID0gcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdT
aGFwZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUExQjc3OEM3MTQwM0E4RTYw
MEQ5NjM5RiAvKiBSZW5kZXJTVkdTaGFwZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5h
bWUgPSBSZW5kZXJTVkdTaGFwZS5oOyBwYXRoID0gcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdTaGFw
ZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlBMUM3RkFBMTEzM0E1RDM1MDBENjcz
MkQgLyogSlNYUGF0aFJlc3VsdEN1c3RvbS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5j
cHA7IHBhdGggPSBKU1hQYXRoUmVzdWx0Q3VzdG9tLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJQTFFMTE1NDMxMzAxNUMzRDAwNTRBQzhDIC8qIERpc3RhbnRMaWdodFNvdXJjZS5j
cHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBEaXN0YW50TGlnaHRTb3Vy
Y2UuY3BwOyBwYXRoID0gZmlsdGVycy9EaXN0YW50TGlnaHRTb3VyY2UuY3BwOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQlBMUUxMTU0NTEzMDE1QzRFMDA1NEFDOEMgLyogUG9pbnRMaWdo
dFNvdXJjZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBQb2ludExp
Z2h0U291cmNlLmNwcDsgcGF0aCA9IGZpbHRlcnMvUG9pbnRMaWdodFNvdXJjZS5jcHA7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0xMjk1MCw2ICsxMjk1NCwxMCBAQAogCQkwODY3RDY5
MUZFODQwMjhGQzAyQUFDMDcgLyogV2ViS2l0ICovID0gewogCQkJaXNhID0gUEJYR3JvdXA7CiAJ
CQljaGlsZHJlbiA9ICgKKwkJCQlBMUI3NzhDNzE0MDNBOEU2MDBEOTYzOUYgLyogUmVuZGVyU1ZH
U2hhcGUuaCAqLywKKwkJCQlBMUI3NzhDMzE0MDNBOEQ0MDBEOTYzOUYgLyogUmVuZGVyU1ZHU2hh
cGUuY3BwICovLAorCQkJCUExMzA5QjY4MTNGMThEQTEwMEM4QTA2NSAvKiBSZW5kZXJTVkdSZWN0
LmggKi8sCisJCQkJQTEzMDlCNjQxM0YxOEQ5MzAwQzhBMDY1IC8qIFJlbmRlclNWR1JlY3QuY3Bw
ICovLAogCQkJCTY1Qzk3QUYyMDhFQTkwODgwMEFDRDI3MyAvKiBjb25maWcuaCAqLywKIAkJCQlF
REVDOTgwMjBBRUQ3RTE3MDA1OTEzN0YgLyogV2ViQ29yZVByZWZpeC5oICovLAogCQkJCTkzMDcw
NjEzMDlFMENBODIwMEIxN0ZFNCAvKiBEZXJpdmVkU291cmNlcy5tYWtlICovLApkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck9iamVjdC5oIGIvU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL1JlbmRlck9iamVjdC5oCmluZGV4IGJmMTA0NjYuLjgyNzQxODQgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJPYmplY3QuaAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyT2JqZWN0LmgKQEAgLTM1Myw3ICszNTMsMTAgQEAg
cHVibGljOgogICAgIHZpcnR1YWwgYm9vbCBpc1NWR1ZpZXdwb3J0Q29udGFpbmVyKCkgY29uc3Qg
eyByZXR1cm4gZmFsc2U7IH0gCiAgICAgdmlydHVhbCBib29sIGlzU1ZHR3JhZGllbnRTdG9wKCkg
Y29uc3QgeyByZXR1cm4gZmFsc2U7IH0KICAgICB2aXJ0dWFsIGJvb2wgaXNTVkdIaWRkZW5Db250
YWluZXIoKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQorICAgIHZpcnR1YWwgYm9vbCBpc1NWR0xp
bmUoKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQogICAgIHZpcnR1YWwgYm9vbCBpc1NWR1BhdGgo
KSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQorICAgIHZpcnR1YWwgYm9vbCBpc1NWR1JlY3QoKSBj
b25zdCB7IHJldHVybiBmYWxzZTsgfQorICAgIHZpcnR1YWwgYm9vbCBpc1NWR1NoYXBlKCkgY29u
c3QgeyByZXR1cm4gZmFsc2U7IH0KICAgICB2aXJ0dWFsIGJvb2wgaXNTVkdUZXh0KCkgY29uc3Qg
eyByZXR1cm4gZmFsc2U7IH0KICAgICB2aXJ0dWFsIGJvb2wgaXNTVkdUZXh0UGF0aCgpIGNvbnN0
IHsgcmV0dXJuIGZhbHNlOyB9CiAgICAgdmlydHVhbCBib29sIGlzU1ZHSW5saW5lKCkgY29uc3Qg
eyByZXR1cm4gZmFsc2U7IH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJUcmVlQXNUZXh0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUcmVl
QXNUZXh0LmNwcAppbmRleCA1YjI5YmI1Li42MWZhZmUyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVyVHJlZUFzVGV4dC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL1JlbmRlclRyZWVBc1RleHQuY3BwCkBAIC01MjAsOCArNTIwLDggQEAgc3RhdGlj
IHZvaWQgd3JpdGVUZXh0UnVuKFRleHRTdHJlYW0mIHRzLCBjb25zdCBSZW5kZXJUZXh0JiBvLCBj
b25zdCBJbmxpbmVUZXh0Qm8KIHZvaWQgd3JpdGUoVGV4dFN0cmVhbSYgdHMsIGNvbnN0IFJlbmRl
ck9iamVjdCYgbywgaW50IGluZGVudCwgUmVuZGVyQXNUZXh0QmVoYXZpb3IgYmVoYXZpb3IpCiB7
CiAjaWYgRU5BQkxFKFNWRykKLSAgICBpZiAoby5pc1NWR1BhdGgoKSkgewotICAgICAgICB3cml0
ZSh0cywgKnRvUmVuZGVyU1ZHUGF0aCgmbyksIGluZGVudCk7CisgICAgaWYgKG8uaXNTVkdTaGFw
ZSgpKSB7CisgICAgICAgIHdyaXRlKHRzLCAqdG9SZW5kZXJTVkdTaGFwZSgmbyksIGluZGVudCk7
CiAgICAgICAgIHJldHVybjsKICAgICB9CiAgICAgaWYgKG8uaXNTVkdHcmFkaWVudFN0b3AoKSkg
ewpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdBbGxJ
bk9uZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR0FsbEluT25l
LmNwcAppbmRleCA5ZWEzYmU1Li4yOTY5MDA4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvc3ZnL1JlbmRlclNWR0FsbEluT25lLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvc3ZnL1JlbmRlclNWR0FsbEluT25lLmNwcApAQCAtMzUsNiArMzUsNyBAQAogI2lu
Y2x1ZGUgIlJlbmRlclNWR0lubGluZVRleHQuY3BwIgogI2luY2x1ZGUgIlJlbmRlclNWR01vZGVs
T2JqZWN0LmNwcCIKICNpbmNsdWRlICJSZW5kZXJTVkdQYXRoLmNwcCIKKyNpbmNsdWRlICJSZW5k
ZXJTVkdSZWN0LmNwcCIKICNpbmNsdWRlICJSZW5kZXJTVkdSZXNvdXJjZS5jcHAiCiAjaW5jbHVk
ZSAiUmVuZGVyU1ZHUmVzb3VyY2VDbGlwcGVyLmNwcCIKICNpbmNsdWRlICJSZW5kZXJTVkdSZXNv
dXJjZUNvbnRhaW5lci5jcHAiCkBAIC00OSw2ICs1MCw3IEBACiAjaW5jbHVkZSAiUmVuZGVyU1ZH
UmVzb3VyY2VTb2xpZENvbG9yLmNwcCIKICNpbmNsdWRlICJSZW5kZXJTVkdSb290LmNwcCIKICNp
bmNsdWRlICJSZW5kZXJTVkdTaGFkb3dUcmVlUm9vdENvbnRhaW5lci5jcHAiCisjaW5jbHVkZSAi
UmVuZGVyU1ZHU2hhcGUuY3BwIgogI2luY2x1ZGUgIlJlbmRlclNWR1RTcGFuLmNwcCIKICNpbmNs
dWRlICJSZW5kZXJTVkdUZXh0LmNwcCIKICNpbmNsdWRlICJSZW5kZXJTVkdUZXh0UGF0aC5jcHAi
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR01vZGVs
T2JqZWN0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHTW9kZWxP
YmplY3QuY3BwCmluZGV4IDE0YzFkYjguLmMyMzQwYjMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHTW9kZWxPYmplY3QuY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHTW9kZWxPYmplY3QuY3BwCkBAIC0xNTMsNyAr
MTUzLDcgQEAgc3RhdGljIGJvb2wgaW50ZXJzZWN0c0FsbG93aW5nRW1wdHkoY29uc3QgRmxvYXRS
ZWN0JiByLCBjb25zdCBGbG9hdFJlY3QmIG90aGVyKQogLy8gaW1hZ2UsIGxpbmUsIHBhdGgsIHBv
bHlnb24sIHBvbHlsaW5lLCByZWN0LCB0ZXh0IGFuZCB1c2UuCiBzdGF0aWMgYm9vbCBpc0dyYXBo
aWNzRWxlbWVudChSZW5kZXJPYmplY3QqIHJlbmRlcmVyKQogewotICAgIHJldHVybiByZW5kZXJl
ci0+aXNTVkdQYXRoKCkgfHwgcmVuZGVyZXItPmlzU1ZHVGV4dCgpIHx8IHJlbmRlcmVyLT5pc1NW
R0ltYWdlKCkgfHwgcmVuZGVyZXItPmlzU1ZHU2hhZG93VHJlZVJvb3RDb250YWluZXIoKTsKKyAg
ICByZXR1cm4gcmVuZGVyZXItPmlzU1ZHU2hhcGUoKSB8fCByZW5kZXJlci0+aXNTVkdUZXh0KCkg
fHwgcmVuZGVyZXItPmlzU1ZHSW1hZ2UoKSB8fCByZW5kZXJlci0+aXNTVkdTaGFkb3dUcmVlUm9v
dENvbnRhaW5lcigpOwogfQogCiBib29sIFJlbmRlclNWR01vZGVsT2JqZWN0OjpjaGVja0ludGVy
c2VjdGlvbihSZW5kZXJPYmplY3QqIHJlbmRlcmVyLCBjb25zdCBGbG9hdFJlY3QmIHJlY3QpCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1BhdGguY3Bw
IGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdQYXRoLmNwcAppbmRleCBh
MDM5MWY3Li5lZGFkNDM5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3Zn
L1JlbmRlclNWR1BhdGguY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVu
ZGVyU1ZHUGF0aC5jcHAKQEAgLTYsNiArNiw4IEBACiAgKiBDb3B5cmlnaHQgKEMpIDIwMDkgRGly
ayBTY2h1bHplIDxrcml0QHdlYmtpdC5vcmc+CiAgKiBDb3B5cmlnaHQgKEMpIFJlc2VhcmNoIElu
IE1vdGlvbiBMaW1pdGVkIDIwMTAuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKiBDb3B5cmlnaHQg
KEMpIDIwMDkgSmVmZiBTY2hpbGxlciA8Y29kZWRyZWFkQGdtYWlsLmNvbT4KKyAqIENvcHlyaWdo
dCAoQykgMjAxMSBSZW5hdGEgSG9kb3ZhbiA8cmVuaUB3ZWJraXQub3JnPgorICogQ29weXJpZ2h0
IChDKSAyMDExIFVuaXZlcnNpdHkgb2YgU3plZ2VkCiAgKgogICogVGhpcyBsaWJyYXJ5IGlzIGZy
ZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICogbW9kaWZ5IGl0
IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKQEAgLTI4
LDQ5ICszMCwxMyBAQAogI2lmIEVOQUJMRShTVkcpCiAjaW5jbHVkZSAiUmVuZGVyU1ZHUGF0aC5o
IgogCi0jaW5jbHVkZSAiRmxvYXRQb2ludC5oIgotI2luY2x1ZGUgIkZsb2F0UXVhZC5oIgotI2lu
Y2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgotI2luY2x1ZGUgIkhpdFRlc3RSZXF1ZXN0LmgiCi0j
aW5jbHVkZSAiUG9pbnRlckV2ZW50c0hpdFJ1bGVzLmgiCi0jaW5jbHVkZSAiUmVuZGVyU1ZHQ29u
dGFpbmVyLmgiCi0jaW5jbHVkZSAiUmVuZGVyU1ZHUmVzb3VyY2VNYXJrZXIuaCIKLSNpbmNsdWRl
ICJSZW5kZXJTVkdSZXNvdXJjZVNvbGlkQ29sb3IuaCIKLSNpbmNsdWRlICJTVkdSZW5kZXJTdXBw
b3J0LmgiCi0jaW5jbHVkZSAiU1ZHUmVzb3VyY2VzLmgiCisjaW5jbHVkZSAiU1ZHUGF0aEVsZW1l
bnQuaCIKICNpbmNsdWRlICJTVkdTdHlsZWRUcmFuc2Zvcm1hYmxlRWxlbWVudC5oIgotI2luY2x1
ZGUgIlNWR1RyYW5zZm9ybUxpc3QuaCIKLSNpbmNsdWRlICJTVkdVUklSZWZlcmVuY2UuaCIKLSNp
bmNsdWRlICJTdHJva2VTdHlsZUFwcGxpZXIuaCIKLSNpbmNsdWRlIDx3dGYvTWF0aEV4dHJhcy5o
PgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLWNsYXNzIEJvdW5kaW5nUmVjdFN0cm9rZVN0eWxl
QXBwbGllciA6IHB1YmxpYyBTdHJva2VTdHlsZUFwcGxpZXIgewotcHVibGljOgotICAgIEJvdW5k
aW5nUmVjdFN0cm9rZVN0eWxlQXBwbGllcihjb25zdCBSZW5kZXJPYmplY3QqIG9iamVjdCwgUmVu
ZGVyU3R5bGUqIHN0eWxlKQotICAgICAgICA6IG1fb2JqZWN0KG9iamVjdCkKLSAgICAgICAgLCBt
X3N0eWxlKHN0eWxlKQotICAgIHsKLSAgICAgICAgQVNTRVJUKHN0eWxlKTsKLSAgICAgICAgQVNT
RVJUKG9iamVjdCk7Ci0gICAgfQotCi0gICAgdm9pZCBzdHJva2VTdHlsZShHcmFwaGljc0NvbnRl
eHQqIGdjKQotICAgIHsKLSAgICAgICAgU1ZHUmVuZGVyU3VwcG9ydDo6YXBwbHlTdHJva2VTdHls
ZVRvQ29udGV4dChnYywgbV9zdHlsZSwgbV9vYmplY3QpOwotICAgIH0KLQotcHJpdmF0ZToKLSAg
ICBjb25zdCBSZW5kZXJPYmplY3QqIG1fb2JqZWN0OwotICAgIFJlbmRlclN0eWxlKiBtX3N0eWxl
OwotfTsKLQogUmVuZGVyU1ZHUGF0aDo6UmVuZGVyU1ZHUGF0aChTVkdTdHlsZWRUcmFuc2Zvcm1h
YmxlRWxlbWVudCogbm9kZSkKLSAgICA6IFJlbmRlclNWR01vZGVsT2JqZWN0KG5vZGUpCi0gICAg
LCBtX25lZWRzQm91bmRhcmllc1VwZGF0ZShmYWxzZSkgLy8gZGVmYXVsdCBpcyBmYWxzZSwgdGhl
IGNhY2hlZCByZWN0cyBhcmUgZW1wdHkgZnJvbSB0aGUgYmVnaW5uaW5nCi0gICAgLCBtX25lZWRz
UGF0aFVwZGF0ZSh0cnVlKSAvLyBkZWZhdWx0IGlzIHRydWUsIHNvIHdlIGdyYWIgYSBQYXRoIG9i
amVjdCBvbmNlIGZyb20gU1ZHU3R5bGVkVHJhbnNmb3JtYWJsZUVsZW1lbnQKLSAgICAsIG1fbmVl
ZHNUcmFuc2Zvcm1VcGRhdGUodHJ1ZSkgLy8gZGVmYXVsdCBpcyB0cnVlLCBzbyB3ZSBncmFiIGEg
QWZmaW5lVHJhbnNmb3JtIG9iamVjdCBvbmNlIGZyb20gU1ZHU3R5bGVkVHJhbnNmb3JtYWJsZUVs
ZW1lbnQKKyAgICA6IFJlbmRlclNWR1NoYXBlKG5vZGUpCiB7CiB9CiAKQEAgLTc4LDMxNiArNDQs
NiBAQCBSZW5kZXJTVkdQYXRoOjp+UmVuZGVyU1ZHUGF0aCgpCiB7CiB9CiAKLWJvb2wgUmVuZGVy
U1ZHUGF0aDo6ZmlsbENvbnRhaW5zKGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50LCBib29sIHJlcXVp
cmVzRmlsbCwgV2luZFJ1bGUgZmlsbFJ1bGUpCi17Ci0gICAgaWYgKCFtX2ZpbGxCb3VuZGluZ0Jv
eC5jb250YWlucyhwb2ludCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIENvbG9yIGZh
bGxiYWNrQ29sb3I7Ci0gICAgaWYgKHJlcXVpcmVzRmlsbCAmJiAhUmVuZGVyU1ZHUmVzb3VyY2U6
OmZpbGxQYWludGluZ1Jlc291cmNlKHRoaXMsIHN0eWxlKCksIGZhbGxiYWNrQ29sb3IpKQotICAg
ICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICByZXR1cm4gbV9wYXRoLmNvbnRhaW5zKHBvaW50LCBm
aWxsUnVsZSk7Ci19Ci0KLWJvb2wgUmVuZGVyU1ZHUGF0aDo6c3Ryb2tlQ29udGFpbnMoY29uc3Qg
RmxvYXRQb2ludCYgcG9pbnQsIGJvb2wgcmVxdWlyZXNTdHJva2UpCi17Ci0gICAgaWYgKCFtX3N0
cm9rZUFuZE1hcmtlckJvdW5kaW5nQm94LmNvbnRhaW5zKHBvaW50KSkKLSAgICAgICAgcmV0dXJu
IGZhbHNlOwotCi0gICAgQ29sb3IgZmFsbGJhY2tDb2xvcjsKLSAgICBpZiAocmVxdWlyZXNTdHJv
a2UgJiYgIVJlbmRlclNWR1Jlc291cmNlOjpzdHJva2VQYWludGluZ1Jlc291cmNlKHRoaXMsIHN0
eWxlKCksIGZhbGxiYWNrQ29sb3IpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBpZiAo
c2hvdWxkU3Ryb2tlWmVyb0xlbmd0aFN1YnBhdGgoKSkKLSAgICAgICAgcmV0dXJuIHplcm9MZW5n
dGhTdWJwYXRoUmVjdCgpLmNvbnRhaW5zKHBvaW50KTsKLQotICAgIEJvdW5kaW5nUmVjdFN0cm9r
ZVN0eWxlQXBwbGllciBzdHJva2VTdHlsZSh0aGlzLCBzdHlsZSgpKTsKLSAgICByZXR1cm4gbV9w
YXRoLnN0cm9rZUNvbnRhaW5zKCZzdHJva2VTdHlsZSwgcG9pbnQpOwotfQotCi12b2lkIFJlbmRl
clNWR1BhdGg6OmxheW91dCgpCi17Ci0gICAgTGF5b3V0UmVwYWludGVyIHJlcGFpbnRlcigqdGhp
cywgY2hlY2tGb3JSZXBhaW50RHVyaW5nTGF5b3V0KCkgJiYgc2VsZk5lZWRzTGF5b3V0KCkpOwot
ICAgIFNWR1N0eWxlZFRyYW5zZm9ybWFibGVFbGVtZW50KiBlbGVtZW50ID0gc3RhdGljX2Nhc3Q8
U1ZHU3R5bGVkVHJhbnNmb3JtYWJsZUVsZW1lbnQqPihub2RlKCkpOwotCi0gICAgYm9vbCB1cGRh
dGVDYWNoZWRCb3VuZGFyaWVzSW5QYXJlbnRzID0gZmFsc2U7Ci0KLSAgICBib29sIG5lZWRzUGF0
aFVwZGF0ZSA9IG1fbmVlZHNQYXRoVXBkYXRlOwotICAgIGlmIChuZWVkc1BhdGhVcGRhdGUpIHsK
LSAgICAgICAgbV9wYXRoLmNsZWFyKCk7Ci0gICAgICAgIGVsZW1lbnQtPnRvUGF0aERhdGEobV9w
YXRoKTsKLSAgICAgICAgbV9uZWVkc1BhdGhVcGRhdGUgPSBmYWxzZTsKLSAgICAgICAgdXBkYXRl
Q2FjaGVkQm91bmRhcmllc0luUGFyZW50cyA9IHRydWU7Ci0gICAgfQotCi0gICAgaWYgKG1fbmVl
ZHNUcmFuc2Zvcm1VcGRhdGUpIHsKLSAgICAgICAgbV9sb2NhbFRyYW5zZm9ybSA9IGVsZW1lbnQt
PmFuaW1hdGVkTG9jYWxUcmFuc2Zvcm0oKTsKLSAgICAgICAgbV9uZWVkc1RyYW5zZm9ybVVwZGF0
ZSA9IGZhbHNlOwotICAgICAgICB1cGRhdGVDYWNoZWRCb3VuZGFyaWVzSW5QYXJlbnRzID0gdHJ1
ZTsKLSAgICB9Ci0KLSAgICBpZiAobV9uZWVkc0JvdW5kYXJpZXNVcGRhdGUpCi0gICAgICAgIHVw
ZGF0ZUNhY2hlZEJvdW5kYXJpZXNJblBhcmVudHMgPSB0cnVlOwotCi0gICAgLy8gSW52YWxpZGF0
ZSBhbGwgcmVzb3VyY2VzIG9mIHRoaXMgY2xpZW50IGlmIG91ciBsYXlvdXQgY2hhbmdlZC4KLSAg
ICBpZiAobV9ldmVySGFkTGF5b3V0ICYmIHNlbGZOZWVkc0xheW91dCgpKSB7Ci0gICAgICAgIFNW
R1Jlc291cmNlc0NhY2hlOjpjbGllbnRMYXlvdXRDaGFuZ2VkKHRoaXMpOwotICAgICAgICBtX21h
cmtlckxheW91dEluZm8uY2xlYXIoKTsKLSAgICB9Ci0KLSAgICAvLyBBdCB0aGlzIHBvaW50IExh
eW91dFJlcGFpbnRlciBhbHJlYWR5IGdyYWJiZWQgdGhlIG9sZCBib3VuZHMsCi0gICAgLy8gcmVj
YWxjdWxhdGUgdGhlbSBub3cgc28gcmVwYWludEFmdGVyTGF5b3V0KCkgdXNlcyB0aGUgbmV3IGJv
dW5kcy4KLSAgICBpZiAobmVlZHNQYXRoVXBkYXRlIHx8IG1fbmVlZHNCb3VuZGFyaWVzVXBkYXRl
KSB7Ci0gICAgICAgIHVwZGF0ZUNhY2hlZEJvdW5kYXJpZXMoKTsKLSAgICAgICAgbV9uZWVkc0Jv
dW5kYXJpZXNVcGRhdGUgPSBmYWxzZTsKLSAgICB9Ci0KLSAgICAvLyBJZiBvdXIgYm91bmRzIGNo
YW5nZWQsIG5vdGlmeSB0aGUgcGFyZW50cy4KLSAgICBpZiAodXBkYXRlQ2FjaGVkQm91bmRhcmll
c0luUGFyZW50cykKLSAgICAgICAgUmVuZGVyU1ZHTW9kZWxPYmplY3Q6OnNldE5lZWRzQm91bmRh
cmllc1VwZGF0ZSgpOwotCi0gICAgcmVwYWludGVyLnJlcGFpbnRBZnRlckxheW91dCgpOwotICAg
IHNldE5lZWRzTGF5b3V0KGZhbHNlKTsKLX0KLQotYm9vbCBSZW5kZXJTVkdQYXRoOjpzaG91bGRT
dHJva2VaZXJvTGVuZ3RoU3VicGF0aCgpIGNvbnN0Ci17Ci0gICAgLy8gU3BlYygxMS40KTogQW55
IHplcm8gbGVuZ3RoIHN1YnBhdGggc2hhbGwgbm90IGJlIHN0cm9rZWQgaWYgdGhlIOKAmHN0cm9r
ZS1saW5lY2Fw4oCZIHByb3BlcnR5IGhhcyBhIHZhbHVlIG9mIGJ1dHQKLSAgICAvLyBidXQgc2hh
bGwgYmUgc3Ryb2tlZCBpZiB0aGUg4oCYc3Ryb2tlLWxpbmVjYXDigJkgcHJvcGVydHkgaGFzIGEg
dmFsdWUgb2Ygcm91bmQgb3Igc3F1YXJlCi0gICAgcmV0dXJuIHN0eWxlKCktPnN2Z1N0eWxlKCkt
Pmhhc1N0cm9rZSgpICYmIHN0eWxlKCktPnN2Z1N0eWxlKCktPmNhcFN0eWxlKCkgIT0gQnV0dENh
cCAmJiAhbV9maWxsQm91bmRpbmdCb3gud2lkdGgoKSAmJiAhbV9maWxsQm91bmRpbmdCb3guaGVp
Z2h0KCk7Ci19Ci0KLUZsb2F0UmVjdCBSZW5kZXJTVkdQYXRoOjp6ZXJvTGVuZ3RoU3VicGF0aFJl
Y3QoKSBjb25zdAotewotICAgIFNWR0VsZW1lbnQqIHN2Z0VsZW1lbnQgPSBzdGF0aWNfY2FzdDxT
VkdFbGVtZW50Kj4obm9kZSgpKTsKLSAgICBmbG9hdCBzdHJva2VXaWR0aCA9IHN0eWxlKCktPnN2
Z1N0eWxlKCktPnN0cm9rZVdpZHRoKCkudmFsdWUoc3ZnRWxlbWVudCk7Ci0gICAgcmV0dXJuIEZs
b2F0UmVjdChtX2ZpbGxCb3VuZGluZ0JveC54KCkgLSBzdHJva2VXaWR0aCAvIDIsIG1fZmlsbEJv
dW5kaW5nQm94LnkoKSAtIHN0cm9rZVdpZHRoIC8gMiwgc3Ryb2tlV2lkdGgsIHN0cm9rZVdpZHRo
KTsKLX0KLQotdm9pZCBSZW5kZXJTVkdQYXRoOjpzZXR1cFNxdWFyZUNhcFBhdGgoUGF0aComIHVz
ZVBhdGgsIGludCYgYXBwbHlNb2RlKQotewotICAgIC8vIFNwZWMoMTEuNCk6IEFueSB6ZXJvIGxl
bmd0aCBzdWJwYXRoIHNoYWxsIG5vdCBiZSBzdHJva2VkIGlmIHRoZSDigJhzdHJva2UtbGluZWNh
cOKAmSBwcm9wZXJ0eSBoYXMgYSB2YWx1ZSBvZiBidXR0Ci0gICAgLy8gYnV0IHNoYWxsIGJlIHN0
cm9rZWQgaWYgdGhlIOKAmHN0cm9rZS1saW5lY2Fw4oCZIHByb3BlcnR5IGhhcyBhIHZhbHVlIG9m
IHJvdW5kIG9yIHNxdWFyZQotICAgIERFRklORV9TVEFUSUNfTE9DQUwoUGF0aCwgdGVtcFBhdGgs
ICgpKTsKLQotICAgIGFwcGx5TW9kZSA9IEFwcGx5VG9GaWxsTW9kZTsKLSAgICB1c2VQYXRoID0g
JnRlbXBQYXRoOwotICAgIHVzZVBhdGgtPmNsZWFyKCk7Ci0gICAgaWYgKHN0eWxlKCktPnN2Z1N0
eWxlKCktPmNhcFN0eWxlKCkgPT0gU3F1YXJlQ2FwKQotICAgICAgICB1c2VQYXRoLT5hZGRSZWN0
KHplcm9MZW5ndGhTdWJwYXRoUmVjdCgpKTsKLSAgICBlbHNlCi0gICAgICAgIHVzZVBhdGgtPmFk
ZEVsbGlwc2UoemVyb0xlbmd0aFN1YnBhdGhSZWN0KCkpOwotfQotCi1ib29sIFJlbmRlclNWR1Bh
dGg6OnNldHVwTm9uU2NhbGluZ1N0cm9rZVBhdGgoUGF0aComIHVzZVBhdGgsIEdyYXBoaWNzQ29u
dGV4dFN0YXRlU2F2ZXImIHN0YXRlU2F2ZXIpCi17Ci0gICAgREVGSU5FX1NUQVRJQ19MT0NBTChQ
YXRoLCB0ZW1wUGF0aCwgKCkpOwotCi0gICAgU1ZHU3R5bGVkVHJhbnNmb3JtYWJsZUVsZW1lbnQq
IGVsZW1lbnQgPSBzdGF0aWNfY2FzdDxTVkdTdHlsZWRUcmFuc2Zvcm1hYmxlRWxlbWVudCo+KG5v
ZGUoKSk7Ci0gICAgQWZmaW5lVHJhbnNmb3JtIG5vblNjYWxpbmdTdHJva2VUcmFuc2Zvcm0gPSBl
bGVtZW50LT5nZXRTY3JlZW5DVE0oU1ZHTG9jYXRhYmxlOjpEaXNhbGxvd1N0eWxlVXBkYXRlKTsK
LSAgICBpZiAoIW5vblNjYWxpbmdTdHJva2VUcmFuc2Zvcm0uaXNJbnZlcnRpYmxlKCkpCi0gICAg
ICAgIHJldHVybiBmYWxzZTsKLQotICAgIHRlbXBQYXRoID0gbV9wYXRoOwotICAgIHVzZVBhdGgg
PSAmdGVtcFBhdGg7Ci0gICAgdGVtcFBhdGgudHJhbnNmb3JtKG5vblNjYWxpbmdTdHJva2VUcmFu
c2Zvcm0pOwotCi0gICAgc3RhdGVTYXZlci5zYXZlKCk7Ci0gICAgc3RhdGVTYXZlci5jb250ZXh0
KCktPmNvbmNhdENUTShub25TY2FsaW5nU3Ryb2tlVHJhbnNmb3JtLmludmVyc2UoKSk7Ci0gICAg
cmV0dXJuIHRydWU7Ci19Ci0KLXZvaWQgUmVuZGVyU1ZHUGF0aDo6ZmlsbEFuZFN0cm9rZVBhdGgo
R3JhcGhpY3NDb250ZXh0KiBjb250ZXh0KQotewotICAgIFJlbmRlclN0eWxlKiBzdHlsZSA9IHRo
aXMtPnN0eWxlKCk7Ci0KLSAgICBDb2xvciBmYWxsYmFja0NvbG9yOwotICAgIGlmIChSZW5kZXJT
VkdSZXNvdXJjZSogZmlsbFBhaW50aW5nUmVzb3VyY2UgPSBSZW5kZXJTVkdSZXNvdXJjZTo6Zmls
bFBhaW50aW5nUmVzb3VyY2UodGhpcywgc3R5bGUsIGZhbGxiYWNrQ29sb3IpKSB7Ci0gICAgICAg
IGlmIChmaWxsUGFpbnRpbmdSZXNvdXJjZS0+YXBwbHlSZXNvdXJjZSh0aGlzLCBzdHlsZSwgY29u
dGV4dCwgQXBwbHlUb0ZpbGxNb2RlKSkKLSAgICAgICAgICAgIGZpbGxQYWludGluZ1Jlc291cmNl
LT5wb3N0QXBwbHlSZXNvdXJjZSh0aGlzLCBjb250ZXh0LCBBcHBseVRvRmlsbE1vZGUsICZtX3Bh
dGgpOwotICAgICAgICBlbHNlIGlmIChmYWxsYmFja0NvbG9yLmlzVmFsaWQoKSkgewotICAgICAg
ICAgICAgUmVuZGVyU1ZHUmVzb3VyY2VTb2xpZENvbG9yKiBmYWxsYmFja1Jlc291cmNlID0gUmVu
ZGVyU1ZHUmVzb3VyY2U6OnNoYXJlZFNvbGlkUGFpbnRpbmdSZXNvdXJjZSgpOwotICAgICAgICAg
ICAgZmFsbGJhY2tSZXNvdXJjZS0+c2V0Q29sb3IoZmFsbGJhY2tDb2xvcik7Ci0gICAgICAgICAg
ICBpZiAoZmFsbGJhY2tSZXNvdXJjZS0+YXBwbHlSZXNvdXJjZSh0aGlzLCBzdHlsZSwgY29udGV4
dCwgQXBwbHlUb0ZpbGxNb2RlKSkKLSAgICAgICAgICAgICAgICBmYWxsYmFja1Jlc291cmNlLT5w
b3N0QXBwbHlSZXNvdXJjZSh0aGlzLCBjb250ZXh0LCBBcHBseVRvRmlsbE1vZGUsICZtX3BhdGgp
OwotICAgICAgICB9Ci0gICAgfQotCi0gICAgZmFsbGJhY2tDb2xvciA9IENvbG9yKCk7Ci0gICAg
UmVuZGVyU1ZHUmVzb3VyY2UqIHN0cm9rZVBhaW50aW5nUmVzb3VyY2UgPSBSZW5kZXJTVkdSZXNv
dXJjZTo6c3Ryb2tlUGFpbnRpbmdSZXNvdXJjZSh0aGlzLCBzdHlsZSwgZmFsbGJhY2tDb2xvcik7
Ci0gICAgaWYgKCFzdHJva2VQYWludGluZ1Jlc291cmNlKQotICAgICAgICByZXR1cm47Ci0KLSAg
ICBQYXRoKiB1c2VQYXRoID0gJm1fcGF0aDsKLSAgICBpbnQgYXBwbHlNb2RlID0gQXBwbHlUb1N0
cm9rZU1vZGU7Ci0KLSAgICBib29sIG5vblNjYWxpbmdTdHJva2UgPSBzdHlsZS0+c3ZnU3R5bGUo
KS0+dmVjdG9yRWZmZWN0KCkgPT0gVkVfTk9OX1NDQUxJTkdfU1RST0tFOwotCi0gICAgR3JhcGhp
Y3NDb250ZXh0U3RhdGVTYXZlciBzdGF0ZVNhdmVyKCpjb250ZXh0LCBmYWxzZSk7Ci0KLSAgICAv
LyBTcGVjKDExLjQpOiBBbnkgemVybyBsZW5ndGggc3VicGF0aCBzaGFsbCBub3QgYmUgc3Ryb2tl
ZCBpZiB0aGUg4oCYc3Ryb2tlLWxpbmVjYXDigJkgcHJvcGVydHkgaGFzIGEgdmFsdWUgb2YgYnV0
dAotICAgIC8vIGJ1dCBzaGFsbCBiZSBzdHJva2VkIGlmIHRoZSDigJhzdHJva2UtbGluZWNhcOKA
mSBwcm9wZXJ0eSBoYXMgYSB2YWx1ZSBvZiByb3VuZCBvciBzcXVhcmUKLSAgICAvLyBGSVhNRTog
dGhpcyBkb2VzIG5vdCB3b3JrIGZvciB6ZXJvLWxlbmd0aCBzdWJwYXRocywgb25seSB3aGVuIHRv
dGFsIHBhdGggaXMgemVyby1sZW5ndGgKLSAgICBpZiAoc2hvdWxkU3Ryb2tlWmVyb0xlbmd0aFN1
YnBhdGgoKSkKLSAgICAgICAgc2V0dXBTcXVhcmVDYXBQYXRoKHVzZVBhdGgsIGFwcGx5TW9kZSk7
Ci0gICAgZWxzZSBpZiAobm9uU2NhbGluZ1N0cm9rZSkgewotICAgICAgIGlmICghc2V0dXBOb25T
Y2FsaW5nU3Ryb2tlUGF0aCh1c2VQYXRoLCBzdGF0ZVNhdmVyKSkKLSAgICAgICAgICAgcmV0dXJu
OwotICAgIH0KLQotICAgIGlmIChzdHJva2VQYWludGluZ1Jlc291cmNlLT5hcHBseVJlc291cmNl
KHRoaXMsIHN0eWxlLCBjb250ZXh0LCBhcHBseU1vZGUpKQotICAgICAgICBzdHJva2VQYWludGlu
Z1Jlc291cmNlLT5wb3N0QXBwbHlSZXNvdXJjZSh0aGlzLCBjb250ZXh0LCBhcHBseU1vZGUsIHVz
ZVBhdGgpOwotICAgIGVsc2UgaWYgKGZhbGxiYWNrQ29sb3IuaXNWYWxpZCgpKSB7Ci0gICAgICAg
IFJlbmRlclNWR1Jlc291cmNlU29saWRDb2xvciogZmFsbGJhY2tSZXNvdXJjZSA9IFJlbmRlclNW
R1Jlc291cmNlOjpzaGFyZWRTb2xpZFBhaW50aW5nUmVzb3VyY2UoKTsKLSAgICAgICAgZmFsbGJh
Y2tSZXNvdXJjZS0+c2V0Q29sb3IoZmFsbGJhY2tDb2xvcik7Ci0gICAgICAgIGlmIChmYWxsYmFj
a1Jlc291cmNlLT5hcHBseVJlc291cmNlKHRoaXMsIHN0eWxlLCBjb250ZXh0LCBhcHBseU1vZGUp
KQotICAgICAgICAgICAgZmFsbGJhY2tSZXNvdXJjZS0+cG9zdEFwcGx5UmVzb3VyY2UodGhpcywg
Y29udGV4dCwgYXBwbHlNb2RlLCB1c2VQYXRoKTsKLSAgICB9Ci19Ci0KLXZvaWQgUmVuZGVyU1ZH
UGF0aDo6cGFpbnQoUGFpbnRJbmZvJiBwYWludEluZm8sIGNvbnN0IExheW91dFBvaW50JikKLXsK
LSAgICBpZiAocGFpbnRJbmZvLmNvbnRleHQtPnBhaW50aW5nRGlzYWJsZWQoKSB8fCBzdHlsZSgp
LT52aXNpYmlsaXR5KCkgPT0gSElEREVOIHx8IG1fcGF0aC5pc0VtcHR5KCkpCi0gICAgICAgIHJl
dHVybjsKLQotICAgIEZsb2F0UmVjdCBib3VuZGluZ0JveCA9IHJlcGFpbnRSZWN0SW5Mb2NhbENv
b3JkaW5hdGVzKCk7Ci0gICAgaWYgKCFTVkdSZW5kZXJTdXBwb3J0OjpwYWludEluZm9JbnRlcnNl
Y3RzUmVwYWludFJlY3QoYm91bmRpbmdCb3gsIG1fbG9jYWxUcmFuc2Zvcm0sIHBhaW50SW5mbykp
Ci0gICAgICAgIHJldHVybjsKLQotICAgIFBhaW50SW5mbyBjaGlsZFBhaW50SW5mbyhwYWludElu
Zm8pOwotICAgIGJvb2wgZHJhd3NPdXRsaW5lID0gc3R5bGUoKS0+b3V0bGluZVdpZHRoKCkgJiYg
KGNoaWxkUGFpbnRJbmZvLnBoYXNlID09IFBhaW50UGhhc2VPdXRsaW5lIHx8IGNoaWxkUGFpbnRJ
bmZvLnBoYXNlID09IFBhaW50UGhhc2VTZWxmT3V0bGluZSk7Ci0gICAgaWYgKGRyYXdzT3V0bGlu
ZSB8fCBjaGlsZFBhaW50SW5mby5waGFzZSA9PSBQYWludFBoYXNlRm9yZWdyb3VuZCkgewotICAg
ICAgICBHcmFwaGljc0NvbnRleHRTdGF0ZVNhdmVyIHN0YXRlU2F2ZXIoKmNoaWxkUGFpbnRJbmZv
LmNvbnRleHQpOwotICAgICAgICBjaGlsZFBhaW50SW5mby5hcHBseVRyYW5zZm9ybShtX2xvY2Fs
VHJhbnNmb3JtKTsKLQotICAgICAgICBpZiAoY2hpbGRQYWludEluZm8ucGhhc2UgPT0gUGFpbnRQ
aGFzZUZvcmVncm91bmQpIHsKLSAgICAgICAgICAgIFBhaW50SW5mbyBzYXZlZEluZm8oY2hpbGRQ
YWludEluZm8pOwotCi0gICAgICAgICAgICBpZiAoU1ZHUmVuZGVyU3VwcG9ydDo6cHJlcGFyZVRv
UmVuZGVyU1ZHQ29udGVudCh0aGlzLCBjaGlsZFBhaW50SW5mbykpIHsKLSAgICAgICAgICAgICAg
ICBjb25zdCBTVkdSZW5kZXJTdHlsZSogc3ZnU3R5bGUgPSBzdHlsZSgpLT5zdmdTdHlsZSgpOwot
ICAgICAgICAgICAgICAgIGlmIChzdmdTdHlsZS0+c2hhcGVSZW5kZXJpbmcoKSA9PSBTUl9DUklT
UEVER0VTKQotICAgICAgICAgICAgICAgICAgICBjaGlsZFBhaW50SW5mby5jb250ZXh0LT5zZXRT
aG91bGRBbnRpYWxpYXMoZmFsc2UpOwotCi0gICAgICAgICAgICAgICAgZmlsbEFuZFN0cm9rZVBh
dGgoY2hpbGRQYWludEluZm8uY29udGV4dCk7Ci0KLSAgICAgICAgICAgICAgICBpZiAoc3ZnU3R5
bGUtPmhhc01hcmtlcnMoKSkKLSAgICAgICAgICAgICAgICAgICAgbV9tYXJrZXJMYXlvdXRJbmZv
LmRyYXdNYXJrZXJzKGNoaWxkUGFpbnRJbmZvKTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAg
ICAgU1ZHUmVuZGVyU3VwcG9ydDo6ZmluaXNoUmVuZGVyU1ZHQ29udGVudCh0aGlzLCBjaGlsZFBh
aW50SW5mbywgc2F2ZWRJbmZvLmNvbnRleHQpOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKGRy
YXdzT3V0bGluZSkKLSAgICAgICAgICAgIHBhaW50T3V0bGluZShjaGlsZFBhaW50SW5mby5jb250
ZXh0LCBJbnRSZWN0KGJvdW5kaW5nQm94KSk7Ci0gICAgfQotfQotCi0vLyBUaGlzIG1ldGhvZCBp
cyBjYWxsZWQgZnJvbSBpbnNpZGUgcGFpbnRPdXRsaW5lKCkgc2luY2Ugd2UgY2FsbCBwYWludE91
dGxpbmUoKQotLy8gd2hpbGUgdHJhbnNmb3JtZWQgdG8gb3VyIGNvb3JkIHN5c3RlbSwgcmV0dXJu
IGxvY2FsIGNvb3Jkcwotdm9pZCBSZW5kZXJTVkdQYXRoOjphZGRGb2N1c1JpbmdSZWN0cyhWZWN0
b3I8TGF5b3V0UmVjdD4mIHJlY3RzLCBjb25zdCBMYXlvdXRQb2ludCYpIAotewotICAgIExheW91
dFJlY3QgcmVjdCA9IGVuY2xvc2luZ0xheW91dFJlY3QocmVwYWludFJlY3RJbkxvY2FsQ29vcmRp
bmF0ZXMoKSk7Ci0gICAgaWYgKCFyZWN0LmlzRW1wdHkoKSkKLSAgICAgICAgcmVjdHMuYXBwZW5k
KHJlY3QpOwotfQotCi1ib29sIFJlbmRlclNWR1BhdGg6Om5vZGVBdEZsb2F0UG9pbnQoY29uc3Qg
SGl0VGVzdFJlcXVlc3QmIHJlcXVlc3QsIEhpdFRlc3RSZXN1bHQmIHJlc3VsdCwgY29uc3QgRmxv
YXRQb2ludCYgcG9pbnRJblBhcmVudCwgSGl0VGVzdEFjdGlvbiBoaXRUZXN0QWN0aW9uKQotewot
ICAgIC8vIFdlIG9ubHkgZHJhdyBpbiB0aGUgZm9yZ3JvdW5kIHBoYXNlLCBzbyB3ZSBvbmx5IGhp
dC10ZXN0IHRoZW4uCi0gICAgaWYgKGhpdFRlc3RBY3Rpb24gIT0gSGl0VGVzdEZvcmVncm91bmQp
Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIEZsb2F0UG9pbnQgbG9jYWxQb2ludCA9IG1f
bG9jYWxUcmFuc2Zvcm0uaW52ZXJzZSgpLm1hcFBvaW50KHBvaW50SW5QYXJlbnQpOwotCi0gICAg
aWYgKCFTVkdSZW5kZXJTdXBwb3J0Ojpwb2ludEluQ2xpcHBpbmdBcmVhKHRoaXMsIGxvY2FsUG9p
bnQpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBQb2ludGVyRXZlbnRzSGl0UnVsZXMg
aGl0UnVsZXMoUG9pbnRlckV2ZW50c0hpdFJ1bGVzOjpTVkdfUEFUSF9ISVRURVNUSU5HLCByZXF1
ZXN0LCBzdHlsZSgpLT5wb2ludGVyRXZlbnRzKCkpOwotICAgIGJvb2wgaXNWaXNpYmxlID0gKHN0
eWxlKCktPnZpc2liaWxpdHkoKSA9PSBWSVNJQkxFKTsKLSAgICBpZiAoaXNWaXNpYmxlIHx8ICFo
aXRSdWxlcy5yZXF1aXJlVmlzaWJsZSkgewotICAgICAgICBjb25zdCBTVkdSZW5kZXJTdHlsZSog
c3ZnU3R5bGUgPSBzdHlsZSgpLT5zdmdTdHlsZSgpOwotICAgICAgICBXaW5kUnVsZSBmaWxsUnVs
ZSA9IHN2Z1N0eWxlLT5maWxsUnVsZSgpOwotICAgICAgICBpZiAocmVxdWVzdC5zdmdDbGlwQ29u
dGVudCgpKQotICAgICAgICAgICAgZmlsbFJ1bGUgPSBzdmdTdHlsZS0+Y2xpcFJ1bGUoKTsKLSAg
ICAgICAgaWYgKChoaXRSdWxlcy5jYW5IaXRTdHJva2UgJiYgKHN2Z1N0eWxlLT5oYXNTdHJva2Uo
KSB8fCAhaGl0UnVsZXMucmVxdWlyZVN0cm9rZSkgJiYgc3Ryb2tlQ29udGFpbnMobG9jYWxQb2lu
dCwgaGl0UnVsZXMucmVxdWlyZVN0cm9rZSkpCi0gICAgICAgICAgICB8fCAoaGl0UnVsZXMuY2Fu
SGl0RmlsbCAmJiAoc3ZnU3R5bGUtPmhhc0ZpbGwoKSB8fCAhaGl0UnVsZXMucmVxdWlyZUZpbGwp
ICYmIGZpbGxDb250YWlucyhsb2NhbFBvaW50LCBoaXRSdWxlcy5yZXF1aXJlRmlsbCwgZmlsbFJ1
bGUpKSkgewotICAgICAgICAgICAgdXBkYXRlSGl0VGVzdFJlc3VsdChyZXN1bHQsIHJvdW5kZWRM
YXlvdXRQb2ludChsb2NhbFBvaW50KSk7Ci0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAg
ICAgfQotICAgIH0KLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLUZsb2F0UmVjdCBSZW5kZXJTVkdQ
YXRoOjpjYWxjdWxhdGVNYXJrZXJCb3VuZHNJZk5lZWRlZCgpCi17Ci0gICAgU1ZHRWxlbWVudCog
c3ZnRWxlbWVudCA9IHN0YXRpY19jYXN0PFNWR0VsZW1lbnQqPihub2RlKCkpOwotICAgIEFTU0VS
VChzdmdFbGVtZW50ICYmIHN2Z0VsZW1lbnQtPmRvY3VtZW50KCkpOwotICAgIGlmICghc3ZnRWxl
bWVudC0+aXNTdHlsZWQoKSkKLSAgICAgICAgcmV0dXJuIEZsb2F0UmVjdCgpOwotCi0gICAgU1ZH
U3R5bGVkRWxlbWVudCogc3R5bGVkRWxlbWVudCA9IHN0YXRpY19jYXN0PFNWR1N0eWxlZEVsZW1l
bnQqPihzdmdFbGVtZW50KTsKLSAgICBpZiAoIXN0eWxlZEVsZW1lbnQtPnN1cHBvcnRzTWFya2Vy
cygpKQotICAgICAgICByZXR1cm4gRmxvYXRSZWN0KCk7Ci0KLSAgICBjb25zdCBTVkdSZW5kZXJT
dHlsZSogc3ZnU3R5bGUgPSBzdHlsZSgpLT5zdmdTdHlsZSgpOwotICAgIEFTU0VSVChzdmdTdHls
ZS0+aGFzTWFya2VycygpKTsKLQotICAgIFNWR1Jlc291cmNlcyogcmVzb3VyY2VzID0gU1ZHUmVz
b3VyY2VzQ2FjaGU6OmNhY2hlZFJlc291cmNlc0ZvclJlbmRlck9iamVjdCh0aGlzKTsKLSAgICBp
ZiAoIXJlc291cmNlcykKLSAgICAgICAgcmV0dXJuIEZsb2F0UmVjdCgpOwotCi0gICAgUmVuZGVy
U1ZHUmVzb3VyY2VNYXJrZXIqIG1hcmtlclN0YXJ0ID0gcmVzb3VyY2VzLT5tYXJrZXJTdGFydCgp
OwotICAgIFJlbmRlclNWR1Jlc291cmNlTWFya2VyKiBtYXJrZXJNaWQgPSByZXNvdXJjZXMtPm1h
cmtlck1pZCgpOwotICAgIFJlbmRlclNWR1Jlc291cmNlTWFya2VyKiBtYXJrZXJFbmQgPSByZXNv
dXJjZXMtPm1hcmtlckVuZCgpOwotICAgIGlmICghbWFya2VyU3RhcnQgJiYgIW1hcmtlck1pZCAm
JiAhbWFya2VyRW5kKQotICAgICAgICByZXR1cm4gRmxvYXRSZWN0KCk7Ci0KLSAgICByZXR1cm4g
bV9tYXJrZXJMYXlvdXRJbmZvLmNhbGN1bGF0ZUJvdW5kYXJpZXMobWFya2VyU3RhcnQsIG1hcmtl
ck1pZCwgbWFya2VyRW5kLCBzdmdTdHlsZS0+c3Ryb2tlV2lkdGgoKS52YWx1ZShzdmdFbGVtZW50
KSwgbV9wYXRoKTsKLX0KLQotdm9pZCBSZW5kZXJTVkdQYXRoOjp1cGRhdGVDYWNoZWRCb3VuZGFy
aWVzKCkKLXsKLSAgICBpZiAobV9wYXRoLmlzRW1wdHkoKSkgewotICAgICAgICBtX2ZpbGxCb3Vu
ZGluZ0JveCA9IEZsb2F0UmVjdCgpOwotICAgICAgICBtX3N0cm9rZUFuZE1hcmtlckJvdW5kaW5n
Qm94ID0gRmxvYXRSZWN0KCk7Ci0gICAgICAgIG1fcmVwYWludEJvdW5kaW5nQm94ID0gRmxvYXRS
ZWN0KCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICAvLyBDYWNoZSBfdW5jbGlwcGVk
XyBmaWxsIGJvdW5kaW5nIGJveCwgdXNlZCBmb3IgY2FsY3VsYXRpb25zIGluIHJlc291cmNlcwot
ICAgIG1fZmlsbEJvdW5kaW5nQm94ID0gbV9wYXRoLmJvdW5kaW5nUmVjdCgpOwotCi0gICAgLy8g
U3BlYygxMS40KTogQW55IHplcm8gbGVuZ3RoIHN1YnBhdGggc2hhbGwgbm90IGJlIHN0cm9rZWQg
aWYgdGhlIOKAmHN0cm9rZS1saW5lY2Fw4oCZIHByb3BlcnR5IGhhcyBhIHZhbHVlIG9mIGJ1dHQK
LSAgICAvLyBidXQgc2hhbGwgYmUgc3Ryb2tlZCBpZiB0aGUg4oCYc3Ryb2tlLWxpbmVjYXDigJkg
cHJvcGVydHkgaGFzIGEgdmFsdWUgb2Ygcm91bmQgb3Igc3F1YXJlCi0gICAgaWYgKHNob3VsZFN0
cm9rZVplcm9MZW5ndGhTdWJwYXRoKCkpIHsKLSAgICAgICAgbV9zdHJva2VBbmRNYXJrZXJCb3Vu
ZGluZ0JveCA9IHplcm9MZW5ndGhTdWJwYXRoUmVjdCgpOwotICAgICAgICAvLyBDYWNoZSBzbWFs
bGVzdCBwb3NzaWJsZSByZXBhaW50IHJlY3RhbmdsZQotICAgICAgICBtX3JlcGFpbnRCb3VuZGlu
Z0JveCA9IG1fc3Ryb2tlQW5kTWFya2VyQm91bmRpbmdCb3g7Ci0gICAgICAgIFNWR1JlbmRlclN1
cHBvcnQ6OmludGVyc2VjdFJlcGFpbnRSZWN0V2l0aFJlc291cmNlcyh0aGlzLCBtX3JlcGFpbnRC
b3VuZGluZ0JveCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICAvLyBDYWNoZSBfdW5j
bGlwcGVkXyBzdHJva2UgYm91bmRpbmcgYm94LCB1c2VkIGZvciBjYWxjdWxhdGlvbnMgaW4gcmVz
b3VyY2VzIChpbmNsdWRlcyBtYXJrZXIgYm91bmRhcmllcykKLSAgICBtX3N0cm9rZUFuZE1hcmtl
ckJvdW5kaW5nQm94ID0gbV9maWxsQm91bmRpbmdCb3g7Ci0KLSAgICBjb25zdCBTVkdSZW5kZXJT
dHlsZSogc3ZnU3R5bGUgPSBzdHlsZSgpLT5zdmdTdHlsZSgpOwotICAgIGlmIChzdmdTdHlsZS0+
aGFzU3Ryb2tlKCkpIHsKLSAgICAgICAgQm91bmRpbmdSZWN0U3Ryb2tlU3R5bGVBcHBsaWVyIHN0
cm9rZVN0eWxlKHRoaXMsIHN0eWxlKCkpOwotICAgICAgICBtX3N0cm9rZUFuZE1hcmtlckJvdW5k
aW5nQm94LnVuaXRlKG1fcGF0aC5zdHJva2VCb3VuZGluZ1JlY3QoJnN0cm9rZVN0eWxlKSk7Ci0g
ICAgfQotCi0gICAgaWYgKHN2Z1N0eWxlLT5oYXNNYXJrZXJzKCkpIHsKLSAgICAgICAgRmxvYXRS
ZWN0IG1hcmtlckJvdW5kcyA9IGNhbGN1bGF0ZU1hcmtlckJvdW5kc0lmTmVlZGVkKCk7Ci0gICAg
ICAgIGlmICghbWFya2VyQm91bmRzLmlzRW1wdHkoKSkKLSAgICAgICAgICAgIG1fc3Ryb2tlQW5k
TWFya2VyQm91bmRpbmdCb3gudW5pdGUobWFya2VyQm91bmRzKTsKLSAgICB9Ci0KLSAgICAvLyBD
YWNoZSBzbWFsbGVzdCBwb3NzaWJsZSByZXBhaW50IHJlY3RhbmdsZQotICAgIG1fcmVwYWludEJv
dW5kaW5nQm94ID0gbV9zdHJva2VBbmRNYXJrZXJCb3VuZGluZ0JveDsKLSAgICBTVkdSZW5kZXJT
dXBwb3J0OjppbnRlcnNlY3RSZXBhaW50UmVjdFdpdGhSZXNvdXJjZXModGhpcywgbV9yZXBhaW50
Qm91bmRpbmdCb3gpOwotfQotCiB9CiAKICNlbmRpZiAvLyBFTkFCTEUoU1ZHKQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdQYXRoLmggYi9Tb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1BhdGguaAppbmRleCA5OGU2MDhkLi41MjU2
OGZmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Bh
dGguaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1BhdGguaApA
QCAtNCw2ICs0LDggQEAKICAqIENvcHlyaWdodCAoQykgMjAwNSBFcmljIFNlaWRlbCA8ZXJpY0B3
ZWJraXQub3JnPgogICogQ29weXJpZ2h0IChDKSAyMDA2IEFwcGxlIENvbXB1dGVyLCBJbmMKICAq
IENvcHlyaWdodCAoQykgMjAwOSBHb29nbGUsIEluYy4KKyAqIENvcHlyaWdodCAoQykgMjAxMSBS
ZW5hdGEgSG9kb3ZhbiA8cmVuaUB3ZWJraXQub3JnPgorICogQ29weXJpZ2h0IChDKSAyMDExIFVu
aXZlcnNpdHkgb2YgU3plZ2VkCiAgKgogICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7
IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0
ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKQEAgLTI1LDg2ICsyNywyMCBA
QAogI2RlZmluZSBSZW5kZXJTVkdQYXRoX2gKIAogI2lmIEVOQUJMRShTVkcpCi0jaW5jbHVkZSAi
QWZmaW5lVHJhbnNmb3JtLmgiCi0jaW5jbHVkZSAiRmxvYXRSZWN0LmgiCi0jaW5jbHVkZSAiUmVu
ZGVyU1ZHTW9kZWxPYmplY3QuaCIKLSNpbmNsdWRlICJTVkdNYXJrZXJMYXlvdXRJbmZvLmgiCisj
aW5jbHVkZSAiUmVuZGVyU1ZHU2hhcGUuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1jbGFz
cyBGbG9hdFBvaW50OwotY2xhc3MgR3JhcGhpY3NDb250ZXh0U3RhdGVTYXZlcjsKLWNsYXNzIFJl
bmRlclNWR0NvbnRhaW5lcjsKLWNsYXNzIFNWR1N0eWxlZFRyYW5zZm9ybWFibGVFbGVtZW50Owot
Ci1jbGFzcyBSZW5kZXJTVkdQYXRoIDogcHVibGljIFJlbmRlclNWR01vZGVsT2JqZWN0IHsKK2Ns
YXNzIFJlbmRlclNWR1BhdGggOiBwdWJsaWMgUmVuZGVyU1ZHU2hhcGUgewogcHVibGljOgotICAg
IGV4cGxpY2l0IFJlbmRlclNWR1BhdGgoU1ZHU3R5bGVkVHJhbnNmb3JtYWJsZUVsZW1lbnQqKTsK
KyAgICBSZW5kZXJTVkdQYXRoKFNWR1N0eWxlZFRyYW5zZm9ybWFibGVFbGVtZW50Kik7CiAgICAg
dmlydHVhbCB+UmVuZGVyU1ZHUGF0aCgpOwogCi0gICAgY29uc3QgUGF0aCYgcGF0aCgpIGNvbnN0
IHsgcmV0dXJuIG1fcGF0aDsgfQotICAgIHZvaWQgc2V0TmVlZHNQYXRoVXBkYXRlKCkgeyBtX25l
ZWRzUGF0aFVwZGF0ZSA9IHRydWU7IH0KLSAgICB2aXJ0dWFsIHZvaWQgc2V0TmVlZHNCb3VuZGFy
aWVzVXBkYXRlKCkgeyBtX25lZWRzQm91bmRhcmllc1VwZGF0ZSA9IHRydWU7IH0KLSAgICB2aXJ0
dWFsIHZvaWQgc2V0TmVlZHNUcmFuc2Zvcm1VcGRhdGUoKSB7IG1fbmVlZHNUcmFuc2Zvcm1VcGRh
dGUgPSB0cnVlOyB9Ci0KIHByaXZhdGU6Ci0gICAgLy8gSGl0LWRldGVjdGlvbiBzZXBlcmF0ZWQg
Zm9yIHRoZSBmaWxsIGFuZCB0aGUgc3Ryb2tlCi0gICAgYm9vbCBmaWxsQ29udGFpbnMoY29uc3Qg
RmxvYXRQb2ludCYsIGJvb2wgcmVxdWlyZXNGaWxsID0gdHJ1ZSwgV2luZFJ1bGUgZmlsbFJ1bGUg
PSBSVUxFX05PTlpFUk8pOwotICAgIGJvb2wgc3Ryb2tlQ29udGFpbnMoY29uc3QgRmxvYXRQb2lu
dCYsIGJvb2wgcmVxdWlyZXNTdHJva2UgPSB0cnVlKTsKLQotICAgIHZpcnR1YWwgRmxvYXRSZWN0
IG9iamVjdEJvdW5kaW5nQm94KCkgY29uc3QgeyByZXR1cm4gbV9maWxsQm91bmRpbmdCb3g7IH0K
LSAgICB2aXJ0dWFsIEZsb2F0UmVjdCBzdHJva2VCb3VuZGluZ0JveCgpIGNvbnN0IHsgcmV0dXJu
IG1fc3Ryb2tlQW5kTWFya2VyQm91bmRpbmdCb3g7IH0KLSAgICB2aXJ0dWFsIEZsb2F0UmVjdCBy
ZXBhaW50UmVjdEluTG9jYWxDb29yZGluYXRlcygpIGNvbnN0IHsgcmV0dXJuIG1fcmVwYWludEJv
dW5kaW5nQm94OyB9Ci0gICAgdmlydHVhbCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIGxvY2FsVG9Q
YXJlbnRUcmFuc2Zvcm0oKSBjb25zdCB7IHJldHVybiBtX2xvY2FsVHJhbnNmb3JtOyB9Ci0KICAg
ICB2aXJ0dWFsIGJvb2wgaXNTVkdQYXRoKCkgY29uc3QgeyByZXR1cm4gdHJ1ZTsgfQogICAgIHZp
cnR1YWwgY29uc3QgY2hhciogcmVuZGVyTmFtZSgpIGNvbnN0IHsgcmV0dXJuICJSZW5kZXJTVkdQ
YXRoIjsgfQotCi0gICAgdmlydHVhbCB2b2lkIGxheW91dCgpOwotICAgIHZpcnR1YWwgdm9pZCBw
YWludChQYWludEluZm8mLCBjb25zdCBMYXlvdXRQb2ludCYpOwotICAgIHZpcnR1YWwgdm9pZCBh
ZGRGb2N1c1JpbmdSZWN0cyhWZWN0b3I8TGF5b3V0UmVjdD4mLCBjb25zdCBMYXlvdXRQb2ludCYp
OwotCi0gICAgdmlydHVhbCBib29sIG5vZGVBdEZsb2F0UG9pbnQoY29uc3QgSGl0VGVzdFJlcXVl
c3QmLCBIaXRUZXN0UmVzdWx0JiwgY29uc3QgRmxvYXRQb2ludCYgcG9pbnRJblBhcmVudCwgSGl0
VGVzdEFjdGlvbik7Ci0KLSAgICBGbG9hdFJlY3QgY2FsY3VsYXRlTWFya2VyQm91bmRzSWZOZWVk
ZWQoKTsKLSAgICB2b2lkIHVwZGF0ZUNhY2hlZEJvdW5kYXJpZXMoKTsKLQotICAgIHZvaWQgc2V0
dXBTcXVhcmVDYXBQYXRoKFBhdGgqJiB1c2VQYXRoLCBpbnQmIGFwcGx5TW9kZSk7Ci0gICAgYm9v
bCBzZXR1cE5vblNjYWxpbmdTdHJva2VQYXRoKFBhdGgqJiB1c2VQYXRoLCBHcmFwaGljc0NvbnRl
eHRTdGF0ZVNhdmVyJik7Ci0gICAgYm9vbCBzaG91bGRTdHJva2VaZXJvTGVuZ3RoU3VicGF0aCgp
IGNvbnN0OwotICAgIEZsb2F0UmVjdCB6ZXJvTGVuZ3RoU3VicGF0aFJlY3QoKSBjb25zdDsKLQot
cHJpdmF0ZToKLSAgICB2aXJ0dWFsIEFmZmluZVRyYW5zZm9ybSBsb2NhbFRyYW5zZm9ybSgpIGNv
bnN0IHsgcmV0dXJuIG1fbG9jYWxUcmFuc2Zvcm07IH0KLSAgICB2b2lkIGZpbGxBbmRTdHJva2VQ
YXRoKEdyYXBoaWNzQ29udGV4dCopOwotCi0gICAgYm9vbCBtX25lZWRzQm91bmRhcmllc1VwZGF0
ZSA6IDE7Ci0gICAgYm9vbCBtX25lZWRzUGF0aFVwZGF0ZSA6IDE7Ci0gICAgYm9vbCBtX25lZWRz
VHJhbnNmb3JtVXBkYXRlIDogMTsKLQotICAgIG11dGFibGUgUGF0aCBtX3BhdGg7Ci0gICAgRmxv
YXRSZWN0IG1fZmlsbEJvdW5kaW5nQm94OwotICAgIEZsb2F0UmVjdCBtX3N0cm9rZUFuZE1hcmtl
ckJvdW5kaW5nQm94OwotICAgIEZsb2F0UmVjdCBtX3JlcGFpbnRCb3VuZGluZ0JveDsKLSAgICBT
VkdNYXJrZXJMYXlvdXRJbmZvIG1fbWFya2VyTGF5b3V0SW5mbzsKLSAgICBBZmZpbmVUcmFuc2Zv
cm0gbV9sb2NhbFRyYW5zZm9ybTsKIH07CiAKLWlubGluZSBSZW5kZXJTVkdQYXRoKiB0b1JlbmRl
clNWR1BhdGgoUmVuZGVyT2JqZWN0KiBvYmplY3QpCi17Ci0gICAgQVNTRVJUKCFvYmplY3QgfHwg
b2JqZWN0LT5pc1NWR1BhdGgoKSk7Ci0gICAgcmV0dXJuIHN0YXRpY19jYXN0PFJlbmRlclNWR1Bh
dGgqPihvYmplY3QpOwotfQotCi1pbmxpbmUgY29uc3QgUmVuZGVyU1ZHUGF0aCogdG9SZW5kZXJT
VkdQYXRoKGNvbnN0IFJlbmRlck9iamVjdCogb2JqZWN0KQotewotICAgIEFTU0VSVCghb2JqZWN0
IHx8IG9iamVjdC0+aXNTVkdQYXRoKCkpOwotICAgIHJldHVybiBzdGF0aWNfY2FzdDxjb25zdCBS
ZW5kZXJTVkdQYXRoKj4ob2JqZWN0KTsKLX0KLQotLy8gVGhpcyB3aWxsIGNhdGNoIGFueW9uZSBk
b2luZyBhbiB1bm5lY2Vzc2FyeSBjYXN0Lgotdm9pZCB0b1JlbmRlclNWR1BhdGgoY29uc3QgUmVu
ZGVyU1ZHUGF0aCopOwotCiB9CiAKICNlbmRpZiAvLyBFTkFCTEUoU1ZHKQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZWN0LmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVjdC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDAwMDAwMC4uNmJjMzVkZQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVjdC5jcHAKQEAgLTAsMCArMSwxMzkgQEAKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgVW5pdmVyc2l0eSBvZiBTemVnZWQKKyAqIENvcHlyaWdo
dCAoQykgMjAxMSBSZW5hdGEgSG9kb3ZhbiAocmVuaUB3ZWJraXQub3JnKQorICogQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IFVOSVZFUlNJVFkgT0YgU1pFR0VEIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICog
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwg
VU5JVkVSU0lUWSBPRiBTWkVHRUQgT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAor
ICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICog
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisKKyNpZiBFTkFCTEUoU1ZH
KQorI2luY2x1ZGUgIlJlbmRlclNWR1JlY3QuaCIKKworI2luY2x1ZGUgIlNWR05hbWVzLmgiCisj
aW5jbHVkZSAiU1ZHUmVjdEVsZW1lbnQuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitSZW5k
ZXJTVkdSZWN0OjpSZW5kZXJTVkdSZWN0KFNWR1N0eWxlZFRyYW5zZm9ybWFibGVFbGVtZW50KiBu
b2RlKQorICAgIDogUmVuZGVyU1ZHU2hhcGUobm9kZSkKK3sKK30KKworUmVuZGVyU1ZHUmVjdDo6
flJlbmRlclNWR1JlY3QoKQoreworfQorCit2b2lkIFJlbmRlclNWR1JlY3Q6OmNyZWF0ZVNoYXBl
KCkKK3sKKyAgICAvLyBDbGVhciBtX3JlY3QuCisgICAgbV9yZWN0ID0gRmxvYXRSZWN0KCk7Cisg
ICAgU1ZHUmVjdEVsZW1lbnQqIHJlY3QgPSBzdGF0aWNfY2FzdDxTVkdSZWN0RWxlbWVudCo+KG5v
ZGUoKSk7CisgICAgYm9vbCBtX2hhc1J4ID0gcmVjdC0+aGFzQXR0cmlidXRlKFNWR05hbWVzOjpy
eEF0dHIpOworICAgIGJvb2wgbV9oYXNSeSA9IHJlY3QtPmhhc0F0dHJpYnV0ZShTVkdOYW1lczo6
cnlBdHRyKTsKKyAgICAvLyBGYWxsYmFjayB0byB0aGUgcGFyZW50IGlmIHJlY3QgaGFzIHNwZWNp
YWwgZmVhdHVyZXMuCisgICAgaWYgKG1faGFzUnggfHwgbV9oYXNSeSB8fCAhc3R5bGUoKS0+c3Zn
U3R5bGUoKS0+c3Ryb2tlRGFzaEFycmF5KCkuaXNFbXB0eSgpKSB7CisgICAgICAgUmVuZGVyU1ZH
U2hhcGU6OmNyZWF0ZVNoYXBlKCk7CisgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBmbG9hdCB3
aWR0aFZhbHVlID0gcmVjdC0+d2lkdGgoKS52YWx1ZShyZWN0KTsKKyAgICBpZiAod2lkdGhWYWx1
ZSA8PSAwKQorICAgICAgICByZXR1cm47CisKKyAgICBmbG9hdCBoZWlnaHRWYWx1ZSA9IHJlY3Qt
PmhlaWdodCgpLnZhbHVlKHJlY3QpOworICAgIGlmIChoZWlnaHRWYWx1ZSA8PSAwKQorICAgICAg
ICByZXR1cm47CisKKyAgICBmbG9hdCB4VmFsdWUgPSByZWN0LT54KCkudmFsdWUocmVjdCk7Cisg
ICAgZmxvYXQgeVZhbHVlID0gcmVjdC0+eSgpLnZhbHVlKHJlY3QpOworICAgIG1fcmVjdCA9IEZs
b2F0UmVjdCh4VmFsdWUsIHlWYWx1ZSwgd2lkdGhWYWx1ZSwgaGVpZ2h0VmFsdWUpOworfQorCisK
K0Zsb2F0UmVjdCBSZW5kZXJTVkdSZWN0OjpvYmplY3RCb3VuZGluZ0JveCgpIGNvbnN0Cit7Cisg
ICAgaWYgKGhhc1BhdGgoKSkKKyAgICAgICAgcmV0dXJuIFJlbmRlclNWR1NoYXBlOjpvYmplY3RC
b3VuZGluZ0JveCgpOworICAgIHJldHVybiBtX3JlY3Q7Cit9CisKK0Zsb2F0UmVjdCBSZW5kZXJT
VkdSZWN0OjpzdHJva2VCb3VuZGluZ0JveCgpCit7CisgICAgaWYgKGhhc1BhdGgoKSkKKyAgICAg
ICAgcmV0dXJuIFJlbmRlclNWR1NoYXBlOjpzdHJva2VCb3VuZGluZ0JveCgpOworICAgIC8vIElm
IHdlIGluZmxhdGUgdGhlIG1fcmVjdCB3aXRoIHRoZSBoYWxmIHNpemUgc3Ryb2tlV2lkdGgsIHdl
IGdldCB0aGUgc3Ryb2tlQm91bmRpbmdCb3ggaW4gbm9uLWZhbGxiYWNrIHBhdGggbW9kZS4KKyAg
ICBCb3VuZGluZ1JlY3RTdHJva2VTdHlsZUFwcGxpZXIgc3Ryb2tlU3R5bGUodGhpcywgc3R5bGUo
KSk7CisgICAgRmxvYXRSZWN0IHN0cm9rZVJlY3QgPSBtX3JlY3Q7CisgICAgc3Ryb2tlUmVjdC5p
bmZsYXRlKHRoaXMtPnN0cm9rZVdpZHRoKCkgLyAyKTsKKyAgICByZXR1cm4gc3Ryb2tlUmVjdDsK
K30KKwordm9pZCBSZW5kZXJTVkdSZWN0OjpmaWxsU2hhcGUoR3JhcGhpY3NDb250ZXh0KiBjb250
ZXh0KQoreworICAgIGlmIChoYXNQYXRoKCkpCisgICAgICAgIFJlbmRlclNWR1NoYXBlOjpmaWxs
U2hhcGUoY29udGV4dCk7CisgICAgZWxzZQorICAgICAgICBjb250ZXh0LT5maWxsUmVjdChtX3Jl
Y3QpOworfQorCit2b2lkIFJlbmRlclNWR1JlY3Q6OnN0cm9rZVNoYXBlKEdyYXBoaWNzQ29udGV4
dCogY29udGV4dCkKK3sKKyAgICBpZiAoaGFzUGF0aCgpKSB7CisgICAgICAgIFJlbmRlclNWR1No
YXBlOjpzdHJva2VTaGFwZShjb250ZXh0KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBj
b250ZXh0LT5zdHJva2VSZWN0KG1fcmVjdCwgdGhpcy0+c3Ryb2tlV2lkdGgoKSk7Cit9CisKK2Jv
b2wgUmVuZGVyU1ZHUmVjdDo6c3Ryb2tlQ29udGFpbnNTbG93Q2FzZShjb25zdCBGbG9hdFBvaW50
JiBwb2ludCkKK3sKKyAgICBpZiAoaGFzUGF0aCgpKQorICAgICAgICByZXR1cm4gUmVuZGVyU1ZH
U2hhcGU6OnN0cm9rZUNvbnRhaW5zU2xvd0Nhc2UocG9pbnQpOworCisgICAgLy8gVG8gZGVjZWlk
ZSB0aGUgc3Ryb2tlIGNvbnRhaW5pbmcgd2UgY3JlYXRlIHR3byByZWN0cyB3aGljaCByZXByZXNl
bnQgdGhlIGlubmVyIGFuZAorICAgIC8vIHRoZSBvdXRlciBzdHJva2UgYm9yZGVycy4gVGhlIGNv
bnRhaW5pbmcgZXhpc3RzLCBpZiB0aGUgcG9pbnQgaXMgYmV0d2VlbiB0aGVtLgorICAgIGZsb2F0
IHN0cm9rZVdpZHRoID0gdGhpcy0+c3Ryb2tlV2lkdGgoKTsKKyAgICBGbG9hdFJlY3QgaW5uZXJT
dHJva2VSZWN0ID0gbV9yZWN0OworICAgIEZsb2F0UmVjdCBvdXRlclN0cm9rZVJlY3QgPSBtX3Jl
Y3Q7CisgICAgaW5uZXJTdHJva2VSZWN0LmluZmxhdGUoLXN0cm9rZVdpZHRoIC8gMik7CisgICAg
b3V0ZXJTdHJva2VSZWN0LmluZmxhdGUoc3Ryb2tlV2lkdGggLyAyKTsKKyAgICByZXR1cm4gKGRl
dGVybWluZVBvaW50TG9jYXRpb24ocG9pbnQsIGlubmVyU3Ryb2tlUmVjdCkgIT0gSW5zaWRlU2hh
cGUKKyAgICAgICAgICAgICYmIGRldGVybWluZVBvaW50TG9jYXRpb24ocG9pbnQsIG91dGVyU3Ry
b2tlUmVjdCkgIT0gT3V0c2lkZVNoYXBlKSA/ICB0cnVlIDogZmFsc2U7Cit9CisKK2Jvb2wgUmVu
ZGVyU1ZHUmVjdDo6ZmlsbENvbnRhaW5zU2xvd0Nhc2UoY29uc3QgRmxvYXRQb2ludCYgcG9pbnQs
IGNvbnN0IFdpbmRSdWxlJikgY29uc3QKK3sKKyAgICByZXR1cm4gKGRldGVybWluZVBvaW50TG9j
YXRpb24ocG9pbnQsIG1fcmVjdCkgIT0gT3V0c2lkZVNoYXBlKSA/IHRydWUgOiBmYWxzZTsKK30K
KworUG9pbnRMb2NhdGlvbiBSZW5kZXJTVkdSZWN0OjpkZXRlcm1pbmVQb2ludExvY2F0aW9uKGNv
bnN0IEZsb2F0UG9pbnQmIHBvaW50LCBjb25zdCBGbG9hdFJlY3QmIHJlY3QpIGNvbnN0Cit7Cisg
ICAgLy8gVGVzdCB3aGV0aGVyIHRoZSByZWN0IGNvbnRhaW5zIHRoZSBjZXJ0YWluIHBvaW50IG9y
IG5vdAorICAgIGlmICghcmVjdC5jb250YWlucyhwb2ludCkpCisgICAgICAgIHJldHVybiBPdXRz
aWRlU2hhcGU7CisgICAgcmV0dXJuIChyZWN0LngoKSA8IHBvaW50LngoKSAmJiByZWN0Lm1heFgo
KSA+IHBvaW50LngoKSAmJiByZWN0LnkoKSA8IHBvaW50LnkoKSAmJiByZWN0Lm1heFkoKSA+IHBv
aW50LnkoKSkgPyBJbnNpZGVTaGFwZSA6IE9uU3Ryb2tlOworfQorCit9CisKKyNlbmRpZiAvLyBF
TkFCTEUoU1ZHKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5k
ZXJTVkdSZWN0LmggYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1JlY3Qu
aApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wNzFlZjJhCi0tLSAvZGV2L251
bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZWN0LmgKQEAg
LTAsMCArMSw2MiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMSBVbml2ZXJzaXR5IG9mIFN6
ZWdlZAorICogQ29weXJpZ2h0IChDKSAyMDExIFJlbmF0YSBIb2RvdmFuIChyZW5pQHdlYmtpdC5v
cmcpCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgVU5JVkVSU0lUWSBPRiBTWkVHRUQgYGBBUyBJUycnIEFORCBBTlkK
KyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJ
TiBOTyBFVkVOVCBTSEFMTCBVTklWRVJTSVRZIE9GIFNaRUdFRCBPUgorICogQ09OVFJJQlVUT1JT
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
CisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICog
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgUmVuZGVyU1ZHUmVj
dF9oCisjZGVmaW5lIFJlbmRlclNWR1JlY3RfaAorCisjaWYgRU5BQkxFKFNWRykKKyNpbmNsdWRl
ICJSZW5kZXJTVkdQYXRoLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgUmVuZGVy
U1ZHUmVjdCA6IHB1YmxpYyBSZW5kZXJTVkdTaGFwZSB7CitwdWJsaWM6CisgICAgZXhwbGljaXQg
UmVuZGVyU1ZHUmVjdChTVkdTdHlsZWRUcmFuc2Zvcm1hYmxlRWxlbWVudCopOworICAgIHZpcnR1
YWwgflJlbmRlclNWR1JlY3QoKTsKKworcHJpdmF0ZToKKyAgICB2aXJ0dWFsIGJvb2wgaXNTVkdS
ZWN0KCkgY29uc3QgeyByZXR1cm4gdHJ1ZTsgfQorICAgIHZpcnR1YWwgY29uc3QgY2hhciogcmVu
ZGVyTmFtZSgpIGNvbnN0IHsgcmV0dXJuICJSZW5kZXJTVkdSZWN0IjsgfQorCisgICAgdm9pZCBj
cmVhdGVTaGFwZSgpOworICAgIGJvb2wgaXNFbXB0eSgpIGNvbnN0IHsgcmV0dXJuIGhhc1BhdGgo
KSA/IFJlbmRlclNWR1NoYXBlOjppc0VtcHR5KCkgOiBtX3JlY3QuaXNFbXB0eSgpOyB9OworICAg
IHZvaWQgZmlsbFNoYXBlKEdyYXBoaWNzQ29udGV4dCopOworICAgIEZsb2F0UmVjdCBvYmplY3RC
b3VuZGluZ0JveCgpIGNvbnN0OworICAgIEZsb2F0UmVjdCBzdHJva2VCb3VuZGluZ0JveCgpOwor
ICAgIHZvaWQgc3Ryb2tlU2hhcGUoR3JhcGhpY3NDb250ZXh0Kik7CisgICAgYm9vbCBzdHJva2VD
b250YWluc1Nsb3dDYXNlKGNvbnN0IEZsb2F0UG9pbnQmKTsKKyAgICBib29sIGZpbGxDb250YWlu
c1Nsb3dDYXNlKGNvbnN0IEZsb2F0UG9pbnQmLCBjb25zdCBXaW5kUnVsZSYpIGNvbnN0OworICAg
IFBvaW50TG9jYXRpb24gZGV0ZXJtaW5lUG9pbnRMb2NhdGlvbihjb25zdCBGbG9hdFBvaW50Jiwg
Y29uc3QgRmxvYXRSZWN0JikgY29uc3Q7CisKK3ByaXZhdGU6CisgICAgRmxvYXRSZWN0IG1fcmVj
dDsKK307CisKK30KKworI2VuZGlmIC8vIEVOQUJMRShTVkcpCisjZW5kaWYKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2UuaCBiL1NvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2UuaAppbmRleCBhNjdiYTcz
Li4yYjQ0MzhlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRl
clNWR1Jlc291cmNlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJT
VkdSZXNvdXJjZS5oCkBAIC0yMSw2ICsyMSw3IEBACiAjZGVmaW5lIFJlbmRlclNWR1Jlc291cmNl
X2gKIAogI2lmIEVOQUJMRShTVkcpCisjaW5jbHVkZSAiUmVuZGVyU1ZHU2hhcGUuaCIKICNpbmNs
dWRlICJSZW5kZXJTdHlsZUNvbnN0YW50cy5oIgogI2luY2x1ZGUgIlNWR0RvY3VtZW50RXh0ZW5z
aW9ucy5oIgogCkBAIC02MSw3ICs2Miw3IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIHZvaWQgcmVt
b3ZlQ2xpZW50RnJvbUNhY2hlKFJlbmRlck9iamVjdCosIGJvb2wgbWFya0ZvckludmFsaWRhdGlv
biA9IHRydWUpID0gMDsKIAogICAgIHZpcnR1YWwgYm9vbCBhcHBseVJlc291cmNlKFJlbmRlck9i
amVjdCosIFJlbmRlclN0eWxlKiwgR3JhcGhpY3NDb250ZXh0KiYsIHVuc2lnbmVkIHNob3J0IHJl
c291cmNlTW9kZSkgPSAwOwotICAgIHZpcnR1YWwgdm9pZCBwb3N0QXBwbHlSZXNvdXJjZShSZW5k
ZXJPYmplY3QqLCBHcmFwaGljc0NvbnRleHQqJiwgdW5zaWduZWQgc2hvcnQsIGNvbnN0IFBhdGgq
KSB7IH0KKyAgICB2aXJ0dWFsIHZvaWQgcG9zdEFwcGx5UmVzb3VyY2UoUmVuZGVyU1ZHU2hhcGUq
LCBHcmFwaGljc0NvbnRleHQqJiwgdW5zaWduZWQgc2hvcnQsIGNvbnN0IFBhdGgqKSB7IH0KICAg
ICB2aXJ0dWFsIEZsb2F0UmVjdCByZXNvdXJjZUJvdW5kaW5nQm94KFJlbmRlck9iamVjdCopID0g
MDsKIAogICAgIHZpcnR1YWwgUmVuZGVyU1ZHUmVzb3VyY2VUeXBlIHJlc291cmNlVHlwZSgpIGNv
bnN0ID0gMDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVy
U1ZHUmVzb3VyY2VDbGlwcGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVu
ZGVyU1ZHUmVzb3VyY2VDbGlwcGVyLmNwcAppbmRleCAyMzhjMDk2Li4xZDgyMTIxIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291cmNlQ2xpcHBl
ci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJj
ZUNsaXBwZXIuY3BwCkBAIC0yNDIsNyArMjQyLDcgQEAgYm9vbCBSZW5kZXJTVkdSZXNvdXJjZUNs
aXBwZXI6OmRyYXdDb250ZW50SW50b01hc2tJbWFnZShDbGlwcGVyRGF0YSogY2xpcHBlckRhdGEK
ICAgICAgICAgfQogCiAgICAgICAgIC8vIE9ubHkgc2hhcGVzLCBwYXRocyBhbmQgdGV4dHMgYXJl
IGFsbG93ZWQgZm9yIGNsaXBwaW5nLgotICAgICAgICBpZiAoIXJlbmRlcmVyLT5pc1NWR1BhdGgo
KSAmJiAhcmVuZGVyZXItPmlzU1ZHVGV4dCgpKQorICAgICAgICBpZiAoIXJlbmRlcmVyLT5pc1NW
R1NoYXBlKCkgJiYgIXJlbmRlcmVyLT5pc1NWR1RleHQoKSkKICAgICAgICAgICAgIGNvbnRpbnVl
OwogCiAgICAgICAgIC8vIFNhdmUgdGhlIG9sZCBSZW5kZXJTdHlsZSBvZiB0aGUgY3VycmVudCBv
YmplY3QgZm9yIHJlc3RvcmluZyBhZnRlciBkcmF3aW5nCkBAIC0yODQsNyArMjg0LDcgQEAgdm9p
ZCBSZW5kZXJTVkdSZXNvdXJjZUNsaXBwZXI6OmNhbGN1bGF0ZUNsaXBDb250ZW50UmVwYWludFJl
Y3QoKQogICAgICAgICBSZW5kZXJPYmplY3QqIHJlbmRlcmVyID0gY2hpbGROb2RlLT5yZW5kZXJl
cigpOwogICAgICAgICBpZiAoIWNoaWxkTm9kZS0+aXNTVkdFbGVtZW50KCkgfHwgIXN0YXRpY19j
YXN0PFNWR0VsZW1lbnQqPihjaGlsZE5vZGUpLT5pc1N0eWxlZCgpIHx8ICFyZW5kZXJlcikKICAg
ICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICBpZiAoIXJlbmRlcmVyLT5pc1NWR1BhdGgoKSAm
JiAhcmVuZGVyZXItPmlzU1ZHVGV4dCgpICYmICFyZW5kZXJlci0+aXNTVkdTaGFkb3dUcmVlUm9v
dENvbnRhaW5lcigpKQorICAgICAgICBpZiAoIXJlbmRlcmVyLT5pc1NWR1NoYXBlKCkgJiYgIXJl
bmRlcmVyLT5pc1NWR1RleHQoKSAmJiAhcmVuZGVyZXItPmlzU1ZHU2hhZG93VHJlZVJvb3RDb250
YWluZXIoKSkKICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICBSZW5kZXJTdHlsZSogc3R5
bGUgPSByZW5kZXJlci0+c3R5bGUoKTsKICAgICAgICAgaWYgKCFzdHlsZSB8fCBzdHlsZS0+ZGlz
cGxheSgpID09IE5PTkUgfHwgc3R5bGUtPnZpc2liaWxpdHkoKSAhPSBWSVNJQkxFKQpAQCAtMzEw
LDcgKzMxMCw3IEBAIGJvb2wgUmVuZGVyU1ZHUmVzb3VyY2VDbGlwcGVyOjpoaXRUZXN0Q2xpcENv
bnRlbnQoY29uc3QgRmxvYXRSZWN0JiBvYmplY3RCb3VuZGluCiAgICAgICAgIFJlbmRlck9iamVj
dCogcmVuZGVyZXIgPSBjaGlsZE5vZGUtPnJlbmRlcmVyKCk7CiAgICAgICAgIGlmICghY2hpbGRO
b2RlLT5pc1NWR0VsZW1lbnQoKSB8fCAhc3RhdGljX2Nhc3Q8U1ZHRWxlbWVudCo+KGNoaWxkTm9k
ZSktPmlzU3R5bGVkKCkgfHwgIXJlbmRlcmVyKQogICAgICAgICAgICAgY29udGludWU7Ci0gICAg
ICAgIGlmICghcmVuZGVyZXItPmlzU1ZHUGF0aCgpICYmICFyZW5kZXJlci0+aXNTVkdUZXh0KCkg
JiYgIXJlbmRlcmVyLT5pc1NWR1NoYWRvd1RyZWVSb290Q29udGFpbmVyKCkpCisgICAgICAgIGlm
ICghcmVuZGVyZXItPmlzU1ZHU2hhcGUoKSAmJiAhcmVuZGVyZXItPmlzU1ZHVGV4dCgpICYmICFy
ZW5kZXJlci0+aXNTVkdTaGFkb3dUcmVlUm9vdENvbnRhaW5lcigpKQogICAgICAgICAgICAgY29u
dGludWU7CiAgICAgICAgIEludFBvaW50IGhpdFBvaW50OwogICAgICAgICBIaXRUZXN0UmVzdWx0
IHJlc3VsdChoaXRQb2ludCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
c3ZnL1JlbmRlclNWR1Jlc291cmNlQ29udGFpbmVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VDb250YWluZXIuY3BwCmluZGV4IDc0ZDVkNjkuLmI3
NGFkNmIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZH
UmVzb3VyY2VDb250YWluZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcv
UmVuZGVyU1ZHUmVzb3VyY2VDb250YWluZXIuY3BwCkBAIC0xODAsNyArMTgwLDcgQEAgdm9pZCBS
ZW5kZXJTVkdSZXNvdXJjZUNvbnRhaW5lcjo6cmVnaXN0ZXJSZXNvdXJjZSgpCiAvLyBGSVhNRTog
VGhpcyBkb2VzIG5vdCBiZWxvbmcgaGVyZS4KIEFmZmluZVRyYW5zZm9ybSBSZW5kZXJTVkdSZXNv
dXJjZUNvbnRhaW5lcjo6dHJhbnNmb3JtT25Ob25TY2FsaW5nU3Ryb2tlKFJlbmRlck9iamVjdCog
b2JqZWN0LCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHJlc291cmNlVHJhbnNmb3JtKQogewotICAg
IGlmICghb2JqZWN0LT5pc1NWR1BhdGgoKSkKKyAgICBpZiAoIW9iamVjdC0+aXNTVkdTaGFwZSgp
KQogICAgICAgICByZXR1cm4gcmVzb3VyY2VUcmFuc2Zvcm07CiAKICAgICBTVkdTdHlsZWRUcmFu
c2Zvcm1hYmxlRWxlbWVudCogZWxlbWVudCA9IHN0YXRpY19jYXN0PFNWR1N0eWxlZFRyYW5zZm9y
bWFibGVFbGVtZW50Kj4ob2JqZWN0LT5ub2RlKCkpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJjZUZpbHRlci5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291cmNlRmlsdGVyLmNwcAppbmRleCA0YTAy
YjE3Li5jZTE0YmZlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1Jl
bmRlclNWR1Jlc291cmNlRmlsdGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
c3ZnL1JlbmRlclNWR1Jlc291cmNlRmlsdGVyLmNwcApAQCAtMjU5LDkgKzI1OSw5IEBAIGJvb2wg
UmVuZGVyU1ZHUmVzb3VyY2VGaWx0ZXI6OmFwcGx5UmVzb3VyY2UoUmVuZGVyT2JqZWN0KiBvYmpl
Y3QsIFJlbmRlclN0eWxlKiwKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotdm9pZCBSZW5kZXJTVkdS
ZXNvdXJjZUZpbHRlcjo6cG9zdEFwcGx5UmVzb3VyY2UoUmVuZGVyT2JqZWN0KiBvYmplY3QsIEdy
YXBoaWNzQ29udGV4dComIGNvbnRleHQsIHVuc2lnbmVkIHNob3J0IHJlc291cmNlTW9kZSwgY29u
c3QgUGF0aCopCit2b2lkIFJlbmRlclNWR1Jlc291cmNlRmlsdGVyOjpwb3N0QXBwbHlSZXNvdXJj
ZShSZW5kZXJTVkdTaGFwZSogc2hhcGUsIEdyYXBoaWNzQ29udGV4dComIGNvbnRleHQsIHVuc2ln
bmVkIHNob3J0IHJlc291cmNlTW9kZSwgY29uc3QgUGF0aCopCiB7Ci0gICAgQVNTRVJUKG9iamVj
dCk7CisgICAgQVNTRVJUKHNoYXBlKTsKICAgICBBU1NFUlQoY29udGV4dCk7CiAjaWZuZGVmIE5E
RUJVRwogICAgIEFTU0VSVChyZXNvdXJjZU1vZGUgPT0gQXBwbHlUb0RlZmF1bHRNb2RlKTsKQEAg
LTI2OSw2ICsyNjksNyBAQCB2b2lkIFJlbmRlclNWR1Jlc291cmNlRmlsdGVyOjpwb3N0QXBwbHlS
ZXNvdXJjZShSZW5kZXJPYmplY3QqIG9iamVjdCwgR3JhcGhpY3NDbwogICAgIFVOVVNFRF9QQVJB
TShyZXNvdXJjZU1vZGUpOwogI2VuZGlmCiAKKyAgICBSZW5kZXJPYmplY3QqIG9iamVjdCA9IHN0
YXRpY19jYXN0PFJlbmRlck9iamVjdCo+KHNoYXBlKTsKICAgICBGaWx0ZXJEYXRhKiBmaWx0ZXJE
YXRhID0gbV9maWx0ZXIuZ2V0KG9iamVjdCk7CiAgICAgaWYgKCFmaWx0ZXJEYXRhKQogICAgICAg
ICByZXR1cm47CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRl
clNWR1Jlc291cmNlRmlsdGVyLmggYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRl
clNWR1Jlc291cmNlRmlsdGVyLmgKaW5kZXggNWE1YjA5Mi4uNDlhYTE3NyAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJjZUZpbHRlci5oCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VGaWx0ZXIu
aApAQCAtNzIsNyArNzIsNyBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCB2b2lkIHJlbW92ZUNsaWVu
dEZyb21DYWNoZShSZW5kZXJPYmplY3QqLCBib29sIG1hcmtGb3JJbnZhbGlkYXRpb24gPSB0cnVl
KTsKIAogICAgIHZpcnR1YWwgYm9vbCBhcHBseVJlc291cmNlKFJlbmRlck9iamVjdCosIFJlbmRl
clN0eWxlKiwgR3JhcGhpY3NDb250ZXh0KiYsIHVuc2lnbmVkIHNob3J0IHJlc291cmNlTW9kZSk7
Ci0gICAgdmlydHVhbCB2b2lkIHBvc3RBcHBseVJlc291cmNlKFJlbmRlck9iamVjdCosIEdyYXBo
aWNzQ29udGV4dComLCB1bnNpZ25lZCBzaG9ydCByZXNvdXJjZU1vZGUsIGNvbnN0IFBhdGgqKTsK
KyAgICB2aXJ0dWFsIHZvaWQgcG9zdEFwcGx5UmVzb3VyY2UoUmVuZGVyU1ZHU2hhcGUqLCBHcmFw
aGljc0NvbnRleHQqJiwgdW5zaWduZWQgc2hvcnQgcmVzb3VyY2VNb2RlLCBjb25zdCBQYXRoKik7
CiAKICAgICB2aXJ0dWFsIEZsb2F0UmVjdCByZXNvdXJjZUJvdW5kaW5nQm94KFJlbmRlck9iamVj
dCopOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNW
R1Jlc291cmNlR3JhZGllbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5k
ZXJTVkdSZXNvdXJjZUdyYWRpZW50LmNwcAppbmRleCAxYWFiOTM1Li4zYTM2NWQwYyAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJjZUdyYWRp
ZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291
cmNlR3JhZGllbnQuY3BwCkBAIC0yNyw2ICsyNyw3IEBACiAKICNpbmNsdWRlICJHcmFkaWVudEF0
dHJpYnV0ZXMuaCIKICNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKKyNpbmNsdWRlICJSZW5k
ZXJTVkdTaGFwZS5oIgogI2luY2x1ZGUgIlJlbmRlclNWR1RleHQuaCIKICNpbmNsdWRlICJTVkdJ
bWFnZUJ1ZmZlclRvb2xzLmgiCiAjaW5jbHVkZSAiU1ZHUmVuZGVyU3VwcG9ydC5oIgpAQCAtMjMx
LDEyICsyMzIsMTMgQEAgYm9vbCBSZW5kZXJTVkdSZXNvdXJjZUdyYWRpZW50OjphcHBseVJlc291
cmNlKFJlbmRlck9iamVjdCogb2JqZWN0LCBSZW5kZXJTdHlsZSoKICAgICByZXR1cm4gdHJ1ZTsK
IH0KIAotdm9pZCBSZW5kZXJTVkdSZXNvdXJjZUdyYWRpZW50Ojpwb3N0QXBwbHlSZXNvdXJjZShS
ZW5kZXJPYmplY3QqIG9iamVjdCwgR3JhcGhpY3NDb250ZXh0KiYgY29udGV4dCwgdW5zaWduZWQg
c2hvcnQgcmVzb3VyY2VNb2RlLCBjb25zdCBQYXRoKiBwYXRoKQordm9pZCBSZW5kZXJTVkdSZXNv
dXJjZUdyYWRpZW50Ojpwb3N0QXBwbHlSZXNvdXJjZShSZW5kZXJTVkdTaGFwZSogc2hhcGUsIEdy
YXBoaWNzQ29udGV4dComIGNvbnRleHQsIHVuc2lnbmVkIHNob3J0IHJlc291cmNlTW9kZSwgY29u
c3QgUGF0aCogcGF0aCkKIHsKICAgICBBU1NFUlQoY29udGV4dCk7CiAgICAgQVNTRVJUKHJlc291
cmNlTW9kZSAhPSBBcHBseVRvRGVmYXVsdE1vZGUpOwogCiAgICAgaWYgKHJlc291cmNlTW9kZSAm
IEFwcGx5VG9UZXh0TW9kZSkgeworICAgICAgICBSZW5kZXJPYmplY3QqIG9iamVjdCA9IHN0YXRp
Y19jYXN0PFJlbmRlck9iamVjdCo+KHNoYXBlKTsKICNpZiBVU0UoQ0cpCiAgICAgICAgIC8vIENH
IHJlcXVpcmVzIHNwZWNpYWwgaGFuZGxpbmcgZm9yIGdyYWRpZW50IG9uIHRleHQKICAgICAgICAg
aWYgKG1fc2F2ZWRDb250ZXh0ICYmIG1fZ3JhZGllbnQuY29udGFpbnMob2JqZWN0KSkgewpAQCAt
MjU5LDExICsyNjEsMTEgQEAgdm9pZCBSZW5kZXJTVkdSZXNvdXJjZUdyYWRpZW50Ojpwb3N0QXBw
bHlSZXNvdXJjZShSZW5kZXJPYmplY3QqIG9iamVjdCwgR3JhcGhpY3MKICNlbHNlCiAgICAgICAg
IFVOVVNFRF9QQVJBTShvYmplY3QpOwogI2VuZGlmCi0gICAgfSBlbHNlIGlmIChwYXRoKSB7Cisg
ICAgfSBlbHNlIHsKICAgICAgICAgaWYgKHJlc291cmNlTW9kZSAmIEFwcGx5VG9GaWxsTW9kZSkK
LSAgICAgICAgICAgIGNvbnRleHQtPmZpbGxQYXRoKCpwYXRoKTsKKyAgICAgICAgICAgIHBhdGgg
PyBjb250ZXh0LT5maWxsUGF0aCgqcGF0aCkgOiBzaGFwZS0+ZmlsbFNoYXBlKGNvbnRleHQpOwog
ICAgICAgICBlbHNlIGlmIChyZXNvdXJjZU1vZGUgJiBBcHBseVRvU3Ryb2tlTW9kZSkKLSAgICAg
ICAgICAgIGNvbnRleHQtPnN0cm9rZVBhdGgoKnBhdGgpOworICAgICAgICAgICAgcGF0aCA/IGNv
bnRleHQtPnN0cm9rZVBhdGgoKnBhdGgpIDogc2hhcGUtPnN0cm9rZVNoYXBlKGNvbnRleHQpOwog
ICAgIH0KIAogICAgIGNvbnRleHQtPnJlc3RvcmUoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VHcmFkaWVudC5oIGIvU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJjZUdyYWRpZW50LmgKaW5kZXggZGY0
OTJlMi4uMzY2NGMzYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9S
ZW5kZXJTVkdSZXNvdXJjZUdyYWRpZW50LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L3N2Zy9SZW5kZXJTVkdSZXNvdXJjZUdyYWRpZW50LmgKQEAgLTUwLDcgKzUwLDcgQEAgcHVibGlj
OgogICAgIHZpcnR1YWwgdm9pZCByZW1vdmVDbGllbnRGcm9tQ2FjaGUoUmVuZGVyT2JqZWN0Kiwg
Ym9vbCBtYXJrRm9ySW52YWxpZGF0aW9uID0gdHJ1ZSk7CiAKICAgICB2aXJ0dWFsIGJvb2wgYXBw
bHlSZXNvdXJjZShSZW5kZXJPYmplY3QqLCBSZW5kZXJTdHlsZSosIEdyYXBoaWNzQ29udGV4dCom
LCB1bnNpZ25lZCBzaG9ydCByZXNvdXJjZU1vZGUpOwotICAgIHZpcnR1YWwgdm9pZCBwb3N0QXBw
bHlSZXNvdXJjZShSZW5kZXJPYmplY3QqLCBHcmFwaGljc0NvbnRleHQqJiwgdW5zaWduZWQgc2hv
cnQgcmVzb3VyY2VNb2RlLCBjb25zdCBQYXRoKik7CisgICAgdmlydHVhbCB2b2lkIHBvc3RBcHBs
eVJlc291cmNlKFJlbmRlclNWR1NoYXBlKiwgR3JhcGhpY3NDb250ZXh0KiYsIHVuc2lnbmVkIHNo
b3J0IHJlc291cmNlTW9kZSwgY29uc3QgUGF0aCopOwogICAgIHZpcnR1YWwgRmxvYXRSZWN0IHJl
c291cmNlQm91bmRpbmdCb3goUmVuZGVyT2JqZWN0KikgeyByZXR1cm4gRmxvYXRSZWN0KCk7IH0K
IAogcHJvdGVjdGVkOgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9S
ZW5kZXJTVkdSZXNvdXJjZVBhdHRlcm4uY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2
Zy9SZW5kZXJTVkdSZXNvdXJjZVBhdHRlcm4uY3BwCmluZGV4IDk4MzM4NTYuLjRmYTY3ZDggMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VQ
YXR0ZXJuLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jl
c291cmNlUGF0dGVybi5jcHAKQEAgLTE4MSwxNiArMTgxLDE2IEBAIGJvb2wgUmVuZGVyU1ZHUmVz
b3VyY2VQYXR0ZXJuOjphcHBseVJlc291cmNlKFJlbmRlck9iamVjdCogb2JqZWN0LCBSZW5kZXJT
dHlsZSoKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotdm9pZCBSZW5kZXJTVkdSZXNvdXJjZVBhdHRl
cm46OnBvc3RBcHBseVJlc291cmNlKFJlbmRlck9iamVjdCosIEdyYXBoaWNzQ29udGV4dComIGNv
bnRleHQsIHVuc2lnbmVkIHNob3J0IHJlc291cmNlTW9kZSwgY29uc3QgUGF0aCogcGF0aCkKK3Zv
aWQgUmVuZGVyU1ZHUmVzb3VyY2VQYXR0ZXJuOjpwb3N0QXBwbHlSZXNvdXJjZShSZW5kZXJTVkdT
aGFwZSogc2hhcGUsIEdyYXBoaWNzQ29udGV4dComIGNvbnRleHQsIHVuc2lnbmVkIHNob3J0IHJl
c291cmNlTW9kZSwgY29uc3QgUGF0aCogcGF0aCkKIHsKICAgICBBU1NFUlQoY29udGV4dCk7CiAg
ICAgQVNTRVJUKHJlc291cmNlTW9kZSAhPSBBcHBseVRvRGVmYXVsdE1vZGUpOwogCi0gICAgaWYg
KHBhdGggJiYgIShyZXNvdXJjZU1vZGUgJiBBcHBseVRvVGV4dE1vZGUpKSB7CisgICAgaWYgKC8q
cGF0aCAmJiAqLyEocmVzb3VyY2VNb2RlICYgQXBwbHlUb1RleHRNb2RlKSkgewogICAgICAgICBp
ZiAocmVzb3VyY2VNb2RlICYgQXBwbHlUb0ZpbGxNb2RlKQotICAgICAgICAgICAgY29udGV4dC0+
ZmlsbFBhdGgoKnBhdGgpOworICAgICAgICAgICAgIHBhdGggPyBjb250ZXh0LT5maWxsUGF0aCgq
cGF0aCkgOiBzaGFwZS0+ZmlsbFNoYXBlKGNvbnRleHQpOwogICAgICAgICBlbHNlIGlmIChyZXNv
dXJjZU1vZGUgJiBBcHBseVRvU3Ryb2tlTW9kZSkKLSAgICAgICAgICAgIGNvbnRleHQtPnN0cm9r
ZVBhdGgoKnBhdGgpOworICAgICAgICAgICAgIHBhdGggPyBjb250ZXh0LT5zdHJva2VQYXRoKCpw
YXRoKSA6IHNoYXBlLT5zdHJva2VTaGFwZShjb250ZXh0KTsKICAgICB9CiAKICAgICBjb250ZXh0
LT5yZXN0b3JlKCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1Jl
bmRlclNWR1Jlc291cmNlUGF0dGVybi5oIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9S
ZW5kZXJTVkdSZXNvdXJjZVBhdHRlcm4uaAppbmRleCBhNjk3YzcxLi5jMjIwNzkwIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291cmNlUGF0dGVy
bi5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VQ
YXR0ZXJuLmgKQEAgLTUyLDcgKzUyLDcgQEAgcHVibGljOgogICAgIHZpcnR1YWwgdm9pZCByZW1v
dmVDbGllbnRGcm9tQ2FjaGUoUmVuZGVyT2JqZWN0KiwgYm9vbCBtYXJrRm9ySW52YWxpZGF0aW9u
ID0gdHJ1ZSk7CiAKICAgICB2aXJ0dWFsIGJvb2wgYXBwbHlSZXNvdXJjZShSZW5kZXJPYmplY3Qq
LCBSZW5kZXJTdHlsZSosIEdyYXBoaWNzQ29udGV4dComLCB1bnNpZ25lZCBzaG9ydCByZXNvdXJj
ZU1vZGUpOwotICAgIHZpcnR1YWwgdm9pZCBwb3N0QXBwbHlSZXNvdXJjZShSZW5kZXJPYmplY3Qq
LCBHcmFwaGljc0NvbnRleHQqJiwgdW5zaWduZWQgc2hvcnQgcmVzb3VyY2VNb2RlLCBjb25zdCBQ
YXRoKik7CisgICAgdmlydHVhbCB2b2lkIHBvc3RBcHBseVJlc291cmNlKFJlbmRlclNWR1NoYXBl
KiwgR3JhcGhpY3NDb250ZXh0KiYsIHVuc2lnbmVkIHNob3J0IHJlc291cmNlTW9kZSwgY29uc3Qg
UGF0aCopOwogICAgIHZpcnR1YWwgRmxvYXRSZWN0IHJlc291cmNlQm91bmRpbmdCb3goUmVuZGVy
T2JqZWN0KikgeyByZXR1cm4gRmxvYXRSZWN0KCk7IH0KIAogICAgIHZpcnR1YWwgUmVuZGVyU1ZH
UmVzb3VyY2VUeXBlIHJlc291cmNlVHlwZSgpIGNvbnN0IHsgcmV0dXJuIHNfcmVzb3VyY2VUeXBl
OyB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jl
c291cmNlU29saWRDb2xvci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRl
clNWR1Jlc291cmNlU29saWRDb2xvci5jcHAKaW5kZXggNWJlMmFmNi4uZTU5ZDVkMSAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJjZVNvbGlk
Q29sb3IuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVz
b3VyY2VTb2xpZENvbG9yLmNwcApAQCAtMjMsNiArMjMsNyBAQAogI2luY2x1ZGUgIlJlbmRlclNW
R1Jlc291cmNlU29saWRDb2xvci5oIgogCiAjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCisj
aW5jbHVkZSAiUmVuZGVyU1ZHU2hhcGUuaCIKICNpbmNsdWRlICJSZW5kZXJTdHlsZS5oIgogI2lu
Y2x1ZGUgIlNWR1JlbmRlclN1cHBvcnQuaCIKIApAQCAtNzQsMTYgKzc1LDE2IEBAIGJvb2wgUmVu
ZGVyU1ZHUmVzb3VyY2VTb2xpZENvbG9yOjphcHBseVJlc291cmNlKFJlbmRlck9iamVjdCogb2Jq
ZWN0LCBSZW5kZXJTdHlsCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLXZvaWQgUmVuZGVyU1ZHUmVz
b3VyY2VTb2xpZENvbG9yOjpwb3N0QXBwbHlSZXNvdXJjZShSZW5kZXJPYmplY3QqLCBHcmFwaGlj
c0NvbnRleHQqJiBjb250ZXh0LCB1bnNpZ25lZCBzaG9ydCByZXNvdXJjZU1vZGUsIGNvbnN0IFBh
dGgqIHBhdGgpCit2b2lkIFJlbmRlclNWR1Jlc291cmNlU29saWRDb2xvcjo6cG9zdEFwcGx5UmVz
b3VyY2UoUmVuZGVyU1ZHU2hhcGUqIHNoYXBlLCBHcmFwaGljc0NvbnRleHQqJiBjb250ZXh0LCB1
bnNpZ25lZCBzaG9ydCByZXNvdXJjZU1vZGUsIGNvbnN0IFBhdGgqIHBhdGgpCiB7CiAgICAgQVNT
RVJUKGNvbnRleHQpOwogICAgIEFTU0VSVChyZXNvdXJjZU1vZGUgIT0gQXBwbHlUb0RlZmF1bHRN
b2RlKTsKIAotICAgIGlmIChwYXRoICYmICEocmVzb3VyY2VNb2RlICYgQXBwbHlUb1RleHRNb2Rl
KSkgeworICAgIGlmICgvKnBhdGggJiYgKi8hKHJlc291cmNlTW9kZSAmIEFwcGx5VG9UZXh0TW9k
ZSkpIHsKICAgICAgICAgaWYgKHJlc291cmNlTW9kZSAmIEFwcGx5VG9GaWxsTW9kZSkKLSAgICAg
ICAgICAgIGNvbnRleHQtPmZpbGxQYXRoKCpwYXRoKTsKKyAgICAgICAgICAgIHBhdGggPyBjb250
ZXh0LT5maWxsUGF0aCgqcGF0aCkgOiBzaGFwZS0+ZmlsbFNoYXBlKGNvbnRleHQpOwogICAgICAg
ICBlbHNlIGlmIChyZXNvdXJjZU1vZGUgJiBBcHBseVRvU3Ryb2tlTW9kZSkKLSAgICAgICAgICAg
IGNvbnRleHQtPnN0cm9rZVBhdGgoKnBhdGgpOworICAgICAgICAgICAgcGF0aCA/IGNvbnRleHQt
PnN0cm9rZVBhdGgoKnBhdGgpIDogc2hhcGUtPnN0cm9rZVNoYXBlKGNvbnRleHQpOwogICAgIH0K
IH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdS
ZXNvdXJjZVNvbGlkQ29sb3IuaCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVy
U1ZHUmVzb3VyY2VTb2xpZENvbG9yLmgKaW5kZXggMDJjZWIzMS4uNWRhZjU3NCAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJjZVNvbGlkQ29s
b3IuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291cmNl
U29saWRDb2xvci5oCkBAIC0zNiw3ICszNiw3IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIHZvaWQg
cmVtb3ZlQ2xpZW50RnJvbUNhY2hlKFJlbmRlck9iamVjdCosIGJvb2wgPSB0cnVlKSB7IH0KIAog
ICAgIHZpcnR1YWwgYm9vbCBhcHBseVJlc291cmNlKFJlbmRlck9iamVjdCosIFJlbmRlclN0eWxl
KiwgR3JhcGhpY3NDb250ZXh0KiYsIHVuc2lnbmVkIHNob3J0IHJlc291cmNlTW9kZSk7Ci0gICAg
dmlydHVhbCB2b2lkIHBvc3RBcHBseVJlc291cmNlKFJlbmRlck9iamVjdCosIEdyYXBoaWNzQ29u
dGV4dComLCB1bnNpZ25lZCBzaG9ydCByZXNvdXJjZU1vZGUsIGNvbnN0IFBhdGgqKTsKKyAgICB2
aXJ0dWFsIHZvaWQgcG9zdEFwcGx5UmVzb3VyY2UoUmVuZGVyU1ZHU2hhcGUqLCBHcmFwaGljc0Nv
bnRleHQqJiwgdW5zaWduZWQgc2hvcnQgcmVzb3VyY2VNb2RlLCBjb25zdCBQYXRoKik7CiAgICAg
dmlydHVhbCBGbG9hdFJlY3QgcmVzb3VyY2VCb3VuZGluZ0JveChSZW5kZXJPYmplY3QqKSB7IHJl
dHVybiBGbG9hdFJlY3QoKTsgfQogCiAgICAgdmlydHVhbCBSZW5kZXJTVkdSZXNvdXJjZVR5cGUg
cmVzb3VyY2VUeXBlKCkgY29uc3QgeyByZXR1cm4gc19yZXNvdXJjZVR5cGU7IH0KZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHU2hhcGUuY3BwIGIvU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdTaGFwZS5jcHAKbmV3IGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2QyM2U1NgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHU2hhcGUuY3BwCkBAIC0wLDAgKzEsNDI2
IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1LCAyMDA3IE5pa29sYXMgWmltbWVy
bWFubiA8emltbWVybWFubkBrZGUub3JnPgorICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1LCAy
MDA4IFJvYiBCdWlzIDxidWlzQGtkZS5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDUsIDIwMDcg
RXJpYyBTZWlkZWwgPGVyaWNAd2Via2l0Lm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAwOSBHb29n
bGUsIEluYy4KKyAqIENvcHlyaWdodCAoQykgMjAwOSBEaXJrIFNjaHVsemUgPGtyaXRAd2Via2l0
Lm9yZz4KKyAqIENvcHlyaWdodCAoQykgUmVzZWFyY2ggSW4gTW90aW9uIExpbWl0ZWQgMjAxMC4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwOSBKZWZmIFNjaGlsbGVy
IDxjb2RlZHJlYWRAZ21haWwuY29tPgorICogQ29weXJpZ2h0IChDKSAyMDExIFJlbmF0YSBIb2Rv
dmFuIDxyZW5pQHdlYmtpdC5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgVW5pdmVyc2l0eSBv
ZiBTemVnZWQKKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiBy
ZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRo
ZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkg
dGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhl
IExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICog
VGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1
c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1w
bGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMg
TGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZl
ZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFs
b25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3Qs
IHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFu
a2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0Eu
CisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorCisjaWYgRU5BQkxFKFNWRykKKyNpbmNsdWRl
ICJSZW5kZXJTVkdTaGFwZS5oIgorCisjaW5jbHVkZSAiRmxvYXRQb2ludC5oIgorI2luY2x1ZGUg
IkZsb2F0UXVhZC5oIgorI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgorI2luY2x1ZGUgIkhp
dFRlc3RSZXF1ZXN0LmgiCisjaW5jbHVkZSAiUG9pbnRlckV2ZW50c0hpdFJ1bGVzLmgiCisjaW5j
bHVkZSAiUmVuZGVyU1ZHQ29udGFpbmVyLmgiCisjaW5jbHVkZSAiUmVuZGVyU1ZHUmVzb3VyY2VN
YXJrZXIuaCIKKyNpbmNsdWRlICJSZW5kZXJTVkdSZXNvdXJjZVNvbGlkQ29sb3IuaCIKKyNpbmNs
dWRlICJTVkdQYXRoRWxlbWVudC5oIgorI2luY2x1ZGUgIlNWR1JlbmRlclN1cHBvcnQuaCIKKyNp
bmNsdWRlICJTVkdSZXNvdXJjZXMuaCIKKyNpbmNsdWRlICJTVkdTdHlsZWRUcmFuc2Zvcm1hYmxl
RWxlbWVudC5oIgorI2luY2x1ZGUgIlNWR1RyYW5zZm9ybUxpc3QuaCIKKyNpbmNsdWRlICJTVkdV
UklSZWZlcmVuY2UuaCIKKyNpbmNsdWRlICJTdHJva2VTdHlsZUFwcGxpZXIuaCIKKyNpbmNsdWRl
IDx3dGYvTWF0aEV4dHJhcy5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK1JlbmRlclNWR1No
YXBlOjpSZW5kZXJTVkdTaGFwZShTVkdTdHlsZWRUcmFuc2Zvcm1hYmxlRWxlbWVudCogbm9kZSkK
KyAgICA6IFJlbmRlclNWR01vZGVsT2JqZWN0KG5vZGUpCisgICAgLCBtX25lZWRzQm91bmRhcmll
c1VwZGF0ZShmYWxzZSkgLy8gZGVmYXVsdCBpcyBmYWxzZSwgdGhlIGNhY2hlZCByZWN0cyBhcmUg
ZW1wdHkgZnJvbSB0aGUgYmVnaW5uaW5nCisgICAgLCBtX25lZWRzU2hhcGVVcGRhdGUodHJ1ZSkg
Ly8gZGVmYXVsdCBpcyB0cnVlLCBzbyB3ZSBncmFiIGEgUGF0aCBvYmplY3Qgb25jZSBmcm9tIFNW
R1N0eWxlZFRyYW5zZm9ybWFibGVFbGVtZW50CisgICAgLCBtX25lZWRzVHJhbnNmb3JtVXBkYXRl
KHRydWUpIC8vIGRlZmF1bHQgaXMgdHJ1ZSwgc28gd2UgZ3JhYiBhIEFmZmluZVRyYW5zZm9ybSBv
YmplY3Qgb25jZSBmcm9tIFNWR1N0eWxlZFRyYW5zZm9ybWFibGVFbGVtZW50Cit7Cit9CisKK1Jl
bmRlclNWR1NoYXBlOjp+UmVuZGVyU1ZHU2hhcGUoKQoreworfQorCit2b2lkIFJlbmRlclNWR1No
YXBlOjpjcmVhdGVTaGFwZSgpCit7CisgICAgbV9wYXRoID0gYWRvcHRQdHIobmV3IFBhdGgpOwor
ICAgIEFTU0VSVChpc0VtcHR5KCkpOworCisgICAgU1ZHUGF0aEVsZW1lbnQqIGVsZW1lbnQgPSBz
dGF0aWNfY2FzdDxTVkdQYXRoRWxlbWVudCo+KG5vZGUoKSk7CisgICAgZWxlbWVudC0+dG9QYXRo
RGF0YShwYXRoKCkpOworfQorCitib29sIFJlbmRlclNWR1NoYXBlOjppc0VtcHR5KCkgY29uc3QK
K3sKKyAgICByZXR1cm4gcGF0aCgpLmlzRW1wdHkoKTsKK30KKwordm9pZCBSZW5kZXJTVkdTaGFw
ZTo6ZmlsbFNoYXBlKEdyYXBoaWNzQ29udGV4dCogY29udGV4dCkKK3sKKyAgICBjb250ZXh0LT5m
aWxsUGF0aChwYXRoKCkpOworfQorCitGbG9hdFJlY3QgUmVuZGVyU1ZHU2hhcGU6Om9iamVjdEJv
dW5kaW5nQm94KCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9wYXRoLT5ib3VuZGluZ1JlY3QoKTsK
K30KKworRmxvYXRSZWN0IFJlbmRlclNWR1NoYXBlOjpzdHJva2VCb3VuZGluZ0JveCgpCit7Cisg
ICAgQm91bmRpbmdSZWN0U3Ryb2tlU3R5bGVBcHBsaWVyIHN0cm9rZVN0eWxlKHRoaXMsIHN0eWxl
KCkpOworICAgIHJldHVybiBwYXRoKCkuc3Ryb2tlQm91bmRpbmdSZWN0KCZzdHJva2VTdHlsZSk7
Cit9CisKK3ZvaWQgUmVuZGVyU1ZHU2hhcGU6OnN0cm9rZVNoYXBlKEdyYXBoaWNzQ29udGV4dCog
Y29udGV4dCkKK3sKKyAgICBjb250ZXh0LT5zdHJva2VQYXRoKHBhdGgoKSk7Cit9CisKK2Jvb2wg
UmVuZGVyU1ZHU2hhcGU6OnN0cm9rZUNvbnRhaW5zU2xvd0Nhc2UoY29uc3QgRmxvYXRQb2ludCYg
cG9pbnQpCit7CisgICAgQm91bmRpbmdSZWN0U3Ryb2tlU3R5bGVBcHBsaWVyIGFwcGxpZXIodGhp
cywgc3R5bGUoKSk7CisgICAgcmV0dXJuIHBhdGgoKS5zdHJva2VDb250YWlucygmYXBwbGllciwg
cG9pbnQpOworfQorCitib29sIFJlbmRlclNWR1NoYXBlOjpmaWxsQ29udGFpbnNTbG93Q2FzZShj
b25zdCBGbG9hdFBvaW50JiBwb2ludCwgY29uc3QgV2luZFJ1bGUmIGZpbGxSdWxlKSBjb25zdAor
eworICAgIHJldHVybiBwYXRoKCkuY29udGFpbnMocG9pbnQsIGZpbGxSdWxlKTsKK30KKworYm9v
bCBSZW5kZXJTVkdTaGFwZTo6ZmlsbENvbnRhaW5zKGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50LCBi
b29sIHJlcXVpcmVzRmlsbCwgV2luZFJ1bGUgZmlsbFJ1bGUpCit7CisgICAgaWYgKCFtX2ZpbGxC
b3VuZGluZ0JveC5jb250YWlucyhwb2ludCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAg
IENvbG9yIGZhbGxiYWNrQ29sb3I7CisgICAgaWYgKHJlcXVpcmVzRmlsbCAmJiAhUmVuZGVyU1ZH
UmVzb3VyY2U6OmZpbGxQYWludGluZ1Jlc291cmNlKHRoaXMsIHN0eWxlKCksIGZhbGxiYWNrQ29s
b3IpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICByZXR1cm4gZmlsbENvbnRhaW5zU2xv
d0Nhc2UocG9pbnQsIGZpbGxSdWxlKTsKK30KKworYm9vbCBSZW5kZXJTVkdTaGFwZTo6c3Ryb2tl
Q29udGFpbnMoY29uc3QgRmxvYXRQb2ludCYgcG9pbnQsIGJvb2wgcmVxdWlyZXNTdHJva2UpCit7
CisgICAgaWYgKCFtX3N0cm9rZUFuZE1hcmtlckJvdW5kaW5nQm94LmNvbnRhaW5zKHBvaW50KSkK
KyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgQ29sb3IgZmFsbGJhY2tDb2xvcjsKKyAgICBp
ZiAocmVxdWlyZXNTdHJva2UgJiYgIVJlbmRlclNWR1Jlc291cmNlOjpzdHJva2VQYWludGluZ1Jl
c291cmNlKHRoaXMsIHN0eWxlKCksIGZhbGxiYWNrQ29sb3IpKQorICAgICAgICByZXR1cm4gZmFs
c2U7CisKKyAgICBpZiAoc2hvdWxkU3Ryb2tlWmVyb0xlbmd0aFN1YnBhdGgoKSkKKyAgICAgICAg
cmV0dXJuIHplcm9MZW5ndGhTdWJwYXRoUmVjdCgpLmNvbnRhaW5zKHBvaW50KTsKKworICAgIHJl
dHVybiBzdHJva2VDb250YWluc1Nsb3dDYXNlKHBvaW50KTsKK30KKwordm9pZCBSZW5kZXJTVkdT
aGFwZTo6bGF5b3V0KCkKK3sKKyAgICBMYXlvdXRSZXBhaW50ZXIgcmVwYWludGVyKCp0aGlzLCBj
aGVja0ZvclJlcGFpbnREdXJpbmdMYXlvdXQoKSAmJiBzZWxmTmVlZHNMYXlvdXQoKSk7CisgICAg
U1ZHU3R5bGVkVHJhbnNmb3JtYWJsZUVsZW1lbnQqIGVsZW1lbnQgPSBzdGF0aWNfY2FzdDxTVkdT
dHlsZWRUcmFuc2Zvcm1hYmxlRWxlbWVudCo+KG5vZGUoKSk7CisKKyAgICBib29sIHVwZGF0ZUNh
Y2hlZEJvdW5kYXJpZXNJblBhcmVudHMgPSBmYWxzZTsKKworICAgIGJvb2wgbmVlZHNTaGFwZVVw
ZGF0ZSA9IG1fbmVlZHNTaGFwZVVwZGF0ZTsKKyAgICBpZiAobmVlZHNTaGFwZVVwZGF0ZSkgewor
ICAgICAgICBjcmVhdGVTaGFwZSgpOworICAgICAgICBtX25lZWRzU2hhcGVVcGRhdGUgPSBmYWxz
ZTsKKyAgICAgICAgdXBkYXRlQ2FjaGVkQm91bmRhcmllc0luUGFyZW50cyA9IHRydWU7CisgICAg
fQorCisgICAgaWYgKG1fbmVlZHNUcmFuc2Zvcm1VcGRhdGUpIHsKKyAgICAgICAgbV9sb2NhbFRy
YW5zZm9ybSA9IGVsZW1lbnQtPmFuaW1hdGVkTG9jYWxUcmFuc2Zvcm0oKTsKKyAgICAgICAgbV9u
ZWVkc1RyYW5zZm9ybVVwZGF0ZSA9IGZhbHNlOworICAgICAgICB1cGRhdGVDYWNoZWRCb3VuZGFy
aWVzSW5QYXJlbnRzID0gdHJ1ZTsKKyAgICB9CisKKyAgICBpZiAobV9uZWVkc0JvdW5kYXJpZXNV
cGRhdGUpCisgICAgICAgIHVwZGF0ZUNhY2hlZEJvdW5kYXJpZXNJblBhcmVudHMgPSB0cnVlOwor
CisgICAgLy8gSW52YWxpZGF0ZSBhbGwgcmVzb3VyY2VzIG9mIHRoaXMgY2xpZW50IGlmIG91ciBs
YXlvdXQgY2hhbmdlZC4KKyAgICBpZiAobV9ldmVySGFkTGF5b3V0ICYmIHNlbGZOZWVkc0xheW91
dCgpKSB7CisgICAgICAgIFNWR1Jlc291cmNlc0NhY2hlOjpjbGllbnRMYXlvdXRDaGFuZ2VkKHRo
aXMpOworICAgICAgICBtX21hcmtlckxheW91dEluZm8uY2xlYXIoKTsKKyAgICB9CisKKyAgICAv
LyBBdCB0aGlzIHBvaW50IExheW91dFJlcGFpbnRlciBhbHJlYWR5IGdyYWJiZWQgdGhlIG9sZCBi
b3VuZHMsCisgICAgLy8gcmVjYWxjdWxhdGUgdGhlbSBub3cgc28gcmVwYWludEFmdGVyTGF5b3V0
KCkgdXNlcyB0aGUgbmV3IGJvdW5kcy4KKyAgICBpZiAobmVlZHNTaGFwZVVwZGF0ZSB8fCBtX25l
ZWRzQm91bmRhcmllc1VwZGF0ZSkgeworICAgICAgICB1cGRhdGVDYWNoZWRCb3VuZGFyaWVzKCk7
CisgICAgICAgIG1fbmVlZHNCb3VuZGFyaWVzVXBkYXRlID0gZmFsc2U7CisgICAgfQorCisgICAg
Ly8gSWYgb3VyIGJvdW5kcyBjaGFuZ2VkLCBub3RpZnkgdGhlIHBhcmVudHMuCisgICAgaWYgKHVw
ZGF0ZUNhY2hlZEJvdW5kYXJpZXNJblBhcmVudHMpCisgICAgICAgIFJlbmRlclNWR01vZGVsT2Jq
ZWN0OjpzZXROZWVkc0JvdW5kYXJpZXNVcGRhdGUoKTsKKworICAgIHJlcGFpbnRlci5yZXBhaW50
QWZ0ZXJMYXlvdXQoKTsKKyAgICBzZXROZWVkc0xheW91dChmYWxzZSk7Cit9CisKK2Jvb2wgUmVu
ZGVyU1ZHU2hhcGU6OnNob3VsZFN0cm9rZVplcm9MZW5ndGhTdWJwYXRoKCkgY29uc3QKK3sKKyAg
ICAvLyBTcGVjKDExLjQpOiBBbnkgemVybyBsZW5ndGggc3VicGF0aCBzaGFsbCBub3QgYmUgc3Ry
b2tlZCBpZiB0aGUg4oCYc3Ryb2tlLWxpbmVjYXDigJkgcHJvcGVydHkgaGFzIGEgdmFsdWUgb2Yg
YnV0dAorICAgIC8vIGJ1dCBzaGFsbCBiZSBzdHJva2VkIGlmIHRoZSDigJhzdHJva2UtbGluZWNh
cOKAmSBwcm9wZXJ0eSBoYXMgYSB2YWx1ZSBvZiByb3VuZCBvciBzcXVhcmUKKyAgICByZXR1cm4g
c3R5bGUoKS0+c3ZnU3R5bGUoKS0+aGFzU3Ryb2tlKCkgJiYgc3R5bGUoKS0+c3ZnU3R5bGUoKS0+
Y2FwU3R5bGUoKSAhPSBCdXR0Q2FwICYmICFtX2ZpbGxCb3VuZGluZ0JveC53aWR0aCgpICYmICFt
X2ZpbGxCb3VuZGluZ0JveC5oZWlnaHQoKTsKK30KKworRmxvYXRSZWN0IFJlbmRlclNWR1NoYXBl
Ojp6ZXJvTGVuZ3RoU3VicGF0aFJlY3QoKSBjb25zdAoreworICAgIGZsb2F0IHN0cm9rZVdpZHRo
ID0gdGhpcy0+c3Ryb2tlV2lkdGgoKTsKKyAgICByZXR1cm4gRmxvYXRSZWN0KG1fZmlsbEJvdW5k
aW5nQm94LngoKSAtIHN0cm9rZVdpZHRoIC8gMiwgbV9maWxsQm91bmRpbmdCb3gueSgpIC0gc3Ry
b2tlV2lkdGggLyAyLCBzdHJva2VXaWR0aCwgc3Ryb2tlV2lkdGgpOworfQorCit2b2lkIFJlbmRl
clNWR1NoYXBlOjpzZXR1cFNxdWFyZUNhcFBhdGgoUGF0aComIHVzZVBhdGgsIGludCYgYXBwbHlN
b2RlKQoreworICAgIC8vIFNwZWMoMTEuNCk6IEFueSB6ZXJvIGxlbmd0aCBzdWJwYXRoIHNoYWxs
IG5vdCBiZSBzdHJva2VkIGlmIHRoZSDigJhzdHJva2UtbGluZWNhcOKAmSBwcm9wZXJ0eSBoYXMg
YSB2YWx1ZSBvZiBidXR0CisgICAgLy8gYnV0IHNoYWxsIGJlIHN0cm9rZWQgaWYgdGhlIOKAmHN0
cm9rZS1saW5lY2Fw4oCZIHByb3BlcnR5IGhhcyBhIHZhbHVlIG9mIHJvdW5kIG9yIHNxdWFyZQor
ICAgIERFRklORV9TVEFUSUNfTE9DQUwoUGF0aCwgdGVtcFBhdGgsICgpKTsKKworICAgIGFwcGx5
TW9kZSA9IEFwcGx5VG9GaWxsTW9kZTsKKyAgICB1c2VQYXRoID0gJnRlbXBQYXRoOworICAgIHVz
ZVBhdGgtPmNsZWFyKCk7CisgICAgaWYgKHN0eWxlKCktPnN2Z1N0eWxlKCktPmNhcFN0eWxlKCkg
PT0gU3F1YXJlQ2FwKQorICAgICAgICB1c2VQYXRoLT5hZGRSZWN0KHplcm9MZW5ndGhTdWJwYXRo
UmVjdCgpKTsKKyAgICBlbHNlCisgICAgICAgIHVzZVBhdGgtPmFkZEVsbGlwc2UoemVyb0xlbmd0
aFN1YnBhdGhSZWN0KCkpOworfQorCitib29sIFJlbmRlclNWR1NoYXBlOjpzZXR1cE5vblNjYWxp
bmdTdHJva2VQYXRoKFBhdGgqJiB1c2VQYXRoLCBHcmFwaGljc0NvbnRleHRTdGF0ZVNhdmVyJiBz
dGF0ZVNhdmVyKQoreworICAgIERFRklORV9TVEFUSUNfTE9DQUwoUGF0aCwgdGVtcFBhdGgsICgp
KTsKKworICAgIFNWR1N0eWxlZFRyYW5zZm9ybWFibGVFbGVtZW50KiBlbGVtZW50ID0gc3RhdGlj
X2Nhc3Q8U1ZHU3R5bGVkVHJhbnNmb3JtYWJsZUVsZW1lbnQqPihub2RlKCkpOworICAgIEFmZmlu
ZVRyYW5zZm9ybSBub25TY2FsaW5nU3Ryb2tlVHJhbnNmb3JtID0gZWxlbWVudC0+Z2V0U2NyZWVu
Q1RNKFNWR0xvY2F0YWJsZTo6RGlzYWxsb3dTdHlsZVVwZGF0ZSk7CisgICAgaWYgKCFub25TY2Fs
aW5nU3Ryb2tlVHJhbnNmb3JtLmlzSW52ZXJ0aWJsZSgpKQorICAgICAgICByZXR1cm4gZmFsc2U7
CisKKyAgICB0ZW1wUGF0aCA9ICptX3BhdGg7CisgICAgdXNlUGF0aCA9ICZ0ZW1wUGF0aDsKKyAg
ICB0ZW1wUGF0aC50cmFuc2Zvcm0obm9uU2NhbGluZ1N0cm9rZVRyYW5zZm9ybSk7CisKKyAgICBz
dGF0ZVNhdmVyLnNhdmUoKTsKKyAgICBzdGF0ZVNhdmVyLmNvbnRleHQoKS0+Y29uY2F0Q1RNKG5v
blNjYWxpbmdTdHJva2VUcmFuc2Zvcm0uaW52ZXJzZSgpKTsKKyAgICByZXR1cm4gdHJ1ZTsKK30K
Kwordm9pZCBSZW5kZXJTVkdTaGFwZTo6ZmlsbEFuZFN0cm9rZVBhdGgoR3JhcGhpY3NDb250ZXh0
KiBjb250ZXh0KQoreworICAgIFJlbmRlclN0eWxlKiBzdHlsZSA9IHRoaXMtPnN0eWxlKCk7CisK
KyAgICBDb2xvciBmYWxsYmFja0NvbG9yOworICAgIGlmIChSZW5kZXJTVkdSZXNvdXJjZSogZmls
bFBhaW50aW5nUmVzb3VyY2UgPSBSZW5kZXJTVkdSZXNvdXJjZTo6ZmlsbFBhaW50aW5nUmVzb3Vy
Y2UodGhpcywgc3R5bGUsIGZhbGxiYWNrQ29sb3IpKSB7CisgICAgICAgIGlmIChmaWxsUGFpbnRp
bmdSZXNvdXJjZS0+YXBwbHlSZXNvdXJjZSh0aGlzLCBzdHlsZSwgY29udGV4dCwgQXBwbHlUb0Zp
bGxNb2RlKSkKKyAgICAgICAgICAgIGZpbGxQYWludGluZ1Jlc291cmNlLT5wb3N0QXBwbHlSZXNv
dXJjZSh0aGlzLCBjb250ZXh0LCBBcHBseVRvRmlsbE1vZGUsIDApOworICAgICAgICBlbHNlIGlm
IChmYWxsYmFja0NvbG9yLmlzVmFsaWQoKSkgeworICAgICAgICAgICAgUmVuZGVyU1ZHUmVzb3Vy
Y2VTb2xpZENvbG9yKiBmYWxsYmFja1Jlc291cmNlID0gUmVuZGVyU1ZHUmVzb3VyY2U6OnNoYXJl
ZFNvbGlkUGFpbnRpbmdSZXNvdXJjZSgpOworICAgICAgICAgICAgZmFsbGJhY2tSZXNvdXJjZS0+
c2V0Q29sb3IoZmFsbGJhY2tDb2xvcik7CisgICAgICAgICAgICBpZiAoZmFsbGJhY2tSZXNvdXJj
ZS0+YXBwbHlSZXNvdXJjZSh0aGlzLCBzdHlsZSwgY29udGV4dCwgQXBwbHlUb0ZpbGxNb2RlKSkK
KyAgICAgICAgICAgICAgICBmYWxsYmFja1Jlc291cmNlLT5wb3N0QXBwbHlSZXNvdXJjZSh0aGlz
LCBjb250ZXh0LCBBcHBseVRvRmlsbE1vZGUsIDApOworICAgICAgICB9CisgICAgfQorCisgICAg
ZmFsbGJhY2tDb2xvciA9IENvbG9yKCk7CisgICAgUmVuZGVyU1ZHUmVzb3VyY2UqIHN0cm9rZVBh
aW50aW5nUmVzb3VyY2UgPSBSZW5kZXJTVkdSZXNvdXJjZTo6c3Ryb2tlUGFpbnRpbmdSZXNvdXJj
ZSh0aGlzLCBzdHlsZSwgZmFsbGJhY2tDb2xvcik7CisgICAgaWYgKCFzdHJva2VQYWludGluZ1Jl
c291cmNlKQorICAgICAgICByZXR1cm47CisKKyAgICBQYXRoKiB1c2VQYXRoID0gMDsKKyAgICBp
bnQgYXBwbHlNb2RlID0gQXBwbHlUb1N0cm9rZU1vZGU7CisKKyAgICBib29sIG5vblNjYWxpbmdT
dHJva2UgPSBzdHlsZS0+c3ZnU3R5bGUoKS0+dmVjdG9yRWZmZWN0KCkgPT0gVkVfTk9OX1NDQUxJ
TkdfU1RST0tFOworCisgICAgR3JhcGhpY3NDb250ZXh0U3RhdGVTYXZlciBzdGF0ZVNhdmVyKCpj
b250ZXh0LCBmYWxzZSk7CisKKyAgICAvLyBTcGVjKDExLjQpOiBBbnkgemVybyBsZW5ndGggc3Vi
cGF0aCBzaGFsbCBub3QgYmUgc3Ryb2tlZCBpZiB0aGUg4oCYc3Ryb2tlLWxpbmVjYXDigJkgcHJv
cGVydHkgaGFzIGEgdmFsdWUgb2YgYnV0dAorICAgIC8vIGJ1dCBzaGFsbCBiZSBzdHJva2VkIGlm
IHRoZSDigJhzdHJva2UtbGluZWNhcOKAmSBwcm9wZXJ0eSBoYXMgYSB2YWx1ZSBvZiByb3VuZCBv
ciBzcXVhcmUKKyAgICAvLyBGSVhNRTogdGhpcyBkb2VzIG5vdCB3b3JrIGZvciB6ZXJvLWxlbmd0
aCBzdWJwYXRocywgb25seSB3aGVuIHRvdGFsIHBhdGggaXMgemVyby1sZW5ndGgKKyAgICBpZiAo
c2hvdWxkU3Ryb2tlWmVyb0xlbmd0aFN1YnBhdGgoKSkgeworICAgICAgICBSZW5kZXJTVkdTaGFw
ZTo6Y3JlYXRlU2hhcGUoKTsKKyAgICAgICAgdXNlUGF0aCA9IG1fcGF0aC5nZXQoKTsKKyAgICAg
ICAgc2V0dXBTcXVhcmVDYXBQYXRoKHVzZVBhdGgsIGFwcGx5TW9kZSk7CisgICAgfSBlbHNlIGlm
IChub25TY2FsaW5nU3Ryb2tlKSB7CisgICAgICAgIFJlbmRlclNWR1NoYXBlOjpjcmVhdGVTaGFw
ZSgpOworICAgICAgICB1c2VQYXRoID0gbV9wYXRoLmdldCgpOworICAgICAgICBpZiAoIXNldHVw
Tm9uU2NhbGluZ1N0cm9rZVBhdGgodXNlUGF0aCwgc3RhdGVTYXZlcikpCisgICAgICAgICAgICBy
ZXR1cm47CisgICAgfQorICAgIGlmIChzdHJva2VQYWludGluZ1Jlc291cmNlLT5hcHBseVJlc291
cmNlKHRoaXMsIHN0eWxlLCBjb250ZXh0LCBhcHBseU1vZGUpKSB7CisgICAgICAgIHN0cm9rZVBh
aW50aW5nUmVzb3VyY2UtPnBvc3RBcHBseVJlc291cmNlKHRoaXMsIGNvbnRleHQsIGFwcGx5TW9k
ZSwgdXNlUGF0aCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgaWYgKCFmYWxsYmFja0Nv
bG9yLmlzVmFsaWQoKSkKKyAgICAgICAgcmV0dXJuOworICAgIFJlbmRlclNWR1Jlc291cmNlU29s
aWRDb2xvciogZmFsbGJhY2tSZXNvdXJjZSA9IFJlbmRlclNWR1Jlc291cmNlOjpzaGFyZWRTb2xp
ZFBhaW50aW5nUmVzb3VyY2UoKTsKKyAgICBmYWxsYmFja1Jlc291cmNlLT5zZXRDb2xvcihmYWxs
YmFja0NvbG9yKTsKKyAgICBpZiAoZmFsbGJhY2tSZXNvdXJjZS0+YXBwbHlSZXNvdXJjZSh0aGlz
LCBzdHlsZSwgY29udGV4dCwgYXBwbHlNb2RlKSkKKyAgICAgICAgZmFsbGJhY2tSZXNvdXJjZS0+
cG9zdEFwcGx5UmVzb3VyY2UodGhpcywgY29udGV4dCwgYXBwbHlNb2RlLCB1c2VQYXRoKTsKK30K
Kwordm9pZCBSZW5kZXJTVkdTaGFwZTo6cGFpbnQoUGFpbnRJbmZvJiBwYWludEluZm8sIGNvbnN0
IEludFBvaW50JikKK3sKKyAgICBpZiAocGFpbnRJbmZvLmNvbnRleHQtPnBhaW50aW5nRGlzYWJs
ZWQoKSB8fCBzdHlsZSgpLT52aXNpYmlsaXR5KCkgPT0gSElEREVOIHx8IGlzRW1wdHkoKSkKKyAg
ICAgICAgcmV0dXJuOworICAgIEZsb2F0UmVjdCBib3VuZGluZ0JveCA9IHJlcGFpbnRSZWN0SW5M
b2NhbENvb3JkaW5hdGVzKCk7CisgICAgaWYgKCFTVkdSZW5kZXJTdXBwb3J0OjpwYWludEluZm9J
bnRlcnNlY3RzUmVwYWludFJlY3QoYm91bmRpbmdCb3gsIG1fbG9jYWxUcmFuc2Zvcm0sIHBhaW50
SW5mbykpCisgICAgICAgIHJldHVybjsKKyAgICBQYWludEluZm8gY2hpbGRQYWludEluZm8ocGFp
bnRJbmZvKTsKKyAgICBib29sIGRyYXdzT3V0bGluZSA9IHN0eWxlKCktPm91dGxpbmVXaWR0aCgp
ICYmIChjaGlsZFBhaW50SW5mby5waGFzZSA9PSBQYWludFBoYXNlT3V0bGluZSB8fCBjaGlsZFBh
aW50SW5mby5waGFzZSA9PSBQYWludFBoYXNlU2VsZk91dGxpbmUpOworICAgIGlmIChkcmF3c091
dGxpbmUgfHwgY2hpbGRQYWludEluZm8ucGhhc2UgPT0gUGFpbnRQaGFzZUZvcmVncm91bmQpIHsK
KyAgICAgICAgR3JhcGhpY3NDb250ZXh0U3RhdGVTYXZlciBzdGF0ZVNhdmVyKCpjaGlsZFBhaW50
SW5mby5jb250ZXh0KTsKKyAgICAgICAgY2hpbGRQYWludEluZm8uYXBwbHlUcmFuc2Zvcm0obV9s
b2NhbFRyYW5zZm9ybSk7CisKKyAgICAgICAgaWYgKGNoaWxkUGFpbnRJbmZvLnBoYXNlID09IFBh
aW50UGhhc2VGb3JlZ3JvdW5kKSB7CisgICAgICAgICAgICBQYWludEluZm8gc2F2ZWRJbmZvKGNo
aWxkUGFpbnRJbmZvKTsKKworICAgICAgICAgICAgaWYgKFNWR1JlbmRlclN1cHBvcnQ6OnByZXBh
cmVUb1JlbmRlclNWR0NvbnRlbnQodGhpcywgY2hpbGRQYWludEluZm8pKSB7CisgICAgICAgICAg
ICAgICAgY29uc3QgU1ZHUmVuZGVyU3R5bGUqIHN2Z1N0eWxlID0gc3R5bGUoKS0+c3ZnU3R5bGUo
KTsKKyAgICAgICAgICAgICAgICBpZiAoc3ZnU3R5bGUtPnNoYXBlUmVuZGVyaW5nKCkgPT0gU1Jf
Q1JJU1BFREdFUykKKyAgICAgICAgICAgICAgICAgICAgY2hpbGRQYWludEluZm8uY29udGV4dC0+
c2V0U2hvdWxkQW50aWFsaWFzKGZhbHNlKTsKKworICAgICAgICAgICAgICAgIGZpbGxBbmRTdHJv
a2VQYXRoKGNoaWxkUGFpbnRJbmZvLmNvbnRleHQpOworCisgICAgICAgICAgICAgICAgaWYgKHN2
Z1N0eWxlLT5oYXNNYXJrZXJzKCkpCisgICAgICAgICAgICAgICAgICAgIG1fbWFya2VyTGF5b3V0
SW5mby5kcmF3TWFya2VycyhjaGlsZFBhaW50SW5mbyk7CisgICAgICAgICAgICB9CisKKyAgICAg
ICAgICAgIFNWR1JlbmRlclN1cHBvcnQ6OmZpbmlzaFJlbmRlclNWR0NvbnRlbnQodGhpcywgY2hp
bGRQYWludEluZm8sIHNhdmVkSW5mby5jb250ZXh0KTsKKyAgICAgICAgfQorCisgICAgICAgIGlm
IChkcmF3c091dGxpbmUpCisgICAgICAgICAgICBwYWludE91dGxpbmUoY2hpbGRQYWludEluZm8u
Y29udGV4dCwgSW50UmVjdChib3VuZGluZ0JveCkpOworICAgIH0KK30KKworLy8gVGhpcyBtZXRo
b2QgaXMgY2FsbGVkIGZyb20gaW5zaWRlIHBhaW50T3V0bGluZSgpIHNpbmNlIHdlIGNhbGwgcGFp
bnRPdXRsaW5lKCkKKy8vIHdoaWxlIHRyYW5zZm9ybWVkIHRvIG91ciBjb29yZCBzeXN0ZW0sIHJl
dHVybiBsb2NhbCBjb29yZHMKK3ZvaWQgUmVuZGVyU1ZHU2hhcGU6OmFkZEZvY3VzUmluZ1JlY3Rz
KFZlY3RvcjxMYXlvdXRSZWN0PiYgcmVjdHMsIGNvbnN0IExheW91dFBvaW50JikKK3sKKyAgICBM
YXlvdXRSZWN0IHJlY3QgPSBlbmNsb3NpbmdMYXlvdXRSZWN0KHJlcGFpbnRSZWN0SW5Mb2NhbENv
b3JkaW5hdGVzKCkpOworICAgIGlmICghcmVjdC5pc0VtcHR5KCkpCisgICAgICAgIHJlY3RzLmFw
cGVuZChyZWN0KTsKK30KKworYm9vbCBSZW5kZXJTVkdTaGFwZTo6bm9kZUF0RmxvYXRQb2ludChj
b25zdCBIaXRUZXN0UmVxdWVzdCYgcmVxdWVzdCwgSGl0VGVzdFJlc3VsdCYgcmVzdWx0LCBjb25z
dCBGbG9hdFBvaW50JiBwb2ludEluUGFyZW50LCBIaXRUZXN0QWN0aW9uIGhpdFRlc3RBY3Rpb24p
Cit7CisgICAgLy8gV2Ugb25seSBkcmF3IGluIHRoZSBmb3Jncm91bmQgcGhhc2UsIHNvIHdlIG9u
bHkgaGl0LXRlc3QgdGhlbi4KKyAgICBpZiAoaGl0VGVzdEFjdGlvbiAhPSBIaXRUZXN0Rm9yZWdy
b3VuZCkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgRmxvYXRQb2ludCBsb2NhbFBvaW50
ID0gbV9sb2NhbFRyYW5zZm9ybS5pbnZlcnNlKCkubWFwUG9pbnQocG9pbnRJblBhcmVudCk7CisK
KyAgICBpZiAoIVNWR1JlbmRlclN1cHBvcnQ6OnBvaW50SW5DbGlwcGluZ0FyZWEodGhpcywgbG9j
YWxQb2ludCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIFBvaW50ZXJFdmVudHNIaXRS
dWxlcyBoaXRSdWxlcyhQb2ludGVyRXZlbnRzSGl0UnVsZXM6OlNWR19QQVRIX0hJVFRFU1RJTkcs
IHJlcXVlc3QsIHN0eWxlKCktPnBvaW50ZXJFdmVudHMoKSk7CisgICAgYm9vbCBpc1Zpc2libGUg
PSAoc3R5bGUoKS0+dmlzaWJpbGl0eSgpID09IFZJU0lCTEUpOworICAgIGlmIChpc1Zpc2libGUg
fHwgIWhpdFJ1bGVzLnJlcXVpcmVWaXNpYmxlKSB7CisgICAgICAgIGNvbnN0IFNWR1JlbmRlclN0
eWxlKiBzdmdTdHlsZSA9IHN0eWxlKCktPnN2Z1N0eWxlKCk7CisgICAgICAgIFdpbmRSdWxlIGZp
bGxSdWxlID0gc3ZnU3R5bGUtPmZpbGxSdWxlKCk7CisgICAgICAgIGlmIChyZXF1ZXN0LnN2Z0Ns
aXBDb250ZW50KCkpCisgICAgICAgICAgICBmaWxsUnVsZSA9IHN2Z1N0eWxlLT5jbGlwUnVsZSgp
OworICAgICAgICBpZiAoKGhpdFJ1bGVzLmNhbkhpdFN0cm9rZSAmJiAoc3ZnU3R5bGUtPmhhc1N0
cm9rZSgpIHx8ICFoaXRSdWxlcy5yZXF1aXJlU3Ryb2tlKSAmJiBzdHJva2VDb250YWlucyhsb2Nh
bFBvaW50LCBoaXRSdWxlcy5yZXF1aXJlU3Ryb2tlKSkKKyAgICAgICAgICAgIHx8IChoaXRSdWxl
cy5jYW5IaXRGaWxsICYmIChzdmdTdHlsZS0+aGFzRmlsbCgpIHx8ICFoaXRSdWxlcy5yZXF1aXJl
RmlsbCkgJiYgZmlsbENvbnRhaW5zKGxvY2FsUG9pbnQsIGhpdFJ1bGVzLnJlcXVpcmVGaWxsLCBm
aWxsUnVsZSkpKSB7CisgICAgICAgICAgICB1cGRhdGVIaXRUZXN0UmVzdWx0KHJlc3VsdCwgcm91
bmRlZExheW91dFBvaW50KGxvY2FsUG9pbnQpKTsKKyAgICAgICAgICAgIHJldHVybiB0cnVlOwor
ICAgICAgICB9CisgICAgfQorICAgIHJldHVybiBmYWxzZTsKK30KKworRmxvYXRSZWN0IFJlbmRl
clNWR1NoYXBlOjpjYWxjdWxhdGVNYXJrZXJCb3VuZHNJZk5lZWRlZCgpCit7CisgICAgU1ZHRWxl
bWVudCogc3ZnRWxlbWVudCA9IHN0YXRpY19jYXN0PFNWR0VsZW1lbnQqPihub2RlKCkpOworICAg
IEFTU0VSVChzdmdFbGVtZW50ICYmIHN2Z0VsZW1lbnQtPmRvY3VtZW50KCkpOworICAgIGlmICgh
c3ZnRWxlbWVudC0+aXNTdHlsZWQoKSkKKyAgICAgICAgcmV0dXJuIEZsb2F0UmVjdCgpOworCisg
ICAgU1ZHU3R5bGVkRWxlbWVudCogc3R5bGVkRWxlbWVudCA9IHN0YXRpY19jYXN0PFNWR1N0eWxl
ZEVsZW1lbnQqPihzdmdFbGVtZW50KTsKKyAgICBpZiAoIXN0eWxlZEVsZW1lbnQtPnN1cHBvcnRz
TWFya2VycygpKQorICAgICAgICByZXR1cm4gRmxvYXRSZWN0KCk7CisKKyAgICBBU1NFUlQoc3R5
bGUoKS0+c3ZnU3R5bGUoKS0+aGFzTWFya2VycygpKTsKKworICAgIFNWR1Jlc291cmNlcyogcmVz
b3VyY2VzID0gU1ZHUmVzb3VyY2VzQ2FjaGU6OmNhY2hlZFJlc291cmNlc0ZvclJlbmRlck9iamVj
dCh0aGlzKTsKKyAgICBpZiAoIXJlc291cmNlcykKKyAgICAgICAgcmV0dXJuIEZsb2F0UmVjdCgp
OworCisgICAgUmVuZGVyU1ZHUmVzb3VyY2VNYXJrZXIqIG1hcmtlclN0YXJ0ID0gcmVzb3VyY2Vz
LT5tYXJrZXJTdGFydCgpOworICAgIFJlbmRlclNWR1Jlc291cmNlTWFya2VyKiBtYXJrZXJNaWQg
PSByZXNvdXJjZXMtPm1hcmtlck1pZCgpOworICAgIFJlbmRlclNWR1Jlc291cmNlTWFya2VyKiBt
YXJrZXJFbmQgPSByZXNvdXJjZXMtPm1hcmtlckVuZCgpOworICAgIGlmICghbWFya2VyU3RhcnQg
JiYgIW1hcmtlck1pZCAmJiAhbWFya2VyRW5kKQorICAgICAgICByZXR1cm4gRmxvYXRSZWN0KCk7
CisKKyAgICByZXR1cm4gbV9tYXJrZXJMYXlvdXRJbmZvLmNhbGN1bGF0ZUJvdW5kYXJpZXMobWFy
a2VyU3RhcnQsIG1hcmtlck1pZCwgbWFya2VyRW5kLCBzdHJva2VXaWR0aCgpLCBwYXRoKCkpOwor
fQorCit2b2lkIFJlbmRlclNWR1NoYXBlOjp1cGRhdGVDYWNoZWRCb3VuZGFyaWVzKCkKK3sKKyAg
ICBpZiAoaXNFbXB0eSgpKSB7CisgICAgICAgIG1fZmlsbEJvdW5kaW5nQm94ID0gRmxvYXRSZWN0
KCk7CisgICAgICAgIG1fc3Ryb2tlQW5kTWFya2VyQm91bmRpbmdCb3ggPSBGbG9hdFJlY3QoKTsK
KyAgICAgICAgbV9yZXBhaW50Qm91bmRpbmdCb3ggPSBGbG9hdFJlY3QoKTsKKyAgICAgICAgcmV0
dXJuOworICAgIH0KKworICAgIC8vIENhY2hlIF91bmNsaXBwZWRfIGZpbGwgYm91bmRpbmcgYm94
LCB1c2VkIGZvciBjYWxjdWxhdGlvbnMgaW4gcmVzb3VyY2VzCisgICAgbV9maWxsQm91bmRpbmdC
b3ggPSBvYmplY3RCb3VuZGluZ0JveCgpOworCisgICAgLy8gU3BlYygxMS40KTogQW55IHplcm8g
bGVuZ3RoIHN1YnBhdGggc2hhbGwgbm90IGJlIHN0cm9rZWQgaWYgdGhlIOKAmHN0cm9rZS1saW5l
Y2Fw4oCZIHByb3BlcnR5IGhhcyBhIHZhbHVlIG9mIGJ1dHQKKyAgICAvLyBidXQgc2hhbGwgYmUg
c3Ryb2tlZCBpZiB0aGUg4oCYc3Ryb2tlLWxpbmVjYXDigJkgcHJvcGVydHkgaGFzIGEgdmFsdWUg
b2Ygcm91bmQgb3Igc3F1YXJlCisgICAgaWYgKHNob3VsZFN0cm9rZVplcm9MZW5ndGhTdWJwYXRo
KCkpIHsKKyAgICAgICAgbV9zdHJva2VBbmRNYXJrZXJCb3VuZGluZ0JveCA9IHplcm9MZW5ndGhT
dWJwYXRoUmVjdCgpOworICAgICAgICAvLyBDYWNoZSBzbWFsbGVzdCBwb3NzaWJsZSByZXBhaW50
IHJlY3RhbmdsZQorICAgICAgICBtX3JlcGFpbnRCb3VuZGluZ0JveCA9IG1fc3Ryb2tlQW5kTWFy
a2VyQm91bmRpbmdCb3g7CisgICAgICAgIFNWR1JlbmRlclN1cHBvcnQ6OmludGVyc2VjdFJlcGFp
bnRSZWN0V2l0aFJlc291cmNlcyh0aGlzLCBtX3JlcGFpbnRCb3VuZGluZ0JveCk7CisgICAgICAg
IHJldHVybjsKKyAgICB9CisKKyAgICAvLyBDYWNoZSBfdW5jbGlwcGVkXyBzdHJva2UgYm91bmRp
bmcgYm94LCB1c2VkIGZvciBjYWxjdWxhdGlvbnMgaW4gcmVzb3VyY2VzIChpbmNsdWRlcyBtYXJr
ZXIgYm91bmRhcmllcykKKyAgICBtX3N0cm9rZUFuZE1hcmtlckJvdW5kaW5nQm94ID0gbV9maWxs
Qm91bmRpbmdCb3g7CisKKyAgICBjb25zdCBTVkdSZW5kZXJTdHlsZSogc3ZnU3R5bGUgPSBzdHls
ZSgpLT5zdmdTdHlsZSgpOworICAgIGlmIChzdmdTdHlsZS0+aGFzU3Ryb2tlKCkpCisgICAgICAg
IG1fc3Ryb2tlQW5kTWFya2VyQm91bmRpbmdCb3gudW5pdGUoc3Ryb2tlQm91bmRpbmdCb3goKSk7
CisKKyAgICBpZiAoaXNTVkdQYXRoKCkpIHsKKyAgICAgICAgaWYgKHN2Z1N0eWxlLT5oYXNNYXJr
ZXJzKCkpIHsKKyAgICAgICAgICAgIEZsb2F0UmVjdCBtYXJrZXJCb3VuZHMgPSBjYWxjdWxhdGVN
YXJrZXJCb3VuZHNJZk5lZWRlZCgpOworICAgICAgICAgICAgaWYgKCFtYXJrZXJCb3VuZHMuaXNF
bXB0eSgpKQorICAgICAgICAgICAgICAgIG1fc3Ryb2tlQW5kTWFya2VyQm91bmRpbmdCb3gudW5p
dGUobWFya2VyQm91bmRzKTsKKyAgICAgICAgfQorICAgIH0KKyAgICAvLyBDYWNoZSBzbWFsbGVz
dCBwb3NzaWJsZSByZXBhaW50IHJlY3RhbmdsZQorICAgIG1fcmVwYWludEJvdW5kaW5nQm94ID0g
bV9zdHJva2VBbmRNYXJrZXJCb3VuZGluZ0JveDsKKyAgICBTVkdSZW5kZXJTdXBwb3J0OjppbnRl
cnNlY3RSZXBhaW50UmVjdFdpdGhSZXNvdXJjZXModGhpcywgbV9yZXBhaW50Qm91bmRpbmdCb3gp
OworfQorCitmbG9hdCBSZW5kZXJTVkdTaGFwZTo6c3Ryb2tlV2lkdGgoKSBjb25zdAoreworICAg
IFNWR0VsZW1lbnQqIHN2Z0VsZW1lbnQgPSBzdGF0aWNfY2FzdDxTVkdFbGVtZW50Kj4obm9kZSgp
KTsKKyAgICByZXR1cm4gc3R5bGUoKS0+c3ZnU3R5bGUoKS0+c3Ryb2tlV2lkdGgoKS52YWx1ZShz
dmdFbGVtZW50KTsKK30KKworfQorCisjZW5kaWYgLy8gRU5BQkxFKFNWRykKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHU2hhcGUuaCBiL1NvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHU2hhcGUuaApuZXcgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAwMDAwMDAwLi5kNTU2MzliCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdTaGFwZS5oCkBAIC0wLDAgKzEsMTY1IEBACisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1LCAyMDA3IE5pa29sYXMgWmltbWVybWFubiA8emlt
bWVybWFubkBrZGUub3JnPgorICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1IFJvYiBCdWlzIDxi
dWlzQGtkZS5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDUgRXJpYyBTZWlkZWwgPGVyaWNAd2Vi
a2l0Lm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAwNiBBcHBsZSBDb21wdXRlciwgSW5jCisgKiBD
b3B5cmlnaHQgKEMpIDIwMDkgR29vZ2xlLCBJbmMuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgUmVu
YXRhIEhvZG92YW4gPHJlbmlAd2Via2l0Lm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAxMSBVbml2
ZXJzaXR5IG9mIFN6ZWdlZAorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5
b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVy
bXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxp
c2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24g
MiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4K
KyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3
aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVu
IHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFs
IFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZl
IHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5z
ZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4g
IElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4s
IDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEz
MDEsIFVTQS4KKyAqLworCisjaWZuZGVmIFJlbmRlclNWR1NoYXBlX2gKKyNkZWZpbmUgUmVuZGVy
U1ZHU2hhcGVfaAorCisjaWYgRU5BQkxFKFNWRykKKyNpbmNsdWRlICJBZmZpbmVUcmFuc2Zvcm0u
aCIKKyNpbmNsdWRlICJGbG9hdFJlY3QuaCIKKyNpbmNsdWRlICJSZW5kZXJTVkdNb2RlbE9iamVj
dC5oIgorI2luY2x1ZGUgIlNWR01hcmtlckxheW91dEluZm8uaCIKKyNpbmNsdWRlICJTdHJva2VT
dHlsZUFwcGxpZXIuaCIKKyNpbmNsdWRlIDx3dGYvT3duUHRyLmg+CisKK25hbWVzcGFjZSBXZWJD
b3JlIHsKKworY2xhc3MgRmxvYXRQb2ludDsKK2NsYXNzIEdyYXBoaWNzQ29udGV4dFN0YXRlU2F2
ZXI7CitjbGFzcyBSZW5kZXJTVkdDb250YWluZXI7CitjbGFzcyBSZW5kZXJTVkdQYXRoOworY2xh
c3MgU1ZHU3R5bGVkVHJhbnNmb3JtYWJsZUVsZW1lbnQ7CisKK2VudW0gUG9pbnRMb2NhdGlvbiB7
CisgICAgSW5zaWRlU2hhcGUsCisgICAgT3V0c2lkZVNoYXBlLAorICAgIE9uU3Ryb2tlCit9Owor
CitjbGFzcyBCb3VuZGluZ1JlY3RTdHJva2VTdHlsZUFwcGxpZXIgOiBwdWJsaWMgU3Ryb2tlU3R5
bGVBcHBsaWVyIHsKK3B1YmxpYzoKKyAgICBCb3VuZGluZ1JlY3RTdHJva2VTdHlsZUFwcGxpZXIo
Y29uc3QgUmVuZGVyT2JqZWN0KiBvYmplY3QsIFJlbmRlclN0eWxlKiBzdHlsZSkKKyAgICAgICAg
OiBtX29iamVjdChvYmplY3QpCisgICAgICAgICwgbV9zdHlsZShzdHlsZSkKKyAgICB7CisgICAg
ICAgIEFTU0VSVChzdHlsZSk7CisgICAgICAgIEFTU0VSVChvYmplY3QpOworICAgIH0KKworICAg
IHZvaWQgc3Ryb2tlU3R5bGUoR3JhcGhpY3NDb250ZXh0KiBnYykKKyAgICB7CisgICAgICAgIFNW
R1JlbmRlclN1cHBvcnQ6OmFwcGx5U3Ryb2tlU3R5bGVUb0NvbnRleHQoZ2MsIG1fc3R5bGUsIG1f
b2JqZWN0KTsKKyAgICB9CisKK3ByaXZhdGU6CisgICAgY29uc3QgUmVuZGVyT2JqZWN0KiBtX29i
amVjdDsKKyAgICBSZW5kZXJTdHlsZSogbV9zdHlsZTsKK307CisKK2NsYXNzIFJlbmRlclNWR1No
YXBlIDogcHVibGljIFJlbmRlclNWR01vZGVsT2JqZWN0IHsKK3B1YmxpYzoKKyAgICBleHBsaWNp
dCBSZW5kZXJTVkdTaGFwZShTVkdTdHlsZWRUcmFuc2Zvcm1hYmxlRWxlbWVudCopOworICAgIHZp
cnR1YWwgflJlbmRlclNWR1NoYXBlKCk7CisKKyAgICB2b2lkIHNldE5lZWRzU2hhcGVVcGRhdGUo
KSB7IG1fbmVlZHNTaGFwZVVwZGF0ZSA9IHRydWU7IH0KKyAgICB2aXJ0dWFsIHZvaWQgc2V0TmVl
ZHNCb3VuZGFyaWVzVXBkYXRlKCkgeyBtX25lZWRzQm91bmRhcmllc1VwZGF0ZSA9IHRydWU7IH0K
KyAgICB2aXJ0dWFsIHZvaWQgc2V0TmVlZHNUcmFuc2Zvcm1VcGRhdGUoKSB7IG1fbmVlZHNUcmFu
c2Zvcm1VcGRhdGUgPSB0cnVlOyB9CisgICAgdmlydHVhbCB2b2lkIGZpbGxTaGFwZShHcmFwaGlj
c0NvbnRleHQqKTsKKyAgICB2aXJ0dWFsIHZvaWQgc3Ryb2tlU2hhcGUoR3JhcGhpY3NDb250ZXh0
Kik7CisKK3ByaXZhdGU6CisgICAgLy8gSGl0LWRldGVjdGlvbiBzZXBlcmF0ZWQgZm9yIHRoZSBm
aWxsIGFuZCB0aGUgc3Ryb2tlCisgICAgYm9vbCBmaWxsQ29udGFpbnMoY29uc3QgRmxvYXRQb2lu
dCYsIGJvb2wgcmVxdWlyZXNGaWxsID0gdHJ1ZSwgV2luZFJ1bGUgZmlsbFJ1bGUgPSBSVUxFX05P
TlpFUk8pOworICAgIGJvb2wgc3Ryb2tlQ29udGFpbnMoY29uc3QgRmxvYXRQb2ludCYsIGJvb2wg
cmVxdWlyZXNTdHJva2UgPSB0cnVlKTsKKworICAgIHZpcnR1YWwgRmxvYXRSZWN0IHN0cm9rZUJv
dW5kaW5nQm94KCkgY29uc3QgeyByZXR1cm4gbV9zdHJva2VBbmRNYXJrZXJCb3VuZGluZ0JveDsg
fQorICAgIHZpcnR1YWwgRmxvYXRSZWN0IHJlcGFpbnRSZWN0SW5Mb2NhbENvb3JkaW5hdGVzKCkg
Y29uc3QgeyByZXR1cm4gbV9yZXBhaW50Qm91bmRpbmdCb3g7IH0KKyAgICB2aXJ0dWFsIGNvbnN0
IEFmZmluZVRyYW5zZm9ybSYgbG9jYWxUb1BhcmVudFRyYW5zZm9ybSgpIGNvbnN0IHsgcmV0dXJu
IG1fbG9jYWxUcmFuc2Zvcm07IH0KKworICAgIHZpcnR1YWwgYm9vbCBpc1NWR1NoYXBlKCkgY29u
c3QgeyByZXR1cm4gdHJ1ZTsgfQorICAgIHZpcnR1YWwgY29uc3QgY2hhciogcmVuZGVyTmFtZSgp
IGNvbnN0IHsgcmV0dXJuICJSZW5kZXJTVkdTaGFwZSI7IH0KKworICAgIHZpcnR1YWwgdm9pZCBs
YXlvdXQoKTsKKyAgICB2aXJ0dWFsIHZvaWQgcGFpbnQoUGFpbnRJbmZvJiwgY29uc3QgTGF5b3V0
UG9pbnQmKTsKKyAgICB2aXJ0dWFsIHZvaWQgYWRkRm9jdXNSaW5nUmVjdHMoVmVjdG9yPExheW91
dFJlY3Q+JiwgY29uc3QgTGF5b3V0UG9pbnQmKTsKKworICAgIHZpcnR1YWwgYm9vbCBub2RlQXRG
bG9hdFBvaW50KGNvbnN0IEhpdFRlc3RSZXF1ZXN0JiwgSGl0VGVzdFJlc3VsdCYsIGNvbnN0IEZs
b2F0UG9pbnQmIHBvaW50SW5QYXJlbnQsIEhpdFRlc3RBY3Rpb24pOworCisgICAgRmxvYXRSZWN0
IGNhbGN1bGF0ZU1hcmtlckJvdW5kc0lmTmVlZGVkKCk7CisgICAgdm9pZCB1cGRhdGVDYWNoZWRC
b3VuZGFyaWVzKCk7CisKKyAgICB2b2lkIHNldHVwU3F1YXJlQ2FwUGF0aChQYXRoKiYgdXNlUGF0
aCwgaW50JiBhcHBseU1vZGUpOworICAgIGJvb2wgc2V0dXBOb25TY2FsaW5nU3Ryb2tlUGF0aChQ
YXRoKiYgdXNlUGF0aCwgR3JhcGhpY3NDb250ZXh0U3RhdGVTYXZlciYpOworICAgIGJvb2wgc2hv
dWxkU3Ryb2tlWmVyb0xlbmd0aFN1YnBhdGgoKSBjb25zdDsKKyAgICBGbG9hdFJlY3QgemVyb0xl
bmd0aFN1YnBhdGhSZWN0KCkgY29uc3Q7CisKK3Byb3RlY3RlZDoKKyAgICB2aXJ0dWFsIHZvaWQg
Y3JlYXRlU2hhcGUoKTsKKyAgICB2aXJ0dWFsIGJvb2wgaXNFbXB0eSgpIGNvbnN0OworICAgIHZp
cnR1YWwgRmxvYXRSZWN0IG9iamVjdEJvdW5kaW5nQm94KCkgY29uc3Q7CisgICAgdmlydHVhbCBG
bG9hdFJlY3Qgc3Ryb2tlQm91bmRpbmdCb3goKTsKKyAgICB2aXJ0dWFsIGJvb2wgc3Ryb2tlQ29u
dGFpbnNTbG93Q2FzZShjb25zdCBGbG9hdFBvaW50Jik7CisgICAgdmlydHVhbCBib29sIGZpbGxD
b250YWluc1Nsb3dDYXNlKGNvbnN0IEZsb2F0UG9pbnQmLCBjb25zdCBXaW5kUnVsZSYpIGNvbnN0
OworICAgIGZsb2F0IHN0cm9rZVdpZHRoKCkgY29uc3Q7CisKKyAgICBQYXRoJiBwYXRoKCkgY29u
c3QKKyAgICB7CisgICAgICAgIEFTU0VSVChtX3BhdGguZ2V0KCkpOworICAgICAgICByZXR1cm4g
Km1fcGF0aDsKKyAgICB9CisKKyAgICBQYXRoKiBwYXRoUHRyKCkgY29uc3QKKyAgICB7CisgICAg
ICAgIEFTU0VSVChtX3BhdGguZ2V0KCkpOworICAgICAgICByZXR1cm4gbV9wYXRoLmdldCgpOwor
ICAgIH07CisKKyAgICBib29sIGhhc1BhdGgoKSBjb25zdCB7IHJldHVybiBtX3BhdGguZ2V0KCk7
IH0KKworcHJpdmF0ZToKKyAgICB2aXJ0dWFsIEFmZmluZVRyYW5zZm9ybSBsb2NhbFRyYW5zZm9y
bSgpIGNvbnN0IHsgcmV0dXJuIG1fbG9jYWxUcmFuc2Zvcm07IH0KKyAgICB2b2lkIGZpbGxBbmRT
dHJva2VQYXRoKEdyYXBoaWNzQ29udGV4dCopOworCisgICAgYm9vbCBtX25lZWRzQm91bmRhcmll
c1VwZGF0ZSA6IDE7CisgICAgYm9vbCBtX25lZWRzU2hhcGVVcGRhdGUgOiAxOworICAgIGJvb2wg
bV9uZWVkc1RyYW5zZm9ybVVwZGF0ZSA6IDE7CisKKyAgICBGbG9hdFJlY3QgbV9maWxsQm91bmRp
bmdCb3g7CisgICAgRmxvYXRSZWN0IG1fc3Ryb2tlQW5kTWFya2VyQm91bmRpbmdCb3g7CisgICAg
RmxvYXRSZWN0IG1fcmVwYWludEJvdW5kaW5nQm94OworICAgIFNWR01hcmtlckxheW91dEluZm8g
bV9tYXJrZXJMYXlvdXRJbmZvOworICAgIEFmZmluZVRyYW5zZm9ybSBtX2xvY2FsVHJhbnNmb3Jt
OworICAgIE93blB0cjxQYXRoPiBtX3BhdGg7Cit9OworCitpbmxpbmUgUmVuZGVyU1ZHU2hhcGUq
IHRvUmVuZGVyU1ZHU2hhcGUoUmVuZGVyT2JqZWN0KiBvYmplY3QpCit7CisgICAgQVNTRVJUKCFv
YmplY3QgfHwgb2JqZWN0LT5pc1NWR1NoYXBlKCkpOworICAgIHJldHVybiBzdGF0aWNfY2FzdDxS
ZW5kZXJTVkdTaGFwZSo+KG9iamVjdCk7Cit9CisKK2lubGluZSBjb25zdCBSZW5kZXJTVkdTaGFw
ZSogdG9SZW5kZXJTVkdTaGFwZShjb25zdCBSZW5kZXJPYmplY3QqIG9iamVjdCkKK3sKKyAgICBB
U1NFUlQoIW9iamVjdCB8fCBvYmplY3QtPmlzU1ZHU2hhcGUoKSk7CisgICAgcmV0dXJuIHN0YXRp
Y19jYXN0PGNvbnN0IFJlbmRlclNWR1NoYXBlKj4ob2JqZWN0KTsKK30KKworLy8gVGhpcyB3aWxs
IGNhdGNoIGFueW9uZSBkb2luZyBhbiB1bm5lY2Vzc2FyeSBjYXN0Lgordm9pZCB0b1JlbmRlclNW
R1NoYXBlKGNvbnN0IFJlbmRlclNWR1NoYXBlKik7CisKK30KKworI2VuZGlmIC8vIEVOQUJMRShT
VkcpCisjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZH
SW5saW5lVGV4dEJveC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR0lubGlu
ZVRleHRCb3guY3BwCmluZGV4IGMxYzVhZmEuLjczZDZjNDMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHSW5saW5lVGV4dEJveC5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdJbmxpbmVUZXh0Qm94LmNwcApAQCAtMzc3LDcgKzM3Nyw3
IEBAIHZvaWQgU1ZHSW5saW5lVGV4dEJveDo6cmVsZWFzZVBhaW50aW5nUmVzb3VyY2UoR3JhcGhp
Y3NDb250ZXh0KiYgY29udGV4dCwgY29uc3QKICAgICBSZW5kZXJPYmplY3QqIHBhcmVudFJlbmRl
cmVyID0gcGFyZW50KCktPnJlbmRlcmVyKCk7CiAgICAgQVNTRVJUKHBhcmVudFJlbmRlcmVyKTsK
IAotICAgIG1fcGFpbnRpbmdSZXNvdXJjZS0+cG9zdEFwcGx5UmVzb3VyY2UocGFyZW50UmVuZGVy
ZXIsIGNvbnRleHQsIG1fcGFpbnRpbmdSZXNvdXJjZU1vZGUsIHBhdGgpOworICAgIG1fcGFpbnRp
bmdSZXNvdXJjZS0+cG9zdEFwcGx5UmVzb3VyY2Uoc3RhdGljX2Nhc3Q8UmVuZGVyU1ZHU2hhcGUq
PihwYXJlbnRSZW5kZXJlciksIGNvbnRleHQsIG1fcGFpbnRpbmdSZXNvdXJjZU1vZGUsIHBhdGgp
OwogICAgIG1fcGFpbnRpbmdSZXNvdXJjZSA9IDA7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHUmVuZGVyU3VwcG9ydC5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvc3ZnL1NWR1JlbmRlclN1cHBvcnQuY3BwCmluZGV4IDAwNzkyMTkuLjU1NTk1
YWYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHUmVuZGVyU3Vw
cG9ydC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdSZW5kZXJTdXBw
b3J0LmNwcApAQCAtMTUzLDcgKzE1Myw3IEBAIHZvaWQgU1ZHUmVuZGVyU3VwcG9ydDo6ZmluaXNo
UmVuZGVyU1ZHQ29udGVudChSZW5kZXJPYmplY3QqIG9iamVjdCwgUGFpbnRJbmZvJiBwCiAgICAg
U1ZHUmVzb3VyY2VzKiByZXNvdXJjZXMgPSBTVkdSZXNvdXJjZXNDYWNoZTo6Y2FjaGVkUmVzb3Vy
Y2VzRm9yUmVuZGVyT2JqZWN0KG9iamVjdCk7CiAgICAgaWYgKHJlc291cmNlcykgewogICAgICAg
ICBpZiAoUmVuZGVyU1ZHUmVzb3VyY2VGaWx0ZXIqIGZpbHRlciA9IHJlc291cmNlcy0+ZmlsdGVy
KCkpIHsKLSAgICAgICAgICAgIGZpbHRlci0+cG9zdEFwcGx5UmVzb3VyY2Uob2JqZWN0LCBwYWlu
dEluZm8uY29udGV4dCwgQXBwbHlUb0RlZmF1bHRNb2RlLCAvKiBwYXRoICovMCk7CisgICAgICAg
ICAgICBmaWx0ZXItPnBvc3RBcHBseVJlc291cmNlKHN0YXRpY19jYXN0PFJlbmRlclNWR1NoYXBl
Kj4ob2JqZWN0KSwgcGFpbnRJbmZvLmNvbnRleHQsIEFwcGx5VG9EZWZhdWx0TW9kZSwgMCk7CiAg
ICAgICAgICAgICBwYWludEluZm8uY29udGV4dCA9IHNhdmVkQ29udGV4dDsKICAgICAgICAgfQog
ICAgIH0KQEAgLTIyNSw5ICsyMjUsOSBAQCB2b2lkIFNWR1JlbmRlclN1cHBvcnQ6OmxheW91dENo
aWxkcmVuKFJlbmRlck9iamVjdCogc3RhcnQsIGJvb2wgc2VsZk5lZWRzTGF5b3V0KQogICAgICAg
ICAgICAgLy8gV2hlbiBzZWxmTmVlZHNMYXlvdXQgaXMgZmFsc2UgYW5kIHRoZSBsYXlvdXQgc2l6
ZSBjaGFuZ2VkLCB3ZSBoYXZlIHRvIGNoZWNrIHdoZXRoZXIgdGhpcyBjaGlsZCB1c2VzIHJlbGF0
aXZlIGxlbmd0aHMKICAgICAgICAgICAgIGlmIChTVkdFbGVtZW50KiBlbGVtZW50ID0gY2hpbGQt
Pm5vZGUoKS0+aXNTVkdFbGVtZW50KCkgPyBzdGF0aWNfY2FzdDxTVkdFbGVtZW50Kj4oY2hpbGQt
Pm5vZGUoKSkgOiAwKSB7CiAgICAgICAgICAgICAgICAgaWYgKGVsZW1lbnQtPmlzU3R5bGVkKCkg
JiYgc3RhdGljX2Nhc3Q8U1ZHU3R5bGVkRWxlbWVudCo+KGVsZW1lbnQpLT5oYXNSZWxhdGl2ZUxl
bmd0aHMoKSkgewotICAgICAgICAgICAgICAgICAgICAvLyBXaGVuIHRoZSBsYXlvdXQgc2l6ZSBj
aGFuZ2VkIGFuZCB3aGVuIHVzaW5nIHJlbGF0aXZlIHZhbHVlcyB0ZWxsIHRoZSBSZW5kZXJTVkdQ
YXRoIHRvIHVwZGF0ZSBpdHMgUGF0aCBvYmplY3QKLSAgICAgICAgICAgICAgICAgICAgaWYgKGNo
aWxkLT5pc1NWR1BhdGgoKSkKLSAgICAgICAgICAgICAgICAgICAgICAgIHRvUmVuZGVyU1ZHUGF0
aChjaGlsZCktPnNldE5lZWRzUGF0aFVwZGF0ZSgpOworICAgICAgICAgICAgICAgICAgICAvLyBX
aGVuIHRoZSBsYXlvdXQgc2l6ZSBjaGFuZ2VkIGFuZCB3aGVuIHVzaW5nIHJlbGF0aXZlIHZhbHVl
cyB0ZWxsIHRoZSBSZW5kZXJTVkdTaGFwZSB0byB1cGRhdGUgaXRzIHNoYXBlIG9iamVjdAorICAg
ICAgICAgICAgICAgICAgICBpZiAoY2hpbGQtPmlzU1ZHU2hhcGUoKSkKKyAgICAgICAgICAgICAg
ICAgICAgICAgIHRvUmVuZGVyU1ZHU2hhcGUoY2hpbGQpLT5zZXROZWVkc1NoYXBlVXBkYXRlKCk7
CiAKICAgICAgICAgICAgICAgICAgICAgbmVlZHNMYXlvdXQgPSB0cnVlOwogICAgICAgICAgICAg
ICAgIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHUmVuZGVy
VHJlZUFzVGV4dC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR1JlbmRlclRy
ZWVBc1RleHQuY3BwCmluZGV4IGExNjI5NjkuLmQxYWQ3MmEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHUmVuZGVyVHJlZUFzVGV4dC5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdSZW5kZXJUcmVlQXNUZXh0LmNwcApAQCAtNTUsNiAr
NTUsNyBAQAogI2luY2x1ZGUgIlJlbmRlclNWR1Jlc291cmNlUmFkaWFsR3JhZGllbnQuaCIKICNp
bmNsdWRlICJSZW5kZXJTVkdSZXNvdXJjZVNvbGlkQ29sb3IuaCIKICNpbmNsdWRlICJSZW5kZXJT
VkdSb290LmgiCisjaW5jbHVkZSAiUmVuZGVyU1ZHU2hhcGUuaCIKICNpbmNsdWRlICJSZW5kZXJT
VkdUZXh0LmgiCiAjaW5jbHVkZSAiUmVuZGVyVHJlZUFzVGV4dC5oIgogI2luY2x1ZGUgIlNWR0Np
cmNsZUVsZW1lbnQuaCIKQEAgLTI4OSwxOCArMjkwLDE4IEBAIHN0YXRpYyB2b2lkIHdyaXRlU3R5
bGUoVGV4dFN0cmVhbSYgdHMsIGNvbnN0IFJlbmRlck9iamVjdCYgb2JqZWN0KQogICAgICAgICB3
cml0ZU5hbWVWYWx1ZVBhaXIodHMsICJ0cmFuc2Zvcm0iLCBvYmplY3QubG9jYWxUcmFuc2Zvcm0o
KSk7CiAgICAgd3JpdGVJZk5vdERlZmF1bHQodHMsICJpbWFnZSByZW5kZXJpbmciLCBzdHlsZS0+
aW1hZ2VSZW5kZXJpbmcoKSwgUmVuZGVyU3R5bGU6OmluaXRpYWxJbWFnZVJlbmRlcmluZygpKTsK
ICAgICB3cml0ZUlmTm90RGVmYXVsdCh0cywgIm9wYWNpdHkiLCBzdHlsZS0+b3BhY2l0eSgpLCBS
ZW5kZXJTdHlsZTo6aW5pdGlhbE9wYWNpdHkoKSk7Ci0gICAgaWYgKG9iamVjdC5pc1NWR1BhdGgo
KSkgewotICAgICAgICBjb25zdCBSZW5kZXJTVkdQYXRoJiBwYXRoID0gc3RhdGljX2Nhc3Q8Y29u
c3QgUmVuZGVyU1ZHUGF0aCY+KG9iamVjdCk7Ci0gICAgICAgIEFTU0VSVChwYXRoLm5vZGUoKSk7
Ci0gICAgICAgIEFTU0VSVChwYXRoLm5vZGUoKS0+aXNTVkdFbGVtZW50KCkpOworICAgIGlmIChv
YmplY3QuaXNTVkdTaGFwZSgpKSB7CisgICAgICAgIGNvbnN0IFJlbmRlclNWR1NoYXBlJiBzaGFw
ZSA9IHN0YXRpY19jYXN0PGNvbnN0IFJlbmRlclNWR1NoYXBlJj4ob2JqZWN0KTsKKyAgICAgICAg
QVNTRVJUKHNoYXBlLm5vZGUoKSk7CisgICAgICAgIEFTU0VSVChzaGFwZS5ub2RlKCktPmlzU1ZH
RWxlbWVudCgpKTsKIAogICAgICAgICBDb2xvciBmYWxsYmFja0NvbG9yOwotICAgICAgICBpZiAo
UmVuZGVyU1ZHUmVzb3VyY2UqIHN0cm9rZVBhaW50aW5nUmVzb3VyY2UgPSBSZW5kZXJTVkdSZXNv
dXJjZTo6c3Ryb2tlUGFpbnRpbmdSZXNvdXJjZShjb25zdF9jYXN0PFJlbmRlclNWR1BhdGgqPigm
cGF0aCksIHBhdGguc3R5bGUoKSwgZmFsbGJhY2tDb2xvcikpIHsKKyAgICAgICAgaWYgKFJlbmRl
clNWR1Jlc291cmNlKiBzdHJva2VQYWludGluZ1Jlc291cmNlID0gUmVuZGVyU1ZHUmVzb3VyY2U6
OnN0cm9rZVBhaW50aW5nUmVzb3VyY2UoY29uc3RfY2FzdDxSZW5kZXJTVkdTaGFwZSo+KCZzaGFw
ZSksIHNoYXBlLnN0eWxlKCksIGZhbGxiYWNrQ29sb3IpKSB7CiAgICAgICAgICAgICBUZXh0U3Ry
ZWFtU2VwYXJhdG9yIHMoIiAiKTsKICAgICAgICAgICAgIHRzIDw8ICIgW3N0cm9rZT17IiA8PCBz
OwogICAgICAgICAgICAgd3JpdGVTVkdQYWludGluZ1Jlc291cmNlKHRzLCBzdHJva2VQYWludGlu
Z1Jlc291cmNlKTsKIAotICAgICAgICAgICAgU1ZHRWxlbWVudCogZWxlbWVudCA9IHN0YXRpY19j
YXN0PFNWR0VsZW1lbnQqPihwYXRoLm5vZGUoKSk7CisgICAgICAgICAgICBTVkdFbGVtZW50KiBl
bGVtZW50ID0gc3RhdGljX2Nhc3Q8U1ZHRWxlbWVudCo+KHNoYXBlLm5vZGUoKSk7CiAgICAgICAg
ICAgICBkb3VibGUgZGFzaE9mZnNldCA9IHN2Z1N0eWxlLT5zdHJva2VEYXNoT2Zmc2V0KCkudmFs
dWUoZWxlbWVudCk7CiAgICAgICAgICAgICBkb3VibGUgc3Ryb2tlV2lkdGggPSBzdmdTdHlsZS0+
c3Ryb2tlV2lkdGgoKS52YWx1ZShlbGVtZW50KTsKICAgICAgICAgICAgIGNvbnN0IFZlY3RvcjxT
VkdMZW5ndGg+JiBkYXNoZXMgPSBzdmdTdHlsZS0+c3Ryb2tlRGFzaEFycmF5KCk7CkBAIC0zMjIs
NyArMzIzLDcgQEAgc3RhdGljIHZvaWQgd3JpdGVTdHlsZShUZXh0U3RyZWFtJiB0cywgY29uc3Qg
UmVuZGVyT2JqZWN0JiBvYmplY3QpCiAgICAgICAgICAgICB0cyA8PCAifV0iOwogICAgICAgICB9
CiAKLSAgICAgICAgaWYgKFJlbmRlclNWR1Jlc291cmNlKiBmaWxsUGFpbnRpbmdSZXNvdXJjZSA9
IFJlbmRlclNWR1Jlc291cmNlOjpmaWxsUGFpbnRpbmdSZXNvdXJjZShjb25zdF9jYXN0PFJlbmRl
clNWR1BhdGgqPigmcGF0aCksIHBhdGguc3R5bGUoKSwgZmFsbGJhY2tDb2xvcikpIHsKKyAgICAg
ICAgaWYgKFJlbmRlclNWR1Jlc291cmNlKiBmaWxsUGFpbnRpbmdSZXNvdXJjZSA9IFJlbmRlclNW
R1Jlc291cmNlOjpmaWxsUGFpbnRpbmdSZXNvdXJjZShjb25zdF9jYXN0PFJlbmRlclNWR1NoYXBl
Kj4oJnNoYXBlKSwgc2hhcGUuc3R5bGUoKSwgZmFsbGJhY2tDb2xvcikpIHsKICAgICAgICAgICAg
IFRleHRTdHJlYW1TZXBhcmF0b3IgcygiICIpOwogICAgICAgICAgICAgdHMgPDwgIiBbZmlsbD17
IiA8PCBzOwogICAgICAgICAgICAgd3JpdGVTVkdQYWludGluZ1Jlc291cmNlKHRzLCBmaWxsUGFp
bnRpbmdSZXNvdXJjZSk7CkBAIC0zNDYsMTIgKzM0NywxMiBAQCBzdGF0aWMgVGV4dFN0cmVhbSYg
d3JpdGVQb3NpdGlvbkFuZFN0eWxlKFRleHRTdHJlYW0mIHRzLCBjb25zdCBSZW5kZXJPYmplY3Qm
IG9iagogICAgIHJldHVybiB0czsKIH0KIAotc3RhdGljIFRleHRTdHJlYW0mIG9wZXJhdG9yPDwo
VGV4dFN0cmVhbSYgdHMsIGNvbnN0IFJlbmRlclNWR1BhdGgmIHBhdGgpCitzdGF0aWMgVGV4dFN0
cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiB0cywgY29uc3QgUmVuZGVyU1ZHU2hhcGUmIHNo
YXBlKQogewotICAgIHdyaXRlUG9zaXRpb25BbmRTdHlsZSh0cywgcGF0aCk7CisgICAgd3JpdGVQ
b3NpdGlvbkFuZFN0eWxlKHRzLCBzaGFwZSk7CiAKLSAgICBBU1NFUlQocGF0aC5ub2RlKCktPmlz
U1ZHRWxlbWVudCgpKTsKLSAgICBTVkdFbGVtZW50KiBzdmdFbGVtZW50ID0gc3RhdGljX2Nhc3Q8
U1ZHRWxlbWVudCo+KHBhdGgubm9kZSgpKTsKKyAgICBBU1NFUlQoc2hhcGUubm9kZSgpLT5pc1NW
R0VsZW1lbnQoKSk7CisgICAgU1ZHRWxlbWVudCogc3ZnRWxlbWVudCA9IHN0YXRpY19jYXN0PFNW
R0VsZW1lbnQqPihzaGFwZS5ub2RlKCkpOwogCiAgICAgaWYgKHN2Z0VsZW1lbnQtPmhhc1RhZ05h
bWUoU1ZHTmFtZXM6OnJlY3RUYWcpKSB7CiAgICAgICAgIFNWR1JlY3RFbGVtZW50KiBlbGVtZW50
ID0gc3RhdGljX2Nhc3Q8U1ZHUmVjdEVsZW1lbnQqPihzdmdFbGVtZW50KTsKQEAgLTY1MywxMSAr
NjU0LDExIEBAIHZvaWQgd3JpdGVTVkdJbWFnZShUZXh0U3RyZWFtJiB0cywgY29uc3QgUmVuZGVy
U1ZHSW1hZ2UmIGltYWdlLCBpbnQgaW5kZW50KQogICAgIHdyaXRlUmVzb3VyY2VzKHRzLCBpbWFn
ZSwgaW5kZW50KTsKIH0KIAotdm9pZCB3cml0ZShUZXh0U3RyZWFtJiB0cywgY29uc3QgUmVuZGVy
U1ZHUGF0aCYgcGF0aCwgaW50IGluZGVudCkKK3ZvaWQgd3JpdGUoVGV4dFN0cmVhbSYgdHMsIGNv
bnN0IFJlbmRlclNWR1NoYXBlJiBzaGFwZSwgaW50IGluZGVudCkKIHsKLSAgICB3cml0ZVN0YW5k
YXJkUHJlZml4KHRzLCBwYXRoLCBpbmRlbnQpOwotICAgIHRzIDw8IHBhdGggPDwgIlxuIjsKLSAg
ICB3cml0ZVJlc291cmNlcyh0cywgcGF0aCwgaW5kZW50KTsKKyAgICB3cml0ZVN0YW5kYXJkUHJl
Zml4KHRzLCBzaGFwZSwgaW5kZW50KTsKKyAgICB0cyA8PCBzaGFwZSA8PCAiXG4iOworICAgIHdy
aXRlUmVzb3VyY2VzKHRzLCBzaGFwZSwgaW5kZW50KTsKIH0KIAogdm9pZCB3cml0ZVNWR0dyYWRp
ZW50U3RvcChUZXh0U3RyZWFtJiB0cywgY29uc3QgUmVuZGVyU1ZHR3JhZGllbnRTdG9wJiBzdG9w
LCBpbnQgaW5kZW50KQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9T
VkdSZW5kZXJUcmVlQXNUZXh0LmggYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR1Jl
bmRlclRyZWVBc1RleHQuaAppbmRleCBjZTA3YTVjLi4zNTk4YzgzIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR1JlbmRlclRyZWVBc1RleHQuaAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR1JlbmRlclRyZWVBc1RleHQuaApAQCAtNDEsMTQg
KzQxLDE0IEBAIGNsYXNzIFJlbmRlckltYWdlOwogY2xhc3MgUmVuZGVyT2JqZWN0OwogY2xhc3Mg
UmVuZGVyU1ZHR3JhZGllbnRTdG9wOwogY2xhc3MgUmVuZGVyU1ZHSW1hZ2U7Ci1jbGFzcyBSZW5k
ZXJTVkdQYXRoOworY2xhc3MgUmVuZGVyU1ZHU2hhcGU7CiBjbGFzcyBSZW5kZXJTVkdSb290Owog
Y2xhc3MgUmVuZGVyVGV4dDsKIGNsYXNzIEFmZmluZVRyYW5zZm9ybTsKIGNsYXNzIFNWR1VuaXRU
eXBlczsKIAogLy8gZnVuY3Rpb25zIHVzZWQgYnkgdGhlIG1haW4gUmVuZGVyVHJlZUFzVGV4dCBj
b2RlCi12b2lkIHdyaXRlKFRleHRTdHJlYW0mLCBjb25zdCBSZW5kZXJTVkdQYXRoJiwgaW50IGlu
ZGVudCk7Cit2b2lkIHdyaXRlKFRleHRTdHJlYW0mLCBjb25zdCBSZW5kZXJTVkdTaGFwZSYsIGlu
dCBpbmRlbnQpOwogdm9pZCB3cml0ZShUZXh0U3RyZWFtJiwgY29uc3QgUmVuZGVyU1ZHUm9vdCYs
IGludCBpbmRlbnQpOwogdm9pZCB3cml0ZVNWR0dyYWRpZW50U3RvcChUZXh0U3RyZWFtJiwgY29u
c3QgUmVuZGVyU1ZHR3JhZGllbnRTdG9wJiwgaW50IGluZGVudCk7CiB2b2lkIHdyaXRlU1ZHUmVz
b3VyY2VDb250YWluZXIoVGV4dFN0cmVhbSYsIGNvbnN0IFJlbmRlck9iamVjdCYsIGludCBpbmRl
bnQpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdUZXh0UnVu
UmVuZGVyaW5nQ29udGV4dC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR1Rl
eHRSdW5SZW5kZXJpbmdDb250ZXh0LmNwcAppbmRleCAzM2FjZjkyLi40ZjFhMmIxIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR1RleHRSdW5SZW5kZXJpbmdDb250
ZXh0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR1RleHRSdW5SZW5k
ZXJpbmdDb250ZXh0LmNwcApAQCAtMTYwLDcgKzE2MCw3IEBAIHZvaWQgU1ZHVGV4dFJ1blJlbmRl
cmluZ0NvbnRleHQ6OmRyYXdTVkdHbHlwaHMoR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0LCBjb25z
dCBUCiAgICAgICAgICAgICAgICAgY29uc3QgUmVuZGVyU1ZHSW5saW5lVGV4dCogdGV4dFJlbmRl
cmVyID0gdG9SZW5kZXJTVkdJbmxpbmVUZXh0KHJlbmRlck9iamVjdCk7CiAgICAgICAgICAgICAg
ICAgY29udGV4dC0+c2V0U3Ryb2tlVGhpY2tuZXNzKGNvbnRleHQtPnN0cm9rZVRoaWNrbmVzcygp
ICogdGV4dFJlbmRlcmVyLT5zY2FsaW5nRmFjdG9yKCkpOwogICAgICAgICAgICAgfQotICAgICAg
ICAgICAgYWN0aXZlUGFpbnRpbmdSZXNvdXJjZS0+cG9zdEFwcGx5UmVzb3VyY2UocGFyZW50UmVu
ZGVyT2JqZWN0LCBjb250ZXh0LCByZXNvdXJjZU1vZGUsICZnbHlwaFBhdGgpOworICAgICAgICAg
ICAgYWN0aXZlUGFpbnRpbmdSZXNvdXJjZS0+cG9zdEFwcGx5UmVzb3VyY2Uoc3RhdGljX2Nhc3Q8
UmVuZGVyU1ZHU2hhcGUqPihwYXJlbnRSZW5kZXJPYmplY3QpLCBjb250ZXh0LCByZXNvdXJjZU1v
ZGUsICZnbHlwaFBhdGgpOwogICAgICAgICAgfQogIAogICAgICAgICBjb250ZXh0LT5yZXN0b3Jl
KCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHQ2lyY2xlRWxlbWVudC5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHQ2lyY2xlRWxlbWVudC5jcHAKaW5kZXggMmFlNjliOC4u
MDM2NjllMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0NpcmNsZUVsZW1lbnQu
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdDaXJjbGVFbGVtZW50LmNwcApAQCAtMTI0
LDcgKzEyNCw3IEBAIHZvaWQgU1ZHQ2lyY2xlRWxlbWVudDo6c3ZnQXR0cmlidXRlQ2hhbmdlZChj
b25zdCBRdWFsaWZpZWROYW1lJiBhdHRyTmFtZSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgaWYg
KGlzTGVuZ3RoQXR0cmlidXRlKSB7Ci0gICAgICAgIHJlbmRlcmVyLT5zZXROZWVkc1BhdGhVcGRh
dGUoKTsKKyAgICAgICAgcmVuZGVyZXItPnNldE5lZWRzU2hhcGVVcGRhdGUoKTsKICAgICAgICAg
UmVuZGVyU1ZHUmVzb3VyY2U6Om1hcmtGb3JMYXlvdXRBbmRQYXJlbnRSZXNvdXJjZUludmFsaWRh
dGlvbihyZW5kZXJlcik7CiAgICAgICAgIHJldHVybjsKICAgICB9CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9zdmcvU1ZHRWxsaXBzZUVsZW1lbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvc3Zn
L1NWR0VsbGlwc2VFbGVtZW50LmNwcAppbmRleCBjZWEwNjZkLi5jYTAxN2M0IDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRWxsaXBzZUVsZW1lbnQuY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3N2Zy9TVkdFbGxpcHNlRWxlbWVudC5jcHAKQEAgLTEyOSw3ICsxMjksNyBAQCB2b2lk
IFNWR0VsbGlwc2VFbGVtZW50OjpzdmdBdHRyaWJ1dGVDaGFuZ2VkKGNvbnN0IFF1YWxpZmllZE5h
bWUmIGF0dHJOYW1lKQogICAgICAgICByZXR1cm47CiAKICAgICBpZiAoaXNMZW5ndGhBdHRyaWJ1
dGUpIHsKLSAgICAgICAgcmVuZGVyZXItPnNldE5lZWRzUGF0aFVwZGF0ZSgpOworICAgICAgICBy
ZW5kZXJlci0+c2V0TmVlZHNTaGFwZVVwZGF0ZSgpOwogICAgICAgICBSZW5kZXJTVkdSZXNvdXJj
ZTo6bWFya0ZvckxheW91dEFuZFBhcmVudFJlc291cmNlSW52YWxpZGF0aW9uKHJlbmRlcmVyKTsK
ICAgICAgICAgcmV0dXJuOwogICAgIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9T
VkdMaW5lRWxlbWVudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHTGluZUVsZW1lbnQuY3Bw
CmluZGV4IGM3Y2ExMWUuLmIxYmI4ZWEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9T
VkdMaW5lRWxlbWVudC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0xpbmVFbGVtZW50
LmNwcApAQCAtMTI5LDcgKzEyOSw3IEBAIHZvaWQgU1ZHTGluZUVsZW1lbnQ6OnN2Z0F0dHJpYnV0
ZUNoYW5nZWQoY29uc3QgUXVhbGlmaWVkTmFtZSYgYXR0ck5hbWUpCiAgICAgICAgIHJldHVybjsK
IAogICAgIGlmIChpc0xlbmd0aEF0dHJpYnV0ZSkgewotICAgICAgICByZW5kZXJlci0+c2V0TmVl
ZHNQYXRoVXBkYXRlKCk7CisgICAgICAgIHJlbmRlcmVyLT5zZXROZWVkc1NoYXBlVXBkYXRlKCk7
CiAgICAgICAgIFJlbmRlclNWR1Jlc291cmNlOjptYXJrRm9yTGF5b3V0QW5kUGFyZW50UmVzb3Vy
Y2VJbnZhbGlkYXRpb24ocmVuZGVyZXIpOwogICAgICAgICByZXR1cm47CiAgICAgfQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvc3ZnL1NWR1BhdGhFbGVtZW50LmNwcCBiL1NvdXJjZS9XZWJD
b3JlL3N2Zy9TVkdQYXRoRWxlbWVudC5jcHAKaW5kZXggYTdhMzM3ZS4uZmUzMzU5NSAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvc3ZnL1NWR1BhdGhFbGVtZW50LmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9zdmcvU1ZHUGF0aEVsZW1lbnQuY3BwCkBAIC0yNjksNyArMjY5LDcgQEAgdm9pZCBT
VkdQYXRoRWxlbWVudDo6c3ZnQXR0cmlidXRlQ2hhbmdlZChjb25zdCBRdWFsaWZpZWROYW1lJiBh
dHRyTmFtZSkKICAgICAgICAgfQogCiAgICAgICAgIGlmIChyZW5kZXJlcikKLSAgICAgICAgICAg
IHJlbmRlcmVyLT5zZXROZWVkc1BhdGhVcGRhdGUoKTsKKyAgICAgICAgICAgIHJlbmRlcmVyLT5z
ZXROZWVkc1NoYXBlVXBkYXRlKCk7CiAgICAgfQogCiAgICAgaWYgKHJlbmRlcmVyKQpAQCAtMzU1
LDEwICszNTUsMTYgQEAgdm9pZCBTVkdQYXRoRWxlbWVudDo6cGF0aFNlZ0xpc3RDaGFuZ2VkKFNW
R1BhdGhTZWdSb2xlIHJvbGUpCiAgICAgaWYgKCFyZW5kZXJlcikKICAgICAgICAgcmV0dXJuOwog
Ci0gICAgcmVuZGVyZXItPnNldE5lZWRzUGF0aFVwZGF0ZSgpOworICAgIHJlbmRlcmVyLT5zZXRO
ZWVkc1NoYXBlVXBkYXRlKCk7CiAgICAgUmVuZGVyU1ZHUmVzb3VyY2U6Om1hcmtGb3JMYXlvdXRB
bmRQYXJlbnRSZXNvdXJjZUludmFsaWRhdGlvbihyZW5kZXJlcik7CiB9CiAKK1JlbmRlck9iamVj
dCogU1ZHUGF0aEVsZW1lbnQ6OmNyZWF0ZVJlbmRlcmVyKFJlbmRlckFyZW5hKiBhcmVuYSwgUmVu
ZGVyU3R5bGUqKQoreworICAgIC8vIEJ5IGRlZmF1bHQsIGFueSBzdWJjbGFzcyBpcyBleHBlY3Rl
ZCB0byBkbyBwYXRoLWJhc2VkIGRyYXdpbmcKKyAgICByZXR1cm4gbmV3IChhcmVuYSkgUmVuZGVy
U1ZHUGF0aCh0aGlzKTsKK30KKwogfQogCiAjZW5kaWYgLy8gRU5BQkxFKFNWRykKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdQYXRoRWxlbWVudC5oIGIvU291cmNlL1dlYkNvcmUv
c3ZnL1NWR1BhdGhFbGVtZW50LmgKaW5kZXggMWQzN2QwZS4uNTRiOGZlMiAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvc3ZnL1NWR1BhdGhFbGVtZW50LmgKKysrIGIvU291cmNlL1dlYkNvcmUv
c3ZnL1NWR1BhdGhFbGVtZW50LmgKQEAgLTEyMiw2ICsxMjIsOCBAQCBwcml2YXRlOgogICAgIHZp
cnR1YWwgdm9pZCBzeW5jaHJvbml6ZVJlcXVpcmVkRXh0ZW5zaW9ucygpIHsgU1ZHVGVzdHM6OnN5
bmNocm9uaXplUmVxdWlyZWRFeHRlbnNpb25zKHRoaXMpOyB9CiAgICAgdmlydHVhbCB2b2lkIHN5
bmNocm9uaXplU3lzdGVtTGFuZ3VhZ2UoKSB7IFNWR1Rlc3RzOjpzeW5jaHJvbml6ZVN5c3RlbUxh
bmd1YWdlKHRoaXMpOyB9CiAKKyAgICBSZW5kZXJPYmplY3QqIGNyZWF0ZVJlbmRlcmVyKFJlbmRl
ckFyZW5hKiwgUmVuZGVyU3R5bGUqKTsKKwogcHJpdmF0ZToKICAgICBPd25QdHI8U1ZHUGF0aEJ5
dGVTdHJlYW0+IG1fcGF0aEJ5dGVTdHJlYW07CiAgICAgbXV0YWJsZSBTVkdTeW5jaHJvbml6YWJs
ZUFuaW1hdGVkUHJvcGVydHk8U1ZHUGF0aFNlZ0xpc3Q+IG1fcGF0aFNlZ0xpc3Q7CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHUG9seUVsZW1lbnQuY3BwIGIvU291cmNlL1dlYkNv
cmUvc3ZnL1NWR1BvbHlFbGVtZW50LmNwcAppbmRleCA2MTZiODY3Li5mMzBjYTRhIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHUG9seUVsZW1lbnQuY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3N2Zy9TVkdQb2x5RWxlbWVudC5jcHAKQEAgLTEyNCw3ICsxMjQsNyBAQCB2b2lkIFNW
R1BvbHlFbGVtZW50OjpzdmdBdHRyaWJ1dGVDaGFuZ2VkKGNvbnN0IFF1YWxpZmllZE5hbWUmIGF0
dHJOYW1lKQogICAgICAgICByZXR1cm47CiAKICAgICBpZiAoYXR0ck5hbWUgPT0gU1ZHTmFtZXM6
OnBvaW50c0F0dHIpIHsKLSAgICAgICAgcmVuZGVyZXItPnNldE5lZWRzUGF0aFVwZGF0ZSgpOwor
ICAgICAgICByZW5kZXJlci0+c2V0TmVlZHNTaGFwZVVwZGF0ZSgpOwogICAgICAgICBSZW5kZXJT
VkdSZXNvdXJjZTo6bWFya0ZvckxheW91dEFuZFBhcmVudFJlc291cmNlSW52YWxpZGF0aW9uKHJl
bmRlcmVyKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3N2Zy9TVkdSZWN0RWxlbWVudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHUmVjdEVs
ZW1lbnQuY3BwCmluZGV4IGU4NDc3NGQuLjE4NzllMGEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3N2Zy9TVkdSZWN0RWxlbWVudC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvc3ZnL1NWR1Jl
Y3RFbGVtZW50LmNwcApAQCAtMjUsNiArMjUsNyBAQAogCiAjaW5jbHVkZSAiQXR0cmlidXRlLmgi
CiAjaW5jbHVkZSAiUmVuZGVyU1ZHUGF0aC5oIgorI2luY2x1ZGUgIlJlbmRlclNWR1JlY3QuaCIK
ICNpbmNsdWRlICJSZW5kZXJTVkdSZXNvdXJjZS5oIgogI2luY2x1ZGUgIlNWR0VsZW1lbnRJbnN0
YW5jZS5oIgogI2luY2x1ZGUgIlNWR0xlbmd0aC5oIgpAQCAtMzIsNiArMzMsOCBAQAogCiBuYW1l
c3BhY2UgV2ViQ29yZSB7CiAKK2NsYXNzIFJlbmRlclNWR1JlY3Q7CisKIC8vIEFuaW1hdGVkIHBy
b3BlcnR5IGRlZmluaXRpb25zCiBERUZJTkVfQU5JTUFURURfTEVOR1RIKFNWR1JlY3RFbGVtZW50
LCBTVkdOYW1lczo6eEF0dHIsIFgsIHgpCiBERUZJTkVfQU5JTUFURURfTEVOR1RIKFNWR1JlY3RF
bGVtZW50LCBTVkdOYW1lczo6eUF0dHIsIFksIHkpCkBAIC0xMzcsMTIgKzE0MCwxMiBAQCB2b2lk
IFNWR1JlY3RFbGVtZW50OjpzdmdBdHRyaWJ1dGVDaGFuZ2VkKGNvbnN0IFF1YWxpZmllZE5hbWUm
IGF0dHJOYW1lKQogICAgIGlmIChTVkdUZXN0czo6aGFuZGxlQXR0cmlidXRlQ2hhbmdlKHRoaXMs
IGF0dHJOYW1lKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgUmVuZGVyU1ZHUGF0aCogcmVuZGVy
ZXIgPSBzdGF0aWNfY2FzdDxSZW5kZXJTVkdQYXRoKj4odGhpcy0+cmVuZGVyZXIoKSk7CisgICAg
UmVuZGVyU1ZHUmVjdCogcmVuZGVyZXIgPSBzdGF0aWNfY2FzdDxSZW5kZXJTVkdSZWN0Kj4odGhp
cy0+cmVuZGVyZXIoKSk7CiAgICAgaWYgKCFyZW5kZXJlcikKICAgICAgICAgcmV0dXJuOwogCiAg
ICAgaWYgKGlzTGVuZ3RoQXR0cmlidXRlKSB7Ci0gICAgICAgIHJlbmRlcmVyLT5zZXROZWVkc1Bh
dGhVcGRhdGUoKTsKKyAgICAgICAgcmVuZGVyZXItPnNldE5lZWRzU2hhcGVVcGRhdGUoKTsKICAg
ICAgICAgUmVuZGVyU1ZHUmVzb3VyY2U6Om1hcmtGb3JMYXlvdXRBbmRQYXJlbnRSZXNvdXJjZUlu
dmFsaWRhdGlvbihyZW5kZXJlcik7CiAgICAgICAgIHJldHVybjsKICAgICB9CkBAIC0xOTgsNiAr
MjAxLDExIEBAIGJvb2wgU1ZHUmVjdEVsZW1lbnQ6OnNlbGZIYXNSZWxhdGl2ZUxlbmd0aHMoKSBj
b25zdAogICAgICAgICB8fCByeSgpLmlzUmVsYXRpdmUoKTsKIH0KIAorUmVuZGVyT2JqZWN0KiBT
VkdSZWN0RWxlbWVudDo6Y3JlYXRlUmVuZGVyZXIoUmVuZGVyQXJlbmEqIGFyZW5hLCBSZW5kZXJT
dHlsZSopCit7CisgICAgcmV0dXJuIG5ldyAoYXJlbmEpIFJlbmRlclNWR1JlY3QodGhpcyk7Cit9
CisKIH0KIAogI2VuZGlmIC8vIEVOQUJMRShTVkcpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9zdmcvU1ZHUmVjdEVsZW1lbnQuaCBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdSZWN0RWxlbWVu
dC5oCmluZGV4IDk5NDM3ZjMuLjliZjYwMmYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3N2
Zy9TVkdSZWN0RWxlbWVudC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdSZWN0RWxlbWVu
dC5oCkBAIC01Miw2ICs1Miw4IEBAIHByaXZhdGU6CiAKICAgICB2aXJ0dWFsIGJvb2wgc2VsZkhh
c1JlbGF0aXZlTGVuZ3RocygpIGNvbnN0OwogCisgICAgUmVuZGVyT2JqZWN0KiBjcmVhdGVSZW5k
ZXJlcihSZW5kZXJBcmVuYSosIFJlbmRlclN0eWxlKik7CisKICAgICBCRUdJTl9ERUNMQVJFX0FO
SU1BVEVEX1BST1BFUlRJRVMoU1ZHUmVjdEVsZW1lbnQpCiAgICAgICAgIERFQ0xBUkVfQU5JTUFU
RURfTEVOR1RIKFgsIHgpCiAgICAgICAgIERFQ0xBUkVfQU5JTUFURURfTEVOR1RIKFksIHkpCi0t
IAoxLjcuNS40Cgo=
</data>
<flag name="review"
          id="101650"
          type_id="1"
          status="-"
          setter="krit"
    />
    <flag name="commit-queue"
          id="101651"
          type_id="3"
          status="-"
          setter="rhodovan.u-szeged"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>105641</attachid>
            <date>2011-08-30 09:26:59 -0700</date>
            <delta_ts>2011-09-01 04:38:59 -0700</delta_ts>
            <desc>Proposed patch</desc>
            <filename>0001-krit-review.patch</filename>
            <type>text/plain</type>
            <size>113575</size>
            <attacher name="Renata Hodovan">rhodovan.u-szeged</attacher>
            
              <data encoding="base64">RnJvbSA4ZDNkMDg2NmVhYWI4ZjQwMjRlYTRlNWFhZDg3MjU4NzE5MjYxNGRjIE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBSZW5hdGEgSG9kb3ZhbiA8cmVuaUB3ZWJraXQub3JnPgpEYXRl
OiBUdWUsIDMwIEF1ZyAyMDExIDE4OjA3OjA0ICswMjAwClN1YmplY3Q6IFtQQVRDSF0ga3JpdCBy
ZXZpZXcKCi0tLQogLi4uL3BvaW50ZXItZXZlbnRzLW9uLXJvdW5kZWQtcmVjdC1leHBlY3RlZC5w
bmcgICAgfCAgQmluIDAgLT4gMTU5NjkgYnl0ZXMKIC4uLi9wb2ludGVyLWV2ZW50cy1vbi1yb3Vu
ZGVkLXJlY3QtZXhwZWN0ZWQudHh0ICAgIHwgICAgNiArCiAuLi4vc3ZnL2N1c3RvbS9wb2ludGVy
LWV2ZW50cy1vbi1yb3VuZGVkLXJlY3Quc3ZnICB8ICAgMjEgKwogU291cmNlL1dlYkNvcmUvQ01h
a2VMaXN0cy50eHQgICAgICAgICAgICAgICAgICAgICAgfCAgICAyICsKIFNvdXJjZS9XZWJDb3Jl
L0NoYW5nZUxvZyAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgIDEzNiArKysrKysKIFNvdXJj
ZS9XZWJDb3JlL0dOVW1ha2VmaWxlLmxpc3QuYW0gICAgICAgICAgICAgICAgIHwgICAgNCArCiBT
b3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkgICAgICAgICAgICAgICAgICAgICAgICB8ICAgIDQg
KwogU291cmNlL1dlYkNvcmUvV2ViQ29yZS5wcm8gICAgICAgICAgICAgICAgICAgICAgICAgfCAg
ICA0ICsKIFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUudmNwcm9qL1dlYkNvcmUudmNwcm9qICAgICAg
IHwgIDExMiArKysrKwogU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5w
Ynhwcm9qICAgfCAgICA4ICsKIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0Zsb2F0
UmVjdC5jcHAgICAgIHwgICAgNyArCiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9G
bG9hdFJlY3QuaCAgICAgICB8ICAgIDEgKwogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
ck9iamVjdC5oICAgICAgICAgICAgfCAgICAzICsKIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJUcmVlQXNUZXh0LmNwcCAgICAgIHwgICAgNCArLQogU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL3N2Zy9SZW5kZXJTVkdBbGxJbk9uZS5jcHAgfCAgICAyICsKIC4uLi9XZWJDb3JlL3JlbmRl
cmluZy9zdmcvUmVuZGVyU1ZHTW9kZWxPYmplY3QuY3BwIHwgICAgMiArLQogU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdQYXRoLmNwcCAgICAgfCAgMzUyICstLS0tLS0tLS0t
LS0tLS0tCiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1BhdGguaCAgICAg
ICB8ICAgNzUgKy0tLQogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZWN0
LmNwcCAgICAgfCAgMTI4ICsrKysrKwogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5k
ZXJTVkdSZWN0LmggICAgICAgfCAgIDYxICsrKwogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2
Zy9SZW5kZXJTVkdSZXNvdXJjZS5oICAgfCAgICAzICstCiAuLi4vcmVuZGVyaW5nL3N2Zy9SZW5k
ZXJTVkdSZXNvdXJjZUNsaXBwZXIuY3BwICAgICB8ICAgIDYgKy0KIC4uLi9yZW5kZXJpbmcvc3Zn
L1JlbmRlclNWR1Jlc291cmNlQ29udGFpbmVyLmNwcCAgIHwgICAgMiArLQogLi4uL3JlbmRlcmlu
Zy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VGaWx0ZXIuY3BwICAgICAgfCAgICA1ICstCiAuLi4vcmVu
ZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJjZUZpbHRlci5oICAgICAgICB8ICAgIDIgKy0KIC4u
Li9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291cmNlR3JhZGllbnQuY3BwICAgIHwgICAxMCAr
LQogLi4uL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VHcmFkaWVudC5oICAgICAgfCAg
ICAyICstCiAuLi4vcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJjZVBhdHRlcm4uY3BwICAg
ICB8ICAgIDggKy0KIC4uLi9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291cmNlUGF0dGVybi5o
ICAgICAgIHwgICAgMiArLQogLi4uL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VTb2xp
ZENvbG9yLmNwcCAgfCAgICA5ICstCiAuLi4vcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJj
ZVNvbGlkQ29sb3IuaCAgICB8ICAgIDIgKy0KIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcv
UmVuZGVyU1ZHU2hhcGUuY3BwICAgIHwgIDQzNSArKysrKysrKysrKysrKysrKysrKwogU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdTaGFwZS5oICAgICAgfCAgMTU1ICsrKysr
KysKIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHSW5saW5lVGV4dEJveC5jcHAgIHwg
ICAgMiArLQogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdSZW5kZXJTdXBwb3J0LmNw
cCAgfCAgICA4ICstCiAuLi4vV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR1JlbmRlclRyZWVBc1Rl
eHQuY3BwICB8ICAgMzEgKy0KIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHUmVuZGVy
VHJlZUFzVGV4dC5oIHwgICAgNCArLQogLi4uL3JlbmRlcmluZy9zdmcvU1ZHVGV4dFJ1blJlbmRl
cmluZ0NvbnRleHQuY3BwICAgfCAgICAyICstCiBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHQ2lyY2xl
RWxlbWVudC5jcHAgICAgICAgICAgICB8ICAgIDIgKy0KIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdF
bGxpcHNlRWxlbWVudC5jcHAgICAgICAgICAgIHwgICAgMiArLQogU291cmNlL1dlYkNvcmUvc3Zn
L1NWR0xpbmVFbGVtZW50LmNwcCAgICAgICAgICAgICAgfCAgICAyICstCiBTb3VyY2UvV2ViQ29y
ZS9zdmcvU1ZHUGF0aEVsZW1lbnQuY3BwICAgICAgICAgICAgICB8ICAgMTAgKy0KIFNvdXJjZS9X
ZWJDb3JlL3N2Zy9TVkdQYXRoRWxlbWVudC5oICAgICAgICAgICAgICAgIHwgICAgMiArCiBTb3Vy
Y2UvV2ViQ29yZS9zdmcvU1ZHUG9seUVsZW1lbnQuY3BwICAgICAgICAgICAgICB8ICAgIDIgKy0K
IFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdSZWN0RWxlbWVudC5jcHAgICAgICAgICAgICAgIHwgICAx
MiArLQogU291cmNlL1dlYkNvcmUvc3ZnL1NWR1JlY3RFbGVtZW50LmggICAgICAgICAgICAgICAg
fCAgICAyICsKIDQ3IGZpbGVzIGNoYW5nZWQsIDExODAgaW5zZXJ0aW9ucygrKSwgNDc0IGRlbGV0
aW9ucygtKQogY3JlYXRlIG1vZGUgMTAwNjQ0IExheW91dFRlc3RzL3N2Zy9jdXN0b20vcG9pbnRl
ci1ldmVudHMtb24tcm91bmRlZC1yZWN0LWV4cGVjdGVkLnBuZwogY3JlYXRlIG1vZGUgMTAwNjQ0
IExheW91dFRlc3RzL3N2Zy9jdXN0b20vcG9pbnRlci1ldmVudHMtb24tcm91bmRlZC1yZWN0LWV4
cGVjdGVkLnR4dAogY3JlYXRlIG1vZGUgMTAwNjQ0IExheW91dFRlc3RzL3N2Zy9jdXN0b20vcG9p
bnRlci1ldmVudHMtb24tcm91bmRlZC1yZWN0LnN2ZwogY3JlYXRlIG1vZGUgMTAwNjQ0IFNvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVjdC5jcHAKIGNyZWF0ZSBtb2RlIDEw
MDY0NCBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1JlY3QuaAogY3JlYXRl
IG1vZGUgMTAwNjQ0IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHU2hhcGUu
Y3BwCiBjcmVhdGUgbW9kZSAxMDA2NDQgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5k
ZXJTVkdTaGFwZS5oCgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvc3ZnL2N1c3RvbS9wb2ludGVy
LWV2ZW50cy1vbi1yb3VuZGVkLXJlY3QtZXhwZWN0ZWQucG5nIGIvTGF5b3V0VGVzdHMvc3ZnL2N1
c3RvbS9wb2ludGVyLWV2ZW50cy1vbi1yb3VuZGVkLXJlY3QtZXhwZWN0ZWQucG5nCm5ldyBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAuLmE1NTlkMzEwMzk0OWJiMTViNjcxNTYyMzA1MDdkODE1ZmVkYTNhOWYKR0lUIGJpbmFyeSBw
YXRjaApsaXRlcmFsIDE1OTY5CnpjbWVITmN7SjRSK2FEN31fN28rViQmeUV3cTNxakNOZmMyT0Ek
eWp7bWJFTkhTejJ0QmtYPFV0elZGTEpNYWFtJAp6Py1JdG9HdDJ3XmV5ZkxuLWdEa18tcnNyOGRD
c2VVcyhiRmB5MDdKUGVYaV5OS0RueHtPbjtGNUFQZmVoem9jP08KejY5KElkZ3UmbzlzckxnVChY
SjAyZldQPmltMk50bFMoJSZKSUp3eHUlKzFBM097R0xGI0g2TEFQMHlTV21saEVmCno3Y3NxVWRk
NXVSakVSVn1ib2pOPDI0SUp8SkJvQHxGRFdWX3VpbXFfeE8zTVcyNkx6SXptQnRFSWRfO09WVkJ5
JQp6TVhoSlVrbjB9Q2J4QWtQTn52OWYkWlRwdSpNfSVuM2NHI3dRbTM4NyUtcEdoY2FPKE16bj5t
ZG5vVC1EX1RoWjYKemEyc3ttVXIqXzshTCt8amxofWs3enVCbzN6TUhPWV9GZio4b2NGU0s5Zkh4
e1laWTdkcCZYfkwofHA1eD1kUn5ACnpZcjxuIyRRem4tViFTdXtAYWpESyZwbVM1XnFBfl4hMDQ7
NVVGKSYhbWd8LWctQzd1Wno+a08tUip2cERvanVSeQp6Y3VAQmN7SVQzbjVgVWREXzBVLU41PFhO
fntsNUYoMSZqam5wTERyQUcyJWthKmVrX2EtKzA/Rms1cl8+Un48REsKelYhTkomY2J6ekokSWp3
UUp5VjU3KiEhfWt4aXIoSFNvSmxBdSFeYDlafXElRWdfQEghdzh0e2c3bUlgQVNBI214CnpxYjRK
N2V8IXAlPVF0fDl2U0VDcmgmXj5meXltYkcoLXBvcSpCeUk9PUArOWlpUH1xLUEzQjZkSFFZQXdh
bmUpSwp6PXUpJVdDPUkwWUlAUUlKSFJgNSlaUkNDXml7KVZaemBSbH5KV0dWKDFSWG5GR2AtNElD
TThPZnNPK25sMDZCSjEKenZEfHhUP3pIe0tVd1dLejtqdTFySG9jSEAmT0BTS3pVYlE5MFhmb05U
I24oMjE9S0dIPVNaaXN6R19VfC0peXs8CnotTDFWSW8pSHNXeC09fk5kRSN7bUo3LXMwe2d+NGdM
KGY8M3R9a196Qmh2M2JEMzhYb3F3ellDcUNYeXJoa2tPKAp6LWQrP2tkZXMha0E5VlFoKnAyMEJS
WC1PIVFPVGkleUk1S0lRREt+TEw4bnYzbFZfNkpGX0QlO1luQVB9a0w1M2EKeit9UEFHVHdOcXNl
KjB1TCR9ZjcjXzM3bHZDeX0zcDdoaU8lcnFQWlgrdHlMWHkkYXhPd1NCKEQoX3c1SlVBfkdrCnpL
PG0zI1QqVDY/VUpGMGcpTyE4Tkk9MUhZWkx6byMySyVraHpCJlRpYDE7ZXlndW1kWnlUa1JiT0ty
NnI9YjRocwp6LWBQMjMhcjd8NmRvMnsmKig3XlE1aCFvVXJMa3NjaVlGaztETDdtTUE4YEtVazd8
cEVfJEk5eEQ0NmlGYmdJRXIKenYqfkp8cU5aalNaPG8wJFl1QFZ7cmM8dW51aUgtOGFVQEJmVTtt
VkgrNUZ7SikqXkVARjxXelVHaE1VQ1RiO2VyCnpIKig5cXh9Mnl+P2YmY3U0MkZiVnheVjhnSkhf
ayhaTUsxbjdpeGlnbDg9VWxoVXJpXlEmNFE7JGhWMUxGMWBELQp6Vm9CRkFAM2Fyd00/SXJAYyo2
dFhXY2V2KUBVPWl1Z3ImS2k+M3dhXmhZVSZRbmJsSTI4azVEJmFmTU18IW8ydjQKeiN4RCQwfElE
ZkRzbX1lfHVrJiF5SFc/S3BHTz8kYikyV2oqUHU/T2JSOSFoVWx4Smo2KFpnSEpndjl2M0RCelVU
Cnp6JntmQWBgVEpkMSMwYWNHdFRwWWpyIzcpQHhqPV87VlFRNj5LRmM1PF4jK1MtSjlgbSlDYjBt
P0ArcUN0eHtDcAp6VUcqc1BDfUUtZlgtVztAJGEzd0E0JVBHQ3A1TH5fT15FTVRPfDw2VV5IQEVv
PlhqVzxENlEtaUFLc1JqM1pYbDEKelQjWTIjPU5nMVFuIy1JTXglYWJQI1BzSzU1IVgtTTMtS29n
U3FBZm45eVJlfVlqZytaP2hYSCNEU2tje3owd3QrCnoyZjVqSy13PGt+amJ1OWd4PT1aKSR4ekg9
ZDNCTUVsZCs8UWQ8KipoZnAyaWRAbWhmeXFhSUo8eDNucjZqZFhYQAp6WER7YyhVOSVrZS07VUtS
ZFQ9MXJ5VHw7cFpQeUYrKDtYcWJ3PSRfbl9eaG4wMXRpRkF6alBwKWJwYGd0N3V6blEKeko/e2pt
dT5zRGxxQXtHeG1UKykkd0x2K1BFOyVybTBoYDtFO0hRQ0RtfnRTejlhR2ZOVmFJKVdGRFpWNDhI
cTdBCnpoSlUzQmIyO0FTWn1ZPkRNUjs/SCpKUHhUX1EzbTVMb2k1TUJ6IXcmYk9NaWlkKU5NJDhJ
TDteTkU9ZCZecWl+NAp6YE9nTn1iYD9nKU11RX1QekBxWnclRm9UbGJrZj1vTmtYbWt1Qk95ezsz
TiVWTGpFRWkycHIhKzhiUzl2PVpjNXQKelhlRyE0LWN5ZXYxRyokRDJNaEludVZ6LV5eNjhmKkgp
ckUrWjJNSWF6OGVMK3Z4JGh7SGUmPGgpR0RaJkhtaWNFCnooakNXRUoxJWY0dXJIeXdMZXohZDQ/
SzRaI3BEOUp6Y3lpNm48XlF7eyhld1NUK3B6Zm1eQEgrMDFXWDl5YkViTQp6LWJkOFFnSHQycFNT
ZXxfcVVuK2spO2ZhVlp2PF4qRkttZyhTQX0zRy0+TWR8YENCbEwyWig4MzJBMU9Pc2peeSUKekFx
OGFybmZWQlluT2tMbTQzQ1lGckxZJVI8dk0+aXFvV0dtR2orOSVHbG41cHhEMUZVejcjYStkUFMh
X20pMH1fCno/JlE2PEM2VjQhKnA4fSQrUGhrWXhsUz91dF5ubnFvRnktRllqTlI3ZnVpKERATyZ7
WDt+JWxGTjRqVDE9b15nOwp6MkFra0ZsdDlEVXZwb0pgPUFNOV4qbU19Qj1WU0h1P2RYJFBzK0ZZ
X19POFJsWkUhemdJeDEzNj8kY096VCZUfEMKenEoKCQtYFpeMyomZTYpN0p5XjBaZlNmNF9lb2Ih
UThTSDAqIT87Xz5WRm1VcnEkVnFIVV5GcmV5V1hhcHh2NnE8CnpWZjVqdEBafGxWWmE0UDlnQmcq
VlhBeU5uNHhhVnMlfUBSaUhyfkI1eXhEO1ozXm07VG9eM1ZwQ1BUPlNJNEU9ZQp6d1ohaWZKWG9B
RURPWEA1SVhJTGw8ckt5VGF+c34rRE0tc1Y9PkJIaT99Q0tuIzM1dmhHKDRDZHh0VV5jV3BuTkAK
enMlJCM4P3V8TVBwcDU4aGwrbClYKVY7UkQyX1pNNEtMbXBjaXBRQWt0Qj1JNE9mMk0wVnptdVpU
KTlBdmg4JUxZCnpgbEBLTUhQOXllKGVtM05CbkcrUF91fkZBZzZlKitifmAjb2dnN3ZpKmFPIT1L
WDU1dG9ScEwoUXxTT2FJa0E/Swp6b2VkTjN3YmA/PERYVERLViU4IUlpaFo1ZWZuK2NsTlo1RGZT
R1hPNjJoJD1xaSg8Q31tTSFGQHVBYytXSjUwR2AKenVaQ1c0Y0c5dl5WZyZTfWF6NjFJI2QhMGtU
WXhVRDF1c1AhNFg3LXVrbT49QXAlWnEqJmwldE5SZHw3c3BUQHFLCnpnWk5mSVFrVUokPDcqfD4z
RUEhKXFyREExcj0wejNQdk99XnJseDJEZ0FqLXs0b1RyNGchdChvUDZhdS08N2VJJAp6JUVVZWZe
dnE5dCpLO2c1K2smezJKXm81MzdlKFZLTzR4M0ZYUmBLMlgoV2tQXj9WIXxIZHxSY0g8RyVYYUlt
JjQKekZyX0kmNSllYm9GajE2WlQlV3Zfdkc1TXptQ0JrO2xkSyVMJSFyb3ItMTZDMVc3bFZJKUY+
U1gxOz9OO1Y3dnkwCnpafll9QihiNyZlJVZ8MVEjNGtfMXd8K1BkKEhVKkY9JCE1eUM8SEVuWTxZ
XnxoUyEkeyYoeXFhSm1uOFdVWkxpKQp6UGdsP2hRNyV2NyYqYSlrTXVxT1A5UShBTG00VmE0MSt1
LXstYUM5JldjMDVoZWJ2WmFoaCstNUV4WH5AR01+Pk0KemUxXzhGeEpZK21GK2B1QjB5P3Rgam83
Rj52YTZ9JHtuRW5YU0ZkJllXZ0hxRT4oKl5qcWloZj1KYjRtdTkkTlVPCnpzJHJHJGAxNnJTSHA4
UnBMbXU8MmJEfDVwc1BlVio4X2x1dmJle1h4cHxDdGhuPWtKKFpoeCsxSlNDRUBeZkB+Sgp6b1NU
bCQjdXxUJFV5TTNoS0ludz41fkdrKUVhPCR3ZitFNyh2UmZYT0B5OUElWUdfVzklZ1VaTW8tNS1C
dVVLJnsKekkkYz1FMllLPmVFbytnKyNLdXU5NFdlUSRTdHoyZiVBQzhqdGskKiVaTlhQWENLQWgl
SjBSNilgeXp5SUdMY3B5CnpebFBeOF4hUF49JlRjTSZaRUZmYng3PEpaazk+SGRPeiRlWSZJaHtl
eHI1RyhPUWM3WStwRDFsPSU0YVdDRi0jcgp6ciN1Z1RtQVZOMF89N2d+JT44QEMoakdzeW4mIVB3
Y1I3WHcjWTJ2WjNkZWZYbS1NTEc8Q2ZFdm16NldtIXpwRHsKejU7SmY8PEF7b35Nc2cydGNgb1R5
Pih9Sy0xN2Y1aXFtWS07YWxxfDtGa1chJWRPaTBEWU9YWlJoX0FgVzt1WDRZCnpGX293PSFSQHhx
WWJncGBaPF5VXjx9NENPSGQhd2dvPnpfQitXMFVARilqJCk9WSFAalpPPyhne15nYW5wMiY5TAp6
PyYmKkFtSzlfJWtBMiV6JUNZZWtQMTgyfDF+VjVTVShkcW1AMmtmdjwqQ2pxa1V0Q3ZYZWdBZGMt
Y1okb25fd0cKeiozeksmRnR+NGlHc2t0N2w/b3FRO1lqUlBXVDJUZSRHS35DNkRyZzxFentEIVcr
b1Rqb1BwcChPYzdaRXBlSFUrCnpxcztvdEJoQDItQiE0TCkkK0U8JTZFND5gbU1ZZHMtZXImNmRV
IW53I34kTyZ3WVNZdGNASmpMPTlAOHsyd1d6RAp6Sy05eFJGbCN9UktQIShFRnd8IXJib3A5Iy1o
UW5yU0dkZjQkYnI8ZkdGM1U1RU8+UHI8YTgoREhqO08jSiZhcyMKek5TVzY3O2ZXYGR7VFEjcjdR
YnAoPlRCKzRuNi1vTyNyMHRNWVMrYnImUDdCY0RZPD4mSVVBV1I1RnpaQEV+Q1c5Cno0UU47JSZL
PHgmUGIqeFVfXz1CPF4wcmIyRjAqITt6Z1pVb1NSPVVZSGRvRTJ6Pm9FYG1QJUg4bWVRSU9NeWJS
cwp6YjM0Y2xSSHkoWHY3Z1E1KkkmRDNxblpKbyk9U21QaEF8WUJeeD0+Jj5CMmg9N0c8NGkwY2JC
RT49U3JuXnYmPlMKemE5PD5nbEBXfTheSGBZS2c5bWlza2xxTWIteT1OR25NclY0VEJORz5XWSV8
fmBGciZuaXhhak1lNHY+Zy14fmcwCnpLY2t9bjdgXnB+bHxKayVua3VjU0ZARWdKdENGfTFYamZ9
ckxLKV40P21Zb0Z2RlZLNTR6MW18Ul9YbGwzOFJRTwp6aD8/XjduTy1NN09KMn42Nnt2YnlGYGYx
ZVhzKD57Iy1BZyNqZVNpfUI0YUFTbCNzdCUydWJuO2p1cEZ7WGlJVGgKeiVicTBxV1dxcD8/RVlu
YGAzQHdHKWtrb2FTYj9ld3VyS25XWj1vMFNORCUqN3lfTSpXUUpGP2lwNUxVPXN1WkpSCno/fFI0
ZUloJG1lOTA9ViRtPDskYz9hYUgyb0BAcEFuVStESmpgbFBTVCk8aTNKU35ObW45Q29CQiFLSDhU
VEl8RAp6Z3sjVXhodkA1ZlpGZEJhSVdzQG8zNHM8OWd4aCpCc3Q5N0hMOV9yUDlNckJIMTt0eEFS
YXRRUi0oeEwtS0NzcFUKelZLSmNjZX48bThmcjBWa1RBXkcxOSRQdHlealY9OHhBP1VVR19RZSQz
RGMwNSYrPmF+YUxrTEU4dERacWRIdkAmCnpLem1EK2x3bkpQdiU1K0szPDlWZzVFd2ZrUVUwMHR6
WXdjc3BsPGZuZlNoZS1LSV4pN3t5VWVtQDZ+UFojM0AweQp6e2s0Qy0yNTFfOVMtZik8QChGTGFi
OVV6cnVjK049dzBZQWRLcyoxQGtQMntqT347QD17fEJ5YzhNd21ibzNAdyMKem5kNV9iP2dQXyZK
OT4yMiluNVR1ZjBmPCklUyQwdWBmPnJmUnsxUXRhfiRQcVcrdSNPbExHIS0+eSFYeEpiIUFvCnpP
V3h+VE5UMkk5KT5eeVBKcTBBLUkjUmRHVFJ2UkN6KjdBPi10U3M+bjEmanViVUl8MFh8RnkzI0gy
flB2ZkgkVwp6bUByU1RheyZKRj1Zb2xjMDVLMH4kQUNFY2QrYUk/KCZ1bjBofCslcSNxYWBSP2tW
YSZyPkloYXA1TWt4PG5vT18KejtkYSs/UWRCNTI0fDJRZCElVWR6YzJ7QjAwZ21RWipHI3FQX203
UlRjSWlSfWFYQVMxWStQP00jRWx7SUMpUUY/CnpoQjA3YVJ0WT15aVVhS1JGUCR7dDV8N1dBajIx
UWpxTDF4d05VKmU+a2RXTnYpSiFqYjtwRUB7NE5qX1FzTGx2Tgp6SXAhV14/OzQkb15oNilUO0FP
NUR3QHlTQmI+RmpAMG18NWdxMXVBKDQwQXcja0NtIURGczg0PVdwPCozMlp7OUkKejV4RjM9Z05U
b25GdDhgKW4hQkpoJSpPfXpxTUU3VHBQPDFZU3QlJVpBfSohQStfM14ydW1XN005c1ZiYlY3QG5q
CnpOV09YTW8lJjkyKCpWRmhMd0FqS0N6NEc4bD0jbUc8VThrakw8V1JMNFdnQ21qRD1jVVo+ITkr
VF98RmVmYSF6Ugp6SCVYc1dvejtXIXppUEFDNSNsdVMhbENwJSlaMFY3fE1UP1Z0ZHNqWVducS15
XjBJVD9xcz9ZfHc9OW89TERiSFYKel5sNDk+eSNATkloP1RFQFRTYCVKLVJCK1AxYmtNZUFud150
MVAwUGxCVHRaRUVnJjhJPEBtbGIwOXlWX0N6Wn5+CnpfMn1jbyVeSEc9Tlg0KHZ4WlZhXmhgaiY0
OVAkKVlkKmRJWD58RjFFMWFyS3Y5dTtmR3QpOV9NVmUyfnZ4VHlHdQp6UEY7d0pPO0czMDl0KnFJ
UCgld1piJmpybitsYUV5bmR0MFheKTQ4eDNiZWA1MmRPRjNHb04qelBpT2REY0RSOEcKejFfUWZm
ezgoPj9FQzc+V2haXjZ1VTsya0ZBU25QS15nVV9xeUpINEgwMDskTllDP3RQRkxGYykwM2xfLTJk
WTEyCnpwQDhRQUskeFI7SWNeN280bHl4ZDRqcH5OeGBTQXMwQi1hajVAPXhkdn56Rno5aWpORz8t
OEJmcUdTcip4dj1nXgp6R2M1fGZnO1pnJG9oJX1IM3QqYjNRQC1zOGFoKz9KX3ZSa2crYXR5UT1j
TT4mPTUzdXtNQlZvKDxwYkNMb1g+R30KemBOaHA9eiMjZ2QxeWxyRGVJPWx1OG4/aHtRIzkteUwh
YXNZMUR0QCp4PihEeT9jZzgtOHh1eGBLI31PUjZNYC1XCnpzZ2VLRU56UHNPYkJwM196SndwTUNw
cnBYO3xwSChfM3RoXikhQEtlKlNqN25xa2pDLWIhOEIlM0p3YkRtRT9ZMgp6SGZWMXhqVGU7eyVF
JHZka2R6SX5SKClyWTZYRXR5cn5SanhAMTtuaUxEUjtKajJXVkpFdGF2JXY/djBBMzRyWCkKelF+
VjFWO3MxIURtaUZFRm5YbFdYQyUyamBsbzJFOVYqUSZAfE1uZmdWfVAjNyp+dW9zMHZuM0EqVlNX
b1ZEck87CnpZU3J3JDNpdG5BRCopYFV7RkczOUhocFglaGR4R3ZleHFeQFlLJUhrbXNkS1ByVFYr
TnhrUSNHS3Nod2c5ISN2KQp6WUE+IUQ3QClQJmIqbX43WCtsdD0/SUBMWXJoJmU3UG9KeTN7PE9D
USM5dTFHPTNDK01RaUd3NlJrUDE4ST99ZHQKemRObzE3ZFZGcDgtSFV6b14tMGBqeDM4V0JKbzYx
SihDai1WQDlDV0NwaSNBPW5ZIUhyNzFQbXRCSj0paW14WmgrCnpYSStJfCgyJWNVaENtME45fmkw
ZCgmLTk0IWlkc3M0ZWZ9NDhwJVFNUCtAJi0+eio7P1ZBUVZKOV9zXmRNUEZgWgp6VytEWFVqTE02
NUJ2dlJHQDsyRUJKMl43d1BnYDRzR0dMY2pVMVJ0ZHs2dG9icW4kVmFITnYofkVycWIkSSgzaGcK
enNAe3pMdkEtdTE3KitHdWVlcDcte2dKTT02WDVgWjMtNnhMZzJDOGwhRVhUbyhpVG17ej5aY0pA
NSh8cnNrdntpCnpjR2FSJGRpbH5we2dHNUpqMk1SQjY+c0NxSE5Lc1lJc3dMR3pLez5UWWBPQj9e
a21oKHZYUHYrOG0jPkUyaEheWQp6aCVOJiFZSVV8bl5lTTl5PnB5R15OQWdmcjk4MVcxXkVGQiVi
K25RR017SkRuY0A3a0JITW5TanE7VkRNS2t8RVoKenV9YSlwLVRJaV9NanFyWmVAQEl3Wn5RYnsj
SGVCOVpnTW5RVVZpPk8yJVR9S01NUEtEeW9IO0h0Tm5zT3tXMVA4Cnp3cmxwYDxlNTZ7YGpAeXBC
ZUNaOWs0b09WbTIhUzYyQUZLaTQwZDc1MkZVWWtqTFEpP2ZyNzt9YnA+aDlrP2gqYgp6MUhVUnhy
a0ItRWJhTjElYGhSRUhkJigxNU4pa3Y0Vk5KUmNkfV5HcyhzSzduRllXYXc0P3NFMkZ3cXdFY1ow
c0gKel8yeypDMmcwJWp1LUpgSG1EPlMxKytLd3F0QmVSc2ZSPHZ+RDM9KUJgbXhYNkVUSzUkVHc4
TnV2Tm5USm0yMExxCnoyfWAzd296aFVqLWEocmBZdiNWKGBGPjhpVjE+Y1JlWVV7aT8qWF5TJH1E
PVkzeE00M3lLYiUmR00oM3chKEE3awp6PXFtcGY9ZlZvb1I/SF5jN0k/KzhQaik/OHNXQGRZQVpC
bTR2Qm4pNXsoRHtHNmtKKU4wPCNMPlZkNUI3RkZQaUgKent1dHxmd1JwYGZycVomfjhXSDtvc0RY
fEVDfDRXTDJHQTRiM2BsWERXJFZpZDVpSD41MUt7VE9eREdoV3VCcX4mCnpvRHpiQkY8bmM0OUt6
RWZiLVZYaFhOWUJFPFJPKkd4KztudWVTZlhUSjlnISNjWHxRVGJMezE5UyVjakotXkteVwp6KWBa
YFkyWGF2LUolP2tSWU0jdEQ4dHViRlcpblIpaiFLZkJqbkY/Jmltd2JFYTV2bGRlaW9QQ14yTkkr
SS1hI3QKejduKEU2WVVLZ0BPM3tvYTVZRVlSPFRuYkJCOzlHTnBfdW54UGg4S1gwNm5mOW1DWiVW
Vkw5T0t1fkIyLT0xKkA9CnpTZClETlNwTWt5TDEoU3Z2REIxOCY2V2p4QXRCaWZkVkt8eVM/SkFK
S2tzOGBLKF91X2xGbGNId2NWVSZTZStxagp6R3stTCVQWHdLPGBHQjkkNWU4e0xRKUtubG02KTAj
Ky1ueG5CKShfbGJBYikqR3UlKzA4fVV3eHpzNzlVZ2ZjJEIKejtpN0FUN3chQmM1fGwrdUJheFlj
JEZoV3cpTDZUTWpVS2Q1VDRzPEp5WER3PSQpc0xfPXlBcVVZcHQoZnNDPikxCnpUaWx+MzB4RVVA
QHF3cXM4aFNNT2UpMDUzVUBoPGx4VU8zKmt0OUdFOz5Rdn4pO0FgTTxVQjRYdFFVWmVQOHJTSgp6
NShVZmtacmpUNGRnYkEtZ2hFK2dOKWdhc3tXZ1o5R2c3IWBKZGdNfkclVXNJcC0wfFZIcHs5fHg7
OzB0SypMaEEKej9iXiQpUnU4e0tRZnMpSEBUUX1jMThoaVBqTnFHUkludWZeWGQ2NHpYX2pAO3NS
NXtBd0xzfHw9RzRzPERgJFNOCnpVQW88OGhhPUJidChZTmIqKkcwOXRmZFUoJjd8Ym49dlFlOyUy
cStydVA2Z2dvamo8bVBOUk55MTs7K1Z0I3NeIwp6Xn5WbWljTz9Cbj1VPFhMWEx8OGxHWWEjfCV+
WTJDNHtWQk96dyE7O213SzlqQ0FgTUAwazBfZ3Vnfk9rOEwoTlAKejRDTkFtRkY0ZnllOEhpR0k2
JDY+KHlHT2g3cndvJkYxKWdwYzFae3tOWHRWRSp8NGErQ2c3M295JnNqOTBqViNHCnpOVjdqPkw7
SXpoNmcqczY2JV52KlBMbClxJGdeRi1NNDRJRDktRS1+cmcjY1I7MjlJPERAOEBCIV5gSGIyTjdJ
aQp6S2NfX2wrQl9sTEAmV2ImSCMmezNsKSsxUio0NTxUckNvNmchJnErLWtEbTRlZ1pIKlM7Qmc3
eEdSckt4SSl4P1cKek4keGl6RHxvNyo/JW44LWpXMVErK196UlYqISV8dk5ma2k/Z0NSSDZmbTZp
NV93NnNDb1FPPUJpSH0wZz1yZkRsCnpCYkV0ZC02JTFPUkBTMTVPKkl2ZyNpdlNDbTtCbnpwPWFx
fSszTmQrX1NSYTlgQUVNa2peMktTdn1XZFUrJGI5awp6I2w0dVkmLWh0czgqKkxeUmlNJHJfOUNI
JmdrX3kwSGRVQ1VGdn04Mi00V1JPQS18fDlKfDQydjdzQTwqWERBSXAKekJUaTE7KCleOCElRnFU
ZnpDZ3RvZkZfZD8wKXlARTI0JVdaMGc7YF5MZEN4UXtVcHxAWDJgRmtEKmlhPlg5ZjBmCnpyRlQ9
O3dyQzY/Wjx4PWIlT2lLRFR4aWExdyFjSzUhd0tAY1FQeiNRXjcoKio8NlF3VThkY0pDJDQ2ejhN
JnNYNAp6KD1lJFJCPDI5Z0hZe25SNjR4KFRqYTZCaVV6M3RBPDl1TzJtTSY5PkcqR09zKzgrQ1lL
UmZ2PWBzOTVQYTt1TjwKemBmVnV6Mit6PzJDWkFmRXJeRypTMUZeJXkpbHZeVV8lXiNQUkRFdGhl
X1Zealp9czQxcjJDaGZZUTd+WENKPWBxCnpKZkp4VTQ5SmhmJH1VeHt8TjVGRDYmfW9ob0pnOUR3
e183and3dHE9dT5Ka2c2XnBAeiRkNFNhXkc8ZWo7Zkp7Tgp6OzkpRGdZV0FSRFBBb2QoUkBzPztR
Rjcpemk5RT1XI25nP25heSlGa3J7P0AtYE5UM01zNll9fjlSb2tYZzBZS3QKemI2T2lmJW5haD9y
cU9ZNkg/VTFHKl5NcnxfcDx9O0wjR0NVJnIjREk5VmNJVHolaE9oQGM8Vm5RTUdPYzxvMEgpCnpH
dnN5cVhgU207dihGZDEmSzF5ZUs1QilrcCt2WTVwXzs5aG17NVZITShqSntqMFJDbXBvSk9kQlVl
S0J5MEZrMQp6SVA9T3kwdktmYWFOVCZAcSVaS2JtU3c9JXdRcDdBdWFOVlpHWEghRzh8P3xiJHIl
RTZmSDV9a2x2eCtPOz9jSlAKejU3I35OZjAhUXVmcjJOQDZWfGl4PHZxUihaRmwhWTNHfHRodUA5
VzNEQik8UCstOEdfSWdXb3t8Szlfa0sjMnFKCnp1THJfQiphbllCV2F7P1hTeCl8WEV2SHNIRHUw
c0Q1bEFgPnpKWihjJkRrRXZkMDdWMGt9fDNuajdVVDhqPTh8Nwp6V3glNzFodjZQVUo9fnNDa0Jr
bVpheVk5VzloQ1BSSzMpUX5TSHZ6TkgoX1RVYnBPbipUe3V6bShJdClqUTY+fDMKend+Ym8oVz0h
TDxXSkNmbnBfdXtVSnMoSjNJOX4qJXdReHxMVl9LR2VZM2UxWDNHTzRJd2R0RkFQKTdJOEErUk0k
CnpaWU14QyVRczNDYVE1RmY9IUtDZ29hfVpgIS0+WFphUi1FMFZORmckZnB3VkBrZ312VmAoJG0r
ckZyejdXcFZRVAp6ait3TllNPnpEKzl+Qn1mIUNOSUZhKFBSeTd5M1U9KT1heWspdXRVY3FfXnFK
cUIlYTs5Zm9wJiV5O2V9LTR1SzcKej1LS2laKmM2ejI3bjhwUDA+em9oUXVvKUdNfERZTW9hfHFN
SVY5YHppZSo5Z3xIUmVPNW8ySj11ZjN+ak1FeXlxCnpNUmRySWIzTisxMXs2eDUjKnk/dTtTKCU5
e1NkQC1hS0h6MTctJmZ5SHErJCFHWE8jZld0aUJINTQ2OCQwOF82NAp6RXZhaWttIUFKeDA8TFda
VDJpZjEkLT5ZYyZ9SjhhbShkSE5yPDhXfSRQfEdkbk9SNkZzRlBwMkd4LUJPdmQ+WTYKemNsRjVq
MWxyUk89IWJoZ3Y9P1EySUo1X2h6Y1BpJlVoM0ZPdUslISZKXkhhbihFZD0hSnFvK1dzclJhbS07
OCs9Cm84MjVtMjQ7WjF8IW9RUjtgalFYV3dvRGdQSnReeWcwZT56anNiOSFFWn5YQVQwN0twWDVD
OHhHCgpsaXRlcmFsIDAKSGNtVj9kMDAwMDEKCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9zdmcv
Y3VzdG9tL3BvaW50ZXItZXZlbnRzLW9uLXJvdW5kZWQtcmVjdC1leHBlY3RlZC50eHQgYi9MYXlv
dXRUZXN0cy9zdmcvY3VzdG9tL3BvaW50ZXItZXZlbnRzLW9uLXJvdW5kZWQtcmVjdC1leHBlY3Rl
ZC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWE2ZjllNAotLS0gL2Rl
di9udWxsCisrKyBiL0xheW91dFRlc3RzL3N2Zy9jdXN0b20vcG9pbnRlci1ldmVudHMtb24tcm91
bmRlZC1yZWN0LWV4cGVjdGVkLnR4dApAQCAtMCwwICsxLDYgQEAKK2xheWVyIGF0ICgwLDApIHNp
emUgODAweDYwMAorICBSZW5kZXJWaWV3IGF0ICgwLDApIHNpemUgODAweDYwMAorbGF5ZXIgYXQg
KDAsMCkgc2l6ZSA4MDB4NjAwCisgIFJlbmRlclNWR1Jvb3Qge3N2Z30gYXQgKDMwLDMwKSBzaXpl
IDQyMHgzMjAKKyAgICBSZW5kZXJTVkdIaWRkZW5Db250YWluZXIge2RlZnN9IGF0ICgwLDApIHNp
emUgMHgwCisgICAgUmVuZGVyU1ZHUmVjdCB7cmVjdH0gYXQgKDMwLDMwKSBzaXplIDQyMHgzMjAg
W3N0cm9rZT17W3R5cGU9U09MSURdIFtjb2xvcj0jMDA4MDAwXSBbc3Ryb2tlIHdpZHRoPTIwLjAw
XSBbbGluZSBqb2luPUJFVkVMXSBbZGFzaCBhcnJheT17NTAuMDAsIDE1LjAwfV19XSBbZmlsbD17
W3R5cGU9U09MSURdIFtjb2xvcj0jRkZGRjAwXSBbb3BhY2l0eT0wLjUwXX1dIFt4PTQwLjAwXSBb
eT00MC4wMF0gW3dpZHRoPTQwMC4wMF0gW2hlaWdodD0zMDAuMDBdCmRpZmYgLS1naXQgYS9MYXlv
dXRUZXN0cy9zdmcvY3VzdG9tL3BvaW50ZXItZXZlbnRzLW9uLXJvdW5kZWQtcmVjdC5zdmcgYi9M
YXlvdXRUZXN0cy9zdmcvY3VzdG9tL3BvaW50ZXItZXZlbnRzLW9uLXJvdW5kZWQtcmVjdC5zdmcK
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjY1ZjgxOAotLS0gL2Rldi9udWxs
CisrKyBiL0xheW91dFRlc3RzL3N2Zy9jdXN0b20vcG9pbnRlci1ldmVudHMtb24tcm91bmRlZC1y
ZWN0LnN2ZwpAQCAtMCwwICsxLDIxIEBACis8c3ZnIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8y
MDAwL3N2ZyI+Cis8ZGVmcz4KKworPHN0eWxlIHR5cGU9InRleHQvY3NzIj48IVtDREFUQVsKK3Jl
Y3QgeworCWZpbGw6IHllbGxvdzsKKwlmaWxsLW9wYWNpdHk6IDAuNTsKKwlzdHJva2U6IGdyZWVu
OworCXN0cm9rZS13aWR0aDogMjBweDsKKwlzdHJva2UtbGluZWpvaW46IGJldmVsOworCXN0cm9r
ZS1kYXNoYXJyYXk6IDUwIDE1OworfQorcmVjdDpob3ZlciB7CisJc3Ryb2tlOiByZWQ7Cit9IAor
XV0+PC9zdHlsZT4KKzwvZGVmcz4KKworPHJlY3QgeD0iNDAiIHk9IjQwIiByeD0iMzAiIHJ5PSIz
MCIgd2lkdGg9IjQwMCIgaGVpZ2h0PSIzMDAiIHBvaW50ZXItZXZlbnRzPSJ2aXNpYmxlU3Ryb2tl
IiAvPgorCis8L3N2Zz4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NNYWtlTGlzdHMudHh0
IGIvU291cmNlL1dlYkNvcmUvQ01ha2VMaXN0cy50eHQKaW5kZXggNTQ1ZGY2ZS4uM2IyYzY5OCAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ01ha2VMaXN0cy50eHQKKysrIGIvU291cmNlL1dl
YkNvcmUvQ01ha2VMaXN0cy50eHQKQEAgLTE1OTMsNiArMTU5Myw3IEBAIElGIChFTkFCTEVfU1ZH
KQogICAgICAgICByZW5kZXJpbmcvc3ZnL1JlbmRlclNWR0lubGluZVRleHQuY3BwCiAgICAgICAg
IHJlbmRlcmluZy9zdmcvUmVuZGVyU1ZHTW9kZWxPYmplY3QuY3BwCiAgICAgICAgIHJlbmRlcmlu
Zy9zdmcvUmVuZGVyU1ZHUGF0aC5jcHAKKyAgICAgICAgcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdS
ZWN0LmNwcAogICAgICAgICByZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291cmNlLmNwcAogICAg
ICAgICByZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291cmNlQ2xpcHBlci5jcHAKICAgICAgICAg
cmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJjZUNvbnRhaW5lci5jcHAKQEAgLTE2MDcsNiAr
MTYwOCw3IEBAIElGIChFTkFCTEVfU1ZHKQogICAgICAgICByZW5kZXJpbmcvc3ZnL1JlbmRlclNW
R1Jlc291cmNlU29saWRDb2xvci5jcHAKICAgICAgICAgcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdS
b290LmNwcAogICAgICAgICByZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1NoYWRvd1RyZWVSb290Q29u
dGFpbmVyLmNwcAorICAgICAgICByZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1NoYXBlLmNwcAogICAg
ICAgICByZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1RTcGFuLmNwcAogICAgICAgICByZW5kZXJpbmcv
c3ZnL1JlbmRlclNWR1RleHQuY3BwCiAgICAgICAgIHJlbmRlcmluZy9zdmcvUmVuZGVyU1ZHVGV4
dFBhdGguY3BwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cgYi9Tb3VyY2Uv
V2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggODk1MWE3My4uNzY4YWU1YSAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAt
MSwzICsxLDEzOSBAQAorMjAxMS0wOC0zMCAgUmVuYXRhIEhvZG92YW4gIDxyZW5pQHdlYmtpdC5v
cmc+CisKKyAgICAgICAgQWRkIG5ldyByZW5kZXJlciBmb3IgU1ZHUmVjdEVsZW1lbnQuCisgICAg
ICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD02NTc2OQorCisgICAg
ICAgIEFkZGluZyBhIG5ldyBmcmFtZXdvcmsgdG8gc3VwcG9ydCB0aGUgcmVuZGVyaW5nIG9mIFNW
RyBzaGFwZXMuCisgICAgICAgIFRoZSBtYWluIGxvZ2ljIHRha2VzIHBsYWNlIGluIFJlbmRlclNW
R1NoYXBlIGNsYXNzIGFuZCBldmVyeSByZW5kZXJlciB3aWxsCisgICAgICAgIGluaGVyaXQgZnJv
bSBpdC4gU2luY2UgaXRzIGNvZGUgYmFzZSBpcyBtb3N0bHkgbW92ZWQgZnJvbSBSZW5kZXJTVkdQ
YXRoIGl0J3Mgc3VpdGFibGUgdG8KKyAgICAgICAgaGFuZGxlIHRoZSBmYWxsYmFjayBjYXNlcyAo
ZS5nLjogcm91bmRlZCByZWN0cywgc3BlY2lhbCBzdHJva2VzLCBwb2ludGVyIGV2ZW50cywgZXRj
LikKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIENN
YWtlTGlzdHMudHh0OgorICAgICAgICAqIEdOVW1ha2VmaWxlLmxpc3QuYW06CisgICAgICAgICog
V2ViQ29yZS5neXBpOgorICAgICAgICAqIFdlYkNvcmUucHJvOgorICAgICAgICAqIFdlYkNvcmUu
dmNwcm9qL1dlYkNvcmUudmNwcm9qOgorICAgICAgICAqIFdlYkNvcmUueGNvZGVwcm9qL3Byb2pl
Y3QucGJ4cHJvajoKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyT2JqZWN0Lmg6CisgICAgICAg
IChXZWJDb3JlOjpSZW5kZXJPYmplY3Q6OmlzU1ZHTGluZSk6CisgICAgICAgIChXZWJDb3JlOjpS
ZW5kZXJPYmplY3Q6OmlzU1ZHUmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJPYmplY3Q6
OmlzU1ZHU2hhcGUpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJUcmVlQXNUZXh0LmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OndyaXRlKToKKyAgICAgICAgKiByZW5kZXJpbmcvc3ZnL1JlbmRl
clNWR0FsbEluT25lLmNwcDoKKyAgICAgICAgKiByZW5kZXJpbmcvc3ZnL1JlbmRlclNWR01vZGVs
T2JqZWN0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmlzR3JhcGhpY3NFbGVtZW50KToKKyAgICAg
ICAgKiByZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1BhdGguY3BwOgorICAgICAgICAoV2ViQ29yZTo6
UmVuZGVyU1ZHUGF0aDo6UmVuZGVyU1ZHUGF0aCk6CisgICAgICAgICogcmVuZGVyaW5nL3N2Zy9S
ZW5kZXJTVkdQYXRoLmg6CisgICAgICAgICogcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZWN0LmNw
cDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJTVkdSZWN0OjpSZW5kZXJTVkdSZWN0
KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclNWR1JlY3Q6On5SZW5kZXJTVkdSZWN0KToKKyAg
ICAgICAgKFdlYkNvcmU6OlJlbmRlclNWR1JlY3Q6OmNyZWF0ZVNoYXBlKToKKyAgICAgICAgKFdl
YkNvcmU6OlJlbmRlclNWR1JlY3Q6Om9iamVjdEJvdW5kaW5nQm94KToKKyAgICAgICAgKFdlYkNv
cmU6OlJlbmRlclNWR1JlY3Q6OnN0cm9rZUJvdW5kaW5nQm94KToKKyAgICAgICAgKFdlYkNvcmU6
OlJlbmRlclNWR1JlY3Q6OmZpbGxTaGFwZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJTVkdS
ZWN0OjpzdHJva2VTaGFwZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJTVkdSZWN0OjpzdHJv
a2VDb250YWluc1Nsb3dDYXNlKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclNWR1JlY3Q6OmZp
bGxDb250YWluc1Nsb3dDYXNlKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclNWR1JlY3Q6OmRl
dGVybWluZVBvaW50TG9jYXRpb24pOgorICAgICAgICAqIHJlbmRlcmluZy9zdmcvUmVuZGVyU1ZH
UmVjdC5oOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclNWR1JlY3Q6OmlzU1ZHUmVj
dCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJTVkdSZWN0OjpyZW5kZXJOYW1lKToKKyAgICAg
ICAgKFdlYkNvcmU6OlJlbmRlclNWR1JlY3Q6OmlzRW1wdHkpOgorICAgICAgICAqIHJlbmRlcmlu
Zy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2UuaDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclNWR1Jl
c291cmNlOjpwb3N0QXBwbHlSZXNvdXJjZSk6CisgICAgICAgICogcmVuZGVyaW5nL3N2Zy9SZW5k
ZXJTVkdSZXNvdXJjZUNsaXBwZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU1ZHUmVz
b3VyY2VDbGlwcGVyOjpkcmF3Q29udGVudEludG9NYXNrSW1hZ2UpOgorICAgICAgICAoV2ViQ29y
ZTo6UmVuZGVyU1ZHUmVzb3VyY2VDbGlwcGVyOjpjYWxjdWxhdGVDbGlwQ29udGVudFJlcGFpbnRS
ZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclNWR1Jlc291cmNlQ2xpcHBlcjo6aGl0VGVz
dENsaXBDb250ZW50KToKKyAgICAgICAgKiByZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291cmNl
Q29udGFpbmVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclNWR1Jlc291cmNlQ29udGFp
bmVyOjp0cmFuc2Zvcm1Pbk5vblNjYWxpbmdTdHJva2UpOgorICAgICAgICAqIHJlbmRlcmluZy9z
dmcvUmVuZGVyU1ZHUmVzb3VyY2VGaWx0ZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVy
U1ZHUmVzb3VyY2VGaWx0ZXI6OnBvc3RBcHBseVJlc291cmNlKToKKyAgICAgICAgKiByZW5kZXJp
bmcvc3ZnL1JlbmRlclNWR1Jlc291cmNlRmlsdGVyLmg6CisgICAgICAgICogcmVuZGVyaW5nL3N2
Zy9SZW5kZXJTVkdSZXNvdXJjZUdyYWRpZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRl
clNWR1Jlc291cmNlR3JhZGllbnQ6OmFwcGx5UmVzb3VyY2UpOgorICAgICAgICAqIHJlbmRlcmlu
Zy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VHcmFkaWVudC5oOgorICAgICAgICAqIHJlbmRlcmluZy9z
dmcvUmVuZGVyU1ZHUmVzb3VyY2VQYXR0ZXJuLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRl
clNWR1Jlc291cmNlUGF0dGVybjo6cG9zdEFwcGx5UmVzb3VyY2UpOgorICAgICAgICAqIHJlbmRl
cmluZy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VQYXR0ZXJuLmg6CisgICAgICAgICogcmVuZGVyaW5n
L3N2Zy9SZW5kZXJTVkdSZXNvdXJjZVNvbGlkQ29sb3IuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
UmVuZGVyU1ZHUmVzb3VyY2VTb2xpZENvbG9yOjpwb3N0QXBwbHlSZXNvdXJjZSk6CisgICAgICAg
ICogcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJjZVNvbGlkQ29sb3IuaDoKKyAgICAgICAg
KiByZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1NoYXBlLmNwcDogQ29waWVkIGZyb20gU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdQYXRoLmNwcC4KKyAgICAgICAgKFdlYkNvcmU6
OlJlbmRlclNWR1NoYXBlOjpSZW5kZXJTVkdTaGFwZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5k
ZXJTVkdTaGFwZTo6flJlbmRlclNWR1NoYXBlKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclNW
R1NoYXBlOjpjcmVhdGVTaGFwZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJTVkdTaGFwZTo6
aXNFbXB0eSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJTVkdTaGFwZTo6ZmlsbFNoYXBlKToK
KyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclNWR1NoYXBlOjpvYmplY3RCb3VuZGluZ0JveCk6Cisg
ICAgICAgIChXZWJDb3JlOjpSZW5kZXJTVkdTaGFwZTo6c3Ryb2tlQm91bmRpbmdCb3gpOgorICAg
ICAgICAoV2ViQ29yZTo6UmVuZGVyU1ZHU2hhcGU6OnN0cm9rZVNoYXBlKToKKyAgICAgICAgKFdl
YkNvcmU6OlJlbmRlclNWR1NoYXBlOjpzdHJva2VDb250YWluc1Nsb3dDYXNlKToKKyAgICAgICAg
KFdlYkNvcmU6OlJlbmRlclNWR1NoYXBlOjpmaWxsQ29udGFpbnNTbG93Q2FzZSk6CisgICAgICAg
IChXZWJDb3JlOjpSZW5kZXJTVkdTaGFwZTo6ZmlsbENvbnRhaW5zKToKKyAgICAgICAgKFdlYkNv
cmU6OlJlbmRlclNWR1NoYXBlOjpzdHJva2VDb250YWlucyk6CisgICAgICAgIChXZWJDb3JlOjpS
ZW5kZXJTVkdTaGFwZTo6bGF5b3V0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclNWR1NoYXBl
OjpzaG91bGRTdHJva2VaZXJvTGVuZ3RoU3VicGF0aCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5k
ZXJTVkdTaGFwZTo6emVyb0xlbmd0aFN1YnBhdGhSZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJl
bmRlclNWR1NoYXBlOjpzZXR1cFNxdWFyZUNhcFBhdGgpOgorICAgICAgICAoV2ViQ29yZTo6UmVu
ZGVyU1ZHU2hhcGU6OnNldHVwTm9uU2NhbGluZ1N0cm9rZVBhdGgpOgorICAgICAgICAoV2ViQ29y
ZTo6UmVuZGVyU1ZHU2hhcGU6OmZpbGxBbmRTdHJva2VQYXRoKToKKyAgICAgICAgKFdlYkNvcmU6
OlJlbmRlclNWR1NoYXBlOjpwYWludCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJTVkdTaGFw
ZTo6YWRkRm9jdXNSaW5nUmVjdHMpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU1ZHU2hhcGU6
Om5vZGVBdEZsb2F0UG9pbnQpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU1ZHU2hhcGU6OmNh
bGN1bGF0ZU1hcmtlckJvdW5kc0lmTmVlZGVkKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclNW
R1NoYXBlOjp1cGRhdGVDYWNoZWRCb3VuZGFyaWVzKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRl
clNWR1NoYXBlOjpzdHJva2VXaWR0aCk6CisgICAgICAgICogcmVuZGVyaW5nL3N2Zy9SZW5kZXJT
VkdTaGFwZS5oOiBDb3BpZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRl
clNWR1BhdGguaC4KKyAgICAgICAgKFdlYkNvcmU6OkJvdW5kaW5nUmVjdFN0cm9rZVN0eWxlQXBw
bGllcjo6Qm91bmRpbmdSZWN0U3Ryb2tlU3R5bGVBcHBsaWVyKToKKyAgICAgICAgKFdlYkNvcmU6
OkJvdW5kaW5nUmVjdFN0cm9rZVN0eWxlQXBwbGllcjo6c3Ryb2tlU3R5bGUpOgorICAgICAgICAo
V2ViQ29yZTo6UmVuZGVyU1ZHU2hhcGU6OnNldE5lZWRzU2hhcGVVcGRhdGUpOgorICAgICAgICAo
V2ViQ29yZTo6UmVuZGVyU1ZHU2hhcGU6OnNldE5lZWRzQm91bmRhcmllc1VwZGF0ZSk6CisgICAg
ICAgIChXZWJDb3JlOjpSZW5kZXJTVkdTaGFwZTo6c2V0TmVlZHNUcmFuc2Zvcm1VcGRhdGUpOgor
ICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU1ZHU2hhcGU6OnN0cm9rZUJvdW5kaW5nQm94KToKKyAg
ICAgICAgKFdlYkNvcmU6OlJlbmRlclNWR1NoYXBlOjpyZXBhaW50UmVjdEluTG9jYWxDb29yZGlu
YXRlcyk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJTVkdTaGFwZTo6bG9jYWxUb1BhcmVudFRy
YW5zZm9ybSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJTVkdTaGFwZTo6aXNTVkdTaGFwZSk6
CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJTVkdTaGFwZTo6cmVuZGVyTmFtZSk6CisgICAgICAg
IChXZWJDb3JlOjpSZW5kZXJTVkdTaGFwZTo6cGF0aCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5k
ZXJTVkdTaGFwZTo6cGF0aFB0cik6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJTVkdTaGFwZTo6
aGFzUGF0aCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJTVkdTaGFwZTo6bG9jYWxUcmFuc2Zv
cm0pOgorICAgICAgICAoV2ViQ29yZTo6dG9SZW5kZXJTVkdTaGFwZSk6CisgICAgICAgICogcmVu
ZGVyaW5nL3N2Zy9TVkdJbmxpbmVUZXh0Qm94LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR0lu
bGluZVRleHRCb3g6OnJlbGVhc2VQYWludGluZ1Jlc291cmNlKToKKyAgICAgICAgKiByZW5kZXJp
bmcvc3ZnL1NWR1JlbmRlclN1cHBvcnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U1ZHUmVuZGVy
U3VwcG9ydDo6ZmluaXNoUmVuZGVyU1ZHQ29udGVudCk6CisgICAgICAgIChXZWJDb3JlOjpTVkdS
ZW5kZXJTdXBwb3J0OjpsYXlvdXRDaGlsZHJlbik6CisgICAgICAgICogcmVuZGVyaW5nL3N2Zy9T
VkdSZW5kZXJUcmVlQXNUZXh0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OndyaXRlU3R5bGUpOgor
ICAgICAgICAoV2ViQ29yZTo6b3BlcmF0b3I8PCk6CisgICAgICAgIChXZWJDb3JlOjp3cml0ZSk6
CisgICAgICAgICogcmVuZGVyaW5nL3N2Zy9TVkdSZW5kZXJUcmVlQXNUZXh0Lmg6CisgICAgICAg
ICogcmVuZGVyaW5nL3N2Zy9TVkdUZXh0UnVuUmVuZGVyaW5nQ29udGV4dC5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpTVkdUZXh0UnVuUmVuZGVyaW5nQ29udGV4dDo6ZHJhd1NWR0dseXBocyk6Cisg
ICAgICAgICogc3ZnL1NWR0NpcmNsZUVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U1ZH
Q2lyY2xlRWxlbWVudDo6c3ZnQXR0cmlidXRlQ2hhbmdlZCk6CisgICAgICAgICogc3ZnL1NWR0Vs
bGlwc2VFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR0VsbGlwc2VFbGVtZW50Ojpz
dmdBdHRyaWJ1dGVDaGFuZ2VkKToKKyAgICAgICAgKiBzdmcvU1ZHTGluZUVsZW1lbnQuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6U1ZHTGluZUVsZW1lbnQ6OnN2Z0F0dHJpYnV0ZUNoYW5nZWQpOgor
ICAgICAgICAqIHN2Zy9TVkdQYXRoRWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTVkdQ
YXRoRWxlbWVudDo6c3ZnQXR0cmlidXRlQ2hhbmdlZCk6CisgICAgICAgIChXZWJDb3JlOjpTVkdQ
YXRoRWxlbWVudDo6cGF0aFNlZ0xpc3RDaGFuZ2VkKToKKyAgICAgICAgKFdlYkNvcmU6OlNWR1Bh
dGhFbGVtZW50OjpjcmVhdGVSZW5kZXJlcik6CisgICAgICAgICogc3ZnL1NWR1BhdGhFbGVtZW50
Lmg6CisgICAgICAgICogc3ZnL1NWR1BvbHlFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OlNWR1BvbHlFbGVtZW50OjpzdmdBdHRyaWJ1dGVDaGFuZ2VkKToKKyAgICAgICAgKiBzdmcvU1ZH
UmVjdEVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U1ZHUmVjdEVsZW1lbnQ6OnN2Z0F0
dHJpYnV0ZUNoYW5nZWQpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHUmVjdEVsZW1lbnQ6OmNyZWF0
ZVJlbmRlcmVyKToKKyAgICAgICAgKiBzdmcvU1ZHUmVjdEVsZW1lbnQuaDoKKwogMjAxMS0wOC0y
OSAgUnlvc3VrZSBOaXdhICA8cm5pd2FAd2Via2l0Lm9yZz4KIAogICAgICAgICBUb3VjaCBJbnRl
cm5hbHMuY3BwIGluIGFuIGF0dGVtcHQgdG8gZml4IEdUSysgYnVpbGQuCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9HTlVtYWtlZmlsZS5saXN0LmFtIGIvU291cmNlL1dlYkNvcmUvR05VbWFr
ZWZpbGUubGlzdC5hbQppbmRleCA4ZTBlMWMxLi5iMGQ3YTcwIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9HTlVtYWtlZmlsZS5saXN0LmFtCisrKyBiL1NvdXJjZS9XZWJDb3JlL0dOVW1ha2Vm
aWxlLmxpc3QuYW0KQEAgLTMyMDAsNiArMzIwMCw4IEBAIHdlYmNvcmVfc291cmNlcyArPSBcCiAJ
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdNb2RlbE9iamVjdC5oIFwKIAlT
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1BhdGguY3BwIFwKIAlTb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1BhdGguaCBcCisJU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZWN0LmNwcCBcCisJU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL3N2Zy9SZW5kZXJTVkdSZWN0LmggXAogCVNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcv
UmVuZGVyU1ZHUmVzb3VyY2VDbGlwcGVyLmNwcCBcCiAJU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L3N2Zy9SZW5kZXJTVkdSZXNvdXJjZUNsaXBwZXIuaCBcCiAJU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJjZUNvbnRhaW5lci5jcHAgXApAQCAtMzIyOCw2ICszMjMw
LDggQEAgd2ViY29yZV9zb3VyY2VzICs9IFwKIAlTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3Zn
L1JlbmRlclNWR1Jvb3QuaCBcCiAJU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJT
VkdTaGFkb3dUcmVlUm9vdENvbnRhaW5lci5jcHAgXAogCVNvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9zdmcvUmVuZGVyU1ZHU2hhZG93VHJlZVJvb3RDb250YWluZXIuaCBcCisJU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdTaGFwZS5jcHAgXAorCVNvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9zdmcvUmVuZGVyU1ZHU2hhcGUuaCBcCiAJU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L3N2Zy9SZW5kZXJTVkdUU3Bhbi5jcHAgXAogCVNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcv
UmVuZGVyU1ZHVFNwYW4uaCBcCiAJU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJT
VkdUZXh0LmNwcCBcCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkgYi9T
b3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkKaW5kZXggOTEwYTg2ZC4uOThjZDE5MyAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBpCisrKyBiL1NvdXJjZS9XZWJDb3JlL1dl
YkNvcmUuZ3lwaQpAQCAtNTgzNyw2ICs1ODM3LDggQEAKICAgICAgICAgICAgICdyZW5kZXJpbmcv
c3ZnL1JlbmRlclNWR01vZGVsT2JqZWN0LmgnLAogICAgICAgICAgICAgJ3JlbmRlcmluZy9zdmcv
UmVuZGVyU1ZHUGF0aC5jcHAnLAogICAgICAgICAgICAgJ3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZH
UGF0aC5oJywKKyAgICAgICAgICAgICdyZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1JlY3QuY3BwJywK
KyAgICAgICAgICAgICdyZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1JlY3QuaCcsCiAgICAgICAgICAg
ICAncmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJjZS5jcHAnLAogICAgICAgICAgICAgJ3Jl
bmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2UuaCcsCiAgICAgICAgICAgICAncmVuZGVyaW5n
L3N2Zy9SZW5kZXJTVkdSZXNvdXJjZUNsaXBwZXIuY3BwJywKQEAgLTU4NjUsNiArNTg2Nyw4IEBA
CiAgICAgICAgICAgICAncmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSb290LmgnLAogICAgICAgICAg
ICAgJ3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHU2hhZG93VHJlZVJvb3RDb250YWluZXIuY3BwJywK
ICAgICAgICAgICAgICdyZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1NoYWRvd1RyZWVSb290Q29udGFp
bmVyLmgnLAorICAgICAgICAgICAgJ3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHU2hhcGUuY3BwJywK
KyAgICAgICAgICAgICdyZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1NoYXBlLmgnLAogICAgICAgICAg
ICAgJ3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHVFNwYW4uY3BwJywKICAgICAgICAgICAgICdyZW5k
ZXJpbmcvc3ZnL1JlbmRlclNWR1RTcGFuLmgnLAogICAgICAgICAgICAgJ3JlbmRlcmluZy9zdmcv
UmVuZGVyU1ZHVGV4dC5jcHAnLApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5w
cm8gYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnBybwppbmRleCA0NzNmZmQzLi4wNGY1NTljIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnBybworKysgYi9Tb3VyY2UvV2ViQ29y
ZS9XZWJDb3JlLnBybwpAQCAtMjI3Miw2ICsyMjcyLDcgQEAgSEVBREVSUyArPSBcCiAgICAgcmVu
ZGVyaW5nL3N2Zy9SZW5kZXJTVkdJbmxpbmVUZXh0LmggXAogICAgIHJlbmRlcmluZy9zdmcvUmVu
ZGVyU1ZHTW9kZWxPYmplY3QuaCBcCiAgICAgcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdQYXRoLmgg
XAorICAgIHJlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVjdC5oIFwKICAgICByZW5kZXJpbmcvc3Zn
L1JlbmRlclNWR1Jlc291cmNlLmggXAogICAgIHJlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVzb3Vy
Y2VDbGlwcGVyLmggXAogICAgIHJlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VDb250YWlu
ZXIuaCBcCkBAIC0yMjg2LDYgKzIyODcsNyBAQCBIRUFERVJTICs9IFwKICAgICByZW5kZXJpbmcv
c3ZnL1JlbmRlclNWR1Jlc291cmNlU29saWRDb2xvci5oIFwKICAgICByZW5kZXJpbmcvc3ZnL1Jl
bmRlclNWR1Jvb3QuaCBcCiAgICAgcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdTaGFkb3dUcmVlUm9v
dENvbnRhaW5lci5oIFwKKyAgICByZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1NoYXBlLmggXAogICAg
IHJlbmRlcmluZy9zdmcvUmVuZGVyU1ZHVFNwYW4uaCBcCiAgICAgcmVuZGVyaW5nL3N2Zy9SZW5k
ZXJTVkdUZXh0LmggXAogICAgIHJlbmRlcmluZy9zdmcvUmVuZGVyU1ZHVGV4dFBhdGguaCBcCkBA
IC0zMzA3LDYgKzMzMDksOCBAQCBjb250YWlucyhERUZJTkVTLCBFTkFCTEVfU1ZHPTEpIHsKICAg
ICAgICAgcmVuZGVyaW5nL3N0eWxlL1NWR1JlbmRlclN0eWxlRGVmcy5jcHAgXAogICAgICAgICBy
ZW5kZXJpbmcvUG9pbnRlckV2ZW50c0hpdFJ1bGVzLmNwcCBcCiAgICAgICAgIHJlbmRlcmluZy9z
dmcvUmVuZGVyU1ZHUGF0aC5jcHAgXAorICAgICAgICByZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jl
Y3QuY3BwIFwKKyAgICAgICAgcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdTaGFwZS5jcHAgXAogICAg
ICAgICBzdmcvYW5pbWF0aW9uL1NNSUxUaW1lLmNwcCBcCiAgICAgICAgIHN2Zy9hbmltYXRpb24v
U01JTFRpbWVDb250YWluZXIuY3BwIFwKICAgICAgICAgc3ZnL2FuaW1hdGlvbi9TVkdTTUlMRWxl
bWVudC5jcHAgXApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS52Y3Byb2ovV2Vi
Q29yZS52Y3Byb2ogYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnZjcHJvai9XZWJDb3JlLnZjcHJv
agppbmRleCAyZDkyMDY0Li5jMGFmZGJkIDEwMDc1NQotLS0gYS9Tb3VyY2UvV2ViQ29yZS9XZWJD
b3JlLnZjcHJvai9XZWJDb3JlLnZjcHJvagorKysgYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnZj
cHJvai9XZWJDb3JlLnZjcHJvagpAQCAtNDE2MjMsNiArNDE2MjMsMTE4IEBACiAJCQkJCT4KIAkJ
CQk8L0ZpbGU+CiAJCQkJPEZpbGUKKwkJCQkJUmVsYXRpdmVQYXRoPSIuLlxyZW5kZXJpbmdcc3Zn
XFJlbmRlclNWR1JlY3QuY3BwIgorCQkJCQk+CisJCQkJCTxGaWxlQ29uZmlndXJhdGlvbgorCQkJ
CQkJTmFtZT0iRGVidWd8V2luMzIiCisJCQkJCQlFeGNsdWRlZEZyb21CdWlsZD0idHJ1ZSIKKwkJ
CQkJCT4KKwkJCQkJCTxUb29sCisJCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIKKwkJCQkJ
CS8+CisJCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+CisJCQkJCTxGaWxlQ29uZmlndXJhdGlvbgor
CQkJCQkJTmFtZT0iUmVsZWFzZXxXaW4zMiIKKwkJCQkJCUV4Y2x1ZGVkRnJvbUJ1aWxkPSJ0cnVl
IgorCQkJCQkJPgorCQkJCQkJPFRvb2wKKwkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIgor
CQkJCQkJLz4KKwkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4KKwkJCQkJPEZpbGVDb25maWd1cmF0
aW9uCisJCQkJCQlOYW1lPSJEZWJ1Z19DYWlyb19DRkxpdGV8V2luMzIiCisJCQkJCQlFeGNsdWRl
ZEZyb21CdWlsZD0idHJ1ZSIKKwkJCQkJCT4KKwkJCQkJCTxUb29sCisJCQkJCQkJTmFtZT0iVkND
TENvbXBpbGVyVG9vbCIKKwkJCQkJCS8+CisJCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+CisJCQkJ
CTxGaWxlQ29uZmlndXJhdGlvbgorCQkJCQkJTmFtZT0iUmVsZWFzZV9DYWlyb19DRkxpdGV8V2lu
MzIiCisJCQkJCQlFeGNsdWRlZEZyb21CdWlsZD0idHJ1ZSIKKwkJCQkJCT4KKwkJCQkJCTxUb29s
CisJCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIKKwkJCQkJCS8+CisJCQkJCTwvRmlsZUNv
bmZpZ3VyYXRpb24+CisJCQkJCTxGaWxlQ29uZmlndXJhdGlvbgorCQkJCQkJTmFtZT0iRGVidWdf
QWxsfFdpbjMyIgorCQkJCQkJRXhjbHVkZWRGcm9tQnVpbGQ9InRydWUiCisJCQkJCQk+CisJCQkJ
CQk8VG9vbAorCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiCisJCQkJCQkvPgorCQkJCQk8
L0ZpbGVDb25maWd1cmF0aW9uPgorCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24KKwkJCQkJCU5hbWU9
IlByb2R1Y3Rpb258V2luMzIiCisJCQkJCQlFeGNsdWRlZEZyb21CdWlsZD0idHJ1ZSIKKwkJCQkJ
CT4KKwkJCQkJCTxUb29sCisJCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIKKwkJCQkJCS8+
CisJCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+CisJCQkJPC9GaWxlPgorCQkJCTxGaWxlCisJCQkJ
CVJlbGF0aXZlUGF0aD0iLi5ccmVuZGVyaW5nXHN2Z1xSZW5kZXJTVkdSZWN0LmgiCisJCQkJCT4K
KwkJCQk8L0ZpbGU+CisJCQkJPEZpbGUKKwkJCQkJUmVsYXRpdmVQYXRoPSIuLlxyZW5kZXJpbmdc
c3ZnXFJlbmRlclNWR1NoYXBlLmNwcCIKKwkJCQkJPgorCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24K
KwkJCQkJCU5hbWU9IkRlYnVnfFdpbjMyIgorCQkJCQkJRXhjbHVkZWRGcm9tQnVpbGQ9InRydWUi
CisJCQkJCQk+CisJCQkJCQk8VG9vbAorCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiCisJ
CQkJCQkvPgorCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPgorCQkJCQk8RmlsZUNvbmZpZ3VyYXRp
b24KKwkJCQkJCU5hbWU9IlJlbGVhc2V8V2luMzIiCisJCQkJCQlFeGNsdWRlZEZyb21CdWlsZD0i
dHJ1ZSIKKwkJCQkJCT4KKwkJCQkJCTxUb29sCisJCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9v
bCIKKwkJCQkJCS8+CisJCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+CisJCQkJCTxGaWxlQ29uZmln
dXJhdGlvbgorCQkJCQkJTmFtZT0iRGVidWdfQ2Fpcm9fQ0ZMaXRlfFdpbjMyIgorCQkJCQkJRXhj
bHVkZWRGcm9tQnVpbGQ9InRydWUiCisJCQkJCQk+CisJCQkJCQk8VG9vbAorCQkJCQkJCU5hbWU9
IlZDQ0xDb21waWxlclRvb2wiCisJCQkJCQkvPgorCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPgor
CQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24KKwkJCQkJCU5hbWU9IlJlbGVhc2VfQ2Fpcm9fQ0ZMaXRl
fFdpbjMyIgorCQkJCQkJRXhjbHVkZWRGcm9tQnVpbGQ9InRydWUiCisJCQkJCQk+CisJCQkJCQk8
VG9vbAorCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiCisJCQkJCQkvPgorCQkJCQk8L0Zp
bGVDb25maWd1cmF0aW9uPgorCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24KKwkJCQkJCU5hbWU9IkRl
YnVnX0FsbHxXaW4zMiIKKwkJCQkJCUV4Y2x1ZGVkRnJvbUJ1aWxkPSJ0cnVlIgorCQkJCQkJPgor
CQkJCQkJPFRvb2wKKwkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIgorCQkJCQkJLz4KKwkJ
CQkJPC9GaWxlQ29uZmlndXJhdGlvbj4KKwkJCQkJPEZpbGVDb25maWd1cmF0aW9uCisJCQkJCQlO
YW1lPSJQcm9kdWN0aW9ufFdpbjMyIgorCQkJCQkJRXhjbHVkZWRGcm9tQnVpbGQ9InRydWUiCisJ
CQkJCQk+CisJCQkJCQk8VG9vbAorCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiCisJCQkJ
CQkvPgorCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPgorCQkJCTwvRmlsZT4KKwkJCQk8RmlsZQor
CQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXHJlbmRlcmluZ1xzdmdcUmVuZGVyU1ZHU2hhcGUuaCIKKwkJ
CQkJPgorCQkJCTwvRmlsZT4KKwkJCQk8RmlsZQogCQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXHJlbmRl
cmluZ1xzdmdcUmVuZGVyU1ZHVGV4dC5jcHAiCiAJCQkJCT4KIAkJCQkJPEZpbGVDb25maWd1cmF0
aW9uCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0
LnBieHByb2ogYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHBy
b2oKaW5kZXggY2FmZThhYS4uYTg0NjFiMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvV2Vi
Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCisrKyBiL1NvdXJjZS9XZWJDb3JlL1dlYkNv
cmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagpAQCAtOTkzMCwxMCArOTkzMCwxNCBAQAogCQk5
RkZFM0VBMzExQjVBNDM5MDAzNzg3NEUgLyogSlNNZW1vcnlJbmZvLmNwcCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpTTWVtb3J5SW5mby5jcHA7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCTlGRkUzRUE0MTFCNUE0MzkwMDM3ODc0RSAvKiBKU01lbW9yeUluZm8u
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSlNNZW1vcnlJbmZvLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUEwMEI3MjE5MTFERTY0MjcwMDhBQjlGRiAvKiBDaGVj
a2VkSW50LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IENoZWNrZWRJbnQuaDsg
cGF0aCA9IGNhbnZhcy9DaGVja2VkSW50Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJ
CUExMzA5QjY0MTNGMThEOTMwMEM4QTA2NSAvKiBSZW5kZXJTVkdSZWN0LmNwcCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IFJlbmRlclNWR1JlY3QuY3BwOyBwYXRoID0gcmVu
ZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZWN0LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
KwkJQTEzMDlCNjgxM0YxOERBMTAwQzhBMDY1IC8qIFJlbmRlclNWR1JlY3QuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gUmVuZGVyU1ZHUmVjdC5oOyBwYXRoID0gcmVuZGVyaW5n
L3N2Zy9SZW5kZXJTVkdSZWN0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUExMzZB
MDBBMTEzNERCRDIwMENDOEQ1MCAvKiBYTUxIdHRwUmVxdWVzdFByb2dyZXNzRXZlbnRUaHJvdHRs
ZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBYTUxIdHRwUmVxdWVz
dFByb2dyZXNzRXZlbnRUaHJvdHRsZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CUExMzZBMDBCMTEzNERCRDIwMENDOEQ1MCAvKiBYTUxIdHRwUmVxdWVzdFByb2dyZXNzRXZlbnRU
aHJvdHRsZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBYTUxIdHRwUmVxdWVz
dFByb2dyZXNzRXZlbnRUaHJvdHRsZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlB
MTdDODEyMDBGMkE1Q0Y3MDA1REFBRUIgLyogSFRNTEVsZW1lbnRGYWN0b3J5LmNwcCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEhUTUxFbGVtZW50RmFjdG9yeS5jcHA7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUExN0M4MTIxMEYyQTVDRjcwMDVEQUFFQiAvKiBI
VE1MRWxlbWVudEZhY3RvcnkuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSFRN
TEVsZW1lbnRGYWN0b3J5Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUExQjc3OEMz
MTQwM0E4RDQwMEQ5NjM5RiAvKiBSZW5kZXJTVkdTaGFwZS5jcHAgKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmNwcC5jcHA7IG5hbWUgPSBSZW5kZXJTVkdTaGFwZS5jcHA7IHBhdGggPSByZW5kZXJpbmcv
c3ZnL1JlbmRlclNWR1NoYXBlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQTFC
Nzc4QzcxNDAzQThFNjAwRDk2MzlGIC8qIFJlbmRlclNWR1NoYXBlLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgbmFtZSA9IFJlbmRlclNWR1NoYXBlLmg7IHBhdGggPSByZW5kZXJpbmcvc3Zn
L1JlbmRlclNWR1NoYXBlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUExQzdGQUEx
MTMzQTVEMzUwMEQ2NzMyRCAvKiBKU1hQYXRoUmVzdWx0Q3VzdG9tLmNwcCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpTWFBhdGhSZXN1bHRDdXN0b20uY3BwOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQlBMUUxMTU0MzEzMDE1QzNEMDA1NEFDOEMgLyogRGlzdGFu
dExpZ2h0U291cmNlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IERp
c3RhbnRMaWdodFNvdXJjZS5jcHA7IHBhdGggPSBmaWx0ZXJzL0Rpc3RhbnRMaWdodFNvdXJjZS5j
cHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUExRTExNTQ1MTMwMTVDNEUwMDU0QUM4
QyAvKiBQb2ludExpZ2h0U291cmNlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsg
bmFtZSA9IFBvaW50TGlnaHRTb3VyY2UuY3BwOyBwYXRoID0gZmlsdGVycy9Qb2ludExpZ2h0U291
cmNlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTEyOTc5LDYgKzEyOTgzLDEw
IEBACiAJCTA4NjdENjkxRkU4NDAyOEZDMDJBQUMwNyAvKiBXZWJLaXQgKi8gPSB7CiAJCQlpc2Eg
PSBQQlhHcm91cDsKIAkJCWNoaWxkcmVuID0gKAorCQkJCUExQjc3OEM3MTQwM0E4RTYwMEQ5NjM5
RiAvKiBSZW5kZXJTVkdTaGFwZS5oICovLAorCQkJCUExQjc3OEMzMTQwM0E4RDQwMEQ5NjM5RiAv
KiBSZW5kZXJTVkdTaGFwZS5jcHAgKi8sCisJCQkJQTEzMDlCNjgxM0YxOERBMTAwQzhBMDY1IC8q
IFJlbmRlclNWR1JlY3QuaCAqLywKKwkJCQlBMTMwOUI2NDEzRjE4RDkzMDBDOEEwNjUgLyogUmVu
ZGVyU1ZHUmVjdC5jcHAgKi8sCiAJCQkJNjVDOTdBRjIwOEVBOTA4ODAwQUNEMjczIC8qIGNvbmZp
Zy5oICovLAogCQkJCUVERUM5ODAyMEFFRDdFMTcwMDU5MTM3RiAvKiBXZWJDb3JlUHJlZml4Lmgg
Ki8sCiAJCQkJQjEwQjY5N0QxNDBDMTc0MDAwQkMxQzI2IC8qIFdlYlZUVFRva2VuLmggKi8sCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9GbG9hdFJlY3QuY3Bw
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRmxvYXRSZWN0LmNwcAppbmRleCA3
YWZjOTJiLi43YmJiMzg3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9GbG9hdFJlY3QuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L0Zsb2F0UmVjdC5jcHAKQEAgLTYxLDYgKzYxLDEzIEBAIGJvb2wgRmxvYXRSZWN0Ojpjb250YWlu
cyhjb25zdCBGbG9hdFJlY3QmIG90aGVyKSBjb25zdAogICAgICAgICAmJiB5KCkgPD0gb3RoZXIu
eSgpICYmIG1heFkoKSA+PSBvdGhlci5tYXhZKCk7CiB9CiAKK2Jvb2wgRmxvYXRSZWN0Ojpjb21w
cmlzZXMoY29uc3QgRmxvYXRQb2ludCYgcG9pbnQpIGNvbnN0Cit7CisgICAgaWYgKGNvbnRhaW5z
KHBvaW50KSkKKyAgICAgICAgcmV0dXJuICh4KCkgPCBwb2ludC54KCkgJiYgbWF4WCgpID4gcG9p
bnQueCgpICYmIHkoKSA8IHBvaW50LnkoKSAmJiBtYXhZKCkgPiB5KCkpID8gdHJ1ZSA6IGZhbHNl
OworICAgIHJldHVybiBmYWxzZTsKK30KKwogdm9pZCBGbG9hdFJlY3Q6OmludGVyc2VjdChjb25z
dCBGbG9hdFJlY3QmIG90aGVyKQogewogICAgIGZsb2F0IGwgPSBtYXgoeCgpLCBvdGhlci54KCkp
OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRmxvYXRSZWN0
LmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9GbG9hdFJlY3QuaAppbmRleCAy
N2Q0MjI0Li4xZmVlY2E1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9GbG9hdFJlY3QuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9G
bG9hdFJlY3QuaApAQCAtMTQ1LDYgKzE0NSw3IEBAIHB1YmxpYzoKIAogICAgIGJvb2wgaW50ZXJz
ZWN0cyhjb25zdCBGbG9hdFJlY3QmKSBjb25zdDsKICAgICBib29sIGNvbnRhaW5zKGNvbnN0IEZs
b2F0UmVjdCYpIGNvbnN0OworICAgIGJvb2wgY29tcHJpc2VzKGNvbnN0IEZsb2F0UG9pbnQmKSBj
b25zdDsKIAogICAgIHZvaWQgaW50ZXJzZWN0KGNvbnN0IEZsb2F0UmVjdCYpOwogICAgIHZvaWQg
dW5pdGUoY29uc3QgRmxvYXRSZWN0Jik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVyT2JqZWN0LmggYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyT2Jq
ZWN0LmgKaW5kZXggODk4MzA2Yy4uOWZiNDRkYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL1JlbmRlck9iamVjdC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJPYmplY3QuaApAQCAtMzUzLDcgKzM1MywxMCBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCBi
b29sIGlzU1ZHVmlld3BvcnRDb250YWluZXIoKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfSAKICAg
ICB2aXJ0dWFsIGJvb2wgaXNTVkdHcmFkaWVudFN0b3AoKSBjb25zdCB7IHJldHVybiBmYWxzZTsg
fQogICAgIHZpcnR1YWwgYm9vbCBpc1NWR0hpZGRlbkNvbnRhaW5lcigpIGNvbnN0IHsgcmV0dXJu
IGZhbHNlOyB9CisgICAgdmlydHVhbCBib29sIGlzU1ZHTGluZSgpIGNvbnN0IHsgcmV0dXJuIGZh
bHNlOyB9CiAgICAgdmlydHVhbCBib29sIGlzU1ZHUGF0aCgpIGNvbnN0IHsgcmV0dXJuIGZhbHNl
OyB9CisgICAgdmlydHVhbCBib29sIGlzU1ZHUmVjdCgpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9
CisgICAgdmlydHVhbCBib29sIGlzU1ZHU2hhcGUoKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQog
ICAgIHZpcnR1YWwgYm9vbCBpc1NWR1RleHQoKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQogICAg
IHZpcnR1YWwgYm9vbCBpc1NWR1RleHRQYXRoKCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KICAg
ICB2aXJ0dWFsIGJvb2wgaXNTVkdJbmxpbmUoKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRyZWVBc1RleHQuY3BwIGIv
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRyZWVBc1RleHQuY3BwCmluZGV4IDViMjli
YjUuLjYxZmFmZTIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJU
cmVlQXNUZXh0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVHJlZUFz
VGV4dC5jcHAKQEAgLTUyMCw4ICs1MjAsOCBAQCBzdGF0aWMgdm9pZCB3cml0ZVRleHRSdW4oVGV4
dFN0cmVhbSYgdHMsIGNvbnN0IFJlbmRlclRleHQmIG8sIGNvbnN0IElubGluZVRleHRCbwogdm9p
ZCB3cml0ZShUZXh0U3RyZWFtJiB0cywgY29uc3QgUmVuZGVyT2JqZWN0JiBvLCBpbnQgaW5kZW50
LCBSZW5kZXJBc1RleHRCZWhhdmlvciBiZWhhdmlvcikKIHsKICNpZiBFTkFCTEUoU1ZHKQotICAg
IGlmIChvLmlzU1ZHUGF0aCgpKSB7Ci0gICAgICAgIHdyaXRlKHRzLCAqdG9SZW5kZXJTVkdQYXRo
KCZvKSwgaW5kZW50KTsKKyAgICBpZiAoby5pc1NWR1NoYXBlKCkpIHsKKyAgICAgICAgd3JpdGUo
dHMsICp0b1JlbmRlclNWR1NoYXBlKCZvKSwgaW5kZW50KTsKICAgICAgICAgcmV0dXJuOwogICAg
IH0KICAgICBpZiAoby5pc1NWR0dyYWRpZW50U3RvcCgpKSB7CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR0FsbEluT25lLmNwcCBiL1NvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHQWxsSW5PbmUuY3BwCmluZGV4IDllYTNiZTUuLjI5
NjkwMDggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZH
QWxsSW5PbmUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZH
QWxsSW5PbmUuY3BwCkBAIC0zNSw2ICszNSw3IEBACiAjaW5jbHVkZSAiUmVuZGVyU1ZHSW5saW5l
VGV4dC5jcHAiCiAjaW5jbHVkZSAiUmVuZGVyU1ZHTW9kZWxPYmplY3QuY3BwIgogI2luY2x1ZGUg
IlJlbmRlclNWR1BhdGguY3BwIgorI2luY2x1ZGUgIlJlbmRlclNWR1JlY3QuY3BwIgogI2luY2x1
ZGUgIlJlbmRlclNWR1Jlc291cmNlLmNwcCIKICNpbmNsdWRlICJSZW5kZXJTVkdSZXNvdXJjZUNs
aXBwZXIuY3BwIgogI2luY2x1ZGUgIlJlbmRlclNWR1Jlc291cmNlQ29udGFpbmVyLmNwcCIKQEAg
LTQ5LDYgKzUwLDcgQEAKICNpbmNsdWRlICJSZW5kZXJTVkdSZXNvdXJjZVNvbGlkQ29sb3IuY3Bw
IgogI2luY2x1ZGUgIlJlbmRlclNWR1Jvb3QuY3BwIgogI2luY2x1ZGUgIlJlbmRlclNWR1NoYWRv
d1RyZWVSb290Q29udGFpbmVyLmNwcCIKKyNpbmNsdWRlICJSZW5kZXJTVkdTaGFwZS5jcHAiCiAj
aW5jbHVkZSAiUmVuZGVyU1ZHVFNwYW4uY3BwIgogI2luY2x1ZGUgIlJlbmRlclNWR1RleHQuY3Bw
IgogI2luY2x1ZGUgIlJlbmRlclNWR1RleHRQYXRoLmNwcCIKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHTW9kZWxPYmplY3QuY3BwIGIvU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdNb2RlbE9iamVjdC5jcHAKaW5kZXggMTRjMWRi
OC4uYzIzNDBiMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5k
ZXJTVkdNb2RlbE9iamVjdC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9S
ZW5kZXJTVkdNb2RlbE9iamVjdC5jcHAKQEAgLTE1Myw3ICsxNTMsNyBAQCBzdGF0aWMgYm9vbCBp
bnRlcnNlY3RzQWxsb3dpbmdFbXB0eShjb25zdCBGbG9hdFJlY3QmIHIsIGNvbnN0IEZsb2F0UmVj
dCYgb3RoZXIpCiAvLyBpbWFnZSwgbGluZSwgcGF0aCwgcG9seWdvbiwgcG9seWxpbmUsIHJlY3Qs
IHRleHQgYW5kIHVzZS4KIHN0YXRpYyBib29sIGlzR3JhcGhpY3NFbGVtZW50KFJlbmRlck9iamVj
dCogcmVuZGVyZXIpCiB7Ci0gICAgcmV0dXJuIHJlbmRlcmVyLT5pc1NWR1BhdGgoKSB8fCByZW5k
ZXJlci0+aXNTVkdUZXh0KCkgfHwgcmVuZGVyZXItPmlzU1ZHSW1hZ2UoKSB8fCByZW5kZXJlci0+
aXNTVkdTaGFkb3dUcmVlUm9vdENvbnRhaW5lcigpOworICAgIHJldHVybiByZW5kZXJlci0+aXNT
VkdTaGFwZSgpIHx8IHJlbmRlcmVyLT5pc1NWR1RleHQoKSB8fCByZW5kZXJlci0+aXNTVkdJbWFn
ZSgpIHx8IHJlbmRlcmVyLT5pc1NWR1NoYWRvd1RyZWVSb290Q29udGFpbmVyKCk7CiB9CiAKIGJv
b2wgUmVuZGVyU1ZHTW9kZWxPYmplY3Q6OmNoZWNrSW50ZXJzZWN0aW9uKFJlbmRlck9iamVjdCog
cmVuZGVyZXIsIGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUGF0aC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvc3ZnL1JlbmRlclNWR1BhdGguY3BwCmluZGV4IGEwMzkxZjcuLmVkYWQ0MzkgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUGF0aC5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdQYXRoLmNwcApAQCAtNiw2
ICs2LDggQEAKICAqIENvcHlyaWdodCAoQykgMjAwOSBEaXJrIFNjaHVsemUgPGtyaXRAd2Via2l0
Lm9yZz4KICAqIENvcHlyaWdodCAoQykgUmVzZWFyY2ggSW4gTW90aW9uIExpbWl0ZWQgMjAxMC4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqIENvcHlyaWdodCAoQykgMjAwOSBKZWZmIFNjaGlsbGVy
IDxjb2RlZHJlYWRAZ21haWwuY29tPgorICogQ29weXJpZ2h0IChDKSAyMDExIFJlbmF0YSBIb2Rv
dmFuIDxyZW5pQHdlYmtpdC5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgVW5pdmVyc2l0eSBv
ZiBTemVnZWQKICAqCiAgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiBy
ZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRo
ZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwpAQCAtMjgsNDkgKzMwLDEzIEBACiAjaWYgRU5B
QkxFKFNWRykKICNpbmNsdWRlICJSZW5kZXJTVkdQYXRoLmgiCiAKLSNpbmNsdWRlICJGbG9hdFBv
aW50LmgiCi0jaW5jbHVkZSAiRmxvYXRRdWFkLmgiCi0jaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0
LmgiCi0jaW5jbHVkZSAiSGl0VGVzdFJlcXVlc3QuaCIKLSNpbmNsdWRlICJQb2ludGVyRXZlbnRz
SGl0UnVsZXMuaCIKLSNpbmNsdWRlICJSZW5kZXJTVkdDb250YWluZXIuaCIKLSNpbmNsdWRlICJS
ZW5kZXJTVkdSZXNvdXJjZU1hcmtlci5oIgotI2luY2x1ZGUgIlJlbmRlclNWR1Jlc291cmNlU29s
aWRDb2xvci5oIgotI2luY2x1ZGUgIlNWR1JlbmRlclN1cHBvcnQuaCIKLSNpbmNsdWRlICJTVkdS
ZXNvdXJjZXMuaCIKKyNpbmNsdWRlICJTVkdQYXRoRWxlbWVudC5oIgogI2luY2x1ZGUgIlNWR1N0
eWxlZFRyYW5zZm9ybWFibGVFbGVtZW50LmgiCi0jaW5jbHVkZSAiU1ZHVHJhbnNmb3JtTGlzdC5o
IgotI2luY2x1ZGUgIlNWR1VSSVJlZmVyZW5jZS5oIgotI2luY2x1ZGUgIlN0cm9rZVN0eWxlQXBw
bGllci5oIgotI2luY2x1ZGUgPHd0Zi9NYXRoRXh0cmFzLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3Jl
IHsKIAotY2xhc3MgQm91bmRpbmdSZWN0U3Ryb2tlU3R5bGVBcHBsaWVyIDogcHVibGljIFN0cm9r
ZVN0eWxlQXBwbGllciB7Ci1wdWJsaWM6Ci0gICAgQm91bmRpbmdSZWN0U3Ryb2tlU3R5bGVBcHBs
aWVyKGNvbnN0IFJlbmRlck9iamVjdCogb2JqZWN0LCBSZW5kZXJTdHlsZSogc3R5bGUpCi0gICAg
ICAgIDogbV9vYmplY3Qob2JqZWN0KQotICAgICAgICAsIG1fc3R5bGUoc3R5bGUpCi0gICAgewot
ICAgICAgICBBU1NFUlQoc3R5bGUpOwotICAgICAgICBBU1NFUlQob2JqZWN0KTsKLSAgICB9Ci0K
LSAgICB2b2lkIHN0cm9rZVN0eWxlKEdyYXBoaWNzQ29udGV4dCogZ2MpCi0gICAgewotICAgICAg
ICBTVkdSZW5kZXJTdXBwb3J0OjphcHBseVN0cm9rZVN0eWxlVG9Db250ZXh0KGdjLCBtX3N0eWxl
LCBtX29iamVjdCk7Ci0gICAgfQotCi1wcml2YXRlOgotICAgIGNvbnN0IFJlbmRlck9iamVjdCog
bV9vYmplY3Q7Ci0gICAgUmVuZGVyU3R5bGUqIG1fc3R5bGU7Ci19OwotCiBSZW5kZXJTVkdQYXRo
OjpSZW5kZXJTVkdQYXRoKFNWR1N0eWxlZFRyYW5zZm9ybWFibGVFbGVtZW50KiBub2RlKQotICAg
IDogUmVuZGVyU1ZHTW9kZWxPYmplY3Qobm9kZSkKLSAgICAsIG1fbmVlZHNCb3VuZGFyaWVzVXBk
YXRlKGZhbHNlKSAvLyBkZWZhdWx0IGlzIGZhbHNlLCB0aGUgY2FjaGVkIHJlY3RzIGFyZSBlbXB0
eSBmcm9tIHRoZSBiZWdpbm5pbmcKLSAgICAsIG1fbmVlZHNQYXRoVXBkYXRlKHRydWUpIC8vIGRl
ZmF1bHQgaXMgdHJ1ZSwgc28gd2UgZ3JhYiBhIFBhdGggb2JqZWN0IG9uY2UgZnJvbSBTVkdTdHls
ZWRUcmFuc2Zvcm1hYmxlRWxlbWVudAotICAgICwgbV9uZWVkc1RyYW5zZm9ybVVwZGF0ZSh0cnVl
KSAvLyBkZWZhdWx0IGlzIHRydWUsIHNvIHdlIGdyYWIgYSBBZmZpbmVUcmFuc2Zvcm0gb2JqZWN0
IG9uY2UgZnJvbSBTVkdTdHlsZWRUcmFuc2Zvcm1hYmxlRWxlbWVudAorICAgIDogUmVuZGVyU1ZH
U2hhcGUobm9kZSkKIHsKIH0KIApAQCAtNzgsMzE2ICs0NCw2IEBAIFJlbmRlclNWR1BhdGg6On5S
ZW5kZXJTVkdQYXRoKCkKIHsKIH0KIAotYm9vbCBSZW5kZXJTVkdQYXRoOjpmaWxsQ29udGFpbnMo
Y29uc3QgRmxvYXRQb2ludCYgcG9pbnQsIGJvb2wgcmVxdWlyZXNGaWxsLCBXaW5kUnVsZSBmaWxs
UnVsZSkKLXsKLSAgICBpZiAoIW1fZmlsbEJvdW5kaW5nQm94LmNvbnRhaW5zKHBvaW50KSkKLSAg
ICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgQ29sb3IgZmFsbGJhY2tDb2xvcjsKLSAgICBpZiAo
cmVxdWlyZXNGaWxsICYmICFSZW5kZXJTVkdSZXNvdXJjZTo6ZmlsbFBhaW50aW5nUmVzb3VyY2Uo
dGhpcywgc3R5bGUoKSwgZmFsbGJhY2tDb2xvcikpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQot
ICAgIHJldHVybiBtX3BhdGguY29udGFpbnMocG9pbnQsIGZpbGxSdWxlKTsKLX0KLQotYm9vbCBS
ZW5kZXJTVkdQYXRoOjpzdHJva2VDb250YWlucyhjb25zdCBGbG9hdFBvaW50JiBwb2ludCwgYm9v
bCByZXF1aXJlc1N0cm9rZSkKLXsKLSAgICBpZiAoIW1fc3Ryb2tlQW5kTWFya2VyQm91bmRpbmdC
b3guY29udGFpbnMocG9pbnQpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBDb2xvciBm
YWxsYmFja0NvbG9yOwotICAgIGlmIChyZXF1aXJlc1N0cm9rZSAmJiAhUmVuZGVyU1ZHUmVzb3Vy
Y2U6OnN0cm9rZVBhaW50aW5nUmVzb3VyY2UodGhpcywgc3R5bGUoKSwgZmFsbGJhY2tDb2xvcikp
Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIGlmIChzaG91bGRTdHJva2VaZXJvTGVuZ3Ro
U3VicGF0aCgpKQotICAgICAgICByZXR1cm4gemVyb0xlbmd0aFN1YnBhdGhSZWN0KCkuY29udGFp
bnMocG9pbnQpOwotCi0gICAgQm91bmRpbmdSZWN0U3Ryb2tlU3R5bGVBcHBsaWVyIHN0cm9rZVN0
eWxlKHRoaXMsIHN0eWxlKCkpOwotICAgIHJldHVybiBtX3BhdGguc3Ryb2tlQ29udGFpbnMoJnN0
cm9rZVN0eWxlLCBwb2ludCk7Ci19Ci0KLXZvaWQgUmVuZGVyU1ZHUGF0aDo6bGF5b3V0KCkKLXsK
LSAgICBMYXlvdXRSZXBhaW50ZXIgcmVwYWludGVyKCp0aGlzLCBjaGVja0ZvclJlcGFpbnREdXJp
bmdMYXlvdXQoKSAmJiBzZWxmTmVlZHNMYXlvdXQoKSk7Ci0gICAgU1ZHU3R5bGVkVHJhbnNmb3Jt
YWJsZUVsZW1lbnQqIGVsZW1lbnQgPSBzdGF0aWNfY2FzdDxTVkdTdHlsZWRUcmFuc2Zvcm1hYmxl
RWxlbWVudCo+KG5vZGUoKSk7Ci0KLSAgICBib29sIHVwZGF0ZUNhY2hlZEJvdW5kYXJpZXNJblBh
cmVudHMgPSBmYWxzZTsKLQotICAgIGJvb2wgbmVlZHNQYXRoVXBkYXRlID0gbV9uZWVkc1BhdGhV
cGRhdGU7Ci0gICAgaWYgKG5lZWRzUGF0aFVwZGF0ZSkgewotICAgICAgICBtX3BhdGguY2xlYXIo
KTsKLSAgICAgICAgZWxlbWVudC0+dG9QYXRoRGF0YShtX3BhdGgpOwotICAgICAgICBtX25lZWRz
UGF0aFVwZGF0ZSA9IGZhbHNlOwotICAgICAgICB1cGRhdGVDYWNoZWRCb3VuZGFyaWVzSW5QYXJl
bnRzID0gdHJ1ZTsKLSAgICB9Ci0KLSAgICBpZiAobV9uZWVkc1RyYW5zZm9ybVVwZGF0ZSkgewot
ICAgICAgICBtX2xvY2FsVHJhbnNmb3JtID0gZWxlbWVudC0+YW5pbWF0ZWRMb2NhbFRyYW5zZm9y
bSgpOwotICAgICAgICBtX25lZWRzVHJhbnNmb3JtVXBkYXRlID0gZmFsc2U7Ci0gICAgICAgIHVw
ZGF0ZUNhY2hlZEJvdW5kYXJpZXNJblBhcmVudHMgPSB0cnVlOwotICAgIH0KLQotICAgIGlmICht
X25lZWRzQm91bmRhcmllc1VwZGF0ZSkKLSAgICAgICAgdXBkYXRlQ2FjaGVkQm91bmRhcmllc0lu
UGFyZW50cyA9IHRydWU7Ci0KLSAgICAvLyBJbnZhbGlkYXRlIGFsbCByZXNvdXJjZXMgb2YgdGhp
cyBjbGllbnQgaWYgb3VyIGxheW91dCBjaGFuZ2VkLgotICAgIGlmIChtX2V2ZXJIYWRMYXlvdXQg
JiYgc2VsZk5lZWRzTGF5b3V0KCkpIHsKLSAgICAgICAgU1ZHUmVzb3VyY2VzQ2FjaGU6OmNsaWVu
dExheW91dENoYW5nZWQodGhpcyk7Ci0gICAgICAgIG1fbWFya2VyTGF5b3V0SW5mby5jbGVhcigp
OwotICAgIH0KLQotICAgIC8vIEF0IHRoaXMgcG9pbnQgTGF5b3V0UmVwYWludGVyIGFscmVhZHkg
Z3JhYmJlZCB0aGUgb2xkIGJvdW5kcywKLSAgICAvLyByZWNhbGN1bGF0ZSB0aGVtIG5vdyBzbyBy
ZXBhaW50QWZ0ZXJMYXlvdXQoKSB1c2VzIHRoZSBuZXcgYm91bmRzLgotICAgIGlmIChuZWVkc1Bh
dGhVcGRhdGUgfHwgbV9uZWVkc0JvdW5kYXJpZXNVcGRhdGUpIHsKLSAgICAgICAgdXBkYXRlQ2Fj
aGVkQm91bmRhcmllcygpOwotICAgICAgICBtX25lZWRzQm91bmRhcmllc1VwZGF0ZSA9IGZhbHNl
OwotICAgIH0KLQotICAgIC8vIElmIG91ciBib3VuZHMgY2hhbmdlZCwgbm90aWZ5IHRoZSBwYXJl
bnRzLgotICAgIGlmICh1cGRhdGVDYWNoZWRCb3VuZGFyaWVzSW5QYXJlbnRzKQotICAgICAgICBS
ZW5kZXJTVkdNb2RlbE9iamVjdDo6c2V0TmVlZHNCb3VuZGFyaWVzVXBkYXRlKCk7Ci0KLSAgICBy
ZXBhaW50ZXIucmVwYWludEFmdGVyTGF5b3V0KCk7Ci0gICAgc2V0TmVlZHNMYXlvdXQoZmFsc2Up
OwotfQotCi1ib29sIFJlbmRlclNWR1BhdGg6OnNob3VsZFN0cm9rZVplcm9MZW5ndGhTdWJwYXRo
KCkgY29uc3QKLXsKLSAgICAvLyBTcGVjKDExLjQpOiBBbnkgemVybyBsZW5ndGggc3VicGF0aCBz
aGFsbCBub3QgYmUgc3Ryb2tlZCBpZiB0aGUg4oCYc3Ryb2tlLWxpbmVjYXDigJkgcHJvcGVydHkg
aGFzIGEgdmFsdWUgb2YgYnV0dAotICAgIC8vIGJ1dCBzaGFsbCBiZSBzdHJva2VkIGlmIHRoZSDi
gJhzdHJva2UtbGluZWNhcOKAmSBwcm9wZXJ0eSBoYXMgYSB2YWx1ZSBvZiByb3VuZCBvciBzcXVh
cmUKLSAgICByZXR1cm4gc3R5bGUoKS0+c3ZnU3R5bGUoKS0+aGFzU3Ryb2tlKCkgJiYgc3R5bGUo
KS0+c3ZnU3R5bGUoKS0+Y2FwU3R5bGUoKSAhPSBCdXR0Q2FwICYmICFtX2ZpbGxCb3VuZGluZ0Jv
eC53aWR0aCgpICYmICFtX2ZpbGxCb3VuZGluZ0JveC5oZWlnaHQoKTsKLX0KLQotRmxvYXRSZWN0
IFJlbmRlclNWR1BhdGg6Onplcm9MZW5ndGhTdWJwYXRoUmVjdCgpIGNvbnN0Ci17Ci0gICAgU1ZH
RWxlbWVudCogc3ZnRWxlbWVudCA9IHN0YXRpY19jYXN0PFNWR0VsZW1lbnQqPihub2RlKCkpOwot
ICAgIGZsb2F0IHN0cm9rZVdpZHRoID0gc3R5bGUoKS0+c3ZnU3R5bGUoKS0+c3Ryb2tlV2lkdGgo
KS52YWx1ZShzdmdFbGVtZW50KTsKLSAgICByZXR1cm4gRmxvYXRSZWN0KG1fZmlsbEJvdW5kaW5n
Qm94LngoKSAtIHN0cm9rZVdpZHRoIC8gMiwgbV9maWxsQm91bmRpbmdCb3gueSgpIC0gc3Ryb2tl
V2lkdGggLyAyLCBzdHJva2VXaWR0aCwgc3Ryb2tlV2lkdGgpOwotfQotCi12b2lkIFJlbmRlclNW
R1BhdGg6OnNldHVwU3F1YXJlQ2FwUGF0aChQYXRoKiYgdXNlUGF0aCwgaW50JiBhcHBseU1vZGUp
Ci17Ci0gICAgLy8gU3BlYygxMS40KTogQW55IHplcm8gbGVuZ3RoIHN1YnBhdGggc2hhbGwgbm90
IGJlIHN0cm9rZWQgaWYgdGhlIOKAmHN0cm9rZS1saW5lY2Fw4oCZIHByb3BlcnR5IGhhcyBhIHZh
bHVlIG9mIGJ1dHQKLSAgICAvLyBidXQgc2hhbGwgYmUgc3Ryb2tlZCBpZiB0aGUg4oCYc3Ryb2tl
LWxpbmVjYXDigJkgcHJvcGVydHkgaGFzIGEgdmFsdWUgb2Ygcm91bmQgb3Igc3F1YXJlCi0gICAg
REVGSU5FX1NUQVRJQ19MT0NBTChQYXRoLCB0ZW1wUGF0aCwgKCkpOwotCi0gICAgYXBwbHlNb2Rl
ID0gQXBwbHlUb0ZpbGxNb2RlOwotICAgIHVzZVBhdGggPSAmdGVtcFBhdGg7Ci0gICAgdXNlUGF0
aC0+Y2xlYXIoKTsKLSAgICBpZiAoc3R5bGUoKS0+c3ZnU3R5bGUoKS0+Y2FwU3R5bGUoKSA9PSBT
cXVhcmVDYXApCi0gICAgICAgIHVzZVBhdGgtPmFkZFJlY3QoemVyb0xlbmd0aFN1YnBhdGhSZWN0
KCkpOwotICAgIGVsc2UKLSAgICAgICAgdXNlUGF0aC0+YWRkRWxsaXBzZSh6ZXJvTGVuZ3RoU3Vi
cGF0aFJlY3QoKSk7Ci19Ci0KLWJvb2wgUmVuZGVyU1ZHUGF0aDo6c2V0dXBOb25TY2FsaW5nU3Ry
b2tlUGF0aChQYXRoKiYgdXNlUGF0aCwgR3JhcGhpY3NDb250ZXh0U3RhdGVTYXZlciYgc3RhdGVT
YXZlcikKLXsKLSAgICBERUZJTkVfU1RBVElDX0xPQ0FMKFBhdGgsIHRlbXBQYXRoLCAoKSk7Ci0K
LSAgICBTVkdTdHlsZWRUcmFuc2Zvcm1hYmxlRWxlbWVudCogZWxlbWVudCA9IHN0YXRpY19jYXN0
PFNWR1N0eWxlZFRyYW5zZm9ybWFibGVFbGVtZW50Kj4obm9kZSgpKTsKLSAgICBBZmZpbmVUcmFu
c2Zvcm0gbm9uU2NhbGluZ1N0cm9rZVRyYW5zZm9ybSA9IGVsZW1lbnQtPmdldFNjcmVlbkNUTShT
VkdMb2NhdGFibGU6OkRpc2FsbG93U3R5bGVVcGRhdGUpOwotICAgIGlmICghbm9uU2NhbGluZ1N0
cm9rZVRyYW5zZm9ybS5pc0ludmVydGlibGUoKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0g
ICAgdGVtcFBhdGggPSBtX3BhdGg7Ci0gICAgdXNlUGF0aCA9ICZ0ZW1wUGF0aDsKLSAgICB0ZW1w
UGF0aC50cmFuc2Zvcm0obm9uU2NhbGluZ1N0cm9rZVRyYW5zZm9ybSk7Ci0KLSAgICBzdGF0ZVNh
dmVyLnNhdmUoKTsKLSAgICBzdGF0ZVNhdmVyLmNvbnRleHQoKS0+Y29uY2F0Q1RNKG5vblNjYWxp
bmdTdHJva2VUcmFuc2Zvcm0uaW52ZXJzZSgpKTsKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotdm9p
ZCBSZW5kZXJTVkdQYXRoOjpmaWxsQW5kU3Ryb2tlUGF0aChHcmFwaGljc0NvbnRleHQqIGNvbnRl
eHQpCi17Ci0gICAgUmVuZGVyU3R5bGUqIHN0eWxlID0gdGhpcy0+c3R5bGUoKTsKLQotICAgIENv
bG9yIGZhbGxiYWNrQ29sb3I7Ci0gICAgaWYgKFJlbmRlclNWR1Jlc291cmNlKiBmaWxsUGFpbnRp
bmdSZXNvdXJjZSA9IFJlbmRlclNWR1Jlc291cmNlOjpmaWxsUGFpbnRpbmdSZXNvdXJjZSh0aGlz
LCBzdHlsZSwgZmFsbGJhY2tDb2xvcikpIHsKLSAgICAgICAgaWYgKGZpbGxQYWludGluZ1Jlc291
cmNlLT5hcHBseVJlc291cmNlKHRoaXMsIHN0eWxlLCBjb250ZXh0LCBBcHBseVRvRmlsbE1vZGUp
KQotICAgICAgICAgICAgZmlsbFBhaW50aW5nUmVzb3VyY2UtPnBvc3RBcHBseVJlc291cmNlKHRo
aXMsIGNvbnRleHQsIEFwcGx5VG9GaWxsTW9kZSwgJm1fcGF0aCk7Ci0gICAgICAgIGVsc2UgaWYg
KGZhbGxiYWNrQ29sb3IuaXNWYWxpZCgpKSB7Ci0gICAgICAgICAgICBSZW5kZXJTVkdSZXNvdXJj
ZVNvbGlkQ29sb3IqIGZhbGxiYWNrUmVzb3VyY2UgPSBSZW5kZXJTVkdSZXNvdXJjZTo6c2hhcmVk
U29saWRQYWludGluZ1Jlc291cmNlKCk7Ci0gICAgICAgICAgICBmYWxsYmFja1Jlc291cmNlLT5z
ZXRDb2xvcihmYWxsYmFja0NvbG9yKTsKLSAgICAgICAgICAgIGlmIChmYWxsYmFja1Jlc291cmNl
LT5hcHBseVJlc291cmNlKHRoaXMsIHN0eWxlLCBjb250ZXh0LCBBcHBseVRvRmlsbE1vZGUpKQot
ICAgICAgICAgICAgICAgIGZhbGxiYWNrUmVzb3VyY2UtPnBvc3RBcHBseVJlc291cmNlKHRoaXMs
IGNvbnRleHQsIEFwcGx5VG9GaWxsTW9kZSwgJm1fcGF0aCk7Ci0gICAgICAgIH0KLSAgICB9Ci0K
LSAgICBmYWxsYmFja0NvbG9yID0gQ29sb3IoKTsKLSAgICBSZW5kZXJTVkdSZXNvdXJjZSogc3Ry
b2tlUGFpbnRpbmdSZXNvdXJjZSA9IFJlbmRlclNWR1Jlc291cmNlOjpzdHJva2VQYWludGluZ1Jl
c291cmNlKHRoaXMsIHN0eWxlLCBmYWxsYmFja0NvbG9yKTsKLSAgICBpZiAoIXN0cm9rZVBhaW50
aW5nUmVzb3VyY2UpCi0gICAgICAgIHJldHVybjsKLQotICAgIFBhdGgqIHVzZVBhdGggPSAmbV9w
YXRoOwotICAgIGludCBhcHBseU1vZGUgPSBBcHBseVRvU3Ryb2tlTW9kZTsKLQotICAgIGJvb2wg
bm9uU2NhbGluZ1N0cm9rZSA9IHN0eWxlLT5zdmdTdHlsZSgpLT52ZWN0b3JFZmZlY3QoKSA9PSBW
RV9OT05fU0NBTElOR19TVFJPS0U7Ci0KLSAgICBHcmFwaGljc0NvbnRleHRTdGF0ZVNhdmVyIHN0
YXRlU2F2ZXIoKmNvbnRleHQsIGZhbHNlKTsKLQotICAgIC8vIFNwZWMoMTEuNCk6IEFueSB6ZXJv
IGxlbmd0aCBzdWJwYXRoIHNoYWxsIG5vdCBiZSBzdHJva2VkIGlmIHRoZSDigJhzdHJva2UtbGlu
ZWNhcOKAmSBwcm9wZXJ0eSBoYXMgYSB2YWx1ZSBvZiBidXR0Ci0gICAgLy8gYnV0IHNoYWxsIGJl
IHN0cm9rZWQgaWYgdGhlIOKAmHN0cm9rZS1saW5lY2Fw4oCZIHByb3BlcnR5IGhhcyBhIHZhbHVl
IG9mIHJvdW5kIG9yIHNxdWFyZQotICAgIC8vIEZJWE1FOiB0aGlzIGRvZXMgbm90IHdvcmsgZm9y
IHplcm8tbGVuZ3RoIHN1YnBhdGhzLCBvbmx5IHdoZW4gdG90YWwgcGF0aCBpcyB6ZXJvLWxlbmd0
aAotICAgIGlmIChzaG91bGRTdHJva2VaZXJvTGVuZ3RoU3VicGF0aCgpKQotICAgICAgICBzZXR1
cFNxdWFyZUNhcFBhdGgodXNlUGF0aCwgYXBwbHlNb2RlKTsKLSAgICBlbHNlIGlmIChub25TY2Fs
aW5nU3Ryb2tlKSB7Ci0gICAgICAgaWYgKCFzZXR1cE5vblNjYWxpbmdTdHJva2VQYXRoKHVzZVBh
dGgsIHN0YXRlU2F2ZXIpKQotICAgICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgaWYgKHN0
cm9rZVBhaW50aW5nUmVzb3VyY2UtPmFwcGx5UmVzb3VyY2UodGhpcywgc3R5bGUsIGNvbnRleHQs
IGFwcGx5TW9kZSkpCi0gICAgICAgIHN0cm9rZVBhaW50aW5nUmVzb3VyY2UtPnBvc3RBcHBseVJl
c291cmNlKHRoaXMsIGNvbnRleHQsIGFwcGx5TW9kZSwgdXNlUGF0aCk7Ci0gICAgZWxzZSBpZiAo
ZmFsbGJhY2tDb2xvci5pc1ZhbGlkKCkpIHsKLSAgICAgICAgUmVuZGVyU1ZHUmVzb3VyY2VTb2xp
ZENvbG9yKiBmYWxsYmFja1Jlc291cmNlID0gUmVuZGVyU1ZHUmVzb3VyY2U6OnNoYXJlZFNvbGlk
UGFpbnRpbmdSZXNvdXJjZSgpOwotICAgICAgICBmYWxsYmFja1Jlc291cmNlLT5zZXRDb2xvcihm
YWxsYmFja0NvbG9yKTsKLSAgICAgICAgaWYgKGZhbGxiYWNrUmVzb3VyY2UtPmFwcGx5UmVzb3Vy
Y2UodGhpcywgc3R5bGUsIGNvbnRleHQsIGFwcGx5TW9kZSkpCi0gICAgICAgICAgICBmYWxsYmFj
a1Jlc291cmNlLT5wb3N0QXBwbHlSZXNvdXJjZSh0aGlzLCBjb250ZXh0LCBhcHBseU1vZGUsIHVz
ZVBhdGgpOwotICAgIH0KLX0KLQotdm9pZCBSZW5kZXJTVkdQYXRoOjpwYWludChQYWludEluZm8m
IHBhaW50SW5mbywgY29uc3QgTGF5b3V0UG9pbnQmKQotewotICAgIGlmIChwYWludEluZm8uY29u
dGV4dC0+cGFpbnRpbmdEaXNhYmxlZCgpIHx8IHN0eWxlKCktPnZpc2liaWxpdHkoKSA9PSBISURE
RU4gfHwgbV9wYXRoLmlzRW1wdHkoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgRmxvYXRSZWN0
IGJvdW5kaW5nQm94ID0gcmVwYWludFJlY3RJbkxvY2FsQ29vcmRpbmF0ZXMoKTsKLSAgICBpZiAo
IVNWR1JlbmRlclN1cHBvcnQ6OnBhaW50SW5mb0ludGVyc2VjdHNSZXBhaW50UmVjdChib3VuZGlu
Z0JveCwgbV9sb2NhbFRyYW5zZm9ybSwgcGFpbnRJbmZvKSkKLSAgICAgICAgcmV0dXJuOwotCi0g
ICAgUGFpbnRJbmZvIGNoaWxkUGFpbnRJbmZvKHBhaW50SW5mbyk7Ci0gICAgYm9vbCBkcmF3c091
dGxpbmUgPSBzdHlsZSgpLT5vdXRsaW5lV2lkdGgoKSAmJiAoY2hpbGRQYWludEluZm8ucGhhc2Ug
PT0gUGFpbnRQaGFzZU91dGxpbmUgfHwgY2hpbGRQYWludEluZm8ucGhhc2UgPT0gUGFpbnRQaGFz
ZVNlbGZPdXRsaW5lKTsKLSAgICBpZiAoZHJhd3NPdXRsaW5lIHx8IGNoaWxkUGFpbnRJbmZvLnBo
YXNlID09IFBhaW50UGhhc2VGb3JlZ3JvdW5kKSB7Ci0gICAgICAgIEdyYXBoaWNzQ29udGV4dFN0
YXRlU2F2ZXIgc3RhdGVTYXZlcigqY2hpbGRQYWludEluZm8uY29udGV4dCk7Ci0gICAgICAgIGNo
aWxkUGFpbnRJbmZvLmFwcGx5VHJhbnNmb3JtKG1fbG9jYWxUcmFuc2Zvcm0pOwotCi0gICAgICAg
IGlmIChjaGlsZFBhaW50SW5mby5waGFzZSA9PSBQYWludFBoYXNlRm9yZWdyb3VuZCkgewotICAg
ICAgICAgICAgUGFpbnRJbmZvIHNhdmVkSW5mbyhjaGlsZFBhaW50SW5mbyk7Ci0KLSAgICAgICAg
ICAgIGlmIChTVkdSZW5kZXJTdXBwb3J0OjpwcmVwYXJlVG9SZW5kZXJTVkdDb250ZW50KHRoaXMs
IGNoaWxkUGFpbnRJbmZvKSkgewotICAgICAgICAgICAgICAgIGNvbnN0IFNWR1JlbmRlclN0eWxl
KiBzdmdTdHlsZSA9IHN0eWxlKCktPnN2Z1N0eWxlKCk7Ci0gICAgICAgICAgICAgICAgaWYgKHN2
Z1N0eWxlLT5zaGFwZVJlbmRlcmluZygpID09IFNSX0NSSVNQRURHRVMpCi0gICAgICAgICAgICAg
ICAgICAgIGNoaWxkUGFpbnRJbmZvLmNvbnRleHQtPnNldFNob3VsZEFudGlhbGlhcyhmYWxzZSk7
Ci0KLSAgICAgICAgICAgICAgICBmaWxsQW5kU3Ryb2tlUGF0aChjaGlsZFBhaW50SW5mby5jb250
ZXh0KTsKLQotICAgICAgICAgICAgICAgIGlmIChzdmdTdHlsZS0+aGFzTWFya2VycygpKQotICAg
ICAgICAgICAgICAgICAgICBtX21hcmtlckxheW91dEluZm8uZHJhd01hcmtlcnMoY2hpbGRQYWlu
dEluZm8pOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBTVkdSZW5kZXJTdXBwb3J0Ojpm
aW5pc2hSZW5kZXJTVkdDb250ZW50KHRoaXMsIGNoaWxkUGFpbnRJbmZvLCBzYXZlZEluZm8uY29u
dGV4dCk7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAoZHJhd3NPdXRsaW5lKQotICAgICAgICAg
ICAgcGFpbnRPdXRsaW5lKGNoaWxkUGFpbnRJbmZvLmNvbnRleHQsIEludFJlY3QoYm91bmRpbmdC
b3gpKTsKLSAgICB9Ci19Ci0KLS8vIFRoaXMgbWV0aG9kIGlzIGNhbGxlZCBmcm9tIGluc2lkZSBw
YWludE91dGxpbmUoKSBzaW5jZSB3ZSBjYWxsIHBhaW50T3V0bGluZSgpCi0vLyB3aGlsZSB0cmFu
c2Zvcm1lZCB0byBvdXIgY29vcmQgc3lzdGVtLCByZXR1cm4gbG9jYWwgY29vcmRzCi12b2lkIFJl
bmRlclNWR1BhdGg6OmFkZEZvY3VzUmluZ1JlY3RzKFZlY3RvcjxMYXlvdXRSZWN0PiYgcmVjdHMs
IGNvbnN0IExheW91dFBvaW50JikgCi17Ci0gICAgTGF5b3V0UmVjdCByZWN0ID0gZW5jbG9zaW5n
TGF5b3V0UmVjdChyZXBhaW50UmVjdEluTG9jYWxDb29yZGluYXRlcygpKTsKLSAgICBpZiAoIXJl
Y3QuaXNFbXB0eSgpKQotICAgICAgICByZWN0cy5hcHBlbmQocmVjdCk7Ci19Ci0KLWJvb2wgUmVu
ZGVyU1ZHUGF0aDo6bm9kZUF0RmxvYXRQb2ludChjb25zdCBIaXRUZXN0UmVxdWVzdCYgcmVxdWVz
dCwgSGl0VGVzdFJlc3VsdCYgcmVzdWx0LCBjb25zdCBGbG9hdFBvaW50JiBwb2ludEluUGFyZW50
LCBIaXRUZXN0QWN0aW9uIGhpdFRlc3RBY3Rpb24pCi17Ci0gICAgLy8gV2Ugb25seSBkcmF3IGlu
IHRoZSBmb3Jncm91bmQgcGhhc2UsIHNvIHdlIG9ubHkgaGl0LXRlc3QgdGhlbi4KLSAgICBpZiAo
aGl0VGVzdEFjdGlvbiAhPSBIaXRUZXN0Rm9yZWdyb3VuZCkKLSAgICAgICAgcmV0dXJuIGZhbHNl
OwotCi0gICAgRmxvYXRQb2ludCBsb2NhbFBvaW50ID0gbV9sb2NhbFRyYW5zZm9ybS5pbnZlcnNl
KCkubWFwUG9pbnQocG9pbnRJblBhcmVudCk7Ci0KLSAgICBpZiAoIVNWR1JlbmRlclN1cHBvcnQ6
OnBvaW50SW5DbGlwcGluZ0FyZWEodGhpcywgbG9jYWxQb2ludCkpCi0gICAgICAgIHJldHVybiBm
YWxzZTsKLQotICAgIFBvaW50ZXJFdmVudHNIaXRSdWxlcyBoaXRSdWxlcyhQb2ludGVyRXZlbnRz
SGl0UnVsZXM6OlNWR19QQVRIX0hJVFRFU1RJTkcsIHJlcXVlc3QsIHN0eWxlKCktPnBvaW50ZXJF
dmVudHMoKSk7Ci0gICAgYm9vbCBpc1Zpc2libGUgPSAoc3R5bGUoKS0+dmlzaWJpbGl0eSgpID09
IFZJU0lCTEUpOwotICAgIGlmIChpc1Zpc2libGUgfHwgIWhpdFJ1bGVzLnJlcXVpcmVWaXNpYmxl
KSB7Ci0gICAgICAgIGNvbnN0IFNWR1JlbmRlclN0eWxlKiBzdmdTdHlsZSA9IHN0eWxlKCktPnN2
Z1N0eWxlKCk7Ci0gICAgICAgIFdpbmRSdWxlIGZpbGxSdWxlID0gc3ZnU3R5bGUtPmZpbGxSdWxl
KCk7Ci0gICAgICAgIGlmIChyZXF1ZXN0LnN2Z0NsaXBDb250ZW50KCkpCi0gICAgICAgICAgICBm
aWxsUnVsZSA9IHN2Z1N0eWxlLT5jbGlwUnVsZSgpOwotICAgICAgICBpZiAoKGhpdFJ1bGVzLmNh
bkhpdFN0cm9rZSAmJiAoc3ZnU3R5bGUtPmhhc1N0cm9rZSgpIHx8ICFoaXRSdWxlcy5yZXF1aXJl
U3Ryb2tlKSAmJiBzdHJva2VDb250YWlucyhsb2NhbFBvaW50LCBoaXRSdWxlcy5yZXF1aXJlU3Ry
b2tlKSkKLSAgICAgICAgICAgIHx8IChoaXRSdWxlcy5jYW5IaXRGaWxsICYmIChzdmdTdHlsZS0+
aGFzRmlsbCgpIHx8ICFoaXRSdWxlcy5yZXF1aXJlRmlsbCkgJiYgZmlsbENvbnRhaW5zKGxvY2Fs
UG9pbnQsIGhpdFJ1bGVzLnJlcXVpcmVGaWxsLCBmaWxsUnVsZSkpKSB7Ci0gICAgICAgICAgICB1
cGRhdGVIaXRUZXN0UmVzdWx0KHJlc3VsdCwgcm91bmRlZExheW91dFBvaW50KGxvY2FsUG9pbnQp
KTsKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICB9Ci0gICAgfQotICAgIHJldHVy
biBmYWxzZTsKLX0KLQotRmxvYXRSZWN0IFJlbmRlclNWR1BhdGg6OmNhbGN1bGF0ZU1hcmtlckJv
dW5kc0lmTmVlZGVkKCkKLXsKLSAgICBTVkdFbGVtZW50KiBzdmdFbGVtZW50ID0gc3RhdGljX2Nh
c3Q8U1ZHRWxlbWVudCo+KG5vZGUoKSk7Ci0gICAgQVNTRVJUKHN2Z0VsZW1lbnQgJiYgc3ZnRWxl
bWVudC0+ZG9jdW1lbnQoKSk7Ci0gICAgaWYgKCFzdmdFbGVtZW50LT5pc1N0eWxlZCgpKQotICAg
ICAgICByZXR1cm4gRmxvYXRSZWN0KCk7Ci0KLSAgICBTVkdTdHlsZWRFbGVtZW50KiBzdHlsZWRF
bGVtZW50ID0gc3RhdGljX2Nhc3Q8U1ZHU3R5bGVkRWxlbWVudCo+KHN2Z0VsZW1lbnQpOwotICAg
IGlmICghc3R5bGVkRWxlbWVudC0+c3VwcG9ydHNNYXJrZXJzKCkpCi0gICAgICAgIHJldHVybiBG
bG9hdFJlY3QoKTsKLQotICAgIGNvbnN0IFNWR1JlbmRlclN0eWxlKiBzdmdTdHlsZSA9IHN0eWxl
KCktPnN2Z1N0eWxlKCk7Ci0gICAgQVNTRVJUKHN2Z1N0eWxlLT5oYXNNYXJrZXJzKCkpOwotCi0g
ICAgU1ZHUmVzb3VyY2VzKiByZXNvdXJjZXMgPSBTVkdSZXNvdXJjZXNDYWNoZTo6Y2FjaGVkUmVz
b3VyY2VzRm9yUmVuZGVyT2JqZWN0KHRoaXMpOwotICAgIGlmICghcmVzb3VyY2VzKQotICAgICAg
ICByZXR1cm4gRmxvYXRSZWN0KCk7Ci0KLSAgICBSZW5kZXJTVkdSZXNvdXJjZU1hcmtlciogbWFy
a2VyU3RhcnQgPSByZXNvdXJjZXMtPm1hcmtlclN0YXJ0KCk7Ci0gICAgUmVuZGVyU1ZHUmVzb3Vy
Y2VNYXJrZXIqIG1hcmtlck1pZCA9IHJlc291cmNlcy0+bWFya2VyTWlkKCk7Ci0gICAgUmVuZGVy
U1ZHUmVzb3VyY2VNYXJrZXIqIG1hcmtlckVuZCA9IHJlc291cmNlcy0+bWFya2VyRW5kKCk7Ci0g
ICAgaWYgKCFtYXJrZXJTdGFydCAmJiAhbWFya2VyTWlkICYmICFtYXJrZXJFbmQpCi0gICAgICAg
IHJldHVybiBGbG9hdFJlY3QoKTsKLQotICAgIHJldHVybiBtX21hcmtlckxheW91dEluZm8uY2Fs
Y3VsYXRlQm91bmRhcmllcyhtYXJrZXJTdGFydCwgbWFya2VyTWlkLCBtYXJrZXJFbmQsIHN2Z1N0
eWxlLT5zdHJva2VXaWR0aCgpLnZhbHVlKHN2Z0VsZW1lbnQpLCBtX3BhdGgpOwotfQotCi12b2lk
IFJlbmRlclNWR1BhdGg6OnVwZGF0ZUNhY2hlZEJvdW5kYXJpZXMoKQotewotICAgIGlmIChtX3Bh
dGguaXNFbXB0eSgpKSB7Ci0gICAgICAgIG1fZmlsbEJvdW5kaW5nQm94ID0gRmxvYXRSZWN0KCk7
Ci0gICAgICAgIG1fc3Ryb2tlQW5kTWFya2VyQm91bmRpbmdCb3ggPSBGbG9hdFJlY3QoKTsKLSAg
ICAgICAgbV9yZXBhaW50Qm91bmRpbmdCb3ggPSBGbG9hdFJlY3QoKTsKLSAgICAgICAgcmV0dXJu
OwotICAgIH0KLQotICAgIC8vIENhY2hlIF91bmNsaXBwZWRfIGZpbGwgYm91bmRpbmcgYm94LCB1
c2VkIGZvciBjYWxjdWxhdGlvbnMgaW4gcmVzb3VyY2VzCi0gICAgbV9maWxsQm91bmRpbmdCb3gg
PSBtX3BhdGguYm91bmRpbmdSZWN0KCk7Ci0KLSAgICAvLyBTcGVjKDExLjQpOiBBbnkgemVybyBs
ZW5ndGggc3VicGF0aCBzaGFsbCBub3QgYmUgc3Ryb2tlZCBpZiB0aGUg4oCYc3Ryb2tlLWxpbmVj
YXDigJkgcHJvcGVydHkgaGFzIGEgdmFsdWUgb2YgYnV0dAotICAgIC8vIGJ1dCBzaGFsbCBiZSBz
dHJva2VkIGlmIHRoZSDigJhzdHJva2UtbGluZWNhcOKAmSBwcm9wZXJ0eSBoYXMgYSB2YWx1ZSBv
ZiByb3VuZCBvciBzcXVhcmUKLSAgICBpZiAoc2hvdWxkU3Ryb2tlWmVyb0xlbmd0aFN1YnBhdGgo
KSkgewotICAgICAgICBtX3N0cm9rZUFuZE1hcmtlckJvdW5kaW5nQm94ID0gemVyb0xlbmd0aFN1
YnBhdGhSZWN0KCk7Ci0gICAgICAgIC8vIENhY2hlIHNtYWxsZXN0IHBvc3NpYmxlIHJlcGFpbnQg
cmVjdGFuZ2xlCi0gICAgICAgIG1fcmVwYWludEJvdW5kaW5nQm94ID0gbV9zdHJva2VBbmRNYXJr
ZXJCb3VuZGluZ0JveDsKLSAgICAgICAgU1ZHUmVuZGVyU3VwcG9ydDo6aW50ZXJzZWN0UmVwYWlu
dFJlY3RXaXRoUmVzb3VyY2VzKHRoaXMsIG1fcmVwYWludEJvdW5kaW5nQm94KTsKLSAgICAgICAg
cmV0dXJuOwotICAgIH0KLQotICAgIC8vIENhY2hlIF91bmNsaXBwZWRfIHN0cm9rZSBib3VuZGlu
ZyBib3gsIHVzZWQgZm9yIGNhbGN1bGF0aW9ucyBpbiByZXNvdXJjZXMgKGluY2x1ZGVzIG1hcmtl
ciBib3VuZGFyaWVzKQotICAgIG1fc3Ryb2tlQW5kTWFya2VyQm91bmRpbmdCb3ggPSBtX2ZpbGxC
b3VuZGluZ0JveDsKLQotICAgIGNvbnN0IFNWR1JlbmRlclN0eWxlKiBzdmdTdHlsZSA9IHN0eWxl
KCktPnN2Z1N0eWxlKCk7Ci0gICAgaWYgKHN2Z1N0eWxlLT5oYXNTdHJva2UoKSkgewotICAgICAg
ICBCb3VuZGluZ1JlY3RTdHJva2VTdHlsZUFwcGxpZXIgc3Ryb2tlU3R5bGUodGhpcywgc3R5bGUo
KSk7Ci0gICAgICAgIG1fc3Ryb2tlQW5kTWFya2VyQm91bmRpbmdCb3gudW5pdGUobV9wYXRoLnN0
cm9rZUJvdW5kaW5nUmVjdCgmc3Ryb2tlU3R5bGUpKTsKLSAgICB9Ci0KLSAgICBpZiAoc3ZnU3R5
bGUtPmhhc01hcmtlcnMoKSkgewotICAgICAgICBGbG9hdFJlY3QgbWFya2VyQm91bmRzID0gY2Fs
Y3VsYXRlTWFya2VyQm91bmRzSWZOZWVkZWQoKTsKLSAgICAgICAgaWYgKCFtYXJrZXJCb3VuZHMu
aXNFbXB0eSgpKQotICAgICAgICAgICAgbV9zdHJva2VBbmRNYXJrZXJCb3VuZGluZ0JveC51bml0
ZShtYXJrZXJCb3VuZHMpOwotICAgIH0KLQotICAgIC8vIENhY2hlIHNtYWxsZXN0IHBvc3NpYmxl
IHJlcGFpbnQgcmVjdGFuZ2xlCi0gICAgbV9yZXBhaW50Qm91bmRpbmdCb3ggPSBtX3N0cm9rZUFu
ZE1hcmtlckJvdW5kaW5nQm94OwotICAgIFNWR1JlbmRlclN1cHBvcnQ6OmludGVyc2VjdFJlcGFp
bnRSZWN0V2l0aFJlc291cmNlcyh0aGlzLCBtX3JlcGFpbnRCb3VuZGluZ0JveCk7Ci19Ci0KIH0K
IAogI2VuZGlmIC8vIEVOQUJMRShTVkcpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvc3ZnL1JlbmRlclNWR1BhdGguaCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcv
UmVuZGVyU1ZHUGF0aC5oCmluZGV4IDk4ZTYwOGQuLmQ4NDQyOTcgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUGF0aC5oCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUGF0aC5oCkBAIC00LDYgKzQsOCBAQAogICogQ29w
eXJpZ2h0IChDKSAyMDA1IEVyaWMgU2VpZGVsIDxlcmljQHdlYmtpdC5vcmc+CiAgKiBDb3B5cmln
aHQgKEMpIDIwMDYgQXBwbGUgQ29tcHV0ZXIsIEluYwogICogQ29weXJpZ2h0IChDKSAyMDA5IEdv
b2dsZSwgSW5jLgorICogQ29weXJpZ2h0IChDKSAyMDExIFJlbmF0YSBIb2RvdmFuIDxyZW5pQHdl
YmtpdC5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgVW5pdmVyc2l0eSBvZiBTemVnZWQKICAq
CiAgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUg
aXQgYW5kL29yCiAgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFy
eSBHZW5lcmFsIFB1YmxpYwpAQCAtMjUsODYgKzI3LDIxIEBACiAjZGVmaW5lIFJlbmRlclNWR1Bh
dGhfaAogCiAjaWYgRU5BQkxFKFNWRykKLSNpbmNsdWRlICJBZmZpbmVUcmFuc2Zvcm0uaCIKLSNp
bmNsdWRlICJGbG9hdFJlY3QuaCIKLSNpbmNsdWRlICJSZW5kZXJTVkdNb2RlbE9iamVjdC5oIgot
I2luY2x1ZGUgIlNWR01hcmtlckxheW91dEluZm8uaCIKKyNpbmNsdWRlICJSZW5kZXJTVkdTaGFw
ZS5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLWNsYXNzIEZsb2F0UG9pbnQ7Ci1jbGFzcyBH
cmFwaGljc0NvbnRleHRTdGF0ZVNhdmVyOwotY2xhc3MgUmVuZGVyU1ZHQ29udGFpbmVyOwotY2xh
c3MgU1ZHU3R5bGVkVHJhbnNmb3JtYWJsZUVsZW1lbnQ7Ci0KLWNsYXNzIFJlbmRlclNWR1BhdGgg
OiBwdWJsaWMgUmVuZGVyU1ZHTW9kZWxPYmplY3QgeworLy8gRklYTUU6IFJlbmRlclNWR1BhdGgg
d2lsbCBiZSByZW1vdmVkIHdoZW4gYWxsIFNWRyBzaGFwZXMgd2lsbCBiZSByZW5kZXJlZCB2aWEg
UmVuZGVyU1ZHU2hhcGUuCitjbGFzcyBSZW5kZXJTVkdQYXRoIDogcHVibGljIFJlbmRlclNWR1No
YXBlIHsKIHB1YmxpYzoKLSAgICBleHBsaWNpdCBSZW5kZXJTVkdQYXRoKFNWR1N0eWxlZFRyYW5z
Zm9ybWFibGVFbGVtZW50Kik7CisgICAgUmVuZGVyU1ZHUGF0aChTVkdTdHlsZWRUcmFuc2Zvcm1h
YmxlRWxlbWVudCopOwogICAgIHZpcnR1YWwgflJlbmRlclNWR1BhdGgoKTsKIAotICAgIGNvbnN0
IFBhdGgmIHBhdGgoKSBjb25zdCB7IHJldHVybiBtX3BhdGg7IH0KLSAgICB2b2lkIHNldE5lZWRz
UGF0aFVwZGF0ZSgpIHsgbV9uZWVkc1BhdGhVcGRhdGUgPSB0cnVlOyB9Ci0gICAgdmlydHVhbCB2
b2lkIHNldE5lZWRzQm91bmRhcmllc1VwZGF0ZSgpIHsgbV9uZWVkc0JvdW5kYXJpZXNVcGRhdGUg
PSB0cnVlOyB9Ci0gICAgdmlydHVhbCB2b2lkIHNldE5lZWRzVHJhbnNmb3JtVXBkYXRlKCkgeyBt
X25lZWRzVHJhbnNmb3JtVXBkYXRlID0gdHJ1ZTsgfQotCiBwcml2YXRlOgotICAgIC8vIEhpdC1k
ZXRlY3Rpb24gc2VwZXJhdGVkIGZvciB0aGUgZmlsbCBhbmQgdGhlIHN0cm9rZQotICAgIGJvb2wg
ZmlsbENvbnRhaW5zKGNvbnN0IEZsb2F0UG9pbnQmLCBib29sIHJlcXVpcmVzRmlsbCA9IHRydWUs
IFdpbmRSdWxlIGZpbGxSdWxlID0gUlVMRV9OT05aRVJPKTsKLSAgICBib29sIHN0cm9rZUNvbnRh
aW5zKGNvbnN0IEZsb2F0UG9pbnQmLCBib29sIHJlcXVpcmVzU3Ryb2tlID0gdHJ1ZSk7Ci0KLSAg
ICB2aXJ0dWFsIEZsb2F0UmVjdCBvYmplY3RCb3VuZGluZ0JveCgpIGNvbnN0IHsgcmV0dXJuIG1f
ZmlsbEJvdW5kaW5nQm94OyB9Ci0gICAgdmlydHVhbCBGbG9hdFJlY3Qgc3Ryb2tlQm91bmRpbmdC
b3goKSBjb25zdCB7IHJldHVybiBtX3N0cm9rZUFuZE1hcmtlckJvdW5kaW5nQm94OyB9Ci0gICAg
dmlydHVhbCBGbG9hdFJlY3QgcmVwYWludFJlY3RJbkxvY2FsQ29vcmRpbmF0ZXMoKSBjb25zdCB7
IHJldHVybiBtX3JlcGFpbnRCb3VuZGluZ0JveDsgfQotICAgIHZpcnR1YWwgY29uc3QgQWZmaW5l
VHJhbnNmb3JtJiBsb2NhbFRvUGFyZW50VHJhbnNmb3JtKCkgY29uc3QgeyByZXR1cm4gbV9sb2Nh
bFRyYW5zZm9ybTsgfQotCiAgICAgdmlydHVhbCBib29sIGlzU1ZHUGF0aCgpIGNvbnN0IHsgcmV0
dXJuIHRydWU7IH0KICAgICB2aXJ0dWFsIGNvbnN0IGNoYXIqIHJlbmRlck5hbWUoKSBjb25zdCB7
IHJldHVybiAiUmVuZGVyU1ZHUGF0aCI7IH0KLQotICAgIHZpcnR1YWwgdm9pZCBsYXlvdXQoKTsK
LSAgICB2aXJ0dWFsIHZvaWQgcGFpbnQoUGFpbnRJbmZvJiwgY29uc3QgTGF5b3V0UG9pbnQmKTsK
LSAgICB2aXJ0dWFsIHZvaWQgYWRkRm9jdXNSaW5nUmVjdHMoVmVjdG9yPExheW91dFJlY3Q+Jiwg
Y29uc3QgTGF5b3V0UG9pbnQmKTsKLQotICAgIHZpcnR1YWwgYm9vbCBub2RlQXRGbG9hdFBvaW50
KGNvbnN0IEhpdFRlc3RSZXF1ZXN0JiwgSGl0VGVzdFJlc3VsdCYsIGNvbnN0IEZsb2F0UG9pbnQm
IHBvaW50SW5QYXJlbnQsIEhpdFRlc3RBY3Rpb24pOwotCi0gICAgRmxvYXRSZWN0IGNhbGN1bGF0
ZU1hcmtlckJvdW5kc0lmTmVlZGVkKCk7Ci0gICAgdm9pZCB1cGRhdGVDYWNoZWRCb3VuZGFyaWVz
KCk7Ci0KLSAgICB2b2lkIHNldHVwU3F1YXJlQ2FwUGF0aChQYXRoKiYgdXNlUGF0aCwgaW50JiBh
cHBseU1vZGUpOwotICAgIGJvb2wgc2V0dXBOb25TY2FsaW5nU3Ryb2tlUGF0aChQYXRoKiYgdXNl
UGF0aCwgR3JhcGhpY3NDb250ZXh0U3RhdGVTYXZlciYpOwotICAgIGJvb2wgc2hvdWxkU3Ryb2tl
WmVyb0xlbmd0aFN1YnBhdGgoKSBjb25zdDsKLSAgICBGbG9hdFJlY3QgemVyb0xlbmd0aFN1YnBh
dGhSZWN0KCkgY29uc3Q7Ci0KLXByaXZhdGU6Ci0gICAgdmlydHVhbCBBZmZpbmVUcmFuc2Zvcm0g
bG9jYWxUcmFuc2Zvcm0oKSBjb25zdCB7IHJldHVybiBtX2xvY2FsVHJhbnNmb3JtOyB9Ci0gICAg
dm9pZCBmaWxsQW5kU3Ryb2tlUGF0aChHcmFwaGljc0NvbnRleHQqKTsKLQotICAgIGJvb2wgbV9u
ZWVkc0JvdW5kYXJpZXNVcGRhdGUgOiAxOwotICAgIGJvb2wgbV9uZWVkc1BhdGhVcGRhdGUgOiAx
OwotICAgIGJvb2wgbV9uZWVkc1RyYW5zZm9ybVVwZGF0ZSA6IDE7Ci0KLSAgICBtdXRhYmxlIFBh
dGggbV9wYXRoOwotICAgIEZsb2F0UmVjdCBtX2ZpbGxCb3VuZGluZ0JveDsKLSAgICBGbG9hdFJl
Y3QgbV9zdHJva2VBbmRNYXJrZXJCb3VuZGluZ0JveDsKLSAgICBGbG9hdFJlY3QgbV9yZXBhaW50
Qm91bmRpbmdCb3g7Ci0gICAgU1ZHTWFya2VyTGF5b3V0SW5mbyBtX21hcmtlckxheW91dEluZm87
Ci0gICAgQWZmaW5lVHJhbnNmb3JtIG1fbG9jYWxUcmFuc2Zvcm07CiB9OwogCi1pbmxpbmUgUmVu
ZGVyU1ZHUGF0aCogdG9SZW5kZXJTVkdQYXRoKFJlbmRlck9iamVjdCogb2JqZWN0KQotewotICAg
IEFTU0VSVCghb2JqZWN0IHx8IG9iamVjdC0+aXNTVkdQYXRoKCkpOwotICAgIHJldHVybiBzdGF0
aWNfY2FzdDxSZW5kZXJTVkdQYXRoKj4ob2JqZWN0KTsKLX0KLQotaW5saW5lIGNvbnN0IFJlbmRl
clNWR1BhdGgqIHRvUmVuZGVyU1ZHUGF0aChjb25zdCBSZW5kZXJPYmplY3QqIG9iamVjdCkKLXsK
LSAgICBBU1NFUlQoIW9iamVjdCB8fCBvYmplY3QtPmlzU1ZHUGF0aCgpKTsKLSAgICByZXR1cm4g
c3RhdGljX2Nhc3Q8Y29uc3QgUmVuZGVyU1ZHUGF0aCo+KG9iamVjdCk7Ci19Ci0KLS8vIFRoaXMg
d2lsbCBjYXRjaCBhbnlvbmUgZG9pbmcgYW4gdW5uZWNlc3NhcnkgY2FzdC4KLXZvaWQgdG9SZW5k
ZXJTVkdQYXRoKGNvbnN0IFJlbmRlclNWR1BhdGgqKTsKLQogfQogCiAjZW5kaWYgLy8gRU5BQkxF
KFNWRykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZH
UmVjdC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1JlY3QuY3Bw
Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgyYTAxZTEKLS0tIC9kZXYvbnVs
bAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1JlY3QuY3BwCkBA
IC0wLDAgKzEsMTI4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDExIFVuaXZlcnNpdHkgb2Yg
U3plZ2VkCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgUmVuYXRhIEhvZG92YW4gKHJlbmlAd2Via2l0
Lm9yZykKKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBVTklWRVJTSVRZIE9GIFNaRUdFRCBgYEFTIElTJycgQU5EIEFO
WQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
IElOIE5PIEVWRU5UIFNIQUxMIFVOSVZFUlNJVFkgT0YgU1pFR0VEIE9SCisgKiBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisg
KiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5o
IgorCisjaWYgRU5BQkxFKFNWRykKKyNpbmNsdWRlICJSZW5kZXJTVkdSZWN0LmgiCisKKyNpbmNs
dWRlICJTVkdOYW1lcy5oIgorI2luY2x1ZGUgIlNWR1JlY3RFbGVtZW50LmgiCisKK25hbWVzcGFj
ZSBXZWJDb3JlIHsKKworUmVuZGVyU1ZHUmVjdDo6UmVuZGVyU1ZHUmVjdChTVkdTdHlsZWRUcmFu
c2Zvcm1hYmxlRWxlbWVudCogbm9kZSkKKyAgICA6IFJlbmRlclNWR1NoYXBlKG5vZGUpCit7Cit9
CisKK1JlbmRlclNWR1JlY3Q6On5SZW5kZXJTVkdSZWN0KCkKK3sKK30KKwordm9pZCBSZW5kZXJT
VkdSZWN0OjpjcmVhdGVTaGFwZSgpCit7CisgICAgLy8gQ2xlYXIgbV9yZWN0LgorICAgIG1fcmVj
dCA9IEZsb2F0UmVjdCgpOworICAgIFNWR1JlY3RFbGVtZW50KiByZWN0ID0gc3RhdGljX2Nhc3Q8
U1ZHUmVjdEVsZW1lbnQqPihub2RlKCkpOworICAgIEFTU0VSVChyZWN0KTsKKyAgICBib29sIG1f
aGFzUnggPSByZWN0LT5oYXNBdHRyaWJ1dGUoU1ZHTmFtZXM6OnJ4QXR0cik7CisgICAgYm9vbCBt
X2hhc1J5ID0gcmVjdC0+aGFzQXR0cmlidXRlKFNWR05hbWVzOjpyeUF0dHIpOworICAgIC8vIEZh
bGxiYWNrIHRvIHRoZSBwYXJlbnQgaWYgcmVjdCBoYXMgc3BlY2lhbCBmZWF0dXJlcy4KKyAgICBp
ZiAobV9oYXNSeCB8fCBtX2hhc1J5KSB7CisgICAgICAgUmVuZGVyU1ZHU2hhcGU6OmNyZWF0ZVNo
YXBlKCk7CisgICAgICAgc2V0SXNQYXRoKCk7CisgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBm
bG9hdCB3aWR0aFZhbHVlID0gcmVjdC0+d2lkdGgoKS52YWx1ZShyZWN0KTsKKyAgICBpZiAod2lk
dGhWYWx1ZSA8PSAwKQorICAgICAgICByZXR1cm47CisKKyAgICBmbG9hdCBoZWlnaHRWYWx1ZSA9
IHJlY3QtPmhlaWdodCgpLnZhbHVlKHJlY3QpOworICAgIGlmIChoZWlnaHRWYWx1ZSA8PSAwKQor
ICAgICAgICByZXR1cm47CisKKyAgICBmbG9hdCB4VmFsdWUgPSByZWN0LT54KCkudmFsdWUocmVj
dCk7CisgICAgZmxvYXQgeVZhbHVlID0gcmVjdC0+eSgpLnZhbHVlKHJlY3QpOworICAgIG1fcmVj
dCA9IEZsb2F0UmVjdCh4VmFsdWUsIHlWYWx1ZSwgd2lkdGhWYWx1ZSwgaGVpZ2h0VmFsdWUpOwor
fQorCisKK0Zsb2F0UmVjdCBSZW5kZXJTVkdSZWN0OjpvYmplY3RCb3VuZGluZ0JveCgpIGNvbnN0
Cit7CisgICAgaWYgKGlzUGF0aCgpKQorICAgICAgICByZXR1cm4gUmVuZGVyU1ZHU2hhcGU6Om9i
amVjdEJvdW5kaW5nQm94KCk7CisgICAgcmV0dXJuIG1fcmVjdDsKK30KKworRmxvYXRSZWN0IFJl
bmRlclNWR1JlY3Q6OnN0cm9rZUJvdW5kaW5nQm94KCkKK3sKKyAgICBpZiAoaXNQYXRoKCkpCisg
ICAgICAgIHJldHVybiBSZW5kZXJTVkdTaGFwZTo6c3Ryb2tlQm91bmRpbmdCb3goKTsKKyAgICAv
LyBJZiB3ZSBpbmZsYXRlIHRoZSBtX3JlY3Qgd2l0aCB0aGUgaGFsZiBzaXplIHN0cm9rZVdpZHRo
LCB3ZSBnZXQgdGhlIHN0cm9rZUJvdW5kaW5nQm94IGluIG5vbi1mYWxsYmFjayBwYXRoIG1vZGUu
CisgICAgQm91bmRpbmdSZWN0U3Ryb2tlU3R5bGVBcHBsaWVyIHN0cm9rZVN0eWxlKHRoaXMsIHN0
eWxlKCkpOworICAgIEZsb2F0UmVjdCBzdHJva2VSZWN0ID0gbV9yZWN0OworICAgIHN0cm9rZVJl
Y3QuaW5mbGF0ZSh0aGlzLT5zdHJva2VXaWR0aCgpIC8gMik7CisgICAgcmV0dXJuIHN0cm9rZVJl
Y3Q7Cit9CisKK3ZvaWQgUmVuZGVyU1ZHUmVjdDo6ZmlsbFNoYXBlKEdyYXBoaWNzQ29udGV4dCog
Y29udGV4dCkKK3sKKyAgICAgY29udGV4dC0+ZmlsbFJlY3QobV9yZWN0KTsKK30KKwordm9pZCBS
ZW5kZXJTVkdSZWN0OjpzdHJva2VTaGFwZShHcmFwaGljc0NvbnRleHQqIGNvbnRleHQpCit7Cisg
ICAgY29udGV4dC0+c3Ryb2tlUmVjdChtX3JlY3QsIHRoaXMtPnN0cm9rZVdpZHRoKCkpOworfQor
Citib29sIFJlbmRlclNWR1JlY3Q6OnN0cm9rZUNvbnRhaW5zU2xvd0Nhc2UoY29uc3QgRmxvYXRQ
b2ludCYgcG9pbnQpCit7CisgICAgaWYgKGlzUGF0aCgpKQorICAgICAgICByZXR1cm4gUmVuZGVy
U1ZHU2hhcGU6OnN0cm9rZUNvbnRhaW5zU2xvd0Nhc2UocG9pbnQpOworCisgICAgLy8gVG8gZGVj
ZWlkZSB0aGUgc3Ryb2tlIGNvbnRhaW5pbmcgd2UgY3JlYXRlIHR3byByZWN0cyB3aGljaCByZXBy
ZXNlbnQgdGhlIGlubmVyIGFuZAorICAgIC8vIHRoZSBvdXRlciBzdHJva2UgYm9yZGVycy4gVGhl
IGNvbnRhaW5pbmcgZXhpc3RzLCBpZiB0aGUgcG9pbnQgaXMgYmV0d2VlbiB0aGVtLgorICAgIGZs
b2F0IHN0cm9rZVdpZHRoID0gdGhpcy0+c3Ryb2tlV2lkdGgoKTsKKyAgICBGbG9hdFJlY3QgaW5u
ZXJTdHJva2VSZWN0ID0gbV9yZWN0OworICAgIEZsb2F0UmVjdCBvdXRlclN0cm9rZVJlY3QgPSBt
X3JlY3Q7CisgICAgaW5uZXJTdHJva2VSZWN0LmluZmxhdGUoLXN0cm9rZVdpZHRoIC8gMik7Cisg
ICAgb3V0ZXJTdHJva2VSZWN0LmluZmxhdGUoc3Ryb2tlV2lkdGggLyAyKTsKKyAgICByZXR1cm4g
KCghaW5uZXJTdHJva2VSZWN0LmNvbnRhaW5zKHBvaW50KSB8fCAhaW5uZXJTdHJva2VSZWN0LmNv
bXByaXNlcyhwb2ludCkpCisgICAgICAgICAgICAmJiBvdXRlclN0cm9rZVJlY3QuY29udGFpbnMo
cG9pbnQpKSA/ICB0cnVlIDogZmFsc2U7Cit9CisKK2Jvb2wgUmVuZGVyU1ZHUmVjdDo6ZmlsbENv
bnRhaW5zU2xvd0Nhc2UoY29uc3QgRmxvYXRQb2ludCYgcG9pbnQsIGNvbnN0IFdpbmRSdWxlJiBm
aWxsUnVsZSkgY29uc3QKK3sKKyAgICBpZiAoaXNQYXRoKCkpCisgICAgICAgIHJldHVybiBSZW5k
ZXJTVkdTaGFwZTo6ZmlsbENvbnRhaW5zU2xvd0Nhc2UocG9pbnQsIGZpbGxSdWxlKTsKKyAgICBy
ZXR1cm4gbV9yZWN0LmNvbnRhaW5zKHBvaW50LngoKSwgcG9pbnQueSgpKSA/IHRydWUgOiBmYWxz
ZTsKK30KKworfQorCisjZW5kaWYgLy8gRU5BQkxFKFNWRykKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVjdC5oIGIvU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZWN0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw
MDAwMC4uMzNiNjBlMwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9zdmcvUmVuZGVyU1ZHUmVjdC5oCkBAIC0wLDAgKzEsNjEgQEAKKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTEgVW5pdmVyc2l0eSBvZiBTemVnZWQKKyAqIENvcHlyaWdodCAoQykgMjAxMSBSZW5h
dGEgSG9kb3ZhbiAocmVuaUB3ZWJraXQub3JnKQorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFVOSVZFUlNJVFkgT0Yg
U1pFR0VEIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVU5JVkVSU0lUWSBPRiBT
WkVHRUQgT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisg
KiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAq
LworCisjaWZuZGVmIFJlbmRlclNWR1JlY3RfaAorI2RlZmluZSBSZW5kZXJTVkdSZWN0X2gKKwor
I2lmIEVOQUJMRShTVkcpCisjaW5jbHVkZSAiUmVuZGVyU1ZHUGF0aC5oIgorCituYW1lc3BhY2Ug
V2ViQ29yZSB7CisKK2NsYXNzIFJlbmRlclNWR1JlY3QgOiBwdWJsaWMgUmVuZGVyU1ZHU2hhcGUg
eworcHVibGljOgorICAgIGV4cGxpY2l0IFJlbmRlclNWR1JlY3QoU1ZHU3R5bGVkVHJhbnNmb3Jt
YWJsZUVsZW1lbnQqKTsKKyAgICB2aXJ0dWFsIH5SZW5kZXJTVkdSZWN0KCk7CisKK3ByaXZhdGU6
CisgICAgdmlydHVhbCBib29sIGlzU1ZHUmVjdCgpIGNvbnN0IHsgcmV0dXJuIHRydWU7IH0KKyAg
ICB2aXJ0dWFsIGNvbnN0IGNoYXIqIHJlbmRlck5hbWUoKSBjb25zdCB7IHJldHVybiAiUmVuZGVy
U1ZHUmVjdCI7IH0KKworICAgIHZvaWQgY3JlYXRlU2hhcGUoKTsKKyAgICBib29sIGlzRW1wdHko
KSBjb25zdCB7IHJldHVybiBoYXNQYXRoKCkgPyBSZW5kZXJTVkdTaGFwZTo6aXNFbXB0eSgpIDog
bV9yZWN0LmlzRW1wdHkoKTsgfTsKKyAgICB2b2lkIGZpbGxTaGFwZShHcmFwaGljc0NvbnRleHQq
KTsKKyAgICBGbG9hdFJlY3Qgb2JqZWN0Qm91bmRpbmdCb3goKSBjb25zdDsKKyAgICBGbG9hdFJl
Y3Qgc3Ryb2tlQm91bmRpbmdCb3goKTsKKyAgICB2b2lkIHN0cm9rZVNoYXBlKEdyYXBoaWNzQ29u
dGV4dCopOworICAgIGJvb2wgc3Ryb2tlQ29udGFpbnNTbG93Q2FzZShjb25zdCBGbG9hdFBvaW50
Jik7CisgICAgYm9vbCBmaWxsQ29udGFpbnNTbG93Q2FzZShjb25zdCBGbG9hdFBvaW50JiwgY29u
c3QgV2luZFJ1bGUmKSBjb25zdDsKKworcHJpdmF0ZToKKyAgICBGbG9hdFJlY3QgbV9yZWN0Owor
fTsKKworfQorCisjZW5kaWYgLy8gRU5BQkxFKFNWRykKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJjZS5oIGIvU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJjZS5oCmluZGV4IGE2N2JhNzMuLjJi
NDQzOGUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZH
UmVzb3VyY2UuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jl
c291cmNlLmgKQEAgLTIxLDYgKzIxLDcgQEAKICNkZWZpbmUgUmVuZGVyU1ZHUmVzb3VyY2VfaAog
CiAjaWYgRU5BQkxFKFNWRykKKyNpbmNsdWRlICJSZW5kZXJTVkdTaGFwZS5oIgogI2luY2x1ZGUg
IlJlbmRlclN0eWxlQ29uc3RhbnRzLmgiCiAjaW5jbHVkZSAiU1ZHRG9jdW1lbnRFeHRlbnNpb25z
LmgiCiAKQEAgLTYxLDcgKzYyLDcgQEAgcHVibGljOgogICAgIHZpcnR1YWwgdm9pZCByZW1vdmVD
bGllbnRGcm9tQ2FjaGUoUmVuZGVyT2JqZWN0KiwgYm9vbCBtYXJrRm9ySW52YWxpZGF0aW9uID0g
dHJ1ZSkgPSAwOwogCiAgICAgdmlydHVhbCBib29sIGFwcGx5UmVzb3VyY2UoUmVuZGVyT2JqZWN0
KiwgUmVuZGVyU3R5bGUqLCBHcmFwaGljc0NvbnRleHQqJiwgdW5zaWduZWQgc2hvcnQgcmVzb3Vy
Y2VNb2RlKSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIHBvc3RBcHBseVJlc291cmNlKFJlbmRlck9i
amVjdCosIEdyYXBoaWNzQ29udGV4dComLCB1bnNpZ25lZCBzaG9ydCwgY29uc3QgUGF0aCopIHsg
fQorICAgIHZpcnR1YWwgdm9pZCBwb3N0QXBwbHlSZXNvdXJjZShSZW5kZXJTVkdTaGFwZSosIEdy
YXBoaWNzQ29udGV4dComLCB1bnNpZ25lZCBzaG9ydCwgY29uc3QgUGF0aCopIHsgfQogICAgIHZp
cnR1YWwgRmxvYXRSZWN0IHJlc291cmNlQm91bmRpbmdCb3goUmVuZGVyT2JqZWN0KikgPSAwOwog
CiAgICAgdmlydHVhbCBSZW5kZXJTVkdSZXNvdXJjZVR5cGUgcmVzb3VyY2VUeXBlKCkgY29uc3Qg
PSAwOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdS
ZXNvdXJjZUNsaXBwZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJT
VkdSZXNvdXJjZUNsaXBwZXIuY3BwCmluZGV4IDIzOGMwOTYuLjFkODIxMjEgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VDbGlwcGVyLmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291cmNlQ2xp
cHBlci5jcHAKQEAgLTI0Miw3ICsyNDIsNyBAQCBib29sIFJlbmRlclNWR1Jlc291cmNlQ2xpcHBl
cjo6ZHJhd0NvbnRlbnRJbnRvTWFza0ltYWdlKENsaXBwZXJEYXRhKiBjbGlwcGVyRGF0YQogICAg
ICAgICB9CiAKICAgICAgICAgLy8gT25seSBzaGFwZXMsIHBhdGhzIGFuZCB0ZXh0cyBhcmUgYWxs
b3dlZCBmb3IgY2xpcHBpbmcuCi0gICAgICAgIGlmICghcmVuZGVyZXItPmlzU1ZHUGF0aCgpICYm
ICFyZW5kZXJlci0+aXNTVkdUZXh0KCkpCisgICAgICAgIGlmICghcmVuZGVyZXItPmlzU1ZHU2hh
cGUoKSAmJiAhcmVuZGVyZXItPmlzU1ZHVGV4dCgpKQogICAgICAgICAgICAgY29udGludWU7CiAK
ICAgICAgICAgLy8gU2F2ZSB0aGUgb2xkIFJlbmRlclN0eWxlIG9mIHRoZSBjdXJyZW50IG9iamVj
dCBmb3IgcmVzdG9yaW5nIGFmdGVyIGRyYXdpbmcKQEAgLTI4NCw3ICsyODQsNyBAQCB2b2lkIFJl
bmRlclNWR1Jlc291cmNlQ2xpcHBlcjo6Y2FsY3VsYXRlQ2xpcENvbnRlbnRSZXBhaW50UmVjdCgp
CiAgICAgICAgIFJlbmRlck9iamVjdCogcmVuZGVyZXIgPSBjaGlsZE5vZGUtPnJlbmRlcmVyKCk7
CiAgICAgICAgIGlmICghY2hpbGROb2RlLT5pc1NWR0VsZW1lbnQoKSB8fCAhc3RhdGljX2Nhc3Q8
U1ZHRWxlbWVudCo+KGNoaWxkTm9kZSktPmlzU3R5bGVkKCkgfHwgIXJlbmRlcmVyKQogICAgICAg
ICAgICAgY29udGludWU7Ci0gICAgICAgIGlmICghcmVuZGVyZXItPmlzU1ZHUGF0aCgpICYmICFy
ZW5kZXJlci0+aXNTVkdUZXh0KCkgJiYgIXJlbmRlcmVyLT5pc1NWR1NoYWRvd1RyZWVSb290Q29u
dGFpbmVyKCkpCisgICAgICAgIGlmICghcmVuZGVyZXItPmlzU1ZHU2hhcGUoKSAmJiAhcmVuZGVy
ZXItPmlzU1ZHVGV4dCgpICYmICFyZW5kZXJlci0+aXNTVkdTaGFkb3dUcmVlUm9vdENvbnRhaW5l
cigpKQogICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgIFJlbmRlclN0eWxlKiBzdHlsZSA9
IHJlbmRlcmVyLT5zdHlsZSgpOwogICAgICAgICBpZiAoIXN0eWxlIHx8IHN0eWxlLT5kaXNwbGF5
KCkgPT0gTk9ORSB8fCBzdHlsZS0+dmlzaWJpbGl0eSgpICE9IFZJU0lCTEUpCkBAIC0zMTAsNyAr
MzEwLDcgQEAgYm9vbCBSZW5kZXJTVkdSZXNvdXJjZUNsaXBwZXI6OmhpdFRlc3RDbGlwQ29udGVu
dChjb25zdCBGbG9hdFJlY3QmIG9iamVjdEJvdW5kaW4KICAgICAgICAgUmVuZGVyT2JqZWN0KiBy
ZW5kZXJlciA9IGNoaWxkTm9kZS0+cmVuZGVyZXIoKTsKICAgICAgICAgaWYgKCFjaGlsZE5vZGUt
PmlzU1ZHRWxlbWVudCgpIHx8ICFzdGF0aWNfY2FzdDxTVkdFbGVtZW50Kj4oY2hpbGROb2RlKS0+
aXNTdHlsZWQoKSB8fCAhcmVuZGVyZXIpCiAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAg
aWYgKCFyZW5kZXJlci0+aXNTVkdQYXRoKCkgJiYgIXJlbmRlcmVyLT5pc1NWR1RleHQoKSAmJiAh
cmVuZGVyZXItPmlzU1ZHU2hhZG93VHJlZVJvb3RDb250YWluZXIoKSkKKyAgICAgICAgaWYgKCFy
ZW5kZXJlci0+aXNTVkdTaGFwZSgpICYmICFyZW5kZXJlci0+aXNTVkdUZXh0KCkgJiYgIXJlbmRl
cmVyLT5pc1NWR1NoYWRvd1RyZWVSb290Q29udGFpbmVyKCkpCiAgICAgICAgICAgICBjb250aW51
ZTsKICAgICAgICAgSW50UG9pbnQgaGl0UG9pbnQ7CiAgICAgICAgIEhpdFRlc3RSZXN1bHQgcmVz
dWx0KGhpdFBvaW50KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcv
UmVuZGVyU1ZHUmVzb3VyY2VDb250YWluZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L3N2Zy9SZW5kZXJTVkdSZXNvdXJjZUNvbnRhaW5lci5jcHAKaW5kZXggNzRkNWQ2OS4uYjc0YWQ2
YiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNv
dXJjZUNvbnRhaW5lci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5k
ZXJTVkdSZXNvdXJjZUNvbnRhaW5lci5jcHAKQEAgLTE4MCw3ICsxODAsNyBAQCB2b2lkIFJlbmRl
clNWR1Jlc291cmNlQ29udGFpbmVyOjpyZWdpc3RlclJlc291cmNlKCkKIC8vIEZJWE1FOiBUaGlz
IGRvZXMgbm90IGJlbG9uZyBoZXJlLgogQWZmaW5lVHJhbnNmb3JtIFJlbmRlclNWR1Jlc291cmNl
Q29udGFpbmVyOjp0cmFuc2Zvcm1Pbk5vblNjYWxpbmdTdHJva2UoUmVuZGVyT2JqZWN0KiBvYmpl
Y3QsIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgcmVzb3VyY2VUcmFuc2Zvcm0pCiB7Ci0gICAgaWYg
KCFvYmplY3QtPmlzU1ZHUGF0aCgpKQorICAgIGlmICghb2JqZWN0LT5pc1NWR1NoYXBlKCkpCiAg
ICAgICAgIHJldHVybiByZXNvdXJjZVRyYW5zZm9ybTsKIAogICAgIFNWR1N0eWxlZFRyYW5zZm9y
bWFibGVFbGVtZW50KiBlbGVtZW50ID0gc3RhdGljX2Nhc3Q8U1ZHU3R5bGVkVHJhbnNmb3JtYWJs
ZUVsZW1lbnQqPihvYmplY3QtPm5vZGUoKSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291cmNlRmlsdGVyLmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VGaWx0ZXIuY3BwCmluZGV4IDRhMDJiMTcu
LmNlMTRiZmUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVy
U1ZHUmVzb3VyY2VGaWx0ZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcv
UmVuZGVyU1ZHUmVzb3VyY2VGaWx0ZXIuY3BwCkBAIC0yNTksOSArMjU5LDkgQEAgYm9vbCBSZW5k
ZXJTVkdSZXNvdXJjZUZpbHRlcjo6YXBwbHlSZXNvdXJjZShSZW5kZXJPYmplY3QqIG9iamVjdCwg
UmVuZGVyU3R5bGUqLAogICAgIHJldHVybiB0cnVlOwogfQogCi12b2lkIFJlbmRlclNWR1Jlc291
cmNlRmlsdGVyOjpwb3N0QXBwbHlSZXNvdXJjZShSZW5kZXJPYmplY3QqIG9iamVjdCwgR3JhcGhp
Y3NDb250ZXh0KiYgY29udGV4dCwgdW5zaWduZWQgc2hvcnQgcmVzb3VyY2VNb2RlLCBjb25zdCBQ
YXRoKikKK3ZvaWQgUmVuZGVyU1ZHUmVzb3VyY2VGaWx0ZXI6OnBvc3RBcHBseVJlc291cmNlKFJl
bmRlclNWR1NoYXBlKiBzaGFwZSwgR3JhcGhpY3NDb250ZXh0KiYgY29udGV4dCwgdW5zaWduZWQg
c2hvcnQgcmVzb3VyY2VNb2RlLCBjb25zdCBQYXRoKikKIHsKLSAgICBBU1NFUlQob2JqZWN0KTsK
KyAgICBBU1NFUlQoc2hhcGUpOwogICAgIEFTU0VSVChjb250ZXh0KTsKICNpZm5kZWYgTkRFQlVH
CiAgICAgQVNTRVJUKHJlc291cmNlTW9kZSA9PSBBcHBseVRvRGVmYXVsdE1vZGUpOwpAQCAtMjY5
LDYgKzI2OSw3IEBAIHZvaWQgUmVuZGVyU1ZHUmVzb3VyY2VGaWx0ZXI6OnBvc3RBcHBseVJlc291
cmNlKFJlbmRlck9iamVjdCogb2JqZWN0LCBHcmFwaGljc0NvCiAgICAgVU5VU0VEX1BBUkFNKHJl
c291cmNlTW9kZSk7CiAjZW5kaWYKIAorICAgIFJlbmRlck9iamVjdCogb2JqZWN0ID0gc3RhdGlj
X2Nhc3Q8UmVuZGVyT2JqZWN0Kj4oc2hhcGUpOwogICAgIEZpbHRlckRhdGEqIGZpbHRlckRhdGEg
PSBtX2ZpbHRlci5nZXQob2JqZWN0KTsKICAgICBpZiAoIWZpbHRlckRhdGEpCiAgICAgICAgIHJl
dHVybjsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZH
UmVzb3VyY2VGaWx0ZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZH
UmVzb3VyY2VGaWx0ZXIuaAppbmRleCA1YTViMDkyLi40OWFhMTc3IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291cmNlRmlsdGVyLmgKKysrIGIv
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJjZUZpbHRlci5oCkBA
IC03Miw3ICs3Miw3IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIHZvaWQgcmVtb3ZlQ2xpZW50RnJv
bUNhY2hlKFJlbmRlck9iamVjdCosIGJvb2wgbWFya0ZvckludmFsaWRhdGlvbiA9IHRydWUpOwog
CiAgICAgdmlydHVhbCBib29sIGFwcGx5UmVzb3VyY2UoUmVuZGVyT2JqZWN0KiwgUmVuZGVyU3R5
bGUqLCBHcmFwaGljc0NvbnRleHQqJiwgdW5zaWduZWQgc2hvcnQgcmVzb3VyY2VNb2RlKTsKLSAg
ICB2aXJ0dWFsIHZvaWQgcG9zdEFwcGx5UmVzb3VyY2UoUmVuZGVyT2JqZWN0KiwgR3JhcGhpY3ND
b250ZXh0KiYsIHVuc2lnbmVkIHNob3J0IHJlc291cmNlTW9kZSwgY29uc3QgUGF0aCopOworICAg
IHZpcnR1YWwgdm9pZCBwb3N0QXBwbHlSZXNvdXJjZShSZW5kZXJTVkdTaGFwZSosIEdyYXBoaWNz
Q29udGV4dComLCB1bnNpZ25lZCBzaG9ydCByZXNvdXJjZU1vZGUsIGNvbnN0IFBhdGgqKTsKIAog
ICAgIHZpcnR1YWwgRmxvYXRSZWN0IHJlc291cmNlQm91bmRpbmdCb3goUmVuZGVyT2JqZWN0Kik7
CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVz
b3VyY2VHcmFkaWVudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNW
R1Jlc291cmNlR3JhZGllbnQuY3BwCmluZGV4IDFhYWI5MzUuLjNhMzY1ZDBjIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291cmNlR3JhZGllbnQu
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VH
cmFkaWVudC5jcHAKQEAgLTI3LDYgKzI3LDcgQEAKIAogI2luY2x1ZGUgIkdyYWRpZW50QXR0cmli
dXRlcy5oIgogI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgorI2luY2x1ZGUgIlJlbmRlclNW
R1NoYXBlLmgiCiAjaW5jbHVkZSAiUmVuZGVyU1ZHVGV4dC5oIgogI2luY2x1ZGUgIlNWR0ltYWdl
QnVmZmVyVG9vbHMuaCIKICNpbmNsdWRlICJTVkdSZW5kZXJTdXBwb3J0LmgiCkBAIC0yMzEsMTIg
KzIzMiwxMyBAQCBib29sIFJlbmRlclNWR1Jlc291cmNlR3JhZGllbnQ6OmFwcGx5UmVzb3VyY2Uo
UmVuZGVyT2JqZWN0KiBvYmplY3QsIFJlbmRlclN0eWxlKgogICAgIHJldHVybiB0cnVlOwogfQog
Ci12b2lkIFJlbmRlclNWR1Jlc291cmNlR3JhZGllbnQ6OnBvc3RBcHBseVJlc291cmNlKFJlbmRl
ck9iamVjdCogb2JqZWN0LCBHcmFwaGljc0NvbnRleHQqJiBjb250ZXh0LCB1bnNpZ25lZCBzaG9y
dCByZXNvdXJjZU1vZGUsIGNvbnN0IFBhdGgqIHBhdGgpCit2b2lkIFJlbmRlclNWR1Jlc291cmNl
R3JhZGllbnQ6OnBvc3RBcHBseVJlc291cmNlKFJlbmRlclNWR1NoYXBlKiBzaGFwZSwgR3JhcGhp
Y3NDb250ZXh0KiYgY29udGV4dCwgdW5zaWduZWQgc2hvcnQgcmVzb3VyY2VNb2RlLCBjb25zdCBQ
YXRoKiBwYXRoKQogewogICAgIEFTU0VSVChjb250ZXh0KTsKICAgICBBU1NFUlQocmVzb3VyY2VN
b2RlICE9IEFwcGx5VG9EZWZhdWx0TW9kZSk7CiAKICAgICBpZiAocmVzb3VyY2VNb2RlICYgQXBw
bHlUb1RleHRNb2RlKSB7CisgICAgICAgIFJlbmRlck9iamVjdCogb2JqZWN0ID0gc3RhdGljX2Nh
c3Q8UmVuZGVyT2JqZWN0Kj4oc2hhcGUpOwogI2lmIFVTRShDRykKICAgICAgICAgLy8gQ0cgcmVx
dWlyZXMgc3BlY2lhbCBoYW5kbGluZyBmb3IgZ3JhZGllbnQgb24gdGV4dAogICAgICAgICBpZiAo
bV9zYXZlZENvbnRleHQgJiYgbV9ncmFkaWVudC5jb250YWlucyhvYmplY3QpKSB7CkBAIC0yNTks
MTEgKzI2MSwxMSBAQCB2b2lkIFJlbmRlclNWR1Jlc291cmNlR3JhZGllbnQ6OnBvc3RBcHBseVJl
c291cmNlKFJlbmRlck9iamVjdCogb2JqZWN0LCBHcmFwaGljcwogI2Vsc2UKICAgICAgICAgVU5V
U0VEX1BBUkFNKG9iamVjdCk7CiAjZW5kaWYKLSAgICB9IGVsc2UgaWYgKHBhdGgpIHsKKyAgICB9
IGVsc2UgewogICAgICAgICBpZiAocmVzb3VyY2VNb2RlICYgQXBwbHlUb0ZpbGxNb2RlKQotICAg
ICAgICAgICAgY29udGV4dC0+ZmlsbFBhdGgoKnBhdGgpOworICAgICAgICAgICAgcGF0aCA/IGNv
bnRleHQtPmZpbGxQYXRoKCpwYXRoKSA6IHNoYXBlLT5maWxsU2hhcGUoY29udGV4dCk7CiAgICAg
ICAgIGVsc2UgaWYgKHJlc291cmNlTW9kZSAmIEFwcGx5VG9TdHJva2VNb2RlKQotICAgICAgICAg
ICAgY29udGV4dC0+c3Ryb2tlUGF0aCgqcGF0aCk7CisgICAgICAgICAgICBwYXRoID8gY29udGV4
dC0+c3Ryb2tlUGF0aCgqcGF0aCkgOiBzaGFwZS0+c3Ryb2tlU2hhcGUoY29udGV4dCk7CiAgICAg
fQogCiAgICAgY29udGV4dC0+cmVzdG9yZSgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJjZUdyYWRpZW50LmggYi9Tb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291cmNlR3JhZGllbnQuaAppbmRleCBkZjQ5MmUy
Li4zNjY0YzNiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRl
clNWR1Jlc291cmNlR3JhZGllbnQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3Zn
L1JlbmRlclNWR1Jlc291cmNlR3JhZGllbnQuaApAQCAtNTAsNyArNTAsNyBAQCBwdWJsaWM6CiAg
ICAgdmlydHVhbCB2b2lkIHJlbW92ZUNsaWVudEZyb21DYWNoZShSZW5kZXJPYmplY3QqLCBib29s
IG1hcmtGb3JJbnZhbGlkYXRpb24gPSB0cnVlKTsKIAogICAgIHZpcnR1YWwgYm9vbCBhcHBseVJl
c291cmNlKFJlbmRlck9iamVjdCosIFJlbmRlclN0eWxlKiwgR3JhcGhpY3NDb250ZXh0KiYsIHVu
c2lnbmVkIHNob3J0IHJlc291cmNlTW9kZSk7Ci0gICAgdmlydHVhbCB2b2lkIHBvc3RBcHBseVJl
c291cmNlKFJlbmRlck9iamVjdCosIEdyYXBoaWNzQ29udGV4dComLCB1bnNpZ25lZCBzaG9ydCBy
ZXNvdXJjZU1vZGUsIGNvbnN0IFBhdGgqKTsKKyAgICB2aXJ0dWFsIHZvaWQgcG9zdEFwcGx5UmVz
b3VyY2UoUmVuZGVyU1ZHU2hhcGUqLCBHcmFwaGljc0NvbnRleHQqJiwgdW5zaWduZWQgc2hvcnQg
cmVzb3VyY2VNb2RlLCBjb25zdCBQYXRoKik7CiAgICAgdmlydHVhbCBGbG9hdFJlY3QgcmVzb3Vy
Y2VCb3VuZGluZ0JveChSZW5kZXJPYmplY3QqKSB7IHJldHVybiBGbG9hdFJlY3QoKTsgfQogCiBw
cm90ZWN0ZWQ6CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRl
clNWR1Jlc291cmNlUGF0dGVybi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1Jl
bmRlclNWR1Jlc291cmNlUGF0dGVybi5jcHAKaW5kZXggOTgzMzg1Ni4uNGZhNjdkOCAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJjZVBhdHRl
cm4uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVzb3Vy
Y2VQYXR0ZXJuLmNwcApAQCAtMTgxLDE2ICsxODEsMTYgQEAgYm9vbCBSZW5kZXJTVkdSZXNvdXJj
ZVBhdHRlcm46OmFwcGx5UmVzb3VyY2UoUmVuZGVyT2JqZWN0KiBvYmplY3QsIFJlbmRlclN0eWxl
KgogICAgIHJldHVybiB0cnVlOwogfQogCi12b2lkIFJlbmRlclNWR1Jlc291cmNlUGF0dGVybjo6
cG9zdEFwcGx5UmVzb3VyY2UoUmVuZGVyT2JqZWN0KiwgR3JhcGhpY3NDb250ZXh0KiYgY29udGV4
dCwgdW5zaWduZWQgc2hvcnQgcmVzb3VyY2VNb2RlLCBjb25zdCBQYXRoKiBwYXRoKQordm9pZCBS
ZW5kZXJTVkdSZXNvdXJjZVBhdHRlcm46OnBvc3RBcHBseVJlc291cmNlKFJlbmRlclNWR1NoYXBl
KiBzaGFwZSwgR3JhcGhpY3NDb250ZXh0KiYgY29udGV4dCwgdW5zaWduZWQgc2hvcnQgcmVzb3Vy
Y2VNb2RlLCBjb25zdCBQYXRoKiBwYXRoKQogewogICAgIEFTU0VSVChjb250ZXh0KTsKICAgICBB
U1NFUlQocmVzb3VyY2VNb2RlICE9IEFwcGx5VG9EZWZhdWx0TW9kZSk7CiAKLSAgICBpZiAocGF0
aCAmJiAhKHJlc291cmNlTW9kZSAmIEFwcGx5VG9UZXh0TW9kZSkpIHsKKyAgICBpZiAoLypwYXRo
ICYmICovIShyZXNvdXJjZU1vZGUgJiBBcHBseVRvVGV4dE1vZGUpKSB7CiAgICAgICAgIGlmIChy
ZXNvdXJjZU1vZGUgJiBBcHBseVRvRmlsbE1vZGUpCi0gICAgICAgICAgICBjb250ZXh0LT5maWxs
UGF0aCgqcGF0aCk7CisgICAgICAgICAgICAgcGF0aCA/IGNvbnRleHQtPmZpbGxQYXRoKCpwYXRo
KSA6IHNoYXBlLT5maWxsU2hhcGUoY29udGV4dCk7CiAgICAgICAgIGVsc2UgaWYgKHJlc291cmNl
TW9kZSAmIEFwcGx5VG9TdHJva2VNb2RlKQotICAgICAgICAgICAgY29udGV4dC0+c3Ryb2tlUGF0
aCgqcGF0aCk7CisgICAgICAgICAgICAgcGF0aCA/IGNvbnRleHQtPnN0cm9rZVBhdGgoKnBhdGgp
IDogc2hhcGUtPnN0cm9rZVNoYXBlKGNvbnRleHQpOwogICAgIH0KIAogICAgIGNvbnRleHQtPnJl
c3RvcmUoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVy
U1ZHUmVzb3VyY2VQYXR0ZXJuLmggYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRl
clNWR1Jlc291cmNlUGF0dGVybi5oCmluZGV4IGE2OTdjNzEuLmMyMjA3OTAgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VQYXR0ZXJuLmgK
KysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJjZVBhdHRl
cm4uaApAQCAtNTIsNyArNTIsNyBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCB2b2lkIHJlbW92ZUNs
aWVudEZyb21DYWNoZShSZW5kZXJPYmplY3QqLCBib29sIG1hcmtGb3JJbnZhbGlkYXRpb24gPSB0
cnVlKTsKIAogICAgIHZpcnR1YWwgYm9vbCBhcHBseVJlc291cmNlKFJlbmRlck9iamVjdCosIFJl
bmRlclN0eWxlKiwgR3JhcGhpY3NDb250ZXh0KiYsIHVuc2lnbmVkIHNob3J0IHJlc291cmNlTW9k
ZSk7Ci0gICAgdmlydHVhbCB2b2lkIHBvc3RBcHBseVJlc291cmNlKFJlbmRlck9iamVjdCosIEdy
YXBoaWNzQ29udGV4dComLCB1bnNpZ25lZCBzaG9ydCByZXNvdXJjZU1vZGUsIGNvbnN0IFBhdGgq
KTsKKyAgICB2aXJ0dWFsIHZvaWQgcG9zdEFwcGx5UmVzb3VyY2UoUmVuZGVyU1ZHU2hhcGUqLCBH
cmFwaGljc0NvbnRleHQqJiwgdW5zaWduZWQgc2hvcnQgcmVzb3VyY2VNb2RlLCBjb25zdCBQYXRo
Kik7CiAgICAgdmlydHVhbCBGbG9hdFJlY3QgcmVzb3VyY2VCb3VuZGluZ0JveChSZW5kZXJPYmpl
Y3QqKSB7IHJldHVybiBGbG9hdFJlY3QoKTsgfQogCiAgICAgdmlydHVhbCBSZW5kZXJTVkdSZXNv
dXJjZVR5cGUgcmVzb3VyY2VUeXBlKCkgY29uc3QgeyByZXR1cm4gc19yZXNvdXJjZVR5cGU7IH0K
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVzb3Vy
Y2VTb2xpZENvbG9yLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZH
UmVzb3VyY2VTb2xpZENvbG9yLmNwcAppbmRleCA1YmUyYWY2Li4yNDVkZDhjIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291cmNlU29saWRDb2xv
ci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJj
ZVNvbGlkQ29sb3IuY3BwCkBAIC0yMyw2ICsyMyw3IEBACiAjaW5jbHVkZSAiUmVuZGVyU1ZHUmVz
b3VyY2VTb2xpZENvbG9yLmgiCiAKICNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKKyNpbmNs
dWRlICJSZW5kZXJTVkdTaGFwZS5oIgogI2luY2x1ZGUgIlJlbmRlclN0eWxlLmgiCiAjaW5jbHVk
ZSAiU1ZHUmVuZGVyU3VwcG9ydC5oIgogCkBAIC03NCwxNiArNzUsMTYgQEAgYm9vbCBSZW5kZXJT
VkdSZXNvdXJjZVNvbGlkQ29sb3I6OmFwcGx5UmVzb3VyY2UoUmVuZGVyT2JqZWN0KiBvYmplY3Qs
IFJlbmRlclN0eWwKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotdm9pZCBSZW5kZXJTVkdSZXNvdXJj
ZVNvbGlkQ29sb3I6OnBvc3RBcHBseVJlc291cmNlKFJlbmRlck9iamVjdCosIEdyYXBoaWNzQ29u
dGV4dComIGNvbnRleHQsIHVuc2lnbmVkIHNob3J0IHJlc291cmNlTW9kZSwgY29uc3QgUGF0aCog
cGF0aCkKK3ZvaWQgUmVuZGVyU1ZHUmVzb3VyY2VTb2xpZENvbG9yOjpwb3N0QXBwbHlSZXNvdXJj
ZShSZW5kZXJTVkdTaGFwZSogc2hhcGUsIEdyYXBoaWNzQ29udGV4dComIGNvbnRleHQsIHVuc2ln
bmVkIHNob3J0IHJlc291cmNlTW9kZSwgY29uc3QgUGF0aCogcGF0aCkKIHsKICAgICBBU1NFUlQo
Y29udGV4dCk7CiAgICAgQVNTRVJUKHJlc291cmNlTW9kZSAhPSBBcHBseVRvRGVmYXVsdE1vZGUp
OwogCi0gICAgaWYgKHBhdGggJiYgIShyZXNvdXJjZU1vZGUgJiBBcHBseVRvVGV4dE1vZGUpKSB7
CisgICAgaWYgKCEocmVzb3VyY2VNb2RlICYgQXBwbHlUb1RleHRNb2RlKSkgewogICAgICAgICBp
ZiAocmVzb3VyY2VNb2RlICYgQXBwbHlUb0ZpbGxNb2RlKQotICAgICAgICAgICAgY29udGV4dC0+
ZmlsbFBhdGgoKnBhdGgpOworICAgICAgICAgICAgcGF0aCA/IGNvbnRleHQtPmZpbGxQYXRoKCpw
YXRoKSA6IHNoYXBlLT5maWxsU2hhcGUoY29udGV4dCk7CiAgICAgICAgIGVsc2UgaWYgKHJlc291
cmNlTW9kZSAmIEFwcGx5VG9TdHJva2VNb2RlKQotICAgICAgICAgICAgY29udGV4dC0+c3Ryb2tl
UGF0aCgqcGF0aCk7CisgICAgICAgICAgICBwYXRoID8gY29udGV4dC0+c3Ryb2tlUGF0aCgqcGF0
aCkgOiBzaGFwZS0+c3Ryb2tlU2hhcGUoY29udGV4dCk7CiAgICAgfQogfQogCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291cmNlU29saWRDb2xv
ci5oIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJjZVNvbGlk
Q29sb3IuaAppbmRleCAwMmNlYjMxLi41ZGFmNTc0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291cmNlU29saWRDb2xvci5oCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VTb2xpZENvbG9yLmgKQEAg
LTM2LDcgKzM2LDcgQEAgcHVibGljOgogICAgIHZpcnR1YWwgdm9pZCByZW1vdmVDbGllbnRGcm9t
Q2FjaGUoUmVuZGVyT2JqZWN0KiwgYm9vbCA9IHRydWUpIHsgfQogCiAgICAgdmlydHVhbCBib29s
IGFwcGx5UmVzb3VyY2UoUmVuZGVyT2JqZWN0KiwgUmVuZGVyU3R5bGUqLCBHcmFwaGljc0NvbnRl
eHQqJiwgdW5zaWduZWQgc2hvcnQgcmVzb3VyY2VNb2RlKTsKLSAgICB2aXJ0dWFsIHZvaWQgcG9z
dEFwcGx5UmVzb3VyY2UoUmVuZGVyT2JqZWN0KiwgR3JhcGhpY3NDb250ZXh0KiYsIHVuc2lnbmVk
IHNob3J0IHJlc291cmNlTW9kZSwgY29uc3QgUGF0aCopOworICAgIHZpcnR1YWwgdm9pZCBwb3N0
QXBwbHlSZXNvdXJjZShSZW5kZXJTVkdTaGFwZSosIEdyYXBoaWNzQ29udGV4dComLCB1bnNpZ25l
ZCBzaG9ydCByZXNvdXJjZU1vZGUsIGNvbnN0IFBhdGgqKTsKICAgICB2aXJ0dWFsIEZsb2F0UmVj
dCByZXNvdXJjZUJvdW5kaW5nQm94KFJlbmRlck9iamVjdCopIHsgcmV0dXJuIEZsb2F0UmVjdCgp
OyB9CiAKICAgICB2aXJ0dWFsIFJlbmRlclNWR1Jlc291cmNlVHlwZSByZXNvdXJjZVR5cGUoKSBj
b25zdCB7IHJldHVybiBzX3Jlc291cmNlVHlwZTsgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdTaGFwZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvc3ZnL1JlbmRlclNWR1NoYXBlLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwLi5lYzg3NjBiCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL3N2Zy9SZW5kZXJTVkdTaGFwZS5jcHAKQEAgLTAsMCArMSw0MzUgQEAKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMDQsIDIwMDUsIDIwMDcgTmlrb2xhcyBaaW1tZXJtYW5uIDx6aW1tZXJtYW5u
QGtkZS5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUsIDIwMDggUm9iIEJ1aXMgPGJ1
aXNAa2RlLm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAwNSwgMjAwNyBFcmljIFNlaWRlbCA8ZXJp
Y0B3ZWJraXQub3JnPgorICogQ29weXJpZ2h0IChDKSAyMDA5IEdvb2dsZSwgSW5jLgorICogQ29w
eXJpZ2h0IChDKSAyMDA5IERpcmsgU2NodWx6ZSA8a3JpdEB3ZWJraXQub3JnPgorICogQ29weXJp
Z2h0IChDKSBSZXNlYXJjaCBJbiBNb3Rpb24gTGltaXRlZCAyMDEwLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA5IEplZmYgU2NoaWxsZXIgPGNvZGVkcmVhZEBnbWFp
bC5jb20+CisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgUmVuYXRhIEhvZG92YW4gPHJlbmlAd2Via2l0
Lm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAxMSBVbml2ZXJzaXR5IG9mIFN6ZWdlZAorICoKKyAq
IFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBh
bmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdl
bmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2Fy
ZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0
IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMg
ZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBX
SVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9m
CisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0Uu
ICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3Jl
IGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUg
R05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxp
YnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRo
ZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlm
dGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaW5jbHVk
ZSAiY29uZmlnLmgiCisKKyNpZiBFTkFCTEUoU1ZHKQorI2luY2x1ZGUgIlJlbmRlclNWR1NoYXBl
LmgiCisKKyNpbmNsdWRlICJGbG9hdFBvaW50LmgiCisjaW5jbHVkZSAiRmxvYXRRdWFkLmgiCisj
aW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCisjaW5jbHVkZSAiSGl0VGVzdFJlcXVlc3QuaCIK
KyNpbmNsdWRlICJQb2ludGVyRXZlbnRzSGl0UnVsZXMuaCIKKyNpbmNsdWRlICJSZW5kZXJTVkdD
b250YWluZXIuaCIKKyNpbmNsdWRlICJSZW5kZXJTVkdSZXNvdXJjZU1hcmtlci5oIgorI2luY2x1
ZGUgIlJlbmRlclNWR1Jlc291cmNlU29saWRDb2xvci5oIgorI2luY2x1ZGUgIlNWR1BhdGhFbGVt
ZW50LmgiCisjaW5jbHVkZSAiU1ZHUmVuZGVyU3VwcG9ydC5oIgorI2luY2x1ZGUgIlNWR1Jlc291
cmNlcy5oIgorI2luY2x1ZGUgIlNWR1N0eWxlZFRyYW5zZm9ybWFibGVFbGVtZW50LmgiCisjaW5j
bHVkZSAiU1ZHVHJhbnNmb3JtTGlzdC5oIgorI2luY2x1ZGUgIlNWR1VSSVJlZmVyZW5jZS5oIgor
I2luY2x1ZGUgIlN0cm9rZVN0eWxlQXBwbGllci5oIgorI2luY2x1ZGUgPHd0Zi9NYXRoRXh0cmFz
Lmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworUmVuZGVyU1ZHU2hhcGU6OlJlbmRlclNWR1No
YXBlKFNWR1N0eWxlZFRyYW5zZm9ybWFibGVFbGVtZW50KiBub2RlKQorICAgIDogUmVuZGVyU1ZH
TW9kZWxPYmplY3Qobm9kZSkKKyAgICAsIG1fbmVlZHNCb3VuZGFyaWVzVXBkYXRlKGZhbHNlKSAv
LyBkZWZhdWx0IGlzIGZhbHNlLCB0aGUgY2FjaGVkIHJlY3RzIGFyZSBlbXB0eSBmcm9tIHRoZSBi
ZWdpbm5pbmcKKyAgICAsIG1fbmVlZHNTaGFwZVVwZGF0ZSh0cnVlKSAvLyBkZWZhdWx0IGlzIHRy
dWUsIHNvIHdlIGdyYWIgYSBQYXRoIG9iamVjdCBvbmNlIGZyb20gU1ZHU3R5bGVkVHJhbnNmb3Jt
YWJsZUVsZW1lbnQKKyAgICAsIG1fbmVlZHNUcmFuc2Zvcm1VcGRhdGUodHJ1ZSkgLy8gZGVmYXVs
dCBpcyB0cnVlLCBzbyB3ZSBncmFiIGEgQWZmaW5lVHJhbnNmb3JtIG9iamVjdCBvbmNlIGZyb20g
U1ZHU3R5bGVkVHJhbnNmb3JtYWJsZUVsZW1lbnQKKyAgICAsIG1faXNQYXRoKGZhbHNlKQorewor
fQorCitSZW5kZXJTVkdTaGFwZTo6flJlbmRlclNWR1NoYXBlKCkKK3sKK30KKwordm9pZCBSZW5k
ZXJTVkdTaGFwZTo6Y3JlYXRlU2hhcGUoKQoreworICAgIG1fcGF0aCA9IGFkb3B0UHRyKG5ldyBQ
YXRoKTsKKyAgICBBU1NFUlQoaXNFbXB0eSgpKTsKKworICAgIFNWR1BhdGhFbGVtZW50KiBlbGVt
ZW50ID0gc3RhdGljX2Nhc3Q8U1ZHUGF0aEVsZW1lbnQqPihub2RlKCkpOworICAgIGVsZW1lbnQt
PnRvUGF0aERhdGEocGF0aCgpKTsKKyAgICBzZXRJc1BhdGgoKTsKK30KKworYm9vbCBSZW5kZXJT
VkdTaGFwZTo6aXNFbXB0eSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fcGF0aC0+aXNFbXB0eSgp
OworfQorCit2b2lkIFJlbmRlclNWR1NoYXBlOjpmaWxsU2hhcGUoR3JhcGhpY3NDb250ZXh0KiBj
b250ZXh0KQoreworICAgIGNvbnRleHQtPmZpbGxQYXRoKHBhdGgoKSk7Cit9CisKK0Zsb2F0UmVj
dCBSZW5kZXJTVkdTaGFwZTo6b2JqZWN0Qm91bmRpbmdCb3goKSBjb25zdAoreworICAgIHJldHVy
biBtX3BhdGgtPmJvdW5kaW5nUmVjdCgpOworfQorCitGbG9hdFJlY3QgUmVuZGVyU1ZHU2hhcGU6
OnN0cm9rZUJvdW5kaW5nQm94KCkKK3sKKyAgICBCb3VuZGluZ1JlY3RTdHJva2VTdHlsZUFwcGxp
ZXIgc3Ryb2tlU3R5bGUodGhpcywgc3R5bGUoKSk7CisgICAgcmV0dXJuIG1fcGF0aC0+c3Ryb2tl
Qm91bmRpbmdSZWN0KCZzdHJva2VTdHlsZSk7Cit9CisKK3ZvaWQgUmVuZGVyU1ZHU2hhcGU6OnN0
cm9rZVNoYXBlKEdyYXBoaWNzQ29udGV4dCogY29udGV4dCkKK3sKKyAgICBjb250ZXh0LT5zdHJv
a2VQYXRoKHBhdGgoKSk7Cit9CisKK2Jvb2wgUmVuZGVyU1ZHU2hhcGU6OnN0cm9rZUNvbnRhaW5z
U2xvd0Nhc2UoY29uc3QgRmxvYXRQb2ludCYgcG9pbnQpCit7CisgICAgQm91bmRpbmdSZWN0U3Ry
b2tlU3R5bGVBcHBsaWVyIGFwcGxpZXIodGhpcywgc3R5bGUoKSk7CisgICAgcmV0dXJuIG1fcGF0
aC0+c3Ryb2tlQ29udGFpbnMoJmFwcGxpZXIsIHBvaW50KTsKK30KKworYm9vbCBSZW5kZXJTVkdT
aGFwZTo6ZmlsbENvbnRhaW5zU2xvd0Nhc2UoY29uc3QgRmxvYXRQb2ludCYgcG9pbnQsIGNvbnN0
IFdpbmRSdWxlJiBmaWxsUnVsZSkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9wYXRoLT5jb250YWlu
cyhwb2ludCwgZmlsbFJ1bGUpOworfQorCitib29sIFJlbmRlclNWR1NoYXBlOjpmaWxsQ29udGFp
bnMoY29uc3QgRmxvYXRQb2ludCYgcG9pbnQsIGJvb2wgcmVxdWlyZXNGaWxsLCBXaW5kUnVsZSBm
aWxsUnVsZSkKK3sKKyAgICBpZiAoIW1fZmlsbEJvdW5kaW5nQm94LmNvbnRhaW5zKHBvaW50KSkK
KyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgQ29sb3IgZmFsbGJhY2tDb2xvcjsKKyAgICBp
ZiAocmVxdWlyZXNGaWxsICYmICFSZW5kZXJTVkdSZXNvdXJjZTo6ZmlsbFBhaW50aW5nUmVzb3Vy
Y2UodGhpcywgc3R5bGUoKSwgZmFsbGJhY2tDb2xvcikpCisgICAgICAgIHJldHVybiBmYWxzZTsK
KworICAgIHJldHVybiBmaWxsQ29udGFpbnNTbG93Q2FzZShwb2ludCwgZmlsbFJ1bGUpOworfQor
Citib29sIFJlbmRlclNWR1NoYXBlOjpzdHJva2VDb250YWlucyhjb25zdCBGbG9hdFBvaW50JiBw
b2ludCwgYm9vbCByZXF1aXJlc1N0cm9rZSkKK3sKKyAgICBpZiAoIW1fc3Ryb2tlQW5kTWFya2Vy
Qm91bmRpbmdCb3guY29udGFpbnMocG9pbnQpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAg
ICBDb2xvciBmYWxsYmFja0NvbG9yOworICAgIGlmIChyZXF1aXJlc1N0cm9rZSAmJiAhUmVuZGVy
U1ZHUmVzb3VyY2U6OnN0cm9rZVBhaW50aW5nUmVzb3VyY2UodGhpcywgc3R5bGUoKSwgZmFsbGJh
Y2tDb2xvcikpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGlmIChzaG91bGRTdHJva2Va
ZXJvTGVuZ3RoU3VicGF0aCgpKQorICAgICAgICByZXR1cm4gemVyb0xlbmd0aFN1YnBhdGhSZWN0
KCkuY29udGFpbnMocG9pbnQpOworCisgICAgaWYgKGlzUGF0aCgpKQorICAgICAgICByZXR1cm4g
UmVuZGVyU1ZHU2hhcGU6OnN0cm9rZUNvbnRhaW5zU2xvd0Nhc2UocG9pbnQpOworICAgIHJldHVy
biBzdHJva2VDb250YWluc1Nsb3dDYXNlKHBvaW50KTsKK30KKwordm9pZCBSZW5kZXJTVkdTaGFw
ZTo6bGF5b3V0KCkKK3sKKyAgICBMYXlvdXRSZXBhaW50ZXIgcmVwYWludGVyKCp0aGlzLCBjaGVj
a0ZvclJlcGFpbnREdXJpbmdMYXlvdXQoKSAmJiBzZWxmTmVlZHNMYXlvdXQoKSk7CisgICAgU1ZH
U3R5bGVkVHJhbnNmb3JtYWJsZUVsZW1lbnQqIGVsZW1lbnQgPSBzdGF0aWNfY2FzdDxTVkdTdHls
ZWRUcmFuc2Zvcm1hYmxlRWxlbWVudCo+KG5vZGUoKSk7CisKKyAgICBib29sIHVwZGF0ZUNhY2hl
ZEJvdW5kYXJpZXNJblBhcmVudHMgPSBmYWxzZTsKKworICAgIGJvb2wgbmVlZHNTaGFwZVVwZGF0
ZSA9IG1fbmVlZHNTaGFwZVVwZGF0ZTsKKyAgICBpZiAobmVlZHNTaGFwZVVwZGF0ZSkgeworICAg
ICAgICBjcmVhdGVTaGFwZSgpOworICAgICAgICBjb25zdCBTVkdSZW5kZXJTdHlsZSogc3ZnU3R5
bGUgPSBzdHlsZSgpLT5zdmdTdHlsZSgpOworICAgICAgICBpZiAoIXN2Z1N0eWxlLT5zdHJva2VE
YXNoQXJyYXkoKS5pc0VtcHR5KCkgfHwgc3ZnU3R5bGUtPnN0cm9rZU1pdGVyTGltaXQoKSAhPSBz
dmdTdHlsZS0+aW5pdGlhbFN0cm9rZU1pdGVyTGltaXQoKSAKKyAgICAgICAgICAgIHx8IHN2Z1N0
eWxlLT5qb2luU3R5bGUoKSAhPSBzdmdTdHlsZS0+aW5pdGlhbEpvaW5TdHlsZSgpIHx8IHN2Z1N0
eWxlLT5jYXBTdHlsZSgpICE9IHN2Z1N0eWxlLT5pbml0aWFsQ2FwU3R5bGUoKSkgeworICAgICAg
ICAgICAgUmVuZGVyU1ZHU2hhcGU6OmNyZWF0ZVNoYXBlKCk7CisgICAgICAgIH0KKyAgICAgICAg
bV9uZWVkc1NoYXBlVXBkYXRlID0gZmFsc2U7CisgICAgICAgIHVwZGF0ZUNhY2hlZEJvdW5kYXJp
ZXNJblBhcmVudHMgPSB0cnVlOworICAgIH0KKworICAgIGlmIChtX25lZWRzVHJhbnNmb3JtVXBk
YXRlKSB7CisgICAgICAgIG1fbG9jYWxUcmFuc2Zvcm0gPSBlbGVtZW50LT5hbmltYXRlZExvY2Fs
VHJhbnNmb3JtKCk7CisgICAgICAgIG1fbmVlZHNUcmFuc2Zvcm1VcGRhdGUgPSBmYWxzZTsKKyAg
ICAgICAgdXBkYXRlQ2FjaGVkQm91bmRhcmllc0luUGFyZW50cyA9IHRydWU7CisgICAgfQorCisg
ICAgaWYgKG1fbmVlZHNCb3VuZGFyaWVzVXBkYXRlKQorICAgICAgICB1cGRhdGVDYWNoZWRCb3Vu
ZGFyaWVzSW5QYXJlbnRzID0gdHJ1ZTsKKworICAgIC8vIEludmFsaWRhdGUgYWxsIHJlc291cmNl
cyBvZiB0aGlzIGNsaWVudCBpZiBvdXIgbGF5b3V0IGNoYW5nZWQuCisgICAgaWYgKG1fZXZlckhh
ZExheW91dCAmJiBzZWxmTmVlZHNMYXlvdXQoKSkgeworICAgICAgICBTVkdSZXNvdXJjZXNDYWNo
ZTo6Y2xpZW50TGF5b3V0Q2hhbmdlZCh0aGlzKTsKKyAgICAgICAgbV9tYXJrZXJMYXlvdXRJbmZv
LmNsZWFyKCk7CisgICAgfQorCisgICAgLy8gQXQgdGhpcyBwb2ludCBMYXlvdXRSZXBhaW50ZXIg
YWxyZWFkeSBncmFiYmVkIHRoZSBvbGQgYm91bmRzLAorICAgIC8vIHJlY2FsY3VsYXRlIHRoZW0g
bm93IHNvIHJlcGFpbnRBZnRlckxheW91dCgpIHVzZXMgdGhlIG5ldyBib3VuZHMuCisgICAgaWYg
KG5lZWRzU2hhcGVVcGRhdGUgfHwgbV9uZWVkc0JvdW5kYXJpZXNVcGRhdGUpIHsKKyAgICAgICAg
dXBkYXRlQ2FjaGVkQm91bmRhcmllcygpOworICAgICAgICBtX25lZWRzQm91bmRhcmllc1VwZGF0
ZSA9IGZhbHNlOworICAgIH0KKworICAgIC8vIElmIG91ciBib3VuZHMgY2hhbmdlZCwgbm90aWZ5
IHRoZSBwYXJlbnRzLgorICAgIGlmICh1cGRhdGVDYWNoZWRCb3VuZGFyaWVzSW5QYXJlbnRzKQor
ICAgICAgICBSZW5kZXJTVkdNb2RlbE9iamVjdDo6c2V0TmVlZHNCb3VuZGFyaWVzVXBkYXRlKCk7
CisKKyAgICByZXBhaW50ZXIucmVwYWludEFmdGVyTGF5b3V0KCk7CisgICAgc2V0TmVlZHNMYXlv
dXQoZmFsc2UpOworfQorCitib29sIFJlbmRlclNWR1NoYXBlOjpzaG91bGRTdHJva2VaZXJvTGVu
Z3RoU3VicGF0aCgpIGNvbnN0Cit7CisgICAgLy8gU3BlYygxMS40KTogQW55IHplcm8gbGVuZ3Ro
IHN1YnBhdGggc2hhbGwgbm90IGJlIHN0cm9rZWQgaWYgdGhlIOKAmHN0cm9rZS1saW5lY2Fw4oCZ
IHByb3BlcnR5IGhhcyBhIHZhbHVlIG9mIGJ1dHQKKyAgICAvLyBidXQgc2hhbGwgYmUgc3Ryb2tl
ZCBpZiB0aGUg4oCYc3Ryb2tlLWxpbmVjYXDigJkgcHJvcGVydHkgaGFzIGEgdmFsdWUgb2Ygcm91
bmQgb3Igc3F1YXJlCisgICAgcmV0dXJuIHN0eWxlKCktPnN2Z1N0eWxlKCktPmhhc1N0cm9rZSgp
ICYmIHN0eWxlKCktPnN2Z1N0eWxlKCktPmNhcFN0eWxlKCkgIT0gQnV0dENhcCAmJiAhbV9maWxs
Qm91bmRpbmdCb3gud2lkdGgoKSAmJiAhbV9maWxsQm91bmRpbmdCb3guaGVpZ2h0KCk7Cit9CisK
K0Zsb2F0UmVjdCBSZW5kZXJTVkdTaGFwZTo6emVyb0xlbmd0aFN1YnBhdGhSZWN0KCkgY29uc3QK
K3sKKyAgICBmbG9hdCBzdHJva2VXaWR0aCA9IHRoaXMtPnN0cm9rZVdpZHRoKCk7CisgICAgcmV0
dXJuIEZsb2F0UmVjdChtX2ZpbGxCb3VuZGluZ0JveC54KCkgLSBzdHJva2VXaWR0aCAvIDIsIG1f
ZmlsbEJvdW5kaW5nQm94LnkoKSAtIHN0cm9rZVdpZHRoIC8gMiwgc3Ryb2tlV2lkdGgsIHN0cm9r
ZVdpZHRoKTsKK30KKwordm9pZCBSZW5kZXJTVkdTaGFwZTo6c2V0dXBTcXVhcmVDYXBQYXRoKFBh
dGgqJiB1c2VQYXRoLCBpbnQmIGFwcGx5TW9kZSkKK3sKKyAgICAvLyBTcGVjKDExLjQpOiBBbnkg
emVybyBsZW5ndGggc3VicGF0aCBzaGFsbCBub3QgYmUgc3Ryb2tlZCBpZiB0aGUg4oCYc3Ryb2tl
LWxpbmVjYXDigJkgcHJvcGVydHkgaGFzIGEgdmFsdWUgb2YgYnV0dAorICAgIC8vIGJ1dCBzaGFs
bCBiZSBzdHJva2VkIGlmIHRoZSDigJhzdHJva2UtbGluZWNhcOKAmSBwcm9wZXJ0eSBoYXMgYSB2
YWx1ZSBvZiByb3VuZCBvciBzcXVhcmUKKyAgICBERUZJTkVfU1RBVElDX0xPQ0FMKFBhdGgsIHRl
bXBQYXRoLCAoKSk7CisKKyAgICBhcHBseU1vZGUgPSBBcHBseVRvRmlsbE1vZGU7CisgICAgdXNl
UGF0aCA9ICZ0ZW1wUGF0aDsKKyAgICB1c2VQYXRoLT5jbGVhcigpOworICAgIGlmIChzdHlsZSgp
LT5zdmdTdHlsZSgpLT5jYXBTdHlsZSgpID09IFNxdWFyZUNhcCkKKyAgICAgICAgdXNlUGF0aC0+
YWRkUmVjdCh6ZXJvTGVuZ3RoU3VicGF0aFJlY3QoKSk7CisgICAgZWxzZQorICAgICAgICB1c2VQ
YXRoLT5hZGRFbGxpcHNlKHplcm9MZW5ndGhTdWJwYXRoUmVjdCgpKTsKK30KKworYm9vbCBSZW5k
ZXJTVkdTaGFwZTo6c2V0dXBOb25TY2FsaW5nU3Ryb2tlUGF0aChQYXRoKiYgdXNlUGF0aCwgR3Jh
cGhpY3NDb250ZXh0U3RhdGVTYXZlciYgc3RhdGVTYXZlcikKK3sKKyAgICBERUZJTkVfU1RBVElD
X0xPQ0FMKFBhdGgsIHRlbXBQYXRoLCAoKSk7CisKKyAgICBTVkdTdHlsZWRUcmFuc2Zvcm1hYmxl
RWxlbWVudCogZWxlbWVudCA9IHN0YXRpY19jYXN0PFNWR1N0eWxlZFRyYW5zZm9ybWFibGVFbGVt
ZW50Kj4obm9kZSgpKTsKKyAgICBBZmZpbmVUcmFuc2Zvcm0gbm9uU2NhbGluZ1N0cm9rZVRyYW5z
Zm9ybSA9IGVsZW1lbnQtPmdldFNjcmVlbkNUTShTVkdMb2NhdGFibGU6OkRpc2FsbG93U3R5bGVV
cGRhdGUpOworICAgIGlmICghbm9uU2NhbGluZ1N0cm9rZVRyYW5zZm9ybS5pc0ludmVydGlibGUo
KSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgdGVtcFBhdGggPSAqbV9wYXRoOworICAg
IHVzZVBhdGggPSAmdGVtcFBhdGg7CisgICAgdGVtcFBhdGgudHJhbnNmb3JtKG5vblNjYWxpbmdT
dHJva2VUcmFuc2Zvcm0pOworCisgICAgc3RhdGVTYXZlci5zYXZlKCk7CisgICAgc3RhdGVTYXZl
ci5jb250ZXh0KCktPmNvbmNhdENUTShub25TY2FsaW5nU3Ryb2tlVHJhbnNmb3JtLmludmVyc2Uo
KSk7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK3ZvaWQgUmVuZGVyU1ZHU2hhcGU6OmZpbGxBbmRT
dHJva2VQYXRoKEdyYXBoaWNzQ29udGV4dCogY29udGV4dCkKK3sKKyAgICBSZW5kZXJTdHlsZSog
c3R5bGUgPSB0aGlzLT5zdHlsZSgpOworCisgICAgQ29sb3IgZmFsbGJhY2tDb2xvcjsKKyAgICBp
ZiAoUmVuZGVyU1ZHUmVzb3VyY2UqIGZpbGxQYWludGluZ1Jlc291cmNlID0gUmVuZGVyU1ZHUmVz
b3VyY2U6OmZpbGxQYWludGluZ1Jlc291cmNlKHRoaXMsIHN0eWxlLCBmYWxsYmFja0NvbG9yKSkg
eworICAgICAgICBpZiAoZmlsbFBhaW50aW5nUmVzb3VyY2UtPmFwcGx5UmVzb3VyY2UodGhpcywg
c3R5bGUsIGNvbnRleHQsIEFwcGx5VG9GaWxsTW9kZSkpCisgICAgICAgICAgICBmaWxsUGFpbnRp
bmdSZXNvdXJjZS0+cG9zdEFwcGx5UmVzb3VyY2UodGhpcywgY29udGV4dCwgQXBwbHlUb0ZpbGxN
b2RlLCBtX3BhdGguZ2V0KCkpOworICAgICAgICBlbHNlIGlmIChmYWxsYmFja0NvbG9yLmlzVmFs
aWQoKSkgeworICAgICAgICAgICAgUmVuZGVyU1ZHUmVzb3VyY2VTb2xpZENvbG9yKiBmYWxsYmFj
a1Jlc291cmNlID0gUmVuZGVyU1ZHUmVzb3VyY2U6OnNoYXJlZFNvbGlkUGFpbnRpbmdSZXNvdXJj
ZSgpOworICAgICAgICAgICAgZmFsbGJhY2tSZXNvdXJjZS0+c2V0Q29sb3IoZmFsbGJhY2tDb2xv
cik7CisgICAgICAgICAgICBpZiAoZmFsbGJhY2tSZXNvdXJjZS0+YXBwbHlSZXNvdXJjZSh0aGlz
LCBzdHlsZSwgY29udGV4dCwgQXBwbHlUb0ZpbGxNb2RlKSkKKyAgICAgICAgICAgICAgICBmYWxs
YmFja1Jlc291cmNlLT5wb3N0QXBwbHlSZXNvdXJjZSh0aGlzLCBjb250ZXh0LCBBcHBseVRvRmls
bE1vZGUsIG1fcGF0aC5nZXQoKSk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBmYWxsYmFja0Nv
bG9yID0gQ29sb3IoKTsKKyAgICBSZW5kZXJTVkdSZXNvdXJjZSogc3Ryb2tlUGFpbnRpbmdSZXNv
dXJjZSA9IFJlbmRlclNWR1Jlc291cmNlOjpzdHJva2VQYWludGluZ1Jlc291cmNlKHRoaXMsIHN0
eWxlLCBmYWxsYmFja0NvbG9yKTsKKyAgICBpZiAoIXN0cm9rZVBhaW50aW5nUmVzb3VyY2UpCisg
ICAgICAgIHJldHVybjsKKworICAgIFBhdGgqIHVzZVBhdGggPSBtX3BhdGguZ2V0KCk7CisgICAg
aW50IGFwcGx5TW9kZSA9IEFwcGx5VG9TdHJva2VNb2RlOworCisgICAgYm9vbCBub25TY2FsaW5n
U3Ryb2tlID0gc3R5bGUtPnN2Z1N0eWxlKCktPnZlY3RvckVmZmVjdCgpID09IFZFX05PTl9TQ0FM
SU5HX1NUUk9LRTsKKworICAgIEdyYXBoaWNzQ29udGV4dFN0YXRlU2F2ZXIgc3RhdGVTYXZlcigq
Y29udGV4dCwgZmFsc2UpOworCisgICAgLy8gU3BlYygxMS40KTogQW55IHplcm8gbGVuZ3RoIHN1
YnBhdGggc2hhbGwgbm90IGJlIHN0cm9rZWQgaWYgdGhlIOKAmHN0cm9rZS1saW5lY2Fw4oCZIHBy
b3BlcnR5IGhhcyBhIHZhbHVlIG9mIGJ1dHQKKyAgICAvLyBidXQgc2hhbGwgYmUgc3Ryb2tlZCBp
ZiB0aGUg4oCYc3Ryb2tlLWxpbmVjYXDigJkgcHJvcGVydHkgaGFzIGEgdmFsdWUgb2Ygcm91bmQg
b3Igc3F1YXJlCisgICAgLy8gRklYTUU6IHRoaXMgZG9lcyBub3Qgd29yayBmb3IgemVyby1sZW5n
dGggc3VicGF0aHMsIG9ubHkgd2hlbiB0b3RhbCBwYXRoIGlzIHplcm8tbGVuZ3RoCisgICAgaWYg
KHNob3VsZFN0cm9rZVplcm9MZW5ndGhTdWJwYXRoKCkpIHsKKyAgICAgICAgUmVuZGVyU1ZHU2hh
cGU6OmNyZWF0ZVNoYXBlKCk7CisgICAgICAgIHVzZVBhdGggPSBtX3BhdGguZ2V0KCk7CisgICAg
ICAgIHNldHVwU3F1YXJlQ2FwUGF0aCh1c2VQYXRoLCBhcHBseU1vZGUpOworICAgIH0gZWxzZSBp
ZiAobm9uU2NhbGluZ1N0cm9rZSkgeworICAgICAgICBSZW5kZXJTVkdTaGFwZTo6Y3JlYXRlU2hh
cGUoKTsKKyAgICAgICAgdXNlUGF0aCA9IG1fcGF0aC5nZXQoKTsKKyAgICAgICAgaWYgKCFzZXR1
cE5vblNjYWxpbmdTdHJva2VQYXRoKHVzZVBhdGgsIHN0YXRlU2F2ZXIpKQorICAgICAgICAgICAg
cmV0dXJuOworICAgIH0KKyAgICBpZiAoc3Ryb2tlUGFpbnRpbmdSZXNvdXJjZS0+YXBwbHlSZXNv
dXJjZSh0aGlzLCBzdHlsZSwgY29udGV4dCwgYXBwbHlNb2RlKSkgeworICAgICAgICBzdHJva2VQ
YWludGluZ1Jlc291cmNlLT5wb3N0QXBwbHlSZXNvdXJjZSh0aGlzLCBjb250ZXh0LCBhcHBseU1v
ZGUsIHVzZVBhdGgpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIGlmICghZmFsbGJhY2tD
b2xvci5pc1ZhbGlkKCkpCisgICAgICAgIHJldHVybjsKKyAgICBSZW5kZXJTVkdSZXNvdXJjZVNv
bGlkQ29sb3IqIGZhbGxiYWNrUmVzb3VyY2UgPSBSZW5kZXJTVkdSZXNvdXJjZTo6c2hhcmVkU29s
aWRQYWludGluZ1Jlc291cmNlKCk7CisgICAgZmFsbGJhY2tSZXNvdXJjZS0+c2V0Q29sb3IoZmFs
bGJhY2tDb2xvcik7CisgICAgaWYgKGZhbGxiYWNrUmVzb3VyY2UtPmFwcGx5UmVzb3VyY2UodGhp
cywgc3R5bGUsIGNvbnRleHQsIGFwcGx5TW9kZSkpCisgICAgICAgIGZhbGxiYWNrUmVzb3VyY2Ut
PnBvc3RBcHBseVJlc291cmNlKHRoaXMsIGNvbnRleHQsIGFwcGx5TW9kZSwgdXNlUGF0aCk7Cit9
CisKK3ZvaWQgUmVuZGVyU1ZHU2hhcGU6OnBhaW50KFBhaW50SW5mbyYgcGFpbnRJbmZvLCBjb25z
dCBJbnRQb2ludCYpCit7CisgICAgaWYgKHBhaW50SW5mby5jb250ZXh0LT5wYWludGluZ0Rpc2Fi
bGVkKCkgfHwgc3R5bGUoKS0+dmlzaWJpbGl0eSgpID09IEhJRERFTiB8fCBpc0VtcHR5KCkpCisg
ICAgICAgIHJldHVybjsKKyAgICBGbG9hdFJlY3QgYm91bmRpbmdCb3ggPSByZXBhaW50UmVjdElu
TG9jYWxDb29yZGluYXRlcygpOworICAgIGlmICghU1ZHUmVuZGVyU3VwcG9ydDo6cGFpbnRJbmZv
SW50ZXJzZWN0c1JlcGFpbnRSZWN0KGJvdW5kaW5nQm94LCBtX2xvY2FsVHJhbnNmb3JtLCBwYWlu
dEluZm8pKQorICAgICAgICByZXR1cm47CisgICAgUGFpbnRJbmZvIGNoaWxkUGFpbnRJbmZvKHBh
aW50SW5mbyk7CisgICAgYm9vbCBkcmF3c091dGxpbmUgPSBzdHlsZSgpLT5vdXRsaW5lV2lkdGgo
KSAmJiAoY2hpbGRQYWludEluZm8ucGhhc2UgPT0gUGFpbnRQaGFzZU91dGxpbmUgfHwgY2hpbGRQ
YWludEluZm8ucGhhc2UgPT0gUGFpbnRQaGFzZVNlbGZPdXRsaW5lKTsKKyAgICBpZiAoZHJhd3NP
dXRsaW5lIHx8IGNoaWxkUGFpbnRJbmZvLnBoYXNlID09IFBhaW50UGhhc2VGb3JlZ3JvdW5kKSB7
CisgICAgICAgIEdyYXBoaWNzQ29udGV4dFN0YXRlU2F2ZXIgc3RhdGVTYXZlcigqY2hpbGRQYWlu
dEluZm8uY29udGV4dCk7CisgICAgICAgIGNoaWxkUGFpbnRJbmZvLmFwcGx5VHJhbnNmb3JtKG1f
bG9jYWxUcmFuc2Zvcm0pOworCisgICAgICAgIGlmIChjaGlsZFBhaW50SW5mby5waGFzZSA9PSBQ
YWludFBoYXNlRm9yZWdyb3VuZCkgeworICAgICAgICAgICAgUGFpbnRJbmZvIHNhdmVkSW5mbyhj
aGlsZFBhaW50SW5mbyk7CisKKyAgICAgICAgICAgIGlmIChTVkdSZW5kZXJTdXBwb3J0OjpwcmVw
YXJlVG9SZW5kZXJTVkdDb250ZW50KHRoaXMsIGNoaWxkUGFpbnRJbmZvKSkgeworICAgICAgICAg
ICAgICAgIGNvbnN0IFNWR1JlbmRlclN0eWxlKiBzdmdTdHlsZSA9IHN0eWxlKCktPnN2Z1N0eWxl
KCk7CisgICAgICAgICAgICAgICAgaWYgKHN2Z1N0eWxlLT5zaGFwZVJlbmRlcmluZygpID09IFNS
X0NSSVNQRURHRVMpCisgICAgICAgICAgICAgICAgICAgIGNoaWxkUGFpbnRJbmZvLmNvbnRleHQt
PnNldFNob3VsZEFudGlhbGlhcyhmYWxzZSk7CisKKyAgICAgICAgICAgICAgICBmaWxsQW5kU3Ry
b2tlUGF0aChjaGlsZFBhaW50SW5mby5jb250ZXh0KTsKKworICAgICAgICAgICAgICAgIGlmIChz
dmdTdHlsZS0+aGFzTWFya2VycygpKQorICAgICAgICAgICAgICAgICAgICBtX21hcmtlckxheW91
dEluZm8uZHJhd01hcmtlcnMoY2hpbGRQYWludEluZm8pOworICAgICAgICAgICAgfQorCisgICAg
ICAgICAgICBTVkdSZW5kZXJTdXBwb3J0OjpmaW5pc2hSZW5kZXJTVkdDb250ZW50KHRoaXMsIGNo
aWxkUGFpbnRJbmZvLCBzYXZlZEluZm8uY29udGV4dCk7CisgICAgICAgIH0KKworICAgICAgICBp
ZiAoZHJhd3NPdXRsaW5lKQorICAgICAgICAgICAgcGFpbnRPdXRsaW5lKGNoaWxkUGFpbnRJbmZv
LmNvbnRleHQsIEludFJlY3QoYm91bmRpbmdCb3gpKTsKKyAgICB9Cit9CisKKy8vIFRoaXMgbWV0
aG9kIGlzIGNhbGxlZCBmcm9tIGluc2lkZSBwYWludE91dGxpbmUoKSBzaW5jZSB3ZSBjYWxsIHBh
aW50T3V0bGluZSgpCisvLyB3aGlsZSB0cmFuc2Zvcm1lZCB0byBvdXIgY29vcmQgc3lzdGVtLCBy
ZXR1cm4gbG9jYWwgY29vcmRzCit2b2lkIFJlbmRlclNWR1NoYXBlOjphZGRGb2N1c1JpbmdSZWN0
cyhWZWN0b3I8TGF5b3V0UmVjdD4mIHJlY3RzLCBjb25zdCBMYXlvdXRQb2ludCYpCit7CisgICAg
TGF5b3V0UmVjdCByZWN0ID0gZW5jbG9zaW5nTGF5b3V0UmVjdChyZXBhaW50UmVjdEluTG9jYWxD
b29yZGluYXRlcygpKTsKKyAgICBpZiAoIXJlY3QuaXNFbXB0eSgpKQorICAgICAgICByZWN0cy5h
cHBlbmQocmVjdCk7Cit9CisKK2Jvb2wgUmVuZGVyU1ZHU2hhcGU6Om5vZGVBdEZsb2F0UG9pbnQo
Y29uc3QgSGl0VGVzdFJlcXVlc3QmIHJlcXVlc3QsIEhpdFRlc3RSZXN1bHQmIHJlc3VsdCwgY29u
c3QgRmxvYXRQb2ludCYgcG9pbnRJblBhcmVudCwgSGl0VGVzdEFjdGlvbiBoaXRUZXN0QWN0aW9u
KQoreworICAgIC8vIFdlIG9ubHkgZHJhdyBpbiB0aGUgZm9yZ3JvdW5kIHBoYXNlLCBzbyB3ZSBv
bmx5IGhpdC10ZXN0IHRoZW4uCisgICAgaWYgKGhpdFRlc3RBY3Rpb24gIT0gSGl0VGVzdEZvcmVn
cm91bmQpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIEZsb2F0UG9pbnQgbG9jYWxQb2lu
dCA9IG1fbG9jYWxUcmFuc2Zvcm0uaW52ZXJzZSgpLm1hcFBvaW50KHBvaW50SW5QYXJlbnQpOwor
CisgICAgaWYgKCFTVkdSZW5kZXJTdXBwb3J0Ojpwb2ludEluQ2xpcHBpbmdBcmVhKHRoaXMsIGxv
Y2FsUG9pbnQpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBQb2ludGVyRXZlbnRzSGl0
UnVsZXMgaGl0UnVsZXMoUG9pbnRlckV2ZW50c0hpdFJ1bGVzOjpTVkdfUEFUSF9ISVRURVNUSU5H
LCByZXF1ZXN0LCBzdHlsZSgpLT5wb2ludGVyRXZlbnRzKCkpOworICAgIGJvb2wgaXNWaXNpYmxl
ID0gKHN0eWxlKCktPnZpc2liaWxpdHkoKSA9PSBWSVNJQkxFKTsKKyAgICBpZiAoaXNWaXNpYmxl
IHx8ICFoaXRSdWxlcy5yZXF1aXJlVmlzaWJsZSkgeworICAgICAgICBjb25zdCBTVkdSZW5kZXJT
dHlsZSogc3ZnU3R5bGUgPSBzdHlsZSgpLT5zdmdTdHlsZSgpOworICAgICAgICBXaW5kUnVsZSBm
aWxsUnVsZSA9IHN2Z1N0eWxlLT5maWxsUnVsZSgpOworICAgICAgICBpZiAocmVxdWVzdC5zdmdD
bGlwQ29udGVudCgpKQorICAgICAgICAgICAgZmlsbFJ1bGUgPSBzdmdTdHlsZS0+Y2xpcFJ1bGUo
KTsKKyAgICAgICAgaWYgKChoaXRSdWxlcy5jYW5IaXRTdHJva2UgJiYgKHN2Z1N0eWxlLT5oYXNT
dHJva2UoKSB8fCAhaGl0UnVsZXMucmVxdWlyZVN0cm9rZSkgJiYgc3Ryb2tlQ29udGFpbnMobG9j
YWxQb2ludCwgaGl0UnVsZXMucmVxdWlyZVN0cm9rZSkpCisgICAgICAgICAgICB8fCAoaGl0UnVs
ZXMuY2FuSGl0RmlsbCAmJiAoc3ZnU3R5bGUtPmhhc0ZpbGwoKSB8fCAhaGl0UnVsZXMucmVxdWly
ZUZpbGwpICYmIGZpbGxDb250YWlucyhsb2NhbFBvaW50LCBoaXRSdWxlcy5yZXF1aXJlRmlsbCwg
ZmlsbFJ1bGUpKSkgeworICAgICAgICAgICAgdXBkYXRlSGl0VGVzdFJlc3VsdChyZXN1bHQsIHJv
dW5kZWRMYXlvdXRQb2ludChsb2NhbFBvaW50KSk7CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsK
KyAgICAgICAgfQorICAgIH0KKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK0Zsb2F0UmVjdCBSZW5k
ZXJTVkdTaGFwZTo6Y2FsY3VsYXRlTWFya2VyQm91bmRzSWZOZWVkZWQoKQoreworICAgIFNWR0Vs
ZW1lbnQqIHN2Z0VsZW1lbnQgPSBzdGF0aWNfY2FzdDxTVkdFbGVtZW50Kj4obm9kZSgpKTsKKyAg
ICBBU1NFUlQoc3ZnRWxlbWVudCAmJiBzdmdFbGVtZW50LT5kb2N1bWVudCgpKTsKKyAgICBpZiAo
IXN2Z0VsZW1lbnQtPmlzU3R5bGVkKCkpCisgICAgICAgIHJldHVybiBGbG9hdFJlY3QoKTsKKwor
ICAgIFNWR1N0eWxlZEVsZW1lbnQqIHN0eWxlZEVsZW1lbnQgPSBzdGF0aWNfY2FzdDxTVkdTdHls
ZWRFbGVtZW50Kj4oc3ZnRWxlbWVudCk7CisgICAgaWYgKCFzdHlsZWRFbGVtZW50LT5zdXBwb3J0
c01hcmtlcnMoKSkKKyAgICAgICAgcmV0dXJuIEZsb2F0UmVjdCgpOworCisgICAgQVNTRVJUKHN0
eWxlKCktPnN2Z1N0eWxlKCktPmhhc01hcmtlcnMoKSk7CisKKyAgICBTVkdSZXNvdXJjZXMqIHJl
c291cmNlcyA9IFNWR1Jlc291cmNlc0NhY2hlOjpjYWNoZWRSZXNvdXJjZXNGb3JSZW5kZXJPYmpl
Y3QodGhpcyk7CisgICAgaWYgKCFyZXNvdXJjZXMpCisgICAgICAgIHJldHVybiBGbG9hdFJlY3Qo
KTsKKworICAgIFJlbmRlclNWR1Jlc291cmNlTWFya2VyKiBtYXJrZXJTdGFydCA9IHJlc291cmNl
cy0+bWFya2VyU3RhcnQoKTsKKyAgICBSZW5kZXJTVkdSZXNvdXJjZU1hcmtlciogbWFya2VyTWlk
ID0gcmVzb3VyY2VzLT5tYXJrZXJNaWQoKTsKKyAgICBSZW5kZXJTVkdSZXNvdXJjZU1hcmtlciog
bWFya2VyRW5kID0gcmVzb3VyY2VzLT5tYXJrZXJFbmQoKTsKKyAgICBpZiAoIW1hcmtlclN0YXJ0
ICYmICFtYXJrZXJNaWQgJiYgIW1hcmtlckVuZCkKKyAgICAgICAgcmV0dXJuIEZsb2F0UmVjdCgp
OworCisgICAgcmV0dXJuIG1fbWFya2VyTGF5b3V0SW5mby5jYWxjdWxhdGVCb3VuZGFyaWVzKG1h
cmtlclN0YXJ0LCBtYXJrZXJNaWQsIG1hcmtlckVuZCwgc3Ryb2tlV2lkdGgoKSwgcGF0aCgpKTsK
K30KKwordm9pZCBSZW5kZXJTVkdTaGFwZTo6dXBkYXRlQ2FjaGVkQm91bmRhcmllcygpCit7Cisg
ICAgaWYgKGlzRW1wdHkoKSkgeworICAgICAgICBtX2ZpbGxCb3VuZGluZ0JveCA9IEZsb2F0UmVj
dCgpOworICAgICAgICBtX3N0cm9rZUFuZE1hcmtlckJvdW5kaW5nQm94ID0gRmxvYXRSZWN0KCk7
CisgICAgICAgIG1fcmVwYWludEJvdW5kaW5nQm94ID0gRmxvYXRSZWN0KCk7CisgICAgICAgIHJl
dHVybjsKKyAgICB9CisKKyAgICAvLyBDYWNoZSBfdW5jbGlwcGVkXyBmaWxsIGJvdW5kaW5nIGJv
eCwgdXNlZCBmb3IgY2FsY3VsYXRpb25zIGluIHJlc291cmNlcworICAgIG1fZmlsbEJvdW5kaW5n
Qm94ID0gb2JqZWN0Qm91bmRpbmdCb3goKTsKKworICAgIC8vIFNwZWMoMTEuNCk6IEFueSB6ZXJv
IGxlbmd0aCBzdWJwYXRoIHNoYWxsIG5vdCBiZSBzdHJva2VkIGlmIHRoZSDigJhzdHJva2UtbGlu
ZWNhcOKAmSBwcm9wZXJ0eSBoYXMgYSB2YWx1ZSBvZiBidXR0CisgICAgLy8gYnV0IHNoYWxsIGJl
IHN0cm9rZWQgaWYgdGhlIOKAmHN0cm9rZS1saW5lY2Fw4oCZIHByb3BlcnR5IGhhcyBhIHZhbHVl
IG9mIHJvdW5kIG9yIHNxdWFyZQorICAgIGlmIChzaG91bGRTdHJva2VaZXJvTGVuZ3RoU3VicGF0
aCgpKSB7CisgICAgICAgIG1fc3Ryb2tlQW5kTWFya2VyQm91bmRpbmdCb3ggPSB6ZXJvTGVuZ3Ro
U3VicGF0aFJlY3QoKTsKKyAgICAgICAgLy8gQ2FjaGUgc21hbGxlc3QgcG9zc2libGUgcmVwYWlu
dCByZWN0YW5nbGUKKyAgICAgICAgbV9yZXBhaW50Qm91bmRpbmdCb3ggPSBtX3N0cm9rZUFuZE1h
cmtlckJvdW5kaW5nQm94OworICAgICAgICBTVkdSZW5kZXJTdXBwb3J0OjppbnRlcnNlY3RSZXBh
aW50UmVjdFdpdGhSZXNvdXJjZXModGhpcywgbV9yZXBhaW50Qm91bmRpbmdCb3gpOworICAgICAg
ICByZXR1cm47CisgICAgfQorCisgICAgLy8gQ2FjaGUgX3VuY2xpcHBlZF8gc3Ryb2tlIGJvdW5k
aW5nIGJveCwgdXNlZCBmb3IgY2FsY3VsYXRpb25zIGluIHJlc291cmNlcyAoaW5jbHVkZXMgbWFy
a2VyIGJvdW5kYXJpZXMpCisgICAgbV9zdHJva2VBbmRNYXJrZXJCb3VuZGluZ0JveCA9IG1fZmls
bEJvdW5kaW5nQm94OworCisgICAgY29uc3QgU1ZHUmVuZGVyU3R5bGUqIHN2Z1N0eWxlID0gc3R5
bGUoKS0+c3ZnU3R5bGUoKTsKKyAgICBpZiAoc3ZnU3R5bGUtPmhhc1N0cm9rZSgpKQorICAgICAg
ICBtX3N0cm9rZUFuZE1hcmtlckJvdW5kaW5nQm94LnVuaXRlKHN0cm9rZUJvdW5kaW5nQm94KCkp
OworCisgICAgaWYgKGlzU1ZHUGF0aCgpKSB7CisgICAgICAgIGlmIChzdmdTdHlsZS0+aGFzTWFy
a2VycygpKSB7CisgICAgICAgICAgICBGbG9hdFJlY3QgbWFya2VyQm91bmRzID0gY2FsY3VsYXRl
TWFya2VyQm91bmRzSWZOZWVkZWQoKTsKKyAgICAgICAgICAgIGlmICghbWFya2VyQm91bmRzLmlz
RW1wdHkoKSkKKyAgICAgICAgICAgICAgICBtX3N0cm9rZUFuZE1hcmtlckJvdW5kaW5nQm94LnVu
aXRlKG1hcmtlckJvdW5kcyk7CisgICAgICAgIH0KKyAgICB9CisgICAgLy8gQ2FjaGUgc21hbGxl
c3QgcG9zc2libGUgcmVwYWludCByZWN0YW5nbGUKKyAgICBtX3JlcGFpbnRCb3VuZGluZ0JveCA9
IG1fc3Ryb2tlQW5kTWFya2VyQm91bmRpbmdCb3g7CisgICAgU1ZHUmVuZGVyU3VwcG9ydDo6aW50
ZXJzZWN0UmVwYWludFJlY3RXaXRoUmVzb3VyY2VzKHRoaXMsIG1fcmVwYWludEJvdW5kaW5nQm94
KTsKK30KKworZmxvYXQgUmVuZGVyU1ZHU2hhcGU6OnN0cm9rZVdpZHRoKCkgY29uc3QKK3sKKyAg
ICBTVkdFbGVtZW50KiBzdmdFbGVtZW50ID0gc3RhdGljX2Nhc3Q8U1ZHRWxlbWVudCo+KG5vZGUo
KSk7CisgICAgcmV0dXJuIHN0eWxlKCktPnN2Z1N0eWxlKCktPnN0cm9rZVdpZHRoKCkudmFsdWUo
c3ZnRWxlbWVudCk7Cit9CisKK30KKworI2VuZGlmIC8vIEVOQUJMRShTVkcpCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1NoYXBlLmggYi9Tb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1NoYXBlLmgKbmV3IGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDAwMDAwMC4uMzVlNjE2NAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHU2hhcGUuaApAQCAtMCwwICsxLDE1NSBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSwgMjAwNyBOaWtvbGFzIFppbW1lcm1hbm4gPHpp
bW1lcm1hbm5Aa2RlLm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSBSb2IgQnVpcyA8
YnVpc0BrZGUub3JnPgorICogQ29weXJpZ2h0IChDKSAyMDA1IEVyaWMgU2VpZGVsIDxlcmljQHdl
YmtpdC5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDYgQXBwbGUgQ29tcHV0ZXIsIEluYworICog
Q29weXJpZ2h0IChDKSAyMDA5IEdvb2dsZSwgSW5jLgorICogQ29weXJpZ2h0IChDKSAyMDExIFJl
bmF0YSBIb2RvdmFuIDxyZW5pQHdlYmtpdC5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgVW5p
dmVyc2l0eSBvZiBTemVnZWQKKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsg
eW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRl
cm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJs
aXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9u
IDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24u
CisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQg
d2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZl
biB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJh
bCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2
ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vu
c2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIu
ICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMu
LCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0x
MzAxLCBVU0EuCisgKi8KKworI2lmbmRlZiBSZW5kZXJTVkdTaGFwZV9oCisjZGVmaW5lIFJlbmRl
clNWR1NoYXBlX2gKKworI2lmIEVOQUJMRShTVkcpCisjaW5jbHVkZSAiQWZmaW5lVHJhbnNmb3Jt
LmgiCisjaW5jbHVkZSAiRmxvYXRSZWN0LmgiCisjaW5jbHVkZSAiUmVuZGVyU1ZHTW9kZWxPYmpl
Y3QuaCIKKyNpbmNsdWRlICJTVkdNYXJrZXJMYXlvdXRJbmZvLmgiCisjaW5jbHVkZSAiU3Ryb2tl
U3R5bGVBcHBsaWVyLmgiCisjaW5jbHVkZSA8d3RmL093blB0ci5oPgorCituYW1lc3BhY2UgV2Vi
Q29yZSB7CisKK2NsYXNzIEZsb2F0UG9pbnQ7CitjbGFzcyBHcmFwaGljc0NvbnRleHRTdGF0ZVNh
dmVyOworY2xhc3MgUmVuZGVyU1ZHQ29udGFpbmVyOworY2xhc3MgUmVuZGVyU1ZHUGF0aDsKK2Ns
YXNzIFNWR1N0eWxlZFRyYW5zZm9ybWFibGVFbGVtZW50OworCitjbGFzcyBCb3VuZGluZ1JlY3RT
dHJva2VTdHlsZUFwcGxpZXIgOiBwdWJsaWMgU3Ryb2tlU3R5bGVBcHBsaWVyIHsKK3B1YmxpYzoK
KyAgICBCb3VuZGluZ1JlY3RTdHJva2VTdHlsZUFwcGxpZXIoY29uc3QgUmVuZGVyT2JqZWN0KiBv
YmplY3QsIFJlbmRlclN0eWxlKiBzdHlsZSkKKyAgICAgICAgOiBtX29iamVjdChvYmplY3QpCisg
ICAgICAgICwgbV9zdHlsZShzdHlsZSkKKyAgICB7CisgICAgICAgIEFTU0VSVChzdHlsZSk7Cisg
ICAgICAgIEFTU0VSVChvYmplY3QpOworICAgIH0KKworICAgIHZvaWQgc3Ryb2tlU3R5bGUoR3Jh
cGhpY3NDb250ZXh0KiBnYykKKyAgICB7CisgICAgICAgIFNWR1JlbmRlclN1cHBvcnQ6OmFwcGx5
U3Ryb2tlU3R5bGVUb0NvbnRleHQoZ2MsIG1fc3R5bGUsIG1fb2JqZWN0KTsKKyAgICB9CisKK3By
aXZhdGU6CisgICAgY29uc3QgUmVuZGVyT2JqZWN0KiBtX29iamVjdDsKKyAgICBSZW5kZXJTdHls
ZSogbV9zdHlsZTsKK307CisKK2NsYXNzIFJlbmRlclNWR1NoYXBlIDogcHVibGljIFJlbmRlclNW
R01vZGVsT2JqZWN0IHsKK3B1YmxpYzoKKyAgICBleHBsaWNpdCBSZW5kZXJTVkdTaGFwZShTVkdT
dHlsZWRUcmFuc2Zvcm1hYmxlRWxlbWVudCopOworICAgIHZpcnR1YWwgflJlbmRlclNWR1NoYXBl
KCk7CisKKyAgICB2b2lkIHNldE5lZWRzU2hhcGVVcGRhdGUoKSB7IG1fbmVlZHNTaGFwZVVwZGF0
ZSA9IHRydWU7IH0KKyAgICB2aXJ0dWFsIHZvaWQgc2V0TmVlZHNCb3VuZGFyaWVzVXBkYXRlKCkg
eyBtX25lZWRzQm91bmRhcmllc1VwZGF0ZSA9IHRydWU7IH0KKyAgICB2aXJ0dWFsIHZvaWQgc2V0
TmVlZHNUcmFuc2Zvcm1VcGRhdGUoKSB7IG1fbmVlZHNUcmFuc2Zvcm1VcGRhdGUgPSB0cnVlOyB9
CisgICAgdmlydHVhbCB2b2lkIGZpbGxTaGFwZShHcmFwaGljc0NvbnRleHQqKTsKKyAgICB2aXJ0
dWFsIHZvaWQgc3Ryb2tlU2hhcGUoR3JhcGhpY3NDb250ZXh0Kik7CisKK3Byb3RlY3RlZDoKKyAg
ICB2aXJ0dWFsIHZvaWQgY3JlYXRlU2hhcGUoKTsKKyAgICB2aXJ0dWFsIGJvb2wgaXNFbXB0eSgp
IGNvbnN0OworICAgIHZpcnR1YWwgRmxvYXRSZWN0IG9iamVjdEJvdW5kaW5nQm94KCkgY29uc3Q7
CisgICAgdmlydHVhbCBGbG9hdFJlY3Qgc3Ryb2tlQm91bmRpbmdCb3goKTsKKyAgICB2aXJ0dWFs
IGJvb2wgc3Ryb2tlQ29udGFpbnNTbG93Q2FzZShjb25zdCBGbG9hdFBvaW50Jik7CisgICAgdmly
dHVhbCBib29sIGZpbGxDb250YWluc1Nsb3dDYXNlKGNvbnN0IEZsb2F0UG9pbnQmLCBjb25zdCBX
aW5kUnVsZSYpIGNvbnN0OworICAgIGZsb2F0IHN0cm9rZVdpZHRoKCkgY29uc3Q7CisgICAgdm9p
ZCBzZXRJc1BhdGgoKSB7IG1faXNQYXRoID0gdHJ1ZTsgfQorICAgIGJvb2wgaXNQYXRoKCkgY29u
c3QgeyByZXR1cm4gbV9pc1BhdGg7IH0KKworICAgIFBhdGgmIHBhdGgoKSBjb25zdAorICAgIHsK
KyAgICAgICAgQVNTRVJUKG1fcGF0aC5nZXQoKSk7CisgICAgICAgIHJldHVybiAqbV9wYXRoOwor
ICAgIH0KKworICAgIGJvb2wgaGFzUGF0aCgpIGNvbnN0IHsgcmV0dXJuIG1fcGF0aC5nZXQoKTsg
fQorCitwcml2YXRlOgorICAgIC8vIEhpdC1kZXRlY3Rpb24gc2VwZXJhdGVkIGZvciB0aGUgZmls
bCBhbmQgdGhlIHN0cm9rZQorICAgIGJvb2wgZmlsbENvbnRhaW5zKGNvbnN0IEZsb2F0UG9pbnQm
LCBib29sIHJlcXVpcmVzRmlsbCA9IHRydWUsIFdpbmRSdWxlIGZpbGxSdWxlID0gUlVMRV9OT05a
RVJPKTsKKyAgICBib29sIHN0cm9rZUNvbnRhaW5zKGNvbnN0IEZsb2F0UG9pbnQmLCBib29sIHJl
cXVpcmVzU3Ryb2tlID0gdHJ1ZSk7CisKKyAgICB2aXJ0dWFsIEZsb2F0UmVjdCBzdHJva2VCb3Vu
ZGluZ0JveCgpIGNvbnN0IHsgcmV0dXJuIG1fc3Ryb2tlQW5kTWFya2VyQm91bmRpbmdCb3g7IH0K
KyAgICB2aXJ0dWFsIEZsb2F0UmVjdCByZXBhaW50UmVjdEluTG9jYWxDb29yZGluYXRlcygpIGNv
bnN0IHsgcmV0dXJuIG1fcmVwYWludEJvdW5kaW5nQm94OyB9CisgICAgdmlydHVhbCBjb25zdCBB
ZmZpbmVUcmFuc2Zvcm0mIGxvY2FsVG9QYXJlbnRUcmFuc2Zvcm0oKSBjb25zdCB7IHJldHVybiBt
X2xvY2FsVHJhbnNmb3JtOyB9CisKKyAgICB2aXJ0dWFsIGJvb2wgaXNTVkdTaGFwZSgpIGNvbnN0
IHsgcmV0dXJuIHRydWU7IH0KKyAgICB2aXJ0dWFsIGNvbnN0IGNoYXIqIHJlbmRlck5hbWUoKSBj
b25zdCB7IHJldHVybiAiUmVuZGVyU1ZHU2hhcGUiOyB9CisKKyAgICB2aXJ0dWFsIHZvaWQgbGF5
b3V0KCk7CisgICAgdmlydHVhbCB2b2lkIHBhaW50KFBhaW50SW5mbyYsIGNvbnN0IExheW91dFBv
aW50Jik7CisgICAgdmlydHVhbCB2b2lkIGFkZEZvY3VzUmluZ1JlY3RzKFZlY3RvcjxMYXlvdXRS
ZWN0PiYsIGNvbnN0IExheW91dFBvaW50Jik7CisKKyAgICB2aXJ0dWFsIGJvb2wgbm9kZUF0Rmxv
YXRQb2ludChjb25zdCBIaXRUZXN0UmVxdWVzdCYsIEhpdFRlc3RSZXN1bHQmLCBjb25zdCBGbG9h
dFBvaW50JiBwb2ludEluUGFyZW50LCBIaXRUZXN0QWN0aW9uKTsKKworICAgIEZsb2F0UmVjdCBj
YWxjdWxhdGVNYXJrZXJCb3VuZHNJZk5lZWRlZCgpOworICAgIHZvaWQgdXBkYXRlQ2FjaGVkQm91
bmRhcmllcygpOworCisgICAgdm9pZCBzZXR1cFNxdWFyZUNhcFBhdGgoUGF0aComIHVzZVBhdGgs
IGludCYgYXBwbHlNb2RlKTsKKyAgICBib29sIHNldHVwTm9uU2NhbGluZ1N0cm9rZVBhdGgoUGF0
aComIHVzZVBhdGgsIEdyYXBoaWNzQ29udGV4dFN0YXRlU2F2ZXImKTsKKyAgICBib29sIHNob3Vs
ZFN0cm9rZVplcm9MZW5ndGhTdWJwYXRoKCkgY29uc3Q7CisgICAgRmxvYXRSZWN0IHplcm9MZW5n
dGhTdWJwYXRoUmVjdCgpIGNvbnN0OworCisgICAgdm9pZCBmaWxsQW5kU3Ryb2tlUGF0aChHcmFw
aGljc0NvbnRleHQqKTsKKworcHJpdmF0ZToKKyAgICBib29sIG1fbmVlZHNCb3VuZGFyaWVzVXBk
YXRlIDogMTsKKyAgICBib29sIG1fbmVlZHNTaGFwZVVwZGF0ZSA6IDE7CisgICAgYm9vbCBtX25l
ZWRzVHJhbnNmb3JtVXBkYXRlIDogMTsKKyAgICBib29sIG1faXNQYXRoIDogMTsKKworICAgIEZs
b2F0UmVjdCBtX2ZpbGxCb3VuZGluZ0JveDsKKyAgICBGbG9hdFJlY3QgbV9zdHJva2VBbmRNYXJr
ZXJCb3VuZGluZ0JveDsKKyAgICBGbG9hdFJlY3QgbV9yZXBhaW50Qm91bmRpbmdCb3g7CisgICAg
U1ZHTWFya2VyTGF5b3V0SW5mbyBtX21hcmtlckxheW91dEluZm87CisgICAgQWZmaW5lVHJhbnNm
b3JtIG1fbG9jYWxUcmFuc2Zvcm07CisgICAgT3duUHRyPFBhdGg+IG1fcGF0aDsKK307CisKK2lu
bGluZSBSZW5kZXJTVkdTaGFwZSogdG9SZW5kZXJTVkdTaGFwZShSZW5kZXJPYmplY3QqIG9iamVj
dCkKK3sKKyAgICBBU1NFUlQoIW9iamVjdCB8fCBvYmplY3QtPmlzU1ZHU2hhcGUoKSk7CisgICAg
cmV0dXJuIHN0YXRpY19jYXN0PFJlbmRlclNWR1NoYXBlKj4ob2JqZWN0KTsKK30KKworaW5saW5l
IGNvbnN0IFJlbmRlclNWR1NoYXBlKiB0b1JlbmRlclNWR1NoYXBlKGNvbnN0IFJlbmRlck9iamVj
dCogb2JqZWN0KQoreworICAgIEFTU0VSVCghb2JqZWN0IHx8IG9iamVjdC0+aXNTVkdTaGFwZSgp
KTsKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8Y29uc3QgUmVuZGVyU1ZHU2hhcGUqPihvYmplY3Qp
OworfQorCisvLyBUaGlzIHdpbGwgY2F0Y2ggYW55b25lIGRvaW5nIGFuIHVubmVjZXNzYXJ5IGNh
c3QuCit2b2lkIHRvUmVuZGVyU1ZHU2hhcGUoY29uc3QgUmVuZGVyU1ZHU2hhcGUqKTsKKworfQor
CisjZW5kaWYgLy8gRU5BQkxFKFNWRykKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL3N2Zy9TVkdJbmxpbmVUZXh0Qm94LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9zdmcvU1ZHSW5saW5lVGV4dEJveC5jcHAKaW5kZXggYzFjNWFmYS4uNzNkNmM0MyAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdJbmxpbmVUZXh0Qm94
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR0lubGluZVRleHRCb3gu
Y3BwCkBAIC0zNzcsNyArMzc3LDcgQEAgdm9pZCBTVkdJbmxpbmVUZXh0Qm94OjpyZWxlYXNlUGFp
bnRpbmdSZXNvdXJjZShHcmFwaGljc0NvbnRleHQqJiBjb250ZXh0LCBjb25zdAogICAgIFJlbmRl
ck9iamVjdCogcGFyZW50UmVuZGVyZXIgPSBwYXJlbnQoKS0+cmVuZGVyZXIoKTsKICAgICBBU1NF
UlQocGFyZW50UmVuZGVyZXIpOwogCi0gICAgbV9wYWludGluZ1Jlc291cmNlLT5wb3N0QXBwbHlS
ZXNvdXJjZShwYXJlbnRSZW5kZXJlciwgY29udGV4dCwgbV9wYWludGluZ1Jlc291cmNlTW9kZSwg
cGF0aCk7CisgICAgbV9wYWludGluZ1Jlc291cmNlLT5wb3N0QXBwbHlSZXNvdXJjZShzdGF0aWNf
Y2FzdDxSZW5kZXJTVkdTaGFwZSo+KHBhcmVudFJlbmRlcmVyKSwgY29udGV4dCwgbV9wYWludGlu
Z1Jlc291cmNlTW9kZSwgcGF0aCk7CiAgICAgbV9wYWludGluZ1Jlc291cmNlID0gMDsKIH0KIApk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdSZW5kZXJTdXBwb3J0
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHUmVuZGVyU3VwcG9ydC5jcHAK
aW5kZXggMDA3OTIxOS4uNTU1OTVhZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL3N2Zy9TVkdSZW5kZXJTdXBwb3J0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvc3ZnL1NWR1JlbmRlclN1cHBvcnQuY3BwCkBAIC0xNTMsNyArMTUzLDcgQEAgdm9pZCBTVkdS
ZW5kZXJTdXBwb3J0OjpmaW5pc2hSZW5kZXJTVkdDb250ZW50KFJlbmRlck9iamVjdCogb2JqZWN0
LCBQYWludEluZm8mIHAKICAgICBTVkdSZXNvdXJjZXMqIHJlc291cmNlcyA9IFNWR1Jlc291cmNl
c0NhY2hlOjpjYWNoZWRSZXNvdXJjZXNGb3JSZW5kZXJPYmplY3Qob2JqZWN0KTsKICAgICBpZiAo
cmVzb3VyY2VzKSB7CiAgICAgICAgIGlmIChSZW5kZXJTVkdSZXNvdXJjZUZpbHRlciogZmlsdGVy
ID0gcmVzb3VyY2VzLT5maWx0ZXIoKSkgewotICAgICAgICAgICAgZmlsdGVyLT5wb3N0QXBwbHlS
ZXNvdXJjZShvYmplY3QsIHBhaW50SW5mby5jb250ZXh0LCBBcHBseVRvRGVmYXVsdE1vZGUsIC8q
IHBhdGggKi8wKTsKKyAgICAgICAgICAgIGZpbHRlci0+cG9zdEFwcGx5UmVzb3VyY2Uoc3RhdGlj
X2Nhc3Q8UmVuZGVyU1ZHU2hhcGUqPihvYmplY3QpLCBwYWludEluZm8uY29udGV4dCwgQXBwbHlU
b0RlZmF1bHRNb2RlLCAwKTsKICAgICAgICAgICAgIHBhaW50SW5mby5jb250ZXh0ID0gc2F2ZWRD
b250ZXh0OwogICAgICAgICB9CiAgICAgfQpAQCAtMjI1LDkgKzIyNSw5IEBAIHZvaWQgU1ZHUmVu
ZGVyU3VwcG9ydDo6bGF5b3V0Q2hpbGRyZW4oUmVuZGVyT2JqZWN0KiBzdGFydCwgYm9vbCBzZWxm
TmVlZHNMYXlvdXQpCiAgICAgICAgICAgICAvLyBXaGVuIHNlbGZOZWVkc0xheW91dCBpcyBmYWxz
ZSBhbmQgdGhlIGxheW91dCBzaXplIGNoYW5nZWQsIHdlIGhhdmUgdG8gY2hlY2sgd2hldGhlciB0
aGlzIGNoaWxkIHVzZXMgcmVsYXRpdmUgbGVuZ3RocwogICAgICAgICAgICAgaWYgKFNWR0VsZW1l
bnQqIGVsZW1lbnQgPSBjaGlsZC0+bm9kZSgpLT5pc1NWR0VsZW1lbnQoKSA/IHN0YXRpY19jYXN0
PFNWR0VsZW1lbnQqPihjaGlsZC0+bm9kZSgpKSA6IDApIHsKICAgICAgICAgICAgICAgICBpZiAo
ZWxlbWVudC0+aXNTdHlsZWQoKSAmJiBzdGF0aWNfY2FzdDxTVkdTdHlsZWRFbGVtZW50Kj4oZWxl
bWVudCktPmhhc1JlbGF0aXZlTGVuZ3RocygpKSB7Ci0gICAgICAgICAgICAgICAgICAgIC8vIFdo
ZW4gdGhlIGxheW91dCBzaXplIGNoYW5nZWQgYW5kIHdoZW4gdXNpbmcgcmVsYXRpdmUgdmFsdWVz
IHRlbGwgdGhlIFJlbmRlclNWR1BhdGggdG8gdXBkYXRlIGl0cyBQYXRoIG9iamVjdAotICAgICAg
ICAgICAgICAgICAgICBpZiAoY2hpbGQtPmlzU1ZHUGF0aCgpKQotICAgICAgICAgICAgICAgICAg
ICAgICAgdG9SZW5kZXJTVkdQYXRoKGNoaWxkKS0+c2V0TmVlZHNQYXRoVXBkYXRlKCk7CisgICAg
ICAgICAgICAgICAgICAgIC8vIFdoZW4gdGhlIGxheW91dCBzaXplIGNoYW5nZWQgYW5kIHdoZW4g
dXNpbmcgcmVsYXRpdmUgdmFsdWVzIHRlbGwgdGhlIFJlbmRlclNWR1NoYXBlIHRvIHVwZGF0ZSBp
dHMgc2hhcGUgb2JqZWN0CisgICAgICAgICAgICAgICAgICAgIGlmIChjaGlsZC0+aXNTVkdTaGFw
ZSgpKQorICAgICAgICAgICAgICAgICAgICAgICAgdG9SZW5kZXJTVkdTaGFwZShjaGlsZCktPnNl
dE5lZWRzU2hhcGVVcGRhdGUoKTsKIAogICAgICAgICAgICAgICAgICAgICBuZWVkc0xheW91dCA9
IHRydWU7CiAgICAgICAgICAgICAgICAgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL3N2Zy9TVkdSZW5kZXJUcmVlQXNUZXh0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9zdmcvU1ZHUmVuZGVyVHJlZUFzVGV4dC5jcHAKaW5kZXggYTE2Mjk2OS4uZDFhZDcyYSAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdSZW5kZXJUcmVlQXNU
ZXh0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR1JlbmRlclRyZWVB
c1RleHQuY3BwCkBAIC01NSw2ICs1NSw3IEBACiAjaW5jbHVkZSAiUmVuZGVyU1ZHUmVzb3VyY2VS
YWRpYWxHcmFkaWVudC5oIgogI2luY2x1ZGUgIlJlbmRlclNWR1Jlc291cmNlU29saWRDb2xvci5o
IgogI2luY2x1ZGUgIlJlbmRlclNWR1Jvb3QuaCIKKyNpbmNsdWRlICJSZW5kZXJTVkdTaGFwZS5o
IgogI2luY2x1ZGUgIlJlbmRlclNWR1RleHQuaCIKICNpbmNsdWRlICJSZW5kZXJUcmVlQXNUZXh0
LmgiCiAjaW5jbHVkZSAiU1ZHQ2lyY2xlRWxlbWVudC5oIgpAQCAtMjg5LDE4ICsyOTAsMTggQEAg
c3RhdGljIHZvaWQgd3JpdGVTdHlsZShUZXh0U3RyZWFtJiB0cywgY29uc3QgUmVuZGVyT2JqZWN0
JiBvYmplY3QpCiAgICAgICAgIHdyaXRlTmFtZVZhbHVlUGFpcih0cywgInRyYW5zZm9ybSIsIG9i
amVjdC5sb2NhbFRyYW5zZm9ybSgpKTsKICAgICB3cml0ZUlmTm90RGVmYXVsdCh0cywgImltYWdl
IHJlbmRlcmluZyIsIHN0eWxlLT5pbWFnZVJlbmRlcmluZygpLCBSZW5kZXJTdHlsZTo6aW5pdGlh
bEltYWdlUmVuZGVyaW5nKCkpOwogICAgIHdyaXRlSWZOb3REZWZhdWx0KHRzLCAib3BhY2l0eSIs
IHN0eWxlLT5vcGFjaXR5KCksIFJlbmRlclN0eWxlOjppbml0aWFsT3BhY2l0eSgpKTsKLSAgICBp
ZiAob2JqZWN0LmlzU1ZHUGF0aCgpKSB7Ci0gICAgICAgIGNvbnN0IFJlbmRlclNWR1BhdGgmIHBh
dGggPSBzdGF0aWNfY2FzdDxjb25zdCBSZW5kZXJTVkdQYXRoJj4ob2JqZWN0KTsKLSAgICAgICAg
QVNTRVJUKHBhdGgubm9kZSgpKTsKLSAgICAgICAgQVNTRVJUKHBhdGgubm9kZSgpLT5pc1NWR0Vs
ZW1lbnQoKSk7CisgICAgaWYgKG9iamVjdC5pc1NWR1NoYXBlKCkpIHsKKyAgICAgICAgY29uc3Qg
UmVuZGVyU1ZHU2hhcGUmIHNoYXBlID0gc3RhdGljX2Nhc3Q8Y29uc3QgUmVuZGVyU1ZHU2hhcGUm
PihvYmplY3QpOworICAgICAgICBBU1NFUlQoc2hhcGUubm9kZSgpKTsKKyAgICAgICAgQVNTRVJU
KHNoYXBlLm5vZGUoKS0+aXNTVkdFbGVtZW50KCkpOwogCiAgICAgICAgIENvbG9yIGZhbGxiYWNr
Q29sb3I7Ci0gICAgICAgIGlmIChSZW5kZXJTVkdSZXNvdXJjZSogc3Ryb2tlUGFpbnRpbmdSZXNv
dXJjZSA9IFJlbmRlclNWR1Jlc291cmNlOjpzdHJva2VQYWludGluZ1Jlc291cmNlKGNvbnN0X2Nh
c3Q8UmVuZGVyU1ZHUGF0aCo+KCZwYXRoKSwgcGF0aC5zdHlsZSgpLCBmYWxsYmFja0NvbG9yKSkg
eworICAgICAgICBpZiAoUmVuZGVyU1ZHUmVzb3VyY2UqIHN0cm9rZVBhaW50aW5nUmVzb3VyY2Ug
PSBSZW5kZXJTVkdSZXNvdXJjZTo6c3Ryb2tlUGFpbnRpbmdSZXNvdXJjZShjb25zdF9jYXN0PFJl
bmRlclNWR1NoYXBlKj4oJnNoYXBlKSwgc2hhcGUuc3R5bGUoKSwgZmFsbGJhY2tDb2xvcikpIHsK
ICAgICAgICAgICAgIFRleHRTdHJlYW1TZXBhcmF0b3IgcygiICIpOwogICAgICAgICAgICAgdHMg
PDwgIiBbc3Ryb2tlPXsiIDw8IHM7CiAgICAgICAgICAgICB3cml0ZVNWR1BhaW50aW5nUmVzb3Vy
Y2UodHMsIHN0cm9rZVBhaW50aW5nUmVzb3VyY2UpOwogCi0gICAgICAgICAgICBTVkdFbGVtZW50
KiBlbGVtZW50ID0gc3RhdGljX2Nhc3Q8U1ZHRWxlbWVudCo+KHBhdGgubm9kZSgpKTsKKyAgICAg
ICAgICAgIFNWR0VsZW1lbnQqIGVsZW1lbnQgPSBzdGF0aWNfY2FzdDxTVkdFbGVtZW50Kj4oc2hh
cGUubm9kZSgpKTsKICAgICAgICAgICAgIGRvdWJsZSBkYXNoT2Zmc2V0ID0gc3ZnU3R5bGUtPnN0
cm9rZURhc2hPZmZzZXQoKS52YWx1ZShlbGVtZW50KTsKICAgICAgICAgICAgIGRvdWJsZSBzdHJv
a2VXaWR0aCA9IHN2Z1N0eWxlLT5zdHJva2VXaWR0aCgpLnZhbHVlKGVsZW1lbnQpOwogICAgICAg
ICAgICAgY29uc3QgVmVjdG9yPFNWR0xlbmd0aD4mIGRhc2hlcyA9IHN2Z1N0eWxlLT5zdHJva2VE
YXNoQXJyYXkoKTsKQEAgLTMyMiw3ICszMjMsNyBAQCBzdGF0aWMgdm9pZCB3cml0ZVN0eWxlKFRl
eHRTdHJlYW0mIHRzLCBjb25zdCBSZW5kZXJPYmplY3QmIG9iamVjdCkKICAgICAgICAgICAgIHRz
IDw8ICJ9XSI7CiAgICAgICAgIH0KIAotICAgICAgICBpZiAoUmVuZGVyU1ZHUmVzb3VyY2UqIGZp
bGxQYWludGluZ1Jlc291cmNlID0gUmVuZGVyU1ZHUmVzb3VyY2U6OmZpbGxQYWludGluZ1Jlc291
cmNlKGNvbnN0X2Nhc3Q8UmVuZGVyU1ZHUGF0aCo+KCZwYXRoKSwgcGF0aC5zdHlsZSgpLCBmYWxs
YmFja0NvbG9yKSkgeworICAgICAgICBpZiAoUmVuZGVyU1ZHUmVzb3VyY2UqIGZpbGxQYWludGlu
Z1Jlc291cmNlID0gUmVuZGVyU1ZHUmVzb3VyY2U6OmZpbGxQYWludGluZ1Jlc291cmNlKGNvbnN0
X2Nhc3Q8UmVuZGVyU1ZHU2hhcGUqPigmc2hhcGUpLCBzaGFwZS5zdHlsZSgpLCBmYWxsYmFja0Nv
bG9yKSkgewogICAgICAgICAgICAgVGV4dFN0cmVhbVNlcGFyYXRvciBzKCIgIik7CiAgICAgICAg
ICAgICB0cyA8PCAiIFtmaWxsPXsiIDw8IHM7CiAgICAgICAgICAgICB3cml0ZVNWR1BhaW50aW5n
UmVzb3VyY2UodHMsIGZpbGxQYWludGluZ1Jlc291cmNlKTsKQEAgLTM0NiwxMiArMzQ3LDEyIEBA
IHN0YXRpYyBUZXh0U3RyZWFtJiB3cml0ZVBvc2l0aW9uQW5kU3R5bGUoVGV4dFN0cmVhbSYgdHMs
IGNvbnN0IFJlbmRlck9iamVjdCYgb2JqCiAgICAgcmV0dXJuIHRzOwogfQogCi1zdGF0aWMgVGV4
dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiB0cywgY29uc3QgUmVuZGVyU1ZHUGF0aCYg
cGF0aCkKK3N0YXRpYyBUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJlYW0mIHRzLCBjb25z
dCBSZW5kZXJTVkdTaGFwZSYgc2hhcGUpCiB7Ci0gICAgd3JpdGVQb3NpdGlvbkFuZFN0eWxlKHRz
LCBwYXRoKTsKKyAgICB3cml0ZVBvc2l0aW9uQW5kU3R5bGUodHMsIHNoYXBlKTsKIAotICAgIEFT
U0VSVChwYXRoLm5vZGUoKS0+aXNTVkdFbGVtZW50KCkpOwotICAgIFNWR0VsZW1lbnQqIHN2Z0Vs
ZW1lbnQgPSBzdGF0aWNfY2FzdDxTVkdFbGVtZW50Kj4ocGF0aC5ub2RlKCkpOworICAgIEFTU0VS
VChzaGFwZS5ub2RlKCktPmlzU1ZHRWxlbWVudCgpKTsKKyAgICBTVkdFbGVtZW50KiBzdmdFbGVt
ZW50ID0gc3RhdGljX2Nhc3Q8U1ZHRWxlbWVudCo+KHNoYXBlLm5vZGUoKSk7CiAKICAgICBpZiAo
c3ZnRWxlbWVudC0+aGFzVGFnTmFtZShTVkdOYW1lczo6cmVjdFRhZykpIHsKICAgICAgICAgU1ZH
UmVjdEVsZW1lbnQqIGVsZW1lbnQgPSBzdGF0aWNfY2FzdDxTVkdSZWN0RWxlbWVudCo+KHN2Z0Vs
ZW1lbnQpOwpAQCAtNjUzLDExICs2NTQsMTEgQEAgdm9pZCB3cml0ZVNWR0ltYWdlKFRleHRTdHJl
YW0mIHRzLCBjb25zdCBSZW5kZXJTVkdJbWFnZSYgaW1hZ2UsIGludCBpbmRlbnQpCiAgICAgd3Jp
dGVSZXNvdXJjZXModHMsIGltYWdlLCBpbmRlbnQpOwogfQogCi12b2lkIHdyaXRlKFRleHRTdHJl
YW0mIHRzLCBjb25zdCBSZW5kZXJTVkdQYXRoJiBwYXRoLCBpbnQgaW5kZW50KQordm9pZCB3cml0
ZShUZXh0U3RyZWFtJiB0cywgY29uc3QgUmVuZGVyU1ZHU2hhcGUmIHNoYXBlLCBpbnQgaW5kZW50
KQogewotICAgIHdyaXRlU3RhbmRhcmRQcmVmaXgodHMsIHBhdGgsIGluZGVudCk7Ci0gICAgdHMg
PDwgcGF0aCA8PCAiXG4iOwotICAgIHdyaXRlUmVzb3VyY2VzKHRzLCBwYXRoLCBpbmRlbnQpOwor
ICAgIHdyaXRlU3RhbmRhcmRQcmVmaXgodHMsIHNoYXBlLCBpbmRlbnQpOworICAgIHRzIDw8IHNo
YXBlIDw8ICJcbiI7CisgICAgd3JpdGVSZXNvdXJjZXModHMsIHNoYXBlLCBpbmRlbnQpOwogfQog
CiB2b2lkIHdyaXRlU1ZHR3JhZGllbnRTdG9wKFRleHRTdHJlYW0mIHRzLCBjb25zdCBSZW5kZXJT
VkdHcmFkaWVudFN0b3AmIHN0b3AsIGludCBpbmRlbnQpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvc3ZnL1NWR1JlbmRlclRyZWVBc1RleHQuaCBiL1NvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9zdmcvU1ZHUmVuZGVyVHJlZUFzVGV4dC5oCmluZGV4IGNlMDdhNWMuLjM1OThj
ODMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHUmVuZGVyVHJl
ZUFzVGV4dC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHUmVuZGVyVHJl
ZUFzVGV4dC5oCkBAIC00MSwxNCArNDEsMTQgQEAgY2xhc3MgUmVuZGVySW1hZ2U7CiBjbGFzcyBS
ZW5kZXJPYmplY3Q7CiBjbGFzcyBSZW5kZXJTVkdHcmFkaWVudFN0b3A7CiBjbGFzcyBSZW5kZXJT
VkdJbWFnZTsKLWNsYXNzIFJlbmRlclNWR1BhdGg7CitjbGFzcyBSZW5kZXJTVkdTaGFwZTsKIGNs
YXNzIFJlbmRlclNWR1Jvb3Q7CiBjbGFzcyBSZW5kZXJUZXh0OwogY2xhc3MgQWZmaW5lVHJhbnNm
b3JtOwogY2xhc3MgU1ZHVW5pdFR5cGVzOwogCiAvLyBmdW5jdGlvbnMgdXNlZCBieSB0aGUgbWFp
biBSZW5kZXJUcmVlQXNUZXh0IGNvZGUKLXZvaWQgd3JpdGUoVGV4dFN0cmVhbSYsIGNvbnN0IFJl
bmRlclNWR1BhdGgmLCBpbnQgaW5kZW50KTsKK3ZvaWQgd3JpdGUoVGV4dFN0cmVhbSYsIGNvbnN0
IFJlbmRlclNWR1NoYXBlJiwgaW50IGluZGVudCk7CiB2b2lkIHdyaXRlKFRleHRTdHJlYW0mLCBj
b25zdCBSZW5kZXJTVkdSb290JiwgaW50IGluZGVudCk7CiB2b2lkIHdyaXRlU1ZHR3JhZGllbnRT
dG9wKFRleHRTdHJlYW0mLCBjb25zdCBSZW5kZXJTVkdHcmFkaWVudFN0b3AmLCBpbnQgaW5kZW50
KTsKIHZvaWQgd3JpdGVTVkdSZXNvdXJjZUNvbnRhaW5lcihUZXh0U3RyZWFtJiwgY29uc3QgUmVu
ZGVyT2JqZWN0JiwgaW50IGluZGVudCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvc3ZnL1NWR1RleHRSdW5SZW5kZXJpbmdDb250ZXh0LmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9zdmcvU1ZHVGV4dFJ1blJlbmRlcmluZ0NvbnRleHQuY3BwCmluZGV4IDMzYWNm
OTIuLjRmMWEyYjEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZH
VGV4dFJ1blJlbmRlcmluZ0NvbnRleHQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9zdmcvU1ZHVGV4dFJ1blJlbmRlcmluZ0NvbnRleHQuY3BwCkBAIC0xNjAsNyArMTYwLDcgQEAg
dm9pZCBTVkdUZXh0UnVuUmVuZGVyaW5nQ29udGV4dDo6ZHJhd1NWR0dseXBocyhHcmFwaGljc0Nv
bnRleHQqIGNvbnRleHQsIGNvbnN0IFQKICAgICAgICAgICAgICAgICBjb25zdCBSZW5kZXJTVkdJ
bmxpbmVUZXh0KiB0ZXh0UmVuZGVyZXIgPSB0b1JlbmRlclNWR0lubGluZVRleHQocmVuZGVyT2Jq
ZWN0KTsKICAgICAgICAgICAgICAgICBjb250ZXh0LT5zZXRTdHJva2VUaGlja25lc3MoY29udGV4
dC0+c3Ryb2tlVGhpY2tuZXNzKCkgKiB0ZXh0UmVuZGVyZXItPnNjYWxpbmdGYWN0b3IoKSk7CiAg
ICAgICAgICAgICB9Ci0gICAgICAgICAgICBhY3RpdmVQYWludGluZ1Jlc291cmNlLT5wb3N0QXBw
bHlSZXNvdXJjZShwYXJlbnRSZW5kZXJPYmplY3QsIGNvbnRleHQsIHJlc291cmNlTW9kZSwgJmds
eXBoUGF0aCk7CisgICAgICAgICAgICBhY3RpdmVQYWludGluZ1Jlc291cmNlLT5wb3N0QXBwbHlS
ZXNvdXJjZShzdGF0aWNfY2FzdDxSZW5kZXJTVkdTaGFwZSo+KHBhcmVudFJlbmRlck9iamVjdCks
IGNvbnRleHQsIHJlc291cmNlTW9kZSwgJmdseXBoUGF0aCk7CiAgICAgICAgICB9CiAgCiAgICAg
ICAgIGNvbnRleHQtPnJlc3RvcmUoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9T
VkdDaXJjbGVFbGVtZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdDaXJjbGVFbGVtZW50
LmNwcAppbmRleCAyYWU2OWI4Li4wMzY2OWUwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9z
dmcvU1ZHQ2lyY2xlRWxlbWVudC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0NpcmNs
ZUVsZW1lbnQuY3BwCkBAIC0xMjQsNyArMTI0LDcgQEAgdm9pZCBTVkdDaXJjbGVFbGVtZW50Ojpz
dmdBdHRyaWJ1dGVDaGFuZ2VkKGNvbnN0IFF1YWxpZmllZE5hbWUmIGF0dHJOYW1lKQogICAgICAg
ICByZXR1cm47CiAKICAgICBpZiAoaXNMZW5ndGhBdHRyaWJ1dGUpIHsKLSAgICAgICAgcmVuZGVy
ZXItPnNldE5lZWRzUGF0aFVwZGF0ZSgpOworICAgICAgICByZW5kZXJlci0+c2V0TmVlZHNTaGFw
ZVVwZGF0ZSgpOwogICAgICAgICBSZW5kZXJTVkdSZXNvdXJjZTo6bWFya0ZvckxheW91dEFuZFBh
cmVudFJlc291cmNlSW52YWxpZGF0aW9uKHJlbmRlcmVyKTsKICAgICAgICAgcmV0dXJuOwogICAg
IH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdFbGxpcHNlRWxlbWVudC5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRWxsaXBzZUVsZW1lbnQuY3BwCmluZGV4IGNlYTA2NmQu
LmNhMDE3YzQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdFbGxpcHNlRWxlbWVu
dC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0VsbGlwc2VFbGVtZW50LmNwcApAQCAt
MTI5LDcgKzEyOSw3IEBAIHZvaWQgU1ZHRWxsaXBzZUVsZW1lbnQ6OnN2Z0F0dHJpYnV0ZUNoYW5n
ZWQoY29uc3QgUXVhbGlmaWVkTmFtZSYgYXR0ck5hbWUpCiAgICAgICAgIHJldHVybjsKIAogICAg
IGlmIChpc0xlbmd0aEF0dHJpYnV0ZSkgewotICAgICAgICByZW5kZXJlci0+c2V0TmVlZHNQYXRo
VXBkYXRlKCk7CisgICAgICAgIHJlbmRlcmVyLT5zZXROZWVkc1NoYXBlVXBkYXRlKCk7CiAgICAg
ICAgIFJlbmRlclNWR1Jlc291cmNlOjptYXJrRm9yTGF5b3V0QW5kUGFyZW50UmVzb3VyY2VJbnZh
bGlkYXRpb24ocmVuZGVyZXIpOwogICAgICAgICByZXR1cm47CiAgICAgfQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvc3ZnL1NWR0xpbmVFbGVtZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3N2
Zy9TVkdMaW5lRWxlbWVudC5jcHAKaW5kZXggYzdjYTExZS4uYjFiYjhlYSAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvc3ZnL1NWR0xpbmVFbGVtZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9zdmcvU1ZHTGluZUVsZW1lbnQuY3BwCkBAIC0xMjksNyArMTI5LDcgQEAgdm9pZCBTVkdMaW5l
RWxlbWVudDo6c3ZnQXR0cmlidXRlQ2hhbmdlZChjb25zdCBRdWFsaWZpZWROYW1lJiBhdHRyTmFt
ZSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgaWYgKGlzTGVuZ3RoQXR0cmlidXRlKSB7Ci0gICAg
ICAgIHJlbmRlcmVyLT5zZXROZWVkc1BhdGhVcGRhdGUoKTsKKyAgICAgICAgcmVuZGVyZXItPnNl
dE5lZWRzU2hhcGVVcGRhdGUoKTsKICAgICAgICAgUmVuZGVyU1ZHUmVzb3VyY2U6Om1hcmtGb3JM
YXlvdXRBbmRQYXJlbnRSZXNvdXJjZUludmFsaWRhdGlvbihyZW5kZXJlcik7CiAgICAgICAgIHJl
dHVybjsKICAgICB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHUGF0aEVsZW1l
bnQuY3BwIGIvU291cmNlL1dlYkNvcmUvc3ZnL1NWR1BhdGhFbGVtZW50LmNwcAppbmRleCBhN2Ez
MzdlLi5mZTMzNTk1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHUGF0aEVsZW1l
bnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdQYXRoRWxlbWVudC5jcHAKQEAgLTI2
OSw3ICsyNjksNyBAQCB2b2lkIFNWR1BhdGhFbGVtZW50OjpzdmdBdHRyaWJ1dGVDaGFuZ2VkKGNv
bnN0IFF1YWxpZmllZE5hbWUmIGF0dHJOYW1lKQogICAgICAgICB9CiAKICAgICAgICAgaWYgKHJl
bmRlcmVyKQotICAgICAgICAgICAgcmVuZGVyZXItPnNldE5lZWRzUGF0aFVwZGF0ZSgpOworICAg
ICAgICAgICAgcmVuZGVyZXItPnNldE5lZWRzU2hhcGVVcGRhdGUoKTsKICAgICB9CiAKICAgICBp
ZiAocmVuZGVyZXIpCkBAIC0zNTUsMTAgKzM1NSwxNiBAQCB2b2lkIFNWR1BhdGhFbGVtZW50Ojpw
YXRoU2VnTGlzdENoYW5nZWQoU1ZHUGF0aFNlZ1JvbGUgcm9sZSkKICAgICBpZiAoIXJlbmRlcmVy
KQogICAgICAgICByZXR1cm47CiAKLSAgICByZW5kZXJlci0+c2V0TmVlZHNQYXRoVXBkYXRlKCk7
CisgICAgcmVuZGVyZXItPnNldE5lZWRzU2hhcGVVcGRhdGUoKTsKICAgICBSZW5kZXJTVkdSZXNv
dXJjZTo6bWFya0ZvckxheW91dEFuZFBhcmVudFJlc291cmNlSW52YWxpZGF0aW9uKHJlbmRlcmVy
KTsKIH0KIAorUmVuZGVyT2JqZWN0KiBTVkdQYXRoRWxlbWVudDo6Y3JlYXRlUmVuZGVyZXIoUmVu
ZGVyQXJlbmEqIGFyZW5hLCBSZW5kZXJTdHlsZSopCit7CisgICAgLy8gQnkgZGVmYXVsdCwgYW55
IHN1YmNsYXNzIGlzIGV4cGVjdGVkIHRvIGRvIHBhdGgtYmFzZWQgZHJhd2luZworICAgIHJldHVy
biBuZXcgKGFyZW5hKSBSZW5kZXJTVkdQYXRoKHRoaXMpOworfQorCiB9CiAKICNlbmRpZiAvLyBF
TkFCTEUoU1ZHKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvc3ZnL1NWR1BhdGhFbGVtZW50
LmggYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHUGF0aEVsZW1lbnQuaAppbmRleCAxZDM3ZDBlLi41
NGI4ZmUyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHUGF0aEVsZW1lbnQuaAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHUGF0aEVsZW1lbnQuaApAQCAtMTIyLDYgKzEyMiw4
IEBAIHByaXZhdGU6CiAgICAgdmlydHVhbCB2b2lkIHN5bmNocm9uaXplUmVxdWlyZWRFeHRlbnNp
b25zKCkgeyBTVkdUZXN0czo6c3luY2hyb25pemVSZXF1aXJlZEV4dGVuc2lvbnModGhpcyk7IH0K
ICAgICB2aXJ0dWFsIHZvaWQgc3luY2hyb25pemVTeXN0ZW1MYW5ndWFnZSgpIHsgU1ZHVGVzdHM6
OnN5bmNocm9uaXplU3lzdGVtTGFuZ3VhZ2UodGhpcyk7IH0KIAorICAgIFJlbmRlck9iamVjdCog
Y3JlYXRlUmVuZGVyZXIoUmVuZGVyQXJlbmEqLCBSZW5kZXJTdHlsZSopOworCiBwcml2YXRlOgog
ICAgIE93blB0cjxTVkdQYXRoQnl0ZVN0cmVhbT4gbV9wYXRoQnl0ZVN0cmVhbTsKICAgICBtdXRh
YmxlIFNWR1N5bmNocm9uaXphYmxlQW5pbWF0ZWRQcm9wZXJ0eTxTVkdQYXRoU2VnTGlzdD4gbV9w
YXRoU2VnTGlzdDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdQb2x5RWxlbWVu
dC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHUG9seUVsZW1lbnQuY3BwCmluZGV4IDYxNmI4
NjcuLmYzMGNhNGEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdQb2x5RWxlbWVu
dC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvc3ZnL1NWR1BvbHlFbGVtZW50LmNwcApAQCAtMTI0
LDcgKzEyNCw3IEBAIHZvaWQgU1ZHUG9seUVsZW1lbnQ6OnN2Z0F0dHJpYnV0ZUNoYW5nZWQoY29u
c3QgUXVhbGlmaWVkTmFtZSYgYXR0ck5hbWUpCiAgICAgICAgIHJldHVybjsKIAogICAgIGlmIChh
dHRyTmFtZSA9PSBTVkdOYW1lczo6cG9pbnRzQXR0cikgewotICAgICAgICByZW5kZXJlci0+c2V0
TmVlZHNQYXRoVXBkYXRlKCk7CisgICAgICAgIHJlbmRlcmVyLT5zZXROZWVkc1NoYXBlVXBkYXRl
KCk7CiAgICAgICAgIFJlbmRlclNWR1Jlc291cmNlOjptYXJrRm9yTGF5b3V0QW5kUGFyZW50UmVz
b3VyY2VJbnZhbGlkYXRpb24ocmVuZGVyZXIpOwogICAgICAgICByZXR1cm47CiAgICAgfQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvc3ZnL1NWR1JlY3RFbGVtZW50LmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL3N2Zy9TVkdSZWN0RWxlbWVudC5jcHAKaW5kZXggZTg0Nzc0ZC4uMTg3OWUwYSAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvc3ZnL1NWR1JlY3RFbGVtZW50LmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9zdmcvU1ZHUmVjdEVsZW1lbnQuY3BwCkBAIC0yNSw2ICsyNSw3IEBACiAKICNp
bmNsdWRlICJBdHRyaWJ1dGUuaCIKICNpbmNsdWRlICJSZW5kZXJTVkdQYXRoLmgiCisjaW5jbHVk
ZSAiUmVuZGVyU1ZHUmVjdC5oIgogI2luY2x1ZGUgIlJlbmRlclNWR1Jlc291cmNlLmgiCiAjaW5j
bHVkZSAiU1ZHRWxlbWVudEluc3RhbmNlLmgiCiAjaW5jbHVkZSAiU1ZHTGVuZ3RoLmgiCkBAIC0z
Miw2ICszMyw4IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAorY2xhc3MgUmVuZGVyU1ZHUmVj
dDsKKwogLy8gQW5pbWF0ZWQgcHJvcGVydHkgZGVmaW5pdGlvbnMKIERFRklORV9BTklNQVRFRF9M
RU5HVEgoU1ZHUmVjdEVsZW1lbnQsIFNWR05hbWVzOjp4QXR0ciwgWCwgeCkKIERFRklORV9BTklN
QVRFRF9MRU5HVEgoU1ZHUmVjdEVsZW1lbnQsIFNWR05hbWVzOjp5QXR0ciwgWSwgeSkKQEAgLTEz
NywxMiArMTQwLDEyIEBAIHZvaWQgU1ZHUmVjdEVsZW1lbnQ6OnN2Z0F0dHJpYnV0ZUNoYW5nZWQo
Y29uc3QgUXVhbGlmaWVkTmFtZSYgYXR0ck5hbWUpCiAgICAgaWYgKFNWR1Rlc3RzOjpoYW5kbGVB
dHRyaWJ1dGVDaGFuZ2UodGhpcywgYXR0ck5hbWUpKQogICAgICAgICByZXR1cm47CiAKLSAgICBS
ZW5kZXJTVkdQYXRoKiByZW5kZXJlciA9IHN0YXRpY19jYXN0PFJlbmRlclNWR1BhdGgqPih0aGlz
LT5yZW5kZXJlcigpKTsKKyAgICBSZW5kZXJTVkdSZWN0KiByZW5kZXJlciA9IHN0YXRpY19jYXN0
PFJlbmRlclNWR1JlY3QqPih0aGlzLT5yZW5kZXJlcigpKTsKICAgICBpZiAoIXJlbmRlcmVyKQog
ICAgICAgICByZXR1cm47CiAKICAgICBpZiAoaXNMZW5ndGhBdHRyaWJ1dGUpIHsKLSAgICAgICAg
cmVuZGVyZXItPnNldE5lZWRzUGF0aFVwZGF0ZSgpOworICAgICAgICByZW5kZXJlci0+c2V0TmVl
ZHNTaGFwZVVwZGF0ZSgpOwogICAgICAgICBSZW5kZXJTVkdSZXNvdXJjZTo6bWFya0ZvckxheW91
dEFuZFBhcmVudFJlc291cmNlSW52YWxpZGF0aW9uKHJlbmRlcmVyKTsKICAgICAgICAgcmV0dXJu
OwogICAgIH0KQEAgLTE5OCw2ICsyMDEsMTEgQEAgYm9vbCBTVkdSZWN0RWxlbWVudDo6c2VsZkhh
c1JlbGF0aXZlTGVuZ3RocygpIGNvbnN0CiAgICAgICAgIHx8IHJ5KCkuaXNSZWxhdGl2ZSgpOwog
fQogCitSZW5kZXJPYmplY3QqIFNWR1JlY3RFbGVtZW50OjpjcmVhdGVSZW5kZXJlcihSZW5kZXJB
cmVuYSogYXJlbmEsIFJlbmRlclN0eWxlKikKK3sKKyAgICByZXR1cm4gbmV3IChhcmVuYSkgUmVu
ZGVyU1ZHUmVjdCh0aGlzKTsKK30KKwogfQogCiAjZW5kaWYgLy8gRU5BQkxFKFNWRykKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdSZWN0RWxlbWVudC5oIGIvU291cmNlL1dlYkNv
cmUvc3ZnL1NWR1JlY3RFbGVtZW50LmgKaW5kZXggOTk0MzdmMy4uOWJmNjAyZiAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvc3ZnL1NWR1JlY3RFbGVtZW50LmgKKysrIGIvU291cmNlL1dlYkNv
cmUvc3ZnL1NWR1JlY3RFbGVtZW50LmgKQEAgLTUyLDYgKzUyLDggQEAgcHJpdmF0ZToKIAogICAg
IHZpcnR1YWwgYm9vbCBzZWxmSGFzUmVsYXRpdmVMZW5ndGhzKCkgY29uc3Q7CiAKKyAgICBSZW5k
ZXJPYmplY3QqIGNyZWF0ZVJlbmRlcmVyKFJlbmRlckFyZW5hKiwgUmVuZGVyU3R5bGUqKTsKKwog
ICAgIEJFR0lOX0RFQ0xBUkVfQU5JTUFURURfUFJPUEVSVElFUyhTVkdSZWN0RWxlbWVudCkKICAg
ICAgICAgREVDTEFSRV9BTklNQVRFRF9MRU5HVEgoWCwgeCkKICAgICAgICAgREVDTEFSRV9BTklN
QVRFRF9MRU5HVEgoWSwgeSkKLS0gCjEuNy41LjQKCg==
</data>
<flag name="review"
          id="101861"
          type_id="1"
          status="-"
          setter="krit"
    />
    <flag name="commit-queue"
          id="101862"
          type_id="3"
          status="-"
          setter="rhodovan.u-szeged"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>105940</attachid>
            <date>2011-09-01 04:38:59 -0700</date>
            <delta_ts>2011-09-08 06:05:26 -0700</delta_ts>
            <desc>Propsed patch</desc>
            <filename>0001-krits-review.patch</filename>
            <type>text/plain</type>
            <size>130450</size>
            <attacher name="Renata Hodovan">rhodovan.u-szeged</attacher>
            
              <data encoding="base64">RnJvbSBkYThiZjZhNWIzZDllNTUyOWRhNjA2NDZmYzZkZDY4NWU1NDRmYjcwIE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBSZW5hdGEgSG9kb3ZhbiA8cmVuaUB3ZWJraXQub3JnPgpEYXRl
OiBUaHUsIDEgU2VwIDIwMTEgMTM6MzU6NDAgKzAyMDAKU3ViamVjdDogW1BBVENIXSBrcml0cyBy
ZXZpZXcKCi0tLQogLi4uL3BvaW50ZXItZXZlbnRzLW9uLXJvdW5kZWQtcmVjdC1leHBlY3RlZC5w
bmcgICAgfCAgQmluIDAgLT4gMTU5NjkgYnl0ZXMKIC4uLi9wb2ludGVyLWV2ZW50cy1vbi1yb3Vu
ZGVkLXJlY3QtZXhwZWN0ZWQudHh0ICAgIHwgICAgNiArCiAuLi4vc3ZnL2N1c3RvbS9wb2ludGVy
LWV2ZW50cy1vbi1yb3VuZGVkLXJlY3Quc3ZnICB8ICAgMjEgKwogLi4uZW50cy13aXRoLWxpbmVj
YXBzLWFuZC1taXRlcmxpbWl0cy1leHBlY3RlZC5wbmcgfCAgQmluIDAgLT4gMTkwMjggYnl0ZXMK
IC4uLmVudHMtd2l0aC1saW5lY2Fwcy1hbmQtbWl0ZXJsaW1pdHMtZXhwZWN0ZWQudHh0IHwgICAg
NiArCiAuLi5vaW50ZXItZXZlbnRzLXdpdGgtbGluZWNhcHMtYW5kLW1pdGVybGltaXRzLnN2ZyB8
ICAgMjIgKwogU291cmNlL1dlYkNvcmUvQ01ha2VMaXN0cy50eHQgICAgICAgICAgICAgICAgICAg
ICAgfCAgICAyICsKIFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHwgIDEzNiArKysrKysKIFNvdXJjZS9XZWJDb3JlL0dOVW1ha2VmaWxlLmxpc3QuYW0g
ICAgICAgICAgICAgICAgIHwgICAgNCArCiBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkgICAg
ICAgICAgICAgICAgICAgICAgICB8ICAgIDQgKwogU291cmNlL1dlYkNvcmUvV2ViQ29yZS5wcm8g
ICAgICAgICAgICAgICAgICAgICAgICAgfCAgICA0ICsKIFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUu
dmNwcm9qL1dlYkNvcmUudmNwcm9qICAgICAgIHwgIDExMiArKysrKwogU291cmNlL1dlYkNvcmUv
V2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qICAgfCAgICA4ICsKIFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL0Zsb2F0UmVjdC5jcHAgICAgIHwgICAgNyArCiBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9GbG9hdFJlY3QuaCAgICAgICB8ICAgIDEgKwogU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck9iamVjdC5oICAgICAgICAgICAgfCAgICAzICsK
IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUcmVlQXNUZXh0LmNwcCAgICAgIHwgICAg
NCArLQogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdBbGxJbk9uZS5jcHAg
fCAgICAyICsKIC4uLi9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHTW9kZWxPYmplY3Qu
Y3BwIHwgICAgMiArLQogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdQYXRo
LmNwcCAgICAgfCAgMzUyICstLS0tLS0tLS0tLS0tLS0tCiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvc3ZnL1JlbmRlclNWR1BhdGguaCAgICAgICB8ICAgNzUgKy0tLQogU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZWN0LmNwcCAgICAgfCAgMTI0ICsrKysrKwogU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZWN0LmggICAgICAgfCAgIDYzICsrKwog
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJjZS5oICAgfCAgICAz
ICstCiAuLi4vcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJjZUNsaXBwZXIuY3BwICAgICB8
ICAgIDYgKy0KIC4uLi9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291cmNlQ29udGFpbmVyLmNw
cCAgIHwgICAgMiArLQogLi4uL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VGaWx0ZXIu
Y3BwICAgICAgfCAgICA1ICstCiAuLi4vcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJjZUZp
bHRlci5oICAgICAgICB8ICAgIDIgKy0KIC4uLi9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291
cmNlR3JhZGllbnQuY3BwICAgIHwgICAxMCArLQogLi4uL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZH
UmVzb3VyY2VHcmFkaWVudC5oICAgICAgfCAgICAyICstCiAuLi4vcmVuZGVyaW5nL3N2Zy9SZW5k
ZXJTVkdSZXNvdXJjZVBhdHRlcm4uY3BwICAgICB8ICAgIDggKy0KIC4uLi9yZW5kZXJpbmcvc3Zn
L1JlbmRlclNWR1Jlc291cmNlUGF0dGVybi5oICAgICAgIHwgICAgMiArLQogLi4uL3JlbmRlcmlu
Zy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VTb2xpZENvbG9yLmNwcCAgfCAgICA5ICstCiAuLi4vcmVu
ZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJjZVNvbGlkQ29sb3IuaCAgICB8ICAgIDIgKy0KIFNv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHU2hhcGUuY3BwICAgIHwgIDQzNSAr
KysrKysrKysrKysrKysrKysrKwogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJT
VkdTaGFwZS5oICAgICAgfCAgMTU3ICsrKysrKysKIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9z
dmcvU1ZHSW5saW5lVGV4dEJveC5jcHAgIHwgICAgMiArLQogU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL3N2Zy9TVkdSZW5kZXJTdXBwb3J0LmNwcCAgfCAgICA4ICstCiAuLi4vV2ViQ29yZS9yZW5k
ZXJpbmcvc3ZnL1NWR1JlbmRlclRyZWVBc1RleHQuY3BwICB8ICAgMzEgKy0KIFNvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9zdmcvU1ZHUmVuZGVyVHJlZUFzVGV4dC5oIHwgICAgNCArLQogLi4uL3Jl
bmRlcmluZy9zdmcvU1ZHVGV4dFJ1blJlbmRlcmluZ0NvbnRleHQuY3BwICAgfCAgICAyICstCiBT
b3VyY2UvV2ViQ29yZS9zdmcvU1ZHQ2lyY2xlRWxlbWVudC5jcHAgICAgICAgICAgICB8ICAgIDIg
Ky0KIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdFbGxpcHNlRWxlbWVudC5jcHAgICAgICAgICAgIHwg
ICAgMiArLQogU291cmNlL1dlYkNvcmUvc3ZnL1NWR0xpbmVFbGVtZW50LmNwcCAgICAgICAgICAg
ICAgfCAgICAyICstCiBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHUGF0aEVsZW1lbnQuY3BwICAgICAg
ICAgICAgICB8ICAgMTAgKy0KIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdQYXRoRWxlbWVudC5oICAg
ICAgICAgICAgICAgIHwgICAgMiArCiBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHUG9seUVsZW1lbnQu
Y3BwICAgICAgICAgICAgICB8ICAgIDIgKy0KIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdSZWN0RWxl
bWVudC5jcHAgICAgICAgICAgICAgIHwgICAxMiArLQogU291cmNlL1dlYkNvcmUvc3ZnL1NWR1Jl
Y3RFbGVtZW50LmggICAgICAgICAgICAgICAgfCAgICAyICsKIDQ5IGZpbGVzIGNoYW5nZWQsIDEy
MDggaW5zZXJ0aW9ucygrKSwgNDc0IGRlbGV0aW9ucygtKQogY3JlYXRlIG1vZGUgMTAwNjQ0IExh
eW91dFRlc3RzL3N2Zy9jdXN0b20vcG9pbnRlci1ldmVudHMtb24tcm91bmRlZC1yZWN0LWV4cGVj
dGVkLnBuZwogY3JlYXRlIG1vZGUgMTAwNjQ0IExheW91dFRlc3RzL3N2Zy9jdXN0b20vcG9pbnRl
ci1ldmVudHMtb24tcm91bmRlZC1yZWN0LWV4cGVjdGVkLnR4dAogY3JlYXRlIG1vZGUgMTAwNjQ0
IExheW91dFRlc3RzL3N2Zy9jdXN0b20vcG9pbnRlci1ldmVudHMtb24tcm91bmRlZC1yZWN0LnN2
ZwogY3JlYXRlIG1vZGUgMTAwNjQ0IExheW91dFRlc3RzL3N2Zy9jdXN0b20vcG9pbnRlci1ldmVu
dHMtd2l0aC1saW5lY2Fwcy1hbmQtbWl0ZXJsaW1pdHMtZXhwZWN0ZWQucG5nCiBjcmVhdGUgbW9k
ZSAxMDA2NDQgTGF5b3V0VGVzdHMvc3ZnL2N1c3RvbS9wb2ludGVyLWV2ZW50cy13aXRoLWxpbmVj
YXBzLWFuZC1taXRlcmxpbWl0cy1leHBlY3RlZC50eHQKIGNyZWF0ZSBtb2RlIDEwMDY0NCBMYXlv
dXRUZXN0cy9zdmcvY3VzdG9tL3BvaW50ZXItZXZlbnRzLXdpdGgtbGluZWNhcHMtYW5kLW1pdGVy
bGltaXRzLnN2ZwogY3JlYXRlIG1vZGUgMTAwNjQ0IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9z
dmcvUmVuZGVyU1ZHUmVjdC5jcHAKIGNyZWF0ZSBtb2RlIDEwMDY0NCBTb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1JlY3QuaAogY3JlYXRlIG1vZGUgMTAwNjQ0IFNvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHU2hhcGUuY3BwCiBjcmVhdGUgbW9kZSAxMDA2
NDQgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdTaGFwZS5oCgpkaWZmIC0t
Z2l0IGEvTGF5b3V0VGVzdHMvc3ZnL2N1c3RvbS9wb2ludGVyLWV2ZW50cy1vbi1yb3VuZGVkLXJl
Y3QtZXhwZWN0ZWQucG5nIGIvTGF5b3V0VGVzdHMvc3ZnL2N1c3RvbS9wb2ludGVyLWV2ZW50cy1v
bi1yb3VuZGVkLXJlY3QtZXhwZWN0ZWQucG5nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmE1NTlkMzEwMzk0OWJiMTVi
NjcxNTYyMzA1MDdkODE1ZmVkYTNhOWYKR0lUIGJpbmFyeSBwYXRjaApsaXRlcmFsIDE1OTY5Cnpj
bWVITmN7SjRSK2FEN31fN28rViQmeUV3cTNxakNOZmMyT0EkeWp7bWJFTkhTejJ0QmtYPFV0elZG
TEpNYWFtJAp6Py1JdG9HdDJ3XmV5ZkxuLWdEa18tcnNyOGRDc2VVcyhiRmB5MDdKUGVYaV5OS0Ru
eHtPbjtGNUFQZmVoem9jP08KejY5KElkZ3UmbzlzckxnVChYSjAyZldQPmltMk50bFMoJSZKSUp3
eHUlKzFBM097R0xGI0g2TEFQMHlTV21saEVmCno3Y3NxVWRkNXVSakVSVn1ib2pOPDI0SUp8SkJv
QHxGRFdWX3VpbXFfeE8zTVcyNkx6SXptQnRFSWRfO09WVkJ5JQp6TVhoSlVrbjB9Q2J4QWtQTn52
OWYkWlRwdSpNfSVuM2NHI3dRbTM4NyUtcEdoY2FPKE16bj5tZG5vVC1EX1RoWjYKemEyc3ttVXIq
XzshTCt8amxofWs3enVCbzN6TUhPWV9GZio4b2NGU0s5Zkh4e1laWTdkcCZYfkwofHA1eD1kUn5A
CnpZcjxuIyRRem4tViFTdXtAYWpESyZwbVM1XnFBfl4hMDQ7NVVGKSYhbWd8LWctQzd1Wno+a08t
Uip2cERvanVSeQp6Y3VAQmN7SVQzbjVgVWREXzBVLU41PFhOfntsNUYoMSZqam5wTERyQUcyJWth
KmVrX2EtKzA/Rms1cl8+Un48REsKelYhTkomY2J6ekokSWp3UUp5VjU3KiEhfWt4aXIoSFNvSmxB
dSFeYDlafXElRWdfQEghdzh0e2c3bUlgQVNBI214CnpxYjRKN2V8IXAlPVF0fDl2U0VDcmgmXj5m
eXltYkcoLXBvcSpCeUk9PUArOWlpUH1xLUEzQjZkSFFZQXdhbmUpSwp6PXUpJVdDPUkwWUlAUUlK
SFJgNSlaUkNDXml7KVZaemBSbH5KV0dWKDFSWG5GR2AtNElDTThPZnNPK25sMDZCSjEKenZEfHhU
P3pIe0tVd1dLejtqdTFySG9jSEAmT0BTS3pVYlE5MFhmb05UI24oMjE9S0dIPVNaaXN6R19VfC0p
eXs8CnotTDFWSW8pSHNXeC09fk5kRSN7bUo3LXMwe2d+NGdMKGY8M3R9a196Qmh2M2JEMzhYb3F3
ellDcUNYeXJoa2tPKAp6LWQrP2tkZXMha0E5VlFoKnAyMEJSWC1PIVFPVGkleUk1S0lRREt+TEw4
bnYzbFZfNkpGX0QlO1luQVB9a0w1M2EKeit9UEFHVHdOcXNlKjB1TCR9ZjcjXzM3bHZDeX0zcDdo
aU8lcnFQWlgrdHlMWHkkYXhPd1NCKEQoX3c1SlVBfkdrCnpLPG0zI1QqVDY/VUpGMGcpTyE4Tkk9
MUhZWkx6byMySyVraHpCJlRpYDE7ZXlndW1kWnlUa1JiT0tyNnI9YjRocwp6LWBQMjMhcjd8NmRv
MnsmKig3XlE1aCFvVXJMa3NjaVlGaztETDdtTUE4YEtVazd8cEVfJEk5eEQ0NmlGYmdJRXIKenYq
fkp8cU5aalNaPG8wJFl1QFZ7cmM8dW51aUgtOGFVQEJmVTttVkgrNUZ7SikqXkVARjxXelVHaE1V
Q1RiO2VyCnpIKig5cXh9Mnl+P2YmY3U0MkZiVnheVjhnSkhfayhaTUsxbjdpeGlnbDg9VWxoVXJp
XlEmNFE7JGhWMUxGMWBELQp6Vm9CRkFAM2Fyd00/SXJAYyo2dFhXY2V2KUBVPWl1Z3ImS2k+M3dh
XmhZVSZRbmJsSTI4azVEJmFmTU18IW8ydjQKeiN4RCQwfElEZkRzbX1lfHVrJiF5SFc/S3BHTz8k
YikyV2oqUHU/T2JSOSFoVWx4Smo2KFpnSEpndjl2M0RCelVUCnp6JntmQWBgVEpkMSMwYWNHdFRw
WWpyIzcpQHhqPV87VlFRNj5LRmM1PF4jK1MtSjlgbSlDYjBtP0ArcUN0eHtDcAp6VUcqc1BDfUUt
ZlgtVztAJGEzd0E0JVBHQ3A1TH5fT15FTVRPfDw2VV5IQEVvPlhqVzxENlEtaUFLc1JqM1pYbDEK
elQjWTIjPU5nMVFuIy1JTXglYWJQI1BzSzU1IVgtTTMtS29nU3FBZm45eVJlfVlqZytaP2hYSCNE
U2tje3owd3QrCnoyZjVqSy13PGt+amJ1OWd4PT1aKSR4ekg9ZDNCTUVsZCs8UWQ8KipoZnAyaWRA
bWhmeXFhSUo8eDNucjZqZFhYQAp6WER7YyhVOSVrZS07VUtSZFQ9MXJ5VHw7cFpQeUYrKDtYcWJ3
PSRfbl9eaG4wMXRpRkF6alBwKWJwYGd0N3V6blEKeko/e2ptdT5zRGxxQXtHeG1UKykkd0x2K1BF
OyVybTBoYDtFO0hRQ0RtfnRTejlhR2ZOVmFJKVdGRFpWNDhIcTdBCnpoSlUzQmIyO0FTWn1ZPkRN
Ujs/SCpKUHhUX1EzbTVMb2k1TUJ6IXcmYk9NaWlkKU5NJDhJTDteTkU9ZCZecWl+NAp6YE9nTn1i
YD9nKU11RX1QekBxWnclRm9UbGJrZj1vTmtYbWt1Qk95ezszTiVWTGpFRWkycHIhKzhiUzl2PVpj
NXQKelhlRyE0LWN5ZXYxRyokRDJNaEludVZ6LV5eNjhmKkgpckUrWjJNSWF6OGVMK3Z4JGh7SGUm
PGgpR0RaJkhtaWNFCnooakNXRUoxJWY0dXJIeXdMZXohZDQ/SzRaI3BEOUp6Y3lpNm48XlF7eyhl
d1NUK3B6Zm1eQEgrMDFXWDl5YkViTQp6LWJkOFFnSHQycFNTZXxfcVVuK2spO2ZhVlp2PF4qRktt
ZyhTQX0zRy0+TWR8YENCbEwyWig4MzJBMU9Pc2peeSUKekFxOGFybmZWQlluT2tMbTQzQ1lGckxZ
JVI8dk0+aXFvV0dtR2orOSVHbG41cHhEMUZVejcjYStkUFMhX20pMH1fCno/JlE2PEM2VjQhKnA4
fSQrUGhrWXhsUz91dF5ubnFvRnktRllqTlI3ZnVpKERATyZ7WDt+JWxGTjRqVDE9b15nOwp6MkFr
a0ZsdDlEVXZwb0pgPUFNOV4qbU19Qj1WU0h1P2RYJFBzK0ZZX19POFJsWkUhemdJeDEzNj8kY096
VCZUfEMKenEoKCQtYFpeMyomZTYpN0p5XjBaZlNmNF9lb2IhUThTSDAqIT87Xz5WRm1VcnEkVnFI
VV5GcmV5V1hhcHh2NnE8CnpWZjVqdEBafGxWWmE0UDlnQmcqVlhBeU5uNHhhVnMlfUBSaUhyfkI1
eXhEO1ozXm07VG9eM1ZwQ1BUPlNJNEU9ZQp6d1ohaWZKWG9BRURPWEA1SVhJTGw8ckt5VGF+c34r
RE0tc1Y9PkJIaT99Q0tuIzM1dmhHKDRDZHh0VV5jV3BuTkAKenMlJCM4P3V8TVBwcDU4aGwrbClY
KVY7UkQyX1pNNEtMbXBjaXBRQWt0Qj1JNE9mMk0wVnptdVpUKTlBdmg4JUxZCnpgbEBLTUhQOXll
KGVtM05CbkcrUF91fkZBZzZlKitifmAjb2dnN3ZpKmFPIT1LWDU1dG9ScEwoUXxTT2FJa0E/Swp6
b2VkTjN3YmA/PERYVERLViU4IUlpaFo1ZWZuK2NsTlo1RGZTR1hPNjJoJD1xaSg8Q31tTSFGQHVB
YytXSjUwR2AKenVaQ1c0Y0c5dl5WZyZTfWF6NjFJI2QhMGtUWXhVRDF1c1AhNFg3LXVrbT49QXAl
WnEqJmwldE5SZHw3c3BUQHFLCnpnWk5mSVFrVUokPDcqfD4zRUEhKXFyREExcj0wejNQdk99XnJs
eDJEZ0FqLXs0b1RyNGchdChvUDZhdS08N2VJJAp6JUVVZWZednE5dCpLO2c1K2smezJKXm81Mzdl
KFZLTzR4M0ZYUmBLMlgoV2tQXj9WIXxIZHxSY0g8RyVYYUltJjQKekZyX0kmNSllYm9GajE2WlQl
V3Zfdkc1TXptQ0JrO2xkSyVMJSFyb3ItMTZDMVc3bFZJKUY+U1gxOz9OO1Y3dnkwCnpafll9Qihi
NyZlJVZ8MVEjNGtfMXd8K1BkKEhVKkY9JCE1eUM8SEVuWTxZXnxoUyEkeyYoeXFhSm1uOFdVWkxp
KQp6UGdsP2hRNyV2NyYqYSlrTXVxT1A5UShBTG00VmE0MSt1LXstYUM5JldjMDVoZWJ2WmFoaCst
NUV4WH5AR01+Pk0KemUxXzhGeEpZK21GK2B1QjB5P3Rgam83Rj52YTZ9JHtuRW5YU0ZkJllXZ0hx
RT4oKl5qcWloZj1KYjRtdTkkTlVPCnpzJHJHJGAxNnJTSHA4UnBMbXU8MmJEfDVwc1BlVio4X2x1
dmJle1h4cHxDdGhuPWtKKFpoeCsxSlNDRUBeZkB+Sgp6b1NUbCQjdXxUJFV5TTNoS0ludz41fkdr
KUVhPCR3ZitFNyh2UmZYT0B5OUElWUdfVzklZ1VaTW8tNS1CdVVLJnsKekkkYz1FMllLPmVFbytn
KyNLdXU5NFdlUSRTdHoyZiVBQzhqdGskKiVaTlhQWENLQWglSjBSNilgeXp5SUdMY3B5CnpebFBe
OF4hUF49JlRjTSZaRUZmYng3PEpaazk+SGRPeiRlWSZJaHtleHI1RyhPUWM3WStwRDFsPSU0YVdD
Ri0jcgp6ciN1Z1RtQVZOMF89N2d+JT44QEMoakdzeW4mIVB3Y1I3WHcjWTJ2WjNkZWZYbS1NTEc8
Q2ZFdm16NldtIXpwRHsKejU7SmY8PEF7b35Nc2cydGNgb1R5Pih9Sy0xN2Y1aXFtWS07YWxxfDtG
a1chJWRPaTBEWU9YWlJoX0FgVzt1WDRZCnpGX293PSFSQHhxWWJncGBaPF5VXjx9NENPSGQhd2dv
PnpfQitXMFVARilqJCk9WSFAalpPPyhne15nYW5wMiY5TAp6PyYmKkFtSzlfJWtBMiV6JUNZZWtQ
MTgyfDF+VjVTVShkcW1AMmtmdjwqQ2pxa1V0Q3ZYZWdBZGMtY1okb25fd0cKeiozeksmRnR+NGlH
c2t0N2w/b3FRO1lqUlBXVDJUZSRHS35DNkRyZzxFentEIVcrb1Rqb1BwcChPYzdaRXBlSFUrCnpx
cztvdEJoQDItQiE0TCkkK0U8JTZFND5gbU1ZZHMtZXImNmRVIW53I34kTyZ3WVNZdGNASmpMPTlA
OHsyd1d6RAp6Sy05eFJGbCN9UktQIShFRnd8IXJib3A5Iy1oUW5yU0dkZjQkYnI8ZkdGM1U1RU8+
UHI8YTgoREhqO08jSiZhcyMKek5TVzY3O2ZXYGR7VFEjcjdRYnAoPlRCKzRuNi1vTyNyMHRNWVMr
YnImUDdCY0RZPD4mSVVBV1I1RnpaQEV+Q1c5Cno0UU47JSZLPHgmUGIqeFVfXz1CPF4wcmIyRjAq
ITt6Z1pVb1NSPVVZSGRvRTJ6Pm9FYG1QJUg4bWVRSU9NeWJScwp6YjM0Y2xSSHkoWHY3Z1E1Kkkm
RDNxblpKbyk9U21QaEF8WUJeeD0+Jj5CMmg9N0c8NGkwY2JCRT49U3JuXnYmPlMKemE5PD5nbEBX
fTheSGBZS2c5bWlza2xxTWIteT1OR25NclY0VEJORz5XWSV8fmBGciZuaXhhak1lNHY+Zy14fmcw
CnpLY2t9bjdgXnB+bHxKayVua3VjU0ZARWdKdENGfTFYamZ9ckxLKV40P21Zb0Z2RlZLNTR6MW18
Ul9YbGwzOFJRTwp6aD8/XjduTy1NN09KMn42Nnt2YnlGYGYxZVhzKD57Iy1BZyNqZVNpfUI0YUFT
bCNzdCUydWJuO2p1cEZ7WGlJVGgKeiVicTBxV1dxcD8/RVluYGAzQHdHKWtrb2FTYj9ld3VyS25X
Wj1vMFNORCUqN3lfTSpXUUpGP2lwNUxVPXN1WkpSCno/fFI0ZUloJG1lOTA9ViRtPDskYz9hYUgy
b0BAcEFuVStESmpgbFBTVCk8aTNKU35ObW45Q29CQiFLSDhUVEl8RAp6Z3sjVXhodkA1ZlpGZEJh
SVdzQG8zNHM8OWd4aCpCc3Q5N0hMOV9yUDlNckJIMTt0eEFSYXRRUi0oeEwtS0NzcFUKelZLSmNj
ZX48bThmcjBWa1RBXkcxOSRQdHlealY9OHhBP1VVR19RZSQzRGMwNSYrPmF+YUxrTEU4dERacWRI
dkAmCnpLem1EK2x3bkpQdiU1K0szPDlWZzVFd2ZrUVUwMHR6WXdjc3BsPGZuZlNoZS1LSV4pN3t5
VWVtQDZ+UFojM0AweQp6e2s0Qy0yNTFfOVMtZik8QChGTGFiOVV6cnVjK049dzBZQWRLcyoxQGtQ
MntqT347QD17fEJ5YzhNd21ibzNAdyMKem5kNV9iP2dQXyZKOT4yMiluNVR1ZjBmPCklUyQwdWBm
PnJmUnsxUXRhfiRQcVcrdSNPbExHIS0+eSFYeEpiIUFvCnpPV3h+VE5UMkk5KT5eeVBKcTBBLUkj
UmRHVFJ2UkN6KjdBPi10U3M+bjEmanViVUl8MFh8RnkzI0gyflB2ZkgkVwp6bUByU1RheyZKRj1Z
b2xjMDVLMH4kQUNFY2QrYUk/KCZ1bjBofCslcSNxYWBSP2tWYSZyPkloYXA1TWt4PG5vT18Kejtk
YSs/UWRCNTI0fDJRZCElVWR6YzJ7QjAwZ21RWipHI3FQX203UlRjSWlSfWFYQVMxWStQP00jRWx7
SUMpUUY/CnpoQjA3YVJ0WT15aVVhS1JGUCR7dDV8N1dBajIxUWpxTDF4d05VKmU+a2RXTnYpSiFq
YjtwRUB7NE5qX1FzTGx2Tgp6SXAhV14/OzQkb15oNilUO0FPNUR3QHlTQmI+RmpAMG18NWdxMXVB
KDQwQXcja0NtIURGczg0PVdwPCozMlp7OUkKejV4RjM9Z05Ub25GdDhgKW4hQkpoJSpPfXpxTUU3
VHBQPDFZU3QlJVpBfSohQStfM14ydW1XN005c1ZiYlY3QG5qCnpOV09YTW8lJjkyKCpWRmhMd0Fq
S0N6NEc4bD0jbUc8VThrakw8V1JMNFdnQ21qRD1jVVo+ITkrVF98RmVmYSF6Ugp6SCVYc1dvejtX
IXppUEFDNSNsdVMhbENwJSlaMFY3fE1UP1Z0ZHNqWVducS15XjBJVD9xcz9ZfHc9OW89TERiSFYK
el5sNDk+eSNATkloP1RFQFRTYCVKLVJCK1AxYmtNZUFud150MVAwUGxCVHRaRUVnJjhJPEBtbGIw
OXlWX0N6Wn5+CnpfMn1jbyVeSEc9Tlg0KHZ4WlZhXmhgaiY0OVAkKVlkKmRJWD58RjFFMWFyS3Y5
dTtmR3QpOV9NVmUyfnZ4VHlHdQp6UEY7d0pPO0czMDl0KnFJUCgld1piJmpybitsYUV5bmR0MFhe
KTQ4eDNiZWA1MmRPRjNHb04qelBpT2REY0RSOEcKejFfUWZmezgoPj9FQzc+V2haXjZ1VTsya0ZB
U25QS15nVV9xeUpINEgwMDskTllDP3RQRkxGYykwM2xfLTJkWTEyCnpwQDhRQUskeFI7SWNeN280
bHl4ZDRqcH5OeGBTQXMwQi1hajVAPXhkdn56Rno5aWpORz8tOEJmcUdTcip4dj1nXgp6R2M1fGZn
O1pnJG9oJX1IM3QqYjNRQC1zOGFoKz9KX3ZSa2crYXR5UT1jTT4mPTUzdXtNQlZvKDxwYkNMb1g+
R30KemBOaHA9eiMjZ2QxeWxyRGVJPWx1OG4/aHtRIzkteUwhYXNZMUR0QCp4PihEeT9jZzgtOHh1
eGBLI31PUjZNYC1XCnpzZ2VLRU56UHNPYkJwM196SndwTUNwcnBYO3xwSChfM3RoXikhQEtlKlNq
N25xa2pDLWIhOEIlM0p3YkRtRT9ZMgp6SGZWMXhqVGU7eyVFJHZka2R6SX5SKClyWTZYRXR5cn5S
anhAMTtuaUxEUjtKajJXVkpFdGF2JXY/djBBMzRyWCkKelF+VjFWO3MxIURtaUZFRm5YbFdYQyUy
amBsbzJFOVYqUSZAfE1uZmdWfVAjNyp+dW9zMHZuM0EqVlNXb1ZEck87CnpZU3J3JDNpdG5BRCop
YFV7RkczOUhocFglaGR4R3ZleHFeQFlLJUhrbXNkS1ByVFYrTnhrUSNHS3Nod2c5ISN2KQp6WUE+
IUQ3QClQJmIqbX43WCtsdD0/SUBMWXJoJmU3UG9KeTN7PE9DUSM5dTFHPTNDK01RaUd3NlJrUDE4
ST99ZHQKemRObzE3ZFZGcDgtSFV6b14tMGBqeDM4V0JKbzYxSihDai1WQDlDV0NwaSNBPW5ZIUhy
NzFQbXRCSj0paW14WmgrCnpYSStJfCgyJWNVaENtME45fmkwZCgmLTk0IWlkc3M0ZWZ9NDhwJVFN
UCtAJi0+eio7P1ZBUVZKOV9zXmRNUEZgWgp6VytEWFVqTE02NUJ2dlJHQDsyRUJKMl43d1BnYDRz
R0dMY2pVMVJ0ZHs2dG9icW4kVmFITnYofkVycWIkSSgzaGcKenNAe3pMdkEtdTE3KitHdWVlcDct
e2dKTT02WDVgWjMtNnhMZzJDOGwhRVhUbyhpVG17ej5aY0pANSh8cnNrdntpCnpjR2FSJGRpbH5w
e2dHNUpqMk1SQjY+c0NxSE5Lc1lJc3dMR3pLez5UWWBPQj9ea21oKHZYUHYrOG0jPkUyaEheWQp6
aCVOJiFZSVV8bl5lTTl5PnB5R15OQWdmcjk4MVcxXkVGQiViK25RR017SkRuY0A3a0JITW5TanE7
VkRNS2t8RVoKenV9YSlwLVRJaV9NanFyWmVAQEl3Wn5RYnsjSGVCOVpnTW5RVVZpPk8yJVR9S01N
UEtEeW9IO0h0Tm5zT3tXMVA4Cnp3cmxwYDxlNTZ7YGpAeXBCZUNaOWs0b09WbTIhUzYyQUZLaTQw
ZDc1MkZVWWtqTFEpP2ZyNzt9YnA+aDlrP2gqYgp6MUhVUnhya0ItRWJhTjElYGhSRUhkJigxNU4p
a3Y0Vk5KUmNkfV5HcyhzSzduRllXYXc0P3NFMkZ3cXdFY1owc0gKel8yeypDMmcwJWp1LUpgSG1E
PlMxKytLd3F0QmVSc2ZSPHZ+RDM9KUJgbXhYNkVUSzUkVHc4TnV2Tm5USm0yMExxCnoyfWAzd296
aFVqLWEocmBZdiNWKGBGPjhpVjE+Y1JlWVV7aT8qWF5TJH1EPVkzeE00M3lLYiUmR00oM3chKEE3
awp6PXFtcGY9ZlZvb1I/SF5jN0k/KzhQaik/OHNXQGRZQVpCbTR2Qm4pNXsoRHtHNmtKKU4wPCNM
PlZkNUI3RkZQaUgKent1dHxmd1JwYGZycVomfjhXSDtvc0RYfEVDfDRXTDJHQTRiM2BsWERXJFZp
ZDVpSD41MUt7VE9eREdoV3VCcX4mCnpvRHpiQkY8bmM0OUt6RWZiLVZYaFhOWUJFPFJPKkd4Kztu
dWVTZlhUSjlnISNjWHxRVGJMezE5UyVjakotXkteVwp6KWBaYFkyWGF2LUolP2tSWU0jdEQ4dHVi
RlcpblIpaiFLZkJqbkY/Jmltd2JFYTV2bGRlaW9QQ14yTkkrSS1hI3QKejduKEU2WVVLZ0BPM3tv
YTVZRVlSPFRuYkJCOzlHTnBfdW54UGg4S1gwNm5mOW1DWiVWVkw5T0t1fkIyLT0xKkA9CnpTZClE
TlNwTWt5TDEoU3Z2REIxOCY2V2p4QXRCaWZkVkt8eVM/SkFKS2tzOGBLKF91X2xGbGNId2NWVSZT
ZStxagp6R3stTCVQWHdLPGBHQjkkNWU4e0xRKUtubG02KTAjKy1ueG5CKShfbGJBYikqR3UlKzA4
fVV3eHpzNzlVZ2ZjJEIKejtpN0FUN3chQmM1fGwrdUJheFljJEZoV3cpTDZUTWpVS2Q1VDRzPEp5
WER3PSQpc0xfPXlBcVVZcHQoZnNDPikxCnpUaWx+MzB4RVVAQHF3cXM4aFNNT2UpMDUzVUBoPGx4
VU8zKmt0OUdFOz5Rdn4pO0FgTTxVQjRYdFFVWmVQOHJTSgp6NShVZmtacmpUNGRnYkEtZ2hFK2dO
KWdhc3tXZ1o5R2c3IWBKZGdNfkclVXNJcC0wfFZIcHs5fHg7OzB0SypMaEEKej9iXiQpUnU4e0tR
ZnMpSEBUUX1jMThoaVBqTnFHUkludWZeWGQ2NHpYX2pAO3NSNXtBd0xzfHw9RzRzPERgJFNOCnpV
QW88OGhhPUJidChZTmIqKkcwOXRmZFUoJjd8Ym49dlFlOyUycStydVA2Z2dvamo8bVBOUk55MTs7
K1Z0I3NeIwp6Xn5WbWljTz9Cbj1VPFhMWEx8OGxHWWEjfCV+WTJDNHtWQk96dyE7O213SzlqQ0Fg
TUAwazBfZ3Vnfk9rOEwoTlAKejRDTkFtRkY0ZnllOEhpR0k2JDY+KHlHT2g3cndvJkYxKWdwYzFa
e3tOWHRWRSp8NGErQ2c3M295JnNqOTBqViNHCnpOVjdqPkw7SXpoNmcqczY2JV52KlBMbClxJGde
Ri1NNDRJRDktRS1+cmcjY1I7MjlJPERAOEBCIV5gSGIyTjdJaQp6S2NfX2wrQl9sTEAmV2ImSCMm
ezNsKSsxUio0NTxUckNvNmchJnErLWtEbTRlZ1pIKlM7Qmc3eEdSckt4SSl4P1cKek4keGl6RHxv
Nyo/JW44LWpXMVErK196UlYqISV8dk5ma2k/Z0NSSDZmbTZpNV93NnNDb1FPPUJpSH0wZz1yZkRs
CnpCYkV0ZC02JTFPUkBTMTVPKkl2ZyNpdlNDbTtCbnpwPWFxfSszTmQrX1NSYTlgQUVNa2peMktT
dn1XZFUrJGI5awp6I2w0dVkmLWh0czgqKkxeUmlNJHJfOUNIJmdrX3kwSGRVQ1VGdn04Mi00V1JP
QS18fDlKfDQydjdzQTwqWERBSXAKekJUaTE7KCleOCElRnFUZnpDZ3RvZkZfZD8wKXlARTI0JVda
MGc7YF5MZEN4UXtVcHxAWDJgRmtEKmlhPlg5ZjBmCnpyRlQ9O3dyQzY/Wjx4PWIlT2lLRFR4aWEx
dyFjSzUhd0tAY1FQeiNRXjcoKio8NlF3VThkY0pDJDQ2ejhNJnNYNAp6KD1lJFJCPDI5Z0hZe25S
NjR4KFRqYTZCaVV6M3RBPDl1TzJtTSY5PkcqR09zKzgrQ1lLUmZ2PWBzOTVQYTt1TjwKemBmVnV6
Mit6PzJDWkFmRXJeRypTMUZeJXkpbHZeVV8lXiNQUkRFdGhlX1Zealp9czQxcjJDaGZZUTd+WENK
PWBxCnpKZkp4VTQ5SmhmJH1VeHt8TjVGRDYmfW9ob0pnOUR3e183and3dHE9dT5Ka2c2XnBAeiRk
NFNhXkc8ZWo7Zkp7Tgp6OzkpRGdZV0FSRFBBb2QoUkBzPztRRjcpemk5RT1XI25nP25heSlGa3J7
P0AtYE5UM01zNll9fjlSb2tYZzBZS3QKemI2T2lmJW5haD9ycU9ZNkg/VTFHKl5NcnxfcDx9O0wj
R0NVJnIjREk5VmNJVHolaE9oQGM8Vm5RTUdPYzxvMEgpCnpHdnN5cVhgU207dihGZDEmSzF5ZUs1
QilrcCt2WTVwXzs5aG17NVZITShqSntqMFJDbXBvSk9kQlVlS0J5MEZrMQp6SVA9T3kwdktmYWFO
VCZAcSVaS2JtU3c9JXdRcDdBdWFOVlpHWEghRzh8P3xiJHIlRTZmSDV9a2x2eCtPOz9jSlAKejU3
I35OZjAhUXVmcjJOQDZWfGl4PHZxUihaRmwhWTNHfHRodUA5VzNEQik8UCstOEdfSWdXb3t8Szlf
a0sjMnFKCnp1THJfQiphbllCV2F7P1hTeCl8WEV2SHNIRHUwc0Q1bEFgPnpKWihjJkRrRXZkMDdW
MGt9fDNuajdVVDhqPTh8Nwp6V3glNzFodjZQVUo9fnNDa0JrbVpheVk5VzloQ1BSSzMpUX5TSHZ6
TkgoX1RVYnBPbipUe3V6bShJdClqUTY+fDMKend+Ym8oVz0hTDxXSkNmbnBfdXtVSnMoSjNJOX4q
JXdReHxMVl9LR2VZM2UxWDNHTzRJd2R0RkFQKTdJOEErUk0kCnpaWU14QyVRczNDYVE1RmY9IUtD
Z29hfVpgIS0+WFphUi1FMFZORmckZnB3VkBrZ312VmAoJG0rckZyejdXcFZRVAp6ait3TllNPnpE
Kzl+Qn1mIUNOSUZhKFBSeTd5M1U9KT1heWspdXRVY3FfXnFKcUIlYTs5Zm9wJiV5O2V9LTR1SzcK
ej1LS2laKmM2ejI3bjhwUDA+em9oUXVvKUdNfERZTW9hfHFNSVY5YHppZSo5Z3xIUmVPNW8ySj11
ZjN+ak1FeXlxCnpNUmRySWIzTisxMXs2eDUjKnk/dTtTKCU5e1NkQC1hS0h6MTctJmZ5SHErJCFH
WE8jZld0aUJINTQ2OCQwOF82NAp6RXZhaWttIUFKeDA8TFdaVDJpZjEkLT5ZYyZ9SjhhbShkSE5y
PDhXfSRQfEdkbk9SNkZzRlBwMkd4LUJPdmQ+WTYKemNsRjVqMWxyUk89IWJoZ3Y9P1EySUo1X2h6
Y1BpJlVoM0ZPdUslISZKXkhhbihFZD0hSnFvK1dzclJhbS07OCs9Cm84MjVtMjQ7WjF8IW9RUjtg
alFYV3dvRGdQSnReeWcwZT56anNiOSFFWn5YQVQwN0twWDVDOHhHCgpsaXRlcmFsIDAKSGNtVj9k
MDAwMDEKCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9zdmcvY3VzdG9tL3BvaW50ZXItZXZlbnRz
LW9uLXJvdW5kZWQtcmVjdC1leHBlY3RlZC50eHQgYi9MYXlvdXRUZXN0cy9zdmcvY3VzdG9tL3Bv
aW50ZXItZXZlbnRzLW9uLXJvdW5kZWQtcmVjdC1leHBlY3RlZC50eHQKbmV3IGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDAwMDAwMC4uOWE2ZjllNAotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRl
c3RzL3N2Zy9jdXN0b20vcG9pbnRlci1ldmVudHMtb24tcm91bmRlZC1yZWN0LWV4cGVjdGVkLnR4
dApAQCAtMCwwICsxLDYgQEAKK2xheWVyIGF0ICgwLDApIHNpemUgODAweDYwMAorICBSZW5kZXJW
aWV3IGF0ICgwLDApIHNpemUgODAweDYwMAorbGF5ZXIgYXQgKDAsMCkgc2l6ZSA4MDB4NjAwCisg
IFJlbmRlclNWR1Jvb3Qge3N2Z30gYXQgKDMwLDMwKSBzaXplIDQyMHgzMjAKKyAgICBSZW5kZXJT
VkdIaWRkZW5Db250YWluZXIge2RlZnN9IGF0ICgwLDApIHNpemUgMHgwCisgICAgUmVuZGVyU1ZH
UmVjdCB7cmVjdH0gYXQgKDMwLDMwKSBzaXplIDQyMHgzMjAgW3N0cm9rZT17W3R5cGU9U09MSURd
IFtjb2xvcj0jMDA4MDAwXSBbc3Ryb2tlIHdpZHRoPTIwLjAwXSBbbGluZSBqb2luPUJFVkVMXSBb
ZGFzaCBhcnJheT17NTAuMDAsIDE1LjAwfV19XSBbZmlsbD17W3R5cGU9U09MSURdIFtjb2xvcj0j
RkZGRjAwXSBbb3BhY2l0eT0wLjUwXX1dIFt4PTQwLjAwXSBbeT00MC4wMF0gW3dpZHRoPTQwMC4w
MF0gW2hlaWdodD0zMDAuMDBdCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9zdmcvY3VzdG9tL3Bv
aW50ZXItZXZlbnRzLW9uLXJvdW5kZWQtcmVjdC5zdmcgYi9MYXlvdXRUZXN0cy9zdmcvY3VzdG9t
L3BvaW50ZXItZXZlbnRzLW9uLXJvdW5kZWQtcmVjdC5zdmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDAwMDAwMC4uNjY1ZjgxOAotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL3N2
Zy9jdXN0b20vcG9pbnRlci1ldmVudHMtb24tcm91bmRlZC1yZWN0LnN2ZwpAQCAtMCwwICsxLDIx
IEBACis8c3ZnIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+Cis8ZGVmcz4KKwor
PHN0eWxlIHR5cGU9InRleHQvY3NzIj48IVtDREFUQVsKK3JlY3QgeworCWZpbGw6IHllbGxvdzsK
KwlmaWxsLW9wYWNpdHk6IDAuNTsKKwlzdHJva2U6IGdyZWVuOworCXN0cm9rZS13aWR0aDogMjBw
eDsKKwlzdHJva2UtbGluZWpvaW46IGJldmVsOworCXN0cm9rZS1kYXNoYXJyYXk6IDUwIDE1Owor
fQorcmVjdDpob3ZlciB7CisJc3Ryb2tlOiByZWQ7Cit9IAorXV0+PC9zdHlsZT4KKzwvZGVmcz4K
KworPHJlY3QgeD0iNDAiIHk9IjQwIiByeD0iMzAiIHJ5PSIzMCIgd2lkdGg9IjQwMCIgaGVpZ2h0
PSIzMDAiIHBvaW50ZXItZXZlbnRzPSJ2aXNpYmxlU3Ryb2tlIiAvPgorCis8L3N2Zz4KZGlmZiAt
LWdpdCBhL0xheW91dFRlc3RzL3N2Zy9jdXN0b20vcG9pbnRlci1ldmVudHMtd2l0aC1saW5lY2Fw
cy1hbmQtbWl0ZXJsaW1pdHMtZXhwZWN0ZWQucG5nIGIvTGF5b3V0VGVzdHMvc3ZnL2N1c3RvbS9w
b2ludGVyLWV2ZW50cy13aXRoLWxpbmVjYXBzLWFuZC1taXRlcmxpbWl0cy1leHBlY3RlZC5wbmcK
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMC4uMjQ2MWNiNWI3NDBkYTJlOGI0ZWE3MDI5NDk1YWRjZWUwNDFiNmEyNApHSVQg
YmluYXJ5IHBhdGNoCmxpdGVyYWwgMTkwMjgKemNtZUh2Y3tKN1FfZGltVUxNZnlTaml3OUAkZEdk
KWdnOWg0Vzx0cTRRPkheSWx5RWFmc0FTNEsmcUhPMzQ0RkJHCnpCSi1TYzQyTl80cDclbEFefHwt
K1RpLXVeWXlHfSFiPVNKPGNIWUImP2BKPnoqP1lmVWR3MmJtNmxEJF9VXitsVAp6TFVLczw9OGZB
VkJ6eEZNTlhSck9fa2s7c1BMRktCZT5mZWFHI3JmWC0hKEZ+Y2VFdEFXUElufFUxOHlpTFJZUnsK
ekdVQzVgbk98NT9Tb3JFaVZMXmU1Y2tjLXEzeSYzRmJwYUEpTyhpOWpXRjtscGw8Y2hVbk9mVz5B
JGRVaE03N3pSCno/KXApSnBqQzNxWC1YfH4+ZykkV3IpNCEkP258YGA7dHZ+fEE0SWR9TzlkSFVt
aEgzPm9TSHFLN3dgTFg9b3tDNwp6KVhaQ280Tm4lQWQxRjRnQ3Q2WSoxMVRKYVp5OShOOG0oXlMk
NF4hXmNgT2JIJkFENFU0VSF6UFlyVFQ/Qj4jRCsKel9WJkJPcldTNHpYNndFcjBxXiEtemo5NnVK
Knt8bC0qcz5NUm9BZ0A3YUF7Wl8wTyhyJmVfZ3NrKiljVzZwISluCno/PXExK1QkeXRXd2cpdGlr
b2slWXpVOGNTcGQxfFR7eHV5YXRvWlEzJDI9UERZZ0wtMy1RV1R8Tyg9eXptQnc+egp6YVBPTn1M
JEoyRCNiMCtsNTl3bTJGdHhmQFElNzVkMnVkalZJLTZxbl9POz4/Yng+SX0jelFlQEs+WDlHUGdL
WCMKelZBNiN6VnpCLWx1JVNDWS1qN3kyeT5ebU8wSkNDbnRiaSRiTWN+cz5lT2QrZmNkRThNeW9W
TWQoKCZyUTxRfn1zCnpVOUM2MTw3dXlUNlZZfGNZTmdtYHVseEJmeHtNKWJiPiR4cTFMO2YjK1dZ
NkVkZFZ7UXNoSk5sOWdJQTVRO0FsSgp6ezd5dXM2OHh6Yyk1Ujs8Y0NhJWtgJVZQQVVVRUVaUl5u
aUlCa1FgV1ZCZlVAPEBmeiExZGh8VEEoREJORlcwWFYKenhINyZWTWpveTw9d3g9UUZOZFQ+TUhj
YDFFP1BiRXMpJmlEdEYzTz5VT34/LXdCMEVmREhFM1ooNHtuVG5oNz9JCno0OEoofk5GY0R2SzY3
bj5NP2RzeUlIJio3PlM0OVROJV9aKVN7SD18Vj1ZamsqTUBrVGRHazgkKUJLKGJzWWl2SQp6O0xV
RVgmMy01aTkjdmFLPXdUUHVPJlk2PWhCejt0Y1h+RTwkfWhae2NqMEJYZDx4WiZmbl9hYWJtJnZn
Uj9FTHwKelhGQ2lHQjFeRyt4LWpocld6d2pGU21sdThVdDNsRW1Ra08kaklUciZRQ3M1eihZNU9n
S2JOMTQjZDQ3R1Mkd2ExCnpSY3h0Wko0Z0hXWm9ITCFJdkdSN0h+MEJgRUF1I3l0THgrJVZremAj
dypfTF5OPVoqVGBNOXUqYjRJajxnKjZKXwp6X1BHIW5UcyU+NGM+QWpvVEpyWW91NSg+Pzw+Xy0/
c1RvYzxiLSF3M3dtU0olU1lvKjxRU05ScUVAUjx2Q08tNF8Kej5UMnJrOXVHeVBQT29zQmIhOTFE
c2A5fmVLTjFvKTY0QEtxUlVlU2ZeZG8kQWt1R2ZXYVQ1N0t3aHZWenJRU2FKCno0IWd4O1NaYjVe
NlJ1OWIkMTlSckZaYmY1YC12fmFjI1pEU3h0eChgSWp0YipaT2dlTkUkVmVFUEF8Zmt5cihWJgp6
OSNtWSl8TWN4NkJSWTxGYG5icF5efD9YNEE9MHIhYn0ybTlRa3NnITJBbjYkMkF8WmxjQzN7ek1o
YENjYnxST3sKelR4dDRCUC1pSmYkO2NeYisyRWNlOzFCeX5CYVJ5IWxIZExiVUh8VW9ObV9ObjMl
YX1jbkFiPTBnS1haKStQKnVOCnpOY1o/SUBBXmdOeWBLQGpGRHs/PF9kQkZ5YClLRU97VVlCLSRN
MVBpK1ZhJTRQO2w9YytyWFkzTygra1pIeX1DZwp6LXolfX01K2w1bjs8dWBsdzJaZVpOaUgkd0o9
dH1NLX0zPkBGNkg/bkpWfWxEJjhRQTxFZXx8dEsoZkhIXjl5ZGsKelByOWVocHE+OG89SzNLfmxf
VyNnYzdBelE4aiRTXmBrMklYZ0o+WSl3fTMlaGNZY3hsZ0YoRSFkMSRCbSg2VXxECnpJdFhNJVFE
bW9KUzFZYSZvNFkhNXVlVXJXZFVtJFlAQC1YPGZZYE1+aHNiTUpxREV0KjV6bDRsK2dqSWVpITd9
Qgp6SVpUZ2RVOW8+TkJkbW5OQnJhfXtpa3pSe2h6OzwoPH0pYCZ6fXp9PjRLayNkXiFMaUx3T1hT
bDhvU0F3dj1nUy0KelViRXRyPmd3RkF2V3M8KlgqfThkQnwoYTFjM2YjRV48YHlaTVNFMnI7KH1p
aXUzKkY1LVpTREtLN09BfSRGclFzCnokeCNpfllmdypLYklIPkpaXmEjcnBTQ0VUVXd6X05eeXdT
Y29lcCtnM19tJkhGcElTfW9xYmk1SnxSKikpZzAlQgp6VFRHSWJIXkMmdlRadzdPJWl8eUJpa0x0
fkZ9VXlia3M9NkR6SjR9TU1eamUycHkyN2lSSm4lcj83V1ZhdUFUekIKenpQTkNoM3dBOEEybUk/
XmdIT2E9b34yJkw7RCU/TDV5JnliZW48ZF4qVDtROWI1NzsqYkdpQHQrKUl9aGx3OHFXCnpRP0U1
ZWcyaTxSe0xIVjlrRDgwJWZ8czRYI2ZvTFQpbFkqLUp8OWFIYXpPcTF1eEpLKChZVXJqNWI0alFJ
cU82cgp6NiNpY0V1YTQwMjw7JSplO3JkI047ZSpBbXNiUCtWVUc1V3o7fjlqSXFDPn54VlVuYHBY
X3IrfF4mallAcHVLY0kKemZEIWtzTFVheG1WeElucCVZNDRUSSlOQUA8UTh6QiFsYHNlJXplZnJN
KEdjSiE/aExJNnMpXjFDdSUjc2dPcTs1Cno9UVN8TCRIWkQ8SHhnSXNldXY/eUoyUzNMS147fVJp
ZSpsTnhsPWhlM183RVYpen5BVSh9Nm9PP252VXRjVig/Zgp6WDFWanA5Z1IrTE9rek0xcTF8P3hg
I0F3flBNaDZZQURecmVlRjVfTDc5WTRaPiZJdT5NWkQ+fSNifndvXnkrQDIKelBHbzBGfDJyZyNP
Skg+RTNRbmFmJDRMO00lJWRmd0tTTzl3UXh0QFpraV5yMUp7SSgjJHd6eXAoO1RWcylIRj5KCnpX
aFA1N1Zaa1IpWF5LVj4rVWU3eEdNckc4PmcqPlZDdSpsM0EzMEUwbGxCNUxNOFc0JFhFMChfe2tn
UTxWYEhpYgp6YWpQcX57Pjc/ekd5eVpMI2hwVEVlPnUmTE5GIWlXcUVqTERsdkxoP2JGKzxRTDxf
bUtQcSFgPzBmJHlkPX41UnAKej41T2Y5OUh7VUg3SUBjbV5nWkU5K3B9OHcrYk9VPmgxcyp2X3BZ
MiVhd3E5MkRoVEhGdSsyKFZQYHJLZCZXVzBNCnpBM3tqfDQzOHBlWTRsMXVhLXpCTD1XQFBQN2gm
NCtTTyM8fHk9PHZlUz5mcX1nKXhIcExOI1I+ZSE0Sj0meE0kbAp6KnhOO0EpZjNHRnVXUFZlX35Z
VTAxRCFMeXYxTXNQWUxJXlhSJGh+UD5OPjJgMTYmYnc2Jj8pM3lqZ1RLK05SI1IKent2fW9GVCZT
VG9obHtnRUw+RHFjMT92aXJ5dVNpb3h2JWx2VjVaayZqa097emBnUz8leyM0NiF7UEA9YVIwXzxz
CnpmWGg3fHNDYkFqNSUmM05jPX02cD8yM2t8UFMxO3Y9TTF+NygtUng1aDEhOylYREg1bldyPFcr
WTtIPWRLSihudgp6KVBwbm4wcFcmLTZHa0lhU1A0STc5antGPDB+VjdebW44MUZLR2oqRiRVTXw/
QjRERjNqMExCe1JqXzsmLSY0fFkKelJXQkpmdFRlYjU9e25RPUxSKk5YRlhUK1EmPUo7dENkVm9z
azcxTlBWVVZ4UW4kVD5gUWZoST49flQ0S2hebSV3CnpkRnlLV3FxdDdUN3w2cTxzWj0pKEUzTjxo
QCt8YG50cjxVU1d8IT5ARW1pbXRlKWoheSt3Zzc9WDkzfSFTbVRwNAp6JTZRZ3xIUG18c0BkdX55
bGQmamxAYUl+TlApM2NAZl82OTM+bjVOTz5HZ3lCMH1XZUFjJHA5UzZERjtfeD0/LV4KekJPNSti
MiNMdXlPWFR8aXtiM0BRN3JsVHVqYH1zaVpmZmd6KEgoO2h7TG5YZiU/ZntfPShOZENDdlprUUVC
VlBmCnpEMXVmUGlvSjxCcVcjRTwpbVJDcDMwNTlGS3hqbk1oJTJnYiZzb0srX15TVTU1SFJFKzx8
N09AYUZtR3hvZ1BXSAp6YSNjK2kyUnxOTmBgKTJxTXJYZmghTGU0bjZJaGJBKT85OGl6SSVtdTso
NSNkNjR6VFJiYmg5QnJ0X0hxR3ZvcC0KenY3ViZ3VmQjTk53YW1KNWZ4S0RxPThEPW5rV3QhM2Im
M2FoWWpoM2VyPXMlPGVPP1RrUllnXkpULUlIa3RUI0JBCnpySmd6PVM3LTFPQm17IzRkaz9hJFds
cT9OZXJiKTl4MHJ9KnF3ailqa1NpUU1UTDNNKylnX1Q8X1JqRWZkYTJPKAp6ZTNtKTA8anZGPnFU
TV98RjJmZnRNR0ROYCkmRjxoWFA5Y2tLbCFZNWNXP305cGMmZF5DYXhsWSY4PE1UdkdPcVQKejMh
cEYhV2RTO056ME5PJGx1Y3xiYTtTalpIPl58QygpUH5EZkA8Qk8+YE9+JkdLWnxiaTdwOXBmTEhl
KTxAY1A8CnpOdlBTQUpIJU5ZRkg8RT1FZHdMTndGUjF8clElZk52dHp8ZEBXTnw3SiRrY0ZxMXVq
cCUtbStTKEMpeD5OJSEyOwp6WjYzJn1aZ1Z4RTRrX1I8Sm1WOWBOe1hNVCV+TXkkQyFneTwjRWR0
aUVILTRJJS19KUtRT0FeNXJQNCgtdUBkNlYKenheKl96RVhYdkY0QUNxV3RzZGFLcTRCQXRjMk1F
MzI0eTUxSFI7bVhsbU4/PG5pQHNWR19SVkVySEMxNHN5aS1OCnpxOyMwNDxoNmQwZ3lRWnBXYU0j
NjgoY0AqI0pJaFRENih8RVB2VihRS3J6fHcyIX1FOGExeiZEQTJSSChJK2lWXgp6QWlDX3RXJkg5
SDxXM1MkOGtBOVp3ZytZWj1BS0FWSVlXZX5TVThCM1pHRCZSKW91K3Y0fUc1VVQqMGxXeGMrSSkK
ej5sPig9SzJQPXc4ODhHMSg8MUJLKHBidkl2S2xVajNNRHZkIyF8NmZAdFAyaD5IVENMeEZLbCox
JFE/MiU0MHpuCnooaWg0ZUk2bG5sb2orWFNkO1BxZiRSeT1CZzFOUmxkbU4jaz9mN2VVWD4zdm1J
ZHlqV2x6Yy1USGRCYHF5eDVXZwp6SlAkYl9AfT5EZ3ZARlBjbihSSDJuJFRmenBsZ1k+QF5GYCNM
SldURHt7YCFkJjE9bEZgcl9obVJnfStDeiN7LXcKejw4cWthNloxKW5ae25BSCFeR3ppbnlHV14k
X2FKTT0yej48Rl5PTC1sUXs2bDwlJXQkUyhpPWxxYnsyN05aKUN0CnpUWUFvREx6WWtqaEV4LXRJ
eyRwKnM9bWpSb3liLURPc2dURVleaG1yQjx6MGZBNGtNPXdQYlkwek83I0RiayN1Iwp6UmBoP0J6
d3x2dEpLWWsjUGFmMXFaPU0wQTQ7Yk9rRUBWOWhpU0cpdCREfEdaQyM7Xil5aDx4OCFOezVubW1g
I0QKelRQQkM5SWFnOE9EMSRYd1lnIXNPO3tRWDlyJVB9andmcXF2QXM5JVkpNW1gPUpuPVBOVXFf
QT16YUZRVDtrSTcqCnp0TUpHWF5Pe358QDhKYjkrflJ8OV5gPVAjY2t9fXtYMmN7eSVzI0ZvWmxx
VUJLIXBLe1U7N0lXJjJoWilZT2ErbQp6OTE+cHsofU4rZ1I+KlRgVXV7ZWJldE96RkAkZyNVRWI3
MXs7KXwkaEF0VX5IUT9ZUzsqLXwxRlR7eVRsXn0jdWYKekA5azBHUjk9M3h7R1I/ckZRe147Q2Zk
MFpaO001WHZDd3c2WDQjc2JzYUVrREtCYVI0ZVMjLWNQPWcwfG5iR2xeCnoxV3UoJlAoI1RJMSZa
M2Q4Vkx8Tzd7VUctdmtfTUlmMWlIYWI3Zj1OTy1uMzBCNVg5ZylvJT4oLWJmfWV7PyM1IQp6KURo
a281O3VHZV9VUTcqS3lCcmtldUUqWlJ8fkprV3M0LTwhUz4pOy1gWDY8YjNRKTdrKldebD9oKktV
MzZoJnIKeio/eCRQX2lmLVJ2JmxuezRnRGNDSiNDQGRmYk0rRFFzNG1sTDlgUXlUd0JIR3RyRE97
Pzt6PEMybiliQSY8ejdQCnpzOCY2QCEqOzR3e3V2TjJPaT5pd3UmcWJIQD0xWHc+QG4xU3cqOGk4
V2lBeVhKT1ImYXV0QWhVNnRAb3FpLVckRgp6b1NUQjdPS3JSY0IoSWo3SkBJdGc4cWhLLWZlTT1+
S21Meld8TC1nWFFlJmI/ajgkanVOTj1RKzNnZ1o7SzcrRG0Kems3VWxWaExvcmVCZlhRZXM+Qmor
Yjh7PllmVDlTJTI1YkFvPHJLNGB7Q25TeU84PDZ+SH1Cd0JRc2FkPiF8R3A/CnozRSpiMlh5fVhJ
JkgjXnM8aUBZWTNwJUAwZDxaaSlyJnFZTTt9JT95VHR6WHxKSHY7TER0UzhFe243UWk8U0laXwp6
UmFSVlc+ISljNmA7ciV0Pyp3PEYkNj1fcGBGYikhSGM/TWxwcSUtSWhPcFZRLWpoNEJEZzY7fCFZ
bHNEMEZaPnwKem4qQTl3enNTR2NNN3t8cHtSdlYpK1hOQzM9eGpvaCMqJWtLZnFLVjMkIW9ZPDhj
Mj80aSE5QGN0fmZ1aURsSTlnCnphQX5LX3lTbjNAdzJUI1M+cGdXS15xVj85YmV0Q1RYTD84Zkh3
X3VhRWxLPitxVE49Rk1SRllPUyhOemEjcUhidQp6ZkYmaEgjSXVTWDFeQD83TVh1UDJsfkpQeGB1
Y0NmZGNzQT8lNHBhcU9zRXFZdGFWdSZERSlxJT5HYVBkQ2N+eyQKem58cjJaNEpkaFN6NU5HZjB2
JHtKJVFraFRUUF5qTnh5VVh4QDU9K01heUlgWUB7QmxjUmM0fTxqfjhwX29MWSFoCnowfkxfWT5p
c0UmMWc0I0pteW1mTVZrQERsM0lFZ3Uod1pwREhMP0VsZiNGbCRle3RMNEtDUHhfcWRASDQoKHR8
dAp6NWZtMjZwJHFmPVlTSV50MSRGakNPQUJrYCg1eCp5U213SWtwOT9hcWRNWDJTJTtCek5LMjZN
VyZkIyY+JFpxX3oKekFzPTFtclVCRHpLYEQ/QzNAWX5mSkNnS05fa3d5SUQhPGJgPjs9KispOG55
R1E+S2dQIyQwIWt3VTZAbVhjYGslCnpPfiVAV3s7Sk5zUVZ7fD89UU9qWiVaMHwxak8lMWdSJG1D
UmtZPUhLMUo/V2glNWAqMnZGajk+NyYwbXMrTCppLQp6WkpaNTd3RURlfmckayslazdWJGFFYDNM
LTRBN3cyTEItZzlwbyU2Xml5Nk08VkN7IShfUC01PytlQWpuWjBVOWQKekYxYjN8RGZjRXBBZ3Rz
N0ZfR2k9NyFnQSVkOUM8YnJwUHFwPChWYiQwdSVabDBVYEZLRXdNUD5jZyVOZ0lxelJ6CnpFRylY
Jl9haWchJShsLWUkeUFjdXUyclVvSGUjSEVSX0xyQkk7RnRyaFFlJWR3LSZOcCh6RFdve3tFMCk+
RHFDbgp6OE9YKHo1Wj9nfHBManh9Y1lwTEQrcm9OYSNeOG5zdi18QSpHS0czVDllOG12Kno3Zn5B
MCl8I2lvN3VMQXdGRTkKens8WiNGdmRZaFkjSnpJamNuciQ3IXs3LUNDZXNyQFQqT2hZdl9aQEc+
Vz1DeDd+TlNHQHh0PSNuOS1QNVFBZjRiCnpwazFSUU9aVTk7WkohakJEPU8zQj5yWVU/LUlvaUQp
PWIoQlJ2MXJJSmxSaGhWRjFpUkY0V1p0YmojRz10NjEpSwp6RE95d0hhe2UhKW5XVD9Ja0grcUdC
VHAkJF85dHE4e2QtQ0RUPGVNT2Z0JCRrO0BoWHQxMWM5UGEkayRQdWVDWVkKempEOD5SRWAxM0Zr
ZmpVWDU3Zm1abWoqI1VvKndsantyKmNrVDsoOVNCcn5YK087O0dAYGI1WW5aXmVQVSNaK1J8Cnoz
PFAoeGxsakRvdGJhR0ZxR2hkcENOTllsbGUhNWwyO2A5fmwkfWp3KEdEUG9JJCl6eE9mQnRzKGd0
LTlRRy0/cQp6R29vbDNDdm4mTmZ7aWZJU28qKlYyX1JaSTQ2Vn05I0s9djNSS2t+Q0coSGNFVWBg
aDZ3a29TdGx6a2dOdDZeSl4KenZodH5EJk1tam83N081Q0dNTiFHZThAYCRWQThmfktIaHtFR2NQ
VS1LazBjd2YldktgVHQzN3lxaUxzaTN2MnxRCnpvMz4jNThZcWUjZWtAVyZ2I0stRjlRUGt7ZCtt
eVVVN3xaUFNuIy1oS1coPVVuYkMzaEkpeVE3eGs/RTEmUW8kaAp6RTZld2JUfXtxNyhvVSRAckUy
RTZsRko8cmQ5dylsSzMyR25Mfk1YaW1AWVYkMjklXyVLYlIkWW4xQ3NneGNSJEQKemp1ZmM0JkRG
YjM0Q2UoLSYzPjJaOElwZ0AlOE1HT0pgYn43KEIzKW5KZF83N2RHLTxUR25tbmchSVJUXnZuMih9
Cno0KCE0NzFCUGI1JnBPKlloMVVRREV6THtab196ZnNmLUF6d1lhbipkNSFNblc5QjJOd2M4JHhP
TD0zaFN7I3lkegp6OEdDTkp7VjFLQWI2WT1wSDxlam5jbDVrM2BLQlB5cGdQVG8wbSthODxMMyhK
VmQyaiEmekB6T0UzKG5zc1kyZD4KejUydCVwZEI0bEl2Y0BYZT5ENEVsK0pxOFlBS359IyhnWE1S
eXdoOSVVZnFPOVBPR0x2bDtDbXJqQjZMbT0jI2BDCnpmNz1YTDJsbCFZa3NVIUttWCs4U1dXTEFV
UUVyJmI+JWpUbEotWiN4cGM/IVFqXnFkO3o2QHwlc2kmVmx1eCZxQAp6QztWRmdzSHRLPnN7NHQx
Rj1jQXhZVUMhJGx4NnBpNH1jb0l3amhjPHdhP0JIIU9fcFVRe2hCVkxNZzN4UjRhI3sKenI+cFpx
PGZrM2tzeipVT09DOGs3KDlyOHc8Pl52KVBSIW1oR2w7WVhHdWZidVBMMG1pRGkxU0gkKFF2NXVr
dVRnCnorMW1mTDstVCtXQzc1bmtPQXxSWGgoJFordnZUfWJaYjBSfFJTS31tXzwxRn5GZEstK1d8
UT0jRz5jVj5AWSZhOAp6aX1SY256fXJjQCsmT0g5SjZ9KX5BT2w1RGp0O0NDPz1TI0V0NGVFYCVX
fik4MXspQW5MY1FNVG03cTNAJENmMmIKenNob3VCMzRpKS1UKSg9PXd3dDU2a0hKRGpjMlJyWnA1
eTJzPVMkLUgmZzd0YF95d3s3Vjc0R0trMCtmc0E8JHpACnpkRjttLUdrPjNVPkdabmVNWnxRKz8r
O0VucWUlKzFtKy1maCZaMnx5JlYrPyUlIyF0aEI0R2F4PG9IdVJmQmx6ZQp6cio5ckgkK3UoeGFH
PFo+TG5PXy1EYHk0PTZ8SHEjJkgkUnYqNWBzTillOFpgRz50WjVTaSVHRDc/JV9KM1VWZTkKeiVC
bHxFWjkwIXleT3VBWGNxJWtWT2VnfmkwMEV3KVhKczE5aUdpUXJZWVQ+I1dIQ3dAVDVnZ0VYQURS
dFlTcSs8Cno1dUEteXt7WldkNWkoQkJLaE9RNWRxfV97KGM8OFYoTUApYWk+Zk5rMzdNWCUrN3Vi
Zll2IXYoUjlndU5sMGNVVgp6dkc0KihwbX13QyphfSY2U0wlQFJiMFYyQmQ0TGY8PjlTY09GKypg
ZD5fTUdAJnJ2bldWSzFNQmMxTk5iP1NTZlQKeiZrNkEoRjZoQVAzYTlkViQkZz8+M3o4NFNRZjt1
a2xRYjJ9Ujc0ZCl7WEpwRHU/Tn5RUm9kPD9tUHtne25EYnBpCnpRWHxuZWoofUtqSmJDdk48UFFP
NDVWO0pYNDBCRjlQMmhHWikoIXc8eUtUc20mNSFCZU42bCZ2Oy0zYGdYcm9IUAp6QWR9KUxmcHUq
fEwhdFlaXzV4Yl4od1YyTzQ7JTZoQl5zT3EtfklkUiExP0RRLWQ0PHFuTkx9RlQ+XipaNEorVVoK
elZDbVVWI1F7Jks5NCZ9P2JAKzJ4PX03TldtQ1BlUjt2fHFoZDlfe3dPOFUldV5YRHZfenFhVDww
S21Bd3sxcFVACnoxQSFCO0F+bTVNVl5kKl5EZiV8fiZDVzZ7R1dqYHBKYFN1YyZpRk9SeypaMSY3
YzIma2l6R2lMe0BBPl9KRCtjIQp6UklmPEBmRnxEYCoocms5X35pZzxrKmszcSlePz0lMDA3WDNW
N1omV1cmZj5nKnQoaG9IWHZEJT4odGlncHtzd0MKemBnPykofEZAKzhYWlgtJWJZZkRmUT9BPzJH
SDsyND1KIV41aDN5NGdXeyVJanNEQTUpSmJ+djR7NSMlcDQ3dnF+CnpUallmZEQqJVg2Tj5xQSZJ
fVQrb0N5PVRzbWZiejdJRVU9OHZ1dTNGPkEmcnVvXlVCQmR3e09aelhMNzA9R2dvSAp6aXFVPntl
PXs8QDxNaF9oJispZERmXnlVKkt9dkw1dVo4Xn1tZnhmUGBkJWdESFBjeyNibX5hfkRhKmdYQUAt
SnIKeiE4Jjk+I3swMENxUW4xJG1GekdAYVRBITcjTStWXkFONEAzY2p0RlFvI0E4U2NTLXpzcUZ3
UGlrKW1RazFPNUhfCnoqUzVwbikqMUJJZV5XcWU0MD1EZyNpYiVrJStsTFlafG1lT1ArPGY7dDIl
I3xtYnd0ZnZ3STFHPFN4dWAhez95Rgp6aTNyb3pWc1JfVHkwXilZWlhhLUZQezlPd1UjNGdxRGQ0
M01kMGFKcjgxT3s5KlZ1Yl8rI0xXbTdDPVZmRmYjfj4Keil2TX1tKF9Hc1dAME9hbT1sSlVZPE8p
YlIze2clRjZBYS1sTVdYNmBHaEJBSE96Q2Q5Knorb2ZjS2twVz5ONTUzCno5aFV6dyNYVTY8OWIy
WHthXzdsSCg4cyFDIXRPdVprVWNPY0lCbUxsRX5tfSswbGJrO3lrJWVTUDA7SD1Gak4jcQp6ZkY/
d0N5Kyh4WU8jcEkzMmQpdlV2PnNUVTtfaUc3ejRxcHNtKmcwQWUySih0bnRSJHFZVDxMYnNMOStG
JjhUPDQKelYzfnZESDZvdFZoQk49IzZ+dW8oMm1HXmJKIWpEckt6RlQzZUw0MFIqazF3NipUVXtt
QU1fd0tES09yRTNMfiQyCnpHOHd8YCZFRGNOSERVODtobFB1U1E3RmU4I1k+dnRCbTUmfDNWcjlm
X1c1PHU+JCVRWGFMKVA2ZlQoUj93cyhqXgp6QSZyYEMlZlRpbzNtK0AoQVJBPG5fQkV+YUdffWkp
NWE8ZzVYKzZYck57KCMmTnBRRVN7Sit0MmpCeDJNNUtUPT0Kej02I0BRY30/cUlVK21MNEo4UlMz
ZHdBUHRsUnojYDlfRkJlSHAxYms/fT9YSEdhY0haQDZKMnhUQkxETG9gTV58CnpzSUooYTd7REop
YSlKKEs1PDY3dlVfTWRzVTBEPGhkTylie25uT2hnaCYkJkZvV0JjVXo3VlFIdlAmYkBCb0o3SAp6
JWFiaUk7TSsxe3RQPFdRUm5MRkJDMztsQ3YrXit8YztlS0grKFNVenQhSV47Yk5RYDlsU0FGSGA7
WEFEPmdhMUMKej8zPSRUOTd1REFjNU9jPzUqflRxYCF3WCUyMXF1LXI7Nmd6O3glKkB7PDBhcm9C
eFohUGU0S0BGdzNKVGI5MTB1CnpjTG9fQ2J6ZTFJaCg0fnBuJnM1fjlyNzExOUdVbmR3THcqQnFW
e2Ffe1l9bWpGWFhNP2JMO0NTMlUqVD4wez5UeAp6RXl0U3pUR25SbngqaWMweVZCZF9sOXM+UW8o
MCV6K15uaWMldXRkQ3N6X3tCKDs3SlVKJGY2VSFRRllxP2NnfnAKelcte153V3N1bGo9b1hsT2s0
KTJmZU1UXlEqYSNUPDF7emZ9Kl5acCliYnZlO2p2YFpWQlIzeCNQJVFRc2J9N2ErCnpjSTQoNGc+
fi1nUTtFakBYVUNaVzVzeClVQWBDRFJ2JUNQWV5hRmp8V0RnPU07cjY0P1N6SyRYJjs8WmZSaih7
Kwp6d3VRPU1LO2NnZUYpKn4lRUo9cWdlNDc1YCV8NG9iUXJ8WGs+NEdwSEQ5JFBnJDJMaEBWbmV4
IWhUR3JnVjIhPGEKelE8K0NvZkJNcCN3IXtjbmZ9fmcwS3ttcGtZPz90JVBgIUc+Q0NOP3syKTJT
b2ZoZUEycygqTWM7bUhfMVEqWT5QCnokUVBOKHlsRFY7aWx7eCZ6emZiQXw2fFg8ZEZyPG8oRHQ/
O1czKFhnTHZ4bHBrQ2I1K2RUU2s+PWlAOUUmVjhaQAp6aGRFRkx2bGd4Sj4+UGkzQF9vblFSdlFF
LW0mR24/WUEzJHNlbCRtTXVxPjdKTUZHZnFufntDUjgkUCRrbXFIZCMKemlxMyRYVilPRT82OEt5
KnNiOFMoQV5jSkZlWTRjIz1BdF97WTQ2THQ9XntOX1pab2ojRWJqNV9RZkMwdVpnTU80CnpSMH49
cmI0YX1lYlIjLWc4QUJXQlgoRmBySEp0O09iKl5VWWxzcWxvYUJDIWQ9KDtrZnBqfGtHYFJAS0Z5
flBMYQp6bFBkRmglb35tK3dzI0tzQ0g4eVozMCpNfWRRXz9ga25lNDNgLUg0YWh0d356WkpAdE1U
ak1yOUd3Q2p2NTVRTWwKeitFcGI1TEFfWU4jOHk0ZlJaJX1JUyRjSndffUUlNUFuUn0+Yl54NzJC
TClBJD03OSRRYlJSfUgoeTQ8VTI3QWJDCno7Nztfc14leD17RSQhMVpCbVIrTzFUT2g2M0Qram1O
Zlhjam9yOzx+YFZEeiU9PVYza3gqfD97MGZ4cXtmPX1HPQp6MWhRekRMU2JQSjJrYF8pfENORENB
fWtoZy1ZIXJCUiZrKDlCQWc1WXYwMT44WVFYMj0mX2d5cmIzSSVNKFQ5THcKenJURWM4K28+OUZi
VkBCVndZfDA1dUY7N0Z3PFB5JipLPjRpbkh4fXpLdFVMVnd7YX5LYUMmVzYmSCVfKXFeV2sjCnpP
KkZ4I3BSdmtDZHRlPWk5T2QlWXpIdXIxZSNyUyRrSiVoNT0xTWUlSG1EYE1sM21+OUJ8UUBLezNg
SENpfVF5Qwp6WTkhNmhBYjxNejVtTyhkRyZ0cXtJY21eZXpFTDliR05LelJpWXt3SClgQDlvP0kp
VmpLMmxBZkNzZF9IZTAmXjAKemwtNylsWGA8LXMtKj5rfENCdz58KUckRlVPfkA7fTJ2QSRIcnln
KF5wZ0pjWGByWT1GXlNTV3dFd1MtPUdiUmNOCnpPdWAxSnVhfEtuZDV9b3toKVAlRnp6Syh5P3RZ
RGZyP1Q+aWA1Z3pmc2ZNfEBpUDQ8YW0rdU05TFJPME14dGlZYwp6Mnl3WXVzUEp8R3B2UGc2UDY3
SD49dzlJWCsoPm1VbFNUeEN6enJVditEWTZYQXh2PSsjfUdoNTc8MG5fM2EybW8Kei1QNUclT3tm
RSE3Pj9LT29gRHBuaFQ7TVhYZFgmRmB8eCg1XjdEaHElfnRYeGZRcGx2Xj8rVzM7MEVBM14rISY1
CnpHZEhaOTVAUyY+Ymd7KHg0NmZ9WnM+bEc4NWVneUJGbVh7cmIyJVdCWW4pUSlLZFArS0sxI0hX
MnRXfWMwVDNoVQp6Mzc3R2o1PXVgNWx1Pn1AcT5zI1lTQHc1cTFJVy1rcW87JlYrVWFRKHgoeUk1
d0F1OG5teEdqZk1QP3Bse0A8VngKemFRXj1XalNLKzRgcWxTYC1oaUZ1WEhFP1dJc1A1XzBaS3Zp
LVomb3NVTzA1I1NGbGF2Vjg+Ym1RJk9RRjMqd30wCno/ekBrQFV6RCVqKmJaaH15cCtNKGxySj93
ejc4Wm9rMHxLXlNSMVY+TEh4MEtSVHxpR0pHVm9SMDZSRFd1OytNdAp6fElVJTdXanFJRnZkI15R
WkF1fSYqYTd5YkwteVAqJTRUOzd2R3FrJnVtUCY8cCt3cXtERXA2NmtReDU+U1BDIzwKeig1eEV2
d0R+IVVxSUBtYTVUN2tpMCZkYzwpdShFbEUlP1Y0N0hBSn1oYXJYMzh1QnsmbFB4eFYzd3BhMztA
MiopCnpYaj1SJEpUZi0qTmRFVWU2ekluMDdQWU9aZmk2fGZ7UjI+LSptNz1WQ348KWl4P0tKZXJL
fkVFPGxwcWs9Qz48WAp6cHN8K0E2ISUoX2slfSpAV3pNSnZZX2xoaitYRUBYYm1KcXxLZT1tPng4
PEFyZUUkaEkzRkc+e0llP0xjO3I8QFUKejZkNH1uO043cmk7UTsyNlhIXillYiRBPEBWQH1NPyZT
dFB8aHJPKmNTaXskWENiX2l5NiZqOVhVWmFsTmooWGJ+Cno/c1lpPEgjRlphR3RzPWlOJkJzJWQ0
akJybmt9bXVSNS1VOV87X2ZfKGZgVHcmaDRyRF97d18lNWNDd3g1ezRfagp6MCFFdngqd3p8bkQ0
fV5iYnNDdUNSZD9Ke3FQTj5nWmdIbiQ9R0JwWmdJYEEmalI4aWk/ZUdvc0FTZjRPcDM5ZWsKenhz
aDM/Vj97PVhrbTl7QSFPMmc1YCQxKVRyTk4lTSorJmNVXlZtPTxybTEtI2BCJnlBSyFeUSZfUFg0
ckpZX218CnpfdHN5dm5JbHxHWnsxP2o2UUFxcit5WWRWPUdfWmxjX0Z8bkheK2ghO3Q/d2RJeU99
ZXoxOSpfYFBTYTJ3TGlMSwp6PTlwOCh5T2xkIyhLKmhNc1MzKkFYMTZzJl9CJi1jJkNhfXMwKFop
d2pzZ2gzcmVIIyVjaXJpLTx6U0Q7ezdjWUIKekg2YD97PH59Z0ska1dJZDReYThkKzVpXiQlTXwt
NkphZT0rZHVaXnhVVDA5d1hEI34mS0ReRlRFTUFHMllwZntOCnpXUGYhNWQ/ZG9vPiUwfStHNENw
S3MqR3paZ0NXYkdtIUsqJWs4SHNeTDdnSiNIJFNIJWsrZyR5UXVAK1owSVU0cgp6UldWcT9aZFFz
Pmx9KzNie208bD0qWSYrYVl3bXgwQHJ+YntyJDUoaD9IRnBaVktRdyVjJTtfI0xGP1NHQktJMHIK
emVpXyVjQiRmZmdFeHQhPlZETXVJK19FK2lkcXViK3RJRFQtZHZeUWJgJE4xTWgrZXNIRyorQioq
PCpGRkE1OUgpCnpWdXswe0otQT8mXj58SnpzeCs4Rm5FO0JUVyZgRSU9S2UxUm5xP0RFSHt2PkE4
eX1LSVBeKTdWd0BfPD9nIzZANAp6OytPXmdMSk5pQDgoV2cqdSN9VENAbzlgOXZQQHticjc8djtF
b041PClZN289JT59bjhiQ1NqKjRpKkBoPm1aSE4Kem55aVYteU1aRE0jYUc8aW45dGFsQTc+NGl4
WWRycXVJVVJjZCZnZTEpZCZNX3JBOGpmMz5SUGg2YFg1I0hALSp2CnpsS1F1fnB0R35HMEd4XkJD
c3NAfkJaTHFyazZ4MkwpQ2J0YFkkWlcrMUF6SHAwLTw2OVB2RiN1aGE3YH50bm09cgp6O0VZQE5L
Kj12WCs9SDI2X2V2cWM1b2p0MHE5bXhCNGxYKmY7Si17MjVxPl5BZ2czKDwqSyRMcEY/ZGhuPlQl
cn0KemZeJlFWOWlVd1B7KUo1ODVMKkVYQzBlI1JDRGF6MGt1RndibSQ3bylVXlJaazBic089Y0At
Ymopdmo3VE95VnN5CnpSREl2bVhSV2JzLSFCaH1nblFWVVN8REY3JEEmIXZvfDVWOGI8Y3s1NHlH
eU9IZUZeKlEqbWl1ZWtSckRhJXd6aAp6Y3RAO1YkKkkjPTZVcV5NZndUXkA9PDJVOGN3YH4qQl52
VWA8OFZNKXJATXR6Nz03WUJ4RiFPfFAqVnZHaSZMVW4KekM+O0hPe181fXQ0WSVCbVAyIXlMJTA8
c0FoRGk2Wkk5S25fezE/bndhVmojWnNMODhLcDs5UV4lWU9aYiZhanQ0Cno/YVB4KDtRP2txQl8k
Ynk9fE5Kej9HZSp4a0F6PFIkbzV6e0YhbExAKDJoLXdSelI2T3BVclRTOTFKbClPKGEyRQp6Zitl
cjwqbjJpK0YkPVZFMkxja3JSUV9xZ3c0Wmc9YU5lS3FINDN2QnhVVkdjSjBWRTw5RWktZyE7RGo0
SDEqTmEKemJKbylGUXtKSmorRVg3amFWa1hAMk5UPDNKI0BfUGNFb0RFI0UrfnRZfmFFdFYjeyVm
TyZjQDVkSWk0PngoSzwlCnpleEVDdVE1bCZYcD85QHVnVlokOFZmfFF0ZV5IY3JNdyUxdjRVYEMt
eFMkdDdFRysoMkZzfCh1dz4xNSkjRWxVfAp6VFNlSzFeK1kmfCY7VXthfDFaWmwwLU5EISE1QUFC
biZZb3M/Xig2V00/PXVkaS1vKyNYfEZMciUoJm5VRUlWaTwKeiNyYXN1OV5kZjdGSz97UW5VMkRI
e0Y3biRhdnd+aHskUDMhSFpqR1pWdTVDdm91S1JaRlJqYUc1JnNGV3BeQCQoCnpsK2FTaVd2QiVM
KENsWTFAd0pPIzMjPG59KkJUamNNSVMpKGRzek8rZCo9X1BrQENrdG5TUXhMTG9XJHRiWjJuIQp6
OXImMD4tSTB3TFpvRzRVMzxIKX13SSFXYlN7aHpCJmBecz1JZip8Mk98em9zKCRCTklMSWFNJFhT
KE1VcDteZnAKelhKbH0yXnVrWH10MElWQzskQiZZKmxkJmd7eDdxayN9U0hyR29UJGtMQzEoRElU
RzlFaH5hSmxWfi1YVUM2VFlFCnpwI2VuMjBEfXRBM0IkZn5gR2RMJmljVTRiWlN0YWt6YD5FJTA1
Jmszb2NWdkVQS2goZUVBZH1Ib2NmQF9OKm1GPgp6TDJnSHxsIyteJHJ6eiNvaH4qRWIhVjA4ZVh+
a05pMyFwIT00SmBLNUlwbTs7MU10Sz08fjRCPyhzS0VwXlohVW8KekAzO1JXcWI7YXYkeUFVKllo
TmwhYFNON3xRdVpoMVFie20wbjdQKjlAemRCdU90PnI7XncxSXprY3pHQXRyJTA5CnoocVpUfSNs
VUV9WmFUQ1VjUGNAZkFDTTYwKG5qfV5sZiYrNGt0WXo/ZFNPVy15cypCMXtUZFo8OHlFQT5wTGQ3
MAp6ayMwfS1xQkw8RUE4T01EJDFHSWt3bn5GLWx6X0dvJTNXWipQMzVOZSpSYW9te18tPzwmUVBA
V1lyPUcrc1pLXn4KenRuSFVNJWw+cUg1MUxDNDAwMSFEelRlLUg8ZHJhZ0YhKEQwQTJRcSgreV5v
YjRZeHw3PFZLZTA2SmY2UU9rRjckCno2UDtoSys2Q3NRclRrfHxzTHUpNEMhPzZ7aHZEUTE/QE5X
T2BmdXtOJX1XJVEqZX1jU1ZhSlhXJDMzQXphUikjIwp6QTZFYDZTNEZXMUItPWAoJXM3XzlCfmlH
WHc3LWhmUUQqSUBpSHZpfHsqVnBkUWowUiF2dTcxLXVedzBxWXhIOCYKekVaTG8yI30he0xPcmsz
dk9aYXNaT0paeDJGeTF0Z0F1IzI9SSpLSjZFZXhSKE1ybmdvQjtiJj5FNntSKUoyOVBGCno+Znsl
Vm5PN1U3WmpKfEsjdVpSUGcrQDt6akA3V2Y5Qi15TXN6OHVITU9ya19OT2pDTSlBLT91NlFjVyRM
NGx7Kwp6YlkxRXBuMzhCd0s+UllpcWlNZDw1e3NLVmljaHhJeCpTSm5aJT5VKTBifXQ8angkZ1ZJ
VzEpe3ozMWw5aHJkUkcKekMlKDQ2RHI9dC1mU3NhIWRQajR1QzA2N2VQTmc8MDt7dldOKyM8VHY5
aDwxPXhRUUFBRCFYQmleMGNSK1BOKSE9CnpNXjFOaHl0XkVOeDx8UWRraXROXmVMKCpNbT8oR1k8
SG5CSmE/UU1NaSo8NVlEM3JzXkhWPTA/NUdlJjUtVGsyaAp6SCFiKUdMdjljU05SUytecW9kNXBv
SEFlV0hOJnVIdSt2bSVwOyRXYSZ2b0oyXmJqb1JfazlVc3I3PVZ6MUhNN2wKemMjdGl0MUw2aGVS
bmBtSlhTPGB8OHI3a0puTnZWPHc+JFZSTE1KWHNwcXtvaj42X09QZWo/ZTQ9OEBZUXhrfWo/CnpD
Xll7aUpvYkdrSH1gQSspK2t+USNwPitzJDdqNT41RkwwfXA3Nn5TempgSj4yMT8qVFJ+JihmJjEl
bjdgPEs4MQp6a056Wnc0NW9WUXo3dlVgWlZpdD92eGskUT8jbFdqcEpOX19PQWpjS2VIMHNnUSkz
P25XPExEWGpmVncobX1yaFcKeiZsQ01FSG1yRXpKYFdGZT9BenBQVm1ES1pPYVk5Vk5BPi1FWmZR
Q3U8XnppTj88SFlOYHY4e3g5TnUpMlhaN1lxCnorIztvezNjSj1VTFBoQnJrT05yWD5GMT16VGB2
RGxmQkY/azlEJEwoe150a3t7P2JpeSNgSlhsaCExS3FrZ3pefgp6a0ZrdyFlWiVDfHlzTTVBWX1x
N0c4Kj5TQSU1THc8YXdobXZDTXpHTGB6R3B1enEjWDtrMXxIe3ppITxgeFd2bksKejBRbWxsXjRx
SFZwJk1fJk5hYnh4X01JTFFpSSpGfCsyeVkmQTwwYDBMWCtvRFk8QTVlKEVidGgkM31ucj0rNj1Q
Cno5Y30pRWt2fGRnUFpycnVuM1I3Szxld3RxZXxlI2B3dnhfN0xiOShOYHVfckttWCZ8WHooMXco
OX43YCVAJkttcApxNF5zTXJDalM4Q1U3Vy1KM0taYkFLfD5vc0ZyeVFyNkRJLXgkVndeUk5TODJw
Xm5VPjB2fVgkZAoKbGl0ZXJhbCAwCkhjbVY/ZDAwMDAxCgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVz
dHMvc3ZnL2N1c3RvbS9wb2ludGVyLWV2ZW50cy13aXRoLWxpbmVjYXBzLWFuZC1taXRlcmxpbWl0
cy1leHBlY3RlZC50eHQgYi9MYXlvdXRUZXN0cy9zdmcvY3VzdG9tL3BvaW50ZXItZXZlbnRzLXdp
dGgtbGluZWNhcHMtYW5kLW1pdGVybGltaXRzLWV4cGVjdGVkLnR4dApuZXcgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCAwMDAwMDAwLi40MjJmMTRjCi0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVz
dHMvc3ZnL2N1c3RvbS9wb2ludGVyLWV2ZW50cy13aXRoLWxpbmVjYXBzLWFuZC1taXRlcmxpbWl0
cy1leHBlY3RlZC50eHQKQEAgLTAsMCArMSw2IEBACitsYXllciBhdCAoMCwwKSBzaXplIDgwMHg2
MDAKKyAgUmVuZGVyVmlldyBhdCAoMCwwKSBzaXplIDgwMHg2MDAKK2xheWVyIGF0ICgwLDApIHNp
emUgODAweDYwMAorICBSZW5kZXJTVkdSb290IHtzdmd9IGF0ICgyMCwyMCkgc2l6ZSA0NDB4MzQw
CisgICAgUmVuZGVyU1ZHSGlkZGVuQ29udGFpbmVyIHtkZWZzfSBhdCAoMCwwKSBzaXplIDB4MAor
ICAgIFJlbmRlclNWR1JlY3Qge3JlY3R9IGF0ICgyMCwyMCkgc2l6ZSA0NDB4MzQwIFtzdHJva2U9
e1t0eXBlPVNPTElEXSBbY29sb3I9IzAwODAwMF0gW3N0cm9rZSB3aWR0aD00MC4wMF0gW21pdGVy
IGxpbWl0PTEuMDBdIFtsaW5lIGNhcD1ST1VORF0gW2Rhc2ggYXJyYXk9ezUwLjAwLCA1NC4wMH1d
fV0gW3g9NDAuMDBdIFt5PTQwLjAwXSBbd2lkdGg9NDAwLjAwXSBbaGVpZ2h0PTMwMC4wMF0KZGlm
ZiAtLWdpdCBhL0xheW91dFRlc3RzL3N2Zy9jdXN0b20vcG9pbnRlci1ldmVudHMtd2l0aC1saW5l
Y2Fwcy1hbmQtbWl0ZXJsaW1pdHMuc3ZnIGIvTGF5b3V0VGVzdHMvc3ZnL2N1c3RvbS9wb2ludGVy
LWV2ZW50cy13aXRoLWxpbmVjYXBzLWFuZC1taXRlcmxpbWl0cy5zdmcKbmV3IGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDAwMDAwMC4uNjg4YjBhYQotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRl
c3RzL3N2Zy9jdXN0b20vcG9pbnRlci1ldmVudHMtd2l0aC1saW5lY2Fwcy1hbmQtbWl0ZXJsaW1p
dHMuc3ZnCkBAIC0wLDAgKzEsMjIgQEAKKzxzdmcgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIw
MDAvc3ZnIj4KKzxkZWZzPgorCis8c3R5bGUgdHlwZT0idGV4dC9jc3MiPjwhW0NEQVRBWworcmVj
dCB7CisJZmlsbDogbm9uZTsKKwlmaWxsLW9wYWNpdHk6IDAuNTsKKwlzdHJva2U6IGdyZWVuOwor
CXN0cm9rZS13aWR0aDogNDBweDsKKwlzdHJva2UtbWl0ZXJsaW1pdDogMTsKKwlzdHJva2UtbGlu
ZWNhcDogcm91bmQ7CisJc3Ryb2tlLWRhc2hhcnJheTogNTAgNTQ7Cit9CityZWN0OmhvdmVyIHsK
KwlzdHJva2U6IHJlZDsKK30gCitdXT48L3N0eWxlPgorPC9kZWZzPgorCis8cmVjdCB4PSI0MCIg
eT0iNDAiIHdpZHRoPSI0MDAiIGhlaWdodD0iMzAwIiBwb2ludGVyLWV2ZW50cz0idmlzaWJsZVN0
cm9rZSIgLz4KKworPC9zdmc+CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9DTWFrZUxpc3Rz
LnR4dCBiL1NvdXJjZS9XZWJDb3JlL0NNYWtlTGlzdHMudHh0CmluZGV4IDU0NWRmNmUuLjNiMmM2
OTggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL0NNYWtlTGlzdHMudHh0CisrKyBiL1NvdXJj
ZS9XZWJDb3JlL0NNYWtlTGlzdHMudHh0CkBAIC0xNTkzLDYgKzE1OTMsNyBAQCBJRiAoRU5BQkxF
X1NWRykKICAgICAgICAgcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdJbmxpbmVUZXh0LmNwcAogICAg
ICAgICByZW5kZXJpbmcvc3ZnL1JlbmRlclNWR01vZGVsT2JqZWN0LmNwcAogICAgICAgICByZW5k
ZXJpbmcvc3ZnL1JlbmRlclNWR1BhdGguY3BwCisgICAgICAgIHJlbmRlcmluZy9zdmcvUmVuZGVy
U1ZHUmVjdC5jcHAKICAgICAgICAgcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJjZS5jcHAK
ICAgICAgICAgcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJjZUNsaXBwZXIuY3BwCiAgICAg
ICAgIHJlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VDb250YWluZXIuY3BwCkBAIC0xNjA3
LDYgKzE2MDgsNyBAQCBJRiAoRU5BQkxFX1NWRykKICAgICAgICAgcmVuZGVyaW5nL3N2Zy9SZW5k
ZXJTVkdSZXNvdXJjZVNvbGlkQ29sb3IuY3BwCiAgICAgICAgIHJlbmRlcmluZy9zdmcvUmVuZGVy
U1ZHUm9vdC5jcHAKICAgICAgICAgcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdTaGFkb3dUcmVlUm9v
dENvbnRhaW5lci5jcHAKKyAgICAgICAgcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdTaGFwZS5jcHAK
ICAgICAgICAgcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdUU3Bhbi5jcHAKICAgICAgICAgcmVuZGVy
aW5nL3N2Zy9SZW5kZXJTVkdUZXh0LmNwcAogICAgICAgICByZW5kZXJpbmcvc3ZnL1JlbmRlclNW
R1RleHRQYXRoLmNwcApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nIGIvU291
cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCmluZGV4IDhjNDQ3Y2UuLjg3MjA3NjUgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cK
QEAgLTEsMyArMSwxMzkgQEAKKzIwMTEtMDktMDEgIFJlbmF0YSBIb2RvdmFuICA8cmVuaUB3ZWJr
aXQub3JnPgorCisgICAgICAgIEFkZCBuZXcgcmVuZGVyZXIgZm9yIFNWR1JlY3RFbGVtZW50Lgor
ICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NjU3NjkKKwor
ICAgICAgICBBZGRpbmcgYSBuZXcgZnJhbWV3b3JrIHRvIHN1cHBvcnQgdGhlIHJlbmRlcmluZyBv
ZiBTVkcgc2hhcGVzLgorICAgICAgICBUaGUgbWFpbiBsb2dpYyB0YWtlcyBwbGFjZSBpbiBSZW5k
ZXJTVkdTaGFwZSBjbGFzcyBhbmQgZXZlcnkgcmVuZGVyZXIgd2lsbAorICAgICAgICBpbmhlcml0
IGZyb20gaXQuIFNpbmNlIGl0cyBjb2RlIGJhc2UgaXMgbW9zdGx5IG1vdmVkIGZyb20gUmVuZGVy
U1ZHUGF0aCBpdCdzIHN1aXRhYmxlIHRvCisgICAgICAgIGhhbmRsZSB0aGUgZmFsbGJhY2sgY2Fz
ZXMgKGUuZy46IHJvdW5kZWQgcmVjdHMsIHNwZWNpYWwgc3Ryb2tlcywgcG9pbnRlciBldmVudHMs
IGV0Yy4pCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAg
KiBDTWFrZUxpc3RzLnR4dDoKKyAgICAgICAgKiBHTlVtYWtlZmlsZS5saXN0LmFtOgorICAgICAg
ICAqIFdlYkNvcmUuZ3lwaToKKyAgICAgICAgKiBXZWJDb3JlLnBybzoKKyAgICAgICAgKiBXZWJD
b3JlLnZjcHJvai9XZWJDb3JlLnZjcHJvajoKKyAgICAgICAgKiBXZWJDb3JlLnhjb2RlcHJvai9w
cm9qZWN0LnBieHByb2o6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlck9iamVjdC5oOgorICAg
ICAgICAoV2ViQ29yZTo6UmVuZGVyT2JqZWN0Ojppc1NWR0xpbmUpOgorICAgICAgICAoV2ViQ29y
ZTo6UmVuZGVyT2JqZWN0Ojppc1NWR1JlY3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyT2Jq
ZWN0Ojppc1NWR1NoYXBlKToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyVHJlZUFzVGV4dC5j
cHA6CisgICAgICAgIChXZWJDb3JlOjp3cml0ZSk6CisgICAgICAgICogcmVuZGVyaW5nL3N2Zy9S
ZW5kZXJTVkdBbGxJbk9uZS5jcHA6CisgICAgICAgICogcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdN
b2RlbE9iamVjdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjppc0dyYXBoaWNzRWxlbWVudCk6Cisg
ICAgICAgICogcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdQYXRoLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OlJlbmRlclNWR1BhdGg6OlJlbmRlclNWR1BhdGgpOgorICAgICAgICAqIHJlbmRlcmluZy9z
dmcvUmVuZGVyU1ZHUGF0aC5oOgorICAgICAgICAqIHJlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVj
dC5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU1ZHUmVjdDo6UmVuZGVyU1ZH
UmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJTVkdSZWN0Ojp+UmVuZGVyU1ZHUmVjdCk6
CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJTVkdSZWN0OjpjcmVhdGVTaGFwZSk6CisgICAgICAg
IChXZWJDb3JlOjpSZW5kZXJTVkdSZWN0OjpvYmplY3RCb3VuZGluZ0JveCk6CisgICAgICAgIChX
ZWJDb3JlOjpSZW5kZXJTVkdSZWN0OjpzdHJva2VCb3VuZGluZ0JveCk6CisgICAgICAgIChXZWJD
b3JlOjpSZW5kZXJTVkdSZWN0OjpmaWxsU2hhcGUpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVy
U1ZHUmVjdDo6c3Ryb2tlU2hhcGUpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU1ZHUmVjdDo6
c3Ryb2tlQ29udGFpbnNTbG93Q2FzZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJTVkdSZWN0
OjpmaWxsQ29udGFpbnNTbG93Q2FzZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJTVkdSZWN0
OjpkZXRlcm1pbmVQb2ludExvY2F0aW9uKToKKyAgICAgICAgKiByZW5kZXJpbmcvc3ZnL1JlbmRl
clNWR1JlY3QuaDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJTVkdSZWN0Ojppc1NW
R1JlY3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU1ZHUmVjdDo6cmVuZGVyTmFtZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpSZW5kZXJTVkdSZWN0Ojppc0VtcHR5KToKKyAgICAgICAgKiByZW5k
ZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291cmNlLmg6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJT
VkdSZXNvdXJjZTo6cG9zdEFwcGx5UmVzb3VyY2UpOgorICAgICAgICAqIHJlbmRlcmluZy9zdmcv
UmVuZGVyU1ZHUmVzb3VyY2VDbGlwcGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclNW
R1Jlc291cmNlQ2xpcHBlcjo6ZHJhd0NvbnRlbnRJbnRvTWFza0ltYWdlKToKKyAgICAgICAgKFdl
YkNvcmU6OlJlbmRlclNWR1Jlc291cmNlQ2xpcHBlcjo6Y2FsY3VsYXRlQ2xpcENvbnRlbnRSZXBh
aW50UmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJTVkdSZXNvdXJjZUNsaXBwZXI6Omhp
dFRlc3RDbGlwQ29udGVudCk6CisgICAgICAgICogcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNv
dXJjZUNvbnRhaW5lci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJTVkdSZXNvdXJjZUNv
bnRhaW5lcjo6dHJhbnNmb3JtT25Ob25TY2FsaW5nU3Ryb2tlKToKKyAgICAgICAgKiByZW5kZXJp
bmcvc3ZnL1JlbmRlclNWR1Jlc291cmNlRmlsdGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJl
bmRlclNWR1Jlc291cmNlRmlsdGVyOjpwb3N0QXBwbHlSZXNvdXJjZSk6CisgICAgICAgICogcmVu
ZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJjZUZpbHRlci5oOgorICAgICAgICAqIHJlbmRlcmlu
Zy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VHcmFkaWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpS
ZW5kZXJTVkdSZXNvdXJjZUdyYWRpZW50OjphcHBseVJlc291cmNlKToKKyAgICAgICAgKiByZW5k
ZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291cmNlR3JhZGllbnQuaDoKKyAgICAgICAgKiByZW5kZXJp
bmcvc3ZnL1JlbmRlclNWR1Jlc291cmNlUGF0dGVybi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpS
ZW5kZXJTVkdSZXNvdXJjZVBhdHRlcm46OnBvc3RBcHBseVJlc291cmNlKToKKyAgICAgICAgKiBy
ZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291cmNlUGF0dGVybi5oOgorICAgICAgICAqIHJlbmRl
cmluZy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VTb2xpZENvbG9yLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OlJlbmRlclNWR1Jlc291cmNlU29saWRDb2xvcjo6cG9zdEFwcGx5UmVzb3VyY2UpOgorICAg
ICAgICAqIHJlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VTb2xpZENvbG9yLmg6CisgICAg
ICAgICogcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdTaGFwZS5jcHA6IENvcGllZCBmcm9tIFNvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUGF0aC5jcHAuCisgICAgICAgIChXZWJD
b3JlOjpSZW5kZXJTVkdTaGFwZTo6UmVuZGVyU1ZHU2hhcGUpOgorICAgICAgICAoV2ViQ29yZTo6
UmVuZGVyU1ZHU2hhcGU6On5SZW5kZXJTVkdTaGFwZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5k
ZXJTVkdTaGFwZTo6Y3JlYXRlU2hhcGUpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU1ZHU2hh
cGU6OmlzRW1wdHkpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU1ZHU2hhcGU6OmZpbGxTaGFw
ZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJTVkdTaGFwZTo6b2JqZWN0Qm91bmRpbmdCb3gp
OgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU1ZHU2hhcGU6OnN0cm9rZUJvdW5kaW5nQm94KToK
KyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclNWR1NoYXBlOjpzdHJva2VTaGFwZSk6CisgICAgICAg
IChXZWJDb3JlOjpSZW5kZXJTVkdTaGFwZTo6c3Ryb2tlQ29udGFpbnNTbG93Q2FzZSk6CisgICAg
ICAgIChXZWJDb3JlOjpSZW5kZXJTVkdTaGFwZTo6ZmlsbENvbnRhaW5zU2xvd0Nhc2UpOgorICAg
ICAgICAoV2ViQ29yZTo6UmVuZGVyU1ZHU2hhcGU6OmZpbGxDb250YWlucyk6CisgICAgICAgIChX
ZWJDb3JlOjpSZW5kZXJTVkdTaGFwZTo6c3Ryb2tlQ29udGFpbnMpOgorICAgICAgICAoV2ViQ29y
ZTo6UmVuZGVyU1ZHU2hhcGU6OmxheW91dCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJTVkdT
aGFwZTo6c2hvdWxkU3Ryb2tlWmVyb0xlbmd0aFN1YnBhdGgpOgorICAgICAgICAoV2ViQ29yZTo6
UmVuZGVyU1ZHU2hhcGU6Onplcm9MZW5ndGhTdWJwYXRoUmVjdCk6CisgICAgICAgIChXZWJDb3Jl
OjpSZW5kZXJTVkdTaGFwZTo6c2V0dXBTcXVhcmVDYXBQYXRoKToKKyAgICAgICAgKFdlYkNvcmU6
OlJlbmRlclNWR1NoYXBlOjpzZXR1cE5vblNjYWxpbmdTdHJva2VQYXRoKToKKyAgICAgICAgKFdl
YkNvcmU6OlJlbmRlclNWR1NoYXBlOjpmaWxsQW5kU3Ryb2tlUGF0aCk6CisgICAgICAgIChXZWJD
b3JlOjpSZW5kZXJTVkdTaGFwZTo6cGFpbnQpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU1ZH
U2hhcGU6OmFkZEZvY3VzUmluZ1JlY3RzKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclNWR1No
YXBlOjpub2RlQXRGbG9hdFBvaW50KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclNWR1NoYXBl
OjpjYWxjdWxhdGVNYXJrZXJCb3VuZHNJZk5lZWRlZCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5k
ZXJTVkdTaGFwZTo6dXBkYXRlQ2FjaGVkQm91bmRhcmllcyk6CisgICAgICAgIChXZWJDb3JlOjpS
ZW5kZXJTVkdTaGFwZTo6c3Ryb2tlV2lkdGgpOgorICAgICAgICAqIHJlbmRlcmluZy9zdmcvUmVu
ZGVyU1ZHU2hhcGUuaDogQ29waWVkIGZyb20gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9S
ZW5kZXJTVkdQYXRoLmguCisgICAgICAgIChXZWJDb3JlOjpCb3VuZGluZ1JlY3RTdHJva2VTdHls
ZUFwcGxpZXI6OkJvdW5kaW5nUmVjdFN0cm9rZVN0eWxlQXBwbGllcik6CisgICAgICAgIChXZWJD
b3JlOjpCb3VuZGluZ1JlY3RTdHJva2VTdHlsZUFwcGxpZXI6OnN0cm9rZVN0eWxlKToKKyAgICAg
ICAgKFdlYkNvcmU6OlJlbmRlclNWR1NoYXBlOjpzZXROZWVkc1NoYXBlVXBkYXRlKToKKyAgICAg
ICAgKFdlYkNvcmU6OlJlbmRlclNWR1NoYXBlOjpzZXROZWVkc0JvdW5kYXJpZXNVcGRhdGUpOgor
ICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU1ZHU2hhcGU6OnNldE5lZWRzVHJhbnNmb3JtVXBkYXRl
KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclNWR1NoYXBlOjpzdHJva2VCb3VuZGluZ0JveCk6
CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJTVkdTaGFwZTo6cmVwYWludFJlY3RJbkxvY2FsQ29v
cmRpbmF0ZXMpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU1ZHU2hhcGU6OmxvY2FsVG9QYXJl
bnRUcmFuc2Zvcm0pOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU1ZHU2hhcGU6OmlzU1ZHU2hh
cGUpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU1ZHU2hhcGU6OnJlbmRlck5hbWUpOgorICAg
ICAgICAoV2ViQ29yZTo6UmVuZGVyU1ZHU2hhcGU6OnBhdGgpOgorICAgICAgICAoV2ViQ29yZTo6
UmVuZGVyU1ZHU2hhcGU6OnBhdGhQdHIpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU1ZHU2hh
cGU6Omhhc1BhdGgpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU1ZHU2hhcGU6OmxvY2FsVHJh
bnNmb3JtKToKKyAgICAgICAgKFdlYkNvcmU6OnRvUmVuZGVyU1ZHU2hhcGUpOgorICAgICAgICAq
IHJlbmRlcmluZy9zdmcvU1ZHSW5saW5lVGV4dEJveC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpT
VkdJbmxpbmVUZXh0Qm94OjpyZWxlYXNlUGFpbnRpbmdSZXNvdXJjZSk6CisgICAgICAgICogcmVu
ZGVyaW5nL3N2Zy9TVkdSZW5kZXJTdXBwb3J0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR1Jl
bmRlclN1cHBvcnQ6OmZpbmlzaFJlbmRlclNWR0NvbnRlbnQpOgorICAgICAgICAoV2ViQ29yZTo6
U1ZHUmVuZGVyU3VwcG9ydDo6bGF5b3V0Q2hpbGRyZW4pOgorICAgICAgICAqIHJlbmRlcmluZy9z
dmcvU1ZHUmVuZGVyVHJlZUFzVGV4dC5jcHA6CisgICAgICAgIChXZWJDb3JlOjp3cml0ZVN0eWxl
KToKKyAgICAgICAgKFdlYkNvcmU6Om9wZXJhdG9yPDwpOgorICAgICAgICAoV2ViQ29yZTo6d3Jp
dGUpOgorICAgICAgICAqIHJlbmRlcmluZy9zdmcvU1ZHUmVuZGVyVHJlZUFzVGV4dC5oOgorICAg
ICAgICAqIHJlbmRlcmluZy9zdmcvU1ZHVGV4dFJ1blJlbmRlcmluZ0NvbnRleHQuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6U1ZHVGV4dFJ1blJlbmRlcmluZ0NvbnRleHQ6OmRyYXdTVkdHbHlwaHMp
OgorICAgICAgICAqIHN2Zy9TVkdDaXJjbGVFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OlNWR0NpcmNsZUVsZW1lbnQ6OnN2Z0F0dHJpYnV0ZUNoYW5nZWQpOgorICAgICAgICAqIHN2Zy9T
VkdFbGxpcHNlRWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTVkdFbGxpcHNlRWxlbWVu
dDo6c3ZnQXR0cmlidXRlQ2hhbmdlZCk6CisgICAgICAgICogc3ZnL1NWR0xpbmVFbGVtZW50LmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR0xpbmVFbGVtZW50OjpzdmdBdHRyaWJ1dGVDaGFuZ2Vk
KToKKyAgICAgICAgKiBzdmcvU1ZHUGF0aEVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
U1ZHUGF0aEVsZW1lbnQ6OnN2Z0F0dHJpYnV0ZUNoYW5nZWQpOgorICAgICAgICAoV2ViQ29yZTo6
U1ZHUGF0aEVsZW1lbnQ6OnBhdGhTZWdMaXN0Q2hhbmdlZCk6CisgICAgICAgIChXZWJDb3JlOjpT
VkdQYXRoRWxlbWVudDo6Y3JlYXRlUmVuZGVyZXIpOgorICAgICAgICAqIHN2Zy9TVkdQYXRoRWxl
bWVudC5oOgorICAgICAgICAqIHN2Zy9TVkdQb2x5RWxlbWVudC5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpTVkdQb2x5RWxlbWVudDo6c3ZnQXR0cmlidXRlQ2hhbmdlZCk6CisgICAgICAgICogc3Zn
L1NWR1JlY3RFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR1JlY3RFbGVtZW50Ojpz
dmdBdHRyaWJ1dGVDaGFuZ2VkKToKKyAgICAgICAgKFdlYkNvcmU6OlNWR1JlY3RFbGVtZW50Ojpj
cmVhdGVSZW5kZXJlcik6CisgICAgICAgICogc3ZnL1NWR1JlY3RFbGVtZW50Lmg6CisKIDIwMTEt
MDgtMjkgIFJ5b3N1a2UgTml3YSAgPHJuaXdhQHdlYmtpdC5vcmc+CiAKICAgICAgICAgTW92ZSBz
ZXRJbm5lclRleHRWYWx1ZSBmcm9tIFJlbmRlclRleHRDb250cm9sIHRvIEhUTUxUZXh0Rm9ybUNv
bnRyb2xFbGVtZW50CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9HTlVtYWtlZmlsZS5saXN0
LmFtIGIvU291cmNlL1dlYkNvcmUvR05VbWFrZWZpbGUubGlzdC5hbQppbmRleCA4ZTBlMWMxLi5i
MGQ3YTcwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9HTlVtYWtlZmlsZS5saXN0LmFtCisr
KyBiL1NvdXJjZS9XZWJDb3JlL0dOVW1ha2VmaWxlLmxpc3QuYW0KQEAgLTMyMDAsNiArMzIwMCw4
IEBAIHdlYmNvcmVfc291cmNlcyArPSBcCiAJU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9S
ZW5kZXJTVkdNb2RlbE9iamVjdC5oIFwKIAlTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1Jl
bmRlclNWR1BhdGguY3BwIFwKIAlTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNW
R1BhdGguaCBcCisJU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZWN0LmNw
cCBcCisJU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZWN0LmggXAogCVNv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VDbGlwcGVyLmNwcCBc
CiAJU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJjZUNsaXBwZXIu
aCBcCiAJU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJjZUNvbnRh
aW5lci5jcHAgXApAQCAtMzIyOCw2ICszMjMwLDggQEAgd2ViY29yZV9zb3VyY2VzICs9IFwKIAlT
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jvb3QuaCBcCiAJU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdTaGFkb3dUcmVlUm9vdENvbnRhaW5lci5jcHAg
XAogCVNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHU2hhZG93VHJlZVJvb3RD
b250YWluZXIuaCBcCisJU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdTaGFw
ZS5jcHAgXAorCVNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHU2hhcGUuaCBc
CiAJU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdUU3Bhbi5jcHAgXAogCVNv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHVFNwYW4uaCBcCiAJU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdUZXh0LmNwcCBcCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkgYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkKaW5k
ZXggOTEwYTg2ZC4uOThjZDE5MyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5n
eXBpCisrKyBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwaQpAQCAtNTgzNyw2ICs1ODM3LDgg
QEAKICAgICAgICAgICAgICdyZW5kZXJpbmcvc3ZnL1JlbmRlclNWR01vZGVsT2JqZWN0LmgnLAog
ICAgICAgICAgICAgJ3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUGF0aC5jcHAnLAogICAgICAgICAg
ICAgJ3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUGF0aC5oJywKKyAgICAgICAgICAgICdyZW5kZXJp
bmcvc3ZnL1JlbmRlclNWR1JlY3QuY3BwJywKKyAgICAgICAgICAgICdyZW5kZXJpbmcvc3ZnL1Jl
bmRlclNWR1JlY3QuaCcsCiAgICAgICAgICAgICAncmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNv
dXJjZS5jcHAnLAogICAgICAgICAgICAgJ3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2Uu
aCcsCiAgICAgICAgICAgICAncmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJjZUNsaXBwZXIu
Y3BwJywKQEAgLTU4NjUsNiArNTg2Nyw4IEBACiAgICAgICAgICAgICAncmVuZGVyaW5nL3N2Zy9S
ZW5kZXJTVkdSb290LmgnLAogICAgICAgICAgICAgJ3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHU2hh
ZG93VHJlZVJvb3RDb250YWluZXIuY3BwJywKICAgICAgICAgICAgICdyZW5kZXJpbmcvc3ZnL1Jl
bmRlclNWR1NoYWRvd1RyZWVSb290Q29udGFpbmVyLmgnLAorICAgICAgICAgICAgJ3JlbmRlcmlu
Zy9zdmcvUmVuZGVyU1ZHU2hhcGUuY3BwJywKKyAgICAgICAgICAgICdyZW5kZXJpbmcvc3ZnL1Jl
bmRlclNWR1NoYXBlLmgnLAogICAgICAgICAgICAgJ3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHVFNw
YW4uY3BwJywKICAgICAgICAgICAgICdyZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1RTcGFuLmgnLAog
ICAgICAgICAgICAgJ3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHVGV4dC5jcHAnLApkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5wcm8gYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnBy
bwppbmRleCA0NzNmZmQzLi4wNGY1NTljIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9XZWJD
b3JlLnBybworKysgYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnBybwpAQCAtMjI3Miw2ICsyMjcy
LDcgQEAgSEVBREVSUyArPSBcCiAgICAgcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdJbmxpbmVUZXh0
LmggXAogICAgIHJlbmRlcmluZy9zdmcvUmVuZGVyU1ZHTW9kZWxPYmplY3QuaCBcCiAgICAgcmVu
ZGVyaW5nL3N2Zy9SZW5kZXJTVkdQYXRoLmggXAorICAgIHJlbmRlcmluZy9zdmcvUmVuZGVyU1ZH
UmVjdC5oIFwKICAgICByZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291cmNlLmggXAogICAgIHJl
bmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VDbGlwcGVyLmggXAogICAgIHJlbmRlcmluZy9z
dmcvUmVuZGVyU1ZHUmVzb3VyY2VDb250YWluZXIuaCBcCkBAIC0yMjg2LDYgKzIyODcsNyBAQCBI
RUFERVJTICs9IFwKICAgICByZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291cmNlU29saWRDb2xv
ci5oIFwKICAgICByZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jvb3QuaCBcCiAgICAgcmVuZGVyaW5n
L3N2Zy9SZW5kZXJTVkdTaGFkb3dUcmVlUm9vdENvbnRhaW5lci5oIFwKKyAgICByZW5kZXJpbmcv
c3ZnL1JlbmRlclNWR1NoYXBlLmggXAogICAgIHJlbmRlcmluZy9zdmcvUmVuZGVyU1ZHVFNwYW4u
aCBcCiAgICAgcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdUZXh0LmggXAogICAgIHJlbmRlcmluZy9z
dmcvUmVuZGVyU1ZHVGV4dFBhdGguaCBcCkBAIC0zMzA3LDYgKzMzMDksOCBAQCBjb250YWlucyhE
RUZJTkVTLCBFTkFCTEVfU1ZHPTEpIHsKICAgICAgICAgcmVuZGVyaW5nL3N0eWxlL1NWR1JlbmRl
clN0eWxlRGVmcy5jcHAgXAogICAgICAgICByZW5kZXJpbmcvUG9pbnRlckV2ZW50c0hpdFJ1bGVz
LmNwcCBcCiAgICAgICAgIHJlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUGF0aC5jcHAgXAorICAgICAg
ICByZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1JlY3QuY3BwIFwKKyAgICAgICAgcmVuZGVyaW5nL3N2
Zy9SZW5kZXJTVkdTaGFwZS5jcHAgXAogICAgICAgICBzdmcvYW5pbWF0aW9uL1NNSUxUaW1lLmNw
cCBcCiAgICAgICAgIHN2Zy9hbmltYXRpb24vU01JTFRpbWVDb250YWluZXIuY3BwIFwKICAgICAg
ICAgc3ZnL2FuaW1hdGlvbi9TVkdTTUlMRWxlbWVudC5jcHAgXApkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvV2ViQ29yZS52Y3Byb2ovV2ViQ29yZS52Y3Byb2ogYi9Tb3VyY2UvV2ViQ29yZS9X
ZWJDb3JlLnZjcHJvai9XZWJDb3JlLnZjcHJvagppbmRleCAyZDkyMDY0Li5jMGFmZGJkIDEwMDc1
NQotLS0gYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnZjcHJvai9XZWJDb3JlLnZjcHJvagorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnZjcHJvai9XZWJDb3JlLnZjcHJvagpAQCAtNDE2MjMs
NiArNDE2MjMsMTE4IEBACiAJCQkJCT4KIAkJCQk8L0ZpbGU+CiAJCQkJPEZpbGUKKwkJCQkJUmVs
YXRpdmVQYXRoPSIuLlxyZW5kZXJpbmdcc3ZnXFJlbmRlclNWR1JlY3QuY3BwIgorCQkJCQk+CisJ
CQkJCTxGaWxlQ29uZmlndXJhdGlvbgorCQkJCQkJTmFtZT0iRGVidWd8V2luMzIiCisJCQkJCQlF
eGNsdWRlZEZyb21CdWlsZD0idHJ1ZSIKKwkJCQkJCT4KKwkJCQkJCTxUb29sCisJCQkJCQkJTmFt
ZT0iVkNDTENvbXBpbGVyVG9vbCIKKwkJCQkJCS8+CisJCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+
CisJCQkJCTxGaWxlQ29uZmlndXJhdGlvbgorCQkJCQkJTmFtZT0iUmVsZWFzZXxXaW4zMiIKKwkJ
CQkJCUV4Y2x1ZGVkRnJvbUJ1aWxkPSJ0cnVlIgorCQkJCQkJPgorCQkJCQkJPFRvb2wKKwkJCQkJ
CQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIgorCQkJCQkJLz4KKwkJCQkJPC9GaWxlQ29uZmlndXJh
dGlvbj4KKwkJCQkJPEZpbGVDb25maWd1cmF0aW9uCisJCQkJCQlOYW1lPSJEZWJ1Z19DYWlyb19D
RkxpdGV8V2luMzIiCisJCQkJCQlFeGNsdWRlZEZyb21CdWlsZD0idHJ1ZSIKKwkJCQkJCT4KKwkJ
CQkJCTxUb29sCisJCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIKKwkJCQkJCS8+CisJCQkJ
CTwvRmlsZUNvbmZpZ3VyYXRpb24+CisJCQkJCTxGaWxlQ29uZmlndXJhdGlvbgorCQkJCQkJTmFt
ZT0iUmVsZWFzZV9DYWlyb19DRkxpdGV8V2luMzIiCisJCQkJCQlFeGNsdWRlZEZyb21CdWlsZD0i
dHJ1ZSIKKwkJCQkJCT4KKwkJCQkJCTxUb29sCisJCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9v
bCIKKwkJCQkJCS8+CisJCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+CisJCQkJCTxGaWxlQ29uZmln
dXJhdGlvbgorCQkJCQkJTmFtZT0iRGVidWdfQWxsfFdpbjMyIgorCQkJCQkJRXhjbHVkZWRGcm9t
QnVpbGQ9InRydWUiCisJCQkJCQk+CisJCQkJCQk8VG9vbAorCQkJCQkJCU5hbWU9IlZDQ0xDb21w
aWxlclRvb2wiCisJCQkJCQkvPgorCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPgorCQkJCQk8Rmls
ZUNvbmZpZ3VyYXRpb24KKwkJCQkJCU5hbWU9IlByb2R1Y3Rpb258V2luMzIiCisJCQkJCQlFeGNs
dWRlZEZyb21CdWlsZD0idHJ1ZSIKKwkJCQkJCT4KKwkJCQkJCTxUb29sCisJCQkJCQkJTmFtZT0i
VkNDTENvbXBpbGVyVG9vbCIKKwkJCQkJCS8+CisJCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+CisJ
CQkJPC9GaWxlPgorCQkJCTxGaWxlCisJCQkJCVJlbGF0aXZlUGF0aD0iLi5ccmVuZGVyaW5nXHN2
Z1xSZW5kZXJTVkdSZWN0LmgiCisJCQkJCT4KKwkJCQk8L0ZpbGU+CisJCQkJPEZpbGUKKwkJCQkJ
UmVsYXRpdmVQYXRoPSIuLlxyZW5kZXJpbmdcc3ZnXFJlbmRlclNWR1NoYXBlLmNwcCIKKwkJCQkJ
PgorCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24KKwkJCQkJCU5hbWU9IkRlYnVnfFdpbjMyIgorCQkJ
CQkJRXhjbHVkZWRGcm9tQnVpbGQ9InRydWUiCisJCQkJCQk+CisJCQkJCQk8VG9vbAorCQkJCQkJ
CU5hbWU9IlZDQ0xDb21waWxlclRvb2wiCisJCQkJCQkvPgorCQkJCQk8L0ZpbGVDb25maWd1cmF0
aW9uPgorCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24KKwkJCQkJCU5hbWU9IlJlbGVhc2V8V2luMzIi
CisJCQkJCQlFeGNsdWRlZEZyb21CdWlsZD0idHJ1ZSIKKwkJCQkJCT4KKwkJCQkJCTxUb29sCisJ
CQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIKKwkJCQkJCS8+CisJCQkJCTwvRmlsZUNvbmZp
Z3VyYXRpb24+CisJCQkJCTxGaWxlQ29uZmlndXJhdGlvbgorCQkJCQkJTmFtZT0iRGVidWdfQ2Fp
cm9fQ0ZMaXRlfFdpbjMyIgorCQkJCQkJRXhjbHVkZWRGcm9tQnVpbGQ9InRydWUiCisJCQkJCQk+
CisJCQkJCQk8VG9vbAorCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiCisJCQkJCQkvPgor
CQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPgorCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24KKwkJCQkJ
CU5hbWU9IlJlbGVhc2VfQ2Fpcm9fQ0ZMaXRlfFdpbjMyIgorCQkJCQkJRXhjbHVkZWRGcm9tQnVp
bGQ9InRydWUiCisJCQkJCQk+CisJCQkJCQk8VG9vbAorCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxl
clRvb2wiCisJCQkJCQkvPgorCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPgorCQkJCQk8RmlsZUNv
bmZpZ3VyYXRpb24KKwkJCQkJCU5hbWU9IkRlYnVnX0FsbHxXaW4zMiIKKwkJCQkJCUV4Y2x1ZGVk
RnJvbUJ1aWxkPSJ0cnVlIgorCQkJCQkJPgorCQkJCQkJPFRvb2wKKwkJCQkJCQlOYW1lPSJWQ0NM
Q29tcGlsZXJUb29sIgorCQkJCQkJLz4KKwkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4KKwkJCQkJ
PEZpbGVDb25maWd1cmF0aW9uCisJCQkJCQlOYW1lPSJQcm9kdWN0aW9ufFdpbjMyIgorCQkJCQkJ
RXhjbHVkZWRGcm9tQnVpbGQ9InRydWUiCisJCQkJCQk+CisJCQkJCQk8VG9vbAorCQkJCQkJCU5h
bWU9IlZDQ0xDb21waWxlclRvb2wiCisJCQkJCQkvPgorCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9u
PgorCQkJCTwvRmlsZT4KKwkJCQk8RmlsZQorCQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXHJlbmRlcmlu
Z1xzdmdcUmVuZGVyU1ZHU2hhcGUuaCIKKwkJCQkJPgorCQkJCTwvRmlsZT4KKwkJCQk8RmlsZQog
CQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXHJlbmRlcmluZ1xzdmdcUmVuZGVyU1ZHVGV4dC5jcHAiCiAJ
CQkJCT4KIAkJCQkJPEZpbGVDb25maWd1cmF0aW9uCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2ogYi9Tb3VyY2UvV2ViQ29yZS9XZWJD
b3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKaW5kZXggY2FmZThhYS4uYTg0NjFiMSAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9q
CisrKyBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagpA
QCAtOTkzMCwxMCArOTkzMCwxNCBAQAogCQk5RkZFM0VBMzExQjVBNDM5MDAzNzg3NEUgLyogSlNN
ZW1vcnlJbmZvLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpTTWVt
b3J5SW5mby5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTlGRkUzRUE0MTFCNUE0
MzkwMDM3ODc0RSAvKiBKU01lbW9yeUluZm8uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBw
YXRoID0gSlNNZW1vcnlJbmZvLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUEwMEI3
MjE5MTFERTY0MjcwMDhBQjlGRiAvKiBDaGVja2VkSW50LmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgbmFtZSA9IENoZWNrZWRJbnQuaDsgcGF0aCA9IGNhbnZhcy9DaGVja2VkSW50Lmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUExMzA5QjY0MTNGMThEOTMwMEM4QTA2NSAvKiBS
ZW5kZXJTVkdSZWN0LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IFJl
bmRlclNWR1JlY3QuY3BwOyBwYXRoID0gcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZWN0LmNwcDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQTEzMDlCNjgxM0YxOERBMTAwQzhBMDY1IC8q
IFJlbmRlclNWR1JlY3QuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gUmVuZGVy
U1ZHUmVjdC5oOyBwYXRoID0gcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZWN0Lmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCUExMzZBMDBBMTEzNERCRDIwMENDOEQ1MCAvKiBYTUxIdHRw
UmVxdWVzdFByb2dyZXNzRXZlbnRUaHJvdHRsZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNw
cC5jcHA7IHBhdGggPSBYTUxIdHRwUmVxdWVzdFByb2dyZXNzRXZlbnRUaHJvdHRsZS5jcHA7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUExMzZBMDBCMTEzNERCRDIwMENDOEQ1MCAvKiBY
TUxIdHRwUmVxdWVzdFByb2dyZXNzRXZlbnRUaHJvdHRsZS5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBYTUxIdHRwUmVxdWVzdFByb2dyZXNzRXZlbnRUaHJvdHRsZS5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlBMTdDODEyMDBGMkE1Q0Y3MDA1REFBRUIgLyogSFRN
TEVsZW1lbnRGYWN0b3J5LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9
IEhUTUxFbGVtZW50RmFjdG9yeS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUEx
N0M4MTIxMEYyQTVDRjcwMDVEQUFFQiAvKiBIVE1MRWxlbWVudEZhY3RvcnkuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSFRNTEVsZW1lbnRGYWN0b3J5Lmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CisJCUExQjc3OEMzMTQwM0E4RDQwMEQ5NjM5RiAvKiBSZW5kZXJTVkdT
aGFwZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBSZW5kZXJTVkdT
aGFwZS5jcHA7IHBhdGggPSByZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1NoYXBlLmNwcDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQTFCNzc4QzcxNDAzQThFNjAwRDk2MzlGIC8qIFJlbmRl
clNWR1NoYXBlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IFJlbmRlclNWR1No
YXBlLmg7IHBhdGggPSByZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1NoYXBlLmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCUExQzdGQUExMTMzQTVEMzUwMEQ2NzMyRCAvKiBKU1hQYXRoUmVz
dWx0Q3VzdG9tLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpTWFBh
dGhSZXN1bHRDdXN0b20uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlBMUUxMTU0
MzEzMDE1QzNEMDA1NEFDOEMgLyogRGlzdGFudExpZ2h0U291cmNlLmNwcCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IERpc3RhbnRMaWdodFNvdXJjZS5jcHA7IHBhdGggPSBm
aWx0ZXJzL0Rpc3RhbnRMaWdodFNvdXJjZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCUExRTExNTQ1MTMwMTVDNEUwMDU0QUM4QyAvKiBQb2ludExpZ2h0U291cmNlLmNwcCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IFBvaW50TGlnaHRTb3VyY2UuY3BwOyBw
YXRoID0gZmlsdGVycy9Qb2ludExpZ2h0U291cmNlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKQEAgLTEyOTc5LDYgKzEyOTgzLDEwIEBACiAJCTA4NjdENjkxRkU4NDAyOEZDMDJBQUMw
NyAvKiBXZWJLaXQgKi8gPSB7CiAJCQlpc2EgPSBQQlhHcm91cDsKIAkJCWNoaWxkcmVuID0gKAor
CQkJCUExQjc3OEM3MTQwM0E4RTYwMEQ5NjM5RiAvKiBSZW5kZXJTVkdTaGFwZS5oICovLAorCQkJ
CUExQjc3OEMzMTQwM0E4RDQwMEQ5NjM5RiAvKiBSZW5kZXJTVkdTaGFwZS5jcHAgKi8sCisJCQkJ
QTEzMDlCNjgxM0YxOERBMTAwQzhBMDY1IC8qIFJlbmRlclNWR1JlY3QuaCAqLywKKwkJCQlBMTMw
OUI2NDEzRjE4RDkzMDBDOEEwNjUgLyogUmVuZGVyU1ZHUmVjdC5jcHAgKi8sCiAJCQkJNjVDOTdB
RjIwOEVBOTA4ODAwQUNEMjczIC8qIGNvbmZpZy5oICovLAogCQkJCUVERUM5ODAyMEFFRDdFMTcw
MDU5MTM3RiAvKiBXZWJDb3JlUHJlZml4LmggKi8sCiAJCQkJQjEwQjY5N0QxNDBDMTc0MDAwQkMx
QzI2IC8qIFdlYlZUVFRva2VuLmggKi8sCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9GbG9hdFJlY3QuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvRmxvYXRSZWN0LmNwcAppbmRleCA3YWZjOTJiLi40YTk2ZTg4IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9GbG9hdFJlY3QuY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0Zsb2F0UmVjdC5jcHAKQEAgLTYxLDYgKzYxLDEz
IEBAIGJvb2wgRmxvYXRSZWN0Ojpjb250YWlucyhjb25zdCBGbG9hdFJlY3QmIG90aGVyKSBjb25z
dAogICAgICAgICAmJiB5KCkgPD0gb3RoZXIueSgpICYmIG1heFkoKSA+PSBvdGhlci5tYXhZKCk7
CiB9CiAKK2Jvb2wgRmxvYXRSZWN0Ojpjb21wcmlzZXMoY29uc3QgRmxvYXRQb2ludCYgcG9pbnQp
IGNvbnN0Cit7CisgICAgaWYgKCFjb250YWlucyhwb2ludCkpCisgICAgICAgIHJldHVybiBmYWxz
ZTsKKyAgICByZXR1cm4geCgpIDwgcG9pbnQueCgpICYmIG1heFgoKSA+IHBvaW50LngoKSAmJiB5
KCkgPCBwb2ludC55KCkgJiYgbWF4WSgpID4geSgpOworfQorCiB2b2lkIEZsb2F0UmVjdDo6aW50
ZXJzZWN0KGNvbnN0IEZsb2F0UmVjdCYgb3RoZXIpCiB7CiAgICAgZmxvYXQgbCA9IG1heCh4KCks
IG90aGVyLngoKSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9GbG9hdFJlY3QuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0Zsb2F0UmVj
dC5oCmluZGV4IDI3ZDQyMjQuLjUwNWI5ZjQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL0Zsb2F0UmVjdC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL0Zsb2F0UmVjdC5oCkBAIC0xNDUsNiArMTQ1LDcgQEAgcHVibGljOgogCiAgICAg
Ym9vbCBpbnRlcnNlY3RzKGNvbnN0IEZsb2F0UmVjdCYpIGNvbnN0OwogICAgIGJvb2wgY29udGFp
bnMoY29uc3QgRmxvYXRSZWN0JikgY29uc3Q7CisgICAgYm9vbCBjb21wcmlzZXMoY29uc3QgRmxv
YXRQb2ludCYpIGNvbnN0OwogCiAgICAgdm9pZCBpbnRlcnNlY3QoY29uc3QgRmxvYXRSZWN0Jik7
CiAgICAgdm9pZCB1bml0ZShjb25zdCBGbG9hdFJlY3QmKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJPYmplY3QuaCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9SZW5kZXJPYmplY3QuaAppbmRleCA4OTgzMDZjLi45ZmI0NGRiIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyT2JqZWN0LmgKKysrIGIvU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL1JlbmRlck9iamVjdC5oCkBAIC0zNTMsNyArMzUzLDEwIEBAIHB1YmxpYzoKICAg
ICB2aXJ0dWFsIGJvb2wgaXNTVkdWaWV3cG9ydENvbnRhaW5lcigpIGNvbnN0IHsgcmV0dXJuIGZh
bHNlOyB9IAogICAgIHZpcnR1YWwgYm9vbCBpc1NWR0dyYWRpZW50U3RvcCgpIGNvbnN0IHsgcmV0
dXJuIGZhbHNlOyB9CiAgICAgdmlydHVhbCBib29sIGlzU1ZHSGlkZGVuQ29udGFpbmVyKCkgY29u
c3QgeyByZXR1cm4gZmFsc2U7IH0KKyAgICB2aXJ0dWFsIGJvb2wgaXNTVkdMaW5lKCkgY29uc3Qg
eyByZXR1cm4gZmFsc2U7IH0KICAgICB2aXJ0dWFsIGJvb2wgaXNTVkdQYXRoKCkgY29uc3QgeyBy
ZXR1cm4gZmFsc2U7IH0KKyAgICB2aXJ0dWFsIGJvb2wgaXNTVkdSZWN0KCkgY29uc3QgeyByZXR1
cm4gZmFsc2U7IH0KKyAgICB2aXJ0dWFsIGJvb2wgaXNTVkdTaGFwZSgpIGNvbnN0IHsgcmV0dXJu
IGZhbHNlOyB9CiAgICAgdmlydHVhbCBib29sIGlzU1ZHVGV4dCgpIGNvbnN0IHsgcmV0dXJuIGZh
bHNlOyB9CiAgICAgdmlydHVhbCBib29sIGlzU1ZHVGV4dFBhdGgoKSBjb25zdCB7IHJldHVybiBm
YWxzZTsgfQogICAgIHZpcnR1YWwgYm9vbCBpc1NWR0lubGluZSgpIGNvbnN0IHsgcmV0dXJuIGZh
bHNlOyB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVHJlZUFz
VGV4dC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVHJlZUFzVGV4dC5jcHAK
aW5kZXggNWIyOWJiNS4uNjFmYWZlMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlclRyZWVBc1RleHQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJUcmVlQXNUZXh0LmNwcApAQCAtNTIwLDggKzUyMCw4IEBAIHN0YXRpYyB2b2lkIHdyaXRl
VGV4dFJ1bihUZXh0U3RyZWFtJiB0cywgY29uc3QgUmVuZGVyVGV4dCYgbywgY29uc3QgSW5saW5l
VGV4dEJvCiB2b2lkIHdyaXRlKFRleHRTdHJlYW0mIHRzLCBjb25zdCBSZW5kZXJPYmplY3QmIG8s
IGludCBpbmRlbnQsIFJlbmRlckFzVGV4dEJlaGF2aW9yIGJlaGF2aW9yKQogewogI2lmIEVOQUJM
RShTVkcpCi0gICAgaWYgKG8uaXNTVkdQYXRoKCkpIHsKLSAgICAgICAgd3JpdGUodHMsICp0b1Jl
bmRlclNWR1BhdGgoJm8pLCBpbmRlbnQpOworICAgIGlmIChvLmlzU1ZHU2hhcGUoKSkgeworICAg
ICAgICB3cml0ZSh0cywgKnRvUmVuZGVyU1ZHU2hhcGUoJm8pLCBpbmRlbnQpOwogICAgICAgICBy
ZXR1cm47CiAgICAgfQogICAgIGlmIChvLmlzU1ZHR3JhZGllbnRTdG9wKCkpIHsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHQWxsSW5PbmUuY3BwIGIv
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdBbGxJbk9uZS5jcHAKaW5kZXgg
OWVhM2JlNS4uMjk2OTAwOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2
Zy9SZW5kZXJTVkdBbGxJbk9uZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2
Zy9SZW5kZXJTVkdBbGxJbk9uZS5jcHAKQEAgLTM1LDYgKzM1LDcgQEAKICNpbmNsdWRlICJSZW5k
ZXJTVkdJbmxpbmVUZXh0LmNwcCIKICNpbmNsdWRlICJSZW5kZXJTVkdNb2RlbE9iamVjdC5jcHAi
CiAjaW5jbHVkZSAiUmVuZGVyU1ZHUGF0aC5jcHAiCisjaW5jbHVkZSAiUmVuZGVyU1ZHUmVjdC5j
cHAiCiAjaW5jbHVkZSAiUmVuZGVyU1ZHUmVzb3VyY2UuY3BwIgogI2luY2x1ZGUgIlJlbmRlclNW
R1Jlc291cmNlQ2xpcHBlci5jcHAiCiAjaW5jbHVkZSAiUmVuZGVyU1ZHUmVzb3VyY2VDb250YWlu
ZXIuY3BwIgpAQCAtNDksNiArNTAsNyBAQAogI2luY2x1ZGUgIlJlbmRlclNWR1Jlc291cmNlU29s
aWRDb2xvci5jcHAiCiAjaW5jbHVkZSAiUmVuZGVyU1ZHUm9vdC5jcHAiCiAjaW5jbHVkZSAiUmVu
ZGVyU1ZHU2hhZG93VHJlZVJvb3RDb250YWluZXIuY3BwIgorI2luY2x1ZGUgIlJlbmRlclNWR1No
YXBlLmNwcCIKICNpbmNsdWRlICJSZW5kZXJTVkdUU3Bhbi5jcHAiCiAjaW5jbHVkZSAiUmVuZGVy
U1ZHVGV4dC5jcHAiCiAjaW5jbHVkZSAiUmVuZGVyU1ZHVGV4dFBhdGguY3BwIgpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdNb2RlbE9iamVjdC5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR01vZGVsT2JqZWN0LmNwcApp
bmRleCAxNGMxZGI4Li5jMjM0MGIzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvc3ZnL1JlbmRlclNWR01vZGVsT2JqZWN0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvc3ZnL1JlbmRlclNWR01vZGVsT2JqZWN0LmNwcApAQCAtMTUzLDcgKzE1Myw3IEBAIHN0
YXRpYyBib29sIGludGVyc2VjdHNBbGxvd2luZ0VtcHR5KGNvbnN0IEZsb2F0UmVjdCYgciwgY29u
c3QgRmxvYXRSZWN0JiBvdGhlcikKIC8vIGltYWdlLCBsaW5lLCBwYXRoLCBwb2x5Z29uLCBwb2x5
bGluZSwgcmVjdCwgdGV4dCBhbmQgdXNlLgogc3RhdGljIGJvb2wgaXNHcmFwaGljc0VsZW1lbnQo
UmVuZGVyT2JqZWN0KiByZW5kZXJlcikKIHsKLSAgICByZXR1cm4gcmVuZGVyZXItPmlzU1ZHUGF0
aCgpIHx8IHJlbmRlcmVyLT5pc1NWR1RleHQoKSB8fCByZW5kZXJlci0+aXNTVkdJbWFnZSgpIHx8
IHJlbmRlcmVyLT5pc1NWR1NoYWRvd1RyZWVSb290Q29udGFpbmVyKCk7CisgICAgcmV0dXJuIHJl
bmRlcmVyLT5pc1NWR1NoYXBlKCkgfHwgcmVuZGVyZXItPmlzU1ZHVGV4dCgpIHx8IHJlbmRlcmVy
LT5pc1NWR0ltYWdlKCkgfHwgcmVuZGVyZXItPmlzU1ZHU2hhZG93VHJlZVJvb3RDb250YWluZXIo
KTsKIH0KIAogYm9vbCBSZW5kZXJTVkdNb2RlbE9iamVjdDo6Y2hlY2tJbnRlcnNlY3Rpb24oUmVu
ZGVyT2JqZWN0KiByZW5kZXJlciwgY29uc3QgRmxvYXRSZWN0JiByZWN0KQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdQYXRoLmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUGF0aC5jcHAKaW5kZXggYTAzOTFmNy4uZWRh
ZDQzOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdQ
YXRoLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1BhdGgu
Y3BwCkBAIC02LDYgKzYsOCBAQAogICogQ29weXJpZ2h0IChDKSAyMDA5IERpcmsgU2NodWx6ZSA8
a3JpdEB3ZWJraXQub3JnPgogICogQ29weXJpZ2h0IChDKSBSZXNlYXJjaCBJbiBNb3Rpb24gTGlt
aXRlZCAyMDEwLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICogQ29weXJpZ2h0IChDKSAyMDA5IEpl
ZmYgU2NoaWxsZXIgPGNvZGVkcmVhZEBnbWFpbC5jb20+CisgKiBDb3B5cmlnaHQgKEMpIDIwMTEg
UmVuYXRhIEhvZG92YW4gPHJlbmlAd2Via2l0Lm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAxMSBV
bml2ZXJzaXR5IG9mIFN6ZWdlZAogICoKICAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJl
OyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAqIG1vZGlmeSBpdCB1bmRlciB0aGUg
dGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCkBAIC0yOCw0OSArMzAsMTMg
QEAKICNpZiBFTkFCTEUoU1ZHKQogI2luY2x1ZGUgIlJlbmRlclNWR1BhdGguaCIKIAotI2luY2x1
ZGUgIkZsb2F0UG9pbnQuaCIKLSNpbmNsdWRlICJGbG9hdFF1YWQuaCIKLSNpbmNsdWRlICJHcmFw
aGljc0NvbnRleHQuaCIKLSNpbmNsdWRlICJIaXRUZXN0UmVxdWVzdC5oIgotI2luY2x1ZGUgIlBv
aW50ZXJFdmVudHNIaXRSdWxlcy5oIgotI2luY2x1ZGUgIlJlbmRlclNWR0NvbnRhaW5lci5oIgot
I2luY2x1ZGUgIlJlbmRlclNWR1Jlc291cmNlTWFya2VyLmgiCi0jaW5jbHVkZSAiUmVuZGVyU1ZH
UmVzb3VyY2VTb2xpZENvbG9yLmgiCi0jaW5jbHVkZSAiU1ZHUmVuZGVyU3VwcG9ydC5oIgotI2lu
Y2x1ZGUgIlNWR1Jlc291cmNlcy5oIgorI2luY2x1ZGUgIlNWR1BhdGhFbGVtZW50LmgiCiAjaW5j
bHVkZSAiU1ZHU3R5bGVkVHJhbnNmb3JtYWJsZUVsZW1lbnQuaCIKLSNpbmNsdWRlICJTVkdUcmFu
c2Zvcm1MaXN0LmgiCi0jaW5jbHVkZSAiU1ZHVVJJUmVmZXJlbmNlLmgiCi0jaW5jbHVkZSAiU3Ry
b2tlU3R5bGVBcHBsaWVyLmgiCi0jaW5jbHVkZSA8d3RmL01hdGhFeHRyYXMuaD4KIAogbmFtZXNw
YWNlIFdlYkNvcmUgewogCi1jbGFzcyBCb3VuZGluZ1JlY3RTdHJva2VTdHlsZUFwcGxpZXIgOiBw
dWJsaWMgU3Ryb2tlU3R5bGVBcHBsaWVyIHsKLXB1YmxpYzoKLSAgICBCb3VuZGluZ1JlY3RTdHJv
a2VTdHlsZUFwcGxpZXIoY29uc3QgUmVuZGVyT2JqZWN0KiBvYmplY3QsIFJlbmRlclN0eWxlKiBz
dHlsZSkKLSAgICAgICAgOiBtX29iamVjdChvYmplY3QpCi0gICAgICAgICwgbV9zdHlsZShzdHls
ZSkKLSAgICB7Ci0gICAgICAgIEFTU0VSVChzdHlsZSk7Ci0gICAgICAgIEFTU0VSVChvYmplY3Qp
OwotICAgIH0KLQotICAgIHZvaWQgc3Ryb2tlU3R5bGUoR3JhcGhpY3NDb250ZXh0KiBnYykKLSAg
ICB7Ci0gICAgICAgIFNWR1JlbmRlclN1cHBvcnQ6OmFwcGx5U3Ryb2tlU3R5bGVUb0NvbnRleHQo
Z2MsIG1fc3R5bGUsIG1fb2JqZWN0KTsKLSAgICB9Ci0KLXByaXZhdGU6Ci0gICAgY29uc3QgUmVu
ZGVyT2JqZWN0KiBtX29iamVjdDsKLSAgICBSZW5kZXJTdHlsZSogbV9zdHlsZTsKLX07Ci0KIFJl
bmRlclNWR1BhdGg6OlJlbmRlclNWR1BhdGgoU1ZHU3R5bGVkVHJhbnNmb3JtYWJsZUVsZW1lbnQq
IG5vZGUpCi0gICAgOiBSZW5kZXJTVkdNb2RlbE9iamVjdChub2RlKQotICAgICwgbV9uZWVkc0Jv
dW5kYXJpZXNVcGRhdGUoZmFsc2UpIC8vIGRlZmF1bHQgaXMgZmFsc2UsIHRoZSBjYWNoZWQgcmVj
dHMgYXJlIGVtcHR5IGZyb20gdGhlIGJlZ2lubmluZwotICAgICwgbV9uZWVkc1BhdGhVcGRhdGUo
dHJ1ZSkgLy8gZGVmYXVsdCBpcyB0cnVlLCBzbyB3ZSBncmFiIGEgUGF0aCBvYmplY3Qgb25jZSBm
cm9tIFNWR1N0eWxlZFRyYW5zZm9ybWFibGVFbGVtZW50Ci0gICAgLCBtX25lZWRzVHJhbnNmb3Jt
VXBkYXRlKHRydWUpIC8vIGRlZmF1bHQgaXMgdHJ1ZSwgc28gd2UgZ3JhYiBhIEFmZmluZVRyYW5z
Zm9ybSBvYmplY3Qgb25jZSBmcm9tIFNWR1N0eWxlZFRyYW5zZm9ybWFibGVFbGVtZW50CisgICAg
OiBSZW5kZXJTVkdTaGFwZShub2RlKQogewogfQogCkBAIC03OCwzMTYgKzQ0LDYgQEAgUmVuZGVy
U1ZHUGF0aDo6flJlbmRlclNWR1BhdGgoKQogewogfQogCi1ib29sIFJlbmRlclNWR1BhdGg6OmZp
bGxDb250YWlucyhjb25zdCBGbG9hdFBvaW50JiBwb2ludCwgYm9vbCByZXF1aXJlc0ZpbGwsIFdp
bmRSdWxlIGZpbGxSdWxlKQotewotICAgIGlmICghbV9maWxsQm91bmRpbmdCb3guY29udGFpbnMo
cG9pbnQpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBDb2xvciBmYWxsYmFja0NvbG9y
OwotICAgIGlmIChyZXF1aXJlc0ZpbGwgJiYgIVJlbmRlclNWR1Jlc291cmNlOjpmaWxsUGFpbnRp
bmdSZXNvdXJjZSh0aGlzLCBzdHlsZSgpLCBmYWxsYmFja0NvbG9yKSkKLSAgICAgICAgcmV0dXJu
IGZhbHNlOwotCi0gICAgcmV0dXJuIG1fcGF0aC5jb250YWlucyhwb2ludCwgZmlsbFJ1bGUpOwot
fQotCi1ib29sIFJlbmRlclNWR1BhdGg6OnN0cm9rZUNvbnRhaW5zKGNvbnN0IEZsb2F0UG9pbnQm
IHBvaW50LCBib29sIHJlcXVpcmVzU3Ryb2tlKQotewotICAgIGlmICghbV9zdHJva2VBbmRNYXJr
ZXJCb3VuZGluZ0JveC5jb250YWlucyhwb2ludCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQot
ICAgIENvbG9yIGZhbGxiYWNrQ29sb3I7Ci0gICAgaWYgKHJlcXVpcmVzU3Ryb2tlICYmICFSZW5k
ZXJTVkdSZXNvdXJjZTo6c3Ryb2tlUGFpbnRpbmdSZXNvdXJjZSh0aGlzLCBzdHlsZSgpLCBmYWxs
YmFja0NvbG9yKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgaWYgKHNob3VsZFN0cm9r
ZVplcm9MZW5ndGhTdWJwYXRoKCkpCi0gICAgICAgIHJldHVybiB6ZXJvTGVuZ3RoU3VicGF0aFJl
Y3QoKS5jb250YWlucyhwb2ludCk7Ci0KLSAgICBCb3VuZGluZ1JlY3RTdHJva2VTdHlsZUFwcGxp
ZXIgc3Ryb2tlU3R5bGUodGhpcywgc3R5bGUoKSk7Ci0gICAgcmV0dXJuIG1fcGF0aC5zdHJva2VD
b250YWlucygmc3Ryb2tlU3R5bGUsIHBvaW50KTsKLX0KLQotdm9pZCBSZW5kZXJTVkdQYXRoOjps
YXlvdXQoKQotewotICAgIExheW91dFJlcGFpbnRlciByZXBhaW50ZXIoKnRoaXMsIGNoZWNrRm9y
UmVwYWludER1cmluZ0xheW91dCgpICYmIHNlbGZOZWVkc0xheW91dCgpKTsKLSAgICBTVkdTdHls
ZWRUcmFuc2Zvcm1hYmxlRWxlbWVudCogZWxlbWVudCA9IHN0YXRpY19jYXN0PFNWR1N0eWxlZFRy
YW5zZm9ybWFibGVFbGVtZW50Kj4obm9kZSgpKTsKLQotICAgIGJvb2wgdXBkYXRlQ2FjaGVkQm91
bmRhcmllc0luUGFyZW50cyA9IGZhbHNlOwotCi0gICAgYm9vbCBuZWVkc1BhdGhVcGRhdGUgPSBt
X25lZWRzUGF0aFVwZGF0ZTsKLSAgICBpZiAobmVlZHNQYXRoVXBkYXRlKSB7Ci0gICAgICAgIG1f
cGF0aC5jbGVhcigpOwotICAgICAgICBlbGVtZW50LT50b1BhdGhEYXRhKG1fcGF0aCk7Ci0gICAg
ICAgIG1fbmVlZHNQYXRoVXBkYXRlID0gZmFsc2U7Ci0gICAgICAgIHVwZGF0ZUNhY2hlZEJvdW5k
YXJpZXNJblBhcmVudHMgPSB0cnVlOwotICAgIH0KLQotICAgIGlmIChtX25lZWRzVHJhbnNmb3Jt
VXBkYXRlKSB7Ci0gICAgICAgIG1fbG9jYWxUcmFuc2Zvcm0gPSBlbGVtZW50LT5hbmltYXRlZExv
Y2FsVHJhbnNmb3JtKCk7Ci0gICAgICAgIG1fbmVlZHNUcmFuc2Zvcm1VcGRhdGUgPSBmYWxzZTsK
LSAgICAgICAgdXBkYXRlQ2FjaGVkQm91bmRhcmllc0luUGFyZW50cyA9IHRydWU7Ci0gICAgfQot
Ci0gICAgaWYgKG1fbmVlZHNCb3VuZGFyaWVzVXBkYXRlKQotICAgICAgICB1cGRhdGVDYWNoZWRC
b3VuZGFyaWVzSW5QYXJlbnRzID0gdHJ1ZTsKLQotICAgIC8vIEludmFsaWRhdGUgYWxsIHJlc291
cmNlcyBvZiB0aGlzIGNsaWVudCBpZiBvdXIgbGF5b3V0IGNoYW5nZWQuCi0gICAgaWYgKG1fZXZl
ckhhZExheW91dCAmJiBzZWxmTmVlZHNMYXlvdXQoKSkgewotICAgICAgICBTVkdSZXNvdXJjZXND
YWNoZTo6Y2xpZW50TGF5b3V0Q2hhbmdlZCh0aGlzKTsKLSAgICAgICAgbV9tYXJrZXJMYXlvdXRJ
bmZvLmNsZWFyKCk7Ci0gICAgfQotCi0gICAgLy8gQXQgdGhpcyBwb2ludCBMYXlvdXRSZXBhaW50
ZXIgYWxyZWFkeSBncmFiYmVkIHRoZSBvbGQgYm91bmRzLAotICAgIC8vIHJlY2FsY3VsYXRlIHRo
ZW0gbm93IHNvIHJlcGFpbnRBZnRlckxheW91dCgpIHVzZXMgdGhlIG5ldyBib3VuZHMuCi0gICAg
aWYgKG5lZWRzUGF0aFVwZGF0ZSB8fCBtX25lZWRzQm91bmRhcmllc1VwZGF0ZSkgewotICAgICAg
ICB1cGRhdGVDYWNoZWRCb3VuZGFyaWVzKCk7Ci0gICAgICAgIG1fbmVlZHNCb3VuZGFyaWVzVXBk
YXRlID0gZmFsc2U7Ci0gICAgfQotCi0gICAgLy8gSWYgb3VyIGJvdW5kcyBjaGFuZ2VkLCBub3Rp
ZnkgdGhlIHBhcmVudHMuCi0gICAgaWYgKHVwZGF0ZUNhY2hlZEJvdW5kYXJpZXNJblBhcmVudHMp
Ci0gICAgICAgIFJlbmRlclNWR01vZGVsT2JqZWN0OjpzZXROZWVkc0JvdW5kYXJpZXNVcGRhdGUo
KTsKLQotICAgIHJlcGFpbnRlci5yZXBhaW50QWZ0ZXJMYXlvdXQoKTsKLSAgICBzZXROZWVkc0xh
eW91dChmYWxzZSk7Ci19Ci0KLWJvb2wgUmVuZGVyU1ZHUGF0aDo6c2hvdWxkU3Ryb2tlWmVyb0xl
bmd0aFN1YnBhdGgoKSBjb25zdAotewotICAgIC8vIFNwZWMoMTEuNCk6IEFueSB6ZXJvIGxlbmd0
aCBzdWJwYXRoIHNoYWxsIG5vdCBiZSBzdHJva2VkIGlmIHRoZSDigJhzdHJva2UtbGluZWNhcOKA
mSBwcm9wZXJ0eSBoYXMgYSB2YWx1ZSBvZiBidXR0Ci0gICAgLy8gYnV0IHNoYWxsIGJlIHN0cm9r
ZWQgaWYgdGhlIOKAmHN0cm9rZS1saW5lY2Fw4oCZIHByb3BlcnR5IGhhcyBhIHZhbHVlIG9mIHJv
dW5kIG9yIHNxdWFyZQotICAgIHJldHVybiBzdHlsZSgpLT5zdmdTdHlsZSgpLT5oYXNTdHJva2Uo
KSAmJiBzdHlsZSgpLT5zdmdTdHlsZSgpLT5jYXBTdHlsZSgpICE9IEJ1dHRDYXAgJiYgIW1fZmls
bEJvdW5kaW5nQm94LndpZHRoKCkgJiYgIW1fZmlsbEJvdW5kaW5nQm94LmhlaWdodCgpOwotfQot
Ci1GbG9hdFJlY3QgUmVuZGVyU1ZHUGF0aDo6emVyb0xlbmd0aFN1YnBhdGhSZWN0KCkgY29uc3QK
LXsKLSAgICBTVkdFbGVtZW50KiBzdmdFbGVtZW50ID0gc3RhdGljX2Nhc3Q8U1ZHRWxlbWVudCo+
KG5vZGUoKSk7Ci0gICAgZmxvYXQgc3Ryb2tlV2lkdGggPSBzdHlsZSgpLT5zdmdTdHlsZSgpLT5z
dHJva2VXaWR0aCgpLnZhbHVlKHN2Z0VsZW1lbnQpOwotICAgIHJldHVybiBGbG9hdFJlY3QobV9m
aWxsQm91bmRpbmdCb3gueCgpIC0gc3Ryb2tlV2lkdGggLyAyLCBtX2ZpbGxCb3VuZGluZ0JveC55
KCkgLSBzdHJva2VXaWR0aCAvIDIsIHN0cm9rZVdpZHRoLCBzdHJva2VXaWR0aCk7Ci19Ci0KLXZv
aWQgUmVuZGVyU1ZHUGF0aDo6c2V0dXBTcXVhcmVDYXBQYXRoKFBhdGgqJiB1c2VQYXRoLCBpbnQm
IGFwcGx5TW9kZSkKLXsKLSAgICAvLyBTcGVjKDExLjQpOiBBbnkgemVybyBsZW5ndGggc3VicGF0
aCBzaGFsbCBub3QgYmUgc3Ryb2tlZCBpZiB0aGUg4oCYc3Ryb2tlLWxpbmVjYXDigJkgcHJvcGVy
dHkgaGFzIGEgdmFsdWUgb2YgYnV0dAotICAgIC8vIGJ1dCBzaGFsbCBiZSBzdHJva2VkIGlmIHRo
ZSDigJhzdHJva2UtbGluZWNhcOKAmSBwcm9wZXJ0eSBoYXMgYSB2YWx1ZSBvZiByb3VuZCBvciBz
cXVhcmUKLSAgICBERUZJTkVfU1RBVElDX0xPQ0FMKFBhdGgsIHRlbXBQYXRoLCAoKSk7Ci0KLSAg
ICBhcHBseU1vZGUgPSBBcHBseVRvRmlsbE1vZGU7Ci0gICAgdXNlUGF0aCA9ICZ0ZW1wUGF0aDsK
LSAgICB1c2VQYXRoLT5jbGVhcigpOwotICAgIGlmIChzdHlsZSgpLT5zdmdTdHlsZSgpLT5jYXBT
dHlsZSgpID09IFNxdWFyZUNhcCkKLSAgICAgICAgdXNlUGF0aC0+YWRkUmVjdCh6ZXJvTGVuZ3Ro
U3VicGF0aFJlY3QoKSk7Ci0gICAgZWxzZQotICAgICAgICB1c2VQYXRoLT5hZGRFbGxpcHNlKHpl
cm9MZW5ndGhTdWJwYXRoUmVjdCgpKTsKLX0KLQotYm9vbCBSZW5kZXJTVkdQYXRoOjpzZXR1cE5v
blNjYWxpbmdTdHJva2VQYXRoKFBhdGgqJiB1c2VQYXRoLCBHcmFwaGljc0NvbnRleHRTdGF0ZVNh
dmVyJiBzdGF0ZVNhdmVyKQotewotICAgIERFRklORV9TVEFUSUNfTE9DQUwoUGF0aCwgdGVtcFBh
dGgsICgpKTsKLQotICAgIFNWR1N0eWxlZFRyYW5zZm9ybWFibGVFbGVtZW50KiBlbGVtZW50ID0g
c3RhdGljX2Nhc3Q8U1ZHU3R5bGVkVHJhbnNmb3JtYWJsZUVsZW1lbnQqPihub2RlKCkpOwotICAg
IEFmZmluZVRyYW5zZm9ybSBub25TY2FsaW5nU3Ryb2tlVHJhbnNmb3JtID0gZWxlbWVudC0+Z2V0
U2NyZWVuQ1RNKFNWR0xvY2F0YWJsZTo6RGlzYWxsb3dTdHlsZVVwZGF0ZSk7Ci0gICAgaWYgKCFu
b25TY2FsaW5nU3Ryb2tlVHJhbnNmb3JtLmlzSW52ZXJ0aWJsZSgpKQotICAgICAgICByZXR1cm4g
ZmFsc2U7Ci0KLSAgICB0ZW1wUGF0aCA9IG1fcGF0aDsKLSAgICB1c2VQYXRoID0gJnRlbXBQYXRo
OwotICAgIHRlbXBQYXRoLnRyYW5zZm9ybShub25TY2FsaW5nU3Ryb2tlVHJhbnNmb3JtKTsKLQot
ICAgIHN0YXRlU2F2ZXIuc2F2ZSgpOwotICAgIHN0YXRlU2F2ZXIuY29udGV4dCgpLT5jb25jYXRD
VE0obm9uU2NhbGluZ1N0cm9rZVRyYW5zZm9ybS5pbnZlcnNlKCkpOwotICAgIHJldHVybiB0cnVl
OwotfQotCi12b2lkIFJlbmRlclNWR1BhdGg6OmZpbGxBbmRTdHJva2VQYXRoKEdyYXBoaWNzQ29u
dGV4dCogY29udGV4dCkKLXsKLSAgICBSZW5kZXJTdHlsZSogc3R5bGUgPSB0aGlzLT5zdHlsZSgp
OwotCi0gICAgQ29sb3IgZmFsbGJhY2tDb2xvcjsKLSAgICBpZiAoUmVuZGVyU1ZHUmVzb3VyY2Uq
IGZpbGxQYWludGluZ1Jlc291cmNlID0gUmVuZGVyU1ZHUmVzb3VyY2U6OmZpbGxQYWludGluZ1Jl
c291cmNlKHRoaXMsIHN0eWxlLCBmYWxsYmFja0NvbG9yKSkgewotICAgICAgICBpZiAoZmlsbFBh
aW50aW5nUmVzb3VyY2UtPmFwcGx5UmVzb3VyY2UodGhpcywgc3R5bGUsIGNvbnRleHQsIEFwcGx5
VG9GaWxsTW9kZSkpCi0gICAgICAgICAgICBmaWxsUGFpbnRpbmdSZXNvdXJjZS0+cG9zdEFwcGx5
UmVzb3VyY2UodGhpcywgY29udGV4dCwgQXBwbHlUb0ZpbGxNb2RlLCAmbV9wYXRoKTsKLSAgICAg
ICAgZWxzZSBpZiAoZmFsbGJhY2tDb2xvci5pc1ZhbGlkKCkpIHsKLSAgICAgICAgICAgIFJlbmRl
clNWR1Jlc291cmNlU29saWRDb2xvciogZmFsbGJhY2tSZXNvdXJjZSA9IFJlbmRlclNWR1Jlc291
cmNlOjpzaGFyZWRTb2xpZFBhaW50aW5nUmVzb3VyY2UoKTsKLSAgICAgICAgICAgIGZhbGxiYWNr
UmVzb3VyY2UtPnNldENvbG9yKGZhbGxiYWNrQ29sb3IpOwotICAgICAgICAgICAgaWYgKGZhbGxi
YWNrUmVzb3VyY2UtPmFwcGx5UmVzb3VyY2UodGhpcywgc3R5bGUsIGNvbnRleHQsIEFwcGx5VG9G
aWxsTW9kZSkpCi0gICAgICAgICAgICAgICAgZmFsbGJhY2tSZXNvdXJjZS0+cG9zdEFwcGx5UmVz
b3VyY2UodGhpcywgY29udGV4dCwgQXBwbHlUb0ZpbGxNb2RlLCAmbV9wYXRoKTsKLSAgICAgICAg
fQotICAgIH0KLQotICAgIGZhbGxiYWNrQ29sb3IgPSBDb2xvcigpOwotICAgIFJlbmRlclNWR1Jl
c291cmNlKiBzdHJva2VQYWludGluZ1Jlc291cmNlID0gUmVuZGVyU1ZHUmVzb3VyY2U6OnN0cm9r
ZVBhaW50aW5nUmVzb3VyY2UodGhpcywgc3R5bGUsIGZhbGxiYWNrQ29sb3IpOwotICAgIGlmICgh
c3Ryb2tlUGFpbnRpbmdSZXNvdXJjZSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgUGF0aCogdXNl
UGF0aCA9ICZtX3BhdGg7Ci0gICAgaW50IGFwcGx5TW9kZSA9IEFwcGx5VG9TdHJva2VNb2RlOwot
Ci0gICAgYm9vbCBub25TY2FsaW5nU3Ryb2tlID0gc3R5bGUtPnN2Z1N0eWxlKCktPnZlY3RvckVm
ZmVjdCgpID09IFZFX05PTl9TQ0FMSU5HX1NUUk9LRTsKLQotICAgIEdyYXBoaWNzQ29udGV4dFN0
YXRlU2F2ZXIgc3RhdGVTYXZlcigqY29udGV4dCwgZmFsc2UpOwotCi0gICAgLy8gU3BlYygxMS40
KTogQW55IHplcm8gbGVuZ3RoIHN1YnBhdGggc2hhbGwgbm90IGJlIHN0cm9rZWQgaWYgdGhlIOKA
mHN0cm9rZS1saW5lY2Fw4oCZIHByb3BlcnR5IGhhcyBhIHZhbHVlIG9mIGJ1dHQKLSAgICAvLyBi
dXQgc2hhbGwgYmUgc3Ryb2tlZCBpZiB0aGUg4oCYc3Ryb2tlLWxpbmVjYXDigJkgcHJvcGVydHkg
aGFzIGEgdmFsdWUgb2Ygcm91bmQgb3Igc3F1YXJlCi0gICAgLy8gRklYTUU6IHRoaXMgZG9lcyBu
b3Qgd29yayBmb3IgemVyby1sZW5ndGggc3VicGF0aHMsIG9ubHkgd2hlbiB0b3RhbCBwYXRoIGlz
IHplcm8tbGVuZ3RoCi0gICAgaWYgKHNob3VsZFN0cm9rZVplcm9MZW5ndGhTdWJwYXRoKCkpCi0g
ICAgICAgIHNldHVwU3F1YXJlQ2FwUGF0aCh1c2VQYXRoLCBhcHBseU1vZGUpOwotICAgIGVsc2Ug
aWYgKG5vblNjYWxpbmdTdHJva2UpIHsKLSAgICAgICBpZiAoIXNldHVwTm9uU2NhbGluZ1N0cm9r
ZVBhdGgodXNlUGF0aCwgc3RhdGVTYXZlcikpCi0gICAgICAgICAgIHJldHVybjsKLSAgICB9Ci0K
LSAgICBpZiAoc3Ryb2tlUGFpbnRpbmdSZXNvdXJjZS0+YXBwbHlSZXNvdXJjZSh0aGlzLCBzdHls
ZSwgY29udGV4dCwgYXBwbHlNb2RlKSkKLSAgICAgICAgc3Ryb2tlUGFpbnRpbmdSZXNvdXJjZS0+
cG9zdEFwcGx5UmVzb3VyY2UodGhpcywgY29udGV4dCwgYXBwbHlNb2RlLCB1c2VQYXRoKTsKLSAg
ICBlbHNlIGlmIChmYWxsYmFja0NvbG9yLmlzVmFsaWQoKSkgewotICAgICAgICBSZW5kZXJTVkdS
ZXNvdXJjZVNvbGlkQ29sb3IqIGZhbGxiYWNrUmVzb3VyY2UgPSBSZW5kZXJTVkdSZXNvdXJjZTo6
c2hhcmVkU29saWRQYWludGluZ1Jlc291cmNlKCk7Ci0gICAgICAgIGZhbGxiYWNrUmVzb3VyY2Ut
PnNldENvbG9yKGZhbGxiYWNrQ29sb3IpOwotICAgICAgICBpZiAoZmFsbGJhY2tSZXNvdXJjZS0+
YXBwbHlSZXNvdXJjZSh0aGlzLCBzdHlsZSwgY29udGV4dCwgYXBwbHlNb2RlKSkKLSAgICAgICAg
ICAgIGZhbGxiYWNrUmVzb3VyY2UtPnBvc3RBcHBseVJlc291cmNlKHRoaXMsIGNvbnRleHQsIGFw
cGx5TW9kZSwgdXNlUGF0aCk7Ci0gICAgfQotfQotCi12b2lkIFJlbmRlclNWR1BhdGg6OnBhaW50
KFBhaW50SW5mbyYgcGFpbnRJbmZvLCBjb25zdCBMYXlvdXRQb2ludCYpCi17Ci0gICAgaWYgKHBh
aW50SW5mby5jb250ZXh0LT5wYWludGluZ0Rpc2FibGVkKCkgfHwgc3R5bGUoKS0+dmlzaWJpbGl0
eSgpID09IEhJRERFTiB8fCBtX3BhdGguaXNFbXB0eSgpKQotICAgICAgICByZXR1cm47Ci0KLSAg
ICBGbG9hdFJlY3QgYm91bmRpbmdCb3ggPSByZXBhaW50UmVjdEluTG9jYWxDb29yZGluYXRlcygp
OwotICAgIGlmICghU1ZHUmVuZGVyU3VwcG9ydDo6cGFpbnRJbmZvSW50ZXJzZWN0c1JlcGFpbnRS
ZWN0KGJvdW5kaW5nQm94LCBtX2xvY2FsVHJhbnNmb3JtLCBwYWludEluZm8pKQotICAgICAgICBy
ZXR1cm47Ci0KLSAgICBQYWludEluZm8gY2hpbGRQYWludEluZm8ocGFpbnRJbmZvKTsKLSAgICBi
b29sIGRyYXdzT3V0bGluZSA9IHN0eWxlKCktPm91dGxpbmVXaWR0aCgpICYmIChjaGlsZFBhaW50
SW5mby5waGFzZSA9PSBQYWludFBoYXNlT3V0bGluZSB8fCBjaGlsZFBhaW50SW5mby5waGFzZSA9
PSBQYWludFBoYXNlU2VsZk91dGxpbmUpOwotICAgIGlmIChkcmF3c091dGxpbmUgfHwgY2hpbGRQ
YWludEluZm8ucGhhc2UgPT0gUGFpbnRQaGFzZUZvcmVncm91bmQpIHsKLSAgICAgICAgR3JhcGhp
Y3NDb250ZXh0U3RhdGVTYXZlciBzdGF0ZVNhdmVyKCpjaGlsZFBhaW50SW5mby5jb250ZXh0KTsK
LSAgICAgICAgY2hpbGRQYWludEluZm8uYXBwbHlUcmFuc2Zvcm0obV9sb2NhbFRyYW5zZm9ybSk7
Ci0KLSAgICAgICAgaWYgKGNoaWxkUGFpbnRJbmZvLnBoYXNlID09IFBhaW50UGhhc2VGb3JlZ3Jv
dW5kKSB7Ci0gICAgICAgICAgICBQYWludEluZm8gc2F2ZWRJbmZvKGNoaWxkUGFpbnRJbmZvKTsK
LQotICAgICAgICAgICAgaWYgKFNWR1JlbmRlclN1cHBvcnQ6OnByZXBhcmVUb1JlbmRlclNWR0Nv
bnRlbnQodGhpcywgY2hpbGRQYWludEluZm8pKSB7Ci0gICAgICAgICAgICAgICAgY29uc3QgU1ZH
UmVuZGVyU3R5bGUqIHN2Z1N0eWxlID0gc3R5bGUoKS0+c3ZnU3R5bGUoKTsKLSAgICAgICAgICAg
ICAgICBpZiAoc3ZnU3R5bGUtPnNoYXBlUmVuZGVyaW5nKCkgPT0gU1JfQ1JJU1BFREdFUykKLSAg
ICAgICAgICAgICAgICAgICAgY2hpbGRQYWludEluZm8uY29udGV4dC0+c2V0U2hvdWxkQW50aWFs
aWFzKGZhbHNlKTsKLQotICAgICAgICAgICAgICAgIGZpbGxBbmRTdHJva2VQYXRoKGNoaWxkUGFp
bnRJbmZvLmNvbnRleHQpOwotCi0gICAgICAgICAgICAgICAgaWYgKHN2Z1N0eWxlLT5oYXNNYXJr
ZXJzKCkpCi0gICAgICAgICAgICAgICAgICAgIG1fbWFya2VyTGF5b3V0SW5mby5kcmF3TWFya2Vy
cyhjaGlsZFBhaW50SW5mbyk7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIFNWR1JlbmRl
clN1cHBvcnQ6OmZpbmlzaFJlbmRlclNWR0NvbnRlbnQodGhpcywgY2hpbGRQYWludEluZm8sIHNh
dmVkSW5mby5jb250ZXh0KTsKLSAgICAgICAgfQotCi0gICAgICAgIGlmIChkcmF3c091dGxpbmUp
Ci0gICAgICAgICAgICBwYWludE91dGxpbmUoY2hpbGRQYWludEluZm8uY29udGV4dCwgSW50UmVj
dChib3VuZGluZ0JveCkpOwotICAgIH0KLX0KLQotLy8gVGhpcyBtZXRob2QgaXMgY2FsbGVkIGZy
b20gaW5zaWRlIHBhaW50T3V0bGluZSgpIHNpbmNlIHdlIGNhbGwgcGFpbnRPdXRsaW5lKCkKLS8v
IHdoaWxlIHRyYW5zZm9ybWVkIHRvIG91ciBjb29yZCBzeXN0ZW0sIHJldHVybiBsb2NhbCBjb29y
ZHMKLXZvaWQgUmVuZGVyU1ZHUGF0aDo6YWRkRm9jdXNSaW5nUmVjdHMoVmVjdG9yPExheW91dFJl
Y3Q+JiByZWN0cywgY29uc3QgTGF5b3V0UG9pbnQmKSAKLXsKLSAgICBMYXlvdXRSZWN0IHJlY3Qg
PSBlbmNsb3NpbmdMYXlvdXRSZWN0KHJlcGFpbnRSZWN0SW5Mb2NhbENvb3JkaW5hdGVzKCkpOwot
ICAgIGlmICghcmVjdC5pc0VtcHR5KCkpCi0gICAgICAgIHJlY3RzLmFwcGVuZChyZWN0KTsKLX0K
LQotYm9vbCBSZW5kZXJTVkdQYXRoOjpub2RlQXRGbG9hdFBvaW50KGNvbnN0IEhpdFRlc3RSZXF1
ZXN0JiByZXF1ZXN0LCBIaXRUZXN0UmVzdWx0JiByZXN1bHQsIGNvbnN0IEZsb2F0UG9pbnQmIHBv
aW50SW5QYXJlbnQsIEhpdFRlc3RBY3Rpb24gaGl0VGVzdEFjdGlvbikKLXsKLSAgICAvLyBXZSBv
bmx5IGRyYXcgaW4gdGhlIGZvcmdyb3VuZCBwaGFzZSwgc28gd2Ugb25seSBoaXQtdGVzdCB0aGVu
LgotICAgIGlmIChoaXRUZXN0QWN0aW9uICE9IEhpdFRlc3RGb3JlZ3JvdW5kKQotICAgICAgICBy
ZXR1cm4gZmFsc2U7Ci0KLSAgICBGbG9hdFBvaW50IGxvY2FsUG9pbnQgPSBtX2xvY2FsVHJhbnNm
b3JtLmludmVyc2UoKS5tYXBQb2ludChwb2ludEluUGFyZW50KTsKLQotICAgIGlmICghU1ZHUmVu
ZGVyU3VwcG9ydDo6cG9pbnRJbkNsaXBwaW5nQXJlYSh0aGlzLCBsb2NhbFBvaW50KSkKLSAgICAg
ICAgcmV0dXJuIGZhbHNlOwotCi0gICAgUG9pbnRlckV2ZW50c0hpdFJ1bGVzIGhpdFJ1bGVzKFBv
aW50ZXJFdmVudHNIaXRSdWxlczo6U1ZHX1BBVEhfSElUVEVTVElORywgcmVxdWVzdCwgc3R5bGUo
KS0+cG9pbnRlckV2ZW50cygpKTsKLSAgICBib29sIGlzVmlzaWJsZSA9IChzdHlsZSgpLT52aXNp
YmlsaXR5KCkgPT0gVklTSUJMRSk7Ci0gICAgaWYgKGlzVmlzaWJsZSB8fCAhaGl0UnVsZXMucmVx
dWlyZVZpc2libGUpIHsKLSAgICAgICAgY29uc3QgU1ZHUmVuZGVyU3R5bGUqIHN2Z1N0eWxlID0g
c3R5bGUoKS0+c3ZnU3R5bGUoKTsKLSAgICAgICAgV2luZFJ1bGUgZmlsbFJ1bGUgPSBzdmdTdHls
ZS0+ZmlsbFJ1bGUoKTsKLSAgICAgICAgaWYgKHJlcXVlc3Quc3ZnQ2xpcENvbnRlbnQoKSkKLSAg
ICAgICAgICAgIGZpbGxSdWxlID0gc3ZnU3R5bGUtPmNsaXBSdWxlKCk7Ci0gICAgICAgIGlmICgo
aGl0UnVsZXMuY2FuSGl0U3Ryb2tlICYmIChzdmdTdHlsZS0+aGFzU3Ryb2tlKCkgfHwgIWhpdFJ1
bGVzLnJlcXVpcmVTdHJva2UpICYmIHN0cm9rZUNvbnRhaW5zKGxvY2FsUG9pbnQsIGhpdFJ1bGVz
LnJlcXVpcmVTdHJva2UpKQotICAgICAgICAgICAgfHwgKGhpdFJ1bGVzLmNhbkhpdEZpbGwgJiYg
KHN2Z1N0eWxlLT5oYXNGaWxsKCkgfHwgIWhpdFJ1bGVzLnJlcXVpcmVGaWxsKSAmJiBmaWxsQ29u
dGFpbnMobG9jYWxQb2ludCwgaGl0UnVsZXMucmVxdWlyZUZpbGwsIGZpbGxSdWxlKSkpIHsKLSAg
ICAgICAgICAgIHVwZGF0ZUhpdFRlc3RSZXN1bHQocmVzdWx0LCByb3VuZGVkTGF5b3V0UG9pbnQo
bG9jYWxQb2ludCkpOwotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIH0KLSAgICB9
Ci0gICAgcmV0dXJuIGZhbHNlOwotfQotCi1GbG9hdFJlY3QgUmVuZGVyU1ZHUGF0aDo6Y2FsY3Vs
YXRlTWFya2VyQm91bmRzSWZOZWVkZWQoKQotewotICAgIFNWR0VsZW1lbnQqIHN2Z0VsZW1lbnQg
PSBzdGF0aWNfY2FzdDxTVkdFbGVtZW50Kj4obm9kZSgpKTsKLSAgICBBU1NFUlQoc3ZnRWxlbWVu
dCAmJiBzdmdFbGVtZW50LT5kb2N1bWVudCgpKTsKLSAgICBpZiAoIXN2Z0VsZW1lbnQtPmlzU3R5
bGVkKCkpCi0gICAgICAgIHJldHVybiBGbG9hdFJlY3QoKTsKLQotICAgIFNWR1N0eWxlZEVsZW1l
bnQqIHN0eWxlZEVsZW1lbnQgPSBzdGF0aWNfY2FzdDxTVkdTdHlsZWRFbGVtZW50Kj4oc3ZnRWxl
bWVudCk7Ci0gICAgaWYgKCFzdHlsZWRFbGVtZW50LT5zdXBwb3J0c01hcmtlcnMoKSkKLSAgICAg
ICAgcmV0dXJuIEZsb2F0UmVjdCgpOwotCi0gICAgY29uc3QgU1ZHUmVuZGVyU3R5bGUqIHN2Z1N0
eWxlID0gc3R5bGUoKS0+c3ZnU3R5bGUoKTsKLSAgICBBU1NFUlQoc3ZnU3R5bGUtPmhhc01hcmtl
cnMoKSk7Ci0KLSAgICBTVkdSZXNvdXJjZXMqIHJlc291cmNlcyA9IFNWR1Jlc291cmNlc0NhY2hl
OjpjYWNoZWRSZXNvdXJjZXNGb3JSZW5kZXJPYmplY3QodGhpcyk7Ci0gICAgaWYgKCFyZXNvdXJj
ZXMpCi0gICAgICAgIHJldHVybiBGbG9hdFJlY3QoKTsKLQotICAgIFJlbmRlclNWR1Jlc291cmNl
TWFya2VyKiBtYXJrZXJTdGFydCA9IHJlc291cmNlcy0+bWFya2VyU3RhcnQoKTsKLSAgICBSZW5k
ZXJTVkdSZXNvdXJjZU1hcmtlciogbWFya2VyTWlkID0gcmVzb3VyY2VzLT5tYXJrZXJNaWQoKTsK
LSAgICBSZW5kZXJTVkdSZXNvdXJjZU1hcmtlciogbWFya2VyRW5kID0gcmVzb3VyY2VzLT5tYXJr
ZXJFbmQoKTsKLSAgICBpZiAoIW1hcmtlclN0YXJ0ICYmICFtYXJrZXJNaWQgJiYgIW1hcmtlckVu
ZCkKLSAgICAgICAgcmV0dXJuIEZsb2F0UmVjdCgpOwotCi0gICAgcmV0dXJuIG1fbWFya2VyTGF5
b3V0SW5mby5jYWxjdWxhdGVCb3VuZGFyaWVzKG1hcmtlclN0YXJ0LCBtYXJrZXJNaWQsIG1hcmtl
ckVuZCwgc3ZnU3R5bGUtPnN0cm9rZVdpZHRoKCkudmFsdWUoc3ZnRWxlbWVudCksIG1fcGF0aCk7
Ci19Ci0KLXZvaWQgUmVuZGVyU1ZHUGF0aDo6dXBkYXRlQ2FjaGVkQm91bmRhcmllcygpCi17Ci0g
ICAgaWYgKG1fcGF0aC5pc0VtcHR5KCkpIHsKLSAgICAgICAgbV9maWxsQm91bmRpbmdCb3ggPSBG
bG9hdFJlY3QoKTsKLSAgICAgICAgbV9zdHJva2VBbmRNYXJrZXJCb3VuZGluZ0JveCA9IEZsb2F0
UmVjdCgpOwotICAgICAgICBtX3JlcGFpbnRCb3VuZGluZ0JveCA9IEZsb2F0UmVjdCgpOwotICAg
ICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgLy8gQ2FjaGUgX3VuY2xpcHBlZF8gZmlsbCBib3Vu
ZGluZyBib3gsIHVzZWQgZm9yIGNhbGN1bGF0aW9ucyBpbiByZXNvdXJjZXMKLSAgICBtX2ZpbGxC
b3VuZGluZ0JveCA9IG1fcGF0aC5ib3VuZGluZ1JlY3QoKTsKLQotICAgIC8vIFNwZWMoMTEuNCk6
IEFueSB6ZXJvIGxlbmd0aCBzdWJwYXRoIHNoYWxsIG5vdCBiZSBzdHJva2VkIGlmIHRoZSDigJhz
dHJva2UtbGluZWNhcOKAmSBwcm9wZXJ0eSBoYXMgYSB2YWx1ZSBvZiBidXR0Ci0gICAgLy8gYnV0
IHNoYWxsIGJlIHN0cm9rZWQgaWYgdGhlIOKAmHN0cm9rZS1saW5lY2Fw4oCZIHByb3BlcnR5IGhh
cyBhIHZhbHVlIG9mIHJvdW5kIG9yIHNxdWFyZQotICAgIGlmIChzaG91bGRTdHJva2VaZXJvTGVu
Z3RoU3VicGF0aCgpKSB7Ci0gICAgICAgIG1fc3Ryb2tlQW5kTWFya2VyQm91bmRpbmdCb3ggPSB6
ZXJvTGVuZ3RoU3VicGF0aFJlY3QoKTsKLSAgICAgICAgLy8gQ2FjaGUgc21hbGxlc3QgcG9zc2li
bGUgcmVwYWludCByZWN0YW5nbGUKLSAgICAgICAgbV9yZXBhaW50Qm91bmRpbmdCb3ggPSBtX3N0
cm9rZUFuZE1hcmtlckJvdW5kaW5nQm94OwotICAgICAgICBTVkdSZW5kZXJTdXBwb3J0OjppbnRl
cnNlY3RSZXBhaW50UmVjdFdpdGhSZXNvdXJjZXModGhpcywgbV9yZXBhaW50Qm91bmRpbmdCb3gp
OwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgLy8gQ2FjaGUgX3VuY2xpcHBlZF8gc3Ry
b2tlIGJvdW5kaW5nIGJveCwgdXNlZCBmb3IgY2FsY3VsYXRpb25zIGluIHJlc291cmNlcyAoaW5j
bHVkZXMgbWFya2VyIGJvdW5kYXJpZXMpCi0gICAgbV9zdHJva2VBbmRNYXJrZXJCb3VuZGluZ0Jv
eCA9IG1fZmlsbEJvdW5kaW5nQm94OwotCi0gICAgY29uc3QgU1ZHUmVuZGVyU3R5bGUqIHN2Z1N0
eWxlID0gc3R5bGUoKS0+c3ZnU3R5bGUoKTsKLSAgICBpZiAoc3ZnU3R5bGUtPmhhc1N0cm9rZSgp
KSB7Ci0gICAgICAgIEJvdW5kaW5nUmVjdFN0cm9rZVN0eWxlQXBwbGllciBzdHJva2VTdHlsZSh0
aGlzLCBzdHlsZSgpKTsKLSAgICAgICAgbV9zdHJva2VBbmRNYXJrZXJCb3VuZGluZ0JveC51bml0
ZShtX3BhdGguc3Ryb2tlQm91bmRpbmdSZWN0KCZzdHJva2VTdHlsZSkpOwotICAgIH0KLQotICAg
IGlmIChzdmdTdHlsZS0+aGFzTWFya2VycygpKSB7Ci0gICAgICAgIEZsb2F0UmVjdCBtYXJrZXJC
b3VuZHMgPSBjYWxjdWxhdGVNYXJrZXJCb3VuZHNJZk5lZWRlZCgpOwotICAgICAgICBpZiAoIW1h
cmtlckJvdW5kcy5pc0VtcHR5KCkpCi0gICAgICAgICAgICBtX3N0cm9rZUFuZE1hcmtlckJvdW5k
aW5nQm94LnVuaXRlKG1hcmtlckJvdW5kcyk7Ci0gICAgfQotCi0gICAgLy8gQ2FjaGUgc21hbGxl
c3QgcG9zc2libGUgcmVwYWludCByZWN0YW5nbGUKLSAgICBtX3JlcGFpbnRCb3VuZGluZ0JveCA9
IG1fc3Ryb2tlQW5kTWFya2VyQm91bmRpbmdCb3g7Ci0gICAgU1ZHUmVuZGVyU3VwcG9ydDo6aW50
ZXJzZWN0UmVwYWludFJlY3RXaXRoUmVzb3VyY2VzKHRoaXMsIG1fcmVwYWludEJvdW5kaW5nQm94
KTsKLX0KLQogfQogCiAjZW5kaWYgLy8gRU5BQkxFKFNWRykKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUGF0aC5oIGIvU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL3N2Zy9SZW5kZXJTVkdQYXRoLmgKaW5kZXggOThlNjA4ZC4uZDg0NDI5NyAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdQYXRoLmgKKysrIGIv
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdQYXRoLmgKQEAgLTQsNiArNCw4
IEBACiAgKiBDb3B5cmlnaHQgKEMpIDIwMDUgRXJpYyBTZWlkZWwgPGVyaWNAd2Via2l0Lm9yZz4K
ICAqIENvcHlyaWdodCAoQykgMjAwNiBBcHBsZSBDb21wdXRlciwgSW5jCiAgKiBDb3B5cmlnaHQg
KEMpIDIwMDkgR29vZ2xlLCBJbmMuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgUmVuYXRhIEhvZG92
YW4gPHJlbmlAd2Via2l0Lm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAxMSBVbml2ZXJzaXR5IG9m
IFN6ZWdlZAogICoKICAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJl
ZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhl
IEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCkBAIC0yNSw4NiArMjcsMjEgQEAKICNkZWZpbmUg
UmVuZGVyU1ZHUGF0aF9oCiAKICNpZiBFTkFCTEUoU1ZHKQotI2luY2x1ZGUgIkFmZmluZVRyYW5z
Zm9ybS5oIgotI2luY2x1ZGUgIkZsb2F0UmVjdC5oIgotI2luY2x1ZGUgIlJlbmRlclNWR01vZGVs
T2JqZWN0LmgiCi0jaW5jbHVkZSAiU1ZHTWFya2VyTGF5b3V0SW5mby5oIgorI2luY2x1ZGUgIlJl
bmRlclNWR1NoYXBlLmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotY2xhc3MgRmxvYXRQb2lu
dDsKLWNsYXNzIEdyYXBoaWNzQ29udGV4dFN0YXRlU2F2ZXI7Ci1jbGFzcyBSZW5kZXJTVkdDb250
YWluZXI7Ci1jbGFzcyBTVkdTdHlsZWRUcmFuc2Zvcm1hYmxlRWxlbWVudDsKLQotY2xhc3MgUmVu
ZGVyU1ZHUGF0aCA6IHB1YmxpYyBSZW5kZXJTVkdNb2RlbE9iamVjdCB7CisvLyBGSVhNRTogUmVu
ZGVyU1ZHUGF0aCB3aWxsIGJlIHJlbW92ZWQgd2hlbiBhbGwgU1ZHIHNoYXBlcyB3aWxsIGJlIHJl
bmRlcmVkIHZpYSBSZW5kZXJTVkdTaGFwZS4KK2NsYXNzIFJlbmRlclNWR1BhdGggOiBwdWJsaWMg
UmVuZGVyU1ZHU2hhcGUgewogcHVibGljOgotICAgIGV4cGxpY2l0IFJlbmRlclNWR1BhdGgoU1ZH
U3R5bGVkVHJhbnNmb3JtYWJsZUVsZW1lbnQqKTsKKyAgICBSZW5kZXJTVkdQYXRoKFNWR1N0eWxl
ZFRyYW5zZm9ybWFibGVFbGVtZW50Kik7CiAgICAgdmlydHVhbCB+UmVuZGVyU1ZHUGF0aCgpOwog
Ci0gICAgY29uc3QgUGF0aCYgcGF0aCgpIGNvbnN0IHsgcmV0dXJuIG1fcGF0aDsgfQotICAgIHZv
aWQgc2V0TmVlZHNQYXRoVXBkYXRlKCkgeyBtX25lZWRzUGF0aFVwZGF0ZSA9IHRydWU7IH0KLSAg
ICB2aXJ0dWFsIHZvaWQgc2V0TmVlZHNCb3VuZGFyaWVzVXBkYXRlKCkgeyBtX25lZWRzQm91bmRh
cmllc1VwZGF0ZSA9IHRydWU7IH0KLSAgICB2aXJ0dWFsIHZvaWQgc2V0TmVlZHNUcmFuc2Zvcm1V
cGRhdGUoKSB7IG1fbmVlZHNUcmFuc2Zvcm1VcGRhdGUgPSB0cnVlOyB9Ci0KIHByaXZhdGU6Ci0g
ICAgLy8gSGl0LWRldGVjdGlvbiBzZXBlcmF0ZWQgZm9yIHRoZSBmaWxsIGFuZCB0aGUgc3Ryb2tl
Ci0gICAgYm9vbCBmaWxsQ29udGFpbnMoY29uc3QgRmxvYXRQb2ludCYsIGJvb2wgcmVxdWlyZXNG
aWxsID0gdHJ1ZSwgV2luZFJ1bGUgZmlsbFJ1bGUgPSBSVUxFX05PTlpFUk8pOwotICAgIGJvb2wg
c3Ryb2tlQ29udGFpbnMoY29uc3QgRmxvYXRQb2ludCYsIGJvb2wgcmVxdWlyZXNTdHJva2UgPSB0
cnVlKTsKLQotICAgIHZpcnR1YWwgRmxvYXRSZWN0IG9iamVjdEJvdW5kaW5nQm94KCkgY29uc3Qg
eyByZXR1cm4gbV9maWxsQm91bmRpbmdCb3g7IH0KLSAgICB2aXJ0dWFsIEZsb2F0UmVjdCBzdHJv
a2VCb3VuZGluZ0JveCgpIGNvbnN0IHsgcmV0dXJuIG1fc3Ryb2tlQW5kTWFya2VyQm91bmRpbmdC
b3g7IH0KLSAgICB2aXJ0dWFsIEZsb2F0UmVjdCByZXBhaW50UmVjdEluTG9jYWxDb29yZGluYXRl
cygpIGNvbnN0IHsgcmV0dXJuIG1fcmVwYWludEJvdW5kaW5nQm94OyB9Ci0gICAgdmlydHVhbCBj
b25zdCBBZmZpbmVUcmFuc2Zvcm0mIGxvY2FsVG9QYXJlbnRUcmFuc2Zvcm0oKSBjb25zdCB7IHJl
dHVybiBtX2xvY2FsVHJhbnNmb3JtOyB9Ci0KICAgICB2aXJ0dWFsIGJvb2wgaXNTVkdQYXRoKCkg
Y29uc3QgeyByZXR1cm4gdHJ1ZTsgfQogICAgIHZpcnR1YWwgY29uc3QgY2hhciogcmVuZGVyTmFt
ZSgpIGNvbnN0IHsgcmV0dXJuICJSZW5kZXJTVkdQYXRoIjsgfQotCi0gICAgdmlydHVhbCB2b2lk
IGxheW91dCgpOwotICAgIHZpcnR1YWwgdm9pZCBwYWludChQYWludEluZm8mLCBjb25zdCBMYXlv
dXRQb2ludCYpOwotICAgIHZpcnR1YWwgdm9pZCBhZGRGb2N1c1JpbmdSZWN0cyhWZWN0b3I8TGF5
b3V0UmVjdD4mLCBjb25zdCBMYXlvdXRQb2ludCYpOwotCi0gICAgdmlydHVhbCBib29sIG5vZGVB
dEZsb2F0UG9pbnQoY29uc3QgSGl0VGVzdFJlcXVlc3QmLCBIaXRUZXN0UmVzdWx0JiwgY29uc3Qg
RmxvYXRQb2ludCYgcG9pbnRJblBhcmVudCwgSGl0VGVzdEFjdGlvbik7Ci0KLSAgICBGbG9hdFJl
Y3QgY2FsY3VsYXRlTWFya2VyQm91bmRzSWZOZWVkZWQoKTsKLSAgICB2b2lkIHVwZGF0ZUNhY2hl
ZEJvdW5kYXJpZXMoKTsKLQotICAgIHZvaWQgc2V0dXBTcXVhcmVDYXBQYXRoKFBhdGgqJiB1c2VQ
YXRoLCBpbnQmIGFwcGx5TW9kZSk7Ci0gICAgYm9vbCBzZXR1cE5vblNjYWxpbmdTdHJva2VQYXRo
KFBhdGgqJiB1c2VQYXRoLCBHcmFwaGljc0NvbnRleHRTdGF0ZVNhdmVyJik7Ci0gICAgYm9vbCBz
aG91bGRTdHJva2VaZXJvTGVuZ3RoU3VicGF0aCgpIGNvbnN0OwotICAgIEZsb2F0UmVjdCB6ZXJv
TGVuZ3RoU3VicGF0aFJlY3QoKSBjb25zdDsKLQotcHJpdmF0ZToKLSAgICB2aXJ0dWFsIEFmZmlu
ZVRyYW5zZm9ybSBsb2NhbFRyYW5zZm9ybSgpIGNvbnN0IHsgcmV0dXJuIG1fbG9jYWxUcmFuc2Zv
cm07IH0KLSAgICB2b2lkIGZpbGxBbmRTdHJva2VQYXRoKEdyYXBoaWNzQ29udGV4dCopOwotCi0g
ICAgYm9vbCBtX25lZWRzQm91bmRhcmllc1VwZGF0ZSA6IDE7Ci0gICAgYm9vbCBtX25lZWRzUGF0
aFVwZGF0ZSA6IDE7Ci0gICAgYm9vbCBtX25lZWRzVHJhbnNmb3JtVXBkYXRlIDogMTsKLQotICAg
IG11dGFibGUgUGF0aCBtX3BhdGg7Ci0gICAgRmxvYXRSZWN0IG1fZmlsbEJvdW5kaW5nQm94Owot
ICAgIEZsb2F0UmVjdCBtX3N0cm9rZUFuZE1hcmtlckJvdW5kaW5nQm94OwotICAgIEZsb2F0UmVj
dCBtX3JlcGFpbnRCb3VuZGluZ0JveDsKLSAgICBTVkdNYXJrZXJMYXlvdXRJbmZvIG1fbWFya2Vy
TGF5b3V0SW5mbzsKLSAgICBBZmZpbmVUcmFuc2Zvcm0gbV9sb2NhbFRyYW5zZm9ybTsKIH07CiAK
LWlubGluZSBSZW5kZXJTVkdQYXRoKiB0b1JlbmRlclNWR1BhdGgoUmVuZGVyT2JqZWN0KiBvYmpl
Y3QpCi17Ci0gICAgQVNTRVJUKCFvYmplY3QgfHwgb2JqZWN0LT5pc1NWR1BhdGgoKSk7Ci0gICAg
cmV0dXJuIHN0YXRpY19jYXN0PFJlbmRlclNWR1BhdGgqPihvYmplY3QpOwotfQotCi1pbmxpbmUg
Y29uc3QgUmVuZGVyU1ZHUGF0aCogdG9SZW5kZXJTVkdQYXRoKGNvbnN0IFJlbmRlck9iamVjdCog
b2JqZWN0KQotewotICAgIEFTU0VSVCghb2JqZWN0IHx8IG9iamVjdC0+aXNTVkdQYXRoKCkpOwot
ICAgIHJldHVybiBzdGF0aWNfY2FzdDxjb25zdCBSZW5kZXJTVkdQYXRoKj4ob2JqZWN0KTsKLX0K
LQotLy8gVGhpcyB3aWxsIGNhdGNoIGFueW9uZSBkb2luZyBhbiB1bm5lY2Vzc2FyeSBjYXN0Lgot
dm9pZCB0b1JlbmRlclNWR1BhdGgoY29uc3QgUmVuZGVyU1ZHUGF0aCopOwotCiB9CiAKICNlbmRp
ZiAvLyBFTkFCTEUoU1ZHKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2
Zy9SZW5kZXJTVkdSZWN0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVy
U1ZHUmVjdC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTkwZmYyNwot
LS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZH
UmVjdC5jcHAKQEAgLTAsMCArMSwxMjQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgVW5p
dmVyc2l0eSBvZiBTemVnZWQKKyAqIENvcHlyaWdodCAoQykgMjAxMSBSZW5hdGEgSG9kb3ZhbiAo
cmVuaUB3ZWJraXQub3JnKQorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFVOSVZFUlNJVFkgT0YgU1pFR0VEIGBgQVMg
SVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVU5JVkVSU0lUWSBPRiBTWkVHRUQgT1IKKyAq
IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBP
UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
CisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVk
ZSAiY29uZmlnLmgiCisKKyNpZiBFTkFCTEUoU1ZHKQorI2luY2x1ZGUgIlJlbmRlclNWR1JlY3Qu
aCIKKworI2luY2x1ZGUgIlNWR05hbWVzLmgiCisjaW5jbHVkZSAiU1ZHUmVjdEVsZW1lbnQuaCIK
KworbmFtZXNwYWNlIFdlYkNvcmUgeworCitSZW5kZXJTVkdSZWN0OjpSZW5kZXJTVkdSZWN0KFNW
R1N0eWxlZFRyYW5zZm9ybWFibGVFbGVtZW50KiBub2RlKQorICAgIDogUmVuZGVyU1ZHU2hhcGUo
bm9kZSkKK3sKK30KKworUmVuZGVyU1ZHUmVjdDo6flJlbmRlclNWR1JlY3QoKQoreworfQorCit2
b2lkIFJlbmRlclNWR1JlY3Q6OmNyZWF0ZVNoYXBlKCkKK3sKKyAgICAvLyBDbGVhciBtX3JlY3Qu
CisgICAgbV9yZWN0ID0gRmxvYXRSZWN0KCk7CisgICAgU1ZHUmVjdEVsZW1lbnQqIHJlY3QgPSBz
dGF0aWNfY2FzdDxTVkdSZWN0RWxlbWVudCo+KG5vZGUoKSk7CisgICAgQVNTRVJUKHJlY3QpOwor
ICAgIGJvb2wgaGFzUnggPSByZWN0LT5oYXNBdHRyaWJ1dGUoU1ZHTmFtZXM6OnJ4QXR0cik7Cisg
ICAgYm9vbCBoYXNSeSA9IHJlY3QtPmhhc0F0dHJpYnV0ZShTVkdOYW1lczo6cnlBdHRyKTsKKyAg
ICAvLyBGYWxsYmFjayB0byB0aGUgcGFyZW50IGlmIHJlY3QgaGFzIHNwZWNpYWwgZmVhdHVyZXMu
CisgICAgaWYgKGhhc1J4IHx8IGhhc1J5KSB7CisgICAgICAgUmVuZGVyU1ZHU2hhcGU6OmNyZWF0
ZVNoYXBlKCk7CisgICAgICAgc2V0SXNGaWxsRmFsbGJhY2soKTsKKyAgICAgICByZXR1cm47Cisg
ICAgfQorICAgIGZsb2F0IHdpZHRoVmFsdWUgPSByZWN0LT53aWR0aCgpLnZhbHVlKHJlY3QpOwor
ICAgIGlmICh3aWR0aFZhbHVlIDw9IDApCisgICAgICAgIHJldHVybjsKKworICAgIGZsb2F0IGhl
aWdodFZhbHVlID0gcmVjdC0+aGVpZ2h0KCkudmFsdWUocmVjdCk7CisgICAgaWYgKGhlaWdodFZh
bHVlIDw9IDApCisgICAgICAgIHJldHVybjsKKworICAgIGZsb2F0IHhWYWx1ZSA9IHJlY3QtPngo
KS52YWx1ZShyZWN0KTsKKyAgICBmbG9hdCB5VmFsdWUgPSByZWN0LT55KCkudmFsdWUocmVjdCk7
CisgICAgbV9yZWN0ID0gRmxvYXRSZWN0KHhWYWx1ZSwgeVZhbHVlLCB3aWR0aFZhbHVlLCBoZWln
aHRWYWx1ZSk7CisgICAgLy8gVG8gZGVjZWlkZSB0aGUgc3Ryb2tlIGNvbnRhaW5pbmcgd2UgY3Jl
YXRlIHR3byByZWN0cyB3aGljaCByZXByZXNlbnQgdGhlIGlubmVyIGFuZAorICAgIC8vIHRoZSBv
dXRlciBzdHJva2UgYm9yZGVycy4gVGhlIGNvbnRhaW5pbmcgZXhpc3RzLCBpZiB0aGUgcG9pbnQg
aXMgYmV0d2VlbiB0aGVtLgorICAgIGZsb2F0IHN0cm9rZVdpZHRoID0gdGhpcy0+c3Ryb2tlV2lk
dGgoKTsKKyAgICBtX2lubmVyU3Ryb2tlUmVjdCA9IG1fcmVjdDsKKyAgICBtX291dGVyU3Ryb2tl
UmVjdCA9IG1fcmVjdDsKKyAgICBtX2lubmVyU3Ryb2tlUmVjdC5pbmZsYXRlKC1zdHJva2VXaWR0
aCAvIDIpOworICAgIG1fb3V0ZXJTdHJva2VSZWN0LmluZmxhdGUoc3Ryb2tlV2lkdGggLyAyKTsK
K30KKworCitGbG9hdFJlY3QgUmVuZGVyU1ZHUmVjdDo6b2JqZWN0Qm91bmRpbmdCb3goKSBjb25z
dAoreworICAgIGlmIChpc0ZpbGxGYWxsYmFjaygpKQorICAgICAgICByZXR1cm4gUmVuZGVyU1ZH
U2hhcGU6Om9iamVjdEJvdW5kaW5nQm94KCk7CisgICAgcmV0dXJuIG1fcmVjdDsKK30KKworRmxv
YXRSZWN0IFJlbmRlclNWR1JlY3Q6OnN0cm9rZUJvdW5kaW5nQm94KCkKK3sKKyAgICBpZiAoaXNG
aWxsRmFsbGJhY2soKSAmJiAhc3R5bGUoKS0+c3ZnU3R5bGUoKS0+c3Ryb2tlRGFzaEFycmF5KCku
aXNFbXB0eSgpKQorICAgICAgICByZXR1cm4gUmVuZGVyU1ZHU2hhcGU6OnN0cm9rZUJvdW5kaW5n
Qm94KCk7CisgICAgLy8gSWYgd2UgaW5mbGF0ZSB0aGUgbV9yZWN0IHdpdGggdGhlIGhhbGYgc2l6
ZSBzdHJva2VXaWR0aCwgd2UgZ2V0IHRoZSBzdHJva2VCb3VuZGluZ0JveCBpbiBub24tZmFsbGJh
Y2sgcGF0aCBtb2RlLgorICAgIEZsb2F0UmVjdCBzdHJva2VSZWN0ID0gbV9yZWN0OworICAgIHN0
cm9rZVJlY3QuaW5mbGF0ZSh0aGlzLT5zdHJva2VXaWR0aCgpIC8gMik7CisgICAgcmV0dXJuIHN0
cm9rZVJlY3Q7Cit9CisKK3ZvaWQgUmVuZGVyU1ZHUmVjdDo6ZmlsbFNoYXBlKEdyYXBoaWNzQ29u
dGV4dCogY29udGV4dCkKK3sKKyAgICAgY29udGV4dC0+ZmlsbFJlY3QobV9yZWN0KTsKK30KKwor
dm9pZCBSZW5kZXJTVkdSZWN0OjpzdHJva2VTaGFwZShHcmFwaGljc0NvbnRleHQqIGNvbnRleHQp
Cit7CisgICAgY29udGV4dC0+c3Ryb2tlUmVjdChtX3JlY3QsIHRoaXMtPnN0cm9rZVdpZHRoKCkp
OworfQorCitib29sIFJlbmRlclNWR1JlY3Q6OnN0cm9rZUNvbnRhaW5zU2xvd0Nhc2UoY29uc3Qg
RmxvYXRQb2ludCYgcG9pbnQpCit7CisgICAgcmV0dXJuICghbV9pbm5lclN0cm9rZVJlY3QuY29u
dGFpbnMocG9pbnQpIHx8ICFtX2lubmVyU3Ryb2tlUmVjdC5jb21wcmlzZXMocG9pbnQpKQorICAg
ICAgICAgICAgJiYgbV9vdXRlclN0cm9rZVJlY3QuY29udGFpbnMocG9pbnQpOworfQorCitib29s
IFJlbmRlclNWR1JlY3Q6OmZpbGxDb250YWluc1Nsb3dDYXNlKGNvbnN0IEZsb2F0UG9pbnQmIHBv
aW50LCBjb25zdCBXaW5kUnVsZSYgZmlsbFJ1bGUpIGNvbnN0Cit7CisgICAgaWYgKGlzRmlsbEZh
bGxiYWNrKCkpCisgICAgICAgIHJldHVybiBSZW5kZXJTVkdTaGFwZTo6ZmlsbENvbnRhaW5zU2xv
d0Nhc2UocG9pbnQsIGZpbGxSdWxlKTsKKyAgICByZXR1cm4gbV9yZWN0LmNvbnRhaW5zKHBvaW50
LngoKSwgcG9pbnQueSgpKTsKK30KKworfQorCisjZW5kaWYgLy8gRU5BQkxFKFNWRykKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVjdC5oIGIvU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZWN0LmgKbmV3IGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDAwMDAwMC4uOWRlNzYwYQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVjdC5oCkBAIC0wLDAgKzEsNjMgQEAKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgVW5pdmVyc2l0eSBvZiBTemVnZWQKKyAqIENvcHlyaWdo
dCAoQykgMjAxMSBSZW5hdGEgSG9kb3ZhbiAocmVuaUB3ZWJraXQub3JnKQorICogQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IFVOSVZFUlNJVFkgT0YgU1pFR0VEIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICog
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwg
VU5JVkVSU0lUWSBPRiBTWkVHRUQgT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAor
ICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICog
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIFJlbmRlclNWR1JlY3RfaAorI2RlZmluZSBSZW5k
ZXJTVkdSZWN0X2gKKworI2lmIEVOQUJMRShTVkcpCisjaW5jbHVkZSAiUmVuZGVyU1ZHUGF0aC5o
IgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIFJlbmRlclNWR1JlY3QgOiBwdWJsaWMg
UmVuZGVyU1ZHU2hhcGUgeworcHVibGljOgorICAgIGV4cGxpY2l0IFJlbmRlclNWR1JlY3QoU1ZH
U3R5bGVkVHJhbnNmb3JtYWJsZUVsZW1lbnQqKTsKKyAgICB2aXJ0dWFsIH5SZW5kZXJTVkdSZWN0
KCk7CisKK3ByaXZhdGU6CisgICAgdmlydHVhbCBib29sIGlzU1ZHUmVjdCgpIGNvbnN0IHsgcmV0
dXJuIHRydWU7IH0KKyAgICB2aXJ0dWFsIGNvbnN0IGNoYXIqIHJlbmRlck5hbWUoKSBjb25zdCB7
IHJldHVybiAiUmVuZGVyU1ZHUmVjdCI7IH0KKworICAgIHZvaWQgY3JlYXRlU2hhcGUoKTsKKyAg
ICBib29sIGlzRW1wdHkoKSBjb25zdCB7IHJldHVybiBoYXNQYXRoKCkgPyBSZW5kZXJTVkdTaGFw
ZTo6aXNFbXB0eSgpIDogbV9yZWN0LmlzRW1wdHkoKTsgfTsKKyAgICB2b2lkIGZpbGxTaGFwZShH
cmFwaGljc0NvbnRleHQqKTsKKyAgICBGbG9hdFJlY3Qgb2JqZWN0Qm91bmRpbmdCb3goKSBjb25z
dDsKKyAgICBGbG9hdFJlY3Qgc3Ryb2tlQm91bmRpbmdCb3goKTsKKyAgICB2b2lkIHN0cm9rZVNo
YXBlKEdyYXBoaWNzQ29udGV4dCopOworICAgIGJvb2wgc3Ryb2tlQ29udGFpbnNTbG93Q2FzZShj
b25zdCBGbG9hdFBvaW50Jik7CisgICAgYm9vbCBmaWxsQ29udGFpbnNTbG93Q2FzZShjb25zdCBG
bG9hdFBvaW50JiwgY29uc3QgV2luZFJ1bGUmKSBjb25zdDsKKworcHJpdmF0ZToKKyAgICBGbG9h
dFJlY3QgbV9yZWN0OworICAgIEZsb2F0UmVjdCBtX2lubmVyU3Ryb2tlUmVjdDsKKyAgICBGbG9h
dFJlY3QgbV9vdXRlclN0cm9rZVJlY3Q7Cit9OworCit9CisKKyNlbmRpZiAvLyBFTkFCTEUoU1ZH
KQorI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRl
clNWR1Jlc291cmNlLmggYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jl
c291cmNlLmgKaW5kZXggYTY3YmE3My4uMmI0NDM4ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJjZS5oCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2UuaApAQCAtMjEsNiArMjEsNyBAQAogI2Rl
ZmluZSBSZW5kZXJTVkdSZXNvdXJjZV9oCiAKICNpZiBFTkFCTEUoU1ZHKQorI2luY2x1ZGUgIlJl
bmRlclNWR1NoYXBlLmgiCiAjaW5jbHVkZSAiUmVuZGVyU3R5bGVDb25zdGFudHMuaCIKICNpbmNs
dWRlICJTVkdEb2N1bWVudEV4dGVuc2lvbnMuaCIKIApAQCAtNjEsNyArNjIsNyBAQCBwdWJsaWM6
CiAgICAgdmlydHVhbCB2b2lkIHJlbW92ZUNsaWVudEZyb21DYWNoZShSZW5kZXJPYmplY3QqLCBi
b29sIG1hcmtGb3JJbnZhbGlkYXRpb24gPSB0cnVlKSA9IDA7CiAKICAgICB2aXJ0dWFsIGJvb2wg
YXBwbHlSZXNvdXJjZShSZW5kZXJPYmplY3QqLCBSZW5kZXJTdHlsZSosIEdyYXBoaWNzQ29udGV4
dComLCB1bnNpZ25lZCBzaG9ydCByZXNvdXJjZU1vZGUpID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQg
cG9zdEFwcGx5UmVzb3VyY2UoUmVuZGVyT2JqZWN0KiwgR3JhcGhpY3NDb250ZXh0KiYsIHVuc2ln
bmVkIHNob3J0LCBjb25zdCBQYXRoKikgeyB9CisgICAgdmlydHVhbCB2b2lkIHBvc3RBcHBseVJl
c291cmNlKFJlbmRlclNWR1NoYXBlKiwgR3JhcGhpY3NDb250ZXh0KiYsIHVuc2lnbmVkIHNob3J0
LCBjb25zdCBQYXRoKikgeyB9CiAgICAgdmlydHVhbCBGbG9hdFJlY3QgcmVzb3VyY2VCb3VuZGlu
Z0JveChSZW5kZXJPYmplY3QqKSA9IDA7CiAKICAgICB2aXJ0dWFsIFJlbmRlclNWR1Jlc291cmNl
VHlwZSByZXNvdXJjZVR5cGUoKSBjb25zdCA9IDA7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291cmNlQ2xpcHBlci5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291cmNlQ2xpcHBlci5jcHAKaW5kZXggMjM4
YzA5Ni4uMWQ4MjEyMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9S
ZW5kZXJTVkdSZXNvdXJjZUNsaXBwZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VDbGlwcGVyLmNwcApAQCAtMjQyLDcgKzI0Miw3IEBAIGJv
b2wgUmVuZGVyU1ZHUmVzb3VyY2VDbGlwcGVyOjpkcmF3Q29udGVudEludG9NYXNrSW1hZ2UoQ2xp
cHBlckRhdGEqIGNsaXBwZXJEYXRhCiAgICAgICAgIH0KIAogICAgICAgICAvLyBPbmx5IHNoYXBl
cywgcGF0aHMgYW5kIHRleHRzIGFyZSBhbGxvd2VkIGZvciBjbGlwcGluZy4KLSAgICAgICAgaWYg
KCFyZW5kZXJlci0+aXNTVkdQYXRoKCkgJiYgIXJlbmRlcmVyLT5pc1NWR1RleHQoKSkKKyAgICAg
ICAgaWYgKCFyZW5kZXJlci0+aXNTVkdTaGFwZSgpICYmICFyZW5kZXJlci0+aXNTVkdUZXh0KCkp
CiAgICAgICAgICAgICBjb250aW51ZTsKIAogICAgICAgICAvLyBTYXZlIHRoZSBvbGQgUmVuZGVy
U3R5bGUgb2YgdGhlIGN1cnJlbnQgb2JqZWN0IGZvciByZXN0b3JpbmcgYWZ0ZXIgZHJhd2luZwpA
QCAtMjg0LDcgKzI4NCw3IEBAIHZvaWQgUmVuZGVyU1ZHUmVzb3VyY2VDbGlwcGVyOjpjYWxjdWxh
dGVDbGlwQ29udGVudFJlcGFpbnRSZWN0KCkKICAgICAgICAgUmVuZGVyT2JqZWN0KiByZW5kZXJl
ciA9IGNoaWxkTm9kZS0+cmVuZGVyZXIoKTsKICAgICAgICAgaWYgKCFjaGlsZE5vZGUtPmlzU1ZH
RWxlbWVudCgpIHx8ICFzdGF0aWNfY2FzdDxTVkdFbGVtZW50Kj4oY2hpbGROb2RlKS0+aXNTdHls
ZWQoKSB8fCAhcmVuZGVyZXIpCiAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgaWYgKCFy
ZW5kZXJlci0+aXNTVkdQYXRoKCkgJiYgIXJlbmRlcmVyLT5pc1NWR1RleHQoKSAmJiAhcmVuZGVy
ZXItPmlzU1ZHU2hhZG93VHJlZVJvb3RDb250YWluZXIoKSkKKyAgICAgICAgaWYgKCFyZW5kZXJl
ci0+aXNTVkdTaGFwZSgpICYmICFyZW5kZXJlci0+aXNTVkdUZXh0KCkgJiYgIXJlbmRlcmVyLT5p
c1NWR1NoYWRvd1RyZWVSb290Q29udGFpbmVyKCkpCiAgICAgICAgICAgICBjb250aW51ZTsKICAg
ICAgICAgUmVuZGVyU3R5bGUqIHN0eWxlID0gcmVuZGVyZXItPnN0eWxlKCk7CiAgICAgICAgIGlm
ICghc3R5bGUgfHwgc3R5bGUtPmRpc3BsYXkoKSA9PSBOT05FIHx8IHN0eWxlLT52aXNpYmlsaXR5
KCkgIT0gVklTSUJMRSkKQEAgLTMxMCw3ICszMTAsNyBAQCBib29sIFJlbmRlclNWR1Jlc291cmNl
Q2xpcHBlcjo6aGl0VGVzdENsaXBDb250ZW50KGNvbnN0IEZsb2F0UmVjdCYgb2JqZWN0Qm91bmRp
bgogICAgICAgICBSZW5kZXJPYmplY3QqIHJlbmRlcmVyID0gY2hpbGROb2RlLT5yZW5kZXJlcigp
OwogICAgICAgICBpZiAoIWNoaWxkTm9kZS0+aXNTVkdFbGVtZW50KCkgfHwgIXN0YXRpY19jYXN0
PFNWR0VsZW1lbnQqPihjaGlsZE5vZGUpLT5pc1N0eWxlZCgpIHx8ICFyZW5kZXJlcikKICAgICAg
ICAgICAgIGNvbnRpbnVlOwotICAgICAgICBpZiAoIXJlbmRlcmVyLT5pc1NWR1BhdGgoKSAmJiAh
cmVuZGVyZXItPmlzU1ZHVGV4dCgpICYmICFyZW5kZXJlci0+aXNTVkdTaGFkb3dUcmVlUm9vdENv
bnRhaW5lcigpKQorICAgICAgICBpZiAoIXJlbmRlcmVyLT5pc1NWR1NoYXBlKCkgJiYgIXJlbmRl
cmVyLT5pc1NWR1RleHQoKSAmJiAhcmVuZGVyZXItPmlzU1ZHU2hhZG93VHJlZVJvb3RDb250YWlu
ZXIoKSkKICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICBJbnRQb2ludCBoaXRQb2ludDsK
ICAgICAgICAgSGl0VGVzdFJlc3VsdCByZXN1bHQoaGl0UG9pbnQpOwpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJjZUNvbnRhaW5lci5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291cmNlQ29udGFpbmVy
LmNwcAppbmRleCA3NGQ1ZDY5Li5iNzRhZDZiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291cmNlQ29udGFpbmVyLmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291cmNlQ29udGFpbmVyLmNwcApAQCAt
MTgwLDcgKzE4MCw3IEBAIHZvaWQgUmVuZGVyU1ZHUmVzb3VyY2VDb250YWluZXI6OnJlZ2lzdGVy
UmVzb3VyY2UoKQogLy8gRklYTUU6IFRoaXMgZG9lcyBub3QgYmVsb25nIGhlcmUuCiBBZmZpbmVU
cmFuc2Zvcm0gUmVuZGVyU1ZHUmVzb3VyY2VDb250YWluZXI6OnRyYW5zZm9ybU9uTm9uU2NhbGlu
Z1N0cm9rZShSZW5kZXJPYmplY3QqIG9iamVjdCwgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiByZXNv
dXJjZVRyYW5zZm9ybSkKIHsKLSAgICBpZiAoIW9iamVjdC0+aXNTVkdQYXRoKCkpCisgICAgaWYg
KCFvYmplY3QtPmlzU1ZHU2hhcGUoKSkKICAgICAgICAgcmV0dXJuIHJlc291cmNlVHJhbnNmb3Jt
OwogCiAgICAgU1ZHU3R5bGVkVHJhbnNmb3JtYWJsZUVsZW1lbnQqIGVsZW1lbnQgPSBzdGF0aWNf
Y2FzdDxTVkdTdHlsZWRUcmFuc2Zvcm1hYmxlRWxlbWVudCo+KG9iamVjdC0+bm9kZSgpKTsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VG
aWx0ZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJj
ZUZpbHRlci5jcHAKaW5kZXggNGEwMmIxNy4uY2UxNGJmZSAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJjZUZpbHRlci5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJjZUZpbHRlci5jcHAKQEAg
LTI1OSw5ICsyNTksOSBAQCBib29sIFJlbmRlclNWR1Jlc291cmNlRmlsdGVyOjphcHBseVJlc291
cmNlKFJlbmRlck9iamVjdCogb2JqZWN0LCBSZW5kZXJTdHlsZSosCiAgICAgcmV0dXJuIHRydWU7
CiB9CiAKLXZvaWQgUmVuZGVyU1ZHUmVzb3VyY2VGaWx0ZXI6OnBvc3RBcHBseVJlc291cmNlKFJl
bmRlck9iamVjdCogb2JqZWN0LCBHcmFwaGljc0NvbnRleHQqJiBjb250ZXh0LCB1bnNpZ25lZCBz
aG9ydCByZXNvdXJjZU1vZGUsIGNvbnN0IFBhdGgqKQordm9pZCBSZW5kZXJTVkdSZXNvdXJjZUZp
bHRlcjo6cG9zdEFwcGx5UmVzb3VyY2UoUmVuZGVyU1ZHU2hhcGUqIHNoYXBlLCBHcmFwaGljc0Nv
bnRleHQqJiBjb250ZXh0LCB1bnNpZ25lZCBzaG9ydCByZXNvdXJjZU1vZGUsIGNvbnN0IFBhdGgq
KQogewotICAgIEFTU0VSVChvYmplY3QpOworICAgIEFTU0VSVChzaGFwZSk7CiAgICAgQVNTRVJU
KGNvbnRleHQpOwogI2lmbmRlZiBOREVCVUcKICAgICBBU1NFUlQocmVzb3VyY2VNb2RlID09IEFw
cGx5VG9EZWZhdWx0TW9kZSk7CkBAIC0yNjksNiArMjY5LDcgQEAgdm9pZCBSZW5kZXJTVkdSZXNv
dXJjZUZpbHRlcjo6cG9zdEFwcGx5UmVzb3VyY2UoUmVuZGVyT2JqZWN0KiBvYmplY3QsIEdyYXBo
aWNzQ28KICAgICBVTlVTRURfUEFSQU0ocmVzb3VyY2VNb2RlKTsKICNlbmRpZgogCisgICAgUmVu
ZGVyT2JqZWN0KiBvYmplY3QgPSBzdGF0aWNfY2FzdDxSZW5kZXJPYmplY3QqPihzaGFwZSk7CiAg
ICAgRmlsdGVyRGF0YSogZmlsdGVyRGF0YSA9IG1fZmlsdGVyLmdldChvYmplY3QpOwogICAgIGlm
ICghZmlsdGVyRGF0YSkKICAgICAgICAgcmV0dXJuOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJjZUZpbHRlci5oIGIvU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJjZUZpbHRlci5oCmluZGV4IDVhNWIwOTIu
LjQ5YWExNzcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVy
U1ZHUmVzb3VyY2VGaWx0ZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1Jl
bmRlclNWR1Jlc291cmNlRmlsdGVyLmgKQEAgLTcyLDcgKzcyLDcgQEAgcHVibGljOgogICAgIHZp
cnR1YWwgdm9pZCByZW1vdmVDbGllbnRGcm9tQ2FjaGUoUmVuZGVyT2JqZWN0KiwgYm9vbCBtYXJr
Rm9ySW52YWxpZGF0aW9uID0gdHJ1ZSk7CiAKICAgICB2aXJ0dWFsIGJvb2wgYXBwbHlSZXNvdXJj
ZShSZW5kZXJPYmplY3QqLCBSZW5kZXJTdHlsZSosIEdyYXBoaWNzQ29udGV4dComLCB1bnNpZ25l
ZCBzaG9ydCByZXNvdXJjZU1vZGUpOwotICAgIHZpcnR1YWwgdm9pZCBwb3N0QXBwbHlSZXNvdXJj
ZShSZW5kZXJPYmplY3QqLCBHcmFwaGljc0NvbnRleHQqJiwgdW5zaWduZWQgc2hvcnQgcmVzb3Vy
Y2VNb2RlLCBjb25zdCBQYXRoKik7CisgICAgdmlydHVhbCB2b2lkIHBvc3RBcHBseVJlc291cmNl
KFJlbmRlclNWR1NoYXBlKiwgR3JhcGhpY3NDb250ZXh0KiYsIHVuc2lnbmVkIHNob3J0IHJlc291
cmNlTW9kZSwgY29uc3QgUGF0aCopOwogCiAgICAgdmlydHVhbCBGbG9hdFJlY3QgcmVzb3VyY2VC
b3VuZGluZ0JveChSZW5kZXJPYmplY3QqKTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJjZUdyYWRpZW50LmNwcCBiL1NvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VHcmFkaWVudC5jcHAKaW5kZXggMWFh
YjkzNS4uM2EzNjVkMGMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcv
UmVuZGVyU1ZHUmVzb3VyY2VHcmFkaWVudC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJjZUdyYWRpZW50LmNwcApAQCAtMjcsNiArMjcsNyBAQAog
CiAjaW5jbHVkZSAiR3JhZGllbnRBdHRyaWJ1dGVzLmgiCiAjaW5jbHVkZSAiR3JhcGhpY3NDb250
ZXh0LmgiCisjaW5jbHVkZSAiUmVuZGVyU1ZHU2hhcGUuaCIKICNpbmNsdWRlICJSZW5kZXJTVkdU
ZXh0LmgiCiAjaW5jbHVkZSAiU1ZHSW1hZ2VCdWZmZXJUb29scy5oIgogI2luY2x1ZGUgIlNWR1Jl
bmRlclN1cHBvcnQuaCIKQEAgLTIzMSwxMiArMjMyLDEzIEBAIGJvb2wgUmVuZGVyU1ZHUmVzb3Vy
Y2VHcmFkaWVudDo6YXBwbHlSZXNvdXJjZShSZW5kZXJPYmplY3QqIG9iamVjdCwgUmVuZGVyU3R5
bGUqCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLXZvaWQgUmVuZGVyU1ZHUmVzb3VyY2VHcmFkaWVu
dDo6cG9zdEFwcGx5UmVzb3VyY2UoUmVuZGVyT2JqZWN0KiBvYmplY3QsIEdyYXBoaWNzQ29udGV4
dComIGNvbnRleHQsIHVuc2lnbmVkIHNob3J0IHJlc291cmNlTW9kZSwgY29uc3QgUGF0aCogcGF0
aCkKK3ZvaWQgUmVuZGVyU1ZHUmVzb3VyY2VHcmFkaWVudDo6cG9zdEFwcGx5UmVzb3VyY2UoUmVu
ZGVyU1ZHU2hhcGUqIHNoYXBlLCBHcmFwaGljc0NvbnRleHQqJiBjb250ZXh0LCB1bnNpZ25lZCBz
aG9ydCByZXNvdXJjZU1vZGUsIGNvbnN0IFBhdGgqIHBhdGgpCiB7CiAgICAgQVNTRVJUKGNvbnRl
eHQpOwogICAgIEFTU0VSVChyZXNvdXJjZU1vZGUgIT0gQXBwbHlUb0RlZmF1bHRNb2RlKTsKIAog
ICAgIGlmIChyZXNvdXJjZU1vZGUgJiBBcHBseVRvVGV4dE1vZGUpIHsKKyAgICAgICAgUmVuZGVy
T2JqZWN0KiBvYmplY3QgPSBzdGF0aWNfY2FzdDxSZW5kZXJPYmplY3QqPihzaGFwZSk7CiAjaWYg
VVNFKENHKQogICAgICAgICAvLyBDRyByZXF1aXJlcyBzcGVjaWFsIGhhbmRsaW5nIGZvciBncmFk
aWVudCBvbiB0ZXh0CiAgICAgICAgIGlmIChtX3NhdmVkQ29udGV4dCAmJiBtX2dyYWRpZW50LmNv
bnRhaW5zKG9iamVjdCkpIHsKQEAgLTI1OSwxMSArMjYxLDExIEBAIHZvaWQgUmVuZGVyU1ZHUmVz
b3VyY2VHcmFkaWVudDo6cG9zdEFwcGx5UmVzb3VyY2UoUmVuZGVyT2JqZWN0KiBvYmplY3QsIEdy
YXBoaWNzCiAjZWxzZQogICAgICAgICBVTlVTRURfUEFSQU0ob2JqZWN0KTsKICNlbmRpZgotICAg
IH0gZWxzZSBpZiAocGF0aCkgeworICAgIH0gZWxzZSB7CiAgICAgICAgIGlmIChyZXNvdXJjZU1v
ZGUgJiBBcHBseVRvRmlsbE1vZGUpCi0gICAgICAgICAgICBjb250ZXh0LT5maWxsUGF0aCgqcGF0
aCk7CisgICAgICAgICAgICBwYXRoID8gY29udGV4dC0+ZmlsbFBhdGgoKnBhdGgpIDogc2hhcGUt
PmZpbGxTaGFwZShjb250ZXh0KTsKICAgICAgICAgZWxzZSBpZiAocmVzb3VyY2VNb2RlICYgQXBw
bHlUb1N0cm9rZU1vZGUpCi0gICAgICAgICAgICBjb250ZXh0LT5zdHJva2VQYXRoKCpwYXRoKTsK
KyAgICAgICAgICAgIHBhdGggPyBjb250ZXh0LT5zdHJva2VQYXRoKCpwYXRoKSA6IHNoYXBlLT5z
dHJva2VTaGFwZShjb250ZXh0KTsKICAgICB9CiAKICAgICBjb250ZXh0LT5yZXN0b3JlKCk7CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291cmNl
R3JhZGllbnQuaCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVzb3Vy
Y2VHcmFkaWVudC5oCmluZGV4IGRmNDkyZTIuLjM2NjRjM2IgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VHcmFkaWVudC5oCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VHcmFkaWVudC5oCkBA
IC01MCw3ICs1MCw3IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIHZvaWQgcmVtb3ZlQ2xpZW50RnJv
bUNhY2hlKFJlbmRlck9iamVjdCosIGJvb2wgbWFya0ZvckludmFsaWRhdGlvbiA9IHRydWUpOwog
CiAgICAgdmlydHVhbCBib29sIGFwcGx5UmVzb3VyY2UoUmVuZGVyT2JqZWN0KiwgUmVuZGVyU3R5
bGUqLCBHcmFwaGljc0NvbnRleHQqJiwgdW5zaWduZWQgc2hvcnQgcmVzb3VyY2VNb2RlKTsKLSAg
ICB2aXJ0dWFsIHZvaWQgcG9zdEFwcGx5UmVzb3VyY2UoUmVuZGVyT2JqZWN0KiwgR3JhcGhpY3ND
b250ZXh0KiYsIHVuc2lnbmVkIHNob3J0IHJlc291cmNlTW9kZSwgY29uc3QgUGF0aCopOworICAg
IHZpcnR1YWwgdm9pZCBwb3N0QXBwbHlSZXNvdXJjZShSZW5kZXJTVkdTaGFwZSosIEdyYXBoaWNz
Q29udGV4dComLCB1bnNpZ25lZCBzaG9ydCByZXNvdXJjZU1vZGUsIGNvbnN0IFBhdGgqKTsKICAg
ICB2aXJ0dWFsIEZsb2F0UmVjdCByZXNvdXJjZUJvdW5kaW5nQm94KFJlbmRlck9iamVjdCopIHsg
cmV0dXJuIEZsb2F0UmVjdCgpOyB9CiAKIHByb3RlY3RlZDoKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VQYXR0ZXJuLmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VQYXR0ZXJuLmNwcAppbmRl
eCA5ODMzODU2Li40ZmE2N2Q4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
c3ZnL1JlbmRlclNWR1Jlc291cmNlUGF0dGVybi5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJjZVBhdHRlcm4uY3BwCkBAIC0xODEsMTYgKzE4MSwx
NiBAQCBib29sIFJlbmRlclNWR1Jlc291cmNlUGF0dGVybjo6YXBwbHlSZXNvdXJjZShSZW5kZXJP
YmplY3QqIG9iamVjdCwgUmVuZGVyU3R5bGUqCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLXZvaWQg
UmVuZGVyU1ZHUmVzb3VyY2VQYXR0ZXJuOjpwb3N0QXBwbHlSZXNvdXJjZShSZW5kZXJPYmplY3Qq
LCBHcmFwaGljc0NvbnRleHQqJiBjb250ZXh0LCB1bnNpZ25lZCBzaG9ydCByZXNvdXJjZU1vZGUs
IGNvbnN0IFBhdGgqIHBhdGgpCit2b2lkIFJlbmRlclNWR1Jlc291cmNlUGF0dGVybjo6cG9zdEFw
cGx5UmVzb3VyY2UoUmVuZGVyU1ZHU2hhcGUqIHNoYXBlLCBHcmFwaGljc0NvbnRleHQqJiBjb250
ZXh0LCB1bnNpZ25lZCBzaG9ydCByZXNvdXJjZU1vZGUsIGNvbnN0IFBhdGgqIHBhdGgpCiB7CiAg
ICAgQVNTRVJUKGNvbnRleHQpOwogICAgIEFTU0VSVChyZXNvdXJjZU1vZGUgIT0gQXBwbHlUb0Rl
ZmF1bHRNb2RlKTsKIAotICAgIGlmIChwYXRoICYmICEocmVzb3VyY2VNb2RlICYgQXBwbHlUb1Rl
eHRNb2RlKSkgeworICAgIGlmICgvKnBhdGggJiYgKi8hKHJlc291cmNlTW9kZSAmIEFwcGx5VG9U
ZXh0TW9kZSkpIHsKICAgICAgICAgaWYgKHJlc291cmNlTW9kZSAmIEFwcGx5VG9GaWxsTW9kZSkK
LSAgICAgICAgICAgIGNvbnRleHQtPmZpbGxQYXRoKCpwYXRoKTsKKyAgICAgICAgICAgICBwYXRo
ID8gY29udGV4dC0+ZmlsbFBhdGgoKnBhdGgpIDogc2hhcGUtPmZpbGxTaGFwZShjb250ZXh0KTsK
ICAgICAgICAgZWxzZSBpZiAocmVzb3VyY2VNb2RlICYgQXBwbHlUb1N0cm9rZU1vZGUpCi0gICAg
ICAgICAgICBjb250ZXh0LT5zdHJva2VQYXRoKCpwYXRoKTsKKyAgICAgICAgICAgICBwYXRoID8g
Y29udGV4dC0+c3Ryb2tlUGF0aCgqcGF0aCkgOiBzaGFwZS0+c3Ryb2tlU2hhcGUoY29udGV4dCk7
CiAgICAgfQogCiAgICAgY29udGV4dC0+cmVzdG9yZSgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJjZVBhdHRlcm4uaCBiL1NvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VQYXR0ZXJuLmgKaW5kZXggYTY5
N2M3MS4uYzIyMDc5MCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9S
ZW5kZXJTVkdSZXNvdXJjZVBhdHRlcm4uaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
c3ZnL1JlbmRlclNWR1Jlc291cmNlUGF0dGVybi5oCkBAIC01Miw3ICs1Miw3IEBAIHB1YmxpYzoK
ICAgICB2aXJ0dWFsIHZvaWQgcmVtb3ZlQ2xpZW50RnJvbUNhY2hlKFJlbmRlck9iamVjdCosIGJv
b2wgbWFya0ZvckludmFsaWRhdGlvbiA9IHRydWUpOwogCiAgICAgdmlydHVhbCBib29sIGFwcGx5
UmVzb3VyY2UoUmVuZGVyT2JqZWN0KiwgUmVuZGVyU3R5bGUqLCBHcmFwaGljc0NvbnRleHQqJiwg
dW5zaWduZWQgc2hvcnQgcmVzb3VyY2VNb2RlKTsKLSAgICB2aXJ0dWFsIHZvaWQgcG9zdEFwcGx5
UmVzb3VyY2UoUmVuZGVyT2JqZWN0KiwgR3JhcGhpY3NDb250ZXh0KiYsIHVuc2lnbmVkIHNob3J0
IHJlc291cmNlTW9kZSwgY29uc3QgUGF0aCopOworICAgIHZpcnR1YWwgdm9pZCBwb3N0QXBwbHlS
ZXNvdXJjZShSZW5kZXJTVkdTaGFwZSosIEdyYXBoaWNzQ29udGV4dComLCB1bnNpZ25lZCBzaG9y
dCByZXNvdXJjZU1vZGUsIGNvbnN0IFBhdGgqKTsKICAgICB2aXJ0dWFsIEZsb2F0UmVjdCByZXNv
dXJjZUJvdW5kaW5nQm94KFJlbmRlck9iamVjdCopIHsgcmV0dXJuIEZsb2F0UmVjdCgpOyB9CiAK
ICAgICB2aXJ0dWFsIFJlbmRlclNWR1Jlc291cmNlVHlwZSByZXNvdXJjZVR5cGUoKSBjb25zdCB7
IHJldHVybiBzX3Jlc291cmNlVHlwZTsgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJjZVNvbGlkQ29sb3IuY3BwIGIvU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJjZVNvbGlkQ29sb3IuY3BwCmluZGV4IDVi
ZTJhZjYuLjI0NWRkOGMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcv
UmVuZGVyU1ZHUmVzb3VyY2VTb2xpZENvbG9yLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291cmNlU29saWRDb2xvci5jcHAKQEAgLTIzLDYgKzIzLDcg
QEAKICNpbmNsdWRlICJSZW5kZXJTVkdSZXNvdXJjZVNvbGlkQ29sb3IuaCIKIAogI2luY2x1ZGUg
IkdyYXBoaWNzQ29udGV4dC5oIgorI2luY2x1ZGUgIlJlbmRlclNWR1NoYXBlLmgiCiAjaW5jbHVk
ZSAiUmVuZGVyU3R5bGUuaCIKICNpbmNsdWRlICJTVkdSZW5kZXJTdXBwb3J0LmgiCiAKQEAgLTc0
LDE2ICs3NSwxNiBAQCBib29sIFJlbmRlclNWR1Jlc291cmNlU29saWRDb2xvcjo6YXBwbHlSZXNv
dXJjZShSZW5kZXJPYmplY3QqIG9iamVjdCwgUmVuZGVyU3R5bAogICAgIHJldHVybiB0cnVlOwog
fQogCi12b2lkIFJlbmRlclNWR1Jlc291cmNlU29saWRDb2xvcjo6cG9zdEFwcGx5UmVzb3VyY2Uo
UmVuZGVyT2JqZWN0KiwgR3JhcGhpY3NDb250ZXh0KiYgY29udGV4dCwgdW5zaWduZWQgc2hvcnQg
cmVzb3VyY2VNb2RlLCBjb25zdCBQYXRoKiBwYXRoKQordm9pZCBSZW5kZXJTVkdSZXNvdXJjZVNv
bGlkQ29sb3I6OnBvc3RBcHBseVJlc291cmNlKFJlbmRlclNWR1NoYXBlKiBzaGFwZSwgR3JhcGhp
Y3NDb250ZXh0KiYgY29udGV4dCwgdW5zaWduZWQgc2hvcnQgcmVzb3VyY2VNb2RlLCBjb25zdCBQ
YXRoKiBwYXRoKQogewogICAgIEFTU0VSVChjb250ZXh0KTsKICAgICBBU1NFUlQocmVzb3VyY2VN
b2RlICE9IEFwcGx5VG9EZWZhdWx0TW9kZSk7CiAKLSAgICBpZiAocGF0aCAmJiAhKHJlc291cmNl
TW9kZSAmIEFwcGx5VG9UZXh0TW9kZSkpIHsKKyAgICBpZiAoIShyZXNvdXJjZU1vZGUgJiBBcHBs
eVRvVGV4dE1vZGUpKSB7CiAgICAgICAgIGlmIChyZXNvdXJjZU1vZGUgJiBBcHBseVRvRmlsbE1v
ZGUpCi0gICAgICAgICAgICBjb250ZXh0LT5maWxsUGF0aCgqcGF0aCk7CisgICAgICAgICAgICBw
YXRoID8gY29udGV4dC0+ZmlsbFBhdGgoKnBhdGgpIDogc2hhcGUtPmZpbGxTaGFwZShjb250ZXh0
KTsKICAgICAgICAgZWxzZSBpZiAocmVzb3VyY2VNb2RlICYgQXBwbHlUb1N0cm9rZU1vZGUpCi0g
ICAgICAgICAgICBjb250ZXh0LT5zdHJva2VQYXRoKCpwYXRoKTsKKyAgICAgICAgICAgIHBhdGgg
PyBjb250ZXh0LT5zdHJva2VQYXRoKCpwYXRoKSA6IHNoYXBlLT5zdHJva2VTaGFwZShjb250ZXh0
KTsKICAgICB9CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcv
UmVuZGVyU1ZHUmVzb3VyY2VTb2xpZENvbG9yLmggYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
c3ZnL1JlbmRlclNWR1Jlc291cmNlU29saWRDb2xvci5oCmluZGV4IDAyY2ViMzEuLjVkYWY1NzQg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVzb3Vy
Y2VTb2xpZENvbG9yLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJT
VkdSZXNvdXJjZVNvbGlkQ29sb3IuaApAQCAtMzYsNyArMzYsNyBAQCBwdWJsaWM6CiAgICAgdmly
dHVhbCB2b2lkIHJlbW92ZUNsaWVudEZyb21DYWNoZShSZW5kZXJPYmplY3QqLCBib29sID0gdHJ1
ZSkgeyB9CiAKICAgICB2aXJ0dWFsIGJvb2wgYXBwbHlSZXNvdXJjZShSZW5kZXJPYmplY3QqLCBS
ZW5kZXJTdHlsZSosIEdyYXBoaWNzQ29udGV4dComLCB1bnNpZ25lZCBzaG9ydCByZXNvdXJjZU1v
ZGUpOwotICAgIHZpcnR1YWwgdm9pZCBwb3N0QXBwbHlSZXNvdXJjZShSZW5kZXJPYmplY3QqLCBH
cmFwaGljc0NvbnRleHQqJiwgdW5zaWduZWQgc2hvcnQgcmVzb3VyY2VNb2RlLCBjb25zdCBQYXRo
Kik7CisgICAgdmlydHVhbCB2b2lkIHBvc3RBcHBseVJlc291cmNlKFJlbmRlclNWR1NoYXBlKiwg
R3JhcGhpY3NDb250ZXh0KiYsIHVuc2lnbmVkIHNob3J0IHJlc291cmNlTW9kZSwgY29uc3QgUGF0
aCopOwogICAgIHZpcnR1YWwgRmxvYXRSZWN0IHJlc291cmNlQm91bmRpbmdCb3goUmVuZGVyT2Jq
ZWN0KikgeyByZXR1cm4gRmxvYXRSZWN0KCk7IH0KIAogICAgIHZpcnR1YWwgUmVuZGVyU1ZHUmVz
b3VyY2VUeXBlIHJlc291cmNlVHlwZSgpIGNvbnN0IHsgcmV0dXJuIHNfcmVzb3VyY2VUeXBlOyB9
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1NoYXBl
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHU2hhcGUuY3BwCm5l
dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMyMGI2ZWMKLS0tIC9kZXYvbnVsbAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1NoYXBlLmNwcApAQCAt
MCwwICsxLDQzNSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSwgMjAwNyBOaWtv
bGFzIFppbW1lcm1hbm4gPHppbW1lcm1hbm5Aa2RlLm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAw
NCwgMjAwNSwgMjAwOCBSb2IgQnVpcyA8YnVpc0BrZGUub3JnPgorICogQ29weXJpZ2h0IChDKSAy
MDA1LCAyMDA3IEVyaWMgU2VpZGVsIDxlcmljQHdlYmtpdC5vcmc+CisgKiBDb3B5cmlnaHQgKEMp
IDIwMDkgR29vZ2xlLCBJbmMuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgRGlyayBTY2h1bHplIDxr
cml0QHdlYmtpdC5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIFJlc2VhcmNoIEluIE1vdGlvbiBMaW1p
dGVkIDIwMTAuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgSmVm
ZiBTY2hpbGxlciA8Y29kZWRyZWFkQGdtYWlsLmNvbT4KKyAqIENvcHlyaWdodCAoQykgMjAxMSBS
ZW5hdGEgSG9kb3ZhbiA8cmVuaUB3ZWJraXQub3JnPgorICogQ29weXJpZ2h0IChDKSAyMDExIFVu
aXZlcnNpdHkgb2YgU3plZ2VkCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7
IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0
ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVi
bGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lv
biAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9u
LgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0
IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2
ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVy
YWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhh
dmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNl
bnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElC
LiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5j
LiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAt
MTMwMSwgVVNBLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKworI2lmIEVOQUJMRShTVkcp
CisjaW5jbHVkZSAiUmVuZGVyU1ZHU2hhcGUuaCIKKworI2luY2x1ZGUgIkZsb2F0UG9pbnQuaCIK
KyNpbmNsdWRlICJGbG9hdFF1YWQuaCIKKyNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKKyNp
bmNsdWRlICJIaXRUZXN0UmVxdWVzdC5oIgorI2luY2x1ZGUgIlBvaW50ZXJFdmVudHNIaXRSdWxl
cy5oIgorI2luY2x1ZGUgIlJlbmRlclNWR0NvbnRhaW5lci5oIgorI2luY2x1ZGUgIlJlbmRlclNW
R1Jlc291cmNlTWFya2VyLmgiCisjaW5jbHVkZSAiUmVuZGVyU1ZHUmVzb3VyY2VTb2xpZENvbG9y
LmgiCisjaW5jbHVkZSAiU1ZHUGF0aEVsZW1lbnQuaCIKKyNpbmNsdWRlICJTVkdSZW5kZXJTdXBw
b3J0LmgiCisjaW5jbHVkZSAiU1ZHUmVzb3VyY2VzLmgiCisjaW5jbHVkZSAiU1ZHU3R5bGVkVHJh
bnNmb3JtYWJsZUVsZW1lbnQuaCIKKyNpbmNsdWRlICJTVkdUcmFuc2Zvcm1MaXN0LmgiCisjaW5j
bHVkZSAiU1ZHVVJJUmVmZXJlbmNlLmgiCisjaW5jbHVkZSAiU3Ryb2tlU3R5bGVBcHBsaWVyLmgi
CisjaW5jbHVkZSA8d3RmL01hdGhFeHRyYXMuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitS
ZW5kZXJTVkdTaGFwZTo6UmVuZGVyU1ZHU2hhcGUoU1ZHU3R5bGVkVHJhbnNmb3JtYWJsZUVsZW1l
bnQqIG5vZGUpCisgICAgOiBSZW5kZXJTVkdNb2RlbE9iamVjdChub2RlKQorICAgICwgbV9uZWVk
c0JvdW5kYXJpZXNVcGRhdGUoZmFsc2UpIC8vIGRlZmF1bHQgaXMgZmFsc2UsIHRoZSBjYWNoZWQg
cmVjdHMgYXJlIGVtcHR5IGZyb20gdGhlIGJlZ2lubmluZworICAgICwgbV9uZWVkc1NoYXBlVXBk
YXRlKHRydWUpIC8vIGRlZmF1bHQgaXMgdHJ1ZSwgc28gd2UgZ3JhYiBhIFBhdGggb2JqZWN0IG9u
Y2UgZnJvbSBTVkdTdHlsZWRUcmFuc2Zvcm1hYmxlRWxlbWVudAorICAgICwgbV9uZWVkc1RyYW5z
Zm9ybVVwZGF0ZSh0cnVlKSAvLyBkZWZhdWx0IGlzIHRydWUsIHNvIHdlIGdyYWIgYSBBZmZpbmVU
cmFuc2Zvcm0gb2JqZWN0IG9uY2UgZnJvbSBTVkdTdHlsZWRUcmFuc2Zvcm1hYmxlRWxlbWVudAor
ICAgICwgbV9maWxsRmFsbGJhY2soZmFsc2UpCit7Cit9CisKK1JlbmRlclNWR1NoYXBlOjp+UmVu
ZGVyU1ZHU2hhcGUoKQoreworfQorCit2b2lkIFJlbmRlclNWR1NoYXBlOjpjcmVhdGVTaGFwZSgp
Cit7CisgICAgbV9wYXRoID0gYWRvcHRQdHIobmV3IFBhdGgpOworICAgIEFTU0VSVChpc0VtcHR5
KCkpOworCisgICAgU1ZHUGF0aEVsZW1lbnQqIGVsZW1lbnQgPSBzdGF0aWNfY2FzdDxTVkdQYXRo
RWxlbWVudCo+KG5vZGUoKSk7CisgICAgZWxlbWVudC0+dG9QYXRoRGF0YShwYXRoKCkpOworfQor
Citib29sIFJlbmRlclNWR1NoYXBlOjppc0VtcHR5KCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9w
YXRoLT5pc0VtcHR5KCk7Cit9CisKK3ZvaWQgUmVuZGVyU1ZHU2hhcGU6OmZpbGxTaGFwZShHcmFw
aGljc0NvbnRleHQqIGNvbnRleHQpCit7CisgICAgY29udGV4dC0+ZmlsbFBhdGgocGF0aCgpKTsK
K30KKworRmxvYXRSZWN0IFJlbmRlclNWR1NoYXBlOjpvYmplY3RCb3VuZGluZ0JveCgpIGNvbnN0
Cit7CisgICAgcmV0dXJuIG1fcGF0aC0+Ym91bmRpbmdSZWN0KCk7Cit9CisKK0Zsb2F0UmVjdCBS
ZW5kZXJTVkdTaGFwZTo6c3Ryb2tlQm91bmRpbmdCb3goKQoreworICAgIEJvdW5kaW5nUmVjdFN0
cm9rZVN0eWxlQXBwbGllciBzdHJva2VTdHlsZSh0aGlzLCBzdHlsZSgpKTsKKyAgICByZXR1cm4g
bV9wYXRoLT5zdHJva2VCb3VuZGluZ1JlY3QoJnN0cm9rZVN0eWxlKTsKK30KKwordm9pZCBSZW5k
ZXJTVkdTaGFwZTo6c3Ryb2tlU2hhcGUoR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0KQoreworICAg
IGNvbnRleHQtPnN0cm9rZVBhdGgocGF0aCgpKTsKK30KKworYm9vbCBSZW5kZXJTVkdTaGFwZTo6
c3Ryb2tlQ29udGFpbnNTbG93Q2FzZShjb25zdCBGbG9hdFBvaW50JiBwb2ludCkKK3sKKyAgICBC
b3VuZGluZ1JlY3RTdHJva2VTdHlsZUFwcGxpZXIgYXBwbGllcih0aGlzLCBzdHlsZSgpKTsKKyAg
ICByZXR1cm4gbV9wYXRoLT5zdHJva2VDb250YWlucygmYXBwbGllciwgcG9pbnQpOworfQorCiti
b29sIFJlbmRlclNWR1NoYXBlOjpmaWxsQ29udGFpbnNTbG93Q2FzZShjb25zdCBGbG9hdFBvaW50
JiBwb2ludCwgY29uc3QgV2luZFJ1bGUmIGZpbGxSdWxlKSBjb25zdAoreworICAgIHJldHVybiBt
X3BhdGgtPmNvbnRhaW5zKHBvaW50LCBmaWxsUnVsZSk7Cit9CisKK2Jvb2wgUmVuZGVyU1ZHU2hh
cGU6OmZpbGxDb250YWlucyhjb25zdCBGbG9hdFBvaW50JiBwb2ludCwgYm9vbCByZXF1aXJlc0Zp
bGwsIFdpbmRSdWxlIGZpbGxSdWxlKQoreworICAgIGlmICghbV9maWxsQm91bmRpbmdCb3guY29u
dGFpbnMocG9pbnQpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBDb2xvciBmYWxsYmFj
a0NvbG9yOworICAgIGlmIChyZXF1aXJlc0ZpbGwgJiYgIVJlbmRlclNWR1Jlc291cmNlOjpmaWxs
UGFpbnRpbmdSZXNvdXJjZSh0aGlzLCBzdHlsZSgpLCBmYWxsYmFja0NvbG9yKSkKKyAgICAgICAg
cmV0dXJuIGZhbHNlOworCisgICAgcmV0dXJuIGZpbGxDb250YWluc1Nsb3dDYXNlKHBvaW50LCBm
aWxsUnVsZSk7Cit9CisKK2Jvb2wgUmVuZGVyU1ZHU2hhcGU6OnN0cm9rZUNvbnRhaW5zKGNvbnN0
IEZsb2F0UG9pbnQmIHBvaW50LCBib29sIHJlcXVpcmVzU3Ryb2tlKQoreworICAgIGlmICghbV9z
dHJva2VBbmRNYXJrZXJCb3VuZGluZ0JveC5jb250YWlucyhwb2ludCkpCisgICAgICAgIHJldHVy
biBmYWxzZTsKKworICAgIENvbG9yIGZhbGxiYWNrQ29sb3I7CisgICAgaWYgKHJlcXVpcmVzU3Ry
b2tlICYmICFSZW5kZXJTVkdSZXNvdXJjZTo6c3Ryb2tlUGFpbnRpbmdSZXNvdXJjZSh0aGlzLCBz
dHlsZSgpLCBmYWxsYmFja0NvbG9yKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgaWYg
KHNob3VsZFN0cm9rZVplcm9MZW5ndGhTdWJwYXRoKCkpCisgICAgICAgIHJldHVybiB6ZXJvTGVu
Z3RoU3VicGF0aFJlY3QoKS5jb250YWlucyhwb2ludCk7CisKKyAgICBjb25zdCBTVkdSZW5kZXJT
dHlsZSogc3ZnU3R5bGUgPSBzdHlsZSgpLT5zdmdTdHlsZSgpOworICAgIGlmICghc3ZnU3R5bGUt
PnN0cm9rZURhc2hBcnJheSgpLmlzRW1wdHkoKSB8fCBzdmdTdHlsZS0+c3Ryb2tlTWl0ZXJMaW1p
dCgpICE9IHN2Z1N0eWxlLT5pbml0aWFsU3Ryb2tlTWl0ZXJMaW1pdCgpCisgICAgICAgIHx8IHN2
Z1N0eWxlLT5qb2luU3R5bGUoKSAhPSBzdmdTdHlsZS0+aW5pdGlhbEpvaW5TdHlsZSgpIHx8IHN2
Z1N0eWxlLT5jYXBTdHlsZSgpICE9IHN2Z1N0eWxlLT5pbml0aWFsQ2FwU3R5bGUoKSkgeworICAg
ICAgICBpZiAoIW1fcGF0aC5nZXQoKSkKKyAgICAgICAgICAgIFJlbmRlclNWR1NoYXBlOjpjcmVh
dGVTaGFwZSgpOworICAgICAgICByZXR1cm4gUmVuZGVyU1ZHU2hhcGU6OnN0cm9rZUNvbnRhaW5z
U2xvd0Nhc2UocG9pbnQpOworICAgIH0KKyAgICByZXR1cm4gc3Ryb2tlQ29udGFpbnNTbG93Q2Fz
ZShwb2ludCk7Cit9CisKK3ZvaWQgUmVuZGVyU1ZHU2hhcGU6OmxheW91dCgpCit7CisgICAgTGF5
b3V0UmVwYWludGVyIHJlcGFpbnRlcigqdGhpcywgY2hlY2tGb3JSZXBhaW50RHVyaW5nTGF5b3V0
KCkgJiYgc2VsZk5lZWRzTGF5b3V0KCkpOworICAgIFNWR1N0eWxlZFRyYW5zZm9ybWFibGVFbGVt
ZW50KiBlbGVtZW50ID0gc3RhdGljX2Nhc3Q8U1ZHU3R5bGVkVHJhbnNmb3JtYWJsZUVsZW1lbnQq
Pihub2RlKCkpOworCisgICAgYm9vbCB1cGRhdGVDYWNoZWRCb3VuZGFyaWVzSW5QYXJlbnRzID0g
ZmFsc2U7CisKKyAgICBib29sIG5lZWRzU2hhcGVVcGRhdGUgPSBtX25lZWRzU2hhcGVVcGRhdGU7
CisgICAgaWYgKG5lZWRzU2hhcGVVcGRhdGUpIHsKKyAgICAgICAgY3JlYXRlU2hhcGUoKTsKKyAg
ICAgICAgbV9uZWVkc1NoYXBlVXBkYXRlID0gZmFsc2U7CisgICAgICAgIHVwZGF0ZUNhY2hlZEJv
dW5kYXJpZXNJblBhcmVudHMgPSB0cnVlOworICAgIH0KKworICAgIGlmIChtX25lZWRzVHJhbnNm
b3JtVXBkYXRlKSB7CisgICAgICAgIG1fbG9jYWxUcmFuc2Zvcm0gPSBlbGVtZW50LT5hbmltYXRl
ZExvY2FsVHJhbnNmb3JtKCk7CisgICAgICAgIG1fbmVlZHNUcmFuc2Zvcm1VcGRhdGUgPSBmYWxz
ZTsKKyAgICAgICAgdXBkYXRlQ2FjaGVkQm91bmRhcmllc0luUGFyZW50cyA9IHRydWU7CisgICAg
fQorCisgICAgaWYgKG1fbmVlZHNCb3VuZGFyaWVzVXBkYXRlKQorICAgICAgICB1cGRhdGVDYWNo
ZWRCb3VuZGFyaWVzSW5QYXJlbnRzID0gdHJ1ZTsKKworICAgIC8vIEludmFsaWRhdGUgYWxsIHJl
c291cmNlcyBvZiB0aGlzIGNsaWVudCBpZiBvdXIgbGF5b3V0IGNoYW5nZWQuCisgICAgaWYgKG1f
ZXZlckhhZExheW91dCAmJiBzZWxmTmVlZHNMYXlvdXQoKSkgeworICAgICAgICBTVkdSZXNvdXJj
ZXNDYWNoZTo6Y2xpZW50TGF5b3V0Q2hhbmdlZCh0aGlzKTsKKyAgICAgICAgbV9tYXJrZXJMYXlv
dXRJbmZvLmNsZWFyKCk7CisgICAgfQorCisgICAgLy8gQXQgdGhpcyBwb2ludCBMYXlvdXRSZXBh
aW50ZXIgYWxyZWFkeSBncmFiYmVkIHRoZSBvbGQgYm91bmRzLAorICAgIC8vIHJlY2FsY3VsYXRl
IHRoZW0gbm93IHNvIHJlcGFpbnRBZnRlckxheW91dCgpIHVzZXMgdGhlIG5ldyBib3VuZHMuCisg
ICAgaWYgKG5lZWRzU2hhcGVVcGRhdGUgfHwgbV9uZWVkc0JvdW5kYXJpZXNVcGRhdGUpIHsKKyAg
ICAgICAgdXBkYXRlQ2FjaGVkQm91bmRhcmllcygpOworICAgICAgICBtX25lZWRzQm91bmRhcmll
c1VwZGF0ZSA9IGZhbHNlOworICAgIH0KKworICAgIC8vIElmIG91ciBib3VuZHMgY2hhbmdlZCwg
bm90aWZ5IHRoZSBwYXJlbnRzLgorICAgIGlmICh1cGRhdGVDYWNoZWRCb3VuZGFyaWVzSW5QYXJl
bnRzKQorICAgICAgICBSZW5kZXJTVkdNb2RlbE9iamVjdDo6c2V0TmVlZHNCb3VuZGFyaWVzVXBk
YXRlKCk7CisKKyAgICByZXBhaW50ZXIucmVwYWludEFmdGVyTGF5b3V0KCk7CisgICAgc2V0TmVl
ZHNMYXlvdXQoZmFsc2UpOworfQorCitib29sIFJlbmRlclNWR1NoYXBlOjpzaG91bGRTdHJva2Va
ZXJvTGVuZ3RoU3VicGF0aCgpIGNvbnN0Cit7CisgICAgLy8gU3BlYygxMS40KTogQW55IHplcm8g
bGVuZ3RoIHN1YnBhdGggc2hhbGwgbm90IGJlIHN0cm9rZWQgaWYgdGhlIOKAmHN0cm9rZS1saW5l
Y2Fw4oCZIHByb3BlcnR5IGhhcyBhIHZhbHVlIG9mIGJ1dHQKKyAgICAvLyBidXQgc2hhbGwgYmUg
c3Ryb2tlZCBpZiB0aGUg4oCYc3Ryb2tlLWxpbmVjYXDigJkgcHJvcGVydHkgaGFzIGEgdmFsdWUg
b2Ygcm91bmQgb3Igc3F1YXJlCisgICAgcmV0dXJuIHN0eWxlKCktPnN2Z1N0eWxlKCktPmhhc1N0
cm9rZSgpICYmIHN0eWxlKCktPnN2Z1N0eWxlKCktPmNhcFN0eWxlKCkgIT0gQnV0dENhcCAmJiAh
bV9maWxsQm91bmRpbmdCb3gud2lkdGgoKSAmJiAhbV9maWxsQm91bmRpbmdCb3guaGVpZ2h0KCk7
Cit9CisKK0Zsb2F0UmVjdCBSZW5kZXJTVkdTaGFwZTo6emVyb0xlbmd0aFN1YnBhdGhSZWN0KCkg
Y29uc3QKK3sKKyAgICBmbG9hdCBzdHJva2VXaWR0aCA9IHRoaXMtPnN0cm9rZVdpZHRoKCk7Cisg
ICAgcmV0dXJuIEZsb2F0UmVjdChtX2ZpbGxCb3VuZGluZ0JveC54KCkgLSBzdHJva2VXaWR0aCAv
IDIsIG1fZmlsbEJvdW5kaW5nQm94LnkoKSAtIHN0cm9rZVdpZHRoIC8gMiwgc3Ryb2tlV2lkdGgs
IHN0cm9rZVdpZHRoKTsKK30KKwordm9pZCBSZW5kZXJTVkdTaGFwZTo6c2V0dXBTcXVhcmVDYXBQ
YXRoKFBhdGgqJiB1c2VQYXRoLCBpbnQmIGFwcGx5TW9kZSkKK3sKKyAgICAvLyBTcGVjKDExLjQp
OiBBbnkgemVybyBsZW5ndGggc3VicGF0aCBzaGFsbCBub3QgYmUgc3Ryb2tlZCBpZiB0aGUg4oCY
c3Ryb2tlLWxpbmVjYXDigJkgcHJvcGVydHkgaGFzIGEgdmFsdWUgb2YgYnV0dAorICAgIC8vIGJ1
dCBzaGFsbCBiZSBzdHJva2VkIGlmIHRoZSDigJhzdHJva2UtbGluZWNhcOKAmSBwcm9wZXJ0eSBo
YXMgYSB2YWx1ZSBvZiByb3VuZCBvciBzcXVhcmUKKyAgICBERUZJTkVfU1RBVElDX0xPQ0FMKFBh
dGgsIHRlbXBQYXRoLCAoKSk7CisKKyAgICBhcHBseU1vZGUgPSBBcHBseVRvRmlsbE1vZGU7Cisg
ICAgdXNlUGF0aCA9ICZ0ZW1wUGF0aDsKKyAgICB1c2VQYXRoLT5jbGVhcigpOworICAgIGlmIChz
dHlsZSgpLT5zdmdTdHlsZSgpLT5jYXBTdHlsZSgpID09IFNxdWFyZUNhcCkKKyAgICAgICAgdXNl
UGF0aC0+YWRkUmVjdCh6ZXJvTGVuZ3RoU3VicGF0aFJlY3QoKSk7CisgICAgZWxzZQorICAgICAg
ICB1c2VQYXRoLT5hZGRFbGxpcHNlKHplcm9MZW5ndGhTdWJwYXRoUmVjdCgpKTsKK30KKworYm9v
bCBSZW5kZXJTVkdTaGFwZTo6c2V0dXBOb25TY2FsaW5nU3Ryb2tlUGF0aChQYXRoKiYgdXNlUGF0
aCwgR3JhcGhpY3NDb250ZXh0U3RhdGVTYXZlciYgc3RhdGVTYXZlcikKK3sKKyAgICBERUZJTkVf
U1RBVElDX0xPQ0FMKFBhdGgsIHRlbXBQYXRoLCAoKSk7CisKKyAgICBTVkdTdHlsZWRUcmFuc2Zv
cm1hYmxlRWxlbWVudCogZWxlbWVudCA9IHN0YXRpY19jYXN0PFNWR1N0eWxlZFRyYW5zZm9ybWFi
bGVFbGVtZW50Kj4obm9kZSgpKTsKKyAgICBBZmZpbmVUcmFuc2Zvcm0gbm9uU2NhbGluZ1N0cm9r
ZVRyYW5zZm9ybSA9IGVsZW1lbnQtPmdldFNjcmVlbkNUTShTVkdMb2NhdGFibGU6OkRpc2FsbG93
U3R5bGVVcGRhdGUpOworICAgIGlmICghbm9uU2NhbGluZ1N0cm9rZVRyYW5zZm9ybS5pc0ludmVy
dGlibGUoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgdGVtcFBhdGggPSAqbV9wYXRo
OworICAgIHVzZVBhdGggPSAmdGVtcFBhdGg7CisgICAgdGVtcFBhdGgudHJhbnNmb3JtKG5vblNj
YWxpbmdTdHJva2VUcmFuc2Zvcm0pOworCisgICAgc3RhdGVTYXZlci5zYXZlKCk7CisgICAgc3Rh
dGVTYXZlci5jb250ZXh0KCktPmNvbmNhdENUTShub25TY2FsaW5nU3Ryb2tlVHJhbnNmb3JtLmlu
dmVyc2UoKSk7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK3ZvaWQgUmVuZGVyU1ZHU2hhcGU6OmZp
bGxBbmRTdHJva2VQYXRoKEdyYXBoaWNzQ29udGV4dCogY29udGV4dCkKK3sKKyAgICBSZW5kZXJT
dHlsZSogc3R5bGUgPSB0aGlzLT5zdHlsZSgpOworCisgICAgQ29sb3IgZmFsbGJhY2tDb2xvcjsK
KyAgICBQYXRoKiB1c2VQYXRoID0gaXNGaWxsRmFsbGJhY2soKSA/IG1fcGF0aC5nZXQoKSA6IDA7
CisgICAgaWYgKFJlbmRlclNWR1Jlc291cmNlKiBmaWxsUGFpbnRpbmdSZXNvdXJjZSA9IFJlbmRl
clNWR1Jlc291cmNlOjpmaWxsUGFpbnRpbmdSZXNvdXJjZSh0aGlzLCBzdHlsZSwgZmFsbGJhY2tD
b2xvcikpIHsKKyAgICAgICAgaWYgKGZpbGxQYWludGluZ1Jlc291cmNlLT5hcHBseVJlc291cmNl
KHRoaXMsIHN0eWxlLCBjb250ZXh0LCBBcHBseVRvRmlsbE1vZGUpKQorICAgICAgICAgICAgZmls
bFBhaW50aW5nUmVzb3VyY2UtPnBvc3RBcHBseVJlc291cmNlKHRoaXMsIGNvbnRleHQsIEFwcGx5
VG9GaWxsTW9kZSwgdXNlUGF0aCk7CisgICAgICAgIGVsc2UgaWYgKGZhbGxiYWNrQ29sb3IuaXNW
YWxpZCgpKSB7CisgICAgICAgICAgICBSZW5kZXJTVkdSZXNvdXJjZVNvbGlkQ29sb3IqIGZhbGxi
YWNrUmVzb3VyY2UgPSBSZW5kZXJTVkdSZXNvdXJjZTo6c2hhcmVkU29saWRQYWludGluZ1Jlc291
cmNlKCk7CisgICAgICAgICAgICBmYWxsYmFja1Jlc291cmNlLT5zZXRDb2xvcihmYWxsYmFja0Nv
bG9yKTsKKyAgICAgICAgICAgIGlmIChmYWxsYmFja1Jlc291cmNlLT5hcHBseVJlc291cmNlKHRo
aXMsIHN0eWxlLCBjb250ZXh0LCBBcHBseVRvRmlsbE1vZGUpKQorICAgICAgICAgICAgICAgIGZh
bGxiYWNrUmVzb3VyY2UtPnBvc3RBcHBseVJlc291cmNlKHRoaXMsIGNvbnRleHQsIEFwcGx5VG9G
aWxsTW9kZSwgdXNlUGF0aCk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBmYWxsYmFja0NvbG9y
ID0gQ29sb3IoKTsKKyAgICBSZW5kZXJTVkdSZXNvdXJjZSogc3Ryb2tlUGFpbnRpbmdSZXNvdXJj
ZSA9IFJlbmRlclNWR1Jlc291cmNlOjpzdHJva2VQYWludGluZ1Jlc291cmNlKHRoaXMsIHN0eWxl
LCBmYWxsYmFja0NvbG9yKTsKKyAgICBpZiAoIXN0cm9rZVBhaW50aW5nUmVzb3VyY2UpCisgICAg
ICAgIHJldHVybjsKKworICAgIHVzZVBhdGggPSBtX3BhdGguZ2V0KCk7CisgICAgaW50IGFwcGx5
TW9kZSA9IEFwcGx5VG9TdHJva2VNb2RlOworCisgICAgYm9vbCBub25TY2FsaW5nU3Ryb2tlID0g
c3R5bGUtPnN2Z1N0eWxlKCktPnZlY3RvckVmZmVjdCgpID09IFZFX05PTl9TQ0FMSU5HX1NUUk9L
RTsKKworICAgIEdyYXBoaWNzQ29udGV4dFN0YXRlU2F2ZXIgc3RhdGVTYXZlcigqY29udGV4dCwg
ZmFsc2UpOworCisgICAgLy8gU3BlYygxMS40KTogQW55IHplcm8gbGVuZ3RoIHN1YnBhdGggc2hh
bGwgbm90IGJlIHN0cm9rZWQgaWYgdGhlIOKAmHN0cm9rZS1saW5lY2Fw4oCZIHByb3BlcnR5IGhh
cyBhIHZhbHVlIG9mIGJ1dHQKKyAgICAvLyBidXQgc2hhbGwgYmUgc3Ryb2tlZCBpZiB0aGUg4oCY
c3Ryb2tlLWxpbmVjYXDigJkgcHJvcGVydHkgaGFzIGEgdmFsdWUgb2Ygcm91bmQgb3Igc3F1YXJl
CisgICAgLy8gRklYTUU6IHRoaXMgZG9lcyBub3Qgd29yayBmb3IgemVyby1sZW5ndGggc3VicGF0
aHMsIG9ubHkgd2hlbiB0b3RhbCBwYXRoIGlzIHplcm8tbGVuZ3RoCisgICAgaWYgKHNob3VsZFN0
cm9rZVplcm9MZW5ndGhTdWJwYXRoKCkpIHsKKyAgICAgICAgUmVuZGVyU1ZHU2hhcGU6OmNyZWF0
ZVNoYXBlKCk7CisgICAgICAgIHVzZVBhdGggPSBtX3BhdGguZ2V0KCk7CisgICAgICAgIHNldHVw
U3F1YXJlQ2FwUGF0aCh1c2VQYXRoLCBhcHBseU1vZGUpOworICAgIH0gZWxzZSBpZiAobm9uU2Nh
bGluZ1N0cm9rZSkgeworICAgICAgICBSZW5kZXJTVkdTaGFwZTo6Y3JlYXRlU2hhcGUoKTsKKyAg
ICAgICAgdXNlUGF0aCA9IG1fcGF0aC5nZXQoKTsKKyAgICAgICAgaWYgKCFzZXR1cE5vblNjYWxp
bmdTdHJva2VQYXRoKHVzZVBhdGgsIHN0YXRlU2F2ZXIpKQorICAgICAgICAgICAgcmV0dXJuOwor
ICAgIH0KKyAgICBpZiAoc3Ryb2tlUGFpbnRpbmdSZXNvdXJjZS0+YXBwbHlSZXNvdXJjZSh0aGlz
LCBzdHlsZSwgY29udGV4dCwgYXBwbHlNb2RlKSkgeworICAgICAgICBzdHJva2VQYWludGluZ1Jl
c291cmNlLT5wb3N0QXBwbHlSZXNvdXJjZSh0aGlzLCBjb250ZXh0LCBhcHBseU1vZGUsIHVzZVBh
dGgpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIGlmICghZmFsbGJhY2tDb2xvci5pc1Zh
bGlkKCkpCisgICAgICAgIHJldHVybjsKKyAgICBSZW5kZXJTVkdSZXNvdXJjZVNvbGlkQ29sb3Iq
IGZhbGxiYWNrUmVzb3VyY2UgPSBSZW5kZXJTVkdSZXNvdXJjZTo6c2hhcmVkU29saWRQYWludGlu
Z1Jlc291cmNlKCk7CisgICAgZmFsbGJhY2tSZXNvdXJjZS0+c2V0Q29sb3IoZmFsbGJhY2tDb2xv
cik7CisgICAgaWYgKGZhbGxiYWNrUmVzb3VyY2UtPmFwcGx5UmVzb3VyY2UodGhpcywgc3R5bGUs
IGNvbnRleHQsIGFwcGx5TW9kZSkpCisgICAgICAgIGZhbGxiYWNrUmVzb3VyY2UtPnBvc3RBcHBs
eVJlc291cmNlKHRoaXMsIGNvbnRleHQsIGFwcGx5TW9kZSwgdXNlUGF0aCk7Cit9CisKK3ZvaWQg
UmVuZGVyU1ZHU2hhcGU6OnBhaW50KFBhaW50SW5mbyYgcGFpbnRJbmZvLCBjb25zdCBJbnRQb2lu
dCYpCit7CisgICAgaWYgKHBhaW50SW5mby5jb250ZXh0LT5wYWludGluZ0Rpc2FibGVkKCkgfHwg
c3R5bGUoKS0+dmlzaWJpbGl0eSgpID09IEhJRERFTiB8fCBpc0VtcHR5KCkpCisgICAgICAgIHJl
dHVybjsKKyAgICBGbG9hdFJlY3QgYm91bmRpbmdCb3ggPSByZXBhaW50UmVjdEluTG9jYWxDb29y
ZGluYXRlcygpOworICAgIGlmICghU1ZHUmVuZGVyU3VwcG9ydDo6cGFpbnRJbmZvSW50ZXJzZWN0
c1JlcGFpbnRSZWN0KGJvdW5kaW5nQm94LCBtX2xvY2FsVHJhbnNmb3JtLCBwYWludEluZm8pKQor
ICAgICAgICByZXR1cm47CisgICAgUGFpbnRJbmZvIGNoaWxkUGFpbnRJbmZvKHBhaW50SW5mbyk7
CisgICAgYm9vbCBkcmF3c091dGxpbmUgPSBzdHlsZSgpLT5vdXRsaW5lV2lkdGgoKSAmJiAoY2hp
bGRQYWludEluZm8ucGhhc2UgPT0gUGFpbnRQaGFzZU91dGxpbmUgfHwgY2hpbGRQYWludEluZm8u
cGhhc2UgPT0gUGFpbnRQaGFzZVNlbGZPdXRsaW5lKTsKKyAgICBpZiAoZHJhd3NPdXRsaW5lIHx8
IGNoaWxkUGFpbnRJbmZvLnBoYXNlID09IFBhaW50UGhhc2VGb3JlZ3JvdW5kKSB7CisgICAgICAg
IEdyYXBoaWNzQ29udGV4dFN0YXRlU2F2ZXIgc3RhdGVTYXZlcigqY2hpbGRQYWludEluZm8uY29u
dGV4dCk7CisgICAgICAgIGNoaWxkUGFpbnRJbmZvLmFwcGx5VHJhbnNmb3JtKG1fbG9jYWxUcmFu
c2Zvcm0pOworCisgICAgICAgIGlmIChjaGlsZFBhaW50SW5mby5waGFzZSA9PSBQYWludFBoYXNl
Rm9yZWdyb3VuZCkgeworICAgICAgICAgICAgUGFpbnRJbmZvIHNhdmVkSW5mbyhjaGlsZFBhaW50
SW5mbyk7CisKKyAgICAgICAgICAgIGlmIChTVkdSZW5kZXJTdXBwb3J0OjpwcmVwYXJlVG9SZW5k
ZXJTVkdDb250ZW50KHRoaXMsIGNoaWxkUGFpbnRJbmZvKSkgeworICAgICAgICAgICAgICAgIGNv
bnN0IFNWR1JlbmRlclN0eWxlKiBzdmdTdHlsZSA9IHN0eWxlKCktPnN2Z1N0eWxlKCk7CisgICAg
ICAgICAgICAgICAgaWYgKHN2Z1N0eWxlLT5zaGFwZVJlbmRlcmluZygpID09IFNSX0NSSVNQRURH
RVMpCisgICAgICAgICAgICAgICAgICAgIGNoaWxkUGFpbnRJbmZvLmNvbnRleHQtPnNldFNob3Vs
ZEFudGlhbGlhcyhmYWxzZSk7CisKKyAgICAgICAgICAgICAgICBmaWxsQW5kU3Ryb2tlUGF0aChj
aGlsZFBhaW50SW5mby5jb250ZXh0KTsKKworICAgICAgICAgICAgICAgIGlmIChzdmdTdHlsZS0+
aGFzTWFya2VycygpKQorICAgICAgICAgICAgICAgICAgICBtX21hcmtlckxheW91dEluZm8uZHJh
d01hcmtlcnMoY2hpbGRQYWludEluZm8pOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBT
VkdSZW5kZXJTdXBwb3J0OjpmaW5pc2hSZW5kZXJTVkdDb250ZW50KHRoaXMsIGNoaWxkUGFpbnRJ
bmZvLCBzYXZlZEluZm8uY29udGV4dCk7CisgICAgICAgIH0KKworICAgICAgICBpZiAoZHJhd3NP
dXRsaW5lKQorICAgICAgICAgICAgcGFpbnRPdXRsaW5lKGNoaWxkUGFpbnRJbmZvLmNvbnRleHQs
IEludFJlY3QoYm91bmRpbmdCb3gpKTsKKyAgICB9Cit9CisKKy8vIFRoaXMgbWV0aG9kIGlzIGNh
bGxlZCBmcm9tIGluc2lkZSBwYWludE91dGxpbmUoKSBzaW5jZSB3ZSBjYWxsIHBhaW50T3V0bGlu
ZSgpCisvLyB3aGlsZSB0cmFuc2Zvcm1lZCB0byBvdXIgY29vcmQgc3lzdGVtLCByZXR1cm4gbG9j
YWwgY29vcmRzCit2b2lkIFJlbmRlclNWR1NoYXBlOjphZGRGb2N1c1JpbmdSZWN0cyhWZWN0b3I8
TGF5b3V0UmVjdD4mIHJlY3RzLCBjb25zdCBMYXlvdXRQb2ludCYpCit7CisgICAgTGF5b3V0UmVj
dCByZWN0ID0gZW5jbG9zaW5nTGF5b3V0UmVjdChyZXBhaW50UmVjdEluTG9jYWxDb29yZGluYXRl
cygpKTsKKyAgICBpZiAoIXJlY3QuaXNFbXB0eSgpKQorICAgICAgICByZWN0cy5hcHBlbmQocmVj
dCk7Cit9CisKK2Jvb2wgUmVuZGVyU1ZHU2hhcGU6Om5vZGVBdEZsb2F0UG9pbnQoY29uc3QgSGl0
VGVzdFJlcXVlc3QmIHJlcXVlc3QsIEhpdFRlc3RSZXN1bHQmIHJlc3VsdCwgY29uc3QgRmxvYXRQ
b2ludCYgcG9pbnRJblBhcmVudCwgSGl0VGVzdEFjdGlvbiBoaXRUZXN0QWN0aW9uKQoreworICAg
IC8vIFdlIG9ubHkgZHJhdyBpbiB0aGUgZm9yZ3JvdW5kIHBoYXNlLCBzbyB3ZSBvbmx5IGhpdC10
ZXN0IHRoZW4uCisgICAgaWYgKGhpdFRlc3RBY3Rpb24gIT0gSGl0VGVzdEZvcmVncm91bmQpCisg
ICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIEZsb2F0UG9pbnQgbG9jYWxQb2ludCA9IG1fbG9j
YWxUcmFuc2Zvcm0uaW52ZXJzZSgpLm1hcFBvaW50KHBvaW50SW5QYXJlbnQpOworCisgICAgaWYg
KCFTVkdSZW5kZXJTdXBwb3J0Ojpwb2ludEluQ2xpcHBpbmdBcmVhKHRoaXMsIGxvY2FsUG9pbnQp
KQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBQb2ludGVyRXZlbnRzSGl0UnVsZXMgaGl0
UnVsZXMoUG9pbnRlckV2ZW50c0hpdFJ1bGVzOjpTVkdfUEFUSF9ISVRURVNUSU5HLCByZXF1ZXN0
LCBzdHlsZSgpLT5wb2ludGVyRXZlbnRzKCkpOworICAgIGJvb2wgaXNWaXNpYmxlID0gKHN0eWxl
KCktPnZpc2liaWxpdHkoKSA9PSBWSVNJQkxFKTsKKyAgICBpZiAoaXNWaXNpYmxlIHx8ICFoaXRS
dWxlcy5yZXF1aXJlVmlzaWJsZSkgeworICAgICAgICBjb25zdCBTVkdSZW5kZXJTdHlsZSogc3Zn
U3R5bGUgPSBzdHlsZSgpLT5zdmdTdHlsZSgpOworICAgICAgICBXaW5kUnVsZSBmaWxsUnVsZSA9
IHN2Z1N0eWxlLT5maWxsUnVsZSgpOworICAgICAgICBpZiAocmVxdWVzdC5zdmdDbGlwQ29udGVu
dCgpKQorICAgICAgICAgICAgZmlsbFJ1bGUgPSBzdmdTdHlsZS0+Y2xpcFJ1bGUoKTsKKyAgICAg
ICAgaWYgKChoaXRSdWxlcy5jYW5IaXRTdHJva2UgJiYgKHN2Z1N0eWxlLT5oYXNTdHJva2UoKSB8
fCAhaGl0UnVsZXMucmVxdWlyZVN0cm9rZSkgJiYgc3Ryb2tlQ29udGFpbnMobG9jYWxQb2ludCwg
aGl0UnVsZXMucmVxdWlyZVN0cm9rZSkpCisgICAgICAgICAgICB8fCAoaGl0UnVsZXMuY2FuSGl0
RmlsbCAmJiAoc3ZnU3R5bGUtPmhhc0ZpbGwoKSB8fCAhaGl0UnVsZXMucmVxdWlyZUZpbGwpICYm
IGZpbGxDb250YWlucyhsb2NhbFBvaW50LCBoaXRSdWxlcy5yZXF1aXJlRmlsbCwgZmlsbFJ1bGUp
KSkgeworICAgICAgICAgICAgdXBkYXRlSGl0VGVzdFJlc3VsdChyZXN1bHQsIHJvdW5kZWRMYXlv
dXRQb2ludChsb2NhbFBvaW50KSk7CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAg
fQorICAgIH0KKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK0Zsb2F0UmVjdCBSZW5kZXJTVkdTaGFw
ZTo6Y2FsY3VsYXRlTWFya2VyQm91bmRzSWZOZWVkZWQoKQoreworICAgIFNWR0VsZW1lbnQqIHN2
Z0VsZW1lbnQgPSBzdGF0aWNfY2FzdDxTVkdFbGVtZW50Kj4obm9kZSgpKTsKKyAgICBBU1NFUlQo
c3ZnRWxlbWVudCAmJiBzdmdFbGVtZW50LT5kb2N1bWVudCgpKTsKKyAgICBpZiAoIXN2Z0VsZW1l
bnQtPmlzU3R5bGVkKCkpCisgICAgICAgIHJldHVybiBGbG9hdFJlY3QoKTsKKworICAgIFNWR1N0
eWxlZEVsZW1lbnQqIHN0eWxlZEVsZW1lbnQgPSBzdGF0aWNfY2FzdDxTVkdTdHlsZWRFbGVtZW50
Kj4oc3ZnRWxlbWVudCk7CisgICAgaWYgKCFzdHlsZWRFbGVtZW50LT5zdXBwb3J0c01hcmtlcnMo
KSkKKyAgICAgICAgcmV0dXJuIEZsb2F0UmVjdCgpOworCisgICAgQVNTRVJUKHN0eWxlKCktPnN2
Z1N0eWxlKCktPmhhc01hcmtlcnMoKSk7CisKKyAgICBTVkdSZXNvdXJjZXMqIHJlc291cmNlcyA9
IFNWR1Jlc291cmNlc0NhY2hlOjpjYWNoZWRSZXNvdXJjZXNGb3JSZW5kZXJPYmplY3QodGhpcyk7
CisgICAgaWYgKCFyZXNvdXJjZXMpCisgICAgICAgIHJldHVybiBGbG9hdFJlY3QoKTsKKworICAg
IFJlbmRlclNWR1Jlc291cmNlTWFya2VyKiBtYXJrZXJTdGFydCA9IHJlc291cmNlcy0+bWFya2Vy
U3RhcnQoKTsKKyAgICBSZW5kZXJTVkdSZXNvdXJjZU1hcmtlciogbWFya2VyTWlkID0gcmVzb3Vy
Y2VzLT5tYXJrZXJNaWQoKTsKKyAgICBSZW5kZXJTVkdSZXNvdXJjZU1hcmtlciogbWFya2VyRW5k
ID0gcmVzb3VyY2VzLT5tYXJrZXJFbmQoKTsKKyAgICBpZiAoIW1hcmtlclN0YXJ0ICYmICFtYXJr
ZXJNaWQgJiYgIW1hcmtlckVuZCkKKyAgICAgICAgcmV0dXJuIEZsb2F0UmVjdCgpOworCisgICAg
cmV0dXJuIG1fbWFya2VyTGF5b3V0SW5mby5jYWxjdWxhdGVCb3VuZGFyaWVzKG1hcmtlclN0YXJ0
LCBtYXJrZXJNaWQsIG1hcmtlckVuZCwgc3Ryb2tlV2lkdGgoKSwgcGF0aCgpKTsKK30KKwordm9p
ZCBSZW5kZXJTVkdTaGFwZTo6dXBkYXRlQ2FjaGVkQm91bmRhcmllcygpCit7CisgICAgaWYgKGlz
RW1wdHkoKSkgeworICAgICAgICBtX2ZpbGxCb3VuZGluZ0JveCA9IEZsb2F0UmVjdCgpOworICAg
ICAgICBtX3N0cm9rZUFuZE1hcmtlckJvdW5kaW5nQm94ID0gRmxvYXRSZWN0KCk7CisgICAgICAg
IG1fcmVwYWludEJvdW5kaW5nQm94ID0gRmxvYXRSZWN0KCk7CisgICAgICAgIHJldHVybjsKKyAg
ICB9CisKKyAgICAvLyBDYWNoZSBfdW5jbGlwcGVkXyBmaWxsIGJvdW5kaW5nIGJveCwgdXNlZCBm
b3IgY2FsY3VsYXRpb25zIGluIHJlc291cmNlcworICAgIG1fZmlsbEJvdW5kaW5nQm94ID0gb2Jq
ZWN0Qm91bmRpbmdCb3goKTsKKworICAgIC8vIFNwZWMoMTEuNCk6IEFueSB6ZXJvIGxlbmd0aCBz
dWJwYXRoIHNoYWxsIG5vdCBiZSBzdHJva2VkIGlmIHRoZSDigJhzdHJva2UtbGluZWNhcOKAmSBw
cm9wZXJ0eSBoYXMgYSB2YWx1ZSBvZiBidXR0CisgICAgLy8gYnV0IHNoYWxsIGJlIHN0cm9rZWQg
aWYgdGhlIOKAmHN0cm9rZS1saW5lY2Fw4oCZIHByb3BlcnR5IGhhcyBhIHZhbHVlIG9mIHJvdW5k
IG9yIHNxdWFyZQorICAgIGlmIChzaG91bGRTdHJva2VaZXJvTGVuZ3RoU3VicGF0aCgpKSB7Cisg
ICAgICAgIG1fc3Ryb2tlQW5kTWFya2VyQm91bmRpbmdCb3ggPSB6ZXJvTGVuZ3RoU3VicGF0aFJl
Y3QoKTsKKyAgICAgICAgLy8gQ2FjaGUgc21hbGxlc3QgcG9zc2libGUgcmVwYWludCByZWN0YW5n
bGUKKyAgICAgICAgbV9yZXBhaW50Qm91bmRpbmdCb3ggPSBtX3N0cm9rZUFuZE1hcmtlckJvdW5k
aW5nQm94OworICAgICAgICBTVkdSZW5kZXJTdXBwb3J0OjppbnRlcnNlY3RSZXBhaW50UmVjdFdp
dGhSZXNvdXJjZXModGhpcywgbV9yZXBhaW50Qm91bmRpbmdCb3gpOworICAgICAgICByZXR1cm47
CisgICAgfQorCisgICAgLy8gQ2FjaGUgX3VuY2xpcHBlZF8gc3Ryb2tlIGJvdW5kaW5nIGJveCwg
dXNlZCBmb3IgY2FsY3VsYXRpb25zIGluIHJlc291cmNlcyAoaW5jbHVkZXMgbWFya2VyIGJvdW5k
YXJpZXMpCisgICAgbV9zdHJva2VBbmRNYXJrZXJCb3VuZGluZ0JveCA9IG1fZmlsbEJvdW5kaW5n
Qm94OworCisgICAgY29uc3QgU1ZHUmVuZGVyU3R5bGUqIHN2Z1N0eWxlID0gc3R5bGUoKS0+c3Zn
U3R5bGUoKTsKKyAgICBpZiAoc3ZnU3R5bGUtPmhhc1N0cm9rZSgpKQorICAgICAgICBtX3N0cm9r
ZUFuZE1hcmtlckJvdW5kaW5nQm94LnVuaXRlKHN0cm9rZUJvdW5kaW5nQm94KCkpOworCisgICAg
aWYgKGlzU1ZHUGF0aCgpKSB7CisgICAgICAgIGlmIChzdmdTdHlsZS0+aGFzTWFya2VycygpKSB7
CisgICAgICAgICAgICBGbG9hdFJlY3QgbWFya2VyQm91bmRzID0gY2FsY3VsYXRlTWFya2VyQm91
bmRzSWZOZWVkZWQoKTsKKyAgICAgICAgICAgIGlmICghbWFya2VyQm91bmRzLmlzRW1wdHkoKSkK
KyAgICAgICAgICAgICAgICBtX3N0cm9rZUFuZE1hcmtlckJvdW5kaW5nQm94LnVuaXRlKG1hcmtl
ckJvdW5kcyk7CisgICAgICAgIH0KKyAgICB9CisgICAgLy8gQ2FjaGUgc21hbGxlc3QgcG9zc2li
bGUgcmVwYWludCByZWN0YW5nbGUKKyAgICBtX3JlcGFpbnRCb3VuZGluZ0JveCA9IG1fc3Ryb2tl
QW5kTWFya2VyQm91bmRpbmdCb3g7CisgICAgU1ZHUmVuZGVyU3VwcG9ydDo6aW50ZXJzZWN0UmVw
YWludFJlY3RXaXRoUmVzb3VyY2VzKHRoaXMsIG1fcmVwYWludEJvdW5kaW5nQm94KTsKK30KKwor
ZmxvYXQgUmVuZGVyU1ZHU2hhcGU6OnN0cm9rZVdpZHRoKCkgY29uc3QKK3sKKyAgICBTVkdFbGVt
ZW50KiBzdmdFbGVtZW50ID0gc3RhdGljX2Nhc3Q8U1ZHRWxlbWVudCo+KG5vZGUoKSk7CisgICAg
cmV0dXJuIHN0eWxlKCktPnN2Z1N0eWxlKCktPnN0cm9rZVdpZHRoKCkudmFsdWUoc3ZnRWxlbWVu
dCk7Cit9CisKK30KKworI2VuZGlmIC8vIEVOQUJMRShTVkcpCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1NoYXBlLmggYi9Tb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1NoYXBlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMC4uZmRmMmQ5OAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9zdmcvUmVuZGVyU1ZHU2hhcGUuaApAQCAtMCwwICsxLDE1NyBAQAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAwNCwgMjAwNSwgMjAwNyBOaWtvbGFzIFppbW1lcm1hbm4gPHppbW1lcm1hbm5A
a2RlLm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSBSb2IgQnVpcyA8YnVpc0BrZGUu
b3JnPgorICogQ29weXJpZ2h0IChDKSAyMDA1IEVyaWMgU2VpZGVsIDxlcmljQHdlYmtpdC5vcmc+
CisgKiBDb3B5cmlnaHQgKEMpIDIwMDYgQXBwbGUgQ29tcHV0ZXIsIEluYworICogQ29weXJpZ2h0
IChDKSAyMDA5IEdvb2dsZSwgSW5jLgorICogQ29weXJpZ2h0IChDKSAyMDExIFJlbmF0YSBIb2Rv
dmFuIDxyZW5pQHdlYmtpdC5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgVW5pdmVyc2l0eSBv
ZiBTemVnZWQKKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiBy
ZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRo
ZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkg
dGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhl
IExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICog
VGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1
c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1w
bGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMg
TGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZl
ZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFs
b25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3Qs
IHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFu
a2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0Eu
CisgKi8KKworI2lmbmRlZiBSZW5kZXJTVkdTaGFwZV9oCisjZGVmaW5lIFJlbmRlclNWR1NoYXBl
X2gKKworI2lmIEVOQUJMRShTVkcpCisjaW5jbHVkZSAiQWZmaW5lVHJhbnNmb3JtLmgiCisjaW5j
bHVkZSAiRmxvYXRSZWN0LmgiCisjaW5jbHVkZSAiUmVuZGVyU1ZHTW9kZWxPYmplY3QuaCIKKyNp
bmNsdWRlICJTVkdNYXJrZXJMYXlvdXRJbmZvLmgiCisjaW5jbHVkZSAiU3Ryb2tlU3R5bGVBcHBs
aWVyLmgiCisjaW5jbHVkZSA8d3RmL093blB0ci5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisK
K2NsYXNzIEZsb2F0UG9pbnQ7CitjbGFzcyBHcmFwaGljc0NvbnRleHRTdGF0ZVNhdmVyOworY2xh
c3MgUmVuZGVyU1ZHQ29udGFpbmVyOworY2xhc3MgUmVuZGVyU1ZHUGF0aDsKK2NsYXNzIFNWR1N0
eWxlZFRyYW5zZm9ybWFibGVFbGVtZW50OworCitjbGFzcyBCb3VuZGluZ1JlY3RTdHJva2VTdHls
ZUFwcGxpZXIgOiBwdWJsaWMgU3Ryb2tlU3R5bGVBcHBsaWVyIHsKK3B1YmxpYzoKKyAgICBCb3Vu
ZGluZ1JlY3RTdHJva2VTdHlsZUFwcGxpZXIoY29uc3QgUmVuZGVyT2JqZWN0KiBvYmplY3QsIFJl
bmRlclN0eWxlKiBzdHlsZSkKKyAgICAgICAgOiBtX29iamVjdChvYmplY3QpCisgICAgICAgICwg
bV9zdHlsZShzdHlsZSkKKyAgICB7CisgICAgICAgIEFTU0VSVChzdHlsZSk7CisgICAgICAgIEFT
U0VSVChvYmplY3QpOworICAgIH0KKworICAgIHZvaWQgc3Ryb2tlU3R5bGUoR3JhcGhpY3NDb250
ZXh0KiBnYykKKyAgICB7CisgICAgICAgIFNWR1JlbmRlclN1cHBvcnQ6OmFwcGx5U3Ryb2tlU3R5
bGVUb0NvbnRleHQoZ2MsIG1fc3R5bGUsIG1fb2JqZWN0KTsKKyAgICB9CisKK3ByaXZhdGU6Cisg
ICAgY29uc3QgUmVuZGVyT2JqZWN0KiBtX29iamVjdDsKKyAgICBSZW5kZXJTdHlsZSogbV9zdHls
ZTsKK307CisKK2NsYXNzIFJlbmRlclNWR1NoYXBlIDogcHVibGljIFJlbmRlclNWR01vZGVsT2Jq
ZWN0IHsKK3B1YmxpYzoKKyAgICBleHBsaWNpdCBSZW5kZXJTVkdTaGFwZShTVkdTdHlsZWRUcmFu
c2Zvcm1hYmxlRWxlbWVudCopOworICAgIHZpcnR1YWwgflJlbmRlclNWR1NoYXBlKCk7CisKKyAg
ICB2b2lkIHNldE5lZWRzU2hhcGVVcGRhdGUoKSB7IG1fbmVlZHNTaGFwZVVwZGF0ZSA9IHRydWU7
IH0KKyAgICB2aXJ0dWFsIHZvaWQgc2V0TmVlZHNCb3VuZGFyaWVzVXBkYXRlKCkgeyBtX25lZWRz
Qm91bmRhcmllc1VwZGF0ZSA9IHRydWU7IH0KKyAgICB2aXJ0dWFsIHZvaWQgc2V0TmVlZHNUcmFu
c2Zvcm1VcGRhdGUoKSB7IG1fbmVlZHNUcmFuc2Zvcm1VcGRhdGUgPSB0cnVlOyB9CisgICAgdmly
dHVhbCB2b2lkIGZpbGxTaGFwZShHcmFwaGljc0NvbnRleHQqKTsKKyAgICB2aXJ0dWFsIHZvaWQg
c3Ryb2tlU2hhcGUoR3JhcGhpY3NDb250ZXh0Kik7CisKK3Byb3RlY3RlZDoKKyAgICB2aXJ0dWFs
IHZvaWQgY3JlYXRlU2hhcGUoKTsKKyAgICB2aXJ0dWFsIGJvb2wgaXNFbXB0eSgpIGNvbnN0Owor
ICAgIHZpcnR1YWwgRmxvYXRSZWN0IG9iamVjdEJvdW5kaW5nQm94KCkgY29uc3Q7CisgICAgdmly
dHVhbCBGbG9hdFJlY3Qgc3Ryb2tlQm91bmRpbmdCb3goKTsKKyAgICB2aXJ0dWFsIGJvb2wgc3Ry
b2tlQ29udGFpbnNTbG93Q2FzZShjb25zdCBGbG9hdFBvaW50Jik7CisgICAgdmlydHVhbCBib29s
IGZpbGxDb250YWluc1Nsb3dDYXNlKGNvbnN0IEZsb2F0UG9pbnQmLCBjb25zdCBXaW5kUnVsZSYp
IGNvbnN0OworICAgIGZsb2F0IHN0cm9rZVdpZHRoKCkgY29uc3Q7CisgICAgdm9pZCBzZXRJc0Zp
bGxGYWxsYmFjaygpIHsgbV9maWxsRmFsbGJhY2sgPSB0cnVlOyB9CisgICAgYm9vbCBpc0ZpbGxG
YWxsYmFjaygpIGNvbnN0IHsgcmV0dXJuIG1fZmlsbEZhbGxiYWNrOyB9CisKKyAgICBQYXRoJiBw
YXRoKCkgY29uc3QKKyAgICB7CisgICAgICAgIEFTU0VSVChtX3BhdGguZ2V0KCkpOworICAgICAg
ICByZXR1cm4gKm1fcGF0aDsKKyAgICB9CisKKyAgICBib29sIGhhc1BhdGgoKSBjb25zdCB7IHJl
dHVybiBtX3BhdGguZ2V0KCk7IH0KKworcHJpdmF0ZToKKyAgICAvLyBIaXQtZGV0ZWN0aW9uIHNl
cGVyYXRlZCBmb3IgdGhlIGZpbGwgYW5kIHRoZSBzdHJva2UKKyAgICBib29sIGZpbGxDb250YWlu
cyhjb25zdCBGbG9hdFBvaW50JiwgYm9vbCByZXF1aXJlc0ZpbGwgPSB0cnVlLCBXaW5kUnVsZSBm
aWxsUnVsZSA9IFJVTEVfTk9OWkVSTyk7CisgICAgYm9vbCBzdHJva2VDb250YWlucyhjb25zdCBG
bG9hdFBvaW50JiwgYm9vbCByZXF1aXJlc1N0cm9rZSA9IHRydWUpOworCisgICAgdmlydHVhbCBG
bG9hdFJlY3Qgc3Ryb2tlQm91bmRpbmdCb3goKSBjb25zdCB7IHJldHVybiBtX3N0cm9rZUFuZE1h
cmtlckJvdW5kaW5nQm94OyB9CisgICAgdmlydHVhbCBGbG9hdFJlY3QgcmVwYWludFJlY3RJbkxv
Y2FsQ29vcmRpbmF0ZXMoKSBjb25zdCB7IHJldHVybiBtX3JlcGFpbnRCb3VuZGluZ0JveDsgfQor
ICAgIHZpcnR1YWwgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiBsb2NhbFRvUGFyZW50VHJhbnNmb3Jt
KCkgY29uc3QgeyByZXR1cm4gbV9sb2NhbFRyYW5zZm9ybTsgfQorCisgICAgdmlydHVhbCBib29s
IGlzU1ZHU2hhcGUoKSBjb25zdCB7IHJldHVybiB0cnVlOyB9CisgICAgdmlydHVhbCBjb25zdCBj
aGFyKiByZW5kZXJOYW1lKCkgY29uc3QgeyByZXR1cm4gIlJlbmRlclNWR1NoYXBlIjsgfQorICAg
IHZpcnR1YWwgYm9vbCBpc1JvdW5kZWRSZWN0KCkgeyByZXR1cm4gZmFsc2U7IH0KKworICAgIHZp
cnR1YWwgdm9pZCBsYXlvdXQoKTsKKyAgICB2aXJ0dWFsIHZvaWQgcGFpbnQoUGFpbnRJbmZvJiwg
Y29uc3QgTGF5b3V0UG9pbnQmKTsKKyAgICB2aXJ0dWFsIHZvaWQgYWRkRm9jdXNSaW5nUmVjdHMo
VmVjdG9yPExheW91dFJlY3Q+JiwgY29uc3QgTGF5b3V0UG9pbnQmKTsKKworICAgIHZpcnR1YWwg
Ym9vbCBub2RlQXRGbG9hdFBvaW50KGNvbnN0IEhpdFRlc3RSZXF1ZXN0JiwgSGl0VGVzdFJlc3Vs
dCYsIGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50SW5QYXJlbnQsIEhpdFRlc3RBY3Rpb24pOworCisg
ICAgRmxvYXRSZWN0IGNhbGN1bGF0ZU1hcmtlckJvdW5kc0lmTmVlZGVkKCk7CisgICAgdm9pZCB1
cGRhdGVDYWNoZWRCb3VuZGFyaWVzKCk7CisKKyAgICB2b2lkIHNldHVwU3F1YXJlQ2FwUGF0aChQ
YXRoKiYgdXNlUGF0aCwgaW50JiBhcHBseU1vZGUpOworICAgIGJvb2wgc2V0dXBOb25TY2FsaW5n
U3Ryb2tlUGF0aChQYXRoKiYgdXNlUGF0aCwgR3JhcGhpY3NDb250ZXh0U3RhdGVTYXZlciYpOwor
ICAgIGJvb2wgc2hvdWxkU3Ryb2tlWmVyb0xlbmd0aFN1YnBhdGgoKSBjb25zdDsKKyAgICBGbG9h
dFJlY3QgemVyb0xlbmd0aFN1YnBhdGhSZWN0KCkgY29uc3Q7CisKKyAgICB2b2lkIGZpbGxBbmRT
dHJva2VQYXRoKEdyYXBoaWNzQ29udGV4dCopOworCitwcml2YXRlOgorICAgIGJvb2wgbV9uZWVk
c0JvdW5kYXJpZXNVcGRhdGUgOiAxOworICAgIGJvb2wgbV9uZWVkc1NoYXBlVXBkYXRlIDogMTsK
KyAgICBib29sIG1fbmVlZHNUcmFuc2Zvcm1VcGRhdGUgOiAxOworICAgIGJvb2wgbV9maWxsRmFs
bGJhY2sgOiAxOworICAgIGJvb2wgbV9zdHJva2VDb250YWluc0ZhbGxCYWNrIDogMTsKKworICAg
IEZsb2F0UmVjdCBtX2ZpbGxCb3VuZGluZ0JveDsKKyAgICBGbG9hdFJlY3QgbV9zdHJva2VBbmRN
YXJrZXJCb3VuZGluZ0JveDsKKyAgICBGbG9hdFJlY3QgbV9yZXBhaW50Qm91bmRpbmdCb3g7Cisg
ICAgU1ZHTWFya2VyTGF5b3V0SW5mbyBtX21hcmtlckxheW91dEluZm87CisgICAgQWZmaW5lVHJh
bnNmb3JtIG1fbG9jYWxUcmFuc2Zvcm07CisgICAgT3duUHRyPFBhdGg+IG1fcGF0aDsKK307CisK
K2lubGluZSBSZW5kZXJTVkdTaGFwZSogdG9SZW5kZXJTVkdTaGFwZShSZW5kZXJPYmplY3QqIG9i
amVjdCkKK3sKKyAgICBBU1NFUlQoIW9iamVjdCB8fCBvYmplY3QtPmlzU1ZHU2hhcGUoKSk7Cisg
ICAgcmV0dXJuIHN0YXRpY19jYXN0PFJlbmRlclNWR1NoYXBlKj4ob2JqZWN0KTsKK30KKworaW5s
aW5lIGNvbnN0IFJlbmRlclNWR1NoYXBlKiB0b1JlbmRlclNWR1NoYXBlKGNvbnN0IFJlbmRlck9i
amVjdCogb2JqZWN0KQoreworICAgIEFTU0VSVCghb2JqZWN0IHx8IG9iamVjdC0+aXNTVkdTaGFw
ZSgpKTsKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8Y29uc3QgUmVuZGVyU1ZHU2hhcGUqPihvYmpl
Y3QpOworfQorCisvLyBUaGlzIHdpbGwgY2F0Y2ggYW55b25lIGRvaW5nIGFuIHVubmVjZXNzYXJ5
IGNhc3QuCit2b2lkIHRvUmVuZGVyU1ZHU2hhcGUoY29uc3QgUmVuZGVyU1ZHU2hhcGUqKTsKKwor
fQorCisjZW5kaWYgLy8gRU5BQkxFKFNWRykKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdJbmxpbmVUZXh0Qm94LmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9zdmcvU1ZHSW5saW5lVGV4dEJveC5jcHAKaW5kZXggYzFjNWFmYS4uNzNkNmM0
MyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdJbmxpbmVUZXh0
Qm94LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR0lubGluZVRleHRC
b3guY3BwCkBAIC0zNzcsNyArMzc3LDcgQEAgdm9pZCBTVkdJbmxpbmVUZXh0Qm94OjpyZWxlYXNl
UGFpbnRpbmdSZXNvdXJjZShHcmFwaGljc0NvbnRleHQqJiBjb250ZXh0LCBjb25zdAogICAgIFJl
bmRlck9iamVjdCogcGFyZW50UmVuZGVyZXIgPSBwYXJlbnQoKS0+cmVuZGVyZXIoKTsKICAgICBB
U1NFUlQocGFyZW50UmVuZGVyZXIpOwogCi0gICAgbV9wYWludGluZ1Jlc291cmNlLT5wb3N0QXBw
bHlSZXNvdXJjZShwYXJlbnRSZW5kZXJlciwgY29udGV4dCwgbV9wYWludGluZ1Jlc291cmNlTW9k
ZSwgcGF0aCk7CisgICAgbV9wYWludGluZ1Jlc291cmNlLT5wb3N0QXBwbHlSZXNvdXJjZShzdGF0
aWNfY2FzdDxSZW5kZXJTVkdTaGFwZSo+KHBhcmVudFJlbmRlcmVyKSwgY29udGV4dCwgbV9wYWlu
dGluZ1Jlc291cmNlTW9kZSwgcGF0aCk7CiAgICAgbV9wYWludGluZ1Jlc291cmNlID0gMDsKIH0K
IApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdSZW5kZXJTdXBw
b3J0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHUmVuZGVyU3VwcG9ydC5j
cHAKaW5kZXggMDA3OTIxOS4uNTU1OTVhZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL3N2Zy9TVkdSZW5kZXJTdXBwb3J0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvc3ZnL1NWR1JlbmRlclN1cHBvcnQuY3BwCkBAIC0xNTMsNyArMTUzLDcgQEAgdm9pZCBT
VkdSZW5kZXJTdXBwb3J0OjpmaW5pc2hSZW5kZXJTVkdDb250ZW50KFJlbmRlck9iamVjdCogb2Jq
ZWN0LCBQYWludEluZm8mIHAKICAgICBTVkdSZXNvdXJjZXMqIHJlc291cmNlcyA9IFNWR1Jlc291
cmNlc0NhY2hlOjpjYWNoZWRSZXNvdXJjZXNGb3JSZW5kZXJPYmplY3Qob2JqZWN0KTsKICAgICBp
ZiAocmVzb3VyY2VzKSB7CiAgICAgICAgIGlmIChSZW5kZXJTVkdSZXNvdXJjZUZpbHRlciogZmls
dGVyID0gcmVzb3VyY2VzLT5maWx0ZXIoKSkgewotICAgICAgICAgICAgZmlsdGVyLT5wb3N0QXBw
bHlSZXNvdXJjZShvYmplY3QsIHBhaW50SW5mby5jb250ZXh0LCBBcHBseVRvRGVmYXVsdE1vZGUs
IC8qIHBhdGggKi8wKTsKKyAgICAgICAgICAgIGZpbHRlci0+cG9zdEFwcGx5UmVzb3VyY2Uoc3Rh
dGljX2Nhc3Q8UmVuZGVyU1ZHU2hhcGUqPihvYmplY3QpLCBwYWludEluZm8uY29udGV4dCwgQXBw
bHlUb0RlZmF1bHRNb2RlLCAwKTsKICAgICAgICAgICAgIHBhaW50SW5mby5jb250ZXh0ID0gc2F2
ZWRDb250ZXh0OwogICAgICAgICB9CiAgICAgfQpAQCAtMjI1LDkgKzIyNSw5IEBAIHZvaWQgU1ZH
UmVuZGVyU3VwcG9ydDo6bGF5b3V0Q2hpbGRyZW4oUmVuZGVyT2JqZWN0KiBzdGFydCwgYm9vbCBz
ZWxmTmVlZHNMYXlvdXQpCiAgICAgICAgICAgICAvLyBXaGVuIHNlbGZOZWVkc0xheW91dCBpcyBm
YWxzZSBhbmQgdGhlIGxheW91dCBzaXplIGNoYW5nZWQsIHdlIGhhdmUgdG8gY2hlY2sgd2hldGhl
ciB0aGlzIGNoaWxkIHVzZXMgcmVsYXRpdmUgbGVuZ3RocwogICAgICAgICAgICAgaWYgKFNWR0Vs
ZW1lbnQqIGVsZW1lbnQgPSBjaGlsZC0+bm9kZSgpLT5pc1NWR0VsZW1lbnQoKSA/IHN0YXRpY19j
YXN0PFNWR0VsZW1lbnQqPihjaGlsZC0+bm9kZSgpKSA6IDApIHsKICAgICAgICAgICAgICAgICBp
ZiAoZWxlbWVudC0+aXNTdHlsZWQoKSAmJiBzdGF0aWNfY2FzdDxTVkdTdHlsZWRFbGVtZW50Kj4o
ZWxlbWVudCktPmhhc1JlbGF0aXZlTGVuZ3RocygpKSB7Ci0gICAgICAgICAgICAgICAgICAgIC8v
IFdoZW4gdGhlIGxheW91dCBzaXplIGNoYW5nZWQgYW5kIHdoZW4gdXNpbmcgcmVsYXRpdmUgdmFs
dWVzIHRlbGwgdGhlIFJlbmRlclNWR1BhdGggdG8gdXBkYXRlIGl0cyBQYXRoIG9iamVjdAotICAg
ICAgICAgICAgICAgICAgICBpZiAoY2hpbGQtPmlzU1ZHUGF0aCgpKQotICAgICAgICAgICAgICAg
ICAgICAgICAgdG9SZW5kZXJTVkdQYXRoKGNoaWxkKS0+c2V0TmVlZHNQYXRoVXBkYXRlKCk7Cisg
ICAgICAgICAgICAgICAgICAgIC8vIFdoZW4gdGhlIGxheW91dCBzaXplIGNoYW5nZWQgYW5kIHdo
ZW4gdXNpbmcgcmVsYXRpdmUgdmFsdWVzIHRlbGwgdGhlIFJlbmRlclNWR1NoYXBlIHRvIHVwZGF0
ZSBpdHMgc2hhcGUgb2JqZWN0CisgICAgICAgICAgICAgICAgICAgIGlmIChjaGlsZC0+aXNTVkdT
aGFwZSgpKQorICAgICAgICAgICAgICAgICAgICAgICAgdG9SZW5kZXJTVkdTaGFwZShjaGlsZCkt
PnNldE5lZWRzU2hhcGVVcGRhdGUoKTsKIAogICAgICAgICAgICAgICAgICAgICBuZWVkc0xheW91
dCA9IHRydWU7CiAgICAgICAgICAgICAgICAgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL3N2Zy9TVkdSZW5kZXJUcmVlQXNUZXh0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9zdmcvU1ZHUmVuZGVyVHJlZUFzVGV4dC5jcHAKaW5kZXggYTE2Mjk2OS4uZDFhZDcy
YSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdSZW5kZXJUcmVl
QXNUZXh0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR1JlbmRlclRy
ZWVBc1RleHQuY3BwCkBAIC01NSw2ICs1NSw3IEBACiAjaW5jbHVkZSAiUmVuZGVyU1ZHUmVzb3Vy
Y2VSYWRpYWxHcmFkaWVudC5oIgogI2luY2x1ZGUgIlJlbmRlclNWR1Jlc291cmNlU29saWRDb2xv
ci5oIgogI2luY2x1ZGUgIlJlbmRlclNWR1Jvb3QuaCIKKyNpbmNsdWRlICJSZW5kZXJTVkdTaGFw
ZS5oIgogI2luY2x1ZGUgIlJlbmRlclNWR1RleHQuaCIKICNpbmNsdWRlICJSZW5kZXJUcmVlQXNU
ZXh0LmgiCiAjaW5jbHVkZSAiU1ZHQ2lyY2xlRWxlbWVudC5oIgpAQCAtMjg5LDE4ICsyOTAsMTgg
QEAgc3RhdGljIHZvaWQgd3JpdGVTdHlsZShUZXh0U3RyZWFtJiB0cywgY29uc3QgUmVuZGVyT2Jq
ZWN0JiBvYmplY3QpCiAgICAgICAgIHdyaXRlTmFtZVZhbHVlUGFpcih0cywgInRyYW5zZm9ybSIs
IG9iamVjdC5sb2NhbFRyYW5zZm9ybSgpKTsKICAgICB3cml0ZUlmTm90RGVmYXVsdCh0cywgImlt
YWdlIHJlbmRlcmluZyIsIHN0eWxlLT5pbWFnZVJlbmRlcmluZygpLCBSZW5kZXJTdHlsZTo6aW5p
dGlhbEltYWdlUmVuZGVyaW5nKCkpOwogICAgIHdyaXRlSWZOb3REZWZhdWx0KHRzLCAib3BhY2l0
eSIsIHN0eWxlLT5vcGFjaXR5KCksIFJlbmRlclN0eWxlOjppbml0aWFsT3BhY2l0eSgpKTsKLSAg
ICBpZiAob2JqZWN0LmlzU1ZHUGF0aCgpKSB7Ci0gICAgICAgIGNvbnN0IFJlbmRlclNWR1BhdGgm
IHBhdGggPSBzdGF0aWNfY2FzdDxjb25zdCBSZW5kZXJTVkdQYXRoJj4ob2JqZWN0KTsKLSAgICAg
ICAgQVNTRVJUKHBhdGgubm9kZSgpKTsKLSAgICAgICAgQVNTRVJUKHBhdGgubm9kZSgpLT5pc1NW
R0VsZW1lbnQoKSk7CisgICAgaWYgKG9iamVjdC5pc1NWR1NoYXBlKCkpIHsKKyAgICAgICAgY29u
c3QgUmVuZGVyU1ZHU2hhcGUmIHNoYXBlID0gc3RhdGljX2Nhc3Q8Y29uc3QgUmVuZGVyU1ZHU2hh
cGUmPihvYmplY3QpOworICAgICAgICBBU1NFUlQoc2hhcGUubm9kZSgpKTsKKyAgICAgICAgQVNT
RVJUKHNoYXBlLm5vZGUoKS0+aXNTVkdFbGVtZW50KCkpOwogCiAgICAgICAgIENvbG9yIGZhbGxi
YWNrQ29sb3I7Ci0gICAgICAgIGlmIChSZW5kZXJTVkdSZXNvdXJjZSogc3Ryb2tlUGFpbnRpbmdS
ZXNvdXJjZSA9IFJlbmRlclNWR1Jlc291cmNlOjpzdHJva2VQYWludGluZ1Jlc291cmNlKGNvbnN0
X2Nhc3Q8UmVuZGVyU1ZHUGF0aCo+KCZwYXRoKSwgcGF0aC5zdHlsZSgpLCBmYWxsYmFja0NvbG9y
KSkgeworICAgICAgICBpZiAoUmVuZGVyU1ZHUmVzb3VyY2UqIHN0cm9rZVBhaW50aW5nUmVzb3Vy
Y2UgPSBSZW5kZXJTVkdSZXNvdXJjZTo6c3Ryb2tlUGFpbnRpbmdSZXNvdXJjZShjb25zdF9jYXN0
PFJlbmRlclNWR1NoYXBlKj4oJnNoYXBlKSwgc2hhcGUuc3R5bGUoKSwgZmFsbGJhY2tDb2xvcikp
IHsKICAgICAgICAgICAgIFRleHRTdHJlYW1TZXBhcmF0b3IgcygiICIpOwogICAgICAgICAgICAg
dHMgPDwgIiBbc3Ryb2tlPXsiIDw8IHM7CiAgICAgICAgICAgICB3cml0ZVNWR1BhaW50aW5nUmVz
b3VyY2UodHMsIHN0cm9rZVBhaW50aW5nUmVzb3VyY2UpOwogCi0gICAgICAgICAgICBTVkdFbGVt
ZW50KiBlbGVtZW50ID0gc3RhdGljX2Nhc3Q8U1ZHRWxlbWVudCo+KHBhdGgubm9kZSgpKTsKKyAg
ICAgICAgICAgIFNWR0VsZW1lbnQqIGVsZW1lbnQgPSBzdGF0aWNfY2FzdDxTVkdFbGVtZW50Kj4o
c2hhcGUubm9kZSgpKTsKICAgICAgICAgICAgIGRvdWJsZSBkYXNoT2Zmc2V0ID0gc3ZnU3R5bGUt
PnN0cm9rZURhc2hPZmZzZXQoKS52YWx1ZShlbGVtZW50KTsKICAgICAgICAgICAgIGRvdWJsZSBz
dHJva2VXaWR0aCA9IHN2Z1N0eWxlLT5zdHJva2VXaWR0aCgpLnZhbHVlKGVsZW1lbnQpOwogICAg
ICAgICAgICAgY29uc3QgVmVjdG9yPFNWR0xlbmd0aD4mIGRhc2hlcyA9IHN2Z1N0eWxlLT5zdHJv
a2VEYXNoQXJyYXkoKTsKQEAgLTMyMiw3ICszMjMsNyBAQCBzdGF0aWMgdm9pZCB3cml0ZVN0eWxl
KFRleHRTdHJlYW0mIHRzLCBjb25zdCBSZW5kZXJPYmplY3QmIG9iamVjdCkKICAgICAgICAgICAg
IHRzIDw8ICJ9XSI7CiAgICAgICAgIH0KIAotICAgICAgICBpZiAoUmVuZGVyU1ZHUmVzb3VyY2Uq
IGZpbGxQYWludGluZ1Jlc291cmNlID0gUmVuZGVyU1ZHUmVzb3VyY2U6OmZpbGxQYWludGluZ1Jl
c291cmNlKGNvbnN0X2Nhc3Q8UmVuZGVyU1ZHUGF0aCo+KCZwYXRoKSwgcGF0aC5zdHlsZSgpLCBm
YWxsYmFja0NvbG9yKSkgeworICAgICAgICBpZiAoUmVuZGVyU1ZHUmVzb3VyY2UqIGZpbGxQYWlu
dGluZ1Jlc291cmNlID0gUmVuZGVyU1ZHUmVzb3VyY2U6OmZpbGxQYWludGluZ1Jlc291cmNlKGNv
bnN0X2Nhc3Q8UmVuZGVyU1ZHU2hhcGUqPigmc2hhcGUpLCBzaGFwZS5zdHlsZSgpLCBmYWxsYmFj
a0NvbG9yKSkgewogICAgICAgICAgICAgVGV4dFN0cmVhbVNlcGFyYXRvciBzKCIgIik7CiAgICAg
ICAgICAgICB0cyA8PCAiIFtmaWxsPXsiIDw8IHM7CiAgICAgICAgICAgICB3cml0ZVNWR1BhaW50
aW5nUmVzb3VyY2UodHMsIGZpbGxQYWludGluZ1Jlc291cmNlKTsKQEAgLTM0NiwxMiArMzQ3LDEy
IEBAIHN0YXRpYyBUZXh0U3RyZWFtJiB3cml0ZVBvc2l0aW9uQW5kU3R5bGUoVGV4dFN0cmVhbSYg
dHMsIGNvbnN0IFJlbmRlck9iamVjdCYgb2JqCiAgICAgcmV0dXJuIHRzOwogfQogCi1zdGF0aWMg
VGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiB0cywgY29uc3QgUmVuZGVyU1ZHUGF0
aCYgcGF0aCkKK3N0YXRpYyBUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJlYW0mIHRzLCBj
b25zdCBSZW5kZXJTVkdTaGFwZSYgc2hhcGUpCiB7Ci0gICAgd3JpdGVQb3NpdGlvbkFuZFN0eWxl
KHRzLCBwYXRoKTsKKyAgICB3cml0ZVBvc2l0aW9uQW5kU3R5bGUodHMsIHNoYXBlKTsKIAotICAg
IEFTU0VSVChwYXRoLm5vZGUoKS0+aXNTVkdFbGVtZW50KCkpOwotICAgIFNWR0VsZW1lbnQqIHN2
Z0VsZW1lbnQgPSBzdGF0aWNfY2FzdDxTVkdFbGVtZW50Kj4ocGF0aC5ub2RlKCkpOworICAgIEFT
U0VSVChzaGFwZS5ub2RlKCktPmlzU1ZHRWxlbWVudCgpKTsKKyAgICBTVkdFbGVtZW50KiBzdmdF
bGVtZW50ID0gc3RhdGljX2Nhc3Q8U1ZHRWxlbWVudCo+KHNoYXBlLm5vZGUoKSk7CiAKICAgICBp
ZiAoc3ZnRWxlbWVudC0+aGFzVGFnTmFtZShTVkdOYW1lczo6cmVjdFRhZykpIHsKICAgICAgICAg
U1ZHUmVjdEVsZW1lbnQqIGVsZW1lbnQgPSBzdGF0aWNfY2FzdDxTVkdSZWN0RWxlbWVudCo+KHN2
Z0VsZW1lbnQpOwpAQCAtNjUzLDExICs2NTQsMTEgQEAgdm9pZCB3cml0ZVNWR0ltYWdlKFRleHRT
dHJlYW0mIHRzLCBjb25zdCBSZW5kZXJTVkdJbWFnZSYgaW1hZ2UsIGludCBpbmRlbnQpCiAgICAg
d3JpdGVSZXNvdXJjZXModHMsIGltYWdlLCBpbmRlbnQpOwogfQogCi12b2lkIHdyaXRlKFRleHRT
dHJlYW0mIHRzLCBjb25zdCBSZW5kZXJTVkdQYXRoJiBwYXRoLCBpbnQgaW5kZW50KQordm9pZCB3
cml0ZShUZXh0U3RyZWFtJiB0cywgY29uc3QgUmVuZGVyU1ZHU2hhcGUmIHNoYXBlLCBpbnQgaW5k
ZW50KQogewotICAgIHdyaXRlU3RhbmRhcmRQcmVmaXgodHMsIHBhdGgsIGluZGVudCk7Ci0gICAg
dHMgPDwgcGF0aCA8PCAiXG4iOwotICAgIHdyaXRlUmVzb3VyY2VzKHRzLCBwYXRoLCBpbmRlbnQp
OworICAgIHdyaXRlU3RhbmRhcmRQcmVmaXgodHMsIHNoYXBlLCBpbmRlbnQpOworICAgIHRzIDw8
IHNoYXBlIDw8ICJcbiI7CisgICAgd3JpdGVSZXNvdXJjZXModHMsIHNoYXBlLCBpbmRlbnQpOwog
fQogCiB2b2lkIHdyaXRlU1ZHR3JhZGllbnRTdG9wKFRleHRTdHJlYW0mIHRzLCBjb25zdCBSZW5k
ZXJTVkdHcmFkaWVudFN0b3AmIHN0b3AsIGludCBpbmRlbnQpCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR1JlbmRlclRyZWVBc1RleHQuaCBiL1NvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9zdmcvU1ZHUmVuZGVyVHJlZUFzVGV4dC5oCmluZGV4IGNlMDdhNWMuLjM1
OThjODMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHUmVuZGVy
VHJlZUFzVGV4dC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHUmVuZGVy
VHJlZUFzVGV4dC5oCkBAIC00MSwxNCArNDEsMTQgQEAgY2xhc3MgUmVuZGVySW1hZ2U7CiBjbGFz
cyBSZW5kZXJPYmplY3Q7CiBjbGFzcyBSZW5kZXJTVkdHcmFkaWVudFN0b3A7CiBjbGFzcyBSZW5k
ZXJTVkdJbWFnZTsKLWNsYXNzIFJlbmRlclNWR1BhdGg7CitjbGFzcyBSZW5kZXJTVkdTaGFwZTsK
IGNsYXNzIFJlbmRlclNWR1Jvb3Q7CiBjbGFzcyBSZW5kZXJUZXh0OwogY2xhc3MgQWZmaW5lVHJh
bnNmb3JtOwogY2xhc3MgU1ZHVW5pdFR5cGVzOwogCiAvLyBmdW5jdGlvbnMgdXNlZCBieSB0aGUg
bWFpbiBSZW5kZXJUcmVlQXNUZXh0IGNvZGUKLXZvaWQgd3JpdGUoVGV4dFN0cmVhbSYsIGNvbnN0
IFJlbmRlclNWR1BhdGgmLCBpbnQgaW5kZW50KTsKK3ZvaWQgd3JpdGUoVGV4dFN0cmVhbSYsIGNv
bnN0IFJlbmRlclNWR1NoYXBlJiwgaW50IGluZGVudCk7CiB2b2lkIHdyaXRlKFRleHRTdHJlYW0m
LCBjb25zdCBSZW5kZXJTVkdSb290JiwgaW50IGluZGVudCk7CiB2b2lkIHdyaXRlU1ZHR3JhZGll
bnRTdG9wKFRleHRTdHJlYW0mLCBjb25zdCBSZW5kZXJTVkdHcmFkaWVudFN0b3AmLCBpbnQgaW5k
ZW50KTsKIHZvaWQgd3JpdGVTVkdSZXNvdXJjZUNvbnRhaW5lcihUZXh0U3RyZWFtJiwgY29uc3Qg
UmVuZGVyT2JqZWN0JiwgaW50IGluZGVudCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvc3ZnL1NWR1RleHRSdW5SZW5kZXJpbmdDb250ZXh0LmNwcCBiL1NvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9zdmcvU1ZHVGV4dFJ1blJlbmRlcmluZ0NvbnRleHQuY3BwCmluZGV4IDMz
YWNmOTIuLjRmMWEyYjEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcv
U1ZHVGV4dFJ1blJlbmRlcmluZ0NvbnRleHQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9zdmcvU1ZHVGV4dFJ1blJlbmRlcmluZ0NvbnRleHQuY3BwCkBAIC0xNjAsNyArMTYwLDcg
QEAgdm9pZCBTVkdUZXh0UnVuUmVuZGVyaW5nQ29udGV4dDo6ZHJhd1NWR0dseXBocyhHcmFwaGlj
c0NvbnRleHQqIGNvbnRleHQsIGNvbnN0IFQKICAgICAgICAgICAgICAgICBjb25zdCBSZW5kZXJT
VkdJbmxpbmVUZXh0KiB0ZXh0UmVuZGVyZXIgPSB0b1JlbmRlclNWR0lubGluZVRleHQocmVuZGVy
T2JqZWN0KTsKICAgICAgICAgICAgICAgICBjb250ZXh0LT5zZXRTdHJva2VUaGlja25lc3MoY29u
dGV4dC0+c3Ryb2tlVGhpY2tuZXNzKCkgKiB0ZXh0UmVuZGVyZXItPnNjYWxpbmdGYWN0b3IoKSk7
CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBhY3RpdmVQYWludGluZ1Jlc291cmNlLT5wb3N0
QXBwbHlSZXNvdXJjZShwYXJlbnRSZW5kZXJPYmplY3QsIGNvbnRleHQsIHJlc291cmNlTW9kZSwg
JmdseXBoUGF0aCk7CisgICAgICAgICAgICBhY3RpdmVQYWludGluZ1Jlc291cmNlLT5wb3N0QXBw
bHlSZXNvdXJjZShzdGF0aWNfY2FzdDxSZW5kZXJTVkdTaGFwZSo+KHBhcmVudFJlbmRlck9iamVj
dCksIGNvbnRleHQsIHJlc291cmNlTW9kZSwgJmdseXBoUGF0aCk7CiAgICAgICAgICB9CiAgCiAg
ICAgICAgIGNvbnRleHQtPnJlc3RvcmUoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3N2
Zy9TVkdDaXJjbGVFbGVtZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdDaXJjbGVFbGVt
ZW50LmNwcAppbmRleCAyYWU2OWI4Li4wMzY2OWUwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9zdmcvU1ZHQ2lyY2xlRWxlbWVudC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0Np
cmNsZUVsZW1lbnQuY3BwCkBAIC0xMjQsNyArMTI0LDcgQEAgdm9pZCBTVkdDaXJjbGVFbGVtZW50
OjpzdmdBdHRyaWJ1dGVDaGFuZ2VkKGNvbnN0IFF1YWxpZmllZE5hbWUmIGF0dHJOYW1lKQogICAg
ICAgICByZXR1cm47CiAKICAgICBpZiAoaXNMZW5ndGhBdHRyaWJ1dGUpIHsKLSAgICAgICAgcmVu
ZGVyZXItPnNldE5lZWRzUGF0aFVwZGF0ZSgpOworICAgICAgICByZW5kZXJlci0+c2V0TmVlZHNT
aGFwZVVwZGF0ZSgpOwogICAgICAgICBSZW5kZXJTVkdSZXNvdXJjZTo6bWFya0ZvckxheW91dEFu
ZFBhcmVudFJlc291cmNlSW52YWxpZGF0aW9uKHJlbmRlcmVyKTsKICAgICAgICAgcmV0dXJuOwog
ICAgIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdFbGxpcHNlRWxlbWVudC5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRWxsaXBzZUVsZW1lbnQuY3BwCmluZGV4IGNlYTA2
NmQuLmNhMDE3YzQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdFbGxpcHNlRWxl
bWVudC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0VsbGlwc2VFbGVtZW50LmNwcApA
QCAtMTI5LDcgKzEyOSw3IEBAIHZvaWQgU1ZHRWxsaXBzZUVsZW1lbnQ6OnN2Z0F0dHJpYnV0ZUNo
YW5nZWQoY29uc3QgUXVhbGlmaWVkTmFtZSYgYXR0ck5hbWUpCiAgICAgICAgIHJldHVybjsKIAog
ICAgIGlmIChpc0xlbmd0aEF0dHJpYnV0ZSkgewotICAgICAgICByZW5kZXJlci0+c2V0TmVlZHNQ
YXRoVXBkYXRlKCk7CisgICAgICAgIHJlbmRlcmVyLT5zZXROZWVkc1NoYXBlVXBkYXRlKCk7CiAg
ICAgICAgIFJlbmRlclNWR1Jlc291cmNlOjptYXJrRm9yTGF5b3V0QW5kUGFyZW50UmVzb3VyY2VJ
bnZhbGlkYXRpb24ocmVuZGVyZXIpOwogICAgICAgICByZXR1cm47CiAgICAgfQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0xpbmVFbGVtZW50LmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L3N2Zy9TVkdMaW5lRWxlbWVudC5jcHAKaW5kZXggYzdjYTExZS4uYjFiYjhlYSAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0xpbmVFbGVtZW50LmNwcAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9zdmcvU1ZHTGluZUVsZW1lbnQuY3BwCkBAIC0xMjksNyArMTI5LDcgQEAgdm9pZCBTVkdM
aW5lRWxlbWVudDo6c3ZnQXR0cmlidXRlQ2hhbmdlZChjb25zdCBRdWFsaWZpZWROYW1lJiBhdHRy
TmFtZSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgaWYgKGlzTGVuZ3RoQXR0cmlidXRlKSB7Ci0g
ICAgICAgIHJlbmRlcmVyLT5zZXROZWVkc1BhdGhVcGRhdGUoKTsKKyAgICAgICAgcmVuZGVyZXIt
PnNldE5lZWRzU2hhcGVVcGRhdGUoKTsKICAgICAgICAgUmVuZGVyU1ZHUmVzb3VyY2U6Om1hcmtG
b3JMYXlvdXRBbmRQYXJlbnRSZXNvdXJjZUludmFsaWRhdGlvbihyZW5kZXJlcik7CiAgICAgICAg
IHJldHVybjsKICAgICB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHUGF0aEVs
ZW1lbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvc3ZnL1NWR1BhdGhFbGVtZW50LmNwcAppbmRleCBh
N2EzMzdlLi5mZTMzNTk1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHUGF0aEVs
ZW1lbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdQYXRoRWxlbWVudC5jcHAKQEAg
LTI2OSw3ICsyNjksNyBAQCB2b2lkIFNWR1BhdGhFbGVtZW50OjpzdmdBdHRyaWJ1dGVDaGFuZ2Vk
KGNvbnN0IFF1YWxpZmllZE5hbWUmIGF0dHJOYW1lKQogICAgICAgICB9CiAKICAgICAgICAgaWYg
KHJlbmRlcmVyKQotICAgICAgICAgICAgcmVuZGVyZXItPnNldE5lZWRzUGF0aFVwZGF0ZSgpOwor
ICAgICAgICAgICAgcmVuZGVyZXItPnNldE5lZWRzU2hhcGVVcGRhdGUoKTsKICAgICB9CiAKICAg
ICBpZiAocmVuZGVyZXIpCkBAIC0zNTUsMTAgKzM1NSwxNiBAQCB2b2lkIFNWR1BhdGhFbGVtZW50
OjpwYXRoU2VnTGlzdENoYW5nZWQoU1ZHUGF0aFNlZ1JvbGUgcm9sZSkKICAgICBpZiAoIXJlbmRl
cmVyKQogICAgICAgICByZXR1cm47CiAKLSAgICByZW5kZXJlci0+c2V0TmVlZHNQYXRoVXBkYXRl
KCk7CisgICAgcmVuZGVyZXItPnNldE5lZWRzU2hhcGVVcGRhdGUoKTsKICAgICBSZW5kZXJTVkdS
ZXNvdXJjZTo6bWFya0ZvckxheW91dEFuZFBhcmVudFJlc291cmNlSW52YWxpZGF0aW9uKHJlbmRl
cmVyKTsKIH0KIAorUmVuZGVyT2JqZWN0KiBTVkdQYXRoRWxlbWVudDo6Y3JlYXRlUmVuZGVyZXIo
UmVuZGVyQXJlbmEqIGFyZW5hLCBSZW5kZXJTdHlsZSopCit7CisgICAgLy8gQnkgZGVmYXVsdCwg
YW55IHN1YmNsYXNzIGlzIGV4cGVjdGVkIHRvIGRvIHBhdGgtYmFzZWQgZHJhd2luZworICAgIHJl
dHVybiBuZXcgKGFyZW5hKSBSZW5kZXJTVkdQYXRoKHRoaXMpOworfQorCiB9CiAKICNlbmRpZiAv
LyBFTkFCTEUoU1ZHKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvc3ZnL1NWR1BhdGhFbGVt
ZW50LmggYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHUGF0aEVsZW1lbnQuaAppbmRleCAxZDM3ZDBl
Li41NGI4ZmUyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHUGF0aEVsZW1lbnQu
aAorKysgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHUGF0aEVsZW1lbnQuaApAQCAtMTIyLDYgKzEy
Miw4IEBAIHByaXZhdGU6CiAgICAgdmlydHVhbCB2b2lkIHN5bmNocm9uaXplUmVxdWlyZWRFeHRl
bnNpb25zKCkgeyBTVkdUZXN0czo6c3luY2hyb25pemVSZXF1aXJlZEV4dGVuc2lvbnModGhpcyk7
IH0KICAgICB2aXJ0dWFsIHZvaWQgc3luY2hyb25pemVTeXN0ZW1MYW5ndWFnZSgpIHsgU1ZHVGVz
dHM6OnN5bmNocm9uaXplU3lzdGVtTGFuZ3VhZ2UodGhpcyk7IH0KIAorICAgIFJlbmRlck9iamVj
dCogY3JlYXRlUmVuZGVyZXIoUmVuZGVyQXJlbmEqLCBSZW5kZXJTdHlsZSopOworCiBwcml2YXRl
OgogICAgIE93blB0cjxTVkdQYXRoQnl0ZVN0cmVhbT4gbV9wYXRoQnl0ZVN0cmVhbTsKICAgICBt
dXRhYmxlIFNWR1N5bmNocm9uaXphYmxlQW5pbWF0ZWRQcm9wZXJ0eTxTVkdQYXRoU2VnTGlzdD4g
bV9wYXRoU2VnTGlzdDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdQb2x5RWxl
bWVudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHUG9seUVsZW1lbnQuY3BwCmluZGV4IDYx
NmI4NjcuLmYzMGNhNGEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdQb2x5RWxl
bWVudC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvc3ZnL1NWR1BvbHlFbGVtZW50LmNwcApAQCAt
MTI0LDcgKzEyNCw3IEBAIHZvaWQgU1ZHUG9seUVsZW1lbnQ6OnN2Z0F0dHJpYnV0ZUNoYW5nZWQo
Y29uc3QgUXVhbGlmaWVkTmFtZSYgYXR0ck5hbWUpCiAgICAgICAgIHJldHVybjsKIAogICAgIGlm
IChhdHRyTmFtZSA9PSBTVkdOYW1lczo6cG9pbnRzQXR0cikgewotICAgICAgICByZW5kZXJlci0+
c2V0TmVlZHNQYXRoVXBkYXRlKCk7CisgICAgICAgIHJlbmRlcmVyLT5zZXROZWVkc1NoYXBlVXBk
YXRlKCk7CiAgICAgICAgIFJlbmRlclNWR1Jlc291cmNlOjptYXJrRm9yTGF5b3V0QW5kUGFyZW50
UmVzb3VyY2VJbnZhbGlkYXRpb24ocmVuZGVyZXIpOwogICAgICAgICByZXR1cm47CiAgICAgfQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvc3ZnL1NWR1JlY3RFbGVtZW50LmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL3N2Zy9TVkdSZWN0RWxlbWVudC5jcHAKaW5kZXggZTg0Nzc0ZC4uMTg3OWUwYSAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvc3ZnL1NWR1JlY3RFbGVtZW50LmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9zdmcvU1ZHUmVjdEVsZW1lbnQuY3BwCkBAIC0yNSw2ICsyNSw3IEBACiAK
ICNpbmNsdWRlICJBdHRyaWJ1dGUuaCIKICNpbmNsdWRlICJSZW5kZXJTVkdQYXRoLmgiCisjaW5j
bHVkZSAiUmVuZGVyU1ZHUmVjdC5oIgogI2luY2x1ZGUgIlJlbmRlclNWR1Jlc291cmNlLmgiCiAj
aW5jbHVkZSAiU1ZHRWxlbWVudEluc3RhbmNlLmgiCiAjaW5jbHVkZSAiU1ZHTGVuZ3RoLmgiCkBA
IC0zMiw2ICszMyw4IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAorY2xhc3MgUmVuZGVyU1ZH
UmVjdDsKKwogLy8gQW5pbWF0ZWQgcHJvcGVydHkgZGVmaW5pdGlvbnMKIERFRklORV9BTklNQVRF
RF9MRU5HVEgoU1ZHUmVjdEVsZW1lbnQsIFNWR05hbWVzOjp4QXR0ciwgWCwgeCkKIERFRklORV9B
TklNQVRFRF9MRU5HVEgoU1ZHUmVjdEVsZW1lbnQsIFNWR05hbWVzOjp5QXR0ciwgWSwgeSkKQEAg
LTEzNywxMiArMTQwLDEyIEBAIHZvaWQgU1ZHUmVjdEVsZW1lbnQ6OnN2Z0F0dHJpYnV0ZUNoYW5n
ZWQoY29uc3QgUXVhbGlmaWVkTmFtZSYgYXR0ck5hbWUpCiAgICAgaWYgKFNWR1Rlc3RzOjpoYW5k
bGVBdHRyaWJ1dGVDaGFuZ2UodGhpcywgYXR0ck5hbWUpKQogICAgICAgICByZXR1cm47CiAKLSAg
ICBSZW5kZXJTVkdQYXRoKiByZW5kZXJlciA9IHN0YXRpY19jYXN0PFJlbmRlclNWR1BhdGgqPih0
aGlzLT5yZW5kZXJlcigpKTsKKyAgICBSZW5kZXJTVkdSZWN0KiByZW5kZXJlciA9IHN0YXRpY19j
YXN0PFJlbmRlclNWR1JlY3QqPih0aGlzLT5yZW5kZXJlcigpKTsKICAgICBpZiAoIXJlbmRlcmVy
KQogICAgICAgICByZXR1cm47CiAKICAgICBpZiAoaXNMZW5ndGhBdHRyaWJ1dGUpIHsKLSAgICAg
ICAgcmVuZGVyZXItPnNldE5lZWRzUGF0aFVwZGF0ZSgpOworICAgICAgICByZW5kZXJlci0+c2V0
TmVlZHNTaGFwZVVwZGF0ZSgpOwogICAgICAgICBSZW5kZXJTVkdSZXNvdXJjZTo6bWFya0Zvckxh
eW91dEFuZFBhcmVudFJlc291cmNlSW52YWxpZGF0aW9uKHJlbmRlcmVyKTsKICAgICAgICAgcmV0
dXJuOwogICAgIH0KQEAgLTE5OCw2ICsyMDEsMTEgQEAgYm9vbCBTVkdSZWN0RWxlbWVudDo6c2Vs
Zkhhc1JlbGF0aXZlTGVuZ3RocygpIGNvbnN0CiAgICAgICAgIHx8IHJ5KCkuaXNSZWxhdGl2ZSgp
OwogfQogCitSZW5kZXJPYmplY3QqIFNWR1JlY3RFbGVtZW50OjpjcmVhdGVSZW5kZXJlcihSZW5k
ZXJBcmVuYSogYXJlbmEsIFJlbmRlclN0eWxlKikKK3sKKyAgICByZXR1cm4gbmV3IChhcmVuYSkg
UmVuZGVyU1ZHUmVjdCh0aGlzKTsKK30KKwogfQogCiAjZW5kaWYgLy8gRU5BQkxFKFNWRykKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdSZWN0RWxlbWVudC5oIGIvU291cmNlL1dl
YkNvcmUvc3ZnL1NWR1JlY3RFbGVtZW50LmgKaW5kZXggOTk0MzdmMy4uOWJmNjAyZiAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvc3ZnL1NWR1JlY3RFbGVtZW50LmgKKysrIGIvU291cmNlL1dl
YkNvcmUvc3ZnL1NWR1JlY3RFbGVtZW50LmgKQEAgLTUyLDYgKzUyLDggQEAgcHJpdmF0ZToKIAog
ICAgIHZpcnR1YWwgYm9vbCBzZWxmSGFzUmVsYXRpdmVMZW5ndGhzKCkgY29uc3Q7CiAKKyAgICBS
ZW5kZXJPYmplY3QqIGNyZWF0ZVJlbmRlcmVyKFJlbmRlckFyZW5hKiwgUmVuZGVyU3R5bGUqKTsK
KwogICAgIEJFR0lOX0RFQ0xBUkVfQU5JTUFURURfUFJPUEVSVElFUyhTVkdSZWN0RWxlbWVudCkK
ICAgICAgICAgREVDTEFSRV9BTklNQVRFRF9MRU5HVEgoWCwgeCkKICAgICAgICAgREVDTEFSRV9B
TklNQVRFRF9MRU5HVEgoWSwgeSkKLS0gCjEuNy41LjQKCg==
</data>
<flag name="review"
          id="102243"
          type_id="1"
          status="-"
          setter="krit"
    />
    <flag name="commit-queue"
          id="102244"
          type_id="3"
          status="-"
          setter="rhodovan.u-szeged"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>106727</attachid>
            <date>2011-09-08 06:05:26 -0700</date>
            <delta_ts>2011-09-12 02:17:54 -0700</delta_ts>
            <desc>Propsed patch</desc>
            <filename>0001-krit-review-tests.patch</filename>
            <type>text/plain</type>
            <size>103555</size>
            <attacher name="Renata Hodovan">rhodovan.u-szeged</attacher>
            
              <data encoding="base64">RnJvbSA3YTRhYzBkNGQ0MGIwOGY1MDA4MjhjZjRiODc2NzMxNzBmZWExMjM3IE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBSZW5hdGEgSG9kb3ZhbiA8cmVuaUB3ZWJraXQub3JnPgpEYXRl
OiBUaHUsIDggU2VwIDIwMTEgMTQ6MDQ6MDkgKzAyMDAKU3ViamVjdDogW1BBVENIXSBrcml0IHJl
dmlldyB0ZXN0cwoKLS0tCiAuLi4vcG9pbnRlci1ldmVudHMtb24tcm91bmRlZC1yZWN0LWV4cGVj
dGVkLnR4dCAgICB8ICAgIDMgKwogLi4uL2N1c3RvbS9wb2ludGVyLWV2ZW50cy1vbi1yb3VuZGVk
LXJlY3QueGh0bWwgICAgfCAgIDY3ICsrKwogLi4uZW50cy13aXRoLWxpbmVjYXBzLWFuZC1taXRl
cmxpbWl0cy1leHBlY3RlZC50eHQgfCAgICAzICsKIC4uLm50ZXItZXZlbnRzLXdpdGgtbGluZWNh
cHMtYW5kLW1pdGVybGltaXRzLnhodG1sIHwgICA2NiArKysKIFNvdXJjZS9XZWJDb3JlL0NNYWtl
TGlzdHMudHh0ICAgICAgICAgICAgICAgICAgICAgIHwgICAgMiArCiBTb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAxMzYgKysrKysrCiBTb3VyY2Uv
V2ViQ29yZS9HTlVtYWtlZmlsZS5saXN0LmFtICAgICAgICAgICAgICAgICB8ICAgIDQgKwogU291
cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBpICAgICAgICAgICAgICAgICAgICAgICAgfCAgICA0ICsK
IFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUucHJvICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAg
NCArCiBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnZjcHJvai9XZWJDb3JlLnZjcHJvaiAgICAgICB8
ICAxMTIgKysrKysKIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0Zsb2F0UmVjdC5j
cHAgICAgIHwgICAgNyArCiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9GbG9hdFJl
Y3QuaCAgICAgICB8ICAgIDEgKwogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck9iamVj
dC5oICAgICAgICAgICAgfCAgICAzICsKIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJU
cmVlQXNUZXh0LmNwcCAgICAgIHwgICAgNCArLQogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2
Zy9SZW5kZXJTVkdBbGxJbk9uZS5jcHAgfCAgICAyICsKIC4uLi9XZWJDb3JlL3JlbmRlcmluZy9z
dmcvUmVuZGVyU1ZHTW9kZWxPYmplY3QuY3BwIHwgICAgMiArLQogU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL3N2Zy9SZW5kZXJTVkdQYXRoLmNwcCAgICAgfCAgMzUwICstLS0tLS0tLS0tLS0tLS0K
IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUGF0aC5oICAgICAgIHwgICA3
NSArLS0tCiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1JlY3QuY3BwICAg
ICB8ICAxMjAgKysrKysrCiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jl
Y3QuaCAgICAgICB8ICAgNjMgKysrCiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRl
clNWR1Jlc291cmNlLmggICB8ICAgIDMgKy0KIC4uLi9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jl
c291cmNlQ2xpcHBlci5jcHAgICAgIHwgICAgNiArLQogLi4uL3JlbmRlcmluZy9zdmcvUmVuZGVy
U1ZHUmVzb3VyY2VDb250YWluZXIuY3BwICAgfCAgICAyICstCiAuLi4vcmVuZGVyaW5nL3N2Zy9S
ZW5kZXJTVkdSZXNvdXJjZUZpbHRlci5jcHAgICAgICB8ICAgIDUgKy0KIC4uLi9yZW5kZXJpbmcv
c3ZnL1JlbmRlclNWR1Jlc291cmNlRmlsdGVyLmggICAgICAgIHwgICAgMiArLQogLi4uL3JlbmRl
cmluZy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VHcmFkaWVudC5jcHAgICAgfCAgIDEwICstCiAuLi4v
cmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJjZUdyYWRpZW50LmggICAgICB8ICAgIDIgKy0K
IC4uLi9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291cmNlUGF0dGVybi5jcHAgICAgIHwgICAg
OCArLQogLi4uL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VQYXR0ZXJuLmggICAgICAg
fCAgICAyICstCiAuLi4vcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJjZVNvbGlkQ29sb3Iu
Y3BwICB8ICAgIDkgKy0KIC4uLi9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291cmNlU29saWRD
b2xvci5oICAgIHwgICAgMiArLQogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJT
VkdTaGFwZS5jcHAgICAgfCAgNDM4ICsrKysrKysrKysrKysrKysrKysrCiBTb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1NoYXBlLmggICAgICB8ICAxNTggKysrKysrKwogU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdJbmxpbmVUZXh0Qm94LmNwcCAgfCAgICAyICst
CiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR1JlbmRlclN1cHBvcnQuY3BwICB8ICAg
IDggKy0KIC4uLi9XZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHUmVuZGVyVHJlZUFzVGV4dC5jcHAg
IHwgICAzMSArLQogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdSZW5kZXJUcmVlQXNU
ZXh0LmggfCAgICA0ICstCiAuLi4vcmVuZGVyaW5nL3N2Zy9TVkdUZXh0UnVuUmVuZGVyaW5nQ29u
dGV4dC5jcHAgICB8ICAgIDIgKy0KIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdDaXJjbGVFbGVtZW50
LmNwcCAgICAgICAgICAgIHwgICAgMiArLQogU291cmNlL1dlYkNvcmUvc3ZnL1NWR0VsbGlwc2VF
bGVtZW50LmNwcCAgICAgICAgICAgfCAgICAyICstCiBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHTGlu
ZUVsZW1lbnQuY3BwICAgICAgICAgICAgICB8ICAgIDIgKy0KIFNvdXJjZS9XZWJDb3JlL3N2Zy9T
VkdQYXRoRWxlbWVudC5jcHAgICAgICAgICAgICAgIHwgICAxMCArLQogU291cmNlL1dlYkNvcmUv
c3ZnL1NWR1BhdGhFbGVtZW50LmggICAgICAgICAgICAgICAgfCAgICAyICsKIFNvdXJjZS9XZWJD
b3JlL3N2Zy9TVkdQb2x5RWxlbWVudC5jcHAgICAgICAgICAgICAgIHwgICAgMiArLQogU291cmNl
L1dlYkNvcmUvc3ZnL1NWR1JlY3RFbGVtZW50LmNwcCAgICAgICAgICAgICAgfCAgIDEyICstCiBT
b3VyY2UvV2ViQ29yZS9zdmcvU1ZHUmVjdEVsZW1lbnQuaCAgICAgICAgICAgICAgICB8ICAgIDIg
KwogNDYgZmlsZXMgY2hhbmdlZCwgMTI4OCBpbnNlcnRpb25zKCspLCA0NjggZGVsZXRpb25zKC0p
CiBjcmVhdGUgbW9kZSAxMDA2NDQgTGF5b3V0VGVzdHMvc3ZnL2N1c3RvbS9wb2ludGVyLWV2ZW50
cy1vbi1yb3VuZGVkLXJlY3QtZXhwZWN0ZWQudHh0CiBjcmVhdGUgbW9kZSAxMDA2NDQgTGF5b3V0
VGVzdHMvc3ZnL2N1c3RvbS9wb2ludGVyLWV2ZW50cy1vbi1yb3VuZGVkLXJlY3QueGh0bWwKIGNy
ZWF0ZSBtb2RlIDEwMDY0NCBMYXlvdXRUZXN0cy9zdmcvY3VzdG9tL3BvaW50ZXItZXZlbnRzLXdp
dGgtbGluZWNhcHMtYW5kLW1pdGVybGltaXRzLWV4cGVjdGVkLnR4dAogY3JlYXRlIG1vZGUgMTAw
NjQ0IExheW91dFRlc3RzL3N2Zy9jdXN0b20vcG9pbnRlci1ldmVudHMtd2l0aC1saW5lY2Fwcy1h
bmQtbWl0ZXJsaW1pdHMueGh0bWwKIGNyZWF0ZSBtb2RlIDEwMDY0NCBTb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1JlY3QuY3BwCiBjcmVhdGUgbW9kZSAxMDA2NDQgU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZWN0LmgKIGNyZWF0ZSBtb2RlIDEwMDY0
NCBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1NoYXBlLmNwcAogY3JlYXRl
IG1vZGUgMTAwNjQ0IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHU2hhcGUu
aAoKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3N2Zy9jdXN0b20vcG9pbnRlci1ldmVudHMtb24t
cm91bmRlZC1yZWN0LWV4cGVjdGVkLnR4dCBiL0xheW91dFRlc3RzL3N2Zy9jdXN0b20vcG9pbnRl
ci1ldmVudHMtb24tcm91bmRlZC1yZWN0LWV4cGVjdGVkLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAwMDAwMDAwLi5kYjAwZGYyCi0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMv
c3ZnL2N1c3RvbS9wb2ludGVyLWV2ZW50cy1vbi1yb3VuZGVkLXJlY3QtZXhwZWN0ZWQudHh0CkBA
IC0wLDAgKzEsMyBAQAorUEFTU0VEOiBmYWxsYmFja1JlY3QgaGFkIHBvaW50ZXIKKworCmRpZmYg
LS1naXQgYS9MYXlvdXRUZXN0cy9zdmcvY3VzdG9tL3BvaW50ZXItZXZlbnRzLW9uLXJvdW5kZWQt
cmVjdC54aHRtbCBiL0xheW91dFRlc3RzL3N2Zy9jdXN0b20vcG9pbnRlci1ldmVudHMtb24tcm91
bmRlZC1yZWN0LnhodG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU5NDYw
ZmYKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9zdmcvY3VzdG9tL3BvaW50ZXItZXZl
bnRzLW9uLXJvdW5kZWQtcmVjdC54aHRtbApAQCAtMCwwICsxLDY3IEBACis8aHRtbCB4bWxucz0n
aHR0cDovL3d3dy53My5vcmcvMTk5OS94aHRtbCc+Cis8Ym9keSBzdHlsZT0ibWFyZ2luOiAwcHg7
IHBhZGRpbmc6IDBweCI+Cis8cD48L3A+CisKKzxzdmcgeG1sbnM9Imh0dHA6Ly93d3cudzMub3Jn
LzIwMDAvc3ZnIiBzdHlsZT0icG9zaXRpb246YWJzb2x1dGU7Ij4KKzxkZWZzPgorCis8c3R5bGUg
dHlwZT0idGV4dC9jc3MiPjwhW0NEQVRBWworcmVjdCNyb3VuZGVkUmVjdCB7CisJZmlsbDogbm9u
ZTsKKwlzdHJva2U6IGdyZWVuOworCXN0cm9rZS13aWR0aDogMjBweDsKKwlzdHJva2UtbGluZWpv
aW46IGJldmVsOworCXN0cm9rZS1kYXNoYXJyYXk6IDUwIDE1OworfQorcmVjdDpob3ZlciB7CisJ
c3Ryb2tlOiByZWQ7Cit9IAorXV0+PC9zdHlsZT4KKzwvZGVmcz4KKworPHJlY3QgaWQ9ImZhbGxi
YWNrIiB4PSIzMCIgeT0iMzAiIHdpZHRoPSI0MjAiIGhlaWdodD0iMzIwIiBmaWxsPSJ5ZWxsb3ci
IG9uY2xpY2s9InBhc3NlZCgpIi8+Cis8cmVjdCBpZD0icm91bmRlZFJlY3QiIHg9IjQwIiB5PSI0
MCIgcng9IjMwIiByeT0iMzAiIHdpZHRoPSI0MDAiIGhlaWdodD0iMzAwIiBwb2ludGVyLWV2ZW50
cz0idmlzaWJsZVN0cm9rZSIgb25jbGljaz0iZmFpbGVkKCkiLz4KKworPHNjcmlwdCB0eXBlPSJ0
ZXh0L2VjbWFzY3JpcHQiPgorICAgIDwhW0NEQVRBWworCit2YXIgZmFsbGJhY2sgPSBkb2N1bWVu
dC5nZXRFbGVtZW50QnlJZCgiZmFsbGJhY2siKTsKK3ZhciByb3VuZGVkUmVjdCA9IGRvY3VtZW50
LmdldEVsZW1lbnRCeUlkKCJyb3VuZGVkUmVjdCIpOwordmFyIHAgPSBkb2N1bWVudC5nZXRFbGVt
ZW50c0J5VGFnTmFtZSgicCIpWzBdOworCitmYWxsYmFjay5hZGRFdmVudExpc3RlbmVyKCJtb3Vz
ZWRvd24iLCBwYXNzZWQsIGZhbHNlKTsKK3JvdW5kZWRSZWN0LmFkZEV2ZW50TGlzdGVuZXIoIm1v
dXNlZG93biIsIGZhaWxlZCwgZmFsc2UpOworCitmdW5jdGlvbiBzdG9wKCkgeworICAgIGZhbGxi
YWNrLnJlbW92ZUV2ZW50TGlzdGVuZXIoIm1vdXNlZG93biIsIGZhaWxlZCwgZmFsc2UpOworICAg
IHJvdW5kZWRSZWN0LnJlbW92ZUV2ZW50TGlzdGVuZXIoIm1vdXNlZG93biIsIHBhc3NlZCwgZmFs
c2UpOworCisgICAgaWYgKHdpbmRvdy5sYXlvdXRUZXN0Q29udHJvbGxlcikKKyAgICAgICAgbGF5
b3V0VGVzdENvbnRyb2xsZXIubm90aWZ5RG9uZSgpOworfQorICAgIAorZnVuY3Rpb24gZmFpbGVk
KCkgeworICAgIHAuaW5uZXJIVE1MID0gJ0ZBSUxFRDogc3Ryb2tlUmVjdCBoYWQgcG9pbnRlcic7
CisgICAgc3RvcCgpOworfQorCitmdW5jdGlvbiBwYXNzZWQoKSB7CisgICAgcC5pbm5lckhUTUwg
PSAnUEFTU0VEOiBmYWxsYmFja1JlY3QgaGFkIHBvaW50ZXInOworICAgIHN0b3AoKTsKK30KKwor
aWYgKHdpbmRvdy5sYXlvdXRUZXN0Q29udHJvbGxlcikgeworICAgIGxheW91dFRlc3RDb250cm9s
bGVyLndhaXRVbnRpbERvbmUoKTsKKyAgICBsYXlvdXRUZXN0Q29udHJvbGxlci5kdW1wQXNUZXh0
KCk7Cit9CisKK2lmICh3aW5kb3cuZXZlbnRTZW5kZXIpIHsKKyAgICBldmVudFNlbmRlci5tb3Vz
ZU1vdmVUbyg1MCwgNTApOworICAgIGV2ZW50U2VuZGVyLm1vdXNlRG93bigpOworfQorXV0+Cisg
IDwvc2NyaXB0PgorCis8L3N2Zz4KKzwvYm9keT4KKzwvaHRtbD4KZGlmZiAtLWdpdCBhL0xheW91
dFRlc3RzL3N2Zy9jdXN0b20vcG9pbnRlci1ldmVudHMtd2l0aC1saW5lY2Fwcy1hbmQtbWl0ZXJs
aW1pdHMtZXhwZWN0ZWQudHh0IGIvTGF5b3V0VGVzdHMvc3ZnL2N1c3RvbS9wb2ludGVyLWV2ZW50
cy13aXRoLWxpbmVjYXBzLWFuZC1taXRlcmxpbWl0cy1leHBlY3RlZC50eHQKbmV3IGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGIwMGRmMgotLS0gL2Rldi9udWxsCisrKyBiL0xheW91
dFRlc3RzL3N2Zy9jdXN0b20vcG9pbnRlci1ldmVudHMtd2l0aC1saW5lY2Fwcy1hbmQtbWl0ZXJs
aW1pdHMtZXhwZWN0ZWQudHh0CkBAIC0wLDAgKzEsMyBAQAorUEFTU0VEOiBmYWxsYmFja1JlY3Qg
aGFkIHBvaW50ZXIKKworCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9zdmcvY3VzdG9tL3BvaW50
ZXItZXZlbnRzLXdpdGgtbGluZWNhcHMtYW5kLW1pdGVybGltaXRzLnhodG1sIGIvTGF5b3V0VGVz
dHMvc3ZnL2N1c3RvbS9wb2ludGVyLWV2ZW50cy13aXRoLWxpbmVjYXBzLWFuZC1taXRlcmxpbWl0
cy54aHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kOTQzYzFhCi0tLSAv
ZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvc3ZnL2N1c3RvbS9wb2ludGVyLWV2ZW50cy13aXRo
LWxpbmVjYXBzLWFuZC1taXRlcmxpbWl0cy54aHRtbApAQCAtMCwwICsxLDY2IEBACis8aHRtbCB4
bWxucz0naHR0cDovL3d3dy53My5vcmcvMTk5OS94aHRtbCc+Cis8Ym9keSBzdHlsZT0ibWFyZ2lu
OiAwcHg7IHBhZGRpbmc6IDBweCI+Cis8cD48L3A+CisKKzxzdmcgeG1sbnM9Imh0dHA6Ly93d3cu
dzMub3JnLzIwMDAvc3ZnIiBzdHlsZT0icG9zaXRpb246YWJzb2x1dGU7Ij4KKzxkZWZzPgorCis8
c3R5bGUgdHlwZT0idGV4dC9jc3MiPjwhW0NEQVRBWworcmVjdCNzdHJva2VkUmVjdCB7CisJc3Ry
b2tlOiBibHVlOworCXN0cm9rZS13aWR0aDogMjBweDsKKwlzdHJva2UtbGluZWNhcDogcm91bmQ7
CisJc3Ryb2tlLW1pdGVybGltaXQ6IDE7CisJc3Ryb2tlLWRhc2hhcnJheTogMjAgNTA7Cit9IAor
cmVjdCNzdHJva2VkUmVjdDpob3ZlciB7CisJc3Ryb2tlOiByZWQ7Cit9CitdXT48L3N0eWxlPgor
PC9kZWZzPgorCis8cmVjdCBpZD0iZmFsbGJhY2siIHg9IjAiIHk9IjAiIHdpZHRoPSIyMTAiIGhl
aWdodD0iMjEwIiBmaWxsPSJncmVlbiIgb25jbGljaz0icGFzc2VkKCkiLz4KKzxyZWN0IGlkPSJz
dHJva2VkUmVjdCIgeD0iMTAiIHk9IjEwIiB3aWR0aD0iMTkwIiBoZWlnaHQ9IjE5MCIgZmlsbD0i
bm9uZSIgc3Ryb2tlLXdpZHRoPSIxMCIgcG9pbnRlci1ldmVudHM9InZpc2libGVTdHJva2UiIG9u
Y2xpY2s9ImZhaWxlZCgpIi8+IAorCis8c2NyaXB0IHR5cGU9InRleHQvZWNtYXNjcmlwdCI+Cisg
ICAgPCFbQ0RBVEFbCisKK3ZhciBmYWxsYmFjayA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJm
YWxsYmFjayIpOwordmFyIHN0cm9rZWRSZWN0ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoInN0
cm9rZWRSZWN0Iik7Cit2YXIgcCA9IGRvY3VtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKCJwIilb
MF07CisKK2ZhbGxiYWNrLmFkZEV2ZW50TGlzdGVuZXIoIm1vdXNlZG93biIsIHBhc3NlZCwgZmFs
c2UpOworc3Ryb2tlZFJlY3QuYWRkRXZlbnRMaXN0ZW5lcigibW91c2Vkb3duIiwgZmFpbGVkLCBm
YWxzZSk7CisKK2Z1bmN0aW9uIHN0b3AoKSB7CisgICAgZmFsbGJhY2sucmVtb3ZlRXZlbnRMaXN0
ZW5lcigibW91c2Vkb3duIiwgZmFpbGVkLCBmYWxzZSk7CisgICAgc3Ryb2tlZFJlY3QucmVtb3Zl
RXZlbnRMaXN0ZW5lcigibW91c2Vkb3duIiwgcGFzc2VkLCBmYWxzZSk7CisKKyAgICBpZiAod2lu
ZG93LmxheW91dFRlc3RDb250cm9sbGVyKQorICAgICAgICBsYXlvdXRUZXN0Q29udHJvbGxlci5u
b3RpZnlEb25lKCk7Cit9CisgICAgCitmdW5jdGlvbiBmYWlsZWQoKSB7CisgICAgcC5pbm5lckhU
TUwgPSAnRkFJTEVEOiBzdHJva2VSZWN0IGhhZCBwb2ludGVyJzsKKyAgICBzdG9wKCk7Cit9CisK
K2Z1bmN0aW9uIHBhc3NlZCgpIHsKKyAgICBwLmlubmVySFRNTCA9ICdQQVNTRUQ6IGZhbGxiYWNr
UmVjdCBoYWQgcG9pbnRlcic7CisgICAgc3RvcCgpOworfQorCitpZiAod2luZG93LmxheW91dFRl
c3RDb250cm9sbGVyKSB7CisgICAgbGF5b3V0VGVzdENvbnRyb2xsZXIud2FpdFVudGlsRG9uZSgp
OworICAgIGxheW91dFRlc3RDb250cm9sbGVyLmR1bXBBc1RleHQoKTsKK30KKworaWYgKHdpbmRv
dy5ldmVudFNlbmRlcikgeworICAgIGV2ZW50U2VuZGVyLm1vdXNlTW92ZVRvKDE5NSwgMjUpOwor
ICAgIGV2ZW50U2VuZGVyLm1vdXNlRG93bigpOworfQorXV0+CisgIDwvc2NyaXB0PgorPC9zdmc+
Cis8L2JvZHk+Cis8L2h0bWw+CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9DTWFrZUxpc3Rz
LnR4dCBiL1NvdXJjZS9XZWJDb3JlL0NNYWtlTGlzdHMudHh0CmluZGV4IDdhNTIwNTcuLmJjY2Jl
MDIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL0NNYWtlTGlzdHMudHh0CisrKyBiL1NvdXJj
ZS9XZWJDb3JlL0NNYWtlTGlzdHMudHh0CkBAIC0xNTk3LDYgKzE1OTcsNyBAQCBJRiAoRU5BQkxF
X1NWRykKICAgICAgICAgcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdJbmxpbmVUZXh0LmNwcAogICAg
ICAgICByZW5kZXJpbmcvc3ZnL1JlbmRlclNWR01vZGVsT2JqZWN0LmNwcAogICAgICAgICByZW5k
ZXJpbmcvc3ZnL1JlbmRlclNWR1BhdGguY3BwCisgICAgICAgIHJlbmRlcmluZy9zdmcvUmVuZGVy
U1ZHUmVjdC5jcHAKICAgICAgICAgcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJjZS5jcHAK
ICAgICAgICAgcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJjZUNsaXBwZXIuY3BwCiAgICAg
ICAgIHJlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VDb250YWluZXIuY3BwCkBAIC0xNjEx
LDYgKzE2MTIsNyBAQCBJRiAoRU5BQkxFX1NWRykKICAgICAgICAgcmVuZGVyaW5nL3N2Zy9SZW5k
ZXJTVkdSZXNvdXJjZVNvbGlkQ29sb3IuY3BwCiAgICAgICAgIHJlbmRlcmluZy9zdmcvUmVuZGVy
U1ZHUm9vdC5jcHAKICAgICAgICAgcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdTaGFkb3dUcmVlUm9v
dENvbnRhaW5lci5jcHAKKyAgICAgICAgcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdTaGFwZS5jcHAK
ICAgICAgICAgcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdUU3Bhbi5jcHAKICAgICAgICAgcmVuZGVy
aW5nL3N2Zy9SZW5kZXJTVkdUZXh0LmNwcAogICAgICAgICByZW5kZXJpbmcvc3ZnL1JlbmRlclNW
R1RleHRQYXRoLmNwcApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nIGIvU291
cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCmluZGV4IDA1MDg1OTkuLjljOTBiZmQgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cK
QEAgLTEsMyArMSwxMzkgQEAKKzIwMTEtMDktMDggIFJlbmF0YSBIb2RvdmFuICA8cmVuaUB3ZWJr
aXQub3JnPgorCisgICAgICAgIEFkZCBuZXcgcmVuZGVyZXIgZm9yIFNWR1JlY3RFbGVtZW50Lgor
ICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NjU3NjkKKwor
ICAgICAgICBBZGRpbmcgYSBuZXcgZnJhbWV3b3JrIHRvIHN1cHBvcnQgdGhlIHJlbmRlcmluZyBv
ZiBTVkcgc2hhcGVzLgorICAgICAgICBUaGUgbWFpbiBsb2dpYyB0YWtlcyBwbGFjZSBpbiBSZW5k
ZXJTVkdTaGFwZSBjbGFzcyBhbmQgZXZlcnkgcmVuZGVyZXIgd2lsbAorICAgICAgICBpbmhlcml0
IGZyb20gaXQuIFNpbmNlIGl0cyBjb2RlIGJhc2UgaXMgbW9zdGx5IG1vdmVkIGZyb20gUmVuZGVy
U1ZHUGF0aCBpdCdzIHN1aXRhYmxlIHRvCisgICAgICAgIGhhbmRsZSB0aGUgZmFsbGJhY2sgY2Fz
ZXMgKGUuZy46IHJvdW5kZWQgcmVjdHMsIHNwZWNpYWwgc3Ryb2tlcywgcG9pbnRlciBldmVudHMs
IGV0Yy4pCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAg
KiBDTWFrZUxpc3RzLnR4dDoKKyAgICAgICAgKiBHTlVtYWtlZmlsZS5saXN0LmFtOgorICAgICAg
ICAqIFdlYkNvcmUuZ3lwaToKKyAgICAgICAgKiBXZWJDb3JlLnBybzoKKyAgICAgICAgKiBXZWJD
b3JlLnZjcHJvai9XZWJDb3JlLnZjcHJvajoKKyAgICAgICAgKiBXZWJDb3JlLnhjb2RlcHJvai9w
cm9qZWN0LnBieHByb2o6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlck9iamVjdC5oOgorICAg
ICAgICAoV2ViQ29yZTo6UmVuZGVyT2JqZWN0Ojppc1NWR0xpbmUpOgorICAgICAgICAoV2ViQ29y
ZTo6UmVuZGVyT2JqZWN0Ojppc1NWR1JlY3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyT2Jq
ZWN0Ojppc1NWR1NoYXBlKToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyVHJlZUFzVGV4dC5j
cHA6CisgICAgICAgIChXZWJDb3JlOjp3cml0ZSk6CisgICAgICAgICogcmVuZGVyaW5nL3N2Zy9S
ZW5kZXJTVkdBbGxJbk9uZS5jcHA6CisgICAgICAgICogcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdN
b2RlbE9iamVjdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjppc0dyYXBoaWNzRWxlbWVudCk6Cisg
ICAgICAgICogcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdQYXRoLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OlJlbmRlclNWR1BhdGg6OlJlbmRlclNWR1BhdGgpOgorICAgICAgICAqIHJlbmRlcmluZy9z
dmcvUmVuZGVyU1ZHUGF0aC5oOgorICAgICAgICAqIHJlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVj
dC5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU1ZHUmVjdDo6UmVuZGVyU1ZH
UmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJTVkdSZWN0Ojp+UmVuZGVyU1ZHUmVjdCk6
CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJTVkdSZWN0OjpjcmVhdGVTaGFwZSk6CisgICAgICAg
IChXZWJDb3JlOjpSZW5kZXJTVkdSZWN0OjpvYmplY3RCb3VuZGluZ0JveCk6CisgICAgICAgIChX
ZWJDb3JlOjpSZW5kZXJTVkdSZWN0OjpzdHJva2VCb3VuZGluZ0JveCk6CisgICAgICAgIChXZWJD
b3JlOjpSZW5kZXJTVkdSZWN0OjpmaWxsU2hhcGUpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVy
U1ZHUmVjdDo6c3Ryb2tlU2hhcGUpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU1ZHUmVjdDo6
c3Ryb2tlQ29udGFpbnNTbG93Q2FzZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJTVkdSZWN0
OjpmaWxsQ29udGFpbnNTbG93Q2FzZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJTVkdSZWN0
OjpkZXRlcm1pbmVQb2ludExvY2F0aW9uKToKKyAgICAgICAgKiByZW5kZXJpbmcvc3ZnL1JlbmRl
clNWR1JlY3QuaDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJTVkdSZWN0Ojppc1NW
R1JlY3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU1ZHUmVjdDo6cmVuZGVyTmFtZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpSZW5kZXJTVkdSZWN0Ojppc0VtcHR5KToKKyAgICAgICAgKiByZW5k
ZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291cmNlLmg6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJT
VkdSZXNvdXJjZTo6cG9zdEFwcGx5UmVzb3VyY2UpOgorICAgICAgICAqIHJlbmRlcmluZy9zdmcv
UmVuZGVyU1ZHUmVzb3VyY2VDbGlwcGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclNW
R1Jlc291cmNlQ2xpcHBlcjo6ZHJhd0NvbnRlbnRJbnRvTWFza0ltYWdlKToKKyAgICAgICAgKFdl
YkNvcmU6OlJlbmRlclNWR1Jlc291cmNlQ2xpcHBlcjo6Y2FsY3VsYXRlQ2xpcENvbnRlbnRSZXBh
aW50UmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJTVkdSZXNvdXJjZUNsaXBwZXI6Omhp
dFRlc3RDbGlwQ29udGVudCk6CisgICAgICAgICogcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNv
dXJjZUNvbnRhaW5lci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJTVkdSZXNvdXJjZUNv
bnRhaW5lcjo6dHJhbnNmb3JtT25Ob25TY2FsaW5nU3Ryb2tlKToKKyAgICAgICAgKiByZW5kZXJp
bmcvc3ZnL1JlbmRlclNWR1Jlc291cmNlRmlsdGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJl
bmRlclNWR1Jlc291cmNlRmlsdGVyOjpwb3N0QXBwbHlSZXNvdXJjZSk6CisgICAgICAgICogcmVu
ZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJjZUZpbHRlci5oOgorICAgICAgICAqIHJlbmRlcmlu
Zy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VHcmFkaWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpS
ZW5kZXJTVkdSZXNvdXJjZUdyYWRpZW50OjphcHBseVJlc291cmNlKToKKyAgICAgICAgKiByZW5k
ZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291cmNlR3JhZGllbnQuaDoKKyAgICAgICAgKiByZW5kZXJp
bmcvc3ZnL1JlbmRlclNWR1Jlc291cmNlUGF0dGVybi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpS
ZW5kZXJTVkdSZXNvdXJjZVBhdHRlcm46OnBvc3RBcHBseVJlc291cmNlKToKKyAgICAgICAgKiBy
ZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291cmNlUGF0dGVybi5oOgorICAgICAgICAqIHJlbmRl
cmluZy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VTb2xpZENvbG9yLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OlJlbmRlclNWR1Jlc291cmNlU29saWRDb2xvcjo6cG9zdEFwcGx5UmVzb3VyY2UpOgorICAg
ICAgICAqIHJlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VTb2xpZENvbG9yLmg6CisgICAg
ICAgICogcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdTaGFwZS5jcHA6IENvcGllZCBmcm9tIFNvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUGF0aC5jcHAuCisgICAgICAgIChXZWJD
b3JlOjpSZW5kZXJTVkdTaGFwZTo6UmVuZGVyU1ZHU2hhcGUpOgorICAgICAgICAoV2ViQ29yZTo6
UmVuZGVyU1ZHU2hhcGU6On5SZW5kZXJTVkdTaGFwZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5k
ZXJTVkdTaGFwZTo6Y3JlYXRlU2hhcGUpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU1ZHU2hh
cGU6OmlzRW1wdHkpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU1ZHU2hhcGU6OmZpbGxTaGFw
ZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJTVkdTaGFwZTo6b2JqZWN0Qm91bmRpbmdCb3gp
OgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU1ZHU2hhcGU6OnN0cm9rZUJvdW5kaW5nQm94KToK
KyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclNWR1NoYXBlOjpzdHJva2VTaGFwZSk6CisgICAgICAg
IChXZWJDb3JlOjpSZW5kZXJTVkdTaGFwZTo6c3Ryb2tlQ29udGFpbnNTbG93Q2FzZSk6CisgICAg
ICAgIChXZWJDb3JlOjpSZW5kZXJTVkdTaGFwZTo6ZmlsbENvbnRhaW5zU2xvd0Nhc2UpOgorICAg
ICAgICAoV2ViQ29yZTo6UmVuZGVyU1ZHU2hhcGU6OmZpbGxDb250YWlucyk6CisgICAgICAgIChX
ZWJDb3JlOjpSZW5kZXJTVkdTaGFwZTo6c3Ryb2tlQ29udGFpbnMpOgorICAgICAgICAoV2ViQ29y
ZTo6UmVuZGVyU1ZHU2hhcGU6OmxheW91dCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJTVkdT
aGFwZTo6c2hvdWxkU3Ryb2tlWmVyb0xlbmd0aFN1YnBhdGgpOgorICAgICAgICAoV2ViQ29yZTo6
UmVuZGVyU1ZHU2hhcGU6Onplcm9MZW5ndGhTdWJwYXRoUmVjdCk6CisgICAgICAgIChXZWJDb3Jl
OjpSZW5kZXJTVkdTaGFwZTo6c2V0dXBTcXVhcmVDYXBQYXRoKToKKyAgICAgICAgKFdlYkNvcmU6
OlJlbmRlclNWR1NoYXBlOjpzZXR1cE5vblNjYWxpbmdTdHJva2VQYXRoKToKKyAgICAgICAgKFdl
YkNvcmU6OlJlbmRlclNWR1NoYXBlOjpmaWxsQW5kU3Ryb2tlUGF0aCk6CisgICAgICAgIChXZWJD
b3JlOjpSZW5kZXJTVkdTaGFwZTo6cGFpbnQpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU1ZH
U2hhcGU6OmFkZEZvY3VzUmluZ1JlY3RzKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclNWR1No
YXBlOjpub2RlQXRGbG9hdFBvaW50KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclNWR1NoYXBl
OjpjYWxjdWxhdGVNYXJrZXJCb3VuZHNJZk5lZWRlZCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5k
ZXJTVkdTaGFwZTo6dXBkYXRlQ2FjaGVkQm91bmRhcmllcyk6CisgICAgICAgIChXZWJDb3JlOjpS
ZW5kZXJTVkdTaGFwZTo6c3Ryb2tlV2lkdGgpOgorICAgICAgICAqIHJlbmRlcmluZy9zdmcvUmVu
ZGVyU1ZHU2hhcGUuaDogQ29waWVkIGZyb20gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9S
ZW5kZXJTVkdQYXRoLmguCisgICAgICAgIChXZWJDb3JlOjpCb3VuZGluZ1JlY3RTdHJva2VTdHls
ZUFwcGxpZXI6OkJvdW5kaW5nUmVjdFN0cm9rZVN0eWxlQXBwbGllcik6CisgICAgICAgIChXZWJD
b3JlOjpCb3VuZGluZ1JlY3RTdHJva2VTdHlsZUFwcGxpZXI6OnN0cm9rZVN0eWxlKToKKyAgICAg
ICAgKFdlYkNvcmU6OlJlbmRlclNWR1NoYXBlOjpzZXROZWVkc1NoYXBlVXBkYXRlKToKKyAgICAg
ICAgKFdlYkNvcmU6OlJlbmRlclNWR1NoYXBlOjpzZXROZWVkc0JvdW5kYXJpZXNVcGRhdGUpOgor
ICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU1ZHU2hhcGU6OnNldE5lZWRzVHJhbnNmb3JtVXBkYXRl
KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclNWR1NoYXBlOjpzdHJva2VCb3VuZGluZ0JveCk6
CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJTVkdTaGFwZTo6cmVwYWludFJlY3RJbkxvY2FsQ29v
cmRpbmF0ZXMpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU1ZHU2hhcGU6OmxvY2FsVG9QYXJl
bnRUcmFuc2Zvcm0pOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU1ZHU2hhcGU6OmlzU1ZHU2hh
cGUpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU1ZHU2hhcGU6OnJlbmRlck5hbWUpOgorICAg
ICAgICAoV2ViQ29yZTo6UmVuZGVyU1ZHU2hhcGU6OnBhdGgpOgorICAgICAgICAoV2ViQ29yZTo6
UmVuZGVyU1ZHU2hhcGU6OnBhdGhQdHIpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU1ZHU2hh
cGU6Omhhc1BhdGgpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU1ZHU2hhcGU6OmxvY2FsVHJh
bnNmb3JtKToKKyAgICAgICAgKFdlYkNvcmU6OnRvUmVuZGVyU1ZHU2hhcGUpOgorICAgICAgICAq
IHJlbmRlcmluZy9zdmcvU1ZHSW5saW5lVGV4dEJveC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpT
VkdJbmxpbmVUZXh0Qm94OjpyZWxlYXNlUGFpbnRpbmdSZXNvdXJjZSk6CisgICAgICAgICogcmVu
ZGVyaW5nL3N2Zy9TVkdSZW5kZXJTdXBwb3J0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR1Jl
bmRlclN1cHBvcnQ6OmZpbmlzaFJlbmRlclNWR0NvbnRlbnQpOgorICAgICAgICAoV2ViQ29yZTo6
U1ZHUmVuZGVyU3VwcG9ydDo6bGF5b3V0Q2hpbGRyZW4pOgorICAgICAgICAqIHJlbmRlcmluZy9z
dmcvU1ZHUmVuZGVyVHJlZUFzVGV4dC5jcHA6CisgICAgICAgIChXZWJDb3JlOjp3cml0ZVN0eWxl
KToKKyAgICAgICAgKFdlYkNvcmU6Om9wZXJhdG9yPDwpOgorICAgICAgICAoV2ViQ29yZTo6d3Jp
dGUpOgorICAgICAgICAqIHJlbmRlcmluZy9zdmcvU1ZHUmVuZGVyVHJlZUFzVGV4dC5oOgorICAg
ICAgICAqIHJlbmRlcmluZy9zdmcvU1ZHVGV4dFJ1blJlbmRlcmluZ0NvbnRleHQuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6U1ZHVGV4dFJ1blJlbmRlcmluZ0NvbnRleHQ6OmRyYXdTVkdHbHlwaHMp
OgorICAgICAgICAqIHN2Zy9TVkdDaXJjbGVFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OlNWR0NpcmNsZUVsZW1lbnQ6OnN2Z0F0dHJpYnV0ZUNoYW5nZWQpOgorICAgICAgICAqIHN2Zy9T
VkdFbGxpcHNlRWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTVkdFbGxpcHNlRWxlbWVu
dDo6c3ZnQXR0cmlidXRlQ2hhbmdlZCk6CisgICAgICAgICogc3ZnL1NWR0xpbmVFbGVtZW50LmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR0xpbmVFbGVtZW50OjpzdmdBdHRyaWJ1dGVDaGFuZ2Vk
KToKKyAgICAgICAgKiBzdmcvU1ZHUGF0aEVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
U1ZHUGF0aEVsZW1lbnQ6OnN2Z0F0dHJpYnV0ZUNoYW5nZWQpOgorICAgICAgICAoV2ViQ29yZTo6
U1ZHUGF0aEVsZW1lbnQ6OnBhdGhTZWdMaXN0Q2hhbmdlZCk6CisgICAgICAgIChXZWJDb3JlOjpT
VkdQYXRoRWxlbWVudDo6Y3JlYXRlUmVuZGVyZXIpOgorICAgICAgICAqIHN2Zy9TVkdQYXRoRWxl
bWVudC5oOgorICAgICAgICAqIHN2Zy9TVkdQb2x5RWxlbWVudC5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpTVkdQb2x5RWxlbWVudDo6c3ZnQXR0cmlidXRlQ2hhbmdlZCk6CisgICAgICAgICogc3Zn
L1NWR1JlY3RFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR1JlY3RFbGVtZW50Ojpz
dmdBdHRyaWJ1dGVDaGFuZ2VkKToKKyAgICAgICAgKFdlYkNvcmU6OlNWR1JlY3RFbGVtZW50Ojpj
cmVhdGVSZW5kZXJlcik6CisgICAgICAgICogc3ZnL1NWR1JlY3RFbGVtZW50Lmg6CisKIDIwMTEt
MDktMDcgIEFuZHJleSBLb3N5YWtvdiAgPGNhc2VxQGNocm9taXVtLm9yZz4KIAogICAgICAgICBX
ZWIgSW5zcGVjdG9yOiB0cnlpbmcgdG8gc2Nyb2xsIG1vdXNlIHdoZWVsIHdoZW4gaW4gVGV4dFZp
ZXdlcidzIGd1dHRlciBwYW5lIGNhdXNlcyBFdmVudEV4Y2VwdGlvbjo6RElTUEFUQ0hfUkVRVUVT
VF9FUlIKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0dOVW1ha2VmaWxlLmxpc3QuYW0gYi9T
b3VyY2UvV2ViQ29yZS9HTlVtYWtlZmlsZS5saXN0LmFtCmluZGV4IDBlYzFhNGQuLmMwZDQ5ODgg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL0dOVW1ha2VmaWxlLmxpc3QuYW0KKysrIGIvU291
cmNlL1dlYkNvcmUvR05VbWFrZWZpbGUubGlzdC5hbQpAQCAtMzIwNiw2ICszMjA2LDggQEAgd2Vi
Y29yZV9zb3VyY2VzICs9IFwKIAlTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNW
R01vZGVsT2JqZWN0LmggXAogCVNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZH
UGF0aC5jcHAgXAogCVNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUGF0aC5o
IFwKKwlTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1JlY3QuY3BwIFwKKwlT
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1JlY3QuaCBcCiAJU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJjZUNsaXBwZXIuY3BwIFwKIAlTb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291cmNlQ2xpcHBlci5oIFwKIAlT
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291cmNlQ29udGFpbmVyLmNw
cCBcCkBAIC0zMjM0LDYgKzMyMzYsOCBAQCB3ZWJjb3JlX3NvdXJjZXMgKz0gXAogCVNvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUm9vdC5oIFwKIAlTb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1NoYWRvd1RyZWVSb290Q29udGFpbmVyLmNwcCBcCiAJU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdTaGFkb3dUcmVlUm9vdENvbnRhaW5l
ci5oIFwKKwlTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1NoYXBlLmNwcCBc
CisJU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdTaGFwZS5oIFwKIAlTb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1RTcGFuLmNwcCBcCiAJU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdUU3Bhbi5oIFwKIAlTb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1RleHQuY3BwIFwKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL1dlYkNvcmUuZ3lwaSBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwaQppbmRleCAwMzk4
NjRiLi4xZTBhNDU5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkKKysr
IGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBpCkBAIC01ODUyLDYgKzU4NTIsOCBAQAogICAg
ICAgICAgICAgJ3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHTW9kZWxPYmplY3QuaCcsCiAgICAgICAg
ICAgICAncmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdQYXRoLmNwcCcsCiAgICAgICAgICAgICAncmVu
ZGVyaW5nL3N2Zy9SZW5kZXJTVkdQYXRoLmgnLAorICAgICAgICAgICAgJ3JlbmRlcmluZy9zdmcv
UmVuZGVyU1ZHUmVjdC5jcHAnLAorICAgICAgICAgICAgJ3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZH
UmVjdC5oJywKICAgICAgICAgICAgICdyZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291cmNlLmNw
cCcsCiAgICAgICAgICAgICAncmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJjZS5oJywKICAg
ICAgICAgICAgICdyZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291cmNlQ2xpcHBlci5jcHAnLApA
QCAtNTg4MCw2ICs1ODgyLDggQEAKICAgICAgICAgICAgICdyZW5kZXJpbmcvc3ZnL1JlbmRlclNW
R1Jvb3QuaCcsCiAgICAgICAgICAgICAncmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdTaGFkb3dUcmVl
Um9vdENvbnRhaW5lci5jcHAnLAogICAgICAgICAgICAgJ3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZH
U2hhZG93VHJlZVJvb3RDb250YWluZXIuaCcsCisgICAgICAgICAgICAncmVuZGVyaW5nL3N2Zy9S
ZW5kZXJTVkdTaGFwZS5jcHAnLAorICAgICAgICAgICAgJ3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZH
U2hhcGUuaCcsCiAgICAgICAgICAgICAncmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdUU3Bhbi5jcHAn
LAogICAgICAgICAgICAgJ3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHVFNwYW4uaCcsCiAgICAgICAg
ICAgICAncmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdUZXh0LmNwcCcsCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9XZWJDb3JlLnBybyBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUucHJvCmluZGV4
IDIyYTg0NWQuLjk5MjUwN2QgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUucHJv
CisrKyBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUucHJvCkBAIC0yMjgyLDYgKzIyODIsNyBAQCBI
RUFERVJTICs9IFwKICAgICByZW5kZXJpbmcvc3ZnL1JlbmRlclNWR0lubGluZVRleHQuaCBcCiAg
ICAgcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdNb2RlbE9iamVjdC5oIFwKICAgICByZW5kZXJpbmcv
c3ZnL1JlbmRlclNWR1BhdGguaCBcCisgICAgcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZWN0Lmgg
XAogICAgIHJlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2UuaCBcCiAgICAgcmVuZGVyaW5n
L3N2Zy9SZW5kZXJTVkdSZXNvdXJjZUNsaXBwZXIuaCBcCiAgICAgcmVuZGVyaW5nL3N2Zy9SZW5k
ZXJTVkdSZXNvdXJjZUNvbnRhaW5lci5oIFwKQEAgLTIyOTYsNiArMjI5Nyw3IEBAIEhFQURFUlMg
Kz0gXAogICAgIHJlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VTb2xpZENvbG9yLmggXAog
ICAgIHJlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUm9vdC5oIFwKICAgICByZW5kZXJpbmcvc3ZnL1Jl
bmRlclNWR1NoYWRvd1RyZWVSb290Q29udGFpbmVyLmggXAorICAgIHJlbmRlcmluZy9zdmcvUmVu
ZGVyU1ZHU2hhcGUuaCBcCiAgICAgcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdUU3Bhbi5oIFwKICAg
ICByZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1RleHQuaCBcCiAgICAgcmVuZGVyaW5nL3N2Zy9SZW5k
ZXJTVkdUZXh0UGF0aC5oIFwKQEAgLTMzMTAsNiArMzMxMiw4IEBAIGNvbnRhaW5zKERFRklORVMs
IEVOQUJMRV9TVkc9MSkgewogICAgICAgICByZW5kZXJpbmcvc3R5bGUvU1ZHUmVuZGVyU3R5bGVE
ZWZzLmNwcCBcCiAgICAgICAgIHJlbmRlcmluZy9Qb2ludGVyRXZlbnRzSGl0UnVsZXMuY3BwIFwK
ICAgICAgICAgcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdQYXRoLmNwcCBcCisgICAgICAgIHJlbmRl
cmluZy9zdmcvUmVuZGVyU1ZHUmVjdC5jcHAgXAorICAgICAgICByZW5kZXJpbmcvc3ZnL1JlbmRl
clNWR1NoYXBlLmNwcCBcCiAgICAgICAgIHN2Zy9hbmltYXRpb24vU01JTFRpbWUuY3BwIFwKICAg
ICAgICAgc3ZnL2FuaW1hdGlvbi9TTUlMVGltZUNvbnRhaW5lci5jcHAgXAogICAgICAgICBzdmcv
YW5pbWF0aW9uL1NWR1NNSUxFbGVtZW50LmNwcCBcCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9XZWJDb3JlLnZjcHJvai9XZWJDb3JlLnZjcHJvaiBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUu
dmNwcm9qL1dlYkNvcmUudmNwcm9qCmluZGV4IDZiNjgwYmEuLjU2Nzg2OTggMTAwNzU1Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUudmNwcm9qL1dlYkNvcmUudmNwcm9qCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL1dlYkNvcmUudmNwcm9qL1dlYkNvcmUudmNwcm9qCkBAIC00MTY0Nyw2ICs0MTY0
NywxMTggQEAKIAkJCQkJPgogCQkJCTwvRmlsZT4KIAkJCQk8RmlsZQorCQkJCQlSZWxhdGl2ZVBh
dGg9Ii4uXHJlbmRlcmluZ1xzdmdcUmVuZGVyU1ZHUmVjdC5jcHAiCisJCQkJCT4KKwkJCQkJPEZp
bGVDb25maWd1cmF0aW9uCisJCQkJCQlOYW1lPSJEZWJ1Z3xXaW4zMiIKKwkJCQkJCUV4Y2x1ZGVk
RnJvbUJ1aWxkPSJ0cnVlIgorCQkJCQkJPgorCQkJCQkJPFRvb2wKKwkJCQkJCQlOYW1lPSJWQ0NM
Q29tcGlsZXJUb29sIgorCQkJCQkJLz4KKwkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4KKwkJCQkJ
PEZpbGVDb25maWd1cmF0aW9uCisJCQkJCQlOYW1lPSJSZWxlYXNlfFdpbjMyIgorCQkJCQkJRXhj
bHVkZWRGcm9tQnVpbGQ9InRydWUiCisJCQkJCQk+CisJCQkJCQk8VG9vbAorCQkJCQkJCU5hbWU9
IlZDQ0xDb21waWxlclRvb2wiCisJCQkJCQkvPgorCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPgor
CQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24KKwkJCQkJCU5hbWU9IkRlYnVnX0NhaXJvX0NGTGl0ZXxX
aW4zMiIKKwkJCQkJCUV4Y2x1ZGVkRnJvbUJ1aWxkPSJ0cnVlIgorCQkJCQkJPgorCQkJCQkJPFRv
b2wKKwkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIgorCQkJCQkJLz4KKwkJCQkJPC9GaWxl
Q29uZmlndXJhdGlvbj4KKwkJCQkJPEZpbGVDb25maWd1cmF0aW9uCisJCQkJCQlOYW1lPSJSZWxl
YXNlX0NhaXJvX0NGTGl0ZXxXaW4zMiIKKwkJCQkJCUV4Y2x1ZGVkRnJvbUJ1aWxkPSJ0cnVlIgor
CQkJCQkJPgorCQkJCQkJPFRvb2wKKwkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIgorCQkJ
CQkJLz4KKwkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4KKwkJCQkJPEZpbGVDb25maWd1cmF0aW9u
CisJCQkJCQlOYW1lPSJEZWJ1Z19BbGx8V2luMzIiCisJCQkJCQlFeGNsdWRlZEZyb21CdWlsZD0i
dHJ1ZSIKKwkJCQkJCT4KKwkJCQkJCTxUb29sCisJCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9v
bCIKKwkJCQkJCS8+CisJCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+CisJCQkJCTxGaWxlQ29uZmln
dXJhdGlvbgorCQkJCQkJTmFtZT0iUHJvZHVjdGlvbnxXaW4zMiIKKwkJCQkJCUV4Y2x1ZGVkRnJv
bUJ1aWxkPSJ0cnVlIgorCQkJCQkJPgorCQkJCQkJPFRvb2wKKwkJCQkJCQlOYW1lPSJWQ0NMQ29t
cGlsZXJUb29sIgorCQkJCQkJLz4KKwkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4KKwkJCQk8L0Zp
bGU+CisJCQkJPEZpbGUKKwkJCQkJUmVsYXRpdmVQYXRoPSIuLlxyZW5kZXJpbmdcc3ZnXFJlbmRl
clNWR1JlY3QuaCIKKwkJCQkJPgorCQkJCTwvRmlsZT4KKwkJCQk8RmlsZQorCQkJCQlSZWxhdGl2
ZVBhdGg9Ii4uXHJlbmRlcmluZ1xzdmdcUmVuZGVyU1ZHU2hhcGUuY3BwIgorCQkJCQk+CisJCQkJ
CTxGaWxlQ29uZmlndXJhdGlvbgorCQkJCQkJTmFtZT0iRGVidWd8V2luMzIiCisJCQkJCQlFeGNs
dWRlZEZyb21CdWlsZD0idHJ1ZSIKKwkJCQkJCT4KKwkJCQkJCTxUb29sCisJCQkJCQkJTmFtZT0i
VkNDTENvbXBpbGVyVG9vbCIKKwkJCQkJCS8+CisJCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+CisJ
CQkJCTxGaWxlQ29uZmlndXJhdGlvbgorCQkJCQkJTmFtZT0iUmVsZWFzZXxXaW4zMiIKKwkJCQkJ
CUV4Y2x1ZGVkRnJvbUJ1aWxkPSJ0cnVlIgorCQkJCQkJPgorCQkJCQkJPFRvb2wKKwkJCQkJCQlO
YW1lPSJWQ0NMQ29tcGlsZXJUb29sIgorCQkJCQkJLz4KKwkJCQkJPC9GaWxlQ29uZmlndXJhdGlv
bj4KKwkJCQkJPEZpbGVDb25maWd1cmF0aW9uCisJCQkJCQlOYW1lPSJEZWJ1Z19DYWlyb19DRkxp
dGV8V2luMzIiCisJCQkJCQlFeGNsdWRlZEZyb21CdWlsZD0idHJ1ZSIKKwkJCQkJCT4KKwkJCQkJ
CTxUb29sCisJCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIKKwkJCQkJCS8+CisJCQkJCTwv
RmlsZUNvbmZpZ3VyYXRpb24+CisJCQkJCTxGaWxlQ29uZmlndXJhdGlvbgorCQkJCQkJTmFtZT0i
UmVsZWFzZV9DYWlyb19DRkxpdGV8V2luMzIiCisJCQkJCQlFeGNsdWRlZEZyb21CdWlsZD0idHJ1
ZSIKKwkJCQkJCT4KKwkJCQkJCTxUb29sCisJCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIK
KwkJCQkJCS8+CisJCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+CisJCQkJCTxGaWxlQ29uZmlndXJh
dGlvbgorCQkJCQkJTmFtZT0iRGVidWdfQWxsfFdpbjMyIgorCQkJCQkJRXhjbHVkZWRGcm9tQnVp
bGQ9InRydWUiCisJCQkJCQk+CisJCQkJCQk8VG9vbAorCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxl
clRvb2wiCisJCQkJCQkvPgorCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPgorCQkJCQk8RmlsZUNv
bmZpZ3VyYXRpb24KKwkJCQkJCU5hbWU9IlByb2R1Y3Rpb258V2luMzIiCisJCQkJCQlFeGNsdWRl
ZEZyb21CdWlsZD0idHJ1ZSIKKwkJCQkJCT4KKwkJCQkJCTxUb29sCisJCQkJCQkJTmFtZT0iVkND
TENvbXBpbGVyVG9vbCIKKwkJCQkJCS8+CisJCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+CisJCQkJ
PC9GaWxlPgorCQkJCTxGaWxlCisJCQkJCVJlbGF0aXZlUGF0aD0iLi5ccmVuZGVyaW5nXHN2Z1xS
ZW5kZXJTVkdTaGFwZS5oIgorCQkJCQk+CisJCQkJPC9GaWxlPgorCQkJCTxGaWxlCiAJCQkJCVJl
bGF0aXZlUGF0aD0iLi5ccmVuZGVyaW5nXHN2Z1xSZW5kZXJTVkdUZXh0LmNwcCIKIAkJCQkJPgog
CQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL0Zsb2F0UmVjdC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9GbG9hdFJlY3QuY3BwCmluZGV4IGI4NGE4OTIuLjQ0ZWQ4YjggMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0Zsb2F0UmVjdC5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRmxvYXRSZWN0LmNwcApAQCAtNjgsNiArNjgsMTMg
QEAgYm9vbCBGbG9hdFJlY3Q6OmNvbnRhaW5zKGNvbnN0IEZsb2F0UmVjdCYgb3RoZXIpIGNvbnN0
CiAgICAgICAgICYmIHkoKSA8PSBvdGhlci55KCkgJiYgbWF4WSgpID49IG90aGVyLm1heFkoKTsK
IH0KIAorYm9vbCBGbG9hdFJlY3Q6OmNvbXByaXNlcyhjb25zdCBGbG9hdFBvaW50JiBwb2ludCkg
Y29uc3QKK3sKKyAgICBpZiAoIWNvbnRhaW5zKHBvaW50KSkKKyAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgIHJldHVybiB4KCkgPCBwb2ludC54KCkgJiYgbWF4WCgpID4gcG9pbnQueCgpICYmIHko
KSA8IHBvaW50LnkoKSAmJiBtYXhZKCkgPiB5KCk7Cit9CisKIHZvaWQgRmxvYXRSZWN0OjppbnRl
cnNlY3QoY29uc3QgRmxvYXRSZWN0JiBvdGhlcikKIHsKICAgICBmbG9hdCBsID0gbWF4KHgoKSwg
b3RoZXIueCgpKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L0Zsb2F0UmVjdC5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRmxvYXRSZWN0
LmgKaW5kZXggMjRhNmIxOS4uMjI1MmE0YiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvRmxvYXRSZWN0LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvRmxvYXRSZWN0LmgKQEAgLTE0Niw2ICsxNDYsNyBAQCBwdWJsaWM6CiAKICAgICBi
b29sIGludGVyc2VjdHMoY29uc3QgRmxvYXRSZWN0JikgY29uc3Q7CiAgICAgYm9vbCBjb250YWlu
cyhjb25zdCBGbG9hdFJlY3QmKSBjb25zdDsKKyAgICBib29sIGNvbXByaXNlcyhjb25zdCBGbG9h
dFBvaW50JikgY29uc3Q7CiAKICAgICB2b2lkIGludGVyc2VjdChjb25zdCBGbG9hdFJlY3QmKTsK
ICAgICB2b2lkIHVuaXRlKGNvbnN0IEZsb2F0UmVjdCYpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL1JlbmRlck9iamVjdC5oIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlck9iamVjdC5oCmluZGV4IGJmYWE2OTUuLjc1MDg0OTIgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJPYmplY3QuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVyT2JqZWN0LmgKQEAgLTM1Niw3ICszNTYsMTAgQEAgcHVibGljOgogICAg
IHZpcnR1YWwgYm9vbCBpc1NWR1ZpZXdwb3J0Q29udGFpbmVyKCkgY29uc3QgeyByZXR1cm4gZmFs
c2U7IH0gCiAgICAgdmlydHVhbCBib29sIGlzU1ZHR3JhZGllbnRTdG9wKCkgY29uc3QgeyByZXR1
cm4gZmFsc2U7IH0KICAgICB2aXJ0dWFsIGJvb2wgaXNTVkdIaWRkZW5Db250YWluZXIoKSBjb25z
dCB7IHJldHVybiBmYWxzZTsgfQorICAgIHZpcnR1YWwgYm9vbCBpc1NWR0xpbmUoKSBjb25zdCB7
IHJldHVybiBmYWxzZTsgfQogICAgIHZpcnR1YWwgYm9vbCBpc1NWR1BhdGgoKSBjb25zdCB7IHJl
dHVybiBmYWxzZTsgfQorICAgIHZpcnR1YWwgYm9vbCBpc1NWR1JlY3QoKSBjb25zdCB7IHJldHVy
biBmYWxzZTsgfQorICAgIHZpcnR1YWwgYm9vbCBpc1NWR1NoYXBlKCkgY29uc3QgeyByZXR1cm4g
ZmFsc2U7IH0KICAgICB2aXJ0dWFsIGJvb2wgaXNTVkdUZXh0KCkgY29uc3QgeyByZXR1cm4gZmFs
c2U7IH0KICAgICB2aXJ0dWFsIGJvb2wgaXNTVkdUZXh0UGF0aCgpIGNvbnN0IHsgcmV0dXJuIGZh
bHNlOyB9CiAgICAgdmlydHVhbCBib29sIGlzU1ZHSW5saW5lKCkgY29uc3QgeyByZXR1cm4gZmFs
c2U7IH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUcmVlQXNU
ZXh0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUcmVlQXNUZXh0LmNwcApp
bmRleCA2NGU2NTRjLi5iMTJkNzc2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvUmVuZGVyVHJlZUFzVGV4dC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlclRyZWVBc1RleHQuY3BwCkBAIC01MjAsOCArNTIwLDggQEAgc3RhdGljIHZvaWQgd3JpdGVU
ZXh0UnVuKFRleHRTdHJlYW0mIHRzLCBjb25zdCBSZW5kZXJUZXh0JiBvLCBjb25zdCBJbmxpbmVU
ZXh0Qm8KIHZvaWQgd3JpdGUoVGV4dFN0cmVhbSYgdHMsIGNvbnN0IFJlbmRlck9iamVjdCYgbywg
aW50IGluZGVudCwgUmVuZGVyQXNUZXh0QmVoYXZpb3IgYmVoYXZpb3IpCiB7CiAjaWYgRU5BQkxF
KFNWRykKLSAgICBpZiAoby5pc1NWR1BhdGgoKSkgewotICAgICAgICB3cml0ZSh0cywgKnRvUmVu
ZGVyU1ZHUGF0aCgmbyksIGluZGVudCk7CisgICAgaWYgKG8uaXNTVkdTaGFwZSgpKSB7CisgICAg
ICAgIHdyaXRlKHRzLCAqdG9SZW5kZXJTVkdTaGFwZSgmbyksIGluZGVudCk7CiAgICAgICAgIHJl
dHVybjsKICAgICB9CiAgICAgaWYgKG8uaXNTVkdHcmFkaWVudFN0b3AoKSkgewpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdBbGxJbk9uZS5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR0FsbEluT25lLmNwcAppbmRleCA5
ZWEzYmU1Li4yOTY5MDA4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3Zn
L1JlbmRlclNWR0FsbEluT25lLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3Zn
L1JlbmRlclNWR0FsbEluT25lLmNwcApAQCAtMzUsNiArMzUsNyBAQAogI2luY2x1ZGUgIlJlbmRl
clNWR0lubGluZVRleHQuY3BwIgogI2luY2x1ZGUgIlJlbmRlclNWR01vZGVsT2JqZWN0LmNwcCIK
ICNpbmNsdWRlICJSZW5kZXJTVkdQYXRoLmNwcCIKKyNpbmNsdWRlICJSZW5kZXJTVkdSZWN0LmNw
cCIKICNpbmNsdWRlICJSZW5kZXJTVkdSZXNvdXJjZS5jcHAiCiAjaW5jbHVkZSAiUmVuZGVyU1ZH
UmVzb3VyY2VDbGlwcGVyLmNwcCIKICNpbmNsdWRlICJSZW5kZXJTVkdSZXNvdXJjZUNvbnRhaW5l
ci5jcHAiCkBAIC00OSw2ICs1MCw3IEBACiAjaW5jbHVkZSAiUmVuZGVyU1ZHUmVzb3VyY2VTb2xp
ZENvbG9yLmNwcCIKICNpbmNsdWRlICJSZW5kZXJTVkdSb290LmNwcCIKICNpbmNsdWRlICJSZW5k
ZXJTVkdTaGFkb3dUcmVlUm9vdENvbnRhaW5lci5jcHAiCisjaW5jbHVkZSAiUmVuZGVyU1ZHU2hh
cGUuY3BwIgogI2luY2x1ZGUgIlJlbmRlclNWR1RTcGFuLmNwcCIKICNpbmNsdWRlICJSZW5kZXJT
VkdUZXh0LmNwcCIKICNpbmNsdWRlICJSZW5kZXJTVkdUZXh0UGF0aC5jcHAiCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR01vZGVsT2JqZWN0LmNwcCBi
L1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHTW9kZWxPYmplY3QuY3BwCmlu
ZGV4IDE0YzFkYjguLmMyMzQwYjMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9zdmcvUmVuZGVyU1ZHTW9kZWxPYmplY3QuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9zdmcvUmVuZGVyU1ZHTW9kZWxPYmplY3QuY3BwCkBAIC0xNTMsNyArMTUzLDcgQEAgc3Rh
dGljIGJvb2wgaW50ZXJzZWN0c0FsbG93aW5nRW1wdHkoY29uc3QgRmxvYXRSZWN0JiByLCBjb25z
dCBGbG9hdFJlY3QmIG90aGVyKQogLy8gaW1hZ2UsIGxpbmUsIHBhdGgsIHBvbHlnb24sIHBvbHls
aW5lLCByZWN0LCB0ZXh0IGFuZCB1c2UuCiBzdGF0aWMgYm9vbCBpc0dyYXBoaWNzRWxlbWVudChS
ZW5kZXJPYmplY3QqIHJlbmRlcmVyKQogewotICAgIHJldHVybiByZW5kZXJlci0+aXNTVkdQYXRo
KCkgfHwgcmVuZGVyZXItPmlzU1ZHVGV4dCgpIHx8IHJlbmRlcmVyLT5pc1NWR0ltYWdlKCkgfHwg
cmVuZGVyZXItPmlzU1ZHU2hhZG93VHJlZVJvb3RDb250YWluZXIoKTsKKyAgICByZXR1cm4gcmVu
ZGVyZXItPmlzU1ZHU2hhcGUoKSB8fCByZW5kZXJlci0+aXNTVkdUZXh0KCkgfHwgcmVuZGVyZXIt
PmlzU1ZHSW1hZ2UoKSB8fCByZW5kZXJlci0+aXNTVkdTaGFkb3dUcmVlUm9vdENvbnRhaW5lcigp
OwogfQogCiBib29sIFJlbmRlclNWR01vZGVsT2JqZWN0OjpjaGVja0ludGVyc2VjdGlvbihSZW5k
ZXJPYmplY3QqIHJlbmRlcmVyLCBjb25zdCBGbG9hdFJlY3QmIHJlY3QpCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1BhdGguY3BwIGIvU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdQYXRoLmNwcAppbmRleCBiN2FkN2EyLi42Yzdk
NTQ0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Bh
dGguY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUGF0aC5j
cHAKQEAgLTYsNiArNiw4IEBACiAgKiBDb3B5cmlnaHQgKEMpIDIwMDkgRGlyayBTY2h1bHplIDxr
cml0QHdlYmtpdC5vcmc+CiAgKiBDb3B5cmlnaHQgKEMpIFJlc2VhcmNoIEluIE1vdGlvbiBMaW1p
dGVkIDIwMTAuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDkgSmVm
ZiBTY2hpbGxlciA8Y29kZWRyZWFkQGdtYWlsLmNvbT4KKyAqIENvcHlyaWdodCAoQykgMjAxMSBS
ZW5hdGEgSG9kb3ZhbiA8cmVuaUB3ZWJraXQub3JnPgorICogQ29weXJpZ2h0IChDKSAyMDExIFVu
aXZlcnNpdHkgb2YgU3plZ2VkCiAgKgogICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7
IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0
ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKQEAgLTI4LDUwICszMCwxMyBA
QAogI2lmIEVOQUJMRShTVkcpCiAjaW5jbHVkZSAiUmVuZGVyU1ZHUGF0aC5oIgogCi0jaW5jbHVk
ZSAiRmxvYXRQb2ludC5oIgotI2luY2x1ZGUgIkZsb2F0UXVhZC5oIgotI2luY2x1ZGUgIkdyYXBo
aWNzQ29udGV4dC5oIgotI2luY2x1ZGUgIkhpdFRlc3RSZXF1ZXN0LmgiCi0jaW5jbHVkZSAiTGF5
b3V0UmVwYWludGVyLmgiCi0jaW5jbHVkZSAiUG9pbnRlckV2ZW50c0hpdFJ1bGVzLmgiCi0jaW5j
bHVkZSAiUmVuZGVyU1ZHQ29udGFpbmVyLmgiCi0jaW5jbHVkZSAiUmVuZGVyU1ZHUmVzb3VyY2VN
YXJrZXIuaCIKLSNpbmNsdWRlICJSZW5kZXJTVkdSZXNvdXJjZVNvbGlkQ29sb3IuaCIKLSNpbmNs
dWRlICJTVkdSZW5kZXJTdXBwb3J0LmgiCi0jaW5jbHVkZSAiU1ZHUmVzb3VyY2VzLmgiCisjaW5j
bHVkZSAiU1ZHUGF0aEVsZW1lbnQuaCIKICNpbmNsdWRlICJTVkdTdHlsZWRUcmFuc2Zvcm1hYmxl
RWxlbWVudC5oIgotI2luY2x1ZGUgIlNWR1RyYW5zZm9ybUxpc3QuaCIKLSNpbmNsdWRlICJTVkdV
UklSZWZlcmVuY2UuaCIKLSNpbmNsdWRlICJTdHJva2VTdHlsZUFwcGxpZXIuaCIKLSNpbmNsdWRl
IDx3dGYvTWF0aEV4dHJhcy5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLWNsYXNzIEJvdW5k
aW5nUmVjdFN0cm9rZVN0eWxlQXBwbGllciA6IHB1YmxpYyBTdHJva2VTdHlsZUFwcGxpZXIgewot
cHVibGljOgotICAgIEJvdW5kaW5nUmVjdFN0cm9rZVN0eWxlQXBwbGllcihjb25zdCBSZW5kZXJP
YmplY3QqIG9iamVjdCwgUmVuZGVyU3R5bGUqIHN0eWxlKQotICAgICAgICA6IG1fb2JqZWN0KG9i
amVjdCkKLSAgICAgICAgLCBtX3N0eWxlKHN0eWxlKQotICAgIHsKLSAgICAgICAgQVNTRVJUKHN0
eWxlKTsKLSAgICAgICAgQVNTRVJUKG9iamVjdCk7Ci0gICAgfQotCi0gICAgdm9pZCBzdHJva2VT
dHlsZShHcmFwaGljc0NvbnRleHQqIGdjKQotICAgIHsKLSAgICAgICAgU1ZHUmVuZGVyU3VwcG9y
dDo6YXBwbHlTdHJva2VTdHlsZVRvQ29udGV4dChnYywgbV9zdHlsZSwgbV9vYmplY3QpOwotICAg
IH0KLQotcHJpdmF0ZToKLSAgICBjb25zdCBSZW5kZXJPYmplY3QqIG1fb2JqZWN0OwotICAgIFJl
bmRlclN0eWxlKiBtX3N0eWxlOwotfTsKLQogUmVuZGVyU1ZHUGF0aDo6UmVuZGVyU1ZHUGF0aChT
VkdTdHlsZWRUcmFuc2Zvcm1hYmxlRWxlbWVudCogbm9kZSkKLSAgICA6IFJlbmRlclNWR01vZGVs
T2JqZWN0KG5vZGUpCi0gICAgLCBtX25lZWRzQm91bmRhcmllc1VwZGF0ZShmYWxzZSkgLy8gZGVm
YXVsdCBpcyBmYWxzZSwgdGhlIGNhY2hlZCByZWN0cyBhcmUgZW1wdHkgZnJvbSB0aGUgYmVnaW5u
aW5nCi0gICAgLCBtX25lZWRzUGF0aFVwZGF0ZSh0cnVlKSAvLyBkZWZhdWx0IGlzIHRydWUsIHNv
IHdlIGdyYWIgYSBQYXRoIG9iamVjdCBvbmNlIGZyb20gU1ZHU3R5bGVkVHJhbnNmb3JtYWJsZUVs
ZW1lbnQKLSAgICAsIG1fbmVlZHNUcmFuc2Zvcm1VcGRhdGUodHJ1ZSkgLy8gZGVmYXVsdCBpcyB0
cnVlLCBzbyB3ZSBncmFiIGEgQWZmaW5lVHJhbnNmb3JtIG9iamVjdCBvbmNlIGZyb20gU1ZHU3R5
bGVkVHJhbnNmb3JtYWJsZUVsZW1lbnQKKyAgICA6IFJlbmRlclNWR1NoYXBlKG5vZGUpCiB7CiB9
CiAKQEAgLTc5LDMxNCArNDQsMTMgQEAgUmVuZGVyU1ZHUGF0aDo6flJlbmRlclNWR1BhdGgoKQog
ewogfQogCi1ib29sIFJlbmRlclNWR1BhdGg6OmZpbGxDb250YWlucyhjb25zdCBGbG9hdFBvaW50
JiBwb2ludCwgYm9vbCByZXF1aXJlc0ZpbGwsIFdpbmRSdWxlIGZpbGxSdWxlKQotewotICAgIGlm
ICghbV9maWxsQm91bmRpbmdCb3guY29udGFpbnMocG9pbnQpKQotICAgICAgICByZXR1cm4gZmFs
c2U7Ci0KLSAgICBDb2xvciBmYWxsYmFja0NvbG9yOwotICAgIGlmIChyZXF1aXJlc0ZpbGwgJiYg
IVJlbmRlclNWR1Jlc291cmNlOjpmaWxsUGFpbnRpbmdSZXNvdXJjZSh0aGlzLCBzdHlsZSgpLCBm
YWxsYmFja0NvbG9yKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgcmV0dXJuIG1fcGF0
aC5jb250YWlucyhwb2ludCwgZmlsbFJ1bGUpOwotfQotCi1ib29sIFJlbmRlclNWR1BhdGg6OnN0
cm9rZUNvbnRhaW5zKGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50LCBib29sIHJlcXVpcmVzU3Ryb2tl
KQotewotICAgIGlmICghbV9zdHJva2VBbmRNYXJrZXJCb3VuZGluZ0JveC5jb250YWlucyhwb2lu
dCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIENvbG9yIGZhbGxiYWNrQ29sb3I7Ci0g
ICAgaWYgKHJlcXVpcmVzU3Ryb2tlICYmICFSZW5kZXJTVkdSZXNvdXJjZTo6c3Ryb2tlUGFpbnRp
bmdSZXNvdXJjZSh0aGlzLCBzdHlsZSgpLCBmYWxsYmFja0NvbG9yKSkKLSAgICAgICAgcmV0dXJu
IGZhbHNlOwotCi0gICAgaWYgKHNob3VsZFN0cm9rZVplcm9MZW5ndGhTdWJwYXRoKCkpCi0gICAg
ICAgIHJldHVybiB6ZXJvTGVuZ3RoU3VicGF0aFJlY3QoKS5jb250YWlucyhwb2ludCk7Ci0KLSAg
ICBCb3VuZGluZ1JlY3RTdHJva2VTdHlsZUFwcGxpZXIgc3Ryb2tlU3R5bGUodGhpcywgc3R5bGUo
KSk7Ci0gICAgcmV0dXJuIG1fcGF0aC5zdHJva2VDb250YWlucygmc3Ryb2tlU3R5bGUsIHBvaW50
KTsKLX0KLQotdm9pZCBSZW5kZXJTVkdQYXRoOjpsYXlvdXQoKQotewotICAgIExheW91dFJlcGFp
bnRlciByZXBhaW50ZXIoKnRoaXMsIGNoZWNrRm9yUmVwYWludER1cmluZ0xheW91dCgpICYmIHNl
bGZOZWVkc0xheW91dCgpKTsKLSAgICBTVkdTdHlsZWRUcmFuc2Zvcm1hYmxlRWxlbWVudCogZWxl
bWVudCA9IHN0YXRpY19jYXN0PFNWR1N0eWxlZFRyYW5zZm9ybWFibGVFbGVtZW50Kj4obm9kZSgp
KTsKLQotICAgIGJvb2wgdXBkYXRlQ2FjaGVkQm91bmRhcmllc0luUGFyZW50cyA9IGZhbHNlOwot
Ci0gICAgYm9vbCBuZWVkc1BhdGhVcGRhdGUgPSBtX25lZWRzUGF0aFVwZGF0ZTsKLSAgICBpZiAo
bmVlZHNQYXRoVXBkYXRlKSB7Ci0gICAgICAgIG1fcGF0aC5jbGVhcigpOwotICAgICAgICBlbGVt
ZW50LT50b1BhdGhEYXRhKG1fcGF0aCk7Ci0gICAgICAgIG1fbmVlZHNQYXRoVXBkYXRlID0gZmFs
c2U7Ci0gICAgICAgIHVwZGF0ZUNhY2hlZEJvdW5kYXJpZXNJblBhcmVudHMgPSB0cnVlOwotICAg
IH0KLQotICAgIGlmIChtX25lZWRzVHJhbnNmb3JtVXBkYXRlKSB7Ci0gICAgICAgIG1fbG9jYWxU
cmFuc2Zvcm0gPSBlbGVtZW50LT5hbmltYXRlZExvY2FsVHJhbnNmb3JtKCk7Ci0gICAgICAgIG1f
bmVlZHNUcmFuc2Zvcm1VcGRhdGUgPSBmYWxzZTsKLSAgICAgICAgdXBkYXRlQ2FjaGVkQm91bmRh
cmllc0luUGFyZW50cyA9IHRydWU7Ci0gICAgfQotCi0gICAgaWYgKG1fbmVlZHNCb3VuZGFyaWVz
VXBkYXRlKQotICAgICAgICB1cGRhdGVDYWNoZWRCb3VuZGFyaWVzSW5QYXJlbnRzID0gdHJ1ZTsK
LQotICAgIC8vIEludmFsaWRhdGUgYWxsIHJlc291cmNlcyBvZiB0aGlzIGNsaWVudCBpZiBvdXIg
bGF5b3V0IGNoYW5nZWQuCi0gICAgaWYgKG1fZXZlckhhZExheW91dCAmJiBzZWxmTmVlZHNMYXlv
dXQoKSkgewotICAgICAgICBTVkdSZXNvdXJjZXNDYWNoZTo6Y2xpZW50TGF5b3V0Q2hhbmdlZCh0
aGlzKTsKLSAgICAgICAgbV9tYXJrZXJMYXlvdXRJbmZvLmNsZWFyKCk7Ci0gICAgfQotCi0gICAg
Ly8gQXQgdGhpcyBwb2ludCBMYXlvdXRSZXBhaW50ZXIgYWxyZWFkeSBncmFiYmVkIHRoZSBvbGQg
Ym91bmRzLAotICAgIC8vIHJlY2FsY3VsYXRlIHRoZW0gbm93IHNvIHJlcGFpbnRBZnRlckxheW91
dCgpIHVzZXMgdGhlIG5ldyBib3VuZHMuCi0gICAgaWYgKG5lZWRzUGF0aFVwZGF0ZSB8fCBtX25l
ZWRzQm91bmRhcmllc1VwZGF0ZSkgewotICAgICAgICB1cGRhdGVDYWNoZWRCb3VuZGFyaWVzKCk7
Ci0gICAgICAgIG1fbmVlZHNCb3VuZGFyaWVzVXBkYXRlID0gZmFsc2U7Ci0gICAgfQotCi0gICAg
Ly8gSWYgb3VyIGJvdW5kcyBjaGFuZ2VkLCBub3RpZnkgdGhlIHBhcmVudHMuCi0gICAgaWYgKHVw
ZGF0ZUNhY2hlZEJvdW5kYXJpZXNJblBhcmVudHMpCi0gICAgICAgIFJlbmRlclNWR01vZGVsT2Jq
ZWN0OjpzZXROZWVkc0JvdW5kYXJpZXNVcGRhdGUoKTsKLQotICAgIHJlcGFpbnRlci5yZXBhaW50
QWZ0ZXJMYXlvdXQoKTsKLSAgICBzZXROZWVkc0xheW91dChmYWxzZSk7Ci19Ci0KLWJvb2wgUmVu
ZGVyU1ZHUGF0aDo6c2hvdWxkU3Ryb2tlWmVyb0xlbmd0aFN1YnBhdGgoKSBjb25zdAotewotICAg
IC8vIFNwZWMoMTEuNCk6IEFueSB6ZXJvIGxlbmd0aCBzdWJwYXRoIHNoYWxsIG5vdCBiZSBzdHJv
a2VkIGlmIHRoZSDigJhzdHJva2UtbGluZWNhcOKAmSBwcm9wZXJ0eSBoYXMgYSB2YWx1ZSBvZiBi
dXR0Ci0gICAgLy8gYnV0IHNoYWxsIGJlIHN0cm9rZWQgaWYgdGhlIOKAmHN0cm9rZS1saW5lY2Fw
4oCZIHByb3BlcnR5IGhhcyBhIHZhbHVlIG9mIHJvdW5kIG9yIHNxdWFyZQotICAgIHJldHVybiBz
dHlsZSgpLT5zdmdTdHlsZSgpLT5oYXNTdHJva2UoKSAmJiBzdHlsZSgpLT5zdmdTdHlsZSgpLT5j
YXBTdHlsZSgpICE9IEJ1dHRDYXAgJiYgIW1fZmlsbEJvdW5kaW5nQm94LndpZHRoKCkgJiYgIW1f
ZmlsbEJvdW5kaW5nQm94LmhlaWdodCgpOwotfQotCi1GbG9hdFJlY3QgUmVuZGVyU1ZHUGF0aDo6
emVyb0xlbmd0aFN1YnBhdGhSZWN0KCkgY29uc3QKLXsKLSAgICBTVkdFbGVtZW50KiBzdmdFbGVt
ZW50ID0gc3RhdGljX2Nhc3Q8U1ZHRWxlbWVudCo+KG5vZGUoKSk7Ci0gICAgZmxvYXQgc3Ryb2tl
V2lkdGggPSBzdHlsZSgpLT5zdmdTdHlsZSgpLT5zdHJva2VXaWR0aCgpLnZhbHVlKHN2Z0VsZW1l
bnQpOwotICAgIHJldHVybiBGbG9hdFJlY3QobV9maWxsQm91bmRpbmdCb3gueCgpIC0gc3Ryb2tl
V2lkdGggLyAyLCBtX2ZpbGxCb3VuZGluZ0JveC55KCkgLSBzdHJva2VXaWR0aCAvIDIsIHN0cm9r
ZVdpZHRoLCBzdHJva2VXaWR0aCk7Ci19Ci0KLXZvaWQgUmVuZGVyU1ZHUGF0aDo6c2V0dXBTcXVh
cmVDYXBQYXRoKFBhdGgqJiB1c2VQYXRoLCBpbnQmIGFwcGx5TW9kZSkKK3ZvaWQgUmVuZGVyU1ZH
UGF0aDo6aW5mbGF0ZVdpdGhNYXJrZXJCb3VuZHMoKQogewotICAgIC8vIFNwZWMoMTEuNCk6IEFu
eSB6ZXJvIGxlbmd0aCBzdWJwYXRoIHNoYWxsIG5vdCBiZSBzdHJva2VkIGlmIHRoZSDigJhzdHJv
a2UtbGluZWNhcOKAmSBwcm9wZXJ0eSBoYXMgYSB2YWx1ZSBvZiBidXR0Ci0gICAgLy8gYnV0IHNo
YWxsIGJlIHN0cm9rZWQgaWYgdGhlIOKAmHN0cm9rZS1saW5lY2Fw4oCZIHByb3BlcnR5IGhhcyBh
IHZhbHVlIG9mIHJvdW5kIG9yIHNxdWFyZQotICAgIERFRklORV9TVEFUSUNfTE9DQUwoUGF0aCwg
dGVtcFBhdGgsICgpKTsKLQotICAgIGFwcGx5TW9kZSA9IEFwcGx5VG9GaWxsTW9kZTsKLSAgICB1
c2VQYXRoID0gJnRlbXBQYXRoOwotICAgIHVzZVBhdGgtPmNsZWFyKCk7Ci0gICAgaWYgKHN0eWxl
KCktPnN2Z1N0eWxlKCktPmNhcFN0eWxlKCkgPT0gU3F1YXJlQ2FwKQotICAgICAgICB1c2VQYXRo
LT5hZGRSZWN0KHplcm9MZW5ndGhTdWJwYXRoUmVjdCgpKTsKLSAgICBlbHNlCi0gICAgICAgIHVz
ZVBhdGgtPmFkZEVsbGlwc2UoemVyb0xlbmd0aFN1YnBhdGhSZWN0KCkpOwotfQotCi1ib29sIFJl
bmRlclNWR1BhdGg6OnNldHVwTm9uU2NhbGluZ1N0cm9rZVBhdGgoUGF0aComIHVzZVBhdGgsIEdy
YXBoaWNzQ29udGV4dFN0YXRlU2F2ZXImIHN0YXRlU2F2ZXIpCi17Ci0gICAgREVGSU5FX1NUQVRJ
Q19MT0NBTChQYXRoLCB0ZW1wUGF0aCwgKCkpOwotCi0gICAgU1ZHU3R5bGVkVHJhbnNmb3JtYWJs
ZUVsZW1lbnQqIGVsZW1lbnQgPSBzdGF0aWNfY2FzdDxTVkdTdHlsZWRUcmFuc2Zvcm1hYmxlRWxl
bWVudCo+KG5vZGUoKSk7Ci0gICAgQWZmaW5lVHJhbnNmb3JtIG5vblNjYWxpbmdTdHJva2VUcmFu
c2Zvcm0gPSBlbGVtZW50LT5nZXRTY3JlZW5DVE0oU1ZHTG9jYXRhYmxlOjpEaXNhbGxvd1N0eWxl
VXBkYXRlKTsKLSAgICBpZiAoIW5vblNjYWxpbmdTdHJva2VUcmFuc2Zvcm0uaXNJbnZlcnRpYmxl
KCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIHRlbXBQYXRoID0gbV9wYXRoOwotICAg
IHVzZVBhdGggPSAmdGVtcFBhdGg7Ci0gICAgdGVtcFBhdGgudHJhbnNmb3JtKG5vblNjYWxpbmdT
dHJva2VUcmFuc2Zvcm0pOwotCi0gICAgc3RhdGVTYXZlci5zYXZlKCk7Ci0gICAgc3RhdGVTYXZl
ci5jb250ZXh0KCktPmNvbmNhdENUTShub25TY2FsaW5nU3Ryb2tlVHJhbnNmb3JtLmludmVyc2Uo
KSk7Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLXZvaWQgUmVuZGVyU1ZHUGF0aDo6ZmlsbEFuZFN0
cm9rZVBhdGgoR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0KQotewotICAgIFJlbmRlclN0eWxlKiBz
dHlsZSA9IHRoaXMtPnN0eWxlKCk7Ci0KLSAgICBDb2xvciBmYWxsYmFja0NvbG9yOwotICAgIGlm
IChSZW5kZXJTVkdSZXNvdXJjZSogZmlsbFBhaW50aW5nUmVzb3VyY2UgPSBSZW5kZXJTVkdSZXNv
dXJjZTo6ZmlsbFBhaW50aW5nUmVzb3VyY2UodGhpcywgc3R5bGUsIGZhbGxiYWNrQ29sb3IpKSB7
Ci0gICAgICAgIGlmIChmaWxsUGFpbnRpbmdSZXNvdXJjZS0+YXBwbHlSZXNvdXJjZSh0aGlzLCBz
dHlsZSwgY29udGV4dCwgQXBwbHlUb0ZpbGxNb2RlKSkKLSAgICAgICAgICAgIGZpbGxQYWludGlu
Z1Jlc291cmNlLT5wb3N0QXBwbHlSZXNvdXJjZSh0aGlzLCBjb250ZXh0LCBBcHBseVRvRmlsbE1v
ZGUsICZtX3BhdGgpOwotICAgICAgICBlbHNlIGlmIChmYWxsYmFja0NvbG9yLmlzVmFsaWQoKSkg
ewotICAgICAgICAgICAgUmVuZGVyU1ZHUmVzb3VyY2VTb2xpZENvbG9yKiBmYWxsYmFja1Jlc291
cmNlID0gUmVuZGVyU1ZHUmVzb3VyY2U6OnNoYXJlZFNvbGlkUGFpbnRpbmdSZXNvdXJjZSgpOwot
ICAgICAgICAgICAgZmFsbGJhY2tSZXNvdXJjZS0+c2V0Q29sb3IoZmFsbGJhY2tDb2xvcik7Ci0g
ICAgICAgICAgICBpZiAoZmFsbGJhY2tSZXNvdXJjZS0+YXBwbHlSZXNvdXJjZSh0aGlzLCBzdHls
ZSwgY29udGV4dCwgQXBwbHlUb0ZpbGxNb2RlKSkKLSAgICAgICAgICAgICAgICBmYWxsYmFja1Jl
c291cmNlLT5wb3N0QXBwbHlSZXNvdXJjZSh0aGlzLCBjb250ZXh0LCBBcHBseVRvRmlsbE1vZGUs
ICZtX3BhdGgpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgZmFsbGJhY2tDb2xvciA9IENvbG9y
KCk7Ci0gICAgUmVuZGVyU1ZHUmVzb3VyY2UqIHN0cm9rZVBhaW50aW5nUmVzb3VyY2UgPSBSZW5k
ZXJTVkdSZXNvdXJjZTo6c3Ryb2tlUGFpbnRpbmdSZXNvdXJjZSh0aGlzLCBzdHlsZSwgZmFsbGJh
Y2tDb2xvcik7Ci0gICAgaWYgKCFzdHJva2VQYWludGluZ1Jlc291cmNlKQotICAgICAgICByZXR1
cm47Ci0KLSAgICBQYXRoKiB1c2VQYXRoID0gJm1fcGF0aDsKLSAgICBpbnQgYXBwbHlNb2RlID0g
QXBwbHlUb1N0cm9rZU1vZGU7Ci0KLSAgICBib29sIG5vblNjYWxpbmdTdHJva2UgPSBzdHlsZS0+
c3ZnU3R5bGUoKS0+dmVjdG9yRWZmZWN0KCkgPT0gVkVfTk9OX1NDQUxJTkdfU1RST0tFOwotCi0g
ICAgR3JhcGhpY3NDb250ZXh0U3RhdGVTYXZlciBzdGF0ZVNhdmVyKCpjb250ZXh0LCBmYWxzZSk7
Ci0KLSAgICAvLyBTcGVjKDExLjQpOiBBbnkgemVybyBsZW5ndGggc3VicGF0aCBzaGFsbCBub3Qg
YmUgc3Ryb2tlZCBpZiB0aGUg4oCYc3Ryb2tlLWxpbmVjYXDigJkgcHJvcGVydHkgaGFzIGEgdmFs
dWUgb2YgYnV0dAotICAgIC8vIGJ1dCBzaGFsbCBiZSBzdHJva2VkIGlmIHRoZSDigJhzdHJva2Ut
bGluZWNhcOKAmSBwcm9wZXJ0eSBoYXMgYSB2YWx1ZSBvZiByb3VuZCBvciBzcXVhcmUKLSAgICAv
LyBGSVhNRTogdGhpcyBkb2VzIG5vdCB3b3JrIGZvciB6ZXJvLWxlbmd0aCBzdWJwYXRocywgb25s
eSB3aGVuIHRvdGFsIHBhdGggaXMgemVyby1sZW5ndGgKLSAgICBpZiAoc2hvdWxkU3Ryb2tlWmVy
b0xlbmd0aFN1YnBhdGgoKSkKLSAgICAgICAgc2V0dXBTcXVhcmVDYXBQYXRoKHVzZVBhdGgsIGFw
cGx5TW9kZSk7Ci0gICAgZWxzZSBpZiAobm9uU2NhbGluZ1N0cm9rZSkgewotICAgICAgIGlmICgh
c2V0dXBOb25TY2FsaW5nU3Ryb2tlUGF0aCh1c2VQYXRoLCBzdGF0ZVNhdmVyKSkKLSAgICAgICAg
ICAgcmV0dXJuOwotICAgIH0KLQotICAgIGlmIChzdHJva2VQYWludGluZ1Jlc291cmNlLT5hcHBs
eVJlc291cmNlKHRoaXMsIHN0eWxlLCBjb250ZXh0LCBhcHBseU1vZGUpKQotICAgICAgICBzdHJv
a2VQYWludGluZ1Jlc291cmNlLT5wb3N0QXBwbHlSZXNvdXJjZSh0aGlzLCBjb250ZXh0LCBhcHBs
eU1vZGUsIHVzZVBhdGgpOwotICAgIGVsc2UgaWYgKGZhbGxiYWNrQ29sb3IuaXNWYWxpZCgpKSB7
Ci0gICAgICAgIFJlbmRlclNWR1Jlc291cmNlU29saWRDb2xvciogZmFsbGJhY2tSZXNvdXJjZSA9
IFJlbmRlclNWR1Jlc291cmNlOjpzaGFyZWRTb2xpZFBhaW50aW5nUmVzb3VyY2UoKTsKLSAgICAg
ICAgZmFsbGJhY2tSZXNvdXJjZS0+c2V0Q29sb3IoZmFsbGJhY2tDb2xvcik7Ci0gICAgICAgIGlm
IChmYWxsYmFja1Jlc291cmNlLT5hcHBseVJlc291cmNlKHRoaXMsIHN0eWxlLCBjb250ZXh0LCBh
cHBseU1vZGUpKQotICAgICAgICAgICAgZmFsbGJhY2tSZXNvdXJjZS0+cG9zdEFwcGx5UmVzb3Vy
Y2UodGhpcywgY29udGV4dCwgYXBwbHlNb2RlLCB1c2VQYXRoKTsKLSAgICB9Ci19Ci0KLXZvaWQg
UmVuZGVyU1ZHUGF0aDo6cGFpbnQoUGFpbnRJbmZvJiBwYWludEluZm8sIGNvbnN0IExheW91dFBv
aW50JikKLXsKLSAgICBpZiAocGFpbnRJbmZvLmNvbnRleHQtPnBhaW50aW5nRGlzYWJsZWQoKSB8
fCBzdHlsZSgpLT52aXNpYmlsaXR5KCkgPT0gSElEREVOIHx8IG1fcGF0aC5pc0VtcHR5KCkpCi0g
ICAgICAgIHJldHVybjsKLQotICAgIEZsb2F0UmVjdCBib3VuZGluZ0JveCA9IHJlcGFpbnRSZWN0
SW5Mb2NhbENvb3JkaW5hdGVzKCk7Ci0gICAgaWYgKCFTVkdSZW5kZXJTdXBwb3J0OjpwYWludElu
Zm9JbnRlcnNlY3RzUmVwYWludFJlY3QoYm91bmRpbmdCb3gsIG1fbG9jYWxUcmFuc2Zvcm0sIHBh
aW50SW5mbykpCi0gICAgICAgIHJldHVybjsKLQotICAgIFBhaW50SW5mbyBjaGlsZFBhaW50SW5m
byhwYWludEluZm8pOwotICAgIGJvb2wgZHJhd3NPdXRsaW5lID0gc3R5bGUoKS0+b3V0bGluZVdp
ZHRoKCkgJiYgKGNoaWxkUGFpbnRJbmZvLnBoYXNlID09IFBhaW50UGhhc2VPdXRsaW5lIHx8IGNo
aWxkUGFpbnRJbmZvLnBoYXNlID09IFBhaW50UGhhc2VTZWxmT3V0bGluZSk7Ci0gICAgaWYgKGRy
YXdzT3V0bGluZSB8fCBjaGlsZFBhaW50SW5mby5waGFzZSA9PSBQYWludFBoYXNlRm9yZWdyb3Vu
ZCkgewotICAgICAgICBHcmFwaGljc0NvbnRleHRTdGF0ZVNhdmVyIHN0YXRlU2F2ZXIoKmNoaWxk
UGFpbnRJbmZvLmNvbnRleHQpOwotICAgICAgICBjaGlsZFBhaW50SW5mby5hcHBseVRyYW5zZm9y
bShtX2xvY2FsVHJhbnNmb3JtKTsKLQotICAgICAgICBpZiAoY2hpbGRQYWludEluZm8ucGhhc2Ug
PT0gUGFpbnRQaGFzZUZvcmVncm91bmQpIHsKLSAgICAgICAgICAgIFBhaW50SW5mbyBzYXZlZElu
Zm8oY2hpbGRQYWludEluZm8pOwotCi0gICAgICAgICAgICBpZiAoU1ZHUmVuZGVyU3VwcG9ydDo6
cHJlcGFyZVRvUmVuZGVyU1ZHQ29udGVudCh0aGlzLCBjaGlsZFBhaW50SW5mbykpIHsKLSAgICAg
ICAgICAgICAgICBjb25zdCBTVkdSZW5kZXJTdHlsZSogc3ZnU3R5bGUgPSBzdHlsZSgpLT5zdmdT
dHlsZSgpOwotICAgICAgICAgICAgICAgIGlmIChzdmdTdHlsZS0+c2hhcGVSZW5kZXJpbmcoKSA9
PSBTUl9DUklTUEVER0VTKQotICAgICAgICAgICAgICAgICAgICBjaGlsZFBhaW50SW5mby5jb250
ZXh0LT5zZXRTaG91bGRBbnRpYWxpYXMoZmFsc2UpOwotCi0gICAgICAgICAgICAgICAgZmlsbEFu
ZFN0cm9rZVBhdGgoY2hpbGRQYWludEluZm8uY29udGV4dCk7Ci0KLSAgICAgICAgICAgICAgICBp
ZiAoc3ZnU3R5bGUtPmhhc01hcmtlcnMoKSkKLSAgICAgICAgICAgICAgICAgICAgbV9tYXJrZXJM
YXlvdXRJbmZvLmRyYXdNYXJrZXJzKGNoaWxkUGFpbnRJbmZvKTsKLSAgICAgICAgICAgIH0KLQot
ICAgICAgICAgICAgU1ZHUmVuZGVyU3VwcG9ydDo6ZmluaXNoUmVuZGVyU1ZHQ29udGVudCh0aGlz
LCBjaGlsZFBhaW50SW5mbywgc2F2ZWRJbmZvLmNvbnRleHQpOwotICAgICAgICB9Ci0KLSAgICAg
ICAgaWYgKGRyYXdzT3V0bGluZSkKLSAgICAgICAgICAgIHBhaW50T3V0bGluZShjaGlsZFBhaW50
SW5mby5jb250ZXh0LCBJbnRSZWN0KGJvdW5kaW5nQm94KSk7Ci0gICAgfQotfQotCi0vLyBUaGlz
IG1ldGhvZCBpcyBjYWxsZWQgZnJvbSBpbnNpZGUgcGFpbnRPdXRsaW5lKCkgc2luY2Ugd2UgY2Fs
bCBwYWludE91dGxpbmUoKQotLy8gd2hpbGUgdHJhbnNmb3JtZWQgdG8gb3VyIGNvb3JkIHN5c3Rl
bSwgcmV0dXJuIGxvY2FsIGNvb3Jkcwotdm9pZCBSZW5kZXJTVkdQYXRoOjphZGRGb2N1c1JpbmdS
ZWN0cyhWZWN0b3I8TGF5b3V0UmVjdD4mIHJlY3RzLCBjb25zdCBMYXlvdXRQb2ludCYpIAotewot
ICAgIExheW91dFJlY3QgcmVjdCA9IGVuY2xvc2luZ0xheW91dFJlY3QocmVwYWludFJlY3RJbkxv
Y2FsQ29vcmRpbmF0ZXMoKSk7Ci0gICAgaWYgKCFyZWN0LmlzRW1wdHkoKSkKLSAgICAgICAgcmVj
dHMuYXBwZW5kKHJlY3QpOwotfQotCi1ib29sIFJlbmRlclNWR1BhdGg6Om5vZGVBdEZsb2F0UG9p
bnQoY29uc3QgSGl0VGVzdFJlcXVlc3QmIHJlcXVlc3QsIEhpdFRlc3RSZXN1bHQmIHJlc3VsdCwg
Y29uc3QgRmxvYXRQb2ludCYgcG9pbnRJblBhcmVudCwgSGl0VGVzdEFjdGlvbiBoaXRUZXN0QWN0
aW9uKQotewotICAgIC8vIFdlIG9ubHkgZHJhdyBpbiB0aGUgZm9yZ3JvdW5kIHBoYXNlLCBzbyB3
ZSBvbmx5IGhpdC10ZXN0IHRoZW4uCi0gICAgaWYgKGhpdFRlc3RBY3Rpb24gIT0gSGl0VGVzdEZv
cmVncm91bmQpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIEZsb2F0UG9pbnQgbG9jYWxQ
b2ludCA9IG1fbG9jYWxUcmFuc2Zvcm0uaW52ZXJzZSgpLm1hcFBvaW50KHBvaW50SW5QYXJlbnQp
OwotCi0gICAgaWYgKCFTVkdSZW5kZXJTdXBwb3J0Ojpwb2ludEluQ2xpcHBpbmdBcmVhKHRoaXMs
IGxvY2FsUG9pbnQpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBQb2ludGVyRXZlbnRz
SGl0UnVsZXMgaGl0UnVsZXMoUG9pbnRlckV2ZW50c0hpdFJ1bGVzOjpTVkdfUEFUSF9ISVRURVNU
SU5HLCByZXF1ZXN0LCBzdHlsZSgpLT5wb2ludGVyRXZlbnRzKCkpOwotICAgIGJvb2wgaXNWaXNp
YmxlID0gKHN0eWxlKCktPnZpc2liaWxpdHkoKSA9PSBWSVNJQkxFKTsKLSAgICBpZiAoaXNWaXNp
YmxlIHx8ICFoaXRSdWxlcy5yZXF1aXJlVmlzaWJsZSkgewotICAgICAgICBjb25zdCBTVkdSZW5k
ZXJTdHlsZSogc3ZnU3R5bGUgPSBzdHlsZSgpLT5zdmdTdHlsZSgpOwotICAgICAgICBXaW5kUnVs
ZSBmaWxsUnVsZSA9IHN2Z1N0eWxlLT5maWxsUnVsZSgpOwotICAgICAgICBpZiAocmVxdWVzdC5z
dmdDbGlwQ29udGVudCgpKQotICAgICAgICAgICAgZmlsbFJ1bGUgPSBzdmdTdHlsZS0+Y2xpcFJ1
bGUoKTsKLSAgICAgICAgaWYgKChoaXRSdWxlcy5jYW5IaXRTdHJva2UgJiYgKHN2Z1N0eWxlLT5o
YXNTdHJva2UoKSB8fCAhaGl0UnVsZXMucmVxdWlyZVN0cm9rZSkgJiYgc3Ryb2tlQ29udGFpbnMo
bG9jYWxQb2ludCwgaGl0UnVsZXMucmVxdWlyZVN0cm9rZSkpCi0gICAgICAgICAgICB8fCAoaGl0
UnVsZXMuY2FuSGl0RmlsbCAmJiAoc3ZnU3R5bGUtPmhhc0ZpbGwoKSB8fCAhaGl0UnVsZXMucmVx
dWlyZUZpbGwpICYmIGZpbGxDb250YWlucyhsb2NhbFBvaW50LCBoaXRSdWxlcy5yZXF1aXJlRmls
bCwgZmlsbFJ1bGUpKSkgewotICAgICAgICAgICAgdXBkYXRlSGl0VGVzdFJlc3VsdChyZXN1bHQs
IHJvdW5kZWRMYXlvdXRQb2ludChsb2NhbFBvaW50KSk7Ci0gICAgICAgICAgICByZXR1cm4gdHJ1
ZTsKLSAgICAgICAgfQotICAgIH0KLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLUZsb2F0UmVjdCBS
ZW5kZXJTVkdQYXRoOjpjYWxjdWxhdGVNYXJrZXJCb3VuZHNJZk5lZWRlZCgpCi17Ci0gICAgU1ZH
RWxlbWVudCogc3ZnRWxlbWVudCA9IHN0YXRpY19jYXN0PFNWR0VsZW1lbnQqPihub2RlKCkpOwot
ICAgIEFTU0VSVChzdmdFbGVtZW50ICYmIHN2Z0VsZW1lbnQtPmRvY3VtZW50KCkpOwotICAgIGlm
ICghc3ZnRWxlbWVudC0+aXNTdHlsZWQoKSkKLSAgICAgICAgcmV0dXJuIEZsb2F0UmVjdCgpOwot
Ci0gICAgU1ZHU3R5bGVkRWxlbWVudCogc3R5bGVkRWxlbWVudCA9IHN0YXRpY19jYXN0PFNWR1N0
eWxlZEVsZW1lbnQqPihzdmdFbGVtZW50KTsKLSAgICBpZiAoIXN0eWxlZEVsZW1lbnQtPnN1cHBv
cnRzTWFya2VycygpKQotICAgICAgICByZXR1cm4gRmxvYXRSZWN0KCk7Ci0KLSAgICBjb25zdCBT
VkdSZW5kZXJTdHlsZSogc3ZnU3R5bGUgPSBzdHlsZSgpLT5zdmdTdHlsZSgpOwotICAgIEFTU0VS
VChzdmdTdHlsZS0+aGFzTWFya2VycygpKTsKLQotICAgIFNWR1Jlc291cmNlcyogcmVzb3VyY2Vz
ID0gU1ZHUmVzb3VyY2VzQ2FjaGU6OmNhY2hlZFJlc291cmNlc0ZvclJlbmRlck9iamVjdCh0aGlz
KTsKLSAgICBpZiAoIXJlc291cmNlcykKLSAgICAgICAgcmV0dXJuIEZsb2F0UmVjdCgpOwotCi0g
ICAgUmVuZGVyU1ZHUmVzb3VyY2VNYXJrZXIqIG1hcmtlclN0YXJ0ID0gcmVzb3VyY2VzLT5tYXJr
ZXJTdGFydCgpOwotICAgIFJlbmRlclNWR1Jlc291cmNlTWFya2VyKiBtYXJrZXJNaWQgPSByZXNv
dXJjZXMtPm1hcmtlck1pZCgpOwotICAgIFJlbmRlclNWR1Jlc291cmNlTWFya2VyKiBtYXJrZXJF
bmQgPSByZXNvdXJjZXMtPm1hcmtlckVuZCgpOwotICAgIGlmICghbWFya2VyU3RhcnQgJiYgIW1h
cmtlck1pZCAmJiAhbWFya2VyRW5kKQotICAgICAgICByZXR1cm4gRmxvYXRSZWN0KCk7Ci0KLSAg
ICByZXR1cm4gbV9tYXJrZXJMYXlvdXRJbmZvLmNhbGN1bGF0ZUJvdW5kYXJpZXMobWFya2VyU3Rh
cnQsIG1hcmtlck1pZCwgbWFya2VyRW5kLCBzdmdTdHlsZS0+c3Ryb2tlV2lkdGgoKS52YWx1ZShz
dmdFbGVtZW50KSwgbV9wYXRoKTsKLX0KLQotdm9pZCBSZW5kZXJTVkdQYXRoOjp1cGRhdGVDYWNo
ZWRCb3VuZGFyaWVzKCkKLXsKLSAgICBpZiAobV9wYXRoLmlzRW1wdHkoKSkgewotICAgICAgICBt
X2ZpbGxCb3VuZGluZ0JveCA9IEZsb2F0UmVjdCgpOwotICAgICAgICBtX3N0cm9rZUFuZE1hcmtl
ckJvdW5kaW5nQm94ID0gRmxvYXRSZWN0KCk7Ci0gICAgICAgIG1fcmVwYWludEJvdW5kaW5nQm94
ID0gRmxvYXRSZWN0KCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICAvLyBDYWNoZSBf
dW5jbGlwcGVkXyBmaWxsIGJvdW5kaW5nIGJveCwgdXNlZCBmb3IgY2FsY3VsYXRpb25zIGluIHJl
c291cmNlcwotICAgIG1fZmlsbEJvdW5kaW5nQm94ID0gbV9wYXRoLmJvdW5kaW5nUmVjdCgpOwot
Ci0gICAgLy8gU3BlYygxMS40KTogQW55IHplcm8gbGVuZ3RoIHN1YnBhdGggc2hhbGwgbm90IGJl
IHN0cm9rZWQgaWYgdGhlIOKAmHN0cm9rZS1saW5lY2Fw4oCZIHByb3BlcnR5IGhhcyBhIHZhbHVl
IG9mIGJ1dHQKLSAgICAvLyBidXQgc2hhbGwgYmUgc3Ryb2tlZCBpZiB0aGUg4oCYc3Ryb2tlLWxp
bmVjYXDigJkgcHJvcGVydHkgaGFzIGEgdmFsdWUgb2Ygcm91bmQgb3Igc3F1YXJlCi0gICAgaWYg
KHNob3VsZFN0cm9rZVplcm9MZW5ndGhTdWJwYXRoKCkpIHsKLSAgICAgICAgbV9zdHJva2VBbmRN
YXJrZXJCb3VuZGluZ0JveCA9IHplcm9MZW5ndGhTdWJwYXRoUmVjdCgpOwotICAgICAgICAvLyBD
YWNoZSBzbWFsbGVzdCBwb3NzaWJsZSByZXBhaW50IHJlY3RhbmdsZQotICAgICAgICBtX3JlcGFp
bnRCb3VuZGluZ0JveCA9IG1fc3Ryb2tlQW5kTWFya2VyQm91bmRpbmdCb3g7Ci0gICAgICAgIFNW
R1JlbmRlclN1cHBvcnQ6OmludGVyc2VjdFJlcGFpbnRSZWN0V2l0aFJlc291cmNlcyh0aGlzLCBt
X3JlcGFpbnRCb3VuZGluZ0JveCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICAvLyBD
YWNoZSBfdW5jbGlwcGVkXyBzdHJva2UgYm91bmRpbmcgYm94LCB1c2VkIGZvciBjYWxjdWxhdGlv
bnMgaW4gcmVzb3VyY2VzIChpbmNsdWRlcyBtYXJrZXIgYm91bmRhcmllcykKLSAgICBtX3N0cm9r
ZUFuZE1hcmtlckJvdW5kaW5nQm94ID0gbV9maWxsQm91bmRpbmdCb3g7Ci0KLSAgICBjb25zdCBT
VkdSZW5kZXJTdHlsZSogc3ZnU3R5bGUgPSBzdHlsZSgpLT5zdmdTdHlsZSgpOwotICAgIGlmIChz
dmdTdHlsZS0+aGFzU3Ryb2tlKCkpIHsKLSAgICAgICAgQm91bmRpbmdSZWN0U3Ryb2tlU3R5bGVB
cHBsaWVyIHN0cm9rZVN0eWxlKHRoaXMsIHN0eWxlKCkpOwotICAgICAgICBtX3N0cm9rZUFuZE1h
cmtlckJvdW5kaW5nQm94LnVuaXRlKG1fcGF0aC5zdHJva2VCb3VuZGluZ1JlY3QoJnN0cm9rZVN0
eWxlKSk7Ci0gICAgfQotCi0gICAgaWYgKHN2Z1N0eWxlLT5oYXNNYXJrZXJzKCkpIHsKKyAgICBp
ZiAoc3R5bGUoKS0+c3ZnU3R5bGUoKS0+aGFzTWFya2VycygpKSB7CiAgICAgICAgIEZsb2F0UmVj
dCBtYXJrZXJCb3VuZHMgPSBjYWxjdWxhdGVNYXJrZXJCb3VuZHNJZk5lZWRlZCgpOwogICAgICAg
ICBpZiAoIW1hcmtlckJvdW5kcy5pc0VtcHR5KCkpCi0gICAgICAgICAgICBtX3N0cm9rZUFuZE1h
cmtlckJvdW5kaW5nQm94LnVuaXRlKG1hcmtlckJvdW5kcyk7CisgICAgICAgICAgICBzdHJva2VC
b3VuZGluZ0JveCgpLnVuaXRlKG1hcmtlckJvdW5kcyk7CiAgICAgfQotCi0gICAgLy8gQ2FjaGUg
c21hbGxlc3QgcG9zc2libGUgcmVwYWludCByZWN0YW5nbGUKLSAgICBtX3JlcGFpbnRCb3VuZGlu
Z0JveCA9IG1fc3Ryb2tlQW5kTWFya2VyQm91bmRpbmdCb3g7Ci0gICAgU1ZHUmVuZGVyU3VwcG9y
dDo6aW50ZXJzZWN0UmVwYWludFJlY3RXaXRoUmVzb3VyY2VzKHRoaXMsIG1fcmVwYWludEJvdW5k
aW5nQm94KTsKIH0KIAogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2
Zy9SZW5kZXJTVkdQYXRoLmggYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNW
R1BhdGguaAppbmRleCA5OGU2MDhkLi45Yzg0NzdiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1BhdGguaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvc3ZnL1JlbmRlclNWR1BhdGguaApAQCAtNCw2ICs0LDggQEAKICAqIENvcHlyaWdodCAo
QykgMjAwNSBFcmljIFNlaWRlbCA8ZXJpY0B3ZWJraXQub3JnPgogICogQ29weXJpZ2h0IChDKSAy
MDA2IEFwcGxlIENvbXB1dGVyLCBJbmMKICAqIENvcHlyaWdodCAoQykgMjAwOSBHb29nbGUsIElu
Yy4KKyAqIENvcHlyaWdodCAoQykgMjAxMSBSZW5hdGEgSG9kb3ZhbiA8cmVuaUB3ZWJraXQub3Jn
PgorICogQ29weXJpZ2h0IChDKSAyMDExIFVuaXZlcnNpdHkgb2YgU3plZ2VkCiAgKgogICogVGhp
cyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9v
cgogICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJh
bCBQdWJsaWMKQEAgLTI1LDg2ICsyNywyMyBAQAogI2RlZmluZSBSZW5kZXJTVkdQYXRoX2gKIAog
I2lmIEVOQUJMRShTVkcpCi0jaW5jbHVkZSAiQWZmaW5lVHJhbnNmb3JtLmgiCi0jaW5jbHVkZSAi
RmxvYXRSZWN0LmgiCi0jaW5jbHVkZSAiUmVuZGVyU1ZHTW9kZWxPYmplY3QuaCIKLSNpbmNsdWRl
ICJTVkdNYXJrZXJMYXlvdXRJbmZvLmgiCisjaW5jbHVkZSAiUmVuZGVyU1ZHU2hhcGUuaCIKIAog
bmFtZXNwYWNlIFdlYkNvcmUgewogCi1jbGFzcyBGbG9hdFBvaW50OwotY2xhc3MgR3JhcGhpY3ND
b250ZXh0U3RhdGVTYXZlcjsKLWNsYXNzIFJlbmRlclNWR0NvbnRhaW5lcjsKLWNsYXNzIFNWR1N0
eWxlZFRyYW5zZm9ybWFibGVFbGVtZW50OwotCi1jbGFzcyBSZW5kZXJTVkdQYXRoIDogcHVibGlj
IFJlbmRlclNWR01vZGVsT2JqZWN0IHsKKy8vIEZJWE1FOiBSZW5kZXJTVkdQYXRoIHdpbGwgYmUg
cmVtb3ZlZCB3aGVuIGFsbCBTVkcgc2hhcGVzIHdpbGwgYmUgcmVuZGVyZWQgdmlhIFJlbmRlclNW
R1NoYXBlLgorY2xhc3MgUmVuZGVyU1ZHUGF0aCA6IHB1YmxpYyBSZW5kZXJTVkdTaGFwZSB7CiBw
dWJsaWM6Ci0gICAgZXhwbGljaXQgUmVuZGVyU1ZHUGF0aChTVkdTdHlsZWRUcmFuc2Zvcm1hYmxl
RWxlbWVudCopOworICAgIFJlbmRlclNWR1BhdGgoU1ZHU3R5bGVkVHJhbnNmb3JtYWJsZUVsZW1l
bnQqKTsKICAgICB2aXJ0dWFsIH5SZW5kZXJTVkdQYXRoKCk7CiAKLSAgICBjb25zdCBQYXRoJiBw
YXRoKCkgY29uc3QgeyByZXR1cm4gbV9wYXRoOyB9Ci0gICAgdm9pZCBzZXROZWVkc1BhdGhVcGRh
dGUoKSB7IG1fbmVlZHNQYXRoVXBkYXRlID0gdHJ1ZTsgfQotICAgIHZpcnR1YWwgdm9pZCBzZXRO
ZWVkc0JvdW5kYXJpZXNVcGRhdGUoKSB7IG1fbmVlZHNCb3VuZGFyaWVzVXBkYXRlID0gdHJ1ZTsg
fQotICAgIHZpcnR1YWwgdm9pZCBzZXROZWVkc1RyYW5zZm9ybVVwZGF0ZSgpIHsgbV9uZWVkc1Ry
YW5zZm9ybVVwZGF0ZSA9IHRydWU7IH0KLQogcHJpdmF0ZToKLSAgICAvLyBIaXQtZGV0ZWN0aW9u
IHNlcGVyYXRlZCBmb3IgdGhlIGZpbGwgYW5kIHRoZSBzdHJva2UKLSAgICBib29sIGZpbGxDb250
YWlucyhjb25zdCBGbG9hdFBvaW50JiwgYm9vbCByZXF1aXJlc0ZpbGwgPSB0cnVlLCBXaW5kUnVs
ZSBmaWxsUnVsZSA9IFJVTEVfTk9OWkVSTyk7Ci0gICAgYm9vbCBzdHJva2VDb250YWlucyhjb25z
dCBGbG9hdFBvaW50JiwgYm9vbCByZXF1aXJlc1N0cm9rZSA9IHRydWUpOwotCi0gICAgdmlydHVh
bCBGbG9hdFJlY3Qgb2JqZWN0Qm91bmRpbmdCb3goKSBjb25zdCB7IHJldHVybiBtX2ZpbGxCb3Vu
ZGluZ0JveDsgfQotICAgIHZpcnR1YWwgRmxvYXRSZWN0IHN0cm9rZUJvdW5kaW5nQm94KCkgY29u
c3QgeyByZXR1cm4gbV9zdHJva2VBbmRNYXJrZXJCb3VuZGluZ0JveDsgfQotICAgIHZpcnR1YWwg
RmxvYXRSZWN0IHJlcGFpbnRSZWN0SW5Mb2NhbENvb3JkaW5hdGVzKCkgY29uc3QgeyByZXR1cm4g
bV9yZXBhaW50Qm91bmRpbmdCb3g7IH0KLSAgICB2aXJ0dWFsIGNvbnN0IEFmZmluZVRyYW5zZm9y
bSYgbG9jYWxUb1BhcmVudFRyYW5zZm9ybSgpIGNvbnN0IHsgcmV0dXJuIG1fbG9jYWxUcmFuc2Zv
cm07IH0KLQogICAgIHZpcnR1YWwgYm9vbCBpc1NWR1BhdGgoKSBjb25zdCB7IHJldHVybiB0cnVl
OyB9CiAgICAgdmlydHVhbCBjb25zdCBjaGFyKiByZW5kZXJOYW1lKCkgY29uc3QgeyByZXR1cm4g
IlJlbmRlclNWR1BhdGgiOyB9CiAKLSAgICB2aXJ0dWFsIHZvaWQgbGF5b3V0KCk7Ci0gICAgdmly
dHVhbCB2b2lkIHBhaW50KFBhaW50SW5mbyYsIGNvbnN0IExheW91dFBvaW50Jik7Ci0gICAgdmly
dHVhbCB2b2lkIGFkZEZvY3VzUmluZ1JlY3RzKFZlY3RvcjxMYXlvdXRSZWN0PiYsIGNvbnN0IExh
eW91dFBvaW50Jik7Ci0KLSAgICB2aXJ0dWFsIGJvb2wgbm9kZUF0RmxvYXRQb2ludChjb25zdCBI
aXRUZXN0UmVxdWVzdCYsIEhpdFRlc3RSZXN1bHQmLCBjb25zdCBGbG9hdFBvaW50JiBwb2ludElu
UGFyZW50LCBIaXRUZXN0QWN0aW9uKTsKLQotICAgIEZsb2F0UmVjdCBjYWxjdWxhdGVNYXJrZXJC
b3VuZHNJZk5lZWRlZCgpOwotICAgIHZvaWQgdXBkYXRlQ2FjaGVkQm91bmRhcmllcygpOwotCi0g
ICAgdm9pZCBzZXR1cFNxdWFyZUNhcFBhdGgoUGF0aComIHVzZVBhdGgsIGludCYgYXBwbHlNb2Rl
KTsKLSAgICBib29sIHNldHVwTm9uU2NhbGluZ1N0cm9rZVBhdGgoUGF0aComIHVzZVBhdGgsIEdy
YXBoaWNzQ29udGV4dFN0YXRlU2F2ZXImKTsKLSAgICBib29sIHNob3VsZFN0cm9rZVplcm9MZW5n
dGhTdWJwYXRoKCkgY29uc3Q7Ci0gICAgRmxvYXRSZWN0IHplcm9MZW5ndGhTdWJwYXRoUmVjdCgp
IGNvbnN0OwotCi1wcml2YXRlOgotICAgIHZpcnR1YWwgQWZmaW5lVHJhbnNmb3JtIGxvY2FsVHJh
bnNmb3JtKCkgY29uc3QgeyByZXR1cm4gbV9sb2NhbFRyYW5zZm9ybTsgfQotICAgIHZvaWQgZmls
bEFuZFN0cm9rZVBhdGgoR3JhcGhpY3NDb250ZXh0Kik7Ci0KLSAgICBib29sIG1fbmVlZHNCb3Vu
ZGFyaWVzVXBkYXRlIDogMTsKLSAgICBib29sIG1fbmVlZHNQYXRoVXBkYXRlIDogMTsKLSAgICBi
b29sIG1fbmVlZHNUcmFuc2Zvcm1VcGRhdGUgOiAxOwotCi0gICAgbXV0YWJsZSBQYXRoIG1fcGF0
aDsKLSAgICBGbG9hdFJlY3QgbV9maWxsQm91bmRpbmdCb3g7Ci0gICAgRmxvYXRSZWN0IG1fc3Ry
b2tlQW5kTWFya2VyQm91bmRpbmdCb3g7Ci0gICAgRmxvYXRSZWN0IG1fcmVwYWludEJvdW5kaW5n
Qm94OwotICAgIFNWR01hcmtlckxheW91dEluZm8gbV9tYXJrZXJMYXlvdXRJbmZvOwotICAgIEFm
ZmluZVRyYW5zZm9ybSBtX2xvY2FsVHJhbnNmb3JtOworICAgIHZvaWQgaW5mbGF0ZVdpdGhNYXJr
ZXJCb3VuZHMoKTsKIH07CiAKLWlubGluZSBSZW5kZXJTVkdQYXRoKiB0b1JlbmRlclNWR1BhdGgo
UmVuZGVyT2JqZWN0KiBvYmplY3QpCi17Ci0gICAgQVNTRVJUKCFvYmplY3QgfHwgb2JqZWN0LT5p
c1NWR1BhdGgoKSk7Ci0gICAgcmV0dXJuIHN0YXRpY19jYXN0PFJlbmRlclNWR1BhdGgqPihvYmpl
Y3QpOwotfQotCi1pbmxpbmUgY29uc3QgUmVuZGVyU1ZHUGF0aCogdG9SZW5kZXJTVkdQYXRoKGNv
bnN0IFJlbmRlck9iamVjdCogb2JqZWN0KQotewotICAgIEFTU0VSVCghb2JqZWN0IHx8IG9iamVj
dC0+aXNTVkdQYXRoKCkpOwotICAgIHJldHVybiBzdGF0aWNfY2FzdDxjb25zdCBSZW5kZXJTVkdQ
YXRoKj4ob2JqZWN0KTsKLX0KLQotLy8gVGhpcyB3aWxsIGNhdGNoIGFueW9uZSBkb2luZyBhbiB1
bm5lY2Vzc2FyeSBjYXN0Lgotdm9pZCB0b1JlbmRlclNWR1BhdGgoY29uc3QgUmVuZGVyU1ZHUGF0
aCopOwotCiB9CiAKICNlbmRpZiAvLyBFTkFCTEUoU1ZHKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZWN0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVjdC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMC4uYTdmNGI3NwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9zdmcvUmVuZGVyU1ZHUmVjdC5jcHAKQEAgLTAsMCArMSwxMjAgQEAKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTEgVW5pdmVyc2l0eSBvZiBTemVnZWQKKyAqIENvcHlyaWdodCAoQykgMjAx
MSBSZW5hdGEgSG9kb3ZhbiAocmVuaUB3ZWJraXQub3JnKQorICogQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFVOSVZFUlNJ
VFkgT0YgU1pFR0VEIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
CisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVU5JVkVSU0lU
WSBPRiBTWkVHRUQgT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VS
RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisKKyNpZiBFTkFCTEUoU1ZHKQorI2luY2x1
ZGUgIlJlbmRlclNWR1JlY3QuaCIKKworI2luY2x1ZGUgIlNWR05hbWVzLmgiCisjaW5jbHVkZSAi
U1ZHUmVjdEVsZW1lbnQuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitSZW5kZXJTVkdSZWN0
OjpSZW5kZXJTVkdSZWN0KFNWR1N0eWxlZFRyYW5zZm9ybWFibGVFbGVtZW50KiBub2RlKQorICAg
IDogUmVuZGVyU1ZHU2hhcGUobm9kZSkKK3sKK30KKworUmVuZGVyU1ZHUmVjdDo6flJlbmRlclNW
R1JlY3QoKQoreworfQorCit2b2lkIFJlbmRlclNWR1JlY3Q6OmNyZWF0ZVNoYXBlKCkKK3sKKyAg
ICAvLyBDbGVhciBtX2JvdW5kaW5nQm94LgorICAgIG1fYm91bmRpbmdCb3ggPSBGbG9hdFJlY3Qo
KTsKKyAgICBTVkdSZWN0RWxlbWVudCogcmVjdCA9IHN0YXRpY19jYXN0PFNWR1JlY3RFbGVtZW50
Kj4obm9kZSgpKTsKKyAgICBBU1NFUlQocmVjdCk7CisgICAgYm9vbCBoYXNSeCA9IHJlY3QtPmhh
c0F0dHJpYnV0ZShTVkdOYW1lczo6cnhBdHRyKTsKKyAgICBib29sIGhhc1J5ID0gcmVjdC0+aGFz
QXR0cmlidXRlKFNWR05hbWVzOjpyeUF0dHIpOworICAgIC8vIEZhbGxiYWNrIHRvIFJlbmRlclNW
R1NoYXBlIGlmIHJlY3QgaGFzIHNwZWNpYWwgZmVhdHVyZXMuCisgICAgaWYgKGhhc1J4IHx8IGhh
c1J5KSB7CisgICAgICAgUmVuZGVyU1ZHU2hhcGU6OmNyZWF0ZVNoYXBlKCk7CisgICAgICAgc2V0
SXNGaWxsRmFsbGJhY2sodHJ1ZSk7CisgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBmbG9hdCB3
aWR0aFZhbHVlID0gcmVjdC0+d2lkdGgoKS52YWx1ZShyZWN0KTsKKyAgICBpZiAod2lkdGhWYWx1
ZSA8PSAwKQorICAgICAgICByZXR1cm47CisKKyAgICBmbG9hdCBoZWlnaHRWYWx1ZSA9IHJlY3Qt
PmhlaWdodCgpLnZhbHVlKHJlY3QpOworICAgIGlmIChoZWlnaHRWYWx1ZSA8PSAwKQorICAgICAg
ICByZXR1cm47CisKKyAgICBmbG9hdCB4VmFsdWUgPSByZWN0LT54KCkudmFsdWUocmVjdCk7Cisg
ICAgZmxvYXQgeVZhbHVlID0gcmVjdC0+eSgpLnZhbHVlKHJlY3QpOworICAgIG1fYm91bmRpbmdC
b3ggPSBGbG9hdFJlY3QoeFZhbHVlLCB5VmFsdWUsIHdpZHRoVmFsdWUsIGhlaWdodFZhbHVlKTsK
KyAgICAvLyBUbyBkZWNpZGUgaWYgdGhlIHN0cm9rZSBjb250YWlucyBhIHBvaW50IHdlIGNyZWF0
ZSB0d28gcmVjdHMgd2hpY2ggcmVwcmVzZW50IHRoZSBpbm5lciBhbmQKKyAgICAvLyB0aGUgb3V0
ZXIgc3Ryb2tlIGJvcmRlcnMuIEEgc3Ryb2tlIGNvbnRhaW5zIHRoZSBwb2ludCwgaWYgdGhlIHBv
aW50IGlzIGJldHdlZW4gdGhlbS4KKyAgICBmbG9hdCBzdHJva2VXaWR0aCA9IHRoaXMtPnN0cm9r
ZVdpZHRoKCk7CisgICAgbV9pbm5lclN0cm9rZVJlY3QgPSBtX2JvdW5kaW5nQm94OworICAgIG1f
b3V0ZXJTdHJva2VSZWN0ID0gbV9ib3VuZGluZ0JveDsKKyAgICBtX2lubmVyU3Ryb2tlUmVjdC5p
bmZsYXRlKC1zdHJva2VXaWR0aCAvIDIpOworICAgIG1fb3V0ZXJTdHJva2VSZWN0LmluZmxhdGUo
c3Ryb2tlV2lkdGggLyAyKTsKK30KKworCitGbG9hdFJlY3QgUmVuZGVyU1ZHUmVjdDo6b2JqZWN0
Qm91bmRpbmdCb3goKSBjb25zdAoreworICAgIGlmIChpc0ZpbGxGYWxsYmFjaygpKQorICAgICAg
ICByZXR1cm4gUmVuZGVyU1ZHU2hhcGU6Om9iamVjdEJvdW5kaW5nQm94KCk7CisgICAgcmV0dXJu
IG1fYm91bmRpbmdCb3g7Cit9CisKK0Zsb2F0UmVjdCBSZW5kZXJTVkdSZWN0OjpzdHJva2VCb3Vu
ZGluZ0JveCgpCit7CisgICAgaWYgKGlzRmlsbEZhbGxiYWNrKCkgJiYgIXN0eWxlKCktPnN2Z1N0
eWxlKCktPnN0cm9rZURhc2hBcnJheSgpLmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJuIFJlbmRl
clNWR1NoYXBlOjpzdHJva2VCb3VuZGluZ0JveCgpOworICAgIHJldHVybiBtX291dGVyU3Ryb2tl
UmVjdDsKK30KKwordm9pZCBSZW5kZXJTVkdSZWN0OjpmaWxsU2hhcGUoR3JhcGhpY3NDb250ZXh0
KiBjb250ZXh0KQoreworICAgICBjb250ZXh0LT5maWxsUmVjdChtX2JvdW5kaW5nQm94KTsKK30K
Kwordm9pZCBSZW5kZXJTVkdSZWN0OjpzdHJva2VTaGFwZShHcmFwaGljc0NvbnRleHQqIGNvbnRl
eHQpCit7CisgICAgY29udGV4dC0+c3Ryb2tlUmVjdChtX2JvdW5kaW5nQm94LCB0aGlzLT5zdHJv
a2VXaWR0aCgpKTsKK30KKworYm9vbCBSZW5kZXJTVkdSZWN0OjpzaGFwZURlcGVuZGVudFN0cm9r
ZUNvbnRhaW5zKGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50KQoreworICAgIHJldHVybiAhbV9pbm5l
clN0cm9rZVJlY3QuY29tcHJpc2VzKHBvaW50KTsKK30KKworYm9vbCBSZW5kZXJTVkdSZWN0Ojpz
aGFwZURlcGVuZGVudEZpbGxDb250YWlucyhjb25zdCBGbG9hdFBvaW50JiBwb2ludCwgY29uc3Qg
V2luZFJ1bGUmIGZpbGxSdWxlKSBjb25zdAoreworICAgIGlmIChpc0ZpbGxGYWxsYmFjaygpKQor
ICAgICAgICByZXR1cm4gUmVuZGVyU1ZHU2hhcGU6OnNoYXBlRGVwZW5kZW50RmlsbENvbnRhaW5z
KHBvaW50LCBmaWxsUnVsZSk7CisgICAgcmV0dXJuIG1fYm91bmRpbmdCb3guY29udGFpbnMocG9p
bnQueCgpLCBwb2ludC55KCkpOworfQorCit9CisKKyNlbmRpZiAvLyBFTkFCTEUoU1ZHKQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZWN0LmggYi9T
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1JlY3QuaApuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwLi40NmQyMGZhCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZWN0LmgKQEAgLTAsMCArMSw2MyBAQAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAxMSBVbml2ZXJzaXR5IG9mIFN6ZWdlZAorICogQ29weXJp
Z2h0IChDKSAyMDExIFJlbmF0YSBIb2RvdmFuIChyZW5pQHdlYmtpdC5vcmcpCisgKiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0
OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgVU5JVkVSU0lUWSBPRiBTWkVHRUQgYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisg
KiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFM
TCBVTklWRVJTSVRZIE9GIFNaRUdFRCBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
CisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisg
KiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgUmVuZGVyU1ZHUmVjdF9oCisjZGVmaW5lIFJl
bmRlclNWR1JlY3RfaAorCisjaWYgRU5BQkxFKFNWRykKKyNpbmNsdWRlICJSZW5kZXJTVkdQYXRo
LmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgUmVuZGVyU1ZHUmVjdCA6IHB1Ymxp
YyBSZW5kZXJTVkdTaGFwZSB7CitwdWJsaWM6CisgICAgZXhwbGljaXQgUmVuZGVyU1ZHUmVjdChT
VkdTdHlsZWRUcmFuc2Zvcm1hYmxlRWxlbWVudCopOworICAgIHZpcnR1YWwgflJlbmRlclNWR1Jl
Y3QoKTsKKworcHJpdmF0ZToKKyAgICB2aXJ0dWFsIGJvb2wgaXNTVkdSZWN0KCkgY29uc3QgeyBy
ZXR1cm4gdHJ1ZTsgfQorICAgIHZpcnR1YWwgY29uc3QgY2hhciogcmVuZGVyTmFtZSgpIGNvbnN0
IHsgcmV0dXJuICJSZW5kZXJTVkdSZWN0IjsgfQorCisgICAgdm9pZCBjcmVhdGVTaGFwZSgpOwor
ICAgIGJvb2wgaXNFbXB0eSgpIGNvbnN0IHsgcmV0dXJuIGhhc1BhdGgoKSA/IFJlbmRlclNWR1No
YXBlOjppc0VtcHR5KCkgOiBtX2JvdW5kaW5nQm94LmlzRW1wdHkoKTsgfTsKKyAgICB2b2lkIGZp
bGxTaGFwZShHcmFwaGljc0NvbnRleHQqKTsKKyAgICBGbG9hdFJlY3Qgb2JqZWN0Qm91bmRpbmdC
b3goKSBjb25zdDsKKyAgICBGbG9hdFJlY3Qgc3Ryb2tlQm91bmRpbmdCb3goKTsKKyAgICB2b2lk
IHN0cm9rZVNoYXBlKEdyYXBoaWNzQ29udGV4dCopOworICAgIGJvb2wgc2hhcGVEZXBlbmRlbnRT
dHJva2VDb250YWlucyhjb25zdCBGbG9hdFBvaW50Jik7CisgICAgYm9vbCBzaGFwZURlcGVuZGVu
dEZpbGxDb250YWlucyhjb25zdCBGbG9hdFBvaW50JiwgY29uc3QgV2luZFJ1bGUmKSBjb25zdDsK
KworcHJpdmF0ZToKKyAgICBGbG9hdFJlY3QgbV9ib3VuZGluZ0JveDsKKyAgICBGbG9hdFJlY3Qg
bV9pbm5lclN0cm9rZVJlY3Q7CisgICAgRmxvYXRSZWN0IG1fb3V0ZXJTdHJva2VSZWN0OworfTsK
KworfQorCisjZW5kaWYgLy8gRU5BQkxFKFNWRykKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJjZS5oIGIvU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJjZS5oCmluZGV4IGE2N2JhNzMuLjJiNDQz
OGUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVz
b3VyY2UuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291
cmNlLmgKQEAgLTIxLDYgKzIxLDcgQEAKICNkZWZpbmUgUmVuZGVyU1ZHUmVzb3VyY2VfaAogCiAj
aWYgRU5BQkxFKFNWRykKKyNpbmNsdWRlICJSZW5kZXJTVkdTaGFwZS5oIgogI2luY2x1ZGUgIlJl
bmRlclN0eWxlQ29uc3RhbnRzLmgiCiAjaW5jbHVkZSAiU1ZHRG9jdW1lbnRFeHRlbnNpb25zLmgi
CiAKQEAgLTYxLDcgKzYyLDcgQEAgcHVibGljOgogICAgIHZpcnR1YWwgdm9pZCByZW1vdmVDbGll
bnRGcm9tQ2FjaGUoUmVuZGVyT2JqZWN0KiwgYm9vbCBtYXJrRm9ySW52YWxpZGF0aW9uID0gdHJ1
ZSkgPSAwOwogCiAgICAgdmlydHVhbCBib29sIGFwcGx5UmVzb3VyY2UoUmVuZGVyT2JqZWN0Kiwg
UmVuZGVyU3R5bGUqLCBHcmFwaGljc0NvbnRleHQqJiwgdW5zaWduZWQgc2hvcnQgcmVzb3VyY2VN
b2RlKSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIHBvc3RBcHBseVJlc291cmNlKFJlbmRlck9iamVj
dCosIEdyYXBoaWNzQ29udGV4dComLCB1bnNpZ25lZCBzaG9ydCwgY29uc3QgUGF0aCopIHsgfQor
ICAgIHZpcnR1YWwgdm9pZCBwb3N0QXBwbHlSZXNvdXJjZShSZW5kZXJTVkdTaGFwZSosIEdyYXBo
aWNzQ29udGV4dComLCB1bnNpZ25lZCBzaG9ydCwgY29uc3QgUGF0aCopIHsgfQogICAgIHZpcnR1
YWwgRmxvYXRSZWN0IHJlc291cmNlQm91bmRpbmdCb3goUmVuZGVyT2JqZWN0KikgPSAwOwogCiAg
ICAgdmlydHVhbCBSZW5kZXJTVkdSZXNvdXJjZVR5cGUgcmVzb3VyY2VUeXBlKCkgY29uc3QgPSAw
OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNv
dXJjZUNsaXBwZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdS
ZXNvdXJjZUNsaXBwZXIuY3BwCmluZGV4IDIzOGMwOTYuLjFkODIxMjEgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VDbGlwcGVyLmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291cmNlQ2xpcHBl
ci5jcHAKQEAgLTI0Miw3ICsyNDIsNyBAQCBib29sIFJlbmRlclNWR1Jlc291cmNlQ2xpcHBlcjo6
ZHJhd0NvbnRlbnRJbnRvTWFza0ltYWdlKENsaXBwZXJEYXRhKiBjbGlwcGVyRGF0YQogICAgICAg
ICB9CiAKICAgICAgICAgLy8gT25seSBzaGFwZXMsIHBhdGhzIGFuZCB0ZXh0cyBhcmUgYWxsb3dl
ZCBmb3IgY2xpcHBpbmcuCi0gICAgICAgIGlmICghcmVuZGVyZXItPmlzU1ZHUGF0aCgpICYmICFy
ZW5kZXJlci0+aXNTVkdUZXh0KCkpCisgICAgICAgIGlmICghcmVuZGVyZXItPmlzU1ZHU2hhcGUo
KSAmJiAhcmVuZGVyZXItPmlzU1ZHVGV4dCgpKQogICAgICAgICAgICAgY29udGludWU7CiAKICAg
ICAgICAgLy8gU2F2ZSB0aGUgb2xkIFJlbmRlclN0eWxlIG9mIHRoZSBjdXJyZW50IG9iamVjdCBm
b3IgcmVzdG9yaW5nIGFmdGVyIGRyYXdpbmcKQEAgLTI4NCw3ICsyODQsNyBAQCB2b2lkIFJlbmRl
clNWR1Jlc291cmNlQ2xpcHBlcjo6Y2FsY3VsYXRlQ2xpcENvbnRlbnRSZXBhaW50UmVjdCgpCiAg
ICAgICAgIFJlbmRlck9iamVjdCogcmVuZGVyZXIgPSBjaGlsZE5vZGUtPnJlbmRlcmVyKCk7CiAg
ICAgICAgIGlmICghY2hpbGROb2RlLT5pc1NWR0VsZW1lbnQoKSB8fCAhc3RhdGljX2Nhc3Q8U1ZH
RWxlbWVudCo+KGNoaWxkTm9kZSktPmlzU3R5bGVkKCkgfHwgIXJlbmRlcmVyKQogICAgICAgICAg
ICAgY29udGludWU7Ci0gICAgICAgIGlmICghcmVuZGVyZXItPmlzU1ZHUGF0aCgpICYmICFyZW5k
ZXJlci0+aXNTVkdUZXh0KCkgJiYgIXJlbmRlcmVyLT5pc1NWR1NoYWRvd1RyZWVSb290Q29udGFp
bmVyKCkpCisgICAgICAgIGlmICghcmVuZGVyZXItPmlzU1ZHU2hhcGUoKSAmJiAhcmVuZGVyZXIt
PmlzU1ZHVGV4dCgpICYmICFyZW5kZXJlci0+aXNTVkdTaGFkb3dUcmVlUm9vdENvbnRhaW5lcigp
KQogICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgIFJlbmRlclN0eWxlKiBzdHlsZSA9IHJl
bmRlcmVyLT5zdHlsZSgpOwogICAgICAgICBpZiAoIXN0eWxlIHx8IHN0eWxlLT5kaXNwbGF5KCkg
PT0gTk9ORSB8fCBzdHlsZS0+dmlzaWJpbGl0eSgpICE9IFZJU0lCTEUpCkBAIC0zMTAsNyArMzEw
LDcgQEAgYm9vbCBSZW5kZXJTVkdSZXNvdXJjZUNsaXBwZXI6OmhpdFRlc3RDbGlwQ29udGVudChj
b25zdCBGbG9hdFJlY3QmIG9iamVjdEJvdW5kaW4KICAgICAgICAgUmVuZGVyT2JqZWN0KiByZW5k
ZXJlciA9IGNoaWxkTm9kZS0+cmVuZGVyZXIoKTsKICAgICAgICAgaWYgKCFjaGlsZE5vZGUtPmlz
U1ZHRWxlbWVudCgpIHx8ICFzdGF0aWNfY2FzdDxTVkdFbGVtZW50Kj4oY2hpbGROb2RlKS0+aXNT
dHlsZWQoKSB8fCAhcmVuZGVyZXIpCiAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgaWYg
KCFyZW5kZXJlci0+aXNTVkdQYXRoKCkgJiYgIXJlbmRlcmVyLT5pc1NWR1RleHQoKSAmJiAhcmVu
ZGVyZXItPmlzU1ZHU2hhZG93VHJlZVJvb3RDb250YWluZXIoKSkKKyAgICAgICAgaWYgKCFyZW5k
ZXJlci0+aXNTVkdTaGFwZSgpICYmICFyZW5kZXJlci0+aXNTVkdUZXh0KCkgJiYgIXJlbmRlcmVy
LT5pc1NWR1NoYWRvd1RyZWVSb290Q29udGFpbmVyKCkpCiAgICAgICAgICAgICBjb250aW51ZTsK
ICAgICAgICAgSW50UG9pbnQgaGl0UG9pbnQ7CiAgICAgICAgIEhpdFRlc3RSZXN1bHQgcmVzdWx0
KGhpdFBvaW50KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVu
ZGVyU1ZHUmVzb3VyY2VDb250YWluZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2
Zy9SZW5kZXJTVkdSZXNvdXJjZUNvbnRhaW5lci5jcHAKaW5kZXggNzRkNWQ2OS4uYjc0YWQ2YiAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJj
ZUNvbnRhaW5lci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJT
VkdSZXNvdXJjZUNvbnRhaW5lci5jcHAKQEAgLTE4MCw3ICsxODAsNyBAQCB2b2lkIFJlbmRlclNW
R1Jlc291cmNlQ29udGFpbmVyOjpyZWdpc3RlclJlc291cmNlKCkKIC8vIEZJWE1FOiBUaGlzIGRv
ZXMgbm90IGJlbG9uZyBoZXJlLgogQWZmaW5lVHJhbnNmb3JtIFJlbmRlclNWR1Jlc291cmNlQ29u
dGFpbmVyOjp0cmFuc2Zvcm1Pbk5vblNjYWxpbmdTdHJva2UoUmVuZGVyT2JqZWN0KiBvYmplY3Qs
IGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgcmVzb3VyY2VUcmFuc2Zvcm0pCiB7Ci0gICAgaWYgKCFv
YmplY3QtPmlzU1ZHUGF0aCgpKQorICAgIGlmICghb2JqZWN0LT5pc1NWR1NoYXBlKCkpCiAgICAg
ICAgIHJldHVybiByZXNvdXJjZVRyYW5zZm9ybTsKIAogICAgIFNWR1N0eWxlZFRyYW5zZm9ybWFi
bGVFbGVtZW50KiBlbGVtZW50ID0gc3RhdGljX2Nhc3Q8U1ZHU3R5bGVkVHJhbnNmb3JtYWJsZUVs
ZW1lbnQqPihvYmplY3QtPm5vZGUoKSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291cmNlRmlsdGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VGaWx0ZXIuY3BwCmluZGV4IDY4OTM1ZGEuLjA5
ZjkxNjEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZH
UmVzb3VyY2VGaWx0ZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVu
ZGVyU1ZHUmVzb3VyY2VGaWx0ZXIuY3BwCkBAIC0yNTksOSArMjU5LDkgQEAgYm9vbCBSZW5kZXJT
VkdSZXNvdXJjZUZpbHRlcjo6YXBwbHlSZXNvdXJjZShSZW5kZXJPYmplY3QqIG9iamVjdCwgUmVu
ZGVyU3R5bGUqLAogICAgIHJldHVybiB0cnVlOwogfQogCi12b2lkIFJlbmRlclNWR1Jlc291cmNl
RmlsdGVyOjpwb3N0QXBwbHlSZXNvdXJjZShSZW5kZXJPYmplY3QqIG9iamVjdCwgR3JhcGhpY3ND
b250ZXh0KiYgY29udGV4dCwgdW5zaWduZWQgc2hvcnQgcmVzb3VyY2VNb2RlLCBjb25zdCBQYXRo
KikKK3ZvaWQgUmVuZGVyU1ZHUmVzb3VyY2VGaWx0ZXI6OnBvc3RBcHBseVJlc291cmNlKFJlbmRl
clNWR1NoYXBlKiBzaGFwZSwgR3JhcGhpY3NDb250ZXh0KiYgY29udGV4dCwgdW5zaWduZWQgc2hv
cnQgcmVzb3VyY2VNb2RlLCBjb25zdCBQYXRoKikKIHsKLSAgICBBU1NFUlQob2JqZWN0KTsKKyAg
ICBBU1NFUlQoc2hhcGUpOwogICAgIEFTU0VSVChjb250ZXh0KTsKICNpZm5kZWYgTkRFQlVHCiAg
ICAgQVNTRVJUKHJlc291cmNlTW9kZSA9PSBBcHBseVRvRGVmYXVsdE1vZGUpOwpAQCAtMjY5LDYg
KzI2OSw3IEBAIHZvaWQgUmVuZGVyU1ZHUmVzb3VyY2VGaWx0ZXI6OnBvc3RBcHBseVJlc291cmNl
KFJlbmRlck9iamVjdCogb2JqZWN0LCBHcmFwaGljc0NvCiAgICAgVU5VU0VEX1BBUkFNKHJlc291
cmNlTW9kZSk7CiAjZW5kaWYKIAorICAgIFJlbmRlck9iamVjdCogb2JqZWN0ID0gc3RhdGljX2Nh
c3Q8UmVuZGVyT2JqZWN0Kj4oc2hhcGUpOwogICAgIEZpbHRlckRhdGEqIGZpbHRlckRhdGEgPSBt
X2ZpbHRlci5nZXQob2JqZWN0KTsKICAgICBpZiAoIWZpbHRlckRhdGEpCiAgICAgICAgIHJldHVy
bjsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVz
b3VyY2VGaWx0ZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVz
b3VyY2VGaWx0ZXIuaAppbmRleCA1YTViMDkyLi40OWFhMTc3IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291cmNlRmlsdGVyLmgKKysrIGIvU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJjZUZpbHRlci5oCkBAIC03
Miw3ICs3Miw3IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIHZvaWQgcmVtb3ZlQ2xpZW50RnJvbUNh
Y2hlKFJlbmRlck9iamVjdCosIGJvb2wgbWFya0ZvckludmFsaWRhdGlvbiA9IHRydWUpOwogCiAg
ICAgdmlydHVhbCBib29sIGFwcGx5UmVzb3VyY2UoUmVuZGVyT2JqZWN0KiwgUmVuZGVyU3R5bGUq
LCBHcmFwaGljc0NvbnRleHQqJiwgdW5zaWduZWQgc2hvcnQgcmVzb3VyY2VNb2RlKTsKLSAgICB2
aXJ0dWFsIHZvaWQgcG9zdEFwcGx5UmVzb3VyY2UoUmVuZGVyT2JqZWN0KiwgR3JhcGhpY3NDb250
ZXh0KiYsIHVuc2lnbmVkIHNob3J0IHJlc291cmNlTW9kZSwgY29uc3QgUGF0aCopOworICAgIHZp
cnR1YWwgdm9pZCBwb3N0QXBwbHlSZXNvdXJjZShSZW5kZXJTVkdTaGFwZSosIEdyYXBoaWNzQ29u
dGV4dComLCB1bnNpZ25lZCBzaG9ydCByZXNvdXJjZU1vZGUsIGNvbnN0IFBhdGgqKTsKIAogICAg
IHZpcnR1YWwgRmxvYXRSZWN0IHJlc291cmNlQm91bmRpbmdCb3goUmVuZGVyT2JqZWN0Kik7CiAK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVzb3Vy
Y2VHcmFkaWVudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jl
c291cmNlR3JhZGllbnQuY3BwCmluZGV4IDFhYWI5MzUuLjNhMzY1ZDBjIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291cmNlR3JhZGllbnQuY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VHcmFk
aWVudC5jcHAKQEAgLTI3LDYgKzI3LDcgQEAKIAogI2luY2x1ZGUgIkdyYWRpZW50QXR0cmlidXRl
cy5oIgogI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgorI2luY2x1ZGUgIlJlbmRlclNWR1No
YXBlLmgiCiAjaW5jbHVkZSAiUmVuZGVyU1ZHVGV4dC5oIgogI2luY2x1ZGUgIlNWR0ltYWdlQnVm
ZmVyVG9vbHMuaCIKICNpbmNsdWRlICJTVkdSZW5kZXJTdXBwb3J0LmgiCkBAIC0yMzEsMTIgKzIz
MiwxMyBAQCBib29sIFJlbmRlclNWR1Jlc291cmNlR3JhZGllbnQ6OmFwcGx5UmVzb3VyY2UoUmVu
ZGVyT2JqZWN0KiBvYmplY3QsIFJlbmRlclN0eWxlKgogICAgIHJldHVybiB0cnVlOwogfQogCi12
b2lkIFJlbmRlclNWR1Jlc291cmNlR3JhZGllbnQ6OnBvc3RBcHBseVJlc291cmNlKFJlbmRlck9i
amVjdCogb2JqZWN0LCBHcmFwaGljc0NvbnRleHQqJiBjb250ZXh0LCB1bnNpZ25lZCBzaG9ydCBy
ZXNvdXJjZU1vZGUsIGNvbnN0IFBhdGgqIHBhdGgpCit2b2lkIFJlbmRlclNWR1Jlc291cmNlR3Jh
ZGllbnQ6OnBvc3RBcHBseVJlc291cmNlKFJlbmRlclNWR1NoYXBlKiBzaGFwZSwgR3JhcGhpY3ND
b250ZXh0KiYgY29udGV4dCwgdW5zaWduZWQgc2hvcnQgcmVzb3VyY2VNb2RlLCBjb25zdCBQYXRo
KiBwYXRoKQogewogICAgIEFTU0VSVChjb250ZXh0KTsKICAgICBBU1NFUlQocmVzb3VyY2VNb2Rl
ICE9IEFwcGx5VG9EZWZhdWx0TW9kZSk7CiAKICAgICBpZiAocmVzb3VyY2VNb2RlICYgQXBwbHlU
b1RleHRNb2RlKSB7CisgICAgICAgIFJlbmRlck9iamVjdCogb2JqZWN0ID0gc3RhdGljX2Nhc3Q8
UmVuZGVyT2JqZWN0Kj4oc2hhcGUpOwogI2lmIFVTRShDRykKICAgICAgICAgLy8gQ0cgcmVxdWly
ZXMgc3BlY2lhbCBoYW5kbGluZyBmb3IgZ3JhZGllbnQgb24gdGV4dAogICAgICAgICBpZiAobV9z
YXZlZENvbnRleHQgJiYgbV9ncmFkaWVudC5jb250YWlucyhvYmplY3QpKSB7CkBAIC0yNTksMTEg
KzI2MSwxMSBAQCB2b2lkIFJlbmRlclNWR1Jlc291cmNlR3JhZGllbnQ6OnBvc3RBcHBseVJlc291
cmNlKFJlbmRlck9iamVjdCogb2JqZWN0LCBHcmFwaGljcwogI2Vsc2UKICAgICAgICAgVU5VU0VE
X1BBUkFNKG9iamVjdCk7CiAjZW5kaWYKLSAgICB9IGVsc2UgaWYgKHBhdGgpIHsKKyAgICB9IGVs
c2UgewogICAgICAgICBpZiAocmVzb3VyY2VNb2RlICYgQXBwbHlUb0ZpbGxNb2RlKQotICAgICAg
ICAgICAgY29udGV4dC0+ZmlsbFBhdGgoKnBhdGgpOworICAgICAgICAgICAgcGF0aCA/IGNvbnRl
eHQtPmZpbGxQYXRoKCpwYXRoKSA6IHNoYXBlLT5maWxsU2hhcGUoY29udGV4dCk7CiAgICAgICAg
IGVsc2UgaWYgKHJlc291cmNlTW9kZSAmIEFwcGx5VG9TdHJva2VNb2RlKQotICAgICAgICAgICAg
Y29udGV4dC0+c3Ryb2tlUGF0aCgqcGF0aCk7CisgICAgICAgICAgICBwYXRoID8gY29udGV4dC0+
c3Ryb2tlUGF0aCgqcGF0aCkgOiBzaGFwZS0+c3Ryb2tlU2hhcGUoY29udGV4dCk7CiAgICAgfQog
CiAgICAgY29udGV4dC0+cmVzdG9yZSgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJjZUdyYWRpZW50LmggYi9Tb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291cmNlR3JhZGllbnQuaAppbmRleCBkZjQ5MmUyLi4z
NjY0YzNiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNW
R1Jlc291cmNlR3JhZGllbnQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1Jl
bmRlclNWR1Jlc291cmNlR3JhZGllbnQuaApAQCAtNTAsNyArNTAsNyBAQCBwdWJsaWM6CiAgICAg
dmlydHVhbCB2b2lkIHJlbW92ZUNsaWVudEZyb21DYWNoZShSZW5kZXJPYmplY3QqLCBib29sIG1h
cmtGb3JJbnZhbGlkYXRpb24gPSB0cnVlKTsKIAogICAgIHZpcnR1YWwgYm9vbCBhcHBseVJlc291
cmNlKFJlbmRlck9iamVjdCosIFJlbmRlclN0eWxlKiwgR3JhcGhpY3NDb250ZXh0KiYsIHVuc2ln
bmVkIHNob3J0IHJlc291cmNlTW9kZSk7Ci0gICAgdmlydHVhbCB2b2lkIHBvc3RBcHBseVJlc291
cmNlKFJlbmRlck9iamVjdCosIEdyYXBoaWNzQ29udGV4dComLCB1bnNpZ25lZCBzaG9ydCByZXNv
dXJjZU1vZGUsIGNvbnN0IFBhdGgqKTsKKyAgICB2aXJ0dWFsIHZvaWQgcG9zdEFwcGx5UmVzb3Vy
Y2UoUmVuZGVyU1ZHU2hhcGUqLCBHcmFwaGljc0NvbnRleHQqJiwgdW5zaWduZWQgc2hvcnQgcmVz
b3VyY2VNb2RlLCBjb25zdCBQYXRoKik7CiAgICAgdmlydHVhbCBGbG9hdFJlY3QgcmVzb3VyY2VC
b3VuZGluZ0JveChSZW5kZXJPYmplY3QqKSB7IHJldHVybiBGbG9hdFJlY3QoKTsgfQogCiBwcm90
ZWN0ZWQ6CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNW
R1Jlc291cmNlUGF0dGVybi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRl
clNWR1Jlc291cmNlUGF0dGVybi5jcHAKaW5kZXggYjA4MjQ4MS4uOTg0YTM0NyAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJjZVBhdHRlcm4u
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VQ
YXR0ZXJuLmNwcApAQCAtMTgzLDE2ICsxODMsMTYgQEAgYm9vbCBSZW5kZXJTVkdSZXNvdXJjZVBh
dHRlcm46OmFwcGx5UmVzb3VyY2UoUmVuZGVyT2JqZWN0KiBvYmplY3QsIFJlbmRlclN0eWxlKgog
ICAgIHJldHVybiB0cnVlOwogfQogCi12b2lkIFJlbmRlclNWR1Jlc291cmNlUGF0dGVybjo6cG9z
dEFwcGx5UmVzb3VyY2UoUmVuZGVyT2JqZWN0KiwgR3JhcGhpY3NDb250ZXh0KiYgY29udGV4dCwg
dW5zaWduZWQgc2hvcnQgcmVzb3VyY2VNb2RlLCBjb25zdCBQYXRoKiBwYXRoKQordm9pZCBSZW5k
ZXJTVkdSZXNvdXJjZVBhdHRlcm46OnBvc3RBcHBseVJlc291cmNlKFJlbmRlclNWR1NoYXBlKiBz
aGFwZSwgR3JhcGhpY3NDb250ZXh0KiYgY29udGV4dCwgdW5zaWduZWQgc2hvcnQgcmVzb3VyY2VN
b2RlLCBjb25zdCBQYXRoKiBwYXRoKQogewogICAgIEFTU0VSVChjb250ZXh0KTsKICAgICBBU1NF
UlQocmVzb3VyY2VNb2RlICE9IEFwcGx5VG9EZWZhdWx0TW9kZSk7CiAKLSAgICBpZiAocGF0aCAm
JiAhKHJlc291cmNlTW9kZSAmIEFwcGx5VG9UZXh0TW9kZSkpIHsKKyAgICBpZiAoLypwYXRoICYm
ICovIShyZXNvdXJjZU1vZGUgJiBBcHBseVRvVGV4dE1vZGUpKSB7CiAgICAgICAgIGlmIChyZXNv
dXJjZU1vZGUgJiBBcHBseVRvRmlsbE1vZGUpCi0gICAgICAgICAgICBjb250ZXh0LT5maWxsUGF0
aCgqcGF0aCk7CisgICAgICAgICAgICAgcGF0aCA/IGNvbnRleHQtPmZpbGxQYXRoKCpwYXRoKSA6
IHNoYXBlLT5maWxsU2hhcGUoY29udGV4dCk7CiAgICAgICAgIGVsc2UgaWYgKHJlc291cmNlTW9k
ZSAmIEFwcGx5VG9TdHJva2VNb2RlKQotICAgICAgICAgICAgY29udGV4dC0+c3Ryb2tlUGF0aCgq
cGF0aCk7CisgICAgICAgICAgICAgcGF0aCA/IGNvbnRleHQtPnN0cm9rZVBhdGgoKnBhdGgpIDog
c2hhcGUtPnN0cm9rZVNoYXBlKGNvbnRleHQpOwogICAgIH0KIAogICAgIGNvbnRleHQtPnJlc3Rv
cmUoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZH
UmVzb3VyY2VQYXR0ZXJuLmggYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNW
R1Jlc291cmNlUGF0dGVybi5oCmluZGV4IGE2OTdjNzEuLmMyMjA3OTAgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VQYXR0ZXJuLmgKKysr
IGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJjZVBhdHRlcm4u
aApAQCAtNTIsNyArNTIsNyBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCB2b2lkIHJlbW92ZUNsaWVu
dEZyb21DYWNoZShSZW5kZXJPYmplY3QqLCBib29sIG1hcmtGb3JJbnZhbGlkYXRpb24gPSB0cnVl
KTsKIAogICAgIHZpcnR1YWwgYm9vbCBhcHBseVJlc291cmNlKFJlbmRlck9iamVjdCosIFJlbmRl
clN0eWxlKiwgR3JhcGhpY3NDb250ZXh0KiYsIHVuc2lnbmVkIHNob3J0IHJlc291cmNlTW9kZSk7
Ci0gICAgdmlydHVhbCB2b2lkIHBvc3RBcHBseVJlc291cmNlKFJlbmRlck9iamVjdCosIEdyYXBo
aWNzQ29udGV4dComLCB1bnNpZ25lZCBzaG9ydCByZXNvdXJjZU1vZGUsIGNvbnN0IFBhdGgqKTsK
KyAgICB2aXJ0dWFsIHZvaWQgcG9zdEFwcGx5UmVzb3VyY2UoUmVuZGVyU1ZHU2hhcGUqLCBHcmFw
aGljc0NvbnRleHQqJiwgdW5zaWduZWQgc2hvcnQgcmVzb3VyY2VNb2RlLCBjb25zdCBQYXRoKik7
CiAgICAgdmlydHVhbCBGbG9hdFJlY3QgcmVzb3VyY2VCb3VuZGluZ0JveChSZW5kZXJPYmplY3Qq
KSB7IHJldHVybiBGbG9hdFJlY3QoKTsgfQogCiAgICAgdmlydHVhbCBSZW5kZXJTVkdSZXNvdXJj
ZVR5cGUgcmVzb3VyY2VUeXBlKCkgY29uc3QgeyByZXR1cm4gc19yZXNvdXJjZVR5cGU7IH0KZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VT
b2xpZENvbG9yLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVz
b3VyY2VTb2xpZENvbG9yLmNwcAppbmRleCA1YmUyYWY2Li4yNDVkZDhjIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291cmNlU29saWRDb2xvci5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJjZVNv
bGlkQ29sb3IuY3BwCkBAIC0yMyw2ICsyMyw3IEBACiAjaW5jbHVkZSAiUmVuZGVyU1ZHUmVzb3Vy
Y2VTb2xpZENvbG9yLmgiCiAKICNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKKyNpbmNsdWRl
ICJSZW5kZXJTVkdTaGFwZS5oIgogI2luY2x1ZGUgIlJlbmRlclN0eWxlLmgiCiAjaW5jbHVkZSAi
U1ZHUmVuZGVyU3VwcG9ydC5oIgogCkBAIC03NCwxNiArNzUsMTYgQEAgYm9vbCBSZW5kZXJTVkdS
ZXNvdXJjZVNvbGlkQ29sb3I6OmFwcGx5UmVzb3VyY2UoUmVuZGVyT2JqZWN0KiBvYmplY3QsIFJl
bmRlclN0eWwKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotdm9pZCBSZW5kZXJTVkdSZXNvdXJjZVNv
bGlkQ29sb3I6OnBvc3RBcHBseVJlc291cmNlKFJlbmRlck9iamVjdCosIEdyYXBoaWNzQ29udGV4
dComIGNvbnRleHQsIHVuc2lnbmVkIHNob3J0IHJlc291cmNlTW9kZSwgY29uc3QgUGF0aCogcGF0
aCkKK3ZvaWQgUmVuZGVyU1ZHUmVzb3VyY2VTb2xpZENvbG9yOjpwb3N0QXBwbHlSZXNvdXJjZShS
ZW5kZXJTVkdTaGFwZSogc2hhcGUsIEdyYXBoaWNzQ29udGV4dComIGNvbnRleHQsIHVuc2lnbmVk
IHNob3J0IHJlc291cmNlTW9kZSwgY29uc3QgUGF0aCogcGF0aCkKIHsKICAgICBBU1NFUlQoY29u
dGV4dCk7CiAgICAgQVNTRVJUKHJlc291cmNlTW9kZSAhPSBBcHBseVRvRGVmYXVsdE1vZGUpOwog
Ci0gICAgaWYgKHBhdGggJiYgIShyZXNvdXJjZU1vZGUgJiBBcHBseVRvVGV4dE1vZGUpKSB7Cisg
ICAgaWYgKCEocmVzb3VyY2VNb2RlICYgQXBwbHlUb1RleHRNb2RlKSkgewogICAgICAgICBpZiAo
cmVzb3VyY2VNb2RlICYgQXBwbHlUb0ZpbGxNb2RlKQotICAgICAgICAgICAgY29udGV4dC0+Zmls
bFBhdGgoKnBhdGgpOworICAgICAgICAgICAgcGF0aCA/IGNvbnRleHQtPmZpbGxQYXRoKCpwYXRo
KSA6IHNoYXBlLT5maWxsU2hhcGUoY29udGV4dCk7CiAgICAgICAgIGVsc2UgaWYgKHJlc291cmNl
TW9kZSAmIEFwcGx5VG9TdHJva2VNb2RlKQotICAgICAgICAgICAgY29udGV4dC0+c3Ryb2tlUGF0
aCgqcGF0aCk7CisgICAgICAgICAgICBwYXRoID8gY29udGV4dC0+c3Ryb2tlUGF0aCgqcGF0aCkg
OiBzaGFwZS0+c3Ryb2tlU2hhcGUoY29udGV4dCk7CiAgICAgfQogfQogCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291cmNlU29saWRDb2xvci5o
IGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJjZVNvbGlkQ29s
b3IuaAppbmRleCAwMmNlYjMxLi41ZGFmNTc0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291cmNlU29saWRDb2xvci5oCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VTb2xpZENvbG9yLmgKQEAgLTM2
LDcgKzM2LDcgQEAgcHVibGljOgogICAgIHZpcnR1YWwgdm9pZCByZW1vdmVDbGllbnRGcm9tQ2Fj
aGUoUmVuZGVyT2JqZWN0KiwgYm9vbCA9IHRydWUpIHsgfQogCiAgICAgdmlydHVhbCBib29sIGFw
cGx5UmVzb3VyY2UoUmVuZGVyT2JqZWN0KiwgUmVuZGVyU3R5bGUqLCBHcmFwaGljc0NvbnRleHQq
JiwgdW5zaWduZWQgc2hvcnQgcmVzb3VyY2VNb2RlKTsKLSAgICB2aXJ0dWFsIHZvaWQgcG9zdEFw
cGx5UmVzb3VyY2UoUmVuZGVyT2JqZWN0KiwgR3JhcGhpY3NDb250ZXh0KiYsIHVuc2lnbmVkIHNo
b3J0IHJlc291cmNlTW9kZSwgY29uc3QgUGF0aCopOworICAgIHZpcnR1YWwgdm9pZCBwb3N0QXBw
bHlSZXNvdXJjZShSZW5kZXJTVkdTaGFwZSosIEdyYXBoaWNzQ29udGV4dComLCB1bnNpZ25lZCBz
aG9ydCByZXNvdXJjZU1vZGUsIGNvbnN0IFBhdGgqKTsKICAgICB2aXJ0dWFsIEZsb2F0UmVjdCBy
ZXNvdXJjZUJvdW5kaW5nQm94KFJlbmRlck9iamVjdCopIHsgcmV0dXJuIEZsb2F0UmVjdCgpOyB9
CiAKICAgICB2aXJ0dWFsIFJlbmRlclNWR1Jlc291cmNlVHlwZSByZXNvdXJjZVR5cGUoKSBjb25z
dCB7IHJldHVybiBzX3Jlc291cmNlVHlwZTsgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdTaGFwZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvc3ZnL1JlbmRlclNWR1NoYXBlLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw
MDAwLi40NGE1MDNiCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L3N2Zy9SZW5kZXJTVkdTaGFwZS5jcHAKQEAgLTAsMCArMSw0MzggQEAKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMDQsIDIwMDUsIDIwMDcgTmlrb2xhcyBaaW1tZXJtYW5uIDx6aW1tZXJtYW5uQGtk
ZS5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUsIDIwMDggUm9iIEJ1aXMgPGJ1aXNA
a2RlLm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAwNSwgMjAwNyBFcmljIFNlaWRlbCA8ZXJpY0B3
ZWJraXQub3JnPgorICogQ29weXJpZ2h0IChDKSAyMDA5IEdvb2dsZSwgSW5jLgorICogQ29weXJp
Z2h0IChDKSAyMDA5IERpcmsgU2NodWx6ZSA8a3JpdEB3ZWJraXQub3JnPgorICogQ29weXJpZ2h0
IChDKSBSZXNlYXJjaCBJbiBNb3Rpb24gTGltaXRlZCAyMDEwLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICogQ29weXJpZ2h0IChDKSAyMDA5IEplZmYgU2NoaWxsZXIgPGNvZGVkcmVhZEBnbWFpbC5j
b20+CisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgUmVuYXRhIEhvZG92YW4gPHJlbmlAd2Via2l0Lm9y
Zz4KKyAqIENvcHlyaWdodCAoQykgMjAxMSBVbml2ZXJzaXR5IG9mIFN6ZWdlZAorICoKKyAqIFRo
aXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQv
b3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVy
YWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBG
b3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlv
dXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlz
dHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRI
T1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisg
KiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBT
ZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRl
dGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05V
IExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJh
cnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBG
cmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGgg
Rmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaW5jbHVkZSAi
Y29uZmlnLmgiCisKKyNpZiBFTkFCTEUoU1ZHKQorI2luY2x1ZGUgIlJlbmRlclNWR1NoYXBlLmgi
CisKKyNpbmNsdWRlICJGbG9hdFBvaW50LmgiCisjaW5jbHVkZSAiRmxvYXRRdWFkLmgiCisjaW5j
bHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCisjaW5jbHVkZSAiSGl0VGVzdFJlcXVlc3QuaCIKKyNp
bmNsdWRlICJMYXlvdXRSZXBhaW50ZXIuaCIKKyNpbmNsdWRlICJQb2ludGVyRXZlbnRzSGl0UnVs
ZXMuaCIKKyNpbmNsdWRlICJSZW5kZXJTVkdDb250YWluZXIuaCIKKyNpbmNsdWRlICJSZW5kZXJT
VkdSZXNvdXJjZU1hcmtlci5oIgorI2luY2x1ZGUgIlJlbmRlclNWR1Jlc291cmNlU29saWRDb2xv
ci5oIgorI2luY2x1ZGUgIlNWR1BhdGhFbGVtZW50LmgiCisjaW5jbHVkZSAiU1ZHUmVuZGVyU3Vw
cG9ydC5oIgorI2luY2x1ZGUgIlNWR1Jlc291cmNlcy5oIgorI2luY2x1ZGUgIlNWR1N0eWxlZFRy
YW5zZm9ybWFibGVFbGVtZW50LmgiCisjaW5jbHVkZSAiU1ZHVHJhbnNmb3JtTGlzdC5oIgorI2lu
Y2x1ZGUgIlNWR1VSSVJlZmVyZW5jZS5oIgorI2luY2x1ZGUgIlN0cm9rZVN0eWxlQXBwbGllci5o
IgorI2luY2x1ZGUgPHd0Zi9NYXRoRXh0cmFzLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKwor
UmVuZGVyU1ZHU2hhcGU6OlJlbmRlclNWR1NoYXBlKFNWR1N0eWxlZFRyYW5zZm9ybWFibGVFbGVt
ZW50KiBub2RlKQorICAgIDogUmVuZGVyU1ZHTW9kZWxPYmplY3Qobm9kZSkKKyAgICAsIG1fbmVl
ZHNCb3VuZGFyaWVzVXBkYXRlKGZhbHNlKSAvLyBEZWZhdWx0IGlzIGZhbHNlLCB0aGUgY2FjaGVk
IHJlY3RzIGFyZSBlbXB0eSBmcm9tIHRoZSBiZWdpbm5pbmcuCisgICAgLCBtX25lZWRzU2hhcGVV
cGRhdGUodHJ1ZSkgLy8gRGVmYXVsdCBpcyB0cnVlLCBzbyB3ZSBncmFiIGEgUGF0aCBvYmplY3Qg
b25jZSBmcm9tIFNWR1N0eWxlZFRyYW5zZm9ybWFibGVFbGVtZW50LgorICAgICwgbV9uZWVkc1Ry
YW5zZm9ybVVwZGF0ZSh0cnVlKSAvLyBEZWZhdWx0IGlzIHRydWUsIHNvIHdlIGdyYWIgYSBBZmZp
bmVUcmFuc2Zvcm0gb2JqZWN0IG9uY2UgZnJvbSBTVkdTdHlsZWRUcmFuc2Zvcm1hYmxlRWxlbWVu
dC4KKyAgICAsIG1fZmlsbEZhbGxiYWNrKGZhbHNlKQoreworfQorCitSZW5kZXJTVkdTaGFwZTo6
flJlbmRlclNWR1NoYXBlKCkKK3sKK30KKwordm9pZCBSZW5kZXJTVkdTaGFwZTo6Y3JlYXRlU2hh
cGUoKQoreworICAgIG1fcGF0aCA9IGFkb3B0UHRyKG5ldyBQYXRoKTsKKyAgICBBU1NFUlQoaXNF
bXB0eSgpKTsKKworICAgIFNWR1BhdGhFbGVtZW50KiBlbGVtZW50ID0gc3RhdGljX2Nhc3Q8U1ZH
UGF0aEVsZW1lbnQqPihub2RlKCkpOworICAgIGVsZW1lbnQtPnRvUGF0aERhdGEocGF0aCgpKTsK
K30KKworYm9vbCBSZW5kZXJTVkdTaGFwZTo6aXNFbXB0eSgpIGNvbnN0Cit7CisgICAgcmV0dXJu
IG1fcGF0aC0+aXNFbXB0eSgpOworfQorCit2b2lkIFJlbmRlclNWR1NoYXBlOjpmaWxsU2hhcGUo
R3JhcGhpY3NDb250ZXh0KiBjb250ZXh0KQoreworICAgIGNvbnRleHQtPmZpbGxQYXRoKHBhdGgo
KSk7Cit9CisKK0Zsb2F0UmVjdCBSZW5kZXJTVkdTaGFwZTo6b2JqZWN0Qm91bmRpbmdCb3goKSBj
b25zdAoreworICAgIHJldHVybiBtX3BhdGgtPmJvdW5kaW5nUmVjdCgpOworfQorCitGbG9hdFJl
Y3QgUmVuZGVyU1ZHU2hhcGU6OnN0cm9rZUJvdW5kaW5nQm94KCkKK3sKKyAgICBCb3VuZGluZ1Jl
Y3RTdHJva2VTdHlsZUFwcGxpZXIgc3Ryb2tlU3R5bGUodGhpcywgc3R5bGUoKSk7CisgICAgcmV0
dXJuIG1fcGF0aC0+c3Ryb2tlQm91bmRpbmdSZWN0KCZzdHJva2VTdHlsZSk7Cit9CisKK3ZvaWQg
UmVuZGVyU1ZHU2hhcGU6OnN0cm9rZVNoYXBlKEdyYXBoaWNzQ29udGV4dCogY29udGV4dCkKK3sK
KyAgICBjb250ZXh0LT5zdHJva2VQYXRoKHBhdGgoKSk7Cit9CisKK2Jvb2wgUmVuZGVyU1ZHU2hh
cGU6OnNoYXBlRGVwZW5kZW50U3Ryb2tlQ29udGFpbnMoY29uc3QgRmxvYXRQb2ludCYgcG9pbnQp
Cit7CisgICAgQm91bmRpbmdSZWN0U3Ryb2tlU3R5bGVBcHBsaWVyIGFwcGxpZXIodGhpcywgc3R5
bGUoKSk7CisgICAgcmV0dXJuIG1fcGF0aC0+c3Ryb2tlQ29udGFpbnMoJmFwcGxpZXIsIHBvaW50
KTsKK30KKworYm9vbCBSZW5kZXJTVkdTaGFwZTo6c2hhcGVEZXBlbmRlbnRGaWxsQ29udGFpbnMo
Y29uc3QgRmxvYXRQb2ludCYgcG9pbnQsIGNvbnN0IFdpbmRSdWxlJiBmaWxsUnVsZSkgY29uc3QK
K3sKKyAgICByZXR1cm4gbV9wYXRoLT5jb250YWlucyhwb2ludCwgZmlsbFJ1bGUpOworfQorCiti
b29sIFJlbmRlclNWR1NoYXBlOjpmaWxsQ29udGFpbnMoY29uc3QgRmxvYXRQb2ludCYgcG9pbnQs
IGJvb2wgcmVxdWlyZXNGaWxsLCBXaW5kUnVsZSBmaWxsUnVsZSkKK3sKKyAgICBpZiAoIW1fZmls
bEJvdW5kaW5nQm94LmNvbnRhaW5zKHBvaW50KSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisg
ICAgQ29sb3IgZmFsbGJhY2tDb2xvcjsKKyAgICBpZiAocmVxdWlyZXNGaWxsICYmICFSZW5kZXJT
VkdSZXNvdXJjZTo6ZmlsbFBhaW50aW5nUmVzb3VyY2UodGhpcywgc3R5bGUoKSwgZmFsbGJhY2tD
b2xvcikpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIHJldHVybiBzaGFwZURlcGVuZGVu
dEZpbGxDb250YWlucyhwb2ludCwgZmlsbFJ1bGUpOworfQorCitib29sIFJlbmRlclNWR1NoYXBl
OjpzdHJva2VDb250YWlucyhjb25zdCBGbG9hdFBvaW50JiBwb2ludCwgYm9vbCByZXF1aXJlc1N0
cm9rZSkKK3sKKyAgICBpZiAoIW1fc3Ryb2tlQW5kTWFya2VyQm91bmRpbmdCb3guY29udGFpbnMo
cG9pbnQpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBDb2xvciBmYWxsYmFja0NvbG9y
OworICAgIGlmIChyZXF1aXJlc1N0cm9rZSAmJiAhUmVuZGVyU1ZHUmVzb3VyY2U6OnN0cm9rZVBh
aW50aW5nUmVzb3VyY2UodGhpcywgc3R5bGUoKSwgZmFsbGJhY2tDb2xvcikpCisgICAgICAgIHJl
dHVybiBmYWxzZTsKKworICAgIGlmIChzaG91bGRTdHJva2VaZXJvTGVuZ3RoU3VicGF0aCgpKQor
ICAgICAgICByZXR1cm4gemVyb0xlbmd0aFN1YnBhdGhSZWN0KCkuY29udGFpbnMocG9pbnQpOwor
CisgICAgY29uc3QgU1ZHUmVuZGVyU3R5bGUqIHN2Z1N0eWxlID0gc3R5bGUoKS0+c3ZnU3R5bGUo
KTsKKyAgICBpZiAoIXN2Z1N0eWxlLT5zdHJva2VEYXNoQXJyYXkoKS5pc0VtcHR5KCkgfHwgc3Zn
U3R5bGUtPnN0cm9rZU1pdGVyTGltaXQoKSAhPSBzdmdTdHlsZS0+aW5pdGlhbFN0cm9rZU1pdGVy
TGltaXQoKQorICAgICAgICB8fCBzdmdTdHlsZS0+am9pblN0eWxlKCkgIT0gc3ZnU3R5bGUtPmlu
aXRpYWxKb2luU3R5bGUoKSB8fCBzdmdTdHlsZS0+Y2FwU3R5bGUoKSAhPSBzdmdTdHlsZS0+aW5p
dGlhbENhcFN0eWxlKCkpIHsKKyAgICAgICAgaWYgKCFtX3BhdGguZ2V0KCkpCisgICAgICAgICAg
ICBSZW5kZXJTVkdTaGFwZTo6Y3JlYXRlU2hhcGUoKTsKKyAgICAgICAgcmV0dXJuIFJlbmRlclNW
R1NoYXBlOjpzaGFwZURlcGVuZGVudFN0cm9rZUNvbnRhaW5zKHBvaW50KTsKKyAgICB9CisgICAg
cmV0dXJuIHNoYXBlRGVwZW5kZW50U3Ryb2tlQ29udGFpbnMocG9pbnQpOworfQorCit2b2lkIFJl
bmRlclNWR1NoYXBlOjpsYXlvdXQoKQoreworICAgIExheW91dFJlcGFpbnRlciByZXBhaW50ZXIo
KnRoaXMsIGNoZWNrRm9yUmVwYWludER1cmluZ0xheW91dCgpICYmIHNlbGZOZWVkc0xheW91dCgp
KTsKKyAgICBTVkdTdHlsZWRUcmFuc2Zvcm1hYmxlRWxlbWVudCogZWxlbWVudCA9IHN0YXRpY19j
YXN0PFNWR1N0eWxlZFRyYW5zZm9ybWFibGVFbGVtZW50Kj4obm9kZSgpKTsKKworICAgIGJvb2wg
dXBkYXRlQ2FjaGVkQm91bmRhcmllc0luUGFyZW50cyA9IGZhbHNlOworCisgICAgYm9vbCBuZWVk
c1NoYXBlVXBkYXRlID0gbV9uZWVkc1NoYXBlVXBkYXRlOworICAgIGlmIChuZWVkc1NoYXBlVXBk
YXRlKSB7CisgICAgICAgIGNyZWF0ZVNoYXBlKCk7CisgICAgICAgIG1fbmVlZHNTaGFwZVVwZGF0
ZSA9IGZhbHNlOworICAgICAgICB1cGRhdGVDYWNoZWRCb3VuZGFyaWVzSW5QYXJlbnRzID0gdHJ1
ZTsKKyAgICB9CisKKyAgICBpZiAobV9uZWVkc1RyYW5zZm9ybVVwZGF0ZSkgeworICAgICAgICBt
X2xvY2FsVHJhbnNmb3JtID0gZWxlbWVudC0+YW5pbWF0ZWRMb2NhbFRyYW5zZm9ybSgpOworICAg
ICAgICBtX25lZWRzVHJhbnNmb3JtVXBkYXRlID0gZmFsc2U7CisgICAgICAgIHVwZGF0ZUNhY2hl
ZEJvdW5kYXJpZXNJblBhcmVudHMgPSB0cnVlOworICAgIH0KKworICAgIGlmIChtX25lZWRzQm91
bmRhcmllc1VwZGF0ZSkgeworICAgICAgICB1cGRhdGVDYWNoZWRCb3VuZGFyaWVzSW5QYXJlbnRz
ID0gdHJ1ZTsKKyAgICAgICAgc2V0SXNGaWxsRmFsbGJhY2soZmFsc2UpOworICAgICAgICBjcmVh
dGVTaGFwZSgpOworICAgIH0KKworICAgIC8vIEludmFsaWRhdGUgYWxsIHJlc291cmNlcyBvZiB0
aGlzIGNsaWVudCBpZiBvdXIgbGF5b3V0IGNoYW5nZWQuCisgICAgaWYgKG1fZXZlckhhZExheW91
dCAmJiBzZWxmTmVlZHNMYXlvdXQoKSkgeworICAgICAgICBTVkdSZXNvdXJjZXNDYWNoZTo6Y2xp
ZW50TGF5b3V0Q2hhbmdlZCh0aGlzKTsKKyAgICAgICAgbV9tYXJrZXJMYXlvdXRJbmZvLmNsZWFy
KCk7CisgICAgfQorCisgICAgLy8gQXQgdGhpcyBwb2ludCBMYXlvdXRSZXBhaW50ZXIgYWxyZWFk
eSBncmFiYmVkIHRoZSBvbGQgYm91bmRzLAorICAgIC8vIHJlY2FsY3VsYXRlIHRoZW0gbm93IHNv
IHJlcGFpbnRBZnRlckxheW91dCgpIHVzZXMgdGhlIG5ldyBib3VuZHMuCisgICAgaWYgKG5lZWRz
U2hhcGVVcGRhdGUgfHwgbV9uZWVkc0JvdW5kYXJpZXNVcGRhdGUpIHsKKyAgICAgICAgdXBkYXRl
Q2FjaGVkQm91bmRhcmllcygpOworICAgICAgICBtX25lZWRzQm91bmRhcmllc1VwZGF0ZSA9IGZh
bHNlOworICAgIH0KKworICAgIC8vIElmIG91ciBib3VuZHMgY2hhbmdlZCwgbm90aWZ5IHRoZSBw
YXJlbnRzLgorICAgIGlmICh1cGRhdGVDYWNoZWRCb3VuZGFyaWVzSW5QYXJlbnRzKQorICAgICAg
ICBSZW5kZXJTVkdNb2RlbE9iamVjdDo6c2V0TmVlZHNCb3VuZGFyaWVzVXBkYXRlKCk7CisKKyAg
ICByZXBhaW50ZXIucmVwYWludEFmdGVyTGF5b3V0KCk7CisgICAgc2V0TmVlZHNMYXlvdXQoZmFs
c2UpOworfQorCitib29sIFJlbmRlclNWR1NoYXBlOjpzaG91bGRTdHJva2VaZXJvTGVuZ3RoU3Vi
cGF0aCgpIGNvbnN0Cit7CisgICAgLy8gU3BlYygxMS40KTogQW55IHplcm8gbGVuZ3RoIHN1YnBh
dGggc2hhbGwgbm90IGJlIHN0cm9rZWQgaWYgdGhlIOKAmHN0cm9rZS1saW5lY2Fw4oCZIHByb3Bl
cnR5IGhhcyBhIHZhbHVlIG9mIGJ1dHQKKyAgICAvLyBidXQgc2hhbGwgYmUgc3Ryb2tlZCBpZiB0
aGUg4oCYc3Ryb2tlLWxpbmVjYXDigJkgcHJvcGVydHkgaGFzIGEgdmFsdWUgb2Ygcm91bmQgb3Ig
c3F1YXJlCisgICAgcmV0dXJuIHN0eWxlKCktPnN2Z1N0eWxlKCktPmhhc1N0cm9rZSgpICYmIHN0
eWxlKCktPnN2Z1N0eWxlKCktPmNhcFN0eWxlKCkgIT0gQnV0dENhcCAmJiAhbV9maWxsQm91bmRp
bmdCb3gud2lkdGgoKSAmJiAhbV9maWxsQm91bmRpbmdCb3guaGVpZ2h0KCk7Cit9CisKK0Zsb2F0
UmVjdCBSZW5kZXJTVkdTaGFwZTo6emVyb0xlbmd0aFN1YnBhdGhSZWN0KCkgY29uc3QKK3sKKyAg
ICBmbG9hdCBzdHJva2VXaWR0aCA9IHRoaXMtPnN0cm9rZVdpZHRoKCk7CisgICAgcmV0dXJuIEZs
b2F0UmVjdChtX2ZpbGxCb3VuZGluZ0JveC54KCkgLSBzdHJva2VXaWR0aCAvIDIsIG1fZmlsbEJv
dW5kaW5nQm94LnkoKSAtIHN0cm9rZVdpZHRoIC8gMiwgc3Ryb2tlV2lkdGgsIHN0cm9rZVdpZHRo
KTsKK30KKwordm9pZCBSZW5kZXJTVkdTaGFwZTo6c2V0dXBTcXVhcmVDYXBQYXRoKFBhdGgqJiB1
c2VQYXRoLCBpbnQmIGFwcGx5TW9kZSkKK3sKKyAgICAvLyBTcGVjKDExLjQpOiBBbnkgemVybyBs
ZW5ndGggc3VicGF0aCBzaGFsbCBub3QgYmUgc3Ryb2tlZCBpZiB0aGUg4oCYc3Ryb2tlLWxpbmVj
YXDigJkgcHJvcGVydHkgaGFzIGEgdmFsdWUgb2YgYnV0dAorICAgIC8vIGJ1dCBzaGFsbCBiZSBz
dHJva2VkIGlmIHRoZSDigJhzdHJva2UtbGluZWNhcOKAmSBwcm9wZXJ0eSBoYXMgYSB2YWx1ZSBv
ZiByb3VuZCBvciBzcXVhcmUKKyAgICBERUZJTkVfU1RBVElDX0xPQ0FMKFBhdGgsIHRlbXBQYXRo
LCAoKSk7CisKKyAgICBhcHBseU1vZGUgPSBBcHBseVRvRmlsbE1vZGU7CisgICAgdXNlUGF0aCA9
ICZ0ZW1wUGF0aDsKKyAgICB1c2VQYXRoLT5jbGVhcigpOworICAgIGlmIChzdHlsZSgpLT5zdmdT
dHlsZSgpLT5jYXBTdHlsZSgpID09IFNxdWFyZUNhcCkKKyAgICAgICAgdXNlUGF0aC0+YWRkUmVj
dCh6ZXJvTGVuZ3RoU3VicGF0aFJlY3QoKSk7CisgICAgZWxzZQorICAgICAgICB1c2VQYXRoLT5h
ZGRFbGxpcHNlKHplcm9MZW5ndGhTdWJwYXRoUmVjdCgpKTsKK30KKworYm9vbCBSZW5kZXJTVkdT
aGFwZTo6c2V0dXBOb25TY2FsaW5nU3Ryb2tlUGF0aChQYXRoKiYgdXNlUGF0aCwgR3JhcGhpY3ND
b250ZXh0U3RhdGVTYXZlciYgc3RhdGVTYXZlcikKK3sKKyAgICBERUZJTkVfU1RBVElDX0xPQ0FM
KFBhdGgsIHRlbXBQYXRoLCAoKSk7CisKKyAgICBTVkdTdHlsZWRUcmFuc2Zvcm1hYmxlRWxlbWVu
dCogZWxlbWVudCA9IHN0YXRpY19jYXN0PFNWR1N0eWxlZFRyYW5zZm9ybWFibGVFbGVtZW50Kj4o
bm9kZSgpKTsKKyAgICBBZmZpbmVUcmFuc2Zvcm0gbm9uU2NhbGluZ1N0cm9rZVRyYW5zZm9ybSA9
IGVsZW1lbnQtPmdldFNjcmVlbkNUTShTVkdMb2NhdGFibGU6OkRpc2FsbG93U3R5bGVVcGRhdGUp
OworICAgIGlmICghbm9uU2NhbGluZ1N0cm9rZVRyYW5zZm9ybS5pc0ludmVydGlibGUoKSkKKyAg
ICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgdGVtcFBhdGggPSAqbV9wYXRoOworICAgIHVzZVBh
dGggPSAmdGVtcFBhdGg7CisgICAgdGVtcFBhdGgudHJhbnNmb3JtKG5vblNjYWxpbmdTdHJva2VU
cmFuc2Zvcm0pOworCisgICAgc3RhdGVTYXZlci5zYXZlKCk7CisgICAgc3RhdGVTYXZlci5jb250
ZXh0KCktPmNvbmNhdENUTShub25TY2FsaW5nU3Ryb2tlVHJhbnNmb3JtLmludmVyc2UoKSk7Cisg
ICAgcmV0dXJuIHRydWU7Cit9CisKK3ZvaWQgUmVuZGVyU1ZHU2hhcGU6OmZpbGxBbmRTdHJva2VQ
YXRoKEdyYXBoaWNzQ29udGV4dCogY29udGV4dCkKK3sKKyAgICBSZW5kZXJTdHlsZSogc3R5bGUg
PSB0aGlzLT5zdHlsZSgpOworCisgICAgQ29sb3IgZmFsbGJhY2tDb2xvcjsKKyAgICBQYXRoKiB1
c2VQYXRoID0gaXNGaWxsRmFsbGJhY2soKSA/IG1fcGF0aC5nZXQoKSA6IDA7CisgICAgaWYgKFJl
bmRlclNWR1Jlc291cmNlKiBmaWxsUGFpbnRpbmdSZXNvdXJjZSA9IFJlbmRlclNWR1Jlc291cmNl
OjpmaWxsUGFpbnRpbmdSZXNvdXJjZSh0aGlzLCBzdHlsZSwgZmFsbGJhY2tDb2xvcikpIHsKKyAg
ICAgICAgaWYgKGZpbGxQYWludGluZ1Jlc291cmNlLT5hcHBseVJlc291cmNlKHRoaXMsIHN0eWxl
LCBjb250ZXh0LCBBcHBseVRvRmlsbE1vZGUpKQorICAgICAgICAgICAgZmlsbFBhaW50aW5nUmVz
b3VyY2UtPnBvc3RBcHBseVJlc291cmNlKHRoaXMsIGNvbnRleHQsIEFwcGx5VG9GaWxsTW9kZSwg
dXNlUGF0aCk7CisgICAgICAgIGVsc2UgaWYgKGZhbGxiYWNrQ29sb3IuaXNWYWxpZCgpKSB7Cisg
ICAgICAgICAgICBSZW5kZXJTVkdSZXNvdXJjZVNvbGlkQ29sb3IqIGZhbGxiYWNrUmVzb3VyY2Ug
PSBSZW5kZXJTVkdSZXNvdXJjZTo6c2hhcmVkU29saWRQYWludGluZ1Jlc291cmNlKCk7CisgICAg
ICAgICAgICBmYWxsYmFja1Jlc291cmNlLT5zZXRDb2xvcihmYWxsYmFja0NvbG9yKTsKKyAgICAg
ICAgICAgIGlmIChmYWxsYmFja1Jlc291cmNlLT5hcHBseVJlc291cmNlKHRoaXMsIHN0eWxlLCBj
b250ZXh0LCBBcHBseVRvRmlsbE1vZGUpKQorICAgICAgICAgICAgICAgIGZhbGxiYWNrUmVzb3Vy
Y2UtPnBvc3RBcHBseVJlc291cmNlKHRoaXMsIGNvbnRleHQsIEFwcGx5VG9GaWxsTW9kZSwgdXNl
UGF0aCk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBmYWxsYmFja0NvbG9yID0gQ29sb3IoKTsK
KyAgICBSZW5kZXJTVkdSZXNvdXJjZSogc3Ryb2tlUGFpbnRpbmdSZXNvdXJjZSA9IFJlbmRlclNW
R1Jlc291cmNlOjpzdHJva2VQYWludGluZ1Jlc291cmNlKHRoaXMsIHN0eWxlLCBmYWxsYmFja0Nv
bG9yKTsKKyAgICBpZiAoIXN0cm9rZVBhaW50aW5nUmVzb3VyY2UpCisgICAgICAgIHJldHVybjsK
KworICAgIHVzZVBhdGggPSBtX3BhdGguZ2V0KCk7CisgICAgaW50IGFwcGx5TW9kZSA9IEFwcGx5
VG9TdHJva2VNb2RlOworCisgICAgYm9vbCBub25TY2FsaW5nU3Ryb2tlID0gc3R5bGUtPnN2Z1N0
eWxlKCktPnZlY3RvckVmZmVjdCgpID09IFZFX05PTl9TQ0FMSU5HX1NUUk9LRTsKKworICAgIEdy
YXBoaWNzQ29udGV4dFN0YXRlU2F2ZXIgc3RhdGVTYXZlcigqY29udGV4dCwgZmFsc2UpOworCisg
ICAgLy8gU3BlYygxMS40KTogQW55IHplcm8gbGVuZ3RoIHN1YnBhdGggc2hhbGwgbm90IGJlIHN0
cm9rZWQgaWYgdGhlIOKAmHN0cm9rZS1saW5lY2Fw4oCZIHByb3BlcnR5IGhhcyBhIHZhbHVlIG9m
IGJ1dHQKKyAgICAvLyBidXQgc2hhbGwgYmUgc3Ryb2tlZCBpZiB0aGUg4oCYc3Ryb2tlLWxpbmVj
YXDigJkgcHJvcGVydHkgaGFzIGEgdmFsdWUgb2Ygcm91bmQgb3Igc3F1YXJlCisgICAgLy8gRklY
TUU6IHRoaXMgZG9lcyBub3Qgd29yayBmb3IgemVyby1sZW5ndGggc3VicGF0aHMsIG9ubHkgd2hl
biB0b3RhbCBwYXRoIGlzIHplcm8tbGVuZ3RoCisgICAgaWYgKHNob3VsZFN0cm9rZVplcm9MZW5n
dGhTdWJwYXRoKCkpIHsKKyAgICAgICAgUmVuZGVyU1ZHU2hhcGU6OmNyZWF0ZVNoYXBlKCk7Cisg
ICAgICAgIHVzZVBhdGggPSBtX3BhdGguZ2V0KCk7CisgICAgICAgIHNldHVwU3F1YXJlQ2FwUGF0
aCh1c2VQYXRoLCBhcHBseU1vZGUpOworICAgIH0gZWxzZSBpZiAobm9uU2NhbGluZ1N0cm9rZSkg
eworICAgICAgICBSZW5kZXJTVkdTaGFwZTo6Y3JlYXRlU2hhcGUoKTsKKyAgICAgICAgdXNlUGF0
aCA9IG1fcGF0aC5nZXQoKTsKKyAgICAgICAgaWYgKCFzZXR1cE5vblNjYWxpbmdTdHJva2VQYXRo
KHVzZVBhdGgsIHN0YXRlU2F2ZXIpKQorICAgICAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBp
ZiAoc3Ryb2tlUGFpbnRpbmdSZXNvdXJjZS0+YXBwbHlSZXNvdXJjZSh0aGlzLCBzdHlsZSwgY29u
dGV4dCwgYXBwbHlNb2RlKSkgeworICAgICAgICBzdHJva2VQYWludGluZ1Jlc291cmNlLT5wb3N0
QXBwbHlSZXNvdXJjZSh0aGlzLCBjb250ZXh0LCBhcHBseU1vZGUsIHVzZVBhdGgpOworICAgICAg
ICByZXR1cm47CisgICAgfQorICAgIGlmICghZmFsbGJhY2tDb2xvci5pc1ZhbGlkKCkpCisgICAg
ICAgIHJldHVybjsKKyAgICBSZW5kZXJTVkdSZXNvdXJjZVNvbGlkQ29sb3IqIGZhbGxiYWNrUmVz
b3VyY2UgPSBSZW5kZXJTVkdSZXNvdXJjZTo6c2hhcmVkU29saWRQYWludGluZ1Jlc291cmNlKCk7
CisgICAgZmFsbGJhY2tSZXNvdXJjZS0+c2V0Q29sb3IoZmFsbGJhY2tDb2xvcik7CisgICAgaWYg
KGZhbGxiYWNrUmVzb3VyY2UtPmFwcGx5UmVzb3VyY2UodGhpcywgc3R5bGUsIGNvbnRleHQsIGFw
cGx5TW9kZSkpCisgICAgICAgIGZhbGxiYWNrUmVzb3VyY2UtPnBvc3RBcHBseVJlc291cmNlKHRo
aXMsIGNvbnRleHQsIGFwcGx5TW9kZSwgdXNlUGF0aCk7Cit9CisKK3ZvaWQgUmVuZGVyU1ZHU2hh
cGU6OnBhaW50KFBhaW50SW5mbyYgcGFpbnRJbmZvLCBjb25zdCBJbnRQb2ludCYpCit7CisgICAg
aWYgKHBhaW50SW5mby5jb250ZXh0LT5wYWludGluZ0Rpc2FibGVkKCkgfHwgc3R5bGUoKS0+dmlz
aWJpbGl0eSgpID09IEhJRERFTiB8fCBpc0VtcHR5KCkpCisgICAgICAgIHJldHVybjsKKyAgICBG
bG9hdFJlY3QgYm91bmRpbmdCb3ggPSByZXBhaW50UmVjdEluTG9jYWxDb29yZGluYXRlcygpOwor
ICAgIGlmICghU1ZHUmVuZGVyU3VwcG9ydDo6cGFpbnRJbmZvSW50ZXJzZWN0c1JlcGFpbnRSZWN0
KGJvdW5kaW5nQm94LCBtX2xvY2FsVHJhbnNmb3JtLCBwYWludEluZm8pKQorICAgICAgICByZXR1
cm47CisgICAgUGFpbnRJbmZvIGNoaWxkUGFpbnRJbmZvKHBhaW50SW5mbyk7CisgICAgYm9vbCBk
cmF3c091dGxpbmUgPSBzdHlsZSgpLT5vdXRsaW5lV2lkdGgoKSAmJiAoY2hpbGRQYWludEluZm8u
cGhhc2UgPT0gUGFpbnRQaGFzZU91dGxpbmUgfHwgY2hpbGRQYWludEluZm8ucGhhc2UgPT0gUGFp
bnRQaGFzZVNlbGZPdXRsaW5lKTsKKyAgICBpZiAoZHJhd3NPdXRsaW5lIHx8IGNoaWxkUGFpbnRJ
bmZvLnBoYXNlID09IFBhaW50UGhhc2VGb3JlZ3JvdW5kKSB7CisgICAgICAgIEdyYXBoaWNzQ29u
dGV4dFN0YXRlU2F2ZXIgc3RhdGVTYXZlcigqY2hpbGRQYWludEluZm8uY29udGV4dCk7CisgICAg
ICAgIGNoaWxkUGFpbnRJbmZvLmFwcGx5VHJhbnNmb3JtKG1fbG9jYWxUcmFuc2Zvcm0pOworCisg
ICAgICAgIGlmIChjaGlsZFBhaW50SW5mby5waGFzZSA9PSBQYWludFBoYXNlRm9yZWdyb3VuZCkg
eworICAgICAgICAgICAgUGFpbnRJbmZvIHNhdmVkSW5mbyhjaGlsZFBhaW50SW5mbyk7CisKKyAg
ICAgICAgICAgIGlmIChTVkdSZW5kZXJTdXBwb3J0OjpwcmVwYXJlVG9SZW5kZXJTVkdDb250ZW50
KHRoaXMsIGNoaWxkUGFpbnRJbmZvKSkgeworICAgICAgICAgICAgICAgIGNvbnN0IFNWR1JlbmRl
clN0eWxlKiBzdmdTdHlsZSA9IHN0eWxlKCktPnN2Z1N0eWxlKCk7CisgICAgICAgICAgICAgICAg
aWYgKHN2Z1N0eWxlLT5zaGFwZVJlbmRlcmluZygpID09IFNSX0NSSVNQRURHRVMpCisgICAgICAg
ICAgICAgICAgICAgIGNoaWxkUGFpbnRJbmZvLmNvbnRleHQtPnNldFNob3VsZEFudGlhbGlhcyhm
YWxzZSk7CisKKyAgICAgICAgICAgICAgICBmaWxsQW5kU3Ryb2tlUGF0aChjaGlsZFBhaW50SW5m
by5jb250ZXh0KTsKKworICAgICAgICAgICAgICAgIGlmIChzdmdTdHlsZS0+aGFzTWFya2Vycygp
KQorICAgICAgICAgICAgICAgICAgICBtX21hcmtlckxheW91dEluZm8uZHJhd01hcmtlcnMoY2hp
bGRQYWludEluZm8pOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBTVkdSZW5kZXJTdXBw
b3J0OjpmaW5pc2hSZW5kZXJTVkdDb250ZW50KHRoaXMsIGNoaWxkUGFpbnRJbmZvLCBzYXZlZElu
Zm8uY29udGV4dCk7CisgICAgICAgIH0KKworICAgICAgICBpZiAoZHJhd3NPdXRsaW5lKQorICAg
ICAgICAgICAgcGFpbnRPdXRsaW5lKGNoaWxkUGFpbnRJbmZvLmNvbnRleHQsIEludFJlY3QoYm91
bmRpbmdCb3gpKTsKKyAgICB9Cit9CisKKy8vIFRoaXMgbWV0aG9kIGlzIGNhbGxlZCBmcm9tIGlu
c2lkZSBwYWludE91dGxpbmUoKSBzaW5jZSB3ZSBjYWxsIHBhaW50T3V0bGluZSgpCisvLyB3aGls
ZSB0cmFuc2Zvcm1lZCB0byBvdXIgY29vcmQgc3lzdGVtLCByZXR1cm4gbG9jYWwgY29vcmRzCit2
b2lkIFJlbmRlclNWR1NoYXBlOjphZGRGb2N1c1JpbmdSZWN0cyhWZWN0b3I8TGF5b3V0UmVjdD4m
IHJlY3RzLCBjb25zdCBMYXlvdXRQb2ludCYpCit7CisgICAgTGF5b3V0UmVjdCByZWN0ID0gZW5j
bG9zaW5nTGF5b3V0UmVjdChyZXBhaW50UmVjdEluTG9jYWxDb29yZGluYXRlcygpKTsKKyAgICBp
ZiAoIXJlY3QuaXNFbXB0eSgpKQorICAgICAgICByZWN0cy5hcHBlbmQocmVjdCk7Cit9CisKK2Jv
b2wgUmVuZGVyU1ZHU2hhcGU6Om5vZGVBdEZsb2F0UG9pbnQoY29uc3QgSGl0VGVzdFJlcXVlc3Qm
IHJlcXVlc3QsIEhpdFRlc3RSZXN1bHQmIHJlc3VsdCwgY29uc3QgRmxvYXRQb2ludCYgcG9pbnRJ
blBhcmVudCwgSGl0VGVzdEFjdGlvbiBoaXRUZXN0QWN0aW9uKQoreworICAgIC8vIFdlIG9ubHkg
ZHJhdyBpbiB0aGUgZm9yZ3JvdW5kIHBoYXNlLCBzbyB3ZSBvbmx5IGhpdC10ZXN0IHRoZW4uCisg
ICAgaWYgKGhpdFRlc3RBY3Rpb24gIT0gSGl0VGVzdEZvcmVncm91bmQpCisgICAgICAgIHJldHVy
biBmYWxzZTsKKworICAgIEZsb2F0UG9pbnQgbG9jYWxQb2ludCA9IG1fbG9jYWxUcmFuc2Zvcm0u
aW52ZXJzZSgpLm1hcFBvaW50KHBvaW50SW5QYXJlbnQpOworCisgICAgaWYgKCFTVkdSZW5kZXJT
dXBwb3J0Ojpwb2ludEluQ2xpcHBpbmdBcmVhKHRoaXMsIGxvY2FsUG9pbnQpKQorICAgICAgICBy
ZXR1cm4gZmFsc2U7CisKKyAgICBQb2ludGVyRXZlbnRzSGl0UnVsZXMgaGl0UnVsZXMoUG9pbnRl
ckV2ZW50c0hpdFJ1bGVzOjpTVkdfUEFUSF9ISVRURVNUSU5HLCByZXF1ZXN0LCBzdHlsZSgpLT5w
b2ludGVyRXZlbnRzKCkpOworICAgIGJvb2wgaXNWaXNpYmxlID0gKHN0eWxlKCktPnZpc2liaWxp
dHkoKSA9PSBWSVNJQkxFKTsKKyAgICBpZiAoaXNWaXNpYmxlIHx8ICFoaXRSdWxlcy5yZXF1aXJl
VmlzaWJsZSkgeworICAgICAgICBjb25zdCBTVkdSZW5kZXJTdHlsZSogc3ZnU3R5bGUgPSBzdHls
ZSgpLT5zdmdTdHlsZSgpOworICAgICAgICBXaW5kUnVsZSBmaWxsUnVsZSA9IHN2Z1N0eWxlLT5m
aWxsUnVsZSgpOworICAgICAgICBpZiAocmVxdWVzdC5zdmdDbGlwQ29udGVudCgpKQorICAgICAg
ICAgICAgZmlsbFJ1bGUgPSBzdmdTdHlsZS0+Y2xpcFJ1bGUoKTsKKyAgICAgICAgaWYgKChoaXRS
dWxlcy5jYW5IaXRTdHJva2UgJiYgKHN2Z1N0eWxlLT5oYXNTdHJva2UoKSB8fCAhaGl0UnVsZXMu
cmVxdWlyZVN0cm9rZSkgJiYgc3Ryb2tlQ29udGFpbnMobG9jYWxQb2ludCwgaGl0UnVsZXMucmVx
dWlyZVN0cm9rZSkpCisgICAgICAgICAgICB8fCAoaGl0UnVsZXMuY2FuSGl0RmlsbCAmJiAoc3Zn
U3R5bGUtPmhhc0ZpbGwoKSB8fCAhaGl0UnVsZXMucmVxdWlyZUZpbGwpICYmIGZpbGxDb250YWlu
cyhsb2NhbFBvaW50LCBoaXRSdWxlcy5yZXF1aXJlRmlsbCwgZmlsbFJ1bGUpKSkgeworICAgICAg
ICAgICAgdXBkYXRlSGl0VGVzdFJlc3VsdChyZXN1bHQsIHJvdW5kZWRMYXlvdXRQb2ludChsb2Nh
bFBvaW50KSk7CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQorICAgIH0KKyAg
ICByZXR1cm4gZmFsc2U7Cit9CisKK0Zsb2F0UmVjdCBSZW5kZXJTVkdTaGFwZTo6Y2FsY3VsYXRl
TWFya2VyQm91bmRzSWZOZWVkZWQoKQoreworICAgIFNWR0VsZW1lbnQqIHN2Z0VsZW1lbnQgPSBz
dGF0aWNfY2FzdDxTVkdFbGVtZW50Kj4obm9kZSgpKTsKKyAgICBBU1NFUlQoc3ZnRWxlbWVudCAm
JiBzdmdFbGVtZW50LT5kb2N1bWVudCgpKTsKKyAgICBpZiAoIXN2Z0VsZW1lbnQtPmlzU3R5bGVk
KCkpCisgICAgICAgIHJldHVybiBGbG9hdFJlY3QoKTsKKworICAgIFNWR1N0eWxlZEVsZW1lbnQq
IHN0eWxlZEVsZW1lbnQgPSBzdGF0aWNfY2FzdDxTVkdTdHlsZWRFbGVtZW50Kj4oc3ZnRWxlbWVu
dCk7CisgICAgaWYgKCFzdHlsZWRFbGVtZW50LT5zdXBwb3J0c01hcmtlcnMoKSkKKyAgICAgICAg
cmV0dXJuIEZsb2F0UmVjdCgpOworCisgICAgQVNTRVJUKHN0eWxlKCktPnN2Z1N0eWxlKCktPmhh
c01hcmtlcnMoKSk7CisKKyAgICBTVkdSZXNvdXJjZXMqIHJlc291cmNlcyA9IFNWR1Jlc291cmNl
c0NhY2hlOjpjYWNoZWRSZXNvdXJjZXNGb3JSZW5kZXJPYmplY3QodGhpcyk7CisgICAgaWYgKCFy
ZXNvdXJjZXMpCisgICAgICAgIHJldHVybiBGbG9hdFJlY3QoKTsKKworICAgIFJlbmRlclNWR1Jl
c291cmNlTWFya2VyKiBtYXJrZXJTdGFydCA9IHJlc291cmNlcy0+bWFya2VyU3RhcnQoKTsKKyAg
ICBSZW5kZXJTVkdSZXNvdXJjZU1hcmtlciogbWFya2VyTWlkID0gcmVzb3VyY2VzLT5tYXJrZXJN
aWQoKTsKKyAgICBSZW5kZXJTVkdSZXNvdXJjZU1hcmtlciogbWFya2VyRW5kID0gcmVzb3VyY2Vz
LT5tYXJrZXJFbmQoKTsKKyAgICBpZiAoIW1hcmtlclN0YXJ0ICYmICFtYXJrZXJNaWQgJiYgIW1h
cmtlckVuZCkKKyAgICAgICAgcmV0dXJuIEZsb2F0UmVjdCgpOworCisgICAgcmV0dXJuIG1fbWFy
a2VyTGF5b3V0SW5mby5jYWxjdWxhdGVCb3VuZGFyaWVzKG1hcmtlclN0YXJ0LCBtYXJrZXJNaWQs
IG1hcmtlckVuZCwgc3Ryb2tlV2lkdGgoKSwgcGF0aCgpKTsKK30KKwordm9pZCBSZW5kZXJTVkdT
aGFwZTo6aW5mbGF0ZVdpdGhNYXJrZXJCb3VuZHMoKQoreworfQorCit2b2lkIFJlbmRlclNWR1No
YXBlOjp1cGRhdGVDYWNoZWRCb3VuZGFyaWVzKCkKK3sKKyAgICBpZiAoaXNFbXB0eSgpKSB7Cisg
ICAgICAgIG1fZmlsbEJvdW5kaW5nQm94ID0gRmxvYXRSZWN0KCk7CisgICAgICAgIG1fc3Ryb2tl
QW5kTWFya2VyQm91bmRpbmdCb3ggPSBGbG9hdFJlY3QoKTsKKyAgICAgICAgbV9yZXBhaW50Qm91
bmRpbmdCb3ggPSBGbG9hdFJlY3QoKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIC8v
IENhY2hlIF91bmNsaXBwZWRfIGZpbGwgYm91bmRpbmcgYm94LCB1c2VkIGZvciBjYWxjdWxhdGlv
bnMgaW4gcmVzb3VyY2VzCisgICAgbV9maWxsQm91bmRpbmdCb3ggPSBvYmplY3RCb3VuZGluZ0Jv
eCgpOworCisgICAgLy8gU3BlYygxMS40KTogQW55IHplcm8gbGVuZ3RoIHN1YnBhdGggc2hhbGwg
bm90IGJlIHN0cm9rZWQgaWYgdGhlIOKAmHN0cm9rZS1saW5lY2Fw4oCZIHByb3BlcnR5IGhhcyBh
IHZhbHVlIG9mIGJ1dHQKKyAgICAvLyBidXQgc2hhbGwgYmUgc3Ryb2tlZCBpZiB0aGUg4oCYc3Ry
b2tlLWxpbmVjYXDigJkgcHJvcGVydHkgaGFzIGEgdmFsdWUgb2Ygcm91bmQgb3Igc3F1YXJlCisg
ICAgaWYgKHNob3VsZFN0cm9rZVplcm9MZW5ndGhTdWJwYXRoKCkpIHsKKyAgICAgICAgbV9zdHJv
a2VBbmRNYXJrZXJCb3VuZGluZ0JveCA9IHplcm9MZW5ndGhTdWJwYXRoUmVjdCgpOworICAgICAg
ICAvLyBDYWNoZSBzbWFsbGVzdCBwb3NzaWJsZSByZXBhaW50IHJlY3RhbmdsZQorICAgICAgICBt
X3JlcGFpbnRCb3VuZGluZ0JveCA9IG1fc3Ryb2tlQW5kTWFya2VyQm91bmRpbmdCb3g7CisgICAg
ICAgIFNWR1JlbmRlclN1cHBvcnQ6OmludGVyc2VjdFJlcGFpbnRSZWN0V2l0aFJlc291cmNlcyh0
aGlzLCBtX3JlcGFpbnRCb3VuZGluZ0JveCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAg
ICAvLyBDYWNoZSBfdW5jbGlwcGVkXyBzdHJva2UgYm91bmRpbmcgYm94LCB1c2VkIGZvciBjYWxj
dWxhdGlvbnMgaW4gcmVzb3VyY2VzIChpbmNsdWRlcyBtYXJrZXIgYm91bmRhcmllcykKKyAgICBt
X3N0cm9rZUFuZE1hcmtlckJvdW5kaW5nQm94ID0gbV9maWxsQm91bmRpbmdCb3g7CisKKyAgICBj
b25zdCBTVkdSZW5kZXJTdHlsZSogc3ZnU3R5bGUgPSBzdHlsZSgpLT5zdmdTdHlsZSgpOworICAg
IGlmIChzdmdTdHlsZS0+aGFzU3Ryb2tlKCkpCisgICAgICAgIG1fc3Ryb2tlQW5kTWFya2VyQm91
bmRpbmdCb3gudW5pdGUoc3Ryb2tlQm91bmRpbmdCb3goKSk7CisKKyAgICBpbmZsYXRlV2l0aE1h
cmtlckJvdW5kcygpOworCisgICAgLy8gQ2FjaGUgc21hbGxlc3QgcG9zc2libGUgcmVwYWludCBy
ZWN0YW5nbGUKKyAgICBtX3JlcGFpbnRCb3VuZGluZ0JveCA9IG1fc3Ryb2tlQW5kTWFya2VyQm91
bmRpbmdCb3g7CisgICAgU1ZHUmVuZGVyU3VwcG9ydDo6aW50ZXJzZWN0UmVwYWludFJlY3RXaXRo
UmVzb3VyY2VzKHRoaXMsIG1fcmVwYWludEJvdW5kaW5nQm94KTsKK30KKworZmxvYXQgUmVuZGVy
U1ZHU2hhcGU6OnN0cm9rZVdpZHRoKCkgY29uc3QKK3sKKyAgICBTVkdFbGVtZW50KiBzdmdFbGVt
ZW50ID0gc3RhdGljX2Nhc3Q8U1ZHRWxlbWVudCo+KG5vZGUoKSk7CisgICAgcmV0dXJuIHN0eWxl
KCktPnN2Z1N0eWxlKCktPnN0cm9rZVdpZHRoKCkudmFsdWUoc3ZnRWxlbWVudCk7Cit9CisKK30K
KworI2VuZGlmIC8vIEVOQUJMRShTVkcpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvc3ZnL1JlbmRlclNWR1NoYXBlLmggYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3Zn
L1JlbmRlclNWR1NoYXBlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTFk
OGMxMgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVu
ZGVyU1ZHU2hhcGUuaApAQCAtMCwwICsxLDE1OCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAw
NCwgMjAwNSwgMjAwNyBOaWtvbGFzIFppbW1lcm1hbm4gPHppbW1lcm1hbm5Aa2RlLm9yZz4KKyAq
IENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSBSb2IgQnVpcyA8YnVpc0BrZGUub3JnPgorICogQ29w
eXJpZ2h0IChDKSAyMDA1IEVyaWMgU2VpZGVsIDxlcmljQHdlYmtpdC5vcmc+CisgKiBDb3B5cmln
aHQgKEMpIDIwMDYgQXBwbGUgQ29tcHV0ZXIsIEluYworICogQ29weXJpZ2h0IChDKSAyMDA5IEdv
b2dsZSwgSW5jLgorICogQ29weXJpZ2h0IChDKSAyMDExIFJlbmF0YSBIb2RvdmFuIDxyZW5pQHdl
YmtpdC5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgVW5pdmVyc2l0eSBvZiBTemVnZWQKKyAq
CisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUg
aXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFy
eSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29m
dHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9y
IChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5
IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBi
dXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50
eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQ
T1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3Ig
bW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2Yg
dGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhp
cyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisg
KiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQs
IEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2lm
bmRlZiBSZW5kZXJTVkdTaGFwZV9oCisjZGVmaW5lIFJlbmRlclNWR1NoYXBlX2gKKworI2lmIEVO
QUJMRShTVkcpCisjaW5jbHVkZSAiQWZmaW5lVHJhbnNmb3JtLmgiCisjaW5jbHVkZSAiRmxvYXRS
ZWN0LmgiCisjaW5jbHVkZSAiUmVuZGVyU1ZHTW9kZWxPYmplY3QuaCIKKyNpbmNsdWRlICJTVkdN
YXJrZXJMYXlvdXRJbmZvLmgiCisjaW5jbHVkZSAiU3Ryb2tlU3R5bGVBcHBsaWVyLmgiCisjaW5j
bHVkZSA8d3RmL093blB0ci5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIEZsb2F0
UG9pbnQ7CitjbGFzcyBHcmFwaGljc0NvbnRleHRTdGF0ZVNhdmVyOworY2xhc3MgUmVuZGVyU1ZH
Q29udGFpbmVyOworY2xhc3MgUmVuZGVyU1ZHUGF0aDsKK2NsYXNzIFNWR1N0eWxlZFRyYW5zZm9y
bWFibGVFbGVtZW50OworCitjbGFzcyBCb3VuZGluZ1JlY3RTdHJva2VTdHlsZUFwcGxpZXIgOiBw
dWJsaWMgU3Ryb2tlU3R5bGVBcHBsaWVyIHsKK3B1YmxpYzoKKyAgICBCb3VuZGluZ1JlY3RTdHJv
a2VTdHlsZUFwcGxpZXIoY29uc3QgUmVuZGVyT2JqZWN0KiBvYmplY3QsIFJlbmRlclN0eWxlKiBz
dHlsZSkKKyAgICAgICAgOiBtX29iamVjdChvYmplY3QpCisgICAgICAgICwgbV9zdHlsZShzdHls
ZSkKKyAgICB7CisgICAgICAgIEFTU0VSVChzdHlsZSk7CisgICAgICAgIEFTU0VSVChvYmplY3Qp
OworICAgIH0KKworICAgIHZvaWQgc3Ryb2tlU3R5bGUoR3JhcGhpY3NDb250ZXh0KiBnYykKKyAg
ICB7CisgICAgICAgIFNWR1JlbmRlclN1cHBvcnQ6OmFwcGx5U3Ryb2tlU3R5bGVUb0NvbnRleHQo
Z2MsIG1fc3R5bGUsIG1fb2JqZWN0KTsKKyAgICB9CisKK3ByaXZhdGU6CisgICAgY29uc3QgUmVu
ZGVyT2JqZWN0KiBtX29iamVjdDsKKyAgICBSZW5kZXJTdHlsZSogbV9zdHlsZTsKK307CisKK2Ns
YXNzIFJlbmRlclNWR1NoYXBlIDogcHVibGljIFJlbmRlclNWR01vZGVsT2JqZWN0IHsKK3B1Ymxp
YzoKKyAgICBleHBsaWNpdCBSZW5kZXJTVkdTaGFwZShTVkdTdHlsZWRUcmFuc2Zvcm1hYmxlRWxl
bWVudCopOworICAgIHZpcnR1YWwgflJlbmRlclNWR1NoYXBlKCk7CisKKyAgICB2b2lkIHNldE5l
ZWRzU2hhcGVVcGRhdGUoKSB7IG1fbmVlZHNTaGFwZVVwZGF0ZSA9IHRydWU7IH0KKyAgICB2aXJ0
dWFsIHZvaWQgc2V0TmVlZHNCb3VuZGFyaWVzVXBkYXRlKCkgeyBtX25lZWRzQm91bmRhcmllc1Vw
ZGF0ZSA9IHRydWU7IH0KKyAgICB2aXJ0dWFsIHZvaWQgc2V0TmVlZHNUcmFuc2Zvcm1VcGRhdGUo
KSB7IG1fbmVlZHNUcmFuc2Zvcm1VcGRhdGUgPSB0cnVlOyB9CisgICAgdmlydHVhbCB2b2lkIGZp
bGxTaGFwZShHcmFwaGljc0NvbnRleHQqKTsKKyAgICB2aXJ0dWFsIHZvaWQgc3Ryb2tlU2hhcGUo
R3JhcGhpY3NDb250ZXh0Kik7CisKK3Byb3RlY3RlZDoKKyAgICB2aXJ0dWFsIHZvaWQgY3JlYXRl
U2hhcGUoKTsKKyAgICB2aXJ0dWFsIGJvb2wgaXNFbXB0eSgpIGNvbnN0OworICAgIHZpcnR1YWwg
RmxvYXRSZWN0IG9iamVjdEJvdW5kaW5nQm94KCkgY29uc3Q7CisgICAgdmlydHVhbCBGbG9hdFJl
Y3Qgc3Ryb2tlQm91bmRpbmdCb3goKTsKKyAgICB2aXJ0dWFsIGJvb2wgc2hhcGVEZXBlbmRlbnRT
dHJva2VDb250YWlucyhjb25zdCBGbG9hdFBvaW50Jik7CisgICAgdmlydHVhbCBib29sIHNoYXBl
RGVwZW5kZW50RmlsbENvbnRhaW5zKGNvbnN0IEZsb2F0UG9pbnQmLCBjb25zdCBXaW5kUnVsZSYp
IGNvbnN0OworICAgIGZsb2F0IHN0cm9rZVdpZHRoKCkgY29uc3Q7CisgICAgdm9pZCBzZXRJc0Zp
bGxGYWxsYmFjayhib29sIGlzRmFsbGJhY2spIHsgbV9maWxsRmFsbGJhY2sgPSBpc0ZhbGxiYWNr
OyB9CisgICAgYm9vbCBpc0ZpbGxGYWxsYmFjaygpIGNvbnN0IHsgcmV0dXJuIG1fZmlsbEZhbGxi
YWNrOyB9CisgICAgRmxvYXRSZWN0IGNhbGN1bGF0ZU1hcmtlckJvdW5kc0lmTmVlZGVkKCk7CisK
KyAgICBQYXRoJiBwYXRoKCkgY29uc3QKKyAgICB7CisgICAgICAgIEFTU0VSVChtX3BhdGguZ2V0
KCkpOworICAgICAgICByZXR1cm4gKm1fcGF0aDsKKyAgICB9CisKKyAgICBib29sIGhhc1BhdGgo
KSBjb25zdCB7IHJldHVybiBtX3BhdGguZ2V0KCk7IH0KKworcHJpdmF0ZToKKyAgICAvLyBIaXQt
ZGV0ZWN0aW9uIHNlcGVyYXRlZCBmb3IgdGhlIGZpbGwgYW5kIHRoZSBzdHJva2UKKyAgICBib29s
IGZpbGxDb250YWlucyhjb25zdCBGbG9hdFBvaW50JiwgYm9vbCByZXF1aXJlc0ZpbGwgPSB0cnVl
LCBXaW5kUnVsZSBmaWxsUnVsZSA9IFJVTEVfTk9OWkVSTyk7CisgICAgYm9vbCBzdHJva2VDb250
YWlucyhjb25zdCBGbG9hdFBvaW50JiwgYm9vbCByZXF1aXJlc1N0cm9rZSA9IHRydWUpOworCisg
ICAgdmlydHVhbCBGbG9hdFJlY3Qgc3Ryb2tlQm91bmRpbmdCb3goKSBjb25zdCB7IHJldHVybiBt
X3N0cm9rZUFuZE1hcmtlckJvdW5kaW5nQm94OyB9CisgICAgdmlydHVhbCBGbG9hdFJlY3QgcmVw
YWludFJlY3RJbkxvY2FsQ29vcmRpbmF0ZXMoKSBjb25zdCB7IHJldHVybiBtX3JlcGFpbnRCb3Vu
ZGluZ0JveDsgfQorICAgIHZpcnR1YWwgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiBsb2NhbFRvUGFy
ZW50VHJhbnNmb3JtKCkgY29uc3QgeyByZXR1cm4gbV9sb2NhbFRyYW5zZm9ybTsgfQorCisgICAg
dmlydHVhbCBib29sIGlzU1ZHU2hhcGUoKSBjb25zdCB7IHJldHVybiB0cnVlOyB9CisgICAgdmly
dHVhbCBjb25zdCBjaGFyKiByZW5kZXJOYW1lKCkgY29uc3QgeyByZXR1cm4gIlJlbmRlclNWR1No
YXBlIjsgfQorICAgIHZpcnR1YWwgYm9vbCBpc1JvdW5kZWRSZWN0KCkgeyByZXR1cm4gZmFsc2U7
IH0KKworICAgIHZpcnR1YWwgdm9pZCBsYXlvdXQoKTsKKyAgICB2aXJ0dWFsIHZvaWQgcGFpbnQo
UGFpbnRJbmZvJiwgY29uc3QgTGF5b3V0UG9pbnQmKTsKKyAgICB2aXJ0dWFsIHZvaWQgYWRkRm9j
dXNSaW5nUmVjdHMoVmVjdG9yPExheW91dFJlY3Q+JiwgY29uc3QgTGF5b3V0UG9pbnQmKTsKKyAg
ICB2aXJ0dWFsIHZvaWQgaW5mbGF0ZVdpdGhNYXJrZXJCb3VuZHMoKTsKKworICAgIHZpcnR1YWwg
Ym9vbCBub2RlQXRGbG9hdFBvaW50KGNvbnN0IEhpdFRlc3RSZXF1ZXN0JiwgSGl0VGVzdFJlc3Vs
dCYsIGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50SW5QYXJlbnQsIEhpdFRlc3RBY3Rpb24pOworCisg
ICAgdm9pZCB1cGRhdGVDYWNoZWRCb3VuZGFyaWVzKCk7CisKKyAgICB2b2lkIHNldHVwU3F1YXJl
Q2FwUGF0aChQYXRoKiYgdXNlUGF0aCwgaW50JiBhcHBseU1vZGUpOworICAgIGJvb2wgc2V0dXBO
b25TY2FsaW5nU3Ryb2tlUGF0aChQYXRoKiYgdXNlUGF0aCwgR3JhcGhpY3NDb250ZXh0U3RhdGVT
YXZlciYpOworICAgIGJvb2wgc2hvdWxkU3Ryb2tlWmVyb0xlbmd0aFN1YnBhdGgoKSBjb25zdDsK
KyAgICBGbG9hdFJlY3QgemVyb0xlbmd0aFN1YnBhdGhSZWN0KCkgY29uc3Q7CisKKyAgICB2b2lk
IGZpbGxBbmRTdHJva2VQYXRoKEdyYXBoaWNzQ29udGV4dCopOworCitwcml2YXRlOgorICAgIGJv
b2wgbV9uZWVkc0JvdW5kYXJpZXNVcGRhdGUgOiAxOworICAgIGJvb2wgbV9uZWVkc1NoYXBlVXBk
YXRlIDogMTsKKyAgICBib29sIG1fbmVlZHNUcmFuc2Zvcm1VcGRhdGUgOiAxOworICAgIGJvb2wg
bV9maWxsRmFsbGJhY2sgOiAxOworICAgIGJvb2wgbV9zdHJva2VDb250YWluc0ZhbGxCYWNrIDog
MTsKKworICAgIEZsb2F0UmVjdCBtX2ZpbGxCb3VuZGluZ0JveDsKKyAgICBGbG9hdFJlY3QgbV9z
dHJva2VBbmRNYXJrZXJCb3VuZGluZ0JveDsKKyAgICBGbG9hdFJlY3QgbV9yZXBhaW50Qm91bmRp
bmdCb3g7CisgICAgU1ZHTWFya2VyTGF5b3V0SW5mbyBtX21hcmtlckxheW91dEluZm87CisgICAg
QWZmaW5lVHJhbnNmb3JtIG1fbG9jYWxUcmFuc2Zvcm07CisgICAgT3duUHRyPFBhdGg+IG1fcGF0
aDsKK307CisKK2lubGluZSBSZW5kZXJTVkdTaGFwZSogdG9SZW5kZXJTVkdTaGFwZShSZW5kZXJP
YmplY3QqIG9iamVjdCkKK3sKKyAgICBBU1NFUlQoIW9iamVjdCB8fCBvYmplY3QtPmlzU1ZHU2hh
cGUoKSk7CisgICAgcmV0dXJuIHN0YXRpY19jYXN0PFJlbmRlclNWR1NoYXBlKj4ob2JqZWN0KTsK
K30KKworaW5saW5lIGNvbnN0IFJlbmRlclNWR1NoYXBlKiB0b1JlbmRlclNWR1NoYXBlKGNvbnN0
IFJlbmRlck9iamVjdCogb2JqZWN0KQoreworICAgIEFTU0VSVCghb2JqZWN0IHx8IG9iamVjdC0+
aXNTVkdTaGFwZSgpKTsKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8Y29uc3QgUmVuZGVyU1ZHU2hh
cGUqPihvYmplY3QpOworfQorCisvLyBUaGlzIHdpbGwgY2F0Y2ggYW55b25lIGRvaW5nIGFuIHVu
bmVjZXNzYXJ5IGNhc3QuCit2b2lkIHRvUmVuZGVyU1ZHU2hhcGUoY29uc3QgUmVuZGVyU1ZHU2hh
cGUqKTsKKworfQorCisjZW5kaWYgLy8gRU5BQkxFKFNWRykKKyNlbmRpZgpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdJbmxpbmVUZXh0Qm94LmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHSW5saW5lVGV4dEJveC5jcHAKaW5kZXggYzFjNWFm
YS4uNzNkNmM0MyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdJ
bmxpbmVUZXh0Qm94LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR0lu
bGluZVRleHRCb3guY3BwCkBAIC0zNzcsNyArMzc3LDcgQEAgdm9pZCBTVkdJbmxpbmVUZXh0Qm94
OjpyZWxlYXNlUGFpbnRpbmdSZXNvdXJjZShHcmFwaGljc0NvbnRleHQqJiBjb250ZXh0LCBjb25z
dAogICAgIFJlbmRlck9iamVjdCogcGFyZW50UmVuZGVyZXIgPSBwYXJlbnQoKS0+cmVuZGVyZXIo
KTsKICAgICBBU1NFUlQocGFyZW50UmVuZGVyZXIpOwogCi0gICAgbV9wYWludGluZ1Jlc291cmNl
LT5wb3N0QXBwbHlSZXNvdXJjZShwYXJlbnRSZW5kZXJlciwgY29udGV4dCwgbV9wYWludGluZ1Jl
c291cmNlTW9kZSwgcGF0aCk7CisgICAgbV9wYWludGluZ1Jlc291cmNlLT5wb3N0QXBwbHlSZXNv
dXJjZShzdGF0aWNfY2FzdDxSZW5kZXJTVkdTaGFwZSo+KHBhcmVudFJlbmRlcmVyKSwgY29udGV4
dCwgbV9wYWludGluZ1Jlc291cmNlTW9kZSwgcGF0aCk7CiAgICAgbV9wYWludGluZ1Jlc291cmNl
ID0gMDsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdS
ZW5kZXJTdXBwb3J0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHUmVuZGVy
U3VwcG9ydC5jcHAKaW5kZXggMDA3OTIxOS4uNTU1OTVhZiAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdSZW5kZXJTdXBwb3J0LmNwcAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvc3ZnL1NWR1JlbmRlclN1cHBvcnQuY3BwCkBAIC0xNTMsNyArMTUzLDcg
QEAgdm9pZCBTVkdSZW5kZXJTdXBwb3J0OjpmaW5pc2hSZW5kZXJTVkdDb250ZW50KFJlbmRlck9i
amVjdCogb2JqZWN0LCBQYWludEluZm8mIHAKICAgICBTVkdSZXNvdXJjZXMqIHJlc291cmNlcyA9
IFNWR1Jlc291cmNlc0NhY2hlOjpjYWNoZWRSZXNvdXJjZXNGb3JSZW5kZXJPYmplY3Qob2JqZWN0
KTsKICAgICBpZiAocmVzb3VyY2VzKSB7CiAgICAgICAgIGlmIChSZW5kZXJTVkdSZXNvdXJjZUZp
bHRlciogZmlsdGVyID0gcmVzb3VyY2VzLT5maWx0ZXIoKSkgewotICAgICAgICAgICAgZmlsdGVy
LT5wb3N0QXBwbHlSZXNvdXJjZShvYmplY3QsIHBhaW50SW5mby5jb250ZXh0LCBBcHBseVRvRGVm
YXVsdE1vZGUsIC8qIHBhdGggKi8wKTsKKyAgICAgICAgICAgIGZpbHRlci0+cG9zdEFwcGx5UmVz
b3VyY2Uoc3RhdGljX2Nhc3Q8UmVuZGVyU1ZHU2hhcGUqPihvYmplY3QpLCBwYWludEluZm8uY29u
dGV4dCwgQXBwbHlUb0RlZmF1bHRNb2RlLCAwKTsKICAgICAgICAgICAgIHBhaW50SW5mby5jb250
ZXh0ID0gc2F2ZWRDb250ZXh0OwogICAgICAgICB9CiAgICAgfQpAQCAtMjI1LDkgKzIyNSw5IEBA
IHZvaWQgU1ZHUmVuZGVyU3VwcG9ydDo6bGF5b3V0Q2hpbGRyZW4oUmVuZGVyT2JqZWN0KiBzdGFy
dCwgYm9vbCBzZWxmTmVlZHNMYXlvdXQpCiAgICAgICAgICAgICAvLyBXaGVuIHNlbGZOZWVkc0xh
eW91dCBpcyBmYWxzZSBhbmQgdGhlIGxheW91dCBzaXplIGNoYW5nZWQsIHdlIGhhdmUgdG8gY2hl
Y2sgd2hldGhlciB0aGlzIGNoaWxkIHVzZXMgcmVsYXRpdmUgbGVuZ3RocwogICAgICAgICAgICAg
aWYgKFNWR0VsZW1lbnQqIGVsZW1lbnQgPSBjaGlsZC0+bm9kZSgpLT5pc1NWR0VsZW1lbnQoKSA/
IHN0YXRpY19jYXN0PFNWR0VsZW1lbnQqPihjaGlsZC0+bm9kZSgpKSA6IDApIHsKICAgICAgICAg
ICAgICAgICBpZiAoZWxlbWVudC0+aXNTdHlsZWQoKSAmJiBzdGF0aWNfY2FzdDxTVkdTdHlsZWRF
bGVtZW50Kj4oZWxlbWVudCktPmhhc1JlbGF0aXZlTGVuZ3RocygpKSB7Ci0gICAgICAgICAgICAg
ICAgICAgIC8vIFdoZW4gdGhlIGxheW91dCBzaXplIGNoYW5nZWQgYW5kIHdoZW4gdXNpbmcgcmVs
YXRpdmUgdmFsdWVzIHRlbGwgdGhlIFJlbmRlclNWR1BhdGggdG8gdXBkYXRlIGl0cyBQYXRoIG9i
amVjdAotICAgICAgICAgICAgICAgICAgICBpZiAoY2hpbGQtPmlzU1ZHUGF0aCgpKQotICAgICAg
ICAgICAgICAgICAgICAgICAgdG9SZW5kZXJTVkdQYXRoKGNoaWxkKS0+c2V0TmVlZHNQYXRoVXBk
YXRlKCk7CisgICAgICAgICAgICAgICAgICAgIC8vIFdoZW4gdGhlIGxheW91dCBzaXplIGNoYW5n
ZWQgYW5kIHdoZW4gdXNpbmcgcmVsYXRpdmUgdmFsdWVzIHRlbGwgdGhlIFJlbmRlclNWR1NoYXBl
IHRvIHVwZGF0ZSBpdHMgc2hhcGUgb2JqZWN0CisgICAgICAgICAgICAgICAgICAgIGlmIChjaGls
ZC0+aXNTVkdTaGFwZSgpKQorICAgICAgICAgICAgICAgICAgICAgICAgdG9SZW5kZXJTVkdTaGFw
ZShjaGlsZCktPnNldE5lZWRzU2hhcGVVcGRhdGUoKTsKIAogICAgICAgICAgICAgICAgICAgICBu
ZWVkc0xheW91dCA9IHRydWU7CiAgICAgICAgICAgICAgICAgfQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdSZW5kZXJUcmVlQXNUZXh0LmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHUmVuZGVyVHJlZUFzVGV4dC5jcHAKaW5kZXggYTE2Mjk2
OS4uZDFhZDcyYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdS
ZW5kZXJUcmVlQXNUZXh0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NW
R1JlbmRlclRyZWVBc1RleHQuY3BwCkBAIC01NSw2ICs1NSw3IEBACiAjaW5jbHVkZSAiUmVuZGVy
U1ZHUmVzb3VyY2VSYWRpYWxHcmFkaWVudC5oIgogI2luY2x1ZGUgIlJlbmRlclNWR1Jlc291cmNl
U29saWRDb2xvci5oIgogI2luY2x1ZGUgIlJlbmRlclNWR1Jvb3QuaCIKKyNpbmNsdWRlICJSZW5k
ZXJTVkdTaGFwZS5oIgogI2luY2x1ZGUgIlJlbmRlclNWR1RleHQuaCIKICNpbmNsdWRlICJSZW5k
ZXJUcmVlQXNUZXh0LmgiCiAjaW5jbHVkZSAiU1ZHQ2lyY2xlRWxlbWVudC5oIgpAQCAtMjg5LDE4
ICsyOTAsMTggQEAgc3RhdGljIHZvaWQgd3JpdGVTdHlsZShUZXh0U3RyZWFtJiB0cywgY29uc3Qg
UmVuZGVyT2JqZWN0JiBvYmplY3QpCiAgICAgICAgIHdyaXRlTmFtZVZhbHVlUGFpcih0cywgInRy
YW5zZm9ybSIsIG9iamVjdC5sb2NhbFRyYW5zZm9ybSgpKTsKICAgICB3cml0ZUlmTm90RGVmYXVs
dCh0cywgImltYWdlIHJlbmRlcmluZyIsIHN0eWxlLT5pbWFnZVJlbmRlcmluZygpLCBSZW5kZXJT
dHlsZTo6aW5pdGlhbEltYWdlUmVuZGVyaW5nKCkpOwogICAgIHdyaXRlSWZOb3REZWZhdWx0KHRz
LCAib3BhY2l0eSIsIHN0eWxlLT5vcGFjaXR5KCksIFJlbmRlclN0eWxlOjppbml0aWFsT3BhY2l0
eSgpKTsKLSAgICBpZiAob2JqZWN0LmlzU1ZHUGF0aCgpKSB7Ci0gICAgICAgIGNvbnN0IFJlbmRl
clNWR1BhdGgmIHBhdGggPSBzdGF0aWNfY2FzdDxjb25zdCBSZW5kZXJTVkdQYXRoJj4ob2JqZWN0
KTsKLSAgICAgICAgQVNTRVJUKHBhdGgubm9kZSgpKTsKLSAgICAgICAgQVNTRVJUKHBhdGgubm9k
ZSgpLT5pc1NWR0VsZW1lbnQoKSk7CisgICAgaWYgKG9iamVjdC5pc1NWR1NoYXBlKCkpIHsKKyAg
ICAgICAgY29uc3QgUmVuZGVyU1ZHU2hhcGUmIHNoYXBlID0gc3RhdGljX2Nhc3Q8Y29uc3QgUmVu
ZGVyU1ZHU2hhcGUmPihvYmplY3QpOworICAgICAgICBBU1NFUlQoc2hhcGUubm9kZSgpKTsKKyAg
ICAgICAgQVNTRVJUKHNoYXBlLm5vZGUoKS0+aXNTVkdFbGVtZW50KCkpOwogCiAgICAgICAgIENv
bG9yIGZhbGxiYWNrQ29sb3I7Ci0gICAgICAgIGlmIChSZW5kZXJTVkdSZXNvdXJjZSogc3Ryb2tl
UGFpbnRpbmdSZXNvdXJjZSA9IFJlbmRlclNWR1Jlc291cmNlOjpzdHJva2VQYWludGluZ1Jlc291
cmNlKGNvbnN0X2Nhc3Q8UmVuZGVyU1ZHUGF0aCo+KCZwYXRoKSwgcGF0aC5zdHlsZSgpLCBmYWxs
YmFja0NvbG9yKSkgeworICAgICAgICBpZiAoUmVuZGVyU1ZHUmVzb3VyY2UqIHN0cm9rZVBhaW50
aW5nUmVzb3VyY2UgPSBSZW5kZXJTVkdSZXNvdXJjZTo6c3Ryb2tlUGFpbnRpbmdSZXNvdXJjZShj
b25zdF9jYXN0PFJlbmRlclNWR1NoYXBlKj4oJnNoYXBlKSwgc2hhcGUuc3R5bGUoKSwgZmFsbGJh
Y2tDb2xvcikpIHsKICAgICAgICAgICAgIFRleHRTdHJlYW1TZXBhcmF0b3IgcygiICIpOwogICAg
ICAgICAgICAgdHMgPDwgIiBbc3Ryb2tlPXsiIDw8IHM7CiAgICAgICAgICAgICB3cml0ZVNWR1Bh
aW50aW5nUmVzb3VyY2UodHMsIHN0cm9rZVBhaW50aW5nUmVzb3VyY2UpOwogCi0gICAgICAgICAg
ICBTVkdFbGVtZW50KiBlbGVtZW50ID0gc3RhdGljX2Nhc3Q8U1ZHRWxlbWVudCo+KHBhdGgubm9k
ZSgpKTsKKyAgICAgICAgICAgIFNWR0VsZW1lbnQqIGVsZW1lbnQgPSBzdGF0aWNfY2FzdDxTVkdF
bGVtZW50Kj4oc2hhcGUubm9kZSgpKTsKICAgICAgICAgICAgIGRvdWJsZSBkYXNoT2Zmc2V0ID0g
c3ZnU3R5bGUtPnN0cm9rZURhc2hPZmZzZXQoKS52YWx1ZShlbGVtZW50KTsKICAgICAgICAgICAg
IGRvdWJsZSBzdHJva2VXaWR0aCA9IHN2Z1N0eWxlLT5zdHJva2VXaWR0aCgpLnZhbHVlKGVsZW1l
bnQpOwogICAgICAgICAgICAgY29uc3QgVmVjdG9yPFNWR0xlbmd0aD4mIGRhc2hlcyA9IHN2Z1N0
eWxlLT5zdHJva2VEYXNoQXJyYXkoKTsKQEAgLTMyMiw3ICszMjMsNyBAQCBzdGF0aWMgdm9pZCB3
cml0ZVN0eWxlKFRleHRTdHJlYW0mIHRzLCBjb25zdCBSZW5kZXJPYmplY3QmIG9iamVjdCkKICAg
ICAgICAgICAgIHRzIDw8ICJ9XSI7CiAgICAgICAgIH0KIAotICAgICAgICBpZiAoUmVuZGVyU1ZH
UmVzb3VyY2UqIGZpbGxQYWludGluZ1Jlc291cmNlID0gUmVuZGVyU1ZHUmVzb3VyY2U6OmZpbGxQ
YWludGluZ1Jlc291cmNlKGNvbnN0X2Nhc3Q8UmVuZGVyU1ZHUGF0aCo+KCZwYXRoKSwgcGF0aC5z
dHlsZSgpLCBmYWxsYmFja0NvbG9yKSkgeworICAgICAgICBpZiAoUmVuZGVyU1ZHUmVzb3VyY2Uq
IGZpbGxQYWludGluZ1Jlc291cmNlID0gUmVuZGVyU1ZHUmVzb3VyY2U6OmZpbGxQYWludGluZ1Jl
c291cmNlKGNvbnN0X2Nhc3Q8UmVuZGVyU1ZHU2hhcGUqPigmc2hhcGUpLCBzaGFwZS5zdHlsZSgp
LCBmYWxsYmFja0NvbG9yKSkgewogICAgICAgICAgICAgVGV4dFN0cmVhbVNlcGFyYXRvciBzKCIg
Iik7CiAgICAgICAgICAgICB0cyA8PCAiIFtmaWxsPXsiIDw8IHM7CiAgICAgICAgICAgICB3cml0
ZVNWR1BhaW50aW5nUmVzb3VyY2UodHMsIGZpbGxQYWludGluZ1Jlc291cmNlKTsKQEAgLTM0Niwx
MiArMzQ3LDEyIEBAIHN0YXRpYyBUZXh0U3RyZWFtJiB3cml0ZVBvc2l0aW9uQW5kU3R5bGUoVGV4
dFN0cmVhbSYgdHMsIGNvbnN0IFJlbmRlck9iamVjdCYgb2JqCiAgICAgcmV0dXJuIHRzOwogfQog
Ci1zdGF0aWMgVGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiB0cywgY29uc3QgUmVu
ZGVyU1ZHUGF0aCYgcGF0aCkKK3N0YXRpYyBUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJl
YW0mIHRzLCBjb25zdCBSZW5kZXJTVkdTaGFwZSYgc2hhcGUpCiB7Ci0gICAgd3JpdGVQb3NpdGlv
bkFuZFN0eWxlKHRzLCBwYXRoKTsKKyAgICB3cml0ZVBvc2l0aW9uQW5kU3R5bGUodHMsIHNoYXBl
KTsKIAotICAgIEFTU0VSVChwYXRoLm5vZGUoKS0+aXNTVkdFbGVtZW50KCkpOwotICAgIFNWR0Vs
ZW1lbnQqIHN2Z0VsZW1lbnQgPSBzdGF0aWNfY2FzdDxTVkdFbGVtZW50Kj4ocGF0aC5ub2RlKCkp
OworICAgIEFTU0VSVChzaGFwZS5ub2RlKCktPmlzU1ZHRWxlbWVudCgpKTsKKyAgICBTVkdFbGVt
ZW50KiBzdmdFbGVtZW50ID0gc3RhdGljX2Nhc3Q8U1ZHRWxlbWVudCo+KHNoYXBlLm5vZGUoKSk7
CiAKICAgICBpZiAoc3ZnRWxlbWVudC0+aGFzVGFnTmFtZShTVkdOYW1lczo6cmVjdFRhZykpIHsK
ICAgICAgICAgU1ZHUmVjdEVsZW1lbnQqIGVsZW1lbnQgPSBzdGF0aWNfY2FzdDxTVkdSZWN0RWxl
bWVudCo+KHN2Z0VsZW1lbnQpOwpAQCAtNjUzLDExICs2NTQsMTEgQEAgdm9pZCB3cml0ZVNWR0lt
YWdlKFRleHRTdHJlYW0mIHRzLCBjb25zdCBSZW5kZXJTVkdJbWFnZSYgaW1hZ2UsIGludCBpbmRl
bnQpCiAgICAgd3JpdGVSZXNvdXJjZXModHMsIGltYWdlLCBpbmRlbnQpOwogfQogCi12b2lkIHdy
aXRlKFRleHRTdHJlYW0mIHRzLCBjb25zdCBSZW5kZXJTVkdQYXRoJiBwYXRoLCBpbnQgaW5kZW50
KQordm9pZCB3cml0ZShUZXh0U3RyZWFtJiB0cywgY29uc3QgUmVuZGVyU1ZHU2hhcGUmIHNoYXBl
LCBpbnQgaW5kZW50KQogewotICAgIHdyaXRlU3RhbmRhcmRQcmVmaXgodHMsIHBhdGgsIGluZGVu
dCk7Ci0gICAgdHMgPDwgcGF0aCA8PCAiXG4iOwotICAgIHdyaXRlUmVzb3VyY2VzKHRzLCBwYXRo
LCBpbmRlbnQpOworICAgIHdyaXRlU3RhbmRhcmRQcmVmaXgodHMsIHNoYXBlLCBpbmRlbnQpOwor
ICAgIHRzIDw8IHNoYXBlIDw8ICJcbiI7CisgICAgd3JpdGVSZXNvdXJjZXModHMsIHNoYXBlLCBp
bmRlbnQpOwogfQogCiB2b2lkIHdyaXRlU1ZHR3JhZGllbnRTdG9wKFRleHRTdHJlYW0mIHRzLCBj
b25zdCBSZW5kZXJTVkdHcmFkaWVudFN0b3AmIHN0b3AsIGludCBpbmRlbnQpCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR1JlbmRlclRyZWVBc1RleHQuaCBiL1Nv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHUmVuZGVyVHJlZUFzVGV4dC5oCmluZGV4IGNl
MDdhNWMuLjM1OThjODMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcv
U1ZHUmVuZGVyVHJlZUFzVGV4dC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcv
U1ZHUmVuZGVyVHJlZUFzVGV4dC5oCkBAIC00MSwxNCArNDEsMTQgQEAgY2xhc3MgUmVuZGVySW1h
Z2U7CiBjbGFzcyBSZW5kZXJPYmplY3Q7CiBjbGFzcyBSZW5kZXJTVkdHcmFkaWVudFN0b3A7CiBj
bGFzcyBSZW5kZXJTVkdJbWFnZTsKLWNsYXNzIFJlbmRlclNWR1BhdGg7CitjbGFzcyBSZW5kZXJT
VkdTaGFwZTsKIGNsYXNzIFJlbmRlclNWR1Jvb3Q7CiBjbGFzcyBSZW5kZXJUZXh0OwogY2xhc3Mg
QWZmaW5lVHJhbnNmb3JtOwogY2xhc3MgU1ZHVW5pdFR5cGVzOwogCiAvLyBmdW5jdGlvbnMgdXNl
ZCBieSB0aGUgbWFpbiBSZW5kZXJUcmVlQXNUZXh0IGNvZGUKLXZvaWQgd3JpdGUoVGV4dFN0cmVh
bSYsIGNvbnN0IFJlbmRlclNWR1BhdGgmLCBpbnQgaW5kZW50KTsKK3ZvaWQgd3JpdGUoVGV4dFN0
cmVhbSYsIGNvbnN0IFJlbmRlclNWR1NoYXBlJiwgaW50IGluZGVudCk7CiB2b2lkIHdyaXRlKFRl
eHRTdHJlYW0mLCBjb25zdCBSZW5kZXJTVkdSb290JiwgaW50IGluZGVudCk7CiB2b2lkIHdyaXRl
U1ZHR3JhZGllbnRTdG9wKFRleHRTdHJlYW0mLCBjb25zdCBSZW5kZXJTVkdHcmFkaWVudFN0b3Am
LCBpbnQgaW5kZW50KTsKIHZvaWQgd3JpdGVTVkdSZXNvdXJjZUNvbnRhaW5lcihUZXh0U3RyZWFt
JiwgY29uc3QgUmVuZGVyT2JqZWN0JiwgaW50IGluZGVudCk7CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR1RleHRSdW5SZW5kZXJpbmdDb250ZXh0LmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHVGV4dFJ1blJlbmRlcmluZ0NvbnRleHQuY3Bw
CmluZGV4IDMzYWNmOTIuLjRmMWEyYjEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9zdmcvU1ZHVGV4dFJ1blJlbmRlcmluZ0NvbnRleHQuY3BwCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9zdmcvU1ZHVGV4dFJ1blJlbmRlcmluZ0NvbnRleHQuY3BwCkBAIC0xNjAs
NyArMTYwLDcgQEAgdm9pZCBTVkdUZXh0UnVuUmVuZGVyaW5nQ29udGV4dDo6ZHJhd1NWR0dseXBo
cyhHcmFwaGljc0NvbnRleHQqIGNvbnRleHQsIGNvbnN0IFQKICAgICAgICAgICAgICAgICBjb25z
dCBSZW5kZXJTVkdJbmxpbmVUZXh0KiB0ZXh0UmVuZGVyZXIgPSB0b1JlbmRlclNWR0lubGluZVRl
eHQocmVuZGVyT2JqZWN0KTsKICAgICAgICAgICAgICAgICBjb250ZXh0LT5zZXRTdHJva2VUaGlj
a25lc3MoY29udGV4dC0+c3Ryb2tlVGhpY2tuZXNzKCkgKiB0ZXh0UmVuZGVyZXItPnNjYWxpbmdG
YWN0b3IoKSk7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBhY3RpdmVQYWludGluZ1Jlc291
cmNlLT5wb3N0QXBwbHlSZXNvdXJjZShwYXJlbnRSZW5kZXJPYmplY3QsIGNvbnRleHQsIHJlc291
cmNlTW9kZSwgJmdseXBoUGF0aCk7CisgICAgICAgICAgICBhY3RpdmVQYWludGluZ1Jlc291cmNl
LT5wb3N0QXBwbHlSZXNvdXJjZShzdGF0aWNfY2FzdDxSZW5kZXJTVkdTaGFwZSo+KHBhcmVudFJl
bmRlck9iamVjdCksIGNvbnRleHQsIHJlc291cmNlTW9kZSwgJmdseXBoUGF0aCk7CiAgICAgICAg
ICB9CiAgCiAgICAgICAgIGNvbnRleHQtPnJlc3RvcmUoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3N2Zy9TVkdDaXJjbGVFbGVtZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdD
aXJjbGVFbGVtZW50LmNwcAppbmRleCAyYWU2OWI4Li4wMzY2OWUwIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9zdmcvU1ZHQ2lyY2xlRWxlbWVudC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
c3ZnL1NWR0NpcmNsZUVsZW1lbnQuY3BwCkBAIC0xMjQsNyArMTI0LDcgQEAgdm9pZCBTVkdDaXJj
bGVFbGVtZW50OjpzdmdBdHRyaWJ1dGVDaGFuZ2VkKGNvbnN0IFF1YWxpZmllZE5hbWUmIGF0dHJO
YW1lKQogICAgICAgICByZXR1cm47CiAKICAgICBpZiAoaXNMZW5ndGhBdHRyaWJ1dGUpIHsKLSAg
ICAgICAgcmVuZGVyZXItPnNldE5lZWRzUGF0aFVwZGF0ZSgpOworICAgICAgICByZW5kZXJlci0+
c2V0TmVlZHNTaGFwZVVwZGF0ZSgpOwogICAgICAgICBSZW5kZXJTVkdSZXNvdXJjZTo6bWFya0Zv
ckxheW91dEFuZFBhcmVudFJlc291cmNlSW52YWxpZGF0aW9uKHJlbmRlcmVyKTsKICAgICAgICAg
cmV0dXJuOwogICAgIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdFbGxpcHNl
RWxlbWVudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRWxsaXBzZUVsZW1lbnQuY3BwCmlu
ZGV4IGNlYTA2NmQuLmNhMDE3YzQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdF
bGxpcHNlRWxlbWVudC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0VsbGlwc2VFbGVt
ZW50LmNwcApAQCAtMTI5LDcgKzEyOSw3IEBAIHZvaWQgU1ZHRWxsaXBzZUVsZW1lbnQ6OnN2Z0F0
dHJpYnV0ZUNoYW5nZWQoY29uc3QgUXVhbGlmaWVkTmFtZSYgYXR0ck5hbWUpCiAgICAgICAgIHJl
dHVybjsKIAogICAgIGlmIChpc0xlbmd0aEF0dHJpYnV0ZSkgewotICAgICAgICByZW5kZXJlci0+
c2V0TmVlZHNQYXRoVXBkYXRlKCk7CisgICAgICAgIHJlbmRlcmVyLT5zZXROZWVkc1NoYXBlVXBk
YXRlKCk7CiAgICAgICAgIFJlbmRlclNWR1Jlc291cmNlOjptYXJrRm9yTGF5b3V0QW5kUGFyZW50
UmVzb3VyY2VJbnZhbGlkYXRpb24ocmVuZGVyZXIpOwogICAgICAgICByZXR1cm47CiAgICAgfQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0xpbmVFbGVtZW50LmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL3N2Zy9TVkdMaW5lRWxlbWVudC5jcHAKaW5kZXggYzdjYTExZS4uYjFiYjhlYSAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0xpbmVFbGVtZW50LmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9zdmcvU1ZHTGluZUVsZW1lbnQuY3BwCkBAIC0xMjksNyArMTI5LDcgQEAg
dm9pZCBTVkdMaW5lRWxlbWVudDo6c3ZnQXR0cmlidXRlQ2hhbmdlZChjb25zdCBRdWFsaWZpZWRO
YW1lJiBhdHRyTmFtZSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgaWYgKGlzTGVuZ3RoQXR0cmli
dXRlKSB7Ci0gICAgICAgIHJlbmRlcmVyLT5zZXROZWVkc1BhdGhVcGRhdGUoKTsKKyAgICAgICAg
cmVuZGVyZXItPnNldE5lZWRzU2hhcGVVcGRhdGUoKTsKICAgICAgICAgUmVuZGVyU1ZHUmVzb3Vy
Y2U6Om1hcmtGb3JMYXlvdXRBbmRQYXJlbnRSZXNvdXJjZUludmFsaWRhdGlvbihyZW5kZXJlcik7
CiAgICAgICAgIHJldHVybjsKICAgICB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9zdmcv
U1ZHUGF0aEVsZW1lbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvc3ZnL1NWR1BhdGhFbGVtZW50LmNw
cAppbmRleCBhN2EzMzdlLi5mZTMzNTk1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9zdmcv
U1ZHUGF0aEVsZW1lbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdQYXRoRWxlbWVu
dC5jcHAKQEAgLTI2OSw3ICsyNjksNyBAQCB2b2lkIFNWR1BhdGhFbGVtZW50OjpzdmdBdHRyaWJ1
dGVDaGFuZ2VkKGNvbnN0IFF1YWxpZmllZE5hbWUmIGF0dHJOYW1lKQogICAgICAgICB9CiAKICAg
ICAgICAgaWYgKHJlbmRlcmVyKQotICAgICAgICAgICAgcmVuZGVyZXItPnNldE5lZWRzUGF0aFVw
ZGF0ZSgpOworICAgICAgICAgICAgcmVuZGVyZXItPnNldE5lZWRzU2hhcGVVcGRhdGUoKTsKICAg
ICB9CiAKICAgICBpZiAocmVuZGVyZXIpCkBAIC0zNTUsMTAgKzM1NSwxNiBAQCB2b2lkIFNWR1Bh
dGhFbGVtZW50OjpwYXRoU2VnTGlzdENoYW5nZWQoU1ZHUGF0aFNlZ1JvbGUgcm9sZSkKICAgICBp
ZiAoIXJlbmRlcmVyKQogICAgICAgICByZXR1cm47CiAKLSAgICByZW5kZXJlci0+c2V0TmVlZHNQ
YXRoVXBkYXRlKCk7CisgICAgcmVuZGVyZXItPnNldE5lZWRzU2hhcGVVcGRhdGUoKTsKICAgICBS
ZW5kZXJTVkdSZXNvdXJjZTo6bWFya0ZvckxheW91dEFuZFBhcmVudFJlc291cmNlSW52YWxpZGF0
aW9uKHJlbmRlcmVyKTsKIH0KIAorUmVuZGVyT2JqZWN0KiBTVkdQYXRoRWxlbWVudDo6Y3JlYXRl
UmVuZGVyZXIoUmVuZGVyQXJlbmEqIGFyZW5hLCBSZW5kZXJTdHlsZSopCit7CisgICAgLy8gQnkg
ZGVmYXVsdCwgYW55IHN1YmNsYXNzIGlzIGV4cGVjdGVkIHRvIGRvIHBhdGgtYmFzZWQgZHJhd2lu
ZworICAgIHJldHVybiBuZXcgKGFyZW5hKSBSZW5kZXJTVkdQYXRoKHRoaXMpOworfQorCiB9CiAK
ICNlbmRpZiAvLyBFTkFCTEUoU1ZHKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvc3ZnL1NW
R1BhdGhFbGVtZW50LmggYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHUGF0aEVsZW1lbnQuaAppbmRl
eCAxZDM3ZDBlLi41NGI4ZmUyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHUGF0
aEVsZW1lbnQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHUGF0aEVsZW1lbnQuaApAQCAt
MTIyLDYgKzEyMiw4IEBAIHByaXZhdGU6CiAgICAgdmlydHVhbCB2b2lkIHN5bmNocm9uaXplUmVx
dWlyZWRFeHRlbnNpb25zKCkgeyBTVkdUZXN0czo6c3luY2hyb25pemVSZXF1aXJlZEV4dGVuc2lv
bnModGhpcyk7IH0KICAgICB2aXJ0dWFsIHZvaWQgc3luY2hyb25pemVTeXN0ZW1MYW5ndWFnZSgp
IHsgU1ZHVGVzdHM6OnN5bmNocm9uaXplU3lzdGVtTGFuZ3VhZ2UodGhpcyk7IH0KIAorICAgIFJl
bmRlck9iamVjdCogY3JlYXRlUmVuZGVyZXIoUmVuZGVyQXJlbmEqLCBSZW5kZXJTdHlsZSopOwor
CiBwcml2YXRlOgogICAgIE93blB0cjxTVkdQYXRoQnl0ZVN0cmVhbT4gbV9wYXRoQnl0ZVN0cmVh
bTsKICAgICBtdXRhYmxlIFNWR1N5bmNocm9uaXphYmxlQW5pbWF0ZWRQcm9wZXJ0eTxTVkdQYXRo
U2VnTGlzdD4gbV9wYXRoU2VnTGlzdDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9T
VkdQb2x5RWxlbWVudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHUG9seUVsZW1lbnQuY3Bw
CmluZGV4IDYxNmI4NjcuLmYzMGNhNGEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9T
VkdQb2x5RWxlbWVudC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvc3ZnL1NWR1BvbHlFbGVtZW50
LmNwcApAQCAtMTI0LDcgKzEyNCw3IEBAIHZvaWQgU1ZHUG9seUVsZW1lbnQ6OnN2Z0F0dHJpYnV0
ZUNoYW5nZWQoY29uc3QgUXVhbGlmaWVkTmFtZSYgYXR0ck5hbWUpCiAgICAgICAgIHJldHVybjsK
IAogICAgIGlmIChhdHRyTmFtZSA9PSBTVkdOYW1lczo6cG9pbnRzQXR0cikgewotICAgICAgICBy
ZW5kZXJlci0+c2V0TmVlZHNQYXRoVXBkYXRlKCk7CisgICAgICAgIHJlbmRlcmVyLT5zZXROZWVk
c1NoYXBlVXBkYXRlKCk7CiAgICAgICAgIFJlbmRlclNWR1Jlc291cmNlOjptYXJrRm9yTGF5b3V0
QW5kUGFyZW50UmVzb3VyY2VJbnZhbGlkYXRpb24ocmVuZGVyZXIpOwogICAgICAgICByZXR1cm47
CiAgICAgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvc3ZnL1NWR1JlY3RFbGVtZW50LmNw
cCBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdSZWN0RWxlbWVudC5jcHAKaW5kZXggZTg0Nzc0ZC4u
MTg3OWUwYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvc3ZnL1NWR1JlY3RFbGVtZW50LmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHUmVjdEVsZW1lbnQuY3BwCkBAIC0yNSw2ICsy
NSw3IEBACiAKICNpbmNsdWRlICJBdHRyaWJ1dGUuaCIKICNpbmNsdWRlICJSZW5kZXJTVkdQYXRo
LmgiCisjaW5jbHVkZSAiUmVuZGVyU1ZHUmVjdC5oIgogI2luY2x1ZGUgIlJlbmRlclNWR1Jlc291
cmNlLmgiCiAjaW5jbHVkZSAiU1ZHRWxlbWVudEluc3RhbmNlLmgiCiAjaW5jbHVkZSAiU1ZHTGVu
Z3RoLmgiCkBAIC0zMiw2ICszMyw4IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAorY2xhc3Mg
UmVuZGVyU1ZHUmVjdDsKKwogLy8gQW5pbWF0ZWQgcHJvcGVydHkgZGVmaW5pdGlvbnMKIERFRklO
RV9BTklNQVRFRF9MRU5HVEgoU1ZHUmVjdEVsZW1lbnQsIFNWR05hbWVzOjp4QXR0ciwgWCwgeCkK
IERFRklORV9BTklNQVRFRF9MRU5HVEgoU1ZHUmVjdEVsZW1lbnQsIFNWR05hbWVzOjp5QXR0ciwg
WSwgeSkKQEAgLTEzNywxMiArMTQwLDEyIEBAIHZvaWQgU1ZHUmVjdEVsZW1lbnQ6OnN2Z0F0dHJp
YnV0ZUNoYW5nZWQoY29uc3QgUXVhbGlmaWVkTmFtZSYgYXR0ck5hbWUpCiAgICAgaWYgKFNWR1Rl
c3RzOjpoYW5kbGVBdHRyaWJ1dGVDaGFuZ2UodGhpcywgYXR0ck5hbWUpKQogICAgICAgICByZXR1
cm47CiAKLSAgICBSZW5kZXJTVkdQYXRoKiByZW5kZXJlciA9IHN0YXRpY19jYXN0PFJlbmRlclNW
R1BhdGgqPih0aGlzLT5yZW5kZXJlcigpKTsKKyAgICBSZW5kZXJTVkdSZWN0KiByZW5kZXJlciA9
IHN0YXRpY19jYXN0PFJlbmRlclNWR1JlY3QqPih0aGlzLT5yZW5kZXJlcigpKTsKICAgICBpZiAo
IXJlbmRlcmVyKQogICAgICAgICByZXR1cm47CiAKICAgICBpZiAoaXNMZW5ndGhBdHRyaWJ1dGUp
IHsKLSAgICAgICAgcmVuZGVyZXItPnNldE5lZWRzUGF0aFVwZGF0ZSgpOworICAgICAgICByZW5k
ZXJlci0+c2V0TmVlZHNTaGFwZVVwZGF0ZSgpOwogICAgICAgICBSZW5kZXJTVkdSZXNvdXJjZTo6
bWFya0ZvckxheW91dEFuZFBhcmVudFJlc291cmNlSW52YWxpZGF0aW9uKHJlbmRlcmVyKTsKICAg
ICAgICAgcmV0dXJuOwogICAgIH0KQEAgLTE5OCw2ICsyMDEsMTEgQEAgYm9vbCBTVkdSZWN0RWxl
bWVudDo6c2VsZkhhc1JlbGF0aXZlTGVuZ3RocygpIGNvbnN0CiAgICAgICAgIHx8IHJ5KCkuaXNS
ZWxhdGl2ZSgpOwogfQogCitSZW5kZXJPYmplY3QqIFNWR1JlY3RFbGVtZW50OjpjcmVhdGVSZW5k
ZXJlcihSZW5kZXJBcmVuYSogYXJlbmEsIFJlbmRlclN0eWxlKikKK3sKKyAgICByZXR1cm4gbmV3
IChhcmVuYSkgUmVuZGVyU1ZHUmVjdCh0aGlzKTsKK30KKwogfQogCiAjZW5kaWYgLy8gRU5BQkxF
KFNWRykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdSZWN0RWxlbWVudC5oIGIv
U291cmNlL1dlYkNvcmUvc3ZnL1NWR1JlY3RFbGVtZW50LmgKaW5kZXggOTk0MzdmMy4uOWJmNjAy
ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvc3ZnL1NWR1JlY3RFbGVtZW50LmgKKysrIGIv
U291cmNlL1dlYkNvcmUvc3ZnL1NWR1JlY3RFbGVtZW50LmgKQEAgLTUyLDYgKzUyLDggQEAgcHJp
dmF0ZToKIAogICAgIHZpcnR1YWwgYm9vbCBzZWxmSGFzUmVsYXRpdmVMZW5ndGhzKCkgY29uc3Q7
CiAKKyAgICBSZW5kZXJPYmplY3QqIGNyZWF0ZVJlbmRlcmVyKFJlbmRlckFyZW5hKiwgUmVuZGVy
U3R5bGUqKTsKKwogICAgIEJFR0lOX0RFQ0xBUkVfQU5JTUFURURfUFJPUEVSVElFUyhTVkdSZWN0
RWxlbWVudCkKICAgICAgICAgREVDTEFSRV9BTklNQVRFRF9MRU5HVEgoWCwgeCkKICAgICAgICAg
REVDTEFSRV9BTklNQVRFRF9MRU5HVEgoWSwgeSkKLS0gCjEuNy41LjQKCg==
</data>
<flag name="review"
          id="103225"
          type_id="1"
          status="-"
          setter="krit"
    />
    <flag name="commit-queue"
          id="103226"
          type_id="3"
          status="-"
          setter="rhodovan.u-szeged"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="0"
              isprivate="0"
          >
            <attachid>107031</attachid>
            <date>2011-09-12 02:17:54 -0700</date>
            <delta_ts>2011-09-12 02:18:54 -0700</delta_ts>
            <desc>Propsed patch</desc>
            <filename>.xsession-errors</filename>
            <type>text/plain</type>
            <size>2951</size>
            <attacher name="Renata Hodovan">rhodovan.u-szeged</attacher>
            
              <data encoding="base64">L2V0Yy9nZG0vWHNlc3Npb246IEJlZ2lubmluZyBzZXNzaW9uIHNldHVwLi4uClNldHRpbmcgSU0g
dGhyb3VnaCBpbS1zd2l0Y2ggZm9yIGxvY2FsZT1odV9IVS4KU3RhcnQgSU0gdGhyb3VnaCAvZXRj
L1gxMS94aW5pdC94aW5wdXQuZC9hbGxfQUxMIGxpbmtlZCB0byAvZXRjL1gxMS94aW5pdC94aW5w
dXQuZC9kZWZhdWx0LgpHTk9NRV9LRVlSSU5HX0NPTlRST0w9L3RtcC9rZXlyaW5nLW14UGRUYwpH
Tk9NRV9LRVlSSU5HX0NPTlRST0w9L3RtcC9rZXlyaW5nLW14UGRUYwpTU0hfQVVUSF9TT0NLPS90
bXAva2V5cmluZy1teFBkVGMvc3NoCkdOT01FX0tFWVJJTkdfQ09OVFJPTD0vdG1wL2tleXJpbmct
bXhQZFRjClNTSF9BVVRIX1NPQ0s9L3RtcC9rZXlyaW5nLW14UGRUYy9zc2gKSW5pdGlhbGl6aW5n
IG5hdXRpbHVzLWdkdSBleHRlbnNpb24KCihuYXV0aWx1czoxNDI5KTogR0xpYi1HT2JqZWN0LUNS
SVRJQ0FMICoqOiBnX29iamVjdF91bnJlZjogYXNzZXJ0aW9uIGBHX0lTX09CSkVDVCAob2JqZWN0
KScgZmFpbGVkCjEyLzA5LzIwMTEgMDcuNTAuMDQgQXV0b3Byb2JpbmcgVENQIHBvcnQgaW4gKGFs
bCkgbmV0d29yayBpbnRlcmZhY2UKMTIvMDkvMjAxMSAwNy41MC4wNCBMaXN0ZW5pbmcgSVB2Njov
L1s6Ol06NTkwMAoxMi8wOS8yMDExIDA3LjUwLjA0IExpc3RlbmluZyBJUHY0Oi8vMC4wLjAuMDo1
OTAwCjEyLzA5LzIwMTEgMDcuNTAuMDQgQXV0b3Byb2Jpbmcgc2VsZWN0ZWQgcG9ydCA1OTAwCjEy
LzA5LzIwMTEgMDcuNTAuMDQgQWR2ZXJ0aXNpbmcgc2VjdXJpdHkgdHlwZTogJ1RMUycgKDE4KQox
Mi8wOS8yMDExIDA3LjUwLjA0IEFkdmVydGlzaW5nIGF1dGhlbnRpY2F0aW9uIHR5cGU6ICdObyBB
dXRoZW50aWNhdGlvbicgKDEpCjEyLzA5LzIwMTEgMDcuNTAuMDQgQWR2ZXJ0aXNpbmcgc2VjdXJp
dHkgdHlwZTogJ05vIEF1dGhlbnRpY2F0aW9uJyAoMSkKc2VuZHRvOiBBIGjDoWzDs3phdCBlbMOp
cmhldGV0bGVuCgoobmF1dGlsdXM6MTQyOSk6IEdMaWItR09iamVjdC1DUklUSUNBTCAqKjogZ192
YWx1ZV9nZXRfb2JqZWN0OiBhc3NlcnRpb24gYEdfVkFMVUVfSE9MRFNfT0JKRUNUICh2YWx1ZSkn
IGZhaWxlZAoKKG5hdXRpbHVzOjE0MjkpOiBHTGliLUdPYmplY3QtQ1JJVElDQUwgKio6IGdfdmFs
dWVfZ2V0X29iamVjdDogYXNzZXJ0aW9uIGBHX1ZBTFVFX0hPTERTX09CSkVDVCAodmFsdWUpJyBm
YWlsZWQKCihuYXV0aWx1czoxNDI5KTogR0xpYi1HT2JqZWN0LUNSSVRJQ0FMICoqOiBnX3ZhbHVl
X2dldF9vYmplY3Q6IGFzc2VydGlvbiBgR19WQUxVRV9IT0xEU19PQkpFQ1QgKHZhbHVlKScgZmFp
bGVkCgoobmF1dGlsdXM6MTQyOSk6IEdMaWItR09iamVjdC1DUklUSUNBTCAqKjogZ192YWx1ZV9n
ZXRfb2JqZWN0OiBhc3NlcnRpb24gYEdfVkFMVUVfSE9MRFNfT0JKRUNUICh2YWx1ZSknIGZhaWxl
ZAoKKG5hdXRpbHVzOjE0MjkpOiBHTGliLUdPYmplY3QtQ1JJVElDQUwgKio6IGdfdmFsdWVfZ2V0
X29iamVjdDogYXNzZXJ0aW9uIGBHX1ZBTFVFX0hPTERTX09CSkVDVCAodmFsdWUpJyBmYWlsZWQK
CihuYXV0aWx1czoxNDI5KTogR0xpYi1HT2JqZWN0LUNSSVRJQ0FMICoqOiBnX3ZhbHVlX2dldF9v
YmplY3Q6IGFzc2VydGlvbiBgR19WQUxVRV9IT0xEU19PQkpFQ1QgKHZhbHVlKScgZmFpbGVkCgoo
bmF1dGlsdXM6MTQyOSk6IEdMaWItR09iamVjdC1DUklUSUNBTCAqKjogZ192YWx1ZV9nZXRfb2Jq
ZWN0OiBhc3NlcnRpb24gYEdfVkFMVUVfSE9MRFNfT0JKRUNUICh2YWx1ZSknIGZhaWxlZAoKKG5h
dXRpbHVzOjE0MjkpOiBHTGliLUdPYmplY3QtQ1JJVElDQUwgKio6IGdfdmFsdWVfZ2V0X29iamVj
dDogYXNzZXJ0aW9uIGBHX1ZBTFVFX0hPTERTX09CSkVDVCAodmFsdWUpJyBmYWlsZWQKCihuYXV0
aWx1czoxNDI5KTogR0xpYi1HT2JqZWN0LUNSSVRJQ0FMICoqOiBnX3ZhbHVlX2dldF9vYmplY3Q6
IGFzc2VydGlvbiBgR19WQUxVRV9IT0xEU19PQkpFQ1QgKHZhbHVlKScgZmFpbGVkCgoobmF1dGls
dXM6MTQyOSk6IEdMaWItR09iamVjdC1DUklUSUNBTCAqKjogZ192YWx1ZV9nZXRfb2JqZWN0OiBh
c3NlcnRpb24gYEdfVkFMVUVfSE9MRFNfT0JKRUNUICh2YWx1ZSknIGZhaWxlZAoKKG5hdXRpbHVz
OjE0MjkpOiBHTGliLUdPYmplY3QtQ1JJVElDQUwgKio6IGdfdmFsdWVfZ2V0X29iamVjdDogYXNz
ZXJ0aW9uIGBHX1ZBTFVFX0hPTERTX09CSkVDVCAodmFsdWUpJyBmYWlsZWQKCihuYXV0aWx1czox
NDI5KTogR0xpYi1HT2JqZWN0LUNSSVRJQ0FMICoqOiBnX3ZhbHVlX2dldF9vYmplY3Q6IGFzc2Vy
dGlvbiBgR19WQUxVRV9IT0xEU19PQkpFQ1QgKHZhbHVlKScgZmFpbGVkCioqIChwcm9jZXNzOjE0
MzQpOiBERUJVRzogemVpdGdlaXN0LWRhdGFodWIudmFsYToxNzQ6IEluc2VydGluZyA0IGV2ZW50
cwoqKiAobm0tYXBwbGV0OjE0NTIpOiBERUJVRzogZm9vX2NsaWVudF9zdGF0ZV9jaGFuZ2VkX2Ni
CgoqKiAodGVybWluYXRvcjoyMzQ0KTogV0FSTklORyAqKjogQmluZGluZyAnPFNoaWZ0PjxDb250
cm9sPjxBbHQ+YScgZmFpbGVkIQpVbmFibGUgdG8gYmluZCBoaWRlX3dpbmRvdyBrZXksIGFub3Ro
ZXIgaW5zdGFuY2Uvd2luZG93IGhhcyBpdC4KCioqICh0ZXJtaW5hdG9yOjMzMjYpOiBXQVJOSU5H
ICoqOiBCaW5kaW5nICc8U2hpZnQ+PENvbnRyb2w+PEFsdD5hJyBmYWlsZWQhClVuYWJsZSB0byBi
aW5kIGhpZGVfd2luZG93IGtleSwgYW5vdGhlciBpbnN0YW5jZS93aW5kb3cgaGFzIGl0LgoqKiAo
cHJvY2VzczoxNDM0KTogREVCVUc6IHplaXRnZWlzdC1kYXRhaHViLnZhbGE6MTc0OiBJbnNlcnRp
bmcgMSBldmVudHMKKiogKHByb2Nlc3M6MTQzNCk6IERFQlVHOiB6ZWl0Z2Vpc3QtZGF0YWh1Yi52
YWxhOjE3NDogSW5zZXJ0aW5nIDEgZXZlbnRzCioqIChwcm9jZXNzOjE0MzQpOiBERUJVRzogemVp
dGdlaXN0LWRhdGFodWIudmFsYToxNzQ6IEluc2VydGluZyAxIGV2ZW50cwo=
</data>
<flag name="commit-queue"
          id="103623"
          type_id="3"
          status="-"
          setter="rhodovan.u-szeged"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>107032</attachid>
            <date>2011-09-12 02:19:25 -0700</date>
            <delta_ts>2011-09-14 07:09:19 -0700</delta_ts>
            <desc>Propsed patch</desc>
            <filename>0001-krit-review.patch</filename>
            <type>text/plain</type>
            <size>104533</size>
            <attacher name="Renata Hodovan">rhodovan.u-szeged</attacher>
            
              <data encoding="base64">RnJvbSA5NDA2MjY4NzUyZTRlZjgzOTkyYzllOTc1NDRjNzE4NWE1NGFjN2FjIE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBSZW5hdGEgSG9kb3ZhbiA8cmVuaUB3ZWJraXQub3JnPgpEYXRl
OiBNb24sIDEyIFNlcCAyMDExIDExOjA5OjM3ICswMjAwClN1YmplY3Q6IFtQQVRDSF0ga3JpdCBy
ZXZpZXcKCi0tLQogLi4uL3BvaW50ZXItZXZlbnRzLW9uLXJvdW5kZWQtcmVjdC1leHBlY3RlZC50
eHQgICAgfCAgICAzICsKIC4uLi9zdmcvY3VzdG9tL3BvaW50ZXItZXZlbnRzLW9uLXJvdW5kZWQt
cmVjdC5zdmcgIHwgICA2NiArKysKIC4uLi9wb2ludGVyLWV2ZW50cy1vbi1zdmctd2l0aC1wb2lu
dGVyLnhodG1sICAgICAgIHwgICAxMiArLQogLi4uZW50cy13aXRoLWxpbmVjYXBzLWFuZC1taXRl
cmxpbWl0cy1leHBlY3RlZC50eHQgfCAgICAzICsKIC4uLm9pbnRlci1ldmVudHMtd2l0aC1saW5l
Y2Fwcy1hbmQtbWl0ZXJsaW1pdHMuc3ZnIHwgICA2NSArKysKIFNvdXJjZS9XZWJDb3JlL0NNYWtl
TGlzdHMudHh0ICAgICAgICAgICAgICAgICAgICAgIHwgICAgMiArCiBTb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAxMzYgKysrKysrCiBTb3VyY2Uv
V2ViQ29yZS9HTlVtYWtlZmlsZS5saXN0LmFtICAgICAgICAgICAgICAgICB8ICAgIDQgKwogU291
cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBpICAgICAgICAgICAgICAgICAgICAgICAgfCAgICA0ICsK
IFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUucHJvICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAg
NCArCiBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnZjcHJvai9XZWJDb3JlLnZjcHJvaiAgICAgICB8
ICAxMTIgKysrKysKIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0Zsb2F0UmVjdC5j
cHAgICAgIHwgICAgNyArCiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9GbG9hdFJl
Y3QuaCAgICAgICB8ICAgIDEgKwogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck9iamVj
dC5oICAgICAgICAgICAgfCAgICAzICsKIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJU
cmVlQXNUZXh0LmNwcCAgICAgIHwgICAgNCArLQogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2
Zy9SZW5kZXJTVkdBbGxJbk9uZS5jcHAgfCAgICAyICsKIC4uLi9XZWJDb3JlL3JlbmRlcmluZy9z
dmcvUmVuZGVyU1ZHTW9kZWxPYmplY3QuY3BwIHwgICAgMiArLQogU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL3N2Zy9SZW5kZXJTVkdQYXRoLmNwcCAgICAgfCAgMzU1ICstLS0tLS0tLS0tLS0tLS0t
CiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1BhdGguaCAgICAgICB8ICAg
NzUgKy0tLQogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZWN0LmNwcCAg
ICAgfCAgMTE1ICsrKysrKwogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdS
ZWN0LmggICAgICAgfCAgIDYzICsrKwogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5k
ZXJTVkdSZXNvdXJjZS5oICAgfCAgICAzICstCiAuLi4vcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdS
ZXNvdXJjZUNsaXBwZXIuY3BwICAgICB8ICAgIDYgKy0KIC4uLi9yZW5kZXJpbmcvc3ZnL1JlbmRl
clNWR1Jlc291cmNlQ29udGFpbmVyLmNwcCAgIHwgICAgMiArLQogLi4uL3JlbmRlcmluZy9zdmcv
UmVuZGVyU1ZHUmVzb3VyY2VGaWx0ZXIuY3BwICAgICAgfCAgICA1ICstCiAuLi4vcmVuZGVyaW5n
L3N2Zy9SZW5kZXJTVkdSZXNvdXJjZUZpbHRlci5oICAgICAgICB8ICAgIDIgKy0KIC4uLi9yZW5k
ZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291cmNlR3JhZGllbnQuY3BwICAgIHwgICAxMCArLQogLi4u
L3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VHcmFkaWVudC5oICAgICAgfCAgICAyICst
CiAuLi4vcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJjZVBhdHRlcm4uY3BwICAgICB8ICAg
IDggKy0KIC4uLi9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291cmNlUGF0dGVybi5oICAgICAg
IHwgICAgMiArLQogLi4uL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VTb2xpZENvbG9y
LmNwcCAgfCAgICA5ICstCiAuLi4vcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJjZVNvbGlk
Q29sb3IuaCAgICB8ICAgIDIgKy0KIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVy
U1ZHU2hhcGUuY3BwICAgIHwgIDQzNCArKysrKysrKysrKysrKysrKysrKwogU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdTaGFwZS5oICAgICAgfCAgMTU4ICsrKysrKysKIFNv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHSW5saW5lVGV4dEJveC5jcHAgIHwgICAgMiAr
LQogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdSZW5kZXJTdXBwb3J0LmNwcCAgfCAg
ICA4ICstCiAuLi4vV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR1JlbmRlclRyZWVBc1RleHQuY3Bw
ICB8ICAgMzEgKy0KIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHUmVuZGVyVHJlZUFz
VGV4dC5oIHwgICAgNCArLQogLi4uL3JlbmRlcmluZy9zdmcvU1ZHVGV4dFJ1blJlbmRlcmluZ0Nv
bnRleHQuY3BwICAgfCAgICAyICstCiBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHQ2lyY2xlRWxlbWVu
dC5jcHAgICAgICAgICAgICB8ICAgIDIgKy0KIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdFbGxpcHNl
RWxlbWVudC5jcHAgICAgICAgICAgIHwgICAgMiArLQogU291cmNlL1dlYkNvcmUvc3ZnL1NWR0xp
bmVFbGVtZW50LmNwcCAgICAgICAgICAgICAgfCAgICAyICstCiBTb3VyY2UvV2ViQ29yZS9zdmcv
U1ZHUGF0aEVsZW1lbnQuY3BwICAgICAgICAgICAgICB8ICAgMTAgKy0KIFNvdXJjZS9XZWJDb3Jl
L3N2Zy9TVkdQYXRoRWxlbWVudC5oICAgICAgICAgICAgICAgIHwgICAgMiArCiBTb3VyY2UvV2Vi
Q29yZS9zdmcvU1ZHUG9seUVsZW1lbnQuY3BwICAgICAgICAgICAgICB8ICAgIDIgKy0KIFNvdXJj
ZS9XZWJDb3JlL3N2Zy9TVkdSZWN0RWxlbWVudC5jcHAgICAgICAgICAgICAgIHwgICAxMiArLQog
U291cmNlL1dlYkNvcmUvc3ZnL1NWR1JlY3RFbGVtZW50LmggICAgICAgICAgICAgICAgfCAgICAy
ICsKIDQ4IGZpbGVzIGNoYW5nZWQsIDEyOTIgaW5zZXJ0aW9ucygrKSwgNDcwIGRlbGV0aW9ucygt
KQogY3JlYXRlIG1vZGUgMTAwNjQ0IExheW91dFRlc3RzL3N2Zy9jdXN0b20vcG9pbnRlci1ldmVu
dHMtb24tcm91bmRlZC1yZWN0LWV4cGVjdGVkLnR4dAogY3JlYXRlIG1vZGUgMTAwNjQ0IExheW91
dFRlc3RzL3N2Zy9jdXN0b20vcG9pbnRlci1ldmVudHMtb24tcm91bmRlZC1yZWN0LnN2ZwogY3Jl
YXRlIG1vZGUgMTAwNjQ0IExheW91dFRlc3RzL3N2Zy9jdXN0b20vcG9pbnRlci1ldmVudHMtd2l0
aC1saW5lY2Fwcy1hbmQtbWl0ZXJsaW1pdHMtZXhwZWN0ZWQudHh0CiBjcmVhdGUgbW9kZSAxMDA2
NDQgTGF5b3V0VGVzdHMvc3ZnL2N1c3RvbS9wb2ludGVyLWV2ZW50cy13aXRoLWxpbmVjYXBzLWFu
ZC1taXRlcmxpbWl0cy5zdmcKIGNyZWF0ZSBtb2RlIDEwMDY0NCBTb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvc3ZnL1JlbmRlclNWR1JlY3QuY3BwCiBjcmVhdGUgbW9kZSAxMDA2NDQgU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZWN0LmgKIGNyZWF0ZSBtb2RlIDEwMDY0NCBT
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1NoYXBlLmNwcAogY3JlYXRlIG1v
ZGUgMTAwNjQ0IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHU2hhcGUuaAoK
ZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3N2Zy9jdXN0b20vcG9pbnRlci1ldmVudHMtb24tcm91
bmRlZC1yZWN0LWV4cGVjdGVkLnR4dCBiL0xheW91dFRlc3RzL3N2Zy9jdXN0b20vcG9pbnRlci1l
dmVudHMtb24tcm91bmRlZC1yZWN0LWV4cGVjdGVkLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwMDAwMDAwLi5kYjAwZGYyCi0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvc3Zn
L2N1c3RvbS9wb2ludGVyLWV2ZW50cy1vbi1yb3VuZGVkLXJlY3QtZXhwZWN0ZWQudHh0CkBAIC0w
LDAgKzEsMyBAQAorUEFTU0VEOiBmYWxsYmFja1JlY3QgaGFkIHBvaW50ZXIKKworCmRpZmYgLS1n
aXQgYS9MYXlvdXRUZXN0cy9zdmcvY3VzdG9tL3BvaW50ZXItZXZlbnRzLW9uLXJvdW5kZWQtcmVj
dC5zdmcgYi9MYXlvdXRUZXN0cy9zdmcvY3VzdG9tL3BvaW50ZXItZXZlbnRzLW9uLXJvdW5kZWQt
cmVjdC5zdmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2YwN2FiZAotLS0g
L2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL3N2Zy9jdXN0b20vcG9pbnRlci1ldmVudHMtb24t
cm91bmRlZC1yZWN0LnN2ZwpAQCAtMCwwICsxLDY2IEBACis8aHRtbCB4bWxucz0naHR0cDovL3d3
dy53My5vcmcvMTk5OS94aHRtbCc+Cis8Ym9keSBzdHlsZT0ibWFyZ2luOiAwcHg7IHBhZGRpbmc6
IDBweCI+Cis8cD48L3A+CisKKzxzdmcgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3Zn
IiBzdHlsZT0icG9zaXRpb246YWJzb2x1dGU7Ij4KKzxkZWZzPgorCis8c3R5bGUgdHlwZT0idGV4
dC9jc3MiPjwhW0NEQVRBWworcmVjdCNyb3VuZGVkUmVjdCB7CisJZmlsbDogbm9uZTsKKwlzdHJv
a2U6IGdyZWVuOworCXN0cm9rZS13aWR0aDogMjBweDsKKwlzdHJva2UtbGluZWpvaW46IGJldmVs
OworfQorcmVjdDpob3ZlciB7CisJc3Ryb2tlOiByZWQ7Cit9IAorXV0+PC9zdHlsZT4KKzwvZGVm
cz4KKworPHJlY3QgaWQ9ImZhbGxiYWNrIiB4PSIzMCIgeT0iMzAiIHdpZHRoPSI0MjAiIGhlaWdo
dD0iMzIwIiBmaWxsPSJ5ZWxsb3ciIG9uY2xpY2s9InBhc3NlZCgpIi8+Cis8cmVjdCBpZD0icm91
bmRlZFJlY3QiIHg9IjQwIiB5PSI0MCIgcng9IjMwIiByeT0iMzAiIHdpZHRoPSI0MDAiIGhlaWdo
dD0iMzAwIiBwb2ludGVyLWV2ZW50cz0idmlzaWJsZVN0cm9rZSIgb25jbGljaz0iZmFpbGVkKCki
Lz4KKworPHNjcmlwdCB0eXBlPSJ0ZXh0L2VjbWFzY3JpcHQiPgorICAgIDwhW0NEQVRBWworCit2
YXIgZmFsbGJhY2sgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiZmFsbGJhY2siKTsKK3ZhciBy
b3VuZGVkUmVjdCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJyb3VuZGVkUmVjdCIpOwordmFy
IHAgPSBkb2N1bWVudC5nZXRFbGVtZW50c0J5VGFnTmFtZSgicCIpWzBdOworCitmYWxsYmFjay5h
ZGRFdmVudExpc3RlbmVyKCJtb3VzZWRvd24iLCBwYXNzZWQsIGZhbHNlKTsKK3JvdW5kZWRSZWN0
LmFkZEV2ZW50TGlzdGVuZXIoIm1vdXNlZG93biIsIGZhaWxlZCwgZmFsc2UpOworCitmdW5jdGlv
biBzdG9wKCkgeworICAgIGZhbGxiYWNrLnJlbW92ZUV2ZW50TGlzdGVuZXIoIm1vdXNlZG93biIs
IGZhaWxlZCwgZmFsc2UpOworICAgIHJvdW5kZWRSZWN0LnJlbW92ZUV2ZW50TGlzdGVuZXIoIm1v
dXNlZG93biIsIHBhc3NlZCwgZmFsc2UpOworCisgICAgaWYgKHdpbmRvdy5sYXlvdXRUZXN0Q29u
dHJvbGxlcikKKyAgICAgICAgbGF5b3V0VGVzdENvbnRyb2xsZXIubm90aWZ5RG9uZSgpOworfQor
CitmdW5jdGlvbiBmYWlsZWQoKSB7CisgICAgcC5pbm5lckhUTUwgPSAnRkFJTEVEOiBzdHJva2VS
ZWN0IGhhZCBwb2ludGVyJzsKKyAgICBzdG9wKCk7Cit9CisKK2Z1bmN0aW9uIHBhc3NlZCgpIHsK
KyAgICBwLmlubmVySFRNTCA9ICdQQVNTRUQ6IGZhbGxiYWNrUmVjdCBoYWQgcG9pbnRlcic7Cisg
ICAgc3RvcCgpOworfQorCitpZiAod2luZG93LmxheW91dFRlc3RDb250cm9sbGVyKSB7CisgICAg
bGF5b3V0VGVzdENvbnRyb2xsZXIud2FpdFVudGlsRG9uZSgpOworICAgIGxheW91dFRlc3RDb250
cm9sbGVyLmR1bXBBc1RleHQoKTsKK30KKworaWYgKHdpbmRvdy5ldmVudFNlbmRlcikgeworICAg
IGV2ZW50U2VuZGVyLm1vdXNlTW92ZVRvKDUwLCA1MCk7CisgICAgZXZlbnRTZW5kZXIubW91c2VE
b3duKCk7Cit9CitdXT4KKyAgPC9zY3JpcHQ+CisKKzwvc3ZnPgorPC9ib2R5PgorPC9odG1sPgpk
aWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvc3ZnL2N1c3RvbS9wb2ludGVyLWV2ZW50cy1vbi1zdmct
d2l0aC1wb2ludGVyLnhodG1sIGIvTGF5b3V0VGVzdHMvc3ZnL2N1c3RvbS9wb2ludGVyLWV2ZW50
cy1vbi1zdmctd2l0aC1wb2ludGVyLnhodG1sCmluZGV4IGJkNmRiYTQuLjAxNjM4ODEgMTAwNjQ0
Ci0tLSBhL0xheW91dFRlc3RzL3N2Zy9jdXN0b20vcG9pbnRlci1ldmVudHMtb24tc3ZnLXdpdGgt
cG9pbnRlci54aHRtbAorKysgYi9MYXlvdXRUZXN0cy9zdmcvY3VzdG9tL3BvaW50ZXItZXZlbnRz
LW9uLXN2Zy13aXRoLXBvaW50ZXIueGh0bWwKQEAgLTMsNyArMywxNyBAQAogPHA+PC9wPgogPGRp
diBzdHlsZT0icG9zaXRpb246YWJzb2x1dGU7IHRvcDo1MHB4OyBsZWZ0OjBweDsgd2lkdGg6MTAw
cHg7IGhlaWdodDoxMDBweDsgYmFja2dyb3VuZC1jb2xvcjpibHVlOyI+PC9kaXY+CiA8c3ZnIHht
bG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgc3R5bGU9InBvc2l0aW9uOmFic29sdXRl
OyB0b3A6NTBweDsgbGVmdDowcHg7IHdpZHRoOjEwMHB4OyBoZWlnaHQ6MTAwcHg7Ij4KLSAgICA8
cmVjdCB3aWR0aD0iMTAwIiBoZWlnaHQ9IjEwMCIgZmlsbD0iZ3JlZW4iIHBvaW50ZXItZXZlbnRz
PSJub25lIi8+Cis8ZGVmcz4KKworPHN0eWxlIHR5cGU9InRleHQvY3NzIj48IVtDREFUQVsKKwor
cmVjdDpob3ZlciB7CisJc3Ryb2tlOiBncmVlbjsKK30gCitdXT48L3N0eWxlPgorPC9kZWZzPgor
CisgICAgPHJlY3Qgd2lkdGg9IjEwMCIgaGVpZ2h0PSIxMDAiIGZpbGw9Im5vbmUiIHN0cm9rZS13
aWR0aD0iMjAiIHN0cm9rZT0icmVkIi8+CiA8L3N2Zz4KIDxzY3JpcHQ+CiAgICAgdmFyIHN2ZyA9
IGRvY3VtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKCJzdmciKVswXTsKZGlmZiAtLWdpdCBhL0xh
eW91dFRlc3RzL3N2Zy9jdXN0b20vcG9pbnRlci1ldmVudHMtd2l0aC1saW5lY2Fwcy1hbmQtbWl0
ZXJsaW1pdHMtZXhwZWN0ZWQudHh0IGIvTGF5b3V0VGVzdHMvc3ZnL2N1c3RvbS9wb2ludGVyLWV2
ZW50cy13aXRoLWxpbmVjYXBzLWFuZC1taXRlcmxpbWl0cy1leHBlY3RlZC50eHQKbmV3IGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGIwMGRmMgotLS0gL2Rldi9udWxsCisrKyBiL0xh
eW91dFRlc3RzL3N2Zy9jdXN0b20vcG9pbnRlci1ldmVudHMtd2l0aC1saW5lY2Fwcy1hbmQtbWl0
ZXJsaW1pdHMtZXhwZWN0ZWQudHh0CkBAIC0wLDAgKzEsMyBAQAorUEFTU0VEOiBmYWxsYmFja1Jl
Y3QgaGFkIHBvaW50ZXIKKworCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9zdmcvY3VzdG9tL3Bv
aW50ZXItZXZlbnRzLXdpdGgtbGluZWNhcHMtYW5kLW1pdGVybGltaXRzLnN2ZyBiL0xheW91dFRl
c3RzL3N2Zy9jdXN0b20vcG9pbnRlci1ldmVudHMtd2l0aC1saW5lY2Fwcy1hbmQtbWl0ZXJsaW1p
dHMuc3ZnCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNjYzRjMWUKLS0tIC9k
ZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9zdmcvY3VzdG9tL3BvaW50ZXItZXZlbnRzLXdpdGgt
bGluZWNhcHMtYW5kLW1pdGVybGltaXRzLnN2ZwpAQCAtMCwwICsxLDY1IEBACis8aHRtbCB4bWxu
cz0naHR0cDovL3d3dy53My5vcmcvMTk5OS94aHRtbCc+Cis8Ym9keSBzdHlsZT0ibWFyZ2luOiAw
cHg7IHBhZGRpbmc6IDBweCI+Cis8cD48L3A+CisKKzxzdmcgeG1sbnM9Imh0dHA6Ly93d3cudzMu
b3JnLzIwMDAvc3ZnIiBzdHlsZT0icG9zaXRpb246YWJzb2x1dGU7Ij4KKzxkZWZzPgorCis8c3R5
bGUgdHlwZT0idGV4dC9jc3MiPjwhW0NEQVRBWworcmVjdCNzdHJva2VkUmVjdCB7CisJc3Ryb2tl
OiBibHVlOworCXN0cm9rZS13aWR0aDogMjBweDsKKwlzdHJva2UtbGluZWNhcDogcm91bmQ7CisJ
c3Ryb2tlLW1pdGVybGltaXQ6IDE7Cit9IAorcmVjdCNzdHJva2VkUmVjdDpob3ZlciB7CisJc3Ry
b2tlOiByZWQ7Cit9CitdXT48L3N0eWxlPgorPC9kZWZzPgorCis8cmVjdCBpZD0iZmFsbGJhY2si
IHg9IjAiIHk9IjAiIHdpZHRoPSIyMTAiIGhlaWdodD0iMjEwIiBmaWxsPSJncmVlbiIgb25jbGlj
az0icGFzc2VkKCkiLz4KKzxyZWN0IGlkPSJzdHJva2VkUmVjdCIgeD0iMTAiIHk9IjEwIiB3aWR0
aD0iMTkwIiBoZWlnaHQ9IjE5MCIgZmlsbD0ibm9uZSIgc3Ryb2tlLXdpZHRoPSIxMCIgcG9pbnRl
ci1ldmVudHM9InZpc2libGVTdHJva2UiIG9uY2xpY2s9ImZhaWxlZCgpIi8+IAorCis8c2NyaXB0
IHR5cGU9InRleHQvZWNtYXNjcmlwdCI+CisgICAgPCFbQ0RBVEFbCisKK3ZhciBmYWxsYmFjayA9
IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJmYWxsYmFjayIpOwordmFyIHN0cm9rZWRSZWN0ID0g
ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoInN0cm9rZWRSZWN0Iik7Cit2YXIgcCA9IGRvY3VtZW50
LmdldEVsZW1lbnRzQnlUYWdOYW1lKCJwIilbMF07CisKK2ZhbGxiYWNrLmFkZEV2ZW50TGlzdGVu
ZXIoIm1vdXNlZG93biIsIHBhc3NlZCwgZmFsc2UpOworc3Ryb2tlZFJlY3QuYWRkRXZlbnRMaXN0
ZW5lcigibW91c2Vkb3duIiwgZmFpbGVkLCBmYWxzZSk7CisKK2Z1bmN0aW9uIHN0b3AoKSB7Cisg
ICAgZmFsbGJhY2sucmVtb3ZlRXZlbnRMaXN0ZW5lcigibW91c2Vkb3duIiwgZmFpbGVkLCBmYWxz
ZSk7CisgICAgc3Ryb2tlZFJlY3QucmVtb3ZlRXZlbnRMaXN0ZW5lcigibW91c2Vkb3duIiwgcGFz
c2VkLCBmYWxzZSk7CisKKyAgICBpZiAod2luZG93LmxheW91dFRlc3RDb250cm9sbGVyKQorICAg
ICAgICBsYXlvdXRUZXN0Q29udHJvbGxlci5ub3RpZnlEb25lKCk7Cit9CisKK2Z1bmN0aW9uIGZh
aWxlZCgpIHsKKyAgICBwLmlubmVySFRNTCA9ICdGQUlMRUQ6IHN0cm9rZVJlY3QgaGFkIHBvaW50
ZXInOworICAgIHN0b3AoKTsKK30KKworZnVuY3Rpb24gcGFzc2VkKCkgeworICAgIHAuaW5uZXJI
VE1MID0gJ1BBU1NFRDogZmFsbGJhY2tSZWN0IGhhZCBwb2ludGVyJzsKKyAgICBzdG9wKCk7Cit9
CisKK2lmICh3aW5kb3cubGF5b3V0VGVzdENvbnRyb2xsZXIpIHsKKyAgICBsYXlvdXRUZXN0Q29u
dHJvbGxlci53YWl0VW50aWxEb25lKCk7CisgICAgbGF5b3V0VGVzdENvbnRyb2xsZXIuZHVtcEFz
VGV4dCgpOworfQorCitpZiAod2luZG93LmV2ZW50U2VuZGVyKSB7CisgICAgZXZlbnRTZW5kZXIu
bW91c2VNb3ZlVG8oNSwgMjApOworICAgIGV2ZW50U2VuZGVyLm1vdXNlRG93bigpOworfQorXV0+
CisgIDwvc2NyaXB0PgorPC9zdmc+Cis8L2JvZHk+Cis8L2h0bWw+CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9DTWFrZUxpc3RzLnR4dCBiL1NvdXJjZS9XZWJDb3JlL0NNYWtlTGlzdHMudHh0
CmluZGV4IDdhNTIwNTcuLmJjY2JlMDIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL0NNYWtl
TGlzdHMudHh0CisrKyBiL1NvdXJjZS9XZWJDb3JlL0NNYWtlTGlzdHMudHh0CkBAIC0xNTk3LDYg
KzE1OTcsNyBAQCBJRiAoRU5BQkxFX1NWRykKICAgICAgICAgcmVuZGVyaW5nL3N2Zy9SZW5kZXJT
VkdJbmxpbmVUZXh0LmNwcAogICAgICAgICByZW5kZXJpbmcvc3ZnL1JlbmRlclNWR01vZGVsT2Jq
ZWN0LmNwcAogICAgICAgICByZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1BhdGguY3BwCisgICAgICAg
IHJlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVjdC5jcHAKICAgICAgICAgcmVuZGVyaW5nL3N2Zy9S
ZW5kZXJTVkdSZXNvdXJjZS5jcHAKICAgICAgICAgcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNv
dXJjZUNsaXBwZXIuY3BwCiAgICAgICAgIHJlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VD
b250YWluZXIuY3BwCkBAIC0xNjExLDYgKzE2MTIsNyBAQCBJRiAoRU5BQkxFX1NWRykKICAgICAg
ICAgcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJjZVNvbGlkQ29sb3IuY3BwCiAgICAgICAg
IHJlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUm9vdC5jcHAKICAgICAgICAgcmVuZGVyaW5nL3N2Zy9S
ZW5kZXJTVkdTaGFkb3dUcmVlUm9vdENvbnRhaW5lci5jcHAKKyAgICAgICAgcmVuZGVyaW5nL3N2
Zy9SZW5kZXJTVkdTaGFwZS5jcHAKICAgICAgICAgcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdUU3Bh
bi5jcHAKICAgICAgICAgcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdUZXh0LmNwcAogICAgICAgICBy
ZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1RleHRQYXRoLmNwcApkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvQ2hhbmdlTG9nIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCmluZGV4IDA1MDg1OTku
LjNlZGRkMTQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZworKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxMzkgQEAKKzIwMTEtMDktMTIgIFJlbmF0
YSBIb2RvdmFuICA8cmVuaUB3ZWJraXQub3JnPgorCisgICAgICAgIEFkZCBuZXcgcmVuZGVyZXIg
Zm9yIFNWR1JlY3RFbGVtZW50LgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9NjU3NjkKKworICAgICAgICBBZGRpbmcgYSBuZXcgZnJhbWV3b3JrIHRvIHN1
cHBvcnQgdGhlIHJlbmRlcmluZyBvZiBTVkcgc2hhcGVzLgorICAgICAgICBUaGUgbWFpbiBsb2dp
YyB0YWtlcyBwbGFjZSBpbiBSZW5kZXJTVkdTaGFwZSBjbGFzcyBhbmQgZXZlcnkgcmVuZGVyZXIg
d2lsbAorICAgICAgICBpbmhlcml0IGZyb20gaXQuIFNpbmNlIGl0cyBjb2RlIGJhc2UgaXMgbW9z
dGx5IG1vdmVkIGZyb20gUmVuZGVyU1ZHUGF0aCBpdCdzIHN1aXRhYmxlIHRvCisgICAgICAgIGhh
bmRsZSB0aGUgZmFsbGJhY2sgY2FzZXMgKGUuZy46IHJvdW5kZWQgcmVjdHMsIHNwZWNpYWwgc3Ry
b2tlcywgcG9pbnRlciBldmVudHMsIGV0Yy4pLgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9E
WSAoT09QUyEpLgorCisgICAgICAgICogQ01ha2VMaXN0cy50eHQ6CisgICAgICAgICogR05VbWFr
ZWZpbGUubGlzdC5hbToKKyAgICAgICAgKiBXZWJDb3JlLmd5cGk6CisgICAgICAgICogV2ViQ29y
ZS5wcm86CisgICAgICAgICogV2ViQ29yZS52Y3Byb2ovV2ViQ29yZS52Y3Byb2o6CisgICAgICAg
ICogV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICAqIHJlbmRlcmlu
Zy9SZW5kZXJPYmplY3QuaDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlck9iamVjdDo6aXNTVkdM
aW5lKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlck9iamVjdDo6aXNTVkdSZWN0KToKKyAgICAg
ICAgKFdlYkNvcmU6OlJlbmRlck9iamVjdDo6aXNTVkdTaGFwZSk6CisgICAgICAgICogcmVuZGVy
aW5nL1JlbmRlclRyZWVBc1RleHQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6d3JpdGUpOgorICAg
ICAgICAqIHJlbmRlcmluZy9zdmcvUmVuZGVyU1ZHQWxsSW5PbmUuY3BwOgorICAgICAgICAqIHJl
bmRlcmluZy9zdmcvUmVuZGVyU1ZHTW9kZWxPYmplY3QuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
aXNHcmFwaGljc0VsZW1lbnQpOgorICAgICAgICAqIHJlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUGF0
aC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJTVkdQYXRoOjpSZW5kZXJTVkdQYXRoKToK
KyAgICAgICAgKiByZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1BhdGguaDoKKyAgICAgICAgKiByZW5k
ZXJpbmcvc3ZnL1JlbmRlclNWR1JlY3QuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlJl
bmRlclNWR1JlY3Q6OlJlbmRlclNWR1JlY3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU1ZH
UmVjdDo6flJlbmRlclNWR1JlY3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU1ZHUmVjdDo6
Y3JlYXRlU2hhcGUpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU1ZHUmVjdDo6b2JqZWN0Qm91
bmRpbmdCb3gpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU1ZHUmVjdDo6c3Ryb2tlQm91bmRp
bmdCb3gpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU1ZHUmVjdDo6ZmlsbFNoYXBlKToKKyAg
ICAgICAgKFdlYkNvcmU6OlJlbmRlclNWR1JlY3Q6OnN0cm9rZVNoYXBlKToKKyAgICAgICAgKFdl
YkNvcmU6OlJlbmRlclNWR1JlY3Q6OnN0cm9rZUNvbnRhaW5zU2xvd0Nhc2UpOgorICAgICAgICAo
V2ViQ29yZTo6UmVuZGVyU1ZHUmVjdDo6ZmlsbENvbnRhaW5zU2xvd0Nhc2UpOgorICAgICAgICAo
V2ViQ29yZTo6UmVuZGVyU1ZHUmVjdDo6ZGV0ZXJtaW5lUG9pbnRMb2NhdGlvbik6CisgICAgICAg
ICogcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZWN0Lmg6IEFkZGVkLgorICAgICAgICAoV2ViQ29y
ZTo6UmVuZGVyU1ZHUmVjdDo6aXNTVkdSZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclNW
R1JlY3Q6OnJlbmRlck5hbWUpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU1ZHUmVjdDo6aXNF
bXB0eSk6CisgICAgICAgICogcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJjZS5oOgorICAg
ICAgICAoV2ViQ29yZTo6UmVuZGVyU1ZHUmVzb3VyY2U6OnBvc3RBcHBseVJlc291cmNlKToKKyAg
ICAgICAgKiByZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291cmNlQ2xpcHBlci5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpSZW5kZXJTVkdSZXNvdXJjZUNsaXBwZXI6OmRyYXdDb250ZW50SW50b01h
c2tJbWFnZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJTVkdSZXNvdXJjZUNsaXBwZXI6OmNh
bGN1bGF0ZUNsaXBDb250ZW50UmVwYWludFJlY3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVy
U1ZHUmVzb3VyY2VDbGlwcGVyOjpoaXRUZXN0Q2xpcENvbnRlbnQpOgorICAgICAgICAqIHJlbmRl
cmluZy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VDb250YWluZXIuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6UmVuZGVyU1ZHUmVzb3VyY2VDb250YWluZXI6OnRyYW5zZm9ybU9uTm9uU2NhbGluZ1N0cm9r
ZSk6CisgICAgICAgICogcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJjZUZpbHRlci5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJTVkdSZXNvdXJjZUZpbHRlcjo6cG9zdEFwcGx5UmVz
b3VyY2UpOgorICAgICAgICAqIHJlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VGaWx0ZXIu
aDoKKyAgICAgICAgKiByZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291cmNlR3JhZGllbnQuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU1ZHUmVzb3VyY2VHcmFkaWVudDo6YXBwbHlSZXNv
dXJjZSk6CisgICAgICAgICogcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJjZUdyYWRpZW50
Lmg6CisgICAgICAgICogcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJjZVBhdHRlcm4uY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU1ZHUmVzb3VyY2VQYXR0ZXJuOjpwb3N0QXBwbHlS
ZXNvdXJjZSk6CisgICAgICAgICogcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJjZVBhdHRl
cm4uaDoKKyAgICAgICAgKiByZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291cmNlU29saWRDb2xv
ci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJTVkdSZXNvdXJjZVNvbGlkQ29sb3I6OnBv
c3RBcHBseVJlc291cmNlKToKKyAgICAgICAgKiByZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291
cmNlU29saWRDb2xvci5oOgorICAgICAgICAqIHJlbmRlcmluZy9zdmcvUmVuZGVyU1ZHU2hhcGUu
Y3BwOiBDb3BpZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Bh
dGguY3BwLgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU1ZHU2hhcGU6OlJlbmRlclNWR1NoYXBl
KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclNWR1NoYXBlOjp+UmVuZGVyU1ZHU2hhcGUpOgor
ICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU1ZHU2hhcGU6OmNyZWF0ZVNoYXBlKToKKyAgICAgICAg
KFdlYkNvcmU6OlJlbmRlclNWR1NoYXBlOjppc0VtcHR5KToKKyAgICAgICAgKFdlYkNvcmU6OlJl
bmRlclNWR1NoYXBlOjpmaWxsU2hhcGUpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU1ZHU2hh
cGU6Om9iamVjdEJvdW5kaW5nQm94KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclNWR1NoYXBl
OjpzdHJva2VCb3VuZGluZ0JveCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJTVkdTaGFwZTo6
c3Ryb2tlU2hhcGUpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU1ZHU2hhcGU6OnN0cm9rZUNv
bnRhaW5zU2xvd0Nhc2UpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU1ZHU2hhcGU6OmZpbGxD
b250YWluc1Nsb3dDYXNlKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclNWR1NoYXBlOjpmaWxs
Q29udGFpbnMpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU1ZHU2hhcGU6OnN0cm9rZUNvbnRh
aW5zKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclNWR1NoYXBlOjpsYXlvdXQpOgorICAgICAg
ICAoV2ViQ29yZTo6UmVuZGVyU1ZHU2hhcGU6OnNob3VsZFN0cm9rZVplcm9MZW5ndGhTdWJwYXRo
KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclNWR1NoYXBlOjp6ZXJvTGVuZ3RoU3VicGF0aFJl
Y3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU1ZHU2hhcGU6OnNldHVwU3F1YXJlQ2FwUGF0
aCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJTVkdTaGFwZTo6c2V0dXBOb25TY2FsaW5nU3Ry
b2tlUGF0aCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJTVkdTaGFwZTo6ZmlsbEFuZFN0cm9r
ZVBhdGgpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU1ZHU2hhcGU6OnBhaW50KToKKyAgICAg
ICAgKFdlYkNvcmU6OlJlbmRlclNWR1NoYXBlOjphZGRGb2N1c1JpbmdSZWN0cyk6CisgICAgICAg
IChXZWJDb3JlOjpSZW5kZXJTVkdTaGFwZTo6bm9kZUF0RmxvYXRQb2ludCk6CisgICAgICAgIChX
ZWJDb3JlOjpSZW5kZXJTVkdTaGFwZTo6Y2FsY3VsYXRlTWFya2VyQm91bmRzSWZOZWVkZWQpOgor
ICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU1ZHU2hhcGU6OnVwZGF0ZUNhY2hlZEJvdW5kYXJpZXMp
OgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU1ZHU2hhcGU6OnN0cm9rZVdpZHRoKToKKyAgICAg
ICAgKiByZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1NoYXBlLmg6IENvcGllZCBmcm9tIFNvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUGF0aC5oLgorICAgICAgICAoV2ViQ29yZTo6
Qm91bmRpbmdSZWN0U3Ryb2tlU3R5bGVBcHBsaWVyOjpCb3VuZGluZ1JlY3RTdHJva2VTdHlsZUFw
cGxpZXIpOgorICAgICAgICAoV2ViQ29yZTo6Qm91bmRpbmdSZWN0U3Ryb2tlU3R5bGVBcHBsaWVy
OjpzdHJva2VTdHlsZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJTVkdTaGFwZTo6c2V0TmVl
ZHNTaGFwZVVwZGF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJTVkdTaGFwZTo6c2V0TmVl
ZHNCb3VuZGFyaWVzVXBkYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclNWR1NoYXBlOjpz
ZXROZWVkc1RyYW5zZm9ybVVwZGF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJTVkdTaGFw
ZTo6c3Ryb2tlQm91bmRpbmdCb3gpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU1ZHU2hhcGU6
OnJlcGFpbnRSZWN0SW5Mb2NhbENvb3JkaW5hdGVzKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRl
clNWR1NoYXBlOjpsb2NhbFRvUGFyZW50VHJhbnNmb3JtKToKKyAgICAgICAgKFdlYkNvcmU6OlJl
bmRlclNWR1NoYXBlOjppc1NWR1NoYXBlKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclNWR1No
YXBlOjpyZW5kZXJOYW1lKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclNWR1NoYXBlOjpwYXRo
KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclNWR1NoYXBlOjpwYXRoUHRyKToKKyAgICAgICAg
KFdlYkNvcmU6OlJlbmRlclNWR1NoYXBlOjpoYXNQYXRoKToKKyAgICAgICAgKFdlYkNvcmU6OlJl
bmRlclNWR1NoYXBlOjpsb2NhbFRyYW5zZm9ybSk6CisgICAgICAgIChXZWJDb3JlOjp0b1JlbmRl
clNWR1NoYXBlKToKKyAgICAgICAgKiByZW5kZXJpbmcvc3ZnL1NWR0lubGluZVRleHRCb3guY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6U1ZHSW5saW5lVGV4dEJveDo6cmVsZWFzZVBhaW50aW5nUmVz
b3VyY2UpOgorICAgICAgICAqIHJlbmRlcmluZy9zdmcvU1ZHUmVuZGVyU3VwcG9ydC5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpTVkdSZW5kZXJTdXBwb3J0OjpmaW5pc2hSZW5kZXJTVkdDb250ZW50
KToKKyAgICAgICAgKFdlYkNvcmU6OlNWR1JlbmRlclN1cHBvcnQ6OmxheW91dENoaWxkcmVuKToK
KyAgICAgICAgKiByZW5kZXJpbmcvc3ZnL1NWR1JlbmRlclRyZWVBc1RleHQuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6d3JpdGVTdHlsZSk6CisgICAgICAgIChXZWJDb3JlOjpvcGVyYXRvcjw8KToK
KyAgICAgICAgKFdlYkNvcmU6OndyaXRlKToKKyAgICAgICAgKiByZW5kZXJpbmcvc3ZnL1NWR1Jl
bmRlclRyZWVBc1RleHQuaDoKKyAgICAgICAgKiByZW5kZXJpbmcvc3ZnL1NWR1RleHRSdW5SZW5k
ZXJpbmdDb250ZXh0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR1RleHRSdW5SZW5kZXJpbmdD
b250ZXh0OjpkcmF3U1ZHR2x5cGhzKToKKyAgICAgICAgKiBzdmcvU1ZHQ2lyY2xlRWxlbWVudC5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpTVkdDaXJjbGVFbGVtZW50OjpzdmdBdHRyaWJ1dGVDaGFu
Z2VkKToKKyAgICAgICAgKiBzdmcvU1ZHRWxsaXBzZUVsZW1lbnQuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6U1ZHRWxsaXBzZUVsZW1lbnQ6OnN2Z0F0dHJpYnV0ZUNoYW5nZWQpOgorICAgICAgICAq
IHN2Zy9TVkdMaW5lRWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTVkdMaW5lRWxlbWVu
dDo6c3ZnQXR0cmlidXRlQ2hhbmdlZCk6CisgICAgICAgICogc3ZnL1NWR1BhdGhFbGVtZW50LmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR1BhdGhFbGVtZW50OjpzdmdBdHRyaWJ1dGVDaGFuZ2Vk
KToKKyAgICAgICAgKFdlYkNvcmU6OlNWR1BhdGhFbGVtZW50OjpwYXRoU2VnTGlzdENoYW5nZWQp
OgorICAgICAgICAoV2ViQ29yZTo6U1ZHUGF0aEVsZW1lbnQ6OmNyZWF0ZVJlbmRlcmVyKToKKyAg
ICAgICAgKiBzdmcvU1ZHUGF0aEVsZW1lbnQuaDoKKyAgICAgICAgKiBzdmcvU1ZHUG9seUVsZW1l
bnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U1ZHUG9seUVsZW1lbnQ6OnN2Z0F0dHJpYnV0ZUNo
YW5nZWQpOgorICAgICAgICAqIHN2Zy9TVkdSZWN0RWxlbWVudC5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpTVkdSZWN0RWxlbWVudDo6c3ZnQXR0cmlidXRlQ2hhbmdlZCk6CisgICAgICAgIChXZWJD
b3JlOjpTVkdSZWN0RWxlbWVudDo6Y3JlYXRlUmVuZGVyZXIpOgorICAgICAgICAqIHN2Zy9TVkdS
ZWN0RWxlbWVudC5oOgorCiAyMDExLTA5LTA3ICBBbmRyZXkgS29zeWFrb3YgIDxjYXNlcUBjaHJv
bWl1bS5vcmc+CiAKICAgICAgICAgV2ViIEluc3BlY3RvcjogdHJ5aW5nIHRvIHNjcm9sbCBtb3Vz
ZSB3aGVlbCB3aGVuIGluIFRleHRWaWV3ZXIncyBndXR0ZXIgcGFuZSBjYXVzZXMgRXZlbnRFeGNl
cHRpb246OkRJU1BBVENIX1JFUVVFU1RfRVJSCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9H
TlVtYWtlZmlsZS5saXN0LmFtIGIvU291cmNlL1dlYkNvcmUvR05VbWFrZWZpbGUubGlzdC5hbQpp
bmRleCAwZWMxYTRkLi5jMGQ0OTg4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9HTlVtYWtl
ZmlsZS5saXN0LmFtCisrKyBiL1NvdXJjZS9XZWJDb3JlL0dOVW1ha2VmaWxlLmxpc3QuYW0KQEAg
LTMyMDYsNiArMzIwNiw4IEBAIHdlYmNvcmVfc291cmNlcyArPSBcCiAJU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdNb2RlbE9iamVjdC5oIFwKIAlTb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1BhdGguY3BwIFwKIAlTb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvc3ZnL1JlbmRlclNWR1BhdGguaCBcCisJU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9S
ZW5kZXJTVkdSZWN0LmNwcCBcCisJU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJT
VkdSZWN0LmggXAogCVNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVzb3Vy
Y2VDbGlwcGVyLmNwcCBcCiAJU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdS
ZXNvdXJjZUNsaXBwZXIuaCBcCiAJU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJT
VkdSZXNvdXJjZUNvbnRhaW5lci5jcHAgXApAQCAtMzIzNCw2ICszMjM2LDggQEAgd2ViY29yZV9z
b3VyY2VzICs9IFwKIAlTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jvb3Qu
aCBcCiAJU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdTaGFkb3dUcmVlUm9v
dENvbnRhaW5lci5jcHAgXAogCVNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZH
U2hhZG93VHJlZVJvb3RDb250YWluZXIuaCBcCisJU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2
Zy9SZW5kZXJTVkdTaGFwZS5jcHAgXAorCVNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVu
ZGVyU1ZHU2hhcGUuaCBcCiAJU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdU
U3Bhbi5jcHAgXAogCVNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHVFNwYW4u
aCBcCiAJU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdUZXh0LmNwcCBcCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkgYi9Tb3VyY2UvV2ViQ29yZS9X
ZWJDb3JlLmd5cGkKaW5kZXggMDM5ODY0Yi4uMWUwYTQ1OSAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvV2ViQ29yZS5neXBpCisrKyBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwaQpAQCAt
NTg1Miw2ICs1ODUyLDggQEAKICAgICAgICAgICAgICdyZW5kZXJpbmcvc3ZnL1JlbmRlclNWR01v
ZGVsT2JqZWN0LmgnLAogICAgICAgICAgICAgJ3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUGF0aC5j
cHAnLAogICAgICAgICAgICAgJ3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUGF0aC5oJywKKyAgICAg
ICAgICAgICdyZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1JlY3QuY3BwJywKKyAgICAgICAgICAgICdy
ZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1JlY3QuaCcsCiAgICAgICAgICAgICAncmVuZGVyaW5nL3N2
Zy9SZW5kZXJTVkdSZXNvdXJjZS5jcHAnLAogICAgICAgICAgICAgJ3JlbmRlcmluZy9zdmcvUmVu
ZGVyU1ZHUmVzb3VyY2UuaCcsCiAgICAgICAgICAgICAncmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdS
ZXNvdXJjZUNsaXBwZXIuY3BwJywKQEAgLTU4ODAsNiArNTg4Miw4IEBACiAgICAgICAgICAgICAn
cmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSb290LmgnLAogICAgICAgICAgICAgJ3JlbmRlcmluZy9z
dmcvUmVuZGVyU1ZHU2hhZG93VHJlZVJvb3RDb250YWluZXIuY3BwJywKICAgICAgICAgICAgICdy
ZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1NoYWRvd1RyZWVSb290Q29udGFpbmVyLmgnLAorICAgICAg
ICAgICAgJ3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHU2hhcGUuY3BwJywKKyAgICAgICAgICAgICdy
ZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1NoYXBlLmgnLAogICAgICAgICAgICAgJ3JlbmRlcmluZy9z
dmcvUmVuZGVyU1ZHVFNwYW4uY3BwJywKICAgICAgICAgICAgICdyZW5kZXJpbmcvc3ZnL1JlbmRl
clNWR1RTcGFuLmgnLAogICAgICAgICAgICAgJ3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHVGV4dC5j
cHAnLApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5wcm8gYi9Tb3VyY2UvV2Vi
Q29yZS9XZWJDb3JlLnBybwppbmRleCAyMmE4NDVkLi45OTI1MDdkIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9XZWJDb3JlLnBybworKysgYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnBybwpA
QCAtMjI4Miw2ICsyMjgyLDcgQEAgSEVBREVSUyArPSBcCiAgICAgcmVuZGVyaW5nL3N2Zy9SZW5k
ZXJTVkdJbmxpbmVUZXh0LmggXAogICAgIHJlbmRlcmluZy9zdmcvUmVuZGVyU1ZHTW9kZWxPYmpl
Y3QuaCBcCiAgICAgcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdQYXRoLmggXAorICAgIHJlbmRlcmlu
Zy9zdmcvUmVuZGVyU1ZHUmVjdC5oIFwKICAgICByZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291
cmNlLmggXAogICAgIHJlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VDbGlwcGVyLmggXAog
ICAgIHJlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VDb250YWluZXIuaCBcCkBAIC0yMjk2
LDYgKzIyOTcsNyBAQCBIRUFERVJTICs9IFwKICAgICByZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jl
c291cmNlU29saWRDb2xvci5oIFwKICAgICByZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jvb3QuaCBc
CiAgICAgcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdTaGFkb3dUcmVlUm9vdENvbnRhaW5lci5oIFwK
KyAgICByZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1NoYXBlLmggXAogICAgIHJlbmRlcmluZy9zdmcv
UmVuZGVyU1ZHVFNwYW4uaCBcCiAgICAgcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdUZXh0LmggXAog
ICAgIHJlbmRlcmluZy9zdmcvUmVuZGVyU1ZHVGV4dFBhdGguaCBcCkBAIC0zMzEwLDYgKzMzMTIs
OCBAQCBjb250YWlucyhERUZJTkVTLCBFTkFCTEVfU1ZHPTEpIHsKICAgICAgICAgcmVuZGVyaW5n
L3N0eWxlL1NWR1JlbmRlclN0eWxlRGVmcy5jcHAgXAogICAgICAgICByZW5kZXJpbmcvUG9pbnRl
ckV2ZW50c0hpdFJ1bGVzLmNwcCBcCiAgICAgICAgIHJlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUGF0
aC5jcHAgXAorICAgICAgICByZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1JlY3QuY3BwIFwKKyAgICAg
ICAgcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdTaGFwZS5jcHAgXAogICAgICAgICBzdmcvYW5pbWF0
aW9uL1NNSUxUaW1lLmNwcCBcCiAgICAgICAgIHN2Zy9hbmltYXRpb24vU01JTFRpbWVDb250YWlu
ZXIuY3BwIFwKICAgICAgICAgc3ZnL2FuaW1hdGlvbi9TVkdTTUlMRWxlbWVudC5jcHAgXApkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS52Y3Byb2ovV2ViQ29yZS52Y3Byb2ogYi9T
b3VyY2UvV2ViQ29yZS9XZWJDb3JlLnZjcHJvai9XZWJDb3JlLnZjcHJvagppbmRleCA2YjY4MGJh
Li41Njc4Njk4IDEwMDc1NQotLS0gYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnZjcHJvai9XZWJD
b3JlLnZjcHJvagorKysgYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnZjcHJvai9XZWJDb3JlLnZj
cHJvagpAQCAtNDE2NDcsNiArNDE2NDcsMTE4IEBACiAJCQkJCT4KIAkJCQk8L0ZpbGU+CiAJCQkJ
PEZpbGUKKwkJCQkJUmVsYXRpdmVQYXRoPSIuLlxyZW5kZXJpbmdcc3ZnXFJlbmRlclNWR1JlY3Qu
Y3BwIgorCQkJCQk+CisJCQkJCTxGaWxlQ29uZmlndXJhdGlvbgorCQkJCQkJTmFtZT0iRGVidWd8
V2luMzIiCisJCQkJCQlFeGNsdWRlZEZyb21CdWlsZD0idHJ1ZSIKKwkJCQkJCT4KKwkJCQkJCTxU
b29sCisJCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIKKwkJCQkJCS8+CisJCQkJCTwvRmls
ZUNvbmZpZ3VyYXRpb24+CisJCQkJCTxGaWxlQ29uZmlndXJhdGlvbgorCQkJCQkJTmFtZT0iUmVs
ZWFzZXxXaW4zMiIKKwkJCQkJCUV4Y2x1ZGVkRnJvbUJ1aWxkPSJ0cnVlIgorCQkJCQkJPgorCQkJ
CQkJPFRvb2wKKwkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIgorCQkJCQkJLz4KKwkJCQkJ
PC9GaWxlQ29uZmlndXJhdGlvbj4KKwkJCQkJPEZpbGVDb25maWd1cmF0aW9uCisJCQkJCQlOYW1l
PSJEZWJ1Z19DYWlyb19DRkxpdGV8V2luMzIiCisJCQkJCQlFeGNsdWRlZEZyb21CdWlsZD0idHJ1
ZSIKKwkJCQkJCT4KKwkJCQkJCTxUb29sCisJCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIK
KwkJCQkJCS8+CisJCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+CisJCQkJCTxGaWxlQ29uZmlndXJh
dGlvbgorCQkJCQkJTmFtZT0iUmVsZWFzZV9DYWlyb19DRkxpdGV8V2luMzIiCisJCQkJCQlFeGNs
dWRlZEZyb21CdWlsZD0idHJ1ZSIKKwkJCQkJCT4KKwkJCQkJCTxUb29sCisJCQkJCQkJTmFtZT0i
VkNDTENvbXBpbGVyVG9vbCIKKwkJCQkJCS8+CisJCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+CisJ
CQkJCTxGaWxlQ29uZmlndXJhdGlvbgorCQkJCQkJTmFtZT0iRGVidWdfQWxsfFdpbjMyIgorCQkJ
CQkJRXhjbHVkZWRGcm9tQnVpbGQ9InRydWUiCisJCQkJCQk+CisJCQkJCQk8VG9vbAorCQkJCQkJ
CU5hbWU9IlZDQ0xDb21waWxlclRvb2wiCisJCQkJCQkvPgorCQkJCQk8L0ZpbGVDb25maWd1cmF0
aW9uPgorCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24KKwkJCQkJCU5hbWU9IlByb2R1Y3Rpb258V2lu
MzIiCisJCQkJCQlFeGNsdWRlZEZyb21CdWlsZD0idHJ1ZSIKKwkJCQkJCT4KKwkJCQkJCTxUb29s
CisJCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIKKwkJCQkJCS8+CisJCQkJCTwvRmlsZUNv
bmZpZ3VyYXRpb24+CisJCQkJPC9GaWxlPgorCQkJCTxGaWxlCisJCQkJCVJlbGF0aXZlUGF0aD0i
Li5ccmVuZGVyaW5nXHN2Z1xSZW5kZXJTVkdSZWN0LmgiCisJCQkJCT4KKwkJCQk8L0ZpbGU+CisJ
CQkJPEZpbGUKKwkJCQkJUmVsYXRpdmVQYXRoPSIuLlxyZW5kZXJpbmdcc3ZnXFJlbmRlclNWR1No
YXBlLmNwcCIKKwkJCQkJPgorCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24KKwkJCQkJCU5hbWU9IkRl
YnVnfFdpbjMyIgorCQkJCQkJRXhjbHVkZWRGcm9tQnVpbGQ9InRydWUiCisJCQkJCQk+CisJCQkJ
CQk8VG9vbAorCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiCisJCQkJCQkvPgorCQkJCQk8
L0ZpbGVDb25maWd1cmF0aW9uPgorCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24KKwkJCQkJCU5hbWU9
IlJlbGVhc2V8V2luMzIiCisJCQkJCQlFeGNsdWRlZEZyb21CdWlsZD0idHJ1ZSIKKwkJCQkJCT4K
KwkJCQkJCTxUb29sCisJCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIKKwkJCQkJCS8+CisJ
CQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+CisJCQkJCTxGaWxlQ29uZmlndXJhdGlvbgorCQkJCQkJ
TmFtZT0iRGVidWdfQ2Fpcm9fQ0ZMaXRlfFdpbjMyIgorCQkJCQkJRXhjbHVkZWRGcm9tQnVpbGQ9
InRydWUiCisJCQkJCQk+CisJCQkJCQk8VG9vbAorCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRv
b2wiCisJCQkJCQkvPgorCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPgorCQkJCQk8RmlsZUNvbmZp
Z3VyYXRpb24KKwkJCQkJCU5hbWU9IlJlbGVhc2VfQ2Fpcm9fQ0ZMaXRlfFdpbjMyIgorCQkJCQkJ
RXhjbHVkZWRGcm9tQnVpbGQ9InRydWUiCisJCQkJCQk+CisJCQkJCQk8VG9vbAorCQkJCQkJCU5h
bWU9IlZDQ0xDb21waWxlclRvb2wiCisJCQkJCQkvPgorCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9u
PgorCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24KKwkJCQkJCU5hbWU9IkRlYnVnX0FsbHxXaW4zMiIK
KwkJCQkJCUV4Y2x1ZGVkRnJvbUJ1aWxkPSJ0cnVlIgorCQkJCQkJPgorCQkJCQkJPFRvb2wKKwkJ
CQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIgorCQkJCQkJLz4KKwkJCQkJPC9GaWxlQ29uZmln
dXJhdGlvbj4KKwkJCQkJPEZpbGVDb25maWd1cmF0aW9uCisJCQkJCQlOYW1lPSJQcm9kdWN0aW9u
fFdpbjMyIgorCQkJCQkJRXhjbHVkZWRGcm9tQnVpbGQ9InRydWUiCisJCQkJCQk+CisJCQkJCQk8
VG9vbAorCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiCisJCQkJCQkvPgorCQkJCQk8L0Zp
bGVDb25maWd1cmF0aW9uPgorCQkJCTwvRmlsZT4KKwkJCQk8RmlsZQorCQkJCQlSZWxhdGl2ZVBh
dGg9Ii4uXHJlbmRlcmluZ1xzdmdcUmVuZGVyU1ZHU2hhcGUuaCIKKwkJCQkJPgorCQkJCTwvRmls
ZT4KKwkJCQk8RmlsZQogCQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXHJlbmRlcmluZ1xzdmdcUmVuZGVy
U1ZHVGV4dC5jcHAiCiAJCQkJCT4KIAkJCQkJPEZpbGVDb25maWd1cmF0aW9uCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9GbG9hdFJlY3QuY3BwIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRmxvYXRSZWN0LmNwcAppbmRleCBiODRhODkyLi40
NGVkOGI4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9GbG9h
dFJlY3QuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0Zsb2F0UmVj
dC5jcHAKQEAgLTY4LDYgKzY4LDEzIEBAIGJvb2wgRmxvYXRSZWN0Ojpjb250YWlucyhjb25zdCBG
bG9hdFJlY3QmIG90aGVyKSBjb25zdAogICAgICAgICAmJiB5KCkgPD0gb3RoZXIueSgpICYmIG1h
eFkoKSA+PSBvdGhlci5tYXhZKCk7CiB9CiAKK2Jvb2wgRmxvYXRSZWN0Ojpjb21wcmlzZXMoY29u
c3QgRmxvYXRQb2ludCYgcG9pbnQpIGNvbnN0Cit7CisgICAgaWYgKCFjb250YWlucyhwb2ludCkp
CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICByZXR1cm4geCgpIDwgcG9pbnQueCgpICYmIG1h
eFgoKSA+IHBvaW50LngoKSAmJiB5KCkgPCBwb2ludC55KCkgJiYgbWF4WSgpID4geSgpOworfQor
CiB2b2lkIEZsb2F0UmVjdDo6aW50ZXJzZWN0KGNvbnN0IEZsb2F0UmVjdCYgb3RoZXIpCiB7CiAg
ICAgZmxvYXQgbCA9IG1heCh4KCksIG90aGVyLngoKSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9GbG9hdFJlY3QuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL0Zsb2F0UmVjdC5oCmluZGV4IDI0YTZiMTkuLjIyNTJhNGIgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0Zsb2F0UmVjdC5oCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0Zsb2F0UmVjdC5oCkBAIC0xNDYsNiArMTQ2
LDcgQEAgcHVibGljOgogCiAgICAgYm9vbCBpbnRlcnNlY3RzKGNvbnN0IEZsb2F0UmVjdCYpIGNv
bnN0OwogICAgIGJvb2wgY29udGFpbnMoY29uc3QgRmxvYXRSZWN0JikgY29uc3Q7CisgICAgYm9v
bCBjb21wcmlzZXMoY29uc3QgRmxvYXRQb2ludCYpIGNvbnN0OwogCiAgICAgdm9pZCBpbnRlcnNl
Y3QoY29uc3QgRmxvYXRSZWN0Jik7CiAgICAgdm9pZCB1bml0ZShjb25zdCBGbG9hdFJlY3QmKTsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJPYmplY3QuaCBiL1Nv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJPYmplY3QuaAppbmRleCBiZmFhNjk1Li43NTA4
NDkyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyT2JqZWN0LmgK
KysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck9iamVjdC5oCkBAIC0zNTYsNyAr
MzU2LDEwIEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIGJvb2wgaXNTVkdWaWV3cG9ydENvbnRhaW5l
cigpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9IAogICAgIHZpcnR1YWwgYm9vbCBpc1NWR0dyYWRp
ZW50U3RvcCgpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CiAgICAgdmlydHVhbCBib29sIGlzU1ZH
SGlkZGVuQ29udGFpbmVyKCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KKyAgICB2aXJ0dWFsIGJv
b2wgaXNTVkdMaW5lKCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KICAgICB2aXJ0dWFsIGJvb2wg
aXNTVkdQYXRoKCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KKyAgICB2aXJ0dWFsIGJvb2wgaXNT
VkdSZWN0KCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KKyAgICB2aXJ0dWFsIGJvb2wgaXNTVkdT
aGFwZSgpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CiAgICAgdmlydHVhbCBib29sIGlzU1ZHVGV4
dCgpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CiAgICAgdmlydHVhbCBib29sIGlzU1ZHVGV4dFBh
dGgoKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQogICAgIHZpcnR1YWwgYm9vbCBpc1NWR0lubGlu
ZSgpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVyVHJlZUFzVGV4dC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyVHJlZUFzVGV4dC5jcHAKaW5kZXggNjRlNjU0Yy4uYjEyZDc3NiAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRyZWVBc1RleHQuY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUcmVlQXNUZXh0LmNwcApAQCAtNTIwLDggKzUyMCw4
IEBAIHN0YXRpYyB2b2lkIHdyaXRlVGV4dFJ1bihUZXh0U3RyZWFtJiB0cywgY29uc3QgUmVuZGVy
VGV4dCYgbywgY29uc3QgSW5saW5lVGV4dEJvCiB2b2lkIHdyaXRlKFRleHRTdHJlYW0mIHRzLCBj
b25zdCBSZW5kZXJPYmplY3QmIG8sIGludCBpbmRlbnQsIFJlbmRlckFzVGV4dEJlaGF2aW9yIGJl
aGF2aW9yKQogewogI2lmIEVOQUJMRShTVkcpCi0gICAgaWYgKG8uaXNTVkdQYXRoKCkpIHsKLSAg
ICAgICAgd3JpdGUodHMsICp0b1JlbmRlclNWR1BhdGgoJm8pLCBpbmRlbnQpOworICAgIGlmIChv
LmlzU1ZHU2hhcGUoKSkgeworICAgICAgICB3cml0ZSh0cywgKnRvUmVuZGVyU1ZHU2hhcGUoJm8p
LCBpbmRlbnQpOwogICAgICAgICByZXR1cm47CiAgICAgfQogICAgIGlmIChvLmlzU1ZHR3JhZGll
bnRTdG9wKCkpIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVu
ZGVyU1ZHQWxsSW5PbmUuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJT
VkdBbGxJbk9uZS5jcHAKaW5kZXggOWVhM2JlNS4uMjk2OTAwOCAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdBbGxJbk9uZS5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdBbGxJbk9uZS5jcHAKQEAgLTM1LDYgKzM1
LDcgQEAKICNpbmNsdWRlICJSZW5kZXJTVkdJbmxpbmVUZXh0LmNwcCIKICNpbmNsdWRlICJSZW5k
ZXJTVkdNb2RlbE9iamVjdC5jcHAiCiAjaW5jbHVkZSAiUmVuZGVyU1ZHUGF0aC5jcHAiCisjaW5j
bHVkZSAiUmVuZGVyU1ZHUmVjdC5jcHAiCiAjaW5jbHVkZSAiUmVuZGVyU1ZHUmVzb3VyY2UuY3Bw
IgogI2luY2x1ZGUgIlJlbmRlclNWR1Jlc291cmNlQ2xpcHBlci5jcHAiCiAjaW5jbHVkZSAiUmVu
ZGVyU1ZHUmVzb3VyY2VDb250YWluZXIuY3BwIgpAQCAtNDksNiArNTAsNyBAQAogI2luY2x1ZGUg
IlJlbmRlclNWR1Jlc291cmNlU29saWRDb2xvci5jcHAiCiAjaW5jbHVkZSAiUmVuZGVyU1ZHUm9v
dC5jcHAiCiAjaW5jbHVkZSAiUmVuZGVyU1ZHU2hhZG93VHJlZVJvb3RDb250YWluZXIuY3BwIgor
I2luY2x1ZGUgIlJlbmRlclNWR1NoYXBlLmNwcCIKICNpbmNsdWRlICJSZW5kZXJTVkdUU3Bhbi5j
cHAiCiAjaW5jbHVkZSAiUmVuZGVyU1ZHVGV4dC5jcHAiCiAjaW5jbHVkZSAiUmVuZGVyU1ZHVGV4
dFBhdGguY3BwIgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5k
ZXJTVkdNb2RlbE9iamVjdC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRl
clNWR01vZGVsT2JqZWN0LmNwcAppbmRleCAxNGMxZGI4Li5jMjM0MGIzIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR01vZGVsT2JqZWN0LmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR01vZGVsT2JqZWN0LmNwcApA
QCAtMTUzLDcgKzE1Myw3IEBAIHN0YXRpYyBib29sIGludGVyc2VjdHNBbGxvd2luZ0VtcHR5KGNv
bnN0IEZsb2F0UmVjdCYgciwgY29uc3QgRmxvYXRSZWN0JiBvdGhlcikKIC8vIGltYWdlLCBsaW5l
LCBwYXRoLCBwb2x5Z29uLCBwb2x5bGluZSwgcmVjdCwgdGV4dCBhbmQgdXNlLgogc3RhdGljIGJv
b2wgaXNHcmFwaGljc0VsZW1lbnQoUmVuZGVyT2JqZWN0KiByZW5kZXJlcikKIHsKLSAgICByZXR1
cm4gcmVuZGVyZXItPmlzU1ZHUGF0aCgpIHx8IHJlbmRlcmVyLT5pc1NWR1RleHQoKSB8fCByZW5k
ZXJlci0+aXNTVkdJbWFnZSgpIHx8IHJlbmRlcmVyLT5pc1NWR1NoYWRvd1RyZWVSb290Q29udGFp
bmVyKCk7CisgICAgcmV0dXJuIHJlbmRlcmVyLT5pc1NWR1NoYXBlKCkgfHwgcmVuZGVyZXItPmlz
U1ZHVGV4dCgpIHx8IHJlbmRlcmVyLT5pc1NWR0ltYWdlKCkgfHwgcmVuZGVyZXItPmlzU1ZHU2hh
ZG93VHJlZVJvb3RDb250YWluZXIoKTsKIH0KIAogYm9vbCBSZW5kZXJTVkdNb2RlbE9iamVjdDo6
Y2hlY2tJbnRlcnNlY3Rpb24oUmVuZGVyT2JqZWN0KiByZW5kZXJlciwgY29uc3QgRmxvYXRSZWN0
JiByZWN0KQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJT
VkdQYXRoLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUGF0aC5j
cHAKaW5kZXggYjdhZDdhMi4uZmYxNTUwNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL3N2Zy9SZW5kZXJTVkdQYXRoLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvc3ZnL1JlbmRlclNWR1BhdGguY3BwCkBAIC02LDYgKzYsOCBAQAogICogQ29weXJpZ2h0IChD
KSAyMDA5IERpcmsgU2NodWx6ZSA8a3JpdEB3ZWJraXQub3JnPgogICogQ29weXJpZ2h0IChDKSBS
ZXNlYXJjaCBJbiBNb3Rpb24gTGltaXRlZCAyMDEwLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICog
Q29weXJpZ2h0IChDKSAyMDA5IEplZmYgU2NoaWxsZXIgPGNvZGVkcmVhZEBnbWFpbC5jb20+Cisg
KiBDb3B5cmlnaHQgKEMpIDIwMTEgUmVuYXRhIEhvZG92YW4gPHJlbmlAd2Via2l0Lm9yZz4KKyAq
IENvcHlyaWdodCAoQykgMjAxMSBVbml2ZXJzaXR5IG9mIFN6ZWdlZAogICoKICAqIFRoaXMgbGli
cmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAq
IG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVi
bGljCkBAIC0yOCw1MCArMzAsMTMgQEAKICNpZiBFTkFCTEUoU1ZHKQogI2luY2x1ZGUgIlJlbmRl
clNWR1BhdGguaCIKIAotI2luY2x1ZGUgIkZsb2F0UG9pbnQuaCIKLSNpbmNsdWRlICJGbG9hdFF1
YWQuaCIKLSNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKLSNpbmNsdWRlICJIaXRUZXN0UmVx
dWVzdC5oIgotI2luY2x1ZGUgIkxheW91dFJlcGFpbnRlci5oIgotI2luY2x1ZGUgIlBvaW50ZXJF
dmVudHNIaXRSdWxlcy5oIgotI2luY2x1ZGUgIlJlbmRlclNWR0NvbnRhaW5lci5oIgotI2luY2x1
ZGUgIlJlbmRlclNWR1Jlc291cmNlTWFya2VyLmgiCi0jaW5jbHVkZSAiUmVuZGVyU1ZHUmVzb3Vy
Y2VTb2xpZENvbG9yLmgiCi0jaW5jbHVkZSAiU1ZHUmVuZGVyU3VwcG9ydC5oIgotI2luY2x1ZGUg
IlNWR1Jlc291cmNlcy5oIgorI2luY2x1ZGUgIlNWR1BhdGhFbGVtZW50LmgiCiAjaW5jbHVkZSAi
U1ZHU3R5bGVkVHJhbnNmb3JtYWJsZUVsZW1lbnQuaCIKLSNpbmNsdWRlICJTVkdUcmFuc2Zvcm1M
aXN0LmgiCi0jaW5jbHVkZSAiU1ZHVVJJUmVmZXJlbmNlLmgiCi0jaW5jbHVkZSAiU3Ryb2tlU3R5
bGVBcHBsaWVyLmgiCi0jaW5jbHVkZSA8d3RmL01hdGhFeHRyYXMuaD4KIAogbmFtZXNwYWNlIFdl
YkNvcmUgewogCi1jbGFzcyBCb3VuZGluZ1JlY3RTdHJva2VTdHlsZUFwcGxpZXIgOiBwdWJsaWMg
U3Ryb2tlU3R5bGVBcHBsaWVyIHsKLXB1YmxpYzoKLSAgICBCb3VuZGluZ1JlY3RTdHJva2VTdHls
ZUFwcGxpZXIoY29uc3QgUmVuZGVyT2JqZWN0KiBvYmplY3QsIFJlbmRlclN0eWxlKiBzdHlsZSkK
LSAgICAgICAgOiBtX29iamVjdChvYmplY3QpCi0gICAgICAgICwgbV9zdHlsZShzdHlsZSkKLSAg
ICB7Ci0gICAgICAgIEFTU0VSVChzdHlsZSk7Ci0gICAgICAgIEFTU0VSVChvYmplY3QpOwotICAg
IH0KLQotICAgIHZvaWQgc3Ryb2tlU3R5bGUoR3JhcGhpY3NDb250ZXh0KiBnYykKLSAgICB7Ci0g
ICAgICAgIFNWR1JlbmRlclN1cHBvcnQ6OmFwcGx5U3Ryb2tlU3R5bGVUb0NvbnRleHQoZ2MsIG1f
c3R5bGUsIG1fb2JqZWN0KTsKLSAgICB9Ci0KLXByaXZhdGU6Ci0gICAgY29uc3QgUmVuZGVyT2Jq
ZWN0KiBtX29iamVjdDsKLSAgICBSZW5kZXJTdHlsZSogbV9zdHlsZTsKLX07Ci0KIFJlbmRlclNW
R1BhdGg6OlJlbmRlclNWR1BhdGgoU1ZHU3R5bGVkVHJhbnNmb3JtYWJsZUVsZW1lbnQqIG5vZGUp
Ci0gICAgOiBSZW5kZXJTVkdNb2RlbE9iamVjdChub2RlKQotICAgICwgbV9uZWVkc0JvdW5kYXJp
ZXNVcGRhdGUoZmFsc2UpIC8vIGRlZmF1bHQgaXMgZmFsc2UsIHRoZSBjYWNoZWQgcmVjdHMgYXJl
IGVtcHR5IGZyb20gdGhlIGJlZ2lubmluZwotICAgICwgbV9uZWVkc1BhdGhVcGRhdGUodHJ1ZSkg
Ly8gZGVmYXVsdCBpcyB0cnVlLCBzbyB3ZSBncmFiIGEgUGF0aCBvYmplY3Qgb25jZSBmcm9tIFNW
R1N0eWxlZFRyYW5zZm9ybWFibGVFbGVtZW50Ci0gICAgLCBtX25lZWRzVHJhbnNmb3JtVXBkYXRl
KHRydWUpIC8vIGRlZmF1bHQgaXMgdHJ1ZSwgc28gd2UgZ3JhYiBhIEFmZmluZVRyYW5zZm9ybSBv
YmplY3Qgb25jZSBmcm9tIFNWR1N0eWxlZFRyYW5zZm9ybWFibGVFbGVtZW50CisgICAgOiBSZW5k
ZXJTVkdTaGFwZShub2RlKQogewogfQogCkBAIC03OSwzMTQgKzQ0LDE2IEBAIFJlbmRlclNWR1Bh
dGg6On5SZW5kZXJTVkdQYXRoKCkKIHsKIH0KIAotYm9vbCBSZW5kZXJTVkdQYXRoOjpmaWxsQ29u
dGFpbnMoY29uc3QgRmxvYXRQb2ludCYgcG9pbnQsIGJvb2wgcmVxdWlyZXNGaWxsLCBXaW5kUnVs
ZSBmaWxsUnVsZSkKLXsKLSAgICBpZiAoIW1fZmlsbEJvdW5kaW5nQm94LmNvbnRhaW5zKHBvaW50
KSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgQ29sb3IgZmFsbGJhY2tDb2xvcjsKLSAg
ICBpZiAocmVxdWlyZXNGaWxsICYmICFSZW5kZXJTVkdSZXNvdXJjZTo6ZmlsbFBhaW50aW5nUmVz
b3VyY2UodGhpcywgc3R5bGUoKSwgZmFsbGJhY2tDb2xvcikpCi0gICAgICAgIHJldHVybiBmYWxz
ZTsKLQotICAgIHJldHVybiBtX3BhdGguY29udGFpbnMocG9pbnQsIGZpbGxSdWxlKTsKLX0KLQot
Ym9vbCBSZW5kZXJTVkdQYXRoOjpzdHJva2VDb250YWlucyhjb25zdCBGbG9hdFBvaW50JiBwb2lu
dCwgYm9vbCByZXF1aXJlc1N0cm9rZSkKLXsKLSAgICBpZiAoIW1fc3Ryb2tlQW5kTWFya2VyQm91
bmRpbmdCb3guY29udGFpbnMocG9pbnQpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBD
b2xvciBmYWxsYmFja0NvbG9yOwotICAgIGlmIChyZXF1aXJlc1N0cm9rZSAmJiAhUmVuZGVyU1ZH
UmVzb3VyY2U6OnN0cm9rZVBhaW50aW5nUmVzb3VyY2UodGhpcywgc3R5bGUoKSwgZmFsbGJhY2tD
b2xvcikpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIGlmIChzaG91bGRTdHJva2VaZXJv
TGVuZ3RoU3VicGF0aCgpKQotICAgICAgICByZXR1cm4gemVyb0xlbmd0aFN1YnBhdGhSZWN0KCku
Y29udGFpbnMocG9pbnQpOwotCi0gICAgQm91bmRpbmdSZWN0U3Ryb2tlU3R5bGVBcHBsaWVyIHN0
cm9rZVN0eWxlKHRoaXMsIHN0eWxlKCkpOwotICAgIHJldHVybiBtX3BhdGguc3Ryb2tlQ29udGFp
bnMoJnN0cm9rZVN0eWxlLCBwb2ludCk7Ci19Ci0KLXZvaWQgUmVuZGVyU1ZHUGF0aDo6bGF5b3V0
KCkKLXsKLSAgICBMYXlvdXRSZXBhaW50ZXIgcmVwYWludGVyKCp0aGlzLCBjaGVja0ZvclJlcGFp
bnREdXJpbmdMYXlvdXQoKSAmJiBzZWxmTmVlZHNMYXlvdXQoKSk7Ci0gICAgU1ZHU3R5bGVkVHJh
bnNmb3JtYWJsZUVsZW1lbnQqIGVsZW1lbnQgPSBzdGF0aWNfY2FzdDxTVkdTdHlsZWRUcmFuc2Zv
cm1hYmxlRWxlbWVudCo+KG5vZGUoKSk7Ci0KLSAgICBib29sIHVwZGF0ZUNhY2hlZEJvdW5kYXJp
ZXNJblBhcmVudHMgPSBmYWxzZTsKLQotICAgIGJvb2wgbmVlZHNQYXRoVXBkYXRlID0gbV9uZWVk
c1BhdGhVcGRhdGU7Ci0gICAgaWYgKG5lZWRzUGF0aFVwZGF0ZSkgewotICAgICAgICBtX3BhdGgu
Y2xlYXIoKTsKLSAgICAgICAgZWxlbWVudC0+dG9QYXRoRGF0YShtX3BhdGgpOwotICAgICAgICBt
X25lZWRzUGF0aFVwZGF0ZSA9IGZhbHNlOwotICAgICAgICB1cGRhdGVDYWNoZWRCb3VuZGFyaWVz
SW5QYXJlbnRzID0gdHJ1ZTsKLSAgICB9Ci0KLSAgICBpZiAobV9uZWVkc1RyYW5zZm9ybVVwZGF0
ZSkgewotICAgICAgICBtX2xvY2FsVHJhbnNmb3JtID0gZWxlbWVudC0+YW5pbWF0ZWRMb2NhbFRy
YW5zZm9ybSgpOwotICAgICAgICBtX25lZWRzVHJhbnNmb3JtVXBkYXRlID0gZmFsc2U7Ci0gICAg
ICAgIHVwZGF0ZUNhY2hlZEJvdW5kYXJpZXNJblBhcmVudHMgPSB0cnVlOwotICAgIH0KLQotICAg
IGlmIChtX25lZWRzQm91bmRhcmllc1VwZGF0ZSkKLSAgICAgICAgdXBkYXRlQ2FjaGVkQm91bmRh
cmllc0luUGFyZW50cyA9IHRydWU7Ci0KLSAgICAvLyBJbnZhbGlkYXRlIGFsbCByZXNvdXJjZXMg
b2YgdGhpcyBjbGllbnQgaWYgb3VyIGxheW91dCBjaGFuZ2VkLgotICAgIGlmIChtX2V2ZXJIYWRM
YXlvdXQgJiYgc2VsZk5lZWRzTGF5b3V0KCkpIHsKLSAgICAgICAgU1ZHUmVzb3VyY2VzQ2FjaGU6
OmNsaWVudExheW91dENoYW5nZWQodGhpcyk7Ci0gICAgICAgIG1fbWFya2VyTGF5b3V0SW5mby5j
bGVhcigpOwotICAgIH0KLQotICAgIC8vIEF0IHRoaXMgcG9pbnQgTGF5b3V0UmVwYWludGVyIGFs
cmVhZHkgZ3JhYmJlZCB0aGUgb2xkIGJvdW5kcywKLSAgICAvLyByZWNhbGN1bGF0ZSB0aGVtIG5v
dyBzbyByZXBhaW50QWZ0ZXJMYXlvdXQoKSB1c2VzIHRoZSBuZXcgYm91bmRzLgotICAgIGlmIChu
ZWVkc1BhdGhVcGRhdGUgfHwgbV9uZWVkc0JvdW5kYXJpZXNVcGRhdGUpIHsKLSAgICAgICAgdXBk
YXRlQ2FjaGVkQm91bmRhcmllcygpOwotICAgICAgICBtX25lZWRzQm91bmRhcmllc1VwZGF0ZSA9
IGZhbHNlOwotICAgIH0KLQotICAgIC8vIElmIG91ciBib3VuZHMgY2hhbmdlZCwgbm90aWZ5IHRo
ZSBwYXJlbnRzLgotICAgIGlmICh1cGRhdGVDYWNoZWRCb3VuZGFyaWVzSW5QYXJlbnRzKQotICAg
ICAgICBSZW5kZXJTVkdNb2RlbE9iamVjdDo6c2V0TmVlZHNCb3VuZGFyaWVzVXBkYXRlKCk7Ci0K
LSAgICByZXBhaW50ZXIucmVwYWludEFmdGVyTGF5b3V0KCk7Ci0gICAgc2V0TmVlZHNMYXlvdXQo
ZmFsc2UpOwotfQotCi1ib29sIFJlbmRlclNWR1BhdGg6OnNob3VsZFN0cm9rZVplcm9MZW5ndGhT
dWJwYXRoKCkgY29uc3QKLXsKLSAgICAvLyBTcGVjKDExLjQpOiBBbnkgemVybyBsZW5ndGggc3Vi
cGF0aCBzaGFsbCBub3QgYmUgc3Ryb2tlZCBpZiB0aGUg4oCYc3Ryb2tlLWxpbmVjYXDigJkgcHJv
cGVydHkgaGFzIGEgdmFsdWUgb2YgYnV0dAotICAgIC8vIGJ1dCBzaGFsbCBiZSBzdHJva2VkIGlm
IHRoZSDigJhzdHJva2UtbGluZWNhcOKAmSBwcm9wZXJ0eSBoYXMgYSB2YWx1ZSBvZiByb3VuZCBv
ciBzcXVhcmUKLSAgICByZXR1cm4gc3R5bGUoKS0+c3ZnU3R5bGUoKS0+aGFzU3Ryb2tlKCkgJiYg
c3R5bGUoKS0+c3ZnU3R5bGUoKS0+Y2FwU3R5bGUoKSAhPSBCdXR0Q2FwICYmICFtX2ZpbGxCb3Vu
ZGluZ0JveC53aWR0aCgpICYmICFtX2ZpbGxCb3VuZGluZ0JveC5oZWlnaHQoKTsKLX0KLQotRmxv
YXRSZWN0IFJlbmRlclNWR1BhdGg6Onplcm9MZW5ndGhTdWJwYXRoUmVjdCgpIGNvbnN0Ci17Ci0g
ICAgU1ZHRWxlbWVudCogc3ZnRWxlbWVudCA9IHN0YXRpY19jYXN0PFNWR0VsZW1lbnQqPihub2Rl
KCkpOwotICAgIGZsb2F0IHN0cm9rZVdpZHRoID0gc3R5bGUoKS0+c3ZnU3R5bGUoKS0+c3Ryb2tl
V2lkdGgoKS52YWx1ZShzdmdFbGVtZW50KTsKLSAgICByZXR1cm4gRmxvYXRSZWN0KG1fZmlsbEJv
dW5kaW5nQm94LngoKSAtIHN0cm9rZVdpZHRoIC8gMiwgbV9maWxsQm91bmRpbmdCb3gueSgpIC0g
c3Ryb2tlV2lkdGggLyAyLCBzdHJva2VXaWR0aCwgc3Ryb2tlV2lkdGgpOwotfQotCi12b2lkIFJl
bmRlclNWR1BhdGg6OnNldHVwU3F1YXJlQ2FwUGF0aChQYXRoKiYgdXNlUGF0aCwgaW50JiBhcHBs
eU1vZGUpCi17Ci0gICAgLy8gU3BlYygxMS40KTogQW55IHplcm8gbGVuZ3RoIHN1YnBhdGggc2hh
bGwgbm90IGJlIHN0cm9rZWQgaWYgdGhlIOKAmHN0cm9rZS1saW5lY2Fw4oCZIHByb3BlcnR5IGhh
cyBhIHZhbHVlIG9mIGJ1dHQKLSAgICAvLyBidXQgc2hhbGwgYmUgc3Ryb2tlZCBpZiB0aGUg4oCY
c3Ryb2tlLWxpbmVjYXDigJkgcHJvcGVydHkgaGFzIGEgdmFsdWUgb2Ygcm91bmQgb3Igc3F1YXJl
Ci0gICAgREVGSU5FX1NUQVRJQ19MT0NBTChQYXRoLCB0ZW1wUGF0aCwgKCkpOwotCi0gICAgYXBw
bHlNb2RlID0gQXBwbHlUb0ZpbGxNb2RlOwotICAgIHVzZVBhdGggPSAmdGVtcFBhdGg7Ci0gICAg
dXNlUGF0aC0+Y2xlYXIoKTsKLSAgICBpZiAoc3R5bGUoKS0+c3ZnU3R5bGUoKS0+Y2FwU3R5bGUo
KSA9PSBTcXVhcmVDYXApCi0gICAgICAgIHVzZVBhdGgtPmFkZFJlY3QoemVyb0xlbmd0aFN1YnBh
dGhSZWN0KCkpOwotICAgIGVsc2UKLSAgICAgICAgdXNlUGF0aC0+YWRkRWxsaXBzZSh6ZXJvTGVu
Z3RoU3VicGF0aFJlY3QoKSk7Ci19Ci0KLWJvb2wgUmVuZGVyU1ZHUGF0aDo6c2V0dXBOb25TY2Fs
aW5nU3Ryb2tlUGF0aChQYXRoKiYgdXNlUGF0aCwgR3JhcGhpY3NDb250ZXh0U3RhdGVTYXZlciYg
c3RhdGVTYXZlcikKK3ZvaWQgUmVuZGVyU1ZHUGF0aDo6aW5mbGF0ZVdpdGhNYXJrZXJCb3VuZHMo
KQogewotICAgIERFRklORV9TVEFUSUNfTE9DQUwoUGF0aCwgdGVtcFBhdGgsICgpKTsKLQotICAg
IFNWR1N0eWxlZFRyYW5zZm9ybWFibGVFbGVtZW50KiBlbGVtZW50ID0gc3RhdGljX2Nhc3Q8U1ZH
U3R5bGVkVHJhbnNmb3JtYWJsZUVsZW1lbnQqPihub2RlKCkpOwotICAgIEFmZmluZVRyYW5zZm9y
bSBub25TY2FsaW5nU3Ryb2tlVHJhbnNmb3JtID0gZWxlbWVudC0+Z2V0U2NyZWVuQ1RNKFNWR0xv
Y2F0YWJsZTo6RGlzYWxsb3dTdHlsZVVwZGF0ZSk7Ci0gICAgaWYgKCFub25TY2FsaW5nU3Ryb2tl
VHJhbnNmb3JtLmlzSW52ZXJ0aWJsZSgpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICB0
ZW1wUGF0aCA9IG1fcGF0aDsKLSAgICB1c2VQYXRoID0gJnRlbXBQYXRoOwotICAgIHRlbXBQYXRo
LnRyYW5zZm9ybShub25TY2FsaW5nU3Ryb2tlVHJhbnNmb3JtKTsKLQotICAgIHN0YXRlU2F2ZXIu
c2F2ZSgpOwotICAgIHN0YXRlU2F2ZXIuY29udGV4dCgpLT5jb25jYXRDVE0obm9uU2NhbGluZ1N0
cm9rZVRyYW5zZm9ybS5pbnZlcnNlKCkpOwotICAgIHJldHVybiB0cnVlOwotfQotCi12b2lkIFJl
bmRlclNWR1BhdGg6OmZpbGxBbmRTdHJva2VQYXRoKEdyYXBoaWNzQ29udGV4dCogY29udGV4dCkK
LXsKLSAgICBSZW5kZXJTdHlsZSogc3R5bGUgPSB0aGlzLT5zdHlsZSgpOwotCi0gICAgQ29sb3Ig
ZmFsbGJhY2tDb2xvcjsKLSAgICBpZiAoUmVuZGVyU1ZHUmVzb3VyY2UqIGZpbGxQYWludGluZ1Jl
c291cmNlID0gUmVuZGVyU1ZHUmVzb3VyY2U6OmZpbGxQYWludGluZ1Jlc291cmNlKHRoaXMsIHN0
eWxlLCBmYWxsYmFja0NvbG9yKSkgewotICAgICAgICBpZiAoZmlsbFBhaW50aW5nUmVzb3VyY2Ut
PmFwcGx5UmVzb3VyY2UodGhpcywgc3R5bGUsIGNvbnRleHQsIEFwcGx5VG9GaWxsTW9kZSkpCi0g
ICAgICAgICAgICBmaWxsUGFpbnRpbmdSZXNvdXJjZS0+cG9zdEFwcGx5UmVzb3VyY2UodGhpcywg
Y29udGV4dCwgQXBwbHlUb0ZpbGxNb2RlLCAmbV9wYXRoKTsKLSAgICAgICAgZWxzZSBpZiAoZmFs
bGJhY2tDb2xvci5pc1ZhbGlkKCkpIHsKLSAgICAgICAgICAgIFJlbmRlclNWR1Jlc291cmNlU29s
aWRDb2xvciogZmFsbGJhY2tSZXNvdXJjZSA9IFJlbmRlclNWR1Jlc291cmNlOjpzaGFyZWRTb2xp
ZFBhaW50aW5nUmVzb3VyY2UoKTsKLSAgICAgICAgICAgIGZhbGxiYWNrUmVzb3VyY2UtPnNldENv
bG9yKGZhbGxiYWNrQ29sb3IpOwotICAgICAgICAgICAgaWYgKGZhbGxiYWNrUmVzb3VyY2UtPmFw
cGx5UmVzb3VyY2UodGhpcywgc3R5bGUsIGNvbnRleHQsIEFwcGx5VG9GaWxsTW9kZSkpCi0gICAg
ICAgICAgICAgICAgZmFsbGJhY2tSZXNvdXJjZS0+cG9zdEFwcGx5UmVzb3VyY2UodGhpcywgY29u
dGV4dCwgQXBwbHlUb0ZpbGxNb2RlLCAmbV9wYXRoKTsKLSAgICAgICAgfQotICAgIH0KLQotICAg
IGZhbGxiYWNrQ29sb3IgPSBDb2xvcigpOwotICAgIFJlbmRlclNWR1Jlc291cmNlKiBzdHJva2VQ
YWludGluZ1Jlc291cmNlID0gUmVuZGVyU1ZHUmVzb3VyY2U6OnN0cm9rZVBhaW50aW5nUmVzb3Vy
Y2UodGhpcywgc3R5bGUsIGZhbGxiYWNrQ29sb3IpOwotICAgIGlmICghc3Ryb2tlUGFpbnRpbmdS
ZXNvdXJjZSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgUGF0aCogdXNlUGF0aCA9ICZtX3BhdGg7
Ci0gICAgaW50IGFwcGx5TW9kZSA9IEFwcGx5VG9TdHJva2VNb2RlOwotCi0gICAgYm9vbCBub25T
Y2FsaW5nU3Ryb2tlID0gc3R5bGUtPnN2Z1N0eWxlKCktPnZlY3RvckVmZmVjdCgpID09IFZFX05P
Tl9TQ0FMSU5HX1NUUk9LRTsKLQotICAgIEdyYXBoaWNzQ29udGV4dFN0YXRlU2F2ZXIgc3RhdGVT
YXZlcigqY29udGV4dCwgZmFsc2UpOwotCi0gICAgLy8gU3BlYygxMS40KTogQW55IHplcm8gbGVu
Z3RoIHN1YnBhdGggc2hhbGwgbm90IGJlIHN0cm9rZWQgaWYgdGhlIOKAmHN0cm9rZS1saW5lY2Fw
4oCZIHByb3BlcnR5IGhhcyBhIHZhbHVlIG9mIGJ1dHQKLSAgICAvLyBidXQgc2hhbGwgYmUgc3Ry
b2tlZCBpZiB0aGUg4oCYc3Ryb2tlLWxpbmVjYXDigJkgcHJvcGVydHkgaGFzIGEgdmFsdWUgb2Yg
cm91bmQgb3Igc3F1YXJlCi0gICAgLy8gRklYTUU6IHRoaXMgZG9lcyBub3Qgd29yayBmb3IgemVy
by1sZW5ndGggc3VicGF0aHMsIG9ubHkgd2hlbiB0b3RhbCBwYXRoIGlzIHplcm8tbGVuZ3RoCi0g
ICAgaWYgKHNob3VsZFN0cm9rZVplcm9MZW5ndGhTdWJwYXRoKCkpCi0gICAgICAgIHNldHVwU3F1
YXJlQ2FwUGF0aCh1c2VQYXRoLCBhcHBseU1vZGUpOwotICAgIGVsc2UgaWYgKG5vblNjYWxpbmdT
dHJva2UpIHsKLSAgICAgICBpZiAoIXNldHVwTm9uU2NhbGluZ1N0cm9rZVBhdGgodXNlUGF0aCwg
c3RhdGVTYXZlcikpCi0gICAgICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBpZiAoc3Ryb2tl
UGFpbnRpbmdSZXNvdXJjZS0+YXBwbHlSZXNvdXJjZSh0aGlzLCBzdHlsZSwgY29udGV4dCwgYXBw
bHlNb2RlKSkKLSAgICAgICAgc3Ryb2tlUGFpbnRpbmdSZXNvdXJjZS0+cG9zdEFwcGx5UmVzb3Vy
Y2UodGhpcywgY29udGV4dCwgYXBwbHlNb2RlLCB1c2VQYXRoKTsKLSAgICBlbHNlIGlmIChmYWxs
YmFja0NvbG9yLmlzVmFsaWQoKSkgewotICAgICAgICBSZW5kZXJTVkdSZXNvdXJjZVNvbGlkQ29s
b3IqIGZhbGxiYWNrUmVzb3VyY2UgPSBSZW5kZXJTVkdSZXNvdXJjZTo6c2hhcmVkU29saWRQYWlu
dGluZ1Jlc291cmNlKCk7Ci0gICAgICAgIGZhbGxiYWNrUmVzb3VyY2UtPnNldENvbG9yKGZhbGxi
YWNrQ29sb3IpOwotICAgICAgICBpZiAoZmFsbGJhY2tSZXNvdXJjZS0+YXBwbHlSZXNvdXJjZSh0
aGlzLCBzdHlsZSwgY29udGV4dCwgYXBwbHlNb2RlKSkKLSAgICAgICAgICAgIGZhbGxiYWNrUmVz
b3VyY2UtPnBvc3RBcHBseVJlc291cmNlKHRoaXMsIGNvbnRleHQsIGFwcGx5TW9kZSwgdXNlUGF0
aCk7Ci0gICAgfQotfQotCi12b2lkIFJlbmRlclNWR1BhdGg6OnBhaW50KFBhaW50SW5mbyYgcGFp
bnRJbmZvLCBjb25zdCBMYXlvdXRQb2ludCYpCi17Ci0gICAgaWYgKHBhaW50SW5mby5jb250ZXh0
LT5wYWludGluZ0Rpc2FibGVkKCkgfHwgc3R5bGUoKS0+dmlzaWJpbGl0eSgpID09IEhJRERFTiB8
fCBtX3BhdGguaXNFbXB0eSgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBGbG9hdFJlY3QgYm91
bmRpbmdCb3ggPSByZXBhaW50UmVjdEluTG9jYWxDb29yZGluYXRlcygpOwotICAgIGlmICghU1ZH
UmVuZGVyU3VwcG9ydDo6cGFpbnRJbmZvSW50ZXJzZWN0c1JlcGFpbnRSZWN0KGJvdW5kaW5nQm94
LCBtX2xvY2FsVHJhbnNmb3JtLCBwYWludEluZm8pKQotICAgICAgICByZXR1cm47Ci0KLSAgICBQ
YWludEluZm8gY2hpbGRQYWludEluZm8ocGFpbnRJbmZvKTsKLSAgICBib29sIGRyYXdzT3V0bGlu
ZSA9IHN0eWxlKCktPm91dGxpbmVXaWR0aCgpICYmIChjaGlsZFBhaW50SW5mby5waGFzZSA9PSBQ
YWludFBoYXNlT3V0bGluZSB8fCBjaGlsZFBhaW50SW5mby5waGFzZSA9PSBQYWludFBoYXNlU2Vs
Zk91dGxpbmUpOwotICAgIGlmIChkcmF3c091dGxpbmUgfHwgY2hpbGRQYWludEluZm8ucGhhc2Ug
PT0gUGFpbnRQaGFzZUZvcmVncm91bmQpIHsKLSAgICAgICAgR3JhcGhpY3NDb250ZXh0U3RhdGVT
YXZlciBzdGF0ZVNhdmVyKCpjaGlsZFBhaW50SW5mby5jb250ZXh0KTsKLSAgICAgICAgY2hpbGRQ
YWludEluZm8uYXBwbHlUcmFuc2Zvcm0obV9sb2NhbFRyYW5zZm9ybSk7Ci0KLSAgICAgICAgaWYg
KGNoaWxkUGFpbnRJbmZvLnBoYXNlID09IFBhaW50UGhhc2VGb3JlZ3JvdW5kKSB7Ci0gICAgICAg
ICAgICBQYWludEluZm8gc2F2ZWRJbmZvKGNoaWxkUGFpbnRJbmZvKTsKLQotICAgICAgICAgICAg
aWYgKFNWR1JlbmRlclN1cHBvcnQ6OnByZXBhcmVUb1JlbmRlclNWR0NvbnRlbnQodGhpcywgY2hp
bGRQYWludEluZm8pKSB7Ci0gICAgICAgICAgICAgICAgY29uc3QgU1ZHUmVuZGVyU3R5bGUqIHN2
Z1N0eWxlID0gc3R5bGUoKS0+c3ZnU3R5bGUoKTsKLSAgICAgICAgICAgICAgICBpZiAoc3ZnU3R5
bGUtPnNoYXBlUmVuZGVyaW5nKCkgPT0gU1JfQ1JJU1BFREdFUykKLSAgICAgICAgICAgICAgICAg
ICAgY2hpbGRQYWludEluZm8uY29udGV4dC0+c2V0U2hvdWxkQW50aWFsaWFzKGZhbHNlKTsKLQot
ICAgICAgICAgICAgICAgIGZpbGxBbmRTdHJva2VQYXRoKGNoaWxkUGFpbnRJbmZvLmNvbnRleHQp
OwotCi0gICAgICAgICAgICAgICAgaWYgKHN2Z1N0eWxlLT5oYXNNYXJrZXJzKCkpCi0gICAgICAg
ICAgICAgICAgICAgIG1fbWFya2VyTGF5b3V0SW5mby5kcmF3TWFya2VycyhjaGlsZFBhaW50SW5m
byk7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIFNWR1JlbmRlclN1cHBvcnQ6OmZpbmlz
aFJlbmRlclNWR0NvbnRlbnQodGhpcywgY2hpbGRQYWludEluZm8sIHNhdmVkSW5mby5jb250ZXh0
KTsKLSAgICAgICAgfQotCi0gICAgICAgIGlmIChkcmF3c091dGxpbmUpCi0gICAgICAgICAgICBw
YWludE91dGxpbmUoY2hpbGRQYWludEluZm8uY29udGV4dCwgSW50UmVjdChib3VuZGluZ0JveCkp
OwotICAgIH0KLX0KLQotLy8gVGhpcyBtZXRob2QgaXMgY2FsbGVkIGZyb20gaW5zaWRlIHBhaW50
T3V0bGluZSgpIHNpbmNlIHdlIGNhbGwgcGFpbnRPdXRsaW5lKCkKLS8vIHdoaWxlIHRyYW5zZm9y
bWVkIHRvIG91ciBjb29yZCBzeXN0ZW0sIHJldHVybiBsb2NhbCBjb29yZHMKLXZvaWQgUmVuZGVy
U1ZHUGF0aDo6YWRkRm9jdXNSaW5nUmVjdHMoVmVjdG9yPExheW91dFJlY3Q+JiByZWN0cywgY29u
c3QgTGF5b3V0UG9pbnQmKSAKLXsKLSAgICBMYXlvdXRSZWN0IHJlY3QgPSBlbmNsb3NpbmdMYXlv
dXRSZWN0KHJlcGFpbnRSZWN0SW5Mb2NhbENvb3JkaW5hdGVzKCkpOwotICAgIGlmICghcmVjdC5p
c0VtcHR5KCkpCi0gICAgICAgIHJlY3RzLmFwcGVuZChyZWN0KTsKLX0KLQotYm9vbCBSZW5kZXJT
VkdQYXRoOjpub2RlQXRGbG9hdFBvaW50KGNvbnN0IEhpdFRlc3RSZXF1ZXN0JiByZXF1ZXN0LCBI
aXRUZXN0UmVzdWx0JiByZXN1bHQsIGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50SW5QYXJlbnQsIEhp
dFRlc3RBY3Rpb24gaGl0VGVzdEFjdGlvbikKLXsKLSAgICAvLyBXZSBvbmx5IGRyYXcgaW4gdGhl
IGZvcmdyb3VuZCBwaGFzZSwgc28gd2Ugb25seSBoaXQtdGVzdCB0aGVuLgotICAgIGlmIChoaXRU
ZXN0QWN0aW9uICE9IEhpdFRlc3RGb3JlZ3JvdW5kKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0K
LSAgICBGbG9hdFBvaW50IGxvY2FsUG9pbnQgPSBtX2xvY2FsVHJhbnNmb3JtLmludmVyc2UoKS5t
YXBQb2ludChwb2ludEluUGFyZW50KTsKLQotICAgIGlmICghU1ZHUmVuZGVyU3VwcG9ydDo6cG9p
bnRJbkNsaXBwaW5nQXJlYSh0aGlzLCBsb2NhbFBvaW50KSkKLSAgICAgICAgcmV0dXJuIGZhbHNl
OwotCi0gICAgUG9pbnRlckV2ZW50c0hpdFJ1bGVzIGhpdFJ1bGVzKFBvaW50ZXJFdmVudHNIaXRS
dWxlczo6U1ZHX1BBVEhfSElUVEVTVElORywgcmVxdWVzdCwgc3R5bGUoKS0+cG9pbnRlckV2ZW50
cygpKTsKLSAgICBib29sIGlzVmlzaWJsZSA9IChzdHlsZSgpLT52aXNpYmlsaXR5KCkgPT0gVklT
SUJMRSk7Ci0gICAgaWYgKGlzVmlzaWJsZSB8fCAhaGl0UnVsZXMucmVxdWlyZVZpc2libGUpIHsK
LSAgICAgICAgY29uc3QgU1ZHUmVuZGVyU3R5bGUqIHN2Z1N0eWxlID0gc3R5bGUoKS0+c3ZnU3R5
bGUoKTsKLSAgICAgICAgV2luZFJ1bGUgZmlsbFJ1bGUgPSBzdmdTdHlsZS0+ZmlsbFJ1bGUoKTsK
LSAgICAgICAgaWYgKHJlcXVlc3Quc3ZnQ2xpcENvbnRlbnQoKSkKLSAgICAgICAgICAgIGZpbGxS
dWxlID0gc3ZnU3R5bGUtPmNsaXBSdWxlKCk7Ci0gICAgICAgIGlmICgoaGl0UnVsZXMuY2FuSGl0
U3Ryb2tlICYmIChzdmdTdHlsZS0+aGFzU3Ryb2tlKCkgfHwgIWhpdFJ1bGVzLnJlcXVpcmVTdHJv
a2UpICYmIHN0cm9rZUNvbnRhaW5zKGxvY2FsUG9pbnQsIGhpdFJ1bGVzLnJlcXVpcmVTdHJva2Up
KQotICAgICAgICAgICAgfHwgKGhpdFJ1bGVzLmNhbkhpdEZpbGwgJiYgKHN2Z1N0eWxlLT5oYXNG
aWxsKCkgfHwgIWhpdFJ1bGVzLnJlcXVpcmVGaWxsKSAmJiBmaWxsQ29udGFpbnMobG9jYWxQb2lu
dCwgaGl0UnVsZXMucmVxdWlyZUZpbGwsIGZpbGxSdWxlKSkpIHsKLSAgICAgICAgICAgIHVwZGF0
ZUhpdFRlc3RSZXN1bHQocmVzdWx0LCByb3VuZGVkTGF5b3V0UG9pbnQobG9jYWxQb2ludCkpOwot
ICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgcmV0dXJuIGZh
bHNlOwotfQotCi1GbG9hdFJlY3QgUmVuZGVyU1ZHUGF0aDo6Y2FsY3VsYXRlTWFya2VyQm91bmRz
SWZOZWVkZWQoKQotewotICAgIFNWR0VsZW1lbnQqIHN2Z0VsZW1lbnQgPSBzdGF0aWNfY2FzdDxT
VkdFbGVtZW50Kj4obm9kZSgpKTsKLSAgICBBU1NFUlQoc3ZnRWxlbWVudCAmJiBzdmdFbGVtZW50
LT5kb2N1bWVudCgpKTsKLSAgICBpZiAoIXN2Z0VsZW1lbnQtPmlzU3R5bGVkKCkpCi0gICAgICAg
IHJldHVybiBGbG9hdFJlY3QoKTsKLQotICAgIFNWR1N0eWxlZEVsZW1lbnQqIHN0eWxlZEVsZW1l
bnQgPSBzdGF0aWNfY2FzdDxTVkdTdHlsZWRFbGVtZW50Kj4oc3ZnRWxlbWVudCk7Ci0gICAgaWYg
KCFzdHlsZWRFbGVtZW50LT5zdXBwb3J0c01hcmtlcnMoKSkKLSAgICAgICAgcmV0dXJuIEZsb2F0
UmVjdCgpOwotCi0gICAgY29uc3QgU1ZHUmVuZGVyU3R5bGUqIHN2Z1N0eWxlID0gc3R5bGUoKS0+
c3ZnU3R5bGUoKTsKLSAgICBBU1NFUlQoc3ZnU3R5bGUtPmhhc01hcmtlcnMoKSk7Ci0KLSAgICBT
VkdSZXNvdXJjZXMqIHJlc291cmNlcyA9IFNWR1Jlc291cmNlc0NhY2hlOjpjYWNoZWRSZXNvdXJj
ZXNGb3JSZW5kZXJPYmplY3QodGhpcyk7Ci0gICAgaWYgKCFyZXNvdXJjZXMpCi0gICAgICAgIHJl
dHVybiBGbG9hdFJlY3QoKTsKLQotICAgIFJlbmRlclNWR1Jlc291cmNlTWFya2VyKiBtYXJrZXJT
dGFydCA9IHJlc291cmNlcy0+bWFya2VyU3RhcnQoKTsKLSAgICBSZW5kZXJTVkdSZXNvdXJjZU1h
cmtlciogbWFya2VyTWlkID0gcmVzb3VyY2VzLT5tYXJrZXJNaWQoKTsKLSAgICBSZW5kZXJTVkdS
ZXNvdXJjZU1hcmtlciogbWFya2VyRW5kID0gcmVzb3VyY2VzLT5tYXJrZXJFbmQoKTsKLSAgICBp
ZiAoIW1hcmtlclN0YXJ0ICYmICFtYXJrZXJNaWQgJiYgIW1hcmtlckVuZCkKLSAgICAgICAgcmV0
dXJuIEZsb2F0UmVjdCgpOwotCi0gICAgcmV0dXJuIG1fbWFya2VyTGF5b3V0SW5mby5jYWxjdWxh
dGVCb3VuZGFyaWVzKG1hcmtlclN0YXJ0LCBtYXJrZXJNaWQsIG1hcmtlckVuZCwgc3ZnU3R5bGUt
PnN0cm9rZVdpZHRoKCkudmFsdWUoc3ZnRWxlbWVudCksIG1fcGF0aCk7Ci19Ci0KLXZvaWQgUmVu
ZGVyU1ZHUGF0aDo6dXBkYXRlQ2FjaGVkQm91bmRhcmllcygpCi17Ci0gICAgaWYgKG1fcGF0aC5p
c0VtcHR5KCkpIHsKLSAgICAgICAgbV9maWxsQm91bmRpbmdCb3ggPSBGbG9hdFJlY3QoKTsKLSAg
ICAgICAgbV9zdHJva2VBbmRNYXJrZXJCb3VuZGluZ0JveCA9IEZsb2F0UmVjdCgpOwotICAgICAg
ICBtX3JlcGFpbnRCb3VuZGluZ0JveCA9IEZsb2F0UmVjdCgpOwotICAgICAgICByZXR1cm47Ci0g
ICAgfQotCi0gICAgLy8gQ2FjaGUgX3VuY2xpcHBlZF8gZmlsbCBib3VuZGluZyBib3gsIHVzZWQg
Zm9yIGNhbGN1bGF0aW9ucyBpbiByZXNvdXJjZXMKLSAgICBtX2ZpbGxCb3VuZGluZ0JveCA9IG1f
cGF0aC5ib3VuZGluZ1JlY3QoKTsKLQotICAgIC8vIFNwZWMoMTEuNCk6IEFueSB6ZXJvIGxlbmd0
aCBzdWJwYXRoIHNoYWxsIG5vdCBiZSBzdHJva2VkIGlmIHRoZSDigJhzdHJva2UtbGluZWNhcOKA
mSBwcm9wZXJ0eSBoYXMgYSB2YWx1ZSBvZiBidXR0Ci0gICAgLy8gYnV0IHNoYWxsIGJlIHN0cm9r
ZWQgaWYgdGhlIOKAmHN0cm9rZS1saW5lY2Fw4oCZIHByb3BlcnR5IGhhcyBhIHZhbHVlIG9mIHJv
dW5kIG9yIHNxdWFyZQotICAgIGlmIChzaG91bGRTdHJva2VaZXJvTGVuZ3RoU3VicGF0aCgpKSB7
Ci0gICAgICAgIG1fc3Ryb2tlQW5kTWFya2VyQm91bmRpbmdCb3ggPSB6ZXJvTGVuZ3RoU3VicGF0
aFJlY3QoKTsKLSAgICAgICAgLy8gQ2FjaGUgc21hbGxlc3QgcG9zc2libGUgcmVwYWludCByZWN0
YW5nbGUKLSAgICAgICAgbV9yZXBhaW50Qm91bmRpbmdCb3ggPSBtX3N0cm9rZUFuZE1hcmtlckJv
dW5kaW5nQm94OwotICAgICAgICBTVkdSZW5kZXJTdXBwb3J0OjppbnRlcnNlY3RSZXBhaW50UmVj
dFdpdGhSZXNvdXJjZXModGhpcywgbV9yZXBhaW50Qm91bmRpbmdCb3gpOwotICAgICAgICByZXR1
cm47Ci0gICAgfQotCi0gICAgLy8gQ2FjaGUgX3VuY2xpcHBlZF8gc3Ryb2tlIGJvdW5kaW5nIGJv
eCwgdXNlZCBmb3IgY2FsY3VsYXRpb25zIGluIHJlc291cmNlcyAoaW5jbHVkZXMgbWFya2VyIGJv
dW5kYXJpZXMpCi0gICAgbV9zdHJva2VBbmRNYXJrZXJCb3VuZGluZ0JveCA9IG1fZmlsbEJvdW5k
aW5nQm94OwotCi0gICAgY29uc3QgU1ZHUmVuZGVyU3R5bGUqIHN2Z1N0eWxlID0gc3R5bGUoKS0+
c3ZnU3R5bGUoKTsKLSAgICBpZiAoc3ZnU3R5bGUtPmhhc1N0cm9rZSgpKSB7Ci0gICAgICAgIEJv
dW5kaW5nUmVjdFN0cm9rZVN0eWxlQXBwbGllciBzdHJva2VTdHlsZSh0aGlzLCBzdHlsZSgpKTsK
LSAgICAgICAgbV9zdHJva2VBbmRNYXJrZXJCb3VuZGluZ0JveC51bml0ZShtX3BhdGguc3Ryb2tl
Qm91bmRpbmdSZWN0KCZzdHJva2VTdHlsZSkpOwotICAgIH0KLQotICAgIGlmIChzdmdTdHlsZS0+
aGFzTWFya2VycygpKSB7CisgICAgaWYgKHN0eWxlKCktPnN2Z1N0eWxlKCktPmhhc01hcmtlcnMo
KSkgewogICAgICAgICBGbG9hdFJlY3QgbWFya2VyQm91bmRzID0gY2FsY3VsYXRlTWFya2VyQm91
bmRzSWZOZWVkZWQoKTsKLSAgICAgICAgaWYgKCFtYXJrZXJCb3VuZHMuaXNFbXB0eSgpKQotICAg
ICAgICAgICAgbV9zdHJva2VBbmRNYXJrZXJCb3VuZGluZ0JveC51bml0ZShtYXJrZXJCb3VuZHMp
OworICAgICAgICBpZiAoIW1hcmtlckJvdW5kcy5pc0VtcHR5KCkpIHsKKyAgICAgICAgICAgIEZs
b2F0UmVjdCBzdHJva2VSZWN0KHN0cm9rZUJvdW5kaW5nQm94KCkpOworICAgICAgICAgICAgc3Ry
b2tlUmVjdC51bml0ZShtYXJrZXJCb3VuZHMpOworICAgICAgICAgICAgc2V0U3Ryb2tlQW5kTWFy
a2VyQm91bmRpbmdCb3goc3Ryb2tlUmVjdCk7CisgICAgICAgIH0KICAgICB9Ci0KLSAgICAvLyBD
YWNoZSBzbWFsbGVzdCBwb3NzaWJsZSByZXBhaW50IHJlY3RhbmdsZQotICAgIG1fcmVwYWludEJv
dW5kaW5nQm94ID0gbV9zdHJva2VBbmRNYXJrZXJCb3VuZGluZ0JveDsKLSAgICBTVkdSZW5kZXJT
dXBwb3J0OjppbnRlcnNlY3RSZXBhaW50UmVjdFdpdGhSZXNvdXJjZXModGhpcywgbV9yZXBhaW50
Qm91bmRpbmdCb3gpOwogfQogCiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvc3ZnL1JlbmRlclNWR1BhdGguaCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVu
ZGVyU1ZHUGF0aC5oCmluZGV4IDk4ZTYwOGQuLjA0YWExYjUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUGF0aC5oCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUGF0aC5oCkBAIC00LDYgKzQsOCBAQAogICogQ29weXJp
Z2h0IChDKSAyMDA1IEVyaWMgU2VpZGVsIDxlcmljQHdlYmtpdC5vcmc+CiAgKiBDb3B5cmlnaHQg
KEMpIDIwMDYgQXBwbGUgQ29tcHV0ZXIsIEluYwogICogQ29weXJpZ2h0IChDKSAyMDA5IEdvb2ds
ZSwgSW5jLgorICogQ29weXJpZ2h0IChDKSAyMDExIFJlbmF0YSBIb2RvdmFuIDxyZW5pQHdlYmtp
dC5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgVW5pdmVyc2l0eSBvZiBTemVnZWQKICAqCiAg
KiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQg
YW5kL29yCiAgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBH
ZW5lcmFsIFB1YmxpYwpAQCAtMjUsODYgKzI3LDIzIEBACiAjZGVmaW5lIFJlbmRlclNWR1BhdGhf
aAogCiAjaWYgRU5BQkxFKFNWRykKLSNpbmNsdWRlICJBZmZpbmVUcmFuc2Zvcm0uaCIKLSNpbmNs
dWRlICJGbG9hdFJlY3QuaCIKLSNpbmNsdWRlICJSZW5kZXJTVkdNb2RlbE9iamVjdC5oIgotI2lu
Y2x1ZGUgIlNWR01hcmtlckxheW91dEluZm8uaCIKKyNpbmNsdWRlICJSZW5kZXJTVkdTaGFwZS5o
IgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLWNsYXNzIEZsb2F0UG9pbnQ7Ci1jbGFzcyBHcmFw
aGljc0NvbnRleHRTdGF0ZVNhdmVyOwotY2xhc3MgUmVuZGVyU1ZHQ29udGFpbmVyOwotY2xhc3Mg
U1ZHU3R5bGVkVHJhbnNmb3JtYWJsZUVsZW1lbnQ7Ci0KLWNsYXNzIFJlbmRlclNWR1BhdGggOiBw
dWJsaWMgUmVuZGVyU1ZHTW9kZWxPYmplY3QgeworLy8gRklYTUU6IFJlbmRlclNWR1BhdGggd2ls
bCBiZSByZW1vdmVkIHdoZW4gYWxsIFNWRyBzaGFwZXMgd2lsbCBiZSByZW5kZXJlZCB2aWEgUmVu
ZGVyU1ZHU2hhcGUuCitjbGFzcyBSZW5kZXJTVkdQYXRoIDogcHVibGljIFJlbmRlclNWR1NoYXBl
IHsKIHB1YmxpYzoKLSAgICBleHBsaWNpdCBSZW5kZXJTVkdQYXRoKFNWR1N0eWxlZFRyYW5zZm9y
bWFibGVFbGVtZW50Kik7CisgICAgUmVuZGVyU1ZHUGF0aChTVkdTdHlsZWRUcmFuc2Zvcm1hYmxl
RWxlbWVudCopOwogICAgIHZpcnR1YWwgflJlbmRlclNWR1BhdGgoKTsKIAotICAgIGNvbnN0IFBh
dGgmIHBhdGgoKSBjb25zdCB7IHJldHVybiBtX3BhdGg7IH0KLSAgICB2b2lkIHNldE5lZWRzUGF0
aFVwZGF0ZSgpIHsgbV9uZWVkc1BhdGhVcGRhdGUgPSB0cnVlOyB9Ci0gICAgdmlydHVhbCB2b2lk
IHNldE5lZWRzQm91bmRhcmllc1VwZGF0ZSgpIHsgbV9uZWVkc0JvdW5kYXJpZXNVcGRhdGUgPSB0
cnVlOyB9Ci0gICAgdmlydHVhbCB2b2lkIHNldE5lZWRzVHJhbnNmb3JtVXBkYXRlKCkgeyBtX25l
ZWRzVHJhbnNmb3JtVXBkYXRlID0gdHJ1ZTsgfQotCiBwcml2YXRlOgotICAgIC8vIEhpdC1kZXRl
Y3Rpb24gc2VwZXJhdGVkIGZvciB0aGUgZmlsbCBhbmQgdGhlIHN0cm9rZQotICAgIGJvb2wgZmls
bENvbnRhaW5zKGNvbnN0IEZsb2F0UG9pbnQmLCBib29sIHJlcXVpcmVzRmlsbCA9IHRydWUsIFdp
bmRSdWxlIGZpbGxSdWxlID0gUlVMRV9OT05aRVJPKTsKLSAgICBib29sIHN0cm9rZUNvbnRhaW5z
KGNvbnN0IEZsb2F0UG9pbnQmLCBib29sIHJlcXVpcmVzU3Ryb2tlID0gdHJ1ZSk7Ci0KLSAgICB2
aXJ0dWFsIEZsb2F0UmVjdCBvYmplY3RCb3VuZGluZ0JveCgpIGNvbnN0IHsgcmV0dXJuIG1fZmls
bEJvdW5kaW5nQm94OyB9Ci0gICAgdmlydHVhbCBGbG9hdFJlY3Qgc3Ryb2tlQm91bmRpbmdCb3go
KSBjb25zdCB7IHJldHVybiBtX3N0cm9rZUFuZE1hcmtlckJvdW5kaW5nQm94OyB9Ci0gICAgdmly
dHVhbCBGbG9hdFJlY3QgcmVwYWludFJlY3RJbkxvY2FsQ29vcmRpbmF0ZXMoKSBjb25zdCB7IHJl
dHVybiBtX3JlcGFpbnRCb3VuZGluZ0JveDsgfQotICAgIHZpcnR1YWwgY29uc3QgQWZmaW5lVHJh
bnNmb3JtJiBsb2NhbFRvUGFyZW50VHJhbnNmb3JtKCkgY29uc3QgeyByZXR1cm4gbV9sb2NhbFRy
YW5zZm9ybTsgfQotCiAgICAgdmlydHVhbCBib29sIGlzU1ZHUGF0aCgpIGNvbnN0IHsgcmV0dXJu
IHRydWU7IH0KICAgICB2aXJ0dWFsIGNvbnN0IGNoYXIqIHJlbmRlck5hbWUoKSBjb25zdCB7IHJl
dHVybiAiUmVuZGVyU1ZHUGF0aCI7IH0KIAotICAgIHZpcnR1YWwgdm9pZCBsYXlvdXQoKTsKLSAg
ICB2aXJ0dWFsIHZvaWQgcGFpbnQoUGFpbnRJbmZvJiwgY29uc3QgTGF5b3V0UG9pbnQmKTsKLSAg
ICB2aXJ0dWFsIHZvaWQgYWRkRm9jdXNSaW5nUmVjdHMoVmVjdG9yPExheW91dFJlY3Q+JiwgY29u
c3QgTGF5b3V0UG9pbnQmKTsKLQotICAgIHZpcnR1YWwgYm9vbCBub2RlQXRGbG9hdFBvaW50KGNv
bnN0IEhpdFRlc3RSZXF1ZXN0JiwgSGl0VGVzdFJlc3VsdCYsIGNvbnN0IEZsb2F0UG9pbnQmIHBv
aW50SW5QYXJlbnQsIEhpdFRlc3RBY3Rpb24pOwotCi0gICAgRmxvYXRSZWN0IGNhbGN1bGF0ZU1h
cmtlckJvdW5kc0lmTmVlZGVkKCk7Ci0gICAgdm9pZCB1cGRhdGVDYWNoZWRCb3VuZGFyaWVzKCk7
Ci0KLSAgICB2b2lkIHNldHVwU3F1YXJlQ2FwUGF0aChQYXRoKiYgdXNlUGF0aCwgaW50JiBhcHBs
eU1vZGUpOwotICAgIGJvb2wgc2V0dXBOb25TY2FsaW5nU3Ryb2tlUGF0aChQYXRoKiYgdXNlUGF0
aCwgR3JhcGhpY3NDb250ZXh0U3RhdGVTYXZlciYpOwotICAgIGJvb2wgc2hvdWxkU3Ryb2tlWmVy
b0xlbmd0aFN1YnBhdGgoKSBjb25zdDsKLSAgICBGbG9hdFJlY3QgemVyb0xlbmd0aFN1YnBhdGhS
ZWN0KCkgY29uc3Q7Ci0KLXByaXZhdGU6Ci0gICAgdmlydHVhbCBBZmZpbmVUcmFuc2Zvcm0gbG9j
YWxUcmFuc2Zvcm0oKSBjb25zdCB7IHJldHVybiBtX2xvY2FsVHJhbnNmb3JtOyB9Ci0gICAgdm9p
ZCBmaWxsQW5kU3Ryb2tlUGF0aChHcmFwaGljc0NvbnRleHQqKTsKLQotICAgIGJvb2wgbV9uZWVk
c0JvdW5kYXJpZXNVcGRhdGUgOiAxOwotICAgIGJvb2wgbV9uZWVkc1BhdGhVcGRhdGUgOiAxOwot
ICAgIGJvb2wgbV9uZWVkc1RyYW5zZm9ybVVwZGF0ZSA6IDE7Ci0KLSAgICBtdXRhYmxlIFBhdGgg
bV9wYXRoOwotICAgIEZsb2F0UmVjdCBtX2ZpbGxCb3VuZGluZ0JveDsKLSAgICBGbG9hdFJlY3Qg
bV9zdHJva2VBbmRNYXJrZXJCb3VuZGluZ0JveDsKLSAgICBGbG9hdFJlY3QgbV9yZXBhaW50Qm91
bmRpbmdCb3g7Ci0gICAgU1ZHTWFya2VyTGF5b3V0SW5mbyBtX21hcmtlckxheW91dEluZm87Ci0g
ICAgQWZmaW5lVHJhbnNmb3JtIG1fbG9jYWxUcmFuc2Zvcm07CisgICAgdmlydHVhbCB2b2lkIGlu
ZmxhdGVXaXRoTWFya2VyQm91bmRzKCk7CiB9OwogCi1pbmxpbmUgUmVuZGVyU1ZHUGF0aCogdG9S
ZW5kZXJTVkdQYXRoKFJlbmRlck9iamVjdCogb2JqZWN0KQotewotICAgIEFTU0VSVCghb2JqZWN0
IHx8IG9iamVjdC0+aXNTVkdQYXRoKCkpOwotICAgIHJldHVybiBzdGF0aWNfY2FzdDxSZW5kZXJT
VkdQYXRoKj4ob2JqZWN0KTsKLX0KLQotaW5saW5lIGNvbnN0IFJlbmRlclNWR1BhdGgqIHRvUmVu
ZGVyU1ZHUGF0aChjb25zdCBSZW5kZXJPYmplY3QqIG9iamVjdCkKLXsKLSAgICBBU1NFUlQoIW9i
amVjdCB8fCBvYmplY3QtPmlzU1ZHUGF0aCgpKTsKLSAgICByZXR1cm4gc3RhdGljX2Nhc3Q8Y29u
c3QgUmVuZGVyU1ZHUGF0aCo+KG9iamVjdCk7Ci19Ci0KLS8vIFRoaXMgd2lsbCBjYXRjaCBhbnlv
bmUgZG9pbmcgYW4gdW5uZWNlc3NhcnkgY2FzdC4KLXZvaWQgdG9SZW5kZXJTVkdQYXRoKGNvbnN0
IFJlbmRlclNWR1BhdGgqKTsKLQogfQogCiAjZW5kaWYgLy8gRU5BQkxFKFNWRykKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVjdC5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1JlY3QuY3BwCm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM3ZmNkZmEKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1JlY3QuY3BwCkBAIC0wLDAgKzEsMTE1IEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDExIFVuaXZlcnNpdHkgb2YgU3plZ2VkCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTEgUmVuYXRhIEhvZG92YW4gKHJlbmlAd2Via2l0Lm9yZykKKyAqIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBt
ZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBVTklWRVJTSVRZIE9GIFNaRUdFRCBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUK
KyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNI
QUxMIFVOSVZFUlNJVFkgT0YgU1pFR0VEIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFS
WSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UK
KyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorCisjaWYgRU5BQkxF
KFNWRykKKyNpbmNsdWRlICJSZW5kZXJTVkdSZWN0LmgiCisKKyNpbmNsdWRlICJTVkdOYW1lcy5o
IgorI2luY2x1ZGUgIlNWR1JlY3RFbGVtZW50LmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKwor
UmVuZGVyU1ZHUmVjdDo6UmVuZGVyU1ZHUmVjdChTVkdTdHlsZWRUcmFuc2Zvcm1hYmxlRWxlbWVu
dCogbm9kZSkKKyAgICA6IFJlbmRlclNWR1NoYXBlKG5vZGUpCit7Cit9CisKK1JlbmRlclNWR1Jl
Y3Q6On5SZW5kZXJTVkdSZWN0KCkKK3sKK30KKwordm9pZCBSZW5kZXJTVkdSZWN0OjpjcmVhdGVT
aGFwZSgpCit7CisgICAgLy8gQ2xlYXIgbV9ib3VuZGluZ0JveC4KKyAgICBtX2JvdW5kaW5nQm94
ID0gRmxvYXRSZWN0KCk7CisgICAgU1ZHUmVjdEVsZW1lbnQqIHJlY3QgPSBzdGF0aWNfY2FzdDxT
VkdSZWN0RWxlbWVudCo+KG5vZGUoKSk7CisgICAgQVNTRVJUKHJlY3QpOworICAgIGJvb2wgaGFz
UnggPSByZWN0LT5oYXNBdHRyaWJ1dGUoU1ZHTmFtZXM6OnJ4QXR0cik7CisgICAgYm9vbCBoYXNS
eSA9IHJlY3QtPmhhc0F0dHJpYnV0ZShTVkdOYW1lczo6cnlBdHRyKTsKKyAgICAvLyBGYWxsYmFj
ayB0byBSZW5kZXJTVkdTaGFwZSBpZiByZWN0IGhhcyBzcGVjaWFsIGZlYXR1cmVzLgorICAgIGlm
IChoYXNSeCB8fCBoYXNSeSkgeworICAgICAgIFJlbmRlclNWR1NoYXBlOjpjcmVhdGVTaGFwZSgp
OworICAgICAgIHNldElzRmlsbEZhbGxiYWNrKHRydWUpOworICAgICAgIHJldHVybjsKKyAgICB9
CisKKyAgICBGbG9hdFNpemUgYm91bmRpbmdCb3hTaXplKHJlY3QtPndpZHRoKCkudmFsdWUocmVj
dCksIHJlY3QtPmhlaWdodCgpLnZhbHVlKHJlY3QpKTsKKyAgICBpZiAoYm91bmRpbmdCb3hTaXpl
LmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgbV9ib3VuZGluZ0JveCA9IEZsb2F0
UmVjdChGbG9hdFBvaW50KHJlY3QtPngoKS52YWx1ZShyZWN0KSwgcmVjdC0+eSgpLnZhbHVlKHJl
Y3QpKSwgYm91bmRpbmdCb3hTaXplKTsKKyAgICAvLyBUbyBkZWNpZGUgaWYgdGhlIHN0cm9rZSBj
b250YWlucyBhIHBvaW50IHdlIGNyZWF0ZSB0d28gcmVjdHMgd2hpY2ggcmVwcmVzZW50IHRoZSBp
bm5lciBhbmQKKyAgICAvLyB0aGUgb3V0ZXIgc3Ryb2tlIGJvcmRlcnMuIEEgc3Ryb2tlIGNvbnRh
aW5zIHRoZSBwb2ludCwgaWYgdGhlIHBvaW50IGlzIGJldHdlZW4gdGhlbS4KKyAgICBmbG9hdCBz
dHJva2VXaWR0aCA9IHRoaXMtPnN0cm9rZVdpZHRoKCk7CisgICAgbV9pbm5lclN0cm9rZVJlY3Qg
PSBtX2JvdW5kaW5nQm94OworICAgIG1fb3V0ZXJTdHJva2VSZWN0ID0gbV9ib3VuZGluZ0JveDsK
KyAgICBtX2lubmVyU3Ryb2tlUmVjdC5pbmZsYXRlKC1zdHJva2VXaWR0aCAvIDIpOworICAgIG1f
b3V0ZXJTdHJva2VSZWN0LmluZmxhdGUoc3Ryb2tlV2lkdGggLyAyKTsKK30KKworCitGbG9hdFJl
Y3QgUmVuZGVyU1ZHUmVjdDo6b2JqZWN0Qm91bmRpbmdCb3goKSBjb25zdAoreworICAgIGlmIChp
c0ZpbGxGYWxsYmFjaygpKQorICAgICAgICByZXR1cm4gUmVuZGVyU1ZHU2hhcGU6Om9iamVjdEJv
dW5kaW5nQm94KCk7CisgICAgcmV0dXJuIG1fYm91bmRpbmdCb3g7Cit9CisKK0Zsb2F0UmVjdCBS
ZW5kZXJTVkdSZWN0OjpzdHJva2VCb3VuZGluZ0JveCgpIGNvbnN0Cit7CisgICAgaWYgKGlzRmls
bEZhbGxiYWNrKCkgJiYgIXN0eWxlKCktPnN2Z1N0eWxlKCktPnN0cm9rZURhc2hBcnJheSgpLmlz
RW1wdHkoKSkKKyAgICAgICAgcmV0dXJuIFJlbmRlclNWR1NoYXBlOjpzdHJva2VCb3VuZGluZ0Jv
eCgpOworICAgIHJldHVybiBtX291dGVyU3Ryb2tlUmVjdDsKK30KKwordm9pZCBSZW5kZXJTVkdS
ZWN0OjpmaWxsU2hhcGUoR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0KQoreworICAgICBjb250ZXh0
LT5maWxsUmVjdChtX2JvdW5kaW5nQm94KTsKK30KKwordm9pZCBSZW5kZXJTVkdSZWN0OjpzdHJv
a2VTaGFwZShHcmFwaGljc0NvbnRleHQqIGNvbnRleHQpCit7CisgICAgY29udGV4dC0+c3Ryb2tl
UmVjdChtX2JvdW5kaW5nQm94LCB0aGlzLT5zdHJva2VXaWR0aCgpKTsKK30KKworYm9vbCBSZW5k
ZXJTVkdSZWN0OjpzaGFwZURlcGVuZGVudFN0cm9rZUNvbnRhaW5zKGNvbnN0IEZsb2F0UG9pbnQm
IHBvaW50KQoreworICAgIHJldHVybiAhbV9pbm5lclN0cm9rZVJlY3QuY29tcHJpc2VzKHBvaW50
KTsKK30KKworYm9vbCBSZW5kZXJTVkdSZWN0OjpzaGFwZURlcGVuZGVudEZpbGxDb250YWlucyhj
b25zdCBGbG9hdFBvaW50JiBwb2ludCwgY29uc3QgV2luZFJ1bGUmIGZpbGxSdWxlKSBjb25zdAor
eworICAgIGlmIChpc0ZpbGxGYWxsYmFjaygpKQorICAgICAgICByZXR1cm4gUmVuZGVyU1ZHU2hh
cGU6OnNoYXBlRGVwZW5kZW50RmlsbENvbnRhaW5zKHBvaW50LCBmaWxsUnVsZSk7CisgICAgcmV0
dXJuIG1fYm91bmRpbmdCb3guY29udGFpbnMocG9pbnQueCgpLCBwb2ludC55KCkpOworfQorCit9
CisKKyNlbmRpZiAvLyBFTkFCTEUoU1ZHKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZWN0LmggYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3Zn
L1JlbmRlclNWR1JlY3QuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xMTEw
OTRhCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5k
ZXJTVkdSZWN0LmgKQEAgLTAsMCArMSw2MyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMSBV
bml2ZXJzaXR5IG9mIFN6ZWdlZAorICogQ29weXJpZ2h0IChDKSAyMDExIFJlbmF0YSBIb2RvdmFu
IChyZW5pQHdlYmtpdC5vcmcpCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoK
KyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVU5JVkVSU0lUWSBPRiBTWkVHRUQgYGBB
UyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBVTklWRVJTSVRZIE9GIFNaRUdFRCBPUgor
ICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7
IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5k
ZWYgUmVuZGVyU1ZHUmVjdF9oCisjZGVmaW5lIFJlbmRlclNWR1JlY3RfaAorCisjaWYgRU5BQkxF
KFNWRykKKyNpbmNsdWRlICJSZW5kZXJTVkdQYXRoLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsK
KworY2xhc3MgUmVuZGVyU1ZHUmVjdCA6IHB1YmxpYyBSZW5kZXJTVkdTaGFwZSB7CitwdWJsaWM6
CisgICAgZXhwbGljaXQgUmVuZGVyU1ZHUmVjdChTVkdTdHlsZWRUcmFuc2Zvcm1hYmxlRWxlbWVu
dCopOworICAgIHZpcnR1YWwgflJlbmRlclNWR1JlY3QoKTsKKworcHJpdmF0ZToKKyAgICB2aXJ0
dWFsIGJvb2wgaXNTVkdSZWN0KCkgY29uc3QgeyByZXR1cm4gdHJ1ZTsgfQorICAgIHZpcnR1YWwg
Y29uc3QgY2hhciogcmVuZGVyTmFtZSgpIGNvbnN0IHsgcmV0dXJuICJSZW5kZXJTVkdSZWN0Ijsg
fQorCisgICAgdmlydHVhbCB2b2lkIGNyZWF0ZVNoYXBlKCk7CisgICAgdmlydHVhbCBib29sIGlz
RW1wdHkoKSBjb25zdCB7IHJldHVybiBoYXNQYXRoKCkgPyBSZW5kZXJTVkdTaGFwZTo6aXNFbXB0
eSgpIDogbV9ib3VuZGluZ0JveC5pc0VtcHR5KCk7IH07CisgICAgdmlydHVhbCB2b2lkIGZpbGxT
aGFwZShHcmFwaGljc0NvbnRleHQqKTsKKyAgICB2aXJ0dWFsIEZsb2F0UmVjdCBvYmplY3RCb3Vu
ZGluZ0JveCgpIGNvbnN0OworICAgIHZpcnR1YWwgRmxvYXRSZWN0IHN0cm9rZUJvdW5kaW5nQm94
KCkgY29uc3Q7CisgICAgdmlydHVhbCB2b2lkIHN0cm9rZVNoYXBlKEdyYXBoaWNzQ29udGV4dCop
OworICAgIHZpcnR1YWwgYm9vbCBzaGFwZURlcGVuZGVudFN0cm9rZUNvbnRhaW5zKGNvbnN0IEZs
b2F0UG9pbnQmKTsKKyAgICB2aXJ0dWFsIGJvb2wgc2hhcGVEZXBlbmRlbnRGaWxsQ29udGFpbnMo
Y29uc3QgRmxvYXRQb2ludCYsIGNvbnN0IFdpbmRSdWxlJikgY29uc3Q7CisKK3ByaXZhdGU6Cisg
ICAgRmxvYXRSZWN0IG1fYm91bmRpbmdCb3g7CisgICAgRmxvYXRSZWN0IG1faW5uZXJTdHJva2VS
ZWN0OworICAgIEZsb2F0UmVjdCBtX291dGVyU3Ryb2tlUmVjdDsKK307CisKK30KKworI2VuZGlm
IC8vIEVOQUJMRShTVkcpCisjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2UuaCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9z
dmcvUmVuZGVyU1ZHUmVzb3VyY2UuaAppbmRleCBhNjdiYTczLi4yYjQ0MzhlIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291cmNlLmgKKysrIGIv
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJjZS5oCkBAIC0yMSw2
ICsyMSw3IEBACiAjZGVmaW5lIFJlbmRlclNWR1Jlc291cmNlX2gKIAogI2lmIEVOQUJMRShTVkcp
CisjaW5jbHVkZSAiUmVuZGVyU1ZHU2hhcGUuaCIKICNpbmNsdWRlICJSZW5kZXJTdHlsZUNvbnN0
YW50cy5oIgogI2luY2x1ZGUgIlNWR0RvY3VtZW50RXh0ZW5zaW9ucy5oIgogCkBAIC02MSw3ICs2
Miw3IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIHZvaWQgcmVtb3ZlQ2xpZW50RnJvbUNhY2hlKFJl
bmRlck9iamVjdCosIGJvb2wgbWFya0ZvckludmFsaWRhdGlvbiA9IHRydWUpID0gMDsKIAogICAg
IHZpcnR1YWwgYm9vbCBhcHBseVJlc291cmNlKFJlbmRlck9iamVjdCosIFJlbmRlclN0eWxlKiwg
R3JhcGhpY3NDb250ZXh0KiYsIHVuc2lnbmVkIHNob3J0IHJlc291cmNlTW9kZSkgPSAwOwotICAg
IHZpcnR1YWwgdm9pZCBwb3N0QXBwbHlSZXNvdXJjZShSZW5kZXJPYmplY3QqLCBHcmFwaGljc0Nv
bnRleHQqJiwgdW5zaWduZWQgc2hvcnQsIGNvbnN0IFBhdGgqKSB7IH0KKyAgICB2aXJ0dWFsIHZv
aWQgcG9zdEFwcGx5UmVzb3VyY2UoUmVuZGVyU1ZHU2hhcGUqLCBHcmFwaGljc0NvbnRleHQqJiwg
dW5zaWduZWQgc2hvcnQsIGNvbnN0IFBhdGgqKSB7IH0KICAgICB2aXJ0dWFsIEZsb2F0UmVjdCBy
ZXNvdXJjZUJvdW5kaW5nQm94KFJlbmRlck9iamVjdCopID0gMDsKIAogICAgIHZpcnR1YWwgUmVu
ZGVyU1ZHUmVzb3VyY2VUeXBlIHJlc291cmNlVHlwZSgpIGNvbnN0ID0gMDsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VDbGlwcGVyLmNw
cCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VDbGlwcGVy
LmNwcAppbmRleCAyMzhjMDk2Li4xZDgyMTIxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291cmNlQ2xpcHBlci5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJjZUNsaXBwZXIuY3BwCkBAIC0yNDIs
NyArMjQyLDcgQEAgYm9vbCBSZW5kZXJTVkdSZXNvdXJjZUNsaXBwZXI6OmRyYXdDb250ZW50SW50
b01hc2tJbWFnZShDbGlwcGVyRGF0YSogY2xpcHBlckRhdGEKICAgICAgICAgfQogCiAgICAgICAg
IC8vIE9ubHkgc2hhcGVzLCBwYXRocyBhbmQgdGV4dHMgYXJlIGFsbG93ZWQgZm9yIGNsaXBwaW5n
LgotICAgICAgICBpZiAoIXJlbmRlcmVyLT5pc1NWR1BhdGgoKSAmJiAhcmVuZGVyZXItPmlzU1ZH
VGV4dCgpKQorICAgICAgICBpZiAoIXJlbmRlcmVyLT5pc1NWR1NoYXBlKCkgJiYgIXJlbmRlcmVy
LT5pc1NWR1RleHQoKSkKICAgICAgICAgICAgIGNvbnRpbnVlOwogCiAgICAgICAgIC8vIFNhdmUg
dGhlIG9sZCBSZW5kZXJTdHlsZSBvZiB0aGUgY3VycmVudCBvYmplY3QgZm9yIHJlc3RvcmluZyBh
ZnRlciBkcmF3aW5nCkBAIC0yODQsNyArMjg0LDcgQEAgdm9pZCBSZW5kZXJTVkdSZXNvdXJjZUNs
aXBwZXI6OmNhbGN1bGF0ZUNsaXBDb250ZW50UmVwYWludFJlY3QoKQogICAgICAgICBSZW5kZXJP
YmplY3QqIHJlbmRlcmVyID0gY2hpbGROb2RlLT5yZW5kZXJlcigpOwogICAgICAgICBpZiAoIWNo
aWxkTm9kZS0+aXNTVkdFbGVtZW50KCkgfHwgIXN0YXRpY19jYXN0PFNWR0VsZW1lbnQqPihjaGls
ZE5vZGUpLT5pc1N0eWxlZCgpIHx8ICFyZW5kZXJlcikKICAgICAgICAgICAgIGNvbnRpbnVlOwot
ICAgICAgICBpZiAoIXJlbmRlcmVyLT5pc1NWR1BhdGgoKSAmJiAhcmVuZGVyZXItPmlzU1ZHVGV4
dCgpICYmICFyZW5kZXJlci0+aXNTVkdTaGFkb3dUcmVlUm9vdENvbnRhaW5lcigpKQorICAgICAg
ICBpZiAoIXJlbmRlcmVyLT5pc1NWR1NoYXBlKCkgJiYgIXJlbmRlcmVyLT5pc1NWR1RleHQoKSAm
JiAhcmVuZGVyZXItPmlzU1ZHU2hhZG93VHJlZVJvb3RDb250YWluZXIoKSkKICAgICAgICAgICAg
IGNvbnRpbnVlOwogICAgICAgICBSZW5kZXJTdHlsZSogc3R5bGUgPSByZW5kZXJlci0+c3R5bGUo
KTsKICAgICAgICAgaWYgKCFzdHlsZSB8fCBzdHlsZS0+ZGlzcGxheSgpID09IE5PTkUgfHwgc3R5
bGUtPnZpc2liaWxpdHkoKSAhPSBWSVNJQkxFKQpAQCAtMzEwLDcgKzMxMCw3IEBAIGJvb2wgUmVu
ZGVyU1ZHUmVzb3VyY2VDbGlwcGVyOjpoaXRUZXN0Q2xpcENvbnRlbnQoY29uc3QgRmxvYXRSZWN0
JiBvYmplY3RCb3VuZGluCiAgICAgICAgIFJlbmRlck9iamVjdCogcmVuZGVyZXIgPSBjaGlsZE5v
ZGUtPnJlbmRlcmVyKCk7CiAgICAgICAgIGlmICghY2hpbGROb2RlLT5pc1NWR0VsZW1lbnQoKSB8
fCAhc3RhdGljX2Nhc3Q8U1ZHRWxlbWVudCo+KGNoaWxkTm9kZSktPmlzU3R5bGVkKCkgfHwgIXJl
bmRlcmVyKQogICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIGlmICghcmVuZGVyZXItPmlz
U1ZHUGF0aCgpICYmICFyZW5kZXJlci0+aXNTVkdUZXh0KCkgJiYgIXJlbmRlcmVyLT5pc1NWR1No
YWRvd1RyZWVSb290Q29udGFpbmVyKCkpCisgICAgICAgIGlmICghcmVuZGVyZXItPmlzU1ZHU2hh
cGUoKSAmJiAhcmVuZGVyZXItPmlzU1ZHVGV4dCgpICYmICFyZW5kZXJlci0+aXNTVkdTaGFkb3dU
cmVlUm9vdENvbnRhaW5lcigpKQogICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgIEludFBv
aW50IGhpdFBvaW50OwogICAgICAgICBIaXRUZXN0UmVzdWx0IHJlc3VsdChoaXRQb2ludCk7CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291cmNl
Q29udGFpbmVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVz
b3VyY2VDb250YWluZXIuY3BwCmluZGV4IDc0ZDVkNjkuLmI3NGFkNmIgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VDb250YWluZXIuY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VDb250
YWluZXIuY3BwCkBAIC0xODAsNyArMTgwLDcgQEAgdm9pZCBSZW5kZXJTVkdSZXNvdXJjZUNvbnRh
aW5lcjo6cmVnaXN0ZXJSZXNvdXJjZSgpCiAvLyBGSVhNRTogVGhpcyBkb2VzIG5vdCBiZWxvbmcg
aGVyZS4KIEFmZmluZVRyYW5zZm9ybSBSZW5kZXJTVkdSZXNvdXJjZUNvbnRhaW5lcjo6dHJhbnNm
b3JtT25Ob25TY2FsaW5nU3Ryb2tlKFJlbmRlck9iamVjdCogb2JqZWN0LCBjb25zdCBBZmZpbmVU
cmFuc2Zvcm0mIHJlc291cmNlVHJhbnNmb3JtKQogewotICAgIGlmICghb2JqZWN0LT5pc1NWR1Bh
dGgoKSkKKyAgICBpZiAoIW9iamVjdC0+aXNTVkdTaGFwZSgpKQogICAgICAgICByZXR1cm4gcmVz
b3VyY2VUcmFuc2Zvcm07CiAKICAgICBTVkdTdHlsZWRUcmFuc2Zvcm1hYmxlRWxlbWVudCogZWxl
bWVudCA9IHN0YXRpY19jYXN0PFNWR1N0eWxlZFRyYW5zZm9ybWFibGVFbGVtZW50Kj4ob2JqZWN0
LT5ub2RlKCkpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5k
ZXJTVkdSZXNvdXJjZUZpbHRlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1Jl
bmRlclNWR1Jlc291cmNlRmlsdGVyLmNwcAppbmRleCA2ODkzNWRhLi4wOWY5MTYxIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291cmNlRmlsdGVy
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291cmNl
RmlsdGVyLmNwcApAQCAtMjU5LDkgKzI1OSw5IEBAIGJvb2wgUmVuZGVyU1ZHUmVzb3VyY2VGaWx0
ZXI6OmFwcGx5UmVzb3VyY2UoUmVuZGVyT2JqZWN0KiBvYmplY3QsIFJlbmRlclN0eWxlKiwKICAg
ICByZXR1cm4gdHJ1ZTsKIH0KIAotdm9pZCBSZW5kZXJTVkdSZXNvdXJjZUZpbHRlcjo6cG9zdEFw
cGx5UmVzb3VyY2UoUmVuZGVyT2JqZWN0KiBvYmplY3QsIEdyYXBoaWNzQ29udGV4dComIGNvbnRl
eHQsIHVuc2lnbmVkIHNob3J0IHJlc291cmNlTW9kZSwgY29uc3QgUGF0aCopCit2b2lkIFJlbmRl
clNWR1Jlc291cmNlRmlsdGVyOjpwb3N0QXBwbHlSZXNvdXJjZShSZW5kZXJTVkdTaGFwZSogc2hh
cGUsIEdyYXBoaWNzQ29udGV4dComIGNvbnRleHQsIHVuc2lnbmVkIHNob3J0IHJlc291cmNlTW9k
ZSwgY29uc3QgUGF0aCopCiB7Ci0gICAgQVNTRVJUKG9iamVjdCk7CisgICAgQVNTRVJUKHNoYXBl
KTsKICAgICBBU1NFUlQoY29udGV4dCk7CiAjaWZuZGVmIE5ERUJVRwogICAgIEFTU0VSVChyZXNv
dXJjZU1vZGUgPT0gQXBwbHlUb0RlZmF1bHRNb2RlKTsKQEAgLTI2OSw2ICsyNjksNyBAQCB2b2lk
IFJlbmRlclNWR1Jlc291cmNlRmlsdGVyOjpwb3N0QXBwbHlSZXNvdXJjZShSZW5kZXJPYmplY3Qq
IG9iamVjdCwgR3JhcGhpY3NDbwogICAgIFVOVVNFRF9QQVJBTShyZXNvdXJjZU1vZGUpOwogI2Vu
ZGlmCiAKKyAgICBSZW5kZXJPYmplY3QqIG9iamVjdCA9IHN0YXRpY19jYXN0PFJlbmRlck9iamVj
dCo+KHNoYXBlKTsKICAgICBGaWx0ZXJEYXRhKiBmaWx0ZXJEYXRhID0gbV9maWx0ZXIuZ2V0KG9i
amVjdCk7CiAgICAgaWYgKCFmaWx0ZXJEYXRhKQogICAgICAgICByZXR1cm47CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291cmNlRmlsdGVyLmgg
Yi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291cmNlRmlsdGVyLmgK
aW5kZXggNWE1YjA5Mi4uNDlhYTE3NyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJjZUZpbHRlci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VGaWx0ZXIuaApAQCAtNzIsNyArNzIsNyBAQCBw
dWJsaWM6CiAgICAgdmlydHVhbCB2b2lkIHJlbW92ZUNsaWVudEZyb21DYWNoZShSZW5kZXJPYmpl
Y3QqLCBib29sIG1hcmtGb3JJbnZhbGlkYXRpb24gPSB0cnVlKTsKIAogICAgIHZpcnR1YWwgYm9v
bCBhcHBseVJlc291cmNlKFJlbmRlck9iamVjdCosIFJlbmRlclN0eWxlKiwgR3JhcGhpY3NDb250
ZXh0KiYsIHVuc2lnbmVkIHNob3J0IHJlc291cmNlTW9kZSk7Ci0gICAgdmlydHVhbCB2b2lkIHBv
c3RBcHBseVJlc291cmNlKFJlbmRlck9iamVjdCosIEdyYXBoaWNzQ29udGV4dComLCB1bnNpZ25l
ZCBzaG9ydCByZXNvdXJjZU1vZGUsIGNvbnN0IFBhdGgqKTsKKyAgICB2aXJ0dWFsIHZvaWQgcG9z
dEFwcGx5UmVzb3VyY2UoUmVuZGVyU1ZHU2hhcGUqLCBHcmFwaGljc0NvbnRleHQqJiwgdW5zaWdu
ZWQgc2hvcnQgcmVzb3VyY2VNb2RlLCBjb25zdCBQYXRoKik7CiAKICAgICB2aXJ0dWFsIEZsb2F0
UmVjdCByZXNvdXJjZUJvdW5kaW5nQm94KFJlbmRlck9iamVjdCopOwogCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291cmNlR3JhZGllbnQuY3Bw
IGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJjZUdyYWRpZW50
LmNwcAppbmRleCAxYWFiOTM1Li4zYTM2NWQwYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJjZUdyYWRpZW50LmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291cmNlR3JhZGllbnQuY3BwCkBAIC0y
Nyw2ICsyNyw3IEBACiAKICNpbmNsdWRlICJHcmFkaWVudEF0dHJpYnV0ZXMuaCIKICNpbmNsdWRl
ICJHcmFwaGljc0NvbnRleHQuaCIKKyNpbmNsdWRlICJSZW5kZXJTVkdTaGFwZS5oIgogI2luY2x1
ZGUgIlJlbmRlclNWR1RleHQuaCIKICNpbmNsdWRlICJTVkdJbWFnZUJ1ZmZlclRvb2xzLmgiCiAj
aW5jbHVkZSAiU1ZHUmVuZGVyU3VwcG9ydC5oIgpAQCAtMjMxLDEyICsyMzIsMTMgQEAgYm9vbCBS
ZW5kZXJTVkdSZXNvdXJjZUdyYWRpZW50OjphcHBseVJlc291cmNlKFJlbmRlck9iamVjdCogb2Jq
ZWN0LCBSZW5kZXJTdHlsZSoKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotdm9pZCBSZW5kZXJTVkdS
ZXNvdXJjZUdyYWRpZW50Ojpwb3N0QXBwbHlSZXNvdXJjZShSZW5kZXJPYmplY3QqIG9iamVjdCwg
R3JhcGhpY3NDb250ZXh0KiYgY29udGV4dCwgdW5zaWduZWQgc2hvcnQgcmVzb3VyY2VNb2RlLCBj
b25zdCBQYXRoKiBwYXRoKQordm9pZCBSZW5kZXJTVkdSZXNvdXJjZUdyYWRpZW50Ojpwb3N0QXBw
bHlSZXNvdXJjZShSZW5kZXJTVkdTaGFwZSogc2hhcGUsIEdyYXBoaWNzQ29udGV4dComIGNvbnRl
eHQsIHVuc2lnbmVkIHNob3J0IHJlc291cmNlTW9kZSwgY29uc3QgUGF0aCogcGF0aCkKIHsKICAg
ICBBU1NFUlQoY29udGV4dCk7CiAgICAgQVNTRVJUKHJlc291cmNlTW9kZSAhPSBBcHBseVRvRGVm
YXVsdE1vZGUpOwogCiAgICAgaWYgKHJlc291cmNlTW9kZSAmIEFwcGx5VG9UZXh0TW9kZSkgewor
ICAgICAgICBSZW5kZXJPYmplY3QqIG9iamVjdCA9IHN0YXRpY19jYXN0PFJlbmRlck9iamVjdCo+
KHNoYXBlKTsKICNpZiBVU0UoQ0cpCiAgICAgICAgIC8vIENHIHJlcXVpcmVzIHNwZWNpYWwgaGFu
ZGxpbmcgZm9yIGdyYWRpZW50IG9uIHRleHQKICAgICAgICAgaWYgKG1fc2F2ZWRDb250ZXh0ICYm
IG1fZ3JhZGllbnQuY29udGFpbnMob2JqZWN0KSkgewpAQCAtMjU5LDExICsyNjEsMTEgQEAgdm9p
ZCBSZW5kZXJTVkdSZXNvdXJjZUdyYWRpZW50Ojpwb3N0QXBwbHlSZXNvdXJjZShSZW5kZXJPYmpl
Y3QqIG9iamVjdCwgR3JhcGhpY3MKICNlbHNlCiAgICAgICAgIFVOVVNFRF9QQVJBTShvYmplY3Qp
OwogI2VuZGlmCi0gICAgfSBlbHNlIGlmIChwYXRoKSB7CisgICAgfSBlbHNlIHsKICAgICAgICAg
aWYgKHJlc291cmNlTW9kZSAmIEFwcGx5VG9GaWxsTW9kZSkKLSAgICAgICAgICAgIGNvbnRleHQt
PmZpbGxQYXRoKCpwYXRoKTsKKyAgICAgICAgICAgIHBhdGggPyBjb250ZXh0LT5maWxsUGF0aCgq
cGF0aCkgOiBzaGFwZS0+ZmlsbFNoYXBlKGNvbnRleHQpOwogICAgICAgICBlbHNlIGlmIChyZXNv
dXJjZU1vZGUgJiBBcHBseVRvU3Ryb2tlTW9kZSkKLSAgICAgICAgICAgIGNvbnRleHQtPnN0cm9r
ZVBhdGgoKnBhdGgpOworICAgICAgICAgICAgcGF0aCA/IGNvbnRleHQtPnN0cm9rZVBhdGgoKnBh
dGgpIDogc2hhcGUtPnN0cm9rZVNoYXBlKGNvbnRleHQpOwogICAgIH0KIAogICAgIGNvbnRleHQt
PnJlc3RvcmUoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVu
ZGVyU1ZHUmVzb3VyY2VHcmFkaWVudC5oIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9S
ZW5kZXJTVkdSZXNvdXJjZUdyYWRpZW50LmgKaW5kZXggZGY0OTJlMi4uMzY2NGMzYiAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJjZUdyYWRp
ZW50LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJj
ZUdyYWRpZW50LmgKQEAgLTUwLDcgKzUwLDcgQEAgcHVibGljOgogICAgIHZpcnR1YWwgdm9pZCBy
ZW1vdmVDbGllbnRGcm9tQ2FjaGUoUmVuZGVyT2JqZWN0KiwgYm9vbCBtYXJrRm9ySW52YWxpZGF0
aW9uID0gdHJ1ZSk7CiAKICAgICB2aXJ0dWFsIGJvb2wgYXBwbHlSZXNvdXJjZShSZW5kZXJPYmpl
Y3QqLCBSZW5kZXJTdHlsZSosIEdyYXBoaWNzQ29udGV4dComLCB1bnNpZ25lZCBzaG9ydCByZXNv
dXJjZU1vZGUpOwotICAgIHZpcnR1YWwgdm9pZCBwb3N0QXBwbHlSZXNvdXJjZShSZW5kZXJPYmpl
Y3QqLCBHcmFwaGljc0NvbnRleHQqJiwgdW5zaWduZWQgc2hvcnQgcmVzb3VyY2VNb2RlLCBjb25z
dCBQYXRoKik7CisgICAgdmlydHVhbCB2b2lkIHBvc3RBcHBseVJlc291cmNlKFJlbmRlclNWR1No
YXBlKiwgR3JhcGhpY3NDb250ZXh0KiYsIHVuc2lnbmVkIHNob3J0IHJlc291cmNlTW9kZSwgY29u
c3QgUGF0aCopOwogICAgIHZpcnR1YWwgRmxvYXRSZWN0IHJlc291cmNlQm91bmRpbmdCb3goUmVu
ZGVyT2JqZWN0KikgeyByZXR1cm4gRmxvYXRSZWN0KCk7IH0KIAogcHJvdGVjdGVkOgpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJjZVBhdHRl
cm4uY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJjZVBh
dHRlcm4uY3BwCmluZGV4IGIwODI0ODEuLjk4NGEzNDcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VQYXR0ZXJuLmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291cmNlUGF0dGVybi5jcHAKQEAg
LTE4MywxNiArMTgzLDE2IEBAIGJvb2wgUmVuZGVyU1ZHUmVzb3VyY2VQYXR0ZXJuOjphcHBseVJl
c291cmNlKFJlbmRlck9iamVjdCogb2JqZWN0LCBSZW5kZXJTdHlsZSoKICAgICByZXR1cm4gdHJ1
ZTsKIH0KIAotdm9pZCBSZW5kZXJTVkdSZXNvdXJjZVBhdHRlcm46OnBvc3RBcHBseVJlc291cmNl
KFJlbmRlck9iamVjdCosIEdyYXBoaWNzQ29udGV4dComIGNvbnRleHQsIHVuc2lnbmVkIHNob3J0
IHJlc291cmNlTW9kZSwgY29uc3QgUGF0aCogcGF0aCkKK3ZvaWQgUmVuZGVyU1ZHUmVzb3VyY2VQ
YXR0ZXJuOjpwb3N0QXBwbHlSZXNvdXJjZShSZW5kZXJTVkdTaGFwZSogc2hhcGUsIEdyYXBoaWNz
Q29udGV4dComIGNvbnRleHQsIHVuc2lnbmVkIHNob3J0IHJlc291cmNlTW9kZSwgY29uc3QgUGF0
aCogcGF0aCkKIHsKICAgICBBU1NFUlQoY29udGV4dCk7CiAgICAgQVNTRVJUKHJlc291cmNlTW9k
ZSAhPSBBcHBseVRvRGVmYXVsdE1vZGUpOwogCi0gICAgaWYgKHBhdGggJiYgIShyZXNvdXJjZU1v
ZGUgJiBBcHBseVRvVGV4dE1vZGUpKSB7CisgICAgaWYgKC8qcGF0aCAmJiAqLyEocmVzb3VyY2VN
b2RlICYgQXBwbHlUb1RleHRNb2RlKSkgewogICAgICAgICBpZiAocmVzb3VyY2VNb2RlICYgQXBw
bHlUb0ZpbGxNb2RlKQotICAgICAgICAgICAgY29udGV4dC0+ZmlsbFBhdGgoKnBhdGgpOworICAg
ICAgICAgICAgIHBhdGggPyBjb250ZXh0LT5maWxsUGF0aCgqcGF0aCkgOiBzaGFwZS0+ZmlsbFNo
YXBlKGNvbnRleHQpOwogICAgICAgICBlbHNlIGlmIChyZXNvdXJjZU1vZGUgJiBBcHBseVRvU3Ry
b2tlTW9kZSkKLSAgICAgICAgICAgIGNvbnRleHQtPnN0cm9rZVBhdGgoKnBhdGgpOworICAgICAg
ICAgICAgIHBhdGggPyBjb250ZXh0LT5zdHJva2VQYXRoKCpwYXRoKSA6IHNoYXBlLT5zdHJva2VT
aGFwZShjb250ZXh0KTsKICAgICB9CiAKICAgICBjb250ZXh0LT5yZXN0b3JlKCk7CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291cmNlUGF0dGVy
bi5oIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJjZVBhdHRl
cm4uaAppbmRleCBhNjk3YzcxLi5jMjIwNzkwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291cmNlUGF0dGVybi5oCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VQYXR0ZXJuLmgKQEAgLTUyLDcgKzUy
LDcgQEAgcHVibGljOgogICAgIHZpcnR1YWwgdm9pZCByZW1vdmVDbGllbnRGcm9tQ2FjaGUoUmVu
ZGVyT2JqZWN0KiwgYm9vbCBtYXJrRm9ySW52YWxpZGF0aW9uID0gdHJ1ZSk7CiAKICAgICB2aXJ0
dWFsIGJvb2wgYXBwbHlSZXNvdXJjZShSZW5kZXJPYmplY3QqLCBSZW5kZXJTdHlsZSosIEdyYXBo
aWNzQ29udGV4dComLCB1bnNpZ25lZCBzaG9ydCByZXNvdXJjZU1vZGUpOwotICAgIHZpcnR1YWwg
dm9pZCBwb3N0QXBwbHlSZXNvdXJjZShSZW5kZXJPYmplY3QqLCBHcmFwaGljc0NvbnRleHQqJiwg
dW5zaWduZWQgc2hvcnQgcmVzb3VyY2VNb2RlLCBjb25zdCBQYXRoKik7CisgICAgdmlydHVhbCB2
b2lkIHBvc3RBcHBseVJlc291cmNlKFJlbmRlclNWR1NoYXBlKiwgR3JhcGhpY3NDb250ZXh0KiYs
IHVuc2lnbmVkIHNob3J0IHJlc291cmNlTW9kZSwgY29uc3QgUGF0aCopOwogICAgIHZpcnR1YWwg
RmxvYXRSZWN0IHJlc291cmNlQm91bmRpbmdCb3goUmVuZGVyT2JqZWN0KikgeyByZXR1cm4gRmxv
YXRSZWN0KCk7IH0KIAogICAgIHZpcnR1YWwgUmVuZGVyU1ZHUmVzb3VyY2VUeXBlIHJlc291cmNl
VHlwZSgpIGNvbnN0IHsgcmV0dXJuIHNfcmVzb3VyY2VUeXBlOyB9CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291cmNlU29saWRDb2xvci5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291cmNlU29saWRDb2xv
ci5jcHAKaW5kZXggNWJlMmFmNi4uMjQ1ZGQ4YyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJjZVNvbGlkQ29sb3IuY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VTb2xpZENvbG9yLmNwcApA
QCAtMjMsNiArMjMsNyBAQAogI2luY2x1ZGUgIlJlbmRlclNWR1Jlc291cmNlU29saWRDb2xvci5o
IgogCiAjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCisjaW5jbHVkZSAiUmVuZGVyU1ZHU2hh
cGUuaCIKICNpbmNsdWRlICJSZW5kZXJTdHlsZS5oIgogI2luY2x1ZGUgIlNWR1JlbmRlclN1cHBv
cnQuaCIKIApAQCAtNzQsMTYgKzc1LDE2IEBAIGJvb2wgUmVuZGVyU1ZHUmVzb3VyY2VTb2xpZENv
bG9yOjphcHBseVJlc291cmNlKFJlbmRlck9iamVjdCogb2JqZWN0LCBSZW5kZXJTdHlsCiAgICAg
cmV0dXJuIHRydWU7CiB9CiAKLXZvaWQgUmVuZGVyU1ZHUmVzb3VyY2VTb2xpZENvbG9yOjpwb3N0
QXBwbHlSZXNvdXJjZShSZW5kZXJPYmplY3QqLCBHcmFwaGljc0NvbnRleHQqJiBjb250ZXh0LCB1
bnNpZ25lZCBzaG9ydCByZXNvdXJjZU1vZGUsIGNvbnN0IFBhdGgqIHBhdGgpCit2b2lkIFJlbmRl
clNWR1Jlc291cmNlU29saWRDb2xvcjo6cG9zdEFwcGx5UmVzb3VyY2UoUmVuZGVyU1ZHU2hhcGUq
IHNoYXBlLCBHcmFwaGljc0NvbnRleHQqJiBjb250ZXh0LCB1bnNpZ25lZCBzaG9ydCByZXNvdXJj
ZU1vZGUsIGNvbnN0IFBhdGgqIHBhdGgpCiB7CiAgICAgQVNTRVJUKGNvbnRleHQpOwogICAgIEFT
U0VSVChyZXNvdXJjZU1vZGUgIT0gQXBwbHlUb0RlZmF1bHRNb2RlKTsKIAotICAgIGlmIChwYXRo
ICYmICEocmVzb3VyY2VNb2RlICYgQXBwbHlUb1RleHRNb2RlKSkgeworICAgIGlmICghKHJlc291
cmNlTW9kZSAmIEFwcGx5VG9UZXh0TW9kZSkpIHsKICAgICAgICAgaWYgKHJlc291cmNlTW9kZSAm
IEFwcGx5VG9GaWxsTW9kZSkKLSAgICAgICAgICAgIGNvbnRleHQtPmZpbGxQYXRoKCpwYXRoKTsK
KyAgICAgICAgICAgIHBhdGggPyBjb250ZXh0LT5maWxsUGF0aCgqcGF0aCkgOiBzaGFwZS0+Zmls
bFNoYXBlKGNvbnRleHQpOwogICAgICAgICBlbHNlIGlmIChyZXNvdXJjZU1vZGUgJiBBcHBseVRv
U3Ryb2tlTW9kZSkKLSAgICAgICAgICAgIGNvbnRleHQtPnN0cm9rZVBhdGgoKnBhdGgpOworICAg
ICAgICAgICAgcGF0aCA/IGNvbnRleHQtPnN0cm9rZVBhdGgoKnBhdGgpIDogc2hhcGUtPnN0cm9r
ZVNoYXBlKGNvbnRleHQpOwogICAgIH0KIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJjZVNvbGlkQ29sb3IuaCBiL1NvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VTb2xpZENvbG9yLmgKaW5kZXggMDJj
ZWIzMS4uNWRhZjU3NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9S
ZW5kZXJTVkdSZXNvdXJjZVNvbGlkQ29sb3IuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvc3ZnL1JlbmRlclNWR1Jlc291cmNlU29saWRDb2xvci5oCkBAIC0zNiw3ICszNiw3IEBAIHB1
YmxpYzoKICAgICB2aXJ0dWFsIHZvaWQgcmVtb3ZlQ2xpZW50RnJvbUNhY2hlKFJlbmRlck9iamVj
dCosIGJvb2wgPSB0cnVlKSB7IH0KIAogICAgIHZpcnR1YWwgYm9vbCBhcHBseVJlc291cmNlKFJl
bmRlck9iamVjdCosIFJlbmRlclN0eWxlKiwgR3JhcGhpY3NDb250ZXh0KiYsIHVuc2lnbmVkIHNo
b3J0IHJlc291cmNlTW9kZSk7Ci0gICAgdmlydHVhbCB2b2lkIHBvc3RBcHBseVJlc291cmNlKFJl
bmRlck9iamVjdCosIEdyYXBoaWNzQ29udGV4dComLCB1bnNpZ25lZCBzaG9ydCByZXNvdXJjZU1v
ZGUsIGNvbnN0IFBhdGgqKTsKKyAgICB2aXJ0dWFsIHZvaWQgcG9zdEFwcGx5UmVzb3VyY2UoUmVu
ZGVyU1ZHU2hhcGUqLCBHcmFwaGljc0NvbnRleHQqJiwgdW5zaWduZWQgc2hvcnQgcmVzb3VyY2VN
b2RlLCBjb25zdCBQYXRoKik7CiAgICAgdmlydHVhbCBGbG9hdFJlY3QgcmVzb3VyY2VCb3VuZGlu
Z0JveChSZW5kZXJPYmplY3QqKSB7IHJldHVybiBGbG9hdFJlY3QoKTsgfQogCiAgICAgdmlydHVh
bCBSZW5kZXJTVkdSZXNvdXJjZVR5cGUgcmVzb3VyY2VUeXBlKCkgY29uc3QgeyByZXR1cm4gc19y
ZXNvdXJjZVR5cGU7IH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcv
UmVuZGVyU1ZHU2hhcGUuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJT
VkdTaGFwZS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDgwMzk4OQot
LS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZH
U2hhcGUuY3BwCkBAIC0wLDAgKzEsNDM0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA0LCAy
MDA1LCAyMDA3IE5pa29sYXMgWmltbWVybWFubiA8emltbWVybWFubkBrZGUub3JnPgorICogQ29w
eXJpZ2h0IChDKSAyMDA0LCAyMDA1LCAyMDA4IFJvYiBCdWlzIDxidWlzQGtkZS5vcmc+CisgKiBD
b3B5cmlnaHQgKEMpIDIwMDUsIDIwMDcgRXJpYyBTZWlkZWwgPGVyaWNAd2Via2l0Lm9yZz4KKyAq
IENvcHlyaWdodCAoQykgMjAwOSBHb29nbGUsIEluYy4KKyAqIENvcHlyaWdodCAoQykgMjAwOSBE
aXJrIFNjaHVsemUgPGtyaXRAd2Via2l0Lm9yZz4KKyAqIENvcHlyaWdodCAoQykgUmVzZWFyY2gg
SW4gTW90aW9uIExpbWl0ZWQgMjAxMC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdo
dCAoQykgMjAwOSBKZWZmIFNjaGlsbGVyIDxjb2RlZHJlYWRAZ21haWwuY29tPgorICogQ29weXJp
Z2h0IChDKSAyMDExIFJlbmF0YSBIb2RvdmFuIDxyZW5pQHdlYmtpdC5vcmc+CisgKiBDb3B5cmln
aHQgKEMpIDIwMTEgVW5pdmVyc2l0eSBvZiBTemVnZWQKKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMg
ZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkg
aXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICog
TGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0
aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55
IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRo
ZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFO
VFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklM
SVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAq
IExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAq
IFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVy
YWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZp
bGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBG
b3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9z
dG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorCisj
aWYgRU5BQkxFKFNWRykKKyNpbmNsdWRlICJSZW5kZXJTVkdTaGFwZS5oIgorCisjaW5jbHVkZSAi
RmxvYXRQb2ludC5oIgorI2luY2x1ZGUgIkZsb2F0UXVhZC5oIgorI2luY2x1ZGUgIkdyYXBoaWNz
Q29udGV4dC5oIgorI2luY2x1ZGUgIkhpdFRlc3RSZXF1ZXN0LmgiCisjaW5jbHVkZSAiTGF5b3V0
UmVwYWludGVyLmgiCisjaW5jbHVkZSAiUG9pbnRlckV2ZW50c0hpdFJ1bGVzLmgiCisjaW5jbHVk
ZSAiUmVuZGVyU1ZHQ29udGFpbmVyLmgiCisjaW5jbHVkZSAiUmVuZGVyU1ZHUmVzb3VyY2VNYXJr
ZXIuaCIKKyNpbmNsdWRlICJSZW5kZXJTVkdSZXNvdXJjZVNvbGlkQ29sb3IuaCIKKyNpbmNsdWRl
ICJTVkdQYXRoRWxlbWVudC5oIgorI2luY2x1ZGUgIlNWR1JlbmRlclN1cHBvcnQuaCIKKyNpbmNs
dWRlICJTVkdSZXNvdXJjZXMuaCIKKyNpbmNsdWRlICJTVkdTdHlsZWRUcmFuc2Zvcm1hYmxlRWxl
bWVudC5oIgorI2luY2x1ZGUgIlNWR1RyYW5zZm9ybUxpc3QuaCIKKyNpbmNsdWRlICJTVkdVUklS
ZWZlcmVuY2UuaCIKKyNpbmNsdWRlICJTdHJva2VTdHlsZUFwcGxpZXIuaCIKKyNpbmNsdWRlIDx3
dGYvTWF0aEV4dHJhcy5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK1JlbmRlclNWR1NoYXBl
OjpSZW5kZXJTVkdTaGFwZShTVkdTdHlsZWRUcmFuc2Zvcm1hYmxlRWxlbWVudCogbm9kZSkKKyAg
ICA6IFJlbmRlclNWR01vZGVsT2JqZWN0KG5vZGUpCisgICAgLCBtX25lZWRzQm91bmRhcmllc1Vw
ZGF0ZShmYWxzZSkgLy8gRGVmYXVsdCBpcyBmYWxzZSwgdGhlIGNhY2hlZCByZWN0cyBhcmUgZW1w
dHkgZnJvbSB0aGUgYmVnaW5uaW5nLgorICAgICwgbV9uZWVkc1NoYXBlVXBkYXRlKHRydWUpIC8v
IERlZmF1bHQgaXMgdHJ1ZSwgc28gd2UgZ3JhYiBhIFBhdGggb2JqZWN0IG9uY2UgZnJvbSBTVkdT
dHlsZWRUcmFuc2Zvcm1hYmxlRWxlbWVudC4KKyAgICAsIG1fbmVlZHNUcmFuc2Zvcm1VcGRhdGUo
dHJ1ZSkgLy8gRGVmYXVsdCBpcyB0cnVlLCBzbyB3ZSBncmFiIGEgQWZmaW5lVHJhbnNmb3JtIG9i
amVjdCBvbmNlIGZyb20gU1ZHU3R5bGVkVHJhbnNmb3JtYWJsZUVsZW1lbnQuCisgICAgLCBtX2Zp
bGxGYWxsYmFjayhmYWxzZSkKK3sKK30KKworUmVuZGVyU1ZHU2hhcGU6On5SZW5kZXJTVkdTaGFw
ZSgpCit7Cit9CisKK3ZvaWQgUmVuZGVyU1ZHU2hhcGU6OmNyZWF0ZVNoYXBlKCkKK3sKKyAgICBt
X3BhdGggPSBhZG9wdFB0cihuZXcgUGF0aCk7CisgICAgQVNTRVJUKGlzRW1wdHkoKSk7CisKKyAg
ICBTVkdQYXRoRWxlbWVudCogZWxlbWVudCA9IHN0YXRpY19jYXN0PFNWR1BhdGhFbGVtZW50Kj4o
bm9kZSgpKTsKKyAgICBlbGVtZW50LT50b1BhdGhEYXRhKHBhdGgoKSk7Cit9CisKK2Jvb2wgUmVu
ZGVyU1ZHU2hhcGU6OmlzRW1wdHkoKSBjb25zdAoreworICAgIHJldHVybiBtX3BhdGgtPmlzRW1w
dHkoKTsKK30KKwordm9pZCBSZW5kZXJTVkdTaGFwZTo6ZmlsbFNoYXBlKEdyYXBoaWNzQ29udGV4
dCogY29udGV4dCkKK3sKKyAgICBjb250ZXh0LT5maWxsUGF0aChwYXRoKCkpOworfQorCitGbG9h
dFJlY3QgUmVuZGVyU1ZHU2hhcGU6Om9iamVjdEJvdW5kaW5nQm94KCkgY29uc3QKK3sKKyAgICBy
ZXR1cm4gbV9wYXRoLT5ib3VuZGluZ1JlY3QoKTsKK30KKworRmxvYXRSZWN0IFJlbmRlclNWR1No
YXBlOjpzdHJva2VCb3VuZGluZ0JveCgpIGNvbnN0Cit7CisgICAgQm91bmRpbmdSZWN0U3Ryb2tl
U3R5bGVBcHBsaWVyIHN0cm9rZVN0eWxlKHRoaXMsIHN0eWxlKCkpOworICAgIHJldHVybiBtX3Bh
dGgtPnN0cm9rZUJvdW5kaW5nUmVjdCgmc3Ryb2tlU3R5bGUpOworfQorCit2b2lkIFJlbmRlclNW
R1NoYXBlOjpzdHJva2VTaGFwZShHcmFwaGljc0NvbnRleHQqIGNvbnRleHQpCit7CisgICAgY29u
dGV4dC0+c3Ryb2tlUGF0aChwYXRoKCkpOworfQorCitib29sIFJlbmRlclNWR1NoYXBlOjpzaGFw
ZURlcGVuZGVudFN0cm9rZUNvbnRhaW5zKGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50KQoreworICAg
IEJvdW5kaW5nUmVjdFN0cm9rZVN0eWxlQXBwbGllciBhcHBsaWVyKHRoaXMsIHN0eWxlKCkpOwor
ICAgIHJldHVybiBtX3BhdGgtPnN0cm9rZUNvbnRhaW5zKCZhcHBsaWVyLCBwb2ludCk7Cit9CisK
K2Jvb2wgUmVuZGVyU1ZHU2hhcGU6OnNoYXBlRGVwZW5kZW50RmlsbENvbnRhaW5zKGNvbnN0IEZs
b2F0UG9pbnQmIHBvaW50LCBjb25zdCBXaW5kUnVsZSYgZmlsbFJ1bGUpIGNvbnN0Cit7CisgICAg
cmV0dXJuIG1fcGF0aC0+Y29udGFpbnMocG9pbnQsIGZpbGxSdWxlKTsKK30KKworYm9vbCBSZW5k
ZXJTVkdTaGFwZTo6ZmlsbENvbnRhaW5zKGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50LCBib29sIHJl
cXVpcmVzRmlsbCwgV2luZFJ1bGUgZmlsbFJ1bGUpCit7CisgICAgaWYgKCFtX2ZpbGxCb3VuZGlu
Z0JveC5jb250YWlucyhwb2ludCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIENvbG9y
IGZhbGxiYWNrQ29sb3I7CisgICAgaWYgKHJlcXVpcmVzRmlsbCAmJiAhUmVuZGVyU1ZHUmVzb3Vy
Y2U6OmZpbGxQYWludGluZ1Jlc291cmNlKHRoaXMsIHN0eWxlKCksIGZhbGxiYWNrQ29sb3IpKQor
ICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICByZXR1cm4gc2hhcGVEZXBlbmRlbnRGaWxsQ29u
dGFpbnMocG9pbnQsIGZpbGxSdWxlKTsKK30KKworYm9vbCBSZW5kZXJTVkdTaGFwZTo6c3Ryb2tl
Q29udGFpbnMoY29uc3QgRmxvYXRQb2ludCYgcG9pbnQsIGJvb2wgcmVxdWlyZXNTdHJva2UpCit7
CisgICAgaWYgKCFtX3N0cm9rZUFuZE1hcmtlckJvdW5kaW5nQm94LmNvbnRhaW5zKHBvaW50KSkK
KyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgQ29sb3IgZmFsbGJhY2tDb2xvcjsKKyAgICBp
ZiAocmVxdWlyZXNTdHJva2UgJiYgIVJlbmRlclNWR1Jlc291cmNlOjpzdHJva2VQYWludGluZ1Jl
c291cmNlKHRoaXMsIHN0eWxlKCksIGZhbGxiYWNrQ29sb3IpKQorICAgICAgICByZXR1cm4gZmFs
c2U7CisKKyAgICBpZiAoc2hvdWxkU3Ryb2tlWmVyb0xlbmd0aFN1YnBhdGgoKSkKKyAgICAgICAg
cmV0dXJuIHplcm9MZW5ndGhTdWJwYXRoUmVjdCgpLmNvbnRhaW5zKHBvaW50KTsKKworICAgIGNv
bnN0IFNWR1JlbmRlclN0eWxlKiBzdmdTdHlsZSA9IHN0eWxlKCktPnN2Z1N0eWxlKCk7CisgICAg
aWYgKCFzdmdTdHlsZS0+c3Ryb2tlRGFzaEFycmF5KCkuaXNFbXB0eSgpIHx8IHN2Z1N0eWxlLT5z
dHJva2VNaXRlckxpbWl0KCkgIT0gc3ZnU3R5bGUtPmluaXRpYWxTdHJva2VNaXRlckxpbWl0KCkK
KyAgICAgICAgfHwgc3ZnU3R5bGUtPmpvaW5TdHlsZSgpICE9IHN2Z1N0eWxlLT5pbml0aWFsSm9p
blN0eWxlKCkgfHwgc3ZnU3R5bGUtPmNhcFN0eWxlKCkgIT0gc3ZnU3R5bGUtPmluaXRpYWxDYXBT
dHlsZSgpKSB7CisgICAgICAgIGlmICghbV9wYXRoLmdldCgpKQorICAgICAgICAgICAgUmVuZGVy
U1ZHU2hhcGU6OmNyZWF0ZVNoYXBlKCk7CisgICAgICAgIHJldHVybiBSZW5kZXJTVkdTaGFwZTo6
c2hhcGVEZXBlbmRlbnRTdHJva2VDb250YWlucyhwb2ludCk7CisgICAgfQorICAgIHJldHVybiBz
aGFwZURlcGVuZGVudFN0cm9rZUNvbnRhaW5zKHBvaW50KTsKK30KKwordm9pZCBSZW5kZXJTVkdT
aGFwZTo6bGF5b3V0KCkKK3sKKyAgICBMYXlvdXRSZXBhaW50ZXIgcmVwYWludGVyKCp0aGlzLCBj
aGVja0ZvclJlcGFpbnREdXJpbmdMYXlvdXQoKSAmJiBzZWxmTmVlZHNMYXlvdXQoKSk7CisgICAg
U1ZHU3R5bGVkVHJhbnNmb3JtYWJsZUVsZW1lbnQqIGVsZW1lbnQgPSBzdGF0aWNfY2FzdDxTVkdT
dHlsZWRUcmFuc2Zvcm1hYmxlRWxlbWVudCo+KG5vZGUoKSk7CisKKyAgICBib29sIHVwZGF0ZUNh
Y2hlZEJvdW5kYXJpZXNJblBhcmVudHMgPSBmYWxzZTsKKworICAgIGJvb2wgbmVlZHNTaGFwZVVw
ZGF0ZSA9IG1fbmVlZHNTaGFwZVVwZGF0ZTsKKyAgICBpZiAobmVlZHNTaGFwZVVwZGF0ZSkgewor
ICAgICAgICBjcmVhdGVTaGFwZSgpOworICAgICAgICBtX25lZWRzU2hhcGVVcGRhdGUgPSBmYWxz
ZTsKKyAgICAgICAgdXBkYXRlQ2FjaGVkQm91bmRhcmllc0luUGFyZW50cyA9IHRydWU7CisgICAg
fQorCisgICAgaWYgKG1fbmVlZHNUcmFuc2Zvcm1VcGRhdGUpIHsKKyAgICAgICAgbV9sb2NhbFRy
YW5zZm9ybSA9IGVsZW1lbnQtPmFuaW1hdGVkTG9jYWxUcmFuc2Zvcm0oKTsKKyAgICAgICAgbV9u
ZWVkc1RyYW5zZm9ybVVwZGF0ZSA9IGZhbHNlOworICAgICAgICB1cGRhdGVDYWNoZWRCb3VuZGFy
aWVzSW5QYXJlbnRzID0gdHJ1ZTsKKyAgICB9CisKKyAgICBpZiAobV9uZWVkc0JvdW5kYXJpZXNV
cGRhdGUpIHsKKyAgICAgICAgdXBkYXRlQ2FjaGVkQm91bmRhcmllc0luUGFyZW50cyA9IHRydWU7
CisgICAgICAgIHNldElzRmlsbEZhbGxiYWNrKGZhbHNlKTsKKyAgICAgICAgY3JlYXRlU2hhcGUo
KTsKKyAgICB9CisKKyAgICAvLyBJbnZhbGlkYXRlIGFsbCByZXNvdXJjZXMgb2YgdGhpcyBjbGll
bnQgaWYgb3VyIGxheW91dCBjaGFuZ2VkLgorICAgIGlmIChtX2V2ZXJIYWRMYXlvdXQgJiYgc2Vs
Zk5lZWRzTGF5b3V0KCkpIHsKKyAgICAgICAgU1ZHUmVzb3VyY2VzQ2FjaGU6OmNsaWVudExheW91
dENoYW5nZWQodGhpcyk7CisgICAgICAgIG1fbWFya2VyTGF5b3V0SW5mby5jbGVhcigpOworICAg
IH0KKworICAgIC8vIEF0IHRoaXMgcG9pbnQgTGF5b3V0UmVwYWludGVyIGFscmVhZHkgZ3JhYmJl
ZCB0aGUgb2xkIGJvdW5kcywKKyAgICAvLyByZWNhbGN1bGF0ZSB0aGVtIG5vdyBzbyByZXBhaW50
QWZ0ZXJMYXlvdXQoKSB1c2VzIHRoZSBuZXcgYm91bmRzLgorICAgIGlmIChuZWVkc1NoYXBlVXBk
YXRlIHx8IG1fbmVlZHNCb3VuZGFyaWVzVXBkYXRlKSB7CisgICAgICAgIHVwZGF0ZUNhY2hlZEJv
dW5kYXJpZXMoKTsKKyAgICAgICAgbV9uZWVkc0JvdW5kYXJpZXNVcGRhdGUgPSBmYWxzZTsKKyAg
ICB9CisKKyAgICAvLyBJZiBvdXIgYm91bmRzIGNoYW5nZWQsIG5vdGlmeSB0aGUgcGFyZW50cy4K
KyAgICBpZiAodXBkYXRlQ2FjaGVkQm91bmRhcmllc0luUGFyZW50cykKKyAgICAgICAgUmVuZGVy
U1ZHTW9kZWxPYmplY3Q6OnNldE5lZWRzQm91bmRhcmllc1VwZGF0ZSgpOworCisgICAgcmVwYWlu
dGVyLnJlcGFpbnRBZnRlckxheW91dCgpOworICAgIHNldE5lZWRzTGF5b3V0KGZhbHNlKTsKK30K
KworYm9vbCBSZW5kZXJTVkdTaGFwZTo6c2hvdWxkU3Ryb2tlWmVyb0xlbmd0aFN1YnBhdGgoKSBj
b25zdAoreworICAgIC8vIFNwZWMoMTEuNCk6IEFueSB6ZXJvIGxlbmd0aCBzdWJwYXRoIHNoYWxs
IG5vdCBiZSBzdHJva2VkIGlmIHRoZSDigJhzdHJva2UtbGluZWNhcOKAmSBwcm9wZXJ0eSBoYXMg
YSB2YWx1ZSBvZiBidXR0CisgICAgLy8gYnV0IHNoYWxsIGJlIHN0cm9rZWQgaWYgdGhlIOKAmHN0
cm9rZS1saW5lY2Fw4oCZIHByb3BlcnR5IGhhcyBhIHZhbHVlIG9mIHJvdW5kIG9yIHNxdWFyZQor
ICAgIHJldHVybiBzdHlsZSgpLT5zdmdTdHlsZSgpLT5oYXNTdHJva2UoKSAmJiBzdHlsZSgpLT5z
dmdTdHlsZSgpLT5jYXBTdHlsZSgpICE9IEJ1dHRDYXAgJiYgIW1fZmlsbEJvdW5kaW5nQm94Lndp
ZHRoKCkgJiYgIW1fZmlsbEJvdW5kaW5nQm94LmhlaWdodCgpOworfQorCitGbG9hdFJlY3QgUmVu
ZGVyU1ZHU2hhcGU6Onplcm9MZW5ndGhTdWJwYXRoUmVjdCgpIGNvbnN0Cit7CisgICAgZmxvYXQg
c3Ryb2tlV2lkdGggPSB0aGlzLT5zdHJva2VXaWR0aCgpOworICAgIHJldHVybiBGbG9hdFJlY3Qo
bV9maWxsQm91bmRpbmdCb3gueCgpIC0gc3Ryb2tlV2lkdGggLyAyLCBtX2ZpbGxCb3VuZGluZ0Jv
eC55KCkgLSBzdHJva2VXaWR0aCAvIDIsIHN0cm9rZVdpZHRoLCBzdHJva2VXaWR0aCk7Cit9CisK
K3ZvaWQgUmVuZGVyU1ZHU2hhcGU6OnNldHVwU3F1YXJlQ2FwUGF0aChQYXRoKiYgdXNlUGF0aCwg
aW50JiBhcHBseU1vZGUpCit7CisgICAgLy8gU3BlYygxMS40KTogQW55IHplcm8gbGVuZ3RoIHN1
YnBhdGggc2hhbGwgbm90IGJlIHN0cm9rZWQgaWYgdGhlIOKAmHN0cm9rZS1saW5lY2Fw4oCZIHBy
b3BlcnR5IGhhcyBhIHZhbHVlIG9mIGJ1dHQKKyAgICAvLyBidXQgc2hhbGwgYmUgc3Ryb2tlZCBp
ZiB0aGUg4oCYc3Ryb2tlLWxpbmVjYXDigJkgcHJvcGVydHkgaGFzIGEgdmFsdWUgb2Ygcm91bmQg
b3Igc3F1YXJlCisgICAgREVGSU5FX1NUQVRJQ19MT0NBTChQYXRoLCB0ZW1wUGF0aCwgKCkpOwor
CisgICAgYXBwbHlNb2RlID0gQXBwbHlUb0ZpbGxNb2RlOworICAgIHVzZVBhdGggPSAmdGVtcFBh
dGg7CisgICAgdXNlUGF0aC0+Y2xlYXIoKTsKKyAgICBpZiAoc3R5bGUoKS0+c3ZnU3R5bGUoKS0+
Y2FwU3R5bGUoKSA9PSBTcXVhcmVDYXApCisgICAgICAgIHVzZVBhdGgtPmFkZFJlY3QoemVyb0xl
bmd0aFN1YnBhdGhSZWN0KCkpOworICAgIGVsc2UKKyAgICAgICAgdXNlUGF0aC0+YWRkRWxsaXBz
ZSh6ZXJvTGVuZ3RoU3VicGF0aFJlY3QoKSk7Cit9CisKK2Jvb2wgUmVuZGVyU1ZHU2hhcGU6OnNl
dHVwTm9uU2NhbGluZ1N0cm9rZVBhdGgoUGF0aComIHVzZVBhdGgsIEdyYXBoaWNzQ29udGV4dFN0
YXRlU2F2ZXImIHN0YXRlU2F2ZXIpCit7CisgICAgREVGSU5FX1NUQVRJQ19MT0NBTChQYXRoLCB0
ZW1wUGF0aCwgKCkpOworCisgICAgU1ZHU3R5bGVkVHJhbnNmb3JtYWJsZUVsZW1lbnQqIGVsZW1l
bnQgPSBzdGF0aWNfY2FzdDxTVkdTdHlsZWRUcmFuc2Zvcm1hYmxlRWxlbWVudCo+KG5vZGUoKSk7
CisgICAgQWZmaW5lVHJhbnNmb3JtIG5vblNjYWxpbmdTdHJva2VUcmFuc2Zvcm0gPSBlbGVtZW50
LT5nZXRTY3JlZW5DVE0oU1ZHTG9jYXRhYmxlOjpEaXNhbGxvd1N0eWxlVXBkYXRlKTsKKyAgICBp
ZiAoIW5vblNjYWxpbmdTdHJva2VUcmFuc2Zvcm0uaXNJbnZlcnRpYmxlKCkpCisgICAgICAgIHJl
dHVybiBmYWxzZTsKKworICAgIHRlbXBQYXRoID0gKm1fcGF0aDsKKyAgICB1c2VQYXRoID0gJnRl
bXBQYXRoOworICAgIHRlbXBQYXRoLnRyYW5zZm9ybShub25TY2FsaW5nU3Ryb2tlVHJhbnNmb3Jt
KTsKKworICAgIHN0YXRlU2F2ZXIuc2F2ZSgpOworICAgIHN0YXRlU2F2ZXIuY29udGV4dCgpLT5j
b25jYXRDVE0obm9uU2NhbGluZ1N0cm9rZVRyYW5zZm9ybS5pbnZlcnNlKCkpOworICAgIHJldHVy
biB0cnVlOworfQorCit2b2lkIFJlbmRlclNWR1NoYXBlOjpmaWxsQW5kU3Ryb2tlUGF0aChHcmFw
aGljc0NvbnRleHQqIGNvbnRleHQpCit7CisgICAgUmVuZGVyU3R5bGUqIHN0eWxlID0gdGhpcy0+
c3R5bGUoKTsKKworICAgIENvbG9yIGZhbGxiYWNrQ29sb3I7CisgICAgUGF0aCogdXNlUGF0aCA9
IGlzRmlsbEZhbGxiYWNrKCkgPyBtX3BhdGguZ2V0KCkgOiAwOworICAgIGlmIChSZW5kZXJTVkdS
ZXNvdXJjZSogZmlsbFBhaW50aW5nUmVzb3VyY2UgPSBSZW5kZXJTVkdSZXNvdXJjZTo6ZmlsbFBh
aW50aW5nUmVzb3VyY2UodGhpcywgc3R5bGUsIGZhbGxiYWNrQ29sb3IpKSB7CisgICAgICAgIGlm
IChmaWxsUGFpbnRpbmdSZXNvdXJjZS0+YXBwbHlSZXNvdXJjZSh0aGlzLCBzdHlsZSwgY29udGV4
dCwgQXBwbHlUb0ZpbGxNb2RlKSkKKyAgICAgICAgICAgIGZpbGxQYWludGluZ1Jlc291cmNlLT5w
b3N0QXBwbHlSZXNvdXJjZSh0aGlzLCBjb250ZXh0LCBBcHBseVRvRmlsbE1vZGUsIHVzZVBhdGgp
OworICAgICAgICBlbHNlIGlmIChmYWxsYmFja0NvbG9yLmlzVmFsaWQoKSkgeworICAgICAgICAg
ICAgUmVuZGVyU1ZHUmVzb3VyY2VTb2xpZENvbG9yKiBmYWxsYmFja1Jlc291cmNlID0gUmVuZGVy
U1ZHUmVzb3VyY2U6OnNoYXJlZFNvbGlkUGFpbnRpbmdSZXNvdXJjZSgpOworICAgICAgICAgICAg
ZmFsbGJhY2tSZXNvdXJjZS0+c2V0Q29sb3IoZmFsbGJhY2tDb2xvcik7CisgICAgICAgICAgICBp
ZiAoZmFsbGJhY2tSZXNvdXJjZS0+YXBwbHlSZXNvdXJjZSh0aGlzLCBzdHlsZSwgY29udGV4dCwg
QXBwbHlUb0ZpbGxNb2RlKSkKKyAgICAgICAgICAgICAgICBmYWxsYmFja1Jlc291cmNlLT5wb3N0
QXBwbHlSZXNvdXJjZSh0aGlzLCBjb250ZXh0LCBBcHBseVRvRmlsbE1vZGUsIHVzZVBhdGgpOwor
ICAgICAgICB9CisgICAgfQorCisgICAgZmFsbGJhY2tDb2xvciA9IENvbG9yKCk7CisgICAgUmVu
ZGVyU1ZHUmVzb3VyY2UqIHN0cm9rZVBhaW50aW5nUmVzb3VyY2UgPSBSZW5kZXJTVkdSZXNvdXJj
ZTo6c3Ryb2tlUGFpbnRpbmdSZXNvdXJjZSh0aGlzLCBzdHlsZSwgZmFsbGJhY2tDb2xvcik7Cisg
ICAgaWYgKCFzdHJva2VQYWludGluZ1Jlc291cmNlKQorICAgICAgICByZXR1cm47CisKKyAgICB1
c2VQYXRoID0gbV9wYXRoLmdldCgpOworICAgIGludCBhcHBseU1vZGUgPSBBcHBseVRvU3Ryb2tl
TW9kZTsKKworICAgIGJvb2wgbm9uU2NhbGluZ1N0cm9rZSA9IHN0eWxlLT5zdmdTdHlsZSgpLT52
ZWN0b3JFZmZlY3QoKSA9PSBWRV9OT05fU0NBTElOR19TVFJPS0U7CisKKyAgICBHcmFwaGljc0Nv
bnRleHRTdGF0ZVNhdmVyIHN0YXRlU2F2ZXIoKmNvbnRleHQsIGZhbHNlKTsKKworICAgIC8vIFNw
ZWMoMTEuNCk6IEFueSB6ZXJvIGxlbmd0aCBzdWJwYXRoIHNoYWxsIG5vdCBiZSBzdHJva2VkIGlm
IHRoZSDigJhzdHJva2UtbGluZWNhcOKAmSBwcm9wZXJ0eSBoYXMgYSB2YWx1ZSBvZiBidXR0Cisg
ICAgLy8gYnV0IHNoYWxsIGJlIHN0cm9rZWQgaWYgdGhlIOKAmHN0cm9rZS1saW5lY2Fw4oCZIHBy
b3BlcnR5IGhhcyBhIHZhbHVlIG9mIHJvdW5kIG9yIHNxdWFyZQorICAgIC8vIEZJWE1FOiB0aGlz
IGRvZXMgbm90IHdvcmsgZm9yIHplcm8tbGVuZ3RoIHN1YnBhdGhzLCBvbmx5IHdoZW4gdG90YWwg
cGF0aCBpcyB6ZXJvLWxlbmd0aAorICAgIGlmIChzaG91bGRTdHJva2VaZXJvTGVuZ3RoU3VicGF0
aCgpKSB7CisgICAgICAgIFJlbmRlclNWR1NoYXBlOjpjcmVhdGVTaGFwZSgpOworICAgICAgICB1
c2VQYXRoID0gbV9wYXRoLmdldCgpOworICAgICAgICBzZXR1cFNxdWFyZUNhcFBhdGgodXNlUGF0
aCwgYXBwbHlNb2RlKTsKKyAgICB9IGVsc2UgaWYgKG5vblNjYWxpbmdTdHJva2UpIHsKKyAgICAg
ICAgUmVuZGVyU1ZHU2hhcGU6OmNyZWF0ZVNoYXBlKCk7CisgICAgICAgIHVzZVBhdGggPSBtX3Bh
dGguZ2V0KCk7CisgICAgICAgIGlmICghc2V0dXBOb25TY2FsaW5nU3Ryb2tlUGF0aCh1c2VQYXRo
LCBzdGF0ZVNhdmVyKSkKKyAgICAgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgaWYgKHN0cm9r
ZVBhaW50aW5nUmVzb3VyY2UtPmFwcGx5UmVzb3VyY2UodGhpcywgc3R5bGUsIGNvbnRleHQsIGFw
cGx5TW9kZSkpIHsKKyAgICAgICAgc3Ryb2tlUGFpbnRpbmdSZXNvdXJjZS0+cG9zdEFwcGx5UmVz
b3VyY2UodGhpcywgY29udGV4dCwgYXBwbHlNb2RlLCB1c2VQYXRoKTsKKyAgICAgICAgcmV0dXJu
OworICAgIH0KKyAgICBpZiAoIWZhbGxiYWNrQ29sb3IuaXNWYWxpZCgpKQorICAgICAgICByZXR1
cm47CisgICAgUmVuZGVyU1ZHUmVzb3VyY2VTb2xpZENvbG9yKiBmYWxsYmFja1Jlc291cmNlID0g
UmVuZGVyU1ZHUmVzb3VyY2U6OnNoYXJlZFNvbGlkUGFpbnRpbmdSZXNvdXJjZSgpOworICAgIGZh
bGxiYWNrUmVzb3VyY2UtPnNldENvbG9yKGZhbGxiYWNrQ29sb3IpOworICAgIGlmIChmYWxsYmFj
a1Jlc291cmNlLT5hcHBseVJlc291cmNlKHRoaXMsIHN0eWxlLCBjb250ZXh0LCBhcHBseU1vZGUp
KQorICAgICAgICBmYWxsYmFja1Jlc291cmNlLT5wb3N0QXBwbHlSZXNvdXJjZSh0aGlzLCBjb250
ZXh0LCBhcHBseU1vZGUsIHVzZVBhdGgpOworfQorCit2b2lkIFJlbmRlclNWR1NoYXBlOjpwYWlu
dChQYWludEluZm8mIHBhaW50SW5mbywgY29uc3QgSW50UG9pbnQmKQoreworICAgIGlmIChwYWlu
dEluZm8uY29udGV4dC0+cGFpbnRpbmdEaXNhYmxlZCgpIHx8IHN0eWxlKCktPnZpc2liaWxpdHko
KSA9PSBISURERU4gfHwgaXNFbXB0eSgpKQorICAgICAgICByZXR1cm47CisgICAgRmxvYXRSZWN0
IGJvdW5kaW5nQm94ID0gcmVwYWludFJlY3RJbkxvY2FsQ29vcmRpbmF0ZXMoKTsKKyAgICBpZiAo
IVNWR1JlbmRlclN1cHBvcnQ6OnBhaW50SW5mb0ludGVyc2VjdHNSZXBhaW50UmVjdChib3VuZGlu
Z0JveCwgbV9sb2NhbFRyYW5zZm9ybSwgcGFpbnRJbmZvKSkKKyAgICAgICAgcmV0dXJuOworICAg
IFBhaW50SW5mbyBjaGlsZFBhaW50SW5mbyhwYWludEluZm8pOworICAgIGJvb2wgZHJhd3NPdXRs
aW5lID0gc3R5bGUoKS0+b3V0bGluZVdpZHRoKCkgJiYgKGNoaWxkUGFpbnRJbmZvLnBoYXNlID09
IFBhaW50UGhhc2VPdXRsaW5lIHx8IGNoaWxkUGFpbnRJbmZvLnBoYXNlID09IFBhaW50UGhhc2VT
ZWxmT3V0bGluZSk7CisgICAgaWYgKGRyYXdzT3V0bGluZSB8fCBjaGlsZFBhaW50SW5mby5waGFz
ZSA9PSBQYWludFBoYXNlRm9yZWdyb3VuZCkgeworICAgICAgICBHcmFwaGljc0NvbnRleHRTdGF0
ZVNhdmVyIHN0YXRlU2F2ZXIoKmNoaWxkUGFpbnRJbmZvLmNvbnRleHQpOworICAgICAgICBjaGls
ZFBhaW50SW5mby5hcHBseVRyYW5zZm9ybShtX2xvY2FsVHJhbnNmb3JtKTsKKworICAgICAgICBp
ZiAoY2hpbGRQYWludEluZm8ucGhhc2UgPT0gUGFpbnRQaGFzZUZvcmVncm91bmQpIHsKKyAgICAg
ICAgICAgIFBhaW50SW5mbyBzYXZlZEluZm8oY2hpbGRQYWludEluZm8pOworCisgICAgICAgICAg
ICBpZiAoU1ZHUmVuZGVyU3VwcG9ydDo6cHJlcGFyZVRvUmVuZGVyU1ZHQ29udGVudCh0aGlzLCBj
aGlsZFBhaW50SW5mbykpIHsKKyAgICAgICAgICAgICAgICBjb25zdCBTVkdSZW5kZXJTdHlsZSog
c3ZnU3R5bGUgPSBzdHlsZSgpLT5zdmdTdHlsZSgpOworICAgICAgICAgICAgICAgIGlmIChzdmdT
dHlsZS0+c2hhcGVSZW5kZXJpbmcoKSA9PSBTUl9DUklTUEVER0VTKQorICAgICAgICAgICAgICAg
ICAgICBjaGlsZFBhaW50SW5mby5jb250ZXh0LT5zZXRTaG91bGRBbnRpYWxpYXMoZmFsc2UpOwor
CisgICAgICAgICAgICAgICAgZmlsbEFuZFN0cm9rZVBhdGgoY2hpbGRQYWludEluZm8uY29udGV4
dCk7CisKKyAgICAgICAgICAgICAgICBpZiAoc3ZnU3R5bGUtPmhhc01hcmtlcnMoKSkKKyAgICAg
ICAgICAgICAgICAgICAgbV9tYXJrZXJMYXlvdXRJbmZvLmRyYXdNYXJrZXJzKGNoaWxkUGFpbnRJ
bmZvKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgU1ZHUmVuZGVyU3VwcG9ydDo6Zmlu
aXNoUmVuZGVyU1ZHQ29udGVudCh0aGlzLCBjaGlsZFBhaW50SW5mbywgc2F2ZWRJbmZvLmNvbnRl
eHQpOworICAgICAgICB9CisKKyAgICAgICAgaWYgKGRyYXdzT3V0bGluZSkKKyAgICAgICAgICAg
IHBhaW50T3V0bGluZShjaGlsZFBhaW50SW5mby5jb250ZXh0LCBJbnRSZWN0KGJvdW5kaW5nQm94
KSk7CisgICAgfQorfQorCisvLyBUaGlzIG1ldGhvZCBpcyBjYWxsZWQgZnJvbSBpbnNpZGUgcGFp
bnRPdXRsaW5lKCkgc2luY2Ugd2UgY2FsbCBwYWludE91dGxpbmUoKQorLy8gd2hpbGUgdHJhbnNm
b3JtZWQgdG8gb3VyIGNvb3JkIHN5c3RlbSwgcmV0dXJuIGxvY2FsIGNvb3Jkcwordm9pZCBSZW5k
ZXJTVkdTaGFwZTo6YWRkRm9jdXNSaW5nUmVjdHMoVmVjdG9yPExheW91dFJlY3Q+JiByZWN0cywg
Y29uc3QgTGF5b3V0UG9pbnQmKQoreworICAgIExheW91dFJlY3QgcmVjdCA9IGVuY2xvc2luZ0xh
eW91dFJlY3QocmVwYWludFJlY3RJbkxvY2FsQ29vcmRpbmF0ZXMoKSk7CisgICAgaWYgKCFyZWN0
LmlzRW1wdHkoKSkKKyAgICAgICAgcmVjdHMuYXBwZW5kKHJlY3QpOworfQorCitib29sIFJlbmRl
clNWR1NoYXBlOjpub2RlQXRGbG9hdFBvaW50KGNvbnN0IEhpdFRlc3RSZXF1ZXN0JiByZXF1ZXN0
LCBIaXRUZXN0UmVzdWx0JiByZXN1bHQsIGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50SW5QYXJlbnQs
IEhpdFRlc3RBY3Rpb24gaGl0VGVzdEFjdGlvbikKK3sKKyAgICAvLyBXZSBvbmx5IGRyYXcgaW4g
dGhlIGZvcmdyb3VuZCBwaGFzZSwgc28gd2Ugb25seSBoaXQtdGVzdCB0aGVuLgorICAgIGlmICho
aXRUZXN0QWN0aW9uICE9IEhpdFRlc3RGb3JlZ3JvdW5kKQorICAgICAgICByZXR1cm4gZmFsc2U7
CisKKyAgICBGbG9hdFBvaW50IGxvY2FsUG9pbnQgPSBtX2xvY2FsVHJhbnNmb3JtLmludmVyc2Uo
KS5tYXBQb2ludChwb2ludEluUGFyZW50KTsKKworICAgIGlmICghU1ZHUmVuZGVyU3VwcG9ydDo6
cG9pbnRJbkNsaXBwaW5nQXJlYSh0aGlzLCBsb2NhbFBvaW50KSkKKyAgICAgICAgcmV0dXJuIGZh
bHNlOworCisgICAgUG9pbnRlckV2ZW50c0hpdFJ1bGVzIGhpdFJ1bGVzKFBvaW50ZXJFdmVudHNI
aXRSdWxlczo6U1ZHX1BBVEhfSElUVEVTVElORywgcmVxdWVzdCwgc3R5bGUoKS0+cG9pbnRlckV2
ZW50cygpKTsKKyAgICBib29sIGlzVmlzaWJsZSA9IChzdHlsZSgpLT52aXNpYmlsaXR5KCkgPT0g
VklTSUJMRSk7CisgICAgaWYgKGlzVmlzaWJsZSB8fCAhaGl0UnVsZXMucmVxdWlyZVZpc2libGUp
IHsKKyAgICAgICAgY29uc3QgU1ZHUmVuZGVyU3R5bGUqIHN2Z1N0eWxlID0gc3R5bGUoKS0+c3Zn
U3R5bGUoKTsKKyAgICAgICAgV2luZFJ1bGUgZmlsbFJ1bGUgPSBzdmdTdHlsZS0+ZmlsbFJ1bGUo
KTsKKyAgICAgICAgaWYgKHJlcXVlc3Quc3ZnQ2xpcENvbnRlbnQoKSkKKyAgICAgICAgICAgIGZp
bGxSdWxlID0gc3ZnU3R5bGUtPmNsaXBSdWxlKCk7CisgICAgICAgIGlmICgoaGl0UnVsZXMuY2Fu
SGl0U3Ryb2tlICYmIChzdmdTdHlsZS0+aGFzU3Ryb2tlKCkgfHwgIWhpdFJ1bGVzLnJlcXVpcmVT
dHJva2UpICYmIHN0cm9rZUNvbnRhaW5zKGxvY2FsUG9pbnQsIGhpdFJ1bGVzLnJlcXVpcmVTdHJv
a2UpKQorICAgICAgICAgICAgfHwgKGhpdFJ1bGVzLmNhbkhpdEZpbGwgJiYgKHN2Z1N0eWxlLT5o
YXNGaWxsKCkgfHwgIWhpdFJ1bGVzLnJlcXVpcmVGaWxsKSAmJiBmaWxsQ29udGFpbnMobG9jYWxQ
b2ludCwgaGl0UnVsZXMucmVxdWlyZUZpbGwsIGZpbGxSdWxlKSkpIHsKKyAgICAgICAgICAgIHVw
ZGF0ZUhpdFRlc3RSZXN1bHQocmVzdWx0LCByb3VuZGVkTGF5b3V0UG9pbnQobG9jYWxQb2ludCkp
OworICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0KKyAgICB9CisgICAgcmV0dXJu
IGZhbHNlOworfQorCitGbG9hdFJlY3QgUmVuZGVyU1ZHU2hhcGU6OmNhbGN1bGF0ZU1hcmtlckJv
dW5kc0lmTmVlZGVkKCkKK3sKKyAgICBTVkdFbGVtZW50KiBzdmdFbGVtZW50ID0gc3RhdGljX2Nh
c3Q8U1ZHRWxlbWVudCo+KG5vZGUoKSk7CisgICAgQVNTRVJUKHN2Z0VsZW1lbnQgJiYgc3ZnRWxl
bWVudC0+ZG9jdW1lbnQoKSk7CisgICAgaWYgKCFzdmdFbGVtZW50LT5pc1N0eWxlZCgpKQorICAg
ICAgICByZXR1cm4gRmxvYXRSZWN0KCk7CisKKyAgICBTVkdTdHlsZWRFbGVtZW50KiBzdHlsZWRF
bGVtZW50ID0gc3RhdGljX2Nhc3Q8U1ZHU3R5bGVkRWxlbWVudCo+KHN2Z0VsZW1lbnQpOworICAg
IGlmICghc3R5bGVkRWxlbWVudC0+c3VwcG9ydHNNYXJrZXJzKCkpCisgICAgICAgIHJldHVybiBG
bG9hdFJlY3QoKTsKKworICAgIEFTU0VSVChzdHlsZSgpLT5zdmdTdHlsZSgpLT5oYXNNYXJrZXJz
KCkpOworCisgICAgU1ZHUmVzb3VyY2VzKiByZXNvdXJjZXMgPSBTVkdSZXNvdXJjZXNDYWNoZTo6
Y2FjaGVkUmVzb3VyY2VzRm9yUmVuZGVyT2JqZWN0KHRoaXMpOworICAgIGlmICghcmVzb3VyY2Vz
KQorICAgICAgICByZXR1cm4gRmxvYXRSZWN0KCk7CisKKyAgICBSZW5kZXJTVkdSZXNvdXJjZU1h
cmtlciogbWFya2VyU3RhcnQgPSByZXNvdXJjZXMtPm1hcmtlclN0YXJ0KCk7CisgICAgUmVuZGVy
U1ZHUmVzb3VyY2VNYXJrZXIqIG1hcmtlck1pZCA9IHJlc291cmNlcy0+bWFya2VyTWlkKCk7Cisg
ICAgUmVuZGVyU1ZHUmVzb3VyY2VNYXJrZXIqIG1hcmtlckVuZCA9IHJlc291cmNlcy0+bWFya2Vy
RW5kKCk7CisgICAgaWYgKCFtYXJrZXJTdGFydCAmJiAhbWFya2VyTWlkICYmICFtYXJrZXJFbmQp
CisgICAgICAgIHJldHVybiBGbG9hdFJlY3QoKTsKKworICAgIHJldHVybiBtX21hcmtlckxheW91
dEluZm8uY2FsY3VsYXRlQm91bmRhcmllcyhtYXJrZXJTdGFydCwgbWFya2VyTWlkLCBtYXJrZXJF
bmQsIHN0cm9rZVdpZHRoKCksIHBhdGgoKSk7Cit9CisKK3ZvaWQgUmVuZGVyU1ZHU2hhcGU6OnVw
ZGF0ZUNhY2hlZEJvdW5kYXJpZXMoKQoreworICAgIGlmIChpc0VtcHR5KCkpIHsKKyAgICAgICAg
bV9maWxsQm91bmRpbmdCb3ggPSBGbG9hdFJlY3QoKTsKKyAgICAgICAgbV9zdHJva2VBbmRNYXJr
ZXJCb3VuZGluZ0JveCA9IEZsb2F0UmVjdCgpOworICAgICAgICBtX3JlcGFpbnRCb3VuZGluZ0Jv
eCA9IEZsb2F0UmVjdCgpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgLy8gQ2FjaGUg
X3VuY2xpcHBlZF8gZmlsbCBib3VuZGluZyBib3gsIHVzZWQgZm9yIGNhbGN1bGF0aW9ucyBpbiBy
ZXNvdXJjZXMKKyAgICBtX2ZpbGxCb3VuZGluZ0JveCA9IG9iamVjdEJvdW5kaW5nQm94KCk7CisK
KyAgICAvLyBTcGVjKDExLjQpOiBBbnkgemVybyBsZW5ndGggc3VicGF0aCBzaGFsbCBub3QgYmUg
c3Ryb2tlZCBpZiB0aGUg4oCYc3Ryb2tlLWxpbmVjYXDigJkgcHJvcGVydHkgaGFzIGEgdmFsdWUg
b2YgYnV0dAorICAgIC8vIGJ1dCBzaGFsbCBiZSBzdHJva2VkIGlmIHRoZSDigJhzdHJva2UtbGlu
ZWNhcOKAmSBwcm9wZXJ0eSBoYXMgYSB2YWx1ZSBvZiByb3VuZCBvciBzcXVhcmUKKyAgICBpZiAo
c2hvdWxkU3Ryb2tlWmVyb0xlbmd0aFN1YnBhdGgoKSkgeworICAgICAgICBtX3N0cm9rZUFuZE1h
cmtlckJvdW5kaW5nQm94ID0gemVyb0xlbmd0aFN1YnBhdGhSZWN0KCk7CisgICAgICAgIC8vIENh
Y2hlIHNtYWxsZXN0IHBvc3NpYmxlIHJlcGFpbnQgcmVjdGFuZ2xlCisgICAgICAgIG1fcmVwYWlu
dEJvdW5kaW5nQm94ID0gbV9zdHJva2VBbmRNYXJrZXJCb3VuZGluZ0JveDsKKyAgICAgICAgU1ZH
UmVuZGVyU3VwcG9ydDo6aW50ZXJzZWN0UmVwYWludFJlY3RXaXRoUmVzb3VyY2VzKHRoaXMsIG1f
cmVwYWludEJvdW5kaW5nQm94KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIC8vIENh
Y2hlIF91bmNsaXBwZWRfIHN0cm9rZSBib3VuZGluZyBib3gsIHVzZWQgZm9yIGNhbGN1bGF0aW9u
cyBpbiByZXNvdXJjZXMgKGluY2x1ZGVzIG1hcmtlciBib3VuZGFyaWVzKQorICAgIG1fc3Ryb2tl
QW5kTWFya2VyQm91bmRpbmdCb3ggPSBtX2ZpbGxCb3VuZGluZ0JveDsKKworICAgIGNvbnN0IFNW
R1JlbmRlclN0eWxlKiBzdmdTdHlsZSA9IHN0eWxlKCktPnN2Z1N0eWxlKCk7CisgICAgaWYgKHN2
Z1N0eWxlLT5oYXNTdHJva2UoKSkKKyAgICAgICAgbV9zdHJva2VBbmRNYXJrZXJCb3VuZGluZ0Jv
eC51bml0ZShzdHJva2VCb3VuZGluZ0JveCgpKTsKKworICAgIGluZmxhdGVXaXRoTWFya2VyQm91
bmRzKCk7CisKKyAgICAvLyBDYWNoZSBzbWFsbGVzdCBwb3NzaWJsZSByZXBhaW50IHJlY3Rhbmds
ZQorICAgIG1fcmVwYWludEJvdW5kaW5nQm94ID0gbV9zdHJva2VBbmRNYXJrZXJCb3VuZGluZ0Jv
eDsKKyAgICBTVkdSZW5kZXJTdXBwb3J0OjppbnRlcnNlY3RSZXBhaW50UmVjdFdpdGhSZXNvdXJj
ZXModGhpcywgbV9yZXBhaW50Qm91bmRpbmdCb3gpOworfQorCitmbG9hdCBSZW5kZXJTVkdTaGFw
ZTo6c3Ryb2tlV2lkdGgoKSBjb25zdAoreworICAgIFNWR0VsZW1lbnQqIHN2Z0VsZW1lbnQgPSBz
dGF0aWNfY2FzdDxTVkdFbGVtZW50Kj4obm9kZSgpKTsKKyAgICByZXR1cm4gc3R5bGUoKS0+c3Zn
U3R5bGUoKS0+c3Ryb2tlV2lkdGgoKS52YWx1ZShzdmdFbGVtZW50KTsKK30KKworfQorCisjZW5k
aWYgLy8gRU5BQkxFKFNWRykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9z
dmcvUmVuZGVyU1ZHU2hhcGUuaCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVy
U1ZHU2hhcGUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iYmZhNmJmCi0t
LSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdT
aGFwZS5oCkBAIC0wLDAgKzEsMTU4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1
LCAyMDA3IE5pa29sYXMgWmltbWVybWFubiA8emltbWVybWFubkBrZGUub3JnPgorICogQ29weXJp
Z2h0IChDKSAyMDA0LCAyMDA1IFJvYiBCdWlzIDxidWlzQGtkZS5vcmc+CisgKiBDb3B5cmlnaHQg
KEMpIDIwMDUgRXJpYyBTZWlkZWwgPGVyaWNAd2Via2l0Lm9yZz4KKyAqIENvcHlyaWdodCAoQykg
MjAwNiBBcHBsZSBDb21wdXRlciwgSW5jCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgR29vZ2xlLCBJ
bmMuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgUmVuYXRhIEhvZG92YW4gPHJlbmlAd2Via2l0Lm9y
Zz4KKyAqIENvcHlyaWdodCAoQykgMjAxMSBVbml2ZXJzaXR5IG9mIFN6ZWdlZAorICoKKyAqIFRo
aXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQv
b3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVy
YWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBG
b3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlv
dXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlz
dHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRI
T1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisg
KiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBT
ZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRl
dGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05V
IExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJh
cnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBG
cmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGgg
Rmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaWZuZGVmIFJl
bmRlclNWR1NoYXBlX2gKKyNkZWZpbmUgUmVuZGVyU1ZHU2hhcGVfaAorCisjaWYgRU5BQkxFKFNW
RykKKyNpbmNsdWRlICJBZmZpbmVUcmFuc2Zvcm0uaCIKKyNpbmNsdWRlICJGbG9hdFJlY3QuaCIK
KyNpbmNsdWRlICJSZW5kZXJTVkdNb2RlbE9iamVjdC5oIgorI2luY2x1ZGUgIlNWR01hcmtlckxh
eW91dEluZm8uaCIKKyNpbmNsdWRlICJTdHJva2VTdHlsZUFwcGxpZXIuaCIKKyNpbmNsdWRlIDx3
dGYvT3duUHRyLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgRmxvYXRQb2ludDsK
K2NsYXNzIEdyYXBoaWNzQ29udGV4dFN0YXRlU2F2ZXI7CitjbGFzcyBSZW5kZXJTVkdDb250YWlu
ZXI7CitjbGFzcyBSZW5kZXJTVkdQYXRoOworY2xhc3MgU1ZHU3R5bGVkVHJhbnNmb3JtYWJsZUVs
ZW1lbnQ7CisKK2NsYXNzIEJvdW5kaW5nUmVjdFN0cm9rZVN0eWxlQXBwbGllciA6IHB1YmxpYyBT
dHJva2VTdHlsZUFwcGxpZXIgeworcHVibGljOgorICAgIEJvdW5kaW5nUmVjdFN0cm9rZVN0eWxl
QXBwbGllcihjb25zdCBSZW5kZXJPYmplY3QqIG9iamVjdCwgUmVuZGVyU3R5bGUqIHN0eWxlKQor
ICAgICAgICA6IG1fb2JqZWN0KG9iamVjdCkKKyAgICAgICAgLCBtX3N0eWxlKHN0eWxlKQorICAg
IHsKKyAgICAgICAgQVNTRVJUKHN0eWxlKTsKKyAgICAgICAgQVNTRVJUKG9iamVjdCk7CisgICAg
fQorCisgICAgdm9pZCBzdHJva2VTdHlsZShHcmFwaGljc0NvbnRleHQqIGdjKQorICAgIHsKKyAg
ICAgICAgU1ZHUmVuZGVyU3VwcG9ydDo6YXBwbHlTdHJva2VTdHlsZVRvQ29udGV4dChnYywgbV9z
dHlsZSwgbV9vYmplY3QpOworICAgIH0KKworcHJpdmF0ZToKKyAgICBjb25zdCBSZW5kZXJPYmpl
Y3QqIG1fb2JqZWN0OworICAgIFJlbmRlclN0eWxlKiBtX3N0eWxlOworfTsKKworY2xhc3MgUmVu
ZGVyU1ZHU2hhcGUgOiBwdWJsaWMgUmVuZGVyU1ZHTW9kZWxPYmplY3QgeworcHVibGljOgorICAg
IGV4cGxpY2l0IFJlbmRlclNWR1NoYXBlKFNWR1N0eWxlZFRyYW5zZm9ybWFibGVFbGVtZW50Kik7
CisgICAgdmlydHVhbCB+UmVuZGVyU1ZHU2hhcGUoKTsKKworICAgIHZvaWQgc2V0TmVlZHNTaGFw
ZVVwZGF0ZSgpIHsgbV9uZWVkc1NoYXBlVXBkYXRlID0gdHJ1ZTsgfQorICAgIHZpcnR1YWwgdm9p
ZCBzZXROZWVkc0JvdW5kYXJpZXNVcGRhdGUoKSB7IG1fbmVlZHNCb3VuZGFyaWVzVXBkYXRlID0g
dHJ1ZTsgfQorICAgIHZpcnR1YWwgdm9pZCBzZXROZWVkc1RyYW5zZm9ybVVwZGF0ZSgpIHsgbV9u
ZWVkc1RyYW5zZm9ybVVwZGF0ZSA9IHRydWU7IH0KKyAgICB2aXJ0dWFsIHZvaWQgZmlsbFNoYXBl
KEdyYXBoaWNzQ29udGV4dCopOworICAgIHZpcnR1YWwgdm9pZCBzdHJva2VTaGFwZShHcmFwaGlj
c0NvbnRleHQqKTsKKworcHJvdGVjdGVkOgorICAgIHZpcnR1YWwgdm9pZCBjcmVhdGVTaGFwZSgp
OworICAgIHZpcnR1YWwgYm9vbCBpc0VtcHR5KCkgY29uc3Q7CisgICAgdmlydHVhbCBGbG9hdFJl
Y3Qgb2JqZWN0Qm91bmRpbmdCb3goKSBjb25zdDsKKyAgICB2aXJ0dWFsIEZsb2F0UmVjdCBzdHJv
a2VCb3VuZGluZ0JveCgpIGNvbnN0OworICAgIHZpcnR1YWwgYm9vbCBzaGFwZURlcGVuZGVudFN0
cm9rZUNvbnRhaW5zKGNvbnN0IEZsb2F0UG9pbnQmKTsKKyAgICB2aXJ0dWFsIGJvb2wgc2hhcGVE
ZXBlbmRlbnRGaWxsQ29udGFpbnMoY29uc3QgRmxvYXRQb2ludCYsIGNvbnN0IFdpbmRSdWxlJikg
Y29uc3Q7CisgICAgZmxvYXQgc3Ryb2tlV2lkdGgoKSBjb25zdDsKKyAgICB2b2lkIHNldElzRmls
bEZhbGxiYWNrKGJvb2wgaXNGYWxsYmFjaykgeyBtX2ZpbGxGYWxsYmFjayA9IGlzRmFsbGJhY2s7
IH0KKyAgICBib29sIGlzRmlsbEZhbGxiYWNrKCkgY29uc3QgeyByZXR1cm4gbV9maWxsRmFsbGJh
Y2s7IH0KKyAgICBGbG9hdFJlY3QgY2FsY3VsYXRlTWFya2VyQm91bmRzSWZOZWVkZWQoKTsKKyAg
ICB2b2lkIHNldFN0cm9rZUFuZE1hcmtlckJvdW5kaW5nQm94KEZsb2F0UmVjdCByZWN0KSB7IG1f
c3Ryb2tlQW5kTWFya2VyQm91bmRpbmdCb3ggPSByZWN0OyB9CisKKyAgICBQYXRoJiBwYXRoKCkg
Y29uc3QKKyAgICB7CisgICAgICAgIEFTU0VSVChtX3BhdGguZ2V0KCkpOworICAgICAgICByZXR1
cm4gKm1fcGF0aDsKKyAgICB9CisKKyAgICBib29sIGhhc1BhdGgoKSBjb25zdCB7IHJldHVybiBt
X3BhdGguZ2V0KCk7IH0KKworcHJpdmF0ZToKKyAgICAvLyBIaXQtZGV0ZWN0aW9uIHNlcGVyYXRl
ZCBmb3IgdGhlIGZpbGwgYW5kIHRoZSBzdHJva2UKKyAgICBib29sIGZpbGxDb250YWlucyhjb25z
dCBGbG9hdFBvaW50JiwgYm9vbCByZXF1aXJlc0ZpbGwgPSB0cnVlLCBXaW5kUnVsZSBmaWxsUnVs
ZSA9IFJVTEVfTk9OWkVSTyk7CisgICAgYm9vbCBzdHJva2VDb250YWlucyhjb25zdCBGbG9hdFBv
aW50JiwgYm9vbCByZXF1aXJlc1N0cm9rZSA9IHRydWUpOworCisgICAgdmlydHVhbCBGbG9hdFJl
Y3QgcmVwYWludFJlY3RJbkxvY2FsQ29vcmRpbmF0ZXMoKSBjb25zdCB7IHJldHVybiBtX3JlcGFp
bnRCb3VuZGluZ0JveDsgfQorICAgIHZpcnR1YWwgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiBsb2Nh
bFRvUGFyZW50VHJhbnNmb3JtKCkgY29uc3QgeyByZXR1cm4gbV9sb2NhbFRyYW5zZm9ybTsgfQor
CisgICAgdmlydHVhbCBib29sIGlzU1ZHU2hhcGUoKSBjb25zdCB7IHJldHVybiB0cnVlOyB9Cisg
ICAgdmlydHVhbCBjb25zdCBjaGFyKiByZW5kZXJOYW1lKCkgY29uc3QgeyByZXR1cm4gIlJlbmRl
clNWR1NoYXBlIjsgfQorICAgIHZpcnR1YWwgYm9vbCBpc1JvdW5kZWRSZWN0KCkgeyByZXR1cm4g
ZmFsc2U7IH0KKworICAgIHZpcnR1YWwgdm9pZCBsYXlvdXQoKTsKKyAgICB2aXJ0dWFsIHZvaWQg
cGFpbnQoUGFpbnRJbmZvJiwgY29uc3QgTGF5b3V0UG9pbnQmKTsKKyAgICB2aXJ0dWFsIHZvaWQg
YWRkRm9jdXNSaW5nUmVjdHMoVmVjdG9yPExheW91dFJlY3Q+JiwgY29uc3QgTGF5b3V0UG9pbnQm
KTsKKyAgICB2aXJ0dWFsIHZvaWQgaW5mbGF0ZVdpdGhNYXJrZXJCb3VuZHMoKSB7IH0KKworICAg
IHZpcnR1YWwgYm9vbCBub2RlQXRGbG9hdFBvaW50KGNvbnN0IEhpdFRlc3RSZXF1ZXN0JiwgSGl0
VGVzdFJlc3VsdCYsIGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50SW5QYXJlbnQsIEhpdFRlc3RBY3Rp
b24pOworCisgICAgdm9pZCB1cGRhdGVDYWNoZWRCb3VuZGFyaWVzKCk7CisKKyAgICB2b2lkIHNl
dHVwU3F1YXJlQ2FwUGF0aChQYXRoKiYgdXNlUGF0aCwgaW50JiBhcHBseU1vZGUpOworICAgIGJv
b2wgc2V0dXBOb25TY2FsaW5nU3Ryb2tlUGF0aChQYXRoKiYgdXNlUGF0aCwgR3JhcGhpY3NDb250
ZXh0U3RhdGVTYXZlciYpOworICAgIGJvb2wgc2hvdWxkU3Ryb2tlWmVyb0xlbmd0aFN1YnBhdGgo
KSBjb25zdDsKKyAgICBGbG9hdFJlY3QgemVyb0xlbmd0aFN1YnBhdGhSZWN0KCkgY29uc3Q7CisK
KyAgICB2b2lkIGZpbGxBbmRTdHJva2VQYXRoKEdyYXBoaWNzQ29udGV4dCopOworCitwcml2YXRl
OgorICAgIGJvb2wgbV9uZWVkc0JvdW5kYXJpZXNVcGRhdGUgOiAxOworICAgIGJvb2wgbV9uZWVk
c1NoYXBlVXBkYXRlIDogMTsKKyAgICBib29sIG1fbmVlZHNUcmFuc2Zvcm1VcGRhdGUgOiAxOwor
ICAgIGJvb2wgbV9maWxsRmFsbGJhY2sgOiAxOworICAgIGJvb2wgbV9zdHJva2VDb250YWluc0Zh
bGxCYWNrIDogMTsKKworICAgIEZsb2F0UmVjdCBtX2ZpbGxCb3VuZGluZ0JveDsKKyAgICBGbG9h
dFJlY3QgbV9zdHJva2VBbmRNYXJrZXJCb3VuZGluZ0JveDsKKyAgICBGbG9hdFJlY3QgbV9yZXBh
aW50Qm91bmRpbmdCb3g7CisgICAgU1ZHTWFya2VyTGF5b3V0SW5mbyBtX21hcmtlckxheW91dElu
Zm87CisgICAgQWZmaW5lVHJhbnNmb3JtIG1fbG9jYWxUcmFuc2Zvcm07CisgICAgT3duUHRyPFBh
dGg+IG1fcGF0aDsKK307CisKK2lubGluZSBSZW5kZXJTVkdTaGFwZSogdG9SZW5kZXJTVkdTaGFw
ZShSZW5kZXJPYmplY3QqIG9iamVjdCkKK3sKKyAgICBBU1NFUlQoIW9iamVjdCB8fCBvYmplY3Qt
PmlzU1ZHU2hhcGUoKSk7CisgICAgcmV0dXJuIHN0YXRpY19jYXN0PFJlbmRlclNWR1NoYXBlKj4o
b2JqZWN0KTsKK30KKworaW5saW5lIGNvbnN0IFJlbmRlclNWR1NoYXBlKiB0b1JlbmRlclNWR1No
YXBlKGNvbnN0IFJlbmRlck9iamVjdCogb2JqZWN0KQoreworICAgIEFTU0VSVCghb2JqZWN0IHx8
IG9iamVjdC0+aXNTVkdTaGFwZSgpKTsKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8Y29uc3QgUmVu
ZGVyU1ZHU2hhcGUqPihvYmplY3QpOworfQorCisvLyBUaGlzIHdpbGwgY2F0Y2ggYW55b25lIGRv
aW5nIGFuIHVubmVjZXNzYXJ5IGNhc3QuCit2b2lkIHRvUmVuZGVyU1ZHU2hhcGUoY29uc3QgUmVu
ZGVyU1ZHU2hhcGUqKTsKKworfQorCisjZW5kaWYgLy8gRU5BQkxFKFNWRykKKyNlbmRpZgpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdJbmxpbmVUZXh0Qm94LmNw
cCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHSW5saW5lVGV4dEJveC5jcHAKaW5k
ZXggYzFjNWFmYS4uNzNkNmM0MyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L3N2Zy9TVkdJbmxpbmVUZXh0Qm94LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
c3ZnL1NWR0lubGluZVRleHRCb3guY3BwCkBAIC0zNzcsNyArMzc3LDcgQEAgdm9pZCBTVkdJbmxp
bmVUZXh0Qm94OjpyZWxlYXNlUGFpbnRpbmdSZXNvdXJjZShHcmFwaGljc0NvbnRleHQqJiBjb250
ZXh0LCBjb25zdAogICAgIFJlbmRlck9iamVjdCogcGFyZW50UmVuZGVyZXIgPSBwYXJlbnQoKS0+
cmVuZGVyZXIoKTsKICAgICBBU1NFUlQocGFyZW50UmVuZGVyZXIpOwogCi0gICAgbV9wYWludGlu
Z1Jlc291cmNlLT5wb3N0QXBwbHlSZXNvdXJjZShwYXJlbnRSZW5kZXJlciwgY29udGV4dCwgbV9w
YWludGluZ1Jlc291cmNlTW9kZSwgcGF0aCk7CisgICAgbV9wYWludGluZ1Jlc291cmNlLT5wb3N0
QXBwbHlSZXNvdXJjZShzdGF0aWNfY2FzdDxSZW5kZXJTVkdTaGFwZSo+KHBhcmVudFJlbmRlcmVy
KSwgY29udGV4dCwgbV9wYWludGluZ1Jlc291cmNlTW9kZSwgcGF0aCk7CiAgICAgbV9wYWludGlu
Z1Jlc291cmNlID0gMDsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L3N2Zy9TVkdSZW5kZXJTdXBwb3J0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcv
U1ZHUmVuZGVyU3VwcG9ydC5jcHAKaW5kZXggMDA3OTIxOS4uNTU1OTVhZiAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdSZW5kZXJTdXBwb3J0LmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR1JlbmRlclN1cHBvcnQuY3BwCkBAIC0xNTMs
NyArMTUzLDcgQEAgdm9pZCBTVkdSZW5kZXJTdXBwb3J0OjpmaW5pc2hSZW5kZXJTVkdDb250ZW50
KFJlbmRlck9iamVjdCogb2JqZWN0LCBQYWludEluZm8mIHAKICAgICBTVkdSZXNvdXJjZXMqIHJl
c291cmNlcyA9IFNWR1Jlc291cmNlc0NhY2hlOjpjYWNoZWRSZXNvdXJjZXNGb3JSZW5kZXJPYmpl
Y3Qob2JqZWN0KTsKICAgICBpZiAocmVzb3VyY2VzKSB7CiAgICAgICAgIGlmIChSZW5kZXJTVkdS
ZXNvdXJjZUZpbHRlciogZmlsdGVyID0gcmVzb3VyY2VzLT5maWx0ZXIoKSkgewotICAgICAgICAg
ICAgZmlsdGVyLT5wb3N0QXBwbHlSZXNvdXJjZShvYmplY3QsIHBhaW50SW5mby5jb250ZXh0LCBB
cHBseVRvRGVmYXVsdE1vZGUsIC8qIHBhdGggKi8wKTsKKyAgICAgICAgICAgIGZpbHRlci0+cG9z
dEFwcGx5UmVzb3VyY2Uoc3RhdGljX2Nhc3Q8UmVuZGVyU1ZHU2hhcGUqPihvYmplY3QpLCBwYWlu
dEluZm8uY29udGV4dCwgQXBwbHlUb0RlZmF1bHRNb2RlLCAwKTsKICAgICAgICAgICAgIHBhaW50
SW5mby5jb250ZXh0ID0gc2F2ZWRDb250ZXh0OwogICAgICAgICB9CiAgICAgfQpAQCAtMjI1LDkg
KzIyNSw5IEBAIHZvaWQgU1ZHUmVuZGVyU3VwcG9ydDo6bGF5b3V0Q2hpbGRyZW4oUmVuZGVyT2Jq
ZWN0KiBzdGFydCwgYm9vbCBzZWxmTmVlZHNMYXlvdXQpCiAgICAgICAgICAgICAvLyBXaGVuIHNl
bGZOZWVkc0xheW91dCBpcyBmYWxzZSBhbmQgdGhlIGxheW91dCBzaXplIGNoYW5nZWQsIHdlIGhh
dmUgdG8gY2hlY2sgd2hldGhlciB0aGlzIGNoaWxkIHVzZXMgcmVsYXRpdmUgbGVuZ3RocwogICAg
ICAgICAgICAgaWYgKFNWR0VsZW1lbnQqIGVsZW1lbnQgPSBjaGlsZC0+bm9kZSgpLT5pc1NWR0Vs
ZW1lbnQoKSA/IHN0YXRpY19jYXN0PFNWR0VsZW1lbnQqPihjaGlsZC0+bm9kZSgpKSA6IDApIHsK
ICAgICAgICAgICAgICAgICBpZiAoZWxlbWVudC0+aXNTdHlsZWQoKSAmJiBzdGF0aWNfY2FzdDxT
VkdTdHlsZWRFbGVtZW50Kj4oZWxlbWVudCktPmhhc1JlbGF0aXZlTGVuZ3RocygpKSB7Ci0gICAg
ICAgICAgICAgICAgICAgIC8vIFdoZW4gdGhlIGxheW91dCBzaXplIGNoYW5nZWQgYW5kIHdoZW4g
dXNpbmcgcmVsYXRpdmUgdmFsdWVzIHRlbGwgdGhlIFJlbmRlclNWR1BhdGggdG8gdXBkYXRlIGl0
cyBQYXRoIG9iamVjdAotICAgICAgICAgICAgICAgICAgICBpZiAoY2hpbGQtPmlzU1ZHUGF0aCgp
KQotICAgICAgICAgICAgICAgICAgICAgICAgdG9SZW5kZXJTVkdQYXRoKGNoaWxkKS0+c2V0TmVl
ZHNQYXRoVXBkYXRlKCk7CisgICAgICAgICAgICAgICAgICAgIC8vIFdoZW4gdGhlIGxheW91dCBz
aXplIGNoYW5nZWQgYW5kIHdoZW4gdXNpbmcgcmVsYXRpdmUgdmFsdWVzIHRlbGwgdGhlIFJlbmRl
clNWR1NoYXBlIHRvIHVwZGF0ZSBpdHMgc2hhcGUgb2JqZWN0CisgICAgICAgICAgICAgICAgICAg
IGlmIChjaGlsZC0+aXNTVkdTaGFwZSgpKQorICAgICAgICAgICAgICAgICAgICAgICAgdG9SZW5k
ZXJTVkdTaGFwZShjaGlsZCktPnNldE5lZWRzU2hhcGVVcGRhdGUoKTsKIAogICAgICAgICAgICAg
ICAgICAgICBuZWVkc0xheW91dCA9IHRydWU7CiAgICAgICAgICAgICAgICAgfQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdSZW5kZXJUcmVlQXNUZXh0LmNwcCBi
L1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHUmVuZGVyVHJlZUFzVGV4dC5jcHAKaW5k
ZXggYTE2Mjk2OS4uZDFhZDcyYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L3N2Zy9TVkdSZW5kZXJUcmVlQXNUZXh0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvc3ZnL1NWR1JlbmRlclRyZWVBc1RleHQuY3BwCkBAIC01NSw2ICs1NSw3IEBACiAjaW5jbHVk
ZSAiUmVuZGVyU1ZHUmVzb3VyY2VSYWRpYWxHcmFkaWVudC5oIgogI2luY2x1ZGUgIlJlbmRlclNW
R1Jlc291cmNlU29saWRDb2xvci5oIgogI2luY2x1ZGUgIlJlbmRlclNWR1Jvb3QuaCIKKyNpbmNs
dWRlICJSZW5kZXJTVkdTaGFwZS5oIgogI2luY2x1ZGUgIlJlbmRlclNWR1RleHQuaCIKICNpbmNs
dWRlICJSZW5kZXJUcmVlQXNUZXh0LmgiCiAjaW5jbHVkZSAiU1ZHQ2lyY2xlRWxlbWVudC5oIgpA
QCAtMjg5LDE4ICsyOTAsMTggQEAgc3RhdGljIHZvaWQgd3JpdGVTdHlsZShUZXh0U3RyZWFtJiB0
cywgY29uc3QgUmVuZGVyT2JqZWN0JiBvYmplY3QpCiAgICAgICAgIHdyaXRlTmFtZVZhbHVlUGFp
cih0cywgInRyYW5zZm9ybSIsIG9iamVjdC5sb2NhbFRyYW5zZm9ybSgpKTsKICAgICB3cml0ZUlm
Tm90RGVmYXVsdCh0cywgImltYWdlIHJlbmRlcmluZyIsIHN0eWxlLT5pbWFnZVJlbmRlcmluZygp
LCBSZW5kZXJTdHlsZTo6aW5pdGlhbEltYWdlUmVuZGVyaW5nKCkpOwogICAgIHdyaXRlSWZOb3RE
ZWZhdWx0KHRzLCAib3BhY2l0eSIsIHN0eWxlLT5vcGFjaXR5KCksIFJlbmRlclN0eWxlOjppbml0
aWFsT3BhY2l0eSgpKTsKLSAgICBpZiAob2JqZWN0LmlzU1ZHUGF0aCgpKSB7Ci0gICAgICAgIGNv
bnN0IFJlbmRlclNWR1BhdGgmIHBhdGggPSBzdGF0aWNfY2FzdDxjb25zdCBSZW5kZXJTVkdQYXRo
Jj4ob2JqZWN0KTsKLSAgICAgICAgQVNTRVJUKHBhdGgubm9kZSgpKTsKLSAgICAgICAgQVNTRVJU
KHBhdGgubm9kZSgpLT5pc1NWR0VsZW1lbnQoKSk7CisgICAgaWYgKG9iamVjdC5pc1NWR1NoYXBl
KCkpIHsKKyAgICAgICAgY29uc3QgUmVuZGVyU1ZHU2hhcGUmIHNoYXBlID0gc3RhdGljX2Nhc3Q8
Y29uc3QgUmVuZGVyU1ZHU2hhcGUmPihvYmplY3QpOworICAgICAgICBBU1NFUlQoc2hhcGUubm9k
ZSgpKTsKKyAgICAgICAgQVNTRVJUKHNoYXBlLm5vZGUoKS0+aXNTVkdFbGVtZW50KCkpOwogCiAg
ICAgICAgIENvbG9yIGZhbGxiYWNrQ29sb3I7Ci0gICAgICAgIGlmIChSZW5kZXJTVkdSZXNvdXJj
ZSogc3Ryb2tlUGFpbnRpbmdSZXNvdXJjZSA9IFJlbmRlclNWR1Jlc291cmNlOjpzdHJva2VQYWlu
dGluZ1Jlc291cmNlKGNvbnN0X2Nhc3Q8UmVuZGVyU1ZHUGF0aCo+KCZwYXRoKSwgcGF0aC5zdHls
ZSgpLCBmYWxsYmFja0NvbG9yKSkgeworICAgICAgICBpZiAoUmVuZGVyU1ZHUmVzb3VyY2UqIHN0
cm9rZVBhaW50aW5nUmVzb3VyY2UgPSBSZW5kZXJTVkdSZXNvdXJjZTo6c3Ryb2tlUGFpbnRpbmdS
ZXNvdXJjZShjb25zdF9jYXN0PFJlbmRlclNWR1NoYXBlKj4oJnNoYXBlKSwgc2hhcGUuc3R5bGUo
KSwgZmFsbGJhY2tDb2xvcikpIHsKICAgICAgICAgICAgIFRleHRTdHJlYW1TZXBhcmF0b3Igcygi
ICIpOwogICAgICAgICAgICAgdHMgPDwgIiBbc3Ryb2tlPXsiIDw8IHM7CiAgICAgICAgICAgICB3
cml0ZVNWR1BhaW50aW5nUmVzb3VyY2UodHMsIHN0cm9rZVBhaW50aW5nUmVzb3VyY2UpOwogCi0g
ICAgICAgICAgICBTVkdFbGVtZW50KiBlbGVtZW50ID0gc3RhdGljX2Nhc3Q8U1ZHRWxlbWVudCo+
KHBhdGgubm9kZSgpKTsKKyAgICAgICAgICAgIFNWR0VsZW1lbnQqIGVsZW1lbnQgPSBzdGF0aWNf
Y2FzdDxTVkdFbGVtZW50Kj4oc2hhcGUubm9kZSgpKTsKICAgICAgICAgICAgIGRvdWJsZSBkYXNo
T2Zmc2V0ID0gc3ZnU3R5bGUtPnN0cm9rZURhc2hPZmZzZXQoKS52YWx1ZShlbGVtZW50KTsKICAg
ICAgICAgICAgIGRvdWJsZSBzdHJva2VXaWR0aCA9IHN2Z1N0eWxlLT5zdHJva2VXaWR0aCgpLnZh
bHVlKGVsZW1lbnQpOwogICAgICAgICAgICAgY29uc3QgVmVjdG9yPFNWR0xlbmd0aD4mIGRhc2hl
cyA9IHN2Z1N0eWxlLT5zdHJva2VEYXNoQXJyYXkoKTsKQEAgLTMyMiw3ICszMjMsNyBAQCBzdGF0
aWMgdm9pZCB3cml0ZVN0eWxlKFRleHRTdHJlYW0mIHRzLCBjb25zdCBSZW5kZXJPYmplY3QmIG9i
amVjdCkKICAgICAgICAgICAgIHRzIDw8ICJ9XSI7CiAgICAgICAgIH0KIAotICAgICAgICBpZiAo
UmVuZGVyU1ZHUmVzb3VyY2UqIGZpbGxQYWludGluZ1Jlc291cmNlID0gUmVuZGVyU1ZHUmVzb3Vy
Y2U6OmZpbGxQYWludGluZ1Jlc291cmNlKGNvbnN0X2Nhc3Q8UmVuZGVyU1ZHUGF0aCo+KCZwYXRo
KSwgcGF0aC5zdHlsZSgpLCBmYWxsYmFja0NvbG9yKSkgeworICAgICAgICBpZiAoUmVuZGVyU1ZH
UmVzb3VyY2UqIGZpbGxQYWludGluZ1Jlc291cmNlID0gUmVuZGVyU1ZHUmVzb3VyY2U6OmZpbGxQ
YWludGluZ1Jlc291cmNlKGNvbnN0X2Nhc3Q8UmVuZGVyU1ZHU2hhcGUqPigmc2hhcGUpLCBzaGFw
ZS5zdHlsZSgpLCBmYWxsYmFja0NvbG9yKSkgewogICAgICAgICAgICAgVGV4dFN0cmVhbVNlcGFy
YXRvciBzKCIgIik7CiAgICAgICAgICAgICB0cyA8PCAiIFtmaWxsPXsiIDw8IHM7CiAgICAgICAg
ICAgICB3cml0ZVNWR1BhaW50aW5nUmVzb3VyY2UodHMsIGZpbGxQYWludGluZ1Jlc291cmNlKTsK
QEAgLTM0NiwxMiArMzQ3LDEyIEBAIHN0YXRpYyBUZXh0U3RyZWFtJiB3cml0ZVBvc2l0aW9uQW5k
U3R5bGUoVGV4dFN0cmVhbSYgdHMsIGNvbnN0IFJlbmRlck9iamVjdCYgb2JqCiAgICAgcmV0dXJu
IHRzOwogfQogCi1zdGF0aWMgVGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiB0cywg
Y29uc3QgUmVuZGVyU1ZHUGF0aCYgcGF0aCkKK3N0YXRpYyBUZXh0U3RyZWFtJiBvcGVyYXRvcjw8
KFRleHRTdHJlYW0mIHRzLCBjb25zdCBSZW5kZXJTVkdTaGFwZSYgc2hhcGUpCiB7Ci0gICAgd3Jp
dGVQb3NpdGlvbkFuZFN0eWxlKHRzLCBwYXRoKTsKKyAgICB3cml0ZVBvc2l0aW9uQW5kU3R5bGUo
dHMsIHNoYXBlKTsKIAotICAgIEFTU0VSVChwYXRoLm5vZGUoKS0+aXNTVkdFbGVtZW50KCkpOwot
ICAgIFNWR0VsZW1lbnQqIHN2Z0VsZW1lbnQgPSBzdGF0aWNfY2FzdDxTVkdFbGVtZW50Kj4ocGF0
aC5ub2RlKCkpOworICAgIEFTU0VSVChzaGFwZS5ub2RlKCktPmlzU1ZHRWxlbWVudCgpKTsKKyAg
ICBTVkdFbGVtZW50KiBzdmdFbGVtZW50ID0gc3RhdGljX2Nhc3Q8U1ZHRWxlbWVudCo+KHNoYXBl
Lm5vZGUoKSk7CiAKICAgICBpZiAoc3ZnRWxlbWVudC0+aGFzVGFnTmFtZShTVkdOYW1lczo6cmVj
dFRhZykpIHsKICAgICAgICAgU1ZHUmVjdEVsZW1lbnQqIGVsZW1lbnQgPSBzdGF0aWNfY2FzdDxT
VkdSZWN0RWxlbWVudCo+KHN2Z0VsZW1lbnQpOwpAQCAtNjUzLDExICs2NTQsMTEgQEAgdm9pZCB3
cml0ZVNWR0ltYWdlKFRleHRTdHJlYW0mIHRzLCBjb25zdCBSZW5kZXJTVkdJbWFnZSYgaW1hZ2Us
IGludCBpbmRlbnQpCiAgICAgd3JpdGVSZXNvdXJjZXModHMsIGltYWdlLCBpbmRlbnQpOwogfQog
Ci12b2lkIHdyaXRlKFRleHRTdHJlYW0mIHRzLCBjb25zdCBSZW5kZXJTVkdQYXRoJiBwYXRoLCBp
bnQgaW5kZW50KQordm9pZCB3cml0ZShUZXh0U3RyZWFtJiB0cywgY29uc3QgUmVuZGVyU1ZHU2hh
cGUmIHNoYXBlLCBpbnQgaW5kZW50KQogewotICAgIHdyaXRlU3RhbmRhcmRQcmVmaXgodHMsIHBh
dGgsIGluZGVudCk7Ci0gICAgdHMgPDwgcGF0aCA8PCAiXG4iOwotICAgIHdyaXRlUmVzb3VyY2Vz
KHRzLCBwYXRoLCBpbmRlbnQpOworICAgIHdyaXRlU3RhbmRhcmRQcmVmaXgodHMsIHNoYXBlLCBp
bmRlbnQpOworICAgIHRzIDw8IHNoYXBlIDw8ICJcbiI7CisgICAgd3JpdGVSZXNvdXJjZXModHMs
IHNoYXBlLCBpbmRlbnQpOwogfQogCiB2b2lkIHdyaXRlU1ZHR3JhZGllbnRTdG9wKFRleHRTdHJl
YW0mIHRzLCBjb25zdCBSZW5kZXJTVkdHcmFkaWVudFN0b3AmIHN0b3AsIGludCBpbmRlbnQpCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR1JlbmRlclRyZWVBc1Rl
eHQuaCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHUmVuZGVyVHJlZUFzVGV4dC5o
CmluZGV4IGNlMDdhNWMuLjM1OThjODMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9zdmcvU1ZHUmVuZGVyVHJlZUFzVGV4dC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9zdmcvU1ZHUmVuZGVyVHJlZUFzVGV4dC5oCkBAIC00MSwxNCArNDEsMTQgQEAgY2xhc3Mg
UmVuZGVySW1hZ2U7CiBjbGFzcyBSZW5kZXJPYmplY3Q7CiBjbGFzcyBSZW5kZXJTVkdHcmFkaWVu
dFN0b3A7CiBjbGFzcyBSZW5kZXJTVkdJbWFnZTsKLWNsYXNzIFJlbmRlclNWR1BhdGg7CitjbGFz
cyBSZW5kZXJTVkdTaGFwZTsKIGNsYXNzIFJlbmRlclNWR1Jvb3Q7CiBjbGFzcyBSZW5kZXJUZXh0
OwogY2xhc3MgQWZmaW5lVHJhbnNmb3JtOwogY2xhc3MgU1ZHVW5pdFR5cGVzOwogCiAvLyBmdW5j
dGlvbnMgdXNlZCBieSB0aGUgbWFpbiBSZW5kZXJUcmVlQXNUZXh0IGNvZGUKLXZvaWQgd3JpdGUo
VGV4dFN0cmVhbSYsIGNvbnN0IFJlbmRlclNWR1BhdGgmLCBpbnQgaW5kZW50KTsKK3ZvaWQgd3Jp
dGUoVGV4dFN0cmVhbSYsIGNvbnN0IFJlbmRlclNWR1NoYXBlJiwgaW50IGluZGVudCk7CiB2b2lk
IHdyaXRlKFRleHRTdHJlYW0mLCBjb25zdCBSZW5kZXJTVkdSb290JiwgaW50IGluZGVudCk7CiB2
b2lkIHdyaXRlU1ZHR3JhZGllbnRTdG9wKFRleHRTdHJlYW0mLCBjb25zdCBSZW5kZXJTVkdHcmFk
aWVudFN0b3AmLCBpbnQgaW5kZW50KTsKIHZvaWQgd3JpdGVTVkdSZXNvdXJjZUNvbnRhaW5lcihU
ZXh0U3RyZWFtJiwgY29uc3QgUmVuZGVyT2JqZWN0JiwgaW50IGluZGVudCk7CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR1RleHRSdW5SZW5kZXJpbmdDb250ZXh0
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHVGV4dFJ1blJlbmRlcmluZ0Nv
bnRleHQuY3BwCmluZGV4IDMzYWNmOTIuLjRmMWEyYjEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9zdmcvU1ZHVGV4dFJ1blJlbmRlcmluZ0NvbnRleHQuY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHVGV4dFJ1blJlbmRlcmluZ0NvbnRleHQuY3Bw
CkBAIC0xNjAsNyArMTYwLDcgQEAgdm9pZCBTVkdUZXh0UnVuUmVuZGVyaW5nQ29udGV4dDo6ZHJh
d1NWR0dseXBocyhHcmFwaGljc0NvbnRleHQqIGNvbnRleHQsIGNvbnN0IFQKICAgICAgICAgICAg
ICAgICBjb25zdCBSZW5kZXJTVkdJbmxpbmVUZXh0KiB0ZXh0UmVuZGVyZXIgPSB0b1JlbmRlclNW
R0lubGluZVRleHQocmVuZGVyT2JqZWN0KTsKICAgICAgICAgICAgICAgICBjb250ZXh0LT5zZXRT
dHJva2VUaGlja25lc3MoY29udGV4dC0+c3Ryb2tlVGhpY2tuZXNzKCkgKiB0ZXh0UmVuZGVyZXIt
PnNjYWxpbmdGYWN0b3IoKSk7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBhY3RpdmVQYWlu
dGluZ1Jlc291cmNlLT5wb3N0QXBwbHlSZXNvdXJjZShwYXJlbnRSZW5kZXJPYmplY3QsIGNvbnRl
eHQsIHJlc291cmNlTW9kZSwgJmdseXBoUGF0aCk7CisgICAgICAgICAgICBhY3RpdmVQYWludGlu
Z1Jlc291cmNlLT5wb3N0QXBwbHlSZXNvdXJjZShzdGF0aWNfY2FzdDxSZW5kZXJTVkdTaGFwZSo+
KHBhcmVudFJlbmRlck9iamVjdCksIGNvbnRleHQsIHJlc291cmNlTW9kZSwgJmdseXBoUGF0aCk7
CiAgICAgICAgICB9CiAgCiAgICAgICAgIGNvbnRleHQtPnJlc3RvcmUoKTsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdDaXJjbGVFbGVtZW50LmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L3N2Zy9TVkdDaXJjbGVFbGVtZW50LmNwcAppbmRleCAyYWU2OWI4Li4wMzY2OWUwIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHQ2lyY2xlRWxlbWVudC5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUvc3ZnL1NWR0NpcmNsZUVsZW1lbnQuY3BwCkBAIC0xMjQsNyArMTI0LDcgQEAgdm9p
ZCBTVkdDaXJjbGVFbGVtZW50OjpzdmdBdHRyaWJ1dGVDaGFuZ2VkKGNvbnN0IFF1YWxpZmllZE5h
bWUmIGF0dHJOYW1lKQogICAgICAgICByZXR1cm47CiAKICAgICBpZiAoaXNMZW5ndGhBdHRyaWJ1
dGUpIHsKLSAgICAgICAgcmVuZGVyZXItPnNldE5lZWRzUGF0aFVwZGF0ZSgpOworICAgICAgICBy
ZW5kZXJlci0+c2V0TmVlZHNTaGFwZVVwZGF0ZSgpOwogICAgICAgICBSZW5kZXJTVkdSZXNvdXJj
ZTo6bWFya0ZvckxheW91dEFuZFBhcmVudFJlc291cmNlSW52YWxpZGF0aW9uKHJlbmRlcmVyKTsK
ICAgICAgICAgcmV0dXJuOwogICAgIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9T
VkdFbGxpcHNlRWxlbWVudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRWxsaXBzZUVsZW1l
bnQuY3BwCmluZGV4IGNlYTA2NmQuLmNhMDE3YzQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3N2Zy9TVkdFbGxpcHNlRWxlbWVudC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0Vs
bGlwc2VFbGVtZW50LmNwcApAQCAtMTI5LDcgKzEyOSw3IEBAIHZvaWQgU1ZHRWxsaXBzZUVsZW1l
bnQ6OnN2Z0F0dHJpYnV0ZUNoYW5nZWQoY29uc3QgUXVhbGlmaWVkTmFtZSYgYXR0ck5hbWUpCiAg
ICAgICAgIHJldHVybjsKIAogICAgIGlmIChpc0xlbmd0aEF0dHJpYnV0ZSkgewotICAgICAgICBy
ZW5kZXJlci0+c2V0TmVlZHNQYXRoVXBkYXRlKCk7CisgICAgICAgIHJlbmRlcmVyLT5zZXROZWVk
c1NoYXBlVXBkYXRlKCk7CiAgICAgICAgIFJlbmRlclNWR1Jlc291cmNlOjptYXJrRm9yTGF5b3V0
QW5kUGFyZW50UmVzb3VyY2VJbnZhbGlkYXRpb24ocmVuZGVyZXIpOwogICAgICAgICByZXR1cm47
CiAgICAgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0xpbmVFbGVtZW50LmNw
cCBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdMaW5lRWxlbWVudC5jcHAKaW5kZXggYzdjYTExZS4u
YjFiYjhlYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0xpbmVFbGVtZW50LmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHTGluZUVsZW1lbnQuY3BwCkBAIC0xMjksNyAr
MTI5LDcgQEAgdm9pZCBTVkdMaW5lRWxlbWVudDo6c3ZnQXR0cmlidXRlQ2hhbmdlZChjb25zdCBR
dWFsaWZpZWROYW1lJiBhdHRyTmFtZSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgaWYgKGlzTGVu
Z3RoQXR0cmlidXRlKSB7Ci0gICAgICAgIHJlbmRlcmVyLT5zZXROZWVkc1BhdGhVcGRhdGUoKTsK
KyAgICAgICAgcmVuZGVyZXItPnNldE5lZWRzU2hhcGVVcGRhdGUoKTsKICAgICAgICAgUmVuZGVy
U1ZHUmVzb3VyY2U6Om1hcmtGb3JMYXlvdXRBbmRQYXJlbnRSZXNvdXJjZUludmFsaWRhdGlvbihy
ZW5kZXJlcik7CiAgICAgICAgIHJldHVybjsKICAgICB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9zdmcvU1ZHUGF0aEVsZW1lbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvc3ZnL1NWR1BhdGhF
bGVtZW50LmNwcAppbmRleCBhN2EzMzdlLi5mZTMzNTk1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9zdmcvU1ZHUGF0aEVsZW1lbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdQ
YXRoRWxlbWVudC5jcHAKQEAgLTI2OSw3ICsyNjksNyBAQCB2b2lkIFNWR1BhdGhFbGVtZW50Ojpz
dmdBdHRyaWJ1dGVDaGFuZ2VkKGNvbnN0IFF1YWxpZmllZE5hbWUmIGF0dHJOYW1lKQogICAgICAg
ICB9CiAKICAgICAgICAgaWYgKHJlbmRlcmVyKQotICAgICAgICAgICAgcmVuZGVyZXItPnNldE5l
ZWRzUGF0aFVwZGF0ZSgpOworICAgICAgICAgICAgcmVuZGVyZXItPnNldE5lZWRzU2hhcGVVcGRh
dGUoKTsKICAgICB9CiAKICAgICBpZiAocmVuZGVyZXIpCkBAIC0zNTUsMTAgKzM1NSwxNiBAQCB2
b2lkIFNWR1BhdGhFbGVtZW50OjpwYXRoU2VnTGlzdENoYW5nZWQoU1ZHUGF0aFNlZ1JvbGUgcm9s
ZSkKICAgICBpZiAoIXJlbmRlcmVyKQogICAgICAgICByZXR1cm47CiAKLSAgICByZW5kZXJlci0+
c2V0TmVlZHNQYXRoVXBkYXRlKCk7CisgICAgcmVuZGVyZXItPnNldE5lZWRzU2hhcGVVcGRhdGUo
KTsKICAgICBSZW5kZXJTVkdSZXNvdXJjZTo6bWFya0ZvckxheW91dEFuZFBhcmVudFJlc291cmNl
SW52YWxpZGF0aW9uKHJlbmRlcmVyKTsKIH0KIAorUmVuZGVyT2JqZWN0KiBTVkdQYXRoRWxlbWVu
dDo6Y3JlYXRlUmVuZGVyZXIoUmVuZGVyQXJlbmEqIGFyZW5hLCBSZW5kZXJTdHlsZSopCit7Cisg
ICAgLy8gQnkgZGVmYXVsdCwgYW55IHN1YmNsYXNzIGlzIGV4cGVjdGVkIHRvIGRvIHBhdGgtYmFz
ZWQgZHJhd2luZworICAgIHJldHVybiBuZXcgKGFyZW5hKSBSZW5kZXJTVkdQYXRoKHRoaXMpOwor
fQorCiB9CiAKICNlbmRpZiAvLyBFTkFCTEUoU1ZHKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvc3ZnL1NWR1BhdGhFbGVtZW50LmggYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHUGF0aEVsZW1l
bnQuaAppbmRleCAxZDM3ZDBlLi41NGI4ZmUyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9z
dmcvU1ZHUGF0aEVsZW1lbnQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHUGF0aEVsZW1l
bnQuaApAQCAtMTIyLDYgKzEyMiw4IEBAIHByaXZhdGU6CiAgICAgdmlydHVhbCB2b2lkIHN5bmNo
cm9uaXplUmVxdWlyZWRFeHRlbnNpb25zKCkgeyBTVkdUZXN0czo6c3luY2hyb25pemVSZXF1aXJl
ZEV4dGVuc2lvbnModGhpcyk7IH0KICAgICB2aXJ0dWFsIHZvaWQgc3luY2hyb25pemVTeXN0ZW1M
YW5ndWFnZSgpIHsgU1ZHVGVzdHM6OnN5bmNocm9uaXplU3lzdGVtTGFuZ3VhZ2UodGhpcyk7IH0K
IAorICAgIFJlbmRlck9iamVjdCogY3JlYXRlUmVuZGVyZXIoUmVuZGVyQXJlbmEqLCBSZW5kZXJT
dHlsZSopOworCiBwcml2YXRlOgogICAgIE93blB0cjxTVkdQYXRoQnl0ZVN0cmVhbT4gbV9wYXRo
Qnl0ZVN0cmVhbTsKICAgICBtdXRhYmxlIFNWR1N5bmNocm9uaXphYmxlQW5pbWF0ZWRQcm9wZXJ0
eTxTVkdQYXRoU2VnTGlzdD4gbV9wYXRoU2VnTGlzdDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3N2Zy9TVkdQb2x5RWxlbWVudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHUG9seUVs
ZW1lbnQuY3BwCmluZGV4IDYxNmI4NjcuLmYzMGNhNGEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3N2Zy9TVkdQb2x5RWxlbWVudC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvc3ZnL1NWR1Bv
bHlFbGVtZW50LmNwcApAQCAtMTI0LDcgKzEyNCw3IEBAIHZvaWQgU1ZHUG9seUVsZW1lbnQ6OnN2
Z0F0dHJpYnV0ZUNoYW5nZWQoY29uc3QgUXVhbGlmaWVkTmFtZSYgYXR0ck5hbWUpCiAgICAgICAg
IHJldHVybjsKIAogICAgIGlmIChhdHRyTmFtZSA9PSBTVkdOYW1lczo6cG9pbnRzQXR0cikgewot
ICAgICAgICByZW5kZXJlci0+c2V0TmVlZHNQYXRoVXBkYXRlKCk7CisgICAgICAgIHJlbmRlcmVy
LT5zZXROZWVkc1NoYXBlVXBkYXRlKCk7CiAgICAgICAgIFJlbmRlclNWR1Jlc291cmNlOjptYXJr
Rm9yTGF5b3V0QW5kUGFyZW50UmVzb3VyY2VJbnZhbGlkYXRpb24ocmVuZGVyZXIpOwogICAgICAg
ICByZXR1cm47CiAgICAgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvc3ZnL1NWR1JlY3RF
bGVtZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdSZWN0RWxlbWVudC5jcHAKaW5kZXgg
ZTg0Nzc0ZC4uMTg3OWUwYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvc3ZnL1NWR1JlY3RF
bGVtZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHUmVjdEVsZW1lbnQuY3BwCkBA
IC0yNSw2ICsyNSw3IEBACiAKICNpbmNsdWRlICJBdHRyaWJ1dGUuaCIKICNpbmNsdWRlICJSZW5k
ZXJTVkdQYXRoLmgiCisjaW5jbHVkZSAiUmVuZGVyU1ZHUmVjdC5oIgogI2luY2x1ZGUgIlJlbmRl
clNWR1Jlc291cmNlLmgiCiAjaW5jbHVkZSAiU1ZHRWxlbWVudEluc3RhbmNlLmgiCiAjaW5jbHVk
ZSAiU1ZHTGVuZ3RoLmgiCkBAIC0zMiw2ICszMyw4IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsK
IAorY2xhc3MgUmVuZGVyU1ZHUmVjdDsKKwogLy8gQW5pbWF0ZWQgcHJvcGVydHkgZGVmaW5pdGlv
bnMKIERFRklORV9BTklNQVRFRF9MRU5HVEgoU1ZHUmVjdEVsZW1lbnQsIFNWR05hbWVzOjp4QXR0
ciwgWCwgeCkKIERFRklORV9BTklNQVRFRF9MRU5HVEgoU1ZHUmVjdEVsZW1lbnQsIFNWR05hbWVz
Ojp5QXR0ciwgWSwgeSkKQEAgLTEzNywxMiArMTQwLDEyIEBAIHZvaWQgU1ZHUmVjdEVsZW1lbnQ6
OnN2Z0F0dHJpYnV0ZUNoYW5nZWQoY29uc3QgUXVhbGlmaWVkTmFtZSYgYXR0ck5hbWUpCiAgICAg
aWYgKFNWR1Rlc3RzOjpoYW5kbGVBdHRyaWJ1dGVDaGFuZ2UodGhpcywgYXR0ck5hbWUpKQogICAg
ICAgICByZXR1cm47CiAKLSAgICBSZW5kZXJTVkdQYXRoKiByZW5kZXJlciA9IHN0YXRpY19jYXN0
PFJlbmRlclNWR1BhdGgqPih0aGlzLT5yZW5kZXJlcigpKTsKKyAgICBSZW5kZXJTVkdSZWN0KiBy
ZW5kZXJlciA9IHN0YXRpY19jYXN0PFJlbmRlclNWR1JlY3QqPih0aGlzLT5yZW5kZXJlcigpKTsK
ICAgICBpZiAoIXJlbmRlcmVyKQogICAgICAgICByZXR1cm47CiAKICAgICBpZiAoaXNMZW5ndGhB
dHRyaWJ1dGUpIHsKLSAgICAgICAgcmVuZGVyZXItPnNldE5lZWRzUGF0aFVwZGF0ZSgpOworICAg
ICAgICByZW5kZXJlci0+c2V0TmVlZHNTaGFwZVVwZGF0ZSgpOwogICAgICAgICBSZW5kZXJTVkdS
ZXNvdXJjZTo6bWFya0ZvckxheW91dEFuZFBhcmVudFJlc291cmNlSW52YWxpZGF0aW9uKHJlbmRl
cmVyKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KQEAgLTE5OCw2ICsyMDEsMTEgQEAgYm9vbCBT
VkdSZWN0RWxlbWVudDo6c2VsZkhhc1JlbGF0aXZlTGVuZ3RocygpIGNvbnN0CiAgICAgICAgIHx8
IHJ5KCkuaXNSZWxhdGl2ZSgpOwogfQogCitSZW5kZXJPYmplY3QqIFNWR1JlY3RFbGVtZW50Ojpj
cmVhdGVSZW5kZXJlcihSZW5kZXJBcmVuYSogYXJlbmEsIFJlbmRlclN0eWxlKikKK3sKKyAgICBy
ZXR1cm4gbmV3IChhcmVuYSkgUmVuZGVyU1ZHUmVjdCh0aGlzKTsKK30KKwogfQogCiAjZW5kaWYg
Ly8gRU5BQkxFKFNWRykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdSZWN0RWxl
bWVudC5oIGIvU291cmNlL1dlYkNvcmUvc3ZnL1NWR1JlY3RFbGVtZW50LmgKaW5kZXggOTk0Mzdm
My4uOWJmNjAyZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvc3ZnL1NWR1JlY3RFbGVtZW50
LmgKKysrIGIvU291cmNlL1dlYkNvcmUvc3ZnL1NWR1JlY3RFbGVtZW50LmgKQEAgLTUyLDYgKzUy
LDggQEAgcHJpdmF0ZToKIAogICAgIHZpcnR1YWwgYm9vbCBzZWxmSGFzUmVsYXRpdmVMZW5ndGhz
KCkgY29uc3Q7CiAKKyAgICBSZW5kZXJPYmplY3QqIGNyZWF0ZVJlbmRlcmVyKFJlbmRlckFyZW5h
KiwgUmVuZGVyU3R5bGUqKTsKKwogICAgIEJFR0lOX0RFQ0xBUkVfQU5JTUFURURfUFJPUEVSVElF
UyhTVkdSZWN0RWxlbWVudCkKICAgICAgICAgREVDTEFSRV9BTklNQVRFRF9MRU5HVEgoWCwgeCkK
ICAgICAgICAgREVDTEFSRV9BTklNQVRFRF9MRU5HVEgoWSwgeSkKLS0gCjEuNy41LjQKCg==
</data>
<flag name="review"
          id="103624"
          type_id="1"
          status="-"
          setter="zimmermann"
    />
    <flag name="commit-queue"
          id="103625"
          type_id="3"
          status="-"
          setter="rhodovan.u-szeged"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>107330</attachid>
            <date>2011-09-14 07:09:19 -0700</date>
            <delta_ts>2011-09-14 07:53:28 -0700</delta_ts>
            <desc>Propsed patch</desc>
            <filename>0001-nikooo.patch</filename>
            <type>text/plain</type>
            <size>106505</size>
            <attacher name="Renata Hodovan">rhodovan.u-szeged</attacher>
            
              <data encoding="base64">RnJvbSA0YWY0MDIxODdmN2QwOTk5NWZlNzRhMzNkNmJiN2UyNWNkNTQwODFlIE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBSZW5hdGEgSG9kb3ZhbiA8cmVuaUB3ZWJraXQub3JnPgpEYXRl
OiBXZWQsIDE0IFNlcCAyMDExIDE2OjAzOjQ1ICswMjAwClN1YmplY3Q6IFtQQVRDSF0gbmlrb29v
CgotLS0KIExheW91dFRlc3RzL0NoYW5nZUxvZyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHwgICAxNCArCiAuLi4vcG9pbnRlci1ldmVudHMtb24tcm91bmRlZC1yZWN0LWV4cGVjdGVkLnR4
dCAgICB8ICAgIDMgKwogLi4uL3N2Zy9jdXN0b20vcG9pbnRlci1ldmVudHMtb24tcm91bmRlZC1y
ZWN0LnN2ZyAgfCAgIDY2ICsrKwogLi4uZW50cy13aXRoLWxpbmVjYXBzLWFuZC1taXRlcmxpbWl0
cy1leHBlY3RlZC50eHQgfCAgICAzICsKIC4uLm9pbnRlci1ldmVudHMtd2l0aC1saW5lY2Fwcy1h
bmQtbWl0ZXJsaW1pdHMuc3ZnIHwgICA2NSArKysKIFNvdXJjZS9XZWJDb3JlL0NNYWtlTGlzdHMu
dHh0ICAgICAgICAgICAgICAgICAgICAgIHwgICAgMiArCiBTb3VyY2UvV2ViQ29yZS9DaGFuZ2VM
b2cgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAxNTUgKysrKysrKwogU291cmNlL1dlYkNv
cmUvR05VbWFrZWZpbGUubGlzdC5hbSAgICAgICAgICAgICAgICAgfCAgICA0ICsKIFNvdXJjZS9X
ZWJDb3JlL1dlYkNvcmUuZ3lwaSAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgNCArCiBTb3Vy
Y2UvV2ViQ29yZS9XZWJDb3JlLnBybyAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgIDQgKwog
U291cmNlL1dlYkNvcmUvV2ViQ29yZS52Y3Byb2ovV2ViQ29yZS52Y3Byb2ogICAgICAgfCAgMTEy
ICsrKysrCiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9GbG9hdFJlY3QuY3BwICAg
ICB8ICAgIDcgKwogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRmxvYXRSZWN0Lmgg
ICAgICAgfCAgICAxICsKIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJPYmplY3QuaCAg
ICAgICAgICAgIHwgICAgMiArCiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVHJlZUFz
VGV4dC5jcHAgICAgICB8ICAgIDQgKy0KIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVu
ZGVyU1ZHQWxsSW5PbmUuY3BwIHwgICAgMiArCiAuLi4vV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1Jl
bmRlclNWR01vZGVsT2JqZWN0LmNwcCB8ICAgIDIgKy0KIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9zdmcvUmVuZGVyU1ZHUGF0aC5jcHAgICAgIHwgIDM1NSArLS0tLS0tLS0tLS0tLS0tLQogU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdQYXRoLmggICAgICAgfCAgIDc0ICst
LS0KIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVjdC5jcHAgICAgIHwg
IDExNiArKysrKysKIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVjdC5o
ICAgICAgIHwgICA2MyArKysKIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZH
UmVzb3VyY2UuaCAgIHwgICAgMyArLQogLi4uL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVzb3Vy
Y2VDbGlwcGVyLmNwcCAgICAgfCAgICA2ICstCiAuLi4vcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdS
ZXNvdXJjZUNvbnRhaW5lci5jcHAgICB8ICAgIDIgKy0KIC4uLi9yZW5kZXJpbmcvc3ZnL1JlbmRl
clNWR1Jlc291cmNlRmlsdGVyLmNwcCAgICAgIHwgICAgNSArLQogLi4uL3JlbmRlcmluZy9zdmcv
UmVuZGVyU1ZHUmVzb3VyY2VGaWx0ZXIuaCAgICAgICAgfCAgICAyICstCiAuLi4vcmVuZGVyaW5n
L3N2Zy9SZW5kZXJTVkdSZXNvdXJjZUdyYWRpZW50LmNwcCAgICB8ICAgMjAgKy0KIC4uLi9yZW5k
ZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291cmNlR3JhZGllbnQuaCAgICAgIHwgICAgMiArLQogLi4u
L3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VQYXR0ZXJuLmNwcCAgICAgfCAgIDEzICst
CiAuLi4vcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJjZVBhdHRlcm4uaCAgICAgICB8ICAg
IDIgKy0KIC4uLi9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291cmNlU29saWRDb2xvci5jcHAg
IHwgICAxNCArLQogLi4uL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VTb2xpZENvbG9y
LmggICAgfCAgICAyICstCiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1No
YXBlLmNwcCAgICB8ICA0MzIgKysrKysrKysrKysrKysrKysrKysKIFNvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9zdmcvUmVuZGVyU1ZHU2hhcGUuaCAgICAgIHwgIDE1OSArKysrKysrCiBTb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR0lubGluZVRleHRCb3guY3BwICB8ICAgIDQgKy0KIFNv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHUmVuZGVyU3VwcG9ydC5jcHAgIHwgICAgOCAr
LQogLi4uL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdSZW5kZXJUcmVlQXNUZXh0LmNwcCAgfCAg
IDMxICstCiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR1JlbmRlclRyZWVBc1RleHQu
aCB8ICAgIDQgKy0KIC4uLi9yZW5kZXJpbmcvc3ZnL1NWR1RleHRSdW5SZW5kZXJpbmdDb250ZXh0
LmNwcCAgIHwgICAgNCArLQogU291cmNlL1dlYkNvcmUvc3ZnL1NWR0NpcmNsZUVsZW1lbnQuY3Bw
ICAgICAgICAgICAgfCAgICAyICstCiBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRWxsaXBzZUVsZW1l
bnQuY3BwICAgICAgICAgICB8ICAgIDIgKy0KIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdMaW5lRWxl
bWVudC5jcHAgICAgICAgICAgICAgIHwgICAgMiArLQogU291cmNlL1dlYkNvcmUvc3ZnL1NWR1Bh
dGhFbGVtZW50LmNwcCAgICAgICAgICAgICAgfCAgIDEwICstCiBTb3VyY2UvV2ViQ29yZS9zdmcv
U1ZHUGF0aEVsZW1lbnQuaCAgICAgICAgICAgICAgICB8ICAgIDIgKwogU291cmNlL1dlYkNvcmUv
c3ZnL1NWR1BvbHlFbGVtZW50LmNwcCAgICAgICAgICAgICAgfCAgICAyICstCiBTb3VyY2UvV2Vi
Q29yZS9zdmcvU1ZHUmVjdEVsZW1lbnQuY3BwICAgICAgICAgICAgICB8ICAgMTIgKy0KIFNvdXJj
ZS9XZWJDb3JlL3N2Zy9TVkdSZWN0RWxlbWVudC5oICAgICAgICAgICAgICAgIHwgICAgMiArCiA0
OCBmaWxlcyBjaGFuZ2VkLCAxMzQyIGluc2VydGlvbnMoKyksIDQ3NSBkZWxldGlvbnMoLSkKIGNy
ZWF0ZSBtb2RlIDEwMDY0NCBMYXlvdXRUZXN0cy9zdmcvY3VzdG9tL3BvaW50ZXItZXZlbnRzLW9u
LXJvdW5kZWQtcmVjdC1leHBlY3RlZC50eHQKIGNyZWF0ZSBtb2RlIDEwMDY0NCBMYXlvdXRUZXN0
cy9zdmcvY3VzdG9tL3BvaW50ZXItZXZlbnRzLW9uLXJvdW5kZWQtcmVjdC5zdmcKIGNyZWF0ZSBt
b2RlIDEwMDY0NCBMYXlvdXRUZXN0cy9zdmcvY3VzdG9tL3BvaW50ZXItZXZlbnRzLXdpdGgtbGlu
ZWNhcHMtYW5kLW1pdGVybGltaXRzLWV4cGVjdGVkLnR4dAogY3JlYXRlIG1vZGUgMTAwNjQ0IExh
eW91dFRlc3RzL3N2Zy9jdXN0b20vcG9pbnRlci1ldmVudHMtd2l0aC1saW5lY2Fwcy1hbmQtbWl0
ZXJsaW1pdHMuc3ZnCiBjcmVhdGUgbW9kZSAxMDA2NDQgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L3N2Zy9SZW5kZXJTVkdSZWN0LmNwcAogY3JlYXRlIG1vZGUgMTAwNjQ0IFNvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVjdC5oCiBjcmVhdGUgbW9kZSAxMDA2NDQgU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdTaGFwZS5jcHAKIGNyZWF0ZSBtb2RlIDEw
MDY0NCBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1NoYXBlLmgKCmRpZmYg
LS1naXQgYS9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cgYi9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKaW5k
ZXggOWI0NzAxMy4uNTkxODBkMCAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCisr
KyBiL0xheW91dFRlc3RzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE3IEBACisyMDExLTA5LTE0ICBS
ZW5hdGEgSG9kb3ZhbiAgPHJlbmlAd2Via2l0Lm9yZz4KKworICAgICAgICBOZXcgcmVuZGVyZXIg
Zm9yIFNWR1JlY3RFbGVtZW50CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD02NTc2OQorCisgICAgICAgIEFkZCBuZXcgdGVzdHMgdG8gY2hlY2sgdGhlIG5l
dyBzaGFwZSBiYXNlZCByZW5kZXJpbmcgbWVjaGFuaXNtIG9mIFNWR1JlY3RFbGVtZW50LgorCisg
ICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogc3ZnL2N1c3Rv
bS9wb2ludGVyLWV2ZW50cy1vbi1yb3VuZGVkLXJlY3QtZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAg
ICAgICAgKiBzdmcvY3VzdG9tL3BvaW50ZXItZXZlbnRzLW9uLXJvdW5kZWQtcmVjdC5zdmc6IEFk
ZGVkLgorICAgICAgICAqIHN2Zy9jdXN0b20vcG9pbnRlci1ldmVudHMtd2l0aC1saW5lY2Fwcy1h
bmQtbWl0ZXJsaW1pdHMtZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAgICAgKiBzdmcvY3VzdG9t
L3BvaW50ZXItZXZlbnRzLXdpdGgtbGluZWNhcHMtYW5kLW1pdGVybGltaXRzLnN2ZzogQWRkZWQu
CisKIDIwMTEtMDktMDggIE9saXZlciBWYXJnYSAgPHZvbGl2ZXJAaW5mLnUtc3plZ2VkLmh1Pgog
CiAgICAgICAgIEdhcmRlbmluZzogYWRkIG1pc3NpbmcgcmVzdWx0IGFmdGVyOiByOTQ3MTAuCmRp
ZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9zdmcvY3VzdG9tL3BvaW50ZXItZXZlbnRzLW9uLXJvdW5k
ZWQtcmVjdC1leHBlY3RlZC50eHQgYi9MYXlvdXRUZXN0cy9zdmcvY3VzdG9tL3BvaW50ZXItZXZl
bnRzLW9uLXJvdW5kZWQtcmVjdC1leHBlY3RlZC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMDAwMDAwMC4uZGIwMGRmMgotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL3N2Zy9j
dXN0b20vcG9pbnRlci1ldmVudHMtb24tcm91bmRlZC1yZWN0LWV4cGVjdGVkLnR4dApAQCAtMCww
ICsxLDMgQEAKK1BBU1NFRDogZmFsbGJhY2tSZWN0IGhhZCBwb2ludGVyCisKKwpkaWZmIC0tZ2l0
IGEvTGF5b3V0VGVzdHMvc3ZnL2N1c3RvbS9wb2ludGVyLWV2ZW50cy1vbi1yb3VuZGVkLXJlY3Qu
c3ZnIGIvTGF5b3V0VGVzdHMvc3ZnL2N1c3RvbS9wb2ludGVyLWV2ZW50cy1vbi1yb3VuZGVkLXJl
Y3Quc3ZnCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZhNzE1YTAKLS0tIC9k
ZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9zdmcvY3VzdG9tL3BvaW50ZXItZXZlbnRzLW9uLXJv
dW5kZWQtcmVjdC5zdmcKQEAgLTAsMCArMSw2NiBAQAorPGh0bWwgeG1sbnM9J2h0dHA6Ly93d3cu
dzMub3JnLzE5OTkveGh0bWwnPgorPGJvZHkgc3R5bGU9Im1hcmdpbjogMHB4OyBwYWRkaW5nOiAw
cHgiPgorPHA+PC9wPgorCis8c3ZnIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIg
c3R5bGU9InBvc2l0aW9uOmFic29sdXRlOyI+Cis8ZGVmcz4KKworPHN0eWxlIHR5cGU9InRleHQv
Y3NzIj48IVtDREFUQVsKK3JlY3Qjcm91bmRlZFJlY3QgeworCWZpbGw6IG5vbmU7CisJc3Ryb2tl
OiBncmVlbjsKKwlzdHJva2Utd2lkdGg6IDIwcHg7CisJc3Ryb2tlLWxpbmVqb2luOiBiZXZlbDsK
K30KK3JlY3Q6aG92ZXIgeworCXN0cm9rZTogcmVkOworfSAKK11dPjwvc3R5bGU+Cis8L2RlZnM+
CisKKzxyZWN0IGlkPSJmYWxsYmFjayIgeD0iMzAiIHk9IjMwIiB3aWR0aD0iNDIwIiBoZWlnaHQ9
IjMyMCIgZmlsbD0ieWVsbG93IiBvbmNsaWNrPSJwYXNzZWQoKSIvPgorPHJlY3QgaWQ9InJvdW5k
ZWRSZWN0IiB4PSI0MCIgeT0iNDAiIHJ4PSIzMCIgcnk9IjMwIiB3aWR0aD0iNDAwIiBoZWlnaHQ9
IjMwMCIgcG9pbnRlci1ldmVudHM9InZpc2libGVTdHJva2UiIG9uY2xpY2s9ImZhaWxlZCgpIi8+
CisKKzxzY3JpcHQgdHlwZT0idGV4dC9lY21hc2NyaXB0Ij4KKyAgICA8IVtDREFUQVsKKwordmFy
IGZhbGxiYWNrID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImZhbGxiYWNrIik7Cit2YXIgcm91
bmRlZFJlY3QgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgicm91bmRlZFJlY3QiKTsKK3ZhciBw
ID0gZG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoInAiKVswXTsKKworZmFsbGJhY2suYWRk
RXZlbnRMaXN0ZW5lcigibW91c2Vkb3duIiwgcGFzc2VkLCBmYWxzZSk7Cityb3VuZGVkUmVjdC5h
ZGRFdmVudExpc3RlbmVyKCJtb3VzZWRvd24iLCBmYWlsZWQsIGZhbHNlKTsKKworZnVuY3Rpb24g
c3RvcCgpIHsKKyAgICBmYWxsYmFjay5yZW1vdmVFdmVudExpc3RlbmVyKCJtb3VzZWRvd24iLCBm
YWlsZWQsIGZhbHNlKTsKKyAgICByb3VuZGVkUmVjdC5yZW1vdmVFdmVudExpc3RlbmVyKCJtb3Vz
ZWRvd24iLCBwYXNzZWQsIGZhbHNlKTsKKworICAgIGlmICh3aW5kb3cubGF5b3V0VGVzdENvbnRy
b2xsZXIpCisgICAgICAgIGxheW91dFRlc3RDb250cm9sbGVyLm5vdGlmeURvbmUoKTsKK30KKyAg
ICAKK2Z1bmN0aW9uIGZhaWxlZCgpIHsKKyAgICBwLmlubmVySFRNTCA9ICdGQUlMRUQ6IHN0cm9r
ZVJlY3QgaGFkIHBvaW50ZXInOworICAgIHN0b3AoKTsKK30KKworZnVuY3Rpb24gcGFzc2VkKCkg
eworICAgIHAuaW5uZXJIVE1MID0gJ1BBU1NFRDogZmFsbGJhY2tSZWN0IGhhZCBwb2ludGVyJzsK
KyAgICBzdG9wKCk7Cit9CisKK2lmICh3aW5kb3cubGF5b3V0VGVzdENvbnRyb2xsZXIpIHsKKyAg
ICBsYXlvdXRUZXN0Q29udHJvbGxlci53YWl0VW50aWxEb25lKCk7CisgICAgbGF5b3V0VGVzdENv
bnRyb2xsZXIuZHVtcEFzVGV4dCgpOworfQorCitpZiAod2luZG93LmV2ZW50U2VuZGVyKSB7Cisg
ICAgZXZlbnRTZW5kZXIubW91c2VNb3ZlVG8oNTAsIDUwKTsKKyAgICBldmVudFNlbmRlci5tb3Vz
ZURvd24oKTsKK30KK11dPgorICA8L3NjcmlwdD4KKworPC9zdmc+Cis8L2JvZHk+Cis8L2h0bWw+
CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9zdmcvY3VzdG9tL3BvaW50ZXItZXZlbnRzLXdpdGgt
bGluZWNhcHMtYW5kLW1pdGVybGltaXRzLWV4cGVjdGVkLnR4dCBiL0xheW91dFRlc3RzL3N2Zy9j
dXN0b20vcG9pbnRlci1ldmVudHMtd2l0aC1saW5lY2Fwcy1hbmQtbWl0ZXJsaW1pdHMtZXhwZWN0
ZWQudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdhZmRjN2QKLS0tIC9k
ZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9zdmcvY3VzdG9tL3BvaW50ZXItZXZlbnRzLXdpdGgt
bGluZWNhcHMtYW5kLW1pdGVybGltaXRzLWV4cGVjdGVkLnR4dApAQCAtMCwwICsxLDMgQEAKK0ZB
SUxFRDogc3Ryb2tlUmVjdCBoYWQgcG9pbnRlcgorCisKZGlmZiAtLWdpdCBhL0xheW91dFRlc3Rz
L3N2Zy9jdXN0b20vcG9pbnRlci1ldmVudHMtd2l0aC1saW5lY2Fwcy1hbmQtbWl0ZXJsaW1pdHMu
c3ZnIGIvTGF5b3V0VGVzdHMvc3ZnL2N1c3RvbS9wb2ludGVyLWV2ZW50cy13aXRoLWxpbmVjYXBz
LWFuZC1taXRlcmxpbWl0cy5zdmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4u
MjNjNjViZQotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL3N2Zy9jdXN0b20vcG9pbnRl
ci1ldmVudHMtd2l0aC1saW5lY2Fwcy1hbmQtbWl0ZXJsaW1pdHMuc3ZnCkBAIC0wLDAgKzEsNjUg
QEAKKzxodG1sIHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sJz4KKzxib2R5IHN0
eWxlPSJtYXJnaW46IDBweDsgcGFkZGluZzogMHB4Ij4KKzxwPjwvcD4KKworPHN2ZyB4bWxucz0i
aHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHN0eWxlPSJwb3NpdGlvbjphYnNvbHV0ZTsiPgor
PGRlZnM+CisKKzxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+PCFbQ0RBVEFbCityZWN0I3N0cm9rZWRS
ZWN0IHsKKwlzdHJva2U6IGJsdWU7CisJc3Ryb2tlLXdpZHRoOiAyMHB4OworCXN0cm9rZS1saW5l
Y2FwOiByb3VuZDsKKwlzdHJva2UtbWl0ZXJsaW1pdDogMTsKK30gCityZWN0I3N0cm9rZWRSZWN0
OmhvdmVyIHsKKwlzdHJva2U6IHJlZDsKK30KK11dPjwvc3R5bGU+Cis8L2RlZnM+CisKKzxyZWN0
IGlkPSJmYWxsYmFjayIgeD0iMCIgeT0iMCIgd2lkdGg9IjIxMCIgaGVpZ2h0PSIyMTAiIGZpbGw9
ImdyZWVuIiBvbmNsaWNrPSJwYXNzZWQoKSIvPgorPHJlY3QgaWQ9InN0cm9rZWRSZWN0IiB4PSIx
MCIgeT0iMTAiIHdpZHRoPSIxOTAiIGhlaWdodD0iMTkwIiBmaWxsPSJub25lIiBzdHJva2Utd2lk
dGg9IjEwIiBwb2ludGVyLWV2ZW50cz0idmlzaWJsZVN0cm9rZSIgb25jbGljaz0iZmFpbGVkKCki
Lz4gCisKKzxzY3JpcHQgdHlwZT0idGV4dC9lY21hc2NyaXB0Ij4KKyAgICA8IVtDREFUQVsKKwor
dmFyIGZhbGxiYWNrID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImZhbGxiYWNrIik7Cit2YXIg
c3Ryb2tlZFJlY3QgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgic3Ryb2tlZFJlY3QiKTsKK3Zh
ciBwID0gZG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoInAiKVswXTsKKworZmFsbGJhY2su
YWRkRXZlbnRMaXN0ZW5lcigibW91c2Vkb3duIiwgcGFzc2VkLCBmYWxzZSk7CitzdHJva2VkUmVj
dC5hZGRFdmVudExpc3RlbmVyKCJtb3VzZWRvd24iLCBmYWlsZWQsIGZhbHNlKTsKKworZnVuY3Rp
b24gc3RvcCgpIHsKKyAgICBmYWxsYmFjay5yZW1vdmVFdmVudExpc3RlbmVyKCJtb3VzZWRvd24i
LCBmYWlsZWQsIGZhbHNlKTsKKyAgICBzdHJva2VkUmVjdC5yZW1vdmVFdmVudExpc3RlbmVyKCJt
b3VzZWRvd24iLCBwYXNzZWQsIGZhbHNlKTsKKworICAgIGlmICh3aW5kb3cubGF5b3V0VGVzdENv
bnRyb2xsZXIpCisgICAgICAgIGxheW91dFRlc3RDb250cm9sbGVyLm5vdGlmeURvbmUoKTsKK30K
KyAgICAKK2Z1bmN0aW9uIGZhaWxlZCgpIHsKKyAgICBwLmlubmVySFRNTCA9ICdGQUlMRUQ6IHN0
cm9rZVJlY3QgaGFkIHBvaW50ZXInOworICAgIHN0b3AoKTsKK30KKworZnVuY3Rpb24gcGFzc2Vk
KCkgeworICAgIHAuaW5uZXJIVE1MID0gJ1BBU1NFRDogZmFsbGJhY2tSZWN0IGhhZCBwb2ludGVy
JzsKKyAgICBzdG9wKCk7Cit9CisKK2lmICh3aW5kb3cubGF5b3V0VGVzdENvbnRyb2xsZXIpIHsK
KyAgICBsYXlvdXRUZXN0Q29udHJvbGxlci53YWl0VW50aWxEb25lKCk7CisgICAgbGF5b3V0VGVz
dENvbnRyb2xsZXIuZHVtcEFzVGV4dCgpOworfQorCitpZiAod2luZG93LmV2ZW50U2VuZGVyKSB7
CisgICAgZXZlbnRTZW5kZXIubW91c2VNb3ZlVG8oMTk1LCAyNSk7CisgICAgZXZlbnRTZW5kZXIu
bW91c2VEb3duKCk7Cit9CitdXT4KKyAgPC9zY3JpcHQ+Cis8L3N2Zz4KKzwvYm9keT4KKzwvaHRt
bD4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NNYWtlTGlzdHMudHh0IGIvU291cmNlL1dl
YkNvcmUvQ01ha2VMaXN0cy50eHQKaW5kZXggN2E1MjA1Ny4uYmNjYmUwMiAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvQ01ha2VMaXN0cy50eHQKKysrIGIvU291cmNlL1dlYkNvcmUvQ01ha2VM
aXN0cy50eHQKQEAgLTE1OTcsNiArMTU5Nyw3IEBAIElGIChFTkFCTEVfU1ZHKQogICAgICAgICBy
ZW5kZXJpbmcvc3ZnL1JlbmRlclNWR0lubGluZVRleHQuY3BwCiAgICAgICAgIHJlbmRlcmluZy9z
dmcvUmVuZGVyU1ZHTW9kZWxPYmplY3QuY3BwCiAgICAgICAgIHJlbmRlcmluZy9zdmcvUmVuZGVy
U1ZHUGF0aC5jcHAKKyAgICAgICAgcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZWN0LmNwcAogICAg
ICAgICByZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291cmNlLmNwcAogICAgICAgICByZW5kZXJp
bmcvc3ZnL1JlbmRlclNWR1Jlc291cmNlQ2xpcHBlci5jcHAKICAgICAgICAgcmVuZGVyaW5nL3N2
Zy9SZW5kZXJTVkdSZXNvdXJjZUNvbnRhaW5lci5jcHAKQEAgLTE2MTEsNiArMTYxMiw3IEBAIElG
IChFTkFCTEVfU1ZHKQogICAgICAgICByZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291cmNlU29s
aWRDb2xvci5jcHAKICAgICAgICAgcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSb290LmNwcAogICAg
ICAgICByZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1NoYWRvd1RyZWVSb290Q29udGFpbmVyLmNwcAor
ICAgICAgICByZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1NoYXBlLmNwcAogICAgICAgICByZW5kZXJp
bmcvc3ZnL1JlbmRlclNWR1RTcGFuLmNwcAogICAgICAgICByZW5kZXJpbmcvc3ZnL1JlbmRlclNW
R1RleHQuY3BwCiAgICAgICAgIHJlbmRlcmluZy9zdmcvUmVuZGVyU1ZHVGV4dFBhdGguY3BwCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFu
Z2VMb2cKaW5kZXggMDUwODU5OS4uZjhhZDJlMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
Q2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE1OCBA
QAorMjAxMS0wOS0xNCAgUmVuYXRhIEhvZG92YW4gIDxyZW5pQHdlYmtpdC5vcmc+CisKKyAgICAg
ICAgTmV3IHJlbmRlcmVyIGZvciBTVkdSZWN0RWxlbWVudAorICAgICAgICBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NjU3NjkKKworICAgICAgICBUaGlzIHBhdGNoIGlu
dHJvZHVjZXMgYSBuZXcgY29tbW9uIGJhc2UgY2xhc3MgY2FsbGVkIFJlbmRlclNWR1NoYXBlIHdo
aWNoCisgICAgICAgIHJlcGxhY2VzIHRoZSBSZW5kZXJTVkdQYXRoLiBUaGlzIG5ldyBiYXNlIGNs
YXNzIGhhcyB0aGUgc2FtZSBwdXJwb3NlCisgICAgICAgIGFzIHRoZSByZXBsYWNlZCBjbGFzcyBh
bmQgaGFzIHNwZWNpYWxpemVkIGRlc2NlbmRhbnRzIGZvciBjb21tb24KKyAgICAgICAgc2hhcGVz
IChsaWtlIFJlY3RhbmdsZXMgYW5kIENpcmNsZXMpLCB3aGljaCBhbGxvd3MgZmFzdGVyIHBhaW50
aW5nCisgICAgICAgIG9mIHRoZXNlIHNoYXBlcyB3aGVuIGNlcnRhaW4gY29uZGl0aW9ucyBhcmUg
ZnVsZmlsbGVkLiBPbiBzb21lCisgICAgICAgIGJlbmNobWFyayBwcm9ncmFtcyB3ZSBoYXZlIHNl
ZW4gNSUgc3BlZWR1cC4KKworICAgICAgICBUaGUgYmlnZ2VzdCBtb3RpdmF0aW9uIG9mIHRoaXMg
cmVmYWN0b3IgaXMgdGFraW5nIGFkdmFudGFnZQorICAgICAgICBvZiBmYXN0ZXIgcHJpbWl0aXZl
IGRyYXdpbmcgaW4gdGhlIG1vc3QgY29tbW9uIGFuZCBmcmVxdWVudAorICAgICAgICBjYXNlcy4g
SG93ZXZlciBpbiBzb21lIHJhcmUgY2FzZXMsIGxpa2UgcGFpbnRpbmcgcm91bmRlZAorICAgICAg
ICByZWN0cywgd2UgbmVlZCB0byBmYWxsYmFjayB0byB0aGUgb3JpZ2luYWwgY29kZSBwYXRoLCB3
aGljaAorICAgICAgICBpcyBmdWxseSBrZXB0IGluIHRoZSBSZW5kZXJTVkdTaGFwZSBiYXNlIGNs
YXNzLiBTb21lIG90aGVyCisgICAgICAgIGNhc2VzLCBsaWtlIGRhc2hlZCBzdHJva2VzLCBjYW4g
YmUgcGFpbnRlZCBidXQgbW91c2UgcG9pbnRlcgorICAgICAgICBldmVudHMgY2Fubm90IGJlIGhh
bmRsZWQgYnkgdGhlIGRlc2NlbmRhbnQgY2xhc3Nlcy4gQSBkaWZmZXJlbnQKKyAgICAgICAgZmFs
bGJhY2sgbWVjaGFuaXNtIGlzIHVzZWQgaW4gc3VjaCBjYXNlcyB3aGljaCByZWRpcmVjdHMKKyAg
ICAgICAgb25seSB0aGUgcG9pbnRlciBldmVudCBoYW5kbGluZyB0byB0aGUgYmFzZSBjbGFzcy4K
KworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBUZXN0czog
c3ZnL2N1c3RvbS9wb2ludGVyLWV2ZW50cy1vbi1yb3VuZGVkLXJlY3Quc3ZnCisgICAgICAgICAg
ICAgICBzdmcvY3VzdG9tL3BvaW50ZXItZXZlbnRzLXdpdGgtbGluZWNhcHMtYW5kLW1pdGVybGlt
aXRzLnN2ZworCisgICAgICAgICogQ01ha2VMaXN0cy50eHQ6CisgICAgICAgICogR05VbWFrZWZp
bGUubGlzdC5hbToKKyAgICAgICAgKiBXZWJDb3JlLmd5cGk6CisgICAgICAgICogV2ViQ29yZS5w
cm86CisgICAgICAgICogV2ViQ29yZS52Y3Byb2ovV2ViQ29yZS52Y3Byb2o6CisgICAgICAgICog
cGxhdGZvcm0vZ3JhcGhpY3MvRmxvYXRSZWN0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZsb2F0
UmVjdDo6Y29tcHJpc2VzKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9GbG9hdFJlY3Qu
aDoKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyT2JqZWN0Lmg6CisgICAgICAgIChXZWJDb3Jl
OjpSZW5kZXJPYmplY3Q6OmlzU1ZHTGluZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJPYmpl
Y3Q6OmlzU1ZHUmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJPYmplY3Q6OmlzU1ZHU2hh
cGUpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJUcmVlQXNUZXh0LmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OndyaXRlKToKKyAgICAgICAgKiByZW5kZXJpbmcvc3ZnL1JlbmRlclNWR0FsbElu
T25lLmNwcDoKKyAgICAgICAgKiByZW5kZXJpbmcvc3ZnL1JlbmRlclNWR01vZGVsT2JqZWN0LmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OmlzR3JhcGhpY3NFbGVtZW50KToKKyAgICAgICAgKiByZW5k
ZXJpbmcvc3ZnL1JlbmRlclNWR1BhdGguY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU1ZH
UGF0aDo6UmVuZGVyU1ZHUGF0aCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJTVkdQYXRoOjpp
bmZsYXRlV2l0aE1hcmtlckJvdW5kcyk6CisgICAgICAgICogcmVuZGVyaW5nL3N2Zy9SZW5kZXJT
VkdQYXRoLmg6CisgICAgICAgICogcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZWN0LmNwcDogQWRk
ZWQuCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJTVkdSZWN0OjpSZW5kZXJTVkdSZWN0KToKKyAg
ICAgICAgKFdlYkNvcmU6OlJlbmRlclNWR1JlY3Q6On5SZW5kZXJTVkdSZWN0KToKKyAgICAgICAg
KFdlYkNvcmU6OlJlbmRlclNWR1JlY3Q6OmNyZWF0ZVNoYXBlKToKKyAgICAgICAgKFdlYkNvcmU6
OlJlbmRlclNWR1JlY3Q6Om9iamVjdEJvdW5kaW5nQm94KToKKyAgICAgICAgKFdlYkNvcmU6OlJl
bmRlclNWR1JlY3Q6OnN0cm9rZUJvdW5kaW5nQm94KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRl
clNWR1JlY3Q6OmZpbGxTaGFwZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJTVkdSZWN0Ojpz
dHJva2VTaGFwZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJTVkdSZWN0OjpzaGFwZURlcGVu
ZGVudFN0cm9rZUNvbnRhaW5zKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclNWR1JlY3Q6OnNo
YXBlRGVwZW5kZW50RmlsbENvbnRhaW5zKToKKyAgICAgICAgKiByZW5kZXJpbmcvc3ZnL1JlbmRl
clNWR1JlY3QuaDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJTVkdSZWN0Ojppc1NW
R1JlY3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU1ZHUmVjdDo6cmVuZGVyTmFtZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpSZW5kZXJTVkdSZWN0Ojppc0VtcHR5KToKKyAgICAgICAgKiByZW5k
ZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291cmNlLmg6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJT
VkdSZXNvdXJjZTo6cG9zdEFwcGx5UmVzb3VyY2UpOgorICAgICAgICAqIHJlbmRlcmluZy9zdmcv
UmVuZGVyU1ZHUmVzb3VyY2VDbGlwcGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclNW
R1Jlc291cmNlQ2xpcHBlcjo6ZHJhd0NvbnRlbnRJbnRvTWFza0ltYWdlKToKKyAgICAgICAgKFdl
YkNvcmU6OlJlbmRlclNWR1Jlc291cmNlQ2xpcHBlcjo6Y2FsY3VsYXRlQ2xpcENvbnRlbnRSZXBh
aW50UmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJTVkdSZXNvdXJjZUNsaXBwZXI6Omhp
dFRlc3RDbGlwQ29udGVudCk6CisgICAgICAgICogcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNv
dXJjZUNvbnRhaW5lci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJTVkdSZXNvdXJjZUNv
bnRhaW5lcjo6dHJhbnNmb3JtT25Ob25TY2FsaW5nU3Ryb2tlKToKKyAgICAgICAgKiByZW5kZXJp
bmcvc3ZnL1JlbmRlclNWR1Jlc291cmNlRmlsdGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJl
bmRlclNWR1Jlc291cmNlRmlsdGVyOjpwb3N0QXBwbHlSZXNvdXJjZSk6CisgICAgICAgICogcmVu
ZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJjZUZpbHRlci5oOgorICAgICAgICAqIHJlbmRlcmlu
Zy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VHcmFkaWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpS
ZW5kZXJTVkdSZXNvdXJjZUdyYWRpZW50OjphcHBseVJlc291cmNlKToKKyAgICAgICAgKiByZW5k
ZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291cmNlR3JhZGllbnQuaDoKKyAgICAgICAgKiByZW5kZXJp
bmcvc3ZnL1JlbmRlclNWR1Jlc291cmNlUGF0dGVybi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpS
ZW5kZXJTVkdSZXNvdXJjZVBhdHRlcm46OnBvc3RBcHBseVJlc291cmNlKToKKyAgICAgICAgKiBy
ZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291cmNlUGF0dGVybi5oOgorICAgICAgICAqIHJlbmRl
cmluZy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VTb2xpZENvbG9yLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OlJlbmRlclNWR1Jlc291cmNlU29saWRDb2xvcjo6cG9zdEFwcGx5UmVzb3VyY2UpOgorICAg
ICAgICAqIHJlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VTb2xpZENvbG9yLmg6CisgICAg
ICAgICogcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdTaGFwZS5jcHA6IENvcGllZCBmcm9tIFNvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUGF0aC5jcHAuCisgICAgICAgIChXZWJD
b3JlOjpSZW5kZXJTVkdTaGFwZTo6UmVuZGVyU1ZHU2hhcGUpOgorICAgICAgICAoV2ViQ29yZTo6
UmVuZGVyU1ZHU2hhcGU6On5SZW5kZXJTVkdTaGFwZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5k
ZXJTVkdTaGFwZTo6Y3JlYXRlU2hhcGUpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU1ZHU2hh
cGU6OmlzRW1wdHkpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU1ZHU2hhcGU6OmZpbGxTaGFw
ZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJTVkdTaGFwZTo6b2JqZWN0Qm91bmRpbmdCb3gp
OgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU1ZHU2hhcGU6OnN0cm9rZUJvdW5kaW5nQm94KToK
KyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclNWR1NoYXBlOjpzdHJva2VTaGFwZSk6CisgICAgICAg
IChXZWJDb3JlOjpSZW5kZXJTVkdTaGFwZTo6c2hhcGVEZXBlbmRlbnRTdHJva2VDb250YWlucyk6
CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJTVkdTaGFwZTo6c2hhcGVEZXBlbmRlbnRGaWxsQ29u
dGFpbnMpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU1ZHU2hhcGU6OmZpbGxDb250YWlucyk6
CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJTVkdTaGFwZTo6c3Ryb2tlQ29udGFpbnMpOgorICAg
ICAgICAoV2ViQ29yZTo6UmVuZGVyU1ZHU2hhcGU6OmxheW91dCk6CisgICAgICAgIChXZWJDb3Jl
OjpSZW5kZXJTVkdTaGFwZTo6c2hvdWxkU3Ryb2tlWmVyb0xlbmd0aFN1YnBhdGgpOgorICAgICAg
ICAoV2ViQ29yZTo6UmVuZGVyU1ZHU2hhcGU6Onplcm9MZW5ndGhTdWJwYXRoUmVjdCk6CisgICAg
ICAgIChXZWJDb3JlOjpSZW5kZXJTVkdTaGFwZTo6c2V0dXBTcXVhcmVDYXBQYXRoKToKKyAgICAg
ICAgKFdlYkNvcmU6OlJlbmRlclNWR1NoYXBlOjpzZXR1cE5vblNjYWxpbmdTdHJva2VQYXRoKToK
KyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclNWR1NoYXBlOjpmaWxsQW5kU3Ryb2tlUGF0aCk6Cisg
ICAgICAgIChXZWJDb3JlOjpSZW5kZXJTVkdTaGFwZTo6cGFpbnQpOgorICAgICAgICAoV2ViQ29y
ZTo6UmVuZGVyU1ZHU2hhcGU6OmFkZEZvY3VzUmluZ1JlY3RzKToKKyAgICAgICAgKFdlYkNvcmU6
OlJlbmRlclNWR1NoYXBlOjpub2RlQXRGbG9hdFBvaW50KToKKyAgICAgICAgKFdlYkNvcmU6OlJl
bmRlclNWR1NoYXBlOjpjYWxjdWxhdGVNYXJrZXJCb3VuZHNJZk5lZWRlZCk6CisgICAgICAgIChX
ZWJDb3JlOjpSZW5kZXJTVkdTaGFwZTo6dXBkYXRlQ2FjaGVkQm91bmRhcmllcyk6CisgICAgICAg
IChXZWJDb3JlOjpSZW5kZXJTVkdTaGFwZTo6c3Ryb2tlV2lkdGgpOgorICAgICAgICAqIHJlbmRl
cmluZy9zdmcvUmVuZGVyU1ZHU2hhcGUuaDogQ29waWVkIGZyb20gU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL3N2Zy9SZW5kZXJTVkdQYXRoLmguCisgICAgICAgIChXZWJDb3JlOjpCb3VuZGluZ1Jl
Y3RTdHJva2VTdHlsZUFwcGxpZXI6OkJvdW5kaW5nUmVjdFN0cm9rZVN0eWxlQXBwbGllcik6Cisg
ICAgICAgIChXZWJDb3JlOjpCb3VuZGluZ1JlY3RTdHJva2VTdHlsZUFwcGxpZXI6OnN0cm9rZVN0
eWxlKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclNWR1NoYXBlOjpzZXROZWVkc1NoYXBlVXBk
YXRlKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclNWR1NoYXBlOjpzZXROZWVkc0JvdW5kYXJp
ZXNVcGRhdGUpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU1ZHU2hhcGU6OnNldE5lZWRzVHJh
bnNmb3JtVXBkYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclNWR1NoYXBlOjpzZXRJc0Zp
bGxGYWxsYmFjayk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJTVkdTaGFwZTo6aXNGaWxsRmFs
bGJhY2spOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU1ZHU2hhcGU6OnNldFN0cm9rZUFuZE1h
cmtlckJvdW5kaW5nQm94KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclNWR1NoYXBlOjpwYXRo
KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclNWR1NoYXBlOjpoYXNQYXRoKToKKyAgICAgICAg
KFdlYkNvcmU6OlJlbmRlclNWR1NoYXBlOjpyZXBhaW50UmVjdEluTG9jYWxDb29yZGluYXRlcyk6
CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJTVkdTaGFwZTo6bG9jYWxUb1BhcmVudFRyYW5zZm9y
bSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJTVkdTaGFwZTo6aXNTVkdTaGFwZSk6CisgICAg
ICAgIChXZWJDb3JlOjpSZW5kZXJTVkdTaGFwZTo6cmVuZGVyTmFtZSk6CisgICAgICAgIChXZWJD
b3JlOjpSZW5kZXJTVkdTaGFwZTo6aXNSb3VuZGVkUmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpS
ZW5kZXJTVkdTaGFwZTo6aW5mbGF0ZVdpdGhNYXJrZXJCb3VuZHMpOgorICAgICAgICAoV2ViQ29y
ZTo6dG9SZW5kZXJTVkdTaGFwZSk6CisgICAgICAgICogcmVuZGVyaW5nL3N2Zy9TVkdJbmxpbmVU
ZXh0Qm94LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR0lubGluZVRleHRCb3g6OnJlbGVhc2VQ
YWludGluZ1Jlc291cmNlKToKKyAgICAgICAgKiByZW5kZXJpbmcvc3ZnL1NWR1JlbmRlclN1cHBv
cnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U1ZHUmVuZGVyU3VwcG9ydDo6ZmluaXNoUmVuZGVy
U1ZHQ29udGVudCk6CisgICAgICAgIChXZWJDb3JlOjpTVkdSZW5kZXJTdXBwb3J0OjpsYXlvdXRD
aGlsZHJlbik6CisgICAgICAgICogcmVuZGVyaW5nL3N2Zy9TVkdSZW5kZXJUcmVlQXNUZXh0LmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OndyaXRlU3R5bGUpOgorICAgICAgICAoV2ViQ29yZTo6b3Bl
cmF0b3I8PCk6CisgICAgICAgIChXZWJDb3JlOjp3cml0ZSk6CisgICAgICAgICogcmVuZGVyaW5n
L3N2Zy9TVkdSZW5kZXJUcmVlQXNUZXh0Lmg6CisgICAgICAgICogcmVuZGVyaW5nL3N2Zy9TVkdU
ZXh0UnVuUmVuZGVyaW5nQ29udGV4dC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTVkdUZXh0UnVu
UmVuZGVyaW5nQ29udGV4dDo6ZHJhd1NWR0dseXBocyk6CisgICAgICAgICogc3ZnL1NWR0NpcmNs
ZUVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U1ZHQ2lyY2xlRWxlbWVudDo6c3ZnQXR0
cmlidXRlQ2hhbmdlZCk6CisgICAgICAgICogc3ZnL1NWR0VsbGlwc2VFbGVtZW50LmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OlNWR0VsbGlwc2VFbGVtZW50OjpzdmdBdHRyaWJ1dGVDaGFuZ2VkKToK
KyAgICAgICAgKiBzdmcvU1ZHTGluZUVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U1ZH
TGluZUVsZW1lbnQ6OnN2Z0F0dHJpYnV0ZUNoYW5nZWQpOgorICAgICAgICAqIHN2Zy9TVkdQYXRo
RWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTVkdQYXRoRWxlbWVudDo6c3ZnQXR0cmli
dXRlQ2hhbmdlZCk6CisgICAgICAgIChXZWJDb3JlOjpTVkdQYXRoRWxlbWVudDo6cGF0aFNlZ0xp
c3RDaGFuZ2VkKToKKyAgICAgICAgKFdlYkNvcmU6OlNWR1BhdGhFbGVtZW50OjpjcmVhdGVSZW5k
ZXJlcik6CisgICAgICAgICogc3ZnL1NWR1BhdGhFbGVtZW50Lmg6CisgICAgICAgICogc3ZnL1NW
R1BvbHlFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR1BvbHlFbGVtZW50OjpzdmdB
dHRyaWJ1dGVDaGFuZ2VkKToKKyAgICAgICAgKiBzdmcvU1ZHUmVjdEVsZW1lbnQuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6U1ZHUmVjdEVsZW1lbnQ6OnN2Z0F0dHJpYnV0ZUNoYW5nZWQpOgorICAg
ICAgICAoV2ViQ29yZTo6U1ZHUmVjdEVsZW1lbnQ6OmNyZWF0ZVJlbmRlcmVyKToKKyAgICAgICAg
KiBzdmcvU1ZHUmVjdEVsZW1lbnQuaDoKKwogMjAxMS0wOS0wNyAgQW5kcmV5IEtvc3lha292ICA8
Y2FzZXFAY2hyb21pdW0ub3JnPgogCiAgICAgICAgIFdlYiBJbnNwZWN0b3I6IHRyeWluZyB0byBz
Y3JvbGwgbW91c2Ugd2hlZWwgd2hlbiBpbiBUZXh0Vmlld2VyJ3MgZ3V0dGVyIHBhbmUgY2F1c2Vz
IEV2ZW50RXhjZXB0aW9uOjpESVNQQVRDSF9SRVFVRVNUX0VSUgpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvR05VbWFrZWZpbGUubGlzdC5hbSBiL1NvdXJjZS9XZWJDb3JlL0dOVW1ha2VmaWxl
Lmxpc3QuYW0KaW5kZXggMGVjMWE0ZC4uYzBkNDk4OCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvR05VbWFrZWZpbGUubGlzdC5hbQorKysgYi9Tb3VyY2UvV2ViQ29yZS9HTlVtYWtlZmlsZS5s
aXN0LmFtCkBAIC0zMjA2LDYgKzMyMDYsOCBAQCB3ZWJjb3JlX3NvdXJjZXMgKz0gXAogCVNvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHTW9kZWxPYmplY3QuaCBcCiAJU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdQYXRoLmNwcCBcCiAJU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdQYXRoLmggXAorCVNvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9zdmcvUmVuZGVyU1ZHUmVjdC5jcHAgXAorCVNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9z
dmcvUmVuZGVyU1ZHUmVjdC5oIFwKIAlTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRl
clNWR1Jlc291cmNlQ2xpcHBlci5jcHAgXAogCVNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcv
UmVuZGVyU1ZHUmVzb3VyY2VDbGlwcGVyLmggXAogCVNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9z
dmcvUmVuZGVyU1ZHUmVzb3VyY2VDb250YWluZXIuY3BwIFwKQEAgLTMyMzQsNiArMzIzNiw4IEBA
IHdlYmNvcmVfc291cmNlcyArPSBcCiAJU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5k
ZXJTVkdSb290LmggXAogCVNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHU2hh
ZG93VHJlZVJvb3RDb250YWluZXIuY3BwIFwKIAlTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3Zn
L1JlbmRlclNWR1NoYWRvd1RyZWVSb290Q29udGFpbmVyLmggXAorCVNvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9zdmcvUmVuZGVyU1ZHU2hhcGUuY3BwIFwKKwlTb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvc3ZnL1JlbmRlclNWR1NoYXBlLmggXAogCVNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcv
UmVuZGVyU1ZHVFNwYW4uY3BwIFwKIAlTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRl
clNWR1RTcGFuLmggXAogCVNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHVGV4
dC5jcHAgXApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBpIGIvU291cmNl
L1dlYkNvcmUvV2ViQ29yZS5neXBpCmluZGV4IDAzOTg2NGIuLjFlMGE0NTkgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwaQorKysgYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3Jl
Lmd5cGkKQEAgLTU4NTIsNiArNTg1Miw4IEBACiAgICAgICAgICAgICAncmVuZGVyaW5nL3N2Zy9S
ZW5kZXJTVkdNb2RlbE9iamVjdC5oJywKICAgICAgICAgICAgICdyZW5kZXJpbmcvc3ZnL1JlbmRl
clNWR1BhdGguY3BwJywKICAgICAgICAgICAgICdyZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1BhdGgu
aCcsCisgICAgICAgICAgICAncmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZWN0LmNwcCcsCisgICAg
ICAgICAgICAncmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZWN0LmgnLAogICAgICAgICAgICAgJ3Jl
bmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2UuY3BwJywKICAgICAgICAgICAgICdyZW5kZXJp
bmcvc3ZnL1JlbmRlclNWR1Jlc291cmNlLmgnLAogICAgICAgICAgICAgJ3JlbmRlcmluZy9zdmcv
UmVuZGVyU1ZHUmVzb3VyY2VDbGlwcGVyLmNwcCcsCkBAIC01ODgwLDYgKzU4ODIsOCBAQAogICAg
ICAgICAgICAgJ3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUm9vdC5oJywKICAgICAgICAgICAgICdy
ZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1NoYWRvd1RyZWVSb290Q29udGFpbmVyLmNwcCcsCiAgICAg
ICAgICAgICAncmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdTaGFkb3dUcmVlUm9vdENvbnRhaW5lci5o
JywKKyAgICAgICAgICAgICdyZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1NoYXBlLmNwcCcsCisgICAg
ICAgICAgICAncmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdTaGFwZS5oJywKICAgICAgICAgICAgICdy
ZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1RTcGFuLmNwcCcsCiAgICAgICAgICAgICAncmVuZGVyaW5n
L3N2Zy9SZW5kZXJTVkdUU3Bhbi5oJywKICAgICAgICAgICAgICdyZW5kZXJpbmcvc3ZnL1JlbmRl
clNWR1RleHQuY3BwJywKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUucHJvIGIv
U291cmNlL1dlYkNvcmUvV2ViQ29yZS5wcm8KaW5kZXggMjJhODQ1ZC4uOTkyNTA3ZCAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5wcm8KKysrIGIvU291cmNlL1dlYkNvcmUvV2Vi
Q29yZS5wcm8KQEAgLTIyODIsNiArMjI4Miw3IEBAIEhFQURFUlMgKz0gXAogICAgIHJlbmRlcmlu
Zy9zdmcvUmVuZGVyU1ZHSW5saW5lVGV4dC5oIFwKICAgICByZW5kZXJpbmcvc3ZnL1JlbmRlclNW
R01vZGVsT2JqZWN0LmggXAogICAgIHJlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUGF0aC5oIFwKKyAg
ICByZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1JlY3QuaCBcCiAgICAgcmVuZGVyaW5nL3N2Zy9SZW5k
ZXJTVkdSZXNvdXJjZS5oIFwKICAgICByZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291cmNlQ2xp
cHBlci5oIFwKICAgICByZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291cmNlQ29udGFpbmVyLmgg
XApAQCAtMjI5Niw2ICsyMjk3LDcgQEAgSEVBREVSUyArPSBcCiAgICAgcmVuZGVyaW5nL3N2Zy9S
ZW5kZXJTVkdSZXNvdXJjZVNvbGlkQ29sb3IuaCBcCiAgICAgcmVuZGVyaW5nL3N2Zy9SZW5kZXJT
VkdSb290LmggXAogICAgIHJlbmRlcmluZy9zdmcvUmVuZGVyU1ZHU2hhZG93VHJlZVJvb3RDb250
YWluZXIuaCBcCisgICAgcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdTaGFwZS5oIFwKICAgICByZW5k
ZXJpbmcvc3ZnL1JlbmRlclNWR1RTcGFuLmggXAogICAgIHJlbmRlcmluZy9zdmcvUmVuZGVyU1ZH
VGV4dC5oIFwKICAgICByZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1RleHRQYXRoLmggXApAQCAtMzMx
MCw2ICszMzEyLDggQEAgY29udGFpbnMoREVGSU5FUywgRU5BQkxFX1NWRz0xKSB7CiAgICAgICAg
IHJlbmRlcmluZy9zdHlsZS9TVkdSZW5kZXJTdHlsZURlZnMuY3BwIFwKICAgICAgICAgcmVuZGVy
aW5nL1BvaW50ZXJFdmVudHNIaXRSdWxlcy5jcHAgXAogICAgICAgICByZW5kZXJpbmcvc3ZnL1Jl
bmRlclNWR1BhdGguY3BwIFwKKyAgICAgICAgcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZWN0LmNw
cCBcCisgICAgICAgIHJlbmRlcmluZy9zdmcvUmVuZGVyU1ZHU2hhcGUuY3BwIFwKICAgICAgICAg
c3ZnL2FuaW1hdGlvbi9TTUlMVGltZS5jcHAgXAogICAgICAgICBzdmcvYW5pbWF0aW9uL1NNSUxU
aW1lQ29udGFpbmVyLmNwcCBcCiAgICAgICAgIHN2Zy9hbmltYXRpb24vU1ZHU01JTEVsZW1lbnQu
Y3BwIFwKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUudmNwcm9qL1dlYkNvcmUu
dmNwcm9qIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS52Y3Byb2ovV2ViQ29yZS52Y3Byb2oKaW5k
ZXggNmI2ODBiYS4uNTY3ODY5OCAxMDA3NTUKLS0tIGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS52
Y3Byb2ovV2ViQ29yZS52Y3Byb2oKKysrIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS52Y3Byb2ov
V2ViQ29yZS52Y3Byb2oKQEAgLTQxNjQ3LDYgKzQxNjQ3LDExOCBAQAogCQkJCQk+CiAJCQkJPC9G
aWxlPgogCQkJCTxGaWxlCisJCQkJCVJlbGF0aXZlUGF0aD0iLi5ccmVuZGVyaW5nXHN2Z1xSZW5k
ZXJTVkdSZWN0LmNwcCIKKwkJCQkJPgorCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24KKwkJCQkJCU5h
bWU9IkRlYnVnfFdpbjMyIgorCQkJCQkJRXhjbHVkZWRGcm9tQnVpbGQ9InRydWUiCisJCQkJCQk+
CisJCQkJCQk8VG9vbAorCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiCisJCQkJCQkvPgor
CQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPgorCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24KKwkJCQkJ
CU5hbWU9IlJlbGVhc2V8V2luMzIiCisJCQkJCQlFeGNsdWRlZEZyb21CdWlsZD0idHJ1ZSIKKwkJ
CQkJCT4KKwkJCQkJCTxUb29sCisJCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIKKwkJCQkJ
CS8+CisJCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+CisJCQkJCTxGaWxlQ29uZmlndXJhdGlvbgor
CQkJCQkJTmFtZT0iRGVidWdfQ2Fpcm9fQ0ZMaXRlfFdpbjMyIgorCQkJCQkJRXhjbHVkZWRGcm9t
QnVpbGQ9InRydWUiCisJCQkJCQk+CisJCQkJCQk8VG9vbAorCQkJCQkJCU5hbWU9IlZDQ0xDb21w
aWxlclRvb2wiCisJCQkJCQkvPgorCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPgorCQkJCQk8Rmls
ZUNvbmZpZ3VyYXRpb24KKwkJCQkJCU5hbWU9IlJlbGVhc2VfQ2Fpcm9fQ0ZMaXRlfFdpbjMyIgor
CQkJCQkJRXhjbHVkZWRGcm9tQnVpbGQ9InRydWUiCisJCQkJCQk+CisJCQkJCQk8VG9vbAorCQkJ
CQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiCisJCQkJCQkvPgorCQkJCQk8L0ZpbGVDb25maWd1
cmF0aW9uPgorCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24KKwkJCQkJCU5hbWU9IkRlYnVnX0FsbHxX
aW4zMiIKKwkJCQkJCUV4Y2x1ZGVkRnJvbUJ1aWxkPSJ0cnVlIgorCQkJCQkJPgorCQkJCQkJPFRv
b2wKKwkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIgorCQkJCQkJLz4KKwkJCQkJPC9GaWxl
Q29uZmlndXJhdGlvbj4KKwkJCQkJPEZpbGVDb25maWd1cmF0aW9uCisJCQkJCQlOYW1lPSJQcm9k
dWN0aW9ufFdpbjMyIgorCQkJCQkJRXhjbHVkZWRGcm9tQnVpbGQ9InRydWUiCisJCQkJCQk+CisJ
CQkJCQk8VG9vbAorCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiCisJCQkJCQkvPgorCQkJ
CQk8L0ZpbGVDb25maWd1cmF0aW9uPgorCQkJCTwvRmlsZT4KKwkJCQk8RmlsZQorCQkJCQlSZWxh
dGl2ZVBhdGg9Ii4uXHJlbmRlcmluZ1xzdmdcUmVuZGVyU1ZHUmVjdC5oIgorCQkJCQk+CisJCQkJ
PC9GaWxlPgorCQkJCTxGaWxlCisJCQkJCVJlbGF0aXZlUGF0aD0iLi5ccmVuZGVyaW5nXHN2Z1xS
ZW5kZXJTVkdTaGFwZS5jcHAiCisJCQkJCT4KKwkJCQkJPEZpbGVDb25maWd1cmF0aW9uCisJCQkJ
CQlOYW1lPSJEZWJ1Z3xXaW4zMiIKKwkJCQkJCUV4Y2x1ZGVkRnJvbUJ1aWxkPSJ0cnVlIgorCQkJ
CQkJPgorCQkJCQkJPFRvb2wKKwkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIgorCQkJCQkJ
Lz4KKwkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4KKwkJCQkJPEZpbGVDb25maWd1cmF0aW9uCisJ
CQkJCQlOYW1lPSJSZWxlYXNlfFdpbjMyIgorCQkJCQkJRXhjbHVkZWRGcm9tQnVpbGQ9InRydWUi
CisJCQkJCQk+CisJCQkJCQk8VG9vbAorCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiCisJ
CQkJCQkvPgorCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPgorCQkJCQk8RmlsZUNvbmZpZ3VyYXRp
b24KKwkJCQkJCU5hbWU9IkRlYnVnX0NhaXJvX0NGTGl0ZXxXaW4zMiIKKwkJCQkJCUV4Y2x1ZGVk
RnJvbUJ1aWxkPSJ0cnVlIgorCQkJCQkJPgorCQkJCQkJPFRvb2wKKwkJCQkJCQlOYW1lPSJWQ0NM
Q29tcGlsZXJUb29sIgorCQkJCQkJLz4KKwkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4KKwkJCQkJ
PEZpbGVDb25maWd1cmF0aW9uCisJCQkJCQlOYW1lPSJSZWxlYXNlX0NhaXJvX0NGTGl0ZXxXaW4z
MiIKKwkJCQkJCUV4Y2x1ZGVkRnJvbUJ1aWxkPSJ0cnVlIgorCQkJCQkJPgorCQkJCQkJPFRvb2wK
KwkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIgorCQkJCQkJLz4KKwkJCQkJPC9GaWxlQ29u
ZmlndXJhdGlvbj4KKwkJCQkJPEZpbGVDb25maWd1cmF0aW9uCisJCQkJCQlOYW1lPSJEZWJ1Z19B
bGx8V2luMzIiCisJCQkJCQlFeGNsdWRlZEZyb21CdWlsZD0idHJ1ZSIKKwkJCQkJCT4KKwkJCQkJ
CTxUb29sCisJCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIKKwkJCQkJCS8+CisJCQkJCTwv
RmlsZUNvbmZpZ3VyYXRpb24+CisJCQkJCTxGaWxlQ29uZmlndXJhdGlvbgorCQkJCQkJTmFtZT0i
UHJvZHVjdGlvbnxXaW4zMiIKKwkJCQkJCUV4Y2x1ZGVkRnJvbUJ1aWxkPSJ0cnVlIgorCQkJCQkJ
PgorCQkJCQkJPFRvb2wKKwkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIgorCQkJCQkJLz4K
KwkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4KKwkJCQk8L0ZpbGU+CisJCQkJPEZpbGUKKwkJCQkJ
UmVsYXRpdmVQYXRoPSIuLlxyZW5kZXJpbmdcc3ZnXFJlbmRlclNWR1NoYXBlLmgiCisJCQkJCT4K
KwkJCQk8L0ZpbGU+CisJCQkJPEZpbGUKIAkJCQkJUmVsYXRpdmVQYXRoPSIuLlxyZW5kZXJpbmdc
c3ZnXFJlbmRlclNWR1RleHQuY3BwIgogCQkJCQk+CiAJCQkJCTxGaWxlQ29uZmlndXJhdGlvbgpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRmxvYXRSZWN0LmNw
cCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0Zsb2F0UmVjdC5jcHAKaW5kZXgg
Yjg0YTg5Mi4uZWQxZGY2ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvRmxvYXRSZWN0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9GbG9hdFJlY3QuY3BwCkBAIC02OCw2ICs2OCwxMyBAQCBib29sIEZsb2F0UmVjdDo6Y29udGFp
bnMoY29uc3QgRmxvYXRSZWN0JiBvdGhlcikgY29uc3QKICAgICAgICAgJiYgeSgpIDw9IG90aGVy
LnkoKSAmJiBtYXhZKCkgPj0gb3RoZXIubWF4WSgpOwogfQogCitib29sIEZsb2F0UmVjdDo6aXNJ
bnNpZGVSZWN0KGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50KSBjb25zdAoreworICAgIGlmICghY29u
dGFpbnMocG9pbnQpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgcmV0dXJuIHgoKSA8IHBv
aW50LngoKSAmJiBtYXhYKCkgPiBwb2ludC54KCkgJiYgeSgpIDwgcG9pbnQueSgpICYmIG1heFko
KSA+IHkoKTsKK30KKwogdm9pZCBGbG9hdFJlY3Q6OmludGVyc2VjdChjb25zdCBGbG9hdFJlY3Qm
IG90aGVyKQogewogICAgIGZsb2F0IGwgPSBtYXgoeCgpLCBvdGhlci54KCkpOwpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRmxvYXRSZWN0LmggYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9GbG9hdFJlY3QuaAppbmRleCAyNGE2YjE5Li5lZWMy
ZmUwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9GbG9hdFJl
Y3QuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9GbG9hdFJlY3QuaApA
QCAtMTQ2LDYgKzE0Niw3IEBAIHB1YmxpYzoKIAogICAgIGJvb2wgaW50ZXJzZWN0cyhjb25zdCBG
bG9hdFJlY3QmKSBjb25zdDsKICAgICBib29sIGNvbnRhaW5zKGNvbnN0IEZsb2F0UmVjdCYpIGNv
bnN0OworICAgIGJvb2wgaXNJbnNpZGVSZWN0KGNvbnN0IEZsb2F0UG9pbnQmKSBjb25zdDsKIAog
ICAgIHZvaWQgaW50ZXJzZWN0KGNvbnN0IEZsb2F0UmVjdCYpOwogICAgIHZvaWQgdW5pdGUoY29u
c3QgRmxvYXRSZWN0Jik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVyT2JqZWN0LmggYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyT2JqZWN0LmgKaW5k
ZXggYmZhYTY5NS4uY2VjYzRmOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlck9iamVjdC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJPYmpl
Y3QuaApAQCAtMzU3LDYgKzM1Nyw4IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIGJvb2wgaXNTVkdH
cmFkaWVudFN0b3AoKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQogICAgIHZpcnR1YWwgYm9vbCBp
c1NWR0hpZGRlbkNvbnRhaW5lcigpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CiAgICAgdmlydHVh
bCBib29sIGlzU1ZHUGF0aCgpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CisgICAgdmlydHVhbCBi
b29sIGlzU1ZHUmVjdCgpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CisgICAgdmlydHVhbCBib29s
IGlzU1ZHU2hhcGUoKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQogICAgIHZpcnR1YWwgYm9vbCBp
c1NWR1RleHQoKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQogICAgIHZpcnR1YWwgYm9vbCBpc1NW
R1RleHRQYXRoKCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KICAgICB2aXJ0dWFsIGJvb2wgaXNT
VkdJbmxpbmUoKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL1JlbmRlclRyZWVBc1RleHQuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlclRyZWVBc1RleHQuY3BwCmluZGV4IDY0ZTY1NGMuLmIxMmQ3NzYgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUcmVlQXNUZXh0LmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVHJlZUFzVGV4dC5jcHAKQEAgLTUyMCw4
ICs1MjAsOCBAQCBzdGF0aWMgdm9pZCB3cml0ZVRleHRSdW4oVGV4dFN0cmVhbSYgdHMsIGNvbnN0
IFJlbmRlclRleHQmIG8sIGNvbnN0IElubGluZVRleHRCbwogdm9pZCB3cml0ZShUZXh0U3RyZWFt
JiB0cywgY29uc3QgUmVuZGVyT2JqZWN0JiBvLCBpbnQgaW5kZW50LCBSZW5kZXJBc1RleHRCZWhh
dmlvciBiZWhhdmlvcikKIHsKICNpZiBFTkFCTEUoU1ZHKQotICAgIGlmIChvLmlzU1ZHUGF0aCgp
KSB7Ci0gICAgICAgIHdyaXRlKHRzLCAqdG9SZW5kZXJTVkdQYXRoKCZvKSwgaW5kZW50KTsKKyAg
ICBpZiAoby5pc1NWR1NoYXBlKCkpIHsKKyAgICAgICAgd3JpdGUodHMsICp0b1JlbmRlclNWR1No
YXBlKCZvKSwgaW5kZW50KTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICBpZiAoby5pc1NW
R0dyYWRpZW50U3RvcCgpKSB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
c3ZnL1JlbmRlclNWR0FsbEluT25lLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcv
UmVuZGVyU1ZHQWxsSW5PbmUuY3BwCmluZGV4IDllYTNiZTUuLjI5NjkwMDggMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHQWxsSW5PbmUuY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHQWxsSW5PbmUuY3BwCkBAIC0z
NSw2ICszNSw3IEBACiAjaW5jbHVkZSAiUmVuZGVyU1ZHSW5saW5lVGV4dC5jcHAiCiAjaW5jbHVk
ZSAiUmVuZGVyU1ZHTW9kZWxPYmplY3QuY3BwIgogI2luY2x1ZGUgIlJlbmRlclNWR1BhdGguY3Bw
IgorI2luY2x1ZGUgIlJlbmRlclNWR1JlY3QuY3BwIgogI2luY2x1ZGUgIlJlbmRlclNWR1Jlc291
cmNlLmNwcCIKICNpbmNsdWRlICJSZW5kZXJTVkdSZXNvdXJjZUNsaXBwZXIuY3BwIgogI2luY2x1
ZGUgIlJlbmRlclNWR1Jlc291cmNlQ29udGFpbmVyLmNwcCIKQEAgLTQ5LDYgKzUwLDcgQEAKICNp
bmNsdWRlICJSZW5kZXJTVkdSZXNvdXJjZVNvbGlkQ29sb3IuY3BwIgogI2luY2x1ZGUgIlJlbmRl
clNWR1Jvb3QuY3BwIgogI2luY2x1ZGUgIlJlbmRlclNWR1NoYWRvd1RyZWVSb290Q29udGFpbmVy
LmNwcCIKKyNpbmNsdWRlICJSZW5kZXJTVkdTaGFwZS5jcHAiCiAjaW5jbHVkZSAiUmVuZGVyU1ZH
VFNwYW4uY3BwIgogI2luY2x1ZGUgIlJlbmRlclNWR1RleHQuY3BwIgogI2luY2x1ZGUgIlJlbmRl
clNWR1RleHRQYXRoLmNwcCIKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9z
dmcvUmVuZGVyU1ZHTW9kZWxPYmplY3QuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2
Zy9SZW5kZXJTVkdNb2RlbE9iamVjdC5jcHAKaW5kZXggMTRjMWRiOC4uYzIzNDBiMyAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdNb2RlbE9iamVjdC5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdNb2RlbE9iamVj
dC5jcHAKQEAgLTE1Myw3ICsxNTMsNyBAQCBzdGF0aWMgYm9vbCBpbnRlcnNlY3RzQWxsb3dpbmdF
bXB0eShjb25zdCBGbG9hdFJlY3QmIHIsIGNvbnN0IEZsb2F0UmVjdCYgb3RoZXIpCiAvLyBpbWFn
ZSwgbGluZSwgcGF0aCwgcG9seWdvbiwgcG9seWxpbmUsIHJlY3QsIHRleHQgYW5kIHVzZS4KIHN0
YXRpYyBib29sIGlzR3JhcGhpY3NFbGVtZW50KFJlbmRlck9iamVjdCogcmVuZGVyZXIpCiB7Ci0g
ICAgcmV0dXJuIHJlbmRlcmVyLT5pc1NWR1BhdGgoKSB8fCByZW5kZXJlci0+aXNTVkdUZXh0KCkg
fHwgcmVuZGVyZXItPmlzU1ZHSW1hZ2UoKSB8fCByZW5kZXJlci0+aXNTVkdTaGFkb3dUcmVlUm9v
dENvbnRhaW5lcigpOworICAgIHJldHVybiByZW5kZXJlci0+aXNTVkdTaGFwZSgpIHx8IHJlbmRl
cmVyLT5pc1NWR1RleHQoKSB8fCByZW5kZXJlci0+aXNTVkdJbWFnZSgpIHx8IHJlbmRlcmVyLT5p
c1NWR1NoYWRvd1RyZWVSb290Q29udGFpbmVyKCk7CiB9CiAKIGJvb2wgUmVuZGVyU1ZHTW9kZWxP
YmplY3Q6OmNoZWNrSW50ZXJzZWN0aW9uKFJlbmRlck9iamVjdCogcmVuZGVyZXIsIGNvbnN0IEZs
b2F0UmVjdCYgcmVjdCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcv
UmVuZGVyU1ZHUGF0aC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNW
R1BhdGguY3BwCmluZGV4IGI3YWQ3YTIuLmZmMTU1MDUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUGF0aC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdQYXRoLmNwcApAQCAtNiw2ICs2LDggQEAKICAqIENvcHly
aWdodCAoQykgMjAwOSBEaXJrIFNjaHVsemUgPGtyaXRAd2Via2l0Lm9yZz4KICAqIENvcHlyaWdo
dCAoQykgUmVzZWFyY2ggSW4gTW90aW9uIExpbWl0ZWQgMjAxMC4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KICAqIENvcHlyaWdodCAoQykgMjAwOSBKZWZmIFNjaGlsbGVyIDxjb2RlZHJlYWRAZ21haWwu
Y29tPgorICogQ29weXJpZ2h0IChDKSAyMDExIFJlbmF0YSBIb2RvdmFuIDxyZW5pQHdlYmtpdC5v
cmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgVW5pdmVyc2l0eSBvZiBTemVnZWQKICAqCiAgKiBU
aGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5k
L29yCiAgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5l
cmFsIFB1YmxpYwpAQCAtMjgsNTAgKzMwLDEzIEBACiAjaWYgRU5BQkxFKFNWRykKICNpbmNsdWRl
ICJSZW5kZXJTVkdQYXRoLmgiCiAKLSNpbmNsdWRlICJGbG9hdFBvaW50LmgiCi0jaW5jbHVkZSAi
RmxvYXRRdWFkLmgiCi0jaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCi0jaW5jbHVkZSAiSGl0
VGVzdFJlcXVlc3QuaCIKLSNpbmNsdWRlICJMYXlvdXRSZXBhaW50ZXIuaCIKLSNpbmNsdWRlICJQ
b2ludGVyRXZlbnRzSGl0UnVsZXMuaCIKLSNpbmNsdWRlICJSZW5kZXJTVkdDb250YWluZXIuaCIK
LSNpbmNsdWRlICJSZW5kZXJTVkdSZXNvdXJjZU1hcmtlci5oIgotI2luY2x1ZGUgIlJlbmRlclNW
R1Jlc291cmNlU29saWRDb2xvci5oIgotI2luY2x1ZGUgIlNWR1JlbmRlclN1cHBvcnQuaCIKLSNp
bmNsdWRlICJTVkdSZXNvdXJjZXMuaCIKKyNpbmNsdWRlICJTVkdQYXRoRWxlbWVudC5oIgogI2lu
Y2x1ZGUgIlNWR1N0eWxlZFRyYW5zZm9ybWFibGVFbGVtZW50LmgiCi0jaW5jbHVkZSAiU1ZHVHJh
bnNmb3JtTGlzdC5oIgotI2luY2x1ZGUgIlNWR1VSSVJlZmVyZW5jZS5oIgotI2luY2x1ZGUgIlN0
cm9rZVN0eWxlQXBwbGllci5oIgotI2luY2x1ZGUgPHd0Zi9NYXRoRXh0cmFzLmg+CiAKIG5hbWVz
cGFjZSBXZWJDb3JlIHsKIAotY2xhc3MgQm91bmRpbmdSZWN0U3Ryb2tlU3R5bGVBcHBsaWVyIDog
cHVibGljIFN0cm9rZVN0eWxlQXBwbGllciB7Ci1wdWJsaWM6Ci0gICAgQm91bmRpbmdSZWN0U3Ry
b2tlU3R5bGVBcHBsaWVyKGNvbnN0IFJlbmRlck9iamVjdCogb2JqZWN0LCBSZW5kZXJTdHlsZSog
c3R5bGUpCi0gICAgICAgIDogbV9vYmplY3Qob2JqZWN0KQotICAgICAgICAsIG1fc3R5bGUoc3R5
bGUpCi0gICAgewotICAgICAgICBBU1NFUlQoc3R5bGUpOwotICAgICAgICBBU1NFUlQob2JqZWN0
KTsKLSAgICB9Ci0KLSAgICB2b2lkIHN0cm9rZVN0eWxlKEdyYXBoaWNzQ29udGV4dCogZ2MpCi0g
ICAgewotICAgICAgICBTVkdSZW5kZXJTdXBwb3J0OjphcHBseVN0cm9rZVN0eWxlVG9Db250ZXh0
KGdjLCBtX3N0eWxlLCBtX29iamVjdCk7Ci0gICAgfQotCi1wcml2YXRlOgotICAgIGNvbnN0IFJl
bmRlck9iamVjdCogbV9vYmplY3Q7Ci0gICAgUmVuZGVyU3R5bGUqIG1fc3R5bGU7Ci19OwotCiBS
ZW5kZXJTVkdQYXRoOjpSZW5kZXJTVkdQYXRoKFNWR1N0eWxlZFRyYW5zZm9ybWFibGVFbGVtZW50
KiBub2RlKQotICAgIDogUmVuZGVyU1ZHTW9kZWxPYmplY3Qobm9kZSkKLSAgICAsIG1fbmVlZHNC
b3VuZGFyaWVzVXBkYXRlKGZhbHNlKSAvLyBkZWZhdWx0IGlzIGZhbHNlLCB0aGUgY2FjaGVkIHJl
Y3RzIGFyZSBlbXB0eSBmcm9tIHRoZSBiZWdpbm5pbmcKLSAgICAsIG1fbmVlZHNQYXRoVXBkYXRl
KHRydWUpIC8vIGRlZmF1bHQgaXMgdHJ1ZSwgc28gd2UgZ3JhYiBhIFBhdGggb2JqZWN0IG9uY2Ug
ZnJvbSBTVkdTdHlsZWRUcmFuc2Zvcm1hYmxlRWxlbWVudAotICAgICwgbV9uZWVkc1RyYW5zZm9y
bVVwZGF0ZSh0cnVlKSAvLyBkZWZhdWx0IGlzIHRydWUsIHNvIHdlIGdyYWIgYSBBZmZpbmVUcmFu
c2Zvcm0gb2JqZWN0IG9uY2UgZnJvbSBTVkdTdHlsZWRUcmFuc2Zvcm1hYmxlRWxlbWVudAorICAg
IDogUmVuZGVyU1ZHU2hhcGUobm9kZSkKIHsKIH0KIApAQCAtNzksMzE0ICs0NCwxNiBAQCBSZW5k
ZXJTVkdQYXRoOjp+UmVuZGVyU1ZHUGF0aCgpCiB7CiB9CiAKLWJvb2wgUmVuZGVyU1ZHUGF0aDo6
ZmlsbENvbnRhaW5zKGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50LCBib29sIHJlcXVpcmVzRmlsbCwg
V2luZFJ1bGUgZmlsbFJ1bGUpCi17Ci0gICAgaWYgKCFtX2ZpbGxCb3VuZGluZ0JveC5jb250YWlu
cyhwb2ludCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIENvbG9yIGZhbGxiYWNrQ29s
b3I7Ci0gICAgaWYgKHJlcXVpcmVzRmlsbCAmJiAhUmVuZGVyU1ZHUmVzb3VyY2U6OmZpbGxQYWlu
dGluZ1Jlc291cmNlKHRoaXMsIHN0eWxlKCksIGZhbGxiYWNrQ29sb3IpKQotICAgICAgICByZXR1
cm4gZmFsc2U7Ci0KLSAgICByZXR1cm4gbV9wYXRoLmNvbnRhaW5zKHBvaW50LCBmaWxsUnVsZSk7
Ci19Ci0KLWJvb2wgUmVuZGVyU1ZHUGF0aDo6c3Ryb2tlQ29udGFpbnMoY29uc3QgRmxvYXRQb2lu
dCYgcG9pbnQsIGJvb2wgcmVxdWlyZXNTdHJva2UpCi17Ci0gICAgaWYgKCFtX3N0cm9rZUFuZE1h
cmtlckJvdW5kaW5nQm94LmNvbnRhaW5zKHBvaW50KSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwot
Ci0gICAgQ29sb3IgZmFsbGJhY2tDb2xvcjsKLSAgICBpZiAocmVxdWlyZXNTdHJva2UgJiYgIVJl
bmRlclNWR1Jlc291cmNlOjpzdHJva2VQYWludGluZ1Jlc291cmNlKHRoaXMsIHN0eWxlKCksIGZh
bGxiYWNrQ29sb3IpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBpZiAoc2hvdWxkU3Ry
b2tlWmVyb0xlbmd0aFN1YnBhdGgoKSkKLSAgICAgICAgcmV0dXJuIHplcm9MZW5ndGhTdWJwYXRo
UmVjdCgpLmNvbnRhaW5zKHBvaW50KTsKLQotICAgIEJvdW5kaW5nUmVjdFN0cm9rZVN0eWxlQXBw
bGllciBzdHJva2VTdHlsZSh0aGlzLCBzdHlsZSgpKTsKLSAgICByZXR1cm4gbV9wYXRoLnN0cm9r
ZUNvbnRhaW5zKCZzdHJva2VTdHlsZSwgcG9pbnQpOwotfQotCi12b2lkIFJlbmRlclNWR1BhdGg6
OmxheW91dCgpCi17Ci0gICAgTGF5b3V0UmVwYWludGVyIHJlcGFpbnRlcigqdGhpcywgY2hlY2tG
b3JSZXBhaW50RHVyaW5nTGF5b3V0KCkgJiYgc2VsZk5lZWRzTGF5b3V0KCkpOwotICAgIFNWR1N0
eWxlZFRyYW5zZm9ybWFibGVFbGVtZW50KiBlbGVtZW50ID0gc3RhdGljX2Nhc3Q8U1ZHU3R5bGVk
VHJhbnNmb3JtYWJsZUVsZW1lbnQqPihub2RlKCkpOwotCi0gICAgYm9vbCB1cGRhdGVDYWNoZWRC
b3VuZGFyaWVzSW5QYXJlbnRzID0gZmFsc2U7Ci0KLSAgICBib29sIG5lZWRzUGF0aFVwZGF0ZSA9
IG1fbmVlZHNQYXRoVXBkYXRlOwotICAgIGlmIChuZWVkc1BhdGhVcGRhdGUpIHsKLSAgICAgICAg
bV9wYXRoLmNsZWFyKCk7Ci0gICAgICAgIGVsZW1lbnQtPnRvUGF0aERhdGEobV9wYXRoKTsKLSAg
ICAgICAgbV9uZWVkc1BhdGhVcGRhdGUgPSBmYWxzZTsKLSAgICAgICAgdXBkYXRlQ2FjaGVkQm91
bmRhcmllc0luUGFyZW50cyA9IHRydWU7Ci0gICAgfQotCi0gICAgaWYgKG1fbmVlZHNUcmFuc2Zv
cm1VcGRhdGUpIHsKLSAgICAgICAgbV9sb2NhbFRyYW5zZm9ybSA9IGVsZW1lbnQtPmFuaW1hdGVk
TG9jYWxUcmFuc2Zvcm0oKTsKLSAgICAgICAgbV9uZWVkc1RyYW5zZm9ybVVwZGF0ZSA9IGZhbHNl
OwotICAgICAgICB1cGRhdGVDYWNoZWRCb3VuZGFyaWVzSW5QYXJlbnRzID0gdHJ1ZTsKLSAgICB9
Ci0KLSAgICBpZiAobV9uZWVkc0JvdW5kYXJpZXNVcGRhdGUpCi0gICAgICAgIHVwZGF0ZUNhY2hl
ZEJvdW5kYXJpZXNJblBhcmVudHMgPSB0cnVlOwotCi0gICAgLy8gSW52YWxpZGF0ZSBhbGwgcmVz
b3VyY2VzIG9mIHRoaXMgY2xpZW50IGlmIG91ciBsYXlvdXQgY2hhbmdlZC4KLSAgICBpZiAobV9l
dmVySGFkTGF5b3V0ICYmIHNlbGZOZWVkc0xheW91dCgpKSB7Ci0gICAgICAgIFNWR1Jlc291cmNl
c0NhY2hlOjpjbGllbnRMYXlvdXRDaGFuZ2VkKHRoaXMpOwotICAgICAgICBtX21hcmtlckxheW91
dEluZm8uY2xlYXIoKTsKLSAgICB9Ci0KLSAgICAvLyBBdCB0aGlzIHBvaW50IExheW91dFJlcGFp
bnRlciBhbHJlYWR5IGdyYWJiZWQgdGhlIG9sZCBib3VuZHMsCi0gICAgLy8gcmVjYWxjdWxhdGUg
dGhlbSBub3cgc28gcmVwYWludEFmdGVyTGF5b3V0KCkgdXNlcyB0aGUgbmV3IGJvdW5kcy4KLSAg
ICBpZiAobmVlZHNQYXRoVXBkYXRlIHx8IG1fbmVlZHNCb3VuZGFyaWVzVXBkYXRlKSB7Ci0gICAg
ICAgIHVwZGF0ZUNhY2hlZEJvdW5kYXJpZXMoKTsKLSAgICAgICAgbV9uZWVkc0JvdW5kYXJpZXNV
cGRhdGUgPSBmYWxzZTsKLSAgICB9Ci0KLSAgICAvLyBJZiBvdXIgYm91bmRzIGNoYW5nZWQsIG5v
dGlmeSB0aGUgcGFyZW50cy4KLSAgICBpZiAodXBkYXRlQ2FjaGVkQm91bmRhcmllc0luUGFyZW50
cykKLSAgICAgICAgUmVuZGVyU1ZHTW9kZWxPYmplY3Q6OnNldE5lZWRzQm91bmRhcmllc1VwZGF0
ZSgpOwotCi0gICAgcmVwYWludGVyLnJlcGFpbnRBZnRlckxheW91dCgpOwotICAgIHNldE5lZWRz
TGF5b3V0KGZhbHNlKTsKLX0KLQotYm9vbCBSZW5kZXJTVkdQYXRoOjpzaG91bGRTdHJva2VaZXJv
TGVuZ3RoU3VicGF0aCgpIGNvbnN0Ci17Ci0gICAgLy8gU3BlYygxMS40KTogQW55IHplcm8gbGVu
Z3RoIHN1YnBhdGggc2hhbGwgbm90IGJlIHN0cm9rZWQgaWYgdGhlIOKAmHN0cm9rZS1saW5lY2Fw
4oCZIHByb3BlcnR5IGhhcyBhIHZhbHVlIG9mIGJ1dHQKLSAgICAvLyBidXQgc2hhbGwgYmUgc3Ry
b2tlZCBpZiB0aGUg4oCYc3Ryb2tlLWxpbmVjYXDigJkgcHJvcGVydHkgaGFzIGEgdmFsdWUgb2Yg
cm91bmQgb3Igc3F1YXJlCi0gICAgcmV0dXJuIHN0eWxlKCktPnN2Z1N0eWxlKCktPmhhc1N0cm9r
ZSgpICYmIHN0eWxlKCktPnN2Z1N0eWxlKCktPmNhcFN0eWxlKCkgIT0gQnV0dENhcCAmJiAhbV9m
aWxsQm91bmRpbmdCb3gud2lkdGgoKSAmJiAhbV9maWxsQm91bmRpbmdCb3guaGVpZ2h0KCk7Ci19
Ci0KLUZsb2F0UmVjdCBSZW5kZXJTVkdQYXRoOjp6ZXJvTGVuZ3RoU3VicGF0aFJlY3QoKSBjb25z
dAotewotICAgIFNWR0VsZW1lbnQqIHN2Z0VsZW1lbnQgPSBzdGF0aWNfY2FzdDxTVkdFbGVtZW50
Kj4obm9kZSgpKTsKLSAgICBmbG9hdCBzdHJva2VXaWR0aCA9IHN0eWxlKCktPnN2Z1N0eWxlKCkt
PnN0cm9rZVdpZHRoKCkudmFsdWUoc3ZnRWxlbWVudCk7Ci0gICAgcmV0dXJuIEZsb2F0UmVjdCht
X2ZpbGxCb3VuZGluZ0JveC54KCkgLSBzdHJva2VXaWR0aCAvIDIsIG1fZmlsbEJvdW5kaW5nQm94
LnkoKSAtIHN0cm9rZVdpZHRoIC8gMiwgc3Ryb2tlV2lkdGgsIHN0cm9rZVdpZHRoKTsKLX0KLQot
dm9pZCBSZW5kZXJTVkdQYXRoOjpzZXR1cFNxdWFyZUNhcFBhdGgoUGF0aComIHVzZVBhdGgsIGlu
dCYgYXBwbHlNb2RlKQotewotICAgIC8vIFNwZWMoMTEuNCk6IEFueSB6ZXJvIGxlbmd0aCBzdWJw
YXRoIHNoYWxsIG5vdCBiZSBzdHJva2VkIGlmIHRoZSDigJhzdHJva2UtbGluZWNhcOKAmSBwcm9w
ZXJ0eSBoYXMgYSB2YWx1ZSBvZiBidXR0Ci0gICAgLy8gYnV0IHNoYWxsIGJlIHN0cm9rZWQgaWYg
dGhlIOKAmHN0cm9rZS1saW5lY2Fw4oCZIHByb3BlcnR5IGhhcyBhIHZhbHVlIG9mIHJvdW5kIG9y
IHNxdWFyZQotICAgIERFRklORV9TVEFUSUNfTE9DQUwoUGF0aCwgdGVtcFBhdGgsICgpKTsKLQot
ICAgIGFwcGx5TW9kZSA9IEFwcGx5VG9GaWxsTW9kZTsKLSAgICB1c2VQYXRoID0gJnRlbXBQYXRo
OwotICAgIHVzZVBhdGgtPmNsZWFyKCk7Ci0gICAgaWYgKHN0eWxlKCktPnN2Z1N0eWxlKCktPmNh
cFN0eWxlKCkgPT0gU3F1YXJlQ2FwKQotICAgICAgICB1c2VQYXRoLT5hZGRSZWN0KHplcm9MZW5n
dGhTdWJwYXRoUmVjdCgpKTsKLSAgICBlbHNlCi0gICAgICAgIHVzZVBhdGgtPmFkZEVsbGlwc2Uo
emVyb0xlbmd0aFN1YnBhdGhSZWN0KCkpOwotfQotCi1ib29sIFJlbmRlclNWR1BhdGg6OnNldHVw
Tm9uU2NhbGluZ1N0cm9rZVBhdGgoUGF0aComIHVzZVBhdGgsIEdyYXBoaWNzQ29udGV4dFN0YXRl
U2F2ZXImIHN0YXRlU2F2ZXIpCit2b2lkIFJlbmRlclNWR1BhdGg6OmluZmxhdGVXaXRoTWFya2Vy
Qm91bmRzKCkKIHsKLSAgICBERUZJTkVfU1RBVElDX0xPQ0FMKFBhdGgsIHRlbXBQYXRoLCAoKSk7
Ci0KLSAgICBTVkdTdHlsZWRUcmFuc2Zvcm1hYmxlRWxlbWVudCogZWxlbWVudCA9IHN0YXRpY19j
YXN0PFNWR1N0eWxlZFRyYW5zZm9ybWFibGVFbGVtZW50Kj4obm9kZSgpKTsKLSAgICBBZmZpbmVU
cmFuc2Zvcm0gbm9uU2NhbGluZ1N0cm9rZVRyYW5zZm9ybSA9IGVsZW1lbnQtPmdldFNjcmVlbkNU
TShTVkdMb2NhdGFibGU6OkRpc2FsbG93U3R5bGVVcGRhdGUpOwotICAgIGlmICghbm9uU2NhbGlu
Z1N0cm9rZVRyYW5zZm9ybS5pc0ludmVydGlibGUoKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwot
Ci0gICAgdGVtcFBhdGggPSBtX3BhdGg7Ci0gICAgdXNlUGF0aCA9ICZ0ZW1wUGF0aDsKLSAgICB0
ZW1wUGF0aC50cmFuc2Zvcm0obm9uU2NhbGluZ1N0cm9rZVRyYW5zZm9ybSk7Ci0KLSAgICBzdGF0
ZVNhdmVyLnNhdmUoKTsKLSAgICBzdGF0ZVNhdmVyLmNvbnRleHQoKS0+Y29uY2F0Q1RNKG5vblNj
YWxpbmdTdHJva2VUcmFuc2Zvcm0uaW52ZXJzZSgpKTsKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQot
dm9pZCBSZW5kZXJTVkdQYXRoOjpmaWxsQW5kU3Ryb2tlUGF0aChHcmFwaGljc0NvbnRleHQqIGNv
bnRleHQpCi17Ci0gICAgUmVuZGVyU3R5bGUqIHN0eWxlID0gdGhpcy0+c3R5bGUoKTsKLQotICAg
IENvbG9yIGZhbGxiYWNrQ29sb3I7Ci0gICAgaWYgKFJlbmRlclNWR1Jlc291cmNlKiBmaWxsUGFp
bnRpbmdSZXNvdXJjZSA9IFJlbmRlclNWR1Jlc291cmNlOjpmaWxsUGFpbnRpbmdSZXNvdXJjZSh0
aGlzLCBzdHlsZSwgZmFsbGJhY2tDb2xvcikpIHsKLSAgICAgICAgaWYgKGZpbGxQYWludGluZ1Jl
c291cmNlLT5hcHBseVJlc291cmNlKHRoaXMsIHN0eWxlLCBjb250ZXh0LCBBcHBseVRvRmlsbE1v
ZGUpKQotICAgICAgICAgICAgZmlsbFBhaW50aW5nUmVzb3VyY2UtPnBvc3RBcHBseVJlc291cmNl
KHRoaXMsIGNvbnRleHQsIEFwcGx5VG9GaWxsTW9kZSwgJm1fcGF0aCk7Ci0gICAgICAgIGVsc2Ug
aWYgKGZhbGxiYWNrQ29sb3IuaXNWYWxpZCgpKSB7Ci0gICAgICAgICAgICBSZW5kZXJTVkdSZXNv
dXJjZVNvbGlkQ29sb3IqIGZhbGxiYWNrUmVzb3VyY2UgPSBSZW5kZXJTVkdSZXNvdXJjZTo6c2hh
cmVkU29saWRQYWludGluZ1Jlc291cmNlKCk7Ci0gICAgICAgICAgICBmYWxsYmFja1Jlc291cmNl
LT5zZXRDb2xvcihmYWxsYmFja0NvbG9yKTsKLSAgICAgICAgICAgIGlmIChmYWxsYmFja1Jlc291
cmNlLT5hcHBseVJlc291cmNlKHRoaXMsIHN0eWxlLCBjb250ZXh0LCBBcHBseVRvRmlsbE1vZGUp
KQotICAgICAgICAgICAgICAgIGZhbGxiYWNrUmVzb3VyY2UtPnBvc3RBcHBseVJlc291cmNlKHRo
aXMsIGNvbnRleHQsIEFwcGx5VG9GaWxsTW9kZSwgJm1fcGF0aCk7Ci0gICAgICAgIH0KLSAgICB9
Ci0KLSAgICBmYWxsYmFja0NvbG9yID0gQ29sb3IoKTsKLSAgICBSZW5kZXJTVkdSZXNvdXJjZSog
c3Ryb2tlUGFpbnRpbmdSZXNvdXJjZSA9IFJlbmRlclNWR1Jlc291cmNlOjpzdHJva2VQYWludGlu
Z1Jlc291cmNlKHRoaXMsIHN0eWxlLCBmYWxsYmFja0NvbG9yKTsKLSAgICBpZiAoIXN0cm9rZVBh
aW50aW5nUmVzb3VyY2UpCi0gICAgICAgIHJldHVybjsKLQotICAgIFBhdGgqIHVzZVBhdGggPSAm
bV9wYXRoOwotICAgIGludCBhcHBseU1vZGUgPSBBcHBseVRvU3Ryb2tlTW9kZTsKLQotICAgIGJv
b2wgbm9uU2NhbGluZ1N0cm9rZSA9IHN0eWxlLT5zdmdTdHlsZSgpLT52ZWN0b3JFZmZlY3QoKSA9
PSBWRV9OT05fU0NBTElOR19TVFJPS0U7Ci0KLSAgICBHcmFwaGljc0NvbnRleHRTdGF0ZVNhdmVy
IHN0YXRlU2F2ZXIoKmNvbnRleHQsIGZhbHNlKTsKLQotICAgIC8vIFNwZWMoMTEuNCk6IEFueSB6
ZXJvIGxlbmd0aCBzdWJwYXRoIHNoYWxsIG5vdCBiZSBzdHJva2VkIGlmIHRoZSDigJhzdHJva2Ut
bGluZWNhcOKAmSBwcm9wZXJ0eSBoYXMgYSB2YWx1ZSBvZiBidXR0Ci0gICAgLy8gYnV0IHNoYWxs
IGJlIHN0cm9rZWQgaWYgdGhlIOKAmHN0cm9rZS1saW5lY2Fw4oCZIHByb3BlcnR5IGhhcyBhIHZh
bHVlIG9mIHJvdW5kIG9yIHNxdWFyZQotICAgIC8vIEZJWE1FOiB0aGlzIGRvZXMgbm90IHdvcmsg
Zm9yIHplcm8tbGVuZ3RoIHN1YnBhdGhzLCBvbmx5IHdoZW4gdG90YWwgcGF0aCBpcyB6ZXJvLWxl
bmd0aAotICAgIGlmIChzaG91bGRTdHJva2VaZXJvTGVuZ3RoU3VicGF0aCgpKQotICAgICAgICBz
ZXR1cFNxdWFyZUNhcFBhdGgodXNlUGF0aCwgYXBwbHlNb2RlKTsKLSAgICBlbHNlIGlmIChub25T
Y2FsaW5nU3Ryb2tlKSB7Ci0gICAgICAgaWYgKCFzZXR1cE5vblNjYWxpbmdTdHJva2VQYXRoKHVz
ZVBhdGgsIHN0YXRlU2F2ZXIpKQotICAgICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgaWYg
KHN0cm9rZVBhaW50aW5nUmVzb3VyY2UtPmFwcGx5UmVzb3VyY2UodGhpcywgc3R5bGUsIGNvbnRl
eHQsIGFwcGx5TW9kZSkpCi0gICAgICAgIHN0cm9rZVBhaW50aW5nUmVzb3VyY2UtPnBvc3RBcHBs
eVJlc291cmNlKHRoaXMsIGNvbnRleHQsIGFwcGx5TW9kZSwgdXNlUGF0aCk7Ci0gICAgZWxzZSBp
ZiAoZmFsbGJhY2tDb2xvci5pc1ZhbGlkKCkpIHsKLSAgICAgICAgUmVuZGVyU1ZHUmVzb3VyY2VT
b2xpZENvbG9yKiBmYWxsYmFja1Jlc291cmNlID0gUmVuZGVyU1ZHUmVzb3VyY2U6OnNoYXJlZFNv
bGlkUGFpbnRpbmdSZXNvdXJjZSgpOwotICAgICAgICBmYWxsYmFja1Jlc291cmNlLT5zZXRDb2xv
cihmYWxsYmFja0NvbG9yKTsKLSAgICAgICAgaWYgKGZhbGxiYWNrUmVzb3VyY2UtPmFwcGx5UmVz
b3VyY2UodGhpcywgc3R5bGUsIGNvbnRleHQsIGFwcGx5TW9kZSkpCi0gICAgICAgICAgICBmYWxs
YmFja1Jlc291cmNlLT5wb3N0QXBwbHlSZXNvdXJjZSh0aGlzLCBjb250ZXh0LCBhcHBseU1vZGUs
IHVzZVBhdGgpOwotICAgIH0KLX0KLQotdm9pZCBSZW5kZXJTVkdQYXRoOjpwYWludChQYWludElu
Zm8mIHBhaW50SW5mbywgY29uc3QgTGF5b3V0UG9pbnQmKQotewotICAgIGlmIChwYWludEluZm8u
Y29udGV4dC0+cGFpbnRpbmdEaXNhYmxlZCgpIHx8IHN0eWxlKCktPnZpc2liaWxpdHkoKSA9PSBI
SURERU4gfHwgbV9wYXRoLmlzRW1wdHkoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgRmxvYXRS
ZWN0IGJvdW5kaW5nQm94ID0gcmVwYWludFJlY3RJbkxvY2FsQ29vcmRpbmF0ZXMoKTsKLSAgICBp
ZiAoIVNWR1JlbmRlclN1cHBvcnQ6OnBhaW50SW5mb0ludGVyc2VjdHNSZXBhaW50UmVjdChib3Vu
ZGluZ0JveCwgbV9sb2NhbFRyYW5zZm9ybSwgcGFpbnRJbmZvKSkKLSAgICAgICAgcmV0dXJuOwot
Ci0gICAgUGFpbnRJbmZvIGNoaWxkUGFpbnRJbmZvKHBhaW50SW5mbyk7Ci0gICAgYm9vbCBkcmF3
c091dGxpbmUgPSBzdHlsZSgpLT5vdXRsaW5lV2lkdGgoKSAmJiAoY2hpbGRQYWludEluZm8ucGhh
c2UgPT0gUGFpbnRQaGFzZU91dGxpbmUgfHwgY2hpbGRQYWludEluZm8ucGhhc2UgPT0gUGFpbnRQ
aGFzZVNlbGZPdXRsaW5lKTsKLSAgICBpZiAoZHJhd3NPdXRsaW5lIHx8IGNoaWxkUGFpbnRJbmZv
LnBoYXNlID09IFBhaW50UGhhc2VGb3JlZ3JvdW5kKSB7Ci0gICAgICAgIEdyYXBoaWNzQ29udGV4
dFN0YXRlU2F2ZXIgc3RhdGVTYXZlcigqY2hpbGRQYWludEluZm8uY29udGV4dCk7Ci0gICAgICAg
IGNoaWxkUGFpbnRJbmZvLmFwcGx5VHJhbnNmb3JtKG1fbG9jYWxUcmFuc2Zvcm0pOwotCi0gICAg
ICAgIGlmIChjaGlsZFBhaW50SW5mby5waGFzZSA9PSBQYWludFBoYXNlRm9yZWdyb3VuZCkgewot
ICAgICAgICAgICAgUGFpbnRJbmZvIHNhdmVkSW5mbyhjaGlsZFBhaW50SW5mbyk7Ci0KLSAgICAg
ICAgICAgIGlmIChTVkdSZW5kZXJTdXBwb3J0OjpwcmVwYXJlVG9SZW5kZXJTVkdDb250ZW50KHRo
aXMsIGNoaWxkUGFpbnRJbmZvKSkgewotICAgICAgICAgICAgICAgIGNvbnN0IFNWR1JlbmRlclN0
eWxlKiBzdmdTdHlsZSA9IHN0eWxlKCktPnN2Z1N0eWxlKCk7Ci0gICAgICAgICAgICAgICAgaWYg
KHN2Z1N0eWxlLT5zaGFwZVJlbmRlcmluZygpID09IFNSX0NSSVNQRURHRVMpCi0gICAgICAgICAg
ICAgICAgICAgIGNoaWxkUGFpbnRJbmZvLmNvbnRleHQtPnNldFNob3VsZEFudGlhbGlhcyhmYWxz
ZSk7Ci0KLSAgICAgICAgICAgICAgICBmaWxsQW5kU3Ryb2tlUGF0aChjaGlsZFBhaW50SW5mby5j
b250ZXh0KTsKLQotICAgICAgICAgICAgICAgIGlmIChzdmdTdHlsZS0+aGFzTWFya2VycygpKQot
ICAgICAgICAgICAgICAgICAgICBtX21hcmtlckxheW91dEluZm8uZHJhd01hcmtlcnMoY2hpbGRQ
YWludEluZm8pOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBTVkdSZW5kZXJTdXBwb3J0
OjpmaW5pc2hSZW5kZXJTVkdDb250ZW50KHRoaXMsIGNoaWxkUGFpbnRJbmZvLCBzYXZlZEluZm8u
Y29udGV4dCk7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAoZHJhd3NPdXRsaW5lKQotICAgICAg
ICAgICAgcGFpbnRPdXRsaW5lKGNoaWxkUGFpbnRJbmZvLmNvbnRleHQsIEludFJlY3QoYm91bmRp
bmdCb3gpKTsKLSAgICB9Ci19Ci0KLS8vIFRoaXMgbWV0aG9kIGlzIGNhbGxlZCBmcm9tIGluc2lk
ZSBwYWludE91dGxpbmUoKSBzaW5jZSB3ZSBjYWxsIHBhaW50T3V0bGluZSgpCi0vLyB3aGlsZSB0
cmFuc2Zvcm1lZCB0byBvdXIgY29vcmQgc3lzdGVtLCByZXR1cm4gbG9jYWwgY29vcmRzCi12b2lk
IFJlbmRlclNWR1BhdGg6OmFkZEZvY3VzUmluZ1JlY3RzKFZlY3RvcjxMYXlvdXRSZWN0PiYgcmVj
dHMsIGNvbnN0IExheW91dFBvaW50JikgCi17Ci0gICAgTGF5b3V0UmVjdCByZWN0ID0gZW5jbG9z
aW5nTGF5b3V0UmVjdChyZXBhaW50UmVjdEluTG9jYWxDb29yZGluYXRlcygpKTsKLSAgICBpZiAo
IXJlY3QuaXNFbXB0eSgpKQotICAgICAgICByZWN0cy5hcHBlbmQocmVjdCk7Ci19Ci0KLWJvb2wg
UmVuZGVyU1ZHUGF0aDo6bm9kZUF0RmxvYXRQb2ludChjb25zdCBIaXRUZXN0UmVxdWVzdCYgcmVx
dWVzdCwgSGl0VGVzdFJlc3VsdCYgcmVzdWx0LCBjb25zdCBGbG9hdFBvaW50JiBwb2ludEluUGFy
ZW50LCBIaXRUZXN0QWN0aW9uIGhpdFRlc3RBY3Rpb24pCi17Ci0gICAgLy8gV2Ugb25seSBkcmF3
IGluIHRoZSBmb3Jncm91bmQgcGhhc2UsIHNvIHdlIG9ubHkgaGl0LXRlc3QgdGhlbi4KLSAgICBp
ZiAoaGl0VGVzdEFjdGlvbiAhPSBIaXRUZXN0Rm9yZWdyb3VuZCkKLSAgICAgICAgcmV0dXJuIGZh
bHNlOwotCi0gICAgRmxvYXRQb2ludCBsb2NhbFBvaW50ID0gbV9sb2NhbFRyYW5zZm9ybS5pbnZl
cnNlKCkubWFwUG9pbnQocG9pbnRJblBhcmVudCk7Ci0KLSAgICBpZiAoIVNWR1JlbmRlclN1cHBv
cnQ6OnBvaW50SW5DbGlwcGluZ0FyZWEodGhpcywgbG9jYWxQb2ludCkpCi0gICAgICAgIHJldHVy
biBmYWxzZTsKLQotICAgIFBvaW50ZXJFdmVudHNIaXRSdWxlcyBoaXRSdWxlcyhQb2ludGVyRXZl
bnRzSGl0UnVsZXM6OlNWR19QQVRIX0hJVFRFU1RJTkcsIHJlcXVlc3QsIHN0eWxlKCktPnBvaW50
ZXJFdmVudHMoKSk7Ci0gICAgYm9vbCBpc1Zpc2libGUgPSAoc3R5bGUoKS0+dmlzaWJpbGl0eSgp
ID09IFZJU0lCTEUpOwotICAgIGlmIChpc1Zpc2libGUgfHwgIWhpdFJ1bGVzLnJlcXVpcmVWaXNp
YmxlKSB7Ci0gICAgICAgIGNvbnN0IFNWR1JlbmRlclN0eWxlKiBzdmdTdHlsZSA9IHN0eWxlKCkt
PnN2Z1N0eWxlKCk7Ci0gICAgICAgIFdpbmRSdWxlIGZpbGxSdWxlID0gc3ZnU3R5bGUtPmZpbGxS
dWxlKCk7Ci0gICAgICAgIGlmIChyZXF1ZXN0LnN2Z0NsaXBDb250ZW50KCkpCi0gICAgICAgICAg
ICBmaWxsUnVsZSA9IHN2Z1N0eWxlLT5jbGlwUnVsZSgpOwotICAgICAgICBpZiAoKGhpdFJ1bGVz
LmNhbkhpdFN0cm9rZSAmJiAoc3ZnU3R5bGUtPmhhc1N0cm9rZSgpIHx8ICFoaXRSdWxlcy5yZXF1
aXJlU3Ryb2tlKSAmJiBzdHJva2VDb250YWlucyhsb2NhbFBvaW50LCBoaXRSdWxlcy5yZXF1aXJl
U3Ryb2tlKSkKLSAgICAgICAgICAgIHx8IChoaXRSdWxlcy5jYW5IaXRGaWxsICYmIChzdmdTdHls
ZS0+aGFzRmlsbCgpIHx8ICFoaXRSdWxlcy5yZXF1aXJlRmlsbCkgJiYgZmlsbENvbnRhaW5zKGxv
Y2FsUG9pbnQsIGhpdFJ1bGVzLnJlcXVpcmVGaWxsLCBmaWxsUnVsZSkpKSB7Ci0gICAgICAgICAg
ICB1cGRhdGVIaXRUZXN0UmVzdWx0KHJlc3VsdCwgcm91bmRlZExheW91dFBvaW50KGxvY2FsUG9p
bnQpKTsKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICB9Ci0gICAgfQotICAgIHJl
dHVybiBmYWxzZTsKLX0KLQotRmxvYXRSZWN0IFJlbmRlclNWR1BhdGg6OmNhbGN1bGF0ZU1hcmtl
ckJvdW5kc0lmTmVlZGVkKCkKLXsKLSAgICBTVkdFbGVtZW50KiBzdmdFbGVtZW50ID0gc3RhdGlj
X2Nhc3Q8U1ZHRWxlbWVudCo+KG5vZGUoKSk7Ci0gICAgQVNTRVJUKHN2Z0VsZW1lbnQgJiYgc3Zn
RWxlbWVudC0+ZG9jdW1lbnQoKSk7Ci0gICAgaWYgKCFzdmdFbGVtZW50LT5pc1N0eWxlZCgpKQot
ICAgICAgICByZXR1cm4gRmxvYXRSZWN0KCk7Ci0KLSAgICBTVkdTdHlsZWRFbGVtZW50KiBzdHls
ZWRFbGVtZW50ID0gc3RhdGljX2Nhc3Q8U1ZHU3R5bGVkRWxlbWVudCo+KHN2Z0VsZW1lbnQpOwot
ICAgIGlmICghc3R5bGVkRWxlbWVudC0+c3VwcG9ydHNNYXJrZXJzKCkpCi0gICAgICAgIHJldHVy
biBGbG9hdFJlY3QoKTsKLQotICAgIGNvbnN0IFNWR1JlbmRlclN0eWxlKiBzdmdTdHlsZSA9IHN0
eWxlKCktPnN2Z1N0eWxlKCk7Ci0gICAgQVNTRVJUKHN2Z1N0eWxlLT5oYXNNYXJrZXJzKCkpOwot
Ci0gICAgU1ZHUmVzb3VyY2VzKiByZXNvdXJjZXMgPSBTVkdSZXNvdXJjZXNDYWNoZTo6Y2FjaGVk
UmVzb3VyY2VzRm9yUmVuZGVyT2JqZWN0KHRoaXMpOwotICAgIGlmICghcmVzb3VyY2VzKQotICAg
ICAgICByZXR1cm4gRmxvYXRSZWN0KCk7Ci0KLSAgICBSZW5kZXJTVkdSZXNvdXJjZU1hcmtlciog
bWFya2VyU3RhcnQgPSByZXNvdXJjZXMtPm1hcmtlclN0YXJ0KCk7Ci0gICAgUmVuZGVyU1ZHUmVz
b3VyY2VNYXJrZXIqIG1hcmtlck1pZCA9IHJlc291cmNlcy0+bWFya2VyTWlkKCk7Ci0gICAgUmVu
ZGVyU1ZHUmVzb3VyY2VNYXJrZXIqIG1hcmtlckVuZCA9IHJlc291cmNlcy0+bWFya2VyRW5kKCk7
Ci0gICAgaWYgKCFtYXJrZXJTdGFydCAmJiAhbWFya2VyTWlkICYmICFtYXJrZXJFbmQpCi0gICAg
ICAgIHJldHVybiBGbG9hdFJlY3QoKTsKLQotICAgIHJldHVybiBtX21hcmtlckxheW91dEluZm8u
Y2FsY3VsYXRlQm91bmRhcmllcyhtYXJrZXJTdGFydCwgbWFya2VyTWlkLCBtYXJrZXJFbmQsIHN2
Z1N0eWxlLT5zdHJva2VXaWR0aCgpLnZhbHVlKHN2Z0VsZW1lbnQpLCBtX3BhdGgpOwotfQotCi12
b2lkIFJlbmRlclNWR1BhdGg6OnVwZGF0ZUNhY2hlZEJvdW5kYXJpZXMoKQotewotICAgIGlmICht
X3BhdGguaXNFbXB0eSgpKSB7Ci0gICAgICAgIG1fZmlsbEJvdW5kaW5nQm94ID0gRmxvYXRSZWN0
KCk7Ci0gICAgICAgIG1fc3Ryb2tlQW5kTWFya2VyQm91bmRpbmdCb3ggPSBGbG9hdFJlY3QoKTsK
LSAgICAgICAgbV9yZXBhaW50Qm91bmRpbmdCb3ggPSBGbG9hdFJlY3QoKTsKLSAgICAgICAgcmV0
dXJuOwotICAgIH0KLQotICAgIC8vIENhY2hlIF91bmNsaXBwZWRfIGZpbGwgYm91bmRpbmcgYm94
LCB1c2VkIGZvciBjYWxjdWxhdGlvbnMgaW4gcmVzb3VyY2VzCi0gICAgbV9maWxsQm91bmRpbmdC
b3ggPSBtX3BhdGguYm91bmRpbmdSZWN0KCk7Ci0KLSAgICAvLyBTcGVjKDExLjQpOiBBbnkgemVy
byBsZW5ndGggc3VicGF0aCBzaGFsbCBub3QgYmUgc3Ryb2tlZCBpZiB0aGUg4oCYc3Ryb2tlLWxp
bmVjYXDigJkgcHJvcGVydHkgaGFzIGEgdmFsdWUgb2YgYnV0dAotICAgIC8vIGJ1dCBzaGFsbCBi
ZSBzdHJva2VkIGlmIHRoZSDigJhzdHJva2UtbGluZWNhcOKAmSBwcm9wZXJ0eSBoYXMgYSB2YWx1
ZSBvZiByb3VuZCBvciBzcXVhcmUKLSAgICBpZiAoc2hvdWxkU3Ryb2tlWmVyb0xlbmd0aFN1YnBh
dGgoKSkgewotICAgICAgICBtX3N0cm9rZUFuZE1hcmtlckJvdW5kaW5nQm94ID0gemVyb0xlbmd0
aFN1YnBhdGhSZWN0KCk7Ci0gICAgICAgIC8vIENhY2hlIHNtYWxsZXN0IHBvc3NpYmxlIHJlcGFp
bnQgcmVjdGFuZ2xlCi0gICAgICAgIG1fcmVwYWludEJvdW5kaW5nQm94ID0gbV9zdHJva2VBbmRN
YXJrZXJCb3VuZGluZ0JveDsKLSAgICAgICAgU1ZHUmVuZGVyU3VwcG9ydDo6aW50ZXJzZWN0UmVw
YWludFJlY3RXaXRoUmVzb3VyY2VzKHRoaXMsIG1fcmVwYWludEJvdW5kaW5nQm94KTsKLSAgICAg
ICAgcmV0dXJuOwotICAgIH0KLQotICAgIC8vIENhY2hlIF91bmNsaXBwZWRfIHN0cm9rZSBib3Vu
ZGluZyBib3gsIHVzZWQgZm9yIGNhbGN1bGF0aW9ucyBpbiByZXNvdXJjZXMgKGluY2x1ZGVzIG1h
cmtlciBib3VuZGFyaWVzKQotICAgIG1fc3Ryb2tlQW5kTWFya2VyQm91bmRpbmdCb3ggPSBtX2Zp
bGxCb3VuZGluZ0JveDsKLQotICAgIGNvbnN0IFNWR1JlbmRlclN0eWxlKiBzdmdTdHlsZSA9IHN0
eWxlKCktPnN2Z1N0eWxlKCk7Ci0gICAgaWYgKHN2Z1N0eWxlLT5oYXNTdHJva2UoKSkgewotICAg
ICAgICBCb3VuZGluZ1JlY3RTdHJva2VTdHlsZUFwcGxpZXIgc3Ryb2tlU3R5bGUodGhpcywgc3R5
bGUoKSk7Ci0gICAgICAgIG1fc3Ryb2tlQW5kTWFya2VyQm91bmRpbmdCb3gudW5pdGUobV9wYXRo
LnN0cm9rZUJvdW5kaW5nUmVjdCgmc3Ryb2tlU3R5bGUpKTsKLSAgICB9Ci0KLSAgICBpZiAoc3Zn
U3R5bGUtPmhhc01hcmtlcnMoKSkgeworICAgIGlmIChzdHlsZSgpLT5zdmdTdHlsZSgpLT5oYXNN
YXJrZXJzKCkpIHsKICAgICAgICAgRmxvYXRSZWN0IG1hcmtlckJvdW5kcyA9IGNhbGN1bGF0ZU1h
cmtlckJvdW5kc0lmTmVlZGVkKCk7Ci0gICAgICAgIGlmICghbWFya2VyQm91bmRzLmlzRW1wdHko
KSkKLSAgICAgICAgICAgIG1fc3Ryb2tlQW5kTWFya2VyQm91bmRpbmdCb3gudW5pdGUobWFya2Vy
Qm91bmRzKTsKKyAgICAgICAgaWYgKCFtYXJrZXJCb3VuZHMuaXNFbXB0eSgpKSB7CisgICAgICAg
ICAgICBGbG9hdFJlY3Qgc3Ryb2tlUmVjdChzdHJva2VCb3VuZGluZ0JveCgpKTsKKyAgICAgICAg
ICAgIHN0cm9rZVJlY3QudW5pdGUobWFya2VyQm91bmRzKTsKKyAgICAgICAgICAgIHNldFN0cm9r
ZUFuZE1hcmtlckJvdW5kaW5nQm94KHN0cm9rZVJlY3QpOworICAgICAgICB9CiAgICAgfQotCi0g
ICAgLy8gQ2FjaGUgc21hbGxlc3QgcG9zc2libGUgcmVwYWludCByZWN0YW5nbGUKLSAgICBtX3Jl
cGFpbnRCb3VuZGluZ0JveCA9IG1fc3Ryb2tlQW5kTWFya2VyQm91bmRpbmdCb3g7Ci0gICAgU1ZH
UmVuZGVyU3VwcG9ydDo6aW50ZXJzZWN0UmVwYWludFJlY3RXaXRoUmVzb3VyY2VzKHRoaXMsIG1f
cmVwYWludEJvdW5kaW5nQm94KTsKIH0KIAogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdQYXRoLmggYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
c3ZnL1JlbmRlclNWR1BhdGguaAppbmRleCA5OGU2MDhkLi42MGZlZTk4IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1BhdGguaAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1BhdGguaApAQCAtNCw2ICs0LDggQEAKICAq
IENvcHlyaWdodCAoQykgMjAwNSBFcmljIFNlaWRlbCA8ZXJpY0B3ZWJraXQub3JnPgogICogQ29w
eXJpZ2h0IChDKSAyMDA2IEFwcGxlIENvbXB1dGVyLCBJbmMKICAqIENvcHlyaWdodCAoQykgMjAw
OSBHb29nbGUsIEluYy4KKyAqIENvcHlyaWdodCAoQykgMjAxMSBSZW5hdGEgSG9kb3ZhbiA8cmVu
aUB3ZWJraXQub3JnPgorICogQ29weXJpZ2h0IChDKSAyMDExIFVuaXZlcnNpdHkgb2YgU3plZ2Vk
CiAgKgogICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmli
dXRlIGl0IGFuZC9vcgogICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExp
YnJhcnkgR2VuZXJhbCBQdWJsaWMKQEAgLTI1LDg2ICsyNywyMiBAQAogI2RlZmluZSBSZW5kZXJT
VkdQYXRoX2gKIAogI2lmIEVOQUJMRShTVkcpCi0jaW5jbHVkZSAiQWZmaW5lVHJhbnNmb3JtLmgi
Ci0jaW5jbHVkZSAiRmxvYXRSZWN0LmgiCi0jaW5jbHVkZSAiUmVuZGVyU1ZHTW9kZWxPYmplY3Qu
aCIKLSNpbmNsdWRlICJTVkdNYXJrZXJMYXlvdXRJbmZvLmgiCisjaW5jbHVkZSAiUmVuZGVyU1ZH
U2hhcGUuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1jbGFzcyBGbG9hdFBvaW50OwotY2xh
c3MgR3JhcGhpY3NDb250ZXh0U3RhdGVTYXZlcjsKLWNsYXNzIFJlbmRlclNWR0NvbnRhaW5lcjsK
LWNsYXNzIFNWR1N0eWxlZFRyYW5zZm9ybWFibGVFbGVtZW50OwotCi1jbGFzcyBSZW5kZXJTVkdQ
YXRoIDogcHVibGljIFJlbmRlclNWR01vZGVsT2JqZWN0IHsKK2NsYXNzIFJlbmRlclNWR1BhdGgg
OiBwdWJsaWMgUmVuZGVyU1ZHU2hhcGUgewogcHVibGljOgotICAgIGV4cGxpY2l0IFJlbmRlclNW
R1BhdGgoU1ZHU3R5bGVkVHJhbnNmb3JtYWJsZUVsZW1lbnQqKTsKKyAgICBSZW5kZXJTVkdQYXRo
KFNWR1N0eWxlZFRyYW5zZm9ybWFibGVFbGVtZW50Kik7CiAgICAgdmlydHVhbCB+UmVuZGVyU1ZH
UGF0aCgpOwogCi0gICAgY29uc3QgUGF0aCYgcGF0aCgpIGNvbnN0IHsgcmV0dXJuIG1fcGF0aDsg
fQotICAgIHZvaWQgc2V0TmVlZHNQYXRoVXBkYXRlKCkgeyBtX25lZWRzUGF0aFVwZGF0ZSA9IHRy
dWU7IH0KLSAgICB2aXJ0dWFsIHZvaWQgc2V0TmVlZHNCb3VuZGFyaWVzVXBkYXRlKCkgeyBtX25l
ZWRzQm91bmRhcmllc1VwZGF0ZSA9IHRydWU7IH0KLSAgICB2aXJ0dWFsIHZvaWQgc2V0TmVlZHNU
cmFuc2Zvcm1VcGRhdGUoKSB7IG1fbmVlZHNUcmFuc2Zvcm1VcGRhdGUgPSB0cnVlOyB9Ci0KIHBy
aXZhdGU6Ci0gICAgLy8gSGl0LWRldGVjdGlvbiBzZXBlcmF0ZWQgZm9yIHRoZSBmaWxsIGFuZCB0
aGUgc3Ryb2tlCi0gICAgYm9vbCBmaWxsQ29udGFpbnMoY29uc3QgRmxvYXRQb2ludCYsIGJvb2wg
cmVxdWlyZXNGaWxsID0gdHJ1ZSwgV2luZFJ1bGUgZmlsbFJ1bGUgPSBSVUxFX05PTlpFUk8pOwot
ICAgIGJvb2wgc3Ryb2tlQ29udGFpbnMoY29uc3QgRmxvYXRQb2ludCYsIGJvb2wgcmVxdWlyZXNT
dHJva2UgPSB0cnVlKTsKLQotICAgIHZpcnR1YWwgRmxvYXRSZWN0IG9iamVjdEJvdW5kaW5nQm94
KCkgY29uc3QgeyByZXR1cm4gbV9maWxsQm91bmRpbmdCb3g7IH0KLSAgICB2aXJ0dWFsIEZsb2F0
UmVjdCBzdHJva2VCb3VuZGluZ0JveCgpIGNvbnN0IHsgcmV0dXJuIG1fc3Ryb2tlQW5kTWFya2Vy
Qm91bmRpbmdCb3g7IH0KLSAgICB2aXJ0dWFsIEZsb2F0UmVjdCByZXBhaW50UmVjdEluTG9jYWxD
b29yZGluYXRlcygpIGNvbnN0IHsgcmV0dXJuIG1fcmVwYWludEJvdW5kaW5nQm94OyB9Ci0gICAg
dmlydHVhbCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIGxvY2FsVG9QYXJlbnRUcmFuc2Zvcm0oKSBj
b25zdCB7IHJldHVybiBtX2xvY2FsVHJhbnNmb3JtOyB9Ci0KICAgICB2aXJ0dWFsIGJvb2wgaXNT
VkdQYXRoKCkgY29uc3QgeyByZXR1cm4gdHJ1ZTsgfQogICAgIHZpcnR1YWwgY29uc3QgY2hhciog
cmVuZGVyTmFtZSgpIGNvbnN0IHsgcmV0dXJuICJSZW5kZXJTVkdQYXRoIjsgfQogCi0gICAgdmly
dHVhbCB2b2lkIGxheW91dCgpOwotICAgIHZpcnR1YWwgdm9pZCBwYWludChQYWludEluZm8mLCBj
b25zdCBMYXlvdXRQb2ludCYpOwotICAgIHZpcnR1YWwgdm9pZCBhZGRGb2N1c1JpbmdSZWN0cyhW
ZWN0b3I8TGF5b3V0UmVjdD4mLCBjb25zdCBMYXlvdXRQb2ludCYpOwotCi0gICAgdmlydHVhbCBi
b29sIG5vZGVBdEZsb2F0UG9pbnQoY29uc3QgSGl0VGVzdFJlcXVlc3QmLCBIaXRUZXN0UmVzdWx0
JiwgY29uc3QgRmxvYXRQb2ludCYgcG9pbnRJblBhcmVudCwgSGl0VGVzdEFjdGlvbik7Ci0KLSAg
ICBGbG9hdFJlY3QgY2FsY3VsYXRlTWFya2VyQm91bmRzSWZOZWVkZWQoKTsKLSAgICB2b2lkIHVw
ZGF0ZUNhY2hlZEJvdW5kYXJpZXMoKTsKLQotICAgIHZvaWQgc2V0dXBTcXVhcmVDYXBQYXRoKFBh
dGgqJiB1c2VQYXRoLCBpbnQmIGFwcGx5TW9kZSk7Ci0gICAgYm9vbCBzZXR1cE5vblNjYWxpbmdT
dHJva2VQYXRoKFBhdGgqJiB1c2VQYXRoLCBHcmFwaGljc0NvbnRleHRTdGF0ZVNhdmVyJik7Ci0g
ICAgYm9vbCBzaG91bGRTdHJva2VaZXJvTGVuZ3RoU3VicGF0aCgpIGNvbnN0OwotICAgIEZsb2F0
UmVjdCB6ZXJvTGVuZ3RoU3VicGF0aFJlY3QoKSBjb25zdDsKLQotcHJpdmF0ZToKLSAgICB2aXJ0
dWFsIEFmZmluZVRyYW5zZm9ybSBsb2NhbFRyYW5zZm9ybSgpIGNvbnN0IHsgcmV0dXJuIG1fbG9j
YWxUcmFuc2Zvcm07IH0KLSAgICB2b2lkIGZpbGxBbmRTdHJva2VQYXRoKEdyYXBoaWNzQ29udGV4
dCopOwotCi0gICAgYm9vbCBtX25lZWRzQm91bmRhcmllc1VwZGF0ZSA6IDE7Ci0gICAgYm9vbCBt
X25lZWRzUGF0aFVwZGF0ZSA6IDE7Ci0gICAgYm9vbCBtX25lZWRzVHJhbnNmb3JtVXBkYXRlIDog
MTsKLQotICAgIG11dGFibGUgUGF0aCBtX3BhdGg7Ci0gICAgRmxvYXRSZWN0IG1fZmlsbEJvdW5k
aW5nQm94OwotICAgIEZsb2F0UmVjdCBtX3N0cm9rZUFuZE1hcmtlckJvdW5kaW5nQm94OwotICAg
IEZsb2F0UmVjdCBtX3JlcGFpbnRCb3VuZGluZ0JveDsKLSAgICBTVkdNYXJrZXJMYXlvdXRJbmZv
IG1fbWFya2VyTGF5b3V0SW5mbzsKLSAgICBBZmZpbmVUcmFuc2Zvcm0gbV9sb2NhbFRyYW5zZm9y
bTsKKyAgICB2aXJ0dWFsIHZvaWQgaW5mbGF0ZVdpdGhNYXJrZXJCb3VuZHMoKTsKIH07CiAKLWlu
bGluZSBSZW5kZXJTVkdQYXRoKiB0b1JlbmRlclNWR1BhdGgoUmVuZGVyT2JqZWN0KiBvYmplY3Qp
Ci17Ci0gICAgQVNTRVJUKCFvYmplY3QgfHwgb2JqZWN0LT5pc1NWR1BhdGgoKSk7Ci0gICAgcmV0
dXJuIHN0YXRpY19jYXN0PFJlbmRlclNWR1BhdGgqPihvYmplY3QpOwotfQotCi1pbmxpbmUgY29u
c3QgUmVuZGVyU1ZHUGF0aCogdG9SZW5kZXJTVkdQYXRoKGNvbnN0IFJlbmRlck9iamVjdCogb2Jq
ZWN0KQotewotICAgIEFTU0VSVCghb2JqZWN0IHx8IG9iamVjdC0+aXNTVkdQYXRoKCkpOwotICAg
IHJldHVybiBzdGF0aWNfY2FzdDxjb25zdCBSZW5kZXJTVkdQYXRoKj4ob2JqZWN0KTsKLX0KLQot
Ly8gVGhpcyB3aWxsIGNhdGNoIGFueW9uZSBkb2luZyBhbiB1bm5lY2Vzc2FyeSBjYXN0Lgotdm9p
ZCB0b1JlbmRlclNWR1BhdGgoY29uc3QgUmVuZGVyU1ZHUGF0aCopOwotCiB9CiAKICNlbmRpZiAv
LyBFTkFCTEUoU1ZHKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9S
ZW5kZXJTVkdSZWN0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZH
UmVjdC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmEyNDgzYwotLS0g
L2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVj
dC5jcHAKQEAgLTAsMCArMSwxMTYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgVW5pdmVy
c2l0eSBvZiBTemVnZWQKKyAqIENvcHlyaWdodCAoQykgMjAxMSBSZW5hdGEgSG9kb3ZhbiAocmVu
aUB3ZWJraXQub3JnKQorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFVOSVZFUlNJVFkgT0YgU1pFR0VEIGBgQVMgSVMn
JyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVU5JVkVSU0lUWSBPRiBTWkVHRUQgT1IKKyAqIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisg
KiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAi
Y29uZmlnLmgiCisKKyNpZiBFTkFCTEUoU1ZHKQorI2luY2x1ZGUgIlJlbmRlclNWR1JlY3QuaCIK
KworI2luY2x1ZGUgIlNWR05hbWVzLmgiCisjaW5jbHVkZSAiU1ZHUmVjdEVsZW1lbnQuaCIKKwor
bmFtZXNwYWNlIFdlYkNvcmUgeworCitSZW5kZXJTVkdSZWN0OjpSZW5kZXJTVkdSZWN0KFNWR1N0
eWxlZFRyYW5zZm9ybWFibGVFbGVtZW50KiBub2RlKQorICAgIDogUmVuZGVyU1ZHU2hhcGUobm9k
ZSkKK3sKK30KKworUmVuZGVyU1ZHUmVjdDo6flJlbmRlclNWR1JlY3QoKQoreworfQorCit2b2lk
IFJlbmRlclNWR1JlY3Q6OmNyZWF0ZVNoYXBlKCkKK3sKKyAgICAvLyBCZWZvcmUgY3JlYXRpbmcg
YSBuZXcgb2JqZWN0IHdlIG5lZWQgdG8gY2xlYXIgdGhlIGNhY2hlZCBib3VuZGluZyBib3gKKyAg
ICAvLyB0byBhdm9pZCB1c2luZyBnYXJiYWdlLgorICAgIG1fYm91bmRpbmdCb3ggPSBGbG9hdFJl
Y3QoKTsKKyAgICBTVkdSZWN0RWxlbWVudCogcmVjdCA9IHN0YXRpY19jYXN0PFNWR1JlY3RFbGVt
ZW50Kj4obm9kZSgpKTsKKyAgICBBU1NFUlQocmVjdCk7CisgICAgYm9vbCBoYXNSeCA9IHJlY3Qt
Pmhhc0F0dHJpYnV0ZShTVkdOYW1lczo6cnhBdHRyKTsKKyAgICBib29sIGhhc1J5ID0gcmVjdC0+
aGFzQXR0cmlidXRlKFNWR05hbWVzOjpyeUF0dHIpOworICAgIC8vIEZhbGxiYWNrIHRvIFJlbmRl
clNWR1NoYXBlIGlmIHJlY3QgaGFzIHJvdW5kZWQgY29ybmVycy4KKyAgICBpZiAoaGFzUnggfHwg
aGFzUnkpIHsKKyAgICAgICBSZW5kZXJTVkdTaGFwZTo6Y3JlYXRlU2hhcGUoKTsKKyAgICAgICBz
ZXRpc1BhaW50aW5nRmFsbGJhY2sodHJ1ZSk7CisgICAgICAgcmV0dXJuOworICAgIH0KKworICAg
IEZsb2F0U2l6ZSBib3VuZGluZ0JveFNpemUocmVjdC0+d2lkdGgoKS52YWx1ZShyZWN0KSwgcmVj
dC0+aGVpZ2h0KCkudmFsdWUocmVjdCkpOworICAgIGlmIChib3VuZGluZ0JveFNpemUuaXNFbXB0
eSgpKQorICAgICAgICByZXR1cm47CisKKyAgICBtX2JvdW5kaW5nQm94ID0gRmxvYXRSZWN0KEZs
b2F0UG9pbnQocmVjdC0+eCgpLnZhbHVlKHJlY3QpLCByZWN0LT55KCkudmFsdWUocmVjdCkpLCBi
b3VuZGluZ0JveFNpemUpOworICAgIC8vIFRvIGRlY2lkZSBpZiB0aGUgc3Ryb2tlIGNvbnRhaW5z
IGEgcG9pbnQgd2UgY3JlYXRlIHR3byByZWN0cyB3aGljaCByZXByZXNlbnQgdGhlIGlubmVyIGFu
ZAorICAgIC8vIHRoZSBvdXRlciBzdHJva2UgYm9yZGVycy4gQSBzdHJva2UgY29udGFpbnMgdGhl
IHBvaW50LCBpZiB0aGUgcG9pbnQgaXMgYmV0d2VlbiB0aGVtLgorICAgIGZsb2F0IHN0cm9rZVdp
ZHRoID0gdGhpcy0+c3Ryb2tlV2lkdGgoKTsKKyAgICBtX2lubmVyU3Ryb2tlUmVjdCA9IG1fYm91
bmRpbmdCb3g7CisgICAgbV9vdXRlclN0cm9rZVJlY3QgPSBtX2JvdW5kaW5nQm94OworICAgIG1f
aW5uZXJTdHJva2VSZWN0LmluZmxhdGUoLXN0cm9rZVdpZHRoIC8gMik7CisgICAgbV9vdXRlclN0
cm9rZVJlY3QuaW5mbGF0ZShzdHJva2VXaWR0aCAvIDIpOworfQorCisKK0Zsb2F0UmVjdCBSZW5k
ZXJTVkdSZWN0OjpvYmplY3RCb3VuZGluZ0JveCgpIGNvbnN0Cit7CisgICAgaWYgKGlzUGFpbnRp
bmdGYWxsYmFjaygpKQorICAgICAgICByZXR1cm4gUmVuZGVyU1ZHU2hhcGU6Om9iamVjdEJvdW5k
aW5nQm94KCk7CisgICAgcmV0dXJuIG1fYm91bmRpbmdCb3g7Cit9CisKK0Zsb2F0UmVjdCBSZW5k
ZXJTVkdSZWN0OjpzdHJva2VCb3VuZGluZ0JveCgpIGNvbnN0Cit7CisgICAgaWYgKGlzUGFpbnRp
bmdGYWxsYmFjaygpICYmICFzdHlsZSgpLT5zdmdTdHlsZSgpLT5zdHJva2VEYXNoQXJyYXkoKS5p
c0VtcHR5KCkpCisgICAgICAgIHJldHVybiBSZW5kZXJTVkdTaGFwZTo6c3Ryb2tlQm91bmRpbmdC
b3goKTsKKyAgICByZXR1cm4gbV9vdXRlclN0cm9rZVJlY3Q7Cit9CisKK3ZvaWQgUmVuZGVyU1ZH
UmVjdDo6ZmlsbFNoYXBlKEdyYXBoaWNzQ29udGV4dCogY29udGV4dCkgY29uc3QKK3sKKyAgICAg
Y29udGV4dC0+ZmlsbFJlY3QobV9ib3VuZGluZ0JveCk7Cit9CisKK3ZvaWQgUmVuZGVyU1ZHUmVj
dDo6c3Ryb2tlU2hhcGUoR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0KSBjb25zdAoreworICAgIGNv
bnRleHQtPnN0cm9rZVJlY3QobV9ib3VuZGluZ0JveCwgc3Ryb2tlV2lkdGgoKSk7Cit9CisKK2Jv
b2wgUmVuZGVyU1ZHUmVjdDo6c2hhcGVEZXBlbmRlbnRTdHJva2VDb250YWlucyhjb25zdCBGbG9h
dFBvaW50JiBwb2ludCkKK3sKKyAgICByZXR1cm4gIW1faW5uZXJTdHJva2VSZWN0LmlzSW5zaWRl
UmVjdChwb2ludCk7Cit9CisKK2Jvb2wgUmVuZGVyU1ZHUmVjdDo6c2hhcGVEZXBlbmRlbnRGaWxs
Q29udGFpbnMoY29uc3QgRmxvYXRQb2ludCYgcG9pbnQsIGNvbnN0IFdpbmRSdWxlJiBmaWxsUnVs
ZSkgY29uc3QKK3sKKyAgICBpZiAoaXNQYWludGluZ0ZhbGxiYWNrKCkpCisgICAgICAgIHJldHVy
biBSZW5kZXJTVkdTaGFwZTo6c2hhcGVEZXBlbmRlbnRGaWxsQ29udGFpbnMocG9pbnQsIGZpbGxS
dWxlKTsKKyAgICByZXR1cm4gbV9ib3VuZGluZ0JveC5jb250YWlucyhwb2ludC54KCksIHBvaW50
LnkoKSk7Cit9CisKK30KKworI2VuZGlmIC8vIEVOQUJMRShTVkcpCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1JlY3QuaCBiL1NvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVjdC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDAwMDAwMDAuLjljYWM3ZTIKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvc3ZnL1JlbmRlclNWR1JlY3QuaApAQCAtMCwwICsxLDYzIEBACisvKgorICogQ29weXJp
Z2h0IChDKSAyMDExIFVuaXZlcnNpdHkgb2YgU3plZ2VkCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEg
UmVuYXRhIEhvZG92YW4gKHJlbmlAd2Via2l0Lm9yZykKKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBVTklWRVJTSVRZ
IE9GIFNaRUdFRCBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgor
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFVOSVZFUlNJVFkg
T0YgU1pFR0VEIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVN
RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
CisgKi8KKworI2lmbmRlZiBSZW5kZXJTVkdSZWN0X2gKKyNkZWZpbmUgUmVuZGVyU1ZHUmVjdF9o
CisKKyNpZiBFTkFCTEUoU1ZHKQorI2luY2x1ZGUgIlJlbmRlclNWR1BhdGguaCIKKworbmFtZXNw
YWNlIFdlYkNvcmUgeworCitjbGFzcyBSZW5kZXJTVkdSZWN0IDogcHVibGljIFJlbmRlclNWR1No
YXBlIHsKK3B1YmxpYzoKKyAgICBleHBsaWNpdCBSZW5kZXJTVkdSZWN0KFNWR1N0eWxlZFRyYW5z
Zm9ybWFibGVFbGVtZW50Kik7CisgICAgdmlydHVhbCB+UmVuZGVyU1ZHUmVjdCgpOworCitwcml2
YXRlOgorICAgIHZpcnR1YWwgYm9vbCBpc1NWR1JlY3QoKSBjb25zdCB7IHJldHVybiB0cnVlOyB9
CisgICAgdmlydHVhbCBjb25zdCBjaGFyKiByZW5kZXJOYW1lKCkgY29uc3QgeyByZXR1cm4gIlJl
bmRlclNWR1JlY3QiOyB9CisKKyAgICB2aXJ0dWFsIHZvaWQgY3JlYXRlU2hhcGUoKTsKKyAgICB2
aXJ0dWFsIGJvb2wgaXNFbXB0eSgpIGNvbnN0IHsgcmV0dXJuIGhhc1BhdGgoKSA/IFJlbmRlclNW
R1NoYXBlOjppc0VtcHR5KCkgOiBtX2JvdW5kaW5nQm94LmlzRW1wdHkoKTsgfTsKKyAgICB2aXJ0
dWFsIHZvaWQgZmlsbFNoYXBlKEdyYXBoaWNzQ29udGV4dCopIGNvbnN0OworICAgIHZpcnR1YWwg
dm9pZCBzdHJva2VTaGFwZShHcmFwaGljc0NvbnRleHQqKSBjb25zdDsKKyAgICB2aXJ0dWFsIEZs
b2F0UmVjdCBvYmplY3RCb3VuZGluZ0JveCgpIGNvbnN0OworICAgIHZpcnR1YWwgRmxvYXRSZWN0
IHN0cm9rZUJvdW5kaW5nQm94KCkgY29uc3Q7CisgICAgdmlydHVhbCBib29sIHNoYXBlRGVwZW5k
ZW50U3Ryb2tlQ29udGFpbnMoY29uc3QgRmxvYXRQb2ludCYpOworICAgIHZpcnR1YWwgYm9vbCBz
aGFwZURlcGVuZGVudEZpbGxDb250YWlucyhjb25zdCBGbG9hdFBvaW50JiwgY29uc3QgV2luZFJ1
bGUmKSBjb25zdDsKKworcHJpdmF0ZToKKyAgICBGbG9hdFJlY3QgbV9ib3VuZGluZ0JveDsKKyAg
ICBGbG9hdFJlY3QgbV9pbm5lclN0cm9rZVJlY3Q7CisgICAgRmxvYXRSZWN0IG1fb3V0ZXJTdHJv
a2VSZWN0OworfTsKKworfQorCisjZW5kaWYgLy8gRU5BQkxFKFNWRykKKyNlbmRpZgpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJjZS5oIGIv
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJjZS5oCmluZGV4IGE2
N2JhNzMuLmUwMjAxNTQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcv
UmVuZGVyU1ZHUmVzb3VyY2UuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1Jl
bmRlclNWR1Jlc291cmNlLmgKQEAgLTIxLDYgKzIxLDcgQEAKICNkZWZpbmUgUmVuZGVyU1ZHUmVz
b3VyY2VfaAogCiAjaWYgRU5BQkxFKFNWRykKKyNpbmNsdWRlICJSZW5kZXJTVkdTaGFwZS5oIgog
I2luY2x1ZGUgIlJlbmRlclN0eWxlQ29uc3RhbnRzLmgiCiAjaW5jbHVkZSAiU1ZHRG9jdW1lbnRF
eHRlbnNpb25zLmgiCiAKQEAgLTYxLDcgKzYyLDcgQEAgcHVibGljOgogICAgIHZpcnR1YWwgdm9p
ZCByZW1vdmVDbGllbnRGcm9tQ2FjaGUoUmVuZGVyT2JqZWN0KiwgYm9vbCBtYXJrRm9ySW52YWxp
ZGF0aW9uID0gdHJ1ZSkgPSAwOwogCiAgICAgdmlydHVhbCBib29sIGFwcGx5UmVzb3VyY2UoUmVu
ZGVyT2JqZWN0KiwgUmVuZGVyU3R5bGUqLCBHcmFwaGljc0NvbnRleHQqJiwgdW5zaWduZWQgc2hv
cnQgcmVzb3VyY2VNb2RlKSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIHBvc3RBcHBseVJlc291cmNl
KFJlbmRlck9iamVjdCosIEdyYXBoaWNzQ29udGV4dComLCB1bnNpZ25lZCBzaG9ydCwgY29uc3Qg
UGF0aCopIHsgfQorICAgIHZpcnR1YWwgdm9pZCBwb3N0QXBwbHlSZXNvdXJjZShSZW5kZXJPYmpl
Y3QqLCBHcmFwaGljc0NvbnRleHQqJiwgdW5zaWduZWQgc2hvcnQsIGNvbnN0IFBhdGgqLCBjb25z
dCBSZW5kZXJTVkdTaGFwZSopIHsgfQogICAgIHZpcnR1YWwgRmxvYXRSZWN0IHJlc291cmNlQm91
bmRpbmdCb3goUmVuZGVyT2JqZWN0KikgPSAwOwogCiAgICAgdmlydHVhbCBSZW5kZXJTVkdSZXNv
dXJjZVR5cGUgcmVzb3VyY2VUeXBlKCkgY29uc3QgPSAwOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJjZUNsaXBwZXIuY3BwIGIvU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJjZUNsaXBwZXIuY3BwCmluZGV4
IDIzOGMwOTYuLjFkODIxMjEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9z
dmcvUmVuZGVyU1ZHUmVzb3VyY2VDbGlwcGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291cmNlQ2xpcHBlci5jcHAKQEAgLTI0Miw3ICsyNDIsNyBA
QCBib29sIFJlbmRlclNWR1Jlc291cmNlQ2xpcHBlcjo6ZHJhd0NvbnRlbnRJbnRvTWFza0ltYWdl
KENsaXBwZXJEYXRhKiBjbGlwcGVyRGF0YQogICAgICAgICB9CiAKICAgICAgICAgLy8gT25seSBz
aGFwZXMsIHBhdGhzIGFuZCB0ZXh0cyBhcmUgYWxsb3dlZCBmb3IgY2xpcHBpbmcuCi0gICAgICAg
IGlmICghcmVuZGVyZXItPmlzU1ZHUGF0aCgpICYmICFyZW5kZXJlci0+aXNTVkdUZXh0KCkpCisg
ICAgICAgIGlmICghcmVuZGVyZXItPmlzU1ZHU2hhcGUoKSAmJiAhcmVuZGVyZXItPmlzU1ZHVGV4
dCgpKQogICAgICAgICAgICAgY29udGludWU7CiAKICAgICAgICAgLy8gU2F2ZSB0aGUgb2xkIFJl
bmRlclN0eWxlIG9mIHRoZSBjdXJyZW50IG9iamVjdCBmb3IgcmVzdG9yaW5nIGFmdGVyIGRyYXdp
bmcKQEAgLTI4NCw3ICsyODQsNyBAQCB2b2lkIFJlbmRlclNWR1Jlc291cmNlQ2xpcHBlcjo6Y2Fs
Y3VsYXRlQ2xpcENvbnRlbnRSZXBhaW50UmVjdCgpCiAgICAgICAgIFJlbmRlck9iamVjdCogcmVu
ZGVyZXIgPSBjaGlsZE5vZGUtPnJlbmRlcmVyKCk7CiAgICAgICAgIGlmICghY2hpbGROb2RlLT5p
c1NWR0VsZW1lbnQoKSB8fCAhc3RhdGljX2Nhc3Q8U1ZHRWxlbWVudCo+KGNoaWxkTm9kZSktPmlz
U3R5bGVkKCkgfHwgIXJlbmRlcmVyKQogICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIGlm
ICghcmVuZGVyZXItPmlzU1ZHUGF0aCgpICYmICFyZW5kZXJlci0+aXNTVkdUZXh0KCkgJiYgIXJl
bmRlcmVyLT5pc1NWR1NoYWRvd1RyZWVSb290Q29udGFpbmVyKCkpCisgICAgICAgIGlmICghcmVu
ZGVyZXItPmlzU1ZHU2hhcGUoKSAmJiAhcmVuZGVyZXItPmlzU1ZHVGV4dCgpICYmICFyZW5kZXJl
ci0+aXNTVkdTaGFkb3dUcmVlUm9vdENvbnRhaW5lcigpKQogICAgICAgICAgICAgY29udGludWU7
CiAgICAgICAgIFJlbmRlclN0eWxlKiBzdHlsZSA9IHJlbmRlcmVyLT5zdHlsZSgpOwogICAgICAg
ICBpZiAoIXN0eWxlIHx8IHN0eWxlLT5kaXNwbGF5KCkgPT0gTk9ORSB8fCBzdHlsZS0+dmlzaWJp
bGl0eSgpICE9IFZJU0lCTEUpCkBAIC0zMTAsNyArMzEwLDcgQEAgYm9vbCBSZW5kZXJTVkdSZXNv
dXJjZUNsaXBwZXI6OmhpdFRlc3RDbGlwQ29udGVudChjb25zdCBGbG9hdFJlY3QmIG9iamVjdEJv
dW5kaW4KICAgICAgICAgUmVuZGVyT2JqZWN0KiByZW5kZXJlciA9IGNoaWxkTm9kZS0+cmVuZGVy
ZXIoKTsKICAgICAgICAgaWYgKCFjaGlsZE5vZGUtPmlzU1ZHRWxlbWVudCgpIHx8ICFzdGF0aWNf
Y2FzdDxTVkdFbGVtZW50Kj4oY2hpbGROb2RlKS0+aXNTdHlsZWQoKSB8fCAhcmVuZGVyZXIpCiAg
ICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgaWYgKCFyZW5kZXJlci0+aXNTVkdQYXRoKCkg
JiYgIXJlbmRlcmVyLT5pc1NWR1RleHQoKSAmJiAhcmVuZGVyZXItPmlzU1ZHU2hhZG93VHJlZVJv
b3RDb250YWluZXIoKSkKKyAgICAgICAgaWYgKCFyZW5kZXJlci0+aXNTVkdTaGFwZSgpICYmICFy
ZW5kZXJlci0+aXNTVkdUZXh0KCkgJiYgIXJlbmRlcmVyLT5pc1NWR1NoYWRvd1RyZWVSb290Q29u
dGFpbmVyKCkpCiAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgSW50UG9pbnQgaGl0UG9p
bnQ7CiAgICAgICAgIEhpdFRlc3RSZXN1bHQgcmVzdWx0KGhpdFBvaW50KTsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VDb250YWluZXIu
Y3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJjZUNvbnRh
aW5lci5jcHAKaW5kZXggNzRkNWQ2OS4uYjc0YWQ2YiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJjZUNvbnRhaW5lci5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJjZUNvbnRhaW5lci5jcHAK
QEAgLTE4MCw3ICsxODAsNyBAQCB2b2lkIFJlbmRlclNWR1Jlc291cmNlQ29udGFpbmVyOjpyZWdp
c3RlclJlc291cmNlKCkKIC8vIEZJWE1FOiBUaGlzIGRvZXMgbm90IGJlbG9uZyBoZXJlLgogQWZm
aW5lVHJhbnNmb3JtIFJlbmRlclNWR1Jlc291cmNlQ29udGFpbmVyOjp0cmFuc2Zvcm1Pbk5vblNj
YWxpbmdTdHJva2UoUmVuZGVyT2JqZWN0KiBvYmplY3QsIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYg
cmVzb3VyY2VUcmFuc2Zvcm0pCiB7Ci0gICAgaWYgKCFvYmplY3QtPmlzU1ZHUGF0aCgpKQorICAg
IGlmICghb2JqZWN0LT5pc1NWR1NoYXBlKCkpCiAgICAgICAgIHJldHVybiByZXNvdXJjZVRyYW5z
Zm9ybTsKIAogICAgIFNWR1N0eWxlZFRyYW5zZm9ybWFibGVFbGVtZW50KiBlbGVtZW50ID0gc3Rh
dGljX2Nhc3Q8U1ZHU3R5bGVkVHJhbnNmb3JtYWJsZUVsZW1lbnQqPihvYmplY3QtPm5vZGUoKSk7
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291
cmNlRmlsdGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVz
b3VyY2VGaWx0ZXIuY3BwCmluZGV4IDY4OTM1ZGEuLjg1ZmYxYTcgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VGaWx0ZXIuY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VGaWx0ZXIuY3Bw
CkBAIC0yNTksMTYgKzI1OSwxNSBAQCBib29sIFJlbmRlclNWR1Jlc291cmNlRmlsdGVyOjphcHBs
eVJlc291cmNlKFJlbmRlck9iamVjdCogb2JqZWN0LCBSZW5kZXJTdHlsZSosCiAgICAgcmV0dXJu
IHRydWU7CiB9CiAKLXZvaWQgUmVuZGVyU1ZHUmVzb3VyY2VGaWx0ZXI6OnBvc3RBcHBseVJlc291
cmNlKFJlbmRlck9iamVjdCogb2JqZWN0LCBHcmFwaGljc0NvbnRleHQqJiBjb250ZXh0LCB1bnNp
Z25lZCBzaG9ydCByZXNvdXJjZU1vZGUsIGNvbnN0IFBhdGgqKQordm9pZCBSZW5kZXJTVkdSZXNv
dXJjZUZpbHRlcjo6cG9zdEFwcGx5UmVzb3VyY2UoUmVuZGVyT2JqZWN0KiBvYmplY3QsIEdyYXBo
aWNzQ29udGV4dComIGNvbnRleHQsIHVuc2lnbmVkIHNob3J0IHJlc291cmNlTW9kZSwgY29uc3Qg
UGF0aCosIGNvbnN0IFJlbmRlclNWR1NoYXBlKikKIHsKLSAgICBBU1NFUlQob2JqZWN0KTsKKyAg
ICBBU1NFUlQoc2hhcGUpOwogICAgIEFTU0VSVChjb250ZXh0KTsKICNpZm5kZWYgTkRFQlVHCiAg
ICAgQVNTRVJUKHJlc291cmNlTW9kZSA9PSBBcHBseVRvRGVmYXVsdE1vZGUpOwogI2Vsc2UKICAg
ICBVTlVTRURfUEFSQU0ocmVzb3VyY2VNb2RlKTsKICNlbmRpZgotCiAgICAgRmlsdGVyRGF0YSog
ZmlsdGVyRGF0YSA9IG1fZmlsdGVyLmdldChvYmplY3QpOwogICAgIGlmICghZmlsdGVyRGF0YSkK
ICAgICAgICAgcmV0dXJuOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2
Zy9SZW5kZXJTVkdSZXNvdXJjZUZpbHRlci5oIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2
Zy9SZW5kZXJTVkdSZXNvdXJjZUZpbHRlci5oCmluZGV4IDVhNWIwOTIuLmZmNjFiNzEgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VGaWx0
ZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291cmNl
RmlsdGVyLmgKQEAgLTcyLDcgKzcyLDcgQEAgcHVibGljOgogICAgIHZpcnR1YWwgdm9pZCByZW1v
dmVDbGllbnRGcm9tQ2FjaGUoUmVuZGVyT2JqZWN0KiwgYm9vbCBtYXJrRm9ySW52YWxpZGF0aW9u
ID0gdHJ1ZSk7CiAKICAgICB2aXJ0dWFsIGJvb2wgYXBwbHlSZXNvdXJjZShSZW5kZXJPYmplY3Qq
LCBSZW5kZXJTdHlsZSosIEdyYXBoaWNzQ29udGV4dComLCB1bnNpZ25lZCBzaG9ydCByZXNvdXJj
ZU1vZGUpOwotICAgIHZpcnR1YWwgdm9pZCBwb3N0QXBwbHlSZXNvdXJjZShSZW5kZXJPYmplY3Qq
LCBHcmFwaGljc0NvbnRleHQqJiwgdW5zaWduZWQgc2hvcnQgcmVzb3VyY2VNb2RlLCBjb25zdCBQ
YXRoKik7CisgICAgdmlydHVhbCB2b2lkIHBvc3RBcHBseVJlc291cmNlKFJlbmRlck9iamVjdCos
IEdyYXBoaWNzQ29udGV4dComLCB1bnNpZ25lZCBzaG9ydCByZXNvdXJjZU1vZGUsIGNvbnN0IFBh
dGgqLCBjb25zdCBSZW5kZXJTVkdTaGFwZSopOwogCiAgICAgdmlydHVhbCBGbG9hdFJlY3QgcmVz
b3VyY2VCb3VuZGluZ0JveChSZW5kZXJPYmplY3QqKTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJjZUdyYWRpZW50LmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VHcmFkaWVudC5jcHAKaW5k
ZXggMWFhYjkzNS4uZDQwODA4YiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L3N2Zy9SZW5kZXJTVkdSZXNvdXJjZUdyYWRpZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291cmNlR3JhZGllbnQuY3BwCkBAIC0yNyw2ICsyNyw3
IEBACiAKICNpbmNsdWRlICJHcmFkaWVudEF0dHJpYnV0ZXMuaCIKICNpbmNsdWRlICJHcmFwaGlj
c0NvbnRleHQuaCIKKyNpbmNsdWRlICJSZW5kZXJTVkdTaGFwZS5oIgogI2luY2x1ZGUgIlJlbmRl
clNWR1RleHQuaCIKICNpbmNsdWRlICJTVkdJbWFnZUJ1ZmZlclRvb2xzLmgiCiAjaW5jbHVkZSAi
U1ZHUmVuZGVyU3VwcG9ydC5oIgpAQCAtMjMxLDcgKzIzMiw3IEBAIGJvb2wgUmVuZGVyU1ZHUmVz
b3VyY2VHcmFkaWVudDo6YXBwbHlSZXNvdXJjZShSZW5kZXJPYmplY3QqIG9iamVjdCwgUmVuZGVy
U3R5bGUqCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLXZvaWQgUmVuZGVyU1ZHUmVzb3VyY2VHcmFk
aWVudDo6cG9zdEFwcGx5UmVzb3VyY2UoUmVuZGVyT2JqZWN0KiBvYmplY3QsIEdyYXBoaWNzQ29u
dGV4dComIGNvbnRleHQsIHVuc2lnbmVkIHNob3J0IHJlc291cmNlTW9kZSwgY29uc3QgUGF0aCog
cGF0aCkKK3ZvaWQgUmVuZGVyU1ZHUmVzb3VyY2VHcmFkaWVudDo6cG9zdEFwcGx5UmVzb3VyY2Uo
UmVuZGVyT2JqZWN0KiBvYmplY3QsIEdyYXBoaWNzQ29udGV4dComIGNvbnRleHQsIHVuc2lnbmVk
IHNob3J0IHJlc291cmNlTW9kZSwgY29uc3QgUGF0aCogcGF0aCwgY29uc3QgUmVuZGVyU1ZHU2hh
cGUqIHNoYXBlKQogewogICAgIEFTU0VSVChjb250ZXh0KTsKICAgICBBU1NFUlQocmVzb3VyY2VN
b2RlICE9IEFwcGx5VG9EZWZhdWx0TW9kZSk7CkBAIC0yNTksMTEgKzI2MCwxOCBAQCB2b2lkIFJl
bmRlclNWR1Jlc291cmNlR3JhZGllbnQ6OnBvc3RBcHBseVJlc291cmNlKFJlbmRlck9iamVjdCog
b2JqZWN0LCBHcmFwaGljcwogI2Vsc2UKICAgICAgICAgVU5VU0VEX1BBUkFNKG9iamVjdCk7CiAj
ZW5kaWYKLSAgICB9IGVsc2UgaWYgKHBhdGgpIHsKLSAgICAgICAgaWYgKHJlc291cmNlTW9kZSAm
IEFwcGx5VG9GaWxsTW9kZSkKLSAgICAgICAgICAgIGNvbnRleHQtPmZpbGxQYXRoKCpwYXRoKTsK
LSAgICAgICAgZWxzZSBpZiAocmVzb3VyY2VNb2RlICYgQXBwbHlUb1N0cm9rZU1vZGUpCi0gICAg
ICAgICAgICBjb250ZXh0LT5zdHJva2VQYXRoKCpwYXRoKTsKKyAgICB9IGVsc2UgeworICAgICAg
ICBpZiAocmVzb3VyY2VNb2RlICYgQXBwbHlUb0ZpbGxNb2RlKSB7CisgICAgICAgICAgICBpZiAo
cGF0aCkKKyAgICAgICAgICAgICAgICBjb250ZXh0LT5maWxsUGF0aCgqcGF0aCk7CisgICAgICAg
ICAgICBlbHNlIGlmIChzaGFwZSkKKyAgICAgICAgICAgICAgICBzaGFwZS0+aXNQYWludGluZ0Zh
bGxiYWNrKCkgPyBjb250ZXh0LT5maWxsUGF0aChzaGFwZS0+cGF0aCgpKSA6IHNoYXBlLT5maWxs
U2hhcGUoY29udGV4dCk7CisgICAgICAgIH0gZWxzZSBpZiAocmVzb3VyY2VNb2RlICYgQXBwbHlU
b1N0cm9rZU1vZGUpIHsKKyAgICAgICAgICAgIGlmIChwYXRoKQorICAgICAgICAgICAgICAgIGNv
bnRleHQtPnN0cm9rZVBhdGgoKnBhdGgpOworICAgICAgICAgICAgZWxzZSBpZiAoc2hhcGUpCisg
ICAgICAgICAgICAgICAgc2hhcGUtPmlzUGFpbnRpbmdGYWxsYmFjaygpID8gY29udGV4dC0+c3Ry
b2tlUGF0aChzaGFwZS0+cGF0aCgpKSA6IHNoYXBlLT5zdHJva2VTaGFwZShjb250ZXh0KTsKKyAg
ICAgICAgfQogICAgIH0KIAogICAgIGNvbnRleHQtPnJlc3RvcmUoKTsKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VHcmFkaWVudC5oIGIv
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJjZUdyYWRpZW50LmgK
aW5kZXggZGY0OTJlMi4uM2ZjY2Q0NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJjZUdyYWRpZW50LmgKKysrIGIvU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJjZUdyYWRpZW50LmgKQEAgLTUwLDcgKzUwLDcg
QEAgcHVibGljOgogICAgIHZpcnR1YWwgdm9pZCByZW1vdmVDbGllbnRGcm9tQ2FjaGUoUmVuZGVy
T2JqZWN0KiwgYm9vbCBtYXJrRm9ySW52YWxpZGF0aW9uID0gdHJ1ZSk7CiAKICAgICB2aXJ0dWFs
IGJvb2wgYXBwbHlSZXNvdXJjZShSZW5kZXJPYmplY3QqLCBSZW5kZXJTdHlsZSosIEdyYXBoaWNz
Q29udGV4dComLCB1bnNpZ25lZCBzaG9ydCByZXNvdXJjZU1vZGUpOwotICAgIHZpcnR1YWwgdm9p
ZCBwb3N0QXBwbHlSZXNvdXJjZShSZW5kZXJPYmplY3QqLCBHcmFwaGljc0NvbnRleHQqJiwgdW5z
aWduZWQgc2hvcnQgcmVzb3VyY2VNb2RlLCBjb25zdCBQYXRoKik7CisgICAgdmlydHVhbCB2b2lk
IHBvc3RBcHBseVJlc291cmNlKFJlbmRlck9iamVjdCosIEdyYXBoaWNzQ29udGV4dComLCB1bnNp
Z25lZCBzaG9ydCByZXNvdXJjZU1vZGUsIGNvbnN0IFBhdGgqLCBjb25zdCBSZW5kZXJTVkdTaGFw
ZSopOwogICAgIHZpcnR1YWwgRmxvYXRSZWN0IHJlc291cmNlQm91bmRpbmdCb3goUmVuZGVyT2Jq
ZWN0KikgeyByZXR1cm4gRmxvYXRSZWN0KCk7IH0KIAogcHJvdGVjdGVkOgpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJjZVBhdHRlcm4uY3Bw
IGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJjZVBhdHRlcm4u
Y3BwCmluZGV4IGIwODI0ODEuLjFjYmM1ZGUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VQYXR0ZXJuLmNwcAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291cmNlUGF0dGVybi5jcHAKQEAgLTE4Mywx
NiArMTgzLDIxIEBAIGJvb2wgUmVuZGVyU1ZHUmVzb3VyY2VQYXR0ZXJuOjphcHBseVJlc291cmNl
KFJlbmRlck9iamVjdCogb2JqZWN0LCBSZW5kZXJTdHlsZSoKICAgICByZXR1cm4gdHJ1ZTsKIH0K
IAotdm9pZCBSZW5kZXJTVkdSZXNvdXJjZVBhdHRlcm46OnBvc3RBcHBseVJlc291cmNlKFJlbmRl
ck9iamVjdCosIEdyYXBoaWNzQ29udGV4dComIGNvbnRleHQsIHVuc2lnbmVkIHNob3J0IHJlc291
cmNlTW9kZSwgY29uc3QgUGF0aCogcGF0aCkKK3ZvaWQgUmVuZGVyU1ZHUmVzb3VyY2VQYXR0ZXJu
Ojpwb3N0QXBwbHlSZXNvdXJjZShSZW5kZXJPYmplY3QqLCBHcmFwaGljc0NvbnRleHQqJiBjb250
ZXh0LCB1bnNpZ25lZCBzaG9ydCByZXNvdXJjZU1vZGUsIGNvbnN0IFBhdGgqIHBhdGgsIGNvbnN0
IFJlbmRlclNWR1NoYXBlKiBzaGFwZSkKIHsKICAgICBBU1NFUlQoY29udGV4dCk7CiAgICAgQVNT
RVJUKHJlc291cmNlTW9kZSAhPSBBcHBseVRvRGVmYXVsdE1vZGUpOwogCi0gICAgaWYgKHBhdGgg
JiYgIShyZXNvdXJjZU1vZGUgJiBBcHBseVRvVGV4dE1vZGUpKSB7Ci0gICAgICAgIGlmIChyZXNv
dXJjZU1vZGUgJiBBcHBseVRvRmlsbE1vZGUpCisgICAgaWYgKHJlc291cmNlTW9kZSAmIEFwcGx5
VG9GaWxsTW9kZSkgeworICAgICAgICBpZiAocGF0aCkKICAgICAgICAgICAgIGNvbnRleHQtPmZp
bGxQYXRoKCpwYXRoKTsKLSAgICAgICAgZWxzZSBpZiAocmVzb3VyY2VNb2RlICYgQXBwbHlUb1N0
cm9rZU1vZGUpCisgICAgICAgIGVsc2UgaWYgKHNoYXBlKQorICAgICAgICAgICAgc2hhcGUtPmlz
UGFpbnRpbmdGYWxsYmFjaygpID8gY29udGV4dC0+ZmlsbFBhdGgoc2hhcGUtPnBhdGgoKSkgOiBz
aGFwZS0+ZmlsbFNoYXBlKGNvbnRleHQpOworICAgIH0gZWxzZSBpZiAocmVzb3VyY2VNb2RlICYg
QXBwbHlUb1N0cm9rZU1vZGUpIHsKKyAgICAgICAgaWYgKHBhdGgpCiAgICAgICAgICAgICBjb250
ZXh0LT5zdHJva2VQYXRoKCpwYXRoKTsKKyAgICAgICAgZWxzZSBpZiAoc2hhcGUpCisgICAgICAg
ICAgICBzaGFwZS0+aXNQYWludGluZ0ZhbGxiYWNrKCkgPyBjb250ZXh0LT5zdHJva2VQYXRoKHNo
YXBlLT5wYXRoKCkpIDogc2hhcGUtPnN0cm9rZVNoYXBlKGNvbnRleHQpOwogICAgIH0KIAogICAg
IGNvbnRleHQtPnJlc3RvcmUoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VQYXR0ZXJuLmggYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvc3ZnL1JlbmRlclNWR1Jlc291cmNlUGF0dGVybi5oCmluZGV4IGE2OTdjNzEuLjg0N2ZjNjAg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVzb3Vy
Y2VQYXR0ZXJuLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdS
ZXNvdXJjZVBhdHRlcm4uaApAQCAtNTIsNyArNTIsNyBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCB2
b2lkIHJlbW92ZUNsaWVudEZyb21DYWNoZShSZW5kZXJPYmplY3QqLCBib29sIG1hcmtGb3JJbnZh
bGlkYXRpb24gPSB0cnVlKTsKIAogICAgIHZpcnR1YWwgYm9vbCBhcHBseVJlc291cmNlKFJlbmRl
ck9iamVjdCosIFJlbmRlclN0eWxlKiwgR3JhcGhpY3NDb250ZXh0KiYsIHVuc2lnbmVkIHNob3J0
IHJlc291cmNlTW9kZSk7Ci0gICAgdmlydHVhbCB2b2lkIHBvc3RBcHBseVJlc291cmNlKFJlbmRl
ck9iamVjdCosIEdyYXBoaWNzQ29udGV4dComLCB1bnNpZ25lZCBzaG9ydCByZXNvdXJjZU1vZGUs
IGNvbnN0IFBhdGgqKTsKKyAgICB2aXJ0dWFsIHZvaWQgcG9zdEFwcGx5UmVzb3VyY2UoUmVuZGVy
T2JqZWN0KiwgR3JhcGhpY3NDb250ZXh0KiYsIHVuc2lnbmVkIHNob3J0IHJlc291cmNlTW9kZSwg
Y29uc3QgUGF0aCosIGNvbnN0IFJlbmRlclNWR1NoYXBlKik7CiAgICAgdmlydHVhbCBGbG9hdFJl
Y3QgcmVzb3VyY2VCb3VuZGluZ0JveChSZW5kZXJPYmplY3QqKSB7IHJldHVybiBGbG9hdFJlY3Qo
KTsgfQogCiAgICAgdmlydHVhbCBSZW5kZXJTVkdSZXNvdXJjZVR5cGUgcmVzb3VyY2VUeXBlKCkg
Y29uc3QgeyByZXR1cm4gc19yZXNvdXJjZVR5cGU7IH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VTb2xpZENvbG9yLmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VTb2xpZENvbG9yLmNwcApp
bmRleCA1YmUyYWY2Li5hODMxMDUyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvc3ZnL1JlbmRlclNWR1Jlc291cmNlU29saWRDb2xvci5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJjZVNvbGlkQ29sb3IuY3BwCkBAIC0yMyw2
ICsyMyw3IEBACiAjaW5jbHVkZSAiUmVuZGVyU1ZHUmVzb3VyY2VTb2xpZENvbG9yLmgiCiAKICNp
bmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKKyNpbmNsdWRlICJSZW5kZXJTVkdTaGFwZS5oIgog
I2luY2x1ZGUgIlJlbmRlclN0eWxlLmgiCiAjaW5jbHVkZSAiU1ZHUmVuZGVyU3VwcG9ydC5oIgog
CkBAIC03NCwxNiArNzUsMjEgQEAgYm9vbCBSZW5kZXJTVkdSZXNvdXJjZVNvbGlkQ29sb3I6OmFw
cGx5UmVzb3VyY2UoUmVuZGVyT2JqZWN0KiBvYmplY3QsIFJlbmRlclN0eWwKICAgICByZXR1cm4g
dHJ1ZTsKIH0KIAotdm9pZCBSZW5kZXJTVkdSZXNvdXJjZVNvbGlkQ29sb3I6OnBvc3RBcHBseVJl
c291cmNlKFJlbmRlck9iamVjdCosIEdyYXBoaWNzQ29udGV4dComIGNvbnRleHQsIHVuc2lnbmVk
IHNob3J0IHJlc291cmNlTW9kZSwgY29uc3QgUGF0aCogcGF0aCkKK3ZvaWQgUmVuZGVyU1ZHUmVz
b3VyY2VTb2xpZENvbG9yOjpwb3N0QXBwbHlSZXNvdXJjZShSZW5kZXJPYmplY3QqLCBHcmFwaGlj
c0NvbnRleHQqJiBjb250ZXh0LCB1bnNpZ25lZCBzaG9ydCByZXNvdXJjZU1vZGUsIGNvbnN0IFBh
dGgqIHBhdGgsIGNvbnN0IFJlbmRlclNWR1NoYXBlKiBzaGFwZSkKIHsKICAgICBBU1NFUlQoY29u
dGV4dCk7CiAgICAgQVNTRVJUKHJlc291cmNlTW9kZSAhPSBBcHBseVRvRGVmYXVsdE1vZGUpOwog
Ci0gICAgaWYgKHBhdGggJiYgIShyZXNvdXJjZU1vZGUgJiBBcHBseVRvVGV4dE1vZGUpKSB7Ci0g
ICAgICAgIGlmIChyZXNvdXJjZU1vZGUgJiBBcHBseVRvRmlsbE1vZGUpCisgICAgaWYgKHJlc291
cmNlTW9kZSAmIEFwcGx5VG9GaWxsTW9kZSkgeworICAgICAgICBpZiAocGF0aCkKICAgICAgICAg
ICAgIGNvbnRleHQtPmZpbGxQYXRoKCpwYXRoKTsKLSAgICAgICAgZWxzZSBpZiAocmVzb3VyY2VN
b2RlICYgQXBwbHlUb1N0cm9rZU1vZGUpCisgICAgICAgIGVsc2UgaWYgKHNoYXBlKQorICAgICAg
ICAgICAgc2hhcGUtPmlzUGFpbnRpbmdGYWxsYmFjaygpID8gY29udGV4dC0+ZmlsbFBhdGgoc2hh
cGUtPnBhdGgoKSkgOiBzaGFwZS0+ZmlsbFNoYXBlKGNvbnRleHQpOworICAgIH0gZWxzZSBpZiAo
cmVzb3VyY2VNb2RlICYgQXBwbHlUb1N0cm9rZU1vZGUpIHsKKyAgICAgICAgaWYgKHBhdGgpCiAg
ICAgICAgICAgICBjb250ZXh0LT5zdHJva2VQYXRoKCpwYXRoKTsKKyAgICAgICAgZWxzZSBpZiAo
c2hhcGUpCisgICAgICAgICAgICBzaGFwZS0+aXNQYWludGluZ0ZhbGxiYWNrKCkgPyBjb250ZXh0
LT5zdHJva2VQYXRoKHNoYXBlLT5wYXRoKCkpIDogc2hhcGUtPnN0cm9rZVNoYXBlKGNvbnRleHQp
OwogICAgIH0KIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9S
ZW5kZXJTVkdSZXNvdXJjZVNvbGlkQ29sb3IuaCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9z
dmcvUmVuZGVyU1ZHUmVzb3VyY2VTb2xpZENvbG9yLmgKaW5kZXggMDJjZWIzMS4uOGJiZmRjZCAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJj
ZVNvbGlkQ29sb3IuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNW
R1Jlc291cmNlU29saWRDb2xvci5oCkBAIC0zNiw3ICszNiw3IEBAIHB1YmxpYzoKICAgICB2aXJ0
dWFsIHZvaWQgcmVtb3ZlQ2xpZW50RnJvbUNhY2hlKFJlbmRlck9iamVjdCosIGJvb2wgPSB0cnVl
KSB7IH0KIAogICAgIHZpcnR1YWwgYm9vbCBhcHBseVJlc291cmNlKFJlbmRlck9iamVjdCosIFJl
bmRlclN0eWxlKiwgR3JhcGhpY3NDb250ZXh0KiYsIHVuc2lnbmVkIHNob3J0IHJlc291cmNlTW9k
ZSk7Ci0gICAgdmlydHVhbCB2b2lkIHBvc3RBcHBseVJlc291cmNlKFJlbmRlck9iamVjdCosIEdy
YXBoaWNzQ29udGV4dComLCB1bnNpZ25lZCBzaG9ydCByZXNvdXJjZU1vZGUsIGNvbnN0IFBhdGgq
KTsKKyAgICB2aXJ0dWFsIHZvaWQgcG9zdEFwcGx5UmVzb3VyY2UoUmVuZGVyT2JqZWN0KiwgR3Jh
cGhpY3NDb250ZXh0KiYsIHVuc2lnbmVkIHNob3J0IHJlc291cmNlTW9kZSwgY29uc3QgUGF0aCos
IGNvbnN0IFJlbmRlclNWR1NoYXBlKik7CiAgICAgdmlydHVhbCBGbG9hdFJlY3QgcmVzb3VyY2VC
b3VuZGluZ0JveChSZW5kZXJPYmplY3QqKSB7IHJldHVybiBGbG9hdFJlY3QoKTsgfQogCiAgICAg
dmlydHVhbCBSZW5kZXJTVkdSZXNvdXJjZVR5cGUgcmVzb3VyY2VUeXBlKCkgY29uc3QgeyByZXR1
cm4gc19yZXNvdXJjZVR5cGU7IH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9zdmcvUmVuZGVyU1ZHU2hhcGUuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9S
ZW5kZXJTVkdTaGFwZS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmQ2
ZTFiZAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVu
ZGVyU1ZHU2hhcGUuY3BwCkBAIC0wLDAgKzEsNDMyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDA0LCAyMDA1LCAyMDA3IE5pa29sYXMgWmltbWVybWFubiA8emltbWVybWFubkBrZGUub3JnPgor
ICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1LCAyMDA4IFJvYiBCdWlzIDxidWlzQGtkZS5vcmc+
CisgKiBDb3B5cmlnaHQgKEMpIDIwMDUsIDIwMDcgRXJpYyBTZWlkZWwgPGVyaWNAd2Via2l0Lm9y
Zz4KKyAqIENvcHlyaWdodCAoQykgMjAwOSBHb29nbGUsIEluYy4KKyAqIENvcHlyaWdodCAoQykg
MjAwOSBEaXJrIFNjaHVsemUgPGtyaXRAd2Via2l0Lm9yZz4KKyAqIENvcHlyaWdodCAoQykgUmVz
ZWFyY2ggSW4gTW90aW9uIExpbWl0ZWQgMjAxMC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENv
cHlyaWdodCAoQykgMjAwOSBKZWZmIFNjaGlsbGVyIDxjb2RlZHJlYWRAZ21haWwuY29tPgorICog
Q29weXJpZ2h0IChDKSAyMDExIFJlbmF0YSBIb2RvdmFuIDxyZW5pQHdlYmtpdC5vcmc+CisgKiBD
b3B5cmlnaHQgKEMpIDIwMTEgVW5pdmVyc2l0eSBvZiBTemVnZWQKKyAqCisgKiBUaGlzIGxpYnJh
cnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBt
b2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1Ymxp
YworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlv
bjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlv
bikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVk
IGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkg
V0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hB
TlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBH
TlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgor
ICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5
IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUg
dGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0
d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAor
ICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5o
IgorCisjaWYgRU5BQkxFKFNWRykKKyNpbmNsdWRlICJSZW5kZXJTVkdTaGFwZS5oIgorCisjaW5j
bHVkZSAiRmxvYXRQb2ludC5oIgorI2luY2x1ZGUgIkZsb2F0UXVhZC5oIgorI2luY2x1ZGUgIkdy
YXBoaWNzQ29udGV4dC5oIgorI2luY2x1ZGUgIkhpdFRlc3RSZXF1ZXN0LmgiCisjaW5jbHVkZSAi
TGF5b3V0UmVwYWludGVyLmgiCisjaW5jbHVkZSAiUG9pbnRlckV2ZW50c0hpdFJ1bGVzLmgiCisj
aW5jbHVkZSAiUmVuZGVyU1ZHQ29udGFpbmVyLmgiCisjaW5jbHVkZSAiUmVuZGVyU1ZHUmVzb3Vy
Y2VNYXJrZXIuaCIKKyNpbmNsdWRlICJSZW5kZXJTVkdSZXNvdXJjZVNvbGlkQ29sb3IuaCIKKyNp
bmNsdWRlICJTVkdQYXRoRWxlbWVudC5oIgorI2luY2x1ZGUgIlNWR1JlbmRlclN1cHBvcnQuaCIK
KyNpbmNsdWRlICJTVkdSZXNvdXJjZXMuaCIKKyNpbmNsdWRlICJTVkdTdHlsZWRUcmFuc2Zvcm1h
YmxlRWxlbWVudC5oIgorI2luY2x1ZGUgIlNWR1RyYW5zZm9ybUxpc3QuaCIKKyNpbmNsdWRlICJT
VkdVUklSZWZlcmVuY2UuaCIKKyNpbmNsdWRlICJTdHJva2VTdHlsZUFwcGxpZXIuaCIKKyNpbmNs
dWRlIDx3dGYvTWF0aEV4dHJhcy5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK1JlbmRlclNW
R1NoYXBlOjpSZW5kZXJTVkdTaGFwZShTVkdTdHlsZWRUcmFuc2Zvcm1hYmxlRWxlbWVudCogbm9k
ZSkKKyAgICA6IFJlbmRlclNWR01vZGVsT2JqZWN0KG5vZGUpCisgICAgLCBtX25lZWRzQm91bmRh
cmllc1VwZGF0ZShmYWxzZSkgLy8gRGVmYXVsdCBpcyBmYWxzZSwgdGhlIGNhY2hlZCByZWN0cyBh
cmUgZW1wdHkgZnJvbSB0aGUgYmVnaW5uaW5nLgorICAgICwgbV9uZWVkc1NoYXBlVXBkYXRlKHRy
dWUpIC8vIERlZmF1bHQgaXMgdHJ1ZSwgc28gd2UgZ3JhYiBhIFBhdGggb2JqZWN0IG9uY2UgZnJv
bSBTVkdTdHlsZWRUcmFuc2Zvcm1hYmxlRWxlbWVudC4KKyAgICAsIG1fbmVlZHNUcmFuc2Zvcm1V
cGRhdGUodHJ1ZSkgLy8gRGVmYXVsdCBpcyB0cnVlLCBzbyB3ZSBncmFiIGEgQWZmaW5lVHJhbnNm
b3JtIG9iamVjdCBvbmNlIGZyb20gU1ZHU3R5bGVkVHJhbnNmb3JtYWJsZUVsZW1lbnQuCisgICAg
LCBtX2ZpbGxGYWxsYmFjayhmYWxzZSkKK3sKK30KKworUmVuZGVyU1ZHU2hhcGU6OlJlbmRlclNW
R1NoYXBlKFNWR1N0eWxlZFRyYW5zZm9ybWFibGVFbGVtZW50KiBub2RlLCBQYXRoKiBwYXRoLCBi
b29sIGlzRmlsbEZhbGxiYWNrKQorICAgIDogUmVuZGVyU1ZHTW9kZWxPYmplY3Qobm9kZSkKKyAg
ICAsIG1fZmlsbEZhbGxiYWNrKGlzRmlsbEZhbGxiYWNrKQoreworICAgICBtX3BhdGggPSBhZG9w
dFB0cihwYXRoKTsKK30KKworUmVuZGVyU1ZHU2hhcGU6On5SZW5kZXJTVkdTaGFwZSgpCit7Cit9
CisKK3ZvaWQgUmVuZGVyU1ZHU2hhcGU6OmNyZWF0ZVNoYXBlKCkKK3sKKyAgICBtX3BhdGggPSBh
ZG9wdFB0cihuZXcgUGF0aCk7CisgICAgQVNTRVJUKGlzRW1wdHkoKSk7CisKKyAgICBTVkdQYXRo
RWxlbWVudCogZWxlbWVudCA9IHN0YXRpY19jYXN0PFNWR1BhdGhFbGVtZW50Kj4obm9kZSgpKTsK
KyAgICBlbGVtZW50LT50b1BhdGhEYXRhKHBhdGgoKSk7Cit9CisKK2Jvb2wgUmVuZGVyU1ZHU2hh
cGU6OmlzRW1wdHkoKSBjb25zdAoreworICAgIHJldHVybiBtX3BhdGgtPmlzRW1wdHkoKTsKK30K
Kwordm9pZCBSZW5kZXJTVkdTaGFwZTo6ZmlsbFNoYXBlKEdyYXBoaWNzQ29udGV4dCogY29udGV4
dCkgY29uc3QKK3sKKyAgICBjb250ZXh0LT5maWxsUGF0aChwYXRoKCkpOworfQorCitGbG9hdFJl
Y3QgUmVuZGVyU1ZHU2hhcGU6Om9iamVjdEJvdW5kaW5nQm94KCkgY29uc3QKK3sKKyAgICByZXR1
cm4gbV9wYXRoLT5ib3VuZGluZ1JlY3QoKTsKK30KKworRmxvYXRSZWN0IFJlbmRlclNWR1NoYXBl
OjpzdHJva2VCb3VuZGluZ0JveCgpIGNvbnN0Cit7CisgICAgQm91bmRpbmdSZWN0U3Ryb2tlU3R5
bGVBcHBsaWVyIHN0cm9rZVN0eWxlKHRoaXMsIHN0eWxlKCkpOworICAgIHJldHVybiBtX3BhdGgt
PnN0cm9rZUJvdW5kaW5nUmVjdCgmc3Ryb2tlU3R5bGUpOworfQorCit2b2lkIFJlbmRlclNWR1No
YXBlOjpzdHJva2VTaGFwZShHcmFwaGljc0NvbnRleHQqIGNvbnRleHQpIGNvbnN0Cit7CisgICAg
Y29udGV4dC0+c3Ryb2tlUGF0aChwYXRoKCkpOworfQorCitib29sIFJlbmRlclNWR1NoYXBlOjpz
aGFwZURlcGVuZGVudFN0cm9rZUNvbnRhaW5zKGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50KQorewor
ICAgIEJvdW5kaW5nUmVjdFN0cm9rZVN0eWxlQXBwbGllciBhcHBsaWVyKHRoaXMsIHN0eWxlKCkp
OworICAgIHJldHVybiBtX3BhdGgtPnN0cm9rZUNvbnRhaW5zKCZhcHBsaWVyLCBwb2ludCk7Cit9
CisKK2Jvb2wgUmVuZGVyU1ZHU2hhcGU6OnNoYXBlRGVwZW5kZW50RmlsbENvbnRhaW5zKGNvbnN0
IEZsb2F0UG9pbnQmIHBvaW50LCBjb25zdCBXaW5kUnVsZSYgZmlsbFJ1bGUpIGNvbnN0Cit7Cisg
ICAgcmV0dXJuIG1fcGF0aC0+Y29udGFpbnMocG9pbnQsIGZpbGxSdWxlKTsKK30KKworYm9vbCBS
ZW5kZXJTVkdTaGFwZTo6ZmlsbENvbnRhaW5zKGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50LCBib29s
IHJlcXVpcmVzRmlsbCwgV2luZFJ1bGUgZmlsbFJ1bGUpCit7CisgICAgaWYgKCFtX2ZpbGxCb3Vu
ZGluZ0JveC5jb250YWlucyhwb2ludCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIENv
bG9yIGZhbGxiYWNrQ29sb3I7CisgICAgaWYgKHJlcXVpcmVzRmlsbCAmJiAhUmVuZGVyU1ZHUmVz
b3VyY2U6OmZpbGxQYWludGluZ1Jlc291cmNlKHRoaXMsIHN0eWxlKCksIGZhbGxiYWNrQ29sb3Ip
KQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICByZXR1cm4gc2hhcGVEZXBlbmRlbnRGaWxs
Q29udGFpbnMocG9pbnQsIGZpbGxSdWxlKTsKK30KKworYm9vbCBSZW5kZXJTVkdTaGFwZTo6c3Ry
b2tlQ29udGFpbnMoY29uc3QgRmxvYXRQb2ludCYgcG9pbnQsIGJvb2wgcmVxdWlyZXNTdHJva2Up
Cit7CisgICAgaWYgKCFtX3N0cm9rZUFuZE1hcmtlckJvdW5kaW5nQm94LmNvbnRhaW5zKHBvaW50
KSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgQ29sb3IgZmFsbGJhY2tDb2xvcjsKKyAg
ICBpZiAocmVxdWlyZXNTdHJva2UgJiYgIVJlbmRlclNWR1Jlc291cmNlOjpzdHJva2VQYWludGlu
Z1Jlc291cmNlKHRoaXMsIHN0eWxlKCksIGZhbGxiYWNrQ29sb3IpKQorICAgICAgICByZXR1cm4g
ZmFsc2U7CisKKyAgICBpZiAoc2hvdWxkU3Ryb2tlWmVyb0xlbmd0aFN1YnBhdGgoKSkKKyAgICAg
ICAgcmV0dXJuIHplcm9MZW5ndGhTdWJwYXRoUmVjdCgpLmNvbnRhaW5zKHBvaW50KTsKKworICAg
IGNvbnN0IFNWR1JlbmRlclN0eWxlKiBzdmdTdHlsZSA9IHN0eWxlKCktPnN2Z1N0eWxlKCk7Cisg
ICAgaWYgKCFzdmdTdHlsZS0+c3Ryb2tlRGFzaEFycmF5KCkuaXNFbXB0eSgpIHx8IHN2Z1N0eWxl
LT5zdHJva2VNaXRlckxpbWl0KCkgIT0gc3ZnU3R5bGUtPmluaXRpYWxTdHJva2VNaXRlckxpbWl0
KCkKKyAgICAgICAgfHwgc3ZnU3R5bGUtPmpvaW5TdHlsZSgpICE9IHN2Z1N0eWxlLT5pbml0aWFs
Sm9pblN0eWxlKCkgfHwgc3ZnU3R5bGUtPmNhcFN0eWxlKCkgIT0gc3ZnU3R5bGUtPmluaXRpYWxD
YXBTdHlsZSgpKSB7CisgICAgICAgIGlmICghbV9wYXRoKQorICAgICAgICAgICAgUmVuZGVyU1ZH
U2hhcGU6OmNyZWF0ZVNoYXBlKCk7CisgICAgICAgIHJldHVybiBSZW5kZXJTVkdTaGFwZTo6c2hh
cGVEZXBlbmRlbnRTdHJva2VDb250YWlucyhwb2ludCk7CisgICAgfQorICAgIHJldHVybiBzaGFw
ZURlcGVuZGVudFN0cm9rZUNvbnRhaW5zKHBvaW50KTsKK30KKwordm9pZCBSZW5kZXJTVkdTaGFw
ZTo6bGF5b3V0KCkKK3sKKyAgICBMYXlvdXRSZXBhaW50ZXIgcmVwYWludGVyKCp0aGlzLCBjaGVj
a0ZvclJlcGFpbnREdXJpbmdMYXlvdXQoKSAmJiBzZWxmTmVlZHNMYXlvdXQoKSk7CisgICAgU1ZH
U3R5bGVkVHJhbnNmb3JtYWJsZUVsZW1lbnQqIGVsZW1lbnQgPSBzdGF0aWNfY2FzdDxTVkdTdHls
ZWRUcmFuc2Zvcm1hYmxlRWxlbWVudCo+KG5vZGUoKSk7CisKKyAgICBib29sIHVwZGF0ZUNhY2hl
ZEJvdW5kYXJpZXNJblBhcmVudHMgPSBmYWxzZTsKKworICAgIGJvb2wgbmVlZHNTaGFwZVVwZGF0
ZSA9IG1fbmVlZHNTaGFwZVVwZGF0ZTsKKyAgICBpZiAobmVlZHNTaGFwZVVwZGF0ZSkgeworICAg
ICAgICBjcmVhdGVTaGFwZSgpOworICAgICAgICBtX25lZWRzU2hhcGVVcGRhdGUgPSBmYWxzZTsK
KyAgICAgICAgdXBkYXRlQ2FjaGVkQm91bmRhcmllc0luUGFyZW50cyA9IHRydWU7CisgICAgfQor
CisgICAgaWYgKG1fbmVlZHNUcmFuc2Zvcm1VcGRhdGUpIHsKKyAgICAgICAgbV9sb2NhbFRyYW5z
Zm9ybSA9IGVsZW1lbnQtPmFuaW1hdGVkTG9jYWxUcmFuc2Zvcm0oKTsKKyAgICAgICAgbV9uZWVk
c1RyYW5zZm9ybVVwZGF0ZSA9IGZhbHNlOworICAgICAgICB1cGRhdGVDYWNoZWRCb3VuZGFyaWVz
SW5QYXJlbnRzID0gdHJ1ZTsKKyAgICB9CisKKyAgICBpZiAobV9uZWVkc0JvdW5kYXJpZXNVcGRh
dGUpIHsKKyAgICAgICAgdXBkYXRlQ2FjaGVkQm91bmRhcmllc0luUGFyZW50cyA9IHRydWU7Cisg
ICAgICAgIHNldGlzUGFpbnRpbmdGYWxsYmFjayhmYWxzZSk7CisgICAgICAgIGNyZWF0ZVNoYXBl
KCk7CisgICAgfQorCisgICAgLy8gSW52YWxpZGF0ZSBhbGwgcmVzb3VyY2VzIG9mIHRoaXMgY2xp
ZW50IGlmIG91ciBsYXlvdXQgY2hhbmdlZC4KKyAgICBpZiAobV9ldmVySGFkTGF5b3V0ICYmIHNl
bGZOZWVkc0xheW91dCgpKSB7CisgICAgICAgIFNWR1Jlc291cmNlc0NhY2hlOjpjbGllbnRMYXlv
dXRDaGFuZ2VkKHRoaXMpOworICAgICAgICBtX21hcmtlckxheW91dEluZm8uY2xlYXIoKTsKKyAg
ICB9CisKKyAgICAvLyBBdCB0aGlzIHBvaW50IExheW91dFJlcGFpbnRlciBhbHJlYWR5IGdyYWJi
ZWQgdGhlIG9sZCBib3VuZHMsCisgICAgLy8gcmVjYWxjdWxhdGUgdGhlbSBub3cgc28gcmVwYWlu
dEFmdGVyTGF5b3V0KCkgdXNlcyB0aGUgbmV3IGJvdW5kcy4KKyAgICBpZiAobmVlZHNTaGFwZVVw
ZGF0ZSB8fCBtX25lZWRzQm91bmRhcmllc1VwZGF0ZSkgeworICAgICAgICB1cGRhdGVDYWNoZWRC
b3VuZGFyaWVzKCk7CisgICAgICAgIG1fbmVlZHNCb3VuZGFyaWVzVXBkYXRlID0gZmFsc2U7Cisg
ICAgfQorCisgICAgLy8gSWYgb3VyIGJvdW5kcyBjaGFuZ2VkLCBub3RpZnkgdGhlIHBhcmVudHMu
CisgICAgaWYgKHVwZGF0ZUNhY2hlZEJvdW5kYXJpZXNJblBhcmVudHMpCisgICAgICAgIFJlbmRl
clNWR01vZGVsT2JqZWN0OjpzZXROZWVkc0JvdW5kYXJpZXNVcGRhdGUoKTsKKworICAgIHJlcGFp
bnRlci5yZXBhaW50QWZ0ZXJMYXlvdXQoKTsKKyAgICBzZXROZWVkc0xheW91dChmYWxzZSk7Cit9
CisKK2Jvb2wgUmVuZGVyU1ZHU2hhcGU6OnNob3VsZFN0cm9rZVplcm9MZW5ndGhTdWJwYXRoKCkg
Y29uc3QKK3sKKyAgICAvLyBTcGVjKDExLjQpOiBBbnkgemVybyBsZW5ndGggc3VicGF0aCBzaGFs
bCBub3QgYmUgc3Ryb2tlZCBpZiB0aGUg4oCYc3Ryb2tlLWxpbmVjYXDigJkgcHJvcGVydHkgaGFz
IGEgdmFsdWUgb2YgYnV0dAorICAgIC8vIGJ1dCBzaGFsbCBiZSBzdHJva2VkIGlmIHRoZSDigJhz
dHJva2UtbGluZWNhcOKAmSBwcm9wZXJ0eSBoYXMgYSB2YWx1ZSBvZiByb3VuZCBvciBzcXVhcmUK
KyAgICByZXR1cm4gc3R5bGUoKS0+c3ZnU3R5bGUoKS0+aGFzU3Ryb2tlKCkgJiYgc3R5bGUoKS0+
c3ZnU3R5bGUoKS0+Y2FwU3R5bGUoKSAhPSBCdXR0Q2FwICYmICFtX2ZpbGxCb3VuZGluZ0JveC53
aWR0aCgpICYmICFtX2ZpbGxCb3VuZGluZ0JveC5oZWlnaHQoKTsKK30KKworRmxvYXRSZWN0IFJl
bmRlclNWR1NoYXBlOjp6ZXJvTGVuZ3RoU3VicGF0aFJlY3QoKSBjb25zdAoreworICAgIGZsb2F0
IHN0cm9rZVdpZHRoID0gdGhpcy0+c3Ryb2tlV2lkdGgoKTsKKyAgICByZXR1cm4gRmxvYXRSZWN0
KG1fZmlsbEJvdW5kaW5nQm94LngoKSAtIHN0cm9rZVdpZHRoIC8gMiwgbV9maWxsQm91bmRpbmdC
b3gueSgpIC0gc3Ryb2tlV2lkdGggLyAyLCBzdHJva2VXaWR0aCwgc3Ryb2tlV2lkdGgpOworfQor
Cit2b2lkIFJlbmRlclNWR1NoYXBlOjpzZXR1cFNxdWFyZUNhcFBhdGgoaW50JiBhcHBseU1vZGUp
Cit7CisgICAgLy8gU3BlYygxMS40KTogQW55IHplcm8gbGVuZ3RoIHN1YnBhdGggc2hhbGwgbm90
IGJlIHN0cm9rZWQgaWYgdGhlIOKAmHN0cm9rZS1saW5lY2Fw4oCZIHByb3BlcnR5IGhhcyBhIHZh
bHVlIG9mIGJ1dHQKKyAgICAvLyBidXQgc2hhbGwgYmUgc3Ryb2tlZCBpZiB0aGUg4oCYc3Ryb2tl
LWxpbmVjYXDigJkgcHJvcGVydHkgaGFzIGEgdmFsdWUgb2Ygcm91bmQgb3Igc3F1YXJlCisgICAg
YXBwbHlNb2RlID0gQXBwbHlUb0ZpbGxNb2RlOworICAgIG1fcGF0aC0+Y2xlYXIoKTsKKyAgICBp
ZiAoc3R5bGUoKS0+c3ZnU3R5bGUoKS0+Y2FwU3R5bGUoKSA9PSBTcXVhcmVDYXApCisgICAgICAg
IG1fcGF0aC0+YWRkUmVjdCh6ZXJvTGVuZ3RoU3VicGF0aFJlY3QoKSk7CisgICAgZWxzZQorICAg
ICAgICBtX3BhdGgtPmFkZEVsbGlwc2UoemVyb0xlbmd0aFN1YnBhdGhSZWN0KCkpOworfQorCiti
b29sIFJlbmRlclNWR1NoYXBlOjpzZXR1cE5vblNjYWxpbmdTdHJva2VQYXRoKEdyYXBoaWNzQ29u
dGV4dFN0YXRlU2F2ZXImIHN0YXRlU2F2ZXIpCit7CisgICAgU1ZHU3R5bGVkVHJhbnNmb3JtYWJs
ZUVsZW1lbnQqIGVsZW1lbnQgPSBzdGF0aWNfY2FzdDxTVkdTdHlsZWRUcmFuc2Zvcm1hYmxlRWxl
bWVudCo+KG5vZGUoKSk7CisgICAgQWZmaW5lVHJhbnNmb3JtIG5vblNjYWxpbmdTdHJva2VUcmFu
c2Zvcm0gPSBlbGVtZW50LT5nZXRTY3JlZW5DVE0oU1ZHTG9jYXRhYmxlOjpEaXNhbGxvd1N0eWxl
VXBkYXRlKTsKKyAgICBpZiAoIW5vblNjYWxpbmdTdHJva2VUcmFuc2Zvcm0uaXNJbnZlcnRpYmxl
KCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIG1fcGF0aC0+dHJhbnNmb3JtKG5vblNj
YWxpbmdTdHJva2VUcmFuc2Zvcm0pOworCisgICAgc3RhdGVTYXZlci5zYXZlKCk7CisgICAgc3Rh
dGVTYXZlci5jb250ZXh0KCktPmNvbmNhdENUTShub25TY2FsaW5nU3Ryb2tlVHJhbnNmb3JtLmlu
dmVyc2UoKSk7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK3ZvaWQgUmVuZGVyU1ZHU2hhcGU6OmZp
bGxBbmRTdHJva2VQYXRoKEdyYXBoaWNzQ29udGV4dCogY29udGV4dCkKK3sKKyAgICBSZW5kZXJT
dHlsZSogc3R5bGUgPSB0aGlzLT5zdHlsZSgpOworCisgICAgQ29sb3IgZmFsbGJhY2tDb2xvcjsK
KyAgICBpZiAoUmVuZGVyU1ZHUmVzb3VyY2UqIGZpbGxQYWludGluZ1Jlc291cmNlID0gUmVuZGVy
U1ZHUmVzb3VyY2U6OmZpbGxQYWludGluZ1Jlc291cmNlKHRoaXMsIHN0eWxlLCBmYWxsYmFja0Nv
bG9yKSkgeworICAgICAgICBpZiAoZmlsbFBhaW50aW5nUmVzb3VyY2UtPmFwcGx5UmVzb3VyY2Uo
dGhpcywgc3R5bGUsIGNvbnRleHQsIEFwcGx5VG9GaWxsTW9kZSkpCisgICAgICAgICAgICBmaWxs
UGFpbnRpbmdSZXNvdXJjZS0+cG9zdEFwcGx5UmVzb3VyY2UodGhpcywgY29udGV4dCwgQXBwbHlU
b0ZpbGxNb2RlLCAwLCB0aGlzKTsKKyAgICAgICAgZWxzZSBpZiAoZmFsbGJhY2tDb2xvci5pc1Zh
bGlkKCkpIHsKKyAgICAgICAgICAgIFJlbmRlclNWR1Jlc291cmNlU29saWRDb2xvciogZmFsbGJh
Y2tSZXNvdXJjZSA9IFJlbmRlclNWR1Jlc291cmNlOjpzaGFyZWRTb2xpZFBhaW50aW5nUmVzb3Vy
Y2UoKTsKKyAgICAgICAgICAgIGZhbGxiYWNrUmVzb3VyY2UtPnNldENvbG9yKGZhbGxiYWNrQ29s
b3IpOworICAgICAgICAgICAgaWYgKGZhbGxiYWNrUmVzb3VyY2UtPmFwcGx5UmVzb3VyY2UodGhp
cywgc3R5bGUsIGNvbnRleHQsIEFwcGx5VG9GaWxsTW9kZSkpCisgICAgICAgICAgICAgICAgZmFs
bGJhY2tSZXNvdXJjZS0+cG9zdEFwcGx5UmVzb3VyY2UodGhpcywgY29udGV4dCwgQXBwbHlUb0Zp
bGxNb2RlLCAwLCB0aGlzKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIGZhbGxiYWNrQ29sb3Ig
PSBDb2xvcigpOworICAgIFJlbmRlclNWR1Jlc291cmNlKiBzdHJva2VQYWludGluZ1Jlc291cmNl
ID0gUmVuZGVyU1ZHUmVzb3VyY2U6OnN0cm9rZVBhaW50aW5nUmVzb3VyY2UodGhpcywgc3R5bGUs
IGZhbGxiYWNrQ29sb3IpOworICAgIGlmICghc3Ryb2tlUGFpbnRpbmdSZXNvdXJjZSkKKyAgICAg
ICAgcmV0dXJuOworCisgICAgaW50IGFwcGx5TW9kZSA9IEFwcGx5VG9TdHJva2VNb2RlOworCisg
ICAgYm9vbCBub25TY2FsaW5nU3Ryb2tlID0gc3R5bGUtPnN2Z1N0eWxlKCktPnZlY3RvckVmZmVj
dCgpID09IFZFX05PTl9TQ0FMSU5HX1NUUk9LRTsKKworICAgIEdyYXBoaWNzQ29udGV4dFN0YXRl
U2F2ZXIgc3RhdGVTYXZlcigqY29udGV4dCwgZmFsc2UpOworCisgICAgLy8gU3BlYygxMS40KTog
QW55IHplcm8gbGVuZ3RoIHN1YnBhdGggc2hhbGwgbm90IGJlIHN0cm9rZWQgaWYgdGhlIOKAmHN0
cm9rZS1saW5lY2Fw4oCZIHByb3BlcnR5IGhhcyBhIHZhbHVlIG9mIGJ1dHQKKyAgICAvLyBidXQg
c2hhbGwgYmUgc3Ryb2tlZCBpZiB0aGUg4oCYc3Ryb2tlLWxpbmVjYXDigJkgcHJvcGVydHkgaGFz
IGEgdmFsdWUgb2Ygcm91bmQgb3Igc3F1YXJlCisgICAgLy8gRklYTUU6IHRoaXMgZG9lcyBub3Qg
d29yayBmb3IgemVyby1sZW5ndGggc3VicGF0aHMsIG9ubHkgd2hlbiB0b3RhbCBwYXRoIGlzIHpl
cm8tbGVuZ3RoCisgICAgaWYgKHNob3VsZFN0cm9rZVplcm9MZW5ndGhTdWJwYXRoKCkpIHsKKyAg
ICAgICAgUmVuZGVyU1ZHU2hhcGU6OmNyZWF0ZVNoYXBlKCk7CisgICAgICAgIHNldHVwU3F1YXJl
Q2FwUGF0aChhcHBseU1vZGUpOworICAgICAgICBzZXRpc1BhaW50aW5nRmFsbGJhY2sodHJ1ZSk7
CisgICAgfSBlbHNlIGlmIChub25TY2FsaW5nU3Ryb2tlKSB7CisgICAgICAgIFJlbmRlclNWR1No
YXBlOjpjcmVhdGVTaGFwZSgpOworICAgICAgICBzZXRpc1BhaW50aW5nRmFsbGJhY2sodHJ1ZSk7
CisgICAgICAgIGlmICghc2V0dXBOb25TY2FsaW5nU3Ryb2tlUGF0aChzdGF0ZVNhdmVyKSkKKyAg
ICAgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgaWYgKHN0cm9rZVBhaW50aW5nUmVzb3VyY2Ut
PmFwcGx5UmVzb3VyY2UodGhpcywgc3R5bGUsIGNvbnRleHQsIGFwcGx5TW9kZSkpIHsKKyAgICAg
ICAgc3Ryb2tlUGFpbnRpbmdSZXNvdXJjZS0+cG9zdEFwcGx5UmVzb3VyY2UodGhpcywgY29udGV4
dCwgYXBwbHlNb2RlLCAwLCB0aGlzKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBpZiAo
IWZhbGxiYWNrQ29sb3IuaXNWYWxpZCgpKQorICAgICAgICByZXR1cm47CisgICAgUmVuZGVyU1ZH
UmVzb3VyY2VTb2xpZENvbG9yKiBmYWxsYmFja1Jlc291cmNlID0gUmVuZGVyU1ZHUmVzb3VyY2U6
OnNoYXJlZFNvbGlkUGFpbnRpbmdSZXNvdXJjZSgpOworICAgIGZhbGxiYWNrUmVzb3VyY2UtPnNl
dENvbG9yKGZhbGxiYWNrQ29sb3IpOworICAgIGlmIChmYWxsYmFja1Jlc291cmNlLT5hcHBseVJl
c291cmNlKHRoaXMsIHN0eWxlLCBjb250ZXh0LCBhcHBseU1vZGUpKQorICAgICAgICBmYWxsYmFj
a1Jlc291cmNlLT5wb3N0QXBwbHlSZXNvdXJjZSh0aGlzLCBjb250ZXh0LCBhcHBseU1vZGUsIDAs
IHRoaXMpOworfQorCit2b2lkIFJlbmRlclNWR1NoYXBlOjpwYWludChQYWludEluZm8mIHBhaW50
SW5mbywgY29uc3QgSW50UG9pbnQmKQoreworICAgIGlmIChwYWludEluZm8uY29udGV4dC0+cGFp
bnRpbmdEaXNhYmxlZCgpIHx8IHN0eWxlKCktPnZpc2liaWxpdHkoKSA9PSBISURERU4gfHwgaXNF
bXB0eSgpKQorICAgICAgICByZXR1cm47CisgICAgRmxvYXRSZWN0IGJvdW5kaW5nQm94ID0gcmVw
YWludFJlY3RJbkxvY2FsQ29vcmRpbmF0ZXMoKTsKKyAgICBpZiAoIVNWR1JlbmRlclN1cHBvcnQ6
OnBhaW50SW5mb0ludGVyc2VjdHNSZXBhaW50UmVjdChib3VuZGluZ0JveCwgbV9sb2NhbFRyYW5z
Zm9ybSwgcGFpbnRJbmZvKSkKKyAgICAgICAgcmV0dXJuOworICAgIFBhaW50SW5mbyBjaGlsZFBh
aW50SW5mbyhwYWludEluZm8pOworICAgIGJvb2wgZHJhd3NPdXRsaW5lID0gc3R5bGUoKS0+b3V0
bGluZVdpZHRoKCkgJiYgKGNoaWxkUGFpbnRJbmZvLnBoYXNlID09IFBhaW50UGhhc2VPdXRsaW5l
IHx8IGNoaWxkUGFpbnRJbmZvLnBoYXNlID09IFBhaW50UGhhc2VTZWxmT3V0bGluZSk7CisgICAg
aWYgKGRyYXdzT3V0bGluZSB8fCBjaGlsZFBhaW50SW5mby5waGFzZSA9PSBQYWludFBoYXNlRm9y
ZWdyb3VuZCkgeworICAgICAgICBHcmFwaGljc0NvbnRleHRTdGF0ZVNhdmVyIHN0YXRlU2F2ZXIo
KmNoaWxkUGFpbnRJbmZvLmNvbnRleHQpOworICAgICAgICBjaGlsZFBhaW50SW5mby5hcHBseVRy
YW5zZm9ybShtX2xvY2FsVHJhbnNmb3JtKTsKKworICAgICAgICBpZiAoY2hpbGRQYWludEluZm8u
cGhhc2UgPT0gUGFpbnRQaGFzZUZvcmVncm91bmQpIHsKKyAgICAgICAgICAgIFBhaW50SW5mbyBz
YXZlZEluZm8oY2hpbGRQYWludEluZm8pOworCisgICAgICAgICAgICBpZiAoU1ZHUmVuZGVyU3Vw
cG9ydDo6cHJlcGFyZVRvUmVuZGVyU1ZHQ29udGVudCh0aGlzLCBjaGlsZFBhaW50SW5mbykpIHsK
KyAgICAgICAgICAgICAgICBjb25zdCBTVkdSZW5kZXJTdHlsZSogc3ZnU3R5bGUgPSBzdHlsZSgp
LT5zdmdTdHlsZSgpOworICAgICAgICAgICAgICAgIGlmIChzdmdTdHlsZS0+c2hhcGVSZW5kZXJp
bmcoKSA9PSBTUl9DUklTUEVER0VTKQorICAgICAgICAgICAgICAgICAgICBjaGlsZFBhaW50SW5m
by5jb250ZXh0LT5zZXRTaG91bGRBbnRpYWxpYXMoZmFsc2UpOworCisgICAgICAgICAgICAgICAg
ZmlsbEFuZFN0cm9rZVBhdGgoY2hpbGRQYWludEluZm8uY29udGV4dCk7CisKKyAgICAgICAgICAg
ICAgICBpZiAoc3ZnU3R5bGUtPmhhc01hcmtlcnMoKSkKKyAgICAgICAgICAgICAgICAgICAgbV9t
YXJrZXJMYXlvdXRJbmZvLmRyYXdNYXJrZXJzKGNoaWxkUGFpbnRJbmZvKTsKKyAgICAgICAgICAg
IH0KKworICAgICAgICAgICAgU1ZHUmVuZGVyU3VwcG9ydDo6ZmluaXNoUmVuZGVyU1ZHQ29udGVu
dCh0aGlzLCBjaGlsZFBhaW50SW5mbywgc2F2ZWRJbmZvLmNvbnRleHQpOworICAgICAgICB9CisK
KyAgICAgICAgaWYgKGRyYXdzT3V0bGluZSkKKyAgICAgICAgICAgIHBhaW50T3V0bGluZShjaGls
ZFBhaW50SW5mby5jb250ZXh0LCBJbnRSZWN0KGJvdW5kaW5nQm94KSk7CisgICAgfQorfQorCisv
LyBUaGlzIG1ldGhvZCBpcyBjYWxsZWQgZnJvbSBpbnNpZGUgcGFpbnRPdXRsaW5lKCkgc2luY2Ug
d2UgY2FsbCBwYWludE91dGxpbmUoKQorLy8gd2hpbGUgdHJhbnNmb3JtZWQgdG8gb3VyIGNvb3Jk
IHN5c3RlbSwgcmV0dXJuIGxvY2FsIGNvb3Jkcwordm9pZCBSZW5kZXJTVkdTaGFwZTo6YWRkRm9j
dXNSaW5nUmVjdHMoVmVjdG9yPExheW91dFJlY3Q+JiByZWN0cywgY29uc3QgTGF5b3V0UG9pbnQm
KQoreworICAgIExheW91dFJlY3QgcmVjdCA9IGVuY2xvc2luZ0xheW91dFJlY3QocmVwYWludFJl
Y3RJbkxvY2FsQ29vcmRpbmF0ZXMoKSk7CisgICAgaWYgKCFyZWN0LmlzRW1wdHkoKSkKKyAgICAg
ICAgcmVjdHMuYXBwZW5kKHJlY3QpOworfQorCitib29sIFJlbmRlclNWR1NoYXBlOjpub2RlQXRG
bG9hdFBvaW50KGNvbnN0IEhpdFRlc3RSZXF1ZXN0JiByZXF1ZXN0LCBIaXRUZXN0UmVzdWx0JiBy
ZXN1bHQsIGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50SW5QYXJlbnQsIEhpdFRlc3RBY3Rpb24gaGl0
VGVzdEFjdGlvbikKK3sKKyAgICAvLyBXZSBvbmx5IGRyYXcgaW4gdGhlIGZvcmdyb3VuZCBwaGFz
ZSwgc28gd2Ugb25seSBoaXQtdGVzdCB0aGVuLgorICAgIGlmIChoaXRUZXN0QWN0aW9uICE9IEhp
dFRlc3RGb3JlZ3JvdW5kKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBGbG9hdFBvaW50
IGxvY2FsUG9pbnQgPSBtX2xvY2FsVHJhbnNmb3JtLmludmVyc2UoKS5tYXBQb2ludChwb2ludElu
UGFyZW50KTsKKworICAgIGlmICghU1ZHUmVuZGVyU3VwcG9ydDo6cG9pbnRJbkNsaXBwaW5nQXJl
YSh0aGlzLCBsb2NhbFBvaW50KSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgUG9pbnRl
ckV2ZW50c0hpdFJ1bGVzIGhpdFJ1bGVzKFBvaW50ZXJFdmVudHNIaXRSdWxlczo6U1ZHX1BBVEhf
SElUVEVTVElORywgcmVxdWVzdCwgc3R5bGUoKS0+cG9pbnRlckV2ZW50cygpKTsKKyAgICBib29s
IGlzVmlzaWJsZSA9IChzdHlsZSgpLT52aXNpYmlsaXR5KCkgPT0gVklTSUJMRSk7CisgICAgaWYg
KGlzVmlzaWJsZSB8fCAhaGl0UnVsZXMucmVxdWlyZVZpc2libGUpIHsKKyAgICAgICAgY29uc3Qg
U1ZHUmVuZGVyU3R5bGUqIHN2Z1N0eWxlID0gc3R5bGUoKS0+c3ZnU3R5bGUoKTsKKyAgICAgICAg
V2luZFJ1bGUgZmlsbFJ1bGUgPSBzdmdTdHlsZS0+ZmlsbFJ1bGUoKTsKKyAgICAgICAgaWYgKHJl
cXVlc3Quc3ZnQ2xpcENvbnRlbnQoKSkKKyAgICAgICAgICAgIGZpbGxSdWxlID0gc3ZnU3R5bGUt
PmNsaXBSdWxlKCk7CisgICAgICAgIGlmICgoaGl0UnVsZXMuY2FuSGl0U3Ryb2tlICYmIChzdmdT
dHlsZS0+aGFzU3Ryb2tlKCkgfHwgIWhpdFJ1bGVzLnJlcXVpcmVTdHJva2UpICYmIHN0cm9rZUNv
bnRhaW5zKGxvY2FsUG9pbnQsIGhpdFJ1bGVzLnJlcXVpcmVTdHJva2UpKQorICAgICAgICAgICAg
fHwgKGhpdFJ1bGVzLmNhbkhpdEZpbGwgJiYgKHN2Z1N0eWxlLT5oYXNGaWxsKCkgfHwgIWhpdFJ1
bGVzLnJlcXVpcmVGaWxsKSAmJiBmaWxsQ29udGFpbnMobG9jYWxQb2ludCwgaGl0UnVsZXMucmVx
dWlyZUZpbGwsIGZpbGxSdWxlKSkpIHsKKyAgICAgICAgICAgIHVwZGF0ZUhpdFRlc3RSZXN1bHQo
cmVzdWx0LCByb3VuZGVkTGF5b3V0UG9pbnQobG9jYWxQb2ludCkpOworICAgICAgICAgICAgcmV0
dXJuIHRydWU7CisgICAgICAgIH0KKyAgICB9CisgICAgcmV0dXJuIGZhbHNlOworfQorCitGbG9h
dFJlY3QgUmVuZGVyU1ZHU2hhcGU6OmNhbGN1bGF0ZU1hcmtlckJvdW5kc0lmTmVlZGVkKCkKK3sK
KyAgICBTVkdFbGVtZW50KiBzdmdFbGVtZW50ID0gc3RhdGljX2Nhc3Q8U1ZHRWxlbWVudCo+KG5v
ZGUoKSk7CisgICAgQVNTRVJUKHN2Z0VsZW1lbnQgJiYgc3ZnRWxlbWVudC0+ZG9jdW1lbnQoKSk7
CisgICAgaWYgKCFzdmdFbGVtZW50LT5pc1N0eWxlZCgpKQorICAgICAgICByZXR1cm4gRmxvYXRS
ZWN0KCk7CisKKyAgICBTVkdTdHlsZWRFbGVtZW50KiBzdHlsZWRFbGVtZW50ID0gc3RhdGljX2Nh
c3Q8U1ZHU3R5bGVkRWxlbWVudCo+KHN2Z0VsZW1lbnQpOworICAgIGlmICghc3R5bGVkRWxlbWVu
dC0+c3VwcG9ydHNNYXJrZXJzKCkpCisgICAgICAgIHJldHVybiBGbG9hdFJlY3QoKTsKKworICAg
IEFTU0VSVChzdHlsZSgpLT5zdmdTdHlsZSgpLT5oYXNNYXJrZXJzKCkpOworCisgICAgU1ZHUmVz
b3VyY2VzKiByZXNvdXJjZXMgPSBTVkdSZXNvdXJjZXNDYWNoZTo6Y2FjaGVkUmVzb3VyY2VzRm9y
UmVuZGVyT2JqZWN0KHRoaXMpOworICAgIGlmICghcmVzb3VyY2VzKQorICAgICAgICByZXR1cm4g
RmxvYXRSZWN0KCk7CisKKyAgICBSZW5kZXJTVkdSZXNvdXJjZU1hcmtlciogbWFya2VyU3RhcnQg
PSByZXNvdXJjZXMtPm1hcmtlclN0YXJ0KCk7CisgICAgUmVuZGVyU1ZHUmVzb3VyY2VNYXJrZXIq
IG1hcmtlck1pZCA9IHJlc291cmNlcy0+bWFya2VyTWlkKCk7CisgICAgUmVuZGVyU1ZHUmVzb3Vy
Y2VNYXJrZXIqIG1hcmtlckVuZCA9IHJlc291cmNlcy0+bWFya2VyRW5kKCk7CisgICAgaWYgKCFt
YXJrZXJTdGFydCAmJiAhbWFya2VyTWlkICYmICFtYXJrZXJFbmQpCisgICAgICAgIHJldHVybiBG
bG9hdFJlY3QoKTsKKworICAgIHJldHVybiBtX21hcmtlckxheW91dEluZm8uY2FsY3VsYXRlQm91
bmRhcmllcyhtYXJrZXJTdGFydCwgbWFya2VyTWlkLCBtYXJrZXJFbmQsIHN0cm9rZVdpZHRoKCks
IHBhdGgoKSk7Cit9CisKK3ZvaWQgUmVuZGVyU1ZHU2hhcGU6OnVwZGF0ZUNhY2hlZEJvdW5kYXJp
ZXMoKQoreworICAgIGlmIChpc0VtcHR5KCkpIHsKKyAgICAgICAgbV9maWxsQm91bmRpbmdCb3gg
PSBGbG9hdFJlY3QoKTsKKyAgICAgICAgbV9zdHJva2VBbmRNYXJrZXJCb3VuZGluZ0JveCA9IEZs
b2F0UmVjdCgpOworICAgICAgICBtX3JlcGFpbnRCb3VuZGluZ0JveCA9IEZsb2F0UmVjdCgpOwor
ICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgLy8gQ2FjaGUgX3VuY2xpcHBlZF8gZmlsbCBi
b3VuZGluZyBib3gsIHVzZWQgZm9yIGNhbGN1bGF0aW9ucyBpbiByZXNvdXJjZXMKKyAgICBtX2Zp
bGxCb3VuZGluZ0JveCA9IG9iamVjdEJvdW5kaW5nQm94KCk7CisKKyAgICAvLyBTcGVjKDExLjQp
OiBBbnkgemVybyBsZW5ndGggc3VicGF0aCBzaGFsbCBub3QgYmUgc3Ryb2tlZCBpZiB0aGUg4oCY
c3Ryb2tlLWxpbmVjYXDigJkgcHJvcGVydHkgaGFzIGEgdmFsdWUgb2YgYnV0dAorICAgIC8vIGJ1
dCBzaGFsbCBiZSBzdHJva2VkIGlmIHRoZSDigJhzdHJva2UtbGluZWNhcOKAmSBwcm9wZXJ0eSBo
YXMgYSB2YWx1ZSBvZiByb3VuZCBvciBzcXVhcmUKKyAgICBpZiAoc2hvdWxkU3Ryb2tlWmVyb0xl
bmd0aFN1YnBhdGgoKSkgeworICAgICAgICBtX3N0cm9rZUFuZE1hcmtlckJvdW5kaW5nQm94ID0g
emVyb0xlbmd0aFN1YnBhdGhSZWN0KCk7CisgICAgICAgIC8vIENhY2hlIHNtYWxsZXN0IHBvc3Np
YmxlIHJlcGFpbnQgcmVjdGFuZ2xlCisgICAgICAgIG1fcmVwYWludEJvdW5kaW5nQm94ID0gbV9z
dHJva2VBbmRNYXJrZXJCb3VuZGluZ0JveDsKKyAgICAgICAgU1ZHUmVuZGVyU3VwcG9ydDo6aW50
ZXJzZWN0UmVwYWludFJlY3RXaXRoUmVzb3VyY2VzKHRoaXMsIG1fcmVwYWludEJvdW5kaW5nQm94
KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIC8vIENhY2hlIF91bmNsaXBwZWRfIHN0
cm9rZSBib3VuZGluZyBib3gsIHVzZWQgZm9yIGNhbGN1bGF0aW9ucyBpbiByZXNvdXJjZXMgKGlu
Y2x1ZGVzIG1hcmtlciBib3VuZGFyaWVzKQorICAgIG1fc3Ryb2tlQW5kTWFya2VyQm91bmRpbmdC
b3ggPSBtX2ZpbGxCb3VuZGluZ0JveDsKKworICAgIGNvbnN0IFNWR1JlbmRlclN0eWxlKiBzdmdT
dHlsZSA9IHN0eWxlKCktPnN2Z1N0eWxlKCk7CisgICAgaWYgKHN2Z1N0eWxlLT5oYXNTdHJva2Uo
KSkKKyAgICAgICAgbV9zdHJva2VBbmRNYXJrZXJCb3VuZGluZ0JveC51bml0ZShzdHJva2VCb3Vu
ZGluZ0JveCgpKTsKKworICAgIGluZmxhdGVXaXRoTWFya2VyQm91bmRzKCk7CisKKyAgICAvLyBD
YWNoZSBzbWFsbGVzdCBwb3NzaWJsZSByZXBhaW50IHJlY3RhbmdsZQorICAgIG1fcmVwYWludEJv
dW5kaW5nQm94ID0gbV9zdHJva2VBbmRNYXJrZXJCb3VuZGluZ0JveDsKKyAgICBTVkdSZW5kZXJT
dXBwb3J0OjppbnRlcnNlY3RSZXBhaW50UmVjdFdpdGhSZXNvdXJjZXModGhpcywgbV9yZXBhaW50
Qm91bmRpbmdCb3gpOworfQorCitmbG9hdCBSZW5kZXJTVkdTaGFwZTo6c3Ryb2tlV2lkdGgoKSBj
b25zdAoreworICAgIFNWR0VsZW1lbnQqIHN2Z0VsZW1lbnQgPSBzdGF0aWNfY2FzdDxTVkdFbGVt
ZW50Kj4obm9kZSgpKTsKKyAgICByZXR1cm4gc3R5bGUoKS0+c3ZnU3R5bGUoKS0+c3Ryb2tlV2lk
dGgoKS52YWx1ZShzdmdFbGVtZW50KTsKK30KKworfQorCisjZW5kaWYgLy8gRU5BQkxFKFNWRykK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHU2hhcGUu
aCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHU2hhcGUuaApuZXcgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40ZWQ2OTQ2Ci0tLSAvZGV2L251bGwKKysrIGIv
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdTaGFwZS5oCkBAIC0wLDAgKzEs
MTU5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1LCAyMDA3IE5pa29sYXMgWmlt
bWVybWFubiA8emltbWVybWFubkBrZGUub3JnPgorICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1
IFJvYiBCdWlzIDxidWlzQGtkZS5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDUgRXJpYyBTZWlk
ZWwgPGVyaWNAd2Via2l0Lm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAwNiBBcHBsZSBDb21wdXRl
ciwgSW5jCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgR29vZ2xlLCBJbmMuCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTEgUmVuYXRhIEhvZG92YW4gPHJlbmlAd2Via2l0Lm9yZz4KKyAqIENvcHlyaWdodCAo
QykgMjAxMSBVbml2ZXJzaXR5IG9mIFN6ZWdlZAorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVl
IHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1
bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNl
bnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIK
KyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0
ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhv
cGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsg
d2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkg
b3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGli
cmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91
IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQ
dWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBD
T1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5k
YXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24s
IE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaWZuZGVmIFJlbmRlclNWR1NoYXBlX2gKKyNk
ZWZpbmUgUmVuZGVyU1ZHU2hhcGVfaAorCisjaWYgRU5BQkxFKFNWRykKKyNpbmNsdWRlICJBZmZp
bmVUcmFuc2Zvcm0uaCIKKyNpbmNsdWRlICJGbG9hdFJlY3QuaCIKKyNpbmNsdWRlICJSZW5kZXJT
VkdNb2RlbE9iamVjdC5oIgorI2luY2x1ZGUgIlNWR01hcmtlckxheW91dEluZm8uaCIKKyNpbmNs
dWRlICJTdHJva2VTdHlsZUFwcGxpZXIuaCIKKyNpbmNsdWRlIDx3dGYvT3duUHRyLmg+CisKK25h
bWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgRmxvYXRQb2ludDsKK2NsYXNzIEdyYXBoaWNzQ29u
dGV4dFN0YXRlU2F2ZXI7CitjbGFzcyBSZW5kZXJTVkdDb250YWluZXI7CitjbGFzcyBSZW5kZXJT
VkdQYXRoOworY2xhc3MgU1ZHU3R5bGVkVHJhbnNmb3JtYWJsZUVsZW1lbnQ7CisKK2NsYXNzIEJv
dW5kaW5nUmVjdFN0cm9rZVN0eWxlQXBwbGllciA6IHB1YmxpYyBTdHJva2VTdHlsZUFwcGxpZXIg
eworcHVibGljOgorICAgIEJvdW5kaW5nUmVjdFN0cm9rZVN0eWxlQXBwbGllcihjb25zdCBSZW5k
ZXJPYmplY3QqIG9iamVjdCwgUmVuZGVyU3R5bGUqIHN0eWxlKQorICAgICAgICA6IG1fb2JqZWN0
KG9iamVjdCkKKyAgICAgICAgLCBtX3N0eWxlKHN0eWxlKQorICAgIHsKKyAgICAgICAgQVNTRVJU
KHN0eWxlKTsKKyAgICAgICAgQVNTRVJUKG9iamVjdCk7CisgICAgfQorCisgICAgdm9pZCBzdHJv
a2VTdHlsZShHcmFwaGljc0NvbnRleHQqIGdjKQorICAgIHsKKyAgICAgICAgU1ZHUmVuZGVyU3Vw
cG9ydDo6YXBwbHlTdHJva2VTdHlsZVRvQ29udGV4dChnYywgbV9zdHlsZSwgbV9vYmplY3QpOwor
ICAgIH0KKworcHJpdmF0ZToKKyAgICBjb25zdCBSZW5kZXJPYmplY3QqIG1fb2JqZWN0OworICAg
IFJlbmRlclN0eWxlKiBtX3N0eWxlOworfTsKKworY2xhc3MgUmVuZGVyU1ZHU2hhcGUgOiBwdWJs
aWMgUmVuZGVyU1ZHTW9kZWxPYmplY3QgeworcHVibGljOgorICAgIGV4cGxpY2l0IFJlbmRlclNW
R1NoYXBlKFNWR1N0eWxlZFRyYW5zZm9ybWFibGVFbGVtZW50Kik7CisgICAgUmVuZGVyU1ZHU2hh
cGUoU1ZHU3R5bGVkVHJhbnNmb3JtYWJsZUVsZW1lbnQqLCBQYXRoKiwgYm9vbCk7CisgICAgdmly
dHVhbCB+UmVuZGVyU1ZHU2hhcGUoKTsKKworICAgIHZvaWQgc2V0TmVlZHNTaGFwZVVwZGF0ZSgp
IHsgbV9uZWVkc1NoYXBlVXBkYXRlID0gdHJ1ZTsgfQorICAgIHZpcnR1YWwgdm9pZCBzZXROZWVk
c0JvdW5kYXJpZXNVcGRhdGUoKSB7IG1fbmVlZHNCb3VuZGFyaWVzVXBkYXRlID0gdHJ1ZTsgfQor
ICAgIHZpcnR1YWwgdm9pZCBzZXROZWVkc1RyYW5zZm9ybVVwZGF0ZSgpIHsgbV9uZWVkc1RyYW5z
Zm9ybVVwZGF0ZSA9IHRydWU7IH0KKyAgICB2aXJ0dWFsIHZvaWQgZmlsbFNoYXBlKEdyYXBoaWNz
Q29udGV4dCopIGNvbnN0OworICAgIHZpcnR1YWwgdm9pZCBzdHJva2VTaGFwZShHcmFwaGljc0Nv
bnRleHQqKSBjb25zdDsKKyAgICBib29sIGlzUGFpbnRpbmdGYWxsYmFjaygpIGNvbnN0IHsgcmV0
dXJuIG1fZmlsbEZhbGxiYWNrOyB9CisKKyAgICBQYXRoJiBwYXRoKCkgY29uc3QKKyAgICB7Cisg
ICAgICAgIEFTU0VSVChtX3BhdGguZ2V0KCkpOworICAgICAgICByZXR1cm4gKm1fcGF0aDsKKyAg
ICB9CisKK3Byb3RlY3RlZDoKKyAgICB2aXJ0dWFsIHZvaWQgY3JlYXRlU2hhcGUoKTsKKyAgICB2
aXJ0dWFsIGJvb2wgaXNFbXB0eSgpIGNvbnN0OworICAgIHZpcnR1YWwgRmxvYXRSZWN0IG9iamVj
dEJvdW5kaW5nQm94KCkgY29uc3Q7CisgICAgdmlydHVhbCBGbG9hdFJlY3Qgc3Ryb2tlQm91bmRp
bmdCb3goKSBjb25zdDsKKyAgICB2aXJ0dWFsIGJvb2wgc2hhcGVEZXBlbmRlbnRTdHJva2VDb250
YWlucyhjb25zdCBGbG9hdFBvaW50Jik7CisgICAgdmlydHVhbCBib29sIHNoYXBlRGVwZW5kZW50
RmlsbENvbnRhaW5zKGNvbnN0IEZsb2F0UG9pbnQmLCBjb25zdCBXaW5kUnVsZSYpIGNvbnN0Owor
ICAgIGZsb2F0IHN0cm9rZVdpZHRoKCkgY29uc3Q7CisgICAgdm9pZCBzZXRpc1BhaW50aW5nRmFs
bGJhY2soYm9vbCBpc0ZhbGxiYWNrKSB7IG1fZmlsbEZhbGxiYWNrID0gaXNGYWxsYmFjazsgfQor
ICAgIEZsb2F0UmVjdCBjYWxjdWxhdGVNYXJrZXJCb3VuZHNJZk5lZWRlZCgpOworICAgIHZvaWQg
c2V0U3Ryb2tlQW5kTWFya2VyQm91bmRpbmdCb3goRmxvYXRSZWN0IHJlY3QpIHsgbV9zdHJva2VB
bmRNYXJrZXJCb3VuZGluZ0JveCA9IHJlY3Q7IH0KKworICAgIGJvb2wgaGFzUGF0aCgpIGNvbnN0
IHsgcmV0dXJuIG1fcGF0aC5nZXQoKTsgfQorCitwcml2YXRlOgorICAgIC8vIEhpdC1kZXRlY3Rp
b24gc2VwZXJhdGVkIGZvciB0aGUgZmlsbCBhbmQgdGhlIHN0cm9rZQorICAgIGJvb2wgZmlsbENv
bnRhaW5zKGNvbnN0IEZsb2F0UG9pbnQmLCBib29sIHJlcXVpcmVzRmlsbCA9IHRydWUsIFdpbmRS
dWxlIGZpbGxSdWxlID0gUlVMRV9OT05aRVJPKTsKKyAgICBib29sIHN0cm9rZUNvbnRhaW5zKGNv
bnN0IEZsb2F0UG9pbnQmLCBib29sIHJlcXVpcmVzU3Ryb2tlID0gdHJ1ZSk7CisKKyAgICB2aXJ0
dWFsIEZsb2F0UmVjdCByZXBhaW50UmVjdEluTG9jYWxDb29yZGluYXRlcygpIGNvbnN0IHsgcmV0
dXJuIG1fcmVwYWludEJvdW5kaW5nQm94OyB9CisgICAgdmlydHVhbCBjb25zdCBBZmZpbmVUcmFu
c2Zvcm0mIGxvY2FsVG9QYXJlbnRUcmFuc2Zvcm0oKSBjb25zdCB7IHJldHVybiBtX2xvY2FsVHJh
bnNmb3JtOyB9CisKKyAgICB2aXJ0dWFsIGJvb2wgaXNTVkdTaGFwZSgpIGNvbnN0IHsgcmV0dXJu
IHRydWU7IH0KKyAgICB2aXJ0dWFsIGNvbnN0IGNoYXIqIHJlbmRlck5hbWUoKSBjb25zdCB7IHJl
dHVybiAiUmVuZGVyU1ZHU2hhcGUiOyB9CisgICAgdmlydHVhbCBib29sIGlzUm91bmRlZFJlY3Qo
KSB7IHJldHVybiBmYWxzZTsgfQorCisgICAgdmlydHVhbCB2b2lkIGxheW91dCgpOworICAgIHZp
cnR1YWwgdm9pZCBwYWludChQYWludEluZm8mLCBjb25zdCBMYXlvdXRQb2ludCYpOworICAgIHZp
cnR1YWwgdm9pZCBhZGRGb2N1c1JpbmdSZWN0cyhWZWN0b3I8TGF5b3V0UmVjdD4mLCBjb25zdCBM
YXlvdXRQb2ludCYpOworICAgIHZpcnR1YWwgdm9pZCBpbmZsYXRlV2l0aE1hcmtlckJvdW5kcygp
IHsgfQorCisgICAgdmlydHVhbCBib29sIG5vZGVBdEZsb2F0UG9pbnQoY29uc3QgSGl0VGVzdFJl
cXVlc3QmLCBIaXRUZXN0UmVzdWx0JiwgY29uc3QgRmxvYXRQb2ludCYgcG9pbnRJblBhcmVudCwg
SGl0VGVzdEFjdGlvbik7CisKKyAgICB2b2lkIHVwZGF0ZUNhY2hlZEJvdW5kYXJpZXMoKTsKKwor
ICAgIHZvaWQgc2V0dXBTcXVhcmVDYXBQYXRoKGludCYgYXBwbHlNb2RlKTsKKyAgICBib29sIHNl
dHVwTm9uU2NhbGluZ1N0cm9rZVBhdGgoR3JhcGhpY3NDb250ZXh0U3RhdGVTYXZlciYpOworICAg
IGJvb2wgc2hvdWxkU3Ryb2tlWmVyb0xlbmd0aFN1YnBhdGgoKSBjb25zdDsKKyAgICBGbG9hdFJl
Y3QgemVyb0xlbmd0aFN1YnBhdGhSZWN0KCkgY29uc3Q7CisKKyAgICB2b2lkIGZpbGxBbmRTdHJv
a2VQYXRoKEdyYXBoaWNzQ29udGV4dCopOworCitwcml2YXRlOgorICAgIGJvb2wgbV9uZWVkc0Jv
dW5kYXJpZXNVcGRhdGUgOiAxOworICAgIGJvb2wgbV9uZWVkc1NoYXBlVXBkYXRlIDogMTsKKyAg
ICBib29sIG1fbmVlZHNUcmFuc2Zvcm1VcGRhdGUgOiAxOworICAgIGJvb2wgbV9maWxsRmFsbGJh
Y2sgOiAxOworICAgIGJvb2wgbV9zdHJva2VDb250YWluc0ZhbGxCYWNrIDogMTsKKworICAgIEZs
b2F0UmVjdCBtX2ZpbGxCb3VuZGluZ0JveDsKKyAgICBGbG9hdFJlY3QgbV9zdHJva2VBbmRNYXJr
ZXJCb3VuZGluZ0JveDsKKyAgICBGbG9hdFJlY3QgbV9yZXBhaW50Qm91bmRpbmdCb3g7CisgICAg
U1ZHTWFya2VyTGF5b3V0SW5mbyBtX21hcmtlckxheW91dEluZm87CisgICAgQWZmaW5lVHJhbnNm
b3JtIG1fbG9jYWxUcmFuc2Zvcm07CisgICAgT3duUHRyPFBhdGg+IG1fcGF0aDsKK307CisKK2lu
bGluZSBSZW5kZXJTVkdTaGFwZSogdG9SZW5kZXJTVkdTaGFwZShSZW5kZXJPYmplY3QqIG9iamVj
dCkKK3sKKyAgICBBU1NFUlQoIW9iamVjdCB8fCBvYmplY3QtPmlzU1ZHU2hhcGUoKSk7CisgICAg
cmV0dXJuIHN0YXRpY19jYXN0PFJlbmRlclNWR1NoYXBlKj4ob2JqZWN0KTsKK30KKworaW5saW5l
IGNvbnN0IFJlbmRlclNWR1NoYXBlKiB0b1JlbmRlclNWR1NoYXBlKGNvbnN0IFJlbmRlck9iamVj
dCogb2JqZWN0KQoreworICAgIEFTU0VSVCghb2JqZWN0IHx8IG9iamVjdC0+aXNTVkdTaGFwZSgp
KTsKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8Y29uc3QgUmVuZGVyU1ZHU2hhcGUqPihvYmplY3Qp
OworfQorCisvLyBUaGlzIHdpbGwgY2F0Y2ggYW55b25lIGRvaW5nIGFuIHVubmVjZXNzYXJ5IGNh
c3QuCit2b2lkIHRvUmVuZGVyU1ZHU2hhcGUoY29uc3QgUmVuZGVyU1ZHU2hhcGUqKTsKKworfQor
CisjZW5kaWYgLy8gRU5BQkxFKFNWRykKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL3N2Zy9TVkdJbmxpbmVUZXh0Qm94LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9zdmcvU1ZHSW5saW5lVGV4dEJveC5jcHAKaW5kZXggYzFjNWFmYS4uNjAxMWViOSAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdJbmxpbmVUZXh0Qm94
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR0lubGluZVRleHRCb3gu
Y3BwCkBAIC0zNzAsMTQgKzM3MCwxNCBAQCBib29sIFNWR0lubGluZVRleHRCb3g6OmFjcXVpcmVQ
YWludGluZ1Jlc291cmNlKEdyYXBoaWNzQ29udGV4dComIGNvbnRleHQsIGZsb2F0CiAgICAgcmV0
dXJuIHRydWU7CiB9CiAKLXZvaWQgU1ZHSW5saW5lVGV4dEJveDo6cmVsZWFzZVBhaW50aW5nUmVz
b3VyY2UoR3JhcGhpY3NDb250ZXh0KiYgY29udGV4dCwgY29uc3QgUGF0aCogcGF0aCkKK3ZvaWQg
U1ZHSW5saW5lVGV4dEJveDo6cmVsZWFzZVBhaW50aW5nUmVzb3VyY2UoR3JhcGhpY3NDb250ZXh0
KiYgY29udGV4dCwgY29uc3QgUGF0aCopCiB7CiAgICAgQVNTRVJUKG1fcGFpbnRpbmdSZXNvdXJj
ZSk7CiAKICAgICBSZW5kZXJPYmplY3QqIHBhcmVudFJlbmRlcmVyID0gcGFyZW50KCktPnJlbmRl
cmVyKCk7CiAgICAgQVNTRVJUKHBhcmVudFJlbmRlcmVyKTsKIAotICAgIG1fcGFpbnRpbmdSZXNv
dXJjZS0+cG9zdEFwcGx5UmVzb3VyY2UocGFyZW50UmVuZGVyZXIsIGNvbnRleHQsIG1fcGFpbnRp
bmdSZXNvdXJjZU1vZGUsIHBhdGgpOworICAgIG1fcGFpbnRpbmdSZXNvdXJjZS0+cG9zdEFwcGx5
UmVzb3VyY2UocGFyZW50UmVuZGVyZXIsIGNvbnRleHQsIG1fcGFpbnRpbmdSZXNvdXJjZU1vZGUs
IC8qUGF0aCovIDAsIC8qUmVuZGVyU1ZHU2hhcGUqLyAwKTsKICAgICBtX3BhaW50aW5nUmVzb3Vy
Y2UgPSAwOwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NW
R1JlbmRlclN1cHBvcnQuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdSZW5k
ZXJTdXBwb3J0LmNwcAppbmRleCAwMDc5MjE5Li5iYzEwMTM5IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR1JlbmRlclN1cHBvcnQuY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHUmVuZGVyU3VwcG9ydC5jcHAKQEAgLTE1Myw3ICsxNTMs
NyBAQCB2b2lkIFNWR1JlbmRlclN1cHBvcnQ6OmZpbmlzaFJlbmRlclNWR0NvbnRlbnQoUmVuZGVy
T2JqZWN0KiBvYmplY3QsIFBhaW50SW5mbyYgcAogICAgIFNWR1Jlc291cmNlcyogcmVzb3VyY2Vz
ID0gU1ZHUmVzb3VyY2VzQ2FjaGU6OmNhY2hlZFJlc291cmNlc0ZvclJlbmRlck9iamVjdChvYmpl
Y3QpOwogICAgIGlmIChyZXNvdXJjZXMpIHsKICAgICAgICAgaWYgKFJlbmRlclNWR1Jlc291cmNl
RmlsdGVyKiBmaWx0ZXIgPSByZXNvdXJjZXMtPmZpbHRlcigpKSB7Ci0gICAgICAgICAgICBmaWx0
ZXItPnBvc3RBcHBseVJlc291cmNlKG9iamVjdCwgcGFpbnRJbmZvLmNvbnRleHQsIEFwcGx5VG9E
ZWZhdWx0TW9kZSwgLyogcGF0aCAqLzApOworICAgICAgICAgICAgZmlsdGVyLT5wb3N0QXBwbHlS
ZXNvdXJjZShzdGF0aWNfY2FzdDxSZW5kZXJTVkdTaGFwZSo+KG9iamVjdCksIHBhaW50SW5mby5j
b250ZXh0LCBBcHBseVRvRGVmYXVsdE1vZGUsIDAsIDApOwogICAgICAgICAgICAgcGFpbnRJbmZv
LmNvbnRleHQgPSBzYXZlZENvbnRleHQ7CiAgICAgICAgIH0KICAgICB9CkBAIC0yMjUsOSArMjI1
LDkgQEAgdm9pZCBTVkdSZW5kZXJTdXBwb3J0OjpsYXlvdXRDaGlsZHJlbihSZW5kZXJPYmplY3Qq
IHN0YXJ0LCBib29sIHNlbGZOZWVkc0xheW91dCkKICAgICAgICAgICAgIC8vIFdoZW4gc2VsZk5l
ZWRzTGF5b3V0IGlzIGZhbHNlIGFuZCB0aGUgbGF5b3V0IHNpemUgY2hhbmdlZCwgd2UgaGF2ZSB0
byBjaGVjayB3aGV0aGVyIHRoaXMgY2hpbGQgdXNlcyByZWxhdGl2ZSBsZW5ndGhzCiAgICAgICAg
ICAgICBpZiAoU1ZHRWxlbWVudCogZWxlbWVudCA9IGNoaWxkLT5ub2RlKCktPmlzU1ZHRWxlbWVu
dCgpID8gc3RhdGljX2Nhc3Q8U1ZHRWxlbWVudCo+KGNoaWxkLT5ub2RlKCkpIDogMCkgewogICAg
ICAgICAgICAgICAgIGlmIChlbGVtZW50LT5pc1N0eWxlZCgpICYmIHN0YXRpY19jYXN0PFNWR1N0
eWxlZEVsZW1lbnQqPihlbGVtZW50KS0+aGFzUmVsYXRpdmVMZW5ndGhzKCkpIHsKLSAgICAgICAg
ICAgICAgICAgICAgLy8gV2hlbiB0aGUgbGF5b3V0IHNpemUgY2hhbmdlZCBhbmQgd2hlbiB1c2lu
ZyByZWxhdGl2ZSB2YWx1ZXMgdGVsbCB0aGUgUmVuZGVyU1ZHUGF0aCB0byB1cGRhdGUgaXRzIFBh
dGggb2JqZWN0Ci0gICAgICAgICAgICAgICAgICAgIGlmIChjaGlsZC0+aXNTVkdQYXRoKCkpCi0g
ICAgICAgICAgICAgICAgICAgICAgICB0b1JlbmRlclNWR1BhdGgoY2hpbGQpLT5zZXROZWVkc1Bh
dGhVcGRhdGUoKTsKKyAgICAgICAgICAgICAgICAgICAgLy8gV2hlbiB0aGUgbGF5b3V0IHNpemUg
Y2hhbmdlZCBhbmQgd2hlbiB1c2luZyByZWxhdGl2ZSB2YWx1ZXMgdGVsbCB0aGUgUmVuZGVyU1ZH
U2hhcGUgdG8gdXBkYXRlIGl0cyBzaGFwZSBvYmplY3QKKyAgICAgICAgICAgICAgICAgICAgaWYg
KGNoaWxkLT5pc1NWR1NoYXBlKCkpCisgICAgICAgICAgICAgICAgICAgICAgICB0b1JlbmRlclNW
R1NoYXBlKGNoaWxkKS0+c2V0TmVlZHNTaGFwZVVwZGF0ZSgpOwogCiAgICAgICAgICAgICAgICAg
ICAgIG5lZWRzTGF5b3V0ID0gdHJ1ZTsKICAgICAgICAgICAgICAgICB9CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR1JlbmRlclRyZWVBc1RleHQuY3BwIGIvU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdSZW5kZXJUcmVlQXNUZXh0LmNwcAppbmRleCBh
MTYyOTY5Li5kMWFkNzJhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3Zn
L1NWR1JlbmRlclRyZWVBc1RleHQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9z
dmcvU1ZHUmVuZGVyVHJlZUFzVGV4dC5jcHAKQEAgLTU1LDYgKzU1LDcgQEAKICNpbmNsdWRlICJS
ZW5kZXJTVkdSZXNvdXJjZVJhZGlhbEdyYWRpZW50LmgiCiAjaW5jbHVkZSAiUmVuZGVyU1ZHUmVz
b3VyY2VTb2xpZENvbG9yLmgiCiAjaW5jbHVkZSAiUmVuZGVyU1ZHUm9vdC5oIgorI2luY2x1ZGUg
IlJlbmRlclNWR1NoYXBlLmgiCiAjaW5jbHVkZSAiUmVuZGVyU1ZHVGV4dC5oIgogI2luY2x1ZGUg
IlJlbmRlclRyZWVBc1RleHQuaCIKICNpbmNsdWRlICJTVkdDaXJjbGVFbGVtZW50LmgiCkBAIC0y
ODksMTggKzI5MCwxOCBAQCBzdGF0aWMgdm9pZCB3cml0ZVN0eWxlKFRleHRTdHJlYW0mIHRzLCBj
b25zdCBSZW5kZXJPYmplY3QmIG9iamVjdCkKICAgICAgICAgd3JpdGVOYW1lVmFsdWVQYWlyKHRz
LCAidHJhbnNmb3JtIiwgb2JqZWN0LmxvY2FsVHJhbnNmb3JtKCkpOwogICAgIHdyaXRlSWZOb3RE
ZWZhdWx0KHRzLCAiaW1hZ2UgcmVuZGVyaW5nIiwgc3R5bGUtPmltYWdlUmVuZGVyaW5nKCksIFJl
bmRlclN0eWxlOjppbml0aWFsSW1hZ2VSZW5kZXJpbmcoKSk7CiAgICAgd3JpdGVJZk5vdERlZmF1
bHQodHMsICJvcGFjaXR5Iiwgc3R5bGUtPm9wYWNpdHkoKSwgUmVuZGVyU3R5bGU6OmluaXRpYWxP
cGFjaXR5KCkpOwotICAgIGlmIChvYmplY3QuaXNTVkdQYXRoKCkpIHsKLSAgICAgICAgY29uc3Qg
UmVuZGVyU1ZHUGF0aCYgcGF0aCA9IHN0YXRpY19jYXN0PGNvbnN0IFJlbmRlclNWR1BhdGgmPihv
YmplY3QpOwotICAgICAgICBBU1NFUlQocGF0aC5ub2RlKCkpOwotICAgICAgICBBU1NFUlQocGF0
aC5ub2RlKCktPmlzU1ZHRWxlbWVudCgpKTsKKyAgICBpZiAob2JqZWN0LmlzU1ZHU2hhcGUoKSkg
eworICAgICAgICBjb25zdCBSZW5kZXJTVkdTaGFwZSYgc2hhcGUgPSBzdGF0aWNfY2FzdDxjb25z
dCBSZW5kZXJTVkdTaGFwZSY+KG9iamVjdCk7CisgICAgICAgIEFTU0VSVChzaGFwZS5ub2RlKCkp
OworICAgICAgICBBU1NFUlQoc2hhcGUubm9kZSgpLT5pc1NWR0VsZW1lbnQoKSk7CiAKICAgICAg
ICAgQ29sb3IgZmFsbGJhY2tDb2xvcjsKLSAgICAgICAgaWYgKFJlbmRlclNWR1Jlc291cmNlKiBz
dHJva2VQYWludGluZ1Jlc291cmNlID0gUmVuZGVyU1ZHUmVzb3VyY2U6OnN0cm9rZVBhaW50aW5n
UmVzb3VyY2UoY29uc3RfY2FzdDxSZW5kZXJTVkdQYXRoKj4oJnBhdGgpLCBwYXRoLnN0eWxlKCks
IGZhbGxiYWNrQ29sb3IpKSB7CisgICAgICAgIGlmIChSZW5kZXJTVkdSZXNvdXJjZSogc3Ryb2tl
UGFpbnRpbmdSZXNvdXJjZSA9IFJlbmRlclNWR1Jlc291cmNlOjpzdHJva2VQYWludGluZ1Jlc291
cmNlKGNvbnN0X2Nhc3Q8UmVuZGVyU1ZHU2hhcGUqPigmc2hhcGUpLCBzaGFwZS5zdHlsZSgpLCBm
YWxsYmFja0NvbG9yKSkgewogICAgICAgICAgICAgVGV4dFN0cmVhbVNlcGFyYXRvciBzKCIgIik7
CiAgICAgICAgICAgICB0cyA8PCAiIFtzdHJva2U9eyIgPDwgczsKICAgICAgICAgICAgIHdyaXRl
U1ZHUGFpbnRpbmdSZXNvdXJjZSh0cywgc3Ryb2tlUGFpbnRpbmdSZXNvdXJjZSk7CiAKLSAgICAg
ICAgICAgIFNWR0VsZW1lbnQqIGVsZW1lbnQgPSBzdGF0aWNfY2FzdDxTVkdFbGVtZW50Kj4ocGF0
aC5ub2RlKCkpOworICAgICAgICAgICAgU1ZHRWxlbWVudCogZWxlbWVudCA9IHN0YXRpY19jYXN0
PFNWR0VsZW1lbnQqPihzaGFwZS5ub2RlKCkpOwogICAgICAgICAgICAgZG91YmxlIGRhc2hPZmZz
ZXQgPSBzdmdTdHlsZS0+c3Ryb2tlRGFzaE9mZnNldCgpLnZhbHVlKGVsZW1lbnQpOwogICAgICAg
ICAgICAgZG91YmxlIHN0cm9rZVdpZHRoID0gc3ZnU3R5bGUtPnN0cm9rZVdpZHRoKCkudmFsdWUo
ZWxlbWVudCk7CiAgICAgICAgICAgICBjb25zdCBWZWN0b3I8U1ZHTGVuZ3RoPiYgZGFzaGVzID0g
c3ZnU3R5bGUtPnN0cm9rZURhc2hBcnJheSgpOwpAQCAtMzIyLDcgKzMyMyw3IEBAIHN0YXRpYyB2
b2lkIHdyaXRlU3R5bGUoVGV4dFN0cmVhbSYgdHMsIGNvbnN0IFJlbmRlck9iamVjdCYgb2JqZWN0
KQogICAgICAgICAgICAgdHMgPDwgIn1dIjsKICAgICAgICAgfQogCi0gICAgICAgIGlmIChSZW5k
ZXJTVkdSZXNvdXJjZSogZmlsbFBhaW50aW5nUmVzb3VyY2UgPSBSZW5kZXJTVkdSZXNvdXJjZTo6
ZmlsbFBhaW50aW5nUmVzb3VyY2UoY29uc3RfY2FzdDxSZW5kZXJTVkdQYXRoKj4oJnBhdGgpLCBw
YXRoLnN0eWxlKCksIGZhbGxiYWNrQ29sb3IpKSB7CisgICAgICAgIGlmIChSZW5kZXJTVkdSZXNv
dXJjZSogZmlsbFBhaW50aW5nUmVzb3VyY2UgPSBSZW5kZXJTVkdSZXNvdXJjZTo6ZmlsbFBhaW50
aW5nUmVzb3VyY2UoY29uc3RfY2FzdDxSZW5kZXJTVkdTaGFwZSo+KCZzaGFwZSksIHNoYXBlLnN0
eWxlKCksIGZhbGxiYWNrQ29sb3IpKSB7CiAgICAgICAgICAgICBUZXh0U3RyZWFtU2VwYXJhdG9y
IHMoIiAiKTsKICAgICAgICAgICAgIHRzIDw8ICIgW2ZpbGw9eyIgPDwgczsKICAgICAgICAgICAg
IHdyaXRlU1ZHUGFpbnRpbmdSZXNvdXJjZSh0cywgZmlsbFBhaW50aW5nUmVzb3VyY2UpOwpAQCAt
MzQ2LDEyICszNDcsMTIgQEAgc3RhdGljIFRleHRTdHJlYW0mIHdyaXRlUG9zaXRpb25BbmRTdHls
ZShUZXh0U3RyZWFtJiB0cywgY29uc3QgUmVuZGVyT2JqZWN0JiBvYmoKICAgICByZXR1cm4gdHM7
CiB9CiAKLXN0YXRpYyBUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJlYW0mIHRzLCBjb25z
dCBSZW5kZXJTVkdQYXRoJiBwYXRoKQorc3RhdGljIFRleHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4
dFN0cmVhbSYgdHMsIGNvbnN0IFJlbmRlclNWR1NoYXBlJiBzaGFwZSkKIHsKLSAgICB3cml0ZVBv
c2l0aW9uQW5kU3R5bGUodHMsIHBhdGgpOworICAgIHdyaXRlUG9zaXRpb25BbmRTdHlsZSh0cywg
c2hhcGUpOwogCi0gICAgQVNTRVJUKHBhdGgubm9kZSgpLT5pc1NWR0VsZW1lbnQoKSk7Ci0gICAg
U1ZHRWxlbWVudCogc3ZnRWxlbWVudCA9IHN0YXRpY19jYXN0PFNWR0VsZW1lbnQqPihwYXRoLm5v
ZGUoKSk7CisgICAgQVNTRVJUKHNoYXBlLm5vZGUoKS0+aXNTVkdFbGVtZW50KCkpOworICAgIFNW
R0VsZW1lbnQqIHN2Z0VsZW1lbnQgPSBzdGF0aWNfY2FzdDxTVkdFbGVtZW50Kj4oc2hhcGUubm9k
ZSgpKTsKIAogICAgIGlmIChzdmdFbGVtZW50LT5oYXNUYWdOYW1lKFNWR05hbWVzOjpyZWN0VGFn
KSkgewogICAgICAgICBTVkdSZWN0RWxlbWVudCogZWxlbWVudCA9IHN0YXRpY19jYXN0PFNWR1Jl
Y3RFbGVtZW50Kj4oc3ZnRWxlbWVudCk7CkBAIC02NTMsMTEgKzY1NCwxMSBAQCB2b2lkIHdyaXRl
U1ZHSW1hZ2UoVGV4dFN0cmVhbSYgdHMsIGNvbnN0IFJlbmRlclNWR0ltYWdlJiBpbWFnZSwgaW50
IGluZGVudCkKICAgICB3cml0ZVJlc291cmNlcyh0cywgaW1hZ2UsIGluZGVudCk7CiB9CiAKLXZv
aWQgd3JpdGUoVGV4dFN0cmVhbSYgdHMsIGNvbnN0IFJlbmRlclNWR1BhdGgmIHBhdGgsIGludCBp
bmRlbnQpCit2b2lkIHdyaXRlKFRleHRTdHJlYW0mIHRzLCBjb25zdCBSZW5kZXJTVkdTaGFwZSYg
c2hhcGUsIGludCBpbmRlbnQpCiB7Ci0gICAgd3JpdGVTdGFuZGFyZFByZWZpeCh0cywgcGF0aCwg
aW5kZW50KTsKLSAgICB0cyA8PCBwYXRoIDw8ICJcbiI7Ci0gICAgd3JpdGVSZXNvdXJjZXModHMs
IHBhdGgsIGluZGVudCk7CisgICAgd3JpdGVTdGFuZGFyZFByZWZpeCh0cywgc2hhcGUsIGluZGVu
dCk7CisgICAgdHMgPDwgc2hhcGUgPDwgIlxuIjsKKyAgICB3cml0ZVJlc291cmNlcyh0cywgc2hh
cGUsIGluZGVudCk7CiB9CiAKIHZvaWQgd3JpdGVTVkdHcmFkaWVudFN0b3AoVGV4dFN0cmVhbSYg
dHMsIGNvbnN0IFJlbmRlclNWR0dyYWRpZW50U3RvcCYgc3RvcCwgaW50IGluZGVudCkKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHUmVuZGVyVHJlZUFzVGV4dC5o
IGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdSZW5kZXJUcmVlQXNUZXh0LmgKaW5k
ZXggY2UwN2E1Yy4uMzU5OGM4MyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L3N2Zy9TVkdSZW5kZXJUcmVlQXNUZXh0LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L3N2Zy9TVkdSZW5kZXJUcmVlQXNUZXh0LmgKQEAgLTQxLDE0ICs0MSwxNCBAQCBjbGFzcyBSZW5k
ZXJJbWFnZTsKIGNsYXNzIFJlbmRlck9iamVjdDsKIGNsYXNzIFJlbmRlclNWR0dyYWRpZW50U3Rv
cDsKIGNsYXNzIFJlbmRlclNWR0ltYWdlOwotY2xhc3MgUmVuZGVyU1ZHUGF0aDsKK2NsYXNzIFJl
bmRlclNWR1NoYXBlOwogY2xhc3MgUmVuZGVyU1ZHUm9vdDsKIGNsYXNzIFJlbmRlclRleHQ7CiBj
bGFzcyBBZmZpbmVUcmFuc2Zvcm07CiBjbGFzcyBTVkdVbml0VHlwZXM7CiAKIC8vIGZ1bmN0aW9u
cyB1c2VkIGJ5IHRoZSBtYWluIFJlbmRlclRyZWVBc1RleHQgY29kZQotdm9pZCB3cml0ZShUZXh0
U3RyZWFtJiwgY29uc3QgUmVuZGVyU1ZHUGF0aCYsIGludCBpbmRlbnQpOwordm9pZCB3cml0ZShU
ZXh0U3RyZWFtJiwgY29uc3QgUmVuZGVyU1ZHU2hhcGUmLCBpbnQgaW5kZW50KTsKIHZvaWQgd3Jp
dGUoVGV4dFN0cmVhbSYsIGNvbnN0IFJlbmRlclNWR1Jvb3QmLCBpbnQgaW5kZW50KTsKIHZvaWQg
d3JpdGVTVkdHcmFkaWVudFN0b3AoVGV4dFN0cmVhbSYsIGNvbnN0IFJlbmRlclNWR0dyYWRpZW50
U3RvcCYsIGludCBpbmRlbnQpOwogdm9pZCB3cml0ZVNWR1Jlc291cmNlQ29udGFpbmVyKFRleHRT
dHJlYW0mLCBjb25zdCBSZW5kZXJPYmplY3QmLCBpbnQgaW5kZW50KTsKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHVGV4dFJ1blJlbmRlcmluZ0NvbnRleHQuY3Bw
IGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdUZXh0UnVuUmVuZGVyaW5nQ29udGV4
dC5jcHAKaW5kZXggMzNhY2Y5Mi4uMzE2OTk0MiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL3N2Zy9TVkdUZXh0UnVuUmVuZGVyaW5nQ29udGV4dC5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdUZXh0UnVuUmVuZGVyaW5nQ29udGV4dC5jcHAKQEAg
LTE1NCwxMyArMTU0LDEzIEBAIHZvaWQgU1ZHVGV4dFJ1blJlbmRlcmluZ0NvbnRleHQ6OmRyYXdT
VkdHbHlwaHMoR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0LCBjb25zdCBUCiAKICAgICAgICAgUGF0
aCBnbHlwaFBhdGggPSBzdmdHbHlwaC5wYXRoRGF0YTsKICAgICAgICAgZ2x5cGhQYXRoLnRyYW5z
Zm9ybShnbHlwaFBhdGhUcmFuc2Zvcm0pOwotCiAgICAgICAgIGlmIChhY3RpdmVQYWludGluZ1Jl
c291cmNlLT5hcHBseVJlc291cmNlKHBhcmVudFJlbmRlck9iamVjdCwgcGFyZW50UmVuZGVyT2Jq
ZWN0U3R5bGUsIGNvbnRleHQsIHJlc291cmNlTW9kZSkpIHsKICAgICAgICAgICAgIGlmIChyZW5k
ZXJPYmplY3QgJiYgcmVuZGVyT2JqZWN0LT5pc1NWR0lubGluZVRleHQoKSkgeworCiAgICAgICAg
ICAgICAgICAgY29uc3QgUmVuZGVyU1ZHSW5saW5lVGV4dCogdGV4dFJlbmRlcmVyID0gdG9SZW5k
ZXJTVkdJbmxpbmVUZXh0KHJlbmRlck9iamVjdCk7CiAgICAgICAgICAgICAgICAgY29udGV4dC0+
c2V0U3Ryb2tlVGhpY2tuZXNzKGNvbnRleHQtPnN0cm9rZVRoaWNrbmVzcygpICogdGV4dFJlbmRl
cmVyLT5zY2FsaW5nRmFjdG9yKCkpOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgYWN0aXZl
UGFpbnRpbmdSZXNvdXJjZS0+cG9zdEFwcGx5UmVzb3VyY2UocGFyZW50UmVuZGVyT2JqZWN0LCBj
b250ZXh0LCByZXNvdXJjZU1vZGUsICZnbHlwaFBhdGgpOworICAgICAgICAgICAgYWN0aXZlUGFp
bnRpbmdSZXNvdXJjZS0+cG9zdEFwcGx5UmVzb3VyY2UocGFyZW50UmVuZGVyT2JqZWN0LCBjb250
ZXh0LCByZXNvdXJjZU1vZGUsICZnbHlwaFBhdGgsIDApOwogICAgICAgICAgfQogIAogICAgICAg
ICBjb250ZXh0LT5yZXN0b3JlKCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZH
Q2lyY2xlRWxlbWVudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHQ2lyY2xlRWxlbWVudC5j
cHAKaW5kZXggMmFlNjliOC4uMDM2NjllMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvc3Zn
L1NWR0NpcmNsZUVsZW1lbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdDaXJjbGVF
bGVtZW50LmNwcApAQCAtMTI0LDcgKzEyNCw3IEBAIHZvaWQgU1ZHQ2lyY2xlRWxlbWVudDo6c3Zn
QXR0cmlidXRlQ2hhbmdlZChjb25zdCBRdWFsaWZpZWROYW1lJiBhdHRyTmFtZSkKICAgICAgICAg
cmV0dXJuOwogCiAgICAgaWYgKGlzTGVuZ3RoQXR0cmlidXRlKSB7Ci0gICAgICAgIHJlbmRlcmVy
LT5zZXROZWVkc1BhdGhVcGRhdGUoKTsKKyAgICAgICAgcmVuZGVyZXItPnNldE5lZWRzU2hhcGVV
cGRhdGUoKTsKICAgICAgICAgUmVuZGVyU1ZHUmVzb3VyY2U6Om1hcmtGb3JMYXlvdXRBbmRQYXJl
bnRSZXNvdXJjZUludmFsaWRhdGlvbihyZW5kZXJlcik7CiAgICAgICAgIHJldHVybjsKICAgICB9
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRWxsaXBzZUVsZW1lbnQuY3BwIGIv
U291cmNlL1dlYkNvcmUvc3ZnL1NWR0VsbGlwc2VFbGVtZW50LmNwcAppbmRleCBjZWEwNjZkLi5j
YTAxN2M0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRWxsaXBzZUVsZW1lbnQu
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdFbGxpcHNlRWxlbWVudC5jcHAKQEAgLTEy
OSw3ICsxMjksNyBAQCB2b2lkIFNWR0VsbGlwc2VFbGVtZW50OjpzdmdBdHRyaWJ1dGVDaGFuZ2Vk
KGNvbnN0IFF1YWxpZmllZE5hbWUmIGF0dHJOYW1lKQogICAgICAgICByZXR1cm47CiAKICAgICBp
ZiAoaXNMZW5ndGhBdHRyaWJ1dGUpIHsKLSAgICAgICAgcmVuZGVyZXItPnNldE5lZWRzUGF0aFVw
ZGF0ZSgpOworICAgICAgICByZW5kZXJlci0+c2V0TmVlZHNTaGFwZVVwZGF0ZSgpOwogICAgICAg
ICBSZW5kZXJTVkdSZXNvdXJjZTo6bWFya0ZvckxheW91dEFuZFBhcmVudFJlc291cmNlSW52YWxp
ZGF0aW9uKHJlbmRlcmVyKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3N2Zy9TVkdMaW5lRWxlbWVudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9zdmcv
U1ZHTGluZUVsZW1lbnQuY3BwCmluZGV4IGM3Y2ExMWUuLmIxYmI4ZWEgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3N2Zy9TVkdMaW5lRWxlbWVudC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
c3ZnL1NWR0xpbmVFbGVtZW50LmNwcApAQCAtMTI5LDcgKzEyOSw3IEBAIHZvaWQgU1ZHTGluZUVs
ZW1lbnQ6OnN2Z0F0dHJpYnV0ZUNoYW5nZWQoY29uc3QgUXVhbGlmaWVkTmFtZSYgYXR0ck5hbWUp
CiAgICAgICAgIHJldHVybjsKIAogICAgIGlmIChpc0xlbmd0aEF0dHJpYnV0ZSkgewotICAgICAg
ICByZW5kZXJlci0+c2V0TmVlZHNQYXRoVXBkYXRlKCk7CisgICAgICAgIHJlbmRlcmVyLT5zZXRO
ZWVkc1NoYXBlVXBkYXRlKCk7CiAgICAgICAgIFJlbmRlclNWR1Jlc291cmNlOjptYXJrRm9yTGF5
b3V0QW5kUGFyZW50UmVzb3VyY2VJbnZhbGlkYXRpb24ocmVuZGVyZXIpOwogICAgICAgICByZXR1
cm47CiAgICAgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvc3ZnL1NWR1BhdGhFbGVtZW50
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdQYXRoRWxlbWVudC5jcHAKaW5kZXggYTdhMzM3
ZS4uZmUzMzU5NSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvc3ZnL1NWR1BhdGhFbGVtZW50
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHUGF0aEVsZW1lbnQuY3BwCkBAIC0yNjks
NyArMjY5LDcgQEAgdm9pZCBTVkdQYXRoRWxlbWVudDo6c3ZnQXR0cmlidXRlQ2hhbmdlZChjb25z
dCBRdWFsaWZpZWROYW1lJiBhdHRyTmFtZSkKICAgICAgICAgfQogCiAgICAgICAgIGlmIChyZW5k
ZXJlcikKLSAgICAgICAgICAgIHJlbmRlcmVyLT5zZXROZWVkc1BhdGhVcGRhdGUoKTsKKyAgICAg
ICAgICAgIHJlbmRlcmVyLT5zZXROZWVkc1NoYXBlVXBkYXRlKCk7CiAgICAgfQogCiAgICAgaWYg
KHJlbmRlcmVyKQpAQCAtMzU1LDEwICszNTUsMTYgQEAgdm9pZCBTVkdQYXRoRWxlbWVudDo6cGF0
aFNlZ0xpc3RDaGFuZ2VkKFNWR1BhdGhTZWdSb2xlIHJvbGUpCiAgICAgaWYgKCFyZW5kZXJlcikK
ICAgICAgICAgcmV0dXJuOwogCi0gICAgcmVuZGVyZXItPnNldE5lZWRzUGF0aFVwZGF0ZSgpOwor
ICAgIHJlbmRlcmVyLT5zZXROZWVkc1NoYXBlVXBkYXRlKCk7CiAgICAgUmVuZGVyU1ZHUmVzb3Vy
Y2U6Om1hcmtGb3JMYXlvdXRBbmRQYXJlbnRSZXNvdXJjZUludmFsaWRhdGlvbihyZW5kZXJlcik7
CiB9CiAKK1JlbmRlck9iamVjdCogU1ZHUGF0aEVsZW1lbnQ6OmNyZWF0ZVJlbmRlcmVyKFJlbmRl
ckFyZW5hKiBhcmVuYSwgUmVuZGVyU3R5bGUqKQoreworICAgIC8vIEJ5IGRlZmF1bHQsIGFueSBz
dWJjbGFzcyBpcyBleHBlY3RlZCB0byBkbyBwYXRoLWJhc2VkIGRyYXdpbmcKKyAgICByZXR1cm4g
bmV3IChhcmVuYSkgUmVuZGVyU1ZHUGF0aCh0aGlzKTsKK30KKwogfQogCiAjZW5kaWYgLy8gRU5B
QkxFKFNWRykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdQYXRoRWxlbWVudC5o
IGIvU291cmNlL1dlYkNvcmUvc3ZnL1NWR1BhdGhFbGVtZW50LmgKaW5kZXggMWQzN2QwZS4uNTRi
OGZlMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvc3ZnL1NWR1BhdGhFbGVtZW50LmgKKysr
IGIvU291cmNlL1dlYkNvcmUvc3ZnL1NWR1BhdGhFbGVtZW50LmgKQEAgLTEyMiw2ICsxMjIsOCBA
QCBwcml2YXRlOgogICAgIHZpcnR1YWwgdm9pZCBzeW5jaHJvbml6ZVJlcXVpcmVkRXh0ZW5zaW9u
cygpIHsgU1ZHVGVzdHM6OnN5bmNocm9uaXplUmVxdWlyZWRFeHRlbnNpb25zKHRoaXMpOyB9CiAg
ICAgdmlydHVhbCB2b2lkIHN5bmNocm9uaXplU3lzdGVtTGFuZ3VhZ2UoKSB7IFNWR1Rlc3RzOjpz
eW5jaHJvbml6ZVN5c3RlbUxhbmd1YWdlKHRoaXMpOyB9CiAKKyAgICBSZW5kZXJPYmplY3QqIGNy
ZWF0ZVJlbmRlcmVyKFJlbmRlckFyZW5hKiwgUmVuZGVyU3R5bGUqKTsKKwogcHJpdmF0ZToKICAg
ICBPd25QdHI8U1ZHUGF0aEJ5dGVTdHJlYW0+IG1fcGF0aEJ5dGVTdHJlYW07CiAgICAgbXV0YWJs
ZSBTVkdTeW5jaHJvbml6YWJsZUFuaW1hdGVkUHJvcGVydHk8U1ZHUGF0aFNlZ0xpc3Q+IG1fcGF0
aFNlZ0xpc3Q7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHUG9seUVsZW1lbnQu
Y3BwIGIvU291cmNlL1dlYkNvcmUvc3ZnL1NWR1BvbHlFbGVtZW50LmNwcAppbmRleCA2MTZiODY3
Li5mMzBjYTRhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHUG9seUVsZW1lbnQu
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdQb2x5RWxlbWVudC5jcHAKQEAgLTEyNCw3
ICsxMjQsNyBAQCB2b2lkIFNWR1BvbHlFbGVtZW50OjpzdmdBdHRyaWJ1dGVDaGFuZ2VkKGNvbnN0
IFF1YWxpZmllZE5hbWUmIGF0dHJOYW1lKQogICAgICAgICByZXR1cm47CiAKICAgICBpZiAoYXR0
ck5hbWUgPT0gU1ZHTmFtZXM6OnBvaW50c0F0dHIpIHsKLSAgICAgICAgcmVuZGVyZXItPnNldE5l
ZWRzUGF0aFVwZGF0ZSgpOworICAgICAgICByZW5kZXJlci0+c2V0TmVlZHNTaGFwZVVwZGF0ZSgp
OwogICAgICAgICBSZW5kZXJTVkdSZXNvdXJjZTo6bWFya0ZvckxheW91dEFuZFBhcmVudFJlc291
cmNlSW52YWxpZGF0aW9uKHJlbmRlcmVyKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdSZWN0RWxlbWVudC5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9zdmcvU1ZHUmVjdEVsZW1lbnQuY3BwCmluZGV4IGU4NDc3NGQuLjE4NzllMGEgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdSZWN0RWxlbWVudC5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUvc3ZnL1NWR1JlY3RFbGVtZW50LmNwcApAQCAtMjUsNiArMjUsNyBAQAogCiAjaW5j
bHVkZSAiQXR0cmlidXRlLmgiCiAjaW5jbHVkZSAiUmVuZGVyU1ZHUGF0aC5oIgorI2luY2x1ZGUg
IlJlbmRlclNWR1JlY3QuaCIKICNpbmNsdWRlICJSZW5kZXJTVkdSZXNvdXJjZS5oIgogI2luY2x1
ZGUgIlNWR0VsZW1lbnRJbnN0YW5jZS5oIgogI2luY2x1ZGUgIlNWR0xlbmd0aC5oIgpAQCAtMzIs
NiArMzMsOCBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKK2NsYXNzIFJlbmRlclNWR1JlY3Q7
CisKIC8vIEFuaW1hdGVkIHByb3BlcnR5IGRlZmluaXRpb25zCiBERUZJTkVfQU5JTUFURURfTEVO
R1RIKFNWR1JlY3RFbGVtZW50LCBTVkdOYW1lczo6eEF0dHIsIFgsIHgpCiBERUZJTkVfQU5JTUFU
RURfTEVOR1RIKFNWR1JlY3RFbGVtZW50LCBTVkdOYW1lczo6eUF0dHIsIFksIHkpCkBAIC0xMzcs
MTIgKzE0MCwxMiBAQCB2b2lkIFNWR1JlY3RFbGVtZW50OjpzdmdBdHRyaWJ1dGVDaGFuZ2VkKGNv
bnN0IFF1YWxpZmllZE5hbWUmIGF0dHJOYW1lKQogICAgIGlmIChTVkdUZXN0czo6aGFuZGxlQXR0
cmlidXRlQ2hhbmdlKHRoaXMsIGF0dHJOYW1lKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgUmVu
ZGVyU1ZHUGF0aCogcmVuZGVyZXIgPSBzdGF0aWNfY2FzdDxSZW5kZXJTVkdQYXRoKj4odGhpcy0+
cmVuZGVyZXIoKSk7CisgICAgUmVuZGVyU1ZHUmVjdCogcmVuZGVyZXIgPSBzdGF0aWNfY2FzdDxS
ZW5kZXJTVkdSZWN0Kj4odGhpcy0+cmVuZGVyZXIoKSk7CiAgICAgaWYgKCFyZW5kZXJlcikKICAg
ICAgICAgcmV0dXJuOwogCiAgICAgaWYgKGlzTGVuZ3RoQXR0cmlidXRlKSB7Ci0gICAgICAgIHJl
bmRlcmVyLT5zZXROZWVkc1BhdGhVcGRhdGUoKTsKKyAgICAgICAgcmVuZGVyZXItPnNldE5lZWRz
U2hhcGVVcGRhdGUoKTsKICAgICAgICAgUmVuZGVyU1ZHUmVzb3VyY2U6Om1hcmtGb3JMYXlvdXRB
bmRQYXJlbnRSZXNvdXJjZUludmFsaWRhdGlvbihyZW5kZXJlcik7CiAgICAgICAgIHJldHVybjsK
ICAgICB9CkBAIC0xOTgsNiArMjAxLDExIEBAIGJvb2wgU1ZHUmVjdEVsZW1lbnQ6OnNlbGZIYXNS
ZWxhdGl2ZUxlbmd0aHMoKSBjb25zdAogICAgICAgICB8fCByeSgpLmlzUmVsYXRpdmUoKTsKIH0K
IAorUmVuZGVyT2JqZWN0KiBTVkdSZWN0RWxlbWVudDo6Y3JlYXRlUmVuZGVyZXIoUmVuZGVyQXJl
bmEqIGFyZW5hLCBSZW5kZXJTdHlsZSopCit7CisgICAgcmV0dXJuIG5ldyAoYXJlbmEpIFJlbmRl
clNWR1JlY3QodGhpcyk7Cit9CisKIH0KIAogI2VuZGlmIC8vIEVOQUJMRShTVkcpCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHUmVjdEVsZW1lbnQuaCBiL1NvdXJjZS9XZWJDb3Jl
L3N2Zy9TVkdSZWN0RWxlbWVudC5oCmluZGV4IDk5NDM3ZjMuLjliZjYwMmYgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdSZWN0RWxlbWVudC5oCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3N2Zy9TVkdSZWN0RWxlbWVudC5oCkBAIC01Miw2ICs1Miw4IEBAIHByaXZhdGU6CiAKICAgICB2
aXJ0dWFsIGJvb2wgc2VsZkhhc1JlbGF0aXZlTGVuZ3RocygpIGNvbnN0OwogCisgICAgUmVuZGVy
T2JqZWN0KiBjcmVhdGVSZW5kZXJlcihSZW5kZXJBcmVuYSosIFJlbmRlclN0eWxlKik7CisKICAg
ICBCRUdJTl9ERUNMQVJFX0FOSU1BVEVEX1BST1BFUlRJRVMoU1ZHUmVjdEVsZW1lbnQpCiAgICAg
ICAgIERFQ0xBUkVfQU5JTUFURURfTEVOR1RIKFgsIHgpCiAgICAgICAgIERFQ0xBUkVfQU5JTUFU
RURfTEVOR1RIKFksIHkpCi0tIAoxLjcuNS40Cgo=
</data>
<flag name="review"
          id="103998"
          type_id="1"
          status="-"
          setter="krit"
    />
    <flag name="commit-queue"
          id="103999"
          type_id="3"
          status="-"
          setter="rhodovan.u-szeged"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>107331</attachid>
            <date>2011-09-14 07:53:28 -0700</date>
            <delta_ts>2011-09-15 08:40:39 -0700</delta_ts>
            <desc>Propsed patch</desc>
            <filename>0001-niko-kling-krit.patch</filename>
            <type>text/plain</type>
            <size>106478</size>
            <attacher name="Renata Hodovan">rhodovan.u-szeged</attacher>
            
              <data encoding="base64">RnJvbSAzZDg4OTY2NzNkODlkMjEzNzY0MzMzODFhMzUxOWMwZmExYWMyNWVjIE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBSZW5hdGEgSG9kb3ZhbiA8cmVuaUB3ZWJraXQub3JnPgpEYXRl
OiBXZWQsIDE0IFNlcCAyMDExIDE2OjQ4OjU2ICswMjAwClN1YmplY3Q6IFtQQVRDSF0gbmlrbyAm
IGtsaW5nICYga3JpdAoKLS0tCiBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICB8ICAgMTQgKwogLi4uL3BvaW50ZXItZXZlbnRzLW9uLXJvdW5kZWQtcmVj
dC1leHBlY3RlZC50eHQgICAgfCAgICAzICsKIC4uLi9zdmcvY3VzdG9tL3BvaW50ZXItZXZlbnRz
LW9uLXJvdW5kZWQtcmVjdC5zdmcgIHwgICA2NiArKysKIC4uLmVudHMtd2l0aC1saW5lY2Fwcy1h
bmQtbWl0ZXJsaW1pdHMtZXhwZWN0ZWQudHh0IHwgICAgMyArCiAuLi5vaW50ZXItZXZlbnRzLXdp
dGgtbGluZWNhcHMtYW5kLW1pdGVybGltaXRzLnN2ZyB8ICAgNjYgKysrCiBTb3VyY2UvV2ViQ29y
ZS9DTWFrZUxpc3RzLnR4dCAgICAgICAgICAgICAgICAgICAgICB8ICAgIDIgKwogU291cmNlL1dl
YkNvcmUvQ2hhbmdlTG9nICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgMTU1ICsrKysrKysK
IFNvdXJjZS9XZWJDb3JlL0dOVW1ha2VmaWxlLmxpc3QuYW0gICAgICAgICAgICAgICAgIHwgICAg
NCArCiBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkgICAgICAgICAgICAgICAgICAgICAgICB8
ICAgIDQgKwogU291cmNlL1dlYkNvcmUvV2ViQ29yZS5wcm8gICAgICAgICAgICAgICAgICAgICAg
ICAgfCAgICA0ICsKIFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUudmNwcm9qL1dlYkNvcmUudmNwcm9q
ICAgICAgIHwgIDExMiArKysrKwogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRmxv
YXRSZWN0LmNwcCAgICAgfCAgICA3ICsKIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L0Zsb2F0UmVjdC5oICAgICAgIHwgICAgMSArCiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVyT2JqZWN0LmggICAgICAgICAgICB8ICAgIDIgKwogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlclRyZWVBc1RleHQuY3BwICAgICAgfCAgICA0ICstCiBTb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvc3ZnL1JlbmRlclNWR0FsbEluT25lLmNwcCB8ICAgIDIgKwogLi4uL1dlYkNvcmUvcmVu
ZGVyaW5nL3N2Zy9SZW5kZXJTVkdNb2RlbE9iamVjdC5jcHAgfCAgICAyICstCiBTb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1BhdGguY3BwICAgICB8ICAzNTUgKy0tLS0tLS0t
LS0tLS0tLS0KIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUGF0aC5oICAg
ICAgIHwgICA3NCArLS0tCiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jl
Y3QuY3BwICAgICB8ICAxMTQgKysrKysKIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVu
ZGVyU1ZHUmVjdC5oICAgICAgIHwgICA2MyArKysKIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9z
dmcvUmVuZGVyU1ZHUmVzb3VyY2UuaCAgIHwgICAgMyArLQogLi4uL3JlbmRlcmluZy9zdmcvUmVu
ZGVyU1ZHUmVzb3VyY2VDbGlwcGVyLmNwcCAgICAgfCAgICA2ICstCiAuLi4vcmVuZGVyaW5nL3N2
Zy9SZW5kZXJTVkdSZXNvdXJjZUNvbnRhaW5lci5jcHAgICB8ICAgIDIgKy0KIC4uLi9yZW5kZXJp
bmcvc3ZnL1JlbmRlclNWR1Jlc291cmNlRmlsdGVyLmNwcCAgICAgIHwgICAgNSArLQogLi4uL3Jl
bmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VGaWx0ZXIuaCAgICAgICAgfCAgICAyICstCiAu
Li4vcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJjZUdyYWRpZW50LmNwcCAgICB8ICAgMjAg
Ky0KIC4uLi9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291cmNlR3JhZGllbnQuaCAgICAgIHwg
ICAgMiArLQogLi4uL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VQYXR0ZXJuLmNwcCAg
ICAgfCAgIDEzICstCiAuLi4vcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJjZVBhdHRlcm4u
aCAgICAgICB8ICAgIDIgKy0KIC4uLi9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291cmNlU29s
aWRDb2xvci5jcHAgIHwgICAxNCArLQogLi4uL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVzb3Vy
Y2VTb2xpZENvbG9yLmggICAgfCAgICAyICstCiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3Zn
L1JlbmRlclNWR1NoYXBlLmNwcCAgICB8ICA0MzIgKysrKysrKysrKysrKysrKysrKysKIFNvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHU2hhcGUuaCAgICAgIHwgIDE1OSArKysr
KysrCiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR0lubGluZVRleHRCb3guY3BwICB8
ICAgIDQgKy0KIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHUmVuZGVyU3VwcG9ydC5j
cHAgIHwgICAgOCArLQogLi4uL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdSZW5kZXJUcmVlQXNU
ZXh0LmNwcCAgfCAgIDMxICstCiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR1JlbmRl
clRyZWVBc1RleHQuaCB8ICAgIDQgKy0KIC4uLi9yZW5kZXJpbmcvc3ZnL1NWR1RleHRSdW5SZW5k
ZXJpbmdDb250ZXh0LmNwcCAgIHwgICAgNCArLQogU291cmNlL1dlYkNvcmUvc3ZnL1NWR0NpcmNs
ZUVsZW1lbnQuY3BwICAgICAgICAgICAgfCAgICAyICstCiBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZH
RWxsaXBzZUVsZW1lbnQuY3BwICAgICAgICAgICB8ICAgIDIgKy0KIFNvdXJjZS9XZWJDb3JlL3N2
Zy9TVkdMaW5lRWxlbWVudC5jcHAgICAgICAgICAgICAgIHwgICAgMiArLQogU291cmNlL1dlYkNv
cmUvc3ZnL1NWR1BhdGhFbGVtZW50LmNwcCAgICAgICAgICAgICAgfCAgIDEwICstCiBTb3VyY2Uv
V2ViQ29yZS9zdmcvU1ZHUGF0aEVsZW1lbnQuaCAgICAgICAgICAgICAgICB8ICAgIDIgKwogU291
cmNlL1dlYkNvcmUvc3ZnL1NWR1BvbHlFbGVtZW50LmNwcCAgICAgICAgICAgICAgfCAgICAyICst
CiBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHUmVjdEVsZW1lbnQuY3BwICAgICAgICAgICAgICB8ICAg
MTIgKy0KIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdSZWN0RWxlbWVudC5oICAgICAgICAgICAgICAg
IHwgICAgMiArCiA0OCBmaWxlcyBjaGFuZ2VkLCAxMzQxIGluc2VydGlvbnMoKyksIDQ3NSBkZWxl
dGlvbnMoLSkKIGNyZWF0ZSBtb2RlIDEwMDY0NCBMYXlvdXRUZXN0cy9zdmcvY3VzdG9tL3BvaW50
ZXItZXZlbnRzLW9uLXJvdW5kZWQtcmVjdC1leHBlY3RlZC50eHQKIGNyZWF0ZSBtb2RlIDEwMDY0
NCBMYXlvdXRUZXN0cy9zdmcvY3VzdG9tL3BvaW50ZXItZXZlbnRzLW9uLXJvdW5kZWQtcmVjdC5z
dmcKIGNyZWF0ZSBtb2RlIDEwMDY0NCBMYXlvdXRUZXN0cy9zdmcvY3VzdG9tL3BvaW50ZXItZXZl
bnRzLXdpdGgtbGluZWNhcHMtYW5kLW1pdGVybGltaXRzLWV4cGVjdGVkLnR4dAogY3JlYXRlIG1v
ZGUgMTAwNjQ0IExheW91dFRlc3RzL3N2Zy9jdXN0b20vcG9pbnRlci1ldmVudHMtd2l0aC1saW5l
Y2Fwcy1hbmQtbWl0ZXJsaW1pdHMuc3ZnCiBjcmVhdGUgbW9kZSAxMDA2NDQgU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZWN0LmNwcAogY3JlYXRlIG1vZGUgMTAwNjQ0IFNv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVjdC5oCiBjcmVhdGUgbW9kZSAx
MDA2NDQgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdTaGFwZS5jcHAKIGNy
ZWF0ZSBtb2RlIDEwMDY0NCBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1No
YXBlLmgKCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cgYi9MYXlvdXRUZXN0cy9D
aGFuZ2VMb2cKaW5kZXggOWI0NzAxMy4uNTkxODBkMCAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMv
Q2hhbmdlTG9nCisrKyBiL0xheW91dFRlc3RzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE3IEBACisy
MDExLTA5LTE0ICBSZW5hdGEgSG9kb3ZhbiAgPHJlbmlAd2Via2l0Lm9yZz4KKworICAgICAgICBO
ZXcgcmVuZGVyZXIgZm9yIFNWR1JlY3RFbGVtZW50CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD02NTc2OQorCisgICAgICAgIEFkZCBuZXcgdGVzdHMgdG8g
Y2hlY2sgdGhlIG5ldyBzaGFwZSBiYXNlZCByZW5kZXJpbmcgbWVjaGFuaXNtIG9mIFNWR1JlY3RF
bGVtZW50LgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAg
ICogc3ZnL2N1c3RvbS9wb2ludGVyLWV2ZW50cy1vbi1yb3VuZGVkLXJlY3QtZXhwZWN0ZWQudHh0
OiBBZGRlZC4KKyAgICAgICAgKiBzdmcvY3VzdG9tL3BvaW50ZXItZXZlbnRzLW9uLXJvdW5kZWQt
cmVjdC5zdmc6IEFkZGVkLgorICAgICAgICAqIHN2Zy9jdXN0b20vcG9pbnRlci1ldmVudHMtd2l0
aC1saW5lY2Fwcy1hbmQtbWl0ZXJsaW1pdHMtZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAgICAg
KiBzdmcvY3VzdG9tL3BvaW50ZXItZXZlbnRzLXdpdGgtbGluZWNhcHMtYW5kLW1pdGVybGltaXRz
LnN2ZzogQWRkZWQuCisKIDIwMTEtMDktMDggIE9saXZlciBWYXJnYSAgPHZvbGl2ZXJAaW5mLnUt
c3plZ2VkLmh1PgogCiAgICAgICAgIEdhcmRlbmluZzogYWRkIG1pc3NpbmcgcmVzdWx0IGFmdGVy
OiByOTQ3MTAuCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9zdmcvY3VzdG9tL3BvaW50ZXItZXZl
bnRzLW9uLXJvdW5kZWQtcmVjdC1leHBlY3RlZC50eHQgYi9MYXlvdXRUZXN0cy9zdmcvY3VzdG9t
L3BvaW50ZXItZXZlbnRzLW9uLXJvdW5kZWQtcmVjdC1leHBlY3RlZC50eHQKbmV3IGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGIwMGRmMgotLS0gL2Rldi9udWxsCisrKyBiL0xheW91
dFRlc3RzL3N2Zy9jdXN0b20vcG9pbnRlci1ldmVudHMtb24tcm91bmRlZC1yZWN0LWV4cGVjdGVk
LnR4dApAQCAtMCwwICsxLDMgQEAKK1BBU1NFRDogZmFsbGJhY2tSZWN0IGhhZCBwb2ludGVyCisK
KwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvc3ZnL2N1c3RvbS9wb2ludGVyLWV2ZW50cy1vbi1y
b3VuZGVkLXJlY3Quc3ZnIGIvTGF5b3V0VGVzdHMvc3ZnL2N1c3RvbS9wb2ludGVyLWV2ZW50cy1v
bi1yb3VuZGVkLXJlY3Quc3ZnCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZh
NzE1YTAKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9zdmcvY3VzdG9tL3BvaW50ZXIt
ZXZlbnRzLW9uLXJvdW5kZWQtcmVjdC5zdmcKQEAgLTAsMCArMSw2NiBAQAorPGh0bWwgeG1sbnM9
J2h0dHA6Ly93d3cudzMub3JnLzE5OTkveGh0bWwnPgorPGJvZHkgc3R5bGU9Im1hcmdpbjogMHB4
OyBwYWRkaW5nOiAwcHgiPgorPHA+PC9wPgorCis8c3ZnIHhtbG5zPSJodHRwOi8vd3d3LnczLm9y
Zy8yMDAwL3N2ZyIgc3R5bGU9InBvc2l0aW9uOmFic29sdXRlOyI+Cis8ZGVmcz4KKworPHN0eWxl
IHR5cGU9InRleHQvY3NzIj48IVtDREFUQVsKK3JlY3Qjcm91bmRlZFJlY3QgeworCWZpbGw6IG5v
bmU7CisJc3Ryb2tlOiBncmVlbjsKKwlzdHJva2Utd2lkdGg6IDIwcHg7CisJc3Ryb2tlLWxpbmVq
b2luOiBiZXZlbDsKK30KK3JlY3Q6aG92ZXIgeworCXN0cm9rZTogcmVkOworfSAKK11dPjwvc3R5
bGU+Cis8L2RlZnM+CisKKzxyZWN0IGlkPSJmYWxsYmFjayIgeD0iMzAiIHk9IjMwIiB3aWR0aD0i
NDIwIiBoZWlnaHQ9IjMyMCIgZmlsbD0ieWVsbG93IiBvbmNsaWNrPSJwYXNzZWQoKSIvPgorPHJl
Y3QgaWQ9InJvdW5kZWRSZWN0IiB4PSI0MCIgeT0iNDAiIHJ4PSIzMCIgcnk9IjMwIiB3aWR0aD0i
NDAwIiBoZWlnaHQ9IjMwMCIgcG9pbnRlci1ldmVudHM9InZpc2libGVTdHJva2UiIG9uY2xpY2s9
ImZhaWxlZCgpIi8+CisKKzxzY3JpcHQgdHlwZT0idGV4dC9lY21hc2NyaXB0Ij4KKyAgICA8IVtD
REFUQVsKKwordmFyIGZhbGxiYWNrID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImZhbGxiYWNr
Iik7Cit2YXIgcm91bmRlZFJlY3QgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgicm91bmRlZFJl
Y3QiKTsKK3ZhciBwID0gZG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoInAiKVswXTsKKwor
ZmFsbGJhY2suYWRkRXZlbnRMaXN0ZW5lcigibW91c2Vkb3duIiwgcGFzc2VkLCBmYWxzZSk7City
b3VuZGVkUmVjdC5hZGRFdmVudExpc3RlbmVyKCJtb3VzZWRvd24iLCBmYWlsZWQsIGZhbHNlKTsK
KworZnVuY3Rpb24gc3RvcCgpIHsKKyAgICBmYWxsYmFjay5yZW1vdmVFdmVudExpc3RlbmVyKCJt
b3VzZWRvd24iLCBmYWlsZWQsIGZhbHNlKTsKKyAgICByb3VuZGVkUmVjdC5yZW1vdmVFdmVudExp
c3RlbmVyKCJtb3VzZWRvd24iLCBwYXNzZWQsIGZhbHNlKTsKKworICAgIGlmICh3aW5kb3cubGF5
b3V0VGVzdENvbnRyb2xsZXIpCisgICAgICAgIGxheW91dFRlc3RDb250cm9sbGVyLm5vdGlmeURv
bmUoKTsKK30KKyAgICAKK2Z1bmN0aW9uIGZhaWxlZCgpIHsKKyAgICBwLmlubmVySFRNTCA9ICdG
QUlMRUQ6IHN0cm9rZVJlY3QgaGFkIHBvaW50ZXInOworICAgIHN0b3AoKTsKK30KKworZnVuY3Rp
b24gcGFzc2VkKCkgeworICAgIHAuaW5uZXJIVE1MID0gJ1BBU1NFRDogZmFsbGJhY2tSZWN0IGhh
ZCBwb2ludGVyJzsKKyAgICBzdG9wKCk7Cit9CisKK2lmICh3aW5kb3cubGF5b3V0VGVzdENvbnRy
b2xsZXIpIHsKKyAgICBsYXlvdXRUZXN0Q29udHJvbGxlci53YWl0VW50aWxEb25lKCk7CisgICAg
bGF5b3V0VGVzdENvbnRyb2xsZXIuZHVtcEFzVGV4dCgpOworfQorCitpZiAod2luZG93LmV2ZW50
U2VuZGVyKSB7CisgICAgZXZlbnRTZW5kZXIubW91c2VNb3ZlVG8oNTAsIDUwKTsKKyAgICBldmVu
dFNlbmRlci5tb3VzZURvd24oKTsKK30KK11dPgorICA8L3NjcmlwdD4KKworPC9zdmc+Cis8L2Jv
ZHk+Cis8L2h0bWw+CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9zdmcvY3VzdG9tL3BvaW50ZXIt
ZXZlbnRzLXdpdGgtbGluZWNhcHMtYW5kLW1pdGVybGltaXRzLWV4cGVjdGVkLnR4dCBiL0xheW91
dFRlc3RzL3N2Zy9jdXN0b20vcG9pbnRlci1ldmVudHMtd2l0aC1saW5lY2Fwcy1hbmQtbWl0ZXJs
aW1pdHMtZXhwZWN0ZWQudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdh
ZmRjN2QKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9zdmcvY3VzdG9tL3BvaW50ZXIt
ZXZlbnRzLXdpdGgtbGluZWNhcHMtYW5kLW1pdGVybGltaXRzLWV4cGVjdGVkLnR4dApAQCAtMCww
ICsxLDMgQEAKK0ZBSUxFRDogc3Ryb2tlUmVjdCBoYWQgcG9pbnRlcgorCisKZGlmZiAtLWdpdCBh
L0xheW91dFRlc3RzL3N2Zy9jdXN0b20vcG9pbnRlci1ldmVudHMtd2l0aC1saW5lY2Fwcy1hbmQt
bWl0ZXJsaW1pdHMuc3ZnIGIvTGF5b3V0VGVzdHMvc3ZnL2N1c3RvbS9wb2ludGVyLWV2ZW50cy13
aXRoLWxpbmVjYXBzLWFuZC1taXRlcmxpbWl0cy5zdmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMDAwMDAwMC4uNzYxM2IzYQotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL3N2Zy9j
dXN0b20vcG9pbnRlci1ldmVudHMtd2l0aC1saW5lY2Fwcy1hbmQtbWl0ZXJsaW1pdHMuc3ZnCkBA
IC0wLDAgKzEsNjYgQEAKKzxodG1sIHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1s
Jz4KKzxib2R5IHN0eWxlPSJtYXJnaW46IDBweDsgcGFkZGluZzogMHB4Ij4KKzxwPjwvcD4KKwor
PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHN0eWxlPSJwb3NpdGlvbjph
YnNvbHV0ZTsiPgorPGRlZnM+CisKKzxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+PCFbQ0RBVEFbCity
ZWN0I3N0cm9rZWRSZWN0IHsKKwlmaWxsOiBub25lOworCXN0cm9rZTogYmx1ZTsKKwlzdHJva2Ut
d2lkdGg6IDIwcHg7CisJc3Ryb2tlLWxpbmVjYXA6IHNxdWFyZTsKKwlzdHJva2UtbWl0ZXJsaW1p
dDogMTsKK30KK3JlY3Qjc3Ryb2tlZFJlY3Q6aG92ZXIgeworCXN0cm9rZTogcmVkOworfQorXV0+
PC9zdHlsZT4KKzwvZGVmcz4KKworPHJlY3QgaWQ9ImZhbGxiYWNrIiB4PSIwIiB5PSIwIiB3aWR0
aD0iMjEwIiBoZWlnaHQ9IjIxMCIgZmlsbD0iZ3JlZW4iIG9uY2xpY2s9InBhc3NlZCgpIi8+Cis8
cmVjdCBpZD0ic3Ryb2tlZFJlY3QiIHg9IjEwIiB5PSIxMCIgd2lkdGg9IjE5MCIgaGVpZ2h0PSIx
OTAiIHBvaW50ZXItZXZlbnRzPSJ2aXNpYmxlU3Ryb2tlIiBvbmNsaWNrPSJmYWlsZWQoKSIvPiAK
KworPHNjcmlwdCB0eXBlPSJ0ZXh0L2VjbWFzY3JpcHQiPgorICAgIDwhW0NEQVRBWworCit2YXIg
ZmFsbGJhY2sgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiZmFsbGJhY2siKTsKK3ZhciBzdHJv
a2VkUmVjdCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJzdHJva2VkUmVjdCIpOwordmFyIHAg
PSBkb2N1bWVudC5nZXRFbGVtZW50c0J5VGFnTmFtZSgicCIpWzBdOworCitmYWxsYmFjay5hZGRF
dmVudExpc3RlbmVyKCJtb3VzZWRvd24iLCBwYXNzZWQsIGZhbHNlKTsKK3N0cm9rZWRSZWN0LmFk
ZEV2ZW50TGlzdGVuZXIoIm1vdXNlZG93biIsIGZhaWxlZCwgZmFsc2UpOworCitmdW5jdGlvbiBz
dG9wKCkgeworICAgIGZhbGxiYWNrLnJlbW92ZUV2ZW50TGlzdGVuZXIoIm1vdXNlZG93biIsIGZh
aWxlZCwgZmFsc2UpOworICAgIHN0cm9rZWRSZWN0LnJlbW92ZUV2ZW50TGlzdGVuZXIoIm1vdXNl
ZG93biIsIHBhc3NlZCwgZmFsc2UpOworCisgICAgaWYgKHdpbmRvdy5sYXlvdXRUZXN0Q29udHJv
bGxlcikKKyAgICAgICAgbGF5b3V0VGVzdENvbnRyb2xsZXIubm90aWZ5RG9uZSgpOworfQorCitm
dW5jdGlvbiBmYWlsZWQoKSB7CisgICAgcC5pbm5lckhUTUwgPSAnRkFJTEVEOiBzdHJva2VSZWN0
IGhhZCBwb2ludGVyJzsKKyAgICBzdG9wKCk7Cit9CisKK2Z1bmN0aW9uIHBhc3NlZCgpIHsKKyAg
ICBwLmlubmVySFRNTCA9ICdQQVNTRUQ6IGZhbGxiYWNrUmVjdCBoYWQgcG9pbnRlcic7CisgICAg
c3RvcCgpOworfQorCitpZiAod2luZG93LmxheW91dFRlc3RDb250cm9sbGVyKSB7CisgICAgbGF5
b3V0VGVzdENvbnRyb2xsZXIud2FpdFVudGlsRG9uZSgpOworICAgIGxheW91dFRlc3RDb250cm9s
bGVyLmR1bXBBc1RleHQoKTsKK30KKworaWYgKHdpbmRvdy5ldmVudFNlbmRlcikgeworICAgIGV2
ZW50U2VuZGVyLm1vdXNlTW92ZVRvKDIwLCAyMCk7CisgICAgZXZlbnRTZW5kZXIubW91c2VEb3du
KCk7Cit9CitdXT4KKyAgPC9zY3JpcHQ+Cis8L3N2Zz4KKzwvYm9keT4KKzwvaHRtbD4KZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NNYWtlTGlzdHMudHh0IGIvU291cmNlL1dlYkNvcmUvQ01h
a2VMaXN0cy50eHQKaW5kZXggN2E1MjA1Ny4uYmNjYmUwMiAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvQ01ha2VMaXN0cy50eHQKKysrIGIvU291cmNlL1dlYkNvcmUvQ01ha2VMaXN0cy50eHQK
QEAgLTE1OTcsNiArMTU5Nyw3IEBAIElGIChFTkFCTEVfU1ZHKQogICAgICAgICByZW5kZXJpbmcv
c3ZnL1JlbmRlclNWR0lubGluZVRleHQuY3BwCiAgICAgICAgIHJlbmRlcmluZy9zdmcvUmVuZGVy
U1ZHTW9kZWxPYmplY3QuY3BwCiAgICAgICAgIHJlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUGF0aC5j
cHAKKyAgICAgICAgcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZWN0LmNwcAogICAgICAgICByZW5k
ZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291cmNlLmNwcAogICAgICAgICByZW5kZXJpbmcvc3ZnL1Jl
bmRlclNWR1Jlc291cmNlQ2xpcHBlci5jcHAKICAgICAgICAgcmVuZGVyaW5nL3N2Zy9SZW5kZXJT
VkdSZXNvdXJjZUNvbnRhaW5lci5jcHAKQEAgLTE2MTEsNiArMTYxMiw3IEBAIElGIChFTkFCTEVf
U1ZHKQogICAgICAgICByZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291cmNlU29saWRDb2xvci5j
cHAKICAgICAgICAgcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSb290LmNwcAogICAgICAgICByZW5k
ZXJpbmcvc3ZnL1JlbmRlclNWR1NoYWRvd1RyZWVSb290Q29udGFpbmVyLmNwcAorICAgICAgICBy
ZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1NoYXBlLmNwcAogICAgICAgICByZW5kZXJpbmcvc3ZnL1Jl
bmRlclNWR1RTcGFuLmNwcAogICAgICAgICByZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1RleHQuY3Bw
CiAgICAgICAgIHJlbmRlcmluZy9zdmcvUmVuZGVyU1ZHVGV4dFBhdGguY3BwCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5k
ZXggMDUwODU5OS4uZjhhZDJlMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9n
CisrKyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE1OCBAQAorMjAxMS0w
OS0xNCAgUmVuYXRhIEhvZG92YW4gIDxyZW5pQHdlYmtpdC5vcmc+CisKKyAgICAgICAgTmV3IHJl
bmRlcmVyIGZvciBTVkdSZWN0RWxlbWVudAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9NjU3NjkKKworICAgICAgICBUaGlzIHBhdGNoIGludHJvZHVjZXMg
YSBuZXcgY29tbW9uIGJhc2UgY2xhc3MgY2FsbGVkIFJlbmRlclNWR1NoYXBlIHdoaWNoCisgICAg
ICAgIHJlcGxhY2VzIHRoZSBSZW5kZXJTVkdQYXRoLiBUaGlzIG5ldyBiYXNlIGNsYXNzIGhhcyB0
aGUgc2FtZSBwdXJwb3NlCisgICAgICAgIGFzIHRoZSByZXBsYWNlZCBjbGFzcyBhbmQgaGFzIHNw
ZWNpYWxpemVkIGRlc2NlbmRhbnRzIGZvciBjb21tb24KKyAgICAgICAgc2hhcGVzIChsaWtlIFJl
Y3RhbmdsZXMgYW5kIENpcmNsZXMpLCB3aGljaCBhbGxvd3MgZmFzdGVyIHBhaW50aW5nCisgICAg
ICAgIG9mIHRoZXNlIHNoYXBlcyB3aGVuIGNlcnRhaW4gY29uZGl0aW9ucyBhcmUgZnVsZmlsbGVk
LiBPbiBzb21lCisgICAgICAgIGJlbmNobWFyayBwcm9ncmFtcyB3ZSBoYXZlIHNlZW4gNSUgc3Bl
ZWR1cC4KKworICAgICAgICBUaGUgYmlnZ2VzdCBtb3RpdmF0aW9uIG9mIHRoaXMgcmVmYWN0b3Ig
aXMgdGFraW5nIGFkdmFudGFnZQorICAgICAgICBvZiBmYXN0ZXIgcHJpbWl0aXZlIGRyYXdpbmcg
aW4gdGhlIG1vc3QgY29tbW9uIGFuZCBmcmVxdWVudAorICAgICAgICBjYXNlcy4gSG93ZXZlciBp
biBzb21lIHJhcmUgY2FzZXMsIGxpa2UgcGFpbnRpbmcgcm91bmRlZAorICAgICAgICByZWN0cywg
d2UgbmVlZCB0byBmYWxsYmFjayB0byB0aGUgb3JpZ2luYWwgY29kZSBwYXRoLCB3aGljaAorICAg
ICAgICBpcyBmdWxseSBrZXB0IGluIHRoZSBSZW5kZXJTVkdTaGFwZSBiYXNlIGNsYXNzLiBTb21l
IG90aGVyCisgICAgICAgIGNhc2VzLCBsaWtlIGRhc2hlZCBzdHJva2VzLCBjYW4gYmUgcGFpbnRl
ZCBidXQgbW91c2UgcG9pbnRlcgorICAgICAgICBldmVudHMgY2Fubm90IGJlIGhhbmRsZWQgYnkg
dGhlIGRlc2NlbmRhbnQgY2xhc3Nlcy4gQSBkaWZmZXJlbnQKKyAgICAgICAgZmFsbGJhY2sgbWVj
aGFuaXNtIGlzIHVzZWQgaW4gc3VjaCBjYXNlcyB3aGljaCByZWRpcmVjdHMKKyAgICAgICAgb25s
eSB0aGUgcG9pbnRlciBldmVudCBoYW5kbGluZyB0byB0aGUgYmFzZSBjbGFzcy4KKworICAgICAg
ICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBUZXN0czogc3ZnL2N1c3Rv
bS9wb2ludGVyLWV2ZW50cy1vbi1yb3VuZGVkLXJlY3Quc3ZnCisgICAgICAgICAgICAgICBzdmcv
Y3VzdG9tL3BvaW50ZXItZXZlbnRzLXdpdGgtbGluZWNhcHMtYW5kLW1pdGVybGltaXRzLnN2Zwor
CisgICAgICAgICogQ01ha2VMaXN0cy50eHQ6CisgICAgICAgICogR05VbWFrZWZpbGUubGlzdC5h
bToKKyAgICAgICAgKiBXZWJDb3JlLmd5cGk6CisgICAgICAgICogV2ViQ29yZS5wcm86CisgICAg
ICAgICogV2ViQ29yZS52Y3Byb2ovV2ViQ29yZS52Y3Byb2o6CisgICAgICAgICogcGxhdGZvcm0v
Z3JhcGhpY3MvRmxvYXRSZWN0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZsb2F0UmVjdDo6Y29t
cHJpc2VzKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9GbG9hdFJlY3QuaDoKKyAgICAg
ICAgKiByZW5kZXJpbmcvUmVuZGVyT2JqZWN0Lmg6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJP
YmplY3Q6OmlzU1ZHTGluZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJPYmplY3Q6OmlzU1ZH
UmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJPYmplY3Q6OmlzU1ZHU2hhcGUpOgorICAg
ICAgICAqIHJlbmRlcmluZy9SZW5kZXJUcmVlQXNUZXh0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OndyaXRlKToKKyAgICAgICAgKiByZW5kZXJpbmcvc3ZnL1JlbmRlclNWR0FsbEluT25lLmNwcDoK
KyAgICAgICAgKiByZW5kZXJpbmcvc3ZnL1JlbmRlclNWR01vZGVsT2JqZWN0LmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OmlzR3JhcGhpY3NFbGVtZW50KToKKyAgICAgICAgKiByZW5kZXJpbmcvc3Zn
L1JlbmRlclNWR1BhdGguY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU1ZHUGF0aDo6UmVu
ZGVyU1ZHUGF0aCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJTVkdQYXRoOjppbmZsYXRlV2l0
aE1hcmtlckJvdW5kcyk6CisgICAgICAgICogcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdQYXRoLmg6
CisgICAgICAgICogcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZWN0LmNwcDogQWRkZWQuCisgICAg
ICAgIChXZWJDb3JlOjpSZW5kZXJTVkdSZWN0OjpSZW5kZXJTVkdSZWN0KToKKyAgICAgICAgKFdl
YkNvcmU6OlJlbmRlclNWR1JlY3Q6On5SZW5kZXJTVkdSZWN0KToKKyAgICAgICAgKFdlYkNvcmU6
OlJlbmRlclNWR1JlY3Q6OmNyZWF0ZVNoYXBlKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclNW
R1JlY3Q6Om9iamVjdEJvdW5kaW5nQm94KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclNWR1Jl
Y3Q6OnN0cm9rZUJvdW5kaW5nQm94KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclNWR1JlY3Q6
OmZpbGxTaGFwZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJTVkdSZWN0OjpzdHJva2VTaGFw
ZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJTVkdSZWN0OjpzaGFwZURlcGVuZGVudFN0cm9r
ZUNvbnRhaW5zKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclNWR1JlY3Q6OnNoYXBlRGVwZW5k
ZW50RmlsbENvbnRhaW5zKToKKyAgICAgICAgKiByZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1JlY3Qu
aDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJTVkdSZWN0Ojppc1NWR1JlY3QpOgor
ICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU1ZHUmVjdDo6cmVuZGVyTmFtZSk6CisgICAgICAgIChX
ZWJDb3JlOjpSZW5kZXJTVkdSZWN0Ojppc0VtcHR5KToKKyAgICAgICAgKiByZW5kZXJpbmcvc3Zn
L1JlbmRlclNWR1Jlc291cmNlLmg6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJTVkdSZXNvdXJj
ZTo6cG9zdEFwcGx5UmVzb3VyY2UpOgorICAgICAgICAqIHJlbmRlcmluZy9zdmcvUmVuZGVyU1ZH
UmVzb3VyY2VDbGlwcGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclNWR1Jlc291cmNl
Q2xpcHBlcjo6ZHJhd0NvbnRlbnRJbnRvTWFza0ltYWdlKToKKyAgICAgICAgKFdlYkNvcmU6OlJl
bmRlclNWR1Jlc291cmNlQ2xpcHBlcjo6Y2FsY3VsYXRlQ2xpcENvbnRlbnRSZXBhaW50UmVjdCk6
CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJTVkdSZXNvdXJjZUNsaXBwZXI6OmhpdFRlc3RDbGlw
Q29udGVudCk6CisgICAgICAgICogcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJjZUNvbnRh
aW5lci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJTVkdSZXNvdXJjZUNvbnRhaW5lcjo6
dHJhbnNmb3JtT25Ob25TY2FsaW5nU3Ryb2tlKToKKyAgICAgICAgKiByZW5kZXJpbmcvc3ZnL1Jl
bmRlclNWR1Jlc291cmNlRmlsdGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclNWR1Jl
c291cmNlRmlsdGVyOjpwb3N0QXBwbHlSZXNvdXJjZSk6CisgICAgICAgICogcmVuZGVyaW5nL3N2
Zy9SZW5kZXJTVkdSZXNvdXJjZUZpbHRlci5oOgorICAgICAgICAqIHJlbmRlcmluZy9zdmcvUmVu
ZGVyU1ZHUmVzb3VyY2VHcmFkaWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJTVkdS
ZXNvdXJjZUdyYWRpZW50OjphcHBseVJlc291cmNlKToKKyAgICAgICAgKiByZW5kZXJpbmcvc3Zn
L1JlbmRlclNWR1Jlc291cmNlR3JhZGllbnQuaDoKKyAgICAgICAgKiByZW5kZXJpbmcvc3ZnL1Jl
bmRlclNWR1Jlc291cmNlUGF0dGVybi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJTVkdS
ZXNvdXJjZVBhdHRlcm46OnBvc3RBcHBseVJlc291cmNlKToKKyAgICAgICAgKiByZW5kZXJpbmcv
c3ZnL1JlbmRlclNWR1Jlc291cmNlUGF0dGVybi5oOgorICAgICAgICAqIHJlbmRlcmluZy9zdmcv
UmVuZGVyU1ZHUmVzb3VyY2VTb2xpZENvbG9yLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRl
clNWR1Jlc291cmNlU29saWRDb2xvcjo6cG9zdEFwcGx5UmVzb3VyY2UpOgorICAgICAgICAqIHJl
bmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VTb2xpZENvbG9yLmg6CisgICAgICAgICogcmVu
ZGVyaW5nL3N2Zy9SZW5kZXJTVkdTaGFwZS5jcHA6IENvcGllZCBmcm9tIFNvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUGF0aC5jcHAuCisgICAgICAgIChXZWJDb3JlOjpSZW5k
ZXJTVkdTaGFwZTo6UmVuZGVyU1ZHU2hhcGUpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU1ZH
U2hhcGU6On5SZW5kZXJTVkdTaGFwZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJTVkdTaGFw
ZTo6Y3JlYXRlU2hhcGUpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU1ZHU2hhcGU6OmlzRW1w
dHkpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU1ZHU2hhcGU6OmZpbGxTaGFwZSk6CisgICAg
ICAgIChXZWJDb3JlOjpSZW5kZXJTVkdTaGFwZTo6b2JqZWN0Qm91bmRpbmdCb3gpOgorICAgICAg
ICAoV2ViQ29yZTo6UmVuZGVyU1ZHU2hhcGU6OnN0cm9rZUJvdW5kaW5nQm94KToKKyAgICAgICAg
KFdlYkNvcmU6OlJlbmRlclNWR1NoYXBlOjpzdHJva2VTaGFwZSk6CisgICAgICAgIChXZWJDb3Jl
OjpSZW5kZXJTVkdTaGFwZTo6c2hhcGVEZXBlbmRlbnRTdHJva2VDb250YWlucyk6CisgICAgICAg
IChXZWJDb3JlOjpSZW5kZXJTVkdTaGFwZTo6c2hhcGVEZXBlbmRlbnRGaWxsQ29udGFpbnMpOgor
ICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU1ZHU2hhcGU6OmZpbGxDb250YWlucyk6CisgICAgICAg
IChXZWJDb3JlOjpSZW5kZXJTVkdTaGFwZTo6c3Ryb2tlQ29udGFpbnMpOgorICAgICAgICAoV2Vi
Q29yZTo6UmVuZGVyU1ZHU2hhcGU6OmxheW91dCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJT
VkdTaGFwZTo6c2hvdWxkU3Ryb2tlWmVyb0xlbmd0aFN1YnBhdGgpOgorICAgICAgICAoV2ViQ29y
ZTo6UmVuZGVyU1ZHU2hhcGU6Onplcm9MZW5ndGhTdWJwYXRoUmVjdCk6CisgICAgICAgIChXZWJD
b3JlOjpSZW5kZXJTVkdTaGFwZTo6c2V0dXBTcXVhcmVDYXBQYXRoKToKKyAgICAgICAgKFdlYkNv
cmU6OlJlbmRlclNWR1NoYXBlOjpzZXR1cE5vblNjYWxpbmdTdHJva2VQYXRoKToKKyAgICAgICAg
KFdlYkNvcmU6OlJlbmRlclNWR1NoYXBlOjpmaWxsQW5kU3Ryb2tlUGF0aCk6CisgICAgICAgIChX
ZWJDb3JlOjpSZW5kZXJTVkdTaGFwZTo6cGFpbnQpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVy
U1ZHU2hhcGU6OmFkZEZvY3VzUmluZ1JlY3RzKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclNW
R1NoYXBlOjpub2RlQXRGbG9hdFBvaW50KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclNWR1No
YXBlOjpjYWxjdWxhdGVNYXJrZXJCb3VuZHNJZk5lZWRlZCk6CisgICAgICAgIChXZWJDb3JlOjpS
ZW5kZXJTVkdTaGFwZTo6dXBkYXRlQ2FjaGVkQm91bmRhcmllcyk6CisgICAgICAgIChXZWJDb3Jl
OjpSZW5kZXJTVkdTaGFwZTo6c3Ryb2tlV2lkdGgpOgorICAgICAgICAqIHJlbmRlcmluZy9zdmcv
UmVuZGVyU1ZHU2hhcGUuaDogQ29waWVkIGZyb20gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2
Zy9SZW5kZXJTVkdQYXRoLmguCisgICAgICAgIChXZWJDb3JlOjpCb3VuZGluZ1JlY3RTdHJva2VT
dHlsZUFwcGxpZXI6OkJvdW5kaW5nUmVjdFN0cm9rZVN0eWxlQXBwbGllcik6CisgICAgICAgIChX
ZWJDb3JlOjpCb3VuZGluZ1JlY3RTdHJva2VTdHlsZUFwcGxpZXI6OnN0cm9rZVN0eWxlKToKKyAg
ICAgICAgKFdlYkNvcmU6OlJlbmRlclNWR1NoYXBlOjpzZXROZWVkc1NoYXBlVXBkYXRlKToKKyAg
ICAgICAgKFdlYkNvcmU6OlJlbmRlclNWR1NoYXBlOjpzZXROZWVkc0JvdW5kYXJpZXNVcGRhdGUp
OgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU1ZHU2hhcGU6OnNldE5lZWRzVHJhbnNmb3JtVXBk
YXRlKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclNWR1NoYXBlOjpzZXRJc0ZpbGxGYWxsYmFj
ayk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJTVkdTaGFwZTo6aXNGaWxsRmFsbGJhY2spOgor
ICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU1ZHU2hhcGU6OnNldFN0cm9rZUFuZE1hcmtlckJvdW5k
aW5nQm94KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclNWR1NoYXBlOjpwYXRoKToKKyAgICAg
ICAgKFdlYkNvcmU6OlJlbmRlclNWR1NoYXBlOjpoYXNQYXRoKToKKyAgICAgICAgKFdlYkNvcmU6
OlJlbmRlclNWR1NoYXBlOjpyZXBhaW50UmVjdEluTG9jYWxDb29yZGluYXRlcyk6CisgICAgICAg
IChXZWJDb3JlOjpSZW5kZXJTVkdTaGFwZTo6bG9jYWxUb1BhcmVudFRyYW5zZm9ybSk6CisgICAg
ICAgIChXZWJDb3JlOjpSZW5kZXJTVkdTaGFwZTo6aXNTVkdTaGFwZSk6CisgICAgICAgIChXZWJD
b3JlOjpSZW5kZXJTVkdTaGFwZTo6cmVuZGVyTmFtZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5k
ZXJTVkdTaGFwZTo6aXNSb3VuZGVkUmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJTVkdT
aGFwZTo6aW5mbGF0ZVdpdGhNYXJrZXJCb3VuZHMpOgorICAgICAgICAoV2ViQ29yZTo6dG9SZW5k
ZXJTVkdTaGFwZSk6CisgICAgICAgICogcmVuZGVyaW5nL3N2Zy9TVkdJbmxpbmVUZXh0Qm94LmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR0lubGluZVRleHRCb3g6OnJlbGVhc2VQYWludGluZ1Jl
c291cmNlKToKKyAgICAgICAgKiByZW5kZXJpbmcvc3ZnL1NWR1JlbmRlclN1cHBvcnQuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6U1ZHUmVuZGVyU3VwcG9ydDo6ZmluaXNoUmVuZGVyU1ZHQ29udGVu
dCk6CisgICAgICAgIChXZWJDb3JlOjpTVkdSZW5kZXJTdXBwb3J0OjpsYXlvdXRDaGlsZHJlbik6
CisgICAgICAgICogcmVuZGVyaW5nL3N2Zy9TVkdSZW5kZXJUcmVlQXNUZXh0LmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OndyaXRlU3R5bGUpOgorICAgICAgICAoV2ViQ29yZTo6b3BlcmF0b3I8PCk6
CisgICAgICAgIChXZWJDb3JlOjp3cml0ZSk6CisgICAgICAgICogcmVuZGVyaW5nL3N2Zy9TVkdS
ZW5kZXJUcmVlQXNUZXh0Lmg6CisgICAgICAgICogcmVuZGVyaW5nL3N2Zy9TVkdUZXh0UnVuUmVu
ZGVyaW5nQ29udGV4dC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTVkdUZXh0UnVuUmVuZGVyaW5n
Q29udGV4dDo6ZHJhd1NWR0dseXBocyk6CisgICAgICAgICogc3ZnL1NWR0NpcmNsZUVsZW1lbnQu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6U1ZHQ2lyY2xlRWxlbWVudDo6c3ZnQXR0cmlidXRlQ2hh
bmdlZCk6CisgICAgICAgICogc3ZnL1NWR0VsbGlwc2VFbGVtZW50LmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OlNWR0VsbGlwc2VFbGVtZW50OjpzdmdBdHRyaWJ1dGVDaGFuZ2VkKToKKyAgICAgICAg
KiBzdmcvU1ZHTGluZUVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U1ZHTGluZUVsZW1l
bnQ6OnN2Z0F0dHJpYnV0ZUNoYW5nZWQpOgorICAgICAgICAqIHN2Zy9TVkdQYXRoRWxlbWVudC5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpTVkdQYXRoRWxlbWVudDo6c3ZnQXR0cmlidXRlQ2hhbmdl
ZCk6CisgICAgICAgIChXZWJDb3JlOjpTVkdQYXRoRWxlbWVudDo6cGF0aFNlZ0xpc3RDaGFuZ2Vk
KToKKyAgICAgICAgKFdlYkNvcmU6OlNWR1BhdGhFbGVtZW50OjpjcmVhdGVSZW5kZXJlcik6Cisg
ICAgICAgICogc3ZnL1NWR1BhdGhFbGVtZW50Lmg6CisgICAgICAgICogc3ZnL1NWR1BvbHlFbGVt
ZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR1BvbHlFbGVtZW50OjpzdmdBdHRyaWJ1dGVD
aGFuZ2VkKToKKyAgICAgICAgKiBzdmcvU1ZHUmVjdEVsZW1lbnQuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6U1ZHUmVjdEVsZW1lbnQ6OnN2Z0F0dHJpYnV0ZUNoYW5nZWQpOgorICAgICAgICAoV2Vi
Q29yZTo6U1ZHUmVjdEVsZW1lbnQ6OmNyZWF0ZVJlbmRlcmVyKToKKyAgICAgICAgKiBzdmcvU1ZH
UmVjdEVsZW1lbnQuaDoKKwogMjAxMS0wOS0wNyAgQW5kcmV5IEtvc3lha292ICA8Y2FzZXFAY2hy
b21pdW0ub3JnPgogCiAgICAgICAgIFdlYiBJbnNwZWN0b3I6IHRyeWluZyB0byBzY3JvbGwgbW91
c2Ugd2hlZWwgd2hlbiBpbiBUZXh0Vmlld2VyJ3MgZ3V0dGVyIHBhbmUgY2F1c2VzIEV2ZW50RXhj
ZXB0aW9uOjpESVNQQVRDSF9SRVFVRVNUX0VSUgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
R05VbWFrZWZpbGUubGlzdC5hbSBiL1NvdXJjZS9XZWJDb3JlL0dOVW1ha2VmaWxlLmxpc3QuYW0K
aW5kZXggMGVjMWE0ZC4uYzBkNDk4OCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvR05VbWFr
ZWZpbGUubGlzdC5hbQorKysgYi9Tb3VyY2UvV2ViQ29yZS9HTlVtYWtlZmlsZS5saXN0LmFtCkBA
IC0zMjA2LDYgKzMyMDYsOCBAQCB3ZWJjb3JlX3NvdXJjZXMgKz0gXAogCVNvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHTW9kZWxPYmplY3QuaCBcCiAJU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdQYXRoLmNwcCBcCiAJU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL3N2Zy9SZW5kZXJTVkdQYXRoLmggXAorCVNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcv
UmVuZGVyU1ZHUmVjdC5jcHAgXAorCVNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVy
U1ZHUmVjdC5oIFwKIAlTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291
cmNlQ2xpcHBlci5jcHAgXAogCVNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZH
UmVzb3VyY2VDbGlwcGVyLmggXAogCVNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVy
U1ZHUmVzb3VyY2VDb250YWluZXIuY3BwIFwKQEAgLTMyMzQsNiArMzIzNiw4IEBAIHdlYmNvcmVf
c291cmNlcyArPSBcCiAJU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSb290
LmggXAogCVNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHU2hhZG93VHJlZVJv
b3RDb250YWluZXIuY3BwIFwKIAlTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNW
R1NoYWRvd1RyZWVSb290Q29udGFpbmVyLmggXAorCVNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9z
dmcvUmVuZGVyU1ZHU2hhcGUuY3BwIFwKKwlTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1Jl
bmRlclNWR1NoYXBlLmggXAogCVNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZH
VFNwYW4uY3BwIFwKIAlTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1RTcGFu
LmggXAogCVNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHVGV4dC5jcHAgXApk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBpIGIvU291cmNlL1dlYkNvcmUv
V2ViQ29yZS5neXBpCmluZGV4IDAzOTg2NGIuLjFlMGE0NTkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL1dlYkNvcmUuZ3lwaQorKysgYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkKQEAg
LTU4NTIsNiArNTg1Miw4IEBACiAgICAgICAgICAgICAncmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdN
b2RlbE9iamVjdC5oJywKICAgICAgICAgICAgICdyZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1BhdGgu
Y3BwJywKICAgICAgICAgICAgICdyZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1BhdGguaCcsCisgICAg
ICAgICAgICAncmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZWN0LmNwcCcsCisgICAgICAgICAgICAn
cmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZWN0LmgnLAogICAgICAgICAgICAgJ3JlbmRlcmluZy9z
dmcvUmVuZGVyU1ZHUmVzb3VyY2UuY3BwJywKICAgICAgICAgICAgICdyZW5kZXJpbmcvc3ZnL1Jl
bmRlclNWR1Jlc291cmNlLmgnLAogICAgICAgICAgICAgJ3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZH
UmVzb3VyY2VDbGlwcGVyLmNwcCcsCkBAIC01ODgwLDYgKzU4ODIsOCBAQAogICAgICAgICAgICAg
J3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUm9vdC5oJywKICAgICAgICAgICAgICdyZW5kZXJpbmcv
c3ZnL1JlbmRlclNWR1NoYWRvd1RyZWVSb290Q29udGFpbmVyLmNwcCcsCiAgICAgICAgICAgICAn
cmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdTaGFkb3dUcmVlUm9vdENvbnRhaW5lci5oJywKKyAgICAg
ICAgICAgICdyZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1NoYXBlLmNwcCcsCisgICAgICAgICAgICAn
cmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdTaGFwZS5oJywKICAgICAgICAgICAgICdyZW5kZXJpbmcv
c3ZnL1JlbmRlclNWR1RTcGFuLmNwcCcsCiAgICAgICAgICAgICAncmVuZGVyaW5nL3N2Zy9SZW5k
ZXJTVkdUU3Bhbi5oJywKICAgICAgICAgICAgICdyZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1RleHQu
Y3BwJywKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUucHJvIGIvU291cmNlL1dl
YkNvcmUvV2ViQ29yZS5wcm8KaW5kZXggMjJhODQ1ZC4uOTkyNTA3ZCAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvV2ViQ29yZS5wcm8KKysrIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5wcm8K
QEAgLTIyODIsNiArMjI4Miw3IEBAIEhFQURFUlMgKz0gXAogICAgIHJlbmRlcmluZy9zdmcvUmVu
ZGVyU1ZHSW5saW5lVGV4dC5oIFwKICAgICByZW5kZXJpbmcvc3ZnL1JlbmRlclNWR01vZGVsT2Jq
ZWN0LmggXAogICAgIHJlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUGF0aC5oIFwKKyAgICByZW5kZXJp
bmcvc3ZnL1JlbmRlclNWR1JlY3QuaCBcCiAgICAgcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNv
dXJjZS5oIFwKICAgICByZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291cmNlQ2xpcHBlci5oIFwK
ICAgICByZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291cmNlQ29udGFpbmVyLmggXApAQCAtMjI5
Niw2ICsyMjk3LDcgQEAgSEVBREVSUyArPSBcCiAgICAgcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdS
ZXNvdXJjZVNvbGlkQ29sb3IuaCBcCiAgICAgcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSb290Lmgg
XAogICAgIHJlbmRlcmluZy9zdmcvUmVuZGVyU1ZHU2hhZG93VHJlZVJvb3RDb250YWluZXIuaCBc
CisgICAgcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdTaGFwZS5oIFwKICAgICByZW5kZXJpbmcvc3Zn
L1JlbmRlclNWR1RTcGFuLmggXAogICAgIHJlbmRlcmluZy9zdmcvUmVuZGVyU1ZHVGV4dC5oIFwK
ICAgICByZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1RleHRQYXRoLmggXApAQCAtMzMxMCw2ICszMzEy
LDggQEAgY29udGFpbnMoREVGSU5FUywgRU5BQkxFX1NWRz0xKSB7CiAgICAgICAgIHJlbmRlcmlu
Zy9zdHlsZS9TVkdSZW5kZXJTdHlsZURlZnMuY3BwIFwKICAgICAgICAgcmVuZGVyaW5nL1BvaW50
ZXJFdmVudHNIaXRSdWxlcy5jcHAgXAogICAgICAgICByZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Bh
dGguY3BwIFwKKyAgICAgICAgcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZWN0LmNwcCBcCisgICAg
ICAgIHJlbmRlcmluZy9zdmcvUmVuZGVyU1ZHU2hhcGUuY3BwIFwKICAgICAgICAgc3ZnL2FuaW1h
dGlvbi9TTUlMVGltZS5jcHAgXAogICAgICAgICBzdmcvYW5pbWF0aW9uL1NNSUxUaW1lQ29udGFp
bmVyLmNwcCBcCiAgICAgICAgIHN2Zy9hbmltYXRpb24vU1ZHU01JTEVsZW1lbnQuY3BwIFwKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUudmNwcm9qL1dlYkNvcmUudmNwcm9qIGIv
U291cmNlL1dlYkNvcmUvV2ViQ29yZS52Y3Byb2ovV2ViQ29yZS52Y3Byb2oKaW5kZXggNmI2ODBi
YS4uNTY3ODY5OCAxMDA3NTUKLS0tIGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS52Y3Byb2ovV2Vi
Q29yZS52Y3Byb2oKKysrIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS52Y3Byb2ovV2ViQ29yZS52
Y3Byb2oKQEAgLTQxNjQ3LDYgKzQxNjQ3LDExOCBAQAogCQkJCQk+CiAJCQkJPC9GaWxlPgogCQkJ
CTxGaWxlCisJCQkJCVJlbGF0aXZlUGF0aD0iLi5ccmVuZGVyaW5nXHN2Z1xSZW5kZXJTVkdSZWN0
LmNwcCIKKwkJCQkJPgorCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24KKwkJCQkJCU5hbWU9IkRlYnVn
fFdpbjMyIgorCQkJCQkJRXhjbHVkZWRGcm9tQnVpbGQ9InRydWUiCisJCQkJCQk+CisJCQkJCQk8
VG9vbAorCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiCisJCQkJCQkvPgorCQkJCQk8L0Zp
bGVDb25maWd1cmF0aW9uPgorCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24KKwkJCQkJCU5hbWU9IlJl
bGVhc2V8V2luMzIiCisJCQkJCQlFeGNsdWRlZEZyb21CdWlsZD0idHJ1ZSIKKwkJCQkJCT4KKwkJ
CQkJCTxUb29sCisJCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIKKwkJCQkJCS8+CisJCQkJ
CTwvRmlsZUNvbmZpZ3VyYXRpb24+CisJCQkJCTxGaWxlQ29uZmlndXJhdGlvbgorCQkJCQkJTmFt
ZT0iRGVidWdfQ2Fpcm9fQ0ZMaXRlfFdpbjMyIgorCQkJCQkJRXhjbHVkZWRGcm9tQnVpbGQ9InRy
dWUiCisJCQkJCQk+CisJCQkJCQk8VG9vbAorCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wi
CisJCQkJCQkvPgorCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPgorCQkJCQk8RmlsZUNvbmZpZ3Vy
YXRpb24KKwkJCQkJCU5hbWU9IlJlbGVhc2VfQ2Fpcm9fQ0ZMaXRlfFdpbjMyIgorCQkJCQkJRXhj
bHVkZWRGcm9tQnVpbGQ9InRydWUiCisJCQkJCQk+CisJCQkJCQk8VG9vbAorCQkJCQkJCU5hbWU9
IlZDQ0xDb21waWxlclRvb2wiCisJCQkJCQkvPgorCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPgor
CQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24KKwkJCQkJCU5hbWU9IkRlYnVnX0FsbHxXaW4zMiIKKwkJ
CQkJCUV4Y2x1ZGVkRnJvbUJ1aWxkPSJ0cnVlIgorCQkJCQkJPgorCQkJCQkJPFRvb2wKKwkJCQkJ
CQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIgorCQkJCQkJLz4KKwkJCQkJPC9GaWxlQ29uZmlndXJh
dGlvbj4KKwkJCQkJPEZpbGVDb25maWd1cmF0aW9uCisJCQkJCQlOYW1lPSJQcm9kdWN0aW9ufFdp
bjMyIgorCQkJCQkJRXhjbHVkZWRGcm9tQnVpbGQ9InRydWUiCisJCQkJCQk+CisJCQkJCQk8VG9v
bAorCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiCisJCQkJCQkvPgorCQkJCQk8L0ZpbGVD
b25maWd1cmF0aW9uPgorCQkJCTwvRmlsZT4KKwkJCQk8RmlsZQorCQkJCQlSZWxhdGl2ZVBhdGg9
Ii4uXHJlbmRlcmluZ1xzdmdcUmVuZGVyU1ZHUmVjdC5oIgorCQkJCQk+CisJCQkJPC9GaWxlPgor
CQkJCTxGaWxlCisJCQkJCVJlbGF0aXZlUGF0aD0iLi5ccmVuZGVyaW5nXHN2Z1xSZW5kZXJTVkdT
aGFwZS5jcHAiCisJCQkJCT4KKwkJCQkJPEZpbGVDb25maWd1cmF0aW9uCisJCQkJCQlOYW1lPSJE
ZWJ1Z3xXaW4zMiIKKwkJCQkJCUV4Y2x1ZGVkRnJvbUJ1aWxkPSJ0cnVlIgorCQkJCQkJPgorCQkJ
CQkJPFRvb2wKKwkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIgorCQkJCQkJLz4KKwkJCQkJ
PC9GaWxlQ29uZmlndXJhdGlvbj4KKwkJCQkJPEZpbGVDb25maWd1cmF0aW9uCisJCQkJCQlOYW1l
PSJSZWxlYXNlfFdpbjMyIgorCQkJCQkJRXhjbHVkZWRGcm9tQnVpbGQ9InRydWUiCisJCQkJCQk+
CisJCQkJCQk8VG9vbAorCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiCisJCQkJCQkvPgor
CQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPgorCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24KKwkJCQkJ
CU5hbWU9IkRlYnVnX0NhaXJvX0NGTGl0ZXxXaW4zMiIKKwkJCQkJCUV4Y2x1ZGVkRnJvbUJ1aWxk
PSJ0cnVlIgorCQkJCQkJPgorCQkJCQkJPFRvb2wKKwkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJU
b29sIgorCQkJCQkJLz4KKwkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4KKwkJCQkJPEZpbGVDb25m
aWd1cmF0aW9uCisJCQkJCQlOYW1lPSJSZWxlYXNlX0NhaXJvX0NGTGl0ZXxXaW4zMiIKKwkJCQkJ
CUV4Y2x1ZGVkRnJvbUJ1aWxkPSJ0cnVlIgorCQkJCQkJPgorCQkJCQkJPFRvb2wKKwkJCQkJCQlO
YW1lPSJWQ0NMQ29tcGlsZXJUb29sIgorCQkJCQkJLz4KKwkJCQkJPC9GaWxlQ29uZmlndXJhdGlv
bj4KKwkJCQkJPEZpbGVDb25maWd1cmF0aW9uCisJCQkJCQlOYW1lPSJEZWJ1Z19BbGx8V2luMzIi
CisJCQkJCQlFeGNsdWRlZEZyb21CdWlsZD0idHJ1ZSIKKwkJCQkJCT4KKwkJCQkJCTxUb29sCisJ
CQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIKKwkJCQkJCS8+CisJCQkJCTwvRmlsZUNvbmZp
Z3VyYXRpb24+CisJCQkJCTxGaWxlQ29uZmlndXJhdGlvbgorCQkJCQkJTmFtZT0iUHJvZHVjdGlv
bnxXaW4zMiIKKwkJCQkJCUV4Y2x1ZGVkRnJvbUJ1aWxkPSJ0cnVlIgorCQkJCQkJPgorCQkJCQkJ
PFRvb2wKKwkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIgorCQkJCQkJLz4KKwkJCQkJPC9G
aWxlQ29uZmlndXJhdGlvbj4KKwkJCQk8L0ZpbGU+CisJCQkJPEZpbGUKKwkJCQkJUmVsYXRpdmVQ
YXRoPSIuLlxyZW5kZXJpbmdcc3ZnXFJlbmRlclNWR1NoYXBlLmgiCisJCQkJCT4KKwkJCQk8L0Zp
bGU+CisJCQkJPEZpbGUKIAkJCQkJUmVsYXRpdmVQYXRoPSIuLlxyZW5kZXJpbmdcc3ZnXFJlbmRl
clNWR1RleHQuY3BwIgogCQkJCQk+CiAJCQkJCTxGaWxlQ29uZmlndXJhdGlvbgpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRmxvYXRSZWN0LmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0Zsb2F0UmVjdC5jcHAKaW5kZXggYjg0YTg5Mi4u
ZWQxZGY2ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRmxv
YXRSZWN0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9GbG9hdFJl
Y3QuY3BwCkBAIC02OCw2ICs2OCwxMyBAQCBib29sIEZsb2F0UmVjdDo6Y29udGFpbnMoY29uc3Qg
RmxvYXRSZWN0JiBvdGhlcikgY29uc3QKICAgICAgICAgJiYgeSgpIDw9IG90aGVyLnkoKSAmJiBt
YXhZKCkgPj0gb3RoZXIubWF4WSgpOwogfQogCitib29sIEZsb2F0UmVjdDo6aXNJbnNpZGVSZWN0
KGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50KSBjb25zdAoreworICAgIGlmICghY29udGFpbnMocG9p
bnQpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgcmV0dXJuIHgoKSA8IHBvaW50LngoKSAm
JiBtYXhYKCkgPiBwb2ludC54KCkgJiYgeSgpIDwgcG9pbnQueSgpICYmIG1heFkoKSA+IHkoKTsK
K30KKwogdm9pZCBGbG9hdFJlY3Q6OmludGVyc2VjdChjb25zdCBGbG9hdFJlY3QmIG90aGVyKQog
ewogICAgIGZsb2F0IGwgPSBtYXgoeCgpLCBvdGhlci54KCkpOwpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRmxvYXRSZWN0LmggYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9GbG9hdFJlY3QuaAppbmRleCAyNGE2YjE5Li5lZWMyZmUwIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9GbG9hdFJlY3QuaAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9GbG9hdFJlY3QuaApAQCAtMTQ2LDYg
KzE0Niw3IEBAIHB1YmxpYzoKIAogICAgIGJvb2wgaW50ZXJzZWN0cyhjb25zdCBGbG9hdFJlY3Qm
KSBjb25zdDsKICAgICBib29sIGNvbnRhaW5zKGNvbnN0IEZsb2F0UmVjdCYpIGNvbnN0OworICAg
IGJvb2wgaXNJbnNpZGVSZWN0KGNvbnN0IEZsb2F0UG9pbnQmKSBjb25zdDsKIAogICAgIHZvaWQg
aW50ZXJzZWN0KGNvbnN0IEZsb2F0UmVjdCYpOwogICAgIHZvaWQgdW5pdGUoY29uc3QgRmxvYXRS
ZWN0Jik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyT2JqZWN0
LmggYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyT2JqZWN0LmgKaW5kZXggYmZhYTY5
NS4uY2VjYzRmOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck9i
amVjdC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJPYmplY3QuaApAQCAt
MzU3LDYgKzM1Nyw4IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIGJvb2wgaXNTVkdHcmFkaWVudFN0
b3AoKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQogICAgIHZpcnR1YWwgYm9vbCBpc1NWR0hpZGRl
bkNvbnRhaW5lcigpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CiAgICAgdmlydHVhbCBib29sIGlz
U1ZHUGF0aCgpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CisgICAgdmlydHVhbCBib29sIGlzU1ZH
UmVjdCgpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CisgICAgdmlydHVhbCBib29sIGlzU1ZHU2hh
cGUoKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQogICAgIHZpcnR1YWwgYm9vbCBpc1NWR1RleHQo
KSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQogICAgIHZpcnR1YWwgYm9vbCBpc1NWR1RleHRQYXRo
KCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KICAgICB2aXJ0dWFsIGJvb2wgaXNTVkdJbmxpbmUo
KSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlclRyZWVBc1RleHQuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlclRyZWVBc1RleHQuY3BwCmluZGV4IDY0ZTY1NGMuLmIxMmQ3NzYgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUcmVlQXNUZXh0LmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVHJlZUFzVGV4dC5jcHAKQEAgLTUyMCw4ICs1MjAsOCBA
QCBzdGF0aWMgdm9pZCB3cml0ZVRleHRSdW4oVGV4dFN0cmVhbSYgdHMsIGNvbnN0IFJlbmRlclRl
eHQmIG8sIGNvbnN0IElubGluZVRleHRCbwogdm9pZCB3cml0ZShUZXh0U3RyZWFtJiB0cywgY29u
c3QgUmVuZGVyT2JqZWN0JiBvLCBpbnQgaW5kZW50LCBSZW5kZXJBc1RleHRCZWhhdmlvciBiZWhh
dmlvcikKIHsKICNpZiBFTkFCTEUoU1ZHKQotICAgIGlmIChvLmlzU1ZHUGF0aCgpKSB7Ci0gICAg
ICAgIHdyaXRlKHRzLCAqdG9SZW5kZXJTVkdQYXRoKCZvKSwgaW5kZW50KTsKKyAgICBpZiAoby5p
c1NWR1NoYXBlKCkpIHsKKyAgICAgICAgd3JpdGUodHMsICp0b1JlbmRlclNWR1NoYXBlKCZvKSwg
aW5kZW50KTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICBpZiAoby5pc1NWR0dyYWRpZW50
U3RvcCgpKSB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRl
clNWR0FsbEluT25lLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZH
QWxsSW5PbmUuY3BwCmluZGV4IDllYTNiZTUuLjI5NjkwMDggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHQWxsSW5PbmUuY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHQWxsSW5PbmUuY3BwCkBAIC0zNSw2ICszNSw3
IEBACiAjaW5jbHVkZSAiUmVuZGVyU1ZHSW5saW5lVGV4dC5jcHAiCiAjaW5jbHVkZSAiUmVuZGVy
U1ZHTW9kZWxPYmplY3QuY3BwIgogI2luY2x1ZGUgIlJlbmRlclNWR1BhdGguY3BwIgorI2luY2x1
ZGUgIlJlbmRlclNWR1JlY3QuY3BwIgogI2luY2x1ZGUgIlJlbmRlclNWR1Jlc291cmNlLmNwcCIK
ICNpbmNsdWRlICJSZW5kZXJTVkdSZXNvdXJjZUNsaXBwZXIuY3BwIgogI2luY2x1ZGUgIlJlbmRl
clNWR1Jlc291cmNlQ29udGFpbmVyLmNwcCIKQEAgLTQ5LDYgKzUwLDcgQEAKICNpbmNsdWRlICJS
ZW5kZXJTVkdSZXNvdXJjZVNvbGlkQ29sb3IuY3BwIgogI2luY2x1ZGUgIlJlbmRlclNWR1Jvb3Qu
Y3BwIgogI2luY2x1ZGUgIlJlbmRlclNWR1NoYWRvd1RyZWVSb290Q29udGFpbmVyLmNwcCIKKyNp
bmNsdWRlICJSZW5kZXJTVkdTaGFwZS5jcHAiCiAjaW5jbHVkZSAiUmVuZGVyU1ZHVFNwYW4uY3Bw
IgogI2luY2x1ZGUgIlJlbmRlclNWR1RleHQuY3BwIgogI2luY2x1ZGUgIlJlbmRlclNWR1RleHRQ
YXRoLmNwcCIKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVy
U1ZHTW9kZWxPYmplY3QuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJT
VkdNb2RlbE9iamVjdC5jcHAKaW5kZXggMTRjMWRiOC4uYzIzNDBiMyAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdNb2RlbE9iamVjdC5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdNb2RlbE9iamVjdC5jcHAKQEAg
LTE1Myw3ICsxNTMsNyBAQCBzdGF0aWMgYm9vbCBpbnRlcnNlY3RzQWxsb3dpbmdFbXB0eShjb25z
dCBGbG9hdFJlY3QmIHIsIGNvbnN0IEZsb2F0UmVjdCYgb3RoZXIpCiAvLyBpbWFnZSwgbGluZSwg
cGF0aCwgcG9seWdvbiwgcG9seWxpbmUsIHJlY3QsIHRleHQgYW5kIHVzZS4KIHN0YXRpYyBib29s
IGlzR3JhcGhpY3NFbGVtZW50KFJlbmRlck9iamVjdCogcmVuZGVyZXIpCiB7Ci0gICAgcmV0dXJu
IHJlbmRlcmVyLT5pc1NWR1BhdGgoKSB8fCByZW5kZXJlci0+aXNTVkdUZXh0KCkgfHwgcmVuZGVy
ZXItPmlzU1ZHSW1hZ2UoKSB8fCByZW5kZXJlci0+aXNTVkdTaGFkb3dUcmVlUm9vdENvbnRhaW5l
cigpOworICAgIHJldHVybiByZW5kZXJlci0+aXNTVkdTaGFwZSgpIHx8IHJlbmRlcmVyLT5pc1NW
R1RleHQoKSB8fCByZW5kZXJlci0+aXNTVkdJbWFnZSgpIHx8IHJlbmRlcmVyLT5pc1NWR1NoYWRv
d1RyZWVSb290Q29udGFpbmVyKCk7CiB9CiAKIGJvb2wgUmVuZGVyU1ZHTW9kZWxPYmplY3Q6OmNo
ZWNrSW50ZXJzZWN0aW9uKFJlbmRlck9iamVjdCogcmVuZGVyZXIsIGNvbnN0IEZsb2F0UmVjdCYg
cmVjdCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZH
UGF0aC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1BhdGguY3Bw
CmluZGV4IGI3YWQ3YTIuLmZmMTU1MDUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9zdmcvUmVuZGVyU1ZHUGF0aC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L3N2Zy9SZW5kZXJTVkdQYXRoLmNwcApAQCAtNiw2ICs2LDggQEAKICAqIENvcHlyaWdodCAoQykg
MjAwOSBEaXJrIFNjaHVsemUgPGtyaXRAd2Via2l0Lm9yZz4KICAqIENvcHlyaWdodCAoQykgUmVz
ZWFyY2ggSW4gTW90aW9uIExpbWl0ZWQgMjAxMC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqIENv
cHlyaWdodCAoQykgMjAwOSBKZWZmIFNjaGlsbGVyIDxjb2RlZHJlYWRAZ21haWwuY29tPgorICog
Q29weXJpZ2h0IChDKSAyMDExIFJlbmF0YSBIb2RvdmFuIDxyZW5pQHdlYmtpdC5vcmc+CisgKiBD
b3B5cmlnaHQgKEMpIDIwMTEgVW5pdmVyc2l0eSBvZiBTemVnZWQKICAqCiAgKiBUaGlzIGxpYnJh
cnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgKiBt
b2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1Ymxp
YwpAQCAtMjgsNTAgKzMwLDEzIEBACiAjaWYgRU5BQkxFKFNWRykKICNpbmNsdWRlICJSZW5kZXJT
VkdQYXRoLmgiCiAKLSNpbmNsdWRlICJGbG9hdFBvaW50LmgiCi0jaW5jbHVkZSAiRmxvYXRRdWFk
LmgiCi0jaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCi0jaW5jbHVkZSAiSGl0VGVzdFJlcXVl
c3QuaCIKLSNpbmNsdWRlICJMYXlvdXRSZXBhaW50ZXIuaCIKLSNpbmNsdWRlICJQb2ludGVyRXZl
bnRzSGl0UnVsZXMuaCIKLSNpbmNsdWRlICJSZW5kZXJTVkdDb250YWluZXIuaCIKLSNpbmNsdWRl
ICJSZW5kZXJTVkdSZXNvdXJjZU1hcmtlci5oIgotI2luY2x1ZGUgIlJlbmRlclNWR1Jlc291cmNl
U29saWRDb2xvci5oIgotI2luY2x1ZGUgIlNWR1JlbmRlclN1cHBvcnQuaCIKLSNpbmNsdWRlICJT
VkdSZXNvdXJjZXMuaCIKKyNpbmNsdWRlICJTVkdQYXRoRWxlbWVudC5oIgogI2luY2x1ZGUgIlNW
R1N0eWxlZFRyYW5zZm9ybWFibGVFbGVtZW50LmgiCi0jaW5jbHVkZSAiU1ZHVHJhbnNmb3JtTGlz
dC5oIgotI2luY2x1ZGUgIlNWR1VSSVJlZmVyZW5jZS5oIgotI2luY2x1ZGUgIlN0cm9rZVN0eWxl
QXBwbGllci5oIgotI2luY2x1ZGUgPHd0Zi9NYXRoRXh0cmFzLmg+CiAKIG5hbWVzcGFjZSBXZWJD
b3JlIHsKIAotY2xhc3MgQm91bmRpbmdSZWN0U3Ryb2tlU3R5bGVBcHBsaWVyIDogcHVibGljIFN0
cm9rZVN0eWxlQXBwbGllciB7Ci1wdWJsaWM6Ci0gICAgQm91bmRpbmdSZWN0U3Ryb2tlU3R5bGVB
cHBsaWVyKGNvbnN0IFJlbmRlck9iamVjdCogb2JqZWN0LCBSZW5kZXJTdHlsZSogc3R5bGUpCi0g
ICAgICAgIDogbV9vYmplY3Qob2JqZWN0KQotICAgICAgICAsIG1fc3R5bGUoc3R5bGUpCi0gICAg
ewotICAgICAgICBBU1NFUlQoc3R5bGUpOwotICAgICAgICBBU1NFUlQob2JqZWN0KTsKLSAgICB9
Ci0KLSAgICB2b2lkIHN0cm9rZVN0eWxlKEdyYXBoaWNzQ29udGV4dCogZ2MpCi0gICAgewotICAg
ICAgICBTVkdSZW5kZXJTdXBwb3J0OjphcHBseVN0cm9rZVN0eWxlVG9Db250ZXh0KGdjLCBtX3N0
eWxlLCBtX29iamVjdCk7Ci0gICAgfQotCi1wcml2YXRlOgotICAgIGNvbnN0IFJlbmRlck9iamVj
dCogbV9vYmplY3Q7Ci0gICAgUmVuZGVyU3R5bGUqIG1fc3R5bGU7Ci19OwotCiBSZW5kZXJTVkdQ
YXRoOjpSZW5kZXJTVkdQYXRoKFNWR1N0eWxlZFRyYW5zZm9ybWFibGVFbGVtZW50KiBub2RlKQot
ICAgIDogUmVuZGVyU1ZHTW9kZWxPYmplY3Qobm9kZSkKLSAgICAsIG1fbmVlZHNCb3VuZGFyaWVz
VXBkYXRlKGZhbHNlKSAvLyBkZWZhdWx0IGlzIGZhbHNlLCB0aGUgY2FjaGVkIHJlY3RzIGFyZSBl
bXB0eSBmcm9tIHRoZSBiZWdpbm5pbmcKLSAgICAsIG1fbmVlZHNQYXRoVXBkYXRlKHRydWUpIC8v
IGRlZmF1bHQgaXMgdHJ1ZSwgc28gd2UgZ3JhYiBhIFBhdGggb2JqZWN0IG9uY2UgZnJvbSBTVkdT
dHlsZWRUcmFuc2Zvcm1hYmxlRWxlbWVudAotICAgICwgbV9uZWVkc1RyYW5zZm9ybVVwZGF0ZSh0
cnVlKSAvLyBkZWZhdWx0IGlzIHRydWUsIHNvIHdlIGdyYWIgYSBBZmZpbmVUcmFuc2Zvcm0gb2Jq
ZWN0IG9uY2UgZnJvbSBTVkdTdHlsZWRUcmFuc2Zvcm1hYmxlRWxlbWVudAorICAgIDogUmVuZGVy
U1ZHU2hhcGUobm9kZSkKIHsKIH0KIApAQCAtNzksMzE0ICs0NCwxNiBAQCBSZW5kZXJTVkdQYXRo
Ojp+UmVuZGVyU1ZHUGF0aCgpCiB7CiB9CiAKLWJvb2wgUmVuZGVyU1ZHUGF0aDo6ZmlsbENvbnRh
aW5zKGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50LCBib29sIHJlcXVpcmVzRmlsbCwgV2luZFJ1bGUg
ZmlsbFJ1bGUpCi17Ci0gICAgaWYgKCFtX2ZpbGxCb3VuZGluZ0JveC5jb250YWlucyhwb2ludCkp
Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIENvbG9yIGZhbGxiYWNrQ29sb3I7Ci0gICAg
aWYgKHJlcXVpcmVzRmlsbCAmJiAhUmVuZGVyU1ZHUmVzb3VyY2U6OmZpbGxQYWludGluZ1Jlc291
cmNlKHRoaXMsIHN0eWxlKCksIGZhbGxiYWNrQ29sb3IpKQotICAgICAgICByZXR1cm4gZmFsc2U7
Ci0KLSAgICByZXR1cm4gbV9wYXRoLmNvbnRhaW5zKHBvaW50LCBmaWxsUnVsZSk7Ci19Ci0KLWJv
b2wgUmVuZGVyU1ZHUGF0aDo6c3Ryb2tlQ29udGFpbnMoY29uc3QgRmxvYXRQb2ludCYgcG9pbnQs
IGJvb2wgcmVxdWlyZXNTdHJva2UpCi17Ci0gICAgaWYgKCFtX3N0cm9rZUFuZE1hcmtlckJvdW5k
aW5nQm94LmNvbnRhaW5zKHBvaW50KSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgQ29s
b3IgZmFsbGJhY2tDb2xvcjsKLSAgICBpZiAocmVxdWlyZXNTdHJva2UgJiYgIVJlbmRlclNWR1Jl
c291cmNlOjpzdHJva2VQYWludGluZ1Jlc291cmNlKHRoaXMsIHN0eWxlKCksIGZhbGxiYWNrQ29s
b3IpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBpZiAoc2hvdWxkU3Ryb2tlWmVyb0xl
bmd0aFN1YnBhdGgoKSkKLSAgICAgICAgcmV0dXJuIHplcm9MZW5ndGhTdWJwYXRoUmVjdCgpLmNv
bnRhaW5zKHBvaW50KTsKLQotICAgIEJvdW5kaW5nUmVjdFN0cm9rZVN0eWxlQXBwbGllciBzdHJv
a2VTdHlsZSh0aGlzLCBzdHlsZSgpKTsKLSAgICByZXR1cm4gbV9wYXRoLnN0cm9rZUNvbnRhaW5z
KCZzdHJva2VTdHlsZSwgcG9pbnQpOwotfQotCi12b2lkIFJlbmRlclNWR1BhdGg6OmxheW91dCgp
Ci17Ci0gICAgTGF5b3V0UmVwYWludGVyIHJlcGFpbnRlcigqdGhpcywgY2hlY2tGb3JSZXBhaW50
RHVyaW5nTGF5b3V0KCkgJiYgc2VsZk5lZWRzTGF5b3V0KCkpOwotICAgIFNWR1N0eWxlZFRyYW5z
Zm9ybWFibGVFbGVtZW50KiBlbGVtZW50ID0gc3RhdGljX2Nhc3Q8U1ZHU3R5bGVkVHJhbnNmb3Jt
YWJsZUVsZW1lbnQqPihub2RlKCkpOwotCi0gICAgYm9vbCB1cGRhdGVDYWNoZWRCb3VuZGFyaWVz
SW5QYXJlbnRzID0gZmFsc2U7Ci0KLSAgICBib29sIG5lZWRzUGF0aFVwZGF0ZSA9IG1fbmVlZHNQ
YXRoVXBkYXRlOwotICAgIGlmIChuZWVkc1BhdGhVcGRhdGUpIHsKLSAgICAgICAgbV9wYXRoLmNs
ZWFyKCk7Ci0gICAgICAgIGVsZW1lbnQtPnRvUGF0aERhdGEobV9wYXRoKTsKLSAgICAgICAgbV9u
ZWVkc1BhdGhVcGRhdGUgPSBmYWxzZTsKLSAgICAgICAgdXBkYXRlQ2FjaGVkQm91bmRhcmllc0lu
UGFyZW50cyA9IHRydWU7Ci0gICAgfQotCi0gICAgaWYgKG1fbmVlZHNUcmFuc2Zvcm1VcGRhdGUp
IHsKLSAgICAgICAgbV9sb2NhbFRyYW5zZm9ybSA9IGVsZW1lbnQtPmFuaW1hdGVkTG9jYWxUcmFu
c2Zvcm0oKTsKLSAgICAgICAgbV9uZWVkc1RyYW5zZm9ybVVwZGF0ZSA9IGZhbHNlOwotICAgICAg
ICB1cGRhdGVDYWNoZWRCb3VuZGFyaWVzSW5QYXJlbnRzID0gdHJ1ZTsKLSAgICB9Ci0KLSAgICBp
ZiAobV9uZWVkc0JvdW5kYXJpZXNVcGRhdGUpCi0gICAgICAgIHVwZGF0ZUNhY2hlZEJvdW5kYXJp
ZXNJblBhcmVudHMgPSB0cnVlOwotCi0gICAgLy8gSW52YWxpZGF0ZSBhbGwgcmVzb3VyY2VzIG9m
IHRoaXMgY2xpZW50IGlmIG91ciBsYXlvdXQgY2hhbmdlZC4KLSAgICBpZiAobV9ldmVySGFkTGF5
b3V0ICYmIHNlbGZOZWVkc0xheW91dCgpKSB7Ci0gICAgICAgIFNWR1Jlc291cmNlc0NhY2hlOjpj
bGllbnRMYXlvdXRDaGFuZ2VkKHRoaXMpOwotICAgICAgICBtX21hcmtlckxheW91dEluZm8uY2xl
YXIoKTsKLSAgICB9Ci0KLSAgICAvLyBBdCB0aGlzIHBvaW50IExheW91dFJlcGFpbnRlciBhbHJl
YWR5IGdyYWJiZWQgdGhlIG9sZCBib3VuZHMsCi0gICAgLy8gcmVjYWxjdWxhdGUgdGhlbSBub3cg
c28gcmVwYWludEFmdGVyTGF5b3V0KCkgdXNlcyB0aGUgbmV3IGJvdW5kcy4KLSAgICBpZiAobmVl
ZHNQYXRoVXBkYXRlIHx8IG1fbmVlZHNCb3VuZGFyaWVzVXBkYXRlKSB7Ci0gICAgICAgIHVwZGF0
ZUNhY2hlZEJvdW5kYXJpZXMoKTsKLSAgICAgICAgbV9uZWVkc0JvdW5kYXJpZXNVcGRhdGUgPSBm
YWxzZTsKLSAgICB9Ci0KLSAgICAvLyBJZiBvdXIgYm91bmRzIGNoYW5nZWQsIG5vdGlmeSB0aGUg
cGFyZW50cy4KLSAgICBpZiAodXBkYXRlQ2FjaGVkQm91bmRhcmllc0luUGFyZW50cykKLSAgICAg
ICAgUmVuZGVyU1ZHTW9kZWxPYmplY3Q6OnNldE5lZWRzQm91bmRhcmllc1VwZGF0ZSgpOwotCi0g
ICAgcmVwYWludGVyLnJlcGFpbnRBZnRlckxheW91dCgpOwotICAgIHNldE5lZWRzTGF5b3V0KGZh
bHNlKTsKLX0KLQotYm9vbCBSZW5kZXJTVkdQYXRoOjpzaG91bGRTdHJva2VaZXJvTGVuZ3RoU3Vi
cGF0aCgpIGNvbnN0Ci17Ci0gICAgLy8gU3BlYygxMS40KTogQW55IHplcm8gbGVuZ3RoIHN1YnBh
dGggc2hhbGwgbm90IGJlIHN0cm9rZWQgaWYgdGhlIOKAmHN0cm9rZS1saW5lY2Fw4oCZIHByb3Bl
cnR5IGhhcyBhIHZhbHVlIG9mIGJ1dHQKLSAgICAvLyBidXQgc2hhbGwgYmUgc3Ryb2tlZCBpZiB0
aGUg4oCYc3Ryb2tlLWxpbmVjYXDigJkgcHJvcGVydHkgaGFzIGEgdmFsdWUgb2Ygcm91bmQgb3Ig
c3F1YXJlCi0gICAgcmV0dXJuIHN0eWxlKCktPnN2Z1N0eWxlKCktPmhhc1N0cm9rZSgpICYmIHN0
eWxlKCktPnN2Z1N0eWxlKCktPmNhcFN0eWxlKCkgIT0gQnV0dENhcCAmJiAhbV9maWxsQm91bmRp
bmdCb3gud2lkdGgoKSAmJiAhbV9maWxsQm91bmRpbmdCb3guaGVpZ2h0KCk7Ci19Ci0KLUZsb2F0
UmVjdCBSZW5kZXJTVkdQYXRoOjp6ZXJvTGVuZ3RoU3VicGF0aFJlY3QoKSBjb25zdAotewotICAg
IFNWR0VsZW1lbnQqIHN2Z0VsZW1lbnQgPSBzdGF0aWNfY2FzdDxTVkdFbGVtZW50Kj4obm9kZSgp
KTsKLSAgICBmbG9hdCBzdHJva2VXaWR0aCA9IHN0eWxlKCktPnN2Z1N0eWxlKCktPnN0cm9rZVdp
ZHRoKCkudmFsdWUoc3ZnRWxlbWVudCk7Ci0gICAgcmV0dXJuIEZsb2F0UmVjdChtX2ZpbGxCb3Vu
ZGluZ0JveC54KCkgLSBzdHJva2VXaWR0aCAvIDIsIG1fZmlsbEJvdW5kaW5nQm94LnkoKSAtIHN0
cm9rZVdpZHRoIC8gMiwgc3Ryb2tlV2lkdGgsIHN0cm9rZVdpZHRoKTsKLX0KLQotdm9pZCBSZW5k
ZXJTVkdQYXRoOjpzZXR1cFNxdWFyZUNhcFBhdGgoUGF0aComIHVzZVBhdGgsIGludCYgYXBwbHlN
b2RlKQotewotICAgIC8vIFNwZWMoMTEuNCk6IEFueSB6ZXJvIGxlbmd0aCBzdWJwYXRoIHNoYWxs
IG5vdCBiZSBzdHJva2VkIGlmIHRoZSDigJhzdHJva2UtbGluZWNhcOKAmSBwcm9wZXJ0eSBoYXMg
YSB2YWx1ZSBvZiBidXR0Ci0gICAgLy8gYnV0IHNoYWxsIGJlIHN0cm9rZWQgaWYgdGhlIOKAmHN0
cm9rZS1saW5lY2Fw4oCZIHByb3BlcnR5IGhhcyBhIHZhbHVlIG9mIHJvdW5kIG9yIHNxdWFyZQot
ICAgIERFRklORV9TVEFUSUNfTE9DQUwoUGF0aCwgdGVtcFBhdGgsICgpKTsKLQotICAgIGFwcGx5
TW9kZSA9IEFwcGx5VG9GaWxsTW9kZTsKLSAgICB1c2VQYXRoID0gJnRlbXBQYXRoOwotICAgIHVz
ZVBhdGgtPmNsZWFyKCk7Ci0gICAgaWYgKHN0eWxlKCktPnN2Z1N0eWxlKCktPmNhcFN0eWxlKCkg
PT0gU3F1YXJlQ2FwKQotICAgICAgICB1c2VQYXRoLT5hZGRSZWN0KHplcm9MZW5ndGhTdWJwYXRo
UmVjdCgpKTsKLSAgICBlbHNlCi0gICAgICAgIHVzZVBhdGgtPmFkZEVsbGlwc2UoemVyb0xlbmd0
aFN1YnBhdGhSZWN0KCkpOwotfQotCi1ib29sIFJlbmRlclNWR1BhdGg6OnNldHVwTm9uU2NhbGlu
Z1N0cm9rZVBhdGgoUGF0aComIHVzZVBhdGgsIEdyYXBoaWNzQ29udGV4dFN0YXRlU2F2ZXImIHN0
YXRlU2F2ZXIpCit2b2lkIFJlbmRlclNWR1BhdGg6OmluZmxhdGVXaXRoTWFya2VyQm91bmRzKCkK
IHsKLSAgICBERUZJTkVfU1RBVElDX0xPQ0FMKFBhdGgsIHRlbXBQYXRoLCAoKSk7Ci0KLSAgICBT
VkdTdHlsZWRUcmFuc2Zvcm1hYmxlRWxlbWVudCogZWxlbWVudCA9IHN0YXRpY19jYXN0PFNWR1N0
eWxlZFRyYW5zZm9ybWFibGVFbGVtZW50Kj4obm9kZSgpKTsKLSAgICBBZmZpbmVUcmFuc2Zvcm0g
bm9uU2NhbGluZ1N0cm9rZVRyYW5zZm9ybSA9IGVsZW1lbnQtPmdldFNjcmVlbkNUTShTVkdMb2Nh
dGFibGU6OkRpc2FsbG93U3R5bGVVcGRhdGUpOwotICAgIGlmICghbm9uU2NhbGluZ1N0cm9rZVRy
YW5zZm9ybS5pc0ludmVydGlibGUoKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgdGVt
cFBhdGggPSBtX3BhdGg7Ci0gICAgdXNlUGF0aCA9ICZ0ZW1wUGF0aDsKLSAgICB0ZW1wUGF0aC50
cmFuc2Zvcm0obm9uU2NhbGluZ1N0cm9rZVRyYW5zZm9ybSk7Ci0KLSAgICBzdGF0ZVNhdmVyLnNh
dmUoKTsKLSAgICBzdGF0ZVNhdmVyLmNvbnRleHQoKS0+Y29uY2F0Q1RNKG5vblNjYWxpbmdTdHJv
a2VUcmFuc2Zvcm0uaW52ZXJzZSgpKTsKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotdm9pZCBSZW5k
ZXJTVkdQYXRoOjpmaWxsQW5kU3Ryb2tlUGF0aChHcmFwaGljc0NvbnRleHQqIGNvbnRleHQpCi17
Ci0gICAgUmVuZGVyU3R5bGUqIHN0eWxlID0gdGhpcy0+c3R5bGUoKTsKLQotICAgIENvbG9yIGZh
bGxiYWNrQ29sb3I7Ci0gICAgaWYgKFJlbmRlclNWR1Jlc291cmNlKiBmaWxsUGFpbnRpbmdSZXNv
dXJjZSA9IFJlbmRlclNWR1Jlc291cmNlOjpmaWxsUGFpbnRpbmdSZXNvdXJjZSh0aGlzLCBzdHls
ZSwgZmFsbGJhY2tDb2xvcikpIHsKLSAgICAgICAgaWYgKGZpbGxQYWludGluZ1Jlc291cmNlLT5h
cHBseVJlc291cmNlKHRoaXMsIHN0eWxlLCBjb250ZXh0LCBBcHBseVRvRmlsbE1vZGUpKQotICAg
ICAgICAgICAgZmlsbFBhaW50aW5nUmVzb3VyY2UtPnBvc3RBcHBseVJlc291cmNlKHRoaXMsIGNv
bnRleHQsIEFwcGx5VG9GaWxsTW9kZSwgJm1fcGF0aCk7Ci0gICAgICAgIGVsc2UgaWYgKGZhbGxi
YWNrQ29sb3IuaXNWYWxpZCgpKSB7Ci0gICAgICAgICAgICBSZW5kZXJTVkdSZXNvdXJjZVNvbGlk
Q29sb3IqIGZhbGxiYWNrUmVzb3VyY2UgPSBSZW5kZXJTVkdSZXNvdXJjZTo6c2hhcmVkU29saWRQ
YWludGluZ1Jlc291cmNlKCk7Ci0gICAgICAgICAgICBmYWxsYmFja1Jlc291cmNlLT5zZXRDb2xv
cihmYWxsYmFja0NvbG9yKTsKLSAgICAgICAgICAgIGlmIChmYWxsYmFja1Jlc291cmNlLT5hcHBs
eVJlc291cmNlKHRoaXMsIHN0eWxlLCBjb250ZXh0LCBBcHBseVRvRmlsbE1vZGUpKQotICAgICAg
ICAgICAgICAgIGZhbGxiYWNrUmVzb3VyY2UtPnBvc3RBcHBseVJlc291cmNlKHRoaXMsIGNvbnRl
eHQsIEFwcGx5VG9GaWxsTW9kZSwgJm1fcGF0aCk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBm
YWxsYmFja0NvbG9yID0gQ29sb3IoKTsKLSAgICBSZW5kZXJTVkdSZXNvdXJjZSogc3Ryb2tlUGFp
bnRpbmdSZXNvdXJjZSA9IFJlbmRlclNWR1Jlc291cmNlOjpzdHJva2VQYWludGluZ1Jlc291cmNl
KHRoaXMsIHN0eWxlLCBmYWxsYmFja0NvbG9yKTsKLSAgICBpZiAoIXN0cm9rZVBhaW50aW5nUmVz
b3VyY2UpCi0gICAgICAgIHJldHVybjsKLQotICAgIFBhdGgqIHVzZVBhdGggPSAmbV9wYXRoOwot
ICAgIGludCBhcHBseU1vZGUgPSBBcHBseVRvU3Ryb2tlTW9kZTsKLQotICAgIGJvb2wgbm9uU2Nh
bGluZ1N0cm9rZSA9IHN0eWxlLT5zdmdTdHlsZSgpLT52ZWN0b3JFZmZlY3QoKSA9PSBWRV9OT05f
U0NBTElOR19TVFJPS0U7Ci0KLSAgICBHcmFwaGljc0NvbnRleHRTdGF0ZVNhdmVyIHN0YXRlU2F2
ZXIoKmNvbnRleHQsIGZhbHNlKTsKLQotICAgIC8vIFNwZWMoMTEuNCk6IEFueSB6ZXJvIGxlbmd0
aCBzdWJwYXRoIHNoYWxsIG5vdCBiZSBzdHJva2VkIGlmIHRoZSDigJhzdHJva2UtbGluZWNhcOKA
mSBwcm9wZXJ0eSBoYXMgYSB2YWx1ZSBvZiBidXR0Ci0gICAgLy8gYnV0IHNoYWxsIGJlIHN0cm9r
ZWQgaWYgdGhlIOKAmHN0cm9rZS1saW5lY2Fw4oCZIHByb3BlcnR5IGhhcyBhIHZhbHVlIG9mIHJv
dW5kIG9yIHNxdWFyZQotICAgIC8vIEZJWE1FOiB0aGlzIGRvZXMgbm90IHdvcmsgZm9yIHplcm8t
bGVuZ3RoIHN1YnBhdGhzLCBvbmx5IHdoZW4gdG90YWwgcGF0aCBpcyB6ZXJvLWxlbmd0aAotICAg
IGlmIChzaG91bGRTdHJva2VaZXJvTGVuZ3RoU3VicGF0aCgpKQotICAgICAgICBzZXR1cFNxdWFy
ZUNhcFBhdGgodXNlUGF0aCwgYXBwbHlNb2RlKTsKLSAgICBlbHNlIGlmIChub25TY2FsaW5nU3Ry
b2tlKSB7Ci0gICAgICAgaWYgKCFzZXR1cE5vblNjYWxpbmdTdHJva2VQYXRoKHVzZVBhdGgsIHN0
YXRlU2F2ZXIpKQotICAgICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgaWYgKHN0cm9rZVBh
aW50aW5nUmVzb3VyY2UtPmFwcGx5UmVzb3VyY2UodGhpcywgc3R5bGUsIGNvbnRleHQsIGFwcGx5
TW9kZSkpCi0gICAgICAgIHN0cm9rZVBhaW50aW5nUmVzb3VyY2UtPnBvc3RBcHBseVJlc291cmNl
KHRoaXMsIGNvbnRleHQsIGFwcGx5TW9kZSwgdXNlUGF0aCk7Ci0gICAgZWxzZSBpZiAoZmFsbGJh
Y2tDb2xvci5pc1ZhbGlkKCkpIHsKLSAgICAgICAgUmVuZGVyU1ZHUmVzb3VyY2VTb2xpZENvbG9y
KiBmYWxsYmFja1Jlc291cmNlID0gUmVuZGVyU1ZHUmVzb3VyY2U6OnNoYXJlZFNvbGlkUGFpbnRp
bmdSZXNvdXJjZSgpOwotICAgICAgICBmYWxsYmFja1Jlc291cmNlLT5zZXRDb2xvcihmYWxsYmFj
a0NvbG9yKTsKLSAgICAgICAgaWYgKGZhbGxiYWNrUmVzb3VyY2UtPmFwcGx5UmVzb3VyY2UodGhp
cywgc3R5bGUsIGNvbnRleHQsIGFwcGx5TW9kZSkpCi0gICAgICAgICAgICBmYWxsYmFja1Jlc291
cmNlLT5wb3N0QXBwbHlSZXNvdXJjZSh0aGlzLCBjb250ZXh0LCBhcHBseU1vZGUsIHVzZVBhdGgp
OwotICAgIH0KLX0KLQotdm9pZCBSZW5kZXJTVkdQYXRoOjpwYWludChQYWludEluZm8mIHBhaW50
SW5mbywgY29uc3QgTGF5b3V0UG9pbnQmKQotewotICAgIGlmIChwYWludEluZm8uY29udGV4dC0+
cGFpbnRpbmdEaXNhYmxlZCgpIHx8IHN0eWxlKCktPnZpc2liaWxpdHkoKSA9PSBISURERU4gfHwg
bV9wYXRoLmlzRW1wdHkoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgRmxvYXRSZWN0IGJvdW5k
aW5nQm94ID0gcmVwYWludFJlY3RJbkxvY2FsQ29vcmRpbmF0ZXMoKTsKLSAgICBpZiAoIVNWR1Jl
bmRlclN1cHBvcnQ6OnBhaW50SW5mb0ludGVyc2VjdHNSZXBhaW50UmVjdChib3VuZGluZ0JveCwg
bV9sb2NhbFRyYW5zZm9ybSwgcGFpbnRJbmZvKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgUGFp
bnRJbmZvIGNoaWxkUGFpbnRJbmZvKHBhaW50SW5mbyk7Ci0gICAgYm9vbCBkcmF3c091dGxpbmUg
PSBzdHlsZSgpLT5vdXRsaW5lV2lkdGgoKSAmJiAoY2hpbGRQYWludEluZm8ucGhhc2UgPT0gUGFp
bnRQaGFzZU91dGxpbmUgfHwgY2hpbGRQYWludEluZm8ucGhhc2UgPT0gUGFpbnRQaGFzZVNlbGZP
dXRsaW5lKTsKLSAgICBpZiAoZHJhd3NPdXRsaW5lIHx8IGNoaWxkUGFpbnRJbmZvLnBoYXNlID09
IFBhaW50UGhhc2VGb3JlZ3JvdW5kKSB7Ci0gICAgICAgIEdyYXBoaWNzQ29udGV4dFN0YXRlU2F2
ZXIgc3RhdGVTYXZlcigqY2hpbGRQYWludEluZm8uY29udGV4dCk7Ci0gICAgICAgIGNoaWxkUGFp
bnRJbmZvLmFwcGx5VHJhbnNmb3JtKG1fbG9jYWxUcmFuc2Zvcm0pOwotCi0gICAgICAgIGlmIChj
aGlsZFBhaW50SW5mby5waGFzZSA9PSBQYWludFBoYXNlRm9yZWdyb3VuZCkgewotICAgICAgICAg
ICAgUGFpbnRJbmZvIHNhdmVkSW5mbyhjaGlsZFBhaW50SW5mbyk7Ci0KLSAgICAgICAgICAgIGlm
IChTVkdSZW5kZXJTdXBwb3J0OjpwcmVwYXJlVG9SZW5kZXJTVkdDb250ZW50KHRoaXMsIGNoaWxk
UGFpbnRJbmZvKSkgewotICAgICAgICAgICAgICAgIGNvbnN0IFNWR1JlbmRlclN0eWxlKiBzdmdT
dHlsZSA9IHN0eWxlKCktPnN2Z1N0eWxlKCk7Ci0gICAgICAgICAgICAgICAgaWYgKHN2Z1N0eWxl
LT5zaGFwZVJlbmRlcmluZygpID09IFNSX0NSSVNQRURHRVMpCi0gICAgICAgICAgICAgICAgICAg
IGNoaWxkUGFpbnRJbmZvLmNvbnRleHQtPnNldFNob3VsZEFudGlhbGlhcyhmYWxzZSk7Ci0KLSAg
ICAgICAgICAgICAgICBmaWxsQW5kU3Ryb2tlUGF0aChjaGlsZFBhaW50SW5mby5jb250ZXh0KTsK
LQotICAgICAgICAgICAgICAgIGlmIChzdmdTdHlsZS0+aGFzTWFya2VycygpKQotICAgICAgICAg
ICAgICAgICAgICBtX21hcmtlckxheW91dEluZm8uZHJhd01hcmtlcnMoY2hpbGRQYWludEluZm8p
OwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBTVkdSZW5kZXJTdXBwb3J0OjpmaW5pc2hS
ZW5kZXJTVkdDb250ZW50KHRoaXMsIGNoaWxkUGFpbnRJbmZvLCBzYXZlZEluZm8uY29udGV4dCk7
Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAoZHJhd3NPdXRsaW5lKQotICAgICAgICAgICAgcGFp
bnRPdXRsaW5lKGNoaWxkUGFpbnRJbmZvLmNvbnRleHQsIEludFJlY3QoYm91bmRpbmdCb3gpKTsK
LSAgICB9Ci19Ci0KLS8vIFRoaXMgbWV0aG9kIGlzIGNhbGxlZCBmcm9tIGluc2lkZSBwYWludE91
dGxpbmUoKSBzaW5jZSB3ZSBjYWxsIHBhaW50T3V0bGluZSgpCi0vLyB3aGlsZSB0cmFuc2Zvcm1l
ZCB0byBvdXIgY29vcmQgc3lzdGVtLCByZXR1cm4gbG9jYWwgY29vcmRzCi12b2lkIFJlbmRlclNW
R1BhdGg6OmFkZEZvY3VzUmluZ1JlY3RzKFZlY3RvcjxMYXlvdXRSZWN0PiYgcmVjdHMsIGNvbnN0
IExheW91dFBvaW50JikgCi17Ci0gICAgTGF5b3V0UmVjdCByZWN0ID0gZW5jbG9zaW5nTGF5b3V0
UmVjdChyZXBhaW50UmVjdEluTG9jYWxDb29yZGluYXRlcygpKTsKLSAgICBpZiAoIXJlY3QuaXNF
bXB0eSgpKQotICAgICAgICByZWN0cy5hcHBlbmQocmVjdCk7Ci19Ci0KLWJvb2wgUmVuZGVyU1ZH
UGF0aDo6bm9kZUF0RmxvYXRQb2ludChjb25zdCBIaXRUZXN0UmVxdWVzdCYgcmVxdWVzdCwgSGl0
VGVzdFJlc3VsdCYgcmVzdWx0LCBjb25zdCBGbG9hdFBvaW50JiBwb2ludEluUGFyZW50LCBIaXRU
ZXN0QWN0aW9uIGhpdFRlc3RBY3Rpb24pCi17Ci0gICAgLy8gV2Ugb25seSBkcmF3IGluIHRoZSBm
b3Jncm91bmQgcGhhc2UsIHNvIHdlIG9ubHkgaGl0LXRlc3QgdGhlbi4KLSAgICBpZiAoaGl0VGVz
dEFjdGlvbiAhPSBIaXRUZXN0Rm9yZWdyb3VuZCkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0g
ICAgRmxvYXRQb2ludCBsb2NhbFBvaW50ID0gbV9sb2NhbFRyYW5zZm9ybS5pbnZlcnNlKCkubWFw
UG9pbnQocG9pbnRJblBhcmVudCk7Ci0KLSAgICBpZiAoIVNWR1JlbmRlclN1cHBvcnQ6OnBvaW50
SW5DbGlwcGluZ0FyZWEodGhpcywgbG9jYWxQb2ludCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsK
LQotICAgIFBvaW50ZXJFdmVudHNIaXRSdWxlcyBoaXRSdWxlcyhQb2ludGVyRXZlbnRzSGl0UnVs
ZXM6OlNWR19QQVRIX0hJVFRFU1RJTkcsIHJlcXVlc3QsIHN0eWxlKCktPnBvaW50ZXJFdmVudHMo
KSk7Ci0gICAgYm9vbCBpc1Zpc2libGUgPSAoc3R5bGUoKS0+dmlzaWJpbGl0eSgpID09IFZJU0lC
TEUpOwotICAgIGlmIChpc1Zpc2libGUgfHwgIWhpdFJ1bGVzLnJlcXVpcmVWaXNpYmxlKSB7Ci0g
ICAgICAgIGNvbnN0IFNWR1JlbmRlclN0eWxlKiBzdmdTdHlsZSA9IHN0eWxlKCktPnN2Z1N0eWxl
KCk7Ci0gICAgICAgIFdpbmRSdWxlIGZpbGxSdWxlID0gc3ZnU3R5bGUtPmZpbGxSdWxlKCk7Ci0g
ICAgICAgIGlmIChyZXF1ZXN0LnN2Z0NsaXBDb250ZW50KCkpCi0gICAgICAgICAgICBmaWxsUnVs
ZSA9IHN2Z1N0eWxlLT5jbGlwUnVsZSgpOwotICAgICAgICBpZiAoKGhpdFJ1bGVzLmNhbkhpdFN0
cm9rZSAmJiAoc3ZnU3R5bGUtPmhhc1N0cm9rZSgpIHx8ICFoaXRSdWxlcy5yZXF1aXJlU3Ryb2tl
KSAmJiBzdHJva2VDb250YWlucyhsb2NhbFBvaW50LCBoaXRSdWxlcy5yZXF1aXJlU3Ryb2tlKSkK
LSAgICAgICAgICAgIHx8IChoaXRSdWxlcy5jYW5IaXRGaWxsICYmIChzdmdTdHlsZS0+aGFzRmls
bCgpIHx8ICFoaXRSdWxlcy5yZXF1aXJlRmlsbCkgJiYgZmlsbENvbnRhaW5zKGxvY2FsUG9pbnQs
IGhpdFJ1bGVzLnJlcXVpcmVGaWxsLCBmaWxsUnVsZSkpKSB7Ci0gICAgICAgICAgICB1cGRhdGVI
aXRUZXN0UmVzdWx0KHJlc3VsdCwgcm91bmRlZExheW91dFBvaW50KGxvY2FsUG9pbnQpKTsKLSAg
ICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICB9Ci0gICAgfQotICAgIHJldHVybiBmYWxz
ZTsKLX0KLQotRmxvYXRSZWN0IFJlbmRlclNWR1BhdGg6OmNhbGN1bGF0ZU1hcmtlckJvdW5kc0lm
TmVlZGVkKCkKLXsKLSAgICBTVkdFbGVtZW50KiBzdmdFbGVtZW50ID0gc3RhdGljX2Nhc3Q8U1ZH
RWxlbWVudCo+KG5vZGUoKSk7Ci0gICAgQVNTRVJUKHN2Z0VsZW1lbnQgJiYgc3ZnRWxlbWVudC0+
ZG9jdW1lbnQoKSk7Ci0gICAgaWYgKCFzdmdFbGVtZW50LT5pc1N0eWxlZCgpKQotICAgICAgICBy
ZXR1cm4gRmxvYXRSZWN0KCk7Ci0KLSAgICBTVkdTdHlsZWRFbGVtZW50KiBzdHlsZWRFbGVtZW50
ID0gc3RhdGljX2Nhc3Q8U1ZHU3R5bGVkRWxlbWVudCo+KHN2Z0VsZW1lbnQpOwotICAgIGlmICgh
c3R5bGVkRWxlbWVudC0+c3VwcG9ydHNNYXJrZXJzKCkpCi0gICAgICAgIHJldHVybiBGbG9hdFJl
Y3QoKTsKLQotICAgIGNvbnN0IFNWR1JlbmRlclN0eWxlKiBzdmdTdHlsZSA9IHN0eWxlKCktPnN2
Z1N0eWxlKCk7Ci0gICAgQVNTRVJUKHN2Z1N0eWxlLT5oYXNNYXJrZXJzKCkpOwotCi0gICAgU1ZH
UmVzb3VyY2VzKiByZXNvdXJjZXMgPSBTVkdSZXNvdXJjZXNDYWNoZTo6Y2FjaGVkUmVzb3VyY2Vz
Rm9yUmVuZGVyT2JqZWN0KHRoaXMpOwotICAgIGlmICghcmVzb3VyY2VzKQotICAgICAgICByZXR1
cm4gRmxvYXRSZWN0KCk7Ci0KLSAgICBSZW5kZXJTVkdSZXNvdXJjZU1hcmtlciogbWFya2VyU3Rh
cnQgPSByZXNvdXJjZXMtPm1hcmtlclN0YXJ0KCk7Ci0gICAgUmVuZGVyU1ZHUmVzb3VyY2VNYXJr
ZXIqIG1hcmtlck1pZCA9IHJlc291cmNlcy0+bWFya2VyTWlkKCk7Ci0gICAgUmVuZGVyU1ZHUmVz
b3VyY2VNYXJrZXIqIG1hcmtlckVuZCA9IHJlc291cmNlcy0+bWFya2VyRW5kKCk7Ci0gICAgaWYg
KCFtYXJrZXJTdGFydCAmJiAhbWFya2VyTWlkICYmICFtYXJrZXJFbmQpCi0gICAgICAgIHJldHVy
biBGbG9hdFJlY3QoKTsKLQotICAgIHJldHVybiBtX21hcmtlckxheW91dEluZm8uY2FsY3VsYXRl
Qm91bmRhcmllcyhtYXJrZXJTdGFydCwgbWFya2VyTWlkLCBtYXJrZXJFbmQsIHN2Z1N0eWxlLT5z
dHJva2VXaWR0aCgpLnZhbHVlKHN2Z0VsZW1lbnQpLCBtX3BhdGgpOwotfQotCi12b2lkIFJlbmRl
clNWR1BhdGg6OnVwZGF0ZUNhY2hlZEJvdW5kYXJpZXMoKQotewotICAgIGlmIChtX3BhdGguaXNF
bXB0eSgpKSB7Ci0gICAgICAgIG1fZmlsbEJvdW5kaW5nQm94ID0gRmxvYXRSZWN0KCk7Ci0gICAg
ICAgIG1fc3Ryb2tlQW5kTWFya2VyQm91bmRpbmdCb3ggPSBGbG9hdFJlY3QoKTsKLSAgICAgICAg
bV9yZXBhaW50Qm91bmRpbmdCb3ggPSBGbG9hdFJlY3QoKTsKLSAgICAgICAgcmV0dXJuOwotICAg
IH0KLQotICAgIC8vIENhY2hlIF91bmNsaXBwZWRfIGZpbGwgYm91bmRpbmcgYm94LCB1c2VkIGZv
ciBjYWxjdWxhdGlvbnMgaW4gcmVzb3VyY2VzCi0gICAgbV9maWxsQm91bmRpbmdCb3ggPSBtX3Bh
dGguYm91bmRpbmdSZWN0KCk7Ci0KLSAgICAvLyBTcGVjKDExLjQpOiBBbnkgemVybyBsZW5ndGgg
c3VicGF0aCBzaGFsbCBub3QgYmUgc3Ryb2tlZCBpZiB0aGUg4oCYc3Ryb2tlLWxpbmVjYXDigJkg
cHJvcGVydHkgaGFzIGEgdmFsdWUgb2YgYnV0dAotICAgIC8vIGJ1dCBzaGFsbCBiZSBzdHJva2Vk
IGlmIHRoZSDigJhzdHJva2UtbGluZWNhcOKAmSBwcm9wZXJ0eSBoYXMgYSB2YWx1ZSBvZiByb3Vu
ZCBvciBzcXVhcmUKLSAgICBpZiAoc2hvdWxkU3Ryb2tlWmVyb0xlbmd0aFN1YnBhdGgoKSkgewot
ICAgICAgICBtX3N0cm9rZUFuZE1hcmtlckJvdW5kaW5nQm94ID0gemVyb0xlbmd0aFN1YnBhdGhS
ZWN0KCk7Ci0gICAgICAgIC8vIENhY2hlIHNtYWxsZXN0IHBvc3NpYmxlIHJlcGFpbnQgcmVjdGFu
Z2xlCi0gICAgICAgIG1fcmVwYWludEJvdW5kaW5nQm94ID0gbV9zdHJva2VBbmRNYXJrZXJCb3Vu
ZGluZ0JveDsKLSAgICAgICAgU1ZHUmVuZGVyU3VwcG9ydDo6aW50ZXJzZWN0UmVwYWludFJlY3RX
aXRoUmVzb3VyY2VzKHRoaXMsIG1fcmVwYWludEJvdW5kaW5nQm94KTsKLSAgICAgICAgcmV0dXJu
OwotICAgIH0KLQotICAgIC8vIENhY2hlIF91bmNsaXBwZWRfIHN0cm9rZSBib3VuZGluZyBib3gs
IHVzZWQgZm9yIGNhbGN1bGF0aW9ucyBpbiByZXNvdXJjZXMgKGluY2x1ZGVzIG1hcmtlciBib3Vu
ZGFyaWVzKQotICAgIG1fc3Ryb2tlQW5kTWFya2VyQm91bmRpbmdCb3ggPSBtX2ZpbGxCb3VuZGlu
Z0JveDsKLQotICAgIGNvbnN0IFNWR1JlbmRlclN0eWxlKiBzdmdTdHlsZSA9IHN0eWxlKCktPnN2
Z1N0eWxlKCk7Ci0gICAgaWYgKHN2Z1N0eWxlLT5oYXNTdHJva2UoKSkgewotICAgICAgICBCb3Vu
ZGluZ1JlY3RTdHJva2VTdHlsZUFwcGxpZXIgc3Ryb2tlU3R5bGUodGhpcywgc3R5bGUoKSk7Ci0g
ICAgICAgIG1fc3Ryb2tlQW5kTWFya2VyQm91bmRpbmdCb3gudW5pdGUobV9wYXRoLnN0cm9rZUJv
dW5kaW5nUmVjdCgmc3Ryb2tlU3R5bGUpKTsKLSAgICB9Ci0KLSAgICBpZiAoc3ZnU3R5bGUtPmhh
c01hcmtlcnMoKSkgeworICAgIGlmIChzdHlsZSgpLT5zdmdTdHlsZSgpLT5oYXNNYXJrZXJzKCkp
IHsKICAgICAgICAgRmxvYXRSZWN0IG1hcmtlckJvdW5kcyA9IGNhbGN1bGF0ZU1hcmtlckJvdW5k
c0lmTmVlZGVkKCk7Ci0gICAgICAgIGlmICghbWFya2VyQm91bmRzLmlzRW1wdHkoKSkKLSAgICAg
ICAgICAgIG1fc3Ryb2tlQW5kTWFya2VyQm91bmRpbmdCb3gudW5pdGUobWFya2VyQm91bmRzKTsK
KyAgICAgICAgaWYgKCFtYXJrZXJCb3VuZHMuaXNFbXB0eSgpKSB7CisgICAgICAgICAgICBGbG9h
dFJlY3Qgc3Ryb2tlUmVjdChzdHJva2VCb3VuZGluZ0JveCgpKTsKKyAgICAgICAgICAgIHN0cm9r
ZVJlY3QudW5pdGUobWFya2VyQm91bmRzKTsKKyAgICAgICAgICAgIHNldFN0cm9rZUFuZE1hcmtl
ckJvdW5kaW5nQm94KHN0cm9rZVJlY3QpOworICAgICAgICB9CiAgICAgfQotCi0gICAgLy8gQ2Fj
aGUgc21hbGxlc3QgcG9zc2libGUgcmVwYWludCByZWN0YW5nbGUKLSAgICBtX3JlcGFpbnRCb3Vu
ZGluZ0JveCA9IG1fc3Ryb2tlQW5kTWFya2VyQm91bmRpbmdCb3g7Ci0gICAgU1ZHUmVuZGVyU3Vw
cG9ydDo6aW50ZXJzZWN0UmVwYWludFJlY3RXaXRoUmVzb3VyY2VzKHRoaXMsIG1fcmVwYWludEJv
dW5kaW5nQm94KTsKIH0KIAogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L3N2Zy9SZW5kZXJTVkdQYXRoLmggYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRl
clNWR1BhdGguaAppbmRleCA5OGU2MDhkLi42MGZlZTk4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1BhdGguaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1BhdGguaApAQCAtNCw2ICs0LDggQEAKICAqIENvcHlyaWdo
dCAoQykgMjAwNSBFcmljIFNlaWRlbCA8ZXJpY0B3ZWJraXQub3JnPgogICogQ29weXJpZ2h0IChD
KSAyMDA2IEFwcGxlIENvbXB1dGVyLCBJbmMKICAqIENvcHlyaWdodCAoQykgMjAwOSBHb29nbGUs
IEluYy4KKyAqIENvcHlyaWdodCAoQykgMjAxMSBSZW5hdGEgSG9kb3ZhbiA8cmVuaUB3ZWJraXQu
b3JnPgorICogQ29weXJpZ2h0IChDKSAyMDExIFVuaXZlcnNpdHkgb2YgU3plZ2VkCiAgKgogICog
VGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFu
ZC9vcgogICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2Vu
ZXJhbCBQdWJsaWMKQEAgLTI1LDg2ICsyNywyMiBAQAogI2RlZmluZSBSZW5kZXJTVkdQYXRoX2gK
IAogI2lmIEVOQUJMRShTVkcpCi0jaW5jbHVkZSAiQWZmaW5lVHJhbnNmb3JtLmgiCi0jaW5jbHVk
ZSAiRmxvYXRSZWN0LmgiCi0jaW5jbHVkZSAiUmVuZGVyU1ZHTW9kZWxPYmplY3QuaCIKLSNpbmNs
dWRlICJTVkdNYXJrZXJMYXlvdXRJbmZvLmgiCisjaW5jbHVkZSAiUmVuZGVyU1ZHU2hhcGUuaCIK
IAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1jbGFzcyBGbG9hdFBvaW50OwotY2xhc3MgR3JhcGhp
Y3NDb250ZXh0U3RhdGVTYXZlcjsKLWNsYXNzIFJlbmRlclNWR0NvbnRhaW5lcjsKLWNsYXNzIFNW
R1N0eWxlZFRyYW5zZm9ybWFibGVFbGVtZW50OwotCi1jbGFzcyBSZW5kZXJTVkdQYXRoIDogcHVi
bGljIFJlbmRlclNWR01vZGVsT2JqZWN0IHsKK2NsYXNzIFJlbmRlclNWR1BhdGggOiBwdWJsaWMg
UmVuZGVyU1ZHU2hhcGUgewogcHVibGljOgotICAgIGV4cGxpY2l0IFJlbmRlclNWR1BhdGgoU1ZH
U3R5bGVkVHJhbnNmb3JtYWJsZUVsZW1lbnQqKTsKKyAgICBSZW5kZXJTVkdQYXRoKFNWR1N0eWxl
ZFRyYW5zZm9ybWFibGVFbGVtZW50Kik7CiAgICAgdmlydHVhbCB+UmVuZGVyU1ZHUGF0aCgpOwog
Ci0gICAgY29uc3QgUGF0aCYgcGF0aCgpIGNvbnN0IHsgcmV0dXJuIG1fcGF0aDsgfQotICAgIHZv
aWQgc2V0TmVlZHNQYXRoVXBkYXRlKCkgeyBtX25lZWRzUGF0aFVwZGF0ZSA9IHRydWU7IH0KLSAg
ICB2aXJ0dWFsIHZvaWQgc2V0TmVlZHNCb3VuZGFyaWVzVXBkYXRlKCkgeyBtX25lZWRzQm91bmRh
cmllc1VwZGF0ZSA9IHRydWU7IH0KLSAgICB2aXJ0dWFsIHZvaWQgc2V0TmVlZHNUcmFuc2Zvcm1V
cGRhdGUoKSB7IG1fbmVlZHNUcmFuc2Zvcm1VcGRhdGUgPSB0cnVlOyB9Ci0KIHByaXZhdGU6Ci0g
ICAgLy8gSGl0LWRldGVjdGlvbiBzZXBlcmF0ZWQgZm9yIHRoZSBmaWxsIGFuZCB0aGUgc3Ryb2tl
Ci0gICAgYm9vbCBmaWxsQ29udGFpbnMoY29uc3QgRmxvYXRQb2ludCYsIGJvb2wgcmVxdWlyZXNG
aWxsID0gdHJ1ZSwgV2luZFJ1bGUgZmlsbFJ1bGUgPSBSVUxFX05PTlpFUk8pOwotICAgIGJvb2wg
c3Ryb2tlQ29udGFpbnMoY29uc3QgRmxvYXRQb2ludCYsIGJvb2wgcmVxdWlyZXNTdHJva2UgPSB0
cnVlKTsKLQotICAgIHZpcnR1YWwgRmxvYXRSZWN0IG9iamVjdEJvdW5kaW5nQm94KCkgY29uc3Qg
eyByZXR1cm4gbV9maWxsQm91bmRpbmdCb3g7IH0KLSAgICB2aXJ0dWFsIEZsb2F0UmVjdCBzdHJv
a2VCb3VuZGluZ0JveCgpIGNvbnN0IHsgcmV0dXJuIG1fc3Ryb2tlQW5kTWFya2VyQm91bmRpbmdC
b3g7IH0KLSAgICB2aXJ0dWFsIEZsb2F0UmVjdCByZXBhaW50UmVjdEluTG9jYWxDb29yZGluYXRl
cygpIGNvbnN0IHsgcmV0dXJuIG1fcmVwYWludEJvdW5kaW5nQm94OyB9Ci0gICAgdmlydHVhbCBj
b25zdCBBZmZpbmVUcmFuc2Zvcm0mIGxvY2FsVG9QYXJlbnRUcmFuc2Zvcm0oKSBjb25zdCB7IHJl
dHVybiBtX2xvY2FsVHJhbnNmb3JtOyB9Ci0KICAgICB2aXJ0dWFsIGJvb2wgaXNTVkdQYXRoKCkg
Y29uc3QgeyByZXR1cm4gdHJ1ZTsgfQogICAgIHZpcnR1YWwgY29uc3QgY2hhciogcmVuZGVyTmFt
ZSgpIGNvbnN0IHsgcmV0dXJuICJSZW5kZXJTVkdQYXRoIjsgfQogCi0gICAgdmlydHVhbCB2b2lk
IGxheW91dCgpOwotICAgIHZpcnR1YWwgdm9pZCBwYWludChQYWludEluZm8mLCBjb25zdCBMYXlv
dXRQb2ludCYpOwotICAgIHZpcnR1YWwgdm9pZCBhZGRGb2N1c1JpbmdSZWN0cyhWZWN0b3I8TGF5
b3V0UmVjdD4mLCBjb25zdCBMYXlvdXRQb2ludCYpOwotCi0gICAgdmlydHVhbCBib29sIG5vZGVB
dEZsb2F0UG9pbnQoY29uc3QgSGl0VGVzdFJlcXVlc3QmLCBIaXRUZXN0UmVzdWx0JiwgY29uc3Qg
RmxvYXRQb2ludCYgcG9pbnRJblBhcmVudCwgSGl0VGVzdEFjdGlvbik7Ci0KLSAgICBGbG9hdFJl
Y3QgY2FsY3VsYXRlTWFya2VyQm91bmRzSWZOZWVkZWQoKTsKLSAgICB2b2lkIHVwZGF0ZUNhY2hl
ZEJvdW5kYXJpZXMoKTsKLQotICAgIHZvaWQgc2V0dXBTcXVhcmVDYXBQYXRoKFBhdGgqJiB1c2VQ
YXRoLCBpbnQmIGFwcGx5TW9kZSk7Ci0gICAgYm9vbCBzZXR1cE5vblNjYWxpbmdTdHJva2VQYXRo
KFBhdGgqJiB1c2VQYXRoLCBHcmFwaGljc0NvbnRleHRTdGF0ZVNhdmVyJik7Ci0gICAgYm9vbCBz
aG91bGRTdHJva2VaZXJvTGVuZ3RoU3VicGF0aCgpIGNvbnN0OwotICAgIEZsb2F0UmVjdCB6ZXJv
TGVuZ3RoU3VicGF0aFJlY3QoKSBjb25zdDsKLQotcHJpdmF0ZToKLSAgICB2aXJ0dWFsIEFmZmlu
ZVRyYW5zZm9ybSBsb2NhbFRyYW5zZm9ybSgpIGNvbnN0IHsgcmV0dXJuIG1fbG9jYWxUcmFuc2Zv
cm07IH0KLSAgICB2b2lkIGZpbGxBbmRTdHJva2VQYXRoKEdyYXBoaWNzQ29udGV4dCopOwotCi0g
ICAgYm9vbCBtX25lZWRzQm91bmRhcmllc1VwZGF0ZSA6IDE7Ci0gICAgYm9vbCBtX25lZWRzUGF0
aFVwZGF0ZSA6IDE7Ci0gICAgYm9vbCBtX25lZWRzVHJhbnNmb3JtVXBkYXRlIDogMTsKLQotICAg
IG11dGFibGUgUGF0aCBtX3BhdGg7Ci0gICAgRmxvYXRSZWN0IG1fZmlsbEJvdW5kaW5nQm94Owot
ICAgIEZsb2F0UmVjdCBtX3N0cm9rZUFuZE1hcmtlckJvdW5kaW5nQm94OwotICAgIEZsb2F0UmVj
dCBtX3JlcGFpbnRCb3VuZGluZ0JveDsKLSAgICBTVkdNYXJrZXJMYXlvdXRJbmZvIG1fbWFya2Vy
TGF5b3V0SW5mbzsKLSAgICBBZmZpbmVUcmFuc2Zvcm0gbV9sb2NhbFRyYW5zZm9ybTsKKyAgICB2
aXJ0dWFsIHZvaWQgaW5mbGF0ZVdpdGhNYXJrZXJCb3VuZHMoKTsKIH07CiAKLWlubGluZSBSZW5k
ZXJTVkdQYXRoKiB0b1JlbmRlclNWR1BhdGgoUmVuZGVyT2JqZWN0KiBvYmplY3QpCi17Ci0gICAg
QVNTRVJUKCFvYmplY3QgfHwgb2JqZWN0LT5pc1NWR1BhdGgoKSk7Ci0gICAgcmV0dXJuIHN0YXRp
Y19jYXN0PFJlbmRlclNWR1BhdGgqPihvYmplY3QpOwotfQotCi1pbmxpbmUgY29uc3QgUmVuZGVy
U1ZHUGF0aCogdG9SZW5kZXJTVkdQYXRoKGNvbnN0IFJlbmRlck9iamVjdCogb2JqZWN0KQotewot
ICAgIEFTU0VSVCghb2JqZWN0IHx8IG9iamVjdC0+aXNTVkdQYXRoKCkpOwotICAgIHJldHVybiBz
dGF0aWNfY2FzdDxjb25zdCBSZW5kZXJTVkdQYXRoKj4ob2JqZWN0KTsKLX0KLQotLy8gVGhpcyB3
aWxsIGNhdGNoIGFueW9uZSBkb2luZyBhbiB1bm5lY2Vzc2FyeSBjYXN0Lgotdm9pZCB0b1JlbmRl
clNWR1BhdGgoY29uc3QgUmVuZGVyU1ZHUGF0aCopOwotCiB9CiAKICNlbmRpZiAvLyBFTkFCTEUo
U1ZHKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdS
ZWN0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVjdC5jcHAK
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjZkOWM5ZgotLS0gL2Rldi9udWxs
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVjdC5jcHAKQEAg
LTAsMCArMSwxMTQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgVW5pdmVyc2l0eSBvZiBT
emVnZWQKKyAqIENvcHlyaWdodCAoQykgMjAxMSBSZW5hdGEgSG9kb3ZhbiAocmVuaUB3ZWJraXQu
b3JnKQorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIFVOSVZFUlNJVFkgT0YgU1pFR0VEIGBgQVMgSVMnJyBBTkQgQU5Z
CisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAg
SU4gTk8gRVZFTlQgU0hBTEwgVU5JVkVSU0lUWSBPRiBTWkVHRUQgT1IKKyAqIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAq
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgi
CisKKyNpZiBFTkFCTEUoU1ZHKQorI2luY2x1ZGUgIlJlbmRlclNWR1JlY3QuaCIKKworI2luY2x1
ZGUgIlNWR05hbWVzLmgiCisjaW5jbHVkZSAiU1ZHUmVjdEVsZW1lbnQuaCIKKworbmFtZXNwYWNl
IFdlYkNvcmUgeworCitSZW5kZXJTVkdSZWN0OjpSZW5kZXJTVkdSZWN0KFNWR1N0eWxlZFRyYW5z
Zm9ybWFibGVFbGVtZW50KiBub2RlKQorICAgIDogUmVuZGVyU1ZHU2hhcGUobm9kZSkKK3sKK30K
KworUmVuZGVyU1ZHUmVjdDo6flJlbmRlclNWR1JlY3QoKQoreworfQorCit2b2lkIFJlbmRlclNW
R1JlY3Q6OmNyZWF0ZVNoYXBlKCkKK3sKKyAgICAvLyBCZWZvcmUgY3JlYXRpbmcgYSBuZXcgb2Jq
ZWN0IHdlIG5lZWQgdG8gY2xlYXIgdGhlIGNhY2hlZCBib3VuZGluZyBib3gKKyAgICAvLyB0byBh
dm9pZCB1c2luZyBnYXJiYWdlLgorICAgIG1fYm91bmRpbmdCb3ggPSBGbG9hdFJlY3QoKTsKKyAg
ICBTVkdSZWN0RWxlbWVudCogcmVjdCA9IHN0YXRpY19jYXN0PFNWR1JlY3RFbGVtZW50Kj4obm9k
ZSgpKTsKKyAgICBBU1NFUlQocmVjdCk7CisgICAgLy8gRmFsbGJhY2sgdG8gUmVuZGVyU1ZHU2hh
cGUgaWYgcmVjdCBoYXMgcm91bmRlZCBjb3JuZXJzLgorICAgIGlmIChyZWN0LT5oYXNBdHRyaWJ1
dGUoU1ZHTmFtZXM6OnJ4QXR0cikgfHwgcmVjdC0+aGFzQXR0cmlidXRlKFNWR05hbWVzOjpyeUF0
dHIpKSB7CisgICAgICAgUmVuZGVyU1ZHU2hhcGU6OmNyZWF0ZVNoYXBlKCk7CisgICAgICAgc2V0
aXNQYWludGluZ0ZhbGxiYWNrKHRydWUpOworICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBG
bG9hdFNpemUgYm91bmRpbmdCb3hTaXplKHJlY3QtPndpZHRoKCkudmFsdWUocmVjdCksIHJlY3Qt
PmhlaWdodCgpLnZhbHVlKHJlY3QpKTsKKyAgICBpZiAoYm91bmRpbmdCb3hTaXplLmlzRW1wdHko
KSkKKyAgICAgICAgcmV0dXJuOworCisgICAgbV9ib3VuZGluZ0JveCA9IEZsb2F0UmVjdChGbG9h
dFBvaW50KHJlY3QtPngoKS52YWx1ZShyZWN0KSwgcmVjdC0+eSgpLnZhbHVlKHJlY3QpKSwgYm91
bmRpbmdCb3hTaXplKTsKKyAgICAvLyBUbyBkZWNpZGUgaWYgdGhlIHN0cm9rZSBjb250YWlucyBh
IHBvaW50IHdlIGNyZWF0ZSB0d28gcmVjdHMgd2hpY2ggcmVwcmVzZW50IHRoZSBpbm5lciBhbmQK
KyAgICAvLyB0aGUgb3V0ZXIgc3Ryb2tlIGJvcmRlcnMuIEEgc3Ryb2tlIGNvbnRhaW5zIHRoZSBw
b2ludCwgaWYgdGhlIHBvaW50IGlzIGJldHdlZW4gdGhlbS4KKyAgICBmbG9hdCBzdHJva2VXaWR0
aCA9IHRoaXMtPnN0cm9rZVdpZHRoKCk7CisgICAgbV9pbm5lclN0cm9rZVJlY3QgPSBtX2JvdW5k
aW5nQm94OworICAgIG1fb3V0ZXJTdHJva2VSZWN0ID0gbV9ib3VuZGluZ0JveDsKKyAgICBtX2lu
bmVyU3Ryb2tlUmVjdC5pbmZsYXRlKC1zdHJva2VXaWR0aCAvIDIpOworICAgIG1fb3V0ZXJTdHJv
a2VSZWN0LmluZmxhdGUoc3Ryb2tlV2lkdGggLyAyKTsKK30KKworCitGbG9hdFJlY3QgUmVuZGVy
U1ZHUmVjdDo6b2JqZWN0Qm91bmRpbmdCb3goKSBjb25zdAoreworICAgIGlmIChpc1BhaW50aW5n
RmFsbGJhY2soKSkKKyAgICAgICAgcmV0dXJuIFJlbmRlclNWR1NoYXBlOjpvYmplY3RCb3VuZGlu
Z0JveCgpOworICAgIHJldHVybiBtX2JvdW5kaW5nQm94OworfQorCitGbG9hdFJlY3QgUmVuZGVy
U1ZHUmVjdDo6c3Ryb2tlQm91bmRpbmdCb3goKSBjb25zdAoreworICAgIGlmIChpc1BhaW50aW5n
RmFsbGJhY2soKSAmJiAhc3R5bGUoKS0+c3ZnU3R5bGUoKS0+c3Ryb2tlRGFzaEFycmF5KCkuaXNF
bXB0eSgpKQorICAgICAgICByZXR1cm4gUmVuZGVyU1ZHU2hhcGU6OnN0cm9rZUJvdW5kaW5nQm94
KCk7CisgICAgcmV0dXJuIG1fb3V0ZXJTdHJva2VSZWN0OworfQorCit2b2lkIFJlbmRlclNWR1Jl
Y3Q6OmZpbGxTaGFwZShHcmFwaGljc0NvbnRleHQqIGNvbnRleHQpIGNvbnN0Cit7CisgICAgIGNv
bnRleHQtPmZpbGxSZWN0KG1fYm91bmRpbmdCb3gpOworfQorCit2b2lkIFJlbmRlclNWR1JlY3Q6
OnN0cm9rZVNoYXBlKEdyYXBoaWNzQ29udGV4dCogY29udGV4dCkgY29uc3QKK3sKKyAgICBjb250
ZXh0LT5zdHJva2VSZWN0KG1fYm91bmRpbmdCb3gsIHN0cm9rZVdpZHRoKCkpOworfQorCitib29s
IFJlbmRlclNWR1JlY3Q6OnNoYXBlRGVwZW5kZW50U3Ryb2tlQ29udGFpbnMoY29uc3QgRmxvYXRQ
b2ludCYgcG9pbnQpIGNvbnN0Cit7CisgICAgcmV0dXJuICFtX2lubmVyU3Ryb2tlUmVjdC5pc0lu
c2lkZVJlY3QocG9pbnQpOworfQorCitib29sIFJlbmRlclNWR1JlY3Q6OnNoYXBlRGVwZW5kZW50
RmlsbENvbnRhaW5zKGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50LCBjb25zdCBXaW5kUnVsZSBmaWxs
UnVsZSkgY29uc3QKK3sKKyAgICBpZiAoaXNQYWludGluZ0ZhbGxiYWNrKCkpCisgICAgICAgIHJl
dHVybiBSZW5kZXJTVkdTaGFwZTo6c2hhcGVEZXBlbmRlbnRGaWxsQ29udGFpbnMocG9pbnQsIGZp
bGxSdWxlKTsKKyAgICByZXR1cm4gbV9ib3VuZGluZ0JveC5jb250YWlucyhwb2ludC54KCksIHBv
aW50LnkoKSk7Cit9CisKK30KKworI2VuZGlmIC8vIEVOQUJMRShTVkcpCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1JlY3QuaCBiL1NvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVjdC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAuLjRhODY4MTUKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1JlY3QuaApAQCAtMCwwICsxLDYzIEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDExIFVuaXZlcnNpdHkgb2YgU3plZ2VkCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTEgUmVuYXRhIEhvZG92YW4gKHJlbmlAd2Via2l0Lm9yZykKKyAqIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBVTklWRVJT
SVRZIE9GIFNaRUdFRCBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFVOSVZFUlNJ
VFkgT0YgU1pFR0VEIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCisgKi8KKworI2lmbmRlZiBSZW5kZXJTVkdSZWN0X2gKKyNkZWZpbmUgUmVuZGVyU1ZHUmVj
dF9oCisKKyNpZiBFTkFCTEUoU1ZHKQorI2luY2x1ZGUgIlJlbmRlclNWR1BhdGguaCIKKworbmFt
ZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBSZW5kZXJTVkdSZWN0IDogcHVibGljIFJlbmRlclNW
R1NoYXBlIHsKK3B1YmxpYzoKKyAgICBleHBsaWNpdCBSZW5kZXJTVkdSZWN0KFNWR1N0eWxlZFRy
YW5zZm9ybWFibGVFbGVtZW50Kik7CisgICAgdmlydHVhbCB+UmVuZGVyU1ZHUmVjdCgpOworCitw
cml2YXRlOgorICAgIHZpcnR1YWwgYm9vbCBpc1NWR1JlY3QoKSBjb25zdCB7IHJldHVybiB0cnVl
OyB9CisgICAgdmlydHVhbCBjb25zdCBjaGFyKiByZW5kZXJOYW1lKCkgY29uc3QgeyByZXR1cm4g
IlJlbmRlclNWR1JlY3QiOyB9CisKKyAgICB2aXJ0dWFsIHZvaWQgY3JlYXRlU2hhcGUoKTsKKyAg
ICB2aXJ0dWFsIGJvb2wgaXNFbXB0eSgpIGNvbnN0IHsgcmV0dXJuIGhhc1BhdGgoKSA/IFJlbmRl
clNWR1NoYXBlOjppc0VtcHR5KCkgOiBtX2JvdW5kaW5nQm94LmlzRW1wdHkoKTsgfTsKKyAgICB2
aXJ0dWFsIHZvaWQgZmlsbFNoYXBlKEdyYXBoaWNzQ29udGV4dCopIGNvbnN0OworICAgIHZpcnR1
YWwgdm9pZCBzdHJva2VTaGFwZShHcmFwaGljc0NvbnRleHQqKSBjb25zdDsKKyAgICB2aXJ0dWFs
IEZsb2F0UmVjdCBvYmplY3RCb3VuZGluZ0JveCgpIGNvbnN0OworICAgIHZpcnR1YWwgRmxvYXRS
ZWN0IHN0cm9rZUJvdW5kaW5nQm94KCkgY29uc3Q7CisgICAgdmlydHVhbCBib29sIHNoYXBlRGVw
ZW5kZW50U3Ryb2tlQ29udGFpbnMoY29uc3QgRmxvYXRQb2ludCYpIGNvbnN0OworICAgIHZpcnR1
YWwgYm9vbCBzaGFwZURlcGVuZGVudEZpbGxDb250YWlucyhjb25zdCBGbG9hdFBvaW50JiwgY29u
c3QgV2luZFJ1bGUpIGNvbnN0OworCitwcml2YXRlOgorICAgIEZsb2F0UmVjdCBtX2JvdW5kaW5n
Qm94OworICAgIEZsb2F0UmVjdCBtX2lubmVyU3Ryb2tlUmVjdDsKKyAgICBGbG9hdFJlY3QgbV9v
dXRlclN0cm9rZVJlY3Q7Cit9OworCit9CisKKyNlbmRpZiAvLyBFTkFCTEUoU1ZHKQorI2VuZGlm
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291
cmNlLmggYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291cmNlLmgK
aW5kZXggYTY3YmE3My4uZTAyMDE1NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJjZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2UuaApAQCAtMjEsNiArMjEsNyBAQAogI2RlZmluZSBSZW5k
ZXJTVkdSZXNvdXJjZV9oCiAKICNpZiBFTkFCTEUoU1ZHKQorI2luY2x1ZGUgIlJlbmRlclNWR1No
YXBlLmgiCiAjaW5jbHVkZSAiUmVuZGVyU3R5bGVDb25zdGFudHMuaCIKICNpbmNsdWRlICJTVkdE
b2N1bWVudEV4dGVuc2lvbnMuaCIKIApAQCAtNjEsNyArNjIsNyBAQCBwdWJsaWM6CiAgICAgdmly
dHVhbCB2b2lkIHJlbW92ZUNsaWVudEZyb21DYWNoZShSZW5kZXJPYmplY3QqLCBib29sIG1hcmtG
b3JJbnZhbGlkYXRpb24gPSB0cnVlKSA9IDA7CiAKICAgICB2aXJ0dWFsIGJvb2wgYXBwbHlSZXNv
dXJjZShSZW5kZXJPYmplY3QqLCBSZW5kZXJTdHlsZSosIEdyYXBoaWNzQ29udGV4dComLCB1bnNp
Z25lZCBzaG9ydCByZXNvdXJjZU1vZGUpID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgcG9zdEFwcGx5
UmVzb3VyY2UoUmVuZGVyT2JqZWN0KiwgR3JhcGhpY3NDb250ZXh0KiYsIHVuc2lnbmVkIHNob3J0
LCBjb25zdCBQYXRoKikgeyB9CisgICAgdmlydHVhbCB2b2lkIHBvc3RBcHBseVJlc291cmNlKFJl
bmRlck9iamVjdCosIEdyYXBoaWNzQ29udGV4dComLCB1bnNpZ25lZCBzaG9ydCwgY29uc3QgUGF0
aCosIGNvbnN0IFJlbmRlclNWR1NoYXBlKikgeyB9CiAgICAgdmlydHVhbCBGbG9hdFJlY3QgcmVz
b3VyY2VCb3VuZGluZ0JveChSZW5kZXJPYmplY3QqKSA9IDA7CiAKICAgICB2aXJ0dWFsIFJlbmRl
clNWR1Jlc291cmNlVHlwZSByZXNvdXJjZVR5cGUoKSBjb25zdCA9IDA7CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291cmNlQ2xpcHBlci5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291cmNlQ2xpcHBlci5j
cHAKaW5kZXggMjM4YzA5Ni4uMWQ4MjEyMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJjZUNsaXBwZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VDbGlwcGVyLmNwcApAQCAtMjQyLDcg
KzI0Miw3IEBAIGJvb2wgUmVuZGVyU1ZHUmVzb3VyY2VDbGlwcGVyOjpkcmF3Q29udGVudEludG9N
YXNrSW1hZ2UoQ2xpcHBlckRhdGEqIGNsaXBwZXJEYXRhCiAgICAgICAgIH0KIAogICAgICAgICAv
LyBPbmx5IHNoYXBlcywgcGF0aHMgYW5kIHRleHRzIGFyZSBhbGxvd2VkIGZvciBjbGlwcGluZy4K
LSAgICAgICAgaWYgKCFyZW5kZXJlci0+aXNTVkdQYXRoKCkgJiYgIXJlbmRlcmVyLT5pc1NWR1Rl
eHQoKSkKKyAgICAgICAgaWYgKCFyZW5kZXJlci0+aXNTVkdTaGFwZSgpICYmICFyZW5kZXJlci0+
aXNTVkdUZXh0KCkpCiAgICAgICAgICAgICBjb250aW51ZTsKIAogICAgICAgICAvLyBTYXZlIHRo
ZSBvbGQgUmVuZGVyU3R5bGUgb2YgdGhlIGN1cnJlbnQgb2JqZWN0IGZvciByZXN0b3JpbmcgYWZ0
ZXIgZHJhd2luZwpAQCAtMjg0LDcgKzI4NCw3IEBAIHZvaWQgUmVuZGVyU1ZHUmVzb3VyY2VDbGlw
cGVyOjpjYWxjdWxhdGVDbGlwQ29udGVudFJlcGFpbnRSZWN0KCkKICAgICAgICAgUmVuZGVyT2Jq
ZWN0KiByZW5kZXJlciA9IGNoaWxkTm9kZS0+cmVuZGVyZXIoKTsKICAgICAgICAgaWYgKCFjaGls
ZE5vZGUtPmlzU1ZHRWxlbWVudCgpIHx8ICFzdGF0aWNfY2FzdDxTVkdFbGVtZW50Kj4oY2hpbGRO
b2RlKS0+aXNTdHlsZWQoKSB8fCAhcmVuZGVyZXIpCiAgICAgICAgICAgICBjb250aW51ZTsKLSAg
ICAgICAgaWYgKCFyZW5kZXJlci0+aXNTVkdQYXRoKCkgJiYgIXJlbmRlcmVyLT5pc1NWR1RleHQo
KSAmJiAhcmVuZGVyZXItPmlzU1ZHU2hhZG93VHJlZVJvb3RDb250YWluZXIoKSkKKyAgICAgICAg
aWYgKCFyZW5kZXJlci0+aXNTVkdTaGFwZSgpICYmICFyZW5kZXJlci0+aXNTVkdUZXh0KCkgJiYg
IXJlbmRlcmVyLT5pc1NWR1NoYWRvd1RyZWVSb290Q29udGFpbmVyKCkpCiAgICAgICAgICAgICBj
b250aW51ZTsKICAgICAgICAgUmVuZGVyU3R5bGUqIHN0eWxlID0gcmVuZGVyZXItPnN0eWxlKCk7
CiAgICAgICAgIGlmICghc3R5bGUgfHwgc3R5bGUtPmRpc3BsYXkoKSA9PSBOT05FIHx8IHN0eWxl
LT52aXNpYmlsaXR5KCkgIT0gVklTSUJMRSkKQEAgLTMxMCw3ICszMTAsNyBAQCBib29sIFJlbmRl
clNWR1Jlc291cmNlQ2xpcHBlcjo6aGl0VGVzdENsaXBDb250ZW50KGNvbnN0IEZsb2F0UmVjdCYg
b2JqZWN0Qm91bmRpbgogICAgICAgICBSZW5kZXJPYmplY3QqIHJlbmRlcmVyID0gY2hpbGROb2Rl
LT5yZW5kZXJlcigpOwogICAgICAgICBpZiAoIWNoaWxkTm9kZS0+aXNTVkdFbGVtZW50KCkgfHwg
IXN0YXRpY19jYXN0PFNWR0VsZW1lbnQqPihjaGlsZE5vZGUpLT5pc1N0eWxlZCgpIHx8ICFyZW5k
ZXJlcikKICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICBpZiAoIXJlbmRlcmVyLT5pc1NW
R1BhdGgoKSAmJiAhcmVuZGVyZXItPmlzU1ZHVGV4dCgpICYmICFyZW5kZXJlci0+aXNTVkdTaGFk
b3dUcmVlUm9vdENvbnRhaW5lcigpKQorICAgICAgICBpZiAoIXJlbmRlcmVyLT5pc1NWR1NoYXBl
KCkgJiYgIXJlbmRlcmVyLT5pc1NWR1RleHQoKSAmJiAhcmVuZGVyZXItPmlzU1ZHU2hhZG93VHJl
ZVJvb3RDb250YWluZXIoKSkKICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICBJbnRQb2lu
dCBoaXRQb2ludDsKICAgICAgICAgSGl0VGVzdFJlc3VsdCByZXN1bHQoaGl0UG9pbnQpOwpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJjZUNv
bnRhaW5lci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291
cmNlQ29udGFpbmVyLmNwcAppbmRleCA3NGQ1ZDY5Li5iNzRhZDZiIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291cmNlQ29udGFpbmVyLmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291cmNlQ29udGFp
bmVyLmNwcApAQCAtMTgwLDcgKzE4MCw3IEBAIHZvaWQgUmVuZGVyU1ZHUmVzb3VyY2VDb250YWlu
ZXI6OnJlZ2lzdGVyUmVzb3VyY2UoKQogLy8gRklYTUU6IFRoaXMgZG9lcyBub3QgYmVsb25nIGhl
cmUuCiBBZmZpbmVUcmFuc2Zvcm0gUmVuZGVyU1ZHUmVzb3VyY2VDb250YWluZXI6OnRyYW5zZm9y
bU9uTm9uU2NhbGluZ1N0cm9rZShSZW5kZXJPYmplY3QqIG9iamVjdCwgY29uc3QgQWZmaW5lVHJh
bnNmb3JtJiByZXNvdXJjZVRyYW5zZm9ybSkKIHsKLSAgICBpZiAoIW9iamVjdC0+aXNTVkdQYXRo
KCkpCisgICAgaWYgKCFvYmplY3QtPmlzU1ZHU2hhcGUoKSkKICAgICAgICAgcmV0dXJuIHJlc291
cmNlVHJhbnNmb3JtOwogCiAgICAgU1ZHU3R5bGVkVHJhbnNmb3JtYWJsZUVsZW1lbnQqIGVsZW1l
bnQgPSBzdGF0aWNfY2FzdDxTVkdTdHlsZWRUcmFuc2Zvcm1hYmxlRWxlbWVudCo+KG9iamVjdC0+
bm9kZSgpKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVy
U1ZHUmVzb3VyY2VGaWx0ZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5k
ZXJTVkdSZXNvdXJjZUZpbHRlci5jcHAKaW5kZXggNjg5MzVkYS4uODVmZjFhNyAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJjZUZpbHRlci5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJjZUZp
bHRlci5jcHAKQEAgLTI1OSwxNiArMjU5LDE1IEBAIGJvb2wgUmVuZGVyU1ZHUmVzb3VyY2VGaWx0
ZXI6OmFwcGx5UmVzb3VyY2UoUmVuZGVyT2JqZWN0KiBvYmplY3QsIFJlbmRlclN0eWxlKiwKICAg
ICByZXR1cm4gdHJ1ZTsKIH0KIAotdm9pZCBSZW5kZXJTVkdSZXNvdXJjZUZpbHRlcjo6cG9zdEFw
cGx5UmVzb3VyY2UoUmVuZGVyT2JqZWN0KiBvYmplY3QsIEdyYXBoaWNzQ29udGV4dComIGNvbnRl
eHQsIHVuc2lnbmVkIHNob3J0IHJlc291cmNlTW9kZSwgY29uc3QgUGF0aCopCit2b2lkIFJlbmRl
clNWR1Jlc291cmNlRmlsdGVyOjpwb3N0QXBwbHlSZXNvdXJjZShSZW5kZXJPYmplY3QqIG9iamVj
dCwgR3JhcGhpY3NDb250ZXh0KiYgY29udGV4dCwgdW5zaWduZWQgc2hvcnQgcmVzb3VyY2VNb2Rl
LCBjb25zdCBQYXRoKiwgY29uc3QgUmVuZGVyU1ZHU2hhcGUqKQogewotICAgIEFTU0VSVChvYmpl
Y3QpOworICAgIEFTU0VSVChzaGFwZSk7CiAgICAgQVNTRVJUKGNvbnRleHQpOwogI2lmbmRlZiBO
REVCVUcKICAgICBBU1NFUlQocmVzb3VyY2VNb2RlID09IEFwcGx5VG9EZWZhdWx0TW9kZSk7CiAj
ZWxzZQogICAgIFVOVVNFRF9QQVJBTShyZXNvdXJjZU1vZGUpOwogI2VuZGlmCi0KICAgICBGaWx0
ZXJEYXRhKiBmaWx0ZXJEYXRhID0gbV9maWx0ZXIuZ2V0KG9iamVjdCk7CiAgICAgaWYgKCFmaWx0
ZXJEYXRhKQogICAgICAgICByZXR1cm47CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291cmNlRmlsdGVyLmggYi9Tb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291cmNlRmlsdGVyLmgKaW5kZXggNWE1YjA5Mi4uZmY2MWI3
MSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNv
dXJjZUZpbHRlci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZH
UmVzb3VyY2VGaWx0ZXIuaApAQCAtNzIsNyArNzIsNyBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCB2
b2lkIHJlbW92ZUNsaWVudEZyb21DYWNoZShSZW5kZXJPYmplY3QqLCBib29sIG1hcmtGb3JJbnZh
bGlkYXRpb24gPSB0cnVlKTsKIAogICAgIHZpcnR1YWwgYm9vbCBhcHBseVJlc291cmNlKFJlbmRl
ck9iamVjdCosIFJlbmRlclN0eWxlKiwgR3JhcGhpY3NDb250ZXh0KiYsIHVuc2lnbmVkIHNob3J0
IHJlc291cmNlTW9kZSk7Ci0gICAgdmlydHVhbCB2b2lkIHBvc3RBcHBseVJlc291cmNlKFJlbmRl
ck9iamVjdCosIEdyYXBoaWNzQ29udGV4dComLCB1bnNpZ25lZCBzaG9ydCByZXNvdXJjZU1vZGUs
IGNvbnN0IFBhdGgqKTsKKyAgICB2aXJ0dWFsIHZvaWQgcG9zdEFwcGx5UmVzb3VyY2UoUmVuZGVy
T2JqZWN0KiwgR3JhcGhpY3NDb250ZXh0KiYsIHVuc2lnbmVkIHNob3J0IHJlc291cmNlTW9kZSwg
Y29uc3QgUGF0aCosIGNvbnN0IFJlbmRlclNWR1NoYXBlKik7CiAKICAgICB2aXJ0dWFsIEZsb2F0
UmVjdCByZXNvdXJjZUJvdW5kaW5nQm94KFJlbmRlck9iamVjdCopOwogCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291cmNlR3JhZGllbnQuY3Bw
IGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJjZUdyYWRpZW50
LmNwcAppbmRleCAxYWFiOTM1Li5kNDA4MDhiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291cmNlR3JhZGllbnQuY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VHcmFkaWVudC5jcHAKQEAgLTI3
LDYgKzI3LDcgQEAKIAogI2luY2x1ZGUgIkdyYWRpZW50QXR0cmlidXRlcy5oIgogI2luY2x1ZGUg
IkdyYXBoaWNzQ29udGV4dC5oIgorI2luY2x1ZGUgIlJlbmRlclNWR1NoYXBlLmgiCiAjaW5jbHVk
ZSAiUmVuZGVyU1ZHVGV4dC5oIgogI2luY2x1ZGUgIlNWR0ltYWdlQnVmZmVyVG9vbHMuaCIKICNp
bmNsdWRlICJTVkdSZW5kZXJTdXBwb3J0LmgiCkBAIC0yMzEsNyArMjMyLDcgQEAgYm9vbCBSZW5k
ZXJTVkdSZXNvdXJjZUdyYWRpZW50OjphcHBseVJlc291cmNlKFJlbmRlck9iamVjdCogb2JqZWN0
LCBSZW5kZXJTdHlsZSoKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotdm9pZCBSZW5kZXJTVkdSZXNv
dXJjZUdyYWRpZW50Ojpwb3N0QXBwbHlSZXNvdXJjZShSZW5kZXJPYmplY3QqIG9iamVjdCwgR3Jh
cGhpY3NDb250ZXh0KiYgY29udGV4dCwgdW5zaWduZWQgc2hvcnQgcmVzb3VyY2VNb2RlLCBjb25z
dCBQYXRoKiBwYXRoKQordm9pZCBSZW5kZXJTVkdSZXNvdXJjZUdyYWRpZW50Ojpwb3N0QXBwbHlS
ZXNvdXJjZShSZW5kZXJPYmplY3QqIG9iamVjdCwgR3JhcGhpY3NDb250ZXh0KiYgY29udGV4dCwg
dW5zaWduZWQgc2hvcnQgcmVzb3VyY2VNb2RlLCBjb25zdCBQYXRoKiBwYXRoLCBjb25zdCBSZW5k
ZXJTVkdTaGFwZSogc2hhcGUpCiB7CiAgICAgQVNTRVJUKGNvbnRleHQpOwogICAgIEFTU0VSVChy
ZXNvdXJjZU1vZGUgIT0gQXBwbHlUb0RlZmF1bHRNb2RlKTsKQEAgLTI1OSwxMSArMjYwLDE4IEBA
IHZvaWQgUmVuZGVyU1ZHUmVzb3VyY2VHcmFkaWVudDo6cG9zdEFwcGx5UmVzb3VyY2UoUmVuZGVy
T2JqZWN0KiBvYmplY3QsIEdyYXBoaWNzCiAjZWxzZQogICAgICAgICBVTlVTRURfUEFSQU0ob2Jq
ZWN0KTsKICNlbmRpZgotICAgIH0gZWxzZSBpZiAocGF0aCkgewotICAgICAgICBpZiAocmVzb3Vy
Y2VNb2RlICYgQXBwbHlUb0ZpbGxNb2RlKQotICAgICAgICAgICAgY29udGV4dC0+ZmlsbFBhdGgo
KnBhdGgpOwotICAgICAgICBlbHNlIGlmIChyZXNvdXJjZU1vZGUgJiBBcHBseVRvU3Ryb2tlTW9k
ZSkKLSAgICAgICAgICAgIGNvbnRleHQtPnN0cm9rZVBhdGgoKnBhdGgpOworICAgIH0gZWxzZSB7
CisgICAgICAgIGlmIChyZXNvdXJjZU1vZGUgJiBBcHBseVRvRmlsbE1vZGUpIHsKKyAgICAgICAg
ICAgIGlmIChwYXRoKQorICAgICAgICAgICAgICAgIGNvbnRleHQtPmZpbGxQYXRoKCpwYXRoKTsK
KyAgICAgICAgICAgIGVsc2UgaWYgKHNoYXBlKQorICAgICAgICAgICAgICAgIHNoYXBlLT5pc1Bh
aW50aW5nRmFsbGJhY2soKSA/IGNvbnRleHQtPmZpbGxQYXRoKHNoYXBlLT5wYXRoKCkpIDogc2hh
cGUtPmZpbGxTaGFwZShjb250ZXh0KTsKKyAgICAgICAgfSBlbHNlIGlmIChyZXNvdXJjZU1vZGUg
JiBBcHBseVRvU3Ryb2tlTW9kZSkgeworICAgICAgICAgICAgaWYgKHBhdGgpCisgICAgICAgICAg
ICAgICAgY29udGV4dC0+c3Ryb2tlUGF0aCgqcGF0aCk7CisgICAgICAgICAgICBlbHNlIGlmIChz
aGFwZSkKKyAgICAgICAgICAgICAgICBzaGFwZS0+aXNQYWludGluZ0ZhbGxiYWNrKCkgPyBjb250
ZXh0LT5zdHJva2VQYXRoKHNoYXBlLT5wYXRoKCkpIDogc2hhcGUtPnN0cm9rZVNoYXBlKGNvbnRl
eHQpOworICAgICAgICB9CiAgICAgfQogCiAgICAgY29udGV4dC0+cmVzdG9yZSgpOwpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJjZUdyYWRp
ZW50LmggYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291cmNlR3Jh
ZGllbnQuaAppbmRleCBkZjQ5MmUyLi4zZmNjZDQ0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291cmNlR3JhZGllbnQuaAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291cmNlR3JhZGllbnQuaApAQCAtNTAs
NyArNTAsNyBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCB2b2lkIHJlbW92ZUNsaWVudEZyb21DYWNo
ZShSZW5kZXJPYmplY3QqLCBib29sIG1hcmtGb3JJbnZhbGlkYXRpb24gPSB0cnVlKTsKIAogICAg
IHZpcnR1YWwgYm9vbCBhcHBseVJlc291cmNlKFJlbmRlck9iamVjdCosIFJlbmRlclN0eWxlKiwg
R3JhcGhpY3NDb250ZXh0KiYsIHVuc2lnbmVkIHNob3J0IHJlc291cmNlTW9kZSk7Ci0gICAgdmly
dHVhbCB2b2lkIHBvc3RBcHBseVJlc291cmNlKFJlbmRlck9iamVjdCosIEdyYXBoaWNzQ29udGV4
dComLCB1bnNpZ25lZCBzaG9ydCByZXNvdXJjZU1vZGUsIGNvbnN0IFBhdGgqKTsKKyAgICB2aXJ0
dWFsIHZvaWQgcG9zdEFwcGx5UmVzb3VyY2UoUmVuZGVyT2JqZWN0KiwgR3JhcGhpY3NDb250ZXh0
KiYsIHVuc2lnbmVkIHNob3J0IHJlc291cmNlTW9kZSwgY29uc3QgUGF0aCosIGNvbnN0IFJlbmRl
clNWR1NoYXBlKik7CiAgICAgdmlydHVhbCBGbG9hdFJlY3QgcmVzb3VyY2VCb3VuZGluZ0JveChS
ZW5kZXJPYmplY3QqKSB7IHJldHVybiBGbG9hdFJlY3QoKTsgfQogCiBwcm90ZWN0ZWQ6CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291cmNlUGF0
dGVybi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291cmNl
UGF0dGVybi5jcHAKaW5kZXggYjA4MjQ4MS4uMWNiYzVkZSAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJjZVBhdHRlcm4uY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VQYXR0ZXJuLmNwcApA
QCAtMTgzLDE2ICsxODMsMjEgQEAgYm9vbCBSZW5kZXJTVkdSZXNvdXJjZVBhdHRlcm46OmFwcGx5
UmVzb3VyY2UoUmVuZGVyT2JqZWN0KiBvYmplY3QsIFJlbmRlclN0eWxlKgogICAgIHJldHVybiB0
cnVlOwogfQogCi12b2lkIFJlbmRlclNWR1Jlc291cmNlUGF0dGVybjo6cG9zdEFwcGx5UmVzb3Vy
Y2UoUmVuZGVyT2JqZWN0KiwgR3JhcGhpY3NDb250ZXh0KiYgY29udGV4dCwgdW5zaWduZWQgc2hv
cnQgcmVzb3VyY2VNb2RlLCBjb25zdCBQYXRoKiBwYXRoKQordm9pZCBSZW5kZXJTVkdSZXNvdXJj
ZVBhdHRlcm46OnBvc3RBcHBseVJlc291cmNlKFJlbmRlck9iamVjdCosIEdyYXBoaWNzQ29udGV4
dComIGNvbnRleHQsIHVuc2lnbmVkIHNob3J0IHJlc291cmNlTW9kZSwgY29uc3QgUGF0aCogcGF0
aCwgY29uc3QgUmVuZGVyU1ZHU2hhcGUqIHNoYXBlKQogewogICAgIEFTU0VSVChjb250ZXh0KTsK
ICAgICBBU1NFUlQocmVzb3VyY2VNb2RlICE9IEFwcGx5VG9EZWZhdWx0TW9kZSk7CiAKLSAgICBp
ZiAocGF0aCAmJiAhKHJlc291cmNlTW9kZSAmIEFwcGx5VG9UZXh0TW9kZSkpIHsKLSAgICAgICAg
aWYgKHJlc291cmNlTW9kZSAmIEFwcGx5VG9GaWxsTW9kZSkKKyAgICBpZiAocmVzb3VyY2VNb2Rl
ICYgQXBwbHlUb0ZpbGxNb2RlKSB7CisgICAgICAgIGlmIChwYXRoKQogICAgICAgICAgICAgY29u
dGV4dC0+ZmlsbFBhdGgoKnBhdGgpOwotICAgICAgICBlbHNlIGlmIChyZXNvdXJjZU1vZGUgJiBB
cHBseVRvU3Ryb2tlTW9kZSkKKyAgICAgICAgZWxzZSBpZiAoc2hhcGUpCisgICAgICAgICAgICBz
aGFwZS0+aXNQYWludGluZ0ZhbGxiYWNrKCkgPyBjb250ZXh0LT5maWxsUGF0aChzaGFwZS0+cGF0
aCgpKSA6IHNoYXBlLT5maWxsU2hhcGUoY29udGV4dCk7CisgICAgfSBlbHNlIGlmIChyZXNvdXJj
ZU1vZGUgJiBBcHBseVRvU3Ryb2tlTW9kZSkgeworICAgICAgICBpZiAocGF0aCkKICAgICAgICAg
ICAgIGNvbnRleHQtPnN0cm9rZVBhdGgoKnBhdGgpOworICAgICAgICBlbHNlIGlmIChzaGFwZSkK
KyAgICAgICAgICAgIHNoYXBlLT5pc1BhaW50aW5nRmFsbGJhY2soKSA/IGNvbnRleHQtPnN0cm9r
ZVBhdGgoc2hhcGUtPnBhdGgoKSkgOiBzaGFwZS0+c3Ryb2tlU2hhcGUoY29udGV4dCk7CiAgICAg
fQogCiAgICAgY29udGV4dC0+cmVzdG9yZSgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJjZVBhdHRlcm4uaCBiL1NvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VQYXR0ZXJuLmgKaW5kZXggYTY5N2M3MS4u
ODQ3ZmM2MCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJT
VkdSZXNvdXJjZVBhdHRlcm4uaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1Jl
bmRlclNWR1Jlc291cmNlUGF0dGVybi5oCkBAIC01Miw3ICs1Miw3IEBAIHB1YmxpYzoKICAgICB2
aXJ0dWFsIHZvaWQgcmVtb3ZlQ2xpZW50RnJvbUNhY2hlKFJlbmRlck9iamVjdCosIGJvb2wgbWFy
a0ZvckludmFsaWRhdGlvbiA9IHRydWUpOwogCiAgICAgdmlydHVhbCBib29sIGFwcGx5UmVzb3Vy
Y2UoUmVuZGVyT2JqZWN0KiwgUmVuZGVyU3R5bGUqLCBHcmFwaGljc0NvbnRleHQqJiwgdW5zaWdu
ZWQgc2hvcnQgcmVzb3VyY2VNb2RlKTsKLSAgICB2aXJ0dWFsIHZvaWQgcG9zdEFwcGx5UmVzb3Vy
Y2UoUmVuZGVyT2JqZWN0KiwgR3JhcGhpY3NDb250ZXh0KiYsIHVuc2lnbmVkIHNob3J0IHJlc291
cmNlTW9kZSwgY29uc3QgUGF0aCopOworICAgIHZpcnR1YWwgdm9pZCBwb3N0QXBwbHlSZXNvdXJj
ZShSZW5kZXJPYmplY3QqLCBHcmFwaGljc0NvbnRleHQqJiwgdW5zaWduZWQgc2hvcnQgcmVzb3Vy
Y2VNb2RlLCBjb25zdCBQYXRoKiwgY29uc3QgUmVuZGVyU1ZHU2hhcGUqKTsKICAgICB2aXJ0dWFs
IEZsb2F0UmVjdCByZXNvdXJjZUJvdW5kaW5nQm94KFJlbmRlck9iamVjdCopIHsgcmV0dXJuIEZs
b2F0UmVjdCgpOyB9CiAKICAgICB2aXJ0dWFsIFJlbmRlclNWR1Jlc291cmNlVHlwZSByZXNvdXJj
ZVR5cGUoKSBjb25zdCB7IHJldHVybiBzX3Jlc291cmNlVHlwZTsgfQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJjZVNvbGlkQ29sb3IuY3Bw
IGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJjZVNvbGlkQ29s
b3IuY3BwCmluZGV4IDViZTJhZjYuLmE4MzEwNTIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VTb2xpZENvbG9yLmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291cmNlU29saWRDb2xvci5jcHAK
QEAgLTIzLDYgKzIzLDcgQEAKICNpbmNsdWRlICJSZW5kZXJTVkdSZXNvdXJjZVNvbGlkQ29sb3Iu
aCIKIAogI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgorI2luY2x1ZGUgIlJlbmRlclNWR1No
YXBlLmgiCiAjaW5jbHVkZSAiUmVuZGVyU3R5bGUuaCIKICNpbmNsdWRlICJTVkdSZW5kZXJTdXBw
b3J0LmgiCiAKQEAgLTc0LDE2ICs3NSwyMSBAQCBib29sIFJlbmRlclNWR1Jlc291cmNlU29saWRD
b2xvcjo6YXBwbHlSZXNvdXJjZShSZW5kZXJPYmplY3QqIG9iamVjdCwgUmVuZGVyU3R5bAogICAg
IHJldHVybiB0cnVlOwogfQogCi12b2lkIFJlbmRlclNWR1Jlc291cmNlU29saWRDb2xvcjo6cG9z
dEFwcGx5UmVzb3VyY2UoUmVuZGVyT2JqZWN0KiwgR3JhcGhpY3NDb250ZXh0KiYgY29udGV4dCwg
dW5zaWduZWQgc2hvcnQgcmVzb3VyY2VNb2RlLCBjb25zdCBQYXRoKiBwYXRoKQordm9pZCBSZW5k
ZXJTVkdSZXNvdXJjZVNvbGlkQ29sb3I6OnBvc3RBcHBseVJlc291cmNlKFJlbmRlck9iamVjdCos
IEdyYXBoaWNzQ29udGV4dComIGNvbnRleHQsIHVuc2lnbmVkIHNob3J0IHJlc291cmNlTW9kZSwg
Y29uc3QgUGF0aCogcGF0aCwgY29uc3QgUmVuZGVyU1ZHU2hhcGUqIHNoYXBlKQogewogICAgIEFT
U0VSVChjb250ZXh0KTsKICAgICBBU1NFUlQocmVzb3VyY2VNb2RlICE9IEFwcGx5VG9EZWZhdWx0
TW9kZSk7CiAKLSAgICBpZiAocGF0aCAmJiAhKHJlc291cmNlTW9kZSAmIEFwcGx5VG9UZXh0TW9k
ZSkpIHsKLSAgICAgICAgaWYgKHJlc291cmNlTW9kZSAmIEFwcGx5VG9GaWxsTW9kZSkKKyAgICBp
ZiAocmVzb3VyY2VNb2RlICYgQXBwbHlUb0ZpbGxNb2RlKSB7CisgICAgICAgIGlmIChwYXRoKQog
ICAgICAgICAgICAgY29udGV4dC0+ZmlsbFBhdGgoKnBhdGgpOwotICAgICAgICBlbHNlIGlmIChy
ZXNvdXJjZU1vZGUgJiBBcHBseVRvU3Ryb2tlTW9kZSkKKyAgICAgICAgZWxzZSBpZiAoc2hhcGUp
CisgICAgICAgICAgICBzaGFwZS0+aXNQYWludGluZ0ZhbGxiYWNrKCkgPyBjb250ZXh0LT5maWxs
UGF0aChzaGFwZS0+cGF0aCgpKSA6IHNoYXBlLT5maWxsU2hhcGUoY29udGV4dCk7CisgICAgfSBl
bHNlIGlmIChyZXNvdXJjZU1vZGUgJiBBcHBseVRvU3Ryb2tlTW9kZSkgeworICAgICAgICBpZiAo
cGF0aCkKICAgICAgICAgICAgIGNvbnRleHQtPnN0cm9rZVBhdGgoKnBhdGgpOworICAgICAgICBl
bHNlIGlmIChzaGFwZSkKKyAgICAgICAgICAgIHNoYXBlLT5pc1BhaW50aW5nRmFsbGJhY2soKSA/
IGNvbnRleHQtPnN0cm9rZVBhdGgoc2hhcGUtPnBhdGgoKSkgOiBzaGFwZS0+c3Ryb2tlU2hhcGUo
Y29udGV4dCk7CiAgICAgfQogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvc3ZnL1JlbmRlclNWR1Jlc291cmNlU29saWRDb2xvci5oIGIvU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJjZVNvbGlkQ29sb3IuaAppbmRleCAwMmNlYjMxLi44
YmJmZGNkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNW
R1Jlc291cmNlU29saWRDb2xvci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcv
UmVuZGVyU1ZHUmVzb3VyY2VTb2xpZENvbG9yLmgKQEAgLTM2LDcgKzM2LDcgQEAgcHVibGljOgog
ICAgIHZpcnR1YWwgdm9pZCByZW1vdmVDbGllbnRGcm9tQ2FjaGUoUmVuZGVyT2JqZWN0KiwgYm9v
bCA9IHRydWUpIHsgfQogCiAgICAgdmlydHVhbCBib29sIGFwcGx5UmVzb3VyY2UoUmVuZGVyT2Jq
ZWN0KiwgUmVuZGVyU3R5bGUqLCBHcmFwaGljc0NvbnRleHQqJiwgdW5zaWduZWQgc2hvcnQgcmVz
b3VyY2VNb2RlKTsKLSAgICB2aXJ0dWFsIHZvaWQgcG9zdEFwcGx5UmVzb3VyY2UoUmVuZGVyT2Jq
ZWN0KiwgR3JhcGhpY3NDb250ZXh0KiYsIHVuc2lnbmVkIHNob3J0IHJlc291cmNlTW9kZSwgY29u
c3QgUGF0aCopOworICAgIHZpcnR1YWwgdm9pZCBwb3N0QXBwbHlSZXNvdXJjZShSZW5kZXJPYmpl
Y3QqLCBHcmFwaGljc0NvbnRleHQqJiwgdW5zaWduZWQgc2hvcnQgcmVzb3VyY2VNb2RlLCBjb25z
dCBQYXRoKiwgY29uc3QgUmVuZGVyU1ZHU2hhcGUqKTsKICAgICB2aXJ0dWFsIEZsb2F0UmVjdCBy
ZXNvdXJjZUJvdW5kaW5nQm94KFJlbmRlck9iamVjdCopIHsgcmV0dXJuIEZsb2F0UmVjdCgpOyB9
CiAKICAgICB2aXJ0dWFsIFJlbmRlclNWR1Jlc291cmNlVHlwZSByZXNvdXJjZVR5cGUoKSBjb25z
dCB7IHJldHVybiBzX3Jlc291cmNlVHlwZTsgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdTaGFwZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvc3ZnL1JlbmRlclNWR1NoYXBlLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw
MDAwLi5jMjhmYTI1Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L3N2Zy9SZW5kZXJTVkdTaGFwZS5jcHAKQEAgLTAsMCArMSw0MzIgQEAKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMDQsIDIwMDUsIDIwMDcgTmlrb2xhcyBaaW1tZXJtYW5uIDx6aW1tZXJtYW5uQGtk
ZS5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUsIDIwMDggUm9iIEJ1aXMgPGJ1aXNA
a2RlLm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAwNSwgMjAwNyBFcmljIFNlaWRlbCA8ZXJpY0B3
ZWJraXQub3JnPgorICogQ29weXJpZ2h0IChDKSAyMDA5IEdvb2dsZSwgSW5jLgorICogQ29weXJp
Z2h0IChDKSAyMDA5IERpcmsgU2NodWx6ZSA8a3JpdEB3ZWJraXQub3JnPgorICogQ29weXJpZ2h0
IChDKSBSZXNlYXJjaCBJbiBNb3Rpb24gTGltaXRlZCAyMDEwLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICogQ29weXJpZ2h0IChDKSAyMDA5IEplZmYgU2NoaWxsZXIgPGNvZGVkcmVhZEBnbWFpbC5j
b20+CisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgUmVuYXRhIEhvZG92YW4gPHJlbmlAd2Via2l0Lm9y
Zz4KKyAqIENvcHlyaWdodCAoQykgMjAxMSBVbml2ZXJzaXR5IG9mIFN6ZWdlZAorICoKKyAqIFRo
aXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQv
b3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVy
YWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBG
b3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlv
dXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlz
dHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRI
T1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisg
KiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBT
ZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRl
dGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05V
IExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJh
cnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBG
cmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGgg
Rmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaW5jbHVkZSAi
Y29uZmlnLmgiCisKKyNpZiBFTkFCTEUoU1ZHKQorI2luY2x1ZGUgIlJlbmRlclNWR1NoYXBlLmgi
CisKKyNpbmNsdWRlICJGbG9hdFBvaW50LmgiCisjaW5jbHVkZSAiRmxvYXRRdWFkLmgiCisjaW5j
bHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCisjaW5jbHVkZSAiSGl0VGVzdFJlcXVlc3QuaCIKKyNp
bmNsdWRlICJMYXlvdXRSZXBhaW50ZXIuaCIKKyNpbmNsdWRlICJQb2ludGVyRXZlbnRzSGl0UnVs
ZXMuaCIKKyNpbmNsdWRlICJSZW5kZXJTVkdDb250YWluZXIuaCIKKyNpbmNsdWRlICJSZW5kZXJT
VkdSZXNvdXJjZU1hcmtlci5oIgorI2luY2x1ZGUgIlJlbmRlclNWR1Jlc291cmNlU29saWRDb2xv
ci5oIgorI2luY2x1ZGUgIlNWR1BhdGhFbGVtZW50LmgiCisjaW5jbHVkZSAiU1ZHUmVuZGVyU3Vw
cG9ydC5oIgorI2luY2x1ZGUgIlNWR1Jlc291cmNlcy5oIgorI2luY2x1ZGUgIlNWR1N0eWxlZFRy
YW5zZm9ybWFibGVFbGVtZW50LmgiCisjaW5jbHVkZSAiU1ZHVHJhbnNmb3JtTGlzdC5oIgorI2lu
Y2x1ZGUgIlNWR1VSSVJlZmVyZW5jZS5oIgorI2luY2x1ZGUgIlN0cm9rZVN0eWxlQXBwbGllci5o
IgorI2luY2x1ZGUgPHd0Zi9NYXRoRXh0cmFzLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKwor
UmVuZGVyU1ZHU2hhcGU6OlJlbmRlclNWR1NoYXBlKFNWR1N0eWxlZFRyYW5zZm9ybWFibGVFbGVt
ZW50KiBub2RlKQorICAgIDogUmVuZGVyU1ZHTW9kZWxPYmplY3Qobm9kZSkKKyAgICAsIG1fbmVl
ZHNCb3VuZGFyaWVzVXBkYXRlKGZhbHNlKSAvLyBEZWZhdWx0IGlzIGZhbHNlLCB0aGUgY2FjaGVk
IHJlY3RzIGFyZSBlbXB0eSBmcm9tIHRoZSBiZWdpbm5pbmcuCisgICAgLCBtX25lZWRzU2hhcGVV
cGRhdGUodHJ1ZSkgLy8gRGVmYXVsdCBpcyB0cnVlLCBzbyB3ZSBncmFiIGEgUGF0aCBvYmplY3Qg
b25jZSBmcm9tIFNWR1N0eWxlZFRyYW5zZm9ybWFibGVFbGVtZW50LgorICAgICwgbV9uZWVkc1Ry
YW5zZm9ybVVwZGF0ZSh0cnVlKSAvLyBEZWZhdWx0IGlzIHRydWUsIHNvIHdlIGdyYWIgYSBBZmZp
bmVUcmFuc2Zvcm0gb2JqZWN0IG9uY2UgZnJvbSBTVkdTdHlsZWRUcmFuc2Zvcm1hYmxlRWxlbWVu
dC4KKyAgICAsIG1fZmlsbEZhbGxiYWNrKGZhbHNlKQoreworfQorCitSZW5kZXJTVkdTaGFwZTo6
UmVuZGVyU1ZHU2hhcGUoU1ZHU3R5bGVkVHJhbnNmb3JtYWJsZUVsZW1lbnQqIG5vZGUsIFBhdGgq
IHBhdGgsIGJvb2wgaXNGaWxsRmFsbGJhY2spCisgICAgOiBSZW5kZXJTVkdNb2RlbE9iamVjdChu
b2RlKQorICAgICwgbV9maWxsRmFsbGJhY2soaXNGaWxsRmFsbGJhY2spCit7CisgICAgIG1fcGF0
aCA9IGFkb3B0UHRyKHBhdGgpOworfQorCitSZW5kZXJTVkdTaGFwZTo6flJlbmRlclNWR1NoYXBl
KCkKK3sKK30KKwordm9pZCBSZW5kZXJTVkdTaGFwZTo6Y3JlYXRlU2hhcGUoKQoreworICAgIG1f
cGF0aCA9IGFkb3B0UHRyKG5ldyBQYXRoKTsKKyAgICBBU1NFUlQoaXNFbXB0eSgpKTsKKworICAg
IFNWR1BhdGhFbGVtZW50KiBlbGVtZW50ID0gc3RhdGljX2Nhc3Q8U1ZHUGF0aEVsZW1lbnQqPihu
b2RlKCkpOworICAgIGVsZW1lbnQtPnRvUGF0aERhdGEocGF0aCgpKTsKK30KKworYm9vbCBSZW5k
ZXJTVkdTaGFwZTo6aXNFbXB0eSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fcGF0aC0+aXNFbXB0
eSgpOworfQorCit2b2lkIFJlbmRlclNWR1NoYXBlOjpmaWxsU2hhcGUoR3JhcGhpY3NDb250ZXh0
KiBjb250ZXh0KSBjb25zdAoreworICAgIGNvbnRleHQtPmZpbGxQYXRoKHBhdGgoKSk7Cit9CisK
K0Zsb2F0UmVjdCBSZW5kZXJTVkdTaGFwZTo6b2JqZWN0Qm91bmRpbmdCb3goKSBjb25zdAorewor
ICAgIHJldHVybiBtX3BhdGgtPmJvdW5kaW5nUmVjdCgpOworfQorCitGbG9hdFJlY3QgUmVuZGVy
U1ZHU2hhcGU6OnN0cm9rZUJvdW5kaW5nQm94KCkgY29uc3QKK3sKKyAgICBCb3VuZGluZ1JlY3RT
dHJva2VTdHlsZUFwcGxpZXIgc3Ryb2tlU3R5bGUodGhpcywgc3R5bGUoKSk7CisgICAgcmV0dXJu
IG1fcGF0aC0+c3Ryb2tlQm91bmRpbmdSZWN0KCZzdHJva2VTdHlsZSk7Cit9CisKK3ZvaWQgUmVu
ZGVyU1ZHU2hhcGU6OnN0cm9rZVNoYXBlKEdyYXBoaWNzQ29udGV4dCogY29udGV4dCkgY29uc3QK
K3sKKyAgICBjb250ZXh0LT5zdHJva2VQYXRoKHBhdGgoKSk7Cit9CisKK2Jvb2wgUmVuZGVyU1ZH
U2hhcGU6OnNoYXBlRGVwZW5kZW50U3Ryb2tlQ29udGFpbnMoY29uc3QgRmxvYXRQb2ludCYgcG9p
bnQpIGNvbnN0Cit7CisgICAgQm91bmRpbmdSZWN0U3Ryb2tlU3R5bGVBcHBsaWVyIGFwcGxpZXIo
dGhpcywgc3R5bGUoKSk7CisgICAgcmV0dXJuIG1fcGF0aC0+c3Ryb2tlQ29udGFpbnMoJmFwcGxp
ZXIsIHBvaW50KTsKK30KKworYm9vbCBSZW5kZXJTVkdTaGFwZTo6c2hhcGVEZXBlbmRlbnRGaWxs
Q29udGFpbnMoY29uc3QgRmxvYXRQb2ludCYgcG9pbnQsIGNvbnN0IFdpbmRSdWxlIGZpbGxSdWxl
KSBjb25zdAoreworICAgIHJldHVybiBtX3BhdGgtPmNvbnRhaW5zKHBvaW50LCBmaWxsUnVsZSk7
Cit9CisKK2Jvb2wgUmVuZGVyU1ZHU2hhcGU6OmZpbGxDb250YWlucyhjb25zdCBGbG9hdFBvaW50
JiBwb2ludCwgYm9vbCByZXF1aXJlc0ZpbGwsIGNvbnN0IFdpbmRSdWxlIGZpbGxSdWxlKQorewor
ICAgIGlmICghbV9maWxsQm91bmRpbmdCb3guY29udGFpbnMocG9pbnQpKQorICAgICAgICByZXR1
cm4gZmFsc2U7CisKKyAgICBDb2xvciBmYWxsYmFja0NvbG9yOworICAgIGlmIChyZXF1aXJlc0Zp
bGwgJiYgIVJlbmRlclNWR1Jlc291cmNlOjpmaWxsUGFpbnRpbmdSZXNvdXJjZSh0aGlzLCBzdHls
ZSgpLCBmYWxsYmFja0NvbG9yKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgcmV0dXJu
IHNoYXBlRGVwZW5kZW50RmlsbENvbnRhaW5zKHBvaW50LCBmaWxsUnVsZSk7Cit9CisKK2Jvb2wg
UmVuZGVyU1ZHU2hhcGU6OnN0cm9rZUNvbnRhaW5zKGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50LCBi
b29sIHJlcXVpcmVzU3Ryb2tlKQoreworICAgIGlmICghbV9zdHJva2VBbmRNYXJrZXJCb3VuZGlu
Z0JveC5jb250YWlucyhwb2ludCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIENvbG9y
IGZhbGxiYWNrQ29sb3I7CisgICAgaWYgKHJlcXVpcmVzU3Ryb2tlICYmICFSZW5kZXJTVkdSZXNv
dXJjZTo6c3Ryb2tlUGFpbnRpbmdSZXNvdXJjZSh0aGlzLCBzdHlsZSgpLCBmYWxsYmFja0NvbG9y
KSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgaWYgKHNob3VsZFN0cm9rZVplcm9MZW5n
dGhTdWJwYXRoKCkpCisgICAgICAgIHJldHVybiB6ZXJvTGVuZ3RoU3VicGF0aFJlY3QoKS5jb250
YWlucyhwb2ludCk7CisKKyAgICBjb25zdCBTVkdSZW5kZXJTdHlsZSogc3ZnU3R5bGUgPSBzdHls
ZSgpLT5zdmdTdHlsZSgpOworICAgIGlmICghc3ZnU3R5bGUtPnN0cm9rZURhc2hBcnJheSgpLmlz
RW1wdHkoKSB8fCBzdmdTdHlsZS0+c3Ryb2tlTWl0ZXJMaW1pdCgpICE9IHN2Z1N0eWxlLT5pbml0
aWFsU3Ryb2tlTWl0ZXJMaW1pdCgpCisgICAgICAgIHx8IHN2Z1N0eWxlLT5qb2luU3R5bGUoKSAh
PSBzdmdTdHlsZS0+aW5pdGlhbEpvaW5TdHlsZSgpIHx8IHN2Z1N0eWxlLT5jYXBTdHlsZSgpICE9
IHN2Z1N0eWxlLT5pbml0aWFsQ2FwU3R5bGUoKSkgeworICAgICAgICBpZiAoIW1fcGF0aCkKKyAg
ICAgICAgICAgIFJlbmRlclNWR1NoYXBlOjpjcmVhdGVTaGFwZSgpOworICAgICAgICByZXR1cm4g
UmVuZGVyU1ZHU2hhcGU6OnNoYXBlRGVwZW5kZW50U3Ryb2tlQ29udGFpbnMocG9pbnQpOworICAg
IH0KKyAgICByZXR1cm4gc2hhcGVEZXBlbmRlbnRTdHJva2VDb250YWlucyhwb2ludCk7Cit9CisK
K3ZvaWQgUmVuZGVyU1ZHU2hhcGU6OmxheW91dCgpCit7CisgICAgTGF5b3V0UmVwYWludGVyIHJl
cGFpbnRlcigqdGhpcywgY2hlY2tGb3JSZXBhaW50RHVyaW5nTGF5b3V0KCkgJiYgc2VsZk5lZWRz
TGF5b3V0KCkpOworICAgIFNWR1N0eWxlZFRyYW5zZm9ybWFibGVFbGVtZW50KiBlbGVtZW50ID0g
c3RhdGljX2Nhc3Q8U1ZHU3R5bGVkVHJhbnNmb3JtYWJsZUVsZW1lbnQqPihub2RlKCkpOworCisg
ICAgYm9vbCB1cGRhdGVDYWNoZWRCb3VuZGFyaWVzSW5QYXJlbnRzID0gZmFsc2U7CisKKyAgICBi
b29sIG5lZWRzU2hhcGVVcGRhdGUgPSBtX25lZWRzU2hhcGVVcGRhdGU7CisgICAgaWYgKG5lZWRz
U2hhcGVVcGRhdGUpIHsKKyAgICAgICAgY3JlYXRlU2hhcGUoKTsKKyAgICAgICAgbV9uZWVkc1No
YXBlVXBkYXRlID0gZmFsc2U7CisgICAgICAgIHVwZGF0ZUNhY2hlZEJvdW5kYXJpZXNJblBhcmVu
dHMgPSB0cnVlOworICAgIH0KKworICAgIGlmIChtX25lZWRzVHJhbnNmb3JtVXBkYXRlKSB7Cisg
ICAgICAgIG1fbG9jYWxUcmFuc2Zvcm0gPSBlbGVtZW50LT5hbmltYXRlZExvY2FsVHJhbnNmb3Jt
KCk7CisgICAgICAgIG1fbmVlZHNUcmFuc2Zvcm1VcGRhdGUgPSBmYWxzZTsKKyAgICAgICAgdXBk
YXRlQ2FjaGVkQm91bmRhcmllc0luUGFyZW50cyA9IHRydWU7CisgICAgfQorCisgICAgaWYgKG1f
bmVlZHNCb3VuZGFyaWVzVXBkYXRlKSB7CisgICAgICAgIHVwZGF0ZUNhY2hlZEJvdW5kYXJpZXNJ
blBhcmVudHMgPSB0cnVlOworICAgICAgICBzZXRpc1BhaW50aW5nRmFsbGJhY2soZmFsc2UpOwor
ICAgICAgICBjcmVhdGVTaGFwZSgpOworICAgIH0KKworICAgIC8vIEludmFsaWRhdGUgYWxsIHJl
c291cmNlcyBvZiB0aGlzIGNsaWVudCBpZiBvdXIgbGF5b3V0IGNoYW5nZWQuCisgICAgaWYgKG1f
ZXZlckhhZExheW91dCAmJiBzZWxmTmVlZHNMYXlvdXQoKSkgeworICAgICAgICBTVkdSZXNvdXJj
ZXNDYWNoZTo6Y2xpZW50TGF5b3V0Q2hhbmdlZCh0aGlzKTsKKyAgICAgICAgbV9tYXJrZXJMYXlv
dXRJbmZvLmNsZWFyKCk7CisgICAgfQorCisgICAgLy8gQXQgdGhpcyBwb2ludCBMYXlvdXRSZXBh
aW50ZXIgYWxyZWFkeSBncmFiYmVkIHRoZSBvbGQgYm91bmRzLAorICAgIC8vIHJlY2FsY3VsYXRl
IHRoZW0gbm93IHNvIHJlcGFpbnRBZnRlckxheW91dCgpIHVzZXMgdGhlIG5ldyBib3VuZHMuCisg
ICAgaWYgKG5lZWRzU2hhcGVVcGRhdGUgfHwgbV9uZWVkc0JvdW5kYXJpZXNVcGRhdGUpIHsKKyAg
ICAgICAgdXBkYXRlQ2FjaGVkQm91bmRhcmllcygpOworICAgICAgICBtX25lZWRzQm91bmRhcmll
c1VwZGF0ZSA9IGZhbHNlOworICAgIH0KKworICAgIC8vIElmIG91ciBib3VuZHMgY2hhbmdlZCwg
bm90aWZ5IHRoZSBwYXJlbnRzLgorICAgIGlmICh1cGRhdGVDYWNoZWRCb3VuZGFyaWVzSW5QYXJl
bnRzKQorICAgICAgICBSZW5kZXJTVkdNb2RlbE9iamVjdDo6c2V0TmVlZHNCb3VuZGFyaWVzVXBk
YXRlKCk7CisKKyAgICByZXBhaW50ZXIucmVwYWludEFmdGVyTGF5b3V0KCk7CisgICAgc2V0TmVl
ZHNMYXlvdXQoZmFsc2UpOworfQorCitib29sIFJlbmRlclNWR1NoYXBlOjpzaG91bGRTdHJva2Va
ZXJvTGVuZ3RoU3VicGF0aCgpIGNvbnN0Cit7CisgICAgLy8gU3BlYygxMS40KTogQW55IHplcm8g
bGVuZ3RoIHN1YnBhdGggc2hhbGwgbm90IGJlIHN0cm9rZWQgaWYgdGhlIOKAmHN0cm9rZS1saW5l
Y2Fw4oCZIHByb3BlcnR5IGhhcyBhIHZhbHVlIG9mIGJ1dHQKKyAgICAvLyBidXQgc2hhbGwgYmUg
c3Ryb2tlZCBpZiB0aGUg4oCYc3Ryb2tlLWxpbmVjYXDigJkgcHJvcGVydHkgaGFzIGEgdmFsdWUg
b2Ygcm91bmQgb3Igc3F1YXJlCisgICAgcmV0dXJuIHN0eWxlKCktPnN2Z1N0eWxlKCktPmhhc1N0
cm9rZSgpICYmIHN0eWxlKCktPnN2Z1N0eWxlKCktPmNhcFN0eWxlKCkgIT0gQnV0dENhcCAmJiAh
bV9maWxsQm91bmRpbmdCb3gud2lkdGgoKSAmJiAhbV9maWxsQm91bmRpbmdCb3guaGVpZ2h0KCk7
Cit9CisKK0Zsb2F0UmVjdCBSZW5kZXJTVkdTaGFwZTo6emVyb0xlbmd0aFN1YnBhdGhSZWN0KCkg
Y29uc3QKK3sKKyAgICBmbG9hdCBzdHJva2VXaWR0aCA9IHRoaXMtPnN0cm9rZVdpZHRoKCk7Cisg
ICAgcmV0dXJuIEZsb2F0UmVjdChtX2ZpbGxCb3VuZGluZ0JveC54KCkgLSBzdHJva2VXaWR0aCAv
IDIsIG1fZmlsbEJvdW5kaW5nQm94LnkoKSAtIHN0cm9rZVdpZHRoIC8gMiwgc3Ryb2tlV2lkdGgs
IHN0cm9rZVdpZHRoKTsKK30KKwordm9pZCBSZW5kZXJTVkdTaGFwZTo6c2V0dXBTcXVhcmVDYXBQ
YXRoKGludCYgYXBwbHlNb2RlKQoreworICAgIC8vIFNwZWMoMTEuNCk6IEFueSB6ZXJvIGxlbmd0
aCBzdWJwYXRoIHNoYWxsIG5vdCBiZSBzdHJva2VkIGlmIHRoZSDigJhzdHJva2UtbGluZWNhcOKA
mSBwcm9wZXJ0eSBoYXMgYSB2YWx1ZSBvZiBidXR0CisgICAgLy8gYnV0IHNoYWxsIGJlIHN0cm9r
ZWQgaWYgdGhlIOKAmHN0cm9rZS1saW5lY2Fw4oCZIHByb3BlcnR5IGhhcyBhIHZhbHVlIG9mIHJv
dW5kIG9yIHNxdWFyZQorICAgIGFwcGx5TW9kZSA9IEFwcGx5VG9GaWxsTW9kZTsKKyAgICBtX3Bh
dGgtPmNsZWFyKCk7CisgICAgaWYgKHN0eWxlKCktPnN2Z1N0eWxlKCktPmNhcFN0eWxlKCkgPT0g
U3F1YXJlQ2FwKQorICAgICAgICBtX3BhdGgtPmFkZFJlY3QoemVyb0xlbmd0aFN1YnBhdGhSZWN0
KCkpOworICAgIGVsc2UKKyAgICAgICAgbV9wYXRoLT5hZGRFbGxpcHNlKHplcm9MZW5ndGhTdWJw
YXRoUmVjdCgpKTsKK30KKworYm9vbCBSZW5kZXJTVkdTaGFwZTo6c2V0dXBOb25TY2FsaW5nU3Ry
b2tlUGF0aChHcmFwaGljc0NvbnRleHRTdGF0ZVNhdmVyJiBzdGF0ZVNhdmVyKQoreworICAgIFNW
R1N0eWxlZFRyYW5zZm9ybWFibGVFbGVtZW50KiBlbGVtZW50ID0gc3RhdGljX2Nhc3Q8U1ZHU3R5
bGVkVHJhbnNmb3JtYWJsZUVsZW1lbnQqPihub2RlKCkpOworICAgIEFmZmluZVRyYW5zZm9ybSBu
b25TY2FsaW5nU3Ryb2tlVHJhbnNmb3JtID0gZWxlbWVudC0+Z2V0U2NyZWVuQ1RNKFNWR0xvY2F0
YWJsZTo6RGlzYWxsb3dTdHlsZVVwZGF0ZSk7CisgICAgaWYgKCFub25TY2FsaW5nU3Ryb2tlVHJh
bnNmb3JtLmlzSW52ZXJ0aWJsZSgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBtX3Bh
dGgtPnRyYW5zZm9ybShub25TY2FsaW5nU3Ryb2tlVHJhbnNmb3JtKTsKKworICAgIHN0YXRlU2F2
ZXIuc2F2ZSgpOworICAgIHN0YXRlU2F2ZXIuY29udGV4dCgpLT5jb25jYXRDVE0obm9uU2NhbGlu
Z1N0cm9rZVRyYW5zZm9ybS5pbnZlcnNlKCkpOworICAgIHJldHVybiB0cnVlOworfQorCit2b2lk
IFJlbmRlclNWR1NoYXBlOjpmaWxsQW5kU3Ryb2tlUGF0aChHcmFwaGljc0NvbnRleHQqIGNvbnRl
eHQpCit7CisgICAgUmVuZGVyU3R5bGUqIHN0eWxlID0gdGhpcy0+c3R5bGUoKTsKKworICAgIENv
bG9yIGZhbGxiYWNrQ29sb3I7CisgICAgaWYgKFJlbmRlclNWR1Jlc291cmNlKiBmaWxsUGFpbnRp
bmdSZXNvdXJjZSA9IFJlbmRlclNWR1Jlc291cmNlOjpmaWxsUGFpbnRpbmdSZXNvdXJjZSh0aGlz
LCBzdHlsZSwgZmFsbGJhY2tDb2xvcikpIHsKKyAgICAgICAgaWYgKGZpbGxQYWludGluZ1Jlc291
cmNlLT5hcHBseVJlc291cmNlKHRoaXMsIHN0eWxlLCBjb250ZXh0LCBBcHBseVRvRmlsbE1vZGUp
KQorICAgICAgICAgICAgZmlsbFBhaW50aW5nUmVzb3VyY2UtPnBvc3RBcHBseVJlc291cmNlKHRo
aXMsIGNvbnRleHQsIEFwcGx5VG9GaWxsTW9kZSwgMCwgdGhpcyk7CisgICAgICAgIGVsc2UgaWYg
KGZhbGxiYWNrQ29sb3IuaXNWYWxpZCgpKSB7CisgICAgICAgICAgICBSZW5kZXJTVkdSZXNvdXJj
ZVNvbGlkQ29sb3IqIGZhbGxiYWNrUmVzb3VyY2UgPSBSZW5kZXJTVkdSZXNvdXJjZTo6c2hhcmVk
U29saWRQYWludGluZ1Jlc291cmNlKCk7CisgICAgICAgICAgICBmYWxsYmFja1Jlc291cmNlLT5z
ZXRDb2xvcihmYWxsYmFja0NvbG9yKTsKKyAgICAgICAgICAgIGlmIChmYWxsYmFja1Jlc291cmNl
LT5hcHBseVJlc291cmNlKHRoaXMsIHN0eWxlLCBjb250ZXh0LCBBcHBseVRvRmlsbE1vZGUpKQor
ICAgICAgICAgICAgICAgIGZhbGxiYWNrUmVzb3VyY2UtPnBvc3RBcHBseVJlc291cmNlKHRoaXMs
IGNvbnRleHQsIEFwcGx5VG9GaWxsTW9kZSwgMCwgdGhpcyk7CisgICAgICAgIH0KKyAgICB9CisK
KyAgICBmYWxsYmFja0NvbG9yID0gQ29sb3IoKTsKKyAgICBSZW5kZXJTVkdSZXNvdXJjZSogc3Ry
b2tlUGFpbnRpbmdSZXNvdXJjZSA9IFJlbmRlclNWR1Jlc291cmNlOjpzdHJva2VQYWludGluZ1Jl
c291cmNlKHRoaXMsIHN0eWxlLCBmYWxsYmFja0NvbG9yKTsKKyAgICBpZiAoIXN0cm9rZVBhaW50
aW5nUmVzb3VyY2UpCisgICAgICAgIHJldHVybjsKKworICAgIGludCBhcHBseU1vZGUgPSBBcHBs
eVRvU3Ryb2tlTW9kZTsKKworICAgIGJvb2wgbm9uU2NhbGluZ1N0cm9rZSA9IHN0eWxlLT5zdmdT
dHlsZSgpLT52ZWN0b3JFZmZlY3QoKSA9PSBWRV9OT05fU0NBTElOR19TVFJPS0U7CisKKyAgICBH
cmFwaGljc0NvbnRleHRTdGF0ZVNhdmVyIHN0YXRlU2F2ZXIoKmNvbnRleHQsIGZhbHNlKTsKKwor
ICAgIC8vIFNwZWMoMTEuNCk6IEFueSB6ZXJvIGxlbmd0aCBzdWJwYXRoIHNoYWxsIG5vdCBiZSBz
dHJva2VkIGlmIHRoZSDigJhzdHJva2UtbGluZWNhcOKAmSBwcm9wZXJ0eSBoYXMgYSB2YWx1ZSBv
ZiBidXR0CisgICAgLy8gYnV0IHNoYWxsIGJlIHN0cm9rZWQgaWYgdGhlIOKAmHN0cm9rZS1saW5l
Y2Fw4oCZIHByb3BlcnR5IGhhcyBhIHZhbHVlIG9mIHJvdW5kIG9yIHNxdWFyZQorICAgIC8vIEZJ
WE1FOiB0aGlzIGRvZXMgbm90IHdvcmsgZm9yIHplcm8tbGVuZ3RoIHN1YnBhdGhzLCBvbmx5IHdo
ZW4gdG90YWwgcGF0aCBpcyB6ZXJvLWxlbmd0aAorICAgIGlmIChzaG91bGRTdHJva2VaZXJvTGVu
Z3RoU3VicGF0aCgpKSB7CisgICAgICAgIFJlbmRlclNWR1NoYXBlOjpjcmVhdGVTaGFwZSgpOwor
ICAgICAgICBzZXR1cFNxdWFyZUNhcFBhdGgoYXBwbHlNb2RlKTsKKyAgICAgICAgc2V0aXNQYWlu
dGluZ0ZhbGxiYWNrKHRydWUpOworICAgIH0gZWxzZSBpZiAobm9uU2NhbGluZ1N0cm9rZSkgewor
ICAgICAgICBSZW5kZXJTVkdTaGFwZTo6Y3JlYXRlU2hhcGUoKTsKKyAgICAgICAgc2V0aXNQYWlu
dGluZ0ZhbGxiYWNrKHRydWUpOworICAgICAgICBpZiAoIXNldHVwTm9uU2NhbGluZ1N0cm9rZVBh
dGgoc3RhdGVTYXZlcikpCisgICAgICAgICAgICByZXR1cm47CisgICAgfQorICAgIGlmIChzdHJv
a2VQYWludGluZ1Jlc291cmNlLT5hcHBseVJlc291cmNlKHRoaXMsIHN0eWxlLCBjb250ZXh0LCBh
cHBseU1vZGUpKSB7CisgICAgICAgIHN0cm9rZVBhaW50aW5nUmVzb3VyY2UtPnBvc3RBcHBseVJl
c291cmNlKHRoaXMsIGNvbnRleHQsIGFwcGx5TW9kZSwgMCwgdGhpcyk7CisgICAgICAgIHJldHVy
bjsKKyAgICB9CisgICAgaWYgKCFmYWxsYmFja0NvbG9yLmlzVmFsaWQoKSkKKyAgICAgICAgcmV0
dXJuOworICAgIFJlbmRlclNWR1Jlc291cmNlU29saWRDb2xvciogZmFsbGJhY2tSZXNvdXJjZSA9
IFJlbmRlclNWR1Jlc291cmNlOjpzaGFyZWRTb2xpZFBhaW50aW5nUmVzb3VyY2UoKTsKKyAgICBm
YWxsYmFja1Jlc291cmNlLT5zZXRDb2xvcihmYWxsYmFja0NvbG9yKTsKKyAgICBpZiAoZmFsbGJh
Y2tSZXNvdXJjZS0+YXBwbHlSZXNvdXJjZSh0aGlzLCBzdHlsZSwgY29udGV4dCwgYXBwbHlNb2Rl
KSkKKyAgICAgICAgZmFsbGJhY2tSZXNvdXJjZS0+cG9zdEFwcGx5UmVzb3VyY2UodGhpcywgY29u
dGV4dCwgYXBwbHlNb2RlLCAwLCB0aGlzKTsKK30KKwordm9pZCBSZW5kZXJTVkdTaGFwZTo6cGFp
bnQoUGFpbnRJbmZvJiBwYWludEluZm8sIGNvbnN0IEludFBvaW50JikKK3sKKyAgICBpZiAocGFp
bnRJbmZvLmNvbnRleHQtPnBhaW50aW5nRGlzYWJsZWQoKSB8fCBzdHlsZSgpLT52aXNpYmlsaXR5
KCkgPT0gSElEREVOIHx8IGlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJuOworICAgIEZsb2F0UmVj
dCBib3VuZGluZ0JveCA9IHJlcGFpbnRSZWN0SW5Mb2NhbENvb3JkaW5hdGVzKCk7CisgICAgaWYg
KCFTVkdSZW5kZXJTdXBwb3J0OjpwYWludEluZm9JbnRlcnNlY3RzUmVwYWludFJlY3QoYm91bmRp
bmdCb3gsIG1fbG9jYWxUcmFuc2Zvcm0sIHBhaW50SW5mbykpCisgICAgICAgIHJldHVybjsKKyAg
ICBQYWludEluZm8gY2hpbGRQYWludEluZm8ocGFpbnRJbmZvKTsKKyAgICBib29sIGRyYXdzT3V0
bGluZSA9IHN0eWxlKCktPm91dGxpbmVXaWR0aCgpICYmIChjaGlsZFBhaW50SW5mby5waGFzZSA9
PSBQYWludFBoYXNlT3V0bGluZSB8fCBjaGlsZFBhaW50SW5mby5waGFzZSA9PSBQYWludFBoYXNl
U2VsZk91dGxpbmUpOworICAgIGlmIChkcmF3c091dGxpbmUgfHwgY2hpbGRQYWludEluZm8ucGhh
c2UgPT0gUGFpbnRQaGFzZUZvcmVncm91bmQpIHsKKyAgICAgICAgR3JhcGhpY3NDb250ZXh0U3Rh
dGVTYXZlciBzdGF0ZVNhdmVyKCpjaGlsZFBhaW50SW5mby5jb250ZXh0KTsKKyAgICAgICAgY2hp
bGRQYWludEluZm8uYXBwbHlUcmFuc2Zvcm0obV9sb2NhbFRyYW5zZm9ybSk7CisKKyAgICAgICAg
aWYgKGNoaWxkUGFpbnRJbmZvLnBoYXNlID09IFBhaW50UGhhc2VGb3JlZ3JvdW5kKSB7CisgICAg
ICAgICAgICBQYWludEluZm8gc2F2ZWRJbmZvKGNoaWxkUGFpbnRJbmZvKTsKKworICAgICAgICAg
ICAgaWYgKFNWR1JlbmRlclN1cHBvcnQ6OnByZXBhcmVUb1JlbmRlclNWR0NvbnRlbnQodGhpcywg
Y2hpbGRQYWludEluZm8pKSB7CisgICAgICAgICAgICAgICAgY29uc3QgU1ZHUmVuZGVyU3R5bGUq
IHN2Z1N0eWxlID0gc3R5bGUoKS0+c3ZnU3R5bGUoKTsKKyAgICAgICAgICAgICAgICBpZiAoc3Zn
U3R5bGUtPnNoYXBlUmVuZGVyaW5nKCkgPT0gU1JfQ1JJU1BFREdFUykKKyAgICAgICAgICAgICAg
ICAgICAgY2hpbGRQYWludEluZm8uY29udGV4dC0+c2V0U2hvdWxkQW50aWFsaWFzKGZhbHNlKTsK
KworICAgICAgICAgICAgICAgIGZpbGxBbmRTdHJva2VQYXRoKGNoaWxkUGFpbnRJbmZvLmNvbnRl
eHQpOworCisgICAgICAgICAgICAgICAgaWYgKHN2Z1N0eWxlLT5oYXNNYXJrZXJzKCkpCisgICAg
ICAgICAgICAgICAgICAgIG1fbWFya2VyTGF5b3V0SW5mby5kcmF3TWFya2VycyhjaGlsZFBhaW50
SW5mbyk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIFNWR1JlbmRlclN1cHBvcnQ6OmZp
bmlzaFJlbmRlclNWR0NvbnRlbnQodGhpcywgY2hpbGRQYWludEluZm8sIHNhdmVkSW5mby5jb250
ZXh0KTsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChkcmF3c091dGxpbmUpCisgICAgICAgICAg
ICBwYWludE91dGxpbmUoY2hpbGRQYWludEluZm8uY29udGV4dCwgSW50UmVjdChib3VuZGluZ0Jv
eCkpOworICAgIH0KK30KKworLy8gVGhpcyBtZXRob2QgaXMgY2FsbGVkIGZyb20gaW5zaWRlIHBh
aW50T3V0bGluZSgpIHNpbmNlIHdlIGNhbGwgcGFpbnRPdXRsaW5lKCkKKy8vIHdoaWxlIHRyYW5z
Zm9ybWVkIHRvIG91ciBjb29yZCBzeXN0ZW0sIHJldHVybiBsb2NhbCBjb29yZHMKK3ZvaWQgUmVu
ZGVyU1ZHU2hhcGU6OmFkZEZvY3VzUmluZ1JlY3RzKFZlY3RvcjxMYXlvdXRSZWN0PiYgcmVjdHMs
IGNvbnN0IExheW91dFBvaW50JikKK3sKKyAgICBMYXlvdXRSZWN0IHJlY3QgPSBlbmNsb3NpbmdM
YXlvdXRSZWN0KHJlcGFpbnRSZWN0SW5Mb2NhbENvb3JkaW5hdGVzKCkpOworICAgIGlmICghcmVj
dC5pc0VtcHR5KCkpCisgICAgICAgIHJlY3RzLmFwcGVuZChyZWN0KTsKK30KKworYm9vbCBSZW5k
ZXJTVkdTaGFwZTo6bm9kZUF0RmxvYXRQb2ludChjb25zdCBIaXRUZXN0UmVxdWVzdCYgcmVxdWVz
dCwgSGl0VGVzdFJlc3VsdCYgcmVzdWx0LCBjb25zdCBGbG9hdFBvaW50JiBwb2ludEluUGFyZW50
LCBIaXRUZXN0QWN0aW9uIGhpdFRlc3RBY3Rpb24pCit7CisgICAgLy8gV2Ugb25seSBkcmF3IGlu
IHRoZSBmb3Jncm91bmQgcGhhc2UsIHNvIHdlIG9ubHkgaGl0LXRlc3QgdGhlbi4KKyAgICBpZiAo
aGl0VGVzdEFjdGlvbiAhPSBIaXRUZXN0Rm9yZWdyb3VuZCkKKyAgICAgICAgcmV0dXJuIGZhbHNl
OworCisgICAgRmxvYXRQb2ludCBsb2NhbFBvaW50ID0gbV9sb2NhbFRyYW5zZm9ybS5pbnZlcnNl
KCkubWFwUG9pbnQocG9pbnRJblBhcmVudCk7CisKKyAgICBpZiAoIVNWR1JlbmRlclN1cHBvcnQ6
OnBvaW50SW5DbGlwcGluZ0FyZWEodGhpcywgbG9jYWxQb2ludCkpCisgICAgICAgIHJldHVybiBm
YWxzZTsKKworICAgIFBvaW50ZXJFdmVudHNIaXRSdWxlcyBoaXRSdWxlcyhQb2ludGVyRXZlbnRz
SGl0UnVsZXM6OlNWR19QQVRIX0hJVFRFU1RJTkcsIHJlcXVlc3QsIHN0eWxlKCktPnBvaW50ZXJF
dmVudHMoKSk7CisgICAgYm9vbCBpc1Zpc2libGUgPSAoc3R5bGUoKS0+dmlzaWJpbGl0eSgpID09
IFZJU0lCTEUpOworICAgIGlmIChpc1Zpc2libGUgfHwgIWhpdFJ1bGVzLnJlcXVpcmVWaXNpYmxl
KSB7CisgICAgICAgIGNvbnN0IFNWR1JlbmRlclN0eWxlKiBzdmdTdHlsZSA9IHN0eWxlKCktPnN2
Z1N0eWxlKCk7CisgICAgICAgIFdpbmRSdWxlIGZpbGxSdWxlID0gc3ZnU3R5bGUtPmZpbGxSdWxl
KCk7CisgICAgICAgIGlmIChyZXF1ZXN0LnN2Z0NsaXBDb250ZW50KCkpCisgICAgICAgICAgICBm
aWxsUnVsZSA9IHN2Z1N0eWxlLT5jbGlwUnVsZSgpOworICAgICAgICBpZiAoKGhpdFJ1bGVzLmNh
bkhpdFN0cm9rZSAmJiAoc3ZnU3R5bGUtPmhhc1N0cm9rZSgpIHx8ICFoaXRSdWxlcy5yZXF1aXJl
U3Ryb2tlKSAmJiBzdHJva2VDb250YWlucyhsb2NhbFBvaW50LCBoaXRSdWxlcy5yZXF1aXJlU3Ry
b2tlKSkKKyAgICAgICAgICAgIHx8IChoaXRSdWxlcy5jYW5IaXRGaWxsICYmIChzdmdTdHlsZS0+
aGFzRmlsbCgpIHx8ICFoaXRSdWxlcy5yZXF1aXJlRmlsbCkgJiYgZmlsbENvbnRhaW5zKGxvY2Fs
UG9pbnQsIGhpdFJ1bGVzLnJlcXVpcmVGaWxsLCBmaWxsUnVsZSkpKSB7CisgICAgICAgICAgICB1
cGRhdGVIaXRUZXN0UmVzdWx0KHJlc3VsdCwgcm91bmRlZExheW91dFBvaW50KGxvY2FsUG9pbnQp
KTsKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9CisgICAgfQorICAgIHJldHVy
biBmYWxzZTsKK30KKworRmxvYXRSZWN0IFJlbmRlclNWR1NoYXBlOjpjYWxjdWxhdGVNYXJrZXJC
b3VuZHNJZk5lZWRlZCgpCit7CisgICAgU1ZHRWxlbWVudCogc3ZnRWxlbWVudCA9IHN0YXRpY19j
YXN0PFNWR0VsZW1lbnQqPihub2RlKCkpOworICAgIEFTU0VSVChzdmdFbGVtZW50ICYmIHN2Z0Vs
ZW1lbnQtPmRvY3VtZW50KCkpOworICAgIGlmICghc3ZnRWxlbWVudC0+aXNTdHlsZWQoKSkKKyAg
ICAgICAgcmV0dXJuIEZsb2F0UmVjdCgpOworCisgICAgU1ZHU3R5bGVkRWxlbWVudCogc3R5bGVk
RWxlbWVudCA9IHN0YXRpY19jYXN0PFNWR1N0eWxlZEVsZW1lbnQqPihzdmdFbGVtZW50KTsKKyAg
ICBpZiAoIXN0eWxlZEVsZW1lbnQtPnN1cHBvcnRzTWFya2VycygpKQorICAgICAgICByZXR1cm4g
RmxvYXRSZWN0KCk7CisKKyAgICBBU1NFUlQoc3R5bGUoKS0+c3ZnU3R5bGUoKS0+aGFzTWFya2Vy
cygpKTsKKworICAgIFNWR1Jlc291cmNlcyogcmVzb3VyY2VzID0gU1ZHUmVzb3VyY2VzQ2FjaGU6
OmNhY2hlZFJlc291cmNlc0ZvclJlbmRlck9iamVjdCh0aGlzKTsKKyAgICBpZiAoIXJlc291cmNl
cykKKyAgICAgICAgcmV0dXJuIEZsb2F0UmVjdCgpOworCisgICAgUmVuZGVyU1ZHUmVzb3VyY2VN
YXJrZXIqIG1hcmtlclN0YXJ0ID0gcmVzb3VyY2VzLT5tYXJrZXJTdGFydCgpOworICAgIFJlbmRl
clNWR1Jlc291cmNlTWFya2VyKiBtYXJrZXJNaWQgPSByZXNvdXJjZXMtPm1hcmtlck1pZCgpOwor
ICAgIFJlbmRlclNWR1Jlc291cmNlTWFya2VyKiBtYXJrZXJFbmQgPSByZXNvdXJjZXMtPm1hcmtl
ckVuZCgpOworICAgIGlmICghbWFya2VyU3RhcnQgJiYgIW1hcmtlck1pZCAmJiAhbWFya2VyRW5k
KQorICAgICAgICByZXR1cm4gRmxvYXRSZWN0KCk7CisKKyAgICByZXR1cm4gbV9tYXJrZXJMYXlv
dXRJbmZvLmNhbGN1bGF0ZUJvdW5kYXJpZXMobWFya2VyU3RhcnQsIG1hcmtlck1pZCwgbWFya2Vy
RW5kLCBzdHJva2VXaWR0aCgpLCBwYXRoKCkpOworfQorCit2b2lkIFJlbmRlclNWR1NoYXBlOjp1
cGRhdGVDYWNoZWRCb3VuZGFyaWVzKCkKK3sKKyAgICBpZiAoaXNFbXB0eSgpKSB7CisgICAgICAg
IG1fZmlsbEJvdW5kaW5nQm94ID0gRmxvYXRSZWN0KCk7CisgICAgICAgIG1fc3Ryb2tlQW5kTWFy
a2VyQm91bmRpbmdCb3ggPSBGbG9hdFJlY3QoKTsKKyAgICAgICAgbV9yZXBhaW50Qm91bmRpbmdC
b3ggPSBGbG9hdFJlY3QoKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIC8vIENhY2hl
IF91bmNsaXBwZWRfIGZpbGwgYm91bmRpbmcgYm94LCB1c2VkIGZvciBjYWxjdWxhdGlvbnMgaW4g
cmVzb3VyY2VzCisgICAgbV9maWxsQm91bmRpbmdCb3ggPSBvYmplY3RCb3VuZGluZ0JveCgpOwor
CisgICAgLy8gU3BlYygxMS40KTogQW55IHplcm8gbGVuZ3RoIHN1YnBhdGggc2hhbGwgbm90IGJl
IHN0cm9rZWQgaWYgdGhlIOKAmHN0cm9rZS1saW5lY2Fw4oCZIHByb3BlcnR5IGhhcyBhIHZhbHVl
IG9mIGJ1dHQKKyAgICAvLyBidXQgc2hhbGwgYmUgc3Ryb2tlZCBpZiB0aGUg4oCYc3Ryb2tlLWxp
bmVjYXDigJkgcHJvcGVydHkgaGFzIGEgdmFsdWUgb2Ygcm91bmQgb3Igc3F1YXJlCisgICAgaWYg
KHNob3VsZFN0cm9rZVplcm9MZW5ndGhTdWJwYXRoKCkpIHsKKyAgICAgICAgbV9zdHJva2VBbmRN
YXJrZXJCb3VuZGluZ0JveCA9IHplcm9MZW5ndGhTdWJwYXRoUmVjdCgpOworICAgICAgICAvLyBD
YWNoZSBzbWFsbGVzdCBwb3NzaWJsZSByZXBhaW50IHJlY3RhbmdsZQorICAgICAgICBtX3JlcGFp
bnRCb3VuZGluZ0JveCA9IG1fc3Ryb2tlQW5kTWFya2VyQm91bmRpbmdCb3g7CisgICAgICAgIFNW
R1JlbmRlclN1cHBvcnQ6OmludGVyc2VjdFJlcGFpbnRSZWN0V2l0aFJlc291cmNlcyh0aGlzLCBt
X3JlcGFpbnRCb3VuZGluZ0JveCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICAvLyBD
YWNoZSBfdW5jbGlwcGVkXyBzdHJva2UgYm91bmRpbmcgYm94LCB1c2VkIGZvciBjYWxjdWxhdGlv
bnMgaW4gcmVzb3VyY2VzIChpbmNsdWRlcyBtYXJrZXIgYm91bmRhcmllcykKKyAgICBtX3N0cm9r
ZUFuZE1hcmtlckJvdW5kaW5nQm94ID0gbV9maWxsQm91bmRpbmdCb3g7CisKKyAgICBjb25zdCBT
VkdSZW5kZXJTdHlsZSogc3ZnU3R5bGUgPSBzdHlsZSgpLT5zdmdTdHlsZSgpOworICAgIGlmIChz
dmdTdHlsZS0+aGFzU3Ryb2tlKCkpCisgICAgICAgIG1fc3Ryb2tlQW5kTWFya2VyQm91bmRpbmdC
b3gudW5pdGUoc3Ryb2tlQm91bmRpbmdCb3goKSk7CisKKyAgICBpbmZsYXRlV2l0aE1hcmtlckJv
dW5kcygpOworCisgICAgLy8gQ2FjaGUgc21hbGxlc3QgcG9zc2libGUgcmVwYWludCByZWN0YW5n
bGUKKyAgICBtX3JlcGFpbnRCb3VuZGluZ0JveCA9IG1fc3Ryb2tlQW5kTWFya2VyQm91bmRpbmdC
b3g7CisgICAgU1ZHUmVuZGVyU3VwcG9ydDo6aW50ZXJzZWN0UmVwYWludFJlY3RXaXRoUmVzb3Vy
Y2VzKHRoaXMsIG1fcmVwYWludEJvdW5kaW5nQm94KTsKK30KKworZmxvYXQgUmVuZGVyU1ZHU2hh
cGU6OnN0cm9rZVdpZHRoKCkgY29uc3QKK3sKKyAgICBTVkdFbGVtZW50KiBzdmdFbGVtZW50ID0g
c3RhdGljX2Nhc3Q8U1ZHRWxlbWVudCo+KG5vZGUoKSk7CisgICAgcmV0dXJuIHN0eWxlKCktPnN2
Z1N0eWxlKCktPnN0cm9rZVdpZHRoKCkudmFsdWUoc3ZnRWxlbWVudCk7Cit9CisKK30KKworI2Vu
ZGlmIC8vIEVOQUJMRShTVkcpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
c3ZnL1JlbmRlclNWR1NoYXBlLmggYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRl
clNWR1NoYXBlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2U5MzA1NAot
LS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZH
U2hhcGUuaApAQCAtMCwwICsxLDE1OSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwNCwgMjAw
NSwgMjAwNyBOaWtvbGFzIFppbW1lcm1hbm4gPHppbW1lcm1hbm5Aa2RlLm9yZz4KKyAqIENvcHly
aWdodCAoQykgMjAwNCwgMjAwNSBSb2IgQnVpcyA8YnVpc0BrZGUub3JnPgorICogQ29weXJpZ2h0
IChDKSAyMDA1IEVyaWMgU2VpZGVsIDxlcmljQHdlYmtpdC5vcmc+CisgKiBDb3B5cmlnaHQgKEMp
IDIwMDYgQXBwbGUgQ29tcHV0ZXIsIEluYworICogQ29weXJpZ2h0IChDKSAyMDA5IEdvb2dsZSwg
SW5jLgorICogQ29weXJpZ2h0IChDKSAyMDExIFJlbmF0YSBIb2RvdmFuIDxyZW5pQHdlYmtpdC5v
cmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgVW5pdmVyc2l0eSBvZiBTemVnZWQKKyAqCisgKiBU
aGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5k
L29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5l
cmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUg
Rm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5
b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRp
c3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lU
SE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgor
ICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAg
U2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBk
ZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdO
VSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJy
YXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUg
RnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRo
IEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2lmbmRlZiBS
ZW5kZXJTVkdTaGFwZV9oCisjZGVmaW5lIFJlbmRlclNWR1NoYXBlX2gKKworI2lmIEVOQUJMRShT
VkcpCisjaW5jbHVkZSAiQWZmaW5lVHJhbnNmb3JtLmgiCisjaW5jbHVkZSAiRmxvYXRSZWN0Lmgi
CisjaW5jbHVkZSAiUmVuZGVyU1ZHTW9kZWxPYmplY3QuaCIKKyNpbmNsdWRlICJTVkdNYXJrZXJM
YXlvdXRJbmZvLmgiCisjaW5jbHVkZSAiU3Ryb2tlU3R5bGVBcHBsaWVyLmgiCisjaW5jbHVkZSA8
d3RmL093blB0ci5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIEZsb2F0UG9pbnQ7
CitjbGFzcyBHcmFwaGljc0NvbnRleHRTdGF0ZVNhdmVyOworY2xhc3MgUmVuZGVyU1ZHQ29udGFp
bmVyOworY2xhc3MgUmVuZGVyU1ZHUGF0aDsKK2NsYXNzIFNWR1N0eWxlZFRyYW5zZm9ybWFibGVF
bGVtZW50OworCitjbGFzcyBCb3VuZGluZ1JlY3RTdHJva2VTdHlsZUFwcGxpZXIgOiBwdWJsaWMg
U3Ryb2tlU3R5bGVBcHBsaWVyIHsKK3B1YmxpYzoKKyAgICBCb3VuZGluZ1JlY3RTdHJva2VTdHls
ZUFwcGxpZXIoY29uc3QgUmVuZGVyT2JqZWN0KiBvYmplY3QsIFJlbmRlclN0eWxlKiBzdHlsZSkK
KyAgICAgICAgOiBtX29iamVjdChvYmplY3QpCisgICAgICAgICwgbV9zdHlsZShzdHlsZSkKKyAg
ICB7CisgICAgICAgIEFTU0VSVChzdHlsZSk7CisgICAgICAgIEFTU0VSVChvYmplY3QpOworICAg
IH0KKworICAgIHZvaWQgc3Ryb2tlU3R5bGUoR3JhcGhpY3NDb250ZXh0KiBnYykKKyAgICB7Cisg
ICAgICAgIFNWR1JlbmRlclN1cHBvcnQ6OmFwcGx5U3Ryb2tlU3R5bGVUb0NvbnRleHQoZ2MsIG1f
c3R5bGUsIG1fb2JqZWN0KTsKKyAgICB9CisKK3ByaXZhdGU6CisgICAgY29uc3QgUmVuZGVyT2Jq
ZWN0KiBtX29iamVjdDsKKyAgICBSZW5kZXJTdHlsZSogbV9zdHlsZTsKK307CisKK2NsYXNzIFJl
bmRlclNWR1NoYXBlIDogcHVibGljIFJlbmRlclNWR01vZGVsT2JqZWN0IHsKK3B1YmxpYzoKKyAg
ICBleHBsaWNpdCBSZW5kZXJTVkdTaGFwZShTVkdTdHlsZWRUcmFuc2Zvcm1hYmxlRWxlbWVudCop
OworICAgIFJlbmRlclNWR1NoYXBlKFNWR1N0eWxlZFRyYW5zZm9ybWFibGVFbGVtZW50KiwgUGF0
aCosIGJvb2wpOworICAgIHZpcnR1YWwgflJlbmRlclNWR1NoYXBlKCk7CisKKyAgICB2b2lkIHNl
dE5lZWRzU2hhcGVVcGRhdGUoKSB7IG1fbmVlZHNTaGFwZVVwZGF0ZSA9IHRydWU7IH0KKyAgICB2
aXJ0dWFsIHZvaWQgc2V0TmVlZHNCb3VuZGFyaWVzVXBkYXRlKCkgeyBtX25lZWRzQm91bmRhcmll
c1VwZGF0ZSA9IHRydWU7IH0KKyAgICB2aXJ0dWFsIHZvaWQgc2V0TmVlZHNUcmFuc2Zvcm1VcGRh
dGUoKSB7IG1fbmVlZHNUcmFuc2Zvcm1VcGRhdGUgPSB0cnVlOyB9CisgICAgdmlydHVhbCB2b2lk
IGZpbGxTaGFwZShHcmFwaGljc0NvbnRleHQqKSBjb25zdDsKKyAgICB2aXJ0dWFsIHZvaWQgc3Ry
b2tlU2hhcGUoR3JhcGhpY3NDb250ZXh0KikgY29uc3Q7CisgICAgYm9vbCBpc1BhaW50aW5nRmFs
bGJhY2soKSBjb25zdCB7IHJldHVybiBtX2ZpbGxGYWxsYmFjazsgfQorCisgICAgUGF0aCYgcGF0
aCgpIGNvbnN0CisgICAgeworICAgICAgICBBU1NFUlQobV9wYXRoLmdldCgpKTsKKyAgICAgICAg
cmV0dXJuICptX3BhdGg7CisgICAgfQorCitwcm90ZWN0ZWQ6CisgICAgdmlydHVhbCB2b2lkIGNy
ZWF0ZVNoYXBlKCk7CisgICAgdmlydHVhbCBib29sIGlzRW1wdHkoKSBjb25zdDsKKyAgICB2aXJ0
dWFsIEZsb2F0UmVjdCBvYmplY3RCb3VuZGluZ0JveCgpIGNvbnN0OworICAgIHZpcnR1YWwgRmxv
YXRSZWN0IHN0cm9rZUJvdW5kaW5nQm94KCkgY29uc3Q7CisgICAgdmlydHVhbCBib29sIHNoYXBl
RGVwZW5kZW50U3Ryb2tlQ29udGFpbnMoY29uc3QgRmxvYXRQb2ludCYpIGNvbnN0OworICAgIHZp
cnR1YWwgYm9vbCBzaGFwZURlcGVuZGVudEZpbGxDb250YWlucyhjb25zdCBGbG9hdFBvaW50Jiwg
Y29uc3QgV2luZFJ1bGUpIGNvbnN0OworICAgIGZsb2F0IHN0cm9rZVdpZHRoKCkgY29uc3Q7Cisg
ICAgdm9pZCBzZXRpc1BhaW50aW5nRmFsbGJhY2soYm9vbCBpc0ZhbGxiYWNrKSB7IG1fZmlsbEZh
bGxiYWNrID0gaXNGYWxsYmFjazsgfQorICAgIEZsb2F0UmVjdCBjYWxjdWxhdGVNYXJrZXJCb3Vu
ZHNJZk5lZWRlZCgpOworICAgIHZvaWQgc2V0U3Ryb2tlQW5kTWFya2VyQm91bmRpbmdCb3goRmxv
YXRSZWN0IHJlY3QpIHsgbV9zdHJva2VBbmRNYXJrZXJCb3VuZGluZ0JveCA9IHJlY3Q7IH0KKwor
ICAgIGJvb2wgaGFzUGF0aCgpIGNvbnN0IHsgcmV0dXJuIG1fcGF0aC5nZXQoKTsgfQorCitwcml2
YXRlOgorICAgIC8vIEhpdC1kZXRlY3Rpb24gc2VwYXJhdGVkIGZvciB0aGUgZmlsbCBhbmQgdGhl
IHN0cm9rZQorICAgIGJvb2wgZmlsbENvbnRhaW5zKGNvbnN0IEZsb2F0UG9pbnQmLCBib29sIHJl
cXVpcmVzRmlsbCA9IHRydWUsIGNvbnN0IFdpbmRSdWxlIGZpbGxSdWxlID0gUlVMRV9OT05aRVJP
KTsKKyAgICBib29sIHN0cm9rZUNvbnRhaW5zKGNvbnN0IEZsb2F0UG9pbnQmLCBib29sIHJlcXVp
cmVzU3Ryb2tlID0gdHJ1ZSk7CisKKyAgICB2aXJ0dWFsIEZsb2F0UmVjdCByZXBhaW50UmVjdElu
TG9jYWxDb29yZGluYXRlcygpIGNvbnN0IHsgcmV0dXJuIG1fcmVwYWludEJvdW5kaW5nQm94OyB9
CisgICAgdmlydHVhbCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIGxvY2FsVG9QYXJlbnRUcmFuc2Zv
cm0oKSBjb25zdCB7IHJldHVybiBtX2xvY2FsVHJhbnNmb3JtOyB9CisKKyAgICB2aXJ0dWFsIGJv
b2wgaXNTVkdTaGFwZSgpIGNvbnN0IHsgcmV0dXJuIHRydWU7IH0KKyAgICB2aXJ0dWFsIGNvbnN0
IGNoYXIqIHJlbmRlck5hbWUoKSBjb25zdCB7IHJldHVybiAiUmVuZGVyU1ZHU2hhcGUiOyB9Cisg
ICAgdmlydHVhbCBib29sIGlzUm91bmRlZFJlY3QoKSB7IHJldHVybiBmYWxzZTsgfQorCisgICAg
dmlydHVhbCB2b2lkIGxheW91dCgpOworICAgIHZpcnR1YWwgdm9pZCBwYWludChQYWludEluZm8m
LCBjb25zdCBMYXlvdXRQb2ludCYpOworICAgIHZpcnR1YWwgdm9pZCBhZGRGb2N1c1JpbmdSZWN0
cyhWZWN0b3I8TGF5b3V0UmVjdD4mLCBjb25zdCBMYXlvdXRQb2ludCYpOworICAgIHZpcnR1YWwg
dm9pZCBpbmZsYXRlV2l0aE1hcmtlckJvdW5kcygpIHsgfQorCisgICAgdmlydHVhbCBib29sIG5v
ZGVBdEZsb2F0UG9pbnQoY29uc3QgSGl0VGVzdFJlcXVlc3QmLCBIaXRUZXN0UmVzdWx0JiwgY29u
c3QgRmxvYXRQb2ludCYgcG9pbnRJblBhcmVudCwgSGl0VGVzdEFjdGlvbik7CisKKyAgICB2b2lk
IHVwZGF0ZUNhY2hlZEJvdW5kYXJpZXMoKTsKKworICAgIHZvaWQgc2V0dXBTcXVhcmVDYXBQYXRo
KGludCYgYXBwbHlNb2RlKTsKKyAgICBib29sIHNldHVwTm9uU2NhbGluZ1N0cm9rZVBhdGgoR3Jh
cGhpY3NDb250ZXh0U3RhdGVTYXZlciYpOworICAgIGJvb2wgc2hvdWxkU3Ryb2tlWmVyb0xlbmd0
aFN1YnBhdGgoKSBjb25zdDsKKyAgICBGbG9hdFJlY3QgemVyb0xlbmd0aFN1YnBhdGhSZWN0KCkg
Y29uc3Q7CisKKyAgICB2b2lkIGZpbGxBbmRTdHJva2VQYXRoKEdyYXBoaWNzQ29udGV4dCopOwor
Citwcml2YXRlOgorICAgIEZsb2F0UmVjdCBtX2ZpbGxCb3VuZGluZ0JveDsKKyAgICBGbG9hdFJl
Y3QgbV9zdHJva2VBbmRNYXJrZXJCb3VuZGluZ0JveDsKKyAgICBGbG9hdFJlY3QgbV9yZXBhaW50
Qm91bmRpbmdCb3g7CisgICAgU1ZHTWFya2VyTGF5b3V0SW5mbyBtX21hcmtlckxheW91dEluZm87
CisgICAgQWZmaW5lVHJhbnNmb3JtIG1fbG9jYWxUcmFuc2Zvcm07CisgICAgT3duUHRyPFBhdGg+
IG1fcGF0aDsKKworICAgIGJvb2wgbV9uZWVkc0JvdW5kYXJpZXNVcGRhdGUgOiAxOworICAgIGJv
b2wgbV9uZWVkc1NoYXBlVXBkYXRlIDogMTsKKyAgICBib29sIG1fbmVlZHNUcmFuc2Zvcm1VcGRh
dGUgOiAxOworICAgIGJvb2wgbV9maWxsRmFsbGJhY2sgOiAxOworICAgIGJvb2wgbV9zdHJva2VD
b250YWluc0ZhbGxCYWNrIDogMTsKK307CisKK2lubGluZSBSZW5kZXJTVkdTaGFwZSogdG9SZW5k
ZXJTVkdTaGFwZShSZW5kZXJPYmplY3QqIG9iamVjdCkKK3sKKyAgICBBU1NFUlQoIW9iamVjdCB8
fCBvYmplY3QtPmlzU1ZHU2hhcGUoKSk7CisgICAgcmV0dXJuIHN0YXRpY19jYXN0PFJlbmRlclNW
R1NoYXBlKj4ob2JqZWN0KTsKK30KKworaW5saW5lIGNvbnN0IFJlbmRlclNWR1NoYXBlKiB0b1Jl
bmRlclNWR1NoYXBlKGNvbnN0IFJlbmRlck9iamVjdCogb2JqZWN0KQoreworICAgIEFTU0VSVCgh
b2JqZWN0IHx8IG9iamVjdC0+aXNTVkdTaGFwZSgpKTsKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8
Y29uc3QgUmVuZGVyU1ZHU2hhcGUqPihvYmplY3QpOworfQorCisvLyBUaGlzIHdpbGwgY2F0Y2gg
YW55b25lIGRvaW5nIGFuIHVubmVjZXNzYXJ5IGNhc3QuCit2b2lkIHRvUmVuZGVyU1ZHU2hhcGUo
Y29uc3QgUmVuZGVyU1ZHU2hhcGUqKTsKKworfQorCisjZW5kaWYgLy8gRU5BQkxFKFNWRykKKyNl
bmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdJbmxpbmVU
ZXh0Qm94LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHSW5saW5lVGV4dEJv
eC5jcHAKaW5kZXggYzFjNWFmYS4uNjAxMWViOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL3N2Zy9TVkdJbmxpbmVUZXh0Qm94LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvc3ZnL1NWR0lubGluZVRleHRCb3guY3BwCkBAIC0zNzAsMTQgKzM3MCwxNCBAQCBi
b29sIFNWR0lubGluZVRleHRCb3g6OmFjcXVpcmVQYWludGluZ1Jlc291cmNlKEdyYXBoaWNzQ29u
dGV4dComIGNvbnRleHQsIGZsb2F0CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLXZvaWQgU1ZHSW5s
aW5lVGV4dEJveDo6cmVsZWFzZVBhaW50aW5nUmVzb3VyY2UoR3JhcGhpY3NDb250ZXh0KiYgY29u
dGV4dCwgY29uc3QgUGF0aCogcGF0aCkKK3ZvaWQgU1ZHSW5saW5lVGV4dEJveDo6cmVsZWFzZVBh
aW50aW5nUmVzb3VyY2UoR3JhcGhpY3NDb250ZXh0KiYgY29udGV4dCwgY29uc3QgUGF0aCopCiB7
CiAgICAgQVNTRVJUKG1fcGFpbnRpbmdSZXNvdXJjZSk7CiAKICAgICBSZW5kZXJPYmplY3QqIHBh
cmVudFJlbmRlcmVyID0gcGFyZW50KCktPnJlbmRlcmVyKCk7CiAgICAgQVNTRVJUKHBhcmVudFJl
bmRlcmVyKTsKIAotICAgIG1fcGFpbnRpbmdSZXNvdXJjZS0+cG9zdEFwcGx5UmVzb3VyY2UocGFy
ZW50UmVuZGVyZXIsIGNvbnRleHQsIG1fcGFpbnRpbmdSZXNvdXJjZU1vZGUsIHBhdGgpOworICAg
IG1fcGFpbnRpbmdSZXNvdXJjZS0+cG9zdEFwcGx5UmVzb3VyY2UocGFyZW50UmVuZGVyZXIsIGNv
bnRleHQsIG1fcGFpbnRpbmdSZXNvdXJjZU1vZGUsIC8qUGF0aCovIDAsIC8qUmVuZGVyU1ZHU2hh
cGUqLyAwKTsKICAgICBtX3BhaW50aW5nUmVzb3VyY2UgPSAwOwogfQogCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR1JlbmRlclN1cHBvcnQuY3BwIGIvU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdSZW5kZXJTdXBwb3J0LmNwcAppbmRleCAwMDc5MjE5
Li5iYzEwMTM5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR1Jl
bmRlclN1cHBvcnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHUmVu
ZGVyU3VwcG9ydC5jcHAKQEAgLTE1Myw3ICsxNTMsNyBAQCB2b2lkIFNWR1JlbmRlclN1cHBvcnQ6
OmZpbmlzaFJlbmRlclNWR0NvbnRlbnQoUmVuZGVyT2JqZWN0KiBvYmplY3QsIFBhaW50SW5mbyYg
cAogICAgIFNWR1Jlc291cmNlcyogcmVzb3VyY2VzID0gU1ZHUmVzb3VyY2VzQ2FjaGU6OmNhY2hl
ZFJlc291cmNlc0ZvclJlbmRlck9iamVjdChvYmplY3QpOwogICAgIGlmIChyZXNvdXJjZXMpIHsK
ICAgICAgICAgaWYgKFJlbmRlclNWR1Jlc291cmNlRmlsdGVyKiBmaWx0ZXIgPSByZXNvdXJjZXMt
PmZpbHRlcigpKSB7Ci0gICAgICAgICAgICBmaWx0ZXItPnBvc3RBcHBseVJlc291cmNlKG9iamVj
dCwgcGFpbnRJbmZvLmNvbnRleHQsIEFwcGx5VG9EZWZhdWx0TW9kZSwgLyogcGF0aCAqLzApOwor
ICAgICAgICAgICAgZmlsdGVyLT5wb3N0QXBwbHlSZXNvdXJjZShzdGF0aWNfY2FzdDxSZW5kZXJT
VkdTaGFwZSo+KG9iamVjdCksIHBhaW50SW5mby5jb250ZXh0LCBBcHBseVRvRGVmYXVsdE1vZGUs
IDAsIDApOwogICAgICAgICAgICAgcGFpbnRJbmZvLmNvbnRleHQgPSBzYXZlZENvbnRleHQ7CiAg
ICAgICAgIH0KICAgICB9CkBAIC0yMjUsOSArMjI1LDkgQEAgdm9pZCBTVkdSZW5kZXJTdXBwb3J0
OjpsYXlvdXRDaGlsZHJlbihSZW5kZXJPYmplY3QqIHN0YXJ0LCBib29sIHNlbGZOZWVkc0xheW91
dCkKICAgICAgICAgICAgIC8vIFdoZW4gc2VsZk5lZWRzTGF5b3V0IGlzIGZhbHNlIGFuZCB0aGUg
bGF5b3V0IHNpemUgY2hhbmdlZCwgd2UgaGF2ZSB0byBjaGVjayB3aGV0aGVyIHRoaXMgY2hpbGQg
dXNlcyByZWxhdGl2ZSBsZW5ndGhzCiAgICAgICAgICAgICBpZiAoU1ZHRWxlbWVudCogZWxlbWVu
dCA9IGNoaWxkLT5ub2RlKCktPmlzU1ZHRWxlbWVudCgpID8gc3RhdGljX2Nhc3Q8U1ZHRWxlbWVu
dCo+KGNoaWxkLT5ub2RlKCkpIDogMCkgewogICAgICAgICAgICAgICAgIGlmIChlbGVtZW50LT5p
c1N0eWxlZCgpICYmIHN0YXRpY19jYXN0PFNWR1N0eWxlZEVsZW1lbnQqPihlbGVtZW50KS0+aGFz
UmVsYXRpdmVMZW5ndGhzKCkpIHsKLSAgICAgICAgICAgICAgICAgICAgLy8gV2hlbiB0aGUgbGF5
b3V0IHNpemUgY2hhbmdlZCBhbmQgd2hlbiB1c2luZyByZWxhdGl2ZSB2YWx1ZXMgdGVsbCB0aGUg
UmVuZGVyU1ZHUGF0aCB0byB1cGRhdGUgaXRzIFBhdGggb2JqZWN0Ci0gICAgICAgICAgICAgICAg
ICAgIGlmIChjaGlsZC0+aXNTVkdQYXRoKCkpCi0gICAgICAgICAgICAgICAgICAgICAgICB0b1Jl
bmRlclNWR1BhdGgoY2hpbGQpLT5zZXROZWVkc1BhdGhVcGRhdGUoKTsKKyAgICAgICAgICAgICAg
ICAgICAgLy8gV2hlbiB0aGUgbGF5b3V0IHNpemUgY2hhbmdlZCBhbmQgd2hlbiB1c2luZyByZWxh
dGl2ZSB2YWx1ZXMgdGVsbCB0aGUgUmVuZGVyU1ZHU2hhcGUgdG8gdXBkYXRlIGl0cyBzaGFwZSBv
YmplY3QKKyAgICAgICAgICAgICAgICAgICAgaWYgKGNoaWxkLT5pc1NWR1NoYXBlKCkpCisgICAg
ICAgICAgICAgICAgICAgICAgICB0b1JlbmRlclNWR1NoYXBlKGNoaWxkKS0+c2V0TmVlZHNTaGFw
ZVVwZGF0ZSgpOwogCiAgICAgICAgICAgICAgICAgICAgIG5lZWRzTGF5b3V0ID0gdHJ1ZTsKICAg
ICAgICAgICAgICAgICB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3Zn
L1NWR1JlbmRlclRyZWVBc1RleHQuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9T
VkdSZW5kZXJUcmVlQXNUZXh0LmNwcAppbmRleCBhMTYyOTY5Li5kMWFkNzJhIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR1JlbmRlclRyZWVBc1RleHQuY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHUmVuZGVyVHJlZUFzVGV4dC5jcHAK
QEAgLTU1LDYgKzU1LDcgQEAKICNpbmNsdWRlICJSZW5kZXJTVkdSZXNvdXJjZVJhZGlhbEdyYWRp
ZW50LmgiCiAjaW5jbHVkZSAiUmVuZGVyU1ZHUmVzb3VyY2VTb2xpZENvbG9yLmgiCiAjaW5jbHVk
ZSAiUmVuZGVyU1ZHUm9vdC5oIgorI2luY2x1ZGUgIlJlbmRlclNWR1NoYXBlLmgiCiAjaW5jbHVk
ZSAiUmVuZGVyU1ZHVGV4dC5oIgogI2luY2x1ZGUgIlJlbmRlclRyZWVBc1RleHQuaCIKICNpbmNs
dWRlICJTVkdDaXJjbGVFbGVtZW50LmgiCkBAIC0yODksMTggKzI5MCwxOCBAQCBzdGF0aWMgdm9p
ZCB3cml0ZVN0eWxlKFRleHRTdHJlYW0mIHRzLCBjb25zdCBSZW5kZXJPYmplY3QmIG9iamVjdCkK
ICAgICAgICAgd3JpdGVOYW1lVmFsdWVQYWlyKHRzLCAidHJhbnNmb3JtIiwgb2JqZWN0LmxvY2Fs
VHJhbnNmb3JtKCkpOwogICAgIHdyaXRlSWZOb3REZWZhdWx0KHRzLCAiaW1hZ2UgcmVuZGVyaW5n
Iiwgc3R5bGUtPmltYWdlUmVuZGVyaW5nKCksIFJlbmRlclN0eWxlOjppbml0aWFsSW1hZ2VSZW5k
ZXJpbmcoKSk7CiAgICAgd3JpdGVJZk5vdERlZmF1bHQodHMsICJvcGFjaXR5Iiwgc3R5bGUtPm9w
YWNpdHkoKSwgUmVuZGVyU3R5bGU6OmluaXRpYWxPcGFjaXR5KCkpOwotICAgIGlmIChvYmplY3Qu
aXNTVkdQYXRoKCkpIHsKLSAgICAgICAgY29uc3QgUmVuZGVyU1ZHUGF0aCYgcGF0aCA9IHN0YXRp
Y19jYXN0PGNvbnN0IFJlbmRlclNWR1BhdGgmPihvYmplY3QpOwotICAgICAgICBBU1NFUlQocGF0
aC5ub2RlKCkpOwotICAgICAgICBBU1NFUlQocGF0aC5ub2RlKCktPmlzU1ZHRWxlbWVudCgpKTsK
KyAgICBpZiAob2JqZWN0LmlzU1ZHU2hhcGUoKSkgeworICAgICAgICBjb25zdCBSZW5kZXJTVkdT
aGFwZSYgc2hhcGUgPSBzdGF0aWNfY2FzdDxjb25zdCBSZW5kZXJTVkdTaGFwZSY+KG9iamVjdCk7
CisgICAgICAgIEFTU0VSVChzaGFwZS5ub2RlKCkpOworICAgICAgICBBU1NFUlQoc2hhcGUubm9k
ZSgpLT5pc1NWR0VsZW1lbnQoKSk7CiAKICAgICAgICAgQ29sb3IgZmFsbGJhY2tDb2xvcjsKLSAg
ICAgICAgaWYgKFJlbmRlclNWR1Jlc291cmNlKiBzdHJva2VQYWludGluZ1Jlc291cmNlID0gUmVu
ZGVyU1ZHUmVzb3VyY2U6OnN0cm9rZVBhaW50aW5nUmVzb3VyY2UoY29uc3RfY2FzdDxSZW5kZXJT
VkdQYXRoKj4oJnBhdGgpLCBwYXRoLnN0eWxlKCksIGZhbGxiYWNrQ29sb3IpKSB7CisgICAgICAg
IGlmIChSZW5kZXJTVkdSZXNvdXJjZSogc3Ryb2tlUGFpbnRpbmdSZXNvdXJjZSA9IFJlbmRlclNW
R1Jlc291cmNlOjpzdHJva2VQYWludGluZ1Jlc291cmNlKGNvbnN0X2Nhc3Q8UmVuZGVyU1ZHU2hh
cGUqPigmc2hhcGUpLCBzaGFwZS5zdHlsZSgpLCBmYWxsYmFja0NvbG9yKSkgewogICAgICAgICAg
ICAgVGV4dFN0cmVhbVNlcGFyYXRvciBzKCIgIik7CiAgICAgICAgICAgICB0cyA8PCAiIFtzdHJv
a2U9eyIgPDwgczsKICAgICAgICAgICAgIHdyaXRlU1ZHUGFpbnRpbmdSZXNvdXJjZSh0cywgc3Ry
b2tlUGFpbnRpbmdSZXNvdXJjZSk7CiAKLSAgICAgICAgICAgIFNWR0VsZW1lbnQqIGVsZW1lbnQg
PSBzdGF0aWNfY2FzdDxTVkdFbGVtZW50Kj4ocGF0aC5ub2RlKCkpOworICAgICAgICAgICAgU1ZH
RWxlbWVudCogZWxlbWVudCA9IHN0YXRpY19jYXN0PFNWR0VsZW1lbnQqPihzaGFwZS5ub2RlKCkp
OwogICAgICAgICAgICAgZG91YmxlIGRhc2hPZmZzZXQgPSBzdmdTdHlsZS0+c3Ryb2tlRGFzaE9m
ZnNldCgpLnZhbHVlKGVsZW1lbnQpOwogICAgICAgICAgICAgZG91YmxlIHN0cm9rZVdpZHRoID0g
c3ZnU3R5bGUtPnN0cm9rZVdpZHRoKCkudmFsdWUoZWxlbWVudCk7CiAgICAgICAgICAgICBjb25z
dCBWZWN0b3I8U1ZHTGVuZ3RoPiYgZGFzaGVzID0gc3ZnU3R5bGUtPnN0cm9rZURhc2hBcnJheSgp
OwpAQCAtMzIyLDcgKzMyMyw3IEBAIHN0YXRpYyB2b2lkIHdyaXRlU3R5bGUoVGV4dFN0cmVhbSYg
dHMsIGNvbnN0IFJlbmRlck9iamVjdCYgb2JqZWN0KQogICAgICAgICAgICAgdHMgPDwgIn1dIjsK
ICAgICAgICAgfQogCi0gICAgICAgIGlmIChSZW5kZXJTVkdSZXNvdXJjZSogZmlsbFBhaW50aW5n
UmVzb3VyY2UgPSBSZW5kZXJTVkdSZXNvdXJjZTo6ZmlsbFBhaW50aW5nUmVzb3VyY2UoY29uc3Rf
Y2FzdDxSZW5kZXJTVkdQYXRoKj4oJnBhdGgpLCBwYXRoLnN0eWxlKCksIGZhbGxiYWNrQ29sb3Ip
KSB7CisgICAgICAgIGlmIChSZW5kZXJTVkdSZXNvdXJjZSogZmlsbFBhaW50aW5nUmVzb3VyY2Ug
PSBSZW5kZXJTVkdSZXNvdXJjZTo6ZmlsbFBhaW50aW5nUmVzb3VyY2UoY29uc3RfY2FzdDxSZW5k
ZXJTVkdTaGFwZSo+KCZzaGFwZSksIHNoYXBlLnN0eWxlKCksIGZhbGxiYWNrQ29sb3IpKSB7CiAg
ICAgICAgICAgICBUZXh0U3RyZWFtU2VwYXJhdG9yIHMoIiAiKTsKICAgICAgICAgICAgIHRzIDw8
ICIgW2ZpbGw9eyIgPDwgczsKICAgICAgICAgICAgIHdyaXRlU1ZHUGFpbnRpbmdSZXNvdXJjZSh0
cywgZmlsbFBhaW50aW5nUmVzb3VyY2UpOwpAQCAtMzQ2LDEyICszNDcsMTIgQEAgc3RhdGljIFRl
eHRTdHJlYW0mIHdyaXRlUG9zaXRpb25BbmRTdHlsZShUZXh0U3RyZWFtJiB0cywgY29uc3QgUmVu
ZGVyT2JqZWN0JiBvYmoKICAgICByZXR1cm4gdHM7CiB9CiAKLXN0YXRpYyBUZXh0U3RyZWFtJiBv
cGVyYXRvcjw8KFRleHRTdHJlYW0mIHRzLCBjb25zdCBSZW5kZXJTVkdQYXRoJiBwYXRoKQorc3Rh
dGljIFRleHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYgdHMsIGNvbnN0IFJlbmRlclNW
R1NoYXBlJiBzaGFwZSkKIHsKLSAgICB3cml0ZVBvc2l0aW9uQW5kU3R5bGUodHMsIHBhdGgpOwor
ICAgIHdyaXRlUG9zaXRpb25BbmRTdHlsZSh0cywgc2hhcGUpOwogCi0gICAgQVNTRVJUKHBhdGgu
bm9kZSgpLT5pc1NWR0VsZW1lbnQoKSk7Ci0gICAgU1ZHRWxlbWVudCogc3ZnRWxlbWVudCA9IHN0
YXRpY19jYXN0PFNWR0VsZW1lbnQqPihwYXRoLm5vZGUoKSk7CisgICAgQVNTRVJUKHNoYXBlLm5v
ZGUoKS0+aXNTVkdFbGVtZW50KCkpOworICAgIFNWR0VsZW1lbnQqIHN2Z0VsZW1lbnQgPSBzdGF0
aWNfY2FzdDxTVkdFbGVtZW50Kj4oc2hhcGUubm9kZSgpKTsKIAogICAgIGlmIChzdmdFbGVtZW50
LT5oYXNUYWdOYW1lKFNWR05hbWVzOjpyZWN0VGFnKSkgewogICAgICAgICBTVkdSZWN0RWxlbWVu
dCogZWxlbWVudCA9IHN0YXRpY19jYXN0PFNWR1JlY3RFbGVtZW50Kj4oc3ZnRWxlbWVudCk7CkBA
IC02NTMsMTEgKzY1NCwxMSBAQCB2b2lkIHdyaXRlU1ZHSW1hZ2UoVGV4dFN0cmVhbSYgdHMsIGNv
bnN0IFJlbmRlclNWR0ltYWdlJiBpbWFnZSwgaW50IGluZGVudCkKICAgICB3cml0ZVJlc291cmNl
cyh0cywgaW1hZ2UsIGluZGVudCk7CiB9CiAKLXZvaWQgd3JpdGUoVGV4dFN0cmVhbSYgdHMsIGNv
bnN0IFJlbmRlclNWR1BhdGgmIHBhdGgsIGludCBpbmRlbnQpCit2b2lkIHdyaXRlKFRleHRTdHJl
YW0mIHRzLCBjb25zdCBSZW5kZXJTVkdTaGFwZSYgc2hhcGUsIGludCBpbmRlbnQpCiB7Ci0gICAg
d3JpdGVTdGFuZGFyZFByZWZpeCh0cywgcGF0aCwgaW5kZW50KTsKLSAgICB0cyA8PCBwYXRoIDw8
ICJcbiI7Ci0gICAgd3JpdGVSZXNvdXJjZXModHMsIHBhdGgsIGluZGVudCk7CisgICAgd3JpdGVT
dGFuZGFyZFByZWZpeCh0cywgc2hhcGUsIGluZGVudCk7CisgICAgdHMgPDwgc2hhcGUgPDwgIlxu
IjsKKyAgICB3cml0ZVJlc291cmNlcyh0cywgc2hhcGUsIGluZGVudCk7CiB9CiAKIHZvaWQgd3Jp
dGVTVkdHcmFkaWVudFN0b3AoVGV4dFN0cmVhbSYgdHMsIGNvbnN0IFJlbmRlclNWR0dyYWRpZW50
U3RvcCYgc3RvcCwgaW50IGluZGVudCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9zdmcvU1ZHUmVuZGVyVHJlZUFzVGV4dC5oIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L3N2Zy9TVkdSZW5kZXJUcmVlQXNUZXh0LmgKaW5kZXggY2UwN2E1Yy4uMzU5OGM4MyAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdSZW5kZXJUcmVlQXNUZXh0LmgK
KysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdSZW5kZXJUcmVlQXNUZXh0LmgK
QEAgLTQxLDE0ICs0MSwxNCBAQCBjbGFzcyBSZW5kZXJJbWFnZTsKIGNsYXNzIFJlbmRlck9iamVj
dDsKIGNsYXNzIFJlbmRlclNWR0dyYWRpZW50U3RvcDsKIGNsYXNzIFJlbmRlclNWR0ltYWdlOwot
Y2xhc3MgUmVuZGVyU1ZHUGF0aDsKK2NsYXNzIFJlbmRlclNWR1NoYXBlOwogY2xhc3MgUmVuZGVy
U1ZHUm9vdDsKIGNsYXNzIFJlbmRlclRleHQ7CiBjbGFzcyBBZmZpbmVUcmFuc2Zvcm07CiBjbGFz
cyBTVkdVbml0VHlwZXM7CiAKIC8vIGZ1bmN0aW9ucyB1c2VkIGJ5IHRoZSBtYWluIFJlbmRlclRy
ZWVBc1RleHQgY29kZQotdm9pZCB3cml0ZShUZXh0U3RyZWFtJiwgY29uc3QgUmVuZGVyU1ZHUGF0
aCYsIGludCBpbmRlbnQpOwordm9pZCB3cml0ZShUZXh0U3RyZWFtJiwgY29uc3QgUmVuZGVyU1ZH
U2hhcGUmLCBpbnQgaW5kZW50KTsKIHZvaWQgd3JpdGUoVGV4dFN0cmVhbSYsIGNvbnN0IFJlbmRl
clNWR1Jvb3QmLCBpbnQgaW5kZW50KTsKIHZvaWQgd3JpdGVTVkdHcmFkaWVudFN0b3AoVGV4dFN0
cmVhbSYsIGNvbnN0IFJlbmRlclNWR0dyYWRpZW50U3RvcCYsIGludCBpbmRlbnQpOwogdm9pZCB3
cml0ZVNWR1Jlc291cmNlQ29udGFpbmVyKFRleHRTdHJlYW0mLCBjb25zdCBSZW5kZXJPYmplY3Qm
LCBpbnQgaW5kZW50KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcv
U1ZHVGV4dFJ1blJlbmRlcmluZ0NvbnRleHQuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L3N2Zy9TVkdUZXh0UnVuUmVuZGVyaW5nQ29udGV4dC5jcHAKaW5kZXggMzNhY2Y5Mi4uMzE2OTk0
MiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdUZXh0UnVuUmVu
ZGVyaW5nQ29udGV4dC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdU
ZXh0UnVuUmVuZGVyaW5nQ29udGV4dC5jcHAKQEAgLTE1NCwxMyArMTU0LDEzIEBAIHZvaWQgU1ZH
VGV4dFJ1blJlbmRlcmluZ0NvbnRleHQ6OmRyYXdTVkdHbHlwaHMoR3JhcGhpY3NDb250ZXh0KiBj
b250ZXh0LCBjb25zdCBUCiAKICAgICAgICAgUGF0aCBnbHlwaFBhdGggPSBzdmdHbHlwaC5wYXRo
RGF0YTsKICAgICAgICAgZ2x5cGhQYXRoLnRyYW5zZm9ybShnbHlwaFBhdGhUcmFuc2Zvcm0pOwot
CiAgICAgICAgIGlmIChhY3RpdmVQYWludGluZ1Jlc291cmNlLT5hcHBseVJlc291cmNlKHBhcmVu
dFJlbmRlck9iamVjdCwgcGFyZW50UmVuZGVyT2JqZWN0U3R5bGUsIGNvbnRleHQsIHJlc291cmNl
TW9kZSkpIHsKICAgICAgICAgICAgIGlmIChyZW5kZXJPYmplY3QgJiYgcmVuZGVyT2JqZWN0LT5p
c1NWR0lubGluZVRleHQoKSkgeworCiAgICAgICAgICAgICAgICAgY29uc3QgUmVuZGVyU1ZHSW5s
aW5lVGV4dCogdGV4dFJlbmRlcmVyID0gdG9SZW5kZXJTVkdJbmxpbmVUZXh0KHJlbmRlck9iamVj
dCk7CiAgICAgICAgICAgICAgICAgY29udGV4dC0+c2V0U3Ryb2tlVGhpY2tuZXNzKGNvbnRleHQt
PnN0cm9rZVRoaWNrbmVzcygpICogdGV4dFJlbmRlcmVyLT5zY2FsaW5nRmFjdG9yKCkpOwogICAg
ICAgICAgICAgfQotICAgICAgICAgICAgYWN0aXZlUGFpbnRpbmdSZXNvdXJjZS0+cG9zdEFwcGx5
UmVzb3VyY2UocGFyZW50UmVuZGVyT2JqZWN0LCBjb250ZXh0LCByZXNvdXJjZU1vZGUsICZnbHlw
aFBhdGgpOworICAgICAgICAgICAgYWN0aXZlUGFpbnRpbmdSZXNvdXJjZS0+cG9zdEFwcGx5UmVz
b3VyY2UocGFyZW50UmVuZGVyT2JqZWN0LCBjb250ZXh0LCByZXNvdXJjZU1vZGUsICZnbHlwaFBh
dGgsIDApOwogICAgICAgICAgfQogIAogICAgICAgICBjb250ZXh0LT5yZXN0b3JlKCk7CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHQ2lyY2xlRWxlbWVudC5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9zdmcvU1ZHQ2lyY2xlRWxlbWVudC5jcHAKaW5kZXggMmFlNjliOC4uMDM2NjllMCAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0NpcmNsZUVsZW1lbnQuY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdDaXJjbGVFbGVtZW50LmNwcApAQCAtMTI0LDcgKzEyNCw3
IEBAIHZvaWQgU1ZHQ2lyY2xlRWxlbWVudDo6c3ZnQXR0cmlidXRlQ2hhbmdlZChjb25zdCBRdWFs
aWZpZWROYW1lJiBhdHRyTmFtZSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgaWYgKGlzTGVuZ3Ro
QXR0cmlidXRlKSB7Ci0gICAgICAgIHJlbmRlcmVyLT5zZXROZWVkc1BhdGhVcGRhdGUoKTsKKyAg
ICAgICAgcmVuZGVyZXItPnNldE5lZWRzU2hhcGVVcGRhdGUoKTsKICAgICAgICAgUmVuZGVyU1ZH
UmVzb3VyY2U6Om1hcmtGb3JMYXlvdXRBbmRQYXJlbnRSZXNvdXJjZUludmFsaWRhdGlvbihyZW5k
ZXJlcik7CiAgICAgICAgIHJldHVybjsKICAgICB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9zdmcvU1ZHRWxsaXBzZUVsZW1lbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0VsbGlw
c2VFbGVtZW50LmNwcAppbmRleCBjZWEwNjZkLi5jYTAxN2M0IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9zdmcvU1ZHRWxsaXBzZUVsZW1lbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3N2
Zy9TVkdFbGxpcHNlRWxlbWVudC5jcHAKQEAgLTEyOSw3ICsxMjksNyBAQCB2b2lkIFNWR0VsbGlw
c2VFbGVtZW50OjpzdmdBdHRyaWJ1dGVDaGFuZ2VkKGNvbnN0IFF1YWxpZmllZE5hbWUmIGF0dHJO
YW1lKQogICAgICAgICByZXR1cm47CiAKICAgICBpZiAoaXNMZW5ndGhBdHRyaWJ1dGUpIHsKLSAg
ICAgICAgcmVuZGVyZXItPnNldE5lZWRzUGF0aFVwZGF0ZSgpOworICAgICAgICByZW5kZXJlci0+
c2V0TmVlZHNTaGFwZVVwZGF0ZSgpOwogICAgICAgICBSZW5kZXJTVkdSZXNvdXJjZTo6bWFya0Zv
ckxheW91dEFuZFBhcmVudFJlc291cmNlSW52YWxpZGF0aW9uKHJlbmRlcmVyKTsKICAgICAgICAg
cmV0dXJuOwogICAgIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdMaW5lRWxl
bWVudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHTGluZUVsZW1lbnQuY3BwCmluZGV4IGM3
Y2ExMWUuLmIxYmI4ZWEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdMaW5lRWxl
bWVudC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0xpbmVFbGVtZW50LmNwcApAQCAt
MTI5LDcgKzEyOSw3IEBAIHZvaWQgU1ZHTGluZUVsZW1lbnQ6OnN2Z0F0dHJpYnV0ZUNoYW5nZWQo
Y29uc3QgUXVhbGlmaWVkTmFtZSYgYXR0ck5hbWUpCiAgICAgICAgIHJldHVybjsKIAogICAgIGlm
IChpc0xlbmd0aEF0dHJpYnV0ZSkgewotICAgICAgICByZW5kZXJlci0+c2V0TmVlZHNQYXRoVXBk
YXRlKCk7CisgICAgICAgIHJlbmRlcmVyLT5zZXROZWVkc1NoYXBlVXBkYXRlKCk7CiAgICAgICAg
IFJlbmRlclNWR1Jlc291cmNlOjptYXJrRm9yTGF5b3V0QW5kUGFyZW50UmVzb3VyY2VJbnZhbGlk
YXRpb24ocmVuZGVyZXIpOwogICAgICAgICByZXR1cm47CiAgICAgfQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvc3ZnL1NWR1BhdGhFbGVtZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9T
VkdQYXRoRWxlbWVudC5jcHAKaW5kZXggYTdhMzM3ZS4uZmUzMzU5NSAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvc3ZnL1NWR1BhdGhFbGVtZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9z
dmcvU1ZHUGF0aEVsZW1lbnQuY3BwCkBAIC0yNjksNyArMjY5LDcgQEAgdm9pZCBTVkdQYXRoRWxl
bWVudDo6c3ZnQXR0cmlidXRlQ2hhbmdlZChjb25zdCBRdWFsaWZpZWROYW1lJiBhdHRyTmFtZSkK
ICAgICAgICAgfQogCiAgICAgICAgIGlmIChyZW5kZXJlcikKLSAgICAgICAgICAgIHJlbmRlcmVy
LT5zZXROZWVkc1BhdGhVcGRhdGUoKTsKKyAgICAgICAgICAgIHJlbmRlcmVyLT5zZXROZWVkc1No
YXBlVXBkYXRlKCk7CiAgICAgfQogCiAgICAgaWYgKHJlbmRlcmVyKQpAQCAtMzU1LDEwICszNTUs
MTYgQEAgdm9pZCBTVkdQYXRoRWxlbWVudDo6cGF0aFNlZ0xpc3RDaGFuZ2VkKFNWR1BhdGhTZWdS
b2xlIHJvbGUpCiAgICAgaWYgKCFyZW5kZXJlcikKICAgICAgICAgcmV0dXJuOwogCi0gICAgcmVu
ZGVyZXItPnNldE5lZWRzUGF0aFVwZGF0ZSgpOworICAgIHJlbmRlcmVyLT5zZXROZWVkc1NoYXBl
VXBkYXRlKCk7CiAgICAgUmVuZGVyU1ZHUmVzb3VyY2U6Om1hcmtGb3JMYXlvdXRBbmRQYXJlbnRS
ZXNvdXJjZUludmFsaWRhdGlvbihyZW5kZXJlcik7CiB9CiAKK1JlbmRlck9iamVjdCogU1ZHUGF0
aEVsZW1lbnQ6OmNyZWF0ZVJlbmRlcmVyKFJlbmRlckFyZW5hKiBhcmVuYSwgUmVuZGVyU3R5bGUq
KQoreworICAgIC8vIEJ5IGRlZmF1bHQsIGFueSBzdWJjbGFzcyBpcyBleHBlY3RlZCB0byBkbyBw
YXRoLWJhc2VkIGRyYXdpbmcKKyAgICByZXR1cm4gbmV3IChhcmVuYSkgUmVuZGVyU1ZHUGF0aCh0
aGlzKTsKK30KKwogfQogCiAjZW5kaWYgLy8gRU5BQkxFKFNWRykKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3N2Zy9TVkdQYXRoRWxlbWVudC5oIGIvU291cmNlL1dlYkNvcmUvc3ZnL1NWR1Bh
dGhFbGVtZW50LmgKaW5kZXggMWQzN2QwZS4uNTRiOGZlMiAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvc3ZnL1NWR1BhdGhFbGVtZW50LmgKKysrIGIvU291cmNlL1dlYkNvcmUvc3ZnL1NWR1Bh
dGhFbGVtZW50LmgKQEAgLTEyMiw2ICsxMjIsOCBAQCBwcml2YXRlOgogICAgIHZpcnR1YWwgdm9p
ZCBzeW5jaHJvbml6ZVJlcXVpcmVkRXh0ZW5zaW9ucygpIHsgU1ZHVGVzdHM6OnN5bmNocm9uaXpl
UmVxdWlyZWRFeHRlbnNpb25zKHRoaXMpOyB9CiAgICAgdmlydHVhbCB2b2lkIHN5bmNocm9uaXpl
U3lzdGVtTGFuZ3VhZ2UoKSB7IFNWR1Rlc3RzOjpzeW5jaHJvbml6ZVN5c3RlbUxhbmd1YWdlKHRo
aXMpOyB9CiAKKyAgICBSZW5kZXJPYmplY3QqIGNyZWF0ZVJlbmRlcmVyKFJlbmRlckFyZW5hKiwg
UmVuZGVyU3R5bGUqKTsKKwogcHJpdmF0ZToKICAgICBPd25QdHI8U1ZHUGF0aEJ5dGVTdHJlYW0+
IG1fcGF0aEJ5dGVTdHJlYW07CiAgICAgbXV0YWJsZSBTVkdTeW5jaHJvbml6YWJsZUFuaW1hdGVk
UHJvcGVydHk8U1ZHUGF0aFNlZ0xpc3Q+IG1fcGF0aFNlZ0xpc3Q7CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9zdmcvU1ZHUG9seUVsZW1lbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvc3ZnL1NW
R1BvbHlFbGVtZW50LmNwcAppbmRleCA2MTZiODY3Li5mMzBjYTRhIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9zdmcvU1ZHUG9seUVsZW1lbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3N2
Zy9TVkdQb2x5RWxlbWVudC5jcHAKQEAgLTEyNCw3ICsxMjQsNyBAQCB2b2lkIFNWR1BvbHlFbGVt
ZW50OjpzdmdBdHRyaWJ1dGVDaGFuZ2VkKGNvbnN0IFF1YWxpZmllZE5hbWUmIGF0dHJOYW1lKQog
ICAgICAgICByZXR1cm47CiAKICAgICBpZiAoYXR0ck5hbWUgPT0gU1ZHTmFtZXM6OnBvaW50c0F0
dHIpIHsKLSAgICAgICAgcmVuZGVyZXItPnNldE5lZWRzUGF0aFVwZGF0ZSgpOworICAgICAgICBy
ZW5kZXJlci0+c2V0TmVlZHNTaGFwZVVwZGF0ZSgpOwogICAgICAgICBSZW5kZXJTVkdSZXNvdXJj
ZTo6bWFya0ZvckxheW91dEFuZFBhcmVudFJlc291cmNlSW52YWxpZGF0aW9uKHJlbmRlcmVyKTsK
ICAgICAgICAgcmV0dXJuOwogICAgIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9T
VkdSZWN0RWxlbWVudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHUmVjdEVsZW1lbnQuY3Bw
CmluZGV4IGU4NDc3NGQuLjE4NzllMGEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9T
VkdSZWN0RWxlbWVudC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvc3ZnL1NWR1JlY3RFbGVtZW50
LmNwcApAQCAtMjUsNiArMjUsNyBAQAogCiAjaW5jbHVkZSAiQXR0cmlidXRlLmgiCiAjaW5jbHVk
ZSAiUmVuZGVyU1ZHUGF0aC5oIgorI2luY2x1ZGUgIlJlbmRlclNWR1JlY3QuaCIKICNpbmNsdWRl
ICJSZW5kZXJTVkdSZXNvdXJjZS5oIgogI2luY2x1ZGUgIlNWR0VsZW1lbnRJbnN0YW5jZS5oIgog
I2luY2x1ZGUgIlNWR0xlbmd0aC5oIgpAQCAtMzIsNiArMzMsOCBAQAogCiBuYW1lc3BhY2UgV2Vi
Q29yZSB7CiAKK2NsYXNzIFJlbmRlclNWR1JlY3Q7CisKIC8vIEFuaW1hdGVkIHByb3BlcnR5IGRl
ZmluaXRpb25zCiBERUZJTkVfQU5JTUFURURfTEVOR1RIKFNWR1JlY3RFbGVtZW50LCBTVkdOYW1l
czo6eEF0dHIsIFgsIHgpCiBERUZJTkVfQU5JTUFURURfTEVOR1RIKFNWR1JlY3RFbGVtZW50LCBT
VkdOYW1lczo6eUF0dHIsIFksIHkpCkBAIC0xMzcsMTIgKzE0MCwxMiBAQCB2b2lkIFNWR1JlY3RF
bGVtZW50OjpzdmdBdHRyaWJ1dGVDaGFuZ2VkKGNvbnN0IFF1YWxpZmllZE5hbWUmIGF0dHJOYW1l
KQogICAgIGlmIChTVkdUZXN0czo6aGFuZGxlQXR0cmlidXRlQ2hhbmdlKHRoaXMsIGF0dHJOYW1l
KSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgUmVuZGVyU1ZHUGF0aCogcmVuZGVyZXIgPSBzdGF0
aWNfY2FzdDxSZW5kZXJTVkdQYXRoKj4odGhpcy0+cmVuZGVyZXIoKSk7CisgICAgUmVuZGVyU1ZH
UmVjdCogcmVuZGVyZXIgPSBzdGF0aWNfY2FzdDxSZW5kZXJTVkdSZWN0Kj4odGhpcy0+cmVuZGVy
ZXIoKSk7CiAgICAgaWYgKCFyZW5kZXJlcikKICAgICAgICAgcmV0dXJuOwogCiAgICAgaWYgKGlz
TGVuZ3RoQXR0cmlidXRlKSB7Ci0gICAgICAgIHJlbmRlcmVyLT5zZXROZWVkc1BhdGhVcGRhdGUo
KTsKKyAgICAgICAgcmVuZGVyZXItPnNldE5lZWRzU2hhcGVVcGRhdGUoKTsKICAgICAgICAgUmVu
ZGVyU1ZHUmVzb3VyY2U6Om1hcmtGb3JMYXlvdXRBbmRQYXJlbnRSZXNvdXJjZUludmFsaWRhdGlv
bihyZW5kZXJlcik7CiAgICAgICAgIHJldHVybjsKICAgICB9CkBAIC0xOTgsNiArMjAxLDExIEBA
IGJvb2wgU1ZHUmVjdEVsZW1lbnQ6OnNlbGZIYXNSZWxhdGl2ZUxlbmd0aHMoKSBjb25zdAogICAg
ICAgICB8fCByeSgpLmlzUmVsYXRpdmUoKTsKIH0KIAorUmVuZGVyT2JqZWN0KiBTVkdSZWN0RWxl
bWVudDo6Y3JlYXRlUmVuZGVyZXIoUmVuZGVyQXJlbmEqIGFyZW5hLCBSZW5kZXJTdHlsZSopCit7
CisgICAgcmV0dXJuIG5ldyAoYXJlbmEpIFJlbmRlclNWR1JlY3QodGhpcyk7Cit9CisKIH0KIAog
I2VuZGlmIC8vIEVOQUJMRShTVkcpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZH
UmVjdEVsZW1lbnQuaCBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdSZWN0RWxlbWVudC5oCmluZGV4
IDk5NDM3ZjMuLjliZjYwMmYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdSZWN0
RWxlbWVudC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdSZWN0RWxlbWVudC5oCkBAIC01
Miw2ICs1Miw4IEBAIHByaXZhdGU6CiAKICAgICB2aXJ0dWFsIGJvb2wgc2VsZkhhc1JlbGF0aXZl
TGVuZ3RocygpIGNvbnN0OwogCisgICAgUmVuZGVyT2JqZWN0KiBjcmVhdGVSZW5kZXJlcihSZW5k
ZXJBcmVuYSosIFJlbmRlclN0eWxlKik7CisKICAgICBCRUdJTl9ERUNMQVJFX0FOSU1BVEVEX1BS
T1BFUlRJRVMoU1ZHUmVjdEVsZW1lbnQpCiAgICAgICAgIERFQ0xBUkVfQU5JTUFURURfTEVOR1RI
KFgsIHgpCiAgICAgICAgIERFQ0xBUkVfQU5JTUFURURfTEVOR1RIKFksIHkpCi0tIAoxLjcuNS40
Cgo=
</data>
<flag name="commit-queue"
          id="104003"
          type_id="3"
          status="-"
          setter="rhodovan.u-szeged"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>107500</attachid>
            <date>2011-09-15 08:40:39 -0700</date>
            <delta_ts>2011-09-16 10:36:39 -0700</delta_ts>
            <desc>Propsed patch</desc>
            <filename>0001-krit-niko-andy.patch</filename>
            <type>text/plain</type>
            <size>106711</size>
            <attacher name="Renata Hodovan">rhodovan.u-szeged</attacher>
            
              <data encoding="base64">RnJvbSA0NWRkNDE4MTYzNjQ2NWFmYTVhNzNlZDVmMWIzMGE1OGI0NGIyMGNjIE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBSZW5hdGEgSG9kb3ZhbiA8cmVuaUB3ZWJraXQub3JnPgpEYXRl
OiBUaHUsIDE1IFNlcCAyMDExIDE3OjMxOjQxICswMjAwClN1YmplY3Q6IFtQQVRDSF0ga3JpdCZu
aWtvJmFuZHkKCi0tLQogTGF5b3V0VGVzdHMvQ2hhbmdlTG9nICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgfCAgIDE1ICsKIC4uLi9wb2ludGVyLWV2ZW50cy1vbi1yb3VuZGVkLXJlY3QtZXhw
ZWN0ZWQudHh0ICAgIHwgICAgMSArCiAuLi4vcG9pbnRlci1ldmVudHMtb24tc3ZnLXdpdGgtcG9p
bnRlci54aHRtbCAgICAgICB8ICAgMTIgKy0KIC4uLmVudHMtd2l0aC1saW5lY2Fwcy1hbmQtbWl0
ZXJsaW1pdHMtZXhwZWN0ZWQudHh0IHwgICAgMSArCiAuLi5udGVyLWV2ZW50cy13aXRoLWxpbmVj
YXBzLWFuZC1taXRlcmxpbWl0cy54aHRtbCB8ICAgNjggKysrCiBTb3VyY2UvV2ViQ29yZS9DTWFr
ZUxpc3RzLnR4dCAgICAgICAgICAgICAgICAgICAgICB8ICAgIDIgKwogU291cmNlL1dlYkNvcmUv
Q2hhbmdlTG9nICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgMTU3ICsrKysrKysKIFNvdXJj
ZS9XZWJDb3JlL0dOVW1ha2VmaWxlLmxpc3QuYW0gICAgICAgICAgICAgICAgIHwgICAgNCArCiBT
b3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkgICAgICAgICAgICAgICAgICAgICAgICB8ICAgIDQg
KwogU291cmNlL1dlYkNvcmUvV2ViQ29yZS5wcm8gICAgICAgICAgICAgICAgICAgICAgICAgfCAg
ICA0ICsKIFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUudmNwcm9qL1dlYkNvcmUudmNwcm9qICAgICAg
IHwgIDExMiArKysrKwogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRmxvYXRSZWN0
LmNwcCAgICAgfCAgICA3ICsKIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0Zsb2F0
UmVjdC5oICAgICAgIHwgICAgNyArLQogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck9i
amVjdC5oICAgICAgICAgICAgfCAgICAyICsKIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJUcmVlQXNUZXh0LmNwcCAgICAgIHwgICAgNCArLQogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L3N2Zy9SZW5kZXJTVkdBbGxJbk9uZS5jcHAgfCAgICAyICsKIC4uLi9XZWJDb3JlL3JlbmRlcmlu
Zy9zdmcvUmVuZGVyU1ZHTW9kZWxPYmplY3QuY3BwIHwgICAgMiArLQogU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdQYXRoLmNwcCAgICAgfCAgMzU1ICstLS0tLS0tLS0tLS0t
LS0tCiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1BhdGguaCAgICAgICB8
ICAgNzQgKy0tLQogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZWN0LmNw
cCAgICAgfCAgMTE2ICsrKysrKwogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJT
VkdSZWN0LmggICAgICAgfCAgIDYzICsrKwogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9S
ZW5kZXJTVkdSZXNvdXJjZS5oICAgfCAgICAzICstCiAuLi4vcmVuZGVyaW5nL3N2Zy9SZW5kZXJT
VkdSZXNvdXJjZUNsaXBwZXIuY3BwICAgICB8ICAgIDYgKy0KIC4uLi9yZW5kZXJpbmcvc3ZnL1Jl
bmRlclNWR1Jlc291cmNlQ29udGFpbmVyLmNwcCAgIHwgICAgMiArLQogLi4uL3JlbmRlcmluZy9z
dmcvUmVuZGVyU1ZHUmVzb3VyY2VGaWx0ZXIuY3BwICAgICAgfCAgICA1ICstCiAuLi4vcmVuZGVy
aW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJjZUZpbHRlci5oICAgICAgICB8ICAgIDIgKy0KIC4uLi9y
ZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291cmNlR3JhZGllbnQuY3BwICAgIHwgICAyMSArLQog
Li4uL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VHcmFkaWVudC5oICAgICAgfCAgICAy
ICstCiAuLi4vcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJjZVBhdHRlcm4uY3BwICAgICB8
ICAgMTQgKy0KIC4uLi9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291cmNlUGF0dGVybi5oICAg
ICAgIHwgICAgMiArLQogLi4uL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VTb2xpZENv
bG9yLmNwcCAgfCAgIDE1ICstCiAuLi4vcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJjZVNv
bGlkQ29sb3IuaCAgICB8ICAgIDIgKy0KIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVu
ZGVyU1ZHU2hhcGUuY3BwICAgIHwgIDQzMiArKysrKysrKysrKysrKysrKysrKwogU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdTaGFwZS5oICAgICAgfCAgMTYwICsrKysrKysr
CiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR0lubGluZVRleHRCb3guY3BwICB8ICAg
IDQgKy0KIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHUmVuZGVyU3VwcG9ydC5jcHAg
IHwgICAgOCArLQogLi4uL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdSZW5kZXJUcmVlQXNUZXh0
LmNwcCAgfCAgIDMxICstCiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR1JlbmRlclRy
ZWVBc1RleHQuaCB8ICAgIDQgKy0KIC4uLi9yZW5kZXJpbmcvc3ZnL1NWR1RleHRSdW5SZW5kZXJp
bmdDb250ZXh0LmNwcCAgIHwgICAgNCArLQogU291cmNlL1dlYkNvcmUvc3ZnL1NWR0NpcmNsZUVs
ZW1lbnQuY3BwICAgICAgICAgICAgfCAgICAyICstCiBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRWxs
aXBzZUVsZW1lbnQuY3BwICAgICAgICAgICB8ICAgIDIgKy0KIFNvdXJjZS9XZWJDb3JlL3N2Zy9T
VkdMaW5lRWxlbWVudC5jcHAgICAgICAgICAgICAgIHwgICAgMiArLQogU291cmNlL1dlYkNvcmUv
c3ZnL1NWR1BhdGhFbGVtZW50LmNwcCAgICAgICAgICAgICAgfCAgIDEwICstCiBTb3VyY2UvV2Vi
Q29yZS9zdmcvU1ZHUGF0aEVsZW1lbnQuaCAgICAgICAgICAgICAgICB8ICAgIDIgKwogU291cmNl
L1dlYkNvcmUvc3ZnL1NWR1BvbHlFbGVtZW50LmNwcCAgICAgICAgICAgICAgfCAgICAyICstCiBT
b3VyY2UvV2ViQ29yZS9zdmcvU1ZHUmVjdEVsZW1lbnQuY3BwICAgICAgICAgICAgICB8ICAgMTIg
Ky0KIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdSZWN0RWxlbWVudC5oICAgICAgICAgICAgICAgIHwg
ICAgMiArCiA0NyBmaWxlcyBjaGFuZ2VkLCAxMjg3IGluc2VydGlvbnMoKyksIDQ3NiBkZWxldGlv
bnMoLSkKIGNyZWF0ZSBtb2RlIDEwMDY0NCBMYXlvdXRUZXN0cy9zdmcvY3VzdG9tL3BvaW50ZXIt
ZXZlbnRzLW9uLXJvdW5kZWQtcmVjdC1leHBlY3RlZC50eHQKIGNyZWF0ZSBtb2RlIDEwMDY0NCBM
YXlvdXRUZXN0cy9zdmcvY3VzdG9tL3BvaW50ZXItZXZlbnRzLXdpdGgtbGluZWNhcHMtYW5kLW1p
dGVybGltaXRzLWV4cGVjdGVkLnR4dAogY3JlYXRlIG1vZGUgMTAwNjQ0IExheW91dFRlc3RzL3N2
Zy9jdXN0b20vcG9pbnRlci1ldmVudHMtd2l0aC1saW5lY2Fwcy1hbmQtbWl0ZXJsaW1pdHMueGh0
bWwKIGNyZWF0ZSBtb2RlIDEwMDY0NCBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRl
clNWR1JlY3QuY3BwCiBjcmVhdGUgbW9kZSAxMDA2NDQgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L3N2Zy9SZW5kZXJTVkdSZWN0LmgKIGNyZWF0ZSBtb2RlIDEwMDY0NCBTb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1NoYXBlLmNwcAogY3JlYXRlIG1vZGUgMTAwNjQ0IFNvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHU2hhcGUuaAoKZGlmZiAtLWdpdCBhL0xh
eW91dFRlc3RzL0NoYW5nZUxvZyBiL0xheW91dFRlc3RzL0NoYW5nZUxvZwppbmRleCA5YjQ3MDEz
Li40ZDZkMmI3IDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKKysrIGIvTGF5b3V0
VGVzdHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTggQEAKKzIwMTEtMDktMTUgIFJlbmF0YSBIb2Rv
dmFuICA8cmVuaUB3ZWJraXQub3JnPgorCisgICAgICAgIEFkZCBuZXcgcmVuZGVyZXIgZm9yIFNW
R1JlY3RFbGVtZW50LgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9NjU3NjkKKworICAgICAgICBBZGQgbmV3IHRlc3RzIHRvIGNoZWNrIHRoZSBuZXcgc2hh
cGUgYmFzZWQgcmVuZGVyaW5nIG1lY2hhbmlzbSBvZiBTVkdSZWN0RWxlbWVudC4KKworICAgICAg
ICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIHN2Zy9jdXN0b20vcG9p
bnRlci1ldmVudHMtb24tcm91bmRlZC1yZWN0LWV4cGVjdGVkLnR4dDogQWRkZWQuCisgICAgICAg
ICogc3ZnL2N1c3RvbS9wb2ludGVyLWV2ZW50cy1vbi1yb3VuZGVkLXJlY3Quc3ZnOiBBZGRlZC4K
KyAgICAgICAgKiBzdmcvY3VzdG9tL3BvaW50ZXItZXZlbnRzLW9uLXN2Zy13aXRoLXBvaW50ZXIu
eGh0bWw6CisgICAgICAgICogc3ZnL2N1c3RvbS9wb2ludGVyLWV2ZW50cy13aXRoLWxpbmVjYXBz
LWFuZC1taXRlcmxpbWl0cy1leHBlY3RlZC50eHQ6IEFkZGVkLgorICAgICAgICAqIHN2Zy9jdXN0
b20vcG9pbnRlci1ldmVudHMtd2l0aC1saW5lY2Fwcy1hbmQtbWl0ZXJsaW1pdHMuc3ZnOiBBZGRl
ZC4KKwogMjAxMS0wOS0wOCAgT2xpdmVyIFZhcmdhICA8dm9saXZlckBpbmYudS1zemVnZWQuaHU+
CiAKICAgICAgICAgR2FyZGVuaW5nOiBhZGQgbWlzc2luZyByZXN1bHQgYWZ0ZXI6IHI5NDcxMC4K
ZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3N2Zy9jdXN0b20vcG9pbnRlci1ldmVudHMtb24tcm91
bmRlZC1yZWN0LWV4cGVjdGVkLnR4dCBiL0xheW91dFRlc3RzL3N2Zy9jdXN0b20vcG9pbnRlci1l
dmVudHMtb24tcm91bmRlZC1yZWN0LWV4cGVjdGVkLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwMDAwMDAwLi42MTViYWUwCi0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvc3Zn
L2N1c3RvbS9wb2ludGVyLWV2ZW50cy1vbi1yb3VuZGVkLXJlY3QtZXhwZWN0ZWQudHh0CkBAIC0w
LDAgKzEgQEAKK1BBU1NFRDogZmFsbGJhY2tSZWN0IGhhZCBwb2ludGVyCmRpZmYgLS1naXQgYS9M
YXlvdXRUZXN0cy9zdmcvY3VzdG9tL3BvaW50ZXItZXZlbnRzLW9uLXN2Zy13aXRoLXBvaW50ZXIu
eGh0bWwgYi9MYXlvdXRUZXN0cy9zdmcvY3VzdG9tL3BvaW50ZXItZXZlbnRzLW9uLXN2Zy13aXRo
LXBvaW50ZXIueGh0bWwKaW5kZXggYmQ2ZGJhNC4uMDE2Mzg4MSAxMDA2NDQKLS0tIGEvTGF5b3V0
VGVzdHMvc3ZnL2N1c3RvbS9wb2ludGVyLWV2ZW50cy1vbi1zdmctd2l0aC1wb2ludGVyLnhodG1s
CisrKyBiL0xheW91dFRlc3RzL3N2Zy9jdXN0b20vcG9pbnRlci1ldmVudHMtb24tc3ZnLXdpdGgt
cG9pbnRlci54aHRtbApAQCAtMyw3ICszLDE3IEBACiA8cD48L3A+CiA8ZGl2IHN0eWxlPSJwb3Np
dGlvbjphYnNvbHV0ZTsgdG9wOjUwcHg7IGxlZnQ6MHB4OyB3aWR0aDoxMDBweDsgaGVpZ2h0OjEw
MHB4OyBiYWNrZ3JvdW5kLWNvbG9yOmJsdWU7Ij48L2Rpdj4KIDxzdmcgeG1sbnM9Imh0dHA6Ly93
d3cudzMub3JnLzIwMDAvc3ZnIiBzdHlsZT0icG9zaXRpb246YWJzb2x1dGU7IHRvcDo1MHB4OyBs
ZWZ0OjBweDsgd2lkdGg6MTAwcHg7IGhlaWdodDoxMDBweDsiPgotICAgIDxyZWN0IHdpZHRoPSIx
MDAiIGhlaWdodD0iMTAwIiBmaWxsPSJncmVlbiIgcG9pbnRlci1ldmVudHM9Im5vbmUiLz4KKzxk
ZWZzPgorCis8c3R5bGUgdHlwZT0idGV4dC9jc3MiPjwhW0NEQVRBWworCityZWN0OmhvdmVyIHsK
KwlzdHJva2U6IGdyZWVuOworfSAKK11dPjwvc3R5bGU+Cis8L2RlZnM+CisKKyAgICA8cmVjdCB3
aWR0aD0iMTAwIiBoZWlnaHQ9IjEwMCIgZmlsbD0ibm9uZSIgc3Ryb2tlLXdpZHRoPSIyMCIgc3Ry
b2tlPSJyZWQiLz4KIDwvc3ZnPgogPHNjcmlwdD4KICAgICB2YXIgc3ZnID0gZG9jdW1lbnQuZ2V0
RWxlbWVudHNCeVRhZ05hbWUoInN2ZyIpWzBdOwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvc3Zn
L2N1c3RvbS9wb2ludGVyLWV2ZW50cy13aXRoLWxpbmVjYXBzLWFuZC1taXRlcmxpbWl0cy1leHBl
Y3RlZC50eHQgYi9MYXlvdXRUZXN0cy9zdmcvY3VzdG9tL3BvaW50ZXItZXZlbnRzLXdpdGgtbGlu
ZWNhcHMtYW5kLW1pdGVybGltaXRzLWV4cGVjdGVkLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwMDAwMDAwLi42MTViYWUwCi0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvc3Zn
L2N1c3RvbS9wb2ludGVyLWV2ZW50cy13aXRoLWxpbmVjYXBzLWFuZC1taXRlcmxpbWl0cy1leHBl
Y3RlZC50eHQKQEAgLTAsMCArMSBAQAorUEFTU0VEOiBmYWxsYmFja1JlY3QgaGFkIHBvaW50ZXIK
ZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3N2Zy9jdXN0b20vcG9pbnRlci1ldmVudHMtd2l0aC1s
aW5lY2Fwcy1hbmQtbWl0ZXJsaW1pdHMueGh0bWwgYi9MYXlvdXRUZXN0cy9zdmcvY3VzdG9tL3Bv
aW50ZXItZXZlbnRzLXdpdGgtbGluZWNhcHMtYW5kLW1pdGVybGltaXRzLnhodG1sCm5ldyBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBmMWE3MzYKLS0tIC9kZXYvbnVsbAorKysgYi9M
YXlvdXRUZXN0cy9zdmcvY3VzdG9tL3BvaW50ZXItZXZlbnRzLXdpdGgtbGluZWNhcHMtYW5kLW1p
dGVybGltaXRzLnhodG1sCkBAIC0wLDAgKzEsNjggQEAKKzxodG1sIHhtbG5zPSdodHRwOi8vd3d3
LnczLm9yZy8xOTk5L3hodG1sJz4KKzxib2R5IHN0eWxlPSJtYXJnaW46IDBweDsgcGFkZGluZzog
MHB4Ij4KKworPHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHN0eWxlPSJw
b3NpdGlvbjphYnNvbHV0ZTsiPgorPGRlZnM+CisKKzxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+PCFb
Q0RBVEFbCityZWN0I3N0cm9rZWRSZWN0IHsKKwlmaWxsOiBub25lOworCXN0cm9rZTogYmx1ZTsK
KwlzdHJva2Utd2lkdGg6IDIwcHg7CisJc3Ryb2tlLWxpbmVjYXA6IHNxdWFyZTsKKwlzdHJva2Ut
bWl0ZXJsaW1pdDogMTsKK30KK3JlY3Qjc3Ryb2tlZFJlY3Q6aG92ZXIgeworCXN0cm9rZTogcmVk
OworfQorXV0+PC9zdHlsZT4KKzwvZGVmcz4KKworPHJlY3QgaWQ9ImZhbGxiYWNrIiB4PSIwIiB5
PSIwIiB3aWR0aD0iMjEwIiBoZWlnaHQ9IjIxMCIgZmlsbD0iZ3JlZW4iIG9uY2xpY2s9InBhc3Nl
ZCgpIi8+Cis8cmVjdCBpZD0ic3Ryb2tlZFJlY3QiIHg9IjEwIiB5PSIxMCIgd2lkdGg9IjE5MCIg
aGVpZ2h0PSIxOTAiIHBvaW50ZXItZXZlbnRzPSJ2aXNpYmxlU3Ryb2tlIiBvbmNsaWNrPSJmYWls
ZWQoKSIvPiAKKzx0ZXh0IGlkPSJ0ZXh0IiB4PSIxMCIgeT0iMjMwIj5hZHNmPC90ZXh0PgorCis8
c2NyaXB0IHR5cGU9InRleHQvZWNtYXNjcmlwdCI+CisgICAgPCFbQ0RBVEFbCisKK3ZhciBmYWxs
YmFjayA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJmYWxsYmFjayIpOwordmFyIHN0cm9rZWRS
ZWN0ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoInN0cm9rZWRSZWN0Iik7Cit2YXIgdGV4dCA9
IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJ0ZXh0Iik7CisKK2ZhbGxiYWNrLmFkZEV2ZW50TGlz
dGVuZXIoIm1vdXNlZG93biIsIHBhc3NlZCwgZmFsc2UpOworc3Ryb2tlZFJlY3QuYWRkRXZlbnRM
aXN0ZW5lcigibW91c2Vkb3duIiwgZmFpbGVkLCBmYWxzZSk7CisKK2Z1bmN0aW9uIHN0b3AoKSB7
CisgICAgZmFsbGJhY2sucmVtb3ZlRXZlbnRMaXN0ZW5lcigibW91c2Vkb3duIiwgZmFpbGVkLCBm
YWxzZSk7CisgICAgc3Ryb2tlZFJlY3QucmVtb3ZlRXZlbnRMaXN0ZW5lcigibW91c2Vkb3duIiwg
cGFzc2VkLCBmYWxzZSk7CisKKyAgICBpZiAod2luZG93LmxheW91dFRlc3RDb250cm9sbGVyKQor
ICAgICAgICBsYXlvdXRUZXN0Q29udHJvbGxlci5ub3RpZnlEb25lKCk7Cit9CisKK2Z1bmN0aW9u
IGZhaWxlZCgpIHsKKyAgICB0ZXh0LnRleHRDb250ZW50ID0gJ0ZBSUxFRDogc3Ryb2tlUmVjdCBo
YWQgcG9pbnRlcic7CisgICAgc3RvcCgpOworfQorCitmdW5jdGlvbiBwYXNzZWQoKSB7CisgICAg
dGV4dC50ZXh0Q29udGVudCA9ICdQQVNTRUQ6IGZhbGxiYWNrUmVjdCBoYWQgcG9pbnRlcic7Cisg
ICAgc3RvcCgpOworfQorCitpZiAod2luZG93LmxheW91dFRlc3RDb250cm9sbGVyKSB7CisgICAg
bGF5b3V0VGVzdENvbnRyb2xsZXIud2FpdFVudGlsRG9uZSgpOworICAgIGxheW91dFRlc3RDb250
cm9sbGVyLmR1bXBBc1RleHQoKTsKK30KKworaWYgKHdpbmRvdy5ldmVudFNlbmRlcikgeworICAg
IGV2ZW50U2VuZGVyLm1vdXNlTW92ZVRvKDEsIDEpOworICAgIGV2ZW50U2VuZGVyLm1vdXNlRG93
bigpOworfQorCitdXT4KKyAgPC9zY3JpcHQ+Cis8L3N2Zz4KKworPC9ib2R5PgorPC9odG1sPgpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvQ01ha2VMaXN0cy50eHQgYi9Tb3VyY2UvV2ViQ29y
ZS9DTWFrZUxpc3RzLnR4dAppbmRleCA3YTUyMDU3Li5iY2NiZTAyIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9DTWFrZUxpc3RzLnR4dAorKysgYi9Tb3VyY2UvV2ViQ29yZS9DTWFrZUxpc3Rz
LnR4dApAQCAtMTU5Nyw2ICsxNTk3LDcgQEAgSUYgKEVOQUJMRV9TVkcpCiAgICAgICAgIHJlbmRl
cmluZy9zdmcvUmVuZGVyU1ZHSW5saW5lVGV4dC5jcHAKICAgICAgICAgcmVuZGVyaW5nL3N2Zy9S
ZW5kZXJTVkdNb2RlbE9iamVjdC5jcHAKICAgICAgICAgcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdQ
YXRoLmNwcAorICAgICAgICByZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1JlY3QuY3BwCiAgICAgICAg
IHJlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2UuY3BwCiAgICAgICAgIHJlbmRlcmluZy9z
dmcvUmVuZGVyU1ZHUmVzb3VyY2VDbGlwcGVyLmNwcAogICAgICAgICByZW5kZXJpbmcvc3ZnL1Jl
bmRlclNWR1Jlc291cmNlQ29udGFpbmVyLmNwcApAQCAtMTYxMSw2ICsxNjEyLDcgQEAgSUYgKEVO
QUJMRV9TVkcpCiAgICAgICAgIHJlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VTb2xpZENv
bG9yLmNwcAogICAgICAgICByZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jvb3QuY3BwCiAgICAgICAg
IHJlbmRlcmluZy9zdmcvUmVuZGVyU1ZHU2hhZG93VHJlZVJvb3RDb250YWluZXIuY3BwCisgICAg
ICAgIHJlbmRlcmluZy9zdmcvUmVuZGVyU1ZHU2hhcGUuY3BwCiAgICAgICAgIHJlbmRlcmluZy9z
dmcvUmVuZGVyU1ZHVFNwYW4uY3BwCiAgICAgICAgIHJlbmRlcmluZy9zdmcvUmVuZGVyU1ZHVGV4
dC5jcHAKICAgICAgICAgcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdUZXh0UGF0aC5jcHAKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxv
ZwppbmRleCAwNTA4NTk5Li42OGQ3NDRjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9DaGFu
Z2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTYwIEBACisy
MDExLTA5LTE1ICBSZW5hdGEgSG9kb3ZhbiAgPHJlbmlAd2Via2l0Lm9yZz4KKworICAgICAgICBB
ZGQgbmV3IHJlbmRlcmVyIGZvciBTVkdSZWN0RWxlbWVudC4KKyAgICAgICAgaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTY1NzY5CisKKyAgICAgICAgVGhpcyBwYXRjaCBp
bnRyb2R1Y2VzIGEgbmV3IGNvbW1vbiBiYXNlIGNsYXNzIGNhbGxlZCBSZW5kZXJTVkdTaGFwZSB3
aGljaAorICAgICAgICByZXBsYWNlcyB0aGUgUmVuZGVyU1ZHUGF0aC4gVGhpcyBuZXcgYmFzZSBj
bGFzcyBoYXMgdGhlIHNhbWUgcHVycG9zZQorICAgICAgICBhcyB0aGUgcmVwbGFjZWQgY2xhc3Mg
YW5kIGhhcyBzcGVjaWFsaXplZCBkZXNjZW5kYW50cyBmb3IgY29tbW9uCisgICAgICAgIHNoYXBl
cyAobGlrZSBSZWN0YW5nbGVzIGFuZCBDaXJjbGVzKSwgd2hpY2ggYWxsb3dzIGZhc3RlciBwYWlu
dGluZworICAgICAgICBvZiB0aGVzZSBzaGFwZXMgd2hlbiBjZXJ0YWluIGNvbmRpdGlvbnMgYXJl
IGZ1bGZpbGxlZC4gT24gc29tZQorICAgICAgICBiZW5jaG1hcmsgcHJvZ3JhbXMgd2UgaGF2ZSBz
ZWVuIDUlIHNwZWVkdXAuCisKKyAgICAgICAgVGhlIGJpZ2dlc3QgbW90aXZhdGlvbiBvZiB0aGlz
IHJlZmFjdG9yIGlzIHRha2luZyBhZHZhbnRhZ2UKKyAgICAgICAgb2YgZmFzdGVyIHByaW1pdGl2
ZSBkcmF3aW5nIGluIHRoZSBtb3N0IGNvbW1vbiBhbmQgZnJlcXVlbnQKKyAgICAgICAgY2FzZXMu
IEhvd2V2ZXIgaW4gc29tZSByYXJlIGNhc2VzLCBsaWtlIHBhaW50aW5nIHJvdW5kZWQKKyAgICAg
ICAgcmVjdHMsIHdlIG5lZWQgdG8gZmFsbGJhY2sgdG8gdGhlIG9yaWdpbmFsIGNvZGUgcGF0aCwg
d2hpY2gKKyAgICAgICAgaXMgZnVsbHkga2VwdCBpbiB0aGUgUmVuZGVyU1ZHU2hhcGUgYmFzZSBj
bGFzcy4gU29tZSBvdGhlcgorICAgICAgICBjYXNlcywgbGlrZSBkYXNoZWQgc3Ryb2tlcywgY2Fu
IGJlIHBhaW50ZWQgYnV0IG1vdXNlIHBvaW50ZXIKKyAgICAgICAgZXZlbnRzIGNhbm5vdCBiZSBo
YW5kbGVkIGJ5IHRoZSBkZXNjZW5kYW50IGNsYXNzZXMuIEEgZGlmZmVyZW50CisgICAgICAgIGZh
bGxiYWNrIG1lY2hhbmlzbSBpcyB1c2VkIGluIHN1Y2ggY2FzZXMgd2hpY2ggcmVkaXJlY3RzCisg
ICAgICAgIG9ubHkgdGhlIHBvaW50ZXIgZXZlbnQgaGFuZGxpbmcgdG8gdGhlIGJhc2UgY2xhc3Mu
CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVGVzdHM6
IHN2Zy9jdXN0b20vcG9pbnRlci1ldmVudHMtb24tcm91bmRlZC1yZWN0LnN2ZworICAgICAgICAg
ICAgICAgc3ZnL2N1c3RvbS9wb2ludGVyLWV2ZW50cy13aXRoLWxpbmVjYXBzLWFuZC1taXRlcmxp
bWl0cy5zdmcKKworICAgICAgICAqIENNYWtlTGlzdHMudHh0OgorICAgICAgICAqIEdOVW1ha2Vm
aWxlLmxpc3QuYW06CisgICAgICAgICogV2ViQ29yZS5neXBpOgorICAgICAgICAqIFdlYkNvcmUu
cHJvOgorICAgICAgICAqIFdlYkNvcmUudmNwcm9qL1dlYkNvcmUudmNwcm9qOgorICAgICAgICAq
IHBsYXRmb3JtL2dyYXBoaWNzL0Zsb2F0UmVjdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGbG9h
dFJlY3Q6OmNvbnRhaW5zKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9GbG9hdFJlY3Qu
aDoKKyAgICAgICAgKFdlYkNvcmU6OkZsb2F0UmVjdDo6Y29udGFpbnMpOgorICAgICAgICAqIHJl
bmRlcmluZy9SZW5kZXJPYmplY3QuaDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlck9iamVjdDo6
aXNTVkdSZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlck9iamVjdDo6aXNTVkdTaGFwZSk6
CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlclRyZWVBc1RleHQuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6d3JpdGUpOgorICAgICAgICAqIHJlbmRlcmluZy9zdmcvUmVuZGVyU1ZHQWxsSW5PbmUu
Y3BwOgorICAgICAgICAqIHJlbmRlcmluZy9zdmcvUmVuZGVyU1ZHTW9kZWxPYmplY3QuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6aXNHcmFwaGljc0VsZW1lbnQpOgorICAgICAgICAqIHJlbmRlcmlu
Zy9zdmcvUmVuZGVyU1ZHUGF0aC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJTVkdQYXRo
OjpSZW5kZXJTVkdQYXRoKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclNWR1BhdGg6OmluZmxh
dGVXaXRoTWFya2VyQm91bmRzKTpVbml0ZSB0aGUgbWFya2VyQm91bmRzIHdpdGggc3Ryb2tlQm91
bmRpbmdCb3guCisgICAgICAgICogcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdQYXRoLmg6CisgICAg
ICAgICogcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZWN0LmNwcDogQWRkZWQuCisgICAgICAgIChX
ZWJDb3JlOjpSZW5kZXJTVkdSZWN0OjpSZW5kZXJTVkdSZWN0KToKKyAgICAgICAgKFdlYkNvcmU6
OlJlbmRlclNWR1JlY3Q6On5SZW5kZXJTVkdSZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRl
clNWR1JlY3Q6OmNyZWF0ZVNoYXBlKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclNWR1JlY3Q6
Om9iamVjdEJvdW5kaW5nQm94KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclNWR1JlY3Q6OnN0
cm9rZUJvdW5kaW5nQm94KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclNWR1JlY3Q6OmZpbGxT
aGFwZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJTVkdSZWN0OjpzdHJva2VTaGFwZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpSZW5kZXJTVkdSZWN0OjpzaGFwZURlcGVuZGVudFN0cm9rZUNvbnRh
aW5zKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclNWR1JlY3Q6OnNoYXBlRGVwZW5kZW50Rmls
bENvbnRhaW5zKToKKyAgICAgICAgKiByZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1JlY3QuaDogQWRk
ZWQuCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJTVkdSZWN0Ojppc1NWR1JlY3QpOgorICAgICAg
ICAoV2ViQ29yZTo6UmVuZGVyU1ZHUmVjdDo6cmVuZGVyTmFtZSk6CisgICAgICAgIChXZWJDb3Jl
OjpSZW5kZXJTVkdSZWN0Ojppc0VtcHR5KToKKyAgICAgICAgKiByZW5kZXJpbmcvc3ZnL1JlbmRl
clNWR1Jlc291cmNlLmg6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJTVkdSZXNvdXJjZTo6cG9z
dEFwcGx5UmVzb3VyY2UpOkEgbmV3IHNoYXBlIGFyZ3VtZW50IHdhcyBhZGRlZCB0byBhbGxvdyBz
aGFwZSBzcGVjaWZpYyBmYXN0ZXIgcGFpbnRpbmcuCisgICAgICAgICogcmVuZGVyaW5nL3N2Zy9S
ZW5kZXJTVkdSZXNvdXJjZUNsaXBwZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU1ZH
UmVzb3VyY2VDbGlwcGVyOjpkcmF3Q29udGVudEludG9NYXNrSW1hZ2UpOgorICAgICAgICAoV2Vi
Q29yZTo6UmVuZGVyU1ZHUmVzb3VyY2VDbGlwcGVyOjpjYWxjdWxhdGVDbGlwQ29udGVudFJlcGFp
bnRSZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclNWR1Jlc291cmNlQ2xpcHBlcjo6aGl0
VGVzdENsaXBDb250ZW50KToKKyAgICAgICAgKiByZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291
cmNlQ29udGFpbmVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclNWR1Jlc291cmNlQ29u
dGFpbmVyOjp0cmFuc2Zvcm1Pbk5vblNjYWxpbmdTdHJva2UpOgorICAgICAgICAqIHJlbmRlcmlu
Zy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VGaWx0ZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVu
ZGVyU1ZHUmVzb3VyY2VGaWx0ZXI6OnBvc3RBcHBseVJlc291cmNlKToKKyAgICAgICAgKiByZW5k
ZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291cmNlRmlsdGVyLmg6CisgICAgICAgICogcmVuZGVyaW5n
L3N2Zy9SZW5kZXJTVkdSZXNvdXJjZUdyYWRpZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJl
bmRlclNWR1Jlc291cmNlR3JhZGllbnQ6OmFwcGx5UmVzb3VyY2UpOgorICAgICAgICAqIHJlbmRl
cmluZy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VHcmFkaWVudC5oOgorICAgICAgICAqIHJlbmRlcmlu
Zy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VQYXR0ZXJuLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJl
bmRlclNWR1Jlc291cmNlUGF0dGVybjo6cG9zdEFwcGx5UmVzb3VyY2UpOgorICAgICAgICAqIHJl
bmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VQYXR0ZXJuLmg6CisgICAgICAgICogcmVuZGVy
aW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJjZVNvbGlkQ29sb3IuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6UmVuZGVyU1ZHUmVzb3VyY2VTb2xpZENvbG9yOjpwb3N0QXBwbHlSZXNvdXJjZSk6CisgICAg
ICAgICogcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJjZVNvbGlkQ29sb3IuaDoKKyAgICAg
ICAgKiByZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1NoYXBlLmNwcDogQ29waWVkIGZyb20gU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdQYXRoLmNwcC4KKyAgICAgICAgKFdlYkNv
cmU6OlJlbmRlclNWR1NoYXBlOjpSZW5kZXJTVkdTaGFwZSk6CisgICAgICAgIChXZWJDb3JlOjpS
ZW5kZXJTVkdTaGFwZTo6flJlbmRlclNWR1NoYXBlKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRl
clNWR1NoYXBlOjpjcmVhdGVTaGFwZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJTVkdTaGFw
ZTo6aXNFbXB0eSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJTVkdTaGFwZTo6ZmlsbFNoYXBl
KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclNWR1NoYXBlOjpvYmplY3RCb3VuZGluZ0JveCk6
CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJTVkdTaGFwZTo6c3Ryb2tlQm91bmRpbmdCb3gpOgor
ICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU1ZHU2hhcGU6OnN0cm9rZVNoYXBlKToKKyAgICAgICAg
KFdlYkNvcmU6OlJlbmRlclNWR1NoYXBlOjpzaGFwZURlcGVuZGVudFN0cm9rZUNvbnRhaW5zKToK
KyAgICAgICAgVGhlIHB1cnBvc2Ugb2YgdGhpcyB2aXJ0dWFsIGZ1bmN0aW9uIGFsbG93cyBkZWNl
bmRhbnRzIHRvIHVzZSB0aGVpciBvd24gZmFzdCBjaGVja3MuCisgICAgICAgIChXZWJDb3JlOjpS
ZW5kZXJTVkdTaGFwZTo6c2hhcGVEZXBlbmRlbnRGaWxsQ29udGFpbnMpOgorICAgICAgICBUaGUg
cHVycG9zZSBvZiB0aGlzIHZpcnR1YWwgZnVuY3Rpb24gYWxsb3dzIGRlY2VuZGFudHMgdG8gdXNl
IHRoZWlyIG93biBmYXN0IGNoZWNrcy4KKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclNWR1NoYXBl
OjpmaWxsQ29udGFpbnMpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU1ZHU2hhcGU6OnN0cm9r
ZUNvbnRhaW5zKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclNWR1NoYXBlOjpsYXlvdXQpOgor
ICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU1ZHU2hhcGU6OnNob3VsZFN0cm9rZVplcm9MZW5ndGhT
dWJwYXRoKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclNWR1NoYXBlOjp6ZXJvTGVuZ3RoU3Vi
cGF0aFJlY3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU1ZHU2hhcGU6OnNldHVwU3F1YXJl
Q2FwUGF0aCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJTVkdTaGFwZTo6c2V0dXBOb25TY2Fs
aW5nU3Ryb2tlUGF0aCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJTVkdTaGFwZTo6ZmlsbEFu
ZFN0cm9rZVBhdGgpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU1ZHU2hhcGU6OnBhaW50KToK
KyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclNWR1NoYXBlOjphZGRGb2N1c1JpbmdSZWN0cyk6Cisg
ICAgICAgIChXZWJDb3JlOjpSZW5kZXJTVkdTaGFwZTo6bm9kZUF0RmxvYXRQb2ludCk6CisgICAg
ICAgIChXZWJDb3JlOjpSZW5kZXJTVkdTaGFwZTo6Y2FsY3VsYXRlTWFya2VyQm91bmRzSWZOZWVk
ZWQpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU1ZHU2hhcGU6OnVwZGF0ZUNhY2hlZEJvdW5k
YXJpZXMpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU1ZHU2hhcGU6OnN0cm9rZVdpZHRoKToK
KyAgICAgICAgKiByZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1NoYXBlLmg6IEFkZGVkLgorICAgICAg
ICAoV2ViQ29yZTo6Qm91bmRpbmdSZWN0U3Ryb2tlU3R5bGVBcHBsaWVyOjpCb3VuZGluZ1JlY3RT
dHJva2VTdHlsZUFwcGxpZXIpOgorICAgICAgICAoV2ViQ29yZTo6Qm91bmRpbmdSZWN0U3Ryb2tl
U3R5bGVBcHBsaWVyOjpzdHJva2VTdHlsZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJTVkdT
aGFwZTo6c2V0TmVlZHNTaGFwZVVwZGF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJTVkdT
aGFwZTo6c2V0TmVlZHNCb3VuZGFyaWVzVXBkYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRl
clNWR1NoYXBlOjpzZXROZWVkc1RyYW5zZm9ybVVwZGF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpS
ZW5kZXJTVkdTaGFwZTo6aXNQYWludGluZ0ZhbGxiYWNrKToKKyAgICAgICAgKFdlYkNvcmU6OlJl
bmRlclNWR1NoYXBlOjpwYXRoKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclNWR1NoYXBlOjpz
ZXRJc1BhaW50aW5nRmFsbGJhY2spOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU1ZHU2hhcGU6
OnNldFN0cm9rZUFuZE1hcmtlckJvdW5kaW5nQm94KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRl
clNWR1NoYXBlOjpoYXNQYXRoKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclNWR1NoYXBlOjpy
ZXBhaW50UmVjdEluTG9jYWxDb29yZGluYXRlcyk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJT
VkdTaGFwZTo6bG9jYWxUb1BhcmVudFRyYW5zZm9ybSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5k
ZXJTVkdTaGFwZTo6aXNTVkdTaGFwZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJTVkdTaGFw
ZTo6cmVuZGVyTmFtZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJTVkdTaGFwZTo6aXNSb3Vu
ZGVkUmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJTVkdTaGFwZTo6aW5mbGF0ZVdpdGhN
YXJrZXJCb3VuZHMpOgorICAgICAgICAoV2ViQ29yZTo6dG9SZW5kZXJTVkdTaGFwZSk6CisgICAg
ICAgICogcmVuZGVyaW5nL3N2Zy9TVkdJbmxpbmVUZXh0Qm94LmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OlNWR0lubGluZVRleHRCb3g6OnJlbGVhc2VQYWludGluZ1Jlc291cmNlKToKKyAgICAgICAg
KiByZW5kZXJpbmcvc3ZnL1NWR1JlbmRlclN1cHBvcnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
U1ZHUmVuZGVyU3VwcG9ydDo6ZmluaXNoUmVuZGVyU1ZHQ29udGVudCk6CisgICAgICAgIChXZWJD
b3JlOjpTVkdSZW5kZXJTdXBwb3J0OjpsYXlvdXRDaGlsZHJlbik6CisgICAgICAgICogcmVuZGVy
aW5nL3N2Zy9TVkdSZW5kZXJUcmVlQXNUZXh0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OndyaXRl
U3R5bGUpOgorICAgICAgICAoV2ViQ29yZTo6b3BlcmF0b3I8PCk6CisgICAgICAgIChXZWJDb3Jl
Ojp3cml0ZSk6CisgICAgICAgICogcmVuZGVyaW5nL3N2Zy9TVkdSZW5kZXJUcmVlQXNUZXh0Lmg6
CisgICAgICAgICogcmVuZGVyaW5nL3N2Zy9TVkdUZXh0UnVuUmVuZGVyaW5nQ29udGV4dC5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpTVkdUZXh0UnVuUmVuZGVyaW5nQ29udGV4dDo6ZHJhd1NWR0ds
eXBocyk6CisgICAgICAgICogc3ZnL1NWR0NpcmNsZUVsZW1lbnQuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6U1ZHQ2lyY2xlRWxlbWVudDo6c3ZnQXR0cmlidXRlQ2hhbmdlZCk6CisgICAgICAgICog
c3ZnL1NWR0VsbGlwc2VFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR0VsbGlwc2VF
bGVtZW50OjpzdmdBdHRyaWJ1dGVDaGFuZ2VkKToKKyAgICAgICAgKiBzdmcvU1ZHTGluZUVsZW1l
bnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U1ZHTGluZUVsZW1lbnQ6OnN2Z0F0dHJpYnV0ZUNo
YW5nZWQpOgorICAgICAgICAqIHN2Zy9TVkdQYXRoRWxlbWVudC5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpTVkdQYXRoRWxlbWVudDo6c3ZnQXR0cmlidXRlQ2hhbmdlZCk6CisgICAgICAgIChXZWJD
b3JlOjpTVkdQYXRoRWxlbWVudDo6cGF0aFNlZ0xpc3RDaGFuZ2VkKToKKyAgICAgICAgKFdlYkNv
cmU6OlNWR1BhdGhFbGVtZW50OjpjcmVhdGVSZW5kZXJlcik6CisgICAgICAgICogc3ZnL1NWR1Bh
dGhFbGVtZW50Lmg6CisgICAgICAgICogc3ZnL1NWR1BvbHlFbGVtZW50LmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OlNWR1BvbHlFbGVtZW50OjpzdmdBdHRyaWJ1dGVDaGFuZ2VkKToKKyAgICAgICAg
KiBzdmcvU1ZHUmVjdEVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U1ZHUmVjdEVsZW1l
bnQ6OnN2Z0F0dHJpYnV0ZUNoYW5nZWQpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHUmVjdEVsZW1l
bnQ6OmNyZWF0ZVJlbmRlcmVyKToKKyAgICAgICAgKiBzdmcvU1ZHUmVjdEVsZW1lbnQuaDoKKwog
MjAxMS0wOS0wNyAgQW5kcmV5IEtvc3lha292ICA8Y2FzZXFAY2hyb21pdW0ub3JnPgogCiAgICAg
ICAgIFdlYiBJbnNwZWN0b3I6IHRyeWluZyB0byBzY3JvbGwgbW91c2Ugd2hlZWwgd2hlbiBpbiBU
ZXh0Vmlld2VyJ3MgZ3V0dGVyIHBhbmUgY2F1c2VzIEV2ZW50RXhjZXB0aW9uOjpESVNQQVRDSF9S
RVFVRVNUX0VSUgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvR05VbWFrZWZpbGUubGlzdC5h
bSBiL1NvdXJjZS9XZWJDb3JlL0dOVW1ha2VmaWxlLmxpc3QuYW0KaW5kZXggMGVjMWE0ZC4uYzBk
NDk4OCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvR05VbWFrZWZpbGUubGlzdC5hbQorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9HTlVtYWtlZmlsZS5saXN0LmFtCkBAIC0zMjA2LDYgKzMyMDYsOCBA
QCB3ZWJjb3JlX3NvdXJjZXMgKz0gXAogCVNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVu
ZGVyU1ZHTW9kZWxPYmplY3QuaCBcCiAJU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5k
ZXJTVkdQYXRoLmNwcCBcCiAJU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdQ
YXRoLmggXAorCVNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVjdC5jcHAg
XAorCVNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVjdC5oIFwKIAlTb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291cmNlQ2xpcHBlci5jcHAgXAog
CVNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VDbGlwcGVyLmgg
XAogCVNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VDb250YWlu
ZXIuY3BwIFwKQEAgLTMyMzQsNiArMzIzNiw4IEBAIHdlYmNvcmVfc291cmNlcyArPSBcCiAJU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSb290LmggXAogCVNvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHU2hhZG93VHJlZVJvb3RDb250YWluZXIuY3BwIFwK
IAlTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1NoYWRvd1RyZWVSb290Q29u
dGFpbmVyLmggXAorCVNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHU2hhcGUu
Y3BwIFwKKwlTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1NoYXBlLmggXAog
CVNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHVFNwYW4uY3BwIFwKIAlTb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1RTcGFuLmggXAogCVNvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHVGV4dC5jcHAgXApkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvV2ViQ29yZS5neXBpIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBpCmluZGV4
IDAzOTg2NGIuLjFlMGE0NTkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lw
aQorKysgYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkKQEAgLTU4NTIsNiArNTg1Miw4IEBA
CiAgICAgICAgICAgICAncmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdNb2RlbE9iamVjdC5oJywKICAg
ICAgICAgICAgICdyZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1BhdGguY3BwJywKICAgICAgICAgICAg
ICdyZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1BhdGguaCcsCisgICAgICAgICAgICAncmVuZGVyaW5n
L3N2Zy9SZW5kZXJTVkdSZWN0LmNwcCcsCisgICAgICAgICAgICAncmVuZGVyaW5nL3N2Zy9SZW5k
ZXJTVkdSZWN0LmgnLAogICAgICAgICAgICAgJ3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVzb3Vy
Y2UuY3BwJywKICAgICAgICAgICAgICdyZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291cmNlLmgn
LAogICAgICAgICAgICAgJ3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VDbGlwcGVyLmNw
cCcsCkBAIC01ODgwLDYgKzU4ODIsOCBAQAogICAgICAgICAgICAgJ3JlbmRlcmluZy9zdmcvUmVu
ZGVyU1ZHUm9vdC5oJywKICAgICAgICAgICAgICdyZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1NoYWRv
d1RyZWVSb290Q29udGFpbmVyLmNwcCcsCiAgICAgICAgICAgICAncmVuZGVyaW5nL3N2Zy9SZW5k
ZXJTVkdTaGFkb3dUcmVlUm9vdENvbnRhaW5lci5oJywKKyAgICAgICAgICAgICdyZW5kZXJpbmcv
c3ZnL1JlbmRlclNWR1NoYXBlLmNwcCcsCisgICAgICAgICAgICAncmVuZGVyaW5nL3N2Zy9SZW5k
ZXJTVkdTaGFwZS5oJywKICAgICAgICAgICAgICdyZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1RTcGFu
LmNwcCcsCiAgICAgICAgICAgICAncmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdUU3Bhbi5oJywKICAg
ICAgICAgICAgICdyZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1RleHQuY3BwJywKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUucHJvIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5wcm8K
aW5kZXggMjJhODQ1ZC4uOTkyNTA3ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvV2ViQ29y
ZS5wcm8KKysrIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5wcm8KQEAgLTIyODIsNiArMjI4Miw3
IEBAIEhFQURFUlMgKz0gXAogICAgIHJlbmRlcmluZy9zdmcvUmVuZGVyU1ZHSW5saW5lVGV4dC5o
IFwKICAgICByZW5kZXJpbmcvc3ZnL1JlbmRlclNWR01vZGVsT2JqZWN0LmggXAogICAgIHJlbmRl
cmluZy9zdmcvUmVuZGVyU1ZHUGF0aC5oIFwKKyAgICByZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jl
Y3QuaCBcCiAgICAgcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJjZS5oIFwKICAgICByZW5k
ZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291cmNlQ2xpcHBlci5oIFwKICAgICByZW5kZXJpbmcvc3Zn
L1JlbmRlclNWR1Jlc291cmNlQ29udGFpbmVyLmggXApAQCAtMjI5Niw2ICsyMjk3LDcgQEAgSEVB
REVSUyArPSBcCiAgICAgcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJjZVNvbGlkQ29sb3Iu
aCBcCiAgICAgcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSb290LmggXAogICAgIHJlbmRlcmluZy9z
dmcvUmVuZGVyU1ZHU2hhZG93VHJlZVJvb3RDb250YWluZXIuaCBcCisgICAgcmVuZGVyaW5nL3N2
Zy9SZW5kZXJTVkdTaGFwZS5oIFwKICAgICByZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1RTcGFuLmgg
XAogICAgIHJlbmRlcmluZy9zdmcvUmVuZGVyU1ZHVGV4dC5oIFwKICAgICByZW5kZXJpbmcvc3Zn
L1JlbmRlclNWR1RleHRQYXRoLmggXApAQCAtMzMxMCw2ICszMzEyLDggQEAgY29udGFpbnMoREVG
SU5FUywgRU5BQkxFX1NWRz0xKSB7CiAgICAgICAgIHJlbmRlcmluZy9zdHlsZS9TVkdSZW5kZXJT
dHlsZURlZnMuY3BwIFwKICAgICAgICAgcmVuZGVyaW5nL1BvaW50ZXJFdmVudHNIaXRSdWxlcy5j
cHAgXAogICAgICAgICByZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1BhdGguY3BwIFwKKyAgICAgICAg
cmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZWN0LmNwcCBcCisgICAgICAgIHJlbmRlcmluZy9zdmcv
UmVuZGVyU1ZHU2hhcGUuY3BwIFwKICAgICAgICAgc3ZnL2FuaW1hdGlvbi9TTUlMVGltZS5jcHAg
XAogICAgICAgICBzdmcvYW5pbWF0aW9uL1NNSUxUaW1lQ29udGFpbmVyLmNwcCBcCiAgICAgICAg
IHN2Zy9hbmltYXRpb24vU1ZHU01JTEVsZW1lbnQuY3BwIFwKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL1dlYkNvcmUudmNwcm9qL1dlYkNvcmUudmNwcm9qIGIvU291cmNlL1dlYkNvcmUvV2Vi
Q29yZS52Y3Byb2ovV2ViQ29yZS52Y3Byb2oKaW5kZXggNmI2ODBiYS4uNTY3ODY5OCAxMDA3NTUK
LS0tIGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS52Y3Byb2ovV2ViQ29yZS52Y3Byb2oKKysrIGIv
U291cmNlL1dlYkNvcmUvV2ViQ29yZS52Y3Byb2ovV2ViQ29yZS52Y3Byb2oKQEAgLTQxNjQ3LDYg
KzQxNjQ3LDExOCBAQAogCQkJCQk+CiAJCQkJPC9GaWxlPgogCQkJCTxGaWxlCisJCQkJCVJlbGF0
aXZlUGF0aD0iLi5ccmVuZGVyaW5nXHN2Z1xSZW5kZXJTVkdSZWN0LmNwcCIKKwkJCQkJPgorCQkJ
CQk8RmlsZUNvbmZpZ3VyYXRpb24KKwkJCQkJCU5hbWU9IkRlYnVnfFdpbjMyIgorCQkJCQkJRXhj
bHVkZWRGcm9tQnVpbGQ9InRydWUiCisJCQkJCQk+CisJCQkJCQk8VG9vbAorCQkJCQkJCU5hbWU9
IlZDQ0xDb21waWxlclRvb2wiCisJCQkJCQkvPgorCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPgor
CQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24KKwkJCQkJCU5hbWU9IlJlbGVhc2V8V2luMzIiCisJCQkJ
CQlFeGNsdWRlZEZyb21CdWlsZD0idHJ1ZSIKKwkJCQkJCT4KKwkJCQkJCTxUb29sCisJCQkJCQkJ
TmFtZT0iVkNDTENvbXBpbGVyVG9vbCIKKwkJCQkJCS8+CisJCQkJCTwvRmlsZUNvbmZpZ3VyYXRp
b24+CisJCQkJCTxGaWxlQ29uZmlndXJhdGlvbgorCQkJCQkJTmFtZT0iRGVidWdfQ2Fpcm9fQ0ZM
aXRlfFdpbjMyIgorCQkJCQkJRXhjbHVkZWRGcm9tQnVpbGQ9InRydWUiCisJCQkJCQk+CisJCQkJ
CQk8VG9vbAorCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiCisJCQkJCQkvPgorCQkJCQk8
L0ZpbGVDb25maWd1cmF0aW9uPgorCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24KKwkJCQkJCU5hbWU9
IlJlbGVhc2VfQ2Fpcm9fQ0ZMaXRlfFdpbjMyIgorCQkJCQkJRXhjbHVkZWRGcm9tQnVpbGQ9InRy
dWUiCisJCQkJCQk+CisJCQkJCQk8VG9vbAorCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wi
CisJCQkJCQkvPgorCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPgorCQkJCQk8RmlsZUNvbmZpZ3Vy
YXRpb24KKwkJCQkJCU5hbWU9IkRlYnVnX0FsbHxXaW4zMiIKKwkJCQkJCUV4Y2x1ZGVkRnJvbUJ1
aWxkPSJ0cnVlIgorCQkJCQkJPgorCQkJCQkJPFRvb2wKKwkJCQkJCQlOYW1lPSJWQ0NMQ29tcGls
ZXJUb29sIgorCQkJCQkJLz4KKwkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4KKwkJCQkJPEZpbGVD
b25maWd1cmF0aW9uCisJCQkJCQlOYW1lPSJQcm9kdWN0aW9ufFdpbjMyIgorCQkJCQkJRXhjbHVk
ZWRGcm9tQnVpbGQ9InRydWUiCisJCQkJCQk+CisJCQkJCQk8VG9vbAorCQkJCQkJCU5hbWU9IlZD
Q0xDb21waWxlclRvb2wiCisJCQkJCQkvPgorCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPgorCQkJ
CTwvRmlsZT4KKwkJCQk8RmlsZQorCQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXHJlbmRlcmluZ1xzdmdc
UmVuZGVyU1ZHUmVjdC5oIgorCQkJCQk+CisJCQkJPC9GaWxlPgorCQkJCTxGaWxlCisJCQkJCVJl
bGF0aXZlUGF0aD0iLi5ccmVuZGVyaW5nXHN2Z1xSZW5kZXJTVkdTaGFwZS5jcHAiCisJCQkJCT4K
KwkJCQkJPEZpbGVDb25maWd1cmF0aW9uCisJCQkJCQlOYW1lPSJEZWJ1Z3xXaW4zMiIKKwkJCQkJ
CUV4Y2x1ZGVkRnJvbUJ1aWxkPSJ0cnVlIgorCQkJCQkJPgorCQkJCQkJPFRvb2wKKwkJCQkJCQlO
YW1lPSJWQ0NMQ29tcGlsZXJUb29sIgorCQkJCQkJLz4KKwkJCQkJPC9GaWxlQ29uZmlndXJhdGlv
bj4KKwkJCQkJPEZpbGVDb25maWd1cmF0aW9uCisJCQkJCQlOYW1lPSJSZWxlYXNlfFdpbjMyIgor
CQkJCQkJRXhjbHVkZWRGcm9tQnVpbGQ9InRydWUiCisJCQkJCQk+CisJCQkJCQk8VG9vbAorCQkJ
CQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiCisJCQkJCQkvPgorCQkJCQk8L0ZpbGVDb25maWd1
cmF0aW9uPgorCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24KKwkJCQkJCU5hbWU9IkRlYnVnX0NhaXJv
X0NGTGl0ZXxXaW4zMiIKKwkJCQkJCUV4Y2x1ZGVkRnJvbUJ1aWxkPSJ0cnVlIgorCQkJCQkJPgor
CQkJCQkJPFRvb2wKKwkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIgorCQkJCQkJLz4KKwkJ
CQkJPC9GaWxlQ29uZmlndXJhdGlvbj4KKwkJCQkJPEZpbGVDb25maWd1cmF0aW9uCisJCQkJCQlO
YW1lPSJSZWxlYXNlX0NhaXJvX0NGTGl0ZXxXaW4zMiIKKwkJCQkJCUV4Y2x1ZGVkRnJvbUJ1aWxk
PSJ0cnVlIgorCQkJCQkJPgorCQkJCQkJPFRvb2wKKwkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJU
b29sIgorCQkJCQkJLz4KKwkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4KKwkJCQkJPEZpbGVDb25m
aWd1cmF0aW9uCisJCQkJCQlOYW1lPSJEZWJ1Z19BbGx8V2luMzIiCisJCQkJCQlFeGNsdWRlZEZy
b21CdWlsZD0idHJ1ZSIKKwkJCQkJCT4KKwkJCQkJCTxUb29sCisJCQkJCQkJTmFtZT0iVkNDTENv
bXBpbGVyVG9vbCIKKwkJCQkJCS8+CisJCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+CisJCQkJCTxG
aWxlQ29uZmlndXJhdGlvbgorCQkJCQkJTmFtZT0iUHJvZHVjdGlvbnxXaW4zMiIKKwkJCQkJCUV4
Y2x1ZGVkRnJvbUJ1aWxkPSJ0cnVlIgorCQkJCQkJPgorCQkJCQkJPFRvb2wKKwkJCQkJCQlOYW1l
PSJWQ0NMQ29tcGlsZXJUb29sIgorCQkJCQkJLz4KKwkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4K
KwkJCQk8L0ZpbGU+CisJCQkJPEZpbGUKKwkJCQkJUmVsYXRpdmVQYXRoPSIuLlxyZW5kZXJpbmdc
c3ZnXFJlbmRlclNWR1NoYXBlLmgiCisJCQkJCT4KKwkJCQk8L0ZpbGU+CisJCQkJPEZpbGUKIAkJ
CQkJUmVsYXRpdmVQYXRoPSIuLlxyZW5kZXJpbmdcc3ZnXFJlbmRlclNWR1RleHQuY3BwIgogCQkJ
CQk+CiAJCQkJCTxGaWxlQ29uZmlndXJhdGlvbgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvRmxvYXRSZWN0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL0Zsb2F0UmVjdC5jcHAKaW5kZXggYjg0YTg5Mi4uZjRjOWRmMCAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRmxvYXRSZWN0LmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9GbG9hdFJlY3QuY3BwCkBAIC02OCw2ICs2
OCwxMyBAQCBib29sIEZsb2F0UmVjdDo6Y29udGFpbnMoY29uc3QgRmxvYXRSZWN0JiBvdGhlcikg
Y29uc3QKICAgICAgICAgJiYgeSgpIDw9IG90aGVyLnkoKSAmJiBtYXhZKCkgPj0gb3RoZXIubWF4
WSgpOwogfQogCitib29sIEZsb2F0UmVjdDo6Y29udGFpbnMoY29uc3QgRmxvYXRQb2ludCYgcG9p
bnQsIENvbnRhaW5zTW9kZSBjb250YWluc01vZGUpIGNvbnN0Cit7CisgICAgaWYgKGNvbnRhaW5z
TW9kZSA9PSBDb250YWluc1JlY3QpCisgICAgICAgIHJldHVybiBjb250YWlucyhwb2ludC54KCks
IHBvaW50LnkoKSk7CisgICAgcmV0dXJuIGNvbnRhaW5zKHBvaW50LngoKSwgcG9pbnQueSgpKSAm
JiB4KCkgPCBwb2ludC54KCkgJiYgbWF4WCgpID4gcG9pbnQueCgpICYmIHkoKSA8IHBvaW50Lnko
KSAmJiBtYXhZKCkgPiB5KCk7Cit9CisKIHZvaWQgRmxvYXRSZWN0OjppbnRlcnNlY3QoY29uc3Qg
RmxvYXRSZWN0JiBvdGhlcikKIHsKICAgICBmbG9hdCBsID0gbWF4KHgoKSwgb3RoZXIueCgpKTsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0Zsb2F0UmVjdC5o
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRmxvYXRSZWN0LmgKaW5kZXggMjRh
NmIxOS4uZjMzZGY2MyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvRmxvYXRSZWN0LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRmxv
YXRSZWN0LmgKQEAgLTc0LDYgKzc0LDExIEBAIGNsYXNzIEludFBvaW50OwogCiBjbGFzcyBGbG9h
dFJlY3QgewogcHVibGljOgorICAgIGVudW0gQ29udGFpbnNNb2RlIHsKKyAgICAgICAgQ29udGFp
bnNSZWN0LAorICAgICAgICBJbnNpZGVSZWN0CisgICAgfTsKKwogICAgIEZsb2F0UmVjdCgpIHsg
fQogICAgIEZsb2F0UmVjdChjb25zdCBGbG9hdFBvaW50JiBsb2NhdGlvbiwgY29uc3QgRmxvYXRT
aXplJiBzaXplKQogICAgICAgICA6IG1fbG9jYXRpb24obG9jYXRpb24pLCBtX3NpemUoc2l6ZSkg
eyB9CkBAIC0xNDYsNiArMTUxLDcgQEAgcHVibGljOgogCiAgICAgYm9vbCBpbnRlcnNlY3RzKGNv
bnN0IEZsb2F0UmVjdCYpIGNvbnN0OwogICAgIGJvb2wgY29udGFpbnMoY29uc3QgRmxvYXRSZWN0
JikgY29uc3Q7CisgICAgYm9vbCBjb250YWlucyhjb25zdCBGbG9hdFBvaW50JiwgQ29udGFpbnNN
b2RlIGNvbnRhaW5zTW9kZSA9IENvbnRhaW5zUmVjdCkgY29uc3Q7CiAKICAgICB2b2lkIGludGVy
c2VjdChjb25zdCBGbG9hdFJlY3QmKTsKICAgICB2b2lkIHVuaXRlKGNvbnN0IEZsb2F0UmVjdCYp
OwpAQCAtMTU1LDcgKzE2MSw2IEBAIHB1YmxpYzoKICAgICAvLyBpcyByZWFsbHkgY2hlY2tpbmcg
Zm9yIGNvbnRhaW5tZW50IG9mIDF4MSByZWN0LCBidXQgdGhhdCBkb2Vzbid0IG1ha2Ugc2Vuc2Ug
d2l0aCBmbG9hdHMuCiAgICAgYm9vbCBjb250YWlucyhmbG9hdCBweCwgZmxvYXQgcHkpIGNvbnN0
CiAgICAgICAgIHsgcmV0dXJuIHB4ID49IHgoKSAmJiBweCA8PSBtYXhYKCkgJiYgcHkgPj0geSgp
ICYmIHB5IDw9IG1heFkoKTsgfQotICAgIGJvb2wgY29udGFpbnMoY29uc3QgRmxvYXRQb2ludCYg
cG9pbnQpIGNvbnN0IHsgcmV0dXJuIGNvbnRhaW5zKHBvaW50LngoKSwgcG9pbnQueSgpKTsgfQog
CiAgICAgdm9pZCBpbmZsYXRlWChmbG9hdCBkeCkgewogICAgICAgICBtX2xvY2F0aW9uLnNldFgo
bV9sb2NhdGlvbi54KCkgLSBkeCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvUmVuZGVyT2JqZWN0LmggYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyT2JqZWN0
LmgKaW5kZXggYmZhYTY5NS4uY2VjYzRmOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlck9iamVjdC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJPYmplY3QuaApAQCAtMzU3LDYgKzM1Nyw4IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIGJvb2wg
aXNTVkdHcmFkaWVudFN0b3AoKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQogICAgIHZpcnR1YWwg
Ym9vbCBpc1NWR0hpZGRlbkNvbnRhaW5lcigpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CiAgICAg
dmlydHVhbCBib29sIGlzU1ZHUGF0aCgpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CisgICAgdmly
dHVhbCBib29sIGlzU1ZHUmVjdCgpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CisgICAgdmlydHVh
bCBib29sIGlzU1ZHU2hhcGUoKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQogICAgIHZpcnR1YWwg
Ym9vbCBpc1NWR1RleHQoKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQogICAgIHZpcnR1YWwgYm9v
bCBpc1NWR1RleHRQYXRoKCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KICAgICB2aXJ0dWFsIGJv
b2wgaXNTVkdJbmxpbmUoKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRyZWVBc1RleHQuY3BwIGIvU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL1JlbmRlclRyZWVBc1RleHQuY3BwCmluZGV4IDY0ZTY1NGMuLmIxMmQ3NzYg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUcmVlQXNUZXh0LmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVHJlZUFzVGV4dC5jcHAKQEAg
LTUyMCw4ICs1MjAsOCBAQCBzdGF0aWMgdm9pZCB3cml0ZVRleHRSdW4oVGV4dFN0cmVhbSYgdHMs
IGNvbnN0IFJlbmRlclRleHQmIG8sIGNvbnN0IElubGluZVRleHRCbwogdm9pZCB3cml0ZShUZXh0
U3RyZWFtJiB0cywgY29uc3QgUmVuZGVyT2JqZWN0JiBvLCBpbnQgaW5kZW50LCBSZW5kZXJBc1Rl
eHRCZWhhdmlvciBiZWhhdmlvcikKIHsKICNpZiBFTkFCTEUoU1ZHKQotICAgIGlmIChvLmlzU1ZH
UGF0aCgpKSB7Ci0gICAgICAgIHdyaXRlKHRzLCAqdG9SZW5kZXJTVkdQYXRoKCZvKSwgaW5kZW50
KTsKKyAgICBpZiAoby5pc1NWR1NoYXBlKCkpIHsKKyAgICAgICAgd3JpdGUodHMsICp0b1JlbmRl
clNWR1NoYXBlKCZvKSwgaW5kZW50KTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICBpZiAo
by5pc1NWR0dyYWRpZW50U3RvcCgpKSB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvc3ZnL1JlbmRlclNWR0FsbEluT25lLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9zdmcvUmVuZGVyU1ZHQWxsSW5PbmUuY3BwCmluZGV4IDllYTNiZTUuLjI5NjkwMDggMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHQWxsSW5PbmUuY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHQWxsSW5PbmUuY3Bw
CkBAIC0zNSw2ICszNSw3IEBACiAjaW5jbHVkZSAiUmVuZGVyU1ZHSW5saW5lVGV4dC5jcHAiCiAj
aW5jbHVkZSAiUmVuZGVyU1ZHTW9kZWxPYmplY3QuY3BwIgogI2luY2x1ZGUgIlJlbmRlclNWR1Bh
dGguY3BwIgorI2luY2x1ZGUgIlJlbmRlclNWR1JlY3QuY3BwIgogI2luY2x1ZGUgIlJlbmRlclNW
R1Jlc291cmNlLmNwcCIKICNpbmNsdWRlICJSZW5kZXJTVkdSZXNvdXJjZUNsaXBwZXIuY3BwIgog
I2luY2x1ZGUgIlJlbmRlclNWR1Jlc291cmNlQ29udGFpbmVyLmNwcCIKQEAgLTQ5LDYgKzUwLDcg
QEAKICNpbmNsdWRlICJSZW5kZXJTVkdSZXNvdXJjZVNvbGlkQ29sb3IuY3BwIgogI2luY2x1ZGUg
IlJlbmRlclNWR1Jvb3QuY3BwIgogI2luY2x1ZGUgIlJlbmRlclNWR1NoYWRvd1RyZWVSb290Q29u
dGFpbmVyLmNwcCIKKyNpbmNsdWRlICJSZW5kZXJTVkdTaGFwZS5jcHAiCiAjaW5jbHVkZSAiUmVu
ZGVyU1ZHVFNwYW4uY3BwIgogI2luY2x1ZGUgIlJlbmRlclNWR1RleHQuY3BwIgogI2luY2x1ZGUg
IlJlbmRlclNWR1RleHRQYXRoLmNwcCIKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9zdmcvUmVuZGVyU1ZHTW9kZWxPYmplY3QuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL3N2Zy9SZW5kZXJTVkdNb2RlbE9iamVjdC5jcHAKaW5kZXggMTRjMWRiOC4uYzIzNDBiMyAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdNb2RlbE9i
amVjdC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdNb2Rl
bE9iamVjdC5jcHAKQEAgLTE1Myw3ICsxNTMsNyBAQCBzdGF0aWMgYm9vbCBpbnRlcnNlY3RzQWxs
b3dpbmdFbXB0eShjb25zdCBGbG9hdFJlY3QmIHIsIGNvbnN0IEZsb2F0UmVjdCYgb3RoZXIpCiAv
LyBpbWFnZSwgbGluZSwgcGF0aCwgcG9seWdvbiwgcG9seWxpbmUsIHJlY3QsIHRleHQgYW5kIHVz
ZS4KIHN0YXRpYyBib29sIGlzR3JhcGhpY3NFbGVtZW50KFJlbmRlck9iamVjdCogcmVuZGVyZXIp
CiB7Ci0gICAgcmV0dXJuIHJlbmRlcmVyLT5pc1NWR1BhdGgoKSB8fCByZW5kZXJlci0+aXNTVkdU
ZXh0KCkgfHwgcmVuZGVyZXItPmlzU1ZHSW1hZ2UoKSB8fCByZW5kZXJlci0+aXNTVkdTaGFkb3dU
cmVlUm9vdENvbnRhaW5lcigpOworICAgIHJldHVybiByZW5kZXJlci0+aXNTVkdTaGFwZSgpIHx8
IHJlbmRlcmVyLT5pc1NWR1RleHQoKSB8fCByZW5kZXJlci0+aXNTVkdJbWFnZSgpIHx8IHJlbmRl
cmVyLT5pc1NWR1NoYWRvd1RyZWVSb290Q29udGFpbmVyKCk7CiB9CiAKIGJvb2wgUmVuZGVyU1ZH
TW9kZWxPYmplY3Q6OmNoZWNrSW50ZXJzZWN0aW9uKFJlbmRlck9iamVjdCogcmVuZGVyZXIsIGNv
bnN0IEZsb2F0UmVjdCYgcmVjdCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9zdmcvUmVuZGVyU1ZHUGF0aC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1Jl
bmRlclNWR1BhdGguY3BwCmluZGV4IGI3YWQ3YTIuLmZmMTU1MDUgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUGF0aC5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdQYXRoLmNwcApAQCAtNiw2ICs2LDggQEAKICAq
IENvcHlyaWdodCAoQykgMjAwOSBEaXJrIFNjaHVsemUgPGtyaXRAd2Via2l0Lm9yZz4KICAqIENv
cHlyaWdodCAoQykgUmVzZWFyY2ggSW4gTW90aW9uIExpbWl0ZWQgMjAxMC4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KICAqIENvcHlyaWdodCAoQykgMjAwOSBKZWZmIFNjaGlsbGVyIDxjb2RlZHJlYWRA
Z21haWwuY29tPgorICogQ29weXJpZ2h0IChDKSAyMDExIFJlbmF0YSBIb2RvdmFuIDxyZW5pQHdl
YmtpdC5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgVW5pdmVyc2l0eSBvZiBTemVnZWQKICAq
CiAgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUg
aXQgYW5kL29yCiAgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFy
eSBHZW5lcmFsIFB1YmxpYwpAQCAtMjgsNTAgKzMwLDEzIEBACiAjaWYgRU5BQkxFKFNWRykKICNp
bmNsdWRlICJSZW5kZXJTVkdQYXRoLmgiCiAKLSNpbmNsdWRlICJGbG9hdFBvaW50LmgiCi0jaW5j
bHVkZSAiRmxvYXRRdWFkLmgiCi0jaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCi0jaW5jbHVk
ZSAiSGl0VGVzdFJlcXVlc3QuaCIKLSNpbmNsdWRlICJMYXlvdXRSZXBhaW50ZXIuaCIKLSNpbmNs
dWRlICJQb2ludGVyRXZlbnRzSGl0UnVsZXMuaCIKLSNpbmNsdWRlICJSZW5kZXJTVkdDb250YWlu
ZXIuaCIKLSNpbmNsdWRlICJSZW5kZXJTVkdSZXNvdXJjZU1hcmtlci5oIgotI2luY2x1ZGUgIlJl
bmRlclNWR1Jlc291cmNlU29saWRDb2xvci5oIgotI2luY2x1ZGUgIlNWR1JlbmRlclN1cHBvcnQu
aCIKLSNpbmNsdWRlICJTVkdSZXNvdXJjZXMuaCIKKyNpbmNsdWRlICJTVkdQYXRoRWxlbWVudC5o
IgogI2luY2x1ZGUgIlNWR1N0eWxlZFRyYW5zZm9ybWFibGVFbGVtZW50LmgiCi0jaW5jbHVkZSAi
U1ZHVHJhbnNmb3JtTGlzdC5oIgotI2luY2x1ZGUgIlNWR1VSSVJlZmVyZW5jZS5oIgotI2luY2x1
ZGUgIlN0cm9rZVN0eWxlQXBwbGllci5oIgotI2luY2x1ZGUgPHd0Zi9NYXRoRXh0cmFzLmg+CiAK
IG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotY2xhc3MgQm91bmRpbmdSZWN0U3Ryb2tlU3R5bGVBcHBs
aWVyIDogcHVibGljIFN0cm9rZVN0eWxlQXBwbGllciB7Ci1wdWJsaWM6Ci0gICAgQm91bmRpbmdS
ZWN0U3Ryb2tlU3R5bGVBcHBsaWVyKGNvbnN0IFJlbmRlck9iamVjdCogb2JqZWN0LCBSZW5kZXJT
dHlsZSogc3R5bGUpCi0gICAgICAgIDogbV9vYmplY3Qob2JqZWN0KQotICAgICAgICAsIG1fc3R5
bGUoc3R5bGUpCi0gICAgewotICAgICAgICBBU1NFUlQoc3R5bGUpOwotICAgICAgICBBU1NFUlQo
b2JqZWN0KTsKLSAgICB9Ci0KLSAgICB2b2lkIHN0cm9rZVN0eWxlKEdyYXBoaWNzQ29udGV4dCog
Z2MpCi0gICAgewotICAgICAgICBTVkdSZW5kZXJTdXBwb3J0OjphcHBseVN0cm9rZVN0eWxlVG9D
b250ZXh0KGdjLCBtX3N0eWxlLCBtX29iamVjdCk7Ci0gICAgfQotCi1wcml2YXRlOgotICAgIGNv
bnN0IFJlbmRlck9iamVjdCogbV9vYmplY3Q7Ci0gICAgUmVuZGVyU3R5bGUqIG1fc3R5bGU7Ci19
OwotCiBSZW5kZXJTVkdQYXRoOjpSZW5kZXJTVkdQYXRoKFNWR1N0eWxlZFRyYW5zZm9ybWFibGVF
bGVtZW50KiBub2RlKQotICAgIDogUmVuZGVyU1ZHTW9kZWxPYmplY3Qobm9kZSkKLSAgICAsIG1f
bmVlZHNCb3VuZGFyaWVzVXBkYXRlKGZhbHNlKSAvLyBkZWZhdWx0IGlzIGZhbHNlLCB0aGUgY2Fj
aGVkIHJlY3RzIGFyZSBlbXB0eSBmcm9tIHRoZSBiZWdpbm5pbmcKLSAgICAsIG1fbmVlZHNQYXRo
VXBkYXRlKHRydWUpIC8vIGRlZmF1bHQgaXMgdHJ1ZSwgc28gd2UgZ3JhYiBhIFBhdGggb2JqZWN0
IG9uY2UgZnJvbSBTVkdTdHlsZWRUcmFuc2Zvcm1hYmxlRWxlbWVudAotICAgICwgbV9uZWVkc1Ry
YW5zZm9ybVVwZGF0ZSh0cnVlKSAvLyBkZWZhdWx0IGlzIHRydWUsIHNvIHdlIGdyYWIgYSBBZmZp
bmVUcmFuc2Zvcm0gb2JqZWN0IG9uY2UgZnJvbSBTVkdTdHlsZWRUcmFuc2Zvcm1hYmxlRWxlbWVu
dAorICAgIDogUmVuZGVyU1ZHU2hhcGUobm9kZSkKIHsKIH0KIApAQCAtNzksMzE0ICs0NCwxNiBA
QCBSZW5kZXJTVkdQYXRoOjp+UmVuZGVyU1ZHUGF0aCgpCiB7CiB9CiAKLWJvb2wgUmVuZGVyU1ZH
UGF0aDo6ZmlsbENvbnRhaW5zKGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50LCBib29sIHJlcXVpcmVz
RmlsbCwgV2luZFJ1bGUgZmlsbFJ1bGUpCi17Ci0gICAgaWYgKCFtX2ZpbGxCb3VuZGluZ0JveC5j
b250YWlucyhwb2ludCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIENvbG9yIGZhbGxi
YWNrQ29sb3I7Ci0gICAgaWYgKHJlcXVpcmVzRmlsbCAmJiAhUmVuZGVyU1ZHUmVzb3VyY2U6OmZp
bGxQYWludGluZ1Jlc291cmNlKHRoaXMsIHN0eWxlKCksIGZhbGxiYWNrQ29sb3IpKQotICAgICAg
ICByZXR1cm4gZmFsc2U7Ci0KLSAgICByZXR1cm4gbV9wYXRoLmNvbnRhaW5zKHBvaW50LCBmaWxs
UnVsZSk7Ci19Ci0KLWJvb2wgUmVuZGVyU1ZHUGF0aDo6c3Ryb2tlQ29udGFpbnMoY29uc3QgRmxv
YXRQb2ludCYgcG9pbnQsIGJvb2wgcmVxdWlyZXNTdHJva2UpCi17Ci0gICAgaWYgKCFtX3N0cm9r
ZUFuZE1hcmtlckJvdW5kaW5nQm94LmNvbnRhaW5zKHBvaW50KSkKLSAgICAgICAgcmV0dXJuIGZh
bHNlOwotCi0gICAgQ29sb3IgZmFsbGJhY2tDb2xvcjsKLSAgICBpZiAocmVxdWlyZXNTdHJva2Ug
JiYgIVJlbmRlclNWR1Jlc291cmNlOjpzdHJva2VQYWludGluZ1Jlc291cmNlKHRoaXMsIHN0eWxl
KCksIGZhbGxiYWNrQ29sb3IpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBpZiAoc2hv
dWxkU3Ryb2tlWmVyb0xlbmd0aFN1YnBhdGgoKSkKLSAgICAgICAgcmV0dXJuIHplcm9MZW5ndGhT
dWJwYXRoUmVjdCgpLmNvbnRhaW5zKHBvaW50KTsKLQotICAgIEJvdW5kaW5nUmVjdFN0cm9rZVN0
eWxlQXBwbGllciBzdHJva2VTdHlsZSh0aGlzLCBzdHlsZSgpKTsKLSAgICByZXR1cm4gbV9wYXRo
LnN0cm9rZUNvbnRhaW5zKCZzdHJva2VTdHlsZSwgcG9pbnQpOwotfQotCi12b2lkIFJlbmRlclNW
R1BhdGg6OmxheW91dCgpCi17Ci0gICAgTGF5b3V0UmVwYWludGVyIHJlcGFpbnRlcigqdGhpcywg
Y2hlY2tGb3JSZXBhaW50RHVyaW5nTGF5b3V0KCkgJiYgc2VsZk5lZWRzTGF5b3V0KCkpOwotICAg
IFNWR1N0eWxlZFRyYW5zZm9ybWFibGVFbGVtZW50KiBlbGVtZW50ID0gc3RhdGljX2Nhc3Q8U1ZH
U3R5bGVkVHJhbnNmb3JtYWJsZUVsZW1lbnQqPihub2RlKCkpOwotCi0gICAgYm9vbCB1cGRhdGVD
YWNoZWRCb3VuZGFyaWVzSW5QYXJlbnRzID0gZmFsc2U7Ci0KLSAgICBib29sIG5lZWRzUGF0aFVw
ZGF0ZSA9IG1fbmVlZHNQYXRoVXBkYXRlOwotICAgIGlmIChuZWVkc1BhdGhVcGRhdGUpIHsKLSAg
ICAgICAgbV9wYXRoLmNsZWFyKCk7Ci0gICAgICAgIGVsZW1lbnQtPnRvUGF0aERhdGEobV9wYXRo
KTsKLSAgICAgICAgbV9uZWVkc1BhdGhVcGRhdGUgPSBmYWxzZTsKLSAgICAgICAgdXBkYXRlQ2Fj
aGVkQm91bmRhcmllc0luUGFyZW50cyA9IHRydWU7Ci0gICAgfQotCi0gICAgaWYgKG1fbmVlZHNU
cmFuc2Zvcm1VcGRhdGUpIHsKLSAgICAgICAgbV9sb2NhbFRyYW5zZm9ybSA9IGVsZW1lbnQtPmFu
aW1hdGVkTG9jYWxUcmFuc2Zvcm0oKTsKLSAgICAgICAgbV9uZWVkc1RyYW5zZm9ybVVwZGF0ZSA9
IGZhbHNlOwotICAgICAgICB1cGRhdGVDYWNoZWRCb3VuZGFyaWVzSW5QYXJlbnRzID0gdHJ1ZTsK
LSAgICB9Ci0KLSAgICBpZiAobV9uZWVkc0JvdW5kYXJpZXNVcGRhdGUpCi0gICAgICAgIHVwZGF0
ZUNhY2hlZEJvdW5kYXJpZXNJblBhcmVudHMgPSB0cnVlOwotCi0gICAgLy8gSW52YWxpZGF0ZSBh
bGwgcmVzb3VyY2VzIG9mIHRoaXMgY2xpZW50IGlmIG91ciBsYXlvdXQgY2hhbmdlZC4KLSAgICBp
ZiAobV9ldmVySGFkTGF5b3V0ICYmIHNlbGZOZWVkc0xheW91dCgpKSB7Ci0gICAgICAgIFNWR1Jl
c291cmNlc0NhY2hlOjpjbGllbnRMYXlvdXRDaGFuZ2VkKHRoaXMpOwotICAgICAgICBtX21hcmtl
ckxheW91dEluZm8uY2xlYXIoKTsKLSAgICB9Ci0KLSAgICAvLyBBdCB0aGlzIHBvaW50IExheW91
dFJlcGFpbnRlciBhbHJlYWR5IGdyYWJiZWQgdGhlIG9sZCBib3VuZHMsCi0gICAgLy8gcmVjYWxj
dWxhdGUgdGhlbSBub3cgc28gcmVwYWludEFmdGVyTGF5b3V0KCkgdXNlcyB0aGUgbmV3IGJvdW5k
cy4KLSAgICBpZiAobmVlZHNQYXRoVXBkYXRlIHx8IG1fbmVlZHNCb3VuZGFyaWVzVXBkYXRlKSB7
Ci0gICAgICAgIHVwZGF0ZUNhY2hlZEJvdW5kYXJpZXMoKTsKLSAgICAgICAgbV9uZWVkc0JvdW5k
YXJpZXNVcGRhdGUgPSBmYWxzZTsKLSAgICB9Ci0KLSAgICAvLyBJZiBvdXIgYm91bmRzIGNoYW5n
ZWQsIG5vdGlmeSB0aGUgcGFyZW50cy4KLSAgICBpZiAodXBkYXRlQ2FjaGVkQm91bmRhcmllc0lu
UGFyZW50cykKLSAgICAgICAgUmVuZGVyU1ZHTW9kZWxPYmplY3Q6OnNldE5lZWRzQm91bmRhcmll
c1VwZGF0ZSgpOwotCi0gICAgcmVwYWludGVyLnJlcGFpbnRBZnRlckxheW91dCgpOwotICAgIHNl
dE5lZWRzTGF5b3V0KGZhbHNlKTsKLX0KLQotYm9vbCBSZW5kZXJTVkdQYXRoOjpzaG91bGRTdHJv
a2VaZXJvTGVuZ3RoU3VicGF0aCgpIGNvbnN0Ci17Ci0gICAgLy8gU3BlYygxMS40KTogQW55IHpl
cm8gbGVuZ3RoIHN1YnBhdGggc2hhbGwgbm90IGJlIHN0cm9rZWQgaWYgdGhlIOKAmHN0cm9rZS1s
aW5lY2Fw4oCZIHByb3BlcnR5IGhhcyBhIHZhbHVlIG9mIGJ1dHQKLSAgICAvLyBidXQgc2hhbGwg
YmUgc3Ryb2tlZCBpZiB0aGUg4oCYc3Ryb2tlLWxpbmVjYXDigJkgcHJvcGVydHkgaGFzIGEgdmFs
dWUgb2Ygcm91bmQgb3Igc3F1YXJlCi0gICAgcmV0dXJuIHN0eWxlKCktPnN2Z1N0eWxlKCktPmhh
c1N0cm9rZSgpICYmIHN0eWxlKCktPnN2Z1N0eWxlKCktPmNhcFN0eWxlKCkgIT0gQnV0dENhcCAm
JiAhbV9maWxsQm91bmRpbmdCb3gud2lkdGgoKSAmJiAhbV9maWxsQm91bmRpbmdCb3guaGVpZ2h0
KCk7Ci19Ci0KLUZsb2F0UmVjdCBSZW5kZXJTVkdQYXRoOjp6ZXJvTGVuZ3RoU3VicGF0aFJlY3Qo
KSBjb25zdAotewotICAgIFNWR0VsZW1lbnQqIHN2Z0VsZW1lbnQgPSBzdGF0aWNfY2FzdDxTVkdF
bGVtZW50Kj4obm9kZSgpKTsKLSAgICBmbG9hdCBzdHJva2VXaWR0aCA9IHN0eWxlKCktPnN2Z1N0
eWxlKCktPnN0cm9rZVdpZHRoKCkudmFsdWUoc3ZnRWxlbWVudCk7Ci0gICAgcmV0dXJuIEZsb2F0
UmVjdChtX2ZpbGxCb3VuZGluZ0JveC54KCkgLSBzdHJva2VXaWR0aCAvIDIsIG1fZmlsbEJvdW5k
aW5nQm94LnkoKSAtIHN0cm9rZVdpZHRoIC8gMiwgc3Ryb2tlV2lkdGgsIHN0cm9rZVdpZHRoKTsK
LX0KLQotdm9pZCBSZW5kZXJTVkdQYXRoOjpzZXR1cFNxdWFyZUNhcFBhdGgoUGF0aComIHVzZVBh
dGgsIGludCYgYXBwbHlNb2RlKQotewotICAgIC8vIFNwZWMoMTEuNCk6IEFueSB6ZXJvIGxlbmd0
aCBzdWJwYXRoIHNoYWxsIG5vdCBiZSBzdHJva2VkIGlmIHRoZSDigJhzdHJva2UtbGluZWNhcOKA
mSBwcm9wZXJ0eSBoYXMgYSB2YWx1ZSBvZiBidXR0Ci0gICAgLy8gYnV0IHNoYWxsIGJlIHN0cm9r
ZWQgaWYgdGhlIOKAmHN0cm9rZS1saW5lY2Fw4oCZIHByb3BlcnR5IGhhcyBhIHZhbHVlIG9mIHJv
dW5kIG9yIHNxdWFyZQotICAgIERFRklORV9TVEFUSUNfTE9DQUwoUGF0aCwgdGVtcFBhdGgsICgp
KTsKLQotICAgIGFwcGx5TW9kZSA9IEFwcGx5VG9GaWxsTW9kZTsKLSAgICB1c2VQYXRoID0gJnRl
bXBQYXRoOwotICAgIHVzZVBhdGgtPmNsZWFyKCk7Ci0gICAgaWYgKHN0eWxlKCktPnN2Z1N0eWxl
KCktPmNhcFN0eWxlKCkgPT0gU3F1YXJlQ2FwKQotICAgICAgICB1c2VQYXRoLT5hZGRSZWN0KHpl
cm9MZW5ndGhTdWJwYXRoUmVjdCgpKTsKLSAgICBlbHNlCi0gICAgICAgIHVzZVBhdGgtPmFkZEVs
bGlwc2UoemVyb0xlbmd0aFN1YnBhdGhSZWN0KCkpOwotfQotCi1ib29sIFJlbmRlclNWR1BhdGg6
OnNldHVwTm9uU2NhbGluZ1N0cm9rZVBhdGgoUGF0aComIHVzZVBhdGgsIEdyYXBoaWNzQ29udGV4
dFN0YXRlU2F2ZXImIHN0YXRlU2F2ZXIpCit2b2lkIFJlbmRlclNWR1BhdGg6OmluZmxhdGVXaXRo
TWFya2VyQm91bmRzKCkKIHsKLSAgICBERUZJTkVfU1RBVElDX0xPQ0FMKFBhdGgsIHRlbXBQYXRo
LCAoKSk7Ci0KLSAgICBTVkdTdHlsZWRUcmFuc2Zvcm1hYmxlRWxlbWVudCogZWxlbWVudCA9IHN0
YXRpY19jYXN0PFNWR1N0eWxlZFRyYW5zZm9ybWFibGVFbGVtZW50Kj4obm9kZSgpKTsKLSAgICBB
ZmZpbmVUcmFuc2Zvcm0gbm9uU2NhbGluZ1N0cm9rZVRyYW5zZm9ybSA9IGVsZW1lbnQtPmdldFNj
cmVlbkNUTShTVkdMb2NhdGFibGU6OkRpc2FsbG93U3R5bGVVcGRhdGUpOwotICAgIGlmICghbm9u
U2NhbGluZ1N0cm9rZVRyYW5zZm9ybS5pc0ludmVydGlibGUoKSkKLSAgICAgICAgcmV0dXJuIGZh
bHNlOwotCi0gICAgdGVtcFBhdGggPSBtX3BhdGg7Ci0gICAgdXNlUGF0aCA9ICZ0ZW1wUGF0aDsK
LSAgICB0ZW1wUGF0aC50cmFuc2Zvcm0obm9uU2NhbGluZ1N0cm9rZVRyYW5zZm9ybSk7Ci0KLSAg
ICBzdGF0ZVNhdmVyLnNhdmUoKTsKLSAgICBzdGF0ZVNhdmVyLmNvbnRleHQoKS0+Y29uY2F0Q1RN
KG5vblNjYWxpbmdTdHJva2VUcmFuc2Zvcm0uaW52ZXJzZSgpKTsKLSAgICByZXR1cm4gdHJ1ZTsK
LX0KLQotdm9pZCBSZW5kZXJTVkdQYXRoOjpmaWxsQW5kU3Ryb2tlUGF0aChHcmFwaGljc0NvbnRl
eHQqIGNvbnRleHQpCi17Ci0gICAgUmVuZGVyU3R5bGUqIHN0eWxlID0gdGhpcy0+c3R5bGUoKTsK
LQotICAgIENvbG9yIGZhbGxiYWNrQ29sb3I7Ci0gICAgaWYgKFJlbmRlclNWR1Jlc291cmNlKiBm
aWxsUGFpbnRpbmdSZXNvdXJjZSA9IFJlbmRlclNWR1Jlc291cmNlOjpmaWxsUGFpbnRpbmdSZXNv
dXJjZSh0aGlzLCBzdHlsZSwgZmFsbGJhY2tDb2xvcikpIHsKLSAgICAgICAgaWYgKGZpbGxQYWlu
dGluZ1Jlc291cmNlLT5hcHBseVJlc291cmNlKHRoaXMsIHN0eWxlLCBjb250ZXh0LCBBcHBseVRv
RmlsbE1vZGUpKQotICAgICAgICAgICAgZmlsbFBhaW50aW5nUmVzb3VyY2UtPnBvc3RBcHBseVJl
c291cmNlKHRoaXMsIGNvbnRleHQsIEFwcGx5VG9GaWxsTW9kZSwgJm1fcGF0aCk7Ci0gICAgICAg
IGVsc2UgaWYgKGZhbGxiYWNrQ29sb3IuaXNWYWxpZCgpKSB7Ci0gICAgICAgICAgICBSZW5kZXJT
VkdSZXNvdXJjZVNvbGlkQ29sb3IqIGZhbGxiYWNrUmVzb3VyY2UgPSBSZW5kZXJTVkdSZXNvdXJj
ZTo6c2hhcmVkU29saWRQYWludGluZ1Jlc291cmNlKCk7Ci0gICAgICAgICAgICBmYWxsYmFja1Jl
c291cmNlLT5zZXRDb2xvcihmYWxsYmFja0NvbG9yKTsKLSAgICAgICAgICAgIGlmIChmYWxsYmFj
a1Jlc291cmNlLT5hcHBseVJlc291cmNlKHRoaXMsIHN0eWxlLCBjb250ZXh0LCBBcHBseVRvRmls
bE1vZGUpKQotICAgICAgICAgICAgICAgIGZhbGxiYWNrUmVzb3VyY2UtPnBvc3RBcHBseVJlc291
cmNlKHRoaXMsIGNvbnRleHQsIEFwcGx5VG9GaWxsTW9kZSwgJm1fcGF0aCk7Ci0gICAgICAgIH0K
LSAgICB9Ci0KLSAgICBmYWxsYmFja0NvbG9yID0gQ29sb3IoKTsKLSAgICBSZW5kZXJTVkdSZXNv
dXJjZSogc3Ryb2tlUGFpbnRpbmdSZXNvdXJjZSA9IFJlbmRlclNWR1Jlc291cmNlOjpzdHJva2VQ
YWludGluZ1Jlc291cmNlKHRoaXMsIHN0eWxlLCBmYWxsYmFja0NvbG9yKTsKLSAgICBpZiAoIXN0
cm9rZVBhaW50aW5nUmVzb3VyY2UpCi0gICAgICAgIHJldHVybjsKLQotICAgIFBhdGgqIHVzZVBh
dGggPSAmbV9wYXRoOwotICAgIGludCBhcHBseU1vZGUgPSBBcHBseVRvU3Ryb2tlTW9kZTsKLQot
ICAgIGJvb2wgbm9uU2NhbGluZ1N0cm9rZSA9IHN0eWxlLT5zdmdTdHlsZSgpLT52ZWN0b3JFZmZl
Y3QoKSA9PSBWRV9OT05fU0NBTElOR19TVFJPS0U7Ci0KLSAgICBHcmFwaGljc0NvbnRleHRTdGF0
ZVNhdmVyIHN0YXRlU2F2ZXIoKmNvbnRleHQsIGZhbHNlKTsKLQotICAgIC8vIFNwZWMoMTEuNCk6
IEFueSB6ZXJvIGxlbmd0aCBzdWJwYXRoIHNoYWxsIG5vdCBiZSBzdHJva2VkIGlmIHRoZSDigJhz
dHJva2UtbGluZWNhcOKAmSBwcm9wZXJ0eSBoYXMgYSB2YWx1ZSBvZiBidXR0Ci0gICAgLy8gYnV0
IHNoYWxsIGJlIHN0cm9rZWQgaWYgdGhlIOKAmHN0cm9rZS1saW5lY2Fw4oCZIHByb3BlcnR5IGhh
cyBhIHZhbHVlIG9mIHJvdW5kIG9yIHNxdWFyZQotICAgIC8vIEZJWE1FOiB0aGlzIGRvZXMgbm90
IHdvcmsgZm9yIHplcm8tbGVuZ3RoIHN1YnBhdGhzLCBvbmx5IHdoZW4gdG90YWwgcGF0aCBpcyB6
ZXJvLWxlbmd0aAotICAgIGlmIChzaG91bGRTdHJva2VaZXJvTGVuZ3RoU3VicGF0aCgpKQotICAg
ICAgICBzZXR1cFNxdWFyZUNhcFBhdGgodXNlUGF0aCwgYXBwbHlNb2RlKTsKLSAgICBlbHNlIGlm
IChub25TY2FsaW5nU3Ryb2tlKSB7Ci0gICAgICAgaWYgKCFzZXR1cE5vblNjYWxpbmdTdHJva2VQ
YXRoKHVzZVBhdGgsIHN0YXRlU2F2ZXIpKQotICAgICAgICAgICByZXR1cm47Ci0gICAgfQotCi0g
ICAgaWYgKHN0cm9rZVBhaW50aW5nUmVzb3VyY2UtPmFwcGx5UmVzb3VyY2UodGhpcywgc3R5bGUs
IGNvbnRleHQsIGFwcGx5TW9kZSkpCi0gICAgICAgIHN0cm9rZVBhaW50aW5nUmVzb3VyY2UtPnBv
c3RBcHBseVJlc291cmNlKHRoaXMsIGNvbnRleHQsIGFwcGx5TW9kZSwgdXNlUGF0aCk7Ci0gICAg
ZWxzZSBpZiAoZmFsbGJhY2tDb2xvci5pc1ZhbGlkKCkpIHsKLSAgICAgICAgUmVuZGVyU1ZHUmVz
b3VyY2VTb2xpZENvbG9yKiBmYWxsYmFja1Jlc291cmNlID0gUmVuZGVyU1ZHUmVzb3VyY2U6OnNo
YXJlZFNvbGlkUGFpbnRpbmdSZXNvdXJjZSgpOwotICAgICAgICBmYWxsYmFja1Jlc291cmNlLT5z
ZXRDb2xvcihmYWxsYmFja0NvbG9yKTsKLSAgICAgICAgaWYgKGZhbGxiYWNrUmVzb3VyY2UtPmFw
cGx5UmVzb3VyY2UodGhpcywgc3R5bGUsIGNvbnRleHQsIGFwcGx5TW9kZSkpCi0gICAgICAgICAg
ICBmYWxsYmFja1Jlc291cmNlLT5wb3N0QXBwbHlSZXNvdXJjZSh0aGlzLCBjb250ZXh0LCBhcHBs
eU1vZGUsIHVzZVBhdGgpOwotICAgIH0KLX0KLQotdm9pZCBSZW5kZXJTVkdQYXRoOjpwYWludChQ
YWludEluZm8mIHBhaW50SW5mbywgY29uc3QgTGF5b3V0UG9pbnQmKQotewotICAgIGlmIChwYWlu
dEluZm8uY29udGV4dC0+cGFpbnRpbmdEaXNhYmxlZCgpIHx8IHN0eWxlKCktPnZpc2liaWxpdHko
KSA9PSBISURERU4gfHwgbV9wYXRoLmlzRW1wdHkoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAg
RmxvYXRSZWN0IGJvdW5kaW5nQm94ID0gcmVwYWludFJlY3RJbkxvY2FsQ29vcmRpbmF0ZXMoKTsK
LSAgICBpZiAoIVNWR1JlbmRlclN1cHBvcnQ6OnBhaW50SW5mb0ludGVyc2VjdHNSZXBhaW50UmVj
dChib3VuZGluZ0JveCwgbV9sb2NhbFRyYW5zZm9ybSwgcGFpbnRJbmZvKSkKLSAgICAgICAgcmV0
dXJuOwotCi0gICAgUGFpbnRJbmZvIGNoaWxkUGFpbnRJbmZvKHBhaW50SW5mbyk7Ci0gICAgYm9v
bCBkcmF3c091dGxpbmUgPSBzdHlsZSgpLT5vdXRsaW5lV2lkdGgoKSAmJiAoY2hpbGRQYWludElu
Zm8ucGhhc2UgPT0gUGFpbnRQaGFzZU91dGxpbmUgfHwgY2hpbGRQYWludEluZm8ucGhhc2UgPT0g
UGFpbnRQaGFzZVNlbGZPdXRsaW5lKTsKLSAgICBpZiAoZHJhd3NPdXRsaW5lIHx8IGNoaWxkUGFp
bnRJbmZvLnBoYXNlID09IFBhaW50UGhhc2VGb3JlZ3JvdW5kKSB7Ci0gICAgICAgIEdyYXBoaWNz
Q29udGV4dFN0YXRlU2F2ZXIgc3RhdGVTYXZlcigqY2hpbGRQYWludEluZm8uY29udGV4dCk7Ci0g
ICAgICAgIGNoaWxkUGFpbnRJbmZvLmFwcGx5VHJhbnNmb3JtKG1fbG9jYWxUcmFuc2Zvcm0pOwot
Ci0gICAgICAgIGlmIChjaGlsZFBhaW50SW5mby5waGFzZSA9PSBQYWludFBoYXNlRm9yZWdyb3Vu
ZCkgewotICAgICAgICAgICAgUGFpbnRJbmZvIHNhdmVkSW5mbyhjaGlsZFBhaW50SW5mbyk7Ci0K
LSAgICAgICAgICAgIGlmIChTVkdSZW5kZXJTdXBwb3J0OjpwcmVwYXJlVG9SZW5kZXJTVkdDb250
ZW50KHRoaXMsIGNoaWxkUGFpbnRJbmZvKSkgewotICAgICAgICAgICAgICAgIGNvbnN0IFNWR1Jl
bmRlclN0eWxlKiBzdmdTdHlsZSA9IHN0eWxlKCktPnN2Z1N0eWxlKCk7Ci0gICAgICAgICAgICAg
ICAgaWYgKHN2Z1N0eWxlLT5zaGFwZVJlbmRlcmluZygpID09IFNSX0NSSVNQRURHRVMpCi0gICAg
ICAgICAgICAgICAgICAgIGNoaWxkUGFpbnRJbmZvLmNvbnRleHQtPnNldFNob3VsZEFudGlhbGlh
cyhmYWxzZSk7Ci0KLSAgICAgICAgICAgICAgICBmaWxsQW5kU3Ryb2tlUGF0aChjaGlsZFBhaW50
SW5mby5jb250ZXh0KTsKLQotICAgICAgICAgICAgICAgIGlmIChzdmdTdHlsZS0+aGFzTWFya2Vy
cygpKQotICAgICAgICAgICAgICAgICAgICBtX21hcmtlckxheW91dEluZm8uZHJhd01hcmtlcnMo
Y2hpbGRQYWludEluZm8pOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBTVkdSZW5kZXJT
dXBwb3J0OjpmaW5pc2hSZW5kZXJTVkdDb250ZW50KHRoaXMsIGNoaWxkUGFpbnRJbmZvLCBzYXZl
ZEluZm8uY29udGV4dCk7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAoZHJhd3NPdXRsaW5lKQot
ICAgICAgICAgICAgcGFpbnRPdXRsaW5lKGNoaWxkUGFpbnRJbmZvLmNvbnRleHQsIEludFJlY3Qo
Ym91bmRpbmdCb3gpKTsKLSAgICB9Ci19Ci0KLS8vIFRoaXMgbWV0aG9kIGlzIGNhbGxlZCBmcm9t
IGluc2lkZSBwYWludE91dGxpbmUoKSBzaW5jZSB3ZSBjYWxsIHBhaW50T3V0bGluZSgpCi0vLyB3
aGlsZSB0cmFuc2Zvcm1lZCB0byBvdXIgY29vcmQgc3lzdGVtLCByZXR1cm4gbG9jYWwgY29vcmRz
Ci12b2lkIFJlbmRlclNWR1BhdGg6OmFkZEZvY3VzUmluZ1JlY3RzKFZlY3RvcjxMYXlvdXRSZWN0
PiYgcmVjdHMsIGNvbnN0IExheW91dFBvaW50JikgCi17Ci0gICAgTGF5b3V0UmVjdCByZWN0ID0g
ZW5jbG9zaW5nTGF5b3V0UmVjdChyZXBhaW50UmVjdEluTG9jYWxDb29yZGluYXRlcygpKTsKLSAg
ICBpZiAoIXJlY3QuaXNFbXB0eSgpKQotICAgICAgICByZWN0cy5hcHBlbmQocmVjdCk7Ci19Ci0K
LWJvb2wgUmVuZGVyU1ZHUGF0aDo6bm9kZUF0RmxvYXRQb2ludChjb25zdCBIaXRUZXN0UmVxdWVz
dCYgcmVxdWVzdCwgSGl0VGVzdFJlc3VsdCYgcmVzdWx0LCBjb25zdCBGbG9hdFBvaW50JiBwb2lu
dEluUGFyZW50LCBIaXRUZXN0QWN0aW9uIGhpdFRlc3RBY3Rpb24pCi17Ci0gICAgLy8gV2Ugb25s
eSBkcmF3IGluIHRoZSBmb3Jncm91bmQgcGhhc2UsIHNvIHdlIG9ubHkgaGl0LXRlc3QgdGhlbi4K
LSAgICBpZiAoaGl0VGVzdEFjdGlvbiAhPSBIaXRUZXN0Rm9yZWdyb3VuZCkKLSAgICAgICAgcmV0
dXJuIGZhbHNlOwotCi0gICAgRmxvYXRQb2ludCBsb2NhbFBvaW50ID0gbV9sb2NhbFRyYW5zZm9y
bS5pbnZlcnNlKCkubWFwUG9pbnQocG9pbnRJblBhcmVudCk7Ci0KLSAgICBpZiAoIVNWR1JlbmRl
clN1cHBvcnQ6OnBvaW50SW5DbGlwcGluZ0FyZWEodGhpcywgbG9jYWxQb2ludCkpCi0gICAgICAg
IHJldHVybiBmYWxzZTsKLQotICAgIFBvaW50ZXJFdmVudHNIaXRSdWxlcyBoaXRSdWxlcyhQb2lu
dGVyRXZlbnRzSGl0UnVsZXM6OlNWR19QQVRIX0hJVFRFU1RJTkcsIHJlcXVlc3QsIHN0eWxlKCkt
PnBvaW50ZXJFdmVudHMoKSk7Ci0gICAgYm9vbCBpc1Zpc2libGUgPSAoc3R5bGUoKS0+dmlzaWJp
bGl0eSgpID09IFZJU0lCTEUpOwotICAgIGlmIChpc1Zpc2libGUgfHwgIWhpdFJ1bGVzLnJlcXVp
cmVWaXNpYmxlKSB7Ci0gICAgICAgIGNvbnN0IFNWR1JlbmRlclN0eWxlKiBzdmdTdHlsZSA9IHN0
eWxlKCktPnN2Z1N0eWxlKCk7Ci0gICAgICAgIFdpbmRSdWxlIGZpbGxSdWxlID0gc3ZnU3R5bGUt
PmZpbGxSdWxlKCk7Ci0gICAgICAgIGlmIChyZXF1ZXN0LnN2Z0NsaXBDb250ZW50KCkpCi0gICAg
ICAgICAgICBmaWxsUnVsZSA9IHN2Z1N0eWxlLT5jbGlwUnVsZSgpOwotICAgICAgICBpZiAoKGhp
dFJ1bGVzLmNhbkhpdFN0cm9rZSAmJiAoc3ZnU3R5bGUtPmhhc1N0cm9rZSgpIHx8ICFoaXRSdWxl
cy5yZXF1aXJlU3Ryb2tlKSAmJiBzdHJva2VDb250YWlucyhsb2NhbFBvaW50LCBoaXRSdWxlcy5y
ZXF1aXJlU3Ryb2tlKSkKLSAgICAgICAgICAgIHx8IChoaXRSdWxlcy5jYW5IaXRGaWxsICYmIChz
dmdTdHlsZS0+aGFzRmlsbCgpIHx8ICFoaXRSdWxlcy5yZXF1aXJlRmlsbCkgJiYgZmlsbENvbnRh
aW5zKGxvY2FsUG9pbnQsIGhpdFJ1bGVzLnJlcXVpcmVGaWxsLCBmaWxsUnVsZSkpKSB7Ci0gICAg
ICAgICAgICB1cGRhdGVIaXRUZXN0UmVzdWx0KHJlc3VsdCwgcm91bmRlZExheW91dFBvaW50KGxv
Y2FsUG9pbnQpKTsKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICB9Ci0gICAgfQot
ICAgIHJldHVybiBmYWxzZTsKLX0KLQotRmxvYXRSZWN0IFJlbmRlclNWR1BhdGg6OmNhbGN1bGF0
ZU1hcmtlckJvdW5kc0lmTmVlZGVkKCkKLXsKLSAgICBTVkdFbGVtZW50KiBzdmdFbGVtZW50ID0g
c3RhdGljX2Nhc3Q8U1ZHRWxlbWVudCo+KG5vZGUoKSk7Ci0gICAgQVNTRVJUKHN2Z0VsZW1lbnQg
JiYgc3ZnRWxlbWVudC0+ZG9jdW1lbnQoKSk7Ci0gICAgaWYgKCFzdmdFbGVtZW50LT5pc1N0eWxl
ZCgpKQotICAgICAgICByZXR1cm4gRmxvYXRSZWN0KCk7Ci0KLSAgICBTVkdTdHlsZWRFbGVtZW50
KiBzdHlsZWRFbGVtZW50ID0gc3RhdGljX2Nhc3Q8U1ZHU3R5bGVkRWxlbWVudCo+KHN2Z0VsZW1l
bnQpOwotICAgIGlmICghc3R5bGVkRWxlbWVudC0+c3VwcG9ydHNNYXJrZXJzKCkpCi0gICAgICAg
IHJldHVybiBGbG9hdFJlY3QoKTsKLQotICAgIGNvbnN0IFNWR1JlbmRlclN0eWxlKiBzdmdTdHls
ZSA9IHN0eWxlKCktPnN2Z1N0eWxlKCk7Ci0gICAgQVNTRVJUKHN2Z1N0eWxlLT5oYXNNYXJrZXJz
KCkpOwotCi0gICAgU1ZHUmVzb3VyY2VzKiByZXNvdXJjZXMgPSBTVkdSZXNvdXJjZXNDYWNoZTo6
Y2FjaGVkUmVzb3VyY2VzRm9yUmVuZGVyT2JqZWN0KHRoaXMpOwotICAgIGlmICghcmVzb3VyY2Vz
KQotICAgICAgICByZXR1cm4gRmxvYXRSZWN0KCk7Ci0KLSAgICBSZW5kZXJTVkdSZXNvdXJjZU1h
cmtlciogbWFya2VyU3RhcnQgPSByZXNvdXJjZXMtPm1hcmtlclN0YXJ0KCk7Ci0gICAgUmVuZGVy
U1ZHUmVzb3VyY2VNYXJrZXIqIG1hcmtlck1pZCA9IHJlc291cmNlcy0+bWFya2VyTWlkKCk7Ci0g
ICAgUmVuZGVyU1ZHUmVzb3VyY2VNYXJrZXIqIG1hcmtlckVuZCA9IHJlc291cmNlcy0+bWFya2Vy
RW5kKCk7Ci0gICAgaWYgKCFtYXJrZXJTdGFydCAmJiAhbWFya2VyTWlkICYmICFtYXJrZXJFbmQp
Ci0gICAgICAgIHJldHVybiBGbG9hdFJlY3QoKTsKLQotICAgIHJldHVybiBtX21hcmtlckxheW91
dEluZm8uY2FsY3VsYXRlQm91bmRhcmllcyhtYXJrZXJTdGFydCwgbWFya2VyTWlkLCBtYXJrZXJF
bmQsIHN2Z1N0eWxlLT5zdHJva2VXaWR0aCgpLnZhbHVlKHN2Z0VsZW1lbnQpLCBtX3BhdGgpOwot
fQotCi12b2lkIFJlbmRlclNWR1BhdGg6OnVwZGF0ZUNhY2hlZEJvdW5kYXJpZXMoKQotewotICAg
IGlmIChtX3BhdGguaXNFbXB0eSgpKSB7Ci0gICAgICAgIG1fZmlsbEJvdW5kaW5nQm94ID0gRmxv
YXRSZWN0KCk7Ci0gICAgICAgIG1fc3Ryb2tlQW5kTWFya2VyQm91bmRpbmdCb3ggPSBGbG9hdFJl
Y3QoKTsKLSAgICAgICAgbV9yZXBhaW50Qm91bmRpbmdCb3ggPSBGbG9hdFJlY3QoKTsKLSAgICAg
ICAgcmV0dXJuOwotICAgIH0KLQotICAgIC8vIENhY2hlIF91bmNsaXBwZWRfIGZpbGwgYm91bmRp
bmcgYm94LCB1c2VkIGZvciBjYWxjdWxhdGlvbnMgaW4gcmVzb3VyY2VzCi0gICAgbV9maWxsQm91
bmRpbmdCb3ggPSBtX3BhdGguYm91bmRpbmdSZWN0KCk7Ci0KLSAgICAvLyBTcGVjKDExLjQpOiBB
bnkgemVybyBsZW5ndGggc3VicGF0aCBzaGFsbCBub3QgYmUgc3Ryb2tlZCBpZiB0aGUg4oCYc3Ry
b2tlLWxpbmVjYXDigJkgcHJvcGVydHkgaGFzIGEgdmFsdWUgb2YgYnV0dAotICAgIC8vIGJ1dCBz
aGFsbCBiZSBzdHJva2VkIGlmIHRoZSDigJhzdHJva2UtbGluZWNhcOKAmSBwcm9wZXJ0eSBoYXMg
YSB2YWx1ZSBvZiByb3VuZCBvciBzcXVhcmUKLSAgICBpZiAoc2hvdWxkU3Ryb2tlWmVyb0xlbmd0
aFN1YnBhdGgoKSkgewotICAgICAgICBtX3N0cm9rZUFuZE1hcmtlckJvdW5kaW5nQm94ID0gemVy
b0xlbmd0aFN1YnBhdGhSZWN0KCk7Ci0gICAgICAgIC8vIENhY2hlIHNtYWxsZXN0IHBvc3NpYmxl
IHJlcGFpbnQgcmVjdGFuZ2xlCi0gICAgICAgIG1fcmVwYWludEJvdW5kaW5nQm94ID0gbV9zdHJv
a2VBbmRNYXJrZXJCb3VuZGluZ0JveDsKLSAgICAgICAgU1ZHUmVuZGVyU3VwcG9ydDo6aW50ZXJz
ZWN0UmVwYWludFJlY3RXaXRoUmVzb3VyY2VzKHRoaXMsIG1fcmVwYWludEJvdW5kaW5nQm94KTsK
LSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIC8vIENhY2hlIF91bmNsaXBwZWRfIHN0cm9r
ZSBib3VuZGluZyBib3gsIHVzZWQgZm9yIGNhbGN1bGF0aW9ucyBpbiByZXNvdXJjZXMgKGluY2x1
ZGVzIG1hcmtlciBib3VuZGFyaWVzKQotICAgIG1fc3Ryb2tlQW5kTWFya2VyQm91bmRpbmdCb3gg
PSBtX2ZpbGxCb3VuZGluZ0JveDsKLQotICAgIGNvbnN0IFNWR1JlbmRlclN0eWxlKiBzdmdTdHls
ZSA9IHN0eWxlKCktPnN2Z1N0eWxlKCk7Ci0gICAgaWYgKHN2Z1N0eWxlLT5oYXNTdHJva2UoKSkg
ewotICAgICAgICBCb3VuZGluZ1JlY3RTdHJva2VTdHlsZUFwcGxpZXIgc3Ryb2tlU3R5bGUodGhp
cywgc3R5bGUoKSk7Ci0gICAgICAgIG1fc3Ryb2tlQW5kTWFya2VyQm91bmRpbmdCb3gudW5pdGUo
bV9wYXRoLnN0cm9rZUJvdW5kaW5nUmVjdCgmc3Ryb2tlU3R5bGUpKTsKLSAgICB9Ci0KLSAgICBp
ZiAoc3ZnU3R5bGUtPmhhc01hcmtlcnMoKSkgeworICAgIGlmIChzdHlsZSgpLT5zdmdTdHlsZSgp
LT5oYXNNYXJrZXJzKCkpIHsKICAgICAgICAgRmxvYXRSZWN0IG1hcmtlckJvdW5kcyA9IGNhbGN1
bGF0ZU1hcmtlckJvdW5kc0lmTmVlZGVkKCk7Ci0gICAgICAgIGlmICghbWFya2VyQm91bmRzLmlz
RW1wdHkoKSkKLSAgICAgICAgICAgIG1fc3Ryb2tlQW5kTWFya2VyQm91bmRpbmdCb3gudW5pdGUo
bWFya2VyQm91bmRzKTsKKyAgICAgICAgaWYgKCFtYXJrZXJCb3VuZHMuaXNFbXB0eSgpKSB7Cisg
ICAgICAgICAgICBGbG9hdFJlY3Qgc3Ryb2tlUmVjdChzdHJva2VCb3VuZGluZ0JveCgpKTsKKyAg
ICAgICAgICAgIHN0cm9rZVJlY3QudW5pdGUobWFya2VyQm91bmRzKTsKKyAgICAgICAgICAgIHNl
dFN0cm9rZUFuZE1hcmtlckJvdW5kaW5nQm94KHN0cm9rZVJlY3QpOworICAgICAgICB9CiAgICAg
fQotCi0gICAgLy8gQ2FjaGUgc21hbGxlc3QgcG9zc2libGUgcmVwYWludCByZWN0YW5nbGUKLSAg
ICBtX3JlcGFpbnRCb3VuZGluZ0JveCA9IG1fc3Ryb2tlQW5kTWFya2VyQm91bmRpbmdCb3g7Ci0g
ICAgU1ZHUmVuZGVyU3VwcG9ydDo6aW50ZXJzZWN0UmVwYWludFJlY3RXaXRoUmVzb3VyY2VzKHRo
aXMsIG1fcmVwYWludEJvdW5kaW5nQm94KTsKIH0KIAogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdQYXRoLmggYi9Tb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvc3ZnL1JlbmRlclNWR1BhdGguaAppbmRleCA5OGU2MDhkLi42MGZlZTk4IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1BhdGguaAorKysgYi9T
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1BhdGguaApAQCAtNCw2ICs0LDgg
QEAKICAqIENvcHlyaWdodCAoQykgMjAwNSBFcmljIFNlaWRlbCA8ZXJpY0B3ZWJraXQub3JnPgog
ICogQ29weXJpZ2h0IChDKSAyMDA2IEFwcGxlIENvbXB1dGVyLCBJbmMKICAqIENvcHlyaWdodCAo
QykgMjAwOSBHb29nbGUsIEluYy4KKyAqIENvcHlyaWdodCAoQykgMjAxMSBSZW5hdGEgSG9kb3Zh
biA8cmVuaUB3ZWJraXQub3JnPgorICogQ29weXJpZ2h0IChDKSAyMDExIFVuaXZlcnNpdHkgb2Yg
U3plZ2VkCiAgKgogICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVk
aXN0cmlidXRlIGl0IGFuZC9vcgogICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUg
R05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKQEAgLTI1LDg2ICsyNywyMiBAQAogI2RlZmluZSBS
ZW5kZXJTVkdQYXRoX2gKIAogI2lmIEVOQUJMRShTVkcpCi0jaW5jbHVkZSAiQWZmaW5lVHJhbnNm
b3JtLmgiCi0jaW5jbHVkZSAiRmxvYXRSZWN0LmgiCi0jaW5jbHVkZSAiUmVuZGVyU1ZHTW9kZWxP
YmplY3QuaCIKLSNpbmNsdWRlICJTVkdNYXJrZXJMYXlvdXRJbmZvLmgiCisjaW5jbHVkZSAiUmVu
ZGVyU1ZHU2hhcGUuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1jbGFzcyBGbG9hdFBvaW50
OwotY2xhc3MgR3JhcGhpY3NDb250ZXh0U3RhdGVTYXZlcjsKLWNsYXNzIFJlbmRlclNWR0NvbnRh
aW5lcjsKLWNsYXNzIFNWR1N0eWxlZFRyYW5zZm9ybWFibGVFbGVtZW50OwotCi1jbGFzcyBSZW5k
ZXJTVkdQYXRoIDogcHVibGljIFJlbmRlclNWR01vZGVsT2JqZWN0IHsKK2NsYXNzIFJlbmRlclNW
R1BhdGggOiBwdWJsaWMgUmVuZGVyU1ZHU2hhcGUgewogcHVibGljOgotICAgIGV4cGxpY2l0IFJl
bmRlclNWR1BhdGgoU1ZHU3R5bGVkVHJhbnNmb3JtYWJsZUVsZW1lbnQqKTsKKyAgICBSZW5kZXJT
VkdQYXRoKFNWR1N0eWxlZFRyYW5zZm9ybWFibGVFbGVtZW50Kik7CiAgICAgdmlydHVhbCB+UmVu
ZGVyU1ZHUGF0aCgpOwogCi0gICAgY29uc3QgUGF0aCYgcGF0aCgpIGNvbnN0IHsgcmV0dXJuIG1f
cGF0aDsgfQotICAgIHZvaWQgc2V0TmVlZHNQYXRoVXBkYXRlKCkgeyBtX25lZWRzUGF0aFVwZGF0
ZSA9IHRydWU7IH0KLSAgICB2aXJ0dWFsIHZvaWQgc2V0TmVlZHNCb3VuZGFyaWVzVXBkYXRlKCkg
eyBtX25lZWRzQm91bmRhcmllc1VwZGF0ZSA9IHRydWU7IH0KLSAgICB2aXJ0dWFsIHZvaWQgc2V0
TmVlZHNUcmFuc2Zvcm1VcGRhdGUoKSB7IG1fbmVlZHNUcmFuc2Zvcm1VcGRhdGUgPSB0cnVlOyB9
Ci0KIHByaXZhdGU6Ci0gICAgLy8gSGl0LWRldGVjdGlvbiBzZXBlcmF0ZWQgZm9yIHRoZSBmaWxs
IGFuZCB0aGUgc3Ryb2tlCi0gICAgYm9vbCBmaWxsQ29udGFpbnMoY29uc3QgRmxvYXRQb2ludCYs
IGJvb2wgcmVxdWlyZXNGaWxsID0gdHJ1ZSwgV2luZFJ1bGUgZmlsbFJ1bGUgPSBSVUxFX05PTlpF
Uk8pOwotICAgIGJvb2wgc3Ryb2tlQ29udGFpbnMoY29uc3QgRmxvYXRQb2ludCYsIGJvb2wgcmVx
dWlyZXNTdHJva2UgPSB0cnVlKTsKLQotICAgIHZpcnR1YWwgRmxvYXRSZWN0IG9iamVjdEJvdW5k
aW5nQm94KCkgY29uc3QgeyByZXR1cm4gbV9maWxsQm91bmRpbmdCb3g7IH0KLSAgICB2aXJ0dWFs
IEZsb2F0UmVjdCBzdHJva2VCb3VuZGluZ0JveCgpIGNvbnN0IHsgcmV0dXJuIG1fc3Ryb2tlQW5k
TWFya2VyQm91bmRpbmdCb3g7IH0KLSAgICB2aXJ0dWFsIEZsb2F0UmVjdCByZXBhaW50UmVjdElu
TG9jYWxDb29yZGluYXRlcygpIGNvbnN0IHsgcmV0dXJuIG1fcmVwYWludEJvdW5kaW5nQm94OyB9
Ci0gICAgdmlydHVhbCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIGxvY2FsVG9QYXJlbnRUcmFuc2Zv
cm0oKSBjb25zdCB7IHJldHVybiBtX2xvY2FsVHJhbnNmb3JtOyB9Ci0KICAgICB2aXJ0dWFsIGJv
b2wgaXNTVkdQYXRoKCkgY29uc3QgeyByZXR1cm4gdHJ1ZTsgfQogICAgIHZpcnR1YWwgY29uc3Qg
Y2hhciogcmVuZGVyTmFtZSgpIGNvbnN0IHsgcmV0dXJuICJSZW5kZXJTVkdQYXRoIjsgfQogCi0g
ICAgdmlydHVhbCB2b2lkIGxheW91dCgpOwotICAgIHZpcnR1YWwgdm9pZCBwYWludChQYWludElu
Zm8mLCBjb25zdCBMYXlvdXRQb2ludCYpOwotICAgIHZpcnR1YWwgdm9pZCBhZGRGb2N1c1JpbmdS
ZWN0cyhWZWN0b3I8TGF5b3V0UmVjdD4mLCBjb25zdCBMYXlvdXRQb2ludCYpOwotCi0gICAgdmly
dHVhbCBib29sIG5vZGVBdEZsb2F0UG9pbnQoY29uc3QgSGl0VGVzdFJlcXVlc3QmLCBIaXRUZXN0
UmVzdWx0JiwgY29uc3QgRmxvYXRQb2ludCYgcG9pbnRJblBhcmVudCwgSGl0VGVzdEFjdGlvbik7
Ci0KLSAgICBGbG9hdFJlY3QgY2FsY3VsYXRlTWFya2VyQm91bmRzSWZOZWVkZWQoKTsKLSAgICB2
b2lkIHVwZGF0ZUNhY2hlZEJvdW5kYXJpZXMoKTsKLQotICAgIHZvaWQgc2V0dXBTcXVhcmVDYXBQ
YXRoKFBhdGgqJiB1c2VQYXRoLCBpbnQmIGFwcGx5TW9kZSk7Ci0gICAgYm9vbCBzZXR1cE5vblNj
YWxpbmdTdHJva2VQYXRoKFBhdGgqJiB1c2VQYXRoLCBHcmFwaGljc0NvbnRleHRTdGF0ZVNhdmVy
Jik7Ci0gICAgYm9vbCBzaG91bGRTdHJva2VaZXJvTGVuZ3RoU3VicGF0aCgpIGNvbnN0OwotICAg
IEZsb2F0UmVjdCB6ZXJvTGVuZ3RoU3VicGF0aFJlY3QoKSBjb25zdDsKLQotcHJpdmF0ZToKLSAg
ICB2aXJ0dWFsIEFmZmluZVRyYW5zZm9ybSBsb2NhbFRyYW5zZm9ybSgpIGNvbnN0IHsgcmV0dXJu
IG1fbG9jYWxUcmFuc2Zvcm07IH0KLSAgICB2b2lkIGZpbGxBbmRTdHJva2VQYXRoKEdyYXBoaWNz
Q29udGV4dCopOwotCi0gICAgYm9vbCBtX25lZWRzQm91bmRhcmllc1VwZGF0ZSA6IDE7Ci0gICAg
Ym9vbCBtX25lZWRzUGF0aFVwZGF0ZSA6IDE7Ci0gICAgYm9vbCBtX25lZWRzVHJhbnNmb3JtVXBk
YXRlIDogMTsKLQotICAgIG11dGFibGUgUGF0aCBtX3BhdGg7Ci0gICAgRmxvYXRSZWN0IG1fZmls
bEJvdW5kaW5nQm94OwotICAgIEZsb2F0UmVjdCBtX3N0cm9rZUFuZE1hcmtlckJvdW5kaW5nQm94
OwotICAgIEZsb2F0UmVjdCBtX3JlcGFpbnRCb3VuZGluZ0JveDsKLSAgICBTVkdNYXJrZXJMYXlv
dXRJbmZvIG1fbWFya2VyTGF5b3V0SW5mbzsKLSAgICBBZmZpbmVUcmFuc2Zvcm0gbV9sb2NhbFRy
YW5zZm9ybTsKKyAgICB2aXJ0dWFsIHZvaWQgaW5mbGF0ZVdpdGhNYXJrZXJCb3VuZHMoKTsKIH07
CiAKLWlubGluZSBSZW5kZXJTVkdQYXRoKiB0b1JlbmRlclNWR1BhdGgoUmVuZGVyT2JqZWN0KiBv
YmplY3QpCi17Ci0gICAgQVNTRVJUKCFvYmplY3QgfHwgb2JqZWN0LT5pc1NWR1BhdGgoKSk7Ci0g
ICAgcmV0dXJuIHN0YXRpY19jYXN0PFJlbmRlclNWR1BhdGgqPihvYmplY3QpOwotfQotCi1pbmxp
bmUgY29uc3QgUmVuZGVyU1ZHUGF0aCogdG9SZW5kZXJTVkdQYXRoKGNvbnN0IFJlbmRlck9iamVj
dCogb2JqZWN0KQotewotICAgIEFTU0VSVCghb2JqZWN0IHx8IG9iamVjdC0+aXNTVkdQYXRoKCkp
OwotICAgIHJldHVybiBzdGF0aWNfY2FzdDxjb25zdCBSZW5kZXJTVkdQYXRoKj4ob2JqZWN0KTsK
LX0KLQotLy8gVGhpcyB3aWxsIGNhdGNoIGFueW9uZSBkb2luZyBhbiB1bm5lY2Vzc2FyeSBjYXN0
Lgotdm9pZCB0b1JlbmRlclNWR1BhdGgoY29uc3QgUmVuZGVyU1ZHUGF0aCopOwotCiB9CiAKICNl
bmRpZiAvLyBFTkFCTEUoU1ZHKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L3N2Zy9SZW5kZXJTVkdSZWN0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVu
ZGVyU1ZHUmVjdC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODIzNGVh
YgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVy
U1ZHUmVjdC5jcHAKQEAgLTAsMCArMSwxMTYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEg
VW5pdmVyc2l0eSBvZiBTemVnZWQKKyAqIENvcHlyaWdodCAoQykgMjAxMSBSZW5hdGEgSG9kb3Zh
biAocmVuaUB3ZWJraXQub3JnKQorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFVOSVZFUlNJVFkgT0YgU1pFR0VEIGBg
QVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVU5JVkVSU0lUWSBPRiBTWkVHRUQgT1IK
KyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRT
OyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5j
bHVkZSAiY29uZmlnLmgiCisKKyNpZiBFTkFCTEUoU1ZHKQorI2luY2x1ZGUgIlJlbmRlclNWR1Jl
Y3QuaCIKKworI2luY2x1ZGUgIlNWR05hbWVzLmgiCisjaW5jbHVkZSAiU1ZHUmVjdEVsZW1lbnQu
aCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitSZW5kZXJTVkdSZWN0OjpSZW5kZXJTVkdSZWN0
KFNWR1N0eWxlZFRyYW5zZm9ybWFibGVFbGVtZW50KiBub2RlKQorICAgIDogUmVuZGVyU1ZHU2hh
cGUobm9kZSkKK3sKK30KKworUmVuZGVyU1ZHUmVjdDo6flJlbmRlclNWR1JlY3QoKQoreworfQor
Cit2b2lkIFJlbmRlclNWR1JlY3Q6OmNyZWF0ZVNoYXBlKCkKK3sKKyAgICAvLyBCZWZvcmUgY3Jl
YXRpbmcgYSBuZXcgb2JqZWN0IHdlIG5lZWQgdG8gY2xlYXIgdGhlIGNhY2hlZCBib3VuZGluZyBi
b3gKKyAgICAvLyB0byBhdm9pZCB1c2luZyBnYXJiYWdlLgorICAgIG1fYm91bmRpbmdCb3ggPSBG
bG9hdFJlY3QoKTsKKyAgICBTVkdSZWN0RWxlbWVudCogcmVjdCA9IHN0YXRpY19jYXN0PFNWR1Jl
Y3RFbGVtZW50Kj4obm9kZSgpKTsKKyAgICBBU1NFUlQocmVjdCk7CisKKyAgICAvLyBGYWxsYmFj
ayB0byBSZW5kZXJTVkdTaGFwZSBpZiByZWN0IGhhcyByb3VuZGVkIGNvcm5lcnMuCisgICAgaWYg
KHJlY3QtPmhhc0F0dHJpYnV0ZShTVkdOYW1lczo6cnhBdHRyKSB8fCByZWN0LT5oYXNBdHRyaWJ1
dGUoU1ZHTmFtZXM6OnJ5QXR0cikpIHsKKyAgICAgICBSZW5kZXJTVkdTaGFwZTo6Y3JlYXRlU2hh
cGUoKTsKKyAgICAgICBzZXRJc1BhaW50aW5nRmFsbGJhY2sodHJ1ZSk7CisgICAgICAgcmV0dXJu
OworICAgIH0KKworICAgIEZsb2F0U2l6ZSBib3VuZGluZ0JveFNpemUocmVjdC0+d2lkdGgoKS52
YWx1ZShyZWN0KSwgcmVjdC0+aGVpZ2h0KCkudmFsdWUocmVjdCkpOworICAgIGlmIChib3VuZGlu
Z0JveFNpemUuaXNFbXB0eSgpKQorICAgICAgICByZXR1cm47CisKKyAgICBtX2JvdW5kaW5nQm94
ID0gRmxvYXRSZWN0KEZsb2F0UG9pbnQocmVjdC0+eCgpLnZhbHVlKHJlY3QpLCByZWN0LT55KCku
dmFsdWUocmVjdCkpLCBib3VuZGluZ0JveFNpemUpOworCisgICAgLy8gVG8gZGVjaWRlIGlmIHRo
ZSBzdHJva2UgY29udGFpbnMgYSBwb2ludCB3ZSBjcmVhdGUgdHdvIHJlY3RzIHdoaWNoIHJlcHJl
c2VudCB0aGUgaW5uZXIgYW5kCisgICAgLy8gdGhlIG91dGVyIHN0cm9rZSBib3JkZXJzLiBBIHN0
cm9rZSBjb250YWlucyB0aGUgcG9pbnQsIGlmIHRoZSBwb2ludCBpcyBiZXR3ZWVuIHRoZW0uCisg
ICAgZmxvYXQgc3Ryb2tlV2lkdGggPSB0aGlzLT5zdHJva2VXaWR0aCgpOworICAgIG1faW5uZXJT
dHJva2VSZWN0ID0gbV9ib3VuZGluZ0JveDsKKyAgICBtX291dGVyU3Ryb2tlUmVjdCA9IG1fYm91
bmRpbmdCb3g7CisgICAgbV9pbm5lclN0cm9rZVJlY3QuaW5mbGF0ZSgtc3Ryb2tlV2lkdGggLyAy
KTsKKyAgICBtX291dGVyU3Ryb2tlUmVjdC5pbmZsYXRlKHN0cm9rZVdpZHRoIC8gMik7Cit9CisK
KworRmxvYXRSZWN0IFJlbmRlclNWR1JlY3Q6Om9iamVjdEJvdW5kaW5nQm94KCkgY29uc3QKK3sK
KyAgICBpZiAoaXNQYWludGluZ0ZhbGxiYWNrKCkpCisgICAgICAgIHJldHVybiBSZW5kZXJTVkdT
aGFwZTo6b2JqZWN0Qm91bmRpbmdCb3goKTsKKyAgICByZXR1cm4gbV9ib3VuZGluZ0JveDsKK30K
KworRmxvYXRSZWN0IFJlbmRlclNWR1JlY3Q6OnN0cm9rZUJvdW5kaW5nQm94KCkgY29uc3QKK3sK
KyAgICBpZiAoaXNQYWludGluZ0ZhbGxiYWNrKCkgJiYgIXN0eWxlKCktPnN2Z1N0eWxlKCktPnN0
cm9rZURhc2hBcnJheSgpLmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJuIFJlbmRlclNWR1NoYXBl
OjpzdHJva2VCb3VuZGluZ0JveCgpOworICAgIHJldHVybiBtX291dGVyU3Ryb2tlUmVjdDsKK30K
Kwordm9pZCBSZW5kZXJTVkdSZWN0OjpmaWxsU2hhcGUoR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0
KSBjb25zdAoreworICAgICBjb250ZXh0LT5maWxsUmVjdChtX2JvdW5kaW5nQm94KTsKK30KKwor
dm9pZCBSZW5kZXJTVkdSZWN0OjpzdHJva2VTaGFwZShHcmFwaGljc0NvbnRleHQqIGNvbnRleHQp
IGNvbnN0Cit7CisgICAgY29udGV4dC0+c3Ryb2tlUmVjdChtX2JvdW5kaW5nQm94LCBzdHJva2VX
aWR0aCgpKTsKK30KKworYm9vbCBSZW5kZXJTVkdSZWN0OjpzaGFwZURlcGVuZGVudFN0cm9rZUNv
bnRhaW5zKGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50KSBjb25zdAoreworICAgIHJldHVybiAhbV9p
bm5lclN0cm9rZVJlY3QuY29udGFpbnMocG9pbnQsIEZsb2F0UmVjdDo6Q29udGFpbnNSZWN0KTsK
K30KKworYm9vbCBSZW5kZXJTVkdSZWN0OjpzaGFwZURlcGVuZGVudEZpbGxDb250YWlucyhjb25z
dCBGbG9hdFBvaW50JiBwb2ludCwgY29uc3QgV2luZFJ1bGUgZmlsbFJ1bGUpIGNvbnN0Cit7Cisg
ICAgaWYgKGlzUGFpbnRpbmdGYWxsYmFjaygpKQorICAgICAgICByZXR1cm4gUmVuZGVyU1ZHU2hh
cGU6OnNoYXBlRGVwZW5kZW50RmlsbENvbnRhaW5zKHBvaW50LCBmaWxsUnVsZSk7CisgICAgcmV0
dXJuIG1fYm91bmRpbmdCb3guY29udGFpbnMocG9pbnQueCgpLCBwb2ludC55KCkpOworfQorCit9
CisKKyNlbmRpZiAvLyBFTkFCTEUoU1ZHKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZWN0LmggYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3Zn
L1JlbmRlclNWR1JlY3QuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40YTg2
ODE1Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5k
ZXJTVkdSZWN0LmgKQEAgLTAsMCArMSw2MyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMSBV
bml2ZXJzaXR5IG9mIFN6ZWdlZAorICogQ29weXJpZ2h0IChDKSAyMDExIFJlbmF0YSBIb2RvdmFu
IChyZW5pQHdlYmtpdC5vcmcpCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoK
KyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVU5JVkVSU0lUWSBPRiBTWkVHRUQgYGBB
UyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBVTklWRVJTSVRZIE9GIFNaRUdFRCBPUgor
ICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7
IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5k
ZWYgUmVuZGVyU1ZHUmVjdF9oCisjZGVmaW5lIFJlbmRlclNWR1JlY3RfaAorCisjaWYgRU5BQkxF
KFNWRykKKyNpbmNsdWRlICJSZW5kZXJTVkdQYXRoLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsK
KworY2xhc3MgUmVuZGVyU1ZHUmVjdCA6IHB1YmxpYyBSZW5kZXJTVkdTaGFwZSB7CitwdWJsaWM6
CisgICAgZXhwbGljaXQgUmVuZGVyU1ZHUmVjdChTVkdTdHlsZWRUcmFuc2Zvcm1hYmxlRWxlbWVu
dCopOworICAgIHZpcnR1YWwgflJlbmRlclNWR1JlY3QoKTsKKworcHJpdmF0ZToKKyAgICB2aXJ0
dWFsIGJvb2wgaXNTVkdSZWN0KCkgY29uc3QgeyByZXR1cm4gdHJ1ZTsgfQorICAgIHZpcnR1YWwg
Y29uc3QgY2hhciogcmVuZGVyTmFtZSgpIGNvbnN0IHsgcmV0dXJuICJSZW5kZXJTVkdSZWN0Ijsg
fQorCisgICAgdmlydHVhbCB2b2lkIGNyZWF0ZVNoYXBlKCk7CisgICAgdmlydHVhbCBib29sIGlz
RW1wdHkoKSBjb25zdCB7IHJldHVybiBoYXNQYXRoKCkgPyBSZW5kZXJTVkdTaGFwZTo6aXNFbXB0
eSgpIDogbV9ib3VuZGluZ0JveC5pc0VtcHR5KCk7IH07CisgICAgdmlydHVhbCB2b2lkIGZpbGxT
aGFwZShHcmFwaGljc0NvbnRleHQqKSBjb25zdDsKKyAgICB2aXJ0dWFsIHZvaWQgc3Ryb2tlU2hh
cGUoR3JhcGhpY3NDb250ZXh0KikgY29uc3Q7CisgICAgdmlydHVhbCBGbG9hdFJlY3Qgb2JqZWN0
Qm91bmRpbmdCb3goKSBjb25zdDsKKyAgICB2aXJ0dWFsIEZsb2F0UmVjdCBzdHJva2VCb3VuZGlu
Z0JveCgpIGNvbnN0OworICAgIHZpcnR1YWwgYm9vbCBzaGFwZURlcGVuZGVudFN0cm9rZUNvbnRh
aW5zKGNvbnN0IEZsb2F0UG9pbnQmKSBjb25zdDsKKyAgICB2aXJ0dWFsIGJvb2wgc2hhcGVEZXBl
bmRlbnRGaWxsQ29udGFpbnMoY29uc3QgRmxvYXRQb2ludCYsIGNvbnN0IFdpbmRSdWxlKSBjb25z
dDsKKworcHJpdmF0ZToKKyAgICBGbG9hdFJlY3QgbV9ib3VuZGluZ0JveDsKKyAgICBGbG9hdFJl
Y3QgbV9pbm5lclN0cm9rZVJlY3Q7CisgICAgRmxvYXRSZWN0IG1fb3V0ZXJTdHJva2VSZWN0Owor
fTsKKworfQorCisjZW5kaWYgLy8gRU5BQkxFKFNWRykKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJjZS5oIGIvU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJjZS5oCmluZGV4IGE2N2JhNzMuLmUw
MjAxNTQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZH
UmVzb3VyY2UuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jl
c291cmNlLmgKQEAgLTIxLDYgKzIxLDcgQEAKICNkZWZpbmUgUmVuZGVyU1ZHUmVzb3VyY2VfaAog
CiAjaWYgRU5BQkxFKFNWRykKKyNpbmNsdWRlICJSZW5kZXJTVkdTaGFwZS5oIgogI2luY2x1ZGUg
IlJlbmRlclN0eWxlQ29uc3RhbnRzLmgiCiAjaW5jbHVkZSAiU1ZHRG9jdW1lbnRFeHRlbnNpb25z
LmgiCiAKQEAgLTYxLDcgKzYyLDcgQEAgcHVibGljOgogICAgIHZpcnR1YWwgdm9pZCByZW1vdmVD
bGllbnRGcm9tQ2FjaGUoUmVuZGVyT2JqZWN0KiwgYm9vbCBtYXJrRm9ySW52YWxpZGF0aW9uID0g
dHJ1ZSkgPSAwOwogCiAgICAgdmlydHVhbCBib29sIGFwcGx5UmVzb3VyY2UoUmVuZGVyT2JqZWN0
KiwgUmVuZGVyU3R5bGUqLCBHcmFwaGljc0NvbnRleHQqJiwgdW5zaWduZWQgc2hvcnQgcmVzb3Vy
Y2VNb2RlKSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIHBvc3RBcHBseVJlc291cmNlKFJlbmRlck9i
amVjdCosIEdyYXBoaWNzQ29udGV4dComLCB1bnNpZ25lZCBzaG9ydCwgY29uc3QgUGF0aCopIHsg
fQorICAgIHZpcnR1YWwgdm9pZCBwb3N0QXBwbHlSZXNvdXJjZShSZW5kZXJPYmplY3QqLCBHcmFw
aGljc0NvbnRleHQqJiwgdW5zaWduZWQgc2hvcnQsIGNvbnN0IFBhdGgqLCBjb25zdCBSZW5kZXJT
VkdTaGFwZSopIHsgfQogICAgIHZpcnR1YWwgRmxvYXRSZWN0IHJlc291cmNlQm91bmRpbmdCb3go
UmVuZGVyT2JqZWN0KikgPSAwOwogCiAgICAgdmlydHVhbCBSZW5kZXJTVkdSZXNvdXJjZVR5cGUg
cmVzb3VyY2VUeXBlKCkgY29uc3QgPSAwOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJjZUNsaXBwZXIuY3BwIGIvU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJjZUNsaXBwZXIuY3BwCmluZGV4IDIzOGMwOTYu
LjFkODIxMjEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVy
U1ZHUmVzb3VyY2VDbGlwcGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3Zn
L1JlbmRlclNWR1Jlc291cmNlQ2xpcHBlci5jcHAKQEAgLTI0Miw3ICsyNDIsNyBAQCBib29sIFJl
bmRlclNWR1Jlc291cmNlQ2xpcHBlcjo6ZHJhd0NvbnRlbnRJbnRvTWFza0ltYWdlKENsaXBwZXJE
YXRhKiBjbGlwcGVyRGF0YQogICAgICAgICB9CiAKICAgICAgICAgLy8gT25seSBzaGFwZXMsIHBh
dGhzIGFuZCB0ZXh0cyBhcmUgYWxsb3dlZCBmb3IgY2xpcHBpbmcuCi0gICAgICAgIGlmICghcmVu
ZGVyZXItPmlzU1ZHUGF0aCgpICYmICFyZW5kZXJlci0+aXNTVkdUZXh0KCkpCisgICAgICAgIGlm
ICghcmVuZGVyZXItPmlzU1ZHU2hhcGUoKSAmJiAhcmVuZGVyZXItPmlzU1ZHVGV4dCgpKQogICAg
ICAgICAgICAgY29udGludWU7CiAKICAgICAgICAgLy8gU2F2ZSB0aGUgb2xkIFJlbmRlclN0eWxl
IG9mIHRoZSBjdXJyZW50IG9iamVjdCBmb3IgcmVzdG9yaW5nIGFmdGVyIGRyYXdpbmcKQEAgLTI4
NCw3ICsyODQsNyBAQCB2b2lkIFJlbmRlclNWR1Jlc291cmNlQ2xpcHBlcjo6Y2FsY3VsYXRlQ2xp
cENvbnRlbnRSZXBhaW50UmVjdCgpCiAgICAgICAgIFJlbmRlck9iamVjdCogcmVuZGVyZXIgPSBj
aGlsZE5vZGUtPnJlbmRlcmVyKCk7CiAgICAgICAgIGlmICghY2hpbGROb2RlLT5pc1NWR0VsZW1l
bnQoKSB8fCAhc3RhdGljX2Nhc3Q8U1ZHRWxlbWVudCo+KGNoaWxkTm9kZSktPmlzU3R5bGVkKCkg
fHwgIXJlbmRlcmVyKQogICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIGlmICghcmVuZGVy
ZXItPmlzU1ZHUGF0aCgpICYmICFyZW5kZXJlci0+aXNTVkdUZXh0KCkgJiYgIXJlbmRlcmVyLT5p
c1NWR1NoYWRvd1RyZWVSb290Q29udGFpbmVyKCkpCisgICAgICAgIGlmICghcmVuZGVyZXItPmlz
U1ZHU2hhcGUoKSAmJiAhcmVuZGVyZXItPmlzU1ZHVGV4dCgpICYmICFyZW5kZXJlci0+aXNTVkdT
aGFkb3dUcmVlUm9vdENvbnRhaW5lcigpKQogICAgICAgICAgICAgY29udGludWU7CiAgICAgICAg
IFJlbmRlclN0eWxlKiBzdHlsZSA9IHJlbmRlcmVyLT5zdHlsZSgpOwogICAgICAgICBpZiAoIXN0
eWxlIHx8IHN0eWxlLT5kaXNwbGF5KCkgPT0gTk9ORSB8fCBzdHlsZS0+dmlzaWJpbGl0eSgpICE9
IFZJU0lCTEUpCkBAIC0zMTAsNyArMzEwLDcgQEAgYm9vbCBSZW5kZXJTVkdSZXNvdXJjZUNsaXBw
ZXI6OmhpdFRlc3RDbGlwQ29udGVudChjb25zdCBGbG9hdFJlY3QmIG9iamVjdEJvdW5kaW4KICAg
ICAgICAgUmVuZGVyT2JqZWN0KiByZW5kZXJlciA9IGNoaWxkTm9kZS0+cmVuZGVyZXIoKTsKICAg
ICAgICAgaWYgKCFjaGlsZE5vZGUtPmlzU1ZHRWxlbWVudCgpIHx8ICFzdGF0aWNfY2FzdDxTVkdF
bGVtZW50Kj4oY2hpbGROb2RlKS0+aXNTdHlsZWQoKSB8fCAhcmVuZGVyZXIpCiAgICAgICAgICAg
ICBjb250aW51ZTsKLSAgICAgICAgaWYgKCFyZW5kZXJlci0+aXNTVkdQYXRoKCkgJiYgIXJlbmRl
cmVyLT5pc1NWR1RleHQoKSAmJiAhcmVuZGVyZXItPmlzU1ZHU2hhZG93VHJlZVJvb3RDb250YWlu
ZXIoKSkKKyAgICAgICAgaWYgKCFyZW5kZXJlci0+aXNTVkdTaGFwZSgpICYmICFyZW5kZXJlci0+
aXNTVkdUZXh0KCkgJiYgIXJlbmRlcmVyLT5pc1NWR1NoYWRvd1RyZWVSb290Q29udGFpbmVyKCkp
CiAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgSW50UG9pbnQgaGl0UG9pbnQ7CiAgICAg
ICAgIEhpdFRlc3RSZXN1bHQgcmVzdWx0KGhpdFBvaW50KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VDb250YWluZXIuY3BwIGIvU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJjZUNvbnRhaW5lci5jcHAK
aW5kZXggNzRkNWQ2OS4uYjc0YWQ2YiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJjZUNvbnRhaW5lci5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJjZUNvbnRhaW5lci5jcHAKQEAgLTE4MCw3
ICsxODAsNyBAQCB2b2lkIFJlbmRlclNWR1Jlc291cmNlQ29udGFpbmVyOjpyZWdpc3RlclJlc291
cmNlKCkKIC8vIEZJWE1FOiBUaGlzIGRvZXMgbm90IGJlbG9uZyBoZXJlLgogQWZmaW5lVHJhbnNm
b3JtIFJlbmRlclNWR1Jlc291cmNlQ29udGFpbmVyOjp0cmFuc2Zvcm1Pbk5vblNjYWxpbmdTdHJv
a2UoUmVuZGVyT2JqZWN0KiBvYmplY3QsIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgcmVzb3VyY2VU
cmFuc2Zvcm0pCiB7Ci0gICAgaWYgKCFvYmplY3QtPmlzU1ZHUGF0aCgpKQorICAgIGlmICghb2Jq
ZWN0LT5pc1NWR1NoYXBlKCkpCiAgICAgICAgIHJldHVybiByZXNvdXJjZVRyYW5zZm9ybTsKIAog
ICAgIFNWR1N0eWxlZFRyYW5zZm9ybWFibGVFbGVtZW50KiBlbGVtZW50ID0gc3RhdGljX2Nhc3Q8
U1ZHU3R5bGVkVHJhbnNmb3JtYWJsZUVsZW1lbnQqPihvYmplY3QtPm5vZGUoKSk7CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291cmNlRmlsdGVy
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VGaWx0
ZXIuY3BwCmluZGV4IDY4OTM1ZGEuLjg1ZmYxYTcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VGaWx0ZXIuY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VGaWx0ZXIuY3BwCkBAIC0yNTks
MTYgKzI1OSwxNSBAQCBib29sIFJlbmRlclNWR1Jlc291cmNlRmlsdGVyOjphcHBseVJlc291cmNl
KFJlbmRlck9iamVjdCogb2JqZWN0LCBSZW5kZXJTdHlsZSosCiAgICAgcmV0dXJuIHRydWU7CiB9
CiAKLXZvaWQgUmVuZGVyU1ZHUmVzb3VyY2VGaWx0ZXI6OnBvc3RBcHBseVJlc291cmNlKFJlbmRl
ck9iamVjdCogb2JqZWN0LCBHcmFwaGljc0NvbnRleHQqJiBjb250ZXh0LCB1bnNpZ25lZCBzaG9y
dCByZXNvdXJjZU1vZGUsIGNvbnN0IFBhdGgqKQordm9pZCBSZW5kZXJTVkdSZXNvdXJjZUZpbHRl
cjo6cG9zdEFwcGx5UmVzb3VyY2UoUmVuZGVyT2JqZWN0KiBvYmplY3QsIEdyYXBoaWNzQ29udGV4
dComIGNvbnRleHQsIHVuc2lnbmVkIHNob3J0IHJlc291cmNlTW9kZSwgY29uc3QgUGF0aCosIGNv
bnN0IFJlbmRlclNWR1NoYXBlKikKIHsKLSAgICBBU1NFUlQob2JqZWN0KTsKKyAgICBBU1NFUlQo
c2hhcGUpOwogICAgIEFTU0VSVChjb250ZXh0KTsKICNpZm5kZWYgTkRFQlVHCiAgICAgQVNTRVJU
KHJlc291cmNlTW9kZSA9PSBBcHBseVRvRGVmYXVsdE1vZGUpOwogI2Vsc2UKICAgICBVTlVTRURf
UEFSQU0ocmVzb3VyY2VNb2RlKTsKICNlbmRpZgotCiAgICAgRmlsdGVyRGF0YSogZmlsdGVyRGF0
YSA9IG1fZmlsdGVyLmdldChvYmplY3QpOwogICAgIGlmICghZmlsdGVyRGF0YSkKICAgICAgICAg
cmV0dXJuOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJT
VkdSZXNvdXJjZUZpbHRlci5oIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJT
VkdSZXNvdXJjZUZpbHRlci5oCmluZGV4IDVhNWIwOTIuLmZmNjFiNzEgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VGaWx0ZXIuaAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291cmNlRmlsdGVyLmgK
QEAgLTcyLDcgKzcyLDcgQEAgcHVibGljOgogICAgIHZpcnR1YWwgdm9pZCByZW1vdmVDbGllbnRG
cm9tQ2FjaGUoUmVuZGVyT2JqZWN0KiwgYm9vbCBtYXJrRm9ySW52YWxpZGF0aW9uID0gdHJ1ZSk7
CiAKICAgICB2aXJ0dWFsIGJvb2wgYXBwbHlSZXNvdXJjZShSZW5kZXJPYmplY3QqLCBSZW5kZXJT
dHlsZSosIEdyYXBoaWNzQ29udGV4dComLCB1bnNpZ25lZCBzaG9ydCByZXNvdXJjZU1vZGUpOwot
ICAgIHZpcnR1YWwgdm9pZCBwb3N0QXBwbHlSZXNvdXJjZShSZW5kZXJPYmplY3QqLCBHcmFwaGlj
c0NvbnRleHQqJiwgdW5zaWduZWQgc2hvcnQgcmVzb3VyY2VNb2RlLCBjb25zdCBQYXRoKik7Cisg
ICAgdmlydHVhbCB2b2lkIHBvc3RBcHBseVJlc291cmNlKFJlbmRlck9iamVjdCosIEdyYXBoaWNz
Q29udGV4dComLCB1bnNpZ25lZCBzaG9ydCByZXNvdXJjZU1vZGUsIGNvbnN0IFBhdGgqLCBjb25z
dCBSZW5kZXJTVkdTaGFwZSopOwogCiAgICAgdmlydHVhbCBGbG9hdFJlY3QgcmVzb3VyY2VCb3Vu
ZGluZ0JveChSZW5kZXJPYmplY3QqKTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJjZUdyYWRpZW50LmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VHcmFkaWVudC5jcHAKaW5kZXggMWFhYjkz
NS4uNTU5YjI3OSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5k
ZXJTVkdSZXNvdXJjZUdyYWRpZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
c3ZnL1JlbmRlclNWR1Jlc291cmNlR3JhZGllbnQuY3BwCkBAIC0yNyw2ICsyNyw3IEBACiAKICNp
bmNsdWRlICJHcmFkaWVudEF0dHJpYnV0ZXMuaCIKICNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQu
aCIKKyNpbmNsdWRlICJSZW5kZXJTVkdTaGFwZS5oIgogI2luY2x1ZGUgIlJlbmRlclNWR1RleHQu
aCIKICNpbmNsdWRlICJTVkdJbWFnZUJ1ZmZlclRvb2xzLmgiCiAjaW5jbHVkZSAiU1ZHUmVuZGVy
U3VwcG9ydC5oIgpAQCAtMjMxLDcgKzIzMiw3IEBAIGJvb2wgUmVuZGVyU1ZHUmVzb3VyY2VHcmFk
aWVudDo6YXBwbHlSZXNvdXJjZShSZW5kZXJPYmplY3QqIG9iamVjdCwgUmVuZGVyU3R5bGUqCiAg
ICAgcmV0dXJuIHRydWU7CiB9CiAKLXZvaWQgUmVuZGVyU1ZHUmVzb3VyY2VHcmFkaWVudDo6cG9z
dEFwcGx5UmVzb3VyY2UoUmVuZGVyT2JqZWN0KiBvYmplY3QsIEdyYXBoaWNzQ29udGV4dComIGNv
bnRleHQsIHVuc2lnbmVkIHNob3J0IHJlc291cmNlTW9kZSwgY29uc3QgUGF0aCogcGF0aCkKK3Zv
aWQgUmVuZGVyU1ZHUmVzb3VyY2VHcmFkaWVudDo6cG9zdEFwcGx5UmVzb3VyY2UoUmVuZGVyT2Jq
ZWN0KiBvYmplY3QsIEdyYXBoaWNzQ29udGV4dComIGNvbnRleHQsIHVuc2lnbmVkIHNob3J0IHJl
c291cmNlTW9kZSwgY29uc3QgUGF0aCogcGF0aCwgY29uc3QgUmVuZGVyU1ZHU2hhcGUqIHNoYXBl
KQogewogICAgIEFTU0VSVChjb250ZXh0KTsKICAgICBBU1NFUlQocmVzb3VyY2VNb2RlICE9IEFw
cGx5VG9EZWZhdWx0TW9kZSk7CkBAIC0yNTksMTEgKzI2MCwxOSBAQCB2b2lkIFJlbmRlclNWR1Jl
c291cmNlR3JhZGllbnQ6OnBvc3RBcHBseVJlc291cmNlKFJlbmRlck9iamVjdCogb2JqZWN0LCBH
cmFwaGljcwogI2Vsc2UKICAgICAgICAgVU5VU0VEX1BBUkFNKG9iamVjdCk7CiAjZW5kaWYKLSAg
ICB9IGVsc2UgaWYgKHBhdGgpIHsKLSAgICAgICAgaWYgKHJlc291cmNlTW9kZSAmIEFwcGx5VG9G
aWxsTW9kZSkKLSAgICAgICAgICAgIGNvbnRleHQtPmZpbGxQYXRoKCpwYXRoKTsKLSAgICAgICAg
ZWxzZSBpZiAocmVzb3VyY2VNb2RlICYgQXBwbHlUb1N0cm9rZU1vZGUpCi0gICAgICAgICAgICBj
b250ZXh0LT5zdHJva2VQYXRoKCpwYXRoKTsKKyAgICB9IGVsc2UgeworICAgICAgICBpZiAocmVz
b3VyY2VNb2RlICYgQXBwbHlUb0ZpbGxNb2RlKSB7CisgICAgICAgICAgICBpZiAocGF0aCkKKyAg
ICAgICAgICAgICAgICBjb250ZXh0LT5maWxsUGF0aCgqcGF0aCk7CisgICAgICAgICAgICBlbHNl
IGlmIChzaGFwZSkKKyAgICAgICAgICAgICAgICBzaGFwZS0+aXNQYWludGluZ0ZhbGxiYWNrKCkg
PyBjb250ZXh0LT5maWxsUGF0aChzaGFwZS0+cGF0aCgpKSA6IHNoYXBlLT5maWxsU2hhcGUoY29u
dGV4dCk7CisgICAgICAgIH0KKyAgICAgICAgaWYgKHJlc291cmNlTW9kZSAmIEFwcGx5VG9TdHJv
a2VNb2RlKSB7CisgICAgICAgICAgICBpZiAocGF0aCkKKyAgICAgICAgICAgICAgICBjb250ZXh0
LT5zdHJva2VQYXRoKCpwYXRoKTsKKyAgICAgICAgICAgIGVsc2UgaWYgKHNoYXBlKQorICAgICAg
ICAgICAgICAgIHNoYXBlLT5pc1BhaW50aW5nRmFsbGJhY2soKSA/IGNvbnRleHQtPnN0cm9rZVBh
dGgoc2hhcGUtPnBhdGgoKSkgOiBzaGFwZS0+c3Ryb2tlU2hhcGUoY29udGV4dCk7CisgICAgICAg
IH0KICAgICB9CiAKICAgICBjb250ZXh0LT5yZXN0b3JlKCk7CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291cmNlR3JhZGllbnQuaCBiL1NvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VHcmFkaWVudC5oCmluZGV4
IGRmNDkyZTIuLjNmY2NkNDQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9z
dmcvUmVuZGVyU1ZHUmVzb3VyY2VHcmFkaWVudC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VHcmFkaWVudC5oCkBAIC01MCw3ICs1MCw3IEBAIHB1
YmxpYzoKICAgICB2aXJ0dWFsIHZvaWQgcmVtb3ZlQ2xpZW50RnJvbUNhY2hlKFJlbmRlck9iamVj
dCosIGJvb2wgbWFya0ZvckludmFsaWRhdGlvbiA9IHRydWUpOwogCiAgICAgdmlydHVhbCBib29s
IGFwcGx5UmVzb3VyY2UoUmVuZGVyT2JqZWN0KiwgUmVuZGVyU3R5bGUqLCBHcmFwaGljc0NvbnRl
eHQqJiwgdW5zaWduZWQgc2hvcnQgcmVzb3VyY2VNb2RlKTsKLSAgICB2aXJ0dWFsIHZvaWQgcG9z
dEFwcGx5UmVzb3VyY2UoUmVuZGVyT2JqZWN0KiwgR3JhcGhpY3NDb250ZXh0KiYsIHVuc2lnbmVk
IHNob3J0IHJlc291cmNlTW9kZSwgY29uc3QgUGF0aCopOworICAgIHZpcnR1YWwgdm9pZCBwb3N0
QXBwbHlSZXNvdXJjZShSZW5kZXJPYmplY3QqLCBHcmFwaGljc0NvbnRleHQqJiwgdW5zaWduZWQg
c2hvcnQgcmVzb3VyY2VNb2RlLCBjb25zdCBQYXRoKiwgY29uc3QgUmVuZGVyU1ZHU2hhcGUqKTsK
ICAgICB2aXJ0dWFsIEZsb2F0UmVjdCByZXNvdXJjZUJvdW5kaW5nQm94KFJlbmRlck9iamVjdCop
IHsgcmV0dXJuIEZsb2F0UmVjdCgpOyB9CiAKIHByb3RlY3RlZDoKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VQYXR0ZXJuLmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VQYXR0ZXJuLmNwcApp
bmRleCBiMDgyNDgxLi5jNzE4YjczIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvc3ZnL1JlbmRlclNWR1Jlc291cmNlUGF0dGVybi5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJjZVBhdHRlcm4uY3BwCkBAIC0xODMsMTYgKzE4
MywyMiBAQCBib29sIFJlbmRlclNWR1Jlc291cmNlUGF0dGVybjo6YXBwbHlSZXNvdXJjZShSZW5k
ZXJPYmplY3QqIG9iamVjdCwgUmVuZGVyU3R5bGUqCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLXZv
aWQgUmVuZGVyU1ZHUmVzb3VyY2VQYXR0ZXJuOjpwb3N0QXBwbHlSZXNvdXJjZShSZW5kZXJPYmpl
Y3QqLCBHcmFwaGljc0NvbnRleHQqJiBjb250ZXh0LCB1bnNpZ25lZCBzaG9ydCByZXNvdXJjZU1v
ZGUsIGNvbnN0IFBhdGgqIHBhdGgpCit2b2lkIFJlbmRlclNWR1Jlc291cmNlUGF0dGVybjo6cG9z
dEFwcGx5UmVzb3VyY2UoUmVuZGVyT2JqZWN0KiwgR3JhcGhpY3NDb250ZXh0KiYgY29udGV4dCwg
dW5zaWduZWQgc2hvcnQgcmVzb3VyY2VNb2RlLCBjb25zdCBQYXRoKiBwYXRoLCBjb25zdCBSZW5k
ZXJTVkdTaGFwZSogc2hhcGUpCiB7CiAgICAgQVNTRVJUKGNvbnRleHQpOwogICAgIEFTU0VSVChy
ZXNvdXJjZU1vZGUgIT0gQXBwbHlUb0RlZmF1bHRNb2RlKTsKIAotICAgIGlmIChwYXRoICYmICEo
cmVzb3VyY2VNb2RlICYgQXBwbHlUb1RleHRNb2RlKSkgewotICAgICAgICBpZiAocmVzb3VyY2VN
b2RlICYgQXBwbHlUb0ZpbGxNb2RlKQorICAgIGlmIChyZXNvdXJjZU1vZGUgJiBBcHBseVRvRmls
bE1vZGUpIHsKKyAgICAgICAgaWYgKHBhdGgpCiAgICAgICAgICAgICBjb250ZXh0LT5maWxsUGF0
aCgqcGF0aCk7Ci0gICAgICAgIGVsc2UgaWYgKHJlc291cmNlTW9kZSAmIEFwcGx5VG9TdHJva2VN
b2RlKQorICAgICAgICBlbHNlIGlmIChzaGFwZSkKKyAgICAgICAgICAgIHNoYXBlLT5pc1BhaW50
aW5nRmFsbGJhY2soKSA/IGNvbnRleHQtPmZpbGxQYXRoKHNoYXBlLT5wYXRoKCkpIDogc2hhcGUt
PmZpbGxTaGFwZShjb250ZXh0KTsKKyAgICB9CisgICAgaWYgKHJlc291cmNlTW9kZSAmIEFwcGx5
VG9TdHJva2VNb2RlKSB7CisgICAgICAgIGlmIChwYXRoKQogICAgICAgICAgICAgY29udGV4dC0+
c3Ryb2tlUGF0aCgqcGF0aCk7CisgICAgICAgIGVsc2UgaWYgKHNoYXBlKQorICAgICAgICAgICAg
c2hhcGUtPmlzUGFpbnRpbmdGYWxsYmFjaygpID8gY29udGV4dC0+c3Ryb2tlUGF0aChzaGFwZS0+
cGF0aCgpKSA6IHNoYXBlLT5zdHJva2VTaGFwZShjb250ZXh0KTsKICAgICB9CiAKICAgICBjb250
ZXh0LT5yZXN0b3JlKCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3Zn
L1JlbmRlclNWR1Jlc291cmNlUGF0dGVybi5oIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2
Zy9SZW5kZXJTVkdSZXNvdXJjZVBhdHRlcm4uaAppbmRleCBhNjk3YzcxLi44NDdmYzYwIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291cmNlUGF0
dGVybi5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVzb3Vy
Y2VQYXR0ZXJuLmgKQEAgLTUyLDcgKzUyLDcgQEAgcHVibGljOgogICAgIHZpcnR1YWwgdm9pZCBy
ZW1vdmVDbGllbnRGcm9tQ2FjaGUoUmVuZGVyT2JqZWN0KiwgYm9vbCBtYXJrRm9ySW52YWxpZGF0
aW9uID0gdHJ1ZSk7CiAKICAgICB2aXJ0dWFsIGJvb2wgYXBwbHlSZXNvdXJjZShSZW5kZXJPYmpl
Y3QqLCBSZW5kZXJTdHlsZSosIEdyYXBoaWNzQ29udGV4dComLCB1bnNpZ25lZCBzaG9ydCByZXNv
dXJjZU1vZGUpOwotICAgIHZpcnR1YWwgdm9pZCBwb3N0QXBwbHlSZXNvdXJjZShSZW5kZXJPYmpl
Y3QqLCBHcmFwaGljc0NvbnRleHQqJiwgdW5zaWduZWQgc2hvcnQgcmVzb3VyY2VNb2RlLCBjb25z
dCBQYXRoKik7CisgICAgdmlydHVhbCB2b2lkIHBvc3RBcHBseVJlc291cmNlKFJlbmRlck9iamVj
dCosIEdyYXBoaWNzQ29udGV4dComLCB1bnNpZ25lZCBzaG9ydCByZXNvdXJjZU1vZGUsIGNvbnN0
IFBhdGgqLCBjb25zdCBSZW5kZXJTVkdTaGFwZSopOwogICAgIHZpcnR1YWwgRmxvYXRSZWN0IHJl
c291cmNlQm91bmRpbmdCb3goUmVuZGVyT2JqZWN0KikgeyByZXR1cm4gRmxvYXRSZWN0KCk7IH0K
IAogICAgIHZpcnR1YWwgUmVuZGVyU1ZHUmVzb3VyY2VUeXBlIHJlc291cmNlVHlwZSgpIGNvbnN0
IHsgcmV0dXJuIHNfcmVzb3VyY2VUeXBlOyB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291cmNlU29saWRDb2xvci5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291cmNlU29saWRDb2xvci5jcHAKaW5kZXgg
NWJlMmFmNi4uMGNjNjU5ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2
Zy9SZW5kZXJTVkdSZXNvdXJjZVNvbGlkQ29sb3IuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VTb2xpZENvbG9yLmNwcApAQCAtMjMsNiArMjMs
NyBAQAogI2luY2x1ZGUgIlJlbmRlclNWR1Jlc291cmNlU29saWRDb2xvci5oIgogCiAjaW5jbHVk
ZSAiR3JhcGhpY3NDb250ZXh0LmgiCisjaW5jbHVkZSAiUmVuZGVyU1ZHU2hhcGUuaCIKICNpbmNs
dWRlICJSZW5kZXJTdHlsZS5oIgogI2luY2x1ZGUgIlNWR1JlbmRlclN1cHBvcnQuaCIKIApAQCAt
NzQsMTYgKzc1LDIyIEBAIGJvb2wgUmVuZGVyU1ZHUmVzb3VyY2VTb2xpZENvbG9yOjphcHBseVJl
c291cmNlKFJlbmRlck9iamVjdCogb2JqZWN0LCBSZW5kZXJTdHlsCiAgICAgcmV0dXJuIHRydWU7
CiB9CiAKLXZvaWQgUmVuZGVyU1ZHUmVzb3VyY2VTb2xpZENvbG9yOjpwb3N0QXBwbHlSZXNvdXJj
ZShSZW5kZXJPYmplY3QqLCBHcmFwaGljc0NvbnRleHQqJiBjb250ZXh0LCB1bnNpZ25lZCBzaG9y
dCByZXNvdXJjZU1vZGUsIGNvbnN0IFBhdGgqIHBhdGgpCit2b2lkIFJlbmRlclNWR1Jlc291cmNl
U29saWRDb2xvcjo6cG9zdEFwcGx5UmVzb3VyY2UoUmVuZGVyT2JqZWN0KiwgR3JhcGhpY3NDb250
ZXh0KiYgY29udGV4dCwgdW5zaWduZWQgc2hvcnQgcmVzb3VyY2VNb2RlLCBjb25zdCBQYXRoKiBw
YXRoLCBjb25zdCBSZW5kZXJTVkdTaGFwZSogc2hhcGUpCiB7CiAgICAgQVNTRVJUKGNvbnRleHQp
OwogICAgIEFTU0VSVChyZXNvdXJjZU1vZGUgIT0gQXBwbHlUb0RlZmF1bHRNb2RlKTsKIAotICAg
IGlmIChwYXRoICYmICEocmVzb3VyY2VNb2RlICYgQXBwbHlUb1RleHRNb2RlKSkgewotICAgICAg
ICBpZiAocmVzb3VyY2VNb2RlICYgQXBwbHlUb0ZpbGxNb2RlKQorICAgIGlmIChyZXNvdXJjZU1v
ZGUgJiBBcHBseVRvRmlsbE1vZGUpIHsKKyAgICAgICAgaWYgKHBhdGgpCiAgICAgICAgICAgICBj
b250ZXh0LT5maWxsUGF0aCgqcGF0aCk7Ci0gICAgICAgIGVsc2UgaWYgKHJlc291cmNlTW9kZSAm
IEFwcGx5VG9TdHJva2VNb2RlKQorICAgICAgICBlbHNlIGlmIChzaGFwZSkKKyAgICAgICAgICAg
IHNoYXBlLT5pc1BhaW50aW5nRmFsbGJhY2soKSA/IGNvbnRleHQtPmZpbGxQYXRoKHNoYXBlLT5w
YXRoKCkpIDogc2hhcGUtPmZpbGxTaGFwZShjb250ZXh0KTsKKyAgICB9CisgICAgaWYgKHJlc291
cmNlTW9kZSAmIEFwcGx5VG9TdHJva2VNb2RlKSB7CisgICAgICAgIGlmIChwYXRoKQogICAgICAg
ICAgICAgY29udGV4dC0+c3Ryb2tlUGF0aCgqcGF0aCk7CisgICAgICAgIGVsc2UgaWYgKHNoYXBl
KQorICAgICAgICAgICAgc2hhcGUtPmlzUGFpbnRpbmdGYWxsYmFjaygpID8gY29udGV4dC0+c3Ry
b2tlUGF0aChzaGFwZS0+cGF0aCgpKSA6IHNoYXBlLT5zdHJva2VTaGFwZShjb250ZXh0KTsKICAg
ICB9CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVy
U1ZHUmVzb3VyY2VTb2xpZENvbG9yLmggYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1Jl
bmRlclNWR1Jlc291cmNlU29saWRDb2xvci5oCmluZGV4IDAyY2ViMzEuLjhiYmZkY2QgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VTb2xp
ZENvbG9yLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNv
dXJjZVNvbGlkQ29sb3IuaApAQCAtMzYsNyArMzYsNyBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCB2
b2lkIHJlbW92ZUNsaWVudEZyb21DYWNoZShSZW5kZXJPYmplY3QqLCBib29sID0gdHJ1ZSkgeyB9
CiAKICAgICB2aXJ0dWFsIGJvb2wgYXBwbHlSZXNvdXJjZShSZW5kZXJPYmplY3QqLCBSZW5kZXJT
dHlsZSosIEdyYXBoaWNzQ29udGV4dComLCB1bnNpZ25lZCBzaG9ydCByZXNvdXJjZU1vZGUpOwot
ICAgIHZpcnR1YWwgdm9pZCBwb3N0QXBwbHlSZXNvdXJjZShSZW5kZXJPYmplY3QqLCBHcmFwaGlj
c0NvbnRleHQqJiwgdW5zaWduZWQgc2hvcnQgcmVzb3VyY2VNb2RlLCBjb25zdCBQYXRoKik7Cisg
ICAgdmlydHVhbCB2b2lkIHBvc3RBcHBseVJlc291cmNlKFJlbmRlck9iamVjdCosIEdyYXBoaWNz
Q29udGV4dComLCB1bnNpZ25lZCBzaG9ydCByZXNvdXJjZU1vZGUsIGNvbnN0IFBhdGgqLCBjb25z
dCBSZW5kZXJTVkdTaGFwZSopOwogICAgIHZpcnR1YWwgRmxvYXRSZWN0IHJlc291cmNlQm91bmRp
bmdCb3goUmVuZGVyT2JqZWN0KikgeyByZXR1cm4gRmxvYXRSZWN0KCk7IH0KIAogICAgIHZpcnR1
YWwgUmVuZGVyU1ZHUmVzb3VyY2VUeXBlIHJlc291cmNlVHlwZSgpIGNvbnN0IHsgcmV0dXJuIHNf
cmVzb3VyY2VUeXBlOyB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3Zn
L1JlbmRlclNWR1NoYXBlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVy
U1ZHU2hhcGUuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIzZjJmNDQK
LS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNW
R1NoYXBlLmNwcApAQCAtMCwwICsxLDQzMiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwNCwg
MjAwNSwgMjAwNyBOaWtvbGFzIFppbW1lcm1hbm4gPHppbW1lcm1hbm5Aa2RlLm9yZz4KKyAqIENv
cHlyaWdodCAoQykgMjAwNCwgMjAwNSwgMjAwOCBSb2IgQnVpcyA8YnVpc0BrZGUub3JnPgorICog
Q29weXJpZ2h0IChDKSAyMDA1LCAyMDA3IEVyaWMgU2VpZGVsIDxlcmljQHdlYmtpdC5vcmc+Cisg
KiBDb3B5cmlnaHQgKEMpIDIwMDkgR29vZ2xlLCBJbmMuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkg
RGlyayBTY2h1bHplIDxrcml0QHdlYmtpdC5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIFJlc2VhcmNo
IEluIE1vdGlvbiBMaW1pdGVkIDIwMTAuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmln
aHQgKEMpIDIwMDkgSmVmZiBTY2hpbGxlciA8Y29kZWRyZWFkQGdtYWlsLmNvbT4KKyAqIENvcHly
aWdodCAoQykgMjAxMSBSZW5hdGEgSG9kb3ZhbiA8cmVuaUB3ZWJraXQub3JnPgorICogQ29weXJp
Z2h0IChDKSAyMDExIFVuaXZlcnNpdHkgb2YgU3plZ2VkCisgKgorICogVGhpcyBsaWJyYXJ5IGlz
IGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5
IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAq
IExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVp
dGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFu
eSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0
aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJB
TlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJ
TElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisg
KiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisg
KiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5l
cmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBm
aWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUg
Rm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJv
c3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKwor
I2lmIEVOQUJMRShTVkcpCisjaW5jbHVkZSAiUmVuZGVyU1ZHU2hhcGUuaCIKKworI2luY2x1ZGUg
IkZsb2F0UG9pbnQuaCIKKyNpbmNsdWRlICJGbG9hdFF1YWQuaCIKKyNpbmNsdWRlICJHcmFwaGlj
c0NvbnRleHQuaCIKKyNpbmNsdWRlICJIaXRUZXN0UmVxdWVzdC5oIgorI2luY2x1ZGUgIkxheW91
dFJlcGFpbnRlci5oIgorI2luY2x1ZGUgIlBvaW50ZXJFdmVudHNIaXRSdWxlcy5oIgorI2luY2x1
ZGUgIlJlbmRlclNWR0NvbnRhaW5lci5oIgorI2luY2x1ZGUgIlJlbmRlclNWR1Jlc291cmNlTWFy
a2VyLmgiCisjaW5jbHVkZSAiUmVuZGVyU1ZHUmVzb3VyY2VTb2xpZENvbG9yLmgiCisjaW5jbHVk
ZSAiU1ZHUGF0aEVsZW1lbnQuaCIKKyNpbmNsdWRlICJTVkdSZW5kZXJTdXBwb3J0LmgiCisjaW5j
bHVkZSAiU1ZHUmVzb3VyY2VzLmgiCisjaW5jbHVkZSAiU1ZHU3R5bGVkVHJhbnNmb3JtYWJsZUVs
ZW1lbnQuaCIKKyNpbmNsdWRlICJTVkdUcmFuc2Zvcm1MaXN0LmgiCisjaW5jbHVkZSAiU1ZHVVJJ
UmVmZXJlbmNlLmgiCisjaW5jbHVkZSAiU3Ryb2tlU3R5bGVBcHBsaWVyLmgiCisjaW5jbHVkZSA8
d3RmL01hdGhFeHRyYXMuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitSZW5kZXJTVkdTaGFw
ZTo6UmVuZGVyU1ZHU2hhcGUoU1ZHU3R5bGVkVHJhbnNmb3JtYWJsZUVsZW1lbnQqIG5vZGUpCisg
ICAgOiBSZW5kZXJTVkdNb2RlbE9iamVjdChub2RlKQorICAgICwgbV9uZWVkc0JvdW5kYXJpZXNV
cGRhdGUoZmFsc2UpIC8vIERlZmF1bHQgaXMgZmFsc2UsIHRoZSBjYWNoZWQgcmVjdHMgYXJlIGVt
cHR5IGZyb20gdGhlIGJlZ2lubmluZy4KKyAgICAsIG1fbmVlZHNTaGFwZVVwZGF0ZSh0cnVlKSAv
LyBEZWZhdWx0IGlzIHRydWUsIHNvIHdlIGdyYWIgYSBQYXRoIG9iamVjdCBvbmNlIGZyb20gU1ZH
U3R5bGVkVHJhbnNmb3JtYWJsZUVsZW1lbnQuCisgICAgLCBtX25lZWRzVHJhbnNmb3JtVXBkYXRl
KHRydWUpIC8vIERlZmF1bHQgaXMgdHJ1ZSwgc28gd2UgZ3JhYiBhIEFmZmluZVRyYW5zZm9ybSBv
YmplY3Qgb25jZSBmcm9tIFNWR1N0eWxlZFRyYW5zZm9ybWFibGVFbGVtZW50LgorICAgICwgbV9m
aWxsRmFsbGJhY2soZmFsc2UpCit7Cit9CisKK1JlbmRlclNWR1NoYXBlOjpSZW5kZXJTVkdTaGFw
ZShTVkdTdHlsZWRUcmFuc2Zvcm1hYmxlRWxlbWVudCogbm9kZSwgUGF0aCogcGF0aCwgYm9vbCBp
c0ZpbGxGYWxsYmFjaykKKyAgICA6IFJlbmRlclNWR01vZGVsT2JqZWN0KG5vZGUpCisgICAgLCBt
X2ZpbGxGYWxsYmFjayhpc0ZpbGxGYWxsYmFjaykKK3sKKyAgICAgbV9wYXRoID0gYWRvcHRQdHIo
cGF0aCk7Cit9CisKK1JlbmRlclNWR1NoYXBlOjp+UmVuZGVyU1ZHU2hhcGUoKQoreworfQorCit2
b2lkIFJlbmRlclNWR1NoYXBlOjpjcmVhdGVTaGFwZSgpCit7CisgICAgbV9wYXRoID0gYWRvcHRQ
dHIobmV3IFBhdGgpOworICAgIEFTU0VSVChpc0VtcHR5KCkpOworCisgICAgU1ZHUGF0aEVsZW1l
bnQqIGVsZW1lbnQgPSBzdGF0aWNfY2FzdDxTVkdQYXRoRWxlbWVudCo+KG5vZGUoKSk7CisgICAg
ZWxlbWVudC0+dG9QYXRoRGF0YShwYXRoKCkpOworfQorCitib29sIFJlbmRlclNWR1NoYXBlOjpp
c0VtcHR5KCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9wYXRoLT5pc0VtcHR5KCk7Cit9CisKK3Zv
aWQgUmVuZGVyU1ZHU2hhcGU6OmZpbGxTaGFwZShHcmFwaGljc0NvbnRleHQqIGNvbnRleHQpIGNv
bnN0Cit7CisgICAgY29udGV4dC0+ZmlsbFBhdGgocGF0aCgpKTsKK30KKworRmxvYXRSZWN0IFJl
bmRlclNWR1NoYXBlOjpvYmplY3RCb3VuZGluZ0JveCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1f
cGF0aC0+Ym91bmRpbmdSZWN0KCk7Cit9CisKK0Zsb2F0UmVjdCBSZW5kZXJTVkdTaGFwZTo6c3Ry
b2tlQm91bmRpbmdCb3goKSBjb25zdAoreworICAgIEJvdW5kaW5nUmVjdFN0cm9rZVN0eWxlQXBw
bGllciBzdHJva2VTdHlsZSh0aGlzLCBzdHlsZSgpKTsKKyAgICByZXR1cm4gbV9wYXRoLT5zdHJv
a2VCb3VuZGluZ1JlY3QoJnN0cm9rZVN0eWxlKTsKK30KKwordm9pZCBSZW5kZXJTVkdTaGFwZTo6
c3Ryb2tlU2hhcGUoR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0KSBjb25zdAoreworICAgIGNvbnRl
eHQtPnN0cm9rZVBhdGgocGF0aCgpKTsKK30KKworYm9vbCBSZW5kZXJTVkdTaGFwZTo6c2hhcGVE
ZXBlbmRlbnRTdHJva2VDb250YWlucyhjb25zdCBGbG9hdFBvaW50JiBwb2ludCkgY29uc3QKK3sK
KyAgICBCb3VuZGluZ1JlY3RTdHJva2VTdHlsZUFwcGxpZXIgYXBwbGllcih0aGlzLCBzdHlsZSgp
KTsKKyAgICByZXR1cm4gbV9wYXRoLT5zdHJva2VDb250YWlucygmYXBwbGllciwgcG9pbnQpOwor
fQorCitib29sIFJlbmRlclNWR1NoYXBlOjpzaGFwZURlcGVuZGVudEZpbGxDb250YWlucyhjb25z
dCBGbG9hdFBvaW50JiBwb2ludCwgY29uc3QgV2luZFJ1bGUgZmlsbFJ1bGUpIGNvbnN0Cit7Cisg
ICAgcmV0dXJuIG1fcGF0aC0+Y29udGFpbnMocG9pbnQsIGZpbGxSdWxlKTsKK30KKworYm9vbCBS
ZW5kZXJTVkdTaGFwZTo6ZmlsbENvbnRhaW5zKGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50LCBib29s
IHJlcXVpcmVzRmlsbCwgY29uc3QgV2luZFJ1bGUgZmlsbFJ1bGUpCit7CisgICAgaWYgKCFtX2Zp
bGxCb3VuZGluZ0JveC5jb250YWlucyhwb2ludCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKwor
ICAgIENvbG9yIGZhbGxiYWNrQ29sb3I7CisgICAgaWYgKHJlcXVpcmVzRmlsbCAmJiAhUmVuZGVy
U1ZHUmVzb3VyY2U6OmZpbGxQYWludGluZ1Jlc291cmNlKHRoaXMsIHN0eWxlKCksIGZhbGxiYWNr
Q29sb3IpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICByZXR1cm4gc2hhcGVEZXBlbmRl
bnRGaWxsQ29udGFpbnMocG9pbnQsIGZpbGxSdWxlKTsKK30KKworYm9vbCBSZW5kZXJTVkdTaGFw
ZTo6c3Ryb2tlQ29udGFpbnMoY29uc3QgRmxvYXRQb2ludCYgcG9pbnQsIGJvb2wgcmVxdWlyZXNT
dHJva2UpCit7CisgICAgaWYgKCFtX3N0cm9rZUFuZE1hcmtlckJvdW5kaW5nQm94LmNvbnRhaW5z
KHBvaW50KSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgQ29sb3IgZmFsbGJhY2tDb2xv
cjsKKyAgICBpZiAocmVxdWlyZXNTdHJva2UgJiYgIVJlbmRlclNWR1Jlc291cmNlOjpzdHJva2VQ
YWludGluZ1Jlc291cmNlKHRoaXMsIHN0eWxlKCksIGZhbGxiYWNrQ29sb3IpKQorICAgICAgICBy
ZXR1cm4gZmFsc2U7CisKKyAgICBpZiAoc2hvdWxkU3Ryb2tlWmVyb0xlbmd0aFN1YnBhdGgoKSkK
KyAgICAgICAgcmV0dXJuIHplcm9MZW5ndGhTdWJwYXRoUmVjdCgpLmNvbnRhaW5zKHBvaW50KTsK
KworICAgIGNvbnN0IFNWR1JlbmRlclN0eWxlKiBzdmdTdHlsZSA9IHN0eWxlKCktPnN2Z1N0eWxl
KCk7CisgICAgaWYgKCFzdmdTdHlsZS0+c3Ryb2tlRGFzaEFycmF5KCkuaXNFbXB0eSgpIHx8IHN2
Z1N0eWxlLT5zdHJva2VNaXRlckxpbWl0KCkgIT0gc3ZnU3R5bGUtPmluaXRpYWxTdHJva2VNaXRl
ckxpbWl0KCkKKyAgICAgICAgfHwgc3ZnU3R5bGUtPmpvaW5TdHlsZSgpICE9IHN2Z1N0eWxlLT5p
bml0aWFsSm9pblN0eWxlKCkgfHwgc3ZnU3R5bGUtPmNhcFN0eWxlKCkgIT0gc3ZnU3R5bGUtPmlu
aXRpYWxDYXBTdHlsZSgpKSB7CisgICAgICAgIGlmICghbV9wYXRoKQorICAgICAgICAgICAgUmVu
ZGVyU1ZHU2hhcGU6OmNyZWF0ZVNoYXBlKCk7CisgICAgICAgIHJldHVybiBSZW5kZXJTVkdTaGFw
ZTo6c2hhcGVEZXBlbmRlbnRTdHJva2VDb250YWlucyhwb2ludCk7CisgICAgfQorICAgIHJldHVy
biBzaGFwZURlcGVuZGVudFN0cm9rZUNvbnRhaW5zKHBvaW50KTsKK30KKwordm9pZCBSZW5kZXJT
VkdTaGFwZTo6bGF5b3V0KCkKK3sKKyAgICBMYXlvdXRSZXBhaW50ZXIgcmVwYWludGVyKCp0aGlz
LCBjaGVja0ZvclJlcGFpbnREdXJpbmdMYXlvdXQoKSAmJiBzZWxmTmVlZHNMYXlvdXQoKSk7Cisg
ICAgU1ZHU3R5bGVkVHJhbnNmb3JtYWJsZUVsZW1lbnQqIGVsZW1lbnQgPSBzdGF0aWNfY2FzdDxT
VkdTdHlsZWRUcmFuc2Zvcm1hYmxlRWxlbWVudCo+KG5vZGUoKSk7CisKKyAgICBib29sIHVwZGF0
ZUNhY2hlZEJvdW5kYXJpZXNJblBhcmVudHMgPSBmYWxzZTsKKworICAgIGJvb2wgbmVlZHNTaGFw
ZVVwZGF0ZSA9IG1fbmVlZHNTaGFwZVVwZGF0ZTsKKyAgICBpZiAobmVlZHNTaGFwZVVwZGF0ZSkg
eworICAgICAgICBjcmVhdGVTaGFwZSgpOworICAgICAgICBtX25lZWRzU2hhcGVVcGRhdGUgPSBm
YWxzZTsKKyAgICAgICAgdXBkYXRlQ2FjaGVkQm91bmRhcmllc0luUGFyZW50cyA9IHRydWU7Cisg
ICAgfQorCisgICAgaWYgKG1fbmVlZHNUcmFuc2Zvcm1VcGRhdGUpIHsKKyAgICAgICAgbV9sb2Nh
bFRyYW5zZm9ybSA9IGVsZW1lbnQtPmFuaW1hdGVkTG9jYWxUcmFuc2Zvcm0oKTsKKyAgICAgICAg
bV9uZWVkc1RyYW5zZm9ybVVwZGF0ZSA9IGZhbHNlOworICAgICAgICB1cGRhdGVDYWNoZWRCb3Vu
ZGFyaWVzSW5QYXJlbnRzID0gdHJ1ZTsKKyAgICB9CisKKyAgICBpZiAobV9uZWVkc0JvdW5kYXJp
ZXNVcGRhdGUpIHsKKyAgICAgICAgdXBkYXRlQ2FjaGVkQm91bmRhcmllc0luUGFyZW50cyA9IHRy
dWU7CisgICAgICAgIHNldElzUGFpbnRpbmdGYWxsYmFjayhmYWxzZSk7CisgICAgICAgIGNyZWF0
ZVNoYXBlKCk7CisgICAgfQorCisgICAgLy8gSW52YWxpZGF0ZSBhbGwgcmVzb3VyY2VzIG9mIHRo
aXMgY2xpZW50IGlmIG91ciBsYXlvdXQgY2hhbmdlZC4KKyAgICBpZiAobV9ldmVySGFkTGF5b3V0
ICYmIHNlbGZOZWVkc0xheW91dCgpKSB7CisgICAgICAgIFNWR1Jlc291cmNlc0NhY2hlOjpjbGll
bnRMYXlvdXRDaGFuZ2VkKHRoaXMpOworICAgICAgICBtX21hcmtlckxheW91dEluZm8uY2xlYXIo
KTsKKyAgICB9CisKKyAgICAvLyBBdCB0aGlzIHBvaW50IExheW91dFJlcGFpbnRlciBhbHJlYWR5
IGdyYWJiZWQgdGhlIG9sZCBib3VuZHMsCisgICAgLy8gcmVjYWxjdWxhdGUgdGhlbSBub3cgc28g
cmVwYWludEFmdGVyTGF5b3V0KCkgdXNlcyB0aGUgbmV3IGJvdW5kcy4KKyAgICBpZiAobmVlZHNT
aGFwZVVwZGF0ZSB8fCBtX25lZWRzQm91bmRhcmllc1VwZGF0ZSkgeworICAgICAgICB1cGRhdGVD
YWNoZWRCb3VuZGFyaWVzKCk7CisgICAgICAgIG1fbmVlZHNCb3VuZGFyaWVzVXBkYXRlID0gZmFs
c2U7CisgICAgfQorCisgICAgLy8gSWYgb3VyIGJvdW5kcyBjaGFuZ2VkLCBub3RpZnkgdGhlIHBh
cmVudHMuCisgICAgaWYgKHVwZGF0ZUNhY2hlZEJvdW5kYXJpZXNJblBhcmVudHMpCisgICAgICAg
IFJlbmRlclNWR01vZGVsT2JqZWN0OjpzZXROZWVkc0JvdW5kYXJpZXNVcGRhdGUoKTsKKworICAg
IHJlcGFpbnRlci5yZXBhaW50QWZ0ZXJMYXlvdXQoKTsKKyAgICBzZXROZWVkc0xheW91dChmYWxz
ZSk7Cit9CisKK2Jvb2wgUmVuZGVyU1ZHU2hhcGU6OnNob3VsZFN0cm9rZVplcm9MZW5ndGhTdWJw
YXRoKCkgY29uc3QKK3sKKyAgICAvLyBTcGVjKDExLjQpOiBBbnkgemVybyBsZW5ndGggc3VicGF0
aCBzaGFsbCBub3QgYmUgc3Ryb2tlZCBpZiB0aGUg4oCYc3Ryb2tlLWxpbmVjYXDigJkgcHJvcGVy
dHkgaGFzIGEgdmFsdWUgb2YgYnV0dAorICAgIC8vIGJ1dCBzaGFsbCBiZSBzdHJva2VkIGlmIHRo
ZSDigJhzdHJva2UtbGluZWNhcOKAmSBwcm9wZXJ0eSBoYXMgYSB2YWx1ZSBvZiByb3VuZCBvciBz
cXVhcmUKKyAgICByZXR1cm4gc3R5bGUoKS0+c3ZnU3R5bGUoKS0+aGFzU3Ryb2tlKCkgJiYgc3R5
bGUoKS0+c3ZnU3R5bGUoKS0+Y2FwU3R5bGUoKSAhPSBCdXR0Q2FwICYmICFtX2ZpbGxCb3VuZGlu
Z0JveC53aWR0aCgpICYmICFtX2ZpbGxCb3VuZGluZ0JveC5oZWlnaHQoKTsKK30KKworRmxvYXRS
ZWN0IFJlbmRlclNWR1NoYXBlOjp6ZXJvTGVuZ3RoU3VicGF0aFJlY3QoKSBjb25zdAoreworICAg
IGZsb2F0IHN0cm9rZVdpZHRoID0gdGhpcy0+c3Ryb2tlV2lkdGgoKTsKKyAgICByZXR1cm4gRmxv
YXRSZWN0KG1fZmlsbEJvdW5kaW5nQm94LngoKSAtIHN0cm9rZVdpZHRoIC8gMiwgbV9maWxsQm91
bmRpbmdCb3gueSgpIC0gc3Ryb2tlV2lkdGggLyAyLCBzdHJva2VXaWR0aCwgc3Ryb2tlV2lkdGgp
OworfQorCit2b2lkIFJlbmRlclNWR1NoYXBlOjpzZXR1cFNxdWFyZUNhcFBhdGgoaW50JiBhcHBs
eU1vZGUpCit7CisgICAgLy8gU3BlYygxMS40KTogQW55IHplcm8gbGVuZ3RoIHN1YnBhdGggc2hh
bGwgbm90IGJlIHN0cm9rZWQgaWYgdGhlIOKAmHN0cm9rZS1saW5lY2Fw4oCZIHByb3BlcnR5IGhh
cyBhIHZhbHVlIG9mIGJ1dHQKKyAgICAvLyBidXQgc2hhbGwgYmUgc3Ryb2tlZCBpZiB0aGUg4oCY
c3Ryb2tlLWxpbmVjYXDigJkgcHJvcGVydHkgaGFzIGEgdmFsdWUgb2Ygcm91bmQgb3Igc3F1YXJl
CisgICAgYXBwbHlNb2RlID0gQXBwbHlUb0ZpbGxNb2RlOworICAgIG1fcGF0aC0+Y2xlYXIoKTsK
KyAgICBpZiAoc3R5bGUoKS0+c3ZnU3R5bGUoKS0+Y2FwU3R5bGUoKSA9PSBTcXVhcmVDYXApCisg
ICAgICAgIG1fcGF0aC0+YWRkUmVjdCh6ZXJvTGVuZ3RoU3VicGF0aFJlY3QoKSk7CisgICAgZWxz
ZQorICAgICAgICBtX3BhdGgtPmFkZEVsbGlwc2UoemVyb0xlbmd0aFN1YnBhdGhSZWN0KCkpOwor
fQorCitib29sIFJlbmRlclNWR1NoYXBlOjpzZXR1cE5vblNjYWxpbmdTdHJva2VQYXRoKEdyYXBo
aWNzQ29udGV4dFN0YXRlU2F2ZXImIHN0YXRlU2F2ZXIpCit7CisgICAgU1ZHU3R5bGVkVHJhbnNm
b3JtYWJsZUVsZW1lbnQqIGVsZW1lbnQgPSBzdGF0aWNfY2FzdDxTVkdTdHlsZWRUcmFuc2Zvcm1h
YmxlRWxlbWVudCo+KG5vZGUoKSk7CisgICAgQWZmaW5lVHJhbnNmb3JtIG5vblNjYWxpbmdTdHJv
a2VUcmFuc2Zvcm0gPSBlbGVtZW50LT5nZXRTY3JlZW5DVE0oU1ZHTG9jYXRhYmxlOjpEaXNhbGxv
d1N0eWxlVXBkYXRlKTsKKyAgICBpZiAoIW5vblNjYWxpbmdTdHJva2VUcmFuc2Zvcm0uaXNJbnZl
cnRpYmxlKCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIG1fcGF0aC0+dHJhbnNmb3Jt
KG5vblNjYWxpbmdTdHJva2VUcmFuc2Zvcm0pOworCisgICAgc3RhdGVTYXZlci5zYXZlKCk7Cisg
ICAgc3RhdGVTYXZlci5jb250ZXh0KCktPmNvbmNhdENUTShub25TY2FsaW5nU3Ryb2tlVHJhbnNm
b3JtLmludmVyc2UoKSk7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK3ZvaWQgUmVuZGVyU1ZHU2hh
cGU6OmZpbGxBbmRTdHJva2VQYXRoKEdyYXBoaWNzQ29udGV4dCogY29udGV4dCkKK3sKKyAgICBS
ZW5kZXJTdHlsZSogc3R5bGUgPSB0aGlzLT5zdHlsZSgpOworCisgICAgQ29sb3IgZmFsbGJhY2tD
b2xvcjsKKyAgICBpZiAoUmVuZGVyU1ZHUmVzb3VyY2UqIGZpbGxQYWludGluZ1Jlc291cmNlID0g
UmVuZGVyU1ZHUmVzb3VyY2U6OmZpbGxQYWludGluZ1Jlc291cmNlKHRoaXMsIHN0eWxlLCBmYWxs
YmFja0NvbG9yKSkgeworICAgICAgICBpZiAoZmlsbFBhaW50aW5nUmVzb3VyY2UtPmFwcGx5UmVz
b3VyY2UodGhpcywgc3R5bGUsIGNvbnRleHQsIEFwcGx5VG9GaWxsTW9kZSkpCisgICAgICAgICAg
ICBmaWxsUGFpbnRpbmdSZXNvdXJjZS0+cG9zdEFwcGx5UmVzb3VyY2UodGhpcywgY29udGV4dCwg
QXBwbHlUb0ZpbGxNb2RlLCAwLCB0aGlzKTsKKyAgICAgICAgZWxzZSBpZiAoZmFsbGJhY2tDb2xv
ci5pc1ZhbGlkKCkpIHsKKyAgICAgICAgICAgIFJlbmRlclNWR1Jlc291cmNlU29saWRDb2xvciog
ZmFsbGJhY2tSZXNvdXJjZSA9IFJlbmRlclNWR1Jlc291cmNlOjpzaGFyZWRTb2xpZFBhaW50aW5n
UmVzb3VyY2UoKTsKKyAgICAgICAgICAgIGZhbGxiYWNrUmVzb3VyY2UtPnNldENvbG9yKGZhbGxi
YWNrQ29sb3IpOworICAgICAgICAgICAgaWYgKGZhbGxiYWNrUmVzb3VyY2UtPmFwcGx5UmVzb3Vy
Y2UodGhpcywgc3R5bGUsIGNvbnRleHQsIEFwcGx5VG9GaWxsTW9kZSkpCisgICAgICAgICAgICAg
ICAgZmFsbGJhY2tSZXNvdXJjZS0+cG9zdEFwcGx5UmVzb3VyY2UodGhpcywgY29udGV4dCwgQXBw
bHlUb0ZpbGxNb2RlLCAwLCB0aGlzKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIGZhbGxiYWNr
Q29sb3IgPSBDb2xvcigpOworICAgIFJlbmRlclNWR1Jlc291cmNlKiBzdHJva2VQYWludGluZ1Jl
c291cmNlID0gUmVuZGVyU1ZHUmVzb3VyY2U6OnN0cm9rZVBhaW50aW5nUmVzb3VyY2UodGhpcywg
c3R5bGUsIGZhbGxiYWNrQ29sb3IpOworICAgIGlmICghc3Ryb2tlUGFpbnRpbmdSZXNvdXJjZSkK
KyAgICAgICAgcmV0dXJuOworCisgICAgaW50IGFwcGx5TW9kZSA9IEFwcGx5VG9TdHJva2VNb2Rl
OworCisgICAgYm9vbCBub25TY2FsaW5nU3Ryb2tlID0gc3R5bGUtPnN2Z1N0eWxlKCktPnZlY3Rv
ckVmZmVjdCgpID09IFZFX05PTl9TQ0FMSU5HX1NUUk9LRTsKKworICAgIEdyYXBoaWNzQ29udGV4
dFN0YXRlU2F2ZXIgc3RhdGVTYXZlcigqY29udGV4dCwgZmFsc2UpOworCisgICAgLy8gU3BlYygx
MS40KTogQW55IHplcm8gbGVuZ3RoIHN1YnBhdGggc2hhbGwgbm90IGJlIHN0cm9rZWQgaWYgdGhl
IOKAmHN0cm9rZS1saW5lY2Fw4oCZIHByb3BlcnR5IGhhcyBhIHZhbHVlIG9mIGJ1dHQKKyAgICAv
LyBidXQgc2hhbGwgYmUgc3Ryb2tlZCBpZiB0aGUg4oCYc3Ryb2tlLWxpbmVjYXDigJkgcHJvcGVy
dHkgaGFzIGEgdmFsdWUgb2Ygcm91bmQgb3Igc3F1YXJlCisgICAgLy8gRklYTUU6IHRoaXMgZG9l
cyBub3Qgd29yayBmb3IgemVyby1sZW5ndGggc3VicGF0aHMsIG9ubHkgd2hlbiB0b3RhbCBwYXRo
IGlzIHplcm8tbGVuZ3RoCisgICAgaWYgKHNob3VsZFN0cm9rZVplcm9MZW5ndGhTdWJwYXRoKCkp
IHsKKyAgICAgICAgUmVuZGVyU1ZHU2hhcGU6OmNyZWF0ZVNoYXBlKCk7CisgICAgICAgIHNldHVw
U3F1YXJlQ2FwUGF0aChhcHBseU1vZGUpOworICAgICAgICBzZXRJc1BhaW50aW5nRmFsbGJhY2so
dHJ1ZSk7CisgICAgfSBlbHNlIGlmIChub25TY2FsaW5nU3Ryb2tlKSB7CisgICAgICAgIFJlbmRl
clNWR1NoYXBlOjpjcmVhdGVTaGFwZSgpOworICAgICAgICBzZXRJc1BhaW50aW5nRmFsbGJhY2so
dHJ1ZSk7CisgICAgICAgIGlmICghc2V0dXBOb25TY2FsaW5nU3Ryb2tlUGF0aChzdGF0ZVNhdmVy
KSkKKyAgICAgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgaWYgKHN0cm9rZVBhaW50aW5nUmVz
b3VyY2UtPmFwcGx5UmVzb3VyY2UodGhpcywgc3R5bGUsIGNvbnRleHQsIGFwcGx5TW9kZSkpIHsK
KyAgICAgICAgc3Ryb2tlUGFpbnRpbmdSZXNvdXJjZS0+cG9zdEFwcGx5UmVzb3VyY2UodGhpcywg
Y29udGV4dCwgYXBwbHlNb2RlLCAwLCB0aGlzKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAg
ICBpZiAoIWZhbGxiYWNrQ29sb3IuaXNWYWxpZCgpKQorICAgICAgICByZXR1cm47CisgICAgUmVu
ZGVyU1ZHUmVzb3VyY2VTb2xpZENvbG9yKiBmYWxsYmFja1Jlc291cmNlID0gUmVuZGVyU1ZHUmVz
b3VyY2U6OnNoYXJlZFNvbGlkUGFpbnRpbmdSZXNvdXJjZSgpOworICAgIGZhbGxiYWNrUmVzb3Vy
Y2UtPnNldENvbG9yKGZhbGxiYWNrQ29sb3IpOworICAgIGlmIChmYWxsYmFja1Jlc291cmNlLT5h
cHBseVJlc291cmNlKHRoaXMsIHN0eWxlLCBjb250ZXh0LCBhcHBseU1vZGUpKQorICAgICAgICBm
YWxsYmFja1Jlc291cmNlLT5wb3N0QXBwbHlSZXNvdXJjZSh0aGlzLCBjb250ZXh0LCBhcHBseU1v
ZGUsIDAsIHRoaXMpOworfQorCit2b2lkIFJlbmRlclNWR1NoYXBlOjpwYWludChQYWludEluZm8m
IHBhaW50SW5mbywgY29uc3QgSW50UG9pbnQmKQoreworICAgIGlmIChwYWludEluZm8uY29udGV4
dC0+cGFpbnRpbmdEaXNhYmxlZCgpIHx8IHN0eWxlKCktPnZpc2liaWxpdHkoKSA9PSBISURERU4g
fHwgaXNFbXB0eSgpKQorICAgICAgICByZXR1cm47CisgICAgRmxvYXRSZWN0IGJvdW5kaW5nQm94
ID0gcmVwYWludFJlY3RJbkxvY2FsQ29vcmRpbmF0ZXMoKTsKKyAgICBpZiAoIVNWR1JlbmRlclN1
cHBvcnQ6OnBhaW50SW5mb0ludGVyc2VjdHNSZXBhaW50UmVjdChib3VuZGluZ0JveCwgbV9sb2Nh
bFRyYW5zZm9ybSwgcGFpbnRJbmZvKSkKKyAgICAgICAgcmV0dXJuOworICAgIFBhaW50SW5mbyBj
aGlsZFBhaW50SW5mbyhwYWludEluZm8pOworICAgIGJvb2wgZHJhd3NPdXRsaW5lID0gc3R5bGUo
KS0+b3V0bGluZVdpZHRoKCkgJiYgKGNoaWxkUGFpbnRJbmZvLnBoYXNlID09IFBhaW50UGhhc2VP
dXRsaW5lIHx8IGNoaWxkUGFpbnRJbmZvLnBoYXNlID09IFBhaW50UGhhc2VTZWxmT3V0bGluZSk7
CisgICAgaWYgKGRyYXdzT3V0bGluZSB8fCBjaGlsZFBhaW50SW5mby5waGFzZSA9PSBQYWludFBo
YXNlRm9yZWdyb3VuZCkgeworICAgICAgICBHcmFwaGljc0NvbnRleHRTdGF0ZVNhdmVyIHN0YXRl
U2F2ZXIoKmNoaWxkUGFpbnRJbmZvLmNvbnRleHQpOworICAgICAgICBjaGlsZFBhaW50SW5mby5h
cHBseVRyYW5zZm9ybShtX2xvY2FsVHJhbnNmb3JtKTsKKworICAgICAgICBpZiAoY2hpbGRQYWlu
dEluZm8ucGhhc2UgPT0gUGFpbnRQaGFzZUZvcmVncm91bmQpIHsKKyAgICAgICAgICAgIFBhaW50
SW5mbyBzYXZlZEluZm8oY2hpbGRQYWludEluZm8pOworCisgICAgICAgICAgICBpZiAoU1ZHUmVu
ZGVyU3VwcG9ydDo6cHJlcGFyZVRvUmVuZGVyU1ZHQ29udGVudCh0aGlzLCBjaGlsZFBhaW50SW5m
bykpIHsKKyAgICAgICAgICAgICAgICBjb25zdCBTVkdSZW5kZXJTdHlsZSogc3ZnU3R5bGUgPSBz
dHlsZSgpLT5zdmdTdHlsZSgpOworICAgICAgICAgICAgICAgIGlmIChzdmdTdHlsZS0+c2hhcGVS
ZW5kZXJpbmcoKSA9PSBTUl9DUklTUEVER0VTKQorICAgICAgICAgICAgICAgICAgICBjaGlsZFBh
aW50SW5mby5jb250ZXh0LT5zZXRTaG91bGRBbnRpYWxpYXMoZmFsc2UpOworCisgICAgICAgICAg
ICAgICAgZmlsbEFuZFN0cm9rZVBhdGgoY2hpbGRQYWludEluZm8uY29udGV4dCk7CisKKyAgICAg
ICAgICAgICAgICBpZiAoc3ZnU3R5bGUtPmhhc01hcmtlcnMoKSkKKyAgICAgICAgICAgICAgICAg
ICAgbV9tYXJrZXJMYXlvdXRJbmZvLmRyYXdNYXJrZXJzKGNoaWxkUGFpbnRJbmZvKTsKKyAgICAg
ICAgICAgIH0KKworICAgICAgICAgICAgU1ZHUmVuZGVyU3VwcG9ydDo6ZmluaXNoUmVuZGVyU1ZH
Q29udGVudCh0aGlzLCBjaGlsZFBhaW50SW5mbywgc2F2ZWRJbmZvLmNvbnRleHQpOworICAgICAg
ICB9CisKKyAgICAgICAgaWYgKGRyYXdzT3V0bGluZSkKKyAgICAgICAgICAgIHBhaW50T3V0bGlu
ZShjaGlsZFBhaW50SW5mby5jb250ZXh0LCBJbnRSZWN0KGJvdW5kaW5nQm94KSk7CisgICAgfQor
fQorCisvLyBUaGlzIG1ldGhvZCBpcyBjYWxsZWQgZnJvbSBpbnNpZGUgcGFpbnRPdXRsaW5lKCkg
c2luY2Ugd2UgY2FsbCBwYWludE91dGxpbmUoKQorLy8gd2hpbGUgdHJhbnNmb3JtZWQgdG8gb3Vy
IGNvb3JkIHN5c3RlbSwgcmV0dXJuIGxvY2FsIGNvb3Jkcwordm9pZCBSZW5kZXJTVkdTaGFwZTo6
YWRkRm9jdXNSaW5nUmVjdHMoVmVjdG9yPExheW91dFJlY3Q+JiByZWN0cywgY29uc3QgTGF5b3V0
UG9pbnQmKQoreworICAgIExheW91dFJlY3QgcmVjdCA9IGVuY2xvc2luZ0xheW91dFJlY3QocmVw
YWludFJlY3RJbkxvY2FsQ29vcmRpbmF0ZXMoKSk7CisgICAgaWYgKCFyZWN0LmlzRW1wdHkoKSkK
KyAgICAgICAgcmVjdHMuYXBwZW5kKHJlY3QpOworfQorCitib29sIFJlbmRlclNWR1NoYXBlOjpu
b2RlQXRGbG9hdFBvaW50KGNvbnN0IEhpdFRlc3RSZXF1ZXN0JiByZXF1ZXN0LCBIaXRUZXN0UmVz
dWx0JiByZXN1bHQsIGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50SW5QYXJlbnQsIEhpdFRlc3RBY3Rp
b24gaGl0VGVzdEFjdGlvbikKK3sKKyAgICAvLyBXZSBvbmx5IGRyYXcgaW4gdGhlIGZvcmdyb3Vu
ZCBwaGFzZSwgc28gd2Ugb25seSBoaXQtdGVzdCB0aGVuLgorICAgIGlmIChoaXRUZXN0QWN0aW9u
ICE9IEhpdFRlc3RGb3JlZ3JvdW5kKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBGbG9h
dFBvaW50IGxvY2FsUG9pbnQgPSBtX2xvY2FsVHJhbnNmb3JtLmludmVyc2UoKS5tYXBQb2ludChw
b2ludEluUGFyZW50KTsKKworICAgIGlmICghU1ZHUmVuZGVyU3VwcG9ydDo6cG9pbnRJbkNsaXBw
aW5nQXJlYSh0aGlzLCBsb2NhbFBvaW50KSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAg
UG9pbnRlckV2ZW50c0hpdFJ1bGVzIGhpdFJ1bGVzKFBvaW50ZXJFdmVudHNIaXRSdWxlczo6U1ZH
X1BBVEhfSElUVEVTVElORywgcmVxdWVzdCwgc3R5bGUoKS0+cG9pbnRlckV2ZW50cygpKTsKKyAg
ICBib29sIGlzVmlzaWJsZSA9IChzdHlsZSgpLT52aXNpYmlsaXR5KCkgPT0gVklTSUJMRSk7Cisg
ICAgaWYgKGlzVmlzaWJsZSB8fCAhaGl0UnVsZXMucmVxdWlyZVZpc2libGUpIHsKKyAgICAgICAg
Y29uc3QgU1ZHUmVuZGVyU3R5bGUqIHN2Z1N0eWxlID0gc3R5bGUoKS0+c3ZnU3R5bGUoKTsKKyAg
ICAgICAgV2luZFJ1bGUgZmlsbFJ1bGUgPSBzdmdTdHlsZS0+ZmlsbFJ1bGUoKTsKKyAgICAgICAg
aWYgKHJlcXVlc3Quc3ZnQ2xpcENvbnRlbnQoKSkKKyAgICAgICAgICAgIGZpbGxSdWxlID0gc3Zn
U3R5bGUtPmNsaXBSdWxlKCk7CisgICAgICAgIGlmICgoaGl0UnVsZXMuY2FuSGl0U3Ryb2tlICYm
IChzdmdTdHlsZS0+aGFzU3Ryb2tlKCkgfHwgIWhpdFJ1bGVzLnJlcXVpcmVTdHJva2UpICYmIHN0
cm9rZUNvbnRhaW5zKGxvY2FsUG9pbnQsIGhpdFJ1bGVzLnJlcXVpcmVTdHJva2UpKQorICAgICAg
ICAgICAgfHwgKGhpdFJ1bGVzLmNhbkhpdEZpbGwgJiYgKHN2Z1N0eWxlLT5oYXNGaWxsKCkgfHwg
IWhpdFJ1bGVzLnJlcXVpcmVGaWxsKSAmJiBmaWxsQ29udGFpbnMobG9jYWxQb2ludCwgaGl0UnVs
ZXMucmVxdWlyZUZpbGwsIGZpbGxSdWxlKSkpIHsKKyAgICAgICAgICAgIHVwZGF0ZUhpdFRlc3RS
ZXN1bHQocmVzdWx0LCByb3VuZGVkTGF5b3V0UG9pbnQobG9jYWxQb2ludCkpOworICAgICAgICAg
ICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0KKyAgICB9CisgICAgcmV0dXJuIGZhbHNlOworfQor
CitGbG9hdFJlY3QgUmVuZGVyU1ZHU2hhcGU6OmNhbGN1bGF0ZU1hcmtlckJvdW5kc0lmTmVlZGVk
KCkKK3sKKyAgICBTVkdFbGVtZW50KiBzdmdFbGVtZW50ID0gc3RhdGljX2Nhc3Q8U1ZHRWxlbWVu
dCo+KG5vZGUoKSk7CisgICAgQVNTRVJUKHN2Z0VsZW1lbnQgJiYgc3ZnRWxlbWVudC0+ZG9jdW1l
bnQoKSk7CisgICAgaWYgKCFzdmdFbGVtZW50LT5pc1N0eWxlZCgpKQorICAgICAgICByZXR1cm4g
RmxvYXRSZWN0KCk7CisKKyAgICBTVkdTdHlsZWRFbGVtZW50KiBzdHlsZWRFbGVtZW50ID0gc3Rh
dGljX2Nhc3Q8U1ZHU3R5bGVkRWxlbWVudCo+KHN2Z0VsZW1lbnQpOworICAgIGlmICghc3R5bGVk
RWxlbWVudC0+c3VwcG9ydHNNYXJrZXJzKCkpCisgICAgICAgIHJldHVybiBGbG9hdFJlY3QoKTsK
KworICAgIEFTU0VSVChzdHlsZSgpLT5zdmdTdHlsZSgpLT5oYXNNYXJrZXJzKCkpOworCisgICAg
U1ZHUmVzb3VyY2VzKiByZXNvdXJjZXMgPSBTVkdSZXNvdXJjZXNDYWNoZTo6Y2FjaGVkUmVzb3Vy
Y2VzRm9yUmVuZGVyT2JqZWN0KHRoaXMpOworICAgIGlmICghcmVzb3VyY2VzKQorICAgICAgICBy
ZXR1cm4gRmxvYXRSZWN0KCk7CisKKyAgICBSZW5kZXJTVkdSZXNvdXJjZU1hcmtlciogbWFya2Vy
U3RhcnQgPSByZXNvdXJjZXMtPm1hcmtlclN0YXJ0KCk7CisgICAgUmVuZGVyU1ZHUmVzb3VyY2VN
YXJrZXIqIG1hcmtlck1pZCA9IHJlc291cmNlcy0+bWFya2VyTWlkKCk7CisgICAgUmVuZGVyU1ZH
UmVzb3VyY2VNYXJrZXIqIG1hcmtlckVuZCA9IHJlc291cmNlcy0+bWFya2VyRW5kKCk7CisgICAg
aWYgKCFtYXJrZXJTdGFydCAmJiAhbWFya2VyTWlkICYmICFtYXJrZXJFbmQpCisgICAgICAgIHJl
dHVybiBGbG9hdFJlY3QoKTsKKworICAgIHJldHVybiBtX21hcmtlckxheW91dEluZm8uY2FsY3Vs
YXRlQm91bmRhcmllcyhtYXJrZXJTdGFydCwgbWFya2VyTWlkLCBtYXJrZXJFbmQsIHN0cm9rZVdp
ZHRoKCksIHBhdGgoKSk7Cit9CisKK3ZvaWQgUmVuZGVyU1ZHU2hhcGU6OnVwZGF0ZUNhY2hlZEJv
dW5kYXJpZXMoKQoreworICAgIGlmIChpc0VtcHR5KCkpIHsKKyAgICAgICAgbV9maWxsQm91bmRp
bmdCb3ggPSBGbG9hdFJlY3QoKTsKKyAgICAgICAgbV9zdHJva2VBbmRNYXJrZXJCb3VuZGluZ0Jv
eCA9IEZsb2F0UmVjdCgpOworICAgICAgICBtX3JlcGFpbnRCb3VuZGluZ0JveCA9IEZsb2F0UmVj
dCgpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgLy8gQ2FjaGUgX3VuY2xpcHBlZF8g
ZmlsbCBib3VuZGluZyBib3gsIHVzZWQgZm9yIGNhbGN1bGF0aW9ucyBpbiByZXNvdXJjZXMKKyAg
ICBtX2ZpbGxCb3VuZGluZ0JveCA9IG9iamVjdEJvdW5kaW5nQm94KCk7CisKKyAgICAvLyBTcGVj
KDExLjQpOiBBbnkgemVybyBsZW5ndGggc3VicGF0aCBzaGFsbCBub3QgYmUgc3Ryb2tlZCBpZiB0
aGUg4oCYc3Ryb2tlLWxpbmVjYXDigJkgcHJvcGVydHkgaGFzIGEgdmFsdWUgb2YgYnV0dAorICAg
IC8vIGJ1dCBzaGFsbCBiZSBzdHJva2VkIGlmIHRoZSDigJhzdHJva2UtbGluZWNhcOKAmSBwcm9w
ZXJ0eSBoYXMgYSB2YWx1ZSBvZiByb3VuZCBvciBzcXVhcmUKKyAgICBpZiAoc2hvdWxkU3Ryb2tl
WmVyb0xlbmd0aFN1YnBhdGgoKSkgeworICAgICAgICBtX3N0cm9rZUFuZE1hcmtlckJvdW5kaW5n
Qm94ID0gemVyb0xlbmd0aFN1YnBhdGhSZWN0KCk7CisgICAgICAgIC8vIENhY2hlIHNtYWxsZXN0
IHBvc3NpYmxlIHJlcGFpbnQgcmVjdGFuZ2xlCisgICAgICAgIG1fcmVwYWludEJvdW5kaW5nQm94
ID0gbV9zdHJva2VBbmRNYXJrZXJCb3VuZGluZ0JveDsKKyAgICAgICAgU1ZHUmVuZGVyU3VwcG9y
dDo6aW50ZXJzZWN0UmVwYWludFJlY3RXaXRoUmVzb3VyY2VzKHRoaXMsIG1fcmVwYWludEJvdW5k
aW5nQm94KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIC8vIENhY2hlIF91bmNsaXBw
ZWRfIHN0cm9rZSBib3VuZGluZyBib3gsIHVzZWQgZm9yIGNhbGN1bGF0aW9ucyBpbiByZXNvdXJj
ZXMgKGluY2x1ZGVzIG1hcmtlciBib3VuZGFyaWVzKQorICAgIG1fc3Ryb2tlQW5kTWFya2VyQm91
bmRpbmdCb3ggPSBtX2ZpbGxCb3VuZGluZ0JveDsKKworICAgIGNvbnN0IFNWR1JlbmRlclN0eWxl
KiBzdmdTdHlsZSA9IHN0eWxlKCktPnN2Z1N0eWxlKCk7CisgICAgaWYgKHN2Z1N0eWxlLT5oYXNT
dHJva2UoKSkKKyAgICAgICAgbV9zdHJva2VBbmRNYXJrZXJCb3VuZGluZ0JveC51bml0ZShzdHJv
a2VCb3VuZGluZ0JveCgpKTsKKworICAgIGluZmxhdGVXaXRoTWFya2VyQm91bmRzKCk7CisKKyAg
ICAvLyBDYWNoZSBzbWFsbGVzdCBwb3NzaWJsZSByZXBhaW50IHJlY3RhbmdsZQorICAgIG1fcmVw
YWludEJvdW5kaW5nQm94ID0gbV9zdHJva2VBbmRNYXJrZXJCb3VuZGluZ0JveDsKKyAgICBTVkdS
ZW5kZXJTdXBwb3J0OjppbnRlcnNlY3RSZXBhaW50UmVjdFdpdGhSZXNvdXJjZXModGhpcywgbV9y
ZXBhaW50Qm91bmRpbmdCb3gpOworfQorCitmbG9hdCBSZW5kZXJTVkdTaGFwZTo6c3Ryb2tlV2lk
dGgoKSBjb25zdAoreworICAgIFNWR0VsZW1lbnQqIHN2Z0VsZW1lbnQgPSBzdGF0aWNfY2FzdDxT
VkdFbGVtZW50Kj4obm9kZSgpKTsKKyAgICByZXR1cm4gc3R5bGUoKS0+c3ZnU3R5bGUoKS0+c3Ry
b2tlV2lkdGgoKS52YWx1ZShzdmdFbGVtZW50KTsKK30KKworfQorCisjZW5kaWYgLy8gRU5BQkxF
KFNWRykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZH
U2hhcGUuaCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHU2hhcGUuaApu
ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45MmZjZWI4Ci0tLSAvZGV2L251bGwK
KysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdTaGFwZS5oCkBAIC0w
LDAgKzEsMTYwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1LCAyMDA3IE5pa29s
YXMgWmltbWVybWFubiA8emltbWVybWFubkBrZGUub3JnPgorICogQ29weXJpZ2h0IChDKSAyMDA0
LCAyMDA1IFJvYiBCdWlzIDxidWlzQGtkZS5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDUgRXJp
YyBTZWlkZWwgPGVyaWNAd2Via2l0Lm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAwNiBBcHBsZSBD
b21wdXRlciwgSW5jCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgR29vZ2xlLCBJbmMuCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTEgUmVuYXRhIEhvZG92YW4gPHJlbmlAd2Via2l0Lm9yZz4KKyAqIENvcHly
aWdodCAoQykgMjAxMSBVbml2ZXJzaXR5IG9mIFN6ZWdlZAorICoKKyAqIFRoaXMgbGlicmFyeSBp
cyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlm
eSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisg
KiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBl
aXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBh
bnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4g
dGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJS
QU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFC
SUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQor
ICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgor
ICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2Vu
ZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUg
ZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJl
IEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBC
b3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaWZuZGVmIFJlbmRlclNWR1NoYXBl
X2gKKyNkZWZpbmUgUmVuZGVyU1ZHU2hhcGVfaAorCisjaWYgRU5BQkxFKFNWRykKKyNpbmNsdWRl
ICJBZmZpbmVUcmFuc2Zvcm0uaCIKKyNpbmNsdWRlICJGbG9hdFJlY3QuaCIKKyNpbmNsdWRlICJS
ZW5kZXJTVkdNb2RlbE9iamVjdC5oIgorI2luY2x1ZGUgIlNWR01hcmtlckxheW91dEluZm8uaCIK
KyNpbmNsdWRlICJTdHJva2VTdHlsZUFwcGxpZXIuaCIKKyNpbmNsdWRlIDx3dGYvT3duUHRyLmg+
CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgRmxvYXRQb2ludDsKK2NsYXNzIEdyYXBo
aWNzQ29udGV4dFN0YXRlU2F2ZXI7CitjbGFzcyBSZW5kZXJTVkdDb250YWluZXI7CitjbGFzcyBS
ZW5kZXJTVkdQYXRoOworY2xhc3MgU1ZHU3R5bGVkVHJhbnNmb3JtYWJsZUVsZW1lbnQ7CisKK2Ns
YXNzIEJvdW5kaW5nUmVjdFN0cm9rZVN0eWxlQXBwbGllciA6IHB1YmxpYyBTdHJva2VTdHlsZUFw
cGxpZXIgeworcHVibGljOgorICAgIEJvdW5kaW5nUmVjdFN0cm9rZVN0eWxlQXBwbGllcihjb25z
dCBSZW5kZXJPYmplY3QqIG9iamVjdCwgUmVuZGVyU3R5bGUqIHN0eWxlKQorICAgICAgICA6IG1f
b2JqZWN0KG9iamVjdCkKKyAgICAgICAgLCBtX3N0eWxlKHN0eWxlKQorICAgIHsKKyAgICAgICAg
QVNTRVJUKHN0eWxlKTsKKyAgICAgICAgQVNTRVJUKG9iamVjdCk7CisgICAgfQorCisgICAgdm9p
ZCBzdHJva2VTdHlsZShHcmFwaGljc0NvbnRleHQqIGdjKQorICAgIHsKKyAgICAgICAgU1ZHUmVu
ZGVyU3VwcG9ydDo6YXBwbHlTdHJva2VTdHlsZVRvQ29udGV4dChnYywgbV9zdHlsZSwgbV9vYmpl
Y3QpOworICAgIH0KKworcHJpdmF0ZToKKyAgICBjb25zdCBSZW5kZXJPYmplY3QqIG1fb2JqZWN0
OworICAgIFJlbmRlclN0eWxlKiBtX3N0eWxlOworfTsKKworY2xhc3MgUmVuZGVyU1ZHU2hhcGUg
OiBwdWJsaWMgUmVuZGVyU1ZHTW9kZWxPYmplY3QgeworcHVibGljOgorICAgIGV4cGxpY2l0IFJl
bmRlclNWR1NoYXBlKFNWR1N0eWxlZFRyYW5zZm9ybWFibGVFbGVtZW50Kik7CisgICAgUmVuZGVy
U1ZHU2hhcGUoU1ZHU3R5bGVkVHJhbnNmb3JtYWJsZUVsZW1lbnQqLCBQYXRoKiwgYm9vbCk7Cisg
ICAgdmlydHVhbCB+UmVuZGVyU1ZHU2hhcGUoKTsKKworICAgIHZvaWQgc2V0TmVlZHNTaGFwZVVw
ZGF0ZSgpIHsgbV9uZWVkc1NoYXBlVXBkYXRlID0gdHJ1ZTsgfQorICAgIHZpcnR1YWwgdm9pZCBz
ZXROZWVkc0JvdW5kYXJpZXNVcGRhdGUoKSB7IG1fbmVlZHNCb3VuZGFyaWVzVXBkYXRlID0gdHJ1
ZTsgfQorICAgIHZpcnR1YWwgdm9pZCBzZXROZWVkc1RyYW5zZm9ybVVwZGF0ZSgpIHsgbV9uZWVk
c1RyYW5zZm9ybVVwZGF0ZSA9IHRydWU7IH0KKyAgICB2aXJ0dWFsIHZvaWQgZmlsbFNoYXBlKEdy
YXBoaWNzQ29udGV4dCopIGNvbnN0OworICAgIHZpcnR1YWwgdm9pZCBzdHJva2VTaGFwZShHcmFw
aGljc0NvbnRleHQqKSBjb25zdDsKKyAgICBib29sIGlzUGFpbnRpbmdGYWxsYmFjaygpIGNvbnN0
IHsgcmV0dXJuIG1fZmlsbEZhbGxiYWNrOyB9CisKKyAgICBQYXRoJiBwYXRoKCkgY29uc3QKKyAg
ICB7CisgICAgICAgIEFTU0VSVChtX3BhdGgpOworICAgICAgICByZXR1cm4gKm1fcGF0aDsKKyAg
ICB9CisKK3Byb3RlY3RlZDoKKyAgICB2aXJ0dWFsIHZvaWQgY3JlYXRlU2hhcGUoKTsKKyAgICB2
aXJ0dWFsIGJvb2wgaXNFbXB0eSgpIGNvbnN0OworICAgIHZpcnR1YWwgRmxvYXRSZWN0IG9iamVj
dEJvdW5kaW5nQm94KCkgY29uc3Q7CisgICAgdmlydHVhbCBGbG9hdFJlY3Qgc3Ryb2tlQm91bmRp
bmdCb3goKSBjb25zdDsKKyAgICB2aXJ0dWFsIGJvb2wgc2hhcGVEZXBlbmRlbnRTdHJva2VDb250
YWlucyhjb25zdCBGbG9hdFBvaW50JikgY29uc3Q7CisgICAgdmlydHVhbCBib29sIHNoYXBlRGVw
ZW5kZW50RmlsbENvbnRhaW5zKGNvbnN0IEZsb2F0UG9pbnQmLCBjb25zdCBXaW5kUnVsZSkgY29u
c3Q7CisgICAgZmxvYXQgc3Ryb2tlV2lkdGgoKSBjb25zdDsKKyAgICB2b2lkIHNldElzUGFpbnRp
bmdGYWxsYmFjayhib29sIGlzRmFsbGJhY2spIHsgbV9maWxsRmFsbGJhY2sgPSBpc0ZhbGxiYWNr
OyB9CisgICAgRmxvYXRSZWN0IGNhbGN1bGF0ZU1hcmtlckJvdW5kc0lmTmVlZGVkKCk7CisgICAg
dm9pZCBzZXRTdHJva2VBbmRNYXJrZXJCb3VuZGluZ0JveChGbG9hdFJlY3QgcmVjdCkgeyBtX3N0
cm9rZUFuZE1hcmtlckJvdW5kaW5nQm94ID0gcmVjdDsgfQorCisgICAgYm9vbCBoYXNQYXRoKCkg
Y29uc3QgeyByZXR1cm4gbV9wYXRoLmdldCgpOyB9CisKK3ByaXZhdGU6CisgICAgLy8gSGl0LWRl
dGVjdGlvbiBzZXBhcmF0ZWQgZm9yIHRoZSBmaWxsIGFuZCB0aGUgc3Ryb2tlCisgICAgYm9vbCBm
aWxsQ29udGFpbnMoY29uc3QgRmxvYXRQb2ludCYsIGJvb2wgcmVxdWlyZXNGaWxsID0gdHJ1ZSwg
Y29uc3QgV2luZFJ1bGUgZmlsbFJ1bGUgPSBSVUxFX05PTlpFUk8pOworICAgIGJvb2wgc3Ryb2tl
Q29udGFpbnMoY29uc3QgRmxvYXRQb2ludCYsIGJvb2wgcmVxdWlyZXNTdHJva2UgPSB0cnVlKTsK
KworICAgIHZpcnR1YWwgRmxvYXRSZWN0IHJlcGFpbnRSZWN0SW5Mb2NhbENvb3JkaW5hdGVzKCkg
Y29uc3QgeyByZXR1cm4gbV9yZXBhaW50Qm91bmRpbmdCb3g7IH0KKyAgICB2aXJ0dWFsIGNvbnN0
IEFmZmluZVRyYW5zZm9ybSYgbG9jYWxUb1BhcmVudFRyYW5zZm9ybSgpIGNvbnN0IHsgcmV0dXJu
IG1fbG9jYWxUcmFuc2Zvcm07IH0KKyAgICB2aXJ0dWFsIEFmZmluZVRyYW5zZm9ybSBsb2NhbFRy
YW5zZm9ybSgpIGNvbnN0IHsgcmV0dXJuIG1fbG9jYWxUcmFuc2Zvcm07IH0KKworICAgIHZpcnR1
YWwgYm9vbCBpc1NWR1NoYXBlKCkgY29uc3QgeyByZXR1cm4gdHJ1ZTsgfQorICAgIHZpcnR1YWwg
Y29uc3QgY2hhciogcmVuZGVyTmFtZSgpIGNvbnN0IHsgcmV0dXJuICJSZW5kZXJTVkdTaGFwZSI7
IH0KKyAgICB2aXJ0dWFsIGJvb2wgaXNSb3VuZGVkUmVjdCgpIHsgcmV0dXJuIGZhbHNlOyB9CisK
KyAgICB2aXJ0dWFsIHZvaWQgbGF5b3V0KCk7CisgICAgdmlydHVhbCB2b2lkIHBhaW50KFBhaW50
SW5mbyYsIGNvbnN0IExheW91dFBvaW50Jik7CisgICAgdmlydHVhbCB2b2lkIGFkZEZvY3VzUmlu
Z1JlY3RzKFZlY3RvcjxMYXlvdXRSZWN0PiYsIGNvbnN0IExheW91dFBvaW50Jik7CisgICAgdmly
dHVhbCB2b2lkIGluZmxhdGVXaXRoTWFya2VyQm91bmRzKCkgeyB9CisKKyAgICB2aXJ0dWFsIGJv
b2wgbm9kZUF0RmxvYXRQb2ludChjb25zdCBIaXRUZXN0UmVxdWVzdCYsIEhpdFRlc3RSZXN1bHQm
LCBjb25zdCBGbG9hdFBvaW50JiBwb2ludEluUGFyZW50LCBIaXRUZXN0QWN0aW9uKTsKKworICAg
IHZvaWQgdXBkYXRlQ2FjaGVkQm91bmRhcmllcygpOworCisgICAgdm9pZCBzZXR1cFNxdWFyZUNh
cFBhdGgoaW50JiBhcHBseU1vZGUpOworICAgIGJvb2wgc2V0dXBOb25TY2FsaW5nU3Ryb2tlUGF0
aChHcmFwaGljc0NvbnRleHRTdGF0ZVNhdmVyJik7CisgICAgYm9vbCBzaG91bGRTdHJva2VaZXJv
TGVuZ3RoU3VicGF0aCgpIGNvbnN0OworICAgIEZsb2F0UmVjdCB6ZXJvTGVuZ3RoU3VicGF0aFJl
Y3QoKSBjb25zdDsKKworICAgIHZvaWQgZmlsbEFuZFN0cm9rZVBhdGgoR3JhcGhpY3NDb250ZXh0
Kik7CisKK3ByaXZhdGU6CisgICAgRmxvYXRSZWN0IG1fZmlsbEJvdW5kaW5nQm94OworICAgIEZs
b2F0UmVjdCBtX3N0cm9rZUFuZE1hcmtlckJvdW5kaW5nQm94OworICAgIEZsb2F0UmVjdCBtX3Jl
cGFpbnRCb3VuZGluZ0JveDsKKyAgICBTVkdNYXJrZXJMYXlvdXRJbmZvIG1fbWFya2VyTGF5b3V0
SW5mbzsKKyAgICBBZmZpbmVUcmFuc2Zvcm0gbV9sb2NhbFRyYW5zZm9ybTsKKyAgICBPd25QdHI8
UGF0aD4gbV9wYXRoOworCisgICAgYm9vbCBtX25lZWRzQm91bmRhcmllc1VwZGF0ZSA6IDE7Cisg
ICAgYm9vbCBtX25lZWRzU2hhcGVVcGRhdGUgOiAxOworICAgIGJvb2wgbV9uZWVkc1RyYW5zZm9y
bVVwZGF0ZSA6IDE7CisgICAgYm9vbCBtX2ZpbGxGYWxsYmFjayA6IDE7CisgICAgYm9vbCBtX3N0
cm9rZUNvbnRhaW5zRmFsbEJhY2sgOiAxOworfTsKKworaW5saW5lIFJlbmRlclNWR1NoYXBlKiB0
b1JlbmRlclNWR1NoYXBlKFJlbmRlck9iamVjdCogb2JqZWN0KQoreworICAgIEFTU0VSVCghb2Jq
ZWN0IHx8IG9iamVjdC0+aXNTVkdTaGFwZSgpKTsKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8UmVu
ZGVyU1ZHU2hhcGUqPihvYmplY3QpOworfQorCitpbmxpbmUgY29uc3QgUmVuZGVyU1ZHU2hhcGUq
IHRvUmVuZGVyU1ZHU2hhcGUoY29uc3QgUmVuZGVyT2JqZWN0KiBvYmplY3QpCit7CisgICAgQVNT
RVJUKCFvYmplY3QgfHwgb2JqZWN0LT5pc1NWR1NoYXBlKCkpOworICAgIHJldHVybiBzdGF0aWNf
Y2FzdDxjb25zdCBSZW5kZXJTVkdTaGFwZSo+KG9iamVjdCk7Cit9CisKKy8vIFRoaXMgd2lsbCBj
YXRjaCBhbnlvbmUgZG9pbmcgYW4gdW5uZWNlc3NhcnkgY2FzdC4KK3ZvaWQgdG9SZW5kZXJTVkdT
aGFwZShjb25zdCBSZW5kZXJTVkdTaGFwZSopOworCit9CisKKyNlbmRpZiAvLyBFTkFCTEUoU1ZH
KQorI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR0lu
bGluZVRleHRCb3guY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdJbmxpbmVU
ZXh0Qm94LmNwcAppbmRleCBjMWM1YWZhLi42MDExZWI5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvc3ZnL1NWR0lubGluZVRleHRCb3guY3BwCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9zdmcvU1ZHSW5saW5lVGV4dEJveC5jcHAKQEAgLTM3MCwxNCArMzcwLDE0
IEBAIGJvb2wgU1ZHSW5saW5lVGV4dEJveDo6YWNxdWlyZVBhaW50aW5nUmVzb3VyY2UoR3JhcGhp
Y3NDb250ZXh0KiYgY29udGV4dCwgZmxvYXQKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotdm9pZCBT
VkdJbmxpbmVUZXh0Qm94OjpyZWxlYXNlUGFpbnRpbmdSZXNvdXJjZShHcmFwaGljc0NvbnRleHQq
JiBjb250ZXh0LCBjb25zdCBQYXRoKiBwYXRoKQordm9pZCBTVkdJbmxpbmVUZXh0Qm94OjpyZWxl
YXNlUGFpbnRpbmdSZXNvdXJjZShHcmFwaGljc0NvbnRleHQqJiBjb250ZXh0LCBjb25zdCBQYXRo
KikKIHsKICAgICBBU1NFUlQobV9wYWludGluZ1Jlc291cmNlKTsKIAogICAgIFJlbmRlck9iamVj
dCogcGFyZW50UmVuZGVyZXIgPSBwYXJlbnQoKS0+cmVuZGVyZXIoKTsKICAgICBBU1NFUlQocGFy
ZW50UmVuZGVyZXIpOwogCi0gICAgbV9wYWludGluZ1Jlc291cmNlLT5wb3N0QXBwbHlSZXNvdXJj
ZShwYXJlbnRSZW5kZXJlciwgY29udGV4dCwgbV9wYWludGluZ1Jlc291cmNlTW9kZSwgcGF0aCk7
CisgICAgbV9wYWludGluZ1Jlc291cmNlLT5wb3N0QXBwbHlSZXNvdXJjZShwYXJlbnRSZW5kZXJl
ciwgY29udGV4dCwgbV9wYWludGluZ1Jlc291cmNlTW9kZSwgLypQYXRoKi8gMCwgLypSZW5kZXJT
VkdTaGFwZSovIDApOwogICAgIG1fcGFpbnRpbmdSZXNvdXJjZSA9IDA7CiB9CiAKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHUmVuZGVyU3VwcG9ydC5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR1JlbmRlclN1cHBvcnQuY3BwCmluZGV4IDAw
NzkyMTkuLmJjMTAxMzkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcv
U1ZHUmVuZGVyU3VwcG9ydC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9T
VkdSZW5kZXJTdXBwb3J0LmNwcApAQCAtMTUzLDcgKzE1Myw3IEBAIHZvaWQgU1ZHUmVuZGVyU3Vw
cG9ydDo6ZmluaXNoUmVuZGVyU1ZHQ29udGVudChSZW5kZXJPYmplY3QqIG9iamVjdCwgUGFpbnRJ
bmZvJiBwCiAgICAgU1ZHUmVzb3VyY2VzKiByZXNvdXJjZXMgPSBTVkdSZXNvdXJjZXNDYWNoZTo6
Y2FjaGVkUmVzb3VyY2VzRm9yUmVuZGVyT2JqZWN0KG9iamVjdCk7CiAgICAgaWYgKHJlc291cmNl
cykgewogICAgICAgICBpZiAoUmVuZGVyU1ZHUmVzb3VyY2VGaWx0ZXIqIGZpbHRlciA9IHJlc291
cmNlcy0+ZmlsdGVyKCkpIHsKLSAgICAgICAgICAgIGZpbHRlci0+cG9zdEFwcGx5UmVzb3VyY2Uo
b2JqZWN0LCBwYWludEluZm8uY29udGV4dCwgQXBwbHlUb0RlZmF1bHRNb2RlLCAvKiBwYXRoICov
MCk7CisgICAgICAgICAgICBmaWx0ZXItPnBvc3RBcHBseVJlc291cmNlKHN0YXRpY19jYXN0PFJl
bmRlclNWR1NoYXBlKj4ob2JqZWN0KSwgcGFpbnRJbmZvLmNvbnRleHQsIEFwcGx5VG9EZWZhdWx0
TW9kZSwgMCwgMCk7CiAgICAgICAgICAgICBwYWludEluZm8uY29udGV4dCA9IHNhdmVkQ29udGV4
dDsKICAgICAgICAgfQogICAgIH0KQEAgLTIyNSw5ICsyMjUsOSBAQCB2b2lkIFNWR1JlbmRlclN1
cHBvcnQ6OmxheW91dENoaWxkcmVuKFJlbmRlck9iamVjdCogc3RhcnQsIGJvb2wgc2VsZk5lZWRz
TGF5b3V0KQogICAgICAgICAgICAgLy8gV2hlbiBzZWxmTmVlZHNMYXlvdXQgaXMgZmFsc2UgYW5k
IHRoZSBsYXlvdXQgc2l6ZSBjaGFuZ2VkLCB3ZSBoYXZlIHRvIGNoZWNrIHdoZXRoZXIgdGhpcyBj
aGlsZCB1c2VzIHJlbGF0aXZlIGxlbmd0aHMKICAgICAgICAgICAgIGlmIChTVkdFbGVtZW50KiBl
bGVtZW50ID0gY2hpbGQtPm5vZGUoKS0+aXNTVkdFbGVtZW50KCkgPyBzdGF0aWNfY2FzdDxTVkdF
bGVtZW50Kj4oY2hpbGQtPm5vZGUoKSkgOiAwKSB7CiAgICAgICAgICAgICAgICAgaWYgKGVsZW1l
bnQtPmlzU3R5bGVkKCkgJiYgc3RhdGljX2Nhc3Q8U1ZHU3R5bGVkRWxlbWVudCo+KGVsZW1lbnQp
LT5oYXNSZWxhdGl2ZUxlbmd0aHMoKSkgewotICAgICAgICAgICAgICAgICAgICAvLyBXaGVuIHRo
ZSBsYXlvdXQgc2l6ZSBjaGFuZ2VkIGFuZCB3aGVuIHVzaW5nIHJlbGF0aXZlIHZhbHVlcyB0ZWxs
IHRoZSBSZW5kZXJTVkdQYXRoIHRvIHVwZGF0ZSBpdHMgUGF0aCBvYmplY3QKLSAgICAgICAgICAg
ICAgICAgICAgaWYgKGNoaWxkLT5pc1NWR1BhdGgoKSkKLSAgICAgICAgICAgICAgICAgICAgICAg
IHRvUmVuZGVyU1ZHUGF0aChjaGlsZCktPnNldE5lZWRzUGF0aFVwZGF0ZSgpOworICAgICAgICAg
ICAgICAgICAgICAvLyBXaGVuIHRoZSBsYXlvdXQgc2l6ZSBjaGFuZ2VkIGFuZCB3aGVuIHVzaW5n
IHJlbGF0aXZlIHZhbHVlcyB0ZWxsIHRoZSBSZW5kZXJTVkdTaGFwZSB0byB1cGRhdGUgaXRzIHNo
YXBlIG9iamVjdAorICAgICAgICAgICAgICAgICAgICBpZiAoY2hpbGQtPmlzU1ZHU2hhcGUoKSkK
KyAgICAgICAgICAgICAgICAgICAgICAgIHRvUmVuZGVyU1ZHU2hhcGUoY2hpbGQpLT5zZXROZWVk
c1NoYXBlVXBkYXRlKCk7CiAKICAgICAgICAgICAgICAgICAgICAgbmVlZHNMYXlvdXQgPSB0cnVl
OwogICAgICAgICAgICAgICAgIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9zdmcvU1ZHUmVuZGVyVHJlZUFzVGV4dC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
c3ZnL1NWR1JlbmRlclRyZWVBc1RleHQuY3BwCmluZGV4IGExNjI5NjkuLmQxYWQ3MmEgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHUmVuZGVyVHJlZUFzVGV4dC5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdSZW5kZXJUcmVlQXNUZXh0
LmNwcApAQCAtNTUsNiArNTUsNyBAQAogI2luY2x1ZGUgIlJlbmRlclNWR1Jlc291cmNlUmFkaWFs
R3JhZGllbnQuaCIKICNpbmNsdWRlICJSZW5kZXJTVkdSZXNvdXJjZVNvbGlkQ29sb3IuaCIKICNp
bmNsdWRlICJSZW5kZXJTVkdSb290LmgiCisjaW5jbHVkZSAiUmVuZGVyU1ZHU2hhcGUuaCIKICNp
bmNsdWRlICJSZW5kZXJTVkdUZXh0LmgiCiAjaW5jbHVkZSAiUmVuZGVyVHJlZUFzVGV4dC5oIgog
I2luY2x1ZGUgIlNWR0NpcmNsZUVsZW1lbnQuaCIKQEAgLTI4OSwxOCArMjkwLDE4IEBAIHN0YXRp
YyB2b2lkIHdyaXRlU3R5bGUoVGV4dFN0cmVhbSYgdHMsIGNvbnN0IFJlbmRlck9iamVjdCYgb2Jq
ZWN0KQogICAgICAgICB3cml0ZU5hbWVWYWx1ZVBhaXIodHMsICJ0cmFuc2Zvcm0iLCBvYmplY3Qu
bG9jYWxUcmFuc2Zvcm0oKSk7CiAgICAgd3JpdGVJZk5vdERlZmF1bHQodHMsICJpbWFnZSByZW5k
ZXJpbmciLCBzdHlsZS0+aW1hZ2VSZW5kZXJpbmcoKSwgUmVuZGVyU3R5bGU6OmluaXRpYWxJbWFn
ZVJlbmRlcmluZygpKTsKICAgICB3cml0ZUlmTm90RGVmYXVsdCh0cywgIm9wYWNpdHkiLCBzdHls
ZS0+b3BhY2l0eSgpLCBSZW5kZXJTdHlsZTo6aW5pdGlhbE9wYWNpdHkoKSk7Ci0gICAgaWYgKG9i
amVjdC5pc1NWR1BhdGgoKSkgewotICAgICAgICBjb25zdCBSZW5kZXJTVkdQYXRoJiBwYXRoID0g
c3RhdGljX2Nhc3Q8Y29uc3QgUmVuZGVyU1ZHUGF0aCY+KG9iamVjdCk7Ci0gICAgICAgIEFTU0VS
VChwYXRoLm5vZGUoKSk7Ci0gICAgICAgIEFTU0VSVChwYXRoLm5vZGUoKS0+aXNTVkdFbGVtZW50
KCkpOworICAgIGlmIChvYmplY3QuaXNTVkdTaGFwZSgpKSB7CisgICAgICAgIGNvbnN0IFJlbmRl
clNWR1NoYXBlJiBzaGFwZSA9IHN0YXRpY19jYXN0PGNvbnN0IFJlbmRlclNWR1NoYXBlJj4ob2Jq
ZWN0KTsKKyAgICAgICAgQVNTRVJUKHNoYXBlLm5vZGUoKSk7CisgICAgICAgIEFTU0VSVChzaGFw
ZS5ub2RlKCktPmlzU1ZHRWxlbWVudCgpKTsKIAogICAgICAgICBDb2xvciBmYWxsYmFja0NvbG9y
OwotICAgICAgICBpZiAoUmVuZGVyU1ZHUmVzb3VyY2UqIHN0cm9rZVBhaW50aW5nUmVzb3VyY2Ug
PSBSZW5kZXJTVkdSZXNvdXJjZTo6c3Ryb2tlUGFpbnRpbmdSZXNvdXJjZShjb25zdF9jYXN0PFJl
bmRlclNWR1BhdGgqPigmcGF0aCksIHBhdGguc3R5bGUoKSwgZmFsbGJhY2tDb2xvcikpIHsKKyAg
ICAgICAgaWYgKFJlbmRlclNWR1Jlc291cmNlKiBzdHJva2VQYWludGluZ1Jlc291cmNlID0gUmVu
ZGVyU1ZHUmVzb3VyY2U6OnN0cm9rZVBhaW50aW5nUmVzb3VyY2UoY29uc3RfY2FzdDxSZW5kZXJT
VkdTaGFwZSo+KCZzaGFwZSksIHNoYXBlLnN0eWxlKCksIGZhbGxiYWNrQ29sb3IpKSB7CiAgICAg
ICAgICAgICBUZXh0U3RyZWFtU2VwYXJhdG9yIHMoIiAiKTsKICAgICAgICAgICAgIHRzIDw8ICIg
W3N0cm9rZT17IiA8PCBzOwogICAgICAgICAgICAgd3JpdGVTVkdQYWludGluZ1Jlc291cmNlKHRz
LCBzdHJva2VQYWludGluZ1Jlc291cmNlKTsKIAotICAgICAgICAgICAgU1ZHRWxlbWVudCogZWxl
bWVudCA9IHN0YXRpY19jYXN0PFNWR0VsZW1lbnQqPihwYXRoLm5vZGUoKSk7CisgICAgICAgICAg
ICBTVkdFbGVtZW50KiBlbGVtZW50ID0gc3RhdGljX2Nhc3Q8U1ZHRWxlbWVudCo+KHNoYXBlLm5v
ZGUoKSk7CiAgICAgICAgICAgICBkb3VibGUgZGFzaE9mZnNldCA9IHN2Z1N0eWxlLT5zdHJva2VE
YXNoT2Zmc2V0KCkudmFsdWUoZWxlbWVudCk7CiAgICAgICAgICAgICBkb3VibGUgc3Ryb2tlV2lk
dGggPSBzdmdTdHlsZS0+c3Ryb2tlV2lkdGgoKS52YWx1ZShlbGVtZW50KTsKICAgICAgICAgICAg
IGNvbnN0IFZlY3RvcjxTVkdMZW5ndGg+JiBkYXNoZXMgPSBzdmdTdHlsZS0+c3Ryb2tlRGFzaEFy
cmF5KCk7CkBAIC0zMjIsNyArMzIzLDcgQEAgc3RhdGljIHZvaWQgd3JpdGVTdHlsZShUZXh0U3Ry
ZWFtJiB0cywgY29uc3QgUmVuZGVyT2JqZWN0JiBvYmplY3QpCiAgICAgICAgICAgICB0cyA8PCAi
fV0iOwogICAgICAgICB9CiAKLSAgICAgICAgaWYgKFJlbmRlclNWR1Jlc291cmNlKiBmaWxsUGFp
bnRpbmdSZXNvdXJjZSA9IFJlbmRlclNWR1Jlc291cmNlOjpmaWxsUGFpbnRpbmdSZXNvdXJjZShj
b25zdF9jYXN0PFJlbmRlclNWR1BhdGgqPigmcGF0aCksIHBhdGguc3R5bGUoKSwgZmFsbGJhY2tD
b2xvcikpIHsKKyAgICAgICAgaWYgKFJlbmRlclNWR1Jlc291cmNlKiBmaWxsUGFpbnRpbmdSZXNv
dXJjZSA9IFJlbmRlclNWR1Jlc291cmNlOjpmaWxsUGFpbnRpbmdSZXNvdXJjZShjb25zdF9jYXN0
PFJlbmRlclNWR1NoYXBlKj4oJnNoYXBlKSwgc2hhcGUuc3R5bGUoKSwgZmFsbGJhY2tDb2xvcikp
IHsKICAgICAgICAgICAgIFRleHRTdHJlYW1TZXBhcmF0b3IgcygiICIpOwogICAgICAgICAgICAg
dHMgPDwgIiBbZmlsbD17IiA8PCBzOwogICAgICAgICAgICAgd3JpdGVTVkdQYWludGluZ1Jlc291
cmNlKHRzLCBmaWxsUGFpbnRpbmdSZXNvdXJjZSk7CkBAIC0zNDYsMTIgKzM0NywxMiBAQCBzdGF0
aWMgVGV4dFN0cmVhbSYgd3JpdGVQb3NpdGlvbkFuZFN0eWxlKFRleHRTdHJlYW0mIHRzLCBjb25z
dCBSZW5kZXJPYmplY3QmIG9iagogICAgIHJldHVybiB0czsKIH0KIAotc3RhdGljIFRleHRTdHJl
YW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYgdHMsIGNvbnN0IFJlbmRlclNWR1BhdGgmIHBhdGgp
CitzdGF0aWMgVGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiB0cywgY29uc3QgUmVu
ZGVyU1ZHU2hhcGUmIHNoYXBlKQogewotICAgIHdyaXRlUG9zaXRpb25BbmRTdHlsZSh0cywgcGF0
aCk7CisgICAgd3JpdGVQb3NpdGlvbkFuZFN0eWxlKHRzLCBzaGFwZSk7CiAKLSAgICBBU1NFUlQo
cGF0aC5ub2RlKCktPmlzU1ZHRWxlbWVudCgpKTsKLSAgICBTVkdFbGVtZW50KiBzdmdFbGVtZW50
ID0gc3RhdGljX2Nhc3Q8U1ZHRWxlbWVudCo+KHBhdGgubm9kZSgpKTsKKyAgICBBU1NFUlQoc2hh
cGUubm9kZSgpLT5pc1NWR0VsZW1lbnQoKSk7CisgICAgU1ZHRWxlbWVudCogc3ZnRWxlbWVudCA9
IHN0YXRpY19jYXN0PFNWR0VsZW1lbnQqPihzaGFwZS5ub2RlKCkpOwogCiAgICAgaWYgKHN2Z0Vs
ZW1lbnQtPmhhc1RhZ05hbWUoU1ZHTmFtZXM6OnJlY3RUYWcpKSB7CiAgICAgICAgIFNWR1JlY3RF
bGVtZW50KiBlbGVtZW50ID0gc3RhdGljX2Nhc3Q8U1ZHUmVjdEVsZW1lbnQqPihzdmdFbGVtZW50
KTsKQEAgLTY1MywxMSArNjU0LDExIEBAIHZvaWQgd3JpdGVTVkdJbWFnZShUZXh0U3RyZWFtJiB0
cywgY29uc3QgUmVuZGVyU1ZHSW1hZ2UmIGltYWdlLCBpbnQgaW5kZW50KQogICAgIHdyaXRlUmVz
b3VyY2VzKHRzLCBpbWFnZSwgaW5kZW50KTsKIH0KIAotdm9pZCB3cml0ZShUZXh0U3RyZWFtJiB0
cywgY29uc3QgUmVuZGVyU1ZHUGF0aCYgcGF0aCwgaW50IGluZGVudCkKK3ZvaWQgd3JpdGUoVGV4
dFN0cmVhbSYgdHMsIGNvbnN0IFJlbmRlclNWR1NoYXBlJiBzaGFwZSwgaW50IGluZGVudCkKIHsK
LSAgICB3cml0ZVN0YW5kYXJkUHJlZml4KHRzLCBwYXRoLCBpbmRlbnQpOwotICAgIHRzIDw8IHBh
dGggPDwgIlxuIjsKLSAgICB3cml0ZVJlc291cmNlcyh0cywgcGF0aCwgaW5kZW50KTsKKyAgICB3
cml0ZVN0YW5kYXJkUHJlZml4KHRzLCBzaGFwZSwgaW5kZW50KTsKKyAgICB0cyA8PCBzaGFwZSA8
PCAiXG4iOworICAgIHdyaXRlUmVzb3VyY2VzKHRzLCBzaGFwZSwgaW5kZW50KTsKIH0KIAogdm9p
ZCB3cml0ZVNWR0dyYWRpZW50U3RvcChUZXh0U3RyZWFtJiB0cywgY29uc3QgUmVuZGVyU1ZHR3Jh
ZGllbnRTdG9wJiBzdG9wLCBpbnQgaW5kZW50KQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL3N2Zy9TVkdSZW5kZXJUcmVlQXNUZXh0LmggYi9Tb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvc3ZnL1NWR1JlbmRlclRyZWVBc1RleHQuaAppbmRleCBjZTA3YTVjLi4zNTk4YzgzIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR1JlbmRlclRyZWVBc1Rl
eHQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR1JlbmRlclRyZWVBc1Rl
eHQuaApAQCAtNDEsMTQgKzQxLDE0IEBAIGNsYXNzIFJlbmRlckltYWdlOwogY2xhc3MgUmVuZGVy
T2JqZWN0OwogY2xhc3MgUmVuZGVyU1ZHR3JhZGllbnRTdG9wOwogY2xhc3MgUmVuZGVyU1ZHSW1h
Z2U7Ci1jbGFzcyBSZW5kZXJTVkdQYXRoOworY2xhc3MgUmVuZGVyU1ZHU2hhcGU7CiBjbGFzcyBS
ZW5kZXJTVkdSb290OwogY2xhc3MgUmVuZGVyVGV4dDsKIGNsYXNzIEFmZmluZVRyYW5zZm9ybTsK
IGNsYXNzIFNWR1VuaXRUeXBlczsKIAogLy8gZnVuY3Rpb25zIHVzZWQgYnkgdGhlIG1haW4gUmVu
ZGVyVHJlZUFzVGV4dCBjb2RlCi12b2lkIHdyaXRlKFRleHRTdHJlYW0mLCBjb25zdCBSZW5kZXJT
VkdQYXRoJiwgaW50IGluZGVudCk7Cit2b2lkIHdyaXRlKFRleHRTdHJlYW0mLCBjb25zdCBSZW5k
ZXJTVkdTaGFwZSYsIGludCBpbmRlbnQpOwogdm9pZCB3cml0ZShUZXh0U3RyZWFtJiwgY29uc3Qg
UmVuZGVyU1ZHUm9vdCYsIGludCBpbmRlbnQpOwogdm9pZCB3cml0ZVNWR0dyYWRpZW50U3RvcChU
ZXh0U3RyZWFtJiwgY29uc3QgUmVuZGVyU1ZHR3JhZGllbnRTdG9wJiwgaW50IGluZGVudCk7CiB2
b2lkIHdyaXRlU1ZHUmVzb3VyY2VDb250YWluZXIoVGV4dFN0cmVhbSYsIGNvbnN0IFJlbmRlck9i
amVjdCYsIGludCBpbmRlbnQpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L3N2Zy9TVkdUZXh0UnVuUmVuZGVyaW5nQ29udGV4dC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvc3ZnL1NWR1RleHRSdW5SZW5kZXJpbmdDb250ZXh0LmNwcAppbmRleCAzM2FjZjkyLi4z
MTY5OTQyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR1RleHRS
dW5SZW5kZXJpbmdDb250ZXh0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3Zn
L1NWR1RleHRSdW5SZW5kZXJpbmdDb250ZXh0LmNwcApAQCAtMTU0LDEzICsxNTQsMTMgQEAgdm9p
ZCBTVkdUZXh0UnVuUmVuZGVyaW5nQ29udGV4dDo6ZHJhd1NWR0dseXBocyhHcmFwaGljc0NvbnRl
eHQqIGNvbnRleHQsIGNvbnN0IFQKIAogICAgICAgICBQYXRoIGdseXBoUGF0aCA9IHN2Z0dseXBo
LnBhdGhEYXRhOwogICAgICAgICBnbHlwaFBhdGgudHJhbnNmb3JtKGdseXBoUGF0aFRyYW5zZm9y
bSk7Ci0KICAgICAgICAgaWYgKGFjdGl2ZVBhaW50aW5nUmVzb3VyY2UtPmFwcGx5UmVzb3VyY2Uo
cGFyZW50UmVuZGVyT2JqZWN0LCBwYXJlbnRSZW5kZXJPYmplY3RTdHlsZSwgY29udGV4dCwgcmVz
b3VyY2VNb2RlKSkgewogICAgICAgICAgICAgaWYgKHJlbmRlck9iamVjdCAmJiByZW5kZXJPYmpl
Y3QtPmlzU1ZHSW5saW5lVGV4dCgpKSB7CisKICAgICAgICAgICAgICAgICBjb25zdCBSZW5kZXJT
VkdJbmxpbmVUZXh0KiB0ZXh0UmVuZGVyZXIgPSB0b1JlbmRlclNWR0lubGluZVRleHQocmVuZGVy
T2JqZWN0KTsKICAgICAgICAgICAgICAgICBjb250ZXh0LT5zZXRTdHJva2VUaGlja25lc3MoY29u
dGV4dC0+c3Ryb2tlVGhpY2tuZXNzKCkgKiB0ZXh0UmVuZGVyZXItPnNjYWxpbmdGYWN0b3IoKSk7
CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBhY3RpdmVQYWludGluZ1Jlc291cmNlLT5wb3N0
QXBwbHlSZXNvdXJjZShwYXJlbnRSZW5kZXJPYmplY3QsIGNvbnRleHQsIHJlc291cmNlTW9kZSwg
JmdseXBoUGF0aCk7CisgICAgICAgICAgICBhY3RpdmVQYWludGluZ1Jlc291cmNlLT5wb3N0QXBw
bHlSZXNvdXJjZShwYXJlbnRSZW5kZXJPYmplY3QsIGNvbnRleHQsIHJlc291cmNlTW9kZSwgJmds
eXBoUGF0aCwgMCk7CiAgICAgICAgICB9CiAgCiAgICAgICAgIGNvbnRleHQtPnJlc3RvcmUoKTsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdDaXJjbGVFbGVtZW50LmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL3N2Zy9TVkdDaXJjbGVFbGVtZW50LmNwcAppbmRleCAyYWU2OWI4Li4wMzY2
OWUwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHQ2lyY2xlRWxlbWVudC5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0NpcmNsZUVsZW1lbnQuY3BwCkBAIC0xMjQsNyAr
MTI0LDcgQEAgdm9pZCBTVkdDaXJjbGVFbGVtZW50OjpzdmdBdHRyaWJ1dGVDaGFuZ2VkKGNvbnN0
IFF1YWxpZmllZE5hbWUmIGF0dHJOYW1lKQogICAgICAgICByZXR1cm47CiAKICAgICBpZiAoaXNM
ZW5ndGhBdHRyaWJ1dGUpIHsKLSAgICAgICAgcmVuZGVyZXItPnNldE5lZWRzUGF0aFVwZGF0ZSgp
OworICAgICAgICByZW5kZXJlci0+c2V0TmVlZHNTaGFwZVVwZGF0ZSgpOwogICAgICAgICBSZW5k
ZXJTVkdSZXNvdXJjZTo6bWFya0ZvckxheW91dEFuZFBhcmVudFJlc291cmNlSW52YWxpZGF0aW9u
KHJlbmRlcmVyKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3N2Zy9TVkdFbGxpcHNlRWxlbWVudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZH
RWxsaXBzZUVsZW1lbnQuY3BwCmluZGV4IGNlYTA2NmQuLmNhMDE3YzQgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3N2Zy9TVkdFbGxpcHNlRWxlbWVudC5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvc3ZnL1NWR0VsbGlwc2VFbGVtZW50LmNwcApAQCAtMTI5LDcgKzEyOSw3IEBAIHZvaWQgU1ZH
RWxsaXBzZUVsZW1lbnQ6OnN2Z0F0dHJpYnV0ZUNoYW5nZWQoY29uc3QgUXVhbGlmaWVkTmFtZSYg
YXR0ck5hbWUpCiAgICAgICAgIHJldHVybjsKIAogICAgIGlmIChpc0xlbmd0aEF0dHJpYnV0ZSkg
ewotICAgICAgICByZW5kZXJlci0+c2V0TmVlZHNQYXRoVXBkYXRlKCk7CisgICAgICAgIHJlbmRl
cmVyLT5zZXROZWVkc1NoYXBlVXBkYXRlKCk7CiAgICAgICAgIFJlbmRlclNWR1Jlc291cmNlOjpt
YXJrRm9yTGF5b3V0QW5kUGFyZW50UmVzb3VyY2VJbnZhbGlkYXRpb24ocmVuZGVyZXIpOwogICAg
ICAgICByZXR1cm47CiAgICAgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0xp
bmVFbGVtZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdMaW5lRWxlbWVudC5jcHAKaW5k
ZXggYzdjYTExZS4uYjFiYjhlYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0xp
bmVFbGVtZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHTGluZUVsZW1lbnQuY3Bw
CkBAIC0xMjksNyArMTI5LDcgQEAgdm9pZCBTVkdMaW5lRWxlbWVudDo6c3ZnQXR0cmlidXRlQ2hh
bmdlZChjb25zdCBRdWFsaWZpZWROYW1lJiBhdHRyTmFtZSkKICAgICAgICAgcmV0dXJuOwogCiAg
ICAgaWYgKGlzTGVuZ3RoQXR0cmlidXRlKSB7Ci0gICAgICAgIHJlbmRlcmVyLT5zZXROZWVkc1Bh
dGhVcGRhdGUoKTsKKyAgICAgICAgcmVuZGVyZXItPnNldE5lZWRzU2hhcGVVcGRhdGUoKTsKICAg
ICAgICAgUmVuZGVyU1ZHUmVzb3VyY2U6Om1hcmtGb3JMYXlvdXRBbmRQYXJlbnRSZXNvdXJjZUlu
dmFsaWRhdGlvbihyZW5kZXJlcik7CiAgICAgICAgIHJldHVybjsKICAgICB9CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHUGF0aEVsZW1lbnQuY3BwIGIvU291cmNlL1dlYkNvcmUv
c3ZnL1NWR1BhdGhFbGVtZW50LmNwcAppbmRleCBhN2EzMzdlLi5mZTMzNTk1IDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHUGF0aEVsZW1lbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3N2Zy9TVkdQYXRoRWxlbWVudC5jcHAKQEAgLTI2OSw3ICsyNjksNyBAQCB2b2lkIFNWR1Bh
dGhFbGVtZW50OjpzdmdBdHRyaWJ1dGVDaGFuZ2VkKGNvbnN0IFF1YWxpZmllZE5hbWUmIGF0dHJO
YW1lKQogICAgICAgICB9CiAKICAgICAgICAgaWYgKHJlbmRlcmVyKQotICAgICAgICAgICAgcmVu
ZGVyZXItPnNldE5lZWRzUGF0aFVwZGF0ZSgpOworICAgICAgICAgICAgcmVuZGVyZXItPnNldE5l
ZWRzU2hhcGVVcGRhdGUoKTsKICAgICB9CiAKICAgICBpZiAocmVuZGVyZXIpCkBAIC0zNTUsMTAg
KzM1NSwxNiBAQCB2b2lkIFNWR1BhdGhFbGVtZW50OjpwYXRoU2VnTGlzdENoYW5nZWQoU1ZHUGF0
aFNlZ1JvbGUgcm9sZSkKICAgICBpZiAoIXJlbmRlcmVyKQogICAgICAgICByZXR1cm47CiAKLSAg
ICByZW5kZXJlci0+c2V0TmVlZHNQYXRoVXBkYXRlKCk7CisgICAgcmVuZGVyZXItPnNldE5lZWRz
U2hhcGVVcGRhdGUoKTsKICAgICBSZW5kZXJTVkdSZXNvdXJjZTo6bWFya0ZvckxheW91dEFuZFBh
cmVudFJlc291cmNlSW52YWxpZGF0aW9uKHJlbmRlcmVyKTsKIH0KIAorUmVuZGVyT2JqZWN0KiBT
VkdQYXRoRWxlbWVudDo6Y3JlYXRlUmVuZGVyZXIoUmVuZGVyQXJlbmEqIGFyZW5hLCBSZW5kZXJT
dHlsZSopCit7CisgICAgLy8gQnkgZGVmYXVsdCwgYW55IHN1YmNsYXNzIGlzIGV4cGVjdGVkIHRv
IGRvIHBhdGgtYmFzZWQgZHJhd2luZworICAgIHJldHVybiBuZXcgKGFyZW5hKSBSZW5kZXJTVkdQ
YXRoKHRoaXMpOworfQorCiB9CiAKICNlbmRpZiAvLyBFTkFCTEUoU1ZHKQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvc3ZnL1NWR1BhdGhFbGVtZW50LmggYi9Tb3VyY2UvV2ViQ29yZS9zdmcv
U1ZHUGF0aEVsZW1lbnQuaAppbmRleCAxZDM3ZDBlLi41NGI4ZmUyIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9zdmcvU1ZHUGF0aEVsZW1lbnQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9zdmcv
U1ZHUGF0aEVsZW1lbnQuaApAQCAtMTIyLDYgKzEyMiw4IEBAIHByaXZhdGU6CiAgICAgdmlydHVh
bCB2b2lkIHN5bmNocm9uaXplUmVxdWlyZWRFeHRlbnNpb25zKCkgeyBTVkdUZXN0czo6c3luY2hy
b25pemVSZXF1aXJlZEV4dGVuc2lvbnModGhpcyk7IH0KICAgICB2aXJ0dWFsIHZvaWQgc3luY2hy
b25pemVTeXN0ZW1MYW5ndWFnZSgpIHsgU1ZHVGVzdHM6OnN5bmNocm9uaXplU3lzdGVtTGFuZ3Vh
Z2UodGhpcyk7IH0KIAorICAgIFJlbmRlck9iamVjdCogY3JlYXRlUmVuZGVyZXIoUmVuZGVyQXJl
bmEqLCBSZW5kZXJTdHlsZSopOworCiBwcml2YXRlOgogICAgIE93blB0cjxTVkdQYXRoQnl0ZVN0
cmVhbT4gbV9wYXRoQnl0ZVN0cmVhbTsKICAgICBtdXRhYmxlIFNWR1N5bmNocm9uaXphYmxlQW5p
bWF0ZWRQcm9wZXJ0eTxTVkdQYXRoU2VnTGlzdD4gbV9wYXRoU2VnTGlzdDsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdQb2x5RWxlbWVudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9z
dmcvU1ZHUG9seUVsZW1lbnQuY3BwCmluZGV4IDYxNmI4NjcuLmYzMGNhNGEgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdQb2x5RWxlbWVudC5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvc3ZnL1NWR1BvbHlFbGVtZW50LmNwcApAQCAtMTI0LDcgKzEyNCw3IEBAIHZvaWQgU1ZHUG9s
eUVsZW1lbnQ6OnN2Z0F0dHJpYnV0ZUNoYW5nZWQoY29uc3QgUXVhbGlmaWVkTmFtZSYgYXR0ck5h
bWUpCiAgICAgICAgIHJldHVybjsKIAogICAgIGlmIChhdHRyTmFtZSA9PSBTVkdOYW1lczo6cG9p
bnRzQXR0cikgewotICAgICAgICByZW5kZXJlci0+c2V0TmVlZHNQYXRoVXBkYXRlKCk7CisgICAg
ICAgIHJlbmRlcmVyLT5zZXROZWVkc1NoYXBlVXBkYXRlKCk7CiAgICAgICAgIFJlbmRlclNWR1Jl
c291cmNlOjptYXJrRm9yTGF5b3V0QW5kUGFyZW50UmVzb3VyY2VJbnZhbGlkYXRpb24ocmVuZGVy
ZXIpOwogICAgICAgICByZXR1cm47CiAgICAgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
c3ZnL1NWR1JlY3RFbGVtZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdSZWN0RWxlbWVu
dC5jcHAKaW5kZXggZTg0Nzc0ZC4uMTg3OWUwYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
c3ZnL1NWR1JlY3RFbGVtZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHUmVjdEVs
ZW1lbnQuY3BwCkBAIC0yNSw2ICsyNSw3IEBACiAKICNpbmNsdWRlICJBdHRyaWJ1dGUuaCIKICNp
bmNsdWRlICJSZW5kZXJTVkdQYXRoLmgiCisjaW5jbHVkZSAiUmVuZGVyU1ZHUmVjdC5oIgogI2lu
Y2x1ZGUgIlJlbmRlclNWR1Jlc291cmNlLmgiCiAjaW5jbHVkZSAiU1ZHRWxlbWVudEluc3RhbmNl
LmgiCiAjaW5jbHVkZSAiU1ZHTGVuZ3RoLmgiCkBAIC0zMiw2ICszMyw4IEBACiAKIG5hbWVzcGFj
ZSBXZWJDb3JlIHsKIAorY2xhc3MgUmVuZGVyU1ZHUmVjdDsKKwogLy8gQW5pbWF0ZWQgcHJvcGVy
dHkgZGVmaW5pdGlvbnMKIERFRklORV9BTklNQVRFRF9MRU5HVEgoU1ZHUmVjdEVsZW1lbnQsIFNW
R05hbWVzOjp4QXR0ciwgWCwgeCkKIERFRklORV9BTklNQVRFRF9MRU5HVEgoU1ZHUmVjdEVsZW1l
bnQsIFNWR05hbWVzOjp5QXR0ciwgWSwgeSkKQEAgLTEzNywxMiArMTQwLDEyIEBAIHZvaWQgU1ZH
UmVjdEVsZW1lbnQ6OnN2Z0F0dHJpYnV0ZUNoYW5nZWQoY29uc3QgUXVhbGlmaWVkTmFtZSYgYXR0
ck5hbWUpCiAgICAgaWYgKFNWR1Rlc3RzOjpoYW5kbGVBdHRyaWJ1dGVDaGFuZ2UodGhpcywgYXR0
ck5hbWUpKQogICAgICAgICByZXR1cm47CiAKLSAgICBSZW5kZXJTVkdQYXRoKiByZW5kZXJlciA9
IHN0YXRpY19jYXN0PFJlbmRlclNWR1BhdGgqPih0aGlzLT5yZW5kZXJlcigpKTsKKyAgICBSZW5k
ZXJTVkdSZWN0KiByZW5kZXJlciA9IHN0YXRpY19jYXN0PFJlbmRlclNWR1JlY3QqPih0aGlzLT5y
ZW5kZXJlcigpKTsKICAgICBpZiAoIXJlbmRlcmVyKQogICAgICAgICByZXR1cm47CiAKICAgICBp
ZiAoaXNMZW5ndGhBdHRyaWJ1dGUpIHsKLSAgICAgICAgcmVuZGVyZXItPnNldE5lZWRzUGF0aFVw
ZGF0ZSgpOworICAgICAgICByZW5kZXJlci0+c2V0TmVlZHNTaGFwZVVwZGF0ZSgpOwogICAgICAg
ICBSZW5kZXJTVkdSZXNvdXJjZTo6bWFya0ZvckxheW91dEFuZFBhcmVudFJlc291cmNlSW52YWxp
ZGF0aW9uKHJlbmRlcmVyKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KQEAgLTE5OCw2ICsyMDEs
MTEgQEAgYm9vbCBTVkdSZWN0RWxlbWVudDo6c2VsZkhhc1JlbGF0aXZlTGVuZ3RocygpIGNvbnN0
CiAgICAgICAgIHx8IHJ5KCkuaXNSZWxhdGl2ZSgpOwogfQogCitSZW5kZXJPYmplY3QqIFNWR1Jl
Y3RFbGVtZW50OjpjcmVhdGVSZW5kZXJlcihSZW5kZXJBcmVuYSogYXJlbmEsIFJlbmRlclN0eWxl
KikKK3sKKyAgICByZXR1cm4gbmV3IChhcmVuYSkgUmVuZGVyU1ZHUmVjdCh0aGlzKTsKK30KKwog
fQogCiAjZW5kaWYgLy8gRU5BQkxFKFNWRykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3N2
Zy9TVkdSZWN0RWxlbWVudC5oIGIvU291cmNlL1dlYkNvcmUvc3ZnL1NWR1JlY3RFbGVtZW50LmgK
aW5kZXggOTk0MzdmMy4uOWJmNjAyZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvc3ZnL1NW
R1JlY3RFbGVtZW50LmgKKysrIGIvU291cmNlL1dlYkNvcmUvc3ZnL1NWR1JlY3RFbGVtZW50LmgK
QEAgLTUyLDYgKzUyLDggQEAgcHJpdmF0ZToKIAogICAgIHZpcnR1YWwgYm9vbCBzZWxmSGFzUmVs
YXRpdmVMZW5ndGhzKCkgY29uc3Q7CiAKKyAgICBSZW5kZXJPYmplY3QqIGNyZWF0ZVJlbmRlcmVy
KFJlbmRlckFyZW5hKiwgUmVuZGVyU3R5bGUqKTsKKwogICAgIEJFR0lOX0RFQ0xBUkVfQU5JTUFU
RURfUFJPUEVSVElFUyhTVkdSZWN0RWxlbWVudCkKICAgICAgICAgREVDTEFSRV9BTklNQVRFRF9M
RU5HVEgoWCwgeCkKICAgICAgICAgREVDTEFSRV9BTklNQVRFRF9MRU5HVEgoWSwgeSkKLS0gCjEu
Ny41LjQKCg==
</data>
<flag name="commit-queue"
          id="104214"
          type_id="3"
          status="-"
          setter="rhodovan.u-szeged"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>107524</attachid>
            <date>2011-09-15 12:08:03 -0700</date>
            <delta_ts>2011-09-16 10:36:39 -0700</delta_ts>
            <desc>Proposed patch</desc>
            <filename>0001-krit-niko-andy.patch</filename>
            <type>text/plain</type>
            <size>106664</size>
            <attacher name="Renata Hodovan">rhodovan.u-szeged</attacher>
            
              <data encoding="base64">RnJvbSBhMGJlMzA4YzA0MWQ5OGU3MTNmZDdlMDhhY2I2ZmY1NjIzMzNjNTA0IE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBSZW5hdGEgSG9kb3ZhbiA8cmVuaUB3ZWJraXQub3JnPgpEYXRl
OiBUaHUsIDE1IFNlcCAyMDExIDIwOjI5OjM3ICswMjAwClN1YmplY3Q6IFtQQVRDSF0ga3JpdCZu
aWtvJmFuZHkKCi0tLQogTGF5b3V0VGVzdHMvQ2hhbmdlTG9nICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgfCAgIDE1ICsKIC4uLi9wb2ludGVyLWV2ZW50cy1vbi1yb3VuZGVkLXJlY3QtZXhw
ZWN0ZWQudHh0ICAgIHwgICAgMSArCiAuLi4vcG9pbnRlci1ldmVudHMtb24tc3ZnLXdpdGgtcG9p
bnRlci54aHRtbCAgICAgICB8ICAgMTIgKy0KIC4uLmVudHMtd2l0aC1saW5lY2Fwcy1hbmQtbWl0
ZXJsaW1pdHMtZXhwZWN0ZWQudHh0IHwgICAgMSArCiAuLi5udGVyLWV2ZW50cy13aXRoLWxpbmVj
YXBzLWFuZC1taXRlcmxpbWl0cy54aHRtbCB8ICAgNjggKysrCiBTb3VyY2UvV2ViQ29yZS9DTWFr
ZUxpc3RzLnR4dCAgICAgICAgICAgICAgICAgICAgICB8ICAgIDIgKwogU291cmNlL1dlYkNvcmUv
Q2hhbmdlTG9nICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgMTU3ICsrKysrKysKIFNvdXJj
ZS9XZWJDb3JlL0dOVW1ha2VmaWxlLmxpc3QuYW0gICAgICAgICAgICAgICAgIHwgICAgNCArCiBT
b3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkgICAgICAgICAgICAgICAgICAgICAgICB8ICAgIDQg
KwogU291cmNlL1dlYkNvcmUvV2ViQ29yZS5wcm8gICAgICAgICAgICAgICAgICAgICAgICAgfCAg
ICA0ICsKIFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUudmNwcm9qL1dlYkNvcmUudmNwcm9qICAgICAg
IHwgIDExMiArKysrKwogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRmxvYXRSZWN0
LmNwcCAgICAgfCAgICA3ICsKIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0Zsb2F0
UmVjdC5oICAgICAgIHwgICAgNyArLQogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck9i
amVjdC5oICAgICAgICAgICAgfCAgICAyICsKIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJUcmVlQXNUZXh0LmNwcCAgICAgIHwgICAgNCArLQogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L3N2Zy9SZW5kZXJTVkdBbGxJbk9uZS5jcHAgfCAgICAyICsKIC4uLi9XZWJDb3JlL3JlbmRlcmlu
Zy9zdmcvUmVuZGVyU1ZHTW9kZWxPYmplY3QuY3BwIHwgICAgMiArLQogU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdQYXRoLmNwcCAgICAgfCAgMzU1ICstLS0tLS0tLS0tLS0t
LS0tCiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1BhdGguaCAgICAgICB8
ICAgNzQgKy0tLQogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZWN0LmNw
cCAgICAgfCAgMTE2ICsrKysrKwogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJT
VkdSZWN0LmggICAgICAgfCAgIDYzICsrKwogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9S
ZW5kZXJTVkdSZXNvdXJjZS5oICAgfCAgICAzICstCiAuLi4vcmVuZGVyaW5nL3N2Zy9SZW5kZXJT
VkdSZXNvdXJjZUNsaXBwZXIuY3BwICAgICB8ICAgIDYgKy0KIC4uLi9yZW5kZXJpbmcvc3ZnL1Jl
bmRlclNWR1Jlc291cmNlQ29udGFpbmVyLmNwcCAgIHwgICAgMiArLQogLi4uL3JlbmRlcmluZy9z
dmcvUmVuZGVyU1ZHUmVzb3VyY2VGaWx0ZXIuY3BwICAgICAgfCAgICA1ICstCiAuLi4vcmVuZGVy
aW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJjZUZpbHRlci5oICAgICAgICB8ICAgIDIgKy0KIC4uLi9y
ZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291cmNlR3JhZGllbnQuY3BwICAgIHwgICAyMSArLQog
Li4uL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VHcmFkaWVudC5oICAgICAgfCAgICAy
ICstCiAuLi4vcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJjZVBhdHRlcm4uY3BwICAgICB8
ICAgMTQgKy0KIC4uLi9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291cmNlUGF0dGVybi5oICAg
ICAgIHwgICAgMiArLQogLi4uL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VTb2xpZENv
bG9yLmNwcCAgfCAgIDE1ICstCiAuLi4vcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJjZVNv
bGlkQ29sb3IuaCAgICB8ICAgIDIgKy0KIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVu
ZGVyU1ZHU2hhcGUuY3BwICAgIHwgIDQzMiArKysrKysrKysrKysrKysrKysrKwogU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdTaGFwZS5oICAgICAgfCAgMTYwICsrKysrKysr
CiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR0lubGluZVRleHRCb3guY3BwICB8ICAg
IDQgKy0KIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHUmVuZGVyU3VwcG9ydC5jcHAg
IHwgICAgOCArLQogLi4uL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdSZW5kZXJUcmVlQXNUZXh0
LmNwcCAgfCAgIDMxICstCiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR1JlbmRlclRy
ZWVBc1RleHQuaCB8ICAgIDQgKy0KIC4uLi9yZW5kZXJpbmcvc3ZnL1NWR1RleHRSdW5SZW5kZXJp
bmdDb250ZXh0LmNwcCAgIHwgICAgNCArLQogU291cmNlL1dlYkNvcmUvc3ZnL1NWR0NpcmNsZUVs
ZW1lbnQuY3BwICAgICAgICAgICAgfCAgICAyICstCiBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRWxs
aXBzZUVsZW1lbnQuY3BwICAgICAgICAgICB8ICAgIDIgKy0KIFNvdXJjZS9XZWJDb3JlL3N2Zy9T
VkdMaW5lRWxlbWVudC5jcHAgICAgICAgICAgICAgIHwgICAgMiArLQogU291cmNlL1dlYkNvcmUv
c3ZnL1NWR1BhdGhFbGVtZW50LmNwcCAgICAgICAgICAgICAgfCAgIDEwICstCiBTb3VyY2UvV2Vi
Q29yZS9zdmcvU1ZHUGF0aEVsZW1lbnQuaCAgICAgICAgICAgICAgICB8ICAgIDIgKwogU291cmNl
L1dlYkNvcmUvc3ZnL1NWR1BvbHlFbGVtZW50LmNwcCAgICAgICAgICAgICAgfCAgICAyICstCiBT
b3VyY2UvV2ViQ29yZS9zdmcvU1ZHUmVjdEVsZW1lbnQuY3BwICAgICAgICAgICAgICB8ICAgMTIg
Ky0KIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdSZWN0RWxlbWVudC5oICAgICAgICAgICAgICAgIHwg
ICAgMiArCiA0NyBmaWxlcyBjaGFuZ2VkLCAxMjg3IGluc2VydGlvbnMoKyksIDQ3NiBkZWxldGlv
bnMoLSkKIGNyZWF0ZSBtb2RlIDEwMDY0NCBMYXlvdXRUZXN0cy9zdmcvY3VzdG9tL3BvaW50ZXIt
ZXZlbnRzLW9uLXJvdW5kZWQtcmVjdC1leHBlY3RlZC50eHQKIGNyZWF0ZSBtb2RlIDEwMDY0NCBM
YXlvdXRUZXN0cy9zdmcvY3VzdG9tL3BvaW50ZXItZXZlbnRzLXdpdGgtbGluZWNhcHMtYW5kLW1p
dGVybGltaXRzLWV4cGVjdGVkLnR4dAogY3JlYXRlIG1vZGUgMTAwNjQ0IExheW91dFRlc3RzL3N2
Zy9jdXN0b20vcG9pbnRlci1ldmVudHMtd2l0aC1saW5lY2Fwcy1hbmQtbWl0ZXJsaW1pdHMueGh0
bWwKIGNyZWF0ZSBtb2RlIDEwMDY0NCBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRl
clNWR1JlY3QuY3BwCiBjcmVhdGUgbW9kZSAxMDA2NDQgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L3N2Zy9SZW5kZXJTVkdSZWN0LmgKIGNyZWF0ZSBtb2RlIDEwMDY0NCBTb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1NoYXBlLmNwcAogY3JlYXRlIG1vZGUgMTAwNjQ0IFNvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHU2hhcGUuaAoKZGlmZiAtLWdpdCBhL0xh
eW91dFRlc3RzL0NoYW5nZUxvZyBiL0xheW91dFRlc3RzL0NoYW5nZUxvZwppbmRleCA5YjQ3MDEz
Li40ZDZkMmI3IDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKKysrIGIvTGF5b3V0
VGVzdHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTggQEAKKzIwMTEtMDktMTUgIFJlbmF0YSBIb2Rv
dmFuICA8cmVuaUB3ZWJraXQub3JnPgorCisgICAgICAgIEFkZCBuZXcgcmVuZGVyZXIgZm9yIFNW
R1JlY3RFbGVtZW50LgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9NjU3NjkKKworICAgICAgICBBZGQgbmV3IHRlc3RzIHRvIGNoZWNrIHRoZSBuZXcgc2hh
cGUgYmFzZWQgcmVuZGVyaW5nIG1lY2hhbmlzbSBvZiBTVkdSZWN0RWxlbWVudC4KKworICAgICAg
ICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIHN2Zy9jdXN0b20vcG9p
bnRlci1ldmVudHMtb24tcm91bmRlZC1yZWN0LWV4cGVjdGVkLnR4dDogQWRkZWQuCisgICAgICAg
ICogc3ZnL2N1c3RvbS9wb2ludGVyLWV2ZW50cy1vbi1yb3VuZGVkLXJlY3Quc3ZnOiBBZGRlZC4K
KyAgICAgICAgKiBzdmcvY3VzdG9tL3BvaW50ZXItZXZlbnRzLW9uLXN2Zy13aXRoLXBvaW50ZXIu
eGh0bWw6CisgICAgICAgICogc3ZnL2N1c3RvbS9wb2ludGVyLWV2ZW50cy13aXRoLWxpbmVjYXBz
LWFuZC1taXRlcmxpbWl0cy1leHBlY3RlZC50eHQ6IEFkZGVkLgorICAgICAgICAqIHN2Zy9jdXN0
b20vcG9pbnRlci1ldmVudHMtd2l0aC1saW5lY2Fwcy1hbmQtbWl0ZXJsaW1pdHMuc3ZnOiBBZGRl
ZC4KKwogMjAxMS0wOS0wOCAgT2xpdmVyIFZhcmdhICA8dm9saXZlckBpbmYudS1zemVnZWQuaHU+
CiAKICAgICAgICAgR2FyZGVuaW5nOiBhZGQgbWlzc2luZyByZXN1bHQgYWZ0ZXI6IHI5NDcxMC4K
ZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3N2Zy9jdXN0b20vcG9pbnRlci1ldmVudHMtb24tcm91
bmRlZC1yZWN0LWV4cGVjdGVkLnR4dCBiL0xheW91dFRlc3RzL3N2Zy9jdXN0b20vcG9pbnRlci1l
dmVudHMtb24tcm91bmRlZC1yZWN0LWV4cGVjdGVkLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwMDAwMDAwLi42MTViYWUwCi0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvc3Zn
L2N1c3RvbS9wb2ludGVyLWV2ZW50cy1vbi1yb3VuZGVkLXJlY3QtZXhwZWN0ZWQudHh0CkBAIC0w
LDAgKzEgQEAKK1BBU1NFRDogZmFsbGJhY2tSZWN0IGhhZCBwb2ludGVyCmRpZmYgLS1naXQgYS9M
YXlvdXRUZXN0cy9zdmcvY3VzdG9tL3BvaW50ZXItZXZlbnRzLW9uLXN2Zy13aXRoLXBvaW50ZXIu
eGh0bWwgYi9MYXlvdXRUZXN0cy9zdmcvY3VzdG9tL3BvaW50ZXItZXZlbnRzLW9uLXN2Zy13aXRo
LXBvaW50ZXIueGh0bWwKaW5kZXggYmQ2ZGJhNC4uMDE2Mzg4MSAxMDA2NDQKLS0tIGEvTGF5b3V0
VGVzdHMvc3ZnL2N1c3RvbS9wb2ludGVyLWV2ZW50cy1vbi1zdmctd2l0aC1wb2ludGVyLnhodG1s
CisrKyBiL0xheW91dFRlc3RzL3N2Zy9jdXN0b20vcG9pbnRlci1ldmVudHMtb24tc3ZnLXdpdGgt
cG9pbnRlci54aHRtbApAQCAtMyw3ICszLDE3IEBACiA8cD48L3A+CiA8ZGl2IHN0eWxlPSJwb3Np
dGlvbjphYnNvbHV0ZTsgdG9wOjUwcHg7IGxlZnQ6MHB4OyB3aWR0aDoxMDBweDsgaGVpZ2h0OjEw
MHB4OyBiYWNrZ3JvdW5kLWNvbG9yOmJsdWU7Ij48L2Rpdj4KIDxzdmcgeG1sbnM9Imh0dHA6Ly93
d3cudzMub3JnLzIwMDAvc3ZnIiBzdHlsZT0icG9zaXRpb246YWJzb2x1dGU7IHRvcDo1MHB4OyBs
ZWZ0OjBweDsgd2lkdGg6MTAwcHg7IGhlaWdodDoxMDBweDsiPgotICAgIDxyZWN0IHdpZHRoPSIx
MDAiIGhlaWdodD0iMTAwIiBmaWxsPSJncmVlbiIgcG9pbnRlci1ldmVudHM9Im5vbmUiLz4KKzxk
ZWZzPgorCis8c3R5bGUgdHlwZT0idGV4dC9jc3MiPjwhW0NEQVRBWworCityZWN0OmhvdmVyIHsK
KwlzdHJva2U6IGdyZWVuOworfSAKK11dPjwvc3R5bGU+Cis8L2RlZnM+CisKKyAgICA8cmVjdCB3
aWR0aD0iMTAwIiBoZWlnaHQ9IjEwMCIgZmlsbD0ibm9uZSIgc3Ryb2tlLXdpZHRoPSIyMCIgc3Ry
b2tlPSJyZWQiLz4KIDwvc3ZnPgogPHNjcmlwdD4KICAgICB2YXIgc3ZnID0gZG9jdW1lbnQuZ2V0
RWxlbWVudHNCeVRhZ05hbWUoInN2ZyIpWzBdOwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvc3Zn
L2N1c3RvbS9wb2ludGVyLWV2ZW50cy13aXRoLWxpbmVjYXBzLWFuZC1taXRlcmxpbWl0cy1leHBl
Y3RlZC50eHQgYi9MYXlvdXRUZXN0cy9zdmcvY3VzdG9tL3BvaW50ZXItZXZlbnRzLXdpdGgtbGlu
ZWNhcHMtYW5kLW1pdGVybGltaXRzLWV4cGVjdGVkLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwMDAwMDAwLi42MTViYWUwCi0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvc3Zn
L2N1c3RvbS9wb2ludGVyLWV2ZW50cy13aXRoLWxpbmVjYXBzLWFuZC1taXRlcmxpbWl0cy1leHBl
Y3RlZC50eHQKQEAgLTAsMCArMSBAQAorUEFTU0VEOiBmYWxsYmFja1JlY3QgaGFkIHBvaW50ZXIK
ZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3N2Zy9jdXN0b20vcG9pbnRlci1ldmVudHMtd2l0aC1s
aW5lY2Fwcy1hbmQtbWl0ZXJsaW1pdHMueGh0bWwgYi9MYXlvdXRUZXN0cy9zdmcvY3VzdG9tL3Bv
aW50ZXItZXZlbnRzLXdpdGgtbGluZWNhcHMtYW5kLW1pdGVybGltaXRzLnhodG1sCm5ldyBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBmMWE3MzYKLS0tIC9kZXYvbnVsbAorKysgYi9M
YXlvdXRUZXN0cy9zdmcvY3VzdG9tL3BvaW50ZXItZXZlbnRzLXdpdGgtbGluZWNhcHMtYW5kLW1p
dGVybGltaXRzLnhodG1sCkBAIC0wLDAgKzEsNjggQEAKKzxodG1sIHhtbG5zPSdodHRwOi8vd3d3
LnczLm9yZy8xOTk5L3hodG1sJz4KKzxib2R5IHN0eWxlPSJtYXJnaW46IDBweDsgcGFkZGluZzog
MHB4Ij4KKworPHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHN0eWxlPSJw
b3NpdGlvbjphYnNvbHV0ZTsiPgorPGRlZnM+CisKKzxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+PCFb
Q0RBVEFbCityZWN0I3N0cm9rZWRSZWN0IHsKKwlmaWxsOiBub25lOworCXN0cm9rZTogYmx1ZTsK
KwlzdHJva2Utd2lkdGg6IDIwcHg7CisJc3Ryb2tlLWxpbmVjYXA6IHNxdWFyZTsKKwlzdHJva2Ut
bWl0ZXJsaW1pdDogMTsKK30KK3JlY3Qjc3Ryb2tlZFJlY3Q6aG92ZXIgeworCXN0cm9rZTogcmVk
OworfQorXV0+PC9zdHlsZT4KKzwvZGVmcz4KKworPHJlY3QgaWQ9ImZhbGxiYWNrIiB4PSIwIiB5
PSIwIiB3aWR0aD0iMjEwIiBoZWlnaHQ9IjIxMCIgZmlsbD0iZ3JlZW4iIG9uY2xpY2s9InBhc3Nl
ZCgpIi8+Cis8cmVjdCBpZD0ic3Ryb2tlZFJlY3QiIHg9IjEwIiB5PSIxMCIgd2lkdGg9IjE5MCIg
aGVpZ2h0PSIxOTAiIHBvaW50ZXItZXZlbnRzPSJ2aXNpYmxlU3Ryb2tlIiBvbmNsaWNrPSJmYWls
ZWQoKSIvPiAKKzx0ZXh0IGlkPSJ0ZXh0IiB4PSIxMCIgeT0iMjMwIj5hZHNmPC90ZXh0PgorCis8
c2NyaXB0IHR5cGU9InRleHQvZWNtYXNjcmlwdCI+CisgICAgPCFbQ0RBVEFbCisKK3ZhciBmYWxs
YmFjayA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJmYWxsYmFjayIpOwordmFyIHN0cm9rZWRS
ZWN0ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoInN0cm9rZWRSZWN0Iik7Cit2YXIgdGV4dCA9
IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJ0ZXh0Iik7CisKK2ZhbGxiYWNrLmFkZEV2ZW50TGlz
dGVuZXIoIm1vdXNlZG93biIsIHBhc3NlZCwgZmFsc2UpOworc3Ryb2tlZFJlY3QuYWRkRXZlbnRM
aXN0ZW5lcigibW91c2Vkb3duIiwgZmFpbGVkLCBmYWxzZSk7CisKK2Z1bmN0aW9uIHN0b3AoKSB7
CisgICAgZmFsbGJhY2sucmVtb3ZlRXZlbnRMaXN0ZW5lcigibW91c2Vkb3duIiwgZmFpbGVkLCBm
YWxzZSk7CisgICAgc3Ryb2tlZFJlY3QucmVtb3ZlRXZlbnRMaXN0ZW5lcigibW91c2Vkb3duIiwg
cGFzc2VkLCBmYWxzZSk7CisKKyAgICBpZiAod2luZG93LmxheW91dFRlc3RDb250cm9sbGVyKQor
ICAgICAgICBsYXlvdXRUZXN0Q29udHJvbGxlci5ub3RpZnlEb25lKCk7Cit9CisKK2Z1bmN0aW9u
IGZhaWxlZCgpIHsKKyAgICB0ZXh0LnRleHRDb250ZW50ID0gJ0ZBSUxFRDogc3Ryb2tlUmVjdCBo
YWQgcG9pbnRlcic7CisgICAgc3RvcCgpOworfQorCitmdW5jdGlvbiBwYXNzZWQoKSB7CisgICAg
dGV4dC50ZXh0Q29udGVudCA9ICdQQVNTRUQ6IGZhbGxiYWNrUmVjdCBoYWQgcG9pbnRlcic7Cisg
ICAgc3RvcCgpOworfQorCitpZiAod2luZG93LmxheW91dFRlc3RDb250cm9sbGVyKSB7CisgICAg
bGF5b3V0VGVzdENvbnRyb2xsZXIud2FpdFVudGlsRG9uZSgpOworICAgIGxheW91dFRlc3RDb250
cm9sbGVyLmR1bXBBc1RleHQoKTsKK30KKworaWYgKHdpbmRvdy5ldmVudFNlbmRlcikgeworICAg
IGV2ZW50U2VuZGVyLm1vdXNlTW92ZVRvKDEsIDEpOworICAgIGV2ZW50U2VuZGVyLm1vdXNlRG93
bigpOworfQorCitdXT4KKyAgPC9zY3JpcHQ+Cis8L3N2Zz4KKworPC9ib2R5PgorPC9odG1sPgpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvQ01ha2VMaXN0cy50eHQgYi9Tb3VyY2UvV2ViQ29y
ZS9DTWFrZUxpc3RzLnR4dAppbmRleCA3YTUyMDU3Li5iY2NiZTAyIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9DTWFrZUxpc3RzLnR4dAorKysgYi9Tb3VyY2UvV2ViQ29yZS9DTWFrZUxpc3Rz
LnR4dApAQCAtMTU5Nyw2ICsxNTk3LDcgQEAgSUYgKEVOQUJMRV9TVkcpCiAgICAgICAgIHJlbmRl
cmluZy9zdmcvUmVuZGVyU1ZHSW5saW5lVGV4dC5jcHAKICAgICAgICAgcmVuZGVyaW5nL3N2Zy9S
ZW5kZXJTVkdNb2RlbE9iamVjdC5jcHAKICAgICAgICAgcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdQ
YXRoLmNwcAorICAgICAgICByZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1JlY3QuY3BwCiAgICAgICAg
IHJlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2UuY3BwCiAgICAgICAgIHJlbmRlcmluZy9z
dmcvUmVuZGVyU1ZHUmVzb3VyY2VDbGlwcGVyLmNwcAogICAgICAgICByZW5kZXJpbmcvc3ZnL1Jl
bmRlclNWR1Jlc291cmNlQ29udGFpbmVyLmNwcApAQCAtMTYxMSw2ICsxNjEyLDcgQEAgSUYgKEVO
QUJMRV9TVkcpCiAgICAgICAgIHJlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VTb2xpZENv
bG9yLmNwcAogICAgICAgICByZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jvb3QuY3BwCiAgICAgICAg
IHJlbmRlcmluZy9zdmcvUmVuZGVyU1ZHU2hhZG93VHJlZVJvb3RDb250YWluZXIuY3BwCisgICAg
ICAgIHJlbmRlcmluZy9zdmcvUmVuZGVyU1ZHU2hhcGUuY3BwCiAgICAgICAgIHJlbmRlcmluZy9z
dmcvUmVuZGVyU1ZHVFNwYW4uY3BwCiAgICAgICAgIHJlbmRlcmluZy9zdmcvUmVuZGVyU1ZHVGV4
dC5jcHAKICAgICAgICAgcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdUZXh0UGF0aC5jcHAKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxv
ZwppbmRleCAwNTA4NTk5Li42OGQ3NDRjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9DaGFu
Z2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTYwIEBACisy
MDExLTA5LTE1ICBSZW5hdGEgSG9kb3ZhbiAgPHJlbmlAd2Via2l0Lm9yZz4KKworICAgICAgICBB
ZGQgbmV3IHJlbmRlcmVyIGZvciBTVkdSZWN0RWxlbWVudC4KKyAgICAgICAgaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTY1NzY5CisKKyAgICAgICAgVGhpcyBwYXRjaCBp
bnRyb2R1Y2VzIGEgbmV3IGNvbW1vbiBiYXNlIGNsYXNzIGNhbGxlZCBSZW5kZXJTVkdTaGFwZSB3
aGljaAorICAgICAgICByZXBsYWNlcyB0aGUgUmVuZGVyU1ZHUGF0aC4gVGhpcyBuZXcgYmFzZSBj
bGFzcyBoYXMgdGhlIHNhbWUgcHVycG9zZQorICAgICAgICBhcyB0aGUgcmVwbGFjZWQgY2xhc3Mg
YW5kIGhhcyBzcGVjaWFsaXplZCBkZXNjZW5kYW50cyBmb3IgY29tbW9uCisgICAgICAgIHNoYXBl
cyAobGlrZSBSZWN0YW5nbGVzIGFuZCBDaXJjbGVzKSwgd2hpY2ggYWxsb3dzIGZhc3RlciBwYWlu
dGluZworICAgICAgICBvZiB0aGVzZSBzaGFwZXMgd2hlbiBjZXJ0YWluIGNvbmRpdGlvbnMgYXJl
IGZ1bGZpbGxlZC4gT24gc29tZQorICAgICAgICBiZW5jaG1hcmsgcHJvZ3JhbXMgd2UgaGF2ZSBz
ZWVuIDUlIHNwZWVkdXAuCisKKyAgICAgICAgVGhlIGJpZ2dlc3QgbW90aXZhdGlvbiBvZiB0aGlz
IHJlZmFjdG9yIGlzIHRha2luZyBhZHZhbnRhZ2UKKyAgICAgICAgb2YgZmFzdGVyIHByaW1pdGl2
ZSBkcmF3aW5nIGluIHRoZSBtb3N0IGNvbW1vbiBhbmQgZnJlcXVlbnQKKyAgICAgICAgY2FzZXMu
IEhvd2V2ZXIgaW4gc29tZSByYXJlIGNhc2VzLCBsaWtlIHBhaW50aW5nIHJvdW5kZWQKKyAgICAg
ICAgcmVjdHMsIHdlIG5lZWQgdG8gZmFsbGJhY2sgdG8gdGhlIG9yaWdpbmFsIGNvZGUgcGF0aCwg
d2hpY2gKKyAgICAgICAgaXMgZnVsbHkga2VwdCBpbiB0aGUgUmVuZGVyU1ZHU2hhcGUgYmFzZSBj
bGFzcy4gU29tZSBvdGhlcgorICAgICAgICBjYXNlcywgbGlrZSBkYXNoZWQgc3Ryb2tlcywgY2Fu
IGJlIHBhaW50ZWQgYnV0IG1vdXNlIHBvaW50ZXIKKyAgICAgICAgZXZlbnRzIGNhbm5vdCBiZSBo
YW5kbGVkIGJ5IHRoZSBkZXNjZW5kYW50IGNsYXNzZXMuIEEgZGlmZmVyZW50CisgICAgICAgIGZh
bGxiYWNrIG1lY2hhbmlzbSBpcyB1c2VkIGluIHN1Y2ggY2FzZXMgd2hpY2ggcmVkaXJlY3RzCisg
ICAgICAgIG9ubHkgdGhlIHBvaW50ZXIgZXZlbnQgaGFuZGxpbmcgdG8gdGhlIGJhc2UgY2xhc3Mu
CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVGVzdHM6
IHN2Zy9jdXN0b20vcG9pbnRlci1ldmVudHMtb24tcm91bmRlZC1yZWN0LnN2ZworICAgICAgICAg
ICAgICAgc3ZnL2N1c3RvbS9wb2ludGVyLWV2ZW50cy13aXRoLWxpbmVjYXBzLWFuZC1taXRlcmxp
bWl0cy5zdmcKKworICAgICAgICAqIENNYWtlTGlzdHMudHh0OgorICAgICAgICAqIEdOVW1ha2Vm
aWxlLmxpc3QuYW06CisgICAgICAgICogV2ViQ29yZS5neXBpOgorICAgICAgICAqIFdlYkNvcmUu
cHJvOgorICAgICAgICAqIFdlYkNvcmUudmNwcm9qL1dlYkNvcmUudmNwcm9qOgorICAgICAgICAq
IHBsYXRmb3JtL2dyYXBoaWNzL0Zsb2F0UmVjdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGbG9h
dFJlY3Q6OmNvbnRhaW5zKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9GbG9hdFJlY3Qu
aDoKKyAgICAgICAgKFdlYkNvcmU6OkZsb2F0UmVjdDo6Y29udGFpbnMpOgorICAgICAgICAqIHJl
bmRlcmluZy9SZW5kZXJPYmplY3QuaDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlck9iamVjdDo6
aXNTVkdSZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlck9iamVjdDo6aXNTVkdTaGFwZSk6
CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlclRyZWVBc1RleHQuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6d3JpdGUpOgorICAgICAgICAqIHJlbmRlcmluZy9zdmcvUmVuZGVyU1ZHQWxsSW5PbmUu
Y3BwOgorICAgICAgICAqIHJlbmRlcmluZy9zdmcvUmVuZGVyU1ZHTW9kZWxPYmplY3QuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6aXNHcmFwaGljc0VsZW1lbnQpOgorICAgICAgICAqIHJlbmRlcmlu
Zy9zdmcvUmVuZGVyU1ZHUGF0aC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJTVkdQYXRo
OjpSZW5kZXJTVkdQYXRoKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclNWR1BhdGg6OmluZmxh
dGVXaXRoTWFya2VyQm91bmRzKTpVbml0ZSB0aGUgbWFya2VyQm91bmRzIHdpdGggc3Ryb2tlQm91
bmRpbmdCb3guCisgICAgICAgICogcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdQYXRoLmg6CisgICAg
ICAgICogcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZWN0LmNwcDogQWRkZWQuCisgICAgICAgIChX
ZWJDb3JlOjpSZW5kZXJTVkdSZWN0OjpSZW5kZXJTVkdSZWN0KToKKyAgICAgICAgKFdlYkNvcmU6
OlJlbmRlclNWR1JlY3Q6On5SZW5kZXJTVkdSZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRl
clNWR1JlY3Q6OmNyZWF0ZVNoYXBlKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclNWR1JlY3Q6
Om9iamVjdEJvdW5kaW5nQm94KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclNWR1JlY3Q6OnN0
cm9rZUJvdW5kaW5nQm94KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclNWR1JlY3Q6OmZpbGxT
aGFwZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJTVkdSZWN0OjpzdHJva2VTaGFwZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpSZW5kZXJTVkdSZWN0OjpzaGFwZURlcGVuZGVudFN0cm9rZUNvbnRh
aW5zKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclNWR1JlY3Q6OnNoYXBlRGVwZW5kZW50Rmls
bENvbnRhaW5zKToKKyAgICAgICAgKiByZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1JlY3QuaDogQWRk
ZWQuCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJTVkdSZWN0Ojppc1NWR1JlY3QpOgorICAgICAg
ICAoV2ViQ29yZTo6UmVuZGVyU1ZHUmVjdDo6cmVuZGVyTmFtZSk6CisgICAgICAgIChXZWJDb3Jl
OjpSZW5kZXJTVkdSZWN0Ojppc0VtcHR5KToKKyAgICAgICAgKiByZW5kZXJpbmcvc3ZnL1JlbmRl
clNWR1Jlc291cmNlLmg6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJTVkdSZXNvdXJjZTo6cG9z
dEFwcGx5UmVzb3VyY2UpOkEgbmV3IHNoYXBlIGFyZ3VtZW50IHdhcyBhZGRlZCB0byBhbGxvdyBz
aGFwZSBzcGVjaWZpYyBmYXN0ZXIgcGFpbnRpbmcuCisgICAgICAgICogcmVuZGVyaW5nL3N2Zy9S
ZW5kZXJTVkdSZXNvdXJjZUNsaXBwZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU1ZH
UmVzb3VyY2VDbGlwcGVyOjpkcmF3Q29udGVudEludG9NYXNrSW1hZ2UpOgorICAgICAgICAoV2Vi
Q29yZTo6UmVuZGVyU1ZHUmVzb3VyY2VDbGlwcGVyOjpjYWxjdWxhdGVDbGlwQ29udGVudFJlcGFp
bnRSZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclNWR1Jlc291cmNlQ2xpcHBlcjo6aGl0
VGVzdENsaXBDb250ZW50KToKKyAgICAgICAgKiByZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291
cmNlQ29udGFpbmVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclNWR1Jlc291cmNlQ29u
dGFpbmVyOjp0cmFuc2Zvcm1Pbk5vblNjYWxpbmdTdHJva2UpOgorICAgICAgICAqIHJlbmRlcmlu
Zy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VGaWx0ZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVu
ZGVyU1ZHUmVzb3VyY2VGaWx0ZXI6OnBvc3RBcHBseVJlc291cmNlKToKKyAgICAgICAgKiByZW5k
ZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291cmNlRmlsdGVyLmg6CisgICAgICAgICogcmVuZGVyaW5n
L3N2Zy9SZW5kZXJTVkdSZXNvdXJjZUdyYWRpZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJl
bmRlclNWR1Jlc291cmNlR3JhZGllbnQ6OmFwcGx5UmVzb3VyY2UpOgorICAgICAgICAqIHJlbmRl
cmluZy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VHcmFkaWVudC5oOgorICAgICAgICAqIHJlbmRlcmlu
Zy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VQYXR0ZXJuLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJl
bmRlclNWR1Jlc291cmNlUGF0dGVybjo6cG9zdEFwcGx5UmVzb3VyY2UpOgorICAgICAgICAqIHJl
bmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VQYXR0ZXJuLmg6CisgICAgICAgICogcmVuZGVy
aW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJjZVNvbGlkQ29sb3IuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6UmVuZGVyU1ZHUmVzb3VyY2VTb2xpZENvbG9yOjpwb3N0QXBwbHlSZXNvdXJjZSk6CisgICAg
ICAgICogcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJjZVNvbGlkQ29sb3IuaDoKKyAgICAg
ICAgKiByZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1NoYXBlLmNwcDogQ29waWVkIGZyb20gU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdQYXRoLmNwcC4KKyAgICAgICAgKFdlYkNv
cmU6OlJlbmRlclNWR1NoYXBlOjpSZW5kZXJTVkdTaGFwZSk6CisgICAgICAgIChXZWJDb3JlOjpS
ZW5kZXJTVkdTaGFwZTo6flJlbmRlclNWR1NoYXBlKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRl
clNWR1NoYXBlOjpjcmVhdGVTaGFwZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJTVkdTaGFw
ZTo6aXNFbXB0eSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJTVkdTaGFwZTo6ZmlsbFNoYXBl
KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclNWR1NoYXBlOjpvYmplY3RCb3VuZGluZ0JveCk6
CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJTVkdTaGFwZTo6c3Ryb2tlQm91bmRpbmdCb3gpOgor
ICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU1ZHU2hhcGU6OnN0cm9rZVNoYXBlKToKKyAgICAgICAg
KFdlYkNvcmU6OlJlbmRlclNWR1NoYXBlOjpzaGFwZURlcGVuZGVudFN0cm9rZUNvbnRhaW5zKToK
KyAgICAgICAgVGhlIHB1cnBvc2Ugb2YgdGhpcyB2aXJ0dWFsIGZ1bmN0aW9uIGFsbG93cyBkZWNl
bmRhbnRzIHRvIHVzZSB0aGVpciBvd24gZmFzdCBjaGVja3MuCisgICAgICAgIChXZWJDb3JlOjpS
ZW5kZXJTVkdTaGFwZTo6c2hhcGVEZXBlbmRlbnRGaWxsQ29udGFpbnMpOgorICAgICAgICBUaGUg
cHVycG9zZSBvZiB0aGlzIHZpcnR1YWwgZnVuY3Rpb24gYWxsb3dzIGRlY2VuZGFudHMgdG8gdXNl
IHRoZWlyIG93biBmYXN0IGNoZWNrcy4KKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclNWR1NoYXBl
OjpmaWxsQ29udGFpbnMpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU1ZHU2hhcGU6OnN0cm9r
ZUNvbnRhaW5zKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclNWR1NoYXBlOjpsYXlvdXQpOgor
ICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU1ZHU2hhcGU6OnNob3VsZFN0cm9rZVplcm9MZW5ndGhT
dWJwYXRoKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclNWR1NoYXBlOjp6ZXJvTGVuZ3RoU3Vi
cGF0aFJlY3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU1ZHU2hhcGU6OnNldHVwU3F1YXJl
Q2FwUGF0aCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJTVkdTaGFwZTo6c2V0dXBOb25TY2Fs
aW5nU3Ryb2tlUGF0aCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJTVkdTaGFwZTo6ZmlsbEFu
ZFN0cm9rZVBhdGgpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU1ZHU2hhcGU6OnBhaW50KToK
KyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclNWR1NoYXBlOjphZGRGb2N1c1JpbmdSZWN0cyk6Cisg
ICAgICAgIChXZWJDb3JlOjpSZW5kZXJTVkdTaGFwZTo6bm9kZUF0RmxvYXRQb2ludCk6CisgICAg
ICAgIChXZWJDb3JlOjpSZW5kZXJTVkdTaGFwZTo6Y2FsY3VsYXRlTWFya2VyQm91bmRzSWZOZWVk
ZWQpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU1ZHU2hhcGU6OnVwZGF0ZUNhY2hlZEJvdW5k
YXJpZXMpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU1ZHU2hhcGU6OnN0cm9rZVdpZHRoKToK
KyAgICAgICAgKiByZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1NoYXBlLmg6IEFkZGVkLgorICAgICAg
ICAoV2ViQ29yZTo6Qm91bmRpbmdSZWN0U3Ryb2tlU3R5bGVBcHBsaWVyOjpCb3VuZGluZ1JlY3RT
dHJva2VTdHlsZUFwcGxpZXIpOgorICAgICAgICAoV2ViQ29yZTo6Qm91bmRpbmdSZWN0U3Ryb2tl
U3R5bGVBcHBsaWVyOjpzdHJva2VTdHlsZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJTVkdT
aGFwZTo6c2V0TmVlZHNTaGFwZVVwZGF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJTVkdT
aGFwZTo6c2V0TmVlZHNCb3VuZGFyaWVzVXBkYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRl
clNWR1NoYXBlOjpzZXROZWVkc1RyYW5zZm9ybVVwZGF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpS
ZW5kZXJTVkdTaGFwZTo6aXNQYWludGluZ0ZhbGxiYWNrKToKKyAgICAgICAgKFdlYkNvcmU6OlJl
bmRlclNWR1NoYXBlOjpwYXRoKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclNWR1NoYXBlOjpz
ZXRJc1BhaW50aW5nRmFsbGJhY2spOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU1ZHU2hhcGU6
OnNldFN0cm9rZUFuZE1hcmtlckJvdW5kaW5nQm94KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRl
clNWR1NoYXBlOjpoYXNQYXRoKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclNWR1NoYXBlOjpy
ZXBhaW50UmVjdEluTG9jYWxDb29yZGluYXRlcyk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJT
VkdTaGFwZTo6bG9jYWxUb1BhcmVudFRyYW5zZm9ybSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5k
ZXJTVkdTaGFwZTo6aXNTVkdTaGFwZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJTVkdTaGFw
ZTo6cmVuZGVyTmFtZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJTVkdTaGFwZTo6aXNSb3Vu
ZGVkUmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJTVkdTaGFwZTo6aW5mbGF0ZVdpdGhN
YXJrZXJCb3VuZHMpOgorICAgICAgICAoV2ViQ29yZTo6dG9SZW5kZXJTVkdTaGFwZSk6CisgICAg
ICAgICogcmVuZGVyaW5nL3N2Zy9TVkdJbmxpbmVUZXh0Qm94LmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OlNWR0lubGluZVRleHRCb3g6OnJlbGVhc2VQYWludGluZ1Jlc291cmNlKToKKyAgICAgICAg
KiByZW5kZXJpbmcvc3ZnL1NWR1JlbmRlclN1cHBvcnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
U1ZHUmVuZGVyU3VwcG9ydDo6ZmluaXNoUmVuZGVyU1ZHQ29udGVudCk6CisgICAgICAgIChXZWJD
b3JlOjpTVkdSZW5kZXJTdXBwb3J0OjpsYXlvdXRDaGlsZHJlbik6CisgICAgICAgICogcmVuZGVy
aW5nL3N2Zy9TVkdSZW5kZXJUcmVlQXNUZXh0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OndyaXRl
U3R5bGUpOgorICAgICAgICAoV2ViQ29yZTo6b3BlcmF0b3I8PCk6CisgICAgICAgIChXZWJDb3Jl
Ojp3cml0ZSk6CisgICAgICAgICogcmVuZGVyaW5nL3N2Zy9TVkdSZW5kZXJUcmVlQXNUZXh0Lmg6
CisgICAgICAgICogcmVuZGVyaW5nL3N2Zy9TVkdUZXh0UnVuUmVuZGVyaW5nQ29udGV4dC5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpTVkdUZXh0UnVuUmVuZGVyaW5nQ29udGV4dDo6ZHJhd1NWR0ds
eXBocyk6CisgICAgICAgICogc3ZnL1NWR0NpcmNsZUVsZW1lbnQuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6U1ZHQ2lyY2xlRWxlbWVudDo6c3ZnQXR0cmlidXRlQ2hhbmdlZCk6CisgICAgICAgICog
c3ZnL1NWR0VsbGlwc2VFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR0VsbGlwc2VF
bGVtZW50OjpzdmdBdHRyaWJ1dGVDaGFuZ2VkKToKKyAgICAgICAgKiBzdmcvU1ZHTGluZUVsZW1l
bnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U1ZHTGluZUVsZW1lbnQ6OnN2Z0F0dHJpYnV0ZUNo
YW5nZWQpOgorICAgICAgICAqIHN2Zy9TVkdQYXRoRWxlbWVudC5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpTVkdQYXRoRWxlbWVudDo6c3ZnQXR0cmlidXRlQ2hhbmdlZCk6CisgICAgICAgIChXZWJD
b3JlOjpTVkdQYXRoRWxlbWVudDo6cGF0aFNlZ0xpc3RDaGFuZ2VkKToKKyAgICAgICAgKFdlYkNv
cmU6OlNWR1BhdGhFbGVtZW50OjpjcmVhdGVSZW5kZXJlcik6CisgICAgICAgICogc3ZnL1NWR1Bh
dGhFbGVtZW50Lmg6CisgICAgICAgICogc3ZnL1NWR1BvbHlFbGVtZW50LmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OlNWR1BvbHlFbGVtZW50OjpzdmdBdHRyaWJ1dGVDaGFuZ2VkKToKKyAgICAgICAg
KiBzdmcvU1ZHUmVjdEVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U1ZHUmVjdEVsZW1l
bnQ6OnN2Z0F0dHJpYnV0ZUNoYW5nZWQpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHUmVjdEVsZW1l
bnQ6OmNyZWF0ZVJlbmRlcmVyKToKKyAgICAgICAgKiBzdmcvU1ZHUmVjdEVsZW1lbnQuaDoKKwog
MjAxMS0wOS0wNyAgQW5kcmV5IEtvc3lha292ICA8Y2FzZXFAY2hyb21pdW0ub3JnPgogCiAgICAg
ICAgIFdlYiBJbnNwZWN0b3I6IHRyeWluZyB0byBzY3JvbGwgbW91c2Ugd2hlZWwgd2hlbiBpbiBU
ZXh0Vmlld2VyJ3MgZ3V0dGVyIHBhbmUgY2F1c2VzIEV2ZW50RXhjZXB0aW9uOjpESVNQQVRDSF9S
RVFVRVNUX0VSUgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvR05VbWFrZWZpbGUubGlzdC5h
bSBiL1NvdXJjZS9XZWJDb3JlL0dOVW1ha2VmaWxlLmxpc3QuYW0KaW5kZXggMGVjMWE0ZC4uYzBk
NDk4OCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvR05VbWFrZWZpbGUubGlzdC5hbQorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9HTlVtYWtlZmlsZS5saXN0LmFtCkBAIC0zMjA2LDYgKzMyMDYsOCBA
QCB3ZWJjb3JlX3NvdXJjZXMgKz0gXAogCVNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVu
ZGVyU1ZHTW9kZWxPYmplY3QuaCBcCiAJU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5k
ZXJTVkdQYXRoLmNwcCBcCiAJU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdQ
YXRoLmggXAorCVNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVjdC5jcHAg
XAorCVNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVjdC5oIFwKIAlTb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291cmNlQ2xpcHBlci5jcHAgXAog
CVNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VDbGlwcGVyLmgg
XAogCVNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VDb250YWlu
ZXIuY3BwIFwKQEAgLTMyMzQsNiArMzIzNiw4IEBAIHdlYmNvcmVfc291cmNlcyArPSBcCiAJU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSb290LmggXAogCVNvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHU2hhZG93VHJlZVJvb3RDb250YWluZXIuY3BwIFwK
IAlTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1NoYWRvd1RyZWVSb290Q29u
dGFpbmVyLmggXAorCVNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHU2hhcGUu
Y3BwIFwKKwlTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1NoYXBlLmggXAog
CVNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHVFNwYW4uY3BwIFwKIAlTb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1RTcGFuLmggXAogCVNvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHVGV4dC5jcHAgXApkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvV2ViQ29yZS5neXBpIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBpCmluZGV4
IDAzOTg2NGIuLjFlMGE0NTkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lw
aQorKysgYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkKQEAgLTU4NTIsNiArNTg1Miw4IEBA
CiAgICAgICAgICAgICAncmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdNb2RlbE9iamVjdC5oJywKICAg
ICAgICAgICAgICdyZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1BhdGguY3BwJywKICAgICAgICAgICAg
ICdyZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1BhdGguaCcsCisgICAgICAgICAgICAncmVuZGVyaW5n
L3N2Zy9SZW5kZXJTVkdSZWN0LmNwcCcsCisgICAgICAgICAgICAncmVuZGVyaW5nL3N2Zy9SZW5k
ZXJTVkdSZWN0LmgnLAogICAgICAgICAgICAgJ3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVzb3Vy
Y2UuY3BwJywKICAgICAgICAgICAgICdyZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291cmNlLmgn
LAogICAgICAgICAgICAgJ3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VDbGlwcGVyLmNw
cCcsCkBAIC01ODgwLDYgKzU4ODIsOCBAQAogICAgICAgICAgICAgJ3JlbmRlcmluZy9zdmcvUmVu
ZGVyU1ZHUm9vdC5oJywKICAgICAgICAgICAgICdyZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1NoYWRv
d1RyZWVSb290Q29udGFpbmVyLmNwcCcsCiAgICAgICAgICAgICAncmVuZGVyaW5nL3N2Zy9SZW5k
ZXJTVkdTaGFkb3dUcmVlUm9vdENvbnRhaW5lci5oJywKKyAgICAgICAgICAgICdyZW5kZXJpbmcv
c3ZnL1JlbmRlclNWR1NoYXBlLmNwcCcsCisgICAgICAgICAgICAncmVuZGVyaW5nL3N2Zy9SZW5k
ZXJTVkdTaGFwZS5oJywKICAgICAgICAgICAgICdyZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1RTcGFu
LmNwcCcsCiAgICAgICAgICAgICAncmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdUU3Bhbi5oJywKICAg
ICAgICAgICAgICdyZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1RleHQuY3BwJywKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUucHJvIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5wcm8K
aW5kZXggMjJhODQ1ZC4uOTkyNTA3ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvV2ViQ29y
ZS5wcm8KKysrIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5wcm8KQEAgLTIyODIsNiArMjI4Miw3
IEBAIEhFQURFUlMgKz0gXAogICAgIHJlbmRlcmluZy9zdmcvUmVuZGVyU1ZHSW5saW5lVGV4dC5o
IFwKICAgICByZW5kZXJpbmcvc3ZnL1JlbmRlclNWR01vZGVsT2JqZWN0LmggXAogICAgIHJlbmRl
cmluZy9zdmcvUmVuZGVyU1ZHUGF0aC5oIFwKKyAgICByZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jl
Y3QuaCBcCiAgICAgcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJjZS5oIFwKICAgICByZW5k
ZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291cmNlQ2xpcHBlci5oIFwKICAgICByZW5kZXJpbmcvc3Zn
L1JlbmRlclNWR1Jlc291cmNlQ29udGFpbmVyLmggXApAQCAtMjI5Niw2ICsyMjk3LDcgQEAgSEVB
REVSUyArPSBcCiAgICAgcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJjZVNvbGlkQ29sb3Iu
aCBcCiAgICAgcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSb290LmggXAogICAgIHJlbmRlcmluZy9z
dmcvUmVuZGVyU1ZHU2hhZG93VHJlZVJvb3RDb250YWluZXIuaCBcCisgICAgcmVuZGVyaW5nL3N2
Zy9SZW5kZXJTVkdTaGFwZS5oIFwKICAgICByZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1RTcGFuLmgg
XAogICAgIHJlbmRlcmluZy9zdmcvUmVuZGVyU1ZHVGV4dC5oIFwKICAgICByZW5kZXJpbmcvc3Zn
L1JlbmRlclNWR1RleHRQYXRoLmggXApAQCAtMzMxMCw2ICszMzEyLDggQEAgY29udGFpbnMoREVG
SU5FUywgRU5BQkxFX1NWRz0xKSB7CiAgICAgICAgIHJlbmRlcmluZy9zdHlsZS9TVkdSZW5kZXJT
dHlsZURlZnMuY3BwIFwKICAgICAgICAgcmVuZGVyaW5nL1BvaW50ZXJFdmVudHNIaXRSdWxlcy5j
cHAgXAogICAgICAgICByZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1BhdGguY3BwIFwKKyAgICAgICAg
cmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZWN0LmNwcCBcCisgICAgICAgIHJlbmRlcmluZy9zdmcv
UmVuZGVyU1ZHU2hhcGUuY3BwIFwKICAgICAgICAgc3ZnL2FuaW1hdGlvbi9TTUlMVGltZS5jcHAg
XAogICAgICAgICBzdmcvYW5pbWF0aW9uL1NNSUxUaW1lQ29udGFpbmVyLmNwcCBcCiAgICAgICAg
IHN2Zy9hbmltYXRpb24vU1ZHU01JTEVsZW1lbnQuY3BwIFwKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL1dlYkNvcmUudmNwcm9qL1dlYkNvcmUudmNwcm9qIGIvU291cmNlL1dlYkNvcmUvV2Vi
Q29yZS52Y3Byb2ovV2ViQ29yZS52Y3Byb2oKaW5kZXggNmI2ODBiYS4uNTY3ODY5OCAxMDA3NTUK
LS0tIGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS52Y3Byb2ovV2ViQ29yZS52Y3Byb2oKKysrIGIv
U291cmNlL1dlYkNvcmUvV2ViQ29yZS52Y3Byb2ovV2ViQ29yZS52Y3Byb2oKQEAgLTQxNjQ3LDYg
KzQxNjQ3LDExOCBAQAogCQkJCQk+CiAJCQkJPC9GaWxlPgogCQkJCTxGaWxlCisJCQkJCVJlbGF0
aXZlUGF0aD0iLi5ccmVuZGVyaW5nXHN2Z1xSZW5kZXJTVkdSZWN0LmNwcCIKKwkJCQkJPgorCQkJ
CQk8RmlsZUNvbmZpZ3VyYXRpb24KKwkJCQkJCU5hbWU9IkRlYnVnfFdpbjMyIgorCQkJCQkJRXhj
bHVkZWRGcm9tQnVpbGQ9InRydWUiCisJCQkJCQk+CisJCQkJCQk8VG9vbAorCQkJCQkJCU5hbWU9
IlZDQ0xDb21waWxlclRvb2wiCisJCQkJCQkvPgorCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPgor
CQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24KKwkJCQkJCU5hbWU9IlJlbGVhc2V8V2luMzIiCisJCQkJ
CQlFeGNsdWRlZEZyb21CdWlsZD0idHJ1ZSIKKwkJCQkJCT4KKwkJCQkJCTxUb29sCisJCQkJCQkJ
TmFtZT0iVkNDTENvbXBpbGVyVG9vbCIKKwkJCQkJCS8+CisJCQkJCTwvRmlsZUNvbmZpZ3VyYXRp
b24+CisJCQkJCTxGaWxlQ29uZmlndXJhdGlvbgorCQkJCQkJTmFtZT0iRGVidWdfQ2Fpcm9fQ0ZM
aXRlfFdpbjMyIgorCQkJCQkJRXhjbHVkZWRGcm9tQnVpbGQ9InRydWUiCisJCQkJCQk+CisJCQkJ
CQk8VG9vbAorCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiCisJCQkJCQkvPgorCQkJCQk8
L0ZpbGVDb25maWd1cmF0aW9uPgorCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24KKwkJCQkJCU5hbWU9
IlJlbGVhc2VfQ2Fpcm9fQ0ZMaXRlfFdpbjMyIgorCQkJCQkJRXhjbHVkZWRGcm9tQnVpbGQ9InRy
dWUiCisJCQkJCQk+CisJCQkJCQk8VG9vbAorCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wi
CisJCQkJCQkvPgorCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPgorCQkJCQk8RmlsZUNvbmZpZ3Vy
YXRpb24KKwkJCQkJCU5hbWU9IkRlYnVnX0FsbHxXaW4zMiIKKwkJCQkJCUV4Y2x1ZGVkRnJvbUJ1
aWxkPSJ0cnVlIgorCQkJCQkJPgorCQkJCQkJPFRvb2wKKwkJCQkJCQlOYW1lPSJWQ0NMQ29tcGls
ZXJUb29sIgorCQkJCQkJLz4KKwkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4KKwkJCQkJPEZpbGVD
b25maWd1cmF0aW9uCisJCQkJCQlOYW1lPSJQcm9kdWN0aW9ufFdpbjMyIgorCQkJCQkJRXhjbHVk
ZWRGcm9tQnVpbGQ9InRydWUiCisJCQkJCQk+CisJCQkJCQk8VG9vbAorCQkJCQkJCU5hbWU9IlZD
Q0xDb21waWxlclRvb2wiCisJCQkJCQkvPgorCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPgorCQkJ
CTwvRmlsZT4KKwkJCQk8RmlsZQorCQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXHJlbmRlcmluZ1xzdmdc
UmVuZGVyU1ZHUmVjdC5oIgorCQkJCQk+CisJCQkJPC9GaWxlPgorCQkJCTxGaWxlCisJCQkJCVJl
bGF0aXZlUGF0aD0iLi5ccmVuZGVyaW5nXHN2Z1xSZW5kZXJTVkdTaGFwZS5jcHAiCisJCQkJCT4K
KwkJCQkJPEZpbGVDb25maWd1cmF0aW9uCisJCQkJCQlOYW1lPSJEZWJ1Z3xXaW4zMiIKKwkJCQkJ
CUV4Y2x1ZGVkRnJvbUJ1aWxkPSJ0cnVlIgorCQkJCQkJPgorCQkJCQkJPFRvb2wKKwkJCQkJCQlO
YW1lPSJWQ0NMQ29tcGlsZXJUb29sIgorCQkJCQkJLz4KKwkJCQkJPC9GaWxlQ29uZmlndXJhdGlv
bj4KKwkJCQkJPEZpbGVDb25maWd1cmF0aW9uCisJCQkJCQlOYW1lPSJSZWxlYXNlfFdpbjMyIgor
CQkJCQkJRXhjbHVkZWRGcm9tQnVpbGQ9InRydWUiCisJCQkJCQk+CisJCQkJCQk8VG9vbAorCQkJ
CQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiCisJCQkJCQkvPgorCQkJCQk8L0ZpbGVDb25maWd1
cmF0aW9uPgorCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24KKwkJCQkJCU5hbWU9IkRlYnVnX0NhaXJv
X0NGTGl0ZXxXaW4zMiIKKwkJCQkJCUV4Y2x1ZGVkRnJvbUJ1aWxkPSJ0cnVlIgorCQkJCQkJPgor
CQkJCQkJPFRvb2wKKwkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIgorCQkJCQkJLz4KKwkJ
CQkJPC9GaWxlQ29uZmlndXJhdGlvbj4KKwkJCQkJPEZpbGVDb25maWd1cmF0aW9uCisJCQkJCQlO
YW1lPSJSZWxlYXNlX0NhaXJvX0NGTGl0ZXxXaW4zMiIKKwkJCQkJCUV4Y2x1ZGVkRnJvbUJ1aWxk
PSJ0cnVlIgorCQkJCQkJPgorCQkJCQkJPFRvb2wKKwkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJU
b29sIgorCQkJCQkJLz4KKwkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4KKwkJCQkJPEZpbGVDb25m
aWd1cmF0aW9uCisJCQkJCQlOYW1lPSJEZWJ1Z19BbGx8V2luMzIiCisJCQkJCQlFeGNsdWRlZEZy
b21CdWlsZD0idHJ1ZSIKKwkJCQkJCT4KKwkJCQkJCTxUb29sCisJCQkJCQkJTmFtZT0iVkNDTENv
bXBpbGVyVG9vbCIKKwkJCQkJCS8+CisJCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+CisJCQkJCTxG
aWxlQ29uZmlndXJhdGlvbgorCQkJCQkJTmFtZT0iUHJvZHVjdGlvbnxXaW4zMiIKKwkJCQkJCUV4
Y2x1ZGVkRnJvbUJ1aWxkPSJ0cnVlIgorCQkJCQkJPgorCQkJCQkJPFRvb2wKKwkJCQkJCQlOYW1l
PSJWQ0NMQ29tcGlsZXJUb29sIgorCQkJCQkJLz4KKwkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4K
KwkJCQk8L0ZpbGU+CisJCQkJPEZpbGUKKwkJCQkJUmVsYXRpdmVQYXRoPSIuLlxyZW5kZXJpbmdc
c3ZnXFJlbmRlclNWR1NoYXBlLmgiCisJCQkJCT4KKwkJCQk8L0ZpbGU+CisJCQkJPEZpbGUKIAkJ
CQkJUmVsYXRpdmVQYXRoPSIuLlxyZW5kZXJpbmdcc3ZnXFJlbmRlclNWR1RleHQuY3BwIgogCQkJ
CQk+CiAJCQkJCTxGaWxlQ29uZmlndXJhdGlvbgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvRmxvYXRSZWN0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL0Zsb2F0UmVjdC5jcHAKaW5kZXggYjg0YTg5Mi4uZTk5ZTJkOSAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRmxvYXRSZWN0LmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9GbG9hdFJlY3QuY3BwCkBAIC02OCw2ICs2
OCwxMyBAQCBib29sIEZsb2F0UmVjdDo6Y29udGFpbnMoY29uc3QgRmxvYXRSZWN0JiBvdGhlcikg
Y29uc3QKICAgICAgICAgJiYgeSgpIDw9IG90aGVyLnkoKSAmJiBtYXhZKCkgPj0gb3RoZXIubWF4
WSgpOwogfQogCitib29sIEZsb2F0UmVjdDo6Y29udGFpbnMoY29uc3QgRmxvYXRQb2ludCYgcG9p
bnQsIENvbnRhaW5zTW9kZSBjb250YWluc01vZGUpIGNvbnN0Cit7CisgICAgaWYgKGNvbnRhaW5z
TW9kZSA9PSBDb250YWluc1JlY3QpCisgICAgICAgIHJldHVybiBjb250YWlucyhwb2ludC54KCks
IHBvaW50LnkoKSk7CisgICAgcmV0dXJuIHgoKSA8IHBvaW50LngoKSAmJiBtYXhYKCkgPiBwb2lu
dC54KCkgJiYgeSgpIDwgcG9pbnQueSgpICYmIG1heFkoKSA+IHkoKTsKK30KKwogdm9pZCBGbG9h
dFJlY3Q6OmludGVyc2VjdChjb25zdCBGbG9hdFJlY3QmIG90aGVyKQogewogICAgIGZsb2F0IGwg
PSBtYXgoeCgpLCBvdGhlci54KCkpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvRmxvYXRSZWN0LmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9GbG9hdFJlY3QuaAppbmRleCAyNGE2YjE5Li4wM2E0YTFmIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9GbG9hdFJlY3QuaAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9GbG9hdFJlY3QuaApAQCAtNzQsNiArNzQsMTEgQEAgY2xhc3Mg
SW50UG9pbnQ7CiAKIGNsYXNzIEZsb2F0UmVjdCB7CiBwdWJsaWM6CisgICAgZW51bSBDb250YWlu
c01vZGUgeworICAgICAgICBDb250YWluc1JlY3QsCisgICAgICAgIEluc2lkZVJlY3QKKyAgICB9
OworCiAgICAgRmxvYXRSZWN0KCkgeyB9CiAgICAgRmxvYXRSZWN0KGNvbnN0IEZsb2F0UG9pbnQm
IGxvY2F0aW9uLCBjb25zdCBGbG9hdFNpemUmIHNpemUpCiAgICAgICAgIDogbV9sb2NhdGlvbihs
b2NhdGlvbiksIG1fc2l6ZShzaXplKSB7IH0KQEAgLTE0Niw2ICsxNTEsNyBAQCBwdWJsaWM6CiAK
ICAgICBib29sIGludGVyc2VjdHMoY29uc3QgRmxvYXRSZWN0JikgY29uc3Q7CiAgICAgYm9vbCBj
b250YWlucyhjb25zdCBGbG9hdFJlY3QmKSBjb25zdDsKKyAgICBib29sIGNvbnRhaW5zKGNvbnN0
IEZsb2F0UG9pbnQmLCBDb250YWluc01vZGUgPSBDb250YWluc1JlY3QpIGNvbnN0OwogCiAgICAg
dm9pZCBpbnRlcnNlY3QoY29uc3QgRmxvYXRSZWN0Jik7CiAgICAgdm9pZCB1bml0ZShjb25zdCBG
bG9hdFJlY3QmKTsKQEAgLTE1NSw3ICsxNjEsNiBAQCBwdWJsaWM6CiAgICAgLy8gaXMgcmVhbGx5
IGNoZWNraW5nIGZvciBjb250YWlubWVudCBvZiAxeDEgcmVjdCwgYnV0IHRoYXQgZG9lc24ndCBt
YWtlIHNlbnNlIHdpdGggZmxvYXRzLgogICAgIGJvb2wgY29udGFpbnMoZmxvYXQgcHgsIGZsb2F0
IHB5KSBjb25zdAogICAgICAgICB7IHJldHVybiBweCA+PSB4KCkgJiYgcHggPD0gbWF4WCgpICYm
IHB5ID49IHkoKSAmJiBweSA8PSBtYXhZKCk7IH0KLSAgICBib29sIGNvbnRhaW5zKGNvbnN0IEZs
b2F0UG9pbnQmIHBvaW50KSBjb25zdCB7IHJldHVybiBjb250YWlucyhwb2ludC54KCksIHBvaW50
LnkoKSk7IH0KIAogICAgIHZvaWQgaW5mbGF0ZVgoZmxvYXQgZHgpIHsKICAgICAgICAgbV9sb2Nh
dGlvbi5zZXRYKG1fbG9jYXRpb24ueCgpIC0gZHgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL1JlbmRlck9iamVjdC5oIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlck9iamVjdC5oCmluZGV4IGJmYWE2OTUuLmNlY2M0ZjkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJPYmplY3QuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVyT2JqZWN0LmgKQEAgLTM1Nyw2ICszNTcsOCBAQCBwdWJsaWM6CiAgICAgdmly
dHVhbCBib29sIGlzU1ZHR3JhZGllbnRTdG9wKCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KICAg
ICB2aXJ0dWFsIGJvb2wgaXNTVkdIaWRkZW5Db250YWluZXIoKSBjb25zdCB7IHJldHVybiBmYWxz
ZTsgfQogICAgIHZpcnR1YWwgYm9vbCBpc1NWR1BhdGgoKSBjb25zdCB7IHJldHVybiBmYWxzZTsg
fQorICAgIHZpcnR1YWwgYm9vbCBpc1NWR1JlY3QoKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQor
ICAgIHZpcnR1YWwgYm9vbCBpc1NWR1NoYXBlKCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KICAg
ICB2aXJ0dWFsIGJvb2wgaXNTVkdUZXh0KCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KICAgICB2
aXJ0dWFsIGJvb2wgaXNTVkdUZXh0UGF0aCgpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CiAgICAg
dmlydHVhbCBib29sIGlzU1ZHSW5saW5lKCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUcmVlQXNUZXh0LmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUcmVlQXNUZXh0LmNwcAppbmRleCA2NGU2NTRj
Li5iMTJkNzc2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVHJl
ZUFzVGV4dC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRyZWVBc1Rl
eHQuY3BwCkBAIC01MjAsOCArNTIwLDggQEAgc3RhdGljIHZvaWQgd3JpdGVUZXh0UnVuKFRleHRT
dHJlYW0mIHRzLCBjb25zdCBSZW5kZXJUZXh0JiBvLCBjb25zdCBJbmxpbmVUZXh0Qm8KIHZvaWQg
d3JpdGUoVGV4dFN0cmVhbSYgdHMsIGNvbnN0IFJlbmRlck9iamVjdCYgbywgaW50IGluZGVudCwg
UmVuZGVyQXNUZXh0QmVoYXZpb3IgYmVoYXZpb3IpCiB7CiAjaWYgRU5BQkxFKFNWRykKLSAgICBp
ZiAoby5pc1NWR1BhdGgoKSkgewotICAgICAgICB3cml0ZSh0cywgKnRvUmVuZGVyU1ZHUGF0aCgm
byksIGluZGVudCk7CisgICAgaWYgKG8uaXNTVkdTaGFwZSgpKSB7CisgICAgICAgIHdyaXRlKHRz
LCAqdG9SZW5kZXJTVkdTaGFwZSgmbyksIGluZGVudCk7CiAgICAgICAgIHJldHVybjsKICAgICB9
CiAgICAgaWYgKG8uaXNTVkdHcmFkaWVudFN0b3AoKSkgewpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdBbGxJbk9uZS5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR0FsbEluT25lLmNwcAppbmRleCA5ZWEzYmU1Li4yOTY5
MDA4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR0Fs
bEluT25lLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR0Fs
bEluT25lLmNwcApAQCAtMzUsNiArMzUsNyBAQAogI2luY2x1ZGUgIlJlbmRlclNWR0lubGluZVRl
eHQuY3BwIgogI2luY2x1ZGUgIlJlbmRlclNWR01vZGVsT2JqZWN0LmNwcCIKICNpbmNsdWRlICJS
ZW5kZXJTVkdQYXRoLmNwcCIKKyNpbmNsdWRlICJSZW5kZXJTVkdSZWN0LmNwcCIKICNpbmNsdWRl
ICJSZW5kZXJTVkdSZXNvdXJjZS5jcHAiCiAjaW5jbHVkZSAiUmVuZGVyU1ZHUmVzb3VyY2VDbGlw
cGVyLmNwcCIKICNpbmNsdWRlICJSZW5kZXJTVkdSZXNvdXJjZUNvbnRhaW5lci5jcHAiCkBAIC00
OSw2ICs1MCw3IEBACiAjaW5jbHVkZSAiUmVuZGVyU1ZHUmVzb3VyY2VTb2xpZENvbG9yLmNwcCIK
ICNpbmNsdWRlICJSZW5kZXJTVkdSb290LmNwcCIKICNpbmNsdWRlICJSZW5kZXJTVkdTaGFkb3dU
cmVlUm9vdENvbnRhaW5lci5jcHAiCisjaW5jbHVkZSAiUmVuZGVyU1ZHU2hhcGUuY3BwIgogI2lu
Y2x1ZGUgIlJlbmRlclNWR1RTcGFuLmNwcCIKICNpbmNsdWRlICJSZW5kZXJTVkdUZXh0LmNwcCIK
ICNpbmNsdWRlICJSZW5kZXJTVkdUZXh0UGF0aC5jcHAiCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR01vZGVsT2JqZWN0LmNwcCBiL1NvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHTW9kZWxPYmplY3QuY3BwCmluZGV4IDE0YzFkYjgu
LmMyMzQwYjMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVy
U1ZHTW9kZWxPYmplY3QuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVu
ZGVyU1ZHTW9kZWxPYmplY3QuY3BwCkBAIC0xNTMsNyArMTUzLDcgQEAgc3RhdGljIGJvb2wgaW50
ZXJzZWN0c0FsbG93aW5nRW1wdHkoY29uc3QgRmxvYXRSZWN0JiByLCBjb25zdCBGbG9hdFJlY3Qm
IG90aGVyKQogLy8gaW1hZ2UsIGxpbmUsIHBhdGgsIHBvbHlnb24sIHBvbHlsaW5lLCByZWN0LCB0
ZXh0IGFuZCB1c2UuCiBzdGF0aWMgYm9vbCBpc0dyYXBoaWNzRWxlbWVudChSZW5kZXJPYmplY3Qq
IHJlbmRlcmVyKQogewotICAgIHJldHVybiByZW5kZXJlci0+aXNTVkdQYXRoKCkgfHwgcmVuZGVy
ZXItPmlzU1ZHVGV4dCgpIHx8IHJlbmRlcmVyLT5pc1NWR0ltYWdlKCkgfHwgcmVuZGVyZXItPmlz
U1ZHU2hhZG93VHJlZVJvb3RDb250YWluZXIoKTsKKyAgICByZXR1cm4gcmVuZGVyZXItPmlzU1ZH
U2hhcGUoKSB8fCByZW5kZXJlci0+aXNTVkdUZXh0KCkgfHwgcmVuZGVyZXItPmlzU1ZHSW1hZ2Uo
KSB8fCByZW5kZXJlci0+aXNTVkdTaGFkb3dUcmVlUm9vdENvbnRhaW5lcigpOwogfQogCiBib29s
IFJlbmRlclNWR01vZGVsT2JqZWN0OjpjaGVja0ludGVyc2VjdGlvbihSZW5kZXJPYmplY3QqIHJl
bmRlcmVyLCBjb25zdCBGbG9hdFJlY3QmIHJlY3QpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1BhdGguY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL3N2Zy9SZW5kZXJTVkdQYXRoLmNwcAppbmRleCBiN2FkN2EyLi5mZjE1NTA1IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1BhdGguY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUGF0aC5jcHAKQEAgLTYsNiAr
Niw4IEBACiAgKiBDb3B5cmlnaHQgKEMpIDIwMDkgRGlyayBTY2h1bHplIDxrcml0QHdlYmtpdC5v
cmc+CiAgKiBDb3B5cmlnaHQgKEMpIFJlc2VhcmNoIEluIE1vdGlvbiBMaW1pdGVkIDIwMTAuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDkgSmVmZiBTY2hpbGxlciA8
Y29kZWRyZWFkQGdtYWlsLmNvbT4KKyAqIENvcHlyaWdodCAoQykgMjAxMSBSZW5hdGEgSG9kb3Zh
biA8cmVuaUB3ZWJraXQub3JnPgorICogQ29weXJpZ2h0IChDKSAyMDExIFVuaXZlcnNpdHkgb2Yg
U3plZ2VkCiAgKgogICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVk
aXN0cmlidXRlIGl0IGFuZC9vcgogICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUg
R05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKQEAgLTI4LDUwICszMCwxMyBAQAogI2lmIEVOQUJM
RShTVkcpCiAjaW5jbHVkZSAiUmVuZGVyU1ZHUGF0aC5oIgogCi0jaW5jbHVkZSAiRmxvYXRQb2lu
dC5oIgotI2luY2x1ZGUgIkZsb2F0UXVhZC5oIgotI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5o
IgotI2luY2x1ZGUgIkhpdFRlc3RSZXF1ZXN0LmgiCi0jaW5jbHVkZSAiTGF5b3V0UmVwYWludGVy
LmgiCi0jaW5jbHVkZSAiUG9pbnRlckV2ZW50c0hpdFJ1bGVzLmgiCi0jaW5jbHVkZSAiUmVuZGVy
U1ZHQ29udGFpbmVyLmgiCi0jaW5jbHVkZSAiUmVuZGVyU1ZHUmVzb3VyY2VNYXJrZXIuaCIKLSNp
bmNsdWRlICJSZW5kZXJTVkdSZXNvdXJjZVNvbGlkQ29sb3IuaCIKLSNpbmNsdWRlICJTVkdSZW5k
ZXJTdXBwb3J0LmgiCi0jaW5jbHVkZSAiU1ZHUmVzb3VyY2VzLmgiCisjaW5jbHVkZSAiU1ZHUGF0
aEVsZW1lbnQuaCIKICNpbmNsdWRlICJTVkdTdHlsZWRUcmFuc2Zvcm1hYmxlRWxlbWVudC5oIgot
I2luY2x1ZGUgIlNWR1RyYW5zZm9ybUxpc3QuaCIKLSNpbmNsdWRlICJTVkdVUklSZWZlcmVuY2Uu
aCIKLSNpbmNsdWRlICJTdHJva2VTdHlsZUFwcGxpZXIuaCIKLSNpbmNsdWRlIDx3dGYvTWF0aEV4
dHJhcy5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLWNsYXNzIEJvdW5kaW5nUmVjdFN0cm9r
ZVN0eWxlQXBwbGllciA6IHB1YmxpYyBTdHJva2VTdHlsZUFwcGxpZXIgewotcHVibGljOgotICAg
IEJvdW5kaW5nUmVjdFN0cm9rZVN0eWxlQXBwbGllcihjb25zdCBSZW5kZXJPYmplY3QqIG9iamVj
dCwgUmVuZGVyU3R5bGUqIHN0eWxlKQotICAgICAgICA6IG1fb2JqZWN0KG9iamVjdCkKLSAgICAg
ICAgLCBtX3N0eWxlKHN0eWxlKQotICAgIHsKLSAgICAgICAgQVNTRVJUKHN0eWxlKTsKLSAgICAg
ICAgQVNTRVJUKG9iamVjdCk7Ci0gICAgfQotCi0gICAgdm9pZCBzdHJva2VTdHlsZShHcmFwaGlj
c0NvbnRleHQqIGdjKQotICAgIHsKLSAgICAgICAgU1ZHUmVuZGVyU3VwcG9ydDo6YXBwbHlTdHJv
a2VTdHlsZVRvQ29udGV4dChnYywgbV9zdHlsZSwgbV9vYmplY3QpOwotICAgIH0KLQotcHJpdmF0
ZToKLSAgICBjb25zdCBSZW5kZXJPYmplY3QqIG1fb2JqZWN0OwotICAgIFJlbmRlclN0eWxlKiBt
X3N0eWxlOwotfTsKLQogUmVuZGVyU1ZHUGF0aDo6UmVuZGVyU1ZHUGF0aChTVkdTdHlsZWRUcmFu
c2Zvcm1hYmxlRWxlbWVudCogbm9kZSkKLSAgICA6IFJlbmRlclNWR01vZGVsT2JqZWN0KG5vZGUp
Ci0gICAgLCBtX25lZWRzQm91bmRhcmllc1VwZGF0ZShmYWxzZSkgLy8gZGVmYXVsdCBpcyBmYWxz
ZSwgdGhlIGNhY2hlZCByZWN0cyBhcmUgZW1wdHkgZnJvbSB0aGUgYmVnaW5uaW5nCi0gICAgLCBt
X25lZWRzUGF0aFVwZGF0ZSh0cnVlKSAvLyBkZWZhdWx0IGlzIHRydWUsIHNvIHdlIGdyYWIgYSBQ
YXRoIG9iamVjdCBvbmNlIGZyb20gU1ZHU3R5bGVkVHJhbnNmb3JtYWJsZUVsZW1lbnQKLSAgICAs
IG1fbmVlZHNUcmFuc2Zvcm1VcGRhdGUodHJ1ZSkgLy8gZGVmYXVsdCBpcyB0cnVlLCBzbyB3ZSBn
cmFiIGEgQWZmaW5lVHJhbnNmb3JtIG9iamVjdCBvbmNlIGZyb20gU1ZHU3R5bGVkVHJhbnNmb3Jt
YWJsZUVsZW1lbnQKKyAgICA6IFJlbmRlclNWR1NoYXBlKG5vZGUpCiB7CiB9CiAKQEAgLTc5LDMx
NCArNDQsMTYgQEAgUmVuZGVyU1ZHUGF0aDo6flJlbmRlclNWR1BhdGgoKQogewogfQogCi1ib29s
IFJlbmRlclNWR1BhdGg6OmZpbGxDb250YWlucyhjb25zdCBGbG9hdFBvaW50JiBwb2ludCwgYm9v
bCByZXF1aXJlc0ZpbGwsIFdpbmRSdWxlIGZpbGxSdWxlKQotewotICAgIGlmICghbV9maWxsQm91
bmRpbmdCb3guY29udGFpbnMocG9pbnQpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBD
b2xvciBmYWxsYmFja0NvbG9yOwotICAgIGlmIChyZXF1aXJlc0ZpbGwgJiYgIVJlbmRlclNWR1Jl
c291cmNlOjpmaWxsUGFpbnRpbmdSZXNvdXJjZSh0aGlzLCBzdHlsZSgpLCBmYWxsYmFja0NvbG9y
KSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgcmV0dXJuIG1fcGF0aC5jb250YWlucyhw
b2ludCwgZmlsbFJ1bGUpOwotfQotCi1ib29sIFJlbmRlclNWR1BhdGg6OnN0cm9rZUNvbnRhaW5z
KGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50LCBib29sIHJlcXVpcmVzU3Ryb2tlKQotewotICAgIGlm
ICghbV9zdHJva2VBbmRNYXJrZXJCb3VuZGluZ0JveC5jb250YWlucyhwb2ludCkpCi0gICAgICAg
IHJldHVybiBmYWxzZTsKLQotICAgIENvbG9yIGZhbGxiYWNrQ29sb3I7Ci0gICAgaWYgKHJlcXVp
cmVzU3Ryb2tlICYmICFSZW5kZXJTVkdSZXNvdXJjZTo6c3Ryb2tlUGFpbnRpbmdSZXNvdXJjZSh0
aGlzLCBzdHlsZSgpLCBmYWxsYmFja0NvbG9yKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0g
ICAgaWYgKHNob3VsZFN0cm9rZVplcm9MZW5ndGhTdWJwYXRoKCkpCi0gICAgICAgIHJldHVybiB6
ZXJvTGVuZ3RoU3VicGF0aFJlY3QoKS5jb250YWlucyhwb2ludCk7Ci0KLSAgICBCb3VuZGluZ1Jl
Y3RTdHJva2VTdHlsZUFwcGxpZXIgc3Ryb2tlU3R5bGUodGhpcywgc3R5bGUoKSk7Ci0gICAgcmV0
dXJuIG1fcGF0aC5zdHJva2VDb250YWlucygmc3Ryb2tlU3R5bGUsIHBvaW50KTsKLX0KLQotdm9p
ZCBSZW5kZXJTVkdQYXRoOjpsYXlvdXQoKQotewotICAgIExheW91dFJlcGFpbnRlciByZXBhaW50
ZXIoKnRoaXMsIGNoZWNrRm9yUmVwYWludER1cmluZ0xheW91dCgpICYmIHNlbGZOZWVkc0xheW91
dCgpKTsKLSAgICBTVkdTdHlsZWRUcmFuc2Zvcm1hYmxlRWxlbWVudCogZWxlbWVudCA9IHN0YXRp
Y19jYXN0PFNWR1N0eWxlZFRyYW5zZm9ybWFibGVFbGVtZW50Kj4obm9kZSgpKTsKLQotICAgIGJv
b2wgdXBkYXRlQ2FjaGVkQm91bmRhcmllc0luUGFyZW50cyA9IGZhbHNlOwotCi0gICAgYm9vbCBu
ZWVkc1BhdGhVcGRhdGUgPSBtX25lZWRzUGF0aFVwZGF0ZTsKLSAgICBpZiAobmVlZHNQYXRoVXBk
YXRlKSB7Ci0gICAgICAgIG1fcGF0aC5jbGVhcigpOwotICAgICAgICBlbGVtZW50LT50b1BhdGhE
YXRhKG1fcGF0aCk7Ci0gICAgICAgIG1fbmVlZHNQYXRoVXBkYXRlID0gZmFsc2U7Ci0gICAgICAg
IHVwZGF0ZUNhY2hlZEJvdW5kYXJpZXNJblBhcmVudHMgPSB0cnVlOwotICAgIH0KLQotICAgIGlm
IChtX25lZWRzVHJhbnNmb3JtVXBkYXRlKSB7Ci0gICAgICAgIG1fbG9jYWxUcmFuc2Zvcm0gPSBl
bGVtZW50LT5hbmltYXRlZExvY2FsVHJhbnNmb3JtKCk7Ci0gICAgICAgIG1fbmVlZHNUcmFuc2Zv
cm1VcGRhdGUgPSBmYWxzZTsKLSAgICAgICAgdXBkYXRlQ2FjaGVkQm91bmRhcmllc0luUGFyZW50
cyA9IHRydWU7Ci0gICAgfQotCi0gICAgaWYgKG1fbmVlZHNCb3VuZGFyaWVzVXBkYXRlKQotICAg
ICAgICB1cGRhdGVDYWNoZWRCb3VuZGFyaWVzSW5QYXJlbnRzID0gdHJ1ZTsKLQotICAgIC8vIElu
dmFsaWRhdGUgYWxsIHJlc291cmNlcyBvZiB0aGlzIGNsaWVudCBpZiBvdXIgbGF5b3V0IGNoYW5n
ZWQuCi0gICAgaWYgKG1fZXZlckhhZExheW91dCAmJiBzZWxmTmVlZHNMYXlvdXQoKSkgewotICAg
ICAgICBTVkdSZXNvdXJjZXNDYWNoZTo6Y2xpZW50TGF5b3V0Q2hhbmdlZCh0aGlzKTsKLSAgICAg
ICAgbV9tYXJrZXJMYXlvdXRJbmZvLmNsZWFyKCk7Ci0gICAgfQotCi0gICAgLy8gQXQgdGhpcyBw
b2ludCBMYXlvdXRSZXBhaW50ZXIgYWxyZWFkeSBncmFiYmVkIHRoZSBvbGQgYm91bmRzLAotICAg
IC8vIHJlY2FsY3VsYXRlIHRoZW0gbm93IHNvIHJlcGFpbnRBZnRlckxheW91dCgpIHVzZXMgdGhl
IG5ldyBib3VuZHMuCi0gICAgaWYgKG5lZWRzUGF0aFVwZGF0ZSB8fCBtX25lZWRzQm91bmRhcmll
c1VwZGF0ZSkgewotICAgICAgICB1cGRhdGVDYWNoZWRCb3VuZGFyaWVzKCk7Ci0gICAgICAgIG1f
bmVlZHNCb3VuZGFyaWVzVXBkYXRlID0gZmFsc2U7Ci0gICAgfQotCi0gICAgLy8gSWYgb3VyIGJv
dW5kcyBjaGFuZ2VkLCBub3RpZnkgdGhlIHBhcmVudHMuCi0gICAgaWYgKHVwZGF0ZUNhY2hlZEJv
dW5kYXJpZXNJblBhcmVudHMpCi0gICAgICAgIFJlbmRlclNWR01vZGVsT2JqZWN0OjpzZXROZWVk
c0JvdW5kYXJpZXNVcGRhdGUoKTsKLQotICAgIHJlcGFpbnRlci5yZXBhaW50QWZ0ZXJMYXlvdXQo
KTsKLSAgICBzZXROZWVkc0xheW91dChmYWxzZSk7Ci19Ci0KLWJvb2wgUmVuZGVyU1ZHUGF0aDo6
c2hvdWxkU3Ryb2tlWmVyb0xlbmd0aFN1YnBhdGgoKSBjb25zdAotewotICAgIC8vIFNwZWMoMTEu
NCk6IEFueSB6ZXJvIGxlbmd0aCBzdWJwYXRoIHNoYWxsIG5vdCBiZSBzdHJva2VkIGlmIHRoZSDi
gJhzdHJva2UtbGluZWNhcOKAmSBwcm9wZXJ0eSBoYXMgYSB2YWx1ZSBvZiBidXR0Ci0gICAgLy8g
YnV0IHNoYWxsIGJlIHN0cm9rZWQgaWYgdGhlIOKAmHN0cm9rZS1saW5lY2Fw4oCZIHByb3BlcnR5
IGhhcyBhIHZhbHVlIG9mIHJvdW5kIG9yIHNxdWFyZQotICAgIHJldHVybiBzdHlsZSgpLT5zdmdT
dHlsZSgpLT5oYXNTdHJva2UoKSAmJiBzdHlsZSgpLT5zdmdTdHlsZSgpLT5jYXBTdHlsZSgpICE9
IEJ1dHRDYXAgJiYgIW1fZmlsbEJvdW5kaW5nQm94LndpZHRoKCkgJiYgIW1fZmlsbEJvdW5kaW5n
Qm94LmhlaWdodCgpOwotfQotCi1GbG9hdFJlY3QgUmVuZGVyU1ZHUGF0aDo6emVyb0xlbmd0aFN1
YnBhdGhSZWN0KCkgY29uc3QKLXsKLSAgICBTVkdFbGVtZW50KiBzdmdFbGVtZW50ID0gc3RhdGlj
X2Nhc3Q8U1ZHRWxlbWVudCo+KG5vZGUoKSk7Ci0gICAgZmxvYXQgc3Ryb2tlV2lkdGggPSBzdHls
ZSgpLT5zdmdTdHlsZSgpLT5zdHJva2VXaWR0aCgpLnZhbHVlKHN2Z0VsZW1lbnQpOwotICAgIHJl
dHVybiBGbG9hdFJlY3QobV9maWxsQm91bmRpbmdCb3gueCgpIC0gc3Ryb2tlV2lkdGggLyAyLCBt
X2ZpbGxCb3VuZGluZ0JveC55KCkgLSBzdHJva2VXaWR0aCAvIDIsIHN0cm9rZVdpZHRoLCBzdHJv
a2VXaWR0aCk7Ci19Ci0KLXZvaWQgUmVuZGVyU1ZHUGF0aDo6c2V0dXBTcXVhcmVDYXBQYXRoKFBh
dGgqJiB1c2VQYXRoLCBpbnQmIGFwcGx5TW9kZSkKLXsKLSAgICAvLyBTcGVjKDExLjQpOiBBbnkg
emVybyBsZW5ndGggc3VicGF0aCBzaGFsbCBub3QgYmUgc3Ryb2tlZCBpZiB0aGUg4oCYc3Ryb2tl
LWxpbmVjYXDigJkgcHJvcGVydHkgaGFzIGEgdmFsdWUgb2YgYnV0dAotICAgIC8vIGJ1dCBzaGFs
bCBiZSBzdHJva2VkIGlmIHRoZSDigJhzdHJva2UtbGluZWNhcOKAmSBwcm9wZXJ0eSBoYXMgYSB2
YWx1ZSBvZiByb3VuZCBvciBzcXVhcmUKLSAgICBERUZJTkVfU1RBVElDX0xPQ0FMKFBhdGgsIHRl
bXBQYXRoLCAoKSk7Ci0KLSAgICBhcHBseU1vZGUgPSBBcHBseVRvRmlsbE1vZGU7Ci0gICAgdXNl
UGF0aCA9ICZ0ZW1wUGF0aDsKLSAgICB1c2VQYXRoLT5jbGVhcigpOwotICAgIGlmIChzdHlsZSgp
LT5zdmdTdHlsZSgpLT5jYXBTdHlsZSgpID09IFNxdWFyZUNhcCkKLSAgICAgICAgdXNlUGF0aC0+
YWRkUmVjdCh6ZXJvTGVuZ3RoU3VicGF0aFJlY3QoKSk7Ci0gICAgZWxzZQotICAgICAgICB1c2VQ
YXRoLT5hZGRFbGxpcHNlKHplcm9MZW5ndGhTdWJwYXRoUmVjdCgpKTsKLX0KLQotYm9vbCBSZW5k
ZXJTVkdQYXRoOjpzZXR1cE5vblNjYWxpbmdTdHJva2VQYXRoKFBhdGgqJiB1c2VQYXRoLCBHcmFw
aGljc0NvbnRleHRTdGF0ZVNhdmVyJiBzdGF0ZVNhdmVyKQordm9pZCBSZW5kZXJTVkdQYXRoOjpp
bmZsYXRlV2l0aE1hcmtlckJvdW5kcygpCiB7Ci0gICAgREVGSU5FX1NUQVRJQ19MT0NBTChQYXRo
LCB0ZW1wUGF0aCwgKCkpOwotCi0gICAgU1ZHU3R5bGVkVHJhbnNmb3JtYWJsZUVsZW1lbnQqIGVs
ZW1lbnQgPSBzdGF0aWNfY2FzdDxTVkdTdHlsZWRUcmFuc2Zvcm1hYmxlRWxlbWVudCo+KG5vZGUo
KSk7Ci0gICAgQWZmaW5lVHJhbnNmb3JtIG5vblNjYWxpbmdTdHJva2VUcmFuc2Zvcm0gPSBlbGVt
ZW50LT5nZXRTY3JlZW5DVE0oU1ZHTG9jYXRhYmxlOjpEaXNhbGxvd1N0eWxlVXBkYXRlKTsKLSAg
ICBpZiAoIW5vblNjYWxpbmdTdHJva2VUcmFuc2Zvcm0uaXNJbnZlcnRpYmxlKCkpCi0gICAgICAg
IHJldHVybiBmYWxzZTsKLQotICAgIHRlbXBQYXRoID0gbV9wYXRoOwotICAgIHVzZVBhdGggPSAm
dGVtcFBhdGg7Ci0gICAgdGVtcFBhdGgudHJhbnNmb3JtKG5vblNjYWxpbmdTdHJva2VUcmFuc2Zv
cm0pOwotCi0gICAgc3RhdGVTYXZlci5zYXZlKCk7Ci0gICAgc3RhdGVTYXZlci5jb250ZXh0KCkt
PmNvbmNhdENUTShub25TY2FsaW5nU3Ryb2tlVHJhbnNmb3JtLmludmVyc2UoKSk7Ci0gICAgcmV0
dXJuIHRydWU7Ci19Ci0KLXZvaWQgUmVuZGVyU1ZHUGF0aDo6ZmlsbEFuZFN0cm9rZVBhdGgoR3Jh
cGhpY3NDb250ZXh0KiBjb250ZXh0KQotewotICAgIFJlbmRlclN0eWxlKiBzdHlsZSA9IHRoaXMt
PnN0eWxlKCk7Ci0KLSAgICBDb2xvciBmYWxsYmFja0NvbG9yOwotICAgIGlmIChSZW5kZXJTVkdS
ZXNvdXJjZSogZmlsbFBhaW50aW5nUmVzb3VyY2UgPSBSZW5kZXJTVkdSZXNvdXJjZTo6ZmlsbFBh
aW50aW5nUmVzb3VyY2UodGhpcywgc3R5bGUsIGZhbGxiYWNrQ29sb3IpKSB7Ci0gICAgICAgIGlm
IChmaWxsUGFpbnRpbmdSZXNvdXJjZS0+YXBwbHlSZXNvdXJjZSh0aGlzLCBzdHlsZSwgY29udGV4
dCwgQXBwbHlUb0ZpbGxNb2RlKSkKLSAgICAgICAgICAgIGZpbGxQYWludGluZ1Jlc291cmNlLT5w
b3N0QXBwbHlSZXNvdXJjZSh0aGlzLCBjb250ZXh0LCBBcHBseVRvRmlsbE1vZGUsICZtX3BhdGgp
OwotICAgICAgICBlbHNlIGlmIChmYWxsYmFja0NvbG9yLmlzVmFsaWQoKSkgewotICAgICAgICAg
ICAgUmVuZGVyU1ZHUmVzb3VyY2VTb2xpZENvbG9yKiBmYWxsYmFja1Jlc291cmNlID0gUmVuZGVy
U1ZHUmVzb3VyY2U6OnNoYXJlZFNvbGlkUGFpbnRpbmdSZXNvdXJjZSgpOwotICAgICAgICAgICAg
ZmFsbGJhY2tSZXNvdXJjZS0+c2V0Q29sb3IoZmFsbGJhY2tDb2xvcik7Ci0gICAgICAgICAgICBp
ZiAoZmFsbGJhY2tSZXNvdXJjZS0+YXBwbHlSZXNvdXJjZSh0aGlzLCBzdHlsZSwgY29udGV4dCwg
QXBwbHlUb0ZpbGxNb2RlKSkKLSAgICAgICAgICAgICAgICBmYWxsYmFja1Jlc291cmNlLT5wb3N0
QXBwbHlSZXNvdXJjZSh0aGlzLCBjb250ZXh0LCBBcHBseVRvRmlsbE1vZGUsICZtX3BhdGgpOwot
ICAgICAgICB9Ci0gICAgfQotCi0gICAgZmFsbGJhY2tDb2xvciA9IENvbG9yKCk7Ci0gICAgUmVu
ZGVyU1ZHUmVzb3VyY2UqIHN0cm9rZVBhaW50aW5nUmVzb3VyY2UgPSBSZW5kZXJTVkdSZXNvdXJj
ZTo6c3Ryb2tlUGFpbnRpbmdSZXNvdXJjZSh0aGlzLCBzdHlsZSwgZmFsbGJhY2tDb2xvcik7Ci0g
ICAgaWYgKCFzdHJva2VQYWludGluZ1Jlc291cmNlKQotICAgICAgICByZXR1cm47Ci0KLSAgICBQ
YXRoKiB1c2VQYXRoID0gJm1fcGF0aDsKLSAgICBpbnQgYXBwbHlNb2RlID0gQXBwbHlUb1N0cm9r
ZU1vZGU7Ci0KLSAgICBib29sIG5vblNjYWxpbmdTdHJva2UgPSBzdHlsZS0+c3ZnU3R5bGUoKS0+
dmVjdG9yRWZmZWN0KCkgPT0gVkVfTk9OX1NDQUxJTkdfU1RST0tFOwotCi0gICAgR3JhcGhpY3ND
b250ZXh0U3RhdGVTYXZlciBzdGF0ZVNhdmVyKCpjb250ZXh0LCBmYWxzZSk7Ci0KLSAgICAvLyBT
cGVjKDExLjQpOiBBbnkgemVybyBsZW5ndGggc3VicGF0aCBzaGFsbCBub3QgYmUgc3Ryb2tlZCBp
ZiB0aGUg4oCYc3Ryb2tlLWxpbmVjYXDigJkgcHJvcGVydHkgaGFzIGEgdmFsdWUgb2YgYnV0dAot
ICAgIC8vIGJ1dCBzaGFsbCBiZSBzdHJva2VkIGlmIHRoZSDigJhzdHJva2UtbGluZWNhcOKAmSBw
cm9wZXJ0eSBoYXMgYSB2YWx1ZSBvZiByb3VuZCBvciBzcXVhcmUKLSAgICAvLyBGSVhNRTogdGhp
cyBkb2VzIG5vdCB3b3JrIGZvciB6ZXJvLWxlbmd0aCBzdWJwYXRocywgb25seSB3aGVuIHRvdGFs
IHBhdGggaXMgemVyby1sZW5ndGgKLSAgICBpZiAoc2hvdWxkU3Ryb2tlWmVyb0xlbmd0aFN1YnBh
dGgoKSkKLSAgICAgICAgc2V0dXBTcXVhcmVDYXBQYXRoKHVzZVBhdGgsIGFwcGx5TW9kZSk7Ci0g
ICAgZWxzZSBpZiAobm9uU2NhbGluZ1N0cm9rZSkgewotICAgICAgIGlmICghc2V0dXBOb25TY2Fs
aW5nU3Ryb2tlUGF0aCh1c2VQYXRoLCBzdGF0ZVNhdmVyKSkKLSAgICAgICAgICAgcmV0dXJuOwot
ICAgIH0KLQotICAgIGlmIChzdHJva2VQYWludGluZ1Jlc291cmNlLT5hcHBseVJlc291cmNlKHRo
aXMsIHN0eWxlLCBjb250ZXh0LCBhcHBseU1vZGUpKQotICAgICAgICBzdHJva2VQYWludGluZ1Jl
c291cmNlLT5wb3N0QXBwbHlSZXNvdXJjZSh0aGlzLCBjb250ZXh0LCBhcHBseU1vZGUsIHVzZVBh
dGgpOwotICAgIGVsc2UgaWYgKGZhbGxiYWNrQ29sb3IuaXNWYWxpZCgpKSB7Ci0gICAgICAgIFJl
bmRlclNWR1Jlc291cmNlU29saWRDb2xvciogZmFsbGJhY2tSZXNvdXJjZSA9IFJlbmRlclNWR1Jl
c291cmNlOjpzaGFyZWRTb2xpZFBhaW50aW5nUmVzb3VyY2UoKTsKLSAgICAgICAgZmFsbGJhY2tS
ZXNvdXJjZS0+c2V0Q29sb3IoZmFsbGJhY2tDb2xvcik7Ci0gICAgICAgIGlmIChmYWxsYmFja1Jl
c291cmNlLT5hcHBseVJlc291cmNlKHRoaXMsIHN0eWxlLCBjb250ZXh0LCBhcHBseU1vZGUpKQot
ICAgICAgICAgICAgZmFsbGJhY2tSZXNvdXJjZS0+cG9zdEFwcGx5UmVzb3VyY2UodGhpcywgY29u
dGV4dCwgYXBwbHlNb2RlLCB1c2VQYXRoKTsKLSAgICB9Ci19Ci0KLXZvaWQgUmVuZGVyU1ZHUGF0
aDo6cGFpbnQoUGFpbnRJbmZvJiBwYWludEluZm8sIGNvbnN0IExheW91dFBvaW50JikKLXsKLSAg
ICBpZiAocGFpbnRJbmZvLmNvbnRleHQtPnBhaW50aW5nRGlzYWJsZWQoKSB8fCBzdHlsZSgpLT52
aXNpYmlsaXR5KCkgPT0gSElEREVOIHx8IG1fcGF0aC5pc0VtcHR5KCkpCi0gICAgICAgIHJldHVy
bjsKLQotICAgIEZsb2F0UmVjdCBib3VuZGluZ0JveCA9IHJlcGFpbnRSZWN0SW5Mb2NhbENvb3Jk
aW5hdGVzKCk7Ci0gICAgaWYgKCFTVkdSZW5kZXJTdXBwb3J0OjpwYWludEluZm9JbnRlcnNlY3Rz
UmVwYWludFJlY3QoYm91bmRpbmdCb3gsIG1fbG9jYWxUcmFuc2Zvcm0sIHBhaW50SW5mbykpCi0g
ICAgICAgIHJldHVybjsKLQotICAgIFBhaW50SW5mbyBjaGlsZFBhaW50SW5mbyhwYWludEluZm8p
OwotICAgIGJvb2wgZHJhd3NPdXRsaW5lID0gc3R5bGUoKS0+b3V0bGluZVdpZHRoKCkgJiYgKGNo
aWxkUGFpbnRJbmZvLnBoYXNlID09IFBhaW50UGhhc2VPdXRsaW5lIHx8IGNoaWxkUGFpbnRJbmZv
LnBoYXNlID09IFBhaW50UGhhc2VTZWxmT3V0bGluZSk7Ci0gICAgaWYgKGRyYXdzT3V0bGluZSB8
fCBjaGlsZFBhaW50SW5mby5waGFzZSA9PSBQYWludFBoYXNlRm9yZWdyb3VuZCkgewotICAgICAg
ICBHcmFwaGljc0NvbnRleHRTdGF0ZVNhdmVyIHN0YXRlU2F2ZXIoKmNoaWxkUGFpbnRJbmZvLmNv
bnRleHQpOwotICAgICAgICBjaGlsZFBhaW50SW5mby5hcHBseVRyYW5zZm9ybShtX2xvY2FsVHJh
bnNmb3JtKTsKLQotICAgICAgICBpZiAoY2hpbGRQYWludEluZm8ucGhhc2UgPT0gUGFpbnRQaGFz
ZUZvcmVncm91bmQpIHsKLSAgICAgICAgICAgIFBhaW50SW5mbyBzYXZlZEluZm8oY2hpbGRQYWlu
dEluZm8pOwotCi0gICAgICAgICAgICBpZiAoU1ZHUmVuZGVyU3VwcG9ydDo6cHJlcGFyZVRvUmVu
ZGVyU1ZHQ29udGVudCh0aGlzLCBjaGlsZFBhaW50SW5mbykpIHsKLSAgICAgICAgICAgICAgICBj
b25zdCBTVkdSZW5kZXJTdHlsZSogc3ZnU3R5bGUgPSBzdHlsZSgpLT5zdmdTdHlsZSgpOwotICAg
ICAgICAgICAgICAgIGlmIChzdmdTdHlsZS0+c2hhcGVSZW5kZXJpbmcoKSA9PSBTUl9DUklTUEVE
R0VTKQotICAgICAgICAgICAgICAgICAgICBjaGlsZFBhaW50SW5mby5jb250ZXh0LT5zZXRTaG91
bGRBbnRpYWxpYXMoZmFsc2UpOwotCi0gICAgICAgICAgICAgICAgZmlsbEFuZFN0cm9rZVBhdGgo
Y2hpbGRQYWludEluZm8uY29udGV4dCk7Ci0KLSAgICAgICAgICAgICAgICBpZiAoc3ZnU3R5bGUt
Pmhhc01hcmtlcnMoKSkKLSAgICAgICAgICAgICAgICAgICAgbV9tYXJrZXJMYXlvdXRJbmZvLmRy
YXdNYXJrZXJzKGNoaWxkUGFpbnRJbmZvKTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAg
U1ZHUmVuZGVyU3VwcG9ydDo6ZmluaXNoUmVuZGVyU1ZHQ29udGVudCh0aGlzLCBjaGlsZFBhaW50
SW5mbywgc2F2ZWRJbmZvLmNvbnRleHQpOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKGRyYXdz
T3V0bGluZSkKLSAgICAgICAgICAgIHBhaW50T3V0bGluZShjaGlsZFBhaW50SW5mby5jb250ZXh0
LCBJbnRSZWN0KGJvdW5kaW5nQm94KSk7Ci0gICAgfQotfQotCi0vLyBUaGlzIG1ldGhvZCBpcyBj
YWxsZWQgZnJvbSBpbnNpZGUgcGFpbnRPdXRsaW5lKCkgc2luY2Ugd2UgY2FsbCBwYWludE91dGxp
bmUoKQotLy8gd2hpbGUgdHJhbnNmb3JtZWQgdG8gb3VyIGNvb3JkIHN5c3RlbSwgcmV0dXJuIGxv
Y2FsIGNvb3Jkcwotdm9pZCBSZW5kZXJTVkdQYXRoOjphZGRGb2N1c1JpbmdSZWN0cyhWZWN0b3I8
TGF5b3V0UmVjdD4mIHJlY3RzLCBjb25zdCBMYXlvdXRQb2ludCYpIAotewotICAgIExheW91dFJl
Y3QgcmVjdCA9IGVuY2xvc2luZ0xheW91dFJlY3QocmVwYWludFJlY3RJbkxvY2FsQ29vcmRpbmF0
ZXMoKSk7Ci0gICAgaWYgKCFyZWN0LmlzRW1wdHkoKSkKLSAgICAgICAgcmVjdHMuYXBwZW5kKHJl
Y3QpOwotfQotCi1ib29sIFJlbmRlclNWR1BhdGg6Om5vZGVBdEZsb2F0UG9pbnQoY29uc3QgSGl0
VGVzdFJlcXVlc3QmIHJlcXVlc3QsIEhpdFRlc3RSZXN1bHQmIHJlc3VsdCwgY29uc3QgRmxvYXRQ
b2ludCYgcG9pbnRJblBhcmVudCwgSGl0VGVzdEFjdGlvbiBoaXRUZXN0QWN0aW9uKQotewotICAg
IC8vIFdlIG9ubHkgZHJhdyBpbiB0aGUgZm9yZ3JvdW5kIHBoYXNlLCBzbyB3ZSBvbmx5IGhpdC10
ZXN0IHRoZW4uCi0gICAgaWYgKGhpdFRlc3RBY3Rpb24gIT0gSGl0VGVzdEZvcmVncm91bmQpCi0g
ICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIEZsb2F0UG9pbnQgbG9jYWxQb2ludCA9IG1fbG9j
YWxUcmFuc2Zvcm0uaW52ZXJzZSgpLm1hcFBvaW50KHBvaW50SW5QYXJlbnQpOwotCi0gICAgaWYg
KCFTVkdSZW5kZXJTdXBwb3J0Ojpwb2ludEluQ2xpcHBpbmdBcmVhKHRoaXMsIGxvY2FsUG9pbnQp
KQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBQb2ludGVyRXZlbnRzSGl0UnVsZXMgaGl0
UnVsZXMoUG9pbnRlckV2ZW50c0hpdFJ1bGVzOjpTVkdfUEFUSF9ISVRURVNUSU5HLCByZXF1ZXN0
LCBzdHlsZSgpLT5wb2ludGVyRXZlbnRzKCkpOwotICAgIGJvb2wgaXNWaXNpYmxlID0gKHN0eWxl
KCktPnZpc2liaWxpdHkoKSA9PSBWSVNJQkxFKTsKLSAgICBpZiAoaXNWaXNpYmxlIHx8ICFoaXRS
dWxlcy5yZXF1aXJlVmlzaWJsZSkgewotICAgICAgICBjb25zdCBTVkdSZW5kZXJTdHlsZSogc3Zn
U3R5bGUgPSBzdHlsZSgpLT5zdmdTdHlsZSgpOwotICAgICAgICBXaW5kUnVsZSBmaWxsUnVsZSA9
IHN2Z1N0eWxlLT5maWxsUnVsZSgpOwotICAgICAgICBpZiAocmVxdWVzdC5zdmdDbGlwQ29udGVu
dCgpKQotICAgICAgICAgICAgZmlsbFJ1bGUgPSBzdmdTdHlsZS0+Y2xpcFJ1bGUoKTsKLSAgICAg
ICAgaWYgKChoaXRSdWxlcy5jYW5IaXRTdHJva2UgJiYgKHN2Z1N0eWxlLT5oYXNTdHJva2UoKSB8
fCAhaGl0UnVsZXMucmVxdWlyZVN0cm9rZSkgJiYgc3Ryb2tlQ29udGFpbnMobG9jYWxQb2ludCwg
aGl0UnVsZXMucmVxdWlyZVN0cm9rZSkpCi0gICAgICAgICAgICB8fCAoaGl0UnVsZXMuY2FuSGl0
RmlsbCAmJiAoc3ZnU3R5bGUtPmhhc0ZpbGwoKSB8fCAhaGl0UnVsZXMucmVxdWlyZUZpbGwpICYm
IGZpbGxDb250YWlucyhsb2NhbFBvaW50LCBoaXRSdWxlcy5yZXF1aXJlRmlsbCwgZmlsbFJ1bGUp
KSkgewotICAgICAgICAgICAgdXBkYXRlSGl0VGVzdFJlc3VsdChyZXN1bHQsIHJvdW5kZWRMYXlv
dXRQb2ludChsb2NhbFBvaW50KSk7Ci0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAg
fQotICAgIH0KLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLUZsb2F0UmVjdCBSZW5kZXJTVkdQYXRo
OjpjYWxjdWxhdGVNYXJrZXJCb3VuZHNJZk5lZWRlZCgpCi17Ci0gICAgU1ZHRWxlbWVudCogc3Zn
RWxlbWVudCA9IHN0YXRpY19jYXN0PFNWR0VsZW1lbnQqPihub2RlKCkpOwotICAgIEFTU0VSVChz
dmdFbGVtZW50ICYmIHN2Z0VsZW1lbnQtPmRvY3VtZW50KCkpOwotICAgIGlmICghc3ZnRWxlbWVu
dC0+aXNTdHlsZWQoKSkKLSAgICAgICAgcmV0dXJuIEZsb2F0UmVjdCgpOwotCi0gICAgU1ZHU3R5
bGVkRWxlbWVudCogc3R5bGVkRWxlbWVudCA9IHN0YXRpY19jYXN0PFNWR1N0eWxlZEVsZW1lbnQq
PihzdmdFbGVtZW50KTsKLSAgICBpZiAoIXN0eWxlZEVsZW1lbnQtPnN1cHBvcnRzTWFya2Vycygp
KQotICAgICAgICByZXR1cm4gRmxvYXRSZWN0KCk7Ci0KLSAgICBjb25zdCBTVkdSZW5kZXJTdHls
ZSogc3ZnU3R5bGUgPSBzdHlsZSgpLT5zdmdTdHlsZSgpOwotICAgIEFTU0VSVChzdmdTdHlsZS0+
aGFzTWFya2VycygpKTsKLQotICAgIFNWR1Jlc291cmNlcyogcmVzb3VyY2VzID0gU1ZHUmVzb3Vy
Y2VzQ2FjaGU6OmNhY2hlZFJlc291cmNlc0ZvclJlbmRlck9iamVjdCh0aGlzKTsKLSAgICBpZiAo
IXJlc291cmNlcykKLSAgICAgICAgcmV0dXJuIEZsb2F0UmVjdCgpOwotCi0gICAgUmVuZGVyU1ZH
UmVzb3VyY2VNYXJrZXIqIG1hcmtlclN0YXJ0ID0gcmVzb3VyY2VzLT5tYXJrZXJTdGFydCgpOwot
ICAgIFJlbmRlclNWR1Jlc291cmNlTWFya2VyKiBtYXJrZXJNaWQgPSByZXNvdXJjZXMtPm1hcmtl
ck1pZCgpOwotICAgIFJlbmRlclNWR1Jlc291cmNlTWFya2VyKiBtYXJrZXJFbmQgPSByZXNvdXJj
ZXMtPm1hcmtlckVuZCgpOwotICAgIGlmICghbWFya2VyU3RhcnQgJiYgIW1hcmtlck1pZCAmJiAh
bWFya2VyRW5kKQotICAgICAgICByZXR1cm4gRmxvYXRSZWN0KCk7Ci0KLSAgICByZXR1cm4gbV9t
YXJrZXJMYXlvdXRJbmZvLmNhbGN1bGF0ZUJvdW5kYXJpZXMobWFya2VyU3RhcnQsIG1hcmtlck1p
ZCwgbWFya2VyRW5kLCBzdmdTdHlsZS0+c3Ryb2tlV2lkdGgoKS52YWx1ZShzdmdFbGVtZW50KSwg
bV9wYXRoKTsKLX0KLQotdm9pZCBSZW5kZXJTVkdQYXRoOjp1cGRhdGVDYWNoZWRCb3VuZGFyaWVz
KCkKLXsKLSAgICBpZiAobV9wYXRoLmlzRW1wdHkoKSkgewotICAgICAgICBtX2ZpbGxCb3VuZGlu
Z0JveCA9IEZsb2F0UmVjdCgpOwotICAgICAgICBtX3N0cm9rZUFuZE1hcmtlckJvdW5kaW5nQm94
ID0gRmxvYXRSZWN0KCk7Ci0gICAgICAgIG1fcmVwYWludEJvdW5kaW5nQm94ID0gRmxvYXRSZWN0
KCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICAvLyBDYWNoZSBfdW5jbGlwcGVkXyBm
aWxsIGJvdW5kaW5nIGJveCwgdXNlZCBmb3IgY2FsY3VsYXRpb25zIGluIHJlc291cmNlcwotICAg
IG1fZmlsbEJvdW5kaW5nQm94ID0gbV9wYXRoLmJvdW5kaW5nUmVjdCgpOwotCi0gICAgLy8gU3Bl
YygxMS40KTogQW55IHplcm8gbGVuZ3RoIHN1YnBhdGggc2hhbGwgbm90IGJlIHN0cm9rZWQgaWYg
dGhlIOKAmHN0cm9rZS1saW5lY2Fw4oCZIHByb3BlcnR5IGhhcyBhIHZhbHVlIG9mIGJ1dHQKLSAg
ICAvLyBidXQgc2hhbGwgYmUgc3Ryb2tlZCBpZiB0aGUg4oCYc3Ryb2tlLWxpbmVjYXDigJkgcHJv
cGVydHkgaGFzIGEgdmFsdWUgb2Ygcm91bmQgb3Igc3F1YXJlCi0gICAgaWYgKHNob3VsZFN0cm9r
ZVplcm9MZW5ndGhTdWJwYXRoKCkpIHsKLSAgICAgICAgbV9zdHJva2VBbmRNYXJrZXJCb3VuZGlu
Z0JveCA9IHplcm9MZW5ndGhTdWJwYXRoUmVjdCgpOwotICAgICAgICAvLyBDYWNoZSBzbWFsbGVz
dCBwb3NzaWJsZSByZXBhaW50IHJlY3RhbmdsZQotICAgICAgICBtX3JlcGFpbnRCb3VuZGluZ0Jv
eCA9IG1fc3Ryb2tlQW5kTWFya2VyQm91bmRpbmdCb3g7Ci0gICAgICAgIFNWR1JlbmRlclN1cHBv
cnQ6OmludGVyc2VjdFJlcGFpbnRSZWN0V2l0aFJlc291cmNlcyh0aGlzLCBtX3JlcGFpbnRCb3Vu
ZGluZ0JveCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICAvLyBDYWNoZSBfdW5jbGlw
cGVkXyBzdHJva2UgYm91bmRpbmcgYm94LCB1c2VkIGZvciBjYWxjdWxhdGlvbnMgaW4gcmVzb3Vy
Y2VzIChpbmNsdWRlcyBtYXJrZXIgYm91bmRhcmllcykKLSAgICBtX3N0cm9rZUFuZE1hcmtlckJv
dW5kaW5nQm94ID0gbV9maWxsQm91bmRpbmdCb3g7Ci0KLSAgICBjb25zdCBTVkdSZW5kZXJTdHls
ZSogc3ZnU3R5bGUgPSBzdHlsZSgpLT5zdmdTdHlsZSgpOwotICAgIGlmIChzdmdTdHlsZS0+aGFz
U3Ryb2tlKCkpIHsKLSAgICAgICAgQm91bmRpbmdSZWN0U3Ryb2tlU3R5bGVBcHBsaWVyIHN0cm9r
ZVN0eWxlKHRoaXMsIHN0eWxlKCkpOwotICAgICAgICBtX3N0cm9rZUFuZE1hcmtlckJvdW5kaW5n
Qm94LnVuaXRlKG1fcGF0aC5zdHJva2VCb3VuZGluZ1JlY3QoJnN0cm9rZVN0eWxlKSk7Ci0gICAg
fQotCi0gICAgaWYgKHN2Z1N0eWxlLT5oYXNNYXJrZXJzKCkpIHsKKyAgICBpZiAoc3R5bGUoKS0+
c3ZnU3R5bGUoKS0+aGFzTWFya2VycygpKSB7CiAgICAgICAgIEZsb2F0UmVjdCBtYXJrZXJCb3Vu
ZHMgPSBjYWxjdWxhdGVNYXJrZXJCb3VuZHNJZk5lZWRlZCgpOwotICAgICAgICBpZiAoIW1hcmtl
ckJvdW5kcy5pc0VtcHR5KCkpCi0gICAgICAgICAgICBtX3N0cm9rZUFuZE1hcmtlckJvdW5kaW5n
Qm94LnVuaXRlKG1hcmtlckJvdW5kcyk7CisgICAgICAgIGlmICghbWFya2VyQm91bmRzLmlzRW1w
dHkoKSkgeworICAgICAgICAgICAgRmxvYXRSZWN0IHN0cm9rZVJlY3Qoc3Ryb2tlQm91bmRpbmdC
b3goKSk7CisgICAgICAgICAgICBzdHJva2VSZWN0LnVuaXRlKG1hcmtlckJvdW5kcyk7CisgICAg
ICAgICAgICBzZXRTdHJva2VBbmRNYXJrZXJCb3VuZGluZ0JveChzdHJva2VSZWN0KTsKKyAgICAg
ICAgfQogICAgIH0KLQotICAgIC8vIENhY2hlIHNtYWxsZXN0IHBvc3NpYmxlIHJlcGFpbnQgcmVj
dGFuZ2xlCi0gICAgbV9yZXBhaW50Qm91bmRpbmdCb3ggPSBtX3N0cm9rZUFuZE1hcmtlckJvdW5k
aW5nQm94OwotICAgIFNWR1JlbmRlclN1cHBvcnQ6OmludGVyc2VjdFJlcGFpbnRSZWN0V2l0aFJl
c291cmNlcyh0aGlzLCBtX3JlcGFpbnRCb3VuZGluZ0JveCk7CiB9CiAKIH0KZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUGF0aC5oIGIvU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdQYXRoLmgKaW5kZXggOThlNjA4ZC4uNjBmZWU5
OCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdQYXRo
LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdQYXRoLmgKQEAg
LTQsNiArNCw4IEBACiAgKiBDb3B5cmlnaHQgKEMpIDIwMDUgRXJpYyBTZWlkZWwgPGVyaWNAd2Vi
a2l0Lm9yZz4KICAqIENvcHlyaWdodCAoQykgMjAwNiBBcHBsZSBDb21wdXRlciwgSW5jCiAgKiBD
b3B5cmlnaHQgKEMpIDIwMDkgR29vZ2xlLCBJbmMuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgUmVu
YXRhIEhvZG92YW4gPHJlbmlAd2Via2l0Lm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAxMSBVbml2
ZXJzaXR5IG9mIFN6ZWdlZAogICoKICAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5
b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVy
bXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCkBAIC0yNSw4NiArMjcsMjIgQEAK
ICNkZWZpbmUgUmVuZGVyU1ZHUGF0aF9oCiAKICNpZiBFTkFCTEUoU1ZHKQotI2luY2x1ZGUgIkFm
ZmluZVRyYW5zZm9ybS5oIgotI2luY2x1ZGUgIkZsb2F0UmVjdC5oIgotI2luY2x1ZGUgIlJlbmRl
clNWR01vZGVsT2JqZWN0LmgiCi0jaW5jbHVkZSAiU1ZHTWFya2VyTGF5b3V0SW5mby5oIgorI2lu
Y2x1ZGUgIlJlbmRlclNWR1NoYXBlLmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotY2xhc3Mg
RmxvYXRQb2ludDsKLWNsYXNzIEdyYXBoaWNzQ29udGV4dFN0YXRlU2F2ZXI7Ci1jbGFzcyBSZW5k
ZXJTVkdDb250YWluZXI7Ci1jbGFzcyBTVkdTdHlsZWRUcmFuc2Zvcm1hYmxlRWxlbWVudDsKLQot
Y2xhc3MgUmVuZGVyU1ZHUGF0aCA6IHB1YmxpYyBSZW5kZXJTVkdNb2RlbE9iamVjdCB7CitjbGFz
cyBSZW5kZXJTVkdQYXRoIDogcHVibGljIFJlbmRlclNWR1NoYXBlIHsKIHB1YmxpYzoKLSAgICBl
eHBsaWNpdCBSZW5kZXJTVkdQYXRoKFNWR1N0eWxlZFRyYW5zZm9ybWFibGVFbGVtZW50Kik7Cisg
ICAgUmVuZGVyU1ZHUGF0aChTVkdTdHlsZWRUcmFuc2Zvcm1hYmxlRWxlbWVudCopOwogICAgIHZp
cnR1YWwgflJlbmRlclNWR1BhdGgoKTsKIAotICAgIGNvbnN0IFBhdGgmIHBhdGgoKSBjb25zdCB7
IHJldHVybiBtX3BhdGg7IH0KLSAgICB2b2lkIHNldE5lZWRzUGF0aFVwZGF0ZSgpIHsgbV9uZWVk
c1BhdGhVcGRhdGUgPSB0cnVlOyB9Ci0gICAgdmlydHVhbCB2b2lkIHNldE5lZWRzQm91bmRhcmll
c1VwZGF0ZSgpIHsgbV9uZWVkc0JvdW5kYXJpZXNVcGRhdGUgPSB0cnVlOyB9Ci0gICAgdmlydHVh
bCB2b2lkIHNldE5lZWRzVHJhbnNmb3JtVXBkYXRlKCkgeyBtX25lZWRzVHJhbnNmb3JtVXBkYXRl
ID0gdHJ1ZTsgfQotCiBwcml2YXRlOgotICAgIC8vIEhpdC1kZXRlY3Rpb24gc2VwZXJhdGVkIGZv
ciB0aGUgZmlsbCBhbmQgdGhlIHN0cm9rZQotICAgIGJvb2wgZmlsbENvbnRhaW5zKGNvbnN0IEZs
b2F0UG9pbnQmLCBib29sIHJlcXVpcmVzRmlsbCA9IHRydWUsIFdpbmRSdWxlIGZpbGxSdWxlID0g
UlVMRV9OT05aRVJPKTsKLSAgICBib29sIHN0cm9rZUNvbnRhaW5zKGNvbnN0IEZsb2F0UG9pbnQm
LCBib29sIHJlcXVpcmVzU3Ryb2tlID0gdHJ1ZSk7Ci0KLSAgICB2aXJ0dWFsIEZsb2F0UmVjdCBv
YmplY3RCb3VuZGluZ0JveCgpIGNvbnN0IHsgcmV0dXJuIG1fZmlsbEJvdW5kaW5nQm94OyB9Ci0g
ICAgdmlydHVhbCBGbG9hdFJlY3Qgc3Ryb2tlQm91bmRpbmdCb3goKSBjb25zdCB7IHJldHVybiBt
X3N0cm9rZUFuZE1hcmtlckJvdW5kaW5nQm94OyB9Ci0gICAgdmlydHVhbCBGbG9hdFJlY3QgcmVw
YWludFJlY3RJbkxvY2FsQ29vcmRpbmF0ZXMoKSBjb25zdCB7IHJldHVybiBtX3JlcGFpbnRCb3Vu
ZGluZ0JveDsgfQotICAgIHZpcnR1YWwgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiBsb2NhbFRvUGFy
ZW50VHJhbnNmb3JtKCkgY29uc3QgeyByZXR1cm4gbV9sb2NhbFRyYW5zZm9ybTsgfQotCiAgICAg
dmlydHVhbCBib29sIGlzU1ZHUGF0aCgpIGNvbnN0IHsgcmV0dXJuIHRydWU7IH0KICAgICB2aXJ0
dWFsIGNvbnN0IGNoYXIqIHJlbmRlck5hbWUoKSBjb25zdCB7IHJldHVybiAiUmVuZGVyU1ZHUGF0
aCI7IH0KIAotICAgIHZpcnR1YWwgdm9pZCBsYXlvdXQoKTsKLSAgICB2aXJ0dWFsIHZvaWQgcGFp
bnQoUGFpbnRJbmZvJiwgY29uc3QgTGF5b3V0UG9pbnQmKTsKLSAgICB2aXJ0dWFsIHZvaWQgYWRk
Rm9jdXNSaW5nUmVjdHMoVmVjdG9yPExheW91dFJlY3Q+JiwgY29uc3QgTGF5b3V0UG9pbnQmKTsK
LQotICAgIHZpcnR1YWwgYm9vbCBub2RlQXRGbG9hdFBvaW50KGNvbnN0IEhpdFRlc3RSZXF1ZXN0
JiwgSGl0VGVzdFJlc3VsdCYsIGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50SW5QYXJlbnQsIEhpdFRl
c3RBY3Rpb24pOwotCi0gICAgRmxvYXRSZWN0IGNhbGN1bGF0ZU1hcmtlckJvdW5kc0lmTmVlZGVk
KCk7Ci0gICAgdm9pZCB1cGRhdGVDYWNoZWRCb3VuZGFyaWVzKCk7Ci0KLSAgICB2b2lkIHNldHVw
U3F1YXJlQ2FwUGF0aChQYXRoKiYgdXNlUGF0aCwgaW50JiBhcHBseU1vZGUpOwotICAgIGJvb2wg
c2V0dXBOb25TY2FsaW5nU3Ryb2tlUGF0aChQYXRoKiYgdXNlUGF0aCwgR3JhcGhpY3NDb250ZXh0
U3RhdGVTYXZlciYpOwotICAgIGJvb2wgc2hvdWxkU3Ryb2tlWmVyb0xlbmd0aFN1YnBhdGgoKSBj
b25zdDsKLSAgICBGbG9hdFJlY3QgemVyb0xlbmd0aFN1YnBhdGhSZWN0KCkgY29uc3Q7Ci0KLXBy
aXZhdGU6Ci0gICAgdmlydHVhbCBBZmZpbmVUcmFuc2Zvcm0gbG9jYWxUcmFuc2Zvcm0oKSBjb25z
dCB7IHJldHVybiBtX2xvY2FsVHJhbnNmb3JtOyB9Ci0gICAgdm9pZCBmaWxsQW5kU3Ryb2tlUGF0
aChHcmFwaGljc0NvbnRleHQqKTsKLQotICAgIGJvb2wgbV9uZWVkc0JvdW5kYXJpZXNVcGRhdGUg
OiAxOwotICAgIGJvb2wgbV9uZWVkc1BhdGhVcGRhdGUgOiAxOwotICAgIGJvb2wgbV9uZWVkc1Ry
YW5zZm9ybVVwZGF0ZSA6IDE7Ci0KLSAgICBtdXRhYmxlIFBhdGggbV9wYXRoOwotICAgIEZsb2F0
UmVjdCBtX2ZpbGxCb3VuZGluZ0JveDsKLSAgICBGbG9hdFJlY3QgbV9zdHJva2VBbmRNYXJrZXJC
b3VuZGluZ0JveDsKLSAgICBGbG9hdFJlY3QgbV9yZXBhaW50Qm91bmRpbmdCb3g7Ci0gICAgU1ZH
TWFya2VyTGF5b3V0SW5mbyBtX21hcmtlckxheW91dEluZm87Ci0gICAgQWZmaW5lVHJhbnNmb3Jt
IG1fbG9jYWxUcmFuc2Zvcm07CisgICAgdmlydHVhbCB2b2lkIGluZmxhdGVXaXRoTWFya2VyQm91
bmRzKCk7CiB9OwogCi1pbmxpbmUgUmVuZGVyU1ZHUGF0aCogdG9SZW5kZXJTVkdQYXRoKFJlbmRl
ck9iamVjdCogb2JqZWN0KQotewotICAgIEFTU0VSVCghb2JqZWN0IHx8IG9iamVjdC0+aXNTVkdQ
YXRoKCkpOwotICAgIHJldHVybiBzdGF0aWNfY2FzdDxSZW5kZXJTVkdQYXRoKj4ob2JqZWN0KTsK
LX0KLQotaW5saW5lIGNvbnN0IFJlbmRlclNWR1BhdGgqIHRvUmVuZGVyU1ZHUGF0aChjb25zdCBS
ZW5kZXJPYmplY3QqIG9iamVjdCkKLXsKLSAgICBBU1NFUlQoIW9iamVjdCB8fCBvYmplY3QtPmlz
U1ZHUGF0aCgpKTsKLSAgICByZXR1cm4gc3RhdGljX2Nhc3Q8Y29uc3QgUmVuZGVyU1ZHUGF0aCo+
KG9iamVjdCk7Ci19Ci0KLS8vIFRoaXMgd2lsbCBjYXRjaCBhbnlvbmUgZG9pbmcgYW4gdW5uZWNl
c3NhcnkgY2FzdC4KLXZvaWQgdG9SZW5kZXJTVkdQYXRoKGNvbnN0IFJlbmRlclNWR1BhdGgqKTsK
LQogfQogCiAjZW5kaWYgLy8gRU5BQkxFKFNWRykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVjdC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvc3ZnL1JlbmRlclNWR1JlY3QuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw
MDAuLjgyMzRlYWIKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
c3ZnL1JlbmRlclNWR1JlY3QuY3BwCkBAIC0wLDAgKzEsMTE2IEBACisvKgorICogQ29weXJpZ2h0
IChDKSAyMDExIFVuaXZlcnNpdHkgb2YgU3plZ2VkCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgUmVu
YXRhIEhvZG92YW4gKHJlbmlAd2Via2l0Lm9yZykKKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBVTklWRVJTSVRZIE9G
IFNaRUdFRCBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFVOSVZFUlNJVFkgT0Yg
U1pFR0VEIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgor
ICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisg
Ki8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorCisjaWYgRU5BQkxFKFNWRykKKyNpbmNsdWRlICJS
ZW5kZXJTVkdSZWN0LmgiCisKKyNpbmNsdWRlICJTVkdOYW1lcy5oIgorI2luY2x1ZGUgIlNWR1Jl
Y3RFbGVtZW50LmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworUmVuZGVyU1ZHUmVjdDo6UmVu
ZGVyU1ZHUmVjdChTVkdTdHlsZWRUcmFuc2Zvcm1hYmxlRWxlbWVudCogbm9kZSkKKyAgICA6IFJl
bmRlclNWR1NoYXBlKG5vZGUpCit7Cit9CisKK1JlbmRlclNWR1JlY3Q6On5SZW5kZXJTVkdSZWN0
KCkKK3sKK30KKwordm9pZCBSZW5kZXJTVkdSZWN0OjpjcmVhdGVTaGFwZSgpCit7CisgICAgLy8g
QmVmb3JlIGNyZWF0aW5nIGEgbmV3IG9iamVjdCB3ZSBuZWVkIHRvIGNsZWFyIHRoZSBjYWNoZWQg
Ym91bmRpbmcgYm94CisgICAgLy8gdG8gYXZvaWQgdXNpbmcgZ2FyYmFnZS4KKyAgICBtX2JvdW5k
aW5nQm94ID0gRmxvYXRSZWN0KCk7CisgICAgU1ZHUmVjdEVsZW1lbnQqIHJlY3QgPSBzdGF0aWNf
Y2FzdDxTVkdSZWN0RWxlbWVudCo+KG5vZGUoKSk7CisgICAgQVNTRVJUKHJlY3QpOworCisgICAg
Ly8gRmFsbGJhY2sgdG8gUmVuZGVyU1ZHU2hhcGUgaWYgcmVjdCBoYXMgcm91bmRlZCBjb3JuZXJz
LgorICAgIGlmIChyZWN0LT5oYXNBdHRyaWJ1dGUoU1ZHTmFtZXM6OnJ4QXR0cikgfHwgcmVjdC0+
aGFzQXR0cmlidXRlKFNWR05hbWVzOjpyeUF0dHIpKSB7CisgICAgICAgUmVuZGVyU1ZHU2hhcGU6
OmNyZWF0ZVNoYXBlKCk7CisgICAgICAgc2V0SXNQYWludGluZ0ZhbGxiYWNrKHRydWUpOworICAg
ICAgIHJldHVybjsKKyAgICB9CisKKyAgICBGbG9hdFNpemUgYm91bmRpbmdCb3hTaXplKHJlY3Qt
PndpZHRoKCkudmFsdWUocmVjdCksIHJlY3QtPmhlaWdodCgpLnZhbHVlKHJlY3QpKTsKKyAgICBp
ZiAoYm91bmRpbmdCb3hTaXplLmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgbV9i
b3VuZGluZ0JveCA9IEZsb2F0UmVjdChGbG9hdFBvaW50KHJlY3QtPngoKS52YWx1ZShyZWN0KSwg
cmVjdC0+eSgpLnZhbHVlKHJlY3QpKSwgYm91bmRpbmdCb3hTaXplKTsKKworICAgIC8vIFRvIGRl
Y2lkZSBpZiB0aGUgc3Ryb2tlIGNvbnRhaW5zIGEgcG9pbnQgd2UgY3JlYXRlIHR3byByZWN0cyB3
aGljaCByZXByZXNlbnQgdGhlIGlubmVyIGFuZAorICAgIC8vIHRoZSBvdXRlciBzdHJva2UgYm9y
ZGVycy4gQSBzdHJva2UgY29udGFpbnMgdGhlIHBvaW50LCBpZiB0aGUgcG9pbnQgaXMgYmV0d2Vl
biB0aGVtLgorICAgIGZsb2F0IHN0cm9rZVdpZHRoID0gdGhpcy0+c3Ryb2tlV2lkdGgoKTsKKyAg
ICBtX2lubmVyU3Ryb2tlUmVjdCA9IG1fYm91bmRpbmdCb3g7CisgICAgbV9vdXRlclN0cm9rZVJl
Y3QgPSBtX2JvdW5kaW5nQm94OworICAgIG1faW5uZXJTdHJva2VSZWN0LmluZmxhdGUoLXN0cm9r
ZVdpZHRoIC8gMik7CisgICAgbV9vdXRlclN0cm9rZVJlY3QuaW5mbGF0ZShzdHJva2VXaWR0aCAv
IDIpOworfQorCisKK0Zsb2F0UmVjdCBSZW5kZXJTVkdSZWN0OjpvYmplY3RCb3VuZGluZ0JveCgp
IGNvbnN0Cit7CisgICAgaWYgKGlzUGFpbnRpbmdGYWxsYmFjaygpKQorICAgICAgICByZXR1cm4g
UmVuZGVyU1ZHU2hhcGU6Om9iamVjdEJvdW5kaW5nQm94KCk7CisgICAgcmV0dXJuIG1fYm91bmRp
bmdCb3g7Cit9CisKK0Zsb2F0UmVjdCBSZW5kZXJTVkdSZWN0OjpzdHJva2VCb3VuZGluZ0JveCgp
IGNvbnN0Cit7CisgICAgaWYgKGlzUGFpbnRpbmdGYWxsYmFjaygpICYmICFzdHlsZSgpLT5zdmdT
dHlsZSgpLT5zdHJva2VEYXNoQXJyYXkoKS5pc0VtcHR5KCkpCisgICAgICAgIHJldHVybiBSZW5k
ZXJTVkdTaGFwZTo6c3Ryb2tlQm91bmRpbmdCb3goKTsKKyAgICByZXR1cm4gbV9vdXRlclN0cm9r
ZVJlY3Q7Cit9CisKK3ZvaWQgUmVuZGVyU1ZHUmVjdDo6ZmlsbFNoYXBlKEdyYXBoaWNzQ29udGV4
dCogY29udGV4dCkgY29uc3QKK3sKKyAgICAgY29udGV4dC0+ZmlsbFJlY3QobV9ib3VuZGluZ0Jv
eCk7Cit9CisKK3ZvaWQgUmVuZGVyU1ZHUmVjdDo6c3Ryb2tlU2hhcGUoR3JhcGhpY3NDb250ZXh0
KiBjb250ZXh0KSBjb25zdAoreworICAgIGNvbnRleHQtPnN0cm9rZVJlY3QobV9ib3VuZGluZ0Jv
eCwgc3Ryb2tlV2lkdGgoKSk7Cit9CisKK2Jvb2wgUmVuZGVyU1ZHUmVjdDo6c2hhcGVEZXBlbmRl
bnRTdHJva2VDb250YWlucyhjb25zdCBGbG9hdFBvaW50JiBwb2ludCkgY29uc3QKK3sKKyAgICBy
ZXR1cm4gIW1faW5uZXJTdHJva2VSZWN0LmNvbnRhaW5zKHBvaW50LCBGbG9hdFJlY3Q6OkNvbnRh
aW5zUmVjdCk7Cit9CisKK2Jvb2wgUmVuZGVyU1ZHUmVjdDo6c2hhcGVEZXBlbmRlbnRGaWxsQ29u
dGFpbnMoY29uc3QgRmxvYXRQb2ludCYgcG9pbnQsIGNvbnN0IFdpbmRSdWxlIGZpbGxSdWxlKSBj
b25zdAoreworICAgIGlmIChpc1BhaW50aW5nRmFsbGJhY2soKSkKKyAgICAgICAgcmV0dXJuIFJl
bmRlclNWR1NoYXBlOjpzaGFwZURlcGVuZGVudEZpbGxDb250YWlucyhwb2ludCwgZmlsbFJ1bGUp
OworICAgIHJldHVybiBtX2JvdW5kaW5nQm94LmNvbnRhaW5zKHBvaW50LngoKSwgcG9pbnQueSgp
KTsKK30KKworfQorCisjZW5kaWYgLy8gRU5BQkxFKFNWRykKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVjdC5oIGIvU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZWN0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw
MDAwMC4uNGE4NjgxNQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9zdmcvUmVuZGVyU1ZHUmVjdC5oCkBAIC0wLDAgKzEsNjMgQEAKKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTEgVW5pdmVyc2l0eSBvZiBTemVnZWQKKyAqIENvcHlyaWdodCAoQykgMjAxMSBSZW5h
dGEgSG9kb3ZhbiAocmVuaUB3ZWJraXQub3JnKQorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFVOSVZFUlNJVFkgT0Yg
U1pFR0VEIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVU5JVkVSU0lUWSBPRiBT
WkVHRUQgT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisg
KiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAq
LworCisjaWZuZGVmIFJlbmRlclNWR1JlY3RfaAorI2RlZmluZSBSZW5kZXJTVkdSZWN0X2gKKwor
I2lmIEVOQUJMRShTVkcpCisjaW5jbHVkZSAiUmVuZGVyU1ZHUGF0aC5oIgorCituYW1lc3BhY2Ug
V2ViQ29yZSB7CisKK2NsYXNzIFJlbmRlclNWR1JlY3QgOiBwdWJsaWMgUmVuZGVyU1ZHU2hhcGUg
eworcHVibGljOgorICAgIGV4cGxpY2l0IFJlbmRlclNWR1JlY3QoU1ZHU3R5bGVkVHJhbnNmb3Jt
YWJsZUVsZW1lbnQqKTsKKyAgICB2aXJ0dWFsIH5SZW5kZXJTVkdSZWN0KCk7CisKK3ByaXZhdGU6
CisgICAgdmlydHVhbCBib29sIGlzU1ZHUmVjdCgpIGNvbnN0IHsgcmV0dXJuIHRydWU7IH0KKyAg
ICB2aXJ0dWFsIGNvbnN0IGNoYXIqIHJlbmRlck5hbWUoKSBjb25zdCB7IHJldHVybiAiUmVuZGVy
U1ZHUmVjdCI7IH0KKworICAgIHZpcnR1YWwgdm9pZCBjcmVhdGVTaGFwZSgpOworICAgIHZpcnR1
YWwgYm9vbCBpc0VtcHR5KCkgY29uc3QgeyByZXR1cm4gaGFzUGF0aCgpID8gUmVuZGVyU1ZHU2hh
cGU6OmlzRW1wdHkoKSA6IG1fYm91bmRpbmdCb3guaXNFbXB0eSgpOyB9OworICAgIHZpcnR1YWwg
dm9pZCBmaWxsU2hhcGUoR3JhcGhpY3NDb250ZXh0KikgY29uc3Q7CisgICAgdmlydHVhbCB2b2lk
IHN0cm9rZVNoYXBlKEdyYXBoaWNzQ29udGV4dCopIGNvbnN0OworICAgIHZpcnR1YWwgRmxvYXRS
ZWN0IG9iamVjdEJvdW5kaW5nQm94KCkgY29uc3Q7CisgICAgdmlydHVhbCBGbG9hdFJlY3Qgc3Ry
b2tlQm91bmRpbmdCb3goKSBjb25zdDsKKyAgICB2aXJ0dWFsIGJvb2wgc2hhcGVEZXBlbmRlbnRT
dHJva2VDb250YWlucyhjb25zdCBGbG9hdFBvaW50JikgY29uc3Q7CisgICAgdmlydHVhbCBib29s
IHNoYXBlRGVwZW5kZW50RmlsbENvbnRhaW5zKGNvbnN0IEZsb2F0UG9pbnQmLCBjb25zdCBXaW5k
UnVsZSkgY29uc3Q7CisKK3ByaXZhdGU6CisgICAgRmxvYXRSZWN0IG1fYm91bmRpbmdCb3g7Cisg
ICAgRmxvYXRSZWN0IG1faW5uZXJTdHJva2VSZWN0OworICAgIEZsb2F0UmVjdCBtX291dGVyU3Ry
b2tlUmVjdDsKK307CisKK30KKworI2VuZGlmIC8vIEVOQUJMRShTVkcpCisjZW5kaWYKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2UuaCBi
L1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2UuaAppbmRleCBh
NjdiYTczLi5lMDIwMTU0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3Zn
L1JlbmRlclNWR1Jlc291cmNlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9S
ZW5kZXJTVkdSZXNvdXJjZS5oCkBAIC0yMSw2ICsyMSw3IEBACiAjZGVmaW5lIFJlbmRlclNWR1Jl
c291cmNlX2gKIAogI2lmIEVOQUJMRShTVkcpCisjaW5jbHVkZSAiUmVuZGVyU1ZHU2hhcGUuaCIK
ICNpbmNsdWRlICJSZW5kZXJTdHlsZUNvbnN0YW50cy5oIgogI2luY2x1ZGUgIlNWR0RvY3VtZW50
RXh0ZW5zaW9ucy5oIgogCkBAIC02MSw3ICs2Miw3IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIHZv
aWQgcmVtb3ZlQ2xpZW50RnJvbUNhY2hlKFJlbmRlck9iamVjdCosIGJvb2wgbWFya0ZvckludmFs
aWRhdGlvbiA9IHRydWUpID0gMDsKIAogICAgIHZpcnR1YWwgYm9vbCBhcHBseVJlc291cmNlKFJl
bmRlck9iamVjdCosIFJlbmRlclN0eWxlKiwgR3JhcGhpY3NDb250ZXh0KiYsIHVuc2lnbmVkIHNo
b3J0IHJlc291cmNlTW9kZSkgPSAwOwotICAgIHZpcnR1YWwgdm9pZCBwb3N0QXBwbHlSZXNvdXJj
ZShSZW5kZXJPYmplY3QqLCBHcmFwaGljc0NvbnRleHQqJiwgdW5zaWduZWQgc2hvcnQsIGNvbnN0
IFBhdGgqKSB7IH0KKyAgICB2aXJ0dWFsIHZvaWQgcG9zdEFwcGx5UmVzb3VyY2UoUmVuZGVyT2Jq
ZWN0KiwgR3JhcGhpY3NDb250ZXh0KiYsIHVuc2lnbmVkIHNob3J0LCBjb25zdCBQYXRoKiwgY29u
c3QgUmVuZGVyU1ZHU2hhcGUqKSB7IH0KICAgICB2aXJ0dWFsIEZsb2F0UmVjdCByZXNvdXJjZUJv
dW5kaW5nQm94KFJlbmRlck9iamVjdCopID0gMDsKIAogICAgIHZpcnR1YWwgUmVuZGVyU1ZHUmVz
b3VyY2VUeXBlIHJlc291cmNlVHlwZSgpIGNvbnN0ID0gMDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VDbGlwcGVyLmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VDbGlwcGVyLmNwcAppbmRl
eCAyMzhjMDk2Li4xZDgyMTIxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
c3ZnL1JlbmRlclNWR1Jlc291cmNlQ2xpcHBlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJjZUNsaXBwZXIuY3BwCkBAIC0yNDIsNyArMjQyLDcg
QEAgYm9vbCBSZW5kZXJTVkdSZXNvdXJjZUNsaXBwZXI6OmRyYXdDb250ZW50SW50b01hc2tJbWFn
ZShDbGlwcGVyRGF0YSogY2xpcHBlckRhdGEKICAgICAgICAgfQogCiAgICAgICAgIC8vIE9ubHkg
c2hhcGVzLCBwYXRocyBhbmQgdGV4dHMgYXJlIGFsbG93ZWQgZm9yIGNsaXBwaW5nLgotICAgICAg
ICBpZiAoIXJlbmRlcmVyLT5pc1NWR1BhdGgoKSAmJiAhcmVuZGVyZXItPmlzU1ZHVGV4dCgpKQor
ICAgICAgICBpZiAoIXJlbmRlcmVyLT5pc1NWR1NoYXBlKCkgJiYgIXJlbmRlcmVyLT5pc1NWR1Rl
eHQoKSkKICAgICAgICAgICAgIGNvbnRpbnVlOwogCiAgICAgICAgIC8vIFNhdmUgdGhlIG9sZCBS
ZW5kZXJTdHlsZSBvZiB0aGUgY3VycmVudCBvYmplY3QgZm9yIHJlc3RvcmluZyBhZnRlciBkcmF3
aW5nCkBAIC0yODQsNyArMjg0LDcgQEAgdm9pZCBSZW5kZXJTVkdSZXNvdXJjZUNsaXBwZXI6OmNh
bGN1bGF0ZUNsaXBDb250ZW50UmVwYWludFJlY3QoKQogICAgICAgICBSZW5kZXJPYmplY3QqIHJl
bmRlcmVyID0gY2hpbGROb2RlLT5yZW5kZXJlcigpOwogICAgICAgICBpZiAoIWNoaWxkTm9kZS0+
aXNTVkdFbGVtZW50KCkgfHwgIXN0YXRpY19jYXN0PFNWR0VsZW1lbnQqPihjaGlsZE5vZGUpLT5p
c1N0eWxlZCgpIHx8ICFyZW5kZXJlcikKICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICBp
ZiAoIXJlbmRlcmVyLT5pc1NWR1BhdGgoKSAmJiAhcmVuZGVyZXItPmlzU1ZHVGV4dCgpICYmICFy
ZW5kZXJlci0+aXNTVkdTaGFkb3dUcmVlUm9vdENvbnRhaW5lcigpKQorICAgICAgICBpZiAoIXJl
bmRlcmVyLT5pc1NWR1NoYXBlKCkgJiYgIXJlbmRlcmVyLT5pc1NWR1RleHQoKSAmJiAhcmVuZGVy
ZXItPmlzU1ZHU2hhZG93VHJlZVJvb3RDb250YWluZXIoKSkKICAgICAgICAgICAgIGNvbnRpbnVl
OwogICAgICAgICBSZW5kZXJTdHlsZSogc3R5bGUgPSByZW5kZXJlci0+c3R5bGUoKTsKICAgICAg
ICAgaWYgKCFzdHlsZSB8fCBzdHlsZS0+ZGlzcGxheSgpID09IE5PTkUgfHwgc3R5bGUtPnZpc2li
aWxpdHkoKSAhPSBWSVNJQkxFKQpAQCAtMzEwLDcgKzMxMCw3IEBAIGJvb2wgUmVuZGVyU1ZHUmVz
b3VyY2VDbGlwcGVyOjpoaXRUZXN0Q2xpcENvbnRlbnQoY29uc3QgRmxvYXRSZWN0JiBvYmplY3RC
b3VuZGluCiAgICAgICAgIFJlbmRlck9iamVjdCogcmVuZGVyZXIgPSBjaGlsZE5vZGUtPnJlbmRl
cmVyKCk7CiAgICAgICAgIGlmICghY2hpbGROb2RlLT5pc1NWR0VsZW1lbnQoKSB8fCAhc3RhdGlj
X2Nhc3Q8U1ZHRWxlbWVudCo+KGNoaWxkTm9kZSktPmlzU3R5bGVkKCkgfHwgIXJlbmRlcmVyKQog
ICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIGlmICghcmVuZGVyZXItPmlzU1ZHUGF0aCgp
ICYmICFyZW5kZXJlci0+aXNTVkdUZXh0KCkgJiYgIXJlbmRlcmVyLT5pc1NWR1NoYWRvd1RyZWVS
b290Q29udGFpbmVyKCkpCisgICAgICAgIGlmICghcmVuZGVyZXItPmlzU1ZHU2hhcGUoKSAmJiAh
cmVuZGVyZXItPmlzU1ZHVGV4dCgpICYmICFyZW5kZXJlci0+aXNTVkdTaGFkb3dUcmVlUm9vdENv
bnRhaW5lcigpKQogICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgIEludFBvaW50IGhpdFBv
aW50OwogICAgICAgICBIaXRUZXN0UmVzdWx0IHJlc3VsdChoaXRQb2ludCk7CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291cmNlQ29udGFpbmVy
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VDb250
YWluZXIuY3BwCmluZGV4IDc0ZDVkNjkuLmI3NGFkNmIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VDb250YWluZXIuY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VDb250YWluZXIuY3Bw
CkBAIC0xODAsNyArMTgwLDcgQEAgdm9pZCBSZW5kZXJTVkdSZXNvdXJjZUNvbnRhaW5lcjo6cmVn
aXN0ZXJSZXNvdXJjZSgpCiAvLyBGSVhNRTogVGhpcyBkb2VzIG5vdCBiZWxvbmcgaGVyZS4KIEFm
ZmluZVRyYW5zZm9ybSBSZW5kZXJTVkdSZXNvdXJjZUNvbnRhaW5lcjo6dHJhbnNmb3JtT25Ob25T
Y2FsaW5nU3Ryb2tlKFJlbmRlck9iamVjdCogb2JqZWN0LCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0m
IHJlc291cmNlVHJhbnNmb3JtKQogewotICAgIGlmICghb2JqZWN0LT5pc1NWR1BhdGgoKSkKKyAg
ICBpZiAoIW9iamVjdC0+aXNTVkdTaGFwZSgpKQogICAgICAgICByZXR1cm4gcmVzb3VyY2VUcmFu
c2Zvcm07CiAKICAgICBTVkdTdHlsZWRUcmFuc2Zvcm1hYmxlRWxlbWVudCogZWxlbWVudCA9IHN0
YXRpY19jYXN0PFNWR1N0eWxlZFRyYW5zZm9ybWFibGVFbGVtZW50Kj4ob2JqZWN0LT5ub2RlKCkp
OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNv
dXJjZUZpbHRlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jl
c291cmNlRmlsdGVyLmNwcAppbmRleCA2ODkzNWRhLi44NWZmMWE3IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291cmNlRmlsdGVyLmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291cmNlRmlsdGVyLmNw
cApAQCAtMjU5LDE2ICsyNTksMTUgQEAgYm9vbCBSZW5kZXJTVkdSZXNvdXJjZUZpbHRlcjo6YXBw
bHlSZXNvdXJjZShSZW5kZXJPYmplY3QqIG9iamVjdCwgUmVuZGVyU3R5bGUqLAogICAgIHJldHVy
biB0cnVlOwogfQogCi12b2lkIFJlbmRlclNWR1Jlc291cmNlRmlsdGVyOjpwb3N0QXBwbHlSZXNv
dXJjZShSZW5kZXJPYmplY3QqIG9iamVjdCwgR3JhcGhpY3NDb250ZXh0KiYgY29udGV4dCwgdW5z
aWduZWQgc2hvcnQgcmVzb3VyY2VNb2RlLCBjb25zdCBQYXRoKikKK3ZvaWQgUmVuZGVyU1ZHUmVz
b3VyY2VGaWx0ZXI6OnBvc3RBcHBseVJlc291cmNlKFJlbmRlck9iamVjdCogb2JqZWN0LCBHcmFw
aGljc0NvbnRleHQqJiBjb250ZXh0LCB1bnNpZ25lZCBzaG9ydCByZXNvdXJjZU1vZGUsIGNvbnN0
IFBhdGgqLCBjb25zdCBSZW5kZXJTVkdTaGFwZSopCiB7Ci0gICAgQVNTRVJUKG9iamVjdCk7Cisg
ICAgQVNTRVJUKHNoYXBlKTsKICAgICBBU1NFUlQoY29udGV4dCk7CiAjaWZuZGVmIE5ERUJVRwog
ICAgIEFTU0VSVChyZXNvdXJjZU1vZGUgPT0gQXBwbHlUb0RlZmF1bHRNb2RlKTsKICNlbHNlCiAg
ICAgVU5VU0VEX1BBUkFNKHJlc291cmNlTW9kZSk7CiAjZW5kaWYKLQogICAgIEZpbHRlckRhdGEq
IGZpbHRlckRhdGEgPSBtX2ZpbHRlci5nZXQob2JqZWN0KTsKICAgICBpZiAoIWZpbHRlckRhdGEp
CiAgICAgICAgIHJldHVybjsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9z
dmcvUmVuZGVyU1ZHUmVzb3VyY2VGaWx0ZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9z
dmcvUmVuZGVyU1ZHUmVzb3VyY2VGaWx0ZXIuaAppbmRleCA1YTViMDkyLi5mZjYxYjcxIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291cmNlRmls
dGVyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJj
ZUZpbHRlci5oCkBAIC03Miw3ICs3Miw3IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIHZvaWQgcmVt
b3ZlQ2xpZW50RnJvbUNhY2hlKFJlbmRlck9iamVjdCosIGJvb2wgbWFya0ZvckludmFsaWRhdGlv
biA9IHRydWUpOwogCiAgICAgdmlydHVhbCBib29sIGFwcGx5UmVzb3VyY2UoUmVuZGVyT2JqZWN0
KiwgUmVuZGVyU3R5bGUqLCBHcmFwaGljc0NvbnRleHQqJiwgdW5zaWduZWQgc2hvcnQgcmVzb3Vy
Y2VNb2RlKTsKLSAgICB2aXJ0dWFsIHZvaWQgcG9zdEFwcGx5UmVzb3VyY2UoUmVuZGVyT2JqZWN0
KiwgR3JhcGhpY3NDb250ZXh0KiYsIHVuc2lnbmVkIHNob3J0IHJlc291cmNlTW9kZSwgY29uc3Qg
UGF0aCopOworICAgIHZpcnR1YWwgdm9pZCBwb3N0QXBwbHlSZXNvdXJjZShSZW5kZXJPYmplY3Qq
LCBHcmFwaGljc0NvbnRleHQqJiwgdW5zaWduZWQgc2hvcnQgcmVzb3VyY2VNb2RlLCBjb25zdCBQ
YXRoKiwgY29uc3QgUmVuZGVyU1ZHU2hhcGUqKTsKIAogICAgIHZpcnR1YWwgRmxvYXRSZWN0IHJl
c291cmNlQm91bmRpbmdCb3goUmVuZGVyT2JqZWN0Kik7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VHcmFkaWVudC5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291cmNlR3JhZGllbnQuY3BwCmlu
ZGV4IDFhYWI5MzUuLjU1OWIyNzkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VHcmFkaWVudC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJjZUdyYWRpZW50LmNwcApAQCAtMjcsNiArMjcs
NyBAQAogCiAjaW5jbHVkZSAiR3JhZGllbnRBdHRyaWJ1dGVzLmgiCiAjaW5jbHVkZSAiR3JhcGhp
Y3NDb250ZXh0LmgiCisjaW5jbHVkZSAiUmVuZGVyU1ZHU2hhcGUuaCIKICNpbmNsdWRlICJSZW5k
ZXJTVkdUZXh0LmgiCiAjaW5jbHVkZSAiU1ZHSW1hZ2VCdWZmZXJUb29scy5oIgogI2luY2x1ZGUg
IlNWR1JlbmRlclN1cHBvcnQuaCIKQEAgLTIzMSw3ICsyMzIsNyBAQCBib29sIFJlbmRlclNWR1Jl
c291cmNlR3JhZGllbnQ6OmFwcGx5UmVzb3VyY2UoUmVuZGVyT2JqZWN0KiBvYmplY3QsIFJlbmRl
clN0eWxlKgogICAgIHJldHVybiB0cnVlOwogfQogCi12b2lkIFJlbmRlclNWR1Jlc291cmNlR3Jh
ZGllbnQ6OnBvc3RBcHBseVJlc291cmNlKFJlbmRlck9iamVjdCogb2JqZWN0LCBHcmFwaGljc0Nv
bnRleHQqJiBjb250ZXh0LCB1bnNpZ25lZCBzaG9ydCByZXNvdXJjZU1vZGUsIGNvbnN0IFBhdGgq
IHBhdGgpCit2b2lkIFJlbmRlclNWR1Jlc291cmNlR3JhZGllbnQ6OnBvc3RBcHBseVJlc291cmNl
KFJlbmRlck9iamVjdCogb2JqZWN0LCBHcmFwaGljc0NvbnRleHQqJiBjb250ZXh0LCB1bnNpZ25l
ZCBzaG9ydCByZXNvdXJjZU1vZGUsIGNvbnN0IFBhdGgqIHBhdGgsIGNvbnN0IFJlbmRlclNWR1No
YXBlKiBzaGFwZSkKIHsKICAgICBBU1NFUlQoY29udGV4dCk7CiAgICAgQVNTRVJUKHJlc291cmNl
TW9kZSAhPSBBcHBseVRvRGVmYXVsdE1vZGUpOwpAQCAtMjU5LDExICsyNjAsMTkgQEAgdm9pZCBS
ZW5kZXJTVkdSZXNvdXJjZUdyYWRpZW50Ojpwb3N0QXBwbHlSZXNvdXJjZShSZW5kZXJPYmplY3Qq
IG9iamVjdCwgR3JhcGhpY3MKICNlbHNlCiAgICAgICAgIFVOVVNFRF9QQVJBTShvYmplY3QpOwog
I2VuZGlmCi0gICAgfSBlbHNlIGlmIChwYXRoKSB7Ci0gICAgICAgIGlmIChyZXNvdXJjZU1vZGUg
JiBBcHBseVRvRmlsbE1vZGUpCi0gICAgICAgICAgICBjb250ZXh0LT5maWxsUGF0aCgqcGF0aCk7
Ci0gICAgICAgIGVsc2UgaWYgKHJlc291cmNlTW9kZSAmIEFwcGx5VG9TdHJva2VNb2RlKQotICAg
ICAgICAgICAgY29udGV4dC0+c3Ryb2tlUGF0aCgqcGF0aCk7CisgICAgfSBlbHNlIHsKKyAgICAg
ICAgaWYgKHJlc291cmNlTW9kZSAmIEFwcGx5VG9GaWxsTW9kZSkgeworICAgICAgICAgICAgaWYg
KHBhdGgpCisgICAgICAgICAgICAgICAgY29udGV4dC0+ZmlsbFBhdGgoKnBhdGgpOworICAgICAg
ICAgICAgZWxzZSBpZiAoc2hhcGUpCisgICAgICAgICAgICAgICAgc2hhcGUtPmlzUGFpbnRpbmdG
YWxsYmFjaygpID8gY29udGV4dC0+ZmlsbFBhdGgoc2hhcGUtPnBhdGgoKSkgOiBzaGFwZS0+Zmls
bFNoYXBlKGNvbnRleHQpOworICAgICAgICB9CisgICAgICAgIGlmIChyZXNvdXJjZU1vZGUgJiBB
cHBseVRvU3Ryb2tlTW9kZSkgeworICAgICAgICAgICAgaWYgKHBhdGgpCisgICAgICAgICAgICAg
ICAgY29udGV4dC0+c3Ryb2tlUGF0aCgqcGF0aCk7CisgICAgICAgICAgICBlbHNlIGlmIChzaGFw
ZSkKKyAgICAgICAgICAgICAgICBzaGFwZS0+aXNQYWludGluZ0ZhbGxiYWNrKCkgPyBjb250ZXh0
LT5zdHJva2VQYXRoKHNoYXBlLT5wYXRoKCkpIDogc2hhcGUtPnN0cm9rZVNoYXBlKGNvbnRleHQp
OworICAgICAgICB9CiAgICAgfQogCiAgICAgY29udGV4dC0+cmVzdG9yZSgpOwpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJjZUdyYWRpZW50
LmggYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291cmNlR3JhZGll
bnQuaAppbmRleCBkZjQ5MmUyLi4zZmNjZDQ0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291cmNlR3JhZGllbnQuaAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291cmNlR3JhZGllbnQuaApAQCAtNTAsNyAr
NTAsNyBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCB2b2lkIHJlbW92ZUNsaWVudEZyb21DYWNoZShS
ZW5kZXJPYmplY3QqLCBib29sIG1hcmtGb3JJbnZhbGlkYXRpb24gPSB0cnVlKTsKIAogICAgIHZp
cnR1YWwgYm9vbCBhcHBseVJlc291cmNlKFJlbmRlck9iamVjdCosIFJlbmRlclN0eWxlKiwgR3Jh
cGhpY3NDb250ZXh0KiYsIHVuc2lnbmVkIHNob3J0IHJlc291cmNlTW9kZSk7Ci0gICAgdmlydHVh
bCB2b2lkIHBvc3RBcHBseVJlc291cmNlKFJlbmRlck9iamVjdCosIEdyYXBoaWNzQ29udGV4dCom
LCB1bnNpZ25lZCBzaG9ydCByZXNvdXJjZU1vZGUsIGNvbnN0IFBhdGgqKTsKKyAgICB2aXJ0dWFs
IHZvaWQgcG9zdEFwcGx5UmVzb3VyY2UoUmVuZGVyT2JqZWN0KiwgR3JhcGhpY3NDb250ZXh0KiYs
IHVuc2lnbmVkIHNob3J0IHJlc291cmNlTW9kZSwgY29uc3QgUGF0aCosIGNvbnN0IFJlbmRlclNW
R1NoYXBlKik7CiAgICAgdmlydHVhbCBGbG9hdFJlY3QgcmVzb3VyY2VCb3VuZGluZ0JveChSZW5k
ZXJPYmplY3QqKSB7IHJldHVybiBGbG9hdFJlY3QoKTsgfQogCiBwcm90ZWN0ZWQ6CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291cmNlUGF0dGVy
bi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291cmNlUGF0
dGVybi5jcHAKaW5kZXggYjA4MjQ4MS4uYzcxOGI3MyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJjZVBhdHRlcm4uY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VQYXR0ZXJuLmNwcApAQCAt
MTgzLDE2ICsxODMsMjIgQEAgYm9vbCBSZW5kZXJTVkdSZXNvdXJjZVBhdHRlcm46OmFwcGx5UmVz
b3VyY2UoUmVuZGVyT2JqZWN0KiBvYmplY3QsIFJlbmRlclN0eWxlKgogICAgIHJldHVybiB0cnVl
OwogfQogCi12b2lkIFJlbmRlclNWR1Jlc291cmNlUGF0dGVybjo6cG9zdEFwcGx5UmVzb3VyY2Uo
UmVuZGVyT2JqZWN0KiwgR3JhcGhpY3NDb250ZXh0KiYgY29udGV4dCwgdW5zaWduZWQgc2hvcnQg
cmVzb3VyY2VNb2RlLCBjb25zdCBQYXRoKiBwYXRoKQordm9pZCBSZW5kZXJTVkdSZXNvdXJjZVBh
dHRlcm46OnBvc3RBcHBseVJlc291cmNlKFJlbmRlck9iamVjdCosIEdyYXBoaWNzQ29udGV4dCom
IGNvbnRleHQsIHVuc2lnbmVkIHNob3J0IHJlc291cmNlTW9kZSwgY29uc3QgUGF0aCogcGF0aCwg
Y29uc3QgUmVuZGVyU1ZHU2hhcGUqIHNoYXBlKQogewogICAgIEFTU0VSVChjb250ZXh0KTsKICAg
ICBBU1NFUlQocmVzb3VyY2VNb2RlICE9IEFwcGx5VG9EZWZhdWx0TW9kZSk7CiAKLSAgICBpZiAo
cGF0aCAmJiAhKHJlc291cmNlTW9kZSAmIEFwcGx5VG9UZXh0TW9kZSkpIHsKLSAgICAgICAgaWYg
KHJlc291cmNlTW9kZSAmIEFwcGx5VG9GaWxsTW9kZSkKKyAgICBpZiAocmVzb3VyY2VNb2RlICYg
QXBwbHlUb0ZpbGxNb2RlKSB7CisgICAgICAgIGlmIChwYXRoKQogICAgICAgICAgICAgY29udGV4
dC0+ZmlsbFBhdGgoKnBhdGgpOwotICAgICAgICBlbHNlIGlmIChyZXNvdXJjZU1vZGUgJiBBcHBs
eVRvU3Ryb2tlTW9kZSkKKyAgICAgICAgZWxzZSBpZiAoc2hhcGUpCisgICAgICAgICAgICBzaGFw
ZS0+aXNQYWludGluZ0ZhbGxiYWNrKCkgPyBjb250ZXh0LT5maWxsUGF0aChzaGFwZS0+cGF0aCgp
KSA6IHNoYXBlLT5maWxsU2hhcGUoY29udGV4dCk7CisgICAgfQorICAgIGlmIChyZXNvdXJjZU1v
ZGUgJiBBcHBseVRvU3Ryb2tlTW9kZSkgeworICAgICAgICBpZiAocGF0aCkKICAgICAgICAgICAg
IGNvbnRleHQtPnN0cm9rZVBhdGgoKnBhdGgpOworICAgICAgICBlbHNlIGlmIChzaGFwZSkKKyAg
ICAgICAgICAgIHNoYXBlLT5pc1BhaW50aW5nRmFsbGJhY2soKSA/IGNvbnRleHQtPnN0cm9rZVBh
dGgoc2hhcGUtPnBhdGgoKSkgOiBzaGFwZS0+c3Ryb2tlU2hhcGUoY29udGV4dCk7CiAgICAgfQog
CiAgICAgY29udGV4dC0+cmVzdG9yZSgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJjZVBhdHRlcm4uaCBiL1NvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VQYXR0ZXJuLmgKaW5kZXggYTY5N2M3MS4uODQ3
ZmM2MCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdS
ZXNvdXJjZVBhdHRlcm4uaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRl
clNWR1Jlc291cmNlUGF0dGVybi5oCkBAIC01Miw3ICs1Miw3IEBAIHB1YmxpYzoKICAgICB2aXJ0
dWFsIHZvaWQgcmVtb3ZlQ2xpZW50RnJvbUNhY2hlKFJlbmRlck9iamVjdCosIGJvb2wgbWFya0Zv
ckludmFsaWRhdGlvbiA9IHRydWUpOwogCiAgICAgdmlydHVhbCBib29sIGFwcGx5UmVzb3VyY2Uo
UmVuZGVyT2JqZWN0KiwgUmVuZGVyU3R5bGUqLCBHcmFwaGljc0NvbnRleHQqJiwgdW5zaWduZWQg
c2hvcnQgcmVzb3VyY2VNb2RlKTsKLSAgICB2aXJ0dWFsIHZvaWQgcG9zdEFwcGx5UmVzb3VyY2Uo
UmVuZGVyT2JqZWN0KiwgR3JhcGhpY3NDb250ZXh0KiYsIHVuc2lnbmVkIHNob3J0IHJlc291cmNl
TW9kZSwgY29uc3QgUGF0aCopOworICAgIHZpcnR1YWwgdm9pZCBwb3N0QXBwbHlSZXNvdXJjZShS
ZW5kZXJPYmplY3QqLCBHcmFwaGljc0NvbnRleHQqJiwgdW5zaWduZWQgc2hvcnQgcmVzb3VyY2VN
b2RlLCBjb25zdCBQYXRoKiwgY29uc3QgUmVuZGVyU1ZHU2hhcGUqKTsKICAgICB2aXJ0dWFsIEZs
b2F0UmVjdCByZXNvdXJjZUJvdW5kaW5nQm94KFJlbmRlck9iamVjdCopIHsgcmV0dXJuIEZsb2F0
UmVjdCgpOyB9CiAKICAgICB2aXJ0dWFsIFJlbmRlclNWR1Jlc291cmNlVHlwZSByZXNvdXJjZVR5
cGUoKSBjb25zdCB7IHJldHVybiBzX3Jlc291cmNlVHlwZTsgfQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJjZVNvbGlkQ29sb3IuY3BwIGIv
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJjZVNvbGlkQ29sb3Iu
Y3BwCmluZGV4IDViZTJhZjYuLjBjYzY1OWYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VTb2xpZENvbG9yLmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291cmNlU29saWRDb2xvci5jcHAKQEAg
LTIzLDYgKzIzLDcgQEAKICNpbmNsdWRlICJSZW5kZXJTVkdSZXNvdXJjZVNvbGlkQ29sb3IuaCIK
IAogI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgorI2luY2x1ZGUgIlJlbmRlclNWR1NoYXBl
LmgiCiAjaW5jbHVkZSAiUmVuZGVyU3R5bGUuaCIKICNpbmNsdWRlICJTVkdSZW5kZXJTdXBwb3J0
LmgiCiAKQEAgLTc0LDE2ICs3NSwyMiBAQCBib29sIFJlbmRlclNWR1Jlc291cmNlU29saWRDb2xv
cjo6YXBwbHlSZXNvdXJjZShSZW5kZXJPYmplY3QqIG9iamVjdCwgUmVuZGVyU3R5bAogICAgIHJl
dHVybiB0cnVlOwogfQogCi12b2lkIFJlbmRlclNWR1Jlc291cmNlU29saWRDb2xvcjo6cG9zdEFw
cGx5UmVzb3VyY2UoUmVuZGVyT2JqZWN0KiwgR3JhcGhpY3NDb250ZXh0KiYgY29udGV4dCwgdW5z
aWduZWQgc2hvcnQgcmVzb3VyY2VNb2RlLCBjb25zdCBQYXRoKiBwYXRoKQordm9pZCBSZW5kZXJT
VkdSZXNvdXJjZVNvbGlkQ29sb3I6OnBvc3RBcHBseVJlc291cmNlKFJlbmRlck9iamVjdCosIEdy
YXBoaWNzQ29udGV4dComIGNvbnRleHQsIHVuc2lnbmVkIHNob3J0IHJlc291cmNlTW9kZSwgY29u
c3QgUGF0aCogcGF0aCwgY29uc3QgUmVuZGVyU1ZHU2hhcGUqIHNoYXBlKQogewogICAgIEFTU0VS
VChjb250ZXh0KTsKICAgICBBU1NFUlQocmVzb3VyY2VNb2RlICE9IEFwcGx5VG9EZWZhdWx0TW9k
ZSk7CiAKLSAgICBpZiAocGF0aCAmJiAhKHJlc291cmNlTW9kZSAmIEFwcGx5VG9UZXh0TW9kZSkp
IHsKLSAgICAgICAgaWYgKHJlc291cmNlTW9kZSAmIEFwcGx5VG9GaWxsTW9kZSkKKyAgICBpZiAo
cmVzb3VyY2VNb2RlICYgQXBwbHlUb0ZpbGxNb2RlKSB7CisgICAgICAgIGlmIChwYXRoKQogICAg
ICAgICAgICAgY29udGV4dC0+ZmlsbFBhdGgoKnBhdGgpOwotICAgICAgICBlbHNlIGlmIChyZXNv
dXJjZU1vZGUgJiBBcHBseVRvU3Ryb2tlTW9kZSkKKyAgICAgICAgZWxzZSBpZiAoc2hhcGUpCisg
ICAgICAgICAgICBzaGFwZS0+aXNQYWludGluZ0ZhbGxiYWNrKCkgPyBjb250ZXh0LT5maWxsUGF0
aChzaGFwZS0+cGF0aCgpKSA6IHNoYXBlLT5maWxsU2hhcGUoY29udGV4dCk7CisgICAgfQorICAg
IGlmIChyZXNvdXJjZU1vZGUgJiBBcHBseVRvU3Ryb2tlTW9kZSkgeworICAgICAgICBpZiAocGF0
aCkKICAgICAgICAgICAgIGNvbnRleHQtPnN0cm9rZVBhdGgoKnBhdGgpOworICAgICAgICBlbHNl
IGlmIChzaGFwZSkKKyAgICAgICAgICAgIHNoYXBlLT5pc1BhaW50aW5nRmFsbGJhY2soKSA/IGNv
bnRleHQtPnN0cm9rZVBhdGgoc2hhcGUtPnBhdGgoKSkgOiBzaGFwZS0+c3Ryb2tlU2hhcGUoY29u
dGV4dCk7CiAgICAgfQogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
c3ZnL1JlbmRlclNWR1Jlc291cmNlU29saWRDb2xvci5oIGIvU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJjZVNvbGlkQ29sb3IuaAppbmRleCAwMmNlYjMxLi44YmJm
ZGNkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jl
c291cmNlU29saWRDb2xvci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVu
ZGVyU1ZHUmVzb3VyY2VTb2xpZENvbG9yLmgKQEAgLTM2LDcgKzM2LDcgQEAgcHVibGljOgogICAg
IHZpcnR1YWwgdm9pZCByZW1vdmVDbGllbnRGcm9tQ2FjaGUoUmVuZGVyT2JqZWN0KiwgYm9vbCA9
IHRydWUpIHsgfQogCiAgICAgdmlydHVhbCBib29sIGFwcGx5UmVzb3VyY2UoUmVuZGVyT2JqZWN0
KiwgUmVuZGVyU3R5bGUqLCBHcmFwaGljc0NvbnRleHQqJiwgdW5zaWduZWQgc2hvcnQgcmVzb3Vy
Y2VNb2RlKTsKLSAgICB2aXJ0dWFsIHZvaWQgcG9zdEFwcGx5UmVzb3VyY2UoUmVuZGVyT2JqZWN0
KiwgR3JhcGhpY3NDb250ZXh0KiYsIHVuc2lnbmVkIHNob3J0IHJlc291cmNlTW9kZSwgY29uc3Qg
UGF0aCopOworICAgIHZpcnR1YWwgdm9pZCBwb3N0QXBwbHlSZXNvdXJjZShSZW5kZXJPYmplY3Qq
LCBHcmFwaGljc0NvbnRleHQqJiwgdW5zaWduZWQgc2hvcnQgcmVzb3VyY2VNb2RlLCBjb25zdCBQ
YXRoKiwgY29uc3QgUmVuZGVyU1ZHU2hhcGUqKTsKICAgICB2aXJ0dWFsIEZsb2F0UmVjdCByZXNv
dXJjZUJvdW5kaW5nQm94KFJlbmRlck9iamVjdCopIHsgcmV0dXJuIEZsb2F0UmVjdCgpOyB9CiAK
ICAgICB2aXJ0dWFsIFJlbmRlclNWR1Jlc291cmNlVHlwZSByZXNvdXJjZVR5cGUoKSBjb25zdCB7
IHJldHVybiBzX3Jlc291cmNlVHlwZTsgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL3N2Zy9SZW5kZXJTVkdTaGFwZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
c3ZnL1JlbmRlclNWR1NoYXBlLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
Li4yM2YyZjQ0Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2
Zy9SZW5kZXJTVkdTaGFwZS5jcHAKQEAgLTAsMCArMSw0MzIgQEAKKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMDQsIDIwMDUsIDIwMDcgTmlrb2xhcyBaaW1tZXJtYW5uIDx6aW1tZXJtYW5uQGtkZS5v
cmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUsIDIwMDggUm9iIEJ1aXMgPGJ1aXNAa2Rl
Lm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAwNSwgMjAwNyBFcmljIFNlaWRlbCA8ZXJpY0B3ZWJr
aXQub3JnPgorICogQ29weXJpZ2h0IChDKSAyMDA5IEdvb2dsZSwgSW5jLgorICogQ29weXJpZ2h0
IChDKSAyMDA5IERpcmsgU2NodWx6ZSA8a3JpdEB3ZWJraXQub3JnPgorICogQ29weXJpZ2h0IChD
KSBSZXNlYXJjaCBJbiBNb3Rpb24gTGltaXRlZCAyMDEwLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICogQ29weXJpZ2h0IChDKSAyMDA5IEplZmYgU2NoaWxsZXIgPGNvZGVkcmVhZEBnbWFpbC5jb20+
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgUmVuYXRhIEhvZG92YW4gPHJlbmlAd2Via2l0Lm9yZz4K
KyAqIENvcHlyaWdodCAoQykgMjAxMSBVbml2ZXJzaXR5IG9mIFN6ZWdlZAorICoKKyAqIFRoaXMg
bGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IK
KyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwg
UHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3Vu
ZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIg
b3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJp
YnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VU
IEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBN
RVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUg
dGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFp
bHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExp
YnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7
IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVl
IFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxv
b3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaW5jbHVkZSAiY29u
ZmlnLmgiCisKKyNpZiBFTkFCTEUoU1ZHKQorI2luY2x1ZGUgIlJlbmRlclNWR1NoYXBlLmgiCisK
KyNpbmNsdWRlICJGbG9hdFBvaW50LmgiCisjaW5jbHVkZSAiRmxvYXRRdWFkLmgiCisjaW5jbHVk
ZSAiR3JhcGhpY3NDb250ZXh0LmgiCisjaW5jbHVkZSAiSGl0VGVzdFJlcXVlc3QuaCIKKyNpbmNs
dWRlICJMYXlvdXRSZXBhaW50ZXIuaCIKKyNpbmNsdWRlICJQb2ludGVyRXZlbnRzSGl0UnVsZXMu
aCIKKyNpbmNsdWRlICJSZW5kZXJTVkdDb250YWluZXIuaCIKKyNpbmNsdWRlICJSZW5kZXJTVkdS
ZXNvdXJjZU1hcmtlci5oIgorI2luY2x1ZGUgIlJlbmRlclNWR1Jlc291cmNlU29saWRDb2xvci5o
IgorI2luY2x1ZGUgIlNWR1BhdGhFbGVtZW50LmgiCisjaW5jbHVkZSAiU1ZHUmVuZGVyU3VwcG9y
dC5oIgorI2luY2x1ZGUgIlNWR1Jlc291cmNlcy5oIgorI2luY2x1ZGUgIlNWR1N0eWxlZFRyYW5z
Zm9ybWFibGVFbGVtZW50LmgiCisjaW5jbHVkZSAiU1ZHVHJhbnNmb3JtTGlzdC5oIgorI2luY2x1
ZGUgIlNWR1VSSVJlZmVyZW5jZS5oIgorI2luY2x1ZGUgIlN0cm9rZVN0eWxlQXBwbGllci5oIgor
I2luY2x1ZGUgPHd0Zi9NYXRoRXh0cmFzLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworUmVu
ZGVyU1ZHU2hhcGU6OlJlbmRlclNWR1NoYXBlKFNWR1N0eWxlZFRyYW5zZm9ybWFibGVFbGVtZW50
KiBub2RlKQorICAgIDogUmVuZGVyU1ZHTW9kZWxPYmplY3Qobm9kZSkKKyAgICAsIG1fbmVlZHNC
b3VuZGFyaWVzVXBkYXRlKGZhbHNlKSAvLyBEZWZhdWx0IGlzIGZhbHNlLCB0aGUgY2FjaGVkIHJl
Y3RzIGFyZSBlbXB0eSBmcm9tIHRoZSBiZWdpbm5pbmcuCisgICAgLCBtX25lZWRzU2hhcGVVcGRh
dGUodHJ1ZSkgLy8gRGVmYXVsdCBpcyB0cnVlLCBzbyB3ZSBncmFiIGEgUGF0aCBvYmplY3Qgb25j
ZSBmcm9tIFNWR1N0eWxlZFRyYW5zZm9ybWFibGVFbGVtZW50LgorICAgICwgbV9uZWVkc1RyYW5z
Zm9ybVVwZGF0ZSh0cnVlKSAvLyBEZWZhdWx0IGlzIHRydWUsIHNvIHdlIGdyYWIgYSBBZmZpbmVU
cmFuc2Zvcm0gb2JqZWN0IG9uY2UgZnJvbSBTVkdTdHlsZWRUcmFuc2Zvcm1hYmxlRWxlbWVudC4K
KyAgICAsIG1fZmlsbEZhbGxiYWNrKGZhbHNlKQoreworfQorCitSZW5kZXJTVkdTaGFwZTo6UmVu
ZGVyU1ZHU2hhcGUoU1ZHU3R5bGVkVHJhbnNmb3JtYWJsZUVsZW1lbnQqIG5vZGUsIFBhdGgqIHBh
dGgsIGJvb2wgaXNGaWxsRmFsbGJhY2spCisgICAgOiBSZW5kZXJTVkdNb2RlbE9iamVjdChub2Rl
KQorICAgICwgbV9maWxsRmFsbGJhY2soaXNGaWxsRmFsbGJhY2spCit7CisgICAgIG1fcGF0aCA9
IGFkb3B0UHRyKHBhdGgpOworfQorCitSZW5kZXJTVkdTaGFwZTo6flJlbmRlclNWR1NoYXBlKCkK
K3sKK30KKwordm9pZCBSZW5kZXJTVkdTaGFwZTo6Y3JlYXRlU2hhcGUoKQoreworICAgIG1fcGF0
aCA9IGFkb3B0UHRyKG5ldyBQYXRoKTsKKyAgICBBU1NFUlQoaXNFbXB0eSgpKTsKKworICAgIFNW
R1BhdGhFbGVtZW50KiBlbGVtZW50ID0gc3RhdGljX2Nhc3Q8U1ZHUGF0aEVsZW1lbnQqPihub2Rl
KCkpOworICAgIGVsZW1lbnQtPnRvUGF0aERhdGEocGF0aCgpKTsKK30KKworYm9vbCBSZW5kZXJT
VkdTaGFwZTo6aXNFbXB0eSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fcGF0aC0+aXNFbXB0eSgp
OworfQorCit2b2lkIFJlbmRlclNWR1NoYXBlOjpmaWxsU2hhcGUoR3JhcGhpY3NDb250ZXh0KiBj
b250ZXh0KSBjb25zdAoreworICAgIGNvbnRleHQtPmZpbGxQYXRoKHBhdGgoKSk7Cit9CisKK0Zs
b2F0UmVjdCBSZW5kZXJTVkdTaGFwZTo6b2JqZWN0Qm91bmRpbmdCb3goKSBjb25zdAoreworICAg
IHJldHVybiBtX3BhdGgtPmJvdW5kaW5nUmVjdCgpOworfQorCitGbG9hdFJlY3QgUmVuZGVyU1ZH
U2hhcGU6OnN0cm9rZUJvdW5kaW5nQm94KCkgY29uc3QKK3sKKyAgICBCb3VuZGluZ1JlY3RTdHJv
a2VTdHlsZUFwcGxpZXIgc3Ryb2tlU3R5bGUodGhpcywgc3R5bGUoKSk7CisgICAgcmV0dXJuIG1f
cGF0aC0+c3Ryb2tlQm91bmRpbmdSZWN0KCZzdHJva2VTdHlsZSk7Cit9CisKK3ZvaWQgUmVuZGVy
U1ZHU2hhcGU6OnN0cm9rZVNoYXBlKEdyYXBoaWNzQ29udGV4dCogY29udGV4dCkgY29uc3QKK3sK
KyAgICBjb250ZXh0LT5zdHJva2VQYXRoKHBhdGgoKSk7Cit9CisKK2Jvb2wgUmVuZGVyU1ZHU2hh
cGU6OnNoYXBlRGVwZW5kZW50U3Ryb2tlQ29udGFpbnMoY29uc3QgRmxvYXRQb2ludCYgcG9pbnQp
IGNvbnN0Cit7CisgICAgQm91bmRpbmdSZWN0U3Ryb2tlU3R5bGVBcHBsaWVyIGFwcGxpZXIodGhp
cywgc3R5bGUoKSk7CisgICAgcmV0dXJuIG1fcGF0aC0+c3Ryb2tlQ29udGFpbnMoJmFwcGxpZXIs
IHBvaW50KTsKK30KKworYm9vbCBSZW5kZXJTVkdTaGFwZTo6c2hhcGVEZXBlbmRlbnRGaWxsQ29u
dGFpbnMoY29uc3QgRmxvYXRQb2ludCYgcG9pbnQsIGNvbnN0IFdpbmRSdWxlIGZpbGxSdWxlKSBj
b25zdAoreworICAgIHJldHVybiBtX3BhdGgtPmNvbnRhaW5zKHBvaW50LCBmaWxsUnVsZSk7Cit9
CisKK2Jvb2wgUmVuZGVyU1ZHU2hhcGU6OmZpbGxDb250YWlucyhjb25zdCBGbG9hdFBvaW50JiBw
b2ludCwgYm9vbCByZXF1aXJlc0ZpbGwsIGNvbnN0IFdpbmRSdWxlIGZpbGxSdWxlKQoreworICAg
IGlmICghbV9maWxsQm91bmRpbmdCb3guY29udGFpbnMocG9pbnQpKQorICAgICAgICByZXR1cm4g
ZmFsc2U7CisKKyAgICBDb2xvciBmYWxsYmFja0NvbG9yOworICAgIGlmIChyZXF1aXJlc0ZpbGwg
JiYgIVJlbmRlclNWR1Jlc291cmNlOjpmaWxsUGFpbnRpbmdSZXNvdXJjZSh0aGlzLCBzdHlsZSgp
LCBmYWxsYmFja0NvbG9yKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgcmV0dXJuIHNo
YXBlRGVwZW5kZW50RmlsbENvbnRhaW5zKHBvaW50LCBmaWxsUnVsZSk7Cit9CisKK2Jvb2wgUmVu
ZGVyU1ZHU2hhcGU6OnN0cm9rZUNvbnRhaW5zKGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50LCBib29s
IHJlcXVpcmVzU3Ryb2tlKQoreworICAgIGlmICghbV9zdHJva2VBbmRNYXJrZXJCb3VuZGluZ0Jv
eC5jb250YWlucyhwb2ludCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIENvbG9yIGZh
bGxiYWNrQ29sb3I7CisgICAgaWYgKHJlcXVpcmVzU3Ryb2tlICYmICFSZW5kZXJTVkdSZXNvdXJj
ZTo6c3Ryb2tlUGFpbnRpbmdSZXNvdXJjZSh0aGlzLCBzdHlsZSgpLCBmYWxsYmFja0NvbG9yKSkK
KyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgaWYgKHNob3VsZFN0cm9rZVplcm9MZW5ndGhT
dWJwYXRoKCkpCisgICAgICAgIHJldHVybiB6ZXJvTGVuZ3RoU3VicGF0aFJlY3QoKS5jb250YWlu
cyhwb2ludCk7CisKKyAgICBjb25zdCBTVkdSZW5kZXJTdHlsZSogc3ZnU3R5bGUgPSBzdHlsZSgp
LT5zdmdTdHlsZSgpOworICAgIGlmICghc3ZnU3R5bGUtPnN0cm9rZURhc2hBcnJheSgpLmlzRW1w
dHkoKSB8fCBzdmdTdHlsZS0+c3Ryb2tlTWl0ZXJMaW1pdCgpICE9IHN2Z1N0eWxlLT5pbml0aWFs
U3Ryb2tlTWl0ZXJMaW1pdCgpCisgICAgICAgIHx8IHN2Z1N0eWxlLT5qb2luU3R5bGUoKSAhPSBz
dmdTdHlsZS0+aW5pdGlhbEpvaW5TdHlsZSgpIHx8IHN2Z1N0eWxlLT5jYXBTdHlsZSgpICE9IHN2
Z1N0eWxlLT5pbml0aWFsQ2FwU3R5bGUoKSkgeworICAgICAgICBpZiAoIW1fcGF0aCkKKyAgICAg
ICAgICAgIFJlbmRlclNWR1NoYXBlOjpjcmVhdGVTaGFwZSgpOworICAgICAgICByZXR1cm4gUmVu
ZGVyU1ZHU2hhcGU6OnNoYXBlRGVwZW5kZW50U3Ryb2tlQ29udGFpbnMocG9pbnQpOworICAgIH0K
KyAgICByZXR1cm4gc2hhcGVEZXBlbmRlbnRTdHJva2VDb250YWlucyhwb2ludCk7Cit9CisKK3Zv
aWQgUmVuZGVyU1ZHU2hhcGU6OmxheW91dCgpCit7CisgICAgTGF5b3V0UmVwYWludGVyIHJlcGFp
bnRlcigqdGhpcywgY2hlY2tGb3JSZXBhaW50RHVyaW5nTGF5b3V0KCkgJiYgc2VsZk5lZWRzTGF5
b3V0KCkpOworICAgIFNWR1N0eWxlZFRyYW5zZm9ybWFibGVFbGVtZW50KiBlbGVtZW50ID0gc3Rh
dGljX2Nhc3Q8U1ZHU3R5bGVkVHJhbnNmb3JtYWJsZUVsZW1lbnQqPihub2RlKCkpOworCisgICAg
Ym9vbCB1cGRhdGVDYWNoZWRCb3VuZGFyaWVzSW5QYXJlbnRzID0gZmFsc2U7CisKKyAgICBib29s
IG5lZWRzU2hhcGVVcGRhdGUgPSBtX25lZWRzU2hhcGVVcGRhdGU7CisgICAgaWYgKG5lZWRzU2hh
cGVVcGRhdGUpIHsKKyAgICAgICAgY3JlYXRlU2hhcGUoKTsKKyAgICAgICAgbV9uZWVkc1NoYXBl
VXBkYXRlID0gZmFsc2U7CisgICAgICAgIHVwZGF0ZUNhY2hlZEJvdW5kYXJpZXNJblBhcmVudHMg
PSB0cnVlOworICAgIH0KKworICAgIGlmIChtX25lZWRzVHJhbnNmb3JtVXBkYXRlKSB7CisgICAg
ICAgIG1fbG9jYWxUcmFuc2Zvcm0gPSBlbGVtZW50LT5hbmltYXRlZExvY2FsVHJhbnNmb3JtKCk7
CisgICAgICAgIG1fbmVlZHNUcmFuc2Zvcm1VcGRhdGUgPSBmYWxzZTsKKyAgICAgICAgdXBkYXRl
Q2FjaGVkQm91bmRhcmllc0luUGFyZW50cyA9IHRydWU7CisgICAgfQorCisgICAgaWYgKG1fbmVl
ZHNCb3VuZGFyaWVzVXBkYXRlKSB7CisgICAgICAgIHVwZGF0ZUNhY2hlZEJvdW5kYXJpZXNJblBh
cmVudHMgPSB0cnVlOworICAgICAgICBzZXRJc1BhaW50aW5nRmFsbGJhY2soZmFsc2UpOworICAg
ICAgICBjcmVhdGVTaGFwZSgpOworICAgIH0KKworICAgIC8vIEludmFsaWRhdGUgYWxsIHJlc291
cmNlcyBvZiB0aGlzIGNsaWVudCBpZiBvdXIgbGF5b3V0IGNoYW5nZWQuCisgICAgaWYgKG1fZXZl
ckhhZExheW91dCAmJiBzZWxmTmVlZHNMYXlvdXQoKSkgeworICAgICAgICBTVkdSZXNvdXJjZXND
YWNoZTo6Y2xpZW50TGF5b3V0Q2hhbmdlZCh0aGlzKTsKKyAgICAgICAgbV9tYXJrZXJMYXlvdXRJ
bmZvLmNsZWFyKCk7CisgICAgfQorCisgICAgLy8gQXQgdGhpcyBwb2ludCBMYXlvdXRSZXBhaW50
ZXIgYWxyZWFkeSBncmFiYmVkIHRoZSBvbGQgYm91bmRzLAorICAgIC8vIHJlY2FsY3VsYXRlIHRo
ZW0gbm93IHNvIHJlcGFpbnRBZnRlckxheW91dCgpIHVzZXMgdGhlIG5ldyBib3VuZHMuCisgICAg
aWYgKG5lZWRzU2hhcGVVcGRhdGUgfHwgbV9uZWVkc0JvdW5kYXJpZXNVcGRhdGUpIHsKKyAgICAg
ICAgdXBkYXRlQ2FjaGVkQm91bmRhcmllcygpOworICAgICAgICBtX25lZWRzQm91bmRhcmllc1Vw
ZGF0ZSA9IGZhbHNlOworICAgIH0KKworICAgIC8vIElmIG91ciBib3VuZHMgY2hhbmdlZCwgbm90
aWZ5IHRoZSBwYXJlbnRzLgorICAgIGlmICh1cGRhdGVDYWNoZWRCb3VuZGFyaWVzSW5QYXJlbnRz
KQorICAgICAgICBSZW5kZXJTVkdNb2RlbE9iamVjdDo6c2V0TmVlZHNCb3VuZGFyaWVzVXBkYXRl
KCk7CisKKyAgICByZXBhaW50ZXIucmVwYWludEFmdGVyTGF5b3V0KCk7CisgICAgc2V0TmVlZHNM
YXlvdXQoZmFsc2UpOworfQorCitib29sIFJlbmRlclNWR1NoYXBlOjpzaG91bGRTdHJva2VaZXJv
TGVuZ3RoU3VicGF0aCgpIGNvbnN0Cit7CisgICAgLy8gU3BlYygxMS40KTogQW55IHplcm8gbGVu
Z3RoIHN1YnBhdGggc2hhbGwgbm90IGJlIHN0cm9rZWQgaWYgdGhlIOKAmHN0cm9rZS1saW5lY2Fw
4oCZIHByb3BlcnR5IGhhcyBhIHZhbHVlIG9mIGJ1dHQKKyAgICAvLyBidXQgc2hhbGwgYmUgc3Ry
b2tlZCBpZiB0aGUg4oCYc3Ryb2tlLWxpbmVjYXDigJkgcHJvcGVydHkgaGFzIGEgdmFsdWUgb2Yg
cm91bmQgb3Igc3F1YXJlCisgICAgcmV0dXJuIHN0eWxlKCktPnN2Z1N0eWxlKCktPmhhc1N0cm9r
ZSgpICYmIHN0eWxlKCktPnN2Z1N0eWxlKCktPmNhcFN0eWxlKCkgIT0gQnV0dENhcCAmJiAhbV9m
aWxsQm91bmRpbmdCb3gud2lkdGgoKSAmJiAhbV9maWxsQm91bmRpbmdCb3guaGVpZ2h0KCk7Cit9
CisKK0Zsb2F0UmVjdCBSZW5kZXJTVkdTaGFwZTo6emVyb0xlbmd0aFN1YnBhdGhSZWN0KCkgY29u
c3QKK3sKKyAgICBmbG9hdCBzdHJva2VXaWR0aCA9IHRoaXMtPnN0cm9rZVdpZHRoKCk7CisgICAg
cmV0dXJuIEZsb2F0UmVjdChtX2ZpbGxCb3VuZGluZ0JveC54KCkgLSBzdHJva2VXaWR0aCAvIDIs
IG1fZmlsbEJvdW5kaW5nQm94LnkoKSAtIHN0cm9rZVdpZHRoIC8gMiwgc3Ryb2tlV2lkdGgsIHN0
cm9rZVdpZHRoKTsKK30KKwordm9pZCBSZW5kZXJTVkdTaGFwZTo6c2V0dXBTcXVhcmVDYXBQYXRo
KGludCYgYXBwbHlNb2RlKQoreworICAgIC8vIFNwZWMoMTEuNCk6IEFueSB6ZXJvIGxlbmd0aCBz
dWJwYXRoIHNoYWxsIG5vdCBiZSBzdHJva2VkIGlmIHRoZSDigJhzdHJva2UtbGluZWNhcOKAmSBw
cm9wZXJ0eSBoYXMgYSB2YWx1ZSBvZiBidXR0CisgICAgLy8gYnV0IHNoYWxsIGJlIHN0cm9rZWQg
aWYgdGhlIOKAmHN0cm9rZS1saW5lY2Fw4oCZIHByb3BlcnR5IGhhcyBhIHZhbHVlIG9mIHJvdW5k
IG9yIHNxdWFyZQorICAgIGFwcGx5TW9kZSA9IEFwcGx5VG9GaWxsTW9kZTsKKyAgICBtX3BhdGgt
PmNsZWFyKCk7CisgICAgaWYgKHN0eWxlKCktPnN2Z1N0eWxlKCktPmNhcFN0eWxlKCkgPT0gU3F1
YXJlQ2FwKQorICAgICAgICBtX3BhdGgtPmFkZFJlY3QoemVyb0xlbmd0aFN1YnBhdGhSZWN0KCkp
OworICAgIGVsc2UKKyAgICAgICAgbV9wYXRoLT5hZGRFbGxpcHNlKHplcm9MZW5ndGhTdWJwYXRo
UmVjdCgpKTsKK30KKworYm9vbCBSZW5kZXJTVkdTaGFwZTo6c2V0dXBOb25TY2FsaW5nU3Ryb2tl
UGF0aChHcmFwaGljc0NvbnRleHRTdGF0ZVNhdmVyJiBzdGF0ZVNhdmVyKQoreworICAgIFNWR1N0
eWxlZFRyYW5zZm9ybWFibGVFbGVtZW50KiBlbGVtZW50ID0gc3RhdGljX2Nhc3Q8U1ZHU3R5bGVk
VHJhbnNmb3JtYWJsZUVsZW1lbnQqPihub2RlKCkpOworICAgIEFmZmluZVRyYW5zZm9ybSBub25T
Y2FsaW5nU3Ryb2tlVHJhbnNmb3JtID0gZWxlbWVudC0+Z2V0U2NyZWVuQ1RNKFNWR0xvY2F0YWJs
ZTo6RGlzYWxsb3dTdHlsZVVwZGF0ZSk7CisgICAgaWYgKCFub25TY2FsaW5nU3Ryb2tlVHJhbnNm
b3JtLmlzSW52ZXJ0aWJsZSgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBtX3BhdGgt
PnRyYW5zZm9ybShub25TY2FsaW5nU3Ryb2tlVHJhbnNmb3JtKTsKKworICAgIHN0YXRlU2F2ZXIu
c2F2ZSgpOworICAgIHN0YXRlU2F2ZXIuY29udGV4dCgpLT5jb25jYXRDVE0obm9uU2NhbGluZ1N0
cm9rZVRyYW5zZm9ybS5pbnZlcnNlKCkpOworICAgIHJldHVybiB0cnVlOworfQorCit2b2lkIFJl
bmRlclNWR1NoYXBlOjpmaWxsQW5kU3Ryb2tlUGF0aChHcmFwaGljc0NvbnRleHQqIGNvbnRleHQp
Cit7CisgICAgUmVuZGVyU3R5bGUqIHN0eWxlID0gdGhpcy0+c3R5bGUoKTsKKworICAgIENvbG9y
IGZhbGxiYWNrQ29sb3I7CisgICAgaWYgKFJlbmRlclNWR1Jlc291cmNlKiBmaWxsUGFpbnRpbmdS
ZXNvdXJjZSA9IFJlbmRlclNWR1Jlc291cmNlOjpmaWxsUGFpbnRpbmdSZXNvdXJjZSh0aGlzLCBz
dHlsZSwgZmFsbGJhY2tDb2xvcikpIHsKKyAgICAgICAgaWYgKGZpbGxQYWludGluZ1Jlc291cmNl
LT5hcHBseVJlc291cmNlKHRoaXMsIHN0eWxlLCBjb250ZXh0LCBBcHBseVRvRmlsbE1vZGUpKQor
ICAgICAgICAgICAgZmlsbFBhaW50aW5nUmVzb3VyY2UtPnBvc3RBcHBseVJlc291cmNlKHRoaXMs
IGNvbnRleHQsIEFwcGx5VG9GaWxsTW9kZSwgMCwgdGhpcyk7CisgICAgICAgIGVsc2UgaWYgKGZh
bGxiYWNrQ29sb3IuaXNWYWxpZCgpKSB7CisgICAgICAgICAgICBSZW5kZXJTVkdSZXNvdXJjZVNv
bGlkQ29sb3IqIGZhbGxiYWNrUmVzb3VyY2UgPSBSZW5kZXJTVkdSZXNvdXJjZTo6c2hhcmVkU29s
aWRQYWludGluZ1Jlc291cmNlKCk7CisgICAgICAgICAgICBmYWxsYmFja1Jlc291cmNlLT5zZXRD
b2xvcihmYWxsYmFja0NvbG9yKTsKKyAgICAgICAgICAgIGlmIChmYWxsYmFja1Jlc291cmNlLT5h
cHBseVJlc291cmNlKHRoaXMsIHN0eWxlLCBjb250ZXh0LCBBcHBseVRvRmlsbE1vZGUpKQorICAg
ICAgICAgICAgICAgIGZhbGxiYWNrUmVzb3VyY2UtPnBvc3RBcHBseVJlc291cmNlKHRoaXMsIGNv
bnRleHQsIEFwcGx5VG9GaWxsTW9kZSwgMCwgdGhpcyk7CisgICAgICAgIH0KKyAgICB9CisKKyAg
ICBmYWxsYmFja0NvbG9yID0gQ29sb3IoKTsKKyAgICBSZW5kZXJTVkdSZXNvdXJjZSogc3Ryb2tl
UGFpbnRpbmdSZXNvdXJjZSA9IFJlbmRlclNWR1Jlc291cmNlOjpzdHJva2VQYWludGluZ1Jlc291
cmNlKHRoaXMsIHN0eWxlLCBmYWxsYmFja0NvbG9yKTsKKyAgICBpZiAoIXN0cm9rZVBhaW50aW5n
UmVzb3VyY2UpCisgICAgICAgIHJldHVybjsKKworICAgIGludCBhcHBseU1vZGUgPSBBcHBseVRv
U3Ryb2tlTW9kZTsKKworICAgIGJvb2wgbm9uU2NhbGluZ1N0cm9rZSA9IHN0eWxlLT5zdmdTdHls
ZSgpLT52ZWN0b3JFZmZlY3QoKSA9PSBWRV9OT05fU0NBTElOR19TVFJPS0U7CisKKyAgICBHcmFw
aGljc0NvbnRleHRTdGF0ZVNhdmVyIHN0YXRlU2F2ZXIoKmNvbnRleHQsIGZhbHNlKTsKKworICAg
IC8vIFNwZWMoMTEuNCk6IEFueSB6ZXJvIGxlbmd0aCBzdWJwYXRoIHNoYWxsIG5vdCBiZSBzdHJv
a2VkIGlmIHRoZSDigJhzdHJva2UtbGluZWNhcOKAmSBwcm9wZXJ0eSBoYXMgYSB2YWx1ZSBvZiBi
dXR0CisgICAgLy8gYnV0IHNoYWxsIGJlIHN0cm9rZWQgaWYgdGhlIOKAmHN0cm9rZS1saW5lY2Fw
4oCZIHByb3BlcnR5IGhhcyBhIHZhbHVlIG9mIHJvdW5kIG9yIHNxdWFyZQorICAgIC8vIEZJWE1F
OiB0aGlzIGRvZXMgbm90IHdvcmsgZm9yIHplcm8tbGVuZ3RoIHN1YnBhdGhzLCBvbmx5IHdoZW4g
dG90YWwgcGF0aCBpcyB6ZXJvLWxlbmd0aAorICAgIGlmIChzaG91bGRTdHJva2VaZXJvTGVuZ3Ro
U3VicGF0aCgpKSB7CisgICAgICAgIFJlbmRlclNWR1NoYXBlOjpjcmVhdGVTaGFwZSgpOworICAg
ICAgICBzZXR1cFNxdWFyZUNhcFBhdGgoYXBwbHlNb2RlKTsKKyAgICAgICAgc2V0SXNQYWludGlu
Z0ZhbGxiYWNrKHRydWUpOworICAgIH0gZWxzZSBpZiAobm9uU2NhbGluZ1N0cm9rZSkgeworICAg
ICAgICBSZW5kZXJTVkdTaGFwZTo6Y3JlYXRlU2hhcGUoKTsKKyAgICAgICAgc2V0SXNQYWludGlu
Z0ZhbGxiYWNrKHRydWUpOworICAgICAgICBpZiAoIXNldHVwTm9uU2NhbGluZ1N0cm9rZVBhdGgo
c3RhdGVTYXZlcikpCisgICAgICAgICAgICByZXR1cm47CisgICAgfQorICAgIGlmIChzdHJva2VQ
YWludGluZ1Jlc291cmNlLT5hcHBseVJlc291cmNlKHRoaXMsIHN0eWxlLCBjb250ZXh0LCBhcHBs
eU1vZGUpKSB7CisgICAgICAgIHN0cm9rZVBhaW50aW5nUmVzb3VyY2UtPnBvc3RBcHBseVJlc291
cmNlKHRoaXMsIGNvbnRleHQsIGFwcGx5TW9kZSwgMCwgdGhpcyk7CisgICAgICAgIHJldHVybjsK
KyAgICB9CisgICAgaWYgKCFmYWxsYmFja0NvbG9yLmlzVmFsaWQoKSkKKyAgICAgICAgcmV0dXJu
OworICAgIFJlbmRlclNWR1Jlc291cmNlU29saWRDb2xvciogZmFsbGJhY2tSZXNvdXJjZSA9IFJl
bmRlclNWR1Jlc291cmNlOjpzaGFyZWRTb2xpZFBhaW50aW5nUmVzb3VyY2UoKTsKKyAgICBmYWxs
YmFja1Jlc291cmNlLT5zZXRDb2xvcihmYWxsYmFja0NvbG9yKTsKKyAgICBpZiAoZmFsbGJhY2tS
ZXNvdXJjZS0+YXBwbHlSZXNvdXJjZSh0aGlzLCBzdHlsZSwgY29udGV4dCwgYXBwbHlNb2RlKSkK
KyAgICAgICAgZmFsbGJhY2tSZXNvdXJjZS0+cG9zdEFwcGx5UmVzb3VyY2UodGhpcywgY29udGV4
dCwgYXBwbHlNb2RlLCAwLCB0aGlzKTsKK30KKwordm9pZCBSZW5kZXJTVkdTaGFwZTo6cGFpbnQo
UGFpbnRJbmZvJiBwYWludEluZm8sIGNvbnN0IEludFBvaW50JikKK3sKKyAgICBpZiAocGFpbnRJ
bmZvLmNvbnRleHQtPnBhaW50aW5nRGlzYWJsZWQoKSB8fCBzdHlsZSgpLT52aXNpYmlsaXR5KCkg
PT0gSElEREVOIHx8IGlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJuOworICAgIEZsb2F0UmVjdCBi
b3VuZGluZ0JveCA9IHJlcGFpbnRSZWN0SW5Mb2NhbENvb3JkaW5hdGVzKCk7CisgICAgaWYgKCFT
VkdSZW5kZXJTdXBwb3J0OjpwYWludEluZm9JbnRlcnNlY3RzUmVwYWludFJlY3QoYm91bmRpbmdC
b3gsIG1fbG9jYWxUcmFuc2Zvcm0sIHBhaW50SW5mbykpCisgICAgICAgIHJldHVybjsKKyAgICBQ
YWludEluZm8gY2hpbGRQYWludEluZm8ocGFpbnRJbmZvKTsKKyAgICBib29sIGRyYXdzT3V0bGlu
ZSA9IHN0eWxlKCktPm91dGxpbmVXaWR0aCgpICYmIChjaGlsZFBhaW50SW5mby5waGFzZSA9PSBQ
YWludFBoYXNlT3V0bGluZSB8fCBjaGlsZFBhaW50SW5mby5waGFzZSA9PSBQYWludFBoYXNlU2Vs
Zk91dGxpbmUpOworICAgIGlmIChkcmF3c091dGxpbmUgfHwgY2hpbGRQYWludEluZm8ucGhhc2Ug
PT0gUGFpbnRQaGFzZUZvcmVncm91bmQpIHsKKyAgICAgICAgR3JhcGhpY3NDb250ZXh0U3RhdGVT
YXZlciBzdGF0ZVNhdmVyKCpjaGlsZFBhaW50SW5mby5jb250ZXh0KTsKKyAgICAgICAgY2hpbGRQ
YWludEluZm8uYXBwbHlUcmFuc2Zvcm0obV9sb2NhbFRyYW5zZm9ybSk7CisKKyAgICAgICAgaWYg
KGNoaWxkUGFpbnRJbmZvLnBoYXNlID09IFBhaW50UGhhc2VGb3JlZ3JvdW5kKSB7CisgICAgICAg
ICAgICBQYWludEluZm8gc2F2ZWRJbmZvKGNoaWxkUGFpbnRJbmZvKTsKKworICAgICAgICAgICAg
aWYgKFNWR1JlbmRlclN1cHBvcnQ6OnByZXBhcmVUb1JlbmRlclNWR0NvbnRlbnQodGhpcywgY2hp
bGRQYWludEluZm8pKSB7CisgICAgICAgICAgICAgICAgY29uc3QgU1ZHUmVuZGVyU3R5bGUqIHN2
Z1N0eWxlID0gc3R5bGUoKS0+c3ZnU3R5bGUoKTsKKyAgICAgICAgICAgICAgICBpZiAoc3ZnU3R5
bGUtPnNoYXBlUmVuZGVyaW5nKCkgPT0gU1JfQ1JJU1BFREdFUykKKyAgICAgICAgICAgICAgICAg
ICAgY2hpbGRQYWludEluZm8uY29udGV4dC0+c2V0U2hvdWxkQW50aWFsaWFzKGZhbHNlKTsKKwor
ICAgICAgICAgICAgICAgIGZpbGxBbmRTdHJva2VQYXRoKGNoaWxkUGFpbnRJbmZvLmNvbnRleHQp
OworCisgICAgICAgICAgICAgICAgaWYgKHN2Z1N0eWxlLT5oYXNNYXJrZXJzKCkpCisgICAgICAg
ICAgICAgICAgICAgIG1fbWFya2VyTGF5b3V0SW5mby5kcmF3TWFya2VycyhjaGlsZFBhaW50SW5m
byk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIFNWR1JlbmRlclN1cHBvcnQ6OmZpbmlz
aFJlbmRlclNWR0NvbnRlbnQodGhpcywgY2hpbGRQYWludEluZm8sIHNhdmVkSW5mby5jb250ZXh0
KTsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChkcmF3c091dGxpbmUpCisgICAgICAgICAgICBw
YWludE91dGxpbmUoY2hpbGRQYWludEluZm8uY29udGV4dCwgSW50UmVjdChib3VuZGluZ0JveCkp
OworICAgIH0KK30KKworLy8gVGhpcyBtZXRob2QgaXMgY2FsbGVkIGZyb20gaW5zaWRlIHBhaW50
T3V0bGluZSgpIHNpbmNlIHdlIGNhbGwgcGFpbnRPdXRsaW5lKCkKKy8vIHdoaWxlIHRyYW5zZm9y
bWVkIHRvIG91ciBjb29yZCBzeXN0ZW0sIHJldHVybiBsb2NhbCBjb29yZHMKK3ZvaWQgUmVuZGVy
U1ZHU2hhcGU6OmFkZEZvY3VzUmluZ1JlY3RzKFZlY3RvcjxMYXlvdXRSZWN0PiYgcmVjdHMsIGNv
bnN0IExheW91dFBvaW50JikKK3sKKyAgICBMYXlvdXRSZWN0IHJlY3QgPSBlbmNsb3NpbmdMYXlv
dXRSZWN0KHJlcGFpbnRSZWN0SW5Mb2NhbENvb3JkaW5hdGVzKCkpOworICAgIGlmICghcmVjdC5p
c0VtcHR5KCkpCisgICAgICAgIHJlY3RzLmFwcGVuZChyZWN0KTsKK30KKworYm9vbCBSZW5kZXJT
VkdTaGFwZTo6bm9kZUF0RmxvYXRQb2ludChjb25zdCBIaXRUZXN0UmVxdWVzdCYgcmVxdWVzdCwg
SGl0VGVzdFJlc3VsdCYgcmVzdWx0LCBjb25zdCBGbG9hdFBvaW50JiBwb2ludEluUGFyZW50LCBI
aXRUZXN0QWN0aW9uIGhpdFRlc3RBY3Rpb24pCit7CisgICAgLy8gV2Ugb25seSBkcmF3IGluIHRo
ZSBmb3Jncm91bmQgcGhhc2UsIHNvIHdlIG9ubHkgaGl0LXRlc3QgdGhlbi4KKyAgICBpZiAoaGl0
VGVzdEFjdGlvbiAhPSBIaXRUZXN0Rm9yZWdyb3VuZCkKKyAgICAgICAgcmV0dXJuIGZhbHNlOwor
CisgICAgRmxvYXRQb2ludCBsb2NhbFBvaW50ID0gbV9sb2NhbFRyYW5zZm9ybS5pbnZlcnNlKCku
bWFwUG9pbnQocG9pbnRJblBhcmVudCk7CisKKyAgICBpZiAoIVNWR1JlbmRlclN1cHBvcnQ6OnBv
aW50SW5DbGlwcGluZ0FyZWEodGhpcywgbG9jYWxQb2ludCkpCisgICAgICAgIHJldHVybiBmYWxz
ZTsKKworICAgIFBvaW50ZXJFdmVudHNIaXRSdWxlcyBoaXRSdWxlcyhQb2ludGVyRXZlbnRzSGl0
UnVsZXM6OlNWR19QQVRIX0hJVFRFU1RJTkcsIHJlcXVlc3QsIHN0eWxlKCktPnBvaW50ZXJFdmVu
dHMoKSk7CisgICAgYm9vbCBpc1Zpc2libGUgPSAoc3R5bGUoKS0+dmlzaWJpbGl0eSgpID09IFZJ
U0lCTEUpOworICAgIGlmIChpc1Zpc2libGUgfHwgIWhpdFJ1bGVzLnJlcXVpcmVWaXNpYmxlKSB7
CisgICAgICAgIGNvbnN0IFNWR1JlbmRlclN0eWxlKiBzdmdTdHlsZSA9IHN0eWxlKCktPnN2Z1N0
eWxlKCk7CisgICAgICAgIFdpbmRSdWxlIGZpbGxSdWxlID0gc3ZnU3R5bGUtPmZpbGxSdWxlKCk7
CisgICAgICAgIGlmIChyZXF1ZXN0LnN2Z0NsaXBDb250ZW50KCkpCisgICAgICAgICAgICBmaWxs
UnVsZSA9IHN2Z1N0eWxlLT5jbGlwUnVsZSgpOworICAgICAgICBpZiAoKGhpdFJ1bGVzLmNhbkhp
dFN0cm9rZSAmJiAoc3ZnU3R5bGUtPmhhc1N0cm9rZSgpIHx8ICFoaXRSdWxlcy5yZXF1aXJlU3Ry
b2tlKSAmJiBzdHJva2VDb250YWlucyhsb2NhbFBvaW50LCBoaXRSdWxlcy5yZXF1aXJlU3Ryb2tl
KSkKKyAgICAgICAgICAgIHx8IChoaXRSdWxlcy5jYW5IaXRGaWxsICYmIChzdmdTdHlsZS0+aGFz
RmlsbCgpIHx8ICFoaXRSdWxlcy5yZXF1aXJlRmlsbCkgJiYgZmlsbENvbnRhaW5zKGxvY2FsUG9p
bnQsIGhpdFJ1bGVzLnJlcXVpcmVGaWxsLCBmaWxsUnVsZSkpKSB7CisgICAgICAgICAgICB1cGRh
dGVIaXRUZXN0UmVzdWx0KHJlc3VsdCwgcm91bmRlZExheW91dFBvaW50KGxvY2FsUG9pbnQpKTsK
KyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9CisgICAgfQorICAgIHJldHVybiBm
YWxzZTsKK30KKworRmxvYXRSZWN0IFJlbmRlclNWR1NoYXBlOjpjYWxjdWxhdGVNYXJrZXJCb3Vu
ZHNJZk5lZWRlZCgpCit7CisgICAgU1ZHRWxlbWVudCogc3ZnRWxlbWVudCA9IHN0YXRpY19jYXN0
PFNWR0VsZW1lbnQqPihub2RlKCkpOworICAgIEFTU0VSVChzdmdFbGVtZW50ICYmIHN2Z0VsZW1l
bnQtPmRvY3VtZW50KCkpOworICAgIGlmICghc3ZnRWxlbWVudC0+aXNTdHlsZWQoKSkKKyAgICAg
ICAgcmV0dXJuIEZsb2F0UmVjdCgpOworCisgICAgU1ZHU3R5bGVkRWxlbWVudCogc3R5bGVkRWxl
bWVudCA9IHN0YXRpY19jYXN0PFNWR1N0eWxlZEVsZW1lbnQqPihzdmdFbGVtZW50KTsKKyAgICBp
ZiAoIXN0eWxlZEVsZW1lbnQtPnN1cHBvcnRzTWFya2VycygpKQorICAgICAgICByZXR1cm4gRmxv
YXRSZWN0KCk7CisKKyAgICBBU1NFUlQoc3R5bGUoKS0+c3ZnU3R5bGUoKS0+aGFzTWFya2Vycygp
KTsKKworICAgIFNWR1Jlc291cmNlcyogcmVzb3VyY2VzID0gU1ZHUmVzb3VyY2VzQ2FjaGU6OmNh
Y2hlZFJlc291cmNlc0ZvclJlbmRlck9iamVjdCh0aGlzKTsKKyAgICBpZiAoIXJlc291cmNlcykK
KyAgICAgICAgcmV0dXJuIEZsb2F0UmVjdCgpOworCisgICAgUmVuZGVyU1ZHUmVzb3VyY2VNYXJr
ZXIqIG1hcmtlclN0YXJ0ID0gcmVzb3VyY2VzLT5tYXJrZXJTdGFydCgpOworICAgIFJlbmRlclNW
R1Jlc291cmNlTWFya2VyKiBtYXJrZXJNaWQgPSByZXNvdXJjZXMtPm1hcmtlck1pZCgpOworICAg
IFJlbmRlclNWR1Jlc291cmNlTWFya2VyKiBtYXJrZXJFbmQgPSByZXNvdXJjZXMtPm1hcmtlckVu
ZCgpOworICAgIGlmICghbWFya2VyU3RhcnQgJiYgIW1hcmtlck1pZCAmJiAhbWFya2VyRW5kKQor
ICAgICAgICByZXR1cm4gRmxvYXRSZWN0KCk7CisKKyAgICByZXR1cm4gbV9tYXJrZXJMYXlvdXRJ
bmZvLmNhbGN1bGF0ZUJvdW5kYXJpZXMobWFya2VyU3RhcnQsIG1hcmtlck1pZCwgbWFya2VyRW5k
LCBzdHJva2VXaWR0aCgpLCBwYXRoKCkpOworfQorCit2b2lkIFJlbmRlclNWR1NoYXBlOjp1cGRh
dGVDYWNoZWRCb3VuZGFyaWVzKCkKK3sKKyAgICBpZiAoaXNFbXB0eSgpKSB7CisgICAgICAgIG1f
ZmlsbEJvdW5kaW5nQm94ID0gRmxvYXRSZWN0KCk7CisgICAgICAgIG1fc3Ryb2tlQW5kTWFya2Vy
Qm91bmRpbmdCb3ggPSBGbG9hdFJlY3QoKTsKKyAgICAgICAgbV9yZXBhaW50Qm91bmRpbmdCb3gg
PSBGbG9hdFJlY3QoKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIC8vIENhY2hlIF91
bmNsaXBwZWRfIGZpbGwgYm91bmRpbmcgYm94LCB1c2VkIGZvciBjYWxjdWxhdGlvbnMgaW4gcmVz
b3VyY2VzCisgICAgbV9maWxsQm91bmRpbmdCb3ggPSBvYmplY3RCb3VuZGluZ0JveCgpOworCisg
ICAgLy8gU3BlYygxMS40KTogQW55IHplcm8gbGVuZ3RoIHN1YnBhdGggc2hhbGwgbm90IGJlIHN0
cm9rZWQgaWYgdGhlIOKAmHN0cm9rZS1saW5lY2Fw4oCZIHByb3BlcnR5IGhhcyBhIHZhbHVlIG9m
IGJ1dHQKKyAgICAvLyBidXQgc2hhbGwgYmUgc3Ryb2tlZCBpZiB0aGUg4oCYc3Ryb2tlLWxpbmVj
YXDigJkgcHJvcGVydHkgaGFzIGEgdmFsdWUgb2Ygcm91bmQgb3Igc3F1YXJlCisgICAgaWYgKHNo
b3VsZFN0cm9rZVplcm9MZW5ndGhTdWJwYXRoKCkpIHsKKyAgICAgICAgbV9zdHJva2VBbmRNYXJr
ZXJCb3VuZGluZ0JveCA9IHplcm9MZW5ndGhTdWJwYXRoUmVjdCgpOworICAgICAgICAvLyBDYWNo
ZSBzbWFsbGVzdCBwb3NzaWJsZSByZXBhaW50IHJlY3RhbmdsZQorICAgICAgICBtX3JlcGFpbnRC
b3VuZGluZ0JveCA9IG1fc3Ryb2tlQW5kTWFya2VyQm91bmRpbmdCb3g7CisgICAgICAgIFNWR1Jl
bmRlclN1cHBvcnQ6OmludGVyc2VjdFJlcGFpbnRSZWN0V2l0aFJlc291cmNlcyh0aGlzLCBtX3Jl
cGFpbnRCb3VuZGluZ0JveCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICAvLyBDYWNo
ZSBfdW5jbGlwcGVkXyBzdHJva2UgYm91bmRpbmcgYm94LCB1c2VkIGZvciBjYWxjdWxhdGlvbnMg
aW4gcmVzb3VyY2VzIChpbmNsdWRlcyBtYXJrZXIgYm91bmRhcmllcykKKyAgICBtX3N0cm9rZUFu
ZE1hcmtlckJvdW5kaW5nQm94ID0gbV9maWxsQm91bmRpbmdCb3g7CisKKyAgICBjb25zdCBTVkdS
ZW5kZXJTdHlsZSogc3ZnU3R5bGUgPSBzdHlsZSgpLT5zdmdTdHlsZSgpOworICAgIGlmIChzdmdT
dHlsZS0+aGFzU3Ryb2tlKCkpCisgICAgICAgIG1fc3Ryb2tlQW5kTWFya2VyQm91bmRpbmdCb3gu
dW5pdGUoc3Ryb2tlQm91bmRpbmdCb3goKSk7CisKKyAgICBpbmZsYXRlV2l0aE1hcmtlckJvdW5k
cygpOworCisgICAgLy8gQ2FjaGUgc21hbGxlc3QgcG9zc2libGUgcmVwYWludCByZWN0YW5nbGUK
KyAgICBtX3JlcGFpbnRCb3VuZGluZ0JveCA9IG1fc3Ryb2tlQW5kTWFya2VyQm91bmRpbmdCb3g7
CisgICAgU1ZHUmVuZGVyU3VwcG9ydDo6aW50ZXJzZWN0UmVwYWludFJlY3RXaXRoUmVzb3VyY2Vz
KHRoaXMsIG1fcmVwYWludEJvdW5kaW5nQm94KTsKK30KKworZmxvYXQgUmVuZGVyU1ZHU2hhcGU6
OnN0cm9rZVdpZHRoKCkgY29uc3QKK3sKKyAgICBTVkdFbGVtZW50KiBzdmdFbGVtZW50ID0gc3Rh
dGljX2Nhc3Q8U1ZHRWxlbWVudCo+KG5vZGUoKSk7CisgICAgcmV0dXJuIHN0eWxlKCktPnN2Z1N0
eWxlKCktPnN0cm9rZVdpZHRoKCkudmFsdWUoc3ZnRWxlbWVudCk7Cit9CisKK30KKworI2VuZGlm
IC8vIEVOQUJMRShTVkcpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3Zn
L1JlbmRlclNWR1NoYXBlLmggYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNW
R1NoYXBlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTJmY2ViOAotLS0g
L2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHU2hh
cGUuaApAQCAtMCwwICsxLDE2MCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSwg
MjAwNyBOaWtvbGFzIFppbW1lcm1hbm4gPHppbW1lcm1hbm5Aa2RlLm9yZz4KKyAqIENvcHlyaWdo
dCAoQykgMjAwNCwgMjAwNSBSb2IgQnVpcyA8YnVpc0BrZGUub3JnPgorICogQ29weXJpZ2h0IChD
KSAyMDA1IEVyaWMgU2VpZGVsIDxlcmljQHdlYmtpdC5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIw
MDYgQXBwbGUgQ29tcHV0ZXIsIEluYworICogQ29weXJpZ2h0IChDKSAyMDA5IEdvb2dsZSwgSW5j
LgorICogQ29weXJpZ2h0IChDKSAyMDExIFJlbmF0YSBIb2RvdmFuIDxyZW5pQHdlYmtpdC5vcmc+
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgVW5pdmVyc2l0eSBvZiBTemVnZWQKKyAqCisgKiBUaGlz
IGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29y
CisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFs
IFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91
bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3Vy
IG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3Ry
aWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9V
VCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICog
TUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2Vl
IHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRh
aWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBM
aWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5
OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJl
ZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZs
b29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2lmbmRlZiBSZW5k
ZXJTVkdTaGFwZV9oCisjZGVmaW5lIFJlbmRlclNWR1NoYXBlX2gKKworI2lmIEVOQUJMRShTVkcp
CisjaW5jbHVkZSAiQWZmaW5lVHJhbnNmb3JtLmgiCisjaW5jbHVkZSAiRmxvYXRSZWN0LmgiCisj
aW5jbHVkZSAiUmVuZGVyU1ZHTW9kZWxPYmplY3QuaCIKKyNpbmNsdWRlICJTVkdNYXJrZXJMYXlv
dXRJbmZvLmgiCisjaW5jbHVkZSAiU3Ryb2tlU3R5bGVBcHBsaWVyLmgiCisjaW5jbHVkZSA8d3Rm
L093blB0ci5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIEZsb2F0UG9pbnQ7Citj
bGFzcyBHcmFwaGljc0NvbnRleHRTdGF0ZVNhdmVyOworY2xhc3MgUmVuZGVyU1ZHQ29udGFpbmVy
OworY2xhc3MgUmVuZGVyU1ZHUGF0aDsKK2NsYXNzIFNWR1N0eWxlZFRyYW5zZm9ybWFibGVFbGVt
ZW50OworCitjbGFzcyBCb3VuZGluZ1JlY3RTdHJva2VTdHlsZUFwcGxpZXIgOiBwdWJsaWMgU3Ry
b2tlU3R5bGVBcHBsaWVyIHsKK3B1YmxpYzoKKyAgICBCb3VuZGluZ1JlY3RTdHJva2VTdHlsZUFw
cGxpZXIoY29uc3QgUmVuZGVyT2JqZWN0KiBvYmplY3QsIFJlbmRlclN0eWxlKiBzdHlsZSkKKyAg
ICAgICAgOiBtX29iamVjdChvYmplY3QpCisgICAgICAgICwgbV9zdHlsZShzdHlsZSkKKyAgICB7
CisgICAgICAgIEFTU0VSVChzdHlsZSk7CisgICAgICAgIEFTU0VSVChvYmplY3QpOworICAgIH0K
KworICAgIHZvaWQgc3Ryb2tlU3R5bGUoR3JhcGhpY3NDb250ZXh0KiBnYykKKyAgICB7CisgICAg
ICAgIFNWR1JlbmRlclN1cHBvcnQ6OmFwcGx5U3Ryb2tlU3R5bGVUb0NvbnRleHQoZ2MsIG1fc3R5
bGUsIG1fb2JqZWN0KTsKKyAgICB9CisKK3ByaXZhdGU6CisgICAgY29uc3QgUmVuZGVyT2JqZWN0
KiBtX29iamVjdDsKKyAgICBSZW5kZXJTdHlsZSogbV9zdHlsZTsKK307CisKK2NsYXNzIFJlbmRl
clNWR1NoYXBlIDogcHVibGljIFJlbmRlclNWR01vZGVsT2JqZWN0IHsKK3B1YmxpYzoKKyAgICBl
eHBsaWNpdCBSZW5kZXJTVkdTaGFwZShTVkdTdHlsZWRUcmFuc2Zvcm1hYmxlRWxlbWVudCopOwor
ICAgIFJlbmRlclNWR1NoYXBlKFNWR1N0eWxlZFRyYW5zZm9ybWFibGVFbGVtZW50KiwgUGF0aCos
IGJvb2wpOworICAgIHZpcnR1YWwgflJlbmRlclNWR1NoYXBlKCk7CisKKyAgICB2b2lkIHNldE5l
ZWRzU2hhcGVVcGRhdGUoKSB7IG1fbmVlZHNTaGFwZVVwZGF0ZSA9IHRydWU7IH0KKyAgICB2aXJ0
dWFsIHZvaWQgc2V0TmVlZHNCb3VuZGFyaWVzVXBkYXRlKCkgeyBtX25lZWRzQm91bmRhcmllc1Vw
ZGF0ZSA9IHRydWU7IH0KKyAgICB2aXJ0dWFsIHZvaWQgc2V0TmVlZHNUcmFuc2Zvcm1VcGRhdGUo
KSB7IG1fbmVlZHNUcmFuc2Zvcm1VcGRhdGUgPSB0cnVlOyB9CisgICAgdmlydHVhbCB2b2lkIGZp
bGxTaGFwZShHcmFwaGljc0NvbnRleHQqKSBjb25zdDsKKyAgICB2aXJ0dWFsIHZvaWQgc3Ryb2tl
U2hhcGUoR3JhcGhpY3NDb250ZXh0KikgY29uc3Q7CisgICAgYm9vbCBpc1BhaW50aW5nRmFsbGJh
Y2soKSBjb25zdCB7IHJldHVybiBtX2ZpbGxGYWxsYmFjazsgfQorCisgICAgUGF0aCYgcGF0aCgp
IGNvbnN0CisgICAgeworICAgICAgICBBU1NFUlQobV9wYXRoKTsKKyAgICAgICAgcmV0dXJuICpt
X3BhdGg7CisgICAgfQorCitwcm90ZWN0ZWQ6CisgICAgdmlydHVhbCB2b2lkIGNyZWF0ZVNoYXBl
KCk7CisgICAgdmlydHVhbCBib29sIGlzRW1wdHkoKSBjb25zdDsKKyAgICB2aXJ0dWFsIEZsb2F0
UmVjdCBvYmplY3RCb3VuZGluZ0JveCgpIGNvbnN0OworICAgIHZpcnR1YWwgRmxvYXRSZWN0IHN0
cm9rZUJvdW5kaW5nQm94KCkgY29uc3Q7CisgICAgdmlydHVhbCBib29sIHNoYXBlRGVwZW5kZW50
U3Ryb2tlQ29udGFpbnMoY29uc3QgRmxvYXRQb2ludCYpIGNvbnN0OworICAgIHZpcnR1YWwgYm9v
bCBzaGFwZURlcGVuZGVudEZpbGxDb250YWlucyhjb25zdCBGbG9hdFBvaW50JiwgY29uc3QgV2lu
ZFJ1bGUpIGNvbnN0OworICAgIGZsb2F0IHN0cm9rZVdpZHRoKCkgY29uc3Q7CisgICAgdm9pZCBz
ZXRJc1BhaW50aW5nRmFsbGJhY2soYm9vbCBpc0ZhbGxiYWNrKSB7IG1fZmlsbEZhbGxiYWNrID0g
aXNGYWxsYmFjazsgfQorICAgIEZsb2F0UmVjdCBjYWxjdWxhdGVNYXJrZXJCb3VuZHNJZk5lZWRl
ZCgpOworICAgIHZvaWQgc2V0U3Ryb2tlQW5kTWFya2VyQm91bmRpbmdCb3goRmxvYXRSZWN0IHJl
Y3QpIHsgbV9zdHJva2VBbmRNYXJrZXJCb3VuZGluZ0JveCA9IHJlY3Q7IH0KKworICAgIGJvb2wg
aGFzUGF0aCgpIGNvbnN0IHsgcmV0dXJuIG1fcGF0aC5nZXQoKTsgfQorCitwcml2YXRlOgorICAg
IC8vIEhpdC1kZXRlY3Rpb24gc2VwYXJhdGVkIGZvciB0aGUgZmlsbCBhbmQgdGhlIHN0cm9rZQor
ICAgIGJvb2wgZmlsbENvbnRhaW5zKGNvbnN0IEZsb2F0UG9pbnQmLCBib29sIHJlcXVpcmVzRmls
bCA9IHRydWUsIGNvbnN0IFdpbmRSdWxlIGZpbGxSdWxlID0gUlVMRV9OT05aRVJPKTsKKyAgICBi
b29sIHN0cm9rZUNvbnRhaW5zKGNvbnN0IEZsb2F0UG9pbnQmLCBib29sIHJlcXVpcmVzU3Ryb2tl
ID0gdHJ1ZSk7CisKKyAgICB2aXJ0dWFsIEZsb2F0UmVjdCByZXBhaW50UmVjdEluTG9jYWxDb29y
ZGluYXRlcygpIGNvbnN0IHsgcmV0dXJuIG1fcmVwYWludEJvdW5kaW5nQm94OyB9CisgICAgdmly
dHVhbCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIGxvY2FsVG9QYXJlbnRUcmFuc2Zvcm0oKSBjb25z
dCB7IHJldHVybiBtX2xvY2FsVHJhbnNmb3JtOyB9CisgICAgdmlydHVhbCBBZmZpbmVUcmFuc2Zv
cm0gbG9jYWxUcmFuc2Zvcm0oKSBjb25zdCB7IHJldHVybiBtX2xvY2FsVHJhbnNmb3JtOyB9CisK
KyAgICB2aXJ0dWFsIGJvb2wgaXNTVkdTaGFwZSgpIGNvbnN0IHsgcmV0dXJuIHRydWU7IH0KKyAg
ICB2aXJ0dWFsIGNvbnN0IGNoYXIqIHJlbmRlck5hbWUoKSBjb25zdCB7IHJldHVybiAiUmVuZGVy
U1ZHU2hhcGUiOyB9CisgICAgdmlydHVhbCBib29sIGlzUm91bmRlZFJlY3QoKSB7IHJldHVybiBm
YWxzZTsgfQorCisgICAgdmlydHVhbCB2b2lkIGxheW91dCgpOworICAgIHZpcnR1YWwgdm9pZCBw
YWludChQYWludEluZm8mLCBjb25zdCBMYXlvdXRQb2ludCYpOworICAgIHZpcnR1YWwgdm9pZCBh
ZGRGb2N1c1JpbmdSZWN0cyhWZWN0b3I8TGF5b3V0UmVjdD4mLCBjb25zdCBMYXlvdXRQb2ludCYp
OworICAgIHZpcnR1YWwgdm9pZCBpbmZsYXRlV2l0aE1hcmtlckJvdW5kcygpIHsgfQorCisgICAg
dmlydHVhbCBib29sIG5vZGVBdEZsb2F0UG9pbnQoY29uc3QgSGl0VGVzdFJlcXVlc3QmLCBIaXRU
ZXN0UmVzdWx0JiwgY29uc3QgRmxvYXRQb2ludCYgcG9pbnRJblBhcmVudCwgSGl0VGVzdEFjdGlv
bik7CisKKyAgICB2b2lkIHVwZGF0ZUNhY2hlZEJvdW5kYXJpZXMoKTsKKworICAgIHZvaWQgc2V0
dXBTcXVhcmVDYXBQYXRoKGludCYgYXBwbHlNb2RlKTsKKyAgICBib29sIHNldHVwTm9uU2NhbGlu
Z1N0cm9rZVBhdGgoR3JhcGhpY3NDb250ZXh0U3RhdGVTYXZlciYpOworICAgIGJvb2wgc2hvdWxk
U3Ryb2tlWmVyb0xlbmd0aFN1YnBhdGgoKSBjb25zdDsKKyAgICBGbG9hdFJlY3QgemVyb0xlbmd0
aFN1YnBhdGhSZWN0KCkgY29uc3Q7CisKKyAgICB2b2lkIGZpbGxBbmRTdHJva2VQYXRoKEdyYXBo
aWNzQ29udGV4dCopOworCitwcml2YXRlOgorICAgIEZsb2F0UmVjdCBtX2ZpbGxCb3VuZGluZ0Jv
eDsKKyAgICBGbG9hdFJlY3QgbV9zdHJva2VBbmRNYXJrZXJCb3VuZGluZ0JveDsKKyAgICBGbG9h
dFJlY3QgbV9yZXBhaW50Qm91bmRpbmdCb3g7CisgICAgU1ZHTWFya2VyTGF5b3V0SW5mbyBtX21h
cmtlckxheW91dEluZm87CisgICAgQWZmaW5lVHJhbnNmb3JtIG1fbG9jYWxUcmFuc2Zvcm07Cisg
ICAgT3duUHRyPFBhdGg+IG1fcGF0aDsKKworICAgIGJvb2wgbV9uZWVkc0JvdW5kYXJpZXNVcGRh
dGUgOiAxOworICAgIGJvb2wgbV9uZWVkc1NoYXBlVXBkYXRlIDogMTsKKyAgICBib29sIG1fbmVl
ZHNUcmFuc2Zvcm1VcGRhdGUgOiAxOworICAgIGJvb2wgbV9maWxsRmFsbGJhY2sgOiAxOworICAg
IGJvb2wgbV9zdHJva2VDb250YWluc0ZhbGxCYWNrIDogMTsKK307CisKK2lubGluZSBSZW5kZXJT
VkdTaGFwZSogdG9SZW5kZXJTVkdTaGFwZShSZW5kZXJPYmplY3QqIG9iamVjdCkKK3sKKyAgICBB
U1NFUlQoIW9iamVjdCB8fCBvYmplY3QtPmlzU1ZHU2hhcGUoKSk7CisgICAgcmV0dXJuIHN0YXRp
Y19jYXN0PFJlbmRlclNWR1NoYXBlKj4ob2JqZWN0KTsKK30KKworaW5saW5lIGNvbnN0IFJlbmRl
clNWR1NoYXBlKiB0b1JlbmRlclNWR1NoYXBlKGNvbnN0IFJlbmRlck9iamVjdCogb2JqZWN0KQor
eworICAgIEFTU0VSVCghb2JqZWN0IHx8IG9iamVjdC0+aXNTVkdTaGFwZSgpKTsKKyAgICByZXR1
cm4gc3RhdGljX2Nhc3Q8Y29uc3QgUmVuZGVyU1ZHU2hhcGUqPihvYmplY3QpOworfQorCisvLyBU
aGlzIHdpbGwgY2F0Y2ggYW55b25lIGRvaW5nIGFuIHVubmVjZXNzYXJ5IGNhc3QuCit2b2lkIHRv
UmVuZGVyU1ZHU2hhcGUoY29uc3QgUmVuZGVyU1ZHU2hhcGUqKTsKKworfQorCisjZW5kaWYgLy8g
RU5BQkxFKFNWRykKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L3N2Zy9TVkdJbmxpbmVUZXh0Qm94LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcv
U1ZHSW5saW5lVGV4dEJveC5jcHAKaW5kZXggYzFjNWFmYS4uNjAxMWViOSAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdJbmxpbmVUZXh0Qm94LmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR0lubGluZVRleHRCb3guY3BwCkBAIC0zNzAs
MTQgKzM3MCwxNCBAQCBib29sIFNWR0lubGluZVRleHRCb3g6OmFjcXVpcmVQYWludGluZ1Jlc291
cmNlKEdyYXBoaWNzQ29udGV4dComIGNvbnRleHQsIGZsb2F0CiAgICAgcmV0dXJuIHRydWU7CiB9
CiAKLXZvaWQgU1ZHSW5saW5lVGV4dEJveDo6cmVsZWFzZVBhaW50aW5nUmVzb3VyY2UoR3JhcGhp
Y3NDb250ZXh0KiYgY29udGV4dCwgY29uc3QgUGF0aCogcGF0aCkKK3ZvaWQgU1ZHSW5saW5lVGV4
dEJveDo6cmVsZWFzZVBhaW50aW5nUmVzb3VyY2UoR3JhcGhpY3NDb250ZXh0KiYgY29udGV4dCwg
Y29uc3QgUGF0aCopCiB7CiAgICAgQVNTRVJUKG1fcGFpbnRpbmdSZXNvdXJjZSk7CiAKICAgICBS
ZW5kZXJPYmplY3QqIHBhcmVudFJlbmRlcmVyID0gcGFyZW50KCktPnJlbmRlcmVyKCk7CiAgICAg
QVNTRVJUKHBhcmVudFJlbmRlcmVyKTsKIAotICAgIG1fcGFpbnRpbmdSZXNvdXJjZS0+cG9zdEFw
cGx5UmVzb3VyY2UocGFyZW50UmVuZGVyZXIsIGNvbnRleHQsIG1fcGFpbnRpbmdSZXNvdXJjZU1v
ZGUsIHBhdGgpOworICAgIG1fcGFpbnRpbmdSZXNvdXJjZS0+cG9zdEFwcGx5UmVzb3VyY2UocGFy
ZW50UmVuZGVyZXIsIGNvbnRleHQsIG1fcGFpbnRpbmdSZXNvdXJjZU1vZGUsIC8qUGF0aCovIDAs
IC8qUmVuZGVyU1ZHU2hhcGUqLyAwKTsKICAgICBtX3BhaW50aW5nUmVzb3VyY2UgPSAwOwogfQog
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR1JlbmRlclN1cHBv
cnQuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdSZW5kZXJTdXBwb3J0LmNw
cAppbmRleCAwMDc5MjE5Li5iYzEwMTM5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvc3ZnL1NWR1JlbmRlclN1cHBvcnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9zdmcvU1ZHUmVuZGVyU3VwcG9ydC5jcHAKQEAgLTE1Myw3ICsxNTMsNyBAQCB2b2lkIFNW
R1JlbmRlclN1cHBvcnQ6OmZpbmlzaFJlbmRlclNWR0NvbnRlbnQoUmVuZGVyT2JqZWN0KiBvYmpl
Y3QsIFBhaW50SW5mbyYgcAogICAgIFNWR1Jlc291cmNlcyogcmVzb3VyY2VzID0gU1ZHUmVzb3Vy
Y2VzQ2FjaGU6OmNhY2hlZFJlc291cmNlc0ZvclJlbmRlck9iamVjdChvYmplY3QpOwogICAgIGlm
IChyZXNvdXJjZXMpIHsKICAgICAgICAgaWYgKFJlbmRlclNWR1Jlc291cmNlRmlsdGVyKiBmaWx0
ZXIgPSByZXNvdXJjZXMtPmZpbHRlcigpKSB7Ci0gICAgICAgICAgICBmaWx0ZXItPnBvc3RBcHBs
eVJlc291cmNlKG9iamVjdCwgcGFpbnRJbmZvLmNvbnRleHQsIEFwcGx5VG9EZWZhdWx0TW9kZSwg
LyogcGF0aCAqLzApOworICAgICAgICAgICAgZmlsdGVyLT5wb3N0QXBwbHlSZXNvdXJjZShzdGF0
aWNfY2FzdDxSZW5kZXJTVkdTaGFwZSo+KG9iamVjdCksIHBhaW50SW5mby5jb250ZXh0LCBBcHBs
eVRvRGVmYXVsdE1vZGUsIDAsIDApOwogICAgICAgICAgICAgcGFpbnRJbmZvLmNvbnRleHQgPSBz
YXZlZENvbnRleHQ7CiAgICAgICAgIH0KICAgICB9CkBAIC0yMjUsOSArMjI1LDkgQEAgdm9pZCBT
VkdSZW5kZXJTdXBwb3J0OjpsYXlvdXRDaGlsZHJlbihSZW5kZXJPYmplY3QqIHN0YXJ0LCBib29s
IHNlbGZOZWVkc0xheW91dCkKICAgICAgICAgICAgIC8vIFdoZW4gc2VsZk5lZWRzTGF5b3V0IGlz
IGZhbHNlIGFuZCB0aGUgbGF5b3V0IHNpemUgY2hhbmdlZCwgd2UgaGF2ZSB0byBjaGVjayB3aGV0
aGVyIHRoaXMgY2hpbGQgdXNlcyByZWxhdGl2ZSBsZW5ndGhzCiAgICAgICAgICAgICBpZiAoU1ZH
RWxlbWVudCogZWxlbWVudCA9IGNoaWxkLT5ub2RlKCktPmlzU1ZHRWxlbWVudCgpID8gc3RhdGlj
X2Nhc3Q8U1ZHRWxlbWVudCo+KGNoaWxkLT5ub2RlKCkpIDogMCkgewogICAgICAgICAgICAgICAg
IGlmIChlbGVtZW50LT5pc1N0eWxlZCgpICYmIHN0YXRpY19jYXN0PFNWR1N0eWxlZEVsZW1lbnQq
PihlbGVtZW50KS0+aGFzUmVsYXRpdmVMZW5ndGhzKCkpIHsKLSAgICAgICAgICAgICAgICAgICAg
Ly8gV2hlbiB0aGUgbGF5b3V0IHNpemUgY2hhbmdlZCBhbmQgd2hlbiB1c2luZyByZWxhdGl2ZSB2
YWx1ZXMgdGVsbCB0aGUgUmVuZGVyU1ZHUGF0aCB0byB1cGRhdGUgaXRzIFBhdGggb2JqZWN0Ci0g
ICAgICAgICAgICAgICAgICAgIGlmIChjaGlsZC0+aXNTVkdQYXRoKCkpCi0gICAgICAgICAgICAg
ICAgICAgICAgICB0b1JlbmRlclNWR1BhdGgoY2hpbGQpLT5zZXROZWVkc1BhdGhVcGRhdGUoKTsK
KyAgICAgICAgICAgICAgICAgICAgLy8gV2hlbiB0aGUgbGF5b3V0IHNpemUgY2hhbmdlZCBhbmQg
d2hlbiB1c2luZyByZWxhdGl2ZSB2YWx1ZXMgdGVsbCB0aGUgUmVuZGVyU1ZHU2hhcGUgdG8gdXBk
YXRlIGl0cyBzaGFwZSBvYmplY3QKKyAgICAgICAgICAgICAgICAgICAgaWYgKGNoaWxkLT5pc1NW
R1NoYXBlKCkpCisgICAgICAgICAgICAgICAgICAgICAgICB0b1JlbmRlclNWR1NoYXBlKGNoaWxk
KS0+c2V0TmVlZHNTaGFwZVVwZGF0ZSgpOwogCiAgICAgICAgICAgICAgICAgICAgIG5lZWRzTGF5
b3V0ID0gdHJ1ZTsKICAgICAgICAgICAgICAgICB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvc3ZnL1NWR1JlbmRlclRyZWVBc1RleHQuY3BwIGIvU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL3N2Zy9TVkdSZW5kZXJUcmVlQXNUZXh0LmNwcAppbmRleCBhMTYyOTY5Li5kMWFk
NzJhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR1JlbmRlclRy
ZWVBc1RleHQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHUmVuZGVy
VHJlZUFzVGV4dC5jcHAKQEAgLTU1LDYgKzU1LDcgQEAKICNpbmNsdWRlICJSZW5kZXJTVkdSZXNv
dXJjZVJhZGlhbEdyYWRpZW50LmgiCiAjaW5jbHVkZSAiUmVuZGVyU1ZHUmVzb3VyY2VTb2xpZENv
bG9yLmgiCiAjaW5jbHVkZSAiUmVuZGVyU1ZHUm9vdC5oIgorI2luY2x1ZGUgIlJlbmRlclNWR1No
YXBlLmgiCiAjaW5jbHVkZSAiUmVuZGVyU1ZHVGV4dC5oIgogI2luY2x1ZGUgIlJlbmRlclRyZWVB
c1RleHQuaCIKICNpbmNsdWRlICJTVkdDaXJjbGVFbGVtZW50LmgiCkBAIC0yODksMTggKzI5MCwx
OCBAQCBzdGF0aWMgdm9pZCB3cml0ZVN0eWxlKFRleHRTdHJlYW0mIHRzLCBjb25zdCBSZW5kZXJP
YmplY3QmIG9iamVjdCkKICAgICAgICAgd3JpdGVOYW1lVmFsdWVQYWlyKHRzLCAidHJhbnNmb3Jt
Iiwgb2JqZWN0LmxvY2FsVHJhbnNmb3JtKCkpOwogICAgIHdyaXRlSWZOb3REZWZhdWx0KHRzLCAi
aW1hZ2UgcmVuZGVyaW5nIiwgc3R5bGUtPmltYWdlUmVuZGVyaW5nKCksIFJlbmRlclN0eWxlOjpp
bml0aWFsSW1hZ2VSZW5kZXJpbmcoKSk7CiAgICAgd3JpdGVJZk5vdERlZmF1bHQodHMsICJvcGFj
aXR5Iiwgc3R5bGUtPm9wYWNpdHkoKSwgUmVuZGVyU3R5bGU6OmluaXRpYWxPcGFjaXR5KCkpOwot
ICAgIGlmIChvYmplY3QuaXNTVkdQYXRoKCkpIHsKLSAgICAgICAgY29uc3QgUmVuZGVyU1ZHUGF0
aCYgcGF0aCA9IHN0YXRpY19jYXN0PGNvbnN0IFJlbmRlclNWR1BhdGgmPihvYmplY3QpOwotICAg
ICAgICBBU1NFUlQocGF0aC5ub2RlKCkpOwotICAgICAgICBBU1NFUlQocGF0aC5ub2RlKCktPmlz
U1ZHRWxlbWVudCgpKTsKKyAgICBpZiAob2JqZWN0LmlzU1ZHU2hhcGUoKSkgeworICAgICAgICBj
b25zdCBSZW5kZXJTVkdTaGFwZSYgc2hhcGUgPSBzdGF0aWNfY2FzdDxjb25zdCBSZW5kZXJTVkdT
aGFwZSY+KG9iamVjdCk7CisgICAgICAgIEFTU0VSVChzaGFwZS5ub2RlKCkpOworICAgICAgICBB
U1NFUlQoc2hhcGUubm9kZSgpLT5pc1NWR0VsZW1lbnQoKSk7CiAKICAgICAgICAgQ29sb3IgZmFs
bGJhY2tDb2xvcjsKLSAgICAgICAgaWYgKFJlbmRlclNWR1Jlc291cmNlKiBzdHJva2VQYWludGlu
Z1Jlc291cmNlID0gUmVuZGVyU1ZHUmVzb3VyY2U6OnN0cm9rZVBhaW50aW5nUmVzb3VyY2UoY29u
c3RfY2FzdDxSZW5kZXJTVkdQYXRoKj4oJnBhdGgpLCBwYXRoLnN0eWxlKCksIGZhbGxiYWNrQ29s
b3IpKSB7CisgICAgICAgIGlmIChSZW5kZXJTVkdSZXNvdXJjZSogc3Ryb2tlUGFpbnRpbmdSZXNv
dXJjZSA9IFJlbmRlclNWR1Jlc291cmNlOjpzdHJva2VQYWludGluZ1Jlc291cmNlKGNvbnN0X2Nh
c3Q8UmVuZGVyU1ZHU2hhcGUqPigmc2hhcGUpLCBzaGFwZS5zdHlsZSgpLCBmYWxsYmFja0NvbG9y
KSkgewogICAgICAgICAgICAgVGV4dFN0cmVhbVNlcGFyYXRvciBzKCIgIik7CiAgICAgICAgICAg
ICB0cyA8PCAiIFtzdHJva2U9eyIgPDwgczsKICAgICAgICAgICAgIHdyaXRlU1ZHUGFpbnRpbmdS
ZXNvdXJjZSh0cywgc3Ryb2tlUGFpbnRpbmdSZXNvdXJjZSk7CiAKLSAgICAgICAgICAgIFNWR0Vs
ZW1lbnQqIGVsZW1lbnQgPSBzdGF0aWNfY2FzdDxTVkdFbGVtZW50Kj4ocGF0aC5ub2RlKCkpOwor
ICAgICAgICAgICAgU1ZHRWxlbWVudCogZWxlbWVudCA9IHN0YXRpY19jYXN0PFNWR0VsZW1lbnQq
PihzaGFwZS5ub2RlKCkpOwogICAgICAgICAgICAgZG91YmxlIGRhc2hPZmZzZXQgPSBzdmdTdHls
ZS0+c3Ryb2tlRGFzaE9mZnNldCgpLnZhbHVlKGVsZW1lbnQpOwogICAgICAgICAgICAgZG91Ymxl
IHN0cm9rZVdpZHRoID0gc3ZnU3R5bGUtPnN0cm9rZVdpZHRoKCkudmFsdWUoZWxlbWVudCk7CiAg
ICAgICAgICAgICBjb25zdCBWZWN0b3I8U1ZHTGVuZ3RoPiYgZGFzaGVzID0gc3ZnU3R5bGUtPnN0
cm9rZURhc2hBcnJheSgpOwpAQCAtMzIyLDcgKzMyMyw3IEBAIHN0YXRpYyB2b2lkIHdyaXRlU3R5
bGUoVGV4dFN0cmVhbSYgdHMsIGNvbnN0IFJlbmRlck9iamVjdCYgb2JqZWN0KQogICAgICAgICAg
ICAgdHMgPDwgIn1dIjsKICAgICAgICAgfQogCi0gICAgICAgIGlmIChSZW5kZXJTVkdSZXNvdXJj
ZSogZmlsbFBhaW50aW5nUmVzb3VyY2UgPSBSZW5kZXJTVkdSZXNvdXJjZTo6ZmlsbFBhaW50aW5n
UmVzb3VyY2UoY29uc3RfY2FzdDxSZW5kZXJTVkdQYXRoKj4oJnBhdGgpLCBwYXRoLnN0eWxlKCks
IGZhbGxiYWNrQ29sb3IpKSB7CisgICAgICAgIGlmIChSZW5kZXJTVkdSZXNvdXJjZSogZmlsbFBh
aW50aW5nUmVzb3VyY2UgPSBSZW5kZXJTVkdSZXNvdXJjZTo6ZmlsbFBhaW50aW5nUmVzb3VyY2Uo
Y29uc3RfY2FzdDxSZW5kZXJTVkdTaGFwZSo+KCZzaGFwZSksIHNoYXBlLnN0eWxlKCksIGZhbGxi
YWNrQ29sb3IpKSB7CiAgICAgICAgICAgICBUZXh0U3RyZWFtU2VwYXJhdG9yIHMoIiAiKTsKICAg
ICAgICAgICAgIHRzIDw8ICIgW2ZpbGw9eyIgPDwgczsKICAgICAgICAgICAgIHdyaXRlU1ZHUGFp
bnRpbmdSZXNvdXJjZSh0cywgZmlsbFBhaW50aW5nUmVzb3VyY2UpOwpAQCAtMzQ2LDEyICszNDcs
MTIgQEAgc3RhdGljIFRleHRTdHJlYW0mIHdyaXRlUG9zaXRpb25BbmRTdHlsZShUZXh0U3RyZWFt
JiB0cywgY29uc3QgUmVuZGVyT2JqZWN0JiBvYmoKICAgICByZXR1cm4gdHM7CiB9CiAKLXN0YXRp
YyBUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJlYW0mIHRzLCBjb25zdCBSZW5kZXJTVkdQ
YXRoJiBwYXRoKQorc3RhdGljIFRleHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYgdHMs
IGNvbnN0IFJlbmRlclNWR1NoYXBlJiBzaGFwZSkKIHsKLSAgICB3cml0ZVBvc2l0aW9uQW5kU3R5
bGUodHMsIHBhdGgpOworICAgIHdyaXRlUG9zaXRpb25BbmRTdHlsZSh0cywgc2hhcGUpOwogCi0g
ICAgQVNTRVJUKHBhdGgubm9kZSgpLT5pc1NWR0VsZW1lbnQoKSk7Ci0gICAgU1ZHRWxlbWVudCog
c3ZnRWxlbWVudCA9IHN0YXRpY19jYXN0PFNWR0VsZW1lbnQqPihwYXRoLm5vZGUoKSk7CisgICAg
QVNTRVJUKHNoYXBlLm5vZGUoKS0+aXNTVkdFbGVtZW50KCkpOworICAgIFNWR0VsZW1lbnQqIHN2
Z0VsZW1lbnQgPSBzdGF0aWNfY2FzdDxTVkdFbGVtZW50Kj4oc2hhcGUubm9kZSgpKTsKIAogICAg
IGlmIChzdmdFbGVtZW50LT5oYXNUYWdOYW1lKFNWR05hbWVzOjpyZWN0VGFnKSkgewogICAgICAg
ICBTVkdSZWN0RWxlbWVudCogZWxlbWVudCA9IHN0YXRpY19jYXN0PFNWR1JlY3RFbGVtZW50Kj4o
c3ZnRWxlbWVudCk7CkBAIC02NTMsMTEgKzY1NCwxMSBAQCB2b2lkIHdyaXRlU1ZHSW1hZ2UoVGV4
dFN0cmVhbSYgdHMsIGNvbnN0IFJlbmRlclNWR0ltYWdlJiBpbWFnZSwgaW50IGluZGVudCkKICAg
ICB3cml0ZVJlc291cmNlcyh0cywgaW1hZ2UsIGluZGVudCk7CiB9CiAKLXZvaWQgd3JpdGUoVGV4
dFN0cmVhbSYgdHMsIGNvbnN0IFJlbmRlclNWR1BhdGgmIHBhdGgsIGludCBpbmRlbnQpCit2b2lk
IHdyaXRlKFRleHRTdHJlYW0mIHRzLCBjb25zdCBSZW5kZXJTVkdTaGFwZSYgc2hhcGUsIGludCBp
bmRlbnQpCiB7Ci0gICAgd3JpdGVTdGFuZGFyZFByZWZpeCh0cywgcGF0aCwgaW5kZW50KTsKLSAg
ICB0cyA8PCBwYXRoIDw8ICJcbiI7Ci0gICAgd3JpdGVSZXNvdXJjZXModHMsIHBhdGgsIGluZGVu
dCk7CisgICAgd3JpdGVTdGFuZGFyZFByZWZpeCh0cywgc2hhcGUsIGluZGVudCk7CisgICAgdHMg
PDwgc2hhcGUgPDwgIlxuIjsKKyAgICB3cml0ZVJlc291cmNlcyh0cywgc2hhcGUsIGluZGVudCk7
CiB9CiAKIHZvaWQgd3JpdGVTVkdHcmFkaWVudFN0b3AoVGV4dFN0cmVhbSYgdHMsIGNvbnN0IFJl
bmRlclNWR0dyYWRpZW50U3RvcCYgc3RvcCwgaW50IGluZGVudCkKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHUmVuZGVyVHJlZUFzVGV4dC5oIGIvU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdSZW5kZXJUcmVlQXNUZXh0LmgKaW5kZXggY2UwN2E1Yy4u
MzU5OGM4MyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdSZW5k
ZXJUcmVlQXNUZXh0LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdSZW5k
ZXJUcmVlQXNUZXh0LmgKQEAgLTQxLDE0ICs0MSwxNCBAQCBjbGFzcyBSZW5kZXJJbWFnZTsKIGNs
YXNzIFJlbmRlck9iamVjdDsKIGNsYXNzIFJlbmRlclNWR0dyYWRpZW50U3RvcDsKIGNsYXNzIFJl
bmRlclNWR0ltYWdlOwotY2xhc3MgUmVuZGVyU1ZHUGF0aDsKK2NsYXNzIFJlbmRlclNWR1NoYXBl
OwogY2xhc3MgUmVuZGVyU1ZHUm9vdDsKIGNsYXNzIFJlbmRlclRleHQ7CiBjbGFzcyBBZmZpbmVU
cmFuc2Zvcm07CiBjbGFzcyBTVkdVbml0VHlwZXM7CiAKIC8vIGZ1bmN0aW9ucyB1c2VkIGJ5IHRo
ZSBtYWluIFJlbmRlclRyZWVBc1RleHQgY29kZQotdm9pZCB3cml0ZShUZXh0U3RyZWFtJiwgY29u
c3QgUmVuZGVyU1ZHUGF0aCYsIGludCBpbmRlbnQpOwordm9pZCB3cml0ZShUZXh0U3RyZWFtJiwg
Y29uc3QgUmVuZGVyU1ZHU2hhcGUmLCBpbnQgaW5kZW50KTsKIHZvaWQgd3JpdGUoVGV4dFN0cmVh
bSYsIGNvbnN0IFJlbmRlclNWR1Jvb3QmLCBpbnQgaW5kZW50KTsKIHZvaWQgd3JpdGVTVkdHcmFk
aWVudFN0b3AoVGV4dFN0cmVhbSYsIGNvbnN0IFJlbmRlclNWR0dyYWRpZW50U3RvcCYsIGludCBp
bmRlbnQpOwogdm9pZCB3cml0ZVNWR1Jlc291cmNlQ29udGFpbmVyKFRleHRTdHJlYW0mLCBjb25z
dCBSZW5kZXJPYmplY3QmLCBpbnQgaW5kZW50KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9zdmcvU1ZHVGV4dFJ1blJlbmRlcmluZ0NvbnRleHQuY3BwIGIvU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdUZXh0UnVuUmVuZGVyaW5nQ29udGV4dC5jcHAKaW5kZXgg
MzNhY2Y5Mi4uMzE2OTk0MiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2
Zy9TVkdUZXh0UnVuUmVuZGVyaW5nQ29udGV4dC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL3N2Zy9TVkdUZXh0UnVuUmVuZGVyaW5nQ29udGV4dC5jcHAKQEAgLTE1NCwxMyArMTU0
LDEzIEBAIHZvaWQgU1ZHVGV4dFJ1blJlbmRlcmluZ0NvbnRleHQ6OmRyYXdTVkdHbHlwaHMoR3Jh
cGhpY3NDb250ZXh0KiBjb250ZXh0LCBjb25zdCBUCiAKICAgICAgICAgUGF0aCBnbHlwaFBhdGgg
PSBzdmdHbHlwaC5wYXRoRGF0YTsKICAgICAgICAgZ2x5cGhQYXRoLnRyYW5zZm9ybShnbHlwaFBh
dGhUcmFuc2Zvcm0pOwotCiAgICAgICAgIGlmIChhY3RpdmVQYWludGluZ1Jlc291cmNlLT5hcHBs
eVJlc291cmNlKHBhcmVudFJlbmRlck9iamVjdCwgcGFyZW50UmVuZGVyT2JqZWN0U3R5bGUsIGNv
bnRleHQsIHJlc291cmNlTW9kZSkpIHsKICAgICAgICAgICAgIGlmIChyZW5kZXJPYmplY3QgJiYg
cmVuZGVyT2JqZWN0LT5pc1NWR0lubGluZVRleHQoKSkgeworCiAgICAgICAgICAgICAgICAgY29u
c3QgUmVuZGVyU1ZHSW5saW5lVGV4dCogdGV4dFJlbmRlcmVyID0gdG9SZW5kZXJTVkdJbmxpbmVU
ZXh0KHJlbmRlck9iamVjdCk7CiAgICAgICAgICAgICAgICAgY29udGV4dC0+c2V0U3Ryb2tlVGhp
Y2tuZXNzKGNvbnRleHQtPnN0cm9rZVRoaWNrbmVzcygpICogdGV4dFJlbmRlcmVyLT5zY2FsaW5n
RmFjdG9yKCkpOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgYWN0aXZlUGFpbnRpbmdSZXNv
dXJjZS0+cG9zdEFwcGx5UmVzb3VyY2UocGFyZW50UmVuZGVyT2JqZWN0LCBjb250ZXh0LCByZXNv
dXJjZU1vZGUsICZnbHlwaFBhdGgpOworICAgICAgICAgICAgYWN0aXZlUGFpbnRpbmdSZXNvdXJj
ZS0+cG9zdEFwcGx5UmVzb3VyY2UocGFyZW50UmVuZGVyT2JqZWN0LCBjb250ZXh0LCByZXNvdXJj
ZU1vZGUsICZnbHlwaFBhdGgsIDApOwogICAgICAgICAgfQogIAogICAgICAgICBjb250ZXh0LT5y
ZXN0b3JlKCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHQ2lyY2xlRWxlbWVu
dC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHQ2lyY2xlRWxlbWVudC5jcHAKaW5kZXggMmFl
NjliOC4uMDM2NjllMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0NpcmNsZUVs
ZW1lbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdDaXJjbGVFbGVtZW50LmNwcApA
QCAtMTI0LDcgKzEyNCw3IEBAIHZvaWQgU1ZHQ2lyY2xlRWxlbWVudDo6c3ZnQXR0cmlidXRlQ2hh
bmdlZChjb25zdCBRdWFsaWZpZWROYW1lJiBhdHRyTmFtZSkKICAgICAgICAgcmV0dXJuOwogCiAg
ICAgaWYgKGlzTGVuZ3RoQXR0cmlidXRlKSB7Ci0gICAgICAgIHJlbmRlcmVyLT5zZXROZWVkc1Bh
dGhVcGRhdGUoKTsKKyAgICAgICAgcmVuZGVyZXItPnNldE5lZWRzU2hhcGVVcGRhdGUoKTsKICAg
ICAgICAgUmVuZGVyU1ZHUmVzb3VyY2U6Om1hcmtGb3JMYXlvdXRBbmRQYXJlbnRSZXNvdXJjZUlu
dmFsaWRhdGlvbihyZW5kZXJlcik7CiAgICAgICAgIHJldHVybjsKICAgICB9CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRWxsaXBzZUVsZW1lbnQuY3BwIGIvU291cmNlL1dlYkNv
cmUvc3ZnL1NWR0VsbGlwc2VFbGVtZW50LmNwcAppbmRleCBjZWEwNjZkLi5jYTAxN2M0IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRWxsaXBzZUVsZW1lbnQuY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3N2Zy9TVkdFbGxpcHNlRWxlbWVudC5jcHAKQEAgLTEyOSw3ICsxMjksNyBA
QCB2b2lkIFNWR0VsbGlwc2VFbGVtZW50OjpzdmdBdHRyaWJ1dGVDaGFuZ2VkKGNvbnN0IFF1YWxp
ZmllZE5hbWUmIGF0dHJOYW1lKQogICAgICAgICByZXR1cm47CiAKICAgICBpZiAoaXNMZW5ndGhB
dHRyaWJ1dGUpIHsKLSAgICAgICAgcmVuZGVyZXItPnNldE5lZWRzUGF0aFVwZGF0ZSgpOworICAg
ICAgICByZW5kZXJlci0+c2V0TmVlZHNTaGFwZVVwZGF0ZSgpOwogICAgICAgICBSZW5kZXJTVkdS
ZXNvdXJjZTo6bWFya0ZvckxheW91dEFuZFBhcmVudFJlc291cmNlSW52YWxpZGF0aW9uKHJlbmRl
cmVyKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3N2Zy9TVkdMaW5lRWxlbWVudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHTGluZUVsZW1l
bnQuY3BwCmluZGV4IGM3Y2ExMWUuLmIxYmI4ZWEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3N2Zy9TVkdMaW5lRWxlbWVudC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0xpbmVF
bGVtZW50LmNwcApAQCAtMTI5LDcgKzEyOSw3IEBAIHZvaWQgU1ZHTGluZUVsZW1lbnQ6OnN2Z0F0
dHJpYnV0ZUNoYW5nZWQoY29uc3QgUXVhbGlmaWVkTmFtZSYgYXR0ck5hbWUpCiAgICAgICAgIHJl
dHVybjsKIAogICAgIGlmIChpc0xlbmd0aEF0dHJpYnV0ZSkgewotICAgICAgICByZW5kZXJlci0+
c2V0TmVlZHNQYXRoVXBkYXRlKCk7CisgICAgICAgIHJlbmRlcmVyLT5zZXROZWVkc1NoYXBlVXBk
YXRlKCk7CiAgICAgICAgIFJlbmRlclNWR1Jlc291cmNlOjptYXJrRm9yTGF5b3V0QW5kUGFyZW50
UmVzb3VyY2VJbnZhbGlkYXRpb24ocmVuZGVyZXIpOwogICAgICAgICByZXR1cm47CiAgICAgfQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvc3ZnL1NWR1BhdGhFbGVtZW50LmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL3N2Zy9TVkdQYXRoRWxlbWVudC5jcHAKaW5kZXggYTdhMzM3ZS4uZmUzMzU5NSAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvc3ZnL1NWR1BhdGhFbGVtZW50LmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9zdmcvU1ZHUGF0aEVsZW1lbnQuY3BwCkBAIC0yNjksNyArMjY5LDcgQEAg
dm9pZCBTVkdQYXRoRWxlbWVudDo6c3ZnQXR0cmlidXRlQ2hhbmdlZChjb25zdCBRdWFsaWZpZWRO
YW1lJiBhdHRyTmFtZSkKICAgICAgICAgfQogCiAgICAgICAgIGlmIChyZW5kZXJlcikKLSAgICAg
ICAgICAgIHJlbmRlcmVyLT5zZXROZWVkc1BhdGhVcGRhdGUoKTsKKyAgICAgICAgICAgIHJlbmRl
cmVyLT5zZXROZWVkc1NoYXBlVXBkYXRlKCk7CiAgICAgfQogCiAgICAgaWYgKHJlbmRlcmVyKQpA
QCAtMzU1LDEwICszNTUsMTYgQEAgdm9pZCBTVkdQYXRoRWxlbWVudDo6cGF0aFNlZ0xpc3RDaGFu
Z2VkKFNWR1BhdGhTZWdSb2xlIHJvbGUpCiAgICAgaWYgKCFyZW5kZXJlcikKICAgICAgICAgcmV0
dXJuOwogCi0gICAgcmVuZGVyZXItPnNldE5lZWRzUGF0aFVwZGF0ZSgpOworICAgIHJlbmRlcmVy
LT5zZXROZWVkc1NoYXBlVXBkYXRlKCk7CiAgICAgUmVuZGVyU1ZHUmVzb3VyY2U6Om1hcmtGb3JM
YXlvdXRBbmRQYXJlbnRSZXNvdXJjZUludmFsaWRhdGlvbihyZW5kZXJlcik7CiB9CiAKK1JlbmRl
ck9iamVjdCogU1ZHUGF0aEVsZW1lbnQ6OmNyZWF0ZVJlbmRlcmVyKFJlbmRlckFyZW5hKiBhcmVu
YSwgUmVuZGVyU3R5bGUqKQoreworICAgIC8vIEJ5IGRlZmF1bHQsIGFueSBzdWJjbGFzcyBpcyBl
eHBlY3RlZCB0byBkbyBwYXRoLWJhc2VkIGRyYXdpbmcKKyAgICByZXR1cm4gbmV3IChhcmVuYSkg
UmVuZGVyU1ZHUGF0aCh0aGlzKTsKK30KKwogfQogCiAjZW5kaWYgLy8gRU5BQkxFKFNWRykKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdQYXRoRWxlbWVudC5oIGIvU291cmNlL1dl
YkNvcmUvc3ZnL1NWR1BhdGhFbGVtZW50LmgKaW5kZXggMWQzN2QwZS4uNTRiOGZlMiAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvc3ZnL1NWR1BhdGhFbGVtZW50LmgKKysrIGIvU291cmNlL1dl
YkNvcmUvc3ZnL1NWR1BhdGhFbGVtZW50LmgKQEAgLTEyMiw2ICsxMjIsOCBAQCBwcml2YXRlOgog
ICAgIHZpcnR1YWwgdm9pZCBzeW5jaHJvbml6ZVJlcXVpcmVkRXh0ZW5zaW9ucygpIHsgU1ZHVGVz
dHM6OnN5bmNocm9uaXplUmVxdWlyZWRFeHRlbnNpb25zKHRoaXMpOyB9CiAgICAgdmlydHVhbCB2
b2lkIHN5bmNocm9uaXplU3lzdGVtTGFuZ3VhZ2UoKSB7IFNWR1Rlc3RzOjpzeW5jaHJvbml6ZVN5
c3RlbUxhbmd1YWdlKHRoaXMpOyB9CiAKKyAgICBSZW5kZXJPYmplY3QqIGNyZWF0ZVJlbmRlcmVy
KFJlbmRlckFyZW5hKiwgUmVuZGVyU3R5bGUqKTsKKwogcHJpdmF0ZToKICAgICBPd25QdHI8U1ZH
UGF0aEJ5dGVTdHJlYW0+IG1fcGF0aEJ5dGVTdHJlYW07CiAgICAgbXV0YWJsZSBTVkdTeW5jaHJv
bml6YWJsZUFuaW1hdGVkUHJvcGVydHk8U1ZHUGF0aFNlZ0xpc3Q+IG1fcGF0aFNlZ0xpc3Q7CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHUG9seUVsZW1lbnQuY3BwIGIvU291cmNl
L1dlYkNvcmUvc3ZnL1NWR1BvbHlFbGVtZW50LmNwcAppbmRleCA2MTZiODY3Li5mMzBjYTRhIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHUG9seUVsZW1lbnQuY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3N2Zy9TVkdQb2x5RWxlbWVudC5jcHAKQEAgLTEyNCw3ICsxMjQsNyBAQCB2
b2lkIFNWR1BvbHlFbGVtZW50OjpzdmdBdHRyaWJ1dGVDaGFuZ2VkKGNvbnN0IFF1YWxpZmllZE5h
bWUmIGF0dHJOYW1lKQogICAgICAgICByZXR1cm47CiAKICAgICBpZiAoYXR0ck5hbWUgPT0gU1ZH
TmFtZXM6OnBvaW50c0F0dHIpIHsKLSAgICAgICAgcmVuZGVyZXItPnNldE5lZWRzUGF0aFVwZGF0
ZSgpOworICAgICAgICByZW5kZXJlci0+c2V0TmVlZHNTaGFwZVVwZGF0ZSgpOwogICAgICAgICBS
ZW5kZXJTVkdSZXNvdXJjZTo6bWFya0ZvckxheW91dEFuZFBhcmVudFJlc291cmNlSW52YWxpZGF0
aW9uKHJlbmRlcmVyKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3N2Zy9TVkdSZWN0RWxlbWVudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZH
UmVjdEVsZW1lbnQuY3BwCmluZGV4IGU4NDc3NGQuLjE4NzllMGEgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3N2Zy9TVkdSZWN0RWxlbWVudC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvc3Zn
L1NWR1JlY3RFbGVtZW50LmNwcApAQCAtMjUsNiArMjUsNyBAQAogCiAjaW5jbHVkZSAiQXR0cmli
dXRlLmgiCiAjaW5jbHVkZSAiUmVuZGVyU1ZHUGF0aC5oIgorI2luY2x1ZGUgIlJlbmRlclNWR1Jl
Y3QuaCIKICNpbmNsdWRlICJSZW5kZXJTVkdSZXNvdXJjZS5oIgogI2luY2x1ZGUgIlNWR0VsZW1l
bnRJbnN0YW5jZS5oIgogI2luY2x1ZGUgIlNWR0xlbmd0aC5oIgpAQCAtMzIsNiArMzMsOCBAQAog
CiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKK2NsYXNzIFJlbmRlclNWR1JlY3Q7CisKIC8vIEFuaW1h
dGVkIHByb3BlcnR5IGRlZmluaXRpb25zCiBERUZJTkVfQU5JTUFURURfTEVOR1RIKFNWR1JlY3RF
bGVtZW50LCBTVkdOYW1lczo6eEF0dHIsIFgsIHgpCiBERUZJTkVfQU5JTUFURURfTEVOR1RIKFNW
R1JlY3RFbGVtZW50LCBTVkdOYW1lczo6eUF0dHIsIFksIHkpCkBAIC0xMzcsMTIgKzE0MCwxMiBA
QCB2b2lkIFNWR1JlY3RFbGVtZW50OjpzdmdBdHRyaWJ1dGVDaGFuZ2VkKGNvbnN0IFF1YWxpZmll
ZE5hbWUmIGF0dHJOYW1lKQogICAgIGlmIChTVkdUZXN0czo6aGFuZGxlQXR0cmlidXRlQ2hhbmdl
KHRoaXMsIGF0dHJOYW1lKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgUmVuZGVyU1ZHUGF0aCog
cmVuZGVyZXIgPSBzdGF0aWNfY2FzdDxSZW5kZXJTVkdQYXRoKj4odGhpcy0+cmVuZGVyZXIoKSk7
CisgICAgUmVuZGVyU1ZHUmVjdCogcmVuZGVyZXIgPSBzdGF0aWNfY2FzdDxSZW5kZXJTVkdSZWN0
Kj4odGhpcy0+cmVuZGVyZXIoKSk7CiAgICAgaWYgKCFyZW5kZXJlcikKICAgICAgICAgcmV0dXJu
OwogCiAgICAgaWYgKGlzTGVuZ3RoQXR0cmlidXRlKSB7Ci0gICAgICAgIHJlbmRlcmVyLT5zZXRO
ZWVkc1BhdGhVcGRhdGUoKTsKKyAgICAgICAgcmVuZGVyZXItPnNldE5lZWRzU2hhcGVVcGRhdGUo
KTsKICAgICAgICAgUmVuZGVyU1ZHUmVzb3VyY2U6Om1hcmtGb3JMYXlvdXRBbmRQYXJlbnRSZXNv
dXJjZUludmFsaWRhdGlvbihyZW5kZXJlcik7CiAgICAgICAgIHJldHVybjsKICAgICB9CkBAIC0x
OTgsNiArMjAxLDExIEBAIGJvb2wgU1ZHUmVjdEVsZW1lbnQ6OnNlbGZIYXNSZWxhdGl2ZUxlbmd0
aHMoKSBjb25zdAogICAgICAgICB8fCByeSgpLmlzUmVsYXRpdmUoKTsKIH0KIAorUmVuZGVyT2Jq
ZWN0KiBTVkdSZWN0RWxlbWVudDo6Y3JlYXRlUmVuZGVyZXIoUmVuZGVyQXJlbmEqIGFyZW5hLCBS
ZW5kZXJTdHlsZSopCit7CisgICAgcmV0dXJuIG5ldyAoYXJlbmEpIFJlbmRlclNWR1JlY3QodGhp
cyk7Cit9CisKIH0KIAogI2VuZGlmIC8vIEVOQUJMRShTVkcpCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9zdmcvU1ZHUmVjdEVsZW1lbnQuaCBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdSZWN0
RWxlbWVudC5oCmluZGV4IDk5NDM3ZjMuLjliZjYwMmYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3N2Zy9TVkdSZWN0RWxlbWVudC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdSZWN0
RWxlbWVudC5oCkBAIC01Miw2ICs1Miw4IEBAIHByaXZhdGU6CiAKICAgICB2aXJ0dWFsIGJvb2wg
c2VsZkhhc1JlbGF0aXZlTGVuZ3RocygpIGNvbnN0OwogCisgICAgUmVuZGVyT2JqZWN0KiBjcmVh
dGVSZW5kZXJlcihSZW5kZXJBcmVuYSosIFJlbmRlclN0eWxlKik7CisKICAgICBCRUdJTl9ERUNM
QVJFX0FOSU1BVEVEX1BST1BFUlRJRVMoU1ZHUmVjdEVsZW1lbnQpCiAgICAgICAgIERFQ0xBUkVf
QU5JTUFURURfTEVOR1RIKFgsIHgpCiAgICAgICAgIERFQ0xBUkVfQU5JTUFURURfTEVOR1RIKFks
IHkpCi0tIAoxLjcuNS40Cgo=
</data>
<flag name="review"
          id="104243"
          type_id="1"
          status="-"
          setter="krit"
    />
    <flag name="commit-queue"
          id="104244"
          type_id="3"
          status="-"
          setter="rhodovan.u-szeged"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>107681</attachid>
            <date>2011-09-16 10:36:39 -0700</date>
            <delta_ts>2011-09-30 05:37:54 -0700</delta_ts>
            <desc>Propsed patch</desc>
            <filename>0001-up-krit-cl.patch</filename>
            <type>text/plain</type>
            <size>107358</size>
            <attacher name="Renata Hodovan">rhodovan.u-szeged</attacher>
            
              <data encoding="base64">RnJvbSA1ZjUxODY3NDA5YWEzNjYxNWIxMzYxZmRlYTFhNTNlZWQzN2E4ODZkIE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBSZW5hdGEgSG9kb3ZhbiA8cmVuaUB3ZWJraXQub3JnPgpEYXRl
OiBGcmksIDE2IFNlcCAyMDExIDE5OjIyOjIyICswMjAwClN1YmplY3Q6IFtQQVRDSF0gdXAga3Jp
dCBjbAoKLS0tCiBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICB8ICAgMTQgKwogLi4uL3BvaW50ZXItZXZlbnRzLW9uLXJvdW5kZWQtcmVjdC1leHBlY3Rl
ZC50eHQgICAgfCAgICAxICsKIC4uLi9jdXN0b20vcG9pbnRlci1ldmVudHMtb24tcm91bmRlZC1y
ZWN0LnhodG1sICAgIHwgICA2NiArKysKIC4uLmVudHMtd2l0aC1saW5lY2Fwcy1hbmQtbWl0ZXJs
aW1pdHMtZXhwZWN0ZWQudHh0IHwgICAgMSArCiAuLi5udGVyLWV2ZW50cy13aXRoLWxpbmVjYXBz
LWFuZC1taXRlcmxpbWl0cy54aHRtbCB8ICAgNjggKysrCiBTb3VyY2UvV2ViQ29yZS9DTWFrZUxp
c3RzLnR4dCAgICAgICAgICAgICAgICAgICAgICB8ICAgIDIgKwogU291cmNlL1dlYkNvcmUvQ2hh
bmdlTG9nICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgMTU4ICsrKysrKysKIFNvdXJjZS9X
ZWJDb3JlL0dOVW1ha2VmaWxlLmxpc3QuYW0gICAgICAgICAgICAgICAgIHwgICAgNCArCiBTb3Vy
Y2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkgICAgICAgICAgICAgICAgICAgICAgICB8ICAgIDQgKwog
U291cmNlL1dlYkNvcmUvV2ViQ29yZS5wcm8gICAgICAgICAgICAgICAgICAgICAgICAgfCAgICA0
ICsKIFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUudmNwcm9qL1dlYkNvcmUudmNwcm9qICAgICAgIHwg
IDExMiArKysrKwogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRmxvYXRSZWN0LmNw
cCAgICAgfCAgICA3ICsKIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0Zsb2F0UmVj
dC5oICAgICAgIHwgICAgNyArLQogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck9iamVj
dC5oICAgICAgICAgICAgfCAgICAyICsKIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJU
cmVlQXNUZXh0LmNwcCAgICAgIHwgICAgNCArLQogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2
Zy9SZW5kZXJTVkdBbGxJbk9uZS5jcHAgfCAgICAyICsKIC4uLi9XZWJDb3JlL3JlbmRlcmluZy9z
dmcvUmVuZGVyU1ZHTW9kZWxPYmplY3QuY3BwIHwgICAgMiArLQogU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL3N2Zy9SZW5kZXJTVkdQYXRoLmNwcCAgICAgfCAgMzU1ICstLS0tLS0tLS0tLS0tLS0t
CiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1BhdGguaCAgICAgICB8ICAg
NzQgKy0tLQogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZWN0LmNwcCAg
ICAgfCAgMTI0ICsrKysrKwogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdS
ZWN0LmggICAgICAgfCAgIDYzICsrKwogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5k
ZXJTVkdSZXNvdXJjZS5oICAgfCAgICAzICstCiAuLi4vcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdS
ZXNvdXJjZUNsaXBwZXIuY3BwICAgICB8ICAgIDYgKy0KIC4uLi9yZW5kZXJpbmcvc3ZnL1JlbmRl
clNWR1Jlc291cmNlQ29udGFpbmVyLmNwcCAgIHwgICAgMiArLQogLi4uL3JlbmRlcmluZy9zdmcv
UmVuZGVyU1ZHUmVzb3VyY2VGaWx0ZXIuY3BwICAgICAgfCAgICA1ICstCiAuLi4vcmVuZGVyaW5n
L3N2Zy9SZW5kZXJTVkdSZXNvdXJjZUZpbHRlci5oICAgICAgICB8ICAgIDIgKy0KIC4uLi9yZW5k
ZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291cmNlR3JhZGllbnQuY3BwICAgIHwgICAyMSArLQogLi4u
L3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VHcmFkaWVudC5oICAgICAgfCAgICAyICst
CiAuLi4vcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJjZVBhdHRlcm4uY3BwICAgICB8ICAg
MTQgKy0KIC4uLi9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291cmNlUGF0dGVybi5oICAgICAg
IHwgICAgMiArLQogLi4uL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VTb2xpZENvbG9y
LmNwcCAgfCAgIDE1ICstCiAuLi4vcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJjZVNvbGlk
Q29sb3IuaCAgICB8ICAgIDIgKy0KIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVy
U1ZHU2hhcGUuY3BwICAgIHwgIDQzMiArKysrKysrKysrKysrKysrKysrKwogU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdTaGFwZS5oICAgICAgfCAgMTYwICsrKysrKysrCiBT
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR0lubGluZVRleHRCb3guY3BwICB8ICAgIDIg
Ky0KIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHUmVuZGVyU3VwcG9ydC5jcHAgIHwg
ICAgOCArLQogLi4uL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdSZW5kZXJUcmVlQXNUZXh0LmNw
cCAgfCAgIDMxICstCiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR1JlbmRlclRyZWVB
c1RleHQuaCB8ICAgIDQgKy0KIC4uLi9yZW5kZXJpbmcvc3ZnL1NWR1RleHRSdW5SZW5kZXJpbmdD
b250ZXh0LmNwcCAgIHwgICAgNCArLQogU291cmNlL1dlYkNvcmUvc3ZnL1NWR0NpcmNsZUVsZW1l
bnQuY3BwICAgICAgICAgICAgfCAgICAyICstCiBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRWxsaXBz
ZUVsZW1lbnQuY3BwICAgICAgICAgICB8ICAgIDIgKy0KIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdM
aW5lRWxlbWVudC5jcHAgICAgICAgICAgICAgIHwgICAgMiArLQogU291cmNlL1dlYkNvcmUvc3Zn
L1NWR1BhdGhFbGVtZW50LmNwcCAgICAgICAgICAgICAgfCAgIDEwICstCiBTb3VyY2UvV2ViQ29y
ZS9zdmcvU1ZHUGF0aEVsZW1lbnQuaCAgICAgICAgICAgICAgICB8ICAgIDIgKwogU291cmNlL1dl
YkNvcmUvc3ZnL1NWR1BvbHlFbGVtZW50LmNwcCAgICAgICAgICAgICAgfCAgICAyICstCiBTb3Vy
Y2UvV2ViQ29yZS9zdmcvU1ZHUmVjdEVsZW1lbnQuY3BwICAgICAgICAgICAgICB8ICAgMTIgKy0K
IFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdSZWN0RWxlbWVudC5oICAgICAgICAgICAgICAgIHwgICAg
MiArCiA0NyBmaWxlcyBjaGFuZ2VkLCAxMzQ5IGluc2VydGlvbnMoKyksIDQ3NCBkZWxldGlvbnMo
LSkKIGNyZWF0ZSBtb2RlIDEwMDY0NCBMYXlvdXRUZXN0cy9zdmcvY3VzdG9tL3BvaW50ZXItZXZl
bnRzLW9uLXJvdW5kZWQtcmVjdC1leHBlY3RlZC50eHQKIGNyZWF0ZSBtb2RlIDEwMDY0NCBMYXlv
dXRUZXN0cy9zdmcvY3VzdG9tL3BvaW50ZXItZXZlbnRzLW9uLXJvdW5kZWQtcmVjdC54aHRtbAog
Y3JlYXRlIG1vZGUgMTAwNjQ0IExheW91dFRlc3RzL3N2Zy9jdXN0b20vcG9pbnRlci1ldmVudHMt
d2l0aC1saW5lY2Fwcy1hbmQtbWl0ZXJsaW1pdHMtZXhwZWN0ZWQudHh0CiBjcmVhdGUgbW9kZSAx
MDA2NDQgTGF5b3V0VGVzdHMvc3ZnL2N1c3RvbS9wb2ludGVyLWV2ZW50cy13aXRoLWxpbmVjYXBz
LWFuZC1taXRlcmxpbWl0cy54aHRtbAogY3JlYXRlIG1vZGUgMTAwNjQ0IFNvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVjdC5jcHAKIGNyZWF0ZSBtb2RlIDEwMDY0NCBTb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1JlY3QuaAogY3JlYXRlIG1vZGUgMTAw
NjQ0IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHU2hhcGUuY3BwCiBjcmVh
dGUgbW9kZSAxMDA2NDQgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdTaGFw
ZS5oCgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nIGIvTGF5b3V0VGVzdHMvQ2hh
bmdlTG9nCmluZGV4IGEzNGU2ZmEuLmYwZTJhMDYgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL0No
YW5nZUxvZworKysgYi9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKQEAgLTEsNSArMSwxOSBAQAogMjAx
MS0wOS0xNiAgUmVuYXRhIEhvZG92YW4gIDxyZW5pQHdlYmtpdC5vcmc+CiAKKyAgICAgICAgQWRk
IG5ldyByZW5kZXJlciBmb3IgU1ZHUmVjdEVsZW1lbnQuCisgICAgICAgIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD02NTc2OQorCisgICAgICAgIEFkZCBuZXcgdGVzdHMg
dG8gY2hlY2sgdGhlIG5ldyBzaGFwZSBiYXNlZCByZW5kZXJpbmcgbWVjaGFuaXNtIG9mIFNWR1Jl
Y3RFbGVtZW50LgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAg
ICAgICogc3ZnL2N1c3RvbS9wb2ludGVyLWV2ZW50cy1vbi1yb3VuZGVkLXJlY3QtZXhwZWN0ZWQu
dHh0OiBBZGRlZC4KKyAgICAgICAgKiBzdmcvY3VzdG9tL3BvaW50ZXItZXZlbnRzLW9uLXJvdW5k
ZWQtcmVjdC54aHRtbDogQWRkZWQuCisgICAgICAgICogc3ZnL2N1c3RvbS9wb2ludGVyLWV2ZW50
cy13aXRoLWxpbmVjYXBzLWFuZC1taXRlcmxpbWl0cy1leHBlY3RlZC50eHQ6IEFkZGVkLgorICAg
ICAgICAqIHN2Zy9jdXN0b20vcG9pbnRlci1ldmVudHMtd2l0aC1saW5lY2Fwcy1hbmQtbWl0ZXJs
aW1pdHMueGh0bWw6IEFkZGVkLgorCisyMDExLTA5LTE2ICBSZW5hdGEgSG9kb3ZhbiAgPHJlbmlA
d2Via2l0Lm9yZz4KKwogICAgICAgICBbUXRdIFVwZGF0ZSBleHBlY3RlZHMgb2YgZmFpbGluZyB0
ZXN0cyBhZnRlciByOTUyNjAgYW5kIHI5NTI0Mi4KIAogICAgICAgICBVbnJldmlld2VkIGdhcmRl
bmluZy4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3N2Zy9jdXN0b20vcG9pbnRlci1ldmVudHMt
b24tcm91bmRlZC1yZWN0LWV4cGVjdGVkLnR4dCBiL0xheW91dFRlc3RzL3N2Zy9jdXN0b20vcG9p
bnRlci1ldmVudHMtb24tcm91bmRlZC1yZWN0LWV4cGVjdGVkLnR4dApuZXcgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCAwMDAwMDAwLi42MTViYWUwCi0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVz
dHMvc3ZnL2N1c3RvbS9wb2ludGVyLWV2ZW50cy1vbi1yb3VuZGVkLXJlY3QtZXhwZWN0ZWQudHh0
CkBAIC0wLDAgKzEgQEAKK1BBU1NFRDogZmFsbGJhY2tSZWN0IGhhZCBwb2ludGVyCmRpZmYgLS1n
aXQgYS9MYXlvdXRUZXN0cy9zdmcvY3VzdG9tL3BvaW50ZXItZXZlbnRzLW9uLXJvdW5kZWQtcmVj
dC54aHRtbCBiL0xheW91dFRlc3RzL3N2Zy9jdXN0b20vcG9pbnRlci1ldmVudHMtb24tcm91bmRl
ZC1yZWN0LnhodG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMxYTBhMTkK
LS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9zdmcvY3VzdG9tL3BvaW50ZXItZXZlbnRz
LW9uLXJvdW5kZWQtcmVjdC54aHRtbApAQCAtMCwwICsxLDY2IEBACis8aHRtbCB4bWxucz0naHR0
cDovL3d3dy53My5vcmcvMTk5OS94aHRtbCc+Cis8Ym9keSBzdHlsZT0ibWFyZ2luOiAwcHg7IHBh
ZGRpbmc6IDBweCI+CisKKzxzdmcgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiBz
dHlsZT0icG9zaXRpb246YWJzb2x1dGU7Ij4KKzxkZWZzPgorCis8c3R5bGUgdHlwZT0idGV4dC9j
c3MiPjwhW0NEQVRBWworcmVjdCNyb3VuZGVkUmVjdCB7CisJZmlsbDogbm9uZTsKKwlzdHJva2U6
IGdyZWVuOworCXN0cm9rZS13aWR0aDogMjBweDsKKwlzdHJva2UtbGluZWpvaW46IGJldmVsOwor
fQorcmVjdDpob3ZlciB7CisJc3Ryb2tlOiByZWQ7Cit9IAorXV0+PC9zdHlsZT4KKzwvZGVmcz4K
KworPHJlY3QgaWQ9ImZhbGxiYWNrIiB4PSIzMCIgeT0iMzAiIHdpZHRoPSI0MjAiIGhlaWdodD0i
MzIwIiBmaWxsPSJ5ZWxsb3ciIG9uY2xpY2s9InBhc3NlZCgpIi8+Cis8cmVjdCBpZD0icm91bmRl
ZFJlY3QiIHg9IjQwIiB5PSI0MCIgcng9IjMwIiByeT0iMzAiIHdpZHRoPSI0MDAiIGhlaWdodD0i
MzAwIiBwb2ludGVyLWV2ZW50cz0idmlzaWJsZVN0cm9rZSIgb25jbGljaz0iZmFpbGVkKCkiLz4K
Kzx0ZXh0IGlkPSJ0ZXh0IiB4PSIxMCIgeT0iMjMwIj5hZHNmPC90ZXh0PgorCis8c2NyaXB0IHR5
cGU9InRleHQvZWNtYXNjcmlwdCI+CisgICAgPCFbQ0RBVEFbCisKK3ZhciBmYWxsYmFjayA9IGRv
Y3VtZW50LmdldEVsZW1lbnRCeUlkKCJmYWxsYmFjayIpOwordmFyIHJvdW5kZWRSZWN0ID0gZG9j
dW1lbnQuZ2V0RWxlbWVudEJ5SWQoInJvdW5kZWRSZWN0Iik7Cit2YXIgdGV4dCA9IGRvY3VtZW50
LmdldEVsZW1lbnRCeUlkKCJ0ZXh0Iik7CisKK2ZhbGxiYWNrLmFkZEV2ZW50TGlzdGVuZXIoIm1v
dXNlZG93biIsIHBhc3NlZCwgZmFsc2UpOworcm91bmRlZFJlY3QuYWRkRXZlbnRMaXN0ZW5lcigi
bW91c2Vkb3duIiwgZmFpbGVkLCBmYWxzZSk7CisKK2Z1bmN0aW9uIHN0b3AoKSB7CisgICAgZmFs
bGJhY2sucmVtb3ZlRXZlbnRMaXN0ZW5lcigibW91c2Vkb3duIiwgZmFpbGVkLCBmYWxzZSk7Cisg
ICAgcm91bmRlZFJlY3QucmVtb3ZlRXZlbnRMaXN0ZW5lcigibW91c2Vkb3duIiwgcGFzc2VkLCBm
YWxzZSk7CisKKyAgICBpZiAod2luZG93LmxheW91dFRlc3RDb250cm9sbGVyKQorICAgICAgICBs
YXlvdXRUZXN0Q29udHJvbGxlci5ub3RpZnlEb25lKCk7Cit9CisgICAgCitmdW5jdGlvbiBmYWls
ZWQoKSB7CisgICAgdGV4dC50ZXh0Q29udGVudCA9ICdGQUlMRUQ6IHN0cm9rZVJlY3QgaGFkIHBv
aW50ZXInOworICAgIHN0b3AoKTsKK30KKworZnVuY3Rpb24gcGFzc2VkKCkgeworICAgIHRleHQu
dGV4dENvbnRlbnQgPSAnUEFTU0VEOiBmYWxsYmFja1JlY3QgaGFkIHBvaW50ZXInOworICAgIHN0
b3AoKTsKK30KKworaWYgKHdpbmRvdy5sYXlvdXRUZXN0Q29udHJvbGxlcikgeworICAgIGxheW91
dFRlc3RDb250cm9sbGVyLndhaXRVbnRpbERvbmUoKTsKKyAgICBsYXlvdXRUZXN0Q29udHJvbGxl
ci5kdW1wQXNUZXh0KCk7Cit9CisKK2lmICh3aW5kb3cuZXZlbnRTZW5kZXIpIHsKKyAgICBldmVu
dFNlbmRlci5tb3VzZU1vdmVUbygzMSwgMzEpOworICAgIGV2ZW50U2VuZGVyLm1vdXNlRG93bigp
OworfQorXV0+CisgIDwvc2NyaXB0PgorCis8L3N2Zz4KKzwvYm9keT4KKzwvaHRtbD4KZGlmZiAt
LWdpdCBhL0xheW91dFRlc3RzL3N2Zy9jdXN0b20vcG9pbnRlci1ldmVudHMtd2l0aC1saW5lY2Fw
cy1hbmQtbWl0ZXJsaW1pdHMtZXhwZWN0ZWQudHh0IGIvTGF5b3V0VGVzdHMvc3ZnL2N1c3RvbS9w
b2ludGVyLWV2ZW50cy13aXRoLWxpbmVjYXBzLWFuZC1taXRlcmxpbWl0cy1leHBlY3RlZC50eHQK
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjE1YmFlMAotLS0gL2Rldi9udWxs
CisrKyBiL0xheW91dFRlc3RzL3N2Zy9jdXN0b20vcG9pbnRlci1ldmVudHMtd2l0aC1saW5lY2Fw
cy1hbmQtbWl0ZXJsaW1pdHMtZXhwZWN0ZWQudHh0CkBAIC0wLDAgKzEgQEAKK1BBU1NFRDogZmFs
bGJhY2tSZWN0IGhhZCBwb2ludGVyCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9zdmcvY3VzdG9t
L3BvaW50ZXItZXZlbnRzLXdpdGgtbGluZWNhcHMtYW5kLW1pdGVybGltaXRzLnhodG1sIGIvTGF5
b3V0VGVzdHMvc3ZnL2N1c3RvbS9wb2ludGVyLWV2ZW50cy13aXRoLWxpbmVjYXBzLWFuZC1taXRl
cmxpbWl0cy54aHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wZjFhNzM2
Ci0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvc3ZnL2N1c3RvbS9wb2ludGVyLWV2ZW50
cy13aXRoLWxpbmVjYXBzLWFuZC1taXRlcmxpbWl0cy54aHRtbApAQCAtMCwwICsxLDY4IEBACis8
aHRtbCB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMTk5OS94aHRtbCc+Cis8Ym9keSBzdHlsZT0i
bWFyZ2luOiAwcHg7IHBhZGRpbmc6IDBweCI+CisKKzxzdmcgeG1sbnM9Imh0dHA6Ly93d3cudzMu
b3JnLzIwMDAvc3ZnIiBzdHlsZT0icG9zaXRpb246YWJzb2x1dGU7Ij4KKzxkZWZzPgorCis8c3R5
bGUgdHlwZT0idGV4dC9jc3MiPjwhW0NEQVRBWworcmVjdCNzdHJva2VkUmVjdCB7CisJZmlsbDog
bm9uZTsKKwlzdHJva2U6IGJsdWU7CisJc3Ryb2tlLXdpZHRoOiAyMHB4OworCXN0cm9rZS1saW5l
Y2FwOiBzcXVhcmU7CisJc3Ryb2tlLW1pdGVybGltaXQ6IDE7Cit9CityZWN0I3N0cm9rZWRSZWN0
OmhvdmVyIHsKKwlzdHJva2U6IHJlZDsKK30KK11dPjwvc3R5bGU+Cis8L2RlZnM+CisKKzxyZWN0
IGlkPSJmYWxsYmFjayIgeD0iMCIgeT0iMCIgd2lkdGg9IjIxMCIgaGVpZ2h0PSIyMTAiIGZpbGw9
ImdyZWVuIiBvbmNsaWNrPSJwYXNzZWQoKSIvPgorPHJlY3QgaWQ9InN0cm9rZWRSZWN0IiB4PSIx
MCIgeT0iMTAiIHdpZHRoPSIxOTAiIGhlaWdodD0iMTkwIiBwb2ludGVyLWV2ZW50cz0idmlzaWJs
ZVN0cm9rZSIgb25jbGljaz0iZmFpbGVkKCkiLz4gCis8dGV4dCBpZD0idGV4dCIgeD0iMTAiIHk9
IjIzMCI+YWRzZjwvdGV4dD4KKworPHNjcmlwdCB0eXBlPSJ0ZXh0L2VjbWFzY3JpcHQiPgorICAg
IDwhW0NEQVRBWworCit2YXIgZmFsbGJhY2sgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiZmFs
bGJhY2siKTsKK3ZhciBzdHJva2VkUmVjdCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJzdHJv
a2VkUmVjdCIpOwordmFyIHRleHQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgidGV4dCIpOwor
CitmYWxsYmFjay5hZGRFdmVudExpc3RlbmVyKCJtb3VzZWRvd24iLCBwYXNzZWQsIGZhbHNlKTsK
K3N0cm9rZWRSZWN0LmFkZEV2ZW50TGlzdGVuZXIoIm1vdXNlZG93biIsIGZhaWxlZCwgZmFsc2Up
OworCitmdW5jdGlvbiBzdG9wKCkgeworICAgIGZhbGxiYWNrLnJlbW92ZUV2ZW50TGlzdGVuZXIo
Im1vdXNlZG93biIsIGZhaWxlZCwgZmFsc2UpOworICAgIHN0cm9rZWRSZWN0LnJlbW92ZUV2ZW50
TGlzdGVuZXIoIm1vdXNlZG93biIsIHBhc3NlZCwgZmFsc2UpOworCisgICAgaWYgKHdpbmRvdy5s
YXlvdXRUZXN0Q29udHJvbGxlcikKKyAgICAgICAgbGF5b3V0VGVzdENvbnRyb2xsZXIubm90aWZ5
RG9uZSgpOworfQorCitmdW5jdGlvbiBmYWlsZWQoKSB7CisgICAgdGV4dC50ZXh0Q29udGVudCA9
ICdGQUlMRUQ6IHN0cm9rZVJlY3QgaGFkIHBvaW50ZXInOworICAgIHN0b3AoKTsKK30KKworZnVu
Y3Rpb24gcGFzc2VkKCkgeworICAgIHRleHQudGV4dENvbnRlbnQgPSAnUEFTU0VEOiBmYWxsYmFj
a1JlY3QgaGFkIHBvaW50ZXInOworICAgIHN0b3AoKTsKK30KKworaWYgKHdpbmRvdy5sYXlvdXRU
ZXN0Q29udHJvbGxlcikgeworICAgIGxheW91dFRlc3RDb250cm9sbGVyLndhaXRVbnRpbERvbmUo
KTsKKyAgICBsYXlvdXRUZXN0Q29udHJvbGxlci5kdW1wQXNUZXh0KCk7Cit9CisKK2lmICh3aW5k
b3cuZXZlbnRTZW5kZXIpIHsKKyAgICBldmVudFNlbmRlci5tb3VzZU1vdmVUbygxLCAxKTsKKyAg
ICBldmVudFNlbmRlci5tb3VzZURvd24oKTsKK30KKworXV0+CisgIDwvc2NyaXB0PgorPC9zdmc+
CisKKzwvYm9keT4KKzwvaHRtbD4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NNYWtlTGlz
dHMudHh0IGIvU291cmNlL1dlYkNvcmUvQ01ha2VMaXN0cy50eHQKaW5kZXggYWUyZmI4My4uMTll
OTYzNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ01ha2VMaXN0cy50eHQKKysrIGIvU291
cmNlL1dlYkNvcmUvQ01ha2VMaXN0cy50eHQKQEAgLTE1OTgsNiArMTU5OCw3IEBAIElGIChFTkFC
TEVfU1ZHKQogICAgICAgICByZW5kZXJpbmcvc3ZnL1JlbmRlclNWR0lubGluZVRleHQuY3BwCiAg
ICAgICAgIHJlbmRlcmluZy9zdmcvUmVuZGVyU1ZHTW9kZWxPYmplY3QuY3BwCiAgICAgICAgIHJl
bmRlcmluZy9zdmcvUmVuZGVyU1ZHUGF0aC5jcHAKKyAgICAgICAgcmVuZGVyaW5nL3N2Zy9SZW5k
ZXJTVkdSZWN0LmNwcAogICAgICAgICByZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291cmNlLmNw
cAogICAgICAgICByZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291cmNlQ2xpcHBlci5jcHAKICAg
ICAgICAgcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJjZUNvbnRhaW5lci5jcHAKQEAgLTE2
MTIsNiArMTYxMyw3IEBAIElGIChFTkFCTEVfU1ZHKQogICAgICAgICByZW5kZXJpbmcvc3ZnL1Jl
bmRlclNWR1Jlc291cmNlU29saWRDb2xvci5jcHAKICAgICAgICAgcmVuZGVyaW5nL3N2Zy9SZW5k
ZXJTVkdSb290LmNwcAogICAgICAgICByZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1NoYWRvd1RyZWVS
b290Q29udGFpbmVyLmNwcAorICAgICAgICByZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1NoYXBlLmNw
cAogICAgICAgICByZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1RTcGFuLmNwcAogICAgICAgICByZW5k
ZXJpbmcvc3ZnL1JlbmRlclNWR1RleHQuY3BwCiAgICAgICAgIHJlbmRlcmluZy9zdmcvUmVuZGVy
U1ZHVGV4dFBhdGguY3BwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cgYi9T
b3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNWE5MjcxMS4uZmY0NDMzMSAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxv
ZwpAQCAtMSwzICsxLDE2MSBAQAorMjAxMS0wOS0xNiAgUmVuYXRhIEhvZG92YW4gIDxyZW5pQHdl
YmtpdC5vcmc+CisKKyAgICAgICAgQWRkIG5ldyByZW5kZXJlciBmb3IgU1ZHUmVjdEVsZW1lbnQu
CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD02NTc2OQor
CisgICAgICAgIFRoaXMgcGF0Y2ggaW50cm9kdWNlcyBhIG5ldyBjb21tb24gYmFzZSBjbGFzcyBj
YWxsZWQgUmVuZGVyU1ZHU2hhcGUgd2hpY2gKKyAgICAgICAgcmVwbGFjZXMgdGhlIFJlbmRlclNW
R1BhdGguIFRoaXMgbmV3IGJhc2UgY2xhc3MgaGFzIHRoZSBzYW1lIHB1cnBvc2UKKyAgICAgICAg
YXMgdGhlIHJlcGxhY2VkIGNsYXNzIGFuZCBoYXMgc3BlY2lhbGl6ZWQgZGVzY2VuZGFudHMgZm9y
IGNvbW1vbgorICAgICAgICBzaGFwZXMgKGxpa2UgUmVjdGFuZ2xlcyBhbmQgQ2lyY2xlcyksIHdo
aWNoIGFsbG93cyBmYXN0ZXIgcGFpbnRpbmcKKyAgICAgICAgb2YgdGhlc2Ugc2hhcGVzIHdoZW4g
Y2VydGFpbiBjb25kaXRpb25zIGFyZSBmdWxmaWxsZWQuIE9uIHNvbWUKKyAgICAgICAgYmVuY2ht
YXJrIHByb2dyYW1zIHdlIGhhdmUgc2VlbiA1JSBzcGVlZHVwLgorCisgICAgICAgIFRoZSBiaWdn
ZXN0IG1vdGl2YXRpb24gb2YgdGhpcyByZWZhY3RvciBpcyB0YWtpbmcgYWR2YW50YWdlCisgICAg
ICAgIG9mIGZhc3RlciBwcmltaXRpdmUgZHJhd2luZyBpbiB0aGUgbW9zdCBjb21tb24gYW5kIGZy
ZXF1ZW50CisgICAgICAgIGNhc2VzLiBIb3dldmVyIGluIHNvbWUgcmFyZSBjYXNlcywgbGlrZSBw
YWludGluZyByb3VuZGVkCisgICAgICAgIHJlY3RzLCB3ZSBuZWVkIHRvIGZhbGxiYWNrIHRvIHRo
ZSBvcmlnaW5hbCBjb2RlIHBhdGgsIHdoaWNoCisgICAgICAgIGlzIGZ1bGx5IGtlcHQgaW4gdGhl
IFJlbmRlclNWR1NoYXBlIGJhc2UgY2xhc3MuIFNvbWUgb3RoZXIKKyAgICAgICAgY2FzZXMsIGxp
a2UgZGFzaGVkIHN0cm9rZXMsIGNhbiBiZSBwYWludGVkIGJ1dCBtb3VzZSBwb2ludGVyCisgICAg
ICAgIGV2ZW50cyBjYW5ub3QgYmUgaGFuZGxlZCBieSB0aGUgZGVzY2VuZGFudCBjbGFzc2VzLiBB
IGRpZmZlcmVudAorICAgICAgICBmYWxsYmFjayBtZWNoYW5pc20gaXMgdXNlZCBpbiBzdWNoIGNh
c2VzIHdoaWNoIHJlZGlyZWN0cworICAgICAgICBvbmx5IHRoZSBwb2ludGVyIGV2ZW50IGhhbmRs
aW5nIHRvIHRoZSBiYXNlIGNsYXNzLgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09Q
UyEpLgorCisgICAgICAgIFRlc3RzOiBzdmcvY3VzdG9tL3BvaW50ZXItZXZlbnRzLW9uLXJvdW5k
ZWQtcmVjdC54aHRtbAorICAgICAgICAgICAgICAgc3ZnL2N1c3RvbS9wb2ludGVyLWV2ZW50cy13
aXRoLWxpbmVjYXBzLWFuZC1taXRlcmxpbWl0cy54aHRtbAorCisgICAgICAgICogQ01ha2VMaXN0
cy50eHQ6CisgICAgICAgICogR05VbWFrZWZpbGUubGlzdC5hbToKKyAgICAgICAgKiBXZWJDb3Jl
Lmd5cGk6CisgICAgICAgICogV2ViQ29yZS5wcm86CisgICAgICAgICogV2ViQ29yZS52Y3Byb2ov
V2ViQ29yZS52Y3Byb2o6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvRmxvYXRSZWN0LmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OkZsb2F0UmVjdDo6Y29udGFpbnMpOgorICAgICAgICAqIHBs
YXRmb3JtL2dyYXBoaWNzL0Zsb2F0UmVjdC5oOgorICAgICAgICAoV2ViQ29yZTo6RmxvYXRSZWN0
Ojpjb250YWlucyk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlck9iamVjdC5oOgorICAgICAg
ICAoV2ViQ29yZTo6UmVuZGVyT2JqZWN0Ojppc1NWR1JlY3QpOgorICAgICAgICAoV2ViQ29yZTo6
UmVuZGVyT2JqZWN0Ojppc1NWR1NoYXBlKToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyVHJl
ZUFzVGV4dC5jcHA6CisgICAgICAgIChXZWJDb3JlOjp3cml0ZSk6CisgICAgICAgICogcmVuZGVy
aW5nL3N2Zy9SZW5kZXJTVkdBbGxJbk9uZS5jcHA6CisgICAgICAgICogcmVuZGVyaW5nL3N2Zy9S
ZW5kZXJTVkdNb2RlbE9iamVjdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjppc0dyYXBoaWNzRWxl
bWVudCk6CisgICAgICAgICogcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdQYXRoLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OlJlbmRlclNWR1BhdGg6OlJlbmRlclNWR1BhdGgpOgorICAgICAgICAoV2Vi
Q29yZTo6UmVuZGVyU1ZHUGF0aDo6aW5mbGF0ZVdpdGhNYXJrZXJCb3VuZHMpOiBVbml0ZSB0aGUg
bWFya2VyQm91bmRzIHdpdGggc3Ryb2tlQm91bmRpbmdCb3guCisgICAgICAgICogcmVuZGVyaW5n
L3N2Zy9SZW5kZXJTVkdQYXRoLmg6CisgICAgICAgICogcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdS
ZWN0LmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJTVkdSZWN0OjpSZW5kZXJT
VkdSZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclNWR1JlY3Q6On5SZW5kZXJTVkdSZWN0
KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclNWR1JlY3Q6OmNyZWF0ZVNoYXBlKToKKyAgICAg
ICAgKFdlYkNvcmU6OlJlbmRlclNWR1JlY3Q6Om9iamVjdEJvdW5kaW5nQm94KToKKyAgICAgICAg
KFdlYkNvcmU6OlJlbmRlclNWR1JlY3Q6OnN0cm9rZUJvdW5kaW5nQm94KToKKyAgICAgICAgKFdl
YkNvcmU6OlJlbmRlclNWR1JlY3Q6OmZpbGxTaGFwZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5k
ZXJTVkdSZWN0OjpzdHJva2VTaGFwZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJTVkdSZWN0
OjpzaGFwZURlcGVuZGVudFN0cm9rZUNvbnRhaW5zKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRl
clNWR1JlY3Q6OnNoYXBlRGVwZW5kZW50RmlsbENvbnRhaW5zKToKKyAgICAgICAgKiByZW5kZXJp
bmcvc3ZnL1JlbmRlclNWR1JlY3QuaDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJT
VkdSZWN0Ojppc1NWR1JlY3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU1ZHUmVjdDo6cmVu
ZGVyTmFtZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJTVkdSZWN0Ojppc0VtcHR5KToKKyAg
ICAgICAgKiByZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291cmNlLmg6CisgICAgICAgIChXZWJD
b3JlOjpSZW5kZXJTVkdSZXNvdXJjZTo6cG9zdEFwcGx5UmVzb3VyY2UpOiBBIG5ldyBzaGFwZSBh
cmd1bWVudCB3YXMgYWRkZWQgdG8gYWxsb3cgc2hhcGUgc3BlY2lmaWMgZmFzdGVyIHBhaW50aW5n
LgorICAgICAgICAqIHJlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VDbGlwcGVyLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclNWR1Jlc291cmNlQ2xpcHBlcjo6ZHJhd0NvbnRlbnRJ
bnRvTWFza0ltYWdlKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclNWR1Jlc291cmNlQ2xpcHBl
cjo6Y2FsY3VsYXRlQ2xpcENvbnRlbnRSZXBhaW50UmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpS
ZW5kZXJTVkdSZXNvdXJjZUNsaXBwZXI6OmhpdFRlc3RDbGlwQ29udGVudCk6CisgICAgICAgICog
cmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJjZUNvbnRhaW5lci5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpSZW5kZXJTVkdSZXNvdXJjZUNvbnRhaW5lcjo6dHJhbnNmb3JtT25Ob25TY2FsaW5n
U3Ryb2tlKToKKyAgICAgICAgKiByZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291cmNlRmlsdGVy
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclNWR1Jlc291cmNlRmlsdGVyOjpwb3N0QXBw
bHlSZXNvdXJjZSk6CisgICAgICAgICogcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJjZUZp
bHRlci5oOgorICAgICAgICAqIHJlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VHcmFkaWVu
dC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJTVkdSZXNvdXJjZUdyYWRpZW50OjphcHBs
eVJlc291cmNlKToKKyAgICAgICAgKiByZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291cmNlR3Jh
ZGllbnQuaDoKKyAgICAgICAgKiByZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291cmNlUGF0dGVy
bi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJTVkdSZXNvdXJjZVBhdHRlcm46OnBvc3RB
cHBseVJlc291cmNlKToKKyAgICAgICAgKiByZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291cmNl
UGF0dGVybi5oOgorICAgICAgICAqIHJlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VTb2xp
ZENvbG9yLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclNWR1Jlc291cmNlU29saWRDb2xv
cjo6cG9zdEFwcGx5UmVzb3VyY2UpOgorICAgICAgICAqIHJlbmRlcmluZy9zdmcvUmVuZGVyU1ZH
UmVzb3VyY2VTb2xpZENvbG9yLmg6CisgICAgICAgICogcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdT
aGFwZS5jcHA6IENvcGllZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVy
U1ZHUGF0aC5jcHAuCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJTVkdTaGFwZTo6UmVuZGVyU1ZH
U2hhcGUpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU1ZHU2hhcGU6On5SZW5kZXJTVkdTaGFw
ZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJTVkdTaGFwZTo6Y3JlYXRlU2hhcGUpOgorICAg
ICAgICAoV2ViQ29yZTo6UmVuZGVyU1ZHU2hhcGU6OmlzRW1wdHkpOgorICAgICAgICAoV2ViQ29y
ZTo6UmVuZGVyU1ZHU2hhcGU6OmZpbGxTaGFwZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJT
VkdTaGFwZTo6b2JqZWN0Qm91bmRpbmdCb3gpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU1ZH
U2hhcGU6OnN0cm9rZUJvdW5kaW5nQm94KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclNWR1No
YXBlOjpzdHJva2VTaGFwZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJTVkdTaGFwZTo6c2hh
cGVEZXBlbmRlbnRTdHJva2VDb250YWlucyk6CisgICAgICAgIFRoZSBwdXJwb3NlIG9mIHRoaXMg
dmlydHVhbCBmdW5jdGlvbiBhbGxvd3MgZGVjZW5kYW50cyB0byB1c2UgdGhlaXIgb3duIGZhc3Qg
Y2hlY2tzLgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU1ZHU2hhcGU6OnNoYXBlRGVwZW5kZW50
RmlsbENvbnRhaW5zKToKKyAgICAgICAgVGhlIHB1cnBvc2Ugb2YgdGhpcyB2aXJ0dWFsIGZ1bmN0
aW9uIGFsbG93cyBkZWNlbmRhbnRzIHRvIHVzZSB0aGVpciBvd24gZmFzdCBjaGVja3MuCisgICAg
ICAgIChXZWJDb3JlOjpSZW5kZXJTVkdTaGFwZTo6ZmlsbENvbnRhaW5zKToKKyAgICAgICAgKFdl
YkNvcmU6OlJlbmRlclNWR1NoYXBlOjpzdHJva2VDb250YWlucyk6CisgICAgICAgIChXZWJDb3Jl
OjpSZW5kZXJTVkdTaGFwZTo6bGF5b3V0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclNWR1No
YXBlOjpzaG91bGRTdHJva2VaZXJvTGVuZ3RoU3VicGF0aCk6CisgICAgICAgIChXZWJDb3JlOjpS
ZW5kZXJTVkdTaGFwZTo6emVyb0xlbmd0aFN1YnBhdGhSZWN0KToKKyAgICAgICAgKFdlYkNvcmU6
OlJlbmRlclNWR1NoYXBlOjpzZXR1cFNxdWFyZUNhcFBhdGgpOgorICAgICAgICAoV2ViQ29yZTo6
UmVuZGVyU1ZHU2hhcGU6OnNldHVwTm9uU2NhbGluZ1N0cm9rZVBhdGgpOgorICAgICAgICAoV2Vi
Q29yZTo6UmVuZGVyU1ZHU2hhcGU6OmZpbGxBbmRTdHJva2VQYXRoKToKKyAgICAgICAgKFdlYkNv
cmU6OlJlbmRlclNWR1NoYXBlOjpwYWludCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJTVkdT
aGFwZTo6YWRkRm9jdXNSaW5nUmVjdHMpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU1ZHU2hh
cGU6Om5vZGVBdEZsb2F0UG9pbnQpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU1ZHU2hhcGU6
OmNhbGN1bGF0ZU1hcmtlckJvdW5kc0lmTmVlZGVkKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRl
clNWR1NoYXBlOjp1cGRhdGVDYWNoZWRCb3VuZGFyaWVzKToKKyAgICAgICAgKFdlYkNvcmU6OlJl
bmRlclNWR1NoYXBlOjpzdHJva2VXaWR0aCk6CisgICAgICAgICogcmVuZGVyaW5nL3N2Zy9SZW5k
ZXJTVkdTaGFwZS5oOiBDb3BpZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1Jl
bmRlclNWR1BhdGguaC4KKyAgICAgICAgKFdlYkNvcmU6OkJvdW5kaW5nUmVjdFN0cm9rZVN0eWxl
QXBwbGllcjo6Qm91bmRpbmdSZWN0U3Ryb2tlU3R5bGVBcHBsaWVyKToKKyAgICAgICAgKFdlYkNv
cmU6OkJvdW5kaW5nUmVjdFN0cm9rZVN0eWxlQXBwbGllcjo6c3Ryb2tlU3R5bGUpOgorICAgICAg
ICAoV2ViQ29yZTo6UmVuZGVyU1ZHU2hhcGU6OnNldE5lZWRzU2hhcGVVcGRhdGUpOgorICAgICAg
ICAoV2ViQ29yZTo6UmVuZGVyU1ZHU2hhcGU6OnNldE5lZWRzQm91bmRhcmllc1VwZGF0ZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpSZW5kZXJTVkdTaGFwZTo6c2V0TmVlZHNUcmFuc2Zvcm1VcGRhdGUp
OgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU1ZHU2hhcGU6OmlzUGFpbnRpbmdGYWxsYmFjayk6
CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJTVkdTaGFwZTo6cGF0aCk6CisgICAgICAgIChXZWJD
b3JlOjpSZW5kZXJTVkdTaGFwZTo6c2V0SXNQYWludGluZ0ZhbGxiYWNrKToKKyAgICAgICAgKFdl
YkNvcmU6OlJlbmRlclNWR1NoYXBlOjpzZXRTdHJva2VBbmRNYXJrZXJCb3VuZGluZ0JveCk6Cisg
ICAgICAgIChXZWJDb3JlOjpSZW5kZXJTVkdTaGFwZTo6aGFzUGF0aCk6CisgICAgICAgIChXZWJD
b3JlOjpSZW5kZXJTVkdTaGFwZTo6cmVwYWludFJlY3RJbkxvY2FsQ29vcmRpbmF0ZXMpOgorICAg
ICAgICAoV2ViQ29yZTo6UmVuZGVyU1ZHU2hhcGU6OmxvY2FsVG9QYXJlbnRUcmFuc2Zvcm0pOgor
ICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU1ZHU2hhcGU6OmxvY2FsVHJhbnNmb3JtKToKKyAgICAg
ICAgKFdlYkNvcmU6OlJlbmRlclNWR1NoYXBlOjppc1NWR1NoYXBlKToKKyAgICAgICAgKFdlYkNv
cmU6OlJlbmRlclNWR1NoYXBlOjpyZW5kZXJOYW1lKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRl
clNWR1NoYXBlOjppc1JvdW5kZWRSZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclNWR1No
YXBlOjppbmZsYXRlV2l0aE1hcmtlckJvdW5kcyk6CisgICAgICAgIChXZWJDb3JlOjp0b1JlbmRl
clNWR1NoYXBlKToKKyAgICAgICAgKiByZW5kZXJpbmcvc3ZnL1NWR0lubGluZVRleHRCb3guY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6U1ZHSW5saW5lVGV4dEJveDo6cmVsZWFzZVBhaW50aW5nUmVz
b3VyY2UpOgorICAgICAgICAqIHJlbmRlcmluZy9zdmcvU1ZHUmVuZGVyU3VwcG9ydC5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpTVkdSZW5kZXJTdXBwb3J0OjpmaW5pc2hSZW5kZXJTVkdDb250ZW50
KToKKyAgICAgICAgKFdlYkNvcmU6OlNWR1JlbmRlclN1cHBvcnQ6OmxheW91dENoaWxkcmVuKToK
KyAgICAgICAgKiByZW5kZXJpbmcvc3ZnL1NWR1JlbmRlclRyZWVBc1RleHQuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6d3JpdGVTdHlsZSk6CisgICAgICAgIChXZWJDb3JlOjpvcGVyYXRvcjw8KToK
KyAgICAgICAgKFdlYkNvcmU6OndyaXRlKToKKyAgICAgICAgKiByZW5kZXJpbmcvc3ZnL1NWR1Jl
bmRlclRyZWVBc1RleHQuaDoKKyAgICAgICAgKiByZW5kZXJpbmcvc3ZnL1NWR1RleHRSdW5SZW5k
ZXJpbmdDb250ZXh0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR1RleHRSdW5SZW5kZXJpbmdD
b250ZXh0OjpkcmF3U1ZHR2x5cGhzKToKKyAgICAgICAgKiBzdmcvU1ZHQ2lyY2xlRWxlbWVudC5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpTVkdDaXJjbGVFbGVtZW50OjpzdmdBdHRyaWJ1dGVDaGFu
Z2VkKToKKyAgICAgICAgKiBzdmcvU1ZHRWxsaXBzZUVsZW1lbnQuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6U1ZHRWxsaXBzZUVsZW1lbnQ6OnN2Z0F0dHJpYnV0ZUNoYW5nZWQpOgorICAgICAgICAq
IHN2Zy9TVkdMaW5lRWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTVkdMaW5lRWxlbWVu
dDo6c3ZnQXR0cmlidXRlQ2hhbmdlZCk6CisgICAgICAgICogc3ZnL1NWR1BhdGhFbGVtZW50LmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR1BhdGhFbGVtZW50OjpzdmdBdHRyaWJ1dGVDaGFuZ2Vk
KToKKyAgICAgICAgKFdlYkNvcmU6OlNWR1BhdGhFbGVtZW50OjpwYXRoU2VnTGlzdENoYW5nZWQp
OgorICAgICAgICAoV2ViQ29yZTo6U1ZHUGF0aEVsZW1lbnQ6OmNyZWF0ZVJlbmRlcmVyKToKKyAg
ICAgICAgKiBzdmcvU1ZHUGF0aEVsZW1lbnQuaDoKKyAgICAgICAgKiBzdmcvU1ZHUG9seUVsZW1l
bnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U1ZHUG9seUVsZW1lbnQ6OnN2Z0F0dHJpYnV0ZUNo
YW5nZWQpOgorICAgICAgICAqIHN2Zy9TVkdSZWN0RWxlbWVudC5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpTVkdSZWN0RWxlbWVudDo6c3ZnQXR0cmlidXRlQ2hhbmdlZCk6CisgICAgICAgIChXZWJD
b3JlOjpTVkdSZWN0RWxlbWVudDo6Y3JlYXRlUmVuZGVyZXIpOgorICAgICAgICAqIHN2Zy9TVkdS
ZWN0RWxlbWVudC5oOgorCiAyMDExLTA5LTE2ICBMZW8gWWFuZyAgPGxlby55YW5nQHRvcmNobW9i
aWxlLmNvbS5jbj4KIAogICAgICAgICBbUXRdIENyYXNoIHdoZW4gZHJhZ2dpbmcgZ29vZ2xlIG1h
cHMuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9HTlVtYWtlZmlsZS5saXN0LmFtIGIvU291
cmNlL1dlYkNvcmUvR05VbWFrZWZpbGUubGlzdC5hbQppbmRleCBlNDViNzZmLi5lNDNkZWFlIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9HTlVtYWtlZmlsZS5saXN0LmFtCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL0dOVW1ha2VmaWxlLmxpc3QuYW0KQEAgLTMyMDcsNiArMzIwNyw4IEBAIHdlYmNv
cmVfc291cmNlcyArPSBcCiAJU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdN
b2RlbE9iamVjdC5oIFwKIAlTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Bh
dGguY3BwIFwKIAlTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1BhdGguaCBc
CisJU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZWN0LmNwcCBcCisJU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZWN0LmggXAogCVNvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VDbGlwcGVyLmNwcCBcCiAJU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJjZUNsaXBwZXIuaCBcCiAJU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJjZUNvbnRhaW5lci5jcHAg
XApAQCAtMzIzNSw2ICszMjM3LDggQEAgd2ViY29yZV9zb3VyY2VzICs9IFwKIAlTb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jvb3QuaCBcCiAJU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL3N2Zy9SZW5kZXJTVkdTaGFkb3dUcmVlUm9vdENvbnRhaW5lci5jcHAgXAogCVNvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHU2hhZG93VHJlZVJvb3RDb250YWluZXIu
aCBcCisJU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdTaGFwZS5jcHAgXAor
CVNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHU2hhcGUuaCBcCiAJU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdUU3Bhbi5jcHAgXAogCVNvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHVFNwYW4uaCBcCiAJU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL3N2Zy9SZW5kZXJTVkdUZXh0LmNwcCBcCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9XZWJDb3JlLmd5cGkgYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkKaW5kZXggNWYzODM4
Mi4uNmJjNGQ1NSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBpCisrKyBi
L1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwaQpAQCAtNTg1Niw2ICs1ODU2LDggQEAKICAgICAg
ICAgICAgICdyZW5kZXJpbmcvc3ZnL1JlbmRlclNWR01vZGVsT2JqZWN0LmgnLAogICAgICAgICAg
ICAgJ3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUGF0aC5jcHAnLAogICAgICAgICAgICAgJ3JlbmRl
cmluZy9zdmcvUmVuZGVyU1ZHUGF0aC5oJywKKyAgICAgICAgICAgICdyZW5kZXJpbmcvc3ZnL1Jl
bmRlclNWR1JlY3QuY3BwJywKKyAgICAgICAgICAgICdyZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jl
Y3QuaCcsCiAgICAgICAgICAgICAncmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJjZS5jcHAn
LAogICAgICAgICAgICAgJ3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2UuaCcsCiAgICAg
ICAgICAgICAncmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJjZUNsaXBwZXIuY3BwJywKQEAg
LTU4ODQsNiArNTg4Niw4IEBACiAgICAgICAgICAgICAncmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdS
b290LmgnLAogICAgICAgICAgICAgJ3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHU2hhZG93VHJlZVJv
b3RDb250YWluZXIuY3BwJywKICAgICAgICAgICAgICdyZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1No
YWRvd1RyZWVSb290Q29udGFpbmVyLmgnLAorICAgICAgICAgICAgJ3JlbmRlcmluZy9zdmcvUmVu
ZGVyU1ZHU2hhcGUuY3BwJywKKyAgICAgICAgICAgICdyZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1No
YXBlLmgnLAogICAgICAgICAgICAgJ3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHVFNwYW4uY3BwJywK
ICAgICAgICAgICAgICdyZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1RTcGFuLmgnLAogICAgICAgICAg
ICAgJ3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHVGV4dC5jcHAnLApkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvV2ViQ29yZS5wcm8gYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnBybwppbmRleCA3
OTM4OGE1Li5lODU3MDc1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnBybwor
KysgYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnBybwpAQCAtMjI4NCw2ICsyMjg0LDcgQEAgSEVB
REVSUyArPSBcCiAgICAgcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdJbmxpbmVUZXh0LmggXAogICAg
IHJlbmRlcmluZy9zdmcvUmVuZGVyU1ZHTW9kZWxPYmplY3QuaCBcCiAgICAgcmVuZGVyaW5nL3N2
Zy9SZW5kZXJTVkdQYXRoLmggXAorICAgIHJlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVjdC5oIFwK
ICAgICByZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291cmNlLmggXAogICAgIHJlbmRlcmluZy9z
dmcvUmVuZGVyU1ZHUmVzb3VyY2VDbGlwcGVyLmggXAogICAgIHJlbmRlcmluZy9zdmcvUmVuZGVy
U1ZHUmVzb3VyY2VDb250YWluZXIuaCBcCkBAIC0yMjk4LDYgKzIyOTksNyBAQCBIRUFERVJTICs9
IFwKICAgICByZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291cmNlU29saWRDb2xvci5oIFwKICAg
ICByZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jvb3QuaCBcCiAgICAgcmVuZGVyaW5nL3N2Zy9SZW5k
ZXJTVkdTaGFkb3dUcmVlUm9vdENvbnRhaW5lci5oIFwKKyAgICByZW5kZXJpbmcvc3ZnL1JlbmRl
clNWR1NoYXBlLmggXAogICAgIHJlbmRlcmluZy9zdmcvUmVuZGVyU1ZHVFNwYW4uaCBcCiAgICAg
cmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdUZXh0LmggXAogICAgIHJlbmRlcmluZy9zdmcvUmVuZGVy
U1ZHVGV4dFBhdGguaCBcCkBAIC0zMzEyLDYgKzMzMTQsOCBAQCBjb250YWlucyhERUZJTkVTLCBF
TkFCTEVfU1ZHPTEpIHsKICAgICAgICAgcmVuZGVyaW5nL3N0eWxlL1NWR1JlbmRlclN0eWxlRGVm
cy5jcHAgXAogICAgICAgICByZW5kZXJpbmcvUG9pbnRlckV2ZW50c0hpdFJ1bGVzLmNwcCBcCiAg
ICAgICAgIHJlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUGF0aC5jcHAgXAorICAgICAgICByZW5kZXJp
bmcvc3ZnL1JlbmRlclNWR1JlY3QuY3BwIFwKKyAgICAgICAgcmVuZGVyaW5nL3N2Zy9SZW5kZXJT
VkdTaGFwZS5jcHAgXAogICAgICAgICBzdmcvYW5pbWF0aW9uL1NNSUxUaW1lLmNwcCBcCiAgICAg
ICAgIHN2Zy9hbmltYXRpb24vU01JTFRpbWVDb250YWluZXIuY3BwIFwKICAgICAgICAgc3ZnL2Fu
aW1hdGlvbi9TVkdTTUlMRWxlbWVudC5jcHAgXApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
V2ViQ29yZS52Y3Byb2ovV2ViQ29yZS52Y3Byb2ogYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnZj
cHJvai9XZWJDb3JlLnZjcHJvagppbmRleCAxYmRiYTVlLi5mZGE0YTg5IDEwMDc1NQotLS0gYS9T
b3VyY2UvV2ViQ29yZS9XZWJDb3JlLnZjcHJvai9XZWJDb3JlLnZjcHJvagorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9XZWJDb3JlLnZjcHJvai9XZWJDb3JlLnZjcHJvagpAQCAtNDE2NTUsNiArNDE2NTUs
MTE4IEBACiAJCQkJCT4KIAkJCQk8L0ZpbGU+CiAJCQkJPEZpbGUKKwkJCQkJUmVsYXRpdmVQYXRo
PSIuLlxyZW5kZXJpbmdcc3ZnXFJlbmRlclNWR1JlY3QuY3BwIgorCQkJCQk+CisJCQkJCTxGaWxl
Q29uZmlndXJhdGlvbgorCQkJCQkJTmFtZT0iRGVidWd8V2luMzIiCisJCQkJCQlFeGNsdWRlZEZy
b21CdWlsZD0idHJ1ZSIKKwkJCQkJCT4KKwkJCQkJCTxUb29sCisJCQkJCQkJTmFtZT0iVkNDTENv
bXBpbGVyVG9vbCIKKwkJCQkJCS8+CisJCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+CisJCQkJCTxG
aWxlQ29uZmlndXJhdGlvbgorCQkJCQkJTmFtZT0iUmVsZWFzZXxXaW4zMiIKKwkJCQkJCUV4Y2x1
ZGVkRnJvbUJ1aWxkPSJ0cnVlIgorCQkJCQkJPgorCQkJCQkJPFRvb2wKKwkJCQkJCQlOYW1lPSJW
Q0NMQ29tcGlsZXJUb29sIgorCQkJCQkJLz4KKwkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4KKwkJ
CQkJPEZpbGVDb25maWd1cmF0aW9uCisJCQkJCQlOYW1lPSJEZWJ1Z19DYWlyb19DRkxpdGV8V2lu
MzIiCisJCQkJCQlFeGNsdWRlZEZyb21CdWlsZD0idHJ1ZSIKKwkJCQkJCT4KKwkJCQkJCTxUb29s
CisJCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIKKwkJCQkJCS8+CisJCQkJCTwvRmlsZUNv
bmZpZ3VyYXRpb24+CisJCQkJCTxGaWxlQ29uZmlndXJhdGlvbgorCQkJCQkJTmFtZT0iUmVsZWFz
ZV9DYWlyb19DRkxpdGV8V2luMzIiCisJCQkJCQlFeGNsdWRlZEZyb21CdWlsZD0idHJ1ZSIKKwkJ
CQkJCT4KKwkJCQkJCTxUb29sCisJCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIKKwkJCQkJ
CS8+CisJCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+CisJCQkJCTxGaWxlQ29uZmlndXJhdGlvbgor
CQkJCQkJTmFtZT0iRGVidWdfQWxsfFdpbjMyIgorCQkJCQkJRXhjbHVkZWRGcm9tQnVpbGQ9InRy
dWUiCisJCQkJCQk+CisJCQkJCQk8VG9vbAorCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wi
CisJCQkJCQkvPgorCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPgorCQkJCQk8RmlsZUNvbmZpZ3Vy
YXRpb24KKwkJCQkJCU5hbWU9IlByb2R1Y3Rpb258V2luMzIiCisJCQkJCQlFeGNsdWRlZEZyb21C
dWlsZD0idHJ1ZSIKKwkJCQkJCT4KKwkJCQkJCTxUb29sCisJCQkJCQkJTmFtZT0iVkNDTENvbXBp
bGVyVG9vbCIKKwkJCQkJCS8+CisJCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+CisJCQkJPC9GaWxl
PgorCQkJCTxGaWxlCisJCQkJCVJlbGF0aXZlUGF0aD0iLi5ccmVuZGVyaW5nXHN2Z1xSZW5kZXJT
VkdSZWN0LmgiCisJCQkJCT4KKwkJCQk8L0ZpbGU+CisJCQkJPEZpbGUKKwkJCQkJUmVsYXRpdmVQ
YXRoPSIuLlxyZW5kZXJpbmdcc3ZnXFJlbmRlclNWR1NoYXBlLmNwcCIKKwkJCQkJPgorCQkJCQk8
RmlsZUNvbmZpZ3VyYXRpb24KKwkJCQkJCU5hbWU9IkRlYnVnfFdpbjMyIgorCQkJCQkJRXhjbHVk
ZWRGcm9tQnVpbGQ9InRydWUiCisJCQkJCQk+CisJCQkJCQk8VG9vbAorCQkJCQkJCU5hbWU9IlZD
Q0xDb21waWxlclRvb2wiCisJCQkJCQkvPgorCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPgorCQkJ
CQk8RmlsZUNvbmZpZ3VyYXRpb24KKwkJCQkJCU5hbWU9IlJlbGVhc2V8V2luMzIiCisJCQkJCQlF
eGNsdWRlZEZyb21CdWlsZD0idHJ1ZSIKKwkJCQkJCT4KKwkJCQkJCTxUb29sCisJCQkJCQkJTmFt
ZT0iVkNDTENvbXBpbGVyVG9vbCIKKwkJCQkJCS8+CisJCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+
CisJCQkJCTxGaWxlQ29uZmlndXJhdGlvbgorCQkJCQkJTmFtZT0iRGVidWdfQ2Fpcm9fQ0ZMaXRl
fFdpbjMyIgorCQkJCQkJRXhjbHVkZWRGcm9tQnVpbGQ9InRydWUiCisJCQkJCQk+CisJCQkJCQk8
VG9vbAorCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiCisJCQkJCQkvPgorCQkJCQk8L0Zp
bGVDb25maWd1cmF0aW9uPgorCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24KKwkJCQkJCU5hbWU9IlJl
bGVhc2VfQ2Fpcm9fQ0ZMaXRlfFdpbjMyIgorCQkJCQkJRXhjbHVkZWRGcm9tQnVpbGQ9InRydWUi
CisJCQkJCQk+CisJCQkJCQk8VG9vbAorCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiCisJ
CQkJCQkvPgorCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPgorCQkJCQk8RmlsZUNvbmZpZ3VyYXRp
b24KKwkJCQkJCU5hbWU9IkRlYnVnX0FsbHxXaW4zMiIKKwkJCQkJCUV4Y2x1ZGVkRnJvbUJ1aWxk
PSJ0cnVlIgorCQkJCQkJPgorCQkJCQkJPFRvb2wKKwkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJU
b29sIgorCQkJCQkJLz4KKwkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4KKwkJCQkJPEZpbGVDb25m
aWd1cmF0aW9uCisJCQkJCQlOYW1lPSJQcm9kdWN0aW9ufFdpbjMyIgorCQkJCQkJRXhjbHVkZWRG
cm9tQnVpbGQ9InRydWUiCisJCQkJCQk+CisJCQkJCQk8VG9vbAorCQkJCQkJCU5hbWU9IlZDQ0xD
b21waWxlclRvb2wiCisJCQkJCQkvPgorCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPgorCQkJCTwv
RmlsZT4KKwkJCQk8RmlsZQorCQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXHJlbmRlcmluZ1xzdmdcUmVu
ZGVyU1ZHU2hhcGUuaCIKKwkJCQkJPgorCQkJCTwvRmlsZT4KKwkJCQk8RmlsZQogCQkJCQlSZWxh
dGl2ZVBhdGg9Ii4uXHJlbmRlcmluZ1xzdmdcUmVuZGVyU1ZHVGV4dC5jcHAiCiAJCQkJCT4KIAkJ
CQkJPEZpbGVDb25maWd1cmF0aW9uCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9GbG9hdFJlY3QuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvRmxvYXRSZWN0LmNwcAppbmRleCBiODRhODkyLi5lOTllMmQ5IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9GbG9hdFJlY3QuY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0Zsb2F0UmVjdC5jcHAKQEAgLTY4LDYgKzY4LDEzIEBA
IGJvb2wgRmxvYXRSZWN0Ojpjb250YWlucyhjb25zdCBGbG9hdFJlY3QmIG90aGVyKSBjb25zdAog
ICAgICAgICAmJiB5KCkgPD0gb3RoZXIueSgpICYmIG1heFkoKSA+PSBvdGhlci5tYXhZKCk7CiB9
CiAKK2Jvb2wgRmxvYXRSZWN0Ojpjb250YWlucyhjb25zdCBGbG9hdFBvaW50JiBwb2ludCwgQ29u
dGFpbnNNb2RlIGNvbnRhaW5zTW9kZSkgY29uc3QKK3sKKyAgICBpZiAoY29udGFpbnNNb2RlID09
IENvbnRhaW5zUmVjdCkKKyAgICAgICAgcmV0dXJuIGNvbnRhaW5zKHBvaW50LngoKSwgcG9pbnQu
eSgpKTsKKyAgICByZXR1cm4geCgpIDwgcG9pbnQueCgpICYmIG1heFgoKSA+IHBvaW50LngoKSAm
JiB5KCkgPCBwb2ludC55KCkgJiYgbWF4WSgpID4geSgpOworfQorCiB2b2lkIEZsb2F0UmVjdDo6
aW50ZXJzZWN0KGNvbnN0IEZsb2F0UmVjdCYgb3RoZXIpCiB7CiAgICAgZmxvYXQgbCA9IG1heCh4
KCksIG90aGVyLngoKSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9GbG9hdFJlY3QuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0Zsb2F0
UmVjdC5oCmluZGV4IDI0YTZiMTkuLjAzYTRhMWYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL0Zsb2F0UmVjdC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL0Zsb2F0UmVjdC5oCkBAIC03NCw2ICs3NCwxMSBAQCBjbGFzcyBJbnRQb2lu
dDsKIAogY2xhc3MgRmxvYXRSZWN0IHsKIHB1YmxpYzoKKyAgICBlbnVtIENvbnRhaW5zTW9kZSB7
CisgICAgICAgIENvbnRhaW5zUmVjdCwKKyAgICAgICAgSW5zaWRlUmVjdAorICAgIH07CisKICAg
ICBGbG9hdFJlY3QoKSB7IH0KICAgICBGbG9hdFJlY3QoY29uc3QgRmxvYXRQb2ludCYgbG9jYXRp
b24sIGNvbnN0IEZsb2F0U2l6ZSYgc2l6ZSkKICAgICAgICAgOiBtX2xvY2F0aW9uKGxvY2F0aW9u
KSwgbV9zaXplKHNpemUpIHsgfQpAQCAtMTQ2LDYgKzE1MSw3IEBAIHB1YmxpYzoKIAogICAgIGJv
b2wgaW50ZXJzZWN0cyhjb25zdCBGbG9hdFJlY3QmKSBjb25zdDsKICAgICBib29sIGNvbnRhaW5z
KGNvbnN0IEZsb2F0UmVjdCYpIGNvbnN0OworICAgIGJvb2wgY29udGFpbnMoY29uc3QgRmxvYXRQ
b2ludCYsIENvbnRhaW5zTW9kZSA9IENvbnRhaW5zUmVjdCkgY29uc3Q7CiAKICAgICB2b2lkIGlu
dGVyc2VjdChjb25zdCBGbG9hdFJlY3QmKTsKICAgICB2b2lkIHVuaXRlKGNvbnN0IEZsb2F0UmVj
dCYpOwpAQCAtMTU1LDcgKzE2MSw2IEBAIHB1YmxpYzoKICAgICAvLyBpcyByZWFsbHkgY2hlY2tp
bmcgZm9yIGNvbnRhaW5tZW50IG9mIDF4MSByZWN0LCBidXQgdGhhdCBkb2Vzbid0IG1ha2Ugc2Vu
c2Ugd2l0aCBmbG9hdHMuCiAgICAgYm9vbCBjb250YWlucyhmbG9hdCBweCwgZmxvYXQgcHkpIGNv
bnN0CiAgICAgICAgIHsgcmV0dXJuIHB4ID49IHgoKSAmJiBweCA8PSBtYXhYKCkgJiYgcHkgPj0g
eSgpICYmIHB5IDw9IG1heFkoKTsgfQotICAgIGJvb2wgY29udGFpbnMoY29uc3QgRmxvYXRQb2lu
dCYgcG9pbnQpIGNvbnN0IHsgcmV0dXJuIGNvbnRhaW5zKHBvaW50LngoKSwgcG9pbnQueSgpKTsg
fQogCiAgICAgdm9pZCBpbmZsYXRlWChmbG9hdCBkeCkgewogICAgICAgICBtX2xvY2F0aW9uLnNl
dFgobV9sb2NhdGlvbi54KCkgLSBkeCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVyT2JqZWN0LmggYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyT2Jq
ZWN0LmgKaW5kZXggYmZhYTY5NS4uY2VjYzRmOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL1JlbmRlck9iamVjdC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJPYmplY3QuaApAQCAtMzU3LDYgKzM1Nyw4IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIGJv
b2wgaXNTVkdHcmFkaWVudFN0b3AoKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQogICAgIHZpcnR1
YWwgYm9vbCBpc1NWR0hpZGRlbkNvbnRhaW5lcigpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CiAg
ICAgdmlydHVhbCBib29sIGlzU1ZHUGF0aCgpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CisgICAg
dmlydHVhbCBib29sIGlzU1ZHUmVjdCgpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CisgICAgdmly
dHVhbCBib29sIGlzU1ZHU2hhcGUoKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQogICAgIHZpcnR1
YWwgYm9vbCBpc1NWR1RleHQoKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQogICAgIHZpcnR1YWwg
Ym9vbCBpc1NWR1RleHRQYXRoKCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KICAgICB2aXJ0dWFs
IGJvb2wgaXNTVkdJbmxpbmUoKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRyZWVBc1RleHQuY3BwIGIvU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL1JlbmRlclRyZWVBc1RleHQuY3BwCmluZGV4IDNhMDRlMzUuLjc0YWJj
OGYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUcmVlQXNUZXh0
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVHJlZUFzVGV4dC5jcHAK
QEAgLTUyMCw4ICs1MjAsOCBAQCBzdGF0aWMgdm9pZCB3cml0ZVRleHRSdW4oVGV4dFN0cmVhbSYg
dHMsIGNvbnN0IFJlbmRlclRleHQmIG8sIGNvbnN0IElubGluZVRleHRCbwogdm9pZCB3cml0ZShU
ZXh0U3RyZWFtJiB0cywgY29uc3QgUmVuZGVyT2JqZWN0JiBvLCBpbnQgaW5kZW50LCBSZW5kZXJB
c1RleHRCZWhhdmlvciBiZWhhdmlvcikKIHsKICNpZiBFTkFCTEUoU1ZHKQotICAgIGlmIChvLmlz
U1ZHUGF0aCgpKSB7Ci0gICAgICAgIHdyaXRlKHRzLCAqdG9SZW5kZXJTVkdQYXRoKCZvKSwgaW5k
ZW50KTsKKyAgICBpZiAoby5pc1NWR1NoYXBlKCkpIHsKKyAgICAgICAgd3JpdGUodHMsICp0b1Jl
bmRlclNWR1NoYXBlKCZvKSwgaW5kZW50KTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICBp
ZiAoby5pc1NWR0dyYWRpZW50U3RvcCgpKSB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvc3ZnL1JlbmRlclNWR0FsbEluT25lLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9zdmcvUmVuZGVyU1ZHQWxsSW5PbmUuY3BwCmluZGV4IDllYTNiZTUuLjI5NjkwMDggMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHQWxsSW5PbmUu
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHQWxsSW5PbmUu
Y3BwCkBAIC0zNSw2ICszNSw3IEBACiAjaW5jbHVkZSAiUmVuZGVyU1ZHSW5saW5lVGV4dC5jcHAi
CiAjaW5jbHVkZSAiUmVuZGVyU1ZHTW9kZWxPYmplY3QuY3BwIgogI2luY2x1ZGUgIlJlbmRlclNW
R1BhdGguY3BwIgorI2luY2x1ZGUgIlJlbmRlclNWR1JlY3QuY3BwIgogI2luY2x1ZGUgIlJlbmRl
clNWR1Jlc291cmNlLmNwcCIKICNpbmNsdWRlICJSZW5kZXJTVkdSZXNvdXJjZUNsaXBwZXIuY3Bw
IgogI2luY2x1ZGUgIlJlbmRlclNWR1Jlc291cmNlQ29udGFpbmVyLmNwcCIKQEAgLTQ5LDYgKzUw
LDcgQEAKICNpbmNsdWRlICJSZW5kZXJTVkdSZXNvdXJjZVNvbGlkQ29sb3IuY3BwIgogI2luY2x1
ZGUgIlJlbmRlclNWR1Jvb3QuY3BwIgogI2luY2x1ZGUgIlJlbmRlclNWR1NoYWRvd1RyZWVSb290
Q29udGFpbmVyLmNwcCIKKyNpbmNsdWRlICJSZW5kZXJTVkdTaGFwZS5jcHAiCiAjaW5jbHVkZSAi
UmVuZGVyU1ZHVFNwYW4uY3BwIgogI2luY2x1ZGUgIlJlbmRlclNWR1RleHQuY3BwIgogI2luY2x1
ZGUgIlJlbmRlclNWR1RleHRQYXRoLmNwcCIKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9zdmcvUmVuZGVyU1ZHTW9kZWxPYmplY3QuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL3N2Zy9SZW5kZXJTVkdNb2RlbE9iamVjdC5jcHAKaW5kZXggMTRjMWRiOC4uYzIzNDBi
MyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdNb2Rl
bE9iamVjdC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdN
b2RlbE9iamVjdC5jcHAKQEAgLTE1Myw3ICsxNTMsNyBAQCBzdGF0aWMgYm9vbCBpbnRlcnNlY3Rz
QWxsb3dpbmdFbXB0eShjb25zdCBGbG9hdFJlY3QmIHIsIGNvbnN0IEZsb2F0UmVjdCYgb3RoZXIp
CiAvLyBpbWFnZSwgbGluZSwgcGF0aCwgcG9seWdvbiwgcG9seWxpbmUsIHJlY3QsIHRleHQgYW5k
IHVzZS4KIHN0YXRpYyBib29sIGlzR3JhcGhpY3NFbGVtZW50KFJlbmRlck9iamVjdCogcmVuZGVy
ZXIpCiB7Ci0gICAgcmV0dXJuIHJlbmRlcmVyLT5pc1NWR1BhdGgoKSB8fCByZW5kZXJlci0+aXNT
VkdUZXh0KCkgfHwgcmVuZGVyZXItPmlzU1ZHSW1hZ2UoKSB8fCByZW5kZXJlci0+aXNTVkdTaGFk
b3dUcmVlUm9vdENvbnRhaW5lcigpOworICAgIHJldHVybiByZW5kZXJlci0+aXNTVkdTaGFwZSgp
IHx8IHJlbmRlcmVyLT5pc1NWR1RleHQoKSB8fCByZW5kZXJlci0+aXNTVkdJbWFnZSgpIHx8IHJl
bmRlcmVyLT5pc1NWR1NoYWRvd1RyZWVSb290Q29udGFpbmVyKCk7CiB9CiAKIGJvb2wgUmVuZGVy
U1ZHTW9kZWxPYmplY3Q6OmNoZWNrSW50ZXJzZWN0aW9uKFJlbmRlck9iamVjdCogcmVuZGVyZXIs
IGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9zdmcvUmVuZGVyU1ZHUGF0aC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3Zn
L1JlbmRlclNWR1BhdGguY3BwCmluZGV4IGI3YWQ3YTIuLmZmMTU1MDUgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUGF0aC5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdQYXRoLmNwcApAQCAtNiw2ICs2LDggQEAK
ICAqIENvcHlyaWdodCAoQykgMjAwOSBEaXJrIFNjaHVsemUgPGtyaXRAd2Via2l0Lm9yZz4KICAq
IENvcHlyaWdodCAoQykgUmVzZWFyY2ggSW4gTW90aW9uIExpbWl0ZWQgMjAxMC4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KICAqIENvcHlyaWdodCAoQykgMjAwOSBKZWZmIFNjaGlsbGVyIDxjb2RlZHJl
YWRAZ21haWwuY29tPgorICogQ29weXJpZ2h0IChDKSAyMDExIFJlbmF0YSBIb2RvdmFuIDxyZW5p
QHdlYmtpdC5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgVW5pdmVyc2l0eSBvZiBTemVnZWQK
ICAqCiAgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1
dGUgaXQgYW5kL29yCiAgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGli
cmFyeSBHZW5lcmFsIFB1YmxpYwpAQCAtMjgsNTAgKzMwLDEzIEBACiAjaWYgRU5BQkxFKFNWRykK
ICNpbmNsdWRlICJSZW5kZXJTVkdQYXRoLmgiCiAKLSNpbmNsdWRlICJGbG9hdFBvaW50LmgiCi0j
aW5jbHVkZSAiRmxvYXRRdWFkLmgiCi0jaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCi0jaW5j
bHVkZSAiSGl0VGVzdFJlcXVlc3QuaCIKLSNpbmNsdWRlICJMYXlvdXRSZXBhaW50ZXIuaCIKLSNp
bmNsdWRlICJQb2ludGVyRXZlbnRzSGl0UnVsZXMuaCIKLSNpbmNsdWRlICJSZW5kZXJTVkdDb250
YWluZXIuaCIKLSNpbmNsdWRlICJSZW5kZXJTVkdSZXNvdXJjZU1hcmtlci5oIgotI2luY2x1ZGUg
IlJlbmRlclNWR1Jlc291cmNlU29saWRDb2xvci5oIgotI2luY2x1ZGUgIlNWR1JlbmRlclN1cHBv
cnQuaCIKLSNpbmNsdWRlICJTVkdSZXNvdXJjZXMuaCIKKyNpbmNsdWRlICJTVkdQYXRoRWxlbWVu
dC5oIgogI2luY2x1ZGUgIlNWR1N0eWxlZFRyYW5zZm9ybWFibGVFbGVtZW50LmgiCi0jaW5jbHVk
ZSAiU1ZHVHJhbnNmb3JtTGlzdC5oIgotI2luY2x1ZGUgIlNWR1VSSVJlZmVyZW5jZS5oIgotI2lu
Y2x1ZGUgIlN0cm9rZVN0eWxlQXBwbGllci5oIgotI2luY2x1ZGUgPHd0Zi9NYXRoRXh0cmFzLmg+
CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotY2xhc3MgQm91bmRpbmdSZWN0U3Ryb2tlU3R5bGVB
cHBsaWVyIDogcHVibGljIFN0cm9rZVN0eWxlQXBwbGllciB7Ci1wdWJsaWM6Ci0gICAgQm91bmRp
bmdSZWN0U3Ryb2tlU3R5bGVBcHBsaWVyKGNvbnN0IFJlbmRlck9iamVjdCogb2JqZWN0LCBSZW5k
ZXJTdHlsZSogc3R5bGUpCi0gICAgICAgIDogbV9vYmplY3Qob2JqZWN0KQotICAgICAgICAsIG1f
c3R5bGUoc3R5bGUpCi0gICAgewotICAgICAgICBBU1NFUlQoc3R5bGUpOwotICAgICAgICBBU1NF
UlQob2JqZWN0KTsKLSAgICB9Ci0KLSAgICB2b2lkIHN0cm9rZVN0eWxlKEdyYXBoaWNzQ29udGV4
dCogZ2MpCi0gICAgewotICAgICAgICBTVkdSZW5kZXJTdXBwb3J0OjphcHBseVN0cm9rZVN0eWxl
VG9Db250ZXh0KGdjLCBtX3N0eWxlLCBtX29iamVjdCk7Ci0gICAgfQotCi1wcml2YXRlOgotICAg
IGNvbnN0IFJlbmRlck9iamVjdCogbV9vYmplY3Q7Ci0gICAgUmVuZGVyU3R5bGUqIG1fc3R5bGU7
Ci19OwotCiBSZW5kZXJTVkdQYXRoOjpSZW5kZXJTVkdQYXRoKFNWR1N0eWxlZFRyYW5zZm9ybWFi
bGVFbGVtZW50KiBub2RlKQotICAgIDogUmVuZGVyU1ZHTW9kZWxPYmplY3Qobm9kZSkKLSAgICAs
IG1fbmVlZHNCb3VuZGFyaWVzVXBkYXRlKGZhbHNlKSAvLyBkZWZhdWx0IGlzIGZhbHNlLCB0aGUg
Y2FjaGVkIHJlY3RzIGFyZSBlbXB0eSBmcm9tIHRoZSBiZWdpbm5pbmcKLSAgICAsIG1fbmVlZHNQ
YXRoVXBkYXRlKHRydWUpIC8vIGRlZmF1bHQgaXMgdHJ1ZSwgc28gd2UgZ3JhYiBhIFBhdGggb2Jq
ZWN0IG9uY2UgZnJvbSBTVkdTdHlsZWRUcmFuc2Zvcm1hYmxlRWxlbWVudAotICAgICwgbV9uZWVk
c1RyYW5zZm9ybVVwZGF0ZSh0cnVlKSAvLyBkZWZhdWx0IGlzIHRydWUsIHNvIHdlIGdyYWIgYSBB
ZmZpbmVUcmFuc2Zvcm0gb2JqZWN0IG9uY2UgZnJvbSBTVkdTdHlsZWRUcmFuc2Zvcm1hYmxlRWxl
bWVudAorICAgIDogUmVuZGVyU1ZHU2hhcGUobm9kZSkKIHsKIH0KIApAQCAtNzksMzE0ICs0NCwx
NiBAQCBSZW5kZXJTVkdQYXRoOjp+UmVuZGVyU1ZHUGF0aCgpCiB7CiB9CiAKLWJvb2wgUmVuZGVy
U1ZHUGF0aDo6ZmlsbENvbnRhaW5zKGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50LCBib29sIHJlcXVp
cmVzRmlsbCwgV2luZFJ1bGUgZmlsbFJ1bGUpCi17Ci0gICAgaWYgKCFtX2ZpbGxCb3VuZGluZ0Jv
eC5jb250YWlucyhwb2ludCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIENvbG9yIGZh
bGxiYWNrQ29sb3I7Ci0gICAgaWYgKHJlcXVpcmVzRmlsbCAmJiAhUmVuZGVyU1ZHUmVzb3VyY2U6
OmZpbGxQYWludGluZ1Jlc291cmNlKHRoaXMsIHN0eWxlKCksIGZhbGxiYWNrQ29sb3IpKQotICAg
ICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICByZXR1cm4gbV9wYXRoLmNvbnRhaW5zKHBvaW50LCBm
aWxsUnVsZSk7Ci19Ci0KLWJvb2wgUmVuZGVyU1ZHUGF0aDo6c3Ryb2tlQ29udGFpbnMoY29uc3Qg
RmxvYXRQb2ludCYgcG9pbnQsIGJvb2wgcmVxdWlyZXNTdHJva2UpCi17Ci0gICAgaWYgKCFtX3N0
cm9rZUFuZE1hcmtlckJvdW5kaW5nQm94LmNvbnRhaW5zKHBvaW50KSkKLSAgICAgICAgcmV0dXJu
IGZhbHNlOwotCi0gICAgQ29sb3IgZmFsbGJhY2tDb2xvcjsKLSAgICBpZiAocmVxdWlyZXNTdHJv
a2UgJiYgIVJlbmRlclNWR1Jlc291cmNlOjpzdHJva2VQYWludGluZ1Jlc291cmNlKHRoaXMsIHN0
eWxlKCksIGZhbGxiYWNrQ29sb3IpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBpZiAo
c2hvdWxkU3Ryb2tlWmVyb0xlbmd0aFN1YnBhdGgoKSkKLSAgICAgICAgcmV0dXJuIHplcm9MZW5n
dGhTdWJwYXRoUmVjdCgpLmNvbnRhaW5zKHBvaW50KTsKLQotICAgIEJvdW5kaW5nUmVjdFN0cm9r
ZVN0eWxlQXBwbGllciBzdHJva2VTdHlsZSh0aGlzLCBzdHlsZSgpKTsKLSAgICByZXR1cm4gbV9w
YXRoLnN0cm9rZUNvbnRhaW5zKCZzdHJva2VTdHlsZSwgcG9pbnQpOwotfQotCi12b2lkIFJlbmRl
clNWR1BhdGg6OmxheW91dCgpCi17Ci0gICAgTGF5b3V0UmVwYWludGVyIHJlcGFpbnRlcigqdGhp
cywgY2hlY2tGb3JSZXBhaW50RHVyaW5nTGF5b3V0KCkgJiYgc2VsZk5lZWRzTGF5b3V0KCkpOwot
ICAgIFNWR1N0eWxlZFRyYW5zZm9ybWFibGVFbGVtZW50KiBlbGVtZW50ID0gc3RhdGljX2Nhc3Q8
U1ZHU3R5bGVkVHJhbnNmb3JtYWJsZUVsZW1lbnQqPihub2RlKCkpOwotCi0gICAgYm9vbCB1cGRh
dGVDYWNoZWRCb3VuZGFyaWVzSW5QYXJlbnRzID0gZmFsc2U7Ci0KLSAgICBib29sIG5lZWRzUGF0
aFVwZGF0ZSA9IG1fbmVlZHNQYXRoVXBkYXRlOwotICAgIGlmIChuZWVkc1BhdGhVcGRhdGUpIHsK
LSAgICAgICAgbV9wYXRoLmNsZWFyKCk7Ci0gICAgICAgIGVsZW1lbnQtPnRvUGF0aERhdGEobV9w
YXRoKTsKLSAgICAgICAgbV9uZWVkc1BhdGhVcGRhdGUgPSBmYWxzZTsKLSAgICAgICAgdXBkYXRl
Q2FjaGVkQm91bmRhcmllc0luUGFyZW50cyA9IHRydWU7Ci0gICAgfQotCi0gICAgaWYgKG1fbmVl
ZHNUcmFuc2Zvcm1VcGRhdGUpIHsKLSAgICAgICAgbV9sb2NhbFRyYW5zZm9ybSA9IGVsZW1lbnQt
PmFuaW1hdGVkTG9jYWxUcmFuc2Zvcm0oKTsKLSAgICAgICAgbV9uZWVkc1RyYW5zZm9ybVVwZGF0
ZSA9IGZhbHNlOwotICAgICAgICB1cGRhdGVDYWNoZWRCb3VuZGFyaWVzSW5QYXJlbnRzID0gdHJ1
ZTsKLSAgICB9Ci0KLSAgICBpZiAobV9uZWVkc0JvdW5kYXJpZXNVcGRhdGUpCi0gICAgICAgIHVw
ZGF0ZUNhY2hlZEJvdW5kYXJpZXNJblBhcmVudHMgPSB0cnVlOwotCi0gICAgLy8gSW52YWxpZGF0
ZSBhbGwgcmVzb3VyY2VzIG9mIHRoaXMgY2xpZW50IGlmIG91ciBsYXlvdXQgY2hhbmdlZC4KLSAg
ICBpZiAobV9ldmVySGFkTGF5b3V0ICYmIHNlbGZOZWVkc0xheW91dCgpKSB7Ci0gICAgICAgIFNW
R1Jlc291cmNlc0NhY2hlOjpjbGllbnRMYXlvdXRDaGFuZ2VkKHRoaXMpOwotICAgICAgICBtX21h
cmtlckxheW91dEluZm8uY2xlYXIoKTsKLSAgICB9Ci0KLSAgICAvLyBBdCB0aGlzIHBvaW50IExh
eW91dFJlcGFpbnRlciBhbHJlYWR5IGdyYWJiZWQgdGhlIG9sZCBib3VuZHMsCi0gICAgLy8gcmVj
YWxjdWxhdGUgdGhlbSBub3cgc28gcmVwYWludEFmdGVyTGF5b3V0KCkgdXNlcyB0aGUgbmV3IGJv
dW5kcy4KLSAgICBpZiAobmVlZHNQYXRoVXBkYXRlIHx8IG1fbmVlZHNCb3VuZGFyaWVzVXBkYXRl
KSB7Ci0gICAgICAgIHVwZGF0ZUNhY2hlZEJvdW5kYXJpZXMoKTsKLSAgICAgICAgbV9uZWVkc0Jv
dW5kYXJpZXNVcGRhdGUgPSBmYWxzZTsKLSAgICB9Ci0KLSAgICAvLyBJZiBvdXIgYm91bmRzIGNo
YW5nZWQsIG5vdGlmeSB0aGUgcGFyZW50cy4KLSAgICBpZiAodXBkYXRlQ2FjaGVkQm91bmRhcmll
c0luUGFyZW50cykKLSAgICAgICAgUmVuZGVyU1ZHTW9kZWxPYmplY3Q6OnNldE5lZWRzQm91bmRh
cmllc1VwZGF0ZSgpOwotCi0gICAgcmVwYWludGVyLnJlcGFpbnRBZnRlckxheW91dCgpOwotICAg
IHNldE5lZWRzTGF5b3V0KGZhbHNlKTsKLX0KLQotYm9vbCBSZW5kZXJTVkdQYXRoOjpzaG91bGRT
dHJva2VaZXJvTGVuZ3RoU3VicGF0aCgpIGNvbnN0Ci17Ci0gICAgLy8gU3BlYygxMS40KTogQW55
IHplcm8gbGVuZ3RoIHN1YnBhdGggc2hhbGwgbm90IGJlIHN0cm9rZWQgaWYgdGhlIOKAmHN0cm9r
ZS1saW5lY2Fw4oCZIHByb3BlcnR5IGhhcyBhIHZhbHVlIG9mIGJ1dHQKLSAgICAvLyBidXQgc2hh
bGwgYmUgc3Ryb2tlZCBpZiB0aGUg4oCYc3Ryb2tlLWxpbmVjYXDigJkgcHJvcGVydHkgaGFzIGEg
dmFsdWUgb2Ygcm91bmQgb3Igc3F1YXJlCi0gICAgcmV0dXJuIHN0eWxlKCktPnN2Z1N0eWxlKCkt
Pmhhc1N0cm9rZSgpICYmIHN0eWxlKCktPnN2Z1N0eWxlKCktPmNhcFN0eWxlKCkgIT0gQnV0dENh
cCAmJiAhbV9maWxsQm91bmRpbmdCb3gud2lkdGgoKSAmJiAhbV9maWxsQm91bmRpbmdCb3guaGVp
Z2h0KCk7Ci19Ci0KLUZsb2F0UmVjdCBSZW5kZXJTVkdQYXRoOjp6ZXJvTGVuZ3RoU3VicGF0aFJl
Y3QoKSBjb25zdAotewotICAgIFNWR0VsZW1lbnQqIHN2Z0VsZW1lbnQgPSBzdGF0aWNfY2FzdDxT
VkdFbGVtZW50Kj4obm9kZSgpKTsKLSAgICBmbG9hdCBzdHJva2VXaWR0aCA9IHN0eWxlKCktPnN2
Z1N0eWxlKCktPnN0cm9rZVdpZHRoKCkudmFsdWUoc3ZnRWxlbWVudCk7Ci0gICAgcmV0dXJuIEZs
b2F0UmVjdChtX2ZpbGxCb3VuZGluZ0JveC54KCkgLSBzdHJva2VXaWR0aCAvIDIsIG1fZmlsbEJv
dW5kaW5nQm94LnkoKSAtIHN0cm9rZVdpZHRoIC8gMiwgc3Ryb2tlV2lkdGgsIHN0cm9rZVdpZHRo
KTsKLX0KLQotdm9pZCBSZW5kZXJTVkdQYXRoOjpzZXR1cFNxdWFyZUNhcFBhdGgoUGF0aComIHVz
ZVBhdGgsIGludCYgYXBwbHlNb2RlKQotewotICAgIC8vIFNwZWMoMTEuNCk6IEFueSB6ZXJvIGxl
bmd0aCBzdWJwYXRoIHNoYWxsIG5vdCBiZSBzdHJva2VkIGlmIHRoZSDigJhzdHJva2UtbGluZWNh
cOKAmSBwcm9wZXJ0eSBoYXMgYSB2YWx1ZSBvZiBidXR0Ci0gICAgLy8gYnV0IHNoYWxsIGJlIHN0
cm9rZWQgaWYgdGhlIOKAmHN0cm9rZS1saW5lY2Fw4oCZIHByb3BlcnR5IGhhcyBhIHZhbHVlIG9m
IHJvdW5kIG9yIHNxdWFyZQotICAgIERFRklORV9TVEFUSUNfTE9DQUwoUGF0aCwgdGVtcFBhdGgs
ICgpKTsKLQotICAgIGFwcGx5TW9kZSA9IEFwcGx5VG9GaWxsTW9kZTsKLSAgICB1c2VQYXRoID0g
JnRlbXBQYXRoOwotICAgIHVzZVBhdGgtPmNsZWFyKCk7Ci0gICAgaWYgKHN0eWxlKCktPnN2Z1N0
eWxlKCktPmNhcFN0eWxlKCkgPT0gU3F1YXJlQ2FwKQotICAgICAgICB1c2VQYXRoLT5hZGRSZWN0
KHplcm9MZW5ndGhTdWJwYXRoUmVjdCgpKTsKLSAgICBlbHNlCi0gICAgICAgIHVzZVBhdGgtPmFk
ZEVsbGlwc2UoemVyb0xlbmd0aFN1YnBhdGhSZWN0KCkpOwotfQotCi1ib29sIFJlbmRlclNWR1Bh
dGg6OnNldHVwTm9uU2NhbGluZ1N0cm9rZVBhdGgoUGF0aComIHVzZVBhdGgsIEdyYXBoaWNzQ29u
dGV4dFN0YXRlU2F2ZXImIHN0YXRlU2F2ZXIpCit2b2lkIFJlbmRlclNWR1BhdGg6OmluZmxhdGVX
aXRoTWFya2VyQm91bmRzKCkKIHsKLSAgICBERUZJTkVfU1RBVElDX0xPQ0FMKFBhdGgsIHRlbXBQ
YXRoLCAoKSk7Ci0KLSAgICBTVkdTdHlsZWRUcmFuc2Zvcm1hYmxlRWxlbWVudCogZWxlbWVudCA9
IHN0YXRpY19jYXN0PFNWR1N0eWxlZFRyYW5zZm9ybWFibGVFbGVtZW50Kj4obm9kZSgpKTsKLSAg
ICBBZmZpbmVUcmFuc2Zvcm0gbm9uU2NhbGluZ1N0cm9rZVRyYW5zZm9ybSA9IGVsZW1lbnQtPmdl
dFNjcmVlbkNUTShTVkdMb2NhdGFibGU6OkRpc2FsbG93U3R5bGVVcGRhdGUpOwotICAgIGlmICgh
bm9uU2NhbGluZ1N0cm9rZVRyYW5zZm9ybS5pc0ludmVydGlibGUoKSkKLSAgICAgICAgcmV0dXJu
IGZhbHNlOwotCi0gICAgdGVtcFBhdGggPSBtX3BhdGg7Ci0gICAgdXNlUGF0aCA9ICZ0ZW1wUGF0
aDsKLSAgICB0ZW1wUGF0aC50cmFuc2Zvcm0obm9uU2NhbGluZ1N0cm9rZVRyYW5zZm9ybSk7Ci0K
LSAgICBzdGF0ZVNhdmVyLnNhdmUoKTsKLSAgICBzdGF0ZVNhdmVyLmNvbnRleHQoKS0+Y29uY2F0
Q1RNKG5vblNjYWxpbmdTdHJva2VUcmFuc2Zvcm0uaW52ZXJzZSgpKTsKLSAgICByZXR1cm4gdHJ1
ZTsKLX0KLQotdm9pZCBSZW5kZXJTVkdQYXRoOjpmaWxsQW5kU3Ryb2tlUGF0aChHcmFwaGljc0Nv
bnRleHQqIGNvbnRleHQpCi17Ci0gICAgUmVuZGVyU3R5bGUqIHN0eWxlID0gdGhpcy0+c3R5bGUo
KTsKLQotICAgIENvbG9yIGZhbGxiYWNrQ29sb3I7Ci0gICAgaWYgKFJlbmRlclNWR1Jlc291cmNl
KiBmaWxsUGFpbnRpbmdSZXNvdXJjZSA9IFJlbmRlclNWR1Jlc291cmNlOjpmaWxsUGFpbnRpbmdS
ZXNvdXJjZSh0aGlzLCBzdHlsZSwgZmFsbGJhY2tDb2xvcikpIHsKLSAgICAgICAgaWYgKGZpbGxQ
YWludGluZ1Jlc291cmNlLT5hcHBseVJlc291cmNlKHRoaXMsIHN0eWxlLCBjb250ZXh0LCBBcHBs
eVRvRmlsbE1vZGUpKQotICAgICAgICAgICAgZmlsbFBhaW50aW5nUmVzb3VyY2UtPnBvc3RBcHBs
eVJlc291cmNlKHRoaXMsIGNvbnRleHQsIEFwcGx5VG9GaWxsTW9kZSwgJm1fcGF0aCk7Ci0gICAg
ICAgIGVsc2UgaWYgKGZhbGxiYWNrQ29sb3IuaXNWYWxpZCgpKSB7Ci0gICAgICAgICAgICBSZW5k
ZXJTVkdSZXNvdXJjZVNvbGlkQ29sb3IqIGZhbGxiYWNrUmVzb3VyY2UgPSBSZW5kZXJTVkdSZXNv
dXJjZTo6c2hhcmVkU29saWRQYWludGluZ1Jlc291cmNlKCk7Ci0gICAgICAgICAgICBmYWxsYmFj
a1Jlc291cmNlLT5zZXRDb2xvcihmYWxsYmFja0NvbG9yKTsKLSAgICAgICAgICAgIGlmIChmYWxs
YmFja1Jlc291cmNlLT5hcHBseVJlc291cmNlKHRoaXMsIHN0eWxlLCBjb250ZXh0LCBBcHBseVRv
RmlsbE1vZGUpKQotICAgICAgICAgICAgICAgIGZhbGxiYWNrUmVzb3VyY2UtPnBvc3RBcHBseVJl
c291cmNlKHRoaXMsIGNvbnRleHQsIEFwcGx5VG9GaWxsTW9kZSwgJm1fcGF0aCk7Ci0gICAgICAg
IH0KLSAgICB9Ci0KLSAgICBmYWxsYmFja0NvbG9yID0gQ29sb3IoKTsKLSAgICBSZW5kZXJTVkdS
ZXNvdXJjZSogc3Ryb2tlUGFpbnRpbmdSZXNvdXJjZSA9IFJlbmRlclNWR1Jlc291cmNlOjpzdHJv
a2VQYWludGluZ1Jlc291cmNlKHRoaXMsIHN0eWxlLCBmYWxsYmFja0NvbG9yKTsKLSAgICBpZiAo
IXN0cm9rZVBhaW50aW5nUmVzb3VyY2UpCi0gICAgICAgIHJldHVybjsKLQotICAgIFBhdGgqIHVz
ZVBhdGggPSAmbV9wYXRoOwotICAgIGludCBhcHBseU1vZGUgPSBBcHBseVRvU3Ryb2tlTW9kZTsK
LQotICAgIGJvb2wgbm9uU2NhbGluZ1N0cm9rZSA9IHN0eWxlLT5zdmdTdHlsZSgpLT52ZWN0b3JF
ZmZlY3QoKSA9PSBWRV9OT05fU0NBTElOR19TVFJPS0U7Ci0KLSAgICBHcmFwaGljc0NvbnRleHRT
dGF0ZVNhdmVyIHN0YXRlU2F2ZXIoKmNvbnRleHQsIGZhbHNlKTsKLQotICAgIC8vIFNwZWMoMTEu
NCk6IEFueSB6ZXJvIGxlbmd0aCBzdWJwYXRoIHNoYWxsIG5vdCBiZSBzdHJva2VkIGlmIHRoZSDi
gJhzdHJva2UtbGluZWNhcOKAmSBwcm9wZXJ0eSBoYXMgYSB2YWx1ZSBvZiBidXR0Ci0gICAgLy8g
YnV0IHNoYWxsIGJlIHN0cm9rZWQgaWYgdGhlIOKAmHN0cm9rZS1saW5lY2Fw4oCZIHByb3BlcnR5
IGhhcyBhIHZhbHVlIG9mIHJvdW5kIG9yIHNxdWFyZQotICAgIC8vIEZJWE1FOiB0aGlzIGRvZXMg
bm90IHdvcmsgZm9yIHplcm8tbGVuZ3RoIHN1YnBhdGhzLCBvbmx5IHdoZW4gdG90YWwgcGF0aCBp
cyB6ZXJvLWxlbmd0aAotICAgIGlmIChzaG91bGRTdHJva2VaZXJvTGVuZ3RoU3VicGF0aCgpKQot
ICAgICAgICBzZXR1cFNxdWFyZUNhcFBhdGgodXNlUGF0aCwgYXBwbHlNb2RlKTsKLSAgICBlbHNl
IGlmIChub25TY2FsaW5nU3Ryb2tlKSB7Ci0gICAgICAgaWYgKCFzZXR1cE5vblNjYWxpbmdTdHJv
a2VQYXRoKHVzZVBhdGgsIHN0YXRlU2F2ZXIpKQotICAgICAgICAgICByZXR1cm47Ci0gICAgfQot
Ci0gICAgaWYgKHN0cm9rZVBhaW50aW5nUmVzb3VyY2UtPmFwcGx5UmVzb3VyY2UodGhpcywgc3R5
bGUsIGNvbnRleHQsIGFwcGx5TW9kZSkpCi0gICAgICAgIHN0cm9rZVBhaW50aW5nUmVzb3VyY2Ut
PnBvc3RBcHBseVJlc291cmNlKHRoaXMsIGNvbnRleHQsIGFwcGx5TW9kZSwgdXNlUGF0aCk7Ci0g
ICAgZWxzZSBpZiAoZmFsbGJhY2tDb2xvci5pc1ZhbGlkKCkpIHsKLSAgICAgICAgUmVuZGVyU1ZH
UmVzb3VyY2VTb2xpZENvbG9yKiBmYWxsYmFja1Jlc291cmNlID0gUmVuZGVyU1ZHUmVzb3VyY2U6
OnNoYXJlZFNvbGlkUGFpbnRpbmdSZXNvdXJjZSgpOwotICAgICAgICBmYWxsYmFja1Jlc291cmNl
LT5zZXRDb2xvcihmYWxsYmFja0NvbG9yKTsKLSAgICAgICAgaWYgKGZhbGxiYWNrUmVzb3VyY2Ut
PmFwcGx5UmVzb3VyY2UodGhpcywgc3R5bGUsIGNvbnRleHQsIGFwcGx5TW9kZSkpCi0gICAgICAg
ICAgICBmYWxsYmFja1Jlc291cmNlLT5wb3N0QXBwbHlSZXNvdXJjZSh0aGlzLCBjb250ZXh0LCBh
cHBseU1vZGUsIHVzZVBhdGgpOwotICAgIH0KLX0KLQotdm9pZCBSZW5kZXJTVkdQYXRoOjpwYWlu
dChQYWludEluZm8mIHBhaW50SW5mbywgY29uc3QgTGF5b3V0UG9pbnQmKQotewotICAgIGlmIChw
YWludEluZm8uY29udGV4dC0+cGFpbnRpbmdEaXNhYmxlZCgpIHx8IHN0eWxlKCktPnZpc2liaWxp
dHkoKSA9PSBISURERU4gfHwgbV9wYXRoLmlzRW1wdHkoKSkKLSAgICAgICAgcmV0dXJuOwotCi0g
ICAgRmxvYXRSZWN0IGJvdW5kaW5nQm94ID0gcmVwYWludFJlY3RJbkxvY2FsQ29vcmRpbmF0ZXMo
KTsKLSAgICBpZiAoIVNWR1JlbmRlclN1cHBvcnQ6OnBhaW50SW5mb0ludGVyc2VjdHNSZXBhaW50
UmVjdChib3VuZGluZ0JveCwgbV9sb2NhbFRyYW5zZm9ybSwgcGFpbnRJbmZvKSkKLSAgICAgICAg
cmV0dXJuOwotCi0gICAgUGFpbnRJbmZvIGNoaWxkUGFpbnRJbmZvKHBhaW50SW5mbyk7Ci0gICAg
Ym9vbCBkcmF3c091dGxpbmUgPSBzdHlsZSgpLT5vdXRsaW5lV2lkdGgoKSAmJiAoY2hpbGRQYWlu
dEluZm8ucGhhc2UgPT0gUGFpbnRQaGFzZU91dGxpbmUgfHwgY2hpbGRQYWludEluZm8ucGhhc2Ug
PT0gUGFpbnRQaGFzZVNlbGZPdXRsaW5lKTsKLSAgICBpZiAoZHJhd3NPdXRsaW5lIHx8IGNoaWxk
UGFpbnRJbmZvLnBoYXNlID09IFBhaW50UGhhc2VGb3JlZ3JvdW5kKSB7Ci0gICAgICAgIEdyYXBo
aWNzQ29udGV4dFN0YXRlU2F2ZXIgc3RhdGVTYXZlcigqY2hpbGRQYWludEluZm8uY29udGV4dCk7
Ci0gICAgICAgIGNoaWxkUGFpbnRJbmZvLmFwcGx5VHJhbnNmb3JtKG1fbG9jYWxUcmFuc2Zvcm0p
OwotCi0gICAgICAgIGlmIChjaGlsZFBhaW50SW5mby5waGFzZSA9PSBQYWludFBoYXNlRm9yZWdy
b3VuZCkgewotICAgICAgICAgICAgUGFpbnRJbmZvIHNhdmVkSW5mbyhjaGlsZFBhaW50SW5mbyk7
Ci0KLSAgICAgICAgICAgIGlmIChTVkdSZW5kZXJTdXBwb3J0OjpwcmVwYXJlVG9SZW5kZXJTVkdD
b250ZW50KHRoaXMsIGNoaWxkUGFpbnRJbmZvKSkgewotICAgICAgICAgICAgICAgIGNvbnN0IFNW
R1JlbmRlclN0eWxlKiBzdmdTdHlsZSA9IHN0eWxlKCktPnN2Z1N0eWxlKCk7Ci0gICAgICAgICAg
ICAgICAgaWYgKHN2Z1N0eWxlLT5zaGFwZVJlbmRlcmluZygpID09IFNSX0NSSVNQRURHRVMpCi0g
ICAgICAgICAgICAgICAgICAgIGNoaWxkUGFpbnRJbmZvLmNvbnRleHQtPnNldFNob3VsZEFudGlh
bGlhcyhmYWxzZSk7Ci0KLSAgICAgICAgICAgICAgICBmaWxsQW5kU3Ryb2tlUGF0aChjaGlsZFBh
aW50SW5mby5jb250ZXh0KTsKLQotICAgICAgICAgICAgICAgIGlmIChzdmdTdHlsZS0+aGFzTWFy
a2VycygpKQotICAgICAgICAgICAgICAgICAgICBtX21hcmtlckxheW91dEluZm8uZHJhd01hcmtl
cnMoY2hpbGRQYWludEluZm8pOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBTVkdSZW5k
ZXJTdXBwb3J0OjpmaW5pc2hSZW5kZXJTVkdDb250ZW50KHRoaXMsIGNoaWxkUGFpbnRJbmZvLCBz
YXZlZEluZm8uY29udGV4dCk7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAoZHJhd3NPdXRsaW5l
KQotICAgICAgICAgICAgcGFpbnRPdXRsaW5lKGNoaWxkUGFpbnRJbmZvLmNvbnRleHQsIEludFJl
Y3QoYm91bmRpbmdCb3gpKTsKLSAgICB9Ci19Ci0KLS8vIFRoaXMgbWV0aG9kIGlzIGNhbGxlZCBm
cm9tIGluc2lkZSBwYWludE91dGxpbmUoKSBzaW5jZSB3ZSBjYWxsIHBhaW50T3V0bGluZSgpCi0v
LyB3aGlsZSB0cmFuc2Zvcm1lZCB0byBvdXIgY29vcmQgc3lzdGVtLCByZXR1cm4gbG9jYWwgY29v
cmRzCi12b2lkIFJlbmRlclNWR1BhdGg6OmFkZEZvY3VzUmluZ1JlY3RzKFZlY3RvcjxMYXlvdXRS
ZWN0PiYgcmVjdHMsIGNvbnN0IExheW91dFBvaW50JikgCi17Ci0gICAgTGF5b3V0UmVjdCByZWN0
ID0gZW5jbG9zaW5nTGF5b3V0UmVjdChyZXBhaW50UmVjdEluTG9jYWxDb29yZGluYXRlcygpKTsK
LSAgICBpZiAoIXJlY3QuaXNFbXB0eSgpKQotICAgICAgICByZWN0cy5hcHBlbmQocmVjdCk7Ci19
Ci0KLWJvb2wgUmVuZGVyU1ZHUGF0aDo6bm9kZUF0RmxvYXRQb2ludChjb25zdCBIaXRUZXN0UmVx
dWVzdCYgcmVxdWVzdCwgSGl0VGVzdFJlc3VsdCYgcmVzdWx0LCBjb25zdCBGbG9hdFBvaW50JiBw
b2ludEluUGFyZW50LCBIaXRUZXN0QWN0aW9uIGhpdFRlc3RBY3Rpb24pCi17Ci0gICAgLy8gV2Ug
b25seSBkcmF3IGluIHRoZSBmb3Jncm91bmQgcGhhc2UsIHNvIHdlIG9ubHkgaGl0LXRlc3QgdGhl
bi4KLSAgICBpZiAoaGl0VGVzdEFjdGlvbiAhPSBIaXRUZXN0Rm9yZWdyb3VuZCkKLSAgICAgICAg
cmV0dXJuIGZhbHNlOwotCi0gICAgRmxvYXRQb2ludCBsb2NhbFBvaW50ID0gbV9sb2NhbFRyYW5z
Zm9ybS5pbnZlcnNlKCkubWFwUG9pbnQocG9pbnRJblBhcmVudCk7Ci0KLSAgICBpZiAoIVNWR1Jl
bmRlclN1cHBvcnQ6OnBvaW50SW5DbGlwcGluZ0FyZWEodGhpcywgbG9jYWxQb2ludCkpCi0gICAg
ICAgIHJldHVybiBmYWxzZTsKLQotICAgIFBvaW50ZXJFdmVudHNIaXRSdWxlcyBoaXRSdWxlcyhQ
b2ludGVyRXZlbnRzSGl0UnVsZXM6OlNWR19QQVRIX0hJVFRFU1RJTkcsIHJlcXVlc3QsIHN0eWxl
KCktPnBvaW50ZXJFdmVudHMoKSk7Ci0gICAgYm9vbCBpc1Zpc2libGUgPSAoc3R5bGUoKS0+dmlz
aWJpbGl0eSgpID09IFZJU0lCTEUpOwotICAgIGlmIChpc1Zpc2libGUgfHwgIWhpdFJ1bGVzLnJl
cXVpcmVWaXNpYmxlKSB7Ci0gICAgICAgIGNvbnN0IFNWR1JlbmRlclN0eWxlKiBzdmdTdHlsZSA9
IHN0eWxlKCktPnN2Z1N0eWxlKCk7Ci0gICAgICAgIFdpbmRSdWxlIGZpbGxSdWxlID0gc3ZnU3R5
bGUtPmZpbGxSdWxlKCk7Ci0gICAgICAgIGlmIChyZXF1ZXN0LnN2Z0NsaXBDb250ZW50KCkpCi0g
ICAgICAgICAgICBmaWxsUnVsZSA9IHN2Z1N0eWxlLT5jbGlwUnVsZSgpOwotICAgICAgICBpZiAo
KGhpdFJ1bGVzLmNhbkhpdFN0cm9rZSAmJiAoc3ZnU3R5bGUtPmhhc1N0cm9rZSgpIHx8ICFoaXRS
dWxlcy5yZXF1aXJlU3Ryb2tlKSAmJiBzdHJva2VDb250YWlucyhsb2NhbFBvaW50LCBoaXRSdWxl
cy5yZXF1aXJlU3Ryb2tlKSkKLSAgICAgICAgICAgIHx8IChoaXRSdWxlcy5jYW5IaXRGaWxsICYm
IChzdmdTdHlsZS0+aGFzRmlsbCgpIHx8ICFoaXRSdWxlcy5yZXF1aXJlRmlsbCkgJiYgZmlsbENv
bnRhaW5zKGxvY2FsUG9pbnQsIGhpdFJ1bGVzLnJlcXVpcmVGaWxsLCBmaWxsUnVsZSkpKSB7Ci0g
ICAgICAgICAgICB1cGRhdGVIaXRUZXN0UmVzdWx0KHJlc3VsdCwgcm91bmRlZExheW91dFBvaW50
KGxvY2FsUG9pbnQpKTsKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICB9Ci0gICAg
fQotICAgIHJldHVybiBmYWxzZTsKLX0KLQotRmxvYXRSZWN0IFJlbmRlclNWR1BhdGg6OmNhbGN1
bGF0ZU1hcmtlckJvdW5kc0lmTmVlZGVkKCkKLXsKLSAgICBTVkdFbGVtZW50KiBzdmdFbGVtZW50
ID0gc3RhdGljX2Nhc3Q8U1ZHRWxlbWVudCo+KG5vZGUoKSk7Ci0gICAgQVNTRVJUKHN2Z0VsZW1l
bnQgJiYgc3ZnRWxlbWVudC0+ZG9jdW1lbnQoKSk7Ci0gICAgaWYgKCFzdmdFbGVtZW50LT5pc1N0
eWxlZCgpKQotICAgICAgICByZXR1cm4gRmxvYXRSZWN0KCk7Ci0KLSAgICBTVkdTdHlsZWRFbGVt
ZW50KiBzdHlsZWRFbGVtZW50ID0gc3RhdGljX2Nhc3Q8U1ZHU3R5bGVkRWxlbWVudCo+KHN2Z0Vs
ZW1lbnQpOwotICAgIGlmICghc3R5bGVkRWxlbWVudC0+c3VwcG9ydHNNYXJrZXJzKCkpCi0gICAg
ICAgIHJldHVybiBGbG9hdFJlY3QoKTsKLQotICAgIGNvbnN0IFNWR1JlbmRlclN0eWxlKiBzdmdT
dHlsZSA9IHN0eWxlKCktPnN2Z1N0eWxlKCk7Ci0gICAgQVNTRVJUKHN2Z1N0eWxlLT5oYXNNYXJr
ZXJzKCkpOwotCi0gICAgU1ZHUmVzb3VyY2VzKiByZXNvdXJjZXMgPSBTVkdSZXNvdXJjZXNDYWNo
ZTo6Y2FjaGVkUmVzb3VyY2VzRm9yUmVuZGVyT2JqZWN0KHRoaXMpOwotICAgIGlmICghcmVzb3Vy
Y2VzKQotICAgICAgICByZXR1cm4gRmxvYXRSZWN0KCk7Ci0KLSAgICBSZW5kZXJTVkdSZXNvdXJj
ZU1hcmtlciogbWFya2VyU3RhcnQgPSByZXNvdXJjZXMtPm1hcmtlclN0YXJ0KCk7Ci0gICAgUmVu
ZGVyU1ZHUmVzb3VyY2VNYXJrZXIqIG1hcmtlck1pZCA9IHJlc291cmNlcy0+bWFya2VyTWlkKCk7
Ci0gICAgUmVuZGVyU1ZHUmVzb3VyY2VNYXJrZXIqIG1hcmtlckVuZCA9IHJlc291cmNlcy0+bWFy
a2VyRW5kKCk7Ci0gICAgaWYgKCFtYXJrZXJTdGFydCAmJiAhbWFya2VyTWlkICYmICFtYXJrZXJF
bmQpCi0gICAgICAgIHJldHVybiBGbG9hdFJlY3QoKTsKLQotICAgIHJldHVybiBtX21hcmtlckxh
eW91dEluZm8uY2FsY3VsYXRlQm91bmRhcmllcyhtYXJrZXJTdGFydCwgbWFya2VyTWlkLCBtYXJr
ZXJFbmQsIHN2Z1N0eWxlLT5zdHJva2VXaWR0aCgpLnZhbHVlKHN2Z0VsZW1lbnQpLCBtX3BhdGgp
OwotfQotCi12b2lkIFJlbmRlclNWR1BhdGg6OnVwZGF0ZUNhY2hlZEJvdW5kYXJpZXMoKQotewot
ICAgIGlmIChtX3BhdGguaXNFbXB0eSgpKSB7Ci0gICAgICAgIG1fZmlsbEJvdW5kaW5nQm94ID0g
RmxvYXRSZWN0KCk7Ci0gICAgICAgIG1fc3Ryb2tlQW5kTWFya2VyQm91bmRpbmdCb3ggPSBGbG9h
dFJlY3QoKTsKLSAgICAgICAgbV9yZXBhaW50Qm91bmRpbmdCb3ggPSBGbG9hdFJlY3QoKTsKLSAg
ICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIC8vIENhY2hlIF91bmNsaXBwZWRfIGZpbGwgYm91
bmRpbmcgYm94LCB1c2VkIGZvciBjYWxjdWxhdGlvbnMgaW4gcmVzb3VyY2VzCi0gICAgbV9maWxs
Qm91bmRpbmdCb3ggPSBtX3BhdGguYm91bmRpbmdSZWN0KCk7Ci0KLSAgICAvLyBTcGVjKDExLjQp
OiBBbnkgemVybyBsZW5ndGggc3VicGF0aCBzaGFsbCBub3QgYmUgc3Ryb2tlZCBpZiB0aGUg4oCY
c3Ryb2tlLWxpbmVjYXDigJkgcHJvcGVydHkgaGFzIGEgdmFsdWUgb2YgYnV0dAotICAgIC8vIGJ1
dCBzaGFsbCBiZSBzdHJva2VkIGlmIHRoZSDigJhzdHJva2UtbGluZWNhcOKAmSBwcm9wZXJ0eSBo
YXMgYSB2YWx1ZSBvZiByb3VuZCBvciBzcXVhcmUKLSAgICBpZiAoc2hvdWxkU3Ryb2tlWmVyb0xl
bmd0aFN1YnBhdGgoKSkgewotICAgICAgICBtX3N0cm9rZUFuZE1hcmtlckJvdW5kaW5nQm94ID0g
emVyb0xlbmd0aFN1YnBhdGhSZWN0KCk7Ci0gICAgICAgIC8vIENhY2hlIHNtYWxsZXN0IHBvc3Np
YmxlIHJlcGFpbnQgcmVjdGFuZ2xlCi0gICAgICAgIG1fcmVwYWludEJvdW5kaW5nQm94ID0gbV9z
dHJva2VBbmRNYXJrZXJCb3VuZGluZ0JveDsKLSAgICAgICAgU1ZHUmVuZGVyU3VwcG9ydDo6aW50
ZXJzZWN0UmVwYWludFJlY3RXaXRoUmVzb3VyY2VzKHRoaXMsIG1fcmVwYWludEJvdW5kaW5nQm94
KTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIC8vIENhY2hlIF91bmNsaXBwZWRfIHN0
cm9rZSBib3VuZGluZyBib3gsIHVzZWQgZm9yIGNhbGN1bGF0aW9ucyBpbiByZXNvdXJjZXMgKGlu
Y2x1ZGVzIG1hcmtlciBib3VuZGFyaWVzKQotICAgIG1fc3Ryb2tlQW5kTWFya2VyQm91bmRpbmdC
b3ggPSBtX2ZpbGxCb3VuZGluZ0JveDsKLQotICAgIGNvbnN0IFNWR1JlbmRlclN0eWxlKiBzdmdT
dHlsZSA9IHN0eWxlKCktPnN2Z1N0eWxlKCk7Ci0gICAgaWYgKHN2Z1N0eWxlLT5oYXNTdHJva2Uo
KSkgewotICAgICAgICBCb3VuZGluZ1JlY3RTdHJva2VTdHlsZUFwcGxpZXIgc3Ryb2tlU3R5bGUo
dGhpcywgc3R5bGUoKSk7Ci0gICAgICAgIG1fc3Ryb2tlQW5kTWFya2VyQm91bmRpbmdCb3gudW5p
dGUobV9wYXRoLnN0cm9rZUJvdW5kaW5nUmVjdCgmc3Ryb2tlU3R5bGUpKTsKLSAgICB9Ci0KLSAg
ICBpZiAoc3ZnU3R5bGUtPmhhc01hcmtlcnMoKSkgeworICAgIGlmIChzdHlsZSgpLT5zdmdTdHls
ZSgpLT5oYXNNYXJrZXJzKCkpIHsKICAgICAgICAgRmxvYXRSZWN0IG1hcmtlckJvdW5kcyA9IGNh
bGN1bGF0ZU1hcmtlckJvdW5kc0lmTmVlZGVkKCk7Ci0gICAgICAgIGlmICghbWFya2VyQm91bmRz
LmlzRW1wdHkoKSkKLSAgICAgICAgICAgIG1fc3Ryb2tlQW5kTWFya2VyQm91bmRpbmdCb3gudW5p
dGUobWFya2VyQm91bmRzKTsKKyAgICAgICAgaWYgKCFtYXJrZXJCb3VuZHMuaXNFbXB0eSgpKSB7
CisgICAgICAgICAgICBGbG9hdFJlY3Qgc3Ryb2tlUmVjdChzdHJva2VCb3VuZGluZ0JveCgpKTsK
KyAgICAgICAgICAgIHN0cm9rZVJlY3QudW5pdGUobWFya2VyQm91bmRzKTsKKyAgICAgICAgICAg
IHNldFN0cm9rZUFuZE1hcmtlckJvdW5kaW5nQm94KHN0cm9rZVJlY3QpOworICAgICAgICB9CiAg
ICAgfQotCi0gICAgLy8gQ2FjaGUgc21hbGxlc3QgcG9zc2libGUgcmVwYWludCByZWN0YW5nbGUK
LSAgICBtX3JlcGFpbnRCb3VuZGluZ0JveCA9IG1fc3Ryb2tlQW5kTWFya2VyQm91bmRpbmdCb3g7
Ci0gICAgU1ZHUmVuZGVyU3VwcG9ydDo6aW50ZXJzZWN0UmVwYWludFJlY3RXaXRoUmVzb3VyY2Vz
KHRoaXMsIG1fcmVwYWludEJvdW5kaW5nQm94KTsKIH0KIAogfQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdQYXRoLmggYi9Tb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1BhdGguaAppbmRleCA5OGU2MDhkLi42MGZlZTk4IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1BhdGguaAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1BhdGguaApAQCAtNCw2ICs0
LDggQEAKICAqIENvcHlyaWdodCAoQykgMjAwNSBFcmljIFNlaWRlbCA8ZXJpY0B3ZWJraXQub3Jn
PgogICogQ29weXJpZ2h0IChDKSAyMDA2IEFwcGxlIENvbXB1dGVyLCBJbmMKICAqIENvcHlyaWdo
dCAoQykgMjAwOSBHb29nbGUsIEluYy4KKyAqIENvcHlyaWdodCAoQykgMjAxMSBSZW5hdGEgSG9k
b3ZhbiA8cmVuaUB3ZWJraXQub3JnPgorICogQ29weXJpZ2h0IChDKSAyMDExIFVuaXZlcnNpdHkg
b2YgU3plZ2VkCiAgKgogICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4g
cmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0
aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKQEAgLTI1LDg2ICsyNywyMiBAQAogI2RlZmlu
ZSBSZW5kZXJTVkdQYXRoX2gKIAogI2lmIEVOQUJMRShTVkcpCi0jaW5jbHVkZSAiQWZmaW5lVHJh
bnNmb3JtLmgiCi0jaW5jbHVkZSAiRmxvYXRSZWN0LmgiCi0jaW5jbHVkZSAiUmVuZGVyU1ZHTW9k
ZWxPYmplY3QuaCIKLSNpbmNsdWRlICJTVkdNYXJrZXJMYXlvdXRJbmZvLmgiCisjaW5jbHVkZSAi
UmVuZGVyU1ZHU2hhcGUuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1jbGFzcyBGbG9hdFBv
aW50OwotY2xhc3MgR3JhcGhpY3NDb250ZXh0U3RhdGVTYXZlcjsKLWNsYXNzIFJlbmRlclNWR0Nv
bnRhaW5lcjsKLWNsYXNzIFNWR1N0eWxlZFRyYW5zZm9ybWFibGVFbGVtZW50OwotCi1jbGFzcyBS
ZW5kZXJTVkdQYXRoIDogcHVibGljIFJlbmRlclNWR01vZGVsT2JqZWN0IHsKK2NsYXNzIFJlbmRl
clNWR1BhdGggOiBwdWJsaWMgUmVuZGVyU1ZHU2hhcGUgewogcHVibGljOgotICAgIGV4cGxpY2l0
IFJlbmRlclNWR1BhdGgoU1ZHU3R5bGVkVHJhbnNmb3JtYWJsZUVsZW1lbnQqKTsKKyAgICBSZW5k
ZXJTVkdQYXRoKFNWR1N0eWxlZFRyYW5zZm9ybWFibGVFbGVtZW50Kik7CiAgICAgdmlydHVhbCB+
UmVuZGVyU1ZHUGF0aCgpOwogCi0gICAgY29uc3QgUGF0aCYgcGF0aCgpIGNvbnN0IHsgcmV0dXJu
IG1fcGF0aDsgfQotICAgIHZvaWQgc2V0TmVlZHNQYXRoVXBkYXRlKCkgeyBtX25lZWRzUGF0aFVw
ZGF0ZSA9IHRydWU7IH0KLSAgICB2aXJ0dWFsIHZvaWQgc2V0TmVlZHNCb3VuZGFyaWVzVXBkYXRl
KCkgeyBtX25lZWRzQm91bmRhcmllc1VwZGF0ZSA9IHRydWU7IH0KLSAgICB2aXJ0dWFsIHZvaWQg
c2V0TmVlZHNUcmFuc2Zvcm1VcGRhdGUoKSB7IG1fbmVlZHNUcmFuc2Zvcm1VcGRhdGUgPSB0cnVl
OyB9Ci0KIHByaXZhdGU6Ci0gICAgLy8gSGl0LWRldGVjdGlvbiBzZXBlcmF0ZWQgZm9yIHRoZSBm
aWxsIGFuZCB0aGUgc3Ryb2tlCi0gICAgYm9vbCBmaWxsQ29udGFpbnMoY29uc3QgRmxvYXRQb2lu
dCYsIGJvb2wgcmVxdWlyZXNGaWxsID0gdHJ1ZSwgV2luZFJ1bGUgZmlsbFJ1bGUgPSBSVUxFX05P
TlpFUk8pOwotICAgIGJvb2wgc3Ryb2tlQ29udGFpbnMoY29uc3QgRmxvYXRQb2ludCYsIGJvb2wg
cmVxdWlyZXNTdHJva2UgPSB0cnVlKTsKLQotICAgIHZpcnR1YWwgRmxvYXRSZWN0IG9iamVjdEJv
dW5kaW5nQm94KCkgY29uc3QgeyByZXR1cm4gbV9maWxsQm91bmRpbmdCb3g7IH0KLSAgICB2aXJ0
dWFsIEZsb2F0UmVjdCBzdHJva2VCb3VuZGluZ0JveCgpIGNvbnN0IHsgcmV0dXJuIG1fc3Ryb2tl
QW5kTWFya2VyQm91bmRpbmdCb3g7IH0KLSAgICB2aXJ0dWFsIEZsb2F0UmVjdCByZXBhaW50UmVj
dEluTG9jYWxDb29yZGluYXRlcygpIGNvbnN0IHsgcmV0dXJuIG1fcmVwYWludEJvdW5kaW5nQm94
OyB9Ci0gICAgdmlydHVhbCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIGxvY2FsVG9QYXJlbnRUcmFu
c2Zvcm0oKSBjb25zdCB7IHJldHVybiBtX2xvY2FsVHJhbnNmb3JtOyB9Ci0KICAgICB2aXJ0dWFs
IGJvb2wgaXNTVkdQYXRoKCkgY29uc3QgeyByZXR1cm4gdHJ1ZTsgfQogICAgIHZpcnR1YWwgY29u
c3QgY2hhciogcmVuZGVyTmFtZSgpIGNvbnN0IHsgcmV0dXJuICJSZW5kZXJTVkdQYXRoIjsgfQog
Ci0gICAgdmlydHVhbCB2b2lkIGxheW91dCgpOwotICAgIHZpcnR1YWwgdm9pZCBwYWludChQYWlu
dEluZm8mLCBjb25zdCBMYXlvdXRQb2ludCYpOwotICAgIHZpcnR1YWwgdm9pZCBhZGRGb2N1c1Jp
bmdSZWN0cyhWZWN0b3I8TGF5b3V0UmVjdD4mLCBjb25zdCBMYXlvdXRQb2ludCYpOwotCi0gICAg
dmlydHVhbCBib29sIG5vZGVBdEZsb2F0UG9pbnQoY29uc3QgSGl0VGVzdFJlcXVlc3QmLCBIaXRU
ZXN0UmVzdWx0JiwgY29uc3QgRmxvYXRQb2ludCYgcG9pbnRJblBhcmVudCwgSGl0VGVzdEFjdGlv
bik7Ci0KLSAgICBGbG9hdFJlY3QgY2FsY3VsYXRlTWFya2VyQm91bmRzSWZOZWVkZWQoKTsKLSAg
ICB2b2lkIHVwZGF0ZUNhY2hlZEJvdW5kYXJpZXMoKTsKLQotICAgIHZvaWQgc2V0dXBTcXVhcmVD
YXBQYXRoKFBhdGgqJiB1c2VQYXRoLCBpbnQmIGFwcGx5TW9kZSk7Ci0gICAgYm9vbCBzZXR1cE5v
blNjYWxpbmdTdHJva2VQYXRoKFBhdGgqJiB1c2VQYXRoLCBHcmFwaGljc0NvbnRleHRTdGF0ZVNh
dmVyJik7Ci0gICAgYm9vbCBzaG91bGRTdHJva2VaZXJvTGVuZ3RoU3VicGF0aCgpIGNvbnN0Owot
ICAgIEZsb2F0UmVjdCB6ZXJvTGVuZ3RoU3VicGF0aFJlY3QoKSBjb25zdDsKLQotcHJpdmF0ZToK
LSAgICB2aXJ0dWFsIEFmZmluZVRyYW5zZm9ybSBsb2NhbFRyYW5zZm9ybSgpIGNvbnN0IHsgcmV0
dXJuIG1fbG9jYWxUcmFuc2Zvcm07IH0KLSAgICB2b2lkIGZpbGxBbmRTdHJva2VQYXRoKEdyYXBo
aWNzQ29udGV4dCopOwotCi0gICAgYm9vbCBtX25lZWRzQm91bmRhcmllc1VwZGF0ZSA6IDE7Ci0g
ICAgYm9vbCBtX25lZWRzUGF0aFVwZGF0ZSA6IDE7Ci0gICAgYm9vbCBtX25lZWRzVHJhbnNmb3Jt
VXBkYXRlIDogMTsKLQotICAgIG11dGFibGUgUGF0aCBtX3BhdGg7Ci0gICAgRmxvYXRSZWN0IG1f
ZmlsbEJvdW5kaW5nQm94OwotICAgIEZsb2F0UmVjdCBtX3N0cm9rZUFuZE1hcmtlckJvdW5kaW5n
Qm94OwotICAgIEZsb2F0UmVjdCBtX3JlcGFpbnRCb3VuZGluZ0JveDsKLSAgICBTVkdNYXJrZXJM
YXlvdXRJbmZvIG1fbWFya2VyTGF5b3V0SW5mbzsKLSAgICBBZmZpbmVUcmFuc2Zvcm0gbV9sb2Nh
bFRyYW5zZm9ybTsKKyAgICB2aXJ0dWFsIHZvaWQgaW5mbGF0ZVdpdGhNYXJrZXJCb3VuZHMoKTsK
IH07CiAKLWlubGluZSBSZW5kZXJTVkdQYXRoKiB0b1JlbmRlclNWR1BhdGgoUmVuZGVyT2JqZWN0
KiBvYmplY3QpCi17Ci0gICAgQVNTRVJUKCFvYmplY3QgfHwgb2JqZWN0LT5pc1NWR1BhdGgoKSk7
Ci0gICAgcmV0dXJuIHN0YXRpY19jYXN0PFJlbmRlclNWR1BhdGgqPihvYmplY3QpOwotfQotCi1p
bmxpbmUgY29uc3QgUmVuZGVyU1ZHUGF0aCogdG9SZW5kZXJTVkdQYXRoKGNvbnN0IFJlbmRlck9i
amVjdCogb2JqZWN0KQotewotICAgIEFTU0VSVCghb2JqZWN0IHx8IG9iamVjdC0+aXNTVkdQYXRo
KCkpOwotICAgIHJldHVybiBzdGF0aWNfY2FzdDxjb25zdCBSZW5kZXJTVkdQYXRoKj4ob2JqZWN0
KTsKLX0KLQotLy8gVGhpcyB3aWxsIGNhdGNoIGFueW9uZSBkb2luZyBhbiB1bm5lY2Vzc2FyeSBj
YXN0Lgotdm9pZCB0b1JlbmRlclNWR1BhdGgoY29uc3QgUmVuZGVyU1ZHUGF0aCopOwotCiB9CiAK
ICNlbmRpZiAvLyBFTkFCTEUoU1ZHKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL3N2Zy9SZW5kZXJTVkdSZWN0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcv
UmVuZGVyU1ZHUmVjdC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTdh
YzZmMQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVu
ZGVyU1ZHUmVjdC5jcHAKQEAgLTAsMCArMSwxMjQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTEgVW5pdmVyc2l0eSBvZiBTemVnZWQKKyAqIENvcHlyaWdodCAoQykgMjAxMSBSZW5hdGEgSG9k
b3ZhbiAocmVuaUB3ZWJraXQub3JnKQorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFVOSVZFUlNJVFkgT0YgU1pFR0VE
IGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVU5JVkVSU0lUWSBPRiBTWkVHRUQg
T1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisj
aW5jbHVkZSAiY29uZmlnLmgiCisKKyNpZiBFTkFCTEUoU1ZHKQorI2luY2x1ZGUgIlJlbmRlclNW
R1JlY3QuaCIKKworI2luY2x1ZGUgIlNWR05hbWVzLmgiCisjaW5jbHVkZSAiU1ZHUmVjdEVsZW1l
bnQuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitSZW5kZXJTVkdSZWN0OjpSZW5kZXJTVkdS
ZWN0KFNWR1N0eWxlZFRyYW5zZm9ybWFibGVFbGVtZW50KiBub2RlKQorICAgIDogUmVuZGVyU1ZH
U2hhcGUobm9kZSkKK3sKK30KKworUmVuZGVyU1ZHUmVjdDo6flJlbmRlclNWR1JlY3QoKQorewor
fQorCit2b2lkIFJlbmRlclNWR1JlY3Q6OmNyZWF0ZVNoYXBlKCkKK3sKKyAgICAvLyBCZWZvcmUg
Y3JlYXRpbmcgYSBuZXcgb2JqZWN0IHdlIG5lZWQgdG8gY2xlYXIgdGhlIGNhY2hlZCBib3VuZGlu
ZyBib3gKKyAgICAvLyB0byBhdm9pZCB1c2luZyBnYXJiYWdlLgorICAgIG1fYm91bmRpbmdCb3gg
PSBGbG9hdFJlY3QoKTsKKyAgICBTVkdSZWN0RWxlbWVudCogcmVjdCA9IHN0YXRpY19jYXN0PFNW
R1JlY3RFbGVtZW50Kj4obm9kZSgpKTsKKyAgICBBU1NFUlQocmVjdCk7CisKKyAgICAvLyBGYWxs
YmFjayB0byBSZW5kZXJTVkdTaGFwZSBpZiByZWN0IGhhcyByb3VuZGVkIGNvcm5lcnMuCisgICAg
aWYgKHJlY3QtPmhhc0F0dHJpYnV0ZShTVkdOYW1lczo6cnhBdHRyKSB8fCByZWN0LT5oYXNBdHRy
aWJ1dGUoU1ZHTmFtZXM6OnJ5QXR0cikpIHsKKyAgICAgICBSZW5kZXJTVkdTaGFwZTo6Y3JlYXRl
U2hhcGUoKTsKKyAgICAgICBzZXRJc1BhaW50aW5nRmFsbGJhY2sodHJ1ZSk7CisgICAgICAgcmV0
dXJuOworICAgIH0KKworICAgIEZsb2F0U2l6ZSBib3VuZGluZ0JveFNpemUocmVjdC0+d2lkdGgo
KS52YWx1ZShyZWN0KSwgcmVjdC0+aGVpZ2h0KCkudmFsdWUocmVjdCkpOworICAgIGlmIChib3Vu
ZGluZ0JveFNpemUuaXNFbXB0eSgpKQorICAgICAgICByZXR1cm47CisKKyAgICBtX2JvdW5kaW5n
Qm94ID0gRmxvYXRSZWN0KEZsb2F0UG9pbnQocmVjdC0+eCgpLnZhbHVlKHJlY3QpLCByZWN0LT55
KCkudmFsdWUocmVjdCkpLCBib3VuZGluZ0JveFNpemUpOworCisgICAgLy8gVG8gZGVjaWRlIGlm
IHRoZSBzdHJva2UgY29udGFpbnMgYSBwb2ludCB3ZSBjcmVhdGUgdHdvIHJlY3RzIHdoaWNoIHJl
cHJlc2VudCB0aGUgaW5uZXIgYW5kCisgICAgLy8gdGhlIG91dGVyIHN0cm9rZSBib3JkZXJzLiBB
IHN0cm9rZSBjb250YWlucyB0aGUgcG9pbnQsIGlmIHRoZSBwb2ludCBpcyBiZXR3ZWVuIHRoZW0u
CisgICAgZmxvYXQgc3Ryb2tlV2lkdGggPSB0aGlzLT5zdHJva2VXaWR0aCgpOworICAgIG1faW5u
ZXJTdHJva2VSZWN0ID0gbV9ib3VuZGluZ0JveDsKKyAgICBtX291dGVyU3Ryb2tlUmVjdCA9IG1f
Ym91bmRpbmdCb3g7CisgICAgbV9pbm5lclN0cm9rZVJlY3QuaW5mbGF0ZSgtc3Ryb2tlV2lkdGgg
LyAyKTsKKyAgICBtX291dGVyU3Ryb2tlUmVjdC5pbmZsYXRlKHN0cm9rZVdpZHRoIC8gMik7Cit9
CisKKworRmxvYXRSZWN0IFJlbmRlclNWR1JlY3Q6Om9iamVjdEJvdW5kaW5nQm94KCkgY29uc3QK
K3sKKyAgICBpZiAoaXNQYWludGluZ0ZhbGxiYWNrKCkpCisgICAgICAgIHJldHVybiBSZW5kZXJT
VkdTaGFwZTo6b2JqZWN0Qm91bmRpbmdCb3goKTsKKyAgICByZXR1cm4gbV9ib3VuZGluZ0JveDsK
K30KKworRmxvYXRSZWN0IFJlbmRlclNWR1JlY3Q6OnN0cm9rZUJvdW5kaW5nQm94KCkgY29uc3QK
K3sKKyAgICBpZiAoaXNQYWludGluZ0ZhbGxiYWNrKCkgJiYgIXN0eWxlKCktPnN2Z1N0eWxlKCkt
PnN0cm9rZURhc2hBcnJheSgpLmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJuIFJlbmRlclNWR1No
YXBlOjpzdHJva2VCb3VuZGluZ0JveCgpOworICAgIHJldHVybiBtX291dGVyU3Ryb2tlUmVjdDsK
K30KKwordm9pZCBSZW5kZXJTVkdSZWN0OjpmaWxsU2hhcGUoR3JhcGhpY3NDb250ZXh0KiBjb250
ZXh0KSBjb25zdAoreworICAgIGlmICghaXNQYWludGluZ0ZhbGxiYWNrKCkpIHsKKyAgICAgICAg
Y29udGV4dC0+ZmlsbFJlY3QobV9ib3VuZGluZ0JveCk7CisgICAgICAgIHJldHVybjsKKyAgICB9
CisgICAgUmVuZGVyU1ZHU2hhcGU6OmZpbGxTaGFwZShjb250ZXh0KTsKK30KKwordm9pZCBSZW5k
ZXJTVkdSZWN0OjpzdHJva2VTaGFwZShHcmFwaGljc0NvbnRleHQqIGNvbnRleHQpIGNvbnN0Cit7
CisgICAgaWYgKCFpc1BhaW50aW5nRmFsbGJhY2soKSkgeworICAgICAgICBjb250ZXh0LT5zdHJv
a2VSZWN0KG1fYm91bmRpbmdCb3gsIHN0cm9rZVdpZHRoKCkpOworICAgICAgICByZXR1cm47Cisg
ICAgfQorICAgIFJlbmRlclNWR1NoYXBlOjpzdHJva2VTaGFwZShjb250ZXh0KTsKK30KKworYm9v
bCBSZW5kZXJTVkdSZWN0OjpzaGFwZURlcGVuZGVudFN0cm9rZUNvbnRhaW5zKGNvbnN0IEZsb2F0
UG9pbnQmIHBvaW50KSBjb25zdAoreworICAgIHJldHVybiAhbV9pbm5lclN0cm9rZVJlY3QuY29u
dGFpbnMocG9pbnQsIEZsb2F0UmVjdDo6Q29udGFpbnNSZWN0KTsKK30KKworYm9vbCBSZW5kZXJT
VkdSZWN0OjpzaGFwZURlcGVuZGVudEZpbGxDb250YWlucyhjb25zdCBGbG9hdFBvaW50JiBwb2lu
dCwgY29uc3QgV2luZFJ1bGUgZmlsbFJ1bGUpIGNvbnN0Cit7CisgICAgaWYgKGlzUGFpbnRpbmdG
YWxsYmFjaygpKQorICAgICAgICByZXR1cm4gUmVuZGVyU1ZHU2hhcGU6OnNoYXBlRGVwZW5kZW50
RmlsbENvbnRhaW5zKHBvaW50LCBmaWxsUnVsZSk7CisgICAgcmV0dXJuIG1fYm91bmRpbmdCb3gu
Y29udGFpbnMocG9pbnQueCgpLCBwb2ludC55KCkpOworfQorCit9CisKKyNlbmRpZiAvLyBFTkFC
TEUoU1ZHKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJT
VkdSZWN0LmggYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1JlY3QuaApu
ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40YTg2ODE1Ci0tLSAvZGV2L251bGwK
KysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZWN0LmgKQEAgLTAs
MCArMSw2MyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMSBVbml2ZXJzaXR5IG9mIFN6ZWdl
ZAorICogQ29weXJpZ2h0IChDKSAyMDExIFJlbmF0YSBIb2RvdmFuIChyZW5pQHdlYmtpdC5vcmcp
CisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgVU5JVkVSU0lUWSBPRiBTWkVHRUQgYGBBUyBJUycnIEFORCBBTlkKKyAq
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBO
TyBFVkVOVCBTSEFMTCBVTklWRVJTSVRZIE9GIFNaRUdFRCBPUgorICogQ09OVFJJQlVUT1JTIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisg
KiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgUmVuZGVyU1ZHUmVjdF9o
CisjZGVmaW5lIFJlbmRlclNWR1JlY3RfaAorCisjaWYgRU5BQkxFKFNWRykKKyNpbmNsdWRlICJS
ZW5kZXJTVkdQYXRoLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgUmVuZGVyU1ZH
UmVjdCA6IHB1YmxpYyBSZW5kZXJTVkdTaGFwZSB7CitwdWJsaWM6CisgICAgZXhwbGljaXQgUmVu
ZGVyU1ZHUmVjdChTVkdTdHlsZWRUcmFuc2Zvcm1hYmxlRWxlbWVudCopOworICAgIHZpcnR1YWwg
flJlbmRlclNWR1JlY3QoKTsKKworcHJpdmF0ZToKKyAgICB2aXJ0dWFsIGJvb2wgaXNTVkdSZWN0
KCkgY29uc3QgeyByZXR1cm4gdHJ1ZTsgfQorICAgIHZpcnR1YWwgY29uc3QgY2hhciogcmVuZGVy
TmFtZSgpIGNvbnN0IHsgcmV0dXJuICJSZW5kZXJTVkdSZWN0IjsgfQorCisgICAgdmlydHVhbCB2
b2lkIGNyZWF0ZVNoYXBlKCk7CisgICAgdmlydHVhbCBib29sIGlzRW1wdHkoKSBjb25zdCB7IHJl
dHVybiBoYXNQYXRoKCkgPyBSZW5kZXJTVkdTaGFwZTo6aXNFbXB0eSgpIDogbV9ib3VuZGluZ0Jv
eC5pc0VtcHR5KCk7IH07CisgICAgdmlydHVhbCB2b2lkIGZpbGxTaGFwZShHcmFwaGljc0NvbnRl
eHQqKSBjb25zdDsKKyAgICB2aXJ0dWFsIHZvaWQgc3Ryb2tlU2hhcGUoR3JhcGhpY3NDb250ZXh0
KikgY29uc3Q7CisgICAgdmlydHVhbCBGbG9hdFJlY3Qgb2JqZWN0Qm91bmRpbmdCb3goKSBjb25z
dDsKKyAgICB2aXJ0dWFsIEZsb2F0UmVjdCBzdHJva2VCb3VuZGluZ0JveCgpIGNvbnN0OworICAg
IHZpcnR1YWwgYm9vbCBzaGFwZURlcGVuZGVudFN0cm9rZUNvbnRhaW5zKGNvbnN0IEZsb2F0UG9p
bnQmKSBjb25zdDsKKyAgICB2aXJ0dWFsIGJvb2wgc2hhcGVEZXBlbmRlbnRGaWxsQ29udGFpbnMo
Y29uc3QgRmxvYXRQb2ludCYsIGNvbnN0IFdpbmRSdWxlKSBjb25zdDsKKworcHJpdmF0ZToKKyAg
ICBGbG9hdFJlY3QgbV9ib3VuZGluZ0JveDsKKyAgICBGbG9hdFJlY3QgbV9pbm5lclN0cm9rZVJl
Y3Q7CisgICAgRmxvYXRSZWN0IG1fb3V0ZXJTdHJva2VSZWN0OworfTsKKworfQorCisjZW5kaWYg
Ly8gRU5BQkxFKFNWRykKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJjZS5oIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2
Zy9SZW5kZXJTVkdSZXNvdXJjZS5oCmluZGV4IGE2N2JhNzMuLmUwMjAxNTQgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2UuaAorKysgYi9T
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291cmNlLmgKQEAgLTIxLDYg
KzIxLDcgQEAKICNkZWZpbmUgUmVuZGVyU1ZHUmVzb3VyY2VfaAogCiAjaWYgRU5BQkxFKFNWRykK
KyNpbmNsdWRlICJSZW5kZXJTVkdTaGFwZS5oIgogI2luY2x1ZGUgIlJlbmRlclN0eWxlQ29uc3Rh
bnRzLmgiCiAjaW5jbHVkZSAiU1ZHRG9jdW1lbnRFeHRlbnNpb25zLmgiCiAKQEAgLTYxLDcgKzYy
LDcgQEAgcHVibGljOgogICAgIHZpcnR1YWwgdm9pZCByZW1vdmVDbGllbnRGcm9tQ2FjaGUoUmVu
ZGVyT2JqZWN0KiwgYm9vbCBtYXJrRm9ySW52YWxpZGF0aW9uID0gdHJ1ZSkgPSAwOwogCiAgICAg
dmlydHVhbCBib29sIGFwcGx5UmVzb3VyY2UoUmVuZGVyT2JqZWN0KiwgUmVuZGVyU3R5bGUqLCBH
cmFwaGljc0NvbnRleHQqJiwgdW5zaWduZWQgc2hvcnQgcmVzb3VyY2VNb2RlKSA9IDA7Ci0gICAg
dmlydHVhbCB2b2lkIHBvc3RBcHBseVJlc291cmNlKFJlbmRlck9iamVjdCosIEdyYXBoaWNzQ29u
dGV4dComLCB1bnNpZ25lZCBzaG9ydCwgY29uc3QgUGF0aCopIHsgfQorICAgIHZpcnR1YWwgdm9p
ZCBwb3N0QXBwbHlSZXNvdXJjZShSZW5kZXJPYmplY3QqLCBHcmFwaGljc0NvbnRleHQqJiwgdW5z
aWduZWQgc2hvcnQsIGNvbnN0IFBhdGgqLCBjb25zdCBSZW5kZXJTVkdTaGFwZSopIHsgfQogICAg
IHZpcnR1YWwgRmxvYXRSZWN0IHJlc291cmNlQm91bmRpbmdCb3goUmVuZGVyT2JqZWN0KikgPSAw
OwogCiAgICAgdmlydHVhbCBSZW5kZXJTVkdSZXNvdXJjZVR5cGUgcmVzb3VyY2VUeXBlKCkgY29u
c3QgPSAwOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJT
VkdSZXNvdXJjZUNsaXBwZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5k
ZXJTVkdSZXNvdXJjZUNsaXBwZXIuY3BwCmluZGV4IDIzOGMwOTYuLjFkODIxMjEgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VDbGlwcGVy
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291cmNl
Q2xpcHBlci5jcHAKQEAgLTI0Miw3ICsyNDIsNyBAQCBib29sIFJlbmRlclNWR1Jlc291cmNlQ2xp
cHBlcjo6ZHJhd0NvbnRlbnRJbnRvTWFza0ltYWdlKENsaXBwZXJEYXRhKiBjbGlwcGVyRGF0YQog
ICAgICAgICB9CiAKICAgICAgICAgLy8gT25seSBzaGFwZXMsIHBhdGhzIGFuZCB0ZXh0cyBhcmUg
YWxsb3dlZCBmb3IgY2xpcHBpbmcuCi0gICAgICAgIGlmICghcmVuZGVyZXItPmlzU1ZHUGF0aCgp
ICYmICFyZW5kZXJlci0+aXNTVkdUZXh0KCkpCisgICAgICAgIGlmICghcmVuZGVyZXItPmlzU1ZH
U2hhcGUoKSAmJiAhcmVuZGVyZXItPmlzU1ZHVGV4dCgpKQogICAgICAgICAgICAgY29udGludWU7
CiAKICAgICAgICAgLy8gU2F2ZSB0aGUgb2xkIFJlbmRlclN0eWxlIG9mIHRoZSBjdXJyZW50IG9i
amVjdCBmb3IgcmVzdG9yaW5nIGFmdGVyIGRyYXdpbmcKQEAgLTI4NCw3ICsyODQsNyBAQCB2b2lk
IFJlbmRlclNWR1Jlc291cmNlQ2xpcHBlcjo6Y2FsY3VsYXRlQ2xpcENvbnRlbnRSZXBhaW50UmVj
dCgpCiAgICAgICAgIFJlbmRlck9iamVjdCogcmVuZGVyZXIgPSBjaGlsZE5vZGUtPnJlbmRlcmVy
KCk7CiAgICAgICAgIGlmICghY2hpbGROb2RlLT5pc1NWR0VsZW1lbnQoKSB8fCAhc3RhdGljX2Nh
c3Q8U1ZHRWxlbWVudCo+KGNoaWxkTm9kZSktPmlzU3R5bGVkKCkgfHwgIXJlbmRlcmVyKQogICAg
ICAgICAgICAgY29udGludWU7Ci0gICAgICAgIGlmICghcmVuZGVyZXItPmlzU1ZHUGF0aCgpICYm
ICFyZW5kZXJlci0+aXNTVkdUZXh0KCkgJiYgIXJlbmRlcmVyLT5pc1NWR1NoYWRvd1RyZWVSb290
Q29udGFpbmVyKCkpCisgICAgICAgIGlmICghcmVuZGVyZXItPmlzU1ZHU2hhcGUoKSAmJiAhcmVu
ZGVyZXItPmlzU1ZHVGV4dCgpICYmICFyZW5kZXJlci0+aXNTVkdTaGFkb3dUcmVlUm9vdENvbnRh
aW5lcigpKQogICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgIFJlbmRlclN0eWxlKiBzdHls
ZSA9IHJlbmRlcmVyLT5zdHlsZSgpOwogICAgICAgICBpZiAoIXN0eWxlIHx8IHN0eWxlLT5kaXNw
bGF5KCkgPT0gTk9ORSB8fCBzdHlsZS0+dmlzaWJpbGl0eSgpICE9IFZJU0lCTEUpCkBAIC0zMTAs
NyArMzEwLDcgQEAgYm9vbCBSZW5kZXJTVkdSZXNvdXJjZUNsaXBwZXI6OmhpdFRlc3RDbGlwQ29u
dGVudChjb25zdCBGbG9hdFJlY3QmIG9iamVjdEJvdW5kaW4KICAgICAgICAgUmVuZGVyT2JqZWN0
KiByZW5kZXJlciA9IGNoaWxkTm9kZS0+cmVuZGVyZXIoKTsKICAgICAgICAgaWYgKCFjaGlsZE5v
ZGUtPmlzU1ZHRWxlbWVudCgpIHx8ICFzdGF0aWNfY2FzdDxTVkdFbGVtZW50Kj4oY2hpbGROb2Rl
KS0+aXNTdHlsZWQoKSB8fCAhcmVuZGVyZXIpCiAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAg
ICAgaWYgKCFyZW5kZXJlci0+aXNTVkdQYXRoKCkgJiYgIXJlbmRlcmVyLT5pc1NWR1RleHQoKSAm
JiAhcmVuZGVyZXItPmlzU1ZHU2hhZG93VHJlZVJvb3RDb250YWluZXIoKSkKKyAgICAgICAgaWYg
KCFyZW5kZXJlci0+aXNTVkdTaGFwZSgpICYmICFyZW5kZXJlci0+aXNTVkdUZXh0KCkgJiYgIXJl
bmRlcmVyLT5pc1NWR1NoYWRvd1RyZWVSb290Q29udGFpbmVyKCkpCiAgICAgICAgICAgICBjb250
aW51ZTsKICAgICAgICAgSW50UG9pbnQgaGl0UG9pbnQ7CiAgICAgICAgIEhpdFRlc3RSZXN1bHQg
cmVzdWx0KGhpdFBvaW50KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9z
dmcvUmVuZGVyU1ZHUmVzb3VyY2VDb250YWluZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJjZUNvbnRhaW5lci5jcHAKaW5kZXggNTVmNzdlNS4uZTk1
MGU3MSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdS
ZXNvdXJjZUNvbnRhaW5lci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9S
ZW5kZXJTVkdSZXNvdXJjZUNvbnRhaW5lci5jcHAKQEAgLTE4MCw3ICsxODAsNyBAQCB2b2lkIFJl
bmRlclNWR1Jlc291cmNlQ29udGFpbmVyOjpyZWdpc3RlclJlc291cmNlKCkKIC8vIEZJWE1FOiBU
aGlzIGRvZXMgbm90IGJlbG9uZyBoZXJlLgogQWZmaW5lVHJhbnNmb3JtIFJlbmRlclNWR1Jlc291
cmNlQ29udGFpbmVyOjp0cmFuc2Zvcm1Pbk5vblNjYWxpbmdTdHJva2UoUmVuZGVyT2JqZWN0KiBv
YmplY3QsIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgcmVzb3VyY2VUcmFuc2Zvcm0pCiB7Ci0gICAg
aWYgKCFvYmplY3QtPmlzU1ZHUGF0aCgpKQorICAgIGlmICghb2JqZWN0LT5pc1NWR1NoYXBlKCkp
CiAgICAgICAgIHJldHVybiByZXNvdXJjZVRyYW5zZm9ybTsKIAogICAgIFNWR1N0eWxlZFRyYW5z
Zm9ybWFibGVFbGVtZW50KiBlbGVtZW50ID0gc3RhdGljX2Nhc3Q8U1ZHU3R5bGVkVHJhbnNmb3Jt
YWJsZUVsZW1lbnQqPihvYmplY3QtPm5vZGUoKSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291cmNlRmlsdGVyLmNwcCBiL1NvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VGaWx0ZXIuY3BwCmluZGV4IDY4OTM1
ZGEuLjg1ZmYxYTcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVu
ZGVyU1ZHUmVzb3VyY2VGaWx0ZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9z
dmcvUmVuZGVyU1ZHUmVzb3VyY2VGaWx0ZXIuY3BwCkBAIC0yNTksMTYgKzI1OSwxNSBAQCBib29s
IFJlbmRlclNWR1Jlc291cmNlRmlsdGVyOjphcHBseVJlc291cmNlKFJlbmRlck9iamVjdCogb2Jq
ZWN0LCBSZW5kZXJTdHlsZSosCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLXZvaWQgUmVuZGVyU1ZH
UmVzb3VyY2VGaWx0ZXI6OnBvc3RBcHBseVJlc291cmNlKFJlbmRlck9iamVjdCogb2JqZWN0LCBH
cmFwaGljc0NvbnRleHQqJiBjb250ZXh0LCB1bnNpZ25lZCBzaG9ydCByZXNvdXJjZU1vZGUsIGNv
bnN0IFBhdGgqKQordm9pZCBSZW5kZXJTVkdSZXNvdXJjZUZpbHRlcjo6cG9zdEFwcGx5UmVzb3Vy
Y2UoUmVuZGVyT2JqZWN0KiBvYmplY3QsIEdyYXBoaWNzQ29udGV4dComIGNvbnRleHQsIHVuc2ln
bmVkIHNob3J0IHJlc291cmNlTW9kZSwgY29uc3QgUGF0aCosIGNvbnN0IFJlbmRlclNWR1NoYXBl
KikKIHsKLSAgICBBU1NFUlQob2JqZWN0KTsKKyAgICBBU1NFUlQoc2hhcGUpOwogICAgIEFTU0VS
VChjb250ZXh0KTsKICNpZm5kZWYgTkRFQlVHCiAgICAgQVNTRVJUKHJlc291cmNlTW9kZSA9PSBB
cHBseVRvRGVmYXVsdE1vZGUpOwogI2Vsc2UKICAgICBVTlVTRURfUEFSQU0ocmVzb3VyY2VNb2Rl
KTsKICNlbmRpZgotCiAgICAgRmlsdGVyRGF0YSogZmlsdGVyRGF0YSA9IG1fZmlsdGVyLmdldChv
YmplY3QpOwogICAgIGlmICghZmlsdGVyRGF0YSkKICAgICAgICAgcmV0dXJuOwpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJjZUZpbHRlci5o
IGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJjZUZpbHRlci5o
CmluZGV4IDVhNWIwOTIuLmZmNjFiNzEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VGaWx0ZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291cmNlRmlsdGVyLmgKQEAgLTcyLDcgKzcyLDcgQEAg
cHVibGljOgogICAgIHZpcnR1YWwgdm9pZCByZW1vdmVDbGllbnRGcm9tQ2FjaGUoUmVuZGVyT2Jq
ZWN0KiwgYm9vbCBtYXJrRm9ySW52YWxpZGF0aW9uID0gdHJ1ZSk7CiAKICAgICB2aXJ0dWFsIGJv
b2wgYXBwbHlSZXNvdXJjZShSZW5kZXJPYmplY3QqLCBSZW5kZXJTdHlsZSosIEdyYXBoaWNzQ29u
dGV4dComLCB1bnNpZ25lZCBzaG9ydCByZXNvdXJjZU1vZGUpOwotICAgIHZpcnR1YWwgdm9pZCBw
b3N0QXBwbHlSZXNvdXJjZShSZW5kZXJPYmplY3QqLCBHcmFwaGljc0NvbnRleHQqJiwgdW5zaWdu
ZWQgc2hvcnQgcmVzb3VyY2VNb2RlLCBjb25zdCBQYXRoKik7CisgICAgdmlydHVhbCB2b2lkIHBv
c3RBcHBseVJlc291cmNlKFJlbmRlck9iamVjdCosIEdyYXBoaWNzQ29udGV4dComLCB1bnNpZ25l
ZCBzaG9ydCByZXNvdXJjZU1vZGUsIGNvbnN0IFBhdGgqLCBjb25zdCBSZW5kZXJTVkdTaGFwZSop
OwogCiAgICAgdmlydHVhbCBGbG9hdFJlY3QgcmVzb3VyY2VCb3VuZGluZ0JveChSZW5kZXJPYmpl
Y3QqKTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJT
VkdSZXNvdXJjZUdyYWRpZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVu
ZGVyU1ZHUmVzb3VyY2VHcmFkaWVudC5jcHAKaW5kZXggMWFhYjkzNS4uNmM0ZTU2MCAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJjZUdyYWRp
ZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291
cmNlR3JhZGllbnQuY3BwCkBAIC0yNyw2ICsyNyw3IEBACiAKICNpbmNsdWRlICJHcmFkaWVudEF0
dHJpYnV0ZXMuaCIKICNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKKyNpbmNsdWRlICJSZW5k
ZXJTVkdTaGFwZS5oIgogI2luY2x1ZGUgIlJlbmRlclNWR1RleHQuaCIKICNpbmNsdWRlICJTVkdJ
bWFnZUJ1ZmZlclRvb2xzLmgiCiAjaW5jbHVkZSAiU1ZHUmVuZGVyU3VwcG9ydC5oIgpAQCAtMjMx
LDcgKzIzMiw3IEBAIGJvb2wgUmVuZGVyU1ZHUmVzb3VyY2VHcmFkaWVudDo6YXBwbHlSZXNvdXJj
ZShSZW5kZXJPYmplY3QqIG9iamVjdCwgUmVuZGVyU3R5bGUqCiAgICAgcmV0dXJuIHRydWU7CiB9
CiAKLXZvaWQgUmVuZGVyU1ZHUmVzb3VyY2VHcmFkaWVudDo6cG9zdEFwcGx5UmVzb3VyY2UoUmVu
ZGVyT2JqZWN0KiBvYmplY3QsIEdyYXBoaWNzQ29udGV4dComIGNvbnRleHQsIHVuc2lnbmVkIHNo
b3J0IHJlc291cmNlTW9kZSwgY29uc3QgUGF0aCogcGF0aCkKK3ZvaWQgUmVuZGVyU1ZHUmVzb3Vy
Y2VHcmFkaWVudDo6cG9zdEFwcGx5UmVzb3VyY2UoUmVuZGVyT2JqZWN0KiBvYmplY3QsIEdyYXBo
aWNzQ29udGV4dComIGNvbnRleHQsIHVuc2lnbmVkIHNob3J0IHJlc291cmNlTW9kZSwgY29uc3Qg
UGF0aCogcGF0aCwgY29uc3QgUmVuZGVyU1ZHU2hhcGUqIHNoYXBlKQogewogICAgIEFTU0VSVChj
b250ZXh0KTsKICAgICBBU1NFUlQocmVzb3VyY2VNb2RlICE9IEFwcGx5VG9EZWZhdWx0TW9kZSk7
CkBAIC0yNTksMTEgKzI2MCwxOSBAQCB2b2lkIFJlbmRlclNWR1Jlc291cmNlR3JhZGllbnQ6OnBv
c3RBcHBseVJlc291cmNlKFJlbmRlck9iamVjdCogb2JqZWN0LCBHcmFwaGljcwogI2Vsc2UKICAg
ICAgICAgVU5VU0VEX1BBUkFNKG9iamVjdCk7CiAjZW5kaWYKLSAgICB9IGVsc2UgaWYgKHBhdGgp
IHsKLSAgICAgICAgaWYgKHJlc291cmNlTW9kZSAmIEFwcGx5VG9GaWxsTW9kZSkKLSAgICAgICAg
ICAgIGNvbnRleHQtPmZpbGxQYXRoKCpwYXRoKTsKLSAgICAgICAgZWxzZSBpZiAocmVzb3VyY2VN
b2RlICYgQXBwbHlUb1N0cm9rZU1vZGUpCi0gICAgICAgICAgICBjb250ZXh0LT5zdHJva2VQYXRo
KCpwYXRoKTsKKyAgICB9IGVsc2UgeworICAgICAgICBpZiAocmVzb3VyY2VNb2RlICYgQXBwbHlU
b0ZpbGxNb2RlKSB7CisgICAgICAgICAgICBpZiAocGF0aCkKKyAgICAgICAgICAgICAgICBjb250
ZXh0LT5maWxsUGF0aCgqcGF0aCk7CisgICAgICAgICAgICBlbHNlIGlmIChzaGFwZSkKKyAgICAg
ICAgICAgICAgICBzaGFwZS0+ZmlsbFNoYXBlKGNvbnRleHQpOworICAgICAgICB9CisgICAgICAg
IGlmIChyZXNvdXJjZU1vZGUgJiBBcHBseVRvU3Ryb2tlTW9kZSkgeworICAgICAgICAgICAgaWYg
KHBhdGgpCisgICAgICAgICAgICAgICAgY29udGV4dC0+c3Ryb2tlUGF0aCgqcGF0aCk7CisgICAg
ICAgICAgICBlbHNlIGlmIChzaGFwZSkKKyAgICAgICAgICAgICAgICBzaGFwZS0+c3Ryb2tlU2hh
cGUoY29udGV4dCk7CisgICAgICAgIH0KICAgICB9CiAKICAgICBjb250ZXh0LT5yZXN0b3JlKCk7
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291
cmNlR3JhZGllbnQuaCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVz
b3VyY2VHcmFkaWVudC5oCmluZGV4IGRmNDkyZTIuLjNmY2NkNDQgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VHcmFkaWVudC5oCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VHcmFkaWVudC5o
CkBAIC01MCw3ICs1MCw3IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIHZvaWQgcmVtb3ZlQ2xpZW50
RnJvbUNhY2hlKFJlbmRlck9iamVjdCosIGJvb2wgbWFya0ZvckludmFsaWRhdGlvbiA9IHRydWUp
OwogCiAgICAgdmlydHVhbCBib29sIGFwcGx5UmVzb3VyY2UoUmVuZGVyT2JqZWN0KiwgUmVuZGVy
U3R5bGUqLCBHcmFwaGljc0NvbnRleHQqJiwgdW5zaWduZWQgc2hvcnQgcmVzb3VyY2VNb2RlKTsK
LSAgICB2aXJ0dWFsIHZvaWQgcG9zdEFwcGx5UmVzb3VyY2UoUmVuZGVyT2JqZWN0KiwgR3JhcGhp
Y3NDb250ZXh0KiYsIHVuc2lnbmVkIHNob3J0IHJlc291cmNlTW9kZSwgY29uc3QgUGF0aCopOwor
ICAgIHZpcnR1YWwgdm9pZCBwb3N0QXBwbHlSZXNvdXJjZShSZW5kZXJPYmplY3QqLCBHcmFwaGlj
c0NvbnRleHQqJiwgdW5zaWduZWQgc2hvcnQgcmVzb3VyY2VNb2RlLCBjb25zdCBQYXRoKiwgY29u
c3QgUmVuZGVyU1ZHU2hhcGUqKTsKICAgICB2aXJ0dWFsIEZsb2F0UmVjdCByZXNvdXJjZUJvdW5k
aW5nQm94KFJlbmRlck9iamVjdCopIHsgcmV0dXJuIEZsb2F0UmVjdCgpOyB9CiAKIHByb3RlY3Rl
ZDoKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVz
b3VyY2VQYXR0ZXJuLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZH
UmVzb3VyY2VQYXR0ZXJuLmNwcAppbmRleCBiMDgyNDgxLi5mMjY0ZDA4IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291cmNlUGF0dGVybi5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJjZVBhdHRl
cm4uY3BwCkBAIC0xODMsMTYgKzE4MywyMiBAQCBib29sIFJlbmRlclNWR1Jlc291cmNlUGF0dGVy
bjo6YXBwbHlSZXNvdXJjZShSZW5kZXJPYmplY3QqIG9iamVjdCwgUmVuZGVyU3R5bGUqCiAgICAg
cmV0dXJuIHRydWU7CiB9CiAKLXZvaWQgUmVuZGVyU1ZHUmVzb3VyY2VQYXR0ZXJuOjpwb3N0QXBw
bHlSZXNvdXJjZShSZW5kZXJPYmplY3QqLCBHcmFwaGljc0NvbnRleHQqJiBjb250ZXh0LCB1bnNp
Z25lZCBzaG9ydCByZXNvdXJjZU1vZGUsIGNvbnN0IFBhdGgqIHBhdGgpCit2b2lkIFJlbmRlclNW
R1Jlc291cmNlUGF0dGVybjo6cG9zdEFwcGx5UmVzb3VyY2UoUmVuZGVyT2JqZWN0KiwgR3JhcGhp
Y3NDb250ZXh0KiYgY29udGV4dCwgdW5zaWduZWQgc2hvcnQgcmVzb3VyY2VNb2RlLCBjb25zdCBQ
YXRoKiBwYXRoLCBjb25zdCBSZW5kZXJTVkdTaGFwZSogc2hhcGUpCiB7CiAgICAgQVNTRVJUKGNv
bnRleHQpOwogICAgIEFTU0VSVChyZXNvdXJjZU1vZGUgIT0gQXBwbHlUb0RlZmF1bHRNb2RlKTsK
IAotICAgIGlmIChwYXRoICYmICEocmVzb3VyY2VNb2RlICYgQXBwbHlUb1RleHRNb2RlKSkgewot
ICAgICAgICBpZiAocmVzb3VyY2VNb2RlICYgQXBwbHlUb0ZpbGxNb2RlKQorICAgIGlmIChyZXNv
dXJjZU1vZGUgJiBBcHBseVRvRmlsbE1vZGUpIHsKKyAgICAgICAgaWYgKHBhdGgpCiAgICAgICAg
ICAgICBjb250ZXh0LT5maWxsUGF0aCgqcGF0aCk7Ci0gICAgICAgIGVsc2UgaWYgKHJlc291cmNl
TW9kZSAmIEFwcGx5VG9TdHJva2VNb2RlKQorICAgICAgICBlbHNlIGlmIChzaGFwZSkKKyAgICAg
ICAgICAgIHNoYXBlLT5maWxsU2hhcGUoY29udGV4dCk7CisgICAgfQorICAgIGlmIChyZXNvdXJj
ZU1vZGUgJiBBcHBseVRvU3Ryb2tlTW9kZSkgeworICAgICAgICBpZiAocGF0aCkKICAgICAgICAg
ICAgIGNvbnRleHQtPnN0cm9rZVBhdGgoKnBhdGgpOworICAgICAgICBlbHNlIGlmIChzaGFwZSkK
KyAgICAgICAgICAgIHNoYXBlLT5zdHJva2VTaGFwZShjb250ZXh0KTsKICAgICB9CiAKICAgICBj
b250ZXh0LT5yZXN0b3JlKCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
c3ZnL1JlbmRlclNWR1Jlc291cmNlUGF0dGVybi5oIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L3N2Zy9SZW5kZXJTVkdSZXNvdXJjZVBhdHRlcm4uaAppbmRleCBhNjk3YzcxLi44NDdmYzYwIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291cmNl
UGF0dGVybi5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVz
b3VyY2VQYXR0ZXJuLmgKQEAgLTUyLDcgKzUyLDcgQEAgcHVibGljOgogICAgIHZpcnR1YWwgdm9p
ZCByZW1vdmVDbGllbnRGcm9tQ2FjaGUoUmVuZGVyT2JqZWN0KiwgYm9vbCBtYXJrRm9ySW52YWxp
ZGF0aW9uID0gdHJ1ZSk7CiAKICAgICB2aXJ0dWFsIGJvb2wgYXBwbHlSZXNvdXJjZShSZW5kZXJP
YmplY3QqLCBSZW5kZXJTdHlsZSosIEdyYXBoaWNzQ29udGV4dComLCB1bnNpZ25lZCBzaG9ydCBy
ZXNvdXJjZU1vZGUpOwotICAgIHZpcnR1YWwgdm9pZCBwb3N0QXBwbHlSZXNvdXJjZShSZW5kZXJP
YmplY3QqLCBHcmFwaGljc0NvbnRleHQqJiwgdW5zaWduZWQgc2hvcnQgcmVzb3VyY2VNb2RlLCBj
b25zdCBQYXRoKik7CisgICAgdmlydHVhbCB2b2lkIHBvc3RBcHBseVJlc291cmNlKFJlbmRlck9i
amVjdCosIEdyYXBoaWNzQ29udGV4dComLCB1bnNpZ25lZCBzaG9ydCByZXNvdXJjZU1vZGUsIGNv
bnN0IFBhdGgqLCBjb25zdCBSZW5kZXJTVkdTaGFwZSopOwogICAgIHZpcnR1YWwgRmxvYXRSZWN0
IHJlc291cmNlQm91bmRpbmdCb3goUmVuZGVyT2JqZWN0KikgeyByZXR1cm4gRmxvYXRSZWN0KCk7
IH0KIAogICAgIHZpcnR1YWwgUmVuZGVyU1ZHUmVzb3VyY2VUeXBlIHJlc291cmNlVHlwZSgpIGNv
bnN0IHsgcmV0dXJuIHNfcmVzb3VyY2VUeXBlOyB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291cmNlU29saWRDb2xvci5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291cmNlU29saWRDb2xvci5jcHAKaW5k
ZXggNWJlMmFmNi4uNjNkZjc1MSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L3N2Zy9SZW5kZXJTVkdSZXNvdXJjZVNvbGlkQ29sb3IuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VTb2xpZENvbG9yLmNwcApAQCAtMjMsNiAr
MjMsNyBAQAogI2luY2x1ZGUgIlJlbmRlclNWR1Jlc291cmNlU29saWRDb2xvci5oIgogCiAjaW5j
bHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCisjaW5jbHVkZSAiUmVuZGVyU1ZHU2hhcGUuaCIKICNp
bmNsdWRlICJSZW5kZXJTdHlsZS5oIgogI2luY2x1ZGUgIlNWR1JlbmRlclN1cHBvcnQuaCIKIApA
QCAtNzQsMTYgKzc1LDIyIEBAIGJvb2wgUmVuZGVyU1ZHUmVzb3VyY2VTb2xpZENvbG9yOjphcHBs
eVJlc291cmNlKFJlbmRlck9iamVjdCogb2JqZWN0LCBSZW5kZXJTdHlsCiAgICAgcmV0dXJuIHRy
dWU7CiB9CiAKLXZvaWQgUmVuZGVyU1ZHUmVzb3VyY2VTb2xpZENvbG9yOjpwb3N0QXBwbHlSZXNv
dXJjZShSZW5kZXJPYmplY3QqLCBHcmFwaGljc0NvbnRleHQqJiBjb250ZXh0LCB1bnNpZ25lZCBz
aG9ydCByZXNvdXJjZU1vZGUsIGNvbnN0IFBhdGgqIHBhdGgpCit2b2lkIFJlbmRlclNWR1Jlc291
cmNlU29saWRDb2xvcjo6cG9zdEFwcGx5UmVzb3VyY2UoUmVuZGVyT2JqZWN0KiwgR3JhcGhpY3ND
b250ZXh0KiYgY29udGV4dCwgdW5zaWduZWQgc2hvcnQgcmVzb3VyY2VNb2RlLCBjb25zdCBQYXRo
KiBwYXRoLCBjb25zdCBSZW5kZXJTVkdTaGFwZSogc2hhcGUpCiB7CiAgICAgQVNTRVJUKGNvbnRl
eHQpOwogICAgIEFTU0VSVChyZXNvdXJjZU1vZGUgIT0gQXBwbHlUb0RlZmF1bHRNb2RlKTsKIAot
ICAgIGlmIChwYXRoICYmICEocmVzb3VyY2VNb2RlICYgQXBwbHlUb1RleHRNb2RlKSkgewotICAg
ICAgICBpZiAocmVzb3VyY2VNb2RlICYgQXBwbHlUb0ZpbGxNb2RlKQorICAgIGlmIChyZXNvdXJj
ZU1vZGUgJiBBcHBseVRvRmlsbE1vZGUpIHsKKyAgICAgICAgaWYgKHBhdGgpCiAgICAgICAgICAg
ICBjb250ZXh0LT5maWxsUGF0aCgqcGF0aCk7Ci0gICAgICAgIGVsc2UgaWYgKHJlc291cmNlTW9k
ZSAmIEFwcGx5VG9TdHJva2VNb2RlKQorICAgICAgICBlbHNlIGlmIChzaGFwZSkKKyAgICAgICAg
ICAgIHNoYXBlLT5maWxsU2hhcGUoY29udGV4dCk7CisgICAgfQorICAgIGlmIChyZXNvdXJjZU1v
ZGUgJiBBcHBseVRvU3Ryb2tlTW9kZSkgeworICAgICAgICBpZiAocGF0aCkKICAgICAgICAgICAg
IGNvbnRleHQtPnN0cm9rZVBhdGgoKnBhdGgpOworICAgICAgICBlbHNlIGlmIChzaGFwZSkKKyAg
ICAgICAgICAgIHNoYXBlLT5zdHJva2VTaGFwZShjb250ZXh0KTsKICAgICB9CiB9CiAKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VTb2xp
ZENvbG9yLmggYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291cmNl
U29saWRDb2xvci5oCmluZGV4IDAyY2ViMzEuLjhiYmZkY2QgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VTb2xpZENvbG9yLmgKKysrIGIv
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJjZVNvbGlkQ29sb3Iu
aApAQCAtMzYsNyArMzYsNyBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCB2b2lkIHJlbW92ZUNsaWVu
dEZyb21DYWNoZShSZW5kZXJPYmplY3QqLCBib29sID0gdHJ1ZSkgeyB9CiAKICAgICB2aXJ0dWFs
IGJvb2wgYXBwbHlSZXNvdXJjZShSZW5kZXJPYmplY3QqLCBSZW5kZXJTdHlsZSosIEdyYXBoaWNz
Q29udGV4dComLCB1bnNpZ25lZCBzaG9ydCByZXNvdXJjZU1vZGUpOwotICAgIHZpcnR1YWwgdm9p
ZCBwb3N0QXBwbHlSZXNvdXJjZShSZW5kZXJPYmplY3QqLCBHcmFwaGljc0NvbnRleHQqJiwgdW5z
aWduZWQgc2hvcnQgcmVzb3VyY2VNb2RlLCBjb25zdCBQYXRoKik7CisgICAgdmlydHVhbCB2b2lk
IHBvc3RBcHBseVJlc291cmNlKFJlbmRlck9iamVjdCosIEdyYXBoaWNzQ29udGV4dComLCB1bnNp
Z25lZCBzaG9ydCByZXNvdXJjZU1vZGUsIGNvbnN0IFBhdGgqLCBjb25zdCBSZW5kZXJTVkdTaGFw
ZSopOwogICAgIHZpcnR1YWwgRmxvYXRSZWN0IHJlc291cmNlQm91bmRpbmdCb3goUmVuZGVyT2Jq
ZWN0KikgeyByZXR1cm4gRmxvYXRSZWN0KCk7IH0KIAogICAgIHZpcnR1YWwgUmVuZGVyU1ZHUmVz
b3VyY2VUeXBlIHJlc291cmNlVHlwZSgpIGNvbnN0IHsgcmV0dXJuIHNfcmVzb3VyY2VUeXBlOyB9
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1NoYXBl
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHU2hhcGUuY3BwCm5l
dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIzZjJmNDQKLS0tIC9kZXYvbnVsbAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1NoYXBlLmNwcApAQCAt
MCwwICsxLDQzMiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSwgMjAwNyBOaWtv
bGFzIFppbW1lcm1hbm4gPHppbW1lcm1hbm5Aa2RlLm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAw
NCwgMjAwNSwgMjAwOCBSb2IgQnVpcyA8YnVpc0BrZGUub3JnPgorICogQ29weXJpZ2h0IChDKSAy
MDA1LCAyMDA3IEVyaWMgU2VpZGVsIDxlcmljQHdlYmtpdC5vcmc+CisgKiBDb3B5cmlnaHQgKEMp
IDIwMDkgR29vZ2xlLCBJbmMuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgRGlyayBTY2h1bHplIDxr
cml0QHdlYmtpdC5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIFJlc2VhcmNoIEluIE1vdGlvbiBMaW1p
dGVkIDIwMTAuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgSmVm
ZiBTY2hpbGxlciA8Y29kZWRyZWFkQGdtYWlsLmNvbT4KKyAqIENvcHlyaWdodCAoQykgMjAxMSBS
ZW5hdGEgSG9kb3ZhbiA8cmVuaUB3ZWJraXQub3JnPgorICogQ29weXJpZ2h0IChDKSAyMDExIFVu
aXZlcnNpdHkgb2YgU3plZ2VkCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7
IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0
ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVi
bGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lv
biAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9u
LgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0
IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2
ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVy
YWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhh
dmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNl
bnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElC
LiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5j
LiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAt
MTMwMSwgVVNBLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKworI2lmIEVOQUJMRShTVkcp
CisjaW5jbHVkZSAiUmVuZGVyU1ZHU2hhcGUuaCIKKworI2luY2x1ZGUgIkZsb2F0UG9pbnQuaCIK
KyNpbmNsdWRlICJGbG9hdFF1YWQuaCIKKyNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKKyNp
bmNsdWRlICJIaXRUZXN0UmVxdWVzdC5oIgorI2luY2x1ZGUgIkxheW91dFJlcGFpbnRlci5oIgor
I2luY2x1ZGUgIlBvaW50ZXJFdmVudHNIaXRSdWxlcy5oIgorI2luY2x1ZGUgIlJlbmRlclNWR0Nv
bnRhaW5lci5oIgorI2luY2x1ZGUgIlJlbmRlclNWR1Jlc291cmNlTWFya2VyLmgiCisjaW5jbHVk
ZSAiUmVuZGVyU1ZHUmVzb3VyY2VTb2xpZENvbG9yLmgiCisjaW5jbHVkZSAiU1ZHUGF0aEVsZW1l
bnQuaCIKKyNpbmNsdWRlICJTVkdSZW5kZXJTdXBwb3J0LmgiCisjaW5jbHVkZSAiU1ZHUmVzb3Vy
Y2VzLmgiCisjaW5jbHVkZSAiU1ZHU3R5bGVkVHJhbnNmb3JtYWJsZUVsZW1lbnQuaCIKKyNpbmNs
dWRlICJTVkdUcmFuc2Zvcm1MaXN0LmgiCisjaW5jbHVkZSAiU1ZHVVJJUmVmZXJlbmNlLmgiCisj
aW5jbHVkZSAiU3Ryb2tlU3R5bGVBcHBsaWVyLmgiCisjaW5jbHVkZSA8d3RmL01hdGhFeHRyYXMu
aD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitSZW5kZXJTVkdTaGFwZTo6UmVuZGVyU1ZHU2hh
cGUoU1ZHU3R5bGVkVHJhbnNmb3JtYWJsZUVsZW1lbnQqIG5vZGUpCisgICAgOiBSZW5kZXJTVkdN
b2RlbE9iamVjdChub2RlKQorICAgICwgbV9uZWVkc0JvdW5kYXJpZXNVcGRhdGUoZmFsc2UpIC8v
IERlZmF1bHQgaXMgZmFsc2UsIHRoZSBjYWNoZWQgcmVjdHMgYXJlIGVtcHR5IGZyb20gdGhlIGJl
Z2lubmluZy4KKyAgICAsIG1fbmVlZHNTaGFwZVVwZGF0ZSh0cnVlKSAvLyBEZWZhdWx0IGlzIHRy
dWUsIHNvIHdlIGdyYWIgYSBQYXRoIG9iamVjdCBvbmNlIGZyb20gU1ZHU3R5bGVkVHJhbnNmb3Jt
YWJsZUVsZW1lbnQuCisgICAgLCBtX25lZWRzVHJhbnNmb3JtVXBkYXRlKHRydWUpIC8vIERlZmF1
bHQgaXMgdHJ1ZSwgc28gd2UgZ3JhYiBhIEFmZmluZVRyYW5zZm9ybSBvYmplY3Qgb25jZSBmcm9t
IFNWR1N0eWxlZFRyYW5zZm9ybWFibGVFbGVtZW50LgorICAgICwgbV9maWxsRmFsbGJhY2soZmFs
c2UpCit7Cit9CisKK1JlbmRlclNWR1NoYXBlOjpSZW5kZXJTVkdTaGFwZShTVkdTdHlsZWRUcmFu
c2Zvcm1hYmxlRWxlbWVudCogbm9kZSwgUGF0aCogcGF0aCwgYm9vbCBpc0ZpbGxGYWxsYmFjaykK
KyAgICA6IFJlbmRlclNWR01vZGVsT2JqZWN0KG5vZGUpCisgICAgLCBtX2ZpbGxGYWxsYmFjayhp
c0ZpbGxGYWxsYmFjaykKK3sKKyAgICAgbV9wYXRoID0gYWRvcHRQdHIocGF0aCk7Cit9CisKK1Jl
bmRlclNWR1NoYXBlOjp+UmVuZGVyU1ZHU2hhcGUoKQoreworfQorCit2b2lkIFJlbmRlclNWR1No
YXBlOjpjcmVhdGVTaGFwZSgpCit7CisgICAgbV9wYXRoID0gYWRvcHRQdHIobmV3IFBhdGgpOwor
ICAgIEFTU0VSVChpc0VtcHR5KCkpOworCisgICAgU1ZHUGF0aEVsZW1lbnQqIGVsZW1lbnQgPSBz
dGF0aWNfY2FzdDxTVkdQYXRoRWxlbWVudCo+KG5vZGUoKSk7CisgICAgZWxlbWVudC0+dG9QYXRo
RGF0YShwYXRoKCkpOworfQorCitib29sIFJlbmRlclNWR1NoYXBlOjppc0VtcHR5KCkgY29uc3QK
K3sKKyAgICByZXR1cm4gbV9wYXRoLT5pc0VtcHR5KCk7Cit9CisKK3ZvaWQgUmVuZGVyU1ZHU2hh
cGU6OmZpbGxTaGFwZShHcmFwaGljc0NvbnRleHQqIGNvbnRleHQpIGNvbnN0Cit7CisgICAgY29u
dGV4dC0+ZmlsbFBhdGgocGF0aCgpKTsKK30KKworRmxvYXRSZWN0IFJlbmRlclNWR1NoYXBlOjpv
YmplY3RCb3VuZGluZ0JveCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fcGF0aC0+Ym91bmRpbmdS
ZWN0KCk7Cit9CisKK0Zsb2F0UmVjdCBSZW5kZXJTVkdTaGFwZTo6c3Ryb2tlQm91bmRpbmdCb3go
KSBjb25zdAoreworICAgIEJvdW5kaW5nUmVjdFN0cm9rZVN0eWxlQXBwbGllciBzdHJva2VTdHls
ZSh0aGlzLCBzdHlsZSgpKTsKKyAgICByZXR1cm4gbV9wYXRoLT5zdHJva2VCb3VuZGluZ1JlY3Qo
JnN0cm9rZVN0eWxlKTsKK30KKwordm9pZCBSZW5kZXJTVkdTaGFwZTo6c3Ryb2tlU2hhcGUoR3Jh
cGhpY3NDb250ZXh0KiBjb250ZXh0KSBjb25zdAoreworICAgIGNvbnRleHQtPnN0cm9rZVBhdGgo
cGF0aCgpKTsKK30KKworYm9vbCBSZW5kZXJTVkdTaGFwZTo6c2hhcGVEZXBlbmRlbnRTdHJva2VD
b250YWlucyhjb25zdCBGbG9hdFBvaW50JiBwb2ludCkgY29uc3QKK3sKKyAgICBCb3VuZGluZ1Jl
Y3RTdHJva2VTdHlsZUFwcGxpZXIgYXBwbGllcih0aGlzLCBzdHlsZSgpKTsKKyAgICByZXR1cm4g
bV9wYXRoLT5zdHJva2VDb250YWlucygmYXBwbGllciwgcG9pbnQpOworfQorCitib29sIFJlbmRl
clNWR1NoYXBlOjpzaGFwZURlcGVuZGVudEZpbGxDb250YWlucyhjb25zdCBGbG9hdFBvaW50JiBw
b2ludCwgY29uc3QgV2luZFJ1bGUgZmlsbFJ1bGUpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fcGF0
aC0+Y29udGFpbnMocG9pbnQsIGZpbGxSdWxlKTsKK30KKworYm9vbCBSZW5kZXJTVkdTaGFwZTo6
ZmlsbENvbnRhaW5zKGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50LCBib29sIHJlcXVpcmVzRmlsbCwg
Y29uc3QgV2luZFJ1bGUgZmlsbFJ1bGUpCit7CisgICAgaWYgKCFtX2ZpbGxCb3VuZGluZ0JveC5j
b250YWlucyhwb2ludCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIENvbG9yIGZhbGxi
YWNrQ29sb3I7CisgICAgaWYgKHJlcXVpcmVzRmlsbCAmJiAhUmVuZGVyU1ZHUmVzb3VyY2U6OmZp
bGxQYWludGluZ1Jlc291cmNlKHRoaXMsIHN0eWxlKCksIGZhbGxiYWNrQ29sb3IpKQorICAgICAg
ICByZXR1cm4gZmFsc2U7CisKKyAgICByZXR1cm4gc2hhcGVEZXBlbmRlbnRGaWxsQ29udGFpbnMo
cG9pbnQsIGZpbGxSdWxlKTsKK30KKworYm9vbCBSZW5kZXJTVkdTaGFwZTo6c3Ryb2tlQ29udGFp
bnMoY29uc3QgRmxvYXRQb2ludCYgcG9pbnQsIGJvb2wgcmVxdWlyZXNTdHJva2UpCit7CisgICAg
aWYgKCFtX3N0cm9rZUFuZE1hcmtlckJvdW5kaW5nQm94LmNvbnRhaW5zKHBvaW50KSkKKyAgICAg
ICAgcmV0dXJuIGZhbHNlOworCisgICAgQ29sb3IgZmFsbGJhY2tDb2xvcjsKKyAgICBpZiAocmVx
dWlyZXNTdHJva2UgJiYgIVJlbmRlclNWR1Jlc291cmNlOjpzdHJva2VQYWludGluZ1Jlc291cmNl
KHRoaXMsIHN0eWxlKCksIGZhbGxiYWNrQ29sb3IpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisK
KyAgICBpZiAoc2hvdWxkU3Ryb2tlWmVyb0xlbmd0aFN1YnBhdGgoKSkKKyAgICAgICAgcmV0dXJu
IHplcm9MZW5ndGhTdWJwYXRoUmVjdCgpLmNvbnRhaW5zKHBvaW50KTsKKworICAgIGNvbnN0IFNW
R1JlbmRlclN0eWxlKiBzdmdTdHlsZSA9IHN0eWxlKCktPnN2Z1N0eWxlKCk7CisgICAgaWYgKCFz
dmdTdHlsZS0+c3Ryb2tlRGFzaEFycmF5KCkuaXNFbXB0eSgpIHx8IHN2Z1N0eWxlLT5zdHJva2VN
aXRlckxpbWl0KCkgIT0gc3ZnU3R5bGUtPmluaXRpYWxTdHJva2VNaXRlckxpbWl0KCkKKyAgICAg
ICAgfHwgc3ZnU3R5bGUtPmpvaW5TdHlsZSgpICE9IHN2Z1N0eWxlLT5pbml0aWFsSm9pblN0eWxl
KCkgfHwgc3ZnU3R5bGUtPmNhcFN0eWxlKCkgIT0gc3ZnU3R5bGUtPmluaXRpYWxDYXBTdHlsZSgp
KSB7CisgICAgICAgIGlmICghbV9wYXRoKQorICAgICAgICAgICAgUmVuZGVyU1ZHU2hhcGU6OmNy
ZWF0ZVNoYXBlKCk7CisgICAgICAgIHJldHVybiBSZW5kZXJTVkdTaGFwZTo6c2hhcGVEZXBlbmRl
bnRTdHJva2VDb250YWlucyhwb2ludCk7CisgICAgfQorICAgIHJldHVybiBzaGFwZURlcGVuZGVu
dFN0cm9rZUNvbnRhaW5zKHBvaW50KTsKK30KKwordm9pZCBSZW5kZXJTVkdTaGFwZTo6bGF5b3V0
KCkKK3sKKyAgICBMYXlvdXRSZXBhaW50ZXIgcmVwYWludGVyKCp0aGlzLCBjaGVja0ZvclJlcGFp
bnREdXJpbmdMYXlvdXQoKSAmJiBzZWxmTmVlZHNMYXlvdXQoKSk7CisgICAgU1ZHU3R5bGVkVHJh
bnNmb3JtYWJsZUVsZW1lbnQqIGVsZW1lbnQgPSBzdGF0aWNfY2FzdDxTVkdTdHlsZWRUcmFuc2Zv
cm1hYmxlRWxlbWVudCo+KG5vZGUoKSk7CisKKyAgICBib29sIHVwZGF0ZUNhY2hlZEJvdW5kYXJp
ZXNJblBhcmVudHMgPSBmYWxzZTsKKworICAgIGJvb2wgbmVlZHNTaGFwZVVwZGF0ZSA9IG1fbmVl
ZHNTaGFwZVVwZGF0ZTsKKyAgICBpZiAobmVlZHNTaGFwZVVwZGF0ZSkgeworICAgICAgICBjcmVh
dGVTaGFwZSgpOworICAgICAgICBtX25lZWRzU2hhcGVVcGRhdGUgPSBmYWxzZTsKKyAgICAgICAg
dXBkYXRlQ2FjaGVkQm91bmRhcmllc0luUGFyZW50cyA9IHRydWU7CisgICAgfQorCisgICAgaWYg
KG1fbmVlZHNUcmFuc2Zvcm1VcGRhdGUpIHsKKyAgICAgICAgbV9sb2NhbFRyYW5zZm9ybSA9IGVs
ZW1lbnQtPmFuaW1hdGVkTG9jYWxUcmFuc2Zvcm0oKTsKKyAgICAgICAgbV9uZWVkc1RyYW5zZm9y
bVVwZGF0ZSA9IGZhbHNlOworICAgICAgICB1cGRhdGVDYWNoZWRCb3VuZGFyaWVzSW5QYXJlbnRz
ID0gdHJ1ZTsKKyAgICB9CisKKyAgICBpZiAobV9uZWVkc0JvdW5kYXJpZXNVcGRhdGUpIHsKKyAg
ICAgICAgdXBkYXRlQ2FjaGVkQm91bmRhcmllc0luUGFyZW50cyA9IHRydWU7CisgICAgICAgIHNl
dElzUGFpbnRpbmdGYWxsYmFjayhmYWxzZSk7CisgICAgICAgIGNyZWF0ZVNoYXBlKCk7CisgICAg
fQorCisgICAgLy8gSW52YWxpZGF0ZSBhbGwgcmVzb3VyY2VzIG9mIHRoaXMgY2xpZW50IGlmIG91
ciBsYXlvdXQgY2hhbmdlZC4KKyAgICBpZiAobV9ldmVySGFkTGF5b3V0ICYmIHNlbGZOZWVkc0xh
eW91dCgpKSB7CisgICAgICAgIFNWR1Jlc291cmNlc0NhY2hlOjpjbGllbnRMYXlvdXRDaGFuZ2Vk
KHRoaXMpOworICAgICAgICBtX21hcmtlckxheW91dEluZm8uY2xlYXIoKTsKKyAgICB9CisKKyAg
ICAvLyBBdCB0aGlzIHBvaW50IExheW91dFJlcGFpbnRlciBhbHJlYWR5IGdyYWJiZWQgdGhlIG9s
ZCBib3VuZHMsCisgICAgLy8gcmVjYWxjdWxhdGUgdGhlbSBub3cgc28gcmVwYWludEFmdGVyTGF5
b3V0KCkgdXNlcyB0aGUgbmV3IGJvdW5kcy4KKyAgICBpZiAobmVlZHNTaGFwZVVwZGF0ZSB8fCBt
X25lZWRzQm91bmRhcmllc1VwZGF0ZSkgeworICAgICAgICB1cGRhdGVDYWNoZWRCb3VuZGFyaWVz
KCk7CisgICAgICAgIG1fbmVlZHNCb3VuZGFyaWVzVXBkYXRlID0gZmFsc2U7CisgICAgfQorCisg
ICAgLy8gSWYgb3VyIGJvdW5kcyBjaGFuZ2VkLCBub3RpZnkgdGhlIHBhcmVudHMuCisgICAgaWYg
KHVwZGF0ZUNhY2hlZEJvdW5kYXJpZXNJblBhcmVudHMpCisgICAgICAgIFJlbmRlclNWR01vZGVs
T2JqZWN0OjpzZXROZWVkc0JvdW5kYXJpZXNVcGRhdGUoKTsKKworICAgIHJlcGFpbnRlci5yZXBh
aW50QWZ0ZXJMYXlvdXQoKTsKKyAgICBzZXROZWVkc0xheW91dChmYWxzZSk7Cit9CisKK2Jvb2wg
UmVuZGVyU1ZHU2hhcGU6OnNob3VsZFN0cm9rZVplcm9MZW5ndGhTdWJwYXRoKCkgY29uc3QKK3sK
KyAgICAvLyBTcGVjKDExLjQpOiBBbnkgemVybyBsZW5ndGggc3VicGF0aCBzaGFsbCBub3QgYmUg
c3Ryb2tlZCBpZiB0aGUg4oCYc3Ryb2tlLWxpbmVjYXDigJkgcHJvcGVydHkgaGFzIGEgdmFsdWUg
b2YgYnV0dAorICAgIC8vIGJ1dCBzaGFsbCBiZSBzdHJva2VkIGlmIHRoZSDigJhzdHJva2UtbGlu
ZWNhcOKAmSBwcm9wZXJ0eSBoYXMgYSB2YWx1ZSBvZiByb3VuZCBvciBzcXVhcmUKKyAgICByZXR1
cm4gc3R5bGUoKS0+c3ZnU3R5bGUoKS0+aGFzU3Ryb2tlKCkgJiYgc3R5bGUoKS0+c3ZnU3R5bGUo
KS0+Y2FwU3R5bGUoKSAhPSBCdXR0Q2FwICYmICFtX2ZpbGxCb3VuZGluZ0JveC53aWR0aCgpICYm
ICFtX2ZpbGxCb3VuZGluZ0JveC5oZWlnaHQoKTsKK30KKworRmxvYXRSZWN0IFJlbmRlclNWR1No
YXBlOjp6ZXJvTGVuZ3RoU3VicGF0aFJlY3QoKSBjb25zdAoreworICAgIGZsb2F0IHN0cm9rZVdp
ZHRoID0gdGhpcy0+c3Ryb2tlV2lkdGgoKTsKKyAgICByZXR1cm4gRmxvYXRSZWN0KG1fZmlsbEJv
dW5kaW5nQm94LngoKSAtIHN0cm9rZVdpZHRoIC8gMiwgbV9maWxsQm91bmRpbmdCb3gueSgpIC0g
c3Ryb2tlV2lkdGggLyAyLCBzdHJva2VXaWR0aCwgc3Ryb2tlV2lkdGgpOworfQorCit2b2lkIFJl
bmRlclNWR1NoYXBlOjpzZXR1cFNxdWFyZUNhcFBhdGgoaW50JiBhcHBseU1vZGUpCit7CisgICAg
Ly8gU3BlYygxMS40KTogQW55IHplcm8gbGVuZ3RoIHN1YnBhdGggc2hhbGwgbm90IGJlIHN0cm9r
ZWQgaWYgdGhlIOKAmHN0cm9rZS1saW5lY2Fw4oCZIHByb3BlcnR5IGhhcyBhIHZhbHVlIG9mIGJ1
dHQKKyAgICAvLyBidXQgc2hhbGwgYmUgc3Ryb2tlZCBpZiB0aGUg4oCYc3Ryb2tlLWxpbmVjYXDi
gJkgcHJvcGVydHkgaGFzIGEgdmFsdWUgb2Ygcm91bmQgb3Igc3F1YXJlCisgICAgYXBwbHlNb2Rl
ID0gQXBwbHlUb0ZpbGxNb2RlOworICAgIG1fcGF0aC0+Y2xlYXIoKTsKKyAgICBpZiAoc3R5bGUo
KS0+c3ZnU3R5bGUoKS0+Y2FwU3R5bGUoKSA9PSBTcXVhcmVDYXApCisgICAgICAgIG1fcGF0aC0+
YWRkUmVjdCh6ZXJvTGVuZ3RoU3VicGF0aFJlY3QoKSk7CisgICAgZWxzZQorICAgICAgICBtX3Bh
dGgtPmFkZEVsbGlwc2UoemVyb0xlbmd0aFN1YnBhdGhSZWN0KCkpOworfQorCitib29sIFJlbmRl
clNWR1NoYXBlOjpzZXR1cE5vblNjYWxpbmdTdHJva2VQYXRoKEdyYXBoaWNzQ29udGV4dFN0YXRl
U2F2ZXImIHN0YXRlU2F2ZXIpCit7CisgICAgU1ZHU3R5bGVkVHJhbnNmb3JtYWJsZUVsZW1lbnQq
IGVsZW1lbnQgPSBzdGF0aWNfY2FzdDxTVkdTdHlsZWRUcmFuc2Zvcm1hYmxlRWxlbWVudCo+KG5v
ZGUoKSk7CisgICAgQWZmaW5lVHJhbnNmb3JtIG5vblNjYWxpbmdTdHJva2VUcmFuc2Zvcm0gPSBl
bGVtZW50LT5nZXRTY3JlZW5DVE0oU1ZHTG9jYXRhYmxlOjpEaXNhbGxvd1N0eWxlVXBkYXRlKTsK
KyAgICBpZiAoIW5vblNjYWxpbmdTdHJva2VUcmFuc2Zvcm0uaXNJbnZlcnRpYmxlKCkpCisgICAg
ICAgIHJldHVybiBmYWxzZTsKKworICAgIG1fcGF0aC0+dHJhbnNmb3JtKG5vblNjYWxpbmdTdHJv
a2VUcmFuc2Zvcm0pOworCisgICAgc3RhdGVTYXZlci5zYXZlKCk7CisgICAgc3RhdGVTYXZlci5j
b250ZXh0KCktPmNvbmNhdENUTShub25TY2FsaW5nU3Ryb2tlVHJhbnNmb3JtLmludmVyc2UoKSk7
CisgICAgcmV0dXJuIHRydWU7Cit9CisKK3ZvaWQgUmVuZGVyU1ZHU2hhcGU6OmZpbGxBbmRTdHJv
a2VQYXRoKEdyYXBoaWNzQ29udGV4dCogY29udGV4dCkKK3sKKyAgICBSZW5kZXJTdHlsZSogc3R5
bGUgPSB0aGlzLT5zdHlsZSgpOworCisgICAgQ29sb3IgZmFsbGJhY2tDb2xvcjsKKyAgICBpZiAo
UmVuZGVyU1ZHUmVzb3VyY2UqIGZpbGxQYWludGluZ1Jlc291cmNlID0gUmVuZGVyU1ZHUmVzb3Vy
Y2U6OmZpbGxQYWludGluZ1Jlc291cmNlKHRoaXMsIHN0eWxlLCBmYWxsYmFja0NvbG9yKSkgewor
ICAgICAgICBpZiAoZmlsbFBhaW50aW5nUmVzb3VyY2UtPmFwcGx5UmVzb3VyY2UodGhpcywgc3R5
bGUsIGNvbnRleHQsIEFwcGx5VG9GaWxsTW9kZSkpCisgICAgICAgICAgICBmaWxsUGFpbnRpbmdS
ZXNvdXJjZS0+cG9zdEFwcGx5UmVzb3VyY2UodGhpcywgY29udGV4dCwgQXBwbHlUb0ZpbGxNb2Rl
LCAwLCB0aGlzKTsKKyAgICAgICAgZWxzZSBpZiAoZmFsbGJhY2tDb2xvci5pc1ZhbGlkKCkpIHsK
KyAgICAgICAgICAgIFJlbmRlclNWR1Jlc291cmNlU29saWRDb2xvciogZmFsbGJhY2tSZXNvdXJj
ZSA9IFJlbmRlclNWR1Jlc291cmNlOjpzaGFyZWRTb2xpZFBhaW50aW5nUmVzb3VyY2UoKTsKKyAg
ICAgICAgICAgIGZhbGxiYWNrUmVzb3VyY2UtPnNldENvbG9yKGZhbGxiYWNrQ29sb3IpOworICAg
ICAgICAgICAgaWYgKGZhbGxiYWNrUmVzb3VyY2UtPmFwcGx5UmVzb3VyY2UodGhpcywgc3R5bGUs
IGNvbnRleHQsIEFwcGx5VG9GaWxsTW9kZSkpCisgICAgICAgICAgICAgICAgZmFsbGJhY2tSZXNv
dXJjZS0+cG9zdEFwcGx5UmVzb3VyY2UodGhpcywgY29udGV4dCwgQXBwbHlUb0ZpbGxNb2RlLCAw
LCB0aGlzKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIGZhbGxiYWNrQ29sb3IgPSBDb2xvcigp
OworICAgIFJlbmRlclNWR1Jlc291cmNlKiBzdHJva2VQYWludGluZ1Jlc291cmNlID0gUmVuZGVy
U1ZHUmVzb3VyY2U6OnN0cm9rZVBhaW50aW5nUmVzb3VyY2UodGhpcywgc3R5bGUsIGZhbGxiYWNr
Q29sb3IpOworICAgIGlmICghc3Ryb2tlUGFpbnRpbmdSZXNvdXJjZSkKKyAgICAgICAgcmV0dXJu
OworCisgICAgaW50IGFwcGx5TW9kZSA9IEFwcGx5VG9TdHJva2VNb2RlOworCisgICAgYm9vbCBu
b25TY2FsaW5nU3Ryb2tlID0gc3R5bGUtPnN2Z1N0eWxlKCktPnZlY3RvckVmZmVjdCgpID09IFZF
X05PTl9TQ0FMSU5HX1NUUk9LRTsKKworICAgIEdyYXBoaWNzQ29udGV4dFN0YXRlU2F2ZXIgc3Rh
dGVTYXZlcigqY29udGV4dCwgZmFsc2UpOworCisgICAgLy8gU3BlYygxMS40KTogQW55IHplcm8g
bGVuZ3RoIHN1YnBhdGggc2hhbGwgbm90IGJlIHN0cm9rZWQgaWYgdGhlIOKAmHN0cm9rZS1saW5l
Y2Fw4oCZIHByb3BlcnR5IGhhcyBhIHZhbHVlIG9mIGJ1dHQKKyAgICAvLyBidXQgc2hhbGwgYmUg
c3Ryb2tlZCBpZiB0aGUg4oCYc3Ryb2tlLWxpbmVjYXDigJkgcHJvcGVydHkgaGFzIGEgdmFsdWUg
b2Ygcm91bmQgb3Igc3F1YXJlCisgICAgLy8gRklYTUU6IHRoaXMgZG9lcyBub3Qgd29yayBmb3Ig
emVyby1sZW5ndGggc3VicGF0aHMsIG9ubHkgd2hlbiB0b3RhbCBwYXRoIGlzIHplcm8tbGVuZ3Ro
CisgICAgaWYgKHNob3VsZFN0cm9rZVplcm9MZW5ndGhTdWJwYXRoKCkpIHsKKyAgICAgICAgUmVu
ZGVyU1ZHU2hhcGU6OmNyZWF0ZVNoYXBlKCk7CisgICAgICAgIHNldHVwU3F1YXJlQ2FwUGF0aChh
cHBseU1vZGUpOworICAgICAgICBzZXRJc1BhaW50aW5nRmFsbGJhY2sodHJ1ZSk7CisgICAgfSBl
bHNlIGlmIChub25TY2FsaW5nU3Ryb2tlKSB7CisgICAgICAgIFJlbmRlclNWR1NoYXBlOjpjcmVh
dGVTaGFwZSgpOworICAgICAgICBzZXRJc1BhaW50aW5nRmFsbGJhY2sodHJ1ZSk7CisgICAgICAg
IGlmICghc2V0dXBOb25TY2FsaW5nU3Ryb2tlUGF0aChzdGF0ZVNhdmVyKSkKKyAgICAgICAgICAg
IHJldHVybjsKKyAgICB9CisgICAgaWYgKHN0cm9rZVBhaW50aW5nUmVzb3VyY2UtPmFwcGx5UmVz
b3VyY2UodGhpcywgc3R5bGUsIGNvbnRleHQsIGFwcGx5TW9kZSkpIHsKKyAgICAgICAgc3Ryb2tl
UGFpbnRpbmdSZXNvdXJjZS0+cG9zdEFwcGx5UmVzb3VyY2UodGhpcywgY29udGV4dCwgYXBwbHlN
b2RlLCAwLCB0aGlzKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBpZiAoIWZhbGxiYWNr
Q29sb3IuaXNWYWxpZCgpKQorICAgICAgICByZXR1cm47CisgICAgUmVuZGVyU1ZHUmVzb3VyY2VT
b2xpZENvbG9yKiBmYWxsYmFja1Jlc291cmNlID0gUmVuZGVyU1ZHUmVzb3VyY2U6OnNoYXJlZFNv
bGlkUGFpbnRpbmdSZXNvdXJjZSgpOworICAgIGZhbGxiYWNrUmVzb3VyY2UtPnNldENvbG9yKGZh
bGxiYWNrQ29sb3IpOworICAgIGlmIChmYWxsYmFja1Jlc291cmNlLT5hcHBseVJlc291cmNlKHRo
aXMsIHN0eWxlLCBjb250ZXh0LCBhcHBseU1vZGUpKQorICAgICAgICBmYWxsYmFja1Jlc291cmNl
LT5wb3N0QXBwbHlSZXNvdXJjZSh0aGlzLCBjb250ZXh0LCBhcHBseU1vZGUsIDAsIHRoaXMpOwor
fQorCit2b2lkIFJlbmRlclNWR1NoYXBlOjpwYWludChQYWludEluZm8mIHBhaW50SW5mbywgY29u
c3QgSW50UG9pbnQmKQoreworICAgIGlmIChwYWludEluZm8uY29udGV4dC0+cGFpbnRpbmdEaXNh
YmxlZCgpIHx8IHN0eWxlKCktPnZpc2liaWxpdHkoKSA9PSBISURERU4gfHwgaXNFbXB0eSgpKQor
ICAgICAgICByZXR1cm47CisgICAgRmxvYXRSZWN0IGJvdW5kaW5nQm94ID0gcmVwYWludFJlY3RJ
bkxvY2FsQ29vcmRpbmF0ZXMoKTsKKyAgICBpZiAoIVNWR1JlbmRlclN1cHBvcnQ6OnBhaW50SW5m
b0ludGVyc2VjdHNSZXBhaW50UmVjdChib3VuZGluZ0JveCwgbV9sb2NhbFRyYW5zZm9ybSwgcGFp
bnRJbmZvKSkKKyAgICAgICAgcmV0dXJuOworICAgIFBhaW50SW5mbyBjaGlsZFBhaW50SW5mbyhw
YWludEluZm8pOworICAgIGJvb2wgZHJhd3NPdXRsaW5lID0gc3R5bGUoKS0+b3V0bGluZVdpZHRo
KCkgJiYgKGNoaWxkUGFpbnRJbmZvLnBoYXNlID09IFBhaW50UGhhc2VPdXRsaW5lIHx8IGNoaWxk
UGFpbnRJbmZvLnBoYXNlID09IFBhaW50UGhhc2VTZWxmT3V0bGluZSk7CisgICAgaWYgKGRyYXdz
T3V0bGluZSB8fCBjaGlsZFBhaW50SW5mby5waGFzZSA9PSBQYWludFBoYXNlRm9yZWdyb3VuZCkg
eworICAgICAgICBHcmFwaGljc0NvbnRleHRTdGF0ZVNhdmVyIHN0YXRlU2F2ZXIoKmNoaWxkUGFp
bnRJbmZvLmNvbnRleHQpOworICAgICAgICBjaGlsZFBhaW50SW5mby5hcHBseVRyYW5zZm9ybSht
X2xvY2FsVHJhbnNmb3JtKTsKKworICAgICAgICBpZiAoY2hpbGRQYWludEluZm8ucGhhc2UgPT0g
UGFpbnRQaGFzZUZvcmVncm91bmQpIHsKKyAgICAgICAgICAgIFBhaW50SW5mbyBzYXZlZEluZm8o
Y2hpbGRQYWludEluZm8pOworCisgICAgICAgICAgICBpZiAoU1ZHUmVuZGVyU3VwcG9ydDo6cHJl
cGFyZVRvUmVuZGVyU1ZHQ29udGVudCh0aGlzLCBjaGlsZFBhaW50SW5mbykpIHsKKyAgICAgICAg
ICAgICAgICBjb25zdCBTVkdSZW5kZXJTdHlsZSogc3ZnU3R5bGUgPSBzdHlsZSgpLT5zdmdTdHls
ZSgpOworICAgICAgICAgICAgICAgIGlmIChzdmdTdHlsZS0+c2hhcGVSZW5kZXJpbmcoKSA9PSBT
Ul9DUklTUEVER0VTKQorICAgICAgICAgICAgICAgICAgICBjaGlsZFBhaW50SW5mby5jb250ZXh0
LT5zZXRTaG91bGRBbnRpYWxpYXMoZmFsc2UpOworCisgICAgICAgICAgICAgICAgZmlsbEFuZFN0
cm9rZVBhdGgoY2hpbGRQYWludEluZm8uY29udGV4dCk7CisKKyAgICAgICAgICAgICAgICBpZiAo
c3ZnU3R5bGUtPmhhc01hcmtlcnMoKSkKKyAgICAgICAgICAgICAgICAgICAgbV9tYXJrZXJMYXlv
dXRJbmZvLmRyYXdNYXJrZXJzKGNoaWxkUGFpbnRJbmZvKTsKKyAgICAgICAgICAgIH0KKworICAg
ICAgICAgICAgU1ZHUmVuZGVyU3VwcG9ydDo6ZmluaXNoUmVuZGVyU1ZHQ29udGVudCh0aGlzLCBj
aGlsZFBhaW50SW5mbywgc2F2ZWRJbmZvLmNvbnRleHQpOworICAgICAgICB9CisKKyAgICAgICAg
aWYgKGRyYXdzT3V0bGluZSkKKyAgICAgICAgICAgIHBhaW50T3V0bGluZShjaGlsZFBhaW50SW5m
by5jb250ZXh0LCBJbnRSZWN0KGJvdW5kaW5nQm94KSk7CisgICAgfQorfQorCisvLyBUaGlzIG1l
dGhvZCBpcyBjYWxsZWQgZnJvbSBpbnNpZGUgcGFpbnRPdXRsaW5lKCkgc2luY2Ugd2UgY2FsbCBw
YWludE91dGxpbmUoKQorLy8gd2hpbGUgdHJhbnNmb3JtZWQgdG8gb3VyIGNvb3JkIHN5c3RlbSwg
cmV0dXJuIGxvY2FsIGNvb3Jkcwordm9pZCBSZW5kZXJTVkdTaGFwZTo6YWRkRm9jdXNSaW5nUmVj
dHMoVmVjdG9yPExheW91dFJlY3Q+JiByZWN0cywgY29uc3QgTGF5b3V0UG9pbnQmKQoreworICAg
IExheW91dFJlY3QgcmVjdCA9IGVuY2xvc2luZ0xheW91dFJlY3QocmVwYWludFJlY3RJbkxvY2Fs
Q29vcmRpbmF0ZXMoKSk7CisgICAgaWYgKCFyZWN0LmlzRW1wdHkoKSkKKyAgICAgICAgcmVjdHMu
YXBwZW5kKHJlY3QpOworfQorCitib29sIFJlbmRlclNWR1NoYXBlOjpub2RlQXRGbG9hdFBvaW50
KGNvbnN0IEhpdFRlc3RSZXF1ZXN0JiByZXF1ZXN0LCBIaXRUZXN0UmVzdWx0JiByZXN1bHQsIGNv
bnN0IEZsb2F0UG9pbnQmIHBvaW50SW5QYXJlbnQsIEhpdFRlc3RBY3Rpb24gaGl0VGVzdEFjdGlv
bikKK3sKKyAgICAvLyBXZSBvbmx5IGRyYXcgaW4gdGhlIGZvcmdyb3VuZCBwaGFzZSwgc28gd2Ug
b25seSBoaXQtdGVzdCB0aGVuLgorICAgIGlmIChoaXRUZXN0QWN0aW9uICE9IEhpdFRlc3RGb3Jl
Z3JvdW5kKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBGbG9hdFBvaW50IGxvY2FsUG9p
bnQgPSBtX2xvY2FsVHJhbnNmb3JtLmludmVyc2UoKS5tYXBQb2ludChwb2ludEluUGFyZW50KTsK
KworICAgIGlmICghU1ZHUmVuZGVyU3VwcG9ydDo6cG9pbnRJbkNsaXBwaW5nQXJlYSh0aGlzLCBs
b2NhbFBvaW50KSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgUG9pbnRlckV2ZW50c0hp
dFJ1bGVzIGhpdFJ1bGVzKFBvaW50ZXJFdmVudHNIaXRSdWxlczo6U1ZHX1BBVEhfSElUVEVTVElO
RywgcmVxdWVzdCwgc3R5bGUoKS0+cG9pbnRlckV2ZW50cygpKTsKKyAgICBib29sIGlzVmlzaWJs
ZSA9IChzdHlsZSgpLT52aXNpYmlsaXR5KCkgPT0gVklTSUJMRSk7CisgICAgaWYgKGlzVmlzaWJs
ZSB8fCAhaGl0UnVsZXMucmVxdWlyZVZpc2libGUpIHsKKyAgICAgICAgY29uc3QgU1ZHUmVuZGVy
U3R5bGUqIHN2Z1N0eWxlID0gc3R5bGUoKS0+c3ZnU3R5bGUoKTsKKyAgICAgICAgV2luZFJ1bGUg
ZmlsbFJ1bGUgPSBzdmdTdHlsZS0+ZmlsbFJ1bGUoKTsKKyAgICAgICAgaWYgKHJlcXVlc3Quc3Zn
Q2xpcENvbnRlbnQoKSkKKyAgICAgICAgICAgIGZpbGxSdWxlID0gc3ZnU3R5bGUtPmNsaXBSdWxl
KCk7CisgICAgICAgIGlmICgoaGl0UnVsZXMuY2FuSGl0U3Ryb2tlICYmIChzdmdTdHlsZS0+aGFz
U3Ryb2tlKCkgfHwgIWhpdFJ1bGVzLnJlcXVpcmVTdHJva2UpICYmIHN0cm9rZUNvbnRhaW5zKGxv
Y2FsUG9pbnQsIGhpdFJ1bGVzLnJlcXVpcmVTdHJva2UpKQorICAgICAgICAgICAgfHwgKGhpdFJ1
bGVzLmNhbkhpdEZpbGwgJiYgKHN2Z1N0eWxlLT5oYXNGaWxsKCkgfHwgIWhpdFJ1bGVzLnJlcXVp
cmVGaWxsKSAmJiBmaWxsQ29udGFpbnMobG9jYWxQb2ludCwgaGl0UnVsZXMucmVxdWlyZUZpbGws
IGZpbGxSdWxlKSkpIHsKKyAgICAgICAgICAgIHVwZGF0ZUhpdFRlc3RSZXN1bHQocmVzdWx0LCBy
b3VuZGVkTGF5b3V0UG9pbnQobG9jYWxQb2ludCkpOworICAgICAgICAgICAgcmV0dXJuIHRydWU7
CisgICAgICAgIH0KKyAgICB9CisgICAgcmV0dXJuIGZhbHNlOworfQorCitGbG9hdFJlY3QgUmVu
ZGVyU1ZHU2hhcGU6OmNhbGN1bGF0ZU1hcmtlckJvdW5kc0lmTmVlZGVkKCkKK3sKKyAgICBTVkdF
bGVtZW50KiBzdmdFbGVtZW50ID0gc3RhdGljX2Nhc3Q8U1ZHRWxlbWVudCo+KG5vZGUoKSk7Cisg
ICAgQVNTRVJUKHN2Z0VsZW1lbnQgJiYgc3ZnRWxlbWVudC0+ZG9jdW1lbnQoKSk7CisgICAgaWYg
KCFzdmdFbGVtZW50LT5pc1N0eWxlZCgpKQorICAgICAgICByZXR1cm4gRmxvYXRSZWN0KCk7CisK
KyAgICBTVkdTdHlsZWRFbGVtZW50KiBzdHlsZWRFbGVtZW50ID0gc3RhdGljX2Nhc3Q8U1ZHU3R5
bGVkRWxlbWVudCo+KHN2Z0VsZW1lbnQpOworICAgIGlmICghc3R5bGVkRWxlbWVudC0+c3VwcG9y
dHNNYXJrZXJzKCkpCisgICAgICAgIHJldHVybiBGbG9hdFJlY3QoKTsKKworICAgIEFTU0VSVChz
dHlsZSgpLT5zdmdTdHlsZSgpLT5oYXNNYXJrZXJzKCkpOworCisgICAgU1ZHUmVzb3VyY2VzKiBy
ZXNvdXJjZXMgPSBTVkdSZXNvdXJjZXNDYWNoZTo6Y2FjaGVkUmVzb3VyY2VzRm9yUmVuZGVyT2Jq
ZWN0KHRoaXMpOworICAgIGlmICghcmVzb3VyY2VzKQorICAgICAgICByZXR1cm4gRmxvYXRSZWN0
KCk7CisKKyAgICBSZW5kZXJTVkdSZXNvdXJjZU1hcmtlciogbWFya2VyU3RhcnQgPSByZXNvdXJj
ZXMtPm1hcmtlclN0YXJ0KCk7CisgICAgUmVuZGVyU1ZHUmVzb3VyY2VNYXJrZXIqIG1hcmtlck1p
ZCA9IHJlc291cmNlcy0+bWFya2VyTWlkKCk7CisgICAgUmVuZGVyU1ZHUmVzb3VyY2VNYXJrZXIq
IG1hcmtlckVuZCA9IHJlc291cmNlcy0+bWFya2VyRW5kKCk7CisgICAgaWYgKCFtYXJrZXJTdGFy
dCAmJiAhbWFya2VyTWlkICYmICFtYXJrZXJFbmQpCisgICAgICAgIHJldHVybiBGbG9hdFJlY3Qo
KTsKKworICAgIHJldHVybiBtX21hcmtlckxheW91dEluZm8uY2FsY3VsYXRlQm91bmRhcmllcyht
YXJrZXJTdGFydCwgbWFya2VyTWlkLCBtYXJrZXJFbmQsIHN0cm9rZVdpZHRoKCksIHBhdGgoKSk7
Cit9CisKK3ZvaWQgUmVuZGVyU1ZHU2hhcGU6OnVwZGF0ZUNhY2hlZEJvdW5kYXJpZXMoKQorewor
ICAgIGlmIChpc0VtcHR5KCkpIHsKKyAgICAgICAgbV9maWxsQm91bmRpbmdCb3ggPSBGbG9hdFJl
Y3QoKTsKKyAgICAgICAgbV9zdHJva2VBbmRNYXJrZXJCb3VuZGluZ0JveCA9IEZsb2F0UmVjdCgp
OworICAgICAgICBtX3JlcGFpbnRCb3VuZGluZ0JveCA9IEZsb2F0UmVjdCgpOworICAgICAgICBy
ZXR1cm47CisgICAgfQorCisgICAgLy8gQ2FjaGUgX3VuY2xpcHBlZF8gZmlsbCBib3VuZGluZyBi
b3gsIHVzZWQgZm9yIGNhbGN1bGF0aW9ucyBpbiByZXNvdXJjZXMKKyAgICBtX2ZpbGxCb3VuZGlu
Z0JveCA9IG9iamVjdEJvdW5kaW5nQm94KCk7CisKKyAgICAvLyBTcGVjKDExLjQpOiBBbnkgemVy
byBsZW5ndGggc3VicGF0aCBzaGFsbCBub3QgYmUgc3Ryb2tlZCBpZiB0aGUg4oCYc3Ryb2tlLWxp
bmVjYXDigJkgcHJvcGVydHkgaGFzIGEgdmFsdWUgb2YgYnV0dAorICAgIC8vIGJ1dCBzaGFsbCBi
ZSBzdHJva2VkIGlmIHRoZSDigJhzdHJva2UtbGluZWNhcOKAmSBwcm9wZXJ0eSBoYXMgYSB2YWx1
ZSBvZiByb3VuZCBvciBzcXVhcmUKKyAgICBpZiAoc2hvdWxkU3Ryb2tlWmVyb0xlbmd0aFN1YnBh
dGgoKSkgeworICAgICAgICBtX3N0cm9rZUFuZE1hcmtlckJvdW5kaW5nQm94ID0gemVyb0xlbmd0
aFN1YnBhdGhSZWN0KCk7CisgICAgICAgIC8vIENhY2hlIHNtYWxsZXN0IHBvc3NpYmxlIHJlcGFp
bnQgcmVjdGFuZ2xlCisgICAgICAgIG1fcmVwYWludEJvdW5kaW5nQm94ID0gbV9zdHJva2VBbmRN
YXJrZXJCb3VuZGluZ0JveDsKKyAgICAgICAgU1ZHUmVuZGVyU3VwcG9ydDo6aW50ZXJzZWN0UmVw
YWludFJlY3RXaXRoUmVzb3VyY2VzKHRoaXMsIG1fcmVwYWludEJvdW5kaW5nQm94KTsKKyAgICAg
ICAgcmV0dXJuOworICAgIH0KKworICAgIC8vIENhY2hlIF91bmNsaXBwZWRfIHN0cm9rZSBib3Vu
ZGluZyBib3gsIHVzZWQgZm9yIGNhbGN1bGF0aW9ucyBpbiByZXNvdXJjZXMgKGluY2x1ZGVzIG1h
cmtlciBib3VuZGFyaWVzKQorICAgIG1fc3Ryb2tlQW5kTWFya2VyQm91bmRpbmdCb3ggPSBtX2Zp
bGxCb3VuZGluZ0JveDsKKworICAgIGNvbnN0IFNWR1JlbmRlclN0eWxlKiBzdmdTdHlsZSA9IHN0
eWxlKCktPnN2Z1N0eWxlKCk7CisgICAgaWYgKHN2Z1N0eWxlLT5oYXNTdHJva2UoKSkKKyAgICAg
ICAgbV9zdHJva2VBbmRNYXJrZXJCb3VuZGluZ0JveC51bml0ZShzdHJva2VCb3VuZGluZ0JveCgp
KTsKKworICAgIGluZmxhdGVXaXRoTWFya2VyQm91bmRzKCk7CisKKyAgICAvLyBDYWNoZSBzbWFs
bGVzdCBwb3NzaWJsZSByZXBhaW50IHJlY3RhbmdsZQorICAgIG1fcmVwYWludEJvdW5kaW5nQm94
ID0gbV9zdHJva2VBbmRNYXJrZXJCb3VuZGluZ0JveDsKKyAgICBTVkdSZW5kZXJTdXBwb3J0Ojpp
bnRlcnNlY3RSZXBhaW50UmVjdFdpdGhSZXNvdXJjZXModGhpcywgbV9yZXBhaW50Qm91bmRpbmdC
b3gpOworfQorCitmbG9hdCBSZW5kZXJTVkdTaGFwZTo6c3Ryb2tlV2lkdGgoKSBjb25zdAorewor
ICAgIFNWR0VsZW1lbnQqIHN2Z0VsZW1lbnQgPSBzdGF0aWNfY2FzdDxTVkdFbGVtZW50Kj4obm9k
ZSgpKTsKKyAgICByZXR1cm4gc3R5bGUoKS0+c3ZnU3R5bGUoKS0+c3Ryb2tlV2lkdGgoKS52YWx1
ZShzdmdFbGVtZW50KTsKK30KKworfQorCisjZW5kaWYgLy8gRU5BQkxFKFNWRykKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHU2hhcGUuaCBiL1NvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHU2hhcGUuaApuZXcgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCAwMDAwMDAwLi45MmZjZWI4Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdTaGFwZS5oCkBAIC0wLDAgKzEsMTYwIEBACisv
KgorICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1LCAyMDA3IE5pa29sYXMgWmltbWVybWFubiA8
emltbWVybWFubkBrZGUub3JnPgorICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1IFJvYiBCdWlz
IDxidWlzQGtkZS5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDUgRXJpYyBTZWlkZWwgPGVyaWNA
d2Via2l0Lm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAwNiBBcHBsZSBDb21wdXRlciwgSW5jCisg
KiBDb3B5cmlnaHQgKEMpIDIwMDkgR29vZ2xlLCBJbmMuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEg
UmVuYXRhIEhvZG92YW4gPHJlbmlAd2Via2l0Lm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAxMSBV
bml2ZXJzaXR5IG9mIFN6ZWdlZAorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJl
OyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUg
dGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1
Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNp
b24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lv
bi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBp
dCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBl
dmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5l
cmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBo
YXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGlj
ZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJ
Qi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIElu
Yy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEw
LTEzMDEsIFVTQS4KKyAqLworCisjaWZuZGVmIFJlbmRlclNWR1NoYXBlX2gKKyNkZWZpbmUgUmVu
ZGVyU1ZHU2hhcGVfaAorCisjaWYgRU5BQkxFKFNWRykKKyNpbmNsdWRlICJBZmZpbmVUcmFuc2Zv
cm0uaCIKKyNpbmNsdWRlICJGbG9hdFJlY3QuaCIKKyNpbmNsdWRlICJSZW5kZXJTVkdNb2RlbE9i
amVjdC5oIgorI2luY2x1ZGUgIlNWR01hcmtlckxheW91dEluZm8uaCIKKyNpbmNsdWRlICJTdHJv
a2VTdHlsZUFwcGxpZXIuaCIKKyNpbmNsdWRlIDx3dGYvT3duUHRyLmg+CisKK25hbWVzcGFjZSBX
ZWJDb3JlIHsKKworY2xhc3MgRmxvYXRQb2ludDsKK2NsYXNzIEdyYXBoaWNzQ29udGV4dFN0YXRl
U2F2ZXI7CitjbGFzcyBSZW5kZXJTVkdDb250YWluZXI7CitjbGFzcyBSZW5kZXJTVkdQYXRoOwor
Y2xhc3MgU1ZHU3R5bGVkVHJhbnNmb3JtYWJsZUVsZW1lbnQ7CisKK2NsYXNzIEJvdW5kaW5nUmVj
dFN0cm9rZVN0eWxlQXBwbGllciA6IHB1YmxpYyBTdHJva2VTdHlsZUFwcGxpZXIgeworcHVibGlj
OgorICAgIEJvdW5kaW5nUmVjdFN0cm9rZVN0eWxlQXBwbGllcihjb25zdCBSZW5kZXJPYmplY3Qq
IG9iamVjdCwgUmVuZGVyU3R5bGUqIHN0eWxlKQorICAgICAgICA6IG1fb2JqZWN0KG9iamVjdCkK
KyAgICAgICAgLCBtX3N0eWxlKHN0eWxlKQorICAgIHsKKyAgICAgICAgQVNTRVJUKHN0eWxlKTsK
KyAgICAgICAgQVNTRVJUKG9iamVjdCk7CisgICAgfQorCisgICAgdm9pZCBzdHJva2VTdHlsZShH
cmFwaGljc0NvbnRleHQqIGdjKQorICAgIHsKKyAgICAgICAgU1ZHUmVuZGVyU3VwcG9ydDo6YXBw
bHlTdHJva2VTdHlsZVRvQ29udGV4dChnYywgbV9zdHlsZSwgbV9vYmplY3QpOworICAgIH0KKwor
cHJpdmF0ZToKKyAgICBjb25zdCBSZW5kZXJPYmplY3QqIG1fb2JqZWN0OworICAgIFJlbmRlclN0
eWxlKiBtX3N0eWxlOworfTsKKworY2xhc3MgUmVuZGVyU1ZHU2hhcGUgOiBwdWJsaWMgUmVuZGVy
U1ZHTW9kZWxPYmplY3QgeworcHVibGljOgorICAgIGV4cGxpY2l0IFJlbmRlclNWR1NoYXBlKFNW
R1N0eWxlZFRyYW5zZm9ybWFibGVFbGVtZW50Kik7CisgICAgUmVuZGVyU1ZHU2hhcGUoU1ZHU3R5
bGVkVHJhbnNmb3JtYWJsZUVsZW1lbnQqLCBQYXRoKiwgYm9vbCk7CisgICAgdmlydHVhbCB+UmVu
ZGVyU1ZHU2hhcGUoKTsKKworICAgIHZvaWQgc2V0TmVlZHNTaGFwZVVwZGF0ZSgpIHsgbV9uZWVk
c1NoYXBlVXBkYXRlID0gdHJ1ZTsgfQorICAgIHZpcnR1YWwgdm9pZCBzZXROZWVkc0JvdW5kYXJp
ZXNVcGRhdGUoKSB7IG1fbmVlZHNCb3VuZGFyaWVzVXBkYXRlID0gdHJ1ZTsgfQorICAgIHZpcnR1
YWwgdm9pZCBzZXROZWVkc1RyYW5zZm9ybVVwZGF0ZSgpIHsgbV9uZWVkc1RyYW5zZm9ybVVwZGF0
ZSA9IHRydWU7IH0KKyAgICB2aXJ0dWFsIHZvaWQgZmlsbFNoYXBlKEdyYXBoaWNzQ29udGV4dCop
IGNvbnN0OworICAgIHZpcnR1YWwgdm9pZCBzdHJva2VTaGFwZShHcmFwaGljc0NvbnRleHQqKSBj
b25zdDsKKyAgICBib29sIGlzUGFpbnRpbmdGYWxsYmFjaygpIGNvbnN0IHsgcmV0dXJuIG1fZmls
bEZhbGxiYWNrOyB9CisKKyAgICBQYXRoJiBwYXRoKCkgY29uc3QKKyAgICB7CisgICAgICAgIEFT
U0VSVChtX3BhdGgpOworICAgICAgICByZXR1cm4gKm1fcGF0aDsKKyAgICB9CisKK3Byb3RlY3Rl
ZDoKKyAgICB2aXJ0dWFsIHZvaWQgY3JlYXRlU2hhcGUoKTsKKyAgICB2aXJ0dWFsIGJvb2wgaXNF
bXB0eSgpIGNvbnN0OworICAgIHZpcnR1YWwgRmxvYXRSZWN0IG9iamVjdEJvdW5kaW5nQm94KCkg
Y29uc3Q7CisgICAgdmlydHVhbCBGbG9hdFJlY3Qgc3Ryb2tlQm91bmRpbmdCb3goKSBjb25zdDsK
KyAgICB2aXJ0dWFsIGJvb2wgc2hhcGVEZXBlbmRlbnRTdHJva2VDb250YWlucyhjb25zdCBGbG9h
dFBvaW50JikgY29uc3Q7CisgICAgdmlydHVhbCBib29sIHNoYXBlRGVwZW5kZW50RmlsbENvbnRh
aW5zKGNvbnN0IEZsb2F0UG9pbnQmLCBjb25zdCBXaW5kUnVsZSkgY29uc3Q7CisgICAgZmxvYXQg
c3Ryb2tlV2lkdGgoKSBjb25zdDsKKyAgICB2b2lkIHNldElzUGFpbnRpbmdGYWxsYmFjayhib29s
IGlzRmFsbGJhY2spIHsgbV9maWxsRmFsbGJhY2sgPSBpc0ZhbGxiYWNrOyB9CisgICAgRmxvYXRS
ZWN0IGNhbGN1bGF0ZU1hcmtlckJvdW5kc0lmTmVlZGVkKCk7CisgICAgdm9pZCBzZXRTdHJva2VB
bmRNYXJrZXJCb3VuZGluZ0JveChGbG9hdFJlY3QgcmVjdCkgeyBtX3N0cm9rZUFuZE1hcmtlckJv
dW5kaW5nQm94ID0gcmVjdDsgfQorCisgICAgYm9vbCBoYXNQYXRoKCkgY29uc3QgeyByZXR1cm4g
bV9wYXRoLmdldCgpOyB9CisKK3ByaXZhdGU6CisgICAgLy8gSGl0LWRldGVjdGlvbiBzZXBhcmF0
ZWQgZm9yIHRoZSBmaWxsIGFuZCB0aGUgc3Ryb2tlCisgICAgYm9vbCBmaWxsQ29udGFpbnMoY29u
c3QgRmxvYXRQb2ludCYsIGJvb2wgcmVxdWlyZXNGaWxsID0gdHJ1ZSwgY29uc3QgV2luZFJ1bGUg
ZmlsbFJ1bGUgPSBSVUxFX05PTlpFUk8pOworICAgIGJvb2wgc3Ryb2tlQ29udGFpbnMoY29uc3Qg
RmxvYXRQb2ludCYsIGJvb2wgcmVxdWlyZXNTdHJva2UgPSB0cnVlKTsKKworICAgIHZpcnR1YWwg
RmxvYXRSZWN0IHJlcGFpbnRSZWN0SW5Mb2NhbENvb3JkaW5hdGVzKCkgY29uc3QgeyByZXR1cm4g
bV9yZXBhaW50Qm91bmRpbmdCb3g7IH0KKyAgICB2aXJ0dWFsIGNvbnN0IEFmZmluZVRyYW5zZm9y
bSYgbG9jYWxUb1BhcmVudFRyYW5zZm9ybSgpIGNvbnN0IHsgcmV0dXJuIG1fbG9jYWxUcmFuc2Zv
cm07IH0KKyAgICB2aXJ0dWFsIEFmZmluZVRyYW5zZm9ybSBsb2NhbFRyYW5zZm9ybSgpIGNvbnN0
IHsgcmV0dXJuIG1fbG9jYWxUcmFuc2Zvcm07IH0KKworICAgIHZpcnR1YWwgYm9vbCBpc1NWR1No
YXBlKCkgY29uc3QgeyByZXR1cm4gdHJ1ZTsgfQorICAgIHZpcnR1YWwgY29uc3QgY2hhciogcmVu
ZGVyTmFtZSgpIGNvbnN0IHsgcmV0dXJuICJSZW5kZXJTVkdTaGFwZSI7IH0KKyAgICB2aXJ0dWFs
IGJvb2wgaXNSb3VuZGVkUmVjdCgpIHsgcmV0dXJuIGZhbHNlOyB9CisKKyAgICB2aXJ0dWFsIHZv
aWQgbGF5b3V0KCk7CisgICAgdmlydHVhbCB2b2lkIHBhaW50KFBhaW50SW5mbyYsIGNvbnN0IExh
eW91dFBvaW50Jik7CisgICAgdmlydHVhbCB2b2lkIGFkZEZvY3VzUmluZ1JlY3RzKFZlY3RvcjxM
YXlvdXRSZWN0PiYsIGNvbnN0IExheW91dFBvaW50Jik7CisgICAgdmlydHVhbCB2b2lkIGluZmxh
dGVXaXRoTWFya2VyQm91bmRzKCkgeyB9CisKKyAgICB2aXJ0dWFsIGJvb2wgbm9kZUF0RmxvYXRQ
b2ludChjb25zdCBIaXRUZXN0UmVxdWVzdCYsIEhpdFRlc3RSZXN1bHQmLCBjb25zdCBGbG9hdFBv
aW50JiBwb2ludEluUGFyZW50LCBIaXRUZXN0QWN0aW9uKTsKKworICAgIHZvaWQgdXBkYXRlQ2Fj
aGVkQm91bmRhcmllcygpOworCisgICAgdm9pZCBzZXR1cFNxdWFyZUNhcFBhdGgoaW50JiBhcHBs
eU1vZGUpOworICAgIGJvb2wgc2V0dXBOb25TY2FsaW5nU3Ryb2tlUGF0aChHcmFwaGljc0NvbnRl
eHRTdGF0ZVNhdmVyJik7CisgICAgYm9vbCBzaG91bGRTdHJva2VaZXJvTGVuZ3RoU3VicGF0aCgp
IGNvbnN0OworICAgIEZsb2F0UmVjdCB6ZXJvTGVuZ3RoU3VicGF0aFJlY3QoKSBjb25zdDsKKwor
ICAgIHZvaWQgZmlsbEFuZFN0cm9rZVBhdGgoR3JhcGhpY3NDb250ZXh0Kik7CisKK3ByaXZhdGU6
CisgICAgRmxvYXRSZWN0IG1fZmlsbEJvdW5kaW5nQm94OworICAgIEZsb2F0UmVjdCBtX3N0cm9r
ZUFuZE1hcmtlckJvdW5kaW5nQm94OworICAgIEZsb2F0UmVjdCBtX3JlcGFpbnRCb3VuZGluZ0Jv
eDsKKyAgICBTVkdNYXJrZXJMYXlvdXRJbmZvIG1fbWFya2VyTGF5b3V0SW5mbzsKKyAgICBBZmZp
bmVUcmFuc2Zvcm0gbV9sb2NhbFRyYW5zZm9ybTsKKyAgICBPd25QdHI8UGF0aD4gbV9wYXRoOwor
CisgICAgYm9vbCBtX25lZWRzQm91bmRhcmllc1VwZGF0ZSA6IDE7CisgICAgYm9vbCBtX25lZWRz
U2hhcGVVcGRhdGUgOiAxOworICAgIGJvb2wgbV9uZWVkc1RyYW5zZm9ybVVwZGF0ZSA6IDE7Cisg
ICAgYm9vbCBtX2ZpbGxGYWxsYmFjayA6IDE7CisgICAgYm9vbCBtX3N0cm9rZUNvbnRhaW5zRmFs
bEJhY2sgOiAxOworfTsKKworaW5saW5lIFJlbmRlclNWR1NoYXBlKiB0b1JlbmRlclNWR1NoYXBl
KFJlbmRlck9iamVjdCogb2JqZWN0KQoreworICAgIEFTU0VSVCghb2JqZWN0IHx8IG9iamVjdC0+
aXNTVkdTaGFwZSgpKTsKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8UmVuZGVyU1ZHU2hhcGUqPihv
YmplY3QpOworfQorCitpbmxpbmUgY29uc3QgUmVuZGVyU1ZHU2hhcGUqIHRvUmVuZGVyU1ZHU2hh
cGUoY29uc3QgUmVuZGVyT2JqZWN0KiBvYmplY3QpCit7CisgICAgQVNTRVJUKCFvYmplY3QgfHwg
b2JqZWN0LT5pc1NWR1NoYXBlKCkpOworICAgIHJldHVybiBzdGF0aWNfY2FzdDxjb25zdCBSZW5k
ZXJTVkdTaGFwZSo+KG9iamVjdCk7Cit9CisKKy8vIFRoaXMgd2lsbCBjYXRjaCBhbnlvbmUgZG9p
bmcgYW4gdW5uZWNlc3NhcnkgY2FzdC4KK3ZvaWQgdG9SZW5kZXJTVkdTaGFwZShjb25zdCBSZW5k
ZXJTVkdTaGFwZSopOworCit9CisKKyNlbmRpZiAvLyBFTkFCTEUoU1ZHKQorI2VuZGlmCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR0lubGluZVRleHRCb3guY3Bw
IGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdJbmxpbmVUZXh0Qm94LmNwcAppbmRl
eCBjMWM1YWZhLi5lOGMyYWY4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
c3ZnL1NWR0lubGluZVRleHRCb3guY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9z
dmcvU1ZHSW5saW5lVGV4dEJveC5jcHAKQEAgLTM3Nyw3ICszNzcsNyBAQCB2b2lkIFNWR0lubGlu
ZVRleHRCb3g6OnJlbGVhc2VQYWludGluZ1Jlc291cmNlKEdyYXBoaWNzQ29udGV4dComIGNvbnRl
eHQsIGNvbnN0CiAgICAgUmVuZGVyT2JqZWN0KiBwYXJlbnRSZW5kZXJlciA9IHBhcmVudCgpLT5y
ZW5kZXJlcigpOwogICAgIEFTU0VSVChwYXJlbnRSZW5kZXJlcik7CiAKLSAgICBtX3BhaW50aW5n
UmVzb3VyY2UtPnBvc3RBcHBseVJlc291cmNlKHBhcmVudFJlbmRlcmVyLCBjb250ZXh0LCBtX3Bh
aW50aW5nUmVzb3VyY2VNb2RlLCBwYXRoKTsKKyAgICBtX3BhaW50aW5nUmVzb3VyY2UtPnBvc3RB
cHBseVJlc291cmNlKHBhcmVudFJlbmRlcmVyLCBjb250ZXh0LCBtX3BhaW50aW5nUmVzb3VyY2VN
b2RlLCBwYXRoLCAvKlJlbmRlclNWR1NoYXBlKi8gMCk7CiAgICAgbV9wYWludGluZ1Jlc291cmNl
ID0gMDsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdS
ZW5kZXJTdXBwb3J0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHUmVuZGVy
U3VwcG9ydC5jcHAKaW5kZXggMDA3OTIxOS4uYmMxMDEzOSAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdSZW5kZXJTdXBwb3J0LmNwcAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvc3ZnL1NWR1JlbmRlclN1cHBvcnQuY3BwCkBAIC0xNTMsNyArMTUzLDcg
QEAgdm9pZCBTVkdSZW5kZXJTdXBwb3J0OjpmaW5pc2hSZW5kZXJTVkdDb250ZW50KFJlbmRlck9i
amVjdCogb2JqZWN0LCBQYWludEluZm8mIHAKICAgICBTVkdSZXNvdXJjZXMqIHJlc291cmNlcyA9
IFNWR1Jlc291cmNlc0NhY2hlOjpjYWNoZWRSZXNvdXJjZXNGb3JSZW5kZXJPYmplY3Qob2JqZWN0
KTsKICAgICBpZiAocmVzb3VyY2VzKSB7CiAgICAgICAgIGlmIChSZW5kZXJTVkdSZXNvdXJjZUZp
bHRlciogZmlsdGVyID0gcmVzb3VyY2VzLT5maWx0ZXIoKSkgewotICAgICAgICAgICAgZmlsdGVy
LT5wb3N0QXBwbHlSZXNvdXJjZShvYmplY3QsIHBhaW50SW5mby5jb250ZXh0LCBBcHBseVRvRGVm
YXVsdE1vZGUsIC8qIHBhdGggKi8wKTsKKyAgICAgICAgICAgIGZpbHRlci0+cG9zdEFwcGx5UmVz
b3VyY2Uoc3RhdGljX2Nhc3Q8UmVuZGVyU1ZHU2hhcGUqPihvYmplY3QpLCBwYWludEluZm8uY29u
dGV4dCwgQXBwbHlUb0RlZmF1bHRNb2RlLCAwLCAwKTsKICAgICAgICAgICAgIHBhaW50SW5mby5j
b250ZXh0ID0gc2F2ZWRDb250ZXh0OwogICAgICAgICB9CiAgICAgfQpAQCAtMjI1LDkgKzIyNSw5
IEBAIHZvaWQgU1ZHUmVuZGVyU3VwcG9ydDo6bGF5b3V0Q2hpbGRyZW4oUmVuZGVyT2JqZWN0KiBz
dGFydCwgYm9vbCBzZWxmTmVlZHNMYXlvdXQpCiAgICAgICAgICAgICAvLyBXaGVuIHNlbGZOZWVk
c0xheW91dCBpcyBmYWxzZSBhbmQgdGhlIGxheW91dCBzaXplIGNoYW5nZWQsIHdlIGhhdmUgdG8g
Y2hlY2sgd2hldGhlciB0aGlzIGNoaWxkIHVzZXMgcmVsYXRpdmUgbGVuZ3RocwogICAgICAgICAg
ICAgaWYgKFNWR0VsZW1lbnQqIGVsZW1lbnQgPSBjaGlsZC0+bm9kZSgpLT5pc1NWR0VsZW1lbnQo
KSA/IHN0YXRpY19jYXN0PFNWR0VsZW1lbnQqPihjaGlsZC0+bm9kZSgpKSA6IDApIHsKICAgICAg
ICAgICAgICAgICBpZiAoZWxlbWVudC0+aXNTdHlsZWQoKSAmJiBzdGF0aWNfY2FzdDxTVkdTdHls
ZWRFbGVtZW50Kj4oZWxlbWVudCktPmhhc1JlbGF0aXZlTGVuZ3RocygpKSB7Ci0gICAgICAgICAg
ICAgICAgICAgIC8vIFdoZW4gdGhlIGxheW91dCBzaXplIGNoYW5nZWQgYW5kIHdoZW4gdXNpbmcg
cmVsYXRpdmUgdmFsdWVzIHRlbGwgdGhlIFJlbmRlclNWR1BhdGggdG8gdXBkYXRlIGl0cyBQYXRo
IG9iamVjdAotICAgICAgICAgICAgICAgICAgICBpZiAoY2hpbGQtPmlzU1ZHUGF0aCgpKQotICAg
ICAgICAgICAgICAgICAgICAgICAgdG9SZW5kZXJTVkdQYXRoKGNoaWxkKS0+c2V0TmVlZHNQYXRo
VXBkYXRlKCk7CisgICAgICAgICAgICAgICAgICAgIC8vIFdoZW4gdGhlIGxheW91dCBzaXplIGNo
YW5nZWQgYW5kIHdoZW4gdXNpbmcgcmVsYXRpdmUgdmFsdWVzIHRlbGwgdGhlIFJlbmRlclNWR1No
YXBlIHRvIHVwZGF0ZSBpdHMgc2hhcGUgb2JqZWN0CisgICAgICAgICAgICAgICAgICAgIGlmIChj
aGlsZC0+aXNTVkdTaGFwZSgpKQorICAgICAgICAgICAgICAgICAgICAgICAgdG9SZW5kZXJTVkdT
aGFwZShjaGlsZCktPnNldE5lZWRzU2hhcGVVcGRhdGUoKTsKIAogICAgICAgICAgICAgICAgICAg
ICBuZWVkc0xheW91dCA9IHRydWU7CiAgICAgICAgICAgICAgICAgfQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdSZW5kZXJUcmVlQXNUZXh0LmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHUmVuZGVyVHJlZUFzVGV4dC5jcHAKaW5kZXggYTE2
Mjk2OS4uZDFhZDcyYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9T
VkdSZW5kZXJUcmVlQXNUZXh0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3Zn
L1NWR1JlbmRlclRyZWVBc1RleHQuY3BwCkBAIC01NSw2ICs1NSw3IEBACiAjaW5jbHVkZSAiUmVu
ZGVyU1ZHUmVzb3VyY2VSYWRpYWxHcmFkaWVudC5oIgogI2luY2x1ZGUgIlJlbmRlclNWR1Jlc291
cmNlU29saWRDb2xvci5oIgogI2luY2x1ZGUgIlJlbmRlclNWR1Jvb3QuaCIKKyNpbmNsdWRlICJS
ZW5kZXJTVkdTaGFwZS5oIgogI2luY2x1ZGUgIlJlbmRlclNWR1RleHQuaCIKICNpbmNsdWRlICJS
ZW5kZXJUcmVlQXNUZXh0LmgiCiAjaW5jbHVkZSAiU1ZHQ2lyY2xlRWxlbWVudC5oIgpAQCAtMjg5
LDE4ICsyOTAsMTggQEAgc3RhdGljIHZvaWQgd3JpdGVTdHlsZShUZXh0U3RyZWFtJiB0cywgY29u
c3QgUmVuZGVyT2JqZWN0JiBvYmplY3QpCiAgICAgICAgIHdyaXRlTmFtZVZhbHVlUGFpcih0cywg
InRyYW5zZm9ybSIsIG9iamVjdC5sb2NhbFRyYW5zZm9ybSgpKTsKICAgICB3cml0ZUlmTm90RGVm
YXVsdCh0cywgImltYWdlIHJlbmRlcmluZyIsIHN0eWxlLT5pbWFnZVJlbmRlcmluZygpLCBSZW5k
ZXJTdHlsZTo6aW5pdGlhbEltYWdlUmVuZGVyaW5nKCkpOwogICAgIHdyaXRlSWZOb3REZWZhdWx0
KHRzLCAib3BhY2l0eSIsIHN0eWxlLT5vcGFjaXR5KCksIFJlbmRlclN0eWxlOjppbml0aWFsT3Bh
Y2l0eSgpKTsKLSAgICBpZiAob2JqZWN0LmlzU1ZHUGF0aCgpKSB7Ci0gICAgICAgIGNvbnN0IFJl
bmRlclNWR1BhdGgmIHBhdGggPSBzdGF0aWNfY2FzdDxjb25zdCBSZW5kZXJTVkdQYXRoJj4ob2Jq
ZWN0KTsKLSAgICAgICAgQVNTRVJUKHBhdGgubm9kZSgpKTsKLSAgICAgICAgQVNTRVJUKHBhdGgu
bm9kZSgpLT5pc1NWR0VsZW1lbnQoKSk7CisgICAgaWYgKG9iamVjdC5pc1NWR1NoYXBlKCkpIHsK
KyAgICAgICAgY29uc3QgUmVuZGVyU1ZHU2hhcGUmIHNoYXBlID0gc3RhdGljX2Nhc3Q8Y29uc3Qg
UmVuZGVyU1ZHU2hhcGUmPihvYmplY3QpOworICAgICAgICBBU1NFUlQoc2hhcGUubm9kZSgpKTsK
KyAgICAgICAgQVNTRVJUKHNoYXBlLm5vZGUoKS0+aXNTVkdFbGVtZW50KCkpOwogCiAgICAgICAg
IENvbG9yIGZhbGxiYWNrQ29sb3I7Ci0gICAgICAgIGlmIChSZW5kZXJTVkdSZXNvdXJjZSogc3Ry
b2tlUGFpbnRpbmdSZXNvdXJjZSA9IFJlbmRlclNWR1Jlc291cmNlOjpzdHJva2VQYWludGluZ1Jl
c291cmNlKGNvbnN0X2Nhc3Q8UmVuZGVyU1ZHUGF0aCo+KCZwYXRoKSwgcGF0aC5zdHlsZSgpLCBm
YWxsYmFja0NvbG9yKSkgeworICAgICAgICBpZiAoUmVuZGVyU1ZHUmVzb3VyY2UqIHN0cm9rZVBh
aW50aW5nUmVzb3VyY2UgPSBSZW5kZXJTVkdSZXNvdXJjZTo6c3Ryb2tlUGFpbnRpbmdSZXNvdXJj
ZShjb25zdF9jYXN0PFJlbmRlclNWR1NoYXBlKj4oJnNoYXBlKSwgc2hhcGUuc3R5bGUoKSwgZmFs
bGJhY2tDb2xvcikpIHsKICAgICAgICAgICAgIFRleHRTdHJlYW1TZXBhcmF0b3IgcygiICIpOwog
ICAgICAgICAgICAgdHMgPDwgIiBbc3Ryb2tlPXsiIDw8IHM7CiAgICAgICAgICAgICB3cml0ZVNW
R1BhaW50aW5nUmVzb3VyY2UodHMsIHN0cm9rZVBhaW50aW5nUmVzb3VyY2UpOwogCi0gICAgICAg
ICAgICBTVkdFbGVtZW50KiBlbGVtZW50ID0gc3RhdGljX2Nhc3Q8U1ZHRWxlbWVudCo+KHBhdGgu
bm9kZSgpKTsKKyAgICAgICAgICAgIFNWR0VsZW1lbnQqIGVsZW1lbnQgPSBzdGF0aWNfY2FzdDxT
VkdFbGVtZW50Kj4oc2hhcGUubm9kZSgpKTsKICAgICAgICAgICAgIGRvdWJsZSBkYXNoT2Zmc2V0
ID0gc3ZnU3R5bGUtPnN0cm9rZURhc2hPZmZzZXQoKS52YWx1ZShlbGVtZW50KTsKICAgICAgICAg
ICAgIGRvdWJsZSBzdHJva2VXaWR0aCA9IHN2Z1N0eWxlLT5zdHJva2VXaWR0aCgpLnZhbHVlKGVs
ZW1lbnQpOwogICAgICAgICAgICAgY29uc3QgVmVjdG9yPFNWR0xlbmd0aD4mIGRhc2hlcyA9IHN2
Z1N0eWxlLT5zdHJva2VEYXNoQXJyYXkoKTsKQEAgLTMyMiw3ICszMjMsNyBAQCBzdGF0aWMgdm9p
ZCB3cml0ZVN0eWxlKFRleHRTdHJlYW0mIHRzLCBjb25zdCBSZW5kZXJPYmplY3QmIG9iamVjdCkK
ICAgICAgICAgICAgIHRzIDw8ICJ9XSI7CiAgICAgICAgIH0KIAotICAgICAgICBpZiAoUmVuZGVy
U1ZHUmVzb3VyY2UqIGZpbGxQYWludGluZ1Jlc291cmNlID0gUmVuZGVyU1ZHUmVzb3VyY2U6OmZp
bGxQYWludGluZ1Jlc291cmNlKGNvbnN0X2Nhc3Q8UmVuZGVyU1ZHUGF0aCo+KCZwYXRoKSwgcGF0
aC5zdHlsZSgpLCBmYWxsYmFja0NvbG9yKSkgeworICAgICAgICBpZiAoUmVuZGVyU1ZHUmVzb3Vy
Y2UqIGZpbGxQYWludGluZ1Jlc291cmNlID0gUmVuZGVyU1ZHUmVzb3VyY2U6OmZpbGxQYWludGlu
Z1Jlc291cmNlKGNvbnN0X2Nhc3Q8UmVuZGVyU1ZHU2hhcGUqPigmc2hhcGUpLCBzaGFwZS5zdHls
ZSgpLCBmYWxsYmFja0NvbG9yKSkgewogICAgICAgICAgICAgVGV4dFN0cmVhbVNlcGFyYXRvciBz
KCIgIik7CiAgICAgICAgICAgICB0cyA8PCAiIFtmaWxsPXsiIDw8IHM7CiAgICAgICAgICAgICB3
cml0ZVNWR1BhaW50aW5nUmVzb3VyY2UodHMsIGZpbGxQYWludGluZ1Jlc291cmNlKTsKQEAgLTM0
NiwxMiArMzQ3LDEyIEBAIHN0YXRpYyBUZXh0U3RyZWFtJiB3cml0ZVBvc2l0aW9uQW5kU3R5bGUo
VGV4dFN0cmVhbSYgdHMsIGNvbnN0IFJlbmRlck9iamVjdCYgb2JqCiAgICAgcmV0dXJuIHRzOwog
fQogCi1zdGF0aWMgVGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiB0cywgY29uc3Qg
UmVuZGVyU1ZHUGF0aCYgcGF0aCkKK3N0YXRpYyBUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRT
dHJlYW0mIHRzLCBjb25zdCBSZW5kZXJTVkdTaGFwZSYgc2hhcGUpCiB7Ci0gICAgd3JpdGVQb3Np
dGlvbkFuZFN0eWxlKHRzLCBwYXRoKTsKKyAgICB3cml0ZVBvc2l0aW9uQW5kU3R5bGUodHMsIHNo
YXBlKTsKIAotICAgIEFTU0VSVChwYXRoLm5vZGUoKS0+aXNTVkdFbGVtZW50KCkpOwotICAgIFNW
R0VsZW1lbnQqIHN2Z0VsZW1lbnQgPSBzdGF0aWNfY2FzdDxTVkdFbGVtZW50Kj4ocGF0aC5ub2Rl
KCkpOworICAgIEFTU0VSVChzaGFwZS5ub2RlKCktPmlzU1ZHRWxlbWVudCgpKTsKKyAgICBTVkdF
bGVtZW50KiBzdmdFbGVtZW50ID0gc3RhdGljX2Nhc3Q8U1ZHRWxlbWVudCo+KHNoYXBlLm5vZGUo
KSk7CiAKICAgICBpZiAoc3ZnRWxlbWVudC0+aGFzVGFnTmFtZShTVkdOYW1lczo6cmVjdFRhZykp
IHsKICAgICAgICAgU1ZHUmVjdEVsZW1lbnQqIGVsZW1lbnQgPSBzdGF0aWNfY2FzdDxTVkdSZWN0
RWxlbWVudCo+KHN2Z0VsZW1lbnQpOwpAQCAtNjUzLDExICs2NTQsMTEgQEAgdm9pZCB3cml0ZVNW
R0ltYWdlKFRleHRTdHJlYW0mIHRzLCBjb25zdCBSZW5kZXJTVkdJbWFnZSYgaW1hZ2UsIGludCBp
bmRlbnQpCiAgICAgd3JpdGVSZXNvdXJjZXModHMsIGltYWdlLCBpbmRlbnQpOwogfQogCi12b2lk
IHdyaXRlKFRleHRTdHJlYW0mIHRzLCBjb25zdCBSZW5kZXJTVkdQYXRoJiBwYXRoLCBpbnQgaW5k
ZW50KQordm9pZCB3cml0ZShUZXh0U3RyZWFtJiB0cywgY29uc3QgUmVuZGVyU1ZHU2hhcGUmIHNo
YXBlLCBpbnQgaW5kZW50KQogewotICAgIHdyaXRlU3RhbmRhcmRQcmVmaXgodHMsIHBhdGgsIGlu
ZGVudCk7Ci0gICAgdHMgPDwgcGF0aCA8PCAiXG4iOwotICAgIHdyaXRlUmVzb3VyY2VzKHRzLCBw
YXRoLCBpbmRlbnQpOworICAgIHdyaXRlU3RhbmRhcmRQcmVmaXgodHMsIHNoYXBlLCBpbmRlbnQp
OworICAgIHRzIDw8IHNoYXBlIDw8ICJcbiI7CisgICAgd3JpdGVSZXNvdXJjZXModHMsIHNoYXBl
LCBpbmRlbnQpOwogfQogCiB2b2lkIHdyaXRlU1ZHR3JhZGllbnRTdG9wKFRleHRTdHJlYW0mIHRz
LCBjb25zdCBSZW5kZXJTVkdHcmFkaWVudFN0b3AmIHN0b3AsIGludCBpbmRlbnQpCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR1JlbmRlclRyZWVBc1RleHQuaCBi
L1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHUmVuZGVyVHJlZUFzVGV4dC5oCmluZGV4
IGNlMDdhNWMuLjM1OThjODMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9z
dmcvU1ZHUmVuZGVyVHJlZUFzVGV4dC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9z
dmcvU1ZHUmVuZGVyVHJlZUFzVGV4dC5oCkBAIC00MSwxNCArNDEsMTQgQEAgY2xhc3MgUmVuZGVy
SW1hZ2U7CiBjbGFzcyBSZW5kZXJPYmplY3Q7CiBjbGFzcyBSZW5kZXJTVkdHcmFkaWVudFN0b3A7
CiBjbGFzcyBSZW5kZXJTVkdJbWFnZTsKLWNsYXNzIFJlbmRlclNWR1BhdGg7CitjbGFzcyBSZW5k
ZXJTVkdTaGFwZTsKIGNsYXNzIFJlbmRlclNWR1Jvb3Q7CiBjbGFzcyBSZW5kZXJUZXh0OwogY2xh
c3MgQWZmaW5lVHJhbnNmb3JtOwogY2xhc3MgU1ZHVW5pdFR5cGVzOwogCiAvLyBmdW5jdGlvbnMg
dXNlZCBieSB0aGUgbWFpbiBSZW5kZXJUcmVlQXNUZXh0IGNvZGUKLXZvaWQgd3JpdGUoVGV4dFN0
cmVhbSYsIGNvbnN0IFJlbmRlclNWR1BhdGgmLCBpbnQgaW5kZW50KTsKK3ZvaWQgd3JpdGUoVGV4
dFN0cmVhbSYsIGNvbnN0IFJlbmRlclNWR1NoYXBlJiwgaW50IGluZGVudCk7CiB2b2lkIHdyaXRl
KFRleHRTdHJlYW0mLCBjb25zdCBSZW5kZXJTVkdSb290JiwgaW50IGluZGVudCk7CiB2b2lkIHdy
aXRlU1ZHR3JhZGllbnRTdG9wKFRleHRTdHJlYW0mLCBjb25zdCBSZW5kZXJTVkdHcmFkaWVudFN0
b3AmLCBpbnQgaW5kZW50KTsKIHZvaWQgd3JpdGVTVkdSZXNvdXJjZUNvbnRhaW5lcihUZXh0U3Ry
ZWFtJiwgY29uc3QgUmVuZGVyT2JqZWN0JiwgaW50IGluZGVudCk7CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR1RleHRSdW5SZW5kZXJpbmdDb250ZXh0LmNwcCBi
L1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHVGV4dFJ1blJlbmRlcmluZ0NvbnRleHQu
Y3BwCmluZGV4IDMzYWNmOTIuLjMxNjk5NDIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9zdmcvU1ZHVGV4dFJ1blJlbmRlcmluZ0NvbnRleHQuY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHVGV4dFJ1blJlbmRlcmluZ0NvbnRleHQuY3BwCkBAIC0x
NTQsMTMgKzE1NCwxMyBAQCB2b2lkIFNWR1RleHRSdW5SZW5kZXJpbmdDb250ZXh0OjpkcmF3U1ZH
R2x5cGhzKEdyYXBoaWNzQ29udGV4dCogY29udGV4dCwgY29uc3QgVAogCiAgICAgICAgIFBhdGgg
Z2x5cGhQYXRoID0gc3ZnR2x5cGgucGF0aERhdGE7CiAgICAgICAgIGdseXBoUGF0aC50cmFuc2Zv
cm0oZ2x5cGhQYXRoVHJhbnNmb3JtKTsKLQogICAgICAgICBpZiAoYWN0aXZlUGFpbnRpbmdSZXNv
dXJjZS0+YXBwbHlSZXNvdXJjZShwYXJlbnRSZW5kZXJPYmplY3QsIHBhcmVudFJlbmRlck9iamVj
dFN0eWxlLCBjb250ZXh0LCByZXNvdXJjZU1vZGUpKSB7CiAgICAgICAgICAgICBpZiAocmVuZGVy
T2JqZWN0ICYmIHJlbmRlck9iamVjdC0+aXNTVkdJbmxpbmVUZXh0KCkpIHsKKwogICAgICAgICAg
ICAgICAgIGNvbnN0IFJlbmRlclNWR0lubGluZVRleHQqIHRleHRSZW5kZXJlciA9IHRvUmVuZGVy
U1ZHSW5saW5lVGV4dChyZW5kZXJPYmplY3QpOwogICAgICAgICAgICAgICAgIGNvbnRleHQtPnNl
dFN0cm9rZVRoaWNrbmVzcyhjb250ZXh0LT5zdHJva2VUaGlja25lc3MoKSAqIHRleHRSZW5kZXJl
ci0+c2NhbGluZ0ZhY3RvcigpKTsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGFjdGl2ZVBh
aW50aW5nUmVzb3VyY2UtPnBvc3RBcHBseVJlc291cmNlKHBhcmVudFJlbmRlck9iamVjdCwgY29u
dGV4dCwgcmVzb3VyY2VNb2RlLCAmZ2x5cGhQYXRoKTsKKyAgICAgICAgICAgIGFjdGl2ZVBhaW50
aW5nUmVzb3VyY2UtPnBvc3RBcHBseVJlc291cmNlKHBhcmVudFJlbmRlck9iamVjdCwgY29udGV4
dCwgcmVzb3VyY2VNb2RlLCAmZ2x5cGhQYXRoLCAwKTsKICAgICAgICAgIH0KICAKICAgICAgICAg
Y29udGV4dC0+cmVzdG9yZSgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0Np
cmNsZUVsZW1lbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0NpcmNsZUVsZW1lbnQuY3Bw
CmluZGV4IDJhZTY5YjguLjAzNjY5ZTAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9T
VkdDaXJjbGVFbGVtZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHQ2lyY2xlRWxl
bWVudC5jcHAKQEAgLTEyNCw3ICsxMjQsNyBAQCB2b2lkIFNWR0NpcmNsZUVsZW1lbnQ6OnN2Z0F0
dHJpYnV0ZUNoYW5nZWQoY29uc3QgUXVhbGlmaWVkTmFtZSYgYXR0ck5hbWUpCiAgICAgICAgIHJl
dHVybjsKIAogICAgIGlmIChpc0xlbmd0aEF0dHJpYnV0ZSkgewotICAgICAgICByZW5kZXJlci0+
c2V0TmVlZHNQYXRoVXBkYXRlKCk7CisgICAgICAgIHJlbmRlcmVyLT5zZXROZWVkc1NoYXBlVXBk
YXRlKCk7CiAgICAgICAgIFJlbmRlclNWR1Jlc291cmNlOjptYXJrRm9yTGF5b3V0QW5kUGFyZW50
UmVzb3VyY2VJbnZhbGlkYXRpb24ocmVuZGVyZXIpOwogICAgICAgICByZXR1cm47CiAgICAgfQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0VsbGlwc2VFbGVtZW50LmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL3N2Zy9TVkdFbGxpcHNlRWxlbWVudC5jcHAKaW5kZXggY2VhMDY2ZC4uY2Ew
MTdjNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0VsbGlwc2VFbGVtZW50LmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRWxsaXBzZUVsZW1lbnQuY3BwCkBAIC0xMjks
NyArMTI5LDcgQEAgdm9pZCBTVkdFbGxpcHNlRWxlbWVudDo6c3ZnQXR0cmlidXRlQ2hhbmdlZChj
b25zdCBRdWFsaWZpZWROYW1lJiBhdHRyTmFtZSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgaWYg
KGlzTGVuZ3RoQXR0cmlidXRlKSB7Ci0gICAgICAgIHJlbmRlcmVyLT5zZXROZWVkc1BhdGhVcGRh
dGUoKTsKKyAgICAgICAgcmVuZGVyZXItPnNldE5lZWRzU2hhcGVVcGRhdGUoKTsKICAgICAgICAg
UmVuZGVyU1ZHUmVzb3VyY2U6Om1hcmtGb3JMYXlvdXRBbmRQYXJlbnRSZXNvdXJjZUludmFsaWRh
dGlvbihyZW5kZXJlcik7CiAgICAgICAgIHJldHVybjsKICAgICB9CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9zdmcvU1ZHTGluZUVsZW1lbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvc3ZnL1NW
R0xpbmVFbGVtZW50LmNwcAppbmRleCBjN2NhMTFlLi5iMWJiOGVhIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9zdmcvU1ZHTGluZUVsZW1lbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3N2
Zy9TVkdMaW5lRWxlbWVudC5jcHAKQEAgLTEyOSw3ICsxMjksNyBAQCB2b2lkIFNWR0xpbmVFbGVt
ZW50OjpzdmdBdHRyaWJ1dGVDaGFuZ2VkKGNvbnN0IFF1YWxpZmllZE5hbWUmIGF0dHJOYW1lKQog
ICAgICAgICByZXR1cm47CiAKICAgICBpZiAoaXNMZW5ndGhBdHRyaWJ1dGUpIHsKLSAgICAgICAg
cmVuZGVyZXItPnNldE5lZWRzUGF0aFVwZGF0ZSgpOworICAgICAgICByZW5kZXJlci0+c2V0TmVl
ZHNTaGFwZVVwZGF0ZSgpOwogICAgICAgICBSZW5kZXJTVkdSZXNvdXJjZTo6bWFya0ZvckxheW91
dEFuZFBhcmVudFJlc291cmNlSW52YWxpZGF0aW9uKHJlbmRlcmVyKTsKICAgICAgICAgcmV0dXJu
OwogICAgIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdQYXRoRWxlbWVudC5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHUGF0aEVsZW1lbnQuY3BwCmluZGV4IGE3YTMzN2Uu
LmZlMzM1OTUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdQYXRoRWxlbWVudC5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvc3ZnL1NWR1BhdGhFbGVtZW50LmNwcApAQCAtMjY5LDcg
KzI2OSw3IEBAIHZvaWQgU1ZHUGF0aEVsZW1lbnQ6OnN2Z0F0dHJpYnV0ZUNoYW5nZWQoY29uc3Qg
UXVhbGlmaWVkTmFtZSYgYXR0ck5hbWUpCiAgICAgICAgIH0KIAogICAgICAgICBpZiAocmVuZGVy
ZXIpCi0gICAgICAgICAgICByZW5kZXJlci0+c2V0TmVlZHNQYXRoVXBkYXRlKCk7CisgICAgICAg
ICAgICByZW5kZXJlci0+c2V0TmVlZHNTaGFwZVVwZGF0ZSgpOwogICAgIH0KIAogICAgIGlmIChy
ZW5kZXJlcikKQEAgLTM1NSwxMCArMzU1LDE2IEBAIHZvaWQgU1ZHUGF0aEVsZW1lbnQ6OnBhdGhT
ZWdMaXN0Q2hhbmdlZChTVkdQYXRoU2VnUm9sZSByb2xlKQogICAgIGlmICghcmVuZGVyZXIpCiAg
ICAgICAgIHJldHVybjsKIAotICAgIHJlbmRlcmVyLT5zZXROZWVkc1BhdGhVcGRhdGUoKTsKKyAg
ICByZW5kZXJlci0+c2V0TmVlZHNTaGFwZVVwZGF0ZSgpOwogICAgIFJlbmRlclNWR1Jlc291cmNl
OjptYXJrRm9yTGF5b3V0QW5kUGFyZW50UmVzb3VyY2VJbnZhbGlkYXRpb24ocmVuZGVyZXIpOwog
fQogCitSZW5kZXJPYmplY3QqIFNWR1BhdGhFbGVtZW50OjpjcmVhdGVSZW5kZXJlcihSZW5kZXJB
cmVuYSogYXJlbmEsIFJlbmRlclN0eWxlKikKK3sKKyAgICAvLyBCeSBkZWZhdWx0LCBhbnkgc3Vi
Y2xhc3MgaXMgZXhwZWN0ZWQgdG8gZG8gcGF0aC1iYXNlZCBkcmF3aW5nCisgICAgcmV0dXJuIG5l
dyAoYXJlbmEpIFJlbmRlclNWR1BhdGgodGhpcyk7Cit9CisKIH0KIAogI2VuZGlmIC8vIEVOQUJM
RShTVkcpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHUGF0aEVsZW1lbnQuaCBi
L1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdQYXRoRWxlbWVudC5oCmluZGV4IDFkMzdkMGUuLjU0Yjhm
ZTIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdQYXRoRWxlbWVudC5oCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdQYXRoRWxlbWVudC5oCkBAIC0xMjIsNiArMTIyLDggQEAg
cHJpdmF0ZToKICAgICB2aXJ0dWFsIHZvaWQgc3luY2hyb25pemVSZXF1aXJlZEV4dGVuc2lvbnMo
KSB7IFNWR1Rlc3RzOjpzeW5jaHJvbml6ZVJlcXVpcmVkRXh0ZW5zaW9ucyh0aGlzKTsgfQogICAg
IHZpcnR1YWwgdm9pZCBzeW5jaHJvbml6ZVN5c3RlbUxhbmd1YWdlKCkgeyBTVkdUZXN0czo6c3lu
Y2hyb25pemVTeXN0ZW1MYW5ndWFnZSh0aGlzKTsgfQogCisgICAgUmVuZGVyT2JqZWN0KiBjcmVh
dGVSZW5kZXJlcihSZW5kZXJBcmVuYSosIFJlbmRlclN0eWxlKik7CisKIHByaXZhdGU6CiAgICAg
T3duUHRyPFNWR1BhdGhCeXRlU3RyZWFtPiBtX3BhdGhCeXRlU3RyZWFtOwogICAgIG11dGFibGUg
U1ZHU3luY2hyb25pemFibGVBbmltYXRlZFByb3BlcnR5PFNWR1BhdGhTZWdMaXN0PiBtX3BhdGhT
ZWdMaXN0OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvc3ZnL1NWR1BvbHlFbGVtZW50LmNw
cCBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdQb2x5RWxlbWVudC5jcHAKaW5kZXggNjE2Yjg2Ny4u
ZjMwY2E0YSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvc3ZnL1NWR1BvbHlFbGVtZW50LmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHUG9seUVsZW1lbnQuY3BwCkBAIC0xMjQsNyAr
MTI0LDcgQEAgdm9pZCBTVkdQb2x5RWxlbWVudDo6c3ZnQXR0cmlidXRlQ2hhbmdlZChjb25zdCBR
dWFsaWZpZWROYW1lJiBhdHRyTmFtZSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgaWYgKGF0dHJO
YW1lID09IFNWR05hbWVzOjpwb2ludHNBdHRyKSB7Ci0gICAgICAgIHJlbmRlcmVyLT5zZXROZWVk
c1BhdGhVcGRhdGUoKTsKKyAgICAgICAgcmVuZGVyZXItPnNldE5lZWRzU2hhcGVVcGRhdGUoKTsK
ICAgICAgICAgUmVuZGVyU1ZHUmVzb3VyY2U6Om1hcmtGb3JMYXlvdXRBbmRQYXJlbnRSZXNvdXJj
ZUludmFsaWRhdGlvbihyZW5kZXJlcik7CiAgICAgICAgIHJldHVybjsKICAgICB9CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHUmVjdEVsZW1lbnQuY3BwIGIvU291cmNlL1dlYkNv
cmUvc3ZnL1NWR1JlY3RFbGVtZW50LmNwcAppbmRleCBlODQ3NzRkLi4xODc5ZTBhIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHUmVjdEVsZW1lbnQuY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3N2Zy9TVkdSZWN0RWxlbWVudC5jcHAKQEAgLTI1LDYgKzI1LDcgQEAKIAogI2luY2x1
ZGUgIkF0dHJpYnV0ZS5oIgogI2luY2x1ZGUgIlJlbmRlclNWR1BhdGguaCIKKyNpbmNsdWRlICJS
ZW5kZXJTVkdSZWN0LmgiCiAjaW5jbHVkZSAiUmVuZGVyU1ZHUmVzb3VyY2UuaCIKICNpbmNsdWRl
ICJTVkdFbGVtZW50SW5zdGFuY2UuaCIKICNpbmNsdWRlICJTVkdMZW5ndGguaCIKQEAgLTMyLDYg
KzMzLDggQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCitjbGFzcyBSZW5kZXJTVkdSZWN0Owor
CiAvLyBBbmltYXRlZCBwcm9wZXJ0eSBkZWZpbml0aW9ucwogREVGSU5FX0FOSU1BVEVEX0xFTkdU
SChTVkdSZWN0RWxlbWVudCwgU1ZHTmFtZXM6OnhBdHRyLCBYLCB4KQogREVGSU5FX0FOSU1BVEVE
X0xFTkdUSChTVkdSZWN0RWxlbWVudCwgU1ZHTmFtZXM6OnlBdHRyLCBZLCB5KQpAQCAtMTM3LDEy
ICsxNDAsMTIgQEAgdm9pZCBTVkdSZWN0RWxlbWVudDo6c3ZnQXR0cmlidXRlQ2hhbmdlZChjb25z
dCBRdWFsaWZpZWROYW1lJiBhdHRyTmFtZSkKICAgICBpZiAoU1ZHVGVzdHM6OmhhbmRsZUF0dHJp
YnV0ZUNoYW5nZSh0aGlzLCBhdHRyTmFtZSkpCiAgICAgICAgIHJldHVybjsKIAotICAgIFJlbmRl
clNWR1BhdGgqIHJlbmRlcmVyID0gc3RhdGljX2Nhc3Q8UmVuZGVyU1ZHUGF0aCo+KHRoaXMtPnJl
bmRlcmVyKCkpOworICAgIFJlbmRlclNWR1JlY3QqIHJlbmRlcmVyID0gc3RhdGljX2Nhc3Q8UmVu
ZGVyU1ZHUmVjdCo+KHRoaXMtPnJlbmRlcmVyKCkpOwogICAgIGlmICghcmVuZGVyZXIpCiAgICAg
ICAgIHJldHVybjsKIAogICAgIGlmIChpc0xlbmd0aEF0dHJpYnV0ZSkgewotICAgICAgICByZW5k
ZXJlci0+c2V0TmVlZHNQYXRoVXBkYXRlKCk7CisgICAgICAgIHJlbmRlcmVyLT5zZXROZWVkc1No
YXBlVXBkYXRlKCk7CiAgICAgICAgIFJlbmRlclNWR1Jlc291cmNlOjptYXJrRm9yTGF5b3V0QW5k
UGFyZW50UmVzb3VyY2VJbnZhbGlkYXRpb24ocmVuZGVyZXIpOwogICAgICAgICByZXR1cm47CiAg
ICAgfQpAQCAtMTk4LDYgKzIwMSwxMSBAQCBib29sIFNWR1JlY3RFbGVtZW50OjpzZWxmSGFzUmVs
YXRpdmVMZW5ndGhzKCkgY29uc3QKICAgICAgICAgfHwgcnkoKS5pc1JlbGF0aXZlKCk7CiB9CiAK
K1JlbmRlck9iamVjdCogU1ZHUmVjdEVsZW1lbnQ6OmNyZWF0ZVJlbmRlcmVyKFJlbmRlckFyZW5h
KiBhcmVuYSwgUmVuZGVyU3R5bGUqKQoreworICAgIHJldHVybiBuZXcgKGFyZW5hKSBSZW5kZXJT
VkdSZWN0KHRoaXMpOworfQorCiB9CiAKICNlbmRpZiAvLyBFTkFCTEUoU1ZHKQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvc3ZnL1NWR1JlY3RFbGVtZW50LmggYi9Tb3VyY2UvV2ViQ29yZS9z
dmcvU1ZHUmVjdEVsZW1lbnQuaAppbmRleCA5OTQzN2YzLi45YmY2MDJmIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9zdmcvU1ZHUmVjdEVsZW1lbnQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9z
dmcvU1ZHUmVjdEVsZW1lbnQuaApAQCAtNTIsNiArNTIsOCBAQCBwcml2YXRlOgogCiAgICAgdmly
dHVhbCBib29sIHNlbGZIYXNSZWxhdGl2ZUxlbmd0aHMoKSBjb25zdDsKIAorICAgIFJlbmRlck9i
amVjdCogY3JlYXRlUmVuZGVyZXIoUmVuZGVyQXJlbmEqLCBSZW5kZXJTdHlsZSopOworCiAgICAg
QkVHSU5fREVDTEFSRV9BTklNQVRFRF9QUk9QRVJUSUVTKFNWR1JlY3RFbGVtZW50KQogICAgICAg
ICBERUNMQVJFX0FOSU1BVEVEX0xFTkdUSChYLCB4KQogICAgICAgICBERUNMQVJFX0FOSU1BVEVE
X0xFTkdUSChZLCB5KQotLSAKMS43LjQuMQoK
</data>
<flag name="review"
          id="104426"
          type_id="1"
          status="-"
          setter="kling"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>109287</attachid>
            <date>2011-09-30 05:37:54 -0700</date>
            <delta_ts>2011-10-05 06:29:33 -0700</delta_ts>
            <desc>Propsed patch</desc>
            <filename>0001-RenderSVGRect-and-tests.patch</filename>
            <type>text/plain</type>
            <size>108762</size>
            <attacher name="Renata Hodovan">rhodovan.u-szeged</attacher>
            
              <data encoding="base64">RnJvbSBlNGNkY2IxYzUyZDM5MDE3OWFkYjZjYWQ0OTdlYzkxZjkzNTI2NmQ2IE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBSZW5hdGEgSG9kb3ZhbiA8cmVuaUB3ZWJraXQub3JnPgpEYXRl
OiBGcmksIDMwIFNlcCAyMDExIDE0OjI1OjM1ICswMjAwClN1YmplY3Q6IFtQQVRDSF0gUmVuZGVy
U1ZHUmVjdCBhbmQgdGVzdHMKCi0tLQogLi4uL3BvaW50ZXItZXZlbnRzLW9uLXJvdW5kZWQtcmVj
dC1leHBlY3RlZC50eHQgICAgfCAgICAxICsKIC4uLi9jdXN0b20vcG9pbnRlci1ldmVudHMtb24t
cm91bmRlZC1yZWN0LnhodG1sICAgIHwgICA2NiArKysKIC4uLmVudHMtd2l0aC1saW5lY2Fwcy1h
bmQtbWl0ZXJsaW1pdHMtZXhwZWN0ZWQudHh0IHwgICAgMSArCiAuLi5udGVyLWV2ZW50cy13aXRo
LWxpbmVjYXBzLWFuZC1taXRlcmxpbWl0cy54aHRtbCB8ICAgNjggKysrCiBTb3VyY2UvV2ViQ29y
ZS9DTWFrZUxpc3RzLnR4dCAgICAgICAgICAgICAgICAgICAgICB8ICAgIDIgKwogU291cmNlL1dl
YkNvcmUvQ2hhbmdlTG9nICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgMTU4ICsrKysrKysK
IFNvdXJjZS9XZWJDb3JlL0dOVW1ha2VmaWxlLmxpc3QuYW0gICAgICAgICAgICAgICAgIHwgICAg
NCArCiBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkgICAgICAgICAgICAgICAgICAgICAgICB8
ICAgIDQgKwogU291cmNlL1dlYkNvcmUvV2ViQ29yZS5wcm8gICAgICAgICAgICAgICAgICAgICAg
ICAgfCAgICA0ICsKIFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUudmNwcm9qL1dlYkNvcmUudmNwcm9q
ICAgICAgIHwgIDExMiArKysrKwogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRmxv
YXRSZWN0LmNwcCAgICAgfCAgICA3ICsKIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L0Zsb2F0UmVjdC5oICAgICAgIHwgICAgNyArLQogLi4uL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0dy
YXBoaWNzQ29udGV4dENHLmNwcCAgICAgfCAgICAxICsKIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9SZW5kZXJPYmplY3QuaCAgICAgICAgICAgIHwgICAgMiArCiBTb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVyVHJlZUFzVGV4dC5jcHAgICAgICB8ICAgIDYgKy0KIFNvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHQWxsSW5PbmUuY3BwIHwgICAgMiArCiAuLi4vV2ViQ29y
ZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR01vZGVsT2JqZWN0LmNwcCB8ICAgIDIgKy0KIFNvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUGF0aC5jcHAgICAgIHwgIDM1NSArLS0t
LS0tLS0tLS0tLS0tCiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1BhdGgu
aCAgICAgICB8ICAgNzIgKy0tLQogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJT
VkdSZWN0LmNwcCAgICAgfCAgMTI3ICsrKysrKwogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2
Zy9SZW5kZXJTVkdSZWN0LmggICAgICAgfCAgIDYzICsrKwogU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJjZS5oICAgfCAgICAzICstCiAuLi4vcmVuZGVyaW5nL3N2
Zy9SZW5kZXJTVkdSZXNvdXJjZUNsaXBwZXIuY3BwICAgICB8ICAgIDcgKy0KIC4uLi9yZW5kZXJp
bmcvc3ZnL1JlbmRlclNWR1Jlc291cmNlQ29udGFpbmVyLmNwcCAgIHwgICAgMiArLQogLi4uL3Jl
bmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VGaWx0ZXIuY3BwICAgICAgfCAgICA0ICstCiAu
Li4vcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJjZUZpbHRlci5oICAgICAgICB8ICAgIDIg
Ky0KIC4uLi9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291cmNlR3JhZGllbnQuY3BwICAgIHwg
ICAyMSArLQogLi4uL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VHcmFkaWVudC5oICAg
ICAgfCAgICAyICstCiAuLi4vcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJjZVBhdHRlcm4u
Y3BwICAgICB8ICAgMTQgKy0KIC4uLi9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291cmNlUGF0
dGVybi5oICAgICAgIHwgICAgMiArLQogLi4uL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVzb3Vy
Y2VTb2xpZENvbG9yLmNwcCAgfCAgIDE1ICstCiAuLi4vcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdS
ZXNvdXJjZVNvbGlkQ29sb3IuaCAgICB8ICAgIDIgKy0KIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9zdmcvUmVuZGVyU1ZHU2hhcGUuY3BwICAgIHwgIDQ0NSArKysrKysrKysrKysrKysrKysrKwog
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdTaGFwZS5oICAgICAgfCAgMTY2
ICsrKysrKysrCiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR0lubGluZVRleHRCb3gu
Y3BwICB8ICAgIDIgKy0KIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHUmVuZGVyU3Vw
cG9ydC5jcHAgIHwgICAgOSArLQogLi4uL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdSZW5kZXJU
cmVlQXNUZXh0LmNwcCAgfCAgIDMxICstCiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NW
R1JlbmRlclRyZWVBc1RleHQuaCB8ICAgIDQgKy0KIC4uLi9yZW5kZXJpbmcvc3ZnL1NWR1RleHRS
dW5SZW5kZXJpbmdDb250ZXh0LmNwcCAgIHwgICAgMiArLQogU291cmNlL1dlYkNvcmUvc3ZnL1NW
R0NpcmNsZUVsZW1lbnQuY3BwICAgICAgICAgICAgfCAgICAyICstCiBTb3VyY2UvV2ViQ29yZS9z
dmcvU1ZHRWxsaXBzZUVsZW1lbnQuY3BwICAgICAgICAgICB8ICAgIDIgKy0KIFNvdXJjZS9XZWJD
b3JlL3N2Zy9TVkdMaW5lRWxlbWVudC5jcHAgICAgICAgICAgICAgIHwgICAgMiArLQogU291cmNl
L1dlYkNvcmUvc3ZnL1NWR1BhdGhFbGVtZW50LmNwcCAgICAgICAgICAgICAgfCAgIDEwICstCiBT
b3VyY2UvV2ViQ29yZS9zdmcvU1ZHUGF0aEVsZW1lbnQuaCAgICAgICAgICAgICAgICB8ICAgIDIg
KwogU291cmNlL1dlYkNvcmUvc3ZnL1NWR1BvbHlFbGVtZW50LmNwcCAgICAgICAgICAgICAgfCAg
ICAyICstCiBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHUmVjdEVsZW1lbnQuY3BwICAgICAgICAgICAg
ICB8ICAgMTIgKy0KIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdSZWN0RWxlbWVudC5oICAgICAgICAg
ICAgICAgIHwgICAgMiArCiA0NyBmaWxlcyBjaGFuZ2VkLCAxMzU3IGluc2VydGlvbnMoKyksIDQ3
NCBkZWxldGlvbnMoLSkKIGNyZWF0ZSBtb2RlIDEwMDY0NCBMYXlvdXRUZXN0cy9zdmcvY3VzdG9t
L3BvaW50ZXItZXZlbnRzLW9uLXJvdW5kZWQtcmVjdC1leHBlY3RlZC50eHQKIGNyZWF0ZSBtb2Rl
IDEwMDY0NCBMYXlvdXRUZXN0cy9zdmcvY3VzdG9tL3BvaW50ZXItZXZlbnRzLW9uLXJvdW5kZWQt
cmVjdC54aHRtbAogY3JlYXRlIG1vZGUgMTAwNjQ0IExheW91dFRlc3RzL3N2Zy9jdXN0b20vcG9p
bnRlci1ldmVudHMtd2l0aC1saW5lY2Fwcy1hbmQtbWl0ZXJsaW1pdHMtZXhwZWN0ZWQudHh0CiBj
cmVhdGUgbW9kZSAxMDA2NDQgTGF5b3V0VGVzdHMvc3ZnL2N1c3RvbS9wb2ludGVyLWV2ZW50cy13
aXRoLWxpbmVjYXBzLWFuZC1taXRlcmxpbWl0cy54aHRtbAogY3JlYXRlIG1vZGUgMTAwNjQ0IFNv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVjdC5jcHAKIGNyZWF0ZSBtb2Rl
IDEwMDY0NCBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1JlY3QuaAogY3Jl
YXRlIG1vZGUgMTAwNjQ0IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHU2hh
cGUuY3BwCiBjcmVhdGUgbW9kZSAxMDA2NDQgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9S
ZW5kZXJTVkdTaGFwZS5oCgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvc3ZnL2N1c3RvbS9wb2lu
dGVyLWV2ZW50cy1vbi1yb3VuZGVkLXJlY3QtZXhwZWN0ZWQudHh0IGIvTGF5b3V0VGVzdHMvc3Zn
L2N1c3RvbS9wb2ludGVyLWV2ZW50cy1vbi1yb3VuZGVkLXJlY3QtZXhwZWN0ZWQudHh0Cm5ldyBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYxNWJhZTAKLS0tIC9kZXYvbnVsbAorKysg
Yi9MYXlvdXRUZXN0cy9zdmcvY3VzdG9tL3BvaW50ZXItZXZlbnRzLW9uLXJvdW5kZWQtcmVjdC1l
eHBlY3RlZC50eHQKQEAgLTAsMCArMSBAQAorUEFTU0VEOiBmYWxsYmFja1JlY3QgaGFkIHBvaW50
ZXIKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3N2Zy9jdXN0b20vcG9pbnRlci1ldmVudHMtb24t
cm91bmRlZC1yZWN0LnhodG1sIGIvTGF5b3V0VGVzdHMvc3ZnL2N1c3RvbS9wb2ludGVyLWV2ZW50
cy1vbi1yb3VuZGVkLXJlY3QueGh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw
MC4uYzYzZDEyMgotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL3N2Zy9jdXN0b20vcG9p
bnRlci1ldmVudHMtb24tcm91bmRlZC1yZWN0LnhodG1sCkBAIC0wLDAgKzEsNjYgQEAKKzxodG1s
IHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sJz4KKzxib2R5IHN0eWxlPSJtYXJn
aW46IDBweDsgcGFkZGluZzogMHB4Ij4KKworPHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcv
MjAwMC9zdmciIHN0eWxlPSJwb3NpdGlvbjphYnNvbHV0ZTsiPgorPGRlZnM+CisKKzxzdHlsZSB0
eXBlPSJ0ZXh0L2NzcyI+PCFbQ0RBVEFbCityZWN0I3JvdW5kZWRSZWN0IHsKKyAgICBmaWxsOiBu
b25lOworICAgIHN0cm9rZTogZ3JlZW47CisgICAgc3Ryb2tlLXdpZHRoOiAyMHB4OworICAgIHN0
cm9rZS1saW5lam9pbjogYmV2ZWw7Cit9CityZWN0OmhvdmVyIHsKKyAgICBzdHJva2U6IHJlZDsK
K30KK11dPjwvc3R5bGU+Cis8L2RlZnM+CisKKzxyZWN0IGlkPSJmYWxsYmFjayIgeD0iMzAiIHk9
IjMwIiB3aWR0aD0iNDIwIiBoZWlnaHQ9IjMyMCIgZmlsbD0ieWVsbG93IiBvbmNsaWNrPSJwYXNz
ZWQoKSIvPgorPHJlY3QgaWQ9InJvdW5kZWRSZWN0IiB4PSI0MCIgeT0iNDAiIHJ4PSIzMCIgcnk9
IjMwIiB3aWR0aD0iNDAwIiBoZWlnaHQ9IjMwMCIgcG9pbnRlci1ldmVudHM9InZpc2libGVTdHJv
a2UiIG9uY2xpY2s9ImZhaWxlZCgpIi8+Cis8dGV4dCBpZD0idGV4dCIgeD0iMzAiIHk9IjM3MCI+
PC90ZXh0PgorCis8c2NyaXB0IHR5cGU9InRleHQvZWNtYXNjcmlwdCI+CisgICAgPCFbQ0RBVEFb
CisKK3ZhciBmYWxsYmFjayA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJmYWxsYmFjayIpOwor
dmFyIHJvdW5kZWRSZWN0ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoInJvdW5kZWRSZWN0Iik7
Cit2YXIgdGV4dCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJ0ZXh0Iik7CisKKyAgICBmYWxs
YmFjay5hZGRFdmVudExpc3RlbmVyKCJtb3VzZWRvd24iLCBwYXNzZWQsIGZhbHNlKTsKKyAgICBy
b3VuZGVkUmVjdC5hZGRFdmVudExpc3RlbmVyKCJtb3VzZWRvd24iLCBmYWlsZWQsIGZhbHNlKTsK
KworZnVuY3Rpb24gc3RvcCgpIHsKKyAgICBmYWxsYmFjay5yZW1vdmVFdmVudExpc3RlbmVyKCJt
b3VzZWRvd24iLCBmYWlsZWQsIGZhbHNlKTsKKyAgICByb3VuZGVkUmVjdC5yZW1vdmVFdmVudExp
c3RlbmVyKCJtb3VzZWRvd24iLCBwYXNzZWQsIGZhbHNlKTsKKworICAgIGlmICh3aW5kb3cubGF5
b3V0VGVzdENvbnRyb2xsZXIpCisgICAgbGF5b3V0VGVzdENvbnRyb2xsZXIubm90aWZ5RG9uZSgp
OworfQorCitmdW5jdGlvbiBmYWlsZWQoKSB7CisgICAgdGV4dC50ZXh0Q29udGVudCA9ICdGQUlM
RUQ6IHN0cm9rZVJlY3QgaGFkIHBvaW50ZXInOworICAgIHN0b3AoKTsKK30KKworZnVuY3Rpb24g
cGFzc2VkKCkgeworICAgdGV4dC50ZXh0Q29udGVudCA9ICdQQVNTRUQ6IGZhbGxiYWNrUmVjdCBo
YWQgcG9pbnRlcic7CisgICBzdG9wKCk7Cit9CisKK2lmICh3aW5kb3cubGF5b3V0VGVzdENvbnRy
b2xsZXIpIHsKKyAgIGxheW91dFRlc3RDb250cm9sbGVyLndhaXRVbnRpbERvbmUoKTsKKyAgIGxh
eW91dFRlc3RDb250cm9sbGVyLmR1bXBBc1RleHQoKTsKK30KKworaWYgKHdpbmRvdy5ldmVudFNl
bmRlcikgeworICAgIGV2ZW50U2VuZGVyLm1vdXNlTW92ZVRvKDMxLCAzMSk7CisgICAgZXZlbnRT
ZW5kZXIubW91c2VEb3duKCk7Cit9CitdXT4KKzwvc2NyaXB0PgorCis8L3N2Zz4KKzwvYm9keT4K
KzwvaHRtbD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9MYXlvdXRU
ZXN0cy9zdmcvY3VzdG9tL3BvaW50ZXItZXZlbnRzLXdpdGgtbGluZWNhcHMtYW5kLW1pdGVybGlt
aXRzLWV4cGVjdGVkLnR4dCBiL0xheW91dFRlc3RzL3N2Zy9jdXN0b20vcG9pbnRlci1ldmVudHMt
d2l0aC1saW5lY2Fwcy1hbmQtbWl0ZXJsaW1pdHMtZXhwZWN0ZWQudHh0Cm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYxNWJhZTAKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRU
ZXN0cy9zdmcvY3VzdG9tL3BvaW50ZXItZXZlbnRzLXdpdGgtbGluZWNhcHMtYW5kLW1pdGVybGlt
aXRzLWV4cGVjdGVkLnR4dApAQCAtMCwwICsxIEBACitQQVNTRUQ6IGZhbGxiYWNrUmVjdCBoYWQg
cG9pbnRlcgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvc3ZnL2N1c3RvbS9wb2ludGVyLWV2ZW50
cy13aXRoLWxpbmVjYXBzLWFuZC1taXRlcmxpbWl0cy54aHRtbCBiL0xheW91dFRlc3RzL3N2Zy9j
dXN0b20vcG9pbnRlci1ldmVudHMtd2l0aC1saW5lY2Fwcy1hbmQtbWl0ZXJsaW1pdHMueGh0bWwK
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTIyNmI3MAotLS0gL2Rldi9udWxs
CisrKyBiL0xheW91dFRlc3RzL3N2Zy9jdXN0b20vcG9pbnRlci1ldmVudHMtd2l0aC1saW5lY2Fw
cy1hbmQtbWl0ZXJsaW1pdHMueGh0bWwKQEAgLTAsMCArMSw2OCBAQAorPGh0bWwgeG1sbnM9J2h0
dHA6Ly93d3cudzMub3JnLzE5OTkveGh0bWwnPgorPGJvZHkgc3R5bGU9Im1hcmdpbjogMHB4OyBw
YWRkaW5nOiAwcHgiPgorCis8c3ZnIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIg
c3R5bGU9InBvc2l0aW9uOmFic29sdXRlOyI+Cis8ZGVmcz4KKworPHN0eWxlIHR5cGU9InRleHQv
Y3NzIj48IVtDREFUQVsKK3JlY3Qjc3Ryb2tlZFJlY3QgeworICAgIGZpbGw6IG5vbmU7CisgICAg
c3Ryb2tlOiBibHVlOworICAgIHN0cm9rZS13aWR0aDogMjBweDsKKyAgICBzdHJva2UtbGluZWNh
cDogc3F1YXJlOworICAgIHN0cm9rZS1taXRlcmxpbWl0OiAxOworfQorcmVjdCNzdHJva2VkUmVj
dDpob3ZlciB7CisgICAgc3Ryb2tlOiByZWQ7Cit9CitdXT48L3N0eWxlPgorPC9kZWZzPgorCis8
cmVjdCBpZD0iZmFsbGJhY2siIHg9IjAiIHk9IjAiIHdpZHRoPSIyMTAiIGhlaWdodD0iMjEwIiBm
aWxsPSJncmVlbiIgb25jbGljaz0icGFzc2VkKCkiLz4KKzxyZWN0IGlkPSJzdHJva2VkUmVjdCIg
eD0iMTAiIHk9IjEwIiB3aWR0aD0iMTkwIiBoZWlnaHQ9IjE5MCIgcG9pbnRlci1ldmVudHM9InZp
c2libGVTdHJva2UiIG9uY2xpY2s9ImZhaWxlZCgpIi8+Cis8dGV4dCBpZD0idGV4dCIgeD0iMCIg
eT0iMjMwIj48L3RleHQ+CisKKzxzY3JpcHQgdHlwZT0idGV4dC9lY21hc2NyaXB0Ij4KKyAgICA8
IVtDREFUQVsKKwordmFyIGZhbGxiYWNrID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImZhbGxi
YWNrIik7Cit2YXIgc3Ryb2tlZFJlY3QgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgic3Ryb2tl
ZFJlY3QiKTsKK3ZhciB0ZXh0ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoInRleHQiKTsKKwor
ZmFsbGJhY2suYWRkRXZlbnRMaXN0ZW5lcigibW91c2Vkb3duIiwgcGFzc2VkLCBmYWxzZSk7Citz
dHJva2VkUmVjdC5hZGRFdmVudExpc3RlbmVyKCJtb3VzZWRvd24iLCBmYWlsZWQsIGZhbHNlKTsK
KworZnVuY3Rpb24gc3RvcCgpIHsKKyAgICBmYWxsYmFjay5yZW1vdmVFdmVudExpc3RlbmVyKCJt
b3VzZWRvd24iLCBmYWlsZWQsIGZhbHNlKTsKKyAgICBzdHJva2VkUmVjdC5yZW1vdmVFdmVudExp
c3RlbmVyKCJtb3VzZWRvd24iLCBwYXNzZWQsIGZhbHNlKTsKKworaWYgKHdpbmRvdy5sYXlvdXRU
ZXN0Q29udHJvbGxlcikKKyAgICBsYXlvdXRUZXN0Q29udHJvbGxlci5ub3RpZnlEb25lKCk7Cit9
CisKK2Z1bmN0aW9uIGZhaWxlZCgpIHsKKyAgICB0ZXh0LnRleHRDb250ZW50ID0gJ0ZBSUxFRDog
c3Ryb2tlUmVjdCBoYWQgcG9pbnRlcic7CisgICAgc3RvcCgpOworfQorCitmdW5jdGlvbiBwYXNz
ZWQoKSB7CisgICAgdGV4dC50ZXh0Q29udGVudCA9ICdQQVNTRUQ6IGZhbGxiYWNrUmVjdCBoYWQg
cG9pbnRlcic7CisgICAgc3RvcCgpOworfQorCitpZiAod2luZG93LmxheW91dFRlc3RDb250cm9s
bGVyKSB7CisgICAgbGF5b3V0VGVzdENvbnRyb2xsZXIud2FpdFVudGlsRG9uZSgpOworICAgIGxh
eW91dFRlc3RDb250cm9sbGVyLmR1bXBBc1RleHQoKTsKK30KKworaWYgKHdpbmRvdy5ldmVudFNl
bmRlcikgeworICAgIGV2ZW50U2VuZGVyLm1vdXNlTW92ZVRvKDEsIDEpOworICAgIGV2ZW50U2Vu
ZGVyLm1vdXNlRG93bigpOworfQorCitdXT4KKzwvc2NyaXB0PgorPC9zdmc+CisKKzwvYm9keT4K
KzwvaHRtbD4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NNYWtlTGlzdHMudHh0IGIvU291
cmNlL1dlYkNvcmUvQ01ha2VMaXN0cy50eHQKaW5kZXggZDJkYTMzYi4uOGM0NDM5NCAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvQ01ha2VMaXN0cy50eHQKKysrIGIvU291cmNlL1dlYkNvcmUv
Q01ha2VMaXN0cy50eHQKQEAgLTE2MDcsNiArMTYwNyw3IEBAIElGIChFTkFCTEVfU1ZHKQogICAg
ICAgICByZW5kZXJpbmcvc3ZnL1JlbmRlclNWR0lubGluZVRleHQuY3BwCiAgICAgICAgIHJlbmRl
cmluZy9zdmcvUmVuZGVyU1ZHTW9kZWxPYmplY3QuY3BwCiAgICAgICAgIHJlbmRlcmluZy9zdmcv
UmVuZGVyU1ZHUGF0aC5jcHAKKyAgICAgICAgcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZWN0LmNw
cAogICAgICAgICByZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291cmNlLmNwcAogICAgICAgICBy
ZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291cmNlQ2xpcHBlci5jcHAKICAgICAgICAgcmVuZGVy
aW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJjZUNvbnRhaW5lci5jcHAKQEAgLTE2MjEsNiArMTYyMiw3
IEBAIElGIChFTkFCTEVfU1ZHKQogICAgICAgICByZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291
cmNlU29saWRDb2xvci5jcHAKICAgICAgICAgcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSb290LmNw
cAogICAgICAgICByZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1NoYWRvd1RyZWVSb290Q29udGFpbmVy
LmNwcAorICAgICAgICByZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1NoYXBlLmNwcAogICAgICAgICBy
ZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1RTcGFuLmNwcAogICAgICAgICByZW5kZXJpbmcvc3ZnL1Jl
bmRlclNWR1RleHQuY3BwCiAgICAgICAgIHJlbmRlcmluZy9zdmcvUmVuZGVyU1ZHVGV4dFBhdGgu
Y3BwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29y
ZS9DaGFuZ2VMb2cKaW5kZXggOGQzMmMxYi4uYzk5OWMxNSAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsx
LDE2MSBAQAorMjAxMS0wOS0zMCAgUmVuYXRhIEhvZG92YW4gIDxyZW5pQHdlYmtpdC5vcmc+CisK
KyAgICAgICAgQWRkIG5ldyByZW5kZXJlciBmb3IgU1ZHUmVjdEVsZW1lbnQuCisgICAgICAgIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD02NTc2OQorCisgICAgICAgIFRo
aXMgcGF0Y2ggaW50cm9kdWNlcyBhIG5ldyBjb21tb24gYmFzZSBjbGFzcyBjYWxsZWQgUmVuZGVy
U1ZHU2hhcGUgd2hpY2gKKyAgICAgICAgcmVwbGFjZXMgdGhlIFJlbmRlclNWR1BhdGguIFRoaXMg
bmV3IGJhc2UgY2xhc3MgaGFzIHRoZSBzYW1lIHB1cnBvc2UKKyAgICAgICAgYXMgdGhlIHJlcGxh
Y2VkIGNsYXNzIGFuZCBoYXMgc3BlY2lhbGl6ZWQgZGVzY2VuZGFudHMgZm9yIGNvbW1vbgorICAg
ICAgICBzaGFwZXMgKGxpa2UgUmVjdGFuZ2xlcyBhbmQgQ2lyY2xlcyksIHdoaWNoIGFsbG93cyBm
YXN0ZXIgcGFpbnRpbmcKKyAgICAgICAgb2YgdGhlc2Ugc2hhcGVzIHdoZW4gY2VydGFpbiBjb25k
aXRpb25zIGFyZSBmdWxmaWxsZWQuIE9uIHNvbWUKKyAgICAgICAgYmVuY2htYXJrIHByb2dyYW1z
IHdlIGhhdmUgc2VlbiA1JSBzcGVlZHVwLgorCisgICAgICAgIFRoZSBiaWdnZXN0IG1vdGl2YXRp
b24gb2YgdGhpcyByZWZhY3RvciBpcyB0YWtpbmcgYWR2YW50YWdlCisgICAgICAgIG9mIGZhc3Rl
ciBwcmltaXRpdmUgZHJhd2luZyBpbiB0aGUgbW9zdCBjb21tb24gYW5kIGZyZXF1ZW50CisgICAg
ICAgIGNhc2VzLiBIb3dldmVyIGluIHNvbWUgcmFyZSBjYXNlcywgbGlrZSBwYWludGluZyByb3Vu
ZGVkCisgICAgICAgIHJlY3RzLCB3ZSBuZWVkIHRvIGZhbGxiYWNrIHRvIHRoZSBvcmlnaW5hbCBj
b2RlIHBhdGgsIHdoaWNoCisgICAgICAgIGlzIGZ1bGx5IGtlcHQgaW4gdGhlIFJlbmRlclNWR1No
YXBlIGJhc2UgY2xhc3MuIFNvbWUgb3RoZXIKKyAgICAgICAgY2FzZXMsIGxpa2UgZGFzaGVkIHN0
cm9rZXMsIGNhbiBiZSBwYWludGVkIGJ1dCBtb3VzZSBwb2ludGVyCisgICAgICAgIGV2ZW50cyBj
YW5ub3QgYmUgaGFuZGxlZCBieSB0aGUgZGVzY2VuZGFudCBjbGFzc2VzLiBBIGRpZmZlcmVudAor
ICAgICAgICBmYWxsYmFjayBtZWNoYW5pc20gaXMgdXNlZCBpbiBzdWNoIGNhc2VzIHdoaWNoIHJl
ZGlyZWN0cworICAgICAgICBvbmx5IHRoZSBwb2ludGVyIGV2ZW50IGhhbmRsaW5nIHRvIHRoZSBi
YXNlIGNsYXNzLgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAg
ICAgIFRlc3RzOiBzdmcvY3VzdG9tL3BvaW50ZXItZXZlbnRzLW9uLXJvdW5kZWQtcmVjdC54aHRt
bAorICAgICAgICAgICAgICAgc3ZnL2N1c3RvbS9wb2ludGVyLWV2ZW50cy13aXRoLWxpbmVjYXBz
LWFuZC1taXRlcmxpbWl0cy54aHRtbAorCisgICAgICAgICogQ01ha2VMaXN0cy50eHQ6CisgICAg
ICAgICogR05VbWFrZWZpbGUubGlzdC5hbToKKyAgICAgICAgKiBXZWJDb3JlLmd5cGk6CisgICAg
ICAgICogV2ViQ29yZS5wcm86CisgICAgICAgICogV2ViQ29yZS52Y3Byb2ovV2ViQ29yZS52Y3By
b2o6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvRmxvYXRSZWN0LmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OkZsb2F0UmVjdDo6Y29udGFpbnMpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBo
aWNzL0Zsb2F0UmVjdC5oOgorICAgICAgICAoV2ViQ29yZTo6RmxvYXRSZWN0Ojpjb250YWlucyk6
CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlck9iamVjdC5oOgorICAgICAgICAoV2ViQ29yZTo6
UmVuZGVyT2JqZWN0Ojppc1NWR1JlY3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyT2JqZWN0
Ojppc1NWR1NoYXBlKToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyVHJlZUFzVGV4dC5jcHA6
CisgICAgICAgIChXZWJDb3JlOjp3cml0ZSk6CisgICAgICAgICogcmVuZGVyaW5nL3N2Zy9SZW5k
ZXJTVkdBbGxJbk9uZS5jcHA6CisgICAgICAgICogcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdNb2Rl
bE9iamVjdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjppc0dyYXBoaWNzRWxlbWVudCk6CisgICAg
ICAgICogcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdQYXRoLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OlJlbmRlclNWR1BhdGg6OlJlbmRlclNWR1BhdGgpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVy
U1ZHUGF0aDo6aW5mbGF0ZVdpdGhNYXJrZXJCb3VuZHMpOiBVbml0ZSB0aGUgbWFya2VyQm91bmRz
IHdpdGggc3Ryb2tlQm91bmRpbmdCb3guCisgICAgICAgICogcmVuZGVyaW5nL3N2Zy9SZW5kZXJT
VkdQYXRoLmg6CisgICAgICAgICogcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZWN0LmNwcDogQWRk
ZWQuCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJTVkdSZWN0OjpSZW5kZXJTVkdSZWN0KToKKyAg
ICAgICAgKFdlYkNvcmU6OlJlbmRlclNWR1JlY3Q6On5SZW5kZXJTVkdSZWN0KToKKyAgICAgICAg
KFdlYkNvcmU6OlJlbmRlclNWR1JlY3Q6OmNyZWF0ZVNoYXBlKToKKyAgICAgICAgKFdlYkNvcmU6
OlJlbmRlclNWR1JlY3Q6Om9iamVjdEJvdW5kaW5nQm94KToKKyAgICAgICAgKFdlYkNvcmU6OlJl
bmRlclNWR1JlY3Q6OnN0cm9rZUJvdW5kaW5nQm94KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRl
clNWR1JlY3Q6OmZpbGxTaGFwZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJTVkdSZWN0Ojpz
dHJva2VTaGFwZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJTVkdSZWN0OjpzaGFwZURlcGVu
ZGVudFN0cm9rZUNvbnRhaW5zKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclNWR1JlY3Q6OnNo
YXBlRGVwZW5kZW50RmlsbENvbnRhaW5zKToKKyAgICAgICAgKiByZW5kZXJpbmcvc3ZnL1JlbmRl
clNWR1JlY3QuaDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJTVkdSZWN0Ojppc1NW
R1JlY3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU1ZHUmVjdDo6cmVuZGVyTmFtZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpSZW5kZXJTVkdSZWN0Ojppc0VtcHR5KToKKyAgICAgICAgKiByZW5k
ZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291cmNlLmg6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJT
VkdSZXNvdXJjZTo6cG9zdEFwcGx5UmVzb3VyY2UpOiBBIG5ldyBzaGFwZSBhcmd1bWVudCB3YXMg
YWRkZWQgdG8gYWxsb3cgc2hhcGUgc3BlY2lmaWMgZmFzdGVyIHBhaW50aW5nLgorICAgICAgICAq
IHJlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VDbGlwcGVyLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OlJlbmRlclNWR1Jlc291cmNlQ2xpcHBlcjo6ZHJhd0NvbnRlbnRJbnRvTWFza0ltYWdl
KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclNWR1Jlc291cmNlQ2xpcHBlcjo6Y2FsY3VsYXRl
Q2xpcENvbnRlbnRSZXBhaW50UmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJTVkdSZXNv
dXJjZUNsaXBwZXI6OmhpdFRlc3RDbGlwQ29udGVudCk6CisgICAgICAgICogcmVuZGVyaW5nL3N2
Zy9SZW5kZXJTVkdSZXNvdXJjZUNvbnRhaW5lci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5k
ZXJTVkdSZXNvdXJjZUNvbnRhaW5lcjo6dHJhbnNmb3JtT25Ob25TY2FsaW5nU3Ryb2tlKToKKyAg
ICAgICAgKiByZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291cmNlRmlsdGVyLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OlJlbmRlclNWR1Jlc291cmNlRmlsdGVyOjpwb3N0QXBwbHlSZXNvdXJjZSk6
CisgICAgICAgICogcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJjZUZpbHRlci5oOgorICAg
ICAgICAqIHJlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VHcmFkaWVudC5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpSZW5kZXJTVkdSZXNvdXJjZUdyYWRpZW50OjphcHBseVJlc291cmNlKToK
KyAgICAgICAgKiByZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291cmNlR3JhZGllbnQuaDoKKyAg
ICAgICAgKiByZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291cmNlUGF0dGVybi5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpSZW5kZXJTVkdSZXNvdXJjZVBhdHRlcm46OnBvc3RBcHBseVJlc291cmNl
KToKKyAgICAgICAgKiByZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291cmNlUGF0dGVybi5oOgor
ICAgICAgICAqIHJlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VTb2xpZENvbG9yLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclNWR1Jlc291cmNlU29saWRDb2xvcjo6cG9zdEFwcGx5
UmVzb3VyY2UpOgorICAgICAgICAqIHJlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VTb2xp
ZENvbG9yLmg6CisgICAgICAgICogcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdTaGFwZS5jcHA6IENv
cGllZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUGF0aC5jcHAu
CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJTVkdTaGFwZTo6UmVuZGVyU1ZHU2hhcGUpOgorICAg
ICAgICAoV2ViQ29yZTo6UmVuZGVyU1ZHU2hhcGU6On5SZW5kZXJTVkdTaGFwZSk6CisgICAgICAg
IChXZWJDb3JlOjpSZW5kZXJTVkdTaGFwZTo6Y3JlYXRlU2hhcGUpOgorICAgICAgICAoV2ViQ29y
ZTo6UmVuZGVyU1ZHU2hhcGU6OmlzRW1wdHkpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU1ZH
U2hhcGU6OmZpbGxTaGFwZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJTVkdTaGFwZTo6b2Jq
ZWN0Qm91bmRpbmdCb3gpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU1ZHU2hhcGU6OnN0cm9r
ZUJvdW5kaW5nQm94KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclNWR1NoYXBlOjpzdHJva2VT
aGFwZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJTVkdTaGFwZTo6c2hhcGVEZXBlbmRlbnRT
dHJva2VDb250YWlucyk6CisgICAgICAgIFRoZSBwdXJwb3NlIG9mIHRoaXMgdmlydHVhbCBmdW5j
dGlvbiBhbGxvd3MgZGVjZW5kYW50cyB0byB1c2UgdGhlaXIgb3duIGZhc3QgY2hlY2tzLgorICAg
ICAgICAoV2ViQ29yZTo6UmVuZGVyU1ZHU2hhcGU6OnNoYXBlRGVwZW5kZW50RmlsbENvbnRhaW5z
KToKKyAgICAgICAgVGhlIHB1cnBvc2Ugb2YgdGhpcyB2aXJ0dWFsIGZ1bmN0aW9uIGFsbG93cyBk
ZWNlbmRhbnRzIHRvIHVzZSB0aGVpciBvd24gZmFzdCBjaGVja3MuCisgICAgICAgIChXZWJDb3Jl
OjpSZW5kZXJTVkdTaGFwZTo6ZmlsbENvbnRhaW5zKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRl
clNWR1NoYXBlOjpzdHJva2VDb250YWlucyk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJTVkdT
aGFwZTo6bGF5b3V0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclNWR1NoYXBlOjpzaG91bGRT
dHJva2VaZXJvTGVuZ3RoU3VicGF0aCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJTVkdTaGFw
ZTo6emVyb0xlbmd0aFN1YnBhdGhSZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclNWR1No
YXBlOjpzZXR1cFNxdWFyZUNhcFBhdGgpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU1ZHU2hh
cGU6OnNldHVwTm9uU2NhbGluZ1N0cm9rZVBhdGgpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVy
U1ZHU2hhcGU6OmZpbGxBbmRTdHJva2VQYXRoKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclNW
R1NoYXBlOjpwYWludCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJTVkdTaGFwZTo6YWRkRm9j
dXNSaW5nUmVjdHMpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU1ZHU2hhcGU6Om5vZGVBdEZs
b2F0UG9pbnQpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU1ZHU2hhcGU6OmNhbGN1bGF0ZU1h
cmtlckJvdW5kc0lmTmVlZGVkKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclNWR1NoYXBlOjp1
cGRhdGVDYWNoZWRCb3VuZGFyaWVzKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclNWR1NoYXBl
OjpzdHJva2VXaWR0aCk6CisgICAgICAgICogcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdTaGFwZS5o
OiBDb3BpZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1BhdGgu
aC4KKyAgICAgICAgKFdlYkNvcmU6OkJvdW5kaW5nUmVjdFN0cm9rZVN0eWxlQXBwbGllcjo6Qm91
bmRpbmdSZWN0U3Ryb2tlU3R5bGVBcHBsaWVyKToKKyAgICAgICAgKFdlYkNvcmU6OkJvdW5kaW5n
UmVjdFN0cm9rZVN0eWxlQXBwbGllcjo6c3Ryb2tlU3R5bGUpOgorICAgICAgICAoV2ViQ29yZTo6
UmVuZGVyU1ZHU2hhcGU6OnNldE5lZWRzU2hhcGVVcGRhdGUpOgorICAgICAgICAoV2ViQ29yZTo6
UmVuZGVyU1ZHU2hhcGU6OnNldE5lZWRzQm91bmRhcmllc1VwZGF0ZSk6CisgICAgICAgIChXZWJD
b3JlOjpSZW5kZXJTVkdTaGFwZTo6c2V0TmVlZHNUcmFuc2Zvcm1VcGRhdGUpOgorICAgICAgICAo
V2ViQ29yZTo6UmVuZGVyU1ZHU2hhcGU6OmlzUGFpbnRpbmdGYWxsYmFjayk6CisgICAgICAgIChX
ZWJDb3JlOjpSZW5kZXJTVkdTaGFwZTo6cGF0aCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJT
VkdTaGFwZTo6c2V0SXNQYWludGluZ0ZhbGxiYWNrKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRl
clNWR1NoYXBlOjpzZXRTdHJva2VBbmRNYXJrZXJCb3VuZGluZ0JveCk6CisgICAgICAgIChXZWJD
b3JlOjpSZW5kZXJTVkdTaGFwZTo6aGFzUGF0aCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJT
VkdTaGFwZTo6cmVwYWludFJlY3RJbkxvY2FsQ29vcmRpbmF0ZXMpOgorICAgICAgICAoV2ViQ29y
ZTo6UmVuZGVyU1ZHU2hhcGU6OmxvY2FsVG9QYXJlbnRUcmFuc2Zvcm0pOgorICAgICAgICAoV2Vi
Q29yZTo6UmVuZGVyU1ZHU2hhcGU6OmxvY2FsVHJhbnNmb3JtKToKKyAgICAgICAgKFdlYkNvcmU6
OlJlbmRlclNWR1NoYXBlOjppc1NWR1NoYXBlKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclNW
R1NoYXBlOjpyZW5kZXJOYW1lKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclNWR1NoYXBlOjpp
c1JvdW5kZWRSZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclNWR1NoYXBlOjppbmZsYXRl
V2l0aE1hcmtlckJvdW5kcyk6CisgICAgICAgIChXZWJDb3JlOjp0b1JlbmRlclNWR1NoYXBlKToK
KyAgICAgICAgKiByZW5kZXJpbmcvc3ZnL1NWR0lubGluZVRleHRCb3guY3BwOgorICAgICAgICAo
V2ViQ29yZTo6U1ZHSW5saW5lVGV4dEJveDo6cmVsZWFzZVBhaW50aW5nUmVzb3VyY2UpOgorICAg
ICAgICAqIHJlbmRlcmluZy9zdmcvU1ZHUmVuZGVyU3VwcG9ydC5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpTVkdSZW5kZXJTdXBwb3J0OjpmaW5pc2hSZW5kZXJTVkdDb250ZW50KToKKyAgICAgICAg
KFdlYkNvcmU6OlNWR1JlbmRlclN1cHBvcnQ6OmxheW91dENoaWxkcmVuKToKKyAgICAgICAgKiBy
ZW5kZXJpbmcvc3ZnL1NWR1JlbmRlclRyZWVBc1RleHQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
d3JpdGVTdHlsZSk6CisgICAgICAgIChXZWJDb3JlOjpvcGVyYXRvcjw8KToKKyAgICAgICAgKFdl
YkNvcmU6OndyaXRlKToKKyAgICAgICAgKiByZW5kZXJpbmcvc3ZnL1NWR1JlbmRlclRyZWVBc1Rl
eHQuaDoKKyAgICAgICAgKiByZW5kZXJpbmcvc3ZnL1NWR1RleHRSdW5SZW5kZXJpbmdDb250ZXh0
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR1RleHRSdW5SZW5kZXJpbmdDb250ZXh0OjpkcmF3
U1ZHR2x5cGhzKToKKyAgICAgICAgKiBzdmcvU1ZHQ2lyY2xlRWxlbWVudC5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpTVkdDaXJjbGVFbGVtZW50OjpzdmdBdHRyaWJ1dGVDaGFuZ2VkKToKKyAgICAg
ICAgKiBzdmcvU1ZHRWxsaXBzZUVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U1ZHRWxs
aXBzZUVsZW1lbnQ6OnN2Z0F0dHJpYnV0ZUNoYW5nZWQpOgorICAgICAgICAqIHN2Zy9TVkdMaW5l
RWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTVkdMaW5lRWxlbWVudDo6c3ZnQXR0cmli
dXRlQ2hhbmdlZCk6CisgICAgICAgICogc3ZnL1NWR1BhdGhFbGVtZW50LmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OlNWR1BhdGhFbGVtZW50OjpzdmdBdHRyaWJ1dGVDaGFuZ2VkKToKKyAgICAgICAg
KFdlYkNvcmU6OlNWR1BhdGhFbGVtZW50OjpwYXRoU2VnTGlzdENoYW5nZWQpOgorICAgICAgICAo
V2ViQ29yZTo6U1ZHUGF0aEVsZW1lbnQ6OmNyZWF0ZVJlbmRlcmVyKToKKyAgICAgICAgKiBzdmcv
U1ZHUGF0aEVsZW1lbnQuaDoKKyAgICAgICAgKiBzdmcvU1ZHUG9seUVsZW1lbnQuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6U1ZHUG9seUVsZW1lbnQ6OnN2Z0F0dHJpYnV0ZUNoYW5nZWQpOgorICAg
ICAgICAqIHN2Zy9TVkdSZWN0RWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTVkdSZWN0
RWxlbWVudDo6c3ZnQXR0cmlidXRlQ2hhbmdlZCk6CisgICAgICAgIChXZWJDb3JlOjpTVkdSZWN0
RWxlbWVudDo6Y3JlYXRlUmVuZGVyZXIpOgorICAgICAgICAqIHN2Zy9TVkdSZWN0RWxlbWVudC5o
OgorCiAyMDExLTA5LTI5ICBBbmRyZWFzIEtsaW5nICA8a2xpbmdAd2Via2l0Lm9yZz4KIAogICAg
ICAgICBTaHJpbmsgRm9udEZhbGxiYWNrTGlzdC4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L0dOVW1ha2VmaWxlLmxpc3QuYW0gYi9Tb3VyY2UvV2ViQ29yZS9HTlVtYWtlZmlsZS5saXN0LmFt
CmluZGV4IDFlNWY3NTQuLjY3MWVjNzEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL0dOVW1h
a2VmaWxlLmxpc3QuYW0KKysrIGIvU291cmNlL1dlYkNvcmUvR05VbWFrZWZpbGUubGlzdC5hbQpA
QCAtMzIyMyw2ICszMjIzLDggQEAgd2ViY29yZV9zb3VyY2VzICs9IFwKIAlTb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR01vZGVsT2JqZWN0LmggXAogCVNvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUGF0aC5jcHAgXAogCVNvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9zdmcvUmVuZGVyU1ZHUGF0aC5oIFwKKwlTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3Zn
L1JlbmRlclNWR1JlY3QuY3BwIFwKKwlTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRl
clNWR1JlY3QuaCBcCiAJU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNv
dXJjZUNsaXBwZXIuY3BwIFwKIAlTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNW
R1Jlc291cmNlQ2xpcHBlci5oIFwKIAlTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRl
clNWR1Jlc291cmNlQ29udGFpbmVyLmNwcCBcCkBAIC0zMjUxLDYgKzMyNTMsOCBAQCB3ZWJjb3Jl
X3NvdXJjZXMgKz0gXAogCVNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUm9v
dC5oIFwKIAlTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1NoYWRvd1RyZWVS
b290Q29udGFpbmVyLmNwcCBcCiAJU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJT
VkdTaGFkb3dUcmVlUm9vdENvbnRhaW5lci5oIFwKKwlTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
c3ZnL1JlbmRlclNWR1NoYXBlLmNwcCBcCisJU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9S
ZW5kZXJTVkdTaGFwZS5oIFwKIAlTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNW
R1RTcGFuLmNwcCBcCiAJU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdUU3Bh
bi5oIFwKIAlTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1RleHQuY3BwIFwK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwaSBiL1NvdXJjZS9XZWJDb3Jl
L1dlYkNvcmUuZ3lwaQppbmRleCAxMmY0MjU2Li45YjMwNTA3IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9XZWJDb3JlLmd5cGkKKysrIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBpCkBA
IC01NzUyLDYgKzU3NTIsOCBAQAogICAgICAgICAgICAgJ3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZH
TW9kZWxPYmplY3QuaCcsCiAgICAgICAgICAgICAncmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdQYXRo
LmNwcCcsCiAgICAgICAgICAgICAncmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdQYXRoLmgnLAorICAg
ICAgICAgICAgJ3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVjdC5jcHAnLAorICAgICAgICAgICAg
J3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVjdC5oJywKICAgICAgICAgICAgICdyZW5kZXJpbmcv
c3ZnL1JlbmRlclNWR1Jlc291cmNlLmNwcCcsCiAgICAgICAgICAgICAncmVuZGVyaW5nL3N2Zy9S
ZW5kZXJTVkdSZXNvdXJjZS5oJywKICAgICAgICAgICAgICdyZW5kZXJpbmcvc3ZnL1JlbmRlclNW
R1Jlc291cmNlQ2xpcHBlci5jcHAnLApAQCAtNTc4MCw2ICs1NzgyLDggQEAKICAgICAgICAgICAg
ICdyZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jvb3QuaCcsCiAgICAgICAgICAgICAncmVuZGVyaW5n
L3N2Zy9SZW5kZXJTVkdTaGFkb3dUcmVlUm9vdENvbnRhaW5lci5jcHAnLAogICAgICAgICAgICAg
J3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHU2hhZG93VHJlZVJvb3RDb250YWluZXIuaCcsCisgICAg
ICAgICAgICAncmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdTaGFwZS5jcHAnLAorICAgICAgICAgICAg
J3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHU2hhcGUuaCcsCiAgICAgICAgICAgICAncmVuZGVyaW5n
L3N2Zy9SZW5kZXJTVkdUU3Bhbi5jcHAnLAogICAgICAgICAgICAgJ3JlbmRlcmluZy9zdmcvUmVu
ZGVyU1ZHVFNwYW4uaCcsCiAgICAgICAgICAgICAncmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdUZXh0
LmNwcCcsCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnBybyBiL1NvdXJjZS9X
ZWJDb3JlL1dlYkNvcmUucHJvCmluZGV4IGVjMjAyM2MuLmI4NTNkNjYgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL1dlYkNvcmUucHJvCisrKyBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUucHJv
CkBAIC0yMjk4LDYgKzIyOTgsNyBAQCBIRUFERVJTICs9IFwKICAgICByZW5kZXJpbmcvc3ZnL1Jl
bmRlclNWR0lubGluZVRleHQuaCBcCiAgICAgcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdNb2RlbE9i
amVjdC5oIFwKICAgICByZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1BhdGguaCBcCisgICAgcmVuZGVy
aW5nL3N2Zy9SZW5kZXJTVkdSZWN0LmggXAogICAgIHJlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVz
b3VyY2UuaCBcCiAgICAgcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJjZUNsaXBwZXIuaCBc
CiAgICAgcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJjZUNvbnRhaW5lci5oIFwKQEAgLTIz
MTIsNiArMjMxMyw3IEBAIEhFQURFUlMgKz0gXAogICAgIHJlbmRlcmluZy9zdmcvUmVuZGVyU1ZH
UmVzb3VyY2VTb2xpZENvbG9yLmggXAogICAgIHJlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUm9vdC5o
IFwKICAgICByZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1NoYWRvd1RyZWVSb290Q29udGFpbmVyLmgg
XAorICAgIHJlbmRlcmluZy9zdmcvUmVuZGVyU1ZHU2hhcGUuaCBcCiAgICAgcmVuZGVyaW5nL3N2
Zy9SZW5kZXJTVkdUU3Bhbi5oIFwKICAgICByZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1RleHQuaCBc
CiAgICAgcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdUZXh0UGF0aC5oIFwKQEAgLTMzMzQsNiArMzMz
Niw4IEBAIGNvbnRhaW5zKERFRklORVMsIEVOQUJMRV9TVkc9MSkgewogICAgICAgICByZW5kZXJp
bmcvc3R5bGUvU1ZHUmVuZGVyU3R5bGVEZWZzLmNwcCBcCiAgICAgICAgIHJlbmRlcmluZy9Qb2lu
dGVyRXZlbnRzSGl0UnVsZXMuY3BwIFwKICAgICAgICAgcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdQ
YXRoLmNwcCBcCisgICAgICAgIHJlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVjdC5jcHAgXAorICAg
ICAgICByZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1NoYXBlLmNwcCBcCiAgICAgICAgIHN2Zy9hbmlt
YXRpb24vU01JTFRpbWUuY3BwIFwKICAgICAgICAgc3ZnL2FuaW1hdGlvbi9TTUlMVGltZUNvbnRh
aW5lci5jcHAgXAogICAgICAgICBzdmcvYW5pbWF0aW9uL1NWR1NNSUxFbGVtZW50LmNwcCBcCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnZjcHJvai9XZWJDb3JlLnZjcHJvaiBi
L1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUudmNwcm9qL1dlYkNvcmUudmNwcm9qCmluZGV4IGZlOWZi
ZjUuLjg1ZmQxNzQgMTAwNzU1Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUudmNwcm9qL1dl
YkNvcmUudmNwcm9qCisrKyBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUudmNwcm9qL1dlYkNvcmUu
dmNwcm9qCkBAIC00MTgzOSw2ICs0MTgzOSwxMTggQEAKIAkJCQkJPgogCQkJCTwvRmlsZT4KIAkJ
CQk8RmlsZQorCQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXHJlbmRlcmluZ1xzdmdcUmVuZGVyU1ZHUmVj
dC5jcHAiCisJCQkJCT4KKwkJCQkJPEZpbGVDb25maWd1cmF0aW9uCisJCQkJCQlOYW1lPSJEZWJ1
Z3xXaW4zMiIKKwkJCQkJCUV4Y2x1ZGVkRnJvbUJ1aWxkPSJ0cnVlIgorCQkJCQkJPgorCQkJCQkJ
PFRvb2wKKwkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIgorCQkJCQkJLz4KKwkJCQkJPC9G
aWxlQ29uZmlndXJhdGlvbj4KKwkJCQkJPEZpbGVDb25maWd1cmF0aW9uCisJCQkJCQlOYW1lPSJS
ZWxlYXNlfFdpbjMyIgorCQkJCQkJRXhjbHVkZWRGcm9tQnVpbGQ9InRydWUiCisJCQkJCQk+CisJ
CQkJCQk8VG9vbAorCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiCisJCQkJCQkvPgorCQkJ
CQk8L0ZpbGVDb25maWd1cmF0aW9uPgorCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24KKwkJCQkJCU5h
bWU9IkRlYnVnX0NhaXJvX0NGTGl0ZXxXaW4zMiIKKwkJCQkJCUV4Y2x1ZGVkRnJvbUJ1aWxkPSJ0
cnVlIgorCQkJCQkJPgorCQkJCQkJPFRvb2wKKwkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29s
IgorCQkJCQkJLz4KKwkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4KKwkJCQkJPEZpbGVDb25maWd1
cmF0aW9uCisJCQkJCQlOYW1lPSJSZWxlYXNlX0NhaXJvX0NGTGl0ZXxXaW4zMiIKKwkJCQkJCUV4
Y2x1ZGVkRnJvbUJ1aWxkPSJ0cnVlIgorCQkJCQkJPgorCQkJCQkJPFRvb2wKKwkJCQkJCQlOYW1l
PSJWQ0NMQ29tcGlsZXJUb29sIgorCQkJCQkJLz4KKwkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4K
KwkJCQkJPEZpbGVDb25maWd1cmF0aW9uCisJCQkJCQlOYW1lPSJEZWJ1Z19BbGx8V2luMzIiCisJ
CQkJCQlFeGNsdWRlZEZyb21CdWlsZD0idHJ1ZSIKKwkJCQkJCT4KKwkJCQkJCTxUb29sCisJCQkJ
CQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIKKwkJCQkJCS8+CisJCQkJCTwvRmlsZUNvbmZpZ3Vy
YXRpb24+CisJCQkJCTxGaWxlQ29uZmlndXJhdGlvbgorCQkJCQkJTmFtZT0iUHJvZHVjdGlvbnxX
aW4zMiIKKwkJCQkJCUV4Y2x1ZGVkRnJvbUJ1aWxkPSJ0cnVlIgorCQkJCQkJPgorCQkJCQkJPFRv
b2wKKwkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIgorCQkJCQkJLz4KKwkJCQkJPC9GaWxl
Q29uZmlndXJhdGlvbj4KKwkJCQk8L0ZpbGU+CisJCQkJPEZpbGUKKwkJCQkJUmVsYXRpdmVQYXRo
PSIuLlxyZW5kZXJpbmdcc3ZnXFJlbmRlclNWR1JlY3QuaCIKKwkJCQkJPgorCQkJCTwvRmlsZT4K
KwkJCQk8RmlsZQorCQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXHJlbmRlcmluZ1xzdmdcUmVuZGVyU1ZH
U2hhcGUuY3BwIgorCQkJCQk+CisJCQkJCTxGaWxlQ29uZmlndXJhdGlvbgorCQkJCQkJTmFtZT0i
RGVidWd8V2luMzIiCisJCQkJCQlFeGNsdWRlZEZyb21CdWlsZD0idHJ1ZSIKKwkJCQkJCT4KKwkJ
CQkJCTxUb29sCisJCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIKKwkJCQkJCS8+CisJCQkJ
CTwvRmlsZUNvbmZpZ3VyYXRpb24+CisJCQkJCTxGaWxlQ29uZmlndXJhdGlvbgorCQkJCQkJTmFt
ZT0iUmVsZWFzZXxXaW4zMiIKKwkJCQkJCUV4Y2x1ZGVkRnJvbUJ1aWxkPSJ0cnVlIgorCQkJCQkJ
PgorCQkJCQkJPFRvb2wKKwkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIgorCQkJCQkJLz4K
KwkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4KKwkJCQkJPEZpbGVDb25maWd1cmF0aW9uCisJCQkJ
CQlOYW1lPSJEZWJ1Z19DYWlyb19DRkxpdGV8V2luMzIiCisJCQkJCQlFeGNsdWRlZEZyb21CdWls
ZD0idHJ1ZSIKKwkJCQkJCT4KKwkJCQkJCTxUb29sCisJCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVy
VG9vbCIKKwkJCQkJCS8+CisJCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+CisJCQkJCTxGaWxlQ29u
ZmlndXJhdGlvbgorCQkJCQkJTmFtZT0iUmVsZWFzZV9DYWlyb19DRkxpdGV8V2luMzIiCisJCQkJ
CQlFeGNsdWRlZEZyb21CdWlsZD0idHJ1ZSIKKwkJCQkJCT4KKwkJCQkJCTxUb29sCisJCQkJCQkJ
TmFtZT0iVkNDTENvbXBpbGVyVG9vbCIKKwkJCQkJCS8+CisJCQkJCTwvRmlsZUNvbmZpZ3VyYXRp
b24+CisJCQkJCTxGaWxlQ29uZmlndXJhdGlvbgorCQkJCQkJTmFtZT0iRGVidWdfQWxsfFdpbjMy
IgorCQkJCQkJRXhjbHVkZWRGcm9tQnVpbGQ9InRydWUiCisJCQkJCQk+CisJCQkJCQk8VG9vbAor
CQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiCisJCQkJCQkvPgorCQkJCQk8L0ZpbGVDb25m
aWd1cmF0aW9uPgorCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24KKwkJCQkJCU5hbWU9IlByb2R1Y3Rp
b258V2luMzIiCisJCQkJCQlFeGNsdWRlZEZyb21CdWlsZD0idHJ1ZSIKKwkJCQkJCT4KKwkJCQkJ
CTxUb29sCisJCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIKKwkJCQkJCS8+CisJCQkJCTwv
RmlsZUNvbmZpZ3VyYXRpb24+CisJCQkJPC9GaWxlPgorCQkJCTxGaWxlCisJCQkJCVJlbGF0aXZl
UGF0aD0iLi5ccmVuZGVyaW5nXHN2Z1xSZW5kZXJTVkdTaGFwZS5oIgorCQkJCQk+CisJCQkJPC9G
aWxlPgorCQkJCTxGaWxlCiAJCQkJCVJlbGF0aXZlUGF0aD0iLi5ccmVuZGVyaW5nXHN2Z1xSZW5k
ZXJTVkdUZXh0LmNwcCIKIAkJCQkJPgogCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24KZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0Zsb2F0UmVjdC5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9GbG9hdFJlY3QuY3BwCmluZGV4IGI4NGE4OTIu
LjZkNGEyMjAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0Zs
b2F0UmVjdC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRmxvYXRS
ZWN0LmNwcApAQCAtNjgsNiArNjgsMTMgQEAgYm9vbCBGbG9hdFJlY3Q6OmNvbnRhaW5zKGNvbnN0
IEZsb2F0UmVjdCYgb3RoZXIpIGNvbnN0CiAgICAgICAgICYmIHkoKSA8PSBvdGhlci55KCkgJiYg
bWF4WSgpID49IG90aGVyLm1heFkoKTsKIH0KIAorYm9vbCBGbG9hdFJlY3Q6OmNvbnRhaW5zKGNv
bnN0IEZsb2F0UG9pbnQmIHBvaW50LCBDb250YWluc01vZGUgY29udGFpbnNNb2RlKSBjb25zdAor
eworICAgIGlmIChjb250YWluc01vZGUgPT0gSW5zaWRlT3JPblN0cm9rZSkKKyAgICAgICAgcmV0
dXJuIGNvbnRhaW5zKHBvaW50LngoKSwgcG9pbnQueSgpKTsKKyAgICByZXR1cm4geCgpIDwgcG9p
bnQueCgpICYmIG1heFgoKSA+IHBvaW50LngoKSAmJiB5KCkgPCBwb2ludC55KCkgJiYgbWF4WSgp
ID4geSgpOworfQorCiB2b2lkIEZsb2F0UmVjdDo6aW50ZXJzZWN0KGNvbnN0IEZsb2F0UmVjdCYg
b3RoZXIpCiB7CiAgICAgZmxvYXQgbCA9IG1heCh4KCksIG90aGVyLngoKSk7CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9GbG9hdFJlY3QuaCBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0Zsb2F0UmVjdC5oCmluZGV4IDQyNDE3MTYuLjdkZTM0
NmYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0Zsb2F0UmVj
dC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0Zsb2F0UmVjdC5oCkBA
IC03MCw2ICs3MCwxMSBAQCBjbGFzcyBJbnRQb2ludDsKIAogY2xhc3MgRmxvYXRSZWN0IHsKIHB1
YmxpYzoKKyAgICBlbnVtIENvbnRhaW5zTW9kZSB7CisgICAgICAgIEluc2lkZU9yT25TdHJva2Us
CisgICAgICAgIEluc2lkZUJ1dE5vdE9uU3Ryb2tlCisgICAgfTsKKwogICAgIEZsb2F0UmVjdCgp
IHsgfQogICAgIEZsb2F0UmVjdChjb25zdCBGbG9hdFBvaW50JiBsb2NhdGlvbiwgY29uc3QgRmxv
YXRTaXplJiBzaXplKQogICAgICAgICA6IG1fbG9jYXRpb24obG9jYXRpb24pLCBtX3NpemUoc2l6
ZSkgeyB9CkBAIC0xNDIsNiArMTQ3LDcgQEAgcHVibGljOgogCiAgICAgYm9vbCBpbnRlcnNlY3Rz
KGNvbnN0IEZsb2F0UmVjdCYpIGNvbnN0OwogICAgIGJvb2wgY29udGFpbnMoY29uc3QgRmxvYXRS
ZWN0JikgY29uc3Q7CisgICAgYm9vbCBjb250YWlucyhjb25zdCBGbG9hdFBvaW50JiwgQ29udGFp
bnNNb2RlID0gSW5zaWRlT3JPblN0cm9rZSkgY29uc3Q7CiAKICAgICB2b2lkIGludGVyc2VjdChj
b25zdCBGbG9hdFJlY3QmKTsKICAgICB2b2lkIHVuaXRlKGNvbnN0IEZsb2F0UmVjdCYpOwpAQCAt
MTUxLDcgKzE1Nyw2IEBAIHB1YmxpYzoKICAgICAvLyBpcyByZWFsbHkgY2hlY2tpbmcgZm9yIGNv
bnRhaW5tZW50IG9mIDF4MSByZWN0LCBidXQgdGhhdCBkb2Vzbid0IG1ha2Ugc2Vuc2Ugd2l0aCBm
bG9hdHMuCiAgICAgYm9vbCBjb250YWlucyhmbG9hdCBweCwgZmxvYXQgcHkpIGNvbnN0CiAgICAg
ICAgIHsgcmV0dXJuIHB4ID49IHgoKSAmJiBweCA8PSBtYXhYKCkgJiYgcHkgPj0geSgpICYmIHB5
IDw9IG1heFkoKTsgfQotICAgIGJvb2wgY29udGFpbnMoY29uc3QgRmxvYXRQb2ludCYgcG9pbnQp
IGNvbnN0IHsgcmV0dXJuIGNvbnRhaW5zKHBvaW50LngoKSwgcG9pbnQueSgpKTsgfQogCiAgICAg
dm9pZCBpbmZsYXRlWChmbG9hdCBkeCkgewogICAgICAgICBtX2xvY2F0aW9uLnNldFgobV9sb2Nh
dGlvbi54KCkgLSBkeCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jZy9HcmFwaGljc0NvbnRleHRDRy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jZy9HcmFwaGljc0NvbnRleHRDRy5jcHAKaW5kZXggNGYwNjE1Ni4uNDAzZWYyZiAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvR3JhcGhpY3ND
b250ZXh0Q0cuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0dy
YXBoaWNzQ29udGV4dENHLmNwcApAQCAtNzM3LDYgKzczNyw3IEBAIHN0YXRpYyBib29sIGhhc0Js
dXJyZWRTaGFkb3coY29uc3QgR3JhcGhpY3NDb250ZXh0U3RhdGUmIHN0YXRlKQogCiB2b2lkIEdy
YXBoaWNzQ29udGV4dDo6ZmlsbFJlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0KQogeworCiAgICAg
aWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKICAgICAgICAgcmV0dXJuOwogCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyT2JqZWN0LmggYi9Tb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVyT2JqZWN0LmgKaW5kZXggZWNmNTIyNy4uMDQ0NDFkMiAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck9iamVjdC5oCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJPYmplY3QuaApAQCAtMzc5LDYgKzM3OSw4IEBAIHB1Ymxp
YzoKICAgICB2aXJ0dWFsIGJvb2wgaXNTVkdHcmFkaWVudFN0b3AoKSBjb25zdCB7IHJldHVybiBm
YWxzZTsgfQogICAgIHZpcnR1YWwgYm9vbCBpc1NWR0hpZGRlbkNvbnRhaW5lcigpIGNvbnN0IHsg
cmV0dXJuIGZhbHNlOyB9CiAgICAgdmlydHVhbCBib29sIGlzU1ZHUGF0aCgpIGNvbnN0IHsgcmV0
dXJuIGZhbHNlOyB9CisgICAgdmlydHVhbCBib29sIGlzU1ZHUmVjdCgpIGNvbnN0IHsgcmV0dXJu
IGZhbHNlOyB9CisgICAgdmlydHVhbCBib29sIGlzU1ZHU2hhcGUoKSBjb25zdCB7IHJldHVybiBm
YWxzZTsgfQogICAgIHZpcnR1YWwgYm9vbCBpc1NWR1RleHQoKSBjb25zdCB7IHJldHVybiBmYWxz
ZTsgfQogICAgIHZpcnR1YWwgYm9vbCBpc1NWR1RleHRQYXRoKCkgY29uc3QgeyByZXR1cm4gZmFs
c2U7IH0KICAgICB2aXJ0dWFsIGJvb2wgaXNTVkdJbmxpbmUoKSBjb25zdCB7IHJldHVybiBmYWxz
ZTsgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRyZWVBc1Rl
eHQuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRyZWVBc1RleHQuY3BwCmlu
ZGV4IDk2NDU5ZDkuLmJmOTgyZjkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9SZW5kZXJUcmVlQXNUZXh0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVyVHJlZUFzVGV4dC5jcHAKQEAgLTUyMSw4ICs1MjMsOCBAQCBzdGF0aWMgdm9pZCB3cml0ZVRl
eHRSdW4oVGV4dFN0cmVhbSYgdHMsIGNvbnN0IFJlbmRlclRleHQmIG8sIGNvbnN0IElubGluZVRl
eHRCbwogdm9pZCB3cml0ZShUZXh0U3RyZWFtJiB0cywgY29uc3QgUmVuZGVyT2JqZWN0JiBvLCBp
bnQgaW5kZW50LCBSZW5kZXJBc1RleHRCZWhhdmlvciBiZWhhdmlvcikKIHsKICNpZiBFTkFCTEUo
U1ZHKQotICAgIGlmIChvLmlzU1ZHUGF0aCgpKSB7Ci0gICAgICAgIHdyaXRlKHRzLCAqdG9SZW5k
ZXJTVkdQYXRoKCZvKSwgaW5kZW50KTsKKyAgICBpZiAoby5pc1NWR1NoYXBlKCkpIHsKKyAgICAg
ICAgd3JpdGUodHMsICp0b1JlbmRlclNWR1NoYXBlKCZvKSwgaW5kZW50KTsKICAgICAgICAgcmV0
dXJuOwogICAgIH0KICAgICBpZiAoby5pc1NWR0dyYWRpZW50U3RvcCgpKSB7CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR0FsbEluT25lLmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHQWxsSW5PbmUuY3BwCmluZGV4IDll
YTNiZTUuLjI5NjkwMDggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcv
UmVuZGVyU1ZHQWxsSW5PbmUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcv
UmVuZGVyU1ZHQWxsSW5PbmUuY3BwCkBAIC0zNSw2ICszNSw3IEBACiAjaW5jbHVkZSAiUmVuZGVy
U1ZHSW5saW5lVGV4dC5jcHAiCiAjaW5jbHVkZSAiUmVuZGVyU1ZHTW9kZWxPYmplY3QuY3BwIgog
I2luY2x1ZGUgIlJlbmRlclNWR1BhdGguY3BwIgorI2luY2x1ZGUgIlJlbmRlclNWR1JlY3QuY3Bw
IgogI2luY2x1ZGUgIlJlbmRlclNWR1Jlc291cmNlLmNwcCIKICNpbmNsdWRlICJSZW5kZXJTVkdS
ZXNvdXJjZUNsaXBwZXIuY3BwIgogI2luY2x1ZGUgIlJlbmRlclNWR1Jlc291cmNlQ29udGFpbmVy
LmNwcCIKQEAgLTQ5LDYgKzUwLDcgQEAKICNpbmNsdWRlICJSZW5kZXJTVkdSZXNvdXJjZVNvbGlk
Q29sb3IuY3BwIgogI2luY2x1ZGUgIlJlbmRlclNWR1Jvb3QuY3BwIgogI2luY2x1ZGUgIlJlbmRl
clNWR1NoYWRvd1RyZWVSb290Q29udGFpbmVyLmNwcCIKKyNpbmNsdWRlICJSZW5kZXJTVkdTaGFw
ZS5jcHAiCiAjaW5jbHVkZSAiUmVuZGVyU1ZHVFNwYW4uY3BwIgogI2luY2x1ZGUgIlJlbmRlclNW
R1RleHQuY3BwIgogI2luY2x1ZGUgIlJlbmRlclNWR1RleHRQYXRoLmNwcCIKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHTW9kZWxPYmplY3QuY3BwIGIv
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdNb2RlbE9iamVjdC5jcHAKaW5k
ZXggMTRjMWRiOC4uYzIzNDBiMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L3N2Zy9SZW5kZXJTVkdNb2RlbE9iamVjdC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL3N2Zy9SZW5kZXJTVkdNb2RlbE9iamVjdC5jcHAKQEAgLTE1Myw3ICsxNTMsNyBAQCBzdGF0
aWMgYm9vbCBpbnRlcnNlY3RzQWxsb3dpbmdFbXB0eShjb25zdCBGbG9hdFJlY3QmIHIsIGNvbnN0
IEZsb2F0UmVjdCYgb3RoZXIpCiAvLyBpbWFnZSwgbGluZSwgcGF0aCwgcG9seWdvbiwgcG9seWxp
bmUsIHJlY3QsIHRleHQgYW5kIHVzZS4KIHN0YXRpYyBib29sIGlzR3JhcGhpY3NFbGVtZW50KFJl
bmRlck9iamVjdCogcmVuZGVyZXIpCiB7Ci0gICAgcmV0dXJuIHJlbmRlcmVyLT5pc1NWR1BhdGgo
KSB8fCByZW5kZXJlci0+aXNTVkdUZXh0KCkgfHwgcmVuZGVyZXItPmlzU1ZHSW1hZ2UoKSB8fCBy
ZW5kZXJlci0+aXNTVkdTaGFkb3dUcmVlUm9vdENvbnRhaW5lcigpOworICAgIHJldHVybiByZW5k
ZXJlci0+aXNTVkdTaGFwZSgpIHx8IHJlbmRlcmVyLT5pc1NWR1RleHQoKSB8fCByZW5kZXJlci0+
aXNTVkdJbWFnZSgpIHx8IHJlbmRlcmVyLT5pc1NWR1NoYWRvd1RyZWVSb290Q29udGFpbmVyKCk7
CiB9CiAKIGJvb2wgUmVuZGVyU1ZHTW9kZWxPYmplY3Q6OmNoZWNrSW50ZXJzZWN0aW9uKFJlbmRl
ck9iamVjdCogcmVuZGVyZXIsIGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUGF0aC5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1BhdGguY3BwCmluZGV4IGI3YWQ3YTIuLmU3YTcy
YTAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUGF0
aC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdQYXRoLmNw
cApAQCAtNiw2ICs2LDggQEAKICAqIENvcHlyaWdodCAoQykgMjAwOSBEaXJrIFNjaHVsemUgPGty
aXRAd2Via2l0Lm9yZz4KICAqIENvcHlyaWdodCAoQykgUmVzZWFyY2ggSW4gTW90aW9uIExpbWl0
ZWQgMjAxMC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqIENvcHlyaWdodCAoQykgMjAwOSBKZWZm
IFNjaGlsbGVyIDxjb2RlZHJlYWRAZ21haWwuY29tPgorICogQ29weXJpZ2h0IChDKSAyMDExIFJl
bmF0YSBIb2RvdmFuIDxyZW5pQHdlYmtpdC5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgVW5p
dmVyc2l0eSBvZiBTemVnZWQKICAqCiAgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsg
eW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRl
cm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwpAQCAtMjgsNTAgKzMwLDEzIEBA
CiAjaWYgRU5BQkxFKFNWRykKICNpbmNsdWRlICJSZW5kZXJTVkdQYXRoLmgiCiAKLSNpbmNsdWRl
ICJGbG9hdFBvaW50LmgiCi0jaW5jbHVkZSAiRmxvYXRRdWFkLmgiCi0jaW5jbHVkZSAiR3JhcGhp
Y3NDb250ZXh0LmgiCi0jaW5jbHVkZSAiSGl0VGVzdFJlcXVlc3QuaCIKLSNpbmNsdWRlICJMYXlv
dXRSZXBhaW50ZXIuaCIKLSNpbmNsdWRlICJQb2ludGVyRXZlbnRzSGl0UnVsZXMuaCIKLSNpbmNs
dWRlICJSZW5kZXJTVkdDb250YWluZXIuaCIKLSNpbmNsdWRlICJSZW5kZXJTVkdSZXNvdXJjZU1h
cmtlci5oIgotI2luY2x1ZGUgIlJlbmRlclNWR1Jlc291cmNlU29saWRDb2xvci5oIgotI2luY2x1
ZGUgIlNWR1JlbmRlclN1cHBvcnQuaCIKLSNpbmNsdWRlICJTVkdSZXNvdXJjZXMuaCIKKyNpbmNs
dWRlICJTVkdQYXRoRWxlbWVudC5oIgogI2luY2x1ZGUgIlNWR1N0eWxlZFRyYW5zZm9ybWFibGVF
bGVtZW50LmgiCi0jaW5jbHVkZSAiU1ZHVHJhbnNmb3JtTGlzdC5oIgotI2luY2x1ZGUgIlNWR1VS
SVJlZmVyZW5jZS5oIgotI2luY2x1ZGUgIlN0cm9rZVN0eWxlQXBwbGllci5oIgotI2luY2x1ZGUg
PHd0Zi9NYXRoRXh0cmFzLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotY2xhc3MgQm91bmRp
bmdSZWN0U3Ryb2tlU3R5bGVBcHBsaWVyIDogcHVibGljIFN0cm9rZVN0eWxlQXBwbGllciB7Ci1w
dWJsaWM6Ci0gICAgQm91bmRpbmdSZWN0U3Ryb2tlU3R5bGVBcHBsaWVyKGNvbnN0IFJlbmRlck9i
amVjdCogb2JqZWN0LCBSZW5kZXJTdHlsZSogc3R5bGUpCi0gICAgICAgIDogbV9vYmplY3Qob2Jq
ZWN0KQotICAgICAgICAsIG1fc3R5bGUoc3R5bGUpCi0gICAgewotICAgICAgICBBU1NFUlQoc3R5
bGUpOwotICAgICAgICBBU1NFUlQob2JqZWN0KTsKLSAgICB9Ci0KLSAgICB2b2lkIHN0cm9rZVN0
eWxlKEdyYXBoaWNzQ29udGV4dCogZ2MpCi0gICAgewotICAgICAgICBTVkdSZW5kZXJTdXBwb3J0
OjphcHBseVN0cm9rZVN0eWxlVG9Db250ZXh0KGdjLCBtX3N0eWxlLCBtX29iamVjdCk7Ci0gICAg
fQotCi1wcml2YXRlOgotICAgIGNvbnN0IFJlbmRlck9iamVjdCogbV9vYmplY3Q7Ci0gICAgUmVu
ZGVyU3R5bGUqIG1fc3R5bGU7Ci19OwotCiBSZW5kZXJTVkdQYXRoOjpSZW5kZXJTVkdQYXRoKFNW
R1N0eWxlZFRyYW5zZm9ybWFibGVFbGVtZW50KiBub2RlKQotICAgIDogUmVuZGVyU1ZHTW9kZWxP
YmplY3Qobm9kZSkKLSAgICAsIG1fbmVlZHNCb3VuZGFyaWVzVXBkYXRlKGZhbHNlKSAvLyBkZWZh
dWx0IGlzIGZhbHNlLCB0aGUgY2FjaGVkIHJlY3RzIGFyZSBlbXB0eSBmcm9tIHRoZSBiZWdpbm5p
bmcKLSAgICAsIG1fbmVlZHNQYXRoVXBkYXRlKHRydWUpIC8vIGRlZmF1bHQgaXMgdHJ1ZSwgc28g
d2UgZ3JhYiBhIFBhdGggb2JqZWN0IG9uY2UgZnJvbSBTVkdTdHlsZWRUcmFuc2Zvcm1hYmxlRWxl
bWVudAotICAgICwgbV9uZWVkc1RyYW5zZm9ybVVwZGF0ZSh0cnVlKSAvLyBkZWZhdWx0IGlzIHRy
dWUsIHNvIHdlIGdyYWIgYSBBZmZpbmVUcmFuc2Zvcm0gb2JqZWN0IG9uY2UgZnJvbSBTVkdTdHls
ZWRUcmFuc2Zvcm1hYmxlRWxlbWVudAorICAgIDogUmVuZGVyU1ZHU2hhcGUobm9kZSkKIHsKIH0K
IApAQCAtNzksMzE0ICs0NCwxNiBAQCBSZW5kZXJTVkdQYXRoOjp+UmVuZGVyU1ZHUGF0aCgpCiB7
CiB9CiAKLWJvb2wgUmVuZGVyU1ZHUGF0aDo6ZmlsbENvbnRhaW5zKGNvbnN0IEZsb2F0UG9pbnQm
IHBvaW50LCBib29sIHJlcXVpcmVzRmlsbCwgV2luZFJ1bGUgZmlsbFJ1bGUpCi17Ci0gICAgaWYg
KCFtX2ZpbGxCb3VuZGluZ0JveC5jb250YWlucyhwb2ludCkpCi0gICAgICAgIHJldHVybiBmYWxz
ZTsKLQotICAgIENvbG9yIGZhbGxiYWNrQ29sb3I7Ci0gICAgaWYgKHJlcXVpcmVzRmlsbCAmJiAh
UmVuZGVyU1ZHUmVzb3VyY2U6OmZpbGxQYWludGluZ1Jlc291cmNlKHRoaXMsIHN0eWxlKCksIGZh
bGxiYWNrQ29sb3IpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICByZXR1cm4gbV9wYXRo
LmNvbnRhaW5zKHBvaW50LCBmaWxsUnVsZSk7Ci19Ci0KLWJvb2wgUmVuZGVyU1ZHUGF0aDo6c3Ry
b2tlQ29udGFpbnMoY29uc3QgRmxvYXRQb2ludCYgcG9pbnQsIGJvb2wgcmVxdWlyZXNTdHJva2Up
Ci17Ci0gICAgaWYgKCFtX3N0cm9rZUFuZE1hcmtlckJvdW5kaW5nQm94LmNvbnRhaW5zKHBvaW50
KSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgQ29sb3IgZmFsbGJhY2tDb2xvcjsKLSAg
ICBpZiAocmVxdWlyZXNTdHJva2UgJiYgIVJlbmRlclNWR1Jlc291cmNlOjpzdHJva2VQYWludGlu
Z1Jlc291cmNlKHRoaXMsIHN0eWxlKCksIGZhbGxiYWNrQ29sb3IpKQotICAgICAgICByZXR1cm4g
ZmFsc2U7Ci0KLSAgICBpZiAoc2hvdWxkU3Ryb2tlWmVyb0xlbmd0aFN1YnBhdGgoKSkKLSAgICAg
ICAgcmV0dXJuIHplcm9MZW5ndGhTdWJwYXRoUmVjdCgpLmNvbnRhaW5zKHBvaW50KTsKLQotICAg
IEJvdW5kaW5nUmVjdFN0cm9rZVN0eWxlQXBwbGllciBzdHJva2VTdHlsZSh0aGlzLCBzdHlsZSgp
KTsKLSAgICByZXR1cm4gbV9wYXRoLnN0cm9rZUNvbnRhaW5zKCZzdHJva2VTdHlsZSwgcG9pbnQp
OwotfQotCi12b2lkIFJlbmRlclNWR1BhdGg6OmxheW91dCgpCi17Ci0gICAgTGF5b3V0UmVwYWlu
dGVyIHJlcGFpbnRlcigqdGhpcywgY2hlY2tGb3JSZXBhaW50RHVyaW5nTGF5b3V0KCkgJiYgc2Vs
Zk5lZWRzTGF5b3V0KCkpOwotICAgIFNWR1N0eWxlZFRyYW5zZm9ybWFibGVFbGVtZW50KiBlbGVt
ZW50ID0gc3RhdGljX2Nhc3Q8U1ZHU3R5bGVkVHJhbnNmb3JtYWJsZUVsZW1lbnQqPihub2RlKCkp
OwotCi0gICAgYm9vbCB1cGRhdGVDYWNoZWRCb3VuZGFyaWVzSW5QYXJlbnRzID0gZmFsc2U7Ci0K
LSAgICBib29sIG5lZWRzUGF0aFVwZGF0ZSA9IG1fbmVlZHNQYXRoVXBkYXRlOwotICAgIGlmIChu
ZWVkc1BhdGhVcGRhdGUpIHsKLSAgICAgICAgbV9wYXRoLmNsZWFyKCk7Ci0gICAgICAgIGVsZW1l
bnQtPnRvUGF0aERhdGEobV9wYXRoKTsKLSAgICAgICAgbV9uZWVkc1BhdGhVcGRhdGUgPSBmYWxz
ZTsKLSAgICAgICAgdXBkYXRlQ2FjaGVkQm91bmRhcmllc0luUGFyZW50cyA9IHRydWU7Ci0gICAg
fQotCi0gICAgaWYgKG1fbmVlZHNUcmFuc2Zvcm1VcGRhdGUpIHsKLSAgICAgICAgbV9sb2NhbFRy
YW5zZm9ybSA9IGVsZW1lbnQtPmFuaW1hdGVkTG9jYWxUcmFuc2Zvcm0oKTsKLSAgICAgICAgbV9u
ZWVkc1RyYW5zZm9ybVVwZGF0ZSA9IGZhbHNlOwotICAgICAgICB1cGRhdGVDYWNoZWRCb3VuZGFy
aWVzSW5QYXJlbnRzID0gdHJ1ZTsKLSAgICB9Ci0KLSAgICBpZiAobV9uZWVkc0JvdW5kYXJpZXNV
cGRhdGUpCi0gICAgICAgIHVwZGF0ZUNhY2hlZEJvdW5kYXJpZXNJblBhcmVudHMgPSB0cnVlOwot
Ci0gICAgLy8gSW52YWxpZGF0ZSBhbGwgcmVzb3VyY2VzIG9mIHRoaXMgY2xpZW50IGlmIG91ciBs
YXlvdXQgY2hhbmdlZC4KLSAgICBpZiAobV9ldmVySGFkTGF5b3V0ICYmIHNlbGZOZWVkc0xheW91
dCgpKSB7Ci0gICAgICAgIFNWR1Jlc291cmNlc0NhY2hlOjpjbGllbnRMYXlvdXRDaGFuZ2VkKHRo
aXMpOwotICAgICAgICBtX21hcmtlckxheW91dEluZm8uY2xlYXIoKTsKLSAgICB9Ci0KLSAgICAv
LyBBdCB0aGlzIHBvaW50IExheW91dFJlcGFpbnRlciBhbHJlYWR5IGdyYWJiZWQgdGhlIG9sZCBi
b3VuZHMsCi0gICAgLy8gcmVjYWxjdWxhdGUgdGhlbSBub3cgc28gcmVwYWludEFmdGVyTGF5b3V0
KCkgdXNlcyB0aGUgbmV3IGJvdW5kcy4KLSAgICBpZiAobmVlZHNQYXRoVXBkYXRlIHx8IG1fbmVl
ZHNCb3VuZGFyaWVzVXBkYXRlKSB7Ci0gICAgICAgIHVwZGF0ZUNhY2hlZEJvdW5kYXJpZXMoKTsK
LSAgICAgICAgbV9uZWVkc0JvdW5kYXJpZXNVcGRhdGUgPSBmYWxzZTsKLSAgICB9Ci0KLSAgICAv
LyBJZiBvdXIgYm91bmRzIGNoYW5nZWQsIG5vdGlmeSB0aGUgcGFyZW50cy4KLSAgICBpZiAodXBk
YXRlQ2FjaGVkQm91bmRhcmllc0luUGFyZW50cykKLSAgICAgICAgUmVuZGVyU1ZHTW9kZWxPYmpl
Y3Q6OnNldE5lZWRzQm91bmRhcmllc1VwZGF0ZSgpOwotCi0gICAgcmVwYWludGVyLnJlcGFpbnRB
ZnRlckxheW91dCgpOwotICAgIHNldE5lZWRzTGF5b3V0KGZhbHNlKTsKLX0KLQotYm9vbCBSZW5k
ZXJTVkdQYXRoOjpzaG91bGRTdHJva2VaZXJvTGVuZ3RoU3VicGF0aCgpIGNvbnN0Ci17Ci0gICAg
Ly8gU3BlYygxMS40KTogQW55IHplcm8gbGVuZ3RoIHN1YnBhdGggc2hhbGwgbm90IGJlIHN0cm9r
ZWQgaWYgdGhlIOKAmHN0cm9rZS1saW5lY2Fw4oCZIHByb3BlcnR5IGhhcyBhIHZhbHVlIG9mIGJ1
dHQKLSAgICAvLyBidXQgc2hhbGwgYmUgc3Ryb2tlZCBpZiB0aGUg4oCYc3Ryb2tlLWxpbmVjYXDi
gJkgcHJvcGVydHkgaGFzIGEgdmFsdWUgb2Ygcm91bmQgb3Igc3F1YXJlCi0gICAgcmV0dXJuIHN0
eWxlKCktPnN2Z1N0eWxlKCktPmhhc1N0cm9rZSgpICYmIHN0eWxlKCktPnN2Z1N0eWxlKCktPmNh
cFN0eWxlKCkgIT0gQnV0dENhcCAmJiAhbV9maWxsQm91bmRpbmdCb3gud2lkdGgoKSAmJiAhbV9m
aWxsQm91bmRpbmdCb3guaGVpZ2h0KCk7Ci19Ci0KLUZsb2F0UmVjdCBSZW5kZXJTVkdQYXRoOjp6
ZXJvTGVuZ3RoU3VicGF0aFJlY3QoKSBjb25zdAotewotICAgIFNWR0VsZW1lbnQqIHN2Z0VsZW1l
bnQgPSBzdGF0aWNfY2FzdDxTVkdFbGVtZW50Kj4obm9kZSgpKTsKLSAgICBmbG9hdCBzdHJva2VX
aWR0aCA9IHN0eWxlKCktPnN2Z1N0eWxlKCktPnN0cm9rZVdpZHRoKCkudmFsdWUoc3ZnRWxlbWVu
dCk7Ci0gICAgcmV0dXJuIEZsb2F0UmVjdChtX2ZpbGxCb3VuZGluZ0JveC54KCkgLSBzdHJva2VX
aWR0aCAvIDIsIG1fZmlsbEJvdW5kaW5nQm94LnkoKSAtIHN0cm9rZVdpZHRoIC8gMiwgc3Ryb2tl
V2lkdGgsIHN0cm9rZVdpZHRoKTsKLX0KLQotdm9pZCBSZW5kZXJTVkdQYXRoOjpzZXR1cFNxdWFy
ZUNhcFBhdGgoUGF0aComIHVzZVBhdGgsIGludCYgYXBwbHlNb2RlKQotewotICAgIC8vIFNwZWMo
MTEuNCk6IEFueSB6ZXJvIGxlbmd0aCBzdWJwYXRoIHNoYWxsIG5vdCBiZSBzdHJva2VkIGlmIHRo
ZSDigJhzdHJva2UtbGluZWNhcOKAmSBwcm9wZXJ0eSBoYXMgYSB2YWx1ZSBvZiBidXR0Ci0gICAg
Ly8gYnV0IHNoYWxsIGJlIHN0cm9rZWQgaWYgdGhlIOKAmHN0cm9rZS1saW5lY2Fw4oCZIHByb3Bl
cnR5IGhhcyBhIHZhbHVlIG9mIHJvdW5kIG9yIHNxdWFyZQotICAgIERFRklORV9TVEFUSUNfTE9D
QUwoUGF0aCwgdGVtcFBhdGgsICgpKTsKLQotICAgIGFwcGx5TW9kZSA9IEFwcGx5VG9GaWxsTW9k
ZTsKLSAgICB1c2VQYXRoID0gJnRlbXBQYXRoOwotICAgIHVzZVBhdGgtPmNsZWFyKCk7Ci0gICAg
aWYgKHN0eWxlKCktPnN2Z1N0eWxlKCktPmNhcFN0eWxlKCkgPT0gU3F1YXJlQ2FwKQotICAgICAg
ICB1c2VQYXRoLT5hZGRSZWN0KHplcm9MZW5ndGhTdWJwYXRoUmVjdCgpKTsKLSAgICBlbHNlCi0g
ICAgICAgIHVzZVBhdGgtPmFkZEVsbGlwc2UoemVyb0xlbmd0aFN1YnBhdGhSZWN0KCkpOwotfQot
Ci1ib29sIFJlbmRlclNWR1BhdGg6OnNldHVwTm9uU2NhbGluZ1N0cm9rZVBhdGgoUGF0aComIHVz
ZVBhdGgsIEdyYXBoaWNzQ29udGV4dFN0YXRlU2F2ZXImIHN0YXRlU2F2ZXIpCit2b2lkIFJlbmRl
clNWR1BhdGg6OmluZmxhdGVXaXRoTWFya2VyQm91bmRzKCkKIHsKLSAgICBERUZJTkVfU1RBVElD
X0xPQ0FMKFBhdGgsIHRlbXBQYXRoLCAoKSk7Ci0KLSAgICBTVkdTdHlsZWRUcmFuc2Zvcm1hYmxl
RWxlbWVudCogZWxlbWVudCA9IHN0YXRpY19jYXN0PFNWR1N0eWxlZFRyYW5zZm9ybWFibGVFbGVt
ZW50Kj4obm9kZSgpKTsKLSAgICBBZmZpbmVUcmFuc2Zvcm0gbm9uU2NhbGluZ1N0cm9rZVRyYW5z
Zm9ybSA9IGVsZW1lbnQtPmdldFNjcmVlbkNUTShTVkdMb2NhdGFibGU6OkRpc2FsbG93U3R5bGVV
cGRhdGUpOwotICAgIGlmICghbm9uU2NhbGluZ1N0cm9rZVRyYW5zZm9ybS5pc0ludmVydGlibGUo
KSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgdGVtcFBhdGggPSBtX3BhdGg7Ci0gICAg
dXNlUGF0aCA9ICZ0ZW1wUGF0aDsKLSAgICB0ZW1wUGF0aC50cmFuc2Zvcm0obm9uU2NhbGluZ1N0
cm9rZVRyYW5zZm9ybSk7Ci0KLSAgICBzdGF0ZVNhdmVyLnNhdmUoKTsKLSAgICBzdGF0ZVNhdmVy
LmNvbnRleHQoKS0+Y29uY2F0Q1RNKG5vblNjYWxpbmdTdHJva2VUcmFuc2Zvcm0uaW52ZXJzZSgp
KTsKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotdm9pZCBSZW5kZXJTVkdQYXRoOjpmaWxsQW5kU3Ry
b2tlUGF0aChHcmFwaGljc0NvbnRleHQqIGNvbnRleHQpCi17Ci0gICAgUmVuZGVyU3R5bGUqIHN0
eWxlID0gdGhpcy0+c3R5bGUoKTsKLQotICAgIENvbG9yIGZhbGxiYWNrQ29sb3I7Ci0gICAgaWYg
KFJlbmRlclNWR1Jlc291cmNlKiBmaWxsUGFpbnRpbmdSZXNvdXJjZSA9IFJlbmRlclNWR1Jlc291
cmNlOjpmaWxsUGFpbnRpbmdSZXNvdXJjZSh0aGlzLCBzdHlsZSwgZmFsbGJhY2tDb2xvcikpIHsK
LSAgICAgICAgaWYgKGZpbGxQYWludGluZ1Jlc291cmNlLT5hcHBseVJlc291cmNlKHRoaXMsIHN0
eWxlLCBjb250ZXh0LCBBcHBseVRvRmlsbE1vZGUpKQotICAgICAgICAgICAgZmlsbFBhaW50aW5n
UmVzb3VyY2UtPnBvc3RBcHBseVJlc291cmNlKHRoaXMsIGNvbnRleHQsIEFwcGx5VG9GaWxsTW9k
ZSwgJm1fcGF0aCk7Ci0gICAgICAgIGVsc2UgaWYgKGZhbGxiYWNrQ29sb3IuaXNWYWxpZCgpKSB7
Ci0gICAgICAgICAgICBSZW5kZXJTVkdSZXNvdXJjZVNvbGlkQ29sb3IqIGZhbGxiYWNrUmVzb3Vy
Y2UgPSBSZW5kZXJTVkdSZXNvdXJjZTo6c2hhcmVkU29saWRQYWludGluZ1Jlc291cmNlKCk7Ci0g
ICAgICAgICAgICBmYWxsYmFja1Jlc291cmNlLT5zZXRDb2xvcihmYWxsYmFja0NvbG9yKTsKLSAg
ICAgICAgICAgIGlmIChmYWxsYmFja1Jlc291cmNlLT5hcHBseVJlc291cmNlKHRoaXMsIHN0eWxl
LCBjb250ZXh0LCBBcHBseVRvRmlsbE1vZGUpKQotICAgICAgICAgICAgICAgIGZhbGxiYWNrUmVz
b3VyY2UtPnBvc3RBcHBseVJlc291cmNlKHRoaXMsIGNvbnRleHQsIEFwcGx5VG9GaWxsTW9kZSwg
Jm1fcGF0aCk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBmYWxsYmFja0NvbG9yID0gQ29sb3Io
KTsKLSAgICBSZW5kZXJTVkdSZXNvdXJjZSogc3Ryb2tlUGFpbnRpbmdSZXNvdXJjZSA9IFJlbmRl
clNWR1Jlc291cmNlOjpzdHJva2VQYWludGluZ1Jlc291cmNlKHRoaXMsIHN0eWxlLCBmYWxsYmFj
a0NvbG9yKTsKLSAgICBpZiAoIXN0cm9rZVBhaW50aW5nUmVzb3VyY2UpCi0gICAgICAgIHJldHVy
bjsKLQotICAgIFBhdGgqIHVzZVBhdGggPSAmbV9wYXRoOwotICAgIGludCBhcHBseU1vZGUgPSBB
cHBseVRvU3Ryb2tlTW9kZTsKLQotICAgIGJvb2wgbm9uU2NhbGluZ1N0cm9rZSA9IHN0eWxlLT5z
dmdTdHlsZSgpLT52ZWN0b3JFZmZlY3QoKSA9PSBWRV9OT05fU0NBTElOR19TVFJPS0U7Ci0KLSAg
ICBHcmFwaGljc0NvbnRleHRTdGF0ZVNhdmVyIHN0YXRlU2F2ZXIoKmNvbnRleHQsIGZhbHNlKTsK
LQotICAgIC8vIFNwZWMoMTEuNCk6IEFueSB6ZXJvIGxlbmd0aCBzdWJwYXRoIHNoYWxsIG5vdCBi
ZSBzdHJva2VkIGlmIHRoZSDigJhzdHJva2UtbGluZWNhcOKAmSBwcm9wZXJ0eSBoYXMgYSB2YWx1
ZSBvZiBidXR0Ci0gICAgLy8gYnV0IHNoYWxsIGJlIHN0cm9rZWQgaWYgdGhlIOKAmHN0cm9rZS1s
aW5lY2Fw4oCZIHByb3BlcnR5IGhhcyBhIHZhbHVlIG9mIHJvdW5kIG9yIHNxdWFyZQotICAgIC8v
IEZJWE1FOiB0aGlzIGRvZXMgbm90IHdvcmsgZm9yIHplcm8tbGVuZ3RoIHN1YnBhdGhzLCBvbmx5
IHdoZW4gdG90YWwgcGF0aCBpcyB6ZXJvLWxlbmd0aAotICAgIGlmIChzaG91bGRTdHJva2VaZXJv
TGVuZ3RoU3VicGF0aCgpKQotICAgICAgICBzZXR1cFNxdWFyZUNhcFBhdGgodXNlUGF0aCwgYXBw
bHlNb2RlKTsKLSAgICBlbHNlIGlmIChub25TY2FsaW5nU3Ryb2tlKSB7Ci0gICAgICAgaWYgKCFz
ZXR1cE5vblNjYWxpbmdTdHJva2VQYXRoKHVzZVBhdGgsIHN0YXRlU2F2ZXIpKQotICAgICAgICAg
ICByZXR1cm47Ci0gICAgfQotCi0gICAgaWYgKHN0cm9rZVBhaW50aW5nUmVzb3VyY2UtPmFwcGx5
UmVzb3VyY2UodGhpcywgc3R5bGUsIGNvbnRleHQsIGFwcGx5TW9kZSkpCi0gICAgICAgIHN0cm9r
ZVBhaW50aW5nUmVzb3VyY2UtPnBvc3RBcHBseVJlc291cmNlKHRoaXMsIGNvbnRleHQsIGFwcGx5
TW9kZSwgdXNlUGF0aCk7Ci0gICAgZWxzZSBpZiAoZmFsbGJhY2tDb2xvci5pc1ZhbGlkKCkpIHsK
LSAgICAgICAgUmVuZGVyU1ZHUmVzb3VyY2VTb2xpZENvbG9yKiBmYWxsYmFja1Jlc291cmNlID0g
UmVuZGVyU1ZHUmVzb3VyY2U6OnNoYXJlZFNvbGlkUGFpbnRpbmdSZXNvdXJjZSgpOwotICAgICAg
ICBmYWxsYmFja1Jlc291cmNlLT5zZXRDb2xvcihmYWxsYmFja0NvbG9yKTsKLSAgICAgICAgaWYg
KGZhbGxiYWNrUmVzb3VyY2UtPmFwcGx5UmVzb3VyY2UodGhpcywgc3R5bGUsIGNvbnRleHQsIGFw
cGx5TW9kZSkpCi0gICAgICAgICAgICBmYWxsYmFja1Jlc291cmNlLT5wb3N0QXBwbHlSZXNvdXJj
ZSh0aGlzLCBjb250ZXh0LCBhcHBseU1vZGUsIHVzZVBhdGgpOwotICAgIH0KLX0KLQotdm9pZCBS
ZW5kZXJTVkdQYXRoOjpwYWludChQYWludEluZm8mIHBhaW50SW5mbywgY29uc3QgTGF5b3V0UG9p
bnQmKQotewotICAgIGlmIChwYWludEluZm8uY29udGV4dC0+cGFpbnRpbmdEaXNhYmxlZCgpIHx8
IHN0eWxlKCktPnZpc2liaWxpdHkoKSA9PSBISURERU4gfHwgbV9wYXRoLmlzRW1wdHkoKSkKLSAg
ICAgICAgcmV0dXJuOwotCi0gICAgRmxvYXRSZWN0IGJvdW5kaW5nQm94ID0gcmVwYWludFJlY3RJ
bkxvY2FsQ29vcmRpbmF0ZXMoKTsKLSAgICBpZiAoIVNWR1JlbmRlclN1cHBvcnQ6OnBhaW50SW5m
b0ludGVyc2VjdHNSZXBhaW50UmVjdChib3VuZGluZ0JveCwgbV9sb2NhbFRyYW5zZm9ybSwgcGFp
bnRJbmZvKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgUGFpbnRJbmZvIGNoaWxkUGFpbnRJbmZv
KHBhaW50SW5mbyk7Ci0gICAgYm9vbCBkcmF3c091dGxpbmUgPSBzdHlsZSgpLT5vdXRsaW5lV2lk
dGgoKSAmJiAoY2hpbGRQYWludEluZm8ucGhhc2UgPT0gUGFpbnRQaGFzZU91dGxpbmUgfHwgY2hp
bGRQYWludEluZm8ucGhhc2UgPT0gUGFpbnRQaGFzZVNlbGZPdXRsaW5lKTsKLSAgICBpZiAoZHJh
d3NPdXRsaW5lIHx8IGNoaWxkUGFpbnRJbmZvLnBoYXNlID09IFBhaW50UGhhc2VGb3JlZ3JvdW5k
KSB7Ci0gICAgICAgIEdyYXBoaWNzQ29udGV4dFN0YXRlU2F2ZXIgc3RhdGVTYXZlcigqY2hpbGRQ
YWludEluZm8uY29udGV4dCk7Ci0gICAgICAgIGNoaWxkUGFpbnRJbmZvLmFwcGx5VHJhbnNmb3Jt
KG1fbG9jYWxUcmFuc2Zvcm0pOwotCi0gICAgICAgIGlmIChjaGlsZFBhaW50SW5mby5waGFzZSA9
PSBQYWludFBoYXNlRm9yZWdyb3VuZCkgewotICAgICAgICAgICAgUGFpbnRJbmZvIHNhdmVkSW5m
byhjaGlsZFBhaW50SW5mbyk7Ci0KLSAgICAgICAgICAgIGlmIChTVkdSZW5kZXJTdXBwb3J0Ojpw
cmVwYXJlVG9SZW5kZXJTVkdDb250ZW50KHRoaXMsIGNoaWxkUGFpbnRJbmZvKSkgewotICAgICAg
ICAgICAgICAgIGNvbnN0IFNWR1JlbmRlclN0eWxlKiBzdmdTdHlsZSA9IHN0eWxlKCktPnN2Z1N0
eWxlKCk7Ci0gICAgICAgICAgICAgICAgaWYgKHN2Z1N0eWxlLT5zaGFwZVJlbmRlcmluZygpID09
IFNSX0NSSVNQRURHRVMpCi0gICAgICAgICAgICAgICAgICAgIGNoaWxkUGFpbnRJbmZvLmNvbnRl
eHQtPnNldFNob3VsZEFudGlhbGlhcyhmYWxzZSk7Ci0KLSAgICAgICAgICAgICAgICBmaWxsQW5k
U3Ryb2tlUGF0aChjaGlsZFBhaW50SW5mby5jb250ZXh0KTsKLQotICAgICAgICAgICAgICAgIGlm
IChzdmdTdHlsZS0+aGFzTWFya2VycygpKQotICAgICAgICAgICAgICAgICAgICBtX21hcmtlckxh
eW91dEluZm8uZHJhd01hcmtlcnMoY2hpbGRQYWludEluZm8pOwotICAgICAgICAgICAgfQotCi0g
ICAgICAgICAgICBTVkdSZW5kZXJTdXBwb3J0OjpmaW5pc2hSZW5kZXJTVkdDb250ZW50KHRoaXMs
IGNoaWxkUGFpbnRJbmZvLCBzYXZlZEluZm8uY29udGV4dCk7Ci0gICAgICAgIH0KLQotICAgICAg
ICBpZiAoZHJhd3NPdXRsaW5lKQotICAgICAgICAgICAgcGFpbnRPdXRsaW5lKGNoaWxkUGFpbnRJ
bmZvLmNvbnRleHQsIEludFJlY3QoYm91bmRpbmdCb3gpKTsKLSAgICB9Ci19Ci0KLS8vIFRoaXMg
bWV0aG9kIGlzIGNhbGxlZCBmcm9tIGluc2lkZSBwYWludE91dGxpbmUoKSBzaW5jZSB3ZSBjYWxs
IHBhaW50T3V0bGluZSgpCi0vLyB3aGlsZSB0cmFuc2Zvcm1lZCB0byBvdXIgY29vcmQgc3lzdGVt
LCByZXR1cm4gbG9jYWwgY29vcmRzCi12b2lkIFJlbmRlclNWR1BhdGg6OmFkZEZvY3VzUmluZ1Jl
Y3RzKFZlY3RvcjxMYXlvdXRSZWN0PiYgcmVjdHMsIGNvbnN0IExheW91dFBvaW50JikgCi17Ci0g
ICAgTGF5b3V0UmVjdCByZWN0ID0gZW5jbG9zaW5nTGF5b3V0UmVjdChyZXBhaW50UmVjdEluTG9j
YWxDb29yZGluYXRlcygpKTsKLSAgICBpZiAoIXJlY3QuaXNFbXB0eSgpKQotICAgICAgICByZWN0
cy5hcHBlbmQocmVjdCk7Ci19Ci0KLWJvb2wgUmVuZGVyU1ZHUGF0aDo6bm9kZUF0RmxvYXRQb2lu
dChjb25zdCBIaXRUZXN0UmVxdWVzdCYgcmVxdWVzdCwgSGl0VGVzdFJlc3VsdCYgcmVzdWx0LCBj
b25zdCBGbG9hdFBvaW50JiBwb2ludEluUGFyZW50LCBIaXRUZXN0QWN0aW9uIGhpdFRlc3RBY3Rp
b24pCi17Ci0gICAgLy8gV2Ugb25seSBkcmF3IGluIHRoZSBmb3Jncm91bmQgcGhhc2UsIHNvIHdl
IG9ubHkgaGl0LXRlc3QgdGhlbi4KLSAgICBpZiAoaGl0VGVzdEFjdGlvbiAhPSBIaXRUZXN0Rm9y
ZWdyb3VuZCkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgRmxvYXRQb2ludCBsb2NhbFBv
aW50ID0gbV9sb2NhbFRyYW5zZm9ybS5pbnZlcnNlKCkubWFwUG9pbnQocG9pbnRJblBhcmVudCk7
Ci0KLSAgICBpZiAoIVNWR1JlbmRlclN1cHBvcnQ6OnBvaW50SW5DbGlwcGluZ0FyZWEodGhpcywg
bG9jYWxQb2ludCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIFBvaW50ZXJFdmVudHNI
aXRSdWxlcyBoaXRSdWxlcyhQb2ludGVyRXZlbnRzSGl0UnVsZXM6OlNWR19QQVRIX0hJVFRFU1RJ
TkcsIHJlcXVlc3QsIHN0eWxlKCktPnBvaW50ZXJFdmVudHMoKSk7Ci0gICAgYm9vbCBpc1Zpc2li
bGUgPSAoc3R5bGUoKS0+dmlzaWJpbGl0eSgpID09IFZJU0lCTEUpOwotICAgIGlmIChpc1Zpc2li
bGUgfHwgIWhpdFJ1bGVzLnJlcXVpcmVWaXNpYmxlKSB7Ci0gICAgICAgIGNvbnN0IFNWR1JlbmRl
clN0eWxlKiBzdmdTdHlsZSA9IHN0eWxlKCktPnN2Z1N0eWxlKCk7Ci0gICAgICAgIFdpbmRSdWxl
IGZpbGxSdWxlID0gc3ZnU3R5bGUtPmZpbGxSdWxlKCk7Ci0gICAgICAgIGlmIChyZXF1ZXN0LnN2
Z0NsaXBDb250ZW50KCkpCi0gICAgICAgICAgICBmaWxsUnVsZSA9IHN2Z1N0eWxlLT5jbGlwUnVs
ZSgpOwotICAgICAgICBpZiAoKGhpdFJ1bGVzLmNhbkhpdFN0cm9rZSAmJiAoc3ZnU3R5bGUtPmhh
c1N0cm9rZSgpIHx8ICFoaXRSdWxlcy5yZXF1aXJlU3Ryb2tlKSAmJiBzdHJva2VDb250YWlucyhs
b2NhbFBvaW50LCBoaXRSdWxlcy5yZXF1aXJlU3Ryb2tlKSkKLSAgICAgICAgICAgIHx8IChoaXRS
dWxlcy5jYW5IaXRGaWxsICYmIChzdmdTdHlsZS0+aGFzRmlsbCgpIHx8ICFoaXRSdWxlcy5yZXF1
aXJlRmlsbCkgJiYgZmlsbENvbnRhaW5zKGxvY2FsUG9pbnQsIGhpdFJ1bGVzLnJlcXVpcmVGaWxs
LCBmaWxsUnVsZSkpKSB7Ci0gICAgICAgICAgICB1cGRhdGVIaXRUZXN0UmVzdWx0KHJlc3VsdCwg
cm91bmRlZExheW91dFBvaW50KGxvY2FsUG9pbnQpKTsKLSAgICAgICAgICAgIHJldHVybiB0cnVl
OwotICAgICAgICB9Ci0gICAgfQotICAgIHJldHVybiBmYWxzZTsKLX0KLQotRmxvYXRSZWN0IFJl
bmRlclNWR1BhdGg6OmNhbGN1bGF0ZU1hcmtlckJvdW5kc0lmTmVlZGVkKCkKLXsKLSAgICBTVkdF
bGVtZW50KiBzdmdFbGVtZW50ID0gc3RhdGljX2Nhc3Q8U1ZHRWxlbWVudCo+KG5vZGUoKSk7Ci0g
ICAgQVNTRVJUKHN2Z0VsZW1lbnQgJiYgc3ZnRWxlbWVudC0+ZG9jdW1lbnQoKSk7Ci0gICAgaWYg
KCFzdmdFbGVtZW50LT5pc1N0eWxlZCgpKQotICAgICAgICByZXR1cm4gRmxvYXRSZWN0KCk7Ci0K
LSAgICBTVkdTdHlsZWRFbGVtZW50KiBzdHlsZWRFbGVtZW50ID0gc3RhdGljX2Nhc3Q8U1ZHU3R5
bGVkRWxlbWVudCo+KHN2Z0VsZW1lbnQpOwotICAgIGlmICghc3R5bGVkRWxlbWVudC0+c3VwcG9y
dHNNYXJrZXJzKCkpCi0gICAgICAgIHJldHVybiBGbG9hdFJlY3QoKTsKLQotICAgIGNvbnN0IFNW
R1JlbmRlclN0eWxlKiBzdmdTdHlsZSA9IHN0eWxlKCktPnN2Z1N0eWxlKCk7Ci0gICAgQVNTRVJU
KHN2Z1N0eWxlLT5oYXNNYXJrZXJzKCkpOwotCi0gICAgU1ZHUmVzb3VyY2VzKiByZXNvdXJjZXMg
PSBTVkdSZXNvdXJjZXNDYWNoZTo6Y2FjaGVkUmVzb3VyY2VzRm9yUmVuZGVyT2JqZWN0KHRoaXMp
OwotICAgIGlmICghcmVzb3VyY2VzKQotICAgICAgICByZXR1cm4gRmxvYXRSZWN0KCk7Ci0KLSAg
ICBSZW5kZXJTVkdSZXNvdXJjZU1hcmtlciogbWFya2VyU3RhcnQgPSByZXNvdXJjZXMtPm1hcmtl
clN0YXJ0KCk7Ci0gICAgUmVuZGVyU1ZHUmVzb3VyY2VNYXJrZXIqIG1hcmtlck1pZCA9IHJlc291
cmNlcy0+bWFya2VyTWlkKCk7Ci0gICAgUmVuZGVyU1ZHUmVzb3VyY2VNYXJrZXIqIG1hcmtlckVu
ZCA9IHJlc291cmNlcy0+bWFya2VyRW5kKCk7Ci0gICAgaWYgKCFtYXJrZXJTdGFydCAmJiAhbWFy
a2VyTWlkICYmICFtYXJrZXJFbmQpCi0gICAgICAgIHJldHVybiBGbG9hdFJlY3QoKTsKLQotICAg
IHJldHVybiBtX21hcmtlckxheW91dEluZm8uY2FsY3VsYXRlQm91bmRhcmllcyhtYXJrZXJTdGFy
dCwgbWFya2VyTWlkLCBtYXJrZXJFbmQsIHN2Z1N0eWxlLT5zdHJva2VXaWR0aCgpLnZhbHVlKHN2
Z0VsZW1lbnQpLCBtX3BhdGgpOwotfQotCi12b2lkIFJlbmRlclNWR1BhdGg6OnVwZGF0ZUNhY2hl
ZEJvdW5kYXJpZXMoKQotewotICAgIGlmIChtX3BhdGguaXNFbXB0eSgpKSB7Ci0gICAgICAgIG1f
ZmlsbEJvdW5kaW5nQm94ID0gRmxvYXRSZWN0KCk7Ci0gICAgICAgIG1fc3Ryb2tlQW5kTWFya2Vy
Qm91bmRpbmdCb3ggPSBGbG9hdFJlY3QoKTsKLSAgICAgICAgbV9yZXBhaW50Qm91bmRpbmdCb3gg
PSBGbG9hdFJlY3QoKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIC8vIENhY2hlIF91
bmNsaXBwZWRfIGZpbGwgYm91bmRpbmcgYm94LCB1c2VkIGZvciBjYWxjdWxhdGlvbnMgaW4gcmVz
b3VyY2VzCi0gICAgbV9maWxsQm91bmRpbmdCb3ggPSBtX3BhdGguYm91bmRpbmdSZWN0KCk7Ci0K
LSAgICAvLyBTcGVjKDExLjQpOiBBbnkgemVybyBsZW5ndGggc3VicGF0aCBzaGFsbCBub3QgYmUg
c3Ryb2tlZCBpZiB0aGUg4oCYc3Ryb2tlLWxpbmVjYXDigJkgcHJvcGVydHkgaGFzIGEgdmFsdWUg
b2YgYnV0dAotICAgIC8vIGJ1dCBzaGFsbCBiZSBzdHJva2VkIGlmIHRoZSDigJhzdHJva2UtbGlu
ZWNhcOKAmSBwcm9wZXJ0eSBoYXMgYSB2YWx1ZSBvZiByb3VuZCBvciBzcXVhcmUKLSAgICBpZiAo
c2hvdWxkU3Ryb2tlWmVyb0xlbmd0aFN1YnBhdGgoKSkgewotICAgICAgICBtX3N0cm9rZUFuZE1h
cmtlckJvdW5kaW5nQm94ID0gemVyb0xlbmd0aFN1YnBhdGhSZWN0KCk7Ci0gICAgICAgIC8vIENh
Y2hlIHNtYWxsZXN0IHBvc3NpYmxlIHJlcGFpbnQgcmVjdGFuZ2xlCi0gICAgICAgIG1fcmVwYWlu
dEJvdW5kaW5nQm94ID0gbV9zdHJva2VBbmRNYXJrZXJCb3VuZGluZ0JveDsKLSAgICAgICAgU1ZH
UmVuZGVyU3VwcG9ydDo6aW50ZXJzZWN0UmVwYWludFJlY3RXaXRoUmVzb3VyY2VzKHRoaXMsIG1f
cmVwYWludEJvdW5kaW5nQm94KTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIC8vIENh
Y2hlIF91bmNsaXBwZWRfIHN0cm9rZSBib3VuZGluZyBib3gsIHVzZWQgZm9yIGNhbGN1bGF0aW9u
cyBpbiByZXNvdXJjZXMgKGluY2x1ZGVzIG1hcmtlciBib3VuZGFyaWVzKQotICAgIG1fc3Ryb2tl
QW5kTWFya2VyQm91bmRpbmdCb3ggPSBtX2ZpbGxCb3VuZGluZ0JveDsKLQotICAgIGNvbnN0IFNW
R1JlbmRlclN0eWxlKiBzdmdTdHlsZSA9IHN0eWxlKCktPnN2Z1N0eWxlKCk7Ci0gICAgaWYgKHN2
Z1N0eWxlLT5oYXNTdHJva2UoKSkgewotICAgICAgICBCb3VuZGluZ1JlY3RTdHJva2VTdHlsZUFw
cGxpZXIgc3Ryb2tlU3R5bGUodGhpcywgc3R5bGUoKSk7Ci0gICAgICAgIG1fc3Ryb2tlQW5kTWFy
a2VyQm91bmRpbmdCb3gudW5pdGUobV9wYXRoLnN0cm9rZUJvdW5kaW5nUmVjdCgmc3Ryb2tlU3R5
bGUpKTsKLSAgICB9Ci0KLSAgICBpZiAoc3ZnU3R5bGUtPmhhc01hcmtlcnMoKSkgeworICAgIGlm
IChzdHlsZSgpLT5zdmdTdHlsZSgpLT5oYXNNYXJrZXJzKCkpIHsKICAgICAgICAgRmxvYXRSZWN0
IG1hcmtlckJvdW5kcyA9IGNhbGN1bGF0ZU1hcmtlckJvdW5kc0lmTmVlZGVkKCk7Ci0gICAgICAg
IGlmICghbWFya2VyQm91bmRzLmlzRW1wdHkoKSkKLSAgICAgICAgICAgIG1fc3Ryb2tlQW5kTWFy
a2VyQm91bmRpbmdCb3gudW5pdGUobWFya2VyQm91bmRzKTsKKyAgICAgICAgaWYgKCFtYXJrZXJC
b3VuZHMuaXNFbXB0eSgpKSB7CisgICAgICAgICAgICBGbG9hdFJlY3Qgc3Ryb2tlUmVjdCA9IHN0
cm9rZUFuZE1hcmtlckJvdW5kaW5nQm94KCk7CisgICAgICAgICAgICBzdHJva2VSZWN0LnVuaXRl
KG1hcmtlckJvdW5kcyk7CisgICAgICAgICAgICBzZXRTdHJva2VBbmRNYXJrZXJCb3VuZGluZ0Jv
eChzdHJva2VSZWN0KTsKKyAgICAgICAgfQogICAgIH0KLQotICAgIC8vIENhY2hlIHNtYWxsZXN0
IHBvc3NpYmxlIHJlcGFpbnQgcmVjdGFuZ2xlCi0gICAgbV9yZXBhaW50Qm91bmRpbmdCb3ggPSBt
X3N0cm9rZUFuZE1hcmtlckJvdW5kaW5nQm94OwotICAgIFNWR1JlbmRlclN1cHBvcnQ6OmludGVy
c2VjdFJlcGFpbnRSZWN0V2l0aFJlc291cmNlcyh0aGlzLCBtX3JlcGFpbnRCb3VuZGluZ0JveCk7
CiB9CiAKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVy
U1ZHUGF0aC5oIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdQYXRoLmgK
aW5kZXggOThlNjA4ZC4uNjJhMWM4YyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL3N2Zy9SZW5kZXJTVkdQYXRoLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2
Zy9SZW5kZXJTVkdQYXRoLmgKQEAgLTQsNiArNCw4IEBACiAgKiBDb3B5cmlnaHQgKEMpIDIwMDUg
RXJpYyBTZWlkZWwgPGVyaWNAd2Via2l0Lm9yZz4KICAqIENvcHlyaWdodCAoQykgMjAwNiBBcHBs
ZSBDb21wdXRlciwgSW5jCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDkgR29vZ2xlLCBJbmMuCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTEgUmVuYXRhIEhvZG92YW4gPHJlbmlAd2Via2l0Lm9yZz4KKyAqIENv
cHlyaWdodCAoQykgMjAxMSBVbml2ZXJzaXR5IG9mIFN6ZWdlZAogICoKICAqIFRoaXMgbGlicmFy
eSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAqIG1v
ZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGlj
CkBAIC0yNSw4NiArMjcsMjIgQEAKICNkZWZpbmUgUmVuZGVyU1ZHUGF0aF9oCiAKICNpZiBFTkFC
TEUoU1ZHKQotI2luY2x1ZGUgIkFmZmluZVRyYW5zZm9ybS5oIgotI2luY2x1ZGUgIkZsb2F0UmVj
dC5oIgotI2luY2x1ZGUgIlJlbmRlclNWR01vZGVsT2JqZWN0LmgiCi0jaW5jbHVkZSAiU1ZHTWFy
a2VyTGF5b3V0SW5mby5oIgorI2luY2x1ZGUgIlJlbmRlclNWR1NoYXBlLmgiCiAKIG5hbWVzcGFj
ZSBXZWJDb3JlIHsKIAotY2xhc3MgRmxvYXRQb2ludDsKLWNsYXNzIEdyYXBoaWNzQ29udGV4dFN0
YXRlU2F2ZXI7Ci1jbGFzcyBSZW5kZXJTVkdDb250YWluZXI7Ci1jbGFzcyBTVkdTdHlsZWRUcmFu
c2Zvcm1hYmxlRWxlbWVudDsKLQotY2xhc3MgUmVuZGVyU1ZHUGF0aCA6IHB1YmxpYyBSZW5kZXJT
VkdNb2RlbE9iamVjdCB7CitjbGFzcyBSZW5kZXJTVkdQYXRoIDogcHVibGljIFJlbmRlclNWR1No
YXBlIHsKIHB1YmxpYzoKICAgICBleHBsaWNpdCBSZW5kZXJTVkdQYXRoKFNWR1N0eWxlZFRyYW5z
Zm9ybWFibGVFbGVtZW50Kik7CiAgICAgdmlydHVhbCB+UmVuZGVyU1ZHUGF0aCgpOwogCi0gICAg
Y29uc3QgUGF0aCYgcGF0aCgpIGNvbnN0IHsgcmV0dXJuIG1fcGF0aDsgfQotICAgIHZvaWQgc2V0
TmVlZHNQYXRoVXBkYXRlKCkgeyBtX25lZWRzUGF0aFVwZGF0ZSA9IHRydWU7IH0KLSAgICB2aXJ0
dWFsIHZvaWQgc2V0TmVlZHNCb3VuZGFyaWVzVXBkYXRlKCkgeyBtX25lZWRzQm91bmRhcmllc1Vw
ZGF0ZSA9IHRydWU7IH0KLSAgICB2aXJ0dWFsIHZvaWQgc2V0TmVlZHNUcmFuc2Zvcm1VcGRhdGUo
KSB7IG1fbmVlZHNUcmFuc2Zvcm1VcGRhdGUgPSB0cnVlOyB9Ci0KIHByaXZhdGU6Ci0gICAgLy8g
SGl0LWRldGVjdGlvbiBzZXBlcmF0ZWQgZm9yIHRoZSBmaWxsIGFuZCB0aGUgc3Ryb2tlCi0gICAg
Ym9vbCBmaWxsQ29udGFpbnMoY29uc3QgRmxvYXRQb2ludCYsIGJvb2wgcmVxdWlyZXNGaWxsID0g
dHJ1ZSwgV2luZFJ1bGUgZmlsbFJ1bGUgPSBSVUxFX05PTlpFUk8pOwotICAgIGJvb2wgc3Ryb2tl
Q29udGFpbnMoY29uc3QgRmxvYXRQb2ludCYsIGJvb2wgcmVxdWlyZXNTdHJva2UgPSB0cnVlKTsK
LQotICAgIHZpcnR1YWwgRmxvYXRSZWN0IG9iamVjdEJvdW5kaW5nQm94KCkgY29uc3QgeyByZXR1
cm4gbV9maWxsQm91bmRpbmdCb3g7IH0KLSAgICB2aXJ0dWFsIEZsb2F0UmVjdCBzdHJva2VCb3Vu
ZGluZ0JveCgpIGNvbnN0IHsgcmV0dXJuIG1fc3Ryb2tlQW5kTWFya2VyQm91bmRpbmdCb3g7IH0K
LSAgICB2aXJ0dWFsIEZsb2F0UmVjdCByZXBhaW50UmVjdEluTG9jYWxDb29yZGluYXRlcygpIGNv
bnN0IHsgcmV0dXJuIG1fcmVwYWludEJvdW5kaW5nQm94OyB9Ci0gICAgdmlydHVhbCBjb25zdCBB
ZmZpbmVUcmFuc2Zvcm0mIGxvY2FsVG9QYXJlbnRUcmFuc2Zvcm0oKSBjb25zdCB7IHJldHVybiBt
X2xvY2FsVHJhbnNmb3JtOyB9Ci0KICAgICB2aXJ0dWFsIGJvb2wgaXNTVkdQYXRoKCkgY29uc3Qg
eyByZXR1cm4gdHJ1ZTsgfQogICAgIHZpcnR1YWwgY29uc3QgY2hhciogcmVuZGVyTmFtZSgpIGNv
bnN0IHsgcmV0dXJuICJSZW5kZXJTVkdQYXRoIjsgfQogCi0gICAgdmlydHVhbCB2b2lkIGxheW91
dCgpOwotICAgIHZpcnR1YWwgdm9pZCBwYWludChQYWludEluZm8mLCBjb25zdCBMYXlvdXRQb2lu
dCYpOwotICAgIHZpcnR1YWwgdm9pZCBhZGRGb2N1c1JpbmdSZWN0cyhWZWN0b3I8TGF5b3V0UmVj
dD4mLCBjb25zdCBMYXlvdXRQb2ludCYpOwotCi0gICAgdmlydHVhbCBib29sIG5vZGVBdEZsb2F0
UG9pbnQoY29uc3QgSGl0VGVzdFJlcXVlc3QmLCBIaXRUZXN0UmVzdWx0JiwgY29uc3QgRmxvYXRQ
b2ludCYgcG9pbnRJblBhcmVudCwgSGl0VGVzdEFjdGlvbik7Ci0KLSAgICBGbG9hdFJlY3QgY2Fs
Y3VsYXRlTWFya2VyQm91bmRzSWZOZWVkZWQoKTsKLSAgICB2b2lkIHVwZGF0ZUNhY2hlZEJvdW5k
YXJpZXMoKTsKLQotICAgIHZvaWQgc2V0dXBTcXVhcmVDYXBQYXRoKFBhdGgqJiB1c2VQYXRoLCBp
bnQmIGFwcGx5TW9kZSk7Ci0gICAgYm9vbCBzZXR1cE5vblNjYWxpbmdTdHJva2VQYXRoKFBhdGgq
JiB1c2VQYXRoLCBHcmFwaGljc0NvbnRleHRTdGF0ZVNhdmVyJik7Ci0gICAgYm9vbCBzaG91bGRT
dHJva2VaZXJvTGVuZ3RoU3VicGF0aCgpIGNvbnN0OwotICAgIEZsb2F0UmVjdCB6ZXJvTGVuZ3Ro
U3VicGF0aFJlY3QoKSBjb25zdDsKLQotcHJpdmF0ZToKLSAgICB2aXJ0dWFsIEFmZmluZVRyYW5z
Zm9ybSBsb2NhbFRyYW5zZm9ybSgpIGNvbnN0IHsgcmV0dXJuIG1fbG9jYWxUcmFuc2Zvcm07IH0K
LSAgICB2b2lkIGZpbGxBbmRTdHJva2VQYXRoKEdyYXBoaWNzQ29udGV4dCopOwotCi0gICAgYm9v
bCBtX25lZWRzQm91bmRhcmllc1VwZGF0ZSA6IDE7Ci0gICAgYm9vbCBtX25lZWRzUGF0aFVwZGF0
ZSA6IDE7Ci0gICAgYm9vbCBtX25lZWRzVHJhbnNmb3JtVXBkYXRlIDogMTsKLQotICAgIG11dGFi
bGUgUGF0aCBtX3BhdGg7Ci0gICAgRmxvYXRSZWN0IG1fZmlsbEJvdW5kaW5nQm94OwotICAgIEZs
b2F0UmVjdCBtX3N0cm9rZUFuZE1hcmtlckJvdW5kaW5nQm94OwotICAgIEZsb2F0UmVjdCBtX3Jl
cGFpbnRCb3VuZGluZ0JveDsKLSAgICBTVkdNYXJrZXJMYXlvdXRJbmZvIG1fbWFya2VyTGF5b3V0
SW5mbzsKLSAgICBBZmZpbmVUcmFuc2Zvcm0gbV9sb2NhbFRyYW5zZm9ybTsKKyAgICB2aXJ0dWFs
IHZvaWQgaW5mbGF0ZVdpdGhNYXJrZXJCb3VuZHMoKTsKIH07CiAKLWlubGluZSBSZW5kZXJTVkdQ
YXRoKiB0b1JlbmRlclNWR1BhdGgoUmVuZGVyT2JqZWN0KiBvYmplY3QpCi17Ci0gICAgQVNTRVJU
KCFvYmplY3QgfHwgb2JqZWN0LT5pc1NWR1BhdGgoKSk7Ci0gICAgcmV0dXJuIHN0YXRpY19jYXN0
PFJlbmRlclNWR1BhdGgqPihvYmplY3QpOwotfQotCi1pbmxpbmUgY29uc3QgUmVuZGVyU1ZHUGF0
aCogdG9SZW5kZXJTVkdQYXRoKGNvbnN0IFJlbmRlck9iamVjdCogb2JqZWN0KQotewotICAgIEFT
U0VSVCghb2JqZWN0IHx8IG9iamVjdC0+aXNTVkdQYXRoKCkpOwotICAgIHJldHVybiBzdGF0aWNf
Y2FzdDxjb25zdCBSZW5kZXJTVkdQYXRoKj4ob2JqZWN0KTsKLX0KLQotLy8gVGhpcyB3aWxsIGNh
dGNoIGFueW9uZSBkb2luZyBhbiB1bm5lY2Vzc2FyeSBjYXN0Lgotdm9pZCB0b1JlbmRlclNWR1Bh
dGgoY29uc3QgUmVuZGVyU1ZHUGF0aCopOwotCiB9CiAKICNlbmRpZiAvLyBFTkFCTEUoU1ZHKQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZWN0LmNw
cCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVjdC5jcHAKbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDdjMzVhNAotLS0gL2Rldi9udWxsCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVjdC5jcHAKQEAgLTAsMCAr
MSwxMjcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgVW5pdmVyc2l0eSBvZiBTemVnZWQK
KyAqIENvcHlyaWdodCAoQykgMjAxMSBSZW5hdGEgSG9kb3ZhbiAocmVuaUB3ZWJraXQub3JnKQor
ICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor
ICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIFVOSVZFUlNJVFkgT0YgU1pFR0VEIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8g
RVZFTlQgU0hBTEwgVU5JVkVSU0lUWSBPRiBTWkVHRUQgT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICog
RVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisKKyNp
ZiBFTkFCTEUoU1ZHKQorI2luY2x1ZGUgIlJlbmRlclNWR1JlY3QuaCIKKworI2luY2x1ZGUgIlNW
R05hbWVzLmgiCisjaW5jbHVkZSAiU1ZHUmVjdEVsZW1lbnQuaCIKKworbmFtZXNwYWNlIFdlYkNv
cmUgeworCitSZW5kZXJTVkdSZWN0OjpSZW5kZXJTVkdSZWN0KFNWR1N0eWxlZFRyYW5zZm9ybWFi
bGVFbGVtZW50KiBub2RlKQorICAgIDogUmVuZGVyU1ZHU2hhcGUobm9kZSkKK3sKK30KKworUmVu
ZGVyU1ZHUmVjdDo6flJlbmRlclNWR1JlY3QoKQoreworfQorCit2b2lkIFJlbmRlclNWR1JlY3Q6
OmNyZWF0ZVNoYXBlKCkKK3sKKyAgICAvLyBCZWZvcmUgY3JlYXRpbmcgYSBuZXcgb2JqZWN0IHdl
IG5lZWQgdG8gY2xlYXIgdGhlIGNhY2hlZCBib3VuZGluZyBib3gKKyAgICAvLyB0byBhdm9pZCB1
c2luZyBnYXJiYWdlLgorICAgIG1fYm91bmRpbmdCb3ggPSBGbG9hdFJlY3QoKTsKKyAgICBTVkdS
ZWN0RWxlbWVudCogcmVjdCA9IHN0YXRpY19jYXN0PFNWR1JlY3RFbGVtZW50Kj4obm9kZSgpKTsK
KyAgICBBU1NFUlQocmVjdCk7CisKKyAgICBib29sIG5vblNjYWxpbmdTdHJva2UgPSBzdHlsZSgp
LT5zdmdTdHlsZSgpLT52ZWN0b3JFZmZlY3QoKSA9PSBWRV9OT05fU0NBTElOR19TVFJPS0U7Cisg
ICAgLy8gRmFsbGJhY2sgdG8gUmVuZGVyU1ZHU2hhcGUgaWYgcmVjdCBoYXMgcm91bmRlZCBjb3Ju
ZXJzLgorICAgIGlmIChyZWN0LT5oYXNBdHRyaWJ1dGUoU1ZHTmFtZXM6OnJ4QXR0cikgfHwgcmVj
dC0+aGFzQXR0cmlidXRlKFNWR05hbWVzOjpyeUF0dHIpIHx8IG5vblNjYWxpbmdTdHJva2UvKiB8
fCBzdGF0aWNfY2FzdDxTVkdFbGVtZW50Kj4obm9kZSgpKS0+Y3VzdG9tU3R5bGVGb3JSZW5kZXJl
cigpLT5zdmdTdHlsZSgpLT5zaGFkb3coKSovKSB7CisgICAgICAgUmVuZGVyU1ZHU2hhcGU6OmNy
ZWF0ZVNoYXBlKCk7CisgICAgICAgc2V0SXNQYWludGluZ0ZhbGxiYWNrKHRydWUpOworICAgICAg
IHJldHVybjsKKyAgICB9CisKKyAgICBGbG9hdFNpemUgYm91bmRpbmdCb3hTaXplKHJlY3QtPndp
ZHRoKCkudmFsdWUocmVjdCksIHJlY3QtPmhlaWdodCgpLnZhbHVlKHJlY3QpKTsKKyAgICBpZiAo
Ym91bmRpbmdCb3hTaXplLmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgbV9ib3Vu
ZGluZ0JveCA9IEZsb2F0UmVjdChGbG9hdFBvaW50KHJlY3QtPngoKS52YWx1ZShyZWN0KSwgcmVj
dC0+eSgpLnZhbHVlKHJlY3QpKSwgYm91bmRpbmdCb3hTaXplKTsKKworICAgIC8vIFRvIGRlY2lk
ZSBpZiB0aGUgc3Ryb2tlIGNvbnRhaW5zIGEgcG9pbnQgd2UgY3JlYXRlIHR3byByZWN0cyB3aGlj
aCByZXByZXNlbnQgdGhlIGlubmVyIGFuZAorICAgIC8vIHRoZSBvdXRlciBzdHJva2UgYm9yZGVy
cy4gQSBzdHJva2UgY29udGFpbnMgdGhlIHBvaW50LCBpZiB0aGUgcG9pbnQgaXMgYmV0d2VlbiB0
aGVtLgorICAgIG1faW5uZXJTdHJva2VSZWN0ID0gbV9ib3VuZGluZ0JveDsKKyAgICBtX291dGVy
U3Ryb2tlUmVjdCA9IG1fYm91bmRpbmdCb3g7CisgICAgaWYgKHN0eWxlKCktPnN2Z1N0eWxlKCkt
Pmhhc1N0cm9rZSgpKSB7CisgICAgICAgIGZsb2F0IHN0cm9rZVdpZHRoID0gdGhpcy0+c3Ryb2tl
V2lkdGgoKTsKKyAgICAgICAgbV9pbm5lclN0cm9rZVJlY3QuaW5mbGF0ZSgtc3Ryb2tlV2lkdGgg
LyAyKTsKKyAgICAgICAgbV9vdXRlclN0cm9rZVJlY3QuaW5mbGF0ZShzdHJva2VXaWR0aCAvIDIp
OworICAgIH0KK30KKworCitGbG9hdFJlY3QgUmVuZGVyU1ZHUmVjdDo6b2JqZWN0Qm91bmRpbmdC
b3goKSBjb25zdAoreworICAgIGlmIChpc1BhaW50aW5nRmFsbGJhY2soKSkKKyAgICAgICAgcmV0
dXJuIFJlbmRlclNWR1NoYXBlOjpvYmplY3RCb3VuZGluZ0JveCgpOworICAgIHJldHVybiBtX2Jv
dW5kaW5nQm94OworfQorCitGbG9hdFJlY3QgUmVuZGVyU1ZHUmVjdDo6c3Ryb2tlQm91bmRpbmdC
b3goKSBjb25zdAoreworICAgIGlmIChpc1BhaW50aW5nRmFsbGJhY2soKSkKKyAgICAgICAgcmV0
dXJuIFJlbmRlclNWR1NoYXBlOjpzdHJva2VCb3VuZGluZ0JveCgpOworICAgIHJldHVybiBtX291
dGVyU3Ryb2tlUmVjdDsKK30KKwordm9pZCBSZW5kZXJTVkdSZWN0OjpmaWxsU2hhcGUoR3JhcGhp
Y3NDb250ZXh0KiBjb250ZXh0KSBjb25zdAoreworICAgIGlmICghaXNQYWludGluZ0ZhbGxiYWNr
KCkpIHsKKyAgICAgICAgY29udGV4dC0+ZmlsbFJlY3QobV9ib3VuZGluZ0JveCk7CisgICAgICAg
IHJldHVybjsKKyAgICB9CisgICAgUmVuZGVyU1ZHU2hhcGU6OmZpbGxTaGFwZShjb250ZXh0KTsK
K30KKwordm9pZCBSZW5kZXJTVkdSZWN0OjpzdHJva2VTaGFwZShHcmFwaGljc0NvbnRleHQqIGNv
bnRleHQpIGNvbnN0Cit7CisgICAgaWYgKCFpc1BhaW50aW5nRmFsbGJhY2soKSkgeworICAgICAg
ICBjb250ZXh0LT5zdHJva2VSZWN0KG1fYm91bmRpbmdCb3gsIHN0cm9rZVdpZHRoKCkpOworICAg
ICAgICByZXR1cm47CisgICAgfQorICAgIFJlbmRlclNWR1NoYXBlOjpzdHJva2VTaGFwZShjb250
ZXh0KTsKK30KKworYm9vbCBSZW5kZXJTVkdSZWN0OjpzaGFwZURlcGVuZGVudFN0cm9rZUNvbnRh
aW5zKGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50KSBjb25zdAoreworICAgIHJldHVybiBtX291dGVy
U3Ryb2tlUmVjdC5jb250YWlucyhwb2ludCwgRmxvYXRSZWN0OjpJbnNpZGVPck9uU3Ryb2tlKSAm
JiAhbV9pbm5lclN0cm9rZVJlY3QuY29udGFpbnMocG9pbnQsIEZsb2F0UmVjdDo6SW5zaWRlQnV0
Tm90T25TdHJva2UpOworfQorCitib29sIFJlbmRlclNWR1JlY3Q6OnNoYXBlRGVwZW5kZW50Rmls
bENvbnRhaW5zKGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50LCBjb25zdCBXaW5kUnVsZSBmaWxsUnVs
ZSkgY29uc3QKK3sKKyAgICBpZiAoaXNQYWludGluZ0ZhbGxiYWNrKCkpCisgICAgICAgIHJldHVy
biBSZW5kZXJTVkdTaGFwZTo6c2hhcGVEZXBlbmRlbnRGaWxsQ29udGFpbnMocG9pbnQsIGZpbGxS
dWxlKTsKKyAgICByZXR1cm4gbV9ib3VuZGluZ0JveC5jb250YWlucyhwb2ludC54KCksIHBvaW50
LnkoKSk7Cit9CisKK30KKworI2VuZGlmIC8vIEVOQUJMRShTVkcpCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1JlY3QuaCBiL1NvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVjdC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDAwMDAwMDAuLjRhODY4MTUKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvc3ZnL1JlbmRlclNWR1JlY3QuaApAQCAtMCwwICsxLDYzIEBACisvKgorICogQ29weXJp
Z2h0IChDKSAyMDExIFVuaXZlcnNpdHkgb2YgU3plZ2VkCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEg
UmVuYXRhIEhvZG92YW4gKHJlbmlAd2Via2l0Lm9yZykKKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBVTklWRVJTSVRZ
IE9GIFNaRUdFRCBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgor
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFVOSVZFUlNJVFkg
T0YgU1pFR0VEIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVN
RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
CisgKi8KKworI2lmbmRlZiBSZW5kZXJTVkdSZWN0X2gKKyNkZWZpbmUgUmVuZGVyU1ZHUmVjdF9o
CisKKyNpZiBFTkFCTEUoU1ZHKQorI2luY2x1ZGUgIlJlbmRlclNWR1BhdGguaCIKKworbmFtZXNw
YWNlIFdlYkNvcmUgeworCitjbGFzcyBSZW5kZXJTVkdSZWN0IDogcHVibGljIFJlbmRlclNWR1No
YXBlIHsKK3B1YmxpYzoKKyAgICBleHBsaWNpdCBSZW5kZXJTVkdSZWN0KFNWR1N0eWxlZFRyYW5z
Zm9ybWFibGVFbGVtZW50Kik7CisgICAgdmlydHVhbCB+UmVuZGVyU1ZHUmVjdCgpOworCitwcml2
YXRlOgorICAgIHZpcnR1YWwgYm9vbCBpc1NWR1JlY3QoKSBjb25zdCB7IHJldHVybiB0cnVlOyB9
CisgICAgdmlydHVhbCBjb25zdCBjaGFyKiByZW5kZXJOYW1lKCkgY29uc3QgeyByZXR1cm4gIlJl
bmRlclNWR1JlY3QiOyB9CisKKyAgICB2aXJ0dWFsIHZvaWQgY3JlYXRlU2hhcGUoKTsKKyAgICB2
aXJ0dWFsIGJvb2wgaXNFbXB0eSgpIGNvbnN0IHsgcmV0dXJuIGhhc1BhdGgoKSA/IFJlbmRlclNW
R1NoYXBlOjppc0VtcHR5KCkgOiBtX2JvdW5kaW5nQm94LmlzRW1wdHkoKTsgfTsKKyAgICB2aXJ0
dWFsIHZvaWQgZmlsbFNoYXBlKEdyYXBoaWNzQ29udGV4dCopIGNvbnN0OworICAgIHZpcnR1YWwg
dm9pZCBzdHJva2VTaGFwZShHcmFwaGljc0NvbnRleHQqKSBjb25zdDsKKyAgICB2aXJ0dWFsIEZs
b2F0UmVjdCBvYmplY3RCb3VuZGluZ0JveCgpIGNvbnN0OworICAgIHZpcnR1YWwgRmxvYXRSZWN0
IHN0cm9rZUJvdW5kaW5nQm94KCkgY29uc3Q7CisgICAgdmlydHVhbCBib29sIHNoYXBlRGVwZW5k
ZW50U3Ryb2tlQ29udGFpbnMoY29uc3QgRmxvYXRQb2ludCYpIGNvbnN0OworICAgIHZpcnR1YWwg
Ym9vbCBzaGFwZURlcGVuZGVudEZpbGxDb250YWlucyhjb25zdCBGbG9hdFBvaW50JiwgY29uc3Qg
V2luZFJ1bGUpIGNvbnN0OworCitwcml2YXRlOgorICAgIEZsb2F0UmVjdCBtX2JvdW5kaW5nQm94
OworICAgIEZsb2F0UmVjdCBtX2lubmVyU3Ryb2tlUmVjdDsKKyAgICBGbG9hdFJlY3QgbV9vdXRl
clN0cm9rZVJlY3Q7Cit9OworCit9CisKKyNlbmRpZiAvLyBFTkFCTEUoU1ZHKQorI2VuZGlmCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291cmNl
LmggYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291cmNlLmgKaW5k
ZXggYTY3YmE3My4uZTAyMDE1NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L3N2Zy9SZW5kZXJTVkdSZXNvdXJjZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9z
dmcvUmVuZGVyU1ZHUmVzb3VyY2UuaApAQCAtMjEsNiArMjEsNyBAQAogI2RlZmluZSBSZW5kZXJT
VkdSZXNvdXJjZV9oCiAKICNpZiBFTkFCTEUoU1ZHKQorI2luY2x1ZGUgIlJlbmRlclNWR1NoYXBl
LmgiCiAjaW5jbHVkZSAiUmVuZGVyU3R5bGVDb25zdGFudHMuaCIKICNpbmNsdWRlICJTVkdEb2N1
bWVudEV4dGVuc2lvbnMuaCIKIApAQCAtNjEsNyArNjIsNyBAQCBwdWJsaWM6CiAgICAgdmlydHVh
bCB2b2lkIHJlbW92ZUNsaWVudEZyb21DYWNoZShSZW5kZXJPYmplY3QqLCBib29sIG1hcmtGb3JJ
bnZhbGlkYXRpb24gPSB0cnVlKSA9IDA7CiAKICAgICB2aXJ0dWFsIGJvb2wgYXBwbHlSZXNvdXJj
ZShSZW5kZXJPYmplY3QqLCBSZW5kZXJTdHlsZSosIEdyYXBoaWNzQ29udGV4dComLCB1bnNpZ25l
ZCBzaG9ydCByZXNvdXJjZU1vZGUpID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgcG9zdEFwcGx5UmVz
b3VyY2UoUmVuZGVyT2JqZWN0KiwgR3JhcGhpY3NDb250ZXh0KiYsIHVuc2lnbmVkIHNob3J0LCBj
b25zdCBQYXRoKikgeyB9CisgICAgdmlydHVhbCB2b2lkIHBvc3RBcHBseVJlc291cmNlKFJlbmRl
ck9iamVjdCosIEdyYXBoaWNzQ29udGV4dComLCB1bnNpZ25lZCBzaG9ydCwgY29uc3QgUGF0aCos
IGNvbnN0IFJlbmRlclNWR1NoYXBlKikgeyB9CiAgICAgdmlydHVhbCBGbG9hdFJlY3QgcmVzb3Vy
Y2VCb3VuZGluZ0JveChSZW5kZXJPYmplY3QqKSA9IDA7CiAKICAgICB2aXJ0dWFsIFJlbmRlclNW
R1Jlc291cmNlVHlwZSByZXNvdXJjZVR5cGUoKSBjb25zdCA9IDA7CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291cmNlQ2xpcHBlci5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291cmNlQ2xpcHBlci5jcHAK
aW5kZXggMjJiNDFmYS4uNmIzZDFjZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJjZUNsaXBwZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VDbGlwcGVyLmNwcApAQCAtMTAwLDcgKzEw
MCw2IEBAIGJvb2wgUmVuZGVyU1ZHUmVzb3VyY2VDbGlwcGVyOjphcHBseVJlc291cmNlKFJlbmRl
ck9iamVjdCogb2JqZWN0LCBSZW5kZXJTdHlsZSosCiAjZWxzZQogICAgIFVOVVNFRF9QQVJBTShy
ZXNvdXJjZU1vZGUpOwogI2VuZGlmCi0KICAgICByZXR1cm4gYXBwbHlDbGlwcGluZ1RvQ29udGV4
dChvYmplY3QsIG9iamVjdC0+b2JqZWN0Qm91bmRpbmdCb3goKSwgb2JqZWN0LT5yZXBhaW50UmVj
dEluTG9jYWxDb29yZGluYXRlcygpLCBjb250ZXh0KTsKIH0KIApAQCAtMjQyLDcgKzI0MSw3IEBA
IGJvb2wgUmVuZGVyU1ZHUmVzb3VyY2VDbGlwcGVyOjpkcmF3Q29udGVudEludG9NYXNrSW1hZ2Uo
Q2xpcHBlckRhdGEqIGNsaXBwZXJEYXRhCiAgICAgICAgIH0KIAogICAgICAgICAvLyBPbmx5IHNo
YXBlcywgcGF0aHMgYW5kIHRleHRzIGFyZSBhbGxvd2VkIGZvciBjbGlwcGluZy4KLSAgICAgICAg
aWYgKCFyZW5kZXJlci0+aXNTVkdQYXRoKCkgJiYgIXJlbmRlcmVyLT5pc1NWR1RleHQoKSkKKyAg
ICAgICAgaWYgKCFyZW5kZXJlci0+aXNTVkdTaGFwZSgpICYmICFyZW5kZXJlci0+aXNTVkdUZXh0
KCkpCiAgICAgICAgICAgICBjb250aW51ZTsKIAogICAgICAgICAvLyBTYXZlIHRoZSBvbGQgUmVu
ZGVyU3R5bGUgb2YgdGhlIGN1cnJlbnQgb2JqZWN0IGZvciByZXN0b3JpbmcgYWZ0ZXIgZHJhd2lu
ZwpAQCAtMjg0LDcgKzI4Myw3IEBAIHZvaWQgUmVuZGVyU1ZHUmVzb3VyY2VDbGlwcGVyOjpjYWxj
dWxhdGVDbGlwQ29udGVudFJlcGFpbnRSZWN0KCkKICAgICAgICAgUmVuZGVyT2JqZWN0KiByZW5k
ZXJlciA9IGNoaWxkTm9kZS0+cmVuZGVyZXIoKTsKICAgICAgICAgaWYgKCFjaGlsZE5vZGUtPmlz
U1ZHRWxlbWVudCgpIHx8ICFzdGF0aWNfY2FzdDxTVkdFbGVtZW50Kj4oY2hpbGROb2RlKS0+aXNT
dHlsZWQoKSB8fCAhcmVuZGVyZXIpCiAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgaWYg
KCFyZW5kZXJlci0+aXNTVkdQYXRoKCkgJiYgIXJlbmRlcmVyLT5pc1NWR1RleHQoKSAmJiAhcmVu
ZGVyZXItPmlzU1ZHU2hhZG93VHJlZVJvb3RDb250YWluZXIoKSkKKyAgICAgICAgaWYgKCFyZW5k
ZXJlci0+aXNTVkdTaGFwZSgpICYmICFyZW5kZXJlci0+aXNTVkdUZXh0KCkgJiYgIXJlbmRlcmVy
LT5pc1NWR1NoYWRvd1RyZWVSb290Q29udGFpbmVyKCkpCiAgICAgICAgICAgICBjb250aW51ZTsK
ICAgICAgICAgUmVuZGVyU3R5bGUqIHN0eWxlID0gcmVuZGVyZXItPnN0eWxlKCk7CiAgICAgICAg
IGlmICghc3R5bGUgfHwgc3R5bGUtPmRpc3BsYXkoKSA9PSBOT05FIHx8IHN0eWxlLT52aXNpYmls
aXR5KCkgIT0gVklTSUJMRSkKQEAgLTMxMCw3ICszMDksNyBAQCBib29sIFJlbmRlclNWR1Jlc291
cmNlQ2xpcHBlcjo6aGl0VGVzdENsaXBDb250ZW50KGNvbnN0IEZsb2F0UmVjdCYgb2JqZWN0Qm91
bmRpbgogICAgICAgICBSZW5kZXJPYmplY3QqIHJlbmRlcmVyID0gY2hpbGROb2RlLT5yZW5kZXJl
cigpOwogICAgICAgICBpZiAoIWNoaWxkTm9kZS0+aXNTVkdFbGVtZW50KCkgfHwgIXN0YXRpY19j
YXN0PFNWR0VsZW1lbnQqPihjaGlsZE5vZGUpLT5pc1N0eWxlZCgpIHx8ICFyZW5kZXJlcikKICAg
ICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICBpZiAoIXJlbmRlcmVyLT5pc1NWR1BhdGgoKSAm
JiAhcmVuZGVyZXItPmlzU1ZHVGV4dCgpICYmICFyZW5kZXJlci0+aXNTVkdTaGFkb3dUcmVlUm9v
dENvbnRhaW5lcigpKQorICAgICAgICBpZiAoIXJlbmRlcmVyLT5pc1NWR1NoYXBlKCkgJiYgIXJl
bmRlcmVyLT5pc1NWR1RleHQoKSAmJiAhcmVuZGVyZXItPmlzU1ZHU2hhZG93VHJlZVJvb3RDb250
YWluZXIoKSkKICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICBJbnRQb2ludCBoaXRQb2lu
dDsKICAgICAgICAgSGl0VGVzdFJlc3VsdCByZXN1bHQoaGl0UG9pbnQpOwpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJjZUNvbnRhaW5lci5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291cmNlQ29udGFp
bmVyLmNwcAppbmRleCA1NWY3N2U1Li5lOTUwZTcxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291cmNlQ29udGFpbmVyLmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291cmNlQ29udGFpbmVyLmNwcApA
QCAtMTgwLDcgKzE4MCw3IEBAIHZvaWQgUmVuZGVyU1ZHUmVzb3VyY2VDb250YWluZXI6OnJlZ2lz
dGVyUmVzb3VyY2UoKQogLy8gRklYTUU6IFRoaXMgZG9lcyBub3QgYmVsb25nIGhlcmUuCiBBZmZp
bmVUcmFuc2Zvcm0gUmVuZGVyU1ZHUmVzb3VyY2VDb250YWluZXI6OnRyYW5zZm9ybU9uTm9uU2Nh
bGluZ1N0cm9rZShSZW5kZXJPYmplY3QqIG9iamVjdCwgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiBy
ZXNvdXJjZVRyYW5zZm9ybSkKIHsKLSAgICBpZiAoIW9iamVjdC0+aXNTVkdQYXRoKCkpCisgICAg
aWYgKCFvYmplY3QtPmlzU1ZHU2hhcGUoKSkKICAgICAgICAgcmV0dXJuIHJlc291cmNlVHJhbnNm
b3JtOwogCiAgICAgU1ZHU3R5bGVkVHJhbnNmb3JtYWJsZUVsZW1lbnQqIGVsZW1lbnQgPSBzdGF0
aWNfY2FzdDxTVkdTdHlsZWRUcmFuc2Zvcm1hYmxlRWxlbWVudCo+KG9iamVjdC0+bm9kZSgpKTsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVzb3Vy
Y2VGaWx0ZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNv
dXJjZUZpbHRlci5jcHAKaW5kZXggNjg5MzVkYS4uYjEwNzZhMSAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJjZUZpbHRlci5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJjZUZpbHRlci5jcHAK
QEAgLTI1OSw3ICsyNTksNyBAQCBib29sIFJlbmRlclNWR1Jlc291cmNlRmlsdGVyOjphcHBseVJl
c291cmNlKFJlbmRlck9iamVjdCogb2JqZWN0LCBSZW5kZXJTdHlsZSosCiAgICAgcmV0dXJuIHRy
dWU7CiB9CiAKLXZvaWQgUmVuZGVyU1ZHUmVzb3VyY2VGaWx0ZXI6OnBvc3RBcHBseVJlc291cmNl
KFJlbmRlck9iamVjdCogb2JqZWN0LCBHcmFwaGljc0NvbnRleHQqJiBjb250ZXh0LCB1bnNpZ25l
ZCBzaG9ydCByZXNvdXJjZU1vZGUsIGNvbnN0IFBhdGgqKQordm9pZCBSZW5kZXJTVkdSZXNvdXJj
ZUZpbHRlcjo6cG9zdEFwcGx5UmVzb3VyY2UoUmVuZGVyT2JqZWN0KiBvYmplY3QsIEdyYXBoaWNz
Q29udGV4dComIGNvbnRleHQsIHVuc2lnbmVkIHNob3J0IHJlc291cmNlTW9kZSwgY29uc3QgUGF0
aCosIGNvbnN0IFJlbmRlclNWR1NoYXBlKikKIHsKICAgICBBU1NFUlQob2JqZWN0KTsKICAgICBB
U1NFUlQoY29udGV4dCk7CkBAIC0yNjgsNyArMjY4LDYgQEAgdm9pZCBSZW5kZXJTVkdSZXNvdXJj
ZUZpbHRlcjo6cG9zdEFwcGx5UmVzb3VyY2UoUmVuZGVyT2JqZWN0KiBvYmplY3QsIEdyYXBoaWNz
Q28KICNlbHNlCiAgICAgVU5VU0VEX1BBUkFNKHJlc291cmNlTW9kZSk7CiAjZW5kaWYKLQogICAg
IEZpbHRlckRhdGEqIGZpbHRlckRhdGEgPSBtX2ZpbHRlci5nZXQob2JqZWN0KTsKICAgICBpZiAo
IWZpbHRlckRhdGEpCiAgICAgICAgIHJldHVybjsKQEAgLTI5Myw3ICsyOTIsNiBAQCB2b2lkIFJl
bmRlclNWR1Jlc291cmNlRmlsdGVyOjpwb3N0QXBwbHlSZXNvdXJjZShSZW5kZXJPYmplY3QqIG9i
amVjdCwgR3JhcGhpY3NDbwogICAgIH0KIAogICAgIEZpbHRlckVmZmVjdCogbGFzdEVmZmVjdCA9
IGZpbHRlckRhdGEtPmJ1aWxkZXItPmxhc3RFZmZlY3QoKTsKLSAgICAKICAgICBpZiAobGFzdEVm
ZmVjdCAmJiAhZmlsdGVyRGF0YS0+Ym91bmRhcmllcy5pc0VtcHR5KCkgJiYgIWxhc3RFZmZlY3Qt
PmZpbHRlclByaW1pdGl2ZVN1YnJlZ2lvbigpLmlzRW1wdHkoKSkgewogICAgICAgICAvLyBUaGlz
IGlzIHRoZSByZWFsIGZpbHRlcmluZyBvZiB0aGUgb2JqZWN0LiBJdCBqdXN0IG5lZWRzIHRvIGJl
IGNhbGxlZCBvbiB0aGUKICAgICAgICAgLy8gaW5pdGlhbCBmaWx0ZXJpbmcgcHJvY2Vzcy4gV2Ug
anVzdCB0YWtlIHRoZSBzdG9yZWQgZmlsdGVyIHJlc3VsdCBvbiBhCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291cmNlRmlsdGVyLmggYi9Tb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291cmNlRmlsdGVyLmgKaW5kZXgg
NWE1YjA5Mi4uZmY2MWI3MSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2
Zy9SZW5kZXJTVkdSZXNvdXJjZUZpbHRlci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VGaWx0ZXIuaApAQCAtNzIsNyArNzIsNyBAQCBwdWJsaWM6
CiAgICAgdmlydHVhbCB2b2lkIHJlbW92ZUNsaWVudEZyb21DYWNoZShSZW5kZXJPYmplY3QqLCBi
b29sIG1hcmtGb3JJbnZhbGlkYXRpb24gPSB0cnVlKTsKIAogICAgIHZpcnR1YWwgYm9vbCBhcHBs
eVJlc291cmNlKFJlbmRlck9iamVjdCosIFJlbmRlclN0eWxlKiwgR3JhcGhpY3NDb250ZXh0KiYs
IHVuc2lnbmVkIHNob3J0IHJlc291cmNlTW9kZSk7Ci0gICAgdmlydHVhbCB2b2lkIHBvc3RBcHBs
eVJlc291cmNlKFJlbmRlck9iamVjdCosIEdyYXBoaWNzQ29udGV4dComLCB1bnNpZ25lZCBzaG9y
dCByZXNvdXJjZU1vZGUsIGNvbnN0IFBhdGgqKTsKKyAgICB2aXJ0dWFsIHZvaWQgcG9zdEFwcGx5
UmVzb3VyY2UoUmVuZGVyT2JqZWN0KiwgR3JhcGhpY3NDb250ZXh0KiYsIHVuc2lnbmVkIHNob3J0
IHJlc291cmNlTW9kZSwgY29uc3QgUGF0aCosIGNvbnN0IFJlbmRlclNWR1NoYXBlKik7CiAKICAg
ICB2aXJ0dWFsIEZsb2F0UmVjdCByZXNvdXJjZUJvdW5kaW5nQm94KFJlbmRlck9iamVjdCopOwog
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291
cmNlR3JhZGllbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdS
ZXNvdXJjZUdyYWRpZW50LmNwcAppbmRleCA1ZTMxYjc2Li4yMjQzM2NmIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291cmNlR3JhZGllbnQuY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VHcmFk
aWVudC5jcHAKQEAgLTI3LDYgKzI3LDcgQEAKIAogI2luY2x1ZGUgIkdyYWRpZW50QXR0cmlidXRl
cy5oIgogI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgorI2luY2x1ZGUgIlJlbmRlclNWR1No
YXBlLmgiCiAjaW5jbHVkZSAiUmVuZGVyU1ZHVGV4dC5oIgogI2luY2x1ZGUgIlNWR0ltYWdlQnVm
ZmVyVG9vbHMuaCIKICNpbmNsdWRlICJTVkdSZW5kZXJTdXBwb3J0LmgiCkBAIC0yMzEsNyArMjMy
LDcgQEAgYm9vbCBSZW5kZXJTVkdSZXNvdXJjZUdyYWRpZW50OjphcHBseVJlc291cmNlKFJlbmRl
ck9iamVjdCogb2JqZWN0LCBSZW5kZXJTdHlsZSoKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotdm9p
ZCBSZW5kZXJTVkdSZXNvdXJjZUdyYWRpZW50Ojpwb3N0QXBwbHlSZXNvdXJjZShSZW5kZXJPYmpl
Y3QqIG9iamVjdCwgR3JhcGhpY3NDb250ZXh0KiYgY29udGV4dCwgdW5zaWduZWQgc2hvcnQgcmVz
b3VyY2VNb2RlLCBjb25zdCBQYXRoKiBwYXRoKQordm9pZCBSZW5kZXJTVkdSZXNvdXJjZUdyYWRp
ZW50Ojpwb3N0QXBwbHlSZXNvdXJjZShSZW5kZXJPYmplY3QqIG9iamVjdCwgR3JhcGhpY3NDb250
ZXh0KiYgY29udGV4dCwgdW5zaWduZWQgc2hvcnQgcmVzb3VyY2VNb2RlLCBjb25zdCBQYXRoKiBw
YXRoLCBjb25zdCBSZW5kZXJTVkdTaGFwZSogc2hhcGUpCiB7CiAgICAgQVNTRVJUKGNvbnRleHQp
OwogICAgIEFTU0VSVChyZXNvdXJjZU1vZGUgIT0gQXBwbHlUb0RlZmF1bHRNb2RlKTsKQEAgLTI1
OSwxMSArMjYwLDE5IEBAIHZvaWQgUmVuZGVyU1ZHUmVzb3VyY2VHcmFkaWVudDo6cG9zdEFwcGx5
UmVzb3VyY2UoUmVuZGVyT2JqZWN0KiBvYmplY3QsIEdyYXBoaWNzCiAjZWxzZQogICAgICAgICBV
TlVTRURfUEFSQU0ob2JqZWN0KTsKICNlbmRpZgotICAgIH0gZWxzZSBpZiAocGF0aCkgewotICAg
ICAgICBpZiAocmVzb3VyY2VNb2RlICYgQXBwbHlUb0ZpbGxNb2RlKQotICAgICAgICAgICAgY29u
dGV4dC0+ZmlsbFBhdGgoKnBhdGgpOwotICAgICAgICBlbHNlIGlmIChyZXNvdXJjZU1vZGUgJiBB
cHBseVRvU3Ryb2tlTW9kZSkKLSAgICAgICAgICAgIGNvbnRleHQtPnN0cm9rZVBhdGgoKnBhdGgp
OworICAgIH0gZWxzZSB7CisgICAgICAgIGlmIChyZXNvdXJjZU1vZGUgJiBBcHBseVRvRmlsbE1v
ZGUpIHsKKyAgICAgICAgICAgIGlmIChwYXRoKQorICAgICAgICAgICAgICAgIGNvbnRleHQtPmZp
bGxQYXRoKCpwYXRoKTsKKyAgICAgICAgICAgIGVsc2UgaWYgKHNoYXBlKQorICAgICAgICAgICAg
ICAgIHNoYXBlLT5maWxsU2hhcGUoY29udGV4dCk7CisgICAgICAgIH0KKyAgICAgICAgaWYgKHJl
c291cmNlTW9kZSAmIEFwcGx5VG9TdHJva2VNb2RlKSB7CisgICAgICAgICAgICBpZiAocGF0aCkK
KyAgICAgICAgICAgICAgICBjb250ZXh0LT5zdHJva2VQYXRoKCpwYXRoKTsKKyAgICAgICAgICAg
IGVsc2UgaWYgKHNoYXBlKQorICAgICAgICAgICAgICAgIHNoYXBlLT5zdHJva2VTaGFwZShjb250
ZXh0KTsKKyAgICAgICAgfQogICAgIH0KIAogICAgIGNvbnRleHQtPnJlc3RvcmUoKTsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VHcmFk
aWVudC5oIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJjZUdy
YWRpZW50LmgKaW5kZXggZGY0OTJlMi4uM2ZjY2Q0NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJjZUdyYWRpZW50LmgKKysrIGIvU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJjZUdyYWRpZW50LmgKQEAgLTUw
LDcgKzUwLDcgQEAgcHVibGljOgogICAgIHZpcnR1YWwgdm9pZCByZW1vdmVDbGllbnRGcm9tQ2Fj
aGUoUmVuZGVyT2JqZWN0KiwgYm9vbCBtYXJrRm9ySW52YWxpZGF0aW9uID0gdHJ1ZSk7CiAKICAg
ICB2aXJ0dWFsIGJvb2wgYXBwbHlSZXNvdXJjZShSZW5kZXJPYmplY3QqLCBSZW5kZXJTdHlsZSos
IEdyYXBoaWNzQ29udGV4dComLCB1bnNpZ25lZCBzaG9ydCByZXNvdXJjZU1vZGUpOwotICAgIHZp
cnR1YWwgdm9pZCBwb3N0QXBwbHlSZXNvdXJjZShSZW5kZXJPYmplY3QqLCBHcmFwaGljc0NvbnRl
eHQqJiwgdW5zaWduZWQgc2hvcnQgcmVzb3VyY2VNb2RlLCBjb25zdCBQYXRoKik7CisgICAgdmly
dHVhbCB2b2lkIHBvc3RBcHBseVJlc291cmNlKFJlbmRlck9iamVjdCosIEdyYXBoaWNzQ29udGV4
dComLCB1bnNpZ25lZCBzaG9ydCByZXNvdXJjZU1vZGUsIGNvbnN0IFBhdGgqLCBjb25zdCBSZW5k
ZXJTVkdTaGFwZSopOwogICAgIHZpcnR1YWwgRmxvYXRSZWN0IHJlc291cmNlQm91bmRpbmdCb3go
UmVuZGVyT2JqZWN0KikgeyByZXR1cm4gRmxvYXRSZWN0KCk7IH0KIAogcHJvdGVjdGVkOgpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJjZVBh
dHRlcm4uY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJj
ZVBhdHRlcm4uY3BwCmluZGV4IDJmN2ZmNTIuLjk1Y2M3YzggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VQYXR0ZXJuLmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291cmNlUGF0dGVybi5jcHAK
QEAgLTE4NCwxNiArMTg0LDIyIEBAIGJvb2wgUmVuZGVyU1ZHUmVzb3VyY2VQYXR0ZXJuOjphcHBs
eVJlc291cmNlKFJlbmRlck9iamVjdCogb2JqZWN0LCBSZW5kZXJTdHlsZSoKICAgICByZXR1cm4g
dHJ1ZTsKIH0KIAotdm9pZCBSZW5kZXJTVkdSZXNvdXJjZVBhdHRlcm46OnBvc3RBcHBseVJlc291
cmNlKFJlbmRlck9iamVjdCosIEdyYXBoaWNzQ29udGV4dComIGNvbnRleHQsIHVuc2lnbmVkIHNo
b3J0IHJlc291cmNlTW9kZSwgY29uc3QgUGF0aCogcGF0aCkKK3ZvaWQgUmVuZGVyU1ZHUmVzb3Vy
Y2VQYXR0ZXJuOjpwb3N0QXBwbHlSZXNvdXJjZShSZW5kZXJPYmplY3QqLCBHcmFwaGljc0NvbnRl
eHQqJiBjb250ZXh0LCB1bnNpZ25lZCBzaG9ydCByZXNvdXJjZU1vZGUsIGNvbnN0IFBhdGgqIHBh
dGgsIGNvbnN0IFJlbmRlclNWR1NoYXBlKiBzaGFwZSkKIHsKICAgICBBU1NFUlQoY29udGV4dCk7
CiAgICAgQVNTRVJUKHJlc291cmNlTW9kZSAhPSBBcHBseVRvRGVmYXVsdE1vZGUpOwogCi0gICAg
aWYgKHBhdGggJiYgIShyZXNvdXJjZU1vZGUgJiBBcHBseVRvVGV4dE1vZGUpKSB7Ci0gICAgICAg
IGlmIChyZXNvdXJjZU1vZGUgJiBBcHBseVRvRmlsbE1vZGUpCisgICAgaWYgKHJlc291cmNlTW9k
ZSAmIEFwcGx5VG9GaWxsTW9kZSkgeworICAgICAgICBpZiAocGF0aCkKICAgICAgICAgICAgIGNv
bnRleHQtPmZpbGxQYXRoKCpwYXRoKTsKLSAgICAgICAgZWxzZSBpZiAocmVzb3VyY2VNb2RlICYg
QXBwbHlUb1N0cm9rZU1vZGUpCisgICAgICAgIGVsc2UgaWYgKHNoYXBlKQorICAgICAgICAgICAg
c2hhcGUtPmZpbGxTaGFwZShjb250ZXh0KTsKKyAgICB9CisgICAgaWYgKHJlc291cmNlTW9kZSAm
IEFwcGx5VG9TdHJva2VNb2RlKSB7CisgICAgICAgIGlmIChwYXRoKQogICAgICAgICAgICAgY29u
dGV4dC0+c3Ryb2tlUGF0aCgqcGF0aCk7CisgICAgICAgIGVsc2UgaWYgKHNoYXBlKQorICAgICAg
ICAgICAgc2hhcGUtPnN0cm9rZVNoYXBlKGNvbnRleHQpOwogICAgIH0KIAogICAgIGNvbnRleHQt
PnJlc3RvcmUoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVu
ZGVyU1ZHUmVzb3VyY2VQYXR0ZXJuLmggYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1Jl
bmRlclNWR1Jlc291cmNlUGF0dGVybi5oCmluZGV4IDllODY0ODYuLjQwNDkyNDIgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VQYXR0ZXJu
LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJjZVBh
dHRlcm4uaApAQCAtNTIsNyArNTIsNyBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCB2b2lkIHJlbW92
ZUNsaWVudEZyb21DYWNoZShSZW5kZXJPYmplY3QqLCBib29sIG1hcmtGb3JJbnZhbGlkYXRpb24g
PSB0cnVlKTsKIAogICAgIHZpcnR1YWwgYm9vbCBhcHBseVJlc291cmNlKFJlbmRlck9iamVjdCos
IFJlbmRlclN0eWxlKiwgR3JhcGhpY3NDb250ZXh0KiYsIHVuc2lnbmVkIHNob3J0IHJlc291cmNl
TW9kZSk7Ci0gICAgdmlydHVhbCB2b2lkIHBvc3RBcHBseVJlc291cmNlKFJlbmRlck9iamVjdCos
IEdyYXBoaWNzQ29udGV4dComLCB1bnNpZ25lZCBzaG9ydCByZXNvdXJjZU1vZGUsIGNvbnN0IFBh
dGgqKTsKKyAgICB2aXJ0dWFsIHZvaWQgcG9zdEFwcGx5UmVzb3VyY2UoUmVuZGVyT2JqZWN0Kiwg
R3JhcGhpY3NDb250ZXh0KiYsIHVuc2lnbmVkIHNob3J0IHJlc291cmNlTW9kZSwgY29uc3QgUGF0
aCosIGNvbnN0IFJlbmRlclNWR1NoYXBlKik7CiAgICAgdmlydHVhbCBGbG9hdFJlY3QgcmVzb3Vy
Y2VCb3VuZGluZ0JveChSZW5kZXJPYmplY3QqKSB7IHJldHVybiBGbG9hdFJlY3QoKTsgfQogCiAg
ICAgdmlydHVhbCBSZW5kZXJTVkdSZXNvdXJjZVR5cGUgcmVzb3VyY2VUeXBlKCkgY29uc3QgeyBy
ZXR1cm4gc19yZXNvdXJjZVR5cGU7IH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VTb2xpZENvbG9yLmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VTb2xpZENvbG9yLmNwcAppbmRleCA1YmUy
YWY2Li42M2RmNzUxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1Jl
bmRlclNWR1Jlc291cmNlU29saWRDb2xvci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJjZVNvbGlkQ29sb3IuY3BwCkBAIC0yMyw2ICsyMyw3IEBA
CiAjaW5jbHVkZSAiUmVuZGVyU1ZHUmVzb3VyY2VTb2xpZENvbG9yLmgiCiAKICNpbmNsdWRlICJH
cmFwaGljc0NvbnRleHQuaCIKKyNpbmNsdWRlICJSZW5kZXJTVkdTaGFwZS5oIgogI2luY2x1ZGUg
IlJlbmRlclN0eWxlLmgiCiAjaW5jbHVkZSAiU1ZHUmVuZGVyU3VwcG9ydC5oIgogCkBAIC03NCwx
NiArNzUsMjIgQEAgYm9vbCBSZW5kZXJTVkdSZXNvdXJjZVNvbGlkQ29sb3I6OmFwcGx5UmVzb3Vy
Y2UoUmVuZGVyT2JqZWN0KiBvYmplY3QsIFJlbmRlclN0eWwKICAgICByZXR1cm4gdHJ1ZTsKIH0K
IAotdm9pZCBSZW5kZXJTVkdSZXNvdXJjZVNvbGlkQ29sb3I6OnBvc3RBcHBseVJlc291cmNlKFJl
bmRlck9iamVjdCosIEdyYXBoaWNzQ29udGV4dComIGNvbnRleHQsIHVuc2lnbmVkIHNob3J0IHJl
c291cmNlTW9kZSwgY29uc3QgUGF0aCogcGF0aCkKK3ZvaWQgUmVuZGVyU1ZHUmVzb3VyY2VTb2xp
ZENvbG9yOjpwb3N0QXBwbHlSZXNvdXJjZShSZW5kZXJPYmplY3QqLCBHcmFwaGljc0NvbnRleHQq
JiBjb250ZXh0LCB1bnNpZ25lZCBzaG9ydCByZXNvdXJjZU1vZGUsIGNvbnN0IFBhdGgqIHBhdGgs
IGNvbnN0IFJlbmRlclNWR1NoYXBlKiBzaGFwZSkKIHsKICAgICBBU1NFUlQoY29udGV4dCk7CiAg
ICAgQVNTRVJUKHJlc291cmNlTW9kZSAhPSBBcHBseVRvRGVmYXVsdE1vZGUpOwogCi0gICAgaWYg
KHBhdGggJiYgIShyZXNvdXJjZU1vZGUgJiBBcHBseVRvVGV4dE1vZGUpKSB7Ci0gICAgICAgIGlm
IChyZXNvdXJjZU1vZGUgJiBBcHBseVRvRmlsbE1vZGUpCisgICAgaWYgKHJlc291cmNlTW9kZSAm
IEFwcGx5VG9GaWxsTW9kZSkgeworICAgICAgICBpZiAocGF0aCkKICAgICAgICAgICAgIGNvbnRl
eHQtPmZpbGxQYXRoKCpwYXRoKTsKLSAgICAgICAgZWxzZSBpZiAocmVzb3VyY2VNb2RlICYgQXBw
bHlUb1N0cm9rZU1vZGUpCisgICAgICAgIGVsc2UgaWYgKHNoYXBlKQorICAgICAgICAgICAgc2hh
cGUtPmZpbGxTaGFwZShjb250ZXh0KTsKKyAgICB9CisgICAgaWYgKHJlc291cmNlTW9kZSAmIEFw
cGx5VG9TdHJva2VNb2RlKSB7CisgICAgICAgIGlmIChwYXRoKQogICAgICAgICAgICAgY29udGV4
dC0+c3Ryb2tlUGF0aCgqcGF0aCk7CisgICAgICAgIGVsc2UgaWYgKHNoYXBlKQorICAgICAgICAg
ICAgc2hhcGUtPnN0cm9rZVNoYXBlKGNvbnRleHQpOwogICAgIH0KIH0KIApkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJjZVNvbGlkQ29sb3Iu
aCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VTb2xpZENv
bG9yLmgKaW5kZXggMDJjZWIzMS4uOGJiZmRjZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJjZVNvbGlkQ29sb3IuaAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291cmNlU29saWRDb2xvci5oCkBAIC0z
Niw3ICszNiw3IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIHZvaWQgcmVtb3ZlQ2xpZW50RnJvbUNh
Y2hlKFJlbmRlck9iamVjdCosIGJvb2wgPSB0cnVlKSB7IH0KIAogICAgIHZpcnR1YWwgYm9vbCBh
cHBseVJlc291cmNlKFJlbmRlck9iamVjdCosIFJlbmRlclN0eWxlKiwgR3JhcGhpY3NDb250ZXh0
KiYsIHVuc2lnbmVkIHNob3J0IHJlc291cmNlTW9kZSk7Ci0gICAgdmlydHVhbCB2b2lkIHBvc3RB
cHBseVJlc291cmNlKFJlbmRlck9iamVjdCosIEdyYXBoaWNzQ29udGV4dComLCB1bnNpZ25lZCBz
aG9ydCByZXNvdXJjZU1vZGUsIGNvbnN0IFBhdGgqKTsKKyAgICB2aXJ0dWFsIHZvaWQgcG9zdEFw
cGx5UmVzb3VyY2UoUmVuZGVyT2JqZWN0KiwgR3JhcGhpY3NDb250ZXh0KiYsIHVuc2lnbmVkIHNo
b3J0IHJlc291cmNlTW9kZSwgY29uc3QgUGF0aCosIGNvbnN0IFJlbmRlclNWR1NoYXBlKik7CiAg
ICAgdmlydHVhbCBGbG9hdFJlY3QgcmVzb3VyY2VCb3VuZGluZ0JveChSZW5kZXJPYmplY3QqKSB7
IHJldHVybiBGbG9hdFJlY3QoKTsgfQogCiAgICAgdmlydHVhbCBSZW5kZXJTVkdSZXNvdXJjZVR5
cGUgcmVzb3VyY2VUeXBlKCkgY29uc3QgeyByZXR1cm4gc19yZXNvdXJjZVR5cGU7IH0KZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHU2hhcGUuY3BwIGIv
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdTaGFwZS5jcHAKbmV3IGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjczNjExMQotLS0gL2Rldi9udWxsCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHU2hhcGUuY3BwCkBAIC0wLDAgKzEs
NDQ1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1LCAyMDA3IE5pa29sYXMgWmlt
bWVybWFubiA8emltbWVybWFubkBrZGUub3JnPgorICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1
LCAyMDA4IFJvYiBCdWlzIDxidWlzQGtkZS5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDUsIDIw
MDcgRXJpYyBTZWlkZWwgPGVyaWNAd2Via2l0Lm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAwOSBH
b29nbGUsIEluYy4KKyAqIENvcHlyaWdodCAoQykgMjAwOSBEaXJrIFNjaHVsemUgPGtyaXRAd2Vi
a2l0Lm9yZz4KKyAqIENvcHlyaWdodCAoQykgUmVzZWFyY2ggSW4gTW90aW9uIExpbWl0ZWQgMjAx
MC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwOSBKZWZmIFNjaGls
bGVyIDxjb2RlZHJlYWRAZ21haWwuY29tPgorICogQ29weXJpZ2h0IChDKSAyMDExIFJlbmF0YSBI
b2RvdmFuIDxyZW5pQHdlYmtpdC5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgVW5pdmVyc2l0
eSBvZiBTemVnZWQKKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNh
biByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9m
IHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQg
YnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2Yg
dGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgor
ICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBi
ZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUg
aW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJs
aWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNl
aXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAq
IGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBu
b3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBG
cmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBV
U0EuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorCisjaWYgRU5BQkxFKFNWRykKKyNpbmNs
dWRlICJSZW5kZXJTVkdTaGFwZS5oIgorCisjaW5jbHVkZSAiRmxvYXRQb2ludC5oIgorI2luY2x1
ZGUgIkZsb2F0UXVhZC5oIgorI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgorI2luY2x1ZGUg
IkhpdFRlc3RSZXF1ZXN0LmgiCisjaW5jbHVkZSAiTGF5b3V0UmVwYWludGVyLmgiCisjaW5jbHVk
ZSAiUG9pbnRlckV2ZW50c0hpdFJ1bGVzLmgiCisjaW5jbHVkZSAiUmVuZGVyU1ZHQ29udGFpbmVy
LmgiCisjaW5jbHVkZSAiUmVuZGVyU1ZHUmVzb3VyY2VNYXJrZXIuaCIKKyNpbmNsdWRlICJSZW5k
ZXJTVkdSZXNvdXJjZVNvbGlkQ29sb3IuaCIKKyNpbmNsdWRlICJTVkdQYXRoRWxlbWVudC5oIgor
I2luY2x1ZGUgIlNWR1JlbmRlclN1cHBvcnQuaCIKKyNpbmNsdWRlICJTVkdSZXNvdXJjZXMuaCIK
KyNpbmNsdWRlICJTVkdTdHlsZWRUcmFuc2Zvcm1hYmxlRWxlbWVudC5oIgorI2luY2x1ZGUgIlNW
R1RyYW5zZm9ybUxpc3QuaCIKKyNpbmNsdWRlICJTVkdVUklSZWZlcmVuY2UuaCIKKyNpbmNsdWRl
ICJTdHJva2VTdHlsZUFwcGxpZXIuaCIKKyNpbmNsdWRlIDx3dGYvTWF0aEV4dHJhcy5oPgorCitu
YW1lc3BhY2UgV2ViQ29yZSB7CisKK1JlbmRlclNWR1NoYXBlOjpSZW5kZXJTVkdTaGFwZShTVkdT
dHlsZWRUcmFuc2Zvcm1hYmxlRWxlbWVudCogbm9kZSkKKyAgICA6IFJlbmRlclNWR01vZGVsT2Jq
ZWN0KG5vZGUpCisgICAgLCBtX25lZWRzQm91bmRhcmllc1VwZGF0ZShmYWxzZSkgLy8gRGVmYXVs
dCBpcyBmYWxzZSwgdGhlIGNhY2hlZCByZWN0cyBhcmUgZW1wdHkgZnJvbSB0aGUgYmVnaW5uaW5n
LgorICAgICwgbV9uZWVkc1NoYXBlVXBkYXRlKHRydWUpIC8vIERlZmF1bHQgaXMgdHJ1ZSwgc28g
d2UgZ3JhYiBhIFBhdGggb2JqZWN0IG9uY2UgZnJvbSBTVkdTdHlsZWRUcmFuc2Zvcm1hYmxlRWxl
bWVudC4KKyAgICAsIG1fbmVlZHNUcmFuc2Zvcm1VcGRhdGUodHJ1ZSkgLy8gRGVmYXVsdCBpcyB0
cnVlLCBzbyB3ZSBncmFiIGEgQWZmaW5lVHJhbnNmb3JtIG9iamVjdCBvbmNlIGZyb20gU1ZHU3R5
bGVkVHJhbnNmb3JtYWJsZUVsZW1lbnQuCisgICAgLCBtX2ZpbGxGYWxsYmFjayhmYWxzZSkKK3sK
K30KKworUmVuZGVyU1ZHU2hhcGU6OlJlbmRlclNWR1NoYXBlKFNWR1N0eWxlZFRyYW5zZm9ybWFi
bGVFbGVtZW50KiBub2RlLCBQYXRoKiBwYXRoLCBib29sIGlzRmlsbEZhbGxiYWNrKQorICAgIDog
UmVuZGVyU1ZHTW9kZWxPYmplY3Qobm9kZSkKKyAgICAsIG1fZmlsbEZhbGxiYWNrKGlzRmlsbEZh
bGxiYWNrKQoreworICAgICBtX3BhdGggPSBhZG9wdFB0cihwYXRoKTsKK30KKworUmVuZGVyU1ZH
U2hhcGU6On5SZW5kZXJTVkdTaGFwZSgpCit7Cit9CisKK3ZvaWQgUmVuZGVyU1ZHU2hhcGU6OmNy
ZWF0ZVNoYXBlKCkKK3sKKyAgICBtX3BhdGggPSBhZG9wdFB0cihuZXcgUGF0aCk7CisgICAgQVNT
RVJUKGlzRW1wdHkoKSk7CisKKyAgICBTVkdQYXRoRWxlbWVudCogZWxlbWVudCA9IHN0YXRpY19j
YXN0PFNWR1BhdGhFbGVtZW50Kj4obm9kZSgpKTsKKyAgICBlbGVtZW50LT50b1BhdGhEYXRhKHBh
dGgoKSk7Cit9CisKK2Jvb2wgUmVuZGVyU1ZHU2hhcGU6OmlzRW1wdHkoKSBjb25zdAoreworICAg
IHJldHVybiBtX3BhdGgtPmlzRW1wdHkoKTsKK30KKwordm9pZCBSZW5kZXJTVkdTaGFwZTo6Zmls
bFNoYXBlKEdyYXBoaWNzQ29udGV4dCogY29udGV4dCkgY29uc3QKK3sKKyAgICBjb250ZXh0LT5m
aWxsUGF0aChwYXRoKCkpOworfQorCitGbG9hdFJlY3QgUmVuZGVyU1ZHU2hhcGU6Om9iamVjdEJv
dW5kaW5nQm94KCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9wYXRoLT5ib3VuZGluZ1JlY3QoKTsK
K30KKworRmxvYXRSZWN0IFJlbmRlclNWR1NoYXBlOjpzdHJva2VCb3VuZGluZ0JveCgpIGNvbnN0
Cit7CisgICAgQm91bmRpbmdSZWN0U3Ryb2tlU3R5bGVBcHBsaWVyIHN0cm9rZVN0eWxlKHRoaXMs
IHN0eWxlKCkpOworICAgIHJldHVybiBtX3BhdGgtPnN0cm9rZUJvdW5kaW5nUmVjdCgmc3Ryb2tl
U3R5bGUpOworfQorCit2b2lkIFJlbmRlclNWR1NoYXBlOjpzdHJva2VTaGFwZShHcmFwaGljc0Nv
bnRleHQqIGNvbnRleHQpIGNvbnN0Cit7CisgICAgY29udGV4dC0+c3Ryb2tlUGF0aChwYXRoKCkp
OworfQorCitib29sIFJlbmRlclNWR1NoYXBlOjpzaGFwZURlcGVuZGVudFN0cm9rZUNvbnRhaW5z
KGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50KSBjb25zdAoreworICAgIEJvdW5kaW5nUmVjdFN0cm9r
ZVN0eWxlQXBwbGllciBhcHBsaWVyKHRoaXMsIHN0eWxlKCkpOworICAgIHJldHVybiBtX3BhdGgt
PnN0cm9rZUNvbnRhaW5zKCZhcHBsaWVyLCBwb2ludCk7Cit9CisKK2Jvb2wgUmVuZGVyU1ZHU2hh
cGU6OnNoYXBlRGVwZW5kZW50RmlsbENvbnRhaW5zKGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50LCBj
b25zdCBXaW5kUnVsZSBmaWxsUnVsZSkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9wYXRoLT5jb250
YWlucyhwb2ludCwgZmlsbFJ1bGUpOworfQorCitib29sIFJlbmRlclNWR1NoYXBlOjpmaWxsQ29u
dGFpbnMoY29uc3QgRmxvYXRQb2ludCYgcG9pbnQsIGJvb2wgcmVxdWlyZXNGaWxsLCBjb25zdCBX
aW5kUnVsZSBmaWxsUnVsZSkKK3sKKyAgICBpZiAoIW1fZmlsbEJvdW5kaW5nQm94LmNvbnRhaW5z
KHBvaW50KSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgQ29sb3IgZmFsbGJhY2tDb2xv
cjsKKyAgICBpZiAocmVxdWlyZXNGaWxsICYmICFSZW5kZXJTVkdSZXNvdXJjZTo6ZmlsbFBhaW50
aW5nUmVzb3VyY2UodGhpcywgc3R5bGUoKSwgZmFsbGJhY2tDb2xvcikpCisgICAgICAgIHJldHVy
biBmYWxzZTsKKworICAgIHJldHVybiBzaGFwZURlcGVuZGVudEZpbGxDb250YWlucyhwb2ludCwg
ZmlsbFJ1bGUpOworfQorCitib29sIFJlbmRlclNWR1NoYXBlOjpzdHJva2VDb250YWlucyhjb25z
dCBGbG9hdFBvaW50JiBwb2ludCwgYm9vbCByZXF1aXJlc1N0cm9rZSkKK3sKKyAgICBpZiAoIW1f
c3Ryb2tlQW5kTWFya2VyQm91bmRpbmdCb3guY29udGFpbnMocG9pbnQpKQorICAgICAgICByZXR1
cm4gZmFsc2U7CisKKyAgICBDb2xvciBmYWxsYmFja0NvbG9yOworICAgIGlmIChyZXF1aXJlc1N0
cm9rZSAmJiAhUmVuZGVyU1ZHUmVzb3VyY2U6OnN0cm9rZVBhaW50aW5nUmVzb3VyY2UodGhpcywg
c3R5bGUoKSwgZmFsbGJhY2tDb2xvcikpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGlm
IChzaG91bGRTdHJva2VaZXJvTGVuZ3RoU3VicGF0aCgpKQorICAgICAgICByZXR1cm4gemVyb0xl
bmd0aFN1YnBhdGhSZWN0KCkuY29udGFpbnMocG9pbnQpOworCisgICAgY29uc3QgU1ZHUmVuZGVy
U3R5bGUqIHN2Z1N0eWxlID0gc3R5bGUoKS0+c3ZnU3R5bGUoKTsKKyAgICBpZiAoIXN2Z1N0eWxl
LT5zdHJva2VEYXNoQXJyYXkoKS5pc0VtcHR5KCkgfHwgc3ZnU3R5bGUtPnN0cm9rZU1pdGVyTGlt
aXQoKSAhPSBzdmdTdHlsZS0+aW5pdGlhbFN0cm9rZU1pdGVyTGltaXQoKQorICAgICAgICB8fCBz
dmdTdHlsZS0+am9pblN0eWxlKCkgIT0gc3ZnU3R5bGUtPmluaXRpYWxKb2luU3R5bGUoKSB8fCBz
dmdTdHlsZS0+Y2FwU3R5bGUoKSAhPSBzdmdTdHlsZS0+aW5pdGlhbENhcFN0eWxlKCkgfHwgc3Rh
dGljX2Nhc3Q8U1ZHRWxlbWVudCo+KG5vZGUoKSktPmlzU3R5bGVkKCkpIHsKKyAgICAgICAgaWYg
KCFtX3BhdGgpCisgICAgICAgICAgICBSZW5kZXJTVkdTaGFwZTo6Y3JlYXRlU2hhcGUoKTsKKyAg
ICAgICAgcmV0dXJuIFJlbmRlclNWR1NoYXBlOjpzaGFwZURlcGVuZGVudFN0cm9rZUNvbnRhaW5z
KHBvaW50KTsKKyAgICB9CisgICAgcmV0dXJuIHNoYXBlRGVwZW5kZW50U3Ryb2tlQ29udGFpbnMo
cG9pbnQpOworfQorCit2b2lkIFJlbmRlclNWR1NoYXBlOjpsYXlvdXQoKQoreworICAgIExheW91
dFJlcGFpbnRlciByZXBhaW50ZXIoKnRoaXMsIGNoZWNrRm9yUmVwYWludER1cmluZ0xheW91dCgp
ICYmIHNlbGZOZWVkc0xheW91dCgpKTsKKyAgICBTVkdTdHlsZWRUcmFuc2Zvcm1hYmxlRWxlbWVu
dCogZWxlbWVudCA9IHN0YXRpY19jYXN0PFNWR1N0eWxlZFRyYW5zZm9ybWFibGVFbGVtZW50Kj4o
bm9kZSgpKTsKKworICAgIGJvb2wgdXBkYXRlQ2FjaGVkQm91bmRhcmllc0luUGFyZW50cyA9IGZh
bHNlOworCisgICAgYm9vbCBuZWVkc1NoYXBlVXBkYXRlID0gbV9uZWVkc1NoYXBlVXBkYXRlOwor
ICAgIGlmIChuZWVkc1NoYXBlVXBkYXRlKSB7CisgICAgICAgIGNyZWF0ZVNoYXBlKCk7CisgICAg
ICAgIG1fbmVlZHNTaGFwZVVwZGF0ZSA9IGZhbHNlOworICAgICAgICB1cGRhdGVDYWNoZWRCb3Vu
ZGFyaWVzSW5QYXJlbnRzID0gdHJ1ZTsKKyAgICB9CisKKyAgICBpZiAobV9uZWVkc1RyYW5zZm9y
bVVwZGF0ZSkgeworICAgICAgICBtX2xvY2FsVHJhbnNmb3JtID0gZWxlbWVudC0+YW5pbWF0ZWRM
b2NhbFRyYW5zZm9ybSgpOworICAgICAgICBtX25lZWRzVHJhbnNmb3JtVXBkYXRlID0gZmFsc2U7
CisgICAgICAgIHVwZGF0ZUNhY2hlZEJvdW5kYXJpZXNJblBhcmVudHMgPSB0cnVlOworICAgIH0K
KworICAgIGlmIChtX25lZWRzQm91bmRhcmllc1VwZGF0ZSkgeworICAgICAgICB1cGRhdGVDYWNo
ZWRCb3VuZGFyaWVzSW5QYXJlbnRzID0gdHJ1ZTsKKyAgICAgICAgc2V0SXNQYWludGluZ0ZhbGxi
YWNrKGZhbHNlKTsKKyAgICAgICAgY3JlYXRlU2hhcGUoKTsKKyAgICB9CisKKyAgICAvLyBJbnZh
bGlkYXRlIGFsbCByZXNvdXJjZXMgb2YgdGhpcyBjbGllbnQgaWYgb3VyIGxheW91dCBjaGFuZ2Vk
LgorICAgIGlmIChtX2V2ZXJIYWRMYXlvdXQgJiYgc2VsZk5lZWRzTGF5b3V0KCkpIHsKKyAgICAg
ICAgU1ZHUmVzb3VyY2VzQ2FjaGU6OmNsaWVudExheW91dENoYW5nZWQodGhpcyk7CisgICAgICAg
IG1fbWFya2VyTGF5b3V0SW5mby5jbGVhcigpOworICAgIH0KKworICAgIC8vIEF0IHRoaXMgcG9p
bnQgTGF5b3V0UmVwYWludGVyIGFscmVhZHkgZ3JhYmJlZCB0aGUgb2xkIGJvdW5kcywKKyAgICAv
LyByZWNhbGN1bGF0ZSB0aGVtIG5vdyBzbyByZXBhaW50QWZ0ZXJMYXlvdXQoKSB1c2VzIHRoZSBu
ZXcgYm91bmRzLgorICAgIGlmIChuZWVkc1NoYXBlVXBkYXRlIHx8IG1fbmVlZHNCb3VuZGFyaWVz
VXBkYXRlKSB7CisgICAgICAgIHVwZGF0ZUNhY2hlZEJvdW5kYXJpZXMoKTsKKyAgICAgICAgbV9u
ZWVkc0JvdW5kYXJpZXNVcGRhdGUgPSBmYWxzZTsKKyAgICB9CisKKyAgICAvLyBJZiBvdXIgYm91
bmRzIGNoYW5nZWQsIG5vdGlmeSB0aGUgcGFyZW50cy4KKyAgICBpZiAodXBkYXRlQ2FjaGVkQm91
bmRhcmllc0luUGFyZW50cykKKyAgICAgICAgUmVuZGVyU1ZHTW9kZWxPYmplY3Q6OnNldE5lZWRz
Qm91bmRhcmllc1VwZGF0ZSgpOworCisgICAgcmVwYWludGVyLnJlcGFpbnRBZnRlckxheW91dCgp
OworICAgIHNldE5lZWRzTGF5b3V0KGZhbHNlKTsKK30KKworYm9vbCBSZW5kZXJTVkdTaGFwZTo6
c2hvdWxkU3Ryb2tlWmVyb0xlbmd0aFN1YnBhdGgoKSBjb25zdAoreworICAgIC8vIFNwZWMoMTEu
NCk6IEFueSB6ZXJvIGxlbmd0aCBzdWJwYXRoIHNoYWxsIG5vdCBiZSBzdHJva2VkIGlmIHRoZSDi
gJhzdHJva2UtbGluZWNhcOKAmSBwcm9wZXJ0eSBoYXMgYSB2YWx1ZSBvZiBidXR0CisgICAgLy8g
YnV0IHNoYWxsIGJlIHN0cm9rZWQgaWYgdGhlIOKAmHN0cm9rZS1saW5lY2Fw4oCZIHByb3BlcnR5
IGhhcyBhIHZhbHVlIG9mIHJvdW5kIG9yIHNxdWFyZQorICAgIHJldHVybiBzdHlsZSgpLT5zdmdT
dHlsZSgpLT5oYXNTdHJva2UoKSAmJiBzdHlsZSgpLT5zdmdTdHlsZSgpLT5jYXBTdHlsZSgpICE9
IEJ1dHRDYXAgJiYgIW1fZmlsbEJvdW5kaW5nQm94LndpZHRoKCkgJiYgIW1fZmlsbEJvdW5kaW5n
Qm94LmhlaWdodCgpOworfQorCitGbG9hdFJlY3QgUmVuZGVyU1ZHU2hhcGU6Onplcm9MZW5ndGhT
dWJwYXRoUmVjdCgpIGNvbnN0Cit7CisgICAgZmxvYXQgc3Ryb2tlV2lkdGggPSB0aGlzLT5zdHJv
a2VXaWR0aCgpOworICAgIHJldHVybiBGbG9hdFJlY3QobV9maWxsQm91bmRpbmdCb3gueCgpIC0g
c3Ryb2tlV2lkdGggLyAyLCBtX2ZpbGxCb3VuZGluZ0JveC55KCkgLSBzdHJva2VXaWR0aCAvIDIs
IHN0cm9rZVdpZHRoLCBzdHJva2VXaWR0aCk7Cit9CisKK3ZvaWQgUmVuZGVyU1ZHU2hhcGU6OnNl
dHVwU3F1YXJlQ2FwUGF0aChQYXRoKiYgdXNlUGF0aCwgaW50JiBhcHBseU1vZGUpCit7CisgICAg
Ly8gU3BlYygxMS40KTogQW55IHplcm8gbGVuZ3RoIHN1YnBhdGggc2hhbGwgbm90IGJlIHN0cm9r
ZWQgaWYgdGhlIOKAmHN0cm9rZS1saW5lY2Fw4oCZIHByb3BlcnR5IGhhcyBhIHZhbHVlIG9mIGJ1
dHQKKyAgICAvLyBidXQgc2hhbGwgYmUgc3Ryb2tlZCBpZiB0aGUg4oCYc3Ryb2tlLWxpbmVjYXDi
gJkgcHJvcGVydHkgaGFzIGEgdmFsdWUgb2Ygcm91bmQgb3Igc3F1YXJlCisgICAgREVGSU5FX1NU
QVRJQ19MT0NBTChQYXRoLCB0ZW1wUGF0aCwgKCkpOworCisgICAgYXBwbHlNb2RlID0gQXBwbHlU
b0ZpbGxNb2RlOworICAgIHVzZVBhdGggPSAmdGVtcFBhdGg7CisgICAgdXNlUGF0aC0+Y2xlYXIo
KTsKKyAgICBpZiAoc3R5bGUoKS0+c3ZnU3R5bGUoKS0+Y2FwU3R5bGUoKSA9PSBTcXVhcmVDYXAp
CisgICAgICAgIHVzZVBhdGgtPmFkZFJlY3QoemVyb0xlbmd0aFN1YnBhdGhSZWN0KCkpOworICAg
IGVsc2UKKyAgICAgICAgdXNlUGF0aC0+YWRkRWxsaXBzZSh6ZXJvTGVuZ3RoU3VicGF0aFJlY3Qo
KSk7Cit9CisKK2Jvb2wgUmVuZGVyU1ZHU2hhcGU6OnNldHVwTm9uU2NhbGluZ1N0cm9rZVBhdGgo
UGF0aComIHVzZVBhdGgsIEdyYXBoaWNzQ29udGV4dFN0YXRlU2F2ZXImIHN0YXRlU2F2ZXIpCit7
CisgICAgREVGSU5FX1NUQVRJQ19MT0NBTChQYXRoLCB0ZW1wUGF0aCwgKCkpOworCisgICAgU1ZH
U3R5bGVkVHJhbnNmb3JtYWJsZUVsZW1lbnQqIGVsZW1lbnQgPSBzdGF0aWNfY2FzdDxTVkdTdHls
ZWRUcmFuc2Zvcm1hYmxlRWxlbWVudCo+KG5vZGUoKSk7CisgICAgQWZmaW5lVHJhbnNmb3JtIG5v
blNjYWxpbmdTdHJva2VUcmFuc2Zvcm0gPSBlbGVtZW50LT5nZXRTY3JlZW5DVE0oU1ZHTG9jYXRh
YmxlOjpEaXNhbGxvd1N0eWxlVXBkYXRlKTsKKyAgICBpZiAoIW5vblNjYWxpbmdTdHJva2VUcmFu
c2Zvcm0uaXNJbnZlcnRpYmxlKCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIHRlbXBQ
YXRoID0gKm1fcGF0aDsKKyAgICB1c2VQYXRoID0gJnRlbXBQYXRoOworICAgIHRlbXBQYXRoLnRy
YW5zZm9ybShub25TY2FsaW5nU3Ryb2tlVHJhbnNmb3JtKTsKKworICAgIHN0YXRlU2F2ZXIuc2F2
ZSgpOworICAgIHN0YXRlU2F2ZXIuY29udGV4dCgpLT5jb25jYXRDVE0obm9uU2NhbGluZ1N0cm9r
ZVRyYW5zZm9ybS5pbnZlcnNlKCkpOworICAgIHJldHVybiB0cnVlOworfQorCit2b2lkIFJlbmRl
clNWR1NoYXBlOjpmaWxsQW5kU3Ryb2tlUGF0aChHcmFwaGljc0NvbnRleHQqIGNvbnRleHQpCit7
CisgICAgUmVuZGVyU3R5bGUqIHN0eWxlID0gdGhpcy0+c3R5bGUoKTsKKworICAgIENvbG9yIGZh
bGxiYWNrQ29sb3I7CisgICAgaWYgKFJlbmRlclNWR1Jlc291cmNlKiBmaWxsUGFpbnRpbmdSZXNv
dXJjZSA9IFJlbmRlclNWR1Jlc291cmNlOjpmaWxsUGFpbnRpbmdSZXNvdXJjZSh0aGlzLCBzdHls
ZSwgZmFsbGJhY2tDb2xvcikpIHsKKyAgICAgICAgaWYgKGZpbGxQYWludGluZ1Jlc291cmNlLT5h
cHBseVJlc291cmNlKHRoaXMsIHN0eWxlLCBjb250ZXh0LCBBcHBseVRvRmlsbE1vZGUpKQorICAg
ICAgICAgICAgZmlsbFBhaW50aW5nUmVzb3VyY2UtPnBvc3RBcHBseVJlc291cmNlKHRoaXMsIGNv
bnRleHQsIEFwcGx5VG9GaWxsTW9kZSwgMCwgdGhpcyk7CisgICAgICAgIGVsc2UgaWYgKGZhbGxi
YWNrQ29sb3IuaXNWYWxpZCgpKSB7CisgICAgICAgICAgICBSZW5kZXJTVkdSZXNvdXJjZVNvbGlk
Q29sb3IqIGZhbGxiYWNrUmVzb3VyY2UgPSBSZW5kZXJTVkdSZXNvdXJjZTo6c2hhcmVkU29saWRQ
YWludGluZ1Jlc291cmNlKCk7CisgICAgICAgICAgICBmYWxsYmFja1Jlc291cmNlLT5zZXRDb2xv
cihmYWxsYmFja0NvbG9yKTsKKyAgICAgICAgICAgIGlmIChmYWxsYmFja1Jlc291cmNlLT5hcHBs
eVJlc291cmNlKHRoaXMsIHN0eWxlLCBjb250ZXh0LCBBcHBseVRvRmlsbE1vZGUpKQorICAgICAg
ICAgICAgICAgIGZhbGxiYWNrUmVzb3VyY2UtPnBvc3RBcHBseVJlc291cmNlKHRoaXMsIGNvbnRl
eHQsIEFwcGx5VG9GaWxsTW9kZSwgMCwgdGhpcyk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBm
YWxsYmFja0NvbG9yID0gQ29sb3IoKTsKKyAgICBSZW5kZXJTVkdSZXNvdXJjZSogc3Ryb2tlUGFp
bnRpbmdSZXNvdXJjZSA9IFJlbmRlclNWR1Jlc291cmNlOjpzdHJva2VQYWludGluZ1Jlc291cmNl
KHRoaXMsIHN0eWxlLCBmYWxsYmFja0NvbG9yKTsKKyAgICBpZiAoIXN0cm9rZVBhaW50aW5nUmVz
b3VyY2UpCisgICAgICAgIHJldHVybjsKKworICAgIFBhdGgqIHVzZVBhdGggPSBtX3BhdGguZ2V0
KCk7CisgICAgaW50IGFwcGx5TW9kZSA9IEFwcGx5VG9TdHJva2VNb2RlOworCisgICAgYm9vbCBu
b25TY2FsaW5nU3Ryb2tlID0gc3R5bGUtPnN2Z1N0eWxlKCktPnZlY3RvckVmZmVjdCgpID09IFZF
X05PTl9TQ0FMSU5HX1NUUk9LRTsKKyAgICBPd25QdHI8UGF0aD4gc2F2ZVBhdGg7CisKKyAgICBH
cmFwaGljc0NvbnRleHRTdGF0ZVNhdmVyIHN0YXRlU2F2ZXIoKmNvbnRleHQsIGZhbHNlKTsKKwor
ICAgIC8vIFNwZWMoMTEuNCk6IEFueSB6ZXJvIGxlbmd0aCBzdWJwYXRoIHNoYWxsIG5vdCBiZSBz
dHJva2VkIGlmIHRoZSDigJhzdHJva2UtbGluZWNhcOKAmSBwcm9wZXJ0eSBoYXMgYSB2YWx1ZSBv
ZiBidXR0CisgICAgLy8gYnV0IHNoYWxsIGJlIHN0cm9rZWQgaWYgdGhlIOKAmHN0cm9rZS1saW5l
Y2Fw4oCZIHByb3BlcnR5IGhhcyBhIHZhbHVlIG9mIHJvdW5kIG9yIHNxdWFyZQorICAgIC8vIEZJ
WE1FOiB0aGlzIGRvZXMgbm90IHdvcmsgZm9yIHplcm8tbGVuZ3RoIHN1YnBhdGhzLCBvbmx5IHdo
ZW4gdG90YWwgcGF0aCBpcyB6ZXJvLWxlbmd0aAorICAgIGlmIChzaG91bGRTdHJva2VaZXJvTGVu
Z3RoU3VicGF0aCgpKSB7CisgICAgICAgIFJlbmRlclNWR1NoYXBlOjpjcmVhdGVTaGFwZSgpOwor
ICAgICAgICBzZXR1cFNxdWFyZUNhcFBhdGgodXNlUGF0aCwgYXBwbHlNb2RlKTsKKyAgICAgICAg
c2V0SXNQYWludGluZ0ZhbGxiYWNrKHRydWUpOworICAgIH0gZWxzZSBpZiAobm9uU2NhbGluZ1N0
cm9rZSkgeworICAgICAgICBpZiAoIXNldHVwTm9uU2NhbGluZ1N0cm9rZVBhdGgodXNlUGF0aCwg
c3RhdGVTYXZlcikpCisgICAgICAgICAgICByZXR1cm47CisgICAgfQorICAgIGlmIChzdHJva2VQ
YWludGluZ1Jlc291cmNlLT5hcHBseVJlc291cmNlKHRoaXMsIHN0eWxlLCBjb250ZXh0LCBhcHBs
eU1vZGUpKSB7CisgICAgICAgIHN0cm9rZVBhaW50aW5nUmVzb3VyY2UtPnBvc3RBcHBseVJlc291
cmNlKHRoaXMsIGNvbnRleHQsIGFwcGx5TW9kZSwgdXNlUGF0aCwgdGhpcyk7CisgICAgICAgIGlm
IChzYXZlUGF0aCkKKyAgICAgICAgICAgIG1fcGF0aCA9IHNhdmVQYXRoLnJlbGVhc2UoKTsKKyAg
ICAgICAgcmV0dXJuOworICAgIH0KKyAgICBpZiAoIWZhbGxiYWNrQ29sb3IuaXNWYWxpZCgpKSB7
CisgICAgICAgIGlmIChzYXZlUGF0aCkKKyAgICAgICAgICAgIG1fcGF0aCA9IHNhdmVQYXRoLnJl
bGVhc2UoKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBSZW5kZXJTVkdSZXNvdXJjZVNv
bGlkQ29sb3IqIGZhbGxiYWNrUmVzb3VyY2UgPSBSZW5kZXJTVkdSZXNvdXJjZTo6c2hhcmVkU29s
aWRQYWludGluZ1Jlc291cmNlKCk7CisgICAgZmFsbGJhY2tSZXNvdXJjZS0+c2V0Q29sb3IoZmFs
bGJhY2tDb2xvcik7CisgICAgaWYgKGZhbGxiYWNrUmVzb3VyY2UtPmFwcGx5UmVzb3VyY2UodGhp
cywgc3R5bGUsIGNvbnRleHQsIGFwcGx5TW9kZSkpCisgICAgICAgIGZhbGxiYWNrUmVzb3VyY2Ut
PnBvc3RBcHBseVJlc291cmNlKHRoaXMsIGNvbnRleHQsIGFwcGx5TW9kZSwgdXNlUGF0aCwgdGhp
cyk7CisgICAgaWYgKHNhdmVQYXRoKQorICAgICAgICBtX3BhdGggPSBzYXZlUGF0aC5yZWxlYXNl
KCk7Cit9CisKK3ZvaWQgUmVuZGVyU1ZHU2hhcGU6OnBhaW50KFBhaW50SW5mbyYgcGFpbnRJbmZv
LCBjb25zdCBJbnRQb2ludCYpCit7CisgICAgaWYgKHBhaW50SW5mby5jb250ZXh0LT5wYWludGlu
Z0Rpc2FibGVkKCkgfHwgc3R5bGUoKS0+dmlzaWJpbGl0eSgpID09IEhJRERFTiB8fCBpc0VtcHR5
KCkpCisgICAgICAgIHJldHVybjsKKyAgICBGbG9hdFJlY3QgYm91bmRpbmdCb3ggPSByZXBhaW50
UmVjdEluTG9jYWxDb29yZGluYXRlcygpOworICAgIGlmICghU1ZHUmVuZGVyU3VwcG9ydDo6cGFp
bnRJbmZvSW50ZXJzZWN0c1JlcGFpbnRSZWN0KGJvdW5kaW5nQm94LCBtX2xvY2FsVHJhbnNmb3Jt
LCBwYWludEluZm8pKQorICAgICAgICByZXR1cm47CisgICAgUGFpbnRJbmZvIGNoaWxkUGFpbnRJ
bmZvKHBhaW50SW5mbyk7CisgICAgYm9vbCBkcmF3c091dGxpbmUgPSBzdHlsZSgpLT5vdXRsaW5l
V2lkdGgoKSAmJiAoY2hpbGRQYWludEluZm8ucGhhc2UgPT0gUGFpbnRQaGFzZU91dGxpbmUgfHwg
Y2hpbGRQYWludEluZm8ucGhhc2UgPT0gUGFpbnRQaGFzZVNlbGZPdXRsaW5lKTsKKyAgICBpZiAo
ZHJhd3NPdXRsaW5lIHx8IGNoaWxkUGFpbnRJbmZvLnBoYXNlID09IFBhaW50UGhhc2VGb3JlZ3Jv
dW5kKSB7CisgICAgICAgIEdyYXBoaWNzQ29udGV4dFN0YXRlU2F2ZXIgc3RhdGVTYXZlcigqY2hp
bGRQYWludEluZm8uY29udGV4dCk7CisgICAgICAgIGNoaWxkUGFpbnRJbmZvLmFwcGx5VHJhbnNm
b3JtKG1fbG9jYWxUcmFuc2Zvcm0pOworCisgICAgICAgIGlmIChjaGlsZFBhaW50SW5mby5waGFz
ZSA9PSBQYWludFBoYXNlRm9yZWdyb3VuZCkgeworICAgICAgICAgICAgUGFpbnRJbmZvIHNhdmVk
SW5mbyhjaGlsZFBhaW50SW5mbyk7CisKKyAgICAgICAgICAgIGlmIChTVkdSZW5kZXJTdXBwb3J0
OjpwcmVwYXJlVG9SZW5kZXJTVkdDb250ZW50KHRoaXMsIGNoaWxkUGFpbnRJbmZvKSkgeworICAg
ICAgICAgICAgICAgIGNvbnN0IFNWR1JlbmRlclN0eWxlKiBzdmdTdHlsZSA9IHN0eWxlKCktPnN2
Z1N0eWxlKCk7CisgICAgICAgICAgICAgICAgaWYgKHN2Z1N0eWxlLT5zaGFwZVJlbmRlcmluZygp
ID09IFNSX0NSSVNQRURHRVMpCisgICAgICAgICAgICAgICAgICAgIGNoaWxkUGFpbnRJbmZvLmNv
bnRleHQtPnNldFNob3VsZEFudGlhbGlhcyhmYWxzZSk7CisKKyAgICAgICAgICAgICAgICBmaWxs
QW5kU3Ryb2tlUGF0aChjaGlsZFBhaW50SW5mby5jb250ZXh0KTsKKworICAgICAgICAgICAgICAg
IGlmIChzdmdTdHlsZS0+aGFzTWFya2VycygpKQorICAgICAgICAgICAgICAgICAgICBtX21hcmtl
ckxheW91dEluZm8uZHJhd01hcmtlcnMoY2hpbGRQYWludEluZm8pOworICAgICAgICAgICAgfQor
CisgICAgICAgICAgICBTVkdSZW5kZXJTdXBwb3J0OjpmaW5pc2hSZW5kZXJTVkdDb250ZW50KHRo
aXMsIGNoaWxkUGFpbnRJbmZvLCBzYXZlZEluZm8uY29udGV4dCk7CisgICAgICAgIH0KKworICAg
ICAgICBpZiAoZHJhd3NPdXRsaW5lKQorICAgICAgICAgICAgcGFpbnRPdXRsaW5lKGNoaWxkUGFp
bnRJbmZvLmNvbnRleHQsIEludFJlY3QoYm91bmRpbmdCb3gpKTsKKyAgICB9Cit9CisKKy8vIFRo
aXMgbWV0aG9kIGlzIGNhbGxlZCBmcm9tIGluc2lkZSBwYWludE91dGxpbmUoKSBzaW5jZSB3ZSBj
YWxsIHBhaW50T3V0bGluZSgpCisvLyB3aGlsZSB0cmFuc2Zvcm1lZCB0byBvdXIgY29vcmQgc3lz
dGVtLCByZXR1cm4gbG9jYWwgY29vcmRzCit2b2lkIFJlbmRlclNWR1NoYXBlOjphZGRGb2N1c1Jp
bmdSZWN0cyhWZWN0b3I8TGF5b3V0UmVjdD4mIHJlY3RzLCBjb25zdCBMYXlvdXRQb2ludCYpCit7
CisgICAgTGF5b3V0UmVjdCByZWN0ID0gZW5jbG9zaW5nTGF5b3V0UmVjdChyZXBhaW50UmVjdElu
TG9jYWxDb29yZGluYXRlcygpKTsKKyAgICBpZiAoIXJlY3QuaXNFbXB0eSgpKQorICAgICAgICBy
ZWN0cy5hcHBlbmQocmVjdCk7Cit9CisKK2Jvb2wgUmVuZGVyU1ZHU2hhcGU6Om5vZGVBdEZsb2F0
UG9pbnQoY29uc3QgSGl0VGVzdFJlcXVlc3QmIHJlcXVlc3QsIEhpdFRlc3RSZXN1bHQmIHJlc3Vs
dCwgY29uc3QgRmxvYXRQb2ludCYgcG9pbnRJblBhcmVudCwgSGl0VGVzdEFjdGlvbiBoaXRUZXN0
QWN0aW9uKQoreworICAgIC8vIFdlIG9ubHkgZHJhdyBpbiB0aGUgZm9yZ3JvdW5kIHBoYXNlLCBz
byB3ZSBvbmx5IGhpdC10ZXN0IHRoZW4uCisgICAgaWYgKGhpdFRlc3RBY3Rpb24gIT0gSGl0VGVz
dEZvcmVncm91bmQpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIEZsb2F0UG9pbnQgbG9j
YWxQb2ludCA9IG1fbG9jYWxUcmFuc2Zvcm0uaW52ZXJzZSgpLm1hcFBvaW50KHBvaW50SW5QYXJl
bnQpOworCisgICAgaWYgKCFTVkdSZW5kZXJTdXBwb3J0Ojpwb2ludEluQ2xpcHBpbmdBcmVhKHRo
aXMsIGxvY2FsUG9pbnQpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBQb2ludGVyRXZl
bnRzSGl0UnVsZXMgaGl0UnVsZXMoUG9pbnRlckV2ZW50c0hpdFJ1bGVzOjpTVkdfUEFUSF9ISVRU
RVNUSU5HLCByZXF1ZXN0LCBzdHlsZSgpLT5wb2ludGVyRXZlbnRzKCkpOworICAgIGJvb2wgaXNW
aXNpYmxlID0gKHN0eWxlKCktPnZpc2liaWxpdHkoKSA9PSBWSVNJQkxFKTsKKyAgICBpZiAoaXNW
aXNpYmxlIHx8ICFoaXRSdWxlcy5yZXF1aXJlVmlzaWJsZSkgeworICAgICAgICBjb25zdCBTVkdS
ZW5kZXJTdHlsZSogc3ZnU3R5bGUgPSBzdHlsZSgpLT5zdmdTdHlsZSgpOworICAgICAgICBXaW5k
UnVsZSBmaWxsUnVsZSA9IHN2Z1N0eWxlLT5maWxsUnVsZSgpOworICAgICAgICBpZiAocmVxdWVz
dC5zdmdDbGlwQ29udGVudCgpKQorICAgICAgICAgICAgZmlsbFJ1bGUgPSBzdmdTdHlsZS0+Y2xp
cFJ1bGUoKTsKKyAgICAgICAgaWYgKChoaXRSdWxlcy5jYW5IaXRTdHJva2UgJiYgKHN2Z1N0eWxl
LT5oYXNTdHJva2UoKSB8fCAhaGl0UnVsZXMucmVxdWlyZVN0cm9rZSkgJiYgc3Ryb2tlQ29udGFp
bnMobG9jYWxQb2ludCwgaGl0UnVsZXMucmVxdWlyZVN0cm9rZSkpCisgICAgICAgICAgICB8fCAo
aGl0UnVsZXMuY2FuSGl0RmlsbCAmJiAoc3ZnU3R5bGUtPmhhc0ZpbGwoKSB8fCAhaGl0UnVsZXMu
cmVxdWlyZUZpbGwpICYmIGZpbGxDb250YWlucyhsb2NhbFBvaW50LCBoaXRSdWxlcy5yZXF1aXJl
RmlsbCwgZmlsbFJ1bGUpKSkgeworICAgICAgICAgICAgdXBkYXRlSGl0VGVzdFJlc3VsdChyZXN1
bHQsIHJvdW5kZWRMYXlvdXRQb2ludChsb2NhbFBvaW50KSk7CisgICAgICAgICAgICByZXR1cm4g
dHJ1ZTsKKyAgICAgICAgfQorICAgIH0KKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK0Zsb2F0UmVj
dCBSZW5kZXJTVkdTaGFwZTo6Y2FsY3VsYXRlTWFya2VyQm91bmRzSWZOZWVkZWQoKQoreworICAg
IFNWR0VsZW1lbnQqIHN2Z0VsZW1lbnQgPSBzdGF0aWNfY2FzdDxTVkdFbGVtZW50Kj4obm9kZSgp
KTsKKyAgICBBU1NFUlQoc3ZnRWxlbWVudCAmJiBzdmdFbGVtZW50LT5kb2N1bWVudCgpKTsKKyAg
ICBpZiAoIXN2Z0VsZW1lbnQtPmlzU3R5bGVkKCkpCisgICAgICAgIHJldHVybiBGbG9hdFJlY3Qo
KTsKKworICAgIFNWR1N0eWxlZEVsZW1lbnQqIHN0eWxlZEVsZW1lbnQgPSBzdGF0aWNfY2FzdDxT
VkdTdHlsZWRFbGVtZW50Kj4oc3ZnRWxlbWVudCk7CisgICAgaWYgKCFzdHlsZWRFbGVtZW50LT5z
dXBwb3J0c01hcmtlcnMoKSkKKyAgICAgICAgcmV0dXJuIEZsb2F0UmVjdCgpOworCisgICAgQVNT
RVJUKHN0eWxlKCktPnN2Z1N0eWxlKCktPmhhc01hcmtlcnMoKSk7CisKKyAgICBTVkdSZXNvdXJj
ZXMqIHJlc291cmNlcyA9IFNWR1Jlc291cmNlc0NhY2hlOjpjYWNoZWRSZXNvdXJjZXNGb3JSZW5k
ZXJPYmplY3QodGhpcyk7CisgICAgaWYgKCFyZXNvdXJjZXMpCisgICAgICAgIHJldHVybiBGbG9h
dFJlY3QoKTsKKworICAgIFJlbmRlclNWR1Jlc291cmNlTWFya2VyKiBtYXJrZXJTdGFydCA9IHJl
c291cmNlcy0+bWFya2VyU3RhcnQoKTsKKyAgICBSZW5kZXJTVkdSZXNvdXJjZU1hcmtlciogbWFy
a2VyTWlkID0gcmVzb3VyY2VzLT5tYXJrZXJNaWQoKTsKKyAgICBSZW5kZXJTVkdSZXNvdXJjZU1h
cmtlciogbWFya2VyRW5kID0gcmVzb3VyY2VzLT5tYXJrZXJFbmQoKTsKKyAgICBpZiAoIW1hcmtl
clN0YXJ0ICYmICFtYXJrZXJNaWQgJiYgIW1hcmtlckVuZCkKKyAgICAgICAgcmV0dXJuIEZsb2F0
UmVjdCgpOworCisgICAgcmV0dXJuIG1fbWFya2VyTGF5b3V0SW5mby5jYWxjdWxhdGVCb3VuZGFy
aWVzKG1hcmtlclN0YXJ0LCBtYXJrZXJNaWQsIG1hcmtlckVuZCwgc3Ryb2tlV2lkdGgoKSwgcGF0
aCgpKTsKK30KKwordm9pZCBSZW5kZXJTVkdTaGFwZTo6dXBkYXRlQ2FjaGVkQm91bmRhcmllcygp
Cit7CisgICAgaWYgKGlzRW1wdHkoKSkgeworICAgICAgICBtX2ZpbGxCb3VuZGluZ0JveCA9IEZs
b2F0UmVjdCgpOworICAgICAgICBtX3N0cm9rZUFuZE1hcmtlckJvdW5kaW5nQm94ID0gRmxvYXRS
ZWN0KCk7CisgICAgICAgIG1fcmVwYWludEJvdW5kaW5nQm94ID0gRmxvYXRSZWN0KCk7CisgICAg
ICAgIHJldHVybjsKKyAgICB9CisKKyAgICAvLyBDYWNoZSBfdW5jbGlwcGVkXyBmaWxsIGJvdW5k
aW5nIGJveCwgdXNlZCBmb3IgY2FsY3VsYXRpb25zIGluIHJlc291cmNlcworICAgIG1fZmlsbEJv
dW5kaW5nQm94ID0gb2JqZWN0Qm91bmRpbmdCb3goKTsKKworICAgIC8vIFNwZWMoMTEuNCk6IEFu
eSB6ZXJvIGxlbmd0aCBzdWJwYXRoIHNoYWxsIG5vdCBiZSBzdHJva2VkIGlmIHRoZSDigJhzdHJv
a2UtbGluZWNhcOKAmSBwcm9wZXJ0eSBoYXMgYSB2YWx1ZSBvZiBidXR0CisgICAgLy8gYnV0IHNo
YWxsIGJlIHN0cm9rZWQgaWYgdGhlIOKAmHN0cm9rZS1saW5lY2Fw4oCZIHByb3BlcnR5IGhhcyBh
IHZhbHVlIG9mIHJvdW5kIG9yIHNxdWFyZQorICAgIGlmIChzaG91bGRTdHJva2VaZXJvTGVuZ3Ro
U3VicGF0aCgpKSB7CisgICAgICAgIG1fc3Ryb2tlQW5kTWFya2VyQm91bmRpbmdCb3ggPSB6ZXJv
TGVuZ3RoU3VicGF0aFJlY3QoKTsKKyAgICAgICAgLy8gQ2FjaGUgc21hbGxlc3QgcG9zc2libGUg
cmVwYWludCByZWN0YW5nbGUKKyAgICAgICAgbV9yZXBhaW50Qm91bmRpbmdCb3ggPSBtX3N0cm9r
ZUFuZE1hcmtlckJvdW5kaW5nQm94OworICAgICAgICBTVkdSZW5kZXJTdXBwb3J0OjppbnRlcnNl
Y3RSZXBhaW50UmVjdFdpdGhSZXNvdXJjZXModGhpcywgbV9yZXBhaW50Qm91bmRpbmdCb3gpOwor
ICAgICAgICByZXR1cm47CisgICAgfQorICAgIC8vIENhY2hlIF91bmNsaXBwZWRfIHN0cm9rZSBi
b3VuZGluZyBib3gsIHVzZWQgZm9yIGNhbGN1bGF0aW9ucyBpbiByZXNvdXJjZXMgKGluY2x1ZGVz
IG1hcmtlciBib3VuZGFyaWVzKQorICAgIG1fc3Ryb2tlQW5kTWFya2VyQm91bmRpbmdCb3ggPSBt
X2ZpbGxCb3VuZGluZ0JveDsKKworICAgIGNvbnN0IFNWR1JlbmRlclN0eWxlKiBzdmdTdHlsZSA9
IHN0eWxlKCktPnN2Z1N0eWxlKCk7CisgICAgaWYgKHN2Z1N0eWxlLT5oYXNTdHJva2UoKSkKKyAg
ICAgICAgbV9zdHJva2VBbmRNYXJrZXJCb3VuZGluZ0JveC51bml0ZSgvKm91dGVyU3Ryb2tlQm91
bmRpbmdCb3goKSovc3Ryb2tlQm91bmRpbmdCb3goKSk7CisKKyAgICBpbmZsYXRlV2l0aE1hcmtl
ckJvdW5kcygpOworCisgICAgLy8gQ2FjaGUgc21hbGxlc3QgcG9zc2libGUgcmVwYWludCByZWN0
YW5nbGUKKyAgICBtX3JlcGFpbnRCb3VuZGluZ0JveCA9IG1fc3Ryb2tlQW5kTWFya2VyQm91bmRp
bmdCb3g7CisgICAgU1ZHUmVuZGVyU3VwcG9ydDo6aW50ZXJzZWN0UmVwYWludFJlY3RXaXRoUmVz
b3VyY2VzKHRoaXMsIG1fcmVwYWludEJvdW5kaW5nQm94KTsKK30KKworZmxvYXQgUmVuZGVyU1ZH
U2hhcGU6OnN0cm9rZVdpZHRoKCkgY29uc3QKK3sKKyAgICBTVkdFbGVtZW50KiBzdmdFbGVtZW50
ID0gc3RhdGljX2Nhc3Q8U1ZHRWxlbWVudCo+KG5vZGUoKSk7CisgICAgcmV0dXJuIHN0eWxlKCkt
PnN2Z1N0eWxlKCktPnN0cm9rZVdpZHRoKCkudmFsdWUoc3ZnRWxlbWVudCk7Cit9CisKK30KKwor
I2VuZGlmIC8vIEVOQUJMRShTVkcpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvc3ZnL1JlbmRlclNWR1NoYXBlLmggYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1Jl
bmRlclNWR1NoYXBlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDQ2OWU3
ZgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVy
U1ZHU2hhcGUuaApAQCAtMCwwICsxLDE2NiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwNCwg
MjAwNSwgMjAwNyBOaWtvbGFzIFppbW1lcm1hbm4gPHppbW1lcm1hbm5Aa2RlLm9yZz4KKyAqIENv
cHlyaWdodCAoQykgMjAwNCwgMjAwNSBSb2IgQnVpcyA8YnVpc0BrZGUub3JnPgorICogQ29weXJp
Z2h0IChDKSAyMDA1IEVyaWMgU2VpZGVsIDxlcmljQHdlYmtpdC5vcmc+CisgKiBDb3B5cmlnaHQg
KEMpIDIwMDYgQXBwbGUgQ29tcHV0ZXIsIEluYworICogQ29weXJpZ2h0IChDKSAyMDA5IEdvb2ds
ZSwgSW5jLgorICogQ29weXJpZ2h0IChDKSAyMDExIFJlbmF0YSBIb2RvdmFuIDxyZW5pQHdlYmtp
dC5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgVW5pdmVyc2l0eSBvZiBTemVnZWQKKyAqCisg
KiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQg
YW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBH
ZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdh
cmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChh
dCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlz
IGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQg
V0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBv
ZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NF
LiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9y
ZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhl
IEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBs
aWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0
aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZp
ZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2lmbmRl
ZiBSZW5kZXJTVkdTaGFwZV9oCisjZGVmaW5lIFJlbmRlclNWR1NoYXBlX2gKKworI2lmIEVOQUJM
RShTVkcpCisjaW5jbHVkZSAiQWZmaW5lVHJhbnNmb3JtLmgiCisjaW5jbHVkZSAiRmxvYXRSZWN0
LmgiCisjaW5jbHVkZSAiUmVuZGVyU1ZHTW9kZWxPYmplY3QuaCIKKyNpbmNsdWRlICJTVkdNYXJr
ZXJMYXlvdXRJbmZvLmgiCisjaW5jbHVkZSAiU3Ryb2tlU3R5bGVBcHBsaWVyLmgiCisjaW5jbHVk
ZSA8d3RmL093blB0ci5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIEZsb2F0UG9p
bnQ7CitjbGFzcyBHcmFwaGljc0NvbnRleHRTdGF0ZVNhdmVyOworY2xhc3MgUmVuZGVyU1ZHQ29u
dGFpbmVyOworY2xhc3MgUmVuZGVyU1ZHUGF0aDsKK2NsYXNzIFNWR1N0eWxlZFRyYW5zZm9ybWFi
bGVFbGVtZW50OworCitjbGFzcyBCb3VuZGluZ1JlY3RTdHJva2VTdHlsZUFwcGxpZXIgOiBwdWJs
aWMgU3Ryb2tlU3R5bGVBcHBsaWVyIHsKK3B1YmxpYzoKKyAgICBCb3VuZGluZ1JlY3RTdHJva2VT
dHlsZUFwcGxpZXIoY29uc3QgUmVuZGVyT2JqZWN0KiBvYmplY3QsIFJlbmRlclN0eWxlKiBzdHls
ZSkKKyAgICAgICAgOiBtX29iamVjdChvYmplY3QpCisgICAgICAgICwgbV9zdHlsZShzdHlsZSkK
KyAgICB7CisgICAgICAgIEFTU0VSVChzdHlsZSk7CisgICAgICAgIEFTU0VSVChvYmplY3QpOwor
ICAgIH0KKworICAgIHZvaWQgc3Ryb2tlU3R5bGUoR3JhcGhpY3NDb250ZXh0KiBnYykKKyAgICB7
CisgICAgICAgIFNWR1JlbmRlclN1cHBvcnQ6OmFwcGx5U3Ryb2tlU3R5bGVUb0NvbnRleHQoZ2Ms
IG1fc3R5bGUsIG1fb2JqZWN0KTsKKyAgICB9CisKK3ByaXZhdGU6CisgICAgY29uc3QgUmVuZGVy
T2JqZWN0KiBtX29iamVjdDsKKyAgICBSZW5kZXJTdHlsZSogbV9zdHlsZTsKK307CisKK2NsYXNz
IFJlbmRlclNWR1NoYXBlIDogcHVibGljIFJlbmRlclNWR01vZGVsT2JqZWN0IHsKK3B1YmxpYzoK
KyAgICBleHBsaWNpdCBSZW5kZXJTVkdTaGFwZShTVkdTdHlsZWRUcmFuc2Zvcm1hYmxlRWxlbWVu
dCopOworICAgIFJlbmRlclNWR1NoYXBlKFNWR1N0eWxlZFRyYW5zZm9ybWFibGVFbGVtZW50Kiwg
UGF0aCosIGJvb2wpOworICAgIHZpcnR1YWwgflJlbmRlclNWR1NoYXBlKCk7CisKKyAgICB2b2lk
IHNldE5lZWRzU2hhcGVVcGRhdGUoKSB7IG1fbmVlZHNTaGFwZVVwZGF0ZSA9IHRydWU7IH0KKyAg
ICB2aXJ0dWFsIHZvaWQgc2V0TmVlZHNCb3VuZGFyaWVzVXBkYXRlKCkgeyBtX25lZWRzQm91bmRh
cmllc1VwZGF0ZSA9IHRydWU7IH0KKyAgICB2aXJ0dWFsIHZvaWQgc2V0TmVlZHNUcmFuc2Zvcm1V
cGRhdGUoKSB7IG1fbmVlZHNUcmFuc2Zvcm1VcGRhdGUgPSB0cnVlOyB9CisgICAgdmlydHVhbCB2
b2lkIGZpbGxTaGFwZShHcmFwaGljc0NvbnRleHQqKSBjb25zdDsKKyAgICB2aXJ0dWFsIHZvaWQg
c3Ryb2tlU2hhcGUoR3JhcGhpY3NDb250ZXh0KikgY29uc3Q7CisgICAgYm9vbCBpc1BhaW50aW5n
RmFsbGJhY2soKSBjb25zdCB7IHJldHVybiBtX2ZpbGxGYWxsYmFjazsgfQorCisgICAgUGF0aCYg
cGF0aCgpIGNvbnN0CisgICAgeworICAgICAgICBBU1NFUlQobV9wYXRoKTsKKyAgICAgICAgcmV0
dXJuICptX3BhdGg7CisgICAgfQorCitwcm90ZWN0ZWQ6CisgICAgdmlydHVhbCB2b2lkIGNyZWF0
ZVNoYXBlKCk7CisgICAgdmlydHVhbCBib29sIGlzRW1wdHkoKSBjb25zdDsKKyAgICB2aXJ0dWFs
IEZsb2F0UmVjdCBvYmplY3RCb3VuZGluZ0JveCgpIGNvbnN0OworICAgIHZpcnR1YWwgRmxvYXRS
ZWN0IHN0cm9rZUJvdW5kaW5nQm94KCkgY29uc3Q7CisgICAgdmlydHVhbCBib29sIHNoYXBlRGVw
ZW5kZW50U3Ryb2tlQ29udGFpbnMoY29uc3QgRmxvYXRQb2ludCYpIGNvbnN0OworICAgIHZpcnR1
YWwgYm9vbCBzaGFwZURlcGVuZGVudEZpbGxDb250YWlucyhjb25zdCBGbG9hdFBvaW50JiwgY29u
c3QgV2luZFJ1bGUpIGNvbnN0OworICAgIGZsb2F0IHN0cm9rZVdpZHRoKCkgY29uc3Q7CisgICAg
dm9pZCBzZXRJc1BhaW50aW5nRmFsbGJhY2soYm9vbCBpc0ZhbGxiYWNrKSB7IG1fZmlsbEZhbGxi
YWNrID0gaXNGYWxsYmFjazsgfQorICAgIEZsb2F0UmVjdCBjYWxjdWxhdGVNYXJrZXJCb3VuZHNJ
Zk5lZWRlZCgpOworICAgIHZvaWQgc2V0U3Ryb2tlQW5kTWFya2VyQm91bmRpbmdCb3goRmxvYXRS
ZWN0IHJlY3QpIHsgbV9zdHJva2VBbmRNYXJrZXJCb3VuZGluZ0JveCA9IHJlY3Q7IH0KKyAgICBG
bG9hdFJlY3Qgc3Ryb2tlQW5kTWFya2VyQm91bmRpbmdCb3goKSB7IHJldHVybiBtX3N0cm9rZUFu
ZE1hcmtlckJvdW5kaW5nQm94OyB9CisgICAgLyp2aXJ0dWFsIEZsb2F0UmVjdCBvdXRlclN0cm9r
ZUJvdW5kaW5nQm94KCkgY29uc3QKKyAgICB7CisgICAgICAgIEJvdW5kaW5nUmVjdFN0cm9rZVN0
eWxlQXBwbGllciBzdHJva2VTdHlsZSh0aGlzLCBzdHlsZSgpKTsKKyAgICAgICAgcmV0dXJuIG1f
cGF0aC0+c3Ryb2tlQm91bmRpbmdSZWN0KCZzdHJva2VTdHlsZSk7CisgICAgfSovCisKKyAgICBi
b29sIGhhc1BhdGgoKSBjb25zdCB7IHJldHVybiBtX3BhdGguZ2V0KCk7IH0KKworcHJpdmF0ZToK
KyAgICAvLyBIaXQtZGV0ZWN0aW9uIHNlcGFyYXRlZCBmb3IgdGhlIGZpbGwgYW5kIHRoZSBzdHJv
a2UKKyAgICBib29sIGZpbGxDb250YWlucyhjb25zdCBGbG9hdFBvaW50JiwgYm9vbCByZXF1aXJl
c0ZpbGwgPSB0cnVlLCBjb25zdCBXaW5kUnVsZSBmaWxsUnVsZSA9IFJVTEVfTk9OWkVSTyk7Cisg
ICAgYm9vbCBzdHJva2VDb250YWlucyhjb25zdCBGbG9hdFBvaW50JiwgYm9vbCByZXF1aXJlc1N0
cm9rZSA9IHRydWUpOworCisgICAgdmlydHVhbCBGbG9hdFJlY3QgcmVwYWludFJlY3RJbkxvY2Fs
Q29vcmRpbmF0ZXMoKSBjb25zdCB7IHJldHVybiBtX3JlcGFpbnRCb3VuZGluZ0JveDsgfQorICAg
IHZpcnR1YWwgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiBsb2NhbFRvUGFyZW50VHJhbnNmb3JtKCkg
Y29uc3QgeyByZXR1cm4gbV9sb2NhbFRyYW5zZm9ybTsgfQorICAgIHZpcnR1YWwgQWZmaW5lVHJh
bnNmb3JtIGxvY2FsVHJhbnNmb3JtKCkgY29uc3QgeyByZXR1cm4gbV9sb2NhbFRyYW5zZm9ybTsg
fQorCisgICAgdmlydHVhbCBib29sIGlzU1ZHU2hhcGUoKSBjb25zdCB7IHJldHVybiB0cnVlOyB9
CisgICAgdmlydHVhbCBjb25zdCBjaGFyKiByZW5kZXJOYW1lKCkgY29uc3QgeyByZXR1cm4gIlJl
bmRlclNWR1NoYXBlIjsgfQorICAgIHZpcnR1YWwgYm9vbCBpc1JvdW5kZWRSZWN0KCkgeyByZXR1
cm4gZmFsc2U7IH0KKworICAgIHZpcnR1YWwgdm9pZCBsYXlvdXQoKTsKKyAgICB2aXJ0dWFsIHZv
aWQgcGFpbnQoUGFpbnRJbmZvJiwgY29uc3QgTGF5b3V0UG9pbnQmKTsKKyAgICB2aXJ0dWFsIHZv
aWQgYWRkRm9jdXNSaW5nUmVjdHMoVmVjdG9yPExheW91dFJlY3Q+JiwgY29uc3QgTGF5b3V0UG9p
bnQmKTsKKyAgICB2aXJ0dWFsIHZvaWQgaW5mbGF0ZVdpdGhNYXJrZXJCb3VuZHMoKSB7IH0KKwor
ICAgIHZpcnR1YWwgYm9vbCBub2RlQXRGbG9hdFBvaW50KGNvbnN0IEhpdFRlc3RSZXF1ZXN0Jiwg
SGl0VGVzdFJlc3VsdCYsIGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50SW5QYXJlbnQsIEhpdFRlc3RB
Y3Rpb24pOworCisgICAgdm9pZCB1cGRhdGVDYWNoZWRCb3VuZGFyaWVzKCk7CisKKyAgICB2b2lk
IHNldHVwU3F1YXJlQ2FwUGF0aChQYXRoKiYsIGludCYgYXBwbHlNb2RlKTsKKyAgICBib29sIHNl
dHVwTm9uU2NhbGluZ1N0cm9rZVBhdGgoUGF0aComLCBHcmFwaGljc0NvbnRleHRTdGF0ZVNhdmVy
Jik7CisgICAgYm9vbCBzaG91bGRTdHJva2VaZXJvTGVuZ3RoU3VicGF0aCgpIGNvbnN0OworICAg
IEZsb2F0UmVjdCB6ZXJvTGVuZ3RoU3VicGF0aFJlY3QoKSBjb25zdDsKKworICAgIHZvaWQgZmls
bEFuZFN0cm9rZVBhdGgoR3JhcGhpY3NDb250ZXh0Kik7CisKK3ByaXZhdGU6CisgICAgRmxvYXRS
ZWN0IG1fZmlsbEJvdW5kaW5nQm94OworICAgIEZsb2F0UmVjdCBtX3N0cm9rZUFuZE1hcmtlckJv
dW5kaW5nQm94OworICAgIEZsb2F0UmVjdCBtX3JlcGFpbnRCb3VuZGluZ0JveDsKKyAgICBTVkdN
YXJrZXJMYXlvdXRJbmZvIG1fbWFya2VyTGF5b3V0SW5mbzsKKyAgICBBZmZpbmVUcmFuc2Zvcm0g
bV9sb2NhbFRyYW5zZm9ybTsKKyAgICBPd25QdHI8UGF0aD4gbV9wYXRoOworCisgICAgYm9vbCBt
X25lZWRzQm91bmRhcmllc1VwZGF0ZSA6IDE7CisgICAgYm9vbCBtX25lZWRzU2hhcGVVcGRhdGUg
OiAxOworICAgIGJvb2wgbV9uZWVkc1RyYW5zZm9ybVVwZGF0ZSA6IDE7CisgICAgYm9vbCBtX2Zp
bGxGYWxsYmFjayA6IDE7CisgICAgYm9vbCBtX3N0cm9rZUNvbnRhaW5zRmFsbEJhY2sgOiAxOwor
fTsKKworaW5saW5lIFJlbmRlclNWR1NoYXBlKiB0b1JlbmRlclNWR1NoYXBlKFJlbmRlck9iamVj
dCogb2JqZWN0KQoreworICAgIEFTU0VSVCghb2JqZWN0IHx8IG9iamVjdC0+aXNTVkdTaGFwZSgp
KTsKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8UmVuZGVyU1ZHU2hhcGUqPihvYmplY3QpOworfQor
CitpbmxpbmUgY29uc3QgUmVuZGVyU1ZHU2hhcGUqIHRvUmVuZGVyU1ZHU2hhcGUoY29uc3QgUmVu
ZGVyT2JqZWN0KiBvYmplY3QpCit7CisgICAgQVNTRVJUKCFvYmplY3QgfHwgb2JqZWN0LT5pc1NW
R1NoYXBlKCkpOworICAgIHJldHVybiBzdGF0aWNfY2FzdDxjb25zdCBSZW5kZXJTVkdTaGFwZSo+
KG9iamVjdCk7Cit9CisKKy8vIFRoaXMgd2lsbCBjYXRjaCBhbnlvbmUgZG9pbmcgYW4gdW5uZWNl
c3NhcnkgY2FzdC4KK3ZvaWQgdG9SZW5kZXJTVkdTaGFwZShjb25zdCBSZW5kZXJTVkdTaGFwZSop
OworCit9CisKKyNlbmRpZiAvLyBFTkFCTEUoU1ZHKQorI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR0lubGluZVRleHRCb3guY3BwIGIvU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdJbmxpbmVUZXh0Qm94LmNwcAppbmRleCBjMWM1YWZhLi5l
OGMyYWY4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR0lubGlu
ZVRleHRCb3guY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHSW5saW5l
VGV4dEJveC5jcHAKQEAgLTM3Nyw3ICszNzcsNyBAQCB2b2lkIFNWR0lubGluZVRleHRCb3g6OnJl
bGVhc2VQYWludGluZ1Jlc291cmNlKEdyYXBoaWNzQ29udGV4dComIGNvbnRleHQsIGNvbnN0CiAg
ICAgUmVuZGVyT2JqZWN0KiBwYXJlbnRSZW5kZXJlciA9IHBhcmVudCgpLT5yZW5kZXJlcigpOwog
ICAgIEFTU0VSVChwYXJlbnRSZW5kZXJlcik7CiAKLSAgICBtX3BhaW50aW5nUmVzb3VyY2UtPnBv
c3RBcHBseVJlc291cmNlKHBhcmVudFJlbmRlcmVyLCBjb250ZXh0LCBtX3BhaW50aW5nUmVzb3Vy
Y2VNb2RlLCBwYXRoKTsKKyAgICBtX3BhaW50aW5nUmVzb3VyY2UtPnBvc3RBcHBseVJlc291cmNl
KHBhcmVudFJlbmRlcmVyLCBjb250ZXh0LCBtX3BhaW50aW5nUmVzb3VyY2VNb2RlLCBwYXRoLCAv
KlJlbmRlclNWR1NoYXBlKi8gMCk7CiAgICAgbV9wYWludGluZ1Jlc291cmNlID0gMDsKIH0KIApk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdSZW5kZXJTdXBwb3J0
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHUmVuZGVyU3VwcG9ydC5jcHAK
aW5kZXggMDA3OTIxOS4uYzM2MGM2YyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL3N2Zy9TVkdSZW5kZXJTdXBwb3J0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvc3ZnL1NWR1JlbmRlclN1cHBvcnQuY3BwCkBAIC04MSw3ICs4MSw2IEBAIHZvaWQgU1ZHUmVu
ZGVyU3VwcG9ydDo6bWFwTG9jYWxUb0NvbnRhaW5lcihjb25zdCBSZW5kZXJPYmplY3QqIG9iamVj
dCwgUmVuZGVyQm94CiBib29sIFNWR1JlbmRlclN1cHBvcnQ6OnByZXBhcmVUb1JlbmRlclNWR0Nv
bnRlbnQoUmVuZGVyT2JqZWN0KiBvYmplY3QsIFBhaW50SW5mbyYgcGFpbnRJbmZvKQogewogICAg
IEFTU0VSVChvYmplY3QpOwotCiAgICAgUmVuZGVyU3R5bGUqIHN0eWxlID0gb2JqZWN0LT5zdHls
ZSgpOwogICAgIEFTU0VSVChzdHlsZSk7CiAKQEAgLTE1Myw3ICsxNTIsNyBAQCB2b2lkIFNWR1Jl
bmRlclN1cHBvcnQ6OmZpbmlzaFJlbmRlclNWR0NvbnRlbnQoUmVuZGVyT2JqZWN0KiBvYmplY3Qs
IFBhaW50SW5mbyYgcAogICAgIFNWR1Jlc291cmNlcyogcmVzb3VyY2VzID0gU1ZHUmVzb3VyY2Vz
Q2FjaGU6OmNhY2hlZFJlc291cmNlc0ZvclJlbmRlck9iamVjdChvYmplY3QpOwogICAgIGlmIChy
ZXNvdXJjZXMpIHsKICAgICAgICAgaWYgKFJlbmRlclNWR1Jlc291cmNlRmlsdGVyKiBmaWx0ZXIg
PSByZXNvdXJjZXMtPmZpbHRlcigpKSB7Ci0gICAgICAgICAgICBmaWx0ZXItPnBvc3RBcHBseVJl
c291cmNlKG9iamVjdCwgcGFpbnRJbmZvLmNvbnRleHQsIEFwcGx5VG9EZWZhdWx0TW9kZSwgLyog
cGF0aCAqLzApOworICAgICAgICAgICAgZmlsdGVyLT5wb3N0QXBwbHlSZXNvdXJjZShzdGF0aWNf
Y2FzdDxSZW5kZXJTVkdTaGFwZSo+KG9iamVjdCksIHBhaW50SW5mby5jb250ZXh0LCBBcHBseVRv
RGVmYXVsdE1vZGUsIDAsIDApOwogICAgICAgICAgICAgcGFpbnRJbmZvLmNvbnRleHQgPSBzYXZl
ZENvbnRleHQ7CiAgICAgICAgIH0KICAgICB9CkBAIC0yMjUsOSArMjI0LDkgQEAgdm9pZCBTVkdS
ZW5kZXJTdXBwb3J0OjpsYXlvdXRDaGlsZHJlbihSZW5kZXJPYmplY3QqIHN0YXJ0LCBib29sIHNl
bGZOZWVkc0xheW91dCkKICAgICAgICAgICAgIC8vIFdoZW4gc2VsZk5lZWRzTGF5b3V0IGlzIGZh
bHNlIGFuZCB0aGUgbGF5b3V0IHNpemUgY2hhbmdlZCwgd2UgaGF2ZSB0byBjaGVjayB3aGV0aGVy
IHRoaXMgY2hpbGQgdXNlcyByZWxhdGl2ZSBsZW5ndGhzCiAgICAgICAgICAgICBpZiAoU1ZHRWxl
bWVudCogZWxlbWVudCA9IGNoaWxkLT5ub2RlKCktPmlzU1ZHRWxlbWVudCgpID8gc3RhdGljX2Nh
c3Q8U1ZHRWxlbWVudCo+KGNoaWxkLT5ub2RlKCkpIDogMCkgewogICAgICAgICAgICAgICAgIGlm
IChlbGVtZW50LT5pc1N0eWxlZCgpICYmIHN0YXRpY19jYXN0PFNWR1N0eWxlZEVsZW1lbnQqPihl
bGVtZW50KS0+aGFzUmVsYXRpdmVMZW5ndGhzKCkpIHsKLSAgICAgICAgICAgICAgICAgICAgLy8g
V2hlbiB0aGUgbGF5b3V0IHNpemUgY2hhbmdlZCBhbmQgd2hlbiB1c2luZyByZWxhdGl2ZSB2YWx1
ZXMgdGVsbCB0aGUgUmVuZGVyU1ZHUGF0aCB0byB1cGRhdGUgaXRzIFBhdGggb2JqZWN0Ci0gICAg
ICAgICAgICAgICAgICAgIGlmIChjaGlsZC0+aXNTVkdQYXRoKCkpCi0gICAgICAgICAgICAgICAg
ICAgICAgICB0b1JlbmRlclNWR1BhdGgoY2hpbGQpLT5zZXROZWVkc1BhdGhVcGRhdGUoKTsKKyAg
ICAgICAgICAgICAgICAgICAgLy8gV2hlbiB0aGUgbGF5b3V0IHNpemUgY2hhbmdlZCBhbmQgd2hl
biB1c2luZyByZWxhdGl2ZSB2YWx1ZXMgdGVsbCB0aGUgUmVuZGVyU1ZHU2hhcGUgdG8gdXBkYXRl
IGl0cyBzaGFwZSBvYmplY3QKKyAgICAgICAgICAgICAgICAgICAgaWYgKGNoaWxkLT5pc1NWR1No
YXBlKCkpCisgICAgICAgICAgICAgICAgICAgICAgICB0b1JlbmRlclNWR1NoYXBlKGNoaWxkKS0+
c2V0TmVlZHNTaGFwZVVwZGF0ZSgpOwogCiAgICAgICAgICAgICAgICAgICAgIG5lZWRzTGF5b3V0
ID0gdHJ1ZTsKICAgICAgICAgICAgICAgICB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvc3ZnL1NWR1JlbmRlclRyZWVBc1RleHQuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL3N2Zy9TVkdSZW5kZXJUcmVlQXNUZXh0LmNwcAppbmRleCBhMTYyOTY5Li5kMWFkNzJh
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR1JlbmRlclRyZWVB
c1RleHQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHUmVuZGVyVHJl
ZUFzVGV4dC5jcHAKQEAgLTU1LDYgKzU1LDcgQEAKICNpbmNsdWRlICJSZW5kZXJTVkdSZXNvdXJj
ZVJhZGlhbEdyYWRpZW50LmgiCiAjaW5jbHVkZSAiUmVuZGVyU1ZHUmVzb3VyY2VTb2xpZENvbG9y
LmgiCiAjaW5jbHVkZSAiUmVuZGVyU1ZHUm9vdC5oIgorI2luY2x1ZGUgIlJlbmRlclNWR1NoYXBl
LmgiCiAjaW5jbHVkZSAiUmVuZGVyU1ZHVGV4dC5oIgogI2luY2x1ZGUgIlJlbmRlclRyZWVBc1Rl
eHQuaCIKICNpbmNsdWRlICJTVkdDaXJjbGVFbGVtZW50LmgiCkBAIC0yODksMTggKzI5MCwxOCBA
QCBzdGF0aWMgdm9pZCB3cml0ZVN0eWxlKFRleHRTdHJlYW0mIHRzLCBjb25zdCBSZW5kZXJPYmpl
Y3QmIG9iamVjdCkKICAgICAgICAgd3JpdGVOYW1lVmFsdWVQYWlyKHRzLCAidHJhbnNmb3JtIiwg
b2JqZWN0LmxvY2FsVHJhbnNmb3JtKCkpOwogICAgIHdyaXRlSWZOb3REZWZhdWx0KHRzLCAiaW1h
Z2UgcmVuZGVyaW5nIiwgc3R5bGUtPmltYWdlUmVuZGVyaW5nKCksIFJlbmRlclN0eWxlOjppbml0
aWFsSW1hZ2VSZW5kZXJpbmcoKSk7CiAgICAgd3JpdGVJZk5vdERlZmF1bHQodHMsICJvcGFjaXR5
Iiwgc3R5bGUtPm9wYWNpdHkoKSwgUmVuZGVyU3R5bGU6OmluaXRpYWxPcGFjaXR5KCkpOwotICAg
IGlmIChvYmplY3QuaXNTVkdQYXRoKCkpIHsKLSAgICAgICAgY29uc3QgUmVuZGVyU1ZHUGF0aCYg
cGF0aCA9IHN0YXRpY19jYXN0PGNvbnN0IFJlbmRlclNWR1BhdGgmPihvYmplY3QpOwotICAgICAg
ICBBU1NFUlQocGF0aC5ub2RlKCkpOwotICAgICAgICBBU1NFUlQocGF0aC5ub2RlKCktPmlzU1ZH
RWxlbWVudCgpKTsKKyAgICBpZiAob2JqZWN0LmlzU1ZHU2hhcGUoKSkgeworICAgICAgICBjb25z
dCBSZW5kZXJTVkdTaGFwZSYgc2hhcGUgPSBzdGF0aWNfY2FzdDxjb25zdCBSZW5kZXJTVkdTaGFw
ZSY+KG9iamVjdCk7CisgICAgICAgIEFTU0VSVChzaGFwZS5ub2RlKCkpOworICAgICAgICBBU1NF
UlQoc2hhcGUubm9kZSgpLT5pc1NWR0VsZW1lbnQoKSk7CiAKICAgICAgICAgQ29sb3IgZmFsbGJh
Y2tDb2xvcjsKLSAgICAgICAgaWYgKFJlbmRlclNWR1Jlc291cmNlKiBzdHJva2VQYWludGluZ1Jl
c291cmNlID0gUmVuZGVyU1ZHUmVzb3VyY2U6OnN0cm9rZVBhaW50aW5nUmVzb3VyY2UoY29uc3Rf
Y2FzdDxSZW5kZXJTVkdQYXRoKj4oJnBhdGgpLCBwYXRoLnN0eWxlKCksIGZhbGxiYWNrQ29sb3Ip
KSB7CisgICAgICAgIGlmIChSZW5kZXJTVkdSZXNvdXJjZSogc3Ryb2tlUGFpbnRpbmdSZXNvdXJj
ZSA9IFJlbmRlclNWR1Jlc291cmNlOjpzdHJva2VQYWludGluZ1Jlc291cmNlKGNvbnN0X2Nhc3Q8
UmVuZGVyU1ZHU2hhcGUqPigmc2hhcGUpLCBzaGFwZS5zdHlsZSgpLCBmYWxsYmFja0NvbG9yKSkg
ewogICAgICAgICAgICAgVGV4dFN0cmVhbVNlcGFyYXRvciBzKCIgIik7CiAgICAgICAgICAgICB0
cyA8PCAiIFtzdHJva2U9eyIgPDwgczsKICAgICAgICAgICAgIHdyaXRlU1ZHUGFpbnRpbmdSZXNv
dXJjZSh0cywgc3Ryb2tlUGFpbnRpbmdSZXNvdXJjZSk7CiAKLSAgICAgICAgICAgIFNWR0VsZW1l
bnQqIGVsZW1lbnQgPSBzdGF0aWNfY2FzdDxTVkdFbGVtZW50Kj4ocGF0aC5ub2RlKCkpOworICAg
ICAgICAgICAgU1ZHRWxlbWVudCogZWxlbWVudCA9IHN0YXRpY19jYXN0PFNWR0VsZW1lbnQqPihz
aGFwZS5ub2RlKCkpOwogICAgICAgICAgICAgZG91YmxlIGRhc2hPZmZzZXQgPSBzdmdTdHlsZS0+
c3Ryb2tlRGFzaE9mZnNldCgpLnZhbHVlKGVsZW1lbnQpOwogICAgICAgICAgICAgZG91YmxlIHN0
cm9rZVdpZHRoID0gc3ZnU3R5bGUtPnN0cm9rZVdpZHRoKCkudmFsdWUoZWxlbWVudCk7CiAgICAg
ICAgICAgICBjb25zdCBWZWN0b3I8U1ZHTGVuZ3RoPiYgZGFzaGVzID0gc3ZnU3R5bGUtPnN0cm9r
ZURhc2hBcnJheSgpOwpAQCAtMzIyLDcgKzMyMyw3IEBAIHN0YXRpYyB2b2lkIHdyaXRlU3R5bGUo
VGV4dFN0cmVhbSYgdHMsIGNvbnN0IFJlbmRlck9iamVjdCYgb2JqZWN0KQogICAgICAgICAgICAg
dHMgPDwgIn1dIjsKICAgICAgICAgfQogCi0gICAgICAgIGlmIChSZW5kZXJTVkdSZXNvdXJjZSog
ZmlsbFBhaW50aW5nUmVzb3VyY2UgPSBSZW5kZXJTVkdSZXNvdXJjZTo6ZmlsbFBhaW50aW5nUmVz
b3VyY2UoY29uc3RfY2FzdDxSZW5kZXJTVkdQYXRoKj4oJnBhdGgpLCBwYXRoLnN0eWxlKCksIGZh
bGxiYWNrQ29sb3IpKSB7CisgICAgICAgIGlmIChSZW5kZXJTVkdSZXNvdXJjZSogZmlsbFBhaW50
aW5nUmVzb3VyY2UgPSBSZW5kZXJTVkdSZXNvdXJjZTo6ZmlsbFBhaW50aW5nUmVzb3VyY2UoY29u
c3RfY2FzdDxSZW5kZXJTVkdTaGFwZSo+KCZzaGFwZSksIHNoYXBlLnN0eWxlKCksIGZhbGxiYWNr
Q29sb3IpKSB7CiAgICAgICAgICAgICBUZXh0U3RyZWFtU2VwYXJhdG9yIHMoIiAiKTsKICAgICAg
ICAgICAgIHRzIDw8ICIgW2ZpbGw9eyIgPDwgczsKICAgICAgICAgICAgIHdyaXRlU1ZHUGFpbnRp
bmdSZXNvdXJjZSh0cywgZmlsbFBhaW50aW5nUmVzb3VyY2UpOwpAQCAtMzQ2LDEyICszNDcsMTIg
QEAgc3RhdGljIFRleHRTdHJlYW0mIHdyaXRlUG9zaXRpb25BbmRTdHlsZShUZXh0U3RyZWFtJiB0
cywgY29uc3QgUmVuZGVyT2JqZWN0JiBvYmoKICAgICByZXR1cm4gdHM7CiB9CiAKLXN0YXRpYyBU
ZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJlYW0mIHRzLCBjb25zdCBSZW5kZXJTVkdQYXRo
JiBwYXRoKQorc3RhdGljIFRleHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYgdHMsIGNv
bnN0IFJlbmRlclNWR1NoYXBlJiBzaGFwZSkKIHsKLSAgICB3cml0ZVBvc2l0aW9uQW5kU3R5bGUo
dHMsIHBhdGgpOworICAgIHdyaXRlUG9zaXRpb25BbmRTdHlsZSh0cywgc2hhcGUpOwogCi0gICAg
QVNTRVJUKHBhdGgubm9kZSgpLT5pc1NWR0VsZW1lbnQoKSk7Ci0gICAgU1ZHRWxlbWVudCogc3Zn
RWxlbWVudCA9IHN0YXRpY19jYXN0PFNWR0VsZW1lbnQqPihwYXRoLm5vZGUoKSk7CisgICAgQVNT
RVJUKHNoYXBlLm5vZGUoKS0+aXNTVkdFbGVtZW50KCkpOworICAgIFNWR0VsZW1lbnQqIHN2Z0Vs
ZW1lbnQgPSBzdGF0aWNfY2FzdDxTVkdFbGVtZW50Kj4oc2hhcGUubm9kZSgpKTsKIAogICAgIGlm
IChzdmdFbGVtZW50LT5oYXNUYWdOYW1lKFNWR05hbWVzOjpyZWN0VGFnKSkgewogICAgICAgICBT
VkdSZWN0RWxlbWVudCogZWxlbWVudCA9IHN0YXRpY19jYXN0PFNWR1JlY3RFbGVtZW50Kj4oc3Zn
RWxlbWVudCk7CkBAIC02NTMsMTEgKzY1NCwxMSBAQCB2b2lkIHdyaXRlU1ZHSW1hZ2UoVGV4dFN0
cmVhbSYgdHMsIGNvbnN0IFJlbmRlclNWR0ltYWdlJiBpbWFnZSwgaW50IGluZGVudCkKICAgICB3
cml0ZVJlc291cmNlcyh0cywgaW1hZ2UsIGluZGVudCk7CiB9CiAKLXZvaWQgd3JpdGUoVGV4dFN0
cmVhbSYgdHMsIGNvbnN0IFJlbmRlclNWR1BhdGgmIHBhdGgsIGludCBpbmRlbnQpCit2b2lkIHdy
aXRlKFRleHRTdHJlYW0mIHRzLCBjb25zdCBSZW5kZXJTVkdTaGFwZSYgc2hhcGUsIGludCBpbmRl
bnQpCiB7Ci0gICAgd3JpdGVTdGFuZGFyZFByZWZpeCh0cywgcGF0aCwgaW5kZW50KTsKLSAgICB0
cyA8PCBwYXRoIDw8ICJcbiI7Ci0gICAgd3JpdGVSZXNvdXJjZXModHMsIHBhdGgsIGluZGVudCk7
CisgICAgd3JpdGVTdGFuZGFyZFByZWZpeCh0cywgc2hhcGUsIGluZGVudCk7CisgICAgdHMgPDwg
c2hhcGUgPDwgIlxuIjsKKyAgICB3cml0ZVJlc291cmNlcyh0cywgc2hhcGUsIGluZGVudCk7CiB9
CiAKIHZvaWQgd3JpdGVTVkdHcmFkaWVudFN0b3AoVGV4dFN0cmVhbSYgdHMsIGNvbnN0IFJlbmRl
clNWR0dyYWRpZW50U3RvcCYgc3RvcCwgaW50IGluZGVudCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHUmVuZGVyVHJlZUFzVGV4dC5oIGIvU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL3N2Zy9TVkdSZW5kZXJUcmVlQXNUZXh0LmgKaW5kZXggY2UwN2E1Yy4uMzU5
OGM4MyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdSZW5kZXJU
cmVlQXNUZXh0LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdSZW5kZXJU
cmVlQXNUZXh0LmgKQEAgLTQxLDE0ICs0MSwxNCBAQCBjbGFzcyBSZW5kZXJJbWFnZTsKIGNsYXNz
IFJlbmRlck9iamVjdDsKIGNsYXNzIFJlbmRlclNWR0dyYWRpZW50U3RvcDsKIGNsYXNzIFJlbmRl
clNWR0ltYWdlOwotY2xhc3MgUmVuZGVyU1ZHUGF0aDsKK2NsYXNzIFJlbmRlclNWR1NoYXBlOwog
Y2xhc3MgUmVuZGVyU1ZHUm9vdDsKIGNsYXNzIFJlbmRlclRleHQ7CiBjbGFzcyBBZmZpbmVUcmFu
c2Zvcm07CiBjbGFzcyBTVkdVbml0VHlwZXM7CiAKIC8vIGZ1bmN0aW9ucyB1c2VkIGJ5IHRoZSBt
YWluIFJlbmRlclRyZWVBc1RleHQgY29kZQotdm9pZCB3cml0ZShUZXh0U3RyZWFtJiwgY29uc3Qg
UmVuZGVyU1ZHUGF0aCYsIGludCBpbmRlbnQpOwordm9pZCB3cml0ZShUZXh0U3RyZWFtJiwgY29u
c3QgUmVuZGVyU1ZHU2hhcGUmLCBpbnQgaW5kZW50KTsKIHZvaWQgd3JpdGUoVGV4dFN0cmVhbSYs
IGNvbnN0IFJlbmRlclNWR1Jvb3QmLCBpbnQgaW5kZW50KTsKIHZvaWQgd3JpdGVTVkdHcmFkaWVu
dFN0b3AoVGV4dFN0cmVhbSYsIGNvbnN0IFJlbmRlclNWR0dyYWRpZW50U3RvcCYsIGludCBpbmRl
bnQpOwogdm9pZCB3cml0ZVNWR1Jlc291cmNlQ29udGFpbmVyKFRleHRTdHJlYW0mLCBjb25zdCBS
ZW5kZXJPYmplY3QmLCBpbnQgaW5kZW50KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9zdmcvU1ZHVGV4dFJ1blJlbmRlcmluZ0NvbnRleHQuY3BwIGIvU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL3N2Zy9TVkdUZXh0UnVuUmVuZGVyaW5nQ29udGV4dC5jcHAKaW5kZXggMzNh
Y2Y5Mi4uMjI0ZWI4NiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9T
VkdUZXh0UnVuUmVuZGVyaW5nQ29udGV4dC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL3N2Zy9TVkdUZXh0UnVuUmVuZGVyaW5nQ29udGV4dC5jcHAKQEAgLTE2MCw3ICsxNjAsNyBA
QCB2b2lkIFNWR1RleHRSdW5SZW5kZXJpbmdDb250ZXh0OjpkcmF3U1ZHR2x5cGhzKEdyYXBoaWNz
Q29udGV4dCogY29udGV4dCwgY29uc3QgVAogICAgICAgICAgICAgICAgIGNvbnN0IFJlbmRlclNW
R0lubGluZVRleHQqIHRleHRSZW5kZXJlciA9IHRvUmVuZGVyU1ZHSW5saW5lVGV4dChyZW5kZXJP
YmplY3QpOwogICAgICAgICAgICAgICAgIGNvbnRleHQtPnNldFN0cm9rZVRoaWNrbmVzcyhjb250
ZXh0LT5zdHJva2VUaGlja25lc3MoKSAqIHRleHRSZW5kZXJlci0+c2NhbGluZ0ZhY3RvcigpKTsK
ICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGFjdGl2ZVBhaW50aW5nUmVzb3VyY2UtPnBvc3RB
cHBseVJlc291cmNlKHBhcmVudFJlbmRlck9iamVjdCwgY29udGV4dCwgcmVzb3VyY2VNb2RlLCAm
Z2x5cGhQYXRoKTsKKyAgICAgICAgICAgIGFjdGl2ZVBhaW50aW5nUmVzb3VyY2UtPnBvc3RBcHBs
eVJlc291cmNlKHBhcmVudFJlbmRlck9iamVjdCwgY29udGV4dCwgcmVzb3VyY2VNb2RlLCAmZ2x5
cGhQYXRoLCAwKTsKICAgICAgICAgIH0KICAKICAgICAgICAgY29udGV4dC0+cmVzdG9yZSgpOwpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0NpcmNsZUVsZW1lbnQuY3BwIGIvU291
cmNlL1dlYkNvcmUvc3ZnL1NWR0NpcmNsZUVsZW1lbnQuY3BwCmluZGV4IDI4OGU1OGEuLmU1M2Qy
N2UgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdDaXJjbGVFbGVtZW50LmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHQ2lyY2xlRWxlbWVudC5jcHAKQEAgLTEyNCw3ICsx
MjQsNyBAQCB2b2lkIFNWR0NpcmNsZUVsZW1lbnQ6OnN2Z0F0dHJpYnV0ZUNoYW5nZWQoY29uc3Qg
UXVhbGlmaWVkTmFtZSYgYXR0ck5hbWUpCiAgICAgICAgIHJldHVybjsKIAogICAgIGlmIChpc0xl
bmd0aEF0dHJpYnV0ZSkgewotICAgICAgICByZW5kZXJlci0+c2V0TmVlZHNQYXRoVXBkYXRlKCk7
CisgICAgICAgIHJlbmRlcmVyLT5zZXROZWVkc1NoYXBlVXBkYXRlKCk7CiAgICAgICAgIFJlbmRl
clNWR1Jlc291cmNlOjptYXJrRm9yTGF5b3V0QW5kUGFyZW50UmVzb3VyY2VJbnZhbGlkYXRpb24o
cmVuZGVyZXIpOwogICAgICAgICByZXR1cm47CiAgICAgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvc3ZnL1NWR0VsbGlwc2VFbGVtZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdF
bGxpcHNlRWxlbWVudC5jcHAKaW5kZXggOWI5ZGE2OC4uNjE1OWUyYyAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvc3ZnL1NWR0VsbGlwc2VFbGVtZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9zdmcvU1ZHRWxsaXBzZUVsZW1lbnQuY3BwCkBAIC0xMjksNyArMTI5LDcgQEAgdm9pZCBTVkdF
bGxpcHNlRWxlbWVudDo6c3ZnQXR0cmlidXRlQ2hhbmdlZChjb25zdCBRdWFsaWZpZWROYW1lJiBh
dHRyTmFtZSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgaWYgKGlzTGVuZ3RoQXR0cmlidXRlKSB7
Ci0gICAgICAgIHJlbmRlcmVyLT5zZXROZWVkc1BhdGhVcGRhdGUoKTsKKyAgICAgICAgcmVuZGVy
ZXItPnNldE5lZWRzU2hhcGVVcGRhdGUoKTsKICAgICAgICAgUmVuZGVyU1ZHUmVzb3VyY2U6Om1h
cmtGb3JMYXlvdXRBbmRQYXJlbnRSZXNvdXJjZUludmFsaWRhdGlvbihyZW5kZXJlcik7CiAgICAg
ICAgIHJldHVybjsKICAgICB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHTGlu
ZUVsZW1lbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0xpbmVFbGVtZW50LmNwcAppbmRl
eCBjOWIyMTQ3Li5kMGQwODZlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHTGlu
ZUVsZW1lbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdMaW5lRWxlbWVudC5jcHAK
QEAgLTEyOSw3ICsxMjksNyBAQCB2b2lkIFNWR0xpbmVFbGVtZW50OjpzdmdBdHRyaWJ1dGVDaGFu
Z2VkKGNvbnN0IFF1YWxpZmllZE5hbWUmIGF0dHJOYW1lKQogICAgICAgICByZXR1cm47CiAKICAg
ICBpZiAoaXNMZW5ndGhBdHRyaWJ1dGUpIHsKLSAgICAgICAgcmVuZGVyZXItPnNldE5lZWRzUGF0
aFVwZGF0ZSgpOworICAgICAgICByZW5kZXJlci0+c2V0TmVlZHNTaGFwZVVwZGF0ZSgpOwogICAg
ICAgICBSZW5kZXJTVkdSZXNvdXJjZTo6bWFya0ZvckxheW91dEFuZFBhcmVudFJlc291cmNlSW52
YWxpZGF0aW9uKHJlbmRlcmVyKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdQYXRoRWxlbWVudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9z
dmcvU1ZHUGF0aEVsZW1lbnQuY3BwCmluZGV4IDRhZTY2MTMuLjI3YTA0MTggMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdQYXRoRWxlbWVudC5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvc3ZnL1NWR1BhdGhFbGVtZW50LmNwcApAQCAtMjY5LDcgKzI2OSw3IEBAIHZvaWQgU1ZHUGF0
aEVsZW1lbnQ6OnN2Z0F0dHJpYnV0ZUNoYW5nZWQoY29uc3QgUXVhbGlmaWVkTmFtZSYgYXR0ck5h
bWUpCiAgICAgICAgIH0KIAogICAgICAgICBpZiAocmVuZGVyZXIpCi0gICAgICAgICAgICByZW5k
ZXJlci0+c2V0TmVlZHNQYXRoVXBkYXRlKCk7CisgICAgICAgICAgICByZW5kZXJlci0+c2V0TmVl
ZHNTaGFwZVVwZGF0ZSgpOwogICAgIH0KIAogICAgIGlmIChyZW5kZXJlcikKQEAgLTM1NSwxMCAr
MzU1LDE2IEBAIHZvaWQgU1ZHUGF0aEVsZW1lbnQ6OnBhdGhTZWdMaXN0Q2hhbmdlZChTVkdQYXRo
U2VnUm9sZSByb2xlKQogICAgIGlmICghcmVuZGVyZXIpCiAgICAgICAgIHJldHVybjsKIAotICAg
IHJlbmRlcmVyLT5zZXROZWVkc1BhdGhVcGRhdGUoKTsKKyAgICByZW5kZXJlci0+c2V0TmVlZHNT
aGFwZVVwZGF0ZSgpOwogICAgIFJlbmRlclNWR1Jlc291cmNlOjptYXJrRm9yTGF5b3V0QW5kUGFy
ZW50UmVzb3VyY2VJbnZhbGlkYXRpb24ocmVuZGVyZXIpOwogfQogCitSZW5kZXJPYmplY3QqIFNW
R1BhdGhFbGVtZW50OjpjcmVhdGVSZW5kZXJlcihSZW5kZXJBcmVuYSogYXJlbmEsIFJlbmRlclN0
eWxlKikKK3sKKyAgICAvLyBCeSBkZWZhdWx0LCBhbnkgc3ViY2xhc3MgaXMgZXhwZWN0ZWQgdG8g
ZG8gcGF0aC1iYXNlZCBkcmF3aW5nCisgICAgcmV0dXJuIG5ldyAoYXJlbmEpIFJlbmRlclNWR1Bh
dGgodGhpcyk7Cit9CisKIH0KIAogI2VuZGlmIC8vIEVOQUJMRShTVkcpCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9zdmcvU1ZHUGF0aEVsZW1lbnQuaCBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9T
VkdQYXRoRWxlbWVudC5oCmluZGV4IDFkMzdkMGUuLjU0YjhmZTIgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3N2Zy9TVkdQYXRoRWxlbWVudC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9T
VkdQYXRoRWxlbWVudC5oCkBAIC0xMjIsNiArMTIyLDggQEAgcHJpdmF0ZToKICAgICB2aXJ0dWFs
IHZvaWQgc3luY2hyb25pemVSZXF1aXJlZEV4dGVuc2lvbnMoKSB7IFNWR1Rlc3RzOjpzeW5jaHJv
bml6ZVJlcXVpcmVkRXh0ZW5zaW9ucyh0aGlzKTsgfQogICAgIHZpcnR1YWwgdm9pZCBzeW5jaHJv
bml6ZVN5c3RlbUxhbmd1YWdlKCkgeyBTVkdUZXN0czo6c3luY2hyb25pemVTeXN0ZW1MYW5ndWFn
ZSh0aGlzKTsgfQogCisgICAgUmVuZGVyT2JqZWN0KiBjcmVhdGVSZW5kZXJlcihSZW5kZXJBcmVu
YSosIFJlbmRlclN0eWxlKik7CisKIHByaXZhdGU6CiAgICAgT3duUHRyPFNWR1BhdGhCeXRlU3Ry
ZWFtPiBtX3BhdGhCeXRlU3RyZWFtOwogICAgIG11dGFibGUgU1ZHU3luY2hyb25pemFibGVBbmlt
YXRlZFByb3BlcnR5PFNWR1BhdGhTZWdMaXN0PiBtX3BhdGhTZWdMaXN0OwpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvc3ZnL1NWR1BvbHlFbGVtZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3N2
Zy9TVkdQb2x5RWxlbWVudC5jcHAKaW5kZXggNjZjNTI1OC4uYThiNjdjNyAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvc3ZnL1NWR1BvbHlFbGVtZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9zdmcvU1ZHUG9seUVsZW1lbnQuY3BwCkBAIC0xMjQsNyArMTI0LDcgQEAgdm9pZCBTVkdQb2x5
RWxlbWVudDo6c3ZnQXR0cmlidXRlQ2hhbmdlZChjb25zdCBRdWFsaWZpZWROYW1lJiBhdHRyTmFt
ZSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgaWYgKGF0dHJOYW1lID09IFNWR05hbWVzOjpwb2lu
dHNBdHRyKSB7Ci0gICAgICAgIHJlbmRlcmVyLT5zZXROZWVkc1BhdGhVcGRhdGUoKTsKKyAgICAg
ICAgcmVuZGVyZXItPnNldE5lZWRzU2hhcGVVcGRhdGUoKTsKICAgICAgICAgUmVuZGVyU1ZHUmVz
b3VyY2U6Om1hcmtGb3JMYXlvdXRBbmRQYXJlbnRSZXNvdXJjZUludmFsaWRhdGlvbihyZW5kZXJl
cik7CiAgICAgICAgIHJldHVybjsKICAgICB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9z
dmcvU1ZHUmVjdEVsZW1lbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvc3ZnL1NWR1JlY3RFbGVtZW50
LmNwcAppbmRleCA5MjA3NzQ1Li41ODBjNjM1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9z
dmcvU1ZHUmVjdEVsZW1lbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdSZWN0RWxl
bWVudC5jcHAKQEAgLTI1LDYgKzI1LDcgQEAKIAogI2luY2x1ZGUgIkF0dHJpYnV0ZS5oIgogI2lu
Y2x1ZGUgIlJlbmRlclNWR1BhdGguaCIKKyNpbmNsdWRlICJSZW5kZXJTVkdSZWN0LmgiCiAjaW5j
bHVkZSAiUmVuZGVyU1ZHUmVzb3VyY2UuaCIKICNpbmNsdWRlICJTVkdFbGVtZW50SW5zdGFuY2Uu
aCIKICNpbmNsdWRlICJTVkdMZW5ndGguaCIKQEAgLTMyLDYgKzMzLDggQEAKIAogbmFtZXNwYWNl
IFdlYkNvcmUgewogCitjbGFzcyBSZW5kZXJTVkdSZWN0OworCiAvLyBBbmltYXRlZCBwcm9wZXJ0
eSBkZWZpbml0aW9ucwogREVGSU5FX0FOSU1BVEVEX0xFTkdUSChTVkdSZWN0RWxlbWVudCwgU1ZH
TmFtZXM6OnhBdHRyLCBYLCB4KQogREVGSU5FX0FOSU1BVEVEX0xFTkdUSChTVkdSZWN0RWxlbWVu
dCwgU1ZHTmFtZXM6OnlBdHRyLCBZLCB5KQpAQCAtMTM3LDEyICsxNDAsMTIgQEAgdm9pZCBTVkdS
ZWN0RWxlbWVudDo6c3ZnQXR0cmlidXRlQ2hhbmdlZChjb25zdCBRdWFsaWZpZWROYW1lJiBhdHRy
TmFtZSkKICAgICBpZiAoU1ZHVGVzdHM6OmhhbmRsZUF0dHJpYnV0ZUNoYW5nZSh0aGlzLCBhdHRy
TmFtZSkpCiAgICAgICAgIHJldHVybjsKIAotICAgIFJlbmRlclNWR1BhdGgqIHJlbmRlcmVyID0g
c3RhdGljX2Nhc3Q8UmVuZGVyU1ZHUGF0aCo+KHRoaXMtPnJlbmRlcmVyKCkpOworICAgIFJlbmRl
clNWR1JlY3QqIHJlbmRlcmVyID0gc3RhdGljX2Nhc3Q8UmVuZGVyU1ZHUmVjdCo+KHRoaXMtPnJl
bmRlcmVyKCkpOwogICAgIGlmICghcmVuZGVyZXIpCiAgICAgICAgIHJldHVybjsKIAogICAgIGlm
IChpc0xlbmd0aEF0dHJpYnV0ZSkgewotICAgICAgICByZW5kZXJlci0+c2V0TmVlZHNQYXRoVXBk
YXRlKCk7CisgICAgICAgIHJlbmRlcmVyLT5zZXROZWVkc1NoYXBlVXBkYXRlKCk7CiAgICAgICAg
IFJlbmRlclNWR1Jlc291cmNlOjptYXJrRm9yTGF5b3V0QW5kUGFyZW50UmVzb3VyY2VJbnZhbGlk
YXRpb24ocmVuZGVyZXIpOwogICAgICAgICByZXR1cm47CiAgICAgfQpAQCAtMTk4LDYgKzIwMSwx
MSBAQCBib29sIFNWR1JlY3RFbGVtZW50OjpzZWxmSGFzUmVsYXRpdmVMZW5ndGhzKCkgY29uc3QK
ICAgICAgICAgfHwgcnkoKS5pc1JlbGF0aXZlKCk7CiB9CiAKK1JlbmRlck9iamVjdCogU1ZHUmVj
dEVsZW1lbnQ6OmNyZWF0ZVJlbmRlcmVyKFJlbmRlckFyZW5hKiBhcmVuYSwgUmVuZGVyU3R5bGUq
KQoreworICAgIHJldHVybiBuZXcgKGFyZW5hKSBSZW5kZXJTVkdSZWN0KHRoaXMpOworfQorCiB9
CiAKICNlbmRpZiAvLyBFTkFCTEUoU1ZHKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvc3Zn
L1NWR1JlY3RFbGVtZW50LmggYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHUmVjdEVsZW1lbnQuaApp
bmRleCA5OTQzN2YzLi45YmY2MDJmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZH
UmVjdEVsZW1lbnQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHUmVjdEVsZW1lbnQuaApA
QCAtNTIsNiArNTIsOCBAQCBwcml2YXRlOgogCiAgICAgdmlydHVhbCBib29sIHNlbGZIYXNSZWxh
dGl2ZUxlbmd0aHMoKSBjb25zdDsKIAorICAgIFJlbmRlck9iamVjdCogY3JlYXRlUmVuZGVyZXIo
UmVuZGVyQXJlbmEqLCBSZW5kZXJTdHlsZSopOworCiAgICAgQkVHSU5fREVDTEFSRV9BTklNQVRF
RF9QUk9QRVJUSUVTKFNWR1JlY3RFbGVtZW50KQogICAgICAgICBERUNMQVJFX0FOSU1BVEVEX0xF
TkdUSChYLCB4KQogICAgICAgICBERUNMQVJFX0FOSU1BVEVEX0xFTkdUSChZLCB5KQotLSAKMS43
LjUuNAoK
</data>
<flag name="review"
          id="106500"
          type_id="1"
          status="-"
          setter="zimmermann"
    />
    <flag name="commit-queue"
          id="106501"
          type_id="3"
          status="-"
          setter="rhodovan.u-szeged"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>109781</attachid>
            <date>2011-10-05 06:29:33 -0700</date>
            <delta_ts>2011-10-18 07:48:52 -0700</delta_ts>
            <desc>Propsed patch</desc>
            <filename>0001-mac-jav.patch</filename>
            <type>text/plain</type>
            <size>108345</size>
            <attacher name="Renata Hodovan">rhodovan.u-szeged</attacher>
            
              <data encoding="base64">RnJvbSBjODQyOGYzNWQ3NTBlNzE3Y2NmZGE1NTc4N2FiMGU4NTgwOGNjOGFhIE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBSZW5hdGEgSG9kb3ZhbiA8cmVuaUB3ZWJraXQub3JnPgpEYXRl
OiBXZWQsIDUgT2N0IDIwMTEgMTU6MTM6MDkgKzAyMDAKU3ViamVjdDogW1BBVENIXSBtYWMgamF2
CgotLS0KIExheW91dFRlc3RzL0NoYW5nZUxvZyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHwgICAxNCArCiAuLi4vcG9pbnRlci1ldmVudHMtb24tcm91bmRlZC1yZWN0LWV4cGVjdGVkLnR4
dCAgICB8ICAgIDEgKwogLi4uL2N1c3RvbS9wb2ludGVyLWV2ZW50cy1vbi1yb3VuZGVkLXJlY3Qu
eGh0bWwgICAgfCAgIDY2ICsrKwogLi4uZW50cy13aXRoLWxpbmVjYXBzLWFuZC1taXRlcmxpbWl0
cy1leHBlY3RlZC50eHQgfCAgICAxICsKIC4uLm50ZXItZXZlbnRzLXdpdGgtbGluZWNhcHMtYW5k
LW1pdGVybGltaXRzLnhodG1sIHwgICA2OCArKysKIFNvdXJjZS9XZWJDb3JlL0NNYWtlTGlzdHMu
dHh0ICAgICAgICAgICAgICAgICAgICAgIHwgICAgMiArCiBTb3VyY2UvV2ViQ29yZS9DaGFuZ2VM
b2cgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAxNTggKysrKysrKwogU291cmNlL1dlYkNv
cmUvR05VbWFrZWZpbGUubGlzdC5hbSAgICAgICAgICAgICAgICAgfCAgICA0ICsKIFNvdXJjZS9X
ZWJDb3JlL1dlYkNvcmUuZ3lwaSAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgNCArCiBTb3Vy
Y2UvV2ViQ29yZS9XZWJDb3JlLnBybyAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgIDQgKwog
U291cmNlL1dlYkNvcmUvV2ViQ29yZS52Y3Byb2ovV2ViQ29yZS52Y3Byb2ogICAgICAgfCAgMTEy
ICsrKysrCiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9GbG9hdFJlY3QuY3BwICAg
ICB8ICAgIDcgKwogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRmxvYXRSZWN0Lmgg
ICAgICAgfCAgICA3ICstCiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyT2JqZWN0Lmgg
ICAgICAgICAgICB8ICAgIDIgKwogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRyZWVB
c1RleHQuY3BwICAgICAgfCAgICA0ICstCiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1Jl
bmRlclNWR0FsbEluT25lLmNwcCB8ICAgIDIgKwogLi4uL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9S
ZW5kZXJTVkdNb2RlbE9iamVjdC5jcHAgfCAgICAyICstCiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvc3ZnL1JlbmRlclNWR1BhdGguY3BwICAgICB8ICAzNTUgKy0tLS0tLS0tLS0tLS0tLQogU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdQYXRoLmggICAgICAgfCAgIDcyICst
LS0KIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVjdC5jcHAgICAgIHwg
IDEyNyArKysrKysKIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVjdC5o
ICAgICAgIHwgICA2NCArKysKIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZH
UmVzb3VyY2UuaCAgIHwgICAgMyArLQogLi4uL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVzb3Vy
Y2VDbGlwcGVyLmNwcCAgICAgfCAgICA2ICstCiAuLi4vcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdS
ZXNvdXJjZUNvbnRhaW5lci5jcHAgICB8ICAgIDIgKy0KIC4uLi9yZW5kZXJpbmcvc3ZnL1JlbmRl
clNWR1Jlc291cmNlRmlsdGVyLmNwcCAgICAgIHwgICAgNCArLQogLi4uL3JlbmRlcmluZy9zdmcv
UmVuZGVyU1ZHUmVzb3VyY2VGaWx0ZXIuaCAgICAgICAgfCAgICAyICstCiAuLi4vcmVuZGVyaW5n
L3N2Zy9SZW5kZXJTVkdSZXNvdXJjZUdyYWRpZW50LmNwcCAgICB8ICAgMjEgKy0KIC4uLi9yZW5k
ZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291cmNlR3JhZGllbnQuaCAgICAgIHwgICAgMiArLQogLi4u
L3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VQYXR0ZXJuLmNwcCAgICAgfCAgIDE0ICst
CiAuLi4vcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJjZVBhdHRlcm4uaCAgICAgICB8ICAg
IDIgKy0KIC4uLi9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291cmNlU29saWRDb2xvci5jcHAg
IHwgICAxNSArLQogLi4uL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VTb2xpZENvbG9y
LmggICAgfCAgICAyICstCiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1No
YXBlLmNwcCAgICB8ICA0NDYgKysrKysrKysrKysrKysrKysrKysKIFNvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9zdmcvUmVuZGVyU1ZHU2hhcGUuaCAgICAgIHwgIDE2MSArKysrKysrCiBTb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR0lubGluZVRleHRCb3guY3BwICB8ICAgIDIgKy0KIFNv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHUmVuZGVyU3VwcG9ydC5jcHAgIHwgICAgOSAr
LQogLi4uL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdSZW5kZXJUcmVlQXNUZXh0LmNwcCAgfCAg
IDMxICstCiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR1JlbmRlclRyZWVBc1RleHQu
aCB8ICAgIDQgKy0KIC4uLi9yZW5kZXJpbmcvc3ZnL1NWR1RleHRSdW5SZW5kZXJpbmdDb250ZXh0
LmNwcCAgIHwgICAgMiArLQogU291cmNlL1dlYkNvcmUvc3ZnL1NWR0NpcmNsZUVsZW1lbnQuY3Bw
ICAgICAgICAgICAgfCAgICAyICstCiBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRWxsaXBzZUVsZW1l
bnQuY3BwICAgICAgICAgICB8ICAgIDIgKy0KIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdMaW5lRWxl
bWVudC5jcHAgICAgICAgICAgICAgIHwgICAgMiArLQogU291cmNlL1dlYkNvcmUvc3ZnL1NWR1Bh
dGhFbGVtZW50LmNwcCAgICAgICAgICAgICAgfCAgIDEwICstCiBTb3VyY2UvV2ViQ29yZS9zdmcv
U1ZHUGF0aEVsZW1lbnQuaCAgICAgICAgICAgICAgICB8ICAgIDIgKwogU291cmNlL1dlYkNvcmUv
c3ZnL1NWR1BvbHlFbGVtZW50LmNwcCAgICAgICAgICAgICAgfCAgICAyICstCiBTb3VyY2UvV2Vi
Q29yZS9zdmcvU1ZHUmVjdEVsZW1lbnQuY3BwICAgICAgICAgICAgICB8ICAgMTIgKy0KIFNvdXJj
ZS9XZWJDb3JlL3N2Zy9TVkdSZWN0RWxlbWVudC5oICAgICAgICAgICAgICAgIHwgICAgMiArCiA0
NyBmaWxlcyBjaGFuZ2VkLCAxMzY2IGluc2VydGlvbnMoKyksIDQ3MiBkZWxldGlvbnMoLSkKIGNy
ZWF0ZSBtb2RlIDEwMDY0NCBMYXlvdXRUZXN0cy9zdmcvY3VzdG9tL3BvaW50ZXItZXZlbnRzLW9u
LXJvdW5kZWQtcmVjdC1leHBlY3RlZC50eHQKIGNyZWF0ZSBtb2RlIDEwMDY0NCBMYXlvdXRUZXN0
cy9zdmcvY3VzdG9tL3BvaW50ZXItZXZlbnRzLW9uLXJvdW5kZWQtcmVjdC54aHRtbAogY3JlYXRl
IG1vZGUgMTAwNjQ0IExheW91dFRlc3RzL3N2Zy9jdXN0b20vcG9pbnRlci1ldmVudHMtd2l0aC1s
aW5lY2Fwcy1hbmQtbWl0ZXJsaW1pdHMtZXhwZWN0ZWQudHh0CiBjcmVhdGUgbW9kZSAxMDA2NDQg
TGF5b3V0VGVzdHMvc3ZnL2N1c3RvbS9wb2ludGVyLWV2ZW50cy13aXRoLWxpbmVjYXBzLWFuZC1t
aXRlcmxpbWl0cy54aHRtbAogY3JlYXRlIG1vZGUgMTAwNjQ0IFNvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9zdmcvUmVuZGVyU1ZHUmVjdC5jcHAKIGNyZWF0ZSBtb2RlIDEwMDY0NCBTb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1JlY3QuaAogY3JlYXRlIG1vZGUgMTAwNjQ0IFNv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHU2hhcGUuY3BwCiBjcmVhdGUgbW9k
ZSAxMDA2NDQgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdTaGFwZS5oCgpk
aWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9n
CmluZGV4IDBlZDFmYWYuLmUxM2RmNTcgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL0NoYW5nZUxv
ZworKysgYi9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxNyBAQAorMjAxMS0xMC0w
NSAgUmVuYXRhIEhvZG92YW4gIDxyZW5pQHdlYmtpdC5vcmc+CisKKyAgICAgICAgQWRkIG5ldyBy
ZW5kZXJlciBmb3IgU1ZHUmVjdEVsZW1lbnQuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD02NTc2OQorCisgICAgICAgIEFkZCBuZXcgdGVzdHMgdG8gY2hl
Y2sgdGhlIG5ldyBzaGFwZSBiYXNlZCByZW5kZXJpbmcgbWVjaGFuaXNtIG9mIFNWR1JlY3RFbGVt
ZW50LgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICog
c3ZnL2N1c3RvbS9wb2ludGVyLWV2ZW50cy1vbi1yb3VuZGVkLXJlY3QtZXhwZWN0ZWQudHh0OiBB
ZGRlZC4KKyAgICAgICAgKiBzdmcvY3VzdG9tL3BvaW50ZXItZXZlbnRzLW9uLXJvdW5kZWQtcmVj
dC54aHRtbDogQWRkZWQuCisgICAgICAgICogc3ZnL2N1c3RvbS9wb2ludGVyLWV2ZW50cy13aXRo
LWxpbmVjYXBzLWFuZC1taXRlcmxpbWl0cy1leHBlY3RlZC50eHQ6IEFkZGVkLgorICAgICAgICAq
IHN2Zy9jdXN0b20vcG9pbnRlci1ldmVudHMtd2l0aC1saW5lY2Fwcy1hbmQtbWl0ZXJsaW1pdHMu
eGh0bWw6IEFkZGVkLgorCiAyMDExLTEwLTA1ICBJbHlhIFRpa2hvbm92c2t5ICA8bG9pc2xvQGNo
cm9taXVtLm9yZz4KIAogICAgICAgICBVbnJldmlld2VkIHJlYmFzZWxpbmUgZm9yIHRlc3QuCmRp
ZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9zdmcvY3VzdG9tL3BvaW50ZXItZXZlbnRzLW9uLXJvdW5k
ZWQtcmVjdC1leHBlY3RlZC50eHQgYi9MYXlvdXRUZXN0cy9zdmcvY3VzdG9tL3BvaW50ZXItZXZl
bnRzLW9uLXJvdW5kZWQtcmVjdC1leHBlY3RlZC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMDAwMDAwMC4uNjE1YmFlMAotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL3N2Zy9j
dXN0b20vcG9pbnRlci1ldmVudHMtb24tcm91bmRlZC1yZWN0LWV4cGVjdGVkLnR4dApAQCAtMCww
ICsxIEBACitQQVNTRUQ6IGZhbGxiYWNrUmVjdCBoYWQgcG9pbnRlcgpkaWZmIC0tZ2l0IGEvTGF5
b3V0VGVzdHMvc3ZnL2N1c3RvbS9wb2ludGVyLWV2ZW50cy1vbi1yb3VuZGVkLXJlY3QueGh0bWwg
Yi9MYXlvdXRUZXN0cy9zdmcvY3VzdG9tL3BvaW50ZXItZXZlbnRzLW9uLXJvdW5kZWQtcmVjdC54
aHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jNjNkMTIyCi0tLSAvZGV2
L251bGwKKysrIGIvTGF5b3V0VGVzdHMvc3ZnL2N1c3RvbS9wb2ludGVyLWV2ZW50cy1vbi1yb3Vu
ZGVkLXJlY3QueGh0bWwKQEAgLTAsMCArMSw2NiBAQAorPGh0bWwgeG1sbnM9J2h0dHA6Ly93d3cu
dzMub3JnLzE5OTkveGh0bWwnPgorPGJvZHkgc3R5bGU9Im1hcmdpbjogMHB4OyBwYWRkaW5nOiAw
cHgiPgorCis8c3ZnIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgc3R5bGU9InBv
c2l0aW9uOmFic29sdXRlOyI+Cis8ZGVmcz4KKworPHN0eWxlIHR5cGU9InRleHQvY3NzIj48IVtD
REFUQVsKK3JlY3Qjcm91bmRlZFJlY3QgeworICAgIGZpbGw6IG5vbmU7CisgICAgc3Ryb2tlOiBn
cmVlbjsKKyAgICBzdHJva2Utd2lkdGg6IDIwcHg7CisgICAgc3Ryb2tlLWxpbmVqb2luOiBiZXZl
bDsKK30KK3JlY3Q6aG92ZXIgeworICAgIHN0cm9rZTogcmVkOworfQorXV0+PC9zdHlsZT4KKzwv
ZGVmcz4KKworPHJlY3QgaWQ9ImZhbGxiYWNrIiB4PSIzMCIgeT0iMzAiIHdpZHRoPSI0MjAiIGhl
aWdodD0iMzIwIiBmaWxsPSJ5ZWxsb3ciIG9uY2xpY2s9InBhc3NlZCgpIi8+Cis8cmVjdCBpZD0i
cm91bmRlZFJlY3QiIHg9IjQwIiB5PSI0MCIgcng9IjMwIiByeT0iMzAiIHdpZHRoPSI0MDAiIGhl
aWdodD0iMzAwIiBwb2ludGVyLWV2ZW50cz0idmlzaWJsZVN0cm9rZSIgb25jbGljaz0iZmFpbGVk
KCkiLz4KKzx0ZXh0IGlkPSJ0ZXh0IiB4PSIzMCIgeT0iMzcwIj48L3RleHQ+CisKKzxzY3JpcHQg
dHlwZT0idGV4dC9lY21hc2NyaXB0Ij4KKyAgICA8IVtDREFUQVsKKwordmFyIGZhbGxiYWNrID0g
ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImZhbGxiYWNrIik7Cit2YXIgcm91bmRlZFJlY3QgPSBk
b2N1bWVudC5nZXRFbGVtZW50QnlJZCgicm91bmRlZFJlY3QiKTsKK3ZhciB0ZXh0ID0gZG9jdW1l
bnQuZ2V0RWxlbWVudEJ5SWQoInRleHQiKTsKKworICAgIGZhbGxiYWNrLmFkZEV2ZW50TGlzdGVu
ZXIoIm1vdXNlZG93biIsIHBhc3NlZCwgZmFsc2UpOworICAgIHJvdW5kZWRSZWN0LmFkZEV2ZW50
TGlzdGVuZXIoIm1vdXNlZG93biIsIGZhaWxlZCwgZmFsc2UpOworCitmdW5jdGlvbiBzdG9wKCkg
eworICAgIGZhbGxiYWNrLnJlbW92ZUV2ZW50TGlzdGVuZXIoIm1vdXNlZG93biIsIGZhaWxlZCwg
ZmFsc2UpOworICAgIHJvdW5kZWRSZWN0LnJlbW92ZUV2ZW50TGlzdGVuZXIoIm1vdXNlZG93biIs
IHBhc3NlZCwgZmFsc2UpOworCisgICAgaWYgKHdpbmRvdy5sYXlvdXRUZXN0Q29udHJvbGxlcikK
KyAgICBsYXlvdXRUZXN0Q29udHJvbGxlci5ub3RpZnlEb25lKCk7Cit9CisKK2Z1bmN0aW9uIGZh
aWxlZCgpIHsKKyAgICB0ZXh0LnRleHRDb250ZW50ID0gJ0ZBSUxFRDogc3Ryb2tlUmVjdCBoYWQg
cG9pbnRlcic7CisgICAgc3RvcCgpOworfQorCitmdW5jdGlvbiBwYXNzZWQoKSB7CisgICB0ZXh0
LnRleHRDb250ZW50ID0gJ1BBU1NFRDogZmFsbGJhY2tSZWN0IGhhZCBwb2ludGVyJzsKKyAgIHN0
b3AoKTsKK30KKworaWYgKHdpbmRvdy5sYXlvdXRUZXN0Q29udHJvbGxlcikgeworICAgbGF5b3V0
VGVzdENvbnRyb2xsZXIud2FpdFVudGlsRG9uZSgpOworICAgbGF5b3V0VGVzdENvbnRyb2xsZXIu
ZHVtcEFzVGV4dCgpOworfQorCitpZiAod2luZG93LmV2ZW50U2VuZGVyKSB7CisgICAgZXZlbnRT
ZW5kZXIubW91c2VNb3ZlVG8oMzEsIDMxKTsKKyAgICBldmVudFNlbmRlci5tb3VzZURvd24oKTsK
K30KK11dPgorPC9zY3JpcHQ+CisKKzwvc3ZnPgorPC9ib2R5PgorPC9odG1sPgpcIE5vIG5ld2xp
bmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3N2Zy9jdXN0b20vcG9p
bnRlci1ldmVudHMtd2l0aC1saW5lY2Fwcy1hbmQtbWl0ZXJsaW1pdHMtZXhwZWN0ZWQudHh0IGIv
TGF5b3V0VGVzdHMvc3ZnL2N1c3RvbS9wb2ludGVyLWV2ZW50cy13aXRoLWxpbmVjYXBzLWFuZC1t
aXRlcmxpbWl0cy1leHBlY3RlZC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw
MC4uNjE1YmFlMAotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL3N2Zy9jdXN0b20vcG9p
bnRlci1ldmVudHMtd2l0aC1saW5lY2Fwcy1hbmQtbWl0ZXJsaW1pdHMtZXhwZWN0ZWQudHh0CkBA
IC0wLDAgKzEgQEAKK1BBU1NFRDogZmFsbGJhY2tSZWN0IGhhZCBwb2ludGVyCmRpZmYgLS1naXQg
YS9MYXlvdXRUZXN0cy9zdmcvY3VzdG9tL3BvaW50ZXItZXZlbnRzLXdpdGgtbGluZWNhcHMtYW5k
LW1pdGVybGltaXRzLnhodG1sIGIvTGF5b3V0VGVzdHMvc3ZnL2N1c3RvbS9wb2ludGVyLWV2ZW50
cy13aXRoLWxpbmVjYXBzLWFuZC1taXRlcmxpbWl0cy54aHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAwMDAwMDAwLi45MjI2YjcwCi0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMv
c3ZnL2N1c3RvbS9wb2ludGVyLWV2ZW50cy13aXRoLWxpbmVjYXBzLWFuZC1taXRlcmxpbWl0cy54
aHRtbApAQCAtMCwwICsxLDY4IEBACis8aHRtbCB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMTk5
OS94aHRtbCc+Cis8Ym9keSBzdHlsZT0ibWFyZ2luOiAwcHg7IHBhZGRpbmc6IDBweCI+CisKKzxz
dmcgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiBzdHlsZT0icG9zaXRpb246YWJz
b2x1dGU7Ij4KKzxkZWZzPgorCis8c3R5bGUgdHlwZT0idGV4dC9jc3MiPjwhW0NEQVRBWworcmVj
dCNzdHJva2VkUmVjdCB7CisgICAgZmlsbDogbm9uZTsKKyAgICBzdHJva2U6IGJsdWU7CisgICAg
c3Ryb2tlLXdpZHRoOiAyMHB4OworICAgIHN0cm9rZS1saW5lY2FwOiBzcXVhcmU7CisgICAgc3Ry
b2tlLW1pdGVybGltaXQ6IDE7Cit9CityZWN0I3N0cm9rZWRSZWN0OmhvdmVyIHsKKyAgICBzdHJv
a2U6IHJlZDsKK30KK11dPjwvc3R5bGU+Cis8L2RlZnM+CisKKzxyZWN0IGlkPSJmYWxsYmFjayIg
eD0iMCIgeT0iMCIgd2lkdGg9IjIxMCIgaGVpZ2h0PSIyMTAiIGZpbGw9ImdyZWVuIiBvbmNsaWNr
PSJwYXNzZWQoKSIvPgorPHJlY3QgaWQ9InN0cm9rZWRSZWN0IiB4PSIxMCIgeT0iMTAiIHdpZHRo
PSIxOTAiIGhlaWdodD0iMTkwIiBwb2ludGVyLWV2ZW50cz0idmlzaWJsZVN0cm9rZSIgb25jbGlj
az0iZmFpbGVkKCkiLz4KKzx0ZXh0IGlkPSJ0ZXh0IiB4PSIwIiB5PSIyMzAiPjwvdGV4dD4KKwor
PHNjcmlwdCB0eXBlPSJ0ZXh0L2VjbWFzY3JpcHQiPgorICAgIDwhW0NEQVRBWworCit2YXIgZmFs
bGJhY2sgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiZmFsbGJhY2siKTsKK3ZhciBzdHJva2Vk
UmVjdCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJzdHJva2VkUmVjdCIpOwordmFyIHRleHQg
PSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgidGV4dCIpOworCitmYWxsYmFjay5hZGRFdmVudExp
c3RlbmVyKCJtb3VzZWRvd24iLCBwYXNzZWQsIGZhbHNlKTsKK3N0cm9rZWRSZWN0LmFkZEV2ZW50
TGlzdGVuZXIoIm1vdXNlZG93biIsIGZhaWxlZCwgZmFsc2UpOworCitmdW5jdGlvbiBzdG9wKCkg
eworICAgIGZhbGxiYWNrLnJlbW92ZUV2ZW50TGlzdGVuZXIoIm1vdXNlZG93biIsIGZhaWxlZCwg
ZmFsc2UpOworICAgIHN0cm9rZWRSZWN0LnJlbW92ZUV2ZW50TGlzdGVuZXIoIm1vdXNlZG93biIs
IHBhc3NlZCwgZmFsc2UpOworCitpZiAod2luZG93LmxheW91dFRlc3RDb250cm9sbGVyKQorICAg
IGxheW91dFRlc3RDb250cm9sbGVyLm5vdGlmeURvbmUoKTsKK30KKworZnVuY3Rpb24gZmFpbGVk
KCkgeworICAgIHRleHQudGV4dENvbnRlbnQgPSAnRkFJTEVEOiBzdHJva2VSZWN0IGhhZCBwb2lu
dGVyJzsKKyAgICBzdG9wKCk7Cit9CisKK2Z1bmN0aW9uIHBhc3NlZCgpIHsKKyAgICB0ZXh0LnRl
eHRDb250ZW50ID0gJ1BBU1NFRDogZmFsbGJhY2tSZWN0IGhhZCBwb2ludGVyJzsKKyAgICBzdG9w
KCk7Cit9CisKK2lmICh3aW5kb3cubGF5b3V0VGVzdENvbnRyb2xsZXIpIHsKKyAgICBsYXlvdXRU
ZXN0Q29udHJvbGxlci53YWl0VW50aWxEb25lKCk7CisgICAgbGF5b3V0VGVzdENvbnRyb2xsZXIu
ZHVtcEFzVGV4dCgpOworfQorCitpZiAod2luZG93LmV2ZW50U2VuZGVyKSB7CisgICAgZXZlbnRT
ZW5kZXIubW91c2VNb3ZlVG8oMSwgMSk7CisgICAgZXZlbnRTZW5kZXIubW91c2VEb3duKCk7Cit9
CisKK11dPgorPC9zY3JpcHQ+Cis8L3N2Zz4KKworPC9ib2R5PgorPC9odG1sPgpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvQ01ha2VMaXN0cy50eHQgYi9Tb3VyY2UvV2ViQ29yZS9DTWFrZUxp
c3RzLnR4dAppbmRleCBlNTQyZjRhLi5kZTM0MWE0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9DTWFrZUxpc3RzLnR4dAorKysgYi9Tb3VyY2UvV2ViQ29yZS9DTWFrZUxpc3RzLnR4dApAQCAt
MTYwNyw2ICsxNjA3LDcgQEAgSUYgKEVOQUJMRV9TVkcpCiAgICAgICAgIHJlbmRlcmluZy9zdmcv
UmVuZGVyU1ZHSW5saW5lVGV4dC5jcHAKICAgICAgICAgcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdN
b2RlbE9iamVjdC5jcHAKICAgICAgICAgcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdQYXRoLmNwcAor
ICAgICAgICByZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1JlY3QuY3BwCiAgICAgICAgIHJlbmRlcmlu
Zy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2UuY3BwCiAgICAgICAgIHJlbmRlcmluZy9zdmcvUmVuZGVy
U1ZHUmVzb3VyY2VDbGlwcGVyLmNwcAogICAgICAgICByZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jl
c291cmNlQ29udGFpbmVyLmNwcApAQCAtMTYyMSw2ICsxNjIyLDcgQEAgSUYgKEVOQUJMRV9TVkcp
CiAgICAgICAgIHJlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VTb2xpZENvbG9yLmNwcAog
ICAgICAgICByZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jvb3QuY3BwCiAgICAgICAgIHJlbmRlcmlu
Zy9zdmcvUmVuZGVyU1ZHU2hhZG93VHJlZVJvb3RDb250YWluZXIuY3BwCisgICAgICAgIHJlbmRl
cmluZy9zdmcvUmVuZGVyU1ZHU2hhcGUuY3BwCiAgICAgICAgIHJlbmRlcmluZy9zdmcvUmVuZGVy
U1ZHVFNwYW4uY3BwCiAgICAgICAgIHJlbmRlcmluZy9zdmcvUmVuZGVyU1ZHVGV4dC5jcHAKICAg
ICAgICAgcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdUZXh0UGF0aC5jcHAKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCA1
OWU4YzYzLi4yNWU5M2ZkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysr
IGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTYxIEBACisyMDExLTEwLTA1
ICBSZW5hdGEgSG9kb3ZhbiAgPHJlbmlAd2Via2l0Lm9yZz4KKworICAgICAgICBBZGQgbmV3IHJl
bmRlcmVyIGZvciBTVkdSZWN0RWxlbWVudC4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTY1NzY5CisKKyAgICAgICAgVGhpcyBwYXRjaCBpbnRyb2R1Y2Vz
IGEgbmV3IGNvbW1vbiBiYXNlIGNsYXNzIGNhbGxlZCBSZW5kZXJTVkdTaGFwZSB3aGljaAorICAg
ICAgICByZXBsYWNlcyB0aGUgUmVuZGVyU1ZHUGF0aC4gVGhpcyBuZXcgYmFzZSBjbGFzcyBoYXMg
dGhlIHNhbWUgcHVycG9zZQorICAgICAgICBhcyB0aGUgcmVwbGFjZWQgY2xhc3MgYW5kIGhhcyBz
cGVjaWFsaXplZCBkZXNjZW5kYW50cyBmb3IgY29tbW9uCisgICAgICAgIHNoYXBlcyAobGlrZSBS
ZWN0YW5nbGVzIGFuZCBDaXJjbGVzKSwgd2hpY2ggYWxsb3dzIGZhc3RlciBwYWludGluZworICAg
ICAgICBvZiB0aGVzZSBzaGFwZXMgd2hlbiBjZXJ0YWluIGNvbmRpdGlvbnMgYXJlIGZ1bGZpbGxl
ZC4gT24gc29tZQorICAgICAgICBiZW5jaG1hcmsgcHJvZ3JhbXMgd2UgaGF2ZSBzZWVuIDUlIHNw
ZWVkdXAuCisKKyAgICAgICAgVGhlIGJpZ2dlc3QgbW90aXZhdGlvbiBvZiB0aGlzIHJlZmFjdG9y
IGlzIHRha2luZyBhZHZhbnRhZ2UKKyAgICAgICAgb2YgZmFzdGVyIHByaW1pdGl2ZSBkcmF3aW5n
IGluIHRoZSBtb3N0IGNvbW1vbiBhbmQgZnJlcXVlbnQKKyAgICAgICAgY2FzZXMuIEhvd2V2ZXIg
aW4gc29tZSByYXJlIGNhc2VzLCBsaWtlIHBhaW50aW5nIHJvdW5kZWQKKyAgICAgICAgcmVjdHMs
IHdlIG5lZWQgdG8gZmFsbGJhY2sgdG8gdGhlIG9yaWdpbmFsIGNvZGUgcGF0aCwgd2hpY2gKKyAg
ICAgICAgaXMgZnVsbHkga2VwdCBpbiB0aGUgUmVuZGVyU1ZHU2hhcGUgYmFzZSBjbGFzcy4gU29t
ZSBvdGhlcgorICAgICAgICBjYXNlcywgbGlrZSBkYXNoZWQgc3Ryb2tlcywgY2FuIGJlIHBhaW50
ZWQgYnV0IG1vdXNlIHBvaW50ZXIKKyAgICAgICAgZXZlbnRzIGNhbm5vdCBiZSBoYW5kbGVkIGJ5
IHRoZSBkZXNjZW5kYW50IGNsYXNzZXMuIEEgZGlmZmVyZW50CisgICAgICAgIGZhbGxiYWNrIG1l
Y2hhbmlzbSBpcyB1c2VkIGluIHN1Y2ggY2FzZXMgd2hpY2ggcmVkaXJlY3RzCisgICAgICAgIG9u
bHkgdGhlIHBvaW50ZXIgZXZlbnQgaGFuZGxpbmcgdG8gdGhlIGJhc2UgY2xhc3MuCisKKyAgICAg
ICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVGVzdHM6IHN2Zy9jdXN0
b20vcG9pbnRlci1ldmVudHMtb24tcm91bmRlZC1yZWN0LnhodG1sCisgICAgICAgICAgICAgICBz
dmcvY3VzdG9tL3BvaW50ZXItZXZlbnRzLXdpdGgtbGluZWNhcHMtYW5kLW1pdGVybGltaXRzLnho
dG1sCisKKyAgICAgICAgKiBDTWFrZUxpc3RzLnR4dDoKKyAgICAgICAgKiBHTlVtYWtlZmlsZS5s
aXN0LmFtOgorICAgICAgICAqIFdlYkNvcmUuZ3lwaToKKyAgICAgICAgKiBXZWJDb3JlLnBybzoK
KyAgICAgICAgKiBXZWJDb3JlLnZjcHJvai9XZWJDb3JlLnZjcHJvajoKKyAgICAgICAgKiBwbGF0
Zm9ybS9ncmFwaGljcy9GbG9hdFJlY3QuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RmxvYXRSZWN0
Ojpjb250YWlucyk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvRmxvYXRSZWN0Lmg6Cisg
ICAgICAgIChXZWJDb3JlOjpGbG9hdFJlY3Q6OmNvbnRhaW5zKToKKyAgICAgICAgKiByZW5kZXJp
bmcvUmVuZGVyT2JqZWN0Lmg6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJPYmplY3Q6OmlzU1ZH
UmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJPYmplY3Q6OmlzU1ZHU2hhcGUpOgorICAg
ICAgICAqIHJlbmRlcmluZy9SZW5kZXJUcmVlQXNUZXh0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OndyaXRlKToKKyAgICAgICAgKiByZW5kZXJpbmcvc3ZnL1JlbmRlclNWR0FsbEluT25lLmNwcDoK
KyAgICAgICAgKiByZW5kZXJpbmcvc3ZnL1JlbmRlclNWR01vZGVsT2JqZWN0LmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OmlzR3JhcGhpY3NFbGVtZW50KToKKyAgICAgICAgKiByZW5kZXJpbmcvc3Zn
L1JlbmRlclNWR1BhdGguY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU1ZHUGF0aDo6UmVu
ZGVyU1ZHUGF0aCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJTVkdQYXRoOjppbmZsYXRlV2l0
aE1hcmtlckJvdW5kcyk6IFVuaXRlIHRoZSBtYXJrZXJCb3VuZHMgd2l0aCBzdHJva2VCb3VuZGlu
Z0JveC4KKyAgICAgICAgKiByZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1BhdGguaDoKKyAgICAgICAg
KiByZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1JlY3QuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNv
cmU6OlJlbmRlclNWR1JlY3Q6OlJlbmRlclNWR1JlY3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVu
ZGVyU1ZHUmVjdDo6flJlbmRlclNWR1JlY3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU1ZH
UmVjdDo6Y3JlYXRlU2hhcGUpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU1ZHUmVjdDo6b2Jq
ZWN0Qm91bmRpbmdCb3gpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU1ZHUmVjdDo6c3Ryb2tl
Qm91bmRpbmdCb3gpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU1ZHUmVjdDo6ZmlsbFNoYXBl
KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclNWR1JlY3Q6OnN0cm9rZVNoYXBlKToKKyAgICAg
ICAgKFdlYkNvcmU6OlJlbmRlclNWR1JlY3Q6OnNoYXBlRGVwZW5kZW50U3Ryb2tlQ29udGFpbnMp
OgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU1ZHUmVjdDo6c2hhcGVEZXBlbmRlbnRGaWxsQ29u
dGFpbnMpOgorICAgICAgICAqIHJlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVjdC5oOiBBZGRlZC4K
KyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclNWR1JlY3Q6OmlzU1ZHUmVjdCk6CisgICAgICAgIChX
ZWJDb3JlOjpSZW5kZXJTVkdSZWN0OjpyZW5kZXJOYW1lKToKKyAgICAgICAgKFdlYkNvcmU6OlJl
bmRlclNWR1JlY3Q6OmlzRW1wdHkpOgorICAgICAgICAqIHJlbmRlcmluZy9zdmcvUmVuZGVyU1ZH
UmVzb3VyY2UuaDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclNWR1Jlc291cmNlOjpwb3N0QXBw
bHlSZXNvdXJjZSk6IEEgbmV3IHNoYXBlIGFyZ3VtZW50IHdhcyBhZGRlZCB0byBhbGxvdyBzaGFw
ZSBzcGVjaWZpYyBmYXN0ZXIgcGFpbnRpbmcuCisgICAgICAgICogcmVuZGVyaW5nL3N2Zy9SZW5k
ZXJTVkdSZXNvdXJjZUNsaXBwZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU1ZHUmVz
b3VyY2VDbGlwcGVyOjpkcmF3Q29udGVudEludG9NYXNrSW1hZ2UpOgorICAgICAgICAoV2ViQ29y
ZTo6UmVuZGVyU1ZHUmVzb3VyY2VDbGlwcGVyOjpjYWxjdWxhdGVDbGlwQ29udGVudFJlcGFpbnRS
ZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclNWR1Jlc291cmNlQ2xpcHBlcjo6aGl0VGVz
dENsaXBDb250ZW50KToKKyAgICAgICAgKiByZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291cmNl
Q29udGFpbmVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclNWR1Jlc291cmNlQ29udGFp
bmVyOjp0cmFuc2Zvcm1Pbk5vblNjYWxpbmdTdHJva2UpOgorICAgICAgICAqIHJlbmRlcmluZy9z
dmcvUmVuZGVyU1ZHUmVzb3VyY2VGaWx0ZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVy
U1ZHUmVzb3VyY2VGaWx0ZXI6OnBvc3RBcHBseVJlc291cmNlKToKKyAgICAgICAgKiByZW5kZXJp
bmcvc3ZnL1JlbmRlclNWR1Jlc291cmNlRmlsdGVyLmg6CisgICAgICAgICogcmVuZGVyaW5nL3N2
Zy9SZW5kZXJTVkdSZXNvdXJjZUdyYWRpZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRl
clNWR1Jlc291cmNlR3JhZGllbnQ6OmFwcGx5UmVzb3VyY2UpOgorICAgICAgICAqIHJlbmRlcmlu
Zy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VHcmFkaWVudC5oOgorICAgICAgICAqIHJlbmRlcmluZy9z
dmcvUmVuZGVyU1ZHUmVzb3VyY2VQYXR0ZXJuLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRl
clNWR1Jlc291cmNlUGF0dGVybjo6cG9zdEFwcGx5UmVzb3VyY2UpOgorICAgICAgICAqIHJlbmRl
cmluZy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VQYXR0ZXJuLmg6CisgICAgICAgICogcmVuZGVyaW5n
L3N2Zy9SZW5kZXJTVkdSZXNvdXJjZVNvbGlkQ29sb3IuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
UmVuZGVyU1ZHUmVzb3VyY2VTb2xpZENvbG9yOjpwb3N0QXBwbHlSZXNvdXJjZSk6CisgICAgICAg
ICogcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJjZVNvbGlkQ29sb3IuaDoKKyAgICAgICAg
KiByZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1NoYXBlLmNwcDogQ29waWVkIGZyb20gU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdQYXRoLmNwcC4KKyAgICAgICAgKFdlYkNvcmU6
OlJlbmRlclNWR1NoYXBlOjpSZW5kZXJTVkdTaGFwZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5k
ZXJTVkdTaGFwZTo6flJlbmRlclNWR1NoYXBlKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclNW
R1NoYXBlOjpjcmVhdGVTaGFwZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJTVkdTaGFwZTo6
aXNFbXB0eSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJTVkdTaGFwZTo6ZmlsbFNoYXBlKToK
KyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclNWR1NoYXBlOjpvYmplY3RCb3VuZGluZ0JveCk6Cisg
ICAgICAgIChXZWJDb3JlOjpSZW5kZXJTVkdTaGFwZTo6c3Ryb2tlQm91bmRpbmdCb3gpOgorICAg
ICAgICAoV2ViQ29yZTo6UmVuZGVyU1ZHU2hhcGU6OnN0cm9rZVNoYXBlKToKKyAgICAgICAgKFdl
YkNvcmU6OlJlbmRlclNWR1NoYXBlOjpzaGFwZURlcGVuZGVudFN0cm9rZUNvbnRhaW5zKToKKyAg
ICAgICAgVGhlIHB1cnBvc2Ugb2YgdGhpcyB2aXJ0dWFsIGZ1bmN0aW9uIGFsbG93cyBkZWNlbmRh
bnRzIHRvIHVzZSB0aGVpciBvd24gZmFzdCBjaGVja3MuCisgICAgICAgIChXZWJDb3JlOjpSZW5k
ZXJTVkdTaGFwZTo6c2hhcGVEZXBlbmRlbnRGaWxsQ29udGFpbnMpOgorICAgICAgICBUaGUgcHVy
cG9zZSBvZiB0aGlzIHZpcnR1YWwgZnVuY3Rpb24gYWxsb3dzIGRlY2VuZGFudHMgdG8gdXNlIHRo
ZWlyIG93biBmYXN0IGNoZWNrcy4KKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclNWR1NoYXBlOjpm
aWxsQ29udGFpbnMpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU1ZHU2hhcGU6OnN0cm9rZUNv
bnRhaW5zKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclNWR1NoYXBlOjpsYXlvdXQpOgorICAg
ICAgICAoV2ViQ29yZTo6UmVuZGVyU1ZHU2hhcGU6OnNob3VsZFN0cm9rZVplcm9MZW5ndGhTdWJw
YXRoKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclNWR1NoYXBlOjp6ZXJvTGVuZ3RoU3VicGF0
aFJlY3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU1ZHU2hhcGU6OnNldHVwU3F1YXJlQ2Fw
UGF0aCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJTVkdTaGFwZTo6c2V0dXBOb25TY2FsaW5n
U3Ryb2tlUGF0aCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJTVkdTaGFwZTo6ZmlsbEFuZFN0
cm9rZVBhdGgpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU1ZHU2hhcGU6OnBhaW50KToKKyAg
ICAgICAgKFdlYkNvcmU6OlJlbmRlclNWR1NoYXBlOjphZGRGb2N1c1JpbmdSZWN0cyk6CisgICAg
ICAgIChXZWJDb3JlOjpSZW5kZXJTVkdTaGFwZTo6bm9kZUF0RmxvYXRQb2ludCk6CisgICAgICAg
IChXZWJDb3JlOjpSZW5kZXJTVkdTaGFwZTo6Y2FsY3VsYXRlTWFya2VyQm91bmRzSWZOZWVkZWQp
OgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU1ZHU2hhcGU6OnVwZGF0ZUNhY2hlZEJvdW5kYXJp
ZXMpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU1ZHU2hhcGU6OnN0cm9rZVdpZHRoKToKKyAg
ICAgICAgKiByZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1NoYXBlLmg6IENvcGllZCBmcm9tIFNvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUGF0aC5oLgorICAgICAgICAoV2ViQ29y
ZTo6Qm91bmRpbmdSZWN0U3Ryb2tlU3R5bGVBcHBsaWVyOjpCb3VuZGluZ1JlY3RTdHJva2VTdHls
ZUFwcGxpZXIpOgorICAgICAgICAoV2ViQ29yZTo6Qm91bmRpbmdSZWN0U3Ryb2tlU3R5bGVBcHBs
aWVyOjpzdHJva2VTdHlsZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJTVkdTaGFwZTo6c2V0
TmVlZHNTaGFwZVVwZGF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJTVkdTaGFwZTo6c2V0
TmVlZHNCb3VuZGFyaWVzVXBkYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclNWR1NoYXBl
OjpzZXROZWVkc1RyYW5zZm9ybVVwZGF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJTVkdT
aGFwZTo6aXNQYWludGluZ0ZhbGxiYWNrKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclNWR1No
YXBlOjpwYXRoKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclNWR1NoYXBlOjpzZXRJc1BhaW50
aW5nRmFsbGJhY2spOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU1ZHU2hhcGU6OnNldFN0cm9r
ZUFuZE1hcmtlckJvdW5kaW5nQm94KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclNWR1NoYXBl
OjpoYXNQYXRoKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclNWR1NoYXBlOjpyZXBhaW50UmVj
dEluTG9jYWxDb29yZGluYXRlcyk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJTVkdTaGFwZTo6
bG9jYWxUb1BhcmVudFRyYW5zZm9ybSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJTVkdTaGFw
ZTo6bG9jYWxUcmFuc2Zvcm0pOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU1ZHU2hhcGU6Omlz
U1ZHU2hhcGUpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU1ZHU2hhcGU6OnJlbmRlck5hbWUp
OgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU1ZHU2hhcGU6OmlzUm91bmRlZFJlY3QpOgorICAg
ICAgICAoV2ViQ29yZTo6UmVuZGVyU1ZHU2hhcGU6OmluZmxhdGVXaXRoTWFya2VyQm91bmRzKToK
KyAgICAgICAgKFdlYkNvcmU6OnRvUmVuZGVyU1ZHU2hhcGUpOgorICAgICAgICAqIHJlbmRlcmlu
Zy9zdmcvU1ZHSW5saW5lVGV4dEJveC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTVkdJbmxpbmVU
ZXh0Qm94OjpyZWxlYXNlUGFpbnRpbmdSZXNvdXJjZSk6CisgICAgICAgICogcmVuZGVyaW5nL3N2
Zy9TVkdSZW5kZXJTdXBwb3J0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR1JlbmRlclN1cHBv
cnQ6OmZpbmlzaFJlbmRlclNWR0NvbnRlbnQpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHUmVuZGVy
U3VwcG9ydDo6bGF5b3V0Q2hpbGRyZW4pOgorICAgICAgICAqIHJlbmRlcmluZy9zdmcvU1ZHUmVu
ZGVyVHJlZUFzVGV4dC5jcHA6CisgICAgICAgIChXZWJDb3JlOjp3cml0ZVN0eWxlKToKKyAgICAg
ICAgKFdlYkNvcmU6Om9wZXJhdG9yPDwpOgorICAgICAgICAoV2ViQ29yZTo6d3JpdGUpOgorICAg
ICAgICAqIHJlbmRlcmluZy9zdmcvU1ZHUmVuZGVyVHJlZUFzVGV4dC5oOgorICAgICAgICAqIHJl
bmRlcmluZy9zdmcvU1ZHVGV4dFJ1blJlbmRlcmluZ0NvbnRleHQuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6U1ZHVGV4dFJ1blJlbmRlcmluZ0NvbnRleHQ6OmRyYXdTVkdHbHlwaHMpOgorICAgICAg
ICAqIHN2Zy9TVkdDaXJjbGVFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR0NpcmNs
ZUVsZW1lbnQ6OnN2Z0F0dHJpYnV0ZUNoYW5nZWQpOgorICAgICAgICAqIHN2Zy9TVkdFbGxpcHNl
RWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTVkdFbGxpcHNlRWxlbWVudDo6c3ZnQXR0
cmlidXRlQ2hhbmdlZCk6CisgICAgICAgICogc3ZnL1NWR0xpbmVFbGVtZW50LmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OlNWR0xpbmVFbGVtZW50OjpzdmdBdHRyaWJ1dGVDaGFuZ2VkKToKKyAgICAg
ICAgKiBzdmcvU1ZHUGF0aEVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U1ZHUGF0aEVs
ZW1lbnQ6OnN2Z0F0dHJpYnV0ZUNoYW5nZWQpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHUGF0aEVs
ZW1lbnQ6OnBhdGhTZWdMaXN0Q2hhbmdlZCk6CisgICAgICAgIChXZWJDb3JlOjpTVkdQYXRoRWxl
bWVudDo6Y3JlYXRlUmVuZGVyZXIpOgorICAgICAgICAqIHN2Zy9TVkdQYXRoRWxlbWVudC5oOgor
ICAgICAgICAqIHN2Zy9TVkdQb2x5RWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTVkdQ
b2x5RWxlbWVudDo6c3ZnQXR0cmlidXRlQ2hhbmdlZCk6CisgICAgICAgICogc3ZnL1NWR1JlY3RF
bGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR1JlY3RFbGVtZW50OjpzdmdBdHRyaWJ1
dGVDaGFuZ2VkKToKKyAgICAgICAgKFdlYkNvcmU6OlNWR1JlY3RFbGVtZW50OjpjcmVhdGVSZW5k
ZXJlcik6CisgICAgICAgICogc3ZnL1NWR1JlY3RFbGVtZW50Lmg6CisKIDIwMTEtMTAtMDUgIEls
eWEgVGlraG9ub3Zza3kgIDxsb2lzbG9AY2hyb21pdW0ub3JnPgogCiAgICAgICAgIFVucmV2aWV3
ZWQgYnVpbGQgZml4IGZvciB3aW5kb3dzIGJvdHMgYWZ0ZXIgcjk2Njc5LgpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvR05VbWFrZWZpbGUubGlzdC5hbSBiL1NvdXJjZS9XZWJDb3JlL0dOVW1h
a2VmaWxlLmxpc3QuYW0KaW5kZXggNTcyYWZmZS4uNjJkZDVlNCAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvR05VbWFrZWZpbGUubGlzdC5hbQorKysgYi9Tb3VyY2UvV2ViQ29yZS9HTlVtYWtl
ZmlsZS5saXN0LmFtCkBAIC0zMjI1LDYgKzMyMjUsOCBAQCB3ZWJjb3JlX3NvdXJjZXMgKz0gXAog
CVNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHTW9kZWxPYmplY3QuaCBcCiAJ
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdQYXRoLmNwcCBcCiAJU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdQYXRoLmggXAorCVNvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVjdC5jcHAgXAorCVNvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9zdmcvUmVuZGVyU1ZHUmVjdC5oIFwKIAlTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3Zn
L1JlbmRlclNWR1Jlc291cmNlQ2xpcHBlci5jcHAgXAogCVNvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VDbGlwcGVyLmggXAogCVNvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VDb250YWluZXIuY3BwIFwKQEAgLTMyNTMsNiArMzI1
NSw4IEBAIHdlYmNvcmVfc291cmNlcyArPSBcCiAJU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2
Zy9SZW5kZXJTVkdSb290LmggXAogCVNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVy
U1ZHU2hhZG93VHJlZVJvb3RDb250YWluZXIuY3BwIFwKIAlTb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvc3ZnL1JlbmRlclNWR1NoYWRvd1RyZWVSb290Q29udGFpbmVyLmggXAorCVNvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHU2hhcGUuY3BwIFwKKwlTb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1NoYXBlLmggXAogCVNvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9zdmcvUmVuZGVyU1ZHVFNwYW4uY3BwIFwKIAlTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3Zn
L1JlbmRlclNWR1RTcGFuLmggXAogCVNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVy
U1ZHVGV4dC5jcHAgXApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBpIGIv
U291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBpCmluZGV4IGU1ZjkxZTQuLmUwM2FmZWYgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwaQorKysgYi9Tb3VyY2UvV2ViQ29yZS9X
ZWJDb3JlLmd5cGkKQEAgLTU3NTQsNiArNTc1NCw4IEBACiAgICAgICAgICAgICAncmVuZGVyaW5n
L3N2Zy9SZW5kZXJTVkdNb2RlbE9iamVjdC5oJywKICAgICAgICAgICAgICdyZW5kZXJpbmcvc3Zn
L1JlbmRlclNWR1BhdGguY3BwJywKICAgICAgICAgICAgICdyZW5kZXJpbmcvc3ZnL1JlbmRlclNW
R1BhdGguaCcsCisgICAgICAgICAgICAncmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZWN0LmNwcCcs
CisgICAgICAgICAgICAncmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZWN0LmgnLAogICAgICAgICAg
ICAgJ3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2UuY3BwJywKICAgICAgICAgICAgICdy
ZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291cmNlLmgnLAogICAgICAgICAgICAgJ3JlbmRlcmlu
Zy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VDbGlwcGVyLmNwcCcsCkBAIC01NzgyLDYgKzU3ODQsOCBA
QAogICAgICAgICAgICAgJ3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUm9vdC5oJywKICAgICAgICAg
ICAgICdyZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1NoYWRvd1RyZWVSb290Q29udGFpbmVyLmNwcCcs
CiAgICAgICAgICAgICAncmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdTaGFkb3dUcmVlUm9vdENvbnRh
aW5lci5oJywKKyAgICAgICAgICAgICdyZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1NoYXBlLmNwcCcs
CisgICAgICAgICAgICAncmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdTaGFwZS5oJywKICAgICAgICAg
ICAgICdyZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1RTcGFuLmNwcCcsCiAgICAgICAgICAgICAncmVu
ZGVyaW5nL3N2Zy9SZW5kZXJTVkdUU3Bhbi5oJywKICAgICAgICAgICAgICdyZW5kZXJpbmcvc3Zn
L1JlbmRlclNWR1RleHQuY3BwJywKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUu
cHJvIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5wcm8KaW5kZXggNjgxYmRmMi4uMDk2Y2RlMSAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5wcm8KKysrIGIvU291cmNlL1dlYkNv
cmUvV2ViQ29yZS5wcm8KQEAgLTIzMDAsNiArMjMwMCw3IEBAIEhFQURFUlMgKz0gXAogICAgIHJl
bmRlcmluZy9zdmcvUmVuZGVyU1ZHSW5saW5lVGV4dC5oIFwKICAgICByZW5kZXJpbmcvc3ZnL1Jl
bmRlclNWR01vZGVsT2JqZWN0LmggXAogICAgIHJlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUGF0aC5o
IFwKKyAgICByZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1JlY3QuaCBcCiAgICAgcmVuZGVyaW5nL3N2
Zy9SZW5kZXJTVkdSZXNvdXJjZS5oIFwKICAgICByZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291
cmNlQ2xpcHBlci5oIFwKICAgICByZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291cmNlQ29udGFp
bmVyLmggXApAQCAtMjMxNCw2ICsyMzE1LDcgQEAgSEVBREVSUyArPSBcCiAgICAgcmVuZGVyaW5n
L3N2Zy9SZW5kZXJTVkdSZXNvdXJjZVNvbGlkQ29sb3IuaCBcCiAgICAgcmVuZGVyaW5nL3N2Zy9S
ZW5kZXJTVkdSb290LmggXAogICAgIHJlbmRlcmluZy9zdmcvUmVuZGVyU1ZHU2hhZG93VHJlZVJv
b3RDb250YWluZXIuaCBcCisgICAgcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdTaGFwZS5oIFwKICAg
ICByZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1RTcGFuLmggXAogICAgIHJlbmRlcmluZy9zdmcvUmVu
ZGVyU1ZHVGV4dC5oIFwKICAgICByZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1RleHRQYXRoLmggXApA
QCAtMzMzOSw2ICszMzQxLDggQEAgY29udGFpbnMoREVGSU5FUywgRU5BQkxFX1NWRz0xKSB7CiAg
ICAgICAgIHJlbmRlcmluZy9zdHlsZS9TVkdSZW5kZXJTdHlsZURlZnMuY3BwIFwKICAgICAgICAg
cmVuZGVyaW5nL1BvaW50ZXJFdmVudHNIaXRSdWxlcy5jcHAgXAogICAgICAgICByZW5kZXJpbmcv
c3ZnL1JlbmRlclNWR1BhdGguY3BwIFwKKyAgICAgICAgcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdS
ZWN0LmNwcCBcCisgICAgICAgIHJlbmRlcmluZy9zdmcvUmVuZGVyU1ZHU2hhcGUuY3BwIFwKICAg
ICAgICAgc3ZnL2FuaW1hdGlvbi9TTUlMVGltZS5jcHAgXAogICAgICAgICBzdmcvYW5pbWF0aW9u
L1NNSUxUaW1lQ29udGFpbmVyLmNwcCBcCiAgICAgICAgIHN2Zy9hbmltYXRpb24vU1ZHU01JTEVs
ZW1lbnQuY3BwIFwKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUudmNwcm9qL1dl
YkNvcmUudmNwcm9qIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS52Y3Byb2ovV2ViQ29yZS52Y3By
b2oKaW5kZXggNDY1YzIzZS4uYTFhMzYzZSAxMDA3NTUKLS0tIGEvU291cmNlL1dlYkNvcmUvV2Vi
Q29yZS52Y3Byb2ovV2ViQ29yZS52Y3Byb2oKKysrIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS52
Y3Byb2ovV2ViQ29yZS52Y3Byb2oKQEAgLTQxODM5LDYgKzQxODM5LDExOCBAQAogCQkJCQk+CiAJ
CQkJPC9GaWxlPgogCQkJCTxGaWxlCisJCQkJCVJlbGF0aXZlUGF0aD0iLi5ccmVuZGVyaW5nXHN2
Z1xSZW5kZXJTVkdSZWN0LmNwcCIKKwkJCQkJPgorCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24KKwkJ
CQkJCU5hbWU9IkRlYnVnfFdpbjMyIgorCQkJCQkJRXhjbHVkZWRGcm9tQnVpbGQ9InRydWUiCisJ
CQkJCQk+CisJCQkJCQk8VG9vbAorCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiCisJCQkJ
CQkvPgorCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPgorCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24K
KwkJCQkJCU5hbWU9IlJlbGVhc2V8V2luMzIiCisJCQkJCQlFeGNsdWRlZEZyb21CdWlsZD0idHJ1
ZSIKKwkJCQkJCT4KKwkJCQkJCTxUb29sCisJCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIK
KwkJCQkJCS8+CisJCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+CisJCQkJCTxGaWxlQ29uZmlndXJh
dGlvbgorCQkJCQkJTmFtZT0iRGVidWdfQ2Fpcm9fQ0ZMaXRlfFdpbjMyIgorCQkJCQkJRXhjbHVk
ZWRGcm9tQnVpbGQ9InRydWUiCisJCQkJCQk+CisJCQkJCQk8VG9vbAorCQkJCQkJCU5hbWU9IlZD
Q0xDb21waWxlclRvb2wiCisJCQkJCQkvPgorCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPgorCQkJ
CQk8RmlsZUNvbmZpZ3VyYXRpb24KKwkJCQkJCU5hbWU9IlJlbGVhc2VfQ2Fpcm9fQ0ZMaXRlfFdp
bjMyIgorCQkJCQkJRXhjbHVkZWRGcm9tQnVpbGQ9InRydWUiCisJCQkJCQk+CisJCQkJCQk8VG9v
bAorCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiCisJCQkJCQkvPgorCQkJCQk8L0ZpbGVD
b25maWd1cmF0aW9uPgorCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24KKwkJCQkJCU5hbWU9IkRlYnVn
X0FsbHxXaW4zMiIKKwkJCQkJCUV4Y2x1ZGVkRnJvbUJ1aWxkPSJ0cnVlIgorCQkJCQkJPgorCQkJ
CQkJPFRvb2wKKwkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIgorCQkJCQkJLz4KKwkJCQkJ
PC9GaWxlQ29uZmlndXJhdGlvbj4KKwkJCQkJPEZpbGVDb25maWd1cmF0aW9uCisJCQkJCQlOYW1l
PSJQcm9kdWN0aW9ufFdpbjMyIgorCQkJCQkJRXhjbHVkZWRGcm9tQnVpbGQ9InRydWUiCisJCQkJ
CQk+CisJCQkJCQk8VG9vbAorCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiCisJCQkJCQkv
PgorCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPgorCQkJCTwvRmlsZT4KKwkJCQk8RmlsZQorCQkJ
CQlSZWxhdGl2ZVBhdGg9Ii4uXHJlbmRlcmluZ1xzdmdcUmVuZGVyU1ZHUmVjdC5oIgorCQkJCQk+
CisJCQkJPC9GaWxlPgorCQkJCTxGaWxlCisJCQkJCVJlbGF0aXZlUGF0aD0iLi5ccmVuZGVyaW5n
XHN2Z1xSZW5kZXJTVkdTaGFwZS5jcHAiCisJCQkJCT4KKwkJCQkJPEZpbGVDb25maWd1cmF0aW9u
CisJCQkJCQlOYW1lPSJEZWJ1Z3xXaW4zMiIKKwkJCQkJCUV4Y2x1ZGVkRnJvbUJ1aWxkPSJ0cnVl
IgorCQkJCQkJPgorCQkJCQkJPFRvb2wKKwkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIgor
CQkJCQkJLz4KKwkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4KKwkJCQkJPEZpbGVDb25maWd1cmF0
aW9uCisJCQkJCQlOYW1lPSJSZWxlYXNlfFdpbjMyIgorCQkJCQkJRXhjbHVkZWRGcm9tQnVpbGQ9
InRydWUiCisJCQkJCQk+CisJCQkJCQk8VG9vbAorCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRv
b2wiCisJCQkJCQkvPgorCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPgorCQkJCQk8RmlsZUNvbmZp
Z3VyYXRpb24KKwkJCQkJCU5hbWU9IkRlYnVnX0NhaXJvX0NGTGl0ZXxXaW4zMiIKKwkJCQkJCUV4
Y2x1ZGVkRnJvbUJ1aWxkPSJ0cnVlIgorCQkJCQkJPgorCQkJCQkJPFRvb2wKKwkJCQkJCQlOYW1l
PSJWQ0NMQ29tcGlsZXJUb29sIgorCQkJCQkJLz4KKwkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4K
KwkJCQkJPEZpbGVDb25maWd1cmF0aW9uCisJCQkJCQlOYW1lPSJSZWxlYXNlX0NhaXJvX0NGTGl0
ZXxXaW4zMiIKKwkJCQkJCUV4Y2x1ZGVkRnJvbUJ1aWxkPSJ0cnVlIgorCQkJCQkJPgorCQkJCQkJ
PFRvb2wKKwkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIgorCQkJCQkJLz4KKwkJCQkJPC9G
aWxlQ29uZmlndXJhdGlvbj4KKwkJCQkJPEZpbGVDb25maWd1cmF0aW9uCisJCQkJCQlOYW1lPSJE
ZWJ1Z19BbGx8V2luMzIiCisJCQkJCQlFeGNsdWRlZEZyb21CdWlsZD0idHJ1ZSIKKwkJCQkJCT4K
KwkJCQkJCTxUb29sCisJCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIKKwkJCQkJCS8+CisJ
CQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+CisJCQkJCTxGaWxlQ29uZmlndXJhdGlvbgorCQkJCQkJ
TmFtZT0iUHJvZHVjdGlvbnxXaW4zMiIKKwkJCQkJCUV4Y2x1ZGVkRnJvbUJ1aWxkPSJ0cnVlIgor
CQkJCQkJPgorCQkJCQkJPFRvb2wKKwkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIgorCQkJ
CQkJLz4KKwkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4KKwkJCQk8L0ZpbGU+CisJCQkJPEZpbGUK
KwkJCQkJUmVsYXRpdmVQYXRoPSIuLlxyZW5kZXJpbmdcc3ZnXFJlbmRlclNWR1NoYXBlLmgiCisJ
CQkJCT4KKwkJCQk8L0ZpbGU+CisJCQkJPEZpbGUKIAkJCQkJUmVsYXRpdmVQYXRoPSIuLlxyZW5k
ZXJpbmdcc3ZnXFJlbmRlclNWR1RleHQuY3BwIgogCQkJCQk+CiAJCQkJCTxGaWxlQ29uZmlndXJh
dGlvbgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRmxvYXRS
ZWN0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0Zsb2F0UmVjdC5jcHAK
aW5kZXggYjg0YTg5Mi4uNmQ0YTIyMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvRmxvYXRSZWN0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9GbG9hdFJlY3QuY3BwCkBAIC02OCw2ICs2OCwxMyBAQCBib29sIEZsb2F0UmVjdDo6
Y29udGFpbnMoY29uc3QgRmxvYXRSZWN0JiBvdGhlcikgY29uc3QKICAgICAgICAgJiYgeSgpIDw9
IG90aGVyLnkoKSAmJiBtYXhZKCkgPj0gb3RoZXIubWF4WSgpOwogfQogCitib29sIEZsb2F0UmVj
dDo6Y29udGFpbnMoY29uc3QgRmxvYXRQb2ludCYgcG9pbnQsIENvbnRhaW5zTW9kZSBjb250YWlu
c01vZGUpIGNvbnN0Cit7CisgICAgaWYgKGNvbnRhaW5zTW9kZSA9PSBJbnNpZGVPck9uU3Ryb2tl
KQorICAgICAgICByZXR1cm4gY29udGFpbnMocG9pbnQueCgpLCBwb2ludC55KCkpOworICAgIHJl
dHVybiB4KCkgPCBwb2ludC54KCkgJiYgbWF4WCgpID4gcG9pbnQueCgpICYmIHkoKSA8IHBvaW50
LnkoKSAmJiBtYXhZKCkgPiB5KCk7Cit9CisKIHZvaWQgRmxvYXRSZWN0OjppbnRlcnNlY3QoY29u
c3QgRmxvYXRSZWN0JiBvdGhlcikKIHsKICAgICBmbG9hdCBsID0gbWF4KHgoKSwgb3RoZXIueCgp
KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0Zsb2F0UmVj
dC5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRmxvYXRSZWN0LmgKaW5kZXgg
NDI0MTcxNi4uN2RlMzQ2ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvRmxvYXRSZWN0LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
RmxvYXRSZWN0LmgKQEAgLTcwLDYgKzcwLDExIEBAIGNsYXNzIEludFBvaW50OwogCiBjbGFzcyBG
bG9hdFJlY3QgewogcHVibGljOgorICAgIGVudW0gQ29udGFpbnNNb2RlIHsKKyAgICAgICAgSW5z
aWRlT3JPblN0cm9rZSwKKyAgICAgICAgSW5zaWRlQnV0Tm90T25TdHJva2UKKyAgICB9OworCiAg
ICAgRmxvYXRSZWN0KCkgeyB9CiAgICAgRmxvYXRSZWN0KGNvbnN0IEZsb2F0UG9pbnQmIGxvY2F0
aW9uLCBjb25zdCBGbG9hdFNpemUmIHNpemUpCiAgICAgICAgIDogbV9sb2NhdGlvbihsb2NhdGlv
biksIG1fc2l6ZShzaXplKSB7IH0KQEAgLTE0Miw2ICsxNDcsNyBAQCBwdWJsaWM6CiAKICAgICBi
b29sIGludGVyc2VjdHMoY29uc3QgRmxvYXRSZWN0JikgY29uc3Q7CiAgICAgYm9vbCBjb250YWlu
cyhjb25zdCBGbG9hdFJlY3QmKSBjb25zdDsKKyAgICBib29sIGNvbnRhaW5zKGNvbnN0IEZsb2F0
UG9pbnQmLCBDb250YWluc01vZGUgPSBJbnNpZGVPck9uU3Ryb2tlKSBjb25zdDsKIAogICAgIHZv
aWQgaW50ZXJzZWN0KGNvbnN0IEZsb2F0UmVjdCYpOwogICAgIHZvaWQgdW5pdGUoY29uc3QgRmxv
YXRSZWN0Jik7CkBAIC0xNTEsNyArMTU3LDYgQEAgcHVibGljOgogICAgIC8vIGlzIHJlYWxseSBj
aGVja2luZyBmb3IgY29udGFpbm1lbnQgb2YgMXgxIHJlY3QsIGJ1dCB0aGF0IGRvZXNuJ3QgbWFr
ZSBzZW5zZSB3aXRoIGZsb2F0cy4KICAgICBib29sIGNvbnRhaW5zKGZsb2F0IHB4LCBmbG9hdCBw
eSkgY29uc3QKICAgICAgICAgeyByZXR1cm4gcHggPj0geCgpICYmIHB4IDw9IG1heFgoKSAmJiBw
eSA+PSB5KCkgJiYgcHkgPD0gbWF4WSgpOyB9Ci0gICAgYm9vbCBjb250YWlucyhjb25zdCBGbG9h
dFBvaW50JiBwb2ludCkgY29uc3QgeyByZXR1cm4gY29udGFpbnMocG9pbnQueCgpLCBwb2ludC55
KCkpOyB9CiAKICAgICB2b2lkIGluZmxhdGVYKGZsb2F0IGR4KSB7CiAgICAgICAgIG1fbG9jYXRp
b24uc2V0WChtX2xvY2F0aW9uLngoKSAtIGR4KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJPYmplY3QuaCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJPYmplY3QuaAppbmRleCA2ZGQ0YmFjLi5hZTE0YTdiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVyT2JqZWN0LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlck9iamVjdC5oCkBAIC0zOTYsNiArMzk2LDggQEAgcHVibGljOgogICAgIHZpcnR1
YWwgYm9vbCBpc1NWR0dyYWRpZW50U3RvcCgpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CiAgICAg
dmlydHVhbCBib29sIGlzU1ZHSGlkZGVuQ29udGFpbmVyKCkgY29uc3QgeyByZXR1cm4gZmFsc2U7
IH0KICAgICB2aXJ0dWFsIGJvb2wgaXNTVkdQYXRoKCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0K
KyAgICB2aXJ0dWFsIGJvb2wgaXNTVkdSZWN0KCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KKyAg
ICB2aXJ0dWFsIGJvb2wgaXNTVkdTaGFwZSgpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CiAgICAg
dmlydHVhbCBib29sIGlzU1ZHVGV4dCgpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CiAgICAgdmly
dHVhbCBib29sIGlzU1ZHVGV4dFBhdGgoKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQogICAgIHZp
cnR1YWwgYm9vbCBpc1NWR0lubGluZSgpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVHJlZUFzVGV4dC5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVHJlZUFzVGV4dC5jcHAKaW5kZXggZTJiNmFmYi4u
YmMxMjc3ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRyZWVB
c1RleHQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUcmVlQXNUZXh0
LmNwcApAQCAtNTIxLDggKzUyMSw4IEBAIHN0YXRpYyB2b2lkIHdyaXRlVGV4dFJ1bihUZXh0U3Ry
ZWFtJiB0cywgY29uc3QgUmVuZGVyVGV4dCYgbywgY29uc3QgSW5saW5lVGV4dEJvCiB2b2lkIHdy
aXRlKFRleHRTdHJlYW0mIHRzLCBjb25zdCBSZW5kZXJPYmplY3QmIG8sIGludCBpbmRlbnQsIFJl
bmRlckFzVGV4dEJlaGF2aW9yIGJlaGF2aW9yKQogewogI2lmIEVOQUJMRShTVkcpCi0gICAgaWYg
KG8uaXNTVkdQYXRoKCkpIHsKLSAgICAgICAgd3JpdGUodHMsICp0b1JlbmRlclNWR1BhdGgoJm8p
LCBpbmRlbnQpOworICAgIGlmIChvLmlzU1ZHU2hhcGUoKSkgeworICAgICAgICB3cml0ZSh0cywg
KnRvUmVuZGVyU1ZHU2hhcGUoJm8pLCBpbmRlbnQpOwogICAgICAgICByZXR1cm47CiAgICAgfQog
ICAgIGlmIChvLmlzU1ZHR3JhZGllbnRTdG9wKCkpIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHQWxsSW5PbmUuY3BwIGIvU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdBbGxJbk9uZS5jcHAKaW5kZXggOWVhM2JlNS4uMjk2OTAw
OCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdBbGxJ
bk9uZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdBbGxJ
bk9uZS5jcHAKQEAgLTM1LDYgKzM1LDcgQEAKICNpbmNsdWRlICJSZW5kZXJTVkdJbmxpbmVUZXh0
LmNwcCIKICNpbmNsdWRlICJSZW5kZXJTVkdNb2RlbE9iamVjdC5jcHAiCiAjaW5jbHVkZSAiUmVu
ZGVyU1ZHUGF0aC5jcHAiCisjaW5jbHVkZSAiUmVuZGVyU1ZHUmVjdC5jcHAiCiAjaW5jbHVkZSAi
UmVuZGVyU1ZHUmVzb3VyY2UuY3BwIgogI2luY2x1ZGUgIlJlbmRlclNWR1Jlc291cmNlQ2xpcHBl
ci5jcHAiCiAjaW5jbHVkZSAiUmVuZGVyU1ZHUmVzb3VyY2VDb250YWluZXIuY3BwIgpAQCAtNDks
NiArNTAsNyBAQAogI2luY2x1ZGUgIlJlbmRlclNWR1Jlc291cmNlU29saWRDb2xvci5jcHAiCiAj
aW5jbHVkZSAiUmVuZGVyU1ZHUm9vdC5jcHAiCiAjaW5jbHVkZSAiUmVuZGVyU1ZHU2hhZG93VHJl
ZVJvb3RDb250YWluZXIuY3BwIgorI2luY2x1ZGUgIlJlbmRlclNWR1NoYXBlLmNwcCIKICNpbmNs
dWRlICJSZW5kZXJTVkdUU3Bhbi5jcHAiCiAjaW5jbHVkZSAiUmVuZGVyU1ZHVGV4dC5jcHAiCiAj
aW5jbHVkZSAiUmVuZGVyU1ZHVGV4dFBhdGguY3BwIgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdNb2RlbE9iamVjdC5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR01vZGVsT2JqZWN0LmNwcAppbmRleCBjMmUzZmRmLi5m
N2Q3ZGNhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNW
R01vZGVsT2JqZWN0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRl
clNWR01vZGVsT2JqZWN0LmNwcApAQCAtMTU0LDcgKzE1NCw3IEBAIHN0YXRpYyBib29sIGludGVy
c2VjdHNBbGxvd2luZ0VtcHR5KGNvbnN0IEZsb2F0UmVjdCYgciwgY29uc3QgRmxvYXRSZWN0JiBv
dGhlcikKIC8vIGltYWdlLCBsaW5lLCBwYXRoLCBwb2x5Z29uLCBwb2x5bGluZSwgcmVjdCwgdGV4
dCBhbmQgdXNlLgogc3RhdGljIGJvb2wgaXNHcmFwaGljc0VsZW1lbnQoUmVuZGVyT2JqZWN0KiBy
ZW5kZXJlcikKIHsKLSAgICByZXR1cm4gcmVuZGVyZXItPmlzU1ZHUGF0aCgpIHx8IHJlbmRlcmVy
LT5pc1NWR1RleHQoKSB8fCByZW5kZXJlci0+aXNTVkdJbWFnZSgpIHx8IHJlbmRlcmVyLT5pc1NW
R1NoYWRvd1RyZWVSb290Q29udGFpbmVyKCk7CisgICAgcmV0dXJuIHJlbmRlcmVyLT5pc1NWR1No
YXBlKCkgfHwgcmVuZGVyZXItPmlzU1ZHVGV4dCgpIHx8IHJlbmRlcmVyLT5pc1NWR0ltYWdlKCkg
fHwgcmVuZGVyZXItPmlzU1ZHU2hhZG93VHJlZVJvb3RDb250YWluZXIoKTsKIH0KIAogYm9vbCBS
ZW5kZXJTVkdNb2RlbE9iamVjdDo6Y2hlY2tJbnRlcnNlY3Rpb24oUmVuZGVyT2JqZWN0KiByZW5k
ZXJlciwgY29uc3QgRmxvYXRSZWN0JiByZWN0KQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdQYXRoLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9zdmcvUmVuZGVyU1ZHUGF0aC5jcHAKaW5kZXggYjdhZDdhMi4uZTdhNzJhMCAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdQYXRoLmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1BhdGguY3BwCkBAIC02LDYgKzYs
OCBAQAogICogQ29weXJpZ2h0IChDKSAyMDA5IERpcmsgU2NodWx6ZSA8a3JpdEB3ZWJraXQub3Jn
PgogICogQ29weXJpZ2h0IChDKSBSZXNlYXJjaCBJbiBNb3Rpb24gTGltaXRlZCAyMDEwLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgogICogQ29weXJpZ2h0IChDKSAyMDA5IEplZmYgU2NoaWxsZXIgPGNv
ZGVkcmVhZEBnbWFpbC5jb20+CisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgUmVuYXRhIEhvZG92YW4g
PHJlbmlAd2Via2l0Lm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAxMSBVbml2ZXJzaXR5IG9mIFN6
ZWdlZAogICoKICAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlz
dHJpYnV0ZSBpdCBhbmQvb3IKICAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdO
VSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCkBAIC0yOCw1MCArMzAsMTMgQEAKICNpZiBFTkFCTEUo
U1ZHKQogI2luY2x1ZGUgIlJlbmRlclNWR1BhdGguaCIKIAotI2luY2x1ZGUgIkZsb2F0UG9pbnQu
aCIKLSNpbmNsdWRlICJGbG9hdFF1YWQuaCIKLSNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIK
LSNpbmNsdWRlICJIaXRUZXN0UmVxdWVzdC5oIgotI2luY2x1ZGUgIkxheW91dFJlcGFpbnRlci5o
IgotI2luY2x1ZGUgIlBvaW50ZXJFdmVudHNIaXRSdWxlcy5oIgotI2luY2x1ZGUgIlJlbmRlclNW
R0NvbnRhaW5lci5oIgotI2luY2x1ZGUgIlJlbmRlclNWR1Jlc291cmNlTWFya2VyLmgiCi0jaW5j
bHVkZSAiUmVuZGVyU1ZHUmVzb3VyY2VTb2xpZENvbG9yLmgiCi0jaW5jbHVkZSAiU1ZHUmVuZGVy
U3VwcG9ydC5oIgotI2luY2x1ZGUgIlNWR1Jlc291cmNlcy5oIgorI2luY2x1ZGUgIlNWR1BhdGhF
bGVtZW50LmgiCiAjaW5jbHVkZSAiU1ZHU3R5bGVkVHJhbnNmb3JtYWJsZUVsZW1lbnQuaCIKLSNp
bmNsdWRlICJTVkdUcmFuc2Zvcm1MaXN0LmgiCi0jaW5jbHVkZSAiU1ZHVVJJUmVmZXJlbmNlLmgi
Ci0jaW5jbHVkZSAiU3Ryb2tlU3R5bGVBcHBsaWVyLmgiCi0jaW5jbHVkZSA8d3RmL01hdGhFeHRy
YXMuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1jbGFzcyBCb3VuZGluZ1JlY3RTdHJva2VT
dHlsZUFwcGxpZXIgOiBwdWJsaWMgU3Ryb2tlU3R5bGVBcHBsaWVyIHsKLXB1YmxpYzoKLSAgICBC
b3VuZGluZ1JlY3RTdHJva2VTdHlsZUFwcGxpZXIoY29uc3QgUmVuZGVyT2JqZWN0KiBvYmplY3Qs
IFJlbmRlclN0eWxlKiBzdHlsZSkKLSAgICAgICAgOiBtX29iamVjdChvYmplY3QpCi0gICAgICAg
ICwgbV9zdHlsZShzdHlsZSkKLSAgICB7Ci0gICAgICAgIEFTU0VSVChzdHlsZSk7Ci0gICAgICAg
IEFTU0VSVChvYmplY3QpOwotICAgIH0KLQotICAgIHZvaWQgc3Ryb2tlU3R5bGUoR3JhcGhpY3ND
b250ZXh0KiBnYykKLSAgICB7Ci0gICAgICAgIFNWR1JlbmRlclN1cHBvcnQ6OmFwcGx5U3Ryb2tl
U3R5bGVUb0NvbnRleHQoZ2MsIG1fc3R5bGUsIG1fb2JqZWN0KTsKLSAgICB9Ci0KLXByaXZhdGU6
Ci0gICAgY29uc3QgUmVuZGVyT2JqZWN0KiBtX29iamVjdDsKLSAgICBSZW5kZXJTdHlsZSogbV9z
dHlsZTsKLX07Ci0KIFJlbmRlclNWR1BhdGg6OlJlbmRlclNWR1BhdGgoU1ZHU3R5bGVkVHJhbnNm
b3JtYWJsZUVsZW1lbnQqIG5vZGUpCi0gICAgOiBSZW5kZXJTVkdNb2RlbE9iamVjdChub2RlKQot
ICAgICwgbV9uZWVkc0JvdW5kYXJpZXNVcGRhdGUoZmFsc2UpIC8vIGRlZmF1bHQgaXMgZmFsc2Us
IHRoZSBjYWNoZWQgcmVjdHMgYXJlIGVtcHR5IGZyb20gdGhlIGJlZ2lubmluZwotICAgICwgbV9u
ZWVkc1BhdGhVcGRhdGUodHJ1ZSkgLy8gZGVmYXVsdCBpcyB0cnVlLCBzbyB3ZSBncmFiIGEgUGF0
aCBvYmplY3Qgb25jZSBmcm9tIFNWR1N0eWxlZFRyYW5zZm9ybWFibGVFbGVtZW50Ci0gICAgLCBt
X25lZWRzVHJhbnNmb3JtVXBkYXRlKHRydWUpIC8vIGRlZmF1bHQgaXMgdHJ1ZSwgc28gd2UgZ3Jh
YiBhIEFmZmluZVRyYW5zZm9ybSBvYmplY3Qgb25jZSBmcm9tIFNWR1N0eWxlZFRyYW5zZm9ybWFi
bGVFbGVtZW50CisgICAgOiBSZW5kZXJTVkdTaGFwZShub2RlKQogewogfQogCkBAIC03OSwzMTQg
KzQ0LDE2IEBAIFJlbmRlclNWR1BhdGg6On5SZW5kZXJTVkdQYXRoKCkKIHsKIH0KIAotYm9vbCBS
ZW5kZXJTVkdQYXRoOjpmaWxsQ29udGFpbnMoY29uc3QgRmxvYXRQb2ludCYgcG9pbnQsIGJvb2wg
cmVxdWlyZXNGaWxsLCBXaW5kUnVsZSBmaWxsUnVsZSkKLXsKLSAgICBpZiAoIW1fZmlsbEJvdW5k
aW5nQm94LmNvbnRhaW5zKHBvaW50KSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgQ29s
b3IgZmFsbGJhY2tDb2xvcjsKLSAgICBpZiAocmVxdWlyZXNGaWxsICYmICFSZW5kZXJTVkdSZXNv
dXJjZTo6ZmlsbFBhaW50aW5nUmVzb3VyY2UodGhpcywgc3R5bGUoKSwgZmFsbGJhY2tDb2xvcikp
Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIHJldHVybiBtX3BhdGguY29udGFpbnMocG9p
bnQsIGZpbGxSdWxlKTsKLX0KLQotYm9vbCBSZW5kZXJTVkdQYXRoOjpzdHJva2VDb250YWlucyhj
b25zdCBGbG9hdFBvaW50JiBwb2ludCwgYm9vbCByZXF1aXJlc1N0cm9rZSkKLXsKLSAgICBpZiAo
IW1fc3Ryb2tlQW5kTWFya2VyQm91bmRpbmdCb3guY29udGFpbnMocG9pbnQpKQotICAgICAgICBy
ZXR1cm4gZmFsc2U7Ci0KLSAgICBDb2xvciBmYWxsYmFja0NvbG9yOwotICAgIGlmIChyZXF1aXJl
c1N0cm9rZSAmJiAhUmVuZGVyU1ZHUmVzb3VyY2U6OnN0cm9rZVBhaW50aW5nUmVzb3VyY2UodGhp
cywgc3R5bGUoKSwgZmFsbGJhY2tDb2xvcikpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAg
IGlmIChzaG91bGRTdHJva2VaZXJvTGVuZ3RoU3VicGF0aCgpKQotICAgICAgICByZXR1cm4gemVy
b0xlbmd0aFN1YnBhdGhSZWN0KCkuY29udGFpbnMocG9pbnQpOwotCi0gICAgQm91bmRpbmdSZWN0
U3Ryb2tlU3R5bGVBcHBsaWVyIHN0cm9rZVN0eWxlKHRoaXMsIHN0eWxlKCkpOwotICAgIHJldHVy
biBtX3BhdGguc3Ryb2tlQ29udGFpbnMoJnN0cm9rZVN0eWxlLCBwb2ludCk7Ci19Ci0KLXZvaWQg
UmVuZGVyU1ZHUGF0aDo6bGF5b3V0KCkKLXsKLSAgICBMYXlvdXRSZXBhaW50ZXIgcmVwYWludGVy
KCp0aGlzLCBjaGVja0ZvclJlcGFpbnREdXJpbmdMYXlvdXQoKSAmJiBzZWxmTmVlZHNMYXlvdXQo
KSk7Ci0gICAgU1ZHU3R5bGVkVHJhbnNmb3JtYWJsZUVsZW1lbnQqIGVsZW1lbnQgPSBzdGF0aWNf
Y2FzdDxTVkdTdHlsZWRUcmFuc2Zvcm1hYmxlRWxlbWVudCo+KG5vZGUoKSk7Ci0KLSAgICBib29s
IHVwZGF0ZUNhY2hlZEJvdW5kYXJpZXNJblBhcmVudHMgPSBmYWxzZTsKLQotICAgIGJvb2wgbmVl
ZHNQYXRoVXBkYXRlID0gbV9uZWVkc1BhdGhVcGRhdGU7Ci0gICAgaWYgKG5lZWRzUGF0aFVwZGF0
ZSkgewotICAgICAgICBtX3BhdGguY2xlYXIoKTsKLSAgICAgICAgZWxlbWVudC0+dG9QYXRoRGF0
YShtX3BhdGgpOwotICAgICAgICBtX25lZWRzUGF0aFVwZGF0ZSA9IGZhbHNlOwotICAgICAgICB1
cGRhdGVDYWNoZWRCb3VuZGFyaWVzSW5QYXJlbnRzID0gdHJ1ZTsKLSAgICB9Ci0KLSAgICBpZiAo
bV9uZWVkc1RyYW5zZm9ybVVwZGF0ZSkgewotICAgICAgICBtX2xvY2FsVHJhbnNmb3JtID0gZWxl
bWVudC0+YW5pbWF0ZWRMb2NhbFRyYW5zZm9ybSgpOwotICAgICAgICBtX25lZWRzVHJhbnNmb3Jt
VXBkYXRlID0gZmFsc2U7Ci0gICAgICAgIHVwZGF0ZUNhY2hlZEJvdW5kYXJpZXNJblBhcmVudHMg
PSB0cnVlOwotICAgIH0KLQotICAgIGlmIChtX25lZWRzQm91bmRhcmllc1VwZGF0ZSkKLSAgICAg
ICAgdXBkYXRlQ2FjaGVkQm91bmRhcmllc0luUGFyZW50cyA9IHRydWU7Ci0KLSAgICAvLyBJbnZh
bGlkYXRlIGFsbCByZXNvdXJjZXMgb2YgdGhpcyBjbGllbnQgaWYgb3VyIGxheW91dCBjaGFuZ2Vk
LgotICAgIGlmIChtX2V2ZXJIYWRMYXlvdXQgJiYgc2VsZk5lZWRzTGF5b3V0KCkpIHsKLSAgICAg
ICAgU1ZHUmVzb3VyY2VzQ2FjaGU6OmNsaWVudExheW91dENoYW5nZWQodGhpcyk7Ci0gICAgICAg
IG1fbWFya2VyTGF5b3V0SW5mby5jbGVhcigpOwotICAgIH0KLQotICAgIC8vIEF0IHRoaXMgcG9p
bnQgTGF5b3V0UmVwYWludGVyIGFscmVhZHkgZ3JhYmJlZCB0aGUgb2xkIGJvdW5kcywKLSAgICAv
LyByZWNhbGN1bGF0ZSB0aGVtIG5vdyBzbyByZXBhaW50QWZ0ZXJMYXlvdXQoKSB1c2VzIHRoZSBu
ZXcgYm91bmRzLgotICAgIGlmIChuZWVkc1BhdGhVcGRhdGUgfHwgbV9uZWVkc0JvdW5kYXJpZXNV
cGRhdGUpIHsKLSAgICAgICAgdXBkYXRlQ2FjaGVkQm91bmRhcmllcygpOwotICAgICAgICBtX25l
ZWRzQm91bmRhcmllc1VwZGF0ZSA9IGZhbHNlOwotICAgIH0KLQotICAgIC8vIElmIG91ciBib3Vu
ZHMgY2hhbmdlZCwgbm90aWZ5IHRoZSBwYXJlbnRzLgotICAgIGlmICh1cGRhdGVDYWNoZWRCb3Vu
ZGFyaWVzSW5QYXJlbnRzKQotICAgICAgICBSZW5kZXJTVkdNb2RlbE9iamVjdDo6c2V0TmVlZHNC
b3VuZGFyaWVzVXBkYXRlKCk7Ci0KLSAgICByZXBhaW50ZXIucmVwYWludEFmdGVyTGF5b3V0KCk7
Ci0gICAgc2V0TmVlZHNMYXlvdXQoZmFsc2UpOwotfQotCi1ib29sIFJlbmRlclNWR1BhdGg6OnNo
b3VsZFN0cm9rZVplcm9MZW5ndGhTdWJwYXRoKCkgY29uc3QKLXsKLSAgICAvLyBTcGVjKDExLjQp
OiBBbnkgemVybyBsZW5ndGggc3VicGF0aCBzaGFsbCBub3QgYmUgc3Ryb2tlZCBpZiB0aGUg4oCY
c3Ryb2tlLWxpbmVjYXDigJkgcHJvcGVydHkgaGFzIGEgdmFsdWUgb2YgYnV0dAotICAgIC8vIGJ1
dCBzaGFsbCBiZSBzdHJva2VkIGlmIHRoZSDigJhzdHJva2UtbGluZWNhcOKAmSBwcm9wZXJ0eSBo
YXMgYSB2YWx1ZSBvZiByb3VuZCBvciBzcXVhcmUKLSAgICByZXR1cm4gc3R5bGUoKS0+c3ZnU3R5
bGUoKS0+aGFzU3Ryb2tlKCkgJiYgc3R5bGUoKS0+c3ZnU3R5bGUoKS0+Y2FwU3R5bGUoKSAhPSBC
dXR0Q2FwICYmICFtX2ZpbGxCb3VuZGluZ0JveC53aWR0aCgpICYmICFtX2ZpbGxCb3VuZGluZ0Jv
eC5oZWlnaHQoKTsKLX0KLQotRmxvYXRSZWN0IFJlbmRlclNWR1BhdGg6Onplcm9MZW5ndGhTdWJw
YXRoUmVjdCgpIGNvbnN0Ci17Ci0gICAgU1ZHRWxlbWVudCogc3ZnRWxlbWVudCA9IHN0YXRpY19j
YXN0PFNWR0VsZW1lbnQqPihub2RlKCkpOwotICAgIGZsb2F0IHN0cm9rZVdpZHRoID0gc3R5bGUo
KS0+c3ZnU3R5bGUoKS0+c3Ryb2tlV2lkdGgoKS52YWx1ZShzdmdFbGVtZW50KTsKLSAgICByZXR1
cm4gRmxvYXRSZWN0KG1fZmlsbEJvdW5kaW5nQm94LngoKSAtIHN0cm9rZVdpZHRoIC8gMiwgbV9m
aWxsQm91bmRpbmdCb3gueSgpIC0gc3Ryb2tlV2lkdGggLyAyLCBzdHJva2VXaWR0aCwgc3Ryb2tl
V2lkdGgpOwotfQotCi12b2lkIFJlbmRlclNWR1BhdGg6OnNldHVwU3F1YXJlQ2FwUGF0aChQYXRo
KiYgdXNlUGF0aCwgaW50JiBhcHBseU1vZGUpCi17Ci0gICAgLy8gU3BlYygxMS40KTogQW55IHpl
cm8gbGVuZ3RoIHN1YnBhdGggc2hhbGwgbm90IGJlIHN0cm9rZWQgaWYgdGhlIOKAmHN0cm9rZS1s
aW5lY2Fw4oCZIHByb3BlcnR5IGhhcyBhIHZhbHVlIG9mIGJ1dHQKLSAgICAvLyBidXQgc2hhbGwg
YmUgc3Ryb2tlZCBpZiB0aGUg4oCYc3Ryb2tlLWxpbmVjYXDigJkgcHJvcGVydHkgaGFzIGEgdmFs
dWUgb2Ygcm91bmQgb3Igc3F1YXJlCi0gICAgREVGSU5FX1NUQVRJQ19MT0NBTChQYXRoLCB0ZW1w
UGF0aCwgKCkpOwotCi0gICAgYXBwbHlNb2RlID0gQXBwbHlUb0ZpbGxNb2RlOwotICAgIHVzZVBh
dGggPSAmdGVtcFBhdGg7Ci0gICAgdXNlUGF0aC0+Y2xlYXIoKTsKLSAgICBpZiAoc3R5bGUoKS0+
c3ZnU3R5bGUoKS0+Y2FwU3R5bGUoKSA9PSBTcXVhcmVDYXApCi0gICAgICAgIHVzZVBhdGgtPmFk
ZFJlY3QoemVyb0xlbmd0aFN1YnBhdGhSZWN0KCkpOwotICAgIGVsc2UKLSAgICAgICAgdXNlUGF0
aC0+YWRkRWxsaXBzZSh6ZXJvTGVuZ3RoU3VicGF0aFJlY3QoKSk7Ci19Ci0KLWJvb2wgUmVuZGVy
U1ZHUGF0aDo6c2V0dXBOb25TY2FsaW5nU3Ryb2tlUGF0aChQYXRoKiYgdXNlUGF0aCwgR3JhcGhp
Y3NDb250ZXh0U3RhdGVTYXZlciYgc3RhdGVTYXZlcikKK3ZvaWQgUmVuZGVyU1ZHUGF0aDo6aW5m
bGF0ZVdpdGhNYXJrZXJCb3VuZHMoKQogewotICAgIERFRklORV9TVEFUSUNfTE9DQUwoUGF0aCwg
dGVtcFBhdGgsICgpKTsKLQotICAgIFNWR1N0eWxlZFRyYW5zZm9ybWFibGVFbGVtZW50KiBlbGVt
ZW50ID0gc3RhdGljX2Nhc3Q8U1ZHU3R5bGVkVHJhbnNmb3JtYWJsZUVsZW1lbnQqPihub2RlKCkp
OwotICAgIEFmZmluZVRyYW5zZm9ybSBub25TY2FsaW5nU3Ryb2tlVHJhbnNmb3JtID0gZWxlbWVu
dC0+Z2V0U2NyZWVuQ1RNKFNWR0xvY2F0YWJsZTo6RGlzYWxsb3dTdHlsZVVwZGF0ZSk7Ci0gICAg
aWYgKCFub25TY2FsaW5nU3Ryb2tlVHJhbnNmb3JtLmlzSW52ZXJ0aWJsZSgpKQotICAgICAgICBy
ZXR1cm4gZmFsc2U7Ci0KLSAgICB0ZW1wUGF0aCA9IG1fcGF0aDsKLSAgICB1c2VQYXRoID0gJnRl
bXBQYXRoOwotICAgIHRlbXBQYXRoLnRyYW5zZm9ybShub25TY2FsaW5nU3Ryb2tlVHJhbnNmb3Jt
KTsKLQotICAgIHN0YXRlU2F2ZXIuc2F2ZSgpOwotICAgIHN0YXRlU2F2ZXIuY29udGV4dCgpLT5j
b25jYXRDVE0obm9uU2NhbGluZ1N0cm9rZVRyYW5zZm9ybS5pbnZlcnNlKCkpOwotICAgIHJldHVy
biB0cnVlOwotfQotCi12b2lkIFJlbmRlclNWR1BhdGg6OmZpbGxBbmRTdHJva2VQYXRoKEdyYXBo
aWNzQ29udGV4dCogY29udGV4dCkKLXsKLSAgICBSZW5kZXJTdHlsZSogc3R5bGUgPSB0aGlzLT5z
dHlsZSgpOwotCi0gICAgQ29sb3IgZmFsbGJhY2tDb2xvcjsKLSAgICBpZiAoUmVuZGVyU1ZHUmVz
b3VyY2UqIGZpbGxQYWludGluZ1Jlc291cmNlID0gUmVuZGVyU1ZHUmVzb3VyY2U6OmZpbGxQYWlu
dGluZ1Jlc291cmNlKHRoaXMsIHN0eWxlLCBmYWxsYmFja0NvbG9yKSkgewotICAgICAgICBpZiAo
ZmlsbFBhaW50aW5nUmVzb3VyY2UtPmFwcGx5UmVzb3VyY2UodGhpcywgc3R5bGUsIGNvbnRleHQs
IEFwcGx5VG9GaWxsTW9kZSkpCi0gICAgICAgICAgICBmaWxsUGFpbnRpbmdSZXNvdXJjZS0+cG9z
dEFwcGx5UmVzb3VyY2UodGhpcywgY29udGV4dCwgQXBwbHlUb0ZpbGxNb2RlLCAmbV9wYXRoKTsK
LSAgICAgICAgZWxzZSBpZiAoZmFsbGJhY2tDb2xvci5pc1ZhbGlkKCkpIHsKLSAgICAgICAgICAg
IFJlbmRlclNWR1Jlc291cmNlU29saWRDb2xvciogZmFsbGJhY2tSZXNvdXJjZSA9IFJlbmRlclNW
R1Jlc291cmNlOjpzaGFyZWRTb2xpZFBhaW50aW5nUmVzb3VyY2UoKTsKLSAgICAgICAgICAgIGZh
bGxiYWNrUmVzb3VyY2UtPnNldENvbG9yKGZhbGxiYWNrQ29sb3IpOwotICAgICAgICAgICAgaWYg
KGZhbGxiYWNrUmVzb3VyY2UtPmFwcGx5UmVzb3VyY2UodGhpcywgc3R5bGUsIGNvbnRleHQsIEFw
cGx5VG9GaWxsTW9kZSkpCi0gICAgICAgICAgICAgICAgZmFsbGJhY2tSZXNvdXJjZS0+cG9zdEFw
cGx5UmVzb3VyY2UodGhpcywgY29udGV4dCwgQXBwbHlUb0ZpbGxNb2RlLCAmbV9wYXRoKTsKLSAg
ICAgICAgfQotICAgIH0KLQotICAgIGZhbGxiYWNrQ29sb3IgPSBDb2xvcigpOwotICAgIFJlbmRl
clNWR1Jlc291cmNlKiBzdHJva2VQYWludGluZ1Jlc291cmNlID0gUmVuZGVyU1ZHUmVzb3VyY2U6
OnN0cm9rZVBhaW50aW5nUmVzb3VyY2UodGhpcywgc3R5bGUsIGZhbGxiYWNrQ29sb3IpOwotICAg
IGlmICghc3Ryb2tlUGFpbnRpbmdSZXNvdXJjZSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgUGF0
aCogdXNlUGF0aCA9ICZtX3BhdGg7Ci0gICAgaW50IGFwcGx5TW9kZSA9IEFwcGx5VG9TdHJva2VN
b2RlOwotCi0gICAgYm9vbCBub25TY2FsaW5nU3Ryb2tlID0gc3R5bGUtPnN2Z1N0eWxlKCktPnZl
Y3RvckVmZmVjdCgpID09IFZFX05PTl9TQ0FMSU5HX1NUUk9LRTsKLQotICAgIEdyYXBoaWNzQ29u
dGV4dFN0YXRlU2F2ZXIgc3RhdGVTYXZlcigqY29udGV4dCwgZmFsc2UpOwotCi0gICAgLy8gU3Bl
YygxMS40KTogQW55IHplcm8gbGVuZ3RoIHN1YnBhdGggc2hhbGwgbm90IGJlIHN0cm9rZWQgaWYg
dGhlIOKAmHN0cm9rZS1saW5lY2Fw4oCZIHByb3BlcnR5IGhhcyBhIHZhbHVlIG9mIGJ1dHQKLSAg
ICAvLyBidXQgc2hhbGwgYmUgc3Ryb2tlZCBpZiB0aGUg4oCYc3Ryb2tlLWxpbmVjYXDigJkgcHJv
cGVydHkgaGFzIGEgdmFsdWUgb2Ygcm91bmQgb3Igc3F1YXJlCi0gICAgLy8gRklYTUU6IHRoaXMg
ZG9lcyBub3Qgd29yayBmb3IgemVyby1sZW5ndGggc3VicGF0aHMsIG9ubHkgd2hlbiB0b3RhbCBw
YXRoIGlzIHplcm8tbGVuZ3RoCi0gICAgaWYgKHNob3VsZFN0cm9rZVplcm9MZW5ndGhTdWJwYXRo
KCkpCi0gICAgICAgIHNldHVwU3F1YXJlQ2FwUGF0aCh1c2VQYXRoLCBhcHBseU1vZGUpOwotICAg
IGVsc2UgaWYgKG5vblNjYWxpbmdTdHJva2UpIHsKLSAgICAgICBpZiAoIXNldHVwTm9uU2NhbGlu
Z1N0cm9rZVBhdGgodXNlUGF0aCwgc3RhdGVTYXZlcikpCi0gICAgICAgICAgIHJldHVybjsKLSAg
ICB9Ci0KLSAgICBpZiAoc3Ryb2tlUGFpbnRpbmdSZXNvdXJjZS0+YXBwbHlSZXNvdXJjZSh0aGlz
LCBzdHlsZSwgY29udGV4dCwgYXBwbHlNb2RlKSkKLSAgICAgICAgc3Ryb2tlUGFpbnRpbmdSZXNv
dXJjZS0+cG9zdEFwcGx5UmVzb3VyY2UodGhpcywgY29udGV4dCwgYXBwbHlNb2RlLCB1c2VQYXRo
KTsKLSAgICBlbHNlIGlmIChmYWxsYmFja0NvbG9yLmlzVmFsaWQoKSkgewotICAgICAgICBSZW5k
ZXJTVkdSZXNvdXJjZVNvbGlkQ29sb3IqIGZhbGxiYWNrUmVzb3VyY2UgPSBSZW5kZXJTVkdSZXNv
dXJjZTo6c2hhcmVkU29saWRQYWludGluZ1Jlc291cmNlKCk7Ci0gICAgICAgIGZhbGxiYWNrUmVz
b3VyY2UtPnNldENvbG9yKGZhbGxiYWNrQ29sb3IpOwotICAgICAgICBpZiAoZmFsbGJhY2tSZXNv
dXJjZS0+YXBwbHlSZXNvdXJjZSh0aGlzLCBzdHlsZSwgY29udGV4dCwgYXBwbHlNb2RlKSkKLSAg
ICAgICAgICAgIGZhbGxiYWNrUmVzb3VyY2UtPnBvc3RBcHBseVJlc291cmNlKHRoaXMsIGNvbnRl
eHQsIGFwcGx5TW9kZSwgdXNlUGF0aCk7Ci0gICAgfQotfQotCi12b2lkIFJlbmRlclNWR1BhdGg6
OnBhaW50KFBhaW50SW5mbyYgcGFpbnRJbmZvLCBjb25zdCBMYXlvdXRQb2ludCYpCi17Ci0gICAg
aWYgKHBhaW50SW5mby5jb250ZXh0LT5wYWludGluZ0Rpc2FibGVkKCkgfHwgc3R5bGUoKS0+dmlz
aWJpbGl0eSgpID09IEhJRERFTiB8fCBtX3BhdGguaXNFbXB0eSgpKQotICAgICAgICByZXR1cm47
Ci0KLSAgICBGbG9hdFJlY3QgYm91bmRpbmdCb3ggPSByZXBhaW50UmVjdEluTG9jYWxDb29yZGlu
YXRlcygpOwotICAgIGlmICghU1ZHUmVuZGVyU3VwcG9ydDo6cGFpbnRJbmZvSW50ZXJzZWN0c1Jl
cGFpbnRSZWN0KGJvdW5kaW5nQm94LCBtX2xvY2FsVHJhbnNmb3JtLCBwYWludEluZm8pKQotICAg
ICAgICByZXR1cm47Ci0KLSAgICBQYWludEluZm8gY2hpbGRQYWludEluZm8ocGFpbnRJbmZvKTsK
LSAgICBib29sIGRyYXdzT3V0bGluZSA9IHN0eWxlKCktPm91dGxpbmVXaWR0aCgpICYmIChjaGls
ZFBhaW50SW5mby5waGFzZSA9PSBQYWludFBoYXNlT3V0bGluZSB8fCBjaGlsZFBhaW50SW5mby5w
aGFzZSA9PSBQYWludFBoYXNlU2VsZk91dGxpbmUpOwotICAgIGlmIChkcmF3c091dGxpbmUgfHwg
Y2hpbGRQYWludEluZm8ucGhhc2UgPT0gUGFpbnRQaGFzZUZvcmVncm91bmQpIHsKLSAgICAgICAg
R3JhcGhpY3NDb250ZXh0U3RhdGVTYXZlciBzdGF0ZVNhdmVyKCpjaGlsZFBhaW50SW5mby5jb250
ZXh0KTsKLSAgICAgICAgY2hpbGRQYWludEluZm8uYXBwbHlUcmFuc2Zvcm0obV9sb2NhbFRyYW5z
Zm9ybSk7Ci0KLSAgICAgICAgaWYgKGNoaWxkUGFpbnRJbmZvLnBoYXNlID09IFBhaW50UGhhc2VG
b3JlZ3JvdW5kKSB7Ci0gICAgICAgICAgICBQYWludEluZm8gc2F2ZWRJbmZvKGNoaWxkUGFpbnRJ
bmZvKTsKLQotICAgICAgICAgICAgaWYgKFNWR1JlbmRlclN1cHBvcnQ6OnByZXBhcmVUb1JlbmRl
clNWR0NvbnRlbnQodGhpcywgY2hpbGRQYWludEluZm8pKSB7Ci0gICAgICAgICAgICAgICAgY29u
c3QgU1ZHUmVuZGVyU3R5bGUqIHN2Z1N0eWxlID0gc3R5bGUoKS0+c3ZnU3R5bGUoKTsKLSAgICAg
ICAgICAgICAgICBpZiAoc3ZnU3R5bGUtPnNoYXBlUmVuZGVyaW5nKCkgPT0gU1JfQ1JJU1BFREdF
UykKLSAgICAgICAgICAgICAgICAgICAgY2hpbGRQYWludEluZm8uY29udGV4dC0+c2V0U2hvdWxk
QW50aWFsaWFzKGZhbHNlKTsKLQotICAgICAgICAgICAgICAgIGZpbGxBbmRTdHJva2VQYXRoKGNo
aWxkUGFpbnRJbmZvLmNvbnRleHQpOwotCi0gICAgICAgICAgICAgICAgaWYgKHN2Z1N0eWxlLT5o
YXNNYXJrZXJzKCkpCi0gICAgICAgICAgICAgICAgICAgIG1fbWFya2VyTGF5b3V0SW5mby5kcmF3
TWFya2VycyhjaGlsZFBhaW50SW5mbyk7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIFNW
R1JlbmRlclN1cHBvcnQ6OmZpbmlzaFJlbmRlclNWR0NvbnRlbnQodGhpcywgY2hpbGRQYWludElu
Zm8sIHNhdmVkSW5mby5jb250ZXh0KTsKLSAgICAgICAgfQotCi0gICAgICAgIGlmIChkcmF3c091
dGxpbmUpCi0gICAgICAgICAgICBwYWludE91dGxpbmUoY2hpbGRQYWludEluZm8uY29udGV4dCwg
SW50UmVjdChib3VuZGluZ0JveCkpOwotICAgIH0KLX0KLQotLy8gVGhpcyBtZXRob2QgaXMgY2Fs
bGVkIGZyb20gaW5zaWRlIHBhaW50T3V0bGluZSgpIHNpbmNlIHdlIGNhbGwgcGFpbnRPdXRsaW5l
KCkKLS8vIHdoaWxlIHRyYW5zZm9ybWVkIHRvIG91ciBjb29yZCBzeXN0ZW0sIHJldHVybiBsb2Nh
bCBjb29yZHMKLXZvaWQgUmVuZGVyU1ZHUGF0aDo6YWRkRm9jdXNSaW5nUmVjdHMoVmVjdG9yPExh
eW91dFJlY3Q+JiByZWN0cywgY29uc3QgTGF5b3V0UG9pbnQmKSAKLXsKLSAgICBMYXlvdXRSZWN0
IHJlY3QgPSBlbmNsb3NpbmdMYXlvdXRSZWN0KHJlcGFpbnRSZWN0SW5Mb2NhbENvb3JkaW5hdGVz
KCkpOwotICAgIGlmICghcmVjdC5pc0VtcHR5KCkpCi0gICAgICAgIHJlY3RzLmFwcGVuZChyZWN0
KTsKLX0KLQotYm9vbCBSZW5kZXJTVkdQYXRoOjpub2RlQXRGbG9hdFBvaW50KGNvbnN0IEhpdFRl
c3RSZXF1ZXN0JiByZXF1ZXN0LCBIaXRUZXN0UmVzdWx0JiByZXN1bHQsIGNvbnN0IEZsb2F0UG9p
bnQmIHBvaW50SW5QYXJlbnQsIEhpdFRlc3RBY3Rpb24gaGl0VGVzdEFjdGlvbikKLXsKLSAgICAv
LyBXZSBvbmx5IGRyYXcgaW4gdGhlIGZvcmdyb3VuZCBwaGFzZSwgc28gd2Ugb25seSBoaXQtdGVz
dCB0aGVuLgotICAgIGlmIChoaXRUZXN0QWN0aW9uICE9IEhpdFRlc3RGb3JlZ3JvdW5kKQotICAg
ICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBGbG9hdFBvaW50IGxvY2FsUG9pbnQgPSBtX2xvY2Fs
VHJhbnNmb3JtLmludmVyc2UoKS5tYXBQb2ludChwb2ludEluUGFyZW50KTsKLQotICAgIGlmICgh
U1ZHUmVuZGVyU3VwcG9ydDo6cG9pbnRJbkNsaXBwaW5nQXJlYSh0aGlzLCBsb2NhbFBvaW50KSkK
LSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgUG9pbnRlckV2ZW50c0hpdFJ1bGVzIGhpdFJ1
bGVzKFBvaW50ZXJFdmVudHNIaXRSdWxlczo6U1ZHX1BBVEhfSElUVEVTVElORywgcmVxdWVzdCwg
c3R5bGUoKS0+cG9pbnRlckV2ZW50cygpKTsKLSAgICBib29sIGlzVmlzaWJsZSA9IChzdHlsZSgp
LT52aXNpYmlsaXR5KCkgPT0gVklTSUJMRSk7Ci0gICAgaWYgKGlzVmlzaWJsZSB8fCAhaGl0UnVs
ZXMucmVxdWlyZVZpc2libGUpIHsKLSAgICAgICAgY29uc3QgU1ZHUmVuZGVyU3R5bGUqIHN2Z1N0
eWxlID0gc3R5bGUoKS0+c3ZnU3R5bGUoKTsKLSAgICAgICAgV2luZFJ1bGUgZmlsbFJ1bGUgPSBz
dmdTdHlsZS0+ZmlsbFJ1bGUoKTsKLSAgICAgICAgaWYgKHJlcXVlc3Quc3ZnQ2xpcENvbnRlbnQo
KSkKLSAgICAgICAgICAgIGZpbGxSdWxlID0gc3ZnU3R5bGUtPmNsaXBSdWxlKCk7Ci0gICAgICAg
IGlmICgoaGl0UnVsZXMuY2FuSGl0U3Ryb2tlICYmIChzdmdTdHlsZS0+aGFzU3Ryb2tlKCkgfHwg
IWhpdFJ1bGVzLnJlcXVpcmVTdHJva2UpICYmIHN0cm9rZUNvbnRhaW5zKGxvY2FsUG9pbnQsIGhp
dFJ1bGVzLnJlcXVpcmVTdHJva2UpKQotICAgICAgICAgICAgfHwgKGhpdFJ1bGVzLmNhbkhpdEZp
bGwgJiYgKHN2Z1N0eWxlLT5oYXNGaWxsKCkgfHwgIWhpdFJ1bGVzLnJlcXVpcmVGaWxsKSAmJiBm
aWxsQ29udGFpbnMobG9jYWxQb2ludCwgaGl0UnVsZXMucmVxdWlyZUZpbGwsIGZpbGxSdWxlKSkp
IHsKLSAgICAgICAgICAgIHVwZGF0ZUhpdFRlc3RSZXN1bHQocmVzdWx0LCByb3VuZGVkTGF5b3V0
UG9pbnQobG9jYWxQb2ludCkpOwotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIH0K
LSAgICB9Ci0gICAgcmV0dXJuIGZhbHNlOwotfQotCi1GbG9hdFJlY3QgUmVuZGVyU1ZHUGF0aDo6
Y2FsY3VsYXRlTWFya2VyQm91bmRzSWZOZWVkZWQoKQotewotICAgIFNWR0VsZW1lbnQqIHN2Z0Vs
ZW1lbnQgPSBzdGF0aWNfY2FzdDxTVkdFbGVtZW50Kj4obm9kZSgpKTsKLSAgICBBU1NFUlQoc3Zn
RWxlbWVudCAmJiBzdmdFbGVtZW50LT5kb2N1bWVudCgpKTsKLSAgICBpZiAoIXN2Z0VsZW1lbnQt
PmlzU3R5bGVkKCkpCi0gICAgICAgIHJldHVybiBGbG9hdFJlY3QoKTsKLQotICAgIFNWR1N0eWxl
ZEVsZW1lbnQqIHN0eWxlZEVsZW1lbnQgPSBzdGF0aWNfY2FzdDxTVkdTdHlsZWRFbGVtZW50Kj4o
c3ZnRWxlbWVudCk7Ci0gICAgaWYgKCFzdHlsZWRFbGVtZW50LT5zdXBwb3J0c01hcmtlcnMoKSkK
LSAgICAgICAgcmV0dXJuIEZsb2F0UmVjdCgpOwotCi0gICAgY29uc3QgU1ZHUmVuZGVyU3R5bGUq
IHN2Z1N0eWxlID0gc3R5bGUoKS0+c3ZnU3R5bGUoKTsKLSAgICBBU1NFUlQoc3ZnU3R5bGUtPmhh
c01hcmtlcnMoKSk7Ci0KLSAgICBTVkdSZXNvdXJjZXMqIHJlc291cmNlcyA9IFNWR1Jlc291cmNl
c0NhY2hlOjpjYWNoZWRSZXNvdXJjZXNGb3JSZW5kZXJPYmplY3QodGhpcyk7Ci0gICAgaWYgKCFy
ZXNvdXJjZXMpCi0gICAgICAgIHJldHVybiBGbG9hdFJlY3QoKTsKLQotICAgIFJlbmRlclNWR1Jl
c291cmNlTWFya2VyKiBtYXJrZXJTdGFydCA9IHJlc291cmNlcy0+bWFya2VyU3RhcnQoKTsKLSAg
ICBSZW5kZXJTVkdSZXNvdXJjZU1hcmtlciogbWFya2VyTWlkID0gcmVzb3VyY2VzLT5tYXJrZXJN
aWQoKTsKLSAgICBSZW5kZXJTVkdSZXNvdXJjZU1hcmtlciogbWFya2VyRW5kID0gcmVzb3VyY2Vz
LT5tYXJrZXJFbmQoKTsKLSAgICBpZiAoIW1hcmtlclN0YXJ0ICYmICFtYXJrZXJNaWQgJiYgIW1h
cmtlckVuZCkKLSAgICAgICAgcmV0dXJuIEZsb2F0UmVjdCgpOwotCi0gICAgcmV0dXJuIG1fbWFy
a2VyTGF5b3V0SW5mby5jYWxjdWxhdGVCb3VuZGFyaWVzKG1hcmtlclN0YXJ0LCBtYXJrZXJNaWQs
IG1hcmtlckVuZCwgc3ZnU3R5bGUtPnN0cm9rZVdpZHRoKCkudmFsdWUoc3ZnRWxlbWVudCksIG1f
cGF0aCk7Ci19Ci0KLXZvaWQgUmVuZGVyU1ZHUGF0aDo6dXBkYXRlQ2FjaGVkQm91bmRhcmllcygp
Ci17Ci0gICAgaWYgKG1fcGF0aC5pc0VtcHR5KCkpIHsKLSAgICAgICAgbV9maWxsQm91bmRpbmdC
b3ggPSBGbG9hdFJlY3QoKTsKLSAgICAgICAgbV9zdHJva2VBbmRNYXJrZXJCb3VuZGluZ0JveCA9
IEZsb2F0UmVjdCgpOwotICAgICAgICBtX3JlcGFpbnRCb3VuZGluZ0JveCA9IEZsb2F0UmVjdCgp
OwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgLy8gQ2FjaGUgX3VuY2xpcHBlZF8gZmls
bCBib3VuZGluZyBib3gsIHVzZWQgZm9yIGNhbGN1bGF0aW9ucyBpbiByZXNvdXJjZXMKLSAgICBt
X2ZpbGxCb3VuZGluZ0JveCA9IG1fcGF0aC5ib3VuZGluZ1JlY3QoKTsKLQotICAgIC8vIFNwZWMo
MTEuNCk6IEFueSB6ZXJvIGxlbmd0aCBzdWJwYXRoIHNoYWxsIG5vdCBiZSBzdHJva2VkIGlmIHRo
ZSDigJhzdHJva2UtbGluZWNhcOKAmSBwcm9wZXJ0eSBoYXMgYSB2YWx1ZSBvZiBidXR0Ci0gICAg
Ly8gYnV0IHNoYWxsIGJlIHN0cm9rZWQgaWYgdGhlIOKAmHN0cm9rZS1saW5lY2Fw4oCZIHByb3Bl
cnR5IGhhcyBhIHZhbHVlIG9mIHJvdW5kIG9yIHNxdWFyZQotICAgIGlmIChzaG91bGRTdHJva2Va
ZXJvTGVuZ3RoU3VicGF0aCgpKSB7Ci0gICAgICAgIG1fc3Ryb2tlQW5kTWFya2VyQm91bmRpbmdC
b3ggPSB6ZXJvTGVuZ3RoU3VicGF0aFJlY3QoKTsKLSAgICAgICAgLy8gQ2FjaGUgc21hbGxlc3Qg
cG9zc2libGUgcmVwYWludCByZWN0YW5nbGUKLSAgICAgICAgbV9yZXBhaW50Qm91bmRpbmdCb3gg
PSBtX3N0cm9rZUFuZE1hcmtlckJvdW5kaW5nQm94OwotICAgICAgICBTVkdSZW5kZXJTdXBwb3J0
OjppbnRlcnNlY3RSZXBhaW50UmVjdFdpdGhSZXNvdXJjZXModGhpcywgbV9yZXBhaW50Qm91bmRp
bmdCb3gpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgLy8gQ2FjaGUgX3VuY2xpcHBl
ZF8gc3Ryb2tlIGJvdW5kaW5nIGJveCwgdXNlZCBmb3IgY2FsY3VsYXRpb25zIGluIHJlc291cmNl
cyAoaW5jbHVkZXMgbWFya2VyIGJvdW5kYXJpZXMpCi0gICAgbV9zdHJva2VBbmRNYXJrZXJCb3Vu
ZGluZ0JveCA9IG1fZmlsbEJvdW5kaW5nQm94OwotCi0gICAgY29uc3QgU1ZHUmVuZGVyU3R5bGUq
IHN2Z1N0eWxlID0gc3R5bGUoKS0+c3ZnU3R5bGUoKTsKLSAgICBpZiAoc3ZnU3R5bGUtPmhhc1N0
cm9rZSgpKSB7Ci0gICAgICAgIEJvdW5kaW5nUmVjdFN0cm9rZVN0eWxlQXBwbGllciBzdHJva2VT
dHlsZSh0aGlzLCBzdHlsZSgpKTsKLSAgICAgICAgbV9zdHJva2VBbmRNYXJrZXJCb3VuZGluZ0Jv
eC51bml0ZShtX3BhdGguc3Ryb2tlQm91bmRpbmdSZWN0KCZzdHJva2VTdHlsZSkpOwotICAgIH0K
LQotICAgIGlmIChzdmdTdHlsZS0+aGFzTWFya2VycygpKSB7CisgICAgaWYgKHN0eWxlKCktPnN2
Z1N0eWxlKCktPmhhc01hcmtlcnMoKSkgewogICAgICAgICBGbG9hdFJlY3QgbWFya2VyQm91bmRz
ID0gY2FsY3VsYXRlTWFya2VyQm91bmRzSWZOZWVkZWQoKTsKLSAgICAgICAgaWYgKCFtYXJrZXJC
b3VuZHMuaXNFbXB0eSgpKQotICAgICAgICAgICAgbV9zdHJva2VBbmRNYXJrZXJCb3VuZGluZ0Jv
eC51bml0ZShtYXJrZXJCb3VuZHMpOworICAgICAgICBpZiAoIW1hcmtlckJvdW5kcy5pc0VtcHR5
KCkpIHsKKyAgICAgICAgICAgIEZsb2F0UmVjdCBzdHJva2VSZWN0ID0gc3Ryb2tlQW5kTWFya2Vy
Qm91bmRpbmdCb3goKTsKKyAgICAgICAgICAgIHN0cm9rZVJlY3QudW5pdGUobWFya2VyQm91bmRz
KTsKKyAgICAgICAgICAgIHNldFN0cm9rZUFuZE1hcmtlckJvdW5kaW5nQm94KHN0cm9rZVJlY3Qp
OworICAgICAgICB9CiAgICAgfQotCi0gICAgLy8gQ2FjaGUgc21hbGxlc3QgcG9zc2libGUgcmVw
YWludCByZWN0YW5nbGUKLSAgICBtX3JlcGFpbnRCb3VuZGluZ0JveCA9IG1fc3Ryb2tlQW5kTWFy
a2VyQm91bmRpbmdCb3g7Ci0gICAgU1ZHUmVuZGVyU3VwcG9ydDo6aW50ZXJzZWN0UmVwYWludFJl
Y3RXaXRoUmVzb3VyY2VzKHRoaXMsIG1fcmVwYWludEJvdW5kaW5nQm94KTsKIH0KIAogfQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdQYXRoLmggYi9T
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1BhdGguaAppbmRleCA5OGU2MDhk
Li42MmExYzhjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRl
clNWR1BhdGguaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Bh
dGguaApAQCAtNCw2ICs0LDggQEAKICAqIENvcHlyaWdodCAoQykgMjAwNSBFcmljIFNlaWRlbCA8
ZXJpY0B3ZWJraXQub3JnPgogICogQ29weXJpZ2h0IChDKSAyMDA2IEFwcGxlIENvbXB1dGVyLCBJ
bmMKICAqIENvcHlyaWdodCAoQykgMjAwOSBHb29nbGUsIEluYy4KKyAqIENvcHlyaWdodCAoQykg
MjAxMSBSZW5hdGEgSG9kb3ZhbiA8cmVuaUB3ZWJraXQub3JnPgorICogQ29weXJpZ2h0IChDKSAy
MDExIFVuaXZlcnNpdHkgb2YgU3plZ2VkCiAgKgogICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29m
dHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICogbW9kaWZ5IGl0IHVuZGVy
IHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKQEAgLTI1LDg2ICsy
NywyMiBAQAogI2RlZmluZSBSZW5kZXJTVkdQYXRoX2gKIAogI2lmIEVOQUJMRShTVkcpCi0jaW5j
bHVkZSAiQWZmaW5lVHJhbnNmb3JtLmgiCi0jaW5jbHVkZSAiRmxvYXRSZWN0LmgiCi0jaW5jbHVk
ZSAiUmVuZGVyU1ZHTW9kZWxPYmplY3QuaCIKLSNpbmNsdWRlICJTVkdNYXJrZXJMYXlvdXRJbmZv
LmgiCisjaW5jbHVkZSAiUmVuZGVyU1ZHU2hhcGUuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewog
Ci1jbGFzcyBGbG9hdFBvaW50OwotY2xhc3MgR3JhcGhpY3NDb250ZXh0U3RhdGVTYXZlcjsKLWNs
YXNzIFJlbmRlclNWR0NvbnRhaW5lcjsKLWNsYXNzIFNWR1N0eWxlZFRyYW5zZm9ybWFibGVFbGVt
ZW50OwotCi1jbGFzcyBSZW5kZXJTVkdQYXRoIDogcHVibGljIFJlbmRlclNWR01vZGVsT2JqZWN0
IHsKK2NsYXNzIFJlbmRlclNWR1BhdGggOiBwdWJsaWMgUmVuZGVyU1ZHU2hhcGUgewogcHVibGlj
OgogICAgIGV4cGxpY2l0IFJlbmRlclNWR1BhdGgoU1ZHU3R5bGVkVHJhbnNmb3JtYWJsZUVsZW1l
bnQqKTsKICAgICB2aXJ0dWFsIH5SZW5kZXJTVkdQYXRoKCk7CiAKLSAgICBjb25zdCBQYXRoJiBw
YXRoKCkgY29uc3QgeyByZXR1cm4gbV9wYXRoOyB9Ci0gICAgdm9pZCBzZXROZWVkc1BhdGhVcGRh
dGUoKSB7IG1fbmVlZHNQYXRoVXBkYXRlID0gdHJ1ZTsgfQotICAgIHZpcnR1YWwgdm9pZCBzZXRO
ZWVkc0JvdW5kYXJpZXNVcGRhdGUoKSB7IG1fbmVlZHNCb3VuZGFyaWVzVXBkYXRlID0gdHJ1ZTsg
fQotICAgIHZpcnR1YWwgdm9pZCBzZXROZWVkc1RyYW5zZm9ybVVwZGF0ZSgpIHsgbV9uZWVkc1Ry
YW5zZm9ybVVwZGF0ZSA9IHRydWU7IH0KLQogcHJpdmF0ZToKLSAgICAvLyBIaXQtZGV0ZWN0aW9u
IHNlcGVyYXRlZCBmb3IgdGhlIGZpbGwgYW5kIHRoZSBzdHJva2UKLSAgICBib29sIGZpbGxDb250
YWlucyhjb25zdCBGbG9hdFBvaW50JiwgYm9vbCByZXF1aXJlc0ZpbGwgPSB0cnVlLCBXaW5kUnVs
ZSBmaWxsUnVsZSA9IFJVTEVfTk9OWkVSTyk7Ci0gICAgYm9vbCBzdHJva2VDb250YWlucyhjb25z
dCBGbG9hdFBvaW50JiwgYm9vbCByZXF1aXJlc1N0cm9rZSA9IHRydWUpOwotCi0gICAgdmlydHVh
bCBGbG9hdFJlY3Qgb2JqZWN0Qm91bmRpbmdCb3goKSBjb25zdCB7IHJldHVybiBtX2ZpbGxCb3Vu
ZGluZ0JveDsgfQotICAgIHZpcnR1YWwgRmxvYXRSZWN0IHN0cm9rZUJvdW5kaW5nQm94KCkgY29u
c3QgeyByZXR1cm4gbV9zdHJva2VBbmRNYXJrZXJCb3VuZGluZ0JveDsgfQotICAgIHZpcnR1YWwg
RmxvYXRSZWN0IHJlcGFpbnRSZWN0SW5Mb2NhbENvb3JkaW5hdGVzKCkgY29uc3QgeyByZXR1cm4g
bV9yZXBhaW50Qm91bmRpbmdCb3g7IH0KLSAgICB2aXJ0dWFsIGNvbnN0IEFmZmluZVRyYW5zZm9y
bSYgbG9jYWxUb1BhcmVudFRyYW5zZm9ybSgpIGNvbnN0IHsgcmV0dXJuIG1fbG9jYWxUcmFuc2Zv
cm07IH0KLQogICAgIHZpcnR1YWwgYm9vbCBpc1NWR1BhdGgoKSBjb25zdCB7IHJldHVybiB0cnVl
OyB9CiAgICAgdmlydHVhbCBjb25zdCBjaGFyKiByZW5kZXJOYW1lKCkgY29uc3QgeyByZXR1cm4g
IlJlbmRlclNWR1BhdGgiOyB9CiAKLSAgICB2aXJ0dWFsIHZvaWQgbGF5b3V0KCk7Ci0gICAgdmly
dHVhbCB2b2lkIHBhaW50KFBhaW50SW5mbyYsIGNvbnN0IExheW91dFBvaW50Jik7Ci0gICAgdmly
dHVhbCB2b2lkIGFkZEZvY3VzUmluZ1JlY3RzKFZlY3RvcjxMYXlvdXRSZWN0PiYsIGNvbnN0IExh
eW91dFBvaW50Jik7Ci0KLSAgICB2aXJ0dWFsIGJvb2wgbm9kZUF0RmxvYXRQb2ludChjb25zdCBI
aXRUZXN0UmVxdWVzdCYsIEhpdFRlc3RSZXN1bHQmLCBjb25zdCBGbG9hdFBvaW50JiBwb2ludElu
UGFyZW50LCBIaXRUZXN0QWN0aW9uKTsKLQotICAgIEZsb2F0UmVjdCBjYWxjdWxhdGVNYXJrZXJC
b3VuZHNJZk5lZWRlZCgpOwotICAgIHZvaWQgdXBkYXRlQ2FjaGVkQm91bmRhcmllcygpOwotCi0g
ICAgdm9pZCBzZXR1cFNxdWFyZUNhcFBhdGgoUGF0aComIHVzZVBhdGgsIGludCYgYXBwbHlNb2Rl
KTsKLSAgICBib29sIHNldHVwTm9uU2NhbGluZ1N0cm9rZVBhdGgoUGF0aComIHVzZVBhdGgsIEdy
YXBoaWNzQ29udGV4dFN0YXRlU2F2ZXImKTsKLSAgICBib29sIHNob3VsZFN0cm9rZVplcm9MZW5n
dGhTdWJwYXRoKCkgY29uc3Q7Ci0gICAgRmxvYXRSZWN0IHplcm9MZW5ndGhTdWJwYXRoUmVjdCgp
IGNvbnN0OwotCi1wcml2YXRlOgotICAgIHZpcnR1YWwgQWZmaW5lVHJhbnNmb3JtIGxvY2FsVHJh
bnNmb3JtKCkgY29uc3QgeyByZXR1cm4gbV9sb2NhbFRyYW5zZm9ybTsgfQotICAgIHZvaWQgZmls
bEFuZFN0cm9rZVBhdGgoR3JhcGhpY3NDb250ZXh0Kik7Ci0KLSAgICBib29sIG1fbmVlZHNCb3Vu
ZGFyaWVzVXBkYXRlIDogMTsKLSAgICBib29sIG1fbmVlZHNQYXRoVXBkYXRlIDogMTsKLSAgICBi
b29sIG1fbmVlZHNUcmFuc2Zvcm1VcGRhdGUgOiAxOwotCi0gICAgbXV0YWJsZSBQYXRoIG1fcGF0
aDsKLSAgICBGbG9hdFJlY3QgbV9maWxsQm91bmRpbmdCb3g7Ci0gICAgRmxvYXRSZWN0IG1fc3Ry
b2tlQW5kTWFya2VyQm91bmRpbmdCb3g7Ci0gICAgRmxvYXRSZWN0IG1fcmVwYWludEJvdW5kaW5n
Qm94OwotICAgIFNWR01hcmtlckxheW91dEluZm8gbV9tYXJrZXJMYXlvdXRJbmZvOwotICAgIEFm
ZmluZVRyYW5zZm9ybSBtX2xvY2FsVHJhbnNmb3JtOworICAgIHZpcnR1YWwgdm9pZCBpbmZsYXRl
V2l0aE1hcmtlckJvdW5kcygpOwogfTsKIAotaW5saW5lIFJlbmRlclNWR1BhdGgqIHRvUmVuZGVy
U1ZHUGF0aChSZW5kZXJPYmplY3QqIG9iamVjdCkKLXsKLSAgICBBU1NFUlQoIW9iamVjdCB8fCBv
YmplY3QtPmlzU1ZHUGF0aCgpKTsKLSAgICByZXR1cm4gc3RhdGljX2Nhc3Q8UmVuZGVyU1ZHUGF0
aCo+KG9iamVjdCk7Ci19Ci0KLWlubGluZSBjb25zdCBSZW5kZXJTVkdQYXRoKiB0b1JlbmRlclNW
R1BhdGgoY29uc3QgUmVuZGVyT2JqZWN0KiBvYmplY3QpCi17Ci0gICAgQVNTRVJUKCFvYmplY3Qg
fHwgb2JqZWN0LT5pc1NWR1BhdGgoKSk7Ci0gICAgcmV0dXJuIHN0YXRpY19jYXN0PGNvbnN0IFJl
bmRlclNWR1BhdGgqPihvYmplY3QpOwotfQotCi0vLyBUaGlzIHdpbGwgY2F0Y2ggYW55b25lIGRv
aW5nIGFuIHVubmVjZXNzYXJ5IGNhc3QuCi12b2lkIHRvUmVuZGVyU1ZHUGF0aChjb25zdCBSZW5k
ZXJTVkdQYXRoKik7Ci0KIH0KIAogI2VuZGlmIC8vIEVOQUJMRShTVkcpCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1JlY3QuY3BwIGIvU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZWN0LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAwMDAwMDAwLi4wNTFkYmE3Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZWN0LmNwcApAQCAtMCwwICsxLDEyNyBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAxMSBVbml2ZXJzaXR5IG9mIFN6ZWdlZAorICogQ29weXJpZ2h0
IChDKSAyMDExIFJlbmF0YSBIb2RvdmFuIChyZW5pQHdlYmtpdC5vcmcpCisgKiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0Ogor
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
CisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
VU5JVkVSU0lUWSBPRiBTWkVHRUQgYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBV
TklWRVJTSVRZIE9GIFNaRUdFRCBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9S
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisg
KiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKworI2lmIEVOQUJMRShTVkcp
CisjaW5jbHVkZSAiUmVuZGVyU1ZHUmVjdC5oIgorCisjaW5jbHVkZSAiU1ZHTmFtZXMuaCIKKyNp
bmNsdWRlICJTVkdSZWN0RWxlbWVudC5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK1JlbmRl
clNWR1JlY3Q6OlJlbmRlclNWR1JlY3QoU1ZHUmVjdEVsZW1lbnQqIG5vZGUpCisgICAgOiBSZW5k
ZXJTVkdTaGFwZShub2RlKQoreworfQorCitSZW5kZXJTVkdSZWN0Ojp+UmVuZGVyU1ZHUmVjdCgp
Cit7Cit9CisKK3ZvaWQgUmVuZGVyU1ZHUmVjdDo6Y3JlYXRlU2hhcGUoKQoreworICAgIC8vIEJl
Zm9yZSBjcmVhdGluZyBhIG5ldyBvYmplY3Qgd2UgbmVlZCB0byBjbGVhciB0aGUgY2FjaGVkIGJv
dW5kaW5nIGJveAorICAgIC8vIHRvIGF2b2lkIHVzaW5nIGdhcmJhZ2UuCisgICAgbV9ib3VuZGlu
Z0JveCA9IEZsb2F0UmVjdCgpOworICAgIFNWR1JlY3RFbGVtZW50KiByZWN0ID0gc3RhdGljX2Nh
c3Q8U1ZHUmVjdEVsZW1lbnQqPihub2RlKCkpOworICAgIEFTU0VSVChyZWN0KTsKKworICAgIGJv
b2wgbm9uU2NhbGluZ1N0cm9rZSA9IHN0eWxlKCktPnN2Z1N0eWxlKCktPnZlY3RvckVmZmVjdCgp
ID09IFZFX05PTl9TQ0FMSU5HX1NUUk9LRTsKKyAgICAvLyBGYWxsYmFjayB0byBSZW5kZXJTVkdT
aGFwZSBpZiByZWN0IGhhcyByb3VuZGVkIGNvcm5lcnMuCisgICAgaWYgKHJlY3QtPmhhc0F0dHJp
YnV0ZShTVkdOYW1lczo6cnhBdHRyKSB8fCByZWN0LT5oYXNBdHRyaWJ1dGUoU1ZHTmFtZXM6OnJ5
QXR0cikgfHwgbm9uU2NhbGluZ1N0cm9rZSkgeworICAgICAgIFJlbmRlclNWR1NoYXBlOjpjcmVh
dGVTaGFwZSgpOworICAgICAgIHNldElzUGFpbnRpbmdGYWxsYmFjayh0cnVlKTsKKyAgICAgICBy
ZXR1cm47CisgICAgfQorCisgICAgRmxvYXRTaXplIGJvdW5kaW5nQm94U2l6ZShyZWN0LT53aWR0
aCgpLnZhbHVlKHJlY3QpLCByZWN0LT5oZWlnaHQoKS52YWx1ZShyZWN0KSk7CisgICAgaWYgKGJv
dW5kaW5nQm94U2l6ZS5pc0VtcHR5KCkpCisgICAgICAgIHJldHVybjsKKworICAgIG1fYm91bmRp
bmdCb3ggPSBGbG9hdFJlY3QoRmxvYXRQb2ludChyZWN0LT54KCkudmFsdWUocmVjdCksIHJlY3Qt
PnkoKS52YWx1ZShyZWN0KSksIGJvdW5kaW5nQm94U2l6ZSk7CisKKyAgICAvLyBUbyBkZWNpZGUg
aWYgdGhlIHN0cm9rZSBjb250YWlucyBhIHBvaW50IHdlIGNyZWF0ZSB0d28gcmVjdHMgd2hpY2gg
cmVwcmVzZW50IHRoZSBpbm5lciBhbmQKKyAgICAvLyB0aGUgb3V0ZXIgc3Ryb2tlIGJvcmRlcnMu
IEEgc3Ryb2tlIGNvbnRhaW5zIHRoZSBwb2ludCwgaWYgdGhlIHBvaW50IGlzIGJldHdlZW4gdGhl
bS4KKyAgICBtX2lubmVyU3Ryb2tlUmVjdCA9IG1fYm91bmRpbmdCb3g7CisgICAgbV9vdXRlclN0
cm9rZVJlY3QgPSBtX2JvdW5kaW5nQm94OworICAgIGlmIChzdHlsZSgpLT5zdmdTdHlsZSgpLT5o
YXNTdHJva2UoKSkgeworICAgICAgICBmbG9hdCBzdHJva2VXaWR0aCA9IHRoaXMtPnN0cm9rZVdp
ZHRoKCk7CisgICAgICAgIG1faW5uZXJTdHJva2VSZWN0LmluZmxhdGUoLXN0cm9rZVdpZHRoIC8g
Mik7CisgICAgICAgIG1fb3V0ZXJTdHJva2VSZWN0LmluZmxhdGUoc3Ryb2tlV2lkdGggLyAyKTsK
KyAgICB9Cit9CisKKworRmxvYXRSZWN0IFJlbmRlclNWR1JlY3Q6Om9iamVjdEJvdW5kaW5nQm94
KCkgY29uc3QKK3sKKyAgICBpZiAoaXNQYWludGluZ0ZhbGxiYWNrKCkpCisgICAgICAgIHJldHVy
biBSZW5kZXJTVkdTaGFwZTo6b2JqZWN0Qm91bmRpbmdCb3goKTsKKyAgICByZXR1cm4gbV9ib3Vu
ZGluZ0JveDsKK30KKworRmxvYXRSZWN0IFJlbmRlclNWR1JlY3Q6OnN0cm9rZUJvdW5kaW5nQm94
KCkgY29uc3QKK3sKKyAgICBpZiAoaXNQYWludGluZ0ZhbGxiYWNrKCkpCisgICAgICAgIHJldHVy
biBSZW5kZXJTVkdTaGFwZTo6c3Ryb2tlQm91bmRpbmdCb3goKTsKKyAgICByZXR1cm4gbV9vdXRl
clN0cm9rZVJlY3Q7Cit9CisKK3ZvaWQgUmVuZGVyU1ZHUmVjdDo6ZmlsbFNoYXBlKEdyYXBoaWNz
Q29udGV4dCogY29udGV4dCkgY29uc3QKK3sKKyAgICBpZiAoIWlzUGFpbnRpbmdGYWxsYmFjaygp
KSB7CisgICAgICAgIGNvbnRleHQtPmZpbGxSZWN0KG1fYm91bmRpbmdCb3gpOworICAgICAgICBy
ZXR1cm47CisgICAgfQorICAgIFJlbmRlclNWR1NoYXBlOjpmaWxsU2hhcGUoY29udGV4dCk7Cit9
CisKK3ZvaWQgUmVuZGVyU1ZHUmVjdDo6c3Ryb2tlU2hhcGUoR3JhcGhpY3NDb250ZXh0KiBjb250
ZXh0KSBjb25zdAoreworICAgIGlmICghaXNQYWludGluZ0ZhbGxiYWNrKCkpIHsKKyAgICAgICAg
Y29udGV4dC0+c3Ryb2tlUmVjdChtX2JvdW5kaW5nQm94LCBzdHJva2VXaWR0aCgpKTsKKyAgICAg
ICAgcmV0dXJuOworICAgIH0KKyAgICBSZW5kZXJTVkdTaGFwZTo6c3Ryb2tlU2hhcGUoY29udGV4
dCk7Cit9CisKK2Jvb2wgUmVuZGVyU1ZHUmVjdDo6c2hhcGVEZXBlbmRlbnRTdHJva2VDb250YWlu
cyhjb25zdCBGbG9hdFBvaW50JiBwb2ludCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9vdXRlclN0
cm9rZVJlY3QuY29udGFpbnMocG9pbnQsIEZsb2F0UmVjdDo6SW5zaWRlT3JPblN0cm9rZSkgJiYg
IW1faW5uZXJTdHJva2VSZWN0LmNvbnRhaW5zKHBvaW50LCBGbG9hdFJlY3Q6Okluc2lkZUJ1dE5v
dE9uU3Ryb2tlKTsKK30KKworYm9vbCBSZW5kZXJTVkdSZWN0OjpzaGFwZURlcGVuZGVudEZpbGxD
b250YWlucyhjb25zdCBGbG9hdFBvaW50JiBwb2ludCwgY29uc3QgV2luZFJ1bGUgZmlsbFJ1bGUp
IGNvbnN0Cit7CisgICAgaWYgKGlzUGFpbnRpbmdGYWxsYmFjaygpKQorICAgICAgICByZXR1cm4g
UmVuZGVyU1ZHU2hhcGU6OnNoYXBlRGVwZW5kZW50RmlsbENvbnRhaW5zKHBvaW50LCBmaWxsUnVs
ZSk7CisgICAgcmV0dXJuIG1fYm91bmRpbmdCb3guY29udGFpbnMocG9pbnQueCgpLCBwb2ludC55
KCkpOworfQorCit9CisKKyNlbmRpZiAvLyBFTkFCTEUoU1ZHKQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZWN0LmggYi9Tb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1JlY3QuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwLi4zZjk1YmMwCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL3N2Zy9SZW5kZXJTVkdSZWN0LmgKQEAgLTAsMCArMSw2NCBAQAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAxMSBVbml2ZXJzaXR5IG9mIFN6ZWdlZAorICogQ29weXJpZ2h0IChDKSAyMDExIFJl
bmF0YSBIb2RvdmFuIChyZW5pQHdlYmtpdC5vcmcpCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVU5JVkVSU0lUWSBP
RiBTWkVHRUQgYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBVTklWRVJTSVRZIE9G
IFNaRUdFRCBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVO
VCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IK
KyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgor
ICovCisKKyNpZm5kZWYgUmVuZGVyU1ZHUmVjdF9oCisjZGVmaW5lIFJlbmRlclNWR1JlY3RfaAor
CisjaWYgRU5BQkxFKFNWRykKKyNpbmNsdWRlICJSZW5kZXJTVkdQYXRoLmgiCisjaW5jbHVkZSAi
U1ZHUmVjdEVsZW1lbnQuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBSZW5kZXJT
VkdSZWN0IDogcHVibGljIFJlbmRlclNWR1NoYXBlIHsKK3B1YmxpYzoKKyAgICBleHBsaWNpdCBS
ZW5kZXJTVkdSZWN0KFNWR1JlY3RFbGVtZW50Kik7CisgICAgdmlydHVhbCB+UmVuZGVyU1ZHUmVj
dCgpOworCitwcml2YXRlOgorICAgIHZpcnR1YWwgYm9vbCBpc1NWR1JlY3QoKSBjb25zdCB7IHJl
dHVybiB0cnVlOyB9CisgICAgdmlydHVhbCBjb25zdCBjaGFyKiByZW5kZXJOYW1lKCkgY29uc3Qg
eyByZXR1cm4gIlJlbmRlclNWR1JlY3QiOyB9CisKKyAgICB2aXJ0dWFsIHZvaWQgY3JlYXRlU2hh
cGUoKTsKKyAgICB2aXJ0dWFsIGJvb2wgaXNFbXB0eSgpIGNvbnN0IHsgcmV0dXJuIGhhc1BhdGgo
KSA/IFJlbmRlclNWR1NoYXBlOjppc0VtcHR5KCkgOiBtX2JvdW5kaW5nQm94LmlzRW1wdHkoKTsg
fTsKKyAgICB2aXJ0dWFsIHZvaWQgZmlsbFNoYXBlKEdyYXBoaWNzQ29udGV4dCopIGNvbnN0Owor
ICAgIHZpcnR1YWwgdm9pZCBzdHJva2VTaGFwZShHcmFwaGljc0NvbnRleHQqKSBjb25zdDsKKyAg
ICB2aXJ0dWFsIEZsb2F0UmVjdCBvYmplY3RCb3VuZGluZ0JveCgpIGNvbnN0OworICAgIHZpcnR1
YWwgRmxvYXRSZWN0IHN0cm9rZUJvdW5kaW5nQm94KCkgY29uc3Q7CisgICAgdmlydHVhbCBib29s
IHNoYXBlRGVwZW5kZW50U3Ryb2tlQ29udGFpbnMoY29uc3QgRmxvYXRQb2ludCYpIGNvbnN0Owor
ICAgIHZpcnR1YWwgYm9vbCBzaGFwZURlcGVuZGVudEZpbGxDb250YWlucyhjb25zdCBGbG9hdFBv
aW50JiwgY29uc3QgV2luZFJ1bGUpIGNvbnN0OworCitwcml2YXRlOgorICAgIEZsb2F0UmVjdCBt
X2JvdW5kaW5nQm94OworICAgIEZsb2F0UmVjdCBtX2lubmVyU3Ryb2tlUmVjdDsKKyAgICBGbG9h
dFJlY3QgbV9vdXRlclN0cm9rZVJlY3Q7Cit9OworCit9CisKKyNlbmRpZiAvLyBFTkFCTEUoU1ZH
KQorI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRl
clNWR1Jlc291cmNlLmggYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jl
c291cmNlLmgKaW5kZXggYTY3YmE3My4uZTAyMDE1NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJjZS5oCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2UuaApAQCAtMjEsNiArMjEsNyBAQAogI2Rl
ZmluZSBSZW5kZXJTVkdSZXNvdXJjZV9oCiAKICNpZiBFTkFCTEUoU1ZHKQorI2luY2x1ZGUgIlJl
bmRlclNWR1NoYXBlLmgiCiAjaW5jbHVkZSAiUmVuZGVyU3R5bGVDb25zdGFudHMuaCIKICNpbmNs
dWRlICJTVkdEb2N1bWVudEV4dGVuc2lvbnMuaCIKIApAQCAtNjEsNyArNjIsNyBAQCBwdWJsaWM6
CiAgICAgdmlydHVhbCB2b2lkIHJlbW92ZUNsaWVudEZyb21DYWNoZShSZW5kZXJPYmplY3QqLCBi
b29sIG1hcmtGb3JJbnZhbGlkYXRpb24gPSB0cnVlKSA9IDA7CiAKICAgICB2aXJ0dWFsIGJvb2wg
YXBwbHlSZXNvdXJjZShSZW5kZXJPYmplY3QqLCBSZW5kZXJTdHlsZSosIEdyYXBoaWNzQ29udGV4
dComLCB1bnNpZ25lZCBzaG9ydCByZXNvdXJjZU1vZGUpID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQg
cG9zdEFwcGx5UmVzb3VyY2UoUmVuZGVyT2JqZWN0KiwgR3JhcGhpY3NDb250ZXh0KiYsIHVuc2ln
bmVkIHNob3J0LCBjb25zdCBQYXRoKikgeyB9CisgICAgdmlydHVhbCB2b2lkIHBvc3RBcHBseVJl
c291cmNlKFJlbmRlck9iamVjdCosIEdyYXBoaWNzQ29udGV4dComLCB1bnNpZ25lZCBzaG9ydCwg
Y29uc3QgUGF0aCosIGNvbnN0IFJlbmRlclNWR1NoYXBlKikgeyB9CiAgICAgdmlydHVhbCBGbG9h
dFJlY3QgcmVzb3VyY2VCb3VuZGluZ0JveChSZW5kZXJPYmplY3QqKSA9IDA7CiAKICAgICB2aXJ0
dWFsIFJlbmRlclNWR1Jlc291cmNlVHlwZSByZXNvdXJjZVR5cGUoKSBjb25zdCA9IDA7CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291cmNlQ2xp
cHBlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291cmNl
Q2xpcHBlci5jcHAKaW5kZXggMjJiNDFmYS4uNWE2ZjQ3ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJjZUNsaXBwZXIuY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VDbGlwcGVyLmNwcApA
QCAtMjQyLDcgKzI0Miw3IEBAIGJvb2wgUmVuZGVyU1ZHUmVzb3VyY2VDbGlwcGVyOjpkcmF3Q29u
dGVudEludG9NYXNrSW1hZ2UoQ2xpcHBlckRhdGEqIGNsaXBwZXJEYXRhCiAgICAgICAgIH0KIAog
ICAgICAgICAvLyBPbmx5IHNoYXBlcywgcGF0aHMgYW5kIHRleHRzIGFyZSBhbGxvd2VkIGZvciBj
bGlwcGluZy4KLSAgICAgICAgaWYgKCFyZW5kZXJlci0+aXNTVkdQYXRoKCkgJiYgIXJlbmRlcmVy
LT5pc1NWR1RleHQoKSkKKyAgICAgICAgaWYgKCFyZW5kZXJlci0+aXNTVkdTaGFwZSgpICYmICFy
ZW5kZXJlci0+aXNTVkdUZXh0KCkpCiAgICAgICAgICAgICBjb250aW51ZTsKIAogICAgICAgICAv
LyBTYXZlIHRoZSBvbGQgUmVuZGVyU3R5bGUgb2YgdGhlIGN1cnJlbnQgb2JqZWN0IGZvciByZXN0
b3JpbmcgYWZ0ZXIgZHJhd2luZwpAQCAtMjg0LDcgKzI4NCw3IEBAIHZvaWQgUmVuZGVyU1ZHUmVz
b3VyY2VDbGlwcGVyOjpjYWxjdWxhdGVDbGlwQ29udGVudFJlcGFpbnRSZWN0KCkKICAgICAgICAg
UmVuZGVyT2JqZWN0KiByZW5kZXJlciA9IGNoaWxkTm9kZS0+cmVuZGVyZXIoKTsKICAgICAgICAg
aWYgKCFjaGlsZE5vZGUtPmlzU1ZHRWxlbWVudCgpIHx8ICFzdGF0aWNfY2FzdDxTVkdFbGVtZW50
Kj4oY2hpbGROb2RlKS0+aXNTdHlsZWQoKSB8fCAhcmVuZGVyZXIpCiAgICAgICAgICAgICBjb250
aW51ZTsKLSAgICAgICAgaWYgKCFyZW5kZXJlci0+aXNTVkdQYXRoKCkgJiYgIXJlbmRlcmVyLT5p
c1NWR1RleHQoKSAmJiAhcmVuZGVyZXItPmlzU1ZHU2hhZG93VHJlZVJvb3RDb250YWluZXIoKSkK
KyAgICAgICAgaWYgKCFyZW5kZXJlci0+aXNTVkdTaGFwZSgpICYmICFyZW5kZXJlci0+aXNTVkdU
ZXh0KCkgJiYgIXJlbmRlcmVyLT5pc1NWR1NoYWRvd1RyZWVSb290Q29udGFpbmVyKCkpCiAgICAg
ICAgICAgICBjb250aW51ZTsKICAgICAgICAgUmVuZGVyU3R5bGUqIHN0eWxlID0gcmVuZGVyZXIt
PnN0eWxlKCk7CiAgICAgICAgIGlmICghc3R5bGUgfHwgc3R5bGUtPmRpc3BsYXkoKSA9PSBOT05F
IHx8IHN0eWxlLT52aXNpYmlsaXR5KCkgIT0gVklTSUJMRSkKQEAgLTMxMCw3ICszMTAsNyBAQCBi
b29sIFJlbmRlclNWR1Jlc291cmNlQ2xpcHBlcjo6aGl0VGVzdENsaXBDb250ZW50KGNvbnN0IEZs
b2F0UmVjdCYgb2JqZWN0Qm91bmRpbgogICAgICAgICBSZW5kZXJPYmplY3QqIHJlbmRlcmVyID0g
Y2hpbGROb2RlLT5yZW5kZXJlcigpOwogICAgICAgICBpZiAoIWNoaWxkTm9kZS0+aXNTVkdFbGVt
ZW50KCkgfHwgIXN0YXRpY19jYXN0PFNWR0VsZW1lbnQqPihjaGlsZE5vZGUpLT5pc1N0eWxlZCgp
IHx8ICFyZW5kZXJlcikKICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICBpZiAoIXJlbmRl
cmVyLT5pc1NWR1BhdGgoKSAmJiAhcmVuZGVyZXItPmlzU1ZHVGV4dCgpICYmICFyZW5kZXJlci0+
aXNTVkdTaGFkb3dUcmVlUm9vdENvbnRhaW5lcigpKQorICAgICAgICBpZiAoIXJlbmRlcmVyLT5p
c1NWR1NoYXBlKCkgJiYgIXJlbmRlcmVyLT5pc1NWR1RleHQoKSAmJiAhcmVuZGVyZXItPmlzU1ZH
U2hhZG93VHJlZVJvb3RDb250YWluZXIoKSkKICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAg
ICBJbnRQb2ludCBoaXRQb2ludDsKICAgICAgICAgSGl0VGVzdFJlc3VsdCByZXN1bHQoaGl0UG9p
bnQpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdS
ZXNvdXJjZUNvbnRhaW5lci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRl
clNWR1Jlc291cmNlQ29udGFpbmVyLmNwcAppbmRleCA1NWY3N2U1Li5lOTUwZTcxIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291cmNlQ29udGFp
bmVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291
cmNlQ29udGFpbmVyLmNwcApAQCAtMTgwLDcgKzE4MCw3IEBAIHZvaWQgUmVuZGVyU1ZHUmVzb3Vy
Y2VDb250YWluZXI6OnJlZ2lzdGVyUmVzb3VyY2UoKQogLy8gRklYTUU6IFRoaXMgZG9lcyBub3Qg
YmVsb25nIGhlcmUuCiBBZmZpbmVUcmFuc2Zvcm0gUmVuZGVyU1ZHUmVzb3VyY2VDb250YWluZXI6
OnRyYW5zZm9ybU9uTm9uU2NhbGluZ1N0cm9rZShSZW5kZXJPYmplY3QqIG9iamVjdCwgY29uc3Qg
QWZmaW5lVHJhbnNmb3JtJiByZXNvdXJjZVRyYW5zZm9ybSkKIHsKLSAgICBpZiAoIW9iamVjdC0+
aXNTVkdQYXRoKCkpCisgICAgaWYgKCFvYmplY3QtPmlzU1ZHU2hhcGUoKSkKICAgICAgICAgcmV0
dXJuIHJlc291cmNlVHJhbnNmb3JtOwogCiAgICAgU1ZHU3R5bGVkVHJhbnNmb3JtYWJsZUVsZW1l
bnQqIGVsZW1lbnQgPSBzdGF0aWNfY2FzdDxTVkdTdHlsZWRUcmFuc2Zvcm1hYmxlRWxlbWVudCo+
KG9iamVjdC0+bm9kZSgpKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9z
dmcvUmVuZGVyU1ZHUmVzb3VyY2VGaWx0ZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L3N2Zy9SZW5kZXJTVkdSZXNvdXJjZUZpbHRlci5jcHAKaW5kZXggNjg5MzVkYS4uOTYxZGQzZiAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJj
ZUZpbHRlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdS
ZXNvdXJjZUZpbHRlci5jcHAKQEAgLTI1OSw3ICsyNTksNyBAQCBib29sIFJlbmRlclNWR1Jlc291
cmNlRmlsdGVyOjphcHBseVJlc291cmNlKFJlbmRlck9iamVjdCogb2JqZWN0LCBSZW5kZXJTdHls
ZSosCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLXZvaWQgUmVuZGVyU1ZHUmVzb3VyY2VGaWx0ZXI6
OnBvc3RBcHBseVJlc291cmNlKFJlbmRlck9iamVjdCogb2JqZWN0LCBHcmFwaGljc0NvbnRleHQq
JiBjb250ZXh0LCB1bnNpZ25lZCBzaG9ydCByZXNvdXJjZU1vZGUsIGNvbnN0IFBhdGgqKQordm9p
ZCBSZW5kZXJTVkdSZXNvdXJjZUZpbHRlcjo6cG9zdEFwcGx5UmVzb3VyY2UoUmVuZGVyT2JqZWN0
KiBvYmplY3QsIEdyYXBoaWNzQ29udGV4dComIGNvbnRleHQsIHVuc2lnbmVkIHNob3J0IHJlc291
cmNlTW9kZSwgY29uc3QgUGF0aCosIGNvbnN0IFJlbmRlclNWR1NoYXBlKikKIHsKICAgICBBU1NF
UlQob2JqZWN0KTsKICAgICBBU1NFUlQoY29udGV4dCk7CkBAIC0yOTMsNyArMjkzLDcgQEAgdm9p
ZCBSZW5kZXJTVkdSZXNvdXJjZUZpbHRlcjo6cG9zdEFwcGx5UmVzb3VyY2UoUmVuZGVyT2JqZWN0
KiBvYmplY3QsIEdyYXBoaWNzQ28KICAgICB9CiAKICAgICBGaWx0ZXJFZmZlY3QqIGxhc3RFZmZl
Y3QgPSBmaWx0ZXJEYXRhLT5idWlsZGVyLT5sYXN0RWZmZWN0KCk7Ci0gICAgCisKICAgICBpZiAo
bGFzdEVmZmVjdCAmJiAhZmlsdGVyRGF0YS0+Ym91bmRhcmllcy5pc0VtcHR5KCkgJiYgIWxhc3RF
ZmZlY3QtPmZpbHRlclByaW1pdGl2ZVN1YnJlZ2lvbigpLmlzRW1wdHkoKSkgewogICAgICAgICAv
LyBUaGlzIGlzIHRoZSByZWFsIGZpbHRlcmluZyBvZiB0aGUgb2JqZWN0LiBJdCBqdXN0IG5lZWRz
IHRvIGJlIGNhbGxlZCBvbiB0aGUKICAgICAgICAgLy8gaW5pdGlhbCBmaWx0ZXJpbmcgcHJvY2Vz
cy4gV2UganVzdCB0YWtlIHRoZSBzdG9yZWQgZmlsdGVyIHJlc3VsdCBvbiBhCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291cmNlRmlsdGVyLmgg
Yi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291cmNlRmlsdGVyLmgK
aW5kZXggNWE1YjA5Mi4uZmY2MWI3MSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJjZUZpbHRlci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VGaWx0ZXIuaApAQCAtNzIsNyArNzIsNyBAQCBw
dWJsaWM6CiAgICAgdmlydHVhbCB2b2lkIHJlbW92ZUNsaWVudEZyb21DYWNoZShSZW5kZXJPYmpl
Y3QqLCBib29sIG1hcmtGb3JJbnZhbGlkYXRpb24gPSB0cnVlKTsKIAogICAgIHZpcnR1YWwgYm9v
bCBhcHBseVJlc291cmNlKFJlbmRlck9iamVjdCosIFJlbmRlclN0eWxlKiwgR3JhcGhpY3NDb250
ZXh0KiYsIHVuc2lnbmVkIHNob3J0IHJlc291cmNlTW9kZSk7Ci0gICAgdmlydHVhbCB2b2lkIHBv
c3RBcHBseVJlc291cmNlKFJlbmRlck9iamVjdCosIEdyYXBoaWNzQ29udGV4dComLCB1bnNpZ25l
ZCBzaG9ydCByZXNvdXJjZU1vZGUsIGNvbnN0IFBhdGgqKTsKKyAgICB2aXJ0dWFsIHZvaWQgcG9z
dEFwcGx5UmVzb3VyY2UoUmVuZGVyT2JqZWN0KiwgR3JhcGhpY3NDb250ZXh0KiYsIHVuc2lnbmVk
IHNob3J0IHJlc291cmNlTW9kZSwgY29uc3QgUGF0aCosIGNvbnN0IFJlbmRlclNWR1NoYXBlKik7
CiAKICAgICB2aXJ0dWFsIEZsb2F0UmVjdCByZXNvdXJjZUJvdW5kaW5nQm94KFJlbmRlck9iamVj
dCopOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNW
R1Jlc291cmNlR3JhZGllbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5k
ZXJTVkdSZXNvdXJjZUdyYWRpZW50LmNwcAppbmRleCA1ZTMxYjc2Li4yMjQzM2NmIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291cmNlR3JhZGll
bnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVzb3Vy
Y2VHcmFkaWVudC5jcHAKQEAgLTI3LDYgKzI3LDcgQEAKIAogI2luY2x1ZGUgIkdyYWRpZW50QXR0
cmlidXRlcy5oIgogI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgorI2luY2x1ZGUgIlJlbmRl
clNWR1NoYXBlLmgiCiAjaW5jbHVkZSAiUmVuZGVyU1ZHVGV4dC5oIgogI2luY2x1ZGUgIlNWR0lt
YWdlQnVmZmVyVG9vbHMuaCIKICNpbmNsdWRlICJTVkdSZW5kZXJTdXBwb3J0LmgiCkBAIC0yMzEs
NyArMjMyLDcgQEAgYm9vbCBSZW5kZXJTVkdSZXNvdXJjZUdyYWRpZW50OjphcHBseVJlc291cmNl
KFJlbmRlck9iamVjdCogb2JqZWN0LCBSZW5kZXJTdHlsZSoKICAgICByZXR1cm4gdHJ1ZTsKIH0K
IAotdm9pZCBSZW5kZXJTVkdSZXNvdXJjZUdyYWRpZW50Ojpwb3N0QXBwbHlSZXNvdXJjZShSZW5k
ZXJPYmplY3QqIG9iamVjdCwgR3JhcGhpY3NDb250ZXh0KiYgY29udGV4dCwgdW5zaWduZWQgc2hv
cnQgcmVzb3VyY2VNb2RlLCBjb25zdCBQYXRoKiBwYXRoKQordm9pZCBSZW5kZXJTVkdSZXNvdXJj
ZUdyYWRpZW50Ojpwb3N0QXBwbHlSZXNvdXJjZShSZW5kZXJPYmplY3QqIG9iamVjdCwgR3JhcGhp
Y3NDb250ZXh0KiYgY29udGV4dCwgdW5zaWduZWQgc2hvcnQgcmVzb3VyY2VNb2RlLCBjb25zdCBQ
YXRoKiBwYXRoLCBjb25zdCBSZW5kZXJTVkdTaGFwZSogc2hhcGUpCiB7CiAgICAgQVNTRVJUKGNv
bnRleHQpOwogICAgIEFTU0VSVChyZXNvdXJjZU1vZGUgIT0gQXBwbHlUb0RlZmF1bHRNb2RlKTsK
QEAgLTI1OSwxMSArMjYwLDE5IEBAIHZvaWQgUmVuZGVyU1ZHUmVzb3VyY2VHcmFkaWVudDo6cG9z
dEFwcGx5UmVzb3VyY2UoUmVuZGVyT2JqZWN0KiBvYmplY3QsIEdyYXBoaWNzCiAjZWxzZQogICAg
ICAgICBVTlVTRURfUEFSQU0ob2JqZWN0KTsKICNlbmRpZgotICAgIH0gZWxzZSBpZiAocGF0aCkg
ewotICAgICAgICBpZiAocmVzb3VyY2VNb2RlICYgQXBwbHlUb0ZpbGxNb2RlKQotICAgICAgICAg
ICAgY29udGV4dC0+ZmlsbFBhdGgoKnBhdGgpOwotICAgICAgICBlbHNlIGlmIChyZXNvdXJjZU1v
ZGUgJiBBcHBseVRvU3Ryb2tlTW9kZSkKLSAgICAgICAgICAgIGNvbnRleHQtPnN0cm9rZVBhdGgo
KnBhdGgpOworICAgIH0gZWxzZSB7CisgICAgICAgIGlmIChyZXNvdXJjZU1vZGUgJiBBcHBseVRv
RmlsbE1vZGUpIHsKKyAgICAgICAgICAgIGlmIChwYXRoKQorICAgICAgICAgICAgICAgIGNvbnRl
eHQtPmZpbGxQYXRoKCpwYXRoKTsKKyAgICAgICAgICAgIGVsc2UgaWYgKHNoYXBlKQorICAgICAg
ICAgICAgICAgIHNoYXBlLT5maWxsU2hhcGUoY29udGV4dCk7CisgICAgICAgIH0KKyAgICAgICAg
aWYgKHJlc291cmNlTW9kZSAmIEFwcGx5VG9TdHJva2VNb2RlKSB7CisgICAgICAgICAgICBpZiAo
cGF0aCkKKyAgICAgICAgICAgICAgICBjb250ZXh0LT5zdHJva2VQYXRoKCpwYXRoKTsKKyAgICAg
ICAgICAgIGVsc2UgaWYgKHNoYXBlKQorICAgICAgICAgICAgICAgIHNoYXBlLT5zdHJva2VTaGFw
ZShjb250ZXh0KTsKKyAgICAgICAgfQogICAgIH0KIAogICAgIGNvbnRleHQtPnJlc3RvcmUoKTsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVzb3Vy
Y2VHcmFkaWVudC5oIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNv
dXJjZUdyYWRpZW50LmgKaW5kZXggZGY0OTJlMi4uM2ZjY2Q0NCAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJjZUdyYWRpZW50LmgKKysrIGIv
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJjZUdyYWRpZW50LmgK
QEAgLTUwLDcgKzUwLDcgQEAgcHVibGljOgogICAgIHZpcnR1YWwgdm9pZCByZW1vdmVDbGllbnRG
cm9tQ2FjaGUoUmVuZGVyT2JqZWN0KiwgYm9vbCBtYXJrRm9ySW52YWxpZGF0aW9uID0gdHJ1ZSk7
CiAKICAgICB2aXJ0dWFsIGJvb2wgYXBwbHlSZXNvdXJjZShSZW5kZXJPYmplY3QqLCBSZW5kZXJT
dHlsZSosIEdyYXBoaWNzQ29udGV4dComLCB1bnNpZ25lZCBzaG9ydCByZXNvdXJjZU1vZGUpOwot
ICAgIHZpcnR1YWwgdm9pZCBwb3N0QXBwbHlSZXNvdXJjZShSZW5kZXJPYmplY3QqLCBHcmFwaGlj
c0NvbnRleHQqJiwgdW5zaWduZWQgc2hvcnQgcmVzb3VyY2VNb2RlLCBjb25zdCBQYXRoKik7Cisg
ICAgdmlydHVhbCB2b2lkIHBvc3RBcHBseVJlc291cmNlKFJlbmRlck9iamVjdCosIEdyYXBoaWNz
Q29udGV4dComLCB1bnNpZ25lZCBzaG9ydCByZXNvdXJjZU1vZGUsIGNvbnN0IFBhdGgqLCBjb25z
dCBSZW5kZXJTVkdTaGFwZSopOwogICAgIHZpcnR1YWwgRmxvYXRSZWN0IHJlc291cmNlQm91bmRp
bmdCb3goUmVuZGVyT2JqZWN0KikgeyByZXR1cm4gRmxvYXRSZWN0KCk7IH0KIAogcHJvdGVjdGVk
OgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNv
dXJjZVBhdHRlcm4uY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdS
ZXNvdXJjZVBhdHRlcm4uY3BwCmluZGV4IDhkY2UwODQuLmJjNDQzZTUgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VQYXR0ZXJuLmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291cmNlUGF0dGVy
bi5jcHAKQEAgLTE4OCwxNiArMTg4LDIyIEBAIGJvb2wgUmVuZGVyU1ZHUmVzb3VyY2VQYXR0ZXJu
OjphcHBseVJlc291cmNlKFJlbmRlck9iamVjdCogb2JqZWN0LCBSZW5kZXJTdHlsZSoKICAgICBy
ZXR1cm4gdHJ1ZTsKIH0KIAotdm9pZCBSZW5kZXJTVkdSZXNvdXJjZVBhdHRlcm46OnBvc3RBcHBs
eVJlc291cmNlKFJlbmRlck9iamVjdCosIEdyYXBoaWNzQ29udGV4dComIGNvbnRleHQsIHVuc2ln
bmVkIHNob3J0IHJlc291cmNlTW9kZSwgY29uc3QgUGF0aCogcGF0aCkKK3ZvaWQgUmVuZGVyU1ZH
UmVzb3VyY2VQYXR0ZXJuOjpwb3N0QXBwbHlSZXNvdXJjZShSZW5kZXJPYmplY3QqLCBHcmFwaGlj
c0NvbnRleHQqJiBjb250ZXh0LCB1bnNpZ25lZCBzaG9ydCByZXNvdXJjZU1vZGUsIGNvbnN0IFBh
dGgqIHBhdGgsIGNvbnN0IFJlbmRlclNWR1NoYXBlKiBzaGFwZSkKIHsKICAgICBBU1NFUlQoY29u
dGV4dCk7CiAgICAgQVNTRVJUKHJlc291cmNlTW9kZSAhPSBBcHBseVRvRGVmYXVsdE1vZGUpOwog
Ci0gICAgaWYgKHBhdGggJiYgIShyZXNvdXJjZU1vZGUgJiBBcHBseVRvVGV4dE1vZGUpKSB7Ci0g
ICAgICAgIGlmIChyZXNvdXJjZU1vZGUgJiBBcHBseVRvRmlsbE1vZGUpCisgICAgaWYgKHJlc291
cmNlTW9kZSAmIEFwcGx5VG9GaWxsTW9kZSkgeworICAgICAgICBpZiAocGF0aCkKICAgICAgICAg
ICAgIGNvbnRleHQtPmZpbGxQYXRoKCpwYXRoKTsKLSAgICAgICAgZWxzZSBpZiAocmVzb3VyY2VN
b2RlICYgQXBwbHlUb1N0cm9rZU1vZGUpCisgICAgICAgIGVsc2UgaWYgKHNoYXBlKQorICAgICAg
ICAgICAgc2hhcGUtPmZpbGxTaGFwZShjb250ZXh0KTsKKyAgICB9CisgICAgaWYgKHJlc291cmNl
TW9kZSAmIEFwcGx5VG9TdHJva2VNb2RlKSB7CisgICAgICAgIGlmIChwYXRoKQogICAgICAgICAg
ICAgY29udGV4dC0+c3Ryb2tlUGF0aCgqcGF0aCk7CisgICAgICAgIGVsc2UgaWYgKHNoYXBlKQor
ICAgICAgICAgICAgc2hhcGUtPnN0cm9rZVNoYXBlKGNvbnRleHQpOwogICAgIH0KIAogICAgIGNv
bnRleHQtPnJlc3RvcmUoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9z
dmcvUmVuZGVyU1ZHUmVzb3VyY2VQYXR0ZXJuLmggYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
c3ZnL1JlbmRlclNWR1Jlc291cmNlUGF0dGVybi5oCmluZGV4IDllODY0ODYuLjQwNDkyNDIgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VQ
YXR0ZXJuLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNv
dXJjZVBhdHRlcm4uaApAQCAtNTIsNyArNTIsNyBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCB2b2lk
IHJlbW92ZUNsaWVudEZyb21DYWNoZShSZW5kZXJPYmplY3QqLCBib29sIG1hcmtGb3JJbnZhbGlk
YXRpb24gPSB0cnVlKTsKIAogICAgIHZpcnR1YWwgYm9vbCBhcHBseVJlc291cmNlKFJlbmRlck9i
amVjdCosIFJlbmRlclN0eWxlKiwgR3JhcGhpY3NDb250ZXh0KiYsIHVuc2lnbmVkIHNob3J0IHJl
c291cmNlTW9kZSk7Ci0gICAgdmlydHVhbCB2b2lkIHBvc3RBcHBseVJlc291cmNlKFJlbmRlck9i
amVjdCosIEdyYXBoaWNzQ29udGV4dComLCB1bnNpZ25lZCBzaG9ydCByZXNvdXJjZU1vZGUsIGNv
bnN0IFBhdGgqKTsKKyAgICB2aXJ0dWFsIHZvaWQgcG9zdEFwcGx5UmVzb3VyY2UoUmVuZGVyT2Jq
ZWN0KiwgR3JhcGhpY3NDb250ZXh0KiYsIHVuc2lnbmVkIHNob3J0IHJlc291cmNlTW9kZSwgY29u
c3QgUGF0aCosIGNvbnN0IFJlbmRlclNWR1NoYXBlKik7CiAgICAgdmlydHVhbCBGbG9hdFJlY3Qg
cmVzb3VyY2VCb3VuZGluZ0JveChSZW5kZXJPYmplY3QqKSB7IHJldHVybiBGbG9hdFJlY3QoKTsg
fQogCiAgICAgdmlydHVhbCBSZW5kZXJTVkdSZXNvdXJjZVR5cGUgcmVzb3VyY2VUeXBlKCkgY29u
c3QgeyByZXR1cm4gc19yZXNvdXJjZVR5cGU7IH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VTb2xpZENvbG9yLmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VTb2xpZENvbG9yLmNwcAppbmRl
eCA1YmUyYWY2Li42M2RmNzUxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
c3ZnL1JlbmRlclNWR1Jlc291cmNlU29saWRDb2xvci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJjZVNvbGlkQ29sb3IuY3BwCkBAIC0yMyw2ICsy
Myw3IEBACiAjaW5jbHVkZSAiUmVuZGVyU1ZHUmVzb3VyY2VTb2xpZENvbG9yLmgiCiAKICNpbmNs
dWRlICJHcmFwaGljc0NvbnRleHQuaCIKKyNpbmNsdWRlICJSZW5kZXJTVkdTaGFwZS5oIgogI2lu
Y2x1ZGUgIlJlbmRlclN0eWxlLmgiCiAjaW5jbHVkZSAiU1ZHUmVuZGVyU3VwcG9ydC5oIgogCkBA
IC03NCwxNiArNzUsMjIgQEAgYm9vbCBSZW5kZXJTVkdSZXNvdXJjZVNvbGlkQ29sb3I6OmFwcGx5
UmVzb3VyY2UoUmVuZGVyT2JqZWN0KiBvYmplY3QsIFJlbmRlclN0eWwKICAgICByZXR1cm4gdHJ1
ZTsKIH0KIAotdm9pZCBSZW5kZXJTVkdSZXNvdXJjZVNvbGlkQ29sb3I6OnBvc3RBcHBseVJlc291
cmNlKFJlbmRlck9iamVjdCosIEdyYXBoaWNzQ29udGV4dComIGNvbnRleHQsIHVuc2lnbmVkIHNo
b3J0IHJlc291cmNlTW9kZSwgY29uc3QgUGF0aCogcGF0aCkKK3ZvaWQgUmVuZGVyU1ZHUmVzb3Vy
Y2VTb2xpZENvbG9yOjpwb3N0QXBwbHlSZXNvdXJjZShSZW5kZXJPYmplY3QqLCBHcmFwaGljc0Nv
bnRleHQqJiBjb250ZXh0LCB1bnNpZ25lZCBzaG9ydCByZXNvdXJjZU1vZGUsIGNvbnN0IFBhdGgq
IHBhdGgsIGNvbnN0IFJlbmRlclNWR1NoYXBlKiBzaGFwZSkKIHsKICAgICBBU1NFUlQoY29udGV4
dCk7CiAgICAgQVNTRVJUKHJlc291cmNlTW9kZSAhPSBBcHBseVRvRGVmYXVsdE1vZGUpOwogCi0g
ICAgaWYgKHBhdGggJiYgIShyZXNvdXJjZU1vZGUgJiBBcHBseVRvVGV4dE1vZGUpKSB7Ci0gICAg
ICAgIGlmIChyZXNvdXJjZU1vZGUgJiBBcHBseVRvRmlsbE1vZGUpCisgICAgaWYgKHJlc291cmNl
TW9kZSAmIEFwcGx5VG9GaWxsTW9kZSkgeworICAgICAgICBpZiAocGF0aCkKICAgICAgICAgICAg
IGNvbnRleHQtPmZpbGxQYXRoKCpwYXRoKTsKLSAgICAgICAgZWxzZSBpZiAocmVzb3VyY2VNb2Rl
ICYgQXBwbHlUb1N0cm9rZU1vZGUpCisgICAgICAgIGVsc2UgaWYgKHNoYXBlKQorICAgICAgICAg
ICAgc2hhcGUtPmZpbGxTaGFwZShjb250ZXh0KTsKKyAgICB9CisgICAgaWYgKHJlc291cmNlTW9k
ZSAmIEFwcGx5VG9TdHJva2VNb2RlKSB7CisgICAgICAgIGlmIChwYXRoKQogICAgICAgICAgICAg
Y29udGV4dC0+c3Ryb2tlUGF0aCgqcGF0aCk7CisgICAgICAgIGVsc2UgaWYgKHNoYXBlKQorICAg
ICAgICAgICAgc2hhcGUtPnN0cm9rZVNoYXBlKGNvbnRleHQpOwogICAgIH0KIH0KIApkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJjZVNvbGlk
Q29sb3IuaCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VT
b2xpZENvbG9yLmgKaW5kZXggMDJjZWIzMS4uOGJiZmRjZCAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJjZVNvbGlkQ29sb3IuaAorKysgYi9T
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291cmNlU29saWRDb2xvci5o
CkBAIC0zNiw3ICszNiw3IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIHZvaWQgcmVtb3ZlQ2xpZW50
RnJvbUNhY2hlKFJlbmRlck9iamVjdCosIGJvb2wgPSB0cnVlKSB7IH0KIAogICAgIHZpcnR1YWwg
Ym9vbCBhcHBseVJlc291cmNlKFJlbmRlck9iamVjdCosIFJlbmRlclN0eWxlKiwgR3JhcGhpY3ND
b250ZXh0KiYsIHVuc2lnbmVkIHNob3J0IHJlc291cmNlTW9kZSk7Ci0gICAgdmlydHVhbCB2b2lk
IHBvc3RBcHBseVJlc291cmNlKFJlbmRlck9iamVjdCosIEdyYXBoaWNzQ29udGV4dComLCB1bnNp
Z25lZCBzaG9ydCByZXNvdXJjZU1vZGUsIGNvbnN0IFBhdGgqKTsKKyAgICB2aXJ0dWFsIHZvaWQg
cG9zdEFwcGx5UmVzb3VyY2UoUmVuZGVyT2JqZWN0KiwgR3JhcGhpY3NDb250ZXh0KiYsIHVuc2ln
bmVkIHNob3J0IHJlc291cmNlTW9kZSwgY29uc3QgUGF0aCosIGNvbnN0IFJlbmRlclNWR1NoYXBl
Kik7CiAgICAgdmlydHVhbCBGbG9hdFJlY3QgcmVzb3VyY2VCb3VuZGluZ0JveChSZW5kZXJPYmpl
Y3QqKSB7IHJldHVybiBGbG9hdFJlY3QoKTsgfQogCiAgICAgdmlydHVhbCBSZW5kZXJTVkdSZXNv
dXJjZVR5cGUgcmVzb3VyY2VUeXBlKCkgY29uc3QgeyByZXR1cm4gc19yZXNvdXJjZVR5cGU7IH0K
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHU2hhcGUu
Y3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdTaGFwZS5jcHAKbmV3
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODBkZDc2OAotLS0gL2Rldi9udWxsCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHU2hhcGUuY3BwCkBAIC0w
LDAgKzEsNDQ2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1LCAyMDA3IE5pa29s
YXMgWmltbWVybWFubiA8emltbWVybWFubkBrZGUub3JnPgorICogQ29weXJpZ2h0IChDKSAyMDA0
LCAyMDA1LCAyMDA4IFJvYiBCdWlzIDxidWlzQGtkZS5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIw
MDUsIDIwMDcgRXJpYyBTZWlkZWwgPGVyaWNAd2Via2l0Lm9yZz4KKyAqIENvcHlyaWdodCAoQykg
MjAwOSBHb29nbGUsIEluYy4KKyAqIENvcHlyaWdodCAoQykgMjAwOSBEaXJrIFNjaHVsemUgPGty
aXRAd2Via2l0Lm9yZz4KKyAqIENvcHlyaWdodCAoQykgUmVzZWFyY2ggSW4gTW90aW9uIExpbWl0
ZWQgMjAxMC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwOSBKZWZm
IFNjaGlsbGVyIDxjb2RlZHJlYWRAZ21haWwuY29tPgorICogQ29weXJpZ2h0IChDKSAyMDExIFJl
bmF0YSBIb2RvdmFuIDxyZW5pQHdlYmtpdC5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgVW5p
dmVyc2l0eSBvZiBTemVnZWQKKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsg
eW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRl
cm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJs
aXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9u
IDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24u
CisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQg
d2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZl
biB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJh
bCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2
ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vu
c2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIu
ICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMu
LCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0x
MzAxLCBVU0EuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorCisjaWYgRU5BQkxFKFNWRykK
KyNpbmNsdWRlICJSZW5kZXJTVkdTaGFwZS5oIgorCisjaW5jbHVkZSAiRmxvYXRQb2ludC5oIgor
I2luY2x1ZGUgIkZsb2F0UXVhZC5oIgorI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgorI2lu
Y2x1ZGUgIkhpdFRlc3RSZXF1ZXN0LmgiCisjaW5jbHVkZSAiTGF5b3V0UmVwYWludGVyLmgiCisj
aW5jbHVkZSAiUG9pbnRlckV2ZW50c0hpdFJ1bGVzLmgiCisjaW5jbHVkZSAiUmVuZGVyU1ZHQ29u
dGFpbmVyLmgiCisjaW5jbHVkZSAiUmVuZGVyU1ZHUmVzb3VyY2VNYXJrZXIuaCIKKyNpbmNsdWRl
ICJSZW5kZXJTVkdSZXNvdXJjZVNvbGlkQ29sb3IuaCIKKyNpbmNsdWRlICJTVkdQYXRoRWxlbWVu
dC5oIgorI2luY2x1ZGUgIlNWR1JlbmRlclN1cHBvcnQuaCIKKyNpbmNsdWRlICJTVkdSZXNvdXJj
ZXMuaCIKKyNpbmNsdWRlICJTVkdTdHlsZWRUcmFuc2Zvcm1hYmxlRWxlbWVudC5oIgorI2luY2x1
ZGUgIlNWR1RyYW5zZm9ybUxpc3QuaCIKKyNpbmNsdWRlICJTVkdVUklSZWZlcmVuY2UuaCIKKyNp
bmNsdWRlICJTdHJva2VTdHlsZUFwcGxpZXIuaCIKKyNpbmNsdWRlIDx3dGYvTWF0aEV4dHJhcy5o
PgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK1JlbmRlclNWR1NoYXBlOjpSZW5kZXJTVkdTaGFw
ZShTVkdTdHlsZWRUcmFuc2Zvcm1hYmxlRWxlbWVudCogbm9kZSkKKyAgICA6IFJlbmRlclNWR01v
ZGVsT2JqZWN0KG5vZGUpCisgICAgLCBtX25lZWRzQm91bmRhcmllc1VwZGF0ZShmYWxzZSkgLy8g
RGVmYXVsdCBpcyBmYWxzZSwgdGhlIGNhY2hlZCByZWN0cyBhcmUgZW1wdHkgZnJvbSB0aGUgYmVn
aW5uaW5nLgorICAgICwgbV9uZWVkc1NoYXBlVXBkYXRlKHRydWUpIC8vIERlZmF1bHQgaXMgdHJ1
ZSwgc28gd2UgZ3JhYiBhIFBhdGggb2JqZWN0IG9uY2UgZnJvbSBTVkdTdHlsZWRUcmFuc2Zvcm1h
YmxlRWxlbWVudC4KKyAgICAsIG1fbmVlZHNUcmFuc2Zvcm1VcGRhdGUodHJ1ZSkgLy8gRGVmYXVs
dCBpcyB0cnVlLCBzbyB3ZSBncmFiIGEgQWZmaW5lVHJhbnNmb3JtIG9iamVjdCBvbmNlIGZyb20g
U1ZHU3R5bGVkVHJhbnNmb3JtYWJsZUVsZW1lbnQuCisgICAgLCBtX2ZpbGxGYWxsYmFjayhmYWxz
ZSkKK3sKK30KKworUmVuZGVyU1ZHU2hhcGU6OlJlbmRlclNWR1NoYXBlKFNWR1N0eWxlZFRyYW5z
Zm9ybWFibGVFbGVtZW50KiBub2RlLCBQYXRoKiBwYXRoLCBib29sIGlzRmlsbEZhbGxiYWNrKQor
ICAgIDogUmVuZGVyU1ZHTW9kZWxPYmplY3Qobm9kZSkKKyAgICAsIG1fcGF0aChhZG9wdFB0cihw
YXRoKSkKKyAgICAsIG1fZmlsbEZhbGxiYWNrKGlzRmlsbEZhbGxiYWNrKQoreworfQorCitSZW5k
ZXJTVkdTaGFwZTo6flJlbmRlclNWR1NoYXBlKCkKK3sKK30KKwordm9pZCBSZW5kZXJTVkdTaGFw
ZTo6Y3JlYXRlU2hhcGUoKQoreworICAgIEFTU0VSVCghbV9wYXRoKTsKKyAgICBtX3BhdGggPSBh
ZG9wdFB0cihuZXcgUGF0aCk7CisgICAgQVNTRVJUKGlzRW1wdHkoKSk7CisKKyAgICBTVkdQYXRo
RWxlbWVudCogZWxlbWVudCA9IHN0YXRpY19jYXN0PFNWR1BhdGhFbGVtZW50Kj4obm9kZSgpKTsK
KyAgICBlbGVtZW50LT50b1BhdGhEYXRhKHBhdGgoKSk7Cit9CisKK2Jvb2wgUmVuZGVyU1ZHU2hh
cGU6OmlzRW1wdHkoKSBjb25zdAoreworICAgIHJldHVybiBtX3BhdGgtPmlzRW1wdHkoKTsKK30K
Kwordm9pZCBSZW5kZXJTVkdTaGFwZTo6ZmlsbFNoYXBlKEdyYXBoaWNzQ29udGV4dCogY29udGV4
dCkgY29uc3QKK3sKKyAgICBjb250ZXh0LT5maWxsUGF0aChwYXRoKCkpOworfQorCitGbG9hdFJl
Y3QgUmVuZGVyU1ZHU2hhcGU6Om9iamVjdEJvdW5kaW5nQm94KCkgY29uc3QKK3sKKyAgICByZXR1
cm4gbV9wYXRoLT5ib3VuZGluZ1JlY3QoKTsKK30KKworRmxvYXRSZWN0IFJlbmRlclNWR1NoYXBl
OjpzdHJva2VCb3VuZGluZ0JveCgpIGNvbnN0Cit7CisgICAgQm91bmRpbmdSZWN0U3Ryb2tlU3R5
bGVBcHBsaWVyIHN0cm9rZVN0eWxlKHRoaXMsIHN0eWxlKCkpOworICAgIHJldHVybiBtX3BhdGgt
PnN0cm9rZUJvdW5kaW5nUmVjdCgmc3Ryb2tlU3R5bGUpOworfQorCit2b2lkIFJlbmRlclNWR1No
YXBlOjpzdHJva2VTaGFwZShHcmFwaGljc0NvbnRleHQqIGNvbnRleHQpIGNvbnN0Cit7CisgICAg
Y29udGV4dC0+c3Ryb2tlUGF0aChwYXRoKCkpOworfQorCitib29sIFJlbmRlclNWR1NoYXBlOjpz
aGFwZURlcGVuZGVudFN0cm9rZUNvbnRhaW5zKGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50KSBjb25z
dAoreworICAgIEJvdW5kaW5nUmVjdFN0cm9rZVN0eWxlQXBwbGllciBhcHBsaWVyKHRoaXMsIHN0
eWxlKCkpOworICAgIHJldHVybiBtX3BhdGgtPnN0cm9rZUNvbnRhaW5zKCZhcHBsaWVyLCBwb2lu
dCk7Cit9CisKK2Jvb2wgUmVuZGVyU1ZHU2hhcGU6OnNoYXBlRGVwZW5kZW50RmlsbENvbnRhaW5z
KGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50LCBjb25zdCBXaW5kUnVsZSBmaWxsUnVsZSkgY29uc3QK
K3sKKyAgICByZXR1cm4gbV9wYXRoLT5jb250YWlucyhwb2ludCwgZmlsbFJ1bGUpOworfQorCiti
b29sIFJlbmRlclNWR1NoYXBlOjpmaWxsQ29udGFpbnMoY29uc3QgRmxvYXRQb2ludCYgcG9pbnQs
IGJvb2wgcmVxdWlyZXNGaWxsLCBjb25zdCBXaW5kUnVsZSBmaWxsUnVsZSkKK3sKKyAgICBpZiAo
IW1fZmlsbEJvdW5kaW5nQm94LmNvbnRhaW5zKHBvaW50KSkKKyAgICAgICAgcmV0dXJuIGZhbHNl
OworCisgICAgQ29sb3IgZmFsbGJhY2tDb2xvcjsKKyAgICBpZiAocmVxdWlyZXNGaWxsICYmICFS
ZW5kZXJTVkdSZXNvdXJjZTo6ZmlsbFBhaW50aW5nUmVzb3VyY2UodGhpcywgc3R5bGUoKSwgZmFs
bGJhY2tDb2xvcikpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIHJldHVybiBzaGFwZURl
cGVuZGVudEZpbGxDb250YWlucyhwb2ludCwgZmlsbFJ1bGUpOworfQorCitib29sIFJlbmRlclNW
R1NoYXBlOjpzdHJva2VDb250YWlucyhjb25zdCBGbG9hdFBvaW50JiBwb2ludCwgYm9vbCByZXF1
aXJlc1N0cm9rZSkKK3sKKyAgICBpZiAoIW1fc3Ryb2tlQW5kTWFya2VyQm91bmRpbmdCb3guY29u
dGFpbnMocG9pbnQpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBDb2xvciBmYWxsYmFj
a0NvbG9yOworICAgIGlmIChyZXF1aXJlc1N0cm9rZSAmJiAhUmVuZGVyU1ZHUmVzb3VyY2U6OnN0
cm9rZVBhaW50aW5nUmVzb3VyY2UodGhpcywgc3R5bGUoKSwgZmFsbGJhY2tDb2xvcikpCisgICAg
ICAgIHJldHVybiBmYWxzZTsKKworICAgIGlmIChzaG91bGRTdHJva2VaZXJvTGVuZ3RoU3VicGF0
aCgpKQorICAgICAgICByZXR1cm4gemVyb0xlbmd0aFN1YnBhdGhSZWN0KCkuY29udGFpbnMocG9p
bnQpOworCisgICAgY29uc3QgU1ZHUmVuZGVyU3R5bGUqIHN2Z1N0eWxlID0gc3R5bGUoKS0+c3Zn
U3R5bGUoKTsKKyAgICBpZiAoIXN2Z1N0eWxlLT5zdHJva2VEYXNoQXJyYXkoKS5pc0VtcHR5KCkg
fHwgc3ZnU3R5bGUtPnN0cm9rZU1pdGVyTGltaXQoKSAhPSBzdmdTdHlsZS0+aW5pdGlhbFN0cm9r
ZU1pdGVyTGltaXQoKQorICAgICAgICB8fCBzdmdTdHlsZS0+am9pblN0eWxlKCkgIT0gc3ZnU3R5
bGUtPmluaXRpYWxKb2luU3R5bGUoKSB8fCBzdmdTdHlsZS0+Y2FwU3R5bGUoKSAhPSBzdmdTdHls
ZS0+aW5pdGlhbENhcFN0eWxlKCkgfHwgc3RhdGljX2Nhc3Q8U1ZHRWxlbWVudCo+KG5vZGUoKSkt
PmlzU3R5bGVkKCkpIHsKKyAgICAgICAgaWYgKCFtX3BhdGgpCisgICAgICAgICAgICBSZW5kZXJT
VkdTaGFwZTo6Y3JlYXRlU2hhcGUoKTsKKyAgICAgICAgcmV0dXJuIFJlbmRlclNWR1NoYXBlOjpz
aGFwZURlcGVuZGVudFN0cm9rZUNvbnRhaW5zKHBvaW50KTsKKyAgICB9CisgICAgcmV0dXJuIHNo
YXBlRGVwZW5kZW50U3Ryb2tlQ29udGFpbnMocG9pbnQpOworfQorCit2b2lkIFJlbmRlclNWR1No
YXBlOjpsYXlvdXQoKQoreworICAgIExheW91dFJlcGFpbnRlciByZXBhaW50ZXIoKnRoaXMsIGNo
ZWNrRm9yUmVwYWludER1cmluZ0xheW91dCgpICYmIHNlbGZOZWVkc0xheW91dCgpKTsKKyAgICBT
VkdTdHlsZWRUcmFuc2Zvcm1hYmxlRWxlbWVudCogZWxlbWVudCA9IHN0YXRpY19jYXN0PFNWR1N0
eWxlZFRyYW5zZm9ybWFibGVFbGVtZW50Kj4obm9kZSgpKTsKKworICAgIGJvb2wgdXBkYXRlQ2Fj
aGVkQm91bmRhcmllc0luUGFyZW50cyA9IGZhbHNlOworCisgICAgYm9vbCBuZWVkc1NoYXBlVXBk
YXRlID0gbV9uZWVkc1NoYXBlVXBkYXRlOworICAgIGlmIChuZWVkc1NoYXBlVXBkYXRlKSB7Cisg
ICAgICAgIGNyZWF0ZVNoYXBlKCk7CisgICAgICAgIG1fbmVlZHNTaGFwZVVwZGF0ZSA9IGZhbHNl
OworICAgICAgICB1cGRhdGVDYWNoZWRCb3VuZGFyaWVzSW5QYXJlbnRzID0gdHJ1ZTsKKyAgICB9
CisKKyAgICBpZiAobV9uZWVkc1RyYW5zZm9ybVVwZGF0ZSkgeworICAgICAgICBtX2xvY2FsVHJh
bnNmb3JtID0gZWxlbWVudC0+YW5pbWF0ZWRMb2NhbFRyYW5zZm9ybSgpOworICAgICAgICBtX25l
ZWRzVHJhbnNmb3JtVXBkYXRlID0gZmFsc2U7CisgICAgICAgIHVwZGF0ZUNhY2hlZEJvdW5kYXJp
ZXNJblBhcmVudHMgPSB0cnVlOworICAgIH0KKworICAgIGlmIChtX25lZWRzQm91bmRhcmllc1Vw
ZGF0ZSkgeworICAgICAgICB1cGRhdGVDYWNoZWRCb3VuZGFyaWVzSW5QYXJlbnRzID0gdHJ1ZTsK
KyAgICAgICAgc2V0SXNQYWludGluZ0ZhbGxiYWNrKGZhbHNlKTsKKyAgICAgICAgY3JlYXRlU2hh
cGUoKTsKKyAgICB9CisKKyAgICAvLyBJbnZhbGlkYXRlIGFsbCByZXNvdXJjZXMgb2YgdGhpcyBj
bGllbnQgaWYgb3VyIGxheW91dCBjaGFuZ2VkLgorICAgIGlmIChtX2V2ZXJIYWRMYXlvdXQgJiYg
c2VsZk5lZWRzTGF5b3V0KCkpIHsKKyAgICAgICAgU1ZHUmVzb3VyY2VzQ2FjaGU6OmNsaWVudExh
eW91dENoYW5nZWQodGhpcyk7CisgICAgICAgIG1fbWFya2VyTGF5b3V0SW5mby5jbGVhcigpOwor
ICAgIH0KKworICAgIC8vIEF0IHRoaXMgcG9pbnQgTGF5b3V0UmVwYWludGVyIGFscmVhZHkgZ3Jh
YmJlZCB0aGUgb2xkIGJvdW5kcywKKyAgICAvLyByZWNhbGN1bGF0ZSB0aGVtIG5vdyBzbyByZXBh
aW50QWZ0ZXJMYXlvdXQoKSB1c2VzIHRoZSBuZXcgYm91bmRzLgorICAgIGlmIChuZWVkc1NoYXBl
VXBkYXRlIHx8IG1fbmVlZHNCb3VuZGFyaWVzVXBkYXRlKSB7CisgICAgICAgIHVwZGF0ZUNhY2hl
ZEJvdW5kYXJpZXMoKTsKKyAgICAgICAgbV9uZWVkc0JvdW5kYXJpZXNVcGRhdGUgPSBmYWxzZTsK
KyAgICB9CisKKyAgICAvLyBJZiBvdXIgYm91bmRzIGNoYW5nZWQsIG5vdGlmeSB0aGUgcGFyZW50
cy4KKyAgICBpZiAodXBkYXRlQ2FjaGVkQm91bmRhcmllc0luUGFyZW50cykKKyAgICAgICAgUmVu
ZGVyU1ZHTW9kZWxPYmplY3Q6OnNldE5lZWRzQm91bmRhcmllc1VwZGF0ZSgpOworCisgICAgcmVw
YWludGVyLnJlcGFpbnRBZnRlckxheW91dCgpOworICAgIHNldE5lZWRzTGF5b3V0KGZhbHNlKTsK
K30KKworYm9vbCBSZW5kZXJTVkdTaGFwZTo6c2hvdWxkU3Ryb2tlWmVyb0xlbmd0aFN1YnBhdGgo
KSBjb25zdAoreworICAgIC8vIFNwZWMoMTEuNCk6IEFueSB6ZXJvIGxlbmd0aCBzdWJwYXRoIHNo
YWxsIG5vdCBiZSBzdHJva2VkIGlmIHRoZSDigJhzdHJva2UtbGluZWNhcOKAmSBwcm9wZXJ0eSBo
YXMgYSB2YWx1ZSBvZiBidXR0CisgICAgLy8gYnV0IHNoYWxsIGJlIHN0cm9rZWQgaWYgdGhlIOKA
mHN0cm9rZS1saW5lY2Fw4oCZIHByb3BlcnR5IGhhcyBhIHZhbHVlIG9mIHJvdW5kIG9yIHNxdWFy
ZQorICAgIHJldHVybiBzdHlsZSgpLT5zdmdTdHlsZSgpLT5oYXNTdHJva2UoKSAmJiBzdHlsZSgp
LT5zdmdTdHlsZSgpLT5jYXBTdHlsZSgpICE9IEJ1dHRDYXAgJiYgIW1fZmlsbEJvdW5kaW5nQm94
LndpZHRoKCkgJiYgIW1fZmlsbEJvdW5kaW5nQm94LmhlaWdodCgpOworfQorCitGbG9hdFJlY3Qg
UmVuZGVyU1ZHU2hhcGU6Onplcm9MZW5ndGhTdWJwYXRoUmVjdCgpIGNvbnN0Cit7CisgICAgZmxv
YXQgc3Ryb2tlV2lkdGggPSB0aGlzLT5zdHJva2VXaWR0aCgpOworICAgIHJldHVybiBGbG9hdFJl
Y3QobV9maWxsQm91bmRpbmdCb3gueCgpIC0gc3Ryb2tlV2lkdGggLyAyLCBtX2ZpbGxCb3VuZGlu
Z0JveC55KCkgLSBzdHJva2VXaWR0aCAvIDIsIHN0cm9rZVdpZHRoLCBzdHJva2VXaWR0aCk7Cit9
CisKK3ZvaWQgUmVuZGVyU1ZHU2hhcGU6OnNldHVwU3F1YXJlQ2FwUGF0aChQYXRoKiYgdXNlUGF0
aCwgaW50JiBhcHBseU1vZGUpCit7CisgICAgLy8gU3BlYygxMS40KTogQW55IHplcm8gbGVuZ3Ro
IHN1YnBhdGggc2hhbGwgbm90IGJlIHN0cm9rZWQgaWYgdGhlIOKAmHN0cm9rZS1saW5lY2Fw4oCZ
IHByb3BlcnR5IGhhcyBhIHZhbHVlIG9mIGJ1dHQKKyAgICAvLyBidXQgc2hhbGwgYmUgc3Ryb2tl
ZCBpZiB0aGUg4oCYc3Ryb2tlLWxpbmVjYXDigJkgcHJvcGVydHkgaGFzIGEgdmFsdWUgb2Ygcm91
bmQgb3Igc3F1YXJlCisgICAgREVGSU5FX1NUQVRJQ19MT0NBTChQYXRoLCB0ZW1wUGF0aCwgKCkp
OworCisgICAgYXBwbHlNb2RlID0gQXBwbHlUb0ZpbGxNb2RlOworICAgIHVzZVBhdGggPSAmdGVt
cFBhdGg7CisgICAgdXNlUGF0aC0+Y2xlYXIoKTsKKyAgICBpZiAoc3R5bGUoKS0+c3ZnU3R5bGUo
KS0+Y2FwU3R5bGUoKSA9PSBTcXVhcmVDYXApCisgICAgICAgIHVzZVBhdGgtPmFkZFJlY3QoemVy
b0xlbmd0aFN1YnBhdGhSZWN0KCkpOworICAgIGVsc2UKKyAgICAgICAgdXNlUGF0aC0+YWRkRWxs
aXBzZSh6ZXJvTGVuZ3RoU3VicGF0aFJlY3QoKSk7Cit9CisKK2Jvb2wgUmVuZGVyU1ZHU2hhcGU6
OnNldHVwTm9uU2NhbGluZ1N0cm9rZVBhdGgoUGF0aComIHVzZVBhdGgsIEdyYXBoaWNzQ29udGV4
dFN0YXRlU2F2ZXImIHN0YXRlU2F2ZXIpCit7CisgICAgREVGSU5FX1NUQVRJQ19MT0NBTChQYXRo
LCB0ZW1wUGF0aCwgKCkpOworCisgICAgU1ZHU3R5bGVkVHJhbnNmb3JtYWJsZUVsZW1lbnQqIGVs
ZW1lbnQgPSBzdGF0aWNfY2FzdDxTVkdTdHlsZWRUcmFuc2Zvcm1hYmxlRWxlbWVudCo+KG5vZGUo
KSk7CisgICAgQWZmaW5lVHJhbnNmb3JtIG5vblNjYWxpbmdTdHJva2VUcmFuc2Zvcm0gPSBlbGVt
ZW50LT5nZXRTY3JlZW5DVE0oU1ZHTG9jYXRhYmxlOjpEaXNhbGxvd1N0eWxlVXBkYXRlKTsKKyAg
ICBpZiAoIW5vblNjYWxpbmdTdHJva2VUcmFuc2Zvcm0uaXNJbnZlcnRpYmxlKCkpCisgICAgICAg
IHJldHVybiBmYWxzZTsKKworICAgIHRlbXBQYXRoID0gKm1fcGF0aDsKKyAgICB1c2VQYXRoID0g
JnRlbXBQYXRoOworICAgIHRlbXBQYXRoLnRyYW5zZm9ybShub25TY2FsaW5nU3Ryb2tlVHJhbnNm
b3JtKTsKKworICAgIHN0YXRlU2F2ZXIuc2F2ZSgpOworICAgIHN0YXRlU2F2ZXIuY29udGV4dCgp
LT5jb25jYXRDVE0obm9uU2NhbGluZ1N0cm9rZVRyYW5zZm9ybS5pbnZlcnNlKCkpOworICAgIHJl
dHVybiB0cnVlOworfQorCit2b2lkIFJlbmRlclNWR1NoYXBlOjpmaWxsQW5kU3Ryb2tlUGF0aChH
cmFwaGljc0NvbnRleHQqIGNvbnRleHQpCit7CisgICAgUmVuZGVyU3R5bGUqIHN0eWxlID0gdGhp
cy0+c3R5bGUoKTsKKworICAgIENvbG9yIGZhbGxiYWNrQ29sb3I7CisgICAgaWYgKFJlbmRlclNW
R1Jlc291cmNlKiBmaWxsUGFpbnRpbmdSZXNvdXJjZSA9IFJlbmRlclNWR1Jlc291cmNlOjpmaWxs
UGFpbnRpbmdSZXNvdXJjZSh0aGlzLCBzdHlsZSwgZmFsbGJhY2tDb2xvcikpIHsKKyAgICAgICAg
aWYgKGZpbGxQYWludGluZ1Jlc291cmNlLT5hcHBseVJlc291cmNlKHRoaXMsIHN0eWxlLCBjb250
ZXh0LCBBcHBseVRvRmlsbE1vZGUpKQorICAgICAgICAgICAgZmlsbFBhaW50aW5nUmVzb3VyY2Ut
PnBvc3RBcHBseVJlc291cmNlKHRoaXMsIGNvbnRleHQsIEFwcGx5VG9GaWxsTW9kZSwgMCwgdGhp
cyk7CisgICAgICAgIGVsc2UgaWYgKGZhbGxiYWNrQ29sb3IuaXNWYWxpZCgpKSB7CisgICAgICAg
ICAgICBSZW5kZXJTVkdSZXNvdXJjZVNvbGlkQ29sb3IqIGZhbGxiYWNrUmVzb3VyY2UgPSBSZW5k
ZXJTVkdSZXNvdXJjZTo6c2hhcmVkU29saWRQYWludGluZ1Jlc291cmNlKCk7CisgICAgICAgICAg
ICBmYWxsYmFja1Jlc291cmNlLT5zZXRDb2xvcihmYWxsYmFja0NvbG9yKTsKKyAgICAgICAgICAg
IGlmIChmYWxsYmFja1Jlc291cmNlLT5hcHBseVJlc291cmNlKHRoaXMsIHN0eWxlLCBjb250ZXh0
LCBBcHBseVRvRmlsbE1vZGUpKQorICAgICAgICAgICAgICAgIGZhbGxiYWNrUmVzb3VyY2UtPnBv
c3RBcHBseVJlc291cmNlKHRoaXMsIGNvbnRleHQsIEFwcGx5VG9GaWxsTW9kZSwgMCwgdGhpcyk7
CisgICAgICAgIH0KKyAgICB9CisKKyAgICBmYWxsYmFja0NvbG9yID0gQ29sb3IoKTsKKyAgICBS
ZW5kZXJTVkdSZXNvdXJjZSogc3Ryb2tlUGFpbnRpbmdSZXNvdXJjZSA9IFJlbmRlclNWR1Jlc291
cmNlOjpzdHJva2VQYWludGluZ1Jlc291cmNlKHRoaXMsIHN0eWxlLCBmYWxsYmFja0NvbG9yKTsK
KyAgICBpZiAoIXN0cm9rZVBhaW50aW5nUmVzb3VyY2UpCisgICAgICAgIHJldHVybjsKKworICAg
IFBhdGgqIHVzZVBhdGggPSBtX3BhdGguZ2V0KCk7CisgICAgaW50IGFwcGx5TW9kZSA9IEFwcGx5
VG9TdHJva2VNb2RlOworCisgICAgYm9vbCBub25TY2FsaW5nU3Ryb2tlID0gc3R5bGUtPnN2Z1N0
eWxlKCktPnZlY3RvckVmZmVjdCgpID09IFZFX05PTl9TQ0FMSU5HX1NUUk9LRTsKKyAgICBPd25Q
dHI8UGF0aD4gc2F2ZVBhdGg7CisKKyAgICBHcmFwaGljc0NvbnRleHRTdGF0ZVNhdmVyIHN0YXRl
U2F2ZXIoKmNvbnRleHQsIGZhbHNlKTsKKworICAgIC8vIFNwZWMoMTEuNCk6IEFueSB6ZXJvIGxl
bmd0aCBzdWJwYXRoIHNoYWxsIG5vdCBiZSBzdHJva2VkIGlmIHRoZSDigJhzdHJva2UtbGluZWNh
cOKAmSBwcm9wZXJ0eSBoYXMgYSB2YWx1ZSBvZiBidXR0CisgICAgLy8gYnV0IHNoYWxsIGJlIHN0
cm9rZWQgaWYgdGhlIOKAmHN0cm9rZS1saW5lY2Fw4oCZIHByb3BlcnR5IGhhcyBhIHZhbHVlIG9m
IHJvdW5kIG9yIHNxdWFyZQorICAgIC8vIEZJWE1FOiB0aGlzIGRvZXMgbm90IHdvcmsgZm9yIHpl
cm8tbGVuZ3RoIHN1YnBhdGhzLCBvbmx5IHdoZW4gdG90YWwgcGF0aCBpcyB6ZXJvLWxlbmd0aAor
ICAgIGlmIChzaG91bGRTdHJva2VaZXJvTGVuZ3RoU3VicGF0aCgpKSB7CisgICAgICAgIFJlbmRl
clNWR1NoYXBlOjpjcmVhdGVTaGFwZSgpOworICAgICAgICBzZXR1cFNxdWFyZUNhcFBhdGgodXNl
UGF0aCwgYXBwbHlNb2RlKTsKKyAgICAgICAgc2V0SXNQYWludGluZ0ZhbGxiYWNrKHRydWUpOwor
ICAgIH0gZWxzZSBpZiAobm9uU2NhbGluZ1N0cm9rZSkgeworICAgICAgICBpZiAoIXNldHVwTm9u
U2NhbGluZ1N0cm9rZVBhdGgodXNlUGF0aCwgc3RhdGVTYXZlcikpCisgICAgICAgICAgICByZXR1
cm47CisgICAgfQorICAgIGlmIChzdHJva2VQYWludGluZ1Jlc291cmNlLT5hcHBseVJlc291cmNl
KHRoaXMsIHN0eWxlLCBjb250ZXh0LCBhcHBseU1vZGUpKSB7CisgICAgICAgIHN0cm9rZVBhaW50
aW5nUmVzb3VyY2UtPnBvc3RBcHBseVJlc291cmNlKHRoaXMsIGNvbnRleHQsIGFwcGx5TW9kZSwg
dXNlUGF0aCwgdGhpcyk7CisgICAgICAgIGlmIChzYXZlUGF0aCkKKyAgICAgICAgICAgIG1fcGF0
aCA9IHNhdmVQYXRoLnJlbGVhc2UoKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBpZiAo
IWZhbGxiYWNrQ29sb3IuaXNWYWxpZCgpKSB7CisgICAgICAgIGlmIChzYXZlUGF0aCkKKyAgICAg
ICAgICAgIG1fcGF0aCA9IHNhdmVQYXRoLnJlbGVhc2UoKTsKKyAgICAgICAgcmV0dXJuOworICAg
IH0KKyAgICBSZW5kZXJTVkdSZXNvdXJjZVNvbGlkQ29sb3IqIGZhbGxiYWNrUmVzb3VyY2UgPSBS
ZW5kZXJTVkdSZXNvdXJjZTo6c2hhcmVkU29saWRQYWludGluZ1Jlc291cmNlKCk7CisgICAgZmFs
bGJhY2tSZXNvdXJjZS0+c2V0Q29sb3IoZmFsbGJhY2tDb2xvcik7CisgICAgaWYgKGZhbGxiYWNr
UmVzb3VyY2UtPmFwcGx5UmVzb3VyY2UodGhpcywgc3R5bGUsIGNvbnRleHQsIGFwcGx5TW9kZSkp
CisgICAgICAgIGZhbGxiYWNrUmVzb3VyY2UtPnBvc3RBcHBseVJlc291cmNlKHRoaXMsIGNvbnRl
eHQsIGFwcGx5TW9kZSwgdXNlUGF0aCwgdGhpcyk7CisgICAgaWYgKHNhdmVQYXRoKQorICAgICAg
ICBtX3BhdGggPSBzYXZlUGF0aC5yZWxlYXNlKCk7Cit9CisKK3ZvaWQgUmVuZGVyU1ZHU2hhcGU6
OnBhaW50KFBhaW50SW5mbyYgcGFpbnRJbmZvLCBjb25zdCBJbnRQb2ludCYpCit7CisgICAgaWYg
KHBhaW50SW5mby5jb250ZXh0LT5wYWludGluZ0Rpc2FibGVkKCkgfHwgc3R5bGUoKS0+dmlzaWJp
bGl0eSgpID09IEhJRERFTiB8fCBpc0VtcHR5KCkpCisgICAgICAgIHJldHVybjsKKyAgICBGbG9h
dFJlY3QgYm91bmRpbmdCb3ggPSByZXBhaW50UmVjdEluTG9jYWxDb29yZGluYXRlcygpOworICAg
IGlmICghU1ZHUmVuZGVyU3VwcG9ydDo6cGFpbnRJbmZvSW50ZXJzZWN0c1JlcGFpbnRSZWN0KGJv
dW5kaW5nQm94LCBtX2xvY2FsVHJhbnNmb3JtLCBwYWludEluZm8pKQorICAgICAgICByZXR1cm47
CisgICAgUGFpbnRJbmZvIGNoaWxkUGFpbnRJbmZvKHBhaW50SW5mbyk7CisgICAgYm9vbCBkcmF3
c091dGxpbmUgPSBzdHlsZSgpLT5vdXRsaW5lV2lkdGgoKSAmJiAoY2hpbGRQYWludEluZm8ucGhh
c2UgPT0gUGFpbnRQaGFzZU91dGxpbmUgfHwgY2hpbGRQYWludEluZm8ucGhhc2UgPT0gUGFpbnRQ
aGFzZVNlbGZPdXRsaW5lKTsKKyAgICBpZiAoZHJhd3NPdXRsaW5lIHx8IGNoaWxkUGFpbnRJbmZv
LnBoYXNlID09IFBhaW50UGhhc2VGb3JlZ3JvdW5kKSB7CisgICAgICAgIEdyYXBoaWNzQ29udGV4
dFN0YXRlU2F2ZXIgc3RhdGVTYXZlcigqY2hpbGRQYWludEluZm8uY29udGV4dCk7CisgICAgICAg
IGNoaWxkUGFpbnRJbmZvLmFwcGx5VHJhbnNmb3JtKG1fbG9jYWxUcmFuc2Zvcm0pOworCisgICAg
ICAgIGlmIChjaGlsZFBhaW50SW5mby5waGFzZSA9PSBQYWludFBoYXNlRm9yZWdyb3VuZCkgewor
ICAgICAgICAgICAgUGFpbnRJbmZvIHNhdmVkSW5mbyhjaGlsZFBhaW50SW5mbyk7CisKKyAgICAg
ICAgICAgIGlmIChTVkdSZW5kZXJTdXBwb3J0OjpwcmVwYXJlVG9SZW5kZXJTVkdDb250ZW50KHRo
aXMsIGNoaWxkUGFpbnRJbmZvKSkgeworICAgICAgICAgICAgICAgIGNvbnN0IFNWR1JlbmRlclN0
eWxlKiBzdmdTdHlsZSA9IHN0eWxlKCktPnN2Z1N0eWxlKCk7CisgICAgICAgICAgICAgICAgaWYg
KHN2Z1N0eWxlLT5zaGFwZVJlbmRlcmluZygpID09IFNSX0NSSVNQRURHRVMpCisgICAgICAgICAg
ICAgICAgICAgIGNoaWxkUGFpbnRJbmZvLmNvbnRleHQtPnNldFNob3VsZEFudGlhbGlhcyhmYWxz
ZSk7CisKKyAgICAgICAgICAgICAgICBmaWxsQW5kU3Ryb2tlUGF0aChjaGlsZFBhaW50SW5mby5j
b250ZXh0KTsKKworICAgICAgICAgICAgICAgIGlmIChzdmdTdHlsZS0+aGFzTWFya2VycygpKQor
ICAgICAgICAgICAgICAgICAgICBtX21hcmtlckxheW91dEluZm8uZHJhd01hcmtlcnMoY2hpbGRQ
YWludEluZm8pOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBTVkdSZW5kZXJTdXBwb3J0
OjpmaW5pc2hSZW5kZXJTVkdDb250ZW50KHRoaXMsIGNoaWxkUGFpbnRJbmZvLCBzYXZlZEluZm8u
Y29udGV4dCk7CisgICAgICAgIH0KKworICAgICAgICBpZiAoZHJhd3NPdXRsaW5lKQorICAgICAg
ICAgICAgcGFpbnRPdXRsaW5lKGNoaWxkUGFpbnRJbmZvLmNvbnRleHQsIEludFJlY3QoYm91bmRp
bmdCb3gpKTsKKyAgICB9Cit9CisKKy8vIFRoaXMgbWV0aG9kIGlzIGNhbGxlZCBmcm9tIGluc2lk
ZSBwYWludE91dGxpbmUoKSBzaW5jZSB3ZSBjYWxsIHBhaW50T3V0bGluZSgpCisvLyB3aGlsZSB0
cmFuc2Zvcm1lZCB0byBvdXIgY29vcmQgc3lzdGVtLCByZXR1cm4gbG9jYWwgY29vcmRzCit2b2lk
IFJlbmRlclNWR1NoYXBlOjphZGRGb2N1c1JpbmdSZWN0cyhWZWN0b3I8TGF5b3V0UmVjdD4mIHJl
Y3RzLCBjb25zdCBMYXlvdXRQb2ludCYpCit7CisgICAgTGF5b3V0UmVjdCByZWN0ID0gZW5jbG9z
aW5nTGF5b3V0UmVjdChyZXBhaW50UmVjdEluTG9jYWxDb29yZGluYXRlcygpKTsKKyAgICBpZiAo
IXJlY3QuaXNFbXB0eSgpKQorICAgICAgICByZWN0cy5hcHBlbmQocmVjdCk7Cit9CisKK2Jvb2wg
UmVuZGVyU1ZHU2hhcGU6Om5vZGVBdEZsb2F0UG9pbnQoY29uc3QgSGl0VGVzdFJlcXVlc3QmIHJl
cXVlc3QsIEhpdFRlc3RSZXN1bHQmIHJlc3VsdCwgY29uc3QgRmxvYXRQb2ludCYgcG9pbnRJblBh
cmVudCwgSGl0VGVzdEFjdGlvbiBoaXRUZXN0QWN0aW9uKQoreworICAgIC8vIFdlIG9ubHkgZHJh
dyBpbiB0aGUgZm9yZ3JvdW5kIHBoYXNlLCBzbyB3ZSBvbmx5IGhpdC10ZXN0IHRoZW4uCisgICAg
aWYgKGhpdFRlc3RBY3Rpb24gIT0gSGl0VGVzdEZvcmVncm91bmQpCisgICAgICAgIHJldHVybiBm
YWxzZTsKKworICAgIEZsb2F0UG9pbnQgbG9jYWxQb2ludCA9IG1fbG9jYWxUcmFuc2Zvcm0uaW52
ZXJzZSgpLm1hcFBvaW50KHBvaW50SW5QYXJlbnQpOworCisgICAgaWYgKCFTVkdSZW5kZXJTdXBw
b3J0Ojpwb2ludEluQ2xpcHBpbmdBcmVhKHRoaXMsIGxvY2FsUG9pbnQpKQorICAgICAgICByZXR1
cm4gZmFsc2U7CisKKyAgICBQb2ludGVyRXZlbnRzSGl0UnVsZXMgaGl0UnVsZXMoUG9pbnRlckV2
ZW50c0hpdFJ1bGVzOjpTVkdfUEFUSF9ISVRURVNUSU5HLCByZXF1ZXN0LCBzdHlsZSgpLT5wb2lu
dGVyRXZlbnRzKCkpOworICAgIGJvb2wgaXNWaXNpYmxlID0gKHN0eWxlKCktPnZpc2liaWxpdHko
KSA9PSBWSVNJQkxFKTsKKyAgICBpZiAoaXNWaXNpYmxlIHx8ICFoaXRSdWxlcy5yZXF1aXJlVmlz
aWJsZSkgeworICAgICAgICBjb25zdCBTVkdSZW5kZXJTdHlsZSogc3ZnU3R5bGUgPSBzdHlsZSgp
LT5zdmdTdHlsZSgpOworICAgICAgICBXaW5kUnVsZSBmaWxsUnVsZSA9IHN2Z1N0eWxlLT5maWxs
UnVsZSgpOworICAgICAgICBpZiAocmVxdWVzdC5zdmdDbGlwQ29udGVudCgpKQorICAgICAgICAg
ICAgZmlsbFJ1bGUgPSBzdmdTdHlsZS0+Y2xpcFJ1bGUoKTsKKyAgICAgICAgaWYgKChoaXRSdWxl
cy5jYW5IaXRTdHJva2UgJiYgKHN2Z1N0eWxlLT5oYXNTdHJva2UoKSB8fCAhaGl0UnVsZXMucmVx
dWlyZVN0cm9rZSkgJiYgc3Ryb2tlQ29udGFpbnMobG9jYWxQb2ludCwgaGl0UnVsZXMucmVxdWly
ZVN0cm9rZSkpCisgICAgICAgICAgICB8fCAoaGl0UnVsZXMuY2FuSGl0RmlsbCAmJiAoc3ZnU3R5
bGUtPmhhc0ZpbGwoKSB8fCAhaGl0UnVsZXMucmVxdWlyZUZpbGwpICYmIGZpbGxDb250YWlucyhs
b2NhbFBvaW50LCBoaXRSdWxlcy5yZXF1aXJlRmlsbCwgZmlsbFJ1bGUpKSkgeworICAgICAgICAg
ICAgdXBkYXRlSGl0VGVzdFJlc3VsdChyZXN1bHQsIHJvdW5kZWRMYXlvdXRQb2ludChsb2NhbFBv
aW50KSk7CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQorICAgIH0KKyAgICBy
ZXR1cm4gZmFsc2U7Cit9CisKK0Zsb2F0UmVjdCBSZW5kZXJTVkdTaGFwZTo6Y2FsY3VsYXRlTWFy
a2VyQm91bmRzSWZOZWVkZWQoKQoreworICAgIFNWR0VsZW1lbnQqIHN2Z0VsZW1lbnQgPSBzdGF0
aWNfY2FzdDxTVkdFbGVtZW50Kj4obm9kZSgpKTsKKyAgICBBU1NFUlQoc3ZnRWxlbWVudCAmJiBz
dmdFbGVtZW50LT5kb2N1bWVudCgpKTsKKyAgICBpZiAoIXN2Z0VsZW1lbnQtPmlzU3R5bGVkKCkp
CisgICAgICAgIHJldHVybiBGbG9hdFJlY3QoKTsKKworICAgIFNWR1N0eWxlZEVsZW1lbnQqIHN0
eWxlZEVsZW1lbnQgPSBzdGF0aWNfY2FzdDxTVkdTdHlsZWRFbGVtZW50Kj4oc3ZnRWxlbWVudCk7
CisgICAgaWYgKCFzdHlsZWRFbGVtZW50LT5zdXBwb3J0c01hcmtlcnMoKSkKKyAgICAgICAgcmV0
dXJuIEZsb2F0UmVjdCgpOworCisgICAgQVNTRVJUKHN0eWxlKCktPnN2Z1N0eWxlKCktPmhhc01h
cmtlcnMoKSk7CisKKyAgICBTVkdSZXNvdXJjZXMqIHJlc291cmNlcyA9IFNWR1Jlc291cmNlc0Nh
Y2hlOjpjYWNoZWRSZXNvdXJjZXNGb3JSZW5kZXJPYmplY3QodGhpcyk7CisgICAgaWYgKCFyZXNv
dXJjZXMpCisgICAgICAgIHJldHVybiBGbG9hdFJlY3QoKTsKKworICAgIFJlbmRlclNWR1Jlc291
cmNlTWFya2VyKiBtYXJrZXJTdGFydCA9IHJlc291cmNlcy0+bWFya2VyU3RhcnQoKTsKKyAgICBS
ZW5kZXJTVkdSZXNvdXJjZU1hcmtlciogbWFya2VyTWlkID0gcmVzb3VyY2VzLT5tYXJrZXJNaWQo
KTsKKyAgICBSZW5kZXJTVkdSZXNvdXJjZU1hcmtlciogbWFya2VyRW5kID0gcmVzb3VyY2VzLT5t
YXJrZXJFbmQoKTsKKyAgICBpZiAoIW1hcmtlclN0YXJ0ICYmICFtYXJrZXJNaWQgJiYgIW1hcmtl
ckVuZCkKKyAgICAgICAgcmV0dXJuIEZsb2F0UmVjdCgpOworCisgICAgcmV0dXJuIG1fbWFya2Vy
TGF5b3V0SW5mby5jYWxjdWxhdGVCb3VuZGFyaWVzKG1hcmtlclN0YXJ0LCBtYXJrZXJNaWQsIG1h
cmtlckVuZCwgc3Ryb2tlV2lkdGgoKSwgcGF0aCgpKTsKK30KKwordm9pZCBSZW5kZXJTVkdTaGFw
ZTo6dXBkYXRlQ2FjaGVkQm91bmRhcmllcygpCit7CisgICAgaWYgKGlzRW1wdHkoKSkgeworICAg
ICAgICBtX2ZpbGxCb3VuZGluZ0JveCA9IEZsb2F0UmVjdCgpOworICAgICAgICBtX3N0cm9rZUFu
ZE1hcmtlckJvdW5kaW5nQm94ID0gRmxvYXRSZWN0KCk7CisgICAgICAgIG1fcmVwYWludEJvdW5k
aW5nQm94ID0gRmxvYXRSZWN0KCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICAvLyBD
YWNoZSBfdW5jbGlwcGVkXyBmaWxsIGJvdW5kaW5nIGJveCwgdXNlZCBmb3IgY2FsY3VsYXRpb25z
IGluIHJlc291cmNlcworICAgIG1fZmlsbEJvdW5kaW5nQm94ID0gb2JqZWN0Qm91bmRpbmdCb3go
KTsKKworICAgIC8vIFNwZWMoMTEuNCk6IEFueSB6ZXJvIGxlbmd0aCBzdWJwYXRoIHNoYWxsIG5v
dCBiZSBzdHJva2VkIGlmIHRoZSDigJhzdHJva2UtbGluZWNhcOKAmSBwcm9wZXJ0eSBoYXMgYSB2
YWx1ZSBvZiBidXR0CisgICAgLy8gYnV0IHNoYWxsIGJlIHN0cm9rZWQgaWYgdGhlIOKAmHN0cm9r
ZS1saW5lY2Fw4oCZIHByb3BlcnR5IGhhcyBhIHZhbHVlIG9mIHJvdW5kIG9yIHNxdWFyZQorICAg
IGlmIChzaG91bGRTdHJva2VaZXJvTGVuZ3RoU3VicGF0aCgpKSB7CisgICAgICAgIG1fc3Ryb2tl
QW5kTWFya2VyQm91bmRpbmdCb3ggPSB6ZXJvTGVuZ3RoU3VicGF0aFJlY3QoKTsKKyAgICAgICAg
Ly8gQ2FjaGUgc21hbGxlc3QgcG9zc2libGUgcmVwYWludCByZWN0YW5nbGUKKyAgICAgICAgbV9y
ZXBhaW50Qm91bmRpbmdCb3ggPSBtX3N0cm9rZUFuZE1hcmtlckJvdW5kaW5nQm94OworICAgICAg
ICBTVkdSZW5kZXJTdXBwb3J0OjppbnRlcnNlY3RSZXBhaW50UmVjdFdpdGhSZXNvdXJjZXModGhp
cywgbV9yZXBhaW50Qm91bmRpbmdCb3gpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIC8v
IENhY2hlIF91bmNsaXBwZWRfIHN0cm9rZSBib3VuZGluZyBib3gsIHVzZWQgZm9yIGNhbGN1bGF0
aW9ucyBpbiByZXNvdXJjZXMgKGluY2x1ZGVzIG1hcmtlciBib3VuZGFyaWVzKQorICAgIG1fc3Ry
b2tlQW5kTWFya2VyQm91bmRpbmdCb3ggPSBtX2ZpbGxCb3VuZGluZ0JveDsKKworICAgIGNvbnN0
IFNWR1JlbmRlclN0eWxlKiBzdmdTdHlsZSA9IHN0eWxlKCktPnN2Z1N0eWxlKCk7CisgICAgaWYg
KHN2Z1N0eWxlLT5oYXNTdHJva2UoKSkKKyAgICAgICAgbV9zdHJva2VBbmRNYXJrZXJCb3VuZGlu
Z0JveC51bml0ZShzdHJva2VCb3VuZGluZ0JveCgpKTsKKworICAgIGluZmxhdGVXaXRoTWFya2Vy
Qm91bmRzKCk7CisKKyAgICAvLyBDYWNoZSBzbWFsbGVzdCBwb3NzaWJsZSByZXBhaW50IHJlY3Rh
bmdsZQorICAgIG1fcmVwYWludEJvdW5kaW5nQm94ID0gbV9zdHJva2VBbmRNYXJrZXJCb3VuZGlu
Z0JveDsKKyAgICBTVkdSZW5kZXJTdXBwb3J0OjppbnRlcnNlY3RSZXBhaW50UmVjdFdpdGhSZXNv
dXJjZXModGhpcywgbV9yZXBhaW50Qm91bmRpbmdCb3gpOworfQorCitmbG9hdCBSZW5kZXJTVkdT
aGFwZTo6c3Ryb2tlV2lkdGgoKSBjb25zdAoreworICAgIFNWR0VsZW1lbnQqIHN2Z0VsZW1lbnQg
PSBzdGF0aWNfY2FzdDxTVkdFbGVtZW50Kj4obm9kZSgpKTsKKyAgICByZXR1cm4gc3R5bGUoKS0+
c3ZnU3R5bGUoKS0+c3Ryb2tlV2lkdGgoKS52YWx1ZShzdmdFbGVtZW50KTsKK30KKworfQorCisj
ZW5kaWYgLy8gRU5BQkxFKFNWRykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9zdmcvUmVuZGVyU1ZHU2hhcGUuaCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVu
ZGVyU1ZHU2hhcGUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jYWE4Y2My
Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJT
VkdTaGFwZS5oCkBAIC0wLDAgKzEsMTYxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA0LCAy
MDA1LCAyMDA3IE5pa29sYXMgWmltbWVybWFubiA8emltbWVybWFubkBrZGUub3JnPgorICogQ29w
eXJpZ2h0IChDKSAyMDA0LCAyMDA1IFJvYiBCdWlzIDxidWlzQGtkZS5vcmc+CisgKiBDb3B5cmln
aHQgKEMpIDIwMDUgRXJpYyBTZWlkZWwgPGVyaWNAd2Via2l0Lm9yZz4KKyAqIENvcHlyaWdodCAo
QykgMjAwNiBBcHBsZSBDb21wdXRlciwgSW5jCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgR29vZ2xl
LCBJbmMuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgUmVuYXRhIEhvZG92YW4gPHJlbmlAd2Via2l0
Lm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAxMSBVbml2ZXJzaXR5IG9mIFN6ZWdlZAorICoKKyAq
IFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBh
bmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdl
bmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2Fy
ZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0
IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMg
ZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBX
SVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9m
CisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0Uu
ICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3Jl
IGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUg
R05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxp
YnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRo
ZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlm
dGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaWZuZGVm
IFJlbmRlclNWR1NoYXBlX2gKKyNkZWZpbmUgUmVuZGVyU1ZHU2hhcGVfaAorCisjaWYgRU5BQkxF
KFNWRykKKyNpbmNsdWRlICJBZmZpbmVUcmFuc2Zvcm0uaCIKKyNpbmNsdWRlICJGbG9hdFJlY3Qu
aCIKKyNpbmNsdWRlICJSZW5kZXJTVkdNb2RlbE9iamVjdC5oIgorI2luY2x1ZGUgIlNWR01hcmtl
ckxheW91dEluZm8uaCIKKyNpbmNsdWRlICJTdHJva2VTdHlsZUFwcGxpZXIuaCIKKyNpbmNsdWRl
IDx3dGYvT3duUHRyLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgRmxvYXRQb2lu
dDsKK2NsYXNzIEdyYXBoaWNzQ29udGV4dFN0YXRlU2F2ZXI7CitjbGFzcyBSZW5kZXJTVkdDb250
YWluZXI7CitjbGFzcyBSZW5kZXJTVkdQYXRoOworY2xhc3MgU1ZHU3R5bGVkVHJhbnNmb3JtYWJs
ZUVsZW1lbnQ7CisKK2NsYXNzIEJvdW5kaW5nUmVjdFN0cm9rZVN0eWxlQXBwbGllciA6IHB1Ymxp
YyBTdHJva2VTdHlsZUFwcGxpZXIgeworcHVibGljOgorICAgIEJvdW5kaW5nUmVjdFN0cm9rZVN0
eWxlQXBwbGllcihjb25zdCBSZW5kZXJPYmplY3QqIG9iamVjdCwgUmVuZGVyU3R5bGUqIHN0eWxl
KQorICAgICAgICA6IG1fb2JqZWN0KG9iamVjdCkKKyAgICAgICAgLCBtX3N0eWxlKHN0eWxlKQor
ICAgIHsKKyAgICAgICAgQVNTRVJUKHN0eWxlKTsKKyAgICAgICAgQVNTRVJUKG9iamVjdCk7Cisg
ICAgfQorCisgICAgdm9pZCBzdHJva2VTdHlsZShHcmFwaGljc0NvbnRleHQqIGNvbnRleHQpCisg
ICAgeworICAgICAgICBTVkdSZW5kZXJTdXBwb3J0OjphcHBseVN0cm9rZVN0eWxlVG9Db250ZXh0
KGNvbnRleHQsIG1fc3R5bGUsIG1fb2JqZWN0KTsKKyAgICB9CisKK3ByaXZhdGU6CisgICAgY29u
c3QgUmVuZGVyT2JqZWN0KiBtX29iamVjdDsKKyAgICBSZW5kZXJTdHlsZSogbV9zdHlsZTsKK307
CisKK2NsYXNzIFJlbmRlclNWR1NoYXBlIDogcHVibGljIFJlbmRlclNWR01vZGVsT2JqZWN0IHsK
K3B1YmxpYzoKKyAgICBleHBsaWNpdCBSZW5kZXJTVkdTaGFwZShTVkdTdHlsZWRUcmFuc2Zvcm1h
YmxlRWxlbWVudCopOworICAgIFJlbmRlclNWR1NoYXBlKFNWR1N0eWxlZFRyYW5zZm9ybWFibGVF
bGVtZW50KiwgUGF0aCosIGJvb2wpOworICAgIHZpcnR1YWwgflJlbmRlclNWR1NoYXBlKCk7CisK
KyAgICB2b2lkIHNldE5lZWRzU2hhcGVVcGRhdGUoKSB7IG1fbmVlZHNTaGFwZVVwZGF0ZSA9IHRy
dWU7IH0KKyAgICB2aXJ0dWFsIHZvaWQgc2V0TmVlZHNCb3VuZGFyaWVzVXBkYXRlKCkgeyBtX25l
ZWRzQm91bmRhcmllc1VwZGF0ZSA9IHRydWU7IH0KKyAgICB2aXJ0dWFsIHZvaWQgc2V0TmVlZHNU
cmFuc2Zvcm1VcGRhdGUoKSB7IG1fbmVlZHNUcmFuc2Zvcm1VcGRhdGUgPSB0cnVlOyB9CisgICAg
dmlydHVhbCB2b2lkIGZpbGxTaGFwZShHcmFwaGljc0NvbnRleHQqKSBjb25zdDsKKyAgICB2aXJ0
dWFsIHZvaWQgc3Ryb2tlU2hhcGUoR3JhcGhpY3NDb250ZXh0KikgY29uc3Q7CisgICAgYm9vbCBp
c1BhaW50aW5nRmFsbGJhY2soKSBjb25zdCB7IHJldHVybiBtX2ZpbGxGYWxsYmFjazsgfQorCisg
ICAgUGF0aCYgcGF0aCgpIGNvbnN0CisgICAgeworICAgICAgICBBU1NFUlQobV9wYXRoKTsKKyAg
ICAgICAgcmV0dXJuICptX3BhdGg7CisgICAgfQorCitwcm90ZWN0ZWQ6CisgICAgdmlydHVhbCB2
b2lkIGNyZWF0ZVNoYXBlKCk7CisgICAgdmlydHVhbCBib29sIGlzRW1wdHkoKSBjb25zdDsKKyAg
ICB2aXJ0dWFsIEZsb2F0UmVjdCBvYmplY3RCb3VuZGluZ0JveCgpIGNvbnN0OworICAgIHZpcnR1
YWwgRmxvYXRSZWN0IHN0cm9rZUJvdW5kaW5nQm94KCkgY29uc3Q7CisgICAgdmlydHVhbCBib29s
IHNoYXBlRGVwZW5kZW50U3Ryb2tlQ29udGFpbnMoY29uc3QgRmxvYXRQb2ludCYpIGNvbnN0Owor
ICAgIHZpcnR1YWwgYm9vbCBzaGFwZURlcGVuZGVudEZpbGxDb250YWlucyhjb25zdCBGbG9hdFBv
aW50JiwgY29uc3QgV2luZFJ1bGUpIGNvbnN0OworICAgIGZsb2F0IHN0cm9rZVdpZHRoKCkgY29u
c3Q7CisgICAgdm9pZCBzZXRJc1BhaW50aW5nRmFsbGJhY2soYm9vbCBpc0ZhbGxiYWNrKSB7IG1f
ZmlsbEZhbGxiYWNrID0gaXNGYWxsYmFjazsgfQorICAgIEZsb2F0UmVjdCBjYWxjdWxhdGVNYXJr
ZXJCb3VuZHNJZk5lZWRlZCgpOworICAgIHZvaWQgc2V0U3Ryb2tlQW5kTWFya2VyQm91bmRpbmdC
b3goRmxvYXRSZWN0IHJlY3QpIHsgbV9zdHJva2VBbmRNYXJrZXJCb3VuZGluZ0JveCA9IHJlY3Q7
IH0KKyAgICBGbG9hdFJlY3Qgc3Ryb2tlQW5kTWFya2VyQm91bmRpbmdCb3goKSB7IHJldHVybiBt
X3N0cm9rZUFuZE1hcmtlckJvdW5kaW5nQm94OyB9CisKKyAgICBib29sIGhhc1BhdGgoKSBjb25z
dCB7IHJldHVybiBtX3BhdGguZ2V0KCk7IH0KKworcHJpdmF0ZToKKyAgICAvLyBIaXQtZGV0ZWN0
aW9uIHNlcGFyYXRlZCBmb3IgdGhlIGZpbGwgYW5kIHRoZSBzdHJva2UKKyAgICBib29sIGZpbGxD
b250YWlucyhjb25zdCBGbG9hdFBvaW50JiwgYm9vbCByZXF1aXJlc0ZpbGwgPSB0cnVlLCBjb25z
dCBXaW5kUnVsZSBmaWxsUnVsZSA9IFJVTEVfTk9OWkVSTyk7CisgICAgYm9vbCBzdHJva2VDb250
YWlucyhjb25zdCBGbG9hdFBvaW50JiwgYm9vbCByZXF1aXJlc1N0cm9rZSA9IHRydWUpOworCisg
ICAgdmlydHVhbCBGbG9hdFJlY3QgcmVwYWludFJlY3RJbkxvY2FsQ29vcmRpbmF0ZXMoKSBjb25z
dCB7IHJldHVybiBtX3JlcGFpbnRCb3VuZGluZ0JveDsgfQorICAgIHZpcnR1YWwgY29uc3QgQWZm
aW5lVHJhbnNmb3JtJiBsb2NhbFRvUGFyZW50VHJhbnNmb3JtKCkgY29uc3QgeyByZXR1cm4gbV9s
b2NhbFRyYW5zZm9ybTsgfQorICAgIHZpcnR1YWwgQWZmaW5lVHJhbnNmb3JtIGxvY2FsVHJhbnNm
b3JtKCkgY29uc3QgeyByZXR1cm4gbV9sb2NhbFRyYW5zZm9ybTsgfQorCisgICAgdmlydHVhbCBi
b29sIGlzU1ZHU2hhcGUoKSBjb25zdCB7IHJldHVybiB0cnVlOyB9CisgICAgdmlydHVhbCBjb25z
dCBjaGFyKiByZW5kZXJOYW1lKCkgY29uc3QgeyByZXR1cm4gIlJlbmRlclNWR1NoYXBlIjsgfQor
ICAgIHZpcnR1YWwgYm9vbCBpc1JvdW5kZWRSZWN0KCkgeyByZXR1cm4gZmFsc2U7IH0KKworICAg
IHZpcnR1YWwgdm9pZCBsYXlvdXQoKTsKKyAgICB2aXJ0dWFsIHZvaWQgcGFpbnQoUGFpbnRJbmZv
JiwgY29uc3QgTGF5b3V0UG9pbnQmKTsKKyAgICB2aXJ0dWFsIHZvaWQgYWRkRm9jdXNSaW5nUmVj
dHMoVmVjdG9yPExheW91dFJlY3Q+JiwgY29uc3QgTGF5b3V0UG9pbnQmKTsKKyAgICB2aXJ0dWFs
IHZvaWQgaW5mbGF0ZVdpdGhNYXJrZXJCb3VuZHMoKSB7IH0KKworICAgIHZpcnR1YWwgYm9vbCBu
b2RlQXRGbG9hdFBvaW50KGNvbnN0IEhpdFRlc3RSZXF1ZXN0JiwgSGl0VGVzdFJlc3VsdCYsIGNv
bnN0IEZsb2F0UG9pbnQmIHBvaW50SW5QYXJlbnQsIEhpdFRlc3RBY3Rpb24pOworCisgICAgdm9p
ZCB1cGRhdGVDYWNoZWRCb3VuZGFyaWVzKCk7CisKKyAgICB2b2lkIHNldHVwU3F1YXJlQ2FwUGF0
aChQYXRoKiYsIGludCYgYXBwbHlNb2RlKTsKKyAgICBib29sIHNldHVwTm9uU2NhbGluZ1N0cm9r
ZVBhdGgoUGF0aComLCBHcmFwaGljc0NvbnRleHRTdGF0ZVNhdmVyJik7CisgICAgYm9vbCBzaG91
bGRTdHJva2VaZXJvTGVuZ3RoU3VicGF0aCgpIGNvbnN0OworICAgIEZsb2F0UmVjdCB6ZXJvTGVu
Z3RoU3VicGF0aFJlY3QoKSBjb25zdDsKKworICAgIHZvaWQgZmlsbEFuZFN0cm9rZVBhdGgoR3Jh
cGhpY3NDb250ZXh0Kik7CisKK3ByaXZhdGU6CisgICAgRmxvYXRSZWN0IG1fZmlsbEJvdW5kaW5n
Qm94OworICAgIEZsb2F0UmVjdCBtX3N0cm9rZUFuZE1hcmtlckJvdW5kaW5nQm94OworICAgIEZs
b2F0UmVjdCBtX3JlcGFpbnRCb3VuZGluZ0JveDsKKyAgICBTVkdNYXJrZXJMYXlvdXRJbmZvIG1f
bWFya2VyTGF5b3V0SW5mbzsKKyAgICBBZmZpbmVUcmFuc2Zvcm0gbV9sb2NhbFRyYW5zZm9ybTsK
KyAgICBPd25QdHI8UGF0aD4gbV9wYXRoOworCisgICAgYm9vbCBtX25lZWRzQm91bmRhcmllc1Vw
ZGF0ZSA6IDE7CisgICAgYm9vbCBtX25lZWRzU2hhcGVVcGRhdGUgOiAxOworICAgIGJvb2wgbV9u
ZWVkc1RyYW5zZm9ybVVwZGF0ZSA6IDE7CisgICAgYm9vbCBtX2ZpbGxGYWxsYmFjayA6IDE7Cisg
ICAgYm9vbCBtX3N0cm9rZUNvbnRhaW5zRmFsbEJhY2sgOiAxOworfTsKKworaW5saW5lIFJlbmRl
clNWR1NoYXBlKiB0b1JlbmRlclNWR1NoYXBlKFJlbmRlck9iamVjdCogb2JqZWN0KQoreworICAg
IEFTU0VSVCghb2JqZWN0IHx8IG9iamVjdC0+aXNTVkdTaGFwZSgpKTsKKyAgICByZXR1cm4gc3Rh
dGljX2Nhc3Q8UmVuZGVyU1ZHU2hhcGUqPihvYmplY3QpOworfQorCitpbmxpbmUgY29uc3QgUmVu
ZGVyU1ZHU2hhcGUqIHRvUmVuZGVyU1ZHU2hhcGUoY29uc3QgUmVuZGVyT2JqZWN0KiBvYmplY3Qp
Cit7CisgICAgQVNTRVJUKCFvYmplY3QgfHwgb2JqZWN0LT5pc1NWR1NoYXBlKCkpOworICAgIHJl
dHVybiBzdGF0aWNfY2FzdDxjb25zdCBSZW5kZXJTVkdTaGFwZSo+KG9iamVjdCk7Cit9CisKKy8v
IFRoaXMgd2lsbCBjYXRjaCBhbnlvbmUgZG9pbmcgYW4gdW5uZWNlc3NhcnkgY2FzdC4KK3ZvaWQg
dG9SZW5kZXJTVkdTaGFwZShjb25zdCBSZW5kZXJTVkdTaGFwZSopOworCit9CisKKyNlbmRpZiAv
LyBFTkFCTEUoU1ZHKQorI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvc3ZnL1NWR0lubGluZVRleHRCb3guY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2
Zy9TVkdJbmxpbmVUZXh0Qm94LmNwcAppbmRleCBjMWM1YWZhLi5lOGMyYWY4IDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR0lubGluZVRleHRCb3guY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHSW5saW5lVGV4dEJveC5jcHAKQEAgLTM3
Nyw3ICszNzcsNyBAQCB2b2lkIFNWR0lubGluZVRleHRCb3g6OnJlbGVhc2VQYWludGluZ1Jlc291
cmNlKEdyYXBoaWNzQ29udGV4dComIGNvbnRleHQsIGNvbnN0CiAgICAgUmVuZGVyT2JqZWN0KiBw
YXJlbnRSZW5kZXJlciA9IHBhcmVudCgpLT5yZW5kZXJlcigpOwogICAgIEFTU0VSVChwYXJlbnRS
ZW5kZXJlcik7CiAKLSAgICBtX3BhaW50aW5nUmVzb3VyY2UtPnBvc3RBcHBseVJlc291cmNlKHBh
cmVudFJlbmRlcmVyLCBjb250ZXh0LCBtX3BhaW50aW5nUmVzb3VyY2VNb2RlLCBwYXRoKTsKKyAg
ICBtX3BhaW50aW5nUmVzb3VyY2UtPnBvc3RBcHBseVJlc291cmNlKHBhcmVudFJlbmRlcmVyLCBj
b250ZXh0LCBtX3BhaW50aW5nUmVzb3VyY2VNb2RlLCBwYXRoLCAvKlJlbmRlclNWR1NoYXBlKi8g
MCk7CiAgICAgbV9wYWludGluZ1Jlc291cmNlID0gMDsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdSZW5kZXJTdXBwb3J0LmNwcCBiL1NvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9zdmcvU1ZHUmVuZGVyU3VwcG9ydC5jcHAKaW5kZXggMmJjZTZhMi4uMTQy
ZGNlNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdSZW5kZXJT
dXBwb3J0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR1JlbmRlclN1
cHBvcnQuY3BwCkBAIC03OSw3ICs3OSw2IEBAIHZvaWQgU1ZHUmVuZGVyU3VwcG9ydDo6bWFwTG9j
YWxUb0NvbnRhaW5lcihjb25zdCBSZW5kZXJPYmplY3QqIG9iamVjdCwgUmVuZGVyQm94CiBib29s
IFNWR1JlbmRlclN1cHBvcnQ6OnByZXBhcmVUb1JlbmRlclNWR0NvbnRlbnQoUmVuZGVyT2JqZWN0
KiBvYmplY3QsIFBhaW50SW5mbyYgcGFpbnRJbmZvKQogewogICAgIEFTU0VSVChvYmplY3QpOwot
CiAgICAgUmVuZGVyU3R5bGUqIHN0eWxlID0gb2JqZWN0LT5zdHlsZSgpOwogICAgIEFTU0VSVChz
dHlsZSk7CiAKQEAgLTE1MSw3ICsxNTAsNyBAQCB2b2lkIFNWR1JlbmRlclN1cHBvcnQ6OmZpbmlz
aFJlbmRlclNWR0NvbnRlbnQoUmVuZGVyT2JqZWN0KiBvYmplY3QsIFBhaW50SW5mbyYgcAogICAg
IFNWR1Jlc291cmNlcyogcmVzb3VyY2VzID0gU1ZHUmVzb3VyY2VzQ2FjaGU6OmNhY2hlZFJlc291
cmNlc0ZvclJlbmRlck9iamVjdChvYmplY3QpOwogICAgIGlmIChyZXNvdXJjZXMpIHsKICAgICAg
ICAgaWYgKFJlbmRlclNWR1Jlc291cmNlRmlsdGVyKiBmaWx0ZXIgPSByZXNvdXJjZXMtPmZpbHRl
cigpKSB7Ci0gICAgICAgICAgICBmaWx0ZXItPnBvc3RBcHBseVJlc291cmNlKG9iamVjdCwgcGFp
bnRJbmZvLmNvbnRleHQsIEFwcGx5VG9EZWZhdWx0TW9kZSwgLyogcGF0aCAqLzApOworICAgICAg
ICAgICAgZmlsdGVyLT5wb3N0QXBwbHlSZXNvdXJjZShzdGF0aWNfY2FzdDxSZW5kZXJTVkdTaGFw
ZSo+KG9iamVjdCksIHBhaW50SW5mby5jb250ZXh0LCBBcHBseVRvRGVmYXVsdE1vZGUsIDAsIDAp
OwogICAgICAgICAgICAgcGFpbnRJbmZvLmNvbnRleHQgPSBzYXZlZENvbnRleHQ7CiAgICAgICAg
IH0KICAgICB9CkBAIC0yMjMsOSArMjIyLDkgQEAgdm9pZCBTVkdSZW5kZXJTdXBwb3J0OjpsYXlv
dXRDaGlsZHJlbihSZW5kZXJPYmplY3QqIHN0YXJ0LCBib29sIHNlbGZOZWVkc0xheW91dCkKICAg
ICAgICAgICAgIC8vIFdoZW4gc2VsZk5lZWRzTGF5b3V0IGlzIGZhbHNlIGFuZCB0aGUgbGF5b3V0
IHNpemUgY2hhbmdlZCwgd2UgaGF2ZSB0byBjaGVjayB3aGV0aGVyIHRoaXMgY2hpbGQgdXNlcyBy
ZWxhdGl2ZSBsZW5ndGhzCiAgICAgICAgICAgICBpZiAoU1ZHRWxlbWVudCogZWxlbWVudCA9IGNo
aWxkLT5ub2RlKCktPmlzU1ZHRWxlbWVudCgpID8gc3RhdGljX2Nhc3Q8U1ZHRWxlbWVudCo+KGNo
aWxkLT5ub2RlKCkpIDogMCkgewogICAgICAgICAgICAgICAgIGlmIChlbGVtZW50LT5pc1N0eWxl
ZCgpICYmIHN0YXRpY19jYXN0PFNWR1N0eWxlZEVsZW1lbnQqPihlbGVtZW50KS0+aGFzUmVsYXRp
dmVMZW5ndGhzKCkpIHsKLSAgICAgICAgICAgICAgICAgICAgLy8gV2hlbiB0aGUgbGF5b3V0IHNp
emUgY2hhbmdlZCBhbmQgd2hlbiB1c2luZyByZWxhdGl2ZSB2YWx1ZXMgdGVsbCB0aGUgUmVuZGVy
U1ZHUGF0aCB0byB1cGRhdGUgaXRzIFBhdGggb2JqZWN0Ci0gICAgICAgICAgICAgICAgICAgIGlm
IChjaGlsZC0+aXNTVkdQYXRoKCkpCi0gICAgICAgICAgICAgICAgICAgICAgICB0b1JlbmRlclNW
R1BhdGgoY2hpbGQpLT5zZXROZWVkc1BhdGhVcGRhdGUoKTsKKyAgICAgICAgICAgICAgICAgICAg
Ly8gV2hlbiB0aGUgbGF5b3V0IHNpemUgY2hhbmdlZCBhbmQgd2hlbiB1c2luZyByZWxhdGl2ZSB2
YWx1ZXMgdGVsbCB0aGUgUmVuZGVyU1ZHU2hhcGUgdG8gdXBkYXRlIGl0cyBzaGFwZSBvYmplY3QK
KyAgICAgICAgICAgICAgICAgICAgaWYgKGNoaWxkLT5pc1NWR1NoYXBlKCkpCisgICAgICAgICAg
ICAgICAgICAgICAgICB0b1JlbmRlclNWR1NoYXBlKGNoaWxkKS0+c2V0TmVlZHNTaGFwZVVwZGF0
ZSgpOwogCiAgICAgICAgICAgICAgICAgICAgIG5lZWRzTGF5b3V0ID0gdHJ1ZTsKICAgICAgICAg
ICAgICAgICB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR1Jl
bmRlclRyZWVBc1RleHQuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdSZW5k
ZXJUcmVlQXNUZXh0LmNwcAppbmRleCBhMTYyOTY5Li5kMWFkNzJhIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR1JlbmRlclRyZWVBc1RleHQuY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHUmVuZGVyVHJlZUFzVGV4dC5jcHAKQEAgLTU1
LDYgKzU1LDcgQEAKICNpbmNsdWRlICJSZW5kZXJTVkdSZXNvdXJjZVJhZGlhbEdyYWRpZW50Lmgi
CiAjaW5jbHVkZSAiUmVuZGVyU1ZHUmVzb3VyY2VTb2xpZENvbG9yLmgiCiAjaW5jbHVkZSAiUmVu
ZGVyU1ZHUm9vdC5oIgorI2luY2x1ZGUgIlJlbmRlclNWR1NoYXBlLmgiCiAjaW5jbHVkZSAiUmVu
ZGVyU1ZHVGV4dC5oIgogI2luY2x1ZGUgIlJlbmRlclRyZWVBc1RleHQuaCIKICNpbmNsdWRlICJT
VkdDaXJjbGVFbGVtZW50LmgiCkBAIC0yODksMTggKzI5MCwxOCBAQCBzdGF0aWMgdm9pZCB3cml0
ZVN0eWxlKFRleHRTdHJlYW0mIHRzLCBjb25zdCBSZW5kZXJPYmplY3QmIG9iamVjdCkKICAgICAg
ICAgd3JpdGVOYW1lVmFsdWVQYWlyKHRzLCAidHJhbnNmb3JtIiwgb2JqZWN0LmxvY2FsVHJhbnNm
b3JtKCkpOwogICAgIHdyaXRlSWZOb3REZWZhdWx0KHRzLCAiaW1hZ2UgcmVuZGVyaW5nIiwgc3R5
bGUtPmltYWdlUmVuZGVyaW5nKCksIFJlbmRlclN0eWxlOjppbml0aWFsSW1hZ2VSZW5kZXJpbmco
KSk7CiAgICAgd3JpdGVJZk5vdERlZmF1bHQodHMsICJvcGFjaXR5Iiwgc3R5bGUtPm9wYWNpdHko
KSwgUmVuZGVyU3R5bGU6OmluaXRpYWxPcGFjaXR5KCkpOwotICAgIGlmIChvYmplY3QuaXNTVkdQ
YXRoKCkpIHsKLSAgICAgICAgY29uc3QgUmVuZGVyU1ZHUGF0aCYgcGF0aCA9IHN0YXRpY19jYXN0
PGNvbnN0IFJlbmRlclNWR1BhdGgmPihvYmplY3QpOwotICAgICAgICBBU1NFUlQocGF0aC5ub2Rl
KCkpOwotICAgICAgICBBU1NFUlQocGF0aC5ub2RlKCktPmlzU1ZHRWxlbWVudCgpKTsKKyAgICBp
ZiAob2JqZWN0LmlzU1ZHU2hhcGUoKSkgeworICAgICAgICBjb25zdCBSZW5kZXJTVkdTaGFwZSYg
c2hhcGUgPSBzdGF0aWNfY2FzdDxjb25zdCBSZW5kZXJTVkdTaGFwZSY+KG9iamVjdCk7CisgICAg
ICAgIEFTU0VSVChzaGFwZS5ub2RlKCkpOworICAgICAgICBBU1NFUlQoc2hhcGUubm9kZSgpLT5p
c1NWR0VsZW1lbnQoKSk7CiAKICAgICAgICAgQ29sb3IgZmFsbGJhY2tDb2xvcjsKLSAgICAgICAg
aWYgKFJlbmRlclNWR1Jlc291cmNlKiBzdHJva2VQYWludGluZ1Jlc291cmNlID0gUmVuZGVyU1ZH
UmVzb3VyY2U6OnN0cm9rZVBhaW50aW5nUmVzb3VyY2UoY29uc3RfY2FzdDxSZW5kZXJTVkdQYXRo
Kj4oJnBhdGgpLCBwYXRoLnN0eWxlKCksIGZhbGxiYWNrQ29sb3IpKSB7CisgICAgICAgIGlmIChS
ZW5kZXJTVkdSZXNvdXJjZSogc3Ryb2tlUGFpbnRpbmdSZXNvdXJjZSA9IFJlbmRlclNWR1Jlc291
cmNlOjpzdHJva2VQYWludGluZ1Jlc291cmNlKGNvbnN0X2Nhc3Q8UmVuZGVyU1ZHU2hhcGUqPigm
c2hhcGUpLCBzaGFwZS5zdHlsZSgpLCBmYWxsYmFja0NvbG9yKSkgewogICAgICAgICAgICAgVGV4
dFN0cmVhbVNlcGFyYXRvciBzKCIgIik7CiAgICAgICAgICAgICB0cyA8PCAiIFtzdHJva2U9eyIg
PDwgczsKICAgICAgICAgICAgIHdyaXRlU1ZHUGFpbnRpbmdSZXNvdXJjZSh0cywgc3Ryb2tlUGFp
bnRpbmdSZXNvdXJjZSk7CiAKLSAgICAgICAgICAgIFNWR0VsZW1lbnQqIGVsZW1lbnQgPSBzdGF0
aWNfY2FzdDxTVkdFbGVtZW50Kj4ocGF0aC5ub2RlKCkpOworICAgICAgICAgICAgU1ZHRWxlbWVu
dCogZWxlbWVudCA9IHN0YXRpY19jYXN0PFNWR0VsZW1lbnQqPihzaGFwZS5ub2RlKCkpOwogICAg
ICAgICAgICAgZG91YmxlIGRhc2hPZmZzZXQgPSBzdmdTdHlsZS0+c3Ryb2tlRGFzaE9mZnNldCgp
LnZhbHVlKGVsZW1lbnQpOwogICAgICAgICAgICAgZG91YmxlIHN0cm9rZVdpZHRoID0gc3ZnU3R5
bGUtPnN0cm9rZVdpZHRoKCkudmFsdWUoZWxlbWVudCk7CiAgICAgICAgICAgICBjb25zdCBWZWN0
b3I8U1ZHTGVuZ3RoPiYgZGFzaGVzID0gc3ZnU3R5bGUtPnN0cm9rZURhc2hBcnJheSgpOwpAQCAt
MzIyLDcgKzMyMyw3IEBAIHN0YXRpYyB2b2lkIHdyaXRlU3R5bGUoVGV4dFN0cmVhbSYgdHMsIGNv
bnN0IFJlbmRlck9iamVjdCYgb2JqZWN0KQogICAgICAgICAgICAgdHMgPDwgIn1dIjsKICAgICAg
ICAgfQogCi0gICAgICAgIGlmIChSZW5kZXJTVkdSZXNvdXJjZSogZmlsbFBhaW50aW5nUmVzb3Vy
Y2UgPSBSZW5kZXJTVkdSZXNvdXJjZTo6ZmlsbFBhaW50aW5nUmVzb3VyY2UoY29uc3RfY2FzdDxS
ZW5kZXJTVkdQYXRoKj4oJnBhdGgpLCBwYXRoLnN0eWxlKCksIGZhbGxiYWNrQ29sb3IpKSB7Cisg
ICAgICAgIGlmIChSZW5kZXJTVkdSZXNvdXJjZSogZmlsbFBhaW50aW5nUmVzb3VyY2UgPSBSZW5k
ZXJTVkdSZXNvdXJjZTo6ZmlsbFBhaW50aW5nUmVzb3VyY2UoY29uc3RfY2FzdDxSZW5kZXJTVkdT
aGFwZSo+KCZzaGFwZSksIHNoYXBlLnN0eWxlKCksIGZhbGxiYWNrQ29sb3IpKSB7CiAgICAgICAg
ICAgICBUZXh0U3RyZWFtU2VwYXJhdG9yIHMoIiAiKTsKICAgICAgICAgICAgIHRzIDw8ICIgW2Zp
bGw9eyIgPDwgczsKICAgICAgICAgICAgIHdyaXRlU1ZHUGFpbnRpbmdSZXNvdXJjZSh0cywgZmls
bFBhaW50aW5nUmVzb3VyY2UpOwpAQCAtMzQ2LDEyICszNDcsMTIgQEAgc3RhdGljIFRleHRTdHJl
YW0mIHdyaXRlUG9zaXRpb25BbmRTdHlsZShUZXh0U3RyZWFtJiB0cywgY29uc3QgUmVuZGVyT2Jq
ZWN0JiBvYmoKICAgICByZXR1cm4gdHM7CiB9CiAKLXN0YXRpYyBUZXh0U3RyZWFtJiBvcGVyYXRv
cjw8KFRleHRTdHJlYW0mIHRzLCBjb25zdCBSZW5kZXJTVkdQYXRoJiBwYXRoKQorc3RhdGljIFRl
eHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYgdHMsIGNvbnN0IFJlbmRlclNWR1NoYXBl
JiBzaGFwZSkKIHsKLSAgICB3cml0ZVBvc2l0aW9uQW5kU3R5bGUodHMsIHBhdGgpOworICAgIHdy
aXRlUG9zaXRpb25BbmRTdHlsZSh0cywgc2hhcGUpOwogCi0gICAgQVNTRVJUKHBhdGgubm9kZSgp
LT5pc1NWR0VsZW1lbnQoKSk7Ci0gICAgU1ZHRWxlbWVudCogc3ZnRWxlbWVudCA9IHN0YXRpY19j
YXN0PFNWR0VsZW1lbnQqPihwYXRoLm5vZGUoKSk7CisgICAgQVNTRVJUKHNoYXBlLm5vZGUoKS0+
aXNTVkdFbGVtZW50KCkpOworICAgIFNWR0VsZW1lbnQqIHN2Z0VsZW1lbnQgPSBzdGF0aWNfY2Fz
dDxTVkdFbGVtZW50Kj4oc2hhcGUubm9kZSgpKTsKIAogICAgIGlmIChzdmdFbGVtZW50LT5oYXNU
YWdOYW1lKFNWR05hbWVzOjpyZWN0VGFnKSkgewogICAgICAgICBTVkdSZWN0RWxlbWVudCogZWxl
bWVudCA9IHN0YXRpY19jYXN0PFNWR1JlY3RFbGVtZW50Kj4oc3ZnRWxlbWVudCk7CkBAIC02NTMs
MTEgKzY1NCwxMSBAQCB2b2lkIHdyaXRlU1ZHSW1hZ2UoVGV4dFN0cmVhbSYgdHMsIGNvbnN0IFJl
bmRlclNWR0ltYWdlJiBpbWFnZSwgaW50IGluZGVudCkKICAgICB3cml0ZVJlc291cmNlcyh0cywg
aW1hZ2UsIGluZGVudCk7CiB9CiAKLXZvaWQgd3JpdGUoVGV4dFN0cmVhbSYgdHMsIGNvbnN0IFJl
bmRlclNWR1BhdGgmIHBhdGgsIGludCBpbmRlbnQpCit2b2lkIHdyaXRlKFRleHRTdHJlYW0mIHRz
LCBjb25zdCBSZW5kZXJTVkdTaGFwZSYgc2hhcGUsIGludCBpbmRlbnQpCiB7Ci0gICAgd3JpdGVT
dGFuZGFyZFByZWZpeCh0cywgcGF0aCwgaW5kZW50KTsKLSAgICB0cyA8PCBwYXRoIDw8ICJcbiI7
Ci0gICAgd3JpdGVSZXNvdXJjZXModHMsIHBhdGgsIGluZGVudCk7CisgICAgd3JpdGVTdGFuZGFy
ZFByZWZpeCh0cywgc2hhcGUsIGluZGVudCk7CisgICAgdHMgPDwgc2hhcGUgPDwgIlxuIjsKKyAg
ICB3cml0ZVJlc291cmNlcyh0cywgc2hhcGUsIGluZGVudCk7CiB9CiAKIHZvaWQgd3JpdGVTVkdH
cmFkaWVudFN0b3AoVGV4dFN0cmVhbSYgdHMsIGNvbnN0IFJlbmRlclNWR0dyYWRpZW50U3RvcCYg
c3RvcCwgaW50IGluZGVudCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9z
dmcvU1ZHUmVuZGVyVHJlZUFzVGV4dC5oIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9T
VkdSZW5kZXJUcmVlQXNUZXh0LmgKaW5kZXggY2UwN2E1Yy4uMzU5OGM4MyAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdSZW5kZXJUcmVlQXNUZXh0LmgKKysrIGIv
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdSZW5kZXJUcmVlQXNUZXh0LmgKQEAgLTQx
LDE0ICs0MSwxNCBAQCBjbGFzcyBSZW5kZXJJbWFnZTsKIGNsYXNzIFJlbmRlck9iamVjdDsKIGNs
YXNzIFJlbmRlclNWR0dyYWRpZW50U3RvcDsKIGNsYXNzIFJlbmRlclNWR0ltYWdlOwotY2xhc3Mg
UmVuZGVyU1ZHUGF0aDsKK2NsYXNzIFJlbmRlclNWR1NoYXBlOwogY2xhc3MgUmVuZGVyU1ZHUm9v
dDsKIGNsYXNzIFJlbmRlclRleHQ7CiBjbGFzcyBBZmZpbmVUcmFuc2Zvcm07CiBjbGFzcyBTVkdV
bml0VHlwZXM7CiAKIC8vIGZ1bmN0aW9ucyB1c2VkIGJ5IHRoZSBtYWluIFJlbmRlclRyZWVBc1Rl
eHQgY29kZQotdm9pZCB3cml0ZShUZXh0U3RyZWFtJiwgY29uc3QgUmVuZGVyU1ZHUGF0aCYsIGlu
dCBpbmRlbnQpOwordm9pZCB3cml0ZShUZXh0U3RyZWFtJiwgY29uc3QgUmVuZGVyU1ZHU2hhcGUm
LCBpbnQgaW5kZW50KTsKIHZvaWQgd3JpdGUoVGV4dFN0cmVhbSYsIGNvbnN0IFJlbmRlclNWR1Jv
b3QmLCBpbnQgaW5kZW50KTsKIHZvaWQgd3JpdGVTVkdHcmFkaWVudFN0b3AoVGV4dFN0cmVhbSYs
IGNvbnN0IFJlbmRlclNWR0dyYWRpZW50U3RvcCYsIGludCBpbmRlbnQpOwogdm9pZCB3cml0ZVNW
R1Jlc291cmNlQ29udGFpbmVyKFRleHRTdHJlYW0mLCBjb25zdCBSZW5kZXJPYmplY3QmLCBpbnQg
aW5kZW50KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHVGV4
dFJ1blJlbmRlcmluZ0NvbnRleHQuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9T
VkdUZXh0UnVuUmVuZGVyaW5nQ29udGV4dC5jcHAKaW5kZXggMzNhY2Y5Mi4uMjI0ZWI4NiAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdUZXh0UnVuUmVuZGVyaW5n
Q29udGV4dC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdUZXh0UnVu
UmVuZGVyaW5nQ29udGV4dC5jcHAKQEAgLTE2MCw3ICsxNjAsNyBAQCB2b2lkIFNWR1RleHRSdW5S
ZW5kZXJpbmdDb250ZXh0OjpkcmF3U1ZHR2x5cGhzKEdyYXBoaWNzQ29udGV4dCogY29udGV4dCwg
Y29uc3QgVAogICAgICAgICAgICAgICAgIGNvbnN0IFJlbmRlclNWR0lubGluZVRleHQqIHRleHRS
ZW5kZXJlciA9IHRvUmVuZGVyU1ZHSW5saW5lVGV4dChyZW5kZXJPYmplY3QpOwogICAgICAgICAg
ICAgICAgIGNvbnRleHQtPnNldFN0cm9rZVRoaWNrbmVzcyhjb250ZXh0LT5zdHJva2VUaGlja25l
c3MoKSAqIHRleHRSZW5kZXJlci0+c2NhbGluZ0ZhY3RvcigpKTsKICAgICAgICAgICAgIH0KLSAg
ICAgICAgICAgIGFjdGl2ZVBhaW50aW5nUmVzb3VyY2UtPnBvc3RBcHBseVJlc291cmNlKHBhcmVu
dFJlbmRlck9iamVjdCwgY29udGV4dCwgcmVzb3VyY2VNb2RlLCAmZ2x5cGhQYXRoKTsKKyAgICAg
ICAgICAgIGFjdGl2ZVBhaW50aW5nUmVzb3VyY2UtPnBvc3RBcHBseVJlc291cmNlKHBhcmVudFJl
bmRlck9iamVjdCwgY29udGV4dCwgcmVzb3VyY2VNb2RlLCAmZ2x5cGhQYXRoLCAwKTsKICAgICAg
ICAgIH0KICAKICAgICAgICAgY29udGV4dC0+cmVzdG9yZSgpOwpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvc3ZnL1NWR0NpcmNsZUVsZW1lbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvc3ZnL1NW
R0NpcmNsZUVsZW1lbnQuY3BwCmluZGV4IDI4OGU1OGEuLmU1M2QyN2UgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3N2Zy9TVkdDaXJjbGVFbGVtZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9zdmcvU1ZHQ2lyY2xlRWxlbWVudC5jcHAKQEAgLTEyNCw3ICsxMjQsNyBAQCB2b2lkIFNWR0Np
cmNsZUVsZW1lbnQ6OnN2Z0F0dHJpYnV0ZUNoYW5nZWQoY29uc3QgUXVhbGlmaWVkTmFtZSYgYXR0
ck5hbWUpCiAgICAgICAgIHJldHVybjsKIAogICAgIGlmIChpc0xlbmd0aEF0dHJpYnV0ZSkgewot
ICAgICAgICByZW5kZXJlci0+c2V0TmVlZHNQYXRoVXBkYXRlKCk7CisgICAgICAgIHJlbmRlcmVy
LT5zZXROZWVkc1NoYXBlVXBkYXRlKCk7CiAgICAgICAgIFJlbmRlclNWR1Jlc291cmNlOjptYXJr
Rm9yTGF5b3V0QW5kUGFyZW50UmVzb3VyY2VJbnZhbGlkYXRpb24ocmVuZGVyZXIpOwogICAgICAg
ICByZXR1cm47CiAgICAgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0VsbGlw
c2VFbGVtZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdFbGxpcHNlRWxlbWVudC5jcHAK
aW5kZXggOWI5ZGE2OC4uNjE1OWUyYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvc3ZnL1NW
R0VsbGlwc2VFbGVtZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRWxsaXBzZUVs
ZW1lbnQuY3BwCkBAIC0xMjksNyArMTI5LDcgQEAgdm9pZCBTVkdFbGxpcHNlRWxlbWVudDo6c3Zn
QXR0cmlidXRlQ2hhbmdlZChjb25zdCBRdWFsaWZpZWROYW1lJiBhdHRyTmFtZSkKICAgICAgICAg
cmV0dXJuOwogCiAgICAgaWYgKGlzTGVuZ3RoQXR0cmlidXRlKSB7Ci0gICAgICAgIHJlbmRlcmVy
LT5zZXROZWVkc1BhdGhVcGRhdGUoKTsKKyAgICAgICAgcmVuZGVyZXItPnNldE5lZWRzU2hhcGVV
cGRhdGUoKTsKICAgICAgICAgUmVuZGVyU1ZHUmVzb3VyY2U6Om1hcmtGb3JMYXlvdXRBbmRQYXJl
bnRSZXNvdXJjZUludmFsaWRhdGlvbihyZW5kZXJlcik7CiAgICAgICAgIHJldHVybjsKICAgICB9
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHTGluZUVsZW1lbnQuY3BwIGIvU291
cmNlL1dlYkNvcmUvc3ZnL1NWR0xpbmVFbGVtZW50LmNwcAppbmRleCBjOWIyMTQ3Li5kMGQwODZl
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHTGluZUVsZW1lbnQuY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdMaW5lRWxlbWVudC5jcHAKQEAgLTEyOSw3ICsxMjksNyBA
QCB2b2lkIFNWR0xpbmVFbGVtZW50OjpzdmdBdHRyaWJ1dGVDaGFuZ2VkKGNvbnN0IFF1YWxpZmll
ZE5hbWUmIGF0dHJOYW1lKQogICAgICAgICByZXR1cm47CiAKICAgICBpZiAoaXNMZW5ndGhBdHRy
aWJ1dGUpIHsKLSAgICAgICAgcmVuZGVyZXItPnNldE5lZWRzUGF0aFVwZGF0ZSgpOworICAgICAg
ICByZW5kZXJlci0+c2V0TmVlZHNTaGFwZVVwZGF0ZSgpOwogICAgICAgICBSZW5kZXJTVkdSZXNv
dXJjZTo6bWFya0ZvckxheW91dEFuZFBhcmVudFJlc291cmNlSW52YWxpZGF0aW9uKHJlbmRlcmVy
KTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3N2
Zy9TVkdQYXRoRWxlbWVudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHUGF0aEVsZW1lbnQu
Y3BwCmluZGV4IDRhZTY2MTMuLjI3YTA0MTggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3N2
Zy9TVkdQYXRoRWxlbWVudC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvc3ZnL1NWR1BhdGhFbGVt
ZW50LmNwcApAQCAtMjY5LDcgKzI2OSw3IEBAIHZvaWQgU1ZHUGF0aEVsZW1lbnQ6OnN2Z0F0dHJp
YnV0ZUNoYW5nZWQoY29uc3QgUXVhbGlmaWVkTmFtZSYgYXR0ck5hbWUpCiAgICAgICAgIH0KIAog
ICAgICAgICBpZiAocmVuZGVyZXIpCi0gICAgICAgICAgICByZW5kZXJlci0+c2V0TmVlZHNQYXRo
VXBkYXRlKCk7CisgICAgICAgICAgICByZW5kZXJlci0+c2V0TmVlZHNTaGFwZVVwZGF0ZSgpOwog
ICAgIH0KIAogICAgIGlmIChyZW5kZXJlcikKQEAgLTM1NSwxMCArMzU1LDE2IEBAIHZvaWQgU1ZH
UGF0aEVsZW1lbnQ6OnBhdGhTZWdMaXN0Q2hhbmdlZChTVkdQYXRoU2VnUm9sZSByb2xlKQogICAg
IGlmICghcmVuZGVyZXIpCiAgICAgICAgIHJldHVybjsKIAotICAgIHJlbmRlcmVyLT5zZXROZWVk
c1BhdGhVcGRhdGUoKTsKKyAgICByZW5kZXJlci0+c2V0TmVlZHNTaGFwZVVwZGF0ZSgpOwogICAg
IFJlbmRlclNWR1Jlc291cmNlOjptYXJrRm9yTGF5b3V0QW5kUGFyZW50UmVzb3VyY2VJbnZhbGlk
YXRpb24ocmVuZGVyZXIpOwogfQogCitSZW5kZXJPYmplY3QqIFNWR1BhdGhFbGVtZW50OjpjcmVh
dGVSZW5kZXJlcihSZW5kZXJBcmVuYSogYXJlbmEsIFJlbmRlclN0eWxlKikKK3sKKyAgICAvLyBC
eSBkZWZhdWx0LCBhbnkgc3ViY2xhc3MgaXMgZXhwZWN0ZWQgdG8gZG8gcGF0aC1iYXNlZCBkcmF3
aW5nCisgICAgcmV0dXJuIG5ldyAoYXJlbmEpIFJlbmRlclNWR1BhdGgodGhpcyk7Cit9CisKIH0K
IAogI2VuZGlmIC8vIEVOQUJMRShTVkcpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9zdmcv
U1ZHUGF0aEVsZW1lbnQuaCBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdQYXRoRWxlbWVudC5oCmlu
ZGV4IDFkMzdkMGUuLjU0YjhmZTIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdQ
YXRoRWxlbWVudC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdQYXRoRWxlbWVudC5oCkBA
IC0xMjIsNiArMTIyLDggQEAgcHJpdmF0ZToKICAgICB2aXJ0dWFsIHZvaWQgc3luY2hyb25pemVS
ZXF1aXJlZEV4dGVuc2lvbnMoKSB7IFNWR1Rlc3RzOjpzeW5jaHJvbml6ZVJlcXVpcmVkRXh0ZW5z
aW9ucyh0aGlzKTsgfQogICAgIHZpcnR1YWwgdm9pZCBzeW5jaHJvbml6ZVN5c3RlbUxhbmd1YWdl
KCkgeyBTVkdUZXN0czo6c3luY2hyb25pemVTeXN0ZW1MYW5ndWFnZSh0aGlzKTsgfQogCisgICAg
UmVuZGVyT2JqZWN0KiBjcmVhdGVSZW5kZXJlcihSZW5kZXJBcmVuYSosIFJlbmRlclN0eWxlKik7
CisKIHByaXZhdGU6CiAgICAgT3duUHRyPFNWR1BhdGhCeXRlU3RyZWFtPiBtX3BhdGhCeXRlU3Ry
ZWFtOwogICAgIG11dGFibGUgU1ZHU3luY2hyb25pemFibGVBbmltYXRlZFByb3BlcnR5PFNWR1Bh
dGhTZWdMaXN0PiBtX3BhdGhTZWdMaXN0OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvc3Zn
L1NWR1BvbHlFbGVtZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdQb2x5RWxlbWVudC5j
cHAKaW5kZXggNjZjNTI1OC4uYThiNjdjNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvc3Zn
L1NWR1BvbHlFbGVtZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHUG9seUVsZW1l
bnQuY3BwCkBAIC0xMjQsNyArMTI0LDcgQEAgdm9pZCBTVkdQb2x5RWxlbWVudDo6c3ZnQXR0cmli
dXRlQ2hhbmdlZChjb25zdCBRdWFsaWZpZWROYW1lJiBhdHRyTmFtZSkKICAgICAgICAgcmV0dXJu
OwogCiAgICAgaWYgKGF0dHJOYW1lID09IFNWR05hbWVzOjpwb2ludHNBdHRyKSB7Ci0gICAgICAg
IHJlbmRlcmVyLT5zZXROZWVkc1BhdGhVcGRhdGUoKTsKKyAgICAgICAgcmVuZGVyZXItPnNldE5l
ZWRzU2hhcGVVcGRhdGUoKTsKICAgICAgICAgUmVuZGVyU1ZHUmVzb3VyY2U6Om1hcmtGb3JMYXlv
dXRBbmRQYXJlbnRSZXNvdXJjZUludmFsaWRhdGlvbihyZW5kZXJlcik7CiAgICAgICAgIHJldHVy
bjsKICAgICB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHUmVjdEVsZW1lbnQu
Y3BwIGIvU291cmNlL1dlYkNvcmUvc3ZnL1NWR1JlY3RFbGVtZW50LmNwcAppbmRleCA5MjA3NzQ1
Li41ODBjNjM1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHUmVjdEVsZW1lbnQu
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdSZWN0RWxlbWVudC5jcHAKQEAgLTI1LDYg
KzI1LDcgQEAKIAogI2luY2x1ZGUgIkF0dHJpYnV0ZS5oIgogI2luY2x1ZGUgIlJlbmRlclNWR1Bh
dGguaCIKKyNpbmNsdWRlICJSZW5kZXJTVkdSZWN0LmgiCiAjaW5jbHVkZSAiUmVuZGVyU1ZHUmVz
b3VyY2UuaCIKICNpbmNsdWRlICJTVkdFbGVtZW50SW5zdGFuY2UuaCIKICNpbmNsdWRlICJTVkdM
ZW5ndGguaCIKQEAgLTMyLDYgKzMzLDggQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCitjbGFz
cyBSZW5kZXJTVkdSZWN0OworCiAvLyBBbmltYXRlZCBwcm9wZXJ0eSBkZWZpbml0aW9ucwogREVG
SU5FX0FOSU1BVEVEX0xFTkdUSChTVkdSZWN0RWxlbWVudCwgU1ZHTmFtZXM6OnhBdHRyLCBYLCB4
KQogREVGSU5FX0FOSU1BVEVEX0xFTkdUSChTVkdSZWN0RWxlbWVudCwgU1ZHTmFtZXM6OnlBdHRy
LCBZLCB5KQpAQCAtMTM3LDEyICsxNDAsMTIgQEAgdm9pZCBTVkdSZWN0RWxlbWVudDo6c3ZnQXR0
cmlidXRlQ2hhbmdlZChjb25zdCBRdWFsaWZpZWROYW1lJiBhdHRyTmFtZSkKICAgICBpZiAoU1ZH
VGVzdHM6OmhhbmRsZUF0dHJpYnV0ZUNoYW5nZSh0aGlzLCBhdHRyTmFtZSkpCiAgICAgICAgIHJl
dHVybjsKIAotICAgIFJlbmRlclNWR1BhdGgqIHJlbmRlcmVyID0gc3RhdGljX2Nhc3Q8UmVuZGVy
U1ZHUGF0aCo+KHRoaXMtPnJlbmRlcmVyKCkpOworICAgIFJlbmRlclNWR1JlY3QqIHJlbmRlcmVy
ID0gc3RhdGljX2Nhc3Q8UmVuZGVyU1ZHUmVjdCo+KHRoaXMtPnJlbmRlcmVyKCkpOwogICAgIGlm
ICghcmVuZGVyZXIpCiAgICAgICAgIHJldHVybjsKIAogICAgIGlmIChpc0xlbmd0aEF0dHJpYnV0
ZSkgewotICAgICAgICByZW5kZXJlci0+c2V0TmVlZHNQYXRoVXBkYXRlKCk7CisgICAgICAgIHJl
bmRlcmVyLT5zZXROZWVkc1NoYXBlVXBkYXRlKCk7CiAgICAgICAgIFJlbmRlclNWR1Jlc291cmNl
OjptYXJrRm9yTGF5b3V0QW5kUGFyZW50UmVzb3VyY2VJbnZhbGlkYXRpb24ocmVuZGVyZXIpOwog
ICAgICAgICByZXR1cm47CiAgICAgfQpAQCAtMTk4LDYgKzIwMSwxMSBAQCBib29sIFNWR1JlY3RF
bGVtZW50OjpzZWxmSGFzUmVsYXRpdmVMZW5ndGhzKCkgY29uc3QKICAgICAgICAgfHwgcnkoKS5p
c1JlbGF0aXZlKCk7CiB9CiAKK1JlbmRlck9iamVjdCogU1ZHUmVjdEVsZW1lbnQ6OmNyZWF0ZVJl
bmRlcmVyKFJlbmRlckFyZW5hKiBhcmVuYSwgUmVuZGVyU3R5bGUqKQoreworICAgIHJldHVybiBu
ZXcgKGFyZW5hKSBSZW5kZXJTVkdSZWN0KHRoaXMpOworfQorCiB9CiAKICNlbmRpZiAvLyBFTkFC
TEUoU1ZHKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvc3ZnL1NWR1JlY3RFbGVtZW50Lmgg
Yi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHUmVjdEVsZW1lbnQuaAppbmRleCA5OTQzN2YzLi45YmY2
MDJmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHUmVjdEVsZW1lbnQuaAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHUmVjdEVsZW1lbnQuaApAQCAtNTIsNiArNTIsOCBAQCBw
cml2YXRlOgogCiAgICAgdmlydHVhbCBib29sIHNlbGZIYXNSZWxhdGl2ZUxlbmd0aHMoKSBjb25z
dDsKIAorICAgIFJlbmRlck9iamVjdCogY3JlYXRlUmVuZGVyZXIoUmVuZGVyQXJlbmEqLCBSZW5k
ZXJTdHlsZSopOworCiAgICAgQkVHSU5fREVDTEFSRV9BTklNQVRFRF9QUk9QRVJUSUVTKFNWR1Jl
Y3RFbGVtZW50KQogICAgICAgICBERUNMQVJFX0FOSU1BVEVEX0xFTkdUSChYLCB4KQogICAgICAg
ICBERUNMQVJFX0FOSU1BVEVEX0xFTkdUSChZLCB5KQotLSAKMS43LjUuNAoK
</data>
<flag name="review"
          id="107091"
          type_id="1"
          status="-"
          setter="abarth"
    />
    <flag name="commit-queue"
          id="107092"
          type_id="3"
          status="-"
          setter="rhodovan.u-szeged"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>111444</attachid>
            <date>2011-10-18 07:48:52 -0700</date>
            <delta_ts>2011-10-19 06:23:14 -0700</delta_ts>
            <desc>Proposed patch</desc>
            <filename>0001-shadow-fix-soruce.patch</filename>
            <type>text/plain</type>
            <size>109332</size>
            <attacher name="Renata Hodovan">rhodovan.u-szeged</attacher>
            
              <data encoding="base64">RnJvbSA3ZTc1MjY0ZTViZWU4MTkzODA2MjQ5ODg1MDA3ZWYwNDRjODllNzQ4IE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBSZW5hdGEgSG9kb3ZhbiA8cmVuaUB3ZWJraXQub3JnPgpEYXRl
OiBUdWUsIDE4IE9jdCAyMDExIDE2OjQwOjQ3ICswMjAwClN1YmplY3Q6IFtQQVRDSF0gc2hhZG93
IGZpeCBzb3J1Y2UKCi0tLQogTGF5b3V0VGVzdHMvQ2hhbmdlTG9nICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgfCAgIDE0ICsKIC4uLi9wb2ludGVyLWV2ZW50cy1vbi1yb3VuZGVkLXJlY3Qt
ZXhwZWN0ZWQudHh0ICAgIHwgICAgMSArCiAuLi4vY3VzdG9tL3BvaW50ZXItZXZlbnRzLW9uLXJv
dW5kZWQtcmVjdC54aHRtbCAgICB8ICAgNjYgKysrCiAuLi5lbnRzLXdpdGgtbGluZWNhcHMtYW5k
LW1pdGVybGltaXRzLWV4cGVjdGVkLnR4dCB8ICAgIDEgKwogLi4ubnRlci1ldmVudHMtd2l0aC1s
aW5lY2Fwcy1hbmQtbWl0ZXJsaW1pdHMueGh0bWwgfCAgIDY4ICsrKwogU291cmNlL1dlYkNvcmUv
Q01ha2VMaXN0cy50eHQgICAgICAgICAgICAgICAgICAgICAgfCAgICAyICsKIFNvdXJjZS9XZWJD
b3JlL0NoYW5nZUxvZyAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgIDE1OCArKysrKysrCiBT
b3VyY2UvV2ViQ29yZS9HTlVtYWtlZmlsZS5saXN0LmFtICAgICAgICAgICAgICAgICB8ICAgIDQg
KwogU291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBpICAgICAgICAgICAgICAgICAgICAgICAgfCAg
ICA0ICsKIFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUucHJvICAgICAgICAgICAgICAgICAgICAgICAg
IHwgICAgNCArCiBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnZjcHJvai9XZWJDb3JlLnZjcHJvaiAg
ICAgICB8ICAxMTIgKysrKysKIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0Zsb2F0
UmVjdC5jcHAgICAgIHwgICAgNyArCiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9G
bG9hdFJlY3QuaCAgICAgICB8ICAgIDcgKy0KIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJPYmplY3QuaCAgICAgICAgICAgIHwgICAgMiArCiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyVHJlZUFzVGV4dC5jcHAgICAgICB8ICAgIDQgKy0KIFNvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9zdmcvUmVuZGVyU1ZHQWxsSW5PbmUuY3BwIHwgICAgMiArCiAuLi4vV2ViQ29yZS9yZW5k
ZXJpbmcvc3ZnL1JlbmRlclNWR01vZGVsT2JqZWN0LmNwcCB8ICAgIDIgKy0KIFNvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUGF0aC5jcHAgICAgIHwgIDM1NSArLS0tLS0tLS0t
LS0tLS0tCiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1BhdGguaCAgICAg
ICB8ICAgNzIgKy0tLQogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZWN0
LmNwcCAgICAgfCAgMTM2ICsrKysrKwogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5k
ZXJTVkdSZWN0LmggICAgICAgfCAgIDY0ICsrKwogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2
Zy9SZW5kZXJTVkdSZXNvdXJjZS5oICAgfCAgICAzICstCiAuLi4vcmVuZGVyaW5nL3N2Zy9SZW5k
ZXJTVkdSZXNvdXJjZUNsaXBwZXIuY3BwICAgICB8ICAgIDYgKy0KIC4uLi9yZW5kZXJpbmcvc3Zn
L1JlbmRlclNWR1Jlc291cmNlQ29udGFpbmVyLmNwcCAgIHwgICAgMiArLQogLi4uL3JlbmRlcmlu
Zy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VGaWx0ZXIuY3BwICAgICAgfCAgICA0ICstCiAuLi4vcmVu
ZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJjZUZpbHRlci5oICAgICAgICB8ICAgIDIgKy0KIC4u
Li9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291cmNlR3JhZGllbnQuY3BwICAgIHwgICAyMSAr
LQogLi4uL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VHcmFkaWVudC5oICAgICAgfCAg
ICAyICstCiAuLi4vcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJjZVBhdHRlcm4uY3BwICAg
ICB8ICAgMTQgKy0KIC4uLi9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291cmNlUGF0dGVybi5o
ICAgICAgIHwgICAgMiArLQogLi4uL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VTb2xp
ZENvbG9yLmNwcCAgfCAgIDE1ICstCiAuLi4vcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJj
ZVNvbGlkQ29sb3IuaCAgICB8ICAgIDIgKy0KIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcv
UmVuZGVyU1ZHUm9vdC5jcHAgICAgIHwgICAgMSAtCiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
c3ZnL1JlbmRlclNWR1NoYXBlLmNwcCAgICB8ICA0NDYgKysrKysrKysrKysrKysrKysrKysKIFNv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHU2hhcGUuaCAgICAgIHwgIDE2MSAr
KysrKysrCiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR0lubGluZVRleHRCb3guY3Bw
ICB8ICAgIDIgKy0KIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHUmVuZGVyU3VwcG9y
dC5jcHAgIHwgICAgOSArLQogLi4uL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdSZW5kZXJUcmVl
QXNUZXh0LmNwcCAgfCAgIDMxICstCiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR1Jl
bmRlclRyZWVBc1RleHQuaCB8ICAgIDQgKy0KIC4uLi9yZW5kZXJpbmcvc3ZnL1NWR1RleHRSdW5S
ZW5kZXJpbmdDb250ZXh0LmNwcCAgIHwgICAgMiArLQogU291cmNlL1dlYkNvcmUvc3ZnL1NWR0Np
cmNsZUVsZW1lbnQuY3BwICAgICAgICAgICAgfCAgICAyICstCiBTb3VyY2UvV2ViQ29yZS9zdmcv
U1ZHRWxsaXBzZUVsZW1lbnQuY3BwICAgICAgICAgICB8ICAgIDIgKy0KIFNvdXJjZS9XZWJDb3Jl
L3N2Zy9TVkdMaW5lRWxlbWVudC5jcHAgICAgICAgICAgICAgIHwgICAgMiArLQogU291cmNlL1dl
YkNvcmUvc3ZnL1NWR1BhdGhFbGVtZW50LmNwcCAgICAgICAgICAgICAgfCAgIDEwICstCiBTb3Vy
Y2UvV2ViQ29yZS9zdmcvU1ZHUGF0aEVsZW1lbnQuaCAgICAgICAgICAgICAgICB8ICAgIDIgKwog
U291cmNlL1dlYkNvcmUvc3ZnL1NWR1BvbHlFbGVtZW50LmNwcCAgICAgICAgICAgICAgfCAgICAy
ICstCiBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHUmVjdEVsZW1lbnQuY3BwICAgICAgICAgICAgICB8
ICAgMTIgKy0KIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdSZWN0RWxlbWVudC5oICAgICAgICAgICAg
ICAgIHwgICAgMiArCiA0OCBmaWxlcyBjaGFuZ2VkLCAxMzc1IGluc2VydGlvbnMoKyksIDQ3MyBk
ZWxldGlvbnMoLSkKIGNyZWF0ZSBtb2RlIDEwMDY0NCBMYXlvdXRUZXN0cy9zdmcvY3VzdG9tL3Bv
aW50ZXItZXZlbnRzLW9uLXJvdW5kZWQtcmVjdC1leHBlY3RlZC50eHQKIGNyZWF0ZSBtb2RlIDEw
MDY0NCBMYXlvdXRUZXN0cy9zdmcvY3VzdG9tL3BvaW50ZXItZXZlbnRzLW9uLXJvdW5kZWQtcmVj
dC54aHRtbAogY3JlYXRlIG1vZGUgMTAwNjQ0IExheW91dFRlc3RzL3N2Zy9jdXN0b20vcG9pbnRl
ci1ldmVudHMtd2l0aC1saW5lY2Fwcy1hbmQtbWl0ZXJsaW1pdHMtZXhwZWN0ZWQudHh0CiBjcmVh
dGUgbW9kZSAxMDA2NDQgTGF5b3V0VGVzdHMvc3ZnL2N1c3RvbS9wb2ludGVyLWV2ZW50cy13aXRo
LWxpbmVjYXBzLWFuZC1taXRlcmxpbWl0cy54aHRtbAogY3JlYXRlIG1vZGUgMTAwNjQ0IFNvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVjdC5jcHAKIGNyZWF0ZSBtb2RlIDEw
MDY0NCBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1JlY3QuaAogY3JlYXRl
IG1vZGUgMTAwNjQ0IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHU2hhcGUu
Y3BwCiBjcmVhdGUgbW9kZSAxMDA2NDQgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5k
ZXJTVkdTaGFwZS5oCgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nIGIvTGF5b3V0
VGVzdHMvQ2hhbmdlTG9nCmluZGV4IDBlZDFmYWYuLmUxM2RmNTcgMTAwNjQ0Ci0tLSBhL0xheW91
dFRlc3RzL0NoYW5nZUxvZworKysgYi9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKQEAgLTEsMyArMSwx
NyBAQAorMjAxMS0xMC0wNSAgUmVuYXRhIEhvZG92YW4gIDxyZW5pQHdlYmtpdC5vcmc+CisKKyAg
ICAgICAgQWRkIG5ldyByZW5kZXJlciBmb3IgU1ZHUmVjdEVsZW1lbnQuCisgICAgICAgIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD02NTc2OQorCisgICAgICAgIEFkZCBu
ZXcgdGVzdHMgdG8gY2hlY2sgdGhlIG5ldyBzaGFwZSBiYXNlZCByZW5kZXJpbmcgbWVjaGFuaXNt
IG9mIFNWR1JlY3RFbGVtZW50LgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEp
LgorCisgICAgICAgICogc3ZnL2N1c3RvbS9wb2ludGVyLWV2ZW50cy1vbi1yb3VuZGVkLXJlY3Qt
ZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAgICAgKiBzdmcvY3VzdG9tL3BvaW50ZXItZXZlbnRz
LW9uLXJvdW5kZWQtcmVjdC54aHRtbDogQWRkZWQuCisgICAgICAgICogc3ZnL2N1c3RvbS9wb2lu
dGVyLWV2ZW50cy13aXRoLWxpbmVjYXBzLWFuZC1taXRlcmxpbWl0cy1leHBlY3RlZC50eHQ6IEFk
ZGVkLgorICAgICAgICAqIHN2Zy9jdXN0b20vcG9pbnRlci1ldmVudHMtd2l0aC1saW5lY2Fwcy1h
bmQtbWl0ZXJsaW1pdHMueGh0bWw6IEFkZGVkLgorCiAyMDExLTEwLTA1ICBJbHlhIFRpa2hvbm92
c2t5ICA8bG9pc2xvQGNocm9taXVtLm9yZz4KIAogICAgICAgICBVbnJldmlld2VkIHJlYmFzZWxp
bmUgZm9yIHRlc3QuCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9zdmcvY3VzdG9tL3BvaW50ZXIt
ZXZlbnRzLW9uLXJvdW5kZWQtcmVjdC1leHBlY3RlZC50eHQgYi9MYXlvdXRUZXN0cy9zdmcvY3Vz
dG9tL3BvaW50ZXItZXZlbnRzLW9uLXJvdW5kZWQtcmVjdC1leHBlY3RlZC50eHQKbmV3IGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjE1YmFlMAotLS0gL2Rldi9udWxsCisrKyBiL0xh
eW91dFRlc3RzL3N2Zy9jdXN0b20vcG9pbnRlci1ldmVudHMtb24tcm91bmRlZC1yZWN0LWV4cGVj
dGVkLnR4dApAQCAtMCwwICsxIEBACitQQVNTRUQ6IGZhbGxiYWNrUmVjdCBoYWQgcG9pbnRlcgpk
aWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvc3ZnL2N1c3RvbS9wb2ludGVyLWV2ZW50cy1vbi1yb3Vu
ZGVkLXJlY3QueGh0bWwgYi9MYXlvdXRUZXN0cy9zdmcvY3VzdG9tL3BvaW50ZXItZXZlbnRzLW9u
LXJvdW5kZWQtcmVjdC54aHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5j
NjNkMTIyCi0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvc3ZnL2N1c3RvbS9wb2ludGVy
LWV2ZW50cy1vbi1yb3VuZGVkLXJlY3QueGh0bWwKQEAgLTAsMCArMSw2NiBAQAorPGh0bWwgeG1s
bnM9J2h0dHA6Ly93d3cudzMub3JnLzE5OTkveGh0bWwnPgorPGJvZHkgc3R5bGU9Im1hcmdpbjog
MHB4OyBwYWRkaW5nOiAwcHgiPgorCis8c3ZnIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAw
L3N2ZyIgc3R5bGU9InBvc2l0aW9uOmFic29sdXRlOyI+Cis8ZGVmcz4KKworPHN0eWxlIHR5cGU9
InRleHQvY3NzIj48IVtDREFUQVsKK3JlY3Qjcm91bmRlZFJlY3QgeworICAgIGZpbGw6IG5vbmU7
CisgICAgc3Ryb2tlOiBncmVlbjsKKyAgICBzdHJva2Utd2lkdGg6IDIwcHg7CisgICAgc3Ryb2tl
LWxpbmVqb2luOiBiZXZlbDsKK30KK3JlY3Q6aG92ZXIgeworICAgIHN0cm9rZTogcmVkOworfQor
XV0+PC9zdHlsZT4KKzwvZGVmcz4KKworPHJlY3QgaWQ9ImZhbGxiYWNrIiB4PSIzMCIgeT0iMzAi
IHdpZHRoPSI0MjAiIGhlaWdodD0iMzIwIiBmaWxsPSJ5ZWxsb3ciIG9uY2xpY2s9InBhc3NlZCgp
Ii8+Cis8cmVjdCBpZD0icm91bmRlZFJlY3QiIHg9IjQwIiB5PSI0MCIgcng9IjMwIiByeT0iMzAi
IHdpZHRoPSI0MDAiIGhlaWdodD0iMzAwIiBwb2ludGVyLWV2ZW50cz0idmlzaWJsZVN0cm9rZSIg
b25jbGljaz0iZmFpbGVkKCkiLz4KKzx0ZXh0IGlkPSJ0ZXh0IiB4PSIzMCIgeT0iMzcwIj48L3Rl
eHQ+CisKKzxzY3JpcHQgdHlwZT0idGV4dC9lY21hc2NyaXB0Ij4KKyAgICA8IVtDREFUQVsKKwor
dmFyIGZhbGxiYWNrID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImZhbGxiYWNrIik7Cit2YXIg
cm91bmRlZFJlY3QgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgicm91bmRlZFJlY3QiKTsKK3Zh
ciB0ZXh0ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoInRleHQiKTsKKworICAgIGZhbGxiYWNr
LmFkZEV2ZW50TGlzdGVuZXIoIm1vdXNlZG93biIsIHBhc3NlZCwgZmFsc2UpOworICAgIHJvdW5k
ZWRSZWN0LmFkZEV2ZW50TGlzdGVuZXIoIm1vdXNlZG93biIsIGZhaWxlZCwgZmFsc2UpOworCitm
dW5jdGlvbiBzdG9wKCkgeworICAgIGZhbGxiYWNrLnJlbW92ZUV2ZW50TGlzdGVuZXIoIm1vdXNl
ZG93biIsIGZhaWxlZCwgZmFsc2UpOworICAgIHJvdW5kZWRSZWN0LnJlbW92ZUV2ZW50TGlzdGVu
ZXIoIm1vdXNlZG93biIsIHBhc3NlZCwgZmFsc2UpOworCisgICAgaWYgKHdpbmRvdy5sYXlvdXRU
ZXN0Q29udHJvbGxlcikKKyAgICBsYXlvdXRUZXN0Q29udHJvbGxlci5ub3RpZnlEb25lKCk7Cit9
CisKK2Z1bmN0aW9uIGZhaWxlZCgpIHsKKyAgICB0ZXh0LnRleHRDb250ZW50ID0gJ0ZBSUxFRDog
c3Ryb2tlUmVjdCBoYWQgcG9pbnRlcic7CisgICAgc3RvcCgpOworfQorCitmdW5jdGlvbiBwYXNz
ZWQoKSB7CisgICB0ZXh0LnRleHRDb250ZW50ID0gJ1BBU1NFRDogZmFsbGJhY2tSZWN0IGhhZCBw
b2ludGVyJzsKKyAgIHN0b3AoKTsKK30KKworaWYgKHdpbmRvdy5sYXlvdXRUZXN0Q29udHJvbGxl
cikgeworICAgbGF5b3V0VGVzdENvbnRyb2xsZXIud2FpdFVudGlsRG9uZSgpOworICAgbGF5b3V0
VGVzdENvbnRyb2xsZXIuZHVtcEFzVGV4dCgpOworfQorCitpZiAod2luZG93LmV2ZW50U2VuZGVy
KSB7CisgICAgZXZlbnRTZW5kZXIubW91c2VNb3ZlVG8oMzEsIDMxKTsKKyAgICBldmVudFNlbmRl
ci5tb3VzZURvd24oKTsKK30KK11dPgorPC9zY3JpcHQ+CisKKzwvc3ZnPgorPC9ib2R5PgorPC9o
dG1sPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL0xheW91dFRlc3Rz
L3N2Zy9jdXN0b20vcG9pbnRlci1ldmVudHMtd2l0aC1saW5lY2Fwcy1hbmQtbWl0ZXJsaW1pdHMt
ZXhwZWN0ZWQudHh0IGIvTGF5b3V0VGVzdHMvc3ZnL2N1c3RvbS9wb2ludGVyLWV2ZW50cy13aXRo
LWxpbmVjYXBzLWFuZC1taXRlcmxpbWl0cy1leHBlY3RlZC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDAwMDAwMC4uNjE1YmFlMAotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3Rz
L3N2Zy9jdXN0b20vcG9pbnRlci1ldmVudHMtd2l0aC1saW5lY2Fwcy1hbmQtbWl0ZXJsaW1pdHMt
ZXhwZWN0ZWQudHh0CkBAIC0wLDAgKzEgQEAKK1BBU1NFRDogZmFsbGJhY2tSZWN0IGhhZCBwb2lu
dGVyCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9zdmcvY3VzdG9tL3BvaW50ZXItZXZlbnRzLXdp
dGgtbGluZWNhcHMtYW5kLW1pdGVybGltaXRzLnhodG1sIGIvTGF5b3V0VGVzdHMvc3ZnL2N1c3Rv
bS9wb2ludGVyLWV2ZW50cy13aXRoLWxpbmVjYXBzLWFuZC1taXRlcmxpbWl0cy54aHRtbApuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45MjI2YjcwCi0tLSAvZGV2L251bGwKKysr
IGIvTGF5b3V0VGVzdHMvc3ZnL2N1c3RvbS9wb2ludGVyLWV2ZW50cy13aXRoLWxpbmVjYXBzLWFu
ZC1taXRlcmxpbWl0cy54aHRtbApAQCAtMCwwICsxLDY4IEBACis8aHRtbCB4bWxucz0naHR0cDov
L3d3dy53My5vcmcvMTk5OS94aHRtbCc+Cis8Ym9keSBzdHlsZT0ibWFyZ2luOiAwcHg7IHBhZGRp
bmc6IDBweCI+CisKKzxzdmcgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiBzdHls
ZT0icG9zaXRpb246YWJzb2x1dGU7Ij4KKzxkZWZzPgorCis8c3R5bGUgdHlwZT0idGV4dC9jc3Mi
PjwhW0NEQVRBWworcmVjdCNzdHJva2VkUmVjdCB7CisgICAgZmlsbDogbm9uZTsKKyAgICBzdHJv
a2U6IGJsdWU7CisgICAgc3Ryb2tlLXdpZHRoOiAyMHB4OworICAgIHN0cm9rZS1saW5lY2FwOiBz
cXVhcmU7CisgICAgc3Ryb2tlLW1pdGVybGltaXQ6IDE7Cit9CityZWN0I3N0cm9rZWRSZWN0Omhv
dmVyIHsKKyAgICBzdHJva2U6IHJlZDsKK30KK11dPjwvc3R5bGU+Cis8L2RlZnM+CisKKzxyZWN0
IGlkPSJmYWxsYmFjayIgeD0iMCIgeT0iMCIgd2lkdGg9IjIxMCIgaGVpZ2h0PSIyMTAiIGZpbGw9
ImdyZWVuIiBvbmNsaWNrPSJwYXNzZWQoKSIvPgorPHJlY3QgaWQ9InN0cm9rZWRSZWN0IiB4PSIx
MCIgeT0iMTAiIHdpZHRoPSIxOTAiIGhlaWdodD0iMTkwIiBwb2ludGVyLWV2ZW50cz0idmlzaWJs
ZVN0cm9rZSIgb25jbGljaz0iZmFpbGVkKCkiLz4KKzx0ZXh0IGlkPSJ0ZXh0IiB4PSIwIiB5PSIy
MzAiPjwvdGV4dD4KKworPHNjcmlwdCB0eXBlPSJ0ZXh0L2VjbWFzY3JpcHQiPgorICAgIDwhW0NE
QVRBWworCit2YXIgZmFsbGJhY2sgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiZmFsbGJhY2si
KTsKK3ZhciBzdHJva2VkUmVjdCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJzdHJva2VkUmVj
dCIpOwordmFyIHRleHQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgidGV4dCIpOworCitmYWxs
YmFjay5hZGRFdmVudExpc3RlbmVyKCJtb3VzZWRvd24iLCBwYXNzZWQsIGZhbHNlKTsKK3N0cm9r
ZWRSZWN0LmFkZEV2ZW50TGlzdGVuZXIoIm1vdXNlZG93biIsIGZhaWxlZCwgZmFsc2UpOworCitm
dW5jdGlvbiBzdG9wKCkgeworICAgIGZhbGxiYWNrLnJlbW92ZUV2ZW50TGlzdGVuZXIoIm1vdXNl
ZG93biIsIGZhaWxlZCwgZmFsc2UpOworICAgIHN0cm9rZWRSZWN0LnJlbW92ZUV2ZW50TGlzdGVu
ZXIoIm1vdXNlZG93biIsIHBhc3NlZCwgZmFsc2UpOworCitpZiAod2luZG93LmxheW91dFRlc3RD
b250cm9sbGVyKQorICAgIGxheW91dFRlc3RDb250cm9sbGVyLm5vdGlmeURvbmUoKTsKK30KKwor
ZnVuY3Rpb24gZmFpbGVkKCkgeworICAgIHRleHQudGV4dENvbnRlbnQgPSAnRkFJTEVEOiBzdHJv
a2VSZWN0IGhhZCBwb2ludGVyJzsKKyAgICBzdG9wKCk7Cit9CisKK2Z1bmN0aW9uIHBhc3NlZCgp
IHsKKyAgICB0ZXh0LnRleHRDb250ZW50ID0gJ1BBU1NFRDogZmFsbGJhY2tSZWN0IGhhZCBwb2lu
dGVyJzsKKyAgICBzdG9wKCk7Cit9CisKK2lmICh3aW5kb3cubGF5b3V0VGVzdENvbnRyb2xsZXIp
IHsKKyAgICBsYXlvdXRUZXN0Q29udHJvbGxlci53YWl0VW50aWxEb25lKCk7CisgICAgbGF5b3V0
VGVzdENvbnRyb2xsZXIuZHVtcEFzVGV4dCgpOworfQorCitpZiAod2luZG93LmV2ZW50U2VuZGVy
KSB7CisgICAgZXZlbnRTZW5kZXIubW91c2VNb3ZlVG8oMSwgMSk7CisgICAgZXZlbnRTZW5kZXIu
bW91c2VEb3duKCk7Cit9CisKK11dPgorPC9zY3JpcHQ+Cis8L3N2Zz4KKworPC9ib2R5PgorPC9o
dG1sPgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvQ01ha2VMaXN0cy50eHQgYi9Tb3VyY2Uv
V2ViQ29yZS9DTWFrZUxpc3RzLnR4dAppbmRleCBlNTQyZjRhLi5kZTM0MWE0IDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9DTWFrZUxpc3RzLnR4dAorKysgYi9Tb3VyY2UvV2ViQ29yZS9DTWFr
ZUxpc3RzLnR4dApAQCAtMTYwNyw2ICsxNjA3LDcgQEAgSUYgKEVOQUJMRV9TVkcpCiAgICAgICAg
IHJlbmRlcmluZy9zdmcvUmVuZGVyU1ZHSW5saW5lVGV4dC5jcHAKICAgICAgICAgcmVuZGVyaW5n
L3N2Zy9SZW5kZXJTVkdNb2RlbE9iamVjdC5jcHAKICAgICAgICAgcmVuZGVyaW5nL3N2Zy9SZW5k
ZXJTVkdQYXRoLmNwcAorICAgICAgICByZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1JlY3QuY3BwCiAg
ICAgICAgIHJlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2UuY3BwCiAgICAgICAgIHJlbmRl
cmluZy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VDbGlwcGVyLmNwcAogICAgICAgICByZW5kZXJpbmcv
c3ZnL1JlbmRlclNWR1Jlc291cmNlQ29udGFpbmVyLmNwcApAQCAtMTYyMSw2ICsxNjIyLDcgQEAg
SUYgKEVOQUJMRV9TVkcpCiAgICAgICAgIHJlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VT
b2xpZENvbG9yLmNwcAogICAgICAgICByZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jvb3QuY3BwCiAg
ICAgICAgIHJlbmRlcmluZy9zdmcvUmVuZGVyU1ZHU2hhZG93VHJlZVJvb3RDb250YWluZXIuY3Bw
CisgICAgICAgIHJlbmRlcmluZy9zdmcvUmVuZGVyU1ZHU2hhcGUuY3BwCiAgICAgICAgIHJlbmRl
cmluZy9zdmcvUmVuZGVyU1ZHVFNwYW4uY3BwCiAgICAgICAgIHJlbmRlcmluZy9zdmcvUmVuZGVy
U1ZHVGV4dC5jcHAKICAgICAgICAgcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdUZXh0UGF0aC5jcHAK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCA1OWU4YzYzLi4yNWU5M2ZkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTYx
IEBACisyMDExLTEwLTA1ICBSZW5hdGEgSG9kb3ZhbiAgPHJlbmlAd2Via2l0Lm9yZz4KKworICAg
ICAgICBBZGQgbmV3IHJlbmRlcmVyIGZvciBTVkdSZWN0RWxlbWVudC4KKyAgICAgICAgaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTY1NzY5CisKKyAgICAgICAgVGhpcyBw
YXRjaCBpbnRyb2R1Y2VzIGEgbmV3IGNvbW1vbiBiYXNlIGNsYXNzIGNhbGxlZCBSZW5kZXJTVkdT
aGFwZSB3aGljaAorICAgICAgICByZXBsYWNlcyB0aGUgUmVuZGVyU1ZHUGF0aC4gVGhpcyBuZXcg
YmFzZSBjbGFzcyBoYXMgdGhlIHNhbWUgcHVycG9zZQorICAgICAgICBhcyB0aGUgcmVwbGFjZWQg
Y2xhc3MgYW5kIGhhcyBzcGVjaWFsaXplZCBkZXNjZW5kYW50cyBmb3IgY29tbW9uCisgICAgICAg
IHNoYXBlcyAobGlrZSBSZWN0YW5nbGVzIGFuZCBDaXJjbGVzKSwgd2hpY2ggYWxsb3dzIGZhc3Rl
ciBwYWludGluZworICAgICAgICBvZiB0aGVzZSBzaGFwZXMgd2hlbiBjZXJ0YWluIGNvbmRpdGlv
bnMgYXJlIGZ1bGZpbGxlZC4gT24gc29tZQorICAgICAgICBiZW5jaG1hcmsgcHJvZ3JhbXMgd2Ug
aGF2ZSBzZWVuIDUlIHNwZWVkdXAuCisKKyAgICAgICAgVGhlIGJpZ2dlc3QgbW90aXZhdGlvbiBv
ZiB0aGlzIHJlZmFjdG9yIGlzIHRha2luZyBhZHZhbnRhZ2UKKyAgICAgICAgb2YgZmFzdGVyIHBy
aW1pdGl2ZSBkcmF3aW5nIGluIHRoZSBtb3N0IGNvbW1vbiBhbmQgZnJlcXVlbnQKKyAgICAgICAg
Y2FzZXMuIEhvd2V2ZXIgaW4gc29tZSByYXJlIGNhc2VzLCBsaWtlIHBhaW50aW5nIHJvdW5kZWQK
KyAgICAgICAgcmVjdHMsIHdlIG5lZWQgdG8gZmFsbGJhY2sgdG8gdGhlIG9yaWdpbmFsIGNvZGUg
cGF0aCwgd2hpY2gKKyAgICAgICAgaXMgZnVsbHkga2VwdCBpbiB0aGUgUmVuZGVyU1ZHU2hhcGUg
YmFzZSBjbGFzcy4gU29tZSBvdGhlcgorICAgICAgICBjYXNlcywgbGlrZSBkYXNoZWQgc3Ryb2tl
cywgY2FuIGJlIHBhaW50ZWQgYnV0IG1vdXNlIHBvaW50ZXIKKyAgICAgICAgZXZlbnRzIGNhbm5v
dCBiZSBoYW5kbGVkIGJ5IHRoZSBkZXNjZW5kYW50IGNsYXNzZXMuIEEgZGlmZmVyZW50CisgICAg
ICAgIGZhbGxiYWNrIG1lY2hhbmlzbSBpcyB1c2VkIGluIHN1Y2ggY2FzZXMgd2hpY2ggcmVkaXJl
Y3RzCisgICAgICAgIG9ubHkgdGhlIHBvaW50ZXIgZXZlbnQgaGFuZGxpbmcgdG8gdGhlIGJhc2Ug
Y2xhc3MuCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAg
VGVzdHM6IHN2Zy9jdXN0b20vcG9pbnRlci1ldmVudHMtb24tcm91bmRlZC1yZWN0LnhodG1sCisg
ICAgICAgICAgICAgICBzdmcvY3VzdG9tL3BvaW50ZXItZXZlbnRzLXdpdGgtbGluZWNhcHMtYW5k
LW1pdGVybGltaXRzLnhodG1sCisKKyAgICAgICAgKiBDTWFrZUxpc3RzLnR4dDoKKyAgICAgICAg
KiBHTlVtYWtlZmlsZS5saXN0LmFtOgorICAgICAgICAqIFdlYkNvcmUuZ3lwaToKKyAgICAgICAg
KiBXZWJDb3JlLnBybzoKKyAgICAgICAgKiBXZWJDb3JlLnZjcHJvai9XZWJDb3JlLnZjcHJvajoK
KyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9GbG9hdFJlY3QuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6RmxvYXRSZWN0Ojpjb250YWlucyk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mv
RmxvYXRSZWN0Lmg6CisgICAgICAgIChXZWJDb3JlOjpGbG9hdFJlY3Q6OmNvbnRhaW5zKToKKyAg
ICAgICAgKiByZW5kZXJpbmcvUmVuZGVyT2JqZWN0Lmg6CisgICAgICAgIChXZWJDb3JlOjpSZW5k
ZXJPYmplY3Q6OmlzU1ZHUmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJPYmplY3Q6Omlz
U1ZHU2hhcGUpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJUcmVlQXNUZXh0LmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OndyaXRlKToKKyAgICAgICAgKiByZW5kZXJpbmcvc3ZnL1JlbmRlclNW
R0FsbEluT25lLmNwcDoKKyAgICAgICAgKiByZW5kZXJpbmcvc3ZnL1JlbmRlclNWR01vZGVsT2Jq
ZWN0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmlzR3JhcGhpY3NFbGVtZW50KToKKyAgICAgICAg
KiByZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1BhdGguY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVu
ZGVyU1ZHUGF0aDo6UmVuZGVyU1ZHUGF0aCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJTVkdQ
YXRoOjppbmZsYXRlV2l0aE1hcmtlckJvdW5kcyk6IFVuaXRlIHRoZSBtYXJrZXJCb3VuZHMgd2l0
aCBzdHJva2VCb3VuZGluZ0JveC4KKyAgICAgICAgKiByZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Bh
dGguaDoKKyAgICAgICAgKiByZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1JlY3QuY3BwOiBBZGRlZC4K
KyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclNWR1JlY3Q6OlJlbmRlclNWR1JlY3QpOgorICAgICAg
ICAoV2ViQ29yZTo6UmVuZGVyU1ZHUmVjdDo6flJlbmRlclNWR1JlY3QpOgorICAgICAgICAoV2Vi
Q29yZTo6UmVuZGVyU1ZHUmVjdDo6Y3JlYXRlU2hhcGUpOgorICAgICAgICAoV2ViQ29yZTo6UmVu
ZGVyU1ZHUmVjdDo6b2JqZWN0Qm91bmRpbmdCb3gpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVy
U1ZHUmVjdDo6c3Ryb2tlQm91bmRpbmdCb3gpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU1ZH
UmVjdDo6ZmlsbFNoYXBlKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclNWR1JlY3Q6OnN0cm9r
ZVNoYXBlKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclNWR1JlY3Q6OnNoYXBlRGVwZW5kZW50
U3Ryb2tlQ29udGFpbnMpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU1ZHUmVjdDo6c2hhcGVE
ZXBlbmRlbnRGaWxsQ29udGFpbnMpOgorICAgICAgICAqIHJlbmRlcmluZy9zdmcvUmVuZGVyU1ZH
UmVjdC5oOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclNWR1JlY3Q6OmlzU1ZHUmVj
dCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJTVkdSZWN0OjpyZW5kZXJOYW1lKToKKyAgICAg
ICAgKFdlYkNvcmU6OlJlbmRlclNWR1JlY3Q6OmlzRW1wdHkpOgorICAgICAgICAqIHJlbmRlcmlu
Zy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2UuaDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclNWR1Jl
c291cmNlOjpwb3N0QXBwbHlSZXNvdXJjZSk6IEEgbmV3IHNoYXBlIGFyZ3VtZW50IHdhcyBhZGRl
ZCB0byBhbGxvdyBzaGFwZSBzcGVjaWZpYyBmYXN0ZXIgcGFpbnRpbmcuCisgICAgICAgICogcmVu
ZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJjZUNsaXBwZXIuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6UmVuZGVyU1ZHUmVzb3VyY2VDbGlwcGVyOjpkcmF3Q29udGVudEludG9NYXNrSW1hZ2UpOgor
ICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU1ZHUmVzb3VyY2VDbGlwcGVyOjpjYWxjdWxhdGVDbGlw
Q29udGVudFJlcGFpbnRSZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclNWR1Jlc291cmNl
Q2xpcHBlcjo6aGl0VGVzdENsaXBDb250ZW50KToKKyAgICAgICAgKiByZW5kZXJpbmcvc3ZnL1Jl
bmRlclNWR1Jlc291cmNlQ29udGFpbmVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclNW
R1Jlc291cmNlQ29udGFpbmVyOjp0cmFuc2Zvcm1Pbk5vblNjYWxpbmdTdHJva2UpOgorICAgICAg
ICAqIHJlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VGaWx0ZXIuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6UmVuZGVyU1ZHUmVzb3VyY2VGaWx0ZXI6OnBvc3RBcHBseVJlc291cmNlKToKKyAg
ICAgICAgKiByZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291cmNlRmlsdGVyLmg6CisgICAgICAg
ICogcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJjZUdyYWRpZW50LmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OlJlbmRlclNWR1Jlc291cmNlR3JhZGllbnQ6OmFwcGx5UmVzb3VyY2UpOgorICAg
ICAgICAqIHJlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VHcmFkaWVudC5oOgorICAgICAg
ICAqIHJlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VQYXR0ZXJuLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OlJlbmRlclNWR1Jlc291cmNlUGF0dGVybjo6cG9zdEFwcGx5UmVzb3VyY2UpOgor
ICAgICAgICAqIHJlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VQYXR0ZXJuLmg6CisgICAg
ICAgICogcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJjZVNvbGlkQ29sb3IuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6UmVuZGVyU1ZHUmVzb3VyY2VTb2xpZENvbG9yOjpwb3N0QXBwbHlSZXNv
dXJjZSk6CisgICAgICAgICogcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJjZVNvbGlkQ29s
b3IuaDoKKyAgICAgICAgKiByZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1NoYXBlLmNwcDogQ29waWVk
IGZyb20gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdQYXRoLmNwcC4KKyAg
ICAgICAgKFdlYkNvcmU6OlJlbmRlclNWR1NoYXBlOjpSZW5kZXJTVkdTaGFwZSk6CisgICAgICAg
IChXZWJDb3JlOjpSZW5kZXJTVkdTaGFwZTo6flJlbmRlclNWR1NoYXBlKToKKyAgICAgICAgKFdl
YkNvcmU6OlJlbmRlclNWR1NoYXBlOjpjcmVhdGVTaGFwZSk6CisgICAgICAgIChXZWJDb3JlOjpS
ZW5kZXJTVkdTaGFwZTo6aXNFbXB0eSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJTVkdTaGFw
ZTo6ZmlsbFNoYXBlKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclNWR1NoYXBlOjpvYmplY3RC
b3VuZGluZ0JveCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJTVkdTaGFwZTo6c3Ryb2tlQm91
bmRpbmdCb3gpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU1ZHU2hhcGU6OnN0cm9rZVNoYXBl
KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclNWR1NoYXBlOjpzaGFwZURlcGVuZGVudFN0cm9r
ZUNvbnRhaW5zKToKKyAgICAgICAgVGhlIHB1cnBvc2Ugb2YgdGhpcyB2aXJ0dWFsIGZ1bmN0aW9u
IGFsbG93cyBkZWNlbmRhbnRzIHRvIHVzZSB0aGVpciBvd24gZmFzdCBjaGVja3MuCisgICAgICAg
IChXZWJDb3JlOjpSZW5kZXJTVkdTaGFwZTo6c2hhcGVEZXBlbmRlbnRGaWxsQ29udGFpbnMpOgor
ICAgICAgICBUaGUgcHVycG9zZSBvZiB0aGlzIHZpcnR1YWwgZnVuY3Rpb24gYWxsb3dzIGRlY2Vu
ZGFudHMgdG8gdXNlIHRoZWlyIG93biBmYXN0IGNoZWNrcy4KKyAgICAgICAgKFdlYkNvcmU6OlJl
bmRlclNWR1NoYXBlOjpmaWxsQ29udGFpbnMpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU1ZH
U2hhcGU6OnN0cm9rZUNvbnRhaW5zKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclNWR1NoYXBl
OjpsYXlvdXQpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU1ZHU2hhcGU6OnNob3VsZFN0cm9r
ZVplcm9MZW5ndGhTdWJwYXRoKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclNWR1NoYXBlOjp6
ZXJvTGVuZ3RoU3VicGF0aFJlY3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU1ZHU2hhcGU6
OnNldHVwU3F1YXJlQ2FwUGF0aCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJTVkdTaGFwZTo6
c2V0dXBOb25TY2FsaW5nU3Ryb2tlUGF0aCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJTVkdT
aGFwZTo6ZmlsbEFuZFN0cm9rZVBhdGgpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU1ZHU2hh
cGU6OnBhaW50KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclNWR1NoYXBlOjphZGRGb2N1c1Jp
bmdSZWN0cyk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJTVkdTaGFwZTo6bm9kZUF0RmxvYXRQ
b2ludCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJTVkdTaGFwZTo6Y2FsY3VsYXRlTWFya2Vy
Qm91bmRzSWZOZWVkZWQpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU1ZHU2hhcGU6OnVwZGF0
ZUNhY2hlZEJvdW5kYXJpZXMpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU1ZHU2hhcGU6OnN0
cm9rZVdpZHRoKToKKyAgICAgICAgKiByZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1NoYXBlLmg6IENv
cGllZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUGF0aC5oLgor
ICAgICAgICAoV2ViQ29yZTo6Qm91bmRpbmdSZWN0U3Ryb2tlU3R5bGVBcHBsaWVyOjpCb3VuZGlu
Z1JlY3RTdHJva2VTdHlsZUFwcGxpZXIpOgorICAgICAgICAoV2ViQ29yZTo6Qm91bmRpbmdSZWN0
U3Ryb2tlU3R5bGVBcHBsaWVyOjpzdHJva2VTdHlsZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5k
ZXJTVkdTaGFwZTo6c2V0TmVlZHNTaGFwZVVwZGF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5k
ZXJTVkdTaGFwZTo6c2V0TmVlZHNCb3VuZGFyaWVzVXBkYXRlKToKKyAgICAgICAgKFdlYkNvcmU6
OlJlbmRlclNWR1NoYXBlOjpzZXROZWVkc1RyYW5zZm9ybVVwZGF0ZSk6CisgICAgICAgIChXZWJD
b3JlOjpSZW5kZXJTVkdTaGFwZTo6aXNQYWludGluZ0ZhbGxiYWNrKToKKyAgICAgICAgKFdlYkNv
cmU6OlJlbmRlclNWR1NoYXBlOjpwYXRoKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclNWR1No
YXBlOjpzZXRJc1BhaW50aW5nRmFsbGJhY2spOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU1ZH
U2hhcGU6OnNldFN0cm9rZUFuZE1hcmtlckJvdW5kaW5nQm94KToKKyAgICAgICAgKFdlYkNvcmU6
OlJlbmRlclNWR1NoYXBlOjpoYXNQYXRoKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclNWR1No
YXBlOjpyZXBhaW50UmVjdEluTG9jYWxDb29yZGluYXRlcyk6CisgICAgICAgIChXZWJDb3JlOjpS
ZW5kZXJTVkdTaGFwZTo6bG9jYWxUb1BhcmVudFRyYW5zZm9ybSk6CisgICAgICAgIChXZWJDb3Jl
OjpSZW5kZXJTVkdTaGFwZTo6bG9jYWxUcmFuc2Zvcm0pOgorICAgICAgICAoV2ViQ29yZTo6UmVu
ZGVyU1ZHU2hhcGU6OmlzU1ZHU2hhcGUpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU1ZHU2hh
cGU6OnJlbmRlck5hbWUpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU1ZHU2hhcGU6OmlzUm91
bmRlZFJlY3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU1ZHU2hhcGU6OmluZmxhdGVXaXRo
TWFya2VyQm91bmRzKToKKyAgICAgICAgKFdlYkNvcmU6OnRvUmVuZGVyU1ZHU2hhcGUpOgorICAg
ICAgICAqIHJlbmRlcmluZy9zdmcvU1ZHSW5saW5lVGV4dEJveC5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpTVkdJbmxpbmVUZXh0Qm94OjpyZWxlYXNlUGFpbnRpbmdSZXNvdXJjZSk6CisgICAgICAg
ICogcmVuZGVyaW5nL3N2Zy9TVkdSZW5kZXJTdXBwb3J0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OlNWR1JlbmRlclN1cHBvcnQ6OmZpbmlzaFJlbmRlclNWR0NvbnRlbnQpOgorICAgICAgICAoV2Vi
Q29yZTo6U1ZHUmVuZGVyU3VwcG9ydDo6bGF5b3V0Q2hpbGRyZW4pOgorICAgICAgICAqIHJlbmRl
cmluZy9zdmcvU1ZHUmVuZGVyVHJlZUFzVGV4dC5jcHA6CisgICAgICAgIChXZWJDb3JlOjp3cml0
ZVN0eWxlKToKKyAgICAgICAgKFdlYkNvcmU6Om9wZXJhdG9yPDwpOgorICAgICAgICAoV2ViQ29y
ZTo6d3JpdGUpOgorICAgICAgICAqIHJlbmRlcmluZy9zdmcvU1ZHUmVuZGVyVHJlZUFzVGV4dC5o
OgorICAgICAgICAqIHJlbmRlcmluZy9zdmcvU1ZHVGV4dFJ1blJlbmRlcmluZ0NvbnRleHQuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6U1ZHVGV4dFJ1blJlbmRlcmluZ0NvbnRleHQ6OmRyYXdTVkdH
bHlwaHMpOgorICAgICAgICAqIHN2Zy9TVkdDaXJjbGVFbGVtZW50LmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OlNWR0NpcmNsZUVsZW1lbnQ6OnN2Z0F0dHJpYnV0ZUNoYW5nZWQpOgorICAgICAgICAq
IHN2Zy9TVkdFbGxpcHNlRWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTVkdFbGxpcHNl
RWxlbWVudDo6c3ZnQXR0cmlidXRlQ2hhbmdlZCk6CisgICAgICAgICogc3ZnL1NWR0xpbmVFbGVt
ZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR0xpbmVFbGVtZW50OjpzdmdBdHRyaWJ1dGVD
aGFuZ2VkKToKKyAgICAgICAgKiBzdmcvU1ZHUGF0aEVsZW1lbnQuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6U1ZHUGF0aEVsZW1lbnQ6OnN2Z0F0dHJpYnV0ZUNoYW5nZWQpOgorICAgICAgICAoV2Vi
Q29yZTo6U1ZHUGF0aEVsZW1lbnQ6OnBhdGhTZWdMaXN0Q2hhbmdlZCk6CisgICAgICAgIChXZWJD
b3JlOjpTVkdQYXRoRWxlbWVudDo6Y3JlYXRlUmVuZGVyZXIpOgorICAgICAgICAqIHN2Zy9TVkdQ
YXRoRWxlbWVudC5oOgorICAgICAgICAqIHN2Zy9TVkdQb2x5RWxlbWVudC5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpTVkdQb2x5RWxlbWVudDo6c3ZnQXR0cmlidXRlQ2hhbmdlZCk6CisgICAgICAg
ICogc3ZnL1NWR1JlY3RFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR1JlY3RFbGVt
ZW50OjpzdmdBdHRyaWJ1dGVDaGFuZ2VkKToKKyAgICAgICAgKFdlYkNvcmU6OlNWR1JlY3RFbGVt
ZW50OjpjcmVhdGVSZW5kZXJlcik6CisgICAgICAgICogc3ZnL1NWR1JlY3RFbGVtZW50Lmg6CisK
IDIwMTEtMTAtMDUgIElseWEgVGlraG9ub3Zza3kgIDxsb2lzbG9AY2hyb21pdW0ub3JnPgogCiAg
ICAgICAgIFVucmV2aWV3ZWQgYnVpbGQgZml4IGZvciB3aW5kb3dzIGJvdHMgYWZ0ZXIgcjk2Njc5
LgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvR05VbWFrZWZpbGUubGlzdC5hbSBiL1NvdXJj
ZS9XZWJDb3JlL0dOVW1ha2VmaWxlLmxpc3QuYW0KaW5kZXggNTcyYWZmZS4uNjJkZDVlNCAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvR05VbWFrZWZpbGUubGlzdC5hbQorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9HTlVtYWtlZmlsZS5saXN0LmFtCkBAIC0zMjI1LDYgKzMyMjUsOCBAQCB3ZWJjb3Jl
X3NvdXJjZXMgKz0gXAogCVNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHTW9k
ZWxPYmplY3QuaCBcCiAJU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdQYXRo
LmNwcCBcCiAJU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdQYXRoLmggXAor
CVNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVjdC5jcHAgXAorCVNvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVjdC5oIFwKIAlTb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291cmNlQ2xpcHBlci5jcHAgXAogCVNvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VDbGlwcGVyLmggXAogCVNvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VDb250YWluZXIuY3BwIFwK
QEAgLTMyNTMsNiArMzI1NSw4IEBAIHdlYmNvcmVfc291cmNlcyArPSBcCiAJU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSb290LmggXAogCVNvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9zdmcvUmVuZGVyU1ZHU2hhZG93VHJlZVJvb3RDb250YWluZXIuY3BwIFwKIAlTb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1NoYWRvd1RyZWVSb290Q29udGFpbmVyLmgg
XAorCVNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHU2hhcGUuY3BwIFwKKwlT
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1NoYXBlLmggXAogCVNvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHVFNwYW4uY3BwIFwKIAlTb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1RTcGFuLmggXAogCVNvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9zdmcvUmVuZGVyU1ZHVGV4dC5jcHAgXApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
V2ViQ29yZS5neXBpIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBpCmluZGV4IGU1ZjkxZTQu
LmUwM2FmZWYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwaQorKysgYi9T
b3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkKQEAgLTU3NTQsNiArNTc1NCw4IEBACiAgICAgICAg
ICAgICAncmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdNb2RlbE9iamVjdC5oJywKICAgICAgICAgICAg
ICdyZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1BhdGguY3BwJywKICAgICAgICAgICAgICdyZW5kZXJp
bmcvc3ZnL1JlbmRlclNWR1BhdGguaCcsCisgICAgICAgICAgICAncmVuZGVyaW5nL3N2Zy9SZW5k
ZXJTVkdSZWN0LmNwcCcsCisgICAgICAgICAgICAncmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZWN0
LmgnLAogICAgICAgICAgICAgJ3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2UuY3BwJywK
ICAgICAgICAgICAgICdyZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291cmNlLmgnLAogICAgICAg
ICAgICAgJ3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VDbGlwcGVyLmNwcCcsCkBAIC01
NzgyLDYgKzU3ODQsOCBAQAogICAgICAgICAgICAgJ3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUm9v
dC5oJywKICAgICAgICAgICAgICdyZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1NoYWRvd1RyZWVSb290
Q29udGFpbmVyLmNwcCcsCiAgICAgICAgICAgICAncmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdTaGFk
b3dUcmVlUm9vdENvbnRhaW5lci5oJywKKyAgICAgICAgICAgICdyZW5kZXJpbmcvc3ZnL1JlbmRl
clNWR1NoYXBlLmNwcCcsCisgICAgICAgICAgICAncmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdTaGFw
ZS5oJywKICAgICAgICAgICAgICdyZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1RTcGFuLmNwcCcsCiAg
ICAgICAgICAgICAncmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdUU3Bhbi5oJywKICAgICAgICAgICAg
ICdyZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1RleHQuY3BwJywKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL1dlYkNvcmUucHJvIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5wcm8KaW5kZXggNjgx
YmRmMi4uMDk2Y2RlMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5wcm8KKysr
IGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5wcm8KQEAgLTIzMDAsNiArMjMwMCw3IEBAIEhFQURF
UlMgKz0gXAogICAgIHJlbmRlcmluZy9zdmcvUmVuZGVyU1ZHSW5saW5lVGV4dC5oIFwKICAgICBy
ZW5kZXJpbmcvc3ZnL1JlbmRlclNWR01vZGVsT2JqZWN0LmggXAogICAgIHJlbmRlcmluZy9zdmcv
UmVuZGVyU1ZHUGF0aC5oIFwKKyAgICByZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1JlY3QuaCBcCiAg
ICAgcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJjZS5oIFwKICAgICByZW5kZXJpbmcvc3Zn
L1JlbmRlclNWR1Jlc291cmNlQ2xpcHBlci5oIFwKICAgICByZW5kZXJpbmcvc3ZnL1JlbmRlclNW
R1Jlc291cmNlQ29udGFpbmVyLmggXApAQCAtMjMxNCw2ICsyMzE1LDcgQEAgSEVBREVSUyArPSBc
CiAgICAgcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJjZVNvbGlkQ29sb3IuaCBcCiAgICAg
cmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSb290LmggXAogICAgIHJlbmRlcmluZy9zdmcvUmVuZGVy
U1ZHU2hhZG93VHJlZVJvb3RDb250YWluZXIuaCBcCisgICAgcmVuZGVyaW5nL3N2Zy9SZW5kZXJT
VkdTaGFwZS5oIFwKICAgICByZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1RTcGFuLmggXAogICAgIHJl
bmRlcmluZy9zdmcvUmVuZGVyU1ZHVGV4dC5oIFwKICAgICByZW5kZXJpbmcvc3ZnL1JlbmRlclNW
R1RleHRQYXRoLmggXApAQCAtMzMzOSw2ICszMzQxLDggQEAgY29udGFpbnMoREVGSU5FUywgRU5B
QkxFX1NWRz0xKSB7CiAgICAgICAgIHJlbmRlcmluZy9zdHlsZS9TVkdSZW5kZXJTdHlsZURlZnMu
Y3BwIFwKICAgICAgICAgcmVuZGVyaW5nL1BvaW50ZXJFdmVudHNIaXRSdWxlcy5jcHAgXAogICAg
ICAgICByZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1BhdGguY3BwIFwKKyAgICAgICAgcmVuZGVyaW5n
L3N2Zy9SZW5kZXJTVkdSZWN0LmNwcCBcCisgICAgICAgIHJlbmRlcmluZy9zdmcvUmVuZGVyU1ZH
U2hhcGUuY3BwIFwKICAgICAgICAgc3ZnL2FuaW1hdGlvbi9TTUlMVGltZS5jcHAgXAogICAgICAg
ICBzdmcvYW5pbWF0aW9uL1NNSUxUaW1lQ29udGFpbmVyLmNwcCBcCiAgICAgICAgIHN2Zy9hbmlt
YXRpb24vU1ZHU01JTEVsZW1lbnQuY3BwIFwKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1dl
YkNvcmUudmNwcm9qL1dlYkNvcmUudmNwcm9qIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS52Y3By
b2ovV2ViQ29yZS52Y3Byb2oKaW5kZXggNDY1YzIzZS4uYTFhMzYzZSAxMDA3NTUKLS0tIGEvU291
cmNlL1dlYkNvcmUvV2ViQ29yZS52Y3Byb2ovV2ViQ29yZS52Y3Byb2oKKysrIGIvU291cmNlL1dl
YkNvcmUvV2ViQ29yZS52Y3Byb2ovV2ViQ29yZS52Y3Byb2oKQEAgLTQxODM5LDYgKzQxODM5LDEx
OCBAQAogCQkJCQk+CiAJCQkJPC9GaWxlPgogCQkJCTxGaWxlCisJCQkJCVJlbGF0aXZlUGF0aD0i
Li5ccmVuZGVyaW5nXHN2Z1xSZW5kZXJTVkdSZWN0LmNwcCIKKwkJCQkJPgorCQkJCQk8RmlsZUNv
bmZpZ3VyYXRpb24KKwkJCQkJCU5hbWU9IkRlYnVnfFdpbjMyIgorCQkJCQkJRXhjbHVkZWRGcm9t
QnVpbGQ9InRydWUiCisJCQkJCQk+CisJCQkJCQk8VG9vbAorCQkJCQkJCU5hbWU9IlZDQ0xDb21w
aWxlclRvb2wiCisJCQkJCQkvPgorCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPgorCQkJCQk8Rmls
ZUNvbmZpZ3VyYXRpb24KKwkJCQkJCU5hbWU9IlJlbGVhc2V8V2luMzIiCisJCQkJCQlFeGNsdWRl
ZEZyb21CdWlsZD0idHJ1ZSIKKwkJCQkJCT4KKwkJCQkJCTxUb29sCisJCQkJCQkJTmFtZT0iVkND
TENvbXBpbGVyVG9vbCIKKwkJCQkJCS8+CisJCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+CisJCQkJ
CTxGaWxlQ29uZmlndXJhdGlvbgorCQkJCQkJTmFtZT0iRGVidWdfQ2Fpcm9fQ0ZMaXRlfFdpbjMy
IgorCQkJCQkJRXhjbHVkZWRGcm9tQnVpbGQ9InRydWUiCisJCQkJCQk+CisJCQkJCQk8VG9vbAor
CQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiCisJCQkJCQkvPgorCQkJCQk8L0ZpbGVDb25m
aWd1cmF0aW9uPgorCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24KKwkJCQkJCU5hbWU9IlJlbGVhc2Vf
Q2Fpcm9fQ0ZMaXRlfFdpbjMyIgorCQkJCQkJRXhjbHVkZWRGcm9tQnVpbGQ9InRydWUiCisJCQkJ
CQk+CisJCQkJCQk8VG9vbAorCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiCisJCQkJCQkv
PgorCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPgorCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24KKwkJ
CQkJCU5hbWU9IkRlYnVnX0FsbHxXaW4zMiIKKwkJCQkJCUV4Y2x1ZGVkRnJvbUJ1aWxkPSJ0cnVl
IgorCQkJCQkJPgorCQkJCQkJPFRvb2wKKwkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIgor
CQkJCQkJLz4KKwkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4KKwkJCQkJPEZpbGVDb25maWd1cmF0
aW9uCisJCQkJCQlOYW1lPSJQcm9kdWN0aW9ufFdpbjMyIgorCQkJCQkJRXhjbHVkZWRGcm9tQnVp
bGQ9InRydWUiCisJCQkJCQk+CisJCQkJCQk8VG9vbAorCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxl
clRvb2wiCisJCQkJCQkvPgorCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPgorCQkJCTwvRmlsZT4K
KwkJCQk8RmlsZQorCQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXHJlbmRlcmluZ1xzdmdcUmVuZGVyU1ZH
UmVjdC5oIgorCQkJCQk+CisJCQkJPC9GaWxlPgorCQkJCTxGaWxlCisJCQkJCVJlbGF0aXZlUGF0
aD0iLi5ccmVuZGVyaW5nXHN2Z1xSZW5kZXJTVkdTaGFwZS5jcHAiCisJCQkJCT4KKwkJCQkJPEZp
bGVDb25maWd1cmF0aW9uCisJCQkJCQlOYW1lPSJEZWJ1Z3xXaW4zMiIKKwkJCQkJCUV4Y2x1ZGVk
RnJvbUJ1aWxkPSJ0cnVlIgorCQkJCQkJPgorCQkJCQkJPFRvb2wKKwkJCQkJCQlOYW1lPSJWQ0NM
Q29tcGlsZXJUb29sIgorCQkJCQkJLz4KKwkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4KKwkJCQkJ
PEZpbGVDb25maWd1cmF0aW9uCisJCQkJCQlOYW1lPSJSZWxlYXNlfFdpbjMyIgorCQkJCQkJRXhj
bHVkZWRGcm9tQnVpbGQ9InRydWUiCisJCQkJCQk+CisJCQkJCQk8VG9vbAorCQkJCQkJCU5hbWU9
IlZDQ0xDb21waWxlclRvb2wiCisJCQkJCQkvPgorCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPgor
CQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24KKwkJCQkJCU5hbWU9IkRlYnVnX0NhaXJvX0NGTGl0ZXxX
aW4zMiIKKwkJCQkJCUV4Y2x1ZGVkRnJvbUJ1aWxkPSJ0cnVlIgorCQkJCQkJPgorCQkJCQkJPFRv
b2wKKwkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIgorCQkJCQkJLz4KKwkJCQkJPC9GaWxl
Q29uZmlndXJhdGlvbj4KKwkJCQkJPEZpbGVDb25maWd1cmF0aW9uCisJCQkJCQlOYW1lPSJSZWxl
YXNlX0NhaXJvX0NGTGl0ZXxXaW4zMiIKKwkJCQkJCUV4Y2x1ZGVkRnJvbUJ1aWxkPSJ0cnVlIgor
CQkJCQkJPgorCQkJCQkJPFRvb2wKKwkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIgorCQkJ
CQkJLz4KKwkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4KKwkJCQkJPEZpbGVDb25maWd1cmF0aW9u
CisJCQkJCQlOYW1lPSJEZWJ1Z19BbGx8V2luMzIiCisJCQkJCQlFeGNsdWRlZEZyb21CdWlsZD0i
dHJ1ZSIKKwkJCQkJCT4KKwkJCQkJCTxUb29sCisJCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9v
bCIKKwkJCQkJCS8+CisJCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+CisJCQkJCTxGaWxlQ29uZmln
dXJhdGlvbgorCQkJCQkJTmFtZT0iUHJvZHVjdGlvbnxXaW4zMiIKKwkJCQkJCUV4Y2x1ZGVkRnJv
bUJ1aWxkPSJ0cnVlIgorCQkJCQkJPgorCQkJCQkJPFRvb2wKKwkJCQkJCQlOYW1lPSJWQ0NMQ29t
cGlsZXJUb29sIgorCQkJCQkJLz4KKwkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4KKwkJCQk8L0Zp
bGU+CisJCQkJPEZpbGUKKwkJCQkJUmVsYXRpdmVQYXRoPSIuLlxyZW5kZXJpbmdcc3ZnXFJlbmRl
clNWR1NoYXBlLmgiCisJCQkJCT4KKwkJCQk8L0ZpbGU+CisJCQkJPEZpbGUKIAkJCQkJUmVsYXRp
dmVQYXRoPSIuLlxyZW5kZXJpbmdcc3ZnXFJlbmRlclNWR1RleHQuY3BwIgogCQkJCQk+CiAJCQkJ
CTxGaWxlQ29uZmlndXJhdGlvbgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvRmxvYXRSZWN0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L0Zsb2F0UmVjdC5jcHAKaW5kZXggYjg0YTg5Mi4uNmQ0YTIyMCAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRmxvYXRSZWN0LmNwcAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9GbG9hdFJlY3QuY3BwCkBAIC02OCw2ICs2OCwxMyBAQCBi
b29sIEZsb2F0UmVjdDo6Y29udGFpbnMoY29uc3QgRmxvYXRSZWN0JiBvdGhlcikgY29uc3QKICAg
ICAgICAgJiYgeSgpIDw9IG90aGVyLnkoKSAmJiBtYXhZKCkgPj0gb3RoZXIubWF4WSgpOwogfQog
Citib29sIEZsb2F0UmVjdDo6Y29udGFpbnMoY29uc3QgRmxvYXRQb2ludCYgcG9pbnQsIENvbnRh
aW5zTW9kZSBjb250YWluc01vZGUpIGNvbnN0Cit7CisgICAgaWYgKGNvbnRhaW5zTW9kZSA9PSBJ
bnNpZGVPck9uU3Ryb2tlKQorICAgICAgICByZXR1cm4gY29udGFpbnMocG9pbnQueCgpLCBwb2lu
dC55KCkpOworICAgIHJldHVybiB4KCkgPCBwb2ludC54KCkgJiYgbWF4WCgpID4gcG9pbnQueCgp
ICYmIHkoKSA8IHBvaW50LnkoKSAmJiBtYXhZKCkgPiB5KCk7Cit9CisKIHZvaWQgRmxvYXRSZWN0
OjppbnRlcnNlY3QoY29uc3QgRmxvYXRSZWN0JiBvdGhlcikKIHsKICAgICBmbG9hdCBsID0gbWF4
KHgoKSwgb3RoZXIueCgpKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL0Zsb2F0UmVjdC5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRmxv
YXRSZWN0LmgKaW5kZXggNDI0MTcxNi4uN2RlMzQ2ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvRmxvYXRSZWN0LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvRmxvYXRSZWN0LmgKQEAgLTcwLDYgKzcwLDExIEBAIGNsYXNzIEludFBv
aW50OwogCiBjbGFzcyBGbG9hdFJlY3QgewogcHVibGljOgorICAgIGVudW0gQ29udGFpbnNNb2Rl
IHsKKyAgICAgICAgSW5zaWRlT3JPblN0cm9rZSwKKyAgICAgICAgSW5zaWRlQnV0Tm90T25TdHJv
a2UKKyAgICB9OworCiAgICAgRmxvYXRSZWN0KCkgeyB9CiAgICAgRmxvYXRSZWN0KGNvbnN0IEZs
b2F0UG9pbnQmIGxvY2F0aW9uLCBjb25zdCBGbG9hdFNpemUmIHNpemUpCiAgICAgICAgIDogbV9s
b2NhdGlvbihsb2NhdGlvbiksIG1fc2l6ZShzaXplKSB7IH0KQEAgLTE0Miw2ICsxNDcsNyBAQCBw
dWJsaWM6CiAKICAgICBib29sIGludGVyc2VjdHMoY29uc3QgRmxvYXRSZWN0JikgY29uc3Q7CiAg
ICAgYm9vbCBjb250YWlucyhjb25zdCBGbG9hdFJlY3QmKSBjb25zdDsKKyAgICBib29sIGNvbnRh
aW5zKGNvbnN0IEZsb2F0UG9pbnQmLCBDb250YWluc01vZGUgPSBJbnNpZGVPck9uU3Ryb2tlKSBj
b25zdDsKIAogICAgIHZvaWQgaW50ZXJzZWN0KGNvbnN0IEZsb2F0UmVjdCYpOwogICAgIHZvaWQg
dW5pdGUoY29uc3QgRmxvYXRSZWN0Jik7CkBAIC0xNTEsNyArMTU3LDYgQEAgcHVibGljOgogICAg
IC8vIGlzIHJlYWxseSBjaGVja2luZyBmb3IgY29udGFpbm1lbnQgb2YgMXgxIHJlY3QsIGJ1dCB0
aGF0IGRvZXNuJ3QgbWFrZSBzZW5zZSB3aXRoIGZsb2F0cy4KICAgICBib29sIGNvbnRhaW5zKGZs
b2F0IHB4LCBmbG9hdCBweSkgY29uc3QKICAgICAgICAgeyByZXR1cm4gcHggPj0geCgpICYmIHB4
IDw9IG1heFgoKSAmJiBweSA+PSB5KCkgJiYgcHkgPD0gbWF4WSgpOyB9Ci0gICAgYm9vbCBjb250
YWlucyhjb25zdCBGbG9hdFBvaW50JiBwb2ludCkgY29uc3QgeyByZXR1cm4gY29udGFpbnMocG9p
bnQueCgpLCBwb2ludC55KCkpOyB9CiAKICAgICB2b2lkIGluZmxhdGVYKGZsb2F0IGR4KSB7CiAg
ICAgICAgIG1fbG9jYXRpb24uc2V0WChtX2xvY2F0aW9uLngoKSAtIGR4KTsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJPYmplY3QuaCBiL1NvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJPYmplY3QuaAppbmRleCA2ZGQ0YmFjLi5hZTE0YTdiIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyT2JqZWN0LmgKKysrIGIvU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck9iamVjdC5oCkBAIC0zOTYsNiArMzk2LDggQEAgcHVi
bGljOgogICAgIHZpcnR1YWwgYm9vbCBpc1NWR0dyYWRpZW50U3RvcCgpIGNvbnN0IHsgcmV0dXJu
IGZhbHNlOyB9CiAgICAgdmlydHVhbCBib29sIGlzU1ZHSGlkZGVuQ29udGFpbmVyKCkgY29uc3Qg
eyByZXR1cm4gZmFsc2U7IH0KICAgICB2aXJ0dWFsIGJvb2wgaXNTVkdQYXRoKCkgY29uc3QgeyBy
ZXR1cm4gZmFsc2U7IH0KKyAgICB2aXJ0dWFsIGJvb2wgaXNTVkdSZWN0KCkgY29uc3QgeyByZXR1
cm4gZmFsc2U7IH0KKyAgICB2aXJ0dWFsIGJvb2wgaXNTVkdTaGFwZSgpIGNvbnN0IHsgcmV0dXJu
IGZhbHNlOyB9CiAgICAgdmlydHVhbCBib29sIGlzU1ZHVGV4dCgpIGNvbnN0IHsgcmV0dXJuIGZh
bHNlOyB9CiAgICAgdmlydHVhbCBib29sIGlzU1ZHVGV4dFBhdGgoKSBjb25zdCB7IHJldHVybiBm
YWxzZTsgfQogICAgIHZpcnR1YWwgYm9vbCBpc1NWR0lubGluZSgpIGNvbnN0IHsgcmV0dXJuIGZh
bHNlOyB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVHJlZUFz
VGV4dC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVHJlZUFzVGV4dC5jcHAK
aW5kZXggZTJiNmFmYi4uYmMxMjc3ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlclRyZWVBc1RleHQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJUcmVlQXNUZXh0LmNwcApAQCAtNTIxLDggKzUyMSw4IEBAIHN0YXRpYyB2b2lkIHdyaXRl
VGV4dFJ1bihUZXh0U3RyZWFtJiB0cywgY29uc3QgUmVuZGVyVGV4dCYgbywgY29uc3QgSW5saW5l
VGV4dEJvCiB2b2lkIHdyaXRlKFRleHRTdHJlYW0mIHRzLCBjb25zdCBSZW5kZXJPYmplY3QmIG8s
IGludCBpbmRlbnQsIFJlbmRlckFzVGV4dEJlaGF2aW9yIGJlaGF2aW9yKQogewogI2lmIEVOQUJM
RShTVkcpCi0gICAgaWYgKG8uaXNTVkdQYXRoKCkpIHsKLSAgICAgICAgd3JpdGUodHMsICp0b1Jl
bmRlclNWR1BhdGgoJm8pLCBpbmRlbnQpOworICAgIGlmIChvLmlzU1ZHU2hhcGUoKSkgeworICAg
ICAgICB3cml0ZSh0cywgKnRvUmVuZGVyU1ZHU2hhcGUoJm8pLCBpbmRlbnQpOwogICAgICAgICBy
ZXR1cm47CiAgICAgfQogICAgIGlmIChvLmlzU1ZHR3JhZGllbnRTdG9wKCkpIHsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHQWxsSW5PbmUuY3BwIGIv
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdBbGxJbk9uZS5jcHAKaW5kZXgg
OWVhM2JlNS4uMjk2OTAwOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2
Zy9SZW5kZXJTVkdBbGxJbk9uZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2
Zy9SZW5kZXJTVkdBbGxJbk9uZS5jcHAKQEAgLTM1LDYgKzM1LDcgQEAKICNpbmNsdWRlICJSZW5k
ZXJTVkdJbmxpbmVUZXh0LmNwcCIKICNpbmNsdWRlICJSZW5kZXJTVkdNb2RlbE9iamVjdC5jcHAi
CiAjaW5jbHVkZSAiUmVuZGVyU1ZHUGF0aC5jcHAiCisjaW5jbHVkZSAiUmVuZGVyU1ZHUmVjdC5j
cHAiCiAjaW5jbHVkZSAiUmVuZGVyU1ZHUmVzb3VyY2UuY3BwIgogI2luY2x1ZGUgIlJlbmRlclNW
R1Jlc291cmNlQ2xpcHBlci5jcHAiCiAjaW5jbHVkZSAiUmVuZGVyU1ZHUmVzb3VyY2VDb250YWlu
ZXIuY3BwIgpAQCAtNDksNiArNTAsNyBAQAogI2luY2x1ZGUgIlJlbmRlclNWR1Jlc291cmNlU29s
aWRDb2xvci5jcHAiCiAjaW5jbHVkZSAiUmVuZGVyU1ZHUm9vdC5jcHAiCiAjaW5jbHVkZSAiUmVu
ZGVyU1ZHU2hhZG93VHJlZVJvb3RDb250YWluZXIuY3BwIgorI2luY2x1ZGUgIlJlbmRlclNWR1No
YXBlLmNwcCIKICNpbmNsdWRlICJSZW5kZXJTVkdUU3Bhbi5jcHAiCiAjaW5jbHVkZSAiUmVuZGVy
U1ZHVGV4dC5jcHAiCiAjaW5jbHVkZSAiUmVuZGVyU1ZHVGV4dFBhdGguY3BwIgpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdNb2RlbE9iamVjdC5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR01vZGVsT2JqZWN0LmNwcApp
bmRleCBjMmUzZmRmLi5mN2Q3ZGNhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvc3ZnL1JlbmRlclNWR01vZGVsT2JqZWN0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvc3ZnL1JlbmRlclNWR01vZGVsT2JqZWN0LmNwcApAQCAtMTU0LDcgKzE1NCw3IEBAIHN0
YXRpYyBib29sIGludGVyc2VjdHNBbGxvd2luZ0VtcHR5KGNvbnN0IEZsb2F0UmVjdCYgciwgY29u
c3QgRmxvYXRSZWN0JiBvdGhlcikKIC8vIGltYWdlLCBsaW5lLCBwYXRoLCBwb2x5Z29uLCBwb2x5
bGluZSwgcmVjdCwgdGV4dCBhbmQgdXNlLgogc3RhdGljIGJvb2wgaXNHcmFwaGljc0VsZW1lbnQo
UmVuZGVyT2JqZWN0KiByZW5kZXJlcikKIHsKLSAgICByZXR1cm4gcmVuZGVyZXItPmlzU1ZHUGF0
aCgpIHx8IHJlbmRlcmVyLT5pc1NWR1RleHQoKSB8fCByZW5kZXJlci0+aXNTVkdJbWFnZSgpIHx8
IHJlbmRlcmVyLT5pc1NWR1NoYWRvd1RyZWVSb290Q29udGFpbmVyKCk7CisgICAgcmV0dXJuIHJl
bmRlcmVyLT5pc1NWR1NoYXBlKCkgfHwgcmVuZGVyZXItPmlzU1ZHVGV4dCgpIHx8IHJlbmRlcmVy
LT5pc1NWR0ltYWdlKCkgfHwgcmVuZGVyZXItPmlzU1ZHU2hhZG93VHJlZVJvb3RDb250YWluZXIo
KTsKIH0KIAogYm9vbCBSZW5kZXJTVkdNb2RlbE9iamVjdDo6Y2hlY2tJbnRlcnNlY3Rpb24oUmVu
ZGVyT2JqZWN0KiByZW5kZXJlciwgY29uc3QgRmxvYXRSZWN0JiByZWN0KQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdQYXRoLmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUGF0aC5jcHAKaW5kZXggYjdhZDdhMi4uZTdh
NzJhMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdQ
YXRoLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1BhdGgu
Y3BwCkBAIC02LDYgKzYsOCBAQAogICogQ29weXJpZ2h0IChDKSAyMDA5IERpcmsgU2NodWx6ZSA8
a3JpdEB3ZWJraXQub3JnPgogICogQ29weXJpZ2h0IChDKSBSZXNlYXJjaCBJbiBNb3Rpb24gTGlt
aXRlZCAyMDEwLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICogQ29weXJpZ2h0IChDKSAyMDA5IEpl
ZmYgU2NoaWxsZXIgPGNvZGVkcmVhZEBnbWFpbC5jb20+CisgKiBDb3B5cmlnaHQgKEMpIDIwMTEg
UmVuYXRhIEhvZG92YW4gPHJlbmlAd2Via2l0Lm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAxMSBV
bml2ZXJzaXR5IG9mIFN6ZWdlZAogICoKICAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJl
OyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAqIG1vZGlmeSBpdCB1bmRlciB0aGUg
dGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCkBAIC0yOCw1MCArMzAsMTMg
QEAKICNpZiBFTkFCTEUoU1ZHKQogI2luY2x1ZGUgIlJlbmRlclNWR1BhdGguaCIKIAotI2luY2x1
ZGUgIkZsb2F0UG9pbnQuaCIKLSNpbmNsdWRlICJGbG9hdFF1YWQuaCIKLSNpbmNsdWRlICJHcmFw
aGljc0NvbnRleHQuaCIKLSNpbmNsdWRlICJIaXRUZXN0UmVxdWVzdC5oIgotI2luY2x1ZGUgIkxh
eW91dFJlcGFpbnRlci5oIgotI2luY2x1ZGUgIlBvaW50ZXJFdmVudHNIaXRSdWxlcy5oIgotI2lu
Y2x1ZGUgIlJlbmRlclNWR0NvbnRhaW5lci5oIgotI2luY2x1ZGUgIlJlbmRlclNWR1Jlc291cmNl
TWFya2VyLmgiCi0jaW5jbHVkZSAiUmVuZGVyU1ZHUmVzb3VyY2VTb2xpZENvbG9yLmgiCi0jaW5j
bHVkZSAiU1ZHUmVuZGVyU3VwcG9ydC5oIgotI2luY2x1ZGUgIlNWR1Jlc291cmNlcy5oIgorI2lu
Y2x1ZGUgIlNWR1BhdGhFbGVtZW50LmgiCiAjaW5jbHVkZSAiU1ZHU3R5bGVkVHJhbnNmb3JtYWJs
ZUVsZW1lbnQuaCIKLSNpbmNsdWRlICJTVkdUcmFuc2Zvcm1MaXN0LmgiCi0jaW5jbHVkZSAiU1ZH
VVJJUmVmZXJlbmNlLmgiCi0jaW5jbHVkZSAiU3Ryb2tlU3R5bGVBcHBsaWVyLmgiCi0jaW5jbHVk
ZSA8d3RmL01hdGhFeHRyYXMuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1jbGFzcyBCb3Vu
ZGluZ1JlY3RTdHJva2VTdHlsZUFwcGxpZXIgOiBwdWJsaWMgU3Ryb2tlU3R5bGVBcHBsaWVyIHsK
LXB1YmxpYzoKLSAgICBCb3VuZGluZ1JlY3RTdHJva2VTdHlsZUFwcGxpZXIoY29uc3QgUmVuZGVy
T2JqZWN0KiBvYmplY3QsIFJlbmRlclN0eWxlKiBzdHlsZSkKLSAgICAgICAgOiBtX29iamVjdChv
YmplY3QpCi0gICAgICAgICwgbV9zdHlsZShzdHlsZSkKLSAgICB7Ci0gICAgICAgIEFTU0VSVChz
dHlsZSk7Ci0gICAgICAgIEFTU0VSVChvYmplY3QpOwotICAgIH0KLQotICAgIHZvaWQgc3Ryb2tl
U3R5bGUoR3JhcGhpY3NDb250ZXh0KiBnYykKLSAgICB7Ci0gICAgICAgIFNWR1JlbmRlclN1cHBv
cnQ6OmFwcGx5U3Ryb2tlU3R5bGVUb0NvbnRleHQoZ2MsIG1fc3R5bGUsIG1fb2JqZWN0KTsKLSAg
ICB9Ci0KLXByaXZhdGU6Ci0gICAgY29uc3QgUmVuZGVyT2JqZWN0KiBtX29iamVjdDsKLSAgICBS
ZW5kZXJTdHlsZSogbV9zdHlsZTsKLX07Ci0KIFJlbmRlclNWR1BhdGg6OlJlbmRlclNWR1BhdGgo
U1ZHU3R5bGVkVHJhbnNmb3JtYWJsZUVsZW1lbnQqIG5vZGUpCi0gICAgOiBSZW5kZXJTVkdNb2Rl
bE9iamVjdChub2RlKQotICAgICwgbV9uZWVkc0JvdW5kYXJpZXNVcGRhdGUoZmFsc2UpIC8vIGRl
ZmF1bHQgaXMgZmFsc2UsIHRoZSBjYWNoZWQgcmVjdHMgYXJlIGVtcHR5IGZyb20gdGhlIGJlZ2lu
bmluZwotICAgICwgbV9uZWVkc1BhdGhVcGRhdGUodHJ1ZSkgLy8gZGVmYXVsdCBpcyB0cnVlLCBz
byB3ZSBncmFiIGEgUGF0aCBvYmplY3Qgb25jZSBmcm9tIFNWR1N0eWxlZFRyYW5zZm9ybWFibGVF
bGVtZW50Ci0gICAgLCBtX25lZWRzVHJhbnNmb3JtVXBkYXRlKHRydWUpIC8vIGRlZmF1bHQgaXMg
dHJ1ZSwgc28gd2UgZ3JhYiBhIEFmZmluZVRyYW5zZm9ybSBvYmplY3Qgb25jZSBmcm9tIFNWR1N0
eWxlZFRyYW5zZm9ybWFibGVFbGVtZW50CisgICAgOiBSZW5kZXJTVkdTaGFwZShub2RlKQogewog
fQogCkBAIC03OSwzMTQgKzQ0LDE2IEBAIFJlbmRlclNWR1BhdGg6On5SZW5kZXJTVkdQYXRoKCkK
IHsKIH0KIAotYm9vbCBSZW5kZXJTVkdQYXRoOjpmaWxsQ29udGFpbnMoY29uc3QgRmxvYXRQb2lu
dCYgcG9pbnQsIGJvb2wgcmVxdWlyZXNGaWxsLCBXaW5kUnVsZSBmaWxsUnVsZSkKLXsKLSAgICBp
ZiAoIW1fZmlsbEJvdW5kaW5nQm94LmNvbnRhaW5zKHBvaW50KSkKLSAgICAgICAgcmV0dXJuIGZh
bHNlOwotCi0gICAgQ29sb3IgZmFsbGJhY2tDb2xvcjsKLSAgICBpZiAocmVxdWlyZXNGaWxsICYm
ICFSZW5kZXJTVkdSZXNvdXJjZTo6ZmlsbFBhaW50aW5nUmVzb3VyY2UodGhpcywgc3R5bGUoKSwg
ZmFsbGJhY2tDb2xvcikpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIHJldHVybiBtX3Bh
dGguY29udGFpbnMocG9pbnQsIGZpbGxSdWxlKTsKLX0KLQotYm9vbCBSZW5kZXJTVkdQYXRoOjpz
dHJva2VDb250YWlucyhjb25zdCBGbG9hdFBvaW50JiBwb2ludCwgYm9vbCByZXF1aXJlc1N0cm9r
ZSkKLXsKLSAgICBpZiAoIW1fc3Ryb2tlQW5kTWFya2VyQm91bmRpbmdCb3guY29udGFpbnMocG9p
bnQpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBDb2xvciBmYWxsYmFja0NvbG9yOwot
ICAgIGlmIChyZXF1aXJlc1N0cm9rZSAmJiAhUmVuZGVyU1ZHUmVzb3VyY2U6OnN0cm9rZVBhaW50
aW5nUmVzb3VyY2UodGhpcywgc3R5bGUoKSwgZmFsbGJhY2tDb2xvcikpCi0gICAgICAgIHJldHVy
biBmYWxzZTsKLQotICAgIGlmIChzaG91bGRTdHJva2VaZXJvTGVuZ3RoU3VicGF0aCgpKQotICAg
ICAgICByZXR1cm4gemVyb0xlbmd0aFN1YnBhdGhSZWN0KCkuY29udGFpbnMocG9pbnQpOwotCi0g
ICAgQm91bmRpbmdSZWN0U3Ryb2tlU3R5bGVBcHBsaWVyIHN0cm9rZVN0eWxlKHRoaXMsIHN0eWxl
KCkpOwotICAgIHJldHVybiBtX3BhdGguc3Ryb2tlQ29udGFpbnMoJnN0cm9rZVN0eWxlLCBwb2lu
dCk7Ci19Ci0KLXZvaWQgUmVuZGVyU1ZHUGF0aDo6bGF5b3V0KCkKLXsKLSAgICBMYXlvdXRSZXBh
aW50ZXIgcmVwYWludGVyKCp0aGlzLCBjaGVja0ZvclJlcGFpbnREdXJpbmdMYXlvdXQoKSAmJiBz
ZWxmTmVlZHNMYXlvdXQoKSk7Ci0gICAgU1ZHU3R5bGVkVHJhbnNmb3JtYWJsZUVsZW1lbnQqIGVs
ZW1lbnQgPSBzdGF0aWNfY2FzdDxTVkdTdHlsZWRUcmFuc2Zvcm1hYmxlRWxlbWVudCo+KG5vZGUo
KSk7Ci0KLSAgICBib29sIHVwZGF0ZUNhY2hlZEJvdW5kYXJpZXNJblBhcmVudHMgPSBmYWxzZTsK
LQotICAgIGJvb2wgbmVlZHNQYXRoVXBkYXRlID0gbV9uZWVkc1BhdGhVcGRhdGU7Ci0gICAgaWYg
KG5lZWRzUGF0aFVwZGF0ZSkgewotICAgICAgICBtX3BhdGguY2xlYXIoKTsKLSAgICAgICAgZWxl
bWVudC0+dG9QYXRoRGF0YShtX3BhdGgpOwotICAgICAgICBtX25lZWRzUGF0aFVwZGF0ZSA9IGZh
bHNlOwotICAgICAgICB1cGRhdGVDYWNoZWRCb3VuZGFyaWVzSW5QYXJlbnRzID0gdHJ1ZTsKLSAg
ICB9Ci0KLSAgICBpZiAobV9uZWVkc1RyYW5zZm9ybVVwZGF0ZSkgewotICAgICAgICBtX2xvY2Fs
VHJhbnNmb3JtID0gZWxlbWVudC0+YW5pbWF0ZWRMb2NhbFRyYW5zZm9ybSgpOwotICAgICAgICBt
X25lZWRzVHJhbnNmb3JtVXBkYXRlID0gZmFsc2U7Ci0gICAgICAgIHVwZGF0ZUNhY2hlZEJvdW5k
YXJpZXNJblBhcmVudHMgPSB0cnVlOwotICAgIH0KLQotICAgIGlmIChtX25lZWRzQm91bmRhcmll
c1VwZGF0ZSkKLSAgICAgICAgdXBkYXRlQ2FjaGVkQm91bmRhcmllc0luUGFyZW50cyA9IHRydWU7
Ci0KLSAgICAvLyBJbnZhbGlkYXRlIGFsbCByZXNvdXJjZXMgb2YgdGhpcyBjbGllbnQgaWYgb3Vy
IGxheW91dCBjaGFuZ2VkLgotICAgIGlmIChtX2V2ZXJIYWRMYXlvdXQgJiYgc2VsZk5lZWRzTGF5
b3V0KCkpIHsKLSAgICAgICAgU1ZHUmVzb3VyY2VzQ2FjaGU6OmNsaWVudExheW91dENoYW5nZWQo
dGhpcyk7Ci0gICAgICAgIG1fbWFya2VyTGF5b3V0SW5mby5jbGVhcigpOwotICAgIH0KLQotICAg
IC8vIEF0IHRoaXMgcG9pbnQgTGF5b3V0UmVwYWludGVyIGFscmVhZHkgZ3JhYmJlZCB0aGUgb2xk
IGJvdW5kcywKLSAgICAvLyByZWNhbGN1bGF0ZSB0aGVtIG5vdyBzbyByZXBhaW50QWZ0ZXJMYXlv
dXQoKSB1c2VzIHRoZSBuZXcgYm91bmRzLgotICAgIGlmIChuZWVkc1BhdGhVcGRhdGUgfHwgbV9u
ZWVkc0JvdW5kYXJpZXNVcGRhdGUpIHsKLSAgICAgICAgdXBkYXRlQ2FjaGVkQm91bmRhcmllcygp
OwotICAgICAgICBtX25lZWRzQm91bmRhcmllc1VwZGF0ZSA9IGZhbHNlOwotICAgIH0KLQotICAg
IC8vIElmIG91ciBib3VuZHMgY2hhbmdlZCwgbm90aWZ5IHRoZSBwYXJlbnRzLgotICAgIGlmICh1
cGRhdGVDYWNoZWRCb3VuZGFyaWVzSW5QYXJlbnRzKQotICAgICAgICBSZW5kZXJTVkdNb2RlbE9i
amVjdDo6c2V0TmVlZHNCb3VuZGFyaWVzVXBkYXRlKCk7Ci0KLSAgICByZXBhaW50ZXIucmVwYWlu
dEFmdGVyTGF5b3V0KCk7Ci0gICAgc2V0TmVlZHNMYXlvdXQoZmFsc2UpOwotfQotCi1ib29sIFJl
bmRlclNWR1BhdGg6OnNob3VsZFN0cm9rZVplcm9MZW5ndGhTdWJwYXRoKCkgY29uc3QKLXsKLSAg
ICAvLyBTcGVjKDExLjQpOiBBbnkgemVybyBsZW5ndGggc3VicGF0aCBzaGFsbCBub3QgYmUgc3Ry
b2tlZCBpZiB0aGUg4oCYc3Ryb2tlLWxpbmVjYXDigJkgcHJvcGVydHkgaGFzIGEgdmFsdWUgb2Yg
YnV0dAotICAgIC8vIGJ1dCBzaGFsbCBiZSBzdHJva2VkIGlmIHRoZSDigJhzdHJva2UtbGluZWNh
cOKAmSBwcm9wZXJ0eSBoYXMgYSB2YWx1ZSBvZiByb3VuZCBvciBzcXVhcmUKLSAgICByZXR1cm4g
c3R5bGUoKS0+c3ZnU3R5bGUoKS0+aGFzU3Ryb2tlKCkgJiYgc3R5bGUoKS0+c3ZnU3R5bGUoKS0+
Y2FwU3R5bGUoKSAhPSBCdXR0Q2FwICYmICFtX2ZpbGxCb3VuZGluZ0JveC53aWR0aCgpICYmICFt
X2ZpbGxCb3VuZGluZ0JveC5oZWlnaHQoKTsKLX0KLQotRmxvYXRSZWN0IFJlbmRlclNWR1BhdGg6
Onplcm9MZW5ndGhTdWJwYXRoUmVjdCgpIGNvbnN0Ci17Ci0gICAgU1ZHRWxlbWVudCogc3ZnRWxl
bWVudCA9IHN0YXRpY19jYXN0PFNWR0VsZW1lbnQqPihub2RlKCkpOwotICAgIGZsb2F0IHN0cm9r
ZVdpZHRoID0gc3R5bGUoKS0+c3ZnU3R5bGUoKS0+c3Ryb2tlV2lkdGgoKS52YWx1ZShzdmdFbGVt
ZW50KTsKLSAgICByZXR1cm4gRmxvYXRSZWN0KG1fZmlsbEJvdW5kaW5nQm94LngoKSAtIHN0cm9r
ZVdpZHRoIC8gMiwgbV9maWxsQm91bmRpbmdCb3gueSgpIC0gc3Ryb2tlV2lkdGggLyAyLCBzdHJv
a2VXaWR0aCwgc3Ryb2tlV2lkdGgpOwotfQotCi12b2lkIFJlbmRlclNWR1BhdGg6OnNldHVwU3F1
YXJlQ2FwUGF0aChQYXRoKiYgdXNlUGF0aCwgaW50JiBhcHBseU1vZGUpCi17Ci0gICAgLy8gU3Bl
YygxMS40KTogQW55IHplcm8gbGVuZ3RoIHN1YnBhdGggc2hhbGwgbm90IGJlIHN0cm9rZWQgaWYg
dGhlIOKAmHN0cm9rZS1saW5lY2Fw4oCZIHByb3BlcnR5IGhhcyBhIHZhbHVlIG9mIGJ1dHQKLSAg
ICAvLyBidXQgc2hhbGwgYmUgc3Ryb2tlZCBpZiB0aGUg4oCYc3Ryb2tlLWxpbmVjYXDigJkgcHJv
cGVydHkgaGFzIGEgdmFsdWUgb2Ygcm91bmQgb3Igc3F1YXJlCi0gICAgREVGSU5FX1NUQVRJQ19M
T0NBTChQYXRoLCB0ZW1wUGF0aCwgKCkpOwotCi0gICAgYXBwbHlNb2RlID0gQXBwbHlUb0ZpbGxN
b2RlOwotICAgIHVzZVBhdGggPSAmdGVtcFBhdGg7Ci0gICAgdXNlUGF0aC0+Y2xlYXIoKTsKLSAg
ICBpZiAoc3R5bGUoKS0+c3ZnU3R5bGUoKS0+Y2FwU3R5bGUoKSA9PSBTcXVhcmVDYXApCi0gICAg
ICAgIHVzZVBhdGgtPmFkZFJlY3QoemVyb0xlbmd0aFN1YnBhdGhSZWN0KCkpOwotICAgIGVsc2UK
LSAgICAgICAgdXNlUGF0aC0+YWRkRWxsaXBzZSh6ZXJvTGVuZ3RoU3VicGF0aFJlY3QoKSk7Ci19
Ci0KLWJvb2wgUmVuZGVyU1ZHUGF0aDo6c2V0dXBOb25TY2FsaW5nU3Ryb2tlUGF0aChQYXRoKiYg
dXNlUGF0aCwgR3JhcGhpY3NDb250ZXh0U3RhdGVTYXZlciYgc3RhdGVTYXZlcikKK3ZvaWQgUmVu
ZGVyU1ZHUGF0aDo6aW5mbGF0ZVdpdGhNYXJrZXJCb3VuZHMoKQogewotICAgIERFRklORV9TVEFU
SUNfTE9DQUwoUGF0aCwgdGVtcFBhdGgsICgpKTsKLQotICAgIFNWR1N0eWxlZFRyYW5zZm9ybWFi
bGVFbGVtZW50KiBlbGVtZW50ID0gc3RhdGljX2Nhc3Q8U1ZHU3R5bGVkVHJhbnNmb3JtYWJsZUVs
ZW1lbnQqPihub2RlKCkpOwotICAgIEFmZmluZVRyYW5zZm9ybSBub25TY2FsaW5nU3Ryb2tlVHJh
bnNmb3JtID0gZWxlbWVudC0+Z2V0U2NyZWVuQ1RNKFNWR0xvY2F0YWJsZTo6RGlzYWxsb3dTdHls
ZVVwZGF0ZSk7Ci0gICAgaWYgKCFub25TY2FsaW5nU3Ryb2tlVHJhbnNmb3JtLmlzSW52ZXJ0aWJs
ZSgpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICB0ZW1wUGF0aCA9IG1fcGF0aDsKLSAg
ICB1c2VQYXRoID0gJnRlbXBQYXRoOwotICAgIHRlbXBQYXRoLnRyYW5zZm9ybShub25TY2FsaW5n
U3Ryb2tlVHJhbnNmb3JtKTsKLQotICAgIHN0YXRlU2F2ZXIuc2F2ZSgpOwotICAgIHN0YXRlU2F2
ZXIuY29udGV4dCgpLT5jb25jYXRDVE0obm9uU2NhbGluZ1N0cm9rZVRyYW5zZm9ybS5pbnZlcnNl
KCkpOwotICAgIHJldHVybiB0cnVlOwotfQotCi12b2lkIFJlbmRlclNWR1BhdGg6OmZpbGxBbmRT
dHJva2VQYXRoKEdyYXBoaWNzQ29udGV4dCogY29udGV4dCkKLXsKLSAgICBSZW5kZXJTdHlsZSog
c3R5bGUgPSB0aGlzLT5zdHlsZSgpOwotCi0gICAgQ29sb3IgZmFsbGJhY2tDb2xvcjsKLSAgICBp
ZiAoUmVuZGVyU1ZHUmVzb3VyY2UqIGZpbGxQYWludGluZ1Jlc291cmNlID0gUmVuZGVyU1ZHUmVz
b3VyY2U6OmZpbGxQYWludGluZ1Jlc291cmNlKHRoaXMsIHN0eWxlLCBmYWxsYmFja0NvbG9yKSkg
ewotICAgICAgICBpZiAoZmlsbFBhaW50aW5nUmVzb3VyY2UtPmFwcGx5UmVzb3VyY2UodGhpcywg
c3R5bGUsIGNvbnRleHQsIEFwcGx5VG9GaWxsTW9kZSkpCi0gICAgICAgICAgICBmaWxsUGFpbnRp
bmdSZXNvdXJjZS0+cG9zdEFwcGx5UmVzb3VyY2UodGhpcywgY29udGV4dCwgQXBwbHlUb0ZpbGxN
b2RlLCAmbV9wYXRoKTsKLSAgICAgICAgZWxzZSBpZiAoZmFsbGJhY2tDb2xvci5pc1ZhbGlkKCkp
IHsKLSAgICAgICAgICAgIFJlbmRlclNWR1Jlc291cmNlU29saWRDb2xvciogZmFsbGJhY2tSZXNv
dXJjZSA9IFJlbmRlclNWR1Jlc291cmNlOjpzaGFyZWRTb2xpZFBhaW50aW5nUmVzb3VyY2UoKTsK
LSAgICAgICAgICAgIGZhbGxiYWNrUmVzb3VyY2UtPnNldENvbG9yKGZhbGxiYWNrQ29sb3IpOwot
ICAgICAgICAgICAgaWYgKGZhbGxiYWNrUmVzb3VyY2UtPmFwcGx5UmVzb3VyY2UodGhpcywgc3R5
bGUsIGNvbnRleHQsIEFwcGx5VG9GaWxsTW9kZSkpCi0gICAgICAgICAgICAgICAgZmFsbGJhY2tS
ZXNvdXJjZS0+cG9zdEFwcGx5UmVzb3VyY2UodGhpcywgY29udGV4dCwgQXBwbHlUb0ZpbGxNb2Rl
LCAmbV9wYXRoKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIGZhbGxiYWNrQ29sb3IgPSBDb2xv
cigpOwotICAgIFJlbmRlclNWR1Jlc291cmNlKiBzdHJva2VQYWludGluZ1Jlc291cmNlID0gUmVu
ZGVyU1ZHUmVzb3VyY2U6OnN0cm9rZVBhaW50aW5nUmVzb3VyY2UodGhpcywgc3R5bGUsIGZhbGxi
YWNrQ29sb3IpOwotICAgIGlmICghc3Ryb2tlUGFpbnRpbmdSZXNvdXJjZSkKLSAgICAgICAgcmV0
dXJuOwotCi0gICAgUGF0aCogdXNlUGF0aCA9ICZtX3BhdGg7Ci0gICAgaW50IGFwcGx5TW9kZSA9
IEFwcGx5VG9TdHJva2VNb2RlOwotCi0gICAgYm9vbCBub25TY2FsaW5nU3Ryb2tlID0gc3R5bGUt
PnN2Z1N0eWxlKCktPnZlY3RvckVmZmVjdCgpID09IFZFX05PTl9TQ0FMSU5HX1NUUk9LRTsKLQot
ICAgIEdyYXBoaWNzQ29udGV4dFN0YXRlU2F2ZXIgc3RhdGVTYXZlcigqY29udGV4dCwgZmFsc2Up
OwotCi0gICAgLy8gU3BlYygxMS40KTogQW55IHplcm8gbGVuZ3RoIHN1YnBhdGggc2hhbGwgbm90
IGJlIHN0cm9rZWQgaWYgdGhlIOKAmHN0cm9rZS1saW5lY2Fw4oCZIHByb3BlcnR5IGhhcyBhIHZh
bHVlIG9mIGJ1dHQKLSAgICAvLyBidXQgc2hhbGwgYmUgc3Ryb2tlZCBpZiB0aGUg4oCYc3Ryb2tl
LWxpbmVjYXDigJkgcHJvcGVydHkgaGFzIGEgdmFsdWUgb2Ygcm91bmQgb3Igc3F1YXJlCi0gICAg
Ly8gRklYTUU6IHRoaXMgZG9lcyBub3Qgd29yayBmb3IgemVyby1sZW5ndGggc3VicGF0aHMsIG9u
bHkgd2hlbiB0b3RhbCBwYXRoIGlzIHplcm8tbGVuZ3RoCi0gICAgaWYgKHNob3VsZFN0cm9rZVpl
cm9MZW5ndGhTdWJwYXRoKCkpCi0gICAgICAgIHNldHVwU3F1YXJlQ2FwUGF0aCh1c2VQYXRoLCBh
cHBseU1vZGUpOwotICAgIGVsc2UgaWYgKG5vblNjYWxpbmdTdHJva2UpIHsKLSAgICAgICBpZiAo
IXNldHVwTm9uU2NhbGluZ1N0cm9rZVBhdGgodXNlUGF0aCwgc3RhdGVTYXZlcikpCi0gICAgICAg
ICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBpZiAoc3Ryb2tlUGFpbnRpbmdSZXNvdXJjZS0+YXBw
bHlSZXNvdXJjZSh0aGlzLCBzdHlsZSwgY29udGV4dCwgYXBwbHlNb2RlKSkKLSAgICAgICAgc3Ry
b2tlUGFpbnRpbmdSZXNvdXJjZS0+cG9zdEFwcGx5UmVzb3VyY2UodGhpcywgY29udGV4dCwgYXBw
bHlNb2RlLCB1c2VQYXRoKTsKLSAgICBlbHNlIGlmIChmYWxsYmFja0NvbG9yLmlzVmFsaWQoKSkg
ewotICAgICAgICBSZW5kZXJTVkdSZXNvdXJjZVNvbGlkQ29sb3IqIGZhbGxiYWNrUmVzb3VyY2Ug
PSBSZW5kZXJTVkdSZXNvdXJjZTo6c2hhcmVkU29saWRQYWludGluZ1Jlc291cmNlKCk7Ci0gICAg
ICAgIGZhbGxiYWNrUmVzb3VyY2UtPnNldENvbG9yKGZhbGxiYWNrQ29sb3IpOwotICAgICAgICBp
ZiAoZmFsbGJhY2tSZXNvdXJjZS0+YXBwbHlSZXNvdXJjZSh0aGlzLCBzdHlsZSwgY29udGV4dCwg
YXBwbHlNb2RlKSkKLSAgICAgICAgICAgIGZhbGxiYWNrUmVzb3VyY2UtPnBvc3RBcHBseVJlc291
cmNlKHRoaXMsIGNvbnRleHQsIGFwcGx5TW9kZSwgdXNlUGF0aCk7Ci0gICAgfQotfQotCi12b2lk
IFJlbmRlclNWR1BhdGg6OnBhaW50KFBhaW50SW5mbyYgcGFpbnRJbmZvLCBjb25zdCBMYXlvdXRQ
b2ludCYpCi17Ci0gICAgaWYgKHBhaW50SW5mby5jb250ZXh0LT5wYWludGluZ0Rpc2FibGVkKCkg
fHwgc3R5bGUoKS0+dmlzaWJpbGl0eSgpID09IEhJRERFTiB8fCBtX3BhdGguaXNFbXB0eSgpKQot
ICAgICAgICByZXR1cm47Ci0KLSAgICBGbG9hdFJlY3QgYm91bmRpbmdCb3ggPSByZXBhaW50UmVj
dEluTG9jYWxDb29yZGluYXRlcygpOwotICAgIGlmICghU1ZHUmVuZGVyU3VwcG9ydDo6cGFpbnRJ
bmZvSW50ZXJzZWN0c1JlcGFpbnRSZWN0KGJvdW5kaW5nQm94LCBtX2xvY2FsVHJhbnNmb3JtLCBw
YWludEluZm8pKQotICAgICAgICByZXR1cm47Ci0KLSAgICBQYWludEluZm8gY2hpbGRQYWludElu
Zm8ocGFpbnRJbmZvKTsKLSAgICBib29sIGRyYXdzT3V0bGluZSA9IHN0eWxlKCktPm91dGxpbmVX
aWR0aCgpICYmIChjaGlsZFBhaW50SW5mby5waGFzZSA9PSBQYWludFBoYXNlT3V0bGluZSB8fCBj
aGlsZFBhaW50SW5mby5waGFzZSA9PSBQYWludFBoYXNlU2VsZk91dGxpbmUpOwotICAgIGlmIChk
cmF3c091dGxpbmUgfHwgY2hpbGRQYWludEluZm8ucGhhc2UgPT0gUGFpbnRQaGFzZUZvcmVncm91
bmQpIHsKLSAgICAgICAgR3JhcGhpY3NDb250ZXh0U3RhdGVTYXZlciBzdGF0ZVNhdmVyKCpjaGls
ZFBhaW50SW5mby5jb250ZXh0KTsKLSAgICAgICAgY2hpbGRQYWludEluZm8uYXBwbHlUcmFuc2Zv
cm0obV9sb2NhbFRyYW5zZm9ybSk7Ci0KLSAgICAgICAgaWYgKGNoaWxkUGFpbnRJbmZvLnBoYXNl
ID09IFBhaW50UGhhc2VGb3JlZ3JvdW5kKSB7Ci0gICAgICAgICAgICBQYWludEluZm8gc2F2ZWRJ
bmZvKGNoaWxkUGFpbnRJbmZvKTsKLQotICAgICAgICAgICAgaWYgKFNWR1JlbmRlclN1cHBvcnQ6
OnByZXBhcmVUb1JlbmRlclNWR0NvbnRlbnQodGhpcywgY2hpbGRQYWludEluZm8pKSB7Ci0gICAg
ICAgICAgICAgICAgY29uc3QgU1ZHUmVuZGVyU3R5bGUqIHN2Z1N0eWxlID0gc3R5bGUoKS0+c3Zn
U3R5bGUoKTsKLSAgICAgICAgICAgICAgICBpZiAoc3ZnU3R5bGUtPnNoYXBlUmVuZGVyaW5nKCkg
PT0gU1JfQ1JJU1BFREdFUykKLSAgICAgICAgICAgICAgICAgICAgY2hpbGRQYWludEluZm8uY29u
dGV4dC0+c2V0U2hvdWxkQW50aWFsaWFzKGZhbHNlKTsKLQotICAgICAgICAgICAgICAgIGZpbGxB
bmRTdHJva2VQYXRoKGNoaWxkUGFpbnRJbmZvLmNvbnRleHQpOwotCi0gICAgICAgICAgICAgICAg
aWYgKHN2Z1N0eWxlLT5oYXNNYXJrZXJzKCkpCi0gICAgICAgICAgICAgICAgICAgIG1fbWFya2Vy
TGF5b3V0SW5mby5kcmF3TWFya2VycyhjaGlsZFBhaW50SW5mbyk7Ci0gICAgICAgICAgICB9Ci0K
LSAgICAgICAgICAgIFNWR1JlbmRlclN1cHBvcnQ6OmZpbmlzaFJlbmRlclNWR0NvbnRlbnQodGhp
cywgY2hpbGRQYWludEluZm8sIHNhdmVkSW5mby5jb250ZXh0KTsKLSAgICAgICAgfQotCi0gICAg
ICAgIGlmIChkcmF3c091dGxpbmUpCi0gICAgICAgICAgICBwYWludE91dGxpbmUoY2hpbGRQYWlu
dEluZm8uY29udGV4dCwgSW50UmVjdChib3VuZGluZ0JveCkpOwotICAgIH0KLX0KLQotLy8gVGhp
cyBtZXRob2QgaXMgY2FsbGVkIGZyb20gaW5zaWRlIHBhaW50T3V0bGluZSgpIHNpbmNlIHdlIGNh
bGwgcGFpbnRPdXRsaW5lKCkKLS8vIHdoaWxlIHRyYW5zZm9ybWVkIHRvIG91ciBjb29yZCBzeXN0
ZW0sIHJldHVybiBsb2NhbCBjb29yZHMKLXZvaWQgUmVuZGVyU1ZHUGF0aDo6YWRkRm9jdXNSaW5n
UmVjdHMoVmVjdG9yPExheW91dFJlY3Q+JiByZWN0cywgY29uc3QgTGF5b3V0UG9pbnQmKSAKLXsK
LSAgICBMYXlvdXRSZWN0IHJlY3QgPSBlbmNsb3NpbmdMYXlvdXRSZWN0KHJlcGFpbnRSZWN0SW5M
b2NhbENvb3JkaW5hdGVzKCkpOwotICAgIGlmICghcmVjdC5pc0VtcHR5KCkpCi0gICAgICAgIHJl
Y3RzLmFwcGVuZChyZWN0KTsKLX0KLQotYm9vbCBSZW5kZXJTVkdQYXRoOjpub2RlQXRGbG9hdFBv
aW50KGNvbnN0IEhpdFRlc3RSZXF1ZXN0JiByZXF1ZXN0LCBIaXRUZXN0UmVzdWx0JiByZXN1bHQs
IGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50SW5QYXJlbnQsIEhpdFRlc3RBY3Rpb24gaGl0VGVzdEFj
dGlvbikKLXsKLSAgICAvLyBXZSBvbmx5IGRyYXcgaW4gdGhlIGZvcmdyb3VuZCBwaGFzZSwgc28g
d2Ugb25seSBoaXQtdGVzdCB0aGVuLgotICAgIGlmIChoaXRUZXN0QWN0aW9uICE9IEhpdFRlc3RG
b3JlZ3JvdW5kKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBGbG9hdFBvaW50IGxvY2Fs
UG9pbnQgPSBtX2xvY2FsVHJhbnNmb3JtLmludmVyc2UoKS5tYXBQb2ludChwb2ludEluUGFyZW50
KTsKLQotICAgIGlmICghU1ZHUmVuZGVyU3VwcG9ydDo6cG9pbnRJbkNsaXBwaW5nQXJlYSh0aGlz
LCBsb2NhbFBvaW50KSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgUG9pbnRlckV2ZW50
c0hpdFJ1bGVzIGhpdFJ1bGVzKFBvaW50ZXJFdmVudHNIaXRSdWxlczo6U1ZHX1BBVEhfSElUVEVT
VElORywgcmVxdWVzdCwgc3R5bGUoKS0+cG9pbnRlckV2ZW50cygpKTsKLSAgICBib29sIGlzVmlz
aWJsZSA9IChzdHlsZSgpLT52aXNpYmlsaXR5KCkgPT0gVklTSUJMRSk7Ci0gICAgaWYgKGlzVmlz
aWJsZSB8fCAhaGl0UnVsZXMucmVxdWlyZVZpc2libGUpIHsKLSAgICAgICAgY29uc3QgU1ZHUmVu
ZGVyU3R5bGUqIHN2Z1N0eWxlID0gc3R5bGUoKS0+c3ZnU3R5bGUoKTsKLSAgICAgICAgV2luZFJ1
bGUgZmlsbFJ1bGUgPSBzdmdTdHlsZS0+ZmlsbFJ1bGUoKTsKLSAgICAgICAgaWYgKHJlcXVlc3Qu
c3ZnQ2xpcENvbnRlbnQoKSkKLSAgICAgICAgICAgIGZpbGxSdWxlID0gc3ZnU3R5bGUtPmNsaXBS
dWxlKCk7Ci0gICAgICAgIGlmICgoaGl0UnVsZXMuY2FuSGl0U3Ryb2tlICYmIChzdmdTdHlsZS0+
aGFzU3Ryb2tlKCkgfHwgIWhpdFJ1bGVzLnJlcXVpcmVTdHJva2UpICYmIHN0cm9rZUNvbnRhaW5z
KGxvY2FsUG9pbnQsIGhpdFJ1bGVzLnJlcXVpcmVTdHJva2UpKQotICAgICAgICAgICAgfHwgKGhp
dFJ1bGVzLmNhbkhpdEZpbGwgJiYgKHN2Z1N0eWxlLT5oYXNGaWxsKCkgfHwgIWhpdFJ1bGVzLnJl
cXVpcmVGaWxsKSAmJiBmaWxsQ29udGFpbnMobG9jYWxQb2ludCwgaGl0UnVsZXMucmVxdWlyZUZp
bGwsIGZpbGxSdWxlKSkpIHsKLSAgICAgICAgICAgIHVwZGF0ZUhpdFRlc3RSZXN1bHQocmVzdWx0
LCByb3VuZGVkTGF5b3V0UG9pbnQobG9jYWxQb2ludCkpOwotICAgICAgICAgICAgcmV0dXJuIHRy
dWU7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgcmV0dXJuIGZhbHNlOwotfQotCi1GbG9hdFJlY3Qg
UmVuZGVyU1ZHUGF0aDo6Y2FsY3VsYXRlTWFya2VyQm91bmRzSWZOZWVkZWQoKQotewotICAgIFNW
R0VsZW1lbnQqIHN2Z0VsZW1lbnQgPSBzdGF0aWNfY2FzdDxTVkdFbGVtZW50Kj4obm9kZSgpKTsK
LSAgICBBU1NFUlQoc3ZnRWxlbWVudCAmJiBzdmdFbGVtZW50LT5kb2N1bWVudCgpKTsKLSAgICBp
ZiAoIXN2Z0VsZW1lbnQtPmlzU3R5bGVkKCkpCi0gICAgICAgIHJldHVybiBGbG9hdFJlY3QoKTsK
LQotICAgIFNWR1N0eWxlZEVsZW1lbnQqIHN0eWxlZEVsZW1lbnQgPSBzdGF0aWNfY2FzdDxTVkdT
dHlsZWRFbGVtZW50Kj4oc3ZnRWxlbWVudCk7Ci0gICAgaWYgKCFzdHlsZWRFbGVtZW50LT5zdXBw
b3J0c01hcmtlcnMoKSkKLSAgICAgICAgcmV0dXJuIEZsb2F0UmVjdCgpOwotCi0gICAgY29uc3Qg
U1ZHUmVuZGVyU3R5bGUqIHN2Z1N0eWxlID0gc3R5bGUoKS0+c3ZnU3R5bGUoKTsKLSAgICBBU1NF
UlQoc3ZnU3R5bGUtPmhhc01hcmtlcnMoKSk7Ci0KLSAgICBTVkdSZXNvdXJjZXMqIHJlc291cmNl
cyA9IFNWR1Jlc291cmNlc0NhY2hlOjpjYWNoZWRSZXNvdXJjZXNGb3JSZW5kZXJPYmplY3QodGhp
cyk7Ci0gICAgaWYgKCFyZXNvdXJjZXMpCi0gICAgICAgIHJldHVybiBGbG9hdFJlY3QoKTsKLQot
ICAgIFJlbmRlclNWR1Jlc291cmNlTWFya2VyKiBtYXJrZXJTdGFydCA9IHJlc291cmNlcy0+bWFy
a2VyU3RhcnQoKTsKLSAgICBSZW5kZXJTVkdSZXNvdXJjZU1hcmtlciogbWFya2VyTWlkID0gcmVz
b3VyY2VzLT5tYXJrZXJNaWQoKTsKLSAgICBSZW5kZXJTVkdSZXNvdXJjZU1hcmtlciogbWFya2Vy
RW5kID0gcmVzb3VyY2VzLT5tYXJrZXJFbmQoKTsKLSAgICBpZiAoIW1hcmtlclN0YXJ0ICYmICFt
YXJrZXJNaWQgJiYgIW1hcmtlckVuZCkKLSAgICAgICAgcmV0dXJuIEZsb2F0UmVjdCgpOwotCi0g
ICAgcmV0dXJuIG1fbWFya2VyTGF5b3V0SW5mby5jYWxjdWxhdGVCb3VuZGFyaWVzKG1hcmtlclN0
YXJ0LCBtYXJrZXJNaWQsIG1hcmtlckVuZCwgc3ZnU3R5bGUtPnN0cm9rZVdpZHRoKCkudmFsdWUo
c3ZnRWxlbWVudCksIG1fcGF0aCk7Ci19Ci0KLXZvaWQgUmVuZGVyU1ZHUGF0aDo6dXBkYXRlQ2Fj
aGVkQm91bmRhcmllcygpCi17Ci0gICAgaWYgKG1fcGF0aC5pc0VtcHR5KCkpIHsKLSAgICAgICAg
bV9maWxsQm91bmRpbmdCb3ggPSBGbG9hdFJlY3QoKTsKLSAgICAgICAgbV9zdHJva2VBbmRNYXJr
ZXJCb3VuZGluZ0JveCA9IEZsb2F0UmVjdCgpOwotICAgICAgICBtX3JlcGFpbnRCb3VuZGluZ0Jv
eCA9IEZsb2F0UmVjdCgpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgLy8gQ2FjaGUg
X3VuY2xpcHBlZF8gZmlsbCBib3VuZGluZyBib3gsIHVzZWQgZm9yIGNhbGN1bGF0aW9ucyBpbiBy
ZXNvdXJjZXMKLSAgICBtX2ZpbGxCb3VuZGluZ0JveCA9IG1fcGF0aC5ib3VuZGluZ1JlY3QoKTsK
LQotICAgIC8vIFNwZWMoMTEuNCk6IEFueSB6ZXJvIGxlbmd0aCBzdWJwYXRoIHNoYWxsIG5vdCBi
ZSBzdHJva2VkIGlmIHRoZSDigJhzdHJva2UtbGluZWNhcOKAmSBwcm9wZXJ0eSBoYXMgYSB2YWx1
ZSBvZiBidXR0Ci0gICAgLy8gYnV0IHNoYWxsIGJlIHN0cm9rZWQgaWYgdGhlIOKAmHN0cm9rZS1s
aW5lY2Fw4oCZIHByb3BlcnR5IGhhcyBhIHZhbHVlIG9mIHJvdW5kIG9yIHNxdWFyZQotICAgIGlm
IChzaG91bGRTdHJva2VaZXJvTGVuZ3RoU3VicGF0aCgpKSB7Ci0gICAgICAgIG1fc3Ryb2tlQW5k
TWFya2VyQm91bmRpbmdCb3ggPSB6ZXJvTGVuZ3RoU3VicGF0aFJlY3QoKTsKLSAgICAgICAgLy8g
Q2FjaGUgc21hbGxlc3QgcG9zc2libGUgcmVwYWludCByZWN0YW5nbGUKLSAgICAgICAgbV9yZXBh
aW50Qm91bmRpbmdCb3ggPSBtX3N0cm9rZUFuZE1hcmtlckJvdW5kaW5nQm94OwotICAgICAgICBT
VkdSZW5kZXJTdXBwb3J0OjppbnRlcnNlY3RSZXBhaW50UmVjdFdpdGhSZXNvdXJjZXModGhpcywg
bV9yZXBhaW50Qm91bmRpbmdCb3gpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgLy8g
Q2FjaGUgX3VuY2xpcHBlZF8gc3Ryb2tlIGJvdW5kaW5nIGJveCwgdXNlZCBmb3IgY2FsY3VsYXRp
b25zIGluIHJlc291cmNlcyAoaW5jbHVkZXMgbWFya2VyIGJvdW5kYXJpZXMpCi0gICAgbV9zdHJv
a2VBbmRNYXJrZXJCb3VuZGluZ0JveCA9IG1fZmlsbEJvdW5kaW5nQm94OwotCi0gICAgY29uc3Qg
U1ZHUmVuZGVyU3R5bGUqIHN2Z1N0eWxlID0gc3R5bGUoKS0+c3ZnU3R5bGUoKTsKLSAgICBpZiAo
c3ZnU3R5bGUtPmhhc1N0cm9rZSgpKSB7Ci0gICAgICAgIEJvdW5kaW5nUmVjdFN0cm9rZVN0eWxl
QXBwbGllciBzdHJva2VTdHlsZSh0aGlzLCBzdHlsZSgpKTsKLSAgICAgICAgbV9zdHJva2VBbmRN
YXJrZXJCb3VuZGluZ0JveC51bml0ZShtX3BhdGguc3Ryb2tlQm91bmRpbmdSZWN0KCZzdHJva2VT
dHlsZSkpOwotICAgIH0KLQotICAgIGlmIChzdmdTdHlsZS0+aGFzTWFya2VycygpKSB7CisgICAg
aWYgKHN0eWxlKCktPnN2Z1N0eWxlKCktPmhhc01hcmtlcnMoKSkgewogICAgICAgICBGbG9hdFJl
Y3QgbWFya2VyQm91bmRzID0gY2FsY3VsYXRlTWFya2VyQm91bmRzSWZOZWVkZWQoKTsKLSAgICAg
ICAgaWYgKCFtYXJrZXJCb3VuZHMuaXNFbXB0eSgpKQotICAgICAgICAgICAgbV9zdHJva2VBbmRN
YXJrZXJCb3VuZGluZ0JveC51bml0ZShtYXJrZXJCb3VuZHMpOworICAgICAgICBpZiAoIW1hcmtl
ckJvdW5kcy5pc0VtcHR5KCkpIHsKKyAgICAgICAgICAgIEZsb2F0UmVjdCBzdHJva2VSZWN0ID0g
c3Ryb2tlQW5kTWFya2VyQm91bmRpbmdCb3goKTsKKyAgICAgICAgICAgIHN0cm9rZVJlY3QudW5p
dGUobWFya2VyQm91bmRzKTsKKyAgICAgICAgICAgIHNldFN0cm9rZUFuZE1hcmtlckJvdW5kaW5n
Qm94KHN0cm9rZVJlY3QpOworICAgICAgICB9CiAgICAgfQotCi0gICAgLy8gQ2FjaGUgc21hbGxl
c3QgcG9zc2libGUgcmVwYWludCByZWN0YW5nbGUKLSAgICBtX3JlcGFpbnRCb3VuZGluZ0JveCA9
IG1fc3Ryb2tlQW5kTWFya2VyQm91bmRpbmdCb3g7Ci0gICAgU1ZHUmVuZGVyU3VwcG9ydDo6aW50
ZXJzZWN0UmVwYWludFJlY3RXaXRoUmVzb3VyY2VzKHRoaXMsIG1fcmVwYWludEJvdW5kaW5nQm94
KTsKIH0KIAogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5k
ZXJTVkdQYXRoLmggYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1BhdGgu
aAppbmRleCA5OGU2MDhkLi42MmExYzhjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvc3ZnL1JlbmRlclNWR1BhdGguaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
c3ZnL1JlbmRlclNWR1BhdGguaApAQCAtNCw2ICs0LDggQEAKICAqIENvcHlyaWdodCAoQykgMjAw
NSBFcmljIFNlaWRlbCA8ZXJpY0B3ZWJraXQub3JnPgogICogQ29weXJpZ2h0IChDKSAyMDA2IEFw
cGxlIENvbXB1dGVyLCBJbmMKICAqIENvcHlyaWdodCAoQykgMjAwOSBHb29nbGUsIEluYy4KKyAq
IENvcHlyaWdodCAoQykgMjAxMSBSZW5hdGEgSG9kb3ZhbiA8cmVuaUB3ZWJraXQub3JnPgorICog
Q29weXJpZ2h0IChDKSAyMDExIFVuaXZlcnNpdHkgb2YgU3plZ2VkCiAgKgogICogVGhpcyBsaWJy
YXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICog
bW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJs
aWMKQEAgLTI1LDg2ICsyNywyMiBAQAogI2RlZmluZSBSZW5kZXJTVkdQYXRoX2gKIAogI2lmIEVO
QUJMRShTVkcpCi0jaW5jbHVkZSAiQWZmaW5lVHJhbnNmb3JtLmgiCi0jaW5jbHVkZSAiRmxvYXRS
ZWN0LmgiCi0jaW5jbHVkZSAiUmVuZGVyU1ZHTW9kZWxPYmplY3QuaCIKLSNpbmNsdWRlICJTVkdN
YXJrZXJMYXlvdXRJbmZvLmgiCisjaW5jbHVkZSAiUmVuZGVyU1ZHU2hhcGUuaCIKIAogbmFtZXNw
YWNlIFdlYkNvcmUgewogCi1jbGFzcyBGbG9hdFBvaW50OwotY2xhc3MgR3JhcGhpY3NDb250ZXh0
U3RhdGVTYXZlcjsKLWNsYXNzIFJlbmRlclNWR0NvbnRhaW5lcjsKLWNsYXNzIFNWR1N0eWxlZFRy
YW5zZm9ybWFibGVFbGVtZW50OwotCi1jbGFzcyBSZW5kZXJTVkdQYXRoIDogcHVibGljIFJlbmRl
clNWR01vZGVsT2JqZWN0IHsKK2NsYXNzIFJlbmRlclNWR1BhdGggOiBwdWJsaWMgUmVuZGVyU1ZH
U2hhcGUgewogcHVibGljOgogICAgIGV4cGxpY2l0IFJlbmRlclNWR1BhdGgoU1ZHU3R5bGVkVHJh
bnNmb3JtYWJsZUVsZW1lbnQqKTsKICAgICB2aXJ0dWFsIH5SZW5kZXJTVkdQYXRoKCk7CiAKLSAg
ICBjb25zdCBQYXRoJiBwYXRoKCkgY29uc3QgeyByZXR1cm4gbV9wYXRoOyB9Ci0gICAgdm9pZCBz
ZXROZWVkc1BhdGhVcGRhdGUoKSB7IG1fbmVlZHNQYXRoVXBkYXRlID0gdHJ1ZTsgfQotICAgIHZp
cnR1YWwgdm9pZCBzZXROZWVkc0JvdW5kYXJpZXNVcGRhdGUoKSB7IG1fbmVlZHNCb3VuZGFyaWVz
VXBkYXRlID0gdHJ1ZTsgfQotICAgIHZpcnR1YWwgdm9pZCBzZXROZWVkc1RyYW5zZm9ybVVwZGF0
ZSgpIHsgbV9uZWVkc1RyYW5zZm9ybVVwZGF0ZSA9IHRydWU7IH0KLQogcHJpdmF0ZToKLSAgICAv
LyBIaXQtZGV0ZWN0aW9uIHNlcGVyYXRlZCBmb3IgdGhlIGZpbGwgYW5kIHRoZSBzdHJva2UKLSAg
ICBib29sIGZpbGxDb250YWlucyhjb25zdCBGbG9hdFBvaW50JiwgYm9vbCByZXF1aXJlc0ZpbGwg
PSB0cnVlLCBXaW5kUnVsZSBmaWxsUnVsZSA9IFJVTEVfTk9OWkVSTyk7Ci0gICAgYm9vbCBzdHJv
a2VDb250YWlucyhjb25zdCBGbG9hdFBvaW50JiwgYm9vbCByZXF1aXJlc1N0cm9rZSA9IHRydWUp
OwotCi0gICAgdmlydHVhbCBGbG9hdFJlY3Qgb2JqZWN0Qm91bmRpbmdCb3goKSBjb25zdCB7IHJl
dHVybiBtX2ZpbGxCb3VuZGluZ0JveDsgfQotICAgIHZpcnR1YWwgRmxvYXRSZWN0IHN0cm9rZUJv
dW5kaW5nQm94KCkgY29uc3QgeyByZXR1cm4gbV9zdHJva2VBbmRNYXJrZXJCb3VuZGluZ0JveDsg
fQotICAgIHZpcnR1YWwgRmxvYXRSZWN0IHJlcGFpbnRSZWN0SW5Mb2NhbENvb3JkaW5hdGVzKCkg
Y29uc3QgeyByZXR1cm4gbV9yZXBhaW50Qm91bmRpbmdCb3g7IH0KLSAgICB2aXJ0dWFsIGNvbnN0
IEFmZmluZVRyYW5zZm9ybSYgbG9jYWxUb1BhcmVudFRyYW5zZm9ybSgpIGNvbnN0IHsgcmV0dXJu
IG1fbG9jYWxUcmFuc2Zvcm07IH0KLQogICAgIHZpcnR1YWwgYm9vbCBpc1NWR1BhdGgoKSBjb25z
dCB7IHJldHVybiB0cnVlOyB9CiAgICAgdmlydHVhbCBjb25zdCBjaGFyKiByZW5kZXJOYW1lKCkg
Y29uc3QgeyByZXR1cm4gIlJlbmRlclNWR1BhdGgiOyB9CiAKLSAgICB2aXJ0dWFsIHZvaWQgbGF5
b3V0KCk7Ci0gICAgdmlydHVhbCB2b2lkIHBhaW50KFBhaW50SW5mbyYsIGNvbnN0IExheW91dFBv
aW50Jik7Ci0gICAgdmlydHVhbCB2b2lkIGFkZEZvY3VzUmluZ1JlY3RzKFZlY3RvcjxMYXlvdXRS
ZWN0PiYsIGNvbnN0IExheW91dFBvaW50Jik7Ci0KLSAgICB2aXJ0dWFsIGJvb2wgbm9kZUF0Rmxv
YXRQb2ludChjb25zdCBIaXRUZXN0UmVxdWVzdCYsIEhpdFRlc3RSZXN1bHQmLCBjb25zdCBGbG9h
dFBvaW50JiBwb2ludEluUGFyZW50LCBIaXRUZXN0QWN0aW9uKTsKLQotICAgIEZsb2F0UmVjdCBj
YWxjdWxhdGVNYXJrZXJCb3VuZHNJZk5lZWRlZCgpOwotICAgIHZvaWQgdXBkYXRlQ2FjaGVkQm91
bmRhcmllcygpOwotCi0gICAgdm9pZCBzZXR1cFNxdWFyZUNhcFBhdGgoUGF0aComIHVzZVBhdGgs
IGludCYgYXBwbHlNb2RlKTsKLSAgICBib29sIHNldHVwTm9uU2NhbGluZ1N0cm9rZVBhdGgoUGF0
aComIHVzZVBhdGgsIEdyYXBoaWNzQ29udGV4dFN0YXRlU2F2ZXImKTsKLSAgICBib29sIHNob3Vs
ZFN0cm9rZVplcm9MZW5ndGhTdWJwYXRoKCkgY29uc3Q7Ci0gICAgRmxvYXRSZWN0IHplcm9MZW5n
dGhTdWJwYXRoUmVjdCgpIGNvbnN0OwotCi1wcml2YXRlOgotICAgIHZpcnR1YWwgQWZmaW5lVHJh
bnNmb3JtIGxvY2FsVHJhbnNmb3JtKCkgY29uc3QgeyByZXR1cm4gbV9sb2NhbFRyYW5zZm9ybTsg
fQotICAgIHZvaWQgZmlsbEFuZFN0cm9rZVBhdGgoR3JhcGhpY3NDb250ZXh0Kik7Ci0KLSAgICBi
b29sIG1fbmVlZHNCb3VuZGFyaWVzVXBkYXRlIDogMTsKLSAgICBib29sIG1fbmVlZHNQYXRoVXBk
YXRlIDogMTsKLSAgICBib29sIG1fbmVlZHNUcmFuc2Zvcm1VcGRhdGUgOiAxOwotCi0gICAgbXV0
YWJsZSBQYXRoIG1fcGF0aDsKLSAgICBGbG9hdFJlY3QgbV9maWxsQm91bmRpbmdCb3g7Ci0gICAg
RmxvYXRSZWN0IG1fc3Ryb2tlQW5kTWFya2VyQm91bmRpbmdCb3g7Ci0gICAgRmxvYXRSZWN0IG1f
cmVwYWludEJvdW5kaW5nQm94OwotICAgIFNWR01hcmtlckxheW91dEluZm8gbV9tYXJrZXJMYXlv
dXRJbmZvOwotICAgIEFmZmluZVRyYW5zZm9ybSBtX2xvY2FsVHJhbnNmb3JtOworICAgIHZpcnR1
YWwgdm9pZCBpbmZsYXRlV2l0aE1hcmtlckJvdW5kcygpOwogfTsKIAotaW5saW5lIFJlbmRlclNW
R1BhdGgqIHRvUmVuZGVyU1ZHUGF0aChSZW5kZXJPYmplY3QqIG9iamVjdCkKLXsKLSAgICBBU1NF
UlQoIW9iamVjdCB8fCBvYmplY3QtPmlzU1ZHUGF0aCgpKTsKLSAgICByZXR1cm4gc3RhdGljX2Nh
c3Q8UmVuZGVyU1ZHUGF0aCo+KG9iamVjdCk7Ci19Ci0KLWlubGluZSBjb25zdCBSZW5kZXJTVkdQ
YXRoKiB0b1JlbmRlclNWR1BhdGgoY29uc3QgUmVuZGVyT2JqZWN0KiBvYmplY3QpCi17Ci0gICAg
QVNTRVJUKCFvYmplY3QgfHwgb2JqZWN0LT5pc1NWR1BhdGgoKSk7Ci0gICAgcmV0dXJuIHN0YXRp
Y19jYXN0PGNvbnN0IFJlbmRlclNWR1BhdGgqPihvYmplY3QpOwotfQotCi0vLyBUaGlzIHdpbGwg
Y2F0Y2ggYW55b25lIGRvaW5nIGFuIHVubmVjZXNzYXJ5IGNhc3QuCi12b2lkIHRvUmVuZGVyU1ZH
UGF0aChjb25zdCBSZW5kZXJTVkdQYXRoKik7Ci0KIH0KIAogI2VuZGlmIC8vIEVOQUJMRShTVkcp
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1JlY3Qu
Y3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZWN0LmNwcApuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jNTViMDM0Ci0tLSAvZGV2L251bGwKKysr
IGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZWN0LmNwcApAQCAtMCww
ICsxLDEzNiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMSBVbml2ZXJzaXR5IG9mIFN6ZWdl
ZAorICogQ29weXJpZ2h0IChDKSAyMDExIFJlbmF0YSBIb2RvdmFuIChyZW5pQHdlYmtpdC5vcmcp
CisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgVU5JVkVSU0lUWSBPRiBTWkVHRUQgYGBBUyBJUycnIEFORCBBTlkKKyAq
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBO
TyBFVkVOVCBTSEFMTCBVTklWRVJTSVRZIE9GIFNaRUdFRCBPUgorICogQ09OVFJJQlVUT1JTIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisg
KiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKwor
I2lmIEVOQUJMRShTVkcpCisjaW5jbHVkZSAiUmVuZGVyU1ZHUmVjdC5oIgorCisjaW5jbHVkZSAi
U1ZHTmFtZXMuaCIKKyNpbmNsdWRlICJTVkdSZWN0RWxlbWVudC5oIgorCituYW1lc3BhY2UgV2Vi
Q29yZSB7CisKK1JlbmRlclNWR1JlY3Q6OlJlbmRlclNWR1JlY3QoU1ZHUmVjdEVsZW1lbnQqIG5v
ZGUpCisgICAgOiBSZW5kZXJTVkdTaGFwZShub2RlKQoreworfQorCitSZW5kZXJTVkdSZWN0Ojp+
UmVuZGVyU1ZHUmVjdCgpCit7Cit9CisKK3ZvaWQgUmVuZGVyU1ZHUmVjdDo6Y3JlYXRlU2hhcGUo
KQoreworICAgIC8vIEJlZm9yZSBjcmVhdGluZyBhIG5ldyBvYmplY3Qgd2UgbmVlZCB0byBjbGVh
ciB0aGUgY2FjaGVkIGJvdW5kaW5nIGJveAorICAgIC8vIHRvIGF2b2lkIHVzaW5nIGdhcmJhZ2Uu
CisgICAgbV9ib3VuZGluZ0JveCA9IEZsb2F0UmVjdCgpOworICAgIFNWR1JlY3RFbGVtZW50KiBy
ZWN0ID0gc3RhdGljX2Nhc3Q8U1ZHUmVjdEVsZW1lbnQqPihub2RlKCkpOworICAgIEFTU0VSVChy
ZWN0KTsKKworICAgIGJvb2wgbm9uU2NhbGluZ1N0cm9rZSA9IHN0eWxlKCktPnN2Z1N0eWxlKCkt
PnZlY3RvckVmZmVjdCgpID09IFZFX05PTl9TQ0FMSU5HX1NUUk9LRTsKKyAgICAvLyBGYWxsYmFj
ayB0byBSZW5kZXJTVkdTaGFwZSBpZiByZWN0IGhhcyByb3VuZGVkIGNvcm5lcnMuCisgICAgaWYg
KHJlY3QtPmhhc0F0dHJpYnV0ZShTVkdOYW1lczo6cnhBdHRyKSB8fCByZWN0LT5oYXNBdHRyaWJ1
dGUoU1ZHTmFtZXM6OnJ5QXR0cikgfHwgbm9uU2NhbGluZ1N0cm9rZSkgeworICAgICAgIFJlbmRl
clNWR1NoYXBlOjpjcmVhdGVTaGFwZSgpOworICAgICAgIHNldElzUGFpbnRpbmdGYWxsYmFjayh0
cnVlKTsKKyAgICAgICByZXR1cm47CisgICAgfQorCisgICAgRmxvYXRTaXplIGJvdW5kaW5nQm94
U2l6ZShyZWN0LT53aWR0aCgpLnZhbHVlKHJlY3QpLCByZWN0LT5oZWlnaHQoKS52YWx1ZShyZWN0
KSk7CisgICAgaWYgKGJvdW5kaW5nQm94U2l6ZS5pc0VtcHR5KCkpCisgICAgICAgIHJldHVybjsK
KworICAgIG1fYm91bmRpbmdCb3ggPSBGbG9hdFJlY3QoRmxvYXRQb2ludChyZWN0LT54KCkudmFs
dWUocmVjdCksIHJlY3QtPnkoKS52YWx1ZShyZWN0KSksIGJvdW5kaW5nQm94U2l6ZSk7CisKKyAg
ICAvLyBUbyBkZWNpZGUgaWYgdGhlIHN0cm9rZSBjb250YWlucyBhIHBvaW50IHdlIGNyZWF0ZSB0
d28gcmVjdHMgd2hpY2ggcmVwcmVzZW50IHRoZSBpbm5lciBhbmQKKyAgICAvLyB0aGUgb3V0ZXIg
c3Ryb2tlIGJvcmRlcnMuIEEgc3Ryb2tlIGNvbnRhaW5zIHRoZSBwb2ludCwgaWYgdGhlIHBvaW50
IGlzIGJldHdlZW4gdGhlbS4KKyAgICBtX2lubmVyU3Ryb2tlUmVjdCA9IG1fYm91bmRpbmdCb3g7
CisgICAgbV9vdXRlclN0cm9rZVJlY3QgPSBtX2JvdW5kaW5nQm94OworICAgIGlmIChzdHlsZSgp
LT5zdmdTdHlsZSgpLT5oYXNTdHJva2UoKSkgeworICAgICAgICBmbG9hdCBzdHJva2VXaWR0aCA9
IHRoaXMtPnN0cm9rZVdpZHRoKCk7CisgICAgICAgIG1faW5uZXJTdHJva2VSZWN0LmluZmxhdGUo
LXN0cm9rZVdpZHRoIC8gMik7CisgICAgICAgIG1fb3V0ZXJTdHJva2VSZWN0LmluZmxhdGUoc3Ry
b2tlV2lkdGggLyAyKTsKKyAgICB9Cit9CisKKworRmxvYXRSZWN0IFJlbmRlclNWR1JlY3Q6Om9i
amVjdEJvdW5kaW5nQm94KCkgY29uc3QKK3sKKyAgICBpZiAoaXNQYWludGluZ0ZhbGxiYWNrKCkp
CisgICAgICAgIHJldHVybiBSZW5kZXJTVkdTaGFwZTo6b2JqZWN0Qm91bmRpbmdCb3goKTsKKyAg
ICByZXR1cm4gbV9ib3VuZGluZ0JveDsKK30KKworRmxvYXRSZWN0IFJlbmRlclNWR1JlY3Q6OnN0
cm9rZUJvdW5kaW5nQm94KCkgY29uc3QKK3sKKyAgICBpZiAoaXNQYWludGluZ0ZhbGxiYWNrKCkp
CisgICAgICAgIHJldHVybiBSZW5kZXJTVkdTaGFwZTo6c3Ryb2tlQm91bmRpbmdCb3goKTsKKyAg
ICByZXR1cm4gbV9vdXRlclN0cm9rZVJlY3Q7Cit9CisKK3ZvaWQgUmVuZGVyU1ZHUmVjdDo6Zmls
bFNoYXBlKEdyYXBoaWNzQ29udGV4dCogY29udGV4dCkgY29uc3QKK3sKKyAgICBpZiAoIWlzUGFp
bnRpbmdGYWxsYmFjaygpKSB7CisgICAgICAgIC8vIC0td2Via2l0LXN2Zy1zaGFkb3cgc2hvdWxk
IGJlIGFwcGxpZWQgdmlhIHRyYW5zcGFyZW5jeSBsYXllciwKKyAgICAgICAgLy8gc28gU1ZHIHNo
YXBlcyBoYXZlIG5vIG5lZWQgdG8gZHJhdyB0aGVpciBvd24gc2hhZG93LgorICAgICAgICBpZiAo
Y29udGV4dC0+aGFzU2hhZG93KCkpIHsKKyAgICAgICAgICAgIGNvbnRleHQtPnNhdmUoKTsKKyAg
ICAgICAgICAgIGNvbnRleHQtPmNsZWFyU2hhZG93KCk7CisgICAgICAgICAgICBjb250ZXh0LT5m
aWxsUmVjdChtX2JvdW5kaW5nQm94KTsKKyAgICAgICAgICAgIGNvbnRleHQtPnJlc3RvcmUoKTsK
KyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICBjb250ZXh0LT5maWxsUmVj
dChtX2JvdW5kaW5nQm94KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBSZW5kZXJTVkdT
aGFwZTo6ZmlsbFNoYXBlKGNvbnRleHQpOworfQorCit2b2lkIFJlbmRlclNWR1JlY3Q6OnN0cm9r
ZVNoYXBlKEdyYXBoaWNzQ29udGV4dCogY29udGV4dCkgY29uc3QKK3sKKyAgICBpZiAoIWlzUGFp
bnRpbmdGYWxsYmFjaygpKSB7CisgICAgICAgIGNvbnRleHQtPnN0cm9rZVJlY3QobV9ib3VuZGlu
Z0JveCwgc3Ryb2tlV2lkdGgoKSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgUmVuZGVy
U1ZHU2hhcGU6OnN0cm9rZVNoYXBlKGNvbnRleHQpOworfQorCitib29sIFJlbmRlclNWR1JlY3Q6
OnNoYXBlRGVwZW5kZW50U3Ryb2tlQ29udGFpbnMoY29uc3QgRmxvYXRQb2ludCYgcG9pbnQpIGNv
bnN0Cit7CisgICAgcmV0dXJuIG1fb3V0ZXJTdHJva2VSZWN0LmNvbnRhaW5zKHBvaW50LCBGbG9h
dFJlY3Q6Okluc2lkZU9yT25TdHJva2UpICYmICFtX2lubmVyU3Ryb2tlUmVjdC5jb250YWlucyhw
b2ludCwgRmxvYXRSZWN0OjpJbnNpZGVCdXROb3RPblN0cm9rZSk7Cit9CisKK2Jvb2wgUmVuZGVy
U1ZHUmVjdDo6c2hhcGVEZXBlbmRlbnRGaWxsQ29udGFpbnMoY29uc3QgRmxvYXRQb2ludCYgcG9p
bnQsIGNvbnN0IFdpbmRSdWxlIGZpbGxSdWxlKSBjb25zdAoreworICAgIGlmIChpc1BhaW50aW5n
RmFsbGJhY2soKSkKKyAgICAgICAgcmV0dXJuIFJlbmRlclNWR1NoYXBlOjpzaGFwZURlcGVuZGVu
dEZpbGxDb250YWlucyhwb2ludCwgZmlsbFJ1bGUpOworICAgIHJldHVybiBtX2JvdW5kaW5nQm94
LmNvbnRhaW5zKHBvaW50LngoKSwgcG9pbnQueSgpKTsKK30KKworfQorCisjZW5kaWYgLy8gRU5B
QkxFKFNWRykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVy
U1ZHUmVjdC5oIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZWN0LmgK
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2Y5NWJjMAotLS0gL2Rldi9udWxs
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVjdC5oCkBAIC0w
LDAgKzEsNjQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgVW5pdmVyc2l0eSBvZiBTemVn
ZWQKKyAqIENvcHlyaWdodCAoQykgMjAxMSBSZW5hdGEgSG9kb3ZhbiAocmVuaUB3ZWJraXQub3Jn
KQorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIFVOSVZFUlNJVFkgT0YgU1pFR0VEIGBgQVMgSVMnJyBBTkQgQU5ZCisg
KiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4g
Tk8gRVZFTlQgU0hBTEwgVU5JVkVSU0lUWSBPRiBTWkVHRUQgT1IKKyAqIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAor
ICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIFJlbmRlclNWR1JlY3Rf
aAorI2RlZmluZSBSZW5kZXJTVkdSZWN0X2gKKworI2lmIEVOQUJMRShTVkcpCisjaW5jbHVkZSAi
UmVuZGVyU1ZHUGF0aC5oIgorI2luY2x1ZGUgIlNWR1JlY3RFbGVtZW50LmgiCisKK25hbWVzcGFj
ZSBXZWJDb3JlIHsKKworY2xhc3MgUmVuZGVyU1ZHUmVjdCA6IHB1YmxpYyBSZW5kZXJTVkdTaGFw
ZSB7CitwdWJsaWM6CisgICAgZXhwbGljaXQgUmVuZGVyU1ZHUmVjdChTVkdSZWN0RWxlbWVudCop
OworICAgIHZpcnR1YWwgflJlbmRlclNWR1JlY3QoKTsKKworcHJpdmF0ZToKKyAgICB2aXJ0dWFs
IGJvb2wgaXNTVkdSZWN0KCkgY29uc3QgeyByZXR1cm4gdHJ1ZTsgfQorICAgIHZpcnR1YWwgY29u
c3QgY2hhciogcmVuZGVyTmFtZSgpIGNvbnN0IHsgcmV0dXJuICJSZW5kZXJTVkdSZWN0IjsgfQor
CisgICAgdmlydHVhbCB2b2lkIGNyZWF0ZVNoYXBlKCk7CisgICAgdmlydHVhbCBib29sIGlzRW1w
dHkoKSBjb25zdCB7IHJldHVybiBoYXNQYXRoKCkgPyBSZW5kZXJTVkdTaGFwZTo6aXNFbXB0eSgp
IDogbV9ib3VuZGluZ0JveC5pc0VtcHR5KCk7IH07CisgICAgdmlydHVhbCB2b2lkIGZpbGxTaGFw
ZShHcmFwaGljc0NvbnRleHQqKSBjb25zdDsKKyAgICB2aXJ0dWFsIHZvaWQgc3Ryb2tlU2hhcGUo
R3JhcGhpY3NDb250ZXh0KikgY29uc3Q7CisgICAgdmlydHVhbCBGbG9hdFJlY3Qgb2JqZWN0Qm91
bmRpbmdCb3goKSBjb25zdDsKKyAgICB2aXJ0dWFsIEZsb2F0UmVjdCBzdHJva2VCb3VuZGluZ0Jv
eCgpIGNvbnN0OworICAgIHZpcnR1YWwgYm9vbCBzaGFwZURlcGVuZGVudFN0cm9rZUNvbnRhaW5z
KGNvbnN0IEZsb2F0UG9pbnQmKSBjb25zdDsKKyAgICB2aXJ0dWFsIGJvb2wgc2hhcGVEZXBlbmRl
bnRGaWxsQ29udGFpbnMoY29uc3QgRmxvYXRQb2ludCYsIGNvbnN0IFdpbmRSdWxlKSBjb25zdDsK
KworcHJpdmF0ZToKKyAgICBGbG9hdFJlY3QgbV9ib3VuZGluZ0JveDsKKyAgICBGbG9hdFJlY3Qg
bV9pbm5lclN0cm9rZVJlY3Q7CisgICAgRmxvYXRSZWN0IG1fb3V0ZXJTdHJva2VSZWN0OworfTsK
KworfQorCisjZW5kaWYgLy8gRU5BQkxFKFNWRykKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJjZS5oIGIvU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJjZS5oCmluZGV4IGE2N2JhNzMuLmUwMjAx
NTQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVz
b3VyY2UuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291
cmNlLmgKQEAgLTIxLDYgKzIxLDcgQEAKICNkZWZpbmUgUmVuZGVyU1ZHUmVzb3VyY2VfaAogCiAj
aWYgRU5BQkxFKFNWRykKKyNpbmNsdWRlICJSZW5kZXJTVkdTaGFwZS5oIgogI2luY2x1ZGUgIlJl
bmRlclN0eWxlQ29uc3RhbnRzLmgiCiAjaW5jbHVkZSAiU1ZHRG9jdW1lbnRFeHRlbnNpb25zLmgi
CiAKQEAgLTYxLDcgKzYyLDcgQEAgcHVibGljOgogICAgIHZpcnR1YWwgdm9pZCByZW1vdmVDbGll
bnRGcm9tQ2FjaGUoUmVuZGVyT2JqZWN0KiwgYm9vbCBtYXJrRm9ySW52YWxpZGF0aW9uID0gdHJ1
ZSkgPSAwOwogCiAgICAgdmlydHVhbCBib29sIGFwcGx5UmVzb3VyY2UoUmVuZGVyT2JqZWN0Kiwg
UmVuZGVyU3R5bGUqLCBHcmFwaGljc0NvbnRleHQqJiwgdW5zaWduZWQgc2hvcnQgcmVzb3VyY2VN
b2RlKSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIHBvc3RBcHBseVJlc291cmNlKFJlbmRlck9iamVj
dCosIEdyYXBoaWNzQ29udGV4dComLCB1bnNpZ25lZCBzaG9ydCwgY29uc3QgUGF0aCopIHsgfQor
ICAgIHZpcnR1YWwgdm9pZCBwb3N0QXBwbHlSZXNvdXJjZShSZW5kZXJPYmplY3QqLCBHcmFwaGlj
c0NvbnRleHQqJiwgdW5zaWduZWQgc2hvcnQsIGNvbnN0IFBhdGgqLCBjb25zdCBSZW5kZXJTVkdT
aGFwZSopIHsgfQogICAgIHZpcnR1YWwgRmxvYXRSZWN0IHJlc291cmNlQm91bmRpbmdCb3goUmVu
ZGVyT2JqZWN0KikgPSAwOwogCiAgICAgdmlydHVhbCBSZW5kZXJTVkdSZXNvdXJjZVR5cGUgcmVz
b3VyY2VUeXBlKCkgY29uc3QgPSAwOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJjZUNsaXBwZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJjZUNsaXBwZXIuY3BwCmluZGV4IDIyYjQxZmEuLjVh
NmY0N2YgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZH
UmVzb3VyY2VDbGlwcGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1Jl
bmRlclNWR1Jlc291cmNlQ2xpcHBlci5jcHAKQEAgLTI0Miw3ICsyNDIsNyBAQCBib29sIFJlbmRl
clNWR1Jlc291cmNlQ2xpcHBlcjo6ZHJhd0NvbnRlbnRJbnRvTWFza0ltYWdlKENsaXBwZXJEYXRh
KiBjbGlwcGVyRGF0YQogICAgICAgICB9CiAKICAgICAgICAgLy8gT25seSBzaGFwZXMsIHBhdGhz
IGFuZCB0ZXh0cyBhcmUgYWxsb3dlZCBmb3IgY2xpcHBpbmcuCi0gICAgICAgIGlmICghcmVuZGVy
ZXItPmlzU1ZHUGF0aCgpICYmICFyZW5kZXJlci0+aXNTVkdUZXh0KCkpCisgICAgICAgIGlmICgh
cmVuZGVyZXItPmlzU1ZHU2hhcGUoKSAmJiAhcmVuZGVyZXItPmlzU1ZHVGV4dCgpKQogICAgICAg
ICAgICAgY29udGludWU7CiAKICAgICAgICAgLy8gU2F2ZSB0aGUgb2xkIFJlbmRlclN0eWxlIG9m
IHRoZSBjdXJyZW50IG9iamVjdCBmb3IgcmVzdG9yaW5nIGFmdGVyIGRyYXdpbmcKQEAgLTI4NCw3
ICsyODQsNyBAQCB2b2lkIFJlbmRlclNWR1Jlc291cmNlQ2xpcHBlcjo6Y2FsY3VsYXRlQ2xpcENv
bnRlbnRSZXBhaW50UmVjdCgpCiAgICAgICAgIFJlbmRlck9iamVjdCogcmVuZGVyZXIgPSBjaGls
ZE5vZGUtPnJlbmRlcmVyKCk7CiAgICAgICAgIGlmICghY2hpbGROb2RlLT5pc1NWR0VsZW1lbnQo
KSB8fCAhc3RhdGljX2Nhc3Q8U1ZHRWxlbWVudCo+KGNoaWxkTm9kZSktPmlzU3R5bGVkKCkgfHwg
IXJlbmRlcmVyKQogICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIGlmICghcmVuZGVyZXIt
PmlzU1ZHUGF0aCgpICYmICFyZW5kZXJlci0+aXNTVkdUZXh0KCkgJiYgIXJlbmRlcmVyLT5pc1NW
R1NoYWRvd1RyZWVSb290Q29udGFpbmVyKCkpCisgICAgICAgIGlmICghcmVuZGVyZXItPmlzU1ZH
U2hhcGUoKSAmJiAhcmVuZGVyZXItPmlzU1ZHVGV4dCgpICYmICFyZW5kZXJlci0+aXNTVkdTaGFk
b3dUcmVlUm9vdENvbnRhaW5lcigpKQogICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgIFJl
bmRlclN0eWxlKiBzdHlsZSA9IHJlbmRlcmVyLT5zdHlsZSgpOwogICAgICAgICBpZiAoIXN0eWxl
IHx8IHN0eWxlLT5kaXNwbGF5KCkgPT0gTk9ORSB8fCBzdHlsZS0+dmlzaWJpbGl0eSgpICE9IFZJ
U0lCTEUpCkBAIC0zMTAsNyArMzEwLDcgQEAgYm9vbCBSZW5kZXJTVkdSZXNvdXJjZUNsaXBwZXI6
OmhpdFRlc3RDbGlwQ29udGVudChjb25zdCBGbG9hdFJlY3QmIG9iamVjdEJvdW5kaW4KICAgICAg
ICAgUmVuZGVyT2JqZWN0KiByZW5kZXJlciA9IGNoaWxkTm9kZS0+cmVuZGVyZXIoKTsKICAgICAg
ICAgaWYgKCFjaGlsZE5vZGUtPmlzU1ZHRWxlbWVudCgpIHx8ICFzdGF0aWNfY2FzdDxTVkdFbGVt
ZW50Kj4oY2hpbGROb2RlKS0+aXNTdHlsZWQoKSB8fCAhcmVuZGVyZXIpCiAgICAgICAgICAgICBj
b250aW51ZTsKLSAgICAgICAgaWYgKCFyZW5kZXJlci0+aXNTVkdQYXRoKCkgJiYgIXJlbmRlcmVy
LT5pc1NWR1RleHQoKSAmJiAhcmVuZGVyZXItPmlzU1ZHU2hhZG93VHJlZVJvb3RDb250YWluZXIo
KSkKKyAgICAgICAgaWYgKCFyZW5kZXJlci0+aXNTVkdTaGFwZSgpICYmICFyZW5kZXJlci0+aXNT
VkdUZXh0KCkgJiYgIXJlbmRlcmVyLT5pc1NWR1NoYWRvd1RyZWVSb290Q29udGFpbmVyKCkpCiAg
ICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgSW50UG9pbnQgaGl0UG9pbnQ7CiAgICAgICAg
IEhpdFRlc3RSZXN1bHQgcmVzdWx0KGhpdFBvaW50KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VDb250YWluZXIuY3BwIGIvU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJjZUNvbnRhaW5lci5jcHAKaW5k
ZXggNTVmNzdlNS4uZTk1MGU3MSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L3N2Zy9SZW5kZXJTVkdSZXNvdXJjZUNvbnRhaW5lci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJjZUNvbnRhaW5lci5jcHAKQEAgLTE4MCw3ICsx
ODAsNyBAQCB2b2lkIFJlbmRlclNWR1Jlc291cmNlQ29udGFpbmVyOjpyZWdpc3RlclJlc291cmNl
KCkKIC8vIEZJWE1FOiBUaGlzIGRvZXMgbm90IGJlbG9uZyBoZXJlLgogQWZmaW5lVHJhbnNmb3Jt
IFJlbmRlclNWR1Jlc291cmNlQ29udGFpbmVyOjp0cmFuc2Zvcm1Pbk5vblNjYWxpbmdTdHJva2Uo
UmVuZGVyT2JqZWN0KiBvYmplY3QsIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgcmVzb3VyY2VUcmFu
c2Zvcm0pCiB7Ci0gICAgaWYgKCFvYmplY3QtPmlzU1ZHUGF0aCgpKQorICAgIGlmICghb2JqZWN0
LT5pc1NWR1NoYXBlKCkpCiAgICAgICAgIHJldHVybiByZXNvdXJjZVRyYW5zZm9ybTsKIAogICAg
IFNWR1N0eWxlZFRyYW5zZm9ybWFibGVFbGVtZW50KiBlbGVtZW50ID0gc3RhdGljX2Nhc3Q8U1ZH
U3R5bGVkVHJhbnNmb3JtYWJsZUVsZW1lbnQqPihvYmplY3QtPm5vZGUoKSk7CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291cmNlRmlsdGVyLmNw
cCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VGaWx0ZXIu
Y3BwCmluZGV4IDY4OTM1ZGEuLjk2MWRkM2YgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VGaWx0ZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VGaWx0ZXIuY3BwCkBAIC0yNTksNyAr
MjU5LDcgQEAgYm9vbCBSZW5kZXJTVkdSZXNvdXJjZUZpbHRlcjo6YXBwbHlSZXNvdXJjZShSZW5k
ZXJPYmplY3QqIG9iamVjdCwgUmVuZGVyU3R5bGUqLAogICAgIHJldHVybiB0cnVlOwogfQogCi12
b2lkIFJlbmRlclNWR1Jlc291cmNlRmlsdGVyOjpwb3N0QXBwbHlSZXNvdXJjZShSZW5kZXJPYmpl
Y3QqIG9iamVjdCwgR3JhcGhpY3NDb250ZXh0KiYgY29udGV4dCwgdW5zaWduZWQgc2hvcnQgcmVz
b3VyY2VNb2RlLCBjb25zdCBQYXRoKikKK3ZvaWQgUmVuZGVyU1ZHUmVzb3VyY2VGaWx0ZXI6OnBv
c3RBcHBseVJlc291cmNlKFJlbmRlck9iamVjdCogb2JqZWN0LCBHcmFwaGljc0NvbnRleHQqJiBj
b250ZXh0LCB1bnNpZ25lZCBzaG9ydCByZXNvdXJjZU1vZGUsIGNvbnN0IFBhdGgqLCBjb25zdCBS
ZW5kZXJTVkdTaGFwZSopCiB7CiAgICAgQVNTRVJUKG9iamVjdCk7CiAgICAgQVNTRVJUKGNvbnRl
eHQpOwpAQCAtMjkzLDcgKzI5Myw3IEBAIHZvaWQgUmVuZGVyU1ZHUmVzb3VyY2VGaWx0ZXI6OnBv
c3RBcHBseVJlc291cmNlKFJlbmRlck9iamVjdCogb2JqZWN0LCBHcmFwaGljc0NvCiAgICAgfQog
CiAgICAgRmlsdGVyRWZmZWN0KiBsYXN0RWZmZWN0ID0gZmlsdGVyRGF0YS0+YnVpbGRlci0+bGFz
dEVmZmVjdCgpOwotICAgIAorCiAgICAgaWYgKGxhc3RFZmZlY3QgJiYgIWZpbHRlckRhdGEtPmJv
dW5kYXJpZXMuaXNFbXB0eSgpICYmICFsYXN0RWZmZWN0LT5maWx0ZXJQcmltaXRpdmVTdWJyZWdp
b24oKS5pc0VtcHR5KCkpIHsKICAgICAgICAgLy8gVGhpcyBpcyB0aGUgcmVhbCBmaWx0ZXJpbmcg
b2YgdGhlIG9iamVjdC4gSXQganVzdCBuZWVkcyB0byBiZSBjYWxsZWQgb24gdGhlCiAgICAgICAg
IC8vIGluaXRpYWwgZmlsdGVyaW5nIHByb2Nlc3MuIFdlIGp1c3QgdGFrZSB0aGUgc3RvcmVkIGZp
bHRlciByZXN1bHQgb24gYQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2
Zy9SZW5kZXJTVkdSZXNvdXJjZUZpbHRlci5oIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2
Zy9SZW5kZXJTVkdSZXNvdXJjZUZpbHRlci5oCmluZGV4IDVhNWIwOTIuLmZmNjFiNzEgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VGaWx0
ZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291cmNl
RmlsdGVyLmgKQEAgLTcyLDcgKzcyLDcgQEAgcHVibGljOgogICAgIHZpcnR1YWwgdm9pZCByZW1v
dmVDbGllbnRGcm9tQ2FjaGUoUmVuZGVyT2JqZWN0KiwgYm9vbCBtYXJrRm9ySW52YWxpZGF0aW9u
ID0gdHJ1ZSk7CiAKICAgICB2aXJ0dWFsIGJvb2wgYXBwbHlSZXNvdXJjZShSZW5kZXJPYmplY3Qq
LCBSZW5kZXJTdHlsZSosIEdyYXBoaWNzQ29udGV4dComLCB1bnNpZ25lZCBzaG9ydCByZXNvdXJj
ZU1vZGUpOwotICAgIHZpcnR1YWwgdm9pZCBwb3N0QXBwbHlSZXNvdXJjZShSZW5kZXJPYmplY3Qq
LCBHcmFwaGljc0NvbnRleHQqJiwgdW5zaWduZWQgc2hvcnQgcmVzb3VyY2VNb2RlLCBjb25zdCBQ
YXRoKik7CisgICAgdmlydHVhbCB2b2lkIHBvc3RBcHBseVJlc291cmNlKFJlbmRlck9iamVjdCos
IEdyYXBoaWNzQ29udGV4dComLCB1bnNpZ25lZCBzaG9ydCByZXNvdXJjZU1vZGUsIGNvbnN0IFBh
dGgqLCBjb25zdCBSZW5kZXJTVkdTaGFwZSopOwogCiAgICAgdmlydHVhbCBGbG9hdFJlY3QgcmVz
b3VyY2VCb3VuZGluZ0JveChSZW5kZXJPYmplY3QqKTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJjZUdyYWRpZW50LmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VHcmFkaWVudC5jcHAKaW5k
ZXggNWUzMWI3Ni4uMjI0MzNjZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L3N2Zy9SZW5kZXJTVkdSZXNvdXJjZUdyYWRpZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291cmNlR3JhZGllbnQuY3BwCkBAIC0yNyw2ICsyNyw3
IEBACiAKICNpbmNsdWRlICJHcmFkaWVudEF0dHJpYnV0ZXMuaCIKICNpbmNsdWRlICJHcmFwaGlj
c0NvbnRleHQuaCIKKyNpbmNsdWRlICJSZW5kZXJTVkdTaGFwZS5oIgogI2luY2x1ZGUgIlJlbmRl
clNWR1RleHQuaCIKICNpbmNsdWRlICJTVkdJbWFnZUJ1ZmZlclRvb2xzLmgiCiAjaW5jbHVkZSAi
U1ZHUmVuZGVyU3VwcG9ydC5oIgpAQCAtMjMxLDcgKzIzMiw3IEBAIGJvb2wgUmVuZGVyU1ZHUmVz
b3VyY2VHcmFkaWVudDo6YXBwbHlSZXNvdXJjZShSZW5kZXJPYmplY3QqIG9iamVjdCwgUmVuZGVy
U3R5bGUqCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLXZvaWQgUmVuZGVyU1ZHUmVzb3VyY2VHcmFk
aWVudDo6cG9zdEFwcGx5UmVzb3VyY2UoUmVuZGVyT2JqZWN0KiBvYmplY3QsIEdyYXBoaWNzQ29u
dGV4dComIGNvbnRleHQsIHVuc2lnbmVkIHNob3J0IHJlc291cmNlTW9kZSwgY29uc3QgUGF0aCog
cGF0aCkKK3ZvaWQgUmVuZGVyU1ZHUmVzb3VyY2VHcmFkaWVudDo6cG9zdEFwcGx5UmVzb3VyY2Uo
UmVuZGVyT2JqZWN0KiBvYmplY3QsIEdyYXBoaWNzQ29udGV4dComIGNvbnRleHQsIHVuc2lnbmVk
IHNob3J0IHJlc291cmNlTW9kZSwgY29uc3QgUGF0aCogcGF0aCwgY29uc3QgUmVuZGVyU1ZHU2hh
cGUqIHNoYXBlKQogewogICAgIEFTU0VSVChjb250ZXh0KTsKICAgICBBU1NFUlQocmVzb3VyY2VN
b2RlICE9IEFwcGx5VG9EZWZhdWx0TW9kZSk7CkBAIC0yNTksMTEgKzI2MCwxOSBAQCB2b2lkIFJl
bmRlclNWR1Jlc291cmNlR3JhZGllbnQ6OnBvc3RBcHBseVJlc291cmNlKFJlbmRlck9iamVjdCog
b2JqZWN0LCBHcmFwaGljcwogI2Vsc2UKICAgICAgICAgVU5VU0VEX1BBUkFNKG9iamVjdCk7CiAj
ZW5kaWYKLSAgICB9IGVsc2UgaWYgKHBhdGgpIHsKLSAgICAgICAgaWYgKHJlc291cmNlTW9kZSAm
IEFwcGx5VG9GaWxsTW9kZSkKLSAgICAgICAgICAgIGNvbnRleHQtPmZpbGxQYXRoKCpwYXRoKTsK
LSAgICAgICAgZWxzZSBpZiAocmVzb3VyY2VNb2RlICYgQXBwbHlUb1N0cm9rZU1vZGUpCi0gICAg
ICAgICAgICBjb250ZXh0LT5zdHJva2VQYXRoKCpwYXRoKTsKKyAgICB9IGVsc2UgeworICAgICAg
ICBpZiAocmVzb3VyY2VNb2RlICYgQXBwbHlUb0ZpbGxNb2RlKSB7CisgICAgICAgICAgICBpZiAo
cGF0aCkKKyAgICAgICAgICAgICAgICBjb250ZXh0LT5maWxsUGF0aCgqcGF0aCk7CisgICAgICAg
ICAgICBlbHNlIGlmIChzaGFwZSkKKyAgICAgICAgICAgICAgICBzaGFwZS0+ZmlsbFNoYXBlKGNv
bnRleHQpOworICAgICAgICB9CisgICAgICAgIGlmIChyZXNvdXJjZU1vZGUgJiBBcHBseVRvU3Ry
b2tlTW9kZSkgeworICAgICAgICAgICAgaWYgKHBhdGgpCisgICAgICAgICAgICAgICAgY29udGV4
dC0+c3Ryb2tlUGF0aCgqcGF0aCk7CisgICAgICAgICAgICBlbHNlIGlmIChzaGFwZSkKKyAgICAg
ICAgICAgICAgICBzaGFwZS0+c3Ryb2tlU2hhcGUoY29udGV4dCk7CisgICAgICAgIH0KICAgICB9
CiAKICAgICBjb250ZXh0LT5yZXN0b3JlKCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291cmNlR3JhZGllbnQuaCBiL1NvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VHcmFkaWVudC5oCmluZGV4IGRmNDkyZTIu
LjNmY2NkNDQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVy
U1ZHUmVzb3VyY2VHcmFkaWVudC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcv
UmVuZGVyU1ZHUmVzb3VyY2VHcmFkaWVudC5oCkBAIC01MCw3ICs1MCw3IEBAIHB1YmxpYzoKICAg
ICB2aXJ0dWFsIHZvaWQgcmVtb3ZlQ2xpZW50RnJvbUNhY2hlKFJlbmRlck9iamVjdCosIGJvb2wg
bWFya0ZvckludmFsaWRhdGlvbiA9IHRydWUpOwogCiAgICAgdmlydHVhbCBib29sIGFwcGx5UmVz
b3VyY2UoUmVuZGVyT2JqZWN0KiwgUmVuZGVyU3R5bGUqLCBHcmFwaGljc0NvbnRleHQqJiwgdW5z
aWduZWQgc2hvcnQgcmVzb3VyY2VNb2RlKTsKLSAgICB2aXJ0dWFsIHZvaWQgcG9zdEFwcGx5UmVz
b3VyY2UoUmVuZGVyT2JqZWN0KiwgR3JhcGhpY3NDb250ZXh0KiYsIHVuc2lnbmVkIHNob3J0IHJl
c291cmNlTW9kZSwgY29uc3QgUGF0aCopOworICAgIHZpcnR1YWwgdm9pZCBwb3N0QXBwbHlSZXNv
dXJjZShSZW5kZXJPYmplY3QqLCBHcmFwaGljc0NvbnRleHQqJiwgdW5zaWduZWQgc2hvcnQgcmVz
b3VyY2VNb2RlLCBjb25zdCBQYXRoKiwgY29uc3QgUmVuZGVyU1ZHU2hhcGUqKTsKICAgICB2aXJ0
dWFsIEZsb2F0UmVjdCByZXNvdXJjZUJvdW5kaW5nQm94KFJlbmRlck9iamVjdCopIHsgcmV0dXJu
IEZsb2F0UmVjdCgpOyB9CiAKIHByb3RlY3RlZDoKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VQYXR0ZXJuLmNwcCBiL1NvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VQYXR0ZXJuLmNwcAppbmRleCA4ZGNl
MDg0Li5iYzQ0M2U1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1Jl
bmRlclNWR1Jlc291cmNlUGF0dGVybi5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L3N2Zy9SZW5kZXJTVkdSZXNvdXJjZVBhdHRlcm4uY3BwCkBAIC0xODgsMTYgKzE4OCwyMiBAQCBi
b29sIFJlbmRlclNWR1Jlc291cmNlUGF0dGVybjo6YXBwbHlSZXNvdXJjZShSZW5kZXJPYmplY3Qq
IG9iamVjdCwgUmVuZGVyU3R5bGUqCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLXZvaWQgUmVuZGVy
U1ZHUmVzb3VyY2VQYXR0ZXJuOjpwb3N0QXBwbHlSZXNvdXJjZShSZW5kZXJPYmplY3QqLCBHcmFw
aGljc0NvbnRleHQqJiBjb250ZXh0LCB1bnNpZ25lZCBzaG9ydCByZXNvdXJjZU1vZGUsIGNvbnN0
IFBhdGgqIHBhdGgpCit2b2lkIFJlbmRlclNWR1Jlc291cmNlUGF0dGVybjo6cG9zdEFwcGx5UmVz
b3VyY2UoUmVuZGVyT2JqZWN0KiwgR3JhcGhpY3NDb250ZXh0KiYgY29udGV4dCwgdW5zaWduZWQg
c2hvcnQgcmVzb3VyY2VNb2RlLCBjb25zdCBQYXRoKiBwYXRoLCBjb25zdCBSZW5kZXJTVkdTaGFw
ZSogc2hhcGUpCiB7CiAgICAgQVNTRVJUKGNvbnRleHQpOwogICAgIEFTU0VSVChyZXNvdXJjZU1v
ZGUgIT0gQXBwbHlUb0RlZmF1bHRNb2RlKTsKIAotICAgIGlmIChwYXRoICYmICEocmVzb3VyY2VN
b2RlICYgQXBwbHlUb1RleHRNb2RlKSkgewotICAgICAgICBpZiAocmVzb3VyY2VNb2RlICYgQXBw
bHlUb0ZpbGxNb2RlKQorICAgIGlmIChyZXNvdXJjZU1vZGUgJiBBcHBseVRvRmlsbE1vZGUpIHsK
KyAgICAgICAgaWYgKHBhdGgpCiAgICAgICAgICAgICBjb250ZXh0LT5maWxsUGF0aCgqcGF0aCk7
Ci0gICAgICAgIGVsc2UgaWYgKHJlc291cmNlTW9kZSAmIEFwcGx5VG9TdHJva2VNb2RlKQorICAg
ICAgICBlbHNlIGlmIChzaGFwZSkKKyAgICAgICAgICAgIHNoYXBlLT5maWxsU2hhcGUoY29udGV4
dCk7CisgICAgfQorICAgIGlmIChyZXNvdXJjZU1vZGUgJiBBcHBseVRvU3Ryb2tlTW9kZSkgewor
ICAgICAgICBpZiAocGF0aCkKICAgICAgICAgICAgIGNvbnRleHQtPnN0cm9rZVBhdGgoKnBhdGgp
OworICAgICAgICBlbHNlIGlmIChzaGFwZSkKKyAgICAgICAgICAgIHNoYXBlLT5zdHJva2VTaGFw
ZShjb250ZXh0KTsKICAgICB9CiAKICAgICBjb250ZXh0LT5yZXN0b3JlKCk7CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291cmNlUGF0dGVybi5o
IGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJjZVBhdHRlcm4u
aAppbmRleCA5ZTg2NDg2Li40MDQ5MjQyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291cmNlUGF0dGVybi5oCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VQYXR0ZXJuLmgKQEAgLTUyLDcgKzUyLDcg
QEAgcHVibGljOgogICAgIHZpcnR1YWwgdm9pZCByZW1vdmVDbGllbnRGcm9tQ2FjaGUoUmVuZGVy
T2JqZWN0KiwgYm9vbCBtYXJrRm9ySW52YWxpZGF0aW9uID0gdHJ1ZSk7CiAKICAgICB2aXJ0dWFs
IGJvb2wgYXBwbHlSZXNvdXJjZShSZW5kZXJPYmplY3QqLCBSZW5kZXJTdHlsZSosIEdyYXBoaWNz
Q29udGV4dComLCB1bnNpZ25lZCBzaG9ydCByZXNvdXJjZU1vZGUpOwotICAgIHZpcnR1YWwgdm9p
ZCBwb3N0QXBwbHlSZXNvdXJjZShSZW5kZXJPYmplY3QqLCBHcmFwaGljc0NvbnRleHQqJiwgdW5z
aWduZWQgc2hvcnQgcmVzb3VyY2VNb2RlLCBjb25zdCBQYXRoKik7CisgICAgdmlydHVhbCB2b2lk
IHBvc3RBcHBseVJlc291cmNlKFJlbmRlck9iamVjdCosIEdyYXBoaWNzQ29udGV4dComLCB1bnNp
Z25lZCBzaG9ydCByZXNvdXJjZU1vZGUsIGNvbnN0IFBhdGgqLCBjb25zdCBSZW5kZXJTVkdTaGFw
ZSopOwogICAgIHZpcnR1YWwgRmxvYXRSZWN0IHJlc291cmNlQm91bmRpbmdCb3goUmVuZGVyT2Jq
ZWN0KikgeyByZXR1cm4gRmxvYXRSZWN0KCk7IH0KIAogICAgIHZpcnR1YWwgUmVuZGVyU1ZHUmVz
b3VyY2VUeXBlIHJlc291cmNlVHlwZSgpIGNvbnN0IHsgcmV0dXJuIHNfcmVzb3VyY2VUeXBlOyB9
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291
cmNlU29saWRDb2xvci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNW
R1Jlc291cmNlU29saWRDb2xvci5jcHAKaW5kZXggNWJlMmFmNi4uNjNkZjc1MSAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJjZVNvbGlkQ29s
b3IuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVzb3Vy
Y2VTb2xpZENvbG9yLmNwcApAQCAtMjMsNiArMjMsNyBAQAogI2luY2x1ZGUgIlJlbmRlclNWR1Jl
c291cmNlU29saWRDb2xvci5oIgogCiAjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCisjaW5j
bHVkZSAiUmVuZGVyU1ZHU2hhcGUuaCIKICNpbmNsdWRlICJSZW5kZXJTdHlsZS5oIgogI2luY2x1
ZGUgIlNWR1JlbmRlclN1cHBvcnQuaCIKIApAQCAtNzQsMTYgKzc1LDIyIEBAIGJvb2wgUmVuZGVy
U1ZHUmVzb3VyY2VTb2xpZENvbG9yOjphcHBseVJlc291cmNlKFJlbmRlck9iamVjdCogb2JqZWN0
LCBSZW5kZXJTdHlsCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLXZvaWQgUmVuZGVyU1ZHUmVzb3Vy
Y2VTb2xpZENvbG9yOjpwb3N0QXBwbHlSZXNvdXJjZShSZW5kZXJPYmplY3QqLCBHcmFwaGljc0Nv
bnRleHQqJiBjb250ZXh0LCB1bnNpZ25lZCBzaG9ydCByZXNvdXJjZU1vZGUsIGNvbnN0IFBhdGgq
IHBhdGgpCit2b2lkIFJlbmRlclNWR1Jlc291cmNlU29saWRDb2xvcjo6cG9zdEFwcGx5UmVzb3Vy
Y2UoUmVuZGVyT2JqZWN0KiwgR3JhcGhpY3NDb250ZXh0KiYgY29udGV4dCwgdW5zaWduZWQgc2hv
cnQgcmVzb3VyY2VNb2RlLCBjb25zdCBQYXRoKiBwYXRoLCBjb25zdCBSZW5kZXJTVkdTaGFwZSog
c2hhcGUpCiB7CiAgICAgQVNTRVJUKGNvbnRleHQpOwogICAgIEFTU0VSVChyZXNvdXJjZU1vZGUg
IT0gQXBwbHlUb0RlZmF1bHRNb2RlKTsKIAotICAgIGlmIChwYXRoICYmICEocmVzb3VyY2VNb2Rl
ICYgQXBwbHlUb1RleHRNb2RlKSkgewotICAgICAgICBpZiAocmVzb3VyY2VNb2RlICYgQXBwbHlU
b0ZpbGxNb2RlKQorICAgIGlmIChyZXNvdXJjZU1vZGUgJiBBcHBseVRvRmlsbE1vZGUpIHsKKyAg
ICAgICAgaWYgKHBhdGgpCiAgICAgICAgICAgICBjb250ZXh0LT5maWxsUGF0aCgqcGF0aCk7Ci0g
ICAgICAgIGVsc2UgaWYgKHJlc291cmNlTW9kZSAmIEFwcGx5VG9TdHJva2VNb2RlKQorICAgICAg
ICBlbHNlIGlmIChzaGFwZSkKKyAgICAgICAgICAgIHNoYXBlLT5maWxsU2hhcGUoY29udGV4dCk7
CisgICAgfQorICAgIGlmIChyZXNvdXJjZU1vZGUgJiBBcHBseVRvU3Ryb2tlTW9kZSkgeworICAg
ICAgICBpZiAocGF0aCkKICAgICAgICAgICAgIGNvbnRleHQtPnN0cm9rZVBhdGgoKnBhdGgpOwor
ICAgICAgICBlbHNlIGlmIChzaGFwZSkKKyAgICAgICAgICAgIHNoYXBlLT5zdHJva2VTaGFwZShj
b250ZXh0KTsKICAgICB9CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VTb2xpZENvbG9yLmggYi9Tb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291cmNlU29saWRDb2xvci5oCmluZGV4IDAyY2ViMzEuLjhi
YmZkY2QgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZH
UmVzb3VyY2VTb2xpZENvbG9yLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9S
ZW5kZXJTVkdSZXNvdXJjZVNvbGlkQ29sb3IuaApAQCAtMzYsNyArMzYsNyBAQCBwdWJsaWM6CiAg
ICAgdmlydHVhbCB2b2lkIHJlbW92ZUNsaWVudEZyb21DYWNoZShSZW5kZXJPYmplY3QqLCBib29s
ID0gdHJ1ZSkgeyB9CiAKICAgICB2aXJ0dWFsIGJvb2wgYXBwbHlSZXNvdXJjZShSZW5kZXJPYmpl
Y3QqLCBSZW5kZXJTdHlsZSosIEdyYXBoaWNzQ29udGV4dComLCB1bnNpZ25lZCBzaG9ydCByZXNv
dXJjZU1vZGUpOwotICAgIHZpcnR1YWwgdm9pZCBwb3N0QXBwbHlSZXNvdXJjZShSZW5kZXJPYmpl
Y3QqLCBHcmFwaGljc0NvbnRleHQqJiwgdW5zaWduZWQgc2hvcnQgcmVzb3VyY2VNb2RlLCBjb25z
dCBQYXRoKik7CisgICAgdmlydHVhbCB2b2lkIHBvc3RBcHBseVJlc291cmNlKFJlbmRlck9iamVj
dCosIEdyYXBoaWNzQ29udGV4dComLCB1bnNpZ25lZCBzaG9ydCByZXNvdXJjZU1vZGUsIGNvbnN0
IFBhdGgqLCBjb25zdCBSZW5kZXJTVkdTaGFwZSopOwogICAgIHZpcnR1YWwgRmxvYXRSZWN0IHJl
c291cmNlQm91bmRpbmdCb3goUmVuZGVyT2JqZWN0KikgeyByZXR1cm4gRmxvYXRSZWN0KCk7IH0K
IAogICAgIHZpcnR1YWwgUmVuZGVyU1ZHUmVzb3VyY2VUeXBlIHJlc291cmNlVHlwZSgpIGNvbnN0
IHsgcmV0dXJuIHNfcmVzb3VyY2VUeXBlOyB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jvb3QuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L3N2Zy9SZW5kZXJTVkdSb290LmNwcAppbmRleCA3ZDQxMWRhLi44NmI5MmQ4IDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jvb3QuY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUm9vdC5jcHAKQEAgLTI1Myw3ICsy
NTMsNiBAQCB2b2lkIFJlbmRlclNWR1Jvb3Q6OnBhaW50KFBhaW50SW5mbyYgcGFpbnRJbmZvLCBj
b25zdCBMYXlvdXRQb2ludCYgcGFpbnRPZmZzZXQpCiB7CiAgICAgaWYgKHBhaW50SW5mby5jb250
ZXh0LT5wYWludGluZ0Rpc2FibGVkKCkpCiAgICAgICAgIHJldHVybjsKLQogICAgIGJvb2wgaXNW
aXNpYmxlID0gc3R5bGUoKS0+dmlzaWJpbGl0eSgpID09IFZJU0lCTEU7CiAgICAgTGF5b3V0UG9p
bnQgYm9yZGVyQm94T3JpZ2luSW5Db250YWluZXIgPSBwYWludE9mZnNldCArIHBhcmVudE9yaWdp
blRvQm9yZGVyQm94KCk7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9z
dmcvUmVuZGVyU1ZHU2hhcGUuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5k
ZXJTVkdTaGFwZS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODBkZDc2
OAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVy
U1ZHU2hhcGUuY3BwCkBAIC0wLDAgKzEsNDQ2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA0
LCAyMDA1LCAyMDA3IE5pa29sYXMgWmltbWVybWFubiA8emltbWVybWFubkBrZGUub3JnPgorICog
Q29weXJpZ2h0IChDKSAyMDA0LCAyMDA1LCAyMDA4IFJvYiBCdWlzIDxidWlzQGtkZS5vcmc+Cisg
KiBDb3B5cmlnaHQgKEMpIDIwMDUsIDIwMDcgRXJpYyBTZWlkZWwgPGVyaWNAd2Via2l0Lm9yZz4K
KyAqIENvcHlyaWdodCAoQykgMjAwOSBHb29nbGUsIEluYy4KKyAqIENvcHlyaWdodCAoQykgMjAw
OSBEaXJrIFNjaHVsemUgPGtyaXRAd2Via2l0Lm9yZz4KKyAqIENvcHlyaWdodCAoQykgUmVzZWFy
Y2ggSW4gTW90aW9uIExpbWl0ZWQgMjAxMC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHly
aWdodCAoQykgMjAwOSBKZWZmIFNjaGlsbGVyIDxjb2RlZHJlYWRAZ21haWwuY29tPgorICogQ29w
eXJpZ2h0IChDKSAyMDExIFJlbmF0YSBIb2RvdmFuIDxyZW5pQHdlYmtpdC5vcmc+CisgKiBDb3B5
cmlnaHQgKEMpIDIwMTEgVW5pdmVyc2l0eSBvZiBTemVnZWQKKyAqCisgKiBUaGlzIGxpYnJhcnkg
aXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2Rp
ZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwor
ICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsg
ZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikg
YW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGlu
IHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FS
UkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRB
QklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUK
KyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoK
KyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdl
bmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhl
IGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2Fy
ZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICog
Qm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgor
CisjaWYgRU5BQkxFKFNWRykKKyNpbmNsdWRlICJSZW5kZXJTVkdTaGFwZS5oIgorCisjaW5jbHVk
ZSAiRmxvYXRQb2ludC5oIgorI2luY2x1ZGUgIkZsb2F0UXVhZC5oIgorI2luY2x1ZGUgIkdyYXBo
aWNzQ29udGV4dC5oIgorI2luY2x1ZGUgIkhpdFRlc3RSZXF1ZXN0LmgiCisjaW5jbHVkZSAiTGF5
b3V0UmVwYWludGVyLmgiCisjaW5jbHVkZSAiUG9pbnRlckV2ZW50c0hpdFJ1bGVzLmgiCisjaW5j
bHVkZSAiUmVuZGVyU1ZHQ29udGFpbmVyLmgiCisjaW5jbHVkZSAiUmVuZGVyU1ZHUmVzb3VyY2VN
YXJrZXIuaCIKKyNpbmNsdWRlICJSZW5kZXJTVkdSZXNvdXJjZVNvbGlkQ29sb3IuaCIKKyNpbmNs
dWRlICJTVkdQYXRoRWxlbWVudC5oIgorI2luY2x1ZGUgIlNWR1JlbmRlclN1cHBvcnQuaCIKKyNp
bmNsdWRlICJTVkdSZXNvdXJjZXMuaCIKKyNpbmNsdWRlICJTVkdTdHlsZWRUcmFuc2Zvcm1hYmxl
RWxlbWVudC5oIgorI2luY2x1ZGUgIlNWR1RyYW5zZm9ybUxpc3QuaCIKKyNpbmNsdWRlICJTVkdV
UklSZWZlcmVuY2UuaCIKKyNpbmNsdWRlICJTdHJva2VTdHlsZUFwcGxpZXIuaCIKKyNpbmNsdWRl
IDx3dGYvTWF0aEV4dHJhcy5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK1JlbmRlclNWR1No
YXBlOjpSZW5kZXJTVkdTaGFwZShTVkdTdHlsZWRUcmFuc2Zvcm1hYmxlRWxlbWVudCogbm9kZSkK
KyAgICA6IFJlbmRlclNWR01vZGVsT2JqZWN0KG5vZGUpCisgICAgLCBtX25lZWRzQm91bmRhcmll
c1VwZGF0ZShmYWxzZSkgLy8gRGVmYXVsdCBpcyBmYWxzZSwgdGhlIGNhY2hlZCByZWN0cyBhcmUg
ZW1wdHkgZnJvbSB0aGUgYmVnaW5uaW5nLgorICAgICwgbV9uZWVkc1NoYXBlVXBkYXRlKHRydWUp
IC8vIERlZmF1bHQgaXMgdHJ1ZSwgc28gd2UgZ3JhYiBhIFBhdGggb2JqZWN0IG9uY2UgZnJvbSBT
VkdTdHlsZWRUcmFuc2Zvcm1hYmxlRWxlbWVudC4KKyAgICAsIG1fbmVlZHNUcmFuc2Zvcm1VcGRh
dGUodHJ1ZSkgLy8gRGVmYXVsdCBpcyB0cnVlLCBzbyB3ZSBncmFiIGEgQWZmaW5lVHJhbnNmb3Jt
IG9iamVjdCBvbmNlIGZyb20gU1ZHU3R5bGVkVHJhbnNmb3JtYWJsZUVsZW1lbnQuCisgICAgLCBt
X2ZpbGxGYWxsYmFjayhmYWxzZSkKK3sKK30KKworUmVuZGVyU1ZHU2hhcGU6OlJlbmRlclNWR1No
YXBlKFNWR1N0eWxlZFRyYW5zZm9ybWFibGVFbGVtZW50KiBub2RlLCBQYXRoKiBwYXRoLCBib29s
IGlzRmlsbEZhbGxiYWNrKQorICAgIDogUmVuZGVyU1ZHTW9kZWxPYmplY3Qobm9kZSkKKyAgICAs
IG1fcGF0aChhZG9wdFB0cihwYXRoKSkKKyAgICAsIG1fZmlsbEZhbGxiYWNrKGlzRmlsbEZhbGxi
YWNrKQoreworfQorCitSZW5kZXJTVkdTaGFwZTo6flJlbmRlclNWR1NoYXBlKCkKK3sKK30KKwor
dm9pZCBSZW5kZXJTVkdTaGFwZTo6Y3JlYXRlU2hhcGUoKQoreworICAgIEFTU0VSVCghbV9wYXRo
KTsKKyAgICBtX3BhdGggPSBhZG9wdFB0cihuZXcgUGF0aCk7CisgICAgQVNTRVJUKGlzRW1wdHko
KSk7CisKKyAgICBTVkdQYXRoRWxlbWVudCogZWxlbWVudCA9IHN0YXRpY19jYXN0PFNWR1BhdGhF
bGVtZW50Kj4obm9kZSgpKTsKKyAgICBlbGVtZW50LT50b1BhdGhEYXRhKHBhdGgoKSk7Cit9CisK
K2Jvb2wgUmVuZGVyU1ZHU2hhcGU6OmlzRW1wdHkoKSBjb25zdAoreworICAgIHJldHVybiBtX3Bh
dGgtPmlzRW1wdHkoKTsKK30KKwordm9pZCBSZW5kZXJTVkdTaGFwZTo6ZmlsbFNoYXBlKEdyYXBo
aWNzQ29udGV4dCogY29udGV4dCkgY29uc3QKK3sKKyAgICBjb250ZXh0LT5maWxsUGF0aChwYXRo
KCkpOworfQorCitGbG9hdFJlY3QgUmVuZGVyU1ZHU2hhcGU6Om9iamVjdEJvdW5kaW5nQm94KCkg
Y29uc3QKK3sKKyAgICByZXR1cm4gbV9wYXRoLT5ib3VuZGluZ1JlY3QoKTsKK30KKworRmxvYXRS
ZWN0IFJlbmRlclNWR1NoYXBlOjpzdHJva2VCb3VuZGluZ0JveCgpIGNvbnN0Cit7CisgICAgQm91
bmRpbmdSZWN0U3Ryb2tlU3R5bGVBcHBsaWVyIHN0cm9rZVN0eWxlKHRoaXMsIHN0eWxlKCkpOwor
ICAgIHJldHVybiBtX3BhdGgtPnN0cm9rZUJvdW5kaW5nUmVjdCgmc3Ryb2tlU3R5bGUpOworfQor
Cit2b2lkIFJlbmRlclNWR1NoYXBlOjpzdHJva2VTaGFwZShHcmFwaGljc0NvbnRleHQqIGNvbnRl
eHQpIGNvbnN0Cit7CisgICAgY29udGV4dC0+c3Ryb2tlUGF0aChwYXRoKCkpOworfQorCitib29s
IFJlbmRlclNWR1NoYXBlOjpzaGFwZURlcGVuZGVudFN0cm9rZUNvbnRhaW5zKGNvbnN0IEZsb2F0
UG9pbnQmIHBvaW50KSBjb25zdAoreworICAgIEJvdW5kaW5nUmVjdFN0cm9rZVN0eWxlQXBwbGll
ciBhcHBsaWVyKHRoaXMsIHN0eWxlKCkpOworICAgIHJldHVybiBtX3BhdGgtPnN0cm9rZUNvbnRh
aW5zKCZhcHBsaWVyLCBwb2ludCk7Cit9CisKK2Jvb2wgUmVuZGVyU1ZHU2hhcGU6OnNoYXBlRGVw
ZW5kZW50RmlsbENvbnRhaW5zKGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50LCBjb25zdCBXaW5kUnVs
ZSBmaWxsUnVsZSkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9wYXRoLT5jb250YWlucyhwb2ludCwg
ZmlsbFJ1bGUpOworfQorCitib29sIFJlbmRlclNWR1NoYXBlOjpmaWxsQ29udGFpbnMoY29uc3Qg
RmxvYXRQb2ludCYgcG9pbnQsIGJvb2wgcmVxdWlyZXNGaWxsLCBjb25zdCBXaW5kUnVsZSBmaWxs
UnVsZSkKK3sKKyAgICBpZiAoIW1fZmlsbEJvdW5kaW5nQm94LmNvbnRhaW5zKHBvaW50KSkKKyAg
ICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgQ29sb3IgZmFsbGJhY2tDb2xvcjsKKyAgICBpZiAo
cmVxdWlyZXNGaWxsICYmICFSZW5kZXJTVkdSZXNvdXJjZTo6ZmlsbFBhaW50aW5nUmVzb3VyY2Uo
dGhpcywgc3R5bGUoKSwgZmFsbGJhY2tDb2xvcikpCisgICAgICAgIHJldHVybiBmYWxzZTsKKwor
ICAgIHJldHVybiBzaGFwZURlcGVuZGVudEZpbGxDb250YWlucyhwb2ludCwgZmlsbFJ1bGUpOwor
fQorCitib29sIFJlbmRlclNWR1NoYXBlOjpzdHJva2VDb250YWlucyhjb25zdCBGbG9hdFBvaW50
JiBwb2ludCwgYm9vbCByZXF1aXJlc1N0cm9rZSkKK3sKKyAgICBpZiAoIW1fc3Ryb2tlQW5kTWFy
a2VyQm91bmRpbmdCb3guY29udGFpbnMocG9pbnQpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisK
KyAgICBDb2xvciBmYWxsYmFja0NvbG9yOworICAgIGlmIChyZXF1aXJlc1N0cm9rZSAmJiAhUmVu
ZGVyU1ZHUmVzb3VyY2U6OnN0cm9rZVBhaW50aW5nUmVzb3VyY2UodGhpcywgc3R5bGUoKSwgZmFs
bGJhY2tDb2xvcikpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGlmIChzaG91bGRTdHJv
a2VaZXJvTGVuZ3RoU3VicGF0aCgpKQorICAgICAgICByZXR1cm4gemVyb0xlbmd0aFN1YnBhdGhS
ZWN0KCkuY29udGFpbnMocG9pbnQpOworCisgICAgY29uc3QgU1ZHUmVuZGVyU3R5bGUqIHN2Z1N0
eWxlID0gc3R5bGUoKS0+c3ZnU3R5bGUoKTsKKyAgICBpZiAoIXN2Z1N0eWxlLT5zdHJva2VEYXNo
QXJyYXkoKS5pc0VtcHR5KCkgfHwgc3ZnU3R5bGUtPnN0cm9rZU1pdGVyTGltaXQoKSAhPSBzdmdT
dHlsZS0+aW5pdGlhbFN0cm9rZU1pdGVyTGltaXQoKQorICAgICAgICB8fCBzdmdTdHlsZS0+am9p
blN0eWxlKCkgIT0gc3ZnU3R5bGUtPmluaXRpYWxKb2luU3R5bGUoKSB8fCBzdmdTdHlsZS0+Y2Fw
U3R5bGUoKSAhPSBzdmdTdHlsZS0+aW5pdGlhbENhcFN0eWxlKCkgfHwgc3RhdGljX2Nhc3Q8U1ZH
RWxlbWVudCo+KG5vZGUoKSktPmlzU3R5bGVkKCkpIHsKKyAgICAgICAgaWYgKCFtX3BhdGgpCisg
ICAgICAgICAgICBSZW5kZXJTVkdTaGFwZTo6Y3JlYXRlU2hhcGUoKTsKKyAgICAgICAgcmV0dXJu
IFJlbmRlclNWR1NoYXBlOjpzaGFwZURlcGVuZGVudFN0cm9rZUNvbnRhaW5zKHBvaW50KTsKKyAg
ICB9CisgICAgcmV0dXJuIHNoYXBlRGVwZW5kZW50U3Ryb2tlQ29udGFpbnMocG9pbnQpOworfQor
Cit2b2lkIFJlbmRlclNWR1NoYXBlOjpsYXlvdXQoKQoreworICAgIExheW91dFJlcGFpbnRlciBy
ZXBhaW50ZXIoKnRoaXMsIGNoZWNrRm9yUmVwYWludER1cmluZ0xheW91dCgpICYmIHNlbGZOZWVk
c0xheW91dCgpKTsKKyAgICBTVkdTdHlsZWRUcmFuc2Zvcm1hYmxlRWxlbWVudCogZWxlbWVudCA9
IHN0YXRpY19jYXN0PFNWR1N0eWxlZFRyYW5zZm9ybWFibGVFbGVtZW50Kj4obm9kZSgpKTsKKwor
ICAgIGJvb2wgdXBkYXRlQ2FjaGVkQm91bmRhcmllc0luUGFyZW50cyA9IGZhbHNlOworCisgICAg
Ym9vbCBuZWVkc1NoYXBlVXBkYXRlID0gbV9uZWVkc1NoYXBlVXBkYXRlOworICAgIGlmIChuZWVk
c1NoYXBlVXBkYXRlKSB7CisgICAgICAgIGNyZWF0ZVNoYXBlKCk7CisgICAgICAgIG1fbmVlZHNT
aGFwZVVwZGF0ZSA9IGZhbHNlOworICAgICAgICB1cGRhdGVDYWNoZWRCb3VuZGFyaWVzSW5QYXJl
bnRzID0gdHJ1ZTsKKyAgICB9CisKKyAgICBpZiAobV9uZWVkc1RyYW5zZm9ybVVwZGF0ZSkgewor
ICAgICAgICBtX2xvY2FsVHJhbnNmb3JtID0gZWxlbWVudC0+YW5pbWF0ZWRMb2NhbFRyYW5zZm9y
bSgpOworICAgICAgICBtX25lZWRzVHJhbnNmb3JtVXBkYXRlID0gZmFsc2U7CisgICAgICAgIHVw
ZGF0ZUNhY2hlZEJvdW5kYXJpZXNJblBhcmVudHMgPSB0cnVlOworICAgIH0KKworICAgIGlmICht
X25lZWRzQm91bmRhcmllc1VwZGF0ZSkgeworICAgICAgICB1cGRhdGVDYWNoZWRCb3VuZGFyaWVz
SW5QYXJlbnRzID0gdHJ1ZTsKKyAgICAgICAgc2V0SXNQYWludGluZ0ZhbGxiYWNrKGZhbHNlKTsK
KyAgICAgICAgY3JlYXRlU2hhcGUoKTsKKyAgICB9CisKKyAgICAvLyBJbnZhbGlkYXRlIGFsbCBy
ZXNvdXJjZXMgb2YgdGhpcyBjbGllbnQgaWYgb3VyIGxheW91dCBjaGFuZ2VkLgorICAgIGlmICht
X2V2ZXJIYWRMYXlvdXQgJiYgc2VsZk5lZWRzTGF5b3V0KCkpIHsKKyAgICAgICAgU1ZHUmVzb3Vy
Y2VzQ2FjaGU6OmNsaWVudExheW91dENoYW5nZWQodGhpcyk7CisgICAgICAgIG1fbWFya2VyTGF5
b3V0SW5mby5jbGVhcigpOworICAgIH0KKworICAgIC8vIEF0IHRoaXMgcG9pbnQgTGF5b3V0UmVw
YWludGVyIGFscmVhZHkgZ3JhYmJlZCB0aGUgb2xkIGJvdW5kcywKKyAgICAvLyByZWNhbGN1bGF0
ZSB0aGVtIG5vdyBzbyByZXBhaW50QWZ0ZXJMYXlvdXQoKSB1c2VzIHRoZSBuZXcgYm91bmRzLgor
ICAgIGlmIChuZWVkc1NoYXBlVXBkYXRlIHx8IG1fbmVlZHNCb3VuZGFyaWVzVXBkYXRlKSB7Cisg
ICAgICAgIHVwZGF0ZUNhY2hlZEJvdW5kYXJpZXMoKTsKKyAgICAgICAgbV9uZWVkc0JvdW5kYXJp
ZXNVcGRhdGUgPSBmYWxzZTsKKyAgICB9CisKKyAgICAvLyBJZiBvdXIgYm91bmRzIGNoYW5nZWQs
IG5vdGlmeSB0aGUgcGFyZW50cy4KKyAgICBpZiAodXBkYXRlQ2FjaGVkQm91bmRhcmllc0luUGFy
ZW50cykKKyAgICAgICAgUmVuZGVyU1ZHTW9kZWxPYmplY3Q6OnNldE5lZWRzQm91bmRhcmllc1Vw
ZGF0ZSgpOworCisgICAgcmVwYWludGVyLnJlcGFpbnRBZnRlckxheW91dCgpOworICAgIHNldE5l
ZWRzTGF5b3V0KGZhbHNlKTsKK30KKworYm9vbCBSZW5kZXJTVkdTaGFwZTo6c2hvdWxkU3Ryb2tl
WmVyb0xlbmd0aFN1YnBhdGgoKSBjb25zdAoreworICAgIC8vIFNwZWMoMTEuNCk6IEFueSB6ZXJv
IGxlbmd0aCBzdWJwYXRoIHNoYWxsIG5vdCBiZSBzdHJva2VkIGlmIHRoZSDigJhzdHJva2UtbGlu
ZWNhcOKAmSBwcm9wZXJ0eSBoYXMgYSB2YWx1ZSBvZiBidXR0CisgICAgLy8gYnV0IHNoYWxsIGJl
IHN0cm9rZWQgaWYgdGhlIOKAmHN0cm9rZS1saW5lY2Fw4oCZIHByb3BlcnR5IGhhcyBhIHZhbHVl
IG9mIHJvdW5kIG9yIHNxdWFyZQorICAgIHJldHVybiBzdHlsZSgpLT5zdmdTdHlsZSgpLT5oYXNT
dHJva2UoKSAmJiBzdHlsZSgpLT5zdmdTdHlsZSgpLT5jYXBTdHlsZSgpICE9IEJ1dHRDYXAgJiYg
IW1fZmlsbEJvdW5kaW5nQm94LndpZHRoKCkgJiYgIW1fZmlsbEJvdW5kaW5nQm94LmhlaWdodCgp
OworfQorCitGbG9hdFJlY3QgUmVuZGVyU1ZHU2hhcGU6Onplcm9MZW5ndGhTdWJwYXRoUmVjdCgp
IGNvbnN0Cit7CisgICAgZmxvYXQgc3Ryb2tlV2lkdGggPSB0aGlzLT5zdHJva2VXaWR0aCgpOwor
ICAgIHJldHVybiBGbG9hdFJlY3QobV9maWxsQm91bmRpbmdCb3gueCgpIC0gc3Ryb2tlV2lkdGgg
LyAyLCBtX2ZpbGxCb3VuZGluZ0JveC55KCkgLSBzdHJva2VXaWR0aCAvIDIsIHN0cm9rZVdpZHRo
LCBzdHJva2VXaWR0aCk7Cit9CisKK3ZvaWQgUmVuZGVyU1ZHU2hhcGU6OnNldHVwU3F1YXJlQ2Fw
UGF0aChQYXRoKiYgdXNlUGF0aCwgaW50JiBhcHBseU1vZGUpCit7CisgICAgLy8gU3BlYygxMS40
KTogQW55IHplcm8gbGVuZ3RoIHN1YnBhdGggc2hhbGwgbm90IGJlIHN0cm9rZWQgaWYgdGhlIOKA
mHN0cm9rZS1saW5lY2Fw4oCZIHByb3BlcnR5IGhhcyBhIHZhbHVlIG9mIGJ1dHQKKyAgICAvLyBi
dXQgc2hhbGwgYmUgc3Ryb2tlZCBpZiB0aGUg4oCYc3Ryb2tlLWxpbmVjYXDigJkgcHJvcGVydHkg
aGFzIGEgdmFsdWUgb2Ygcm91bmQgb3Igc3F1YXJlCisgICAgREVGSU5FX1NUQVRJQ19MT0NBTChQ
YXRoLCB0ZW1wUGF0aCwgKCkpOworCisgICAgYXBwbHlNb2RlID0gQXBwbHlUb0ZpbGxNb2RlOwor
ICAgIHVzZVBhdGggPSAmdGVtcFBhdGg7CisgICAgdXNlUGF0aC0+Y2xlYXIoKTsKKyAgICBpZiAo
c3R5bGUoKS0+c3ZnU3R5bGUoKS0+Y2FwU3R5bGUoKSA9PSBTcXVhcmVDYXApCisgICAgICAgIHVz
ZVBhdGgtPmFkZFJlY3QoemVyb0xlbmd0aFN1YnBhdGhSZWN0KCkpOworICAgIGVsc2UKKyAgICAg
ICAgdXNlUGF0aC0+YWRkRWxsaXBzZSh6ZXJvTGVuZ3RoU3VicGF0aFJlY3QoKSk7Cit9CisKK2Jv
b2wgUmVuZGVyU1ZHU2hhcGU6OnNldHVwTm9uU2NhbGluZ1N0cm9rZVBhdGgoUGF0aComIHVzZVBh
dGgsIEdyYXBoaWNzQ29udGV4dFN0YXRlU2F2ZXImIHN0YXRlU2F2ZXIpCit7CisgICAgREVGSU5F
X1NUQVRJQ19MT0NBTChQYXRoLCB0ZW1wUGF0aCwgKCkpOworCisgICAgU1ZHU3R5bGVkVHJhbnNm
b3JtYWJsZUVsZW1lbnQqIGVsZW1lbnQgPSBzdGF0aWNfY2FzdDxTVkdTdHlsZWRUcmFuc2Zvcm1h
YmxlRWxlbWVudCo+KG5vZGUoKSk7CisgICAgQWZmaW5lVHJhbnNmb3JtIG5vblNjYWxpbmdTdHJv
a2VUcmFuc2Zvcm0gPSBlbGVtZW50LT5nZXRTY3JlZW5DVE0oU1ZHTG9jYXRhYmxlOjpEaXNhbGxv
d1N0eWxlVXBkYXRlKTsKKyAgICBpZiAoIW5vblNjYWxpbmdTdHJva2VUcmFuc2Zvcm0uaXNJbnZl
cnRpYmxlKCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIHRlbXBQYXRoID0gKm1fcGF0
aDsKKyAgICB1c2VQYXRoID0gJnRlbXBQYXRoOworICAgIHRlbXBQYXRoLnRyYW5zZm9ybShub25T
Y2FsaW5nU3Ryb2tlVHJhbnNmb3JtKTsKKworICAgIHN0YXRlU2F2ZXIuc2F2ZSgpOworICAgIHN0
YXRlU2F2ZXIuY29udGV4dCgpLT5jb25jYXRDVE0obm9uU2NhbGluZ1N0cm9rZVRyYW5zZm9ybS5p
bnZlcnNlKCkpOworICAgIHJldHVybiB0cnVlOworfQorCit2b2lkIFJlbmRlclNWR1NoYXBlOjpm
aWxsQW5kU3Ryb2tlUGF0aChHcmFwaGljc0NvbnRleHQqIGNvbnRleHQpCit7CisgICAgUmVuZGVy
U3R5bGUqIHN0eWxlID0gdGhpcy0+c3R5bGUoKTsKKworICAgIENvbG9yIGZhbGxiYWNrQ29sb3I7
CisgICAgaWYgKFJlbmRlclNWR1Jlc291cmNlKiBmaWxsUGFpbnRpbmdSZXNvdXJjZSA9IFJlbmRl
clNWR1Jlc291cmNlOjpmaWxsUGFpbnRpbmdSZXNvdXJjZSh0aGlzLCBzdHlsZSwgZmFsbGJhY2tD
b2xvcikpIHsKKyAgICAgICAgaWYgKGZpbGxQYWludGluZ1Jlc291cmNlLT5hcHBseVJlc291cmNl
KHRoaXMsIHN0eWxlLCBjb250ZXh0LCBBcHBseVRvRmlsbE1vZGUpKQorICAgICAgICAgICAgZmls
bFBhaW50aW5nUmVzb3VyY2UtPnBvc3RBcHBseVJlc291cmNlKHRoaXMsIGNvbnRleHQsIEFwcGx5
VG9GaWxsTW9kZSwgMCwgdGhpcyk7CisgICAgICAgIGVsc2UgaWYgKGZhbGxiYWNrQ29sb3IuaXNW
YWxpZCgpKSB7CisgICAgICAgICAgICBSZW5kZXJTVkdSZXNvdXJjZVNvbGlkQ29sb3IqIGZhbGxi
YWNrUmVzb3VyY2UgPSBSZW5kZXJTVkdSZXNvdXJjZTo6c2hhcmVkU29saWRQYWludGluZ1Jlc291
cmNlKCk7CisgICAgICAgICAgICBmYWxsYmFja1Jlc291cmNlLT5zZXRDb2xvcihmYWxsYmFja0Nv
bG9yKTsKKyAgICAgICAgICAgIGlmIChmYWxsYmFja1Jlc291cmNlLT5hcHBseVJlc291cmNlKHRo
aXMsIHN0eWxlLCBjb250ZXh0LCBBcHBseVRvRmlsbE1vZGUpKQorICAgICAgICAgICAgICAgIGZh
bGxiYWNrUmVzb3VyY2UtPnBvc3RBcHBseVJlc291cmNlKHRoaXMsIGNvbnRleHQsIEFwcGx5VG9G
aWxsTW9kZSwgMCwgdGhpcyk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBmYWxsYmFja0NvbG9y
ID0gQ29sb3IoKTsKKyAgICBSZW5kZXJTVkdSZXNvdXJjZSogc3Ryb2tlUGFpbnRpbmdSZXNvdXJj
ZSA9IFJlbmRlclNWR1Jlc291cmNlOjpzdHJva2VQYWludGluZ1Jlc291cmNlKHRoaXMsIHN0eWxl
LCBmYWxsYmFja0NvbG9yKTsKKyAgICBpZiAoIXN0cm9rZVBhaW50aW5nUmVzb3VyY2UpCisgICAg
ICAgIHJldHVybjsKKworICAgIFBhdGgqIHVzZVBhdGggPSBtX3BhdGguZ2V0KCk7CisgICAgaW50
IGFwcGx5TW9kZSA9IEFwcGx5VG9TdHJva2VNb2RlOworCisgICAgYm9vbCBub25TY2FsaW5nU3Ry
b2tlID0gc3R5bGUtPnN2Z1N0eWxlKCktPnZlY3RvckVmZmVjdCgpID09IFZFX05PTl9TQ0FMSU5H
X1NUUk9LRTsKKyAgICBPd25QdHI8UGF0aD4gc2F2ZVBhdGg7CisKKyAgICBHcmFwaGljc0NvbnRl
eHRTdGF0ZVNhdmVyIHN0YXRlU2F2ZXIoKmNvbnRleHQsIGZhbHNlKTsKKworICAgIC8vIFNwZWMo
MTEuNCk6IEFueSB6ZXJvIGxlbmd0aCBzdWJwYXRoIHNoYWxsIG5vdCBiZSBzdHJva2VkIGlmIHRo
ZSDigJhzdHJva2UtbGluZWNhcOKAmSBwcm9wZXJ0eSBoYXMgYSB2YWx1ZSBvZiBidXR0CisgICAg
Ly8gYnV0IHNoYWxsIGJlIHN0cm9rZWQgaWYgdGhlIOKAmHN0cm9rZS1saW5lY2Fw4oCZIHByb3Bl
cnR5IGhhcyBhIHZhbHVlIG9mIHJvdW5kIG9yIHNxdWFyZQorICAgIC8vIEZJWE1FOiB0aGlzIGRv
ZXMgbm90IHdvcmsgZm9yIHplcm8tbGVuZ3RoIHN1YnBhdGhzLCBvbmx5IHdoZW4gdG90YWwgcGF0
aCBpcyB6ZXJvLWxlbmd0aAorICAgIGlmIChzaG91bGRTdHJva2VaZXJvTGVuZ3RoU3VicGF0aCgp
KSB7CisgICAgICAgIFJlbmRlclNWR1NoYXBlOjpjcmVhdGVTaGFwZSgpOworICAgICAgICBzZXR1
cFNxdWFyZUNhcFBhdGgodXNlUGF0aCwgYXBwbHlNb2RlKTsKKyAgICAgICAgc2V0SXNQYWludGlu
Z0ZhbGxiYWNrKHRydWUpOworICAgIH0gZWxzZSBpZiAobm9uU2NhbGluZ1N0cm9rZSkgeworICAg
ICAgICBpZiAoIXNldHVwTm9uU2NhbGluZ1N0cm9rZVBhdGgodXNlUGF0aCwgc3RhdGVTYXZlcikp
CisgICAgICAgICAgICByZXR1cm47CisgICAgfQorICAgIGlmIChzdHJva2VQYWludGluZ1Jlc291
cmNlLT5hcHBseVJlc291cmNlKHRoaXMsIHN0eWxlLCBjb250ZXh0LCBhcHBseU1vZGUpKSB7Cisg
ICAgICAgIHN0cm9rZVBhaW50aW5nUmVzb3VyY2UtPnBvc3RBcHBseVJlc291cmNlKHRoaXMsIGNv
bnRleHQsIGFwcGx5TW9kZSwgdXNlUGF0aCwgdGhpcyk7CisgICAgICAgIGlmIChzYXZlUGF0aCkK
KyAgICAgICAgICAgIG1fcGF0aCA9IHNhdmVQYXRoLnJlbGVhc2UoKTsKKyAgICAgICAgcmV0dXJu
OworICAgIH0KKyAgICBpZiAoIWZhbGxiYWNrQ29sb3IuaXNWYWxpZCgpKSB7CisgICAgICAgIGlm
IChzYXZlUGF0aCkKKyAgICAgICAgICAgIG1fcGF0aCA9IHNhdmVQYXRoLnJlbGVhc2UoKTsKKyAg
ICAgICAgcmV0dXJuOworICAgIH0KKyAgICBSZW5kZXJTVkdSZXNvdXJjZVNvbGlkQ29sb3IqIGZh
bGxiYWNrUmVzb3VyY2UgPSBSZW5kZXJTVkdSZXNvdXJjZTo6c2hhcmVkU29saWRQYWludGluZ1Jl
c291cmNlKCk7CisgICAgZmFsbGJhY2tSZXNvdXJjZS0+c2V0Q29sb3IoZmFsbGJhY2tDb2xvcik7
CisgICAgaWYgKGZhbGxiYWNrUmVzb3VyY2UtPmFwcGx5UmVzb3VyY2UodGhpcywgc3R5bGUsIGNv
bnRleHQsIGFwcGx5TW9kZSkpCisgICAgICAgIGZhbGxiYWNrUmVzb3VyY2UtPnBvc3RBcHBseVJl
c291cmNlKHRoaXMsIGNvbnRleHQsIGFwcGx5TW9kZSwgdXNlUGF0aCwgdGhpcyk7CisgICAgaWYg
KHNhdmVQYXRoKQorICAgICAgICBtX3BhdGggPSBzYXZlUGF0aC5yZWxlYXNlKCk7Cit9CisKK3Zv
aWQgUmVuZGVyU1ZHU2hhcGU6OnBhaW50KFBhaW50SW5mbyYgcGFpbnRJbmZvLCBjb25zdCBJbnRQ
b2ludCYpCit7CisgICAgaWYgKHBhaW50SW5mby5jb250ZXh0LT5wYWludGluZ0Rpc2FibGVkKCkg
fHwgc3R5bGUoKS0+dmlzaWJpbGl0eSgpID09IEhJRERFTiB8fCBpc0VtcHR5KCkpCisgICAgICAg
IHJldHVybjsKKyAgICBGbG9hdFJlY3QgYm91bmRpbmdCb3ggPSByZXBhaW50UmVjdEluTG9jYWxD
b29yZGluYXRlcygpOworICAgIGlmICghU1ZHUmVuZGVyU3VwcG9ydDo6cGFpbnRJbmZvSW50ZXJz
ZWN0c1JlcGFpbnRSZWN0KGJvdW5kaW5nQm94LCBtX2xvY2FsVHJhbnNmb3JtLCBwYWludEluZm8p
KQorICAgICAgICByZXR1cm47CisgICAgUGFpbnRJbmZvIGNoaWxkUGFpbnRJbmZvKHBhaW50SW5m
byk7CisgICAgYm9vbCBkcmF3c091dGxpbmUgPSBzdHlsZSgpLT5vdXRsaW5lV2lkdGgoKSAmJiAo
Y2hpbGRQYWludEluZm8ucGhhc2UgPT0gUGFpbnRQaGFzZU91dGxpbmUgfHwgY2hpbGRQYWludElu
Zm8ucGhhc2UgPT0gUGFpbnRQaGFzZVNlbGZPdXRsaW5lKTsKKyAgICBpZiAoZHJhd3NPdXRsaW5l
IHx8IGNoaWxkUGFpbnRJbmZvLnBoYXNlID09IFBhaW50UGhhc2VGb3JlZ3JvdW5kKSB7CisgICAg
ICAgIEdyYXBoaWNzQ29udGV4dFN0YXRlU2F2ZXIgc3RhdGVTYXZlcigqY2hpbGRQYWludEluZm8u
Y29udGV4dCk7CisgICAgICAgIGNoaWxkUGFpbnRJbmZvLmFwcGx5VHJhbnNmb3JtKG1fbG9jYWxU
cmFuc2Zvcm0pOworCisgICAgICAgIGlmIChjaGlsZFBhaW50SW5mby5waGFzZSA9PSBQYWludFBo
YXNlRm9yZWdyb3VuZCkgeworICAgICAgICAgICAgUGFpbnRJbmZvIHNhdmVkSW5mbyhjaGlsZFBh
aW50SW5mbyk7CisKKyAgICAgICAgICAgIGlmIChTVkdSZW5kZXJTdXBwb3J0OjpwcmVwYXJlVG9S
ZW5kZXJTVkdDb250ZW50KHRoaXMsIGNoaWxkUGFpbnRJbmZvKSkgeworICAgICAgICAgICAgICAg
IGNvbnN0IFNWR1JlbmRlclN0eWxlKiBzdmdTdHlsZSA9IHN0eWxlKCktPnN2Z1N0eWxlKCk7Cisg
ICAgICAgICAgICAgICAgaWYgKHN2Z1N0eWxlLT5zaGFwZVJlbmRlcmluZygpID09IFNSX0NSSVNQ
RURHRVMpCisgICAgICAgICAgICAgICAgICAgIGNoaWxkUGFpbnRJbmZvLmNvbnRleHQtPnNldFNo
b3VsZEFudGlhbGlhcyhmYWxzZSk7CisKKyAgICAgICAgICAgICAgICBmaWxsQW5kU3Ryb2tlUGF0
aChjaGlsZFBhaW50SW5mby5jb250ZXh0KTsKKworICAgICAgICAgICAgICAgIGlmIChzdmdTdHls
ZS0+aGFzTWFya2VycygpKQorICAgICAgICAgICAgICAgICAgICBtX21hcmtlckxheW91dEluZm8u
ZHJhd01hcmtlcnMoY2hpbGRQYWludEluZm8pOworICAgICAgICAgICAgfQorCisgICAgICAgICAg
ICBTVkdSZW5kZXJTdXBwb3J0OjpmaW5pc2hSZW5kZXJTVkdDb250ZW50KHRoaXMsIGNoaWxkUGFp
bnRJbmZvLCBzYXZlZEluZm8uY29udGV4dCk7CisgICAgICAgIH0KKworICAgICAgICBpZiAoZHJh
d3NPdXRsaW5lKQorICAgICAgICAgICAgcGFpbnRPdXRsaW5lKGNoaWxkUGFpbnRJbmZvLmNvbnRl
eHQsIEludFJlY3QoYm91bmRpbmdCb3gpKTsKKyAgICB9Cit9CisKKy8vIFRoaXMgbWV0aG9kIGlz
IGNhbGxlZCBmcm9tIGluc2lkZSBwYWludE91dGxpbmUoKSBzaW5jZSB3ZSBjYWxsIHBhaW50T3V0
bGluZSgpCisvLyB3aGlsZSB0cmFuc2Zvcm1lZCB0byBvdXIgY29vcmQgc3lzdGVtLCByZXR1cm4g
bG9jYWwgY29vcmRzCit2b2lkIFJlbmRlclNWR1NoYXBlOjphZGRGb2N1c1JpbmdSZWN0cyhWZWN0
b3I8TGF5b3V0UmVjdD4mIHJlY3RzLCBjb25zdCBMYXlvdXRQb2ludCYpCit7CisgICAgTGF5b3V0
UmVjdCByZWN0ID0gZW5jbG9zaW5nTGF5b3V0UmVjdChyZXBhaW50UmVjdEluTG9jYWxDb29yZGlu
YXRlcygpKTsKKyAgICBpZiAoIXJlY3QuaXNFbXB0eSgpKQorICAgICAgICByZWN0cy5hcHBlbmQo
cmVjdCk7Cit9CisKK2Jvb2wgUmVuZGVyU1ZHU2hhcGU6Om5vZGVBdEZsb2F0UG9pbnQoY29uc3Qg
SGl0VGVzdFJlcXVlc3QmIHJlcXVlc3QsIEhpdFRlc3RSZXN1bHQmIHJlc3VsdCwgY29uc3QgRmxv
YXRQb2ludCYgcG9pbnRJblBhcmVudCwgSGl0VGVzdEFjdGlvbiBoaXRUZXN0QWN0aW9uKQorewor
ICAgIC8vIFdlIG9ubHkgZHJhdyBpbiB0aGUgZm9yZ3JvdW5kIHBoYXNlLCBzbyB3ZSBvbmx5IGhp
dC10ZXN0IHRoZW4uCisgICAgaWYgKGhpdFRlc3RBY3Rpb24gIT0gSGl0VGVzdEZvcmVncm91bmQp
CisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIEZsb2F0UG9pbnQgbG9jYWxQb2ludCA9IG1f
bG9jYWxUcmFuc2Zvcm0uaW52ZXJzZSgpLm1hcFBvaW50KHBvaW50SW5QYXJlbnQpOworCisgICAg
aWYgKCFTVkdSZW5kZXJTdXBwb3J0Ojpwb2ludEluQ2xpcHBpbmdBcmVhKHRoaXMsIGxvY2FsUG9p
bnQpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBQb2ludGVyRXZlbnRzSGl0UnVsZXMg
aGl0UnVsZXMoUG9pbnRlckV2ZW50c0hpdFJ1bGVzOjpTVkdfUEFUSF9ISVRURVNUSU5HLCByZXF1
ZXN0LCBzdHlsZSgpLT5wb2ludGVyRXZlbnRzKCkpOworICAgIGJvb2wgaXNWaXNpYmxlID0gKHN0
eWxlKCktPnZpc2liaWxpdHkoKSA9PSBWSVNJQkxFKTsKKyAgICBpZiAoaXNWaXNpYmxlIHx8ICFo
aXRSdWxlcy5yZXF1aXJlVmlzaWJsZSkgeworICAgICAgICBjb25zdCBTVkdSZW5kZXJTdHlsZSog
c3ZnU3R5bGUgPSBzdHlsZSgpLT5zdmdTdHlsZSgpOworICAgICAgICBXaW5kUnVsZSBmaWxsUnVs
ZSA9IHN2Z1N0eWxlLT5maWxsUnVsZSgpOworICAgICAgICBpZiAocmVxdWVzdC5zdmdDbGlwQ29u
dGVudCgpKQorICAgICAgICAgICAgZmlsbFJ1bGUgPSBzdmdTdHlsZS0+Y2xpcFJ1bGUoKTsKKyAg
ICAgICAgaWYgKChoaXRSdWxlcy5jYW5IaXRTdHJva2UgJiYgKHN2Z1N0eWxlLT5oYXNTdHJva2Uo
KSB8fCAhaGl0UnVsZXMucmVxdWlyZVN0cm9rZSkgJiYgc3Ryb2tlQ29udGFpbnMobG9jYWxQb2lu
dCwgaGl0UnVsZXMucmVxdWlyZVN0cm9rZSkpCisgICAgICAgICAgICB8fCAoaGl0UnVsZXMuY2Fu
SGl0RmlsbCAmJiAoc3ZnU3R5bGUtPmhhc0ZpbGwoKSB8fCAhaGl0UnVsZXMucmVxdWlyZUZpbGwp
ICYmIGZpbGxDb250YWlucyhsb2NhbFBvaW50LCBoaXRSdWxlcy5yZXF1aXJlRmlsbCwgZmlsbFJ1
bGUpKSkgeworICAgICAgICAgICAgdXBkYXRlSGl0VGVzdFJlc3VsdChyZXN1bHQsIHJvdW5kZWRM
YXlvdXRQb2ludChsb2NhbFBvaW50KSk7CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAg
ICAgfQorICAgIH0KKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK0Zsb2F0UmVjdCBSZW5kZXJTVkdT
aGFwZTo6Y2FsY3VsYXRlTWFya2VyQm91bmRzSWZOZWVkZWQoKQoreworICAgIFNWR0VsZW1lbnQq
IHN2Z0VsZW1lbnQgPSBzdGF0aWNfY2FzdDxTVkdFbGVtZW50Kj4obm9kZSgpKTsKKyAgICBBU1NF
UlQoc3ZnRWxlbWVudCAmJiBzdmdFbGVtZW50LT5kb2N1bWVudCgpKTsKKyAgICBpZiAoIXN2Z0Vs
ZW1lbnQtPmlzU3R5bGVkKCkpCisgICAgICAgIHJldHVybiBGbG9hdFJlY3QoKTsKKworICAgIFNW
R1N0eWxlZEVsZW1lbnQqIHN0eWxlZEVsZW1lbnQgPSBzdGF0aWNfY2FzdDxTVkdTdHlsZWRFbGVt
ZW50Kj4oc3ZnRWxlbWVudCk7CisgICAgaWYgKCFzdHlsZWRFbGVtZW50LT5zdXBwb3J0c01hcmtl
cnMoKSkKKyAgICAgICAgcmV0dXJuIEZsb2F0UmVjdCgpOworCisgICAgQVNTRVJUKHN0eWxlKCkt
PnN2Z1N0eWxlKCktPmhhc01hcmtlcnMoKSk7CisKKyAgICBTVkdSZXNvdXJjZXMqIHJlc291cmNl
cyA9IFNWR1Jlc291cmNlc0NhY2hlOjpjYWNoZWRSZXNvdXJjZXNGb3JSZW5kZXJPYmplY3QodGhp
cyk7CisgICAgaWYgKCFyZXNvdXJjZXMpCisgICAgICAgIHJldHVybiBGbG9hdFJlY3QoKTsKKwor
ICAgIFJlbmRlclNWR1Jlc291cmNlTWFya2VyKiBtYXJrZXJTdGFydCA9IHJlc291cmNlcy0+bWFy
a2VyU3RhcnQoKTsKKyAgICBSZW5kZXJTVkdSZXNvdXJjZU1hcmtlciogbWFya2VyTWlkID0gcmVz
b3VyY2VzLT5tYXJrZXJNaWQoKTsKKyAgICBSZW5kZXJTVkdSZXNvdXJjZU1hcmtlciogbWFya2Vy
RW5kID0gcmVzb3VyY2VzLT5tYXJrZXJFbmQoKTsKKyAgICBpZiAoIW1hcmtlclN0YXJ0ICYmICFt
YXJrZXJNaWQgJiYgIW1hcmtlckVuZCkKKyAgICAgICAgcmV0dXJuIEZsb2F0UmVjdCgpOworCisg
ICAgcmV0dXJuIG1fbWFya2VyTGF5b3V0SW5mby5jYWxjdWxhdGVCb3VuZGFyaWVzKG1hcmtlclN0
YXJ0LCBtYXJrZXJNaWQsIG1hcmtlckVuZCwgc3Ryb2tlV2lkdGgoKSwgcGF0aCgpKTsKK30KKwor
dm9pZCBSZW5kZXJTVkdTaGFwZTo6dXBkYXRlQ2FjaGVkQm91bmRhcmllcygpCit7CisgICAgaWYg
KGlzRW1wdHkoKSkgeworICAgICAgICBtX2ZpbGxCb3VuZGluZ0JveCA9IEZsb2F0UmVjdCgpOwor
ICAgICAgICBtX3N0cm9rZUFuZE1hcmtlckJvdW5kaW5nQm94ID0gRmxvYXRSZWN0KCk7CisgICAg
ICAgIG1fcmVwYWludEJvdW5kaW5nQm94ID0gRmxvYXRSZWN0KCk7CisgICAgICAgIHJldHVybjsK
KyAgICB9CisKKyAgICAvLyBDYWNoZSBfdW5jbGlwcGVkXyBmaWxsIGJvdW5kaW5nIGJveCwgdXNl
ZCBmb3IgY2FsY3VsYXRpb25zIGluIHJlc291cmNlcworICAgIG1fZmlsbEJvdW5kaW5nQm94ID0g
b2JqZWN0Qm91bmRpbmdCb3goKTsKKworICAgIC8vIFNwZWMoMTEuNCk6IEFueSB6ZXJvIGxlbmd0
aCBzdWJwYXRoIHNoYWxsIG5vdCBiZSBzdHJva2VkIGlmIHRoZSDigJhzdHJva2UtbGluZWNhcOKA
mSBwcm9wZXJ0eSBoYXMgYSB2YWx1ZSBvZiBidXR0CisgICAgLy8gYnV0IHNoYWxsIGJlIHN0cm9r
ZWQgaWYgdGhlIOKAmHN0cm9rZS1saW5lY2Fw4oCZIHByb3BlcnR5IGhhcyBhIHZhbHVlIG9mIHJv
dW5kIG9yIHNxdWFyZQorICAgIGlmIChzaG91bGRTdHJva2VaZXJvTGVuZ3RoU3VicGF0aCgpKSB7
CisgICAgICAgIG1fc3Ryb2tlQW5kTWFya2VyQm91bmRpbmdCb3ggPSB6ZXJvTGVuZ3RoU3VicGF0
aFJlY3QoKTsKKyAgICAgICAgLy8gQ2FjaGUgc21hbGxlc3QgcG9zc2libGUgcmVwYWludCByZWN0
YW5nbGUKKyAgICAgICAgbV9yZXBhaW50Qm91bmRpbmdCb3ggPSBtX3N0cm9rZUFuZE1hcmtlckJv
dW5kaW5nQm94OworICAgICAgICBTVkdSZW5kZXJTdXBwb3J0OjppbnRlcnNlY3RSZXBhaW50UmVj
dFdpdGhSZXNvdXJjZXModGhpcywgbV9yZXBhaW50Qm91bmRpbmdCb3gpOworICAgICAgICByZXR1
cm47CisgICAgfQorICAgIC8vIENhY2hlIF91bmNsaXBwZWRfIHN0cm9rZSBib3VuZGluZyBib3gs
IHVzZWQgZm9yIGNhbGN1bGF0aW9ucyBpbiByZXNvdXJjZXMgKGluY2x1ZGVzIG1hcmtlciBib3Vu
ZGFyaWVzKQorICAgIG1fc3Ryb2tlQW5kTWFya2VyQm91bmRpbmdCb3ggPSBtX2ZpbGxCb3VuZGlu
Z0JveDsKKworICAgIGNvbnN0IFNWR1JlbmRlclN0eWxlKiBzdmdTdHlsZSA9IHN0eWxlKCktPnN2
Z1N0eWxlKCk7CisgICAgaWYgKHN2Z1N0eWxlLT5oYXNTdHJva2UoKSkKKyAgICAgICAgbV9zdHJv
a2VBbmRNYXJrZXJCb3VuZGluZ0JveC51bml0ZShzdHJva2VCb3VuZGluZ0JveCgpKTsKKworICAg
IGluZmxhdGVXaXRoTWFya2VyQm91bmRzKCk7CisKKyAgICAvLyBDYWNoZSBzbWFsbGVzdCBwb3Nz
aWJsZSByZXBhaW50IHJlY3RhbmdsZQorICAgIG1fcmVwYWludEJvdW5kaW5nQm94ID0gbV9zdHJv
a2VBbmRNYXJrZXJCb3VuZGluZ0JveDsKKyAgICBTVkdSZW5kZXJTdXBwb3J0OjppbnRlcnNlY3RS
ZXBhaW50UmVjdFdpdGhSZXNvdXJjZXModGhpcywgbV9yZXBhaW50Qm91bmRpbmdCb3gpOworfQor
CitmbG9hdCBSZW5kZXJTVkdTaGFwZTo6c3Ryb2tlV2lkdGgoKSBjb25zdAoreworICAgIFNWR0Vs
ZW1lbnQqIHN2Z0VsZW1lbnQgPSBzdGF0aWNfY2FzdDxTVkdFbGVtZW50Kj4obm9kZSgpKTsKKyAg
ICByZXR1cm4gc3R5bGUoKS0+c3ZnU3R5bGUoKS0+c3Ryb2tlV2lkdGgoKS52YWx1ZShzdmdFbGVt
ZW50KTsKK30KKworfQorCisjZW5kaWYgLy8gRU5BQkxFKFNWRykKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHU2hhcGUuaCBiL1NvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHU2hhcGUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAwMDAwMDAwLi5jYWE4Y2MyCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL3N2Zy9SZW5kZXJTVkdTaGFwZS5oCkBAIC0wLDAgKzEsMTYxIEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDA0LCAyMDA1LCAyMDA3IE5pa29sYXMgWmltbWVybWFubiA8emltbWVybWFu
bkBrZGUub3JnPgorICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1IFJvYiBCdWlzIDxidWlzQGtk
ZS5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDUgRXJpYyBTZWlkZWwgPGVyaWNAd2Via2l0Lm9y
Zz4KKyAqIENvcHlyaWdodCAoQykgMjAwNiBBcHBsZSBDb21wdXRlciwgSW5jCisgKiBDb3B5cmln
aHQgKEMpIDIwMDkgR29vZ2xlLCBJbmMuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgUmVuYXRhIEhv
ZG92YW4gPHJlbmlAd2Via2l0Lm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAxMSBVbml2ZXJzaXR5
IG9mIFN6ZWdlZAorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2Fu
IHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2Yg
dGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBi
eSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0
aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisg
KiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJl
IHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBp
bXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1Ymxp
YyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2Vp
dmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICog
YWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5v
dCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZy
YW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVT
QS4KKyAqLworCisjaWZuZGVmIFJlbmRlclNWR1NoYXBlX2gKKyNkZWZpbmUgUmVuZGVyU1ZHU2hh
cGVfaAorCisjaWYgRU5BQkxFKFNWRykKKyNpbmNsdWRlICJBZmZpbmVUcmFuc2Zvcm0uaCIKKyNp
bmNsdWRlICJGbG9hdFJlY3QuaCIKKyNpbmNsdWRlICJSZW5kZXJTVkdNb2RlbE9iamVjdC5oIgor
I2luY2x1ZGUgIlNWR01hcmtlckxheW91dEluZm8uaCIKKyNpbmNsdWRlICJTdHJva2VTdHlsZUFw
cGxpZXIuaCIKKyNpbmNsdWRlIDx3dGYvT3duUHRyLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsK
KworY2xhc3MgRmxvYXRQb2ludDsKK2NsYXNzIEdyYXBoaWNzQ29udGV4dFN0YXRlU2F2ZXI7Citj
bGFzcyBSZW5kZXJTVkdDb250YWluZXI7CitjbGFzcyBSZW5kZXJTVkdQYXRoOworY2xhc3MgU1ZH
U3R5bGVkVHJhbnNmb3JtYWJsZUVsZW1lbnQ7CisKK2NsYXNzIEJvdW5kaW5nUmVjdFN0cm9rZVN0
eWxlQXBwbGllciA6IHB1YmxpYyBTdHJva2VTdHlsZUFwcGxpZXIgeworcHVibGljOgorICAgIEJv
dW5kaW5nUmVjdFN0cm9rZVN0eWxlQXBwbGllcihjb25zdCBSZW5kZXJPYmplY3QqIG9iamVjdCwg
UmVuZGVyU3R5bGUqIHN0eWxlKQorICAgICAgICA6IG1fb2JqZWN0KG9iamVjdCkKKyAgICAgICAg
LCBtX3N0eWxlKHN0eWxlKQorICAgIHsKKyAgICAgICAgQVNTRVJUKHN0eWxlKTsKKyAgICAgICAg
QVNTRVJUKG9iamVjdCk7CisgICAgfQorCisgICAgdm9pZCBzdHJva2VTdHlsZShHcmFwaGljc0Nv
bnRleHQqIGNvbnRleHQpCisgICAgeworICAgICAgICBTVkdSZW5kZXJTdXBwb3J0OjphcHBseVN0
cm9rZVN0eWxlVG9Db250ZXh0KGNvbnRleHQsIG1fc3R5bGUsIG1fb2JqZWN0KTsKKyAgICB9CisK
K3ByaXZhdGU6CisgICAgY29uc3QgUmVuZGVyT2JqZWN0KiBtX29iamVjdDsKKyAgICBSZW5kZXJT
dHlsZSogbV9zdHlsZTsKK307CisKK2NsYXNzIFJlbmRlclNWR1NoYXBlIDogcHVibGljIFJlbmRl
clNWR01vZGVsT2JqZWN0IHsKK3B1YmxpYzoKKyAgICBleHBsaWNpdCBSZW5kZXJTVkdTaGFwZShT
VkdTdHlsZWRUcmFuc2Zvcm1hYmxlRWxlbWVudCopOworICAgIFJlbmRlclNWR1NoYXBlKFNWR1N0
eWxlZFRyYW5zZm9ybWFibGVFbGVtZW50KiwgUGF0aCosIGJvb2wpOworICAgIHZpcnR1YWwgflJl
bmRlclNWR1NoYXBlKCk7CisKKyAgICB2b2lkIHNldE5lZWRzU2hhcGVVcGRhdGUoKSB7IG1fbmVl
ZHNTaGFwZVVwZGF0ZSA9IHRydWU7IH0KKyAgICB2aXJ0dWFsIHZvaWQgc2V0TmVlZHNCb3VuZGFy
aWVzVXBkYXRlKCkgeyBtX25lZWRzQm91bmRhcmllc1VwZGF0ZSA9IHRydWU7IH0KKyAgICB2aXJ0
dWFsIHZvaWQgc2V0TmVlZHNUcmFuc2Zvcm1VcGRhdGUoKSB7IG1fbmVlZHNUcmFuc2Zvcm1VcGRh
dGUgPSB0cnVlOyB9CisgICAgdmlydHVhbCB2b2lkIGZpbGxTaGFwZShHcmFwaGljc0NvbnRleHQq
KSBjb25zdDsKKyAgICB2aXJ0dWFsIHZvaWQgc3Ryb2tlU2hhcGUoR3JhcGhpY3NDb250ZXh0Kikg
Y29uc3Q7CisgICAgYm9vbCBpc1BhaW50aW5nRmFsbGJhY2soKSBjb25zdCB7IHJldHVybiBtX2Zp
bGxGYWxsYmFjazsgfQorCisgICAgUGF0aCYgcGF0aCgpIGNvbnN0CisgICAgeworICAgICAgICBB
U1NFUlQobV9wYXRoKTsKKyAgICAgICAgcmV0dXJuICptX3BhdGg7CisgICAgfQorCitwcm90ZWN0
ZWQ6CisgICAgdmlydHVhbCB2b2lkIGNyZWF0ZVNoYXBlKCk7CisgICAgdmlydHVhbCBib29sIGlz
RW1wdHkoKSBjb25zdDsKKyAgICB2aXJ0dWFsIEZsb2F0UmVjdCBvYmplY3RCb3VuZGluZ0JveCgp
IGNvbnN0OworICAgIHZpcnR1YWwgRmxvYXRSZWN0IHN0cm9rZUJvdW5kaW5nQm94KCkgY29uc3Q7
CisgICAgdmlydHVhbCBib29sIHNoYXBlRGVwZW5kZW50U3Ryb2tlQ29udGFpbnMoY29uc3QgRmxv
YXRQb2ludCYpIGNvbnN0OworICAgIHZpcnR1YWwgYm9vbCBzaGFwZURlcGVuZGVudEZpbGxDb250
YWlucyhjb25zdCBGbG9hdFBvaW50JiwgY29uc3QgV2luZFJ1bGUpIGNvbnN0OworICAgIGZsb2F0
IHN0cm9rZVdpZHRoKCkgY29uc3Q7CisgICAgdm9pZCBzZXRJc1BhaW50aW5nRmFsbGJhY2soYm9v
bCBpc0ZhbGxiYWNrKSB7IG1fZmlsbEZhbGxiYWNrID0gaXNGYWxsYmFjazsgfQorICAgIEZsb2F0
UmVjdCBjYWxjdWxhdGVNYXJrZXJCb3VuZHNJZk5lZWRlZCgpOworICAgIHZvaWQgc2V0U3Ryb2tl
QW5kTWFya2VyQm91bmRpbmdCb3goRmxvYXRSZWN0IHJlY3QpIHsgbV9zdHJva2VBbmRNYXJrZXJC
b3VuZGluZ0JveCA9IHJlY3Q7IH0KKyAgICBGbG9hdFJlY3Qgc3Ryb2tlQW5kTWFya2VyQm91bmRp
bmdCb3goKSB7IHJldHVybiBtX3N0cm9rZUFuZE1hcmtlckJvdW5kaW5nQm94OyB9CisKKyAgICBi
b29sIGhhc1BhdGgoKSBjb25zdCB7IHJldHVybiBtX3BhdGguZ2V0KCk7IH0KKworcHJpdmF0ZToK
KyAgICAvLyBIaXQtZGV0ZWN0aW9uIHNlcGFyYXRlZCBmb3IgdGhlIGZpbGwgYW5kIHRoZSBzdHJv
a2UKKyAgICBib29sIGZpbGxDb250YWlucyhjb25zdCBGbG9hdFBvaW50JiwgYm9vbCByZXF1aXJl
c0ZpbGwgPSB0cnVlLCBjb25zdCBXaW5kUnVsZSBmaWxsUnVsZSA9IFJVTEVfTk9OWkVSTyk7Cisg
ICAgYm9vbCBzdHJva2VDb250YWlucyhjb25zdCBGbG9hdFBvaW50JiwgYm9vbCByZXF1aXJlc1N0
cm9rZSA9IHRydWUpOworCisgICAgdmlydHVhbCBGbG9hdFJlY3QgcmVwYWludFJlY3RJbkxvY2Fs
Q29vcmRpbmF0ZXMoKSBjb25zdCB7IHJldHVybiBtX3JlcGFpbnRCb3VuZGluZ0JveDsgfQorICAg
IHZpcnR1YWwgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiBsb2NhbFRvUGFyZW50VHJhbnNmb3JtKCkg
Y29uc3QgeyByZXR1cm4gbV9sb2NhbFRyYW5zZm9ybTsgfQorICAgIHZpcnR1YWwgQWZmaW5lVHJh
bnNmb3JtIGxvY2FsVHJhbnNmb3JtKCkgY29uc3QgeyByZXR1cm4gbV9sb2NhbFRyYW5zZm9ybTsg
fQorCisgICAgdmlydHVhbCBib29sIGlzU1ZHU2hhcGUoKSBjb25zdCB7IHJldHVybiB0cnVlOyB9
CisgICAgdmlydHVhbCBjb25zdCBjaGFyKiByZW5kZXJOYW1lKCkgY29uc3QgeyByZXR1cm4gIlJl
bmRlclNWR1NoYXBlIjsgfQorICAgIHZpcnR1YWwgYm9vbCBpc1JvdW5kZWRSZWN0KCkgeyByZXR1
cm4gZmFsc2U7IH0KKworICAgIHZpcnR1YWwgdm9pZCBsYXlvdXQoKTsKKyAgICB2aXJ0dWFsIHZv
aWQgcGFpbnQoUGFpbnRJbmZvJiwgY29uc3QgTGF5b3V0UG9pbnQmKTsKKyAgICB2aXJ0dWFsIHZv
aWQgYWRkRm9jdXNSaW5nUmVjdHMoVmVjdG9yPExheW91dFJlY3Q+JiwgY29uc3QgTGF5b3V0UG9p
bnQmKTsKKyAgICB2aXJ0dWFsIHZvaWQgaW5mbGF0ZVdpdGhNYXJrZXJCb3VuZHMoKSB7IH0KKwor
ICAgIHZpcnR1YWwgYm9vbCBub2RlQXRGbG9hdFBvaW50KGNvbnN0IEhpdFRlc3RSZXF1ZXN0Jiwg
SGl0VGVzdFJlc3VsdCYsIGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50SW5QYXJlbnQsIEhpdFRlc3RB
Y3Rpb24pOworCisgICAgdm9pZCB1cGRhdGVDYWNoZWRCb3VuZGFyaWVzKCk7CisKKyAgICB2b2lk
IHNldHVwU3F1YXJlQ2FwUGF0aChQYXRoKiYsIGludCYgYXBwbHlNb2RlKTsKKyAgICBib29sIHNl
dHVwTm9uU2NhbGluZ1N0cm9rZVBhdGgoUGF0aComLCBHcmFwaGljc0NvbnRleHRTdGF0ZVNhdmVy
Jik7CisgICAgYm9vbCBzaG91bGRTdHJva2VaZXJvTGVuZ3RoU3VicGF0aCgpIGNvbnN0OworICAg
IEZsb2F0UmVjdCB6ZXJvTGVuZ3RoU3VicGF0aFJlY3QoKSBjb25zdDsKKworICAgIHZvaWQgZmls
bEFuZFN0cm9rZVBhdGgoR3JhcGhpY3NDb250ZXh0Kik7CisKK3ByaXZhdGU6CisgICAgRmxvYXRS
ZWN0IG1fZmlsbEJvdW5kaW5nQm94OworICAgIEZsb2F0UmVjdCBtX3N0cm9rZUFuZE1hcmtlckJv
dW5kaW5nQm94OworICAgIEZsb2F0UmVjdCBtX3JlcGFpbnRCb3VuZGluZ0JveDsKKyAgICBTVkdN
YXJrZXJMYXlvdXRJbmZvIG1fbWFya2VyTGF5b3V0SW5mbzsKKyAgICBBZmZpbmVUcmFuc2Zvcm0g
bV9sb2NhbFRyYW5zZm9ybTsKKyAgICBPd25QdHI8UGF0aD4gbV9wYXRoOworCisgICAgYm9vbCBt
X25lZWRzQm91bmRhcmllc1VwZGF0ZSA6IDE7CisgICAgYm9vbCBtX25lZWRzU2hhcGVVcGRhdGUg
OiAxOworICAgIGJvb2wgbV9uZWVkc1RyYW5zZm9ybVVwZGF0ZSA6IDE7CisgICAgYm9vbCBtX2Zp
bGxGYWxsYmFjayA6IDE7CisgICAgYm9vbCBtX3N0cm9rZUNvbnRhaW5zRmFsbEJhY2sgOiAxOwor
fTsKKworaW5saW5lIFJlbmRlclNWR1NoYXBlKiB0b1JlbmRlclNWR1NoYXBlKFJlbmRlck9iamVj
dCogb2JqZWN0KQoreworICAgIEFTU0VSVCghb2JqZWN0IHx8IG9iamVjdC0+aXNTVkdTaGFwZSgp
KTsKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8UmVuZGVyU1ZHU2hhcGUqPihvYmplY3QpOworfQor
CitpbmxpbmUgY29uc3QgUmVuZGVyU1ZHU2hhcGUqIHRvUmVuZGVyU1ZHU2hhcGUoY29uc3QgUmVu
ZGVyT2JqZWN0KiBvYmplY3QpCit7CisgICAgQVNTRVJUKCFvYmplY3QgfHwgb2JqZWN0LT5pc1NW
R1NoYXBlKCkpOworICAgIHJldHVybiBzdGF0aWNfY2FzdDxjb25zdCBSZW5kZXJTVkdTaGFwZSo+
KG9iamVjdCk7Cit9CisKKy8vIFRoaXMgd2lsbCBjYXRjaCBhbnlvbmUgZG9pbmcgYW4gdW5uZWNl
c3NhcnkgY2FzdC4KK3ZvaWQgdG9SZW5kZXJTVkdTaGFwZShjb25zdCBSZW5kZXJTVkdTaGFwZSop
OworCit9CisKKyNlbmRpZiAvLyBFTkFCTEUoU1ZHKQorI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR0lubGluZVRleHRCb3guY3BwIGIvU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdJbmxpbmVUZXh0Qm94LmNwcAppbmRleCBjMWM1YWZhLi5l
OGMyYWY4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR0lubGlu
ZVRleHRCb3guY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHSW5saW5l
VGV4dEJveC5jcHAKQEAgLTM3Nyw3ICszNzcsNyBAQCB2b2lkIFNWR0lubGluZVRleHRCb3g6OnJl
bGVhc2VQYWludGluZ1Jlc291cmNlKEdyYXBoaWNzQ29udGV4dComIGNvbnRleHQsIGNvbnN0CiAg
ICAgUmVuZGVyT2JqZWN0KiBwYXJlbnRSZW5kZXJlciA9IHBhcmVudCgpLT5yZW5kZXJlcigpOwog
ICAgIEFTU0VSVChwYXJlbnRSZW5kZXJlcik7CiAKLSAgICBtX3BhaW50aW5nUmVzb3VyY2UtPnBv
c3RBcHBseVJlc291cmNlKHBhcmVudFJlbmRlcmVyLCBjb250ZXh0LCBtX3BhaW50aW5nUmVzb3Vy
Y2VNb2RlLCBwYXRoKTsKKyAgICBtX3BhaW50aW5nUmVzb3VyY2UtPnBvc3RBcHBseVJlc291cmNl
KHBhcmVudFJlbmRlcmVyLCBjb250ZXh0LCBtX3BhaW50aW5nUmVzb3VyY2VNb2RlLCBwYXRoLCAv
KlJlbmRlclNWR1NoYXBlKi8gMCk7CiAgICAgbV9wYWludGluZ1Jlc291cmNlID0gMDsKIH0KIApk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdSZW5kZXJTdXBwb3J0
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHUmVuZGVyU3VwcG9ydC5jcHAK
aW5kZXggMmJjZTZhMi4uMTQyZGNlNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL3N2Zy9TVkdSZW5kZXJTdXBwb3J0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvc3ZnL1NWR1JlbmRlclN1cHBvcnQuY3BwCkBAIC03OSw3ICs3OSw2IEBAIHZvaWQgU1ZHUmVu
ZGVyU3VwcG9ydDo6bWFwTG9jYWxUb0NvbnRhaW5lcihjb25zdCBSZW5kZXJPYmplY3QqIG9iamVj
dCwgUmVuZGVyQm94CiBib29sIFNWR1JlbmRlclN1cHBvcnQ6OnByZXBhcmVUb1JlbmRlclNWR0Nv
bnRlbnQoUmVuZGVyT2JqZWN0KiBvYmplY3QsIFBhaW50SW5mbyYgcGFpbnRJbmZvKQogewogICAg
IEFTU0VSVChvYmplY3QpOwotCiAgICAgUmVuZGVyU3R5bGUqIHN0eWxlID0gb2JqZWN0LT5zdHls
ZSgpOwogICAgIEFTU0VSVChzdHlsZSk7CiAKQEAgLTE1MSw3ICsxNTAsNyBAQCB2b2lkIFNWR1Jl
bmRlclN1cHBvcnQ6OmZpbmlzaFJlbmRlclNWR0NvbnRlbnQoUmVuZGVyT2JqZWN0KiBvYmplY3Qs
IFBhaW50SW5mbyYgcAogICAgIFNWR1Jlc291cmNlcyogcmVzb3VyY2VzID0gU1ZHUmVzb3VyY2Vz
Q2FjaGU6OmNhY2hlZFJlc291cmNlc0ZvclJlbmRlck9iamVjdChvYmplY3QpOwogICAgIGlmIChy
ZXNvdXJjZXMpIHsKICAgICAgICAgaWYgKFJlbmRlclNWR1Jlc291cmNlRmlsdGVyKiBmaWx0ZXIg
PSByZXNvdXJjZXMtPmZpbHRlcigpKSB7Ci0gICAgICAgICAgICBmaWx0ZXItPnBvc3RBcHBseVJl
c291cmNlKG9iamVjdCwgcGFpbnRJbmZvLmNvbnRleHQsIEFwcGx5VG9EZWZhdWx0TW9kZSwgLyog
cGF0aCAqLzApOworICAgICAgICAgICAgZmlsdGVyLT5wb3N0QXBwbHlSZXNvdXJjZShzdGF0aWNf
Y2FzdDxSZW5kZXJTVkdTaGFwZSo+KG9iamVjdCksIHBhaW50SW5mby5jb250ZXh0LCBBcHBseVRv
RGVmYXVsdE1vZGUsIDAsIDApOwogICAgICAgICAgICAgcGFpbnRJbmZvLmNvbnRleHQgPSBzYXZl
ZENvbnRleHQ7CiAgICAgICAgIH0KICAgICB9CkBAIC0yMjMsOSArMjIyLDkgQEAgdm9pZCBTVkdS
ZW5kZXJTdXBwb3J0OjpsYXlvdXRDaGlsZHJlbihSZW5kZXJPYmplY3QqIHN0YXJ0LCBib29sIHNl
bGZOZWVkc0xheW91dCkKICAgICAgICAgICAgIC8vIFdoZW4gc2VsZk5lZWRzTGF5b3V0IGlzIGZh
bHNlIGFuZCB0aGUgbGF5b3V0IHNpemUgY2hhbmdlZCwgd2UgaGF2ZSB0byBjaGVjayB3aGV0aGVy
IHRoaXMgY2hpbGQgdXNlcyByZWxhdGl2ZSBsZW5ndGhzCiAgICAgICAgICAgICBpZiAoU1ZHRWxl
bWVudCogZWxlbWVudCA9IGNoaWxkLT5ub2RlKCktPmlzU1ZHRWxlbWVudCgpID8gc3RhdGljX2Nh
c3Q8U1ZHRWxlbWVudCo+KGNoaWxkLT5ub2RlKCkpIDogMCkgewogICAgICAgICAgICAgICAgIGlm
IChlbGVtZW50LT5pc1N0eWxlZCgpICYmIHN0YXRpY19jYXN0PFNWR1N0eWxlZEVsZW1lbnQqPihl
bGVtZW50KS0+aGFzUmVsYXRpdmVMZW5ndGhzKCkpIHsKLSAgICAgICAgICAgICAgICAgICAgLy8g
V2hlbiB0aGUgbGF5b3V0IHNpemUgY2hhbmdlZCBhbmQgd2hlbiB1c2luZyByZWxhdGl2ZSB2YWx1
ZXMgdGVsbCB0aGUgUmVuZGVyU1ZHUGF0aCB0byB1cGRhdGUgaXRzIFBhdGggb2JqZWN0Ci0gICAg
ICAgICAgICAgICAgICAgIGlmIChjaGlsZC0+aXNTVkdQYXRoKCkpCi0gICAgICAgICAgICAgICAg
ICAgICAgICB0b1JlbmRlclNWR1BhdGgoY2hpbGQpLT5zZXROZWVkc1BhdGhVcGRhdGUoKTsKKyAg
ICAgICAgICAgICAgICAgICAgLy8gV2hlbiB0aGUgbGF5b3V0IHNpemUgY2hhbmdlZCBhbmQgd2hl
biB1c2luZyByZWxhdGl2ZSB2YWx1ZXMgdGVsbCB0aGUgUmVuZGVyU1ZHU2hhcGUgdG8gdXBkYXRl
IGl0cyBzaGFwZSBvYmplY3QKKyAgICAgICAgICAgICAgICAgICAgaWYgKGNoaWxkLT5pc1NWR1No
YXBlKCkpCisgICAgICAgICAgICAgICAgICAgICAgICB0b1JlbmRlclNWR1NoYXBlKGNoaWxkKS0+
c2V0TmVlZHNTaGFwZVVwZGF0ZSgpOwogCiAgICAgICAgICAgICAgICAgICAgIG5lZWRzTGF5b3V0
ID0gdHJ1ZTsKICAgICAgICAgICAgICAgICB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvc3ZnL1NWR1JlbmRlclRyZWVBc1RleHQuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL3N2Zy9TVkdSZW5kZXJUcmVlQXNUZXh0LmNwcAppbmRleCBhMTYyOTY5Li5kMWFkNzJh
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR1JlbmRlclRyZWVB
c1RleHQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHUmVuZGVyVHJl
ZUFzVGV4dC5jcHAKQEAgLTU1LDYgKzU1LDcgQEAKICNpbmNsdWRlICJSZW5kZXJTVkdSZXNvdXJj
ZVJhZGlhbEdyYWRpZW50LmgiCiAjaW5jbHVkZSAiUmVuZGVyU1ZHUmVzb3VyY2VTb2xpZENvbG9y
LmgiCiAjaW5jbHVkZSAiUmVuZGVyU1ZHUm9vdC5oIgorI2luY2x1ZGUgIlJlbmRlclNWR1NoYXBl
LmgiCiAjaW5jbHVkZSAiUmVuZGVyU1ZHVGV4dC5oIgogI2luY2x1ZGUgIlJlbmRlclRyZWVBc1Rl
eHQuaCIKICNpbmNsdWRlICJTVkdDaXJjbGVFbGVtZW50LmgiCkBAIC0yODksMTggKzI5MCwxOCBA
QCBzdGF0aWMgdm9pZCB3cml0ZVN0eWxlKFRleHRTdHJlYW0mIHRzLCBjb25zdCBSZW5kZXJPYmpl
Y3QmIG9iamVjdCkKICAgICAgICAgd3JpdGVOYW1lVmFsdWVQYWlyKHRzLCAidHJhbnNmb3JtIiwg
b2JqZWN0LmxvY2FsVHJhbnNmb3JtKCkpOwogICAgIHdyaXRlSWZOb3REZWZhdWx0KHRzLCAiaW1h
Z2UgcmVuZGVyaW5nIiwgc3R5bGUtPmltYWdlUmVuZGVyaW5nKCksIFJlbmRlclN0eWxlOjppbml0
aWFsSW1hZ2VSZW5kZXJpbmcoKSk7CiAgICAgd3JpdGVJZk5vdERlZmF1bHQodHMsICJvcGFjaXR5
Iiwgc3R5bGUtPm9wYWNpdHkoKSwgUmVuZGVyU3R5bGU6OmluaXRpYWxPcGFjaXR5KCkpOwotICAg
IGlmIChvYmplY3QuaXNTVkdQYXRoKCkpIHsKLSAgICAgICAgY29uc3QgUmVuZGVyU1ZHUGF0aCYg
cGF0aCA9IHN0YXRpY19jYXN0PGNvbnN0IFJlbmRlclNWR1BhdGgmPihvYmplY3QpOwotICAgICAg
ICBBU1NFUlQocGF0aC5ub2RlKCkpOwotICAgICAgICBBU1NFUlQocGF0aC5ub2RlKCktPmlzU1ZH
RWxlbWVudCgpKTsKKyAgICBpZiAob2JqZWN0LmlzU1ZHU2hhcGUoKSkgeworICAgICAgICBjb25z
dCBSZW5kZXJTVkdTaGFwZSYgc2hhcGUgPSBzdGF0aWNfY2FzdDxjb25zdCBSZW5kZXJTVkdTaGFw
ZSY+KG9iamVjdCk7CisgICAgICAgIEFTU0VSVChzaGFwZS5ub2RlKCkpOworICAgICAgICBBU1NF
UlQoc2hhcGUubm9kZSgpLT5pc1NWR0VsZW1lbnQoKSk7CiAKICAgICAgICAgQ29sb3IgZmFsbGJh
Y2tDb2xvcjsKLSAgICAgICAgaWYgKFJlbmRlclNWR1Jlc291cmNlKiBzdHJva2VQYWludGluZ1Jl
c291cmNlID0gUmVuZGVyU1ZHUmVzb3VyY2U6OnN0cm9rZVBhaW50aW5nUmVzb3VyY2UoY29uc3Rf
Y2FzdDxSZW5kZXJTVkdQYXRoKj4oJnBhdGgpLCBwYXRoLnN0eWxlKCksIGZhbGxiYWNrQ29sb3Ip
KSB7CisgICAgICAgIGlmIChSZW5kZXJTVkdSZXNvdXJjZSogc3Ryb2tlUGFpbnRpbmdSZXNvdXJj
ZSA9IFJlbmRlclNWR1Jlc291cmNlOjpzdHJva2VQYWludGluZ1Jlc291cmNlKGNvbnN0X2Nhc3Q8
UmVuZGVyU1ZHU2hhcGUqPigmc2hhcGUpLCBzaGFwZS5zdHlsZSgpLCBmYWxsYmFja0NvbG9yKSkg
ewogICAgICAgICAgICAgVGV4dFN0cmVhbVNlcGFyYXRvciBzKCIgIik7CiAgICAgICAgICAgICB0
cyA8PCAiIFtzdHJva2U9eyIgPDwgczsKICAgICAgICAgICAgIHdyaXRlU1ZHUGFpbnRpbmdSZXNv
dXJjZSh0cywgc3Ryb2tlUGFpbnRpbmdSZXNvdXJjZSk7CiAKLSAgICAgICAgICAgIFNWR0VsZW1l
bnQqIGVsZW1lbnQgPSBzdGF0aWNfY2FzdDxTVkdFbGVtZW50Kj4ocGF0aC5ub2RlKCkpOworICAg
ICAgICAgICAgU1ZHRWxlbWVudCogZWxlbWVudCA9IHN0YXRpY19jYXN0PFNWR0VsZW1lbnQqPihz
aGFwZS5ub2RlKCkpOwogICAgICAgICAgICAgZG91YmxlIGRhc2hPZmZzZXQgPSBzdmdTdHlsZS0+
c3Ryb2tlRGFzaE9mZnNldCgpLnZhbHVlKGVsZW1lbnQpOwogICAgICAgICAgICAgZG91YmxlIHN0
cm9rZVdpZHRoID0gc3ZnU3R5bGUtPnN0cm9rZVdpZHRoKCkudmFsdWUoZWxlbWVudCk7CiAgICAg
ICAgICAgICBjb25zdCBWZWN0b3I8U1ZHTGVuZ3RoPiYgZGFzaGVzID0gc3ZnU3R5bGUtPnN0cm9r
ZURhc2hBcnJheSgpOwpAQCAtMzIyLDcgKzMyMyw3IEBAIHN0YXRpYyB2b2lkIHdyaXRlU3R5bGUo
VGV4dFN0cmVhbSYgdHMsIGNvbnN0IFJlbmRlck9iamVjdCYgb2JqZWN0KQogICAgICAgICAgICAg
dHMgPDwgIn1dIjsKICAgICAgICAgfQogCi0gICAgICAgIGlmIChSZW5kZXJTVkdSZXNvdXJjZSog
ZmlsbFBhaW50aW5nUmVzb3VyY2UgPSBSZW5kZXJTVkdSZXNvdXJjZTo6ZmlsbFBhaW50aW5nUmVz
b3VyY2UoY29uc3RfY2FzdDxSZW5kZXJTVkdQYXRoKj4oJnBhdGgpLCBwYXRoLnN0eWxlKCksIGZh
bGxiYWNrQ29sb3IpKSB7CisgICAgICAgIGlmIChSZW5kZXJTVkdSZXNvdXJjZSogZmlsbFBhaW50
aW5nUmVzb3VyY2UgPSBSZW5kZXJTVkdSZXNvdXJjZTo6ZmlsbFBhaW50aW5nUmVzb3VyY2UoY29u
c3RfY2FzdDxSZW5kZXJTVkdTaGFwZSo+KCZzaGFwZSksIHNoYXBlLnN0eWxlKCksIGZhbGxiYWNr
Q29sb3IpKSB7CiAgICAgICAgICAgICBUZXh0U3RyZWFtU2VwYXJhdG9yIHMoIiAiKTsKICAgICAg
ICAgICAgIHRzIDw8ICIgW2ZpbGw9eyIgPDwgczsKICAgICAgICAgICAgIHdyaXRlU1ZHUGFpbnRp
bmdSZXNvdXJjZSh0cywgZmlsbFBhaW50aW5nUmVzb3VyY2UpOwpAQCAtMzQ2LDEyICszNDcsMTIg
QEAgc3RhdGljIFRleHRTdHJlYW0mIHdyaXRlUG9zaXRpb25BbmRTdHlsZShUZXh0U3RyZWFtJiB0
cywgY29uc3QgUmVuZGVyT2JqZWN0JiBvYmoKICAgICByZXR1cm4gdHM7CiB9CiAKLXN0YXRpYyBU
ZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJlYW0mIHRzLCBjb25zdCBSZW5kZXJTVkdQYXRo
JiBwYXRoKQorc3RhdGljIFRleHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYgdHMsIGNv
bnN0IFJlbmRlclNWR1NoYXBlJiBzaGFwZSkKIHsKLSAgICB3cml0ZVBvc2l0aW9uQW5kU3R5bGUo
dHMsIHBhdGgpOworICAgIHdyaXRlUG9zaXRpb25BbmRTdHlsZSh0cywgc2hhcGUpOwogCi0gICAg
QVNTRVJUKHBhdGgubm9kZSgpLT5pc1NWR0VsZW1lbnQoKSk7Ci0gICAgU1ZHRWxlbWVudCogc3Zn
RWxlbWVudCA9IHN0YXRpY19jYXN0PFNWR0VsZW1lbnQqPihwYXRoLm5vZGUoKSk7CisgICAgQVNT
RVJUKHNoYXBlLm5vZGUoKS0+aXNTVkdFbGVtZW50KCkpOworICAgIFNWR0VsZW1lbnQqIHN2Z0Vs
ZW1lbnQgPSBzdGF0aWNfY2FzdDxTVkdFbGVtZW50Kj4oc2hhcGUubm9kZSgpKTsKIAogICAgIGlm
IChzdmdFbGVtZW50LT5oYXNUYWdOYW1lKFNWR05hbWVzOjpyZWN0VGFnKSkgewogICAgICAgICBT
VkdSZWN0RWxlbWVudCogZWxlbWVudCA9IHN0YXRpY19jYXN0PFNWR1JlY3RFbGVtZW50Kj4oc3Zn
RWxlbWVudCk7CkBAIC02NTMsMTEgKzY1NCwxMSBAQCB2b2lkIHdyaXRlU1ZHSW1hZ2UoVGV4dFN0
cmVhbSYgdHMsIGNvbnN0IFJlbmRlclNWR0ltYWdlJiBpbWFnZSwgaW50IGluZGVudCkKICAgICB3
cml0ZVJlc291cmNlcyh0cywgaW1hZ2UsIGluZGVudCk7CiB9CiAKLXZvaWQgd3JpdGUoVGV4dFN0
cmVhbSYgdHMsIGNvbnN0IFJlbmRlclNWR1BhdGgmIHBhdGgsIGludCBpbmRlbnQpCit2b2lkIHdy
aXRlKFRleHRTdHJlYW0mIHRzLCBjb25zdCBSZW5kZXJTVkdTaGFwZSYgc2hhcGUsIGludCBpbmRl
bnQpCiB7Ci0gICAgd3JpdGVTdGFuZGFyZFByZWZpeCh0cywgcGF0aCwgaW5kZW50KTsKLSAgICB0
cyA8PCBwYXRoIDw8ICJcbiI7Ci0gICAgd3JpdGVSZXNvdXJjZXModHMsIHBhdGgsIGluZGVudCk7
CisgICAgd3JpdGVTdGFuZGFyZFByZWZpeCh0cywgc2hhcGUsIGluZGVudCk7CisgICAgdHMgPDwg
c2hhcGUgPDwgIlxuIjsKKyAgICB3cml0ZVJlc291cmNlcyh0cywgc2hhcGUsIGluZGVudCk7CiB9
CiAKIHZvaWQgd3JpdGVTVkdHcmFkaWVudFN0b3AoVGV4dFN0cmVhbSYgdHMsIGNvbnN0IFJlbmRl
clNWR0dyYWRpZW50U3RvcCYgc3RvcCwgaW50IGluZGVudCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHUmVuZGVyVHJlZUFzVGV4dC5oIGIvU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL3N2Zy9TVkdSZW5kZXJUcmVlQXNUZXh0LmgKaW5kZXggY2UwN2E1Yy4uMzU5
OGM4MyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdSZW5kZXJU
cmVlQXNUZXh0LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdSZW5kZXJU
cmVlQXNUZXh0LmgKQEAgLTQxLDE0ICs0MSwxNCBAQCBjbGFzcyBSZW5kZXJJbWFnZTsKIGNsYXNz
IFJlbmRlck9iamVjdDsKIGNsYXNzIFJlbmRlclNWR0dyYWRpZW50U3RvcDsKIGNsYXNzIFJlbmRl
clNWR0ltYWdlOwotY2xhc3MgUmVuZGVyU1ZHUGF0aDsKK2NsYXNzIFJlbmRlclNWR1NoYXBlOwog
Y2xhc3MgUmVuZGVyU1ZHUm9vdDsKIGNsYXNzIFJlbmRlclRleHQ7CiBjbGFzcyBBZmZpbmVUcmFu
c2Zvcm07CiBjbGFzcyBTVkdVbml0VHlwZXM7CiAKIC8vIGZ1bmN0aW9ucyB1c2VkIGJ5IHRoZSBt
YWluIFJlbmRlclRyZWVBc1RleHQgY29kZQotdm9pZCB3cml0ZShUZXh0U3RyZWFtJiwgY29uc3Qg
UmVuZGVyU1ZHUGF0aCYsIGludCBpbmRlbnQpOwordm9pZCB3cml0ZShUZXh0U3RyZWFtJiwgY29u
c3QgUmVuZGVyU1ZHU2hhcGUmLCBpbnQgaW5kZW50KTsKIHZvaWQgd3JpdGUoVGV4dFN0cmVhbSYs
IGNvbnN0IFJlbmRlclNWR1Jvb3QmLCBpbnQgaW5kZW50KTsKIHZvaWQgd3JpdGVTVkdHcmFkaWVu
dFN0b3AoVGV4dFN0cmVhbSYsIGNvbnN0IFJlbmRlclNWR0dyYWRpZW50U3RvcCYsIGludCBpbmRl
bnQpOwogdm9pZCB3cml0ZVNWR1Jlc291cmNlQ29udGFpbmVyKFRleHRTdHJlYW0mLCBjb25zdCBS
ZW5kZXJPYmplY3QmLCBpbnQgaW5kZW50KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9zdmcvU1ZHVGV4dFJ1blJlbmRlcmluZ0NvbnRleHQuY3BwIGIvU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL3N2Zy9TVkdUZXh0UnVuUmVuZGVyaW5nQ29udGV4dC5jcHAKaW5kZXggMzNh
Y2Y5Mi4uMjI0ZWI4NiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9T
VkdUZXh0UnVuUmVuZGVyaW5nQ29udGV4dC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL3N2Zy9TVkdUZXh0UnVuUmVuZGVyaW5nQ29udGV4dC5jcHAKQEAgLTE2MCw3ICsxNjAsNyBA
QCB2b2lkIFNWR1RleHRSdW5SZW5kZXJpbmdDb250ZXh0OjpkcmF3U1ZHR2x5cGhzKEdyYXBoaWNz
Q29udGV4dCogY29udGV4dCwgY29uc3QgVAogICAgICAgICAgICAgICAgIGNvbnN0IFJlbmRlclNW
R0lubGluZVRleHQqIHRleHRSZW5kZXJlciA9IHRvUmVuZGVyU1ZHSW5saW5lVGV4dChyZW5kZXJP
YmplY3QpOwogICAgICAgICAgICAgICAgIGNvbnRleHQtPnNldFN0cm9rZVRoaWNrbmVzcyhjb250
ZXh0LT5zdHJva2VUaGlja25lc3MoKSAqIHRleHRSZW5kZXJlci0+c2NhbGluZ0ZhY3RvcigpKTsK
ICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGFjdGl2ZVBhaW50aW5nUmVzb3VyY2UtPnBvc3RB
cHBseVJlc291cmNlKHBhcmVudFJlbmRlck9iamVjdCwgY29udGV4dCwgcmVzb3VyY2VNb2RlLCAm
Z2x5cGhQYXRoKTsKKyAgICAgICAgICAgIGFjdGl2ZVBhaW50aW5nUmVzb3VyY2UtPnBvc3RBcHBs
eVJlc291cmNlKHBhcmVudFJlbmRlck9iamVjdCwgY29udGV4dCwgcmVzb3VyY2VNb2RlLCAmZ2x5
cGhQYXRoLCAwKTsKICAgICAgICAgIH0KICAKICAgICAgICAgY29udGV4dC0+cmVzdG9yZSgpOwpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0NpcmNsZUVsZW1lbnQuY3BwIGIvU291
cmNlL1dlYkNvcmUvc3ZnL1NWR0NpcmNsZUVsZW1lbnQuY3BwCmluZGV4IDI4OGU1OGEuLmU1M2Qy
N2UgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdDaXJjbGVFbGVtZW50LmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHQ2lyY2xlRWxlbWVudC5jcHAKQEAgLTEyNCw3ICsx
MjQsNyBAQCB2b2lkIFNWR0NpcmNsZUVsZW1lbnQ6OnN2Z0F0dHJpYnV0ZUNoYW5nZWQoY29uc3Qg
UXVhbGlmaWVkTmFtZSYgYXR0ck5hbWUpCiAgICAgICAgIHJldHVybjsKIAogICAgIGlmIChpc0xl
bmd0aEF0dHJpYnV0ZSkgewotICAgICAgICByZW5kZXJlci0+c2V0TmVlZHNQYXRoVXBkYXRlKCk7
CisgICAgICAgIHJlbmRlcmVyLT5zZXROZWVkc1NoYXBlVXBkYXRlKCk7CiAgICAgICAgIFJlbmRl
clNWR1Jlc291cmNlOjptYXJrRm9yTGF5b3V0QW5kUGFyZW50UmVzb3VyY2VJbnZhbGlkYXRpb24o
cmVuZGVyZXIpOwogICAgICAgICByZXR1cm47CiAgICAgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvc3ZnL1NWR0VsbGlwc2VFbGVtZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdF
bGxpcHNlRWxlbWVudC5jcHAKaW5kZXggOWI5ZGE2OC4uNjE1OWUyYyAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvc3ZnL1NWR0VsbGlwc2VFbGVtZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9zdmcvU1ZHRWxsaXBzZUVsZW1lbnQuY3BwCkBAIC0xMjksNyArMTI5LDcgQEAgdm9pZCBTVkdF
bGxpcHNlRWxlbWVudDo6c3ZnQXR0cmlidXRlQ2hhbmdlZChjb25zdCBRdWFsaWZpZWROYW1lJiBh
dHRyTmFtZSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgaWYgKGlzTGVuZ3RoQXR0cmlidXRlKSB7
Ci0gICAgICAgIHJlbmRlcmVyLT5zZXROZWVkc1BhdGhVcGRhdGUoKTsKKyAgICAgICAgcmVuZGVy
ZXItPnNldE5lZWRzU2hhcGVVcGRhdGUoKTsKICAgICAgICAgUmVuZGVyU1ZHUmVzb3VyY2U6Om1h
cmtGb3JMYXlvdXRBbmRQYXJlbnRSZXNvdXJjZUludmFsaWRhdGlvbihyZW5kZXJlcik7CiAgICAg
ICAgIHJldHVybjsKICAgICB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHTGlu
ZUVsZW1lbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0xpbmVFbGVtZW50LmNwcAppbmRl
eCBjOWIyMTQ3Li5kMGQwODZlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHTGlu
ZUVsZW1lbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdMaW5lRWxlbWVudC5jcHAK
QEAgLTEyOSw3ICsxMjksNyBAQCB2b2lkIFNWR0xpbmVFbGVtZW50OjpzdmdBdHRyaWJ1dGVDaGFu
Z2VkKGNvbnN0IFF1YWxpZmllZE5hbWUmIGF0dHJOYW1lKQogICAgICAgICByZXR1cm47CiAKICAg
ICBpZiAoaXNMZW5ndGhBdHRyaWJ1dGUpIHsKLSAgICAgICAgcmVuZGVyZXItPnNldE5lZWRzUGF0
aFVwZGF0ZSgpOworICAgICAgICByZW5kZXJlci0+c2V0TmVlZHNTaGFwZVVwZGF0ZSgpOwogICAg
ICAgICBSZW5kZXJTVkdSZXNvdXJjZTo6bWFya0ZvckxheW91dEFuZFBhcmVudFJlc291cmNlSW52
YWxpZGF0aW9uKHJlbmRlcmVyKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdQYXRoRWxlbWVudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9z
dmcvU1ZHUGF0aEVsZW1lbnQuY3BwCmluZGV4IDRhZTY2MTMuLjI3YTA0MTggMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdQYXRoRWxlbWVudC5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvc3ZnL1NWR1BhdGhFbGVtZW50LmNwcApAQCAtMjY5LDcgKzI2OSw3IEBAIHZvaWQgU1ZHUGF0
aEVsZW1lbnQ6OnN2Z0F0dHJpYnV0ZUNoYW5nZWQoY29uc3QgUXVhbGlmaWVkTmFtZSYgYXR0ck5h
bWUpCiAgICAgICAgIH0KIAogICAgICAgICBpZiAocmVuZGVyZXIpCi0gICAgICAgICAgICByZW5k
ZXJlci0+c2V0TmVlZHNQYXRoVXBkYXRlKCk7CisgICAgICAgICAgICByZW5kZXJlci0+c2V0TmVl
ZHNTaGFwZVVwZGF0ZSgpOwogICAgIH0KIAogICAgIGlmIChyZW5kZXJlcikKQEAgLTM1NSwxMCAr
MzU1LDE2IEBAIHZvaWQgU1ZHUGF0aEVsZW1lbnQ6OnBhdGhTZWdMaXN0Q2hhbmdlZChTVkdQYXRo
U2VnUm9sZSByb2xlKQogICAgIGlmICghcmVuZGVyZXIpCiAgICAgICAgIHJldHVybjsKIAotICAg
IHJlbmRlcmVyLT5zZXROZWVkc1BhdGhVcGRhdGUoKTsKKyAgICByZW5kZXJlci0+c2V0TmVlZHNT
aGFwZVVwZGF0ZSgpOwogICAgIFJlbmRlclNWR1Jlc291cmNlOjptYXJrRm9yTGF5b3V0QW5kUGFy
ZW50UmVzb3VyY2VJbnZhbGlkYXRpb24ocmVuZGVyZXIpOwogfQogCitSZW5kZXJPYmplY3QqIFNW
R1BhdGhFbGVtZW50OjpjcmVhdGVSZW5kZXJlcihSZW5kZXJBcmVuYSogYXJlbmEsIFJlbmRlclN0
eWxlKikKK3sKKyAgICAvLyBCeSBkZWZhdWx0LCBhbnkgc3ViY2xhc3MgaXMgZXhwZWN0ZWQgdG8g
ZG8gcGF0aC1iYXNlZCBkcmF3aW5nCisgICAgcmV0dXJuIG5ldyAoYXJlbmEpIFJlbmRlclNWR1Bh
dGgodGhpcyk7Cit9CisKIH0KIAogI2VuZGlmIC8vIEVOQUJMRShTVkcpCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9zdmcvU1ZHUGF0aEVsZW1lbnQuaCBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9T
VkdQYXRoRWxlbWVudC5oCmluZGV4IDFkMzdkMGUuLjU0YjhmZTIgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3N2Zy9TVkdQYXRoRWxlbWVudC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9T
VkdQYXRoRWxlbWVudC5oCkBAIC0xMjIsNiArMTIyLDggQEAgcHJpdmF0ZToKICAgICB2aXJ0dWFs
IHZvaWQgc3luY2hyb25pemVSZXF1aXJlZEV4dGVuc2lvbnMoKSB7IFNWR1Rlc3RzOjpzeW5jaHJv
bml6ZVJlcXVpcmVkRXh0ZW5zaW9ucyh0aGlzKTsgfQogICAgIHZpcnR1YWwgdm9pZCBzeW5jaHJv
bml6ZVN5c3RlbUxhbmd1YWdlKCkgeyBTVkdUZXN0czo6c3luY2hyb25pemVTeXN0ZW1MYW5ndWFn
ZSh0aGlzKTsgfQogCisgICAgUmVuZGVyT2JqZWN0KiBjcmVhdGVSZW5kZXJlcihSZW5kZXJBcmVu
YSosIFJlbmRlclN0eWxlKik7CisKIHByaXZhdGU6CiAgICAgT3duUHRyPFNWR1BhdGhCeXRlU3Ry
ZWFtPiBtX3BhdGhCeXRlU3RyZWFtOwogICAgIG11dGFibGUgU1ZHU3luY2hyb25pemFibGVBbmlt
YXRlZFByb3BlcnR5PFNWR1BhdGhTZWdMaXN0PiBtX3BhdGhTZWdMaXN0OwpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvc3ZnL1NWR1BvbHlFbGVtZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3N2
Zy9TVkdQb2x5RWxlbWVudC5jcHAKaW5kZXggNjZjNTI1OC4uYThiNjdjNyAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvc3ZnL1NWR1BvbHlFbGVtZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9zdmcvU1ZHUG9seUVsZW1lbnQuY3BwCkBAIC0xMjQsNyArMTI0LDcgQEAgdm9pZCBTVkdQb2x5
RWxlbWVudDo6c3ZnQXR0cmlidXRlQ2hhbmdlZChjb25zdCBRdWFsaWZpZWROYW1lJiBhdHRyTmFt
ZSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgaWYgKGF0dHJOYW1lID09IFNWR05hbWVzOjpwb2lu
dHNBdHRyKSB7Ci0gICAgICAgIHJlbmRlcmVyLT5zZXROZWVkc1BhdGhVcGRhdGUoKTsKKyAgICAg
ICAgcmVuZGVyZXItPnNldE5lZWRzU2hhcGVVcGRhdGUoKTsKICAgICAgICAgUmVuZGVyU1ZHUmVz
b3VyY2U6Om1hcmtGb3JMYXlvdXRBbmRQYXJlbnRSZXNvdXJjZUludmFsaWRhdGlvbihyZW5kZXJl
cik7CiAgICAgICAgIHJldHVybjsKICAgICB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9z
dmcvU1ZHUmVjdEVsZW1lbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvc3ZnL1NWR1JlY3RFbGVtZW50
LmNwcAppbmRleCA5MjA3NzQ1Li41ODBjNjM1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9z
dmcvU1ZHUmVjdEVsZW1lbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdSZWN0RWxl
bWVudC5jcHAKQEAgLTI1LDYgKzI1LDcgQEAKIAogI2luY2x1ZGUgIkF0dHJpYnV0ZS5oIgogI2lu
Y2x1ZGUgIlJlbmRlclNWR1BhdGguaCIKKyNpbmNsdWRlICJSZW5kZXJTVkdSZWN0LmgiCiAjaW5j
bHVkZSAiUmVuZGVyU1ZHUmVzb3VyY2UuaCIKICNpbmNsdWRlICJTVkdFbGVtZW50SW5zdGFuY2Uu
aCIKICNpbmNsdWRlICJTVkdMZW5ndGguaCIKQEAgLTMyLDYgKzMzLDggQEAKIAogbmFtZXNwYWNl
IFdlYkNvcmUgewogCitjbGFzcyBSZW5kZXJTVkdSZWN0OworCiAvLyBBbmltYXRlZCBwcm9wZXJ0
eSBkZWZpbml0aW9ucwogREVGSU5FX0FOSU1BVEVEX0xFTkdUSChTVkdSZWN0RWxlbWVudCwgU1ZH
TmFtZXM6OnhBdHRyLCBYLCB4KQogREVGSU5FX0FOSU1BVEVEX0xFTkdUSChTVkdSZWN0RWxlbWVu
dCwgU1ZHTmFtZXM6OnlBdHRyLCBZLCB5KQpAQCAtMTM3LDEyICsxNDAsMTIgQEAgdm9pZCBTVkdS
ZWN0RWxlbWVudDo6c3ZnQXR0cmlidXRlQ2hhbmdlZChjb25zdCBRdWFsaWZpZWROYW1lJiBhdHRy
TmFtZSkKICAgICBpZiAoU1ZHVGVzdHM6OmhhbmRsZUF0dHJpYnV0ZUNoYW5nZSh0aGlzLCBhdHRy
TmFtZSkpCiAgICAgICAgIHJldHVybjsKIAotICAgIFJlbmRlclNWR1BhdGgqIHJlbmRlcmVyID0g
c3RhdGljX2Nhc3Q8UmVuZGVyU1ZHUGF0aCo+KHRoaXMtPnJlbmRlcmVyKCkpOworICAgIFJlbmRl
clNWR1JlY3QqIHJlbmRlcmVyID0gc3RhdGljX2Nhc3Q8UmVuZGVyU1ZHUmVjdCo+KHRoaXMtPnJl
bmRlcmVyKCkpOwogICAgIGlmICghcmVuZGVyZXIpCiAgICAgICAgIHJldHVybjsKIAogICAgIGlm
IChpc0xlbmd0aEF0dHJpYnV0ZSkgewotICAgICAgICByZW5kZXJlci0+c2V0TmVlZHNQYXRoVXBk
YXRlKCk7CisgICAgICAgIHJlbmRlcmVyLT5zZXROZWVkc1NoYXBlVXBkYXRlKCk7CiAgICAgICAg
IFJlbmRlclNWR1Jlc291cmNlOjptYXJrRm9yTGF5b3V0QW5kUGFyZW50UmVzb3VyY2VJbnZhbGlk
YXRpb24ocmVuZGVyZXIpOwogICAgICAgICByZXR1cm47CiAgICAgfQpAQCAtMTk4LDYgKzIwMSwx
MSBAQCBib29sIFNWR1JlY3RFbGVtZW50OjpzZWxmSGFzUmVsYXRpdmVMZW5ndGhzKCkgY29uc3QK
ICAgICAgICAgfHwgcnkoKS5pc1JlbGF0aXZlKCk7CiB9CiAKK1JlbmRlck9iamVjdCogU1ZHUmVj
dEVsZW1lbnQ6OmNyZWF0ZVJlbmRlcmVyKFJlbmRlckFyZW5hKiBhcmVuYSwgUmVuZGVyU3R5bGUq
KQoreworICAgIHJldHVybiBuZXcgKGFyZW5hKSBSZW5kZXJTVkdSZWN0KHRoaXMpOworfQorCiB9
CiAKICNlbmRpZiAvLyBFTkFCTEUoU1ZHKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvc3Zn
L1NWR1JlY3RFbGVtZW50LmggYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHUmVjdEVsZW1lbnQuaApp
bmRleCA5OTQzN2YzLi45YmY2MDJmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZH
UmVjdEVsZW1lbnQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHUmVjdEVsZW1lbnQuaApA
QCAtNTIsNiArNTIsOCBAQCBwcml2YXRlOgogCiAgICAgdmlydHVhbCBib29sIHNlbGZIYXNSZWxh
dGl2ZUxlbmd0aHMoKSBjb25zdDsKIAorICAgIFJlbmRlck9iamVjdCogY3JlYXRlUmVuZGVyZXIo
UmVuZGVyQXJlbmEqLCBSZW5kZXJTdHlsZSopOworCiAgICAgQkVHSU5fREVDTEFSRV9BTklNQVRF
RF9QUk9QRVJUSUVTKFNWR1JlY3RFbGVtZW50KQogICAgICAgICBERUNMQVJFX0FOSU1BVEVEX0xF
TkdUSChYLCB4KQogICAgICAgICBERUNMQVJFX0FOSU1BVEVEX0xFTkdUSChZLCB5KQotLSAKMS43
LjUuNAoK
</data>
<flag name="commit-queue"
          id="109279"
          type_id="3"
          status="-"
          setter="rhodovan.u-szeged"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>111604</attachid>
            <date>2011-10-19 06:23:14 -0700</date>
            <delta_ts>2011-10-27 07:34:20 -0700</delta_ts>
            <desc>Proposed patch</desc>
            <filename>0001-shadow-fix-resource-up.patch</filename>
            <type>text/plain</type>
            <size>109493</size>
            <attacher name="Renata Hodovan">rhodovan.u-szeged</attacher>
            
              <data encoding="base64">RnJvbSBlNmJjNGZhZDkwNjgwYjAwYjAzYmI3YzllMTI3NDI2OGNhNDAzNjFiIE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBSZW5hdGEgSG9kb3ZhbiA8cmVuaUB3ZWJraXQub3JnPgpEYXRl
OiBXZWQsIDE5IE9jdCAyMDExIDE1OjA2OjUwICswMjAwClN1YmplY3Q6IFtQQVRDSF0gc2hhZG93
IGZpeCByZXNvdXJjZSB1cAoKLS0tCiBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICB8ICAgMTQgKwogLi4uL3BvaW50ZXItZXZlbnRzLW9uLXJvdW5kZWQt
cmVjdC1leHBlY3RlZC50eHQgICAgfCAgICAxICsKIC4uLi9jdXN0b20vcG9pbnRlci1ldmVudHMt
b24tcm91bmRlZC1yZWN0LnhodG1sICAgIHwgICA2NiArKysKIC4uLmVudHMtd2l0aC1saW5lY2Fw
cy1hbmQtbWl0ZXJsaW1pdHMtZXhwZWN0ZWQudHh0IHwgICAgMSArCiAuLi5udGVyLWV2ZW50cy13
aXRoLWxpbmVjYXBzLWFuZC1taXRlcmxpbWl0cy54aHRtbCB8ICAgNjggKysrCiBTb3VyY2UvV2Vi
Q29yZS9DTWFrZUxpc3RzLnR4dCAgICAgICAgICAgICAgICAgICAgICB8ICAgIDIgKwogU291cmNl
L1dlYkNvcmUvQ2hhbmdlTG9nICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgMTU4ICsrKysr
KysKIFNvdXJjZS9XZWJDb3JlL0dOVW1ha2VmaWxlLmxpc3QuYW0gICAgICAgICAgICAgICAgIHwg
ICAgNCArCiBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkgICAgICAgICAgICAgICAgICAgICAg
ICB8ICAgIDQgKwogU291cmNlL1dlYkNvcmUvV2ViQ29yZS5wcm8gICAgICAgICAgICAgICAgICAg
ICAgICAgfCAgICA0ICsKIFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUudmNwcm9qL1dlYkNvcmUudmNw
cm9qICAgICAgIHwgIDExMiArKysrKwogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
RmxvYXRSZWN0LmNwcCAgICAgfCAgICA3ICsKIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL0Zsb2F0UmVjdC5oICAgICAgIHwgICAgNyArLQogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlck9iamVjdC5oICAgICAgICAgICAgfCAgICAyICsKIFNvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9SZW5kZXJUcmVlQXNUZXh0LmNwcCAgICAgIHwgICAgNCArLQogU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdBbGxJbk9uZS5jcHAgfCAgICAyICsKIC4uLi9XZWJDb3Jl
L3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHTW9kZWxPYmplY3QuY3BwIHwgICAgMiArLQogU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdQYXRoLmNwcCAgICAgfCAgMzU1ICstLS0t
LS0tLS0tLS0tLS0KIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUGF0aC5o
ICAgICAgIHwgICA3MiArLS0tCiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNW
R1JlY3QuY3BwICAgICB8ICAxMzkgKysrKysrCiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3Zn
L1JlbmRlclNWR1JlY3QuaCAgICAgICB8ICAgNjQgKysrCiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvc3ZnL1JlbmRlclNWR1Jlc291cmNlLmggICB8ICAgIDMgKy0KIC4uLi9yZW5kZXJpbmcvc3Zn
L1JlbmRlclNWR1Jlc291cmNlQ2xpcHBlci5jcHAgICAgIHwgICAgNiArLQogLi4uL3JlbmRlcmlu
Zy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VDb250YWluZXIuY3BwICAgfCAgICAyICstCiAuLi4vcmVu
ZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJjZUZpbHRlci5jcHAgICAgICB8ICAgIDQgKy0KIC4u
Li9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291cmNlRmlsdGVyLmggICAgICAgIHwgICAgMiAr
LQogLi4uL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VHcmFkaWVudC5jcHAgICAgfCAg
IDIxICstCiAuLi4vcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJjZUdyYWRpZW50LmggICAg
ICB8ICAgIDIgKy0KIC4uLi9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291cmNlUGF0dGVybi5j
cHAgICAgIHwgICAxNCArLQogLi4uL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VQYXR0
ZXJuLmggICAgICAgfCAgICAyICstCiAuLi4vcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJj
ZVNvbGlkQ29sb3IuY3BwICB8ICAgMTUgKy0KIC4uLi9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jl
c291cmNlU29saWRDb2xvci5oICAgIHwgICAgMiArLQogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L3N2Zy9SZW5kZXJTVkdSb290LmNwcCAgICAgfCAgICAxIC0KIFNvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9zdmcvUmVuZGVyU1ZHU2hhcGUuY3BwICAgIHwgIDQ0NiArKysrKysrKysrKysrKysrKysr
KwogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdTaGFwZS5oICAgICAgfCAg
MTYxICsrKysrKysKIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHSW5saW5lVGV4dEJv
eC5jcHAgIHwgICAgMiArLQogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdSZW5kZXJT
dXBwb3J0LmNwcCAgfCAgICA5ICstCiAuLi4vV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR1JlbmRl
clRyZWVBc1RleHQuY3BwICB8ICAgMzEgKy0KIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcv
U1ZHUmVuZGVyVHJlZUFzVGV4dC5oIHwgICAgNCArLQogLi4uL3JlbmRlcmluZy9zdmcvU1ZHVGV4
dFJ1blJlbmRlcmluZ0NvbnRleHQuY3BwICAgfCAgICAyICstCiBTb3VyY2UvV2ViQ29yZS9zdmcv
U1ZHQ2lyY2xlRWxlbWVudC5jcHAgICAgICAgICAgICB8ICAgIDIgKy0KIFNvdXJjZS9XZWJDb3Jl
L3N2Zy9TVkdFbGxpcHNlRWxlbWVudC5jcHAgICAgICAgICAgIHwgICAgMiArLQogU291cmNlL1dl
YkNvcmUvc3ZnL1NWR0xpbmVFbGVtZW50LmNwcCAgICAgICAgICAgICAgfCAgICAyICstCiBTb3Vy
Y2UvV2ViQ29yZS9zdmcvU1ZHUGF0aEVsZW1lbnQuY3BwICAgICAgICAgICAgICB8ICAgMTAgKy0K
IFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdQYXRoRWxlbWVudC5oICAgICAgICAgICAgICAgIHwgICAg
MiArCiBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHUG9seUVsZW1lbnQuY3BwICAgICAgICAgICAgICB8
ICAgIDIgKy0KIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdSZWN0RWxlbWVudC5jcHAgICAgICAgICAg
ICAgIHwgICAxMiArLQogU291cmNlL1dlYkNvcmUvc3ZnL1NWR1JlY3RFbGVtZW50LmggICAgICAg
ICAgICAgICAgfCAgICAyICsKIDQ4IGZpbGVzIGNoYW5nZWQsIDEzNzggaW5zZXJ0aW9ucygrKSwg
NDczIGRlbGV0aW9ucygtKQogY3JlYXRlIG1vZGUgMTAwNjQ0IExheW91dFRlc3RzL3N2Zy9jdXN0
b20vcG9pbnRlci1ldmVudHMtb24tcm91bmRlZC1yZWN0LWV4cGVjdGVkLnR4dAogY3JlYXRlIG1v
ZGUgMTAwNjQ0IExheW91dFRlc3RzL3N2Zy9jdXN0b20vcG9pbnRlci1ldmVudHMtb24tcm91bmRl
ZC1yZWN0LnhodG1sCiBjcmVhdGUgbW9kZSAxMDA2NDQgTGF5b3V0VGVzdHMvc3ZnL2N1c3RvbS9w
b2ludGVyLWV2ZW50cy13aXRoLWxpbmVjYXBzLWFuZC1taXRlcmxpbWl0cy1leHBlY3RlZC50eHQK
IGNyZWF0ZSBtb2RlIDEwMDY0NCBMYXlvdXRUZXN0cy9zdmcvY3VzdG9tL3BvaW50ZXItZXZlbnRz
LXdpdGgtbGluZWNhcHMtYW5kLW1pdGVybGltaXRzLnhodG1sCiBjcmVhdGUgbW9kZSAxMDA2NDQg
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZWN0LmNwcAogY3JlYXRlIG1v
ZGUgMTAwNjQ0IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVjdC5oCiBj
cmVhdGUgbW9kZSAxMDA2NDQgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdT
aGFwZS5jcHAKIGNyZWF0ZSBtb2RlIDEwMDY0NCBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3Zn
L1JlbmRlclNWR1NoYXBlLmgKCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cgYi9M
YXlvdXRUZXN0cy9DaGFuZ2VMb2cKaW5kZXggMGVkMWZhZi4uZTEzZGY1NyAxMDA2NDQKLS0tIGEv
TGF5b3V0VGVzdHMvQ2hhbmdlTG9nCisrKyBiL0xheW91dFRlc3RzL0NoYW5nZUxvZwpAQCAtMSwz
ICsxLDE3IEBACisyMDExLTEwLTA1ICBSZW5hdGEgSG9kb3ZhbiAgPHJlbmlAd2Via2l0Lm9yZz4K
KworICAgICAgICBBZGQgbmV3IHJlbmRlcmVyIGZvciBTVkdSZWN0RWxlbWVudC4KKyAgICAgICAg
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTY1NzY5CisKKyAgICAgICAg
QWRkIG5ldyB0ZXN0cyB0byBjaGVjayB0aGUgbmV3IHNoYXBlIGJhc2VkIHJlbmRlcmluZyBtZWNo
YW5pc20gb2YgU1ZHUmVjdEVsZW1lbnQuCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChP
T1BTISkuCisKKyAgICAgICAgKiBzdmcvY3VzdG9tL3BvaW50ZXItZXZlbnRzLW9uLXJvdW5kZWQt
cmVjdC1leHBlY3RlZC50eHQ6IEFkZGVkLgorICAgICAgICAqIHN2Zy9jdXN0b20vcG9pbnRlci1l
dmVudHMtb24tcm91bmRlZC1yZWN0LnhodG1sOiBBZGRlZC4KKyAgICAgICAgKiBzdmcvY3VzdG9t
L3BvaW50ZXItZXZlbnRzLXdpdGgtbGluZWNhcHMtYW5kLW1pdGVybGltaXRzLWV4cGVjdGVkLnR4
dDogQWRkZWQuCisgICAgICAgICogc3ZnL2N1c3RvbS9wb2ludGVyLWV2ZW50cy13aXRoLWxpbmVj
YXBzLWFuZC1taXRlcmxpbWl0cy54aHRtbDogQWRkZWQuCisKIDIwMTEtMTAtMDUgIElseWEgVGlr
aG9ub3Zza3kgIDxsb2lzbG9AY2hyb21pdW0ub3JnPgogCiAgICAgICAgIFVucmV2aWV3ZWQgcmVi
YXNlbGluZSBmb3IgdGVzdC4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3N2Zy9jdXN0b20vcG9p
bnRlci1ldmVudHMtb24tcm91bmRlZC1yZWN0LWV4cGVjdGVkLnR4dCBiL0xheW91dFRlc3RzL3N2
Zy9jdXN0b20vcG9pbnRlci1ldmVudHMtb24tcm91bmRlZC1yZWN0LWV4cGVjdGVkLnR4dApuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42MTViYWUwCi0tLSAvZGV2L251bGwKKysr
IGIvTGF5b3V0VGVzdHMvc3ZnL2N1c3RvbS9wb2ludGVyLWV2ZW50cy1vbi1yb3VuZGVkLXJlY3Qt
ZXhwZWN0ZWQudHh0CkBAIC0wLDAgKzEgQEAKK1BBU1NFRDogZmFsbGJhY2tSZWN0IGhhZCBwb2lu
dGVyCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9zdmcvY3VzdG9tL3BvaW50ZXItZXZlbnRzLW9u
LXJvdW5kZWQtcmVjdC54aHRtbCBiL0xheW91dFRlc3RzL3N2Zy9jdXN0b20vcG9pbnRlci1ldmVu
dHMtb24tcm91bmRlZC1yZWN0LnhodG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw
MDAuLmM2M2QxMjIKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9zdmcvY3VzdG9tL3Bv
aW50ZXItZXZlbnRzLW9uLXJvdW5kZWQtcmVjdC54aHRtbApAQCAtMCwwICsxLDY2IEBACis8aHRt
bCB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMTk5OS94aHRtbCc+Cis8Ym9keSBzdHlsZT0ibWFy
Z2luOiAwcHg7IHBhZGRpbmc6IDBweCI+CisKKzxzdmcgeG1sbnM9Imh0dHA6Ly93d3cudzMub3Jn
LzIwMDAvc3ZnIiBzdHlsZT0icG9zaXRpb246YWJzb2x1dGU7Ij4KKzxkZWZzPgorCis8c3R5bGUg
dHlwZT0idGV4dC9jc3MiPjwhW0NEQVRBWworcmVjdCNyb3VuZGVkUmVjdCB7CisgICAgZmlsbDog
bm9uZTsKKyAgICBzdHJva2U6IGdyZWVuOworICAgIHN0cm9rZS13aWR0aDogMjBweDsKKyAgICBz
dHJva2UtbGluZWpvaW46IGJldmVsOworfQorcmVjdDpob3ZlciB7CisgICAgc3Ryb2tlOiByZWQ7
Cit9CitdXT48L3N0eWxlPgorPC9kZWZzPgorCis8cmVjdCBpZD0iZmFsbGJhY2siIHg9IjMwIiB5
PSIzMCIgd2lkdGg9IjQyMCIgaGVpZ2h0PSIzMjAiIGZpbGw9InllbGxvdyIgb25jbGljaz0icGFz
c2VkKCkiLz4KKzxyZWN0IGlkPSJyb3VuZGVkUmVjdCIgeD0iNDAiIHk9IjQwIiByeD0iMzAiIHJ5
PSIzMCIgd2lkdGg9IjQwMCIgaGVpZ2h0PSIzMDAiIHBvaW50ZXItZXZlbnRzPSJ2aXNpYmxlU3Ry
b2tlIiBvbmNsaWNrPSJmYWlsZWQoKSIvPgorPHRleHQgaWQ9InRleHQiIHg9IjMwIiB5PSIzNzAi
PjwvdGV4dD4KKworPHNjcmlwdCB0eXBlPSJ0ZXh0L2VjbWFzY3JpcHQiPgorICAgIDwhW0NEQVRB
WworCit2YXIgZmFsbGJhY2sgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiZmFsbGJhY2siKTsK
K3ZhciByb3VuZGVkUmVjdCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJyb3VuZGVkUmVjdCIp
OwordmFyIHRleHQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgidGV4dCIpOworCisgICAgZmFs
bGJhY2suYWRkRXZlbnRMaXN0ZW5lcigibW91c2Vkb3duIiwgcGFzc2VkLCBmYWxzZSk7CisgICAg
cm91bmRlZFJlY3QuYWRkRXZlbnRMaXN0ZW5lcigibW91c2Vkb3duIiwgZmFpbGVkLCBmYWxzZSk7
CisKK2Z1bmN0aW9uIHN0b3AoKSB7CisgICAgZmFsbGJhY2sucmVtb3ZlRXZlbnRMaXN0ZW5lcigi
bW91c2Vkb3duIiwgZmFpbGVkLCBmYWxzZSk7CisgICAgcm91bmRlZFJlY3QucmVtb3ZlRXZlbnRM
aXN0ZW5lcigibW91c2Vkb3duIiwgcGFzc2VkLCBmYWxzZSk7CisKKyAgICBpZiAod2luZG93Lmxh
eW91dFRlc3RDb250cm9sbGVyKQorICAgIGxheW91dFRlc3RDb250cm9sbGVyLm5vdGlmeURvbmUo
KTsKK30KKworZnVuY3Rpb24gZmFpbGVkKCkgeworICAgIHRleHQudGV4dENvbnRlbnQgPSAnRkFJ
TEVEOiBzdHJva2VSZWN0IGhhZCBwb2ludGVyJzsKKyAgICBzdG9wKCk7Cit9CisKK2Z1bmN0aW9u
IHBhc3NlZCgpIHsKKyAgIHRleHQudGV4dENvbnRlbnQgPSAnUEFTU0VEOiBmYWxsYmFja1JlY3Qg
aGFkIHBvaW50ZXInOworICAgc3RvcCgpOworfQorCitpZiAod2luZG93LmxheW91dFRlc3RDb250
cm9sbGVyKSB7CisgICBsYXlvdXRUZXN0Q29udHJvbGxlci53YWl0VW50aWxEb25lKCk7CisgICBs
YXlvdXRUZXN0Q29udHJvbGxlci5kdW1wQXNUZXh0KCk7Cit9CisKK2lmICh3aW5kb3cuZXZlbnRT
ZW5kZXIpIHsKKyAgICBldmVudFNlbmRlci5tb3VzZU1vdmVUbygzMSwgMzEpOworICAgIGV2ZW50
U2VuZGVyLm1vdXNlRG93bigpOworfQorXV0+Cis8L3NjcmlwdD4KKworPC9zdmc+Cis8L2JvZHk+
Cis8L2h0bWw+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvTGF5b3V0
VGVzdHMvc3ZnL2N1c3RvbS9wb2ludGVyLWV2ZW50cy13aXRoLWxpbmVjYXBzLWFuZC1taXRlcmxp
bWl0cy1leHBlY3RlZC50eHQgYi9MYXlvdXRUZXN0cy9zdmcvY3VzdG9tL3BvaW50ZXItZXZlbnRz
LXdpdGgtbGluZWNhcHMtYW5kLW1pdGVybGltaXRzLWV4cGVjdGVkLnR4dApuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwLi42MTViYWUwCi0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0
VGVzdHMvc3ZnL2N1c3RvbS9wb2ludGVyLWV2ZW50cy13aXRoLWxpbmVjYXBzLWFuZC1taXRlcmxp
bWl0cy1leHBlY3RlZC50eHQKQEAgLTAsMCArMSBAQAorUEFTU0VEOiBmYWxsYmFja1JlY3QgaGFk
IHBvaW50ZXIKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3N2Zy9jdXN0b20vcG9pbnRlci1ldmVu
dHMtd2l0aC1saW5lY2Fwcy1hbmQtbWl0ZXJsaW1pdHMueGh0bWwgYi9MYXlvdXRUZXN0cy9zdmcv
Y3VzdG9tL3BvaW50ZXItZXZlbnRzLXdpdGgtbGluZWNhcHMtYW5kLW1pdGVybGltaXRzLnhodG1s
Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjkyMjZiNzAKLS0tIC9kZXYvbnVs
bAorKysgYi9MYXlvdXRUZXN0cy9zdmcvY3VzdG9tL3BvaW50ZXItZXZlbnRzLXdpdGgtbGluZWNh
cHMtYW5kLW1pdGVybGltaXRzLnhodG1sCkBAIC0wLDAgKzEsNjggQEAKKzxodG1sIHhtbG5zPSdo
dHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sJz4KKzxib2R5IHN0eWxlPSJtYXJnaW46IDBweDsg
cGFkZGluZzogMHB4Ij4KKworPHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmci
IHN0eWxlPSJwb3NpdGlvbjphYnNvbHV0ZTsiPgorPGRlZnM+CisKKzxzdHlsZSB0eXBlPSJ0ZXh0
L2NzcyI+PCFbQ0RBVEFbCityZWN0I3N0cm9rZWRSZWN0IHsKKyAgICBmaWxsOiBub25lOworICAg
IHN0cm9rZTogYmx1ZTsKKyAgICBzdHJva2Utd2lkdGg6IDIwcHg7CisgICAgc3Ryb2tlLWxpbmVj
YXA6IHNxdWFyZTsKKyAgICBzdHJva2UtbWl0ZXJsaW1pdDogMTsKK30KK3JlY3Qjc3Ryb2tlZFJl
Y3Q6aG92ZXIgeworICAgIHN0cm9rZTogcmVkOworfQorXV0+PC9zdHlsZT4KKzwvZGVmcz4KKwor
PHJlY3QgaWQ9ImZhbGxiYWNrIiB4PSIwIiB5PSIwIiB3aWR0aD0iMjEwIiBoZWlnaHQ9IjIxMCIg
ZmlsbD0iZ3JlZW4iIG9uY2xpY2s9InBhc3NlZCgpIi8+Cis8cmVjdCBpZD0ic3Ryb2tlZFJlY3Qi
IHg9IjEwIiB5PSIxMCIgd2lkdGg9IjE5MCIgaGVpZ2h0PSIxOTAiIHBvaW50ZXItZXZlbnRzPSJ2
aXNpYmxlU3Ryb2tlIiBvbmNsaWNrPSJmYWlsZWQoKSIvPgorPHRleHQgaWQ9InRleHQiIHg9IjAi
IHk9IjIzMCI+PC90ZXh0PgorCis8c2NyaXB0IHR5cGU9InRleHQvZWNtYXNjcmlwdCI+CisgICAg
PCFbQ0RBVEFbCisKK3ZhciBmYWxsYmFjayA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJmYWxs
YmFjayIpOwordmFyIHN0cm9rZWRSZWN0ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoInN0cm9r
ZWRSZWN0Iik7Cit2YXIgdGV4dCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJ0ZXh0Iik7CisK
K2ZhbGxiYWNrLmFkZEV2ZW50TGlzdGVuZXIoIm1vdXNlZG93biIsIHBhc3NlZCwgZmFsc2UpOwor
c3Ryb2tlZFJlY3QuYWRkRXZlbnRMaXN0ZW5lcigibW91c2Vkb3duIiwgZmFpbGVkLCBmYWxzZSk7
CisKK2Z1bmN0aW9uIHN0b3AoKSB7CisgICAgZmFsbGJhY2sucmVtb3ZlRXZlbnRMaXN0ZW5lcigi
bW91c2Vkb3duIiwgZmFpbGVkLCBmYWxzZSk7CisgICAgc3Ryb2tlZFJlY3QucmVtb3ZlRXZlbnRM
aXN0ZW5lcigibW91c2Vkb3duIiwgcGFzc2VkLCBmYWxzZSk7CisKK2lmICh3aW5kb3cubGF5b3V0
VGVzdENvbnRyb2xsZXIpCisgICAgbGF5b3V0VGVzdENvbnRyb2xsZXIubm90aWZ5RG9uZSgpOwor
fQorCitmdW5jdGlvbiBmYWlsZWQoKSB7CisgICAgdGV4dC50ZXh0Q29udGVudCA9ICdGQUlMRUQ6
IHN0cm9rZVJlY3QgaGFkIHBvaW50ZXInOworICAgIHN0b3AoKTsKK30KKworZnVuY3Rpb24gcGFz
c2VkKCkgeworICAgIHRleHQudGV4dENvbnRlbnQgPSAnUEFTU0VEOiBmYWxsYmFja1JlY3QgaGFk
IHBvaW50ZXInOworICAgIHN0b3AoKTsKK30KKworaWYgKHdpbmRvdy5sYXlvdXRUZXN0Q29udHJv
bGxlcikgeworICAgIGxheW91dFRlc3RDb250cm9sbGVyLndhaXRVbnRpbERvbmUoKTsKKyAgICBs
YXlvdXRUZXN0Q29udHJvbGxlci5kdW1wQXNUZXh0KCk7Cit9CisKK2lmICh3aW5kb3cuZXZlbnRT
ZW5kZXIpIHsKKyAgICBldmVudFNlbmRlci5tb3VzZU1vdmVUbygxLCAxKTsKKyAgICBldmVudFNl
bmRlci5tb3VzZURvd24oKTsKK30KKworXV0+Cis8L3NjcmlwdD4KKzwvc3ZnPgorCis8L2JvZHk+
Cis8L2h0bWw+CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9DTWFrZUxpc3RzLnR4dCBiL1Nv
dXJjZS9XZWJDb3JlL0NNYWtlTGlzdHMudHh0CmluZGV4IGU1NDJmNGEuLmRlMzQxYTQgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL0NNYWtlTGlzdHMudHh0CisrKyBiL1NvdXJjZS9XZWJDb3Jl
L0NNYWtlTGlzdHMudHh0CkBAIC0xNjA3LDYgKzE2MDcsNyBAQCBJRiAoRU5BQkxFX1NWRykKICAg
ICAgICAgcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdJbmxpbmVUZXh0LmNwcAogICAgICAgICByZW5k
ZXJpbmcvc3ZnL1JlbmRlclNWR01vZGVsT2JqZWN0LmNwcAogICAgICAgICByZW5kZXJpbmcvc3Zn
L1JlbmRlclNWR1BhdGguY3BwCisgICAgICAgIHJlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVjdC5j
cHAKICAgICAgICAgcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJjZS5jcHAKICAgICAgICAg
cmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJjZUNsaXBwZXIuY3BwCiAgICAgICAgIHJlbmRl
cmluZy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VDb250YWluZXIuY3BwCkBAIC0xNjIxLDYgKzE2MjIs
NyBAQCBJRiAoRU5BQkxFX1NWRykKICAgICAgICAgcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNv
dXJjZVNvbGlkQ29sb3IuY3BwCiAgICAgICAgIHJlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUm9vdC5j
cHAKICAgICAgICAgcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdTaGFkb3dUcmVlUm9vdENvbnRhaW5l
ci5jcHAKKyAgICAgICAgcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdTaGFwZS5jcHAKICAgICAgICAg
cmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdUU3Bhbi5jcHAKICAgICAgICAgcmVuZGVyaW5nL3N2Zy9S
ZW5kZXJTVkdUZXh0LmNwcAogICAgICAgICByZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1RleHRQYXRo
LmNwcApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nIGIvU291cmNlL1dlYkNv
cmUvQ2hhbmdlTG9nCmluZGV4IDU5ZThjNjMuLjAyOTAxYTIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKQEAgLTEsMyAr
MSwxNjEgQEAKKzIwMTEtMTAtMDUgIFJlbmF0YSBIb2RvdmFuICA8cmVuaUB3ZWJraXQub3JnPgor
CisgICAgICAgIEFkZCBuZXcgcmVuZGVyZXIgZm9yIFNWR1JlY3RFbGVtZW50LgorICAgICAgICBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NjU3NjkKKworICAgICAgICBS
ZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBUaGlzIHBhdGNoIGludHJvZHVj
ZXMgYSBuZXcgY29tbW9uIGJhc2UgY2xhc3MgY2FsbGVkIFJlbmRlclNWR1NoYXBlIHdoaWNoCisg
ICAgICAgIHJlcGxhY2VzIHRoZSBSZW5kZXJTVkdQYXRoLiBUaGlzIG5ldyBiYXNlIGNsYXNzIGhh
cyB0aGUgc2FtZSBwdXJwb3NlCisgICAgICAgIGFzIHRoZSByZXBsYWNlZCBjbGFzcyBhbmQgaGFz
IHNwZWNpYWxpemVkIGRlc2NlbmRhbnRzIGZvciBjb21tb24KKyAgICAgICAgc2hhcGVzIChsaWtl
IFJlY3RhbmdsZXMgYW5kIENpcmNsZXMpLCB3aGljaCBhbGxvd3MgZmFzdGVyIHBhaW50aW5nCisg
ICAgICAgIG9mIHRoZXNlIHNoYXBlcyB3aGVuIGNlcnRhaW4gY29uZGl0aW9ucyBhcmUgZnVsZmls
bGVkLiBPbiBzb21lCisgICAgICAgIGJlbmNobWFyayBwcm9ncmFtcyB3ZSBoYXZlIHNlZW4gNSUg
c3BlZWR1cC4KKworICAgICAgICBUaGUgYmlnZ2VzdCBtb3RpdmF0aW9uIG9mIHRoaXMgcmVmYWN0
b3IgaXMgdGFraW5nIGFkdmFudGFnZQorICAgICAgICBvZiBmYXN0ZXIgcHJpbWl0aXZlIGRyYXdp
bmcgaW4gdGhlIG1vc3QgY29tbW9uIGFuZCBmcmVxdWVudAorICAgICAgICBjYXNlcy4gSG93ZXZl
ciBpbiBzb21lIHJhcmUgY2FzZXMsIGxpa2UgcGFpbnRpbmcgcm91bmRlZAorICAgICAgICByZWN0
cywgd2UgbmVlZCB0byBmYWxsYmFjayB0byB0aGUgb3JpZ2luYWwgY29kZSBwYXRoLCB3aGljaAor
ICAgICAgICBpcyBmdWxseSBrZXB0IGluIHRoZSBSZW5kZXJTVkdTaGFwZSBiYXNlIGNsYXNzLiBT
b21lIG90aGVyCisgICAgICAgIGNhc2VzLCBsaWtlIGRhc2hlZCBzdHJva2VzLCBjYW4gYmUgcGFp
bnRlZCBidXQgbW91c2UgcG9pbnRlcgorICAgICAgICBldmVudHMgY2Fubm90IGJlIGhhbmRsZWQg
YnkgdGhlIGRlc2NlbmRhbnQgY2xhc3Nlcy4gQSBkaWZmZXJlbnQKKyAgICAgICAgZmFsbGJhY2sg
bWVjaGFuaXNtIGlzIHVzZWQgaW4gc3VjaCBjYXNlcyB3aGljaCByZWRpcmVjdHMKKyAgICAgICAg
b25seSB0aGUgcG9pbnRlciBldmVudCBoYW5kbGluZyB0byB0aGUgYmFzZSBjbGFzcy4KKworICAg
ICAgICBUZXN0czogc3ZnL2N1c3RvbS9wb2ludGVyLWV2ZW50cy1vbi1yb3VuZGVkLXJlY3QueGh0
bWwKKyAgICAgICAgICAgICAgIHN2Zy9jdXN0b20vcG9pbnRlci1ldmVudHMtd2l0aC1saW5lY2Fw
cy1hbmQtbWl0ZXJsaW1pdHMueGh0bWwKKworICAgICAgICAqIENNYWtlTGlzdHMudHh0OgorICAg
ICAgICAqIEdOVW1ha2VmaWxlLmxpc3QuYW06CisgICAgICAgICogV2ViQ29yZS5neXBpOgorICAg
ICAgICAqIFdlYkNvcmUucHJvOgorICAgICAgICAqIFdlYkNvcmUudmNwcm9qL1dlYkNvcmUudmNw
cm9qOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0Zsb2F0UmVjdC5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpGbG9hdFJlY3Q6OmNvbnRhaW5zKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFw
aGljcy9GbG9hdFJlY3QuaDoKKyAgICAgICAgKFdlYkNvcmU6OkZsb2F0UmVjdDo6Y29udGFpbnMp
OgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJPYmplY3QuaDoKKyAgICAgICAgKFdlYkNvcmU6
OlJlbmRlck9iamVjdDo6aXNTVkdSZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlck9iamVj
dDo6aXNTVkdTaGFwZSk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlclRyZWVBc1RleHQuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6d3JpdGUpOgorICAgICAgICAqIHJlbmRlcmluZy9zdmcvUmVu
ZGVyU1ZHQWxsSW5PbmUuY3BwOgorICAgICAgICAqIHJlbmRlcmluZy9zdmcvUmVuZGVyU1ZHTW9k
ZWxPYmplY3QuY3BwOgorICAgICAgICAoV2ViQ29yZTo6aXNHcmFwaGljc0VsZW1lbnQpOgorICAg
ICAgICAqIHJlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUGF0aC5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpSZW5kZXJTVkdQYXRoOjpSZW5kZXJTVkdQYXRoKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRl
clNWR1BhdGg6OmluZmxhdGVXaXRoTWFya2VyQm91bmRzKTogVW5pdGUgdGhlIG1hcmtlckJvdW5k
cyB3aXRoIHN0cm9rZUJvdW5kaW5nQm94LgorICAgICAgICAqIHJlbmRlcmluZy9zdmcvUmVuZGVy
U1ZHUGF0aC5oOgorICAgICAgICAqIHJlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVjdC5jcHA6IEFk
ZGVkLgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU1ZHUmVjdDo6UmVuZGVyU1ZHUmVjdCk6Cisg
ICAgICAgIChXZWJDb3JlOjpSZW5kZXJTVkdSZWN0Ojp+UmVuZGVyU1ZHUmVjdCk6CisgICAgICAg
IChXZWJDb3JlOjpSZW5kZXJTVkdSZWN0OjpjcmVhdGVTaGFwZSk6CisgICAgICAgIChXZWJDb3Jl
OjpSZW5kZXJTVkdSZWN0OjpvYmplY3RCb3VuZGluZ0JveCk6CisgICAgICAgIChXZWJDb3JlOjpS
ZW5kZXJTVkdSZWN0OjpzdHJva2VCb3VuZGluZ0JveCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5k
ZXJTVkdSZWN0OjpmaWxsU2hhcGUpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU1ZHUmVjdDo6
c3Ryb2tlU2hhcGUpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU1ZHUmVjdDo6c2hhcGVEZXBl
bmRlbnRTdHJva2VDb250YWlucyk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJTVkdSZWN0Ojpz
aGFwZURlcGVuZGVudEZpbGxDb250YWlucyk6CisgICAgICAgICogcmVuZGVyaW5nL3N2Zy9SZW5k
ZXJTVkdSZWN0Lmg6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU1ZHUmVjdDo6aXNT
VkdSZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclNWR1JlY3Q6OnJlbmRlck5hbWUpOgor
ICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU1ZHUmVjdDo6aXNFbXB0eSk6CisgICAgICAgICogcmVu
ZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJjZS5oOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVy
U1ZHUmVzb3VyY2U6OnBvc3RBcHBseVJlc291cmNlKTogQSBuZXcgc2hhcGUgYXJndW1lbnQgd2Fz
IGFkZGVkIHRvIGFsbG93IHNoYXBlIHNwZWNpZmljIGZhc3RlciBwYWludGluZy4KKyAgICAgICAg
KiByZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291cmNlQ2xpcHBlci5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpSZW5kZXJTVkdSZXNvdXJjZUNsaXBwZXI6OmRyYXdDb250ZW50SW50b01hc2tJbWFn
ZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJTVkdSZXNvdXJjZUNsaXBwZXI6OmNhbGN1bGF0
ZUNsaXBDb250ZW50UmVwYWludFJlY3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU1ZHUmVz
b3VyY2VDbGlwcGVyOjpoaXRUZXN0Q2xpcENvbnRlbnQpOgorICAgICAgICAqIHJlbmRlcmluZy9z
dmcvUmVuZGVyU1ZHUmVzb3VyY2VDb250YWluZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVu
ZGVyU1ZHUmVzb3VyY2VDb250YWluZXI6OnRyYW5zZm9ybU9uTm9uU2NhbGluZ1N0cm9rZSk6Cisg
ICAgICAgICogcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJjZUZpbHRlci5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpSZW5kZXJTVkdSZXNvdXJjZUZpbHRlcjo6cG9zdEFwcGx5UmVzb3VyY2Up
OgorICAgICAgICAqIHJlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VGaWx0ZXIuaDoKKyAg
ICAgICAgKiByZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291cmNlR3JhZGllbnQuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6UmVuZGVyU1ZHUmVzb3VyY2VHcmFkaWVudDo6YXBwbHlSZXNvdXJjZSk6
CisgICAgICAgICogcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJjZUdyYWRpZW50Lmg6Cisg
ICAgICAgICogcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJjZVBhdHRlcm4uY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6UmVuZGVyU1ZHUmVzb3VyY2VQYXR0ZXJuOjpwb3N0QXBwbHlSZXNvdXJj
ZSk6CisgICAgICAgICogcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJjZVBhdHRlcm4uaDoK
KyAgICAgICAgKiByZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291cmNlU29saWRDb2xvci5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJTVkdSZXNvdXJjZVNvbGlkQ29sb3I6OnBvc3RBcHBs
eVJlc291cmNlKToKKyAgICAgICAgKiByZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291cmNlU29s
aWRDb2xvci5oOgorICAgICAgICAqIHJlbmRlcmluZy9zdmcvUmVuZGVyU1ZHU2hhcGUuY3BwOiBD
b3BpZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1BhdGguY3Bw
LgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU1ZHU2hhcGU6OlJlbmRlclNWR1NoYXBlKToKKyAg
ICAgICAgKFdlYkNvcmU6OlJlbmRlclNWR1NoYXBlOjp+UmVuZGVyU1ZHU2hhcGUpOgorICAgICAg
ICAoV2ViQ29yZTo6UmVuZGVyU1ZHU2hhcGU6OmNyZWF0ZVNoYXBlKToKKyAgICAgICAgKFdlYkNv
cmU6OlJlbmRlclNWR1NoYXBlOjppc0VtcHR5KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclNW
R1NoYXBlOjpmaWxsU2hhcGUpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU1ZHU2hhcGU6Om9i
amVjdEJvdW5kaW5nQm94KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclNWR1NoYXBlOjpzdHJv
a2VCb3VuZGluZ0JveCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJTVkdTaGFwZTo6c3Ryb2tl
U2hhcGUpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU1ZHU2hhcGU6OnNoYXBlRGVwZW5kZW50
U3Ryb2tlQ29udGFpbnMpOgorICAgICAgICBUaGUgcHVycG9zZSBvZiB0aGlzIHZpcnR1YWwgZnVu
Y3Rpb24gYWxsb3dzIGRlY2VuZGFudHMgdG8gdXNlIHRoZWlyIG93biBmYXN0IGNoZWNrcy4KKyAg
ICAgICAgKFdlYkNvcmU6OlJlbmRlclNWR1NoYXBlOjpzaGFwZURlcGVuZGVudEZpbGxDb250YWlu
cyk6CisgICAgICAgIFRoZSBwdXJwb3NlIG9mIHRoaXMgdmlydHVhbCBmdW5jdGlvbiBhbGxvd3Mg
ZGVjZW5kYW50cyB0byB1c2UgdGhlaXIgb3duIGZhc3QgY2hlY2tzLgorICAgICAgICAoV2ViQ29y
ZTo6UmVuZGVyU1ZHU2hhcGU6OmZpbGxDb250YWlucyk6CisgICAgICAgIChXZWJDb3JlOjpSZW5k
ZXJTVkdTaGFwZTo6c3Ryb2tlQ29udGFpbnMpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU1ZH
U2hhcGU6OmxheW91dCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJTVkdTaGFwZTo6c2hvdWxk
U3Ryb2tlWmVyb0xlbmd0aFN1YnBhdGgpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU1ZHU2hh
cGU6Onplcm9MZW5ndGhTdWJwYXRoUmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJTVkdT
aGFwZTo6c2V0dXBTcXVhcmVDYXBQYXRoKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclNWR1No
YXBlOjpzZXR1cE5vblNjYWxpbmdTdHJva2VQYXRoKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRl
clNWR1NoYXBlOjpmaWxsQW5kU3Ryb2tlUGF0aCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJT
VkdTaGFwZTo6cGFpbnQpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU1ZHU2hhcGU6OmFkZEZv
Y3VzUmluZ1JlY3RzKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclNWR1NoYXBlOjpub2RlQXRG
bG9hdFBvaW50KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclNWR1NoYXBlOjpjYWxjdWxhdGVN
YXJrZXJCb3VuZHNJZk5lZWRlZCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJTVkdTaGFwZTo6
dXBkYXRlQ2FjaGVkQm91bmRhcmllcyk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJTVkdTaGFw
ZTo6c3Ryb2tlV2lkdGgpOgorICAgICAgICAqIHJlbmRlcmluZy9zdmcvUmVuZGVyU1ZHU2hhcGUu
aDogQ29waWVkIGZyb20gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdQYXRo
LmguCisgICAgICAgIChXZWJDb3JlOjpCb3VuZGluZ1JlY3RTdHJva2VTdHlsZUFwcGxpZXI6OkJv
dW5kaW5nUmVjdFN0cm9rZVN0eWxlQXBwbGllcik6CisgICAgICAgIChXZWJDb3JlOjpCb3VuZGlu
Z1JlY3RTdHJva2VTdHlsZUFwcGxpZXI6OnN0cm9rZVN0eWxlKToKKyAgICAgICAgKFdlYkNvcmU6
OlJlbmRlclNWR1NoYXBlOjpzZXROZWVkc1NoYXBlVXBkYXRlKToKKyAgICAgICAgKFdlYkNvcmU6
OlJlbmRlclNWR1NoYXBlOjpzZXROZWVkc0JvdW5kYXJpZXNVcGRhdGUpOgorICAgICAgICAoV2Vi
Q29yZTo6UmVuZGVyU1ZHU2hhcGU6OnNldE5lZWRzVHJhbnNmb3JtVXBkYXRlKToKKyAgICAgICAg
KFdlYkNvcmU6OlJlbmRlclNWR1NoYXBlOjppc1BhaW50aW5nRmFsbGJhY2spOgorICAgICAgICAo
V2ViQ29yZTo6UmVuZGVyU1ZHU2hhcGU6OnBhdGgpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVy
U1ZHU2hhcGU6OnNldElzUGFpbnRpbmdGYWxsYmFjayk6CisgICAgICAgIChXZWJDb3JlOjpSZW5k
ZXJTVkdTaGFwZTo6c2V0U3Ryb2tlQW5kTWFya2VyQm91bmRpbmdCb3gpOgorICAgICAgICAoV2Vi
Q29yZTo6UmVuZGVyU1ZHU2hhcGU6Omhhc1BhdGgpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVy
U1ZHU2hhcGU6OnJlcGFpbnRSZWN0SW5Mb2NhbENvb3JkaW5hdGVzKToKKyAgICAgICAgKFdlYkNv
cmU6OlJlbmRlclNWR1NoYXBlOjpsb2NhbFRvUGFyZW50VHJhbnNmb3JtKToKKyAgICAgICAgKFdl
YkNvcmU6OlJlbmRlclNWR1NoYXBlOjpsb2NhbFRyYW5zZm9ybSk6CisgICAgICAgIChXZWJDb3Jl
OjpSZW5kZXJTVkdTaGFwZTo6aXNTVkdTaGFwZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJT
VkdTaGFwZTo6cmVuZGVyTmFtZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJTVkdTaGFwZTo6
aXNSb3VuZGVkUmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJTVkdTaGFwZTo6aW5mbGF0
ZVdpdGhNYXJrZXJCb3VuZHMpOgorICAgICAgICAoV2ViQ29yZTo6dG9SZW5kZXJTVkdTaGFwZSk6
CisgICAgICAgICogcmVuZGVyaW5nL3N2Zy9TVkdJbmxpbmVUZXh0Qm94LmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OlNWR0lubGluZVRleHRCb3g6OnJlbGVhc2VQYWludGluZ1Jlc291cmNlKToKKyAg
ICAgICAgKiByZW5kZXJpbmcvc3ZnL1NWR1JlbmRlclN1cHBvcnQuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6U1ZHUmVuZGVyU3VwcG9ydDo6ZmluaXNoUmVuZGVyU1ZHQ29udGVudCk6CisgICAgICAg
IChXZWJDb3JlOjpTVkdSZW5kZXJTdXBwb3J0OjpsYXlvdXRDaGlsZHJlbik6CisgICAgICAgICog
cmVuZGVyaW5nL3N2Zy9TVkdSZW5kZXJUcmVlQXNUZXh0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OndyaXRlU3R5bGUpOgorICAgICAgICAoV2ViQ29yZTo6b3BlcmF0b3I8PCk6CisgICAgICAgIChX
ZWJDb3JlOjp3cml0ZSk6CisgICAgICAgICogcmVuZGVyaW5nL3N2Zy9TVkdSZW5kZXJUcmVlQXNU
ZXh0Lmg6CisgICAgICAgICogcmVuZGVyaW5nL3N2Zy9TVkdUZXh0UnVuUmVuZGVyaW5nQ29udGV4
dC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTVkdUZXh0UnVuUmVuZGVyaW5nQ29udGV4dDo6ZHJh
d1NWR0dseXBocyk6CisgICAgICAgICogc3ZnL1NWR0NpcmNsZUVsZW1lbnQuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6U1ZHQ2lyY2xlRWxlbWVudDo6c3ZnQXR0cmlidXRlQ2hhbmdlZCk6CisgICAg
ICAgICogc3ZnL1NWR0VsbGlwc2VFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR0Vs
bGlwc2VFbGVtZW50OjpzdmdBdHRyaWJ1dGVDaGFuZ2VkKToKKyAgICAgICAgKiBzdmcvU1ZHTGlu
ZUVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U1ZHTGluZUVsZW1lbnQ6OnN2Z0F0dHJp
YnV0ZUNoYW5nZWQpOgorICAgICAgICAqIHN2Zy9TVkdQYXRoRWxlbWVudC5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpTVkdQYXRoRWxlbWVudDo6c3ZnQXR0cmlidXRlQ2hhbmdlZCk6CisgICAgICAg
IChXZWJDb3JlOjpTVkdQYXRoRWxlbWVudDo6cGF0aFNlZ0xpc3RDaGFuZ2VkKToKKyAgICAgICAg
KFdlYkNvcmU6OlNWR1BhdGhFbGVtZW50OjpjcmVhdGVSZW5kZXJlcik6CisgICAgICAgICogc3Zn
L1NWR1BhdGhFbGVtZW50Lmg6CisgICAgICAgICogc3ZnL1NWR1BvbHlFbGVtZW50LmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OlNWR1BvbHlFbGVtZW50OjpzdmdBdHRyaWJ1dGVDaGFuZ2VkKToKKyAg
ICAgICAgKiBzdmcvU1ZHUmVjdEVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U1ZHUmVj
dEVsZW1lbnQ6OnN2Z0F0dHJpYnV0ZUNoYW5nZWQpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHUmVj
dEVsZW1lbnQ6OmNyZWF0ZVJlbmRlcmVyKToKKyAgICAgICAgKiBzdmcvU1ZHUmVjdEVsZW1lbnQu
aDoKKwogMjAxMS0xMC0wNSAgSWx5YSBUaWtob25vdnNreSAgPGxvaXNsb0BjaHJvbWl1bS5vcmc+
CiAKICAgICAgICAgVW5yZXZpZXdlZCBidWlsZCBmaXggZm9yIHdpbmRvd3MgYm90cyBhZnRlciBy
OTY2NzkuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9HTlVtYWtlZmlsZS5saXN0LmFtIGIv
U291cmNlL1dlYkNvcmUvR05VbWFrZWZpbGUubGlzdC5hbQppbmRleCA1NzJhZmZlLi42MmRkNWU0
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9HTlVtYWtlZmlsZS5saXN0LmFtCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0dOVW1ha2VmaWxlLmxpc3QuYW0KQEAgLTMyMjUsNiArMzIyNSw4IEBAIHdl
YmNvcmVfc291cmNlcyArPSBcCiAJU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJT
VkdNb2RlbE9iamVjdC5oIFwKIAlTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNW
R1BhdGguY3BwIFwKIAlTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1BhdGgu
aCBcCisJU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZWN0LmNwcCBcCisJ
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZWN0LmggXAogCVNvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VDbGlwcGVyLmNwcCBcCiAJU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJjZUNsaXBwZXIuaCBcCiAJ
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJjZUNvbnRhaW5lci5j
cHAgXApAQCAtMzI1Myw2ICszMjU1LDggQEAgd2ViY29yZV9zb3VyY2VzICs9IFwKIAlTb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jvb3QuaCBcCiAJU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdTaGFkb3dUcmVlUm9vdENvbnRhaW5lci5jcHAgXAogCVNv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHU2hhZG93VHJlZVJvb3RDb250YWlu
ZXIuaCBcCisJU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdTaGFwZS5jcHAg
XAorCVNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHU2hhcGUuaCBcCiAJU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdUU3Bhbi5jcHAgXAogCVNvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHVFNwYW4uaCBcCiAJU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdUZXh0LmNwcCBcCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9XZWJDb3JlLmd5cGkgYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkKaW5kZXggZTVm
OTFlNC4uZTAzYWZlZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBpCisr
KyBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwaQpAQCAtNTc1NCw2ICs1NzU0LDggQEAKICAg
ICAgICAgICAgICdyZW5kZXJpbmcvc3ZnL1JlbmRlclNWR01vZGVsT2JqZWN0LmgnLAogICAgICAg
ICAgICAgJ3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUGF0aC5jcHAnLAogICAgICAgICAgICAgJ3Jl
bmRlcmluZy9zdmcvUmVuZGVyU1ZHUGF0aC5oJywKKyAgICAgICAgICAgICdyZW5kZXJpbmcvc3Zn
L1JlbmRlclNWR1JlY3QuY3BwJywKKyAgICAgICAgICAgICdyZW5kZXJpbmcvc3ZnL1JlbmRlclNW
R1JlY3QuaCcsCiAgICAgICAgICAgICAncmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJjZS5j
cHAnLAogICAgICAgICAgICAgJ3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2UuaCcsCiAg
ICAgICAgICAgICAncmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJjZUNsaXBwZXIuY3BwJywK
QEAgLTU3ODIsNiArNTc4NCw4IEBACiAgICAgICAgICAgICAncmVuZGVyaW5nL3N2Zy9SZW5kZXJT
VkdSb290LmgnLAogICAgICAgICAgICAgJ3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHU2hhZG93VHJl
ZVJvb3RDb250YWluZXIuY3BwJywKICAgICAgICAgICAgICdyZW5kZXJpbmcvc3ZnL1JlbmRlclNW
R1NoYWRvd1RyZWVSb290Q29udGFpbmVyLmgnLAorICAgICAgICAgICAgJ3JlbmRlcmluZy9zdmcv
UmVuZGVyU1ZHU2hhcGUuY3BwJywKKyAgICAgICAgICAgICdyZW5kZXJpbmcvc3ZnL1JlbmRlclNW
R1NoYXBlLmgnLAogICAgICAgICAgICAgJ3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHVFNwYW4uY3Bw
JywKICAgICAgICAgICAgICdyZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1RTcGFuLmgnLAogICAgICAg
ICAgICAgJ3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHVGV4dC5jcHAnLApkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvV2ViQ29yZS5wcm8gYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnBybwppbmRl
eCA2ODFiZGYyLi4wOTZjZGUxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnBy
bworKysgYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnBybwpAQCAtMjMwMCw2ICsyMzAwLDcgQEAg
SEVBREVSUyArPSBcCiAgICAgcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdJbmxpbmVUZXh0LmggXAog
ICAgIHJlbmRlcmluZy9zdmcvUmVuZGVyU1ZHTW9kZWxPYmplY3QuaCBcCiAgICAgcmVuZGVyaW5n
L3N2Zy9SZW5kZXJTVkdQYXRoLmggXAorICAgIHJlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVjdC5o
IFwKICAgICByZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291cmNlLmggXAogICAgIHJlbmRlcmlu
Zy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VDbGlwcGVyLmggXAogICAgIHJlbmRlcmluZy9zdmcvUmVu
ZGVyU1ZHUmVzb3VyY2VDb250YWluZXIuaCBcCkBAIC0yMzE0LDYgKzIzMTUsNyBAQCBIRUFERVJT
ICs9IFwKICAgICByZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291cmNlU29saWRDb2xvci5oIFwK
ICAgICByZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jvb3QuaCBcCiAgICAgcmVuZGVyaW5nL3N2Zy9S
ZW5kZXJTVkdTaGFkb3dUcmVlUm9vdENvbnRhaW5lci5oIFwKKyAgICByZW5kZXJpbmcvc3ZnL1Jl
bmRlclNWR1NoYXBlLmggXAogICAgIHJlbmRlcmluZy9zdmcvUmVuZGVyU1ZHVFNwYW4uaCBcCiAg
ICAgcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdUZXh0LmggXAogICAgIHJlbmRlcmluZy9zdmcvUmVu
ZGVyU1ZHVGV4dFBhdGguaCBcCkBAIC0zMzM5LDYgKzMzNDEsOCBAQCBjb250YWlucyhERUZJTkVT
LCBFTkFCTEVfU1ZHPTEpIHsKICAgICAgICAgcmVuZGVyaW5nL3N0eWxlL1NWR1JlbmRlclN0eWxl
RGVmcy5jcHAgXAogICAgICAgICByZW5kZXJpbmcvUG9pbnRlckV2ZW50c0hpdFJ1bGVzLmNwcCBc
CiAgICAgICAgIHJlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUGF0aC5jcHAgXAorICAgICAgICByZW5k
ZXJpbmcvc3ZnL1JlbmRlclNWR1JlY3QuY3BwIFwKKyAgICAgICAgcmVuZGVyaW5nL3N2Zy9SZW5k
ZXJTVkdTaGFwZS5jcHAgXAogICAgICAgICBzdmcvYW5pbWF0aW9uL1NNSUxUaW1lLmNwcCBcCiAg
ICAgICAgIHN2Zy9hbmltYXRpb24vU01JTFRpbWVDb250YWluZXIuY3BwIFwKICAgICAgICAgc3Zn
L2FuaW1hdGlvbi9TVkdTTUlMRWxlbWVudC5jcHAgXApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvV2ViQ29yZS52Y3Byb2ovV2ViQ29yZS52Y3Byb2ogYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3Jl
LnZjcHJvai9XZWJDb3JlLnZjcHJvagppbmRleCA0NjVjMjNlLi5hMWEzNjNlIDEwMDc1NQotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnZjcHJvai9XZWJDb3JlLnZjcHJvagorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9XZWJDb3JlLnZjcHJvai9XZWJDb3JlLnZjcHJvagpAQCAtNDE4MzksNiArNDE4
MzksMTE4IEBACiAJCQkJCT4KIAkJCQk8L0ZpbGU+CiAJCQkJPEZpbGUKKwkJCQkJUmVsYXRpdmVQ
YXRoPSIuLlxyZW5kZXJpbmdcc3ZnXFJlbmRlclNWR1JlY3QuY3BwIgorCQkJCQk+CisJCQkJCTxG
aWxlQ29uZmlndXJhdGlvbgorCQkJCQkJTmFtZT0iRGVidWd8V2luMzIiCisJCQkJCQlFeGNsdWRl
ZEZyb21CdWlsZD0idHJ1ZSIKKwkJCQkJCT4KKwkJCQkJCTxUb29sCisJCQkJCQkJTmFtZT0iVkND
TENvbXBpbGVyVG9vbCIKKwkJCQkJCS8+CisJCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+CisJCQkJ
CTxGaWxlQ29uZmlndXJhdGlvbgorCQkJCQkJTmFtZT0iUmVsZWFzZXxXaW4zMiIKKwkJCQkJCUV4
Y2x1ZGVkRnJvbUJ1aWxkPSJ0cnVlIgorCQkJCQkJPgorCQkJCQkJPFRvb2wKKwkJCQkJCQlOYW1l
PSJWQ0NMQ29tcGlsZXJUb29sIgorCQkJCQkJLz4KKwkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4K
KwkJCQkJPEZpbGVDb25maWd1cmF0aW9uCisJCQkJCQlOYW1lPSJEZWJ1Z19DYWlyb19DRkxpdGV8
V2luMzIiCisJCQkJCQlFeGNsdWRlZEZyb21CdWlsZD0idHJ1ZSIKKwkJCQkJCT4KKwkJCQkJCTxU
b29sCisJCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIKKwkJCQkJCS8+CisJCQkJCTwvRmls
ZUNvbmZpZ3VyYXRpb24+CisJCQkJCTxGaWxlQ29uZmlndXJhdGlvbgorCQkJCQkJTmFtZT0iUmVs
ZWFzZV9DYWlyb19DRkxpdGV8V2luMzIiCisJCQkJCQlFeGNsdWRlZEZyb21CdWlsZD0idHJ1ZSIK
KwkJCQkJCT4KKwkJCQkJCTxUb29sCisJCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIKKwkJ
CQkJCS8+CisJCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+CisJCQkJCTxGaWxlQ29uZmlndXJhdGlv
bgorCQkJCQkJTmFtZT0iRGVidWdfQWxsfFdpbjMyIgorCQkJCQkJRXhjbHVkZWRGcm9tQnVpbGQ9
InRydWUiCisJCQkJCQk+CisJCQkJCQk8VG9vbAorCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRv
b2wiCisJCQkJCQkvPgorCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPgorCQkJCQk8RmlsZUNvbmZp
Z3VyYXRpb24KKwkJCQkJCU5hbWU9IlByb2R1Y3Rpb258V2luMzIiCisJCQkJCQlFeGNsdWRlZEZy
b21CdWlsZD0idHJ1ZSIKKwkJCQkJCT4KKwkJCQkJCTxUb29sCisJCQkJCQkJTmFtZT0iVkNDTENv
bXBpbGVyVG9vbCIKKwkJCQkJCS8+CisJCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+CisJCQkJPC9G
aWxlPgorCQkJCTxGaWxlCisJCQkJCVJlbGF0aXZlUGF0aD0iLi5ccmVuZGVyaW5nXHN2Z1xSZW5k
ZXJTVkdSZWN0LmgiCisJCQkJCT4KKwkJCQk8L0ZpbGU+CisJCQkJPEZpbGUKKwkJCQkJUmVsYXRp
dmVQYXRoPSIuLlxyZW5kZXJpbmdcc3ZnXFJlbmRlclNWR1NoYXBlLmNwcCIKKwkJCQkJPgorCQkJ
CQk8RmlsZUNvbmZpZ3VyYXRpb24KKwkJCQkJCU5hbWU9IkRlYnVnfFdpbjMyIgorCQkJCQkJRXhj
bHVkZWRGcm9tQnVpbGQ9InRydWUiCisJCQkJCQk+CisJCQkJCQk8VG9vbAorCQkJCQkJCU5hbWU9
IlZDQ0xDb21waWxlclRvb2wiCisJCQkJCQkvPgorCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPgor
CQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24KKwkJCQkJCU5hbWU9IlJlbGVhc2V8V2luMzIiCisJCQkJ
CQlFeGNsdWRlZEZyb21CdWlsZD0idHJ1ZSIKKwkJCQkJCT4KKwkJCQkJCTxUb29sCisJCQkJCQkJ
TmFtZT0iVkNDTENvbXBpbGVyVG9vbCIKKwkJCQkJCS8+CisJCQkJCTwvRmlsZUNvbmZpZ3VyYXRp
b24+CisJCQkJCTxGaWxlQ29uZmlndXJhdGlvbgorCQkJCQkJTmFtZT0iRGVidWdfQ2Fpcm9fQ0ZM
aXRlfFdpbjMyIgorCQkJCQkJRXhjbHVkZWRGcm9tQnVpbGQ9InRydWUiCisJCQkJCQk+CisJCQkJ
CQk8VG9vbAorCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiCisJCQkJCQkvPgorCQkJCQk8
L0ZpbGVDb25maWd1cmF0aW9uPgorCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24KKwkJCQkJCU5hbWU9
IlJlbGVhc2VfQ2Fpcm9fQ0ZMaXRlfFdpbjMyIgorCQkJCQkJRXhjbHVkZWRGcm9tQnVpbGQ9InRy
dWUiCisJCQkJCQk+CisJCQkJCQk8VG9vbAorCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wi
CisJCQkJCQkvPgorCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPgorCQkJCQk8RmlsZUNvbmZpZ3Vy
YXRpb24KKwkJCQkJCU5hbWU9IkRlYnVnX0FsbHxXaW4zMiIKKwkJCQkJCUV4Y2x1ZGVkRnJvbUJ1
aWxkPSJ0cnVlIgorCQkJCQkJPgorCQkJCQkJPFRvb2wKKwkJCQkJCQlOYW1lPSJWQ0NMQ29tcGls
ZXJUb29sIgorCQkJCQkJLz4KKwkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4KKwkJCQkJPEZpbGVD
b25maWd1cmF0aW9uCisJCQkJCQlOYW1lPSJQcm9kdWN0aW9ufFdpbjMyIgorCQkJCQkJRXhjbHVk
ZWRGcm9tQnVpbGQ9InRydWUiCisJCQkJCQk+CisJCQkJCQk8VG9vbAorCQkJCQkJCU5hbWU9IlZD
Q0xDb21waWxlclRvb2wiCisJCQkJCQkvPgorCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPgorCQkJ
CTwvRmlsZT4KKwkJCQk8RmlsZQorCQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXHJlbmRlcmluZ1xzdmdc
UmVuZGVyU1ZHU2hhcGUuaCIKKwkJCQkJPgorCQkJCTwvRmlsZT4KKwkJCQk8RmlsZQogCQkJCQlS
ZWxhdGl2ZVBhdGg9Ii4uXHJlbmRlcmluZ1xzdmdcUmVuZGVyU1ZHVGV4dC5jcHAiCiAJCQkJCT4K
IAkJCQkJPEZpbGVDb25maWd1cmF0aW9uCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9GbG9hdFJlY3QuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvRmxvYXRSZWN0LmNwcAppbmRleCBiODRhODkyLi42ZDRhMjIwIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9GbG9hdFJlY3QuY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0Zsb2F0UmVjdC5jcHAKQEAgLTY4LDYgKzY4LDEz
IEBAIGJvb2wgRmxvYXRSZWN0Ojpjb250YWlucyhjb25zdCBGbG9hdFJlY3QmIG90aGVyKSBjb25z
dAogICAgICAgICAmJiB5KCkgPD0gb3RoZXIueSgpICYmIG1heFkoKSA+PSBvdGhlci5tYXhZKCk7
CiB9CiAKK2Jvb2wgRmxvYXRSZWN0Ojpjb250YWlucyhjb25zdCBGbG9hdFBvaW50JiBwb2ludCwg
Q29udGFpbnNNb2RlIGNvbnRhaW5zTW9kZSkgY29uc3QKK3sKKyAgICBpZiAoY29udGFpbnNNb2Rl
ID09IEluc2lkZU9yT25TdHJva2UpCisgICAgICAgIHJldHVybiBjb250YWlucyhwb2ludC54KCks
IHBvaW50LnkoKSk7CisgICAgcmV0dXJuIHgoKSA8IHBvaW50LngoKSAmJiBtYXhYKCkgPiBwb2lu
dC54KCkgJiYgeSgpIDwgcG9pbnQueSgpICYmIG1heFkoKSA+IHkoKTsKK30KKwogdm9pZCBGbG9h
dFJlY3Q6OmludGVyc2VjdChjb25zdCBGbG9hdFJlY3QmIG90aGVyKQogewogICAgIGZsb2F0IGwg
PSBtYXgoeCgpLCBvdGhlci54KCkpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvRmxvYXRSZWN0LmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9GbG9hdFJlY3QuaAppbmRleCA0MjQxNzE2Li43ZGUzNDZmIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9GbG9hdFJlY3QuaAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9GbG9hdFJlY3QuaApAQCAtNzAsNiArNzAsMTEgQEAgY2xhc3Mg
SW50UG9pbnQ7CiAKIGNsYXNzIEZsb2F0UmVjdCB7CiBwdWJsaWM6CisgICAgZW51bSBDb250YWlu
c01vZGUgeworICAgICAgICBJbnNpZGVPck9uU3Ryb2tlLAorICAgICAgICBJbnNpZGVCdXROb3RP
blN0cm9rZQorICAgIH07CisKICAgICBGbG9hdFJlY3QoKSB7IH0KICAgICBGbG9hdFJlY3QoY29u
c3QgRmxvYXRQb2ludCYgbG9jYXRpb24sIGNvbnN0IEZsb2F0U2l6ZSYgc2l6ZSkKICAgICAgICAg
OiBtX2xvY2F0aW9uKGxvY2F0aW9uKSwgbV9zaXplKHNpemUpIHsgfQpAQCAtMTQyLDYgKzE0Nyw3
IEBAIHB1YmxpYzoKIAogICAgIGJvb2wgaW50ZXJzZWN0cyhjb25zdCBGbG9hdFJlY3QmKSBjb25z
dDsKICAgICBib29sIGNvbnRhaW5zKGNvbnN0IEZsb2F0UmVjdCYpIGNvbnN0OworICAgIGJvb2wg
Y29udGFpbnMoY29uc3QgRmxvYXRQb2ludCYsIENvbnRhaW5zTW9kZSA9IEluc2lkZU9yT25TdHJv
a2UpIGNvbnN0OwogCiAgICAgdm9pZCBpbnRlcnNlY3QoY29uc3QgRmxvYXRSZWN0Jik7CiAgICAg
dm9pZCB1bml0ZShjb25zdCBGbG9hdFJlY3QmKTsKQEAgLTE1MSw3ICsxNTcsNiBAQCBwdWJsaWM6
CiAgICAgLy8gaXMgcmVhbGx5IGNoZWNraW5nIGZvciBjb250YWlubWVudCBvZiAxeDEgcmVjdCwg
YnV0IHRoYXQgZG9lc24ndCBtYWtlIHNlbnNlIHdpdGggZmxvYXRzLgogICAgIGJvb2wgY29udGFp
bnMoZmxvYXQgcHgsIGZsb2F0IHB5KSBjb25zdAogICAgICAgICB7IHJldHVybiBweCA+PSB4KCkg
JiYgcHggPD0gbWF4WCgpICYmIHB5ID49IHkoKSAmJiBweSA8PSBtYXhZKCk7IH0KLSAgICBib29s
IGNvbnRhaW5zKGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50KSBjb25zdCB7IHJldHVybiBjb250YWlu
cyhwb2ludC54KCksIHBvaW50LnkoKSk7IH0KIAogICAgIHZvaWQgaW5mbGF0ZVgoZmxvYXQgZHgp
IHsKICAgICAgICAgbV9sb2NhdGlvbi5zZXRYKG1fbG9jYXRpb24ueCgpIC0gZHgpOwpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck9iamVjdC5oIGIvU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL1JlbmRlck9iamVjdC5oCmluZGV4IDZkZDRiYWMuLmFlMTRhN2IgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJPYmplY3QuaAorKysgYi9T
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyT2JqZWN0LmgKQEAgLTM5Niw2ICszOTYsOCBA
QCBwdWJsaWM6CiAgICAgdmlydHVhbCBib29sIGlzU1ZHR3JhZGllbnRTdG9wKCkgY29uc3QgeyBy
ZXR1cm4gZmFsc2U7IH0KICAgICB2aXJ0dWFsIGJvb2wgaXNTVkdIaWRkZW5Db250YWluZXIoKSBj
b25zdCB7IHJldHVybiBmYWxzZTsgfQogICAgIHZpcnR1YWwgYm9vbCBpc1NWR1BhdGgoKSBjb25z
dCB7IHJldHVybiBmYWxzZTsgfQorICAgIHZpcnR1YWwgYm9vbCBpc1NWR1JlY3QoKSBjb25zdCB7
IHJldHVybiBmYWxzZTsgfQorICAgIHZpcnR1YWwgYm9vbCBpc1NWR1NoYXBlKCkgY29uc3QgeyBy
ZXR1cm4gZmFsc2U7IH0KICAgICB2aXJ0dWFsIGJvb2wgaXNTVkdUZXh0KCkgY29uc3QgeyByZXR1
cm4gZmFsc2U7IH0KICAgICB2aXJ0dWFsIGJvb2wgaXNTVkdUZXh0UGF0aCgpIGNvbnN0IHsgcmV0
dXJuIGZhbHNlOyB9CiAgICAgdmlydHVhbCBib29sIGlzU1ZHSW5saW5lKCkgY29uc3QgeyByZXR1
cm4gZmFsc2U7IH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJU
cmVlQXNUZXh0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUcmVlQXNUZXh0
LmNwcAppbmRleCBlMmI2YWZiLi5iYzEyNzdmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVyVHJlZUFzVGV4dC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlclRyZWVBc1RleHQuY3BwCkBAIC01MjEsOCArNTIxLDggQEAgc3RhdGljIHZvaWQg
d3JpdGVUZXh0UnVuKFRleHRTdHJlYW0mIHRzLCBjb25zdCBSZW5kZXJUZXh0JiBvLCBjb25zdCBJ
bmxpbmVUZXh0Qm8KIHZvaWQgd3JpdGUoVGV4dFN0cmVhbSYgdHMsIGNvbnN0IFJlbmRlck9iamVj
dCYgbywgaW50IGluZGVudCwgUmVuZGVyQXNUZXh0QmVoYXZpb3IgYmVoYXZpb3IpCiB7CiAjaWYg
RU5BQkxFKFNWRykKLSAgICBpZiAoby5pc1NWR1BhdGgoKSkgewotICAgICAgICB3cml0ZSh0cywg
KnRvUmVuZGVyU1ZHUGF0aCgmbyksIGluZGVudCk7CisgICAgaWYgKG8uaXNTVkdTaGFwZSgpKSB7
CisgICAgICAgIHdyaXRlKHRzLCAqdG9SZW5kZXJTVkdTaGFwZSgmbyksIGluZGVudCk7CiAgICAg
ICAgIHJldHVybjsKICAgICB9CiAgICAgaWYgKG8uaXNTVkdHcmFkaWVudFN0b3AoKSkgewpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdBbGxJbk9uZS5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR0FsbEluT25lLmNwcApp
bmRleCA5ZWEzYmU1Li4yOTY5MDA4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvc3ZnL1JlbmRlclNWR0FsbEluT25lLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvc3ZnL1JlbmRlclNWR0FsbEluT25lLmNwcApAQCAtMzUsNiArMzUsNyBAQAogI2luY2x1ZGUg
IlJlbmRlclNWR0lubGluZVRleHQuY3BwIgogI2luY2x1ZGUgIlJlbmRlclNWR01vZGVsT2JqZWN0
LmNwcCIKICNpbmNsdWRlICJSZW5kZXJTVkdQYXRoLmNwcCIKKyNpbmNsdWRlICJSZW5kZXJTVkdS
ZWN0LmNwcCIKICNpbmNsdWRlICJSZW5kZXJTVkdSZXNvdXJjZS5jcHAiCiAjaW5jbHVkZSAiUmVu
ZGVyU1ZHUmVzb3VyY2VDbGlwcGVyLmNwcCIKICNpbmNsdWRlICJSZW5kZXJTVkdSZXNvdXJjZUNv
bnRhaW5lci5jcHAiCkBAIC00OSw2ICs1MCw3IEBACiAjaW5jbHVkZSAiUmVuZGVyU1ZHUmVzb3Vy
Y2VTb2xpZENvbG9yLmNwcCIKICNpbmNsdWRlICJSZW5kZXJTVkdSb290LmNwcCIKICNpbmNsdWRl
ICJSZW5kZXJTVkdTaGFkb3dUcmVlUm9vdENvbnRhaW5lci5jcHAiCisjaW5jbHVkZSAiUmVuZGVy
U1ZHU2hhcGUuY3BwIgogI2luY2x1ZGUgIlJlbmRlclNWR1RTcGFuLmNwcCIKICNpbmNsdWRlICJS
ZW5kZXJTVkdUZXh0LmNwcCIKICNpbmNsdWRlICJSZW5kZXJTVkdUZXh0UGF0aC5jcHAiCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR01vZGVsT2JqZWN0
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHTW9kZWxPYmplY3Qu
Y3BwCmluZGV4IGMyZTNmZGYuLmY3ZDdkY2EgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9zdmcvUmVuZGVyU1ZHTW9kZWxPYmplY3QuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHTW9kZWxPYmplY3QuY3BwCkBAIC0xNTQsNyArMTU0LDcg
QEAgc3RhdGljIGJvb2wgaW50ZXJzZWN0c0FsbG93aW5nRW1wdHkoY29uc3QgRmxvYXRSZWN0JiBy
LCBjb25zdCBGbG9hdFJlY3QmIG90aGVyKQogLy8gaW1hZ2UsIGxpbmUsIHBhdGgsIHBvbHlnb24s
IHBvbHlsaW5lLCByZWN0LCB0ZXh0IGFuZCB1c2UuCiBzdGF0aWMgYm9vbCBpc0dyYXBoaWNzRWxl
bWVudChSZW5kZXJPYmplY3QqIHJlbmRlcmVyKQogewotICAgIHJldHVybiByZW5kZXJlci0+aXNT
VkdQYXRoKCkgfHwgcmVuZGVyZXItPmlzU1ZHVGV4dCgpIHx8IHJlbmRlcmVyLT5pc1NWR0ltYWdl
KCkgfHwgcmVuZGVyZXItPmlzU1ZHU2hhZG93VHJlZVJvb3RDb250YWluZXIoKTsKKyAgICByZXR1
cm4gcmVuZGVyZXItPmlzU1ZHU2hhcGUoKSB8fCByZW5kZXJlci0+aXNTVkdUZXh0KCkgfHwgcmVu
ZGVyZXItPmlzU1ZHSW1hZ2UoKSB8fCByZW5kZXJlci0+aXNTVkdTaGFkb3dUcmVlUm9vdENvbnRh
aW5lcigpOwogfQogCiBib29sIFJlbmRlclNWR01vZGVsT2JqZWN0OjpjaGVja0ludGVyc2VjdGlv
bihSZW5kZXJPYmplY3QqIHJlbmRlcmVyLCBjb25zdCBGbG9hdFJlY3QmIHJlY3QpCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1BhdGguY3BwIGIvU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdQYXRoLmNwcAppbmRleCBiN2FkN2Ey
Li5lN2E3MmEwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRl
clNWR1BhdGguY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZH
UGF0aC5jcHAKQEAgLTYsNiArNiw4IEBACiAgKiBDb3B5cmlnaHQgKEMpIDIwMDkgRGlyayBTY2h1
bHplIDxrcml0QHdlYmtpdC5vcmc+CiAgKiBDb3B5cmlnaHQgKEMpIFJlc2VhcmNoIEluIE1vdGlv
biBMaW1pdGVkIDIwMTAuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKiBDb3B5cmlnaHQgKEMpIDIw
MDkgSmVmZiBTY2hpbGxlciA8Y29kZWRyZWFkQGdtYWlsLmNvbT4KKyAqIENvcHlyaWdodCAoQykg
MjAxMSBSZW5hdGEgSG9kb3ZhbiA8cmVuaUB3ZWJraXQub3JnPgorICogQ29weXJpZ2h0IChDKSAy
MDExIFVuaXZlcnNpdHkgb2YgU3plZ2VkCiAgKgogICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29m
dHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICogbW9kaWZ5IGl0IHVuZGVy
IHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKQEAgLTI4LDUwICsz
MCwxMyBAQAogI2lmIEVOQUJMRShTVkcpCiAjaW5jbHVkZSAiUmVuZGVyU1ZHUGF0aC5oIgogCi0j
aW5jbHVkZSAiRmxvYXRQb2ludC5oIgotI2luY2x1ZGUgIkZsb2F0UXVhZC5oIgotI2luY2x1ZGUg
IkdyYXBoaWNzQ29udGV4dC5oIgotI2luY2x1ZGUgIkhpdFRlc3RSZXF1ZXN0LmgiCi0jaW5jbHVk
ZSAiTGF5b3V0UmVwYWludGVyLmgiCi0jaW5jbHVkZSAiUG9pbnRlckV2ZW50c0hpdFJ1bGVzLmgi
Ci0jaW5jbHVkZSAiUmVuZGVyU1ZHQ29udGFpbmVyLmgiCi0jaW5jbHVkZSAiUmVuZGVyU1ZHUmVz
b3VyY2VNYXJrZXIuaCIKLSNpbmNsdWRlICJSZW5kZXJTVkdSZXNvdXJjZVNvbGlkQ29sb3IuaCIK
LSNpbmNsdWRlICJTVkdSZW5kZXJTdXBwb3J0LmgiCi0jaW5jbHVkZSAiU1ZHUmVzb3VyY2VzLmgi
CisjaW5jbHVkZSAiU1ZHUGF0aEVsZW1lbnQuaCIKICNpbmNsdWRlICJTVkdTdHlsZWRUcmFuc2Zv
cm1hYmxlRWxlbWVudC5oIgotI2luY2x1ZGUgIlNWR1RyYW5zZm9ybUxpc3QuaCIKLSNpbmNsdWRl
ICJTVkdVUklSZWZlcmVuY2UuaCIKLSNpbmNsdWRlICJTdHJva2VTdHlsZUFwcGxpZXIuaCIKLSNp
bmNsdWRlIDx3dGYvTWF0aEV4dHJhcy5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLWNsYXNz
IEJvdW5kaW5nUmVjdFN0cm9rZVN0eWxlQXBwbGllciA6IHB1YmxpYyBTdHJva2VTdHlsZUFwcGxp
ZXIgewotcHVibGljOgotICAgIEJvdW5kaW5nUmVjdFN0cm9rZVN0eWxlQXBwbGllcihjb25zdCBS
ZW5kZXJPYmplY3QqIG9iamVjdCwgUmVuZGVyU3R5bGUqIHN0eWxlKQotICAgICAgICA6IG1fb2Jq
ZWN0KG9iamVjdCkKLSAgICAgICAgLCBtX3N0eWxlKHN0eWxlKQotICAgIHsKLSAgICAgICAgQVNT
RVJUKHN0eWxlKTsKLSAgICAgICAgQVNTRVJUKG9iamVjdCk7Ci0gICAgfQotCi0gICAgdm9pZCBz
dHJva2VTdHlsZShHcmFwaGljc0NvbnRleHQqIGdjKQotICAgIHsKLSAgICAgICAgU1ZHUmVuZGVy
U3VwcG9ydDo6YXBwbHlTdHJva2VTdHlsZVRvQ29udGV4dChnYywgbV9zdHlsZSwgbV9vYmplY3Qp
OwotICAgIH0KLQotcHJpdmF0ZToKLSAgICBjb25zdCBSZW5kZXJPYmplY3QqIG1fb2JqZWN0Owot
ICAgIFJlbmRlclN0eWxlKiBtX3N0eWxlOwotfTsKLQogUmVuZGVyU1ZHUGF0aDo6UmVuZGVyU1ZH
UGF0aChTVkdTdHlsZWRUcmFuc2Zvcm1hYmxlRWxlbWVudCogbm9kZSkKLSAgICA6IFJlbmRlclNW
R01vZGVsT2JqZWN0KG5vZGUpCi0gICAgLCBtX25lZWRzQm91bmRhcmllc1VwZGF0ZShmYWxzZSkg
Ly8gZGVmYXVsdCBpcyBmYWxzZSwgdGhlIGNhY2hlZCByZWN0cyBhcmUgZW1wdHkgZnJvbSB0aGUg
YmVnaW5uaW5nCi0gICAgLCBtX25lZWRzUGF0aFVwZGF0ZSh0cnVlKSAvLyBkZWZhdWx0IGlzIHRy
dWUsIHNvIHdlIGdyYWIgYSBQYXRoIG9iamVjdCBvbmNlIGZyb20gU1ZHU3R5bGVkVHJhbnNmb3Jt
YWJsZUVsZW1lbnQKLSAgICAsIG1fbmVlZHNUcmFuc2Zvcm1VcGRhdGUodHJ1ZSkgLy8gZGVmYXVs
dCBpcyB0cnVlLCBzbyB3ZSBncmFiIGEgQWZmaW5lVHJhbnNmb3JtIG9iamVjdCBvbmNlIGZyb20g
U1ZHU3R5bGVkVHJhbnNmb3JtYWJsZUVsZW1lbnQKKyAgICA6IFJlbmRlclNWR1NoYXBlKG5vZGUp
CiB7CiB9CiAKQEAgLTc5LDMxNCArNDQsMTYgQEAgUmVuZGVyU1ZHUGF0aDo6flJlbmRlclNWR1Bh
dGgoKQogewogfQogCi1ib29sIFJlbmRlclNWR1BhdGg6OmZpbGxDb250YWlucyhjb25zdCBGbG9h
dFBvaW50JiBwb2ludCwgYm9vbCByZXF1aXJlc0ZpbGwsIFdpbmRSdWxlIGZpbGxSdWxlKQotewot
ICAgIGlmICghbV9maWxsQm91bmRpbmdCb3guY29udGFpbnMocG9pbnQpKQotICAgICAgICByZXR1
cm4gZmFsc2U7Ci0KLSAgICBDb2xvciBmYWxsYmFja0NvbG9yOwotICAgIGlmIChyZXF1aXJlc0Zp
bGwgJiYgIVJlbmRlclNWR1Jlc291cmNlOjpmaWxsUGFpbnRpbmdSZXNvdXJjZSh0aGlzLCBzdHls
ZSgpLCBmYWxsYmFja0NvbG9yKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgcmV0dXJu
IG1fcGF0aC5jb250YWlucyhwb2ludCwgZmlsbFJ1bGUpOwotfQotCi1ib29sIFJlbmRlclNWR1Bh
dGg6OnN0cm9rZUNvbnRhaW5zKGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50LCBib29sIHJlcXVpcmVz
U3Ryb2tlKQotewotICAgIGlmICghbV9zdHJva2VBbmRNYXJrZXJCb3VuZGluZ0JveC5jb250YWlu
cyhwb2ludCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIENvbG9yIGZhbGxiYWNrQ29s
b3I7Ci0gICAgaWYgKHJlcXVpcmVzU3Ryb2tlICYmICFSZW5kZXJTVkdSZXNvdXJjZTo6c3Ryb2tl
UGFpbnRpbmdSZXNvdXJjZSh0aGlzLCBzdHlsZSgpLCBmYWxsYmFja0NvbG9yKSkKLSAgICAgICAg
cmV0dXJuIGZhbHNlOwotCi0gICAgaWYgKHNob3VsZFN0cm9rZVplcm9MZW5ndGhTdWJwYXRoKCkp
Ci0gICAgICAgIHJldHVybiB6ZXJvTGVuZ3RoU3VicGF0aFJlY3QoKS5jb250YWlucyhwb2ludCk7
Ci0KLSAgICBCb3VuZGluZ1JlY3RTdHJva2VTdHlsZUFwcGxpZXIgc3Ryb2tlU3R5bGUodGhpcywg
c3R5bGUoKSk7Ci0gICAgcmV0dXJuIG1fcGF0aC5zdHJva2VDb250YWlucygmc3Ryb2tlU3R5bGUs
IHBvaW50KTsKLX0KLQotdm9pZCBSZW5kZXJTVkdQYXRoOjpsYXlvdXQoKQotewotICAgIExheW91
dFJlcGFpbnRlciByZXBhaW50ZXIoKnRoaXMsIGNoZWNrRm9yUmVwYWludER1cmluZ0xheW91dCgp
ICYmIHNlbGZOZWVkc0xheW91dCgpKTsKLSAgICBTVkdTdHlsZWRUcmFuc2Zvcm1hYmxlRWxlbWVu
dCogZWxlbWVudCA9IHN0YXRpY19jYXN0PFNWR1N0eWxlZFRyYW5zZm9ybWFibGVFbGVtZW50Kj4o
bm9kZSgpKTsKLQotICAgIGJvb2wgdXBkYXRlQ2FjaGVkQm91bmRhcmllc0luUGFyZW50cyA9IGZh
bHNlOwotCi0gICAgYm9vbCBuZWVkc1BhdGhVcGRhdGUgPSBtX25lZWRzUGF0aFVwZGF0ZTsKLSAg
ICBpZiAobmVlZHNQYXRoVXBkYXRlKSB7Ci0gICAgICAgIG1fcGF0aC5jbGVhcigpOwotICAgICAg
ICBlbGVtZW50LT50b1BhdGhEYXRhKG1fcGF0aCk7Ci0gICAgICAgIG1fbmVlZHNQYXRoVXBkYXRl
ID0gZmFsc2U7Ci0gICAgICAgIHVwZGF0ZUNhY2hlZEJvdW5kYXJpZXNJblBhcmVudHMgPSB0cnVl
OwotICAgIH0KLQotICAgIGlmIChtX25lZWRzVHJhbnNmb3JtVXBkYXRlKSB7Ci0gICAgICAgIG1f
bG9jYWxUcmFuc2Zvcm0gPSBlbGVtZW50LT5hbmltYXRlZExvY2FsVHJhbnNmb3JtKCk7Ci0gICAg
ICAgIG1fbmVlZHNUcmFuc2Zvcm1VcGRhdGUgPSBmYWxzZTsKLSAgICAgICAgdXBkYXRlQ2FjaGVk
Qm91bmRhcmllc0luUGFyZW50cyA9IHRydWU7Ci0gICAgfQotCi0gICAgaWYgKG1fbmVlZHNCb3Vu
ZGFyaWVzVXBkYXRlKQotICAgICAgICB1cGRhdGVDYWNoZWRCb3VuZGFyaWVzSW5QYXJlbnRzID0g
dHJ1ZTsKLQotICAgIC8vIEludmFsaWRhdGUgYWxsIHJlc291cmNlcyBvZiB0aGlzIGNsaWVudCBp
ZiBvdXIgbGF5b3V0IGNoYW5nZWQuCi0gICAgaWYgKG1fZXZlckhhZExheW91dCAmJiBzZWxmTmVl
ZHNMYXlvdXQoKSkgewotICAgICAgICBTVkdSZXNvdXJjZXNDYWNoZTo6Y2xpZW50TGF5b3V0Q2hh
bmdlZCh0aGlzKTsKLSAgICAgICAgbV9tYXJrZXJMYXlvdXRJbmZvLmNsZWFyKCk7Ci0gICAgfQot
Ci0gICAgLy8gQXQgdGhpcyBwb2ludCBMYXlvdXRSZXBhaW50ZXIgYWxyZWFkeSBncmFiYmVkIHRo
ZSBvbGQgYm91bmRzLAotICAgIC8vIHJlY2FsY3VsYXRlIHRoZW0gbm93IHNvIHJlcGFpbnRBZnRl
ckxheW91dCgpIHVzZXMgdGhlIG5ldyBib3VuZHMuCi0gICAgaWYgKG5lZWRzUGF0aFVwZGF0ZSB8
fCBtX25lZWRzQm91bmRhcmllc1VwZGF0ZSkgewotICAgICAgICB1cGRhdGVDYWNoZWRCb3VuZGFy
aWVzKCk7Ci0gICAgICAgIG1fbmVlZHNCb3VuZGFyaWVzVXBkYXRlID0gZmFsc2U7Ci0gICAgfQot
Ci0gICAgLy8gSWYgb3VyIGJvdW5kcyBjaGFuZ2VkLCBub3RpZnkgdGhlIHBhcmVudHMuCi0gICAg
aWYgKHVwZGF0ZUNhY2hlZEJvdW5kYXJpZXNJblBhcmVudHMpCi0gICAgICAgIFJlbmRlclNWR01v
ZGVsT2JqZWN0OjpzZXROZWVkc0JvdW5kYXJpZXNVcGRhdGUoKTsKLQotICAgIHJlcGFpbnRlci5y
ZXBhaW50QWZ0ZXJMYXlvdXQoKTsKLSAgICBzZXROZWVkc0xheW91dChmYWxzZSk7Ci19Ci0KLWJv
b2wgUmVuZGVyU1ZHUGF0aDo6c2hvdWxkU3Ryb2tlWmVyb0xlbmd0aFN1YnBhdGgoKSBjb25zdAot
ewotICAgIC8vIFNwZWMoMTEuNCk6IEFueSB6ZXJvIGxlbmd0aCBzdWJwYXRoIHNoYWxsIG5vdCBi
ZSBzdHJva2VkIGlmIHRoZSDigJhzdHJva2UtbGluZWNhcOKAmSBwcm9wZXJ0eSBoYXMgYSB2YWx1
ZSBvZiBidXR0Ci0gICAgLy8gYnV0IHNoYWxsIGJlIHN0cm9rZWQgaWYgdGhlIOKAmHN0cm9rZS1s
aW5lY2Fw4oCZIHByb3BlcnR5IGhhcyBhIHZhbHVlIG9mIHJvdW5kIG9yIHNxdWFyZQotICAgIHJl
dHVybiBzdHlsZSgpLT5zdmdTdHlsZSgpLT5oYXNTdHJva2UoKSAmJiBzdHlsZSgpLT5zdmdTdHls
ZSgpLT5jYXBTdHlsZSgpICE9IEJ1dHRDYXAgJiYgIW1fZmlsbEJvdW5kaW5nQm94LndpZHRoKCkg
JiYgIW1fZmlsbEJvdW5kaW5nQm94LmhlaWdodCgpOwotfQotCi1GbG9hdFJlY3QgUmVuZGVyU1ZH
UGF0aDo6emVyb0xlbmd0aFN1YnBhdGhSZWN0KCkgY29uc3QKLXsKLSAgICBTVkdFbGVtZW50KiBz
dmdFbGVtZW50ID0gc3RhdGljX2Nhc3Q8U1ZHRWxlbWVudCo+KG5vZGUoKSk7Ci0gICAgZmxvYXQg
c3Ryb2tlV2lkdGggPSBzdHlsZSgpLT5zdmdTdHlsZSgpLT5zdHJva2VXaWR0aCgpLnZhbHVlKHN2
Z0VsZW1lbnQpOwotICAgIHJldHVybiBGbG9hdFJlY3QobV9maWxsQm91bmRpbmdCb3gueCgpIC0g
c3Ryb2tlV2lkdGggLyAyLCBtX2ZpbGxCb3VuZGluZ0JveC55KCkgLSBzdHJva2VXaWR0aCAvIDIs
IHN0cm9rZVdpZHRoLCBzdHJva2VXaWR0aCk7Ci19Ci0KLXZvaWQgUmVuZGVyU1ZHUGF0aDo6c2V0
dXBTcXVhcmVDYXBQYXRoKFBhdGgqJiB1c2VQYXRoLCBpbnQmIGFwcGx5TW9kZSkKLXsKLSAgICAv
LyBTcGVjKDExLjQpOiBBbnkgemVybyBsZW5ndGggc3VicGF0aCBzaGFsbCBub3QgYmUgc3Ryb2tl
ZCBpZiB0aGUg4oCYc3Ryb2tlLWxpbmVjYXDigJkgcHJvcGVydHkgaGFzIGEgdmFsdWUgb2YgYnV0
dAotICAgIC8vIGJ1dCBzaGFsbCBiZSBzdHJva2VkIGlmIHRoZSDigJhzdHJva2UtbGluZWNhcOKA
mSBwcm9wZXJ0eSBoYXMgYSB2YWx1ZSBvZiByb3VuZCBvciBzcXVhcmUKLSAgICBERUZJTkVfU1RB
VElDX0xPQ0FMKFBhdGgsIHRlbXBQYXRoLCAoKSk7Ci0KLSAgICBhcHBseU1vZGUgPSBBcHBseVRv
RmlsbE1vZGU7Ci0gICAgdXNlUGF0aCA9ICZ0ZW1wUGF0aDsKLSAgICB1c2VQYXRoLT5jbGVhcigp
OwotICAgIGlmIChzdHlsZSgpLT5zdmdTdHlsZSgpLT5jYXBTdHlsZSgpID09IFNxdWFyZUNhcCkK
LSAgICAgICAgdXNlUGF0aC0+YWRkUmVjdCh6ZXJvTGVuZ3RoU3VicGF0aFJlY3QoKSk7Ci0gICAg
ZWxzZQotICAgICAgICB1c2VQYXRoLT5hZGRFbGxpcHNlKHplcm9MZW5ndGhTdWJwYXRoUmVjdCgp
KTsKLX0KLQotYm9vbCBSZW5kZXJTVkdQYXRoOjpzZXR1cE5vblNjYWxpbmdTdHJva2VQYXRoKFBh
dGgqJiB1c2VQYXRoLCBHcmFwaGljc0NvbnRleHRTdGF0ZVNhdmVyJiBzdGF0ZVNhdmVyKQordm9p
ZCBSZW5kZXJTVkdQYXRoOjppbmZsYXRlV2l0aE1hcmtlckJvdW5kcygpCiB7Ci0gICAgREVGSU5F
X1NUQVRJQ19MT0NBTChQYXRoLCB0ZW1wUGF0aCwgKCkpOwotCi0gICAgU1ZHU3R5bGVkVHJhbnNm
b3JtYWJsZUVsZW1lbnQqIGVsZW1lbnQgPSBzdGF0aWNfY2FzdDxTVkdTdHlsZWRUcmFuc2Zvcm1h
YmxlRWxlbWVudCo+KG5vZGUoKSk7Ci0gICAgQWZmaW5lVHJhbnNmb3JtIG5vblNjYWxpbmdTdHJv
a2VUcmFuc2Zvcm0gPSBlbGVtZW50LT5nZXRTY3JlZW5DVE0oU1ZHTG9jYXRhYmxlOjpEaXNhbGxv
d1N0eWxlVXBkYXRlKTsKLSAgICBpZiAoIW5vblNjYWxpbmdTdHJva2VUcmFuc2Zvcm0uaXNJbnZl
cnRpYmxlKCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIHRlbXBQYXRoID0gbV9wYXRo
OwotICAgIHVzZVBhdGggPSAmdGVtcFBhdGg7Ci0gICAgdGVtcFBhdGgudHJhbnNmb3JtKG5vblNj
YWxpbmdTdHJva2VUcmFuc2Zvcm0pOwotCi0gICAgc3RhdGVTYXZlci5zYXZlKCk7Ci0gICAgc3Rh
dGVTYXZlci5jb250ZXh0KCktPmNvbmNhdENUTShub25TY2FsaW5nU3Ryb2tlVHJhbnNmb3JtLmlu
dmVyc2UoKSk7Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLXZvaWQgUmVuZGVyU1ZHUGF0aDo6Zmls
bEFuZFN0cm9rZVBhdGgoR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0KQotewotICAgIFJlbmRlclN0
eWxlKiBzdHlsZSA9IHRoaXMtPnN0eWxlKCk7Ci0KLSAgICBDb2xvciBmYWxsYmFja0NvbG9yOwot
ICAgIGlmIChSZW5kZXJTVkdSZXNvdXJjZSogZmlsbFBhaW50aW5nUmVzb3VyY2UgPSBSZW5kZXJT
VkdSZXNvdXJjZTo6ZmlsbFBhaW50aW5nUmVzb3VyY2UodGhpcywgc3R5bGUsIGZhbGxiYWNrQ29s
b3IpKSB7Ci0gICAgICAgIGlmIChmaWxsUGFpbnRpbmdSZXNvdXJjZS0+YXBwbHlSZXNvdXJjZSh0
aGlzLCBzdHlsZSwgY29udGV4dCwgQXBwbHlUb0ZpbGxNb2RlKSkKLSAgICAgICAgICAgIGZpbGxQ
YWludGluZ1Jlc291cmNlLT5wb3N0QXBwbHlSZXNvdXJjZSh0aGlzLCBjb250ZXh0LCBBcHBseVRv
RmlsbE1vZGUsICZtX3BhdGgpOwotICAgICAgICBlbHNlIGlmIChmYWxsYmFja0NvbG9yLmlzVmFs
aWQoKSkgewotICAgICAgICAgICAgUmVuZGVyU1ZHUmVzb3VyY2VTb2xpZENvbG9yKiBmYWxsYmFj
a1Jlc291cmNlID0gUmVuZGVyU1ZHUmVzb3VyY2U6OnNoYXJlZFNvbGlkUGFpbnRpbmdSZXNvdXJj
ZSgpOwotICAgICAgICAgICAgZmFsbGJhY2tSZXNvdXJjZS0+c2V0Q29sb3IoZmFsbGJhY2tDb2xv
cik7Ci0gICAgICAgICAgICBpZiAoZmFsbGJhY2tSZXNvdXJjZS0+YXBwbHlSZXNvdXJjZSh0aGlz
LCBzdHlsZSwgY29udGV4dCwgQXBwbHlUb0ZpbGxNb2RlKSkKLSAgICAgICAgICAgICAgICBmYWxs
YmFja1Jlc291cmNlLT5wb3N0QXBwbHlSZXNvdXJjZSh0aGlzLCBjb250ZXh0LCBBcHBseVRvRmls
bE1vZGUsICZtX3BhdGgpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgZmFsbGJhY2tDb2xvciA9
IENvbG9yKCk7Ci0gICAgUmVuZGVyU1ZHUmVzb3VyY2UqIHN0cm9rZVBhaW50aW5nUmVzb3VyY2Ug
PSBSZW5kZXJTVkdSZXNvdXJjZTo6c3Ryb2tlUGFpbnRpbmdSZXNvdXJjZSh0aGlzLCBzdHlsZSwg
ZmFsbGJhY2tDb2xvcik7Ci0gICAgaWYgKCFzdHJva2VQYWludGluZ1Jlc291cmNlKQotICAgICAg
ICByZXR1cm47Ci0KLSAgICBQYXRoKiB1c2VQYXRoID0gJm1fcGF0aDsKLSAgICBpbnQgYXBwbHlN
b2RlID0gQXBwbHlUb1N0cm9rZU1vZGU7Ci0KLSAgICBib29sIG5vblNjYWxpbmdTdHJva2UgPSBz
dHlsZS0+c3ZnU3R5bGUoKS0+dmVjdG9yRWZmZWN0KCkgPT0gVkVfTk9OX1NDQUxJTkdfU1RST0tF
OwotCi0gICAgR3JhcGhpY3NDb250ZXh0U3RhdGVTYXZlciBzdGF0ZVNhdmVyKCpjb250ZXh0LCBm
YWxzZSk7Ci0KLSAgICAvLyBTcGVjKDExLjQpOiBBbnkgemVybyBsZW5ndGggc3VicGF0aCBzaGFs
bCBub3QgYmUgc3Ryb2tlZCBpZiB0aGUg4oCYc3Ryb2tlLWxpbmVjYXDigJkgcHJvcGVydHkgaGFz
IGEgdmFsdWUgb2YgYnV0dAotICAgIC8vIGJ1dCBzaGFsbCBiZSBzdHJva2VkIGlmIHRoZSDigJhz
dHJva2UtbGluZWNhcOKAmSBwcm9wZXJ0eSBoYXMgYSB2YWx1ZSBvZiByb3VuZCBvciBzcXVhcmUK
LSAgICAvLyBGSVhNRTogdGhpcyBkb2VzIG5vdCB3b3JrIGZvciB6ZXJvLWxlbmd0aCBzdWJwYXRo
cywgb25seSB3aGVuIHRvdGFsIHBhdGggaXMgemVyby1sZW5ndGgKLSAgICBpZiAoc2hvdWxkU3Ry
b2tlWmVyb0xlbmd0aFN1YnBhdGgoKSkKLSAgICAgICAgc2V0dXBTcXVhcmVDYXBQYXRoKHVzZVBh
dGgsIGFwcGx5TW9kZSk7Ci0gICAgZWxzZSBpZiAobm9uU2NhbGluZ1N0cm9rZSkgewotICAgICAg
IGlmICghc2V0dXBOb25TY2FsaW5nU3Ryb2tlUGF0aCh1c2VQYXRoLCBzdGF0ZVNhdmVyKSkKLSAg
ICAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIGlmIChzdHJva2VQYWludGluZ1Jlc291cmNl
LT5hcHBseVJlc291cmNlKHRoaXMsIHN0eWxlLCBjb250ZXh0LCBhcHBseU1vZGUpKQotICAgICAg
ICBzdHJva2VQYWludGluZ1Jlc291cmNlLT5wb3N0QXBwbHlSZXNvdXJjZSh0aGlzLCBjb250ZXh0
LCBhcHBseU1vZGUsIHVzZVBhdGgpOwotICAgIGVsc2UgaWYgKGZhbGxiYWNrQ29sb3IuaXNWYWxp
ZCgpKSB7Ci0gICAgICAgIFJlbmRlclNWR1Jlc291cmNlU29saWRDb2xvciogZmFsbGJhY2tSZXNv
dXJjZSA9IFJlbmRlclNWR1Jlc291cmNlOjpzaGFyZWRTb2xpZFBhaW50aW5nUmVzb3VyY2UoKTsK
LSAgICAgICAgZmFsbGJhY2tSZXNvdXJjZS0+c2V0Q29sb3IoZmFsbGJhY2tDb2xvcik7Ci0gICAg
ICAgIGlmIChmYWxsYmFja1Jlc291cmNlLT5hcHBseVJlc291cmNlKHRoaXMsIHN0eWxlLCBjb250
ZXh0LCBhcHBseU1vZGUpKQotICAgICAgICAgICAgZmFsbGJhY2tSZXNvdXJjZS0+cG9zdEFwcGx5
UmVzb3VyY2UodGhpcywgY29udGV4dCwgYXBwbHlNb2RlLCB1c2VQYXRoKTsKLSAgICB9Ci19Ci0K
LXZvaWQgUmVuZGVyU1ZHUGF0aDo6cGFpbnQoUGFpbnRJbmZvJiBwYWludEluZm8sIGNvbnN0IExh
eW91dFBvaW50JikKLXsKLSAgICBpZiAocGFpbnRJbmZvLmNvbnRleHQtPnBhaW50aW5nRGlzYWJs
ZWQoKSB8fCBzdHlsZSgpLT52aXNpYmlsaXR5KCkgPT0gSElEREVOIHx8IG1fcGF0aC5pc0VtcHR5
KCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIEZsb2F0UmVjdCBib3VuZGluZ0JveCA9IHJlcGFp
bnRSZWN0SW5Mb2NhbENvb3JkaW5hdGVzKCk7Ci0gICAgaWYgKCFTVkdSZW5kZXJTdXBwb3J0Ojpw
YWludEluZm9JbnRlcnNlY3RzUmVwYWludFJlY3QoYm91bmRpbmdCb3gsIG1fbG9jYWxUcmFuc2Zv
cm0sIHBhaW50SW5mbykpCi0gICAgICAgIHJldHVybjsKLQotICAgIFBhaW50SW5mbyBjaGlsZFBh
aW50SW5mbyhwYWludEluZm8pOwotICAgIGJvb2wgZHJhd3NPdXRsaW5lID0gc3R5bGUoKS0+b3V0
bGluZVdpZHRoKCkgJiYgKGNoaWxkUGFpbnRJbmZvLnBoYXNlID09IFBhaW50UGhhc2VPdXRsaW5l
IHx8IGNoaWxkUGFpbnRJbmZvLnBoYXNlID09IFBhaW50UGhhc2VTZWxmT3V0bGluZSk7Ci0gICAg
aWYgKGRyYXdzT3V0bGluZSB8fCBjaGlsZFBhaW50SW5mby5waGFzZSA9PSBQYWludFBoYXNlRm9y
ZWdyb3VuZCkgewotICAgICAgICBHcmFwaGljc0NvbnRleHRTdGF0ZVNhdmVyIHN0YXRlU2F2ZXIo
KmNoaWxkUGFpbnRJbmZvLmNvbnRleHQpOwotICAgICAgICBjaGlsZFBhaW50SW5mby5hcHBseVRy
YW5zZm9ybShtX2xvY2FsVHJhbnNmb3JtKTsKLQotICAgICAgICBpZiAoY2hpbGRQYWludEluZm8u
cGhhc2UgPT0gUGFpbnRQaGFzZUZvcmVncm91bmQpIHsKLSAgICAgICAgICAgIFBhaW50SW5mbyBz
YXZlZEluZm8oY2hpbGRQYWludEluZm8pOwotCi0gICAgICAgICAgICBpZiAoU1ZHUmVuZGVyU3Vw
cG9ydDo6cHJlcGFyZVRvUmVuZGVyU1ZHQ29udGVudCh0aGlzLCBjaGlsZFBhaW50SW5mbykpIHsK
LSAgICAgICAgICAgICAgICBjb25zdCBTVkdSZW5kZXJTdHlsZSogc3ZnU3R5bGUgPSBzdHlsZSgp
LT5zdmdTdHlsZSgpOwotICAgICAgICAgICAgICAgIGlmIChzdmdTdHlsZS0+c2hhcGVSZW5kZXJp
bmcoKSA9PSBTUl9DUklTUEVER0VTKQotICAgICAgICAgICAgICAgICAgICBjaGlsZFBhaW50SW5m
by5jb250ZXh0LT5zZXRTaG91bGRBbnRpYWxpYXMoZmFsc2UpOwotCi0gICAgICAgICAgICAgICAg
ZmlsbEFuZFN0cm9rZVBhdGgoY2hpbGRQYWludEluZm8uY29udGV4dCk7Ci0KLSAgICAgICAgICAg
ICAgICBpZiAoc3ZnU3R5bGUtPmhhc01hcmtlcnMoKSkKLSAgICAgICAgICAgICAgICAgICAgbV9t
YXJrZXJMYXlvdXRJbmZvLmRyYXdNYXJrZXJzKGNoaWxkUGFpbnRJbmZvKTsKLSAgICAgICAgICAg
IH0KLQotICAgICAgICAgICAgU1ZHUmVuZGVyU3VwcG9ydDo6ZmluaXNoUmVuZGVyU1ZHQ29udGVu
dCh0aGlzLCBjaGlsZFBhaW50SW5mbywgc2F2ZWRJbmZvLmNvbnRleHQpOwotICAgICAgICB9Ci0K
LSAgICAgICAgaWYgKGRyYXdzT3V0bGluZSkKLSAgICAgICAgICAgIHBhaW50T3V0bGluZShjaGls
ZFBhaW50SW5mby5jb250ZXh0LCBJbnRSZWN0KGJvdW5kaW5nQm94KSk7Ci0gICAgfQotfQotCi0v
LyBUaGlzIG1ldGhvZCBpcyBjYWxsZWQgZnJvbSBpbnNpZGUgcGFpbnRPdXRsaW5lKCkgc2luY2Ug
d2UgY2FsbCBwYWludE91dGxpbmUoKQotLy8gd2hpbGUgdHJhbnNmb3JtZWQgdG8gb3VyIGNvb3Jk
IHN5c3RlbSwgcmV0dXJuIGxvY2FsIGNvb3Jkcwotdm9pZCBSZW5kZXJTVkdQYXRoOjphZGRGb2N1
c1JpbmdSZWN0cyhWZWN0b3I8TGF5b3V0UmVjdD4mIHJlY3RzLCBjb25zdCBMYXlvdXRQb2ludCYp
IAotewotICAgIExheW91dFJlY3QgcmVjdCA9IGVuY2xvc2luZ0xheW91dFJlY3QocmVwYWludFJl
Y3RJbkxvY2FsQ29vcmRpbmF0ZXMoKSk7Ci0gICAgaWYgKCFyZWN0LmlzRW1wdHkoKSkKLSAgICAg
ICAgcmVjdHMuYXBwZW5kKHJlY3QpOwotfQotCi1ib29sIFJlbmRlclNWR1BhdGg6Om5vZGVBdEZs
b2F0UG9pbnQoY29uc3QgSGl0VGVzdFJlcXVlc3QmIHJlcXVlc3QsIEhpdFRlc3RSZXN1bHQmIHJl
c3VsdCwgY29uc3QgRmxvYXRQb2ludCYgcG9pbnRJblBhcmVudCwgSGl0VGVzdEFjdGlvbiBoaXRU
ZXN0QWN0aW9uKQotewotICAgIC8vIFdlIG9ubHkgZHJhdyBpbiB0aGUgZm9yZ3JvdW5kIHBoYXNl
LCBzbyB3ZSBvbmx5IGhpdC10ZXN0IHRoZW4uCi0gICAgaWYgKGhpdFRlc3RBY3Rpb24gIT0gSGl0
VGVzdEZvcmVncm91bmQpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIEZsb2F0UG9pbnQg
bG9jYWxQb2ludCA9IG1fbG9jYWxUcmFuc2Zvcm0uaW52ZXJzZSgpLm1hcFBvaW50KHBvaW50SW5Q
YXJlbnQpOwotCi0gICAgaWYgKCFTVkdSZW5kZXJTdXBwb3J0Ojpwb2ludEluQ2xpcHBpbmdBcmVh
KHRoaXMsIGxvY2FsUG9pbnQpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBQb2ludGVy
RXZlbnRzSGl0UnVsZXMgaGl0UnVsZXMoUG9pbnRlckV2ZW50c0hpdFJ1bGVzOjpTVkdfUEFUSF9I
SVRURVNUSU5HLCByZXF1ZXN0LCBzdHlsZSgpLT5wb2ludGVyRXZlbnRzKCkpOwotICAgIGJvb2wg
aXNWaXNpYmxlID0gKHN0eWxlKCktPnZpc2liaWxpdHkoKSA9PSBWSVNJQkxFKTsKLSAgICBpZiAo
aXNWaXNpYmxlIHx8ICFoaXRSdWxlcy5yZXF1aXJlVmlzaWJsZSkgewotICAgICAgICBjb25zdCBT
VkdSZW5kZXJTdHlsZSogc3ZnU3R5bGUgPSBzdHlsZSgpLT5zdmdTdHlsZSgpOwotICAgICAgICBX
aW5kUnVsZSBmaWxsUnVsZSA9IHN2Z1N0eWxlLT5maWxsUnVsZSgpOwotICAgICAgICBpZiAocmVx
dWVzdC5zdmdDbGlwQ29udGVudCgpKQotICAgICAgICAgICAgZmlsbFJ1bGUgPSBzdmdTdHlsZS0+
Y2xpcFJ1bGUoKTsKLSAgICAgICAgaWYgKChoaXRSdWxlcy5jYW5IaXRTdHJva2UgJiYgKHN2Z1N0
eWxlLT5oYXNTdHJva2UoKSB8fCAhaGl0UnVsZXMucmVxdWlyZVN0cm9rZSkgJiYgc3Ryb2tlQ29u
dGFpbnMobG9jYWxQb2ludCwgaGl0UnVsZXMucmVxdWlyZVN0cm9rZSkpCi0gICAgICAgICAgICB8
fCAoaGl0UnVsZXMuY2FuSGl0RmlsbCAmJiAoc3ZnU3R5bGUtPmhhc0ZpbGwoKSB8fCAhaGl0UnVs
ZXMucmVxdWlyZUZpbGwpICYmIGZpbGxDb250YWlucyhsb2NhbFBvaW50LCBoaXRSdWxlcy5yZXF1
aXJlRmlsbCwgZmlsbFJ1bGUpKSkgewotICAgICAgICAgICAgdXBkYXRlSGl0VGVzdFJlc3VsdChy
ZXN1bHQsIHJvdW5kZWRMYXlvdXRQb2ludChsb2NhbFBvaW50KSk7Ci0gICAgICAgICAgICByZXR1
cm4gdHJ1ZTsKLSAgICAgICAgfQotICAgIH0KLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLUZsb2F0
UmVjdCBSZW5kZXJTVkdQYXRoOjpjYWxjdWxhdGVNYXJrZXJCb3VuZHNJZk5lZWRlZCgpCi17Ci0g
ICAgU1ZHRWxlbWVudCogc3ZnRWxlbWVudCA9IHN0YXRpY19jYXN0PFNWR0VsZW1lbnQqPihub2Rl
KCkpOwotICAgIEFTU0VSVChzdmdFbGVtZW50ICYmIHN2Z0VsZW1lbnQtPmRvY3VtZW50KCkpOwot
ICAgIGlmICghc3ZnRWxlbWVudC0+aXNTdHlsZWQoKSkKLSAgICAgICAgcmV0dXJuIEZsb2F0UmVj
dCgpOwotCi0gICAgU1ZHU3R5bGVkRWxlbWVudCogc3R5bGVkRWxlbWVudCA9IHN0YXRpY19jYXN0
PFNWR1N0eWxlZEVsZW1lbnQqPihzdmdFbGVtZW50KTsKLSAgICBpZiAoIXN0eWxlZEVsZW1lbnQt
PnN1cHBvcnRzTWFya2VycygpKQotICAgICAgICByZXR1cm4gRmxvYXRSZWN0KCk7Ci0KLSAgICBj
b25zdCBTVkdSZW5kZXJTdHlsZSogc3ZnU3R5bGUgPSBzdHlsZSgpLT5zdmdTdHlsZSgpOwotICAg
IEFTU0VSVChzdmdTdHlsZS0+aGFzTWFya2VycygpKTsKLQotICAgIFNWR1Jlc291cmNlcyogcmVz
b3VyY2VzID0gU1ZHUmVzb3VyY2VzQ2FjaGU6OmNhY2hlZFJlc291cmNlc0ZvclJlbmRlck9iamVj
dCh0aGlzKTsKLSAgICBpZiAoIXJlc291cmNlcykKLSAgICAgICAgcmV0dXJuIEZsb2F0UmVjdCgp
OwotCi0gICAgUmVuZGVyU1ZHUmVzb3VyY2VNYXJrZXIqIG1hcmtlclN0YXJ0ID0gcmVzb3VyY2Vz
LT5tYXJrZXJTdGFydCgpOwotICAgIFJlbmRlclNWR1Jlc291cmNlTWFya2VyKiBtYXJrZXJNaWQg
PSByZXNvdXJjZXMtPm1hcmtlck1pZCgpOwotICAgIFJlbmRlclNWR1Jlc291cmNlTWFya2VyKiBt
YXJrZXJFbmQgPSByZXNvdXJjZXMtPm1hcmtlckVuZCgpOwotICAgIGlmICghbWFya2VyU3RhcnQg
JiYgIW1hcmtlck1pZCAmJiAhbWFya2VyRW5kKQotICAgICAgICByZXR1cm4gRmxvYXRSZWN0KCk7
Ci0KLSAgICByZXR1cm4gbV9tYXJrZXJMYXlvdXRJbmZvLmNhbGN1bGF0ZUJvdW5kYXJpZXMobWFy
a2VyU3RhcnQsIG1hcmtlck1pZCwgbWFya2VyRW5kLCBzdmdTdHlsZS0+c3Ryb2tlV2lkdGgoKS52
YWx1ZShzdmdFbGVtZW50KSwgbV9wYXRoKTsKLX0KLQotdm9pZCBSZW5kZXJTVkdQYXRoOjp1cGRh
dGVDYWNoZWRCb3VuZGFyaWVzKCkKLXsKLSAgICBpZiAobV9wYXRoLmlzRW1wdHkoKSkgewotICAg
ICAgICBtX2ZpbGxCb3VuZGluZ0JveCA9IEZsb2F0UmVjdCgpOwotICAgICAgICBtX3N0cm9rZUFu
ZE1hcmtlckJvdW5kaW5nQm94ID0gRmxvYXRSZWN0KCk7Ci0gICAgICAgIG1fcmVwYWludEJvdW5k
aW5nQm94ID0gRmxvYXRSZWN0KCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICAvLyBD
YWNoZSBfdW5jbGlwcGVkXyBmaWxsIGJvdW5kaW5nIGJveCwgdXNlZCBmb3IgY2FsY3VsYXRpb25z
IGluIHJlc291cmNlcwotICAgIG1fZmlsbEJvdW5kaW5nQm94ID0gbV9wYXRoLmJvdW5kaW5nUmVj
dCgpOwotCi0gICAgLy8gU3BlYygxMS40KTogQW55IHplcm8gbGVuZ3RoIHN1YnBhdGggc2hhbGwg
bm90IGJlIHN0cm9rZWQgaWYgdGhlIOKAmHN0cm9rZS1saW5lY2Fw4oCZIHByb3BlcnR5IGhhcyBh
IHZhbHVlIG9mIGJ1dHQKLSAgICAvLyBidXQgc2hhbGwgYmUgc3Ryb2tlZCBpZiB0aGUg4oCYc3Ry
b2tlLWxpbmVjYXDigJkgcHJvcGVydHkgaGFzIGEgdmFsdWUgb2Ygcm91bmQgb3Igc3F1YXJlCi0g
ICAgaWYgKHNob3VsZFN0cm9rZVplcm9MZW5ndGhTdWJwYXRoKCkpIHsKLSAgICAgICAgbV9zdHJv
a2VBbmRNYXJrZXJCb3VuZGluZ0JveCA9IHplcm9MZW5ndGhTdWJwYXRoUmVjdCgpOwotICAgICAg
ICAvLyBDYWNoZSBzbWFsbGVzdCBwb3NzaWJsZSByZXBhaW50IHJlY3RhbmdsZQotICAgICAgICBt
X3JlcGFpbnRCb3VuZGluZ0JveCA9IG1fc3Ryb2tlQW5kTWFya2VyQm91bmRpbmdCb3g7Ci0gICAg
ICAgIFNWR1JlbmRlclN1cHBvcnQ6OmludGVyc2VjdFJlcGFpbnRSZWN0V2l0aFJlc291cmNlcyh0
aGlzLCBtX3JlcGFpbnRCb3VuZGluZ0JveCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAg
ICAvLyBDYWNoZSBfdW5jbGlwcGVkXyBzdHJva2UgYm91bmRpbmcgYm94LCB1c2VkIGZvciBjYWxj
dWxhdGlvbnMgaW4gcmVzb3VyY2VzIChpbmNsdWRlcyBtYXJrZXIgYm91bmRhcmllcykKLSAgICBt
X3N0cm9rZUFuZE1hcmtlckJvdW5kaW5nQm94ID0gbV9maWxsQm91bmRpbmdCb3g7Ci0KLSAgICBj
b25zdCBTVkdSZW5kZXJTdHlsZSogc3ZnU3R5bGUgPSBzdHlsZSgpLT5zdmdTdHlsZSgpOwotICAg
IGlmIChzdmdTdHlsZS0+aGFzU3Ryb2tlKCkpIHsKLSAgICAgICAgQm91bmRpbmdSZWN0U3Ryb2tl
U3R5bGVBcHBsaWVyIHN0cm9rZVN0eWxlKHRoaXMsIHN0eWxlKCkpOwotICAgICAgICBtX3N0cm9r
ZUFuZE1hcmtlckJvdW5kaW5nQm94LnVuaXRlKG1fcGF0aC5zdHJva2VCb3VuZGluZ1JlY3QoJnN0
cm9rZVN0eWxlKSk7Ci0gICAgfQotCi0gICAgaWYgKHN2Z1N0eWxlLT5oYXNNYXJrZXJzKCkpIHsK
KyAgICBpZiAoc3R5bGUoKS0+c3ZnU3R5bGUoKS0+aGFzTWFya2VycygpKSB7CiAgICAgICAgIEZs
b2F0UmVjdCBtYXJrZXJCb3VuZHMgPSBjYWxjdWxhdGVNYXJrZXJCb3VuZHNJZk5lZWRlZCgpOwot
ICAgICAgICBpZiAoIW1hcmtlckJvdW5kcy5pc0VtcHR5KCkpCi0gICAgICAgICAgICBtX3N0cm9r
ZUFuZE1hcmtlckJvdW5kaW5nQm94LnVuaXRlKG1hcmtlckJvdW5kcyk7CisgICAgICAgIGlmICgh
bWFya2VyQm91bmRzLmlzRW1wdHkoKSkgeworICAgICAgICAgICAgRmxvYXRSZWN0IHN0cm9rZVJl
Y3QgPSBzdHJva2VBbmRNYXJrZXJCb3VuZGluZ0JveCgpOworICAgICAgICAgICAgc3Ryb2tlUmVj
dC51bml0ZShtYXJrZXJCb3VuZHMpOworICAgICAgICAgICAgc2V0U3Ryb2tlQW5kTWFya2VyQm91
bmRpbmdCb3goc3Ryb2tlUmVjdCk7CisgICAgICAgIH0KICAgICB9Ci0KLSAgICAvLyBDYWNoZSBz
bWFsbGVzdCBwb3NzaWJsZSByZXBhaW50IHJlY3RhbmdsZQotICAgIG1fcmVwYWludEJvdW5kaW5n
Qm94ID0gbV9zdHJva2VBbmRNYXJrZXJCb3VuZGluZ0JveDsKLSAgICBTVkdSZW5kZXJTdXBwb3J0
OjppbnRlcnNlY3RSZXBhaW50UmVjdFdpdGhSZXNvdXJjZXModGhpcywgbV9yZXBhaW50Qm91bmRp
bmdCb3gpOwogfQogCiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3Zn
L1JlbmRlclNWR1BhdGguaCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZH
UGF0aC5oCmluZGV4IDk4ZTYwOGQuLjYyYTFjOGMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUGF0aC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9zdmcvUmVuZGVyU1ZHUGF0aC5oCkBAIC00LDYgKzQsOCBAQAogICogQ29weXJpZ2h0IChD
KSAyMDA1IEVyaWMgU2VpZGVsIDxlcmljQHdlYmtpdC5vcmc+CiAgKiBDb3B5cmlnaHQgKEMpIDIw
MDYgQXBwbGUgQ29tcHV0ZXIsIEluYwogICogQ29weXJpZ2h0IChDKSAyMDA5IEdvb2dsZSwgSW5j
LgorICogQ29weXJpZ2h0IChDKSAyMDExIFJlbmF0YSBIb2RvdmFuIDxyZW5pQHdlYmtpdC5vcmc+
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgVW5pdmVyc2l0eSBvZiBTemVnZWQKICAqCiAgKiBUaGlz
IGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29y
CiAgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFs
IFB1YmxpYwpAQCAtMjUsODYgKzI3LDIyIEBACiAjZGVmaW5lIFJlbmRlclNWR1BhdGhfaAogCiAj
aWYgRU5BQkxFKFNWRykKLSNpbmNsdWRlICJBZmZpbmVUcmFuc2Zvcm0uaCIKLSNpbmNsdWRlICJG
bG9hdFJlY3QuaCIKLSNpbmNsdWRlICJSZW5kZXJTVkdNb2RlbE9iamVjdC5oIgotI2luY2x1ZGUg
IlNWR01hcmtlckxheW91dEluZm8uaCIKKyNpbmNsdWRlICJSZW5kZXJTVkdTaGFwZS5oIgogCiBu
YW1lc3BhY2UgV2ViQ29yZSB7CiAKLWNsYXNzIEZsb2F0UG9pbnQ7Ci1jbGFzcyBHcmFwaGljc0Nv
bnRleHRTdGF0ZVNhdmVyOwotY2xhc3MgUmVuZGVyU1ZHQ29udGFpbmVyOwotY2xhc3MgU1ZHU3R5
bGVkVHJhbnNmb3JtYWJsZUVsZW1lbnQ7Ci0KLWNsYXNzIFJlbmRlclNWR1BhdGggOiBwdWJsaWMg
UmVuZGVyU1ZHTW9kZWxPYmplY3QgeworY2xhc3MgUmVuZGVyU1ZHUGF0aCA6IHB1YmxpYyBSZW5k
ZXJTVkdTaGFwZSB7CiBwdWJsaWM6CiAgICAgZXhwbGljaXQgUmVuZGVyU1ZHUGF0aChTVkdTdHls
ZWRUcmFuc2Zvcm1hYmxlRWxlbWVudCopOwogICAgIHZpcnR1YWwgflJlbmRlclNWR1BhdGgoKTsK
IAotICAgIGNvbnN0IFBhdGgmIHBhdGgoKSBjb25zdCB7IHJldHVybiBtX3BhdGg7IH0KLSAgICB2
b2lkIHNldE5lZWRzUGF0aFVwZGF0ZSgpIHsgbV9uZWVkc1BhdGhVcGRhdGUgPSB0cnVlOyB9Ci0g
ICAgdmlydHVhbCB2b2lkIHNldE5lZWRzQm91bmRhcmllc1VwZGF0ZSgpIHsgbV9uZWVkc0JvdW5k
YXJpZXNVcGRhdGUgPSB0cnVlOyB9Ci0gICAgdmlydHVhbCB2b2lkIHNldE5lZWRzVHJhbnNmb3Jt
VXBkYXRlKCkgeyBtX25lZWRzVHJhbnNmb3JtVXBkYXRlID0gdHJ1ZTsgfQotCiBwcml2YXRlOgot
ICAgIC8vIEhpdC1kZXRlY3Rpb24gc2VwZXJhdGVkIGZvciB0aGUgZmlsbCBhbmQgdGhlIHN0cm9r
ZQotICAgIGJvb2wgZmlsbENvbnRhaW5zKGNvbnN0IEZsb2F0UG9pbnQmLCBib29sIHJlcXVpcmVz
RmlsbCA9IHRydWUsIFdpbmRSdWxlIGZpbGxSdWxlID0gUlVMRV9OT05aRVJPKTsKLSAgICBib29s
IHN0cm9rZUNvbnRhaW5zKGNvbnN0IEZsb2F0UG9pbnQmLCBib29sIHJlcXVpcmVzU3Ryb2tlID0g
dHJ1ZSk7Ci0KLSAgICB2aXJ0dWFsIEZsb2F0UmVjdCBvYmplY3RCb3VuZGluZ0JveCgpIGNvbnN0
IHsgcmV0dXJuIG1fZmlsbEJvdW5kaW5nQm94OyB9Ci0gICAgdmlydHVhbCBGbG9hdFJlY3Qgc3Ry
b2tlQm91bmRpbmdCb3goKSBjb25zdCB7IHJldHVybiBtX3N0cm9rZUFuZE1hcmtlckJvdW5kaW5n
Qm94OyB9Ci0gICAgdmlydHVhbCBGbG9hdFJlY3QgcmVwYWludFJlY3RJbkxvY2FsQ29vcmRpbmF0
ZXMoKSBjb25zdCB7IHJldHVybiBtX3JlcGFpbnRCb3VuZGluZ0JveDsgfQotICAgIHZpcnR1YWwg
Y29uc3QgQWZmaW5lVHJhbnNmb3JtJiBsb2NhbFRvUGFyZW50VHJhbnNmb3JtKCkgY29uc3QgeyBy
ZXR1cm4gbV9sb2NhbFRyYW5zZm9ybTsgfQotCiAgICAgdmlydHVhbCBib29sIGlzU1ZHUGF0aCgp
IGNvbnN0IHsgcmV0dXJuIHRydWU7IH0KICAgICB2aXJ0dWFsIGNvbnN0IGNoYXIqIHJlbmRlck5h
bWUoKSBjb25zdCB7IHJldHVybiAiUmVuZGVyU1ZHUGF0aCI7IH0KIAotICAgIHZpcnR1YWwgdm9p
ZCBsYXlvdXQoKTsKLSAgICB2aXJ0dWFsIHZvaWQgcGFpbnQoUGFpbnRJbmZvJiwgY29uc3QgTGF5
b3V0UG9pbnQmKTsKLSAgICB2aXJ0dWFsIHZvaWQgYWRkRm9jdXNSaW5nUmVjdHMoVmVjdG9yPExh
eW91dFJlY3Q+JiwgY29uc3QgTGF5b3V0UG9pbnQmKTsKLQotICAgIHZpcnR1YWwgYm9vbCBub2Rl
QXRGbG9hdFBvaW50KGNvbnN0IEhpdFRlc3RSZXF1ZXN0JiwgSGl0VGVzdFJlc3VsdCYsIGNvbnN0
IEZsb2F0UG9pbnQmIHBvaW50SW5QYXJlbnQsIEhpdFRlc3RBY3Rpb24pOwotCi0gICAgRmxvYXRS
ZWN0IGNhbGN1bGF0ZU1hcmtlckJvdW5kc0lmTmVlZGVkKCk7Ci0gICAgdm9pZCB1cGRhdGVDYWNo
ZWRCb3VuZGFyaWVzKCk7Ci0KLSAgICB2b2lkIHNldHVwU3F1YXJlQ2FwUGF0aChQYXRoKiYgdXNl
UGF0aCwgaW50JiBhcHBseU1vZGUpOwotICAgIGJvb2wgc2V0dXBOb25TY2FsaW5nU3Ryb2tlUGF0
aChQYXRoKiYgdXNlUGF0aCwgR3JhcGhpY3NDb250ZXh0U3RhdGVTYXZlciYpOwotICAgIGJvb2wg
c2hvdWxkU3Ryb2tlWmVyb0xlbmd0aFN1YnBhdGgoKSBjb25zdDsKLSAgICBGbG9hdFJlY3QgemVy
b0xlbmd0aFN1YnBhdGhSZWN0KCkgY29uc3Q7Ci0KLXByaXZhdGU6Ci0gICAgdmlydHVhbCBBZmZp
bmVUcmFuc2Zvcm0gbG9jYWxUcmFuc2Zvcm0oKSBjb25zdCB7IHJldHVybiBtX2xvY2FsVHJhbnNm
b3JtOyB9Ci0gICAgdm9pZCBmaWxsQW5kU3Ryb2tlUGF0aChHcmFwaGljc0NvbnRleHQqKTsKLQot
ICAgIGJvb2wgbV9uZWVkc0JvdW5kYXJpZXNVcGRhdGUgOiAxOwotICAgIGJvb2wgbV9uZWVkc1Bh
dGhVcGRhdGUgOiAxOwotICAgIGJvb2wgbV9uZWVkc1RyYW5zZm9ybVVwZGF0ZSA6IDE7Ci0KLSAg
ICBtdXRhYmxlIFBhdGggbV9wYXRoOwotICAgIEZsb2F0UmVjdCBtX2ZpbGxCb3VuZGluZ0JveDsK
LSAgICBGbG9hdFJlY3QgbV9zdHJva2VBbmRNYXJrZXJCb3VuZGluZ0JveDsKLSAgICBGbG9hdFJl
Y3QgbV9yZXBhaW50Qm91bmRpbmdCb3g7Ci0gICAgU1ZHTWFya2VyTGF5b3V0SW5mbyBtX21hcmtl
ckxheW91dEluZm87Ci0gICAgQWZmaW5lVHJhbnNmb3JtIG1fbG9jYWxUcmFuc2Zvcm07CisgICAg
dmlydHVhbCB2b2lkIGluZmxhdGVXaXRoTWFya2VyQm91bmRzKCk7CiB9OwogCi1pbmxpbmUgUmVu
ZGVyU1ZHUGF0aCogdG9SZW5kZXJTVkdQYXRoKFJlbmRlck9iamVjdCogb2JqZWN0KQotewotICAg
IEFTU0VSVCghb2JqZWN0IHx8IG9iamVjdC0+aXNTVkdQYXRoKCkpOwotICAgIHJldHVybiBzdGF0
aWNfY2FzdDxSZW5kZXJTVkdQYXRoKj4ob2JqZWN0KTsKLX0KLQotaW5saW5lIGNvbnN0IFJlbmRl
clNWR1BhdGgqIHRvUmVuZGVyU1ZHUGF0aChjb25zdCBSZW5kZXJPYmplY3QqIG9iamVjdCkKLXsK
LSAgICBBU1NFUlQoIW9iamVjdCB8fCBvYmplY3QtPmlzU1ZHUGF0aCgpKTsKLSAgICByZXR1cm4g
c3RhdGljX2Nhc3Q8Y29uc3QgUmVuZGVyU1ZHUGF0aCo+KG9iamVjdCk7Ci19Ci0KLS8vIFRoaXMg
d2lsbCBjYXRjaCBhbnlvbmUgZG9pbmcgYW4gdW5uZWNlc3NhcnkgY2FzdC4KLXZvaWQgdG9SZW5k
ZXJTVkdQYXRoKGNvbnN0IFJlbmRlclNWR1BhdGgqKTsKLQogfQogCiAjZW5kaWYgLy8gRU5BQkxF
KFNWRykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZH
UmVjdC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1JlY3QuY3Bw
Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVhZDk2ZmMKLS0tIC9kZXYvbnVs
bAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1JlY3QuY3BwCkBA
IC0wLDAgKzEsMTM5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDExIFVuaXZlcnNpdHkgb2Yg
U3plZ2VkCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgUmVuYXRhIEhvZG92YW4gPHJlbmlAd2Via2l0
Lm9yZz4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBVTklWRVJTSVRZIE9GIFNaRUdFRCBgYEFTIElTJycgQU5EIEFO
WQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
IElOIE5PIEVWRU5UIFNIQUxMIFVOSVZFUlNJVFkgT0YgU1pFR0VEIE9SCisgKiBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisg
KiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5o
IgorCisjaWYgRU5BQkxFKFNWRykKKyNpbmNsdWRlICJSZW5kZXJTVkdSZWN0LmgiCisKKyNpbmNs
dWRlICJTVkdOYW1lcy5oIgorI2luY2x1ZGUgIlNWR1JlY3RFbGVtZW50LmgiCisKK25hbWVzcGFj
ZSBXZWJDb3JlIHsKKworUmVuZGVyU1ZHUmVjdDo6UmVuZGVyU1ZHUmVjdChTVkdSZWN0RWxlbWVu
dCogbm9kZSkKKyAgICA6IFJlbmRlclNWR1NoYXBlKG5vZGUpCit7Cit9CisKK1JlbmRlclNWR1Jl
Y3Q6On5SZW5kZXJTVkdSZWN0KCkKK3sKK30KKwordm9pZCBSZW5kZXJTVkdSZWN0OjpjcmVhdGVT
aGFwZSgpCit7CisgICAgLy8gQmVmb3JlIGNyZWF0aW5nIGEgbmV3IG9iamVjdCB3ZSBuZWVkIHRv
IGNsZWFyIHRoZSBjYWNoZWQgYm91bmRpbmcgYm94CisgICAgLy8gdG8gYXZvaWQgdXNpbmcgZ2Fy
YmFnZS4KKyAgICBtX2JvdW5kaW5nQm94ID0gRmxvYXRSZWN0KCk7CisgICAgU1ZHUmVjdEVsZW1l
bnQqIHJlY3QgPSBzdGF0aWNfY2FzdDxTVkdSZWN0RWxlbWVudCo+KG5vZGUoKSk7CisgICAgQVNT
RVJUKHJlY3QpOworCisgICAgYm9vbCBub25TY2FsaW5nU3Ryb2tlID0gc3R5bGUoKS0+c3ZnU3R5
bGUoKS0+dmVjdG9yRWZmZWN0KCkgPT0gVkVfTk9OX1NDQUxJTkdfU1RST0tFOworICAgIC8vIEZh
bGxiYWNrIHRvIFJlbmRlclNWR1NoYXBlIGlmIHJlY3QgaGFzIHJvdW5kZWQgY29ybmVycy4KKyAg
ICBpZiAocmVjdC0+aGFzQXR0cmlidXRlKFNWR05hbWVzOjpyeEF0dHIpIHx8IHJlY3QtPmhhc0F0
dHJpYnV0ZShTVkdOYW1lczo6cnlBdHRyKSB8fCBub25TY2FsaW5nU3Ryb2tlKSB7CisgICAgICAg
UmVuZGVyU1ZHU2hhcGU6OmNyZWF0ZVNoYXBlKCk7CisgICAgICAgc2V0SXNQYWludGluZ0ZhbGxi
YWNrKHRydWUpOworICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBGbG9hdFNpemUgYm91bmRp
bmdCb3hTaXplKHJlY3QtPndpZHRoKCkudmFsdWUocmVjdCksIHJlY3QtPmhlaWdodCgpLnZhbHVl
KHJlY3QpKTsKKyAgICBpZiAoYm91bmRpbmdCb3hTaXplLmlzRW1wdHkoKSkKKyAgICAgICAgcmV0
dXJuOworCisgICAgbV9ib3VuZGluZ0JveCA9IEZsb2F0UmVjdChGbG9hdFBvaW50KHJlY3QtPngo
KS52YWx1ZShyZWN0KSwgcmVjdC0+eSgpLnZhbHVlKHJlY3QpKSwgYm91bmRpbmdCb3hTaXplKTsK
KworICAgIC8vIFRvIGRlY2lkZSBpZiB0aGUgc3Ryb2tlIGNvbnRhaW5zIGEgcG9pbnQgd2UgY3Jl
YXRlIHR3byByZWN0cyB3aGljaCByZXByZXNlbnQgdGhlIGlubmVyIGFuZAorICAgIC8vIHRoZSBv
dXRlciBzdHJva2UgYm9yZGVycy4gQSBzdHJva2UgY29udGFpbnMgdGhlIHBvaW50LCBpZiB0aGUg
cG9pbnQgaXMgYmV0d2VlbiB0aGVtLgorICAgIG1faW5uZXJTdHJva2VSZWN0ID0gbV9ib3VuZGlu
Z0JveDsKKyAgICBtX291dGVyU3Ryb2tlUmVjdCA9IG1fYm91bmRpbmdCb3g7CisgICAgaWYgKHN0
eWxlKCktPnN2Z1N0eWxlKCktPmhhc1N0cm9rZSgpKSB7CisgICAgICAgIGZsb2F0IHN0cm9rZVdp
ZHRoID0gdGhpcy0+c3Ryb2tlV2lkdGgoKTsKKyAgICAgICAgbV9pbm5lclN0cm9rZVJlY3QuaW5m
bGF0ZSgtc3Ryb2tlV2lkdGggLyAyKTsKKyAgICAgICAgbV9vdXRlclN0cm9rZVJlY3QuaW5mbGF0
ZShzdHJva2VXaWR0aCAvIDIpOworICAgIH0KK30KKworCitGbG9hdFJlY3QgUmVuZGVyU1ZHUmVj
dDo6b2JqZWN0Qm91bmRpbmdCb3goKSBjb25zdAoreworICAgIGlmIChpc1BhaW50aW5nRmFsbGJh
Y2soKSkKKyAgICAgICAgcmV0dXJuIFJlbmRlclNWR1NoYXBlOjpvYmplY3RCb3VuZGluZ0JveCgp
OworICAgIHJldHVybiBtX2JvdW5kaW5nQm94OworfQorCitGbG9hdFJlY3QgUmVuZGVyU1ZHUmVj
dDo6c3Ryb2tlQm91bmRpbmdCb3goKSBjb25zdAoreworICAgIGlmIChpc1BhaW50aW5nRmFsbGJh
Y2soKSkKKyAgICAgICAgcmV0dXJuIFJlbmRlclNWR1NoYXBlOjpzdHJva2VCb3VuZGluZ0JveCgp
OworICAgIHJldHVybiBtX291dGVyU3Ryb2tlUmVjdDsKK30KKwordm9pZCBSZW5kZXJTVkdSZWN0
OjpmaWxsU2hhcGUoR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0KSBjb25zdAoreworICAgIGlmICgh
aXNQYWludGluZ0ZhbGxiYWNrKCkpIHsKKyNpZiBQTEFURk9STShNQUMpCisgICAgICAgIC8vIEZJ
WE1FOiBDRyBpbXBsZW1lbnRhdGlvbiBvZiBHcmFwaGljc0NvbnRleHRDRzo6ZmlsbFJlY3QgaGFz
IGFuIG93bgorICAgICAgICAvLyBzaGFkb3cgZHJhd2luZyBtZXRob2QsIHdoaWNoIGRyYXdzIGFu
IGV4dHJhIHNoYWRvdy4KKyAgICAgICAgLy8gVGhpcyBpcyBhIHdvcmthcm91bmQgZm9yIHN3aXRj
aGluZyBvZmYgdGhlIGV4dHJhIHNoYWRvdy4KKyAgICAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTY4ODk5CisgICAgICAgIGlmIChjb250ZXh0LT5oYXNTaGFk
b3coKSkgeworICAgICAgICAgICAgR3JhcGhpY3NDb250ZXh0U3RhdGVTYXZlciBzdGF0ZVNhdmVy
KCpjb250ZXh0KTsKKyAgICAgICAgICAgIGNvbnRleHQtPmNsZWFyU2hhZG93KCk7CisgICAgICAg
ICAgICBjb250ZXh0LT5maWxsUmVjdChtX2JvdW5kaW5nQm94KTsKKyAgICAgICAgICAgIHJldHVy
bjsKKyAgICAgICAgfQorI2VuZGlmCisgICAgICAgIGNvbnRleHQtPmZpbGxSZWN0KG1fYm91bmRp
bmdCb3gpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIFJlbmRlclNWR1NoYXBlOjpmaWxs
U2hhcGUoY29udGV4dCk7Cit9CisKK3ZvaWQgUmVuZGVyU1ZHUmVjdDo6c3Ryb2tlU2hhcGUoR3Jh
cGhpY3NDb250ZXh0KiBjb250ZXh0KSBjb25zdAoreworICAgIGlmICghaXNQYWludGluZ0ZhbGxi
YWNrKCkpIHsKKyAgICAgICAgY29udGV4dC0+c3Ryb2tlUmVjdChtX2JvdW5kaW5nQm94LCBzdHJv
a2VXaWR0aCgpKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBSZW5kZXJTVkdTaGFwZTo6
c3Ryb2tlU2hhcGUoY29udGV4dCk7Cit9CisKK2Jvb2wgUmVuZGVyU1ZHUmVjdDo6c2hhcGVEZXBl
bmRlbnRTdHJva2VDb250YWlucyhjb25zdCBGbG9hdFBvaW50JiBwb2ludCkgY29uc3QKK3sKKyAg
ICByZXR1cm4gbV9vdXRlclN0cm9rZVJlY3QuY29udGFpbnMocG9pbnQsIEZsb2F0UmVjdDo6SW5z
aWRlT3JPblN0cm9rZSkgJiYgIW1faW5uZXJTdHJva2VSZWN0LmNvbnRhaW5zKHBvaW50LCBGbG9h
dFJlY3Q6Okluc2lkZUJ1dE5vdE9uU3Ryb2tlKTsKK30KKworYm9vbCBSZW5kZXJTVkdSZWN0Ojpz
aGFwZURlcGVuZGVudEZpbGxDb250YWlucyhjb25zdCBGbG9hdFBvaW50JiBwb2ludCwgY29uc3Qg
V2luZFJ1bGUgZmlsbFJ1bGUpIGNvbnN0Cit7CisgICAgaWYgKGlzUGFpbnRpbmdGYWxsYmFjaygp
KQorICAgICAgICByZXR1cm4gUmVuZGVyU1ZHU2hhcGU6OnNoYXBlRGVwZW5kZW50RmlsbENvbnRh
aW5zKHBvaW50LCBmaWxsUnVsZSk7CisgICAgcmV0dXJuIG1fYm91bmRpbmdCb3guY29udGFpbnMo
cG9pbnQueCgpLCBwb2ludC55KCkpOworfQorCit9CisKKyNlbmRpZiAvLyBFTkFCTEUoU1ZHKQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZWN0Lmgg
Yi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1JlY3QuaApuZXcgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zZjk1YmMwCi0tLSAvZGV2L251bGwKKysrIGIvU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZWN0LmgKQEAgLTAsMCArMSw2NCBA
QAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMSBVbml2ZXJzaXR5IG9mIFN6ZWdlZAorICogQ29w
eXJpZ2h0IChDKSAyMDExIFJlbmF0YSBIb2RvdmFuIChyZW5pQHdlYmtpdC5vcmcpCisgKiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUg
bWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgVU5JVkVSU0lUWSBPRiBTWkVHRUQgYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhF
CisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBT
SEFMTCBVTklWRVJTSVRZIE9GIFNaRUdFRCBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
CisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgUmVuZGVyU1ZHUmVjdF9oCisjZGVmaW5l
IFJlbmRlclNWR1JlY3RfaAorCisjaWYgRU5BQkxFKFNWRykKKyNpbmNsdWRlICJSZW5kZXJTVkdQ
YXRoLmgiCisjaW5jbHVkZSAiU1ZHUmVjdEVsZW1lbnQuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUg
eworCitjbGFzcyBSZW5kZXJTVkdSZWN0IDogcHVibGljIFJlbmRlclNWR1NoYXBlIHsKK3B1Ymxp
YzoKKyAgICBleHBsaWNpdCBSZW5kZXJTVkdSZWN0KFNWR1JlY3RFbGVtZW50Kik7CisgICAgdmly
dHVhbCB+UmVuZGVyU1ZHUmVjdCgpOworCitwcml2YXRlOgorICAgIHZpcnR1YWwgYm9vbCBpc1NW
R1JlY3QoKSBjb25zdCB7IHJldHVybiB0cnVlOyB9CisgICAgdmlydHVhbCBjb25zdCBjaGFyKiBy
ZW5kZXJOYW1lKCkgY29uc3QgeyByZXR1cm4gIlJlbmRlclNWR1JlY3QiOyB9CisKKyAgICB2aXJ0
dWFsIHZvaWQgY3JlYXRlU2hhcGUoKTsKKyAgICB2aXJ0dWFsIGJvb2wgaXNFbXB0eSgpIGNvbnN0
IHsgcmV0dXJuIGhhc1BhdGgoKSA/IFJlbmRlclNWR1NoYXBlOjppc0VtcHR5KCkgOiBtX2JvdW5k
aW5nQm94LmlzRW1wdHkoKTsgfTsKKyAgICB2aXJ0dWFsIHZvaWQgZmlsbFNoYXBlKEdyYXBoaWNz
Q29udGV4dCopIGNvbnN0OworICAgIHZpcnR1YWwgdm9pZCBzdHJva2VTaGFwZShHcmFwaGljc0Nv
bnRleHQqKSBjb25zdDsKKyAgICB2aXJ0dWFsIEZsb2F0UmVjdCBvYmplY3RCb3VuZGluZ0JveCgp
IGNvbnN0OworICAgIHZpcnR1YWwgRmxvYXRSZWN0IHN0cm9rZUJvdW5kaW5nQm94KCkgY29uc3Q7
CisgICAgdmlydHVhbCBib29sIHNoYXBlRGVwZW5kZW50U3Ryb2tlQ29udGFpbnMoY29uc3QgRmxv
YXRQb2ludCYpIGNvbnN0OworICAgIHZpcnR1YWwgYm9vbCBzaGFwZURlcGVuZGVudEZpbGxDb250
YWlucyhjb25zdCBGbG9hdFBvaW50JiwgY29uc3QgV2luZFJ1bGUpIGNvbnN0OworCitwcml2YXRl
OgorICAgIEZsb2F0UmVjdCBtX2JvdW5kaW5nQm94OworICAgIEZsb2F0UmVjdCBtX2lubmVyU3Ry
b2tlUmVjdDsKKyAgICBGbG9hdFJlY3QgbV9vdXRlclN0cm9rZVJlY3Q7Cit9OworCit9CisKKyNl
bmRpZiAvLyBFTkFCTEUoU1ZHKQorI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291cmNlLmggYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvc3ZnL1JlbmRlclNWR1Jlc291cmNlLmgKaW5kZXggYTY3YmE3My4uZTAyMDE1NCAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJjZS5oCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2UuaApAQCAt
MjEsNiArMjEsNyBAQAogI2RlZmluZSBSZW5kZXJTVkdSZXNvdXJjZV9oCiAKICNpZiBFTkFCTEUo
U1ZHKQorI2luY2x1ZGUgIlJlbmRlclNWR1NoYXBlLmgiCiAjaW5jbHVkZSAiUmVuZGVyU3R5bGVD
b25zdGFudHMuaCIKICNpbmNsdWRlICJTVkdEb2N1bWVudEV4dGVuc2lvbnMuaCIKIApAQCAtNjEs
NyArNjIsNyBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCB2b2lkIHJlbW92ZUNsaWVudEZyb21DYWNo
ZShSZW5kZXJPYmplY3QqLCBib29sIG1hcmtGb3JJbnZhbGlkYXRpb24gPSB0cnVlKSA9IDA7CiAK
ICAgICB2aXJ0dWFsIGJvb2wgYXBwbHlSZXNvdXJjZShSZW5kZXJPYmplY3QqLCBSZW5kZXJTdHls
ZSosIEdyYXBoaWNzQ29udGV4dComLCB1bnNpZ25lZCBzaG9ydCByZXNvdXJjZU1vZGUpID0gMDsK
LSAgICB2aXJ0dWFsIHZvaWQgcG9zdEFwcGx5UmVzb3VyY2UoUmVuZGVyT2JqZWN0KiwgR3JhcGhp
Y3NDb250ZXh0KiYsIHVuc2lnbmVkIHNob3J0LCBjb25zdCBQYXRoKikgeyB9CisgICAgdmlydHVh
bCB2b2lkIHBvc3RBcHBseVJlc291cmNlKFJlbmRlck9iamVjdCosIEdyYXBoaWNzQ29udGV4dCom
LCB1bnNpZ25lZCBzaG9ydCwgY29uc3QgUGF0aCosIGNvbnN0IFJlbmRlclNWR1NoYXBlKikgeyB9
CiAgICAgdmlydHVhbCBGbG9hdFJlY3QgcmVzb3VyY2VCb3VuZGluZ0JveChSZW5kZXJPYmplY3Qq
KSA9IDA7CiAKICAgICB2aXJ0dWFsIFJlbmRlclNWR1Jlc291cmNlVHlwZSByZXNvdXJjZVR5cGUo
KSBjb25zdCA9IDA7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1Jl
bmRlclNWR1Jlc291cmNlQ2xpcHBlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3Zn
L1JlbmRlclNWR1Jlc291cmNlQ2xpcHBlci5jcHAKaW5kZXggMjJiNDFmYS4uNWE2ZjQ3ZiAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJjZUNs
aXBwZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVz
b3VyY2VDbGlwcGVyLmNwcApAQCAtMjQyLDcgKzI0Miw3IEBAIGJvb2wgUmVuZGVyU1ZHUmVzb3Vy
Y2VDbGlwcGVyOjpkcmF3Q29udGVudEludG9NYXNrSW1hZ2UoQ2xpcHBlckRhdGEqIGNsaXBwZXJE
YXRhCiAgICAgICAgIH0KIAogICAgICAgICAvLyBPbmx5IHNoYXBlcywgcGF0aHMgYW5kIHRleHRz
IGFyZSBhbGxvd2VkIGZvciBjbGlwcGluZy4KLSAgICAgICAgaWYgKCFyZW5kZXJlci0+aXNTVkdQ
YXRoKCkgJiYgIXJlbmRlcmVyLT5pc1NWR1RleHQoKSkKKyAgICAgICAgaWYgKCFyZW5kZXJlci0+
aXNTVkdTaGFwZSgpICYmICFyZW5kZXJlci0+aXNTVkdUZXh0KCkpCiAgICAgICAgICAgICBjb250
aW51ZTsKIAogICAgICAgICAvLyBTYXZlIHRoZSBvbGQgUmVuZGVyU3R5bGUgb2YgdGhlIGN1cnJl
bnQgb2JqZWN0IGZvciByZXN0b3JpbmcgYWZ0ZXIgZHJhd2luZwpAQCAtMjg0LDcgKzI4NCw3IEBA
IHZvaWQgUmVuZGVyU1ZHUmVzb3VyY2VDbGlwcGVyOjpjYWxjdWxhdGVDbGlwQ29udGVudFJlcGFp
bnRSZWN0KCkKICAgICAgICAgUmVuZGVyT2JqZWN0KiByZW5kZXJlciA9IGNoaWxkTm9kZS0+cmVu
ZGVyZXIoKTsKICAgICAgICAgaWYgKCFjaGlsZE5vZGUtPmlzU1ZHRWxlbWVudCgpIHx8ICFzdGF0
aWNfY2FzdDxTVkdFbGVtZW50Kj4oY2hpbGROb2RlKS0+aXNTdHlsZWQoKSB8fCAhcmVuZGVyZXIp
CiAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgaWYgKCFyZW5kZXJlci0+aXNTVkdQYXRo
KCkgJiYgIXJlbmRlcmVyLT5pc1NWR1RleHQoKSAmJiAhcmVuZGVyZXItPmlzU1ZHU2hhZG93VHJl
ZVJvb3RDb250YWluZXIoKSkKKyAgICAgICAgaWYgKCFyZW5kZXJlci0+aXNTVkdTaGFwZSgpICYm
ICFyZW5kZXJlci0+aXNTVkdUZXh0KCkgJiYgIXJlbmRlcmVyLT5pc1NWR1NoYWRvd1RyZWVSb290
Q29udGFpbmVyKCkpCiAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgUmVuZGVyU3R5bGUq
IHN0eWxlID0gcmVuZGVyZXItPnN0eWxlKCk7CiAgICAgICAgIGlmICghc3R5bGUgfHwgc3R5bGUt
PmRpc3BsYXkoKSA9PSBOT05FIHx8IHN0eWxlLT52aXNpYmlsaXR5KCkgIT0gVklTSUJMRSkKQEAg
LTMxMCw3ICszMTAsNyBAQCBib29sIFJlbmRlclNWR1Jlc291cmNlQ2xpcHBlcjo6aGl0VGVzdENs
aXBDb250ZW50KGNvbnN0IEZsb2F0UmVjdCYgb2JqZWN0Qm91bmRpbgogICAgICAgICBSZW5kZXJP
YmplY3QqIHJlbmRlcmVyID0gY2hpbGROb2RlLT5yZW5kZXJlcigpOwogICAgICAgICBpZiAoIWNo
aWxkTm9kZS0+aXNTVkdFbGVtZW50KCkgfHwgIXN0YXRpY19jYXN0PFNWR0VsZW1lbnQqPihjaGls
ZE5vZGUpLT5pc1N0eWxlZCgpIHx8ICFyZW5kZXJlcikKICAgICAgICAgICAgIGNvbnRpbnVlOwot
ICAgICAgICBpZiAoIXJlbmRlcmVyLT5pc1NWR1BhdGgoKSAmJiAhcmVuZGVyZXItPmlzU1ZHVGV4
dCgpICYmICFyZW5kZXJlci0+aXNTVkdTaGFkb3dUcmVlUm9vdENvbnRhaW5lcigpKQorICAgICAg
ICBpZiAoIXJlbmRlcmVyLT5pc1NWR1NoYXBlKCkgJiYgIXJlbmRlcmVyLT5pc1NWR1RleHQoKSAm
JiAhcmVuZGVyZXItPmlzU1ZHU2hhZG93VHJlZVJvb3RDb250YWluZXIoKSkKICAgICAgICAgICAg
IGNvbnRpbnVlOwogICAgICAgICBJbnRQb2ludCBoaXRQb2ludDsKICAgICAgICAgSGl0VGVzdFJl
c3VsdCByZXN1bHQoaGl0UG9pbnQpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJjZUNvbnRhaW5lci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291cmNlQ29udGFpbmVyLmNwcAppbmRleCA1NWY3N2U1
Li5lOTUwZTcxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRl
clNWR1Jlc291cmNlQ29udGFpbmVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
c3ZnL1JlbmRlclNWR1Jlc291cmNlQ29udGFpbmVyLmNwcApAQCAtMTgwLDcgKzE4MCw3IEBAIHZv
aWQgUmVuZGVyU1ZHUmVzb3VyY2VDb250YWluZXI6OnJlZ2lzdGVyUmVzb3VyY2UoKQogLy8gRklY
TUU6IFRoaXMgZG9lcyBub3QgYmVsb25nIGhlcmUuCiBBZmZpbmVUcmFuc2Zvcm0gUmVuZGVyU1ZH
UmVzb3VyY2VDb250YWluZXI6OnRyYW5zZm9ybU9uTm9uU2NhbGluZ1N0cm9rZShSZW5kZXJPYmpl
Y3QqIG9iamVjdCwgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiByZXNvdXJjZVRyYW5zZm9ybSkKIHsK
LSAgICBpZiAoIW9iamVjdC0+aXNTVkdQYXRoKCkpCisgICAgaWYgKCFvYmplY3QtPmlzU1ZHU2hh
cGUoKSkKICAgICAgICAgcmV0dXJuIHJlc291cmNlVHJhbnNmb3JtOwogCiAgICAgU1ZHU3R5bGVk
VHJhbnNmb3JtYWJsZUVsZW1lbnQqIGVsZW1lbnQgPSBzdGF0aWNfY2FzdDxTVkdTdHlsZWRUcmFu
c2Zvcm1hYmxlRWxlbWVudCo+KG9iamVjdC0+bm9kZSgpKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VGaWx0ZXIuY3BwIGIvU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJjZUZpbHRlci5jcHAKaW5kZXgg
Njg5MzVkYS4uOTYxZGQzZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2
Zy9SZW5kZXJTVkdSZXNvdXJjZUZpbHRlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJjZUZpbHRlci5jcHAKQEAgLTI1OSw3ICsyNTksNyBAQCBi
b29sIFJlbmRlclNWR1Jlc291cmNlRmlsdGVyOjphcHBseVJlc291cmNlKFJlbmRlck9iamVjdCog
b2JqZWN0LCBSZW5kZXJTdHlsZSosCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLXZvaWQgUmVuZGVy
U1ZHUmVzb3VyY2VGaWx0ZXI6OnBvc3RBcHBseVJlc291cmNlKFJlbmRlck9iamVjdCogb2JqZWN0
LCBHcmFwaGljc0NvbnRleHQqJiBjb250ZXh0LCB1bnNpZ25lZCBzaG9ydCByZXNvdXJjZU1vZGUs
IGNvbnN0IFBhdGgqKQordm9pZCBSZW5kZXJTVkdSZXNvdXJjZUZpbHRlcjo6cG9zdEFwcGx5UmVz
b3VyY2UoUmVuZGVyT2JqZWN0KiBvYmplY3QsIEdyYXBoaWNzQ29udGV4dComIGNvbnRleHQsIHVu
c2lnbmVkIHNob3J0IHJlc291cmNlTW9kZSwgY29uc3QgUGF0aCosIGNvbnN0IFJlbmRlclNWR1No
YXBlKikKIHsKICAgICBBU1NFUlQob2JqZWN0KTsKICAgICBBU1NFUlQoY29udGV4dCk7CkBAIC0y
OTMsNyArMjkzLDcgQEAgdm9pZCBSZW5kZXJTVkdSZXNvdXJjZUZpbHRlcjo6cG9zdEFwcGx5UmVz
b3VyY2UoUmVuZGVyT2JqZWN0KiBvYmplY3QsIEdyYXBoaWNzQ28KICAgICB9CiAKICAgICBGaWx0
ZXJFZmZlY3QqIGxhc3RFZmZlY3QgPSBmaWx0ZXJEYXRhLT5idWlsZGVyLT5sYXN0RWZmZWN0KCk7
Ci0gICAgCisKICAgICBpZiAobGFzdEVmZmVjdCAmJiAhZmlsdGVyRGF0YS0+Ym91bmRhcmllcy5p
c0VtcHR5KCkgJiYgIWxhc3RFZmZlY3QtPmZpbHRlclByaW1pdGl2ZVN1YnJlZ2lvbigpLmlzRW1w
dHkoKSkgewogICAgICAgICAvLyBUaGlzIGlzIHRoZSByZWFsIGZpbHRlcmluZyBvZiB0aGUgb2Jq
ZWN0LiBJdCBqdXN0IG5lZWRzIHRvIGJlIGNhbGxlZCBvbiB0aGUKICAgICAgICAgLy8gaW5pdGlh
bCBmaWx0ZXJpbmcgcHJvY2Vzcy4gV2UganVzdCB0YWtlIHRoZSBzdG9yZWQgZmlsdGVyIHJlc3Vs
dCBvbiBhCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNW
R1Jlc291cmNlRmlsdGVyLmggYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNW
R1Jlc291cmNlRmlsdGVyLmgKaW5kZXggNWE1YjA5Mi4uZmY2MWI3MSAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJjZUZpbHRlci5oCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VGaWx0ZXIuaApA
QCAtNzIsNyArNzIsNyBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCB2b2lkIHJlbW92ZUNsaWVudEZy
b21DYWNoZShSZW5kZXJPYmplY3QqLCBib29sIG1hcmtGb3JJbnZhbGlkYXRpb24gPSB0cnVlKTsK
IAogICAgIHZpcnR1YWwgYm9vbCBhcHBseVJlc291cmNlKFJlbmRlck9iamVjdCosIFJlbmRlclN0
eWxlKiwgR3JhcGhpY3NDb250ZXh0KiYsIHVuc2lnbmVkIHNob3J0IHJlc291cmNlTW9kZSk7Ci0g
ICAgdmlydHVhbCB2b2lkIHBvc3RBcHBseVJlc291cmNlKFJlbmRlck9iamVjdCosIEdyYXBoaWNz
Q29udGV4dComLCB1bnNpZ25lZCBzaG9ydCByZXNvdXJjZU1vZGUsIGNvbnN0IFBhdGgqKTsKKyAg
ICB2aXJ0dWFsIHZvaWQgcG9zdEFwcGx5UmVzb3VyY2UoUmVuZGVyT2JqZWN0KiwgR3JhcGhpY3ND
b250ZXh0KiYsIHVuc2lnbmVkIHNob3J0IHJlc291cmNlTW9kZSwgY29uc3QgUGF0aCosIGNvbnN0
IFJlbmRlclNWR1NoYXBlKik7CiAKICAgICB2aXJ0dWFsIEZsb2F0UmVjdCByZXNvdXJjZUJvdW5k
aW5nQm94KFJlbmRlck9iamVjdCopOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291cmNlR3JhZGllbnQuY3BwIGIvU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJjZUdyYWRpZW50LmNwcAppbmRleCA1ZTMxYjc2
Li4yMjQzM2NmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRl
clNWR1Jlc291cmNlR3JhZGllbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9z
dmcvUmVuZGVyU1ZHUmVzb3VyY2VHcmFkaWVudC5jcHAKQEAgLTI3LDYgKzI3LDcgQEAKIAogI2lu
Y2x1ZGUgIkdyYWRpZW50QXR0cmlidXRlcy5oIgogI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5o
IgorI2luY2x1ZGUgIlJlbmRlclNWR1NoYXBlLmgiCiAjaW5jbHVkZSAiUmVuZGVyU1ZHVGV4dC5o
IgogI2luY2x1ZGUgIlNWR0ltYWdlQnVmZmVyVG9vbHMuaCIKICNpbmNsdWRlICJTVkdSZW5kZXJT
dXBwb3J0LmgiCkBAIC0yMzEsNyArMjMyLDcgQEAgYm9vbCBSZW5kZXJTVkdSZXNvdXJjZUdyYWRp
ZW50OjphcHBseVJlc291cmNlKFJlbmRlck9iamVjdCogb2JqZWN0LCBSZW5kZXJTdHlsZSoKICAg
ICByZXR1cm4gdHJ1ZTsKIH0KIAotdm9pZCBSZW5kZXJTVkdSZXNvdXJjZUdyYWRpZW50Ojpwb3N0
QXBwbHlSZXNvdXJjZShSZW5kZXJPYmplY3QqIG9iamVjdCwgR3JhcGhpY3NDb250ZXh0KiYgY29u
dGV4dCwgdW5zaWduZWQgc2hvcnQgcmVzb3VyY2VNb2RlLCBjb25zdCBQYXRoKiBwYXRoKQordm9p
ZCBSZW5kZXJTVkdSZXNvdXJjZUdyYWRpZW50Ojpwb3N0QXBwbHlSZXNvdXJjZShSZW5kZXJPYmpl
Y3QqIG9iamVjdCwgR3JhcGhpY3NDb250ZXh0KiYgY29udGV4dCwgdW5zaWduZWQgc2hvcnQgcmVz
b3VyY2VNb2RlLCBjb25zdCBQYXRoKiBwYXRoLCBjb25zdCBSZW5kZXJTVkdTaGFwZSogc2hhcGUp
CiB7CiAgICAgQVNTRVJUKGNvbnRleHQpOwogICAgIEFTU0VSVChyZXNvdXJjZU1vZGUgIT0gQXBw
bHlUb0RlZmF1bHRNb2RlKTsKQEAgLTI1OSwxMSArMjYwLDE5IEBAIHZvaWQgUmVuZGVyU1ZHUmVz
b3VyY2VHcmFkaWVudDo6cG9zdEFwcGx5UmVzb3VyY2UoUmVuZGVyT2JqZWN0KiBvYmplY3QsIEdy
YXBoaWNzCiAjZWxzZQogICAgICAgICBVTlVTRURfUEFSQU0ob2JqZWN0KTsKICNlbmRpZgotICAg
IH0gZWxzZSBpZiAocGF0aCkgewotICAgICAgICBpZiAocmVzb3VyY2VNb2RlICYgQXBwbHlUb0Zp
bGxNb2RlKQotICAgICAgICAgICAgY29udGV4dC0+ZmlsbFBhdGgoKnBhdGgpOwotICAgICAgICBl
bHNlIGlmIChyZXNvdXJjZU1vZGUgJiBBcHBseVRvU3Ryb2tlTW9kZSkKLSAgICAgICAgICAgIGNv
bnRleHQtPnN0cm9rZVBhdGgoKnBhdGgpOworICAgIH0gZWxzZSB7CisgICAgICAgIGlmIChyZXNv
dXJjZU1vZGUgJiBBcHBseVRvRmlsbE1vZGUpIHsKKyAgICAgICAgICAgIGlmIChwYXRoKQorICAg
ICAgICAgICAgICAgIGNvbnRleHQtPmZpbGxQYXRoKCpwYXRoKTsKKyAgICAgICAgICAgIGVsc2Ug
aWYgKHNoYXBlKQorICAgICAgICAgICAgICAgIHNoYXBlLT5maWxsU2hhcGUoY29udGV4dCk7Cisg
ICAgICAgIH0KKyAgICAgICAgaWYgKHJlc291cmNlTW9kZSAmIEFwcGx5VG9TdHJva2VNb2RlKSB7
CisgICAgICAgICAgICBpZiAocGF0aCkKKyAgICAgICAgICAgICAgICBjb250ZXh0LT5zdHJva2VQ
YXRoKCpwYXRoKTsKKyAgICAgICAgICAgIGVsc2UgaWYgKHNoYXBlKQorICAgICAgICAgICAgICAg
IHNoYXBlLT5zdHJva2VTaGFwZShjb250ZXh0KTsKKyAgICAgICAgfQogICAgIH0KIAogICAgIGNv
bnRleHQtPnJlc3RvcmUoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9z
dmcvUmVuZGVyU1ZHUmVzb3VyY2VHcmFkaWVudC5oIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L3N2Zy9SZW5kZXJTVkdSZXNvdXJjZUdyYWRpZW50LmgKaW5kZXggZGY0OTJlMi4uM2ZjY2Q0NCAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJj
ZUdyYWRpZW50LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdS
ZXNvdXJjZUdyYWRpZW50LmgKQEAgLTUwLDcgKzUwLDcgQEAgcHVibGljOgogICAgIHZpcnR1YWwg
dm9pZCByZW1vdmVDbGllbnRGcm9tQ2FjaGUoUmVuZGVyT2JqZWN0KiwgYm9vbCBtYXJrRm9ySW52
YWxpZGF0aW9uID0gdHJ1ZSk7CiAKICAgICB2aXJ0dWFsIGJvb2wgYXBwbHlSZXNvdXJjZShSZW5k
ZXJPYmplY3QqLCBSZW5kZXJTdHlsZSosIEdyYXBoaWNzQ29udGV4dComLCB1bnNpZ25lZCBzaG9y
dCByZXNvdXJjZU1vZGUpOwotICAgIHZpcnR1YWwgdm9pZCBwb3N0QXBwbHlSZXNvdXJjZShSZW5k
ZXJPYmplY3QqLCBHcmFwaGljc0NvbnRleHQqJiwgdW5zaWduZWQgc2hvcnQgcmVzb3VyY2VNb2Rl
LCBjb25zdCBQYXRoKik7CisgICAgdmlydHVhbCB2b2lkIHBvc3RBcHBseVJlc291cmNlKFJlbmRl
ck9iamVjdCosIEdyYXBoaWNzQ29udGV4dComLCB1bnNpZ25lZCBzaG9ydCByZXNvdXJjZU1vZGUs
IGNvbnN0IFBhdGgqLCBjb25zdCBSZW5kZXJTVkdTaGFwZSopOwogICAgIHZpcnR1YWwgRmxvYXRS
ZWN0IHJlc291cmNlQm91bmRpbmdCb3goUmVuZGVyT2JqZWN0KikgeyByZXR1cm4gRmxvYXRSZWN0
KCk7IH0KIAogcHJvdGVjdGVkOgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L3N2Zy9SZW5kZXJTVkdSZXNvdXJjZVBhdHRlcm4uY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJjZVBhdHRlcm4uY3BwCmluZGV4IDhkY2UwODQuLmJjNDQz
ZTUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVz
b3VyY2VQYXR0ZXJuLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRl
clNWR1Jlc291cmNlUGF0dGVybi5jcHAKQEAgLTE4OCwxNiArMTg4LDIyIEBAIGJvb2wgUmVuZGVy
U1ZHUmVzb3VyY2VQYXR0ZXJuOjphcHBseVJlc291cmNlKFJlbmRlck9iamVjdCogb2JqZWN0LCBS
ZW5kZXJTdHlsZSoKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotdm9pZCBSZW5kZXJTVkdSZXNvdXJj
ZVBhdHRlcm46OnBvc3RBcHBseVJlc291cmNlKFJlbmRlck9iamVjdCosIEdyYXBoaWNzQ29udGV4
dComIGNvbnRleHQsIHVuc2lnbmVkIHNob3J0IHJlc291cmNlTW9kZSwgY29uc3QgUGF0aCogcGF0
aCkKK3ZvaWQgUmVuZGVyU1ZHUmVzb3VyY2VQYXR0ZXJuOjpwb3N0QXBwbHlSZXNvdXJjZShSZW5k
ZXJPYmplY3QqLCBHcmFwaGljc0NvbnRleHQqJiBjb250ZXh0LCB1bnNpZ25lZCBzaG9ydCByZXNv
dXJjZU1vZGUsIGNvbnN0IFBhdGgqIHBhdGgsIGNvbnN0IFJlbmRlclNWR1NoYXBlKiBzaGFwZSkK
IHsKICAgICBBU1NFUlQoY29udGV4dCk7CiAgICAgQVNTRVJUKHJlc291cmNlTW9kZSAhPSBBcHBs
eVRvRGVmYXVsdE1vZGUpOwogCi0gICAgaWYgKHBhdGggJiYgIShyZXNvdXJjZU1vZGUgJiBBcHBs
eVRvVGV4dE1vZGUpKSB7Ci0gICAgICAgIGlmIChyZXNvdXJjZU1vZGUgJiBBcHBseVRvRmlsbE1v
ZGUpCisgICAgaWYgKHJlc291cmNlTW9kZSAmIEFwcGx5VG9GaWxsTW9kZSkgeworICAgICAgICBp
ZiAocGF0aCkKICAgICAgICAgICAgIGNvbnRleHQtPmZpbGxQYXRoKCpwYXRoKTsKLSAgICAgICAg
ZWxzZSBpZiAocmVzb3VyY2VNb2RlICYgQXBwbHlUb1N0cm9rZU1vZGUpCisgICAgICAgIGVsc2Ug
aWYgKHNoYXBlKQorICAgICAgICAgICAgc2hhcGUtPmZpbGxTaGFwZShjb250ZXh0KTsKKyAgICB9
CisgICAgaWYgKHJlc291cmNlTW9kZSAmIEFwcGx5VG9TdHJva2VNb2RlKSB7CisgICAgICAgIGlm
IChwYXRoKQogICAgICAgICAgICAgY29udGV4dC0+c3Ryb2tlUGF0aCgqcGF0aCk7CisgICAgICAg
IGVsc2UgaWYgKHNoYXBlKQorICAgICAgICAgICAgc2hhcGUtPnN0cm9rZVNoYXBlKGNvbnRleHQp
OwogICAgIH0KIAogICAgIGNvbnRleHQtPnJlc3RvcmUoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VQYXR0ZXJuLmggYi9Tb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291cmNlUGF0dGVybi5oCmluZGV4IDll
ODY0ODYuLjQwNDkyNDIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcv
UmVuZGVyU1ZHUmVzb3VyY2VQYXR0ZXJuLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L3N2Zy9SZW5kZXJTVkdSZXNvdXJjZVBhdHRlcm4uaApAQCAtNTIsNyArNTIsNyBAQCBwdWJsaWM6
CiAgICAgdmlydHVhbCB2b2lkIHJlbW92ZUNsaWVudEZyb21DYWNoZShSZW5kZXJPYmplY3QqLCBi
b29sIG1hcmtGb3JJbnZhbGlkYXRpb24gPSB0cnVlKTsKIAogICAgIHZpcnR1YWwgYm9vbCBhcHBs
eVJlc291cmNlKFJlbmRlck9iamVjdCosIFJlbmRlclN0eWxlKiwgR3JhcGhpY3NDb250ZXh0KiYs
IHVuc2lnbmVkIHNob3J0IHJlc291cmNlTW9kZSk7Ci0gICAgdmlydHVhbCB2b2lkIHBvc3RBcHBs
eVJlc291cmNlKFJlbmRlck9iamVjdCosIEdyYXBoaWNzQ29udGV4dComLCB1bnNpZ25lZCBzaG9y
dCByZXNvdXJjZU1vZGUsIGNvbnN0IFBhdGgqKTsKKyAgICB2aXJ0dWFsIHZvaWQgcG9zdEFwcGx5
UmVzb3VyY2UoUmVuZGVyT2JqZWN0KiwgR3JhcGhpY3NDb250ZXh0KiYsIHVuc2lnbmVkIHNob3J0
IHJlc291cmNlTW9kZSwgY29uc3QgUGF0aCosIGNvbnN0IFJlbmRlclNWR1NoYXBlKik7CiAgICAg
dmlydHVhbCBGbG9hdFJlY3QgcmVzb3VyY2VCb3VuZGluZ0JveChSZW5kZXJPYmplY3QqKSB7IHJl
dHVybiBGbG9hdFJlY3QoKTsgfQogCiAgICAgdmlydHVhbCBSZW5kZXJTVkdSZXNvdXJjZVR5cGUg
cmVzb3VyY2VUeXBlKCkgY29uc3QgeyByZXR1cm4gc19yZXNvdXJjZVR5cGU7IH0KZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VTb2xpZENv
bG9yLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VT
b2xpZENvbG9yLmNwcAppbmRleCA1YmUyYWY2Li42M2RmNzUxIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291cmNlU29saWRDb2xvci5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJjZVNvbGlkQ29s
b3IuY3BwCkBAIC0yMyw2ICsyMyw3IEBACiAjaW5jbHVkZSAiUmVuZGVyU1ZHUmVzb3VyY2VTb2xp
ZENvbG9yLmgiCiAKICNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKKyNpbmNsdWRlICJSZW5k
ZXJTVkdTaGFwZS5oIgogI2luY2x1ZGUgIlJlbmRlclN0eWxlLmgiCiAjaW5jbHVkZSAiU1ZHUmVu
ZGVyU3VwcG9ydC5oIgogCkBAIC03NCwxNiArNzUsMjIgQEAgYm9vbCBSZW5kZXJTVkdSZXNvdXJj
ZVNvbGlkQ29sb3I6OmFwcGx5UmVzb3VyY2UoUmVuZGVyT2JqZWN0KiBvYmplY3QsIFJlbmRlclN0
eWwKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotdm9pZCBSZW5kZXJTVkdSZXNvdXJjZVNvbGlkQ29s
b3I6OnBvc3RBcHBseVJlc291cmNlKFJlbmRlck9iamVjdCosIEdyYXBoaWNzQ29udGV4dComIGNv
bnRleHQsIHVuc2lnbmVkIHNob3J0IHJlc291cmNlTW9kZSwgY29uc3QgUGF0aCogcGF0aCkKK3Zv
aWQgUmVuZGVyU1ZHUmVzb3VyY2VTb2xpZENvbG9yOjpwb3N0QXBwbHlSZXNvdXJjZShSZW5kZXJP
YmplY3QqLCBHcmFwaGljc0NvbnRleHQqJiBjb250ZXh0LCB1bnNpZ25lZCBzaG9ydCByZXNvdXJj
ZU1vZGUsIGNvbnN0IFBhdGgqIHBhdGgsIGNvbnN0IFJlbmRlclNWR1NoYXBlKiBzaGFwZSkKIHsK
ICAgICBBU1NFUlQoY29udGV4dCk7CiAgICAgQVNTRVJUKHJlc291cmNlTW9kZSAhPSBBcHBseVRv
RGVmYXVsdE1vZGUpOwogCi0gICAgaWYgKHBhdGggJiYgIShyZXNvdXJjZU1vZGUgJiBBcHBseVRv
VGV4dE1vZGUpKSB7Ci0gICAgICAgIGlmIChyZXNvdXJjZU1vZGUgJiBBcHBseVRvRmlsbE1vZGUp
CisgICAgaWYgKHJlc291cmNlTW9kZSAmIEFwcGx5VG9GaWxsTW9kZSkgeworICAgICAgICBpZiAo
cGF0aCkKICAgICAgICAgICAgIGNvbnRleHQtPmZpbGxQYXRoKCpwYXRoKTsKLSAgICAgICAgZWxz
ZSBpZiAocmVzb3VyY2VNb2RlICYgQXBwbHlUb1N0cm9rZU1vZGUpCisgICAgICAgIGVsc2UgaWYg
KHNoYXBlKQorICAgICAgICAgICAgc2hhcGUtPmZpbGxTaGFwZShjb250ZXh0KTsKKyAgICB9Cisg
ICAgaWYgKHJlc291cmNlTW9kZSAmIEFwcGx5VG9TdHJva2VNb2RlKSB7CisgICAgICAgIGlmIChw
YXRoKQogICAgICAgICAgICAgY29udGV4dC0+c3Ryb2tlUGF0aCgqcGF0aCk7CisgICAgICAgIGVs
c2UgaWYgKHNoYXBlKQorICAgICAgICAgICAgc2hhcGUtPnN0cm9rZVNoYXBlKGNvbnRleHQpOwog
ICAgIH0KIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5k
ZXJTVkdSZXNvdXJjZVNvbGlkQ29sb3IuaCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcv
UmVuZGVyU1ZHUmVzb3VyY2VTb2xpZENvbG9yLmgKaW5kZXggMDJjZWIzMS4uOGJiZmRjZCAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJjZVNv
bGlkQ29sb3IuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jl
c291cmNlU29saWRDb2xvci5oCkBAIC0zNiw3ICszNiw3IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFs
IHZvaWQgcmVtb3ZlQ2xpZW50RnJvbUNhY2hlKFJlbmRlck9iamVjdCosIGJvb2wgPSB0cnVlKSB7
IH0KIAogICAgIHZpcnR1YWwgYm9vbCBhcHBseVJlc291cmNlKFJlbmRlck9iamVjdCosIFJlbmRl
clN0eWxlKiwgR3JhcGhpY3NDb250ZXh0KiYsIHVuc2lnbmVkIHNob3J0IHJlc291cmNlTW9kZSk7
Ci0gICAgdmlydHVhbCB2b2lkIHBvc3RBcHBseVJlc291cmNlKFJlbmRlck9iamVjdCosIEdyYXBo
aWNzQ29udGV4dComLCB1bnNpZ25lZCBzaG9ydCByZXNvdXJjZU1vZGUsIGNvbnN0IFBhdGgqKTsK
KyAgICB2aXJ0dWFsIHZvaWQgcG9zdEFwcGx5UmVzb3VyY2UoUmVuZGVyT2JqZWN0KiwgR3JhcGhp
Y3NDb250ZXh0KiYsIHVuc2lnbmVkIHNob3J0IHJlc291cmNlTW9kZSwgY29uc3QgUGF0aCosIGNv
bnN0IFJlbmRlclNWR1NoYXBlKik7CiAgICAgdmlydHVhbCBGbG9hdFJlY3QgcmVzb3VyY2VCb3Vu
ZGluZ0JveChSZW5kZXJPYmplY3QqKSB7IHJldHVybiBGbG9hdFJlY3QoKTsgfQogCiAgICAgdmly
dHVhbCBSZW5kZXJTVkdSZXNvdXJjZVR5cGUgcmVzb3VyY2VUeXBlKCkgY29uc3QgeyByZXR1cm4g
c19yZXNvdXJjZVR5cGU7IH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9z
dmcvUmVuZGVyU1ZHUm9vdC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRl
clNWR1Jvb3QuY3BwCmluZGV4IDdkNDExZGEuLjg2YjkyZDggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUm9vdC5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSb290LmNwcApAQCAtMjUzLDcgKzI1Myw2IEBAIHZv
aWQgUmVuZGVyU1ZHUm9vdDo6cGFpbnQoUGFpbnRJbmZvJiBwYWludEluZm8sIGNvbnN0IExheW91
dFBvaW50JiBwYWludE9mZnNldCkKIHsKICAgICBpZiAocGFpbnRJbmZvLmNvbnRleHQtPnBhaW50
aW5nRGlzYWJsZWQoKSkKICAgICAgICAgcmV0dXJuOwotCiAgICAgYm9vbCBpc1Zpc2libGUgPSBz
dHlsZSgpLT52aXNpYmlsaXR5KCkgPT0gVklTSUJMRTsKICAgICBMYXlvdXRQb2ludCBib3JkZXJC
b3hPcmlnaW5JbkNvbnRhaW5lciA9IHBhaW50T2Zmc2V0ICsgcGFyZW50T3JpZ2luVG9Cb3JkZXJC
b3goKTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJT
VkdTaGFwZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1NoYXBl
LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44MGRkNzY4Ci0tLSAvZGV2
L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdTaGFwZS5j
cHAKQEAgLTAsMCArMSw0NDYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUsIDIw
MDcgTmlrb2xhcyBaaW1tZXJtYW5uIDx6aW1tZXJtYW5uQGtkZS5vcmc+CisgKiBDb3B5cmlnaHQg
KEMpIDIwMDQsIDIwMDUsIDIwMDggUm9iIEJ1aXMgPGJ1aXNAa2RlLm9yZz4KKyAqIENvcHlyaWdo
dCAoQykgMjAwNSwgMjAwNyBFcmljIFNlaWRlbCA8ZXJpY0B3ZWJraXQub3JnPgorICogQ29weXJp
Z2h0IChDKSAyMDA5IEdvb2dsZSwgSW5jLgorICogQ29weXJpZ2h0IChDKSAyMDA5IERpcmsgU2No
dWx6ZSA8a3JpdEB3ZWJraXQub3JnPgorICogQ29weXJpZ2h0IChDKSBSZXNlYXJjaCBJbiBNb3Rp
b24gTGltaXRlZCAyMDEwLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAy
MDA5IEplZmYgU2NoaWxsZXIgPGNvZGVkcmVhZEBnbWFpbC5jb20+CisgKiBDb3B5cmlnaHQgKEMp
IDIwMTEgUmVuYXRhIEhvZG92YW4gPHJlbmlAd2Via2l0Lm9yZz4KKyAqIENvcHlyaWdodCAoQykg
MjAxMSBVbml2ZXJzaXR5IG9mIFN6ZWdlZAorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNv
ZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRl
ciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNl
IGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAq
IHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIg
dmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUg
dGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0
aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3Ig
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFy
eSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNo
b3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJs
aWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZ
SU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRp
b24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1B
IDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisKKyNpZiBFTkFC
TEUoU1ZHKQorI2luY2x1ZGUgIlJlbmRlclNWR1NoYXBlLmgiCisKKyNpbmNsdWRlICJGbG9hdFBv
aW50LmgiCisjaW5jbHVkZSAiRmxvYXRRdWFkLmgiCisjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0
LmgiCisjaW5jbHVkZSAiSGl0VGVzdFJlcXVlc3QuaCIKKyNpbmNsdWRlICJMYXlvdXRSZXBhaW50
ZXIuaCIKKyNpbmNsdWRlICJQb2ludGVyRXZlbnRzSGl0UnVsZXMuaCIKKyNpbmNsdWRlICJSZW5k
ZXJTVkdDb250YWluZXIuaCIKKyNpbmNsdWRlICJSZW5kZXJTVkdSZXNvdXJjZU1hcmtlci5oIgor
I2luY2x1ZGUgIlJlbmRlclNWR1Jlc291cmNlU29saWRDb2xvci5oIgorI2luY2x1ZGUgIlNWR1Bh
dGhFbGVtZW50LmgiCisjaW5jbHVkZSAiU1ZHUmVuZGVyU3VwcG9ydC5oIgorI2luY2x1ZGUgIlNW
R1Jlc291cmNlcy5oIgorI2luY2x1ZGUgIlNWR1N0eWxlZFRyYW5zZm9ybWFibGVFbGVtZW50Lmgi
CisjaW5jbHVkZSAiU1ZHVHJhbnNmb3JtTGlzdC5oIgorI2luY2x1ZGUgIlNWR1VSSVJlZmVyZW5j
ZS5oIgorI2luY2x1ZGUgIlN0cm9rZVN0eWxlQXBwbGllci5oIgorI2luY2x1ZGUgPHd0Zi9NYXRo
RXh0cmFzLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworUmVuZGVyU1ZHU2hhcGU6OlJlbmRl
clNWR1NoYXBlKFNWR1N0eWxlZFRyYW5zZm9ybWFibGVFbGVtZW50KiBub2RlKQorICAgIDogUmVu
ZGVyU1ZHTW9kZWxPYmplY3Qobm9kZSkKKyAgICAsIG1fbmVlZHNCb3VuZGFyaWVzVXBkYXRlKGZh
bHNlKSAvLyBEZWZhdWx0IGlzIGZhbHNlLCB0aGUgY2FjaGVkIHJlY3RzIGFyZSBlbXB0eSBmcm9t
IHRoZSBiZWdpbm5pbmcuCisgICAgLCBtX25lZWRzU2hhcGVVcGRhdGUodHJ1ZSkgLy8gRGVmYXVs
dCBpcyB0cnVlLCBzbyB3ZSBncmFiIGEgUGF0aCBvYmplY3Qgb25jZSBmcm9tIFNWR1N0eWxlZFRy
YW5zZm9ybWFibGVFbGVtZW50LgorICAgICwgbV9uZWVkc1RyYW5zZm9ybVVwZGF0ZSh0cnVlKSAv
LyBEZWZhdWx0IGlzIHRydWUsIHNvIHdlIGdyYWIgYSBBZmZpbmVUcmFuc2Zvcm0gb2JqZWN0IG9u
Y2UgZnJvbSBTVkdTdHlsZWRUcmFuc2Zvcm1hYmxlRWxlbWVudC4KKyAgICAsIG1fZmlsbEZhbGxi
YWNrKGZhbHNlKQoreworfQorCitSZW5kZXJTVkdTaGFwZTo6UmVuZGVyU1ZHU2hhcGUoU1ZHU3R5
bGVkVHJhbnNmb3JtYWJsZUVsZW1lbnQqIG5vZGUsIFBhdGgqIHBhdGgsIGJvb2wgaXNGaWxsRmFs
bGJhY2spCisgICAgOiBSZW5kZXJTVkdNb2RlbE9iamVjdChub2RlKQorICAgICwgbV9wYXRoKGFk
b3B0UHRyKHBhdGgpKQorICAgICwgbV9maWxsRmFsbGJhY2soaXNGaWxsRmFsbGJhY2spCit7Cit9
CisKK1JlbmRlclNWR1NoYXBlOjp+UmVuZGVyU1ZHU2hhcGUoKQoreworfQorCit2b2lkIFJlbmRl
clNWR1NoYXBlOjpjcmVhdGVTaGFwZSgpCit7CisgICAgQVNTRVJUKCFtX3BhdGgpOworICAgIG1f
cGF0aCA9IGFkb3B0UHRyKG5ldyBQYXRoKTsKKyAgICBBU1NFUlQoaXNFbXB0eSgpKTsKKworICAg
IFNWR1BhdGhFbGVtZW50KiBlbGVtZW50ID0gc3RhdGljX2Nhc3Q8U1ZHUGF0aEVsZW1lbnQqPihu
b2RlKCkpOworICAgIGVsZW1lbnQtPnRvUGF0aERhdGEocGF0aCgpKTsKK30KKworYm9vbCBSZW5k
ZXJTVkdTaGFwZTo6aXNFbXB0eSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fcGF0aC0+aXNFbXB0
eSgpOworfQorCit2b2lkIFJlbmRlclNWR1NoYXBlOjpmaWxsU2hhcGUoR3JhcGhpY3NDb250ZXh0
KiBjb250ZXh0KSBjb25zdAoreworICAgIGNvbnRleHQtPmZpbGxQYXRoKHBhdGgoKSk7Cit9CisK
K0Zsb2F0UmVjdCBSZW5kZXJTVkdTaGFwZTo6b2JqZWN0Qm91bmRpbmdCb3goKSBjb25zdAorewor
ICAgIHJldHVybiBtX3BhdGgtPmJvdW5kaW5nUmVjdCgpOworfQorCitGbG9hdFJlY3QgUmVuZGVy
U1ZHU2hhcGU6OnN0cm9rZUJvdW5kaW5nQm94KCkgY29uc3QKK3sKKyAgICBCb3VuZGluZ1JlY3RT
dHJva2VTdHlsZUFwcGxpZXIgc3Ryb2tlU3R5bGUodGhpcywgc3R5bGUoKSk7CisgICAgcmV0dXJu
IG1fcGF0aC0+c3Ryb2tlQm91bmRpbmdSZWN0KCZzdHJva2VTdHlsZSk7Cit9CisKK3ZvaWQgUmVu
ZGVyU1ZHU2hhcGU6OnN0cm9rZVNoYXBlKEdyYXBoaWNzQ29udGV4dCogY29udGV4dCkgY29uc3QK
K3sKKyAgICBjb250ZXh0LT5zdHJva2VQYXRoKHBhdGgoKSk7Cit9CisKK2Jvb2wgUmVuZGVyU1ZH
U2hhcGU6OnNoYXBlRGVwZW5kZW50U3Ryb2tlQ29udGFpbnMoY29uc3QgRmxvYXRQb2ludCYgcG9p
bnQpIGNvbnN0Cit7CisgICAgQm91bmRpbmdSZWN0U3Ryb2tlU3R5bGVBcHBsaWVyIGFwcGxpZXIo
dGhpcywgc3R5bGUoKSk7CisgICAgcmV0dXJuIG1fcGF0aC0+c3Ryb2tlQ29udGFpbnMoJmFwcGxp
ZXIsIHBvaW50KTsKK30KKworYm9vbCBSZW5kZXJTVkdTaGFwZTo6c2hhcGVEZXBlbmRlbnRGaWxs
Q29udGFpbnMoY29uc3QgRmxvYXRQb2ludCYgcG9pbnQsIGNvbnN0IFdpbmRSdWxlIGZpbGxSdWxl
KSBjb25zdAoreworICAgIHJldHVybiBtX3BhdGgtPmNvbnRhaW5zKHBvaW50LCBmaWxsUnVsZSk7
Cit9CisKK2Jvb2wgUmVuZGVyU1ZHU2hhcGU6OmZpbGxDb250YWlucyhjb25zdCBGbG9hdFBvaW50
JiBwb2ludCwgYm9vbCByZXF1aXJlc0ZpbGwsIGNvbnN0IFdpbmRSdWxlIGZpbGxSdWxlKQorewor
ICAgIGlmICghbV9maWxsQm91bmRpbmdCb3guY29udGFpbnMocG9pbnQpKQorICAgICAgICByZXR1
cm4gZmFsc2U7CisKKyAgICBDb2xvciBmYWxsYmFja0NvbG9yOworICAgIGlmIChyZXF1aXJlc0Zp
bGwgJiYgIVJlbmRlclNWR1Jlc291cmNlOjpmaWxsUGFpbnRpbmdSZXNvdXJjZSh0aGlzLCBzdHls
ZSgpLCBmYWxsYmFja0NvbG9yKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgcmV0dXJu
IHNoYXBlRGVwZW5kZW50RmlsbENvbnRhaW5zKHBvaW50LCBmaWxsUnVsZSk7Cit9CisKK2Jvb2wg
UmVuZGVyU1ZHU2hhcGU6OnN0cm9rZUNvbnRhaW5zKGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50LCBi
b29sIHJlcXVpcmVzU3Ryb2tlKQoreworICAgIGlmICghbV9zdHJva2VBbmRNYXJrZXJCb3VuZGlu
Z0JveC5jb250YWlucyhwb2ludCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIENvbG9y
IGZhbGxiYWNrQ29sb3I7CisgICAgaWYgKHJlcXVpcmVzU3Ryb2tlICYmICFSZW5kZXJTVkdSZXNv
dXJjZTo6c3Ryb2tlUGFpbnRpbmdSZXNvdXJjZSh0aGlzLCBzdHlsZSgpLCBmYWxsYmFja0NvbG9y
KSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgaWYgKHNob3VsZFN0cm9rZVplcm9MZW5n
dGhTdWJwYXRoKCkpCisgICAgICAgIHJldHVybiB6ZXJvTGVuZ3RoU3VicGF0aFJlY3QoKS5jb250
YWlucyhwb2ludCk7CisKKyAgICBjb25zdCBTVkdSZW5kZXJTdHlsZSogc3ZnU3R5bGUgPSBzdHls
ZSgpLT5zdmdTdHlsZSgpOworICAgIGlmICghc3ZnU3R5bGUtPnN0cm9rZURhc2hBcnJheSgpLmlz
RW1wdHkoKSB8fCBzdmdTdHlsZS0+c3Ryb2tlTWl0ZXJMaW1pdCgpICE9IHN2Z1N0eWxlLT5pbml0
aWFsU3Ryb2tlTWl0ZXJMaW1pdCgpCisgICAgICAgIHx8IHN2Z1N0eWxlLT5qb2luU3R5bGUoKSAh
PSBzdmdTdHlsZS0+aW5pdGlhbEpvaW5TdHlsZSgpIHx8IHN2Z1N0eWxlLT5jYXBTdHlsZSgpICE9
IHN2Z1N0eWxlLT5pbml0aWFsQ2FwU3R5bGUoKSB8fCBzdGF0aWNfY2FzdDxTVkdFbGVtZW50Kj4o
bm9kZSgpKS0+aXNTdHlsZWQoKSkgeworICAgICAgICBpZiAoIW1fcGF0aCkKKyAgICAgICAgICAg
IFJlbmRlclNWR1NoYXBlOjpjcmVhdGVTaGFwZSgpOworICAgICAgICByZXR1cm4gUmVuZGVyU1ZH
U2hhcGU6OnNoYXBlRGVwZW5kZW50U3Ryb2tlQ29udGFpbnMocG9pbnQpOworICAgIH0KKyAgICBy
ZXR1cm4gc2hhcGVEZXBlbmRlbnRTdHJva2VDb250YWlucyhwb2ludCk7Cit9CisKK3ZvaWQgUmVu
ZGVyU1ZHU2hhcGU6OmxheW91dCgpCit7CisgICAgTGF5b3V0UmVwYWludGVyIHJlcGFpbnRlcigq
dGhpcywgY2hlY2tGb3JSZXBhaW50RHVyaW5nTGF5b3V0KCkgJiYgc2VsZk5lZWRzTGF5b3V0KCkp
OworICAgIFNWR1N0eWxlZFRyYW5zZm9ybWFibGVFbGVtZW50KiBlbGVtZW50ID0gc3RhdGljX2Nh
c3Q8U1ZHU3R5bGVkVHJhbnNmb3JtYWJsZUVsZW1lbnQqPihub2RlKCkpOworCisgICAgYm9vbCB1
cGRhdGVDYWNoZWRCb3VuZGFyaWVzSW5QYXJlbnRzID0gZmFsc2U7CisKKyAgICBib29sIG5lZWRz
U2hhcGVVcGRhdGUgPSBtX25lZWRzU2hhcGVVcGRhdGU7CisgICAgaWYgKG5lZWRzU2hhcGVVcGRh
dGUpIHsKKyAgICAgICAgY3JlYXRlU2hhcGUoKTsKKyAgICAgICAgbV9uZWVkc1NoYXBlVXBkYXRl
ID0gZmFsc2U7CisgICAgICAgIHVwZGF0ZUNhY2hlZEJvdW5kYXJpZXNJblBhcmVudHMgPSB0cnVl
OworICAgIH0KKworICAgIGlmIChtX25lZWRzVHJhbnNmb3JtVXBkYXRlKSB7CisgICAgICAgIG1f
bG9jYWxUcmFuc2Zvcm0gPSBlbGVtZW50LT5hbmltYXRlZExvY2FsVHJhbnNmb3JtKCk7CisgICAg
ICAgIG1fbmVlZHNUcmFuc2Zvcm1VcGRhdGUgPSBmYWxzZTsKKyAgICAgICAgdXBkYXRlQ2FjaGVk
Qm91bmRhcmllc0luUGFyZW50cyA9IHRydWU7CisgICAgfQorCisgICAgaWYgKG1fbmVlZHNCb3Vu
ZGFyaWVzVXBkYXRlKSB7CisgICAgICAgIHVwZGF0ZUNhY2hlZEJvdW5kYXJpZXNJblBhcmVudHMg
PSB0cnVlOworICAgICAgICBzZXRJc1BhaW50aW5nRmFsbGJhY2soZmFsc2UpOworICAgICAgICBj
cmVhdGVTaGFwZSgpOworICAgIH0KKworICAgIC8vIEludmFsaWRhdGUgYWxsIHJlc291cmNlcyBv
ZiB0aGlzIGNsaWVudCBpZiBvdXIgbGF5b3V0IGNoYW5nZWQuCisgICAgaWYgKG1fZXZlckhhZExh
eW91dCAmJiBzZWxmTmVlZHNMYXlvdXQoKSkgeworICAgICAgICBTVkdSZXNvdXJjZXNDYWNoZTo6
Y2xpZW50TGF5b3V0Q2hhbmdlZCh0aGlzKTsKKyAgICAgICAgbV9tYXJrZXJMYXlvdXRJbmZvLmNs
ZWFyKCk7CisgICAgfQorCisgICAgLy8gQXQgdGhpcyBwb2ludCBMYXlvdXRSZXBhaW50ZXIgYWxy
ZWFkeSBncmFiYmVkIHRoZSBvbGQgYm91bmRzLAorICAgIC8vIHJlY2FsY3VsYXRlIHRoZW0gbm93
IHNvIHJlcGFpbnRBZnRlckxheW91dCgpIHVzZXMgdGhlIG5ldyBib3VuZHMuCisgICAgaWYgKG5l
ZWRzU2hhcGVVcGRhdGUgfHwgbV9uZWVkc0JvdW5kYXJpZXNVcGRhdGUpIHsKKyAgICAgICAgdXBk
YXRlQ2FjaGVkQm91bmRhcmllcygpOworICAgICAgICBtX25lZWRzQm91bmRhcmllc1VwZGF0ZSA9
IGZhbHNlOworICAgIH0KKworICAgIC8vIElmIG91ciBib3VuZHMgY2hhbmdlZCwgbm90aWZ5IHRo
ZSBwYXJlbnRzLgorICAgIGlmICh1cGRhdGVDYWNoZWRCb3VuZGFyaWVzSW5QYXJlbnRzKQorICAg
ICAgICBSZW5kZXJTVkdNb2RlbE9iamVjdDo6c2V0TmVlZHNCb3VuZGFyaWVzVXBkYXRlKCk7CisK
KyAgICByZXBhaW50ZXIucmVwYWludEFmdGVyTGF5b3V0KCk7CisgICAgc2V0TmVlZHNMYXlvdXQo
ZmFsc2UpOworfQorCitib29sIFJlbmRlclNWR1NoYXBlOjpzaG91bGRTdHJva2VaZXJvTGVuZ3Ro
U3VicGF0aCgpIGNvbnN0Cit7CisgICAgLy8gU3BlYygxMS40KTogQW55IHplcm8gbGVuZ3RoIHN1
YnBhdGggc2hhbGwgbm90IGJlIHN0cm9rZWQgaWYgdGhlIOKAmHN0cm9rZS1saW5lY2Fw4oCZIHBy
b3BlcnR5IGhhcyBhIHZhbHVlIG9mIGJ1dHQKKyAgICAvLyBidXQgc2hhbGwgYmUgc3Ryb2tlZCBp
ZiB0aGUg4oCYc3Ryb2tlLWxpbmVjYXDigJkgcHJvcGVydHkgaGFzIGEgdmFsdWUgb2Ygcm91bmQg
b3Igc3F1YXJlCisgICAgcmV0dXJuIHN0eWxlKCktPnN2Z1N0eWxlKCktPmhhc1N0cm9rZSgpICYm
IHN0eWxlKCktPnN2Z1N0eWxlKCktPmNhcFN0eWxlKCkgIT0gQnV0dENhcCAmJiAhbV9maWxsQm91
bmRpbmdCb3gud2lkdGgoKSAmJiAhbV9maWxsQm91bmRpbmdCb3guaGVpZ2h0KCk7Cit9CisKK0Zs
b2F0UmVjdCBSZW5kZXJTVkdTaGFwZTo6emVyb0xlbmd0aFN1YnBhdGhSZWN0KCkgY29uc3QKK3sK
KyAgICBmbG9hdCBzdHJva2VXaWR0aCA9IHRoaXMtPnN0cm9rZVdpZHRoKCk7CisgICAgcmV0dXJu
IEZsb2F0UmVjdChtX2ZpbGxCb3VuZGluZ0JveC54KCkgLSBzdHJva2VXaWR0aCAvIDIsIG1fZmls
bEJvdW5kaW5nQm94LnkoKSAtIHN0cm9rZVdpZHRoIC8gMiwgc3Ryb2tlV2lkdGgsIHN0cm9rZVdp
ZHRoKTsKK30KKwordm9pZCBSZW5kZXJTVkdTaGFwZTo6c2V0dXBTcXVhcmVDYXBQYXRoKFBhdGgq
JiB1c2VQYXRoLCBpbnQmIGFwcGx5TW9kZSkKK3sKKyAgICAvLyBTcGVjKDExLjQpOiBBbnkgemVy
byBsZW5ndGggc3VicGF0aCBzaGFsbCBub3QgYmUgc3Ryb2tlZCBpZiB0aGUg4oCYc3Ryb2tlLWxp
bmVjYXDigJkgcHJvcGVydHkgaGFzIGEgdmFsdWUgb2YgYnV0dAorICAgIC8vIGJ1dCBzaGFsbCBi
ZSBzdHJva2VkIGlmIHRoZSDigJhzdHJva2UtbGluZWNhcOKAmSBwcm9wZXJ0eSBoYXMgYSB2YWx1
ZSBvZiByb3VuZCBvciBzcXVhcmUKKyAgICBERUZJTkVfU1RBVElDX0xPQ0FMKFBhdGgsIHRlbXBQ
YXRoLCAoKSk7CisKKyAgICBhcHBseU1vZGUgPSBBcHBseVRvRmlsbE1vZGU7CisgICAgdXNlUGF0
aCA9ICZ0ZW1wUGF0aDsKKyAgICB1c2VQYXRoLT5jbGVhcigpOworICAgIGlmIChzdHlsZSgpLT5z
dmdTdHlsZSgpLT5jYXBTdHlsZSgpID09IFNxdWFyZUNhcCkKKyAgICAgICAgdXNlUGF0aC0+YWRk
UmVjdCh6ZXJvTGVuZ3RoU3VicGF0aFJlY3QoKSk7CisgICAgZWxzZQorICAgICAgICB1c2VQYXRo
LT5hZGRFbGxpcHNlKHplcm9MZW5ndGhTdWJwYXRoUmVjdCgpKTsKK30KKworYm9vbCBSZW5kZXJT
VkdTaGFwZTo6c2V0dXBOb25TY2FsaW5nU3Ryb2tlUGF0aChQYXRoKiYgdXNlUGF0aCwgR3JhcGhp
Y3NDb250ZXh0U3RhdGVTYXZlciYgc3RhdGVTYXZlcikKK3sKKyAgICBERUZJTkVfU1RBVElDX0xP
Q0FMKFBhdGgsIHRlbXBQYXRoLCAoKSk7CisKKyAgICBTVkdTdHlsZWRUcmFuc2Zvcm1hYmxlRWxl
bWVudCogZWxlbWVudCA9IHN0YXRpY19jYXN0PFNWR1N0eWxlZFRyYW5zZm9ybWFibGVFbGVtZW50
Kj4obm9kZSgpKTsKKyAgICBBZmZpbmVUcmFuc2Zvcm0gbm9uU2NhbGluZ1N0cm9rZVRyYW5zZm9y
bSA9IGVsZW1lbnQtPmdldFNjcmVlbkNUTShTVkdMb2NhdGFibGU6OkRpc2FsbG93U3R5bGVVcGRh
dGUpOworICAgIGlmICghbm9uU2NhbGluZ1N0cm9rZVRyYW5zZm9ybS5pc0ludmVydGlibGUoKSkK
KyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgdGVtcFBhdGggPSAqbV9wYXRoOworICAgIHVz
ZVBhdGggPSAmdGVtcFBhdGg7CisgICAgdGVtcFBhdGgudHJhbnNmb3JtKG5vblNjYWxpbmdTdHJv
a2VUcmFuc2Zvcm0pOworCisgICAgc3RhdGVTYXZlci5zYXZlKCk7CisgICAgc3RhdGVTYXZlci5j
b250ZXh0KCktPmNvbmNhdENUTShub25TY2FsaW5nU3Ryb2tlVHJhbnNmb3JtLmludmVyc2UoKSk7
CisgICAgcmV0dXJuIHRydWU7Cit9CisKK3ZvaWQgUmVuZGVyU1ZHU2hhcGU6OmZpbGxBbmRTdHJv
a2VQYXRoKEdyYXBoaWNzQ29udGV4dCogY29udGV4dCkKK3sKKyAgICBSZW5kZXJTdHlsZSogc3R5
bGUgPSB0aGlzLT5zdHlsZSgpOworCisgICAgQ29sb3IgZmFsbGJhY2tDb2xvcjsKKyAgICBpZiAo
UmVuZGVyU1ZHUmVzb3VyY2UqIGZpbGxQYWludGluZ1Jlc291cmNlID0gUmVuZGVyU1ZHUmVzb3Vy
Y2U6OmZpbGxQYWludGluZ1Jlc291cmNlKHRoaXMsIHN0eWxlLCBmYWxsYmFja0NvbG9yKSkgewor
ICAgICAgICBpZiAoZmlsbFBhaW50aW5nUmVzb3VyY2UtPmFwcGx5UmVzb3VyY2UodGhpcywgc3R5
bGUsIGNvbnRleHQsIEFwcGx5VG9GaWxsTW9kZSkpCisgICAgICAgICAgICBmaWxsUGFpbnRpbmdS
ZXNvdXJjZS0+cG9zdEFwcGx5UmVzb3VyY2UodGhpcywgY29udGV4dCwgQXBwbHlUb0ZpbGxNb2Rl
LCAwLCB0aGlzKTsKKyAgICAgICAgZWxzZSBpZiAoZmFsbGJhY2tDb2xvci5pc1ZhbGlkKCkpIHsK
KyAgICAgICAgICAgIFJlbmRlclNWR1Jlc291cmNlU29saWRDb2xvciogZmFsbGJhY2tSZXNvdXJj
ZSA9IFJlbmRlclNWR1Jlc291cmNlOjpzaGFyZWRTb2xpZFBhaW50aW5nUmVzb3VyY2UoKTsKKyAg
ICAgICAgICAgIGZhbGxiYWNrUmVzb3VyY2UtPnNldENvbG9yKGZhbGxiYWNrQ29sb3IpOworICAg
ICAgICAgICAgaWYgKGZhbGxiYWNrUmVzb3VyY2UtPmFwcGx5UmVzb3VyY2UodGhpcywgc3R5bGUs
IGNvbnRleHQsIEFwcGx5VG9GaWxsTW9kZSkpCisgICAgICAgICAgICAgICAgZmFsbGJhY2tSZXNv
dXJjZS0+cG9zdEFwcGx5UmVzb3VyY2UodGhpcywgY29udGV4dCwgQXBwbHlUb0ZpbGxNb2RlLCAw
LCB0aGlzKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIGZhbGxiYWNrQ29sb3IgPSBDb2xvcigp
OworICAgIFJlbmRlclNWR1Jlc291cmNlKiBzdHJva2VQYWludGluZ1Jlc291cmNlID0gUmVuZGVy
U1ZHUmVzb3VyY2U6OnN0cm9rZVBhaW50aW5nUmVzb3VyY2UodGhpcywgc3R5bGUsIGZhbGxiYWNr
Q29sb3IpOworICAgIGlmICghc3Ryb2tlUGFpbnRpbmdSZXNvdXJjZSkKKyAgICAgICAgcmV0dXJu
OworCisgICAgUGF0aCogdXNlUGF0aCA9IG1fcGF0aC5nZXQoKTsKKyAgICBpbnQgYXBwbHlNb2Rl
ID0gQXBwbHlUb1N0cm9rZU1vZGU7CisKKyAgICBib29sIG5vblNjYWxpbmdTdHJva2UgPSBzdHls
ZS0+c3ZnU3R5bGUoKS0+dmVjdG9yRWZmZWN0KCkgPT0gVkVfTk9OX1NDQUxJTkdfU1RST0tFOwor
ICAgIE93blB0cjxQYXRoPiBzYXZlUGF0aDsKKworICAgIEdyYXBoaWNzQ29udGV4dFN0YXRlU2F2
ZXIgc3RhdGVTYXZlcigqY29udGV4dCwgZmFsc2UpOworCisgICAgLy8gU3BlYygxMS40KTogQW55
IHplcm8gbGVuZ3RoIHN1YnBhdGggc2hhbGwgbm90IGJlIHN0cm9rZWQgaWYgdGhlIOKAmHN0cm9r
ZS1saW5lY2Fw4oCZIHByb3BlcnR5IGhhcyBhIHZhbHVlIG9mIGJ1dHQKKyAgICAvLyBidXQgc2hh
bGwgYmUgc3Ryb2tlZCBpZiB0aGUg4oCYc3Ryb2tlLWxpbmVjYXDigJkgcHJvcGVydHkgaGFzIGEg
dmFsdWUgb2Ygcm91bmQgb3Igc3F1YXJlCisgICAgLy8gRklYTUU6IHRoaXMgZG9lcyBub3Qgd29y
ayBmb3IgemVyby1sZW5ndGggc3VicGF0aHMsIG9ubHkgd2hlbiB0b3RhbCBwYXRoIGlzIHplcm8t
bGVuZ3RoCisgICAgaWYgKHNob3VsZFN0cm9rZVplcm9MZW5ndGhTdWJwYXRoKCkpIHsKKyAgICAg
ICAgUmVuZGVyU1ZHU2hhcGU6OmNyZWF0ZVNoYXBlKCk7CisgICAgICAgIHNldHVwU3F1YXJlQ2Fw
UGF0aCh1c2VQYXRoLCBhcHBseU1vZGUpOworICAgICAgICBzZXRJc1BhaW50aW5nRmFsbGJhY2so
dHJ1ZSk7CisgICAgfSBlbHNlIGlmIChub25TY2FsaW5nU3Ryb2tlKSB7CisgICAgICAgIGlmICgh
c2V0dXBOb25TY2FsaW5nU3Ryb2tlUGF0aCh1c2VQYXRoLCBzdGF0ZVNhdmVyKSkKKyAgICAgICAg
ICAgIHJldHVybjsKKyAgICB9CisgICAgaWYgKHN0cm9rZVBhaW50aW5nUmVzb3VyY2UtPmFwcGx5
UmVzb3VyY2UodGhpcywgc3R5bGUsIGNvbnRleHQsIGFwcGx5TW9kZSkpIHsKKyAgICAgICAgc3Ry
b2tlUGFpbnRpbmdSZXNvdXJjZS0+cG9zdEFwcGx5UmVzb3VyY2UodGhpcywgY29udGV4dCwgYXBw
bHlNb2RlLCB1c2VQYXRoLCB0aGlzKTsKKyAgICAgICAgaWYgKHNhdmVQYXRoKQorICAgICAgICAg
ICAgbV9wYXRoID0gc2F2ZVBhdGgucmVsZWFzZSgpOworICAgICAgICByZXR1cm47CisgICAgfQor
ICAgIGlmICghZmFsbGJhY2tDb2xvci5pc1ZhbGlkKCkpIHsKKyAgICAgICAgaWYgKHNhdmVQYXRo
KQorICAgICAgICAgICAgbV9wYXRoID0gc2F2ZVBhdGgucmVsZWFzZSgpOworICAgICAgICByZXR1
cm47CisgICAgfQorICAgIFJlbmRlclNWR1Jlc291cmNlU29saWRDb2xvciogZmFsbGJhY2tSZXNv
dXJjZSA9IFJlbmRlclNWR1Jlc291cmNlOjpzaGFyZWRTb2xpZFBhaW50aW5nUmVzb3VyY2UoKTsK
KyAgICBmYWxsYmFja1Jlc291cmNlLT5zZXRDb2xvcihmYWxsYmFja0NvbG9yKTsKKyAgICBpZiAo
ZmFsbGJhY2tSZXNvdXJjZS0+YXBwbHlSZXNvdXJjZSh0aGlzLCBzdHlsZSwgY29udGV4dCwgYXBw
bHlNb2RlKSkKKyAgICAgICAgZmFsbGJhY2tSZXNvdXJjZS0+cG9zdEFwcGx5UmVzb3VyY2UodGhp
cywgY29udGV4dCwgYXBwbHlNb2RlLCB1c2VQYXRoLCB0aGlzKTsKKyAgICBpZiAoc2F2ZVBhdGgp
CisgICAgICAgIG1fcGF0aCA9IHNhdmVQYXRoLnJlbGVhc2UoKTsKK30KKwordm9pZCBSZW5kZXJT
VkdTaGFwZTo6cGFpbnQoUGFpbnRJbmZvJiBwYWludEluZm8sIGNvbnN0IEludFBvaW50JikKK3sK
KyAgICBpZiAocGFpbnRJbmZvLmNvbnRleHQtPnBhaW50aW5nRGlzYWJsZWQoKSB8fCBzdHlsZSgp
LT52aXNpYmlsaXR5KCkgPT0gSElEREVOIHx8IGlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJuOwor
ICAgIEZsb2F0UmVjdCBib3VuZGluZ0JveCA9IHJlcGFpbnRSZWN0SW5Mb2NhbENvb3JkaW5hdGVz
KCk7CisgICAgaWYgKCFTVkdSZW5kZXJTdXBwb3J0OjpwYWludEluZm9JbnRlcnNlY3RzUmVwYWlu
dFJlY3QoYm91bmRpbmdCb3gsIG1fbG9jYWxUcmFuc2Zvcm0sIHBhaW50SW5mbykpCisgICAgICAg
IHJldHVybjsKKyAgICBQYWludEluZm8gY2hpbGRQYWludEluZm8ocGFpbnRJbmZvKTsKKyAgICBi
b29sIGRyYXdzT3V0bGluZSA9IHN0eWxlKCktPm91dGxpbmVXaWR0aCgpICYmIChjaGlsZFBhaW50
SW5mby5waGFzZSA9PSBQYWludFBoYXNlT3V0bGluZSB8fCBjaGlsZFBhaW50SW5mby5waGFzZSA9
PSBQYWludFBoYXNlU2VsZk91dGxpbmUpOworICAgIGlmIChkcmF3c091dGxpbmUgfHwgY2hpbGRQ
YWludEluZm8ucGhhc2UgPT0gUGFpbnRQaGFzZUZvcmVncm91bmQpIHsKKyAgICAgICAgR3JhcGhp
Y3NDb250ZXh0U3RhdGVTYXZlciBzdGF0ZVNhdmVyKCpjaGlsZFBhaW50SW5mby5jb250ZXh0KTsK
KyAgICAgICAgY2hpbGRQYWludEluZm8uYXBwbHlUcmFuc2Zvcm0obV9sb2NhbFRyYW5zZm9ybSk7
CisKKyAgICAgICAgaWYgKGNoaWxkUGFpbnRJbmZvLnBoYXNlID09IFBhaW50UGhhc2VGb3JlZ3Jv
dW5kKSB7CisgICAgICAgICAgICBQYWludEluZm8gc2F2ZWRJbmZvKGNoaWxkUGFpbnRJbmZvKTsK
KworICAgICAgICAgICAgaWYgKFNWR1JlbmRlclN1cHBvcnQ6OnByZXBhcmVUb1JlbmRlclNWR0Nv
bnRlbnQodGhpcywgY2hpbGRQYWludEluZm8pKSB7CisgICAgICAgICAgICAgICAgY29uc3QgU1ZH
UmVuZGVyU3R5bGUqIHN2Z1N0eWxlID0gc3R5bGUoKS0+c3ZnU3R5bGUoKTsKKyAgICAgICAgICAg
ICAgICBpZiAoc3ZnU3R5bGUtPnNoYXBlUmVuZGVyaW5nKCkgPT0gU1JfQ1JJU1BFREdFUykKKyAg
ICAgICAgICAgICAgICAgICAgY2hpbGRQYWludEluZm8uY29udGV4dC0+c2V0U2hvdWxkQW50aWFs
aWFzKGZhbHNlKTsKKworICAgICAgICAgICAgICAgIGZpbGxBbmRTdHJva2VQYXRoKGNoaWxkUGFp
bnRJbmZvLmNvbnRleHQpOworCisgICAgICAgICAgICAgICAgaWYgKHN2Z1N0eWxlLT5oYXNNYXJr
ZXJzKCkpCisgICAgICAgICAgICAgICAgICAgIG1fbWFya2VyTGF5b3V0SW5mby5kcmF3TWFya2Vy
cyhjaGlsZFBhaW50SW5mbyk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIFNWR1JlbmRl
clN1cHBvcnQ6OmZpbmlzaFJlbmRlclNWR0NvbnRlbnQodGhpcywgY2hpbGRQYWludEluZm8sIHNh
dmVkSW5mby5jb250ZXh0KTsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChkcmF3c091dGxpbmUp
CisgICAgICAgICAgICBwYWludE91dGxpbmUoY2hpbGRQYWludEluZm8uY29udGV4dCwgSW50UmVj
dChib3VuZGluZ0JveCkpOworICAgIH0KK30KKworLy8gVGhpcyBtZXRob2QgaXMgY2FsbGVkIGZy
b20gaW5zaWRlIHBhaW50T3V0bGluZSgpIHNpbmNlIHdlIGNhbGwgcGFpbnRPdXRsaW5lKCkKKy8v
IHdoaWxlIHRyYW5zZm9ybWVkIHRvIG91ciBjb29yZCBzeXN0ZW0sIHJldHVybiBsb2NhbCBjb29y
ZHMKK3ZvaWQgUmVuZGVyU1ZHU2hhcGU6OmFkZEZvY3VzUmluZ1JlY3RzKFZlY3RvcjxMYXlvdXRS
ZWN0PiYgcmVjdHMsIGNvbnN0IExheW91dFBvaW50JikKK3sKKyAgICBMYXlvdXRSZWN0IHJlY3Qg
PSBlbmNsb3NpbmdMYXlvdXRSZWN0KHJlcGFpbnRSZWN0SW5Mb2NhbENvb3JkaW5hdGVzKCkpOwor
ICAgIGlmICghcmVjdC5pc0VtcHR5KCkpCisgICAgICAgIHJlY3RzLmFwcGVuZChyZWN0KTsKK30K
KworYm9vbCBSZW5kZXJTVkdTaGFwZTo6bm9kZUF0RmxvYXRQb2ludChjb25zdCBIaXRUZXN0UmVx
dWVzdCYgcmVxdWVzdCwgSGl0VGVzdFJlc3VsdCYgcmVzdWx0LCBjb25zdCBGbG9hdFBvaW50JiBw
b2ludEluUGFyZW50LCBIaXRUZXN0QWN0aW9uIGhpdFRlc3RBY3Rpb24pCit7CisgICAgLy8gV2Ug
b25seSBkcmF3IGluIHRoZSBmb3Jncm91bmQgcGhhc2UsIHNvIHdlIG9ubHkgaGl0LXRlc3QgdGhl
bi4KKyAgICBpZiAoaGl0VGVzdEFjdGlvbiAhPSBIaXRUZXN0Rm9yZWdyb3VuZCkKKyAgICAgICAg
cmV0dXJuIGZhbHNlOworCisgICAgRmxvYXRQb2ludCBsb2NhbFBvaW50ID0gbV9sb2NhbFRyYW5z
Zm9ybS5pbnZlcnNlKCkubWFwUG9pbnQocG9pbnRJblBhcmVudCk7CisKKyAgICBpZiAoIVNWR1Jl
bmRlclN1cHBvcnQ6OnBvaW50SW5DbGlwcGluZ0FyZWEodGhpcywgbG9jYWxQb2ludCkpCisgICAg
ICAgIHJldHVybiBmYWxzZTsKKworICAgIFBvaW50ZXJFdmVudHNIaXRSdWxlcyBoaXRSdWxlcyhQ
b2ludGVyRXZlbnRzSGl0UnVsZXM6OlNWR19QQVRIX0hJVFRFU1RJTkcsIHJlcXVlc3QsIHN0eWxl
KCktPnBvaW50ZXJFdmVudHMoKSk7CisgICAgYm9vbCBpc1Zpc2libGUgPSAoc3R5bGUoKS0+dmlz
aWJpbGl0eSgpID09IFZJU0lCTEUpOworICAgIGlmIChpc1Zpc2libGUgfHwgIWhpdFJ1bGVzLnJl
cXVpcmVWaXNpYmxlKSB7CisgICAgICAgIGNvbnN0IFNWR1JlbmRlclN0eWxlKiBzdmdTdHlsZSA9
IHN0eWxlKCktPnN2Z1N0eWxlKCk7CisgICAgICAgIFdpbmRSdWxlIGZpbGxSdWxlID0gc3ZnU3R5
bGUtPmZpbGxSdWxlKCk7CisgICAgICAgIGlmIChyZXF1ZXN0LnN2Z0NsaXBDb250ZW50KCkpCisg
ICAgICAgICAgICBmaWxsUnVsZSA9IHN2Z1N0eWxlLT5jbGlwUnVsZSgpOworICAgICAgICBpZiAo
KGhpdFJ1bGVzLmNhbkhpdFN0cm9rZSAmJiAoc3ZnU3R5bGUtPmhhc1N0cm9rZSgpIHx8ICFoaXRS
dWxlcy5yZXF1aXJlU3Ryb2tlKSAmJiBzdHJva2VDb250YWlucyhsb2NhbFBvaW50LCBoaXRSdWxl
cy5yZXF1aXJlU3Ryb2tlKSkKKyAgICAgICAgICAgIHx8IChoaXRSdWxlcy5jYW5IaXRGaWxsICYm
IChzdmdTdHlsZS0+aGFzRmlsbCgpIHx8ICFoaXRSdWxlcy5yZXF1aXJlRmlsbCkgJiYgZmlsbENv
bnRhaW5zKGxvY2FsUG9pbnQsIGhpdFJ1bGVzLnJlcXVpcmVGaWxsLCBmaWxsUnVsZSkpKSB7Cisg
ICAgICAgICAgICB1cGRhdGVIaXRUZXN0UmVzdWx0KHJlc3VsdCwgcm91bmRlZExheW91dFBvaW50
KGxvY2FsUG9pbnQpKTsKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9CisgICAg
fQorICAgIHJldHVybiBmYWxzZTsKK30KKworRmxvYXRSZWN0IFJlbmRlclNWR1NoYXBlOjpjYWxj
dWxhdGVNYXJrZXJCb3VuZHNJZk5lZWRlZCgpCit7CisgICAgU1ZHRWxlbWVudCogc3ZnRWxlbWVu
dCA9IHN0YXRpY19jYXN0PFNWR0VsZW1lbnQqPihub2RlKCkpOworICAgIEFTU0VSVChzdmdFbGVt
ZW50ICYmIHN2Z0VsZW1lbnQtPmRvY3VtZW50KCkpOworICAgIGlmICghc3ZnRWxlbWVudC0+aXNT
dHlsZWQoKSkKKyAgICAgICAgcmV0dXJuIEZsb2F0UmVjdCgpOworCisgICAgU1ZHU3R5bGVkRWxl
bWVudCogc3R5bGVkRWxlbWVudCA9IHN0YXRpY19jYXN0PFNWR1N0eWxlZEVsZW1lbnQqPihzdmdF
bGVtZW50KTsKKyAgICBpZiAoIXN0eWxlZEVsZW1lbnQtPnN1cHBvcnRzTWFya2VycygpKQorICAg
ICAgICByZXR1cm4gRmxvYXRSZWN0KCk7CisKKyAgICBBU1NFUlQoc3R5bGUoKS0+c3ZnU3R5bGUo
KS0+aGFzTWFya2VycygpKTsKKworICAgIFNWR1Jlc291cmNlcyogcmVzb3VyY2VzID0gU1ZHUmVz
b3VyY2VzQ2FjaGU6OmNhY2hlZFJlc291cmNlc0ZvclJlbmRlck9iamVjdCh0aGlzKTsKKyAgICBp
ZiAoIXJlc291cmNlcykKKyAgICAgICAgcmV0dXJuIEZsb2F0UmVjdCgpOworCisgICAgUmVuZGVy
U1ZHUmVzb3VyY2VNYXJrZXIqIG1hcmtlclN0YXJ0ID0gcmVzb3VyY2VzLT5tYXJrZXJTdGFydCgp
OworICAgIFJlbmRlclNWR1Jlc291cmNlTWFya2VyKiBtYXJrZXJNaWQgPSByZXNvdXJjZXMtPm1h
cmtlck1pZCgpOworICAgIFJlbmRlclNWR1Jlc291cmNlTWFya2VyKiBtYXJrZXJFbmQgPSByZXNv
dXJjZXMtPm1hcmtlckVuZCgpOworICAgIGlmICghbWFya2VyU3RhcnQgJiYgIW1hcmtlck1pZCAm
JiAhbWFya2VyRW5kKQorICAgICAgICByZXR1cm4gRmxvYXRSZWN0KCk7CisKKyAgICByZXR1cm4g
bV9tYXJrZXJMYXlvdXRJbmZvLmNhbGN1bGF0ZUJvdW5kYXJpZXMobWFya2VyU3RhcnQsIG1hcmtl
ck1pZCwgbWFya2VyRW5kLCBzdHJva2VXaWR0aCgpLCBwYXRoKCkpOworfQorCit2b2lkIFJlbmRl
clNWR1NoYXBlOjp1cGRhdGVDYWNoZWRCb3VuZGFyaWVzKCkKK3sKKyAgICBpZiAoaXNFbXB0eSgp
KSB7CisgICAgICAgIG1fZmlsbEJvdW5kaW5nQm94ID0gRmxvYXRSZWN0KCk7CisgICAgICAgIG1f
c3Ryb2tlQW5kTWFya2VyQm91bmRpbmdCb3ggPSBGbG9hdFJlY3QoKTsKKyAgICAgICAgbV9yZXBh
aW50Qm91bmRpbmdCb3ggPSBGbG9hdFJlY3QoKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKwor
ICAgIC8vIENhY2hlIF91bmNsaXBwZWRfIGZpbGwgYm91bmRpbmcgYm94LCB1c2VkIGZvciBjYWxj
dWxhdGlvbnMgaW4gcmVzb3VyY2VzCisgICAgbV9maWxsQm91bmRpbmdCb3ggPSBvYmplY3RCb3Vu
ZGluZ0JveCgpOworCisgICAgLy8gU3BlYygxMS40KTogQW55IHplcm8gbGVuZ3RoIHN1YnBhdGgg
c2hhbGwgbm90IGJlIHN0cm9rZWQgaWYgdGhlIOKAmHN0cm9rZS1saW5lY2Fw4oCZIHByb3BlcnR5
IGhhcyBhIHZhbHVlIG9mIGJ1dHQKKyAgICAvLyBidXQgc2hhbGwgYmUgc3Ryb2tlZCBpZiB0aGUg
4oCYc3Ryb2tlLWxpbmVjYXDigJkgcHJvcGVydHkgaGFzIGEgdmFsdWUgb2Ygcm91bmQgb3Igc3F1
YXJlCisgICAgaWYgKHNob3VsZFN0cm9rZVplcm9MZW5ndGhTdWJwYXRoKCkpIHsKKyAgICAgICAg
bV9zdHJva2VBbmRNYXJrZXJCb3VuZGluZ0JveCA9IHplcm9MZW5ndGhTdWJwYXRoUmVjdCgpOwor
ICAgICAgICAvLyBDYWNoZSBzbWFsbGVzdCBwb3NzaWJsZSByZXBhaW50IHJlY3RhbmdsZQorICAg
ICAgICBtX3JlcGFpbnRCb3VuZGluZ0JveCA9IG1fc3Ryb2tlQW5kTWFya2VyQm91bmRpbmdCb3g7
CisgICAgICAgIFNWR1JlbmRlclN1cHBvcnQ6OmludGVyc2VjdFJlcGFpbnRSZWN0V2l0aFJlc291
cmNlcyh0aGlzLCBtX3JlcGFpbnRCb3VuZGluZ0JveCk7CisgICAgICAgIHJldHVybjsKKyAgICB9
CisgICAgLy8gQ2FjaGUgX3VuY2xpcHBlZF8gc3Ryb2tlIGJvdW5kaW5nIGJveCwgdXNlZCBmb3Ig
Y2FsY3VsYXRpb25zIGluIHJlc291cmNlcyAoaW5jbHVkZXMgbWFya2VyIGJvdW5kYXJpZXMpCisg
ICAgbV9zdHJva2VBbmRNYXJrZXJCb3VuZGluZ0JveCA9IG1fZmlsbEJvdW5kaW5nQm94OworCisg
ICAgY29uc3QgU1ZHUmVuZGVyU3R5bGUqIHN2Z1N0eWxlID0gc3R5bGUoKS0+c3ZnU3R5bGUoKTsK
KyAgICBpZiAoc3ZnU3R5bGUtPmhhc1N0cm9rZSgpKQorICAgICAgICBtX3N0cm9rZUFuZE1hcmtl
ckJvdW5kaW5nQm94LnVuaXRlKHN0cm9rZUJvdW5kaW5nQm94KCkpOworCisgICAgaW5mbGF0ZVdp
dGhNYXJrZXJCb3VuZHMoKTsKKworICAgIC8vIENhY2hlIHNtYWxsZXN0IHBvc3NpYmxlIHJlcGFp
bnQgcmVjdGFuZ2xlCisgICAgbV9yZXBhaW50Qm91bmRpbmdCb3ggPSBtX3N0cm9rZUFuZE1hcmtl
ckJvdW5kaW5nQm94OworICAgIFNWR1JlbmRlclN1cHBvcnQ6OmludGVyc2VjdFJlcGFpbnRSZWN0
V2l0aFJlc291cmNlcyh0aGlzLCBtX3JlcGFpbnRCb3VuZGluZ0JveCk7Cit9CisKK2Zsb2F0IFJl
bmRlclNWR1NoYXBlOjpzdHJva2VXaWR0aCgpIGNvbnN0Cit7CisgICAgU1ZHRWxlbWVudCogc3Zn
RWxlbWVudCA9IHN0YXRpY19jYXN0PFNWR0VsZW1lbnQqPihub2RlKCkpOworICAgIHJldHVybiBz
dHlsZSgpLT5zdmdTdHlsZSgpLT5zdHJva2VXaWR0aCgpLnZhbHVlKHN2Z0VsZW1lbnQpOworfQor
Cit9CisKKyNlbmRpZiAvLyBFTkFCTEUoU1ZHKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdTaGFwZS5oIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L3N2Zy9SZW5kZXJTVkdTaGFwZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAu
LmNhYThjYzIKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3Zn
L1JlbmRlclNWR1NoYXBlLmgKQEAgLTAsMCArMSwxNjEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMDQsIDIwMDUsIDIwMDcgTmlrb2xhcyBaaW1tZXJtYW5uIDx6aW1tZXJtYW5uQGtkZS5vcmc+
CisgKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUgUm9iIEJ1aXMgPGJ1aXNAa2RlLm9yZz4KKyAq
IENvcHlyaWdodCAoQykgMjAwNSBFcmljIFNlaWRlbCA8ZXJpY0B3ZWJraXQub3JnPgorICogQ29w
eXJpZ2h0IChDKSAyMDA2IEFwcGxlIENvbXB1dGVyLCBJbmMKKyAqIENvcHlyaWdodCAoQykgMjAw
OSBHb29nbGUsIEluYy4KKyAqIENvcHlyaWdodCAoQykgMjAxMSBSZW5hdGEgSG9kb3ZhbiA8cmVu
aUB3ZWJraXQub3JnPgorICogQ29weXJpZ2h0IChDKSAyMDExIFVuaXZlcnNpdHkgb2YgU3plZ2Vk
CisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmli
dXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExp
YnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVl
IFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNl
LCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGli
cmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAor
ICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2Fy
cmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIg
UFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2Ug
Zm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5
IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRo
IHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0
bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3Ry
ZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisK
KyNpZm5kZWYgUmVuZGVyU1ZHU2hhcGVfaAorI2RlZmluZSBSZW5kZXJTVkdTaGFwZV9oCisKKyNp
ZiBFTkFCTEUoU1ZHKQorI2luY2x1ZGUgIkFmZmluZVRyYW5zZm9ybS5oIgorI2luY2x1ZGUgIkZs
b2F0UmVjdC5oIgorI2luY2x1ZGUgIlJlbmRlclNWR01vZGVsT2JqZWN0LmgiCisjaW5jbHVkZSAi
U1ZHTWFya2VyTGF5b3V0SW5mby5oIgorI2luY2x1ZGUgIlN0cm9rZVN0eWxlQXBwbGllci5oIgor
I2luY2x1ZGUgPHd0Zi9Pd25QdHIuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBG
bG9hdFBvaW50OworY2xhc3MgR3JhcGhpY3NDb250ZXh0U3RhdGVTYXZlcjsKK2NsYXNzIFJlbmRl
clNWR0NvbnRhaW5lcjsKK2NsYXNzIFJlbmRlclNWR1BhdGg7CitjbGFzcyBTVkdTdHlsZWRUcmFu
c2Zvcm1hYmxlRWxlbWVudDsKKworY2xhc3MgQm91bmRpbmdSZWN0U3Ryb2tlU3R5bGVBcHBsaWVy
IDogcHVibGljIFN0cm9rZVN0eWxlQXBwbGllciB7CitwdWJsaWM6CisgICAgQm91bmRpbmdSZWN0
U3Ryb2tlU3R5bGVBcHBsaWVyKGNvbnN0IFJlbmRlck9iamVjdCogb2JqZWN0LCBSZW5kZXJTdHls
ZSogc3R5bGUpCisgICAgICAgIDogbV9vYmplY3Qob2JqZWN0KQorICAgICAgICAsIG1fc3R5bGUo
c3R5bGUpCisgICAgeworICAgICAgICBBU1NFUlQoc3R5bGUpOworICAgICAgICBBU1NFUlQob2Jq
ZWN0KTsKKyAgICB9CisKKyAgICB2b2lkIHN0cm9rZVN0eWxlKEdyYXBoaWNzQ29udGV4dCogY29u
dGV4dCkKKyAgICB7CisgICAgICAgIFNWR1JlbmRlclN1cHBvcnQ6OmFwcGx5U3Ryb2tlU3R5bGVU
b0NvbnRleHQoY29udGV4dCwgbV9zdHlsZSwgbV9vYmplY3QpOworICAgIH0KKworcHJpdmF0ZToK
KyAgICBjb25zdCBSZW5kZXJPYmplY3QqIG1fb2JqZWN0OworICAgIFJlbmRlclN0eWxlKiBtX3N0
eWxlOworfTsKKworY2xhc3MgUmVuZGVyU1ZHU2hhcGUgOiBwdWJsaWMgUmVuZGVyU1ZHTW9kZWxP
YmplY3QgeworcHVibGljOgorICAgIGV4cGxpY2l0IFJlbmRlclNWR1NoYXBlKFNWR1N0eWxlZFRy
YW5zZm9ybWFibGVFbGVtZW50Kik7CisgICAgUmVuZGVyU1ZHU2hhcGUoU1ZHU3R5bGVkVHJhbnNm
b3JtYWJsZUVsZW1lbnQqLCBQYXRoKiwgYm9vbCk7CisgICAgdmlydHVhbCB+UmVuZGVyU1ZHU2hh
cGUoKTsKKworICAgIHZvaWQgc2V0TmVlZHNTaGFwZVVwZGF0ZSgpIHsgbV9uZWVkc1NoYXBlVXBk
YXRlID0gdHJ1ZTsgfQorICAgIHZpcnR1YWwgdm9pZCBzZXROZWVkc0JvdW5kYXJpZXNVcGRhdGUo
KSB7IG1fbmVlZHNCb3VuZGFyaWVzVXBkYXRlID0gdHJ1ZTsgfQorICAgIHZpcnR1YWwgdm9pZCBz
ZXROZWVkc1RyYW5zZm9ybVVwZGF0ZSgpIHsgbV9uZWVkc1RyYW5zZm9ybVVwZGF0ZSA9IHRydWU7
IH0KKyAgICB2aXJ0dWFsIHZvaWQgZmlsbFNoYXBlKEdyYXBoaWNzQ29udGV4dCopIGNvbnN0Owor
ICAgIHZpcnR1YWwgdm9pZCBzdHJva2VTaGFwZShHcmFwaGljc0NvbnRleHQqKSBjb25zdDsKKyAg
ICBib29sIGlzUGFpbnRpbmdGYWxsYmFjaygpIGNvbnN0IHsgcmV0dXJuIG1fZmlsbEZhbGxiYWNr
OyB9CisKKyAgICBQYXRoJiBwYXRoKCkgY29uc3QKKyAgICB7CisgICAgICAgIEFTU0VSVChtX3Bh
dGgpOworICAgICAgICByZXR1cm4gKm1fcGF0aDsKKyAgICB9CisKK3Byb3RlY3RlZDoKKyAgICB2
aXJ0dWFsIHZvaWQgY3JlYXRlU2hhcGUoKTsKKyAgICB2aXJ0dWFsIGJvb2wgaXNFbXB0eSgpIGNv
bnN0OworICAgIHZpcnR1YWwgRmxvYXRSZWN0IG9iamVjdEJvdW5kaW5nQm94KCkgY29uc3Q7Cisg
ICAgdmlydHVhbCBGbG9hdFJlY3Qgc3Ryb2tlQm91bmRpbmdCb3goKSBjb25zdDsKKyAgICB2aXJ0
dWFsIGJvb2wgc2hhcGVEZXBlbmRlbnRTdHJva2VDb250YWlucyhjb25zdCBGbG9hdFBvaW50Jikg
Y29uc3Q7CisgICAgdmlydHVhbCBib29sIHNoYXBlRGVwZW5kZW50RmlsbENvbnRhaW5zKGNvbnN0
IEZsb2F0UG9pbnQmLCBjb25zdCBXaW5kUnVsZSkgY29uc3Q7CisgICAgZmxvYXQgc3Ryb2tlV2lk
dGgoKSBjb25zdDsKKyAgICB2b2lkIHNldElzUGFpbnRpbmdGYWxsYmFjayhib29sIGlzRmFsbGJh
Y2spIHsgbV9maWxsRmFsbGJhY2sgPSBpc0ZhbGxiYWNrOyB9CisgICAgRmxvYXRSZWN0IGNhbGN1
bGF0ZU1hcmtlckJvdW5kc0lmTmVlZGVkKCk7CisgICAgdm9pZCBzZXRTdHJva2VBbmRNYXJrZXJC
b3VuZGluZ0JveChGbG9hdFJlY3QgcmVjdCkgeyBtX3N0cm9rZUFuZE1hcmtlckJvdW5kaW5nQm94
ID0gcmVjdDsgfQorICAgIEZsb2F0UmVjdCBzdHJva2VBbmRNYXJrZXJCb3VuZGluZ0JveCgpIHsg
cmV0dXJuIG1fc3Ryb2tlQW5kTWFya2VyQm91bmRpbmdCb3g7IH0KKworICAgIGJvb2wgaGFzUGF0
aCgpIGNvbnN0IHsgcmV0dXJuIG1fcGF0aC5nZXQoKTsgfQorCitwcml2YXRlOgorICAgIC8vIEhp
dC1kZXRlY3Rpb24gc2VwYXJhdGVkIGZvciB0aGUgZmlsbCBhbmQgdGhlIHN0cm9rZQorICAgIGJv
b2wgZmlsbENvbnRhaW5zKGNvbnN0IEZsb2F0UG9pbnQmLCBib29sIHJlcXVpcmVzRmlsbCA9IHRy
dWUsIGNvbnN0IFdpbmRSdWxlIGZpbGxSdWxlID0gUlVMRV9OT05aRVJPKTsKKyAgICBib29sIHN0
cm9rZUNvbnRhaW5zKGNvbnN0IEZsb2F0UG9pbnQmLCBib29sIHJlcXVpcmVzU3Ryb2tlID0gdHJ1
ZSk7CisKKyAgICB2aXJ0dWFsIEZsb2F0UmVjdCByZXBhaW50UmVjdEluTG9jYWxDb29yZGluYXRl
cygpIGNvbnN0IHsgcmV0dXJuIG1fcmVwYWludEJvdW5kaW5nQm94OyB9CisgICAgdmlydHVhbCBj
b25zdCBBZmZpbmVUcmFuc2Zvcm0mIGxvY2FsVG9QYXJlbnRUcmFuc2Zvcm0oKSBjb25zdCB7IHJl
dHVybiBtX2xvY2FsVHJhbnNmb3JtOyB9CisgICAgdmlydHVhbCBBZmZpbmVUcmFuc2Zvcm0gbG9j
YWxUcmFuc2Zvcm0oKSBjb25zdCB7IHJldHVybiBtX2xvY2FsVHJhbnNmb3JtOyB9CisKKyAgICB2
aXJ0dWFsIGJvb2wgaXNTVkdTaGFwZSgpIGNvbnN0IHsgcmV0dXJuIHRydWU7IH0KKyAgICB2aXJ0
dWFsIGNvbnN0IGNoYXIqIHJlbmRlck5hbWUoKSBjb25zdCB7IHJldHVybiAiUmVuZGVyU1ZHU2hh
cGUiOyB9CisgICAgdmlydHVhbCBib29sIGlzUm91bmRlZFJlY3QoKSB7IHJldHVybiBmYWxzZTsg
fQorCisgICAgdmlydHVhbCB2b2lkIGxheW91dCgpOworICAgIHZpcnR1YWwgdm9pZCBwYWludChQ
YWludEluZm8mLCBjb25zdCBMYXlvdXRQb2ludCYpOworICAgIHZpcnR1YWwgdm9pZCBhZGRGb2N1
c1JpbmdSZWN0cyhWZWN0b3I8TGF5b3V0UmVjdD4mLCBjb25zdCBMYXlvdXRQb2ludCYpOworICAg
IHZpcnR1YWwgdm9pZCBpbmZsYXRlV2l0aE1hcmtlckJvdW5kcygpIHsgfQorCisgICAgdmlydHVh
bCBib29sIG5vZGVBdEZsb2F0UG9pbnQoY29uc3QgSGl0VGVzdFJlcXVlc3QmLCBIaXRUZXN0UmVz
dWx0JiwgY29uc3QgRmxvYXRQb2ludCYgcG9pbnRJblBhcmVudCwgSGl0VGVzdEFjdGlvbik7CisK
KyAgICB2b2lkIHVwZGF0ZUNhY2hlZEJvdW5kYXJpZXMoKTsKKworICAgIHZvaWQgc2V0dXBTcXVh
cmVDYXBQYXRoKFBhdGgqJiwgaW50JiBhcHBseU1vZGUpOworICAgIGJvb2wgc2V0dXBOb25TY2Fs
aW5nU3Ryb2tlUGF0aChQYXRoKiYsIEdyYXBoaWNzQ29udGV4dFN0YXRlU2F2ZXImKTsKKyAgICBi
b29sIHNob3VsZFN0cm9rZVplcm9MZW5ndGhTdWJwYXRoKCkgY29uc3Q7CisgICAgRmxvYXRSZWN0
IHplcm9MZW5ndGhTdWJwYXRoUmVjdCgpIGNvbnN0OworCisgICAgdm9pZCBmaWxsQW5kU3Ryb2tl
UGF0aChHcmFwaGljc0NvbnRleHQqKTsKKworcHJpdmF0ZToKKyAgICBGbG9hdFJlY3QgbV9maWxs
Qm91bmRpbmdCb3g7CisgICAgRmxvYXRSZWN0IG1fc3Ryb2tlQW5kTWFya2VyQm91bmRpbmdCb3g7
CisgICAgRmxvYXRSZWN0IG1fcmVwYWludEJvdW5kaW5nQm94OworICAgIFNWR01hcmtlckxheW91
dEluZm8gbV9tYXJrZXJMYXlvdXRJbmZvOworICAgIEFmZmluZVRyYW5zZm9ybSBtX2xvY2FsVHJh
bnNmb3JtOworICAgIE93blB0cjxQYXRoPiBtX3BhdGg7CisKKyAgICBib29sIG1fbmVlZHNCb3Vu
ZGFyaWVzVXBkYXRlIDogMTsKKyAgICBib29sIG1fbmVlZHNTaGFwZVVwZGF0ZSA6IDE7CisgICAg
Ym9vbCBtX25lZWRzVHJhbnNmb3JtVXBkYXRlIDogMTsKKyAgICBib29sIG1fZmlsbEZhbGxiYWNr
IDogMTsKKyAgICBib29sIG1fc3Ryb2tlQ29udGFpbnNGYWxsQmFjayA6IDE7Cit9OworCitpbmxp
bmUgUmVuZGVyU1ZHU2hhcGUqIHRvUmVuZGVyU1ZHU2hhcGUoUmVuZGVyT2JqZWN0KiBvYmplY3Qp
Cit7CisgICAgQVNTRVJUKCFvYmplY3QgfHwgb2JqZWN0LT5pc1NWR1NoYXBlKCkpOworICAgIHJl
dHVybiBzdGF0aWNfY2FzdDxSZW5kZXJTVkdTaGFwZSo+KG9iamVjdCk7Cit9CisKK2lubGluZSBj
b25zdCBSZW5kZXJTVkdTaGFwZSogdG9SZW5kZXJTVkdTaGFwZShjb25zdCBSZW5kZXJPYmplY3Qq
IG9iamVjdCkKK3sKKyAgICBBU1NFUlQoIW9iamVjdCB8fCBvYmplY3QtPmlzU1ZHU2hhcGUoKSk7
CisgICAgcmV0dXJuIHN0YXRpY19jYXN0PGNvbnN0IFJlbmRlclNWR1NoYXBlKj4ob2JqZWN0KTsK
K30KKworLy8gVGhpcyB3aWxsIGNhdGNoIGFueW9uZSBkb2luZyBhbiB1bm5lY2Vzc2FyeSBjYXN0
Lgordm9pZCB0b1JlbmRlclNWR1NoYXBlKGNvbnN0IFJlbmRlclNWR1NoYXBlKik7CisKK30KKwor
I2VuZGlmIC8vIEVOQUJMRShTVkcpCisjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9zdmcvU1ZHSW5saW5lVGV4dEJveC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvc3ZnL1NWR0lubGluZVRleHRCb3guY3BwCmluZGV4IGMxYzVhZmEuLmU4YzJhZjggMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHSW5saW5lVGV4dEJveC5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdJbmxpbmVUZXh0Qm94LmNw
cApAQCAtMzc3LDcgKzM3Nyw3IEBAIHZvaWQgU1ZHSW5saW5lVGV4dEJveDo6cmVsZWFzZVBhaW50
aW5nUmVzb3VyY2UoR3JhcGhpY3NDb250ZXh0KiYgY29udGV4dCwgY29uc3QKICAgICBSZW5kZXJP
YmplY3QqIHBhcmVudFJlbmRlcmVyID0gcGFyZW50KCktPnJlbmRlcmVyKCk7CiAgICAgQVNTRVJU
KHBhcmVudFJlbmRlcmVyKTsKIAotICAgIG1fcGFpbnRpbmdSZXNvdXJjZS0+cG9zdEFwcGx5UmVz
b3VyY2UocGFyZW50UmVuZGVyZXIsIGNvbnRleHQsIG1fcGFpbnRpbmdSZXNvdXJjZU1vZGUsIHBh
dGgpOworICAgIG1fcGFpbnRpbmdSZXNvdXJjZS0+cG9zdEFwcGx5UmVzb3VyY2UocGFyZW50UmVu
ZGVyZXIsIGNvbnRleHQsIG1fcGFpbnRpbmdSZXNvdXJjZU1vZGUsIHBhdGgsIC8qUmVuZGVyU1ZH
U2hhcGUqLyAwKTsKICAgICBtX3BhaW50aW5nUmVzb3VyY2UgPSAwOwogfQogCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR1JlbmRlclN1cHBvcnQuY3BwIGIvU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdSZW5kZXJTdXBwb3J0LmNwcAppbmRleCAyYmNl
NmEyLi4xNDJkY2U3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NW
R1JlbmRlclN1cHBvcnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZH
UmVuZGVyU3VwcG9ydC5jcHAKQEAgLTc5LDcgKzc5LDYgQEAgdm9pZCBTVkdSZW5kZXJTdXBwb3J0
OjptYXBMb2NhbFRvQ29udGFpbmVyKGNvbnN0IFJlbmRlck9iamVjdCogb2JqZWN0LCBSZW5kZXJC
b3gKIGJvb2wgU1ZHUmVuZGVyU3VwcG9ydDo6cHJlcGFyZVRvUmVuZGVyU1ZHQ29udGVudChSZW5k
ZXJPYmplY3QqIG9iamVjdCwgUGFpbnRJbmZvJiBwYWludEluZm8pCiB7CiAgICAgQVNTRVJUKG9i
amVjdCk7Ci0KICAgICBSZW5kZXJTdHlsZSogc3R5bGUgPSBvYmplY3QtPnN0eWxlKCk7CiAgICAg
QVNTRVJUKHN0eWxlKTsKIApAQCAtMTUxLDcgKzE1MCw3IEBAIHZvaWQgU1ZHUmVuZGVyU3VwcG9y
dDo6ZmluaXNoUmVuZGVyU1ZHQ29udGVudChSZW5kZXJPYmplY3QqIG9iamVjdCwgUGFpbnRJbmZv
JiBwCiAgICAgU1ZHUmVzb3VyY2VzKiByZXNvdXJjZXMgPSBTVkdSZXNvdXJjZXNDYWNoZTo6Y2Fj
aGVkUmVzb3VyY2VzRm9yUmVuZGVyT2JqZWN0KG9iamVjdCk7CiAgICAgaWYgKHJlc291cmNlcykg
ewogICAgICAgICBpZiAoUmVuZGVyU1ZHUmVzb3VyY2VGaWx0ZXIqIGZpbHRlciA9IHJlc291cmNl
cy0+ZmlsdGVyKCkpIHsKLSAgICAgICAgICAgIGZpbHRlci0+cG9zdEFwcGx5UmVzb3VyY2Uob2Jq
ZWN0LCBwYWludEluZm8uY29udGV4dCwgQXBwbHlUb0RlZmF1bHRNb2RlLCAvKiBwYXRoICovMCk7
CisgICAgICAgICAgICBmaWx0ZXItPnBvc3RBcHBseVJlc291cmNlKHN0YXRpY19jYXN0PFJlbmRl
clNWR1NoYXBlKj4ob2JqZWN0KSwgcGFpbnRJbmZvLmNvbnRleHQsIEFwcGx5VG9EZWZhdWx0TW9k
ZSwgMCwgMCk7CiAgICAgICAgICAgICBwYWludEluZm8uY29udGV4dCA9IHNhdmVkQ29udGV4dDsK
ICAgICAgICAgfQogICAgIH0KQEAgLTIyMyw5ICsyMjIsOSBAQCB2b2lkIFNWR1JlbmRlclN1cHBv
cnQ6OmxheW91dENoaWxkcmVuKFJlbmRlck9iamVjdCogc3RhcnQsIGJvb2wgc2VsZk5lZWRzTGF5
b3V0KQogICAgICAgICAgICAgLy8gV2hlbiBzZWxmTmVlZHNMYXlvdXQgaXMgZmFsc2UgYW5kIHRo
ZSBsYXlvdXQgc2l6ZSBjaGFuZ2VkLCB3ZSBoYXZlIHRvIGNoZWNrIHdoZXRoZXIgdGhpcyBjaGls
ZCB1c2VzIHJlbGF0aXZlIGxlbmd0aHMKICAgICAgICAgICAgIGlmIChTVkdFbGVtZW50KiBlbGVt
ZW50ID0gY2hpbGQtPm5vZGUoKS0+aXNTVkdFbGVtZW50KCkgPyBzdGF0aWNfY2FzdDxTVkdFbGVt
ZW50Kj4oY2hpbGQtPm5vZGUoKSkgOiAwKSB7CiAgICAgICAgICAgICAgICAgaWYgKGVsZW1lbnQt
PmlzU3R5bGVkKCkgJiYgc3RhdGljX2Nhc3Q8U1ZHU3R5bGVkRWxlbWVudCo+KGVsZW1lbnQpLT5o
YXNSZWxhdGl2ZUxlbmd0aHMoKSkgewotICAgICAgICAgICAgICAgICAgICAvLyBXaGVuIHRoZSBs
YXlvdXQgc2l6ZSBjaGFuZ2VkIGFuZCB3aGVuIHVzaW5nIHJlbGF0aXZlIHZhbHVlcyB0ZWxsIHRo
ZSBSZW5kZXJTVkdQYXRoIHRvIHVwZGF0ZSBpdHMgUGF0aCBvYmplY3QKLSAgICAgICAgICAgICAg
ICAgICAgaWYgKGNoaWxkLT5pc1NWR1BhdGgoKSkKLSAgICAgICAgICAgICAgICAgICAgICAgIHRv
UmVuZGVyU1ZHUGF0aChjaGlsZCktPnNldE5lZWRzUGF0aFVwZGF0ZSgpOworICAgICAgICAgICAg
ICAgICAgICAvLyBXaGVuIHRoZSBsYXlvdXQgc2l6ZSBjaGFuZ2VkIGFuZCB3aGVuIHVzaW5nIHJl
bGF0aXZlIHZhbHVlcyB0ZWxsIHRoZSBSZW5kZXJTVkdTaGFwZSB0byB1cGRhdGUgaXRzIHNoYXBl
IG9iamVjdAorICAgICAgICAgICAgICAgICAgICBpZiAoY2hpbGQtPmlzU1ZHU2hhcGUoKSkKKyAg
ICAgICAgICAgICAgICAgICAgICAgIHRvUmVuZGVyU1ZHU2hhcGUoY2hpbGQpLT5zZXROZWVkc1No
YXBlVXBkYXRlKCk7CiAKICAgICAgICAgICAgICAgICAgICAgbmVlZHNMYXlvdXQgPSB0cnVlOwog
ICAgICAgICAgICAgICAgIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9z
dmcvU1ZHUmVuZGVyVHJlZUFzVGV4dC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3Zn
L1NWR1JlbmRlclRyZWVBc1RleHQuY3BwCmluZGV4IGExNjI5NjkuLmQxYWQ3MmEgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHUmVuZGVyVHJlZUFzVGV4dC5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdSZW5kZXJUcmVlQXNUZXh0LmNw
cApAQCAtNTUsNiArNTUsNyBAQAogI2luY2x1ZGUgIlJlbmRlclNWR1Jlc291cmNlUmFkaWFsR3Jh
ZGllbnQuaCIKICNpbmNsdWRlICJSZW5kZXJTVkdSZXNvdXJjZVNvbGlkQ29sb3IuaCIKICNpbmNs
dWRlICJSZW5kZXJTVkdSb290LmgiCisjaW5jbHVkZSAiUmVuZGVyU1ZHU2hhcGUuaCIKICNpbmNs
dWRlICJSZW5kZXJTVkdUZXh0LmgiCiAjaW5jbHVkZSAiUmVuZGVyVHJlZUFzVGV4dC5oIgogI2lu
Y2x1ZGUgIlNWR0NpcmNsZUVsZW1lbnQuaCIKQEAgLTI4OSwxOCArMjkwLDE4IEBAIHN0YXRpYyB2
b2lkIHdyaXRlU3R5bGUoVGV4dFN0cmVhbSYgdHMsIGNvbnN0IFJlbmRlck9iamVjdCYgb2JqZWN0
KQogICAgICAgICB3cml0ZU5hbWVWYWx1ZVBhaXIodHMsICJ0cmFuc2Zvcm0iLCBvYmplY3QubG9j
YWxUcmFuc2Zvcm0oKSk7CiAgICAgd3JpdGVJZk5vdERlZmF1bHQodHMsICJpbWFnZSByZW5kZXJp
bmciLCBzdHlsZS0+aW1hZ2VSZW5kZXJpbmcoKSwgUmVuZGVyU3R5bGU6OmluaXRpYWxJbWFnZVJl
bmRlcmluZygpKTsKICAgICB3cml0ZUlmTm90RGVmYXVsdCh0cywgIm9wYWNpdHkiLCBzdHlsZS0+
b3BhY2l0eSgpLCBSZW5kZXJTdHlsZTo6aW5pdGlhbE9wYWNpdHkoKSk7Ci0gICAgaWYgKG9iamVj
dC5pc1NWR1BhdGgoKSkgewotICAgICAgICBjb25zdCBSZW5kZXJTVkdQYXRoJiBwYXRoID0gc3Rh
dGljX2Nhc3Q8Y29uc3QgUmVuZGVyU1ZHUGF0aCY+KG9iamVjdCk7Ci0gICAgICAgIEFTU0VSVChw
YXRoLm5vZGUoKSk7Ci0gICAgICAgIEFTU0VSVChwYXRoLm5vZGUoKS0+aXNTVkdFbGVtZW50KCkp
OworICAgIGlmIChvYmplY3QuaXNTVkdTaGFwZSgpKSB7CisgICAgICAgIGNvbnN0IFJlbmRlclNW
R1NoYXBlJiBzaGFwZSA9IHN0YXRpY19jYXN0PGNvbnN0IFJlbmRlclNWR1NoYXBlJj4ob2JqZWN0
KTsKKyAgICAgICAgQVNTRVJUKHNoYXBlLm5vZGUoKSk7CisgICAgICAgIEFTU0VSVChzaGFwZS5u
b2RlKCktPmlzU1ZHRWxlbWVudCgpKTsKIAogICAgICAgICBDb2xvciBmYWxsYmFja0NvbG9yOwot
ICAgICAgICBpZiAoUmVuZGVyU1ZHUmVzb3VyY2UqIHN0cm9rZVBhaW50aW5nUmVzb3VyY2UgPSBS
ZW5kZXJTVkdSZXNvdXJjZTo6c3Ryb2tlUGFpbnRpbmdSZXNvdXJjZShjb25zdF9jYXN0PFJlbmRl
clNWR1BhdGgqPigmcGF0aCksIHBhdGguc3R5bGUoKSwgZmFsbGJhY2tDb2xvcikpIHsKKyAgICAg
ICAgaWYgKFJlbmRlclNWR1Jlc291cmNlKiBzdHJva2VQYWludGluZ1Jlc291cmNlID0gUmVuZGVy
U1ZHUmVzb3VyY2U6OnN0cm9rZVBhaW50aW5nUmVzb3VyY2UoY29uc3RfY2FzdDxSZW5kZXJTVkdT
aGFwZSo+KCZzaGFwZSksIHNoYXBlLnN0eWxlKCksIGZhbGxiYWNrQ29sb3IpKSB7CiAgICAgICAg
ICAgICBUZXh0U3RyZWFtU2VwYXJhdG9yIHMoIiAiKTsKICAgICAgICAgICAgIHRzIDw8ICIgW3N0
cm9rZT17IiA8PCBzOwogICAgICAgICAgICAgd3JpdGVTVkdQYWludGluZ1Jlc291cmNlKHRzLCBz
dHJva2VQYWludGluZ1Jlc291cmNlKTsKIAotICAgICAgICAgICAgU1ZHRWxlbWVudCogZWxlbWVu
dCA9IHN0YXRpY19jYXN0PFNWR0VsZW1lbnQqPihwYXRoLm5vZGUoKSk7CisgICAgICAgICAgICBT
VkdFbGVtZW50KiBlbGVtZW50ID0gc3RhdGljX2Nhc3Q8U1ZHRWxlbWVudCo+KHNoYXBlLm5vZGUo
KSk7CiAgICAgICAgICAgICBkb3VibGUgZGFzaE9mZnNldCA9IHN2Z1N0eWxlLT5zdHJva2VEYXNo
T2Zmc2V0KCkudmFsdWUoZWxlbWVudCk7CiAgICAgICAgICAgICBkb3VibGUgc3Ryb2tlV2lkdGgg
PSBzdmdTdHlsZS0+c3Ryb2tlV2lkdGgoKS52YWx1ZShlbGVtZW50KTsKICAgICAgICAgICAgIGNv
bnN0IFZlY3RvcjxTVkdMZW5ndGg+JiBkYXNoZXMgPSBzdmdTdHlsZS0+c3Ryb2tlRGFzaEFycmF5
KCk7CkBAIC0zMjIsNyArMzIzLDcgQEAgc3RhdGljIHZvaWQgd3JpdGVTdHlsZShUZXh0U3RyZWFt
JiB0cywgY29uc3QgUmVuZGVyT2JqZWN0JiBvYmplY3QpCiAgICAgICAgICAgICB0cyA8PCAifV0i
OwogICAgICAgICB9CiAKLSAgICAgICAgaWYgKFJlbmRlclNWR1Jlc291cmNlKiBmaWxsUGFpbnRp
bmdSZXNvdXJjZSA9IFJlbmRlclNWR1Jlc291cmNlOjpmaWxsUGFpbnRpbmdSZXNvdXJjZShjb25z
dF9jYXN0PFJlbmRlclNWR1BhdGgqPigmcGF0aCksIHBhdGguc3R5bGUoKSwgZmFsbGJhY2tDb2xv
cikpIHsKKyAgICAgICAgaWYgKFJlbmRlclNWR1Jlc291cmNlKiBmaWxsUGFpbnRpbmdSZXNvdXJj
ZSA9IFJlbmRlclNWR1Jlc291cmNlOjpmaWxsUGFpbnRpbmdSZXNvdXJjZShjb25zdF9jYXN0PFJl
bmRlclNWR1NoYXBlKj4oJnNoYXBlKSwgc2hhcGUuc3R5bGUoKSwgZmFsbGJhY2tDb2xvcikpIHsK
ICAgICAgICAgICAgIFRleHRTdHJlYW1TZXBhcmF0b3IgcygiICIpOwogICAgICAgICAgICAgdHMg
PDwgIiBbZmlsbD17IiA8PCBzOwogICAgICAgICAgICAgd3JpdGVTVkdQYWludGluZ1Jlc291cmNl
KHRzLCBmaWxsUGFpbnRpbmdSZXNvdXJjZSk7CkBAIC0zNDYsMTIgKzM0NywxMiBAQCBzdGF0aWMg
VGV4dFN0cmVhbSYgd3JpdGVQb3NpdGlvbkFuZFN0eWxlKFRleHRTdHJlYW0mIHRzLCBjb25zdCBS
ZW5kZXJPYmplY3QmIG9iagogICAgIHJldHVybiB0czsKIH0KIAotc3RhdGljIFRleHRTdHJlYW0m
IG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYgdHMsIGNvbnN0IFJlbmRlclNWR1BhdGgmIHBhdGgpCitz
dGF0aWMgVGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiB0cywgY29uc3QgUmVuZGVy
U1ZHU2hhcGUmIHNoYXBlKQogewotICAgIHdyaXRlUG9zaXRpb25BbmRTdHlsZSh0cywgcGF0aCk7
CisgICAgd3JpdGVQb3NpdGlvbkFuZFN0eWxlKHRzLCBzaGFwZSk7CiAKLSAgICBBU1NFUlQocGF0
aC5ub2RlKCktPmlzU1ZHRWxlbWVudCgpKTsKLSAgICBTVkdFbGVtZW50KiBzdmdFbGVtZW50ID0g
c3RhdGljX2Nhc3Q8U1ZHRWxlbWVudCo+KHBhdGgubm9kZSgpKTsKKyAgICBBU1NFUlQoc2hhcGUu
bm9kZSgpLT5pc1NWR0VsZW1lbnQoKSk7CisgICAgU1ZHRWxlbWVudCogc3ZnRWxlbWVudCA9IHN0
YXRpY19jYXN0PFNWR0VsZW1lbnQqPihzaGFwZS5ub2RlKCkpOwogCiAgICAgaWYgKHN2Z0VsZW1l
bnQtPmhhc1RhZ05hbWUoU1ZHTmFtZXM6OnJlY3RUYWcpKSB7CiAgICAgICAgIFNWR1JlY3RFbGVt
ZW50KiBlbGVtZW50ID0gc3RhdGljX2Nhc3Q8U1ZHUmVjdEVsZW1lbnQqPihzdmdFbGVtZW50KTsK
QEAgLTY1MywxMSArNjU0LDExIEBAIHZvaWQgd3JpdGVTVkdJbWFnZShUZXh0U3RyZWFtJiB0cywg
Y29uc3QgUmVuZGVyU1ZHSW1hZ2UmIGltYWdlLCBpbnQgaW5kZW50KQogICAgIHdyaXRlUmVzb3Vy
Y2VzKHRzLCBpbWFnZSwgaW5kZW50KTsKIH0KIAotdm9pZCB3cml0ZShUZXh0U3RyZWFtJiB0cywg
Y29uc3QgUmVuZGVyU1ZHUGF0aCYgcGF0aCwgaW50IGluZGVudCkKK3ZvaWQgd3JpdGUoVGV4dFN0
cmVhbSYgdHMsIGNvbnN0IFJlbmRlclNWR1NoYXBlJiBzaGFwZSwgaW50IGluZGVudCkKIHsKLSAg
ICB3cml0ZVN0YW5kYXJkUHJlZml4KHRzLCBwYXRoLCBpbmRlbnQpOwotICAgIHRzIDw8IHBhdGgg
PDwgIlxuIjsKLSAgICB3cml0ZVJlc291cmNlcyh0cywgcGF0aCwgaW5kZW50KTsKKyAgICB3cml0
ZVN0YW5kYXJkUHJlZml4KHRzLCBzaGFwZSwgaW5kZW50KTsKKyAgICB0cyA8PCBzaGFwZSA8PCAi
XG4iOworICAgIHdyaXRlUmVzb3VyY2VzKHRzLCBzaGFwZSwgaW5kZW50KTsKIH0KIAogdm9pZCB3
cml0ZVNWR0dyYWRpZW50U3RvcChUZXh0U3RyZWFtJiB0cywgY29uc3QgUmVuZGVyU1ZHR3JhZGll
bnRTdG9wJiBzdG9wLCBpbnQgaW5kZW50KQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL3N2Zy9TVkdSZW5kZXJUcmVlQXNUZXh0LmggYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvc3ZnL1NWR1JlbmRlclRyZWVBc1RleHQuaAppbmRleCBjZTA3YTVjLi4zNTk4YzgzIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR1JlbmRlclRyZWVBc1RleHQu
aAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR1JlbmRlclRyZWVBc1RleHQu
aApAQCAtNDEsMTQgKzQxLDE0IEBAIGNsYXNzIFJlbmRlckltYWdlOwogY2xhc3MgUmVuZGVyT2Jq
ZWN0OwogY2xhc3MgUmVuZGVyU1ZHR3JhZGllbnRTdG9wOwogY2xhc3MgUmVuZGVyU1ZHSW1hZ2U7
Ci1jbGFzcyBSZW5kZXJTVkdQYXRoOworY2xhc3MgUmVuZGVyU1ZHU2hhcGU7CiBjbGFzcyBSZW5k
ZXJTVkdSb290OwogY2xhc3MgUmVuZGVyVGV4dDsKIGNsYXNzIEFmZmluZVRyYW5zZm9ybTsKIGNs
YXNzIFNWR1VuaXRUeXBlczsKIAogLy8gZnVuY3Rpb25zIHVzZWQgYnkgdGhlIG1haW4gUmVuZGVy
VHJlZUFzVGV4dCBjb2RlCi12b2lkIHdyaXRlKFRleHRTdHJlYW0mLCBjb25zdCBSZW5kZXJTVkdQ
YXRoJiwgaW50IGluZGVudCk7Cit2b2lkIHdyaXRlKFRleHRTdHJlYW0mLCBjb25zdCBSZW5kZXJT
VkdTaGFwZSYsIGludCBpbmRlbnQpOwogdm9pZCB3cml0ZShUZXh0U3RyZWFtJiwgY29uc3QgUmVu
ZGVyU1ZHUm9vdCYsIGludCBpbmRlbnQpOwogdm9pZCB3cml0ZVNWR0dyYWRpZW50U3RvcChUZXh0
U3RyZWFtJiwgY29uc3QgUmVuZGVyU1ZHR3JhZGllbnRTdG9wJiwgaW50IGluZGVudCk7CiB2b2lk
IHdyaXRlU1ZHUmVzb3VyY2VDb250YWluZXIoVGV4dFN0cmVhbSYsIGNvbnN0IFJlbmRlck9iamVj
dCYsIGludCBpbmRlbnQpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2
Zy9TVkdUZXh0UnVuUmVuZGVyaW5nQ29udGV4dC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvc3ZnL1NWR1RleHRSdW5SZW5kZXJpbmdDb250ZXh0LmNwcAppbmRleCAzM2FjZjkyLi4yMjRl
Yjg2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR1RleHRSdW5S
ZW5kZXJpbmdDb250ZXh0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NW
R1RleHRSdW5SZW5kZXJpbmdDb250ZXh0LmNwcApAQCAtMTYwLDcgKzE2MCw3IEBAIHZvaWQgU1ZH
VGV4dFJ1blJlbmRlcmluZ0NvbnRleHQ6OmRyYXdTVkdHbHlwaHMoR3JhcGhpY3NDb250ZXh0KiBj
b250ZXh0LCBjb25zdCBUCiAgICAgICAgICAgICAgICAgY29uc3QgUmVuZGVyU1ZHSW5saW5lVGV4
dCogdGV4dFJlbmRlcmVyID0gdG9SZW5kZXJTVkdJbmxpbmVUZXh0KHJlbmRlck9iamVjdCk7CiAg
ICAgICAgICAgICAgICAgY29udGV4dC0+c2V0U3Ryb2tlVGhpY2tuZXNzKGNvbnRleHQtPnN0cm9r
ZVRoaWNrbmVzcygpICogdGV4dFJlbmRlcmVyLT5zY2FsaW5nRmFjdG9yKCkpOwogICAgICAgICAg
ICAgfQotICAgICAgICAgICAgYWN0aXZlUGFpbnRpbmdSZXNvdXJjZS0+cG9zdEFwcGx5UmVzb3Vy
Y2UocGFyZW50UmVuZGVyT2JqZWN0LCBjb250ZXh0LCByZXNvdXJjZU1vZGUsICZnbHlwaFBhdGgp
OworICAgICAgICAgICAgYWN0aXZlUGFpbnRpbmdSZXNvdXJjZS0+cG9zdEFwcGx5UmVzb3VyY2Uo
cGFyZW50UmVuZGVyT2JqZWN0LCBjb250ZXh0LCByZXNvdXJjZU1vZGUsICZnbHlwaFBhdGgsIDAp
OwogICAgICAgICAgfQogIAogICAgICAgICBjb250ZXh0LT5yZXN0b3JlKCk7CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHQ2lyY2xlRWxlbWVudC5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9zdmcvU1ZHQ2lyY2xlRWxlbWVudC5jcHAKaW5kZXggMjg4ZTU4YS4uZTUzZDI3ZSAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0NpcmNsZUVsZW1lbnQuY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3N2Zy9TVkdDaXJjbGVFbGVtZW50LmNwcApAQCAtMTI0LDcgKzEyNCw3IEBAIHZv
aWQgU1ZHQ2lyY2xlRWxlbWVudDo6c3ZnQXR0cmlidXRlQ2hhbmdlZChjb25zdCBRdWFsaWZpZWRO
YW1lJiBhdHRyTmFtZSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgaWYgKGlzTGVuZ3RoQXR0cmli
dXRlKSB7Ci0gICAgICAgIHJlbmRlcmVyLT5zZXROZWVkc1BhdGhVcGRhdGUoKTsKKyAgICAgICAg
cmVuZGVyZXItPnNldE5lZWRzU2hhcGVVcGRhdGUoKTsKICAgICAgICAgUmVuZGVyU1ZHUmVzb3Vy
Y2U6Om1hcmtGb3JMYXlvdXRBbmRQYXJlbnRSZXNvdXJjZUludmFsaWRhdGlvbihyZW5kZXJlcik7
CiAgICAgICAgIHJldHVybjsKICAgICB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9zdmcv
U1ZHRWxsaXBzZUVsZW1lbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0VsbGlwc2VFbGVt
ZW50LmNwcAppbmRleCA5YjlkYTY4Li42MTU5ZTJjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9zdmcvU1ZHRWxsaXBzZUVsZW1lbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdF
bGxpcHNlRWxlbWVudC5jcHAKQEAgLTEyOSw3ICsxMjksNyBAQCB2b2lkIFNWR0VsbGlwc2VFbGVt
ZW50OjpzdmdBdHRyaWJ1dGVDaGFuZ2VkKGNvbnN0IFF1YWxpZmllZE5hbWUmIGF0dHJOYW1lKQog
ICAgICAgICByZXR1cm47CiAKICAgICBpZiAoaXNMZW5ndGhBdHRyaWJ1dGUpIHsKLSAgICAgICAg
cmVuZGVyZXItPnNldE5lZWRzUGF0aFVwZGF0ZSgpOworICAgICAgICByZW5kZXJlci0+c2V0TmVl
ZHNTaGFwZVVwZGF0ZSgpOwogICAgICAgICBSZW5kZXJTVkdSZXNvdXJjZTo6bWFya0ZvckxheW91
dEFuZFBhcmVudFJlc291cmNlSW52YWxpZGF0aW9uKHJlbmRlcmVyKTsKICAgICAgICAgcmV0dXJu
OwogICAgIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdMaW5lRWxlbWVudC5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHTGluZUVsZW1lbnQuY3BwCmluZGV4IGM5YjIxNDcu
LmQwZDA4NmUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdMaW5lRWxlbWVudC5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0xpbmVFbGVtZW50LmNwcApAQCAtMTI5LDcg
KzEyOSw3IEBAIHZvaWQgU1ZHTGluZUVsZW1lbnQ6OnN2Z0F0dHJpYnV0ZUNoYW5nZWQoY29uc3Qg
UXVhbGlmaWVkTmFtZSYgYXR0ck5hbWUpCiAgICAgICAgIHJldHVybjsKIAogICAgIGlmIChpc0xl
bmd0aEF0dHJpYnV0ZSkgewotICAgICAgICByZW5kZXJlci0+c2V0TmVlZHNQYXRoVXBkYXRlKCk7
CisgICAgICAgIHJlbmRlcmVyLT5zZXROZWVkc1NoYXBlVXBkYXRlKCk7CiAgICAgICAgIFJlbmRl
clNWR1Jlc291cmNlOjptYXJrRm9yTGF5b3V0QW5kUGFyZW50UmVzb3VyY2VJbnZhbGlkYXRpb24o
cmVuZGVyZXIpOwogICAgICAgICByZXR1cm47CiAgICAgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvc3ZnL1NWR1BhdGhFbGVtZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdQYXRo
RWxlbWVudC5jcHAKaW5kZXggNGFlNjYxMy4uMjdhMDQxOCAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvc3ZnL1NWR1BhdGhFbGVtZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZH
UGF0aEVsZW1lbnQuY3BwCkBAIC0yNjksNyArMjY5LDcgQEAgdm9pZCBTVkdQYXRoRWxlbWVudDo6
c3ZnQXR0cmlidXRlQ2hhbmdlZChjb25zdCBRdWFsaWZpZWROYW1lJiBhdHRyTmFtZSkKICAgICAg
ICAgfQogCiAgICAgICAgIGlmIChyZW5kZXJlcikKLSAgICAgICAgICAgIHJlbmRlcmVyLT5zZXRO
ZWVkc1BhdGhVcGRhdGUoKTsKKyAgICAgICAgICAgIHJlbmRlcmVyLT5zZXROZWVkc1NoYXBlVXBk
YXRlKCk7CiAgICAgfQogCiAgICAgaWYgKHJlbmRlcmVyKQpAQCAtMzU1LDEwICszNTUsMTYgQEAg
dm9pZCBTVkdQYXRoRWxlbWVudDo6cGF0aFNlZ0xpc3RDaGFuZ2VkKFNWR1BhdGhTZWdSb2xlIHJv
bGUpCiAgICAgaWYgKCFyZW5kZXJlcikKICAgICAgICAgcmV0dXJuOwogCi0gICAgcmVuZGVyZXIt
PnNldE5lZWRzUGF0aFVwZGF0ZSgpOworICAgIHJlbmRlcmVyLT5zZXROZWVkc1NoYXBlVXBkYXRl
KCk7CiAgICAgUmVuZGVyU1ZHUmVzb3VyY2U6Om1hcmtGb3JMYXlvdXRBbmRQYXJlbnRSZXNvdXJj
ZUludmFsaWRhdGlvbihyZW5kZXJlcik7CiB9CiAKK1JlbmRlck9iamVjdCogU1ZHUGF0aEVsZW1l
bnQ6OmNyZWF0ZVJlbmRlcmVyKFJlbmRlckFyZW5hKiBhcmVuYSwgUmVuZGVyU3R5bGUqKQorewor
ICAgIC8vIEJ5IGRlZmF1bHQsIGFueSBzdWJjbGFzcyBpcyBleHBlY3RlZCB0byBkbyBwYXRoLWJh
c2VkIGRyYXdpbmcKKyAgICByZXR1cm4gbmV3IChhcmVuYSkgUmVuZGVyU1ZHUGF0aCh0aGlzKTsK
K30KKwogfQogCiAjZW5kaWYgLy8gRU5BQkxFKFNWRykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3N2Zy9TVkdQYXRoRWxlbWVudC5oIGIvU291cmNlL1dlYkNvcmUvc3ZnL1NWR1BhdGhFbGVt
ZW50LmgKaW5kZXggMWQzN2QwZS4uNTRiOGZlMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
c3ZnL1NWR1BhdGhFbGVtZW50LmgKKysrIGIvU291cmNlL1dlYkNvcmUvc3ZnL1NWR1BhdGhFbGVt
ZW50LmgKQEAgLTEyMiw2ICsxMjIsOCBAQCBwcml2YXRlOgogICAgIHZpcnR1YWwgdm9pZCBzeW5j
aHJvbml6ZVJlcXVpcmVkRXh0ZW5zaW9ucygpIHsgU1ZHVGVzdHM6OnN5bmNocm9uaXplUmVxdWly
ZWRFeHRlbnNpb25zKHRoaXMpOyB9CiAgICAgdmlydHVhbCB2b2lkIHN5bmNocm9uaXplU3lzdGVt
TGFuZ3VhZ2UoKSB7IFNWR1Rlc3RzOjpzeW5jaHJvbml6ZVN5c3RlbUxhbmd1YWdlKHRoaXMpOyB9
CiAKKyAgICBSZW5kZXJPYmplY3QqIGNyZWF0ZVJlbmRlcmVyKFJlbmRlckFyZW5hKiwgUmVuZGVy
U3R5bGUqKTsKKwogcHJpdmF0ZToKICAgICBPd25QdHI8U1ZHUGF0aEJ5dGVTdHJlYW0+IG1fcGF0
aEJ5dGVTdHJlYW07CiAgICAgbXV0YWJsZSBTVkdTeW5jaHJvbml6YWJsZUFuaW1hdGVkUHJvcGVy
dHk8U1ZHUGF0aFNlZ0xpc3Q+IG1fcGF0aFNlZ0xpc3Q7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9zdmcvU1ZHUG9seUVsZW1lbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvc3ZnL1NWR1BvbHlF
bGVtZW50LmNwcAppbmRleCA2NmM1MjU4Li5hOGI2N2M3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9zdmcvU1ZHUG9seUVsZW1lbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdQ
b2x5RWxlbWVudC5jcHAKQEAgLTEyNCw3ICsxMjQsNyBAQCB2b2lkIFNWR1BvbHlFbGVtZW50Ojpz
dmdBdHRyaWJ1dGVDaGFuZ2VkKGNvbnN0IFF1YWxpZmllZE5hbWUmIGF0dHJOYW1lKQogICAgICAg
ICByZXR1cm47CiAKICAgICBpZiAoYXR0ck5hbWUgPT0gU1ZHTmFtZXM6OnBvaW50c0F0dHIpIHsK
LSAgICAgICAgcmVuZGVyZXItPnNldE5lZWRzUGF0aFVwZGF0ZSgpOworICAgICAgICByZW5kZXJl
ci0+c2V0TmVlZHNTaGFwZVVwZGF0ZSgpOwogICAgICAgICBSZW5kZXJTVkdSZXNvdXJjZTo6bWFy
a0ZvckxheW91dEFuZFBhcmVudFJlc291cmNlSW52YWxpZGF0aW9uKHJlbmRlcmVyKTsKICAgICAg
ICAgcmV0dXJuOwogICAgIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdSZWN0
RWxlbWVudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHUmVjdEVsZW1lbnQuY3BwCmluZGV4
IDkyMDc3NDUuLjU4MGM2MzUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdSZWN0
RWxlbWVudC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvc3ZnL1NWR1JlY3RFbGVtZW50LmNwcApA
QCAtMjUsNiArMjUsNyBAQAogCiAjaW5jbHVkZSAiQXR0cmlidXRlLmgiCiAjaW5jbHVkZSAiUmVu
ZGVyU1ZHUGF0aC5oIgorI2luY2x1ZGUgIlJlbmRlclNWR1JlY3QuaCIKICNpbmNsdWRlICJSZW5k
ZXJTVkdSZXNvdXJjZS5oIgogI2luY2x1ZGUgIlNWR0VsZW1lbnRJbnN0YW5jZS5oIgogI2luY2x1
ZGUgIlNWR0xlbmd0aC5oIgpAQCAtMzIsNiArMzMsOCBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7
CiAKK2NsYXNzIFJlbmRlclNWR1JlY3Q7CisKIC8vIEFuaW1hdGVkIHByb3BlcnR5IGRlZmluaXRp
b25zCiBERUZJTkVfQU5JTUFURURfTEVOR1RIKFNWR1JlY3RFbGVtZW50LCBTVkdOYW1lczo6eEF0
dHIsIFgsIHgpCiBERUZJTkVfQU5JTUFURURfTEVOR1RIKFNWR1JlY3RFbGVtZW50LCBTVkdOYW1l
czo6eUF0dHIsIFksIHkpCkBAIC0xMzcsMTIgKzE0MCwxMiBAQCB2b2lkIFNWR1JlY3RFbGVtZW50
OjpzdmdBdHRyaWJ1dGVDaGFuZ2VkKGNvbnN0IFF1YWxpZmllZE5hbWUmIGF0dHJOYW1lKQogICAg
IGlmIChTVkdUZXN0czo6aGFuZGxlQXR0cmlidXRlQ2hhbmdlKHRoaXMsIGF0dHJOYW1lKSkKICAg
ICAgICAgcmV0dXJuOwogCi0gICAgUmVuZGVyU1ZHUGF0aCogcmVuZGVyZXIgPSBzdGF0aWNfY2Fz
dDxSZW5kZXJTVkdQYXRoKj4odGhpcy0+cmVuZGVyZXIoKSk7CisgICAgUmVuZGVyU1ZHUmVjdCog
cmVuZGVyZXIgPSBzdGF0aWNfY2FzdDxSZW5kZXJTVkdSZWN0Kj4odGhpcy0+cmVuZGVyZXIoKSk7
CiAgICAgaWYgKCFyZW5kZXJlcikKICAgICAgICAgcmV0dXJuOwogCiAgICAgaWYgKGlzTGVuZ3Ro
QXR0cmlidXRlKSB7Ci0gICAgICAgIHJlbmRlcmVyLT5zZXROZWVkc1BhdGhVcGRhdGUoKTsKKyAg
ICAgICAgcmVuZGVyZXItPnNldE5lZWRzU2hhcGVVcGRhdGUoKTsKICAgICAgICAgUmVuZGVyU1ZH
UmVzb3VyY2U6Om1hcmtGb3JMYXlvdXRBbmRQYXJlbnRSZXNvdXJjZUludmFsaWRhdGlvbihyZW5k
ZXJlcik7CiAgICAgICAgIHJldHVybjsKICAgICB9CkBAIC0xOTgsNiArMjAxLDExIEBAIGJvb2wg
U1ZHUmVjdEVsZW1lbnQ6OnNlbGZIYXNSZWxhdGl2ZUxlbmd0aHMoKSBjb25zdAogICAgICAgICB8
fCByeSgpLmlzUmVsYXRpdmUoKTsKIH0KIAorUmVuZGVyT2JqZWN0KiBTVkdSZWN0RWxlbWVudDo6
Y3JlYXRlUmVuZGVyZXIoUmVuZGVyQXJlbmEqIGFyZW5hLCBSZW5kZXJTdHlsZSopCit7CisgICAg
cmV0dXJuIG5ldyAoYXJlbmEpIFJlbmRlclNWR1JlY3QodGhpcyk7Cit9CisKIH0KIAogI2VuZGlm
IC8vIEVOQUJMRShTVkcpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHUmVjdEVs
ZW1lbnQuaCBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdSZWN0RWxlbWVudC5oCmluZGV4IDk5NDM3
ZjMuLjliZjYwMmYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdSZWN0RWxlbWVu
dC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdSZWN0RWxlbWVudC5oCkBAIC01Miw2ICs1
Miw4IEBAIHByaXZhdGU6CiAKICAgICB2aXJ0dWFsIGJvb2wgc2VsZkhhc1JlbGF0aXZlTGVuZ3Ro
cygpIGNvbnN0OwogCisgICAgUmVuZGVyT2JqZWN0KiBjcmVhdGVSZW5kZXJlcihSZW5kZXJBcmVu
YSosIFJlbmRlclN0eWxlKik7CisKICAgICBCRUdJTl9ERUNMQVJFX0FOSU1BVEVEX1BST1BFUlRJ
RVMoU1ZHUmVjdEVsZW1lbnQpCiAgICAgICAgIERFQ0xBUkVfQU5JTUFURURfTEVOR1RIKFgsIHgp
CiAgICAgICAgIERFQ0xBUkVfQU5JTUFURURfTEVOR1RIKFksIHkpCi0tIAoxLjcuNS40Cgo=
</data>
<flag name="review"
          id="109470"
          type_id="1"
          status="+"
          setter="krit"
    />
    <flag name="commit-queue"
          id="109471"
          type_id="3"
          status="-"
          setter="rhodovan.u-szeged"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>112678</attachid>
            <date>2011-10-27 07:34:20 -0700</date>
            <delta_ts>2011-11-18 07:25:53 -0800</delta_ts>
            <desc>Proposed patch</desc>
            <filename>0001-assert-fixed.patch</filename>
            <type>text/plain</type>
            <size>108823</size>
            <attacher name="Renata Hodovan">rhodovan.u-szeged</attacher>
            
              <data encoding="base64">RnJvbSA4OGQ5M2IwNWQxYWExZTZlNzI0YjhiMTliOTZlOTAwYWIxZWQ2Njc0IE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBSZW5hdGEgSG9kb3ZhbiA8cmVuaUB3ZWJraXQub3JnPgpEYXRl
OiBUaHUsIDIwIE9jdCAyMDExIDE2OjEwOjQ5ICswMjAwClN1YmplY3Q6IFtQQVRDSF0gYXNzZXJ0
IGZpeGVkCgotLS0KIExheW91dFRlc3RzL0NoYW5nZUxvZyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHwgICAxNCArCiAuLi4vcG9pbnRlci1ldmVudHMtb24tcm91bmRlZC1yZWN0LWV4cGVj
dGVkLnR4dCAgICB8ICAgIDEgKwogLi4uL2N1c3RvbS9wb2ludGVyLWV2ZW50cy1vbi1yb3VuZGVk
LXJlY3QueGh0bWwgICAgfCAgIDY2ICsrKwogLi4uZW50cy13aXRoLWxpbmVjYXBzLWFuZC1taXRl
cmxpbWl0cy1leHBlY3RlZC50eHQgfCAgICAxICsKIC4uLm50ZXItZXZlbnRzLXdpdGgtbGluZWNh
cHMtYW5kLW1pdGVybGltaXRzLnhodG1sIHwgICA2OCArKysKIFNvdXJjZS9XZWJDb3JlL0NNYWtl
TGlzdHMudHh0ICAgICAgICAgICAgICAgICAgICAgIHwgICAgMiArCiBTb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAxNTggKysrKysrKwogU291cmNl
L1dlYkNvcmUvR05VbWFrZWZpbGUubGlzdC5hbSAgICAgICAgICAgICAgICAgfCAgICA0ICsKIFNv
dXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwaSAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgNCAr
CiBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnBybyAgICAgICAgICAgICAgICAgICAgICAgICB8ICAg
IDQgKwogU291cmNlL1dlYkNvcmUvV2ViQ29yZS52Y3Byb2ovV2ViQ29yZS52Y3Byb2ogICAgICAg
fCAgMTEyICsrKysrCiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9GbG9hdFJlY3Qu
Y3BwICAgICB8ICAgIDcgKwogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRmxvYXRS
ZWN0LmggICAgICAgfCAgICA3ICstCiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyT2Jq
ZWN0LmggICAgICAgICAgICB8ICAgIDIgKwogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
clRyZWVBc1RleHQuY3BwICAgICAgfCAgICA0ICstCiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
c3ZnL1JlbmRlclNWR0FsbEluT25lLmNwcCB8ICAgIDIgKwogLi4uL1dlYkNvcmUvcmVuZGVyaW5n
L3N2Zy9SZW5kZXJTVkdNb2RlbE9iamVjdC5jcHAgfCAgICAyICstCiBTb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1BhdGguY3BwICAgICB8ICAzNTUgKy0tLS0tLS0tLS0tLS0t
LQogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdQYXRoLmggICAgICAgfCAg
IDcyICstLS0KIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVjdC5jcHAg
ICAgIHwgIDE0MSArKysrKysKIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZH
UmVjdC5oICAgICAgIHwgICA2NCArKysKIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVu
ZGVyU1ZHUmVzb3VyY2UuaCAgIHwgICAgMyArLQogLi4uL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZH
UmVzb3VyY2VDbGlwcGVyLmNwcCAgICAgfCAgICA2ICstCiAuLi4vcmVuZGVyaW5nL3N2Zy9SZW5k
ZXJTVkdSZXNvdXJjZUNvbnRhaW5lci5jcHAgICB8ICAgIDIgKy0KIC4uLi9yZW5kZXJpbmcvc3Zn
L1JlbmRlclNWR1Jlc291cmNlRmlsdGVyLmNwcCAgICAgIHwgICAgNCArLQogLi4uL3JlbmRlcmlu
Zy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VGaWx0ZXIuaCAgICAgICAgfCAgICAyICstCiAuLi4vcmVu
ZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJjZUdyYWRpZW50LmNwcCAgICB8ICAgMjEgKy0KIC4u
Li9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291cmNlR3JhZGllbnQuaCAgICAgIHwgICAgMiAr
LQogLi4uL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VQYXR0ZXJuLmNwcCAgICAgfCAg
IDE0ICstCiAuLi4vcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJjZVBhdHRlcm4uaCAgICAg
ICB8ICAgIDIgKy0KIC4uLi9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291cmNlU29saWRDb2xv
ci5jcHAgIHwgICAxNSArLQogLi4uL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VTb2xp
ZENvbG9yLmggICAgfCAgICAyICstCiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRl
clNWR1NoYXBlLmNwcCAgICB8ICA0NTIgKysrKysrKysrKysrKysrKysrKysKIFNvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHU2hhcGUuaCAgICAgIHwgIDE2MSArKysrKysrCiBT
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR0lubGluZVRleHRCb3guY3BwICB8ICAgIDIg
Ky0KIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHUmVuZGVyU3VwcG9ydC5jcHAgIHwg
ICAgOCArLQogLi4uL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdSZW5kZXJUcmVlQXNUZXh0LmNw
cCAgfCAgIDMxICstCiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR1JlbmRlclRyZWVB
c1RleHQuaCB8ICAgIDQgKy0KIC4uLi9yZW5kZXJpbmcvc3ZnL1NWR1RleHRSdW5SZW5kZXJpbmdD
b250ZXh0LmNwcCAgIHwgICAgMiArLQogU291cmNlL1dlYkNvcmUvc3ZnL1NWR0NpcmNsZUVsZW1l
bnQuY3BwICAgICAgICAgICAgfCAgICAyICstCiBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRWxsaXBz
ZUVsZW1lbnQuY3BwICAgICAgICAgICB8ICAgIDIgKy0KIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdM
aW5lRWxlbWVudC5jcHAgICAgICAgICAgICAgIHwgICAgMiArLQogU291cmNlL1dlYkNvcmUvc3Zn
L1NWR1BhdGhFbGVtZW50LmNwcCAgICAgICAgICAgICAgfCAgIDEwICstCiBTb3VyY2UvV2ViQ29y
ZS9zdmcvU1ZHUGF0aEVsZW1lbnQuaCAgICAgICAgICAgICAgICB8ICAgIDIgKwogU291cmNlL1dl
YkNvcmUvc3ZnL1NWR1BvbHlFbGVtZW50LmNwcCAgICAgICAgICAgICAgfCAgICAyICstCiBTb3Vy
Y2UvV2ViQ29yZS9zdmcvU1ZHUmVjdEVsZW1lbnQuY3BwICAgICAgICAgICAgICB8ICAgMTIgKy0K
IFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdSZWN0RWxlbWVudC5oICAgICAgICAgICAgICAgIHwgICAg
MiArCiA0NyBmaWxlcyBjaGFuZ2VkLCAxMzg2IGluc2VydGlvbnMoKyksIDQ3MSBkZWxldGlvbnMo
LSkKIGNyZWF0ZSBtb2RlIDEwMDY0NCBMYXlvdXRUZXN0cy9zdmcvY3VzdG9tL3BvaW50ZXItZXZl
bnRzLW9uLXJvdW5kZWQtcmVjdC1leHBlY3RlZC50eHQKIGNyZWF0ZSBtb2RlIDEwMDY0NCBMYXlv
dXRUZXN0cy9zdmcvY3VzdG9tL3BvaW50ZXItZXZlbnRzLW9uLXJvdW5kZWQtcmVjdC54aHRtbAog
Y3JlYXRlIG1vZGUgMTAwNjQ0IExheW91dFRlc3RzL3N2Zy9jdXN0b20vcG9pbnRlci1ldmVudHMt
d2l0aC1saW5lY2Fwcy1hbmQtbWl0ZXJsaW1pdHMtZXhwZWN0ZWQudHh0CiBjcmVhdGUgbW9kZSAx
MDA2NDQgTGF5b3V0VGVzdHMvc3ZnL2N1c3RvbS9wb2ludGVyLWV2ZW50cy13aXRoLWxpbmVjYXBz
LWFuZC1taXRlcmxpbWl0cy54aHRtbAogY3JlYXRlIG1vZGUgMTAwNjQ0IFNvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVjdC5jcHAKIGNyZWF0ZSBtb2RlIDEwMDY0NCBTb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1JlY3QuaAogY3JlYXRlIG1vZGUgMTAw
NjQ0IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHU2hhcGUuY3BwCiBjcmVh
dGUgbW9kZSAxMDA2NDQgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdTaGFw
ZS5oCgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nIGIvTGF5b3V0VGVzdHMvQ2hh
bmdlTG9nCmluZGV4IDBlZDFmYWYuLmUxM2RmNTcgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL0No
YW5nZUxvZworKysgYi9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxNyBAQAorMjAx
MS0xMC0wNSAgUmVuYXRhIEhvZG92YW4gIDxyZW5pQHdlYmtpdC5vcmc+CisKKyAgICAgICAgQWRk
IG5ldyByZW5kZXJlciBmb3IgU1ZHUmVjdEVsZW1lbnQuCisgICAgICAgIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD02NTc2OQorCisgICAgICAgIEFkZCBuZXcgdGVzdHMg
dG8gY2hlY2sgdGhlIG5ldyBzaGFwZSBiYXNlZCByZW5kZXJpbmcgbWVjaGFuaXNtIG9mIFNWR1Jl
Y3RFbGVtZW50LgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAg
ICAgICogc3ZnL2N1c3RvbS9wb2ludGVyLWV2ZW50cy1vbi1yb3VuZGVkLXJlY3QtZXhwZWN0ZWQu
dHh0OiBBZGRlZC4KKyAgICAgICAgKiBzdmcvY3VzdG9tL3BvaW50ZXItZXZlbnRzLW9uLXJvdW5k
ZWQtcmVjdC54aHRtbDogQWRkZWQuCisgICAgICAgICogc3ZnL2N1c3RvbS9wb2ludGVyLWV2ZW50
cy13aXRoLWxpbmVjYXBzLWFuZC1taXRlcmxpbWl0cy1leHBlY3RlZC50eHQ6IEFkZGVkLgorICAg
ICAgICAqIHN2Zy9jdXN0b20vcG9pbnRlci1ldmVudHMtd2l0aC1saW5lY2Fwcy1hbmQtbWl0ZXJs
aW1pdHMueGh0bWw6IEFkZGVkLgorCiAyMDExLTEwLTA1ICBJbHlhIFRpa2hvbm92c2t5ICA8bG9p
c2xvQGNocm9taXVtLm9yZz4KIAogICAgICAgICBVbnJldmlld2VkIHJlYmFzZWxpbmUgZm9yIHRl
c3QuCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9zdmcvY3VzdG9tL3BvaW50ZXItZXZlbnRzLW9u
LXJvdW5kZWQtcmVjdC1leHBlY3RlZC50eHQgYi9MYXlvdXRUZXN0cy9zdmcvY3VzdG9tL3BvaW50
ZXItZXZlbnRzLW9uLXJvdW5kZWQtcmVjdC1leHBlY3RlZC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDAwMDAwMC4uNjE1YmFlMAotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3Rz
L3N2Zy9jdXN0b20vcG9pbnRlci1ldmVudHMtb24tcm91bmRlZC1yZWN0LWV4cGVjdGVkLnR4dApA
QCAtMCwwICsxIEBACitQQVNTRUQ6IGZhbGxiYWNrUmVjdCBoYWQgcG9pbnRlcgpkaWZmIC0tZ2l0
IGEvTGF5b3V0VGVzdHMvc3ZnL2N1c3RvbS9wb2ludGVyLWV2ZW50cy1vbi1yb3VuZGVkLXJlY3Qu
eGh0bWwgYi9MYXlvdXRUZXN0cy9zdmcvY3VzdG9tL3BvaW50ZXItZXZlbnRzLW9uLXJvdW5kZWQt
cmVjdC54aHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jNjNkMTIyCi0t
LSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvc3ZnL2N1c3RvbS9wb2ludGVyLWV2ZW50cy1v
bi1yb3VuZGVkLXJlY3QueGh0bWwKQEAgLTAsMCArMSw2NiBAQAorPGh0bWwgeG1sbnM9J2h0dHA6
Ly93d3cudzMub3JnLzE5OTkveGh0bWwnPgorPGJvZHkgc3R5bGU9Im1hcmdpbjogMHB4OyBwYWRk
aW5nOiAwcHgiPgorCis8c3ZnIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgc3R5
bGU9InBvc2l0aW9uOmFic29sdXRlOyI+Cis8ZGVmcz4KKworPHN0eWxlIHR5cGU9InRleHQvY3Nz
Ij48IVtDREFUQVsKK3JlY3Qjcm91bmRlZFJlY3QgeworICAgIGZpbGw6IG5vbmU7CisgICAgc3Ry
b2tlOiBncmVlbjsKKyAgICBzdHJva2Utd2lkdGg6IDIwcHg7CisgICAgc3Ryb2tlLWxpbmVqb2lu
OiBiZXZlbDsKK30KK3JlY3Q6aG92ZXIgeworICAgIHN0cm9rZTogcmVkOworfQorXV0+PC9zdHls
ZT4KKzwvZGVmcz4KKworPHJlY3QgaWQ9ImZhbGxiYWNrIiB4PSIzMCIgeT0iMzAiIHdpZHRoPSI0
MjAiIGhlaWdodD0iMzIwIiBmaWxsPSJ5ZWxsb3ciIG9uY2xpY2s9InBhc3NlZCgpIi8+Cis8cmVj
dCBpZD0icm91bmRlZFJlY3QiIHg9IjQwIiB5PSI0MCIgcng9IjMwIiByeT0iMzAiIHdpZHRoPSI0
MDAiIGhlaWdodD0iMzAwIiBwb2ludGVyLWV2ZW50cz0idmlzaWJsZVN0cm9rZSIgb25jbGljaz0i
ZmFpbGVkKCkiLz4KKzx0ZXh0IGlkPSJ0ZXh0IiB4PSIzMCIgeT0iMzcwIj48L3RleHQ+CisKKzxz
Y3JpcHQgdHlwZT0idGV4dC9lY21hc2NyaXB0Ij4KKyAgICA8IVtDREFUQVsKKwordmFyIGZhbGxi
YWNrID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImZhbGxiYWNrIik7Cit2YXIgcm91bmRlZFJl
Y3QgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgicm91bmRlZFJlY3QiKTsKK3ZhciB0ZXh0ID0g
ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoInRleHQiKTsKKworICAgIGZhbGxiYWNrLmFkZEV2ZW50
TGlzdGVuZXIoIm1vdXNlZG93biIsIHBhc3NlZCwgZmFsc2UpOworICAgIHJvdW5kZWRSZWN0LmFk
ZEV2ZW50TGlzdGVuZXIoIm1vdXNlZG93biIsIGZhaWxlZCwgZmFsc2UpOworCitmdW5jdGlvbiBz
dG9wKCkgeworICAgIGZhbGxiYWNrLnJlbW92ZUV2ZW50TGlzdGVuZXIoIm1vdXNlZG93biIsIGZh
aWxlZCwgZmFsc2UpOworICAgIHJvdW5kZWRSZWN0LnJlbW92ZUV2ZW50TGlzdGVuZXIoIm1vdXNl
ZG93biIsIHBhc3NlZCwgZmFsc2UpOworCisgICAgaWYgKHdpbmRvdy5sYXlvdXRUZXN0Q29udHJv
bGxlcikKKyAgICBsYXlvdXRUZXN0Q29udHJvbGxlci5ub3RpZnlEb25lKCk7Cit9CisKK2Z1bmN0
aW9uIGZhaWxlZCgpIHsKKyAgICB0ZXh0LnRleHRDb250ZW50ID0gJ0ZBSUxFRDogc3Ryb2tlUmVj
dCBoYWQgcG9pbnRlcic7CisgICAgc3RvcCgpOworfQorCitmdW5jdGlvbiBwYXNzZWQoKSB7Cisg
ICB0ZXh0LnRleHRDb250ZW50ID0gJ1BBU1NFRDogZmFsbGJhY2tSZWN0IGhhZCBwb2ludGVyJzsK
KyAgIHN0b3AoKTsKK30KKworaWYgKHdpbmRvdy5sYXlvdXRUZXN0Q29udHJvbGxlcikgeworICAg
bGF5b3V0VGVzdENvbnRyb2xsZXIud2FpdFVudGlsRG9uZSgpOworICAgbGF5b3V0VGVzdENvbnRy
b2xsZXIuZHVtcEFzVGV4dCgpOworfQorCitpZiAod2luZG93LmV2ZW50U2VuZGVyKSB7CisgICAg
ZXZlbnRTZW5kZXIubW91c2VNb3ZlVG8oMzEsIDMxKTsKKyAgICBldmVudFNlbmRlci5tb3VzZURv
d24oKTsKK30KK11dPgorPC9zY3JpcHQ+CisKKzwvc3ZnPgorPC9ib2R5PgorPC9odG1sPgpcIE5v
IG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3N2Zy9jdXN0
b20vcG9pbnRlci1ldmVudHMtd2l0aC1saW5lY2Fwcy1hbmQtbWl0ZXJsaW1pdHMtZXhwZWN0ZWQu
dHh0IGIvTGF5b3V0VGVzdHMvc3ZnL2N1c3RvbS9wb2ludGVyLWV2ZW50cy13aXRoLWxpbmVjYXBz
LWFuZC1taXRlcmxpbWl0cy1leHBlY3RlZC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMC4uNjE1YmFlMAotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL3N2Zy9jdXN0
b20vcG9pbnRlci1ldmVudHMtd2l0aC1saW5lY2Fwcy1hbmQtbWl0ZXJsaW1pdHMtZXhwZWN0ZWQu
dHh0CkBAIC0wLDAgKzEgQEAKK1BBU1NFRDogZmFsbGJhY2tSZWN0IGhhZCBwb2ludGVyCmRpZmYg
LS1naXQgYS9MYXlvdXRUZXN0cy9zdmcvY3VzdG9tL3BvaW50ZXItZXZlbnRzLXdpdGgtbGluZWNh
cHMtYW5kLW1pdGVybGltaXRzLnhodG1sIGIvTGF5b3V0VGVzdHMvc3ZnL2N1c3RvbS9wb2ludGVy
LWV2ZW50cy13aXRoLWxpbmVjYXBzLWFuZC1taXRlcmxpbWl0cy54aHRtbApuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwLi45MjI2YjcwCi0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0
VGVzdHMvc3ZnL2N1c3RvbS9wb2ludGVyLWV2ZW50cy13aXRoLWxpbmVjYXBzLWFuZC1taXRlcmxp
bWl0cy54aHRtbApAQCAtMCwwICsxLDY4IEBACis8aHRtbCB4bWxucz0naHR0cDovL3d3dy53My5v
cmcvMTk5OS94aHRtbCc+Cis8Ym9keSBzdHlsZT0ibWFyZ2luOiAwcHg7IHBhZGRpbmc6IDBweCI+
CisKKzxzdmcgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiBzdHlsZT0icG9zaXRp
b246YWJzb2x1dGU7Ij4KKzxkZWZzPgorCis8c3R5bGUgdHlwZT0idGV4dC9jc3MiPjwhW0NEQVRB
WworcmVjdCNzdHJva2VkUmVjdCB7CisgICAgZmlsbDogbm9uZTsKKyAgICBzdHJva2U6IGJsdWU7
CisgICAgc3Ryb2tlLXdpZHRoOiAyMHB4OworICAgIHN0cm9rZS1saW5lY2FwOiBzcXVhcmU7Cisg
ICAgc3Ryb2tlLW1pdGVybGltaXQ6IDE7Cit9CityZWN0I3N0cm9rZWRSZWN0OmhvdmVyIHsKKyAg
ICBzdHJva2U6IHJlZDsKK30KK11dPjwvc3R5bGU+Cis8L2RlZnM+CisKKzxyZWN0IGlkPSJmYWxs
YmFjayIgeD0iMCIgeT0iMCIgd2lkdGg9IjIxMCIgaGVpZ2h0PSIyMTAiIGZpbGw9ImdyZWVuIiBv
bmNsaWNrPSJwYXNzZWQoKSIvPgorPHJlY3QgaWQ9InN0cm9rZWRSZWN0IiB4PSIxMCIgeT0iMTAi
IHdpZHRoPSIxOTAiIGhlaWdodD0iMTkwIiBwb2ludGVyLWV2ZW50cz0idmlzaWJsZVN0cm9rZSIg
b25jbGljaz0iZmFpbGVkKCkiLz4KKzx0ZXh0IGlkPSJ0ZXh0IiB4PSIwIiB5PSIyMzAiPjwvdGV4
dD4KKworPHNjcmlwdCB0eXBlPSJ0ZXh0L2VjbWFzY3JpcHQiPgorICAgIDwhW0NEQVRBWworCit2
YXIgZmFsbGJhY2sgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiZmFsbGJhY2siKTsKK3ZhciBz
dHJva2VkUmVjdCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJzdHJva2VkUmVjdCIpOwordmFy
IHRleHQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgidGV4dCIpOworCitmYWxsYmFjay5hZGRF
dmVudExpc3RlbmVyKCJtb3VzZWRvd24iLCBwYXNzZWQsIGZhbHNlKTsKK3N0cm9rZWRSZWN0LmFk
ZEV2ZW50TGlzdGVuZXIoIm1vdXNlZG93biIsIGZhaWxlZCwgZmFsc2UpOworCitmdW5jdGlvbiBz
dG9wKCkgeworICAgIGZhbGxiYWNrLnJlbW92ZUV2ZW50TGlzdGVuZXIoIm1vdXNlZG93biIsIGZh
aWxlZCwgZmFsc2UpOworICAgIHN0cm9rZWRSZWN0LnJlbW92ZUV2ZW50TGlzdGVuZXIoIm1vdXNl
ZG93biIsIHBhc3NlZCwgZmFsc2UpOworCitpZiAod2luZG93LmxheW91dFRlc3RDb250cm9sbGVy
KQorICAgIGxheW91dFRlc3RDb250cm9sbGVyLm5vdGlmeURvbmUoKTsKK30KKworZnVuY3Rpb24g
ZmFpbGVkKCkgeworICAgIHRleHQudGV4dENvbnRlbnQgPSAnRkFJTEVEOiBzdHJva2VSZWN0IGhh
ZCBwb2ludGVyJzsKKyAgICBzdG9wKCk7Cit9CisKK2Z1bmN0aW9uIHBhc3NlZCgpIHsKKyAgICB0
ZXh0LnRleHRDb250ZW50ID0gJ1BBU1NFRDogZmFsbGJhY2tSZWN0IGhhZCBwb2ludGVyJzsKKyAg
ICBzdG9wKCk7Cit9CisKK2lmICh3aW5kb3cubGF5b3V0VGVzdENvbnRyb2xsZXIpIHsKKyAgICBs
YXlvdXRUZXN0Q29udHJvbGxlci53YWl0VW50aWxEb25lKCk7CisgICAgbGF5b3V0VGVzdENvbnRy
b2xsZXIuZHVtcEFzVGV4dCgpOworfQorCitpZiAod2luZG93LmV2ZW50U2VuZGVyKSB7CisgICAg
ZXZlbnRTZW5kZXIubW91c2VNb3ZlVG8oMSwgMSk7CisgICAgZXZlbnRTZW5kZXIubW91c2VEb3du
KCk7Cit9CisKK11dPgorPC9zY3JpcHQ+Cis8L3N2Zz4KKworPC9ib2R5PgorPC9odG1sPgpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvQ01ha2VMaXN0cy50eHQgYi9Tb3VyY2UvV2ViQ29yZS9D
TWFrZUxpc3RzLnR4dAppbmRleCBlNTQyZjRhLi5kZTM0MWE0IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9DTWFrZUxpc3RzLnR4dAorKysgYi9Tb3VyY2UvV2ViQ29yZS9DTWFrZUxpc3RzLnR4
dApAQCAtMTYwNyw2ICsxNjA3LDcgQEAgSUYgKEVOQUJMRV9TVkcpCiAgICAgICAgIHJlbmRlcmlu
Zy9zdmcvUmVuZGVyU1ZHSW5saW5lVGV4dC5jcHAKICAgICAgICAgcmVuZGVyaW5nL3N2Zy9SZW5k
ZXJTVkdNb2RlbE9iamVjdC5jcHAKICAgICAgICAgcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdQYXRo
LmNwcAorICAgICAgICByZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1JlY3QuY3BwCiAgICAgICAgIHJl
bmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2UuY3BwCiAgICAgICAgIHJlbmRlcmluZy9zdmcv
UmVuZGVyU1ZHUmVzb3VyY2VDbGlwcGVyLmNwcAogICAgICAgICByZW5kZXJpbmcvc3ZnL1JlbmRl
clNWR1Jlc291cmNlQ29udGFpbmVyLmNwcApAQCAtMTYyMSw2ICsxNjIyLDcgQEAgSUYgKEVOQUJM
RV9TVkcpCiAgICAgICAgIHJlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VTb2xpZENvbG9y
LmNwcAogICAgICAgICByZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jvb3QuY3BwCiAgICAgICAgIHJl
bmRlcmluZy9zdmcvUmVuZGVyU1ZHU2hhZG93VHJlZVJvb3RDb250YWluZXIuY3BwCisgICAgICAg
IHJlbmRlcmluZy9zdmcvUmVuZGVyU1ZHU2hhcGUuY3BwCiAgICAgICAgIHJlbmRlcmluZy9zdmcv
UmVuZGVyU1ZHVFNwYW4uY3BwCiAgICAgICAgIHJlbmRlcmluZy9zdmcvUmVuZGVyU1ZHVGV4dC5j
cHAKICAgICAgICAgcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdUZXh0UGF0aC5jcHAKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpp
bmRleCA1OWU4YzYzLi4wMjkwMWEyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VM
b2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTYxIEBACisyMDEx
LTEwLTA1ICBSZW5hdGEgSG9kb3ZhbiAgPHJlbmlAd2Via2l0Lm9yZz4KKworICAgICAgICBBZGQg
bmV3IHJlbmRlcmVyIGZvciBTVkdSZWN0RWxlbWVudC4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTY1NzY5CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9C
T0RZIChPT1BTISkuCisKKyAgICAgICAgVGhpcyBwYXRjaCBpbnRyb2R1Y2VzIGEgbmV3IGNvbW1v
biBiYXNlIGNsYXNzIGNhbGxlZCBSZW5kZXJTVkdTaGFwZSB3aGljaAorICAgICAgICByZXBsYWNl
cyB0aGUgUmVuZGVyU1ZHUGF0aC4gVGhpcyBuZXcgYmFzZSBjbGFzcyBoYXMgdGhlIHNhbWUgcHVy
cG9zZQorICAgICAgICBhcyB0aGUgcmVwbGFjZWQgY2xhc3MgYW5kIGhhcyBzcGVjaWFsaXplZCBk
ZXNjZW5kYW50cyBmb3IgY29tbW9uCisgICAgICAgIHNoYXBlcyAobGlrZSBSZWN0YW5nbGVzIGFu
ZCBDaXJjbGVzKSwgd2hpY2ggYWxsb3dzIGZhc3RlciBwYWludGluZworICAgICAgICBvZiB0aGVz
ZSBzaGFwZXMgd2hlbiBjZXJ0YWluIGNvbmRpdGlvbnMgYXJlIGZ1bGZpbGxlZC4gT24gc29tZQor
ICAgICAgICBiZW5jaG1hcmsgcHJvZ3JhbXMgd2UgaGF2ZSBzZWVuIDUlIHNwZWVkdXAuCisKKyAg
ICAgICAgVGhlIGJpZ2dlc3QgbW90aXZhdGlvbiBvZiB0aGlzIHJlZmFjdG9yIGlzIHRha2luZyBh
ZHZhbnRhZ2UKKyAgICAgICAgb2YgZmFzdGVyIHByaW1pdGl2ZSBkcmF3aW5nIGluIHRoZSBtb3N0
IGNvbW1vbiBhbmQgZnJlcXVlbnQKKyAgICAgICAgY2FzZXMuIEhvd2V2ZXIgaW4gc29tZSByYXJl
IGNhc2VzLCBsaWtlIHBhaW50aW5nIHJvdW5kZWQKKyAgICAgICAgcmVjdHMsIHdlIG5lZWQgdG8g
ZmFsbGJhY2sgdG8gdGhlIG9yaWdpbmFsIGNvZGUgcGF0aCwgd2hpY2gKKyAgICAgICAgaXMgZnVs
bHkga2VwdCBpbiB0aGUgUmVuZGVyU1ZHU2hhcGUgYmFzZSBjbGFzcy4gU29tZSBvdGhlcgorICAg
ICAgICBjYXNlcywgbGlrZSBkYXNoZWQgc3Ryb2tlcywgY2FuIGJlIHBhaW50ZWQgYnV0IG1vdXNl
IHBvaW50ZXIKKyAgICAgICAgZXZlbnRzIGNhbm5vdCBiZSBoYW5kbGVkIGJ5IHRoZSBkZXNjZW5k
YW50IGNsYXNzZXMuIEEgZGlmZmVyZW50CisgICAgICAgIGZhbGxiYWNrIG1lY2hhbmlzbSBpcyB1
c2VkIGluIHN1Y2ggY2FzZXMgd2hpY2ggcmVkaXJlY3RzCisgICAgICAgIG9ubHkgdGhlIHBvaW50
ZXIgZXZlbnQgaGFuZGxpbmcgdG8gdGhlIGJhc2UgY2xhc3MuCisKKyAgICAgICAgVGVzdHM6IHN2
Zy9jdXN0b20vcG9pbnRlci1ldmVudHMtb24tcm91bmRlZC1yZWN0LnhodG1sCisgICAgICAgICAg
ICAgICBzdmcvY3VzdG9tL3BvaW50ZXItZXZlbnRzLXdpdGgtbGluZWNhcHMtYW5kLW1pdGVybGlt
aXRzLnhodG1sCisKKyAgICAgICAgKiBDTWFrZUxpc3RzLnR4dDoKKyAgICAgICAgKiBHTlVtYWtl
ZmlsZS5saXN0LmFtOgorICAgICAgICAqIFdlYkNvcmUuZ3lwaToKKyAgICAgICAgKiBXZWJDb3Jl
LnBybzoKKyAgICAgICAgKiBXZWJDb3JlLnZjcHJvai9XZWJDb3JlLnZjcHJvajoKKyAgICAgICAg
KiBwbGF0Zm9ybS9ncmFwaGljcy9GbG9hdFJlY3QuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Rmxv
YXRSZWN0Ojpjb250YWlucyk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvRmxvYXRSZWN0
Lmg6CisgICAgICAgIChXZWJDb3JlOjpGbG9hdFJlY3Q6OmNvbnRhaW5zKToKKyAgICAgICAgKiBy
ZW5kZXJpbmcvUmVuZGVyT2JqZWN0Lmg6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJPYmplY3Q6
OmlzU1ZHUmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJPYmplY3Q6OmlzU1ZHU2hhcGUp
OgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJUcmVlQXNUZXh0LmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OndyaXRlKToKKyAgICAgICAgKiByZW5kZXJpbmcvc3ZnL1JlbmRlclNWR0FsbEluT25l
LmNwcDoKKyAgICAgICAgKiByZW5kZXJpbmcvc3ZnL1JlbmRlclNWR01vZGVsT2JqZWN0LmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OmlzR3JhcGhpY3NFbGVtZW50KToKKyAgICAgICAgKiByZW5kZXJp
bmcvc3ZnL1JlbmRlclNWR1BhdGguY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU1ZHUGF0
aDo6UmVuZGVyU1ZHUGF0aCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJTVkdQYXRoOjppbmZs
YXRlV2l0aE1hcmtlckJvdW5kcyk6IFVuaXRlIHRoZSBtYXJrZXJCb3VuZHMgd2l0aCBzdHJva2VC
b3VuZGluZ0JveC4KKyAgICAgICAgKiByZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1BhdGguaDoKKyAg
ICAgICAgKiByZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1JlY3QuY3BwOiBBZGRlZC4KKyAgICAgICAg
KFdlYkNvcmU6OlJlbmRlclNWR1JlY3Q6OlJlbmRlclNWR1JlY3QpOgorICAgICAgICAoV2ViQ29y
ZTo6UmVuZGVyU1ZHUmVjdDo6flJlbmRlclNWR1JlY3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVu
ZGVyU1ZHUmVjdDo6Y3JlYXRlU2hhcGUpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU1ZHUmVj
dDo6b2JqZWN0Qm91bmRpbmdCb3gpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU1ZHUmVjdDo6
c3Ryb2tlQm91bmRpbmdCb3gpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU1ZHUmVjdDo6Zmls
bFNoYXBlKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclNWR1JlY3Q6OnN0cm9rZVNoYXBlKToK
KyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclNWR1JlY3Q6OnNoYXBlRGVwZW5kZW50U3Ryb2tlQ29u
dGFpbnMpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU1ZHUmVjdDo6c2hhcGVEZXBlbmRlbnRG
aWxsQ29udGFpbnMpOgorICAgICAgICAqIHJlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVjdC5oOiBB
ZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclNWR1JlY3Q6OmlzU1ZHUmVjdCk6CisgICAg
ICAgIChXZWJDb3JlOjpSZW5kZXJTVkdSZWN0OjpyZW5kZXJOYW1lKToKKyAgICAgICAgKFdlYkNv
cmU6OlJlbmRlclNWR1JlY3Q6OmlzRW1wdHkpOgorICAgICAgICAqIHJlbmRlcmluZy9zdmcvUmVu
ZGVyU1ZHUmVzb3VyY2UuaDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclNWR1Jlc291cmNlOjpw
b3N0QXBwbHlSZXNvdXJjZSk6IEEgbmV3IHNoYXBlIGFyZ3VtZW50IHdhcyBhZGRlZCB0byBhbGxv
dyBzaGFwZSBzcGVjaWZpYyBmYXN0ZXIgcGFpbnRpbmcuCisgICAgICAgICogcmVuZGVyaW5nL3N2
Zy9SZW5kZXJTVkdSZXNvdXJjZUNsaXBwZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVy
U1ZHUmVzb3VyY2VDbGlwcGVyOjpkcmF3Q29udGVudEludG9NYXNrSW1hZ2UpOgorICAgICAgICAo
V2ViQ29yZTo6UmVuZGVyU1ZHUmVzb3VyY2VDbGlwcGVyOjpjYWxjdWxhdGVDbGlwQ29udGVudFJl
cGFpbnRSZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclNWR1Jlc291cmNlQ2xpcHBlcjo6
aGl0VGVzdENsaXBDb250ZW50KToKKyAgICAgICAgKiByZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jl
c291cmNlQ29udGFpbmVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclNWR1Jlc291cmNl
Q29udGFpbmVyOjp0cmFuc2Zvcm1Pbk5vblNjYWxpbmdTdHJva2UpOgorICAgICAgICAqIHJlbmRl
cmluZy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VGaWx0ZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
UmVuZGVyU1ZHUmVzb3VyY2VGaWx0ZXI6OnBvc3RBcHBseVJlc291cmNlKToKKyAgICAgICAgKiBy
ZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291cmNlRmlsdGVyLmg6CisgICAgICAgICogcmVuZGVy
aW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJjZUdyYWRpZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OlJlbmRlclNWR1Jlc291cmNlR3JhZGllbnQ6OmFwcGx5UmVzb3VyY2UpOgorICAgICAgICAqIHJl
bmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VHcmFkaWVudC5oOgorICAgICAgICAqIHJlbmRl
cmluZy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VQYXR0ZXJuLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OlJlbmRlclNWR1Jlc291cmNlUGF0dGVybjo6cG9zdEFwcGx5UmVzb3VyY2UpOgorICAgICAgICAq
IHJlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VQYXR0ZXJuLmg6CisgICAgICAgICogcmVu
ZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJjZVNvbGlkQ29sb3IuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6UmVuZGVyU1ZHUmVzb3VyY2VTb2xpZENvbG9yOjpwb3N0QXBwbHlSZXNvdXJjZSk6Cisg
ICAgICAgICogcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJjZVNvbGlkQ29sb3IuaDoKKyAg
ICAgICAgKiByZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1NoYXBlLmNwcDogQ29waWVkIGZyb20gU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdQYXRoLmNwcC4KKyAgICAgICAgKFdl
YkNvcmU6OlJlbmRlclNWR1NoYXBlOjpSZW5kZXJTVkdTaGFwZSk6CisgICAgICAgIChXZWJDb3Jl
OjpSZW5kZXJTVkdTaGFwZTo6flJlbmRlclNWR1NoYXBlKToKKyAgICAgICAgKFdlYkNvcmU6OlJl
bmRlclNWR1NoYXBlOjpjcmVhdGVTaGFwZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJTVkdT
aGFwZTo6aXNFbXB0eSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJTVkdTaGFwZTo6ZmlsbFNo
YXBlKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclNWR1NoYXBlOjpvYmplY3RCb3VuZGluZ0Jv
eCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJTVkdTaGFwZTo6c3Ryb2tlQm91bmRpbmdCb3gp
OgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU1ZHU2hhcGU6OnN0cm9rZVNoYXBlKToKKyAgICAg
ICAgKFdlYkNvcmU6OlJlbmRlclNWR1NoYXBlOjpzaGFwZURlcGVuZGVudFN0cm9rZUNvbnRhaW5z
KToKKyAgICAgICAgVGhlIHB1cnBvc2Ugb2YgdGhpcyB2aXJ0dWFsIGZ1bmN0aW9uIGFsbG93cyBk
ZWNlbmRhbnRzIHRvIHVzZSB0aGVpciBvd24gZmFzdCBjaGVja3MuCisgICAgICAgIChXZWJDb3Jl
OjpSZW5kZXJTVkdTaGFwZTo6c2hhcGVEZXBlbmRlbnRGaWxsQ29udGFpbnMpOgorICAgICAgICBU
aGUgcHVycG9zZSBvZiB0aGlzIHZpcnR1YWwgZnVuY3Rpb24gYWxsb3dzIGRlY2VuZGFudHMgdG8g
dXNlIHRoZWlyIG93biBmYXN0IGNoZWNrcy4KKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclNWR1No
YXBlOjpmaWxsQ29udGFpbnMpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU1ZHU2hhcGU6OnN0
cm9rZUNvbnRhaW5zKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclNWR1NoYXBlOjpsYXlvdXQp
OgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU1ZHU2hhcGU6OnNob3VsZFN0cm9rZVplcm9MZW5n
dGhTdWJwYXRoKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclNWR1NoYXBlOjp6ZXJvTGVuZ3Ro
U3VicGF0aFJlY3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU1ZHU2hhcGU6OnNldHVwU3F1
YXJlQ2FwUGF0aCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJTVkdTaGFwZTo6c2V0dXBOb25T
Y2FsaW5nU3Ryb2tlUGF0aCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJTVkdTaGFwZTo6Zmls
bEFuZFN0cm9rZVBhdGgpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU1ZHU2hhcGU6OnBhaW50
KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclNWR1NoYXBlOjphZGRGb2N1c1JpbmdSZWN0cyk6
CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJTVkdTaGFwZTo6bm9kZUF0RmxvYXRQb2ludCk6Cisg
ICAgICAgIChXZWJDb3JlOjpSZW5kZXJTVkdTaGFwZTo6Y2FsY3VsYXRlTWFya2VyQm91bmRzSWZO
ZWVkZWQpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU1ZHU2hhcGU6OnVwZGF0ZUNhY2hlZEJv
dW5kYXJpZXMpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU1ZHU2hhcGU6OnN0cm9rZVdpZHRo
KToKKyAgICAgICAgKiByZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1NoYXBlLmg6IENvcGllZCBmcm9t
IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUGF0aC5oLgorICAgICAgICAo
V2ViQ29yZTo6Qm91bmRpbmdSZWN0U3Ryb2tlU3R5bGVBcHBsaWVyOjpCb3VuZGluZ1JlY3RTdHJv
a2VTdHlsZUFwcGxpZXIpOgorICAgICAgICAoV2ViQ29yZTo6Qm91bmRpbmdSZWN0U3Ryb2tlU3R5
bGVBcHBsaWVyOjpzdHJva2VTdHlsZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJTVkdTaGFw
ZTo6c2V0TmVlZHNTaGFwZVVwZGF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJTVkdTaGFw
ZTo6c2V0TmVlZHNCb3VuZGFyaWVzVXBkYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclNW
R1NoYXBlOjpzZXROZWVkc1RyYW5zZm9ybVVwZGF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5k
ZXJTVkdTaGFwZTo6aXNQYWludGluZ0ZhbGxiYWNrKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRl
clNWR1NoYXBlOjpwYXRoKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclNWR1NoYXBlOjpzZXRJ
c1BhaW50aW5nRmFsbGJhY2spOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU1ZHU2hhcGU6OnNl
dFN0cm9rZUFuZE1hcmtlckJvdW5kaW5nQm94KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclNW
R1NoYXBlOjpoYXNQYXRoKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclNWR1NoYXBlOjpyZXBh
aW50UmVjdEluTG9jYWxDb29yZGluYXRlcyk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJTVkdT
aGFwZTo6bG9jYWxUb1BhcmVudFRyYW5zZm9ybSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJT
VkdTaGFwZTo6bG9jYWxUcmFuc2Zvcm0pOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU1ZHU2hh
cGU6OmlzU1ZHU2hhcGUpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU1ZHU2hhcGU6OnJlbmRl
ck5hbWUpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU1ZHU2hhcGU6OmlzUm91bmRlZFJlY3Qp
OgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU1ZHU2hhcGU6OmluZmxhdGVXaXRoTWFya2VyQm91
bmRzKToKKyAgICAgICAgKFdlYkNvcmU6OnRvUmVuZGVyU1ZHU2hhcGUpOgorICAgICAgICAqIHJl
bmRlcmluZy9zdmcvU1ZHSW5saW5lVGV4dEJveC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTVkdJ
bmxpbmVUZXh0Qm94OjpyZWxlYXNlUGFpbnRpbmdSZXNvdXJjZSk6CisgICAgICAgICogcmVuZGVy
aW5nL3N2Zy9TVkdSZW5kZXJTdXBwb3J0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR1JlbmRl
clN1cHBvcnQ6OmZpbmlzaFJlbmRlclNWR0NvbnRlbnQpOgorICAgICAgICAoV2ViQ29yZTo6U1ZH
UmVuZGVyU3VwcG9ydDo6bGF5b3V0Q2hpbGRyZW4pOgorICAgICAgICAqIHJlbmRlcmluZy9zdmcv
U1ZHUmVuZGVyVHJlZUFzVGV4dC5jcHA6CisgICAgICAgIChXZWJDb3JlOjp3cml0ZVN0eWxlKToK
KyAgICAgICAgKFdlYkNvcmU6Om9wZXJhdG9yPDwpOgorICAgICAgICAoV2ViQ29yZTo6d3JpdGUp
OgorICAgICAgICAqIHJlbmRlcmluZy9zdmcvU1ZHUmVuZGVyVHJlZUFzVGV4dC5oOgorICAgICAg
ICAqIHJlbmRlcmluZy9zdmcvU1ZHVGV4dFJ1blJlbmRlcmluZ0NvbnRleHQuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6U1ZHVGV4dFJ1blJlbmRlcmluZ0NvbnRleHQ6OmRyYXdTVkdHbHlwaHMpOgor
ICAgICAgICAqIHN2Zy9TVkdDaXJjbGVFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNW
R0NpcmNsZUVsZW1lbnQ6OnN2Z0F0dHJpYnV0ZUNoYW5nZWQpOgorICAgICAgICAqIHN2Zy9TVkdF
bGxpcHNlRWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTVkdFbGxpcHNlRWxlbWVudDo6
c3ZnQXR0cmlidXRlQ2hhbmdlZCk6CisgICAgICAgICogc3ZnL1NWR0xpbmVFbGVtZW50LmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OlNWR0xpbmVFbGVtZW50OjpzdmdBdHRyaWJ1dGVDaGFuZ2VkKToK
KyAgICAgICAgKiBzdmcvU1ZHUGF0aEVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U1ZH
UGF0aEVsZW1lbnQ6OnN2Z0F0dHJpYnV0ZUNoYW5nZWQpOgorICAgICAgICAoV2ViQ29yZTo6U1ZH
UGF0aEVsZW1lbnQ6OnBhdGhTZWdMaXN0Q2hhbmdlZCk6CisgICAgICAgIChXZWJDb3JlOjpTVkdQ
YXRoRWxlbWVudDo6Y3JlYXRlUmVuZGVyZXIpOgorICAgICAgICAqIHN2Zy9TVkdQYXRoRWxlbWVu
dC5oOgorICAgICAgICAqIHN2Zy9TVkdQb2x5RWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpTVkdQb2x5RWxlbWVudDo6c3ZnQXR0cmlidXRlQ2hhbmdlZCk6CisgICAgICAgICogc3ZnL1NW
R1JlY3RFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR1JlY3RFbGVtZW50OjpzdmdB
dHRyaWJ1dGVDaGFuZ2VkKToKKyAgICAgICAgKFdlYkNvcmU6OlNWR1JlY3RFbGVtZW50OjpjcmVh
dGVSZW5kZXJlcik6CisgICAgICAgICogc3ZnL1NWR1JlY3RFbGVtZW50Lmg6CisKIDIwMTEtMTAt
MDUgIElseWEgVGlraG9ub3Zza3kgIDxsb2lzbG9AY2hyb21pdW0ub3JnPgogCiAgICAgICAgIFVu
cmV2aWV3ZWQgYnVpbGQgZml4IGZvciB3aW5kb3dzIGJvdHMgYWZ0ZXIgcjk2Njc5LgpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvR05VbWFrZWZpbGUubGlzdC5hbSBiL1NvdXJjZS9XZWJDb3Jl
L0dOVW1ha2VmaWxlLmxpc3QuYW0KaW5kZXggNTcyYWZmZS4uNjJkZDVlNCAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvR05VbWFrZWZpbGUubGlzdC5hbQorKysgYi9Tb3VyY2UvV2ViQ29yZS9H
TlVtYWtlZmlsZS5saXN0LmFtCkBAIC0zMjI1LDYgKzMyMjUsOCBAQCB3ZWJjb3JlX3NvdXJjZXMg
Kz0gXAogCVNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHTW9kZWxPYmplY3Qu
aCBcCiAJU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdQYXRoLmNwcCBcCiAJ
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdQYXRoLmggXAorCVNvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVjdC5jcHAgXAorCVNvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVjdC5oIFwKIAlTb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvc3ZnL1JlbmRlclNWR1Jlc291cmNlQ2xpcHBlci5jcHAgXAogCVNvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VDbGlwcGVyLmggXAogCVNvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VDb250YWluZXIuY3BwIFwKQEAgLTMyNTMs
NiArMzI1NSw4IEBAIHdlYmNvcmVfc291cmNlcyArPSBcCiAJU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL3N2Zy9SZW5kZXJTVkdSb290LmggXAogCVNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcv
UmVuZGVyU1ZHU2hhZG93VHJlZVJvb3RDb250YWluZXIuY3BwIFwKIAlTb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1NoYWRvd1RyZWVSb290Q29udGFpbmVyLmggXAorCVNvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHU2hhcGUuY3BwIFwKKwlTb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1NoYXBlLmggXAogCVNvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9zdmcvUmVuZGVyU1ZHVFNwYW4uY3BwIFwKIAlTb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvc3ZnL1JlbmRlclNWR1RTcGFuLmggXAogCVNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcv
UmVuZGVyU1ZHVGV4dC5jcHAgXApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5n
eXBpIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBpCmluZGV4IGU1ZjkxZTQuLmUwM2FmZWYg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwaQorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9XZWJDb3JlLmd5cGkKQEAgLTU3NTQsNiArNTc1NCw4IEBACiAgICAgICAgICAgICAncmVu
ZGVyaW5nL3N2Zy9SZW5kZXJTVkdNb2RlbE9iamVjdC5oJywKICAgICAgICAgICAgICdyZW5kZXJp
bmcvc3ZnL1JlbmRlclNWR1BhdGguY3BwJywKICAgICAgICAgICAgICdyZW5kZXJpbmcvc3ZnL1Jl
bmRlclNWR1BhdGguaCcsCisgICAgICAgICAgICAncmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZWN0
LmNwcCcsCisgICAgICAgICAgICAncmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZWN0LmgnLAogICAg
ICAgICAgICAgJ3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2UuY3BwJywKICAgICAgICAg
ICAgICdyZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291cmNlLmgnLAogICAgICAgICAgICAgJ3Jl
bmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VDbGlwcGVyLmNwcCcsCkBAIC01NzgyLDYgKzU3
ODQsOCBAQAogICAgICAgICAgICAgJ3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUm9vdC5oJywKICAg
ICAgICAgICAgICdyZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1NoYWRvd1RyZWVSb290Q29udGFpbmVy
LmNwcCcsCiAgICAgICAgICAgICAncmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdTaGFkb3dUcmVlUm9v
dENvbnRhaW5lci5oJywKKyAgICAgICAgICAgICdyZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1NoYXBl
LmNwcCcsCisgICAgICAgICAgICAncmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdTaGFwZS5oJywKICAg
ICAgICAgICAgICdyZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1RTcGFuLmNwcCcsCiAgICAgICAgICAg
ICAncmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdUU3Bhbi5oJywKICAgICAgICAgICAgICdyZW5kZXJp
bmcvc3ZnL1JlbmRlclNWR1RleHQuY3BwJywKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1dl
YkNvcmUucHJvIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5wcm8KaW5kZXggNjgxYmRmMi4uMDk2
Y2RlMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5wcm8KKysrIGIvU291cmNl
L1dlYkNvcmUvV2ViQ29yZS5wcm8KQEAgLTIzMDAsNiArMjMwMCw3IEBAIEhFQURFUlMgKz0gXAog
ICAgIHJlbmRlcmluZy9zdmcvUmVuZGVyU1ZHSW5saW5lVGV4dC5oIFwKICAgICByZW5kZXJpbmcv
c3ZnL1JlbmRlclNWR01vZGVsT2JqZWN0LmggXAogICAgIHJlbmRlcmluZy9zdmcvUmVuZGVyU1ZH
UGF0aC5oIFwKKyAgICByZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1JlY3QuaCBcCiAgICAgcmVuZGVy
aW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJjZS5oIFwKICAgICByZW5kZXJpbmcvc3ZnL1JlbmRlclNW
R1Jlc291cmNlQ2xpcHBlci5oIFwKICAgICByZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291cmNl
Q29udGFpbmVyLmggXApAQCAtMjMxNCw2ICsyMzE1LDcgQEAgSEVBREVSUyArPSBcCiAgICAgcmVu
ZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJjZVNvbGlkQ29sb3IuaCBcCiAgICAgcmVuZGVyaW5n
L3N2Zy9SZW5kZXJTVkdSb290LmggXAogICAgIHJlbmRlcmluZy9zdmcvUmVuZGVyU1ZHU2hhZG93
VHJlZVJvb3RDb250YWluZXIuaCBcCisgICAgcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdTaGFwZS5o
IFwKICAgICByZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1RTcGFuLmggXAogICAgIHJlbmRlcmluZy9z
dmcvUmVuZGVyU1ZHVGV4dC5oIFwKICAgICByZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1RleHRQYXRo
LmggXApAQCAtMzMzOSw2ICszMzQxLDggQEAgY29udGFpbnMoREVGSU5FUywgRU5BQkxFX1NWRz0x
KSB7CiAgICAgICAgIHJlbmRlcmluZy9zdHlsZS9TVkdSZW5kZXJTdHlsZURlZnMuY3BwIFwKICAg
ICAgICAgcmVuZGVyaW5nL1BvaW50ZXJFdmVudHNIaXRSdWxlcy5jcHAgXAogICAgICAgICByZW5k
ZXJpbmcvc3ZnL1JlbmRlclNWR1BhdGguY3BwIFwKKyAgICAgICAgcmVuZGVyaW5nL3N2Zy9SZW5k
ZXJTVkdSZWN0LmNwcCBcCisgICAgICAgIHJlbmRlcmluZy9zdmcvUmVuZGVyU1ZHU2hhcGUuY3Bw
IFwKICAgICAgICAgc3ZnL2FuaW1hdGlvbi9TTUlMVGltZS5jcHAgXAogICAgICAgICBzdmcvYW5p
bWF0aW9uL1NNSUxUaW1lQ29udGFpbmVyLmNwcCBcCiAgICAgICAgIHN2Zy9hbmltYXRpb24vU1ZH
U01JTEVsZW1lbnQuY3BwIFwKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUudmNw
cm9qL1dlYkNvcmUudmNwcm9qIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS52Y3Byb2ovV2ViQ29y
ZS52Y3Byb2oKaW5kZXggNDY1YzIzZS4uYTFhMzYzZSAxMDA3NTUKLS0tIGEvU291cmNlL1dlYkNv
cmUvV2ViQ29yZS52Y3Byb2ovV2ViQ29yZS52Y3Byb2oKKysrIGIvU291cmNlL1dlYkNvcmUvV2Vi
Q29yZS52Y3Byb2ovV2ViQ29yZS52Y3Byb2oKQEAgLTQxODM5LDYgKzQxODM5LDExOCBAQAogCQkJ
CQk+CiAJCQkJPC9GaWxlPgogCQkJCTxGaWxlCisJCQkJCVJlbGF0aXZlUGF0aD0iLi5ccmVuZGVy
aW5nXHN2Z1xSZW5kZXJTVkdSZWN0LmNwcCIKKwkJCQkJPgorCQkJCQk8RmlsZUNvbmZpZ3VyYXRp
b24KKwkJCQkJCU5hbWU9IkRlYnVnfFdpbjMyIgorCQkJCQkJRXhjbHVkZWRGcm9tQnVpbGQ9InRy
dWUiCisJCQkJCQk+CisJCQkJCQk8VG9vbAorCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wi
CisJCQkJCQkvPgorCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPgorCQkJCQk8RmlsZUNvbmZpZ3Vy
YXRpb24KKwkJCQkJCU5hbWU9IlJlbGVhc2V8V2luMzIiCisJCQkJCQlFeGNsdWRlZEZyb21CdWls
ZD0idHJ1ZSIKKwkJCQkJCT4KKwkJCQkJCTxUb29sCisJCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVy
VG9vbCIKKwkJCQkJCS8+CisJCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+CisJCQkJCTxGaWxlQ29u
ZmlndXJhdGlvbgorCQkJCQkJTmFtZT0iRGVidWdfQ2Fpcm9fQ0ZMaXRlfFdpbjMyIgorCQkJCQkJ
RXhjbHVkZWRGcm9tQnVpbGQ9InRydWUiCisJCQkJCQk+CisJCQkJCQk8VG9vbAorCQkJCQkJCU5h
bWU9IlZDQ0xDb21waWxlclRvb2wiCisJCQkJCQkvPgorCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9u
PgorCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24KKwkJCQkJCU5hbWU9IlJlbGVhc2VfQ2Fpcm9fQ0ZM
aXRlfFdpbjMyIgorCQkJCQkJRXhjbHVkZWRGcm9tQnVpbGQ9InRydWUiCisJCQkJCQk+CisJCQkJ
CQk8VG9vbAorCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiCisJCQkJCQkvPgorCQkJCQk8
L0ZpbGVDb25maWd1cmF0aW9uPgorCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24KKwkJCQkJCU5hbWU9
IkRlYnVnX0FsbHxXaW4zMiIKKwkJCQkJCUV4Y2x1ZGVkRnJvbUJ1aWxkPSJ0cnVlIgorCQkJCQkJ
PgorCQkJCQkJPFRvb2wKKwkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIgorCQkJCQkJLz4K
KwkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4KKwkJCQkJPEZpbGVDb25maWd1cmF0aW9uCisJCQkJ
CQlOYW1lPSJQcm9kdWN0aW9ufFdpbjMyIgorCQkJCQkJRXhjbHVkZWRGcm9tQnVpbGQ9InRydWUi
CisJCQkJCQk+CisJCQkJCQk8VG9vbAorCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiCisJ
CQkJCQkvPgorCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPgorCQkJCTwvRmlsZT4KKwkJCQk8Rmls
ZQorCQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXHJlbmRlcmluZ1xzdmdcUmVuZGVyU1ZHUmVjdC5oIgor
CQkJCQk+CisJCQkJPC9GaWxlPgorCQkJCTxGaWxlCisJCQkJCVJlbGF0aXZlUGF0aD0iLi5ccmVu
ZGVyaW5nXHN2Z1xSZW5kZXJTVkdTaGFwZS5jcHAiCisJCQkJCT4KKwkJCQkJPEZpbGVDb25maWd1
cmF0aW9uCisJCQkJCQlOYW1lPSJEZWJ1Z3xXaW4zMiIKKwkJCQkJCUV4Y2x1ZGVkRnJvbUJ1aWxk
PSJ0cnVlIgorCQkJCQkJPgorCQkJCQkJPFRvb2wKKwkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJU
b29sIgorCQkJCQkJLz4KKwkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4KKwkJCQkJPEZpbGVDb25m
aWd1cmF0aW9uCisJCQkJCQlOYW1lPSJSZWxlYXNlfFdpbjMyIgorCQkJCQkJRXhjbHVkZWRGcm9t
QnVpbGQ9InRydWUiCisJCQkJCQk+CisJCQkJCQk8VG9vbAorCQkJCQkJCU5hbWU9IlZDQ0xDb21w
aWxlclRvb2wiCisJCQkJCQkvPgorCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPgorCQkJCQk8Rmls
ZUNvbmZpZ3VyYXRpb24KKwkJCQkJCU5hbWU9IkRlYnVnX0NhaXJvX0NGTGl0ZXxXaW4zMiIKKwkJ
CQkJCUV4Y2x1ZGVkRnJvbUJ1aWxkPSJ0cnVlIgorCQkJCQkJPgorCQkJCQkJPFRvb2wKKwkJCQkJ
CQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIgorCQkJCQkJLz4KKwkJCQkJPC9GaWxlQ29uZmlndXJh
dGlvbj4KKwkJCQkJPEZpbGVDb25maWd1cmF0aW9uCisJCQkJCQlOYW1lPSJSZWxlYXNlX0NhaXJv
X0NGTGl0ZXxXaW4zMiIKKwkJCQkJCUV4Y2x1ZGVkRnJvbUJ1aWxkPSJ0cnVlIgorCQkJCQkJPgor
CQkJCQkJPFRvb2wKKwkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIgorCQkJCQkJLz4KKwkJ
CQkJPC9GaWxlQ29uZmlndXJhdGlvbj4KKwkJCQkJPEZpbGVDb25maWd1cmF0aW9uCisJCQkJCQlO
YW1lPSJEZWJ1Z19BbGx8V2luMzIiCisJCQkJCQlFeGNsdWRlZEZyb21CdWlsZD0idHJ1ZSIKKwkJ
CQkJCT4KKwkJCQkJCTxUb29sCisJCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIKKwkJCQkJ
CS8+CisJCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+CisJCQkJCTxGaWxlQ29uZmlndXJhdGlvbgor
CQkJCQkJTmFtZT0iUHJvZHVjdGlvbnxXaW4zMiIKKwkJCQkJCUV4Y2x1ZGVkRnJvbUJ1aWxkPSJ0
cnVlIgorCQkJCQkJPgorCQkJCQkJPFRvb2wKKwkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29s
IgorCQkJCQkJLz4KKwkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4KKwkJCQk8L0ZpbGU+CisJCQkJ
PEZpbGUKKwkJCQkJUmVsYXRpdmVQYXRoPSIuLlxyZW5kZXJpbmdcc3ZnXFJlbmRlclNWR1NoYXBl
LmgiCisJCQkJCT4KKwkJCQk8L0ZpbGU+CisJCQkJPEZpbGUKIAkJCQkJUmVsYXRpdmVQYXRoPSIu
LlxyZW5kZXJpbmdcc3ZnXFJlbmRlclNWR1RleHQuY3BwIgogCQkJCQk+CiAJCQkJCTxGaWxlQ29u
ZmlndXJhdGlvbgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
RmxvYXRSZWN0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0Zsb2F0UmVj
dC5jcHAKaW5kZXggYjg0YTg5Mi4uNmQ0YTIyMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvRmxvYXRSZWN0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9GbG9hdFJlY3QuY3BwCkBAIC02OCw2ICs2OCwxMyBAQCBib29sIEZsb2F0
UmVjdDo6Y29udGFpbnMoY29uc3QgRmxvYXRSZWN0JiBvdGhlcikgY29uc3QKICAgICAgICAgJiYg
eSgpIDw9IG90aGVyLnkoKSAmJiBtYXhZKCkgPj0gb3RoZXIubWF4WSgpOwogfQogCitib29sIEZs
b2F0UmVjdDo6Y29udGFpbnMoY29uc3QgRmxvYXRQb2ludCYgcG9pbnQsIENvbnRhaW5zTW9kZSBj
b250YWluc01vZGUpIGNvbnN0Cit7CisgICAgaWYgKGNvbnRhaW5zTW9kZSA9PSBJbnNpZGVPck9u
U3Ryb2tlKQorICAgICAgICByZXR1cm4gY29udGFpbnMocG9pbnQueCgpLCBwb2ludC55KCkpOwor
ICAgIHJldHVybiB4KCkgPCBwb2ludC54KCkgJiYgbWF4WCgpID4gcG9pbnQueCgpICYmIHkoKSA8
IHBvaW50LnkoKSAmJiBtYXhZKCkgPiB5KCk7Cit9CisKIHZvaWQgRmxvYXRSZWN0OjppbnRlcnNl
Y3QoY29uc3QgRmxvYXRSZWN0JiBvdGhlcikKIHsKICAgICBmbG9hdCBsID0gbWF4KHgoKSwgb3Ro
ZXIueCgpKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0Zs
b2F0UmVjdC5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRmxvYXRSZWN0LmgK
aW5kZXggNDI0MTcxNi4uN2RlMzQ2ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvRmxvYXRSZWN0LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvRmxvYXRSZWN0LmgKQEAgLTcwLDYgKzcwLDExIEBAIGNsYXNzIEludFBvaW50OwogCiBj
bGFzcyBGbG9hdFJlY3QgewogcHVibGljOgorICAgIGVudW0gQ29udGFpbnNNb2RlIHsKKyAgICAg
ICAgSW5zaWRlT3JPblN0cm9rZSwKKyAgICAgICAgSW5zaWRlQnV0Tm90T25TdHJva2UKKyAgICB9
OworCiAgICAgRmxvYXRSZWN0KCkgeyB9CiAgICAgRmxvYXRSZWN0KGNvbnN0IEZsb2F0UG9pbnQm
IGxvY2F0aW9uLCBjb25zdCBGbG9hdFNpemUmIHNpemUpCiAgICAgICAgIDogbV9sb2NhdGlvbihs
b2NhdGlvbiksIG1fc2l6ZShzaXplKSB7IH0KQEAgLTE0Miw2ICsxNDcsNyBAQCBwdWJsaWM6CiAK
ICAgICBib29sIGludGVyc2VjdHMoY29uc3QgRmxvYXRSZWN0JikgY29uc3Q7CiAgICAgYm9vbCBj
b250YWlucyhjb25zdCBGbG9hdFJlY3QmKSBjb25zdDsKKyAgICBib29sIGNvbnRhaW5zKGNvbnN0
IEZsb2F0UG9pbnQmLCBDb250YWluc01vZGUgPSBJbnNpZGVPck9uU3Ryb2tlKSBjb25zdDsKIAog
ICAgIHZvaWQgaW50ZXJzZWN0KGNvbnN0IEZsb2F0UmVjdCYpOwogICAgIHZvaWQgdW5pdGUoY29u
c3QgRmxvYXRSZWN0Jik7CkBAIC0xNTEsNyArMTU3LDYgQEAgcHVibGljOgogICAgIC8vIGlzIHJl
YWxseSBjaGVja2luZyBmb3IgY29udGFpbm1lbnQgb2YgMXgxIHJlY3QsIGJ1dCB0aGF0IGRvZXNu
J3QgbWFrZSBzZW5zZSB3aXRoIGZsb2F0cy4KICAgICBib29sIGNvbnRhaW5zKGZsb2F0IHB4LCBm
bG9hdCBweSkgY29uc3QKICAgICAgICAgeyByZXR1cm4gcHggPj0geCgpICYmIHB4IDw9IG1heFgo
KSAmJiBweSA+PSB5KCkgJiYgcHkgPD0gbWF4WSgpOyB9Ci0gICAgYm9vbCBjb250YWlucyhjb25z
dCBGbG9hdFBvaW50JiBwb2ludCkgY29uc3QgeyByZXR1cm4gY29udGFpbnMocG9pbnQueCgpLCBw
b2ludC55KCkpOyB9CiAKICAgICB2b2lkIGluZmxhdGVYKGZsb2F0IGR4KSB7CiAgICAgICAgIG1f
bG9jYXRpb24uc2V0WChtX2xvY2F0aW9uLngoKSAtIGR4KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJPYmplY3QuaCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9SZW5kZXJPYmplY3QuaAppbmRleCA2ZGQ0YmFjLi5hZTE0YTdiIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyT2JqZWN0LmgKKysrIGIvU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL1JlbmRlck9iamVjdC5oCkBAIC0zOTYsNiArMzk2LDggQEAgcHVibGljOgogICAg
IHZpcnR1YWwgYm9vbCBpc1NWR0dyYWRpZW50U3RvcCgpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9
CiAgICAgdmlydHVhbCBib29sIGlzU1ZHSGlkZGVuQ29udGFpbmVyKCkgY29uc3QgeyByZXR1cm4g
ZmFsc2U7IH0KICAgICB2aXJ0dWFsIGJvb2wgaXNTVkdQYXRoKCkgY29uc3QgeyByZXR1cm4gZmFs
c2U7IH0KKyAgICB2aXJ0dWFsIGJvb2wgaXNTVkdSZWN0KCkgY29uc3QgeyByZXR1cm4gZmFsc2U7
IH0KKyAgICB2aXJ0dWFsIGJvb2wgaXNTVkdTaGFwZSgpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9
CiAgICAgdmlydHVhbCBib29sIGlzU1ZHVGV4dCgpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CiAg
ICAgdmlydHVhbCBib29sIGlzU1ZHVGV4dFBhdGgoKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQog
ICAgIHZpcnR1YWwgYm9vbCBpc1NWR0lubGluZSgpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVHJlZUFzVGV4dC5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVHJlZUFzVGV4dC5jcHAKaW5kZXggZTJi
NmFmYi4uYmMxMjc3ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
clRyZWVBc1RleHQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUcmVl
QXNUZXh0LmNwcApAQCAtNTIxLDggKzUyMSw4IEBAIHN0YXRpYyB2b2lkIHdyaXRlVGV4dFJ1bihU
ZXh0U3RyZWFtJiB0cywgY29uc3QgUmVuZGVyVGV4dCYgbywgY29uc3QgSW5saW5lVGV4dEJvCiB2
b2lkIHdyaXRlKFRleHRTdHJlYW0mIHRzLCBjb25zdCBSZW5kZXJPYmplY3QmIG8sIGludCBpbmRl
bnQsIFJlbmRlckFzVGV4dEJlaGF2aW9yIGJlaGF2aW9yKQogewogI2lmIEVOQUJMRShTVkcpCi0g
ICAgaWYgKG8uaXNTVkdQYXRoKCkpIHsKLSAgICAgICAgd3JpdGUodHMsICp0b1JlbmRlclNWR1Bh
dGgoJm8pLCBpbmRlbnQpOworICAgIGlmIChvLmlzU1ZHU2hhcGUoKSkgeworICAgICAgICB3cml0
ZSh0cywgKnRvUmVuZGVyU1ZHU2hhcGUoJm8pLCBpbmRlbnQpOwogICAgICAgICByZXR1cm47CiAg
ICAgfQogICAgIGlmIChvLmlzU1ZHR3JhZGllbnRTdG9wKCkpIHsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHQWxsSW5PbmUuY3BwIGIvU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdBbGxJbk9uZS5jcHAKaW5kZXggOWVhM2JlNS4u
Mjk2OTAwOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJT
VkdBbGxJbk9uZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJT
VkdBbGxJbk9uZS5jcHAKQEAgLTM1LDYgKzM1LDcgQEAKICNpbmNsdWRlICJSZW5kZXJTVkdJbmxp
bmVUZXh0LmNwcCIKICNpbmNsdWRlICJSZW5kZXJTVkdNb2RlbE9iamVjdC5jcHAiCiAjaW5jbHVk
ZSAiUmVuZGVyU1ZHUGF0aC5jcHAiCisjaW5jbHVkZSAiUmVuZGVyU1ZHUmVjdC5jcHAiCiAjaW5j
bHVkZSAiUmVuZGVyU1ZHUmVzb3VyY2UuY3BwIgogI2luY2x1ZGUgIlJlbmRlclNWR1Jlc291cmNl
Q2xpcHBlci5jcHAiCiAjaW5jbHVkZSAiUmVuZGVyU1ZHUmVzb3VyY2VDb250YWluZXIuY3BwIgpA
QCAtNDksNiArNTAsNyBAQAogI2luY2x1ZGUgIlJlbmRlclNWR1Jlc291cmNlU29saWRDb2xvci5j
cHAiCiAjaW5jbHVkZSAiUmVuZGVyU1ZHUm9vdC5jcHAiCiAjaW5jbHVkZSAiUmVuZGVyU1ZHU2hh
ZG93VHJlZVJvb3RDb250YWluZXIuY3BwIgorI2luY2x1ZGUgIlJlbmRlclNWR1NoYXBlLmNwcCIK
ICNpbmNsdWRlICJSZW5kZXJTVkdUU3Bhbi5jcHAiCiAjaW5jbHVkZSAiUmVuZGVyU1ZHVGV4dC5j
cHAiCiAjaW5jbHVkZSAiUmVuZGVyU1ZHVGV4dFBhdGguY3BwIgpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdNb2RlbE9iamVjdC5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR01vZGVsT2JqZWN0LmNwcAppbmRleCBjMmUz
ZmRmLi5mN2Q3ZGNhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1Jl
bmRlclNWR01vZGVsT2JqZWN0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3Zn
L1JlbmRlclNWR01vZGVsT2JqZWN0LmNwcApAQCAtMTU0LDcgKzE1NCw3IEBAIHN0YXRpYyBib29s
IGludGVyc2VjdHNBbGxvd2luZ0VtcHR5KGNvbnN0IEZsb2F0UmVjdCYgciwgY29uc3QgRmxvYXRS
ZWN0JiBvdGhlcikKIC8vIGltYWdlLCBsaW5lLCBwYXRoLCBwb2x5Z29uLCBwb2x5bGluZSwgcmVj
dCwgdGV4dCBhbmQgdXNlLgogc3RhdGljIGJvb2wgaXNHcmFwaGljc0VsZW1lbnQoUmVuZGVyT2Jq
ZWN0KiByZW5kZXJlcikKIHsKLSAgICByZXR1cm4gcmVuZGVyZXItPmlzU1ZHUGF0aCgpIHx8IHJl
bmRlcmVyLT5pc1NWR1RleHQoKSB8fCByZW5kZXJlci0+aXNTVkdJbWFnZSgpIHx8IHJlbmRlcmVy
LT5pc1NWR1NoYWRvd1RyZWVSb290Q29udGFpbmVyKCk7CisgICAgcmV0dXJuIHJlbmRlcmVyLT5p
c1NWR1NoYXBlKCkgfHwgcmVuZGVyZXItPmlzU1ZHVGV4dCgpIHx8IHJlbmRlcmVyLT5pc1NWR0lt
YWdlKCkgfHwgcmVuZGVyZXItPmlzU1ZHU2hhZG93VHJlZVJvb3RDb250YWluZXIoKTsKIH0KIAog
Ym9vbCBSZW5kZXJTVkdNb2RlbE9iamVjdDo6Y2hlY2tJbnRlcnNlY3Rpb24oUmVuZGVyT2JqZWN0
KiByZW5kZXJlciwgY29uc3QgRmxvYXRSZWN0JiByZWN0KQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdQYXRoLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9zdmcvUmVuZGVyU1ZHUGF0aC5jcHAKaW5kZXggYjdhZDdhMi4uZTdhNzJhMCAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdQYXRoLmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1BhdGguY3BwCkBAIC02
LDYgKzYsOCBAQAogICogQ29weXJpZ2h0IChDKSAyMDA5IERpcmsgU2NodWx6ZSA8a3JpdEB3ZWJr
aXQub3JnPgogICogQ29weXJpZ2h0IChDKSBSZXNlYXJjaCBJbiBNb3Rpb24gTGltaXRlZCAyMDEw
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICogQ29weXJpZ2h0IChDKSAyMDA5IEplZmYgU2NoaWxs
ZXIgPGNvZGVkcmVhZEBnbWFpbC5jb20+CisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgUmVuYXRhIEhv
ZG92YW4gPHJlbmlAd2Via2l0Lm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAxMSBVbml2ZXJzaXR5
IG9mIFN6ZWdlZAogICoKICAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2Fu
IHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2Yg
dGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCkBAIC0yOCw1MCArMzAsMTMgQEAKICNpZiBF
TkFCTEUoU1ZHKQogI2luY2x1ZGUgIlJlbmRlclNWR1BhdGguaCIKIAotI2luY2x1ZGUgIkZsb2F0
UG9pbnQuaCIKLSNpbmNsdWRlICJGbG9hdFF1YWQuaCIKLSNpbmNsdWRlICJHcmFwaGljc0NvbnRl
eHQuaCIKLSNpbmNsdWRlICJIaXRUZXN0UmVxdWVzdC5oIgotI2luY2x1ZGUgIkxheW91dFJlcGFp
bnRlci5oIgotI2luY2x1ZGUgIlBvaW50ZXJFdmVudHNIaXRSdWxlcy5oIgotI2luY2x1ZGUgIlJl
bmRlclNWR0NvbnRhaW5lci5oIgotI2luY2x1ZGUgIlJlbmRlclNWR1Jlc291cmNlTWFya2VyLmgi
Ci0jaW5jbHVkZSAiUmVuZGVyU1ZHUmVzb3VyY2VTb2xpZENvbG9yLmgiCi0jaW5jbHVkZSAiU1ZH
UmVuZGVyU3VwcG9ydC5oIgotI2luY2x1ZGUgIlNWR1Jlc291cmNlcy5oIgorI2luY2x1ZGUgIlNW
R1BhdGhFbGVtZW50LmgiCiAjaW5jbHVkZSAiU1ZHU3R5bGVkVHJhbnNmb3JtYWJsZUVsZW1lbnQu
aCIKLSNpbmNsdWRlICJTVkdUcmFuc2Zvcm1MaXN0LmgiCi0jaW5jbHVkZSAiU1ZHVVJJUmVmZXJl
bmNlLmgiCi0jaW5jbHVkZSAiU3Ryb2tlU3R5bGVBcHBsaWVyLmgiCi0jaW5jbHVkZSA8d3RmL01h
dGhFeHRyYXMuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1jbGFzcyBCb3VuZGluZ1JlY3RT
dHJva2VTdHlsZUFwcGxpZXIgOiBwdWJsaWMgU3Ryb2tlU3R5bGVBcHBsaWVyIHsKLXB1YmxpYzoK
LSAgICBCb3VuZGluZ1JlY3RTdHJva2VTdHlsZUFwcGxpZXIoY29uc3QgUmVuZGVyT2JqZWN0KiBv
YmplY3QsIFJlbmRlclN0eWxlKiBzdHlsZSkKLSAgICAgICAgOiBtX29iamVjdChvYmplY3QpCi0g
ICAgICAgICwgbV9zdHlsZShzdHlsZSkKLSAgICB7Ci0gICAgICAgIEFTU0VSVChzdHlsZSk7Ci0g
ICAgICAgIEFTU0VSVChvYmplY3QpOwotICAgIH0KLQotICAgIHZvaWQgc3Ryb2tlU3R5bGUoR3Jh
cGhpY3NDb250ZXh0KiBnYykKLSAgICB7Ci0gICAgICAgIFNWR1JlbmRlclN1cHBvcnQ6OmFwcGx5
U3Ryb2tlU3R5bGVUb0NvbnRleHQoZ2MsIG1fc3R5bGUsIG1fb2JqZWN0KTsKLSAgICB9Ci0KLXBy
aXZhdGU6Ci0gICAgY29uc3QgUmVuZGVyT2JqZWN0KiBtX29iamVjdDsKLSAgICBSZW5kZXJTdHls
ZSogbV9zdHlsZTsKLX07Ci0KIFJlbmRlclNWR1BhdGg6OlJlbmRlclNWR1BhdGgoU1ZHU3R5bGVk
VHJhbnNmb3JtYWJsZUVsZW1lbnQqIG5vZGUpCi0gICAgOiBSZW5kZXJTVkdNb2RlbE9iamVjdChu
b2RlKQotICAgICwgbV9uZWVkc0JvdW5kYXJpZXNVcGRhdGUoZmFsc2UpIC8vIGRlZmF1bHQgaXMg
ZmFsc2UsIHRoZSBjYWNoZWQgcmVjdHMgYXJlIGVtcHR5IGZyb20gdGhlIGJlZ2lubmluZwotICAg
ICwgbV9uZWVkc1BhdGhVcGRhdGUodHJ1ZSkgLy8gZGVmYXVsdCBpcyB0cnVlLCBzbyB3ZSBncmFi
IGEgUGF0aCBvYmplY3Qgb25jZSBmcm9tIFNWR1N0eWxlZFRyYW5zZm9ybWFibGVFbGVtZW50Ci0g
ICAgLCBtX25lZWRzVHJhbnNmb3JtVXBkYXRlKHRydWUpIC8vIGRlZmF1bHQgaXMgdHJ1ZSwgc28g
d2UgZ3JhYiBhIEFmZmluZVRyYW5zZm9ybSBvYmplY3Qgb25jZSBmcm9tIFNWR1N0eWxlZFRyYW5z
Zm9ybWFibGVFbGVtZW50CisgICAgOiBSZW5kZXJTVkdTaGFwZShub2RlKQogewogfQogCkBAIC03
OSwzMTQgKzQ0LDE2IEBAIFJlbmRlclNWR1BhdGg6On5SZW5kZXJTVkdQYXRoKCkKIHsKIH0KIAot
Ym9vbCBSZW5kZXJTVkdQYXRoOjpmaWxsQ29udGFpbnMoY29uc3QgRmxvYXRQb2ludCYgcG9pbnQs
IGJvb2wgcmVxdWlyZXNGaWxsLCBXaW5kUnVsZSBmaWxsUnVsZSkKLXsKLSAgICBpZiAoIW1fZmls
bEJvdW5kaW5nQm94LmNvbnRhaW5zKHBvaW50KSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0g
ICAgQ29sb3IgZmFsbGJhY2tDb2xvcjsKLSAgICBpZiAocmVxdWlyZXNGaWxsICYmICFSZW5kZXJT
VkdSZXNvdXJjZTo6ZmlsbFBhaW50aW5nUmVzb3VyY2UodGhpcywgc3R5bGUoKSwgZmFsbGJhY2tD
b2xvcikpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIHJldHVybiBtX3BhdGguY29udGFp
bnMocG9pbnQsIGZpbGxSdWxlKTsKLX0KLQotYm9vbCBSZW5kZXJTVkdQYXRoOjpzdHJva2VDb250
YWlucyhjb25zdCBGbG9hdFBvaW50JiBwb2ludCwgYm9vbCByZXF1aXJlc1N0cm9rZSkKLXsKLSAg
ICBpZiAoIW1fc3Ryb2tlQW5kTWFya2VyQm91bmRpbmdCb3guY29udGFpbnMocG9pbnQpKQotICAg
ICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBDb2xvciBmYWxsYmFja0NvbG9yOwotICAgIGlmIChy
ZXF1aXJlc1N0cm9rZSAmJiAhUmVuZGVyU1ZHUmVzb3VyY2U6OnN0cm9rZVBhaW50aW5nUmVzb3Vy
Y2UodGhpcywgc3R5bGUoKSwgZmFsbGJhY2tDb2xvcikpCi0gICAgICAgIHJldHVybiBmYWxzZTsK
LQotICAgIGlmIChzaG91bGRTdHJva2VaZXJvTGVuZ3RoU3VicGF0aCgpKQotICAgICAgICByZXR1
cm4gemVyb0xlbmd0aFN1YnBhdGhSZWN0KCkuY29udGFpbnMocG9pbnQpOwotCi0gICAgQm91bmRp
bmdSZWN0U3Ryb2tlU3R5bGVBcHBsaWVyIHN0cm9rZVN0eWxlKHRoaXMsIHN0eWxlKCkpOwotICAg
IHJldHVybiBtX3BhdGguc3Ryb2tlQ29udGFpbnMoJnN0cm9rZVN0eWxlLCBwb2ludCk7Ci19Ci0K
LXZvaWQgUmVuZGVyU1ZHUGF0aDo6bGF5b3V0KCkKLXsKLSAgICBMYXlvdXRSZXBhaW50ZXIgcmVw
YWludGVyKCp0aGlzLCBjaGVja0ZvclJlcGFpbnREdXJpbmdMYXlvdXQoKSAmJiBzZWxmTmVlZHNM
YXlvdXQoKSk7Ci0gICAgU1ZHU3R5bGVkVHJhbnNmb3JtYWJsZUVsZW1lbnQqIGVsZW1lbnQgPSBz
dGF0aWNfY2FzdDxTVkdTdHlsZWRUcmFuc2Zvcm1hYmxlRWxlbWVudCo+KG5vZGUoKSk7Ci0KLSAg
ICBib29sIHVwZGF0ZUNhY2hlZEJvdW5kYXJpZXNJblBhcmVudHMgPSBmYWxzZTsKLQotICAgIGJv
b2wgbmVlZHNQYXRoVXBkYXRlID0gbV9uZWVkc1BhdGhVcGRhdGU7Ci0gICAgaWYgKG5lZWRzUGF0
aFVwZGF0ZSkgewotICAgICAgICBtX3BhdGguY2xlYXIoKTsKLSAgICAgICAgZWxlbWVudC0+dG9Q
YXRoRGF0YShtX3BhdGgpOwotICAgICAgICBtX25lZWRzUGF0aFVwZGF0ZSA9IGZhbHNlOwotICAg
ICAgICB1cGRhdGVDYWNoZWRCb3VuZGFyaWVzSW5QYXJlbnRzID0gdHJ1ZTsKLSAgICB9Ci0KLSAg
ICBpZiAobV9uZWVkc1RyYW5zZm9ybVVwZGF0ZSkgewotICAgICAgICBtX2xvY2FsVHJhbnNmb3Jt
ID0gZWxlbWVudC0+YW5pbWF0ZWRMb2NhbFRyYW5zZm9ybSgpOwotICAgICAgICBtX25lZWRzVHJh
bnNmb3JtVXBkYXRlID0gZmFsc2U7Ci0gICAgICAgIHVwZGF0ZUNhY2hlZEJvdW5kYXJpZXNJblBh
cmVudHMgPSB0cnVlOwotICAgIH0KLQotICAgIGlmIChtX25lZWRzQm91bmRhcmllc1VwZGF0ZSkK
LSAgICAgICAgdXBkYXRlQ2FjaGVkQm91bmRhcmllc0luUGFyZW50cyA9IHRydWU7Ci0KLSAgICAv
LyBJbnZhbGlkYXRlIGFsbCByZXNvdXJjZXMgb2YgdGhpcyBjbGllbnQgaWYgb3VyIGxheW91dCBj
aGFuZ2VkLgotICAgIGlmIChtX2V2ZXJIYWRMYXlvdXQgJiYgc2VsZk5lZWRzTGF5b3V0KCkpIHsK
LSAgICAgICAgU1ZHUmVzb3VyY2VzQ2FjaGU6OmNsaWVudExheW91dENoYW5nZWQodGhpcyk7Ci0g
ICAgICAgIG1fbWFya2VyTGF5b3V0SW5mby5jbGVhcigpOwotICAgIH0KLQotICAgIC8vIEF0IHRo
aXMgcG9pbnQgTGF5b3V0UmVwYWludGVyIGFscmVhZHkgZ3JhYmJlZCB0aGUgb2xkIGJvdW5kcywK
LSAgICAvLyByZWNhbGN1bGF0ZSB0aGVtIG5vdyBzbyByZXBhaW50QWZ0ZXJMYXlvdXQoKSB1c2Vz
IHRoZSBuZXcgYm91bmRzLgotICAgIGlmIChuZWVkc1BhdGhVcGRhdGUgfHwgbV9uZWVkc0JvdW5k
YXJpZXNVcGRhdGUpIHsKLSAgICAgICAgdXBkYXRlQ2FjaGVkQm91bmRhcmllcygpOwotICAgICAg
ICBtX25lZWRzQm91bmRhcmllc1VwZGF0ZSA9IGZhbHNlOwotICAgIH0KLQotICAgIC8vIElmIG91
ciBib3VuZHMgY2hhbmdlZCwgbm90aWZ5IHRoZSBwYXJlbnRzLgotICAgIGlmICh1cGRhdGVDYWNo
ZWRCb3VuZGFyaWVzSW5QYXJlbnRzKQotICAgICAgICBSZW5kZXJTVkdNb2RlbE9iamVjdDo6c2V0
TmVlZHNCb3VuZGFyaWVzVXBkYXRlKCk7Ci0KLSAgICByZXBhaW50ZXIucmVwYWludEFmdGVyTGF5
b3V0KCk7Ci0gICAgc2V0TmVlZHNMYXlvdXQoZmFsc2UpOwotfQotCi1ib29sIFJlbmRlclNWR1Bh
dGg6OnNob3VsZFN0cm9rZVplcm9MZW5ndGhTdWJwYXRoKCkgY29uc3QKLXsKLSAgICAvLyBTcGVj
KDExLjQpOiBBbnkgemVybyBsZW5ndGggc3VicGF0aCBzaGFsbCBub3QgYmUgc3Ryb2tlZCBpZiB0
aGUg4oCYc3Ryb2tlLWxpbmVjYXDigJkgcHJvcGVydHkgaGFzIGEgdmFsdWUgb2YgYnV0dAotICAg
IC8vIGJ1dCBzaGFsbCBiZSBzdHJva2VkIGlmIHRoZSDigJhzdHJva2UtbGluZWNhcOKAmSBwcm9w
ZXJ0eSBoYXMgYSB2YWx1ZSBvZiByb3VuZCBvciBzcXVhcmUKLSAgICByZXR1cm4gc3R5bGUoKS0+
c3ZnU3R5bGUoKS0+aGFzU3Ryb2tlKCkgJiYgc3R5bGUoKS0+c3ZnU3R5bGUoKS0+Y2FwU3R5bGUo
KSAhPSBCdXR0Q2FwICYmICFtX2ZpbGxCb3VuZGluZ0JveC53aWR0aCgpICYmICFtX2ZpbGxCb3Vu
ZGluZ0JveC5oZWlnaHQoKTsKLX0KLQotRmxvYXRSZWN0IFJlbmRlclNWR1BhdGg6Onplcm9MZW5n
dGhTdWJwYXRoUmVjdCgpIGNvbnN0Ci17Ci0gICAgU1ZHRWxlbWVudCogc3ZnRWxlbWVudCA9IHN0
YXRpY19jYXN0PFNWR0VsZW1lbnQqPihub2RlKCkpOwotICAgIGZsb2F0IHN0cm9rZVdpZHRoID0g
c3R5bGUoKS0+c3ZnU3R5bGUoKS0+c3Ryb2tlV2lkdGgoKS52YWx1ZShzdmdFbGVtZW50KTsKLSAg
ICByZXR1cm4gRmxvYXRSZWN0KG1fZmlsbEJvdW5kaW5nQm94LngoKSAtIHN0cm9rZVdpZHRoIC8g
MiwgbV9maWxsQm91bmRpbmdCb3gueSgpIC0gc3Ryb2tlV2lkdGggLyAyLCBzdHJva2VXaWR0aCwg
c3Ryb2tlV2lkdGgpOwotfQotCi12b2lkIFJlbmRlclNWR1BhdGg6OnNldHVwU3F1YXJlQ2FwUGF0
aChQYXRoKiYgdXNlUGF0aCwgaW50JiBhcHBseU1vZGUpCi17Ci0gICAgLy8gU3BlYygxMS40KTog
QW55IHplcm8gbGVuZ3RoIHN1YnBhdGggc2hhbGwgbm90IGJlIHN0cm9rZWQgaWYgdGhlIOKAmHN0
cm9rZS1saW5lY2Fw4oCZIHByb3BlcnR5IGhhcyBhIHZhbHVlIG9mIGJ1dHQKLSAgICAvLyBidXQg
c2hhbGwgYmUgc3Ryb2tlZCBpZiB0aGUg4oCYc3Ryb2tlLWxpbmVjYXDigJkgcHJvcGVydHkgaGFz
IGEgdmFsdWUgb2Ygcm91bmQgb3Igc3F1YXJlCi0gICAgREVGSU5FX1NUQVRJQ19MT0NBTChQYXRo
LCB0ZW1wUGF0aCwgKCkpOwotCi0gICAgYXBwbHlNb2RlID0gQXBwbHlUb0ZpbGxNb2RlOwotICAg
IHVzZVBhdGggPSAmdGVtcFBhdGg7Ci0gICAgdXNlUGF0aC0+Y2xlYXIoKTsKLSAgICBpZiAoc3R5
bGUoKS0+c3ZnU3R5bGUoKS0+Y2FwU3R5bGUoKSA9PSBTcXVhcmVDYXApCi0gICAgICAgIHVzZVBh
dGgtPmFkZFJlY3QoemVyb0xlbmd0aFN1YnBhdGhSZWN0KCkpOwotICAgIGVsc2UKLSAgICAgICAg
dXNlUGF0aC0+YWRkRWxsaXBzZSh6ZXJvTGVuZ3RoU3VicGF0aFJlY3QoKSk7Ci19Ci0KLWJvb2wg
UmVuZGVyU1ZHUGF0aDo6c2V0dXBOb25TY2FsaW5nU3Ryb2tlUGF0aChQYXRoKiYgdXNlUGF0aCwg
R3JhcGhpY3NDb250ZXh0U3RhdGVTYXZlciYgc3RhdGVTYXZlcikKK3ZvaWQgUmVuZGVyU1ZHUGF0
aDo6aW5mbGF0ZVdpdGhNYXJrZXJCb3VuZHMoKQogewotICAgIERFRklORV9TVEFUSUNfTE9DQUwo
UGF0aCwgdGVtcFBhdGgsICgpKTsKLQotICAgIFNWR1N0eWxlZFRyYW5zZm9ybWFibGVFbGVtZW50
KiBlbGVtZW50ID0gc3RhdGljX2Nhc3Q8U1ZHU3R5bGVkVHJhbnNmb3JtYWJsZUVsZW1lbnQqPihu
b2RlKCkpOwotICAgIEFmZmluZVRyYW5zZm9ybSBub25TY2FsaW5nU3Ryb2tlVHJhbnNmb3JtID0g
ZWxlbWVudC0+Z2V0U2NyZWVuQ1RNKFNWR0xvY2F0YWJsZTo6RGlzYWxsb3dTdHlsZVVwZGF0ZSk7
Ci0gICAgaWYgKCFub25TY2FsaW5nU3Ryb2tlVHJhbnNmb3JtLmlzSW52ZXJ0aWJsZSgpKQotICAg
ICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICB0ZW1wUGF0aCA9IG1fcGF0aDsKLSAgICB1c2VQYXRo
ID0gJnRlbXBQYXRoOwotICAgIHRlbXBQYXRoLnRyYW5zZm9ybShub25TY2FsaW5nU3Ryb2tlVHJh
bnNmb3JtKTsKLQotICAgIHN0YXRlU2F2ZXIuc2F2ZSgpOwotICAgIHN0YXRlU2F2ZXIuY29udGV4
dCgpLT5jb25jYXRDVE0obm9uU2NhbGluZ1N0cm9rZVRyYW5zZm9ybS5pbnZlcnNlKCkpOwotICAg
IHJldHVybiB0cnVlOwotfQotCi12b2lkIFJlbmRlclNWR1BhdGg6OmZpbGxBbmRTdHJva2VQYXRo
KEdyYXBoaWNzQ29udGV4dCogY29udGV4dCkKLXsKLSAgICBSZW5kZXJTdHlsZSogc3R5bGUgPSB0
aGlzLT5zdHlsZSgpOwotCi0gICAgQ29sb3IgZmFsbGJhY2tDb2xvcjsKLSAgICBpZiAoUmVuZGVy
U1ZHUmVzb3VyY2UqIGZpbGxQYWludGluZ1Jlc291cmNlID0gUmVuZGVyU1ZHUmVzb3VyY2U6OmZp
bGxQYWludGluZ1Jlc291cmNlKHRoaXMsIHN0eWxlLCBmYWxsYmFja0NvbG9yKSkgewotICAgICAg
ICBpZiAoZmlsbFBhaW50aW5nUmVzb3VyY2UtPmFwcGx5UmVzb3VyY2UodGhpcywgc3R5bGUsIGNv
bnRleHQsIEFwcGx5VG9GaWxsTW9kZSkpCi0gICAgICAgICAgICBmaWxsUGFpbnRpbmdSZXNvdXJj
ZS0+cG9zdEFwcGx5UmVzb3VyY2UodGhpcywgY29udGV4dCwgQXBwbHlUb0ZpbGxNb2RlLCAmbV9w
YXRoKTsKLSAgICAgICAgZWxzZSBpZiAoZmFsbGJhY2tDb2xvci5pc1ZhbGlkKCkpIHsKLSAgICAg
ICAgICAgIFJlbmRlclNWR1Jlc291cmNlU29saWRDb2xvciogZmFsbGJhY2tSZXNvdXJjZSA9IFJl
bmRlclNWR1Jlc291cmNlOjpzaGFyZWRTb2xpZFBhaW50aW5nUmVzb3VyY2UoKTsKLSAgICAgICAg
ICAgIGZhbGxiYWNrUmVzb3VyY2UtPnNldENvbG9yKGZhbGxiYWNrQ29sb3IpOwotICAgICAgICAg
ICAgaWYgKGZhbGxiYWNrUmVzb3VyY2UtPmFwcGx5UmVzb3VyY2UodGhpcywgc3R5bGUsIGNvbnRl
eHQsIEFwcGx5VG9GaWxsTW9kZSkpCi0gICAgICAgICAgICAgICAgZmFsbGJhY2tSZXNvdXJjZS0+
cG9zdEFwcGx5UmVzb3VyY2UodGhpcywgY29udGV4dCwgQXBwbHlUb0ZpbGxNb2RlLCAmbV9wYXRo
KTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIGZhbGxiYWNrQ29sb3IgPSBDb2xvcigpOwotICAg
IFJlbmRlclNWR1Jlc291cmNlKiBzdHJva2VQYWludGluZ1Jlc291cmNlID0gUmVuZGVyU1ZHUmVz
b3VyY2U6OnN0cm9rZVBhaW50aW5nUmVzb3VyY2UodGhpcywgc3R5bGUsIGZhbGxiYWNrQ29sb3Ip
OwotICAgIGlmICghc3Ryb2tlUGFpbnRpbmdSZXNvdXJjZSkKLSAgICAgICAgcmV0dXJuOwotCi0g
ICAgUGF0aCogdXNlUGF0aCA9ICZtX3BhdGg7Ci0gICAgaW50IGFwcGx5TW9kZSA9IEFwcGx5VG9T
dHJva2VNb2RlOwotCi0gICAgYm9vbCBub25TY2FsaW5nU3Ryb2tlID0gc3R5bGUtPnN2Z1N0eWxl
KCktPnZlY3RvckVmZmVjdCgpID09IFZFX05PTl9TQ0FMSU5HX1NUUk9LRTsKLQotICAgIEdyYXBo
aWNzQ29udGV4dFN0YXRlU2F2ZXIgc3RhdGVTYXZlcigqY29udGV4dCwgZmFsc2UpOwotCi0gICAg
Ly8gU3BlYygxMS40KTogQW55IHplcm8gbGVuZ3RoIHN1YnBhdGggc2hhbGwgbm90IGJlIHN0cm9r
ZWQgaWYgdGhlIOKAmHN0cm9rZS1saW5lY2Fw4oCZIHByb3BlcnR5IGhhcyBhIHZhbHVlIG9mIGJ1
dHQKLSAgICAvLyBidXQgc2hhbGwgYmUgc3Ryb2tlZCBpZiB0aGUg4oCYc3Ryb2tlLWxpbmVjYXDi
gJkgcHJvcGVydHkgaGFzIGEgdmFsdWUgb2Ygcm91bmQgb3Igc3F1YXJlCi0gICAgLy8gRklYTUU6
IHRoaXMgZG9lcyBub3Qgd29yayBmb3IgemVyby1sZW5ndGggc3VicGF0aHMsIG9ubHkgd2hlbiB0
b3RhbCBwYXRoIGlzIHplcm8tbGVuZ3RoCi0gICAgaWYgKHNob3VsZFN0cm9rZVplcm9MZW5ndGhT
dWJwYXRoKCkpCi0gICAgICAgIHNldHVwU3F1YXJlQ2FwUGF0aCh1c2VQYXRoLCBhcHBseU1vZGUp
OwotICAgIGVsc2UgaWYgKG5vblNjYWxpbmdTdHJva2UpIHsKLSAgICAgICBpZiAoIXNldHVwTm9u
U2NhbGluZ1N0cm9rZVBhdGgodXNlUGF0aCwgc3RhdGVTYXZlcikpCi0gICAgICAgICAgIHJldHVy
bjsKLSAgICB9Ci0KLSAgICBpZiAoc3Ryb2tlUGFpbnRpbmdSZXNvdXJjZS0+YXBwbHlSZXNvdXJj
ZSh0aGlzLCBzdHlsZSwgY29udGV4dCwgYXBwbHlNb2RlKSkKLSAgICAgICAgc3Ryb2tlUGFpbnRp
bmdSZXNvdXJjZS0+cG9zdEFwcGx5UmVzb3VyY2UodGhpcywgY29udGV4dCwgYXBwbHlNb2RlLCB1
c2VQYXRoKTsKLSAgICBlbHNlIGlmIChmYWxsYmFja0NvbG9yLmlzVmFsaWQoKSkgewotICAgICAg
ICBSZW5kZXJTVkdSZXNvdXJjZVNvbGlkQ29sb3IqIGZhbGxiYWNrUmVzb3VyY2UgPSBSZW5kZXJT
VkdSZXNvdXJjZTo6c2hhcmVkU29saWRQYWludGluZ1Jlc291cmNlKCk7Ci0gICAgICAgIGZhbGxi
YWNrUmVzb3VyY2UtPnNldENvbG9yKGZhbGxiYWNrQ29sb3IpOwotICAgICAgICBpZiAoZmFsbGJh
Y2tSZXNvdXJjZS0+YXBwbHlSZXNvdXJjZSh0aGlzLCBzdHlsZSwgY29udGV4dCwgYXBwbHlNb2Rl
KSkKLSAgICAgICAgICAgIGZhbGxiYWNrUmVzb3VyY2UtPnBvc3RBcHBseVJlc291cmNlKHRoaXMs
IGNvbnRleHQsIGFwcGx5TW9kZSwgdXNlUGF0aCk7Ci0gICAgfQotfQotCi12b2lkIFJlbmRlclNW
R1BhdGg6OnBhaW50KFBhaW50SW5mbyYgcGFpbnRJbmZvLCBjb25zdCBMYXlvdXRQb2ludCYpCi17
Ci0gICAgaWYgKHBhaW50SW5mby5jb250ZXh0LT5wYWludGluZ0Rpc2FibGVkKCkgfHwgc3R5bGUo
KS0+dmlzaWJpbGl0eSgpID09IEhJRERFTiB8fCBtX3BhdGguaXNFbXB0eSgpKQotICAgICAgICBy
ZXR1cm47Ci0KLSAgICBGbG9hdFJlY3QgYm91bmRpbmdCb3ggPSByZXBhaW50UmVjdEluTG9jYWxD
b29yZGluYXRlcygpOwotICAgIGlmICghU1ZHUmVuZGVyU3VwcG9ydDo6cGFpbnRJbmZvSW50ZXJz
ZWN0c1JlcGFpbnRSZWN0KGJvdW5kaW5nQm94LCBtX2xvY2FsVHJhbnNmb3JtLCBwYWludEluZm8p
KQotICAgICAgICByZXR1cm47Ci0KLSAgICBQYWludEluZm8gY2hpbGRQYWludEluZm8ocGFpbnRJ
bmZvKTsKLSAgICBib29sIGRyYXdzT3V0bGluZSA9IHN0eWxlKCktPm91dGxpbmVXaWR0aCgpICYm
IChjaGlsZFBhaW50SW5mby5waGFzZSA9PSBQYWludFBoYXNlT3V0bGluZSB8fCBjaGlsZFBhaW50
SW5mby5waGFzZSA9PSBQYWludFBoYXNlU2VsZk91dGxpbmUpOwotICAgIGlmIChkcmF3c091dGxp
bmUgfHwgY2hpbGRQYWludEluZm8ucGhhc2UgPT0gUGFpbnRQaGFzZUZvcmVncm91bmQpIHsKLSAg
ICAgICAgR3JhcGhpY3NDb250ZXh0U3RhdGVTYXZlciBzdGF0ZVNhdmVyKCpjaGlsZFBhaW50SW5m
by5jb250ZXh0KTsKLSAgICAgICAgY2hpbGRQYWludEluZm8uYXBwbHlUcmFuc2Zvcm0obV9sb2Nh
bFRyYW5zZm9ybSk7Ci0KLSAgICAgICAgaWYgKGNoaWxkUGFpbnRJbmZvLnBoYXNlID09IFBhaW50
UGhhc2VGb3JlZ3JvdW5kKSB7Ci0gICAgICAgICAgICBQYWludEluZm8gc2F2ZWRJbmZvKGNoaWxk
UGFpbnRJbmZvKTsKLQotICAgICAgICAgICAgaWYgKFNWR1JlbmRlclN1cHBvcnQ6OnByZXBhcmVU
b1JlbmRlclNWR0NvbnRlbnQodGhpcywgY2hpbGRQYWludEluZm8pKSB7Ci0gICAgICAgICAgICAg
ICAgY29uc3QgU1ZHUmVuZGVyU3R5bGUqIHN2Z1N0eWxlID0gc3R5bGUoKS0+c3ZnU3R5bGUoKTsK
LSAgICAgICAgICAgICAgICBpZiAoc3ZnU3R5bGUtPnNoYXBlUmVuZGVyaW5nKCkgPT0gU1JfQ1JJ
U1BFREdFUykKLSAgICAgICAgICAgICAgICAgICAgY2hpbGRQYWludEluZm8uY29udGV4dC0+c2V0
U2hvdWxkQW50aWFsaWFzKGZhbHNlKTsKLQotICAgICAgICAgICAgICAgIGZpbGxBbmRTdHJva2VQ
YXRoKGNoaWxkUGFpbnRJbmZvLmNvbnRleHQpOwotCi0gICAgICAgICAgICAgICAgaWYgKHN2Z1N0
eWxlLT5oYXNNYXJrZXJzKCkpCi0gICAgICAgICAgICAgICAgICAgIG1fbWFya2VyTGF5b3V0SW5m
by5kcmF3TWFya2VycyhjaGlsZFBhaW50SW5mbyk7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAg
ICAgIFNWR1JlbmRlclN1cHBvcnQ6OmZpbmlzaFJlbmRlclNWR0NvbnRlbnQodGhpcywgY2hpbGRQ
YWludEluZm8sIHNhdmVkSW5mby5jb250ZXh0KTsKLSAgICAgICAgfQotCi0gICAgICAgIGlmIChk
cmF3c091dGxpbmUpCi0gICAgICAgICAgICBwYWludE91dGxpbmUoY2hpbGRQYWludEluZm8uY29u
dGV4dCwgSW50UmVjdChib3VuZGluZ0JveCkpOwotICAgIH0KLX0KLQotLy8gVGhpcyBtZXRob2Qg
aXMgY2FsbGVkIGZyb20gaW5zaWRlIHBhaW50T3V0bGluZSgpIHNpbmNlIHdlIGNhbGwgcGFpbnRP
dXRsaW5lKCkKLS8vIHdoaWxlIHRyYW5zZm9ybWVkIHRvIG91ciBjb29yZCBzeXN0ZW0sIHJldHVy
biBsb2NhbCBjb29yZHMKLXZvaWQgUmVuZGVyU1ZHUGF0aDo6YWRkRm9jdXNSaW5nUmVjdHMoVmVj
dG9yPExheW91dFJlY3Q+JiByZWN0cywgY29uc3QgTGF5b3V0UG9pbnQmKSAKLXsKLSAgICBMYXlv
dXRSZWN0IHJlY3QgPSBlbmNsb3NpbmdMYXlvdXRSZWN0KHJlcGFpbnRSZWN0SW5Mb2NhbENvb3Jk
aW5hdGVzKCkpOwotICAgIGlmICghcmVjdC5pc0VtcHR5KCkpCi0gICAgICAgIHJlY3RzLmFwcGVu
ZChyZWN0KTsKLX0KLQotYm9vbCBSZW5kZXJTVkdQYXRoOjpub2RlQXRGbG9hdFBvaW50KGNvbnN0
IEhpdFRlc3RSZXF1ZXN0JiByZXF1ZXN0LCBIaXRUZXN0UmVzdWx0JiByZXN1bHQsIGNvbnN0IEZs
b2F0UG9pbnQmIHBvaW50SW5QYXJlbnQsIEhpdFRlc3RBY3Rpb24gaGl0VGVzdEFjdGlvbikKLXsK
LSAgICAvLyBXZSBvbmx5IGRyYXcgaW4gdGhlIGZvcmdyb3VuZCBwaGFzZSwgc28gd2Ugb25seSBo
aXQtdGVzdCB0aGVuLgotICAgIGlmIChoaXRUZXN0QWN0aW9uICE9IEhpdFRlc3RGb3JlZ3JvdW5k
KQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBGbG9hdFBvaW50IGxvY2FsUG9pbnQgPSBt
X2xvY2FsVHJhbnNmb3JtLmludmVyc2UoKS5tYXBQb2ludChwb2ludEluUGFyZW50KTsKLQotICAg
IGlmICghU1ZHUmVuZGVyU3VwcG9ydDo6cG9pbnRJbkNsaXBwaW5nQXJlYSh0aGlzLCBsb2NhbFBv
aW50KSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgUG9pbnRlckV2ZW50c0hpdFJ1bGVz
IGhpdFJ1bGVzKFBvaW50ZXJFdmVudHNIaXRSdWxlczo6U1ZHX1BBVEhfSElUVEVTVElORywgcmVx
dWVzdCwgc3R5bGUoKS0+cG9pbnRlckV2ZW50cygpKTsKLSAgICBib29sIGlzVmlzaWJsZSA9IChz
dHlsZSgpLT52aXNpYmlsaXR5KCkgPT0gVklTSUJMRSk7Ci0gICAgaWYgKGlzVmlzaWJsZSB8fCAh
aGl0UnVsZXMucmVxdWlyZVZpc2libGUpIHsKLSAgICAgICAgY29uc3QgU1ZHUmVuZGVyU3R5bGUq
IHN2Z1N0eWxlID0gc3R5bGUoKS0+c3ZnU3R5bGUoKTsKLSAgICAgICAgV2luZFJ1bGUgZmlsbFJ1
bGUgPSBzdmdTdHlsZS0+ZmlsbFJ1bGUoKTsKLSAgICAgICAgaWYgKHJlcXVlc3Quc3ZnQ2xpcENv
bnRlbnQoKSkKLSAgICAgICAgICAgIGZpbGxSdWxlID0gc3ZnU3R5bGUtPmNsaXBSdWxlKCk7Ci0g
ICAgICAgIGlmICgoaGl0UnVsZXMuY2FuSGl0U3Ryb2tlICYmIChzdmdTdHlsZS0+aGFzU3Ryb2tl
KCkgfHwgIWhpdFJ1bGVzLnJlcXVpcmVTdHJva2UpICYmIHN0cm9rZUNvbnRhaW5zKGxvY2FsUG9p
bnQsIGhpdFJ1bGVzLnJlcXVpcmVTdHJva2UpKQotICAgICAgICAgICAgfHwgKGhpdFJ1bGVzLmNh
bkhpdEZpbGwgJiYgKHN2Z1N0eWxlLT5oYXNGaWxsKCkgfHwgIWhpdFJ1bGVzLnJlcXVpcmVGaWxs
KSAmJiBmaWxsQ29udGFpbnMobG9jYWxQb2ludCwgaGl0UnVsZXMucmVxdWlyZUZpbGwsIGZpbGxS
dWxlKSkpIHsKLSAgICAgICAgICAgIHVwZGF0ZUhpdFRlc3RSZXN1bHQocmVzdWx0LCByb3VuZGVk
TGF5b3V0UG9pbnQobG9jYWxQb2ludCkpOwotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAg
ICAgIH0KLSAgICB9Ci0gICAgcmV0dXJuIGZhbHNlOwotfQotCi1GbG9hdFJlY3QgUmVuZGVyU1ZH
UGF0aDo6Y2FsY3VsYXRlTWFya2VyQm91bmRzSWZOZWVkZWQoKQotewotICAgIFNWR0VsZW1lbnQq
IHN2Z0VsZW1lbnQgPSBzdGF0aWNfY2FzdDxTVkdFbGVtZW50Kj4obm9kZSgpKTsKLSAgICBBU1NF
UlQoc3ZnRWxlbWVudCAmJiBzdmdFbGVtZW50LT5kb2N1bWVudCgpKTsKLSAgICBpZiAoIXN2Z0Vs
ZW1lbnQtPmlzU3R5bGVkKCkpCi0gICAgICAgIHJldHVybiBGbG9hdFJlY3QoKTsKLQotICAgIFNW
R1N0eWxlZEVsZW1lbnQqIHN0eWxlZEVsZW1lbnQgPSBzdGF0aWNfY2FzdDxTVkdTdHlsZWRFbGVt
ZW50Kj4oc3ZnRWxlbWVudCk7Ci0gICAgaWYgKCFzdHlsZWRFbGVtZW50LT5zdXBwb3J0c01hcmtl
cnMoKSkKLSAgICAgICAgcmV0dXJuIEZsb2F0UmVjdCgpOwotCi0gICAgY29uc3QgU1ZHUmVuZGVy
U3R5bGUqIHN2Z1N0eWxlID0gc3R5bGUoKS0+c3ZnU3R5bGUoKTsKLSAgICBBU1NFUlQoc3ZnU3R5
bGUtPmhhc01hcmtlcnMoKSk7Ci0KLSAgICBTVkdSZXNvdXJjZXMqIHJlc291cmNlcyA9IFNWR1Jl
c291cmNlc0NhY2hlOjpjYWNoZWRSZXNvdXJjZXNGb3JSZW5kZXJPYmplY3QodGhpcyk7Ci0gICAg
aWYgKCFyZXNvdXJjZXMpCi0gICAgICAgIHJldHVybiBGbG9hdFJlY3QoKTsKLQotICAgIFJlbmRl
clNWR1Jlc291cmNlTWFya2VyKiBtYXJrZXJTdGFydCA9IHJlc291cmNlcy0+bWFya2VyU3RhcnQo
KTsKLSAgICBSZW5kZXJTVkdSZXNvdXJjZU1hcmtlciogbWFya2VyTWlkID0gcmVzb3VyY2VzLT5t
YXJrZXJNaWQoKTsKLSAgICBSZW5kZXJTVkdSZXNvdXJjZU1hcmtlciogbWFya2VyRW5kID0gcmVz
b3VyY2VzLT5tYXJrZXJFbmQoKTsKLSAgICBpZiAoIW1hcmtlclN0YXJ0ICYmICFtYXJrZXJNaWQg
JiYgIW1hcmtlckVuZCkKLSAgICAgICAgcmV0dXJuIEZsb2F0UmVjdCgpOwotCi0gICAgcmV0dXJu
IG1fbWFya2VyTGF5b3V0SW5mby5jYWxjdWxhdGVCb3VuZGFyaWVzKG1hcmtlclN0YXJ0LCBtYXJr
ZXJNaWQsIG1hcmtlckVuZCwgc3ZnU3R5bGUtPnN0cm9rZVdpZHRoKCkudmFsdWUoc3ZnRWxlbWVu
dCksIG1fcGF0aCk7Ci19Ci0KLXZvaWQgUmVuZGVyU1ZHUGF0aDo6dXBkYXRlQ2FjaGVkQm91bmRh
cmllcygpCi17Ci0gICAgaWYgKG1fcGF0aC5pc0VtcHR5KCkpIHsKLSAgICAgICAgbV9maWxsQm91
bmRpbmdCb3ggPSBGbG9hdFJlY3QoKTsKLSAgICAgICAgbV9zdHJva2VBbmRNYXJrZXJCb3VuZGlu
Z0JveCA9IEZsb2F0UmVjdCgpOwotICAgICAgICBtX3JlcGFpbnRCb3VuZGluZ0JveCA9IEZsb2F0
UmVjdCgpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgLy8gQ2FjaGUgX3VuY2xpcHBl
ZF8gZmlsbCBib3VuZGluZyBib3gsIHVzZWQgZm9yIGNhbGN1bGF0aW9ucyBpbiByZXNvdXJjZXMK
LSAgICBtX2ZpbGxCb3VuZGluZ0JveCA9IG1fcGF0aC5ib3VuZGluZ1JlY3QoKTsKLQotICAgIC8v
IFNwZWMoMTEuNCk6IEFueSB6ZXJvIGxlbmd0aCBzdWJwYXRoIHNoYWxsIG5vdCBiZSBzdHJva2Vk
IGlmIHRoZSDigJhzdHJva2UtbGluZWNhcOKAmSBwcm9wZXJ0eSBoYXMgYSB2YWx1ZSBvZiBidXR0
Ci0gICAgLy8gYnV0IHNoYWxsIGJlIHN0cm9rZWQgaWYgdGhlIOKAmHN0cm9rZS1saW5lY2Fw4oCZ
IHByb3BlcnR5IGhhcyBhIHZhbHVlIG9mIHJvdW5kIG9yIHNxdWFyZQotICAgIGlmIChzaG91bGRT
dHJva2VaZXJvTGVuZ3RoU3VicGF0aCgpKSB7Ci0gICAgICAgIG1fc3Ryb2tlQW5kTWFya2VyQm91
bmRpbmdCb3ggPSB6ZXJvTGVuZ3RoU3VicGF0aFJlY3QoKTsKLSAgICAgICAgLy8gQ2FjaGUgc21h
bGxlc3QgcG9zc2libGUgcmVwYWludCByZWN0YW5nbGUKLSAgICAgICAgbV9yZXBhaW50Qm91bmRp
bmdCb3ggPSBtX3N0cm9rZUFuZE1hcmtlckJvdW5kaW5nQm94OwotICAgICAgICBTVkdSZW5kZXJT
dXBwb3J0OjppbnRlcnNlY3RSZXBhaW50UmVjdFdpdGhSZXNvdXJjZXModGhpcywgbV9yZXBhaW50
Qm91bmRpbmdCb3gpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgLy8gQ2FjaGUgX3Vu
Y2xpcHBlZF8gc3Ryb2tlIGJvdW5kaW5nIGJveCwgdXNlZCBmb3IgY2FsY3VsYXRpb25zIGluIHJl
c291cmNlcyAoaW5jbHVkZXMgbWFya2VyIGJvdW5kYXJpZXMpCi0gICAgbV9zdHJva2VBbmRNYXJr
ZXJCb3VuZGluZ0JveCA9IG1fZmlsbEJvdW5kaW5nQm94OwotCi0gICAgY29uc3QgU1ZHUmVuZGVy
U3R5bGUqIHN2Z1N0eWxlID0gc3R5bGUoKS0+c3ZnU3R5bGUoKTsKLSAgICBpZiAoc3ZnU3R5bGUt
Pmhhc1N0cm9rZSgpKSB7Ci0gICAgICAgIEJvdW5kaW5nUmVjdFN0cm9rZVN0eWxlQXBwbGllciBz
dHJva2VTdHlsZSh0aGlzLCBzdHlsZSgpKTsKLSAgICAgICAgbV9zdHJva2VBbmRNYXJrZXJCb3Vu
ZGluZ0JveC51bml0ZShtX3BhdGguc3Ryb2tlQm91bmRpbmdSZWN0KCZzdHJva2VTdHlsZSkpOwot
ICAgIH0KLQotICAgIGlmIChzdmdTdHlsZS0+aGFzTWFya2VycygpKSB7CisgICAgaWYgKHN0eWxl
KCktPnN2Z1N0eWxlKCktPmhhc01hcmtlcnMoKSkgewogICAgICAgICBGbG9hdFJlY3QgbWFya2Vy
Qm91bmRzID0gY2FsY3VsYXRlTWFya2VyQm91bmRzSWZOZWVkZWQoKTsKLSAgICAgICAgaWYgKCFt
YXJrZXJCb3VuZHMuaXNFbXB0eSgpKQotICAgICAgICAgICAgbV9zdHJva2VBbmRNYXJrZXJCb3Vu
ZGluZ0JveC51bml0ZShtYXJrZXJCb3VuZHMpOworICAgICAgICBpZiAoIW1hcmtlckJvdW5kcy5p
c0VtcHR5KCkpIHsKKyAgICAgICAgICAgIEZsb2F0UmVjdCBzdHJva2VSZWN0ID0gc3Ryb2tlQW5k
TWFya2VyQm91bmRpbmdCb3goKTsKKyAgICAgICAgICAgIHN0cm9rZVJlY3QudW5pdGUobWFya2Vy
Qm91bmRzKTsKKyAgICAgICAgICAgIHNldFN0cm9rZUFuZE1hcmtlckJvdW5kaW5nQm94KHN0cm9r
ZVJlY3QpOworICAgICAgICB9CiAgICAgfQotCi0gICAgLy8gQ2FjaGUgc21hbGxlc3QgcG9zc2li
bGUgcmVwYWludCByZWN0YW5nbGUKLSAgICBtX3JlcGFpbnRCb3VuZGluZ0JveCA9IG1fc3Ryb2tl
QW5kTWFya2VyQm91bmRpbmdCb3g7Ci0gICAgU1ZHUmVuZGVyU3VwcG9ydDo6aW50ZXJzZWN0UmVw
YWludFJlY3RXaXRoUmVzb3VyY2VzKHRoaXMsIG1fcmVwYWludEJvdW5kaW5nQm94KTsKIH0KIAog
fQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdQYXRo
LmggYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1BhdGguaAppbmRleCA5
OGU2MDhkLi42MmExYzhjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3Zn
L1JlbmRlclNWR1BhdGguaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRl
clNWR1BhdGguaApAQCAtNCw2ICs0LDggQEAKICAqIENvcHlyaWdodCAoQykgMjAwNSBFcmljIFNl
aWRlbCA8ZXJpY0B3ZWJraXQub3JnPgogICogQ29weXJpZ2h0IChDKSAyMDA2IEFwcGxlIENvbXB1
dGVyLCBJbmMKICAqIENvcHlyaWdodCAoQykgMjAwOSBHb29nbGUsIEluYy4KKyAqIENvcHlyaWdo
dCAoQykgMjAxMSBSZW5hdGEgSG9kb3ZhbiA8cmVuaUB3ZWJraXQub3JnPgorICogQ29weXJpZ2h0
IChDKSAyMDExIFVuaXZlcnNpdHkgb2YgU3plZ2VkCiAgKgogICogVGhpcyBsaWJyYXJ5IGlzIGZy
ZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICogbW9kaWZ5IGl0
IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKQEAgLTI1
LDg2ICsyNywyMiBAQAogI2RlZmluZSBSZW5kZXJTVkdQYXRoX2gKIAogI2lmIEVOQUJMRShTVkcp
Ci0jaW5jbHVkZSAiQWZmaW5lVHJhbnNmb3JtLmgiCi0jaW5jbHVkZSAiRmxvYXRSZWN0LmgiCi0j
aW5jbHVkZSAiUmVuZGVyU1ZHTW9kZWxPYmplY3QuaCIKLSNpbmNsdWRlICJTVkdNYXJrZXJMYXlv
dXRJbmZvLmgiCisjaW5jbHVkZSAiUmVuZGVyU1ZHU2hhcGUuaCIKIAogbmFtZXNwYWNlIFdlYkNv
cmUgewogCi1jbGFzcyBGbG9hdFBvaW50OwotY2xhc3MgR3JhcGhpY3NDb250ZXh0U3RhdGVTYXZl
cjsKLWNsYXNzIFJlbmRlclNWR0NvbnRhaW5lcjsKLWNsYXNzIFNWR1N0eWxlZFRyYW5zZm9ybWFi
bGVFbGVtZW50OwotCi1jbGFzcyBSZW5kZXJTVkdQYXRoIDogcHVibGljIFJlbmRlclNWR01vZGVs
T2JqZWN0IHsKK2NsYXNzIFJlbmRlclNWR1BhdGggOiBwdWJsaWMgUmVuZGVyU1ZHU2hhcGUgewog
cHVibGljOgogICAgIGV4cGxpY2l0IFJlbmRlclNWR1BhdGgoU1ZHU3R5bGVkVHJhbnNmb3JtYWJs
ZUVsZW1lbnQqKTsKICAgICB2aXJ0dWFsIH5SZW5kZXJTVkdQYXRoKCk7CiAKLSAgICBjb25zdCBQ
YXRoJiBwYXRoKCkgY29uc3QgeyByZXR1cm4gbV9wYXRoOyB9Ci0gICAgdm9pZCBzZXROZWVkc1Bh
dGhVcGRhdGUoKSB7IG1fbmVlZHNQYXRoVXBkYXRlID0gdHJ1ZTsgfQotICAgIHZpcnR1YWwgdm9p
ZCBzZXROZWVkc0JvdW5kYXJpZXNVcGRhdGUoKSB7IG1fbmVlZHNCb3VuZGFyaWVzVXBkYXRlID0g
dHJ1ZTsgfQotICAgIHZpcnR1YWwgdm9pZCBzZXROZWVkc1RyYW5zZm9ybVVwZGF0ZSgpIHsgbV9u
ZWVkc1RyYW5zZm9ybVVwZGF0ZSA9IHRydWU7IH0KLQogcHJpdmF0ZToKLSAgICAvLyBIaXQtZGV0
ZWN0aW9uIHNlcGVyYXRlZCBmb3IgdGhlIGZpbGwgYW5kIHRoZSBzdHJva2UKLSAgICBib29sIGZp
bGxDb250YWlucyhjb25zdCBGbG9hdFBvaW50JiwgYm9vbCByZXF1aXJlc0ZpbGwgPSB0cnVlLCBX
aW5kUnVsZSBmaWxsUnVsZSA9IFJVTEVfTk9OWkVSTyk7Ci0gICAgYm9vbCBzdHJva2VDb250YWlu
cyhjb25zdCBGbG9hdFBvaW50JiwgYm9vbCByZXF1aXJlc1N0cm9rZSA9IHRydWUpOwotCi0gICAg
dmlydHVhbCBGbG9hdFJlY3Qgb2JqZWN0Qm91bmRpbmdCb3goKSBjb25zdCB7IHJldHVybiBtX2Zp
bGxCb3VuZGluZ0JveDsgfQotICAgIHZpcnR1YWwgRmxvYXRSZWN0IHN0cm9rZUJvdW5kaW5nQm94
KCkgY29uc3QgeyByZXR1cm4gbV9zdHJva2VBbmRNYXJrZXJCb3VuZGluZ0JveDsgfQotICAgIHZp
cnR1YWwgRmxvYXRSZWN0IHJlcGFpbnRSZWN0SW5Mb2NhbENvb3JkaW5hdGVzKCkgY29uc3QgeyBy
ZXR1cm4gbV9yZXBhaW50Qm91bmRpbmdCb3g7IH0KLSAgICB2aXJ0dWFsIGNvbnN0IEFmZmluZVRy
YW5zZm9ybSYgbG9jYWxUb1BhcmVudFRyYW5zZm9ybSgpIGNvbnN0IHsgcmV0dXJuIG1fbG9jYWxU
cmFuc2Zvcm07IH0KLQogICAgIHZpcnR1YWwgYm9vbCBpc1NWR1BhdGgoKSBjb25zdCB7IHJldHVy
biB0cnVlOyB9CiAgICAgdmlydHVhbCBjb25zdCBjaGFyKiByZW5kZXJOYW1lKCkgY29uc3QgeyBy
ZXR1cm4gIlJlbmRlclNWR1BhdGgiOyB9CiAKLSAgICB2aXJ0dWFsIHZvaWQgbGF5b3V0KCk7Ci0g
ICAgdmlydHVhbCB2b2lkIHBhaW50KFBhaW50SW5mbyYsIGNvbnN0IExheW91dFBvaW50Jik7Ci0g
ICAgdmlydHVhbCB2b2lkIGFkZEZvY3VzUmluZ1JlY3RzKFZlY3RvcjxMYXlvdXRSZWN0PiYsIGNv
bnN0IExheW91dFBvaW50Jik7Ci0KLSAgICB2aXJ0dWFsIGJvb2wgbm9kZUF0RmxvYXRQb2ludChj
b25zdCBIaXRUZXN0UmVxdWVzdCYsIEhpdFRlc3RSZXN1bHQmLCBjb25zdCBGbG9hdFBvaW50JiBw
b2ludEluUGFyZW50LCBIaXRUZXN0QWN0aW9uKTsKLQotICAgIEZsb2F0UmVjdCBjYWxjdWxhdGVN
YXJrZXJCb3VuZHNJZk5lZWRlZCgpOwotICAgIHZvaWQgdXBkYXRlQ2FjaGVkQm91bmRhcmllcygp
OwotCi0gICAgdm9pZCBzZXR1cFNxdWFyZUNhcFBhdGgoUGF0aComIHVzZVBhdGgsIGludCYgYXBw
bHlNb2RlKTsKLSAgICBib29sIHNldHVwTm9uU2NhbGluZ1N0cm9rZVBhdGgoUGF0aComIHVzZVBh
dGgsIEdyYXBoaWNzQ29udGV4dFN0YXRlU2F2ZXImKTsKLSAgICBib29sIHNob3VsZFN0cm9rZVpl
cm9MZW5ndGhTdWJwYXRoKCkgY29uc3Q7Ci0gICAgRmxvYXRSZWN0IHplcm9MZW5ndGhTdWJwYXRo
UmVjdCgpIGNvbnN0OwotCi1wcml2YXRlOgotICAgIHZpcnR1YWwgQWZmaW5lVHJhbnNmb3JtIGxv
Y2FsVHJhbnNmb3JtKCkgY29uc3QgeyByZXR1cm4gbV9sb2NhbFRyYW5zZm9ybTsgfQotICAgIHZv
aWQgZmlsbEFuZFN0cm9rZVBhdGgoR3JhcGhpY3NDb250ZXh0Kik7Ci0KLSAgICBib29sIG1fbmVl
ZHNCb3VuZGFyaWVzVXBkYXRlIDogMTsKLSAgICBib29sIG1fbmVlZHNQYXRoVXBkYXRlIDogMTsK
LSAgICBib29sIG1fbmVlZHNUcmFuc2Zvcm1VcGRhdGUgOiAxOwotCi0gICAgbXV0YWJsZSBQYXRo
IG1fcGF0aDsKLSAgICBGbG9hdFJlY3QgbV9maWxsQm91bmRpbmdCb3g7Ci0gICAgRmxvYXRSZWN0
IG1fc3Ryb2tlQW5kTWFya2VyQm91bmRpbmdCb3g7Ci0gICAgRmxvYXRSZWN0IG1fcmVwYWludEJv
dW5kaW5nQm94OwotICAgIFNWR01hcmtlckxheW91dEluZm8gbV9tYXJrZXJMYXlvdXRJbmZvOwot
ICAgIEFmZmluZVRyYW5zZm9ybSBtX2xvY2FsVHJhbnNmb3JtOworICAgIHZpcnR1YWwgdm9pZCBp
bmZsYXRlV2l0aE1hcmtlckJvdW5kcygpOwogfTsKIAotaW5saW5lIFJlbmRlclNWR1BhdGgqIHRv
UmVuZGVyU1ZHUGF0aChSZW5kZXJPYmplY3QqIG9iamVjdCkKLXsKLSAgICBBU1NFUlQoIW9iamVj
dCB8fCBvYmplY3QtPmlzU1ZHUGF0aCgpKTsKLSAgICByZXR1cm4gc3RhdGljX2Nhc3Q8UmVuZGVy
U1ZHUGF0aCo+KG9iamVjdCk7Ci19Ci0KLWlubGluZSBjb25zdCBSZW5kZXJTVkdQYXRoKiB0b1Jl
bmRlclNWR1BhdGgoY29uc3QgUmVuZGVyT2JqZWN0KiBvYmplY3QpCi17Ci0gICAgQVNTRVJUKCFv
YmplY3QgfHwgb2JqZWN0LT5pc1NWR1BhdGgoKSk7Ci0gICAgcmV0dXJuIHN0YXRpY19jYXN0PGNv
bnN0IFJlbmRlclNWR1BhdGgqPihvYmplY3QpOwotfQotCi0vLyBUaGlzIHdpbGwgY2F0Y2ggYW55
b25lIGRvaW5nIGFuIHVubmVjZXNzYXJ5IGNhc3QuCi12b2lkIHRvUmVuZGVyU1ZHUGF0aChjb25z
dCBSZW5kZXJTVkdQYXRoKik7Ci0KIH0KIAogI2VuZGlmIC8vIEVOQUJMRShTVkcpCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1JlY3QuY3BwIGIvU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZWN0LmNwcApuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwLi4wYzQ2Y2M0Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZWN0LmNwcApAQCAtMCwwICsxLDE0MSBA
QAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMSBVbml2ZXJzaXR5IG9mIFN6ZWdlZAorICogQ29w
eXJpZ2h0IChDKSAyMDExIFJlbmF0YSBIb2RvdmFuIDxyZW5pQHdlYmtpdC5vcmc+CisgKiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUg
bWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgVU5JVkVSU0lUWSBPRiBTWkVHRUQgYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhF
CisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBT
SEFMTCBVTklWRVJTSVRZIE9GIFNaRUdFRCBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
CisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKworI2lmIEVOQUJM
RShTVkcpCisjaW5jbHVkZSAiUmVuZGVyU1ZHUmVjdC5oIgorCisjaW5jbHVkZSAiU1ZHTmFtZXMu
aCIKKyNpbmNsdWRlICJTVkdSZWN0RWxlbWVudC5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisK
K1JlbmRlclNWR1JlY3Q6OlJlbmRlclNWR1JlY3QoU1ZHUmVjdEVsZW1lbnQqIG5vZGUpCisgICAg
OiBSZW5kZXJTVkdTaGFwZShub2RlKQoreworfQorCitSZW5kZXJTVkdSZWN0Ojp+UmVuZGVyU1ZH
UmVjdCgpCit7Cit9CisKK3ZvaWQgUmVuZGVyU1ZHUmVjdDo6Y3JlYXRlU2hhcGUoKQoreworICAg
IC8vIEJlZm9yZSBjcmVhdGluZyBhIG5ldyBvYmplY3Qgd2UgbmVlZCB0byBjbGVhciB0aGUgY2Fj
aGVkIGJvdW5kaW5nIGJveAorICAgIC8vIHRvIGF2b2lkIHVzaW5nIGdhcmJhZ2UuCisgICAgbV9i
b3VuZGluZ0JveCA9IEZsb2F0UmVjdCgpOworICAgIG1faW5uZXJTdHJva2VSZWN0ID0gRmxvYXRS
ZWN0KCk7CisgICAgbV9vdXRlclN0cm9rZVJlY3QgPSBGbG9hdFJlY3QoKTsKKyAgICBTVkdSZWN0
RWxlbWVudCogcmVjdCA9IHN0YXRpY19jYXN0PFNWR1JlY3RFbGVtZW50Kj4obm9kZSgpKTsKKyAg
ICBBU1NFUlQocmVjdCk7CisKKyAgICBib29sIG5vblNjYWxpbmdTdHJva2UgPSBzdHlsZSgpLT5z
dmdTdHlsZSgpLT52ZWN0b3JFZmZlY3QoKSA9PSBWRV9OT05fU0NBTElOR19TVFJPS0U7CisgICAg
Ly8gRmFsbGJhY2sgdG8gUmVuZGVyU1ZHU2hhcGUgaWYgcmVjdCBoYXMgcm91bmRlZCBjb3JuZXJz
LgorICAgIGlmIChyZWN0LT5oYXNBdHRyaWJ1dGUoU1ZHTmFtZXM6OnJ4QXR0cikgfHwgcmVjdC0+
aGFzQXR0cmlidXRlKFNWR05hbWVzOjpyeUF0dHIpIHx8IG5vblNjYWxpbmdTdHJva2UpIHsKKyAg
ICAgICBSZW5kZXJTVkdTaGFwZTo6Y3JlYXRlU2hhcGUoKTsKKyAgICAgICBzZXRJc1BhaW50aW5n
RmFsbGJhY2sodHJ1ZSk7CisgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIEZsb2F0U2l6ZSBi
b3VuZGluZ0JveFNpemUocmVjdC0+d2lkdGgoKS52YWx1ZShyZWN0KSwgcmVjdC0+aGVpZ2h0KCku
dmFsdWUocmVjdCkpOworICAgIGlmIChib3VuZGluZ0JveFNpemUuaXNFbXB0eSgpKQorICAgICAg
ICByZXR1cm47CisKKyAgICBtX2JvdW5kaW5nQm94ID0gRmxvYXRSZWN0KEZsb2F0UG9pbnQocmVj
dC0+eCgpLnZhbHVlKHJlY3QpLCByZWN0LT55KCkudmFsdWUocmVjdCkpLCBib3VuZGluZ0JveFNp
emUpOworCisgICAgLy8gVG8gZGVjaWRlIGlmIHRoZSBzdHJva2UgY29udGFpbnMgYSBwb2ludCB3
ZSBjcmVhdGUgdHdvIHJlY3RzIHdoaWNoIHJlcHJlc2VudCB0aGUgaW5uZXIgYW5kCisgICAgLy8g
dGhlIG91dGVyIHN0cm9rZSBib3JkZXJzLiBBIHN0cm9rZSBjb250YWlucyB0aGUgcG9pbnQsIGlm
IHRoZSBwb2ludCBpcyBiZXR3ZWVuIHRoZW0uCisgICAgbV9pbm5lclN0cm9rZVJlY3QgPSBtX2Jv
dW5kaW5nQm94OworICAgIG1fb3V0ZXJTdHJva2VSZWN0ID0gbV9ib3VuZGluZ0JveDsKKyAgICBp
ZiAoc3R5bGUoKS0+c3ZnU3R5bGUoKS0+aGFzU3Ryb2tlKCkpIHsKKyAgICAgICAgZmxvYXQgc3Ry
b2tlV2lkdGggPSB0aGlzLT5zdHJva2VXaWR0aCgpOworICAgICAgICBtX2lubmVyU3Ryb2tlUmVj
dC5pbmZsYXRlKC1zdHJva2VXaWR0aCAvIDIpOworICAgICAgICBtX291dGVyU3Ryb2tlUmVjdC5p
bmZsYXRlKHN0cm9rZVdpZHRoIC8gMik7CisgICAgfQorfQorCisKK0Zsb2F0UmVjdCBSZW5kZXJT
VkdSZWN0OjpvYmplY3RCb3VuZGluZ0JveCgpIGNvbnN0Cit7CisgICAgaWYgKGlzUGFpbnRpbmdG
YWxsYmFjaygpKQorICAgICAgICByZXR1cm4gUmVuZGVyU1ZHU2hhcGU6Om9iamVjdEJvdW5kaW5n
Qm94KCk7CisgICAgcmV0dXJuIG1fYm91bmRpbmdCb3g7Cit9CisKK0Zsb2F0UmVjdCBSZW5kZXJT
VkdSZWN0OjpzdHJva2VCb3VuZGluZ0JveCgpIGNvbnN0Cit7CisgICAgaWYgKGlzUGFpbnRpbmdG
YWxsYmFjaygpKQorICAgICAgICByZXR1cm4gUmVuZGVyU1ZHU2hhcGU6OnN0cm9rZUJvdW5kaW5n
Qm94KCk7CisgICAgcmV0dXJuIG1fb3V0ZXJTdHJva2VSZWN0OworfQorCit2b2lkIFJlbmRlclNW
R1JlY3Q6OmZpbGxTaGFwZShHcmFwaGljc0NvbnRleHQqIGNvbnRleHQpIGNvbnN0Cit7CisgICAg
aWYgKCFpc1BhaW50aW5nRmFsbGJhY2soKSkgeworI2lmIFBMQVRGT1JNKE1BQykKKyAgICAgICAg
Ly8gRklYTUU6IENHIGltcGxlbWVudGF0aW9uIG9mIEdyYXBoaWNzQ29udGV4dENHOjpmaWxsUmVj
dCBoYXMgYW4gb3duCisgICAgICAgIC8vIHNoYWRvdyBkcmF3aW5nIG1ldGhvZCwgd2hpY2ggZHJh
d3MgYW4gZXh0cmEgc2hhZG93LgorICAgICAgICAvLyBUaGlzIGlzIGEgd29ya2Fyb3VuZCBmb3Ig
c3dpdGNoaW5nIG9mZiB0aGUgZXh0cmEgc2hhZG93LgorICAgICAgICAvLyBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9Njg4OTkKKyAgICAgICAgaWYgKGNvbnRleHQtPmhh
c1NoYWRvdygpKSB7CisgICAgICAgICAgICBHcmFwaGljc0NvbnRleHRTdGF0ZVNhdmVyIHN0YXRl
U2F2ZXIoKmNvbnRleHQpOworICAgICAgICAgICAgY29udGV4dC0+Y2xlYXJTaGFkb3coKTsKKyAg
ICAgICAgICAgIGNvbnRleHQtPmZpbGxSZWN0KG1fYm91bmRpbmdCb3gpOworICAgICAgICAgICAg
cmV0dXJuOworICAgICAgICB9CisjZW5kaWYKKyAgICAgICAgY29udGV4dC0+ZmlsbFJlY3QobV9i
b3VuZGluZ0JveCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgUmVuZGVyU1ZHU2hhcGU6
OmZpbGxTaGFwZShjb250ZXh0KTsKK30KKwordm9pZCBSZW5kZXJTVkdSZWN0OjpzdHJva2VTaGFw
ZShHcmFwaGljc0NvbnRleHQqIGNvbnRleHQpIGNvbnN0Cit7CisgICAgaWYgKCFpc1BhaW50aW5n
RmFsbGJhY2soKSkgeworICAgICAgICBjb250ZXh0LT5zdHJva2VSZWN0KG1fYm91bmRpbmdCb3gs
IHN0cm9rZVdpZHRoKCkpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIFJlbmRlclNWR1No
YXBlOjpzdHJva2VTaGFwZShjb250ZXh0KTsKK30KKworYm9vbCBSZW5kZXJTVkdSZWN0OjpzaGFw
ZURlcGVuZGVudFN0cm9rZUNvbnRhaW5zKGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50KSBjb25zdAor
eworICAgIHJldHVybiBtX291dGVyU3Ryb2tlUmVjdC5jb250YWlucyhwb2ludCwgRmxvYXRSZWN0
OjpJbnNpZGVPck9uU3Ryb2tlKSAmJiAhbV9pbm5lclN0cm9rZVJlY3QuY29udGFpbnMocG9pbnQs
IEZsb2F0UmVjdDo6SW5zaWRlQnV0Tm90T25TdHJva2UpOworfQorCitib29sIFJlbmRlclNWR1Jl
Y3Q6OnNoYXBlRGVwZW5kZW50RmlsbENvbnRhaW5zKGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50LCBj
b25zdCBXaW5kUnVsZSBmaWxsUnVsZSkgY29uc3QKK3sKKyAgICBpZiAoaXNQYWludGluZ0ZhbGxi
YWNrKCkpCisgICAgICAgIHJldHVybiBSZW5kZXJTVkdTaGFwZTo6c2hhcGVEZXBlbmRlbnRGaWxs
Q29udGFpbnMocG9pbnQsIGZpbGxSdWxlKTsKKyAgICByZXR1cm4gbV9ib3VuZGluZ0JveC5jb250
YWlucyhwb2ludC54KCksIHBvaW50LnkoKSk7Cit9CisKK30KKworI2VuZGlmIC8vIEVOQUJMRShT
VkcpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jl
Y3QuaCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVjdC5oCm5ldyBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ4ZWYyOWYKLS0tIC9kZXYvbnVsbAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1JlY3QuaApAQCAtMCwwICsx
LDY0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDExIFVuaXZlcnNpdHkgb2YgU3plZ2VkCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTEgUmVuYXRhIEhvZG92YW4gPHJlbmlAd2Via2l0Lm9yZz4KKyAq
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAq
IGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBVTklWRVJTSVRZIE9GIFNaRUdFRCBgYEFTIElTJycgQU5EIEFOWQorICogRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVW
RU5UIFNIQUxMIFVOSVZFUlNJVFkgT0YgU1pFR0VEIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVY
RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBSZW5kZXJTVkdSZWN0X2gKKyNk
ZWZpbmUgUmVuZGVyU1ZHUmVjdF9oCisKKyNpZiBFTkFCTEUoU1ZHKQorI2luY2x1ZGUgIlJlbmRl
clNWR1BhdGguaCIKKyNpbmNsdWRlICJTVkdSZWN0RWxlbWVudC5oIgorCituYW1lc3BhY2UgV2Vi
Q29yZSB7CisKK2NsYXNzIFJlbmRlclNWR1JlY3QgOiBwdWJsaWMgUmVuZGVyU1ZHU2hhcGUgewor
cHVibGljOgorICAgIGV4cGxpY2l0IFJlbmRlclNWR1JlY3QoU1ZHUmVjdEVsZW1lbnQqKTsKKyAg
ICB2aXJ0dWFsIH5SZW5kZXJTVkdSZWN0KCk7CisKK3ByaXZhdGU6CisgICAgdmlydHVhbCBib29s
IGlzU1ZHUmVjdCgpIGNvbnN0IHsgcmV0dXJuIHRydWU7IH0KKyAgICB2aXJ0dWFsIGNvbnN0IGNo
YXIqIHJlbmRlck5hbWUoKSBjb25zdCB7IHJldHVybiAiUmVuZGVyU1ZHUGF0aCI7IH0KKworICAg
IHZpcnR1YWwgdm9pZCBjcmVhdGVTaGFwZSgpOworICAgIHZpcnR1YWwgYm9vbCBpc0VtcHR5KCkg
Y29uc3QgeyByZXR1cm4gaGFzUGF0aCgpID8gUmVuZGVyU1ZHU2hhcGU6OmlzRW1wdHkoKSA6IG1f
Ym91bmRpbmdCb3guaXNFbXB0eSgpOyB9OworICAgIHZpcnR1YWwgdm9pZCBmaWxsU2hhcGUoR3Jh
cGhpY3NDb250ZXh0KikgY29uc3Q7CisgICAgdmlydHVhbCB2b2lkIHN0cm9rZVNoYXBlKEdyYXBo
aWNzQ29udGV4dCopIGNvbnN0OworICAgIHZpcnR1YWwgRmxvYXRSZWN0IG9iamVjdEJvdW5kaW5n
Qm94KCkgY29uc3Q7CisgICAgdmlydHVhbCBGbG9hdFJlY3Qgc3Ryb2tlQm91bmRpbmdCb3goKSBj
b25zdDsKKyAgICB2aXJ0dWFsIGJvb2wgc2hhcGVEZXBlbmRlbnRTdHJva2VDb250YWlucyhjb25z
dCBGbG9hdFBvaW50JikgY29uc3Q7CisgICAgdmlydHVhbCBib29sIHNoYXBlRGVwZW5kZW50Rmls
bENvbnRhaW5zKGNvbnN0IEZsb2F0UG9pbnQmLCBjb25zdCBXaW5kUnVsZSkgY29uc3Q7CisKK3By
aXZhdGU6CisgICAgRmxvYXRSZWN0IG1fYm91bmRpbmdCb3g7CisgICAgRmxvYXRSZWN0IG1faW5u
ZXJTdHJva2VSZWN0OworICAgIEZsb2F0UmVjdCBtX291dGVyU3Ryb2tlUmVjdDsKK307CisKK30K
KworI2VuZGlmIC8vIEVOQUJMRShTVkcpCisjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2UuaCBiL1NvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2UuaAppbmRleCBhNjdiYTczLi5lMDIwMTU0IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291cmNl
LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJjZS5o
CkBAIC0yMSw2ICsyMSw3IEBACiAjZGVmaW5lIFJlbmRlclNWR1Jlc291cmNlX2gKIAogI2lmIEVO
QUJMRShTVkcpCisjaW5jbHVkZSAiUmVuZGVyU1ZHU2hhcGUuaCIKICNpbmNsdWRlICJSZW5kZXJT
dHlsZUNvbnN0YW50cy5oIgogI2luY2x1ZGUgIlNWR0RvY3VtZW50RXh0ZW5zaW9ucy5oIgogCkBA
IC02MSw3ICs2Miw3IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIHZvaWQgcmVtb3ZlQ2xpZW50RnJv
bUNhY2hlKFJlbmRlck9iamVjdCosIGJvb2wgbWFya0ZvckludmFsaWRhdGlvbiA9IHRydWUpID0g
MDsKIAogICAgIHZpcnR1YWwgYm9vbCBhcHBseVJlc291cmNlKFJlbmRlck9iamVjdCosIFJlbmRl
clN0eWxlKiwgR3JhcGhpY3NDb250ZXh0KiYsIHVuc2lnbmVkIHNob3J0IHJlc291cmNlTW9kZSkg
PSAwOwotICAgIHZpcnR1YWwgdm9pZCBwb3N0QXBwbHlSZXNvdXJjZShSZW5kZXJPYmplY3QqLCBH
cmFwaGljc0NvbnRleHQqJiwgdW5zaWduZWQgc2hvcnQsIGNvbnN0IFBhdGgqKSB7IH0KKyAgICB2
aXJ0dWFsIHZvaWQgcG9zdEFwcGx5UmVzb3VyY2UoUmVuZGVyT2JqZWN0KiwgR3JhcGhpY3NDb250
ZXh0KiYsIHVuc2lnbmVkIHNob3J0LCBjb25zdCBQYXRoKiwgY29uc3QgUmVuZGVyU1ZHU2hhcGUq
KSB7IH0KICAgICB2aXJ0dWFsIEZsb2F0UmVjdCByZXNvdXJjZUJvdW5kaW5nQm94KFJlbmRlck9i
amVjdCopID0gMDsKIAogICAgIHZpcnR1YWwgUmVuZGVyU1ZHUmVzb3VyY2VUeXBlIHJlc291cmNl
VHlwZSgpIGNvbnN0ID0gMDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9z
dmcvUmVuZGVyU1ZHUmVzb3VyY2VDbGlwcGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VDbGlwcGVyLmNwcAppbmRleCAyMmI0MWZhLi41YTZmNDdm
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291
cmNlQ2xpcHBlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJT
VkdSZXNvdXJjZUNsaXBwZXIuY3BwCkBAIC0yNDIsNyArMjQyLDcgQEAgYm9vbCBSZW5kZXJTVkdS
ZXNvdXJjZUNsaXBwZXI6OmRyYXdDb250ZW50SW50b01hc2tJbWFnZShDbGlwcGVyRGF0YSogY2xp
cHBlckRhdGEKICAgICAgICAgfQogCiAgICAgICAgIC8vIE9ubHkgc2hhcGVzLCBwYXRocyBhbmQg
dGV4dHMgYXJlIGFsbG93ZWQgZm9yIGNsaXBwaW5nLgotICAgICAgICBpZiAoIXJlbmRlcmVyLT5p
c1NWR1BhdGgoKSAmJiAhcmVuZGVyZXItPmlzU1ZHVGV4dCgpKQorICAgICAgICBpZiAoIXJlbmRl
cmVyLT5pc1NWR1NoYXBlKCkgJiYgIXJlbmRlcmVyLT5pc1NWR1RleHQoKSkKICAgICAgICAgICAg
IGNvbnRpbnVlOwogCiAgICAgICAgIC8vIFNhdmUgdGhlIG9sZCBSZW5kZXJTdHlsZSBvZiB0aGUg
Y3VycmVudCBvYmplY3QgZm9yIHJlc3RvcmluZyBhZnRlciBkcmF3aW5nCkBAIC0yODQsNyArMjg0
LDcgQEAgdm9pZCBSZW5kZXJTVkdSZXNvdXJjZUNsaXBwZXI6OmNhbGN1bGF0ZUNsaXBDb250ZW50
UmVwYWludFJlY3QoKQogICAgICAgICBSZW5kZXJPYmplY3QqIHJlbmRlcmVyID0gY2hpbGROb2Rl
LT5yZW5kZXJlcigpOwogICAgICAgICBpZiAoIWNoaWxkTm9kZS0+aXNTVkdFbGVtZW50KCkgfHwg
IXN0YXRpY19jYXN0PFNWR0VsZW1lbnQqPihjaGlsZE5vZGUpLT5pc1N0eWxlZCgpIHx8ICFyZW5k
ZXJlcikKICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICBpZiAoIXJlbmRlcmVyLT5pc1NW
R1BhdGgoKSAmJiAhcmVuZGVyZXItPmlzU1ZHVGV4dCgpICYmICFyZW5kZXJlci0+aXNTVkdTaGFk
b3dUcmVlUm9vdENvbnRhaW5lcigpKQorICAgICAgICBpZiAoIXJlbmRlcmVyLT5pc1NWR1NoYXBl
KCkgJiYgIXJlbmRlcmVyLT5pc1NWR1RleHQoKSAmJiAhcmVuZGVyZXItPmlzU1ZHU2hhZG93VHJl
ZVJvb3RDb250YWluZXIoKSkKICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICBSZW5kZXJT
dHlsZSogc3R5bGUgPSByZW5kZXJlci0+c3R5bGUoKTsKICAgICAgICAgaWYgKCFzdHlsZSB8fCBz
dHlsZS0+ZGlzcGxheSgpID09IE5PTkUgfHwgc3R5bGUtPnZpc2liaWxpdHkoKSAhPSBWSVNJQkxF
KQpAQCAtMzEwLDcgKzMxMCw3IEBAIGJvb2wgUmVuZGVyU1ZHUmVzb3VyY2VDbGlwcGVyOjpoaXRU
ZXN0Q2xpcENvbnRlbnQoY29uc3QgRmxvYXRSZWN0JiBvYmplY3RCb3VuZGluCiAgICAgICAgIFJl
bmRlck9iamVjdCogcmVuZGVyZXIgPSBjaGlsZE5vZGUtPnJlbmRlcmVyKCk7CiAgICAgICAgIGlm
ICghY2hpbGROb2RlLT5pc1NWR0VsZW1lbnQoKSB8fCAhc3RhdGljX2Nhc3Q8U1ZHRWxlbWVudCo+
KGNoaWxkTm9kZSktPmlzU3R5bGVkKCkgfHwgIXJlbmRlcmVyKQogICAgICAgICAgICAgY29udGlu
dWU7Ci0gICAgICAgIGlmICghcmVuZGVyZXItPmlzU1ZHUGF0aCgpICYmICFyZW5kZXJlci0+aXNT
VkdUZXh0KCkgJiYgIXJlbmRlcmVyLT5pc1NWR1NoYWRvd1RyZWVSb290Q29udGFpbmVyKCkpCisg
ICAgICAgIGlmICghcmVuZGVyZXItPmlzU1ZHU2hhcGUoKSAmJiAhcmVuZGVyZXItPmlzU1ZHVGV4
dCgpICYmICFyZW5kZXJlci0+aXNTVkdTaGFkb3dUcmVlUm9vdENvbnRhaW5lcigpKQogICAgICAg
ICAgICAgY29udGludWU7CiAgICAgICAgIEludFBvaW50IGhpdFBvaW50OwogICAgICAgICBIaXRU
ZXN0UmVzdWx0IHJlc3VsdChoaXRQb2ludCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291cmNlQ29udGFpbmVyLmNwcCBiL1NvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VDb250YWluZXIuY3BwCmluZGV4IDU1
Zjc3ZTUuLmU5NTBlNzEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcv
UmVuZGVyU1ZHUmVzb3VyY2VDb250YWluZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VDb250YWluZXIuY3BwCkBAIC0xODAsNyArMTgwLDcg
QEAgdm9pZCBSZW5kZXJTVkdSZXNvdXJjZUNvbnRhaW5lcjo6cmVnaXN0ZXJSZXNvdXJjZSgpCiAv
LyBGSVhNRTogVGhpcyBkb2VzIG5vdCBiZWxvbmcgaGVyZS4KIEFmZmluZVRyYW5zZm9ybSBSZW5k
ZXJTVkdSZXNvdXJjZUNvbnRhaW5lcjo6dHJhbnNmb3JtT25Ob25TY2FsaW5nU3Ryb2tlKFJlbmRl
ck9iamVjdCogb2JqZWN0LCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHJlc291cmNlVHJhbnNmb3Jt
KQogewotICAgIGlmICghb2JqZWN0LT5pc1NWR1BhdGgoKSkKKyAgICBpZiAoIW9iamVjdC0+aXNT
VkdTaGFwZSgpKQogICAgICAgICByZXR1cm4gcmVzb3VyY2VUcmFuc2Zvcm07CiAKICAgICBTVkdT
dHlsZWRUcmFuc2Zvcm1hYmxlRWxlbWVudCogZWxlbWVudCA9IHN0YXRpY19jYXN0PFNWR1N0eWxl
ZFRyYW5zZm9ybWFibGVFbGVtZW50Kj4ob2JqZWN0LT5ub2RlKCkpOwpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJjZUZpbHRlci5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291cmNlRmlsdGVyLmNwcApp
bmRleCA2ODkzNWRhLi45NjFkZDNmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvc3ZnL1JlbmRlclNWR1Jlc291cmNlRmlsdGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291cmNlRmlsdGVyLmNwcApAQCAtMjU5LDcgKzI1OSw3
IEBAIGJvb2wgUmVuZGVyU1ZHUmVzb3VyY2VGaWx0ZXI6OmFwcGx5UmVzb3VyY2UoUmVuZGVyT2Jq
ZWN0KiBvYmplY3QsIFJlbmRlclN0eWxlKiwKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotdm9pZCBS
ZW5kZXJTVkdSZXNvdXJjZUZpbHRlcjo6cG9zdEFwcGx5UmVzb3VyY2UoUmVuZGVyT2JqZWN0KiBv
YmplY3QsIEdyYXBoaWNzQ29udGV4dComIGNvbnRleHQsIHVuc2lnbmVkIHNob3J0IHJlc291cmNl
TW9kZSwgY29uc3QgUGF0aCopCit2b2lkIFJlbmRlclNWR1Jlc291cmNlRmlsdGVyOjpwb3N0QXBw
bHlSZXNvdXJjZShSZW5kZXJPYmplY3QqIG9iamVjdCwgR3JhcGhpY3NDb250ZXh0KiYgY29udGV4
dCwgdW5zaWduZWQgc2hvcnQgcmVzb3VyY2VNb2RlLCBjb25zdCBQYXRoKiwgY29uc3QgUmVuZGVy
U1ZHU2hhcGUqKQogewogICAgIEFTU0VSVChvYmplY3QpOwogICAgIEFTU0VSVChjb250ZXh0KTsK
QEAgLTI5Myw3ICsyOTMsNyBAQCB2b2lkIFJlbmRlclNWR1Jlc291cmNlRmlsdGVyOjpwb3N0QXBw
bHlSZXNvdXJjZShSZW5kZXJPYmplY3QqIG9iamVjdCwgR3JhcGhpY3NDbwogICAgIH0KIAogICAg
IEZpbHRlckVmZmVjdCogbGFzdEVmZmVjdCA9IGZpbHRlckRhdGEtPmJ1aWxkZXItPmxhc3RFZmZl
Y3QoKTsKLSAgICAKKwogICAgIGlmIChsYXN0RWZmZWN0ICYmICFmaWx0ZXJEYXRhLT5ib3VuZGFy
aWVzLmlzRW1wdHkoKSAmJiAhbGFzdEVmZmVjdC0+ZmlsdGVyUHJpbWl0aXZlU3VicmVnaW9uKCku
aXNFbXB0eSgpKSB7CiAgICAgICAgIC8vIFRoaXMgaXMgdGhlIHJlYWwgZmlsdGVyaW5nIG9mIHRo
ZSBvYmplY3QuIEl0IGp1c3QgbmVlZHMgdG8gYmUgY2FsbGVkIG9uIHRoZQogICAgICAgICAvLyBp
bml0aWFsIGZpbHRlcmluZyBwcm9jZXNzLiBXZSBqdXN0IHRha2UgdGhlIHN0b3JlZCBmaWx0ZXIg
cmVzdWx0IG9uIGEKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVu
ZGVyU1ZHUmVzb3VyY2VGaWx0ZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVu
ZGVyU1ZHUmVzb3VyY2VGaWx0ZXIuaAppbmRleCA1YTViMDkyLi5mZjYxYjcxIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291cmNlRmlsdGVyLmgK
KysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJjZUZpbHRl
ci5oCkBAIC03Miw3ICs3Miw3IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIHZvaWQgcmVtb3ZlQ2xp
ZW50RnJvbUNhY2hlKFJlbmRlck9iamVjdCosIGJvb2wgbWFya0ZvckludmFsaWRhdGlvbiA9IHRy
dWUpOwogCiAgICAgdmlydHVhbCBib29sIGFwcGx5UmVzb3VyY2UoUmVuZGVyT2JqZWN0KiwgUmVu
ZGVyU3R5bGUqLCBHcmFwaGljc0NvbnRleHQqJiwgdW5zaWduZWQgc2hvcnQgcmVzb3VyY2VNb2Rl
KTsKLSAgICB2aXJ0dWFsIHZvaWQgcG9zdEFwcGx5UmVzb3VyY2UoUmVuZGVyT2JqZWN0KiwgR3Jh
cGhpY3NDb250ZXh0KiYsIHVuc2lnbmVkIHNob3J0IHJlc291cmNlTW9kZSwgY29uc3QgUGF0aCop
OworICAgIHZpcnR1YWwgdm9pZCBwb3N0QXBwbHlSZXNvdXJjZShSZW5kZXJPYmplY3QqLCBHcmFw
aGljc0NvbnRleHQqJiwgdW5zaWduZWQgc2hvcnQgcmVzb3VyY2VNb2RlLCBjb25zdCBQYXRoKiwg
Y29uc3QgUmVuZGVyU1ZHU2hhcGUqKTsKIAogICAgIHZpcnR1YWwgRmxvYXRSZWN0IHJlc291cmNl
Qm91bmRpbmdCb3goUmVuZGVyT2JqZWN0Kik7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VHcmFkaWVudC5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291cmNlR3JhZGllbnQuY3BwCmluZGV4IDVl
MzFiNzYuLjIyNDMzY2YgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcv
UmVuZGVyU1ZHUmVzb3VyY2VHcmFkaWVudC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJjZUdyYWRpZW50LmNwcApAQCAtMjcsNiArMjcsNyBAQAog
CiAjaW5jbHVkZSAiR3JhZGllbnRBdHRyaWJ1dGVzLmgiCiAjaW5jbHVkZSAiR3JhcGhpY3NDb250
ZXh0LmgiCisjaW5jbHVkZSAiUmVuZGVyU1ZHU2hhcGUuaCIKICNpbmNsdWRlICJSZW5kZXJTVkdU
ZXh0LmgiCiAjaW5jbHVkZSAiU1ZHSW1hZ2VCdWZmZXJUb29scy5oIgogI2luY2x1ZGUgIlNWR1Jl
bmRlclN1cHBvcnQuaCIKQEAgLTIzMSw3ICsyMzIsNyBAQCBib29sIFJlbmRlclNWR1Jlc291cmNl
R3JhZGllbnQ6OmFwcGx5UmVzb3VyY2UoUmVuZGVyT2JqZWN0KiBvYmplY3QsIFJlbmRlclN0eWxl
KgogICAgIHJldHVybiB0cnVlOwogfQogCi12b2lkIFJlbmRlclNWR1Jlc291cmNlR3JhZGllbnQ6
OnBvc3RBcHBseVJlc291cmNlKFJlbmRlck9iamVjdCogb2JqZWN0LCBHcmFwaGljc0NvbnRleHQq
JiBjb250ZXh0LCB1bnNpZ25lZCBzaG9ydCByZXNvdXJjZU1vZGUsIGNvbnN0IFBhdGgqIHBhdGgp
Cit2b2lkIFJlbmRlclNWR1Jlc291cmNlR3JhZGllbnQ6OnBvc3RBcHBseVJlc291cmNlKFJlbmRl
ck9iamVjdCogb2JqZWN0LCBHcmFwaGljc0NvbnRleHQqJiBjb250ZXh0LCB1bnNpZ25lZCBzaG9y
dCByZXNvdXJjZU1vZGUsIGNvbnN0IFBhdGgqIHBhdGgsIGNvbnN0IFJlbmRlclNWR1NoYXBlKiBz
aGFwZSkKIHsKICAgICBBU1NFUlQoY29udGV4dCk7CiAgICAgQVNTRVJUKHJlc291cmNlTW9kZSAh
PSBBcHBseVRvRGVmYXVsdE1vZGUpOwpAQCAtMjU5LDExICsyNjAsMTkgQEAgdm9pZCBSZW5kZXJT
VkdSZXNvdXJjZUdyYWRpZW50Ojpwb3N0QXBwbHlSZXNvdXJjZShSZW5kZXJPYmplY3QqIG9iamVj
dCwgR3JhcGhpY3MKICNlbHNlCiAgICAgICAgIFVOVVNFRF9QQVJBTShvYmplY3QpOwogI2VuZGlm
Ci0gICAgfSBlbHNlIGlmIChwYXRoKSB7Ci0gICAgICAgIGlmIChyZXNvdXJjZU1vZGUgJiBBcHBs
eVRvRmlsbE1vZGUpCi0gICAgICAgICAgICBjb250ZXh0LT5maWxsUGF0aCgqcGF0aCk7Ci0gICAg
ICAgIGVsc2UgaWYgKHJlc291cmNlTW9kZSAmIEFwcGx5VG9TdHJva2VNb2RlKQotICAgICAgICAg
ICAgY29udGV4dC0+c3Ryb2tlUGF0aCgqcGF0aCk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgaWYg
KHJlc291cmNlTW9kZSAmIEFwcGx5VG9GaWxsTW9kZSkgeworICAgICAgICAgICAgaWYgKHBhdGgp
CisgICAgICAgICAgICAgICAgY29udGV4dC0+ZmlsbFBhdGgoKnBhdGgpOworICAgICAgICAgICAg
ZWxzZSBpZiAoc2hhcGUpCisgICAgICAgICAgICAgICAgc2hhcGUtPmZpbGxTaGFwZShjb250ZXh0
KTsKKyAgICAgICAgfQorICAgICAgICBpZiAocmVzb3VyY2VNb2RlICYgQXBwbHlUb1N0cm9rZU1v
ZGUpIHsKKyAgICAgICAgICAgIGlmIChwYXRoKQorICAgICAgICAgICAgICAgIGNvbnRleHQtPnN0
cm9rZVBhdGgoKnBhdGgpOworICAgICAgICAgICAgZWxzZSBpZiAoc2hhcGUpCisgICAgICAgICAg
ICAgICAgc2hhcGUtPnN0cm9rZVNoYXBlKGNvbnRleHQpOworICAgICAgICB9CiAgICAgfQogCiAg
ICAgY29udGV4dC0+cmVzdG9yZSgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJjZUdyYWRpZW50LmggYi9Tb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291cmNlR3JhZGllbnQuaAppbmRleCBkZjQ5MmUyLi4zZmNj
ZDQ0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jl
c291cmNlR3JhZGllbnQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRl
clNWR1Jlc291cmNlR3JhZGllbnQuaApAQCAtNTAsNyArNTAsNyBAQCBwdWJsaWM6CiAgICAgdmly
dHVhbCB2b2lkIHJlbW92ZUNsaWVudEZyb21DYWNoZShSZW5kZXJPYmplY3QqLCBib29sIG1hcmtG
b3JJbnZhbGlkYXRpb24gPSB0cnVlKTsKIAogICAgIHZpcnR1YWwgYm9vbCBhcHBseVJlc291cmNl
KFJlbmRlck9iamVjdCosIFJlbmRlclN0eWxlKiwgR3JhcGhpY3NDb250ZXh0KiYsIHVuc2lnbmVk
IHNob3J0IHJlc291cmNlTW9kZSk7Ci0gICAgdmlydHVhbCB2b2lkIHBvc3RBcHBseVJlc291cmNl
KFJlbmRlck9iamVjdCosIEdyYXBoaWNzQ29udGV4dComLCB1bnNpZ25lZCBzaG9ydCByZXNvdXJj
ZU1vZGUsIGNvbnN0IFBhdGgqKTsKKyAgICB2aXJ0dWFsIHZvaWQgcG9zdEFwcGx5UmVzb3VyY2Uo
UmVuZGVyT2JqZWN0KiwgR3JhcGhpY3NDb250ZXh0KiYsIHVuc2lnbmVkIHNob3J0IHJlc291cmNl
TW9kZSwgY29uc3QgUGF0aCosIGNvbnN0IFJlbmRlclNWR1NoYXBlKik7CiAgICAgdmlydHVhbCBG
bG9hdFJlY3QgcmVzb3VyY2VCb3VuZGluZ0JveChSZW5kZXJPYmplY3QqKSB7IHJldHVybiBGbG9h
dFJlY3QoKTsgfQogCiBwcm90ZWN0ZWQ6CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291cmNlUGF0dGVybi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291cmNlUGF0dGVybi5jcHAKaW5kZXggOGRjZTA4NC4u
YmM0NDNlNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJT
VkdSZXNvdXJjZVBhdHRlcm4uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcv
UmVuZGVyU1ZHUmVzb3VyY2VQYXR0ZXJuLmNwcApAQCAtMTg4LDE2ICsxODgsMjIgQEAgYm9vbCBS
ZW5kZXJTVkdSZXNvdXJjZVBhdHRlcm46OmFwcGx5UmVzb3VyY2UoUmVuZGVyT2JqZWN0KiBvYmpl
Y3QsIFJlbmRlclN0eWxlKgogICAgIHJldHVybiB0cnVlOwogfQogCi12b2lkIFJlbmRlclNWR1Jl
c291cmNlUGF0dGVybjo6cG9zdEFwcGx5UmVzb3VyY2UoUmVuZGVyT2JqZWN0KiwgR3JhcGhpY3ND
b250ZXh0KiYgY29udGV4dCwgdW5zaWduZWQgc2hvcnQgcmVzb3VyY2VNb2RlLCBjb25zdCBQYXRo
KiBwYXRoKQordm9pZCBSZW5kZXJTVkdSZXNvdXJjZVBhdHRlcm46OnBvc3RBcHBseVJlc291cmNl
KFJlbmRlck9iamVjdCosIEdyYXBoaWNzQ29udGV4dComIGNvbnRleHQsIHVuc2lnbmVkIHNob3J0
IHJlc291cmNlTW9kZSwgY29uc3QgUGF0aCogcGF0aCwgY29uc3QgUmVuZGVyU1ZHU2hhcGUqIHNo
YXBlKQogewogICAgIEFTU0VSVChjb250ZXh0KTsKICAgICBBU1NFUlQocmVzb3VyY2VNb2RlICE9
IEFwcGx5VG9EZWZhdWx0TW9kZSk7CiAKLSAgICBpZiAocGF0aCAmJiAhKHJlc291cmNlTW9kZSAm
IEFwcGx5VG9UZXh0TW9kZSkpIHsKLSAgICAgICAgaWYgKHJlc291cmNlTW9kZSAmIEFwcGx5VG9G
aWxsTW9kZSkKKyAgICBpZiAocmVzb3VyY2VNb2RlICYgQXBwbHlUb0ZpbGxNb2RlKSB7CisgICAg
ICAgIGlmIChwYXRoKQogICAgICAgICAgICAgY29udGV4dC0+ZmlsbFBhdGgoKnBhdGgpOwotICAg
ICAgICBlbHNlIGlmIChyZXNvdXJjZU1vZGUgJiBBcHBseVRvU3Ryb2tlTW9kZSkKKyAgICAgICAg
ZWxzZSBpZiAoc2hhcGUpCisgICAgICAgICAgICBzaGFwZS0+ZmlsbFNoYXBlKGNvbnRleHQpOwor
ICAgIH0KKyAgICBpZiAocmVzb3VyY2VNb2RlICYgQXBwbHlUb1N0cm9rZU1vZGUpIHsKKyAgICAg
ICAgaWYgKHBhdGgpCiAgICAgICAgICAgICBjb250ZXh0LT5zdHJva2VQYXRoKCpwYXRoKTsKKyAg
ICAgICAgZWxzZSBpZiAoc2hhcGUpCisgICAgICAgICAgICBzaGFwZS0+c3Ryb2tlU2hhcGUoY29u
dGV4dCk7CiAgICAgfQogCiAgICAgY29udGV4dC0+cmVzdG9yZSgpOwpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJjZVBhdHRlcm4uaCBiL1Nv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VQYXR0ZXJuLmgKaW5k
ZXggOWU4NjQ4Ni4uNDA0OTI0MiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L3N2Zy9SZW5kZXJTVkdSZXNvdXJjZVBhdHRlcm4uaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291cmNlUGF0dGVybi5oCkBAIC01Miw3ICs1Miw3IEBAIHB1
YmxpYzoKICAgICB2aXJ0dWFsIHZvaWQgcmVtb3ZlQ2xpZW50RnJvbUNhY2hlKFJlbmRlck9iamVj
dCosIGJvb2wgbWFya0ZvckludmFsaWRhdGlvbiA9IHRydWUpOwogCiAgICAgdmlydHVhbCBib29s
IGFwcGx5UmVzb3VyY2UoUmVuZGVyT2JqZWN0KiwgUmVuZGVyU3R5bGUqLCBHcmFwaGljc0NvbnRl
eHQqJiwgdW5zaWduZWQgc2hvcnQgcmVzb3VyY2VNb2RlKTsKLSAgICB2aXJ0dWFsIHZvaWQgcG9z
dEFwcGx5UmVzb3VyY2UoUmVuZGVyT2JqZWN0KiwgR3JhcGhpY3NDb250ZXh0KiYsIHVuc2lnbmVk
IHNob3J0IHJlc291cmNlTW9kZSwgY29uc3QgUGF0aCopOworICAgIHZpcnR1YWwgdm9pZCBwb3N0
QXBwbHlSZXNvdXJjZShSZW5kZXJPYmplY3QqLCBHcmFwaGljc0NvbnRleHQqJiwgdW5zaWduZWQg
c2hvcnQgcmVzb3VyY2VNb2RlLCBjb25zdCBQYXRoKiwgY29uc3QgUmVuZGVyU1ZHU2hhcGUqKTsK
ICAgICB2aXJ0dWFsIEZsb2F0UmVjdCByZXNvdXJjZUJvdW5kaW5nQm94KFJlbmRlck9iamVjdCop
IHsgcmV0dXJuIEZsb2F0UmVjdCgpOyB9CiAKICAgICB2aXJ0dWFsIFJlbmRlclNWR1Jlc291cmNl
VHlwZSByZXNvdXJjZVR5cGUoKSBjb25zdCB7IHJldHVybiBzX3Jlc291cmNlVHlwZTsgfQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJjZVNv
bGlkQ29sb3IuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNv
dXJjZVNvbGlkQ29sb3IuY3BwCmluZGV4IDViZTJhZjYuLjYzZGY3NTEgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VTb2xpZENvbG9yLmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291cmNlU29s
aWRDb2xvci5jcHAKQEAgLTIzLDYgKzIzLDcgQEAKICNpbmNsdWRlICJSZW5kZXJTVkdSZXNvdXJj
ZVNvbGlkQ29sb3IuaCIKIAogI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgorI2luY2x1ZGUg
IlJlbmRlclNWR1NoYXBlLmgiCiAjaW5jbHVkZSAiUmVuZGVyU3R5bGUuaCIKICNpbmNsdWRlICJT
VkdSZW5kZXJTdXBwb3J0LmgiCiAKQEAgLTc0LDE2ICs3NSwyMiBAQCBib29sIFJlbmRlclNWR1Jl
c291cmNlU29saWRDb2xvcjo6YXBwbHlSZXNvdXJjZShSZW5kZXJPYmplY3QqIG9iamVjdCwgUmVu
ZGVyU3R5bAogICAgIHJldHVybiB0cnVlOwogfQogCi12b2lkIFJlbmRlclNWR1Jlc291cmNlU29s
aWRDb2xvcjo6cG9zdEFwcGx5UmVzb3VyY2UoUmVuZGVyT2JqZWN0KiwgR3JhcGhpY3NDb250ZXh0
KiYgY29udGV4dCwgdW5zaWduZWQgc2hvcnQgcmVzb3VyY2VNb2RlLCBjb25zdCBQYXRoKiBwYXRo
KQordm9pZCBSZW5kZXJTVkdSZXNvdXJjZVNvbGlkQ29sb3I6OnBvc3RBcHBseVJlc291cmNlKFJl
bmRlck9iamVjdCosIEdyYXBoaWNzQ29udGV4dComIGNvbnRleHQsIHVuc2lnbmVkIHNob3J0IHJl
c291cmNlTW9kZSwgY29uc3QgUGF0aCogcGF0aCwgY29uc3QgUmVuZGVyU1ZHU2hhcGUqIHNoYXBl
KQogewogICAgIEFTU0VSVChjb250ZXh0KTsKICAgICBBU1NFUlQocmVzb3VyY2VNb2RlICE9IEFw
cGx5VG9EZWZhdWx0TW9kZSk7CiAKLSAgICBpZiAocGF0aCAmJiAhKHJlc291cmNlTW9kZSAmIEFw
cGx5VG9UZXh0TW9kZSkpIHsKLSAgICAgICAgaWYgKHJlc291cmNlTW9kZSAmIEFwcGx5VG9GaWxs
TW9kZSkKKyAgICBpZiAocmVzb3VyY2VNb2RlICYgQXBwbHlUb0ZpbGxNb2RlKSB7CisgICAgICAg
IGlmIChwYXRoKQogICAgICAgICAgICAgY29udGV4dC0+ZmlsbFBhdGgoKnBhdGgpOwotICAgICAg
ICBlbHNlIGlmIChyZXNvdXJjZU1vZGUgJiBBcHBseVRvU3Ryb2tlTW9kZSkKKyAgICAgICAgZWxz
ZSBpZiAoc2hhcGUpCisgICAgICAgICAgICBzaGFwZS0+ZmlsbFNoYXBlKGNvbnRleHQpOworICAg
IH0KKyAgICBpZiAocmVzb3VyY2VNb2RlICYgQXBwbHlUb1N0cm9rZU1vZGUpIHsKKyAgICAgICAg
aWYgKHBhdGgpCiAgICAgICAgICAgICBjb250ZXh0LT5zdHJva2VQYXRoKCpwYXRoKTsKKyAgICAg
ICAgZWxzZSBpZiAoc2hhcGUpCisgICAgICAgICAgICBzaGFwZS0+c3Ryb2tlU2hhcGUoY29udGV4
dCk7CiAgICAgfQogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3Zn
L1JlbmRlclNWR1Jlc291cmNlU29saWRDb2xvci5oIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L3N2Zy9SZW5kZXJTVkdSZXNvdXJjZVNvbGlkQ29sb3IuaAppbmRleCAwMmNlYjMxLi44YmJmZGNk
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291
cmNlU29saWRDb2xvci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVy
U1ZHUmVzb3VyY2VTb2xpZENvbG9yLmgKQEAgLTM2LDcgKzM2LDcgQEAgcHVibGljOgogICAgIHZp
cnR1YWwgdm9pZCByZW1vdmVDbGllbnRGcm9tQ2FjaGUoUmVuZGVyT2JqZWN0KiwgYm9vbCA9IHRy
dWUpIHsgfQogCiAgICAgdmlydHVhbCBib29sIGFwcGx5UmVzb3VyY2UoUmVuZGVyT2JqZWN0Kiwg
UmVuZGVyU3R5bGUqLCBHcmFwaGljc0NvbnRleHQqJiwgdW5zaWduZWQgc2hvcnQgcmVzb3VyY2VN
b2RlKTsKLSAgICB2aXJ0dWFsIHZvaWQgcG9zdEFwcGx5UmVzb3VyY2UoUmVuZGVyT2JqZWN0Kiwg
R3JhcGhpY3NDb250ZXh0KiYsIHVuc2lnbmVkIHNob3J0IHJlc291cmNlTW9kZSwgY29uc3QgUGF0
aCopOworICAgIHZpcnR1YWwgdm9pZCBwb3N0QXBwbHlSZXNvdXJjZShSZW5kZXJPYmplY3QqLCBH
cmFwaGljc0NvbnRleHQqJiwgdW5zaWduZWQgc2hvcnQgcmVzb3VyY2VNb2RlLCBjb25zdCBQYXRo
KiwgY29uc3QgUmVuZGVyU1ZHU2hhcGUqKTsKICAgICB2aXJ0dWFsIEZsb2F0UmVjdCByZXNvdXJj
ZUJvdW5kaW5nQm94KFJlbmRlck9iamVjdCopIHsgcmV0dXJuIEZsb2F0UmVjdCgpOyB9CiAKICAg
ICB2aXJ0dWFsIFJlbmRlclNWR1Jlc291cmNlVHlwZSByZXNvdXJjZVR5cGUoKSBjb25zdCB7IHJl
dHVybiBzX3Jlc291cmNlVHlwZTsgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL3N2Zy9SZW5kZXJTVkdTaGFwZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3Zn
L1JlbmRlclNWR1NoYXBlLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5k
YTUzN2MxCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9S
ZW5kZXJTVkdTaGFwZS5jcHAKQEAgLTAsMCArMSw0NTIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMDQsIDIwMDUsIDIwMDcgTmlrb2xhcyBaaW1tZXJtYW5uIDx6aW1tZXJtYW5uQGtkZS5vcmc+
CisgKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUsIDIwMDggUm9iIEJ1aXMgPGJ1aXNAa2RlLm9y
Zz4KKyAqIENvcHlyaWdodCAoQykgMjAwNSwgMjAwNyBFcmljIFNlaWRlbCA8ZXJpY0B3ZWJraXQu
b3JnPgorICogQ29weXJpZ2h0IChDKSAyMDA5IEdvb2dsZSwgSW5jLgorICogQ29weXJpZ2h0IChD
KSAyMDA5IERpcmsgU2NodWx6ZSA8a3JpdEB3ZWJraXQub3JnPgorICogQ29weXJpZ2h0IChDKSBS
ZXNlYXJjaCBJbiBNb3Rpb24gTGltaXRlZCAyMDEwLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICog
Q29weXJpZ2h0IChDKSAyMDA5IEplZmYgU2NoaWxsZXIgPGNvZGVkcmVhZEBnbWFpbC5jb20+Cisg
KiBDb3B5cmlnaHQgKEMpIDIwMTEgUmVuYXRhIEhvZG92YW4gPHJlbmlAd2Via2l0Lm9yZz4KKyAq
IENvcHlyaWdodCAoQykgMjAxMSBVbml2ZXJzaXR5IG9mIFN6ZWdlZAorICoKKyAqIFRoaXMgbGli
cmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAq
IG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVi
bGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0
aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0
aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0
ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFO
WSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJD
SEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhl
IEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMu
CisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJh
cnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNl
ZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNv
ZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3Is
CisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaW5jbHVkZSAiY29uZmln
LmgiCisKKyNpZiBFTkFCTEUoU1ZHKQorI2luY2x1ZGUgIlJlbmRlclNWR1NoYXBlLmgiCisKKyNp
bmNsdWRlICJGbG9hdFBvaW50LmgiCisjaW5jbHVkZSAiRmxvYXRRdWFkLmgiCisjaW5jbHVkZSAi
R3JhcGhpY3NDb250ZXh0LmgiCisjaW5jbHVkZSAiSGl0VGVzdFJlcXVlc3QuaCIKKyNpbmNsdWRl
ICJMYXlvdXRSZXBhaW50ZXIuaCIKKyNpbmNsdWRlICJQb2ludGVyRXZlbnRzSGl0UnVsZXMuaCIK
KyNpbmNsdWRlICJSZW5kZXJTVkdDb250YWluZXIuaCIKKyNpbmNsdWRlICJSZW5kZXJTVkdSZXNv
dXJjZU1hcmtlci5oIgorI2luY2x1ZGUgIlJlbmRlclNWR1Jlc291cmNlU29saWRDb2xvci5oIgor
I2luY2x1ZGUgIlNWR1BhdGhFbGVtZW50LmgiCisjaW5jbHVkZSAiU1ZHUmVuZGVyU3VwcG9ydC5o
IgorI2luY2x1ZGUgIlNWR1Jlc291cmNlcy5oIgorI2luY2x1ZGUgIlNWR1N0eWxlZFRyYW5zZm9y
bWFibGVFbGVtZW50LmgiCisjaW5jbHVkZSAiU1ZHVHJhbnNmb3JtTGlzdC5oIgorI2luY2x1ZGUg
IlNWR1VSSVJlZmVyZW5jZS5oIgorI2luY2x1ZGUgIlN0cm9rZVN0eWxlQXBwbGllci5oIgorI2lu
Y2x1ZGUgPHd0Zi9NYXRoRXh0cmFzLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworUmVuZGVy
U1ZHU2hhcGU6OlJlbmRlclNWR1NoYXBlKFNWR1N0eWxlZFRyYW5zZm9ybWFibGVFbGVtZW50KiBu
b2RlKQorICAgIDogUmVuZGVyU1ZHTW9kZWxPYmplY3Qobm9kZSkKKyAgICAsIG1fbmVlZHNCb3Vu
ZGFyaWVzVXBkYXRlKGZhbHNlKSAvLyBEZWZhdWx0IGlzIGZhbHNlLCB0aGUgY2FjaGVkIHJlY3Rz
IGFyZSBlbXB0eSBmcm9tIHRoZSBiZWdpbm5pbmcuCisgICAgLCBtX25lZWRzU2hhcGVVcGRhdGUo
dHJ1ZSkgLy8gRGVmYXVsdCBpcyB0cnVlLCBzbyB3ZSBncmFiIGEgUGF0aCBvYmplY3Qgb25jZSBm
cm9tIFNWR1N0eWxlZFRyYW5zZm9ybWFibGVFbGVtZW50LgorICAgICwgbV9uZWVkc1RyYW5zZm9y
bVVwZGF0ZSh0cnVlKSAvLyBEZWZhdWx0IGlzIHRydWUsIHNvIHdlIGdyYWIgYSBBZmZpbmVUcmFu
c2Zvcm0gb2JqZWN0IG9uY2UgZnJvbSBTVkdTdHlsZWRUcmFuc2Zvcm1hYmxlRWxlbWVudC4KKyAg
ICAsIG1fZmlsbEZhbGxiYWNrKGZhbHNlKQoreworfQorCitSZW5kZXJTVkdTaGFwZTo6UmVuZGVy
U1ZHU2hhcGUoU1ZHU3R5bGVkVHJhbnNmb3JtYWJsZUVsZW1lbnQqIG5vZGUsIFBhdGgqIHBhdGgs
IGJvb2wgaXNGaWxsRmFsbGJhY2spCisgICAgOiBSZW5kZXJTVkdNb2RlbE9iamVjdChub2RlKQor
ICAgICwgbV9wYXRoKGFkb3B0UHRyKHBhdGgpKQorICAgICwgbV9maWxsRmFsbGJhY2soaXNGaWxs
RmFsbGJhY2spCit7Cit9CisKK1JlbmRlclNWR1NoYXBlOjp+UmVuZGVyU1ZHU2hhcGUoKQorewor
fQorCit2b2lkIFJlbmRlclNWR1NoYXBlOjpjcmVhdGVTaGFwZSgpCit7CisgICAgQVNTRVJUKCFt
X3BhdGgpOworICAgIG1fcGF0aCA9IGFkb3B0UHRyKG5ldyBQYXRoKTsKKyAgICBBU1NFUlQoaXNF
bXB0eSgpKTsKKworICAgIFNWR1BhdGhFbGVtZW50KiBlbGVtZW50ID0gc3RhdGljX2Nhc3Q8U1ZH
UGF0aEVsZW1lbnQqPihub2RlKCkpOworICAgIGVsZW1lbnQtPnRvUGF0aERhdGEocGF0aCgpKTsK
K30KKworYm9vbCBSZW5kZXJTVkdTaGFwZTo6aXNFbXB0eSgpIGNvbnN0Cit7CisgICAgcmV0dXJu
IG1fcGF0aC0+aXNFbXB0eSgpOworfQorCit2b2lkIFJlbmRlclNWR1NoYXBlOjpmaWxsU2hhcGUo
R3JhcGhpY3NDb250ZXh0KiBjb250ZXh0KSBjb25zdAoreworICAgIGNvbnRleHQtPmZpbGxQYXRo
KHBhdGgoKSk7Cit9CisKK0Zsb2F0UmVjdCBSZW5kZXJTVkdTaGFwZTo6b2JqZWN0Qm91bmRpbmdC
b3goKSBjb25zdAoreworICAgIHJldHVybiBtX3BhdGgtPmJvdW5kaW5nUmVjdCgpOworfQorCitG
bG9hdFJlY3QgUmVuZGVyU1ZHU2hhcGU6OnN0cm9rZUJvdW5kaW5nQm94KCkgY29uc3QKK3sKKyAg
ICBCb3VuZGluZ1JlY3RTdHJva2VTdHlsZUFwcGxpZXIgc3Ryb2tlU3R5bGUodGhpcywgc3R5bGUo
KSk7CisgICAgcmV0dXJuIG1fcGF0aC0+c3Ryb2tlQm91bmRpbmdSZWN0KCZzdHJva2VTdHlsZSk7
Cit9CisKK3ZvaWQgUmVuZGVyU1ZHU2hhcGU6OnN0cm9rZVNoYXBlKEdyYXBoaWNzQ29udGV4dCog
Y29udGV4dCkgY29uc3QKK3sKKyAgICBjb250ZXh0LT5zdHJva2VQYXRoKHBhdGgoKSk7Cit9CisK
K2Jvb2wgUmVuZGVyU1ZHU2hhcGU6OnNoYXBlRGVwZW5kZW50U3Ryb2tlQ29udGFpbnMoY29uc3Qg
RmxvYXRQb2ludCYgcG9pbnQpIGNvbnN0Cit7CisgICAgQm91bmRpbmdSZWN0U3Ryb2tlU3R5bGVB
cHBsaWVyIGFwcGxpZXIodGhpcywgc3R5bGUoKSk7CisgICAgcmV0dXJuIG1fcGF0aC0+c3Ryb2tl
Q29udGFpbnMoJmFwcGxpZXIsIHBvaW50KTsKK30KKworYm9vbCBSZW5kZXJTVkdTaGFwZTo6c2hh
cGVEZXBlbmRlbnRGaWxsQ29udGFpbnMoY29uc3QgRmxvYXRQb2ludCYgcG9pbnQsIGNvbnN0IFdp
bmRSdWxlIGZpbGxSdWxlKSBjb25zdAoreworICAgIHJldHVybiBtX3BhdGgtPmNvbnRhaW5zKHBv
aW50LCBmaWxsUnVsZSk7Cit9CisKK2Jvb2wgUmVuZGVyU1ZHU2hhcGU6OmZpbGxDb250YWlucyhj
b25zdCBGbG9hdFBvaW50JiBwb2ludCwgYm9vbCByZXF1aXJlc0ZpbGwsIGNvbnN0IFdpbmRSdWxl
IGZpbGxSdWxlKQoreworICAgIGlmICghbV9maWxsQm91bmRpbmdCb3guY29udGFpbnMocG9pbnQp
KQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBDb2xvciBmYWxsYmFja0NvbG9yOworICAg
IGlmIChyZXF1aXJlc0ZpbGwgJiYgIVJlbmRlclNWR1Jlc291cmNlOjpmaWxsUGFpbnRpbmdSZXNv
dXJjZSh0aGlzLCBzdHlsZSgpLCBmYWxsYmFja0NvbG9yKSkKKyAgICAgICAgcmV0dXJuIGZhbHNl
OworCisgICAgcmV0dXJuIHNoYXBlRGVwZW5kZW50RmlsbENvbnRhaW5zKHBvaW50LCBmaWxsUnVs
ZSk7Cit9CisKK2Jvb2wgUmVuZGVyU1ZHU2hhcGU6OnN0cm9rZUNvbnRhaW5zKGNvbnN0IEZsb2F0
UG9pbnQmIHBvaW50LCBib29sIHJlcXVpcmVzU3Ryb2tlKQoreworICAgIGlmICghbV9zdHJva2VB
bmRNYXJrZXJCb3VuZGluZ0JveC5jb250YWlucyhwb2ludCkpCisgICAgICAgIHJldHVybiBmYWxz
ZTsKKworICAgIENvbG9yIGZhbGxiYWNrQ29sb3I7CisgICAgaWYgKHJlcXVpcmVzU3Ryb2tlICYm
ICFSZW5kZXJTVkdSZXNvdXJjZTo6c3Ryb2tlUGFpbnRpbmdSZXNvdXJjZSh0aGlzLCBzdHlsZSgp
LCBmYWxsYmFja0NvbG9yKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgaWYgKHNob3Vs
ZFN0cm9rZVplcm9MZW5ndGhTdWJwYXRoKCkpCisgICAgICAgIHJldHVybiB6ZXJvTGVuZ3RoU3Vi
cGF0aFJlY3QoKS5jb250YWlucyhwb2ludCk7CisKKyAgICBjb25zdCBTVkdSZW5kZXJTdHlsZSog
c3ZnU3R5bGUgPSBzdHlsZSgpLT5zdmdTdHlsZSgpOworICAgIGlmICghc3ZnU3R5bGUtPnN0cm9r
ZURhc2hBcnJheSgpLmlzRW1wdHkoKSB8fCBzdmdTdHlsZS0+c3Ryb2tlTWl0ZXJMaW1pdCgpICE9
IHN2Z1N0eWxlLT5pbml0aWFsU3Ryb2tlTWl0ZXJMaW1pdCgpCisgICAgICAgIHx8IHN2Z1N0eWxl
LT5qb2luU3R5bGUoKSAhPSBzdmdTdHlsZS0+aW5pdGlhbEpvaW5TdHlsZSgpIHx8IHN2Z1N0eWxl
LT5jYXBTdHlsZSgpICE9IHN2Z1N0eWxlLT5pbml0aWFsQ2FwU3R5bGUoKSB8fCBzdGF0aWNfY2Fz
dDxTVkdFbGVtZW50Kj4obm9kZSgpKS0+aXNTdHlsZWQoKSkgeworICAgICAgICBpZiAoIW1fcGF0
aCkKKyAgICAgICAgICAgIFJlbmRlclNWR1NoYXBlOjpjcmVhdGVTaGFwZSgpOworICAgICAgICBy
ZXR1cm4gUmVuZGVyU1ZHU2hhcGU6OnNoYXBlRGVwZW5kZW50U3Ryb2tlQ29udGFpbnMocG9pbnQp
OworICAgIH0KKyAgICByZXR1cm4gc2hhcGVEZXBlbmRlbnRTdHJva2VDb250YWlucyhwb2ludCk7
Cit9CisKK3ZvaWQgUmVuZGVyU1ZHU2hhcGU6OmxheW91dCgpCit7CisgICAgTGF5b3V0UmVwYWlu
dGVyIHJlcGFpbnRlcigqdGhpcywgY2hlY2tGb3JSZXBhaW50RHVyaW5nTGF5b3V0KCkgJiYgc2Vs
Zk5lZWRzTGF5b3V0KCkpOworICAgIFNWR1N0eWxlZFRyYW5zZm9ybWFibGVFbGVtZW50KiBlbGVt
ZW50ID0gc3RhdGljX2Nhc3Q8U1ZHU3R5bGVkVHJhbnNmb3JtYWJsZUVsZW1lbnQqPihub2RlKCkp
OworCisgICAgYm9vbCB1cGRhdGVDYWNoZWRCb3VuZGFyaWVzSW5QYXJlbnRzID0gZmFsc2U7CisK
KyAgICBib29sIG5lZWRzU2hhcGVVcGRhdGUgPSBtX25lZWRzU2hhcGVVcGRhdGU7CisgICAgaWYg
KG5lZWRzU2hhcGVVcGRhdGUpIHsKKyAgICAgICAgc2V0SXNQYWludGluZ0ZhbGxiYWNrKGZhbHNl
KTsKKyAgICAgICAgbV9wYXRoLmNsZWFyKCk7CisgICAgICAgIGNyZWF0ZVNoYXBlKCk7CisgICAg
ICAgIG1fbmVlZHNTaGFwZVVwZGF0ZSA9IGZhbHNlOworICAgICAgICB1cGRhdGVDYWNoZWRCb3Vu
ZGFyaWVzSW5QYXJlbnRzID0gdHJ1ZTsKKyAgICB9CisKKyAgICBpZiAobV9uZWVkc1RyYW5zZm9y
bVVwZGF0ZSkgeworICAgICAgICBtX2xvY2FsVHJhbnNmb3JtID0gZWxlbWVudC0+YW5pbWF0ZWRM
b2NhbFRyYW5zZm9ybSgpOworICAgICAgICBtX25lZWRzVHJhbnNmb3JtVXBkYXRlID0gZmFsc2U7
CisgICAgICAgIHVwZGF0ZUNhY2hlZEJvdW5kYXJpZXNJblBhcmVudHMgPSB0cnVlOworICAgIH0K
KworICAgIGlmIChtX25lZWRzQm91bmRhcmllc1VwZGF0ZSkgeworICAgICAgICBzZXRJc1BhaW50
aW5nRmFsbGJhY2soZmFsc2UpOworICAgICAgICBtX3BhdGguY2xlYXIoKTsKKyAgICAgICAgY3Jl
YXRlU2hhcGUoKTsKKyAgICAgICAgdXBkYXRlQ2FjaGVkQm91bmRhcmllc0luUGFyZW50cyA9IHRy
dWU7CisgICAgfQorCisgICAgLy8gSW52YWxpZGF0ZSBhbGwgcmVzb3VyY2VzIG9mIHRoaXMgY2xp
ZW50IGlmIG91ciBsYXlvdXQgY2hhbmdlZC4KKyAgICBpZiAobV9ldmVySGFkTGF5b3V0ICYmIHNl
bGZOZWVkc0xheW91dCgpKSB7CisgICAgICAgIFNWR1Jlc291cmNlc0NhY2hlOjpjbGllbnRMYXlv
dXRDaGFuZ2VkKHRoaXMpOworICAgICAgICBtX21hcmtlckxheW91dEluZm8uY2xlYXIoKTsKKyAg
ICB9CisKKyAgICAvLyBBdCB0aGlzIHBvaW50IExheW91dFJlcGFpbnRlciBhbHJlYWR5IGdyYWJi
ZWQgdGhlIG9sZCBib3VuZHMsCisgICAgLy8gcmVjYWxjdWxhdGUgdGhlbSBub3cgc28gcmVwYWlu
dEFmdGVyTGF5b3V0KCkgdXNlcyB0aGUgbmV3IGJvdW5kcy4KKyAgICBpZiAobmVlZHNTaGFwZVVw
ZGF0ZSB8fCBtX25lZWRzQm91bmRhcmllc1VwZGF0ZSkgeworICAgICAgICB1cGRhdGVDYWNoZWRC
b3VuZGFyaWVzKCk7CisgICAgICAgIG1fbmVlZHNCb3VuZGFyaWVzVXBkYXRlID0gZmFsc2U7Cisg
ICAgfQorCisgICAgLy8gSWYgb3VyIGJvdW5kcyBjaGFuZ2VkLCBub3RpZnkgdGhlIHBhcmVudHMu
CisgICAgaWYgKHVwZGF0ZUNhY2hlZEJvdW5kYXJpZXNJblBhcmVudHMpCisgICAgICAgIFJlbmRl
clNWR01vZGVsT2JqZWN0OjpzZXROZWVkc0JvdW5kYXJpZXNVcGRhdGUoKTsKKworICAgIHJlcGFp
bnRlci5yZXBhaW50QWZ0ZXJMYXlvdXQoKTsKKyAgICBzZXROZWVkc0xheW91dChmYWxzZSk7Cit9
CisKK2Jvb2wgUmVuZGVyU1ZHU2hhcGU6OnNob3VsZFN0cm9rZVplcm9MZW5ndGhTdWJwYXRoKCkg
Y29uc3QKK3sKKyAgICAvLyBTcGVjKDExLjQpOiBBbnkgemVybyBsZW5ndGggc3VicGF0aCBzaGFs
bCBub3QgYmUgc3Ryb2tlZCBpZiB0aGUg4oCYc3Ryb2tlLWxpbmVjYXDigJkgcHJvcGVydHkgaGFz
IGEgdmFsdWUgb2YgYnV0dAorICAgIC8vIGJ1dCBzaGFsbCBiZSBzdHJva2VkIGlmIHRoZSDigJhz
dHJva2UtbGluZWNhcOKAmSBwcm9wZXJ0eSBoYXMgYSB2YWx1ZSBvZiByb3VuZCBvciBzcXVhcmUK
KyAgICByZXR1cm4gc3R5bGUoKS0+c3ZnU3R5bGUoKS0+aGFzU3Ryb2tlKCkgJiYgc3R5bGUoKS0+
c3ZnU3R5bGUoKS0+Y2FwU3R5bGUoKSAhPSBCdXR0Q2FwICYmICFtX2ZpbGxCb3VuZGluZ0JveC53
aWR0aCgpICYmICFtX2ZpbGxCb3VuZGluZ0JveC5oZWlnaHQoKTsKK30KKworRmxvYXRSZWN0IFJl
bmRlclNWR1NoYXBlOjp6ZXJvTGVuZ3RoU3VicGF0aFJlY3QoKSBjb25zdAoreworICAgIGZsb2F0
IHN0cm9rZVdpZHRoID0gdGhpcy0+c3Ryb2tlV2lkdGgoKTsKKyAgICByZXR1cm4gRmxvYXRSZWN0
KG1fZmlsbEJvdW5kaW5nQm94LngoKSAtIHN0cm9rZVdpZHRoIC8gMiwgbV9maWxsQm91bmRpbmdC
b3gueSgpIC0gc3Ryb2tlV2lkdGggLyAyLCBzdHJva2VXaWR0aCwgc3Ryb2tlV2lkdGgpOworfQor
Cit2b2lkIFJlbmRlclNWR1NoYXBlOjpzZXR1cFNxdWFyZUNhcFBhdGgoUGF0aComIHVzZVBhdGgs
IGludCYgYXBwbHlNb2RlKQoreworICAgIC8vIFNwZWMoMTEuNCk6IEFueSB6ZXJvIGxlbmd0aCBz
dWJwYXRoIHNoYWxsIG5vdCBiZSBzdHJva2VkIGlmIHRoZSDigJhzdHJva2UtbGluZWNhcOKAmSBw
cm9wZXJ0eSBoYXMgYSB2YWx1ZSBvZiBidXR0CisgICAgLy8gYnV0IHNoYWxsIGJlIHN0cm9rZWQg
aWYgdGhlIOKAmHN0cm9rZS1saW5lY2Fw4oCZIHByb3BlcnR5IGhhcyBhIHZhbHVlIG9mIHJvdW5k
IG9yIHNxdWFyZQorICAgIERFRklORV9TVEFUSUNfTE9DQUwoUGF0aCwgdGVtcFBhdGgsICgpKTsK
KworICAgIGFwcGx5TW9kZSA9IEFwcGx5VG9GaWxsTW9kZTsKKyAgICB1c2VQYXRoID0gJnRlbXBQ
YXRoOworICAgIHVzZVBhdGgtPmNsZWFyKCk7CisgICAgaWYgKHN0eWxlKCktPnN2Z1N0eWxlKCkt
PmNhcFN0eWxlKCkgPT0gU3F1YXJlQ2FwKQorICAgICAgICB1c2VQYXRoLT5hZGRSZWN0KHplcm9M
ZW5ndGhTdWJwYXRoUmVjdCgpKTsKKyAgICBlbHNlCisgICAgICAgIHVzZVBhdGgtPmFkZEVsbGlw
c2UoemVyb0xlbmd0aFN1YnBhdGhSZWN0KCkpOworfQorCitib29sIFJlbmRlclNWR1NoYXBlOjpz
ZXR1cE5vblNjYWxpbmdTdHJva2VQYXRoKFBhdGgqJiB1c2VQYXRoLCBHcmFwaGljc0NvbnRleHRT
dGF0ZVNhdmVyJiBzdGF0ZVNhdmVyKQoreworICAgIERFRklORV9TVEFUSUNfTE9DQUwoUGF0aCwg
dGVtcFBhdGgsICgpKTsKKworICAgIFNWR1N0eWxlZFRyYW5zZm9ybWFibGVFbGVtZW50KiBlbGVt
ZW50ID0gc3RhdGljX2Nhc3Q8U1ZHU3R5bGVkVHJhbnNmb3JtYWJsZUVsZW1lbnQqPihub2RlKCkp
OworICAgIEFmZmluZVRyYW5zZm9ybSBub25TY2FsaW5nU3Ryb2tlVHJhbnNmb3JtID0gZWxlbWVu
dC0+Z2V0U2NyZWVuQ1RNKFNWR0xvY2F0YWJsZTo6RGlzYWxsb3dTdHlsZVVwZGF0ZSk7CisgICAg
aWYgKCFub25TY2FsaW5nU3Ryb2tlVHJhbnNmb3JtLmlzSW52ZXJ0aWJsZSgpKQorICAgICAgICBy
ZXR1cm4gZmFsc2U7CisKKyAgICB0ZW1wUGF0aCA9ICptX3BhdGg7CisgICAgdXNlUGF0aCA9ICZ0
ZW1wUGF0aDsKKyAgICB0ZW1wUGF0aC50cmFuc2Zvcm0obm9uU2NhbGluZ1N0cm9rZVRyYW5zZm9y
bSk7CisKKyAgICBzdGF0ZVNhdmVyLnNhdmUoKTsKKyAgICBzdGF0ZVNhdmVyLmNvbnRleHQoKS0+
Y29uY2F0Q1RNKG5vblNjYWxpbmdTdHJva2VUcmFuc2Zvcm0uaW52ZXJzZSgpKTsKKyAgICByZXR1
cm4gdHJ1ZTsKK30KKwordm9pZCBSZW5kZXJTVkdTaGFwZTo6ZmlsbEFuZFN0cm9rZVBhdGgoR3Jh
cGhpY3NDb250ZXh0KiBjb250ZXh0KQoreworICAgIFJlbmRlclN0eWxlKiBzdHlsZSA9IHRoaXMt
PnN0eWxlKCk7CisKKyAgICBDb2xvciBmYWxsYmFja0NvbG9yOworICAgIGlmIChSZW5kZXJTVkdS
ZXNvdXJjZSogZmlsbFBhaW50aW5nUmVzb3VyY2UgPSBSZW5kZXJTVkdSZXNvdXJjZTo6ZmlsbFBh
aW50aW5nUmVzb3VyY2UodGhpcywgc3R5bGUsIGZhbGxiYWNrQ29sb3IpKSB7CisgICAgICAgIGlm
IChmaWxsUGFpbnRpbmdSZXNvdXJjZS0+YXBwbHlSZXNvdXJjZSh0aGlzLCBzdHlsZSwgY29udGV4
dCwgQXBwbHlUb0ZpbGxNb2RlKSkKKyAgICAgICAgICAgIGZpbGxQYWludGluZ1Jlc291cmNlLT5w
b3N0QXBwbHlSZXNvdXJjZSh0aGlzLCBjb250ZXh0LCBBcHBseVRvRmlsbE1vZGUsIDAsIHRoaXMp
OworICAgICAgICBlbHNlIGlmIChmYWxsYmFja0NvbG9yLmlzVmFsaWQoKSkgeworICAgICAgICAg
ICAgUmVuZGVyU1ZHUmVzb3VyY2VTb2xpZENvbG9yKiBmYWxsYmFja1Jlc291cmNlID0gUmVuZGVy
U1ZHUmVzb3VyY2U6OnNoYXJlZFNvbGlkUGFpbnRpbmdSZXNvdXJjZSgpOworICAgICAgICAgICAg
ZmFsbGJhY2tSZXNvdXJjZS0+c2V0Q29sb3IoZmFsbGJhY2tDb2xvcik7CisgICAgICAgICAgICBp
ZiAoZmFsbGJhY2tSZXNvdXJjZS0+YXBwbHlSZXNvdXJjZSh0aGlzLCBzdHlsZSwgY29udGV4dCwg
QXBwbHlUb0ZpbGxNb2RlKSkKKyAgICAgICAgICAgICAgICBmYWxsYmFja1Jlc291cmNlLT5wb3N0
QXBwbHlSZXNvdXJjZSh0aGlzLCBjb250ZXh0LCBBcHBseVRvRmlsbE1vZGUsIDAsIHRoaXMpOwor
ICAgICAgICB9CisgICAgfQorCisgICAgZmFsbGJhY2tDb2xvciA9IENvbG9yKCk7CisgICAgUmVu
ZGVyU1ZHUmVzb3VyY2UqIHN0cm9rZVBhaW50aW5nUmVzb3VyY2UgPSBSZW5kZXJTVkdSZXNvdXJj
ZTo6c3Ryb2tlUGFpbnRpbmdSZXNvdXJjZSh0aGlzLCBzdHlsZSwgZmFsbGJhY2tDb2xvcik7Cisg
ICAgaWYgKCFzdHJva2VQYWludGluZ1Jlc291cmNlKQorICAgICAgICByZXR1cm47CisKKyAgICBQ
YXRoKiB1c2VQYXRoID0gbV9wYXRoLmdldCgpOworICAgIGludCBhcHBseU1vZGUgPSBBcHBseVRv
U3Ryb2tlTW9kZTsKKworICAgIGJvb2wgbm9uU2NhbGluZ1N0cm9rZSA9IHN0eWxlLT5zdmdTdHls
ZSgpLT52ZWN0b3JFZmZlY3QoKSA9PSBWRV9OT05fU0NBTElOR19TVFJPS0U7CisgICAgT3duUHRy
PFBhdGg+IHNhdmVQYXRoOworCisgICAgR3JhcGhpY3NDb250ZXh0U3RhdGVTYXZlciBzdGF0ZVNh
dmVyKCpjb250ZXh0LCBmYWxzZSk7CisKKyAgICAvLyBTcGVjKDExLjQpOiBBbnkgemVybyBsZW5n
dGggc3VicGF0aCBzaGFsbCBub3QgYmUgc3Ryb2tlZCBpZiB0aGUg4oCYc3Ryb2tlLWxpbmVjYXDi
gJkgcHJvcGVydHkgaGFzIGEgdmFsdWUgb2YgYnV0dAorICAgIC8vIGJ1dCBzaGFsbCBiZSBzdHJv
a2VkIGlmIHRoZSDigJhzdHJva2UtbGluZWNhcOKAmSBwcm9wZXJ0eSBoYXMgYSB2YWx1ZSBvZiBy
b3VuZCBvciBzcXVhcmUKKyAgICAvLyBGSVhNRTogdGhpcyBkb2VzIG5vdCB3b3JrIGZvciB6ZXJv
LWxlbmd0aCBzdWJwYXRocywgb25seSB3aGVuIHRvdGFsIHBhdGggaXMgemVyby1sZW5ndGgKKyAg
ICBpZiAoc2hvdWxkU3Ryb2tlWmVyb0xlbmd0aFN1YnBhdGgoKSkgeworICAgICAgICBpZiAoIW1f
cGF0aCkgeworICAgICAgICAgICAgUmVuZGVyU1ZHU2hhcGU6OmNyZWF0ZVNoYXBlKCk7CisgICAg
ICAgICAgICBzZXRJc1BhaW50aW5nRmFsbGJhY2sodHJ1ZSk7CisgICAgICAgICAgICB1c2VQYXRo
ID0gbV9wYXRoLmdldCgpOworICAgICAgICB9CisgICAgICAgIHNldHVwU3F1YXJlQ2FwUGF0aCh1
c2VQYXRoLCBhcHBseU1vZGUpOworICAgIH0gZWxzZSBpZiAobm9uU2NhbGluZ1N0cm9rZSkgewor
ICAgICAgICBpZiAoIXNldHVwTm9uU2NhbGluZ1N0cm9rZVBhdGgodXNlUGF0aCwgc3RhdGVTYXZl
cikpCisgICAgICAgICAgICByZXR1cm47CisgICAgfQorICAgIGlmIChzdHJva2VQYWludGluZ1Jl
c291cmNlLT5hcHBseVJlc291cmNlKHRoaXMsIHN0eWxlLCBjb250ZXh0LCBhcHBseU1vZGUpKSB7
CisgICAgICAgIHN0cm9rZVBhaW50aW5nUmVzb3VyY2UtPnBvc3RBcHBseVJlc291cmNlKHRoaXMs
IGNvbnRleHQsIGFwcGx5TW9kZSwgdXNlUGF0aCwgdGhpcyk7CisgICAgICAgIGlmIChzYXZlUGF0
aCkKKyAgICAgICAgICAgIG1fcGF0aCA9IHNhdmVQYXRoLnJlbGVhc2UoKTsKKyAgICAgICAgcmV0
dXJuOworICAgIH0KKyAgICBpZiAoIWZhbGxiYWNrQ29sb3IuaXNWYWxpZCgpKSB7CisgICAgICAg
IGlmIChzYXZlUGF0aCkKKyAgICAgICAgICAgIG1fcGF0aCA9IHNhdmVQYXRoLnJlbGVhc2UoKTsK
KyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBSZW5kZXJTVkdSZXNvdXJjZVNvbGlkQ29sb3Iq
IGZhbGxiYWNrUmVzb3VyY2UgPSBSZW5kZXJTVkdSZXNvdXJjZTo6c2hhcmVkU29saWRQYWludGlu
Z1Jlc291cmNlKCk7CisgICAgZmFsbGJhY2tSZXNvdXJjZS0+c2V0Q29sb3IoZmFsbGJhY2tDb2xv
cik7CisgICAgaWYgKGZhbGxiYWNrUmVzb3VyY2UtPmFwcGx5UmVzb3VyY2UodGhpcywgc3R5bGUs
IGNvbnRleHQsIGFwcGx5TW9kZSkpCisgICAgICAgIGZhbGxiYWNrUmVzb3VyY2UtPnBvc3RBcHBs
eVJlc291cmNlKHRoaXMsIGNvbnRleHQsIGFwcGx5TW9kZSwgdXNlUGF0aCwgdGhpcyk7CisgICAg
aWYgKHNhdmVQYXRoKQorICAgICAgICBtX3BhdGggPSBzYXZlUGF0aC5yZWxlYXNlKCk7Cit9CisK
K3ZvaWQgUmVuZGVyU1ZHU2hhcGU6OnBhaW50KFBhaW50SW5mbyYgcGFpbnRJbmZvLCBjb25zdCBJ
bnRQb2ludCYpCit7CisgICAgaWYgKHBhaW50SW5mby5jb250ZXh0LT5wYWludGluZ0Rpc2FibGVk
KCkgfHwgc3R5bGUoKS0+dmlzaWJpbGl0eSgpID09IEhJRERFTiB8fCBpc0VtcHR5KCkpCisgICAg
ICAgIHJldHVybjsKKyAgICBGbG9hdFJlY3QgYm91bmRpbmdCb3ggPSByZXBhaW50UmVjdEluTG9j
YWxDb29yZGluYXRlcygpOworICAgIGlmICghU1ZHUmVuZGVyU3VwcG9ydDo6cGFpbnRJbmZvSW50
ZXJzZWN0c1JlcGFpbnRSZWN0KGJvdW5kaW5nQm94LCBtX2xvY2FsVHJhbnNmb3JtLCBwYWludElu
Zm8pKQorICAgICAgICByZXR1cm47CisgICAgUGFpbnRJbmZvIGNoaWxkUGFpbnRJbmZvKHBhaW50
SW5mbyk7CisgICAgYm9vbCBkcmF3c091dGxpbmUgPSBzdHlsZSgpLT5vdXRsaW5lV2lkdGgoKSAm
JiAoY2hpbGRQYWludEluZm8ucGhhc2UgPT0gUGFpbnRQaGFzZU91dGxpbmUgfHwgY2hpbGRQYWlu
dEluZm8ucGhhc2UgPT0gUGFpbnRQaGFzZVNlbGZPdXRsaW5lKTsKKyAgICBpZiAoZHJhd3NPdXRs
aW5lIHx8IGNoaWxkUGFpbnRJbmZvLnBoYXNlID09IFBhaW50UGhhc2VGb3JlZ3JvdW5kKSB7Cisg
ICAgICAgIEdyYXBoaWNzQ29udGV4dFN0YXRlU2F2ZXIgc3RhdGVTYXZlcigqY2hpbGRQYWludElu
Zm8uY29udGV4dCk7CisgICAgICAgIGNoaWxkUGFpbnRJbmZvLmFwcGx5VHJhbnNmb3JtKG1fbG9j
YWxUcmFuc2Zvcm0pOworCisgICAgICAgIGlmIChjaGlsZFBhaW50SW5mby5waGFzZSA9PSBQYWlu
dFBoYXNlRm9yZWdyb3VuZCkgeworICAgICAgICAgICAgUGFpbnRJbmZvIHNhdmVkSW5mbyhjaGls
ZFBhaW50SW5mbyk7CisKKyAgICAgICAgICAgIGlmIChTVkdSZW5kZXJTdXBwb3J0OjpwcmVwYXJl
VG9SZW5kZXJTVkdDb250ZW50KHRoaXMsIGNoaWxkUGFpbnRJbmZvKSkgeworICAgICAgICAgICAg
ICAgIGNvbnN0IFNWR1JlbmRlclN0eWxlKiBzdmdTdHlsZSA9IHN0eWxlKCktPnN2Z1N0eWxlKCk7
CisgICAgICAgICAgICAgICAgaWYgKHN2Z1N0eWxlLT5zaGFwZVJlbmRlcmluZygpID09IFNSX0NS
SVNQRURHRVMpCisgICAgICAgICAgICAgICAgICAgIGNoaWxkUGFpbnRJbmZvLmNvbnRleHQtPnNl
dFNob3VsZEFudGlhbGlhcyhmYWxzZSk7CisKKyAgICAgICAgICAgICAgICBmaWxsQW5kU3Ryb2tl
UGF0aChjaGlsZFBhaW50SW5mby5jb250ZXh0KTsKKworICAgICAgICAgICAgICAgIGlmIChzdmdT
dHlsZS0+aGFzTWFya2VycygpKQorICAgICAgICAgICAgICAgICAgICBtX21hcmtlckxheW91dElu
Zm8uZHJhd01hcmtlcnMoY2hpbGRQYWludEluZm8pOworICAgICAgICAgICAgfQorCisgICAgICAg
ICAgICBTVkdSZW5kZXJTdXBwb3J0OjpmaW5pc2hSZW5kZXJTVkdDb250ZW50KHRoaXMsIGNoaWxk
UGFpbnRJbmZvLCBzYXZlZEluZm8uY29udGV4dCk7CisgICAgICAgIH0KKworICAgICAgICBpZiAo
ZHJhd3NPdXRsaW5lKQorICAgICAgICAgICAgcGFpbnRPdXRsaW5lKGNoaWxkUGFpbnRJbmZvLmNv
bnRleHQsIEludFJlY3QoYm91bmRpbmdCb3gpKTsKKyAgICB9Cit9CisKKy8vIFRoaXMgbWV0aG9k
IGlzIGNhbGxlZCBmcm9tIGluc2lkZSBwYWludE91dGxpbmUoKSBzaW5jZSB3ZSBjYWxsIHBhaW50
T3V0bGluZSgpCisvLyB3aGlsZSB0cmFuc2Zvcm1lZCB0byBvdXIgY29vcmQgc3lzdGVtLCByZXR1
cm4gbG9jYWwgY29vcmRzCit2b2lkIFJlbmRlclNWR1NoYXBlOjphZGRGb2N1c1JpbmdSZWN0cyhW
ZWN0b3I8TGF5b3V0UmVjdD4mIHJlY3RzLCBjb25zdCBMYXlvdXRQb2ludCYpCit7CisgICAgTGF5
b3V0UmVjdCByZWN0ID0gZW5jbG9zaW5nTGF5b3V0UmVjdChyZXBhaW50UmVjdEluTG9jYWxDb29y
ZGluYXRlcygpKTsKKyAgICBpZiAoIXJlY3QuaXNFbXB0eSgpKQorICAgICAgICByZWN0cy5hcHBl
bmQocmVjdCk7Cit9CisKK2Jvb2wgUmVuZGVyU1ZHU2hhcGU6Om5vZGVBdEZsb2F0UG9pbnQoY29u
c3QgSGl0VGVzdFJlcXVlc3QmIHJlcXVlc3QsIEhpdFRlc3RSZXN1bHQmIHJlc3VsdCwgY29uc3Qg
RmxvYXRQb2ludCYgcG9pbnRJblBhcmVudCwgSGl0VGVzdEFjdGlvbiBoaXRUZXN0QWN0aW9uKQor
eworICAgIC8vIFdlIG9ubHkgZHJhdyBpbiB0aGUgZm9yZ3JvdW5kIHBoYXNlLCBzbyB3ZSBvbmx5
IGhpdC10ZXN0IHRoZW4uCisgICAgaWYgKGhpdFRlc3RBY3Rpb24gIT0gSGl0VGVzdEZvcmVncm91
bmQpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIEZsb2F0UG9pbnQgbG9jYWxQb2ludCA9
IG1fbG9jYWxUcmFuc2Zvcm0uaW52ZXJzZSgpLm1hcFBvaW50KHBvaW50SW5QYXJlbnQpOworCisg
ICAgaWYgKCFTVkdSZW5kZXJTdXBwb3J0Ojpwb2ludEluQ2xpcHBpbmdBcmVhKHRoaXMsIGxvY2Fs
UG9pbnQpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBQb2ludGVyRXZlbnRzSGl0UnVs
ZXMgaGl0UnVsZXMoUG9pbnRlckV2ZW50c0hpdFJ1bGVzOjpTVkdfUEFUSF9ISVRURVNUSU5HLCBy
ZXF1ZXN0LCBzdHlsZSgpLT5wb2ludGVyRXZlbnRzKCkpOworICAgIGJvb2wgaXNWaXNpYmxlID0g
KHN0eWxlKCktPnZpc2liaWxpdHkoKSA9PSBWSVNJQkxFKTsKKyAgICBpZiAoaXNWaXNpYmxlIHx8
ICFoaXRSdWxlcy5yZXF1aXJlVmlzaWJsZSkgeworICAgICAgICBjb25zdCBTVkdSZW5kZXJTdHls
ZSogc3ZnU3R5bGUgPSBzdHlsZSgpLT5zdmdTdHlsZSgpOworICAgICAgICBXaW5kUnVsZSBmaWxs
UnVsZSA9IHN2Z1N0eWxlLT5maWxsUnVsZSgpOworICAgICAgICBpZiAocmVxdWVzdC5zdmdDbGlw
Q29udGVudCgpKQorICAgICAgICAgICAgZmlsbFJ1bGUgPSBzdmdTdHlsZS0+Y2xpcFJ1bGUoKTsK
KyAgICAgICAgaWYgKChoaXRSdWxlcy5jYW5IaXRTdHJva2UgJiYgKHN2Z1N0eWxlLT5oYXNTdHJv
a2UoKSB8fCAhaGl0UnVsZXMucmVxdWlyZVN0cm9rZSkgJiYgc3Ryb2tlQ29udGFpbnMobG9jYWxQ
b2ludCwgaGl0UnVsZXMucmVxdWlyZVN0cm9rZSkpCisgICAgICAgICAgICB8fCAoaGl0UnVsZXMu
Y2FuSGl0RmlsbCAmJiAoc3ZnU3R5bGUtPmhhc0ZpbGwoKSB8fCAhaGl0UnVsZXMucmVxdWlyZUZp
bGwpICYmIGZpbGxDb250YWlucyhsb2NhbFBvaW50LCBoaXRSdWxlcy5yZXF1aXJlRmlsbCwgZmls
bFJ1bGUpKSkgeworICAgICAgICAgICAgdXBkYXRlSGl0VGVzdFJlc3VsdChyZXN1bHQsIHJvdW5k
ZWRMYXlvdXRQb2ludChsb2NhbFBvaW50KSk7CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAg
ICAgICAgfQorICAgIH0KKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK0Zsb2F0UmVjdCBSZW5kZXJT
VkdTaGFwZTo6Y2FsY3VsYXRlTWFya2VyQm91bmRzSWZOZWVkZWQoKQoreworICAgIFNWR0VsZW1l
bnQqIHN2Z0VsZW1lbnQgPSBzdGF0aWNfY2FzdDxTVkdFbGVtZW50Kj4obm9kZSgpKTsKKyAgICBB
U1NFUlQoc3ZnRWxlbWVudCAmJiBzdmdFbGVtZW50LT5kb2N1bWVudCgpKTsKKyAgICBpZiAoIXN2
Z0VsZW1lbnQtPmlzU3R5bGVkKCkpCisgICAgICAgIHJldHVybiBGbG9hdFJlY3QoKTsKKworICAg
IFNWR1N0eWxlZEVsZW1lbnQqIHN0eWxlZEVsZW1lbnQgPSBzdGF0aWNfY2FzdDxTVkdTdHlsZWRF
bGVtZW50Kj4oc3ZnRWxlbWVudCk7CisgICAgaWYgKCFzdHlsZWRFbGVtZW50LT5zdXBwb3J0c01h
cmtlcnMoKSkKKyAgICAgICAgcmV0dXJuIEZsb2F0UmVjdCgpOworCisgICAgQVNTRVJUKHN0eWxl
KCktPnN2Z1N0eWxlKCktPmhhc01hcmtlcnMoKSk7CisKKyAgICBTVkdSZXNvdXJjZXMqIHJlc291
cmNlcyA9IFNWR1Jlc291cmNlc0NhY2hlOjpjYWNoZWRSZXNvdXJjZXNGb3JSZW5kZXJPYmplY3Qo
dGhpcyk7CisgICAgaWYgKCFyZXNvdXJjZXMpCisgICAgICAgIHJldHVybiBGbG9hdFJlY3QoKTsK
KworICAgIFJlbmRlclNWR1Jlc291cmNlTWFya2VyKiBtYXJrZXJTdGFydCA9IHJlc291cmNlcy0+
bWFya2VyU3RhcnQoKTsKKyAgICBSZW5kZXJTVkdSZXNvdXJjZU1hcmtlciogbWFya2VyTWlkID0g
cmVzb3VyY2VzLT5tYXJrZXJNaWQoKTsKKyAgICBSZW5kZXJTVkdSZXNvdXJjZU1hcmtlciogbWFy
a2VyRW5kID0gcmVzb3VyY2VzLT5tYXJrZXJFbmQoKTsKKyAgICBpZiAoIW1hcmtlclN0YXJ0ICYm
ICFtYXJrZXJNaWQgJiYgIW1hcmtlckVuZCkKKyAgICAgICAgcmV0dXJuIEZsb2F0UmVjdCgpOwor
CisgICAgcmV0dXJuIG1fbWFya2VyTGF5b3V0SW5mby5jYWxjdWxhdGVCb3VuZGFyaWVzKG1hcmtl
clN0YXJ0LCBtYXJrZXJNaWQsIG1hcmtlckVuZCwgc3Ryb2tlV2lkdGgoKSwgcGF0aCgpKTsKK30K
Kwordm9pZCBSZW5kZXJTVkdTaGFwZTo6dXBkYXRlQ2FjaGVkQm91bmRhcmllcygpCit7CisgICAg
aWYgKGlzRW1wdHkoKSkgeworICAgICAgICBtX2ZpbGxCb3VuZGluZ0JveCA9IEZsb2F0UmVjdCgp
OworICAgICAgICBtX3N0cm9rZUFuZE1hcmtlckJvdW5kaW5nQm94ID0gRmxvYXRSZWN0KCk7Cisg
ICAgICAgIG1fcmVwYWludEJvdW5kaW5nQm94ID0gRmxvYXRSZWN0KCk7CisgICAgICAgIHJldHVy
bjsKKyAgICB9CisKKyAgICAvLyBDYWNoZSBfdW5jbGlwcGVkXyBmaWxsIGJvdW5kaW5nIGJveCwg
dXNlZCBmb3IgY2FsY3VsYXRpb25zIGluIHJlc291cmNlcworICAgIG1fZmlsbEJvdW5kaW5nQm94
ID0gb2JqZWN0Qm91bmRpbmdCb3goKTsKKworICAgIC8vIFNwZWMoMTEuNCk6IEFueSB6ZXJvIGxl
bmd0aCBzdWJwYXRoIHNoYWxsIG5vdCBiZSBzdHJva2VkIGlmIHRoZSDigJhzdHJva2UtbGluZWNh
cOKAmSBwcm9wZXJ0eSBoYXMgYSB2YWx1ZSBvZiBidXR0CisgICAgLy8gYnV0IHNoYWxsIGJlIHN0
cm9rZWQgaWYgdGhlIOKAmHN0cm9rZS1saW5lY2Fw4oCZIHByb3BlcnR5IGhhcyBhIHZhbHVlIG9m
IHJvdW5kIG9yIHNxdWFyZQorICAgIGlmIChzaG91bGRTdHJva2VaZXJvTGVuZ3RoU3VicGF0aCgp
KSB7CisgICAgICAgIG1fc3Ryb2tlQW5kTWFya2VyQm91bmRpbmdCb3ggPSB6ZXJvTGVuZ3RoU3Vi
cGF0aFJlY3QoKTsKKyAgICAgICAgLy8gQ2FjaGUgc21hbGxlc3QgcG9zc2libGUgcmVwYWludCBy
ZWN0YW5nbGUKKyAgICAgICAgbV9yZXBhaW50Qm91bmRpbmdCb3ggPSBtX3N0cm9rZUFuZE1hcmtl
ckJvdW5kaW5nQm94OworICAgICAgICBTVkdSZW5kZXJTdXBwb3J0OjppbnRlcnNlY3RSZXBhaW50
UmVjdFdpdGhSZXNvdXJjZXModGhpcywgbV9yZXBhaW50Qm91bmRpbmdCb3gpOworICAgICAgICBy
ZXR1cm47CisgICAgfQorICAgIC8vIENhY2hlIF91bmNsaXBwZWRfIHN0cm9rZSBib3VuZGluZyBi
b3gsIHVzZWQgZm9yIGNhbGN1bGF0aW9ucyBpbiByZXNvdXJjZXMgKGluY2x1ZGVzIG1hcmtlciBi
b3VuZGFyaWVzKQorICAgIG1fc3Ryb2tlQW5kTWFya2VyQm91bmRpbmdCb3ggPSBtX2ZpbGxCb3Vu
ZGluZ0JveDsKKworICAgIGNvbnN0IFNWR1JlbmRlclN0eWxlKiBzdmdTdHlsZSA9IHN0eWxlKCkt
PnN2Z1N0eWxlKCk7CisgICAgaWYgKHN2Z1N0eWxlLT5oYXNTdHJva2UoKSkKKyAgICAgICAgbV9z
dHJva2VBbmRNYXJrZXJCb3VuZGluZ0JveC51bml0ZShzdHJva2VCb3VuZGluZ0JveCgpKTsKKwor
ICAgIGluZmxhdGVXaXRoTWFya2VyQm91bmRzKCk7CisKKyAgICAvLyBDYWNoZSBzbWFsbGVzdCBw
b3NzaWJsZSByZXBhaW50IHJlY3RhbmdsZQorICAgIG1fcmVwYWludEJvdW5kaW5nQm94ID0gbV9z
dHJva2VBbmRNYXJrZXJCb3VuZGluZ0JveDsKKyAgICBTVkdSZW5kZXJTdXBwb3J0OjppbnRlcnNl
Y3RSZXBhaW50UmVjdFdpdGhSZXNvdXJjZXModGhpcywgbV9yZXBhaW50Qm91bmRpbmdCb3gpOwor
fQorCitmbG9hdCBSZW5kZXJTVkdTaGFwZTo6c3Ryb2tlV2lkdGgoKSBjb25zdAoreworICAgIFNW
R0VsZW1lbnQqIHN2Z0VsZW1lbnQgPSBzdGF0aWNfY2FzdDxTVkdFbGVtZW50Kj4obm9kZSgpKTsK
KyAgICByZXR1cm4gc3R5bGUoKS0+c3ZnU3R5bGUoKS0+c3Ryb2tlV2lkdGgoKS52YWx1ZShzdmdF
bGVtZW50KTsKK30KKworfQorCisjZW5kaWYgLy8gRU5BQkxFKFNWRykKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHU2hhcGUuaCBiL1NvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHU2hhcGUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwMDAwMDAwLi5jYWE4Y2MyCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdTaGFwZS5oCkBAIC0wLDAgKzEsMTYxIEBACisvKgorICog
Q29weXJpZ2h0IChDKSAyMDA0LCAyMDA1LCAyMDA3IE5pa29sYXMgWmltbWVybWFubiA8emltbWVy
bWFubkBrZGUub3JnPgorICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1IFJvYiBCdWlzIDxidWlz
QGtkZS5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDUgRXJpYyBTZWlkZWwgPGVyaWNAd2Via2l0
Lm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAwNiBBcHBsZSBDb21wdXRlciwgSW5jCisgKiBDb3B5
cmlnaHQgKEMpIDIwMDkgR29vZ2xlLCBJbmMuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgUmVuYXRh
IEhvZG92YW4gPHJlbmlAd2Via2l0Lm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAxMSBVbml2ZXJz
aXR5IG9mIFN6ZWdlZAorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3Ug
Y2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMg
b2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hl
ZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBv
ZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAq
CisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxs
IGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRo
ZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1
YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJl
Y2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQor
ICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElm
IG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUx
IEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEs
IFVTQS4KKyAqLworCisjaWZuZGVmIFJlbmRlclNWR1NoYXBlX2gKKyNkZWZpbmUgUmVuZGVyU1ZH
U2hhcGVfaAorCisjaWYgRU5BQkxFKFNWRykKKyNpbmNsdWRlICJBZmZpbmVUcmFuc2Zvcm0uaCIK
KyNpbmNsdWRlICJGbG9hdFJlY3QuaCIKKyNpbmNsdWRlICJSZW5kZXJTVkdNb2RlbE9iamVjdC5o
IgorI2luY2x1ZGUgIlNWR01hcmtlckxheW91dEluZm8uaCIKKyNpbmNsdWRlICJTdHJva2VTdHls
ZUFwcGxpZXIuaCIKKyNpbmNsdWRlIDx3dGYvT3duUHRyLmg+CisKK25hbWVzcGFjZSBXZWJDb3Jl
IHsKKworY2xhc3MgRmxvYXRQb2ludDsKK2NsYXNzIEdyYXBoaWNzQ29udGV4dFN0YXRlU2F2ZXI7
CitjbGFzcyBSZW5kZXJTVkdDb250YWluZXI7CitjbGFzcyBSZW5kZXJTVkdQYXRoOworY2xhc3Mg
U1ZHU3R5bGVkVHJhbnNmb3JtYWJsZUVsZW1lbnQ7CisKK2NsYXNzIEJvdW5kaW5nUmVjdFN0cm9r
ZVN0eWxlQXBwbGllciA6IHB1YmxpYyBTdHJva2VTdHlsZUFwcGxpZXIgeworcHVibGljOgorICAg
IEJvdW5kaW5nUmVjdFN0cm9rZVN0eWxlQXBwbGllcihjb25zdCBSZW5kZXJPYmplY3QqIG9iamVj
dCwgUmVuZGVyU3R5bGUqIHN0eWxlKQorICAgICAgICA6IG1fb2JqZWN0KG9iamVjdCkKKyAgICAg
ICAgLCBtX3N0eWxlKHN0eWxlKQorICAgIHsKKyAgICAgICAgQVNTRVJUKHN0eWxlKTsKKyAgICAg
ICAgQVNTRVJUKG9iamVjdCk7CisgICAgfQorCisgICAgdm9pZCBzdHJva2VTdHlsZShHcmFwaGlj
c0NvbnRleHQqIGNvbnRleHQpCisgICAgeworICAgICAgICBTVkdSZW5kZXJTdXBwb3J0OjphcHBs
eVN0cm9rZVN0eWxlVG9Db250ZXh0KGNvbnRleHQsIG1fc3R5bGUsIG1fb2JqZWN0KTsKKyAgICB9
CisKK3ByaXZhdGU6CisgICAgY29uc3QgUmVuZGVyT2JqZWN0KiBtX29iamVjdDsKKyAgICBSZW5k
ZXJTdHlsZSogbV9zdHlsZTsKK307CisKK2NsYXNzIFJlbmRlclNWR1NoYXBlIDogcHVibGljIFJl
bmRlclNWR01vZGVsT2JqZWN0IHsKK3B1YmxpYzoKKyAgICBleHBsaWNpdCBSZW5kZXJTVkdTaGFw
ZShTVkdTdHlsZWRUcmFuc2Zvcm1hYmxlRWxlbWVudCopOworICAgIFJlbmRlclNWR1NoYXBlKFNW
R1N0eWxlZFRyYW5zZm9ybWFibGVFbGVtZW50KiwgUGF0aCosIGJvb2wpOworICAgIHZpcnR1YWwg
flJlbmRlclNWR1NoYXBlKCk7CisKKyAgICB2b2lkIHNldE5lZWRzU2hhcGVVcGRhdGUoKSB7IG1f
bmVlZHNTaGFwZVVwZGF0ZSA9IHRydWU7IH0KKyAgICB2aXJ0dWFsIHZvaWQgc2V0TmVlZHNCb3Vu
ZGFyaWVzVXBkYXRlKCkgeyBtX25lZWRzQm91bmRhcmllc1VwZGF0ZSA9IHRydWU7IH0KKyAgICB2
aXJ0dWFsIHZvaWQgc2V0TmVlZHNUcmFuc2Zvcm1VcGRhdGUoKSB7IG1fbmVlZHNUcmFuc2Zvcm1V
cGRhdGUgPSB0cnVlOyB9CisgICAgdmlydHVhbCB2b2lkIGZpbGxTaGFwZShHcmFwaGljc0NvbnRl
eHQqKSBjb25zdDsKKyAgICB2aXJ0dWFsIHZvaWQgc3Ryb2tlU2hhcGUoR3JhcGhpY3NDb250ZXh0
KikgY29uc3Q7CisgICAgYm9vbCBpc1BhaW50aW5nRmFsbGJhY2soKSBjb25zdCB7IHJldHVybiBt
X2ZpbGxGYWxsYmFjazsgfQorCisgICAgUGF0aCYgcGF0aCgpIGNvbnN0CisgICAgeworICAgICAg
ICBBU1NFUlQobV9wYXRoKTsKKyAgICAgICAgcmV0dXJuICptX3BhdGg7CisgICAgfQorCitwcm90
ZWN0ZWQ6CisgICAgdmlydHVhbCB2b2lkIGNyZWF0ZVNoYXBlKCk7CisgICAgdmlydHVhbCBib29s
IGlzRW1wdHkoKSBjb25zdDsKKyAgICB2aXJ0dWFsIEZsb2F0UmVjdCBvYmplY3RCb3VuZGluZ0Jv
eCgpIGNvbnN0OworICAgIHZpcnR1YWwgRmxvYXRSZWN0IHN0cm9rZUJvdW5kaW5nQm94KCkgY29u
c3Q7CisgICAgdmlydHVhbCBib29sIHNoYXBlRGVwZW5kZW50U3Ryb2tlQ29udGFpbnMoY29uc3Qg
RmxvYXRQb2ludCYpIGNvbnN0OworICAgIHZpcnR1YWwgYm9vbCBzaGFwZURlcGVuZGVudEZpbGxD
b250YWlucyhjb25zdCBGbG9hdFBvaW50JiwgY29uc3QgV2luZFJ1bGUpIGNvbnN0OworICAgIGZs
b2F0IHN0cm9rZVdpZHRoKCkgY29uc3Q7CisgICAgdm9pZCBzZXRJc1BhaW50aW5nRmFsbGJhY2so
Ym9vbCBpc0ZhbGxiYWNrKSB7IG1fZmlsbEZhbGxiYWNrID0gaXNGYWxsYmFjazsgfQorICAgIEZs
b2F0UmVjdCBjYWxjdWxhdGVNYXJrZXJCb3VuZHNJZk5lZWRlZCgpOworICAgIHZvaWQgc2V0U3Ry
b2tlQW5kTWFya2VyQm91bmRpbmdCb3goRmxvYXRSZWN0IHJlY3QpIHsgbV9zdHJva2VBbmRNYXJr
ZXJCb3VuZGluZ0JveCA9IHJlY3Q7IH0KKyAgICBGbG9hdFJlY3Qgc3Ryb2tlQW5kTWFya2VyQm91
bmRpbmdCb3goKSB7IHJldHVybiBtX3N0cm9rZUFuZE1hcmtlckJvdW5kaW5nQm94OyB9CisKKyAg
ICBib29sIGhhc1BhdGgoKSBjb25zdCB7IHJldHVybiBtX3BhdGguZ2V0KCk7IH0KKworcHJpdmF0
ZToKKyAgICAvLyBIaXQtZGV0ZWN0aW9uIHNlcGFyYXRlZCBmb3IgdGhlIGZpbGwgYW5kIHRoZSBz
dHJva2UKKyAgICBib29sIGZpbGxDb250YWlucyhjb25zdCBGbG9hdFBvaW50JiwgYm9vbCByZXF1
aXJlc0ZpbGwgPSB0cnVlLCBjb25zdCBXaW5kUnVsZSBmaWxsUnVsZSA9IFJVTEVfTk9OWkVSTyk7
CisgICAgYm9vbCBzdHJva2VDb250YWlucyhjb25zdCBGbG9hdFBvaW50JiwgYm9vbCByZXF1aXJl
c1N0cm9rZSA9IHRydWUpOworCisgICAgdmlydHVhbCBGbG9hdFJlY3QgcmVwYWludFJlY3RJbkxv
Y2FsQ29vcmRpbmF0ZXMoKSBjb25zdCB7IHJldHVybiBtX3JlcGFpbnRCb3VuZGluZ0JveDsgfQor
ICAgIHZpcnR1YWwgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiBsb2NhbFRvUGFyZW50VHJhbnNmb3Jt
KCkgY29uc3QgeyByZXR1cm4gbV9sb2NhbFRyYW5zZm9ybTsgfQorICAgIHZpcnR1YWwgQWZmaW5l
VHJhbnNmb3JtIGxvY2FsVHJhbnNmb3JtKCkgY29uc3QgeyByZXR1cm4gbV9sb2NhbFRyYW5zZm9y
bTsgfQorCisgICAgdmlydHVhbCBib29sIGlzU1ZHU2hhcGUoKSBjb25zdCB7IHJldHVybiB0cnVl
OyB9CisgICAgdmlydHVhbCBjb25zdCBjaGFyKiByZW5kZXJOYW1lKCkgY29uc3QgeyByZXR1cm4g
IlJlbmRlclNWR1NoYXBlIjsgfQorICAgIHZpcnR1YWwgYm9vbCBpc1JvdW5kZWRSZWN0KCkgeyBy
ZXR1cm4gZmFsc2U7IH0KKworICAgIHZpcnR1YWwgdm9pZCBsYXlvdXQoKTsKKyAgICB2aXJ0dWFs
IHZvaWQgcGFpbnQoUGFpbnRJbmZvJiwgY29uc3QgTGF5b3V0UG9pbnQmKTsKKyAgICB2aXJ0dWFs
IHZvaWQgYWRkRm9jdXNSaW5nUmVjdHMoVmVjdG9yPExheW91dFJlY3Q+JiwgY29uc3QgTGF5b3V0
UG9pbnQmKTsKKyAgICB2aXJ0dWFsIHZvaWQgaW5mbGF0ZVdpdGhNYXJrZXJCb3VuZHMoKSB7IH0K
KworICAgIHZpcnR1YWwgYm9vbCBub2RlQXRGbG9hdFBvaW50KGNvbnN0IEhpdFRlc3RSZXF1ZXN0
JiwgSGl0VGVzdFJlc3VsdCYsIGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50SW5QYXJlbnQsIEhpdFRl
c3RBY3Rpb24pOworCisgICAgdm9pZCB1cGRhdGVDYWNoZWRCb3VuZGFyaWVzKCk7CisKKyAgICB2
b2lkIHNldHVwU3F1YXJlQ2FwUGF0aChQYXRoKiYsIGludCYgYXBwbHlNb2RlKTsKKyAgICBib29s
IHNldHVwTm9uU2NhbGluZ1N0cm9rZVBhdGgoUGF0aComLCBHcmFwaGljc0NvbnRleHRTdGF0ZVNh
dmVyJik7CisgICAgYm9vbCBzaG91bGRTdHJva2VaZXJvTGVuZ3RoU3VicGF0aCgpIGNvbnN0Owor
ICAgIEZsb2F0UmVjdCB6ZXJvTGVuZ3RoU3VicGF0aFJlY3QoKSBjb25zdDsKKworICAgIHZvaWQg
ZmlsbEFuZFN0cm9rZVBhdGgoR3JhcGhpY3NDb250ZXh0Kik7CisKK3ByaXZhdGU6CisgICAgRmxv
YXRSZWN0IG1fZmlsbEJvdW5kaW5nQm94OworICAgIEZsb2F0UmVjdCBtX3N0cm9rZUFuZE1hcmtl
ckJvdW5kaW5nQm94OworICAgIEZsb2F0UmVjdCBtX3JlcGFpbnRCb3VuZGluZ0JveDsKKyAgICBT
VkdNYXJrZXJMYXlvdXRJbmZvIG1fbWFya2VyTGF5b3V0SW5mbzsKKyAgICBBZmZpbmVUcmFuc2Zv
cm0gbV9sb2NhbFRyYW5zZm9ybTsKKyAgICBPd25QdHI8UGF0aD4gbV9wYXRoOworCisgICAgYm9v
bCBtX25lZWRzQm91bmRhcmllc1VwZGF0ZSA6IDE7CisgICAgYm9vbCBtX25lZWRzU2hhcGVVcGRh
dGUgOiAxOworICAgIGJvb2wgbV9uZWVkc1RyYW5zZm9ybVVwZGF0ZSA6IDE7CisgICAgYm9vbCBt
X2ZpbGxGYWxsYmFjayA6IDE7CisgICAgYm9vbCBtX3N0cm9rZUNvbnRhaW5zRmFsbEJhY2sgOiAx
OworfTsKKworaW5saW5lIFJlbmRlclNWR1NoYXBlKiB0b1JlbmRlclNWR1NoYXBlKFJlbmRlck9i
amVjdCogb2JqZWN0KQoreworICAgIEFTU0VSVCghb2JqZWN0IHx8IG9iamVjdC0+aXNTVkdTaGFw
ZSgpKTsKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8UmVuZGVyU1ZHU2hhcGUqPihvYmplY3QpOwor
fQorCitpbmxpbmUgY29uc3QgUmVuZGVyU1ZHU2hhcGUqIHRvUmVuZGVyU1ZHU2hhcGUoY29uc3Qg
UmVuZGVyT2JqZWN0KiBvYmplY3QpCit7CisgICAgQVNTRVJUKCFvYmplY3QgfHwgb2JqZWN0LT5p
c1NWR1NoYXBlKCkpOworICAgIHJldHVybiBzdGF0aWNfY2FzdDxjb25zdCBSZW5kZXJTVkdTaGFw
ZSo+KG9iamVjdCk7Cit9CisKKy8vIFRoaXMgd2lsbCBjYXRjaCBhbnlvbmUgZG9pbmcgYW4gdW5u
ZWNlc3NhcnkgY2FzdC4KK3ZvaWQgdG9SZW5kZXJTVkdTaGFwZShjb25zdCBSZW5kZXJTVkdTaGFw
ZSopOworCit9CisKKyNlbmRpZiAvLyBFTkFCTEUoU1ZHKQorI2VuZGlmCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR0lubGluZVRleHRCb3guY3BwIGIvU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdJbmxpbmVUZXh0Qm94LmNwcAppbmRleCBjMWM1YWZh
Li5lOGMyYWY4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR0lu
bGluZVRleHRCb3guY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHSW5s
aW5lVGV4dEJveC5jcHAKQEAgLTM3Nyw3ICszNzcsNyBAQCB2b2lkIFNWR0lubGluZVRleHRCb3g6
OnJlbGVhc2VQYWludGluZ1Jlc291cmNlKEdyYXBoaWNzQ29udGV4dComIGNvbnRleHQsIGNvbnN0
CiAgICAgUmVuZGVyT2JqZWN0KiBwYXJlbnRSZW5kZXJlciA9IHBhcmVudCgpLT5yZW5kZXJlcigp
OwogICAgIEFTU0VSVChwYXJlbnRSZW5kZXJlcik7CiAKLSAgICBtX3BhaW50aW5nUmVzb3VyY2Ut
PnBvc3RBcHBseVJlc291cmNlKHBhcmVudFJlbmRlcmVyLCBjb250ZXh0LCBtX3BhaW50aW5nUmVz
b3VyY2VNb2RlLCBwYXRoKTsKKyAgICBtX3BhaW50aW5nUmVzb3VyY2UtPnBvc3RBcHBseVJlc291
cmNlKHBhcmVudFJlbmRlcmVyLCBjb250ZXh0LCBtX3BhaW50aW5nUmVzb3VyY2VNb2RlLCBwYXRo
LCAvKlJlbmRlclNWR1NoYXBlKi8gMCk7CiAgICAgbV9wYWludGluZ1Jlc291cmNlID0gMDsKIH0K
IApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdSZW5kZXJTdXBw
b3J0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHUmVuZGVyU3VwcG9ydC5j
cHAKaW5kZXggMmJjZTZhMi4uMDgzYjdlYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL3N2Zy9TVkdSZW5kZXJTdXBwb3J0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvc3ZnL1NWR1JlbmRlclN1cHBvcnQuY3BwCkBAIC0xNTEsNyArMTUxLDcgQEAgdm9pZCBT
VkdSZW5kZXJTdXBwb3J0OjpmaW5pc2hSZW5kZXJTVkdDb250ZW50KFJlbmRlck9iamVjdCogb2Jq
ZWN0LCBQYWludEluZm8mIHAKICAgICBTVkdSZXNvdXJjZXMqIHJlc291cmNlcyA9IFNWR1Jlc291
cmNlc0NhY2hlOjpjYWNoZWRSZXNvdXJjZXNGb3JSZW5kZXJPYmplY3Qob2JqZWN0KTsKICAgICBp
ZiAocmVzb3VyY2VzKSB7CiAgICAgICAgIGlmIChSZW5kZXJTVkdSZXNvdXJjZUZpbHRlciogZmls
dGVyID0gcmVzb3VyY2VzLT5maWx0ZXIoKSkgewotICAgICAgICAgICAgZmlsdGVyLT5wb3N0QXBw
bHlSZXNvdXJjZShvYmplY3QsIHBhaW50SW5mby5jb250ZXh0LCBBcHBseVRvRGVmYXVsdE1vZGUs
IC8qIHBhdGggKi8wKTsKKyAgICAgICAgICAgIGZpbHRlci0+cG9zdEFwcGx5UmVzb3VyY2Uoc3Rh
dGljX2Nhc3Q8UmVuZGVyU1ZHU2hhcGUqPihvYmplY3QpLCBwYWludEluZm8uY29udGV4dCwgQXBw
bHlUb0RlZmF1bHRNb2RlLCAwLCAwKTsKICAgICAgICAgICAgIHBhaW50SW5mby5jb250ZXh0ID0g
c2F2ZWRDb250ZXh0OwogICAgICAgICB9CiAgICAgfQpAQCAtMjIzLDkgKzIyMyw5IEBAIHZvaWQg
U1ZHUmVuZGVyU3VwcG9ydDo6bGF5b3V0Q2hpbGRyZW4oUmVuZGVyT2JqZWN0KiBzdGFydCwgYm9v
bCBzZWxmTmVlZHNMYXlvdXQpCiAgICAgICAgICAgICAvLyBXaGVuIHNlbGZOZWVkc0xheW91dCBp
cyBmYWxzZSBhbmQgdGhlIGxheW91dCBzaXplIGNoYW5nZWQsIHdlIGhhdmUgdG8gY2hlY2sgd2hl
dGhlciB0aGlzIGNoaWxkIHVzZXMgcmVsYXRpdmUgbGVuZ3RocwogICAgICAgICAgICAgaWYgKFNW
R0VsZW1lbnQqIGVsZW1lbnQgPSBjaGlsZC0+bm9kZSgpLT5pc1NWR0VsZW1lbnQoKSA/IHN0YXRp
Y19jYXN0PFNWR0VsZW1lbnQqPihjaGlsZC0+bm9kZSgpKSA6IDApIHsKICAgICAgICAgICAgICAg
ICBpZiAoZWxlbWVudC0+aXNTdHlsZWQoKSAmJiBzdGF0aWNfY2FzdDxTVkdTdHlsZWRFbGVtZW50
Kj4oZWxlbWVudCktPmhhc1JlbGF0aXZlTGVuZ3RocygpKSB7Ci0gICAgICAgICAgICAgICAgICAg
IC8vIFdoZW4gdGhlIGxheW91dCBzaXplIGNoYW5nZWQgYW5kIHdoZW4gdXNpbmcgcmVsYXRpdmUg
dmFsdWVzIHRlbGwgdGhlIFJlbmRlclNWR1BhdGggdG8gdXBkYXRlIGl0cyBQYXRoIG9iamVjdAot
ICAgICAgICAgICAgICAgICAgICBpZiAoY2hpbGQtPmlzU1ZHUGF0aCgpKQotICAgICAgICAgICAg
ICAgICAgICAgICAgdG9SZW5kZXJTVkdQYXRoKGNoaWxkKS0+c2V0TmVlZHNQYXRoVXBkYXRlKCk7
CisgICAgICAgICAgICAgICAgICAgIC8vIFdoZW4gdGhlIGxheW91dCBzaXplIGNoYW5nZWQgYW5k
IHdoZW4gdXNpbmcgcmVsYXRpdmUgdmFsdWVzIHRlbGwgdGhlIFJlbmRlclNWR1NoYXBlIHRvIHVw
ZGF0ZSBpdHMgc2hhcGUgb2JqZWN0CisgICAgICAgICAgICAgICAgICAgIGlmIChjaGlsZC0+aXNT
VkdTaGFwZSgpKQorICAgICAgICAgICAgICAgICAgICAgICAgdG9SZW5kZXJTVkdTaGFwZShjaGls
ZCktPnNldE5lZWRzU2hhcGVVcGRhdGUoKTsKIAogICAgICAgICAgICAgICAgICAgICBuZWVkc0xh
eW91dCA9IHRydWU7CiAgICAgICAgICAgICAgICAgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL3N2Zy9TVkdSZW5kZXJUcmVlQXNUZXh0LmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9zdmcvU1ZHUmVuZGVyVHJlZUFzVGV4dC5jcHAKaW5kZXggYTE2Mjk2OS4uZDFh
ZDcyYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdSZW5kZXJU
cmVlQXNUZXh0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR1JlbmRl
clRyZWVBc1RleHQuY3BwCkBAIC01NSw2ICs1NSw3IEBACiAjaW5jbHVkZSAiUmVuZGVyU1ZHUmVz
b3VyY2VSYWRpYWxHcmFkaWVudC5oIgogI2luY2x1ZGUgIlJlbmRlclNWR1Jlc291cmNlU29saWRD
b2xvci5oIgogI2luY2x1ZGUgIlJlbmRlclNWR1Jvb3QuaCIKKyNpbmNsdWRlICJSZW5kZXJTVkdT
aGFwZS5oIgogI2luY2x1ZGUgIlJlbmRlclNWR1RleHQuaCIKICNpbmNsdWRlICJSZW5kZXJUcmVl
QXNUZXh0LmgiCiAjaW5jbHVkZSAiU1ZHQ2lyY2xlRWxlbWVudC5oIgpAQCAtMjg5LDE4ICsyOTAs
MTggQEAgc3RhdGljIHZvaWQgd3JpdGVTdHlsZShUZXh0U3RyZWFtJiB0cywgY29uc3QgUmVuZGVy
T2JqZWN0JiBvYmplY3QpCiAgICAgICAgIHdyaXRlTmFtZVZhbHVlUGFpcih0cywgInRyYW5zZm9y
bSIsIG9iamVjdC5sb2NhbFRyYW5zZm9ybSgpKTsKICAgICB3cml0ZUlmTm90RGVmYXVsdCh0cywg
ImltYWdlIHJlbmRlcmluZyIsIHN0eWxlLT5pbWFnZVJlbmRlcmluZygpLCBSZW5kZXJTdHlsZTo6
aW5pdGlhbEltYWdlUmVuZGVyaW5nKCkpOwogICAgIHdyaXRlSWZOb3REZWZhdWx0KHRzLCAib3Bh
Y2l0eSIsIHN0eWxlLT5vcGFjaXR5KCksIFJlbmRlclN0eWxlOjppbml0aWFsT3BhY2l0eSgpKTsK
LSAgICBpZiAob2JqZWN0LmlzU1ZHUGF0aCgpKSB7Ci0gICAgICAgIGNvbnN0IFJlbmRlclNWR1Bh
dGgmIHBhdGggPSBzdGF0aWNfY2FzdDxjb25zdCBSZW5kZXJTVkdQYXRoJj4ob2JqZWN0KTsKLSAg
ICAgICAgQVNTRVJUKHBhdGgubm9kZSgpKTsKLSAgICAgICAgQVNTRVJUKHBhdGgubm9kZSgpLT5p
c1NWR0VsZW1lbnQoKSk7CisgICAgaWYgKG9iamVjdC5pc1NWR1NoYXBlKCkpIHsKKyAgICAgICAg
Y29uc3QgUmVuZGVyU1ZHU2hhcGUmIHNoYXBlID0gc3RhdGljX2Nhc3Q8Y29uc3QgUmVuZGVyU1ZH
U2hhcGUmPihvYmplY3QpOworICAgICAgICBBU1NFUlQoc2hhcGUubm9kZSgpKTsKKyAgICAgICAg
QVNTRVJUKHNoYXBlLm5vZGUoKS0+aXNTVkdFbGVtZW50KCkpOwogCiAgICAgICAgIENvbG9yIGZh
bGxiYWNrQ29sb3I7Ci0gICAgICAgIGlmIChSZW5kZXJTVkdSZXNvdXJjZSogc3Ryb2tlUGFpbnRp
bmdSZXNvdXJjZSA9IFJlbmRlclNWR1Jlc291cmNlOjpzdHJva2VQYWludGluZ1Jlc291cmNlKGNv
bnN0X2Nhc3Q8UmVuZGVyU1ZHUGF0aCo+KCZwYXRoKSwgcGF0aC5zdHlsZSgpLCBmYWxsYmFja0Nv
bG9yKSkgeworICAgICAgICBpZiAoUmVuZGVyU1ZHUmVzb3VyY2UqIHN0cm9rZVBhaW50aW5nUmVz
b3VyY2UgPSBSZW5kZXJTVkdSZXNvdXJjZTo6c3Ryb2tlUGFpbnRpbmdSZXNvdXJjZShjb25zdF9j
YXN0PFJlbmRlclNWR1NoYXBlKj4oJnNoYXBlKSwgc2hhcGUuc3R5bGUoKSwgZmFsbGJhY2tDb2xv
cikpIHsKICAgICAgICAgICAgIFRleHRTdHJlYW1TZXBhcmF0b3IgcygiICIpOwogICAgICAgICAg
ICAgdHMgPDwgIiBbc3Ryb2tlPXsiIDw8IHM7CiAgICAgICAgICAgICB3cml0ZVNWR1BhaW50aW5n
UmVzb3VyY2UodHMsIHN0cm9rZVBhaW50aW5nUmVzb3VyY2UpOwogCi0gICAgICAgICAgICBTVkdF
bGVtZW50KiBlbGVtZW50ID0gc3RhdGljX2Nhc3Q8U1ZHRWxlbWVudCo+KHBhdGgubm9kZSgpKTsK
KyAgICAgICAgICAgIFNWR0VsZW1lbnQqIGVsZW1lbnQgPSBzdGF0aWNfY2FzdDxTVkdFbGVtZW50
Kj4oc2hhcGUubm9kZSgpKTsKICAgICAgICAgICAgIGRvdWJsZSBkYXNoT2Zmc2V0ID0gc3ZnU3R5
bGUtPnN0cm9rZURhc2hPZmZzZXQoKS52YWx1ZShlbGVtZW50KTsKICAgICAgICAgICAgIGRvdWJs
ZSBzdHJva2VXaWR0aCA9IHN2Z1N0eWxlLT5zdHJva2VXaWR0aCgpLnZhbHVlKGVsZW1lbnQpOwog
ICAgICAgICAgICAgY29uc3QgVmVjdG9yPFNWR0xlbmd0aD4mIGRhc2hlcyA9IHN2Z1N0eWxlLT5z
dHJva2VEYXNoQXJyYXkoKTsKQEAgLTMyMiw3ICszMjMsNyBAQCBzdGF0aWMgdm9pZCB3cml0ZVN0
eWxlKFRleHRTdHJlYW0mIHRzLCBjb25zdCBSZW5kZXJPYmplY3QmIG9iamVjdCkKICAgICAgICAg
ICAgIHRzIDw8ICJ9XSI7CiAgICAgICAgIH0KIAotICAgICAgICBpZiAoUmVuZGVyU1ZHUmVzb3Vy
Y2UqIGZpbGxQYWludGluZ1Jlc291cmNlID0gUmVuZGVyU1ZHUmVzb3VyY2U6OmZpbGxQYWludGlu
Z1Jlc291cmNlKGNvbnN0X2Nhc3Q8UmVuZGVyU1ZHUGF0aCo+KCZwYXRoKSwgcGF0aC5zdHlsZSgp
LCBmYWxsYmFja0NvbG9yKSkgeworICAgICAgICBpZiAoUmVuZGVyU1ZHUmVzb3VyY2UqIGZpbGxQ
YWludGluZ1Jlc291cmNlID0gUmVuZGVyU1ZHUmVzb3VyY2U6OmZpbGxQYWludGluZ1Jlc291cmNl
KGNvbnN0X2Nhc3Q8UmVuZGVyU1ZHU2hhcGUqPigmc2hhcGUpLCBzaGFwZS5zdHlsZSgpLCBmYWxs
YmFja0NvbG9yKSkgewogICAgICAgICAgICAgVGV4dFN0cmVhbVNlcGFyYXRvciBzKCIgIik7CiAg
ICAgICAgICAgICB0cyA8PCAiIFtmaWxsPXsiIDw8IHM7CiAgICAgICAgICAgICB3cml0ZVNWR1Bh
aW50aW5nUmVzb3VyY2UodHMsIGZpbGxQYWludGluZ1Jlc291cmNlKTsKQEAgLTM0NiwxMiArMzQ3
LDEyIEBAIHN0YXRpYyBUZXh0U3RyZWFtJiB3cml0ZVBvc2l0aW9uQW5kU3R5bGUoVGV4dFN0cmVh
bSYgdHMsIGNvbnN0IFJlbmRlck9iamVjdCYgb2JqCiAgICAgcmV0dXJuIHRzOwogfQogCi1zdGF0
aWMgVGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiB0cywgY29uc3QgUmVuZGVyU1ZH
UGF0aCYgcGF0aCkKK3N0YXRpYyBUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJlYW0mIHRz
LCBjb25zdCBSZW5kZXJTVkdTaGFwZSYgc2hhcGUpCiB7Ci0gICAgd3JpdGVQb3NpdGlvbkFuZFN0
eWxlKHRzLCBwYXRoKTsKKyAgICB3cml0ZVBvc2l0aW9uQW5kU3R5bGUodHMsIHNoYXBlKTsKIAot
ICAgIEFTU0VSVChwYXRoLm5vZGUoKS0+aXNTVkdFbGVtZW50KCkpOwotICAgIFNWR0VsZW1lbnQq
IHN2Z0VsZW1lbnQgPSBzdGF0aWNfY2FzdDxTVkdFbGVtZW50Kj4ocGF0aC5ub2RlKCkpOworICAg
IEFTU0VSVChzaGFwZS5ub2RlKCktPmlzU1ZHRWxlbWVudCgpKTsKKyAgICBTVkdFbGVtZW50KiBz
dmdFbGVtZW50ID0gc3RhdGljX2Nhc3Q8U1ZHRWxlbWVudCo+KHNoYXBlLm5vZGUoKSk7CiAKICAg
ICBpZiAoc3ZnRWxlbWVudC0+aGFzVGFnTmFtZShTVkdOYW1lczo6cmVjdFRhZykpIHsKICAgICAg
ICAgU1ZHUmVjdEVsZW1lbnQqIGVsZW1lbnQgPSBzdGF0aWNfY2FzdDxTVkdSZWN0RWxlbWVudCo+
KHN2Z0VsZW1lbnQpOwpAQCAtNjUzLDExICs2NTQsMTEgQEAgdm9pZCB3cml0ZVNWR0ltYWdlKFRl
eHRTdHJlYW0mIHRzLCBjb25zdCBSZW5kZXJTVkdJbWFnZSYgaW1hZ2UsIGludCBpbmRlbnQpCiAg
ICAgd3JpdGVSZXNvdXJjZXModHMsIGltYWdlLCBpbmRlbnQpOwogfQogCi12b2lkIHdyaXRlKFRl
eHRTdHJlYW0mIHRzLCBjb25zdCBSZW5kZXJTVkdQYXRoJiBwYXRoLCBpbnQgaW5kZW50KQordm9p
ZCB3cml0ZShUZXh0U3RyZWFtJiB0cywgY29uc3QgUmVuZGVyU1ZHU2hhcGUmIHNoYXBlLCBpbnQg
aW5kZW50KQogewotICAgIHdyaXRlU3RhbmRhcmRQcmVmaXgodHMsIHBhdGgsIGluZGVudCk7Ci0g
ICAgdHMgPDwgcGF0aCA8PCAiXG4iOwotICAgIHdyaXRlUmVzb3VyY2VzKHRzLCBwYXRoLCBpbmRl
bnQpOworICAgIHdyaXRlU3RhbmRhcmRQcmVmaXgodHMsIHNoYXBlLCBpbmRlbnQpOworICAgIHRz
IDw8IHNoYXBlIDw8ICJcbiI7CisgICAgd3JpdGVSZXNvdXJjZXModHMsIHNoYXBlLCBpbmRlbnQp
OwogfQogCiB2b2lkIHdyaXRlU1ZHR3JhZGllbnRTdG9wKFRleHRTdHJlYW0mIHRzLCBjb25zdCBS
ZW5kZXJTVkdHcmFkaWVudFN0b3AmIHN0b3AsIGludCBpbmRlbnQpCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR1JlbmRlclRyZWVBc1RleHQuaCBiL1NvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHUmVuZGVyVHJlZUFzVGV4dC5oCmluZGV4IGNlMDdhNWMu
LjM1OThjODMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHUmVu
ZGVyVHJlZUFzVGV4dC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHUmVu
ZGVyVHJlZUFzVGV4dC5oCkBAIC00MSwxNCArNDEsMTQgQEAgY2xhc3MgUmVuZGVySW1hZ2U7CiBj
bGFzcyBSZW5kZXJPYmplY3Q7CiBjbGFzcyBSZW5kZXJTVkdHcmFkaWVudFN0b3A7CiBjbGFzcyBS
ZW5kZXJTVkdJbWFnZTsKLWNsYXNzIFJlbmRlclNWR1BhdGg7CitjbGFzcyBSZW5kZXJTVkdTaGFw
ZTsKIGNsYXNzIFJlbmRlclNWR1Jvb3Q7CiBjbGFzcyBSZW5kZXJUZXh0OwogY2xhc3MgQWZmaW5l
VHJhbnNmb3JtOwogY2xhc3MgU1ZHVW5pdFR5cGVzOwogCiAvLyBmdW5jdGlvbnMgdXNlZCBieSB0
aGUgbWFpbiBSZW5kZXJUcmVlQXNUZXh0IGNvZGUKLXZvaWQgd3JpdGUoVGV4dFN0cmVhbSYsIGNv
bnN0IFJlbmRlclNWR1BhdGgmLCBpbnQgaW5kZW50KTsKK3ZvaWQgd3JpdGUoVGV4dFN0cmVhbSYs
IGNvbnN0IFJlbmRlclNWR1NoYXBlJiwgaW50IGluZGVudCk7CiB2b2lkIHdyaXRlKFRleHRTdHJl
YW0mLCBjb25zdCBSZW5kZXJTVkdSb290JiwgaW50IGluZGVudCk7CiB2b2lkIHdyaXRlU1ZHR3Jh
ZGllbnRTdG9wKFRleHRTdHJlYW0mLCBjb25zdCBSZW5kZXJTVkdHcmFkaWVudFN0b3AmLCBpbnQg
aW5kZW50KTsKIHZvaWQgd3JpdGVTVkdSZXNvdXJjZUNvbnRhaW5lcihUZXh0U3RyZWFtJiwgY29u
c3QgUmVuZGVyT2JqZWN0JiwgaW50IGluZGVudCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvc3ZnL1NWR1RleHRSdW5SZW5kZXJpbmdDb250ZXh0LmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHVGV4dFJ1blJlbmRlcmluZ0NvbnRleHQuY3BwCmluZGV4
IDMzYWNmOTIuLjIyNGViODYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9z
dmcvU1ZHVGV4dFJ1blJlbmRlcmluZ0NvbnRleHQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9zdmcvU1ZHVGV4dFJ1blJlbmRlcmluZ0NvbnRleHQuY3BwCkBAIC0xNjAsNyArMTYw
LDcgQEAgdm9pZCBTVkdUZXh0UnVuUmVuZGVyaW5nQ29udGV4dDo6ZHJhd1NWR0dseXBocyhHcmFw
aGljc0NvbnRleHQqIGNvbnRleHQsIGNvbnN0IFQKICAgICAgICAgICAgICAgICBjb25zdCBSZW5k
ZXJTVkdJbmxpbmVUZXh0KiB0ZXh0UmVuZGVyZXIgPSB0b1JlbmRlclNWR0lubGluZVRleHQocmVu
ZGVyT2JqZWN0KTsKICAgICAgICAgICAgICAgICBjb250ZXh0LT5zZXRTdHJva2VUaGlja25lc3Mo
Y29udGV4dC0+c3Ryb2tlVGhpY2tuZXNzKCkgKiB0ZXh0UmVuZGVyZXItPnNjYWxpbmdGYWN0b3Io
KSk7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBhY3RpdmVQYWludGluZ1Jlc291cmNlLT5w
b3N0QXBwbHlSZXNvdXJjZShwYXJlbnRSZW5kZXJPYmplY3QsIGNvbnRleHQsIHJlc291cmNlTW9k
ZSwgJmdseXBoUGF0aCk7CisgICAgICAgICAgICBhY3RpdmVQYWludGluZ1Jlc291cmNlLT5wb3N0
QXBwbHlSZXNvdXJjZShwYXJlbnRSZW5kZXJPYmplY3QsIGNvbnRleHQsIHJlc291cmNlTW9kZSwg
JmdseXBoUGF0aCwgMCk7CiAgICAgICAgICB9CiAgCiAgICAgICAgIGNvbnRleHQtPnJlc3RvcmUo
KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdDaXJjbGVFbGVtZW50LmNwcCBi
L1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdDaXJjbGVFbGVtZW50LmNwcAppbmRleCAyODhlNThhLi5l
NTNkMjdlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHQ2lyY2xlRWxlbWVudC5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0NpcmNsZUVsZW1lbnQuY3BwCkBAIC0xMjQs
NyArMTI0LDcgQEAgdm9pZCBTVkdDaXJjbGVFbGVtZW50OjpzdmdBdHRyaWJ1dGVDaGFuZ2VkKGNv
bnN0IFF1YWxpZmllZE5hbWUmIGF0dHJOYW1lKQogICAgICAgICByZXR1cm47CiAKICAgICBpZiAo
aXNMZW5ndGhBdHRyaWJ1dGUpIHsKLSAgICAgICAgcmVuZGVyZXItPnNldE5lZWRzUGF0aFVwZGF0
ZSgpOworICAgICAgICByZW5kZXJlci0+c2V0TmVlZHNTaGFwZVVwZGF0ZSgpOwogICAgICAgICBS
ZW5kZXJTVkdSZXNvdXJjZTo6bWFya0ZvckxheW91dEFuZFBhcmVudFJlc291cmNlSW52YWxpZGF0
aW9uKHJlbmRlcmVyKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3N2Zy9TVkdFbGxpcHNlRWxlbWVudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9zdmcv
U1ZHRWxsaXBzZUVsZW1lbnQuY3BwCmluZGV4IDliOWRhNjguLjYxNTllMmMgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdFbGxpcHNlRWxlbWVudC5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvc3ZnL1NWR0VsbGlwc2VFbGVtZW50LmNwcApAQCAtMTI5LDcgKzEyOSw3IEBAIHZvaWQg
U1ZHRWxsaXBzZUVsZW1lbnQ6OnN2Z0F0dHJpYnV0ZUNoYW5nZWQoY29uc3QgUXVhbGlmaWVkTmFt
ZSYgYXR0ck5hbWUpCiAgICAgICAgIHJldHVybjsKIAogICAgIGlmIChpc0xlbmd0aEF0dHJpYnV0
ZSkgewotICAgICAgICByZW5kZXJlci0+c2V0TmVlZHNQYXRoVXBkYXRlKCk7CisgICAgICAgIHJl
bmRlcmVyLT5zZXROZWVkc1NoYXBlVXBkYXRlKCk7CiAgICAgICAgIFJlbmRlclNWR1Jlc291cmNl
OjptYXJrRm9yTGF5b3V0QW5kUGFyZW50UmVzb3VyY2VJbnZhbGlkYXRpb24ocmVuZGVyZXIpOwog
ICAgICAgICByZXR1cm47CiAgICAgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvc3ZnL1NW
R0xpbmVFbGVtZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdMaW5lRWxlbWVudC5jcHAK
aW5kZXggYzliMjE0Ny4uZDBkMDg2ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvc3ZnL1NW
R0xpbmVFbGVtZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHTGluZUVsZW1lbnQu
Y3BwCkBAIC0xMjksNyArMTI5LDcgQEAgdm9pZCBTVkdMaW5lRWxlbWVudDo6c3ZnQXR0cmlidXRl
Q2hhbmdlZChjb25zdCBRdWFsaWZpZWROYW1lJiBhdHRyTmFtZSkKICAgICAgICAgcmV0dXJuOwog
CiAgICAgaWYgKGlzTGVuZ3RoQXR0cmlidXRlKSB7Ci0gICAgICAgIHJlbmRlcmVyLT5zZXROZWVk
c1BhdGhVcGRhdGUoKTsKKyAgICAgICAgcmVuZGVyZXItPnNldE5lZWRzU2hhcGVVcGRhdGUoKTsK
ICAgICAgICAgUmVuZGVyU1ZHUmVzb3VyY2U6Om1hcmtGb3JMYXlvdXRBbmRQYXJlbnRSZXNvdXJj
ZUludmFsaWRhdGlvbihyZW5kZXJlcik7CiAgICAgICAgIHJldHVybjsKICAgICB9CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHUGF0aEVsZW1lbnQuY3BwIGIvU291cmNlL1dlYkNv
cmUvc3ZnL1NWR1BhdGhFbGVtZW50LmNwcAppbmRleCA0YWU2NjEzLi4yN2EwNDE4IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHUGF0aEVsZW1lbnQuY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3N2Zy9TVkdQYXRoRWxlbWVudC5jcHAKQEAgLTI2OSw3ICsyNjksNyBAQCB2b2lkIFNW
R1BhdGhFbGVtZW50OjpzdmdBdHRyaWJ1dGVDaGFuZ2VkKGNvbnN0IFF1YWxpZmllZE5hbWUmIGF0
dHJOYW1lKQogICAgICAgICB9CiAKICAgICAgICAgaWYgKHJlbmRlcmVyKQotICAgICAgICAgICAg
cmVuZGVyZXItPnNldE5lZWRzUGF0aFVwZGF0ZSgpOworICAgICAgICAgICAgcmVuZGVyZXItPnNl
dE5lZWRzU2hhcGVVcGRhdGUoKTsKICAgICB9CiAKICAgICBpZiAocmVuZGVyZXIpCkBAIC0zNTUs
MTAgKzM1NSwxNiBAQCB2b2lkIFNWR1BhdGhFbGVtZW50OjpwYXRoU2VnTGlzdENoYW5nZWQoU1ZH
UGF0aFNlZ1JvbGUgcm9sZSkKICAgICBpZiAoIXJlbmRlcmVyKQogICAgICAgICByZXR1cm47CiAK
LSAgICByZW5kZXJlci0+c2V0TmVlZHNQYXRoVXBkYXRlKCk7CisgICAgcmVuZGVyZXItPnNldE5l
ZWRzU2hhcGVVcGRhdGUoKTsKICAgICBSZW5kZXJTVkdSZXNvdXJjZTo6bWFya0ZvckxheW91dEFu
ZFBhcmVudFJlc291cmNlSW52YWxpZGF0aW9uKHJlbmRlcmVyKTsKIH0KIAorUmVuZGVyT2JqZWN0
KiBTVkdQYXRoRWxlbWVudDo6Y3JlYXRlUmVuZGVyZXIoUmVuZGVyQXJlbmEqIGFyZW5hLCBSZW5k
ZXJTdHlsZSopCit7CisgICAgLy8gQnkgZGVmYXVsdCwgYW55IHN1YmNsYXNzIGlzIGV4cGVjdGVk
IHRvIGRvIHBhdGgtYmFzZWQgZHJhd2luZworICAgIHJldHVybiBuZXcgKGFyZW5hKSBSZW5kZXJT
VkdQYXRoKHRoaXMpOworfQorCiB9CiAKICNlbmRpZiAvLyBFTkFCTEUoU1ZHKQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvc3ZnL1NWR1BhdGhFbGVtZW50LmggYi9Tb3VyY2UvV2ViQ29yZS9z
dmcvU1ZHUGF0aEVsZW1lbnQuaAppbmRleCAxZDM3ZDBlLi41NGI4ZmUyIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9zdmcvU1ZHUGF0aEVsZW1lbnQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9z
dmcvU1ZHUGF0aEVsZW1lbnQuaApAQCAtMTIyLDYgKzEyMiw4IEBAIHByaXZhdGU6CiAgICAgdmly
dHVhbCB2b2lkIHN5bmNocm9uaXplUmVxdWlyZWRFeHRlbnNpb25zKCkgeyBTVkdUZXN0czo6c3lu
Y2hyb25pemVSZXF1aXJlZEV4dGVuc2lvbnModGhpcyk7IH0KICAgICB2aXJ0dWFsIHZvaWQgc3lu
Y2hyb25pemVTeXN0ZW1MYW5ndWFnZSgpIHsgU1ZHVGVzdHM6OnN5bmNocm9uaXplU3lzdGVtTGFu
Z3VhZ2UodGhpcyk7IH0KIAorICAgIFJlbmRlck9iamVjdCogY3JlYXRlUmVuZGVyZXIoUmVuZGVy
QXJlbmEqLCBSZW5kZXJTdHlsZSopOworCiBwcml2YXRlOgogICAgIE93blB0cjxTVkdQYXRoQnl0
ZVN0cmVhbT4gbV9wYXRoQnl0ZVN0cmVhbTsKICAgICBtdXRhYmxlIFNWR1N5bmNocm9uaXphYmxl
QW5pbWF0ZWRQcm9wZXJ0eTxTVkdQYXRoU2VnTGlzdD4gbV9wYXRoU2VnTGlzdDsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdQb2x5RWxlbWVudC5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9zdmcvU1ZHUG9seUVsZW1lbnQuY3BwCmluZGV4IDY2YzUyNTguLmE4YjY3YzcgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdQb2x5RWxlbWVudC5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvc3ZnL1NWR1BvbHlFbGVtZW50LmNwcApAQCAtMTI0LDcgKzEyNCw3IEBAIHZvaWQgU1ZH
UG9seUVsZW1lbnQ6OnN2Z0F0dHJpYnV0ZUNoYW5nZWQoY29uc3QgUXVhbGlmaWVkTmFtZSYgYXR0
ck5hbWUpCiAgICAgICAgIHJldHVybjsKIAogICAgIGlmIChhdHRyTmFtZSA9PSBTVkdOYW1lczo6
cG9pbnRzQXR0cikgewotICAgICAgICByZW5kZXJlci0+c2V0TmVlZHNQYXRoVXBkYXRlKCk7Cisg
ICAgICAgIHJlbmRlcmVyLT5zZXROZWVkc1NoYXBlVXBkYXRlKCk7CiAgICAgICAgIFJlbmRlclNW
R1Jlc291cmNlOjptYXJrRm9yTGF5b3V0QW5kUGFyZW50UmVzb3VyY2VJbnZhbGlkYXRpb24ocmVu
ZGVyZXIpOwogICAgICAgICByZXR1cm47CiAgICAgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvc3ZnL1NWR1JlY3RFbGVtZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdSZWN0RWxl
bWVudC5jcHAKaW5kZXggOTIwNzc0NS4uNTgwYzYzNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvc3ZnL1NWR1JlY3RFbGVtZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHUmVj
dEVsZW1lbnQuY3BwCkBAIC0yNSw2ICsyNSw3IEBACiAKICNpbmNsdWRlICJBdHRyaWJ1dGUuaCIK
ICNpbmNsdWRlICJSZW5kZXJTVkdQYXRoLmgiCisjaW5jbHVkZSAiUmVuZGVyU1ZHUmVjdC5oIgog
I2luY2x1ZGUgIlJlbmRlclNWR1Jlc291cmNlLmgiCiAjaW5jbHVkZSAiU1ZHRWxlbWVudEluc3Rh
bmNlLmgiCiAjaW5jbHVkZSAiU1ZHTGVuZ3RoLmgiCkBAIC0zMiw2ICszMyw4IEBACiAKIG5hbWVz
cGFjZSBXZWJDb3JlIHsKIAorY2xhc3MgUmVuZGVyU1ZHUmVjdDsKKwogLy8gQW5pbWF0ZWQgcHJv
cGVydHkgZGVmaW5pdGlvbnMKIERFRklORV9BTklNQVRFRF9MRU5HVEgoU1ZHUmVjdEVsZW1lbnQs
IFNWR05hbWVzOjp4QXR0ciwgWCwgeCkKIERFRklORV9BTklNQVRFRF9MRU5HVEgoU1ZHUmVjdEVs
ZW1lbnQsIFNWR05hbWVzOjp5QXR0ciwgWSwgeSkKQEAgLTEzNywxMiArMTQwLDEyIEBAIHZvaWQg
U1ZHUmVjdEVsZW1lbnQ6OnN2Z0F0dHJpYnV0ZUNoYW5nZWQoY29uc3QgUXVhbGlmaWVkTmFtZSYg
YXR0ck5hbWUpCiAgICAgaWYgKFNWR1Rlc3RzOjpoYW5kbGVBdHRyaWJ1dGVDaGFuZ2UodGhpcywg
YXR0ck5hbWUpKQogICAgICAgICByZXR1cm47CiAKLSAgICBSZW5kZXJTVkdQYXRoKiByZW5kZXJl
ciA9IHN0YXRpY19jYXN0PFJlbmRlclNWR1BhdGgqPih0aGlzLT5yZW5kZXJlcigpKTsKKyAgICBS
ZW5kZXJTVkdSZWN0KiByZW5kZXJlciA9IHN0YXRpY19jYXN0PFJlbmRlclNWR1JlY3QqPih0aGlz
LT5yZW5kZXJlcigpKTsKICAgICBpZiAoIXJlbmRlcmVyKQogICAgICAgICByZXR1cm47CiAKICAg
ICBpZiAoaXNMZW5ndGhBdHRyaWJ1dGUpIHsKLSAgICAgICAgcmVuZGVyZXItPnNldE5lZWRzUGF0
aFVwZGF0ZSgpOworICAgICAgICByZW5kZXJlci0+c2V0TmVlZHNTaGFwZVVwZGF0ZSgpOwogICAg
ICAgICBSZW5kZXJTVkdSZXNvdXJjZTo6bWFya0ZvckxheW91dEFuZFBhcmVudFJlc291cmNlSW52
YWxpZGF0aW9uKHJlbmRlcmVyKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KQEAgLTE5OCw2ICsy
MDEsMTEgQEAgYm9vbCBTVkdSZWN0RWxlbWVudDo6c2VsZkhhc1JlbGF0aXZlTGVuZ3RocygpIGNv
bnN0CiAgICAgICAgIHx8IHJ5KCkuaXNSZWxhdGl2ZSgpOwogfQogCitSZW5kZXJPYmplY3QqIFNW
R1JlY3RFbGVtZW50OjpjcmVhdGVSZW5kZXJlcihSZW5kZXJBcmVuYSogYXJlbmEsIFJlbmRlclN0
eWxlKikKK3sKKyAgICByZXR1cm4gbmV3IChhcmVuYSkgUmVuZGVyU1ZHUmVjdCh0aGlzKTsKK30K
KwogfQogCiAjZW5kaWYgLy8gRU5BQkxFKFNWRykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3N2Zy9TVkdSZWN0RWxlbWVudC5oIGIvU291cmNlL1dlYkNvcmUvc3ZnL1NWR1JlY3RFbGVtZW50
LmgKaW5kZXggOTk0MzdmMy4uOWJmNjAyZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvc3Zn
L1NWR1JlY3RFbGVtZW50LmgKKysrIGIvU291cmNlL1dlYkNvcmUvc3ZnL1NWR1JlY3RFbGVtZW50
LmgKQEAgLTUyLDYgKzUyLDggQEAgcHJpdmF0ZToKIAogICAgIHZpcnR1YWwgYm9vbCBzZWxmSGFz
UmVsYXRpdmVMZW5ndGhzKCkgY29uc3Q7CiAKKyAgICBSZW5kZXJPYmplY3QqIGNyZWF0ZVJlbmRl
cmVyKFJlbmRlckFyZW5hKiwgUmVuZGVyU3R5bGUqKTsKKwogICAgIEJFR0lOX0RFQ0xBUkVfQU5J
TUFURURfUFJPUEVSVElFUyhTVkdSZWN0RWxlbWVudCkKICAgICAgICAgREVDTEFSRV9BTklNQVRF
RF9MRU5HVEgoWCwgeCkKICAgICAgICAgREVDTEFSRV9BTklNQVRFRF9MRU5HVEgoWSwgeSkKLS0g
CjEuNy41LjQKCg==
</data>
<flag name="commit-queue"
          id="110793"
          type_id="3"
          status="-"
          setter="rhodovan.u-szeged"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="0"
              isprivate="0"
          >
            <attachid>115805</attachid>
            <date>2011-11-18 07:25:53 -0800</date>
            <delta_ts>2011-11-18 07:54:27 -0800</delta_ts>
            <desc>Proposed patch</desc>
            <filename>0001-rendering-2011-11-18.patch</filename>
            <type>text/plain</type>
            <size>184709</size>
            <attacher name="Renata Hodovan">rhodovan.u-szeged</attacher>
            
              <data encoding="base64">RnJvbSAwNzg3OTRjYmUzMmIzMmRlMDk3NTBkZjdlMDA4ODVlMDU3YWNiYmE3IE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBSZW5hdGEgSG9kb3ZhbiA8cmVuaUB3ZWJraXQub3JnPgpEYXRl
OiBGcmksIDE4IE5vdiAyMDExIDE2OjEwOjM0ICswMTAwClN1YmplY3Q6IFtQQVRDSF0gcmVuZGVy
aW5nIDIwMTEgMTEgMTgKCi0tLQogTGF5b3V0VGVzdHMvQ2hhbmdlTG9nICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgfCAgIDE0ICsKIC4uLi9zdmcvVzNDLVNWRy0xLjEvY29vcmRzLXVuaXRz
LTAyLWItZXhwZWN0ZWQucG5nIHwgIEJpbiAzMDkyMiAtPiAzMDkzNiBieXRlcwogLi4uL21hYy9z
dmcvY3VzdG9tL3BlcmNlbnRhZ2UtcmVjdC1leHBlY3RlZC5wbmcgICAgfCAgQmluIDExMjc3IC0+
IDExMzI1IGJ5dGVzCiAuLi4vcG9pbnRlci1ldmVudHMtb24tcm91bmRlZC1yZWN0LWV4cGVjdGVk
LnR4dCAgICB8ICAgIDEgKwogLi4uL2N1c3RvbS9wb2ludGVyLWV2ZW50cy1vbi1yb3VuZGVkLXJl
Y3QueGh0bWwgICAgfCAgIDY2ICsrKwogLi4uZW50cy13aXRoLWxpbmVjYXBzLWFuZC1taXRlcmxp
bWl0cy1leHBlY3RlZC50eHQgfCAgICAxICsKIC4uLm50ZXItZXZlbnRzLXdpdGgtbGluZWNhcHMt
YW5kLW1pdGVybGltaXRzLnhodG1sIHwgICA2OCArKysKIFNvdXJjZS9XZWJDb3JlL0NNYWtlTGlz
dHMudHh0ICAgICAgICAgICAgICAgICAgICAgIHwgICAgMiArCiBTb3VyY2UvV2ViQ29yZS9DaGFu
Z2VMb2cgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAxNTggKysrKysrKwogU291cmNlL1dl
YkNvcmUvR05VbWFrZWZpbGUubGlzdC5hbSAgICAgICAgICAgICAgICAgfCAgICA0ICsKIFNvdXJj
ZS9XZWJDb3JlL1RhcmdldC5wcmkgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgNCArCiBT
b3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkgICAgICAgICAgICAgICAgICAgICAgICB8ICAgIDQg
KwogU291cmNlL1dlYkNvcmUvV2ViQ29yZS52Y3Byb2ovV2ViQ29yZS52Y3Byb2ogICAgICAgfCAg
MTEyICsrKysrCiBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHBy
b2ogICB8ICAgIDggKwogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRmxvYXRSZWN0
LmNwcCAgICAgfCAgICA3ICsKIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0Zsb2F0
UmVjdC5oICAgICAgIHwgICAgNyArLQogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck9i
amVjdC5oICAgICAgICAgICAgfCAgICAyICsKIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJUcmVlQXNUZXh0LmNwcCAgICAgIHwgICAgNCArLQogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L3N2Zy9SZW5kZXJTVkdBbGxJbk9uZS5jcHAgfCAgICAyICsKIC4uLi9XZWJDb3JlL3JlbmRlcmlu
Zy9zdmcvUmVuZGVyU1ZHTW9kZWxPYmplY3QuY3BwIHwgICAgMiArLQogU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdQYXRoLmNwcCAgICAgfCAgMzU3ICstLS0tLS0tLS0tLS0t
LS0KIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUGF0aC5oICAgICAgIHwg
ICA3MiArLS0tCiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1JlY3QuY3Bw
ICAgICB8ICAxNDMgKysrKysrCiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNW
R1JlY3QuaCAgICAgICB8ICAgNjQgKysrCiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1Jl
bmRlclNWR1Jlc291cmNlLmggICB8ICAgIDMgKy0KIC4uLi9yZW5kZXJpbmcvc3ZnL1JlbmRlclNW
R1Jlc291cmNlQ2xpcHBlci5jcHAgICAgIHwgICAgNiArLQogLi4uL3JlbmRlcmluZy9zdmcvUmVu
ZGVyU1ZHUmVzb3VyY2VDb250YWluZXIuY3BwICAgfCAgICAyICstCiAuLi4vcmVuZGVyaW5nL3N2
Zy9SZW5kZXJTVkdSZXNvdXJjZUZpbHRlci5jcHAgICAgICB8ICAgIDQgKy0KIC4uLi9yZW5kZXJp
bmcvc3ZnL1JlbmRlclNWR1Jlc291cmNlRmlsdGVyLmggICAgICAgIHwgICAgMiArLQogLi4uL3Jl
bmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VHcmFkaWVudC5jcHAgICAgfCAgIDIxICstCiAu
Li4vcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJjZUdyYWRpZW50LmggICAgICB8ICAgIDIg
Ky0KIC4uLi9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291cmNlUGF0dGVybi5jcHAgICAgIHwg
ICAxNCArLQogLi4uL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VQYXR0ZXJuLmggICAg
ICAgfCAgICAyICstCiAuLi4vcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJjZVNvbGlkQ29s
b3IuY3BwICB8ICAgMTUgKy0KIC4uLi9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291cmNlU29s
aWRDb2xvci5oICAgIHwgICAgMiArLQogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5k
ZXJTVkdTaGFwZS5jcHAgICAgfCAgNDYwICsrKysrKysrKysrKysrKysrKysrCiBTb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1NoYXBlLmggICAgICB8ICAxNjAgKysrKysrKwog
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdJbmxpbmVUZXh0Qm94LmNwcCAgfCAgICAy
ICstCiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR1JlbmRlclN1cHBvcnQuY3BwICB8
ICAgIDggKy0KIC4uLi9XZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHUmVuZGVyVHJlZUFzVGV4dC5j
cHAgIHwgICAzMSArLQogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdSZW5kZXJUcmVl
QXNUZXh0LmggfCAgICA0ICstCiAuLi4vcmVuZGVyaW5nL3N2Zy9TVkdUZXh0UnVuUmVuZGVyaW5n
Q29udGV4dC5jcHAgICB8ICAgIDIgKy0KIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdDaXJjbGVFbGVt
ZW50LmNwcCAgICAgICAgICAgIHwgICAgMiArLQogU291cmNlL1dlYkNvcmUvc3ZnL1NWR0VsbGlw
c2VFbGVtZW50LmNwcCAgICAgICAgICAgfCAgICAyICstCiBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZH
TGluZUVsZW1lbnQuY3BwICAgICAgICAgICAgICB8ICAgIDIgKy0KIFNvdXJjZS9XZWJDb3JlL3N2
Zy9TVkdQYXRoRWxlbWVudC5jcHAgICAgICAgICAgICAgIHwgICAxMCArLQogU291cmNlL1dlYkNv
cmUvc3ZnL1NWR1BhdGhFbGVtZW50LmggICAgICAgICAgICAgICAgfCAgICAyICsKIFNvdXJjZS9X
ZWJDb3JlL3N2Zy9TVkdQb2x5RWxlbWVudC5jcHAgICAgICAgICAgICAgIHwgICAgMiArLQogU291
cmNlL1dlYkNvcmUvc3ZnL1NWR1JlY3RFbGVtZW50LmNwcCAgICAgICAgICAgICAgfCAgIDEyICst
CiBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHUmVjdEVsZW1lbnQuaCAgICAgICAgICAgICAgICB8ICAg
IDIgKwogNTAgZmlsZXMgY2hhbmdlZCwgMTM5NSBpbnNlcnRpb25zKCspLCA0ODEgZGVsZXRpb25z
KC0pCiBjcmVhdGUgbW9kZSAxMDA2NDQgTGF5b3V0VGVzdHMvc3ZnL2N1c3RvbS9wb2ludGVyLWV2
ZW50cy1vbi1yb3VuZGVkLXJlY3QtZXhwZWN0ZWQudHh0CiBjcmVhdGUgbW9kZSAxMDA2NDQgTGF5
b3V0VGVzdHMvc3ZnL2N1c3RvbS9wb2ludGVyLWV2ZW50cy1vbi1yb3VuZGVkLXJlY3QueGh0bWwK
IGNyZWF0ZSBtb2RlIDEwMDY0NCBMYXlvdXRUZXN0cy9zdmcvY3VzdG9tL3BvaW50ZXItZXZlbnRz
LXdpdGgtbGluZWNhcHMtYW5kLW1pdGVybGltaXRzLWV4cGVjdGVkLnR4dAogY3JlYXRlIG1vZGUg
MTAwNjQ0IExheW91dFRlc3RzL3N2Zy9jdXN0b20vcG9pbnRlci1ldmVudHMtd2l0aC1saW5lY2Fw
cy1hbmQtbWl0ZXJsaW1pdHMueGh0bWwKIG1vZGUgY2hhbmdlIDEwMDY0NCA9PiAxMDA3NTUgU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdQYXRoLmNwcAogbW9kZSBjaGFuZ2Ug
MTAwNjQ0ID0+IDEwMDc1NSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Bh
dGguaAogY3JlYXRlIG1vZGUgMTAwNzU1IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVu
ZGVyU1ZHUmVjdC5jcHAKIGNyZWF0ZSBtb2RlIDEwMDY0NCBTb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvc3ZnL1JlbmRlclNWR1JlY3QuaAogY3JlYXRlIG1vZGUgMTAwNzU1IFNvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHU2hhcGUuY3BwCiBjcmVhdGUgbW9kZSAxMDA3NTUgU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdTaGFwZS5oCiBtb2RlIGNoYW5nZSAx
MDA2NDQgPT4gMTAwNzU1IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHUmVuZGVyVHJl
ZUFzVGV4dC5jcHAKIG1vZGUgY2hhbmdlIDEwMDY0NCA9PiAxMDA3NTUgU291cmNlL1dlYkNvcmUv
c3ZnL1NWR0xlbmd0aENvbnRleHQuY3BwCgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvQ2hhbmdl
TG9nIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCmluZGV4IDMwMzFiYTQuLjRlMWIwN2UgMTAwNzU1
Ci0tLSBhL0xheW91dFRlc3RzL0NoYW5nZUxvZworKysgYi9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cK
QEAgLTEsMyArMSwxNyBAQAorMjAxMS0xMS0xOCAgUmVuYXRhIEhvZG92YW4gIDxyZW5pQHdlYmtp
dC5vcmc+CisKKyAgICAgICAgQWRkIG5ldyByZW5kZXJlciBmb3IgU1ZHUmVjdEVsZW1lbnQuCisg
ICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD02NTc2OQorCisg
ICAgICAgIEFkZCBuZXcgdGVzdHMgdG8gY2hlY2sgdGhlIG5ldyBzaGFwZSBiYXNlZCByZW5kZXJp
bmcgbWVjaGFuaXNtIG9mIFNWR1JlY3RFbGVtZW50LgorCisgICAgICAgIFJldmlld2VkIGJ5IE5P
Qk9EWSAoT09QUyEpLgorCisgICAgICAgICogc3ZnL2N1c3RvbS9wb2ludGVyLWV2ZW50cy1vbi1y
b3VuZGVkLXJlY3QtZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAgICAgKiBzdmcvY3VzdG9tL3Bv
aW50ZXItZXZlbnRzLW9uLXJvdW5kZWQtcmVjdC54aHRtbDogQWRkZWQuCisgICAgICAgICogc3Zn
L2N1c3RvbS9wb2ludGVyLWV2ZW50cy13aXRoLWxpbmVjYXBzLWFuZC1taXRlcmxpbWl0cy1leHBl
Y3RlZC50eHQ6IEFkZGVkLgorICAgICAgICAqIHN2Zy9jdXN0b20vcG9pbnRlci1ldmVudHMtd2l0
aC1saW5lY2Fwcy1hbmQtbWl0ZXJsaW1pdHMueGh0bWw6IEFkZGVkLgorCiAyMDExLTExLTE4ICBT
dGV2ZSBCbG9jayAgPHN0ZXZlYmxvY2tAZ29vZ2xlLmNvbT4KIAogICAgICAgICBSZWJhc2VsaW5l
IHN2Zy9jbGlwLXBhdGggZm9yIENocm9taXVtIE1hYyAxMC41IENHIGFmdGVyIGh0dHA6Ly9jcnJl
di5jb20vMTEwNTQzCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9tYWMtc25vd2xl
b3BhcmQvc3ZnL1czQy1TVkctMS4xL2Nvb3Jkcy11bml0cy0wMi1iLWV4cGVjdGVkLnBuZyBiL0xh
eW91dFRlc3RzL3BsYXRmb3JtL21hYy1zbm93bGVvcGFyZC9zdmcvVzNDLVNWRy0xLjEvY29vcmRz
LXVuaXRzLTAyLWItZXhwZWN0ZWQucG5nCmluZGV4IDE3ZjUwZWI2Y2NhN2I2NGQ3NmQ5ZDM3ZjM0
ZTkzMmYyYzJkY2NlYjkuLjFjNjIyOGI0NWI2N2JjMzVkNjFhNDZhNDE2OTI2NTg1MjkyMDljMjAg
MTAwNjQ0CkdJVCBiaW5hcnkgcGF0Y2gKZGVsdGEgMjczMzMKemNtY0ckYnlTcT8tfGo2YUJgd198
c2RQen53NVdoNkJ7amVocUkzLSk3ZjREWS0zPTw4KHcjJHRRcW89MDV7bUdpCnpxeGIhTHAxc3o3
LXU9ZzNkI3lvNTdCa20lX1VBWmA/fWE9LW4+O3tePFl5S1Y8dV5BRzVFZHtPeWJsKUA2KlYoOAp6
RkBmeylAezk1YnoobWI/TVQ5NkB6dEVJdjVuWUY3eHJrPW93cjh+cG9wQmVwJlFnNGZZPkRgX1Iw
cEYjKnV9SFIKeipuUGclJTI9dm5oZjd7PzxyKC1hS2hJWTYkRF5Ue1RHdTl8PEppfChtaSlQYFR9
XzhpY19DITNaOCZVe1Z6K0xpCnp7ZHhJeDVtNT9TTXM1YU5KJmB6JjdxREFzPX5fWVJEfF9FU3kp
eWk5V2NKI2Urbzl7MmMpWlhLaFZLbkpvWEJnYQp6Kk8mQmB2eERVVTx7dmA9cUpSR2Z7TW10e2pA
SkVkS2pxS3dkZiVYeUB4RUR1N01ZMGcmK3EoU3t1dWd5YHRKWWQKekg7NFh6Wj49JkpvbkY4XndE
eD4wZDRORUMkSnFWSDdUbz1LQk5OKFJycnVANWA/dVlrNnd6bT12KC1QKGQpMTJgCnpfQW1gI0Y/
YkhNeykmKmtvTHQhWnhtX2FNPXk3YEFBYE91QFdmSDxRP1lFNWFQZDlEIStAT1owdWhVQz1ISGRD
fgp6JG5LQU9WVXpnNWJOT349MX5JdWsoUHUtT0ZDUjQ0ZXhKP0BMbCp+dTx+fEtnempvX2BjTkR7
RXQ+ISRCOXQqaGEKej1ybXJnI3Y1dFBiZ0wqUSs+aGV0elBMQ1ZUS2xTUEc9UXghVFYlaTdtNilJ
QWUoIz5HXkc4OWNhVjNUflc/bU51CnotUiNUbTJrLWJaMCZnVjZUdWNBVzNLYj4xSDQlRC0jXztC
TldJQ0lSSi1iVkdoTXo4RyplWEJPSmtIU0ZzLWxtKAp6S0IxdHY0KjlEN2Qkb0JZSmRVclJxXllp
VUdjUUBOLVUjfnJeO09nUG50NEd7SE5QKHc7ZUMkY255ayVscEchXl8KelFZOUUrYGpkQ01EfjY9
TGFXLUVadTdTNFV4V3klfjwyV1JsNTclLTJga1coMSpGNDlpMnxEaihPSFc5M25lT2N1CnotKWom
UFRrODBUI1NuaSNmX2I/QSNAVVhyPDlFYD8qOSRFXkUtbF9AKXBOVm0tKXQpR1htdUw3aWJ8X3Jy
b31kPQp6dnQ2YENTbDNWeE1oR0o5cTw8ZXI4ejVGPWl+NURYM0QzREAtJS0mfWNVZW9jczZPPUd7
ejM5WXE7PkhBd151STUKejh6VU11bm9tU0tpKStgQ01pN3Y0MD1wZ0IoMWEyNm5nT3ZBaDBmUloq
M2pkNzY7akxuMDdqZzJgLV5GV1dGOXt1CnpnT3RTa0pWVmRPUipzVH1UZFNIeWBKc1pKMjlnaU5n
bml0bGV4KVlzSkhgeGQmSVROTiF5ZnNJOHFFKGR2SkxnbAp6T1J3NTBvRl9aOUY8aklIY3dqRyE9
ViUxTCN1NGtPN0hNOFR0c0VFcURVdiRMVS1VeW1aSDErNkhgZ05OMjtSQTsKek1vOWhxa1o0Xzgr
bipFdGd4WCl1KjdMQkpFbi1sdlAyTENCJXs7fGtrdHcpSUNiVHF6KktPT2YqdSZOOHtrdnFkCnpf
d09RSkhKJndgT2sxemJJMVV4elhpITt3VlpPJVhgViMkemAtISt2QmBmRGxNfk48LWZCa1p9X2BO
bUhnUyhBTgp6bXZQNypsMmY5IXBgcVAkMiN0Pnx3RFA2Ql51QGshPnBwJmZmYmZpNmRxPEFUOUt3
UTAoeSZvQClAZHd9IXBMKV4KejBnT0czTnA2Rj5nc08ycDRsek87NXt4R1lGKGFrUURzXmpwS1RA
RFR5SFZFWFJJPykjbG5CJGg3U1Uza3JUMyN3CnoyWWkoYkpUIVNFRjd0MHJFc04qPHhnMG98IXRS
e2NtVlQ5ejN5JWA3SkFOTXlGKFM8VFJaUXJJKmJMYllla2x5fgp6Sj4+Q0kpMG9uQ2k/MF4xK1pI
aURJQnRLd3RjRU59YS16JV5MJncpX1g+Iy1FUTs5b3RoN25gSi1lP3p+ZHgwS3kKeis5ZiV2QHY9
bkBuVEN0NTRJQTxuISZGRU9qciRYYENVJDBFZnBsdlB2YXFhe0NCKWZjcHp8RW5RQnU2ViEjaUVP
CnpSKlpwWG52V3MpJCprLUEySGFQYyFoSV90YHg0OWBwYFdGJmJ8KSRLNWR7aCUzSW5JOF5SMHJD
ez04KEhtam9nVQp6LXQyaGpOVFBhSzl5LVZBcWtlJTEoZTEodEw5ZUpRPDUjUzUraFNAMndiaz1w
OSFDU2heWVNWISNAYGM2IX0kV34Kei05T3lwNmcwbmB6SVdLeGFCPGtUbWY9ZTxUNGBJbU4tcHFn
cnZrRTBRQCtsUz5Qc2ohTmVpYUE5KGt4JWl6cjQpCnpoZj1gRFNkTyl3S214aT9qPGM0dUtDeWRn
WiUlWHtwQyh4c2tEUGxvZkEta1NqWmJvJkx2JE0jKCp+ZEEjdjZgKQp6UClOd2pqcH1aWEMlJnhU
dHk1SnA7PU9ZbkVBanJjQzZuKl5uRERLSnl7MkZOUjJDXlA/JmJASmllQT5famlYJVIKem0xYzt1
dyZKWSpZJlJpSnNpemBUdXNtVmVZd2pyU0lZQ0U2ZVolcUwpfTBreVlKUmh6TThgcVYwV2lFPz87
SDYxCnpJezlZbnsxdFBLVmcpVXAjWTJsT2hmbUdAQnViNDZ7eUB3THBMd0F4RTBeViZGeCRmbjZE
ZitMMV8jQ3NMS3VlOQp6YVVkOUM+blY9bWRII3JSTTFpJlF2bzdCckY5KT8lWEY8RyQkOURJITB7
amtgSldyLTlUem9MZE9VSXN3N2otdEEKejFROWRzKDBsQTtCNG5nUTVLLVNWV1BPalIrciRHISl1
fHAtTT40PmBXRVM5SHBtRns3KDZxSnFeUElhQE90b1AmCnppJjBWbGRvcGB5VmNFRX51NDdBOUxs
R3kmbjhAaCRzPjcoVnRlfFljcEZnJU80dDdNP0ZranpgbXNVIXF6PVJ4Zwp6XyMxM0JAKzBAWVhz
VSVCJmUoVTthaml8S01rQHYmSWd1SlhFQzxCN1d9Vjd8Z0pSby1UQV5Fb3ApUWsrcipxJDIKencj
TnI5NUJxcWkzRV5sUzhkfm4qcVJeTHVgaUt5ZEFkNjAzd1l9d0xxQ0FaU29IUkc7bnZgeSlHfGEo
eDlUT1o1CnpDak9Ca3V0R2klSDZ8YjtEQ2E4Z3hwUShsND96PTBzT0A2VGVZPEYrdkN4N3NxP3dn
PnZBSXk8TEUwK09uKG9qRwp6cF5KKTl4dzFiIUBqJEZKSiErRlVXUGs4YF5WUXxnQyg5Q1FDeldE
N0NUWWh6T2VOKD16c2lqKilze196V3ItakMKejFjVjwtPFk5SSE2bUt0eSN2PypOPnFBJCs9N2w2
VDRhZ3NeMTw9XjJGTFU8MUM3Y1VuZlY/Skl5XzZ7X3RiWUhQCnpfPFpJX3o/MEl5eUA1NGg7RHtY
NFptRHF7UmJpWERvMHJnYmBKKTc/O14qOVp5Ukc1PS1sY1htdF4mMmZVZHJZYgp6OGBTRzxpWWhE
fmw5cUM2ajc5YD1JdE1MRG9VY1RhUGJ9dVJlI0NvJlN1VVlXTW4hIWk2R2xZOWZXTnRGTz8lMjkK
el4+QjJvcy0qZHt1SEs5UmFeR01hKDlBPjZ2UjNpVENeUiNhelBUTHdJbWVhV0t5SkN5LXVIbzBZ
U1Zyaj8jUzwmCnpMcCZJQExmWFErZUJ3NHYoNGR7SG5HZXY2VHhYcnttMXdxRGlVZGklUmspNSNm
WlEkbUpvZ2p8bm8rcUJEbkIqUwp6cVFAcGI8aDAtJEB8YiZvVHpwcUJiaG5BNU59XmVyWEdRbkQy
S3lVcj93U1IzaHp1PzR6YCU3QD1vWHYmTnNkXkwKekRMciV8bXRHUmR1aDJIOERVQU1QdWV3aT5f
T1I3alNvckdWJGEtI2FDcClPIVpXb0xPKTFSayVDMzMhJEtnbHBPCnpxVTRuK3JRYl41Mit3QEpT
KE08aCt1SEExOWopamBqOFAhaDF7TVAmMT4/ZktQSVZpZURVRShueXdxUWNybn5PYgp6I0VOaUx1
QnNSKShjeGkyKlk4YSZUe3ppI1NpbT00KHliWFY1P18tV2NeKzh5ak58dmh7Ymdzc1owK3lvWk83
eEwKemtfPXdgRWJIRm5sT2laYG9KUkF1STRJSjczMyokeGdGUXkjMCNofSl2PT97SGRhO3l6Iz8/
I2VFQn11JT9BNjZTCnpxOXZ0OWRiYjUxdX05RWU8MCY7QldFemFsRXgqZnJkRWktYlhhfldMKHBF
WHc1Sk5BTk1OPz0rKV5mRjk4ISRfJQp6M0plSEY/Pl9nMmhiRyp0MTFvPSstfiVUNjJXRCFZZTJM
YUhTZU5jckpvMmhMb2B7IWBUbDBvZnNWVXFJJmB5RDsKemNlSG5uQTtWYCt4Smh5S2RvVT5gJnQl
PXhIU1V5M2JrSjdmO1pvfjE8PEwwI2BNdFo8YkleMGg8fH1jU2Ffa19PCnpRVkY/LTtSJFFxeFZy
cWM9UkFscks2QStzV0JRP2VoOTl9ayE2aldScHppVk9geyY8JT0yUChhdShpZXFaT2BPUwp6cDB2
PT87R1pTaXhQNyloU3UlWnhgMlBGa283I0c0XnNWRHFpPmdQejF6Iz5rRntlWkwrZiF3VmJhNHxM
TVVfdGwKenZHansoeXJ1YCE7e3hqJHFgVDdwLXRVT1JPMEtwR1dVISN5YzYjRmtvbHMpbWQkMylj
VUlGZlVWOF98a3UpfX11CnpGbDsxXmo8Mzw7d1RHaW5UUCVaRWYtUEgtREw/Y0A/aVYpUVJ5Un13
TjkmaFA/QU8/RFE9Kip7Rm5vUG9KKkNMQQp6czZkRmIrJnkkQ2VSO081SUw+QilHMiszV2xIVnhZ
PDE8SWRTKVU1RjhORkZjJH1AdC1ZPDI2MHB8PigxM3Y0RW0KemBBaUc2Jm54ZCR3PUBFQmV7NVhS
QFJ8NStqXiMoQjFeQyQ/RUdacSYhSWtIe20xZlEjYShWSHJUIThnUXorPDtJCnpVcEF1dSRFVHlF
Kncjdk5kUH09cChMX1Epez1IJis5S2okbkZMOGJ8NG1xMlo8WEVMN3ttWTchWml6aHZoaEJLWQp6
QHltfVBJZm98OF5vZW8mWjBWbG12aDh4dkR9cFJ6YUw+ZGN7NTx1S28pRk0pdDdiNlhxfTJNQDFp
bXg7IUlOYF8KeitHaT0kYGtFPVdxYD8mVT5ZIyE1STwjTHtPV3liVytwbmRSNiZwYGtyWWZAck5f
azAlSVRefVMkPkljN3tYaDEhCnpoQFVUb0BNT1Z4X219MHxjZ25nSThIY2dHOWhKYGJRYk5iTXNj
KjNkX0xDKkg2SDMjNWhRNEd6cTltOUJ0NiRZQwp6ZXI/TVJKMDxCWDg/SzZQeF93bmkyS3VmdUh1
Y3x+YmFlMCVvUnNrJFdNUD4/Z25eNSRxMEI4MENxJnRDSTQ4dCoKelluRzNuRHBUSUAhKDtjfDxC
ZkA2d0E1aiVIeCVMWVVOcHwhTm0qVkJ1TDw5OFlJOFclVSVubzhCWE0lMWl6MjNoCnpNcGowb2A/
fW5jJlNBaT40SmEmLSpPfFo4UjNjMkJwMVZvaFdXOCFWOWgmcH14dFQ5XiQ5b1lXVm5JZGRxSFQh
Qwp6SDYmUlVzSmhvKD1VaFduOCt+U053ZztBSXtuQTFVKEZueGM1JjJVQkhtcT5PcnZKRllUKmI8
ST9VMjszamc1cjwKenREb0AmI2w4fTJ5UnxPZT9sQio7WmNCVjVMXzA0WGY1WE8hPXE8Vl5lTT1w
bzRCYjZ1dUwjdDdYN3FgWGUzdm00CnpILWMkWU1oYEJjKTY9RzcweHNlKyY4dCEkRzhTXkdYeXFY
aEJzJTdVXjBmKUVmKkkhdDFNTVFTSGAhXkN5YyV5dwp6QnpYMHM7X0NkSk9EYT5vemJxJitobzla
TSQ9WXtjJj90dDZlM1pCMlpLaSshbyp0IWZPWTdtJjBOVTZuUE1xTXYKejNJKUR0dEdxPFQ1fiUm
IWJgVnB6eTdpK0RwUlhtTWNRenotdG5iVit2anJRaiUzYm9GLUdVbnRLVXkwdTt2OUg3CnpXbWZB
cVloQlY8aTA0YXdeTG40ZmVxZDxVRH4/ZH0oKDlCaXgxLV9tTlpJP2FrQDlUTHRrNzR0N18yQyNi
aj1lTAp6IWRpX3pTKCErK3MpQGRxQmc9YFpyfl5BaVQ9O3hmMS00YFlAUWQoPFVMLT1RcE5yPzx6
MHFCPT1WcTF+ZUtEUHQKelM7SGh4LWo4QyMka2xLSUVLNl8yIShWRWhEMTdHNFghcDJ7UGdpN3ti
TjZXSHE9UTdRNSomVz1yTWZTN1pGQyhoCno0bys4bGBrM31+MzFEZmI0ZTszWl9eOzxqcWtSUC1r
cnV0SHtASD8weklWfnM/aWRBTT0kN1l5bF9mdlF2MHpBeQp6SE9Udkw/S2xReyh5fT9yeWBQY0dx
aVZTRjspT0taTCVBQHIzKTtGcW9ibUpCK21NYSl6NWE4UE5oLTtDPkNiSU0KekxwUnR8VF4/Uytu
UGNjMD1gTCF9QHNmO05SPlk1USF6X0wxTmRyZFolUW5VT3Z0U3FkYHlyemZZNF9HKnFKK211Cnoj
PkU9OClfbnshYm5hUnM5dDcoQkp7eWNrISQ8QkI3U3d1KFdMYVFCaW82TjhgWlRZIVIhflJrYTcz
aV4rVjhTMQp6ViphND1hUV9keHE+Xn51Nyg/Qy1GZnVGQzBmQkwlVSp9fS1xIWBRYEY2OHhjbjNS
NTgoV2N7dUI3WT5nUyt9Rl8KenB8ezNOMjBrbnA4NzkpeSpUOzBNSjdeaiVRSVlvZkJ7Q3xPeypY
aERBfUQlbyptUVRRIWVaJXJSezEpZ1RFQUlhCnpDcUw4fDZIQj1GVDx6TFZ0P2UzKG8wTTVnK0Zg
fkJ5fERLQ0ZfVyh7RG53MzQrRHRzZVpVSXoxPDgpbl8mZmZWaAp6K2o0aXwtOGVkYUIpWmxjSkIz
KUBuMzlsaCpaNjRPVn14P2ZHPz5acG8zUyNodiFRIyZaUXFGTmIjWF8+PVdCQnkKemgwKiNNYXQ2
R0kpQXQhWGstVVN+Ynw8YGZrWFBzZFJ4TyUmSGFuaGtkbkUzKyQwaH0wO0IkZ2RwVk9oMi05UFhr
CnoxTG9McmZTIUZDYyY+SDxvNUVYcnh4aE9nbjUkVW8odj5iZlBwME8oJk1icURkSlRfWVNOMEtB
NjU8M3V1WVVTUAp6YGJ6Qmd6ZHlLbmdJZXN5PmBmVjYjYl5ke3JSZGpXPWl1dU5eIzdqZnwzfDJn
NTVJODtWUzY1ckQ2TXJmSyVzQWMKenwzbUN5Z1BWK0t3fEUyZzZkV1ptQFNuRTtUQ1k1QDM/Wmok
SDE2UFBwOVM7JTR8Xk5iSXF+NmdSWXAjRTl0e2oyCnpJWjlxPj5Ed3pmX09pcz1QMWZWfWUyP3Fg
dEdiRUh2PXk3Y1VjPUVBYn0tNH1QUX1wdUtBekA9Xlk1U01YSVNWfQp6R0ZFWSp7WUp9aHIzfjBq
JUp4Q15vVGhEVkhtc2ljaW8/XjJpP0h8Mj4jS1hsPWk3YD5sYm44ek0hYDN5dkJ2e3wKenB6P1pZ
ITNrbjVUenI+VFA1TzdgPTZyTVdseF8zeHsjR29lKD4yJGZ1Z31Mdl5jQEdfQ29fJn1qZ3YqK0l1
Y3tBCno2TnQxKG9HdGo4bS1uKDNnc1FqY0hnMEZrWk5fX2h0MmphRz1zIUdwI01zfXY1WjhtUHJ0
NFk0KFR+fDNocl5UJAp6Z1dDYFhhejVyeiojQ2x5MlVfb0NBVSk3T1Q+bmVYb0U4MDl5OyY0SEdY
VCV3PFR9UF5qXklwP2g+ez0tWT4+LWYKelR7MGgoSmV8cGxEVSRUeG54bEl4WDNDbXF3cXo9fjk0
ZTNgR0ApUE5SSkxWK18yV3NpKTlwdTRzVH1jIzM2R0o/CnorayFyJkIrYnY5TmlpRUElYGU8Y0BB
WCkqe1RNMHtwRi01TmhyQClRXlBKfjFJREJzRkE2O0ZaSGZMfWFSIzZZcQp6RWtfe31LOE5ScmIr
enUrQDdaKlApNm9uKThSR2tyNm1MOEN5VGl8c2R6fFU5dn0kKU4tRVdUYGtDX18jNXRlMmMKem5M
KzxQYk1FRl93dUFuSD5sREpAcEBmTmBMWlJRNG89MyYmeXxMdTsyYWVzOWJ+V194bTkhRmFlZz5e
O3BIJTIqCnp4aWZrJCFFcSNBdD9JS0djdFl8U2ltOVFlVVNEJkBLR3s+fWRCMTYpV1k/Yz1qJDhg
N0hPSjtzbDZMYjlBZ29hSQp6NlMwcXB3b1R7I3BvZW1mMkVXPFY3Yk9ER3NiQU0zbH16T2p6KUc/
JmZtcU0wPUhKbEM4Yz4/fWZIWUd0eTY4dTgKekVKZXo2aylQXzRIMDMofk15T3dTLWprJHI7TmZY
bUhAIWdwUEk8X25Ean1XTnYtUkJrV0UoTEBmVyEoMUpkTVhzCnpqfFJvfTY0dWleb3skfT1ALSpo
MHFUdGpLczd1S315eXoteWBubVBteShiYl5aY2x1LUNWTDkoO3IqeCtiR1lRbQp6V1UhU0YjNXJ7
Yk8rdzkzX3YmbiEoNk9KZEozKT82QCk+O0F0e3J+PmthcSlWWGZKTWJDcDgyNEJkVXk8UXNOclcK
ejJTVHMmeV9KQ08xd0tgeDsmQGF3Y31WKDdmNnQjK3Y0dTB1JH5tJGR1PGZwWk1UJmh1RWRjQlIq
NXA/dl5qPkdNCnoqdD9mVGRPczBgT1BlaW9YbVVxXnY8XlhZWjJ9ZTBoJDJtKj12cVIlPWpwN2cj
eSkzbElXcCRDdSpNUkpnY1pVWQp6NFliJk5KRW16WDI4RSNKVzEtazRAdXNEb1BsUlNzcjx+QG9P
eClKVz9nKGUlIXhWZmZ7KkhkcF4lVjJuK1YlVEcKejU9V3VJMlZqRDJlSW9SSDVzOVRBeDE7TUUq
KEleckM/ZkByIVB5KXB5VWxDMkFSfSh2YT9Qc2UlTWtQcVR+Mz90CnpyLSRCISE+IX1mdy1rZ3t3
fk8+cmAqQSpUOT0zK1JmNks1TChwRWFVUkpDMzdJVzBEI2RNPmAhcUxCXnhjKnFFYAp6TzIpeChL
TmUlK2lSNiFHOURSQW1ZM3deYUpkT011Sm4+YC1ne096M3VAUEJocm83QG5sOSl5KmM5OzlAZ2Y4
STcKelUoS0l5MSlaLV9KaWRQUWp5TiRrMEA4OHtfY1N9M0s/V0w+XmFoUzJkMCMxe0ItXztXN0Je
cjFiVF5YSCh2b3M9CnpzcnNyX2FSP2k7TXdCWmdCR0wtV0A4fnBwe3BMKkxTPGxmaGZqNTRwbGsl
Km9rRCp9PXNTOyR9eHRwSklFMF5VKwp6UGZ1LUJYMmtsQ3VmaTctZjdDa3QlfUpzbUV7d0tLenpf
PkBWRnlKaWtlMn4hdHc7Sm03Vz9CYll7U2VWSmVEPz4Kenl8OVBlIzhmJVV7QVBoUG1mZmVWWnx7
RzIxfmsoamRVNSYpSVB6MDZ5V0R9PHMqaWhYaDR9WiV2MXVAPjJmYGAmCnorSUdTNHl0ZlFHQWlM
TV5pXyY7U2Y7TkdYKjgwI3hMS3VwYU1kaWZLUExOO1REWSZobDBLIzdOSzlaT2srcXhacwp6ODE/
WEpLdGxJT016aWBAN21rYlYoez5pQlc7P0kxYVYjKlAkQ2sqS0h9fEE3UCp7RTROPHJgSHcoYFps
VSNpTW8Kem4taHo4MDJJTkF0P045RWRpNjY3ZU4hfkg0SHtRQUhIKDx2cztzcCs4VXh2X0I/P0M/
ZihJODdUT2FkfTtrUVZ4CnpIaHhCe05xd0JLWEpqXzs8Zk00PHMqSnM8R048WmQpR0BTfTxxZWRR
Sk1rSkdXWXtpKTx9LSFNKD9IYmViTGlqWgp6VTt8cExZOz8+dVUkJEpxciEhaHhZcVBaZ2p7eXYw
KCNMVUZSXyg/VzFOWDxROERUYGM/fVZmentzT2RuJXE1c1EKeklTOGIocVNKcy04bzI1KHFBckJR
dlU4O05YR0B2S1FzKm49Vk1IU0F1fE9TQntqR0E8SVl0TzRRP3JLciQrU01HCnp3QGV0Z3J0Ji03
NmozZDE7QWJxIXNlOUtLOEg/NG5IMDJafm1tLUpncTBSMDV3VytXNVc8QGZEYW48ZzhBdEJ6LQp6
KCFmdWAhc3lNOVNUNnctSStNWUdtZylsRENhZVB8TzdiSllWTTZ6TzIhOV9iaispdiV3MHV7I3Eh
MSlVe253T1oKej95JD1ILSQtOD0lRnQ8YjczJllTTFFuT2lHSXBPOHl8aFN4MSNIbCFmeFlldlhW
c1VkPUUlRlNyemlPQDtJWXFCCnpDajQ/fUZ3eiQ2dHlHM1NGMiZLOUo1JUk3ej5peU0oVkwtKTNa
dXJUS2FgJCpCcnNxYDRfKDsxekJFcm1uMiZ3Nwp6byFAQnFAQ3BIVW1VfklMPnRxQUU7KGlFRVE7
bUs1OGZZe01AX3pnQTIjTGNXU0AlJiQkRyRpRFpreygpYFVzMnAKek5hcj1SVGd3dEAyY0N5I2km
SCpkQj9GTFAkezZ+PikpWGlWMVUxRSkhe3YxMHRPPDRrZjEwVGxHP1BWaVkje0Q3CnomMHl2WEtS
U0gzN0F4KSFSOUU9MyRBZXJCeHA+JmgkSjYrN2BfODZseVRgam0wPChfMzdYRVh2UVFSTXVgS09U
ewp6QnElfE5MSFlncz1iTk1IanskMUFSWnAyMD1wPjhrbzlUKFpEQmo/MWAkPUgrXzFsfVAtPXxg
R2NOem05PSZEJGMKekh5bWApVT9SJmNoU0ZYeVgoaWh2YD5uamF2aFJBKyg0diNhKCYpbX1OYUlU
d3c/YG0tVmFIVVlwOSojMDVAMkE0Cnoqc2NkNzxGdkpgZGFYeW5QRik+RWoyUiFNPm9OdDtDV05l
az01NWw/QiZqJDE9dnVOKCZwdiN8PTZnT3VCRmZoWQp6aX1Bdms7JiVKNm1+Rz9lTGtfRHFNVTV4
WkFLUUx6UFBFKzxeMkhHelVBY0t6KHtPcyVPT0psbj5tbXNBNHlTVyEKei09fk5NaSF3e20hJT5j
VVpleHp9RV4yR2JfRzJGYGRSYHpLbXZMMHp6MmB4eUEpJH5FWkBfOXFATioxRHVtaSZHCnorcnhN
ZVY/RE5OPDtYXlZLVFJ0Yzg7IXpEfEYhQHJwNnV7cE5BYmZaeHVIJkJ5bzA/fjZtVk1hayN2elkk
JVJsQwp6UGRmPVliZkdraXZ8PUNzUVJsYE1IQG9BMG08WCVmPH1ediVkMzcrb2o+Z20+YXgxMTd1
VD93Zmotekx1VERwYHcKejd4TjxwdiVNU0hCPmN+R00rI2cmenYqMHNpcGZMK19DeGRJeTl2OTVf
KW0qNGxgTGI3ZHVjKntKVFR4WUdeLUk4CnpPNklJUk04K2dwP2tILX1tdH5DSFJrU1haQ0Qxb1NP
JENMJXNDWXZ6WEpXRzlxWlozc18hVkg5Pm5pMTRJUFU8Mgp6P2o/c0N4K0pGMU58PSphMkJDTV5Y
ZzFZOWVQVmI1NUV7bEtVS1ZqO2s+UkZ5UzNgZ1lmKHwrPCshP3JMblh3OFUKejtrfHBeXyt3bWdq
ay0kZFpXams4cC1eR1k7Oz1+IUF9KUJObClGcClaYV82KGoyfEkpJXBKV2xKSTJrZCg7Yk1uCnoz
e0lPO2F1JFVaWEN7bDUkJWRVOXB4ODtHQ1hxU09RS1BoY3lWIWFQX3pSblExY151RWk7X0NwenFz
WV5PTTRwWAp6bU0hQU1OTzlWeSVHRFl8byhCcSFLPE0xZWpwVzVuPStGeF9iSGIrSCZZYXpzREQr
JTNYNHk/eVVKdEtIPmxYMnwKelhkblFTTGJ2d3RwflFKdFAqbSN1ME9RUCp3V1pDI141RmJIeTE2
dnk1Xj1QZHBUMCQmTl9wPD5zSXtvO3Vve2NBCnokQH4/K18hbDxeQXFCeDZiREQrNyp9LW5oTGs4
ez1zbCY5K05DIShybDFyI2htOFgqWEZpaypPdCptI0xDNjUxVQp6ODtsSGQ9Qzg4IWo7QiZKcmpw
Mks4Ym9RI0J0I2UqdHtqI0tuTC1wUExxVmtPRitPRy14UnlgM0dMMiRBXyZzIXAKenV9flo1T3Nl
YkwkMWNyQ3hvV1A7TG97dlExaD1GdGtzWk9ZTjc/ODlwelNofHBZUTY/QHQ5Z2tmTmxeRXAqPSl1
Cnp1b2hmWW5JVipSdG9aJFdKKUwzSm15Tj88XlhgaSZXX2tRcjwxLWZnOH0obmNVUmRkc2JHQU9i
RTtIc3B7dGF4Vwp6cEpIZDxhfjNBUzxUM2ohQ0BYcXMzdTBAdmd2eEtfN1RVfEJaTktTZWZhUzhp
Z3o8Z1hrOSktKDNpV2RvVHptLWQKejQ9c0hlJVI7UG1VJVUqc1Y8KncyMncxc0oydFFRRCZqUVFr
Z0g3bUpiOCptQT5GRDBkYjdyfXojTU5MPTJNQHNHCno/WVF9TyhgMGB9RSoren0qOGNxK1Ria3Rv
OXh9IXxifkVAVWBLOEtKYUhQMzc4emZ7QkR4ezZmbURGMEpGMWtQXwp6Rz0rPn1teiF7OFR2Vihl
P2Bka3kpP0M+NGJCTCR1SFZCbE8jMmFTbHRAbytGaWpofGFnQlN8WVRAQih0bHQ2NSoKemUkQzc3
eE80NT0/UTFJWHZkPEtIOU18OSR4bHVNaStCTG07eC0jQCR2V1RFTyFFe3licUVXXmk5KUlgVkhP
YmY1CnpCOH1mTD1xbn1Rd0U+Pl9Ua0V7aUlIdVI8R2tNKyN3VGRJdDEjJUlaN1piaG50QjByU29M
TyRIQjYhTDc1OTZiVAp6Ty1WUW1nP2IqK09nb28lTXAjMGY/SmFFI1BhSSRgUlZIJE1zeWE3MU9f
WmxaRThTQzVLNF5hWXVefX5uJVQmI2IKekBAPEF2Y3BRKVcycXBMRmdxQWtiM29UdG44aDR8Rl88
K2AhWiQtJTdvcDYtRmN0KDhRZSpmQXdXJFFQS1RaQXVHCnpCdHFDbVJYK0kmZFZMX28zdUFpUl5O
IXZvUDR5dnplUTxmMzxIOHp9QEJOYVplV1ZyP3E7Q2EoYTZ1RndrRUlDYgp6VUdpSnMyWX5kWXMh
VX1KOH1TMjh3PispJGU/e2dlPCNlKVZlfjM5NlpLOTc7USVrRElsTXZ3WTJZfTBeMkwqfTsKenpj
YmBHKDd2Z2drWCl9QHgtbzFneHx0TDBCcitRamhJSzhPZm0hJE11Zit7RUFOTn4hSHp7ZTloTkVP
U0FSQGIpCnpIN31UT2FTSjRCdkt+PypDcHVyfUdeRGNkYUFMZ0FSUUNOezRCdEBrWGlXJUY7R3Fu
PUJYLU1ENFpYQnp8MjZIagp6Q2kmVzleZjJhT0F8XzdsK2pzKCo2ZTBBOXtwKXBvQUM+JU1idms3
QT4kYjM0aD9NVEg0cytjZj4xJU9eeT5icHIKelhMZ2krcSt4JnpSWTAjSV9PQHJMY0liMm9veiVF
YmBpKi11Tn5WQ3dhKzIxTG1SK3dRO2kjMSU/IXZlamdUTjc/CnpeWVZ0WiNsYHYyXjgtUCpDeDdA
XzJBd1dVclhFbEJTN2U2SCl6NjlNdCNsflc+bUxpLTUoQXhmOyZuN0I+dFFyOAp6dDJAMXFPe1Z8
T1hzKVd8dW5VZXcoZCY1NiNKbTUqMWZJIXhPR2VBRmctMl8kLUcocTBLNEBoM3xKck18MXU3fEYK
enI+TkozK1l2eVI9TldYTzRtayoqbT04PnJuZn59MFp7KCRHJiVua0FvMGgtWHV6eGZwb3ZkeTJN
bzlTaFVueyVjCno0dDFjNjZCWmN1T0V4fVEzfW8yU2pkSFdIM1hFZi1ad19yKHdtTTk/Zm4tKHhl
cT5OaGA+NGN9JFdqK1chZSZPcQp6YVQ+RDlQWHZ6SF5pRnZuX3U4anxWdHkxVzBsNW1eNTFjKzVv
NFFUYnFTcFY+K2VSN3UrMCtDO3RTS0lLMWRkZlEKemFOeUBJZkc3NnVGM1BQbjJQRE4wPSYwb1VZ
Jm45WWVQSWNweU09a0d2ejg7VVFnUTxoWjFwfDlMc2VAKT8maEgjCnpRZm9oNWs4TE8xekVGVT45
Sm4kMkQzV3x3SkdaRn0/SnElSy0/KlpGZEs5RXomdXAxJVFgKEJUMjV3KlliakM0NAp6X2Y9VkVt
VjchYGQmZiRRcV81fVJiblQrRHB3I3okbihRPkhAPy1qQWUlaXxiSmdUaEFWUDFgZWR5LWhSY0hY
K0MKelZNNl84KFUwUjIrV3RhMTxmd010ZjIheU95ZWV6RzttY0Uxc3xHcmskeVI7T2dVKXdXJW15
ZkBTTGowR3M5JSVhCnpAVHAhK29PWERRbn1YUiVVczRRdHZBPl42TlomU2RxKFZtMHg7VGdBLTFm
ezN5PmN3aUltQ0ttZSFBRFJ6VDJXZAp6OEl0MDhXN3whUjFVVWp4PH1FOSFwQnZlaiRicXs/ZXhs
JUMxMXImTDFTTD5pQnJvQD9zJjMjJGp1WmtISzU/WXAKemIrN284RXohKVJzXzk9Tko3flNfeCY5
LU9iSWBvfkQwZT0/Yk1lNzQzcDFJKSZBVXBabFNoNmxzbjRge2FERHslCnp6M1d+UyNxcW9LO3BD
ailhciZZZGgwaTtxdC08SFRVcSZ3Z3w2c1B1UStgNWBCfXgxRGhORDRxYUFJfTBoM1lvKgp6MWJD
WHh2SmUwT3ZyRXJqdWwmYztGODBOODlIKUhoSXs0Y34hMk9fcHVnT0V1X1dOIWl7WVczbVk/QVlo
emVORTUKeip5U0gxI1FhREl2RUU0flZFKUszdmc2bVRhUGNmMy0+X2NAJUZTOzVxRGNSJTtne3xx
JVBhPitCYXhLS2Q3IT17CnozZ3BAVDBlSnxKZTduZk48QlYwKGVTc2x+WXtpRU8tOUoybnlAVXEl
eEBvNnp5TSp3ZENBcVMjUFgjWWFydUBacwp6TzUwT30qJm1WV05UNGk9TThzTW1POEZfb2U4U1V3
UUxZTyo/RmFSbV8jIX1WanRYRVJDVzUxWU1wKnJAYitATmIKenooOHN7KjIwMT47ZURWckhKbCh2
dkk4QSZve2ckUEpWSFBvM1AlOFRlTWEwMmFHTHVRSj5Pb0tBVUthPklzKSowCnpIcSh3MWtqX1dU
O0hyQjcmSnR7fjcpUDVNcVVwfSN4KkFUREE2YTZyMmZTWFcxI3lDO0A3M1ExM284YzIpK1M5Twp6
Z24tc3lQQzlgWUpzamxWU2p6WUpJaFh9XlZAZT0tdGlJfE9GYV5MfktranVuWHZGdyVEQStqWDI3
I3lXQThXY3gKemNuJm80RlE9USFLJXgqJWVwVVZzPDxuPFptV3UlT2VJdnVTQTUxTTxufTZLJFdE
dyhFNEJxd19KKE12bGVlRz9+CnohVjw0PExhdUtvRUFhSzFYNXlSRSpAPzVAPHRkQnd1an1pO0RB
KUtGY3hIKlNnXjZmNE03TClnTG4jfllCQTx0fAp6THlfeWZzeXJwIXorQzN6cVMpYU4wNERvPUQk
OHB8UDlxOCQrP0ZEUHxBTXtTezlARFpsTlN7cnNQVy1xYUZTcDMKenEpPCVSSDB7SlFVTClePS1M
VnJsYGdKVVZOKVYlcCNNR3tpZSlgUyl2TTxoU1glPzh9Tl9+dEJ2Rnw3WkpWIX5ZCnpMMnhGeWlg
Zjc1WVApNEYrakMralg2VFdeNGJkbzNPT0UjMDVxTSZKNn5DKT49VWRTX1J0N01vVHNSbUEjVnY8
Iwp6JDFWYldDUyo2SHR2by0pO2hfYHZrczdzUGpFJlJkUC1MTkpQYDBDNiZIPkI9Z3BxKVk+ZHRZ
cnMzbGNjWjlQJH0KejZfQW9gSD0xM0k7XzEkais2SzIjXnxEZFIob3lBTWMycVZBJDs5OSlzbTJp
cVE4ckJkbUBxUEdAND1jNUUtd1k/CnpvZ31pPWc+cilUcTh8JTImYEJnelVeITgrMTl9bFFXWUB7
WU5JTDw4KVFySlAjflU8TWNpJEJvKj57clpYO0dDPQp6U1IwcjErekhWc247Wlhje3gjPjVsN18/
SlNTdnlmZGBlc3c2VVBpXkdXaC0wPXZiX0BYYmZfbG1NNEpXUHBaRWAKekhXZl5ZcGB7KT5XcjRe
YipKfWpNQS10bjkhO1YoVUl1Z3M1ajxAa1l2ZktKbTxtTF9HLWRYd2puVShxJTR+T0s5CnpmZFg4
czFzeSlXTil1KHZUKXc9JD9tM1VXcVA9aCk7VSs4bypEJklfVDlBYDY1PyVQJDVlSHJMb0s+NUVV
Uig7MAp6WHhQeVQqfmkzSzl5NDVMbG5lZD9WcSVzbzgpbTI4MXg5JTNzUCkmSHZyXjx9JUtaYm13
aUBMI185ZkYoKVMpKV8KemJrMEw8dFY7PWxmRlReXkYjYkxweCt7P0hlYyUoQlJ7UkUtPD1NUTFs
RTt5R2pQMHU8Um19ZF43NEIpeFlFVylJCnp4MEp9KU9nV35sVHdFTnE/Kzs7WDYjNmc0cHloaDdm
cVMzXnt7aUglZkVtTD5PKX5mJF5zeCZGUCZ3d2lfeEk4Rwp6eWhyTHFETCtXYWxuWj0wXzR9dGg2
U2l+M2x6RFB6dyRpJCMjUTlBZk1RJWE1ZUQ2JVdqd2RZLTY1Q31GZkUhK0gKejVpYV5nUkVJdlhK
Z2RBYUthYD1oYkg9Q25PWWlwIT9GYSRgSGJBeEAhJUp7eHBTdXlyWHpySzVUSzskb2w0QmFFCnox
eG9TZ2w5O30tc0o7YTQoSXs+YXR7cHt0RlQyKDAxQGVQfShfX1dSWEQoRHpCaTVHOGR2KTh6QmZw
OEpxUEsyRwp6QVRHfGlEO2BEZEEzTTFMWEl2fCg1QlYqQVpRdEFsXk4lXnNTMDE7Ozk3YGhpaUlW
eXw1UXRsZVIjMmZDYFNhJkQKekBOdCYhXno7P1U0UEtvT0t+Nm84bWIoJVAmTUBWQzU8ZEcyMj9Q
KzElYGluc25CPTlvWnsxYG4yWUdgQnpWKGNqCno2dkFHKyNyNF84QDR0aXlING88RU9WfEdyPjAw
aV4oaDV8fmIqMDFiRWxhajdCP3Jga0B+Uk8pZCg3c2JPciE5cAp6Tm83TVVBP2tTJWEwTDxSUEAx
ZmN7VzhhZTtKWkYmayZYMlg0KVRkJDVydCVteklwNjVZNm11aGMjbFJIYnNOdDMKelpVU3xXZ0Qj
QFJaOFh4KGtWYG1FJG9QQ08jUzxHWnRgdF9vO0o5TTlFOXp+fVNoJFh3aXhlfTM8O1ooYyhtQXZt
Cnojc3xQY2VyK0lmVWFCPUNEeHZ3cHJaJChHI31DZSpXP2BqWGA7OFM5RDhQbyUhfCRaPV9wUmlz
TGhIQUE1NURpdgp6dTBwK0J7eDhCdz5PVDQoaSkwSko3VHZuKFRxJnUlMVpeNyowJk16eSFndm5i
PFo7flNJbXpCPHpJT2NhUmxBXi0KekxoMi07K2tOUkJUUFBtSVIhQld5YXxHWUwjdllRc2tCOWVY
V2pLdSVwWEkmeFZ3S0REJDFpUVZ5N2NmeDI8ZzI0CnoxKngwcz90KG9+bn5BP2EqMklAWWtsVV9e
biZQUkpHISFhT2pxPXF3JTNxKWFmaVReQkhsIWwwNFJePUcrWWhPbwp6SGBseGlSJTJxRV8yXlkj
X1Z7NW02NVdIYUN2PVlXe0xAKkUxLW9NNXJFKUVmeUJ6bmd5IzU7SzF7d05wTGtCamsKenlYWiZ6
Z0ppTEBvJFkxVk45QkRoZVg+d0QrcHhuO29kRCRAM05lfEMmdDBzWlczTDdmNjVeI21vYERna0Fp
azN3Cnp6Yn1nZS0xNWBre0F+SCtQWnlXNU9uSHZFJHFuNkwxe30kYG8+Nz9ZaVRwVl9CYVRqMXpp
eElKYTUlX2txY2QxZAp6UkE3aFUkfXQ+czYzeDRBcCMyUHh6TFkjMFZTaFVrZ3tOKGVGbXMhJG5L
T31pSE1OY3M/cFd7MjZfQlo5Nlo7WHIKejw3OF9gZSo2cU9XXihOTF5hYVk4ZmZveiQ9WHtGT2wm
QzBfU2MxKXBEcERJP1Y2bHpTKlNYTCg4VmtFR3dKaXBYCnorJks+WkV3b24/cDJuJkY9VD1uPktG
RXxebTFjJU5xRFZ3PktNbm9tUHJ3RUJJc2FQYzsjZlgkbmtecnkhQk5lSwp6aUA4Jnp4Mk01RTtx
ZTJGNzYlR1I4UDRaej5aUV9WZmh9aihwd19scTsrcDxgRDRSU0FAdVVKQWM/dzNgQkpiMVEKekFD
bj5FbUFWTVVMYHhBanNpQmR9RSFBX0RCLUw0TllkeEcyI1dPfEhycikhayhDakE0clpKWm5TJEZO
T1R3SEgoCnpUWEBHZjFZJDNHd0k9dndseCFhe0tEfCktelQmRjEwcztHWSt1aWg0Xyo9JU9JI3Bj
O2hJODJJJiZKKXY0dFN4Mwp6YUxqOVlXR1RLVG91ZF9DQTBHcyhkcT1xQ1dRTX1wekI0SmhHdjwy
WDdrS2ZvS0ZDdEs8QkxhUmB1T308djEzZGIKemM2Pm1zaXZzJlNwc05NTlFNNSlWcUgqPnc0KTtY
JTNjZTE/O3RSQVE2OFZDRTdeb29UX0FWLSNWRFMhampGNVlUCno5cG1iLUhfN0U2PUhHQWw2fj1K
TjM5JCRyY0JJS0Q2YDVVNVBfUVdmaVFWaikrNWg4X1olKkQ9QHhOTEFIY3IkUwp6QGpVc2dXVDhA
YEZhI0ZFX3hwSVBLJXBFRHB7VTVnazRLd31ETXpWJFJHfDJ2UjN5JjE/QiZpZmpWQ0h4NXtmVmAK
eldvRnBnX3s0Y28lMEVQIytKND5JeGFZUTdsM3NjNm92KihSTT9NMTtINW5yRiZwbX5FSm1PSCor
OTZoPUM4bCFpCno5YzJ6PD4tJGlNKlI4OFYrY3kpfVJTUztyTVZ6VW5ySD5TKiVQWlU0ZzBTSCtx
Szd4Qjl4TzR3VyM8PGs1RkUyfgp6PVdUaCokJFJPZSRgUXpKRWFkKGNANX5vMT0yKGlXJnwmZXhR
RiMxd3J0VkFDbzQpMDUyQEN6O0A4MTEmJmdyXk0Kenc5P3czR2toJiVkMVdfSktmNGhtaShsYH1I
NVJlSXU2blBPIzkjNlhQTCtzWkF6e1J5TGN7WEQ2RE14U2pre0hpCnpUSWMwUWRXQjtOMWZ1MWRz
KFVLPV9geFhkdnB4cl47SU9DT293Y3VhdmxAdUMwJHZ0OXFXRk44Oyg9dkdVXkZKdgp6c0xWNjxh
OUpwclApJHFwOXtMbEpLTD8oaTE4YSohSTVgd2NyUmM/NXtaXks3clRyNnsmWWZSUnNCdkFFIS1Q
K0cKejZmUWFjM2d5I0IxfT0kTj0pKz8kb1dIPkQxeTJsLVhzM0QtVjM8NmVpQlJ7S247TWJwbXw9
M3koUShgcUtWQzgoCnpfOEF1bipwYVdAYTM0WkI7N3RyJTJ0QEZgPldHZHlTelhMIXRpSSFIMyNN
UzVieHl3aWZKe2gjOXlaSkI5KCVDdQp6TUw4ZFZ1KytzfEZ9azsrbC1UaH1OMCR9PGJyKHRkakli
Z0o/QEhKbG5MRlZKNjErRGlnTjtHQmNkaGooa0lnbWEKekN6QXh0KjE1ald0UyFLWjBAbUFxOTVW
OHhhWGlBdj09Uz81dWcxUns+PTR7TilPVmZmQ1N9dyRJZjsyNG5xKXlxCnpHJTVwMCM+WClubXhU
KmQ/SCZzZDtqJFJ3KF9KTWtjamVFUDF8cXVlISNEVSZjY3VoMzw0JHJ5Qm5sQXlCbSMrYwp6VyZR
bHspcG1+b2xyeF41dEVKc0NWRHZvbyNlQEZTcjlqM2RPKkEpPUc5U09mKmAxa2RUUkxMLS1ldlp2
NVdVUk4KekFHQUxUbDJfNC14KXloM0VFPHBaWXdJTCExSDwlXnRaXlliVDxqQkJSRSFxUG9Eej5e
QVM1bWhqcFBwNnRxPD5ICnpSSDxRSzx3SylYUysxRn5QTXlnSFVYNXRCQ3B+LVI4dVlza1VSPzV9
TEdMYWZXaXcwK3F3RFNEQn1yZlYyMXhOSQp6ZzxTSiE4RjxkWGJyPTY2eU5rZzlhbGBtPWdmdTdz
QEw2TU5wXnVJZnJoYENFQUYmPHFLSSVgai1ebTMxU3hhaC0KemdSYkQ7MClhSWE4SHx8KlhTdj9M
TUZDPWJYIWpQTD0rfDttfEtXOStxZ3hzMUhnazJFV2BDe3ApUCFxZmM1S0ReCno8WTlqKzJvTkF4
RktqIWomajB0I287KDdkTVdXM2VxV0lVNFpAQUkrSWc3T0xhUSFtcl5GfmJRS2F+VTE1IVhEVAp6
KExAJWJfa3xfdD5pcHZ4UnBZcmNXeHVoY1I4PD1zIXQ/JHk/Ylkkb1BORXFeLSR4NkctaTg4NiZW
V0VTMDN6b30Kekc+aDMwUXY0dVJXb2xrQzRfKGJSZlhHLVBZLVRfc1RRUU1QYGEpZVRxe0ghR3hx
SH41Vj52ZDtScE4xNHc5TTN2CnpQajh5fjs8Q3ZgdHdrfEJmbCZlQz4kK1ZGLTdNc0ttVyZsKDx8
VzUhOCVgRDBFQ3NLPFNMTm4yP0Z6Tj5jZWpuXwp6MldJQSFJUkg7I3MyUUM4TylrP3Q1OHE5Skt6
dShTTk5YdHxTIzxFJHhCKlctNW0+OFZRdmh+PGdrOGB+Nzx2QGQKemZAe0w8SntzSHFqYWMxcDds
U2tzNEozZiZLNjJ2fHFLU3NmKVN8WnA1Wnw5OXZHQCplUVMpXnxpRDZYV2JQYiQwCnpAQmpYRkRo
JjRJYld2Y01pXzMjQklkZ0ltYlF7SSppMllXcTBUalFwUHlmZWNwRDIyPE82WXZQSXQkR0NlbyQy
cQp6bSFMUz4ye2BLOEU4d14xU3ZLVFUrSHNaOHN2SEViZTIqOHAlY1lOdDZIT2pKcD5qSiFNcmc9
WSVlXjd+MzRsKnQKel4/dj83Jlc5YVc/PmQzYi1eVz9uZzEhYk01ZHEpPlQ4b3ZqKSpNMDgpK0xE
YHZIdXh8YDdVYylzS0I3KklKa20tCno8PUp9SWlDQHU9X3p5LU4tN0NTM1BmVkQoXyFyWWI4ay0p
VW53cDFXSHF3RSlsZHhDKFc4cCNOZ1NMKWtQKGJuawp6PWgtak16YFArbDV9WmREJGoxJWk8eFR6
K2hMZlFUKHNMSmsmPXMhOWZ8dV9rYU0mWllpbiFENlEpQVViZHJrRkoKejt4NGFETWsoaDhgaEBx
cU94bTJBdW9KdCZYZWReZnNGZV9fVlJ2JWVmWkFhKTRpY08oXio/SSR4I2xDdzFOPVRKCnplZipT
fldJdDNRWnIpM2ReM19rPVA2fj4pTUZOU1c0biM4N3huSHs7RlQ/KlVTdVc7Q2QoWEg4NjtkfTQw
TlB5PQp6NyNUd3NLcmRje0huSm5gcXJ7PDtHKmtlWGVGWEBHdUwjNjhaZFUqek5Dd0JmJlZIJDFK
OE9PPFBsa1Z+aHdpNj8KejxiXnFTbSNANkBwZ3gwQ219OW5eLWxIRi1HS3VqPkkmRytAIy17O3Nz
VUh8aXFANWAyOXNtXiZyZkQ5I3FSJV5rCnpyflpEPDFJUzRPMmkqKnxwZnJLSDteJFRZXm0mc31q
dktGV3VWeSppOUFLbVh1eShebVBiTihWZlV7NFBvNjdRbgp6KWJpfiolNC0yS0xkOVR1ZGtmQVo1
RkU4ezNeOyNNUV99UGtTcVBsSkg0djUoV0tzJGpUdSpnUCh7PG0+OVJMWTgKekRNcXF2JDZkO2t6
QDNGUnBjRytDR1QoYSl4cVloIWh6XjFTUk9TaC1gWEM+XzNwcUctPl5sUElIX0xJb0gjb2tOCnp2
NTF6QF5YTVBJS1ZPY0oySWw9PSNEQndtZjV1S3U7TUY4PUpVcDR7NihqRW8pV2FDS0F0fDlvXlNV
eEI1Iztqdwp6TEFycCN6eGx0WChDTkEkNnpZNUVyaipZYHZIUmVwUloydXMld2JKcHZgR0UrLXl4
SSV1aWRuU2pXe1dJIT9zKyQKekIoWDt+MVg1azZ3RHtlQyhafjhoO3NYcjBHITRGZ0Y/flpBMUpV
eVExKHNGK1NsUyp4RzYoJnJgUWQqY3ozWDloCnp2YCUmNlJlNWVuMUlKT005e0tzQ2xKSjdrYDNq
U0g/c0lEZWRtUmxAX2JWVmJPbjc5PzlBQUw3MFYrRUBEQ2FNPAp6dml9YWFzUzJvMmpkTFhhYm16
SEI3T05RTFN3VE14NGVKZ1VEQF5kcko2bjIhLTxHMGtDfXNnejYhaXp7UTliLUIKenhTdmlMckYr
aCt1LT5CLUZqVkJwezNGVHBRNCF2dlJ0S3RsVyhTenVDOHcqYE87JTBLd09fbXo7JFl4dWpBTUhk
CnpsZWopKj8yRXMxbGNTS3gwSUVHKDNWRShvVypsQ3UhbFZFc2crSjIzPktSWnQ2aSN6eGpuemF+
Vj5hfkgoZ2l+Vwp6YExuREs0d24/P284RylHRj5IKmYoc19NdjhEejd5VnlOYHZLPT9jKStZeGJh
RDNUTSk2ays/SlVqXj01VVReeDgKeigjbE15cD5JJi1gdFgwcHtBNklMaH1MO15sNC1MOzl7JnNJ
SjJuVnxAbnIyKEdWUktZUkZ9fDJFUXEhYE84IXJfCnp5dWAxbmhVbGlrIVNxPUF3dzEzNjh5P3wl
PCZSJElfX144dVomUkI8V1hNQm50VnZUQilsdWNoNzM5ZDQoalFWcwp6dm9jQEJvZUNCS3NFcjFf
eWB9NVclVG08O1NnJFBaWW9NTmMpcWgzTFFLQjk+Z1g8PXZ7TTNSXiUkJlh4IUh9ayEKeldHKVhM
PjAzdU5zcS1BZVppSTUoKzNqR1RzMVRkbnN6TF9aJT5uc3xfZmpwUlpKIXhEX2s5OTw0JC00MjRC
WiVtCnp1ZG18NSpKcj55SHFGaTdkKlcqcmcwOGx8a2QzV3l3VjRtNFpeZmN5ZkZwJXZHeSg8IXpF
XyZrbXlZO1V7fkh3YAp6bnxQIXU9a1AoNDRHMnpYUDxHPjNpTHBzeSlxfHlAUiNTNFY2WmQxYm5g
b3BSeV4mdlU5fVZuMUdJK1p3QiM9dFgKej0+dmFzUjFpQlF3ZHt4RmYmMVMkPiZRPHQ0cHVtZnNj
TUl2UXFVRSVaNlAyaWVeeV8hUStLZyN7MU53NFBLMmVBCnppRnlqP0ElcilzWWZzcDloe2dvPVly
SmZ+eG8pUkI8VkNmJmwzc2dwNGpIOzxmYG0kMUFORzRNSDhWM00wUn5DOwp6Tj5xVDEkXktJajIl
e2RYKll8XlBgeyRiTyZEbj5WbiYmVWBNSD48eVo/a14xVksjNyZTSmFEbjluOFgkTldoXj0KeiRX
YUdqc2FsOz1EeSl+VGJlODd0KFo0eT9yfnE8dEFfI28mKkVKeVQ3MDYja0klVCh6Tk57ciVHWDYt
ViQjUn5eCnowV1NUNHVgPDw+cFBrT3QqMzVyQWBjSEQ1U3d2WSFGVV9JfTMtZ1pCdVAmNFZCWFY4
TWVqYWFUdz1YMipjTzVkfAp6RzMzPU0oSVl3QE4mZmdrTW4waFZofGVEcmlpcWQmcUYyKiZTOD95
PGFoJT8tVT1YRytwKGFxfmk2fXxXS2s3Ym0Kem5LKGlRK2omdDYlZkRNUlUyaEBOTTdJZlVHdklP
UEkwfXpOUG9TOz1lZG0xVTBZWGIobklFOXE/JSlDPi1lR1RpCnpDMVBtQ3M4TTJpZWJeS0V0cVAr
UEB4Knc7RCg5JTx3Ql5LVWhkd1UrSlhQYncmfjtzaWBrNio7TEQ3RT96MDs1cwp6ZGNWTEsyWmI5
WWp2UytNPzlYMkhCYnhwPF9CPE19PVd8OUtnaHM4azN5ZUh0SllCJmBNYFA4eXJCODJZIVktfWoK
ekRYdHklTzZNTjQ8UmNXfFoocn5PeiVQbCplOWhHRXw4cl5TZGZIa0orcEUkSWgjfWNWMVJnX3Yt
KkIkZD8kVmhQCnooYml4fHRje1BBbGl2TH4yIypvfHFne0RPSVRgfVRoT3AyemQwajQkKkNHcVBT
RXRjKHtSSmpmITF5V3hxfkc2NQp6blN5WCFeflg1UHJ7aCkjWDglczFOJjEkajZTYWpGJXsjOUFK
ZE5lcz1xfTlHZz1HUXZiQnRYWCQwVWo7Z30leFgKenVsPSQ2QWohUENWcEErRXdycXcoN1ZrMUZ6
NCp6ZlVlXnRidm5+Y2UtQyFIPmB1P1dQeVVvPjdzUXIwenZFdHlGCnpUN1p9SFpfYiRGWlBfbTBZ
enU7UktCfFdrWCV0SSpIfjtrKk9ZczxKQ1ghXypVJjVuQk1RNVhLVDdNYFRDekpIagp6aU8laX1D
dj1IeCRNKGckdDk5SU87QVlmWFczMiMlZS1RVn5GJk1mZFhqNFVkY293aWBeaklYezMwe3xkTX5x
c1EKekdPRVhjemM5c31NcDJxU3VyTlNmZU9EKEIlYXBhfHJEJiU+QUNpZkZKa152TER8eCtUUnFf
fFNJVTJGfl4oalRNCno9T3I7X3RtVTstO003ZC0/QHg0VnpyYSNSMWomU0UmIVN5aDZeeDVjM00w
JExZQHleOFc1aGRITmZHcFVabmBIVwp6Png4e2lyZ05keUtVUj1kJiEwZDNES1h1NkN1TG1NQGNu
PzB7ZSFucDwhI1pwbkdLSDllbjtHSzUzKn1vUWxqVWQKekZGQGlwRHRsVXZkfmdHeiVgdFZyK2VN
O0BEbnBSV2JLKGxATXtFPCg3WiR2c3hSY0I8Y01qdFZyemZXN29Mc3A8CnprWmhGXk5YT3ZpMD1I
TXZOaWg5RFk3SGdMNXtWYnVGQikldCpLY1UzM0N9YyNZTnBPLWBDZ3hpQCklLWN1e0RjNwp6TlJ3
ens8WSMqSFJNJnBpXj8oLXpfTUZNNz9FPVJqZVZfQyUrVjkkZXhMaVkmczMpRGpPbHFxcmhxSmB8
cEdiVEEKenBzOGdgc3s9SytwWFI3fFIjWVFVNWJhdmBvM2IpN3Y4M2xYYm9TZEpSTkZOfkN5bkBC
OVJpNkVZYGluODk0Rkx1Cnp1Km0rYUkjdV89WUxOTTxVIVNKaSoyb0tmVFkzMTdKP0opdjwpJVFe
e0EzRGJeNkoqc1pvfDxOcHx0bTZwVVlQPgp6TEdIe3l3b3B8YCVHQFElRG88OGg3ciEpSVdDPmc3
VEkoQWZEYk8mLT9zTnlNdmQkeGd7YlZuIVNnYSpCIT17ZyoKekEhK0c0RUgkbVZRTylYZGxfMlYm
bVZIJWY/M2IxfHNFaStUOyRNNSpyfjlnO1p0SWhsaStwK00lSyYxa1AjZmRZCnpKOTRkQllnYj0t
OT4kYis1bzJWWU12LTM8MGxrciZkfjZXanlWa31gMlA8Uiswem4qU2VSKzk+anVRYzRWRyt1Ugp6
QUUxZFY5MyliZWBzbzdsSTJFSX1oa3Q+XjIrRTB0ODwwMW8rR3tzNzBHOzduQTxYd0BPZkNzfCso
LThLUzZuWSkKel4zMnZ5KEpLcEdNbWMyKGBKU2FudCNGQl5PaGs4fG9geUZMbitpLV9PTT1qdEwt
a1NORF42MV5MaSFYXiR2VnRzCnpWViVSaVFGOyE/dSM+ZjkraUZsNVQlQT19RyljQFpvdjItMTlA
X3U1MDxZcGxxUkcxQDN3eHdIcT9DMXw8OWNueQp6VmFya0lEYjhRJmUqPnVoSnZiMHFCaU9QLUw1
ZFFVTkJvJnEmelh5Nml9TE1WXzNSN3RmTlAmR0lTLUhqbV9AfHAKendzZFNtO1drX3MhKmJ7Rkhg
MzFKVnpgbihRSE0mLT5NSnRMJmAmNHNsZFJWQ3UjTWlkPDtWNypIVUBxTm5EdXxUCnpAKHs0KVUh
aVB5TH4tYDdneWNAQ2UjLVg+NXd0fXdqPGZqbSFAckI5N0FXNURrVHZ3dUV3ZlJOWXBwU0pqOTZk
Xgp6cDFlJnpkZUc8SnFwfntpa1RlQERBKjZWbVk/VE5wRVQweHhwNjQlWE9EK3o8M0ktIW5LZGFs
PzVZVDZIK1cyOFAKekVLIypSeU96ZkIxPW9HZlVPUHJwIXBvNEp2YUhuLUIyNjBzRjR4bkVGNG82
dFd8Rl9TaHN4KUIzeSZpJE0oWFN3CnpTbjAtZzl1aWVzKHlqMlJBP0ZQXkRqc25VWGh9U24mIVZy
WkdGZz1DISg7SkFsKVIqa1FBc0xiRl5KRXpeOzs/eQp6VEA3KmN0VzBWNTxPI1U3T2dgXitaSztA
Z1k2KkdFaWQ+QCFkKFNQbVF9ckl0UWZ7cVk0OV9UTVRQRjVBQiM4TEUKeiU/Tip0PnBNV1JQcUNI
SnBNc1dCO3o+TCZEUTgpa0pDSUFVN3tqY29PZGt+Mzx3dFkqPFJSUGxzbmhtNGl+aT1kCnppPzE8
RTlGalJORCFFZlFSbDFxOHBITEtrKnZhZlNfPDBGYmg0YW5vUHc2Km5Ga2FJNFhgMG9INyZsdX1W
VTk9Swp6VUJlb3xsPiR9WmRmcVpgTFg/fCtFYVRTV0xpM2xJVVpRO1BUYjI/NCYkfFJ7LU5KZFJx
YUtVKTB+XkUwbXV1dGwKekZ1ci1pI2ljWVdyeSV2KGBTPjkzVD98U29sVm9rWVhqMi1eTGF4OU9k
TzkyQGFgY3F6eVBRSjM0dTMyOW92X2h1CnoyOzckQlZTei0rNThuVUwxfG50Rlp2ITx6YlNvPE5A
QUNzVGpCa0FLN1Q1OFkpekpTN189QjxsQEV5TX1zbWxIWgp6ezhuc3JHfXFGYiopeypqMUhNMldT
cFQzRF94NyhtOzdnbz16SDNhVFhzOzV6cWtOekF3a01DfVI3N219S1JTU04KejF9KndkaDBNZDdY
d2htOTMhJmxIN2lTME5KQ2tLPVV7bUVgUV4qX1R6RVM3MlgjKG8oTjRPQ0pudCFpZz18PGdSCnpg
KV5iUlY2aT1yQjRVOEB2NFN5fXNSRj0zQHpDcypoeTlmPy1zNX5nUFhpUC0wOWZAeXUhIWhueTdx
fFhCezE2dQp6eiVhXmNHPyg2Q2ooKElTJCRRKWVHUSN9NytwN1lecGVWSClmX0V+QShLc3BzSTUh
eFYpSzxvdEc1ZHNGOHVvdVoKekpfe3JFU35Aa0Q7NUstQ1QwSHdXIWx0YnhjfFh+U1VxQl9ePE5g
I0YjZnlBVnRmWkZvSHhBKiQkfj10RXBHaEdCCnowPk5nJXI+S1pERnFab35mbUBXZ0lQO2kmMl5j
bSo3dkY2bTBoQ2phMnNXWUZxTXMxMGYpdyNea1Qrfm9qeVN7PAp6YnM9SGNsO2tCeV4qdjlmaSVY
VVpGWn0yZENHRXdEN2lWMG83diNpVihje2BwX2QrQD98Ri08fFRpQ2xNYm9MI0AKenR3QFM7O0RJ
byNxMCl4SFd7WWtlLVQrcjw0VzFNKmFJWF9EaTFpU0lWX3E4TCZ6KiowVGd1QllwPHxqb0dsKm5A
Cno9dDtlTmtsTEx6WSFgRTZVWX5LQkVCeGpxK3hFNzlfRyVrXnF6dzducD9jYDhIX3R8dDc+ZSFf
OSp3QzxDeFhvUAp6N3RaUVE2WjNYX1ZMPzxLKypoa3kjWHtMWEg9XzhySVc7UmpvXilrMU5iMD9R
Yn5JK1djPX4/Ny1pQHpmI0YtfE0Kek9eVnk3PjY1Pnl7R1huTWRfR357OzRzIXZqYjgqK2lmQWI4
LVFHVjJifT5APGE3Z2dzYD1LRHVJfTdSVVY9UEZFCnpGc3xJZihgS2t5X2Y2Xmt1T1dCeSQofiMx
djNLWjVLOztBJng3YUwxaDI5YEBjcll5SitsSTwjZ05neHVeTFBVbgp6S0FfKklzSGdQSHU9SDhU
fDh0NGB7YkRPP0NJVHZaYiYkTzlpcmtgVzsob29zKj45YkNQbk9gV29XRnchOWJER30KekRDTCY4
VTI3c2NUbVdoU3Uzbj9PVz1CK0FSI19vO2oyXypKentjfnhvJVQmbmktTzRSJGJZK0syKWxYMFp5
dXY8CnpQaTJ2IXFMQk54O2JVMilGbHpXNWJvRDBuUk8hSjdaNV57O0hZK18qRlJ1ZUZ3fXVDNXo4
R3lUeHtUeX5lSjlyUQp6S04/cj5OQiZ3N3BNTXxXO0JMTmpPN2taQzRiZVd7Kmtma3opc0tNZnc+
b2YtVzFybUNLfF5LVm9oIV9gKzk2Tz8KemwxISRwVS10N1IjcmMrYlp8TEtQZXtjOHNeOU5WKHBV
SilUVSVUSSpwVzMoVyE0X1RwX2kxIWZKciF7TUE7T0orCnpwWT1mM2lRQGwkQFF7VXFaMFpEKThx
YEFgZFFtfWBqRHU8cmgpWm5zI2o+VjV7cit1JjdDYjNJQmFSVWkpako7PQp6bFZXMX17dV9BTmo9
X3pfQElsb0RyMjlWQ0htSkh3RWU+UzIpSTw7KzcqSnRMP1lNYn1vJHt9XjJERyhnKlZzOVQKejl8
dHJ1Tlopa1FJYGxCWSpKZkZaUGBNdXRQdz5QQ09vcD11UGdZM0thMjQqLT5WVXQpaHxsRik5KmtJ
fG5WMzhGCnpKcDIqNnc7SSo5Y2VweT5vIU1zViQjKSkxaXBnY2xKX1ZqdyhHT0JLUmNqeitFKEQl
e0B1P1E1SEQ0IXBRSDdLMAp6cFheWCYwKks0PWJeT3E/MSF5eERpdGgmYFpZdUBzMUA9QnJQUFpW
MlNXQnx6dF5oYWphJTtBM2JFYHBZXn4rXiUKendRQzZgeyYkZUp0fjhLNiEqaUwwVkY/a3YqN2l4
X0peSHVPcjdtQk5CeldTa3s3dFBFX1V8WWEkTmhCSVZCKVE1CnomQEhZSmFSMSVMJUhAJEhzTyM2
YmlQYzRQUFkten45YjFSfUN2O0dOK3F9OE9GfFdnTUt+TGR6TWVkYXkrKUpVQwp6MEdmMTIwJGtL
dTghcGVRcWVWVEtLVXJud24lO25WZ1NyaFVee3xTT1AhenYjVUlkLWM8OXpKMkgpbyh9ZHhwdkgK
eiUmOTR7MzhjdEA2aV8wMSgxJE49Sk0+eUpuekUrT1J3Umdaa1NKTjgyO14tWmJIY2hRaVh6ZHcy
KCpFdzBsbiQkCnp0fkE4bipYWWAzNFIwazcqTUh9RSRKajNCKUFhfTNVfT9tQWY/b2ZecGdERndJ
cF58RkBATHQ4eV80MF5xKjRTJQp6QUh9V3hLbjU+ZiVBX2BSdURCU01TfEEldGgwO3N2KioqcGpq
YVVPR1grYmJEWkFlTEpudkZGbikqck9obHBaalYKeno2dFZnc0BsfXIyLT1JTmshZXlGSHQmWkxo
Qkw/KFF6VWtFPkB9WX1LJDFwfk5KciN7WTJaOSFzWVJUKm9leztzCnpkJnFgOVBhbkNSRktzZ1ND
VXhJVlFgfHMySE8jZENaSElzI3d2KyM7dWJkcjtGIzdKZWxPTUlGaFVEUlRSYmFyQQp6PEJmKFRu
RjN1TnJRPEw5KGV0e3VaQ0dLNXF3YT5sUCpkakVkeFY3aF9XVnNwPn1HciNDVFBDTE5ITUFFczxG
Q3UKejwyPlokeSohMzxwZVQoWCNRVEA/ZXZxeiVNPnRzNHB8XlhTaU5LbCY4X24walEoJD00Zy19
REVMO3twfjdLWmwjCnpNTn4rUGNLMzcoNig+b0pAMHZMcCZYalgqQjdTKDg2Pj84PkE9P3FpeDdL
MUN2R3dibWtJe2ZjKVNrcT43Uip6LQp6YSFaSWw8PmpaM2tXKTAoKSU1YDlKIUx9MnJBZ1E+JGtQ
T09iUE0qJFYkcXFROXd5PH4kTXR6KlprOD5APyhKTmwKemk2NFhHX0dBcXY0MUAtZio9QEF5N354
JWRvOyNMLXFCYHMqa0ZaK2NXZ1R5TntDYGRaUUYqfVMrdzEoajY7TE4oCnpKXjIzPmI9RlopZWM+
N3dMP2l8WSQmbkMyIWw2TldOTkZVTWtRXkY4MSEpOUVhX0NOSjVKVllaMnF+cXpxKkdjYwp6a3Ek
eFg/KHVpO3h+fW1ybVROZDFXfW0mXj98QzAzNTdjTSVRdHFie0N3VE8kdmJeX0VtZSFtUSFxKlU8
NjNBSVgKeiMldmskMC1FMUxZJWYqY1kkfGRjVD1EUmRgPnRaKHhTMlBkNGpZPkt8SyQoY0V4ekVh
WCVvUitKK3lZKzMlcHlPCnpIfS1pV2w/a28/enV3Sm1XWlRtQmgmVWUxMzIzJCpLYCZ3WD5lPzJF
dl9MXjUxOUtASVFSWkN6OFQ9P0U0fWs9fgp6SkdEdXFVYlY8ckBIdj5RbUIhd2s8UT5lLXBhcSR3
JCgqTFBFMkNJNVJUWTVaKDNpTXFRKnRzdDs4b0x7IVV8eFoKek58ZT05RTB6VGBJXi1Pemt4YTdR
I3M4IWNgQD0oaGQwSmN9JD8pRElWPWhjZHp1K0B8Ym9zdlE9TWplKmtqZDJ+CnopeSlCU040USkk
bkJqK2F3amMlODNTTmlEaG5GSHh2JXF+K0tTKmpBLUZpX29YUUxFSml9KjhUTmc4I1gkSGBPQwp6
bnBoOVUjMF5qSmEmRil5eGRCSjZCPFo2ZUp4MUY3KVJSYCp2JU4qfXt7bGc2I25iZz8rVT8lRnlt
TGJXZUl3RV4KendKVns9PVA2d2ppMXdVc3k8ZyM5XiVBMyNvKVo2UykjVE00SjxEPjBhdlUjIU0r
QDR4OVNOMTxoI0p+bz0/VSomCnpoQiFUakNSWGQwbmY5N0Yoa0glfEVIIX47KEY3ZnM9PW19bVdC
V0lhVyMzZlZkVjdieUJyIUQodEwwal57eEo7Ywp6PTVDZCEwZHQ0VjFKckAhclRybE5HUykxaTdp
cz5gRm0zMHYjYkI8Vl9QK2Eyal9mbGYmK1NaRHV7dXdLOSRkVl4KenNQXlY+RDdXMnN7IWA+NjJN
UkY9QF8oMyotS35hYns5Y2Y9RCZuPElBO3t0QEN2Tit4SiZhdXRZfjZYZVdaVSpyCno0SGpmMTZ+
dCZBK0JVbGJFSkg3XzZffD9fKCNSfD41SWlVKj5RbG01djYkTXJTSDRGcm19emZYcFFuY1VzT09i
dgp6Rm5eYUw9Nj5IbUUxNXM0RSpLU302d3xAfCg0WUprK0g1NnwwKHBOY2Q4WGojP1ZnJTAwNigq
amkteGJxa3lndE4Kejs8IzkyVk4pUm4/ZiFaXjt4NyM/NiFnQFdgXitMKEA1SD4+Xk4kNlAlZmY2
d0A0I0h8IV5HakBfVnNKYTskQipjCno+VkktMzJ+JCNERHlLY25va0R0WGs8Jk17cnJFcXh2Q1FM
Mm01UG4yYy1gQ35JVzEpSTRlNGJjbCszRishTnMzfAp6ZEhVIStoPWBzX1hBSl9IT3lePnwzRDZv
Tmp6Xlg/JnY2ITYrJn5WeC1uRU0qP2hAJHE/KCt+ZUBnJF9lJTxMbjUKenheRUpsXmdoMFJRcVYw
MFk2X2N+ZDFgS2FeYnMzRG1sdFIwSyl9LUgycT9uQE0/RzwzdW81ZnJCM3s1Sy1PM1dtCnpePVI7
bChHXjRxe2QhUD5lISlTPHpzRm01NjFNZHVYc2BpYklDVSR9TXB+UG8qUHtROz1QYkpiYVQtc00o
SEJMWQp6NWpKSkRZSSt3JUlxNWUmSVFKJU1JeDZsWFJtSl5nKSl+aHBCSyVvcVhUbXBWTmNTcl5A
Mmg3XmA5MyphP2hATjIKej88UCgtKU5id349KnQ/YVowQntBNFdvMmtaJFhHcjNDfXEoZVpSTU5m
emVYdHhJXnooZGklZmBsZjwhJTFxY3M3CnpQMV4yeUYxQlpxX2d+TE0maU0zYUlXbHBCRE8wV01P
RWpyOGwtRDMmKXRJZyNER3ZXPFByYFQpejNwTnRpdCpyQQp6QTAwREA7SjtKQlJTcWptRVYrZXZn
WERMLXE4PzZZdHdlNDQwTXY0cyE8K2xKYDcyTkBjfWBwb0BSYmRUNn4qS3sKejIlQmR3a0ZNbH1v
QERrXlZwK3daWERtTkdOI0c1TD1FSyQ9cFktYTlmUElRbnV2MTBpTGRwMyFSMHNTWU5uSlJqCnot
VWNPUkx6SypGbXhBJHwyeGtkQXpFIXNGYmZee2dKX2xBM1R9dSpMNSRsVTB7S1B4bnJVdnpeNXtW
d15GUkYqdAp6UEN8byZfSXxYKnhPRXktNSpLV0dtK2JMKnQqeiU7MnpCZ0MqTkd9ZmVeYSZ1cFhg
YkNzY3tsR2deLWpGaVpTRj4KeihhSiZ+NkFTVHJQYUFUKihfYEpmPC1kckZIfFJkcGdwYT1NRVVM
bnlkLU40JDYwO0dWZU5MKVpnLXM1SkUzQis+CnpjNlNSNGhzNXl8bmhzcyN7KU8zUTRCclJUPmpY
SWd2YyZ1SVp9YX45MmdBPHxMUEcra28pKGR0empGalo4K1chfAp6eT1mKGBKQkNrYWVATEVtQlUp
aGw4OWU2WHU2WkVKOU9YcUJoWGhNd3cyclJLenNJcX43MWdsXz1AIT57cDxTZlUKeiV7a3Q0RGRM
bnQtZmwxXkV6P1Z6Pk4we3pvKlI5IzhvSnd0PmojaCVNVFJ9bEF8T0pHbS1sSFhyLW5tKjt4WH5f
Cnoma3h+V09YTHY3XiQjNUpDfkBVKj9fVXhfeT5aZVkjM0NtRm1ASWVzRCRLMnJ6eWhiX0dtcyla
QG5TKGomUUMoPwp6eXhARS0tOXVuY1JwS30jKGU7RXglNil5S087KWpnPkdZT00zfmUmQ0J8bjQz
cWp6QFpJVWQoKDskTkRrI2V3biYKelV7OWE7TWRBaXcrSih6R3k3MkVmPUNwMDRlbU9KPWJAY04q
bkc8KWBIKUZPQk82MWtsYF5qTVkpYDlsPEYpQlRDCnpmcX1mISF8TiFSbFVmTCRaKkNkJSE7b0Eo
cGh4OytfUCswTk1iOz1zandoSXRGKV8lX2ZLZENRUGoqbW9MPWFePQp6XnE5JGxvekYrTistNT1T
Jm9ednw8bWRrTD5ITSFocEJsPTNGZjhsMnNscldrcXYrWXRfeUk/SEt2ajlzO3s7ZWUKeiZ3a2sz
c1BiclB1cW9yJUJwYWxXQ1Q+Qz15JEUlNC04bCRlU2h2YCg2S0prNWtpeWVMTW18TFFxO2pMajVT
JFV4Cno4KzJkSF5eKkF3Xy1EZW5xUVUwWTxnO0FUM1QtZUBiYWgtO0dvSFJIITxgK00tVCU9ciY4
WDdpWmg9PXNLdXZ7OQp6YGFJMUswNVFJUjg2a2NoYUM5MGBRKWY4fEJ0Qm9NYEJjSXxuV1NDYVJW
OUZRU2c5IzFgOGAmRVNpV01HLW5jMDAKenM1KD59Z0JwYjMhMip5eU58VWAraypuK3Rpak9zK0x7
UitYTEd6SCF5ej4mRCp9UGYtZVlFfEwlKCQkRXEhMH5QCnooayEmQWQ+QHh1JHJCeiFZOHpgUGJJ
U2RGcyk5blV4aTRISzVMa21LQHV0Z0tnX1IzcG1WRDMzJnVIY0MhP01iWAp6MGFjYk5BTGZjcXk1
YHI8UitXIyRZWDZ9eEUjKCp8TVh3SU5MRGU1XiRTX21xeyRrJHAxazU1dCZDNzd4dkxrZnQKejdO
ZXZuXz1vQnwwWWFVPnYzM093U2hWNXFrdTAlcF9FR3ROZWcrUGFjfDtvaXVxJEZJYFZUZWFaY31s
N01jKShjCnpQLTx+IT87MnZzYiVvSExJdCkpJnReKD4xMTgzJmErfXI/X0R2VVphRHZQYHEyNXdB
bjlgITlxTHw0RSo7dHNNJAp6SGlvYz9KdChgUiUlYGpMIVRBSkZfaDheIytuZXdRMjE7I213RGAp
UEZoJkB7endUdkdkOzF2b3JOJmUrRzJ4SGEKenplLWgkYjdWcTRXQj01QXZMYCNWUCQxdWdEbllp
YTl+YjElZ2ZqQjFSJXFMeGh0OzdLb2Y1bUNJYER2JEopaWVZCnpHU21Mc0gwbDJKKjIoeCV3ZClR
TSF4MlkpWCZwJDQlQDYjfmFJUH5TYmBQYDJXbT93SyhgVWZzdERsViRCc35vQwp6aGJhd1BmKEpD
VzxDa3otYFgtZD1YMCNGUTRkbmBRODdZUDdyT2NNZmkyQU8tXlI8WShCa0NeSiQoLUNWLStVUFUK
ellNKU5aPDQ4RjFqcm90bXJ+QFlaVDAoQyFpVHszVEdQUSlGMCV0YWkpN1Q7YipjUkQ2WUZefnZ4
cl84TyRpMiNKCnopamFrck89JTsyNmUoJkkpTTdnQmRXcmBNcFpOR0NLI0xHamc3fjNKYV5oKCZO
VV9sKE9jRH4hPk0keWtlfEpqYAp6eEVlfSomeUU+RnYqaDgmPWp+cntEZnpzd0BoS0s1eWBxSn4o
MXI8N0lOXmNxSzc1cFgkPVNeWWQ1akdSdSpMfTgKekdlP30tV2FeeXNseU4tZnxHMGFHJS0kYFFm
OTJXbHhpcVBKR041YlIqbX5tXjl5Izk/TnVQYXgqWE12aDFyZiFICnpwJnpvRWdxX3Z+Kl55cXB3
NUBnNGYmPE5ZRUlsKWp1Tj9BYzxqcCpHO3VpWHZIekpvMndZUj5Md1JZbyVhMlRBMAp6TWZTUFVR
bilsKD41N193dyslYG5LSzJ5Nm0oJVpeMitOTH5yWCRCLT5fWG9iczF8PWlhLWFWdFhmZ3w0Tk5M
c2wKekZqPWgxISNgM3FvWnJ2Yl9kQ3VyaEs4TnVFazlNcjlzYkRaQzBoZ0JuemF9cl4rZEZ2NnJ8
a0pnPXspbFdtMiVzCnppOXtfOUwjYF53WC0ybExUcnBBQm5maEFrP2pvZz0kP0R0Nll2dS1qaX1J
dE5TSSp2cFkwU2U5Rns1YXpnWFFZRgp6Nz0lNmVvKlozQGUtVz0rQVojNWV2e35tNkVUfVhWNnVv
X2prM3A4dEl3RDN+KiFPbkN5P3VWSnxDa3dKOTElUXwKejhHLWt8ZjN3WDgrZTstRW5adWJeTXwr
KUE2IzFUaGg9XmtRLUBgYiZFOytlRm9aNCQmbj1NUG1TKFRHNUBJKzVaCnpQJmNFKTEzQUBYZzFz
M2wjVShAVmY/d04hUjNBfihfSVRmOWpzOE1Id3dXVUc4fCUzK3h0fGgyNkwtKTt6PWU4RAp6PkMq
bXlQfkMxcVctWFFvMHh6Z3EmWFArcjJWKXtQcSsqMFZTPTlVa3tXLSFIZGcoT2FWWmFoclhOSTtf
ZjV5OWsKejsrYFdsZD9iOSl3JlQzYSVhJT1XXnVnXytKNHJ5M3wxSWctLVM0elpCNj1yTDdqMlBA
QX5UVmRLT1Y1STN5MTl7CnopR2NoVkEjZUxGbXZ0aU0/b0pHanswOXtVLUY5K205ezJUWEo1WWd5
dCo5N2ktUmtRVng+KnA7QisrRy0rX3ZtOwp6eyV9X0lxZyp4cD1fNjVlPzVuU3lpWUlQVmUpfW1h
b2dpMStGTjE9QFBLZCVBcE0kOTlCTnBgNzIqPlVyP3BFR2cKemd3U31nS0pSZ3NjK1YqUWVkQUJl
I19VVjI3OWhOMmpnX0pIY2hfenZCVmhWbiNYVmt1dytqRTRBbUxEfkwtMXppCnoyI04ofHRtcU9O
RXRDXzhFelpFLXVTa0MjcyRGYztYczdBUV5hKnxsSjlxfjxUJVlXOGoxR3MraGtJSXxhSlBaMQp6
XjBaNihhYEB4NWF6NTZmUGsxTCVIT35oc1hRUXhSZTM+fHVgN2okYEw4KU1sU2pPRHBVfVp8ZU5o
WEwqb0JWR24KejsoZDQ7YzxtYU1JPGA1TlZecCRfKXhwX0pWR3lmO2difmo2YH1AJnI4NXpkajVB
cWxVYl51PkZXZjc2fnZHQ21rCnp7c19RI3pyIUxKZCMyfFdWMmNrfUxVbHsqUiNwKH1zPSlTPXVw
YGh0YkI0ZD9wQz9UUEhfTXREPXxDLU4rQWNxOwp6QTRDe05IVHl5V1clWDJmbkd9OWxGdnZRXiNP
NVZIIVFKQilLQGNSVU1ESEFBMnptP3krJT5hRW9xRVc0PDZyQEMKekUxcFd1NFQye25afnF3PXop
KDNJZ21gbzYweklyWVV8dWJsdU17SlVPPUlkVnw4NVJ8WHdRbGRSVzxSPEFxe0tFCnojTDZrRE0w
MXREeE5Ye0NOdD9eRmcpNjw7Sl8mejBRQHs9bj1vITdSMjNve3hmPFhEVXJlT2N+PzQoSGt2fmBL
KQp6NDVTdlJOYnNYKjxhc1J1ekZvPjMxYDM1aFhPUVd2MF5nPylGI05yY1AmViVlTnNtMV5yLX5l
YTwzdzUoezd2ISQKemBIfiUla0Y5K0M2bjVtZVBmMjk0bmJ1NGo5OGZ0YEhPQy1TeHBOND9tWmA4
ITdkanNfKm0lM1JPZChLZFNrQzRqCnokNW4+QmFKWnAhN3o+Q25ydnFnM2I8JEotU3oocUxISElQ
LXBAN1BYQCZmUnwwMDBIN0teSC0yXm4pZ29BZ0Z8Rwp6IUxLZk1rcERFVFVARU1jZSF7VFQzTkM7
P1kmS3RzNnN1QkVUKGY9eVAxQiNRNUR8eFMlbVNaPz93JERFbmgpUFcKejxLKmRTR1BnWTRqPzEo
RktiKnBqQEU+ZTRRYzt0dUB2SWtjP2x5WGhRJjA1X0pIaURiXkxWaTV2WEhKazd0ZmJwCnpfWV9J
S2dWfDVgPTRCN1NYaTU+V1k/dHJkVVVmdz9ZfkJuej8/d1Z0cjw2YiVUPWZpS3grSTgzJD45UXJ3
cFRrPgp6bXhJVGZsWV9teEUrIUV9LUN1dF9peHA/UDFmOGBSO0dVUiZTdV5MM1pSM0NUXnFWezJn
ZkVKKEF+UH0kWl9wVCUKenQmb2FZTER8STJUWilmN3Z4Jm8tN2c+ajE8N0xjcU9YQiYwOUJneTkk
T210MW5YWVpuYVFoWVZFRkJiI1oyTGljCnpsTDNYbVo1SSVCKDYpWFI0WEdkeWlqQHV7bno1TSo2
YzFra3M0SFZtMGJFWTk/ZVBlT0kwUSRKUXN6OHhyJFo9PAp6WmwkVTdjVGxkSFRfT01LQTQqMUg9
YFFkfkdtIXk4ZUh8NDJYYVlUdU5CcTt8ZzZpRVRgTmErOWg9cT9gWFU0YHYKem9wPTJ3U1l1MXp3
XkpuI2h2YkshKGdwO0hMS0pLe2UqeW07YGQoVHJzcXhrMjEjQjdYaVFLWkcpbno4bzZ1O3BRCnpI
b25xMmpUfVFEPWNZK2dkJCQ/YUd8JCpTcHNHMkdaYmJoNVdkbSteT2EteCpRZUhEJW1pTn58eTZI
Vj8hcX5TOwp6SVQmMCZLKW1MeVY+N0NzZ1p1czlwMXozMFJKNVhJK3ZvKypkQUA2WHQ3YWR2QHQp
cyp0NCs3b3RLLU1oZmN9QW4Kem9yWUBaQnxWKk5TY0c5dz1yQC1WMEE2dVBqe0teR28wJWtveGJi
eUpqI3o8PD8tOSl9XlZGdz5aQWN9dXo2X3J+Cno7QWVVQTtWP2w0I2RmVyY2S3QrRE5ob1o9c2la
ISF6O0olOG8tI1R0VU1Bc28+Sip4ayhpTUF6ZiFYM1VaUCN5KAp6aUJuRmJkR1I8OWkxV1QyQCNQ
O0dJcUpIRTgkNjxNIXhWTVdlK013dGh2WWZJZW0/bzw2YWQjTksye3ZUSFRVV1QKenl1fW1lR2Y9
RzVTS0FKY0spJUtgOThHUWhNREhAfiNia3AxKClySFJwdUZ8REg+alZCKDd0RlU8RStNdUJIaWs7
CnpadVlWPl4pcFQrYlo5RT95ZmFHMWUwczlDZ3o3aF91M2lpdlI7PEFgenoocUVXU3xreTxCbG5S
IXJndVd4e2M0Tgp6Vmx2YSlAQTkmJGotdmRKbnJNLTk+WXFWMWs9aVl4Mjc2Z2x2NGphb25jS0hI
WDBMWmpRVk1yQ3kmUSE5NXlHWmUKekpTNDl0cTBhNSVoQ1VjeSlQMj81VGxmIUNfMm11OE5ZeChp
d3hJNVAwbTtHYjFYPEVFcGg/diF4WmJnSmgyUns9CnpFPn49Zmxze1c7R1I/QWFMQXJlWTBEMFV4
QUlycEpkQztVOCRTdWMhYH1xOHdnPmBBKVhMSSVJKSZ5eUtyZTQtYQp6dGdvZyhLfTJFeWIoam5T
U1pKeXIrPTFkNzFWK1YoQndgR2pVQDR4eXdZQSUhQ1hKWHgkWSMyQj1sNTRsQ2EofSUKeipnP21P
KWVNKF5WRSFIMj9HYD4jS2FNO3U2d25wKV5QX2w+bzghZVAkPW9tPnJNZW9oP3hYQDVNKDBpUVFE
UG1xCnpaMTNiYWB2alIkM2E4Wn1oMlBDYyg1KG8rUHAlXmh5Vz4wc241fjhaZiVtYmwocU8zIUtt
M2BXYj57X2U4SSo+eQp6QzxeRk4lRGp9XmFHTTR2PSlxbyVYYUJhKDYpcXtocHJENl85MnNzakRC
QWFXdVp8dFFVdDxFYHdZQTkkbj97M0EKekU2RmR6YUtsQGQ+a1ZBTEtOZztUWjs/aGswc3ZLc2U1
Yn5uYCtiRk1AMHlWNF41YSsyPFNkRik7NGBoWGdIVEQ+CnpgUDk/YmslQXcjUHRvQjNSNiNiZHNH
QmdvN0NtPT9OXm03O3N0QzZNVUdEfEczQVpuSCFga1JZMEYqIUJsYyNIdQp6b0E1TlU3aFBgdl5N
RiM0bmA3NmxHK2pVfFFDXnxHc0xOWSlIPm0kNEZ5cUx6TE9WUTMlK3tDWiFlPSZLc3Y4NXkKeihp
M0ZPXlprP3lzWXpBe09NKG5CblVuWFZzT0dTTXJPQ2FDaDVERnlpUEVZT1JsVmZ2Ukh+KCt4RlBY
TF5aRSpuCnoyS2spdSZSTk9hdWtSLXYwNXR6Iy1aS2EhKU58bm97bHgwUz9Ie3N2MlA3aTFkXypA
cE5EMn5ILXJFLTJfd2woPwp6TFklRiMyRSpmYDs5ej4xY2k2bU5gZWklM15efGU/OVFtbE5ONWxN
YnJKTTlWUzZ9MXxkYUlPO21vP21OdUptUU8KenNZRmpFNyh7NSgxfHs5TXJEfVBQYTxERz8tckVW
SVRDI0dYbUg9a28/PFZmazlhNW17VFlyM0tRenRqb0J1aTl8Cnp4dTh4cTVkVWRWUXMoJGJ6PVVn
cUhxaS1LY3FqaEshQEVveERFYW18NH03RWgyMyl9UUtvd2gkRG5ZKUQlWWEtTgp6KHk1fFB0fU8/
ME57QVV3N2QtZlUofnZYI3Zsa0k8YHM/bkFXTUlyMTlHQD98YXlBOHQ3RGJaMUJ4eSN6TV5MUV8K
emxMKEZKI0lqelpRZ3g0TyY0WHh4U3p+Z1psQ0UlTjBWXzBJZkA0flVvd2BWTnF2eDN4M0E7PDZ5
XjB+N1VYe1Q2CnpiWj09UC1iQyVsSWlWKXQpOD4yI042emt3RDg9Ukshc0k4eW1NKm1NNUJFI0k/
KVNFWHFiSzhEPj1xNVNvczRiUAp6eytWJiRqVWJOJiZtcSR7c35gT3hZS0lBS01CPzlyPlA7PU8q
fFdVIWVxZiUleCM/U3FCYlhtQXFlak18ZkQ9Z1IKej9XJEZNbEtNQkN7MVIqVkx2YkMxYzJlPDsj
R2d1azBUIzw9a1Q7IWdXflJkSWtSWl5qc1NzanVAZjtiWFE1YHlaCnp4IXw/TmFIU1Y0LTNYZm1E
bHI0KzE/ZCpQOTlaU34rVz0mN0QtdmtUaXRlMygkbHlXZzhUPFA1bW50VzktRXxBcgp6IVg+Tmk4
NElPaVIoMSE4dHl+bzJKNkUtYDtHZTthbTBVO1JSc2tkNVVWfT5DKWpleUhRO3trMiExaEhnelM0
fCEKem9EWDckO1UtQVk+MFRqamdTSnU7SWgtSHgpLWVKX3smP2RDRCF6VExBSEV2I25VaTQwJW0h
LXR3SFdlYkE0KFdLCnptcFFeOSZgaDJwKnZPZVF5fn5vK2ome25OSnkjMmIhN0srZU5CM1hSWTIj
fUBJYlhqSGFXUVhaVmNLfTJ3Iz9Dcgp6SHdhNDF4eWolN3JwVD1rNyMhSj0+QCEoQjhZYiF5YCk+
PWhOU3JzJStWVnR1UkNvdW1FbV44YHZHJXIoNXw3YnwKemNVVjshbHEkTEQ8Y1FUa3U4WUI0SilX
RUxNQHMlZD57bzIyJHxBb0hSZjBaQnQ2KDhSbW0jYFdmcVUoeSp6Jmk5CnprNlomcF52K2ZmU2km
RVc2bX5CZCFWTDtOentDMC1hMG1AR3I9bEItO3F6PDk0flAlJGBgZlQ8ZmprTCRxckg8Qgp6VzZf
flEjKmc8cDx0V3JsSndENS08MV9sVTxNcSZ9b2pzVX0kRT5xYiN8WHZ3RVZJLVRoMEhfOGhlVXBo
dmZqMkkKemt5XiU2X0Bmc35zSmtPalFVVnloKmdLdzluYz5ia1VfWnxiU0J+c2x1SzZVczs4OzEz
PVZ7ST16Z3RoUUtCRzc2CnpjQWhGPCgpOWkoT3ExaUhzemYkbHlATGhXSGc7K016OFNgWXBMTm5D
aVUtXkhfOFdzJTMpdm4yRUFiN30mfSpgSwp6SGZ3NWEtcEQlaTgmNmZZeGlyViVVQkh8aE14PTZR
REY0JXtlZ3V8b05DalFtRT18PXg+WWJYJFJMKW9tNjJFSk4KejhxSXZgQjRLR30ldjlLJF8hN0Rm
PkgqSjJrNSpkQyNCPHIzeiM7ey1vNXl7VTY/O2hKMEQqKGVhQmJYQCh9bHZQCnpQcSg4TDRuMzZq
WVk+cSlpYldNblBQYWgtZjJnXmskXjVwSFBFcGU4KTRsdFQmUDtnRGR8eClqXlZ3M15OI1BkMgp6
JXFodD9ZNC1UKjBJVXNEamVLJFIkQHlmITQ1PmBqQGM0Sms5ZFYoc1QmRntVI3JFRFJEN25yTGI5
bV87OT50dyEKemVvMzR9NW02R20tQDhIMlhZdkh8aW4xdUByWWNrWndZPiVYV1Y0LU48XyNjPEVs
a1d0QTVifD5YcUVGeWgyOzlDCnpKb01RQ09PU0xIc29faylBVkh5WEo1PSYkdXEqLTh7T2olK2sz
YkpBWUxoUmRRdHMxP0dXJG5zPG1fcX5DPWYqXgp6IT0paEdgY158TXQqaVVBX3FjeHpDQTFlKFp8
NnNnWCtnU3JxNFZLVU5aSSgyNCRAU2glcExfVDM0NHxubGo0PDcKemg3IUtfU2k2dmV6KUFVPThX
KGFZXnQhQk5XeE4xYEZ2TUFZJnd+RV8hM3hnPigxRUYtY0pgUzYpWD0mOWsmcDJVCnojQm9fPXpT
VUZfbC1XSzZMbEhsbld3IVUyO00xeWlzJGdyLUF9e3wpc09YWCp8QVcwTSVReiNpT0pIRncmcjQ4
fQp6Jj1za084fD5Zeld4VnxaTitqPitBVzlVVDwqKipJcXkzKGN2N2RNV0N8fk9qOz1pRDw8Mmll
bURqczdXZmA/VVcKenpuOWstZEBaPlFRUDExTXBYUXJ1N3pvRD9uUGwmZWFDa0Z5cy1LKzcyYFJW
VmArODVAZHptbHZiO0QoTng8QzhXCnojN055ZUNpbGJTakR1MDlObCE7YytedGg3NXotcn5hIUF9
UXI1cjYlVDZfaHFmVF9EdVc0V2wlRXlpS1hsSlEoNgp6bCRWfT9vJj43U2ReJD5ueUx8NVIzMzsh
UGBeRV9POWNOUGU/JEBjRm4wNk5mXkwhRCloI3h9aT45MzM4Z08/UjcKenVRajtRanlFZysweThN
SjIpJUpQTjdUaitjfnN7T3UyeUNpaCRydzlrWmw3QHsyfUpEdn52bD9XOE1RbnFIPGptCnpOeG16
c2lZPGdvVVJ1KDVJVURVc3tvPDAhalAxazthVzBrOHJaTW5jcSVVTCh1UnIkN2pfQj4lV2dWSShw
d3d5Ugp6a1ZNQnZhRzI5ZEFnMVZVd1l+Y2NpTVNVOThoJGcyZX1hQTZ4Q3smfXJFUVR9djxQMytN
Uj99eGZQaDR8M2pDKGkKemNXYWs+Ri1XXkkye2p6Y0F9V15felNzYXtUaUsmcjQ7K1EqR1A5PHlU
dHN0U1A5bEI7JS1hfjBQezxEfkU1YDd0CnolbEVMZSpiUCY5JXk4VT1BSGp1IWU9OyMpRn03bzJo
WWZ1NUJPUUZQJmJVZ3U+X0ozM0BuPWYjaXs5az9qIVZoRAp6cGNKOTI2PmV9eWo8eSFzdHpqa0VE
NC1BME12bVNIWmlgXyQqXzFLNFM4K1l8OzF+WlpXalo3ZyY4RUxFJH1HekgKeiEyWiYwRSMpRlJR
LTZ8NTlfTVRgQjBvSiNObXo7eG9kND9sJHFsanNBRyFgXiE1YDlrYD05WFI4TWlAYTFRPUVeCnpu
Rj0wfkNTMkRLeGF9UGI4dnxuYHB4b2JqM2ZjZHspVjN1ekxkXnRULV9wSkE9aXx7fStWJDE4KERj
OygmfjxaOQp6JUVPZntGJmh1NjBRVURHPUV3PzUmOVVfVStoWmtCITNDSiNtdk9aOGFRMjBzVGJm
akcmTVVAcXQ+Oz9OMko9N1kKejZHPkwoZDs/KH5xKU4xa3IqSU9rRnU2Yihfb2U7N2s0ejJqPWs+
OVVoaF58dlNDaVFAY3YoKDNva31PND89RGRCCnpIX0R+PyhuJFo9WCZIaElBZyZYTygxK2I7UnBI
NVVLY3shVFktKl9OdjFiVSRiMylFKnErKiEkVDd4KFZARlF1PAp6Wj9ITU9nPTMxcDl2SHJeUm1t
dDZ2UmA+O05qVXl1eG9NRGYoKXNyclNgS1h1KDxTYiFgRnlKUjB3NFlueSFxP0EKelRqTD5Ie1Ft
WWtedGI1cjN1aVdyaiE3ektlRU09JlF1T35DLSQ1c2h2QGFBKnd6Yks+YjNeUVFLfiVVQUpEWVhN
Cno/c2JmOFNgeipWO1F3fEp1YEh5U3RkeyFQKUk/aDBgRmQoJERmYzYjcyFeYzlpV2RpOCFgYlBu
bjBJUz9ZSzFfMwp6KWRfKzh7QD1naSYoaDg9RTs1QiZSb2MjVUFoJCRSdlN6bjtifGhIdzxBTm9H
K2RCLUA0SyozIT4zZng9cUxmZjYKel8hSnJLbD1ZTSRpZmUxVWomO2o2bnMyO0ZPXkNYWkpHa1dP
QTEhKTArTEpSTlo+ZCMkJkdDOGghREc5aSF0elYzCnpmLSV2bDglYEkkcEVJJEJkZip5SXE0c29n
K3FKdTh3Sn5lSSR6dkcxSTJePHNEKXNQWnJlRDIhbHtwKCVzNHdiOwp6c1l1P1k9PSMlYCNqOTxi
ZzF+KURIbCh8dUYxRlRYeGdyfEVsfkc7QyR+NXJZaGt8ektpNnc9SyVtbkV8JWdPRnwKemx1Y31R
VFh5QWZDbyk9KVhyYnp9LUF8V1BwSHVrfDRQczwjK0RjSlkpeVN6QkwkPmspXkwhNWIyZzdeWjts
R1o4CnpNQWRHT19JVngmRyVCREBEazFGQlJ2JV5QQF9YVnwlRW9SPkg8I1pNe2g3aj9kQjY3KGVV
ejkrOE1JN3p2ZSUmYAp6ZH0/PihCPyl3OXkzfUZvRjcyQDAhTi1sRXRhZW5WdX10SjhAZnJmNU1N
JUQkWXRoaml5eHJgYiFYd2xxdzlBfkYKenI4cn5pdTdPdmhJeDxEZnQ5NGBCSXkwOFl7RHU+em4z
Y1EzQytXPnN5NlErfWRrMFJsKCleNHIjQDloPndPSntACnp3aWd+WjxNfE8tZWZocjlKKCZCJDtA
TUk8ckFPNlZLfnI3YiNfO2FTWUVHfm9vSmdWUSRRLVN2Nyl1Yz1Fc3RoaQp6JmBPcUNgR1R5UWJs
cSlIb3R2QVpJKnskZ2BOMm9CS0pgNEpVcz57UU80KX5udG07Z3RsJDRiQkZaNzQlYVZ7OyQKeiRk
P0lJU1Z6UnNCO31pVSg/QHdjSF4pOXlPPnhvNXtmZmxyVUhKUz94UCM4ZSRKY2pkNmc4O1ozI0VW
czZ6KihvCnpaRTB4PSNTVEFKdzkoI2E5S0VabWBIe2JlWSpKIz1SMWkwaWQ9UU8xZUl5b2ZtRnFi
NmQ5ckYhWUFyWHpsUDlDXwp6YnMoZl9YbCtJRSo5WjNUKyp4ak57RSUpX2kqPyVBNCkzMyRmb2N1
ej5xbkgwJmwyZWktZEQlI2poK2RYRVF+ezMKelRqJWpibGsxTVdxckpwbDs8N29WJTJhPjMzaGg+
UUE5Kl83Zkd9RmpXSTVBSm5aSjZgPVgqOGc3LWd8VXJuYHNeCno/WSFiZmVvdn4jWWlEczFsYH54
PFArd0EmN3FLM0EhbDhTbCZiKnU8azYkRzN4U1ppez9eb1RuK3g1eGFSQUZkRwp6bXBSJkgwYFgy
e0N4U2ZNVCFLYDA9UUlCQ1EwMHMwJD1ofEw0a2ZVb2BzJlIobzg7MVQhYmlBTU0hJlprKW0kd0oK
el5+cjNWc3BmPDdseVhiUDZ7e0FGSjUlYUE/JHA+WSNGTl5jK3NjP2RTYWMzK2Bnam5kbVNwdy13
SXZxTSNsYFVICnptazlOKkBxNSk7Uko4aD9jJFhhaDNEayVTWk1+UChnc0U/X3VpdUwxbGtEYnRK
PEYlUEVxTG1TZStmXiM4IXgzPwp6aUdRKFNpZzllZE0rWHc3JUd8OzhmITdTanlpe253bGV9UlA/
LWBmP0Bzdj5aZTs7elZ6ZHohMWRycyYhOX1mMGEKemd0e2pEWEslMGtZIVc2WkVqXzYjSU42Uzst
aSY9Zyo+P3tRJDFaTUtkNDZ3ZTc5NF9IMUFrTiRHIy1gOG5Gc3QyCkR5TldZSwoKZGVsdGEgMjcz
MjAKemNtY2U7YnlRV3xgfVY3I2JheHtsMEA1V05mfE1Zc25+O1cwT1ZfM3JOR2pka0FTeC1LKHcm
PTw1PlBAcXI0ZGtzCnpjVyE7MkBCOTBXSF9rdWpvSDF8PVlwPWM1bnJxSF5mM0VBZypZdkA0PGlZ
aGdmIWppNjdOVmwmMF9IK09fcEFpMAp6JXE8MVloMFYrYU1CKE9FVytIR3dGKnVAUnl6M298MnB0
bHh5WVU/SlIzWEBZLV5laHlrQG97cjVhVmdMTTw+dFcKekg9Zjl3VWJzWWJYcHVLUm4hZnV2Oy0m
MGlfdyZRIWs+a05eLX1PPlM1dS1VSCpSQXFoWTFSX0UyMGZRdk15TSZECno8dlBpJktSLTVqTEc4
aHFuVH1fQkEqQVlqITVIezxZODhXX0g8U1pXS0wlO25qKEg0NEU8fkthJCN6MTxlOUU4Vgp6dVZL
ZjVBS0JtN1FIKFA0WVQ4IzBZM1A2YzJLQVImKlR8aS11dHJxPWR7I057YGk8OXR3QWElMFE2S24h
O2gmLVoKelBtbGlwZH5vUmhjNEBNVzlOK2pZZGVTbC04flBudWZCJCZwd0t4QXREVkVfVXJjQXtt
TCZ0eWFvQXZFYTx4KTV2CnpVIVEkVVhOZUsqQFlgPzRkeyV2UndqN0lwUzwkI0ZLMzx+MT0rO0FS
b2ktJTAoRFg+dWAwcDZxM1dgejclWkhAQwp6OVczYHx2Y3lWYElsU3dwYyEzbGxBaTwkQUJnUzt1
VVI4e3lmekx4JXt6cVZOWjdCTS04fjBqRGB5NXlMO0A3fXwKemdlLWJ2Q2J2eGomZihxdVNzQHt8
cSNWbH5CUWpTRyN7TVVoUUFDcS1HJE17IWheO3B6MSY2VEloc3pmSiREPk1YCno7NWJuTjZfbU5g
PXN3RE1EJWtyb1BHaXRaNHRBSjRgTSNEQ2VYLVArPUteK2dVRUpnTXY5bz0pLWRNZFVQNyNwVQp6
WXBTVX5MfjsoQGB8NG5rVihlcEVeVG48LW96fCZJdExFM3FsKnkxKTx9PDRndiN6UndtVkhEdTlY
T242MGwkQ1IKejYzK0xObEp0YWZ5R219QyllTzIwYTlhb2JgdT5yNVJHP0coYmtAeHY+PExXMlNT
fXJ8WHQkbVQ8QHoxSW1+clcpCnpBQ2YjOEVHJVNFJiteJUt1e31+bzgmVjQjMkBzcjh6ZG5QM1Bo
KkttS3hlYzQtTGQldSMlY2NLIVh4enZlUHZKbwp6ezE+OHdAdUR1d19oNFZTNWJ0emNMdU11IVgz
JnJIdE1PbHM3UCpeMWJgeCUkVlM5JkB1K0NXS0BAKUJnUzxTRT0KejcoTXo+aVN3MWo/PTwjaCNN
JDljJE98O2VlWlN1KVEkT09CNyZ3U254SGcyUjM9MThLREgkcDl2RWAoR09rM1BOCnorRiRIc3ZF
QXklcTszTHRMUTh0bTJkUH42ckhRKUlqcjg/OyV8ZDtAdStuRE17NC1AanMtRE1iTTw7VlR1N19D
ewp6empaRVFhamhJfDd3eGgzYj5WejFALSVRTnQ4Q3hoYG5Bb0grPFRPVSZPd2BCS1VVXktxNTEq
bXQzJk9XakMzZEIKempRKz0zZzZtbXM4N2dlcUxPOXtgWERmKnM0QjZwLVBIfDlsSVpCYnRLWndm
Z3pTO2lnUU56PlN2RD41fntrS1VPCnpYTTdHMi1gYElTaW1oa3FrUU5BeHk7aXhWeEkxeFU+dHg1
diZnUExgLTN5WiVhVTNyJjBKPytjT0ZCTHVGU3lnPQp6Kj47JSpiOTNpcCY+P2VtRCU7N1dmVWB4
Kzs2KytJWXNhY35qMjl+M1lzYnxVZVZUbG44YTdgRV4wdTU2QVdyQUoKejNhZ0E3LTErUyo+YUUt
dk5iY1pkRXBaZkAjVjVFQXJFWkh8NWlBeHhkTW5VUyRqZil3O353TkBZU1A3OHl0IW15CnpCViY5
fGpjdzx7U0kxR3FSQHxwNmRXdGooaGkrITJ7JFhAMVVoYlEkXnp6VlFBNUxQSVdSNkNZYHFGNytQ
SE02LQp6UiZHSWN7WFdrI0ZaVV56IUtLYWMod15LVDZYOHVoYiZuZX51TEF1S2VrM0d2dCF7VFA8
OH1QM2ZaZTxwNmRjKUAKeldtfExrSillfUB5SGhoIyhRSW5pblpWeEVtTHtsQklhNG9CQ15kbHk/
c3lRP2VZRD82eFpOYlVDSmU1fXlydkJlCnpIfEA9PDM/dXxUQjBWflE1ektRdSFMUmlEZF9DOXgq
c0w+Yik5O3UkbEZPV0BYPHpQV1FyOUg/KFk9fGpvenw7TQp6RXZnJHlPckY4VTslbHwqSWxoaT1Z
dzZaQDd0Qn1mKGBzUiNKI3kkPXBNOU0zVCs0SzdkNjV2PHskKjUmQGZtXkcKejNlZ2lpbj9ZSVdo
MUYyUmBEKkc9NUdLUUcrWGNVKUEqJkJGUl55T2xKY2hKNUNjUyV7Kmx5aSZFZi1hSnBje19wCnpp
JiM3elBUaiM3TFZFR1g+a1hyI1hxKmREemprVWVjRVAhbkFOPncrSSEjZEo7b29hSWlmSzAjQlJm
IyNaNyRNXgp6PGE/eWI1KnlDVGFeVz9QRDJadD9lU2txQUBUX2h6M31kOWs+OStTP15KeFp7QSM7
WUZHako7fkp3QzZpdmgrZHYKemtnTjU5KlRFYj1jV2ooQndYRyQ4QDkoQns/b3pyNE1sWnpYPlpD
JG4mR0VOaiFWSXlzdzlZez1GRUFGIT56ckRECnohKnJqMF5Te3NGdFkyK0NkN3RLfSRlUXN5TiRY
Q0x7RkUlM0JiUn1Kb1FHUyVqa3t9WnszRCF7Jm83QiEmSlE1dgp6UVZPcGhHdUhNN1gmPj1qKHRn
YyhPY0BFc3VzZCsjSyVFWj5PUEtBSHNibzU9Yk4jSz5iRDtuVUBibm9CK1EoQXkKemNrSChPK1Jl
YVIyfk1QKEF6K1p5dDdLfCZPRzhnKXZjeD9ud2k8c1ZeOFdDaCVnMXNkaWsqaC0zVlF8SFpESVl4
CnpWJXYhNzdhZV54X1JUNTZtfFYhT05OdjdvN0FafG1NcnpLTnE3TXQ5dDRvVEo3JnI0enVVeWFG
WTd1Njlra1p9Rwp6VWxibFY9anZqc04kZXhecDQwOC02PzA7P21haGozPXVXZ3I3X31iNHFFPmRl
WTZpYF9Va0BXfiFzcU5Pbjtrd24KeiZoN0JGVUtBVz9RZENqR2lgVWJSbCRzbFUpdjw/cCF8O3hk
cjd2O0tYbH58d2RyPVpKZlJKM1d7cEpUJl84SXxaCnooeiU5PCErflY8d1FHeUZ6SU5kOUl6VSZ5
QXVsUURUTSpfQl9zM2IxeGQ5KUY+TjkmWigjcnVQJVpmZ01TPFhxKgp6bFRIfjxES2dHVjk9Uk9X
QkpeTD49P3czJV9HWkN5VEN5aUpkfU9JbjhxQnEoRzlyQz13XlU2enZaQ2NpKjFZaHIKeiZkQVB3
O0xuRi03YG09WjgtIS1SPiVpU1ZKI0Q9KjhjJj51PVVZfl5VaXRfUktqJTk4PTZ8KmJnK0UmZzR7
P2VBCnp7TTFQKlFmN1U+cXJXTDh6PEV4JU1BSDllbHJMTTNjUnt4S09PNzNydERtfUBvcmdTaTQ4
PzQ9c1lhZ3F6TWMzWQp6ODtxNylVKjRBez1qZjJ9WGp+czRWZzNFT1BkbDdfSThqNXwpYGVjKENs
JmUwYHFuYDM8TXttaExeSyRTYD1mRWoKekVqPXoqaS1vdFBqREcjeHU1NDhPa3E/RDRqN2hAcC1m
QnFjIWJDbj9KMU9LRl9FejstOX5CbGRyVzBYenBWLTlaCnpaNmNiQjxzMmI7ckx9XmM8NHdhZjJ5
VXBNMUliO297cjZNR3JIQTQtcXIhcnhTQGVWZ3p2Yj1CYClxVGNnIWc1NAp6blh2ZD8hQj5NIW5N
UGJHaj0mUkxNMys8ZEdpeW1nWXYzc0k3fkQkZyZAciNvaT16PTtpMS11TDB6QjEtKit0RyQKejw4
ODN5K0pVdnFAaWA4TSZUVUM0NTAtRG9qKlNqb09wSHlRWmJ3NVJ4b2dvdyhsMTV2KSs/SFNlNmVa
XnllPSpqCnprI0N8IU02TUROYT0+eVh8QmNFWmRIIVluRlVMVllZWUUjMlI5YVF5dzxXPE9oMjd9
K1heZ2t9QlphO0B0TWdPNgp6bGg5ZzQzQkIzbDQ9VnwoODR5UUZpMHkyeTw3JT81PWUkaUZ6SV5g
aEJkTD1LdDVGNVk9ckQpNUk3MWohU0dHZlMKent+KF49O0oxWClMY0lYbXFJS0ZubTA8YjNkWnZ3
K1NrIUQ0Y3dfUVdhe1psN1JraGZlT3tPZ3Ixb3JMej4rM3EpCnpJeF45azNAdnl9MFRiS1RHM29M
O2tIT3Y+K3JCVUlpdjY0MWl1d31jaHpLVmtDM0o2M2Y3bT9kdj8oO0h2cD5rZgp6Kmt8JnkhZFQ1
anNWP3RhPjlxa1dlc2NGSUJRSSooNVhHZ0N6TVJMSE9vTjRMVHs+M2o3dygmdHlnXn11KjlRYzAK
elVUV2kyaVZqRz4yIytwRnJmPlhpIzc8RWNodEVAVzVQVTNNX2BubnFBIWI4T0F5bjxCQkM+e3NQ
MEFYIzlLV2k4CnpmbWpqU1QodUZrSiVNUGI5bX12VGYxZlVGWE9XaUd8Q1Y5eillTnRQQ3luU0Qx
UT1UOXtyS19LPX53RUl6eUtITgp6a1opK25ufjB0NEsoVHU/YHl6QXVqI0UzYHkoQzlwZShnM140
cFh6U1pnN3MrclQ/XkA9d01OaXpNfWJEVi1ZUlIKelJqRiZ9KHJyVWZYSGZzVUhkfV85JmBUeURO
QGhUUkBGP2VGIURecHM8eFRfQ1J1aSZeeT5vTjdeKHI3YyspTUgkCnphKDhKX0Y5YjBJS1V+ZGc0
WSl5NTVjcXFaXnJoPndwdT9gdHA3RmJKTmZebkNgdV9MeG5zVTZDVVFCRmdVZWxFMgp6THAhOUdl
KjRzXmBNcSZSQm0rckxaMDsmX2FuS3VHclpKM0RhQjM7NDtwLUhLLXByYHlEUztXeFFgPDFnd0A+
ZSoKemw+YSUyaWRBKzVCMnY4NUIwcXhXYytnRWJSZndtJEpeRVkzeWJHKFFpJHJ6OVIrKTtESHtp
alpRUD5LO2NVTn1oCnojTH10VUBQaEIyUjgyMn5GViU2TVZXbHspRn0wZmdWaTFPSU0maHxGJWhC
JGFJTjR6M3dUfj9GOXxUcXVUbDVoewp6e2lgd3FpMnF6fk5gdnhVLWd+Pzh3ajZGX0RzMHEzbDNt
YytFZ2FabVBzKEBmTjdWeD5FOHBJPXBmMUBnZDg8KSUKemI+KyNHKylHOT9xUihDandITG5tbXEp
YEE4citvS3BMK1dJRUVJJjtJclEpJmA2R0ZyQnN9OCRmYD08bCs8cipoCnpffUVOTCQyamRKVVE7
NjJXdGp+eSZ9RjJIZGc8S00kazN2JWlGJD1GY0p8d1JGSktDQz9LNnhRK298ZXdSKXklMQp6QSZZ
SjBBSEY7c3haQFY4aTA1Xzh2aGBWQEc1ZnQ/PX1mbXJGVzY2RTtpMjd1RCZaNWlEOUk9Y2otMDZp
ZFg+QDIKeitfUXJkK0ZaKm1WeD9mYnAmfEVXYHZMe2QyO3xTSG9gLW88Wi07aUdRNHZyZWhzQWh5
QmV0PmpJSnZ3PWdyej96CnokR3hDYD02QW9wa0AhWjRuPFVAdTcqP21jKm09a3NPTlQ4e3FHdWR5
YiNiWVkjbmFnTEBfYz0kQnNidEszbVIyVQp6eExlQUJzYUgzLT91SWJHdmAocE8rMCReYGMhP0xT
aWEpPi0tRmI3c0MqPiRAVUNOMVIpIUZyMVRCQDspKFRiRjYKeksjdVFUXlQoSyZ7KTxZZWVvTVUx
Vm1IVSR0NHR+VkU+MV97UG9nK05gI0c8VWd3JENpQT9ORlpoJEtpWlI+MFJyCno7aVE8eDkxdW1f
ejk9KCgoVVkqP1BfOEp9U0dmVGBqaDg+U3BLNilNXlM/TmJEJiNWfmI9eTlteWFzN3hvJFdGNAp6
QFV6R2tIa2VTTj9kWUI0d3JgJjVvangzeHNjNmBHM2skMChGcyppd0tUQGJTVzVTb2BxQjd7YXMw
aDd8TEMzYGwKekA2KTMwUHNyO05lQGElRVpJeGtyRURxc1M1eSlJUHp3ZGNLcn1yRGx7KExfOHto
aEgjdF8yJVVxKm4tb2Q5ezkhCnp3XzZnLUE7LTlxQUVsXkhPUCRWK0JsJkZkYEt0VWRwZ3dsd2hZ
bE1JaTlqPDwwZSFfSEkhalV0WlY0bmF2aFU3OAp6ZHt9JW9WbDkxPTNhYGduSytYKH50SG9XKWd7
eEtTcThEWEJEWDFyMU5NSmVyM0F4e3RUbzFXI1p5QlhYK1JgT3kKemdpKlgjKF51b2ZreV5hWDVs
dil1UC1ffjIhUmV5XiRfajRjaipCa2RnZ04kVV5ydkVtej0pJVU9Ozk2RVVWNSgkCnp4MUdKKzZq
bTxeJFJ3c29ALVN6V1hibXkpNmVpfVVwRG59Tit8Kz1ETkhIYFBlWWlaflNVYWtDUz1eVik+VDV1
Ngp6JCo8d19CVks8N3t0YCE0Vi1vXjk9NjV0Z2dQK3dhM043elgrek55eV54OC1BOD8jS2Ffa0o5
JXwwd0xwO3RrNmwKekpeSm0maUZjc3BUeTByJFlAI1NQR3kxaFhtYXtEbjgkKyF7b3slSnJWJmxG
VWB5O1o8aWNUKD85enchYWNLYDJoCnolKzt3ODdFKSZBb3V2VGA4I2lBalNFc1BLem4rWlV5ViNo
P3lTU3slWGJmbFp1YC0yajFhcktUSmFKT0VqTntZIwp6bVdGdzVHMCRqRSN9diVJdHJ4TVNLSEJN
UXhSMkxJM3laKF5TPChYa1U5TzRORC1+UFdGOW5qZlh4QlI3R2ExdDEKemo8P1ptP3xWdiR1b0Ze
czw5e0p+Xj9Fajl4dkAhN0VfWVJPdHhzP3BRVG1FYmYwTD1UeiN+WjFtT3lHUE42UG9rCnpKa01R
VWhOQ1hFSkJDfn1rZWRHYXpWWFM4Smc0X0R3OGVvO2NMT0d8UWM1Tzg5cHFtT1ZUZWIlRj4tVCND
fTlEcAp6OGFVI3JSM1V8JlhTazd0bVNlO0g9XkJVV0ImUDBUWjI5d3NJKCh1VUNqR1gpanY+ezF4
ODwkbSZeKHlpdG4xWkgKeig7WjZLSl5gWHFCSlIxcihRVkdJenhIbCtiJUxlaTdUNDAqSGw3WlBk
bUpzRiRqYzUqNXhufVV4IVdKITdKfjBsCnpNdHg3MkZtamdiMkYqUThJJGt+PkREQTM/Rj1mY0sw
KXlibFUoZkRfejRnV1VreGAtKEQ+KTZFUXtuZWY8K3VqZwp6WkNUViR4b2xwKHtIT0EzTiR9Zj13
PHdlbjltJnRaRkYpeDIyYU53ZVF2OWEhRWh4NTRpUDdJTzBCaX5EKUJocysKek1pdjltWUFudS1n
P2U+OVkyTmdrJntERkV7YWBhWGltTnkpRnFgYylaO09LTUBuVGlWbnMzaT5HWFE9TW1lcjB1Cnp2
PGZBTUBsbCVpQHJPNEwxa011SmBXXlBPUyVIfSNiVGxYITg8UXRXSlNASj1SV3N7NGtpSFBgWXNo
RlJ7KVJ5Zwp6YlpzR1clXkwrens1eUNHVGFDTX0pdlhzJm9SR31HMHtna0lAZytlKkU1cVRzTTMo
fjFgdnclfShEYGlTWEFGWHAKeiFQSyQheDk4RkV4SktyNmJjezZyKTQzQCtjT3FBKGZMPiFHSVE8
YTdPey1YYEFEPCVVOFhqZm8md3lIWDIlUypVCnpeaUhOakg0PSs4WXFGN0dEPzAhaUVBMFY8JCpN
VldTYGZAXk9aa28jPkA4fWNWa1FlaWNpMll5N3RSa3FLRUhVeAp6MHFPS0R4RV57e1QtK3hmO2Vo
XzRHRDs3fjtQUG83eyQ5VkhWKzlzdmt5Sy0hSHxJY2VtfEp9JSs0QUZ5e2FUalcKenU8Z1R7RkZM
UHg9U0dWSnRyQXIzTlBpWF83QUA0YmghJWNHU3Z2MmJ4cCVDSiojWF48QVBlJG9ybGlNX0JnSys5
CnpQPF42Z19HI2M0emhYYlY+RkgoNFY0dkZvdyVKN3YtPFloeWk3UEk1WlFRVyUpZ0UrKGl8akJj
VTdZMS1jb1QpIwp6X1dvaStob1ZAa28jfVQ2Skk4ZUw8JXNqT0lTbjxAYiN0ayk7fklDbSswb1lV
cnJ1fjtOfjEkcypsMEpOaElSJnoKekhfMXFveFU8VlI2b1pLRkdaQHp4NVpVdnxGfDw5UG0rP309
NGN9JSRTY2E7K2pyOShJJVM2SjlETGRHVlEkRCQrCnpldnRUaVEwQEo1QCRDV0lzX3JCNGErKHF8
b04zSWNwcE4xVFQjZit0I2IlNHN0djcpU3stO0tRbj87RWtpMXFCTAp6M290X0JkcmphR05kdmQp
WVpoMnw8OEsyeHNUU0xCTG0lP3wzTyUhU1kmb3xRe09WQVh6OG91S3llSDQhMFJkJHcKeiF+ZSZP
UVlRZFc1dnwhV2NTaGVHe3U7MnVaI054KCU5cjtyX0NjWFByTG5nZSsxMDxTaVApYFFlQHh0Wkpm
YFppCnpIKUVZRTQ0JThKYGt6fitMdzJSKnBJP1JKKSQ8KjxiUGBDVWZsZDIhODdQdDAoa3g9JHEp
fFk5M0VVKVlNPVF4RQp6dWAtdUBVQEZ2I3Q7RVNjeyl+VGJ4KCQhXi1rQHJHU2AoanMqQDBQbShz
ZCswWjRmUmBvJFI8TGp5Rm9ebnNwbHkKelJeQCk1YlBqNnU2SnNvazgtcSpmRmlnYjdadTY8Sit0
MUNDJW1KUnBMNUhTO3AwJmtyTXAqak5SZEkxe0A3KX1OCno5ZU8/PzIqX35UKz4oTTJ0eiV0Jkk9
SSomdUxYYX5uPEVMRnJFMjtmcV4jMklpN0EqPS1fbTw4cSNYRHReaH5iewp6UENuTXpZK1VBeURm
PWwpZmZ6QXxpN2khITZ7WUdAR0w2Z3g2SDQyRj5tZC1GR0lVRn4mT3M9NHBNbGNVVi1tQjQKenlB
UGQ1XislYnd2UEk2WkB2VTN8V1FoOSk0aVN9Kk8mcTxiYkRvZ3A3UFM1I0Q4SDJJdy1rNFA4MV8l
IV9RLUlkCnpJOVIjKitLbmRePWNZPDM/WGt4U1dfcT48VWpQJE5BKGZ1KTRiMFplbGRpczZ1V1VN
ZW5NfDA4ZH5SUW88QHohaQp6dUgmT1k9REN0O29TdkxJQFJJcW5GSmNwXkgyUlcxRWdQUHF6bXUk
TVl6cU1xcipYPklTM2lCY3cpTnNMQD5TNFAKelNIdkleUXNOWD5rezBsRFQ8eHJ3VDlMUGhRKzsz
X2p1eDQ+bkY3cSQlKik4aCR0ZDJxXnxzWER5bFY1azxWP1khCnpxeXxpJXhhPCFxckBEPT96cEl9
QU8yODtSWWxPczQ+Xjdod3tRKj58bjZVJXxjUjhERi1pR2piKzY+VHx4OElMUQp6fDVCP0E8cyg/
NnRfK3E4c0I3S3QhMlAtYVReWCVIWkd6cWQrI2VyUV9ldmNjeVUydUNPSjtYZEpSUkh4OHE/X04K
ejBCQEB5MHd1cnNhSTAxezNCVl5HQ0ZPZnBBSWRnPW81fVk0Vio5PVA8R2hfeDZxT2ttSTxNcGRB
bDdgZ2wtcHcyCnopKnN7eT1QZjw1RSlNNUljbn18RUcxMj9eIW5lQVpvN3tsVG1Gd0R1JGwwOz1p
MGhXelk/ZHtLO0t8c3dxaXxBWgp6cEQ5cmQmOzJqRU9WXkxjX1gmZkx5Mzh7c0Q8aVJ5d1JScnIq
TyEtVEw5TysqbzY9KyFEVmc4QW1TS00hbHhrZFYKejFtdSRNXyMoNDsoM0E8KHsyaGg2XllUZjs0
NnNkb2g0cD5PbEw/KWwweHc9Yj8hV3VsYXdvUnloIVN8RFF+WkRaCnpoK2F9dkg1bE5QPmZKQ0hn
TD9JUz0zcnFQIWd5cHZZMGNvYVh3azhvdXlke2RuRD0kIWw9QW5ZeCY0JChQWjl4Nwp6V0B0azBn
VTQ4TClEalZRNUFXV2J5R31DJjNDOHRBejIjMXB6cj9KeERSY1p1S0JGWWNeMStuaGF6QlVaRVM2
YlQKenViP3B8IVhweDYwKnM1fUN7fEZnSGUkUXs8MyNTVWlSNW9oKmctOW4wI3N0MG58P3FleXZ0
RyZTaElyVUJ0M2xpCnpIblI+LUE5MEgtPWgyakNtc25FeHBxND5YP2w2MihYfSpSXm47P31pMkMq
NlhTKXRHRTJhdWRMTVYzKmxPc3A4bwp6QFhUdWxvfm9RaEc/VGI+RDs5Q2wld0Q0d3prZ2dyO19U
eTlRMipOUi1QMGtKeSlrOWBubiYrZVolJnhPY2FXPWUKejVMZlhrYGotMFNUaEIwUnRCQiE2MWR5
Vkt6P3gkRkR2UlV9OUJLZk0/aE45UWEpWmA0WT0rZDc8RSo9bV49Mj9ICnp0LUJNWjkwWDxFKn5C
eGl3Vz5JOyMhdDI7MlBBPXZ5RWAhYEdfTGxfcSV+al5wKjNAZSt6T2xFbzg2cTkoOXc4Qwp6VmRT
cDA5NXk4MWFmXnA1Wk1scFF1fGdidFRtLSNhTilYWGV5RGxoUXM1KTI+Y3xHVEw0Pz1TSmVDNDND
MkVFaTUKekZMfVhqTDwqeUdGcHtmVWBJVVBCZVJ3cmVqYz9IXiNTajZQYjUtI205UlVJfDwhNnlC
YEZpKmI8Z0M5NG0lXnBICnp7ej8yUFM2RVcjWVZiZUE+PXQlUDshRUVia3MxVSlIMWU4KjdYe0ow
QVo3TnxyVnJ0WmcjP0gtKCYyflcjV0k8KQp6QD9gciFnKkpHMSYja1ZuUntNa0RzOFByWHtuKj0m
emI9MzZkQ1YqTDVRYkpLZEBlJShlR1ZAUEs5VkUjd1g2S3oKeismJTM2bl4oKEd6cjJJcXNqMiNX
U00oOVZWQn1mPVFrOXZhTEIwNEAxU0s1fjk+dX5pY2B8b3AqO3Y5PDUhbXtsCnp2OVJGcihBRXFK
M19NX2pLNy1QLUReMUMjd2p1cjZ5fTd1PmYkNnl+OGJ7dkRuNV9oSVhZRCspVmZofk9KXipxaQp6
ZWozPTl6dDt7dThMdGR8VnV3Tk1Ta3pDaHtpPjtVP3N1KV4/QyYjVHswRGtsOztCeTwhT31TRHg+
QnNgWTE5VUAKekpla3k7M2Zsenk/IT9vdSFLfnxgXll7bVFmJWkqMy1iUz8reTVrYTNuK1MrRldk
UyNZZVgzfCtkYChAX0w5K1pGCnpGJmEtX292YWwqKSRfZDc3ZT5pYDtXPzJgUjcock5QfE53K18m
aSRfcihaYVF1O0tlbnlPcFNgZEJEM3k9KHhxKAp6SzB5Y0hIcXR3dCl4eVQhdnZEMGdCYlRad3M5
c0g7PFM/UnNVUCt7fGJ+Wj8mJTlUR1EqWVd0bDR8UDZxQ2khSVkKelcqQEp3eGB4b01MQShYbGhf
P15vIXFrdyhaTmJodEw9aWlzc2E9bkVWelQzNVNmZnImZSokTnYrTTU/V2orVSMkCnp4SFFAM3dI
VU4zWkw2ck1walMoVypxcWQrKVZlTjM3PEZmcVBYY1ZaP3ZfWkNVZ083fXNTYTllQFlNZVBjOGh5
Swp6VmVGPG1fZntKQFM2MUxDWDh1dTRgcFg4d2N2K0g2Qjc2aUxmYFRwb2JRRUEhNnx5VUM4dXMp
VitfRk47SF81IW8KemR8JEtrQXFAZXlWIUhMNDIhZF5NeWt2NzVUNnZZVFoqbSszPGhZYXhKVSUw
cm41MGo4K1J0QXlCMX1+JSRjVEtOCnpZdWVkN21PU1ZwXj80TktEQDNyPWtuLUtPQj5VQkJvUnx+
K2U2WXYrSnZxeXgmaD16Kys4byk8UExlNkhxLV9ZUwp6WCtsNlRDXk4+djRofmMpPnNEM18md0kh
NDElSVJ5Tmw1QCg4V3N4eG9RI04pX3dMIWc3MFp+RCV2c1R2PW9DZFkKelZ7M3MkZndia3gzMUJi
dl9MKk0lNCNhVmgrPD4yTjk3a1dvNk4qfXM9ZGtKO3JebCZsJndYcHl0M0dzSSsqZTtoCnpnYXRH
MTV0SlAtOSZXTWg+RW0mUFRMfj5mdHhkO3Irc3Uxbk1ATTl0Y3QrK05OM0VCdWN9fE1qXmVnO2Nk
JStUKQp6MylSU1BFfipHeipDTyl4XyZmISg+a2tALUU5V2F3RH1TZ0N5ZmFEaV5HUThoTypwd3I5
TEN0Jj9tMXU8Ki03M00KenYtflFAJD49TmBAdUd5fFd2OUJ9a1doeHFVelFhbnhHJDxGdHMoUksq
ZSkmZj8ycmdqOGlpTChLZzJheVIma29oCnowcGo/bWx5fik1YSF6JmZCZUBBcD5AYnJ0KntZfEde
fkpBUDJUMDA8dF9nOGx6aVVSYEUhQ1VoPyhjWEB0IVA+MAp6N3Nla3NffDcyUntze31HN0xyRFp0
WkxydGYqOXNnS3RWQSs0RFZtLUlPfWJ5TSNrRmRePGtDNV5od08lSEtZPjIKejR3SiNvcWBWWFBv
KmczUClGRlk8a2FgWFlQdHtneU1KQlZGOFIhLWBQanR7dVg8N0FNbFBARmNWVWs/LTIkWHsjCnok
Y3c/SFhMRm84dXFqNkopVWZyXkRfKXh9PUgzUCs0SDlyOHBMUXFteThhZ25jKlE4UEdIU0R0Sl5C
e3MyUTtMTgp6WURGMj9IPV9wXyFDNVMpY1QxcGlkVCFvKT4oUFNPdCo4PCpwKT9RR3EmPG1ZWEJr
T01IOHdWU3ZnM1Z1P2JAd3QKekRpN3tJNHcxQXJfSnEtRmRLTzBDSkxGWms8ZUN9WngpbXR+bGtR
cjt3UzstNTdvZEZfNCt8VmBIMlFYYktxdGslCnomK0JhZiFCSGFMeT95JGgzM3tZVyE1M21XODZ3
P0tgR3dJUDJwVlI3WTVseWolOWFKOSMrSkpHWnN8I0lTIzc9JQp6K3RaNSgycXVaZ2IrTEd4QD5Q
bnY1c2x1e0N9WGc2WDNMak9efWk1TEhpK0d8O083N0ZBZENzaVhUfDJjZkhIY34KejY/KjAmVG4k
ZXF1ZypVV01jN2lRKXo3YG44ci1EPGokJC1weW8+e1NSU2E+SHxEQSY+aDJhYCs9SWtQSTw+bTA3
CnpaSiRLUExiNWclKlhvT29pQSZmeUJ7M1o8PXZYKSQkdU1vOSg3dDVZb2kwS2IxajYoJjI4KzVr
MFZzfUNqYzdCNAp6cVRfVEs8NTspIyVsPG5mLX5MSiohaXojPUEhX0k1Sz5fJmNJUHcoNSQyNyUo
KkopZXIkUUI2MlllfWxgUz99QFoKemFqSVgjUGJKbG0pQ3dRfUo/KHcxPmltOEpZYUxAdTBMZzIl
Pm1gQmpUeURAfipGdEZFd35mTnBSYU1BZiZiSn0/Cnplbnp2MyRnbGNgOW9vMDNVa1hqezhIREIz
UWJ5SjU5WH1zc0ZKS0EhYXJAZD1vUTBsekRZKTdFP043PlJgMX5FTgp6SCNfKTllY28tdl94bntl
WDhBbXozUT9mekRsVXo9aFVhM2JMb2pEZitLZzk1KiNxLUJReFExckIlM1RBKVZyLW8KemQhMChl
b0t4NEtIJHYtfntKWmJXOzYha08haUtLKjF7SEtpaVpOYzheJUpmY2VCKDxFRklLR2I/OCVpZUE9
ZTBBCnp8STUrMEthRkQ1NGlNRTZWIXU0OGducE1ebz08SkV7ZiFtYCFFVXY9JXE1Y0RJWlB6SjxJ
QXU/VmJJNTgpRFZMNAp6RVk8bio3dGo5R15uYHo2MG0zKD8oR3dyQSNVd3N2Vn0kZ3MjbjE+Tm8z
MVdAdHBObmsldiRiXjYrdDEpJWBmcFIKek4qTip4ZSZiUX02MGt9TCprazBVRStpemM5dT45VyUz
Tkw0QWkoYjhDSis3TlRAVGAme0BRRGBNK2wtbnM+OG09Cno3O3UpS0w7Zk4pI25WUD8+MHFFd0JJ
bk1DTn1kRFNyMVMhT3AjNH1KQlBpdWIrajM4fFU8czd0XkgkJlBQNFZFYwp6I0dYUyUpOFdHITZl
fF57OGg8SktAV3BQZWh0X0Y9PUhtWmtXfV9UXj1DX0x8Yj5eLVYoQWBxPjlxVSZJZmVEdDkKeiox
P3dSWFlNKWNxOWl5WGQ2V2pPT3Ezc3ckSnFEI2QjZTxFRH1MYWVuQT1mWl4kMVR2aDhEWlB5WUQh
LTVifWVKCnojVilGYk8mKGlPI3d3QjYybkVeWT4/c2NQVTFXc0k/cEhEaSRNKEhmZUdjMEstaVZY
KilyRmZJYTl1Tjd7Q19GRgp6MERuNHExdUFsa2h2ZDVlX2VBUDJpdG1Bflh6UlU+eD4mZDUqfCo+
PUxWVkpqNj1PQnY5JXE3elpCRmdwak83YXMKemxxWU56M3JZUnAoQGRMZGNtbV99OENLPH5GWTVV
VTQ1VDNpTn41R1Mjaik8ai0zSGFwNWdfZV9GMG1HZSs5T3QjCnpVK08tdllBc1ctVHtLV210RjNF
Tk43S0xZN1NVMk93JWsxWUQzOF4qNE9wS1EydFojJEh6XkdAXlptM1lLXjVPNQp6MkZ7YHxYUlI8
KytBZVE0PnJmJUJGaCg0eUNWanJMNTUyfDNVaGFWVFgxVmxHNCp9YWZwMVJyaGJrXyQwenoqOTYK
emNBQ3tOSUwoKmRKY2l4ZkEmSDw/P01DcWMyOWxDVCRYSEgkdl5kVzdMNkRTJl4xS1RDQnRnP2pJ
bkEzY0NzQ0Y/CnokUyF5OSg9bTAwOCokb01Admg8T0wrJjkkbkZ+YHN3VUdRVGZHbHRFJiNGcyZ3
KihieWA2PWAmKF4zM3JEVXZxPgp6UD1wOWg8YnRCSCttTFlLNW8lMXV6NEAlOG5MTzVLb2tSKkxU
ZmFJc0RqYT5ANGNIKVZ6VlBfMCZuRCF9djhiNzEKelhRLT8lLXw7eG4lUXk/OUt+YD82SDA9Y31m
MXhKQGswRGlwNXt5ZGkqfitfLSMjfm1EdkY3U0Ere01Ic3M4MUxMCnpALUZ7P0pjSl9vc1BXa3cy
SXwqa2ZLWCNzNm9OMnBFIW9mPXxKU2VIWE9rdT9FdnRVe0JnM2ZmZT4mRH5TSERqKQp6KTIlWjRR
T2J8cXg4dVZCLWJeclBrMU5ldU5Pd3lzVExpVyU4WXsjV0xyNXA7YUdOfmBidUZmNiNyJj1qaDtR
Ni0Kem58MH42dCkhRms1aUpTaXQlcGBmME5DJVBmbmlmOE4xNFNkMXpXXk5eVTd8WjlfSz9qdUg4
fnVyZjFaaDJRSTFQCnpkcURjdSo1fUtPJHZGYTtPUlckZFo9ZndeSSpwTWR1flFYMTxONVgzJj0+
cDRYRTk9SFJII0pEMUQ5K3o/IUJnSgp6PF5UZ0tzcyh4d0dGZ2swQyh1JjJOeTcoVjUxKDF7VWVF
VTBmP2lgT0tLJDBeMXVSMSRaJTRvN1crMEkzbWhrYTMKej9nLVF6Xnc0SThHWHt1MDxjdVdFMj9x
a3dDa0s+OzRtfFhHVjN1Wnpmcjd1VnU3IT04YU9MSiNqT20rKGVoMXhGCnpLe3FNKmJSRyNPMH1h
QUlzIX13XnxBKVNSS3Q7PD55WjhQUHVfPHx1YVV3Z2NNM2UmbEstcX1MKHFEfiQmPTVJSQp6JEE/
PT4/fEs9PVVFNnNxSGFfTHNCP2UqYWhmKjMtdHYoTjFyZ0l4SzFIaWA8ZGBpRmopdX5rJjgySShi
eShzUCkKeiVhT09pTFRrMW9VZXJKPlI/PTghPUNrPjlPOUpHa1lAT2l9OVBnajR3S3tDRiY3LVhP
X2pIRl4+RThVRVkqSj44CnpVfDgodnc1RE93UTd8OEVhKCsxb2wlI1FfPkFAY2FYNmNQbTVjLV5N
QTdOWitoNHpRPFlRYCkrOXYpTiRWLW11cwp6ck5MMSlURytYS2Z1eUlqRV50KzNfRnorU3NfWFMy
R0YoKFZUIzFKOTE0dGtKMDhWI30wMyQkb3lHR0NOY0pNd2kKejk1eU10IyVjM05lWSkme05IJTxP
JlModEk9b2BfbEFkS2B6XjNZfUtzTVp5Vlh3TmlxWUNhSyleMjtreyROal9sCnpTX0N9WHg2JWBs
R15+OD5pRFpnMilEKExgWlVxaHd1PyRpPkFucjAoZHszej1LMGFhTj1XNDErMXc1SV93OzYqMQp6
U2d9PikrdDI+MVZaQyZXPGdDPDd8NH1zLV98QkI9OTtTaD1tS0NYX0tIezVMSSZedUNpam1rbUhB
NSNiM0UqaXAKejA7akd0JHtYe1c9MF98UnsyTmxLVklrZHV5RTIkI2FXNC1ReXx3SXFIcjxqbF9P
fnkxY1UzKG18RVp9VjRrTHpLCnpVWVJwMjFWJkA9R2hoZH15KzMhKVQkZU5OajhqbDdXYGxBMW9y
TTBjMXJDTnRBTVUjUD9jTVRVJXJ9bkQmXzk+Xgp6cCF2dTRoR2dXJU5PN1lKN0UjVk9YRVE4MWxD
WUYoJGQqKipjMnMwWUVWSHlIcztEKmcwU083QVhNVF5yP0pySikKemJ6KEMxRG9lbChobCZ3dmJN
cCZlZTxfQCFQeDZHZUd5O1lVTXlsR1Bubm1XNV5yNypfcCpgeyQhenZeOVgmSDl1CnpkWWluKnA0
ST9HcztxZjJqUHtzTkdIPCVyaTs5Jkw7PkMyN0p1bCMyb0NQclI0OW9+KXVlWkhUT35tWVAlRSh7
Ygp6NHh0dXpmMU5Ue3NVaEBTUXZAVzxZJGJpJVZ8byVSMUt9JWo8MVJRPE5aRmttVHVFWWROa0Zi
P0Yxe3BFS2VITHcKejJub35wI21oPDliek9JPXN7SWVXK2paaXNKS0lEQTBNVG5wc1N8JjE0MilM
WnhgeHpBKHBgdk9YZTxsJFNhRFokCnowLUx3SGxiXlR3UV5QZWN7O2E0MyZ5bVV+ZzlsVFZIJm8h
TUAkfTdNaWljb1lsRlNqdE9UOGdET3pYfHY2QnI9Rgp6KjNieE4xNkZ1KGVPWiZnRXJGQWp3S0t7
TXIobSZ2cXBtSCtVLVVBNjZiUXNyYz1zS3ZgfGxfd25KOWRVPEt1YlcKekclTFB4ayRaS2E2Yj9C
UWRzKExGblBVZyUlTU8wKyRlYHtGeDdgSjREfUVnZkRVVlIlODhSS1V7UHNEYitES1glCnp1Yzxq
TEFDO317NDNxVi11LXJMK3k1KWx2XndRNGF2QnNGXj9iQWFkZFhiTGFJbVhSQz1eKUFgKzM8VzNw
O2I0RQp6Tk1PdFBoP31TajNwd2huVnxzfGtEMWxqI01pTjBkKUEpLT9EZHt7QTlVfVBEJjxxd29f
Y1B5azEmWXp2T2opTWkKelc4TVVEcjZ6fWk4SDJxKD4xdHRzb15telpBS3FxKU8maikkVXh7RW4y
YzMkdCF6VGRBUVIzYnsxZkZyYWI5cDUzCnpPJHJUXktefmUmWHkyWFBEZmt9OVNSMDNPZFV1dSlE
SHpGKCY7QkZgaH1OfDNFT0ZHUjF2REljNXVsTVMzPWVCVAp6SWtWYnp0RF5hdDJGa0k1NEBvSXZK
fXZ8XyN4RSl6ZnkhZn1oaT58ZW5PN3wtYUpebGRpVGNZdVRfY1pWOG94ITAKelNWUzQ5QVVnVi1e
SVBnVEU5d2Q7MyYkY1EtKH1yKDhwclFDQnYqJnUtTHd8NEc/PjEmNE40LUJHfkhtPGBZVEwkCnok
fGB9eDR4Y2J7cnk8OFooZmlBMlEqVHxFOzNyVjBzNmB7e0pERDRTUkN3bzBUSmUlJTViMHAxYEZC
eVNPMDg1IQp6O0UkYFQ9JEVYPGxUbDI0cyV2LUtwPEEyYXxIeFUkRSZnJDxWaWAtfmhVOXZTYE96
TEZ4MDEwQmVDajRMXnB0TG8KelZ1eSMxYUwtVXsjej5NYkAqbWp1QDxaYjszNH0qSEhoRGx6cVlZ
MW1nPSN2VT9ZRmYte2EkQ0BWRXleKmdVeSV9CnojfjB3WSEwWURQeihPdF4hMXFJTCZwYmJyVihm
ampLOWJUbEZPQF83Q0FwTVI+VzUweCs0c3khTFU7RyRKKjZUKQp6KSR0d1FBMzswdDRgO304SSRL
QHtXe2hVMHFWSVFwcFEwNEQ5PSotbykweUptYTwmdntwQ0N8YzVIQ2I/cERNbzMKelJpR0AoaGdN
TldBaVY0JGdwVntAR2htVF9ZYlZ3JTIlPEYlcFIrQkJ1Sj1JQjBeanJQZHE7NlMzKXkoK1Z5TCp+
CnpEeUwxM1Z6eEs+SklHTyZgaEZyNWh3SysyP04qPEF5Y2o2OVk4TXdQVnxuajNzeTYpVm1BZXR5
aH4xMmAwfnlKcQp6Mnw0WWsjSGN9RSp1LXRKbl9PT189dn5eWmNzR0JeZHR5WnFMUFQ2Iz8qeU1I
cWtNN0ZebVFSMXZaVVBRIzxUNC0KejZVMEJodyVqPmxMKTJFITY0dUU3N15uMmZsemZtZDQ7QCEt
Ynw+R2YhR2t4fG8+Q3JvezAoTWBBI01SKVlQMTJ2CnprKGZERGhxRkwmUHZaUGM2elAmK2tre1pi
cCZzRCU7SWJzIUdvd1BKWE57ZVRJck5HQj9DTlV0ejZ3MExncD8zTQp6LT9oMUJZUzFwbTQmIyFO
MEV0R18+Yj9eWmhIcWQ9VjR9cE5ZMyk0eCZ9YT4zaCtOayZmMiEoO2lpUyMwZ01oTEYKelRaKmtI
ZWllWkkwcVctM0FjIXcpJGw1eVMyJV89USl5Qml2WTI0QjxnNT45SkwzJX5Pc1o/VHtMX0FBIWBo
fS1oCnpsLWRPTnFLa2krQThuKkA7bWw8TygkOzN0KnVpJDZjKD99bllkIXkpdnIodGAqQSRPPUJ5
MFRvN048PSpkVyFEKgp6N2dzcHkxRHk/MmlxcyZpKUAqUWxBa055ZG1idFN7JVpASzNVYnhsbl9L
aXBqZWFnfXY+NlVnUzx1dnk4Ryl4VEQKeiF+Qj5FQm5jdHMoY3F8PFdFRG1qLWVKKWopPjN3RHBs
JG4wZkNNVUpwcnoreUB9YWwzK09uR2dCcHVealFuPzxECnpjfj9ndms8TUE2LVJ9bVUqPTktWCle
I0dzdXlGPy03amRnZmE3OUlFRHlGa2sjeGRQeVYyKXN9OENNZ0dldWF0Nwp6KXJZcHNTWGIqQmZk
KHNOPmtFe2psMnpGb0AzOyNKKWplOzBWYmA3M0IwaEdgdiRsdE5EUVNQTEA9cT5ZUjt3SVAKeilQ
aVgtbSNTfnNwenMkfGw9I1F5Yzw7K0c3JD41TDt8S3skaVB2fVRJYiFYcypKOVNzR0NoeDRDJUdz
SkRvKXdiCnpkSHskVzZSKWFoJUdRall3XntaKlM4RHo9YCVTJjlmaSlmXnRyYDZGWFFYPSZPPFRR
fT9BcEZDe3pUKylMYjtHfQp6O259YHJhdn00I2tWSTYkQlMrS2YyQDtBQkVadUFjKH1JKFZPaXNG
dENYbHN5dWpya3IkUUspeUVBNXEkMWdVYUAKej5hLUZtNVE1XmtkcmdXeTx1Q0FXPiEjSEEzMSUl
P1pvR2QocE1tKkFHPkttNyFKdCV1KG81bWc3SXxJKjQwOzxRCnppJDMrRiRjal54PC1QWjdHJEZP
KndmUWdRR1RKMEtVcUY/YmpMKkctMiM7WnNQNnNMb2N8IW1CUyVFSGY+dSZoTAp6QDNpbX54YT8p
SVR0SmRhOEVgZW1LM1BmZjVCZ2dPVTYtSFZGdj5wLTZtUzI7d2wqN0M3Z3psJV51ODB0TnAhaTIK
enl5dmBKdmwjJmNoTUJqdEF1cj9NUWhtcWNZZCZoUEhJOHBEU0ZvM09Vbz1WYjYkQkR2Xkt+Nlh6
a2pEUFA4djVsCnpOam1uUmVyV19KaHJiQ0V5NXlAIUVYaT1TRURtPiUxZ2tnZVcoMCM5NUxYaSZa
OGFNRFlCRzh5YDRoMXoyZUA9Iwp6KG9JdHJ6elJSbnhBVjk7ZCt9dGxwMCYlNUgtTCYrbm1qT15s
dmNVIyVnYGA+VVE5NzQzdXUqND4yRCN6S1dIRFQKem9LIUBQWkYpfGE7P2BlUD5BM2c4bX5ZS3c2
aiVETmtMNCtgaW1lJHV0WCpAZyQ7T3ROa0JRX35QekZ8UTVpI3NoCno3Z2hhWkcoTXxAWGghIWxN
ayhQa20yU2BRPkJeXlRLT1lYMkNYKW1vKDd3XyE8JTsrJl5HLTQ8PTd3QCFKeXNSdwp6dGxgT00h
a0RSeS1OazZLKHpWYVdYTjRmflopMSRNbE5jdyQwS0U+KHtPSEl8e1dxNCtjMVFOKz48aTlSZ30q
JWsKejs2RldYOCtzfnw2IW9WR0FkaSRaNHtmKEFkNyQ4TF5rMGJnYHJVNzk8K0trS3w1KWp0VVNN
bHBfZ1heMk5CPyNWCnpXVGIqMXtuMk45KjFyZWE9bUk/ZTUtekxOSGg9WWtBPU8pY29KZ3t9Jn43
Q25Rb2FCMFhPIzFQZ0VMT182fTNzVQp6NkdlYnVrXz5ySVpEdHpYSCVWd31qWEwhMHpwfFFHSl5h
VkhwQ21GUk91UXdRa1NIWF4yPkZOeDx3QlA7T342XksKekN6ayVYIUV5diNPUktQN0t3fTtQbl9W
dC0mbTVod1VENyRvXlBiY3lPSCNATjtCaE5TOGREPkIkNStJI2xPRS1MCnpTI05YQEdoa3s/KFA9
fFBWZkI0Qml9Mz50JkQoRU0zU35hfmtnamlBb0lIcmJTIVQpdWcxfn1TZ0s0bldyPUE/awp6YHFz
Y21kK0kwIzlmOHU0Yj9waW1JJSlKP3YhZnRqRVYlfkdLcGloUTV9MGV7PjBsMlhlOEhCSk0kXjtr
MHdsZE8KelF+PUZjUVUtcV5TQz5HaD8xKGFYcmg3VTUyRjtfcWpQPUcqMG5kflJmUEdHJkdGaylt
PEskMD9aLU1COC0jOyFtCno8Xj1xLTYqTyhUUjxxYWdEPGhhZHtJJmVWR2k4bkg4Mz9CdTFAVnsr
LWZlIyV6VGlKanlEdmNhT1UrYzFkR1BXMQp6PExfVFpfQGojPXoyLWJwWFN8b0FBQn1wV2ZaYlJ1
VlRydXxFM2R0X0teK0NqOWQ0ZT1MfEY9eSUyME9mJjZfUGQKenorc3d+MWBPaWxoJTNAYTVKb1JT
bUZZdTMzYjZ8UyU8WFJlJGF4KENnKkdhTHUxPjB+dHJrTFVvaSRxYXU3QFQpCnp6UUpwKzsqPjRq
YTtZJT11YHdsJkFiPFRpITJZeiMqMl4hMEtzPXhrNTtCSDBGYWh5XkZ+TGgpZjd2IVA8VkVrSQp6
NzxMSEI+bVRPP2s4JjY5a2ZmYUBYTF5eentaU0A2d007PE1gTkd2RFdtbnM4akNUP31FS0tERk12
fjhqMnQxKiQKeiZxTUAwY2MjMEZfP3QzUW8jdWFjZz4zcn4zcTtlM0BGMlR8Vi1BdEQzZCNwNCQt
XnEhPEZpV3IpNyppe0x3cFc8Cno8dXNxOXdfbn4rcEkkVXJxJlQzPWI9ejMkKS1NZSlaZGkrP3Y3
fG5gVzFkUGYjdU9TZGhRZ09jN2pJUWMxYmckKgp6ZSVKd3BXa0VQbVVIblp0Y3ZPYWZYbHgwXmg7
T2xANmU2M3dPKSZPUmF4RWFWeVZpeklDPEtyeXlaKEdGYkk3NCkKeiRTT3dXKHp9X2s4fCYmI05z
YitlSFokVWJudDApWE9VOz03JmJ3WmUpS3FwZkNMY35QaVArcUhse3N3YXklPyU+CnowbVBUQ0Nj
eHJyel5LPHp4RU5GQS1FME9CYDxjI2IpQDV6MHdETWtRYDNKfSNsUjtwbTxJXnV0JTkoemNeTCR6
Wgp6dkpST1JGPTlPXntZMn1GZXppaS05ZEFAI1E0bmxQbi1ea3VTIzZkZUU7P3pTd2lvZ1g5QXBy
Y2hFQGo9RE04bTIKeldqRW0yWEI0THhBcEptdWY+ZkpkZF9CZXQ+TFp2KEg2WUFgcTxNSzBQWWBF
aWxsRkwpU3MzKm9RMjYmQzl3ajlfCnpuYlctbThGODxpR0gtcGxGKGgkXjI9OENZUFhtbjxvcGs/
anteK2BTRiNiS2gmTTxzOHtTUlV0NmxuNjduMmRmXgp6XlBOWXZmUFhSb3AzbkojYD5TO1pjei1H
QDtPRkxBXiNJU2YqIyhPQzgmYlBEdyZgRHhxPHZFdkt1MFk0Mk8zQDUKejUmVURxTG5zJkNjYTx8
SDRoKX17MDF4TnooZmsxXyVRWjZVb0NSKmZwclA5a0pPe0J4T31fanVzfFY9QlZIJj5vCnppMGhJ
M2UkRz48Yzktdn1eITkmOXowNllMMXc4WWRfdnVlJHFYNkw+Y3ptcUNKOTxFcGhPe30lOzYwMmlv
TG5MUQp6KVQjME55PUZHI3FZKUZ0RG4hbzckampOOEtge2opO2JndWJzPWdfdUg2M3JfO3w/PnYj
cmFaaVo/JXx7UUpTO0kKejZvd2E3IypYIT9sVGM8RmdkR051ZXlAfUJBM3M5QmRPQDY/T3NMfT88
N2FzYGkmV0NDP0MrZ0c1Oy1ibGZ1QDwhCnppalZVP0p8QHopVkE1OGVsVFVRdEEwQ1heQmRRaEI1
ampBQVQ7S3UxXmVCYFokPHY/PUMmeWplJFBtKTVyVGElOAp6aHsqKnFocjA+UWpYKERMRiNKLWJR
PDtVT2ZyNkxVQHB5WWA8ajN5WlF+ayl2UnwzMFYtckZtcng1SDc5YjVaZUIKek81UnZgMUZeJWlG
bDUkYTcrYSZub3pRczJ1PHBqNEVUTD05e3d3UngwMjhUVEpKbHFoOTsjMExaP3hhKj54T2RnCnpQ
djgxMDcydEl6Q1MmSDFOPX1XZE9PJTZ4e158RCFWd04yc1pkTTJZNj1vKHd0Kl4jcEt3QClYPmpH
clgpUXBXbgp6VEdyMmEyNUxoVXl3XmNtTFN7QWFzTDVMUnlGX3Z+WU1ASGhEKEsxcyspPUpQTCEx
Pz9DOVhVSSNvTiM9X1ZfPDgKentBPn1xeX10a0pWcU4/SDFrTS0wVTIrMDQ2QHkkN0s3O2IrKDd6
VVpoYil1bURYX257SmhILXpBXyl0cXNPbVJoCnoxX005YTxMQX1meGlgX2R4Y3o+Qzc4QEhYYzN3
V2pWa2wqU3NBaHwlPWtXTEQofE1UQiZzYHpxNUE2RmwyJkc/WQp6OV9JIT9LbnA7aXY7WSQhMkF+
QkhiPjJIIW1ZSXFKQj51bGgwV2AhJHMmeyRHSG8+Kyo5cU4pNV9zVlV8dHFSRGcKenI0b31DIyFZ
ZUpGSF9PNipBRW9aMFBFaipRJnpYej0kKTE/QUFWUG1gYkVVXmVCekxYOFRhdT1oNHdDbEcjVnt2
CnpEZTxfRWRPMXZtZW5OTTB7YWtWMzFlb3dzNVh5ZmU2UVZPRlE0cnNKMXdzKmcmS34kbVNATVdK
eTVmNmYmSUc5Xgp6SkU7ZmltKzFxIVNMPy07MjkhKkReLTtHclBhaTBIM0xUOVdEdCFnbjF5Kylo
RkNjPS0wSlZWZj1DKXM/WmBPUmQKemtaXkxQWEdVa3sldUxvWFBqb0gmUzI5JiYwZVY7cDFJKFE7
VyRYfiplPnJUe0E4RHFzQW9YKmooNWp5YFJTMWE4CnphQ1pjVnNLO0N8WjdLJF9jXmV3JiQhfCVC
SmxMKkszOG1wJFpqVGRLIShPYnFvVUghYCYxYlc+R35jbUBZJjZsIwp6MERSeFBTZUxtUFU5e013
UGlJWmhsTThSPipOOSR+cF57Y31pPExaI05DJk5Fb0xtX3RZMzRaaTQ3P142a1l2dVEKejxBbWJg
bGVPQUtZWipzTFZffntEVitJbyRqckd7fD8tanQ9VClnME9qM0RYazlTLTdyYnpfeit3OSRBYVZ4
NkF6CnpDWkRoflBfWn1tUGVKRVNmbDckO0xtI0UzYkwtV2BqLU1DXmM5Qj1ZcHFhJGNpIzl1QSFu
JD9HT010aThaa3VeaQp6c2BuNFlRPm1yNDJ+ZHlKMikhPEZnPjt8KCpPPEc9OWxoJXhOeV8kR3Va
LTdXTWQ2eVNyXyt4N3t4fCtTSWBIUkoKemlkWEg1clljfnFYWUEqQFJoPE5hVitvVj5sMSpLajBh
YSg3NipNemRrQ2xEVyo0fnlAakdlPiVjS0EpVzwtYVAxCno7aHVETlZAZUxHWGlTQHElR3tmQ2hM
RyZzNG95d0FpeD1CXmhhcmVqPF9hMURXdG10ZlZybl8kUihPMCl7R0JUPgp6bXVSVm5VUWA9Y3JO
aSUlSiNqQSMjUWNDS2ZMQV9uMVQlQ3xAYkNGLVY5JXw/VH5ic3dleUVIU1g8c0UzU1h8K3oKektO
MnZyWFplVFZjYSZpIXt2T1lpK2pyJCZBcT9OeXpZUyZ7OU5eSkcpenFwcWtYaXFSbEdTQUFHPHZ6
fVBUentlCnpGYEN+cDtUNkxMTzdpKDNaNj49WVFKYjsmX0tffSZeI3otSlllTjlWIT5OOzclazg2
cjtmclpfI3I3SXtWWEBLTQp6TCRAQH1lVXR3KzhYZXdPX2gpNzhEdSlWQj14eDdia1NYZ1FIU2Zp
ZzclJlVEQTRiT012JlBmKG0taT49ck49NUQKellocyNAMV9USHtgSj43XlN2bX5AYjZVam8oWUs8
TUV5YnV8PmRwOXRqT3A/KWQzSlUkdUpLQGdRcDVMSU9YPWBjCnpWIzRpVnspRkhtd3tNM3p6cEVH
ZW5+dj8/O09hX1dWRmY9RjNSRDsweSMzN2tZPHMhMUpoJVd7WHJmNkE/RFMoMQp6KzlqfEFZVWY4
WWZHXitGUlc8ZDttc2koPGZIOXdFelc9UVE4MXY8Rj44Z0s/Y351Sj0rRD9UdEBCMTdEQUZ1czIK
ej05UCUwOSpDTTh1bj95Mkp5e0prekFhdCprMT54Zy18aWYtWkJVNTxAKVleQ0NKIXZhJnl5ezxA
azR9cjdnYmJCCnp1fl8mTjR6Nmg3THFlWkFWK2RzJHRMcz59MktnVnE2ZHJQbnAjTk00SWFlS2ZA
KSNRJV9HO0cxJTxmJDVycm8+OQp6cVR+JDtQRiRkOChxTEYxTzg8ODtwPmtHMnptX3NJeWghWj54
KDl9VXkxbVd3VWQ7VVRCaGQ4Y2B7LUk/PG5vNVUKeldoSU59PjtWQnV1RmBDc1UrOX51NyhRaE8k
MHEkfi0jbnlgczVBOTg4UHlDMW87XjkmKiY/YGcwYG5AK2tXQn5sCnpIfml6ZmRyMG4hS2dYeE0y
RjxaYiFKYzl3Mkl0KHEkREZZMURCTCRWZT9heWlqPWM3bWRlcTViek9feHxIJFo2bAp6PSNyeDBh
dERPWD5hdkwkPnZscVhZJnQ0dHtePHp9eSR0TT1oV043MWo0Mn4xdk51LXBMdWVXYWFrX1BiaiFo
YTMKenBUWnhZRXtmYzNQZlVnP2orNHFBTkQ2dWNgN1JQTHAzfjZXJEl2NUhNVkIzU3JUQntTTlJz
S314eW14azkkKnlHCnpRa0NeLVJ3Ylh5MnY/STdtJF5LK3p1e2pMRGllfUNBME9JWD4heDJfJiE/
aDlSb1dqZS1vUUZnUU1TV0hrPT09SQp6ellXXmhiZEpKVU85aV9VVnB+ODdzYjRPSGIkbSZ6TH12
IXFQcmQxNjRiNzdDQF5aeiUxR0pYJnF+VigocTQydiUKeil+QXNNUkspI1hPZ08qbCF9XkZ3MiNL
cGppO2BKbG9vd2IwcyRwY045ViomWE4jckJ3KD99OWhQVEdOS0NpJEAyCnozYjdVS1haUkA+KXdS
N3khQF8xejFVbHFPYDxKbWw8TWgwTilMMlV7PVZHYigjP2BxNGQhPCkhcmtfPGtBSjJhTQp6S3o2
cWJsSDhZRV9KOGl0YmN7Q1hZNyVCJWN2fiojeDUwZT56WWFkd1ErWlR2K3JDRU1gX2gqVXFicSNf
ST4zUFoKekpwK0hze3MxPmV3RTYyemhGVHVAaXdNNn5maDtOK3E0eHZTdW5JLWJXOUZ7diROMUdf
VlY+aC0zYWEjcVdTNFJBCnp4S0M5WmM8e0AoNj9yTS1rO0QxJD9VZWBGTkg+VW51NkxIfWhnblk/
N2pXZH57eTZkdXlfPCVAKWwzQTNoWFhHPwp6Zn4pYSpTVGxXWkBNPzhvOUteKyNASHxrej5qVyNI
IWYhS2xlX3oyS3VHendMNz9MRStqcHRKe2VVQUlvQlckTkIKeilXXitqcDk9MjZBe2o+dEk9UnNI
NGZCbVo5bU87aldHeCpXOWt4Wl9EO0RsWWZqLSNPaEl7dVFUT2ExXzg4MVoyCnpaKntCVWE3aCVm
M3ZRLWE9e35QZzBQeiVyX1R7Y1lJXjVPdiF4SGdOaWp6O308aFlDbVJfeGFZZVY7N25zZmAoTwp6
WiNEP3x2eWdjV2FoUE4rN3B+SCtgU0tAR2VMVSt5Qy1SIT9xdEghSnU4QkJRQGIyYTBIcjdURV5B
MWZHX3tDY2gKejZEWFgkPmZiZ1k8Z2hvT2EpOU9vVFF4RF5ZazElTVJ3S2BMc3BTZn1wWWIkZm1F
MkMzSkN2MGF4LSt9KXI3ZG5kCnooISUmeiVIbVJaejRBfFhWNk1QcChOYWJINHopKnZ2alV0RHpC
X2dyM3MzM1NgMXNgYTwyRyoxQmZUOHYmUztFWgp6TWd4M1IwYyFqKjV5dHlLfERIait2R3clOVZM
N0E4dzkobFEhanBqKTlFcX5hYGhkTWZhdUEodkFAOENja1k8O14KejdPclI8P3dfVyVVTVBJNTJf
fFBYYGhLSkRxaTJ7M044M0t9KkN6OGN5MDI7RyYlfm1CWSQpZnw1UGhSX3d0bDBNCno2OHg5KTwl
eWkjK0RPQE9CdG9YaTVeZzliSzMySTAxPikyTktjVlZve3AwNnYoNGswUE52ZkxjRlVpd0swbm89
Ugp6PCRKMDZSfGdRbzB5O3A5azByLW5yV2RDSUc2NGIxajRidTxAIWcxa2lhPllMcn5VVjMwUGNL
MVdTfXFXVkNWVSgKekw5RXsqeTBwTm5XKWkzVyYmdmVGJl9PUHM9Q19MT14rZiVMOHFpISVFVGRD
VDQ4NDUtdXNZPzRzcTU7bysmOU8lCnprMmdqTz5xODJKeytgc0U4eDR6e3ptRztfRzhhMztPRTh3
QVdBMi1OKjAmWjBqUHxzYkNgQjY7SWdwSmMpeDBTUQp6e0g2PjV0WGt3UTZva2h+dHloPTZNKnZa
NkRyWDJLYGZuJU41YUttZ18yMD08eUsqa2lTNj9CJDl0fm1ISlpNOWYKekcyIXx8b1JPWCVTR0ZI
VSlBTD5na09vK1U8ZXZGWXk7cyM4Wj9eWHVGVTtLRXpIQE9XZHIpbnhuNXFAdnk4NTskCnp1dWtf
QVUqLVAyNTdebDUhRDxeZlE2NzV3UVp3Sz9FMShNcW5MeGlpdFZGIz9Vd1ErRTVRY3R6VF5PV3o+
Ul5Uewp6QDRRTi1tRXR2U0t0ang+ZE90UDBtfis5MiRnLWU/YihhY0VOR3hFckxmRVkpb2gjZDtQ
dEh6PTFOPWk1SXkjKWoKemVqO19AQDJIfnhlJmEqNWJ8Y2heRHllcmFteDV4bFMmJHo3KCtFSUNH
WTUhcjVMbFN7I2M5X15BR0RhUnt3ZkpuCnp5ZGxKI018P2RSYi17c0FaKmc3RSZedmZGcTRUJWkl
T01NbTllZWl7eTxZNyVLMFdne2t+eDNOTnBBNjE3Sjk2RAp6T1lnYzJyfilVfiVtQld6eHEpSVo0
ZGY5clB8PEJ2MkpKfm5HUi1AVGJKViVoNVB5bVFVIXlraz5JLWRiel9IREgKenRzI3hWJjtgfHd5
QEQzMlBKMG17NExgI2N6YkNsODVyMFNaMns5SDdZTzZ9Jj42YDx0MTZKPVJWZElPTnB6fUk4Cnpl
a0lwNz4yQHloYEdZb0BARGtPZTV0XnFEXzRqPFFxLSh3cUV1UTlqM3t9T205JiMjKC07dytDajFv
TnI9Zzhaegp6UUlLem81JFgldnVPVUZ5JnBoVzUpPDswV3h6WEteX3FmX201akVQVllhYzk9Y2xg
MDR3UnhMbEV8P0pxWUU9emcKemMtRkRrYCg+Mz1PWCFabS12aTJtMTNIMTs/Q2JzSHhYK0RHVENh
WFB7Yj82UkY7NnR5QlkkRytSX15edWdGbEN5Cnp7I0BNPDc/e2NaNyZBY2V0b2hFeEZsQiVTUEhQ
KDY8TkFSZWo9MD9mYHc8OXNaYTJ4MCRUZkVgZkF3TmZpZ2A/WAp6Tz5lQnpBRk9xayYhQ2ZWQFp5
RnlFNFpOWEttUG9ubXIrJGN4eFg3YmlkSk04bGBJfD1CeUMqKUp4Oy1hKUBoRSsKeipTUiNuc352
Uk5qUG9rcChie3BtZmxYZVQkdHVXamlPTn0mUmR3SkA+ZWx0P2lsfHlTWGZxJGEwN0Zzc21JUS1L
CnpzIWVVYVRzbWQySElfN2g1VnYoOGJmSXIraDB9b0RQWm41JShCcW0zWlBpV285I25jOVRybjtF
V0UpdjBoPSN2Ygp6MGFAcnVqT2RTYEVxTSUmVEh3S1U5bXcwUk1YPHl+Uk80WlRwaCtUVEFzLSlB
NzZgJSowdz5PfSM0d0V1T0FfPiMKenstaTZiTSY1bGlJJGFNJGl5PjZrdzdUVE0xNlo4V0h4UFJq
MDM0Wmg0I2NhYigmSDJyYUYtI0ZuO0JkSzRkeSg4CnpkLXJVY2Z6RCNFaD5sNGhiaztgYzNnKDAh
YEBfWEgpWkI+YlY/KDJPRExxYW1tPiNUS1JfVnRaT0JSc0laSCstZAp6OTxVdFF1VW9gdExvTUhM
M31pbEY7I2NzMG9PTyleJkQ9VkpwYnoweWswKEk2b0ZNSGBpUW1XTEx0cWhjR1ZRez0KejB2UU5Q
MDlUT0k1cUtHY3FKOXs3IUBeWW1wRW9hbjdlMmBBPzB0VHV5RlNUTEA8WmM4diMrcD80V254eCh8
NFE+Cno+I0U7QnpMb35yR34hSHpxeXIkaFRtIXhRcFFQd0JHQEkwIXc1IWsqWkRTPk5NWnchWGF2
TGI8PGRiWShwISRSewp6PFAkPSh7K3okSUN8e1c3czVTKzd1O29UJHBGVFEhMW5IV2JfWlRkbSo2
c2lMeEtIfjt0PnNmaylfLXxKI1FqWGQKekRVa1c3IzIyMmozdEl8eCYyJTRBRE99PEl2Ukh7cmgp
dD9jUUNJP0VHI05nZkI1YGpsKHc5X1B8TEtXJlZkOGooCnpATzh9MD14VXF2QDRQU001O21QPjgh
aTBWI3ZFSXMjVV8tRCYkRiYhd18qRlBeZWdCQEUtK1JnT3ZEQXhiOShWMQp6YyVYdnxBSllATHpW
S3I8YnRhamYraUt0clVBVFJjeDtHamR5MT1UTS1ZZjBIclBtU3tEMDh0Ti0yUkN5JTxmJGcKelMz
azwqdypte2NrTnRtcFM0N19RKzBEIWJRT1pBfHo1RVMldUgqN1lBTFckJXBzdCZUcCQjQkw2TXw4
VzErQX5SCnpedUVrPUNEREg2b3Bwd2dkPX5aNF5sdHg5WEshYkM2XzxSNGNndGk+PypPRitvNjJX
Tml+fUxMaztGcnM9PFY8VQp6JlAydSF1TlI4SCN7XnYxPHl5IUAzcWpmZXdxe1NpYCFMPGE2V3Yo
NklMZl9weit5V045M0ByTTtHRigqSFR4TjgKejEoO0RlJmV6WFZhKmZXT2VXRSY3eWM4SU4lMS12
KTR+Q0FJPTtgcVA/Z0l+RiliTGpgMjlmZC1RSU4kQDhZaWNrCnpAOWYxc140fTFhQFk9YF43cTB+
RW1ZfVU0MG58UV4yUG5Eal5QK1JCPyYtOGU+fUhlRFQyNDN0e29BOHglfGw5Swp6ejVlVHIqKzl9
Jjk9fjVYRGBqbnFhfFVBbHBXWFImTDMpTDxeeClmTG9renUpZ0orQm9Veng5eFBhMGAyZmc2fWYK
elI9MV5KPUBVcnElaHQ/IWVvYVIkO0hTSU5BcGRlQU9+IUpPX08hUTA4MCVrJjV1WmN3Xk9BKjwj
OStHfHY0IXxHCnpvPURiUmQ3Zz0+ZS0lVDJ3JUdzQyEmISQjKXFRVll4PFFhYGx2Mjd1VDFweUpr
ZEE+dE4mKUVzOElUJHBxIURSUQp6PkZ5cjc4JH12djFDVkNHY2FQOFN7YztgdGZ7UzYhKnxZYXJf
eGp4VHt7Y0Z5XzA3Q3ImQyooSjRDJmM2bGBlZyYKemktY1VPeUhZU247TGg4eTh+RFhgJVd5PTA+
dChse0dUTjZ6KzdLKjNVd1NoJjk0fkJMSH1GM3kjKyZTYVJFISk4CnphSnhqQSZ4dkAwa0phQUgx
YVF2Vmk3KSV1MWl4UztVOXBKdjI8aXBCTkJSN0xCPi1rOV44Mz5pZ0s+QDEtSUctewp6Z3QhRlFu
PCtgSTA3aXI/XiZkY25RZUclRyF1emgjUHA4czlkfDNkNk9WRUxQJjIrbCo3V0c4cUg5OU5lTHNa
XmwKejApMWEmU2hwQU9wd0NMP1JoRHRIQFUrRThEekk2akBUV31jel5BeipJV0VrQ0l1dyNufDNr
bGc4eHImcW5sJXx8Cno5Z3xFfW9OVXA4aiVwfCFgS2ZBc1RhUGtRN0clRE5rPWBVcTJfISNGZGdk
e0Q9NzBKWHt2eEJ8JEE/IzdIMnB0Nwp6I2ZpfjEycjJUd3c5QDNsZXokMlBZWDZNYF9zI2BTTkZt
VjIlYU1AIU1vI3hfTClHTnRFYmJvemFsJTd0Xlp6KzwKeiFjdlM9Wmo2bURLUlQ+OyRmViVrIX1U
PVdgbmd0QD1UVFp9UWR2Xm9UdWp3bEhoKk0wdHgpeSVScjQ8QT1IMG1pCnpNVFpjMGloIT02RSVs
MilyPlVHO3p7REJlS3NJc34wb1lANSp2Z3Z1eUx5ams/ZWdybSVpJFlPOWVQODx1O250Owp6TDV1
fDwtPHxleFZkWW9rJVN+V0EoI0A5NysmPEx4K3EmJW5iZ2c7X2Jfdk04c2k1KkJKJkFoUDBKeCZM
aHUhWUsKeiU+V3ktVGVtbTR5Vk5hZkhFKncyIWQldkBEbjt4RTJqWHpubnYobURyPkxHQlU4Pmsh
KTtga1Vfe15zQTFKbWp0CnpSMkYlRkgtUzZAcj08em87dHxfMXctViE0S3Q9UTMxOXZiZiplNDZI
STxeSSk1VFUlKnlkNV57eXZ9dlNhZlVXegp6LUpGVDB6KCY5RmNOPmJBb2BoZWkmMEgwS19PODtR
bj9PKys4MUpqazFrdFdtKkFHfmR4RSZnMV9ecnpEcUFmRXIKemZidzNhN1E+QTJ1T3h3eXJ0d19P
Y2lhXjJBfFBgZE1xaHJDcV53cFJxPj9vP3BeMklzdn1AISowX0B9ciNJeU15CnpxYilkOEBvdnUj
MWA5KSlAIUU3NlRSb0o5TihwKnpoSFdCTmNjQFBIVztHS0Y0SjxlU15Qdy1GSDRaZEl2K0d8Uwp6
IW8lT0VvS0l7VDk1R2ghZDRmfVR6eUJiVHJ+RmVRdzs9flZlZ31WSThqcG9Ud0VxQWU7ZCFKcz02
VF9POUVmViEKentnOXtXRGFhVkw4LWd9TWZecSplTk16dGxeZlA9JjFoYEk5MHFkN01sJUJzNkl9
S15EIUFjUU17QU5neHVPJXtTCnpkd0hAP2xYel8/T2B8UWJCcE9ORyZBKiRENiFHb0V6X1kpMWtt
ZEpsR0V3KXJCPmEtN0JkYzIlXzlAMm9kRHthTgp6aklpVVJjJGlFQmJJaF9ZZm0xQGZQVH18NW5+
O2c4dD45VVlxNzRwMUgxY0NYYVM5ZWAxI3leaXN6Iz9GU3NWZW0Kekw+ZEpNQntJX0MmeX5BalM2
YD9qZXVzeFhkaH5WbSEyTHM3VHlVOChgNThiJCg8UFJEbG87QDN7WjVfbClHY14/CnpWYHJ5WEFM
NUZHN2kjXzhGPytifD4zPUB5KD91Yj1KcnJMU0V5fTghUmpSV2tpUkNTT29jNyN1NEYzP0UrVH1h
eQp6ZDhyXmFEYzZeYzVqR0NeIXshR3ImZjkpcV5xP343V1IyJkNNSGdtaGlVMUlTez5wdWNZRCVi
SipIZj9iXzElV2AKemk9SEM/PGloXm89cnd5PFVNcnRzYS1GU2p3Uk99PHNvKz9vMkxUKzJLdCs4
PVF1ZD9XSUI5SjUwK2ctZjx5I1ZkCnohRV4wWil5QTRec3NJNnRDa0JSU3MqMnZKditANEVucG49
XyNHbWRkdjZiQWB8MXVaVWMtZjtfU09ROCNgWkNQOQp6JkY3dEIhVXZfKiRmKXd+MmFKI1Atb0pF
SHJST1FEZVclKUF7JVIqNz1XdEU+U2tQYUk0PTdyKyN0T1IzYTgtJFIKekMwKE5PMXJNPjtlUS1B
MyQoXkBydzk3NkBSN3pPXmBKYWZ0NG40LXw5WjN8IVFwcSotSj1xTCUwZU13fWtzZC1QCnpaKmxH
USEjJlVSbERJeTJ5byomaGNiWUFNO0BSLTAjfkM2WWlCazVJS1o/MEVaT2haNTwjMTZ1YiZeMzw4
NjI5TQp6NVk3eUg/NDlIYHp2dFY3aHJ1OSZFal5OdGZUSXVGcXp1ZitlfjBjQlVxYG1ESj1kQ3Fp
cF9XRjFHJSpgPDN8NGcKek1LRFp+c1Q9QiVUWlhLenR2dWxmIy0qYl51PXp8T3pLM1d5JndYWSE4
KTVEUlklakt+VDwzXzAhIVlxJUltJVYhCnpfPjQqSVBLOFFVSGwqV0hpXjErMXd+PFM8NmRAPEk0
MClrb0RmNVFiRVRVYTBMa3d7MSlxYl4rKGZ1Ri0paTZMcQp6XkZWYF9ySFVMNnMrNHFETlFFSiE8
S0FoMEooYWJ6UU08U0FPKHxueHdKfGl0ZDtBJVNfSzVFWHYhMHdJOCVvdj8KempgfDF7c1gwc2Q4
PlV6TmktckZURDlHUCk1aU9VNT5ofXUjZVhIO09tYyVrY3stMnRLNU5zYlY1endtMjVlblI7Cnox
YGF3bk0xQT82YTx5Qk5kWGxNJShPWXgyPzY7M1UxdShSQU9IIUVseURUWjA7OCZOb3JHd1ZxTX5Z
cElIRkBfagp6P2R4LTxKfEFZQDxmc0BUZF5pZnptVjR9fCYjZkB+d21lSmlEYGkyOSVGN0oxTmwo
eVVJWSljZWY7RmFVOVBaUDgKelpoVUBTVnlSU2BmMGZDRlFsJns4UHNUeztKen1lYkxyU2VUazxR
a0lxPypQa18zPHdfSFB6OHdrJmA7TVptcXllCnp7ZlZsV3gxWERtbGFRQyRYbmhENSF8QF4tV3Zl
cWZ3M3RES2IkYF45dk5pZGB4OHJ0TnhiZCFvPX51JDEqPWo8fAp6KXMrViFpTWh7c0l0KlRfPGJI
fi1tTXUhWUZ5LWxaXkFoQHpwWEFQOHZKM1UhWUo1ZTc1X3hsLSF0NiVtYTRvckoKeiF5PjR0e0h+
WklZKVdxZTlqemNATXppVSV4azI1Vit5djJQXyNKKXhxZkZFeiYrb3Z0a2lvPngqczx7U1Y2YEM2
CnpHPTM5ckxJdC1OYmF4cipVfWQhMVlpeUopb3l6Zl5YZEBRRV8yPTZJeWkocn0kdUFBKmIyb18r
I0t2eD1PYmU/Twp6azlVRUl3bCRPPkhaKVhaaCRxYX5rZSZzdWF+eEA3QGgwTCEyK2orbXEyYnBv
SmdObT0xTXpKN150c1UyPE9NPUAKelhpJnU0I0JCdFVkT0QmZ20oRTx4bUZmQ2NyUms3I1NRSnIy
TUM5R3RWMEcpbG9HSUQ3RERxTTVNOHJTNGhgPU1RCnp1fjFKYlFvZUA7O1hldGllTkEtM3YrJTs4
Z2lePVJkS1RjcEBLVjtmU3tjYnVDeXstRktQQzsoSSt0WmJJbHRNSQp6d3hlMldGak5kKyMrSCVa
KGVIWGxQdShyM2FLckBENXNYJEd6a35jeE4jcDk/JjJJKWBRUmR8SGFESXA3dSFYbUYKejctJEZR
KDE1d3p5ZD1iNCEwNz1fbzVIY0hQLT17QE9ebkBDeXg0TE9wdStXaENGJE9MdHdGYChqaTlWbVkx
O3E0Cno1MmUme2oyRTZfQnApK0xOUTxBVjdSeVkmJEI1aXFUe1dZdHAzUEFHUkh7eUZDS2J0Q3Zx
JDcke21ucFQ8NlFSRwp6I0N4JXVUajU+SXQpdSV4cWAhJT8leDdmaCZpWThPNjZgV35ZUDF9REor
fTVJOylYaHkzQkxwZD1hUUNNUk5aZDEKekFYU3cpcFJsZ2o+anJjSEU5bEhaXktzUX58TGQ3Pykh
Wj1QaGUkJUtVJCtDUWBgejBaMTZVekZVSDZEamk7SVQyCnpSdylJPTE/X1JkRkQjciU3X3VFWmA/
MjA5SlNNQW01Y0ZVLWV2ZUMhPDNOTHtnVz4maXpHOCotbX5wUmFuYD9fSQp6Q3ZYeGdRMFMyPzQ3
cD0kSih9VDZ0akVaezZgVUpiZ35JTm1JTjJlSUA8KXBSTThndXBOIV97dURoYHFBcH0/VVYKelYj
eCRVK1ZyODFBKHZuNE1eeVpKVCFfRjY3YjZgVHhwRkUtLWUjZTlxMEQ0MzRNQmU3clJ+VCpeN2Ff
dGRrMCk8CnpDaU9ZSFJUYTkweExhT3wpOHM5JTJVZTcxTlk1YH13XmdZSG1BZSpuWk93fDFAbzg1
YUA0SSl3KjJZP0RSQHdpYQp6OTBOTCtaKzJsakdLTDVZUlorc2BIODZwfmBQVWprNHozSyYtYHEh
ZXp9a3d4UXswUThtbVRgaWUqNyFxJSpYOTYKejJKS1ZwTXNubTFaOW9gQHRLWkcxUFVYUzlaUkJs
ZmFsOGNjRyFJITM7YHZIUzApfH1DIzNQKWJTYXpwdCRMUmFzCnoqeD02MExyRW94WmlOK3M1en5Q
OUZra2loX2EhQVY9fXs5UWZtaVJaWGo5TiNuMFB+UmRteDxJdEI7ZGhXcnw3cwp6YigrK0EqUyhR
b21KfWApKnE4aVJeXzhBSGdnXjByUWRxb3BDeThRZUpASXwlbUkhYV9qNXYtNU0hSlpMVDRBJHkK
ejxYV0A0a2JEQkxzKTNwX0pOUWh3JEs/Q0ZNVCMwO1l2d1FkPVJmYkZFfGN6QShtYyliPWIlYSl7
MT0lQ1FaWmF7CnplanAlWXJ5JC04Vj47Mj5sQVdUUkRQKk1gSWw0VEktfD1nOWMpcjVCQmVCZDw2
QEUrK3ooQ1oyM3wtbWtiX3UjRQp6UWshP1pmTkFyaVlgT1IheylfcXk+WjduZlhCM1JZZ0F4VW9p
aVVITGV6fWhhSF84cl5IfllnaF9aYWV2V31oeGAKelBWPkBRXkd1MDRMSHFCNFUqPnQjQWxJWDcy
bEUqNzs4bTkjQnBFK1NUPWhKTEQhfUhpVjE5cCRfe05WJExWey1QCnp5Q35hVi1wenc+cG80K1g3
NzReamptTGtvJV5MUDFxcFBSb0BffDJ2NjJ6QitJdGZgVkpnV0c0eT9eWDViK2h1RQp6NWwtVCpS
fipsJENQei1uXlBORWUpUjUrKCooaGp9ODw1bWNDNEZuKiZETjk1RUJeVHp3WTFAQURhI35BcEBy
THUKelJ7UH1GKCkrZkxJIUNwTjFnVmJyXlhpUzJ3Q0VSUGs1fGJ0cnhlOFEjKj09alM7cmdYOH4w
RUQzZERZaDczM3crCnp5Kz9mODcmbFFEKHdqJkp4ZFB3dkBTSkJqR0hCVGFmST45TUwyRHFqRyRh
MWokfkk+eVcjcjZme0d7VCp0Q1Jmfgp6SC1+WD5qfFUzOCMwMGV1Rnh0bjxPI2JrQz1jOWtmen5T
Kj9edTxWOyY9IX5zSjNUKDZQaypqTipyU0QzS1haYn4KemNNTUJmKFl8XiphcHlHT2l4KkRvLSlg
TmFsMCFTYEsmJjZ8TyptJXh6fUVAZkt+ZWMwWkV5I0smYiplYD82VX1DCnpWeTFeUEdRaHpUYWtm
cl8jYGNUUz9kVX43NzVnNGQqWU1XT0poMjBENDYlNm82V2JNU3J5MGhlOX5sYCl4SGxUYwp6QFg4
KXRwKkpVZ096QHA4eVp0bGkwRytWRy0qKV4ySig5MUQhVWppV2clcylsSWZAUHwxUilQd0BHMG8w
KD5NSSkKenc+Y2tVQCtzc3Y7LUcqJGxMcSpmIUEjKCRNQE03YHB9UD99U3koTXZoIzNLQDtSXyZ+
YTBFKmdmVnMkWUNNYSZ+CnohMmUmLU51YVYmVy05UnE5c2MrQz1CJEoyPl97Z2tLR29RY3U0WGdF
R3l8WW1EYDt6dnVZU2dqb1pPeVh5WCpOdAp6SjgtdCEhSjlUeU59PzhITW9SY2A/OEI4T3RyJFRE
Zi1nWU5NfWJXNmpnKjQrNUFZTFkwRWhJZktoVXlAVVd7aUkKejQoYVYqbkgzOWFNUHIrVUM+U1ZC
cHRaMTVTNnZfKntWYU99R0U7RDZnTl5PZGRyUUd3OWhhcDk8ZmttNjE0XzApCnolXjw+NFRLVj4z
LX0wfFg1VCkjUWtVVE42Mm5TbD9SdjtHWHJeZkkqJDlWflR6Kn1iWEZHM2FBIV94dDdLRmVGeAp6
THQoZXI9KGdhODdTPi1+OWBEK3FMazdoVXI1OGQmc1pGPmtubXxJUjlsJVE+IyllTnRnKTZGfEUq
Pnp3TXlKeE0KekZtZClaN3VeUDY1JkM/QFhCc0JGeWo9fjJ6fVAxIXUrYWdmZy17b3o1NEIwfnZn
NDdgJk1NRmFSOHY3fFJtPWhQCnpRJGAjSUZvaWB8Qm5mPnomfSpwWHVNXlJkOEluflNyTXx4JCVP
cEtWTXNibnc3cjIkNGtxM1pPdH54KztKKk88WAp6MmVhSzd6Z2hXdm8mOXNBcWElNTN5T314e3Ri
I2dMUGMwT3Y9SWhXZjYzX2A9e3NlXio8UGc9b3tTPztlSVJjbEcKeis2OFR+ezFBfD1NNzNVYnpK
MCFiQ2BVc1gpVE4lWWk3KGtePlZ0bT89NHtoemBXTmAwZFBUeXJZWmd+LVA5PWFSCnpYKj47M0Mp
e0dSdSg1WEpnbEpmTFZ4flgtRDByUFJXWisqZ3o4QXdNanpzNGJgfmdBK3tvLSF+RFJLdW1paysy
fAp6VTJIOCM/Jn5vTHItUEtoayZZWXFOeVV5WUoofSRUZDRwd0FwMVZfcHEqNnMoUXZUPHo/bWdz
Y1goMEprQ0FAUTUKemlNciF5Kyp3bTJXd2F0QG5MNFlmQUUlJSVQKzBPeDFoRU8rWGR9bS0lcF9g
eTg+PE1qdXs0NT8+c2lrUUZpSV9xCnozS2wpT28jakRAMn4tZnYwKVBEKzVQbC1AQVhSayE5PXVJ
OT9SfDFxcXchMDQtUnViUHckVlVvaiQpT0FMfVg1VQp6dlBHJmxfYHFIbnIobGhQMD5IaVVCeWIp
czRQPFlveU5ea0lxcVQ7SGt+TWAoKiYzLV9qaXJ1dT0qU2J5WHh6I2QKejkhb0FublpiPHZmdHpo
MSQ0JHoxQWJ2I0UqXnU3JjRDUCVVeVJ5d28yUjVSSUpWRClySzdjQldIbkt3UyZ2WGZ2CnpYb2JW
JFNXfjFmZW5rbmlBTCNDSzEoOW1zM1g0SXo8Pj1XI0Y8SSgpVSRkcmwtMTkhOzlnWk1RRjJPMmU3
VmFIQAp6TTNvcWg7Ums/cGhHSXxkUWp0R3FiR0pQIzc3TU4qMSU+LUAqTTV9PHt5aSlHN14hO24r
PH52PE1WZldrM19GMUoKenA4dCN+ITA5fG4wPnAqRTt0ZiFsWFd6QX49Zk5gLT0wckl3QU1+NGZF
dndQJm1zYl9oNz94SU1TYT9qVGtmPF5VCnpEbzY0dVpZVyozKFlaMmJxX1dVSnlCQXphNUJvJXdB
SWs7IXBSPFhpbDxgJHxWb3NJO0tnP2gmVjd8OGlVfVozRAp6ISlyan4yNClRVENjUVM+b0koUmM1
bVUkM1JAVlozbWJnIyhmSzI3UF4hO1ZaUzxAPlYraXJJRkw9UUlNUylkU0UKenNKMmslSHhTUEAw
I3hrXiZFVW00Um1MaEVZOEt9ZT54ZF94Zil6PSZYNyM5aGtXY1JUQUxJXntIKklDfippSW5qCnpL
d2djKHU3Y1krKyhfZER4RXZjSUBOaiU1NiFHY15oPiRgbipNUnFZSUQrdDtqPnAqNGJocWFQT0Z9
TkEkUzhnUAp6SDZRSj8wXk9xYGJvTVZDJkRsOWpZQTNYcy1QS0QyaThuRHJWUFAwXlJ2UX42OUsz
VkNoZDMtKV97Kmdzc1JGemwKeiRWPERWTHkraytaRTdTUDBPRlVAKElLYSRLKX1FYV5BaU1CS3FV
OUR3ZUpGV21HYT5nKng5YyM9ckd9bXs7IXs0Cnp2IzxsTWtRcnVJUz9EWTl3ekh0TjMreGxNKnFL
cnU8a0dKMnVsRCY2XiReT2pBeXF+JXByfHw1NVpgQkModmBhPwp6eEdRX3tYPFBMaGtmYXswQk5D
I2lhTi0kc1ZkaD83RzFnVGxycE4qcFUrSXJVWHR2KWtESVRSYWhPaTMjak9ye1kKekcxPVY8d0tZ
OTI8TEI/dzF5VVRGM1FoOUBeQ316cHNoN0x9Zj5MZ0BeO1l6RTwzPW9aPUk8YT5fMi1CITBrfjc/
Cnp3VyhKUmc0XyFuOUNMbX5Re1ApMGs2c0BaRCgxQitBTzNeU0g4IzI7NEp3bUFqUWtNbFhTQ15z
bkV5I3laYjxmQQp6O3kzWjI8bmlIfCMtU1J+UT5fR3J2bXJne3p4LWIoQip3fER1aFdZRkk8WlhQ
LT5ZSUttMD1VUFZTT1J7IThyKjYKejlXJjA+bHhKeHVBUVI/b0pEJDNNbXR+LSE5cGhwSSROfX5W
JT5VOXpZZSRTeTVobzQ1XjFzS1RqViNIVjNaZF9LCnpAJmE+aDMocEpeMW1eNUQ7KUVvMHhkbkRs
T3BHQ1Vrcks+bjBQPD5wZTQjNGpZckZEXi18K3tHQSk7SCtQM2I7Vgp6WVdKKC1mXmFrd2p1Szx+
YmA4WVYyM18yNyVUfElkTyotR1RUfUBtYktJdk0wQ2steGpxKG0/Km9HPFJ3UVpoJnMKejBXb2hW
RilmfGZjQDZCbGhMcEowJl9RRHIhUUN8enkxbn05TGskKGx1Ykk3TEFYM0ImSUo0QH1Me2o7NlUt
TDY9Cnp5SHVgTnl+aHIoNHB6SVV0ZjRSSllJRFRRVTZMQC1OIUUyWWRnRUAtMSNxSk1oeTFmUVVq
TkFpPC10M14lXlVFKgp6dD1QR2NhS2tWUDk9WDdDdDA1ZzdMJEEqb0tOU3JsQXVxRXFgLSZLPT5r
NEg3VFUqPCgzKHJoN2RwKVFPcjYwJUkKei1lRj5VSFB0XkZucClSTHdWQ2l6YyZSS2hwSUc4fmh+
fEZQLUZMKXZQVUVCKzstZThiaihWX2E+U3hIb01KdG1oCnpoR0E0PyNKZmV5V1RRay1OKmpxJDda
QXB6ckEtRXhLI2w2Iz8jdjl1ZHFSQlJOZj5SZDtGak1OJHxOcFNsZC0rKAp6P0diRHwyWTJAeUk+
ISUhe1QoY3c9YDNIelJyKig9azErQ3M1TWZsfWpwX0BDcUFXc01geXA3aVF8SEpoXiFjV3QKei1e
bSl2JSNfM0BTSlZ5KGZkZmF1OU5WeD1vKlBiZHQ/a1Y/cHMzZldreShkWDskQytiLX5mIys8c0JW
aCVzVCFQCnpPNXhHPTRRUEEpOVJfUTB6bFo5OzBzVTw4T2puUzJYTlhybVhMWTZjeiFLPTsjUkdE
SDwmRTZHQSVMQ29eRCQwUwp6SHElQnBOVCM+Y2YwPXdSSUpsdFdIXjNJb3pCSns7PTl9Qmt0SiF1
cEoqVCMyNW5ZbDFQd293UEZZLWM/bCtpcH4KenV1Y2NrSFY2JHxyKFJmX1hzJldVTXo3TitQRWhR
dmVsK2BZN28yRkJWVn4/bytpZnZgLSQjR3xKQVVVNzR3aGEqCnpKUiYzN3h6K2kyPHUkYGE8a3NP
QUVQN249Rlk0U2dZYG1wRClgKXc1O0hwV0Fsdk1KVXd+Jm1xMkxveWtYV3ZPaQp6M1U7QSRyJURQ
JWhgcDRKWGBMMH5rR0JKRWNsQ3ljZFN2e09QPSRBOSV+ZippeXErMnMwaVNmUVVPVW81U0dXRDgK
eitQV2coSThJZCEtNHFDckJ9a2NZM3VqOFNDRih1ais+djNnKnN0aFY5KkElNE9UZzdIYGhrelY/
P2hXSWd+eG9aCno3fkE7QWArO1QrclcjfVY1RiQ/X2AyTFolQXo4fXEyUzVSRHkoUXVvNnkkVWdj
bihne3d4TW8rXl87SCtHb152JQp6YUV2TTsrKXw/fE5AZTFwTVgybUxPPTFDO3VeWm4kX1AxTSo0
TF84fDZlIypFcyVvKzJ5JUEmdmBkcVQ2Rj5oSVgKejsrS3YwU1NWQGd5RkIzTVk+MylFdG5Oc34q
ckYmd3k7YD8zVjE0Xl5tbTxJRnlzVVVrViMjQmdvMClkLWJ9SygjCnpWIWVSfWxsKyQ2elFGeTlw
KnRHI0ZQJGQxcEJAZ3QxPyVBU19ZV2VZZzFCeDNOVl96ZU1XbEs2LT85MUUtTmNHRwp6U0ctUVdr
Wlg4T21uSnxVRGpoVU1TO0BubFFlQEBMXmtlamdeem88U2lgbCNtKVRZMXwqbTYlM3IoX2NrNlde
I1QKenFDSm1ZUmtiKXkyJktRYWpwQjh3RzBTZnxhNCpwZW95Vkp8Z0EkI2NLe1EpYHZzcnZDOU9z
T0pUWihqTjc+bUJMCnpse0FBVjZ6XyVEa1k2KnNMJXBRNj4zWDF9fEdlRH5sbiZRVkZRNE0peFBf
NkVyNThVWW08JmlBNCNAc2khOUozWAp6b2VgKDdPR3ZCSWJFKUY1I296UyhUX2xCI1hgM1RzekBL
QFJDbl8jP3R+U0Mqd0lTUyRaTiFwUSFleSE8R209SmUKemAoYVUmRWgoMUokWnA2NkROMC16OSlK
eytgQHcrb1U/KnMqcElaVFNtYl5MZD1rWFdAMC01K1h4JVR+V0dSMjwjCnpoPkVrZVV4QVhXVCY8
YVdqb1ZnQUAhQSE2PiVkcnJ0OSQpdHwydWtxZn1kSzgrczBjQ0hkNSRkdWdCd0B7NSN5Twp6Y01L
Q1NeUHpFTSFCPHB0JEI0PSVuWHQhRTUwQlphSzhJZD92TFU1SlIja15KS3kyWGcxcztjM1RWdkte
OXk2Y3gKejdhcUlMSjQhKitjIShXVmZUY0JxSU4tPGZQcVBwKjlAeFp9KGdMazs1flc0R1IkOURX
fDBkMTk9b0V4Q0ttVVIyCnptJCp5VTZadER2b3RlR31XQ2dEXm0oY09oKzlOOU8jfHQwQ2g/RHA7
T1Z0SVFETFhzOW9uK2plSTQzQ01xV1FRfQp6SEZETnV6ZjchKWAybjd3a2pwR2NuUj9ZMikqWmg+
QU53fE1vNCRGP2tKOH5TLWspeXRWRD93Kl9nfWZfTiEkV3MKejg0KFQzQmEpdnxFJDY7IUUzfSQo
eCU1PyNTPzt0dURLWUZHXkItRzlCYlVSND9nWF5vQ1pWWHB1UnozUk5mUElvCnpSZGxTfHRyRkRO
ZDZXLT9HcXJKU3FlS19RbkJSdmhfX2RGWkRoMGlaaGJ2cj5iSSlMZkRVdjYjaVgrSDhjaTEyOwp6
WVI1KVNvOyNEKVN5VTtyVzdobWVVTiVvT294Uy0yTFhKe0VwIzhBd3E3cj5JQlBUUU9BdFV2ZDlx
c09RJDxlX2cKeiMkd3hDcEdqSDs3YmFDUCFGU0RvYmVfJkxATVFYQ2VkKHYxP31pY09JKUlQRyV4
eChkQWBKJTMjSEFmMlpzKWx+CnpNIzR6QUg4JkYhZDc5dW0pXklvT3VhVDw3cUc0Oz8hemYqQDA9
R2N4JW81IWg5NzdoI0BYcng+PCF2azVjfUshQgp6MVJtbTtVP2ZYT1JgVUhXQSNJLXl0eWRWYih2
QTxBX3Qqd18wZmYpclNnIX5ZOFAwdGZ8Qy1JRVlQNGVBMHJ7QWoKeiF3VVVTK1UzJXwpZFdYdnVx
XkQ0Sj9XJSU+QF5jNEU/OSpoQGFYVERFOWpwQmR8eDJ5KFY1VTw0OWc+Z15iZlh9Cnp3UX5UQkpy
M1Y8VmApMmRXR1hGcjZNa0xRYiQ4ZjAmaGh5P0tGenx3cGhpdjIzZXVnU0liMTYyYH56bSNpUnxl
fQp6YEUxP1VtMDFaWVN7SVdrVF9LbXZvfDRrWit5JTZtdEhNWkVZJHc+LSEzTiZWTCVtZVFrNllo
Y1ZJdkdyIXI8TSMKekZzcWZkPVFmTX04U3RlRz0tKElIdiExPHJvaX5eM0o0TT9HRj1Raj9pSj12
QyVDOzVCUXEyb3BrfXdPXzBBaF4hCnolQ0xIXmE0RnsobFQ1bGEhPTMoYDNublNRUzJ0bytxdWlA
XkJXe00/TiRXbWJQbVJ0KiZJR2NvbXstZ1R7WjlZPAp6eXEhc1EzRCFFIV5ucVpMREBjYGB5RUtx
MzRnVFpIb2ZGUEsqcSUteyo3dGNeO093fCs8QWRKUyRmcWowTG1oYlgKek4lVHFnUXFDbXRwdXRV
Z0UyfjNHTmIpZkswOWBFMnliMEVMXkcxfV9vPn5QezJSfVEqd05vN09ANXg4O0FURzFPCnpMLUdL
PTBkSk0pM08mMSgtdGxXYyFEOXtnRlArXmFZN2hlVGNUcGRpPGtjOE9sajdyUTRwT2UkYztMTFBp
QnFCUAp6IW1qP0ZqJlhrVXE+YiRNbUEzODxHYXxUQyM3WmomPjdoPW0jNW5DTktOQD42eFc/KDBG
OyRUNDZ3QzNmQT55eEcKenFGSH57Pz17KGpEVHxrMW5EMztXajsrUEpMNW59TUxzdFkjTWpNRDl6
VjxCfnVqP3xvdVpAYTwkOyF3Uzd9TWF3CnpOOClFRlBUUkFiOTgma0tHMylMfjQmSCpoaWBjPjNV
aFg1V3VDNz80eFdjY1FtQF9uVFlzQy0tUz5jJHxFIW8tRwp6YENNQWpfaiZSKXF2OGJGRD1JNFRs
YmNwblJAOVlKTU95YFdTNnZnbzVCfEtsWDsqXldIZzI/MEdLPW1fSSs8WWAKeiU9UTAxP2M/RiZ6
fWxzKm04KXJPPy02aipveD0wI3ZeTW9AcVJgZFpjdHA1STVqKDN0Zz9iWGNSPj9rMEcmSnU4Cnor
cVFUaFR+QjEoUXk2YmE8STE9fSkzRGtqPkp0bTBQa3QjeWVDc0lrJTRkeEVhS3xtV3h+TjluMzdZ
ZmFgdCk+ZQp6a2pWaVNudXkyYXc5RGAyfDlrJn0hcWJiNmF7P1BmSGhDPGBKd1YxVilAR3BGO2wx
WTNXTjlCKTVRZXJHWDlCa0UKel4jTX5mbmRPb18/dThVZSVFPC0oTG8pd0IrY1pqNUVfXlVtLWdj
KzxmR2c4RGMyQXc+TC16RHgjNCohNDNHOChTCnokNWhAWTN0ZEV3czhDejxiQWIoMDR9fD0lPnlj
NmxWVWtiPXF3JFN+Pj4oRThleE9uUy1JUV9Pazh1Oy1iYWg0VQp6dFV3a15mN2BAMyF8Wit+QzZv
ai0wVUBXPml1cmYoZChgOCVoNiFYQjxkWTl9KkBGPnEhYklaTDlWNjZSZX45ekYKem15Pn5QUz98
e0E2LUpkTSZnSj1WTGcqbmBubV9wcVdsdHAqcVcmSGxreTZCVDVUTjlIa0hlR2RRO3MkdDQqQzlJ
CnpRfWM9NF94PTNxVyhpd3NIQyY7LSNYSl9wXz5qTWRzJEphOzBSNU5tLUBqKWp2M3h+cFZuM1Um
N2gqIXoqS0NWQAp6QUxCeCNoeUk4Snk4RTtwe0B6YTtrRUx7R1h+fHJPQzReQ3NiVUhBJHRiUVE2
MmtaMyg/REQ2Png2Zi1FOH5Hb3sKelYyLUF2bjd5b1JQQ3g2T3Y+TCYrdEdJU20qIU55NXl3UWpu
ZWFCV1hXYEEmR1VnR2RIdiNXbzh7PCsrbmJENj9ZCnp3eUx9S20mP25gcSRrUSlibW1aNz5YVHA2
QnplYjReb2hpN1o4ZzhkP2dgUSFqPShjP2xXTlhjaEUmYnt3RWNkJQp6R1k+XjxjUk1fZzcqSFUz
Vj08Tj0wREhuVHZfeFRUaDR7ZXs3Sz5xQXN1bkJLSU83eTxwfVNWMUdOYFpOJG0xWl4KekNPPl4/
S0J+YT08N0o+dHhAcENCVEl2Ujs2PXBiclpPY18wQkhFVkErK2N+Sjklb3NxYG1lfENeLTRWYENg
YWVHCnpzWSEpISN2PCllRUFWUF8yVGNWVCU8eX5QSiEzbTUlU0FuJiZTYH1UODtuIWw5aDAmUmVB
dlN8TXdobnJMWWYjfQp6PmJQeHllSnd8fEY4UDl+JG9FZT4/SFlkbEFIZnB+Q28zfTlaKEJhSDMw
SVlLJX0qK3ZUQyR3JWNBTGBgKmFPPm8KemZCa0F2bVBtMk1haWV+fHJwKm5iVHJoZDVPZiZ9ZHw3
X2FvPH19QjQ1IW07Rj82P3E8SXJhU2chQHJIc0UoJXxOCnokK3xiI0ooWEo9VjNUWFgyTyU7RGEp
V0JFIyEqTiprazdGfEh8XmRCNX5QOHZeQSl6JjglKD1vLW1ENW50eG9Mbgp6PzcpaWN7b2hJcklq
PUJWPSZrQzFOYGhhaVJxVUwxWFNtKW1vWUN4akkqfn0/NlAhcnJCY3R9JUB2KHFfMEV4dDsKendn
fD1ATDJ3MVpAVTdmZ1NYZiUlWlFYelZ4WFgmVVlsQTxEekg7MCFiIy0tQDtKbjcpVEI0Kjc1eDJt
WHh7OGkrCkpgNkh7aHt8X0xFeVl2NzYKCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9wbGF0Zm9y
bS9tYWMvc3ZnL2N1c3RvbS9wZXJjZW50YWdlLXJlY3QtZXhwZWN0ZWQucG5nIGIvTGF5b3V0VGVz
dHMvcGxhdGZvcm0vbWFjL3N2Zy9jdXN0b20vcGVyY2VudGFnZS1yZWN0LWV4cGVjdGVkLnBuZwpp
bmRleCBiOGQ3MWQ0YWU2MGNmYWEzMGU3MjRhMjFhMTAwNjYyYWY1OGIzMzlkLi5mZDIwOWRiN2Jl
NDdjMDQ3ZmZmMmI0NzcwMTdlMDU1NmFkMjAyYjRjIDEwMDY0NApHSVQgYmluYXJ5IHBhdGNoCmxp
dGVyYWwgMTEzMjUKemNtZUFTQE4/KG9sSHlgdVZCcSFpYTB5fnlVeyt2WVYyYT5pMUIlUWxZYnBS
em5rQjlnQ0NNNDckPVN1RnhlVGNXCnokIVRlKCM7SXYoTW9GcDAjenFGbGlLYSVUPTFJdjBDV2RL
Zz1CNSp9cnlUe0ZAR2pIWUlsJEF8U3N8YihLUEB2Uwp6bTRUc3h1e0dwO3d5PmtmS2VOMSo3bkNA
bnZpVVl1T2k9UVNUJUY7MSNxNihPUVp+PFJgRTlOZlFqOSZYPChhKkgKenI/eiF6JENGMUZ3ZUdw
VFVDOTJ3TDlYZ1Vpb1JFQ2wmaStRKWYhMCkjZFNaUCZHWHJ8XndvaUxiKVdCPHpwdT9OCnp5VSlO
fGJqanB2MUlyV008M1dvQUdqblIzdmlAezFeZXk2YUcqSnpge2wtcykmOVMtb1haNzxOUnM0PDdW
VFlASwp6bXYxVXhKTH1UNlM/biE7OVVpI1B4fmE5e3k/N3k0cSEzZXcmSGFVJSQ0Zlp3S2Zkd2xP
fjBqSVd5UWcqe014b2gKekI5Jj8hT20peElgfGIhbnQ5c2Q/Kn40UFcqVE52WElvRz9WVCRnM2Yl
dTczVkxTVjF8Z2tgKFd5anp7TGFFeytNCnp6NnBFaGV5UWBAZTkhS1g7dnNJeXdmMWcxZGdwIVp4
b1pDP0AhXnRaTjdgJjxCdXV+ak5EJHBGd2VwQVFBKDQwaQp6VS1kO0hnKld3aEtoOVk5SHwmI0ZR
XjVwX1F6P2xKI1pleXEqTTBKUz59cUdOUmw2Pnt7IXd7WTtLUnkoO3EtZX4Kej8hSUB1I2tBZ2xQ
bkppRFhCTXdWZlBnRFk7KjFSZTRzQUE0aDk7WWU/M0d1dU5sJmdlRHBrcWFVNlNPbyhYcmE+Cnpq
X3ZscUMza0s5WCgkeT1hbyktPz41dDwtdEBTN1VwSH1gbjlrYnleKiFMLUdYVjJSOD40RWpwciEj
ai0kejh2RQp6OyZIS1dUK1AlZ1dzfTMqcj4mezErQjU1b2w+TTlWPjR3am1PIzY9JVp9fE9ESC03
NHc+NiQkdk08MGlOZSZ5WCMKejhmOXBIZXx9RUF3ZTJJbF5Ma3NhNnxlMj1IVj5PVUpeZ1ElJE0x
S21fRHBeamBxTXd8PiZITG9YT0FSNShsa15uCno+dzIhKElzS15LJDROSzVTOTNvfiRVVis2Y1dS
c0ZyUUNfWFJJVmxAJS1adStLaHszRlZ5fDAwJikye3lsNG1aMwp6YmJoWnRxP0tZYWNQQyV8dW0w
UHx8QTteTi10fk9HMjl0aXlnQSs0JTxwdmtON2coNk9HX1FDYWxsY0NOd0k4PFMKeldpUEk/X2A/
IW12cyFGemttLURkSiZaREM/TnhGd0ctcTYlSHRub3NQYGwzaiQtNz5qTih3cD9hTjlYMz0oXzZs
CnpSQnk0KEdlZVZKbWZlX25TdkY1KnB7M0xKQmc/JX5DO3dYaVFFPGNHNE05SkR0X2l3WD1PPVpv
YXImP1AxQUczdQp6OTtvUTxXTUVLV0BOe3R1c2JHQTJiN1NzZDFfMmh3bGZBZCtVZH5HVkZUe0hJ
MmZzcXcjaXNZeUA0djNCKyF5eFgKej1odz04LXlUO09HTz0oN0NeJDRRSDBwZXFFWTFleUZvSHhh
eEh1KiMmeWZWUEtgSSFUVmpVVnZqSmFWdGZEKE83CnpPaXd0ey05VH4+b2V0c3gzVXwqbSFUQWkw
aXlJZyQ1NnUqVzd5d2RxZnRBST5kXjNYWUBJWFZzcHwybmYkPzZoRAp6IyFGeylBbnFEPDNNe0Ji
THElYVV0JkhYJVhtS0BLdH5mTXxtYlR6Sj0+N0IwR1RWe3M0Kj9JUmUrPz5uJEMwV08KejlWVnVm
aTw/ISEpZmlZPGZzPHB4ayo3MHxZQVJRVTJBISZITlAxS2w4N0orSzVyJm4mMHR5PkFJM35FQnBO
NkRJCnpNWnJPNmROTlh0RDh8VVI+QlVWVWdxe2czRUZPPUZkPU9SUzBWTT9vRzIzVilKKEMoM0pZ
KUplIVBQTGh4e0Z8OAp6SWs3MCs4PT1RUk5JOz9Vdj5+alAxdjtSK2ZnJG9zNHc0PVpDTUswYU9F
cldDNjlmZW15NjVSND5HNTxKNFYyTTkKejBjTVdUbHJveHE4Yi0/JDR1UjJ2bVdnR3dfR3VXY2tf
OGstK2JLKmVxbTRJKSM/Y24tWGZxJCFIeVEyd0ZmQCpLCnoycHZYeSR0KWJCTGtFbVpxZUJNe3F2
SShZcWVCT3lCWDZLbCVGJl5OKFYrdi1BbyVGZSFKciZFc1B9YUNXbmticQp6MzBleVBvMndYWSRj
O0FTSz1Wblg0WXw+VjlCXyhyYlBpfkEzVSN6MEgjKnI0VThnWHA4KiZmaXQmWnw2QEFzUXsKUjJl
PS1YIVBDe3hXdH4kKDY5NUcyI3smUVcKCmxpdGVyYWwgMTEyNzcKemNtZUFTQE4/KG9sSHlgdVZC
cSFpYTB5fnlVeyt2WVYyYT5pMUIlUWxZYnBSem5rQjlnQ0NNNDckPVN1RnhlUyZECnpYe2x6M01y
TmpGbVgtI2xNcmxTVm1XanpgTW9BV0NDVyR9K2k+ayQhM1Z8bFAlWERAUUBOey1vMnE/LT0lZ2pr
LQp6VjVuZWg0TFA0Sj4/cmNqRU58cm5DNjFfVXpEKlNxbHNxRj5YU2lONWB6eDR+JjJ3OVJvOWwh
V1c2eGBPWDBQOT0KelpDJT4mPGszWn5kIy1PNnZqMTw4dE5NX2xANntVUnMmUXwlTSQkclktSCZK
VWU2fXJwYj5Mang9WD5Wd1l4QiRRCnpHdz5FJkdXcHVUQGBVJHomPzNSaW9Fb1JCS09HRXhpI1Eh
a1I2fXBTQGwjPVFZJWN5O3tycEIxZWA5cG07cCpTegp6bzY2VkR5MG1RO2QmXiZrMmt4X09ZSGZI
Z1VkUjxHI01FSlBmMSYyXzV7fjxpWit2PndafFBUQWFkMGNZdyhYSGYKenI1WG9RLUU7TjZKQSUp
dVVVcTJxdSRjMC1GdnhEc18za094VyFXP0godkY9Rip5fSVHKzNxdiVSd3BmLTxNKWtrCnohcnIt
Rz5pam19dnBifUNoK0FeNHoxeG83ZDAlXzMrQ05Ic3hhOFQ5SGRgNDkoPVJefk03Sys9ezkkQFhC
d29OKgp6ZU5qbF5PK0RVXkd1SGhMYHtkUEJGdX4kZk5AN0VDbCF5T3lwUyZOdCtGNUpXdF8hYiFS
Mn4taXUoRHFge29hK2sKej9fRjsodHZCRzQ8Jm9sPCNwQDl1O0w0SVhWPyUmTG5+anZBJCkrTkU8
PClHYGxkRndOUmtDKU1CKU0jS3RUd3gyCnp5RkdCcFU3TFJ6TmArSUx3e2xHUzxNPlome1luMyls
fE42JVlgNzhqZWFoT3x2dnolWVYxNHhJJSQtdGwqRHMlVgp6VDxqWkhHeGJXQDxaJDxDWWJ2WXUl
ejdoYnwwYUM4O2o8Pnd7dipYM2V0Kj1CcEwlQXhXez0zeCREeUJKZEFGMkMKejhKZ2RwcEhwdmJg
JCtHKy1xdmZ5WWRnRW0hKTh4VXxDe0NVYGB4Tk5sYj9uRF5wRUBjQGxYMk1CZ3YwNjRie3JKCnpv
LTF9dktkU2R9KGhjdmArPmE3K2s4e2tPK05PQ2FjajdPVnN8ZzlTX0klWmt3VTRnWT5zSFY2SEVA
ZExuTSl5Xgp6LXxHKSlySV5nISQoUjREfE11fWU7IW5QSkopZl9ecUBWTlAjTFFpfSFHLVN5N04j
IUVEXytNV3pXLXdGaGkhUzsKeml8WmBAdXRlQ2I3RiEhK0kkdlFBcWZBK1FtRH4lPjhKRExgSjhL
ISN0fX1ufnU5djVoZzNiaW9iYEE9PHU2ak15CnpUV3NecCg0PzFUSClkWHomNjhQWj5HYmBgYTxB
ME16dCg+Zy0wKmlwKDlmVDFmXk9GTk5uTEI0e3d4MiRwMS1hSwp6RCFNeHY3ISgqaFRedkl5N35r
STkkYX5tO2YhV2N6VFlhezYrezRKNzdHTD19bVVtc0t7a3lLJWE9b1pVe1Exd2YKemp1I3AtdjJY
fHxJNWFSYz5VPW9hK1E3Z0Y8MTtjWFplVFB6YlBeJjk3Sms5Uj0zeVFUUnQtXlJ6JEt4ZUpme2J0
CnpzWmxTWHB+UlNWKVI1Nkk4QkhnbmQxdGdKNyVkKkBSQW0mKmZCd2JDNXZsJWEpTyowYldWUish
XihEY3xHZU9ZTAp6NFdZKEMrYHdWaSVxRkRqRUFSaz08aWl3YmpSPm02TipJfCg0SCpyUyhSNERK
Y1NlaFgjP2ooJnc4e198dHd1KiUKejFxYERfTEJuV0tGal5GaGJgWEZBaG9ofjYoVn0zcUM+U2pZ
TXZEVUFKaiFUTUZqXkZoNzZxZTQhRHZ3Y25uKWZVCnpEO1NgJGZ7bXNWOFd8V2tXYGZvTmpBcThz
JXM4NEUhTHhqJFdCOC1KXzBjQiFYdVVpLXZrek1GSCpmPVlLYlZWUgpYYyRTfm5KYnd6ZnpMJncl
KXo0Kn1RJGlCfXJhKipBCgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvc3ZnL2N1c3RvbS9wb2lu
dGVyLWV2ZW50cy1vbi1yb3VuZGVkLXJlY3QtZXhwZWN0ZWQudHh0IGIvTGF5b3V0VGVzdHMvc3Zn
L2N1c3RvbS9wb2ludGVyLWV2ZW50cy1vbi1yb3VuZGVkLXJlY3QtZXhwZWN0ZWQudHh0Cm5ldyBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYxNWJhZTAKLS0tIC9kZXYvbnVsbAorKysg
Yi9MYXlvdXRUZXN0cy9zdmcvY3VzdG9tL3BvaW50ZXItZXZlbnRzLW9uLXJvdW5kZWQtcmVjdC1l
eHBlY3RlZC50eHQKQEAgLTAsMCArMSBAQAorUEFTU0VEOiBmYWxsYmFja1JlY3QgaGFkIHBvaW50
ZXIKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3N2Zy9jdXN0b20vcG9pbnRlci1ldmVudHMtb24t
cm91bmRlZC1yZWN0LnhodG1sIGIvTGF5b3V0VGVzdHMvc3ZnL2N1c3RvbS9wb2ludGVyLWV2ZW50
cy1vbi1yb3VuZGVkLXJlY3QueGh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw
MC4uYzYzZDEyMgotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL3N2Zy9jdXN0b20vcG9p
bnRlci1ldmVudHMtb24tcm91bmRlZC1yZWN0LnhodG1sCkBAIC0wLDAgKzEsNjYgQEAKKzxodG1s
IHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sJz4KKzxib2R5IHN0eWxlPSJtYXJn
aW46IDBweDsgcGFkZGluZzogMHB4Ij4KKworPHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcv
MjAwMC9zdmciIHN0eWxlPSJwb3NpdGlvbjphYnNvbHV0ZTsiPgorPGRlZnM+CisKKzxzdHlsZSB0
eXBlPSJ0ZXh0L2NzcyI+PCFbQ0RBVEFbCityZWN0I3JvdW5kZWRSZWN0IHsKKyAgICBmaWxsOiBu
b25lOworICAgIHN0cm9rZTogZ3JlZW47CisgICAgc3Ryb2tlLXdpZHRoOiAyMHB4OworICAgIHN0
cm9rZS1saW5lam9pbjogYmV2ZWw7Cit9CityZWN0OmhvdmVyIHsKKyAgICBzdHJva2U6IHJlZDsK
K30KK11dPjwvc3R5bGU+Cis8L2RlZnM+CisKKzxyZWN0IGlkPSJmYWxsYmFjayIgeD0iMzAiIHk9
IjMwIiB3aWR0aD0iNDIwIiBoZWlnaHQ9IjMyMCIgZmlsbD0ieWVsbG93IiBvbmNsaWNrPSJwYXNz
ZWQoKSIvPgorPHJlY3QgaWQ9InJvdW5kZWRSZWN0IiB4PSI0MCIgeT0iNDAiIHJ4PSIzMCIgcnk9
IjMwIiB3aWR0aD0iNDAwIiBoZWlnaHQ9IjMwMCIgcG9pbnRlci1ldmVudHM9InZpc2libGVTdHJv
a2UiIG9uY2xpY2s9ImZhaWxlZCgpIi8+Cis8dGV4dCBpZD0idGV4dCIgeD0iMzAiIHk9IjM3MCI+
PC90ZXh0PgorCis8c2NyaXB0IHR5cGU9InRleHQvZWNtYXNjcmlwdCI+CisgICAgPCFbQ0RBVEFb
CisKK3ZhciBmYWxsYmFjayA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJmYWxsYmFjayIpOwor
dmFyIHJvdW5kZWRSZWN0ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoInJvdW5kZWRSZWN0Iik7
Cit2YXIgdGV4dCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJ0ZXh0Iik7CisKKyAgICBmYWxs
YmFjay5hZGRFdmVudExpc3RlbmVyKCJtb3VzZWRvd24iLCBwYXNzZWQsIGZhbHNlKTsKKyAgICBy
b3VuZGVkUmVjdC5hZGRFdmVudExpc3RlbmVyKCJtb3VzZWRvd24iLCBmYWlsZWQsIGZhbHNlKTsK
KworZnVuY3Rpb24gc3RvcCgpIHsKKyAgICBmYWxsYmFjay5yZW1vdmVFdmVudExpc3RlbmVyKCJt
b3VzZWRvd24iLCBmYWlsZWQsIGZhbHNlKTsKKyAgICByb3VuZGVkUmVjdC5yZW1vdmVFdmVudExp
c3RlbmVyKCJtb3VzZWRvd24iLCBwYXNzZWQsIGZhbHNlKTsKKworICAgIGlmICh3aW5kb3cubGF5
b3V0VGVzdENvbnRyb2xsZXIpCisgICAgbGF5b3V0VGVzdENvbnRyb2xsZXIubm90aWZ5RG9uZSgp
OworfQorCitmdW5jdGlvbiBmYWlsZWQoKSB7CisgICAgdGV4dC50ZXh0Q29udGVudCA9ICdGQUlM
RUQ6IHN0cm9rZVJlY3QgaGFkIHBvaW50ZXInOworICAgIHN0b3AoKTsKK30KKworZnVuY3Rpb24g
cGFzc2VkKCkgeworICAgdGV4dC50ZXh0Q29udGVudCA9ICdQQVNTRUQ6IGZhbGxiYWNrUmVjdCBo
YWQgcG9pbnRlcic7CisgICBzdG9wKCk7Cit9CisKK2lmICh3aW5kb3cubGF5b3V0VGVzdENvbnRy
b2xsZXIpIHsKKyAgIGxheW91dFRlc3RDb250cm9sbGVyLndhaXRVbnRpbERvbmUoKTsKKyAgIGxh
eW91dFRlc3RDb250cm9sbGVyLmR1bXBBc1RleHQoKTsKK30KKworaWYgKHdpbmRvdy5ldmVudFNl
bmRlcikgeworICAgIGV2ZW50U2VuZGVyLm1vdXNlTW92ZVRvKDMxLCAzMSk7CisgICAgZXZlbnRT
ZW5kZXIubW91c2VEb3duKCk7Cit9CitdXT4KKzwvc2NyaXB0PgorCis8L3N2Zz4KKzwvYm9keT4K
KzwvaHRtbD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9MYXlvdXRU
ZXN0cy9zdmcvY3VzdG9tL3BvaW50ZXItZXZlbnRzLXdpdGgtbGluZWNhcHMtYW5kLW1pdGVybGlt
aXRzLWV4cGVjdGVkLnR4dCBiL0xheW91dFRlc3RzL3N2Zy9jdXN0b20vcG9pbnRlci1ldmVudHMt
d2l0aC1saW5lY2Fwcy1hbmQtbWl0ZXJsaW1pdHMtZXhwZWN0ZWQudHh0Cm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYxNWJhZTAKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRU
ZXN0cy9zdmcvY3VzdG9tL3BvaW50ZXItZXZlbnRzLXdpdGgtbGluZWNhcHMtYW5kLW1pdGVybGlt
aXRzLWV4cGVjdGVkLnR4dApAQCAtMCwwICsxIEBACitQQVNTRUQ6IGZhbGxiYWNrUmVjdCBoYWQg
cG9pbnRlcgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvc3ZnL2N1c3RvbS9wb2ludGVyLWV2ZW50
cy13aXRoLWxpbmVjYXBzLWFuZC1taXRlcmxpbWl0cy54aHRtbCBiL0xheW91dFRlc3RzL3N2Zy9j
dXN0b20vcG9pbnRlci1ldmVudHMtd2l0aC1saW5lY2Fwcy1hbmQtbWl0ZXJsaW1pdHMueGh0bWwK
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTIyNmI3MAotLS0gL2Rldi9udWxs
CisrKyBiL0xheW91dFRlc3RzL3N2Zy9jdXN0b20vcG9pbnRlci1ldmVudHMtd2l0aC1saW5lY2Fw
cy1hbmQtbWl0ZXJsaW1pdHMueGh0bWwKQEAgLTAsMCArMSw2OCBAQAorPGh0bWwgeG1sbnM9J2h0
dHA6Ly93d3cudzMub3JnLzE5OTkveGh0bWwnPgorPGJvZHkgc3R5bGU9Im1hcmdpbjogMHB4OyBw
YWRkaW5nOiAwcHgiPgorCis8c3ZnIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIg
c3R5bGU9InBvc2l0aW9uOmFic29sdXRlOyI+Cis8ZGVmcz4KKworPHN0eWxlIHR5cGU9InRleHQv
Y3NzIj48IVtDREFUQVsKK3JlY3Qjc3Ryb2tlZFJlY3QgeworICAgIGZpbGw6IG5vbmU7CisgICAg
c3Ryb2tlOiBibHVlOworICAgIHN0cm9rZS13aWR0aDogMjBweDsKKyAgICBzdHJva2UtbGluZWNh
cDogc3F1YXJlOworICAgIHN0cm9rZS1taXRlcmxpbWl0OiAxOworfQorcmVjdCNzdHJva2VkUmVj
dDpob3ZlciB7CisgICAgc3Ryb2tlOiByZWQ7Cit9CitdXT48L3N0eWxlPgorPC9kZWZzPgorCis8
cmVjdCBpZD0iZmFsbGJhY2siIHg9IjAiIHk9IjAiIHdpZHRoPSIyMTAiIGhlaWdodD0iMjEwIiBm
aWxsPSJncmVlbiIgb25jbGljaz0icGFzc2VkKCkiLz4KKzxyZWN0IGlkPSJzdHJva2VkUmVjdCIg
eD0iMTAiIHk9IjEwIiB3aWR0aD0iMTkwIiBoZWlnaHQ9IjE5MCIgcG9pbnRlci1ldmVudHM9InZp
c2libGVTdHJva2UiIG9uY2xpY2s9ImZhaWxlZCgpIi8+Cis8dGV4dCBpZD0idGV4dCIgeD0iMCIg
eT0iMjMwIj48L3RleHQ+CisKKzxzY3JpcHQgdHlwZT0idGV4dC9lY21hc2NyaXB0Ij4KKyAgICA8
IVtDREFUQVsKKwordmFyIGZhbGxiYWNrID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImZhbGxi
YWNrIik7Cit2YXIgc3Ryb2tlZFJlY3QgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgic3Ryb2tl
ZFJlY3QiKTsKK3ZhciB0ZXh0ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoInRleHQiKTsKKwor
ZmFsbGJhY2suYWRkRXZlbnRMaXN0ZW5lcigibW91c2Vkb3duIiwgcGFzc2VkLCBmYWxzZSk7Citz
dHJva2VkUmVjdC5hZGRFdmVudExpc3RlbmVyKCJtb3VzZWRvd24iLCBmYWlsZWQsIGZhbHNlKTsK
KworZnVuY3Rpb24gc3RvcCgpIHsKKyAgICBmYWxsYmFjay5yZW1vdmVFdmVudExpc3RlbmVyKCJt
b3VzZWRvd24iLCBmYWlsZWQsIGZhbHNlKTsKKyAgICBzdHJva2VkUmVjdC5yZW1vdmVFdmVudExp
c3RlbmVyKCJtb3VzZWRvd24iLCBwYXNzZWQsIGZhbHNlKTsKKworaWYgKHdpbmRvdy5sYXlvdXRU
ZXN0Q29udHJvbGxlcikKKyAgICBsYXlvdXRUZXN0Q29udHJvbGxlci5ub3RpZnlEb25lKCk7Cit9
CisKK2Z1bmN0aW9uIGZhaWxlZCgpIHsKKyAgICB0ZXh0LnRleHRDb250ZW50ID0gJ0ZBSUxFRDog
c3Ryb2tlUmVjdCBoYWQgcG9pbnRlcic7CisgICAgc3RvcCgpOworfQorCitmdW5jdGlvbiBwYXNz
ZWQoKSB7CisgICAgdGV4dC50ZXh0Q29udGVudCA9ICdQQVNTRUQ6IGZhbGxiYWNrUmVjdCBoYWQg
cG9pbnRlcic7CisgICAgc3RvcCgpOworfQorCitpZiAod2luZG93LmxheW91dFRlc3RDb250cm9s
bGVyKSB7CisgICAgbGF5b3V0VGVzdENvbnRyb2xsZXIud2FpdFVudGlsRG9uZSgpOworICAgIGxh
eW91dFRlc3RDb250cm9sbGVyLmR1bXBBc1RleHQoKTsKK30KKworaWYgKHdpbmRvdy5ldmVudFNl
bmRlcikgeworICAgIGV2ZW50U2VuZGVyLm1vdXNlTW92ZVRvKDEsIDEpOworICAgIGV2ZW50U2Vu
ZGVyLm1vdXNlRG93bigpOworfQorCitdXT4KKzwvc2NyaXB0PgorPC9zdmc+CisKKzwvYm9keT4K
KzwvaHRtbD4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NNYWtlTGlzdHMudHh0IGIvU291
cmNlL1dlYkNvcmUvQ01ha2VMaXN0cy50eHQKaW5kZXggZTg2MTYyYi4uZDNjYzBkOSAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvQ01ha2VMaXN0cy50eHQKKysrIGIvU291cmNlL1dlYkNvcmUv
Q01ha2VMaXN0cy50eHQKQEAgLTE2MTUsNiArMTYxNSw3IEBAIElGIChFTkFCTEVfU1ZHKQogICAg
ICAgICByZW5kZXJpbmcvc3ZnL1JlbmRlclNWR0lubGluZVRleHQuY3BwCiAgICAgICAgIHJlbmRl
cmluZy9zdmcvUmVuZGVyU1ZHTW9kZWxPYmplY3QuY3BwCiAgICAgICAgIHJlbmRlcmluZy9zdmcv
UmVuZGVyU1ZHUGF0aC5jcHAKKyAgICAgICAgcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZWN0LmNw
cAogICAgICAgICByZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291cmNlLmNwcAogICAgICAgICBy
ZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291cmNlQ2xpcHBlci5jcHAKICAgICAgICAgcmVuZGVy
aW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJjZUNvbnRhaW5lci5jcHAKQEAgLTE2MjksNiArMTYzMCw3
IEBAIElGIChFTkFCTEVfU1ZHKQogICAgICAgICByZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291
cmNlU29saWRDb2xvci5jcHAKICAgICAgICAgcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSb290LmNw
cAogICAgICAgICByZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1NoYWRvd1RyZWVSb290Q29udGFpbmVy
LmNwcAorICAgICAgICByZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1NoYXBlLmNwcAogICAgICAgICBy
ZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1RTcGFuLmNwcAogICAgICAgICByZW5kZXJpbmcvc3ZnL1Jl
bmRlclNWR1RleHQuY3BwCiAgICAgICAgIHJlbmRlcmluZy9zdmcvUmVuZGVyU1ZHVGV4dFBhdGgu
Y3BwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29y
ZS9DaGFuZ2VMb2cKaW5kZXggMTExYjg4NC4uZmRmMzAwYSAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsx
LDE2MSBAQAorMjAxMS0xMS0xOCAgUmVuYXRhIEhvZG92YW4gIDxyZW5pQHdlYmtpdC5vcmc+CisK
KyAgICAgICAgQWRkIG5ldyByZW5kZXJlciBmb3IgU1ZHUmVjdEVsZW1lbnQuCisgICAgICAgIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD02NTc2OQorCisgICAgICAgIFJl
dmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFRoaXMgcGF0Y2ggaW50cm9kdWNl
cyBhIG5ldyBjb21tb24gYmFzZSBjbGFzcyBjYWxsZWQgUmVuZGVyU1ZHU2hhcGUgd2hpY2gKKyAg
ICAgICAgcmVwbGFjZXMgdGhlIFJlbmRlclNWR1BhdGguIFRoaXMgbmV3IGJhc2UgY2xhc3MgaGFz
IHRoZSBzYW1lIHB1cnBvc2UKKyAgICAgICAgYXMgdGhlIHJlcGxhY2VkIGNsYXNzIGFuZCBoYXMg
c3BlY2lhbGl6ZWQgZGVzY2VuZGFudHMgZm9yIGNvbW1vbgorICAgICAgICBzaGFwZXMgKGxpa2Ug
UmVjdGFuZ2xlcyBhbmQgQ2lyY2xlcyksIHdoaWNoIGFsbG93cyBmYXN0ZXIgcGFpbnRpbmcKKyAg
ICAgICAgb2YgdGhlc2Ugc2hhcGVzIHdoZW4gY2VydGFpbiBjb25kaXRpb25zIGFyZSBmdWxmaWxs
ZWQuIE9uIHNvbWUKKyAgICAgICAgYmVuY2htYXJrIHByb2dyYW1zIHdlIGhhdmUgc2VlbiA1JSBz
cGVlZHVwLgorCisgICAgICAgIFRoZSBiaWdnZXN0IG1vdGl2YXRpb24gb2YgdGhpcyByZWZhY3Rv
ciBpcyB0YWtpbmcgYWR2YW50YWdlCisgICAgICAgIG9mIGZhc3RlciBwcmltaXRpdmUgZHJhd2lu
ZyBpbiB0aGUgbW9zdCBjb21tb24gYW5kIGZyZXF1ZW50CisgICAgICAgIGNhc2VzLiBIb3dldmVy
IGluIHNvbWUgcmFyZSBjYXNlcywgbGlrZSBwYWludGluZyByb3VuZGVkCisgICAgICAgIHJlY3Rz
LCB3ZSBuZWVkIHRvIGZhbGxiYWNrIHRvIHRoZSBvcmlnaW5hbCBjb2RlIHBhdGgsIHdoaWNoCisg
ICAgICAgIGlzIGZ1bGx5IGtlcHQgaW4gdGhlIFJlbmRlclNWR1NoYXBlIGJhc2UgY2xhc3MuIFNv
bWUgb3RoZXIKKyAgICAgICAgY2FzZXMsIGxpa2UgZGFzaGVkIHN0cm9rZXMsIGNhbiBiZSBwYWlu
dGVkIGJ1dCBtb3VzZSBwb2ludGVyCisgICAgICAgIGV2ZW50cyBjYW5ub3QgYmUgaGFuZGxlZCBi
eSB0aGUgZGVzY2VuZGFudCBjbGFzc2VzLiBBIGRpZmZlcmVudAorICAgICAgICBmYWxsYmFjayBt
ZWNoYW5pc20gaXMgdXNlZCBpbiBzdWNoIGNhc2VzIHdoaWNoIHJlZGlyZWN0cworICAgICAgICBv
bmx5IHRoZSBwb2ludGVyIGV2ZW50IGhhbmRsaW5nIHRvIHRoZSBiYXNlIGNsYXNzLgorCisgICAg
ICAgIFRlc3RzOiBzdmcvY3VzdG9tL3BvaW50ZXItZXZlbnRzLW9uLXJvdW5kZWQtcmVjdC54aHRt
bAorICAgICAgICAgICAgICAgc3ZnL2N1c3RvbS9wb2ludGVyLWV2ZW50cy13aXRoLWxpbmVjYXBz
LWFuZC1taXRlcmxpbWl0cy54aHRtbAorCisgICAgICAgICogQ01ha2VMaXN0cy50eHQ6CisgICAg
ICAgICogR05VbWFrZWZpbGUubGlzdC5hbToKKyAgICAgICAgKiBXZWJDb3JlLmd5cGk6CisgICAg
ICAgICogV2ViQ29yZS5wcm86CisgICAgICAgICogV2ViQ29yZS52Y3Byb2ovV2ViQ29yZS52Y3By
b2o6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvRmxvYXRSZWN0LmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OkZsb2F0UmVjdDo6Y29udGFpbnMpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBo
aWNzL0Zsb2F0UmVjdC5oOgorICAgICAgICAoV2ViQ29yZTo6RmxvYXRSZWN0Ojpjb250YWlucyk6
CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlck9iamVjdC5oOgorICAgICAgICAoV2ViQ29yZTo6
UmVuZGVyT2JqZWN0Ojppc1NWR1JlY3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyT2JqZWN0
Ojppc1NWR1NoYXBlKToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyVHJlZUFzVGV4dC5jcHA6
CisgICAgICAgIChXZWJDb3JlOjp3cml0ZSk6CisgICAgICAgICogcmVuZGVyaW5nL3N2Zy9SZW5k
ZXJTVkdBbGxJbk9uZS5jcHA6CisgICAgICAgICogcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdNb2Rl
bE9iamVjdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjppc0dyYXBoaWNzRWxlbWVudCk6CisgICAg
ICAgICogcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdQYXRoLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OlJlbmRlclNWR1BhdGg6OlJlbmRlclNWR1BhdGgpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVy
U1ZHUGF0aDo6aW5mbGF0ZVdpdGhNYXJrZXJCb3VuZHMpOiBVbml0ZSB0aGUgbWFya2VyQm91bmRz
IHdpdGggc3Ryb2tlQm91bmRpbmdCb3guCisgICAgICAgICogcmVuZGVyaW5nL3N2Zy9SZW5kZXJT
VkdQYXRoLmg6CisgICAgICAgICogcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZWN0LmNwcDogQWRk
ZWQuCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJTVkdSZWN0OjpSZW5kZXJTVkdSZWN0KToKKyAg
ICAgICAgKFdlYkNvcmU6OlJlbmRlclNWR1JlY3Q6On5SZW5kZXJTVkdSZWN0KToKKyAgICAgICAg
KFdlYkNvcmU6OlJlbmRlclNWR1JlY3Q6OmNyZWF0ZVNoYXBlKToKKyAgICAgICAgKFdlYkNvcmU6
OlJlbmRlclNWR1JlY3Q6Om9iamVjdEJvdW5kaW5nQm94KToKKyAgICAgICAgKFdlYkNvcmU6OlJl
bmRlclNWR1JlY3Q6OnN0cm9rZUJvdW5kaW5nQm94KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRl
clNWR1JlY3Q6OmZpbGxTaGFwZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJTVkdSZWN0Ojpz
dHJva2VTaGFwZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJTVkdSZWN0OjpzaGFwZURlcGVu
ZGVudFN0cm9rZUNvbnRhaW5zKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclNWR1JlY3Q6OnNo
YXBlRGVwZW5kZW50RmlsbENvbnRhaW5zKToKKyAgICAgICAgKiByZW5kZXJpbmcvc3ZnL1JlbmRl
clNWR1JlY3QuaDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJTVkdSZWN0Ojppc1NW
R1JlY3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU1ZHUmVjdDo6cmVuZGVyTmFtZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpSZW5kZXJTVkdSZWN0Ojppc0VtcHR5KToKKyAgICAgICAgKiByZW5k
ZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291cmNlLmg6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJT
VkdSZXNvdXJjZTo6cG9zdEFwcGx5UmVzb3VyY2UpOiBBIG5ldyBzaGFwZSBhcmd1bWVudCB3YXMg
YWRkZWQgdG8gYWxsb3cgc2hhcGUgc3BlY2lmaWMgZmFzdGVyIHBhaW50aW5nLgorICAgICAgICAq
IHJlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VDbGlwcGVyLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OlJlbmRlclNWR1Jlc291cmNlQ2xpcHBlcjo6ZHJhd0NvbnRlbnRJbnRvTWFza0ltYWdl
KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclNWR1Jlc291cmNlQ2xpcHBlcjo6Y2FsY3VsYXRl
Q2xpcENvbnRlbnRSZXBhaW50UmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJTVkdSZXNv
dXJjZUNsaXBwZXI6OmhpdFRlc3RDbGlwQ29udGVudCk6CisgICAgICAgICogcmVuZGVyaW5nL3N2
Zy9SZW5kZXJTVkdSZXNvdXJjZUNvbnRhaW5lci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5k
ZXJTVkdSZXNvdXJjZUNvbnRhaW5lcjo6dHJhbnNmb3JtT25Ob25TY2FsaW5nU3Ryb2tlKToKKyAg
ICAgICAgKiByZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291cmNlRmlsdGVyLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OlJlbmRlclNWR1Jlc291cmNlRmlsdGVyOjpwb3N0QXBwbHlSZXNvdXJjZSk6
CisgICAgICAgICogcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJjZUZpbHRlci5oOgorICAg
ICAgICAqIHJlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VHcmFkaWVudC5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpSZW5kZXJTVkdSZXNvdXJjZUdyYWRpZW50OjphcHBseVJlc291cmNlKToK
KyAgICAgICAgKiByZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291cmNlR3JhZGllbnQuaDoKKyAg
ICAgICAgKiByZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291cmNlUGF0dGVybi5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpSZW5kZXJTVkdSZXNvdXJjZVBhdHRlcm46OnBvc3RBcHBseVJlc291cmNl
KToKKyAgICAgICAgKiByZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291cmNlUGF0dGVybi5oOgor
ICAgICAgICAqIHJlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VTb2xpZENvbG9yLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclNWR1Jlc291cmNlU29saWRDb2xvcjo6cG9zdEFwcGx5
UmVzb3VyY2UpOgorICAgICAgICAqIHJlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VTb2xp
ZENvbG9yLmg6CisgICAgICAgICogcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdTaGFwZS5jcHA6IENv
cGllZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUGF0aC5jcHAu
CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJTVkdTaGFwZTo6UmVuZGVyU1ZHU2hhcGUpOgorICAg
ICAgICAoV2ViQ29yZTo6UmVuZGVyU1ZHU2hhcGU6On5SZW5kZXJTVkdTaGFwZSk6CisgICAgICAg
IChXZWJDb3JlOjpSZW5kZXJTVkdTaGFwZTo6Y3JlYXRlU2hhcGUpOgorICAgICAgICAoV2ViQ29y
ZTo6UmVuZGVyU1ZHU2hhcGU6OmlzRW1wdHkpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU1ZH
U2hhcGU6OmZpbGxTaGFwZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJTVkdTaGFwZTo6b2Jq
ZWN0Qm91bmRpbmdCb3gpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU1ZHU2hhcGU6OnN0cm9r
ZUJvdW5kaW5nQm94KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclNWR1NoYXBlOjpzdHJva2VT
aGFwZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJTVkdTaGFwZTo6c2hhcGVEZXBlbmRlbnRT
dHJva2VDb250YWlucyk6CisgICAgICAgIFRoZSBwdXJwb3NlIG9mIHRoaXMgdmlydHVhbCBmdW5j
dGlvbiBhbGxvd3MgZGVjZW5kYW50cyB0byB1c2UgdGhlaXIgb3duIGZhc3QgY2hlY2tzLgorICAg
ICAgICAoV2ViQ29yZTo6UmVuZGVyU1ZHU2hhcGU6OnNoYXBlRGVwZW5kZW50RmlsbENvbnRhaW5z
KToKKyAgICAgICAgVGhlIHB1cnBvc2Ugb2YgdGhpcyB2aXJ0dWFsIGZ1bmN0aW9uIGFsbG93cyBk
ZWNlbmRhbnRzIHRvIHVzZSB0aGVpciBvd24gZmFzdCBjaGVja3MuCisgICAgICAgIChXZWJDb3Jl
OjpSZW5kZXJTVkdTaGFwZTo6ZmlsbENvbnRhaW5zKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRl
clNWR1NoYXBlOjpzdHJva2VDb250YWlucyk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJTVkdT
aGFwZTo6bGF5b3V0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclNWR1NoYXBlOjpzaG91bGRT
dHJva2VaZXJvTGVuZ3RoU3VicGF0aCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJTVkdTaGFw
ZTo6emVyb0xlbmd0aFN1YnBhdGhSZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclNWR1No
YXBlOjpzZXR1cFNxdWFyZUNhcFBhdGgpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU1ZHU2hh
cGU6OnNldHVwTm9uU2NhbGluZ1N0cm9rZVBhdGgpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVy
U1ZHU2hhcGU6OmZpbGxBbmRTdHJva2VQYXRoKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclNW
R1NoYXBlOjpwYWludCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJTVkdTaGFwZTo6YWRkRm9j
dXNSaW5nUmVjdHMpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU1ZHU2hhcGU6Om5vZGVBdEZs
b2F0UG9pbnQpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU1ZHU2hhcGU6OmNhbGN1bGF0ZU1h
cmtlckJvdW5kc0lmTmVlZGVkKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclNWR1NoYXBlOjp1
cGRhdGVDYWNoZWRCb3VuZGFyaWVzKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclNWR1NoYXBl
OjpzdHJva2VXaWR0aCk6CisgICAgICAgICogcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdTaGFwZS5o
OiBDb3BpZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1BhdGgu
aC4KKyAgICAgICAgKFdlYkNvcmU6OkJvdW5kaW5nUmVjdFN0cm9rZVN0eWxlQXBwbGllcjo6Qm91
bmRpbmdSZWN0U3Ryb2tlU3R5bGVBcHBsaWVyKToKKyAgICAgICAgKFdlYkNvcmU6OkJvdW5kaW5n
UmVjdFN0cm9rZVN0eWxlQXBwbGllcjo6c3Ryb2tlU3R5bGUpOgorICAgICAgICAoV2ViQ29yZTo6
UmVuZGVyU1ZHU2hhcGU6OnNldE5lZWRzU2hhcGVVcGRhdGUpOgorICAgICAgICAoV2ViQ29yZTo6
UmVuZGVyU1ZHU2hhcGU6OnNldE5lZWRzQm91bmRhcmllc1VwZGF0ZSk6CisgICAgICAgIChXZWJD
b3JlOjpSZW5kZXJTVkdTaGFwZTo6c2V0TmVlZHNUcmFuc2Zvcm1VcGRhdGUpOgorICAgICAgICAo
V2ViQ29yZTo6UmVuZGVyU1ZHU2hhcGU6OmlzUGFpbnRpbmdGYWxsYmFjayk6CisgICAgICAgIChX
ZWJDb3JlOjpSZW5kZXJTVkdTaGFwZTo6cGF0aCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJT
VkdTaGFwZTo6c2V0SXNQYWludGluZ0ZhbGxiYWNrKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRl
clNWR1NoYXBlOjpzZXRTdHJva2VBbmRNYXJrZXJCb3VuZGluZ0JveCk6CisgICAgICAgIChXZWJD
b3JlOjpSZW5kZXJTVkdTaGFwZTo6aGFzUGF0aCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJT
VkdTaGFwZTo6cmVwYWludFJlY3RJbkxvY2FsQ29vcmRpbmF0ZXMpOgorICAgICAgICAoV2ViQ29y
ZTo6UmVuZGVyU1ZHU2hhcGU6OmxvY2FsVG9QYXJlbnRUcmFuc2Zvcm0pOgorICAgICAgICAoV2Vi
Q29yZTo6UmVuZGVyU1ZHU2hhcGU6OmxvY2FsVHJhbnNmb3JtKToKKyAgICAgICAgKFdlYkNvcmU6
OlJlbmRlclNWR1NoYXBlOjppc1NWR1NoYXBlKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclNW
R1NoYXBlOjpyZW5kZXJOYW1lKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclNWR1NoYXBlOjpp
c1JvdW5kZWRSZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclNWR1NoYXBlOjppbmZsYXRl
V2l0aE1hcmtlckJvdW5kcyk6CisgICAgICAgIChXZWJDb3JlOjp0b1JlbmRlclNWR1NoYXBlKToK
KyAgICAgICAgKiByZW5kZXJpbmcvc3ZnL1NWR0lubGluZVRleHRCb3guY3BwOgorICAgICAgICAo
V2ViQ29yZTo6U1ZHSW5saW5lVGV4dEJveDo6cmVsZWFzZVBhaW50aW5nUmVzb3VyY2UpOgorICAg
ICAgICAqIHJlbmRlcmluZy9zdmcvU1ZHUmVuZGVyU3VwcG9ydC5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpTVkdSZW5kZXJTdXBwb3J0OjpmaW5pc2hSZW5kZXJTVkdDb250ZW50KToKKyAgICAgICAg
KFdlYkNvcmU6OlNWR1JlbmRlclN1cHBvcnQ6OmxheW91dENoaWxkcmVuKToKKyAgICAgICAgKiBy
ZW5kZXJpbmcvc3ZnL1NWR1JlbmRlclRyZWVBc1RleHQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
d3JpdGVTdHlsZSk6CisgICAgICAgIChXZWJDb3JlOjpvcGVyYXRvcjw8KToKKyAgICAgICAgKFdl
YkNvcmU6OndyaXRlKToKKyAgICAgICAgKiByZW5kZXJpbmcvc3ZnL1NWR1JlbmRlclRyZWVBc1Rl
eHQuaDoKKyAgICAgICAgKiByZW5kZXJpbmcvc3ZnL1NWR1RleHRSdW5SZW5kZXJpbmdDb250ZXh0
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR1RleHRSdW5SZW5kZXJpbmdDb250ZXh0OjpkcmF3
U1ZHR2x5cGhzKToKKyAgICAgICAgKiBzdmcvU1ZHQ2lyY2xlRWxlbWVudC5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpTVkdDaXJjbGVFbGVtZW50OjpzdmdBdHRyaWJ1dGVDaGFuZ2VkKToKKyAgICAg
ICAgKiBzdmcvU1ZHRWxsaXBzZUVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U1ZHRWxs
aXBzZUVsZW1lbnQ6OnN2Z0F0dHJpYnV0ZUNoYW5nZWQpOgorICAgICAgICAqIHN2Zy9TVkdMaW5l
RWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTVkdMaW5lRWxlbWVudDo6c3ZnQXR0cmli
dXRlQ2hhbmdlZCk6CisgICAgICAgICogc3ZnL1NWR1BhdGhFbGVtZW50LmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OlNWR1BhdGhFbGVtZW50OjpzdmdBdHRyaWJ1dGVDaGFuZ2VkKToKKyAgICAgICAg
KFdlYkNvcmU6OlNWR1BhdGhFbGVtZW50OjpwYXRoU2VnTGlzdENoYW5nZWQpOgorICAgICAgICAo
V2ViQ29yZTo6U1ZHUGF0aEVsZW1lbnQ6OmNyZWF0ZVJlbmRlcmVyKToKKyAgICAgICAgKiBzdmcv
U1ZHUGF0aEVsZW1lbnQuaDoKKyAgICAgICAgKiBzdmcvU1ZHUG9seUVsZW1lbnQuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6U1ZHUG9seUVsZW1lbnQ6OnN2Z0F0dHJpYnV0ZUNoYW5nZWQpOgorICAg
ICAgICAqIHN2Zy9TVkdSZWN0RWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTVkdSZWN0
RWxlbWVudDo6c3ZnQXR0cmlidXRlQ2hhbmdlZCk6CisgICAgICAgIChXZWJDb3JlOjpTVkdSZWN0
RWxlbWVudDo6Y3JlYXRlUmVuZGVyZXIpOgorICAgICAgICAqIHN2Zy9TVkdSZWN0RWxlbWVudC5o
OgorCiAyMDExLTExLTE4ICBJYWluIE1lcnJpY2sgIDxodXNreUBnb29nbGUuY29tPgogCiAgICAg
ICAgIFtjaHJvbWl1bV0gUGFzcyBzY3JlZW4gcmVmcmVzaCByYXRlIGludG8gY29tcG9zaXRvci4K
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0dOVW1ha2VmaWxlLmxpc3QuYW0gYi9Tb3VyY2Uv
V2ViQ29yZS9HTlVtYWtlZmlsZS5saXN0LmFtCmluZGV4IGQxODk4NTcuLmIyZDhkYzEgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL0dOVW1ha2VmaWxlLmxpc3QuYW0KKysrIGIvU291cmNlL1dl
YkNvcmUvR05VbWFrZWZpbGUubGlzdC5hbQpAQCAtMzMyMiw2ICszMzIyLDggQEAgd2ViY29yZV9z
b3VyY2VzICs9IFwKIAlTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR01vZGVs
T2JqZWN0LmggXAogCVNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUGF0aC5j
cHAgXAogCVNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUGF0aC5oIFwKKwlT
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1JlY3QuY3BwIFwKKwlTb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1JlY3QuaCBcCiAJU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJjZUNsaXBwZXIuY3BwIFwKIAlTb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291cmNlQ2xpcHBlci5oIFwKIAlTb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291cmNlQ29udGFpbmVyLmNwcCBcCkBA
IC0zMzUwLDYgKzMzNTIsOCBAQCB3ZWJjb3JlX3NvdXJjZXMgKz0gXAogCVNvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUm9vdC5oIFwKIAlTb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvc3ZnL1JlbmRlclNWR1NoYWRvd1RyZWVSb290Q29udGFpbmVyLmNwcCBcCiAJU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdTaGFkb3dUcmVlUm9vdENvbnRhaW5lci5oIFwK
KwlTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1NoYXBlLmNwcCBcCisJU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdTaGFwZS5oIFwKIAlTb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1RTcGFuLmNwcCBcCiAJU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdUU3Bhbi5oIFwKIAlTb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvc3ZnL1JlbmRlclNWR1RleHQuY3BwIFwKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1Rh
cmdldC5wcmkgYi9Tb3VyY2UvV2ViQ29yZS9UYXJnZXQucHJpCmluZGV4IDQwNzE2MWIuLmI2Yjc1
MTUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1RhcmdldC5wcmkKKysrIGIvU291cmNlL1dl
YkNvcmUvVGFyZ2V0LnByaQpAQCAtMjQwMCw2ICsyNDAwLDcgQEAgSEVBREVSUyArPSBcCiAgICAg
cmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdJbmxpbmVUZXh0LmggXAogICAgIHJlbmRlcmluZy9zdmcv
UmVuZGVyU1ZHTW9kZWxPYmplY3QuaCBcCiAgICAgcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdQYXRo
LmggXAorICAgIHJlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVjdC5oIFwKICAgICByZW5kZXJpbmcv
c3ZnL1JlbmRlclNWR1Jlc291cmNlLmggXAogICAgIHJlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVz
b3VyY2VDbGlwcGVyLmggXAogICAgIHJlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VDb250
YWluZXIuaCBcCkBAIC0yNDE0LDYgKzI0MTUsNyBAQCBIRUFERVJTICs9IFwKICAgICByZW5kZXJp
bmcvc3ZnL1JlbmRlclNWR1Jlc291cmNlU29saWRDb2xvci5oIFwKICAgICByZW5kZXJpbmcvc3Zn
L1JlbmRlclNWR1Jvb3QuaCBcCiAgICAgcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdTaGFkb3dUcmVl
Um9vdENvbnRhaW5lci5oIFwKKyAgICByZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1NoYXBlLmggXAog
ICAgIHJlbmRlcmluZy9zdmcvUmVuZGVyU1ZHVFNwYW4uaCBcCiAgICAgcmVuZGVyaW5nL3N2Zy9S
ZW5kZXJTVkdUZXh0LmggXAogICAgIHJlbmRlcmluZy9zdmcvUmVuZGVyU1ZHVGV4dFBhdGguaCBc
CkBAIC0zMzI0LDYgKzMzMjYsOCBAQCBjb250YWlucyhERUZJTkVTLCBFTkFCTEVfU1ZHPTEpIHsK
ICAgICAgICAgcmVuZGVyaW5nL3N0eWxlL1NWR1JlbmRlclN0eWxlRGVmcy5jcHAgXAogICAgICAg
ICByZW5kZXJpbmcvUG9pbnRlckV2ZW50c0hpdFJ1bGVzLmNwcCBcCiAgICAgICAgIHJlbmRlcmlu
Zy9zdmcvUmVuZGVyU1ZHUGF0aC5jcHAgXAorICAgICAgICByZW5kZXJpbmcvc3ZnL1JlbmRlclNW
R1JlY3QuY3BwIFwKKyAgICAgICAgcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdTaGFwZS5jcHAgXAog
ICAgICAgICBzdmcvYW5pbWF0aW9uL1NNSUxUaW1lLmNwcCBcCiAgICAgICAgIHN2Zy9hbmltYXRp
b24vU01JTFRpbWVDb250YWluZXIuY3BwIFwKICAgICAgICAgc3ZnL2FuaW1hdGlvbi9TVkdTTUlM
RWxlbWVudC5jcHAgXApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBpIGIv
U291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBpCmluZGV4IDg4ZDQ1NmMuLjVjM2IyZTEgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwaQorKysgYi9Tb3VyY2UvV2ViQ29yZS9X
ZWJDb3JlLmd5cGkKQEAgLTU4MjgsNiArNTgyOCw4IEBACiAgICAgICAgICAgICAncmVuZGVyaW5n
L3N2Zy9SZW5kZXJTVkdNb2RlbE9iamVjdC5oJywKICAgICAgICAgICAgICdyZW5kZXJpbmcvc3Zn
L1JlbmRlclNWR1BhdGguY3BwJywKICAgICAgICAgICAgICdyZW5kZXJpbmcvc3ZnL1JlbmRlclNW
R1BhdGguaCcsCisgICAgICAgICAgICAncmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZWN0LmNwcCcs
CisgICAgICAgICAgICAncmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZWN0LmgnLAogICAgICAgICAg
ICAgJ3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2UuY3BwJywKICAgICAgICAgICAgICdy
ZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291cmNlLmgnLAogICAgICAgICAgICAgJ3JlbmRlcmlu
Zy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VDbGlwcGVyLmNwcCcsCkBAIC01ODU2LDYgKzU4NTgsOCBA
QAogICAgICAgICAgICAgJ3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUm9vdC5oJywKICAgICAgICAg
ICAgICdyZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1NoYWRvd1RyZWVSb290Q29udGFpbmVyLmNwcCcs
CiAgICAgICAgICAgICAncmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdTaGFkb3dUcmVlUm9vdENvbnRh
aW5lci5oJywKKyAgICAgICAgICAgICdyZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1NoYXBlLmNwcCcs
CisgICAgICAgICAgICAncmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdTaGFwZS5oJywKICAgICAgICAg
ICAgICdyZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1RTcGFuLmNwcCcsCiAgICAgICAgICAgICAncmVu
ZGVyaW5nL3N2Zy9SZW5kZXJTVkdUU3Bhbi5oJywKICAgICAgICAgICAgICdyZW5kZXJpbmcvc3Zn
L1JlbmRlclNWR1RleHQuY3BwJywKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUu
dmNwcm9qL1dlYkNvcmUudmNwcm9qIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS52Y3Byb2ovV2Vi
Q29yZS52Y3Byb2oKaW5kZXggYzRjODE4ZS4uNzU5NWY3OSAxMDA3NTUKLS0tIGEvU291cmNlL1dl
YkNvcmUvV2ViQ29yZS52Y3Byb2ovV2ViQ29yZS52Y3Byb2oKKysrIGIvU291cmNlL1dlYkNvcmUv
V2ViQ29yZS52Y3Byb2ovV2ViQ29yZS52Y3Byb2oKQEAgLTQxNDYzLDYgKzQxNDYzLDExOCBAQAog
CQkJCQk+CiAJCQkJPC9GaWxlPgogCQkJCTxGaWxlCisJCQkJCVJlbGF0aXZlUGF0aD0iLi5ccmVu
ZGVyaW5nXHN2Z1xSZW5kZXJTVkdSZWN0LmNwcCIKKwkJCQkJPgorCQkJCQk8RmlsZUNvbmZpZ3Vy
YXRpb24KKwkJCQkJCU5hbWU9IkRlYnVnfFdpbjMyIgorCQkJCQkJRXhjbHVkZWRGcm9tQnVpbGQ9
InRydWUiCisJCQkJCQk+CisJCQkJCQk8VG9vbAorCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRv
b2wiCisJCQkJCQkvPgorCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPgorCQkJCQk8RmlsZUNvbmZp
Z3VyYXRpb24KKwkJCQkJCU5hbWU9IlJlbGVhc2V8V2luMzIiCisJCQkJCQlFeGNsdWRlZEZyb21C
dWlsZD0idHJ1ZSIKKwkJCQkJCT4KKwkJCQkJCTxUb29sCisJCQkJCQkJTmFtZT0iVkNDTENvbXBp
bGVyVG9vbCIKKwkJCQkJCS8+CisJCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+CisJCQkJCTxGaWxl
Q29uZmlndXJhdGlvbgorCQkJCQkJTmFtZT0iRGVidWdfQ2Fpcm9fQ0ZMaXRlfFdpbjMyIgorCQkJ
CQkJRXhjbHVkZWRGcm9tQnVpbGQ9InRydWUiCisJCQkJCQk+CisJCQkJCQk8VG9vbAorCQkJCQkJ
CU5hbWU9IlZDQ0xDb21waWxlclRvb2wiCisJCQkJCQkvPgorCQkJCQk8L0ZpbGVDb25maWd1cmF0
aW9uPgorCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24KKwkJCQkJCU5hbWU9IlJlbGVhc2VfQ2Fpcm9f
Q0ZMaXRlfFdpbjMyIgorCQkJCQkJRXhjbHVkZWRGcm9tQnVpbGQ9InRydWUiCisJCQkJCQk+CisJ
CQkJCQk8VG9vbAorCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiCisJCQkJCQkvPgorCQkJ
CQk8L0ZpbGVDb25maWd1cmF0aW9uPgorCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24KKwkJCQkJCU5h
bWU9IkRlYnVnX0FsbHxXaW4zMiIKKwkJCQkJCUV4Y2x1ZGVkRnJvbUJ1aWxkPSJ0cnVlIgorCQkJ
CQkJPgorCQkJCQkJPFRvb2wKKwkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIgorCQkJCQkJ
Lz4KKwkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4KKwkJCQkJPEZpbGVDb25maWd1cmF0aW9uCisJ
CQkJCQlOYW1lPSJQcm9kdWN0aW9ufFdpbjMyIgorCQkJCQkJRXhjbHVkZWRGcm9tQnVpbGQ9InRy
dWUiCisJCQkJCQk+CisJCQkJCQk8VG9vbAorCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wi
CisJCQkJCQkvPgorCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPgorCQkJCTwvRmlsZT4KKwkJCQk8
RmlsZQorCQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXHJlbmRlcmluZ1xzdmdcUmVuZGVyU1ZHUmVjdC5o
IgorCQkJCQk+CisJCQkJPC9GaWxlPgorCQkJCTxGaWxlCisJCQkJCVJlbGF0aXZlUGF0aD0iLi5c
cmVuZGVyaW5nXHN2Z1xSZW5kZXJTVkdTaGFwZS5jcHAiCisJCQkJCT4KKwkJCQkJPEZpbGVDb25m
aWd1cmF0aW9uCisJCQkJCQlOYW1lPSJEZWJ1Z3xXaW4zMiIKKwkJCQkJCUV4Y2x1ZGVkRnJvbUJ1
aWxkPSJ0cnVlIgorCQkJCQkJPgorCQkJCQkJPFRvb2wKKwkJCQkJCQlOYW1lPSJWQ0NMQ29tcGls
ZXJUb29sIgorCQkJCQkJLz4KKwkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4KKwkJCQkJPEZpbGVD
b25maWd1cmF0aW9uCisJCQkJCQlOYW1lPSJSZWxlYXNlfFdpbjMyIgorCQkJCQkJRXhjbHVkZWRG
cm9tQnVpbGQ9InRydWUiCisJCQkJCQk+CisJCQkJCQk8VG9vbAorCQkJCQkJCU5hbWU9IlZDQ0xD
b21waWxlclRvb2wiCisJCQkJCQkvPgorCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPgorCQkJCQk8
RmlsZUNvbmZpZ3VyYXRpb24KKwkJCQkJCU5hbWU9IkRlYnVnX0NhaXJvX0NGTGl0ZXxXaW4zMiIK
KwkJCQkJCUV4Y2x1ZGVkRnJvbUJ1aWxkPSJ0cnVlIgorCQkJCQkJPgorCQkJCQkJPFRvb2wKKwkJ
CQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIgorCQkJCQkJLz4KKwkJCQkJPC9GaWxlQ29uZmln
dXJhdGlvbj4KKwkJCQkJPEZpbGVDb25maWd1cmF0aW9uCisJCQkJCQlOYW1lPSJSZWxlYXNlX0Nh
aXJvX0NGTGl0ZXxXaW4zMiIKKwkJCQkJCUV4Y2x1ZGVkRnJvbUJ1aWxkPSJ0cnVlIgorCQkJCQkJ
PgorCQkJCQkJPFRvb2wKKwkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIgorCQkJCQkJLz4K
KwkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4KKwkJCQkJPEZpbGVDb25maWd1cmF0aW9uCisJCQkJ
CQlOYW1lPSJEZWJ1Z19BbGx8V2luMzIiCisJCQkJCQlFeGNsdWRlZEZyb21CdWlsZD0idHJ1ZSIK
KwkJCQkJCT4KKwkJCQkJCTxUb29sCisJCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIKKwkJ
CQkJCS8+CisJCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+CisJCQkJCTxGaWxlQ29uZmlndXJhdGlv
bgorCQkJCQkJTmFtZT0iUHJvZHVjdGlvbnxXaW4zMiIKKwkJCQkJCUV4Y2x1ZGVkRnJvbUJ1aWxk
PSJ0cnVlIgorCQkJCQkJPgorCQkJCQkJPFRvb2wKKwkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJU
b29sIgorCQkJCQkJLz4KKwkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4KKwkJCQk8L0ZpbGU+CisJ
CQkJPEZpbGUKKwkJCQkJUmVsYXRpdmVQYXRoPSIuLlxyZW5kZXJpbmdcc3ZnXFJlbmRlclNWR1No
YXBlLmgiCisJCQkJCT4KKwkJCQk8L0ZpbGU+CisJCQkJPEZpbGUKIAkJCQkJUmVsYXRpdmVQYXRo
PSIuLlxyZW5kZXJpbmdcc3ZnXFJlbmRlclNWR1RleHQuY3BwIgogCQkJCQk+CiAJCQkJCTxGaWxl
Q29uZmlndXJhdGlvbgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXBy
b2ovcHJvamVjdC5wYnhwcm9qIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJv
amVjdC5wYnhwcm9qCmluZGV4IGVkYWQ1MWYuLjQ2ZjMzMWQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKQEAgLTEwNTkwLDYgKzEwNTkw
LDEwIEBACiAJCUEwRUUwREYyMTQ0RjgyNTUwMEY4MEIwRCAvKiBXZWJHTERlYnVnUmVuZGVyZXJJ
bmZvLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IFdlYkdMRGVidWdSZW5kZXJl
ckluZm8uaDsgcGF0aCA9IGNhbnZhcy9XZWJHTERlYnVnUmVuZGVyZXJJbmZvLmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCUEwRUUwREYzMTQ0RjgyNTUwMEY4MEIwRCAvKiBXZWJHTERl
YnVnU2hhZGVycy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBXZWJH
TERlYnVnU2hhZGVycy5jcHA7IHBhdGggPSBjYW52YXMvV2ViR0xEZWJ1Z1NoYWRlcnMuY3BwOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlBMEVFMERGNDE0NEY4MjU1MDBGODBCMEQgLyog
V2ViR0xEZWJ1Z1NoYWRlcnMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gV2Vi
R0xEZWJ1Z1NoYWRlcnMuaDsgcGF0aCA9IGNhbnZhcy9XZWJHTERlYnVnU2hhZGVycy5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OworCQlBMTA1MDY1RTE0Njk2ODY5MDBGNjM4MTUgLyogUmVu
ZGVyU1ZHU2hhcGUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gUmVu
ZGVyU1ZHU2hhcGUuY3BwOyBwYXRoID0gcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdTaGFwZS5jcHA7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUExMDUwNjYwMTQ2OTZDMDUwMEY2MzgxNSAv
KiBSZW5kZXJTVkdSZWN0LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9
IFJlbmRlclNWR1JlY3QuY3BwOyBwYXRoID0gcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZWN0LmNw
cDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQTEwNTA2NjIxNDY5NkM0QjAwRjYzODE1
IC8qIFJlbmRlclNWR1NoYXBlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IFJl
bmRlclNWR1NoYXBlLmg7IHBhdGggPSByZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1NoYXBlLmg7IHNv
dXJjZVRyZWUgPSBTT1VSQ0VfUk9PVDsgfTsKKwkJQTEwNTA2NjMxNDY5NkM3MTAwRjYzODE1IC8q
IFJlbmRlclNWR1JlY3QuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gUmVuZGVy
U1ZHUmVjdC5oOyBwYXRoID0gcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZWN0Lmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCUExMjBBQ0EwMTNGOTk4MzcwMEZFNEFDNyAvKiBMYXlvdXRS
ZXBhaW50ZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gTGF5b3V0UmVwYWlu
dGVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUExMjBBQ0ExMTNGOTk4NDYwMEZF
NEFDNyAvKiBMYXlvdXRSZXBhaW50ZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3Bw
OyBwYXRoID0gTGF5b3V0UmVwYWludGVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJQTEzNkEwMEExMTM0REJEMjAwQ0M4RDUwIC8qIFhNTEh0dHBSZXF1ZXN0UHJvZ3Jlc3NFdmVu
dFRocm90dGxlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFhNTEh0
dHBSZXF1ZXN0UHJvZ3Jlc3NFdmVudFRocm90dGxlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKQEAgLTEzODg0LDYgKzEzODg4LDkgQEAKIAkJMDg2N0Q2OTFGRTg0MDI4RkMwMkFBQzA3
IC8qIFdlYktpdCAqLyA9IHsKIAkJCWlzYSA9IFBCWEdyb3VwOwogCQkJY2hpbGRyZW4gPSAoCisJ
CQkJQTEwNTA2NjAxNDY5NkMwNTAwRjYzODE1IC8qIFJlbmRlclNWR1JlY3QuY3BwICovLAorCQkJ
CUExMDUwNjYzMTQ2OTZDNzEwMEY2MzgxNSAvKiBSZW5kZXJTVkdSZWN0LmggKi8sCisJCQkJQTEw
NTA2NUUxNDY5Njg2OTAwRjYzODE1IC8qIFJlbmRlclNWR1NoYXBlLmNwcCAqLywKIAkJCQk2NUM5
N0FGMjA4RUE5MDg4MDBBQ0QyNzMgLyogY29uZmlnLmggKi8sCiAJCQkJRURFQzk4MDIwQUVEN0Ux
NzAwNTkxMzdGIC8qIFdlYkNvcmVQcmVmaXguaCAqLywKIAkJCQk5MzA3MDYxMzA5RTBDQTgyMDBC
MTdGRTQgLyogRGVyaXZlZFNvdXJjZXMubWFrZSAqLywKQEAgLTIxNDkzLDYgKzIxNTAwLDcgQEAK
IAkJCQlGREEzRTk1NzEzNEE0OUVGMDA4RDRCNUEgLyogT2ZmbGluZUF1ZGlvRGVzdGluYXRpb25O
b2RlLmNwcCAqLywKIAkJCQlGREEzRTk1ODEzNEE0OUVGMDA4RDRCNUEgLyogT2ZmbGluZUF1ZGlv
RGVzdGluYXRpb25Ob2RlLmggKi8sCiAJCQkJRkQzMTVGRjExMkIwMjY3NjAwQzFBMzU5IC8qIFJl
YWx0aW1lQW5hbHlzZXIuY3BwICovLAorCQkJCUExMDUwNjYyMTQ2OTZDNEIwMEY2MzgxNSAvKiBS
ZW5kZXJTVkdTaGFwZS5oICovLAogCQkJCUZEMzE1RkYyMTJCMDI2NzYwMEMxQTM1OSAvKiBSZWFs
dGltZUFuYWx5c2VyLmggKi8sCiAJCQkJRkQzMTVGRjMxMkIwMjY3NjAwQzFBMzU5IC8qIFJlYWx0
aW1lQW5hbHlzZXJOb2RlLmNwcCAqLywKIAkJCQlGRDMxNUZGNDEyQjAyNjc2MDBDMUEzNTkgLyog
UmVhbHRpbWVBbmFseXNlck5vZGUuaCAqLywKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL0Zsb2F0UmVjdC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9GbG9hdFJlY3QuY3BwCmluZGV4IGI4NGE4OTIuLjZkNGEyMjAgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0Zsb2F0UmVjdC5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRmxvYXRSZWN0LmNwcApAQCAtNjgsNiArNjgs
MTMgQEAgYm9vbCBGbG9hdFJlY3Q6OmNvbnRhaW5zKGNvbnN0IEZsb2F0UmVjdCYgb3RoZXIpIGNv
bnN0CiAgICAgICAgICYmIHkoKSA8PSBvdGhlci55KCkgJiYgbWF4WSgpID49IG90aGVyLm1heFko
KTsKIH0KIAorYm9vbCBGbG9hdFJlY3Q6OmNvbnRhaW5zKGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50
LCBDb250YWluc01vZGUgY29udGFpbnNNb2RlKSBjb25zdAoreworICAgIGlmIChjb250YWluc01v
ZGUgPT0gSW5zaWRlT3JPblN0cm9rZSkKKyAgICAgICAgcmV0dXJuIGNvbnRhaW5zKHBvaW50Lngo
KSwgcG9pbnQueSgpKTsKKyAgICByZXR1cm4geCgpIDwgcG9pbnQueCgpICYmIG1heFgoKSA+IHBv
aW50LngoKSAmJiB5KCkgPCBwb2ludC55KCkgJiYgbWF4WSgpID4geSgpOworfQorCiB2b2lkIEZs
b2F0UmVjdDo6aW50ZXJzZWN0KGNvbnN0IEZsb2F0UmVjdCYgb3RoZXIpCiB7CiAgICAgZmxvYXQg
bCA9IG1heCh4KCksIG90aGVyLngoKSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9GbG9hdFJlY3QuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL0Zsb2F0UmVjdC5oCmluZGV4IDQyNDE3MTYuLjdkZTM0NmYgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0Zsb2F0UmVjdC5oCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL0Zsb2F0UmVjdC5oCkBAIC03MCw2ICs3MCwxMSBAQCBjbGFz
cyBJbnRQb2ludDsKIAogY2xhc3MgRmxvYXRSZWN0IHsKIHB1YmxpYzoKKyAgICBlbnVtIENvbnRh
aW5zTW9kZSB7CisgICAgICAgIEluc2lkZU9yT25TdHJva2UsCisgICAgICAgIEluc2lkZUJ1dE5v
dE9uU3Ryb2tlCisgICAgfTsKKwogICAgIEZsb2F0UmVjdCgpIHsgfQogICAgIEZsb2F0UmVjdChj
b25zdCBGbG9hdFBvaW50JiBsb2NhdGlvbiwgY29uc3QgRmxvYXRTaXplJiBzaXplKQogICAgICAg
ICA6IG1fbG9jYXRpb24obG9jYXRpb24pLCBtX3NpemUoc2l6ZSkgeyB9CkBAIC0xNDIsNiArMTQ3
LDcgQEAgcHVibGljOgogCiAgICAgYm9vbCBpbnRlcnNlY3RzKGNvbnN0IEZsb2F0UmVjdCYpIGNv
bnN0OwogICAgIGJvb2wgY29udGFpbnMoY29uc3QgRmxvYXRSZWN0JikgY29uc3Q7CisgICAgYm9v
bCBjb250YWlucyhjb25zdCBGbG9hdFBvaW50JiwgQ29udGFpbnNNb2RlID0gSW5zaWRlT3JPblN0
cm9rZSkgY29uc3Q7CiAKICAgICB2b2lkIGludGVyc2VjdChjb25zdCBGbG9hdFJlY3QmKTsKICAg
ICB2b2lkIHVuaXRlKGNvbnN0IEZsb2F0UmVjdCYpOwpAQCAtMTUxLDcgKzE1Nyw2IEBAIHB1Ymxp
YzoKICAgICAvLyBpcyByZWFsbHkgY2hlY2tpbmcgZm9yIGNvbnRhaW5tZW50IG9mIDF4MSByZWN0
LCBidXQgdGhhdCBkb2Vzbid0IG1ha2Ugc2Vuc2Ugd2l0aCBmbG9hdHMuCiAgICAgYm9vbCBjb250
YWlucyhmbG9hdCBweCwgZmxvYXQgcHkpIGNvbnN0CiAgICAgICAgIHsgcmV0dXJuIHB4ID49IHgo
KSAmJiBweCA8PSBtYXhYKCkgJiYgcHkgPj0geSgpICYmIHB5IDw9IG1heFkoKTsgfQotICAgIGJv
b2wgY29udGFpbnMoY29uc3QgRmxvYXRQb2ludCYgcG9pbnQpIGNvbnN0IHsgcmV0dXJuIGNvbnRh
aW5zKHBvaW50LngoKSwgcG9pbnQueSgpKTsgfQogCiAgICAgdm9pZCBpbmZsYXRlWChmbG9hdCBk
eCkgewogICAgICAgICBtX2xvY2F0aW9uLnNldFgobV9sb2NhdGlvbi54KCkgLSBkeCk7CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyT2JqZWN0LmggYi9Tb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyT2JqZWN0LmgKaW5kZXggYjk0MTE2ZS4uZDQwNjAxZCAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck9iamVjdC5oCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJPYmplY3QuaApAQCAtMzg5LDYgKzM4OSw4
IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIGJvb2wgaXNTVkdHcmFkaWVudFN0b3AoKSBjb25zdCB7
IHJldHVybiBmYWxzZTsgfQogICAgIHZpcnR1YWwgYm9vbCBpc1NWR0hpZGRlbkNvbnRhaW5lcigp
IGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CiAgICAgdmlydHVhbCBib29sIGlzU1ZHUGF0aCgpIGNv
bnN0IHsgcmV0dXJuIGZhbHNlOyB9CisgICAgdmlydHVhbCBib29sIGlzU1ZHUmVjdCgpIGNvbnN0
IHsgcmV0dXJuIGZhbHNlOyB9CisgICAgdmlydHVhbCBib29sIGlzU1ZHU2hhcGUoKSBjb25zdCB7
IHJldHVybiBmYWxzZTsgfQogICAgIHZpcnR1YWwgYm9vbCBpc1NWR1RleHQoKSBjb25zdCB7IHJl
dHVybiBmYWxzZTsgfQogICAgIHZpcnR1YWwgYm9vbCBpc1NWR1RleHRQYXRoKCkgY29uc3QgeyBy
ZXR1cm4gZmFsc2U7IH0KICAgICB2aXJ0dWFsIGJvb2wgaXNTVkdJbmxpbmUoKSBjb25zdCB7IHJl
dHVybiBmYWxzZTsgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
clRyZWVBc1RleHQuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRyZWVBc1Rl
eHQuY3BwCmluZGV4IGNiODY0MDIuLjA4ZTg5MDggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJUcmVlQXNUZXh0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVyVHJlZUFzVGV4dC5jcHAKQEAgLTUyNCw4ICs1MjQsOCBAQCBzdGF0aWMgdm9p
ZCB3cml0ZVRleHRSdW4oVGV4dFN0cmVhbSYgdHMsIGNvbnN0IFJlbmRlclRleHQmIG8sIGNvbnN0
IElubGluZVRleHRCbwogdm9pZCB3cml0ZShUZXh0U3RyZWFtJiB0cywgY29uc3QgUmVuZGVyT2Jq
ZWN0JiBvLCBpbnQgaW5kZW50LCBSZW5kZXJBc1RleHRCZWhhdmlvciBiZWhhdmlvcikKIHsKICNp
ZiBFTkFCTEUoU1ZHKQotICAgIGlmIChvLmlzU1ZHUGF0aCgpKSB7Ci0gICAgICAgIHdyaXRlKHRz
LCAqdG9SZW5kZXJTVkdQYXRoKCZvKSwgaW5kZW50KTsKKyAgICBpZiAoby5pc1NWR1NoYXBlKCkp
IHsKKyAgICAgICAgd3JpdGUodHMsICp0b1JlbmRlclNWR1NoYXBlKCZvKSwgaW5kZW50KTsKICAg
ICAgICAgcmV0dXJuOwogICAgIH0KICAgICBpZiAoby5pc1NWR0dyYWRpZW50U3RvcCgpKSB7CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR0FsbEluT25l
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHQWxsSW5PbmUuY3Bw
CmluZGV4IDM0MjQyODguLjhmZDNjNTEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9zdmcvUmVuZGVyU1ZHQWxsSW5PbmUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9zdmcvUmVuZGVyU1ZHQWxsSW5PbmUuY3BwCkBAIC0zNSw2ICszNSw3IEBACiAjaW5jbHVk
ZSAiUmVuZGVyU1ZHSW5saW5lVGV4dC5jcHAiCiAjaW5jbHVkZSAiUmVuZGVyU1ZHTW9kZWxPYmpl
Y3QuY3BwIgogI2luY2x1ZGUgIlJlbmRlclNWR1BhdGguY3BwIgorI2luY2x1ZGUgIlJlbmRlclNW
R1JlY3QuY3BwIgogI2luY2x1ZGUgIlJlbmRlclNWR1Jlc291cmNlLmNwcCIKICNpbmNsdWRlICJS
ZW5kZXJTVkdSZXNvdXJjZUNsaXBwZXIuY3BwIgogI2luY2x1ZGUgIlJlbmRlclNWR1Jlc291cmNl
Q29udGFpbmVyLmNwcCIKQEAgLTQ5LDYgKzUwLDcgQEAKICNpbmNsdWRlICJSZW5kZXJTVkdSZXNv
dXJjZVNvbGlkQ29sb3IuY3BwIgogI2luY2x1ZGUgIlJlbmRlclNWR1Jvb3QuY3BwIgogI2luY2x1
ZGUgIlJlbmRlclNWR1NoYWRvd1RyZWVSb290Q29udGFpbmVyLmNwcCIKKyNpbmNsdWRlICJSZW5k
ZXJTVkdTaGFwZS5jcHAiCiAjaW5jbHVkZSAiUmVuZGVyU1ZHVFNwYW4uY3BwIgogI2luY2x1ZGUg
IlJlbmRlclNWR1RleHQuY3BwIgogI2luY2x1ZGUgIlJlbmRlclNWR1RleHRQYXRoLmNwcCIKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHTW9kZWxPYmpl
Y3QuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdNb2RlbE9iamVj
dC5jcHAKaW5kZXggN2UwOWM3Ni4uYjcwZGVkMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdNb2RlbE9iamVjdC5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdNb2RlbE9iamVjdC5jcHAKQEAgLTE1NSw3ICsxNTUs
NyBAQCBzdGF0aWMgYm9vbCBpbnRlcnNlY3RzQWxsb3dpbmdFbXB0eShjb25zdCBGbG9hdFJlY3Qm
IHIsIGNvbnN0IEZsb2F0UmVjdCYgb3RoZXIpCiAvLyBpbWFnZSwgbGluZSwgcGF0aCwgcG9seWdv
biwgcG9seWxpbmUsIHJlY3QsIHRleHQgYW5kIHVzZS4KIHN0YXRpYyBib29sIGlzR3JhcGhpY3NF
bGVtZW50KFJlbmRlck9iamVjdCogcmVuZGVyZXIpCiB7Ci0gICAgcmV0dXJuIHJlbmRlcmVyLT5p
c1NWR1BhdGgoKSB8fCByZW5kZXJlci0+aXNTVkdUZXh0KCkgfHwgcmVuZGVyZXItPmlzU1ZHSW1h
Z2UoKSB8fCByZW5kZXJlci0+aXNTVkdTaGFkb3dUcmVlUm9vdENvbnRhaW5lcigpOworICAgIHJl
dHVybiByZW5kZXJlci0+aXNTVkdTaGFwZSgpIHx8IHJlbmRlcmVyLT5pc1NWR1RleHQoKSB8fCBy
ZW5kZXJlci0+aXNTVkdJbWFnZSgpIHx8IHJlbmRlcmVyLT5pc1NWR1NoYWRvd1RyZWVSb290Q29u
dGFpbmVyKCk7CiB9CiAKIGJvb2wgUmVuZGVyU1ZHTW9kZWxPYmplY3Q6OmNoZWNrSW50ZXJzZWN0
aW9uKFJlbmRlck9iamVjdCogcmVuZGVyZXIsIGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUGF0aC5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1BhdGguY3BwCm9sZCBtb2RlIDEw
MDY0NApuZXcgbW9kZSAxMDA3NTUKaW5kZXggM2VhYWQ5Ny4uZWRhZDQzOQotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1BhdGguY3BwCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUGF0aC5jcHAKQEAgLTYsNiArNiw4IEBACiAgKiBD
b3B5cmlnaHQgKEMpIDIwMDkgRGlyayBTY2h1bHplIDxrcml0QHdlYmtpdC5vcmc+CiAgKiBDb3B5
cmlnaHQgKEMpIFJlc2VhcmNoIEluIE1vdGlvbiBMaW1pdGVkIDIwMTAuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDkgSmVmZiBTY2hpbGxlciA8Y29kZWRyZWFkQGdt
YWlsLmNvbT4KKyAqIENvcHlyaWdodCAoQykgMjAxMSBSZW5hdGEgSG9kb3ZhbiA8cmVuaUB3ZWJr
aXQub3JnPgorICogQ29weXJpZ2h0IChDKSAyMDExIFVuaXZlcnNpdHkgb2YgU3plZ2VkCiAgKgog
ICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0
IGFuZC9vcgogICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkg
R2VuZXJhbCBQdWJsaWMKQEAgLTI4LDUyICszMCwxMyBAQAogI2lmIEVOQUJMRShTVkcpCiAjaW5j
bHVkZSAiUmVuZGVyU1ZHUGF0aC5oIgogCi0jaW5jbHVkZSAiRmxvYXRQb2ludC5oIgotI2luY2x1
ZGUgIkZsb2F0UXVhZC5oIgotI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgotI2luY2x1ZGUg
IkhpdFRlc3RSZXF1ZXN0LmgiCi0jaW5jbHVkZSAiTGF5b3V0UmVwYWludGVyLmgiCi0jaW5jbHVk
ZSAiUG9pbnRlckV2ZW50c0hpdFJ1bGVzLmgiCi0jaW5jbHVkZSAiUmVuZGVyU1ZHQ29udGFpbmVy
LmgiCi0jaW5jbHVkZSAiUmVuZGVyU1ZHUmVzb3VyY2VNYXJrZXIuaCIKLSNpbmNsdWRlICJSZW5k
ZXJTVkdSZXNvdXJjZVNvbGlkQ29sb3IuaCIKLSNpbmNsdWRlICJTVkdQYXRoRGF0YS5oIgotI2lu
Y2x1ZGUgIlNWR1JlbmRlclN1cHBvcnQuaCIKLSNpbmNsdWRlICJTVkdSZXNvdXJjZXMuaCIKLSNp
bmNsdWRlICJTVkdSZXNvdXJjZXNDYWNoZS5oIgorI2luY2x1ZGUgIlNWR1BhdGhFbGVtZW50Lmgi
CiAjaW5jbHVkZSAiU1ZHU3R5bGVkVHJhbnNmb3JtYWJsZUVsZW1lbnQuaCIKLSNpbmNsdWRlICJT
VkdUcmFuc2Zvcm1MaXN0LmgiCi0jaW5jbHVkZSAiU1ZHVVJJUmVmZXJlbmNlLmgiCi0jaW5jbHVk
ZSAiU3Ryb2tlU3R5bGVBcHBsaWVyLmgiCi0jaW5jbHVkZSA8d3RmL01hdGhFeHRyYXMuaD4KIAog
bmFtZXNwYWNlIFdlYkNvcmUgewogCi1jbGFzcyBCb3VuZGluZ1JlY3RTdHJva2VTdHlsZUFwcGxp
ZXIgOiBwdWJsaWMgU3Ryb2tlU3R5bGVBcHBsaWVyIHsKLXB1YmxpYzoKLSAgICBCb3VuZGluZ1Jl
Y3RTdHJva2VTdHlsZUFwcGxpZXIoY29uc3QgUmVuZGVyT2JqZWN0KiBvYmplY3QsIFJlbmRlclN0
eWxlKiBzdHlsZSkKLSAgICAgICAgOiBtX29iamVjdChvYmplY3QpCi0gICAgICAgICwgbV9zdHls
ZShzdHlsZSkKLSAgICB7Ci0gICAgICAgIEFTU0VSVChzdHlsZSk7Ci0gICAgICAgIEFTU0VSVChv
YmplY3QpOwotICAgIH0KLQotICAgIHZvaWQgc3Ryb2tlU3R5bGUoR3JhcGhpY3NDb250ZXh0KiBn
YykKLSAgICB7Ci0gICAgICAgIFNWR1JlbmRlclN1cHBvcnQ6OmFwcGx5U3Ryb2tlU3R5bGVUb0Nv
bnRleHQoZ2MsIG1fc3R5bGUsIG1fb2JqZWN0KTsKLSAgICB9Ci0KLXByaXZhdGU6Ci0gICAgY29u
c3QgUmVuZGVyT2JqZWN0KiBtX29iamVjdDsKLSAgICBSZW5kZXJTdHlsZSogbV9zdHlsZTsKLX07
Ci0KIFJlbmRlclNWR1BhdGg6OlJlbmRlclNWR1BhdGgoU1ZHU3R5bGVkVHJhbnNmb3JtYWJsZUVs
ZW1lbnQqIG5vZGUpCi0gICAgOiBSZW5kZXJTVkdNb2RlbE9iamVjdChub2RlKQotICAgICwgbV9u
ZWVkc0JvdW5kYXJpZXNVcGRhdGUoZmFsc2UpIC8vIGRlZmF1bHQgaXMgZmFsc2UsIHRoZSBjYWNo
ZWQgcmVjdHMgYXJlIGVtcHR5IGZyb20gdGhlIGJlZ2lubmluZwotICAgICwgbV9uZWVkc1BhdGhV
cGRhdGUodHJ1ZSkgLy8gZGVmYXVsdCBpcyB0cnVlLCBzbyB3ZSBncmFiIGEgUGF0aCBvYmplY3Qg
b25jZSBmcm9tIFNWR1N0eWxlZFRyYW5zZm9ybWFibGVFbGVtZW50Ci0gICAgLCBtX25lZWRzVHJh
bnNmb3JtVXBkYXRlKHRydWUpIC8vIGRlZmF1bHQgaXMgdHJ1ZSwgc28gd2UgZ3JhYiBhIEFmZmlu
ZVRyYW5zZm9ybSBvYmplY3Qgb25jZSBmcm9tIFNWR1N0eWxlZFRyYW5zZm9ybWFibGVFbGVtZW50
CisgICAgOiBSZW5kZXJTVkdTaGFwZShub2RlKQogewogfQogCkBAIC04MSwzMTggKzQ0LDYgQEAg
UmVuZGVyU1ZHUGF0aDo6flJlbmRlclNWR1BhdGgoKQogewogfQogCi1ib29sIFJlbmRlclNWR1Bh
dGg6OmZpbGxDb250YWlucyhjb25zdCBGbG9hdFBvaW50JiBwb2ludCwgYm9vbCByZXF1aXJlc0Zp
bGwsIFdpbmRSdWxlIGZpbGxSdWxlKQotewotICAgIGlmICghbV9maWxsQm91bmRpbmdCb3guY29u
dGFpbnMocG9pbnQpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBDb2xvciBmYWxsYmFj
a0NvbG9yOwotICAgIGlmIChyZXF1aXJlc0ZpbGwgJiYgIVJlbmRlclNWR1Jlc291cmNlOjpmaWxs
UGFpbnRpbmdSZXNvdXJjZSh0aGlzLCBzdHlsZSgpLCBmYWxsYmFja0NvbG9yKSkKLSAgICAgICAg
cmV0dXJuIGZhbHNlOwotCi0gICAgcmV0dXJuIG1fcGF0aC5jb250YWlucyhwb2ludCwgZmlsbFJ1
bGUpOwotfQotCi1ib29sIFJlbmRlclNWR1BhdGg6OnN0cm9rZUNvbnRhaW5zKGNvbnN0IEZsb2F0
UG9pbnQmIHBvaW50LCBib29sIHJlcXVpcmVzU3Ryb2tlKQotewotICAgIGlmICghbV9zdHJva2VB
bmRNYXJrZXJCb3VuZGluZ0JveC5jb250YWlucyhwb2ludCkpCi0gICAgICAgIHJldHVybiBmYWxz
ZTsKLQotICAgIENvbG9yIGZhbGxiYWNrQ29sb3I7Ci0gICAgaWYgKHJlcXVpcmVzU3Ryb2tlICYm
ICFSZW5kZXJTVkdSZXNvdXJjZTo6c3Ryb2tlUGFpbnRpbmdSZXNvdXJjZSh0aGlzLCBzdHlsZSgp
LCBmYWxsYmFja0NvbG9yKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgaWYgKHNob3Vs
ZFN0cm9rZVplcm9MZW5ndGhTdWJwYXRoKCkpCi0gICAgICAgIHJldHVybiB6ZXJvTGVuZ3RoU3Vi
cGF0aFJlY3QoKS5jb250YWlucyhwb2ludCk7Ci0KLSAgICBCb3VuZGluZ1JlY3RTdHJva2VTdHls
ZUFwcGxpZXIgc3Ryb2tlU3R5bGUodGhpcywgc3R5bGUoKSk7Ci0gICAgcmV0dXJuIG1fcGF0aC5z
dHJva2VDb250YWlucygmc3Ryb2tlU3R5bGUsIHBvaW50KTsKLX0KLQotdm9pZCBSZW5kZXJTVkdQ
YXRoOjpsYXlvdXQoKQotewotICAgIExheW91dFJlcGFpbnRlciByZXBhaW50ZXIoKnRoaXMsIGNo
ZWNrRm9yUmVwYWludER1cmluZ0xheW91dCgpICYmIHNlbGZOZWVkc0xheW91dCgpKTsKLSAgICBT
VkdTdHlsZWRUcmFuc2Zvcm1hYmxlRWxlbWVudCogZWxlbWVudCA9IHN0YXRpY19jYXN0PFNWR1N0
eWxlZFRyYW5zZm9ybWFibGVFbGVtZW50Kj4obm9kZSgpKTsKLQotICAgIGJvb2wgdXBkYXRlQ2Fj
aGVkQm91bmRhcmllc0luUGFyZW50cyA9IGZhbHNlOwotCi0gICAgYm9vbCBuZWVkc1BhdGhVcGRh
dGUgPSBtX25lZWRzUGF0aFVwZGF0ZTsKLSAgICBpZiAobmVlZHNQYXRoVXBkYXRlKSB7Ci0gICAg
ICAgIG1fcGF0aC5jbGVhcigpOwotICAgICAgICB1cGRhdGVQYXRoRnJvbUdyYXBoaWNzRWxlbWVu
dChlbGVtZW50LCBtX3BhdGgpOwotICAgICAgICBtX25lZWRzUGF0aFVwZGF0ZSA9IGZhbHNlOwot
ICAgICAgICB1cGRhdGVDYWNoZWRCb3VuZGFyaWVzSW5QYXJlbnRzID0gdHJ1ZTsKLSAgICB9Ci0K
LSAgICBpZiAobV9uZWVkc1RyYW5zZm9ybVVwZGF0ZSkgewotICAgICAgICBtX2xvY2FsVHJhbnNm
b3JtID0gZWxlbWVudC0+YW5pbWF0ZWRMb2NhbFRyYW5zZm9ybSgpOwotICAgICAgICBtX25lZWRz
VHJhbnNmb3JtVXBkYXRlID0gZmFsc2U7Ci0gICAgICAgIHVwZGF0ZUNhY2hlZEJvdW5kYXJpZXNJ
blBhcmVudHMgPSB0cnVlOwotICAgIH0KLQotICAgIGlmIChtX25lZWRzQm91bmRhcmllc1VwZGF0
ZSkKLSAgICAgICAgdXBkYXRlQ2FjaGVkQm91bmRhcmllc0luUGFyZW50cyA9IHRydWU7Ci0KLSAg
ICAvLyBJbnZhbGlkYXRlIGFsbCByZXNvdXJjZXMgb2YgdGhpcyBjbGllbnQgaWYgb3VyIGxheW91
dCBjaGFuZ2VkLgotICAgIGlmIChtX2V2ZXJIYWRMYXlvdXQgJiYgc2VsZk5lZWRzTGF5b3V0KCkp
IHsKLSAgICAgICAgU1ZHUmVzb3VyY2VzQ2FjaGU6OmNsaWVudExheW91dENoYW5nZWQodGhpcyk7
Ci0gICAgICAgIG1fbWFya2VyTGF5b3V0SW5mby5jbGVhcigpOwotICAgIH0KLQotICAgIC8vIEF0
IHRoaXMgcG9pbnQgTGF5b3V0UmVwYWludGVyIGFscmVhZHkgZ3JhYmJlZCB0aGUgb2xkIGJvdW5k
cywKLSAgICAvLyByZWNhbGN1bGF0ZSB0aGVtIG5vdyBzbyByZXBhaW50QWZ0ZXJMYXlvdXQoKSB1
c2VzIHRoZSBuZXcgYm91bmRzLgotICAgIGlmIChuZWVkc1BhdGhVcGRhdGUgfHwgbV9uZWVkc0Jv
dW5kYXJpZXNVcGRhdGUpIHsKLSAgICAgICAgdXBkYXRlQ2FjaGVkQm91bmRhcmllcygpOwotICAg
ICAgICBtX25lZWRzQm91bmRhcmllc1VwZGF0ZSA9IGZhbHNlOwotICAgIH0KLQotICAgIC8vIElm
IG91ciBib3VuZHMgY2hhbmdlZCwgbm90aWZ5IHRoZSBwYXJlbnRzLgotICAgIGlmICh1cGRhdGVD
YWNoZWRCb3VuZGFyaWVzSW5QYXJlbnRzKQotICAgICAgICBSZW5kZXJTVkdNb2RlbE9iamVjdDo6
c2V0TmVlZHNCb3VuZGFyaWVzVXBkYXRlKCk7Ci0KLSAgICByZXBhaW50ZXIucmVwYWludEFmdGVy
TGF5b3V0KCk7Ci0gICAgc2V0TmVlZHNMYXlvdXQoZmFsc2UpOwotfQotCi1ib29sIFJlbmRlclNW
R1BhdGg6OnNob3VsZFN0cm9rZVplcm9MZW5ndGhTdWJwYXRoKCkgY29uc3QKLXsKLSAgICAvLyBT
cGVjKDExLjQpOiBBbnkgemVybyBsZW5ndGggc3VicGF0aCBzaGFsbCBub3QgYmUgc3Ryb2tlZCBp
ZiB0aGUg4oCYc3Ryb2tlLWxpbmVjYXDigJkgcHJvcGVydHkgaGFzIGEgdmFsdWUgb2YgYnV0dAot
ICAgIC8vIGJ1dCBzaGFsbCBiZSBzdHJva2VkIGlmIHRoZSDigJhzdHJva2UtbGluZWNhcOKAmSBw
cm9wZXJ0eSBoYXMgYSB2YWx1ZSBvZiByb3VuZCBvciBzcXVhcmUKLSAgICByZXR1cm4gc3R5bGUo
KS0+c3ZnU3R5bGUoKS0+aGFzU3Ryb2tlKCkgJiYgc3R5bGUoKS0+c3ZnU3R5bGUoKS0+Y2FwU3R5
bGUoKSAhPSBCdXR0Q2FwICYmICFtX2ZpbGxCb3VuZGluZ0JveC53aWR0aCgpICYmICFtX2ZpbGxC
b3VuZGluZ0JveC5oZWlnaHQoKTsKLX0KLQotRmxvYXRSZWN0IFJlbmRlclNWR1BhdGg6Onplcm9M
ZW5ndGhTdWJwYXRoUmVjdCgpIGNvbnN0Ci17Ci0gICAgU1ZHRWxlbWVudCogc3ZnRWxlbWVudCA9
IHN0YXRpY19jYXN0PFNWR0VsZW1lbnQqPihub2RlKCkpOwotICAgIFNWR0xlbmd0aENvbnRleHQg
bGVuZ3RoQ29udGV4dChzdmdFbGVtZW50KTsKLSAgICBmbG9hdCBzdHJva2VXaWR0aCA9IHN0eWxl
KCktPnN2Z1N0eWxlKCktPnN0cm9rZVdpZHRoKCkudmFsdWUobGVuZ3RoQ29udGV4dCk7Ci0gICAg
cmV0dXJuIEZsb2F0UmVjdChtX2ZpbGxCb3VuZGluZ0JveC54KCkgLSBzdHJva2VXaWR0aCAvIDIs
IG1fZmlsbEJvdW5kaW5nQm94LnkoKSAtIHN0cm9rZVdpZHRoIC8gMiwgc3Ryb2tlV2lkdGgsIHN0
cm9rZVdpZHRoKTsKLX0KLQotdm9pZCBSZW5kZXJTVkdQYXRoOjpzZXR1cFNxdWFyZUNhcFBhdGgo
UGF0aComIHVzZVBhdGgsIGludCYgYXBwbHlNb2RlKQotewotICAgIC8vIFNwZWMoMTEuNCk6IEFu
eSB6ZXJvIGxlbmd0aCBzdWJwYXRoIHNoYWxsIG5vdCBiZSBzdHJva2VkIGlmIHRoZSDigJhzdHJv
a2UtbGluZWNhcOKAmSBwcm9wZXJ0eSBoYXMgYSB2YWx1ZSBvZiBidXR0Ci0gICAgLy8gYnV0IHNo
YWxsIGJlIHN0cm9rZWQgaWYgdGhlIOKAmHN0cm9rZS1saW5lY2Fw4oCZIHByb3BlcnR5IGhhcyBh
IHZhbHVlIG9mIHJvdW5kIG9yIHNxdWFyZQotICAgIERFRklORV9TVEFUSUNfTE9DQUwoUGF0aCwg
dGVtcFBhdGgsICgpKTsKLQotICAgIGFwcGx5TW9kZSA9IEFwcGx5VG9GaWxsTW9kZTsKLSAgICB1
c2VQYXRoID0gJnRlbXBQYXRoOwotICAgIHVzZVBhdGgtPmNsZWFyKCk7Ci0gICAgaWYgKHN0eWxl
KCktPnN2Z1N0eWxlKCktPmNhcFN0eWxlKCkgPT0gU3F1YXJlQ2FwKQotICAgICAgICB1c2VQYXRo
LT5hZGRSZWN0KHplcm9MZW5ndGhTdWJwYXRoUmVjdCgpKTsKLSAgICBlbHNlCi0gICAgICAgIHVz
ZVBhdGgtPmFkZEVsbGlwc2UoemVyb0xlbmd0aFN1YnBhdGhSZWN0KCkpOwotfQotCi1ib29sIFJl
bmRlclNWR1BhdGg6OnNldHVwTm9uU2NhbGluZ1N0cm9rZVBhdGgoUGF0aComIHVzZVBhdGgsIEdy
YXBoaWNzQ29udGV4dFN0YXRlU2F2ZXImIHN0YXRlU2F2ZXIpCi17Ci0gICAgREVGSU5FX1NUQVRJ
Q19MT0NBTChQYXRoLCB0ZW1wUGF0aCwgKCkpOwotCi0gICAgU1ZHU3R5bGVkVHJhbnNmb3JtYWJs
ZUVsZW1lbnQqIGVsZW1lbnQgPSBzdGF0aWNfY2FzdDxTVkdTdHlsZWRUcmFuc2Zvcm1hYmxlRWxl
bWVudCo+KG5vZGUoKSk7Ci0gICAgQWZmaW5lVHJhbnNmb3JtIG5vblNjYWxpbmdTdHJva2VUcmFu
c2Zvcm0gPSBlbGVtZW50LT5nZXRTY3JlZW5DVE0oU1ZHTG9jYXRhYmxlOjpEaXNhbGxvd1N0eWxl
VXBkYXRlKTsKLSAgICBpZiAoIW5vblNjYWxpbmdTdHJva2VUcmFuc2Zvcm0uaXNJbnZlcnRpYmxl
KCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIHRlbXBQYXRoID0gbV9wYXRoOwotICAg
IHVzZVBhdGggPSAmdGVtcFBhdGg7Ci0gICAgdGVtcFBhdGgudHJhbnNmb3JtKG5vblNjYWxpbmdT
dHJva2VUcmFuc2Zvcm0pOwotCi0gICAgc3RhdGVTYXZlci5zYXZlKCk7Ci0gICAgc3RhdGVTYXZl
ci5jb250ZXh0KCktPmNvbmNhdENUTShub25TY2FsaW5nU3Ryb2tlVHJhbnNmb3JtLmludmVyc2Uo
KSk7Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLXZvaWQgUmVuZGVyU1ZHUGF0aDo6ZmlsbEFuZFN0
cm9rZVBhdGgoR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0KQotewotICAgIFJlbmRlclN0eWxlKiBz
dHlsZSA9IHRoaXMtPnN0eWxlKCk7Ci0KLSAgICBDb2xvciBmYWxsYmFja0NvbG9yOwotICAgIGlm
IChSZW5kZXJTVkdSZXNvdXJjZSogZmlsbFBhaW50aW5nUmVzb3VyY2UgPSBSZW5kZXJTVkdSZXNv
dXJjZTo6ZmlsbFBhaW50aW5nUmVzb3VyY2UodGhpcywgc3R5bGUsIGZhbGxiYWNrQ29sb3IpKSB7
Ci0gICAgICAgIGlmIChmaWxsUGFpbnRpbmdSZXNvdXJjZS0+YXBwbHlSZXNvdXJjZSh0aGlzLCBz
dHlsZSwgY29udGV4dCwgQXBwbHlUb0ZpbGxNb2RlKSkKLSAgICAgICAgICAgIGZpbGxQYWludGlu
Z1Jlc291cmNlLT5wb3N0QXBwbHlSZXNvdXJjZSh0aGlzLCBjb250ZXh0LCBBcHBseVRvRmlsbE1v
ZGUsICZtX3BhdGgpOwotICAgICAgICBlbHNlIGlmIChmYWxsYmFja0NvbG9yLmlzVmFsaWQoKSkg
ewotICAgICAgICAgICAgUmVuZGVyU1ZHUmVzb3VyY2VTb2xpZENvbG9yKiBmYWxsYmFja1Jlc291
cmNlID0gUmVuZGVyU1ZHUmVzb3VyY2U6OnNoYXJlZFNvbGlkUGFpbnRpbmdSZXNvdXJjZSgpOwot
ICAgICAgICAgICAgZmFsbGJhY2tSZXNvdXJjZS0+c2V0Q29sb3IoZmFsbGJhY2tDb2xvcik7Ci0g
ICAgICAgICAgICBpZiAoZmFsbGJhY2tSZXNvdXJjZS0+YXBwbHlSZXNvdXJjZSh0aGlzLCBzdHls
ZSwgY29udGV4dCwgQXBwbHlUb0ZpbGxNb2RlKSkKLSAgICAgICAgICAgICAgICBmYWxsYmFja1Jl
c291cmNlLT5wb3N0QXBwbHlSZXNvdXJjZSh0aGlzLCBjb250ZXh0LCBBcHBseVRvRmlsbE1vZGUs
ICZtX3BhdGgpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgZmFsbGJhY2tDb2xvciA9IENvbG9y
KCk7Ci0gICAgUmVuZGVyU1ZHUmVzb3VyY2UqIHN0cm9rZVBhaW50aW5nUmVzb3VyY2UgPSBSZW5k
ZXJTVkdSZXNvdXJjZTo6c3Ryb2tlUGFpbnRpbmdSZXNvdXJjZSh0aGlzLCBzdHlsZSwgZmFsbGJh
Y2tDb2xvcik7Ci0gICAgaWYgKCFzdHJva2VQYWludGluZ1Jlc291cmNlKQotICAgICAgICByZXR1
cm47Ci0KLSAgICBQYXRoKiB1c2VQYXRoID0gJm1fcGF0aDsKLSAgICBpbnQgYXBwbHlNb2RlID0g
QXBwbHlUb1N0cm9rZU1vZGU7Ci0KLSAgICBib29sIG5vblNjYWxpbmdTdHJva2UgPSBzdHlsZS0+
c3ZnU3R5bGUoKS0+dmVjdG9yRWZmZWN0KCkgPT0gVkVfTk9OX1NDQUxJTkdfU1RST0tFOwotCi0g
ICAgR3JhcGhpY3NDb250ZXh0U3RhdGVTYXZlciBzdGF0ZVNhdmVyKCpjb250ZXh0LCBmYWxzZSk7
Ci0KLSAgICAvLyBTcGVjKDExLjQpOiBBbnkgemVybyBsZW5ndGggc3VicGF0aCBzaGFsbCBub3Qg
YmUgc3Ryb2tlZCBpZiB0aGUg4oCYc3Ryb2tlLWxpbmVjYXDigJkgcHJvcGVydHkgaGFzIGEgdmFs
dWUgb2YgYnV0dAotICAgIC8vIGJ1dCBzaGFsbCBiZSBzdHJva2VkIGlmIHRoZSDigJhzdHJva2Ut
bGluZWNhcOKAmSBwcm9wZXJ0eSBoYXMgYSB2YWx1ZSBvZiByb3VuZCBvciBzcXVhcmUKLSAgICAv
LyBGSVhNRTogdGhpcyBkb2VzIG5vdCB3b3JrIGZvciB6ZXJvLWxlbmd0aCBzdWJwYXRocywgb25s
eSB3aGVuIHRvdGFsIHBhdGggaXMgemVyby1sZW5ndGgKLSAgICBpZiAoc2hvdWxkU3Ryb2tlWmVy
b0xlbmd0aFN1YnBhdGgoKSkKLSAgICAgICAgc2V0dXBTcXVhcmVDYXBQYXRoKHVzZVBhdGgsIGFw
cGx5TW9kZSk7Ci0gICAgZWxzZSBpZiAobm9uU2NhbGluZ1N0cm9rZSkgewotICAgICAgIGlmICgh
c2V0dXBOb25TY2FsaW5nU3Ryb2tlUGF0aCh1c2VQYXRoLCBzdGF0ZVNhdmVyKSkKLSAgICAgICAg
ICAgcmV0dXJuOwotICAgIH0KLQotICAgIGlmIChzdHJva2VQYWludGluZ1Jlc291cmNlLT5hcHBs
eVJlc291cmNlKHRoaXMsIHN0eWxlLCBjb250ZXh0LCBhcHBseU1vZGUpKQotICAgICAgICBzdHJv
a2VQYWludGluZ1Jlc291cmNlLT5wb3N0QXBwbHlSZXNvdXJjZSh0aGlzLCBjb250ZXh0LCBhcHBs
eU1vZGUsIHVzZVBhdGgpOwotICAgIGVsc2UgaWYgKGZhbGxiYWNrQ29sb3IuaXNWYWxpZCgpKSB7
Ci0gICAgICAgIFJlbmRlclNWR1Jlc291cmNlU29saWRDb2xvciogZmFsbGJhY2tSZXNvdXJjZSA9
IFJlbmRlclNWR1Jlc291cmNlOjpzaGFyZWRTb2xpZFBhaW50aW5nUmVzb3VyY2UoKTsKLSAgICAg
ICAgZmFsbGJhY2tSZXNvdXJjZS0+c2V0Q29sb3IoZmFsbGJhY2tDb2xvcik7Ci0gICAgICAgIGlm
IChmYWxsYmFja1Jlc291cmNlLT5hcHBseVJlc291cmNlKHRoaXMsIHN0eWxlLCBjb250ZXh0LCBh
cHBseU1vZGUpKQotICAgICAgICAgICAgZmFsbGJhY2tSZXNvdXJjZS0+cG9zdEFwcGx5UmVzb3Vy
Y2UodGhpcywgY29udGV4dCwgYXBwbHlNb2RlLCB1c2VQYXRoKTsKLSAgICB9Ci19Ci0KLXZvaWQg
UmVuZGVyU1ZHUGF0aDo6cGFpbnQoUGFpbnRJbmZvJiBwYWludEluZm8sIGNvbnN0IExheW91dFBv
aW50JikKLXsKLSAgICBpZiAocGFpbnRJbmZvLmNvbnRleHQtPnBhaW50aW5nRGlzYWJsZWQoKSB8
fCBzdHlsZSgpLT52aXNpYmlsaXR5KCkgPT0gSElEREVOIHx8IG1fcGF0aC5pc0VtcHR5KCkpCi0g
ICAgICAgIHJldHVybjsKLQotICAgIEZsb2F0UmVjdCBib3VuZGluZ0JveCA9IHJlcGFpbnRSZWN0
SW5Mb2NhbENvb3JkaW5hdGVzKCk7Ci0gICAgaWYgKCFTVkdSZW5kZXJTdXBwb3J0OjpwYWludElu
Zm9JbnRlcnNlY3RzUmVwYWludFJlY3QoYm91bmRpbmdCb3gsIG1fbG9jYWxUcmFuc2Zvcm0sIHBh
aW50SW5mbykpCi0gICAgICAgIHJldHVybjsKLQotICAgIFBhaW50SW5mbyBjaGlsZFBhaW50SW5m
byhwYWludEluZm8pOwotICAgIGJvb2wgZHJhd3NPdXRsaW5lID0gc3R5bGUoKS0+b3V0bGluZVdp
ZHRoKCkgJiYgKGNoaWxkUGFpbnRJbmZvLnBoYXNlID09IFBhaW50UGhhc2VPdXRsaW5lIHx8IGNo
aWxkUGFpbnRJbmZvLnBoYXNlID09IFBhaW50UGhhc2VTZWxmT3V0bGluZSk7Ci0gICAgaWYgKGRy
YXdzT3V0bGluZSB8fCBjaGlsZFBhaW50SW5mby5waGFzZSA9PSBQYWludFBoYXNlRm9yZWdyb3Vu
ZCkgewotICAgICAgICBHcmFwaGljc0NvbnRleHRTdGF0ZVNhdmVyIHN0YXRlU2F2ZXIoKmNoaWxk
UGFpbnRJbmZvLmNvbnRleHQpOwotICAgICAgICBjaGlsZFBhaW50SW5mby5hcHBseVRyYW5zZm9y
bShtX2xvY2FsVHJhbnNmb3JtKTsKLQotICAgICAgICBpZiAoY2hpbGRQYWludEluZm8ucGhhc2Ug
PT0gUGFpbnRQaGFzZUZvcmVncm91bmQpIHsKLSAgICAgICAgICAgIFBhaW50SW5mbyBzYXZlZElu
Zm8oY2hpbGRQYWludEluZm8pOwotCi0gICAgICAgICAgICBpZiAoU1ZHUmVuZGVyU3VwcG9ydDo6
cHJlcGFyZVRvUmVuZGVyU1ZHQ29udGVudCh0aGlzLCBjaGlsZFBhaW50SW5mbykpIHsKLSAgICAg
ICAgICAgICAgICBjb25zdCBTVkdSZW5kZXJTdHlsZSogc3ZnU3R5bGUgPSBzdHlsZSgpLT5zdmdT
dHlsZSgpOwotICAgICAgICAgICAgICAgIGlmIChzdmdTdHlsZS0+c2hhcGVSZW5kZXJpbmcoKSA9
PSBTUl9DUklTUEVER0VTKQotICAgICAgICAgICAgICAgICAgICBjaGlsZFBhaW50SW5mby5jb250
ZXh0LT5zZXRTaG91bGRBbnRpYWxpYXMoZmFsc2UpOwotCi0gICAgICAgICAgICAgICAgZmlsbEFu
ZFN0cm9rZVBhdGgoY2hpbGRQYWludEluZm8uY29udGV4dCk7Ci0KLSAgICAgICAgICAgICAgICBp
ZiAoc3ZnU3R5bGUtPmhhc01hcmtlcnMoKSkKLSAgICAgICAgICAgICAgICAgICAgbV9tYXJrZXJM
YXlvdXRJbmZvLmRyYXdNYXJrZXJzKGNoaWxkUGFpbnRJbmZvKTsKLSAgICAgICAgICAgIH0KLQot
ICAgICAgICAgICAgU1ZHUmVuZGVyU3VwcG9ydDo6ZmluaXNoUmVuZGVyU1ZHQ29udGVudCh0aGlz
LCBjaGlsZFBhaW50SW5mbywgc2F2ZWRJbmZvLmNvbnRleHQpOwotICAgICAgICB9Ci0KLSAgICAg
ICAgaWYgKGRyYXdzT3V0bGluZSkKLSAgICAgICAgICAgIHBhaW50T3V0bGluZShjaGlsZFBhaW50
SW5mby5jb250ZXh0LCBJbnRSZWN0KGJvdW5kaW5nQm94KSk7Ci0gICAgfQotfQotCi0vLyBUaGlz
IG1ldGhvZCBpcyBjYWxsZWQgZnJvbSBpbnNpZGUgcGFpbnRPdXRsaW5lKCkgc2luY2Ugd2UgY2Fs
bCBwYWludE91dGxpbmUoKQotLy8gd2hpbGUgdHJhbnNmb3JtZWQgdG8gb3VyIGNvb3JkIHN5c3Rl
bSwgcmV0dXJuIGxvY2FsIGNvb3Jkcwotdm9pZCBSZW5kZXJTVkdQYXRoOjphZGRGb2N1c1JpbmdS
ZWN0cyhWZWN0b3I8TGF5b3V0UmVjdD4mIHJlY3RzLCBjb25zdCBMYXlvdXRQb2ludCYpIAotewot
ICAgIExheW91dFJlY3QgcmVjdCA9IGVuY2xvc2luZ0xheW91dFJlY3QocmVwYWludFJlY3RJbkxv
Y2FsQ29vcmRpbmF0ZXMoKSk7Ci0gICAgaWYgKCFyZWN0LmlzRW1wdHkoKSkKLSAgICAgICAgcmVj
dHMuYXBwZW5kKHJlY3QpOwotfQotCi1ib29sIFJlbmRlclNWR1BhdGg6Om5vZGVBdEZsb2F0UG9p
bnQoY29uc3QgSGl0VGVzdFJlcXVlc3QmIHJlcXVlc3QsIEhpdFRlc3RSZXN1bHQmIHJlc3VsdCwg
Y29uc3QgRmxvYXRQb2ludCYgcG9pbnRJblBhcmVudCwgSGl0VGVzdEFjdGlvbiBoaXRUZXN0QWN0
aW9uKQotewotICAgIC8vIFdlIG9ubHkgZHJhdyBpbiB0aGUgZm9yZ3JvdW5kIHBoYXNlLCBzbyB3
ZSBvbmx5IGhpdC10ZXN0IHRoZW4uCi0gICAgaWYgKGhpdFRlc3RBY3Rpb24gIT0gSGl0VGVzdEZv
cmVncm91bmQpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIEZsb2F0UG9pbnQgbG9jYWxQ
b2ludCA9IG1fbG9jYWxUcmFuc2Zvcm0uaW52ZXJzZSgpLm1hcFBvaW50KHBvaW50SW5QYXJlbnQp
OwotCi0gICAgaWYgKCFTVkdSZW5kZXJTdXBwb3J0Ojpwb2ludEluQ2xpcHBpbmdBcmVhKHRoaXMs
IGxvY2FsUG9pbnQpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBQb2ludGVyRXZlbnRz
SGl0UnVsZXMgaGl0UnVsZXMoUG9pbnRlckV2ZW50c0hpdFJ1bGVzOjpTVkdfUEFUSF9ISVRURVNU
SU5HLCByZXF1ZXN0LCBzdHlsZSgpLT5wb2ludGVyRXZlbnRzKCkpOwotICAgIGJvb2wgaXNWaXNp
YmxlID0gKHN0eWxlKCktPnZpc2liaWxpdHkoKSA9PSBWSVNJQkxFKTsKLSAgICBpZiAoaXNWaXNp
YmxlIHx8ICFoaXRSdWxlcy5yZXF1aXJlVmlzaWJsZSkgewotICAgICAgICBjb25zdCBTVkdSZW5k
ZXJTdHlsZSogc3ZnU3R5bGUgPSBzdHlsZSgpLT5zdmdTdHlsZSgpOwotICAgICAgICBXaW5kUnVs
ZSBmaWxsUnVsZSA9IHN2Z1N0eWxlLT5maWxsUnVsZSgpOwotICAgICAgICBpZiAocmVxdWVzdC5z
dmdDbGlwQ29udGVudCgpKQotICAgICAgICAgICAgZmlsbFJ1bGUgPSBzdmdTdHlsZS0+Y2xpcFJ1
bGUoKTsKLSAgICAgICAgaWYgKChoaXRSdWxlcy5jYW5IaXRTdHJva2UgJiYgKHN2Z1N0eWxlLT5o
YXNTdHJva2UoKSB8fCAhaGl0UnVsZXMucmVxdWlyZVN0cm9rZSkgJiYgc3Ryb2tlQ29udGFpbnMo
bG9jYWxQb2ludCwgaGl0UnVsZXMucmVxdWlyZVN0cm9rZSkpCi0gICAgICAgICAgICB8fCAoaGl0
UnVsZXMuY2FuSGl0RmlsbCAmJiAoc3ZnU3R5bGUtPmhhc0ZpbGwoKSB8fCAhaGl0UnVsZXMucmVx
dWlyZUZpbGwpICYmIGZpbGxDb250YWlucyhsb2NhbFBvaW50LCBoaXRSdWxlcy5yZXF1aXJlRmls
bCwgZmlsbFJ1bGUpKSkgewotICAgICAgICAgICAgdXBkYXRlSGl0VGVzdFJlc3VsdChyZXN1bHQs
IHJvdW5kZWRMYXlvdXRQb2ludChsb2NhbFBvaW50KSk7Ci0gICAgICAgICAgICByZXR1cm4gdHJ1
ZTsKLSAgICAgICAgfQotICAgIH0KLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLUZsb2F0UmVjdCBS
ZW5kZXJTVkdQYXRoOjpjYWxjdWxhdGVNYXJrZXJCb3VuZHNJZk5lZWRlZCgpCi17Ci0gICAgU1ZH
RWxlbWVudCogc3ZnRWxlbWVudCA9IHN0YXRpY19jYXN0PFNWR0VsZW1lbnQqPihub2RlKCkpOwot
ICAgIEFTU0VSVChzdmdFbGVtZW50ICYmIHN2Z0VsZW1lbnQtPmRvY3VtZW50KCkpOwotICAgIGlm
ICghc3ZnRWxlbWVudC0+aXNTdHlsZWQoKSkKLSAgICAgICAgcmV0dXJuIEZsb2F0UmVjdCgpOwot
Ci0gICAgU1ZHU3R5bGVkRWxlbWVudCogc3R5bGVkRWxlbWVudCA9IHN0YXRpY19jYXN0PFNWR1N0
eWxlZEVsZW1lbnQqPihzdmdFbGVtZW50KTsKLSAgICBpZiAoIXN0eWxlZEVsZW1lbnQtPnN1cHBv
cnRzTWFya2VycygpKQotICAgICAgICByZXR1cm4gRmxvYXRSZWN0KCk7Ci0KLSAgICBjb25zdCBT
VkdSZW5kZXJTdHlsZSogc3ZnU3R5bGUgPSBzdHlsZSgpLT5zdmdTdHlsZSgpOwotICAgIEFTU0VS
VChzdmdTdHlsZS0+aGFzTWFya2VycygpKTsKLQotICAgIFNWR1Jlc291cmNlcyogcmVzb3VyY2Vz
ID0gU1ZHUmVzb3VyY2VzQ2FjaGU6OmNhY2hlZFJlc291cmNlc0ZvclJlbmRlck9iamVjdCh0aGlz
KTsKLSAgICBpZiAoIXJlc291cmNlcykKLSAgICAgICAgcmV0dXJuIEZsb2F0UmVjdCgpOwotCi0g
ICAgUmVuZGVyU1ZHUmVzb3VyY2VNYXJrZXIqIG1hcmtlclN0YXJ0ID0gcmVzb3VyY2VzLT5tYXJr
ZXJTdGFydCgpOwotICAgIFJlbmRlclNWR1Jlc291cmNlTWFya2VyKiBtYXJrZXJNaWQgPSByZXNv
dXJjZXMtPm1hcmtlck1pZCgpOwotICAgIFJlbmRlclNWR1Jlc291cmNlTWFya2VyKiBtYXJrZXJF
bmQgPSByZXNvdXJjZXMtPm1hcmtlckVuZCgpOwotICAgIGlmICghbWFya2VyU3RhcnQgJiYgIW1h
cmtlck1pZCAmJiAhbWFya2VyRW5kKQotICAgICAgICByZXR1cm4gRmxvYXRSZWN0KCk7Ci0KLSAg
ICBTVkdMZW5ndGhDb250ZXh0IGxlbmd0aENvbnRleHQoc3ZnRWxlbWVudCk7Ci0gICAgcmV0dXJu
IG1fbWFya2VyTGF5b3V0SW5mby5jYWxjdWxhdGVCb3VuZGFyaWVzKG1hcmtlclN0YXJ0LCBtYXJr
ZXJNaWQsIG1hcmtlckVuZCwgc3ZnU3R5bGUtPnN0cm9rZVdpZHRoKCkudmFsdWUobGVuZ3RoQ29u
dGV4dCksIG1fcGF0aCk7Ci19Ci0KLXZvaWQgUmVuZGVyU1ZHUGF0aDo6dXBkYXRlQ2FjaGVkQm91
bmRhcmllcygpCi17Ci0gICAgaWYgKG1fcGF0aC5pc0VtcHR5KCkpIHsKLSAgICAgICAgbV9maWxs
Qm91bmRpbmdCb3ggPSBGbG9hdFJlY3QoKTsKLSAgICAgICAgbV9zdHJva2VBbmRNYXJrZXJCb3Vu
ZGluZ0JveCA9IEZsb2F0UmVjdCgpOwotICAgICAgICBtX3JlcGFpbnRCb3VuZGluZ0JveCA9IEZs
b2F0UmVjdCgpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgLy8gQ2FjaGUgX3VuY2xp
cHBlZF8gZmlsbCBib3VuZGluZyBib3gsIHVzZWQgZm9yIGNhbGN1bGF0aW9ucyBpbiByZXNvdXJj
ZXMKLSAgICBtX2ZpbGxCb3VuZGluZ0JveCA9IG1fcGF0aC5mYXN0Qm91bmRpbmdSZWN0KCk7Ci0K
LSAgICAvLyBTcGVjKDExLjQpOiBBbnkgemVybyBsZW5ndGggc3VicGF0aCBzaGFsbCBub3QgYmUg
c3Ryb2tlZCBpZiB0aGUg4oCYc3Ryb2tlLWxpbmVjYXDigJkgcHJvcGVydHkgaGFzIGEgdmFsdWUg
b2YgYnV0dAotICAgIC8vIGJ1dCBzaGFsbCBiZSBzdHJva2VkIGlmIHRoZSDigJhzdHJva2UtbGlu
ZWNhcOKAmSBwcm9wZXJ0eSBoYXMgYSB2YWx1ZSBvZiByb3VuZCBvciBzcXVhcmUKLSAgICBpZiAo
c2hvdWxkU3Ryb2tlWmVyb0xlbmd0aFN1YnBhdGgoKSkgewotICAgICAgICBtX3N0cm9rZUFuZE1h
cmtlckJvdW5kaW5nQm94ID0gemVyb0xlbmd0aFN1YnBhdGhSZWN0KCk7Ci0gICAgICAgIC8vIENh
Y2hlIHNtYWxsZXN0IHBvc3NpYmxlIHJlcGFpbnQgcmVjdGFuZ2xlCi0gICAgICAgIG1fcmVwYWlu
dEJvdW5kaW5nQm94ID0gbV9zdHJva2VBbmRNYXJrZXJCb3VuZGluZ0JveDsKLSAgICAgICAgU1ZH
UmVuZGVyU3VwcG9ydDo6aW50ZXJzZWN0UmVwYWludFJlY3RXaXRoUmVzb3VyY2VzKHRoaXMsIG1f
cmVwYWludEJvdW5kaW5nQm94KTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIC8vIENh
Y2hlIF91bmNsaXBwZWRfIHN0cm9rZSBib3VuZGluZyBib3gsIHVzZWQgZm9yIGNhbGN1bGF0aW9u
cyBpbiByZXNvdXJjZXMgKGluY2x1ZGVzIG1hcmtlciBib3VuZGFyaWVzKQotICAgIG1fc3Ryb2tl
QW5kTWFya2VyQm91bmRpbmdCb3ggPSBtX2ZpbGxCb3VuZGluZ0JveDsKLQotICAgIGNvbnN0IFNW
R1JlbmRlclN0eWxlKiBzdmdTdHlsZSA9IHN0eWxlKCktPnN2Z1N0eWxlKCk7Ci0gICAgaWYgKHN2
Z1N0eWxlLT5oYXNTdHJva2UoKSkgewotICAgICAgICBCb3VuZGluZ1JlY3RTdHJva2VTdHlsZUFw
cGxpZXIgc3Ryb2tlU3R5bGUodGhpcywgc3R5bGUoKSk7Ci0gICAgICAgIG1fc3Ryb2tlQW5kTWFy
a2VyQm91bmRpbmdCb3gudW5pdGUobV9wYXRoLnN0cm9rZUJvdW5kaW5nUmVjdCgmc3Ryb2tlU3R5
bGUpKTsKLSAgICB9Ci0KLSAgICBpZiAoc3ZnU3R5bGUtPmhhc01hcmtlcnMoKSkgewotICAgICAg
ICBGbG9hdFJlY3QgbWFya2VyQm91bmRzID0gY2FsY3VsYXRlTWFya2VyQm91bmRzSWZOZWVkZWQo
KTsKLSAgICAgICAgaWYgKCFtYXJrZXJCb3VuZHMuaXNFbXB0eSgpKQotICAgICAgICAgICAgbV9z
dHJva2VBbmRNYXJrZXJCb3VuZGluZ0JveC51bml0ZShtYXJrZXJCb3VuZHMpOwotICAgIH0KLQot
ICAgIC8vIENhY2hlIHNtYWxsZXN0IHBvc3NpYmxlIHJlcGFpbnQgcmVjdGFuZ2xlCi0gICAgbV9y
ZXBhaW50Qm91bmRpbmdCb3ggPSBtX3N0cm9rZUFuZE1hcmtlckJvdW5kaW5nQm94OwotICAgIFNW
R1JlbmRlclN1cHBvcnQ6OmludGVyc2VjdFJlcGFpbnRSZWN0V2l0aFJlc291cmNlcyh0aGlzLCBt
X3JlcGFpbnRCb3VuZGluZ0JveCk7Ci19Ci0KIH0KIAogI2VuZGlmIC8vIEVOQUJMRShTVkcpCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1BhdGguaCBi
L1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUGF0aC5oCm9sZCBtb2RlIDEw
MDY0NApuZXcgbW9kZSAxMDA3NTUKaW5kZXggOThlNjA4ZC4uNzdlOTllNQotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1BhdGguaAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1BhdGguaApAQCAtNCw2ICs0LDggQEAKICAqIENvcHly
aWdodCAoQykgMjAwNSBFcmljIFNlaWRlbCA8ZXJpY0B3ZWJraXQub3JnPgogICogQ29weXJpZ2h0
IChDKSAyMDA2IEFwcGxlIENvbXB1dGVyLCBJbmMKICAqIENvcHlyaWdodCAoQykgMjAwOSBHb29n
bGUsIEluYy4KKyAqIENvcHlyaWdodCAoQykgMjAxMSBSZW5hdGEgSG9kb3ZhbiA8cmVuaUB3ZWJr
aXQub3JnPgorICogQ29weXJpZ2h0IChDKSAyMDExIFVuaXZlcnNpdHkgb2YgU3plZ2VkCiAgKgog
ICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0
IGFuZC9vcgogICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkg
R2VuZXJhbCBQdWJsaWMKQEAgLTI1LDg2ICsyNywyMCBAQAogI2RlZmluZSBSZW5kZXJTVkdQYXRo
X2gKIAogI2lmIEVOQUJMRShTVkcpCi0jaW5jbHVkZSAiQWZmaW5lVHJhbnNmb3JtLmgiCi0jaW5j
bHVkZSAiRmxvYXRSZWN0LmgiCi0jaW5jbHVkZSAiUmVuZGVyU1ZHTW9kZWxPYmplY3QuaCIKLSNp
bmNsdWRlICJTVkdNYXJrZXJMYXlvdXRJbmZvLmgiCisjaW5jbHVkZSAiUmVuZGVyU1ZHU2hhcGUu
aCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1jbGFzcyBGbG9hdFBvaW50OwotY2xhc3MgR3Jh
cGhpY3NDb250ZXh0U3RhdGVTYXZlcjsKLWNsYXNzIFJlbmRlclNWR0NvbnRhaW5lcjsKLWNsYXNz
IFNWR1N0eWxlZFRyYW5zZm9ybWFibGVFbGVtZW50OwotCi1jbGFzcyBSZW5kZXJTVkdQYXRoIDog
cHVibGljIFJlbmRlclNWR01vZGVsT2JqZWN0IHsKK2NsYXNzIFJlbmRlclNWR1BhdGggOiBwdWJs
aWMgUmVuZGVyU1ZHU2hhcGUgewogcHVibGljOgogICAgIGV4cGxpY2l0IFJlbmRlclNWR1BhdGgo
U1ZHU3R5bGVkVHJhbnNmb3JtYWJsZUVsZW1lbnQqKTsKICAgICB2aXJ0dWFsIH5SZW5kZXJTVkdQ
YXRoKCk7CiAKLSAgICBjb25zdCBQYXRoJiBwYXRoKCkgY29uc3QgeyByZXR1cm4gbV9wYXRoOyB9
Ci0gICAgdm9pZCBzZXROZWVkc1BhdGhVcGRhdGUoKSB7IG1fbmVlZHNQYXRoVXBkYXRlID0gdHJ1
ZTsgfQotICAgIHZpcnR1YWwgdm9pZCBzZXROZWVkc0JvdW5kYXJpZXNVcGRhdGUoKSB7IG1fbmVl
ZHNCb3VuZGFyaWVzVXBkYXRlID0gdHJ1ZTsgfQotICAgIHZpcnR1YWwgdm9pZCBzZXROZWVkc1Ry
YW5zZm9ybVVwZGF0ZSgpIHsgbV9uZWVkc1RyYW5zZm9ybVVwZGF0ZSA9IHRydWU7IH0KLQogcHJp
dmF0ZToKLSAgICAvLyBIaXQtZGV0ZWN0aW9uIHNlcGVyYXRlZCBmb3IgdGhlIGZpbGwgYW5kIHRo
ZSBzdHJva2UKLSAgICBib29sIGZpbGxDb250YWlucyhjb25zdCBGbG9hdFBvaW50JiwgYm9vbCBy
ZXF1aXJlc0ZpbGwgPSB0cnVlLCBXaW5kUnVsZSBmaWxsUnVsZSA9IFJVTEVfTk9OWkVSTyk7Ci0g
ICAgYm9vbCBzdHJva2VDb250YWlucyhjb25zdCBGbG9hdFBvaW50JiwgYm9vbCByZXF1aXJlc1N0
cm9rZSA9IHRydWUpOwotCi0gICAgdmlydHVhbCBGbG9hdFJlY3Qgb2JqZWN0Qm91bmRpbmdCb3go
KSBjb25zdCB7IHJldHVybiBtX2ZpbGxCb3VuZGluZ0JveDsgfQotICAgIHZpcnR1YWwgRmxvYXRS
ZWN0IHN0cm9rZUJvdW5kaW5nQm94KCkgY29uc3QgeyByZXR1cm4gbV9zdHJva2VBbmRNYXJrZXJC
b3VuZGluZ0JveDsgfQotICAgIHZpcnR1YWwgRmxvYXRSZWN0IHJlcGFpbnRSZWN0SW5Mb2NhbENv
b3JkaW5hdGVzKCkgY29uc3QgeyByZXR1cm4gbV9yZXBhaW50Qm91bmRpbmdCb3g7IH0KLSAgICB2
aXJ0dWFsIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgbG9jYWxUb1BhcmVudFRyYW5zZm9ybSgpIGNv
bnN0IHsgcmV0dXJuIG1fbG9jYWxUcmFuc2Zvcm07IH0KLQogICAgIHZpcnR1YWwgYm9vbCBpc1NW
R1BhdGgoKSBjb25zdCB7IHJldHVybiB0cnVlOyB9CiAgICAgdmlydHVhbCBjb25zdCBjaGFyKiBy
ZW5kZXJOYW1lKCkgY29uc3QgeyByZXR1cm4gIlJlbmRlclNWR1BhdGgiOyB9Ci0KLSAgICB2aXJ0
dWFsIHZvaWQgbGF5b3V0KCk7Ci0gICAgdmlydHVhbCB2b2lkIHBhaW50KFBhaW50SW5mbyYsIGNv
bnN0IExheW91dFBvaW50Jik7Ci0gICAgdmlydHVhbCB2b2lkIGFkZEZvY3VzUmluZ1JlY3RzKFZl
Y3RvcjxMYXlvdXRSZWN0PiYsIGNvbnN0IExheW91dFBvaW50Jik7Ci0KLSAgICB2aXJ0dWFsIGJv
b2wgbm9kZUF0RmxvYXRQb2ludChjb25zdCBIaXRUZXN0UmVxdWVzdCYsIEhpdFRlc3RSZXN1bHQm
LCBjb25zdCBGbG9hdFBvaW50JiBwb2ludEluUGFyZW50LCBIaXRUZXN0QWN0aW9uKTsKLQotICAg
IEZsb2F0UmVjdCBjYWxjdWxhdGVNYXJrZXJCb3VuZHNJZk5lZWRlZCgpOwotICAgIHZvaWQgdXBk
YXRlQ2FjaGVkQm91bmRhcmllcygpOwotCi0gICAgdm9pZCBzZXR1cFNxdWFyZUNhcFBhdGgoUGF0
aComIHVzZVBhdGgsIGludCYgYXBwbHlNb2RlKTsKLSAgICBib29sIHNldHVwTm9uU2NhbGluZ1N0
cm9rZVBhdGgoUGF0aComIHVzZVBhdGgsIEdyYXBoaWNzQ29udGV4dFN0YXRlU2F2ZXImKTsKLSAg
ICBib29sIHNob3VsZFN0cm9rZVplcm9MZW5ndGhTdWJwYXRoKCkgY29uc3Q7Ci0gICAgRmxvYXRS
ZWN0IHplcm9MZW5ndGhTdWJwYXRoUmVjdCgpIGNvbnN0OwotCi1wcml2YXRlOgotICAgIHZpcnR1
YWwgQWZmaW5lVHJhbnNmb3JtIGxvY2FsVHJhbnNmb3JtKCkgY29uc3QgeyByZXR1cm4gbV9sb2Nh
bFRyYW5zZm9ybTsgfQotICAgIHZvaWQgZmlsbEFuZFN0cm9rZVBhdGgoR3JhcGhpY3NDb250ZXh0
Kik7Ci0KLSAgICBib29sIG1fbmVlZHNCb3VuZGFyaWVzVXBkYXRlIDogMTsKLSAgICBib29sIG1f
bmVlZHNQYXRoVXBkYXRlIDogMTsKLSAgICBib29sIG1fbmVlZHNUcmFuc2Zvcm1VcGRhdGUgOiAx
OwotCi0gICAgbXV0YWJsZSBQYXRoIG1fcGF0aDsKLSAgICBGbG9hdFJlY3QgbV9maWxsQm91bmRp
bmdCb3g7Ci0gICAgRmxvYXRSZWN0IG1fc3Ryb2tlQW5kTWFya2VyQm91bmRpbmdCb3g7Ci0gICAg
RmxvYXRSZWN0IG1fcmVwYWludEJvdW5kaW5nQm94OwotICAgIFNWR01hcmtlckxheW91dEluZm8g
bV9tYXJrZXJMYXlvdXRJbmZvOwotICAgIEFmZmluZVRyYW5zZm9ybSBtX2xvY2FsVHJhbnNmb3Jt
OwogfTsKIAotaW5saW5lIFJlbmRlclNWR1BhdGgqIHRvUmVuZGVyU1ZHUGF0aChSZW5kZXJPYmpl
Y3QqIG9iamVjdCkKLXsKLSAgICBBU1NFUlQoIW9iamVjdCB8fCBvYmplY3QtPmlzU1ZHUGF0aCgp
KTsKLSAgICByZXR1cm4gc3RhdGljX2Nhc3Q8UmVuZGVyU1ZHUGF0aCo+KG9iamVjdCk7Ci19Ci0K
LWlubGluZSBjb25zdCBSZW5kZXJTVkdQYXRoKiB0b1JlbmRlclNWR1BhdGgoY29uc3QgUmVuZGVy
T2JqZWN0KiBvYmplY3QpCi17Ci0gICAgQVNTRVJUKCFvYmplY3QgfHwgb2JqZWN0LT5pc1NWR1Bh
dGgoKSk7Ci0gICAgcmV0dXJuIHN0YXRpY19jYXN0PGNvbnN0IFJlbmRlclNWR1BhdGgqPihvYmpl
Y3QpOwotfQotCi0vLyBUaGlzIHdpbGwgY2F0Y2ggYW55b25lIGRvaW5nIGFuIHVubmVjZXNzYXJ5
IGNhc3QuCi12b2lkIHRvUmVuZGVyU1ZHUGF0aChjb25zdCBSZW5kZXJTVkdQYXRoKik7Ci0KIH0K
IAogI2VuZGlmIC8vIEVOQUJMRShTVkcpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvc3ZnL1JlbmRlclNWR1JlY3QuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2
Zy9SZW5kZXJTVkdSZWN0LmNwcApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi44
ZDU4NWM1Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9S
ZW5kZXJTVkdSZWN0LmNwcApAQCAtMCwwICsxLDE0MyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAxMSBVbml2ZXJzaXR5IG9mIFN6ZWdlZAorICogQ29weXJpZ2h0IChDKSAyMDExIFJlbmF0YSBI
b2RvdmFuIDxyZW5pQHdlYmtpdC5vcmc+CisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVU5JVkVSU0lUWSBPRiBTWkVH
RUQgYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBVTklWRVJTSVRZIE9GIFNaRUdF
RCBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBS
T0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkg
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisK
KyNpbmNsdWRlICJjb25maWcuaCIKKworI2lmIEVOQUJMRShTVkcpCisjaW5jbHVkZSAiUmVuZGVy
U1ZHUmVjdC5oIgorCisjaW5jbHVkZSAiU1ZHTmFtZXMuaCIKKyNpbmNsdWRlICJTVkdSZWN0RWxl
bWVudC5oIgorI2luY2x1ZGUgPHd0Zi9QbGF0Zm9ybS5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7
CisKK1JlbmRlclNWR1JlY3Q6OlJlbmRlclNWR1JlY3QoU1ZHUmVjdEVsZW1lbnQqIG5vZGUpCisg
ICAgOiBSZW5kZXJTVkdTaGFwZShub2RlKQoreworfQorCitSZW5kZXJTVkdSZWN0Ojp+UmVuZGVy
U1ZHUmVjdCgpCit7Cit9CisKK3ZvaWQgUmVuZGVyU1ZHUmVjdDo6Y3JlYXRlU2hhcGUoKQorewor
ICAgIC8vIEJlZm9yZSBjcmVhdGluZyBhIG5ldyBvYmplY3Qgd2UgbmVlZCB0byBjbGVhciB0aGUg
Y2FjaGVkIGJvdW5kaW5nIGJveAorICAgIC8vIHRvIGF2b2lkIHVzaW5nIGdhcmJhZ2UuCisgICAg
bV9ib3VuZGluZ0JveCA9IEZsb2F0UmVjdCgpOworICAgIG1faW5uZXJTdHJva2VSZWN0ID0gRmxv
YXRSZWN0KCk7CisgICAgbV9vdXRlclN0cm9rZVJlY3QgPSBGbG9hdFJlY3QoKTsKKyAgICBTVkdS
ZWN0RWxlbWVudCogcmVjdCA9IHN0YXRpY19jYXN0PFNWR1JlY3RFbGVtZW50Kj4obm9kZSgpKTsK
KyAgICBBU1NFUlQocmVjdCk7CisKKyAgICBib29sIG5vblNjYWxpbmdTdHJva2UgPSBzdHlsZSgp
LT5zdmdTdHlsZSgpLT52ZWN0b3JFZmZlY3QoKSA9PSBWRV9OT05fU0NBTElOR19TVFJPS0U7Cisg
ICAgLy8gRmFsbGJhY2sgdG8gUmVuZGVyU1ZHU2hhcGUgaWYgcmVjdCBoYXMgcm91bmRlZCBjb3Ju
ZXJzLgorICAgIGlmIChyZWN0LT5oYXNBdHRyaWJ1dGUoU1ZHTmFtZXM6OnJ4QXR0cikgfHwgcmVj
dC0+aGFzQXR0cmlidXRlKFNWR05hbWVzOjpyeUF0dHIpIHx8IG5vblNjYWxpbmdTdHJva2UpIHsK
KyAgICAgICBSZW5kZXJTVkdTaGFwZTo6Y3JlYXRlU2hhcGUoKTsKKyAgICAgICBzZXRJc1BhaW50
aW5nRmFsbGJhY2sodHJ1ZSk7CisgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIFNWR0xlbmd0
aENvbnRleHQgbGVuZ3RoQ29udGV4dChyZWN0KTsKKyAgICBGbG9hdFNpemUgYm91bmRpbmdCb3hT
aXplKHJlY3QtPndpZHRoKCkudmFsdWUobGVuZ3RoQ29udGV4dCksIHJlY3QtPmhlaWdodCgpLnZh
bHVlKGxlbmd0aENvbnRleHQpKTsKKyAgICBpZiAoYm91bmRpbmdCb3hTaXplLmlzRW1wdHkoKSkK
KyAgICAgICAgcmV0dXJuOworCisgICAgbV9ib3VuZGluZ0JveCA9IEZsb2F0UmVjdChGbG9hdFBv
aW50KHJlY3QtPngoKS52YWx1ZShsZW5ndGhDb250ZXh0KSwgcmVjdC0+eSgpLnZhbHVlKGxlbmd0
aENvbnRleHQpKSwgYm91bmRpbmdCb3hTaXplKTsKKworICAgIC8vIFRvIGRlY2lkZSBpZiB0aGUg
c3Ryb2tlIGNvbnRhaW5zIGEgcG9pbnQgd2UgY3JlYXRlIHR3byByZWN0cyB3aGljaCByZXByZXNl
bnQgdGhlIGlubmVyIGFuZAorICAgIC8vIHRoZSBvdXRlciBzdHJva2UgYm9yZGVycy4gQSBzdHJv
a2UgY29udGFpbnMgdGhlIHBvaW50LCBpZiB0aGUgcG9pbnQgaXMgYmV0d2VlbiB0aGVtLgorICAg
IG1faW5uZXJTdHJva2VSZWN0ID0gbV9ib3VuZGluZ0JveDsKKyAgICBtX291dGVyU3Ryb2tlUmVj
dCA9IG1fYm91bmRpbmdCb3g7CisKKyAgICBpZiAoc3R5bGUoKS0+c3ZnU3R5bGUoKS0+aGFzU3Ry
b2tlKCkpIHsKKyAgICAgICAgZmxvYXQgc3Ryb2tlV2lkdGggPSB0aGlzLT5zdHJva2VXaWR0aCgp
OworICAgICAgICBtX2lubmVyU3Ryb2tlUmVjdC5pbmZsYXRlKC1zdHJva2VXaWR0aCAvIDIpOwor
ICAgICAgICBtX291dGVyU3Ryb2tlUmVjdC5pbmZsYXRlKHN0cm9rZVdpZHRoIC8gMik7CisgICAg
fQorfQorCitGbG9hdFJlY3QgUmVuZGVyU1ZHUmVjdDo6b2JqZWN0Qm91bmRpbmdCb3goKSBjb25z
dAoreworICAgIGlmIChpc1BhaW50aW5nRmFsbGJhY2soKSkKKyAgICAgICAgcmV0dXJuIFJlbmRl
clNWR1NoYXBlOjpvYmplY3RCb3VuZGluZ0JveCgpOworICAgIHJldHVybiBtX2JvdW5kaW5nQm94
OworfQorCitGbG9hdFJlY3QgUmVuZGVyU1ZHUmVjdDo6c3Ryb2tlQm91bmRpbmdCb3goKSBjb25z
dAoreworICAgIGlmIChpc1BhaW50aW5nRmFsbGJhY2soKSkKKyAgICAgICAgcmV0dXJuIFJlbmRl
clNWR1NoYXBlOjpzdHJva2VCb3VuZGluZ0JveCgpOworICAgIHJldHVybiBtX291dGVyU3Ryb2tl
UmVjdDsKK30KKwordm9pZCBSZW5kZXJTVkdSZWN0OjpmaWxsU2hhcGUoR3JhcGhpY3NDb250ZXh0
KiBjb250ZXh0KSBjb25zdAoreworICAgIGlmICghaXNQYWludGluZ0ZhbGxiYWNrKCkpIHsKKyNp
ZiBQTEFURk9STShNQUMpIHx8IChQTEFURk9STShDSFJPTUlVTSkgJiYgT1MoTUFDX09TX1gpKQor
ICAgICAgICAvLyBGSVhNRTogQ0cgaW1wbGVtZW50YXRpb24gb2YgR3JhcGhpY3NDb250ZXh0Q0c6
OmZpbGxSZWN0IGhhcyBhbiBvd24KKyAgICAgICAgLy8gc2hhZG93IGRyYXdpbmcgbWV0aG9kLCB3
aGljaCBkcmF3cyBhbiBleHRyYSBzaGFkb3cuCisgICAgICAgIC8vIFRoaXMgaXMgYSB3b3JrYXJv
dW5kIGZvciBzd2l0Y2hpbmcgb2ZmIHRoZSBleHRyYSBzaGFkb3cuCisgICAgICAgIC8vIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD02ODg5OQorICAgICAgICBpZiAoY29u
dGV4dC0+aGFzU2hhZG93KCkpIHsKKyAgICAgICAgICAgIEdyYXBoaWNzQ29udGV4dFN0YXRlU2F2
ZXIgc3RhdGVTYXZlcigqY29udGV4dCk7CisgICAgICAgICAgICBjb250ZXh0LT5jbGVhclNoYWRv
dygpOworICAgICAgICAgICAgY29udGV4dC0+ZmlsbFJlY3QobV9ib3VuZGluZ0JveCk7CisgICAg
ICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyNlbmRpZgorICAgICAgICBjb250ZXh0LT5maWxs
UmVjdChtX2JvdW5kaW5nQm94KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBSZW5kZXJT
VkdTaGFwZTo6ZmlsbFNoYXBlKGNvbnRleHQpOworfQorCit2b2lkIFJlbmRlclNWR1JlY3Q6OnN0
cm9rZVNoYXBlKEdyYXBoaWNzQ29udGV4dCogY29udGV4dCkgY29uc3QKK3sKKyAgICBpZiAoIWlz
UGFpbnRpbmdGYWxsYmFjaygpKSB7CisgICAgICAgIGNvbnRleHQtPnN0cm9rZVJlY3QobV9ib3Vu
ZGluZ0JveCwgc3Ryb2tlV2lkdGgoKSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgUmVu
ZGVyU1ZHU2hhcGU6OnN0cm9rZVNoYXBlKGNvbnRleHQpOworfQorCitib29sIFJlbmRlclNWR1Jl
Y3Q6OnNoYXBlRGVwZW5kZW50U3Ryb2tlQ29udGFpbnMoY29uc3QgRmxvYXRQb2ludCYgcG9pbnQp
IGNvbnN0Cit7CisgICAgcmV0dXJuIG1fb3V0ZXJTdHJva2VSZWN0LmNvbnRhaW5zKHBvaW50LCBG
bG9hdFJlY3Q6Okluc2lkZU9yT25TdHJva2UpICYmICFtX2lubmVyU3Ryb2tlUmVjdC5jb250YWlu
cyhwb2ludCwgRmxvYXRSZWN0OjpJbnNpZGVCdXROb3RPblN0cm9rZSk7Cit9CisKK2Jvb2wgUmVu
ZGVyU1ZHUmVjdDo6c2hhcGVEZXBlbmRlbnRGaWxsQ29udGFpbnMoY29uc3QgRmxvYXRQb2ludCYg
cG9pbnQsIGNvbnN0IFdpbmRSdWxlIGZpbGxSdWxlKSBjb25zdAoreworICAgIGlmIChpc1BhaW50
aW5nRmFsbGJhY2soKSkKKyAgICAgICAgcmV0dXJuIFJlbmRlclNWR1NoYXBlOjpzaGFwZURlcGVu
ZGVudEZpbGxDb250YWlucyhwb2ludCwgZmlsbFJ1bGUpOworICAgIHJldHVybiBtX2JvdW5kaW5n
Qm94LmNvbnRhaW5zKHBvaW50LngoKSwgcG9pbnQueSgpKTsKK30KKworfQorCisjZW5kaWYgLy8g
RU5BQkxFKFNWRykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVu
ZGVyU1ZHUmVjdC5oIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZWN0
LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDhlZjI5ZgotLS0gL2Rldi9u
dWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVjdC5oCkBA
IC0wLDAgKzEsNjQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgVW5pdmVyc2l0eSBvZiBT
emVnZWQKKyAqIENvcHlyaWdodCAoQykgMjAxMSBSZW5hdGEgSG9kb3ZhbiA8cmVuaUB3ZWJraXQu
b3JnPgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIFVOSVZFUlNJVFkgT0YgU1pFR0VEIGBgQVMgSVMnJyBBTkQgQU5Z
CisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAg
SU4gTk8gRVZFTlQgU0hBTEwgVU5JVkVSU0lUWSBPRiBTWkVHRUQgT1IKKyAqIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAq
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIFJlbmRlclNWR1Jl
Y3RfaAorI2RlZmluZSBSZW5kZXJTVkdSZWN0X2gKKworI2lmIEVOQUJMRShTVkcpCisjaW5jbHVk
ZSAiUmVuZGVyU1ZHUGF0aC5oIgorI2luY2x1ZGUgIlNWR1JlY3RFbGVtZW50LmgiCisKK25hbWVz
cGFjZSBXZWJDb3JlIHsKKworY2xhc3MgUmVuZGVyU1ZHUmVjdCA6IHB1YmxpYyBSZW5kZXJTVkdT
aGFwZSB7CitwdWJsaWM6CisgICAgZXhwbGljaXQgUmVuZGVyU1ZHUmVjdChTVkdSZWN0RWxlbWVu
dCopOworICAgIHZpcnR1YWwgflJlbmRlclNWR1JlY3QoKTsKKworcHJpdmF0ZToKKyAgICB2aXJ0
dWFsIGJvb2wgaXNTVkdSZWN0KCkgY29uc3QgeyByZXR1cm4gdHJ1ZTsgfQorICAgIHZpcnR1YWwg
Y29uc3QgY2hhciogcmVuZGVyTmFtZSgpIGNvbnN0IHsgcmV0dXJuICJSZW5kZXJTVkdQYXRoIjsg
fQorCisgICAgdmlydHVhbCB2b2lkIGNyZWF0ZVNoYXBlKCk7CisgICAgdmlydHVhbCBib29sIGlz
RW1wdHkoKSBjb25zdCB7IHJldHVybiBoYXNQYXRoKCkgPyBSZW5kZXJTVkdTaGFwZTo6aXNFbXB0
eSgpIDogbV9ib3VuZGluZ0JveC5pc0VtcHR5KCk7IH07CisgICAgdmlydHVhbCB2b2lkIGZpbGxT
aGFwZShHcmFwaGljc0NvbnRleHQqKSBjb25zdDsKKyAgICB2aXJ0dWFsIHZvaWQgc3Ryb2tlU2hh
cGUoR3JhcGhpY3NDb250ZXh0KikgY29uc3Q7CisgICAgdmlydHVhbCBGbG9hdFJlY3Qgb2JqZWN0
Qm91bmRpbmdCb3goKSBjb25zdDsKKyAgICB2aXJ0dWFsIEZsb2F0UmVjdCBzdHJva2VCb3VuZGlu
Z0JveCgpIGNvbnN0OworICAgIHZpcnR1YWwgYm9vbCBzaGFwZURlcGVuZGVudFN0cm9rZUNvbnRh
aW5zKGNvbnN0IEZsb2F0UG9pbnQmKSBjb25zdDsKKyAgICB2aXJ0dWFsIGJvb2wgc2hhcGVEZXBl
bmRlbnRGaWxsQ29udGFpbnMoY29uc3QgRmxvYXRQb2ludCYsIGNvbnN0IFdpbmRSdWxlKSBjb25z
dDsKKworcHJpdmF0ZToKKyAgICBGbG9hdFJlY3QgbV9ib3VuZGluZ0JveDsKKyAgICBGbG9hdFJl
Y3QgbV9pbm5lclN0cm9rZVJlY3Q7CisgICAgRmxvYXRSZWN0IG1fb3V0ZXJTdHJva2VSZWN0Owor
fTsKKworfQorCisjZW5kaWYgLy8gRU5BQkxFKFNWRykKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJjZS5oIGIvU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJjZS5oCmluZGV4IGE2N2JhNzMuLmUw
MjAxNTQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZH
UmVzb3VyY2UuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jl
c291cmNlLmgKQEAgLTIxLDYgKzIxLDcgQEAKICNkZWZpbmUgUmVuZGVyU1ZHUmVzb3VyY2VfaAog
CiAjaWYgRU5BQkxFKFNWRykKKyNpbmNsdWRlICJSZW5kZXJTVkdTaGFwZS5oIgogI2luY2x1ZGUg
IlJlbmRlclN0eWxlQ29uc3RhbnRzLmgiCiAjaW5jbHVkZSAiU1ZHRG9jdW1lbnRFeHRlbnNpb25z
LmgiCiAKQEAgLTYxLDcgKzYyLDcgQEAgcHVibGljOgogICAgIHZpcnR1YWwgdm9pZCByZW1vdmVD
bGllbnRGcm9tQ2FjaGUoUmVuZGVyT2JqZWN0KiwgYm9vbCBtYXJrRm9ySW52YWxpZGF0aW9uID0g
dHJ1ZSkgPSAwOwogCiAgICAgdmlydHVhbCBib29sIGFwcGx5UmVzb3VyY2UoUmVuZGVyT2JqZWN0
KiwgUmVuZGVyU3R5bGUqLCBHcmFwaGljc0NvbnRleHQqJiwgdW5zaWduZWQgc2hvcnQgcmVzb3Vy
Y2VNb2RlKSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIHBvc3RBcHBseVJlc291cmNlKFJlbmRlck9i
amVjdCosIEdyYXBoaWNzQ29udGV4dComLCB1bnNpZ25lZCBzaG9ydCwgY29uc3QgUGF0aCopIHsg
fQorICAgIHZpcnR1YWwgdm9pZCBwb3N0QXBwbHlSZXNvdXJjZShSZW5kZXJPYmplY3QqLCBHcmFw
aGljc0NvbnRleHQqJiwgdW5zaWduZWQgc2hvcnQsIGNvbnN0IFBhdGgqLCBjb25zdCBSZW5kZXJT
VkdTaGFwZSopIHsgfQogICAgIHZpcnR1YWwgRmxvYXRSZWN0IHJlc291cmNlQm91bmRpbmdCb3go
UmVuZGVyT2JqZWN0KikgPSAwOwogCiAgICAgdmlydHVhbCBSZW5kZXJTVkdSZXNvdXJjZVR5cGUg
cmVzb3VyY2VUeXBlKCkgY29uc3QgPSAwOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJjZUNsaXBwZXIuY3BwIGIvU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJjZUNsaXBwZXIuY3BwCmluZGV4IDc3YWFhZTUu
LjVkNTAwZjAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVy
U1ZHUmVzb3VyY2VDbGlwcGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3Zn
L1JlbmRlclNWR1Jlc291cmNlQ2xpcHBlci5jcHAKQEAgLTI0Niw3ICsyNDYsNyBAQCBib29sIFJl
bmRlclNWR1Jlc291cmNlQ2xpcHBlcjo6ZHJhd0NvbnRlbnRJbnRvTWFza0ltYWdlKENsaXBwZXJE
YXRhKiBjbGlwcGVyRGF0YQogICAgICAgICB9CiAKICAgICAgICAgLy8gT25seSBzaGFwZXMsIHBh
dGhzIGFuZCB0ZXh0cyBhcmUgYWxsb3dlZCBmb3IgY2xpcHBpbmcuCi0gICAgICAgIGlmICghcmVu
ZGVyZXItPmlzU1ZHUGF0aCgpICYmICFyZW5kZXJlci0+aXNTVkdUZXh0KCkpCisgICAgICAgIGlm
ICghcmVuZGVyZXItPmlzU1ZHU2hhcGUoKSAmJiAhcmVuZGVyZXItPmlzU1ZHVGV4dCgpKQogICAg
ICAgICAgICAgY29udGludWU7CiAKICAgICAgICAgLy8gU2F2ZSB0aGUgb2xkIFJlbmRlclN0eWxl
IG9mIHRoZSBjdXJyZW50IG9iamVjdCBmb3IgcmVzdG9yaW5nIGFmdGVyIGRyYXdpbmcKQEAgLTI4
OCw3ICsyODgsNyBAQCB2b2lkIFJlbmRlclNWR1Jlc291cmNlQ2xpcHBlcjo6Y2FsY3VsYXRlQ2xp
cENvbnRlbnRSZXBhaW50UmVjdCgpCiAgICAgICAgIFJlbmRlck9iamVjdCogcmVuZGVyZXIgPSBj
aGlsZE5vZGUtPnJlbmRlcmVyKCk7CiAgICAgICAgIGlmICghY2hpbGROb2RlLT5pc1NWR0VsZW1l
bnQoKSB8fCAhc3RhdGljX2Nhc3Q8U1ZHRWxlbWVudCo+KGNoaWxkTm9kZSktPmlzU3R5bGVkKCkg
fHwgIXJlbmRlcmVyKQogICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIGlmICghcmVuZGVy
ZXItPmlzU1ZHUGF0aCgpICYmICFyZW5kZXJlci0+aXNTVkdUZXh0KCkgJiYgIXJlbmRlcmVyLT5p
c1NWR1NoYWRvd1RyZWVSb290Q29udGFpbmVyKCkpCisgICAgICAgIGlmICghcmVuZGVyZXItPmlz
U1ZHU2hhcGUoKSAmJiAhcmVuZGVyZXItPmlzU1ZHVGV4dCgpICYmICFyZW5kZXJlci0+aXNTVkdT
aGFkb3dUcmVlUm9vdENvbnRhaW5lcigpKQogICAgICAgICAgICAgY29udGludWU7CiAgICAgICAg
IFJlbmRlclN0eWxlKiBzdHlsZSA9IHJlbmRlcmVyLT5zdHlsZSgpOwogICAgICAgICBpZiAoIXN0
eWxlIHx8IHN0eWxlLT5kaXNwbGF5KCkgPT0gTk9ORSB8fCBzdHlsZS0+dmlzaWJpbGl0eSgpICE9
IFZJU0lCTEUpCkBAIC0zMTgsNyArMzE4LDcgQEAgYm9vbCBSZW5kZXJTVkdSZXNvdXJjZUNsaXBw
ZXI6OmhpdFRlc3RDbGlwQ29udGVudChjb25zdCBGbG9hdFJlY3QmIG9iamVjdEJvdW5kaW4KICAg
ICAgICAgUmVuZGVyT2JqZWN0KiByZW5kZXJlciA9IGNoaWxkTm9kZS0+cmVuZGVyZXIoKTsKICAg
ICAgICAgaWYgKCFjaGlsZE5vZGUtPmlzU1ZHRWxlbWVudCgpIHx8ICFzdGF0aWNfY2FzdDxTVkdF
bGVtZW50Kj4oY2hpbGROb2RlKS0+aXNTdHlsZWQoKSB8fCAhcmVuZGVyZXIpCiAgICAgICAgICAg
ICBjb250aW51ZTsKLSAgICAgICAgaWYgKCFyZW5kZXJlci0+aXNTVkdQYXRoKCkgJiYgIXJlbmRl
cmVyLT5pc1NWR1RleHQoKSAmJiAhcmVuZGVyZXItPmlzU1ZHU2hhZG93VHJlZVJvb3RDb250YWlu
ZXIoKSkKKyAgICAgICAgaWYgKCFyZW5kZXJlci0+aXNTVkdTaGFwZSgpICYmICFyZW5kZXJlci0+
aXNTVkdUZXh0KCkgJiYgIXJlbmRlcmVyLT5pc1NWR1NoYWRvd1RyZWVSb290Q29udGFpbmVyKCkp
CiAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgSW50UG9pbnQgaGl0UG9pbnQ7CiAgICAg
ICAgIEhpdFRlc3RSZXN1bHQgcmVzdWx0KGhpdFBvaW50KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VDb250YWluZXIuY3BwIGIvU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJjZUNvbnRhaW5lci5jcHAK
aW5kZXggMjlkMzVlOS4uYWRhNjkxMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJjZUNvbnRhaW5lci5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJjZUNvbnRhaW5lci5jcHAKQEAgLTE4NCw3
ICsxODQsNyBAQCB2b2lkIFJlbmRlclNWR1Jlc291cmNlQ29udGFpbmVyOjpyZWdpc3RlclJlc291
cmNlKCkKIC8vIEZJWE1FOiBUaGlzIGRvZXMgbm90IGJlbG9uZyBoZXJlLgogQWZmaW5lVHJhbnNm
b3JtIFJlbmRlclNWR1Jlc291cmNlQ29udGFpbmVyOjp0cmFuc2Zvcm1Pbk5vblNjYWxpbmdTdHJv
a2UoUmVuZGVyT2JqZWN0KiBvYmplY3QsIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgcmVzb3VyY2VU
cmFuc2Zvcm0pCiB7Ci0gICAgaWYgKCFvYmplY3QtPmlzU1ZHUGF0aCgpKQorICAgIGlmICghb2Jq
ZWN0LT5pc1NWR1NoYXBlKCkpCiAgICAgICAgIHJldHVybiByZXNvdXJjZVRyYW5zZm9ybTsKIAog
ICAgIFNWR1N0eWxlZFRyYW5zZm9ybWFibGVFbGVtZW50KiBlbGVtZW50ID0gc3RhdGljX2Nhc3Q8
U1ZHU3R5bGVkVHJhbnNmb3JtYWJsZUVsZW1lbnQqPihvYmplY3QtPm5vZGUoKSk7CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291cmNlRmlsdGVy
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VGaWx0
ZXIuY3BwCmluZGV4IDAxYTIwNWUuLjE0ZGRmODEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VGaWx0ZXIuY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VGaWx0ZXIuY3BwCkBAIC0yNTYs
NyArMjU2LDcgQEAgYm9vbCBSZW5kZXJTVkdSZXNvdXJjZUZpbHRlcjo6YXBwbHlSZXNvdXJjZShS
ZW5kZXJPYmplY3QqIG9iamVjdCwgUmVuZGVyU3R5bGUqLAogICAgIHJldHVybiB0cnVlOwogfQog
Ci12b2lkIFJlbmRlclNWR1Jlc291cmNlRmlsdGVyOjpwb3N0QXBwbHlSZXNvdXJjZShSZW5kZXJP
YmplY3QqIG9iamVjdCwgR3JhcGhpY3NDb250ZXh0KiYgY29udGV4dCwgdW5zaWduZWQgc2hvcnQg
cmVzb3VyY2VNb2RlLCBjb25zdCBQYXRoKikKK3ZvaWQgUmVuZGVyU1ZHUmVzb3VyY2VGaWx0ZXI6
OnBvc3RBcHBseVJlc291cmNlKFJlbmRlck9iamVjdCogb2JqZWN0LCBHcmFwaGljc0NvbnRleHQq
JiBjb250ZXh0LCB1bnNpZ25lZCBzaG9ydCByZXNvdXJjZU1vZGUsIGNvbnN0IFBhdGgqLCBjb25z
dCBSZW5kZXJTVkdTaGFwZSopCiB7CiAgICAgQVNTRVJUKG9iamVjdCk7CiAgICAgQVNTRVJUKGNv
bnRleHQpOwpAQCAtMjg2LDcgKzI4Niw3IEBAIHZvaWQgUmVuZGVyU1ZHUmVzb3VyY2VGaWx0ZXI6
OnBvc3RBcHBseVJlc291cmNlKFJlbmRlck9iamVjdCogb2JqZWN0LCBHcmFwaGljc0NvCiAgICAg
fQogCiAgICAgRmlsdGVyRWZmZWN0KiBsYXN0RWZmZWN0ID0gZmlsdGVyRGF0YS0+YnVpbGRlci0+
bGFzdEVmZmVjdCgpOwotICAgIAorCiAgICAgaWYgKGxhc3RFZmZlY3QgJiYgIWZpbHRlckRhdGEt
PmJvdW5kYXJpZXMuaXNFbXB0eSgpICYmICFsYXN0RWZmZWN0LT5maWx0ZXJQcmltaXRpdmVTdWJy
ZWdpb24oKS5pc0VtcHR5KCkpIHsKICAgICAgICAgLy8gVGhpcyBpcyB0aGUgcmVhbCBmaWx0ZXJp
bmcgb2YgdGhlIG9iamVjdC4gSXQganVzdCBuZWVkcyB0byBiZSBjYWxsZWQgb24gdGhlCiAgICAg
ICAgIC8vIGluaXRpYWwgZmlsdGVyaW5nIHByb2Nlc3MuIFdlIGp1c3QgdGFrZSB0aGUgc3RvcmVk
IGZpbHRlciByZXN1bHQgb24gYQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L3N2Zy9SZW5kZXJTVkdSZXNvdXJjZUZpbHRlci5oIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L3N2Zy9SZW5kZXJTVkdSZXNvdXJjZUZpbHRlci5oCmluZGV4IDlhZDdjN2EuLjkzYmI2YjMgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VG
aWx0ZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291
cmNlRmlsdGVyLmgKQEAgLTcyLDcgKzcyLDcgQEAgcHVibGljOgogICAgIHZpcnR1YWwgdm9pZCBy
ZW1vdmVDbGllbnRGcm9tQ2FjaGUoUmVuZGVyT2JqZWN0KiwgYm9vbCBtYXJrRm9ySW52YWxpZGF0
aW9uID0gdHJ1ZSk7CiAKICAgICB2aXJ0dWFsIGJvb2wgYXBwbHlSZXNvdXJjZShSZW5kZXJPYmpl
Y3QqLCBSZW5kZXJTdHlsZSosIEdyYXBoaWNzQ29udGV4dComLCB1bnNpZ25lZCBzaG9ydCByZXNv
dXJjZU1vZGUpOwotICAgIHZpcnR1YWwgdm9pZCBwb3N0QXBwbHlSZXNvdXJjZShSZW5kZXJPYmpl
Y3QqLCBHcmFwaGljc0NvbnRleHQqJiwgdW5zaWduZWQgc2hvcnQgcmVzb3VyY2VNb2RlLCBjb25z
dCBQYXRoKik7CisgICAgdmlydHVhbCB2b2lkIHBvc3RBcHBseVJlc291cmNlKFJlbmRlck9iamVj
dCosIEdyYXBoaWNzQ29udGV4dComLCB1bnNpZ25lZCBzaG9ydCByZXNvdXJjZU1vZGUsIGNvbnN0
IFBhdGgqLCBjb25zdCBSZW5kZXJTVkdTaGFwZSopOwogCiAgICAgdmlydHVhbCBGbG9hdFJlY3Qg
cmVzb3VyY2VCb3VuZGluZ0JveChSZW5kZXJPYmplY3QqKTsKIApkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJjZUdyYWRpZW50LmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VHcmFkaWVudC5jcHAK
aW5kZXggOTA2OTkzNC4uNDM3YjE4NiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJjZUdyYWRpZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291cmNlR3JhZGllbnQuY3BwCkBAIC0yNyw2ICsy
Nyw3IEBACiAKICNpbmNsdWRlICJHcmFkaWVudEF0dHJpYnV0ZXMuaCIKICNpbmNsdWRlICJHcmFw
aGljc0NvbnRleHQuaCIKKyNpbmNsdWRlICJSZW5kZXJTVkdTaGFwZS5oIgogI2luY2x1ZGUgIlJl
bmRlclNWR1RleHQuaCIKICNpbmNsdWRlICJTVkdJbWFnZUJ1ZmZlclRvb2xzLmgiCiAjaW5jbHVk
ZSAiU1ZHUmVuZGVyU3VwcG9ydC5oIgpAQCAtMjMxLDcgKzIzMiw3IEBAIGJvb2wgUmVuZGVyU1ZH
UmVzb3VyY2VHcmFkaWVudDo6YXBwbHlSZXNvdXJjZShSZW5kZXJPYmplY3QqIG9iamVjdCwgUmVu
ZGVyU3R5bGUqCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLXZvaWQgUmVuZGVyU1ZHUmVzb3VyY2VH
cmFkaWVudDo6cG9zdEFwcGx5UmVzb3VyY2UoUmVuZGVyT2JqZWN0KiBvYmplY3QsIEdyYXBoaWNz
Q29udGV4dComIGNvbnRleHQsIHVuc2lnbmVkIHNob3J0IHJlc291cmNlTW9kZSwgY29uc3QgUGF0
aCogcGF0aCkKK3ZvaWQgUmVuZGVyU1ZHUmVzb3VyY2VHcmFkaWVudDo6cG9zdEFwcGx5UmVzb3Vy
Y2UoUmVuZGVyT2JqZWN0KiBvYmplY3QsIEdyYXBoaWNzQ29udGV4dComIGNvbnRleHQsIHVuc2ln
bmVkIHNob3J0IHJlc291cmNlTW9kZSwgY29uc3QgUGF0aCogcGF0aCwgY29uc3QgUmVuZGVyU1ZH
U2hhcGUqIHNoYXBlKQogewogICAgIEFTU0VSVChjb250ZXh0KTsKICAgICBBU1NFUlQocmVzb3Vy
Y2VNb2RlICE9IEFwcGx5VG9EZWZhdWx0TW9kZSk7CkBAIC0yNTksMTEgKzI2MCwxOSBAQCB2b2lk
IFJlbmRlclNWR1Jlc291cmNlR3JhZGllbnQ6OnBvc3RBcHBseVJlc291cmNlKFJlbmRlck9iamVj
dCogb2JqZWN0LCBHcmFwaGljcwogI2Vsc2UKICAgICAgICAgVU5VU0VEX1BBUkFNKG9iamVjdCk7
CiAjZW5kaWYKLSAgICB9IGVsc2UgaWYgKHBhdGgpIHsKLSAgICAgICAgaWYgKHJlc291cmNlTW9k
ZSAmIEFwcGx5VG9GaWxsTW9kZSkKLSAgICAgICAgICAgIGNvbnRleHQtPmZpbGxQYXRoKCpwYXRo
KTsKLSAgICAgICAgZWxzZSBpZiAocmVzb3VyY2VNb2RlICYgQXBwbHlUb1N0cm9rZU1vZGUpCi0g
ICAgICAgICAgICBjb250ZXh0LT5zdHJva2VQYXRoKCpwYXRoKTsKKyAgICB9IGVsc2UgeworICAg
ICAgICBpZiAocmVzb3VyY2VNb2RlICYgQXBwbHlUb0ZpbGxNb2RlKSB7CisgICAgICAgICAgICBp
ZiAocGF0aCkKKyAgICAgICAgICAgICAgICBjb250ZXh0LT5maWxsUGF0aCgqcGF0aCk7CisgICAg
ICAgICAgICBlbHNlIGlmIChzaGFwZSkKKyAgICAgICAgICAgICAgICBzaGFwZS0+ZmlsbFNoYXBl
KGNvbnRleHQpOworICAgICAgICB9CisgICAgICAgIGlmIChyZXNvdXJjZU1vZGUgJiBBcHBseVRv
U3Ryb2tlTW9kZSkgeworICAgICAgICAgICAgaWYgKHBhdGgpCisgICAgICAgICAgICAgICAgY29u
dGV4dC0+c3Ryb2tlUGF0aCgqcGF0aCk7CisgICAgICAgICAgICBlbHNlIGlmIChzaGFwZSkKKyAg
ICAgICAgICAgICAgICBzaGFwZS0+c3Ryb2tlU2hhcGUoY29udGV4dCk7CisgICAgICAgIH0KICAg
ICB9CiAKICAgICBjb250ZXh0LT5yZXN0b3JlKCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291cmNlR3JhZGllbnQuaCBiL1NvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VHcmFkaWVudC5oCmluZGV4IGM5ZmQ5
MzYuLmI3ZTc4MGMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVu
ZGVyU1ZHUmVzb3VyY2VHcmFkaWVudC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9z
dmcvUmVuZGVyU1ZHUmVzb3VyY2VHcmFkaWVudC5oCkBAIC01MCw3ICs1MCw3IEBAIHB1YmxpYzoK
ICAgICB2aXJ0dWFsIHZvaWQgcmVtb3ZlQ2xpZW50RnJvbUNhY2hlKFJlbmRlck9iamVjdCosIGJv
b2wgbWFya0ZvckludmFsaWRhdGlvbiA9IHRydWUpOwogCiAgICAgdmlydHVhbCBib29sIGFwcGx5
UmVzb3VyY2UoUmVuZGVyT2JqZWN0KiwgUmVuZGVyU3R5bGUqLCBHcmFwaGljc0NvbnRleHQqJiwg
dW5zaWduZWQgc2hvcnQgcmVzb3VyY2VNb2RlKTsKLSAgICB2aXJ0dWFsIHZvaWQgcG9zdEFwcGx5
UmVzb3VyY2UoUmVuZGVyT2JqZWN0KiwgR3JhcGhpY3NDb250ZXh0KiYsIHVuc2lnbmVkIHNob3J0
IHJlc291cmNlTW9kZSwgY29uc3QgUGF0aCopOworICAgIHZpcnR1YWwgdm9pZCBwb3N0QXBwbHlS
ZXNvdXJjZShSZW5kZXJPYmplY3QqLCBHcmFwaGljc0NvbnRleHQqJiwgdW5zaWduZWQgc2hvcnQg
cmVzb3VyY2VNb2RlLCBjb25zdCBQYXRoKiwgY29uc3QgUmVuZGVyU1ZHU2hhcGUqKTsKICAgICB2
aXJ0dWFsIEZsb2F0UmVjdCByZXNvdXJjZUJvdW5kaW5nQm94KFJlbmRlck9iamVjdCopIHsgcmV0
dXJuIEZsb2F0UmVjdCgpOyB9CiAKIHByb3RlY3RlZDoKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VQYXR0ZXJuLmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VQYXR0ZXJuLmNwcAppbmRleCA1
ZGMxNWI2Li40ZDA5ZTExIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3Zn
L1JlbmRlclNWR1Jlc291cmNlUGF0dGVybi5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJjZVBhdHRlcm4uY3BwCkBAIC0xODgsMTYgKzE4OCwyMiBA
QCBib29sIFJlbmRlclNWR1Jlc291cmNlUGF0dGVybjo6YXBwbHlSZXNvdXJjZShSZW5kZXJPYmpl
Y3QqIG9iamVjdCwgUmVuZGVyU3R5bGUqCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLXZvaWQgUmVu
ZGVyU1ZHUmVzb3VyY2VQYXR0ZXJuOjpwb3N0QXBwbHlSZXNvdXJjZShSZW5kZXJPYmplY3QqLCBH
cmFwaGljc0NvbnRleHQqJiBjb250ZXh0LCB1bnNpZ25lZCBzaG9ydCByZXNvdXJjZU1vZGUsIGNv
bnN0IFBhdGgqIHBhdGgpCit2b2lkIFJlbmRlclNWR1Jlc291cmNlUGF0dGVybjo6cG9zdEFwcGx5
UmVzb3VyY2UoUmVuZGVyT2JqZWN0KiwgR3JhcGhpY3NDb250ZXh0KiYgY29udGV4dCwgdW5zaWdu
ZWQgc2hvcnQgcmVzb3VyY2VNb2RlLCBjb25zdCBQYXRoKiBwYXRoLCBjb25zdCBSZW5kZXJTVkdT
aGFwZSogc2hhcGUpCiB7CiAgICAgQVNTRVJUKGNvbnRleHQpOwogICAgIEFTU0VSVChyZXNvdXJj
ZU1vZGUgIT0gQXBwbHlUb0RlZmF1bHRNb2RlKTsKIAotICAgIGlmIChwYXRoICYmICEocmVzb3Vy
Y2VNb2RlICYgQXBwbHlUb1RleHRNb2RlKSkgewotICAgICAgICBpZiAocmVzb3VyY2VNb2RlICYg
QXBwbHlUb0ZpbGxNb2RlKQorICAgIGlmIChyZXNvdXJjZU1vZGUgJiBBcHBseVRvRmlsbE1vZGUp
IHsKKyAgICAgICAgaWYgKHBhdGgpCiAgICAgICAgICAgICBjb250ZXh0LT5maWxsUGF0aCgqcGF0
aCk7Ci0gICAgICAgIGVsc2UgaWYgKHJlc291cmNlTW9kZSAmIEFwcGx5VG9TdHJva2VNb2RlKQor
ICAgICAgICBlbHNlIGlmIChzaGFwZSkKKyAgICAgICAgICAgIHNoYXBlLT5maWxsU2hhcGUoY29u
dGV4dCk7CisgICAgfQorICAgIGlmIChyZXNvdXJjZU1vZGUgJiBBcHBseVRvU3Ryb2tlTW9kZSkg
eworICAgICAgICBpZiAocGF0aCkKICAgICAgICAgICAgIGNvbnRleHQtPnN0cm9rZVBhdGgoKnBh
dGgpOworICAgICAgICBlbHNlIGlmIChzaGFwZSkKKyAgICAgICAgICAgIHNoYXBlLT5zdHJva2VT
aGFwZShjb250ZXh0KTsKICAgICB9CiAKICAgICBjb250ZXh0LT5yZXN0b3JlKCk7CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291cmNlUGF0dGVy
bi5oIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJjZVBhdHRl
cm4uaAppbmRleCA5ZTg2NDg2Li40MDQ5MjQyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291cmNlUGF0dGVybi5oCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VQYXR0ZXJuLmgKQEAgLTUyLDcgKzUy
LDcgQEAgcHVibGljOgogICAgIHZpcnR1YWwgdm9pZCByZW1vdmVDbGllbnRGcm9tQ2FjaGUoUmVu
ZGVyT2JqZWN0KiwgYm9vbCBtYXJrRm9ySW52YWxpZGF0aW9uID0gdHJ1ZSk7CiAKICAgICB2aXJ0
dWFsIGJvb2wgYXBwbHlSZXNvdXJjZShSZW5kZXJPYmplY3QqLCBSZW5kZXJTdHlsZSosIEdyYXBo
aWNzQ29udGV4dComLCB1bnNpZ25lZCBzaG9ydCByZXNvdXJjZU1vZGUpOwotICAgIHZpcnR1YWwg
dm9pZCBwb3N0QXBwbHlSZXNvdXJjZShSZW5kZXJPYmplY3QqLCBHcmFwaGljc0NvbnRleHQqJiwg
dW5zaWduZWQgc2hvcnQgcmVzb3VyY2VNb2RlLCBjb25zdCBQYXRoKik7CisgICAgdmlydHVhbCB2
b2lkIHBvc3RBcHBseVJlc291cmNlKFJlbmRlck9iamVjdCosIEdyYXBoaWNzQ29udGV4dComLCB1
bnNpZ25lZCBzaG9ydCByZXNvdXJjZU1vZGUsIGNvbnN0IFBhdGgqLCBjb25zdCBSZW5kZXJTVkdT
aGFwZSopOwogICAgIHZpcnR1YWwgRmxvYXRSZWN0IHJlc291cmNlQm91bmRpbmdCb3goUmVuZGVy
T2JqZWN0KikgeyByZXR1cm4gRmxvYXRSZWN0KCk7IH0KIAogICAgIHZpcnR1YWwgUmVuZGVyU1ZH
UmVzb3VyY2VUeXBlIHJlc291cmNlVHlwZSgpIGNvbnN0IHsgcmV0dXJuIHNfcmVzb3VyY2VUeXBl
OyB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jl
c291cmNlU29saWRDb2xvci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRl
clNWR1Jlc291cmNlU29saWRDb2xvci5jcHAKaW5kZXggNWJlMmFmNi4uNjNkZjc1MSAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJjZVNvbGlk
Q29sb3IuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVz
b3VyY2VTb2xpZENvbG9yLmNwcApAQCAtMjMsNiArMjMsNyBAQAogI2luY2x1ZGUgIlJlbmRlclNW
R1Jlc291cmNlU29saWRDb2xvci5oIgogCiAjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCisj
aW5jbHVkZSAiUmVuZGVyU1ZHU2hhcGUuaCIKICNpbmNsdWRlICJSZW5kZXJTdHlsZS5oIgogI2lu
Y2x1ZGUgIlNWR1JlbmRlclN1cHBvcnQuaCIKIApAQCAtNzQsMTYgKzc1LDIyIEBAIGJvb2wgUmVu
ZGVyU1ZHUmVzb3VyY2VTb2xpZENvbG9yOjphcHBseVJlc291cmNlKFJlbmRlck9iamVjdCogb2Jq
ZWN0LCBSZW5kZXJTdHlsCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLXZvaWQgUmVuZGVyU1ZHUmVz
b3VyY2VTb2xpZENvbG9yOjpwb3N0QXBwbHlSZXNvdXJjZShSZW5kZXJPYmplY3QqLCBHcmFwaGlj
c0NvbnRleHQqJiBjb250ZXh0LCB1bnNpZ25lZCBzaG9ydCByZXNvdXJjZU1vZGUsIGNvbnN0IFBh
dGgqIHBhdGgpCit2b2lkIFJlbmRlclNWR1Jlc291cmNlU29saWRDb2xvcjo6cG9zdEFwcGx5UmVz
b3VyY2UoUmVuZGVyT2JqZWN0KiwgR3JhcGhpY3NDb250ZXh0KiYgY29udGV4dCwgdW5zaWduZWQg
c2hvcnQgcmVzb3VyY2VNb2RlLCBjb25zdCBQYXRoKiBwYXRoLCBjb25zdCBSZW5kZXJTVkdTaGFw
ZSogc2hhcGUpCiB7CiAgICAgQVNTRVJUKGNvbnRleHQpOwogICAgIEFTU0VSVChyZXNvdXJjZU1v
ZGUgIT0gQXBwbHlUb0RlZmF1bHRNb2RlKTsKIAotICAgIGlmIChwYXRoICYmICEocmVzb3VyY2VN
b2RlICYgQXBwbHlUb1RleHRNb2RlKSkgewotICAgICAgICBpZiAocmVzb3VyY2VNb2RlICYgQXBw
bHlUb0ZpbGxNb2RlKQorICAgIGlmIChyZXNvdXJjZU1vZGUgJiBBcHBseVRvRmlsbE1vZGUpIHsK
KyAgICAgICAgaWYgKHBhdGgpCiAgICAgICAgICAgICBjb250ZXh0LT5maWxsUGF0aCgqcGF0aCk7
Ci0gICAgICAgIGVsc2UgaWYgKHJlc291cmNlTW9kZSAmIEFwcGx5VG9TdHJva2VNb2RlKQorICAg
ICAgICBlbHNlIGlmIChzaGFwZSkKKyAgICAgICAgICAgIHNoYXBlLT5maWxsU2hhcGUoY29udGV4
dCk7CisgICAgfQorICAgIGlmIChyZXNvdXJjZU1vZGUgJiBBcHBseVRvU3Ryb2tlTW9kZSkgewor
ICAgICAgICBpZiAocGF0aCkKICAgICAgICAgICAgIGNvbnRleHQtPnN0cm9rZVBhdGgoKnBhdGgp
OworICAgICAgICBlbHNlIGlmIChzaGFwZSkKKyAgICAgICAgICAgIHNoYXBlLT5zdHJva2VTaGFw
ZShjb250ZXh0KTsKICAgICB9CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VTb2xpZENvbG9yLmggYi9Tb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291cmNlU29saWRDb2xvci5oCmluZGV4IDAyY2ViMzEu
LjhiYmZkY2QgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVy
U1ZHUmVzb3VyY2VTb2xpZENvbG9yLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2
Zy9SZW5kZXJTVkdSZXNvdXJjZVNvbGlkQ29sb3IuaApAQCAtMzYsNyArMzYsNyBAQCBwdWJsaWM6
CiAgICAgdmlydHVhbCB2b2lkIHJlbW92ZUNsaWVudEZyb21DYWNoZShSZW5kZXJPYmplY3QqLCBi
b29sID0gdHJ1ZSkgeyB9CiAKICAgICB2aXJ0dWFsIGJvb2wgYXBwbHlSZXNvdXJjZShSZW5kZXJP
YmplY3QqLCBSZW5kZXJTdHlsZSosIEdyYXBoaWNzQ29udGV4dComLCB1bnNpZ25lZCBzaG9ydCBy
ZXNvdXJjZU1vZGUpOwotICAgIHZpcnR1YWwgdm9pZCBwb3N0QXBwbHlSZXNvdXJjZShSZW5kZXJP
YmplY3QqLCBHcmFwaGljc0NvbnRleHQqJiwgdW5zaWduZWQgc2hvcnQgcmVzb3VyY2VNb2RlLCBj
b25zdCBQYXRoKik7CisgICAgdmlydHVhbCB2b2lkIHBvc3RBcHBseVJlc291cmNlKFJlbmRlck9i
amVjdCosIEdyYXBoaWNzQ29udGV4dComLCB1bnNpZ25lZCBzaG9ydCByZXNvdXJjZU1vZGUsIGNv
bnN0IFBhdGgqLCBjb25zdCBSZW5kZXJTVkdTaGFwZSopOwogICAgIHZpcnR1YWwgRmxvYXRSZWN0
IHJlc291cmNlQm91bmRpbmdCb3goUmVuZGVyT2JqZWN0KikgeyByZXR1cm4gRmxvYXRSZWN0KCk7
IH0KIAogICAgIHZpcnR1YWwgUmVuZGVyU1ZHUmVzb3VyY2VUeXBlIHJlc291cmNlVHlwZSgpIGNv
bnN0IHsgcmV0dXJuIHNfcmVzb3VyY2VUeXBlOyB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1NoYXBlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9zdmcvUmVuZGVyU1ZHU2hhcGUuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAw
MDAwMDAuLmQ5Yjg2OWYKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvc3ZnL1JlbmRlclNWR1NoYXBlLmNwcApAQCAtMCwwICsxLDQ2MCBAQAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAwNCwgMjAwNSwgMjAwNyBOaWtvbGFzIFppbW1lcm1hbm4gPHppbW1lcm1hbm5A
a2RlLm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSwgMjAwOCBSb2IgQnVpcyA8YnVp
c0BrZGUub3JnPgorICogQ29weXJpZ2h0IChDKSAyMDA1LCAyMDA3IEVyaWMgU2VpZGVsIDxlcmlj
QHdlYmtpdC5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgR29vZ2xlLCBJbmMuCisgKiBDb3B5
cmlnaHQgKEMpIDIwMDkgRGlyayBTY2h1bHplIDxrcml0QHdlYmtpdC5vcmc+CisgKiBDb3B5cmln
aHQgKEMpIFJlc2VhcmNoIEluIE1vdGlvbiBMaW1pdGVkIDIwMTAuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgSmVmZiBTY2hpbGxlciA8Y29kZWRyZWFkQGdtYWls
LmNvbT4KKyAqIENvcHlyaWdodCAoQykgMjAxMSBSZW5hdGEgSG9kb3ZhbiA8cmVuaUB3ZWJraXQu
b3JnPgorICogQ29weXJpZ2h0IChDKSAyMDExIFVuaXZlcnNpdHkgb2YgU3plZ2VkCisgKgorICog
VGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFu
ZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2Vu
ZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJl
IEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQg
eW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBk
aXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJ
VEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YK
KyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4g
IFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUg
ZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBH
TlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGli
cmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhl
IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0
aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpbmNsdWRl
ICJjb25maWcuaCIKKworI2lmIEVOQUJMRShTVkcpCisjaW5jbHVkZSAiUmVuZGVyU1ZHU2hhcGUu
aCIKKworI2luY2x1ZGUgIkZsb2F0UG9pbnQuaCIKKyNpbmNsdWRlICJGbG9hdFF1YWQuaCIKKyNp
bmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKKyNpbmNsdWRlICJIaXRUZXN0UmVxdWVzdC5oIgor
I2luY2x1ZGUgIkxheW91dFJlcGFpbnRlci5oIgorI2luY2x1ZGUgIlBvaW50ZXJFdmVudHNIaXRS
dWxlcy5oIgorI2luY2x1ZGUgIlJlbmRlclNWR0NvbnRhaW5lci5oIgorI2luY2x1ZGUgIlJlbmRl
clNWR1Jlc291cmNlTWFya2VyLmgiCisjaW5jbHVkZSAiUmVuZGVyU1ZHUmVzb3VyY2VTb2xpZENv
bG9yLmgiCisjaW5jbHVkZSAiU1ZHUGF0aERhdGEuaCIKKyNpbmNsdWRlICJTVkdQYXRoRWxlbWVu
dC5oIgorI2luY2x1ZGUgIlNWR1JlbmRlclN1cHBvcnQuaCIKKyNpbmNsdWRlICJTVkdSZXNvdXJj
ZXMuaCIKKyNpbmNsdWRlICJTVkdTdHlsZWRUcmFuc2Zvcm1hYmxlRWxlbWVudC5oIgorI2luY2x1
ZGUgIlNWR1RyYW5zZm9ybUxpc3QuaCIKKyNpbmNsdWRlICJTVkdVUklSZWZlcmVuY2UuaCIKKyNp
bmNsdWRlICJTdHJva2VTdHlsZUFwcGxpZXIuaCIKKyNpbmNsdWRlIDx3dGYvTWF0aEV4dHJhcy5o
PgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK1JlbmRlclNWR1NoYXBlOjpSZW5kZXJTVkdTaGFw
ZShTVkdTdHlsZWRUcmFuc2Zvcm1hYmxlRWxlbWVudCogbm9kZSkKKyAgICA6IFJlbmRlclNWR01v
ZGVsT2JqZWN0KG5vZGUpCisgICAgLCBtX25lZWRzQm91bmRhcmllc1VwZGF0ZShmYWxzZSkgLy8g
RGVmYXVsdCBpcyBmYWxzZSwgdGhlIGNhY2hlZCByZWN0cyBhcmUgZW1wdHkgZnJvbSB0aGUgYmVn
aW5uaW5nLgorICAgICwgbV9uZWVkc1NoYXBlVXBkYXRlKHRydWUpIC8vIERlZmF1bHQgaXMgdHJ1
ZSwgc28gd2UgZ3JhYiBhIFBhdGggb2JqZWN0IG9uY2UgZnJvbSBTVkdTdHlsZWRUcmFuc2Zvcm1h
YmxlRWxlbWVudC4KKyAgICAsIG1fbmVlZHNUcmFuc2Zvcm1VcGRhdGUodHJ1ZSkgLy8gRGVmYXVs
dCBpcyB0cnVlLCBzbyB3ZSBncmFiIGEgQWZmaW5lVHJhbnNmb3JtIG9iamVjdCBvbmNlIGZyb20g
U1ZHU3R5bGVkVHJhbnNmb3JtYWJsZUVsZW1lbnQuCisgICAgLCBtX2ZpbGxGYWxsYmFjayhmYWxz
ZSkKK3sKK30KKworUmVuZGVyU1ZHU2hhcGU6OlJlbmRlclNWR1NoYXBlKFNWR1N0eWxlZFRyYW5z
Zm9ybWFibGVFbGVtZW50KiBub2RlLCBQYXRoKiBwYXRoLCBib29sIGlzRmlsbEZhbGxiYWNrKQor
ICAgIDogUmVuZGVyU1ZHTW9kZWxPYmplY3Qobm9kZSkKKyAgICAsIG1fcGF0aChhZG9wdFB0cihw
YXRoKSkKKyAgICAsIG1fZmlsbEZhbGxiYWNrKGlzRmlsbEZhbGxiYWNrKQoreworfQorCitSZW5k
ZXJTVkdTaGFwZTo6flJlbmRlclNWR1NoYXBlKCkKK3sKK30KKwordm9pZCBSZW5kZXJTVkdTaGFw
ZTo6Y3JlYXRlU2hhcGUoKQoreworICAgIEFTU0VSVCghbV9wYXRoKTsKKyAgICBtX3BhdGggPSBh
ZG9wdFB0cihuZXcgUGF0aCk7CisgICAgQVNTRVJUKGlzRW1wdHkoKSk7CisKKyAgICBTVkdQYXRo
RWxlbWVudCogZWxlbWVudCA9IHN0YXRpY19jYXN0PFNWR1BhdGhFbGVtZW50Kj4obm9kZSgpKTsK
KyAgICB1cGRhdGVQYXRoRnJvbUdyYXBoaWNzRWxlbWVudChlbGVtZW50LCBwYXRoKCkpOworfQor
Citib29sIFJlbmRlclNWR1NoYXBlOjppc0VtcHR5KCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9w
YXRoLT5pc0VtcHR5KCk7Cit9CisKK3ZvaWQgUmVuZGVyU1ZHU2hhcGU6OmZpbGxTaGFwZShHcmFw
aGljc0NvbnRleHQqIGNvbnRleHQpIGNvbnN0Cit7CisgICAgY29udGV4dC0+ZmlsbFBhdGgocGF0
aCgpKTsKK30KKworRmxvYXRSZWN0IFJlbmRlclNWR1NoYXBlOjpvYmplY3RCb3VuZGluZ0JveCgp
IGNvbnN0Cit7CisgICAgcmV0dXJuIG1fcGF0aC0+ZmFzdEJvdW5kaW5nUmVjdCgpOworfQorCit2
b2lkIFJlbmRlclNWR1NoYXBlOjpzdHJva2VTaGFwZShHcmFwaGljc0NvbnRleHQqIGNvbnRleHQp
IGNvbnN0Cit7CisgICAgY29udGV4dC0+c3Ryb2tlUGF0aChwYXRoKCkpOworfQorCitib29sIFJl
bmRlclNWR1NoYXBlOjpzaGFwZURlcGVuZGVudFN0cm9rZUNvbnRhaW5zKGNvbnN0IEZsb2F0UG9p
bnQmIHBvaW50KSBjb25zdAoreworICAgIEJvdW5kaW5nUmVjdFN0cm9rZVN0eWxlQXBwbGllciBh
cHBsaWVyKHRoaXMsIHN0eWxlKCkpOworICAgIHJldHVybiBtX3BhdGgtPnN0cm9rZUNvbnRhaW5z
KCZhcHBsaWVyLCBwb2ludCk7Cit9CisKK2Jvb2wgUmVuZGVyU1ZHU2hhcGU6OnNoYXBlRGVwZW5k
ZW50RmlsbENvbnRhaW5zKGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50LCBjb25zdCBXaW5kUnVsZSBm
aWxsUnVsZSkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9wYXRoLT5jb250YWlucyhwb2ludCwgZmls
bFJ1bGUpOworfQorCitib29sIFJlbmRlclNWR1NoYXBlOjpmaWxsQ29udGFpbnMoY29uc3QgRmxv
YXRQb2ludCYgcG9pbnQsIGJvb2wgcmVxdWlyZXNGaWxsLCBjb25zdCBXaW5kUnVsZSBmaWxsUnVs
ZSkKK3sKKyAgICBpZiAoIW1fZmlsbEJvdW5kaW5nQm94LmNvbnRhaW5zKHBvaW50KSkKKyAgICAg
ICAgcmV0dXJuIGZhbHNlOworCisgICAgQ29sb3IgZmFsbGJhY2tDb2xvcjsKKyAgICBpZiAocmVx
dWlyZXNGaWxsICYmICFSZW5kZXJTVkdSZXNvdXJjZTo6ZmlsbFBhaW50aW5nUmVzb3VyY2UodGhp
cywgc3R5bGUoKSwgZmFsbGJhY2tDb2xvcikpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAg
IHJldHVybiBzaGFwZURlcGVuZGVudEZpbGxDb250YWlucyhwb2ludCwgZmlsbFJ1bGUpOworfQor
Citib29sIFJlbmRlclNWR1NoYXBlOjpzdHJva2VDb250YWlucyhjb25zdCBGbG9hdFBvaW50JiBw
b2ludCwgYm9vbCByZXF1aXJlc1N0cm9rZSkKK3sKKyAgICBpZiAoIW1fc3Ryb2tlQW5kTWFya2Vy
Qm91bmRpbmdCb3guY29udGFpbnMocG9pbnQpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAg
ICBDb2xvciBmYWxsYmFja0NvbG9yOworICAgIGlmIChyZXF1aXJlc1N0cm9rZSAmJiAhUmVuZGVy
U1ZHUmVzb3VyY2U6OnN0cm9rZVBhaW50aW5nUmVzb3VyY2UodGhpcywgc3R5bGUoKSwgZmFsbGJh
Y2tDb2xvcikpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGlmIChzaG91bGRTdHJva2Va
ZXJvTGVuZ3RoU3VicGF0aCgpKQorICAgICAgICByZXR1cm4gemVyb0xlbmd0aFN1YnBhdGhSZWN0
KCkuY29udGFpbnMocG9pbnQpOworCisgICAgY29uc3QgU1ZHUmVuZGVyU3R5bGUqIHN2Z1N0eWxl
ID0gc3R5bGUoKS0+c3ZnU3R5bGUoKTsKKyAgICBpZiAoIXN2Z1N0eWxlLT5zdHJva2VEYXNoQXJy
YXkoKS5pc0VtcHR5KCkgfHwgc3ZnU3R5bGUtPnN0cm9rZU1pdGVyTGltaXQoKSAhPSBzdmdTdHls
ZS0+aW5pdGlhbFN0cm9rZU1pdGVyTGltaXQoKQorICAgICAgICB8fCBzdmdTdHlsZS0+am9pblN0
eWxlKCkgIT0gc3ZnU3R5bGUtPmluaXRpYWxKb2luU3R5bGUoKSB8fCBzdmdTdHlsZS0+Y2FwU3R5
bGUoKSAhPSBzdmdTdHlsZS0+aW5pdGlhbENhcFN0eWxlKCkgfHwgc3RhdGljX2Nhc3Q8U1ZHRWxl
bWVudCo+KG5vZGUoKSktPmlzU3R5bGVkKCkpIHsKKyAgICAgICAgaWYgKCFtX3BhdGgpCisgICAg
ICAgICAgICBSZW5kZXJTVkdTaGFwZTo6Y3JlYXRlU2hhcGUoKTsKKyAgICAgICAgcmV0dXJuIFJl
bmRlclNWR1NoYXBlOjpzaGFwZURlcGVuZGVudFN0cm9rZUNvbnRhaW5zKHBvaW50KTsKKyAgICB9
CisgICAgcmV0dXJuIHNoYXBlRGVwZW5kZW50U3Ryb2tlQ29udGFpbnMocG9pbnQpOworfQorCit2
b2lkIFJlbmRlclNWR1NoYXBlOjpsYXlvdXQoKQoreworICAgIExheW91dFJlcGFpbnRlciByZXBh
aW50ZXIoKnRoaXMsIGNoZWNrRm9yUmVwYWludER1cmluZ0xheW91dCgpICYmIHNlbGZOZWVkc0xh
eW91dCgpKTsKKyAgICBTVkdTdHlsZWRUcmFuc2Zvcm1hYmxlRWxlbWVudCogZWxlbWVudCA9IHN0
YXRpY19jYXN0PFNWR1N0eWxlZFRyYW5zZm9ybWFibGVFbGVtZW50Kj4obm9kZSgpKTsKKworICAg
IGJvb2wgdXBkYXRlQ2FjaGVkQm91bmRhcmllc0luUGFyZW50cyA9IGZhbHNlOworCisgICAgYm9v
bCBuZWVkc1NoYXBlVXBkYXRlID0gbV9uZWVkc1NoYXBlVXBkYXRlOworICAgIGlmIChuZWVkc1No
YXBlVXBkYXRlKSB7CisgICAgICAgIHNldElzUGFpbnRpbmdGYWxsYmFjayhmYWxzZSk7CisgICAg
ICAgIG1fcGF0aC5jbGVhcigpOworICAgICAgICBjcmVhdGVTaGFwZSgpOworICAgICAgICBtX25l
ZWRzU2hhcGVVcGRhdGUgPSBmYWxzZTsKKyAgICAgICAgdXBkYXRlQ2FjaGVkQm91bmRhcmllc0lu
UGFyZW50cyA9IHRydWU7CisgICAgfQorCisgICAgaWYgKG1fbmVlZHNUcmFuc2Zvcm1VcGRhdGUp
IHsKKyAgICAgICAgbV9sb2NhbFRyYW5zZm9ybSA9IGVsZW1lbnQtPmFuaW1hdGVkTG9jYWxUcmFu
c2Zvcm0oKTsKKyAgICAgICAgbV9uZWVkc1RyYW5zZm9ybVVwZGF0ZSA9IGZhbHNlOworICAgICAg
ICB1cGRhdGVDYWNoZWRCb3VuZGFyaWVzSW5QYXJlbnRzID0gdHJ1ZTsKKyAgICB9CisKKyAgICBp
ZiAobV9uZWVkc0JvdW5kYXJpZXNVcGRhdGUpIHsKKyAgICAgICAgc2V0SXNQYWludGluZ0ZhbGxi
YWNrKGZhbHNlKTsKKyAgICAgICAgbV9wYXRoLmNsZWFyKCk7CisgICAgICAgIGNyZWF0ZVNoYXBl
KCk7CisgICAgICAgIHVwZGF0ZUNhY2hlZEJvdW5kYXJpZXNJblBhcmVudHMgPSB0cnVlOworICAg
IH0KKworICAgIC8vIEludmFsaWRhdGUgYWxsIHJlc291cmNlcyBvZiB0aGlzIGNsaWVudCBpZiBv
dXIgbGF5b3V0IGNoYW5nZWQuCisgICAgaWYgKG1fZXZlckhhZExheW91dCAmJiBzZWxmTmVlZHNM
YXlvdXQoKSkgeworICAgICAgICBTVkdSZXNvdXJjZXNDYWNoZTo6Y2xpZW50TGF5b3V0Q2hhbmdl
ZCh0aGlzKTsKKyAgICAgICAgbV9tYXJrZXJMYXlvdXRJbmZvLmNsZWFyKCk7CisgICAgfQorCisg
ICAgLy8gQXQgdGhpcyBwb2ludCBMYXlvdXRSZXBhaW50ZXIgYWxyZWFkeSBncmFiYmVkIHRoZSBv
bGQgYm91bmRzLAorICAgIC8vIHJlY2FsY3VsYXRlIHRoZW0gbm93IHNvIHJlcGFpbnRBZnRlckxh
eW91dCgpIHVzZXMgdGhlIG5ldyBib3VuZHMuCisgICAgaWYgKG5lZWRzU2hhcGVVcGRhdGUgfHwg
bV9uZWVkc0JvdW5kYXJpZXNVcGRhdGUpIHsKKyAgICAgICAgdXBkYXRlQ2FjaGVkQm91bmRhcmll
cygpOworICAgICAgICBtX25lZWRzQm91bmRhcmllc1VwZGF0ZSA9IGZhbHNlOworICAgIH0KKwor
ICAgIC8vIElmIG91ciBib3VuZHMgY2hhbmdlZCwgbm90aWZ5IHRoZSBwYXJlbnRzLgorICAgIGlm
ICh1cGRhdGVDYWNoZWRCb3VuZGFyaWVzSW5QYXJlbnRzKQorICAgICAgICBSZW5kZXJTVkdNb2Rl
bE9iamVjdDo6c2V0TmVlZHNCb3VuZGFyaWVzVXBkYXRlKCk7CisKKyAgICByZXBhaW50ZXIucmVw
YWludEFmdGVyTGF5b3V0KCk7CisgICAgc2V0TmVlZHNMYXlvdXQoZmFsc2UpOworfQorCitib29s
IFJlbmRlclNWR1NoYXBlOjpzaG91bGRTdHJva2VaZXJvTGVuZ3RoU3VicGF0aCgpIGNvbnN0Cit7
CisgICAgLy8gU3BlYygxMS40KTogQW55IHplcm8gbGVuZ3RoIHN1YnBhdGggc2hhbGwgbm90IGJl
IHN0cm9rZWQgaWYgdGhlIOKAmHN0cm9rZS1saW5lY2Fw4oCZIHByb3BlcnR5IGhhcyBhIHZhbHVl
IG9mIGJ1dHQKKyAgICAvLyBidXQgc2hhbGwgYmUgc3Ryb2tlZCBpZiB0aGUg4oCYc3Ryb2tlLWxp
bmVjYXDigJkgcHJvcGVydHkgaGFzIGEgdmFsdWUgb2Ygcm91bmQgb3Igc3F1YXJlCisgICAgcmV0
dXJuIHN0eWxlKCktPnN2Z1N0eWxlKCktPmhhc1N0cm9rZSgpICYmIHN0eWxlKCktPnN2Z1N0eWxl
KCktPmNhcFN0eWxlKCkgIT0gQnV0dENhcCAmJiAhbV9maWxsQm91bmRpbmdCb3gud2lkdGgoKSAm
JiAhbV9maWxsQm91bmRpbmdCb3guaGVpZ2h0KCk7Cit9CisKK0Zsb2F0UmVjdCBSZW5kZXJTVkdT
aGFwZTo6emVyb0xlbmd0aFN1YnBhdGhSZWN0KCkgY29uc3QKK3sKKyAgICBmbG9hdCBzdHJva2VX
aWR0aCA9IHRoaXMtPnN0cm9rZVdpZHRoKCk7CisgICAgcmV0dXJuIEZsb2F0UmVjdChtX2ZpbGxC
b3VuZGluZ0JveC54KCkgLSBzdHJva2VXaWR0aCAvIDIsIG1fZmlsbEJvdW5kaW5nQm94LnkoKSAt
IHN0cm9rZVdpZHRoIC8gMiwgc3Ryb2tlV2lkdGgsIHN0cm9rZVdpZHRoKTsKK30KKwordm9pZCBS
ZW5kZXJTVkdTaGFwZTo6c2V0dXBTcXVhcmVDYXBQYXRoKFBhdGgqJiB1c2VQYXRoLCBpbnQmIGFw
cGx5TW9kZSkKK3sKKyAgICAvLyBTcGVjKDExLjQpOiBBbnkgemVybyBsZW5ndGggc3VicGF0aCBz
aGFsbCBub3QgYmUgc3Ryb2tlZCBpZiB0aGUg4oCYc3Ryb2tlLWxpbmVjYXDigJkgcHJvcGVydHkg
aGFzIGEgdmFsdWUgb2YgYnV0dAorICAgIC8vIGJ1dCBzaGFsbCBiZSBzdHJva2VkIGlmIHRoZSDi
gJhzdHJva2UtbGluZWNhcOKAmSBwcm9wZXJ0eSBoYXMgYSB2YWx1ZSBvZiByb3VuZCBvciBzcXVh
cmUKKyAgICBERUZJTkVfU1RBVElDX0xPQ0FMKFBhdGgsIHRlbXBQYXRoLCAoKSk7CisKKyAgICBh
cHBseU1vZGUgPSBBcHBseVRvRmlsbE1vZGU7CisgICAgdXNlUGF0aCA9ICZ0ZW1wUGF0aDsKKyAg
ICB1c2VQYXRoLT5jbGVhcigpOworICAgIGlmIChzdHlsZSgpLT5zdmdTdHlsZSgpLT5jYXBTdHls
ZSgpID09IFNxdWFyZUNhcCkKKyAgICAgICAgdXNlUGF0aC0+YWRkUmVjdCh6ZXJvTGVuZ3RoU3Vi
cGF0aFJlY3QoKSk7CisgICAgZWxzZQorICAgICAgICB1c2VQYXRoLT5hZGRFbGxpcHNlKHplcm9M
ZW5ndGhTdWJwYXRoUmVjdCgpKTsKK30KKworYm9vbCBSZW5kZXJTVkdTaGFwZTo6c2V0dXBOb25T
Y2FsaW5nU3Ryb2tlUGF0aChQYXRoKiYgdXNlUGF0aCwgR3JhcGhpY3NDb250ZXh0U3RhdGVTYXZl
ciYgc3RhdGVTYXZlcikKK3sKKyAgICBERUZJTkVfU1RBVElDX0xPQ0FMKFBhdGgsIHRlbXBQYXRo
LCAoKSk7CisKKyAgICBTVkdTdHlsZWRUcmFuc2Zvcm1hYmxlRWxlbWVudCogZWxlbWVudCA9IHN0
YXRpY19jYXN0PFNWR1N0eWxlZFRyYW5zZm9ybWFibGVFbGVtZW50Kj4obm9kZSgpKTsKKyAgICBB
ZmZpbmVUcmFuc2Zvcm0gbm9uU2NhbGluZ1N0cm9rZVRyYW5zZm9ybSA9IGVsZW1lbnQtPmdldFNj
cmVlbkNUTShTVkdMb2NhdGFibGU6OkRpc2FsbG93U3R5bGVVcGRhdGUpOworICAgIGlmICghbm9u
U2NhbGluZ1N0cm9rZVRyYW5zZm9ybS5pc0ludmVydGlibGUoKSkKKyAgICAgICAgcmV0dXJuIGZh
bHNlOworCisgICAgdGVtcFBhdGggPSAqbV9wYXRoOworICAgIHVzZVBhdGggPSAmdGVtcFBhdGg7
CisgICAgdGVtcFBhdGgudHJhbnNmb3JtKG5vblNjYWxpbmdTdHJva2VUcmFuc2Zvcm0pOworCisg
ICAgc3RhdGVTYXZlci5zYXZlKCk7CisgICAgc3RhdGVTYXZlci5jb250ZXh0KCktPmNvbmNhdENU
TShub25TY2FsaW5nU3Ryb2tlVHJhbnNmb3JtLmludmVyc2UoKSk7CisgICAgcmV0dXJuIHRydWU7
Cit9CisKK3ZvaWQgUmVuZGVyU1ZHU2hhcGU6OmZpbGxBbmRTdHJva2VQYXRoKEdyYXBoaWNzQ29u
dGV4dCogY29udGV4dCkKK3sKKyAgICBSZW5kZXJTdHlsZSogc3R5bGUgPSB0aGlzLT5zdHlsZSgp
OworCisgICAgQ29sb3IgZmFsbGJhY2tDb2xvcjsKKyAgICBpZiAoUmVuZGVyU1ZHUmVzb3VyY2Uq
IGZpbGxQYWludGluZ1Jlc291cmNlID0gUmVuZGVyU1ZHUmVzb3VyY2U6OmZpbGxQYWludGluZ1Jl
c291cmNlKHRoaXMsIHN0eWxlLCBmYWxsYmFja0NvbG9yKSkgeworICAgICAgICBpZiAoZmlsbFBh
aW50aW5nUmVzb3VyY2UtPmFwcGx5UmVzb3VyY2UodGhpcywgc3R5bGUsIGNvbnRleHQsIEFwcGx5
VG9GaWxsTW9kZSkpCisgICAgICAgICAgICBmaWxsUGFpbnRpbmdSZXNvdXJjZS0+cG9zdEFwcGx5
UmVzb3VyY2UodGhpcywgY29udGV4dCwgQXBwbHlUb0ZpbGxNb2RlLCAwLCB0aGlzKTsKKyAgICAg
ICAgZWxzZSBpZiAoZmFsbGJhY2tDb2xvci5pc1ZhbGlkKCkpIHsKKyAgICAgICAgICAgIFJlbmRl
clNWR1Jlc291cmNlU29saWRDb2xvciogZmFsbGJhY2tSZXNvdXJjZSA9IFJlbmRlclNWR1Jlc291
cmNlOjpzaGFyZWRTb2xpZFBhaW50aW5nUmVzb3VyY2UoKTsKKyAgICAgICAgICAgIGZhbGxiYWNr
UmVzb3VyY2UtPnNldENvbG9yKGZhbGxiYWNrQ29sb3IpOworICAgICAgICAgICAgaWYgKGZhbGxi
YWNrUmVzb3VyY2UtPmFwcGx5UmVzb3VyY2UodGhpcywgc3R5bGUsIGNvbnRleHQsIEFwcGx5VG9G
aWxsTW9kZSkpCisgICAgICAgICAgICAgICAgZmFsbGJhY2tSZXNvdXJjZS0+cG9zdEFwcGx5UmVz
b3VyY2UodGhpcywgY29udGV4dCwgQXBwbHlUb0ZpbGxNb2RlLCAwLCB0aGlzKTsKKyAgICAgICAg
fQorICAgIH0KKworICAgIGZhbGxiYWNrQ29sb3IgPSBDb2xvcigpOworICAgIFJlbmRlclNWR1Jl
c291cmNlKiBzdHJva2VQYWludGluZ1Jlc291cmNlID0gUmVuZGVyU1ZHUmVzb3VyY2U6OnN0cm9r
ZVBhaW50aW5nUmVzb3VyY2UodGhpcywgc3R5bGUsIGZhbGxiYWNrQ29sb3IpOworICAgIGlmICgh
c3Ryb2tlUGFpbnRpbmdSZXNvdXJjZSkKKyAgICAgICAgcmV0dXJuOworCisgICAgUGF0aCogdXNl
UGF0aCA9IG1fcGF0aC5nZXQoKTsKKyAgICBpbnQgYXBwbHlNb2RlID0gQXBwbHlUb1N0cm9rZU1v
ZGU7CisKKyAgICBib29sIG5vblNjYWxpbmdTdHJva2UgPSBzdHlsZS0+c3ZnU3R5bGUoKS0+dmVj
dG9yRWZmZWN0KCkgPT0gVkVfTk9OX1NDQUxJTkdfU1RST0tFOworICAgIE93blB0cjxQYXRoPiBz
YXZlUGF0aDsKKworICAgIEdyYXBoaWNzQ29udGV4dFN0YXRlU2F2ZXIgc3RhdGVTYXZlcigqY29u
dGV4dCwgZmFsc2UpOworCisgICAgLy8gU3BlYygxMS40KTogQW55IHplcm8gbGVuZ3RoIHN1YnBh
dGggc2hhbGwgbm90IGJlIHN0cm9rZWQgaWYgdGhlIOKAmHN0cm9rZS1saW5lY2Fw4oCZIHByb3Bl
cnR5IGhhcyBhIHZhbHVlIG9mIGJ1dHQKKyAgICAvLyBidXQgc2hhbGwgYmUgc3Ryb2tlZCBpZiB0
aGUg4oCYc3Ryb2tlLWxpbmVjYXDigJkgcHJvcGVydHkgaGFzIGEgdmFsdWUgb2Ygcm91bmQgb3Ig
c3F1YXJlCisgICAgLy8gRklYTUU6IHRoaXMgZG9lcyBub3Qgd29yayBmb3IgemVyby1sZW5ndGgg
c3VicGF0aHMsIG9ubHkgd2hlbiB0b3RhbCBwYXRoIGlzIHplcm8tbGVuZ3RoCisgICAgaWYgKHNo
b3VsZFN0cm9rZVplcm9MZW5ndGhTdWJwYXRoKCkpIHsKKyAgICAgICAgaWYgKCFtX3BhdGgpIHsK
KyAgICAgICAgICAgIFJlbmRlclNWR1NoYXBlOjpjcmVhdGVTaGFwZSgpOworICAgICAgICAgICAg
c2V0SXNQYWludGluZ0ZhbGxiYWNrKHRydWUpOworICAgICAgICAgICAgdXNlUGF0aCA9IG1fcGF0
aC5nZXQoKTsKKyAgICAgICAgfQorICAgICAgICBzZXR1cFNxdWFyZUNhcFBhdGgodXNlUGF0aCwg
YXBwbHlNb2RlKTsKKyAgICB9IGVsc2UgaWYgKG5vblNjYWxpbmdTdHJva2UpIHsKKyAgICAgICAg
aWYgKCFzZXR1cE5vblNjYWxpbmdTdHJva2VQYXRoKHVzZVBhdGgsIHN0YXRlU2F2ZXIpKQorICAg
ICAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBpZiAoc3Ryb2tlUGFpbnRpbmdSZXNvdXJjZS0+
YXBwbHlSZXNvdXJjZSh0aGlzLCBzdHlsZSwgY29udGV4dCwgYXBwbHlNb2RlKSkgeworICAgICAg
ICBzdHJva2VQYWludGluZ1Jlc291cmNlLT5wb3N0QXBwbHlSZXNvdXJjZSh0aGlzLCBjb250ZXh0
LCBhcHBseU1vZGUsIHVzZVBhdGgsIHRoaXMpOworICAgICAgICBpZiAoc2F2ZVBhdGgpCisgICAg
ICAgICAgICBtX3BhdGggPSBzYXZlUGF0aC5yZWxlYXNlKCk7CisgICAgICAgIHJldHVybjsKKyAg
ICB9CisgICAgaWYgKCFmYWxsYmFja0NvbG9yLmlzVmFsaWQoKSkgeworICAgICAgICBpZiAoc2F2
ZVBhdGgpCisgICAgICAgICAgICBtX3BhdGggPSBzYXZlUGF0aC5yZWxlYXNlKCk7CisgICAgICAg
IHJldHVybjsKKyAgICB9CisgICAgUmVuZGVyU1ZHUmVzb3VyY2VTb2xpZENvbG9yKiBmYWxsYmFj
a1Jlc291cmNlID0gUmVuZGVyU1ZHUmVzb3VyY2U6OnNoYXJlZFNvbGlkUGFpbnRpbmdSZXNvdXJj
ZSgpOworICAgIGZhbGxiYWNrUmVzb3VyY2UtPnNldENvbG9yKGZhbGxiYWNrQ29sb3IpOworICAg
IGlmIChmYWxsYmFja1Jlc291cmNlLT5hcHBseVJlc291cmNlKHRoaXMsIHN0eWxlLCBjb250ZXh0
LCBhcHBseU1vZGUpKQorICAgICAgICBmYWxsYmFja1Jlc291cmNlLT5wb3N0QXBwbHlSZXNvdXJj
ZSh0aGlzLCBjb250ZXh0LCBhcHBseU1vZGUsIHVzZVBhdGgsIHRoaXMpOworICAgIGlmIChzYXZl
UGF0aCkKKyAgICAgICAgbV9wYXRoID0gc2F2ZVBhdGgucmVsZWFzZSgpOworfQorCit2b2lkIFJl
bmRlclNWR1NoYXBlOjpwYWludChQYWludEluZm8mIHBhaW50SW5mbywgY29uc3QgSW50UG9pbnQm
KQoreworICAgIGlmIChwYWludEluZm8uY29udGV4dC0+cGFpbnRpbmdEaXNhYmxlZCgpIHx8IHN0
eWxlKCktPnZpc2liaWxpdHkoKSA9PSBISURERU4gfHwgaXNFbXB0eSgpKQorICAgICAgICByZXR1
cm47CisgICAgRmxvYXRSZWN0IGJvdW5kaW5nQm94ID0gcmVwYWludFJlY3RJbkxvY2FsQ29vcmRp
bmF0ZXMoKTsKKyAgICBpZiAoIVNWR1JlbmRlclN1cHBvcnQ6OnBhaW50SW5mb0ludGVyc2VjdHNS
ZXBhaW50UmVjdChib3VuZGluZ0JveCwgbV9sb2NhbFRyYW5zZm9ybSwgcGFpbnRJbmZvKSkKKyAg
ICAgICAgcmV0dXJuOworCisgICAgUGFpbnRJbmZvIGNoaWxkUGFpbnRJbmZvKHBhaW50SW5mbyk7
CisgICAgYm9vbCBkcmF3c091dGxpbmUgPSBzdHlsZSgpLT5vdXRsaW5lV2lkdGgoKSAmJiAoY2hp
bGRQYWludEluZm8ucGhhc2UgPT0gUGFpbnRQaGFzZU91dGxpbmUgfHwgY2hpbGRQYWludEluZm8u
cGhhc2UgPT0gUGFpbnRQaGFzZVNlbGZPdXRsaW5lKTsKKyAgICBpZiAoZHJhd3NPdXRsaW5lIHx8
IGNoaWxkUGFpbnRJbmZvLnBoYXNlID09IFBhaW50UGhhc2VGb3JlZ3JvdW5kKSB7CisgICAgICAg
IEdyYXBoaWNzQ29udGV4dFN0YXRlU2F2ZXIgc3RhdGVTYXZlcigqY2hpbGRQYWludEluZm8uY29u
dGV4dCk7CisgICAgICAgIGNoaWxkUGFpbnRJbmZvLmFwcGx5VHJhbnNmb3JtKG1fbG9jYWxUcmFu
c2Zvcm0pOworCisgICAgICAgIGlmIChjaGlsZFBhaW50SW5mby5waGFzZSA9PSBQYWludFBoYXNl
Rm9yZWdyb3VuZCkgeworICAgICAgICAgICAgUGFpbnRJbmZvIHNhdmVkSW5mbyhjaGlsZFBhaW50
SW5mbyk7CisKKyAgICAgICAgICAgIGlmIChTVkdSZW5kZXJTdXBwb3J0OjpwcmVwYXJlVG9SZW5k
ZXJTVkdDb250ZW50KHRoaXMsIGNoaWxkUGFpbnRJbmZvKSkgeworICAgICAgICAgICAgICAgIGNv
bnN0IFNWR1JlbmRlclN0eWxlKiBzdmdTdHlsZSA9IHN0eWxlKCktPnN2Z1N0eWxlKCk7CisgICAg
ICAgICAgICAgICAgaWYgKHN2Z1N0eWxlLT5zaGFwZVJlbmRlcmluZygpID09IFNSX0NSSVNQRURH
RVMpCisgICAgICAgICAgICAgICAgICAgIGNoaWxkUGFpbnRJbmZvLmNvbnRleHQtPnNldFNob3Vs
ZEFudGlhbGlhcyhmYWxzZSk7CisKKyAgICAgICAgICAgICAgICBmaWxsQW5kU3Ryb2tlUGF0aChj
aGlsZFBhaW50SW5mby5jb250ZXh0KTsKKworICAgICAgICAgICAgICAgIGlmIChzdmdTdHlsZS0+
aGFzTWFya2VycygpKQorICAgICAgICAgICAgICAgICAgICBtX21hcmtlckxheW91dEluZm8uZHJh
d01hcmtlcnMoY2hpbGRQYWludEluZm8pOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBT
VkdSZW5kZXJTdXBwb3J0OjpmaW5pc2hSZW5kZXJTVkdDb250ZW50KHRoaXMsIGNoaWxkUGFpbnRJ
bmZvLCBzYXZlZEluZm8uY29udGV4dCk7CisgICAgICAgIH0KKworICAgICAgICBpZiAoZHJhd3NP
dXRsaW5lKQorICAgICAgICAgICAgcGFpbnRPdXRsaW5lKGNoaWxkUGFpbnRJbmZvLmNvbnRleHQs
IEludFJlY3QoYm91bmRpbmdCb3gpKTsKKyAgICB9Cit9CisKKy8vIFRoaXMgbWV0aG9kIGlzIGNh
bGxlZCBmcm9tIGluc2lkZSBwYWludE91dGxpbmUoKSBzaW5jZSB3ZSBjYWxsIHBhaW50T3V0bGlu
ZSgpCisvLyB3aGlsZSB0cmFuc2Zvcm1lZCB0byBvdXIgY29vcmQgc3lzdGVtLCByZXR1cm4gbG9j
YWwgY29vcmRzCit2b2lkIFJlbmRlclNWR1NoYXBlOjphZGRGb2N1c1JpbmdSZWN0cyhWZWN0b3I8
TGF5b3V0UmVjdD4mIHJlY3RzLCBjb25zdCBMYXlvdXRQb2ludCYpCit7CisgICAgTGF5b3V0UmVj
dCByZWN0ID0gZW5jbG9zaW5nTGF5b3V0UmVjdChyZXBhaW50UmVjdEluTG9jYWxDb29yZGluYXRl
cygpKTsKKyAgICBpZiAoIXJlY3QuaXNFbXB0eSgpKQorICAgICAgICByZWN0cy5hcHBlbmQocmVj
dCk7Cit9CisKK2Jvb2wgUmVuZGVyU1ZHU2hhcGU6Om5vZGVBdEZsb2F0UG9pbnQoY29uc3QgSGl0
VGVzdFJlcXVlc3QmIHJlcXVlc3QsIEhpdFRlc3RSZXN1bHQmIHJlc3VsdCwgY29uc3QgRmxvYXRQ
b2ludCYgcG9pbnRJblBhcmVudCwgSGl0VGVzdEFjdGlvbiBoaXRUZXN0QWN0aW9uKQoreworICAg
IC8vIFdlIG9ubHkgZHJhdyBpbiB0aGUgZm9yZ3JvdW5kIHBoYXNlLCBzbyB3ZSBvbmx5IGhpdC10
ZXN0IHRoZW4uCisgICAgaWYgKGhpdFRlc3RBY3Rpb24gIT0gSGl0VGVzdEZvcmVncm91bmQpCisg
ICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIEZsb2F0UG9pbnQgbG9jYWxQb2ludCA9IG1fbG9j
YWxUcmFuc2Zvcm0uaW52ZXJzZSgpLm1hcFBvaW50KHBvaW50SW5QYXJlbnQpOworCisgICAgaWYg
KCFTVkdSZW5kZXJTdXBwb3J0Ojpwb2ludEluQ2xpcHBpbmdBcmVhKHRoaXMsIGxvY2FsUG9pbnQp
KQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBQb2ludGVyRXZlbnRzSGl0UnVsZXMgaGl0
UnVsZXMoUG9pbnRlckV2ZW50c0hpdFJ1bGVzOjpTVkdfUEFUSF9ISVRURVNUSU5HLCByZXF1ZXN0
LCBzdHlsZSgpLT5wb2ludGVyRXZlbnRzKCkpOworICAgIGJvb2wgaXNWaXNpYmxlID0gKHN0eWxl
KCktPnZpc2liaWxpdHkoKSA9PSBWSVNJQkxFKTsKKyAgICBpZiAoaXNWaXNpYmxlIHx8ICFoaXRS
dWxlcy5yZXF1aXJlVmlzaWJsZSkgeworICAgICAgICBjb25zdCBTVkdSZW5kZXJTdHlsZSogc3Zn
U3R5bGUgPSBzdHlsZSgpLT5zdmdTdHlsZSgpOworICAgICAgICBXaW5kUnVsZSBmaWxsUnVsZSA9
IHN2Z1N0eWxlLT5maWxsUnVsZSgpOworICAgICAgICBpZiAocmVxdWVzdC5zdmdDbGlwQ29udGVu
dCgpKQorICAgICAgICAgICAgZmlsbFJ1bGUgPSBzdmdTdHlsZS0+Y2xpcFJ1bGUoKTsKKyAgICAg
ICAgaWYgKChoaXRSdWxlcy5jYW5IaXRTdHJva2UgJiYgKHN2Z1N0eWxlLT5oYXNTdHJva2UoKSB8
fCAhaGl0UnVsZXMucmVxdWlyZVN0cm9rZSkgJiYgc3Ryb2tlQ29udGFpbnMobG9jYWxQb2ludCwg
aGl0UnVsZXMucmVxdWlyZVN0cm9rZSkpCisgICAgICAgICAgICB8fCAoaGl0UnVsZXMuY2FuSGl0
RmlsbCAmJiAoc3ZnU3R5bGUtPmhhc0ZpbGwoKSB8fCAhaGl0UnVsZXMucmVxdWlyZUZpbGwpICYm
IGZpbGxDb250YWlucyhsb2NhbFBvaW50LCBoaXRSdWxlcy5yZXF1aXJlRmlsbCwgZmlsbFJ1bGUp
KSkgeworICAgICAgICAgICAgdXBkYXRlSGl0VGVzdFJlc3VsdChyZXN1bHQsIHJvdW5kZWRMYXlv
dXRQb2ludChsb2NhbFBvaW50KSk7CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAg
fQorICAgIH0KKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK0Zsb2F0UmVjdCBSZW5kZXJTVkdTaGFw
ZTo6Y2FsY3VsYXRlTWFya2VyQm91bmRzSWZOZWVkZWQoKQoreworICAgIFNWR0VsZW1lbnQqIHN2
Z0VsZW1lbnQgPSBzdGF0aWNfY2FzdDxTVkdFbGVtZW50Kj4obm9kZSgpKTsKKyAgICBBU1NFUlQo
c3ZnRWxlbWVudCAmJiBzdmdFbGVtZW50LT5kb2N1bWVudCgpKTsKKyAgICBpZiAoIXN2Z0VsZW1l
bnQtPmlzU3R5bGVkKCkpCisgICAgICAgIHJldHVybiBGbG9hdFJlY3QoKTsKKworICAgIFNWR1N0
eWxlZEVsZW1lbnQqIHN0eWxlZEVsZW1lbnQgPSBzdGF0aWNfY2FzdDxTVkdTdHlsZWRFbGVtZW50
Kj4oc3ZnRWxlbWVudCk7CisgICAgaWYgKCFzdHlsZWRFbGVtZW50LT5zdXBwb3J0c01hcmtlcnMo
KSkKKyAgICAgICAgcmV0dXJuIEZsb2F0UmVjdCgpOworCisgICAgQVNTRVJUKHN0eWxlKCktPnN2
Z1N0eWxlKCktPmhhc01hcmtlcnMoKSk7CisKKyAgICBTVkdSZXNvdXJjZXMqIHJlc291cmNlcyA9
IFNWR1Jlc291cmNlc0NhY2hlOjpjYWNoZWRSZXNvdXJjZXNGb3JSZW5kZXJPYmplY3QodGhpcyk7
CisgICAgaWYgKCFyZXNvdXJjZXMpCisgICAgICAgIHJldHVybiBGbG9hdFJlY3QoKTsKKworICAg
IFJlbmRlclNWR1Jlc291cmNlTWFya2VyKiBtYXJrZXJTdGFydCA9IHJlc291cmNlcy0+bWFya2Vy
U3RhcnQoKTsKKyAgICBSZW5kZXJTVkdSZXNvdXJjZU1hcmtlciogbWFya2VyTWlkID0gcmVzb3Vy
Y2VzLT5tYXJrZXJNaWQoKTsKKyAgICBSZW5kZXJTVkdSZXNvdXJjZU1hcmtlciogbWFya2VyRW5k
ID0gcmVzb3VyY2VzLT5tYXJrZXJFbmQoKTsKKyAgICBpZiAoIW1hcmtlclN0YXJ0ICYmICFtYXJr
ZXJNaWQgJiYgIW1hcmtlckVuZCkKKyAgICAgICAgcmV0dXJuIEZsb2F0UmVjdCgpOworCisgICAg
cmV0dXJuIG1fbWFya2VyTGF5b3V0SW5mby5jYWxjdWxhdGVCb3VuZGFyaWVzKG1hcmtlclN0YXJ0
LCBtYXJrZXJNaWQsIG1hcmtlckVuZCwgc3Ryb2tlV2lkdGgoKSwgcGF0aCgpKTsKK30KKwordm9p
ZCBSZW5kZXJTVkdTaGFwZTo6dXBkYXRlQ2FjaGVkQm91bmRhcmllcygpCit7CisgICAgaWYgKGlz
RW1wdHkoKSkgeworICAgICAgICBtX2ZpbGxCb3VuZGluZ0JveCA9IEZsb2F0UmVjdCgpOworICAg
ICAgICBtX3N0cm9rZUFuZE1hcmtlckJvdW5kaW5nQm94ID0gRmxvYXRSZWN0KCk7CisgICAgICAg
IG1fcmVwYWludEJvdW5kaW5nQm94ID0gRmxvYXRSZWN0KCk7CisgICAgICAgIHJldHVybjsKKyAg
ICB9CisKKyAgICAvLyBDYWNoZSBfdW5jbGlwcGVkXyBmaWxsIGJvdW5kaW5nIGJveCwgdXNlZCBm
b3IgY2FsY3VsYXRpb25zIGluIHJlc291cmNlcworICAgIG1fZmlsbEJvdW5kaW5nQm94ID0gb2Jq
ZWN0Qm91bmRpbmdCb3goKTsKKworICAgIC8vIFNwZWMoMTEuNCk6IEFueSB6ZXJvIGxlbmd0aCBz
dWJwYXRoIHNoYWxsIG5vdCBiZSBzdHJva2VkIGlmIHRoZSDigJhzdHJva2UtbGluZWNhcOKAmSBw
cm9wZXJ0eSBoYXMgYSB2YWx1ZSBvZiBidXR0CisgICAgLy8gYnV0IHNoYWxsIGJlIHN0cm9rZWQg
aWYgdGhlIOKAmHN0cm9rZS1saW5lY2Fw4oCZIHByb3BlcnR5IGhhcyBhIHZhbHVlIG9mIHJvdW5k
IG9yIHNxdWFyZQorICAgIGlmIChzaG91bGRTdHJva2VaZXJvTGVuZ3RoU3VicGF0aCgpKSB7Cisg
ICAgICAgIG1fc3Ryb2tlQW5kTWFya2VyQm91bmRpbmdCb3ggPSB6ZXJvTGVuZ3RoU3VicGF0aFJl
Y3QoKTsKKyAgICAgICAgLy8gQ2FjaGUgc21hbGxlc3QgcG9zc2libGUgcmVwYWludCByZWN0YW5n
bGUKKyAgICAgICAgbV9yZXBhaW50Qm91bmRpbmdCb3ggPSBtX3N0cm9rZUFuZE1hcmtlckJvdW5k
aW5nQm94OworICAgICAgICBTVkdSZW5kZXJTdXBwb3J0OjppbnRlcnNlY3RSZXBhaW50UmVjdFdp
dGhSZXNvdXJjZXModGhpcywgbV9yZXBhaW50Qm91bmRpbmdCb3gpOworICAgICAgICByZXR1cm47
CisgICAgfQorCisgICAgLy8gQ2FjaGUgX3VuY2xpcHBlZF8gc3Ryb2tlIGJvdW5kaW5nIGJveCwg
dXNlZCBmb3IgY2FsY3VsYXRpb25zIGluIHJlc291cmNlcyAoaW5jbHVkZXMgbWFya2VyIGJvdW5k
YXJpZXMpCisgICAgbV9zdHJva2VBbmRNYXJrZXJCb3VuZGluZ0JveCA9IG1fZmlsbEJvdW5kaW5n
Qm94OworICAgIGlmIChoYXNQYXRoKCkpCisgICAgICAgIGluZmxhdGVXaXRoU3Ryb2tlYW5kTWFy
a2VyQm91bmRzKCk7CisgICAgLy8gQ2FjaGUgc21hbGxlc3QgcG9zc2libGUgcmVwYWludCByZWN0
YW5nbGUKKyAgICBtX3JlcGFpbnRCb3VuZGluZ0JveCA9IHN0cm9rZUJvdW5kaW5nQm94KCk7Cisg
ICAgU1ZHUmVuZGVyU3VwcG9ydDo6aW50ZXJzZWN0UmVwYWludFJlY3RXaXRoUmVzb3VyY2VzKHRo
aXMsIG1fcmVwYWludEJvdW5kaW5nQm94KTsKK30KKworZmxvYXQgUmVuZGVyU1ZHU2hhcGU6OnN0
cm9rZVdpZHRoKCkgY29uc3QKK3sKKyAgICBTVkdFbGVtZW50KiBzdmdFbGVtZW50ID0gc3RhdGlj
X2Nhc3Q8U1ZHRWxlbWVudCo+KG5vZGUoKSk7CisgICAgU1ZHTGVuZ3RoQ29udGV4dCBsZW5ndGhD
b250ZXh0KHN2Z0VsZW1lbnQpOworICAgIHJldHVybiBzdHlsZSgpLT5zdmdTdHlsZSgpLT5zdHJv
a2VXaWR0aCgpLnZhbHVlKGxlbmd0aENvbnRleHQpOworfQorCit2b2lkIFJlbmRlclNWR1NoYXBl
OjppbmZsYXRlV2l0aFN0cm9rZWFuZE1hcmtlckJvdW5kcygpCit7CisgICAgY29uc3QgU1ZHUmVu
ZGVyU3R5bGUqIHN2Z1N0eWxlID0gc3R5bGUoKS0+c3ZnU3R5bGUoKTsKKyAgICBGbG9hdFJlY3Qg
c3Ryb2tlUmVjdDsKKyAgICBpZiAoc3ZnU3R5bGUtPmhhc1N0cm9rZSgpKSB7CisgICAgICAgIEJv
dW5kaW5nUmVjdFN0cm9rZVN0eWxlQXBwbGllciBzdHJva2VTdHlsZSh0aGlzLCBzdHlsZSgpKTsK
KyAgICAgICAgbV9zdHJva2VBbmRNYXJrZXJCb3VuZGluZ0JveC51bml0ZShwYXRoKCkuc3Ryb2tl
Qm91bmRpbmdSZWN0KCZzdHJva2VTdHlsZSkpOworICAgIH0KKyAgICBpZiAoc3ZnU3R5bGUtPmhh
c01hcmtlcnMoKSkgeworICAgICAgICBGbG9hdFJlY3QgbWFya2VyQm91bmRzID0gY2FsY3VsYXRl
TWFya2VyQm91bmRzSWZOZWVkZWQoKTsKKyAgICAgICAgaWYgKCFtYXJrZXJCb3VuZHMuaXNFbXB0
eSgpKQorICAgICAgICAgICAgbV9zdHJva2VBbmRNYXJrZXJCb3VuZGluZ0JveC51bml0ZShtYXJr
ZXJCb3VuZHMpOworICAgIH0KK30KKworfQorCisjZW5kaWYgLy8gRU5BQkxFKFNWRykKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHU2hhcGUuaCBiL1Nv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHU2hhcGUuaApuZXcgZmlsZSBtb2Rl
IDEwMDc1NQppbmRleCAwMDAwMDAwLi42NGNkODhhCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdTaGFwZS5oCkBAIC0wLDAgKzEsMTYwIEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1LCAyMDA3IE5pa29sYXMgWmltbWVybWFu
biA8emltbWVybWFubkBrZGUub3JnPgorICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1IFJvYiBC
dWlzIDxidWlzQGtkZS5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDUgRXJpYyBTZWlkZWwgPGVy
aWNAd2Via2l0Lm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAwNiBBcHBsZSBDb21wdXRlciwgSW5j
CisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgR29vZ2xlLCBJbmMuCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTEgUmVuYXRhIEhvZG92YW4gPHJlbmlAd2Via2l0Lm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAx
MSBVbml2ZXJzaXR5IG9mIFN6ZWdlZAorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3
YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0
aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFz
IHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZl
cnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVy
c2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhh
dCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91
dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBH
ZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3Vs
ZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMg
TGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5H
LkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24s
IEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAy
MTEwLTEzMDEsIFVTQS4KKyAqLworCisjaWZuZGVmIFJlbmRlclNWR1NoYXBlX2gKKyNkZWZpbmUg
UmVuZGVyU1ZHU2hhcGVfaAorCisjaWYgRU5BQkxFKFNWRykKKyNpbmNsdWRlICJBZmZpbmVUcmFu
c2Zvcm0uaCIKKyNpbmNsdWRlICJGbG9hdFJlY3QuaCIKKyNpbmNsdWRlICJSZW5kZXJTVkdNb2Rl
bE9iamVjdC5oIgorI2luY2x1ZGUgIlNWR01hcmtlckxheW91dEluZm8uaCIKKyNpbmNsdWRlICJT
dHJva2VTdHlsZUFwcGxpZXIuaCIKKyNpbmNsdWRlIDx3dGYvT3duUHRyLmg+CisKK25hbWVzcGFj
ZSBXZWJDb3JlIHsKKworY2xhc3MgRmxvYXRQb2ludDsKK2NsYXNzIEdyYXBoaWNzQ29udGV4dFN0
YXRlU2F2ZXI7CitjbGFzcyBSZW5kZXJTVkdDb250YWluZXI7CitjbGFzcyBSZW5kZXJTVkdQYXRo
OworY2xhc3MgU1ZHU3R5bGVkVHJhbnNmb3JtYWJsZUVsZW1lbnQ7CisKK2NsYXNzIEJvdW5kaW5n
UmVjdFN0cm9rZVN0eWxlQXBwbGllciA6IHB1YmxpYyBTdHJva2VTdHlsZUFwcGxpZXIgeworcHVi
bGljOgorICAgIEJvdW5kaW5nUmVjdFN0cm9rZVN0eWxlQXBwbGllcihjb25zdCBSZW5kZXJPYmpl
Y3QqIG9iamVjdCwgUmVuZGVyU3R5bGUqIHN0eWxlKQorICAgICAgICA6IG1fb2JqZWN0KG9iamVj
dCkKKyAgICAgICAgLCBtX3N0eWxlKHN0eWxlKQorICAgIHsKKyAgICAgICAgQVNTRVJUKHN0eWxl
KTsKKyAgICAgICAgQVNTRVJUKG9iamVjdCk7CisgICAgfQorCisgICAgdm9pZCBzdHJva2VTdHls
ZShHcmFwaGljc0NvbnRleHQqIGNvbnRleHQpCisgICAgeworICAgICAgICBTVkdSZW5kZXJTdXBw
b3J0OjphcHBseVN0cm9rZVN0eWxlVG9Db250ZXh0KGNvbnRleHQsIG1fc3R5bGUsIG1fb2JqZWN0
KTsKKyAgICB9CisKK3ByaXZhdGU6CisgICAgY29uc3QgUmVuZGVyT2JqZWN0KiBtX29iamVjdDsK
KyAgICBSZW5kZXJTdHlsZSogbV9zdHlsZTsKK307CisKK2NsYXNzIFJlbmRlclNWR1NoYXBlIDog
cHVibGljIFJlbmRlclNWR01vZGVsT2JqZWN0IHsKK3B1YmxpYzoKKyAgICBleHBsaWNpdCBSZW5k
ZXJTVkdTaGFwZShTVkdTdHlsZWRUcmFuc2Zvcm1hYmxlRWxlbWVudCopOworICAgIFJlbmRlclNW
R1NoYXBlKFNWR1N0eWxlZFRyYW5zZm9ybWFibGVFbGVtZW50KiwgUGF0aCosIGJvb2wpOworICAg
IHZpcnR1YWwgflJlbmRlclNWR1NoYXBlKCk7CisKKyAgICB2b2lkIHNldE5lZWRzU2hhcGVVcGRh
dGUoKSB7IG1fbmVlZHNTaGFwZVVwZGF0ZSA9IHRydWU7IH0KKyAgICB2aXJ0dWFsIHZvaWQgc2V0
TmVlZHNCb3VuZGFyaWVzVXBkYXRlKCkgeyBtX25lZWRzQm91bmRhcmllc1VwZGF0ZSA9IHRydWU7
IH0KKyAgICB2aXJ0dWFsIHZvaWQgc2V0TmVlZHNUcmFuc2Zvcm1VcGRhdGUoKSB7IG1fbmVlZHNU
cmFuc2Zvcm1VcGRhdGUgPSB0cnVlOyB9CisgICAgdmlydHVhbCB2b2lkIGZpbGxTaGFwZShHcmFw
aGljc0NvbnRleHQqKSBjb25zdDsKKyAgICB2aXJ0dWFsIHZvaWQgc3Ryb2tlU2hhcGUoR3JhcGhp
Y3NDb250ZXh0KikgY29uc3Q7CisgICAgYm9vbCBpc1BhaW50aW5nRmFsbGJhY2soKSBjb25zdCB7
IHJldHVybiBtX2ZpbGxGYWxsYmFjazsgfQorCisgICAgUGF0aCYgcGF0aCgpIGNvbnN0CisgICAg
eworICAgICAgICBBU1NFUlQobV9wYXRoKTsKKyAgICAgICAgcmV0dXJuICptX3BhdGg7CisgICAg
fQorCitwcm90ZWN0ZWQ6CisgICAgdmlydHVhbCB2b2lkIGNyZWF0ZVNoYXBlKCk7CisgICAgdmly
dHVhbCBib29sIGlzRW1wdHkoKSBjb25zdDsKKyAgICB2aXJ0dWFsIEZsb2F0UmVjdCBvYmplY3RC
b3VuZGluZ0JveCgpIGNvbnN0OworICAgIHZpcnR1YWwgRmxvYXRSZWN0IHN0cm9rZUJvdW5kaW5n
Qm94KCkgY29uc3QgeyByZXR1cm4gbV9zdHJva2VBbmRNYXJrZXJCb3VuZGluZ0JveDsgfQorICAg
IHZvaWQgc2V0U3Ryb2tlQW5kTWFya2VyQm91bmRpbmdCb3goRmxvYXRSZWN0IHJlY3QpIHsgbV9z
dHJva2VBbmRNYXJrZXJCb3VuZGluZ0JveCA9IHJlY3Q7IH0KKyAgICB2aXJ0dWFsIGJvb2wgc2hh
cGVEZXBlbmRlbnRTdHJva2VDb250YWlucyhjb25zdCBGbG9hdFBvaW50JikgY29uc3Q7CisgICAg
dmlydHVhbCBib29sIHNoYXBlRGVwZW5kZW50RmlsbENvbnRhaW5zKGNvbnN0IEZsb2F0UG9pbnQm
LCBjb25zdCBXaW5kUnVsZSkgY29uc3Q7CisgICAgZmxvYXQgc3Ryb2tlV2lkdGgoKSBjb25zdDsK
KyAgICB2b2lkIHNldElzUGFpbnRpbmdGYWxsYmFjayhib29sIGlzRmFsbGJhY2spIHsgbV9maWxs
RmFsbGJhY2sgPSBpc0ZhbGxiYWNrOyB9CisgICAgRmxvYXRSZWN0IGNhbGN1bGF0ZU1hcmtlckJv
dW5kc0lmTmVlZGVkKCk7CisKKyAgICBib29sIGhhc1BhdGgoKSBjb25zdCB7IHJldHVybiBtX3Bh
dGguZ2V0KCk7IH0KKworcHJpdmF0ZToKKyAgICAvLyBIaXQtZGV0ZWN0aW9uIHNlcGFyYXRlZCBm
b3IgdGhlIGZpbGwgYW5kIHRoZSBzdHJva2UKKyAgICBib29sIGZpbGxDb250YWlucyhjb25zdCBG
bG9hdFBvaW50JiwgYm9vbCByZXF1aXJlc0ZpbGwgPSB0cnVlLCBjb25zdCBXaW5kUnVsZSBmaWxs
UnVsZSA9IFJVTEVfTk9OWkVSTyk7CisgICAgYm9vbCBzdHJva2VDb250YWlucyhjb25zdCBGbG9h
dFBvaW50JiwgYm9vbCByZXF1aXJlc1N0cm9rZSA9IHRydWUpOworCisgICAgdmlydHVhbCBGbG9h
dFJlY3QgcmVwYWludFJlY3RJbkxvY2FsQ29vcmRpbmF0ZXMoKSBjb25zdCB7IHJldHVybiBtX3Jl
cGFpbnRCb3VuZGluZ0JveDsgfQorICAgIHZpcnR1YWwgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiBs
b2NhbFRvUGFyZW50VHJhbnNmb3JtKCkgY29uc3QgeyByZXR1cm4gbV9sb2NhbFRyYW5zZm9ybTsg
fQorICAgIHZpcnR1YWwgQWZmaW5lVHJhbnNmb3JtIGxvY2FsVHJhbnNmb3JtKCkgY29uc3QgeyBy
ZXR1cm4gbV9sb2NhbFRyYW5zZm9ybTsgfQorCisgICAgdmlydHVhbCBib29sIGlzU1ZHU2hhcGUo
KSBjb25zdCB7IHJldHVybiB0cnVlOyB9CisgICAgdmlydHVhbCBjb25zdCBjaGFyKiByZW5kZXJO
YW1lKCkgY29uc3QgeyByZXR1cm4gIlJlbmRlclNWR1NoYXBlIjsgfQorICAgIHZpcnR1YWwgYm9v
bCBpc1JvdW5kZWRSZWN0KCkgeyByZXR1cm4gZmFsc2U7IH0KKworICAgIHZpcnR1YWwgdm9pZCBs
YXlvdXQoKTsKKyAgICB2aXJ0dWFsIHZvaWQgcGFpbnQoUGFpbnRJbmZvJiwgY29uc3QgTGF5b3V0
UG9pbnQmKTsKKyAgICB2aXJ0dWFsIHZvaWQgYWRkRm9jdXNSaW5nUmVjdHMoVmVjdG9yPExheW91
dFJlY3Q+JiwgY29uc3QgTGF5b3V0UG9pbnQmKTsKKworICAgIHZpcnR1YWwgYm9vbCBub2RlQXRG
bG9hdFBvaW50KGNvbnN0IEhpdFRlc3RSZXF1ZXN0JiwgSGl0VGVzdFJlc3VsdCYsIGNvbnN0IEZs
b2F0UG9pbnQmIHBvaW50SW5QYXJlbnQsIEhpdFRlc3RBY3Rpb24pOworCisgICAgdm9pZCB1cGRh
dGVDYWNoZWRCb3VuZGFyaWVzKCk7CisKKyAgICB2b2lkIHNldHVwU3F1YXJlQ2FwUGF0aChQYXRo
KiYsIGludCYgYXBwbHlNb2RlKTsKKyAgICBib29sIHNldHVwTm9uU2NhbGluZ1N0cm9rZVBhdGgo
UGF0aComLCBHcmFwaGljc0NvbnRleHRTdGF0ZVNhdmVyJik7CisgICAgYm9vbCBzaG91bGRTdHJv
a2VaZXJvTGVuZ3RoU3VicGF0aCgpIGNvbnN0OworICAgIEZsb2F0UmVjdCB6ZXJvTGVuZ3RoU3Vi
cGF0aFJlY3QoKSBjb25zdDsKKworICAgIHZvaWQgZmlsbEFuZFN0cm9rZVBhdGgoR3JhcGhpY3ND
b250ZXh0Kik7CisgICAgdm9pZCBpbmZsYXRlV2l0aFN0cm9rZWFuZE1hcmtlckJvdW5kcygpOwor
Citwcml2YXRlOgorICAgIEZsb2F0UmVjdCBtX2ZpbGxCb3VuZGluZ0JveDsKKyAgICBGbG9hdFJl
Y3QgbV9zdHJva2VBbmRNYXJrZXJCb3VuZGluZ0JveDsKKyAgICBGbG9hdFJlY3QgbV9yZXBhaW50
Qm91bmRpbmdCb3g7CisgICAgU1ZHTWFya2VyTGF5b3V0SW5mbyBtX21hcmtlckxheW91dEluZm87
CisgICAgQWZmaW5lVHJhbnNmb3JtIG1fbG9jYWxUcmFuc2Zvcm07CisgICAgT3duUHRyPFBhdGg+
IG1fcGF0aDsKKworICAgIGJvb2wgbV9uZWVkc0JvdW5kYXJpZXNVcGRhdGUgOiAxOworICAgIGJv
b2wgbV9uZWVkc1NoYXBlVXBkYXRlIDogMTsKKyAgICBib29sIG1fbmVlZHNUcmFuc2Zvcm1VcGRh
dGUgOiAxOworICAgIGJvb2wgbV9maWxsRmFsbGJhY2sgOiAxOworICAgIGJvb2wgbV9zdHJva2VD
b250YWluc0ZhbGxCYWNrIDogMTsKK307CisKK2lubGluZSBSZW5kZXJTVkdTaGFwZSogdG9SZW5k
ZXJTVkdTaGFwZShSZW5kZXJPYmplY3QqIG9iamVjdCkKK3sKKyAgICBBU1NFUlQoIW9iamVjdCB8
fCBvYmplY3QtPmlzU1ZHU2hhcGUoKSk7CisgICAgcmV0dXJuIHN0YXRpY19jYXN0PFJlbmRlclNW
R1NoYXBlKj4ob2JqZWN0KTsKK30KKworaW5saW5lIGNvbnN0IFJlbmRlclNWR1NoYXBlKiB0b1Jl
bmRlclNWR1NoYXBlKGNvbnN0IFJlbmRlck9iamVjdCogb2JqZWN0KQoreworICAgIEFTU0VSVCgh
b2JqZWN0IHx8IG9iamVjdC0+aXNTVkdTaGFwZSgpKTsKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8
Y29uc3QgUmVuZGVyU1ZHU2hhcGUqPihvYmplY3QpOworfQorCisvLyBUaGlzIHdpbGwgY2F0Y2gg
YW55b25lIGRvaW5nIGFuIHVubmVjZXNzYXJ5IGNhc3QuCit2b2lkIHRvUmVuZGVyU1ZHU2hhcGUo
Y29uc3QgUmVuZGVyU1ZHU2hhcGUqKTsKKworfQorCisjZW5kaWYgLy8gRU5BQkxFKFNWRykKKyNl
bmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdJbmxpbmVU
ZXh0Qm94LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHSW5saW5lVGV4dEJv
eC5jcHAKaW5kZXggYjI0M2RmOS4uMTg4OTAwOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL3N2Zy9TVkdJbmxpbmVUZXh0Qm94LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvc3ZnL1NWR0lubGluZVRleHRCb3guY3BwCkBAIC0zNzgsNyArMzc4LDcgQEAgdm9p
ZCBTVkdJbmxpbmVUZXh0Qm94OjpyZWxlYXNlUGFpbnRpbmdSZXNvdXJjZShHcmFwaGljc0NvbnRl
eHQqJiBjb250ZXh0LCBjb25zdAogICAgIFJlbmRlck9iamVjdCogcGFyZW50UmVuZGVyZXIgPSBw
YXJlbnQoKS0+cmVuZGVyZXIoKTsKICAgICBBU1NFUlQocGFyZW50UmVuZGVyZXIpOwogCi0gICAg
bV9wYWludGluZ1Jlc291cmNlLT5wb3N0QXBwbHlSZXNvdXJjZShwYXJlbnRSZW5kZXJlciwgY29u
dGV4dCwgbV9wYWludGluZ1Jlc291cmNlTW9kZSwgcGF0aCk7CisgICAgbV9wYWludGluZ1Jlc291
cmNlLT5wb3N0QXBwbHlSZXNvdXJjZShwYXJlbnRSZW5kZXJlciwgY29udGV4dCwgbV9wYWludGlu
Z1Jlc291cmNlTW9kZSwgcGF0aCwgLypSZW5kZXJTVkdTaGFwZSovIDApOwogICAgIG1fcGFpbnRp
bmdSZXNvdXJjZSA9IDA7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9zdmcvU1ZHUmVuZGVyU3VwcG9ydC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3Zn
L1NWR1JlbmRlclN1cHBvcnQuY3BwCmluZGV4IDU3MjA5YWEuLmFmOWFlYzMgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHUmVuZGVyU3VwcG9ydC5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdSZW5kZXJTdXBwb3J0LmNwcApAQCAtMTUy
LDcgKzE1Miw3IEBAIHZvaWQgU1ZHUmVuZGVyU3VwcG9ydDo6ZmluaXNoUmVuZGVyU1ZHQ29udGVu
dChSZW5kZXJPYmplY3QqIG9iamVjdCwgUGFpbnRJbmZvJiBwCiAgICAgU1ZHUmVzb3VyY2VzKiBy
ZXNvdXJjZXMgPSBTVkdSZXNvdXJjZXNDYWNoZTo6Y2FjaGVkUmVzb3VyY2VzRm9yUmVuZGVyT2Jq
ZWN0KG9iamVjdCk7CiAgICAgaWYgKHJlc291cmNlcykgewogICAgICAgICBpZiAoUmVuZGVyU1ZH
UmVzb3VyY2VGaWx0ZXIqIGZpbHRlciA9IHJlc291cmNlcy0+ZmlsdGVyKCkpIHsKLSAgICAgICAg
ICAgIGZpbHRlci0+cG9zdEFwcGx5UmVzb3VyY2Uob2JqZWN0LCBwYWludEluZm8uY29udGV4dCwg
QXBwbHlUb0RlZmF1bHRNb2RlLCAvKiBwYXRoICovMCk7CisgICAgICAgICAgICBmaWx0ZXItPnBv
c3RBcHBseVJlc291cmNlKHN0YXRpY19jYXN0PFJlbmRlclNWR1NoYXBlKj4ob2JqZWN0KSwgcGFp
bnRJbmZvLmNvbnRleHQsIEFwcGx5VG9EZWZhdWx0TW9kZSwgMCwgMCk7CiAgICAgICAgICAgICBw
YWludEluZm8uY29udGV4dCA9IHNhdmVkQ29udGV4dDsKICAgICAgICAgfQogICAgIH0KQEAgLTIy
NCw5ICsyMjQsOSBAQCB2b2lkIFNWR1JlbmRlclN1cHBvcnQ6OmxheW91dENoaWxkcmVuKFJlbmRl
ck9iamVjdCogc3RhcnQsIGJvb2wgc2VsZk5lZWRzTGF5b3V0KQogICAgICAgICAgICAgLy8gV2hl
biBzZWxmTmVlZHNMYXlvdXQgaXMgZmFsc2UgYW5kIHRoZSBsYXlvdXQgc2l6ZSBjaGFuZ2VkLCB3
ZSBoYXZlIHRvIGNoZWNrIHdoZXRoZXIgdGhpcyBjaGlsZCB1c2VzIHJlbGF0aXZlIGxlbmd0aHMK
ICAgICAgICAgICAgIGlmIChTVkdFbGVtZW50KiBlbGVtZW50ID0gY2hpbGQtPm5vZGUoKS0+aXNT
VkdFbGVtZW50KCkgPyBzdGF0aWNfY2FzdDxTVkdFbGVtZW50Kj4oY2hpbGQtPm5vZGUoKSkgOiAw
KSB7CiAgICAgICAgICAgICAgICAgaWYgKGVsZW1lbnQtPmlzU3R5bGVkKCkgJiYgc3RhdGljX2Nh
c3Q8U1ZHU3R5bGVkRWxlbWVudCo+KGVsZW1lbnQpLT5oYXNSZWxhdGl2ZUxlbmd0aHMoKSkgewot
ICAgICAgICAgICAgICAgICAgICAvLyBXaGVuIHRoZSBsYXlvdXQgc2l6ZSBjaGFuZ2VkIGFuZCB3
aGVuIHVzaW5nIHJlbGF0aXZlIHZhbHVlcyB0ZWxsIHRoZSBSZW5kZXJTVkdQYXRoIHRvIHVwZGF0
ZSBpdHMgUGF0aCBvYmplY3QKLSAgICAgICAgICAgICAgICAgICAgaWYgKGNoaWxkLT5pc1NWR1Bh
dGgoKSkKLSAgICAgICAgICAgICAgICAgICAgICAgIHRvUmVuZGVyU1ZHUGF0aChjaGlsZCktPnNl
dE5lZWRzUGF0aFVwZGF0ZSgpOworICAgICAgICAgICAgICAgICAgICAvLyBXaGVuIHRoZSBsYXlv
dXQgc2l6ZSBjaGFuZ2VkIGFuZCB3aGVuIHVzaW5nIHJlbGF0aXZlIHZhbHVlcyB0ZWxsIHRoZSBS
ZW5kZXJTVkdTaGFwZSB0byB1cGRhdGUgaXRzIHNoYXBlIG9iamVjdAorICAgICAgICAgICAgICAg
ICAgICBpZiAoY2hpbGQtPmlzU1ZHU2hhcGUoKSkKKyAgICAgICAgICAgICAgICAgICAgICAgIHRv
UmVuZGVyU1ZHU2hhcGUoY2hpbGQpLT5zZXROZWVkc1NoYXBlVXBkYXRlKCk7CiAKICAgICAgICAg
ICAgICAgICAgICAgbmVlZHNMYXlvdXQgPSB0cnVlOwogICAgICAgICAgICAgICAgIH0KZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHUmVuZGVyVHJlZUFzVGV4dC5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR1JlbmRlclRyZWVBc1RleHQuY3Bw
Cm9sZCBtb2RlIDEwMDY0NApuZXcgbW9kZSAxMDA3NTUKaW5kZXggNjYyNGMxNy4uNzlhMmEyNgot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR1JlbmRlclRyZWVBc1RleHQuY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHUmVuZGVyVHJlZUFzVGV4dC5j
cHAKQEAgLTU1LDYgKzU1LDcgQEAKICNpbmNsdWRlICJSZW5kZXJTVkdSZXNvdXJjZVJhZGlhbEdy
YWRpZW50LmgiCiAjaW5jbHVkZSAiUmVuZGVyU1ZHUmVzb3VyY2VTb2xpZENvbG9yLmgiCiAjaW5j
bHVkZSAiUmVuZGVyU1ZHUm9vdC5oIgorI2luY2x1ZGUgIlJlbmRlclNWR1NoYXBlLmgiCiAjaW5j
bHVkZSAiUmVuZGVyU1ZHVGV4dC5oIgogI2luY2x1ZGUgIlJlbmRlclRyZWVBc1RleHQuaCIKICNp
bmNsdWRlICJTVkdDaXJjbGVFbGVtZW50LmgiCkBAIC0yODksMTggKzI5MCwxOCBAQCBzdGF0aWMg
dm9pZCB3cml0ZVN0eWxlKFRleHRTdHJlYW0mIHRzLCBjb25zdCBSZW5kZXJPYmplY3QmIG9iamVj
dCkKICAgICAgICAgd3JpdGVOYW1lVmFsdWVQYWlyKHRzLCAidHJhbnNmb3JtIiwgb2JqZWN0Lmxv
Y2FsVHJhbnNmb3JtKCkpOwogICAgIHdyaXRlSWZOb3REZWZhdWx0KHRzLCAiaW1hZ2UgcmVuZGVy
aW5nIiwgc3R5bGUtPmltYWdlUmVuZGVyaW5nKCksIFJlbmRlclN0eWxlOjppbml0aWFsSW1hZ2VS
ZW5kZXJpbmcoKSk7CiAgICAgd3JpdGVJZk5vdERlZmF1bHQodHMsICJvcGFjaXR5Iiwgc3R5bGUt
Pm9wYWNpdHkoKSwgUmVuZGVyU3R5bGU6OmluaXRpYWxPcGFjaXR5KCkpOwotICAgIGlmIChvYmpl
Y3QuaXNTVkdQYXRoKCkpIHsKLSAgICAgICAgY29uc3QgUmVuZGVyU1ZHUGF0aCYgcGF0aCA9IHN0
YXRpY19jYXN0PGNvbnN0IFJlbmRlclNWR1BhdGgmPihvYmplY3QpOwotICAgICAgICBBU1NFUlQo
cGF0aC5ub2RlKCkpOwotICAgICAgICBBU1NFUlQocGF0aC5ub2RlKCktPmlzU1ZHRWxlbWVudCgp
KTsKKyAgICBpZiAob2JqZWN0LmlzU1ZHU2hhcGUoKSkgeworICAgICAgICBjb25zdCBSZW5kZXJT
VkdTaGFwZSYgc2hhcGUgPSBzdGF0aWNfY2FzdDxjb25zdCBSZW5kZXJTVkdTaGFwZSY+KG9iamVj
dCk7CisgICAgICAgIEFTU0VSVChzaGFwZS5ub2RlKCkpOworICAgICAgICBBU1NFUlQoc2hhcGUu
bm9kZSgpLT5pc1NWR0VsZW1lbnQoKSk7CiAKICAgICAgICAgQ29sb3IgZmFsbGJhY2tDb2xvcjsK
LSAgICAgICAgaWYgKFJlbmRlclNWR1Jlc291cmNlKiBzdHJva2VQYWludGluZ1Jlc291cmNlID0g
UmVuZGVyU1ZHUmVzb3VyY2U6OnN0cm9rZVBhaW50aW5nUmVzb3VyY2UoY29uc3RfY2FzdDxSZW5k
ZXJTVkdQYXRoKj4oJnBhdGgpLCBwYXRoLnN0eWxlKCksIGZhbGxiYWNrQ29sb3IpKSB7CisgICAg
ICAgIGlmIChSZW5kZXJTVkdSZXNvdXJjZSogc3Ryb2tlUGFpbnRpbmdSZXNvdXJjZSA9IFJlbmRl
clNWR1Jlc291cmNlOjpzdHJva2VQYWludGluZ1Jlc291cmNlKGNvbnN0X2Nhc3Q8UmVuZGVyU1ZH
U2hhcGUqPigmc2hhcGUpLCBzaGFwZS5zdHlsZSgpLCBmYWxsYmFja0NvbG9yKSkgewogICAgICAg
ICAgICAgVGV4dFN0cmVhbVNlcGFyYXRvciBzKCIgIik7CiAgICAgICAgICAgICB0cyA8PCAiIFtz
dHJva2U9eyIgPDwgczsKICAgICAgICAgICAgIHdyaXRlU1ZHUGFpbnRpbmdSZXNvdXJjZSh0cywg
c3Ryb2tlUGFpbnRpbmdSZXNvdXJjZSk7CiAKLSAgICAgICAgICAgIFNWR0xlbmd0aENvbnRleHQg
bGVuZ3RoQ29udGV4dChzdGF0aWNfY2FzdDxTVkdFbGVtZW50Kj4ocGF0aC5ub2RlKCkpKTsKKyAg
ICAgICAgICAgIFNWR0xlbmd0aENvbnRleHQgbGVuZ3RoQ29udGV4dChzdGF0aWNfY2FzdDxTVkdF
bGVtZW50Kj4oc2hhcGUubm9kZSgpKSk7CiAgICAgICAgICAgICBkb3VibGUgZGFzaE9mZnNldCA9
IHN2Z1N0eWxlLT5zdHJva2VEYXNoT2Zmc2V0KCkudmFsdWUobGVuZ3RoQ29udGV4dCk7CiAgICAg
ICAgICAgICBkb3VibGUgc3Ryb2tlV2lkdGggPSBzdmdTdHlsZS0+c3Ryb2tlV2lkdGgoKS52YWx1
ZShsZW5ndGhDb250ZXh0KTsKICAgICAgICAgICAgIGNvbnN0IFZlY3RvcjxTVkdMZW5ndGg+JiBk
YXNoZXMgPSBzdmdTdHlsZS0+c3Ryb2tlRGFzaEFycmF5KCk7CkBAIC0zMjIsNyArMzIzLDcgQEAg
c3RhdGljIHZvaWQgd3JpdGVTdHlsZShUZXh0U3RyZWFtJiB0cywgY29uc3QgUmVuZGVyT2JqZWN0
JiBvYmplY3QpCiAgICAgICAgICAgICB0cyA8PCAifV0iOwogICAgICAgICB9CiAKLSAgICAgICAg
aWYgKFJlbmRlclNWR1Jlc291cmNlKiBmaWxsUGFpbnRpbmdSZXNvdXJjZSA9IFJlbmRlclNWR1Jl
c291cmNlOjpmaWxsUGFpbnRpbmdSZXNvdXJjZShjb25zdF9jYXN0PFJlbmRlclNWR1BhdGgqPigm
cGF0aCksIHBhdGguc3R5bGUoKSwgZmFsbGJhY2tDb2xvcikpIHsKKyAgICAgICAgaWYgKFJlbmRl
clNWR1Jlc291cmNlKiBmaWxsUGFpbnRpbmdSZXNvdXJjZSA9IFJlbmRlclNWR1Jlc291cmNlOjpm
aWxsUGFpbnRpbmdSZXNvdXJjZShjb25zdF9jYXN0PFJlbmRlclNWR1NoYXBlKj4oJnNoYXBlKSwg
c2hhcGUuc3R5bGUoKSwgZmFsbGJhY2tDb2xvcikpIHsKICAgICAgICAgICAgIFRleHRTdHJlYW1T
ZXBhcmF0b3IgcygiICIpOwogICAgICAgICAgICAgdHMgPDwgIiBbZmlsbD17IiA8PCBzOwogICAg
ICAgICAgICAgd3JpdGVTVkdQYWludGluZ1Jlc291cmNlKHRzLCBmaWxsUGFpbnRpbmdSZXNvdXJj
ZSk7CkBAIC0zNDYsMTIgKzM0NywxMiBAQCBzdGF0aWMgVGV4dFN0cmVhbSYgd3JpdGVQb3NpdGlv
bkFuZFN0eWxlKFRleHRTdHJlYW0mIHRzLCBjb25zdCBSZW5kZXJPYmplY3QmIG9iagogICAgIHJl
dHVybiB0czsKIH0KIAotc3RhdGljIFRleHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYg
dHMsIGNvbnN0IFJlbmRlclNWR1BhdGgmIHBhdGgpCitzdGF0aWMgVGV4dFN0cmVhbSYgb3BlcmF0
b3I8PChUZXh0U3RyZWFtJiB0cywgY29uc3QgUmVuZGVyU1ZHU2hhcGUmIHNoYXBlKQogewotICAg
IHdyaXRlUG9zaXRpb25BbmRTdHlsZSh0cywgcGF0aCk7CisgICAgd3JpdGVQb3NpdGlvbkFuZFN0
eWxlKHRzLCBzaGFwZSk7CiAKLSAgICBBU1NFUlQocGF0aC5ub2RlKCktPmlzU1ZHRWxlbWVudCgp
KTsKLSAgICBTVkdFbGVtZW50KiBzdmdFbGVtZW50ID0gc3RhdGljX2Nhc3Q8U1ZHRWxlbWVudCo+
KHBhdGgubm9kZSgpKTsKKyAgICBBU1NFUlQoc2hhcGUubm9kZSgpLT5pc1NWR0VsZW1lbnQoKSk7
CisgICAgU1ZHRWxlbWVudCogc3ZnRWxlbWVudCA9IHN0YXRpY19jYXN0PFNWR0VsZW1lbnQqPihz
aGFwZS5ub2RlKCkpOwogICAgIFNWR0xlbmd0aENvbnRleHQgbGVuZ3RoQ29udGV4dChzdmdFbGVt
ZW50KTsKIAogICAgIGlmIChzdmdFbGVtZW50LT5oYXNUYWdOYW1lKFNWR05hbWVzOjpyZWN0VGFn
KSkgewpAQCAtNjQ1LDExICs2NDYsMTEgQEAgdm9pZCB3cml0ZVNWR0ltYWdlKFRleHRTdHJlYW0m
IHRzLCBjb25zdCBSZW5kZXJTVkdJbWFnZSYgaW1hZ2UsIGludCBpbmRlbnQpCiAgICAgd3JpdGVS
ZXNvdXJjZXModHMsIGltYWdlLCBpbmRlbnQpOwogfQogCi12b2lkIHdyaXRlKFRleHRTdHJlYW0m
IHRzLCBjb25zdCBSZW5kZXJTVkdQYXRoJiBwYXRoLCBpbnQgaW5kZW50KQordm9pZCB3cml0ZShU
ZXh0U3RyZWFtJiB0cywgY29uc3QgUmVuZGVyU1ZHU2hhcGUmIHNoYXBlLCBpbnQgaW5kZW50KQog
ewotICAgIHdyaXRlU3RhbmRhcmRQcmVmaXgodHMsIHBhdGgsIGluZGVudCk7Ci0gICAgdHMgPDwg
cGF0aCA8PCAiXG4iOwotICAgIHdyaXRlUmVzb3VyY2VzKHRzLCBwYXRoLCBpbmRlbnQpOworICAg
IHdyaXRlU3RhbmRhcmRQcmVmaXgodHMsIHNoYXBlLCBpbmRlbnQpOworICAgIHRzIDw8IHNoYXBl
IDw8ICJcbiI7CisgICAgd3JpdGVSZXNvdXJjZXModHMsIHNoYXBlLCBpbmRlbnQpOwogfQogCiB2
b2lkIHdyaXRlU1ZHR3JhZGllbnRTdG9wKFRleHRTdHJlYW0mIHRzLCBjb25zdCBSZW5kZXJTVkdH
cmFkaWVudFN0b3AmIHN0b3AsIGludCBpbmRlbnQpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvc3ZnL1NWR1JlbmRlclRyZWVBc1RleHQuaCBiL1NvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9zdmcvU1ZHUmVuZGVyVHJlZUFzVGV4dC5oCmluZGV4IGNlMDdhNWMuLjM1OThjODMg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHUmVuZGVyVHJlZUFz
VGV4dC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHUmVuZGVyVHJlZUFz
VGV4dC5oCkBAIC00MSwxNCArNDEsMTQgQEAgY2xhc3MgUmVuZGVySW1hZ2U7CiBjbGFzcyBSZW5k
ZXJPYmplY3Q7CiBjbGFzcyBSZW5kZXJTVkdHcmFkaWVudFN0b3A7CiBjbGFzcyBSZW5kZXJTVkdJ
bWFnZTsKLWNsYXNzIFJlbmRlclNWR1BhdGg7CitjbGFzcyBSZW5kZXJTVkdTaGFwZTsKIGNsYXNz
IFJlbmRlclNWR1Jvb3Q7CiBjbGFzcyBSZW5kZXJUZXh0OwogY2xhc3MgQWZmaW5lVHJhbnNmb3Jt
OwogY2xhc3MgU1ZHVW5pdFR5cGVzOwogCiAvLyBmdW5jdGlvbnMgdXNlZCBieSB0aGUgbWFpbiBS
ZW5kZXJUcmVlQXNUZXh0IGNvZGUKLXZvaWQgd3JpdGUoVGV4dFN0cmVhbSYsIGNvbnN0IFJlbmRl
clNWR1BhdGgmLCBpbnQgaW5kZW50KTsKK3ZvaWQgd3JpdGUoVGV4dFN0cmVhbSYsIGNvbnN0IFJl
bmRlclNWR1NoYXBlJiwgaW50IGluZGVudCk7CiB2b2lkIHdyaXRlKFRleHRTdHJlYW0mLCBjb25z
dCBSZW5kZXJTVkdSb290JiwgaW50IGluZGVudCk7CiB2b2lkIHdyaXRlU1ZHR3JhZGllbnRTdG9w
KFRleHRTdHJlYW0mLCBjb25zdCBSZW5kZXJTVkdHcmFkaWVudFN0b3AmLCBpbnQgaW5kZW50KTsK
IHZvaWQgd3JpdGVTVkdSZXNvdXJjZUNvbnRhaW5lcihUZXh0U3RyZWFtJiwgY29uc3QgUmVuZGVy
T2JqZWN0JiwgaW50IGluZGVudCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvc3ZnL1NWR1RleHRSdW5SZW5kZXJpbmdDb250ZXh0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9zdmcvU1ZHVGV4dFJ1blJlbmRlcmluZ0NvbnRleHQuY3BwCmluZGV4IDMzYWNmOTIu
LjIyNGViODYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHVGV4
dFJ1blJlbmRlcmluZ0NvbnRleHQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9z
dmcvU1ZHVGV4dFJ1blJlbmRlcmluZ0NvbnRleHQuY3BwCkBAIC0xNjAsNyArMTYwLDcgQEAgdm9p
ZCBTVkdUZXh0UnVuUmVuZGVyaW5nQ29udGV4dDo6ZHJhd1NWR0dseXBocyhHcmFwaGljc0NvbnRl
eHQqIGNvbnRleHQsIGNvbnN0IFQKICAgICAgICAgICAgICAgICBjb25zdCBSZW5kZXJTVkdJbmxp
bmVUZXh0KiB0ZXh0UmVuZGVyZXIgPSB0b1JlbmRlclNWR0lubGluZVRleHQocmVuZGVyT2JqZWN0
KTsKICAgICAgICAgICAgICAgICBjb250ZXh0LT5zZXRTdHJva2VUaGlja25lc3MoY29udGV4dC0+
c3Ryb2tlVGhpY2tuZXNzKCkgKiB0ZXh0UmVuZGVyZXItPnNjYWxpbmdGYWN0b3IoKSk7CiAgICAg
ICAgICAgICB9Ci0gICAgICAgICAgICBhY3RpdmVQYWludGluZ1Jlc291cmNlLT5wb3N0QXBwbHlS
ZXNvdXJjZShwYXJlbnRSZW5kZXJPYmplY3QsIGNvbnRleHQsIHJlc291cmNlTW9kZSwgJmdseXBo
UGF0aCk7CisgICAgICAgICAgICBhY3RpdmVQYWludGluZ1Jlc291cmNlLT5wb3N0QXBwbHlSZXNv
dXJjZShwYXJlbnRSZW5kZXJPYmplY3QsIGNvbnRleHQsIHJlc291cmNlTW9kZSwgJmdseXBoUGF0
aCwgMCk7CiAgICAgICAgICB9CiAgCiAgICAgICAgIGNvbnRleHQtPnJlc3RvcmUoKTsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdDaXJjbGVFbGVtZW50LmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL3N2Zy9TVkdDaXJjbGVFbGVtZW50LmNwcAppbmRleCAyN2M0MDUyLi5hNmMyNmFhIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHQ2lyY2xlRWxlbWVudC5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvc3ZnL1NWR0NpcmNsZUVsZW1lbnQuY3BwCkBAIC0xMjQsNyArMTI0LDcg
QEAgdm9pZCBTVkdDaXJjbGVFbGVtZW50OjpzdmdBdHRyaWJ1dGVDaGFuZ2VkKGNvbnN0IFF1YWxp
ZmllZE5hbWUmIGF0dHJOYW1lKQogICAgICAgICByZXR1cm47CiAKICAgICBpZiAoaXNMZW5ndGhB
dHRyaWJ1dGUpIHsKLSAgICAgICAgcmVuZGVyZXItPnNldE5lZWRzUGF0aFVwZGF0ZSgpOworICAg
ICAgICByZW5kZXJlci0+c2V0TmVlZHNTaGFwZVVwZGF0ZSgpOwogICAgICAgICBSZW5kZXJTVkdS
ZXNvdXJjZTo6bWFya0ZvckxheW91dEFuZFBhcmVudFJlc291cmNlSW52YWxpZGF0aW9uKHJlbmRl
cmVyKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3N2Zy9TVkdFbGxpcHNlRWxlbWVudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRWxsaXBz
ZUVsZW1lbnQuY3BwCmluZGV4IGY4ZWNiMzQuLjc2ZWU5YWMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3N2Zy9TVkdFbGxpcHNlRWxlbWVudC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvc3Zn
L1NWR0VsbGlwc2VFbGVtZW50LmNwcApAQCAtMTI5LDcgKzEyOSw3IEBAIHZvaWQgU1ZHRWxsaXBz
ZUVsZW1lbnQ6OnN2Z0F0dHJpYnV0ZUNoYW5nZWQoY29uc3QgUXVhbGlmaWVkTmFtZSYgYXR0ck5h
bWUpCiAgICAgICAgIHJldHVybjsKIAogICAgIGlmIChpc0xlbmd0aEF0dHJpYnV0ZSkgewotICAg
ICAgICByZW5kZXJlci0+c2V0TmVlZHNQYXRoVXBkYXRlKCk7CisgICAgICAgIHJlbmRlcmVyLT5z
ZXROZWVkc1NoYXBlVXBkYXRlKCk7CiAgICAgICAgIFJlbmRlclNWR1Jlc291cmNlOjptYXJrRm9y
TGF5b3V0QW5kUGFyZW50UmVzb3VyY2VJbnZhbGlkYXRpb24ocmVuZGVyZXIpOwogICAgICAgICBy
ZXR1cm47CiAgICAgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0xlbmd0aENv
bnRleHQuY3BwIGIvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0xlbmd0aENvbnRleHQuY3BwCm9sZCBt
b2RlIDEwMDY0NApuZXcgbW9kZSAxMDA3NTUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3N2
Zy9TVkdMaW5lRWxlbWVudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHTGluZUVsZW1lbnQu
Y3BwCmluZGV4IGRhODQyMjMuLjQ0NDI2NzYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3N2
Zy9TVkdMaW5lRWxlbWVudC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0xpbmVFbGVt
ZW50LmNwcApAQCAtMTI5LDcgKzEyOSw3IEBAIHZvaWQgU1ZHTGluZUVsZW1lbnQ6OnN2Z0F0dHJp
YnV0ZUNoYW5nZWQoY29uc3QgUXVhbGlmaWVkTmFtZSYgYXR0ck5hbWUpCiAgICAgICAgIHJldHVy
bjsKIAogICAgIGlmIChpc0xlbmd0aEF0dHJpYnV0ZSkgewotICAgICAgICByZW5kZXJlci0+c2V0
TmVlZHNQYXRoVXBkYXRlKCk7CisgICAgICAgIHJlbmRlcmVyLT5zZXROZWVkc1NoYXBlVXBkYXRl
KCk7CiAgICAgICAgIFJlbmRlclNWR1Jlc291cmNlOjptYXJrRm9yTGF5b3V0QW5kUGFyZW50UmVz
b3VyY2VJbnZhbGlkYXRpb24ocmVuZGVyZXIpOwogICAgICAgICByZXR1cm47CiAgICAgfQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvc3ZnL1NWR1BhdGhFbGVtZW50LmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL3N2Zy9TVkdQYXRoRWxlbWVudC5jcHAKaW5kZXggNDEwMzAxYS4uNjJiOTA0YSAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvc3ZnL1NWR1BhdGhFbGVtZW50LmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9zdmcvU1ZHUGF0aEVsZW1lbnQuY3BwCkBAIC0yNzEsNyArMjcxLDcgQEAgdm9p
ZCBTVkdQYXRoRWxlbWVudDo6c3ZnQXR0cmlidXRlQ2hhbmdlZChjb25zdCBRdWFsaWZpZWROYW1l
JiBhdHRyTmFtZSkKICAgICAgICAgfQogCiAgICAgICAgIGlmIChyZW5kZXJlcikKLSAgICAgICAg
ICAgIHJlbmRlcmVyLT5zZXROZWVkc1BhdGhVcGRhdGUoKTsKKyAgICAgICAgICAgIHJlbmRlcmVy
LT5zZXROZWVkc1NoYXBlVXBkYXRlKCk7CiAgICAgfQogCiAgICAgaWYgKHJlbmRlcmVyKQpAQCAt
MzUxLDcgKzM1MSw3IEBAIHZvaWQgU1ZHUGF0aEVsZW1lbnQ6OnBhdGhTZWdMaXN0Q2hhbmdlZChT
VkdQYXRoU2VnUm9sZSByb2xlKQogICAgIGlmICghcmVuZGVyZXIpCiAgICAgICAgIHJldHVybjsK
IAotICAgIHJlbmRlcmVyLT5zZXROZWVkc1BhdGhVcGRhdGUoKTsKKyAgICByZW5kZXJlci0+c2V0
TmVlZHNTaGFwZVVwZGF0ZSgpOwogICAgIFJlbmRlclNWR1Jlc291cmNlOjptYXJrRm9yTGF5b3V0
QW5kUGFyZW50UmVzb3VyY2VJbnZhbGlkYXRpb24ocmVuZGVyZXIpOwogfQogCkBAIC0zNzQsNiAr
Mzc0LDEyIEBAIEZsb2F0UmVjdCBTVkdQYXRoRWxlbWVudDo6Z2V0QkJveChTdHlsZVVwZGF0ZVN0
cmF0ZWd5IHN0eWxlVXBkYXRlU3RyYXRlZ3kpCiAgICAgcmV0dXJuIG1fY2FjaGVkQkJveFJlY3Q7
CiB9CiAKK1JlbmRlck9iamVjdCogU1ZHUGF0aEVsZW1lbnQ6OmNyZWF0ZVJlbmRlcmVyKFJlbmRl
ckFyZW5hKiBhcmVuYSwgUmVuZGVyU3R5bGUqKQoreworICAgIC8vIEJ5IGRlZmF1bHQsIGFueSBz
dWJjbGFzcyBpcyBleHBlY3RlZCB0byBkbyBwYXRoLWJhc2VkIGRyYXdpbmcKKyAgICByZXR1cm4g
bmV3IChhcmVuYSkgUmVuZGVyU1ZHUGF0aCh0aGlzKTsKK30KKwogfQogCiAjZW5kaWYgLy8gRU5B
QkxFKFNWRykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdQYXRoRWxlbWVudC5o
IGIvU291cmNlL1dlYkNvcmUvc3ZnL1NWR1BhdGhFbGVtZW50LmgKaW5kZXggMTczMzY1MC4uYzZi
ZjIyMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvc3ZnL1NWR1BhdGhFbGVtZW50LmgKKysr
IGIvU291cmNlL1dlYkNvcmUvc3ZnL1NWR1BhdGhFbGVtZW50LmgKQEAgLTEyMyw2ICsxMjMsOCBA
QCBwcml2YXRlOgogICAgIHZpcnR1YWwgdm9pZCBzeW5jaHJvbml6ZVJlcXVpcmVkRXh0ZW5zaW9u
cygpIHsgU1ZHVGVzdHM6OnN5bmNocm9uaXplUmVxdWlyZWRFeHRlbnNpb25zKHRoaXMpOyB9CiAg
ICAgdmlydHVhbCB2b2lkIHN5bmNocm9uaXplU3lzdGVtTGFuZ3VhZ2UoKSB7IFNWR1Rlc3RzOjpz
eW5jaHJvbml6ZVN5c3RlbUxhbmd1YWdlKHRoaXMpOyB9CiAKKyAgICBSZW5kZXJPYmplY3QqIGNy
ZWF0ZVJlbmRlcmVyKFJlbmRlckFyZW5hKiwgUmVuZGVyU3R5bGUqKTsKKwogcHJpdmF0ZToKICAg
ICBPd25QdHI8U1ZHUGF0aEJ5dGVTdHJlYW0+IG1fcGF0aEJ5dGVTdHJlYW07CiAgICAgbXV0YWJs
ZSBTVkdTeW5jaHJvbml6YWJsZUFuaW1hdGVkUHJvcGVydHk8U1ZHUGF0aFNlZ0xpc3Q+IG1fcGF0
aFNlZ0xpc3Q7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHUG9seUVsZW1lbnQu
Y3BwIGIvU291cmNlL1dlYkNvcmUvc3ZnL1NWR1BvbHlFbGVtZW50LmNwcAppbmRleCA2NmM1MjU4
Li5hOGI2N2M3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHUG9seUVsZW1lbnQu
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdQb2x5RWxlbWVudC5jcHAKQEAgLTEyNCw3
ICsxMjQsNyBAQCB2b2lkIFNWR1BvbHlFbGVtZW50OjpzdmdBdHRyaWJ1dGVDaGFuZ2VkKGNvbnN0
IFF1YWxpZmllZE5hbWUmIGF0dHJOYW1lKQogICAgICAgICByZXR1cm47CiAKICAgICBpZiAoYXR0
ck5hbWUgPT0gU1ZHTmFtZXM6OnBvaW50c0F0dHIpIHsKLSAgICAgICAgcmVuZGVyZXItPnNldE5l
ZWRzUGF0aFVwZGF0ZSgpOworICAgICAgICByZW5kZXJlci0+c2V0TmVlZHNTaGFwZVVwZGF0ZSgp
OwogICAgICAgICBSZW5kZXJTVkdSZXNvdXJjZTo6bWFya0ZvckxheW91dEFuZFBhcmVudFJlc291
cmNlSW52YWxpZGF0aW9uKHJlbmRlcmVyKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdSZWN0RWxlbWVudC5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9zdmcvU1ZHUmVjdEVsZW1lbnQuY3BwCmluZGV4IGY0MzZlMzQuLmVjYTAzZGYgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdSZWN0RWxlbWVudC5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUvc3ZnL1NWR1JlY3RFbGVtZW50LmNwcApAQCAtMjUsNiArMjUsNyBAQAogCiAjaW5j
bHVkZSAiQXR0cmlidXRlLmgiCiAjaW5jbHVkZSAiUmVuZGVyU1ZHUGF0aC5oIgorI2luY2x1ZGUg
IlJlbmRlclNWR1JlY3QuaCIKICNpbmNsdWRlICJSZW5kZXJTVkdSZXNvdXJjZS5oIgogI2luY2x1
ZGUgIlNWR0VsZW1lbnRJbnN0YW5jZS5oIgogI2luY2x1ZGUgIlNWR0xlbmd0aC5oIgpAQCAtMzIs
NiArMzMsOCBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKK2NsYXNzIFJlbmRlclNWR1JlY3Q7
CisKIC8vIEFuaW1hdGVkIHByb3BlcnR5IGRlZmluaXRpb25zCiBERUZJTkVfQU5JTUFURURfTEVO
R1RIKFNWR1JlY3RFbGVtZW50LCBTVkdOYW1lczo6eEF0dHIsIFgsIHgpCiBERUZJTkVfQU5JTUFU
RURfTEVOR1RIKFNWR1JlY3RFbGVtZW50LCBTVkdOYW1lczo6eUF0dHIsIFksIHkpCkBAIC0xMzcs
MTIgKzE0MCwxMiBAQCB2b2lkIFNWR1JlY3RFbGVtZW50OjpzdmdBdHRyaWJ1dGVDaGFuZ2VkKGNv
bnN0IFF1YWxpZmllZE5hbWUmIGF0dHJOYW1lKQogICAgIGlmIChTVkdUZXN0czo6aGFuZGxlQXR0
cmlidXRlQ2hhbmdlKHRoaXMsIGF0dHJOYW1lKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgUmVu
ZGVyU1ZHUGF0aCogcmVuZGVyZXIgPSBzdGF0aWNfY2FzdDxSZW5kZXJTVkdQYXRoKj4odGhpcy0+
cmVuZGVyZXIoKSk7CisgICAgUmVuZGVyU1ZHUmVjdCogcmVuZGVyZXIgPSBzdGF0aWNfY2FzdDxS
ZW5kZXJTVkdSZWN0Kj4odGhpcy0+cmVuZGVyZXIoKSk7CiAgICAgaWYgKCFyZW5kZXJlcikKICAg
ICAgICAgcmV0dXJuOwogCiAgICAgaWYgKGlzTGVuZ3RoQXR0cmlidXRlKSB7Ci0gICAgICAgIHJl
bmRlcmVyLT5zZXROZWVkc1BhdGhVcGRhdGUoKTsKKyAgICAgICAgcmVuZGVyZXItPnNldE5lZWRz
U2hhcGVVcGRhdGUoKTsKICAgICAgICAgUmVuZGVyU1ZHUmVzb3VyY2U6Om1hcmtGb3JMYXlvdXRB
bmRQYXJlbnRSZXNvdXJjZUludmFsaWRhdGlvbihyZW5kZXJlcik7CiAgICAgICAgIHJldHVybjsK
ICAgICB9CkBAIC0xNjUsNiArMTY4LDExIEBAIGJvb2wgU1ZHUmVjdEVsZW1lbnQ6OnNlbGZIYXNS
ZWxhdGl2ZUxlbmd0aHMoKSBjb25zdAogICAgICAgICB8fCByeSgpLmlzUmVsYXRpdmUoKTsKIH0K
IAorUmVuZGVyT2JqZWN0KiBTVkdSZWN0RWxlbWVudDo6Y3JlYXRlUmVuZGVyZXIoUmVuZGVyQXJl
bmEqIGFyZW5hLCBSZW5kZXJTdHlsZSopCit7CisgICAgcmV0dXJuIG5ldyAoYXJlbmEpIFJlbmRl
clNWR1JlY3QodGhpcyk7Cit9CisKIH0KIAogI2VuZGlmIC8vIEVOQUJMRShTVkcpCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHUmVjdEVsZW1lbnQuaCBiL1NvdXJjZS9XZWJDb3Jl
L3N2Zy9TVkdSZWN0RWxlbWVudC5oCmluZGV4IGE2MDhiNGQuLjI3MDQ2ODkgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdSZWN0RWxlbWVudC5oCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3N2Zy9TVkdSZWN0RWxlbWVudC5oCkBAIC01MCw2ICs1MCw4IEBAIHByaXZhdGU6CiAKICAgICB2
aXJ0dWFsIGJvb2wgc2VsZkhhc1JlbGF0aXZlTGVuZ3RocygpIGNvbnN0OwogCisgICAgUmVuZGVy
T2JqZWN0KiBjcmVhdGVSZW5kZXJlcihSZW5kZXJBcmVuYSosIFJlbmRlclN0eWxlKik7CisKICAg
ICBCRUdJTl9ERUNMQVJFX0FOSU1BVEVEX1BST1BFUlRJRVMoU1ZHUmVjdEVsZW1lbnQpCiAgICAg
ICAgIERFQ0xBUkVfQU5JTUFURURfTEVOR1RIKFgsIHgpCiAgICAgICAgIERFQ0xBUkVfQU5JTUFU
RURfTEVOR1RIKFksIHkpCi0tIAoxLjcuNS40Cgo=
</data>
<flag name="commit-queue"
          id="114815"
          type_id="3"
          status="-"
          setter="rhodovan.u-szeged"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>115816</attachid>
            <date>2011-11-18 08:29:42 -0800</date>
            <delta_ts>2011-11-29 02:20:44 -0800</delta_ts>
            <desc>Proposed patch</desc>
            <filename>rendering-2011-11-18.patch</filename>
            <type>text/plain</type>
            <size>184741</size>
            <attacher name="Renata Hodovan">rhodovan.u-szeged</attacher>
            
              <data encoding="base64">RnJvbSAxZGVmODM5MmJmZTk5ODM5NzM3NGI0YTQ5YTBjMDBkODlhZDQ5ZTZhIE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBSZW5hdGEgSG9kb3ZhbiA8cmVuaUB3ZWJraXQub3JnPgpEYXRl
OiBGcmksIDE4IE5vdiAyMDExIDE2OjI5OjIzICswMTAwClN1YmplY3Q6IFtQQVRDSF0gcmVuZGVy
aW5nIDIwMTEgMTEgMTgKCi0tLQogTGF5b3V0VGVzdHMvQ2hhbmdlTG9nICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgfCAgIDE0ICsKIC4uLi9zdmcvVzNDLVNWRy0xLjEvY29vcmRzLXVuaXRz
LTAyLWItZXhwZWN0ZWQucG5nIHwgIEJpbiAzMDkyMiAtPiAzMDkzNiBieXRlcwogLi4uL21hYy9z
dmcvY3VzdG9tL3BlcmNlbnRhZ2UtcmVjdC1leHBlY3RlZC5wbmcgICAgfCAgQmluIDExMjc3IC0+
IDExMzI1IGJ5dGVzCiAuLi4vcG9pbnRlci1ldmVudHMtb24tcm91bmRlZC1yZWN0LWV4cGVjdGVk
LnR4dCAgICB8ICAgIDEgKwogLi4uL2N1c3RvbS9wb2ludGVyLWV2ZW50cy1vbi1yb3VuZGVkLXJl
Y3QueGh0bWwgICAgfCAgIDY2ICsrKwogLi4uZW50cy13aXRoLWxpbmVjYXBzLWFuZC1taXRlcmxp
bWl0cy1leHBlY3RlZC50eHQgfCAgICAxICsKIC4uLm50ZXItZXZlbnRzLXdpdGgtbGluZWNhcHMt
YW5kLW1pdGVybGltaXRzLnhodG1sIHwgICA2OCArKysKIFNvdXJjZS9XZWJDb3JlL0NNYWtlTGlz
dHMudHh0ICAgICAgICAgICAgICAgICAgICAgIHwgICAgMiArCiBTb3VyY2UvV2ViQ29yZS9DaGFu
Z2VMb2cgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAxNTggKysrKysrKwogU291cmNlL1dl
YkNvcmUvR05VbWFrZWZpbGUubGlzdC5hbSAgICAgICAgICAgICAgICAgfCAgICA0ICsKIFNvdXJj
ZS9XZWJDb3JlL1RhcmdldC5wcmkgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgNCArCiBT
b3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkgICAgICAgICAgICAgICAgICAgICAgICB8ICAgIDQg
KwogU291cmNlL1dlYkNvcmUvV2ViQ29yZS52Y3Byb2ovV2ViQ29yZS52Y3Byb2ogICAgICAgfCAg
MTEyICsrKysrCiBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHBy
b2ogICB8ICAgIDggKwogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRmxvYXRSZWN0
LmNwcCAgICAgfCAgICA3ICsKIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0Zsb2F0
UmVjdC5oICAgICAgIHwgICAgNyArLQogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck9i
amVjdC5oICAgICAgICAgICAgfCAgICAyICsKIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJUcmVlQXNUZXh0LmNwcCAgICAgIHwgICAgNCArLQogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L3N2Zy9SZW5kZXJTVkdBbGxJbk9uZS5jcHAgfCAgICAyICsKIC4uLi9XZWJDb3JlL3JlbmRlcmlu
Zy9zdmcvUmVuZGVyU1ZHTW9kZWxPYmplY3QuY3BwIHwgICAgMiArLQogU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdQYXRoLmNwcCAgICAgfCAgMzU3ICstLS0tLS0tLS0tLS0t
LS0KIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUGF0aC5oICAgICAgIHwg
ICA3MiArLS0tCiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1JlY3QuY3Bw
ICAgICB8ICAxNDMgKysrKysrCiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNW
R1JlY3QuaCAgICAgICB8ICAgNjQgKysrCiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1Jl
bmRlclNWR1Jlc291cmNlLmggICB8ICAgIDMgKy0KIC4uLi9yZW5kZXJpbmcvc3ZnL1JlbmRlclNW
R1Jlc291cmNlQ2xpcHBlci5jcHAgICAgIHwgICAgNiArLQogLi4uL3JlbmRlcmluZy9zdmcvUmVu
ZGVyU1ZHUmVzb3VyY2VDb250YWluZXIuY3BwICAgfCAgICAyICstCiAuLi4vcmVuZGVyaW5nL3N2
Zy9SZW5kZXJTVkdSZXNvdXJjZUZpbHRlci5jcHAgICAgICB8ICAgIDQgKy0KIC4uLi9yZW5kZXJp
bmcvc3ZnL1JlbmRlclNWR1Jlc291cmNlRmlsdGVyLmggICAgICAgIHwgICAgMiArLQogLi4uL3Jl
bmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VHcmFkaWVudC5jcHAgICAgfCAgIDIxICstCiAu
Li4vcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJjZUdyYWRpZW50LmggICAgICB8ICAgIDIg
Ky0KIC4uLi9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291cmNlUGF0dGVybi5jcHAgICAgIHwg
ICAxNCArLQogLi4uL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VQYXR0ZXJuLmggICAg
ICAgfCAgICAyICstCiAuLi4vcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJjZVNvbGlkQ29s
b3IuY3BwICB8ICAgMTUgKy0KIC4uLi9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291cmNlU29s
aWRDb2xvci5oICAgIHwgICAgMiArLQogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5k
ZXJTVkdTaGFwZS5jcHAgICAgfCAgNDYxICsrKysrKysrKysrKysrKysrKysrCiBTb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1NoYXBlLmggICAgICB8ICAxNjAgKysrKysrKwog
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdJbmxpbmVUZXh0Qm94LmNwcCAgfCAgICAy
ICstCiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR1JlbmRlclN1cHBvcnQuY3BwICB8
ICAgIDggKy0KIC4uLi9XZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHUmVuZGVyVHJlZUFzVGV4dC5j
cHAgIHwgICAzMSArLQogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdSZW5kZXJUcmVl
QXNUZXh0LmggfCAgICA0ICstCiAuLi4vcmVuZGVyaW5nL3N2Zy9TVkdUZXh0UnVuUmVuZGVyaW5n
Q29udGV4dC5jcHAgICB8ICAgIDIgKy0KIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdDaXJjbGVFbGVt
ZW50LmNwcCAgICAgICAgICAgIHwgICAgMiArLQogU291cmNlL1dlYkNvcmUvc3ZnL1NWR0VsbGlw
c2VFbGVtZW50LmNwcCAgICAgICAgICAgfCAgICAyICstCiBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZH
TGluZUVsZW1lbnQuY3BwICAgICAgICAgICAgICB8ICAgIDIgKy0KIFNvdXJjZS9XZWJDb3JlL3N2
Zy9TVkdQYXRoRWxlbWVudC5jcHAgICAgICAgICAgICAgIHwgICAxMCArLQogU291cmNlL1dlYkNv
cmUvc3ZnL1NWR1BhdGhFbGVtZW50LmggICAgICAgICAgICAgICAgfCAgICAyICsKIFNvdXJjZS9X
ZWJDb3JlL3N2Zy9TVkdQb2x5RWxlbWVudC5jcHAgICAgICAgICAgICAgIHwgICAgMiArLQogU291
cmNlL1dlYkNvcmUvc3ZnL1NWR1JlY3RFbGVtZW50LmNwcCAgICAgICAgICAgICAgfCAgIDEyICst
CiBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHUmVjdEVsZW1lbnQuaCAgICAgICAgICAgICAgICB8ICAg
IDIgKwogNTAgZmlsZXMgY2hhbmdlZCwgMTM5NiBpbnNlcnRpb25zKCspLCA0ODEgZGVsZXRpb25z
KC0pCiBjcmVhdGUgbW9kZSAxMDA2NDQgTGF5b3V0VGVzdHMvc3ZnL2N1c3RvbS9wb2ludGVyLWV2
ZW50cy1vbi1yb3VuZGVkLXJlY3QtZXhwZWN0ZWQudHh0CiBjcmVhdGUgbW9kZSAxMDA2NDQgTGF5
b3V0VGVzdHMvc3ZnL2N1c3RvbS9wb2ludGVyLWV2ZW50cy1vbi1yb3VuZGVkLXJlY3QueGh0bWwK
IGNyZWF0ZSBtb2RlIDEwMDY0NCBMYXlvdXRUZXN0cy9zdmcvY3VzdG9tL3BvaW50ZXItZXZlbnRz
LXdpdGgtbGluZWNhcHMtYW5kLW1pdGVybGltaXRzLWV4cGVjdGVkLnR4dAogY3JlYXRlIG1vZGUg
MTAwNjQ0IExheW91dFRlc3RzL3N2Zy9jdXN0b20vcG9pbnRlci1ldmVudHMtd2l0aC1saW5lY2Fw
cy1hbmQtbWl0ZXJsaW1pdHMueGh0bWwKIG1vZGUgY2hhbmdlIDEwMDY0NCA9PiAxMDA3NTUgU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdQYXRoLmNwcAogbW9kZSBjaGFuZ2Ug
MTAwNjQ0ID0+IDEwMDc1NSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Bh
dGguaAogY3JlYXRlIG1vZGUgMTAwNzU1IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVu
ZGVyU1ZHUmVjdC5jcHAKIGNyZWF0ZSBtb2RlIDEwMDY0NCBTb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvc3ZnL1JlbmRlclNWR1JlY3QuaAogY3JlYXRlIG1vZGUgMTAwNzU1IFNvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHU2hhcGUuY3BwCiBjcmVhdGUgbW9kZSAxMDA3NTUgU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdTaGFwZS5oCiBtb2RlIGNoYW5nZSAx
MDA2NDQgPT4gMTAwNzU1IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHUmVuZGVyVHJl
ZUFzVGV4dC5jcHAKIG1vZGUgY2hhbmdlIDEwMDY0NCA9PiAxMDA3NTUgU291cmNlL1dlYkNvcmUv
c3ZnL1NWR0xlbmd0aENvbnRleHQuY3BwCgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvQ2hhbmdl
TG9nIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCmluZGV4IDMwMzFiYTQuLjRlMWIwN2UgMTAwNzU1
Ci0tLSBhL0xheW91dFRlc3RzL0NoYW5nZUxvZworKysgYi9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cK
QEAgLTEsMyArMSwxNyBAQAorMjAxMS0xMS0xOCAgUmVuYXRhIEhvZG92YW4gIDxyZW5pQHdlYmtp
dC5vcmc+CisKKyAgICAgICAgQWRkIG5ldyByZW5kZXJlciBmb3IgU1ZHUmVjdEVsZW1lbnQuCisg
ICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD02NTc2OQorCisg
ICAgICAgIEFkZCBuZXcgdGVzdHMgdG8gY2hlY2sgdGhlIG5ldyBzaGFwZSBiYXNlZCByZW5kZXJp
bmcgbWVjaGFuaXNtIG9mIFNWR1JlY3RFbGVtZW50LgorCisgICAgICAgIFJldmlld2VkIGJ5IE5P
Qk9EWSAoT09QUyEpLgorCisgICAgICAgICogc3ZnL2N1c3RvbS9wb2ludGVyLWV2ZW50cy1vbi1y
b3VuZGVkLXJlY3QtZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAgICAgKiBzdmcvY3VzdG9tL3Bv
aW50ZXItZXZlbnRzLW9uLXJvdW5kZWQtcmVjdC54aHRtbDogQWRkZWQuCisgICAgICAgICogc3Zn
L2N1c3RvbS9wb2ludGVyLWV2ZW50cy13aXRoLWxpbmVjYXBzLWFuZC1taXRlcmxpbWl0cy1leHBl
Y3RlZC50eHQ6IEFkZGVkLgorICAgICAgICAqIHN2Zy9jdXN0b20vcG9pbnRlci1ldmVudHMtd2l0
aC1saW5lY2Fwcy1hbmQtbWl0ZXJsaW1pdHMueGh0bWw6IEFkZGVkLgorCiAyMDExLTExLTE4ICBT
dGV2ZSBCbG9jayAgPHN0ZXZlYmxvY2tAZ29vZ2xlLmNvbT4KIAogICAgICAgICBSZWJhc2VsaW5l
IHN2Zy9jbGlwLXBhdGggZm9yIENocm9taXVtIE1hYyAxMC41IENHIGFmdGVyIGh0dHA6Ly9jcnJl
di5jb20vMTEwNTQzCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9tYWMtc25vd2xl
b3BhcmQvc3ZnL1czQy1TVkctMS4xL2Nvb3Jkcy11bml0cy0wMi1iLWV4cGVjdGVkLnBuZyBiL0xh
eW91dFRlc3RzL3BsYXRmb3JtL21hYy1zbm93bGVvcGFyZC9zdmcvVzNDLVNWRy0xLjEvY29vcmRz
LXVuaXRzLTAyLWItZXhwZWN0ZWQucG5nCmluZGV4IDE3ZjUwZWI2Y2NhN2I2NGQ3NmQ5ZDM3ZjM0
ZTkzMmYyYzJkY2NlYjkuLjFjNjIyOGI0NWI2N2JjMzVkNjFhNDZhNDE2OTI2NTg1MjkyMDljMjAg
MTAwNjQ0CkdJVCBiaW5hcnkgcGF0Y2gKZGVsdGEgMjczMzMKemNtY0ckYnlTcT8tfGo2YUJgd198
c2RQen53NVdoNkJ7amVocUkzLSk3ZjREWS0zPTw4KHcjJHRRcW89MDV7bUdpCnpxeGIhTHAxc3o3
LXU9ZzNkI3lvNTdCa20lX1VBWmA/fWE9LW4+O3tePFl5S1Y8dV5BRzVFZHtPeWJsKUA2KlYoOAp6
RkBmeylAezk1YnoobWI/TVQ5NkB6dEVJdjVuWUY3eHJrPW93cjh+cG9wQmVwJlFnNGZZPkRgX1Iw
cEYjKnV9SFIKeipuUGclJTI9dm5oZjd7PzxyKC1hS2hJWTYkRF5Ue1RHdTl8PEppfChtaSlQYFR9
XzhpY19DITNaOCZVe1Z6K0xpCnp7ZHhJeDVtNT9TTXM1YU5KJmB6JjdxREFzPX5fWVJEfF9FU3kp
eWk5V2NKI2Urbzl7MmMpWlhLaFZLbkpvWEJnYQp6Kk8mQmB2eERVVTx7dmA9cUpSR2Z7TW10e2pA
SkVkS2pxS3dkZiVYeUB4RUR1N01ZMGcmK3EoU3t1dWd5YHRKWWQKekg7NFh6Wj49JkpvbkY4XndE
eD4wZDRORUMkSnFWSDdUbz1LQk5OKFJycnVANWA/dVlrNnd6bT12KC1QKGQpMTJgCnpfQW1gI0Y/
YkhNeykmKmtvTHQhWnhtX2FNPXk3YEFBYE91QFdmSDxRP1lFNWFQZDlEIStAT1owdWhVQz1ISGRD
fgp6JG5LQU9WVXpnNWJOT349MX5JdWsoUHUtT0ZDUjQ0ZXhKP0BMbCp+dTx+fEtnempvX2BjTkR7
RXQ+ISRCOXQqaGEKej1ybXJnI3Y1dFBiZ0wqUSs+aGV0elBMQ1ZUS2xTUEc9UXghVFYlaTdtNilJ
QWUoIz5HXkc4OWNhVjNUflc/bU51CnotUiNUbTJrLWJaMCZnVjZUdWNBVzNLYj4xSDQlRC0jXztC
TldJQ0lSSi1iVkdoTXo4RyplWEJPSmtIU0ZzLWxtKAp6S0IxdHY0KjlEN2Qkb0JZSmRVclJxXllp
VUdjUUBOLVUjfnJeO09nUG50NEd7SE5QKHc7ZUMkY255ayVscEchXl8KelFZOUUrYGpkQ01EfjY9
TGFXLUVadTdTNFV4V3klfjwyV1JsNTclLTJga1coMSpGNDlpMnxEaihPSFc5M25lT2N1CnotKWom
UFRrODBUI1NuaSNmX2I/QSNAVVhyPDlFYD8qOSRFXkUtbF9AKXBOVm0tKXQpR1htdUw3aWJ8X3Jy
b31kPQp6dnQ2YENTbDNWeE1oR0o5cTw8ZXI4ejVGPWl+NURYM0QzREAtJS0mfWNVZW9jczZPPUd7
ejM5WXE7PkhBd151STUKejh6VU11bm9tU0tpKStgQ01pN3Y0MD1wZ0IoMWEyNm5nT3ZBaDBmUloq
M2pkNzY7akxuMDdqZzJgLV5GV1dGOXt1CnpnT3RTa0pWVmRPUipzVH1UZFNIeWBKc1pKMjlnaU5n
bml0bGV4KVlzSkhgeGQmSVROTiF5ZnNJOHFFKGR2SkxnbAp6T1J3NTBvRl9aOUY8aklIY3dqRyE9
ViUxTCN1NGtPN0hNOFR0c0VFcURVdiRMVS1VeW1aSDErNkhgZ05OMjtSQTsKek1vOWhxa1o0Xzgr
bipFdGd4WCl1KjdMQkpFbi1sdlAyTENCJXs7fGtrdHcpSUNiVHF6KktPT2YqdSZOOHtrdnFkCnpf
d09RSkhKJndgT2sxemJJMVV4elhpITt3VlpPJVhgViMkemAtISt2QmBmRGxNfk48LWZCa1p9X2BO
bUhnUyhBTgp6bXZQNypsMmY5IXBgcVAkMiN0Pnx3RFA2Ql51QGshPnBwJmZmYmZpNmRxPEFUOUt3
UTAoeSZvQClAZHd9IXBMKV4KejBnT0czTnA2Rj5nc08ycDRsek87NXt4R1lGKGFrUURzXmpwS1RA
RFR5SFZFWFJJPykjbG5CJGg3U1Uza3JUMyN3CnoyWWkoYkpUIVNFRjd0MHJFc04qPHhnMG98IXRS
e2NtVlQ5ejN5JWA3SkFOTXlGKFM8VFJaUXJJKmJMYllla2x5fgp6Sj4+Q0kpMG9uQ2k/MF4xK1pI
aURJQnRLd3RjRU59YS16JV5MJncpX1g+Iy1FUTs5b3RoN25gSi1lP3p+ZHgwS3kKeis5ZiV2QHY9
bkBuVEN0NTRJQTxuISZGRU9qciRYYENVJDBFZnBsdlB2YXFhe0NCKWZjcHp8RW5RQnU2ViEjaUVP
CnpSKlpwWG52V3MpJCprLUEySGFQYyFoSV90YHg0OWBwYFdGJmJ8KSRLNWR7aCUzSW5JOF5SMHJD
ez04KEhtam9nVQp6LXQyaGpOVFBhSzl5LVZBcWtlJTEoZTEodEw5ZUpRPDUjUzUraFNAMndiaz1w
OSFDU2heWVNWISNAYGM2IX0kV34Kei05T3lwNmcwbmB6SVdLeGFCPGtUbWY9ZTxUNGBJbU4tcHFn
cnZrRTBRQCtsUz5Qc2ohTmVpYUE5KGt4JWl6cjQpCnpoZj1gRFNkTyl3S214aT9qPGM0dUtDeWRn
WiUlWHtwQyh4c2tEUGxvZkEta1NqWmJvJkx2JE0jKCp+ZEEjdjZgKQp6UClOd2pqcH1aWEMlJnhU
dHk1SnA7PU9ZbkVBanJjQzZuKl5uRERLSnl7MkZOUjJDXlA/JmJASmllQT5famlYJVIKem0xYzt1
dyZKWSpZJlJpSnNpemBUdXNtVmVZd2pyU0lZQ0U2ZVolcUwpfTBreVlKUmh6TThgcVYwV2lFPz87
SDYxCnpJezlZbnsxdFBLVmcpVXAjWTJsT2hmbUdAQnViNDZ7eUB3THBMd0F4RTBeViZGeCRmbjZE
ZitMMV8jQ3NMS3VlOQp6YVVkOUM+blY9bWRII3JSTTFpJlF2bzdCckY5KT8lWEY8RyQkOURJITB7
amtgSldyLTlUem9MZE9VSXN3N2otdEEKejFROWRzKDBsQTtCNG5nUTVLLVNWV1BPalIrciRHISl1
fHAtTT40PmBXRVM5SHBtRns3KDZxSnFeUElhQE90b1AmCnppJjBWbGRvcGB5VmNFRX51NDdBOUxs
R3kmbjhAaCRzPjcoVnRlfFljcEZnJU80dDdNP0ZranpgbXNVIXF6PVJ4Zwp6XyMxM0JAKzBAWVhz
VSVCJmUoVTthaml8S01rQHYmSWd1SlhFQzxCN1d9Vjd8Z0pSby1UQV5Fb3ApUWsrcipxJDIKencj
TnI5NUJxcWkzRV5sUzhkfm4qcVJeTHVgaUt5ZEFkNjAzd1l9d0xxQ0FaU29IUkc7bnZgeSlHfGEo
eDlUT1o1CnpDak9Ca3V0R2klSDZ8YjtEQ2E4Z3hwUShsND96PTBzT0A2VGVZPEYrdkN4N3NxP3dn
PnZBSXk8TEUwK09uKG9qRwp6cF5KKTl4dzFiIUBqJEZKSiErRlVXUGs4YF5WUXxnQyg5Q1FDeldE
N0NUWWh6T2VOKD16c2lqKilze196V3ItakMKejFjVjwtPFk5SSE2bUt0eSN2PypOPnFBJCs9N2w2
VDRhZ3NeMTw9XjJGTFU8MUM3Y1VuZlY/Skl5XzZ7X3RiWUhQCnpfPFpJX3o/MEl5eUA1NGg7RHtY
NFptRHF7UmJpWERvMHJnYmBKKTc/O14qOVp5Ukc1PS1sY1htdF4mMmZVZHJZYgp6OGBTRzxpWWhE
fmw5cUM2ajc5YD1JdE1MRG9VY1RhUGJ9dVJlI0NvJlN1VVlXTW4hIWk2R2xZOWZXTnRGTz8lMjkK
el4+QjJvcy0qZHt1SEs5UmFeR01hKDlBPjZ2UjNpVENeUiNhelBUTHdJbWVhV0t5SkN5LXVIbzBZ
U1Zyaj8jUzwmCnpMcCZJQExmWFErZUJ3NHYoNGR7SG5HZXY2VHhYcnttMXdxRGlVZGklUmspNSNm
WlEkbUpvZ2p8bm8rcUJEbkIqUwp6cVFAcGI8aDAtJEB8YiZvVHpwcUJiaG5BNU59XmVyWEdRbkQy
S3lVcj93U1IzaHp1PzR6YCU3QD1vWHYmTnNkXkwKekRMciV8bXRHUmR1aDJIOERVQU1QdWV3aT5f
T1I3alNvckdWJGEtI2FDcClPIVpXb0xPKTFSayVDMzMhJEtnbHBPCnpxVTRuK3JRYl41Mit3QEpT
KE08aCt1SEExOWopamBqOFAhaDF7TVAmMT4/ZktQSVZpZURVRShueXdxUWNybn5PYgp6I0VOaUx1
QnNSKShjeGkyKlk4YSZUe3ppI1NpbT00KHliWFY1P18tV2NeKzh5ak58dmh7Ymdzc1owK3lvWk83
eEwKemtfPXdgRWJIRm5sT2laYG9KUkF1STRJSjczMyokeGdGUXkjMCNofSl2PT97SGRhO3l6Iz8/
I2VFQn11JT9BNjZTCnpxOXZ0OWRiYjUxdX05RWU8MCY7QldFemFsRXgqZnJkRWktYlhhfldMKHBF
WHc1Sk5BTk1OPz0rKV5mRjk4ISRfJQp6M0plSEY/Pl9nMmhiRyp0MTFvPSstfiVUNjJXRCFZZTJM
YUhTZU5jckpvMmhMb2B7IWBUbDBvZnNWVXFJJmB5RDsKemNlSG5uQTtWYCt4Smh5S2RvVT5gJnQl
PXhIU1V5M2JrSjdmO1pvfjE8PEwwI2BNdFo8YkleMGg8fH1jU2Ffa19PCnpRVkY/LTtSJFFxeFZy
cWM9UkFscks2QStzV0JRP2VoOTl9ayE2aldScHppVk9geyY8JT0yUChhdShpZXFaT2BPUwp6cDB2
PT87R1pTaXhQNyloU3UlWnhgMlBGa283I0c0XnNWRHFpPmdQejF6Iz5rRntlWkwrZiF3VmJhNHxM
TVVfdGwKenZHansoeXJ1YCE7e3hqJHFgVDdwLXRVT1JPMEtwR1dVISN5YzYjRmtvbHMpbWQkMylj
VUlGZlVWOF98a3UpfX11CnpGbDsxXmo8Mzw7d1RHaW5UUCVaRWYtUEgtREw/Y0A/aVYpUVJ5Un13
TjkmaFA/QU8/RFE9Kip7Rm5vUG9KKkNMQQp6czZkRmIrJnkkQ2VSO081SUw+QilHMiszV2xIVnhZ
PDE8SWRTKVU1RjhORkZjJH1AdC1ZPDI2MHB8PigxM3Y0RW0KemBBaUc2Jm54ZCR3PUBFQmV7NVhS
QFJ8NStqXiMoQjFeQyQ/RUdacSYhSWtIe20xZlEjYShWSHJUIThnUXorPDtJCnpVcEF1dSRFVHlF
Kncjdk5kUH09cChMX1Epez1IJis5S2okbkZMOGJ8NG1xMlo8WEVMN3ttWTchWml6aHZoaEJLWQp6
QHltfVBJZm98OF5vZW8mWjBWbG12aDh4dkR9cFJ6YUw+ZGN7NTx1S28pRk0pdDdiNlhxfTJNQDFp
bXg7IUlOYF8KeitHaT0kYGtFPVdxYD8mVT5ZIyE1STwjTHtPV3liVytwbmRSNiZwYGtyWWZAck5f
azAlSVRefVMkPkljN3tYaDEhCnpoQFVUb0BNT1Z4X219MHxjZ25nSThIY2dHOWhKYGJRYk5iTXNj
KjNkX0xDKkg2SDMjNWhRNEd6cTltOUJ0NiRZQwp6ZXI/TVJKMDxCWDg/SzZQeF93bmkyS3VmdUh1
Y3x+YmFlMCVvUnNrJFdNUD4/Z25eNSRxMEI4MENxJnRDSTQ4dCoKelluRzNuRHBUSUAhKDtjfDxC
ZkA2d0E1aiVIeCVMWVVOcHwhTm0qVkJ1TDw5OFlJOFclVSVubzhCWE0lMWl6MjNoCnpNcGowb2A/
fW5jJlNBaT40SmEmLSpPfFo4UjNjMkJwMVZvaFdXOCFWOWgmcH14dFQ5XiQ5b1lXVm5JZGRxSFQh
Qwp6SDYmUlVzSmhvKD1VaFduOCt+U053ZztBSXtuQTFVKEZueGM1JjJVQkhtcT5PcnZKRllUKmI8
ST9VMjszamc1cjwKenREb0AmI2w4fTJ5UnxPZT9sQio7WmNCVjVMXzA0WGY1WE8hPXE8Vl5lTT1w
bzRCYjZ1dUwjdDdYN3FgWGUzdm00CnpILWMkWU1oYEJjKTY9RzcweHNlKyY4dCEkRzhTXkdYeXFY
aEJzJTdVXjBmKUVmKkkhdDFNTVFTSGAhXkN5YyV5dwp6QnpYMHM7X0NkSk9EYT5vemJxJitobzla
TSQ9WXtjJj90dDZlM1pCMlpLaSshbyp0IWZPWTdtJjBOVTZuUE1xTXYKejNJKUR0dEdxPFQ1fiUm
IWJgVnB6eTdpK0RwUlhtTWNRenotdG5iVit2anJRaiUzYm9GLUdVbnRLVXkwdTt2OUg3CnpXbWZB
cVloQlY8aTA0YXdeTG40ZmVxZDxVRH4/ZH0oKDlCaXgxLV9tTlpJP2FrQDlUTHRrNzR0N18yQyNi
aj1lTAp6IWRpX3pTKCErK3MpQGRxQmc9YFpyfl5BaVQ9O3hmMS00YFlAUWQoPFVMLT1RcE5yPzx6
MHFCPT1WcTF+ZUtEUHQKelM7SGh4LWo4QyMka2xLSUVLNl8yIShWRWhEMTdHNFghcDJ7UGdpN3ti
TjZXSHE9UTdRNSomVz1yTWZTN1pGQyhoCno0bys4bGBrM31+MzFEZmI0ZTszWl9eOzxqcWtSUC1r
cnV0SHtASD8weklWfnM/aWRBTT0kN1l5bF9mdlF2MHpBeQp6SE9Udkw/S2xReyh5fT9yeWBQY0dx
aVZTRjspT0taTCVBQHIzKTtGcW9ibUpCK21NYSl6NWE4UE5oLTtDPkNiSU0KekxwUnR8VF4/Uytu
UGNjMD1gTCF9QHNmO05SPlk1USF6X0wxTmRyZFolUW5VT3Z0U3FkYHlyemZZNF9HKnFKK211Cnoj
PkU9OClfbnshYm5hUnM5dDcoQkp7eWNrISQ8QkI3U3d1KFdMYVFCaW82TjhgWlRZIVIhflJrYTcz
aV4rVjhTMQp6ViphND1hUV9keHE+Xn51Nyg/Qy1GZnVGQzBmQkwlVSp9fS1xIWBRYEY2OHhjbjNS
NTgoV2N7dUI3WT5nUyt9Rl8KenB8ezNOMjBrbnA4NzkpeSpUOzBNSjdeaiVRSVlvZkJ7Q3xPeypY
aERBfUQlbyptUVRRIWVaJXJSezEpZ1RFQUlhCnpDcUw4fDZIQj1GVDx6TFZ0P2UzKG8wTTVnK0Zg
fkJ5fERLQ0ZfVyh7RG53MzQrRHRzZVpVSXoxPDgpbl8mZmZWaAp6K2o0aXwtOGVkYUIpWmxjSkIz
KUBuMzlsaCpaNjRPVn14P2ZHPz5acG8zUyNodiFRIyZaUXFGTmIjWF8+PVdCQnkKemgwKiNNYXQ2
R0kpQXQhWGstVVN+Ynw8YGZrWFBzZFJ4TyUmSGFuaGtkbkUzKyQwaH0wO0IkZ2RwVk9oMi05UFhr
CnoxTG9McmZTIUZDYyY+SDxvNUVYcnh4aE9nbjUkVW8odj5iZlBwME8oJk1icURkSlRfWVNOMEtB
NjU8M3V1WVVTUAp6YGJ6Qmd6ZHlLbmdJZXN5PmBmVjYjYl5ke3JSZGpXPWl1dU5eIzdqZnwzfDJn
NTVJODtWUzY1ckQ2TXJmSyVzQWMKenwzbUN5Z1BWK0t3fEUyZzZkV1ptQFNuRTtUQ1k1QDM/Wmok
SDE2UFBwOVM7JTR8Xk5iSXF+NmdSWXAjRTl0e2oyCnpJWjlxPj5Ed3pmX09pcz1QMWZWfWUyP3Fg
dEdiRUh2PXk3Y1VjPUVBYn0tNH1QUX1wdUtBekA9Xlk1U01YSVNWfQp6R0ZFWSp7WUp9aHIzfjBq
JUp4Q15vVGhEVkhtc2ljaW8/XjJpP0h8Mj4jS1hsPWk3YD5sYm44ek0hYDN5dkJ2e3wKenB6P1pZ
ITNrbjVUenI+VFA1TzdgPTZyTVdseF8zeHsjR29lKD4yJGZ1Z31Mdl5jQEdfQ29fJn1qZ3YqK0l1
Y3tBCno2TnQxKG9HdGo4bS1uKDNnc1FqY0hnMEZrWk5fX2h0MmphRz1zIUdwI01zfXY1WjhtUHJ0
NFk0KFR+fDNocl5UJAp6Z1dDYFhhejVyeiojQ2x5MlVfb0NBVSk3T1Q+bmVYb0U4MDl5OyY0SEdY
VCV3PFR9UF5qXklwP2g+ez0tWT4+LWYKelR7MGgoSmV8cGxEVSRUeG54bEl4WDNDbXF3cXo9fjk0
ZTNgR0ApUE5SSkxWK18yV3NpKTlwdTRzVH1jIzM2R0o/CnorayFyJkIrYnY5TmlpRUElYGU8Y0BB
WCkqe1RNMHtwRi01TmhyQClRXlBKfjFJREJzRkE2O0ZaSGZMfWFSIzZZcQp6RWtfe31LOE5ScmIr
enUrQDdaKlApNm9uKThSR2tyNm1MOEN5VGl8c2R6fFU5dn0kKU4tRVdUYGtDX18jNXRlMmMKem5M
KzxQYk1FRl93dUFuSD5sREpAcEBmTmBMWlJRNG89MyYmeXxMdTsyYWVzOWJ+V194bTkhRmFlZz5e
O3BIJTIqCnp4aWZrJCFFcSNBdD9JS0djdFl8U2ltOVFlVVNEJkBLR3s+fWRCMTYpV1k/Yz1qJDhg
N0hPSjtzbDZMYjlBZ29hSQp6NlMwcXB3b1R7I3BvZW1mMkVXPFY3Yk9ER3NiQU0zbH16T2p6KUc/
JmZtcU0wPUhKbEM4Yz4/fWZIWUd0eTY4dTgKekVKZXo2aylQXzRIMDMofk15T3dTLWprJHI7TmZY
bUhAIWdwUEk8X25Ean1XTnYtUkJrV0UoTEBmVyEoMUpkTVhzCnpqfFJvfTY0dWleb3skfT1ALSpo
MHFUdGpLczd1S315eXoteWBubVBteShiYl5aY2x1LUNWTDkoO3IqeCtiR1lRbQp6V1UhU0YjNXJ7
Yk8rdzkzX3YmbiEoNk9KZEozKT82QCk+O0F0e3J+PmthcSlWWGZKTWJDcDgyNEJkVXk8UXNOclcK
ejJTVHMmeV9KQ08xd0tgeDsmQGF3Y31WKDdmNnQjK3Y0dTB1JH5tJGR1PGZwWk1UJmh1RWRjQlIq
NXA/dl5qPkdNCnoqdD9mVGRPczBgT1BlaW9YbVVxXnY8XlhZWjJ9ZTBoJDJtKj12cVIlPWpwN2cj
eSkzbElXcCRDdSpNUkpnY1pVWQp6NFliJk5KRW16WDI4RSNKVzEtazRAdXNEb1BsUlNzcjx+QG9P
eClKVz9nKGUlIXhWZmZ7KkhkcF4lVjJuK1YlVEcKejU9V3VJMlZqRDJlSW9SSDVzOVRBeDE7TUUq
KEleckM/ZkByIVB5KXB5VWxDMkFSfSh2YT9Qc2UlTWtQcVR+Mz90CnpyLSRCISE+IX1mdy1rZ3t3
fk8+cmAqQSpUOT0zK1JmNks1TChwRWFVUkpDMzdJVzBEI2RNPmAhcUxCXnhjKnFFYAp6TzIpeChL
TmUlK2lSNiFHOURSQW1ZM3deYUpkT011Sm4+YC1ne096M3VAUEJocm83QG5sOSl5KmM5OzlAZ2Y4
STcKelUoS0l5MSlaLV9KaWRQUWp5TiRrMEA4OHtfY1N9M0s/V0w+XmFoUzJkMCMxe0ItXztXN0Je
cjFiVF5YSCh2b3M9CnpzcnNyX2FSP2k7TXdCWmdCR0wtV0A4fnBwe3BMKkxTPGxmaGZqNTRwbGsl
Km9rRCp9PXNTOyR9eHRwSklFMF5VKwp6UGZ1LUJYMmtsQ3VmaTctZjdDa3QlfUpzbUV7d0tLenpf
PkBWRnlKaWtlMn4hdHc7Sm03Vz9CYll7U2VWSmVEPz4Kenl8OVBlIzhmJVV7QVBoUG1mZmVWWnx7
RzIxfmsoamRVNSYpSVB6MDZ5V0R9PHMqaWhYaDR9WiV2MXVAPjJmYGAmCnorSUdTNHl0ZlFHQWlM
TV5pXyY7U2Y7TkdYKjgwI3hMS3VwYU1kaWZLUExOO1REWSZobDBLIzdOSzlaT2srcXhacwp6ODE/
WEpLdGxJT016aWBAN21rYlYoez5pQlc7P0kxYVYjKlAkQ2sqS0h9fEE3UCp7RTROPHJgSHcoYFps
VSNpTW8Kem4taHo4MDJJTkF0P045RWRpNjY3ZU4hfkg0SHtRQUhIKDx2cztzcCs4VXh2X0I/P0M/
ZihJODdUT2FkfTtrUVZ4CnpIaHhCe05xd0JLWEpqXzs8Zk00PHMqSnM8R048WmQpR0BTfTxxZWRR
Sk1rSkdXWXtpKTx9LSFNKD9IYmViTGlqWgp6VTt8cExZOz8+dVUkJEpxciEhaHhZcVBaZ2p7eXYw
KCNMVUZSXyg/VzFOWDxROERUYGM/fVZmentzT2RuJXE1c1EKeklTOGIocVNKcy04bzI1KHFBckJR
dlU4O05YR0B2S1FzKm49Vk1IU0F1fE9TQntqR0E8SVl0TzRRP3JLciQrU01HCnp3QGV0Z3J0Ji03
NmozZDE7QWJxIXNlOUtLOEg/NG5IMDJafm1tLUpncTBSMDV3VytXNVc8QGZEYW48ZzhBdEJ6LQp6
KCFmdWAhc3lNOVNUNnctSStNWUdtZylsRENhZVB8TzdiSllWTTZ6TzIhOV9iaispdiV3MHV7I3Eh
MSlVe253T1oKej95JD1ILSQtOD0lRnQ8YjczJllTTFFuT2lHSXBPOHl8aFN4MSNIbCFmeFlldlhW
c1VkPUUlRlNyemlPQDtJWXFCCnpDajQ/fUZ3eiQ2dHlHM1NGMiZLOUo1JUk3ej5peU0oVkwtKTNa
dXJUS2FgJCpCcnNxYDRfKDsxekJFcm1uMiZ3Nwp6byFAQnFAQ3BIVW1VfklMPnRxQUU7KGlFRVE7
bUs1OGZZe01AX3pnQTIjTGNXU0AlJiQkRyRpRFpreygpYFVzMnAKek5hcj1SVGd3dEAyY0N5I2km
SCpkQj9GTFAkezZ+PikpWGlWMVUxRSkhe3YxMHRPPDRrZjEwVGxHP1BWaVkje0Q3CnomMHl2WEtS
U0gzN0F4KSFSOUU9MyRBZXJCeHA+JmgkSjYrN2BfODZseVRgam0wPChfMzdYRVh2UVFSTXVgS09U
ewp6QnElfE5MSFlncz1iTk1IanskMUFSWnAyMD1wPjhrbzlUKFpEQmo/MWAkPUgrXzFsfVAtPXxg
R2NOem05PSZEJGMKekh5bWApVT9SJmNoU0ZYeVgoaWh2YD5uamF2aFJBKyg0diNhKCYpbX1OYUlU
d3c/YG0tVmFIVVlwOSojMDVAMkE0Cnoqc2NkNzxGdkpgZGFYeW5QRik+RWoyUiFNPm9OdDtDV05l
az01NWw/QiZqJDE9dnVOKCZwdiN8PTZnT3VCRmZoWQp6aX1Bdms7JiVKNm1+Rz9lTGtfRHFNVTV4
WkFLUUx6UFBFKzxeMkhHelVBY0t6KHtPcyVPT0psbj5tbXNBNHlTVyEKei09fk5NaSF3e20hJT5j
VVpleHp9RV4yR2JfRzJGYGRSYHpLbXZMMHp6MmB4eUEpJH5FWkBfOXFATioxRHVtaSZHCnorcnhN
ZVY/RE5OPDtYXlZLVFJ0Yzg7IXpEfEYhQHJwNnV7cE5BYmZaeHVIJkJ5bzA/fjZtVk1hayN2elkk
JVJsQwp6UGRmPVliZkdraXZ8PUNzUVJsYE1IQG9BMG08WCVmPH1ediVkMzcrb2o+Z20+YXgxMTd1
VD93Zmotekx1VERwYHcKejd4TjxwdiVNU0hCPmN+R00rI2cmenYqMHNpcGZMK19DeGRJeTl2OTVf
KW0qNGxgTGI3ZHVjKntKVFR4WUdeLUk4CnpPNklJUk04K2dwP2tILX1tdH5DSFJrU1haQ0Qxb1NP
JENMJXNDWXZ6WEpXRzlxWlozc18hVkg5Pm5pMTRJUFU8Mgp6P2o/c0N4K0pGMU58PSphMkJDTV5Y
ZzFZOWVQVmI1NUV7bEtVS1ZqO2s+UkZ5UzNgZ1lmKHwrPCshP3JMblh3OFUKejtrfHBeXyt3bWdq
ay0kZFpXams4cC1eR1k7Oz1+IUF9KUJObClGcClaYV82KGoyfEkpJXBKV2xKSTJrZCg7Yk1uCnoz
e0lPO2F1JFVaWEN7bDUkJWRVOXB4ODtHQ1hxU09RS1BoY3lWIWFQX3pSblExY151RWk7X0NwenFz
WV5PTTRwWAp6bU0hQU1OTzlWeSVHRFl8byhCcSFLPE0xZWpwVzVuPStGeF9iSGIrSCZZYXpzREQr
JTNYNHk/eVVKdEtIPmxYMnwKelhkblFTTGJ2d3RwflFKdFAqbSN1ME9RUCp3V1pDI141RmJIeTE2
dnk1Xj1QZHBUMCQmTl9wPD5zSXtvO3Vve2NBCnokQH4/K18hbDxeQXFCeDZiREQrNyp9LW5oTGs4
ez1zbCY5K05DIShybDFyI2htOFgqWEZpaypPdCptI0xDNjUxVQp6ODtsSGQ9Qzg4IWo7QiZKcmpw
Mks4Ym9RI0J0I2UqdHtqI0tuTC1wUExxVmtPRitPRy14UnlgM0dMMiRBXyZzIXAKenV9flo1T3Nl
YkwkMWNyQ3hvV1A7TG97dlExaD1GdGtzWk9ZTjc/ODlwelNofHBZUTY/QHQ5Z2tmTmxeRXAqPSl1
Cnp1b2hmWW5JVipSdG9aJFdKKUwzSm15Tj88XlhgaSZXX2tRcjwxLWZnOH0obmNVUmRkc2JHQU9i
RTtIc3B7dGF4Vwp6cEpIZDxhfjNBUzxUM2ohQ0BYcXMzdTBAdmd2eEtfN1RVfEJaTktTZWZhUzhp
Z3o8Z1hrOSktKDNpV2RvVHptLWQKejQ9c0hlJVI7UG1VJVUqc1Y8KncyMncxc0oydFFRRCZqUVFr
Z0g3bUpiOCptQT5GRDBkYjdyfXojTU5MPTJNQHNHCno/WVF9TyhgMGB9RSoren0qOGNxK1Ria3Rv
OXh9IXxifkVAVWBLOEtKYUhQMzc4emZ7QkR4ezZmbURGMEpGMWtQXwp6Rz0rPn1teiF7OFR2Vihl
P2Bka3kpP0M+NGJCTCR1SFZCbE8jMmFTbHRAbytGaWpofGFnQlN8WVRAQih0bHQ2NSoKemUkQzc3
eE80NT0/UTFJWHZkPEtIOU18OSR4bHVNaStCTG07eC0jQCR2V1RFTyFFe3licUVXXmk5KUlgVkhP
YmY1CnpCOH1mTD1xbn1Rd0U+Pl9Ua0V7aUlIdVI8R2tNKyN3VGRJdDEjJUlaN1piaG50QjByU29M
TyRIQjYhTDc1OTZiVAp6Ty1WUW1nP2IqK09nb28lTXAjMGY/SmFFI1BhSSRgUlZIJE1zeWE3MU9f
WmxaRThTQzVLNF5hWXVefX5uJVQmI2IKekBAPEF2Y3BRKVcycXBMRmdxQWtiM29UdG44aDR8Rl88
K2AhWiQtJTdvcDYtRmN0KDhRZSpmQXdXJFFQS1RaQXVHCnpCdHFDbVJYK0kmZFZMX28zdUFpUl5O
IXZvUDR5dnplUTxmMzxIOHp9QEJOYVplV1ZyP3E7Q2EoYTZ1RndrRUlDYgp6VUdpSnMyWX5kWXMh
VX1KOH1TMjh3PispJGU/e2dlPCNlKVZlfjM5NlpLOTc7USVrRElsTXZ3WTJZfTBeMkwqfTsKenpj
YmBHKDd2Z2drWCl9QHgtbzFneHx0TDBCcitRamhJSzhPZm0hJE11Zit7RUFOTn4hSHp7ZTloTkVP
U0FSQGIpCnpIN31UT2FTSjRCdkt+PypDcHVyfUdeRGNkYUFMZ0FSUUNOezRCdEBrWGlXJUY7R3Fu
PUJYLU1ENFpYQnp8MjZIagp6Q2kmVzleZjJhT0F8XzdsK2pzKCo2ZTBBOXtwKXBvQUM+JU1idms3
QT4kYjM0aD9NVEg0cytjZj4xJU9eeT5icHIKelhMZ2krcSt4JnpSWTAjSV9PQHJMY0liMm9veiVF
YmBpKi11Tn5WQ3dhKzIxTG1SK3dRO2kjMSU/IXZlamdUTjc/CnpeWVZ0WiNsYHYyXjgtUCpDeDdA
XzJBd1dVclhFbEJTN2U2SCl6NjlNdCNsflc+bUxpLTUoQXhmOyZuN0I+dFFyOAp6dDJAMXFPe1Z8
T1hzKVd8dW5VZXcoZCY1NiNKbTUqMWZJIXhPR2VBRmctMl8kLUcocTBLNEBoM3xKck18MXU3fEYK
enI+TkozK1l2eVI9TldYTzRtayoqbT04PnJuZn59MFp7KCRHJiVua0FvMGgtWHV6eGZwb3ZkeTJN
bzlTaFVueyVjCno0dDFjNjZCWmN1T0V4fVEzfW8yU2pkSFdIM1hFZi1ad19yKHdtTTk/Zm4tKHhl
cT5OaGA+NGN9JFdqK1chZSZPcQp6YVQ+RDlQWHZ6SF5pRnZuX3U4anxWdHkxVzBsNW1eNTFjKzVv
NFFUYnFTcFY+K2VSN3UrMCtDO3RTS0lLMWRkZlEKemFOeUBJZkc3NnVGM1BQbjJQRE4wPSYwb1VZ
Jm45WWVQSWNweU09a0d2ejg7VVFnUTxoWjFwfDlMc2VAKT8maEgjCnpRZm9oNWs4TE8xekVGVT45
Sm4kMkQzV3x3SkdaRn0/SnElSy0/KlpGZEs5RXomdXAxJVFgKEJUMjV3KlliakM0NAp6X2Y9VkVt
VjchYGQmZiRRcV81fVJiblQrRHB3I3okbihRPkhAPy1qQWUlaXxiSmdUaEFWUDFgZWR5LWhSY0hY
K0MKelZNNl84KFUwUjIrV3RhMTxmd010ZjIheU95ZWV6RzttY0Uxc3xHcmskeVI7T2dVKXdXJW15
ZkBTTGowR3M5JSVhCnpAVHAhK29PWERRbn1YUiVVczRRdHZBPl42TlomU2RxKFZtMHg7VGdBLTFm
ezN5PmN3aUltQ0ttZSFBRFJ6VDJXZAp6OEl0MDhXN3whUjFVVWp4PH1FOSFwQnZlaiRicXs/ZXhs
JUMxMXImTDFTTD5pQnJvQD9zJjMjJGp1WmtISzU/WXAKemIrN284RXohKVJzXzk9Tko3flNfeCY5
LU9iSWBvfkQwZT0/Yk1lNzQzcDFJKSZBVXBabFNoNmxzbjRge2FERHslCnp6M1d+UyNxcW9LO3BD
ailhciZZZGgwaTtxdC08SFRVcSZ3Z3w2c1B1UStgNWBCfXgxRGhORDRxYUFJfTBoM1lvKgp6MWJD
WHh2SmUwT3ZyRXJqdWwmYztGODBOODlIKUhoSXs0Y34hMk9fcHVnT0V1X1dOIWl7WVczbVk/QVlo
emVORTUKeip5U0gxI1FhREl2RUU0flZFKUszdmc2bVRhUGNmMy0+X2NAJUZTOzVxRGNSJTtne3xx
JVBhPitCYXhLS2Q3IT17CnozZ3BAVDBlSnxKZTduZk48QlYwKGVTc2x+WXtpRU8tOUoybnlAVXEl
eEBvNnp5TSp3ZENBcVMjUFgjWWFydUBacwp6TzUwT30qJm1WV05UNGk9TThzTW1POEZfb2U4U1V3
UUxZTyo/RmFSbV8jIX1WanRYRVJDVzUxWU1wKnJAYitATmIKenooOHN7KjIwMT47ZURWckhKbCh2
dkk4QSZve2ckUEpWSFBvM1AlOFRlTWEwMmFHTHVRSj5Pb0tBVUthPklzKSowCnpIcSh3MWtqX1dU
O0hyQjcmSnR7fjcpUDVNcVVwfSN4KkFUREE2YTZyMmZTWFcxI3lDO0A3M1ExM284YzIpK1M5Twp6
Z24tc3lQQzlgWUpzamxWU2p6WUpJaFh9XlZAZT0tdGlJfE9GYV5MfktranVuWHZGdyVEQStqWDI3
I3lXQThXY3gKemNuJm80RlE9USFLJXgqJWVwVVZzPDxuPFptV3UlT2VJdnVTQTUxTTxufTZLJFdE
dyhFNEJxd19KKE12bGVlRz9+CnohVjw0PExhdUtvRUFhSzFYNXlSRSpAPzVAPHRkQnd1an1pO0RB
KUtGY3hIKlNnXjZmNE03TClnTG4jfllCQTx0fAp6THlfeWZzeXJwIXorQzN6cVMpYU4wNERvPUQk
OHB8UDlxOCQrP0ZEUHxBTXtTezlARFpsTlN7cnNQVy1xYUZTcDMKenEpPCVSSDB7SlFVTClePS1M
VnJsYGdKVVZOKVYlcCNNR3tpZSlgUyl2TTxoU1glPzh9Tl9+dEJ2Rnw3WkpWIX5ZCnpMMnhGeWlg
Zjc1WVApNEYrakMralg2VFdeNGJkbzNPT0UjMDVxTSZKNn5DKT49VWRTX1J0N01vVHNSbUEjVnY8
Iwp6JDFWYldDUyo2SHR2by0pO2hfYHZrczdzUGpFJlJkUC1MTkpQYDBDNiZIPkI9Z3BxKVk+ZHRZ
cnMzbGNjWjlQJH0KejZfQW9gSD0xM0k7XzEkais2SzIjXnxEZFIob3lBTWMycVZBJDs5OSlzbTJp
cVE4ckJkbUBxUEdAND1jNUUtd1k/CnpvZ31pPWc+cilUcTh8JTImYEJnelVeITgrMTl9bFFXWUB7
WU5JTDw4KVFySlAjflU8TWNpJEJvKj57clpYO0dDPQp6U1IwcjErekhWc247Wlhje3gjPjVsN18/
SlNTdnlmZGBlc3c2VVBpXkdXaC0wPXZiX0BYYmZfbG1NNEpXUHBaRWAKekhXZl5ZcGB7KT5XcjRe
YipKfWpNQS10bjkhO1YoVUl1Z3M1ajxAa1l2ZktKbTxtTF9HLWRYd2puVShxJTR+T0s5CnpmZFg4
czFzeSlXTil1KHZUKXc9JD9tM1VXcVA9aCk7VSs4bypEJklfVDlBYDY1PyVQJDVlSHJMb0s+NUVV
Uig7MAp6WHhQeVQqfmkzSzl5NDVMbG5lZD9WcSVzbzgpbTI4MXg5JTNzUCkmSHZyXjx9JUtaYm13
aUBMI185ZkYoKVMpKV8KemJrMEw8dFY7PWxmRlReXkYjYkxweCt7P0hlYyUoQlJ7UkUtPD1NUTFs
RTt5R2pQMHU8Um19ZF43NEIpeFlFVylJCnp4MEp9KU9nV35sVHdFTnE/Kzs7WDYjNmc0cHloaDdm
cVMzXnt7aUglZkVtTD5PKX5mJF5zeCZGUCZ3d2lfeEk4Rwp6eWhyTHFETCtXYWxuWj0wXzR9dGg2
U2l+M2x6RFB6dyRpJCMjUTlBZk1RJWE1ZUQ2JVdqd2RZLTY1Q31GZkUhK0gKejVpYV5nUkVJdlhK
Z2RBYUthYD1oYkg9Q25PWWlwIT9GYSRgSGJBeEAhJUp7eHBTdXlyWHpySzVUSzskb2w0QmFFCnox
eG9TZ2w5O30tc0o7YTQoSXs+YXR7cHt0RlQyKDAxQGVQfShfX1dSWEQoRHpCaTVHOGR2KTh6QmZw
OEpxUEsyRwp6QVRHfGlEO2BEZEEzTTFMWEl2fCg1QlYqQVpRdEFsXk4lXnNTMDE7Ozk3YGhpaUlW
eXw1UXRsZVIjMmZDYFNhJkQKekBOdCYhXno7P1U0UEtvT0t+Nm84bWIoJVAmTUBWQzU8ZEcyMj9Q
KzElYGluc25CPTlvWnsxYG4yWUdgQnpWKGNqCno2dkFHKyNyNF84QDR0aXlING88RU9WfEdyPjAw
aV4oaDV8fmIqMDFiRWxhajdCP3Jga0B+Uk8pZCg3c2JPciE5cAp6Tm83TVVBP2tTJWEwTDxSUEAx
ZmN7VzhhZTtKWkYmayZYMlg0KVRkJDVydCVteklwNjVZNm11aGMjbFJIYnNOdDMKelpVU3xXZ0Qj
QFJaOFh4KGtWYG1FJG9QQ08jUzxHWnRgdF9vO0o5TTlFOXp+fVNoJFh3aXhlfTM8O1ooYyhtQXZt
Cnojc3xQY2VyK0lmVWFCPUNEeHZ3cHJaJChHI31DZSpXP2BqWGA7OFM5RDhQbyUhfCRaPV9wUmlz
TGhIQUE1NURpdgp6dTBwK0J7eDhCdz5PVDQoaSkwSko3VHZuKFRxJnUlMVpeNyowJk16eSFndm5i
PFo7flNJbXpCPHpJT2NhUmxBXi0KekxoMi07K2tOUkJUUFBtSVIhQld5YXxHWUwjdllRc2tCOWVY
V2pLdSVwWEkmeFZ3S0REJDFpUVZ5N2NmeDI8ZzI0CnoxKngwcz90KG9+bn5BP2EqMklAWWtsVV9e
biZQUkpHISFhT2pxPXF3JTNxKWFmaVReQkhsIWwwNFJePUcrWWhPbwp6SGBseGlSJTJxRV8yXlkj
X1Z7NW02NVdIYUN2PVlXe0xAKkUxLW9NNXJFKUVmeUJ6bmd5IzU7SzF7d05wTGtCamsKenlYWiZ6
Z0ppTEBvJFkxVk45QkRoZVg+d0QrcHhuO29kRCRAM05lfEMmdDBzWlczTDdmNjVeI21vYERna0Fp
azN3Cnp6Yn1nZS0xNWBre0F+SCtQWnlXNU9uSHZFJHFuNkwxe30kYG8+Nz9ZaVRwVl9CYVRqMXpp
eElKYTUlX2txY2QxZAp6UkE3aFUkfXQ+czYzeDRBcCMyUHh6TFkjMFZTaFVrZ3tOKGVGbXMhJG5L
T31pSE1OY3M/cFd7MjZfQlo5Nlo7WHIKejw3OF9gZSo2cU9XXihOTF5hYVk4ZmZveiQ9WHtGT2wm
QzBfU2MxKXBEcERJP1Y2bHpTKlNYTCg4VmtFR3dKaXBYCnorJks+WkV3b24/cDJuJkY9VD1uPktG
RXxebTFjJU5xRFZ3PktNbm9tUHJ3RUJJc2FQYzsjZlgkbmtecnkhQk5lSwp6aUA4Jnp4Mk01RTtx
ZTJGNzYlR1I4UDRaej5aUV9WZmh9aihwd19scTsrcDxgRDRSU0FAdVVKQWM/dzNgQkpiMVEKekFD
bj5FbUFWTVVMYHhBanNpQmR9RSFBX0RCLUw0TllkeEcyI1dPfEhycikhayhDakE0clpKWm5TJEZO
T1R3SEgoCnpUWEBHZjFZJDNHd0k9dndseCFhe0tEfCktelQmRjEwcztHWSt1aWg0Xyo9JU9JI3Bj
O2hJODJJJiZKKXY0dFN4Mwp6YUxqOVlXR1RLVG91ZF9DQTBHcyhkcT1xQ1dRTX1wekI0SmhHdjwy
WDdrS2ZvS0ZDdEs8QkxhUmB1T308djEzZGIKemM2Pm1zaXZzJlNwc05NTlFNNSlWcUgqPnc0KTtY
JTNjZTE/O3RSQVE2OFZDRTdeb29UX0FWLSNWRFMhampGNVlUCno5cG1iLUhfN0U2PUhHQWw2fj1K
TjM5JCRyY0JJS0Q2YDVVNVBfUVdmaVFWaikrNWg4X1olKkQ9QHhOTEFIY3IkUwp6QGpVc2dXVDhA
YEZhI0ZFX3hwSVBLJXBFRHB7VTVnazRLd31ETXpWJFJHfDJ2UjN5JjE/QiZpZmpWQ0h4NXtmVmAK
eldvRnBnX3s0Y28lMEVQIytKND5JeGFZUTdsM3NjNm92KihSTT9NMTtINW5yRiZwbX5FSm1PSCor
OTZoPUM4bCFpCno5YzJ6PD4tJGlNKlI4OFYrY3kpfVJTUztyTVZ6VW5ySD5TKiVQWlU0ZzBTSCtx
Szd4Qjl4TzR3VyM8PGs1RkUyfgp6PVdUaCokJFJPZSRgUXpKRWFkKGNANX5vMT0yKGlXJnwmZXhR
RiMxd3J0VkFDbzQpMDUyQEN6O0A4MTEmJmdyXk0Kenc5P3czR2toJiVkMVdfSktmNGhtaShsYH1I
NVJlSXU2blBPIzkjNlhQTCtzWkF6e1J5TGN7WEQ2RE14U2pre0hpCnpUSWMwUWRXQjtOMWZ1MWRz
KFVLPV9geFhkdnB4cl47SU9DT293Y3VhdmxAdUMwJHZ0OXFXRk44Oyg9dkdVXkZKdgp6c0xWNjxh
OUpwclApJHFwOXtMbEpLTD8oaTE4YSohSTVgd2NyUmM/NXtaXks3clRyNnsmWWZSUnNCdkFFIS1Q
K0cKejZmUWFjM2d5I0IxfT0kTj0pKz8kb1dIPkQxeTJsLVhzM0QtVjM8NmVpQlJ7S247TWJwbXw9
M3koUShgcUtWQzgoCnpfOEF1bipwYVdAYTM0WkI7N3RyJTJ0QEZgPldHZHlTelhMIXRpSSFIMyNN
UzVieHl3aWZKe2gjOXlaSkI5KCVDdQp6TUw4ZFZ1KytzfEZ9azsrbC1UaH1OMCR9PGJyKHRkakli
Z0o/QEhKbG5MRlZKNjErRGlnTjtHQmNkaGooa0lnbWEKekN6QXh0KjE1ald0UyFLWjBAbUFxOTVW
OHhhWGlBdj09Uz81dWcxUns+PTR7TilPVmZmQ1N9dyRJZjsyNG5xKXlxCnpHJTVwMCM+WClubXhU
KmQ/SCZzZDtqJFJ3KF9KTWtjamVFUDF8cXVlISNEVSZjY3VoMzw0JHJ5Qm5sQXlCbSMrYwp6VyZR
bHspcG1+b2xyeF41dEVKc0NWRHZvbyNlQEZTcjlqM2RPKkEpPUc5U09mKmAxa2RUUkxMLS1ldlp2
NVdVUk4KekFHQUxUbDJfNC14KXloM0VFPHBaWXdJTCExSDwlXnRaXlliVDxqQkJSRSFxUG9Eej5e
QVM1bWhqcFBwNnRxPD5ICnpSSDxRSzx3SylYUysxRn5QTXlnSFVYNXRCQ3B+LVI4dVlza1VSPzV9
TEdMYWZXaXcwK3F3RFNEQn1yZlYyMXhOSQp6ZzxTSiE4RjxkWGJyPTY2eU5rZzlhbGBtPWdmdTdz
QEw2TU5wXnVJZnJoYENFQUYmPHFLSSVgai1ebTMxU3hhaC0KemdSYkQ7MClhSWE4SHx8KlhTdj9M
TUZDPWJYIWpQTD0rfDttfEtXOStxZ3hzMUhnazJFV2BDe3ApUCFxZmM1S0ReCno8WTlqKzJvTkF4
RktqIWomajB0I287KDdkTVdXM2VxV0lVNFpAQUkrSWc3T0xhUSFtcl5GfmJRS2F+VTE1IVhEVAp6
KExAJWJfa3xfdD5pcHZ4UnBZcmNXeHVoY1I4PD1zIXQ/JHk/Ylkkb1BORXFeLSR4NkctaTg4NiZW
V0VTMDN6b30Kekc+aDMwUXY0dVJXb2xrQzRfKGJSZlhHLVBZLVRfc1RRUU1QYGEpZVRxe0ghR3hx
SH41Vj52ZDtScE4xNHc5TTN2CnpQajh5fjs8Q3ZgdHdrfEJmbCZlQz4kK1ZGLTdNc0ttVyZsKDx8
VzUhOCVgRDBFQ3NLPFNMTm4yP0Z6Tj5jZWpuXwp6MldJQSFJUkg7I3MyUUM4TylrP3Q1OHE5Skt6
dShTTk5YdHxTIzxFJHhCKlctNW0+OFZRdmh+PGdrOGB+Nzx2QGQKemZAe0w8SntzSHFqYWMxcDds
U2tzNEozZiZLNjJ2fHFLU3NmKVN8WnA1Wnw5OXZHQCplUVMpXnxpRDZYV2JQYiQwCnpAQmpYRkRo
JjRJYld2Y01pXzMjQklkZ0ltYlF7SSppMllXcTBUalFwUHlmZWNwRDIyPE82WXZQSXQkR0NlbyQy
cQp6bSFMUz4ye2BLOEU4d14xU3ZLVFUrSHNaOHN2SEViZTIqOHAlY1lOdDZIT2pKcD5qSiFNcmc9
WSVlXjd+MzRsKnQKel4/dj83Jlc5YVc/PmQzYi1eVz9uZzEhYk01ZHEpPlQ4b3ZqKSpNMDgpK0xE
YHZIdXh8YDdVYylzS0I3KklKa20tCno8PUp9SWlDQHU9X3p5LU4tN0NTM1BmVkQoXyFyWWI4ay0p
VW53cDFXSHF3RSlsZHhDKFc4cCNOZ1NMKWtQKGJuawp6PWgtak16YFArbDV9WmREJGoxJWk8eFR6
K2hMZlFUKHNMSmsmPXMhOWZ8dV9rYU0mWllpbiFENlEpQVViZHJrRkoKejt4NGFETWsoaDhgaEBx
cU94bTJBdW9KdCZYZWReZnNGZV9fVlJ2JWVmWkFhKTRpY08oXio/SSR4I2xDdzFOPVRKCnplZipT
fldJdDNRWnIpM2ReM19rPVA2fj4pTUZOU1c0biM4N3huSHs7RlQ/KlVTdVc7Q2QoWEg4NjtkfTQw
TlB5PQp6NyNUd3NLcmRje0huSm5gcXJ7PDtHKmtlWGVGWEBHdUwjNjhaZFUqek5Dd0JmJlZIJDFK
OE9PPFBsa1Z+aHdpNj8KejxiXnFTbSNANkBwZ3gwQ219OW5eLWxIRi1HS3VqPkkmRytAIy17O3Nz
VUh8aXFANWAyOXNtXiZyZkQ5I3FSJV5rCnpyflpEPDFJUzRPMmkqKnxwZnJLSDteJFRZXm0mc31q
dktGV3VWeSppOUFLbVh1eShebVBiTihWZlV7NFBvNjdRbgp6KWJpfiolNC0yS0xkOVR1ZGtmQVo1
RkU4ezNeOyNNUV99UGtTcVBsSkg0djUoV0tzJGpUdSpnUCh7PG0+OVJMWTgKekRNcXF2JDZkO2t6
QDNGUnBjRytDR1QoYSl4cVloIWh6XjFTUk9TaC1gWEM+XzNwcUctPl5sUElIX0xJb0gjb2tOCnp2
NTF6QF5YTVBJS1ZPY0oySWw9PSNEQndtZjV1S3U7TUY4PUpVcDR7NihqRW8pV2FDS0F0fDlvXlNV
eEI1Iztqdwp6TEFycCN6eGx0WChDTkEkNnpZNUVyaipZYHZIUmVwUloydXMld2JKcHZgR0UrLXl4
SSV1aWRuU2pXe1dJIT9zKyQKekIoWDt+MVg1azZ3RHtlQyhafjhoO3NYcjBHITRGZ0Y/flpBMUpV
eVExKHNGK1NsUyp4RzYoJnJgUWQqY3ozWDloCnp2YCUmNlJlNWVuMUlKT005e0tzQ2xKSjdrYDNq
U0g/c0lEZWRtUmxAX2JWVmJPbjc5PzlBQUw3MFYrRUBEQ2FNPAp6dml9YWFzUzJvMmpkTFhhYm16
SEI3T05RTFN3VE14NGVKZ1VEQF5kcko2bjIhLTxHMGtDfXNnejYhaXp7UTliLUIKenhTdmlMckYr
aCt1LT5CLUZqVkJwezNGVHBRNCF2dlJ0S3RsVyhTenVDOHcqYE87JTBLd09fbXo7JFl4dWpBTUhk
CnpsZWopKj8yRXMxbGNTS3gwSUVHKDNWRShvVypsQ3UhbFZFc2crSjIzPktSWnQ2aSN6eGpuemF+
Vj5hfkgoZ2l+Vwp6YExuREs0d24/P284RylHRj5IKmYoc19NdjhEejd5VnlOYHZLPT9jKStZeGJh
RDNUTSk2ays/SlVqXj01VVReeDgKeigjbE15cD5JJi1gdFgwcHtBNklMaH1MO15sNC1MOzl7JnNJ
SjJuVnxAbnIyKEdWUktZUkZ9fDJFUXEhYE84IXJfCnp5dWAxbmhVbGlrIVNxPUF3dzEzNjh5P3wl
PCZSJElfX144dVomUkI8V1hNQm50VnZUQilsdWNoNzM5ZDQoalFWcwp6dm9jQEJvZUNCS3NFcjFf
eWB9NVclVG08O1NnJFBaWW9NTmMpcWgzTFFLQjk+Z1g8PXZ7TTNSXiUkJlh4IUh9ayEKeldHKVhM
PjAzdU5zcS1BZVppSTUoKzNqR1RzMVRkbnN6TF9aJT5uc3xfZmpwUlpKIXhEX2s5OTw0JC00MjRC
WiVtCnp1ZG18NSpKcj55SHFGaTdkKlcqcmcwOGx8a2QzV3l3VjRtNFpeZmN5ZkZwJXZHeSg8IXpF
XyZrbXlZO1V7fkh3YAp6bnxQIXU9a1AoNDRHMnpYUDxHPjNpTHBzeSlxfHlAUiNTNFY2WmQxYm5g
b3BSeV4mdlU5fVZuMUdJK1p3QiM9dFgKej0+dmFzUjFpQlF3ZHt4RmYmMVMkPiZRPHQ0cHVtZnNj
TUl2UXFVRSVaNlAyaWVeeV8hUStLZyN7MU53NFBLMmVBCnppRnlqP0ElcilzWWZzcDloe2dvPVly
SmZ+eG8pUkI8VkNmJmwzc2dwNGpIOzxmYG0kMUFORzRNSDhWM00wUn5DOwp6Tj5xVDEkXktJajIl
e2RYKll8XlBgeyRiTyZEbj5WbiYmVWBNSD48eVo/a14xVksjNyZTSmFEbjluOFgkTldoXj0KeiRX
YUdqc2FsOz1EeSl+VGJlODd0KFo0eT9yfnE8dEFfI28mKkVKeVQ3MDYja0klVCh6Tk57ciVHWDYt
ViQjUn5eCnowV1NUNHVgPDw+cFBrT3QqMzVyQWBjSEQ1U3d2WSFGVV9JfTMtZ1pCdVAmNFZCWFY4
TWVqYWFUdz1YMipjTzVkfAp6RzMzPU0oSVl3QE4mZmdrTW4waFZofGVEcmlpcWQmcUYyKiZTOD95
PGFoJT8tVT1YRytwKGFxfmk2fXxXS2s3Ym0Kem5LKGlRK2omdDYlZkRNUlUyaEBOTTdJZlVHdklP
UEkwfXpOUG9TOz1lZG0xVTBZWGIobklFOXE/JSlDPi1lR1RpCnpDMVBtQ3M4TTJpZWJeS0V0cVAr
UEB4Knc7RCg5JTx3Ql5LVWhkd1UrSlhQYncmfjtzaWBrNio7TEQ3RT96MDs1cwp6ZGNWTEsyWmI5
WWp2UytNPzlYMkhCYnhwPF9CPE19PVd8OUtnaHM4azN5ZUh0SllCJmBNYFA4eXJCODJZIVktfWoK
ekRYdHklTzZNTjQ8UmNXfFoocn5PeiVQbCplOWhHRXw4cl5TZGZIa0orcEUkSWgjfWNWMVJnX3Yt
KkIkZD8kVmhQCnooYml4fHRje1BBbGl2TH4yIypvfHFne0RPSVRgfVRoT3AyemQwajQkKkNHcVBT
RXRjKHtSSmpmITF5V3hxfkc2NQp6blN5WCFeflg1UHJ7aCkjWDglczFOJjEkajZTYWpGJXsjOUFK
ZE5lcz1xfTlHZz1HUXZiQnRYWCQwVWo7Z30leFgKenVsPSQ2QWohUENWcEErRXdycXcoN1ZrMUZ6
NCp6ZlVlXnRidm5+Y2UtQyFIPmB1P1dQeVVvPjdzUXIwenZFdHlGCnpUN1p9SFpfYiRGWlBfbTBZ
enU7UktCfFdrWCV0SSpIfjtrKk9ZczxKQ1ghXypVJjVuQk1RNVhLVDdNYFRDekpIagp6aU8laX1D
dj1IeCRNKGckdDk5SU87QVlmWFczMiMlZS1RVn5GJk1mZFhqNFVkY293aWBeaklYezMwe3xkTX5x
c1EKekdPRVhjemM5c31NcDJxU3VyTlNmZU9EKEIlYXBhfHJEJiU+QUNpZkZKa152TER8eCtUUnFf
fFNJVTJGfl4oalRNCno9T3I7X3RtVTstO003ZC0/QHg0VnpyYSNSMWomU0UmIVN5aDZeeDVjM00w
JExZQHleOFc1aGRITmZHcFVabmBIVwp6Png4e2lyZ05keUtVUj1kJiEwZDNES1h1NkN1TG1NQGNu
PzB7ZSFucDwhI1pwbkdLSDllbjtHSzUzKn1vUWxqVWQKekZGQGlwRHRsVXZkfmdHeiVgdFZyK2VN
O0BEbnBSV2JLKGxATXtFPCg3WiR2c3hSY0I8Y01qdFZyemZXN29Mc3A8CnprWmhGXk5YT3ZpMD1I
TXZOaWg5RFk3SGdMNXtWYnVGQikldCpLY1UzM0N9YyNZTnBPLWBDZ3hpQCklLWN1e0RjNwp6TlJ3
ens8WSMqSFJNJnBpXj8oLXpfTUZNNz9FPVJqZVZfQyUrVjkkZXhMaVkmczMpRGpPbHFxcmhxSmB8
cEdiVEEKenBzOGdgc3s9SytwWFI3fFIjWVFVNWJhdmBvM2IpN3Y4M2xYYm9TZEpSTkZOfkN5bkBC
OVJpNkVZYGluODk0Rkx1Cnp1Km0rYUkjdV89WUxOTTxVIVNKaSoyb0tmVFkzMTdKP0opdjwpJVFe
e0EzRGJeNkoqc1pvfDxOcHx0bTZwVVlQPgp6TEdIe3l3b3B8YCVHQFElRG88OGg3ciEpSVdDPmc3
VEkoQWZEYk8mLT9zTnlNdmQkeGd7YlZuIVNnYSpCIT17ZyoKekEhK0c0RUgkbVZRTylYZGxfMlYm
bVZIJWY/M2IxfHNFaStUOyRNNSpyfjlnO1p0SWhsaStwK00lSyYxa1AjZmRZCnpKOTRkQllnYj0t
OT4kYis1bzJWWU12LTM8MGxrciZkfjZXanlWa31gMlA8Uiswem4qU2VSKzk+anVRYzRWRyt1Ugp6
QUUxZFY5MyliZWBzbzdsSTJFSX1oa3Q+XjIrRTB0ODwwMW8rR3tzNzBHOzduQTxYd0BPZkNzfCso
LThLUzZuWSkKel4zMnZ5KEpLcEdNbWMyKGBKU2FudCNGQl5PaGs4fG9geUZMbitpLV9PTT1qdEwt
a1NORF42MV5MaSFYXiR2VnRzCnpWViVSaVFGOyE/dSM+ZjkraUZsNVQlQT19RyljQFpvdjItMTlA
X3U1MDxZcGxxUkcxQDN3eHdIcT9DMXw8OWNueQp6VmFya0lEYjhRJmUqPnVoSnZiMHFCaU9QLUw1
ZFFVTkJvJnEmelh5Nml9TE1WXzNSN3RmTlAmR0lTLUhqbV9AfHAKendzZFNtO1drX3MhKmJ7Rkhg
MzFKVnpgbihRSE0mLT5NSnRMJmAmNHNsZFJWQ3UjTWlkPDtWNypIVUBxTm5EdXxUCnpAKHs0KVUh
aVB5TH4tYDdneWNAQ2UjLVg+NXd0fXdqPGZqbSFAckI5N0FXNURrVHZ3dUV3ZlJOWXBwU0pqOTZk
Xgp6cDFlJnpkZUc8SnFwfntpa1RlQERBKjZWbVk/VE5wRVQweHhwNjQlWE9EK3o8M0ktIW5LZGFs
PzVZVDZIK1cyOFAKekVLIypSeU96ZkIxPW9HZlVPUHJwIXBvNEp2YUhuLUIyNjBzRjR4bkVGNG82
dFd8Rl9TaHN4KUIzeSZpJE0oWFN3CnpTbjAtZzl1aWVzKHlqMlJBP0ZQXkRqc25VWGh9U24mIVZy
WkdGZz1DISg7SkFsKVIqa1FBc0xiRl5KRXpeOzs/eQp6VEA3KmN0VzBWNTxPI1U3T2dgXitaSztA
Z1k2KkdFaWQ+QCFkKFNQbVF9ckl0UWZ7cVk0OV9UTVRQRjVBQiM4TEUKeiU/Tip0PnBNV1JQcUNI
SnBNc1dCO3o+TCZEUTgpa0pDSUFVN3tqY29PZGt+Mzx3dFkqPFJSUGxzbmhtNGl+aT1kCnppPzE8
RTlGalJORCFFZlFSbDFxOHBITEtrKnZhZlNfPDBGYmg0YW5vUHc2Km5Ga2FJNFhgMG9INyZsdX1W
VTk9Swp6VUJlb3xsPiR9WmRmcVpgTFg/fCtFYVRTV0xpM2xJVVpRO1BUYjI/NCYkfFJ7LU5KZFJx
YUtVKTB+XkUwbXV1dGwKekZ1ci1pI2ljWVdyeSV2KGBTPjkzVD98U29sVm9rWVhqMi1eTGF4OU9k
TzkyQGFgY3F6eVBRSjM0dTMyOW92X2h1CnoyOzckQlZTei0rNThuVUwxfG50Rlp2ITx6YlNvPE5A
QUNzVGpCa0FLN1Q1OFkpekpTN189QjxsQEV5TX1zbWxIWgp6ezhuc3JHfXFGYiopeypqMUhNMldT
cFQzRF94NyhtOzdnbz16SDNhVFhzOzV6cWtOekF3a01DfVI3N219S1JTU04KejF9KndkaDBNZDdY
d2htOTMhJmxIN2lTME5KQ2tLPVV7bUVgUV4qX1R6RVM3MlgjKG8oTjRPQ0pudCFpZz18PGdSCnpg
KV5iUlY2aT1yQjRVOEB2NFN5fXNSRj0zQHpDcypoeTlmPy1zNX5nUFhpUC0wOWZAeXUhIWhueTdx
fFhCezE2dQp6eiVhXmNHPyg2Q2ooKElTJCRRKWVHUSN9NytwN1lecGVWSClmX0V+QShLc3BzSTUh
eFYpSzxvdEc1ZHNGOHVvdVoKekpfe3JFU35Aa0Q7NUstQ1QwSHdXIWx0YnhjfFh+U1VxQl9ePE5g
I0YjZnlBVnRmWkZvSHhBKiQkfj10RXBHaEdCCnowPk5nJXI+S1pERnFab35mbUBXZ0lQO2kmMl5j
bSo3dkY2bTBoQ2phMnNXWUZxTXMxMGYpdyNea1Qrfm9qeVN7PAp6YnM9SGNsO2tCeV4qdjlmaSVY
VVpGWn0yZENHRXdEN2lWMG83diNpVihje2BwX2QrQD98Ri08fFRpQ2xNYm9MI0AKenR3QFM7O0RJ
byNxMCl4SFd7WWtlLVQrcjw0VzFNKmFJWF9EaTFpU0lWX3E4TCZ6KiowVGd1QllwPHxqb0dsKm5A
Cno9dDtlTmtsTEx6WSFgRTZVWX5LQkVCeGpxK3hFNzlfRyVrXnF6dzducD9jYDhIX3R8dDc+ZSFf
OSp3QzxDeFhvUAp6N3RaUVE2WjNYX1ZMPzxLKypoa3kjWHtMWEg9XzhySVc7UmpvXilrMU5iMD9R
Yn5JK1djPX4/Ny1pQHpmI0YtfE0Kek9eVnk3PjY1Pnl7R1huTWRfR357OzRzIXZqYjgqK2lmQWI4
LVFHVjJifT5APGE3Z2dzYD1LRHVJfTdSVVY9UEZFCnpGc3xJZihgS2t5X2Y2Xmt1T1dCeSQofiMx
djNLWjVLOztBJng3YUwxaDI5YEBjcll5SitsSTwjZ05neHVeTFBVbgp6S0FfKklzSGdQSHU9SDhU
fDh0NGB7YkRPP0NJVHZaYiYkTzlpcmtgVzsob29zKj45YkNQbk9gV29XRnchOWJER30KekRDTCY4
VTI3c2NUbVdoU3Uzbj9PVz1CK0FSI19vO2oyXypKentjfnhvJVQmbmktTzRSJGJZK0syKWxYMFp5
dXY8CnpQaTJ2IXFMQk54O2JVMilGbHpXNWJvRDBuUk8hSjdaNV57O0hZK18qRlJ1ZUZ3fXVDNXo4
R3lUeHtUeX5lSjlyUQp6S04/cj5OQiZ3N3BNTXxXO0JMTmpPN2taQzRiZVd7Kmtma3opc0tNZnc+
b2YtVzFybUNLfF5LVm9oIV9gKzk2Tz8KemwxISRwVS10N1IjcmMrYlp8TEtQZXtjOHNeOU5WKHBV
SilUVSVUSSpwVzMoVyE0X1RwX2kxIWZKciF7TUE7T0orCnpwWT1mM2lRQGwkQFF7VXFaMFpEKThx
YEFgZFFtfWBqRHU8cmgpWm5zI2o+VjV7cit1JjdDYjNJQmFSVWkpako7PQp6bFZXMX17dV9BTmo9
X3pfQElsb0RyMjlWQ0htSkh3RWU+UzIpSTw7KzcqSnRMP1lNYn1vJHt9XjJERyhnKlZzOVQKejl8
dHJ1Tlopa1FJYGxCWSpKZkZaUGBNdXRQdz5QQ09vcD11UGdZM0thMjQqLT5WVXQpaHxsRik5KmtJ
fG5WMzhGCnpKcDIqNnc7SSo5Y2VweT5vIU1zViQjKSkxaXBnY2xKX1ZqdyhHT0JLUmNqeitFKEQl
e0B1P1E1SEQ0IXBRSDdLMAp6cFheWCYwKks0PWJeT3E/MSF5eERpdGgmYFpZdUBzMUA9QnJQUFpW
MlNXQnx6dF5oYWphJTtBM2JFYHBZXn4rXiUKendRQzZgeyYkZUp0fjhLNiEqaUwwVkY/a3YqN2l4
X0peSHVPcjdtQk5CeldTa3s3dFBFX1V8WWEkTmhCSVZCKVE1CnomQEhZSmFSMSVMJUhAJEhzTyM2
YmlQYzRQUFkten45YjFSfUN2O0dOK3F9OE9GfFdnTUt+TGR6TWVkYXkrKUpVQwp6MEdmMTIwJGtL
dTghcGVRcWVWVEtLVXJud24lO25WZ1NyaFVee3xTT1AhenYjVUlkLWM8OXpKMkgpbyh9ZHhwdkgK
eiUmOTR7MzhjdEA2aV8wMSgxJE49Sk0+eUpuekUrT1J3Umdaa1NKTjgyO14tWmJIY2hRaVh6ZHcy
KCpFdzBsbiQkCnp0fkE4bipYWWAzNFIwazcqTUh9RSRKajNCKUFhfTNVfT9tQWY/b2ZecGdERndJ
cF58RkBATHQ4eV80MF5xKjRTJQp6QUh9V3hLbjU+ZiVBX2BSdURCU01TfEEldGgwO3N2KioqcGpq
YVVPR1grYmJEWkFlTEpudkZGbikqck9obHBaalYKeno2dFZnc0BsfXIyLT1JTmshZXlGSHQmWkxo
Qkw/KFF6VWtFPkB9WX1LJDFwfk5KciN7WTJaOSFzWVJUKm9leztzCnpkJnFgOVBhbkNSRktzZ1ND
VXhJVlFgfHMySE8jZENaSElzI3d2KyM7dWJkcjtGIzdKZWxPTUlGaFVEUlRSYmFyQQp6PEJmKFRu
RjN1TnJRPEw5KGV0e3VaQ0dLNXF3YT5sUCpkakVkeFY3aF9XVnNwPn1HciNDVFBDTE5ITUFFczxG
Q3UKejwyPlokeSohMzxwZVQoWCNRVEA/ZXZxeiVNPnRzNHB8XlhTaU5LbCY4X24walEoJD00Zy19
REVMO3twfjdLWmwjCnpNTn4rUGNLMzcoNig+b0pAMHZMcCZYalgqQjdTKDg2Pj84PkE9P3FpeDdL
MUN2R3dibWtJe2ZjKVNrcT43Uip6LQp6YSFaSWw8PmpaM2tXKTAoKSU1YDlKIUx9MnJBZ1E+JGtQ
T09iUE0qJFYkcXFROXd5PH4kTXR6KlprOD5APyhKTmwKemk2NFhHX0dBcXY0MUAtZio9QEF5N354
JWRvOyNMLXFCYHMqa0ZaK2NXZ1R5TntDYGRaUUYqfVMrdzEoajY7TE4oCnpKXjIzPmI9RlopZWM+
N3dMP2l8WSQmbkMyIWw2TldOTkZVTWtRXkY4MSEpOUVhX0NOSjVKVllaMnF+cXpxKkdjYwp6a3Ek
eFg/KHVpO3h+fW1ybVROZDFXfW0mXj98QzAzNTdjTSVRdHFie0N3VE8kdmJeX0VtZSFtUSFxKlU8
NjNBSVgKeiMldmskMC1FMUxZJWYqY1kkfGRjVD1EUmRgPnRaKHhTMlBkNGpZPkt8SyQoY0V4ekVh
WCVvUitKK3lZKzMlcHlPCnpIfS1pV2w/a28/enV3Sm1XWlRtQmgmVWUxMzIzJCpLYCZ3WD5lPzJF
dl9MXjUxOUtASVFSWkN6OFQ9P0U0fWs9fgp6SkdEdXFVYlY8ckBIdj5RbUIhd2s8UT5lLXBhcSR3
JCgqTFBFMkNJNVJUWTVaKDNpTXFRKnRzdDs4b0x7IVV8eFoKek58ZT05RTB6VGBJXi1Pemt4YTdR
I3M4IWNgQD0oaGQwSmN9JD8pRElWPWhjZHp1K0B8Ym9zdlE9TWplKmtqZDJ+CnopeSlCU040USkk
bkJqK2F3amMlODNTTmlEaG5GSHh2JXF+K0tTKmpBLUZpX29YUUxFSml9KjhUTmc4I1gkSGBPQwp6
bnBoOVUjMF5qSmEmRil5eGRCSjZCPFo2ZUp4MUY3KVJSYCp2JU4qfXt7bGc2I25iZz8rVT8lRnlt
TGJXZUl3RV4KendKVns9PVA2d2ppMXdVc3k8ZyM5XiVBMyNvKVo2UykjVE00SjxEPjBhdlUjIU0r
QDR4OVNOMTxoI0p+bz0/VSomCnpoQiFUakNSWGQwbmY5N0Yoa0glfEVIIX47KEY3ZnM9PW19bVdC
V0lhVyMzZlZkVjdieUJyIUQodEwwal57eEo7Ywp6PTVDZCEwZHQ0VjFKckAhclRybE5HUykxaTdp
cz5gRm0zMHYjYkI8Vl9QK2Eyal9mbGYmK1NaRHV7dXdLOSRkVl4KenNQXlY+RDdXMnN7IWA+NjJN
UkY9QF8oMyotS35hYns5Y2Y9RCZuPElBO3t0QEN2Tit4SiZhdXRZfjZYZVdaVSpyCno0SGpmMTZ+
dCZBK0JVbGJFSkg3XzZffD9fKCNSfD41SWlVKj5RbG01djYkTXJTSDRGcm19emZYcFFuY1VzT09i
dgp6Rm5eYUw9Nj5IbUUxNXM0RSpLU302d3xAfCg0WUprK0g1NnwwKHBOY2Q4WGojP1ZnJTAwNigq
amkteGJxa3lndE4Kejs8IzkyVk4pUm4/ZiFaXjt4NyM/NiFnQFdgXitMKEA1SD4+Xk4kNlAlZmY2
d0A0I0h8IV5HakBfVnNKYTskQipjCno+VkktMzJ+JCNERHlLY25va0R0WGs8Jk17cnJFcXh2Q1FM
Mm01UG4yYy1gQ35JVzEpSTRlNGJjbCszRishTnMzfAp6ZEhVIStoPWBzX1hBSl9IT3lePnwzRDZv
Tmp6Xlg/JnY2ITYrJn5WeC1uRU0qP2hAJHE/KCt+ZUBnJF9lJTxMbjUKenheRUpsXmdoMFJRcVYw
MFk2X2N+ZDFgS2FeYnMzRG1sdFIwSyl9LUgycT9uQE0/RzwzdW81ZnJCM3s1Sy1PM1dtCnpePVI7
bChHXjRxe2QhUD5lISlTPHpzRm01NjFNZHVYc2BpYklDVSR9TXB+UG8qUHtROz1QYkpiYVQtc00o
SEJMWQp6NWpKSkRZSSt3JUlxNWUmSVFKJU1JeDZsWFJtSl5nKSl+aHBCSyVvcVhUbXBWTmNTcl5A
Mmg3XmA5MyphP2hATjIKej88UCgtKU5id349KnQ/YVowQntBNFdvMmtaJFhHcjNDfXEoZVpSTU5m
emVYdHhJXnooZGklZmBsZjwhJTFxY3M3CnpQMV4yeUYxQlpxX2d+TE0maU0zYUlXbHBCRE8wV01P
RWpyOGwtRDMmKXRJZyNER3ZXPFByYFQpejNwTnRpdCpyQQp6QTAwREA7SjtKQlJTcWptRVYrZXZn
WERMLXE4PzZZdHdlNDQwTXY0cyE8K2xKYDcyTkBjfWBwb0BSYmRUNn4qS3sKejIlQmR3a0ZNbH1v
QERrXlZwK3daWERtTkdOI0c1TD1FSyQ9cFktYTlmUElRbnV2MTBpTGRwMyFSMHNTWU5uSlJqCnot
VWNPUkx6SypGbXhBJHwyeGtkQXpFIXNGYmZee2dKX2xBM1R9dSpMNSRsVTB7S1B4bnJVdnpeNXtW
d15GUkYqdAp6UEN8byZfSXxYKnhPRXktNSpLV0dtK2JMKnQqeiU7MnpCZ0MqTkd9ZmVeYSZ1cFhg
YkNzY3tsR2deLWpGaVpTRj4KeihhSiZ+NkFTVHJQYUFUKihfYEpmPC1kckZIfFJkcGdwYT1NRVVM
bnlkLU40JDYwO0dWZU5MKVpnLXM1SkUzQis+CnpjNlNSNGhzNXl8bmhzcyN7KU8zUTRCclJUPmpY
SWd2YyZ1SVp9YX45MmdBPHxMUEcra28pKGR0empGalo4K1chfAp6eT1mKGBKQkNrYWVATEVtQlUp
aGw4OWU2WHU2WkVKOU9YcUJoWGhNd3cyclJLenNJcX43MWdsXz1AIT57cDxTZlUKeiV7a3Q0RGRM
bnQtZmwxXkV6P1Z6Pk4we3pvKlI5IzhvSnd0PmojaCVNVFJ9bEF8T0pHbS1sSFhyLW5tKjt4WH5f
Cnoma3h+V09YTHY3XiQjNUpDfkBVKj9fVXhfeT5aZVkjM0NtRm1ASWVzRCRLMnJ6eWhiX0dtcyla
QG5TKGomUUMoPwp6eXhARS0tOXVuY1JwS30jKGU7RXglNil5S087KWpnPkdZT00zfmUmQ0J8bjQz
cWp6QFpJVWQoKDskTkRrI2V3biYKelV7OWE7TWRBaXcrSih6R3k3MkVmPUNwMDRlbU9KPWJAY04q
bkc8KWBIKUZPQk82MWtsYF5qTVkpYDlsPEYpQlRDCnpmcX1mISF8TiFSbFVmTCRaKkNkJSE7b0Eo
cGh4OytfUCswTk1iOz1zandoSXRGKV8lX2ZLZENRUGoqbW9MPWFePQp6XnE5JGxvekYrTistNT1T
Jm9ednw8bWRrTD5ITSFocEJsPTNGZjhsMnNscldrcXYrWXRfeUk/SEt2ajlzO3s7ZWUKeiZ3a2sz
c1BiclB1cW9yJUJwYWxXQ1Q+Qz15JEUlNC04bCRlU2h2YCg2S0prNWtpeWVMTW18TFFxO2pMajVT
JFV4Cno4KzJkSF5eKkF3Xy1EZW5xUVUwWTxnO0FUM1QtZUBiYWgtO0dvSFJIITxgK00tVCU9ciY4
WDdpWmg9PXNLdXZ7OQp6YGFJMUswNVFJUjg2a2NoYUM5MGBRKWY4fEJ0Qm9NYEJjSXxuV1NDYVJW
OUZRU2c5IzFgOGAmRVNpV01HLW5jMDAKenM1KD59Z0JwYjMhMip5eU58VWAraypuK3Rpak9zK0x7
UitYTEd6SCF5ej4mRCp9UGYtZVlFfEwlKCQkRXEhMH5QCnooayEmQWQ+QHh1JHJCeiFZOHpgUGJJ
U2RGcyk5blV4aTRISzVMa21LQHV0Z0tnX1IzcG1WRDMzJnVIY0MhP01iWAp6MGFjYk5BTGZjcXk1
YHI8UitXIyRZWDZ9eEUjKCp8TVh3SU5MRGU1XiRTX21xeyRrJHAxazU1dCZDNzd4dkxrZnQKejdO
ZXZuXz1vQnwwWWFVPnYzM093U2hWNXFrdTAlcF9FR3ROZWcrUGFjfDtvaXVxJEZJYFZUZWFaY31s
N01jKShjCnpQLTx+IT87MnZzYiVvSExJdCkpJnReKD4xMTgzJmErfXI/X0R2VVphRHZQYHEyNXdB
bjlgITlxTHw0RSo7dHNNJAp6SGlvYz9KdChgUiUlYGpMIVRBSkZfaDheIytuZXdRMjE7I213RGAp
UEZoJkB7endUdkdkOzF2b3JOJmUrRzJ4SGEKenplLWgkYjdWcTRXQj01QXZMYCNWUCQxdWdEbllp
YTl+YjElZ2ZqQjFSJXFMeGh0OzdLb2Y1bUNJYER2JEopaWVZCnpHU21Mc0gwbDJKKjIoeCV3ZClR
TSF4MlkpWCZwJDQlQDYjfmFJUH5TYmBQYDJXbT93SyhgVWZzdERsViRCc35vQwp6aGJhd1BmKEpD
VzxDa3otYFgtZD1YMCNGUTRkbmBRODdZUDdyT2NNZmkyQU8tXlI8WShCa0NeSiQoLUNWLStVUFUK
ellNKU5aPDQ4RjFqcm90bXJ+QFlaVDAoQyFpVHszVEdQUSlGMCV0YWkpN1Q7YipjUkQ2WUZefnZ4
cl84TyRpMiNKCnopamFrck89JTsyNmUoJkkpTTdnQmRXcmBNcFpOR0NLI0xHamc3fjNKYV5oKCZO
VV9sKE9jRH4hPk0keWtlfEpqYAp6eEVlfSomeUU+RnYqaDgmPWp+cntEZnpzd0BoS0s1eWBxSn4o
MXI8N0lOXmNxSzc1cFgkPVNeWWQ1akdSdSpMfTgKekdlP30tV2FeeXNseU4tZnxHMGFHJS0kYFFm
OTJXbHhpcVBKR041YlIqbX5tXjl5Izk/TnVQYXgqWE12aDFyZiFICnpwJnpvRWdxX3Z+Kl55cXB3
NUBnNGYmPE5ZRUlsKWp1Tj9BYzxqcCpHO3VpWHZIekpvMndZUj5Md1JZbyVhMlRBMAp6TWZTUFVR
bilsKD41N193dyslYG5LSzJ5Nm0oJVpeMitOTH5yWCRCLT5fWG9iczF8PWlhLWFWdFhmZ3w0Tk5M
c2wKekZqPWgxISNgM3FvWnJ2Yl9kQ3VyaEs4TnVFazlNcjlzYkRaQzBoZ0JuemF9cl4rZEZ2NnJ8
a0pnPXspbFdtMiVzCnppOXtfOUwjYF53WC0ybExUcnBBQm5maEFrP2pvZz0kP0R0Nll2dS1qaX1J
dE5TSSp2cFkwU2U5Rns1YXpnWFFZRgp6Nz0lNmVvKlozQGUtVz0rQVojNWV2e35tNkVUfVhWNnVv
X2prM3A4dEl3RDN+KiFPbkN5P3VWSnxDa3dKOTElUXwKejhHLWt8ZjN3WDgrZTstRW5adWJeTXwr
KUE2IzFUaGg9XmtRLUBgYiZFOytlRm9aNCQmbj1NUG1TKFRHNUBJKzVaCnpQJmNFKTEzQUBYZzFz
M2wjVShAVmY/d04hUjNBfihfSVRmOWpzOE1Id3dXVUc4fCUzK3h0fGgyNkwtKTt6PWU4RAp6PkMq
bXlQfkMxcVctWFFvMHh6Z3EmWFArcjJWKXtQcSsqMFZTPTlVa3tXLSFIZGcoT2FWWmFoclhOSTtf
ZjV5OWsKejsrYFdsZD9iOSl3JlQzYSVhJT1XXnVnXytKNHJ5M3wxSWctLVM0elpCNj1yTDdqMlBA
QX5UVmRLT1Y1STN5MTl7CnopR2NoVkEjZUxGbXZ0aU0/b0pHanswOXtVLUY5K205ezJUWEo1WWd5
dCo5N2ktUmtRVng+KnA7QisrRy0rX3ZtOwp6eyV9X0lxZyp4cD1fNjVlPzVuU3lpWUlQVmUpfW1h
b2dpMStGTjE9QFBLZCVBcE0kOTlCTnBgNzIqPlVyP3BFR2cKemd3U31nS0pSZ3NjK1YqUWVkQUJl
I19VVjI3OWhOMmpnX0pIY2hfenZCVmhWbiNYVmt1dytqRTRBbUxEfkwtMXppCnoyI04ofHRtcU9O
RXRDXzhFelpFLXVTa0MjcyRGYztYczdBUV5hKnxsSjlxfjxUJVlXOGoxR3MraGtJSXxhSlBaMQp6
XjBaNihhYEB4NWF6NTZmUGsxTCVIT35oc1hRUXhSZTM+fHVgN2okYEw4KU1sU2pPRHBVfVp8ZU5o
WEwqb0JWR24KejsoZDQ7YzxtYU1JPGA1TlZecCRfKXhwX0pWR3lmO2difmo2YH1AJnI4NXpkajVB
cWxVYl51PkZXZjc2fnZHQ21rCnp7c19RI3pyIUxKZCMyfFdWMmNrfUxVbHsqUiNwKH1zPSlTPXVw
YGh0YkI0ZD9wQz9UUEhfTXREPXxDLU4rQWNxOwp6QTRDe05IVHl5V1clWDJmbkd9OWxGdnZRXiNP
NVZIIVFKQilLQGNSVU1ESEFBMnptP3krJT5hRW9xRVc0PDZyQEMKekUxcFd1NFQye25afnF3PXop
KDNJZ21gbzYweklyWVV8dWJsdU17SlVPPUlkVnw4NVJ8WHdRbGRSVzxSPEFxe0tFCnojTDZrRE0w
MXREeE5Ye0NOdD9eRmcpNjw7Sl8mejBRQHs9bj1vITdSMjNve3hmPFhEVXJlT2N+PzQoSGt2fmBL
KQp6NDVTdlJOYnNYKjxhc1J1ekZvPjMxYDM1aFhPUVd2MF5nPylGI05yY1AmViVlTnNtMV5yLX5l
YTwzdzUoezd2ISQKemBIfiUla0Y5K0M2bjVtZVBmMjk0bmJ1NGo5OGZ0YEhPQy1TeHBOND9tWmA4
ITdkanNfKm0lM1JPZChLZFNrQzRqCnokNW4+QmFKWnAhN3o+Q25ydnFnM2I8JEotU3oocUxISElQ
LXBAN1BYQCZmUnwwMDBIN0teSC0yXm4pZ29BZ0Z8Rwp6IUxLZk1rcERFVFVARU1jZSF7VFQzTkM7
P1kmS3RzNnN1QkVUKGY9eVAxQiNRNUR8eFMlbVNaPz93JERFbmgpUFcKejxLKmRTR1BnWTRqPzEo
RktiKnBqQEU+ZTRRYzt0dUB2SWtjP2x5WGhRJjA1X0pIaURiXkxWaTV2WEhKazd0ZmJwCnpfWV9J
S2dWfDVgPTRCN1NYaTU+V1k/dHJkVVVmdz9ZfkJuej8/d1Z0cjw2YiVUPWZpS3grSTgzJD45UXJ3
cFRrPgp6bXhJVGZsWV9teEUrIUV9LUN1dF9peHA/UDFmOGBSO0dVUiZTdV5MM1pSM0NUXnFWezJn
ZkVKKEF+UH0kWl9wVCUKenQmb2FZTER8STJUWilmN3Z4Jm8tN2c+ajE8N0xjcU9YQiYwOUJneTkk
T210MW5YWVpuYVFoWVZFRkJiI1oyTGljCnpsTDNYbVo1SSVCKDYpWFI0WEdkeWlqQHV7bno1TSo2
YzFra3M0SFZtMGJFWTk/ZVBlT0kwUSRKUXN6OHhyJFo9PAp6WmwkVTdjVGxkSFRfT01LQTQqMUg9
YFFkfkdtIXk4ZUh8NDJYYVlUdU5CcTt8ZzZpRVRgTmErOWg9cT9gWFU0YHYKem9wPTJ3U1l1MXp3
XkpuI2h2YkshKGdwO0hMS0pLe2UqeW07YGQoVHJzcXhrMjEjQjdYaVFLWkcpbno4bzZ1O3BRCnpI
b25xMmpUfVFEPWNZK2dkJCQ/YUd8JCpTcHNHMkdaYmJoNVdkbSteT2EteCpRZUhEJW1pTn58eTZI
Vj8hcX5TOwp6SVQmMCZLKW1MeVY+N0NzZ1p1czlwMXozMFJKNVhJK3ZvKypkQUA2WHQ3YWR2QHQp
cyp0NCs3b3RLLU1oZmN9QW4Kem9yWUBaQnxWKk5TY0c5dz1yQC1WMEE2dVBqe0teR28wJWtveGJi
eUpqI3o8PD8tOSl9XlZGdz5aQWN9dXo2X3J+Cno7QWVVQTtWP2w0I2RmVyY2S3QrRE5ob1o9c2la
ISF6O0olOG8tI1R0VU1Bc28+Sip4ayhpTUF6ZiFYM1VaUCN5KAp6aUJuRmJkR1I8OWkxV1QyQCNQ
O0dJcUpIRTgkNjxNIXhWTVdlK013dGh2WWZJZW0/bzw2YWQjTksye3ZUSFRVV1QKenl1fW1lR2Y9
RzVTS0FKY0spJUtgOThHUWhNREhAfiNia3AxKClySFJwdUZ8REg+alZCKDd0RlU8RStNdUJIaWs7
CnpadVlWPl4pcFQrYlo5RT95ZmFHMWUwczlDZ3o3aF91M2lpdlI7PEFgenoocUVXU3xreTxCbG5S
IXJndVd4e2M0Tgp6Vmx2YSlAQTkmJGotdmRKbnJNLTk+WXFWMWs9aVl4Mjc2Z2x2NGphb25jS0hI
WDBMWmpRVk1yQ3kmUSE5NXlHWmUKekpTNDl0cTBhNSVoQ1VjeSlQMj81VGxmIUNfMm11OE5ZeChp
d3hJNVAwbTtHYjFYPEVFcGg/diF4WmJnSmgyUns9CnpFPn49Zmxze1c7R1I/QWFMQXJlWTBEMFV4
QUlycEpkQztVOCRTdWMhYH1xOHdnPmBBKVhMSSVJKSZ5eUtyZTQtYQp6dGdvZyhLfTJFeWIoam5T
U1pKeXIrPTFkNzFWK1YoQndgR2pVQDR4eXdZQSUhQ1hKWHgkWSMyQj1sNTRsQ2EofSUKeipnP21P
KWVNKF5WRSFIMj9HYD4jS2FNO3U2d25wKV5QX2w+bzghZVAkPW9tPnJNZW9oP3hYQDVNKDBpUVFE
UG1xCnpaMTNiYWB2alIkM2E4Wn1oMlBDYyg1KG8rUHAlXmh5Vz4wc241fjhaZiVtYmwocU8zIUtt
M2BXYj57X2U4SSo+eQp6QzxeRk4lRGp9XmFHTTR2PSlxbyVYYUJhKDYpcXtocHJENl85MnNzakRC
QWFXdVp8dFFVdDxFYHdZQTkkbj97M0EKekU2RmR6YUtsQGQ+a1ZBTEtOZztUWjs/aGswc3ZLc2U1
Yn5uYCtiRk1AMHlWNF41YSsyPFNkRik7NGBoWGdIVEQ+CnpgUDk/YmslQXcjUHRvQjNSNiNiZHNH
QmdvN0NtPT9OXm03O3N0QzZNVUdEfEczQVpuSCFga1JZMEYqIUJsYyNIdQp6b0E1TlU3aFBgdl5N
RiM0bmA3NmxHK2pVfFFDXnxHc0xOWSlIPm0kNEZ5cUx6TE9WUTMlK3tDWiFlPSZLc3Y4NXkKeihp
M0ZPXlprP3lzWXpBe09NKG5CblVuWFZzT0dTTXJPQ2FDaDVERnlpUEVZT1JsVmZ2Ukh+KCt4RlBY
TF5aRSpuCnoyS2spdSZSTk9hdWtSLXYwNXR6Iy1aS2EhKU58bm97bHgwUz9Ie3N2MlA3aTFkXypA
cE5EMn5ILXJFLTJfd2woPwp6TFklRiMyRSpmYDs5ej4xY2k2bU5gZWklM15efGU/OVFtbE5ONWxN
YnJKTTlWUzZ9MXxkYUlPO21vP21OdUptUU8KenNZRmpFNyh7NSgxfHs5TXJEfVBQYTxERz8tckVW
SVRDI0dYbUg9a28/PFZmazlhNW17VFlyM0tRenRqb0J1aTl8Cnp4dTh4cTVkVWRWUXMoJGJ6PVVn
cUhxaS1LY3FqaEshQEVveERFYW18NH03RWgyMyl9UUtvd2gkRG5ZKUQlWWEtTgp6KHk1fFB0fU8/
ME57QVV3N2QtZlUofnZYI3Zsa0k8YHM/bkFXTUlyMTlHQD98YXlBOHQ3RGJaMUJ4eSN6TV5MUV8K
emxMKEZKI0lqelpRZ3g0TyY0WHh4U3p+Z1psQ0UlTjBWXzBJZkA0flVvd2BWTnF2eDN4M0E7PDZ5
XjB+N1VYe1Q2CnpiWj09UC1iQyVsSWlWKXQpOD4yI042emt3RDg9Ukshc0k4eW1NKm1NNUJFI0k/
KVNFWHFiSzhEPj1xNVNvczRiUAp6eytWJiRqVWJOJiZtcSR7c35gT3hZS0lBS01CPzlyPlA7PU8q
fFdVIWVxZiUleCM/U3FCYlhtQXFlak18ZkQ9Z1IKej9XJEZNbEtNQkN7MVIqVkx2YkMxYzJlPDsj
R2d1azBUIzw9a1Q7IWdXflJkSWtSWl5qc1NzanVAZjtiWFE1YHlaCnp4IXw/TmFIU1Y0LTNYZm1E
bHI0KzE/ZCpQOTlaU34rVz0mN0QtdmtUaXRlMygkbHlXZzhUPFA1bW50VzktRXxBcgp6IVg+Tmk4
NElPaVIoMSE4dHl+bzJKNkUtYDtHZTthbTBVO1JSc2tkNVVWfT5DKWpleUhRO3trMiExaEhnelM0
fCEKem9EWDckO1UtQVk+MFRqamdTSnU7SWgtSHgpLWVKX3smP2RDRCF6VExBSEV2I25VaTQwJW0h
LXR3SFdlYkE0KFdLCnptcFFeOSZgaDJwKnZPZVF5fn5vK2ome25OSnkjMmIhN0srZU5CM1hSWTIj
fUBJYlhqSGFXUVhaVmNLfTJ3Iz9Dcgp6SHdhNDF4eWolN3JwVD1rNyMhSj0+QCEoQjhZYiF5YCk+
PWhOU3JzJStWVnR1UkNvdW1FbV44YHZHJXIoNXw3YnwKemNVVjshbHEkTEQ8Y1FUa3U4WUI0SilX
RUxNQHMlZD57bzIyJHxBb0hSZjBaQnQ2KDhSbW0jYFdmcVUoeSp6Jmk5CnprNlomcF52K2ZmU2km
RVc2bX5CZCFWTDtOentDMC1hMG1AR3I9bEItO3F6PDk0flAlJGBgZlQ8ZmprTCRxckg8Qgp6VzZf
flEjKmc8cDx0V3JsSndENS08MV9sVTxNcSZ9b2pzVX0kRT5xYiN8WHZ3RVZJLVRoMEhfOGhlVXBo
dmZqMkkKemt5XiU2X0Bmc35zSmtPalFVVnloKmdLdzluYz5ia1VfWnxiU0J+c2x1SzZVczs4OzEz
PVZ7ST16Z3RoUUtCRzc2CnpjQWhGPCgpOWkoT3ExaUhzemYkbHlATGhXSGc7K016OFNgWXBMTm5D
aVUtXkhfOFdzJTMpdm4yRUFiN30mfSpgSwp6SGZ3NWEtcEQlaTgmNmZZeGlyViVVQkh8aE14PTZR
REY0JXtlZ3V8b05DalFtRT18PXg+WWJYJFJMKW9tNjJFSk4KejhxSXZgQjRLR30ldjlLJF8hN0Rm
PkgqSjJrNSpkQyNCPHIzeiM7ey1vNXl7VTY/O2hKMEQqKGVhQmJYQCh9bHZQCnpQcSg4TDRuMzZq
WVk+cSlpYldNblBQYWgtZjJnXmskXjVwSFBFcGU4KTRsdFQmUDtnRGR8eClqXlZ3M15OI1BkMgp6
JXFodD9ZNC1UKjBJVXNEamVLJFIkQHlmITQ1PmBqQGM0Sms5ZFYoc1QmRntVI3JFRFJEN25yTGI5
bV87OT50dyEKemVvMzR9NW02R20tQDhIMlhZdkh8aW4xdUByWWNrWndZPiVYV1Y0LU48XyNjPEVs
a1d0QTVifD5YcUVGeWgyOzlDCnpKb01RQ09PU0xIc29faylBVkh5WEo1PSYkdXEqLTh7T2olK2sz
YkpBWUxoUmRRdHMxP0dXJG5zPG1fcX5DPWYqXgp6IT0paEdgY158TXQqaVVBX3FjeHpDQTFlKFp8
NnNnWCtnU3JxNFZLVU5aSSgyNCRAU2glcExfVDM0NHxubGo0PDcKemg3IUtfU2k2dmV6KUFVPThX
KGFZXnQhQk5XeE4xYEZ2TUFZJnd+RV8hM3hnPigxRUYtY0pgUzYpWD0mOWsmcDJVCnojQm9fPXpT
VUZfbC1XSzZMbEhsbld3IVUyO00xeWlzJGdyLUF9e3wpc09YWCp8QVcwTSVReiNpT0pIRncmcjQ4
fQp6Jj1za084fD5Zeld4VnxaTitqPitBVzlVVDwqKipJcXkzKGN2N2RNV0N8fk9qOz1pRDw8Mmll
bURqczdXZmA/VVcKenpuOWstZEBaPlFRUDExTXBYUXJ1N3pvRD9uUGwmZWFDa0Z5cy1LKzcyYFJW
VmArODVAZHptbHZiO0QoTng8QzhXCnojN055ZUNpbGJTakR1MDlObCE7YytedGg3NXotcn5hIUF9
UXI1cjYlVDZfaHFmVF9EdVc0V2wlRXlpS1hsSlEoNgp6bCRWfT9vJj43U2ReJD5ueUx8NVIzMzsh
UGBeRV9POWNOUGU/JEBjRm4wNk5mXkwhRCloI3h9aT45MzM4Z08/UjcKenVRajtRanlFZysweThN
SjIpJUpQTjdUaitjfnN7T3UyeUNpaCRydzlrWmw3QHsyfUpEdn52bD9XOE1RbnFIPGptCnpOeG16
c2lZPGdvVVJ1KDVJVURVc3tvPDAhalAxazthVzBrOHJaTW5jcSVVTCh1UnIkN2pfQj4lV2dWSShw
d3d5Ugp6a1ZNQnZhRzI5ZEFnMVZVd1l+Y2NpTVNVOThoJGcyZX1hQTZ4Q3smfXJFUVR9djxQMytN
Uj99eGZQaDR8M2pDKGkKemNXYWs+Ri1XXkkye2p6Y0F9V15felNzYXtUaUsmcjQ7K1EqR1A5PHlU
dHN0U1A5bEI7JS1hfjBQezxEfkU1YDd0CnolbEVMZSpiUCY5JXk4VT1BSGp1IWU9OyMpRn03bzJo
WWZ1NUJPUUZQJmJVZ3U+X0ozM0BuPWYjaXs5az9qIVZoRAp6cGNKOTI2PmV9eWo8eSFzdHpqa0VE
NC1BME12bVNIWmlgXyQqXzFLNFM4K1l8OzF+WlpXalo3ZyY4RUxFJH1HekgKeiEyWiYwRSMpRlJR
LTZ8NTlfTVRgQjBvSiNObXo7eG9kND9sJHFsanNBRyFgXiE1YDlrYD05WFI4TWlAYTFRPUVeCnpu
Rj0wfkNTMkRLeGF9UGI4dnxuYHB4b2JqM2ZjZHspVjN1ekxkXnRULV9wSkE9aXx7fStWJDE4KERj
OygmfjxaOQp6JUVPZntGJmh1NjBRVURHPUV3PzUmOVVfVStoWmtCITNDSiNtdk9aOGFRMjBzVGJm
akcmTVVAcXQ+Oz9OMko9N1kKejZHPkwoZDs/KH5xKU4xa3IqSU9rRnU2Yihfb2U7N2s0ejJqPWs+
OVVoaF58dlNDaVFAY3YoKDNva31PND89RGRCCnpIX0R+PyhuJFo9WCZIaElBZyZYTygxK2I7UnBI
NVVLY3shVFktKl9OdjFiVSRiMylFKnErKiEkVDd4KFZARlF1PAp6Wj9ITU9nPTMxcDl2SHJeUm1t
dDZ2UmA+O05qVXl1eG9NRGYoKXNyclNgS1h1KDxTYiFgRnlKUjB3NFlueSFxP0EKelRqTD5Ie1Ft
WWtedGI1cjN1aVdyaiE3ektlRU09JlF1T35DLSQ1c2h2QGFBKnd6Yks+YjNeUVFLfiVVQUpEWVhN
Cno/c2JmOFNgeipWO1F3fEp1YEh5U3RkeyFQKUk/aDBgRmQoJERmYzYjcyFeYzlpV2RpOCFgYlBu
bjBJUz9ZSzFfMwp6KWRfKzh7QD1naSYoaDg9RTs1QiZSb2MjVUFoJCRSdlN6bjtifGhIdzxBTm9H
K2RCLUA0SyozIT4zZng9cUxmZjYKel8hSnJLbD1ZTSRpZmUxVWomO2o2bnMyO0ZPXkNYWkpHa1dP
QTEhKTArTEpSTlo+ZCMkJkdDOGghREc5aSF0elYzCnpmLSV2bDglYEkkcEVJJEJkZip5SXE0c29n
K3FKdTh3Sn5lSSR6dkcxSTJePHNEKXNQWnJlRDIhbHtwKCVzNHdiOwp6c1l1P1k9PSMlYCNqOTxi
ZzF+KURIbCh8dUYxRlRYeGdyfEVsfkc7QyR+NXJZaGt8ektpNnc9SyVtbkV8JWdPRnwKemx1Y31R
VFh5QWZDbyk9KVhyYnp9LUF8V1BwSHVrfDRQczwjK0RjSlkpeVN6QkwkPmspXkwhNWIyZzdeWjts
R1o4CnpNQWRHT19JVngmRyVCREBEazFGQlJ2JV5QQF9YVnwlRW9SPkg8I1pNe2g3aj9kQjY3KGVV
ejkrOE1JN3p2ZSUmYAp6ZH0/PihCPyl3OXkzfUZvRjcyQDAhTi1sRXRhZW5WdX10SjhAZnJmNU1N
JUQkWXRoaml5eHJgYiFYd2xxdzlBfkYKenI4cn5pdTdPdmhJeDxEZnQ5NGBCSXkwOFl7RHU+em4z
Y1EzQytXPnN5NlErfWRrMFJsKCleNHIjQDloPndPSntACnp3aWd+WjxNfE8tZWZocjlKKCZCJDtA
TUk8ckFPNlZLfnI3YiNfO2FTWUVHfm9vSmdWUSRRLVN2Nyl1Yz1Fc3RoaQp6JmBPcUNgR1R5UWJs
cSlIb3R2QVpJKnskZ2BOMm9CS0pgNEpVcz57UU80KX5udG07Z3RsJDRiQkZaNzQlYVZ7OyQKeiRk
P0lJU1Z6UnNCO31pVSg/QHdjSF4pOXlPPnhvNXtmZmxyVUhKUz94UCM4ZSRKY2pkNmc4O1ozI0VW
czZ6KihvCnpaRTB4PSNTVEFKdzkoI2E5S0VabWBIe2JlWSpKIz1SMWkwaWQ9UU8xZUl5b2ZtRnFi
NmQ5ckYhWUFyWHpsUDlDXwp6YnMoZl9YbCtJRSo5WjNUKyp4ak57RSUpX2kqPyVBNCkzMyRmb2N1
ej5xbkgwJmwyZWktZEQlI2poK2RYRVF+ezMKelRqJWpibGsxTVdxckpwbDs8N29WJTJhPjMzaGg+
UUE5Kl83Zkd9RmpXSTVBSm5aSjZgPVgqOGc3LWd8VXJuYHNeCno/WSFiZmVvdn4jWWlEczFsYH54
PFArd0EmN3FLM0EhbDhTbCZiKnU8azYkRzN4U1ppez9eb1RuK3g1eGFSQUZkRwp6bXBSJkgwYFgy
e0N4U2ZNVCFLYDA9UUlCQ1EwMHMwJD1ofEw0a2ZVb2BzJlIobzg7MVQhYmlBTU0hJlprKW0kd0oK
el5+cjNWc3BmPDdseVhiUDZ7e0FGSjUlYUE/JHA+WSNGTl5jK3NjP2RTYWMzK2Bnam5kbVNwdy13
SXZxTSNsYFVICnptazlOKkBxNSk7Uko4aD9jJFhhaDNEayVTWk1+UChnc0U/X3VpdUwxbGtEYnRK
PEYlUEVxTG1TZStmXiM4IXgzPwp6aUdRKFNpZzllZE0rWHc3JUd8OzhmITdTanlpe253bGV9UlA/
LWBmP0Bzdj5aZTs7elZ6ZHohMWRycyYhOX1mMGEKemd0e2pEWEslMGtZIVc2WkVqXzYjSU42Uzst
aSY9Zyo+P3tRJDFaTUtkNDZ3ZTc5NF9IMUFrTiRHIy1gOG5Gc3QyCkR5TldZSwoKZGVsdGEgMjcz
MjAKemNtY2U7YnlRV3xgfVY3I2JheHtsMEA1V05mfE1Zc25+O1cwT1ZfM3JOR2pka0FTeC1LKHcm
PTw1PlBAcXI0ZGtzCnpjVyE7MkBCOTBXSF9rdWpvSDF8PVlwPWM1bnJxSF5mM0VBZypZdkA0PGlZ
aGdmIWppNjdOVmwmMF9IK09fcEFpMAp6JXE8MVloMFYrYU1CKE9FVytIR3dGKnVAUnl6M298MnB0
bHh5WVU/SlIzWEBZLV5laHlrQG97cjVhVmdMTTw+dFcKekg9Zjl3VWJzWWJYcHVLUm4hZnV2Oy0m
MGlfdyZRIWs+a05eLX1PPlM1dS1VSCpSQXFoWTFSX0UyMGZRdk15TSZECno8dlBpJktSLTVqTEc4
aHFuVH1fQkEqQVlqITVIezxZODhXX0g8U1pXS0wlO25qKEg0NEU8fkthJCN6MTxlOUU4Vgp6dVZL
ZjVBS0JtN1FIKFA0WVQ4IzBZM1A2YzJLQVImKlR8aS11dHJxPWR7I057YGk8OXR3QWElMFE2S24h
O2gmLVoKelBtbGlwZH5vUmhjNEBNVzlOK2pZZGVTbC04flBudWZCJCZwd0t4QXREVkVfVXJjQXtt
TCZ0eWFvQXZFYTx4KTV2CnpVIVEkVVhOZUsqQFlgPzRkeyV2UndqN0lwUzwkI0ZLMzx+MT0rO0FS
b2ktJTAoRFg+dWAwcDZxM1dgejclWkhAQwp6OVczYHx2Y3lWYElsU3dwYyEzbGxBaTwkQUJnUzt1
VVI4e3lmekx4JXt6cVZOWjdCTS04fjBqRGB5NXlMO0A3fXwKemdlLWJ2Q2J2eGomZihxdVNzQHt8
cSNWbH5CUWpTRyN7TVVoUUFDcS1HJE17IWheO3B6MSY2VEloc3pmSiREPk1YCno7NWJuTjZfbU5g
PXN3RE1EJWtyb1BHaXRaNHRBSjRgTSNEQ2VYLVArPUteK2dVRUpnTXY5bz0pLWRNZFVQNyNwVQp6
WXBTVX5MfjsoQGB8NG5rVihlcEVeVG48LW96fCZJdExFM3FsKnkxKTx9PDRndiN6UndtVkhEdTlY
T242MGwkQ1IKejYzK0xObEp0YWZ5R219QyllTzIwYTlhb2JgdT5yNVJHP0coYmtAeHY+PExXMlNT
fXJ8WHQkbVQ8QHoxSW1+clcpCnpBQ2YjOEVHJVNFJiteJUt1e31+bzgmVjQjMkBzcjh6ZG5QM1Bo
KkttS3hlYzQtTGQldSMlY2NLIVh4enZlUHZKbwp6ezE+OHdAdUR1d19oNFZTNWJ0emNMdU11IVgz
JnJIdE1PbHM3UCpeMWJgeCUkVlM5JkB1K0NXS0BAKUJnUzxTRT0KejcoTXo+aVN3MWo/PTwjaCNN
JDljJE98O2VlWlN1KVEkT09CNyZ3U254SGcyUjM9MThLREgkcDl2RWAoR09rM1BOCnorRiRIc3ZF
QXklcTszTHRMUTh0bTJkUH42ckhRKUlqcjg/OyV8ZDtAdStuRE17NC1AanMtRE1iTTw7VlR1N19D
ewp6empaRVFhamhJfDd3eGgzYj5WejFALSVRTnQ4Q3hoYG5Bb0grPFRPVSZPd2BCS1VVXktxNTEq
bXQzJk9XakMzZEIKempRKz0zZzZtbXM4N2dlcUxPOXtgWERmKnM0QjZwLVBIfDlsSVpCYnRLWndm
Z3pTO2lnUU56PlN2RD41fntrS1VPCnpYTTdHMi1gYElTaW1oa3FrUU5BeHk7aXhWeEkxeFU+dHg1
diZnUExgLTN5WiVhVTNyJjBKPytjT0ZCTHVGU3lnPQp6Kj47JSpiOTNpcCY+P2VtRCU7N1dmVWB4
Kzs2KytJWXNhY35qMjl+M1lzYnxVZVZUbG44YTdgRV4wdTU2QVdyQUoKejNhZ0E3LTErUyo+YUUt
dk5iY1pkRXBaZkAjVjVFQXJFWkh8NWlBeHhkTW5VUyRqZil3O353TkBZU1A3OHl0IW15CnpCViY5
fGpjdzx7U0kxR3FSQHxwNmRXdGooaGkrITJ7JFhAMVVoYlEkXnp6VlFBNUxQSVdSNkNZYHFGNytQ
SE02LQp6UiZHSWN7WFdrI0ZaVV56IUtLYWMod15LVDZYOHVoYiZuZX51TEF1S2VrM0d2dCF7VFA8
OH1QM2ZaZTxwNmRjKUAKeldtfExrSillfUB5SGhoIyhRSW5pblpWeEVtTHtsQklhNG9CQ15kbHk/
c3lRP2VZRD82eFpOYlVDSmU1fXlydkJlCnpIfEA9PDM/dXxUQjBWflE1ektRdSFMUmlEZF9DOXgq
c0w+Yik5O3UkbEZPV0BYPHpQV1FyOUg/KFk9fGpvenw7TQp6RXZnJHlPckY4VTslbHwqSWxoaT1Z
dzZaQDd0Qn1mKGBzUiNKI3kkPXBNOU0zVCs0SzdkNjV2PHskKjUmQGZtXkcKejNlZ2lpbj9ZSVdo
MUYyUmBEKkc9NUdLUUcrWGNVKUEqJkJGUl55T2xKY2hKNUNjUyV7Kmx5aSZFZi1hSnBje19wCnpp
JiM3elBUaiM3TFZFR1g+a1hyI1hxKmREemprVWVjRVAhbkFOPncrSSEjZEo7b29hSWlmSzAjQlJm
IyNaNyRNXgp6PGE/eWI1KnlDVGFeVz9QRDJadD9lU2txQUBUX2h6M31kOWs+OStTP15KeFp7QSM7
WUZHako7fkp3QzZpdmgrZHYKemtnTjU5KlRFYj1jV2ooQndYRyQ4QDkoQns/b3pyNE1sWnpYPlpD
JG4mR0VOaiFWSXlzdzlZez1GRUFGIT56ckRECnohKnJqMF5Te3NGdFkyK0NkN3RLfSRlUXN5TiRY
Q0x7RkUlM0JiUn1Kb1FHUyVqa3t9WnszRCF7Jm83QiEmSlE1dgp6UVZPcGhHdUhNN1gmPj1qKHRn
YyhPY0BFc3VzZCsjSyVFWj5PUEtBSHNibzU9Yk4jSz5iRDtuVUBibm9CK1EoQXkKemNrSChPK1Jl
YVIyfk1QKEF6K1p5dDdLfCZPRzhnKXZjeD9ud2k8c1ZeOFdDaCVnMXNkaWsqaC0zVlF8SFpESVl4
CnpWJXYhNzdhZV54X1JUNTZtfFYhT05OdjdvN0FafG1NcnpLTnE3TXQ5dDRvVEo3JnI0enVVeWFG
WTd1Njlra1p9Rwp6VWxibFY9anZqc04kZXhecDQwOC02PzA7P21haGozPXVXZ3I3X31iNHFFPmRl
WTZpYF9Va0BXfiFzcU5Pbjtrd24KeiZoN0JGVUtBVz9RZENqR2lgVWJSbCRzbFUpdjw/cCF8O3hk
cjd2O0tYbH58d2RyPVpKZlJKM1d7cEpUJl84SXxaCnooeiU5PCErflY8d1FHeUZ6SU5kOUl6VSZ5
QXVsUURUTSpfQl9zM2IxeGQ5KUY+TjkmWigjcnVQJVpmZ01TPFhxKgp6bFRIfjxES2dHVjk9Uk9X
QkpeTD49P3czJV9HWkN5VEN5aUpkfU9JbjhxQnEoRzlyQz13XlU2enZaQ2NpKjFZaHIKeiZkQVB3
O0xuRi03YG09WjgtIS1SPiVpU1ZKI0Q9KjhjJj51PVVZfl5VaXRfUktqJTk4PTZ8KmJnK0UmZzR7
P2VBCnp7TTFQKlFmN1U+cXJXTDh6PEV4JU1BSDllbHJMTTNjUnt4S09PNzNydERtfUBvcmdTaTQ4
PzQ9c1lhZ3F6TWMzWQp6ODtxNylVKjRBez1qZjJ9WGp+czRWZzNFT1BkbDdfSThqNXwpYGVjKENs
JmUwYHFuYDM8TXttaExeSyRTYD1mRWoKekVqPXoqaS1vdFBqREcjeHU1NDhPa3E/RDRqN2hAcC1m
QnFjIWJDbj9KMU9LRl9FejstOX5CbGRyVzBYenBWLTlaCnpaNmNiQjxzMmI7ckx9XmM8NHdhZjJ5
VXBNMUliO297cjZNR3JIQTQtcXIhcnhTQGVWZ3p2Yj1CYClxVGNnIWc1NAp6blh2ZD8hQj5NIW5N
UGJHaj0mUkxNMys8ZEdpeW1nWXYzc0k3fkQkZyZAciNvaT16PTtpMS11TDB6QjEtKit0RyQKejw4
ODN5K0pVdnFAaWA4TSZUVUM0NTAtRG9qKlNqb09wSHlRWmJ3NVJ4b2dvdyhsMTV2KSs/SFNlNmVa
XnllPSpqCnprI0N8IU02TUROYT0+eVh8QmNFWmRIIVluRlVMVllZWUUjMlI5YVF5dzxXPE9oMjd9
K1heZ2t9QlphO0B0TWdPNgp6bGg5ZzQzQkIzbDQ9VnwoODR5UUZpMHkyeTw3JT81PWUkaUZ6SV5g
aEJkTD1LdDVGNVk9ckQpNUk3MWohU0dHZlMKent+KF49O0oxWClMY0lYbXFJS0ZubTA8YjNkWnZ3
K1NrIUQ0Y3dfUVdhe1psN1JraGZlT3tPZ3Ixb3JMej4rM3EpCnpJeF45azNAdnl9MFRiS1RHM29M
O2tIT3Y+K3JCVUlpdjY0MWl1d31jaHpLVmtDM0o2M2Y3bT9kdj8oO0h2cD5rZgp6Kmt8JnkhZFQ1
anNWP3RhPjlxa1dlc2NGSUJRSSooNVhHZ0N6TVJMSE9vTjRMVHs+M2o3dygmdHlnXn11KjlRYzAK
elVUV2kyaVZqRz4yIytwRnJmPlhpIzc8RWNodEVAVzVQVTNNX2BubnFBIWI4T0F5bjxCQkM+e3NQ
MEFYIzlLV2k4CnpmbWpqU1QodUZrSiVNUGI5bX12VGYxZlVGWE9XaUd8Q1Y5eillTnRQQ3luU0Qx
UT1UOXtyS19LPX53RUl6eUtITgp6a1opK25ufjB0NEsoVHU/YHl6QXVqI0UzYHkoQzlwZShnM140
cFh6U1pnN3MrclQ/XkA9d01OaXpNfWJEVi1ZUlIKelJqRiZ9KHJyVWZYSGZzVUhkfV85JmBUeURO
QGhUUkBGP2VGIURecHM8eFRfQ1J1aSZeeT5vTjdeKHI3YyspTUgkCnphKDhKX0Y5YjBJS1V+ZGc0
WSl5NTVjcXFaXnJoPndwdT9gdHA3RmJKTmZebkNgdV9MeG5zVTZDVVFCRmdVZWxFMgp6THAhOUdl
KjRzXmBNcSZSQm0rckxaMDsmX2FuS3VHclpKM0RhQjM7NDtwLUhLLXByYHlEUztXeFFgPDFnd0A+
ZSoKemw+YSUyaWRBKzVCMnY4NUIwcXhXYytnRWJSZndtJEpeRVkzeWJHKFFpJHJ6OVIrKTtESHtp
alpRUD5LO2NVTn1oCnojTH10VUBQaEIyUjgyMn5GViU2TVZXbHspRn0wZmdWaTFPSU0maHxGJWhC
JGFJTjR6M3dUfj9GOXxUcXVUbDVoewp6e2lgd3FpMnF6fk5gdnhVLWd+Pzh3ajZGX0RzMHEzbDNt
YytFZ2FabVBzKEBmTjdWeD5FOHBJPXBmMUBnZDg8KSUKemI+KyNHKylHOT9xUihDandITG5tbXEp
YEE4citvS3BMK1dJRUVJJjtJclEpJmA2R0ZyQnN9OCRmYD08bCs8cipoCnpffUVOTCQyamRKVVE7
NjJXdGp+eSZ9RjJIZGc8S00kazN2JWlGJD1GY0p8d1JGSktDQz9LNnhRK298ZXdSKXklMQp6QSZZ
SjBBSEY7c3haQFY4aTA1Xzh2aGBWQEc1ZnQ/PX1mbXJGVzY2RTtpMjd1RCZaNWlEOUk9Y2otMDZp
ZFg+QDIKeitfUXJkK0ZaKm1WeD9mYnAmfEVXYHZMe2QyO3xTSG9gLW88Wi07aUdRNHZyZWhzQWh5
QmV0PmpJSnZ3PWdyej96CnokR3hDYD02QW9wa0AhWjRuPFVAdTcqP21jKm09a3NPTlQ4e3FHdWR5
YiNiWVkjbmFnTEBfYz0kQnNidEszbVIyVQp6eExlQUJzYUgzLT91SWJHdmAocE8rMCReYGMhP0xT
aWEpPi0tRmI3c0MqPiRAVUNOMVIpIUZyMVRCQDspKFRiRjYKeksjdVFUXlQoSyZ7KTxZZWVvTVUx
Vm1IVSR0NHR+VkU+MV97UG9nK05gI0c8VWd3JENpQT9ORlpoJEtpWlI+MFJyCno7aVE8eDkxdW1f
ejk9KCgoVVkqP1BfOEp9U0dmVGBqaDg+U3BLNilNXlM/TmJEJiNWfmI9eTlteWFzN3hvJFdGNAp6
QFV6R2tIa2VTTj9kWUI0d3JgJjVvangzeHNjNmBHM2skMChGcyppd0tUQGJTVzVTb2BxQjd7YXMw
aDd8TEMzYGwKekA2KTMwUHNyO05lQGElRVpJeGtyRURxc1M1eSlJUHp3ZGNLcn1yRGx7KExfOHto
aEgjdF8yJVVxKm4tb2Q5ezkhCnp3XzZnLUE7LTlxQUVsXkhPUCRWK0JsJkZkYEt0VWRwZ3dsd2hZ
bE1JaTlqPDwwZSFfSEkhalV0WlY0bmF2aFU3OAp6ZHt9JW9WbDkxPTNhYGduSytYKH50SG9XKWd7
eEtTcThEWEJEWDFyMU5NSmVyM0F4e3RUbzFXI1p5QlhYK1JgT3kKemdpKlgjKF51b2ZreV5hWDVs
dil1UC1ffjIhUmV5XiRfajRjaipCa2RnZ04kVV5ydkVtej0pJVU9Ozk2RVVWNSgkCnp4MUdKKzZq
bTxeJFJ3c29ALVN6V1hibXkpNmVpfVVwRG59Tit8Kz1ETkhIYFBlWWlaflNVYWtDUz1eVik+VDV1
Ngp6JCo8d19CVks8N3t0YCE0Vi1vXjk9NjV0Z2dQK3dhM043elgrek55eV54OC1BOD8jS2Ffa0o5
JXwwd0xwO3RrNmwKekpeSm0maUZjc3BUeTByJFlAI1NQR3kxaFhtYXtEbjgkKyF7b3slSnJWJmxG
VWB5O1o8aWNUKD85enchYWNLYDJoCnolKzt3ODdFKSZBb3V2VGA4I2lBalNFc1BLem4rWlV5ViNo
P3lTU3slWGJmbFp1YC0yajFhcktUSmFKT0VqTntZIwp6bVdGdzVHMCRqRSN9diVJdHJ4TVNLSEJN
UXhSMkxJM3laKF5TPChYa1U5TzRORC1+UFdGOW5qZlh4QlI3R2ExdDEKemo8P1ptP3xWdiR1b0Ze
czw5e0p+Xj9Fajl4dkAhN0VfWVJPdHhzP3BRVG1FYmYwTD1UeiN+WjFtT3lHUE42UG9rCnpKa01R
VWhOQ1hFSkJDfn1rZWRHYXpWWFM4Smc0X0R3OGVvO2NMT0d8UWM1Tzg5cHFtT1ZUZWIlRj4tVCND
fTlEcAp6OGFVI3JSM1V8JlhTazd0bVNlO0g9XkJVV0ImUDBUWjI5d3NJKCh1VUNqR1gpanY+ezF4
ODwkbSZeKHlpdG4xWkgKeig7WjZLSl5gWHFCSlIxcihRVkdJenhIbCtiJUxlaTdUNDAqSGw3WlBk
bUpzRiRqYzUqNXhufVV4IVdKITdKfjBsCnpNdHg3MkZtamdiMkYqUThJJGt+PkREQTM/Rj1mY0sw
KXlibFUoZkRfejRnV1VreGAtKEQ+KTZFUXtuZWY8K3VqZwp6WkNUViR4b2xwKHtIT0EzTiR9Zj13
PHdlbjltJnRaRkYpeDIyYU53ZVF2OWEhRWh4NTRpUDdJTzBCaX5EKUJocysKek1pdjltWUFudS1n
P2U+OVkyTmdrJntERkV7YWBhWGltTnkpRnFgYylaO09LTUBuVGlWbnMzaT5HWFE9TW1lcjB1Cnp2
PGZBTUBsbCVpQHJPNEwxa011SmBXXlBPUyVIfSNiVGxYITg8UXRXSlNASj1SV3N7NGtpSFBgWXNo
RlJ7KVJ5Zwp6YlpzR1clXkwrens1eUNHVGFDTX0pdlhzJm9SR31HMHtna0lAZytlKkU1cVRzTTMo
fjFgdnclfShEYGlTWEFGWHAKeiFQSyQheDk4RkV4SktyNmJjezZyKTQzQCtjT3FBKGZMPiFHSVE8
YTdPey1YYEFEPCVVOFhqZm8md3lIWDIlUypVCnpeaUhOakg0PSs4WXFGN0dEPzAhaUVBMFY8JCpN
VldTYGZAXk9aa28jPkA4fWNWa1FlaWNpMll5N3RSa3FLRUhVeAp6MHFPS0R4RV57e1QtK3hmO2Vo
XzRHRDs3fjtQUG83eyQ5VkhWKzlzdmt5Sy0hSHxJY2VtfEp9JSs0QUZ5e2FUalcKenU8Z1R7RkZM
UHg9U0dWSnRyQXIzTlBpWF83QUA0YmghJWNHU3Z2MmJ4cCVDSiojWF48QVBlJG9ybGlNX0JnSys5
CnpQPF42Z19HI2M0emhYYlY+RkgoNFY0dkZvdyVKN3YtPFloeWk3UEk1WlFRVyUpZ0UrKGl8akJj
VTdZMS1jb1QpIwp6X1dvaStob1ZAa28jfVQ2Skk4ZUw8JXNqT0lTbjxAYiN0ayk7fklDbSswb1lV
cnJ1fjtOfjEkcypsMEpOaElSJnoKekhfMXFveFU8VlI2b1pLRkdaQHp4NVpVdnxGfDw5UG0rP309
NGN9JSRTY2E7K2pyOShJJVM2SjlETGRHVlEkRCQrCnpldnRUaVEwQEo1QCRDV0lzX3JCNGErKHF8
b04zSWNwcE4xVFQjZit0I2IlNHN0djcpU3stO0tRbj87RWtpMXFCTAp6M290X0JkcmphR05kdmQp
WVpoMnw8OEsyeHNUU0xCTG0lP3wzTyUhU1kmb3xRe09WQVh6OG91S3llSDQhMFJkJHcKeiF+ZSZP
UVlRZFc1dnwhV2NTaGVHe3U7MnVaI054KCU5cjtyX0NjWFByTG5nZSsxMDxTaVApYFFlQHh0Wkpm
YFppCnpIKUVZRTQ0JThKYGt6fitMdzJSKnBJP1JKKSQ8KjxiUGBDVWZsZDIhODdQdDAoa3g9JHEp
fFk5M0VVKVlNPVF4RQp6dWAtdUBVQEZ2I3Q7RVNjeyl+VGJ4KCQhXi1rQHJHU2AoanMqQDBQbShz
ZCswWjRmUmBvJFI8TGp5Rm9ebnNwbHkKelJeQCk1YlBqNnU2SnNvazgtcSpmRmlnYjdadTY8Sit0
MUNDJW1KUnBMNUhTO3AwJmtyTXAqak5SZEkxe0A3KX1OCno5ZU8/PzIqX35UKz4oTTJ0eiV0Jkk9
SSomdUxYYX5uPEVMRnJFMjtmcV4jMklpN0EqPS1fbTw4cSNYRHReaH5iewp6UENuTXpZK1VBeURm
PWwpZmZ6QXxpN2khITZ7WUdAR0w2Z3g2SDQyRj5tZC1GR0lVRn4mT3M9NHBNbGNVVi1tQjQKenlB
UGQ1XislYnd2UEk2WkB2VTN8V1FoOSk0aVN9Kk8mcTxiYkRvZ3A3UFM1I0Q4SDJJdy1rNFA4MV8l
IV9RLUlkCnpJOVIjKitLbmRePWNZPDM/WGt4U1dfcT48VWpQJE5BKGZ1KTRiMFplbGRpczZ1V1VN
ZW5NfDA4ZH5SUW88QHohaQp6dUgmT1k9REN0O29TdkxJQFJJcW5GSmNwXkgyUlcxRWdQUHF6bXUk
TVl6cU1xcipYPklTM2lCY3cpTnNMQD5TNFAKelNIdkleUXNOWD5rezBsRFQ8eHJ3VDlMUGhRKzsz
X2p1eDQ+bkY3cSQlKik4aCR0ZDJxXnxzWER5bFY1azxWP1khCnpxeXxpJXhhPCFxckBEPT96cEl9
QU8yODtSWWxPczQ+Xjdod3tRKj58bjZVJXxjUjhERi1pR2piKzY+VHx4OElMUQp6fDVCP0E8cyg/
NnRfK3E4c0I3S3QhMlAtYVReWCVIWkd6cWQrI2VyUV9ldmNjeVUydUNPSjtYZEpSUkh4OHE/X04K
ejBCQEB5MHd1cnNhSTAxezNCVl5HQ0ZPZnBBSWRnPW81fVk0Vio5PVA8R2hfeDZxT2ttSTxNcGRB
bDdgZ2wtcHcyCnopKnN7eT1QZjw1RSlNNUljbn18RUcxMj9eIW5lQVpvN3tsVG1Gd0R1JGwwOz1p
MGhXelk/ZHtLO0t8c3dxaXxBWgp6cEQ5cmQmOzJqRU9WXkxjX1gmZkx5Mzh7c0Q8aVJ5d1JScnIq
TyEtVEw5TysqbzY9KyFEVmc4QW1TS00hbHhrZFYKejFtdSRNXyMoNDsoM0E8KHsyaGg2XllUZjs0
NnNkb2g0cD5PbEw/KWwweHc9Yj8hV3VsYXdvUnloIVN8RFF+WkRaCnpoK2F9dkg1bE5QPmZKQ0hn
TD9JUz0zcnFQIWd5cHZZMGNvYVh3azhvdXlke2RuRD0kIWw9QW5ZeCY0JChQWjl4Nwp6V0B0azBn
VTQ4TClEalZRNUFXV2J5R31DJjNDOHRBejIjMXB6cj9KeERSY1p1S0JGWWNeMStuaGF6QlVaRVM2
YlQKenViP3B8IVhweDYwKnM1fUN7fEZnSGUkUXs8MyNTVWlSNW9oKmctOW4wI3N0MG58P3FleXZ0
RyZTaElyVUJ0M2xpCnpIblI+LUE5MEgtPWgyakNtc25FeHBxND5YP2w2MihYfSpSXm47P31pMkMq
NlhTKXRHRTJhdWRMTVYzKmxPc3A4bwp6QFhUdWxvfm9RaEc/VGI+RDs5Q2wld0Q0d3prZ2dyO19U
eTlRMipOUi1QMGtKeSlrOWBubiYrZVolJnhPY2FXPWUKejVMZlhrYGotMFNUaEIwUnRCQiE2MWR5
Vkt6P3gkRkR2UlV9OUJLZk0/aE45UWEpWmA0WT0rZDc8RSo9bV49Mj9ICnp0LUJNWjkwWDxFKn5C
eGl3Vz5JOyMhdDI7MlBBPXZ5RWAhYEdfTGxfcSV+al5wKjNAZSt6T2xFbzg2cTkoOXc4Qwp6VmRT
cDA5NXk4MWFmXnA1Wk1scFF1fGdidFRtLSNhTilYWGV5RGxoUXM1KTI+Y3xHVEw0Pz1TSmVDNDND
MkVFaTUKekZMfVhqTDwqeUdGcHtmVWBJVVBCZVJ3cmVqYz9IXiNTajZQYjUtI205UlVJfDwhNnlC
YEZpKmI8Z0M5NG0lXnBICnp7ej8yUFM2RVcjWVZiZUE+PXQlUDshRUVia3MxVSlIMWU4KjdYe0ow
QVo3TnxyVnJ0WmcjP0gtKCYyflcjV0k8KQp6QD9gciFnKkpHMSYja1ZuUntNa0RzOFByWHtuKj0m
emI9MzZkQ1YqTDVRYkpLZEBlJShlR1ZAUEs5VkUjd1g2S3oKeismJTM2bl4oKEd6cjJJcXNqMiNX
U00oOVZWQn1mPVFrOXZhTEIwNEAxU0s1fjk+dX5pY2B8b3AqO3Y5PDUhbXtsCnp2OVJGcihBRXFK
M19NX2pLNy1QLUReMUMjd2p1cjZ5fTd1PmYkNnl+OGJ7dkRuNV9oSVhZRCspVmZofk9KXipxaQp6
ZWozPTl6dDt7dThMdGR8VnV3Tk1Ta3pDaHtpPjtVP3N1KV4/QyYjVHswRGtsOztCeTwhT31TRHg+
QnNgWTE5VUAKekpla3k7M2Zsenk/IT9vdSFLfnxgXll7bVFmJWkqMy1iUz8reTVrYTNuK1MrRldk
UyNZZVgzfCtkYChAX0w5K1pGCnpGJmEtX292YWwqKSRfZDc3ZT5pYDtXPzJgUjcock5QfE53K18m
aSRfcihaYVF1O0tlbnlPcFNgZEJEM3k9KHhxKAp6SzB5Y0hIcXR3dCl4eVQhdnZEMGdCYlRad3M5
c0g7PFM/UnNVUCt7fGJ+Wj8mJTlUR1EqWVd0bDR8UDZxQ2khSVkKelcqQEp3eGB4b01MQShYbGhf
P15vIXFrdyhaTmJodEw9aWlzc2E9bkVWelQzNVNmZnImZSokTnYrTTU/V2orVSMkCnp4SFFAM3dI
VU4zWkw2ck1walMoVypxcWQrKVZlTjM3PEZmcVBYY1ZaP3ZfWkNVZ083fXNTYTllQFlNZVBjOGh5
Swp6VmVGPG1fZntKQFM2MUxDWDh1dTRgcFg4d2N2K0g2Qjc2aUxmYFRwb2JRRUEhNnx5VUM4dXMp
VitfRk47SF81IW8KemR8JEtrQXFAZXlWIUhMNDIhZF5NeWt2NzVUNnZZVFoqbSszPGhZYXhKVSUw
cm41MGo4K1J0QXlCMX1+JSRjVEtOCnpZdWVkN21PU1ZwXj80TktEQDNyPWtuLUtPQj5VQkJvUnx+
K2U2WXYrSnZxeXgmaD16Kys4byk8UExlNkhxLV9ZUwp6WCtsNlRDXk4+djRofmMpPnNEM18md0kh
NDElSVJ5Tmw1QCg4V3N4eG9RI04pX3dMIWc3MFp+RCV2c1R2PW9DZFkKelZ7M3MkZndia3gzMUJi
dl9MKk0lNCNhVmgrPD4yTjk3a1dvNk4qfXM9ZGtKO3JebCZsJndYcHl0M0dzSSsqZTtoCnpnYXRH
MTV0SlAtOSZXTWg+RW0mUFRMfj5mdHhkO3Irc3Uxbk1ATTl0Y3QrK05OM0VCdWN9fE1qXmVnO2Nk
JStUKQp6MylSU1BFfipHeipDTyl4XyZmISg+a2tALUU5V2F3RH1TZ0N5ZmFEaV5HUThoTypwd3I5
TEN0Jj9tMXU8Ki03M00KenYtflFAJD49TmBAdUd5fFd2OUJ9a1doeHFVelFhbnhHJDxGdHMoUksq
ZSkmZj8ycmdqOGlpTChLZzJheVIma29oCnowcGo/bWx5fik1YSF6JmZCZUBBcD5AYnJ0KntZfEde
fkpBUDJUMDA8dF9nOGx6aVVSYEUhQ1VoPyhjWEB0IVA+MAp6N3Nla3NffDcyUntze31HN0xyRFp0
WkxydGYqOXNnS3RWQSs0RFZtLUlPfWJ5TSNrRmRePGtDNV5od08lSEtZPjIKejR3SiNvcWBWWFBv
KmczUClGRlk8a2FgWFlQdHtneU1KQlZGOFIhLWBQanR7dVg8N0FNbFBARmNWVWs/LTIkWHsjCnok
Y3c/SFhMRm84dXFqNkopVWZyXkRfKXh9PUgzUCs0SDlyOHBMUXFteThhZ25jKlE4UEdIU0R0Sl5C
e3MyUTtMTgp6WURGMj9IPV9wXyFDNVMpY1QxcGlkVCFvKT4oUFNPdCo4PCpwKT9RR3EmPG1ZWEJr
T01IOHdWU3ZnM1Z1P2JAd3QKekRpN3tJNHcxQXJfSnEtRmRLTzBDSkxGWms8ZUN9WngpbXR+bGtR
cjt3UzstNTdvZEZfNCt8VmBIMlFYYktxdGslCnomK0JhZiFCSGFMeT95JGgzM3tZVyE1M21XODZ3
P0tgR3dJUDJwVlI3WTVseWolOWFKOSMrSkpHWnN8I0lTIzc9JQp6K3RaNSgycXVaZ2IrTEd4QD5Q
bnY1c2x1e0N9WGc2WDNMak9efWk1TEhpK0d8O083N0ZBZENzaVhUfDJjZkhIY34KejY/KjAmVG4k
ZXF1ZypVV01jN2lRKXo3YG44ci1EPGokJC1weW8+e1NSU2E+SHxEQSY+aDJhYCs9SWtQSTw+bTA3
CnpaSiRLUExiNWclKlhvT29pQSZmeUJ7M1o8PXZYKSQkdU1vOSg3dDVZb2kwS2IxajYoJjI4KzVr
MFZzfUNqYzdCNAp6cVRfVEs8NTspIyVsPG5mLX5MSiohaXojPUEhX0k1Sz5fJmNJUHcoNSQyNyUo
KkopZXIkUUI2MlllfWxgUz99QFoKemFqSVgjUGJKbG0pQ3dRfUo/KHcxPmltOEpZYUxAdTBMZzIl
Pm1gQmpUeURAfipGdEZFd35mTnBSYU1BZiZiSn0/Cnplbnp2MyRnbGNgOW9vMDNVa1hqezhIREIz
UWJ5SjU5WH1zc0ZKS0EhYXJAZD1vUTBsekRZKTdFP043PlJgMX5FTgp6SCNfKTllY28tdl94bntl
WDhBbXozUT9mekRsVXo9aFVhM2JMb2pEZitLZzk1KiNxLUJReFExckIlM1RBKVZyLW8KemQhMChl
b0t4NEtIJHYtfntKWmJXOzYha08haUtLKjF7SEtpaVpOYzheJUpmY2VCKDxFRklLR2I/OCVpZUE9
ZTBBCnp8STUrMEthRkQ1NGlNRTZWIXU0OGducE1ebz08SkV7ZiFtYCFFVXY9JXE1Y0RJWlB6SjxJ
QXU/VmJJNTgpRFZMNAp6RVk8bio3dGo5R15uYHo2MG0zKD8oR3dyQSNVd3N2Vn0kZ3MjbjE+Tm8z
MVdAdHBObmsldiRiXjYrdDEpJWBmcFIKek4qTip4ZSZiUX02MGt9TCprazBVRStpemM5dT45VyUz
Tkw0QWkoYjhDSis3TlRAVGAme0BRRGBNK2wtbnM+OG09Cno3O3UpS0w7Zk4pI25WUD8+MHFFd0JJ
bk1DTn1kRFNyMVMhT3AjNH1KQlBpdWIrajM4fFU8czd0XkgkJlBQNFZFYwp6I0dYUyUpOFdHITZl
fF57OGg8SktAV3BQZWh0X0Y9PUhtWmtXfV9UXj1DX0x8Yj5eLVYoQWBxPjlxVSZJZmVEdDkKeiox
P3dSWFlNKWNxOWl5WGQ2V2pPT3Ezc3ckSnFEI2QjZTxFRH1MYWVuQT1mWl4kMVR2aDhEWlB5WUQh
LTVifWVKCnojVilGYk8mKGlPI3d3QjYybkVeWT4/c2NQVTFXc0k/cEhEaSRNKEhmZUdjMEstaVZY
KilyRmZJYTl1Tjd7Q19GRgp6MERuNHExdUFsa2h2ZDVlX2VBUDJpdG1Bflh6UlU+eD4mZDUqfCo+
PUxWVkpqNj1PQnY5JXE3elpCRmdwak83YXMKemxxWU56M3JZUnAoQGRMZGNtbV99OENLPH5GWTVV
VTQ1VDNpTn41R1Mjaik8ai0zSGFwNWdfZV9GMG1HZSs5T3QjCnpVK08tdllBc1ctVHtLV210RjNF
Tk43S0xZN1NVMk93JWsxWUQzOF4qNE9wS1EydFojJEh6XkdAXlptM1lLXjVPNQp6MkZ7YHxYUlI8
KytBZVE0PnJmJUJGaCg0eUNWanJMNTUyfDNVaGFWVFgxVmxHNCp9YWZwMVJyaGJrXyQwenoqOTYK
emNBQ3tOSUwoKmRKY2l4ZkEmSDw/P01DcWMyOWxDVCRYSEgkdl5kVzdMNkRTJl4xS1RDQnRnP2pJ
bkEzY0NzQ0Y/CnokUyF5OSg9bTAwOCokb01Admg8T0wrJjkkbkZ+YHN3VUdRVGZHbHRFJiNGcyZ3
KihieWA2PWAmKF4zM3JEVXZxPgp6UD1wOWg8YnRCSCttTFlLNW8lMXV6NEAlOG5MTzVLb2tSKkxU
ZmFJc0RqYT5ANGNIKVZ6VlBfMCZuRCF9djhiNzEKelhRLT8lLXw7eG4lUXk/OUt+YD82SDA9Y31m
MXhKQGswRGlwNXt5ZGkqfitfLSMjfm1EdkY3U0Ere01Ic3M4MUxMCnpALUZ7P0pjSl9vc1BXa3cy
SXwqa2ZLWCNzNm9OMnBFIW9mPXxKU2VIWE9rdT9FdnRVe0JnM2ZmZT4mRH5TSERqKQp6KTIlWjRR
T2J8cXg4dVZCLWJeclBrMU5ldU5Pd3lzVExpVyU4WXsjV0xyNXA7YUdOfmBidUZmNiNyJj1qaDtR
Ni0Kem58MH42dCkhRms1aUpTaXQlcGBmME5DJVBmbmlmOE4xNFNkMXpXXk5eVTd8WjlfSz9qdUg4
fnVyZjFaaDJRSTFQCnpkcURjdSo1fUtPJHZGYTtPUlckZFo9ZndeSSpwTWR1flFYMTxONVgzJj0+
cDRYRTk9SFJII0pEMUQ5K3o/IUJnSgp6PF5UZ0tzcyh4d0dGZ2swQyh1JjJOeTcoVjUxKDF7VWVF
VTBmP2lgT0tLJDBeMXVSMSRaJTRvN1crMEkzbWhrYTMKej9nLVF6Xnc0SThHWHt1MDxjdVdFMj9x
a3dDa0s+OzRtfFhHVjN1Wnpmcjd1VnU3IT04YU9MSiNqT20rKGVoMXhGCnpLe3FNKmJSRyNPMH1h
QUlzIX13XnxBKVNSS3Q7PD55WjhQUHVfPHx1YVV3Z2NNM2UmbEstcX1MKHFEfiQmPTVJSQp6JEE/
PT4/fEs9PVVFNnNxSGFfTHNCP2UqYWhmKjMtdHYoTjFyZ0l4SzFIaWA8ZGBpRmopdX5rJjgySShi
eShzUCkKeiVhT09pTFRrMW9VZXJKPlI/PTghPUNrPjlPOUpHa1lAT2l9OVBnajR3S3tDRiY3LVhP
X2pIRl4+RThVRVkqSj44CnpVfDgodnc1RE93UTd8OEVhKCsxb2wlI1FfPkFAY2FYNmNQbTVjLV5N
QTdOWitoNHpRPFlRYCkrOXYpTiRWLW11cwp6ck5MMSlURytYS2Z1eUlqRV50KzNfRnorU3NfWFMy
R0YoKFZUIzFKOTE0dGtKMDhWI30wMyQkb3lHR0NOY0pNd2kKejk1eU10IyVjM05lWSkme05IJTxP
JlModEk9b2BfbEFkS2B6XjNZfUtzTVp5Vlh3TmlxWUNhSyleMjtreyROal9sCnpTX0N9WHg2JWBs
R15+OD5pRFpnMilEKExgWlVxaHd1PyRpPkFucjAoZHszej1LMGFhTj1XNDErMXc1SV93OzYqMQp6
U2d9PikrdDI+MVZaQyZXPGdDPDd8NH1zLV98QkI9OTtTaD1tS0NYX0tIezVMSSZedUNpam1rbUhB
NSNiM0UqaXAKejA7akd0JHtYe1c9MF98UnsyTmxLVklrZHV5RTIkI2FXNC1ReXx3SXFIcjxqbF9P
fnkxY1UzKG18RVp9VjRrTHpLCnpVWVJwMjFWJkA9R2hoZH15KzMhKVQkZU5OajhqbDdXYGxBMW9y
TTBjMXJDTnRBTVUjUD9jTVRVJXJ9bkQmXzk+Xgp6cCF2dTRoR2dXJU5PN1lKN0UjVk9YRVE4MWxD
WUYoJGQqKipjMnMwWUVWSHlIcztEKmcwU083QVhNVF5yP0pySikKemJ6KEMxRG9lbChobCZ3dmJN
cCZlZTxfQCFQeDZHZUd5O1lVTXlsR1Bubm1XNV5yNypfcCpgeyQhenZeOVgmSDl1CnpkWWluKnA0
ST9HcztxZjJqUHtzTkdIPCVyaTs5Jkw7PkMyN0p1bCMyb0NQclI0OW9+KXVlWkhUT35tWVAlRSh7
Ygp6NHh0dXpmMU5Ue3NVaEBTUXZAVzxZJGJpJVZ8byVSMUt9JWo8MVJRPE5aRmttVHVFWWROa0Zi
P0Yxe3BFS2VITHcKejJub35wI21oPDliek9JPXN7SWVXK2paaXNKS0lEQTBNVG5wc1N8JjE0MilM
WnhgeHpBKHBgdk9YZTxsJFNhRFokCnowLUx3SGxiXlR3UV5QZWN7O2E0MyZ5bVV+ZzlsVFZIJm8h
TUAkfTdNaWljb1lsRlNqdE9UOGdET3pYfHY2QnI9Rgp6KjNieE4xNkZ1KGVPWiZnRXJGQWp3S0t7
TXIobSZ2cXBtSCtVLVVBNjZiUXNyYz1zS3ZgfGxfd25KOWRVPEt1YlcKekclTFB4ayRaS2E2Yj9C
UWRzKExGblBVZyUlTU8wKyRlYHtGeDdgSjREfUVnZkRVVlIlODhSS1V7UHNEYitES1glCnp1Yzxq
TEFDO317NDNxVi11LXJMK3k1KWx2XndRNGF2QnNGXj9iQWFkZFhiTGFJbVhSQz1eKUFgKzM8VzNw
O2I0RQp6Tk1PdFBoP31TajNwd2huVnxzfGtEMWxqI01pTjBkKUEpLT9EZHt7QTlVfVBEJjxxd29f
Y1B5azEmWXp2T2opTWkKelc4TVVEcjZ6fWk4SDJxKD4xdHRzb15telpBS3FxKU8maikkVXh7RW4y
YzMkdCF6VGRBUVIzYnsxZkZyYWI5cDUzCnpPJHJUXktefmUmWHkyWFBEZmt9OVNSMDNPZFV1dSlE
SHpGKCY7QkZgaH1OfDNFT0ZHUjF2REljNXVsTVMzPWVCVAp6SWtWYnp0RF5hdDJGa0k1NEBvSXZK
fXZ8XyN4RSl6ZnkhZn1oaT58ZW5PN3wtYUpebGRpVGNZdVRfY1pWOG94ITAKelNWUzQ5QVVnVi1e
SVBnVEU5d2Q7MyYkY1EtKH1yKDhwclFDQnYqJnUtTHd8NEc/PjEmNE40LUJHfkhtPGBZVEwkCnok
fGB9eDR4Y2J7cnk8OFooZmlBMlEqVHxFOzNyVjBzNmB7e0pERDRTUkN3bzBUSmUlJTViMHAxYEZC
eVNPMDg1IQp6O0UkYFQ9JEVYPGxUbDI0cyV2LUtwPEEyYXxIeFUkRSZnJDxWaWAtfmhVOXZTYE96
TEZ4MDEwQmVDajRMXnB0TG8KelZ1eSMxYUwtVXsjej5NYkAqbWp1QDxaYjszNH0qSEhoRGx6cVlZ
MW1nPSN2VT9ZRmYte2EkQ0BWRXleKmdVeSV9CnojfjB3WSEwWURQeihPdF4hMXFJTCZwYmJyVihm
ampLOWJUbEZPQF83Q0FwTVI+VzUweCs0c3khTFU7RyRKKjZUKQp6KSR0d1FBMzswdDRgO304SSRL
QHtXe2hVMHFWSVFwcFEwNEQ5PSotbykweUptYTwmdntwQ0N8YzVIQ2I/cERNbzMKelJpR0AoaGdN
TldBaVY0JGdwVntAR2htVF9ZYlZ3JTIlPEYlcFIrQkJ1Sj1JQjBeanJQZHE7NlMzKXkoK1Z5TCp+
CnpEeUwxM1Z6eEs+SklHTyZgaEZyNWh3SysyP04qPEF5Y2o2OVk4TXdQVnxuajNzeTYpVm1BZXR5
aH4xMmAwfnlKcQp6Mnw0WWsjSGN9RSp1LXRKbl9PT189dn5eWmNzR0JeZHR5WnFMUFQ2Iz8qeU1I
cWtNN0ZebVFSMXZaVVBRIzxUNC0KejZVMEJodyVqPmxMKTJFITY0dUU3N15uMmZsemZtZDQ7QCEt
Ynw+R2YhR2t4fG8+Q3JvezAoTWBBI01SKVlQMTJ2CnprKGZERGhxRkwmUHZaUGM2elAmK2tre1pi
cCZzRCU7SWJzIUdvd1BKWE57ZVRJck5HQj9DTlV0ejZ3MExncD8zTQp6LT9oMUJZUzFwbTQmIyFO
MEV0R18+Yj9eWmhIcWQ9VjR9cE5ZMyk0eCZ9YT4zaCtOayZmMiEoO2lpUyMwZ01oTEYKelRaKmtI
ZWllWkkwcVctM0FjIXcpJGw1eVMyJV89USl5Qml2WTI0QjxnNT45SkwzJX5Pc1o/VHtMX0FBIWBo
fS1oCnpsLWRPTnFLa2krQThuKkA7bWw8TygkOzN0KnVpJDZjKD99bllkIXkpdnIodGAqQSRPPUJ5
MFRvN048PSpkVyFEKgp6N2dzcHkxRHk/MmlxcyZpKUAqUWxBa055ZG1idFN7JVpASzNVYnhsbl9L
aXBqZWFnfXY+NlVnUzx1dnk4Ryl4VEQKeiF+Qj5FQm5jdHMoY3F8PFdFRG1qLWVKKWopPjN3RHBs
JG4wZkNNVUpwcnoreUB9YWwzK09uR2dCcHVealFuPzxECnpjfj9ndms8TUE2LVJ9bVUqPTktWCle
I0dzdXlGPy03amRnZmE3OUlFRHlGa2sjeGRQeVYyKXN9OENNZ0dldWF0Nwp6KXJZcHNTWGIqQmZk
KHNOPmtFe2psMnpGb0AzOyNKKWplOzBWYmA3M0IwaEdgdiRsdE5EUVNQTEA9cT5ZUjt3SVAKeilQ
aVgtbSNTfnNwenMkfGw9I1F5Yzw7K0c3JD41TDt8S3skaVB2fVRJYiFYcypKOVNzR0NoeDRDJUdz
SkRvKXdiCnpkSHskVzZSKWFoJUdRall3XntaKlM4RHo9YCVTJjlmaSlmXnRyYDZGWFFYPSZPPFRR
fT9BcEZDe3pUKylMYjtHfQp6O259YHJhdn00I2tWSTYkQlMrS2YyQDtBQkVadUFjKH1JKFZPaXNG
dENYbHN5dWpya3IkUUspeUVBNXEkMWdVYUAKej5hLUZtNVE1XmtkcmdXeTx1Q0FXPiEjSEEzMSUl
P1pvR2QocE1tKkFHPkttNyFKdCV1KG81bWc3SXxJKjQwOzxRCnppJDMrRiRjal54PC1QWjdHJEZP
KndmUWdRR1RKMEtVcUY/YmpMKkctMiM7WnNQNnNMb2N8IW1CUyVFSGY+dSZoTAp6QDNpbX54YT8p
SVR0SmRhOEVgZW1LM1BmZjVCZ2dPVTYtSFZGdj5wLTZtUzI7d2wqN0M3Z3psJV51ODB0TnAhaTIK
enl5dmBKdmwjJmNoTUJqdEF1cj9NUWhtcWNZZCZoUEhJOHBEU0ZvM09Vbz1WYjYkQkR2Xkt+Nlh6
a2pEUFA4djVsCnpOam1uUmVyV19KaHJiQ0V5NXlAIUVYaT1TRURtPiUxZ2tnZVcoMCM5NUxYaSZa
OGFNRFlCRzh5YDRoMXoyZUA9Iwp6KG9JdHJ6elJSbnhBVjk7ZCt9dGxwMCYlNUgtTCYrbm1qT15s
dmNVIyVnYGA+VVE5NzQzdXUqND4yRCN6S1dIRFQKem9LIUBQWkYpfGE7P2BlUD5BM2c4bX5ZS3c2
aiVETmtMNCtgaW1lJHV0WCpAZyQ7T3ROa0JRX35QekZ8UTVpI3NoCno3Z2hhWkcoTXxAWGghIWxN
ayhQa20yU2BRPkJeXlRLT1lYMkNYKW1vKDd3XyE8JTsrJl5HLTQ8PTd3QCFKeXNSdwp6dGxgT00h
a0RSeS1OazZLKHpWYVdYTjRmflopMSRNbE5jdyQwS0U+KHtPSEl8e1dxNCtjMVFOKz48aTlSZ30q
JWsKejs2RldYOCtzfnw2IW9WR0FkaSRaNHtmKEFkNyQ4TF5rMGJnYHJVNzk8K0trS3w1KWp0VVNN
bHBfZ1heMk5CPyNWCnpXVGIqMXtuMk45KjFyZWE9bUk/ZTUtekxOSGg9WWtBPU8pY29KZ3t9Jn43
Q25Rb2FCMFhPIzFQZ0VMT182fTNzVQp6NkdlYnVrXz5ySVpEdHpYSCVWd31qWEwhMHpwfFFHSl5h
VkhwQ21GUk91UXdRa1NIWF4yPkZOeDx3QlA7T342XksKekN6ayVYIUV5diNPUktQN0t3fTtQbl9W
dC0mbTVod1VENyRvXlBiY3lPSCNATjtCaE5TOGREPkIkNStJI2xPRS1MCnpTI05YQEdoa3s/KFA9
fFBWZkI0Qml9Mz50JkQoRU0zU35hfmtnamlBb0lIcmJTIVQpdWcxfn1TZ0s0bldyPUE/awp6YHFz
Y21kK0kwIzlmOHU0Yj9waW1JJSlKP3YhZnRqRVYlfkdLcGloUTV9MGV7PjBsMlhlOEhCSk0kXjtr
MHdsZE8KelF+PUZjUVUtcV5TQz5HaD8xKGFYcmg3VTUyRjtfcWpQPUcqMG5kflJmUEdHJkdGaylt
PEskMD9aLU1COC0jOyFtCno8Xj1xLTYqTyhUUjxxYWdEPGhhZHtJJmVWR2k4bkg4Mz9CdTFAVnsr
LWZlIyV6VGlKanlEdmNhT1UrYzFkR1BXMQp6PExfVFpfQGojPXoyLWJwWFN8b0FBQn1wV2ZaYlJ1
VlRydXxFM2R0X0teK0NqOWQ0ZT1MfEY9eSUyME9mJjZfUGQKenorc3d+MWBPaWxoJTNAYTVKb1JT
bUZZdTMzYjZ8UyU8WFJlJGF4KENnKkdhTHUxPjB+dHJrTFVvaSRxYXU3QFQpCnp6UUpwKzsqPjRq
YTtZJT11YHdsJkFiPFRpITJZeiMqMl4hMEtzPXhrNTtCSDBGYWh5XkZ+TGgpZjd2IVA8VkVrSQp6
NzxMSEI+bVRPP2s4JjY5a2ZmYUBYTF5eentaU0A2d007PE1gTkd2RFdtbnM4akNUP31FS0tERk12
fjhqMnQxKiQKeiZxTUAwY2MjMEZfP3QzUW8jdWFjZz4zcn4zcTtlM0BGMlR8Vi1BdEQzZCNwNCQt
XnEhPEZpV3IpNyppe0x3cFc8Cno8dXNxOXdfbn4rcEkkVXJxJlQzPWI9ejMkKS1NZSlaZGkrP3Y3
fG5gVzFkUGYjdU9TZGhRZ09jN2pJUWMxYmckKgp6ZSVKd3BXa0VQbVVIblp0Y3ZPYWZYbHgwXmg7
T2xANmU2M3dPKSZPUmF4RWFWeVZpeklDPEtyeXlaKEdGYkk3NCkKeiRTT3dXKHp9X2s4fCYmI05z
YitlSFokVWJudDApWE9VOz03JmJ3WmUpS3FwZkNMY35QaVArcUhse3N3YXklPyU+CnowbVBUQ0Nj
eHJyel5LPHp4RU5GQS1FME9CYDxjI2IpQDV6MHdETWtRYDNKfSNsUjtwbTxJXnV0JTkoemNeTCR6
Wgp6dkpST1JGPTlPXntZMn1GZXppaS05ZEFAI1E0bmxQbi1ea3VTIzZkZUU7P3pTd2lvZ1g5QXBy
Y2hFQGo9RE04bTIKeldqRW0yWEI0THhBcEptdWY+ZkpkZF9CZXQ+TFp2KEg2WUFgcTxNSzBQWWBF
aWxsRkwpU3MzKm9RMjYmQzl3ajlfCnpuYlctbThGODxpR0gtcGxGKGgkXjI9OENZUFhtbjxvcGs/
anteK2BTRiNiS2gmTTxzOHtTUlV0NmxuNjduMmRmXgp6XlBOWXZmUFhSb3AzbkojYD5TO1pjei1H
QDtPRkxBXiNJU2YqIyhPQzgmYlBEdyZgRHhxPHZFdkt1MFk0Mk8zQDUKejUmVURxTG5zJkNjYTx8
SDRoKX17MDF4TnooZmsxXyVRWjZVb0NSKmZwclA5a0pPe0J4T31fanVzfFY9QlZIJj5vCnppMGhJ
M2UkRz48Yzktdn1eITkmOXowNllMMXc4WWRfdnVlJHFYNkw+Y3ptcUNKOTxFcGhPe30lOzYwMmlv
TG5MUQp6KVQjME55PUZHI3FZKUZ0RG4hbzckampOOEtge2opO2JndWJzPWdfdUg2M3JfO3w/PnYj
cmFaaVo/JXx7UUpTO0kKejZvd2E3IypYIT9sVGM8RmdkR051ZXlAfUJBM3M5QmRPQDY/T3NMfT88
N2FzYGkmV0NDP0MrZ0c1Oy1ibGZ1QDwhCnppalZVP0p8QHopVkE1OGVsVFVRdEEwQ1heQmRRaEI1
ampBQVQ7S3UxXmVCYFokPHY/PUMmeWplJFBtKTVyVGElOAp6aHsqKnFocjA+UWpYKERMRiNKLWJR
PDtVT2ZyNkxVQHB5WWA8ajN5WlF+ayl2UnwzMFYtckZtcng1SDc5YjVaZUIKek81UnZgMUZeJWlG
bDUkYTcrYSZub3pRczJ1PHBqNEVUTD05e3d3UngwMjhUVEpKbHFoOTsjMExaP3hhKj54T2RnCnpQ
djgxMDcydEl6Q1MmSDFOPX1XZE9PJTZ4e158RCFWd04yc1pkTTJZNj1vKHd0Kl4jcEt3QClYPmpH
clgpUXBXbgp6VEdyMmEyNUxoVXl3XmNtTFN7QWFzTDVMUnlGX3Z+WU1ASGhEKEsxcyspPUpQTCEx
Pz9DOVhVSSNvTiM9X1ZfPDgKentBPn1xeX10a0pWcU4/SDFrTS0wVTIrMDQ2QHkkN0s3O2IrKDd6
VVpoYil1bURYX257SmhILXpBXyl0cXNPbVJoCnoxX005YTxMQX1meGlgX2R4Y3o+Qzc4QEhYYzN3
V2pWa2wqU3NBaHwlPWtXTEQofE1UQiZzYHpxNUE2RmwyJkc/WQp6OV9JIT9LbnA7aXY7WSQhMkF+
QkhiPjJIIW1ZSXFKQj51bGgwV2AhJHMmeyRHSG8+Kyo5cU4pNV9zVlV8dHFSRGcKenI0b31DIyFZ
ZUpGSF9PNipBRW9aMFBFaipRJnpYej0kKTE/QUFWUG1gYkVVXmVCekxYOFRhdT1oNHdDbEcjVnt2
CnpEZTxfRWRPMXZtZW5OTTB7YWtWMzFlb3dzNVh5ZmU2UVZPRlE0cnNKMXdzKmcmS34kbVNATVdK
eTVmNmYmSUc5Xgp6SkU7ZmltKzFxIVNMPy07MjkhKkReLTtHclBhaTBIM0xUOVdEdCFnbjF5Kylo
RkNjPS0wSlZWZj1DKXM/WmBPUmQKemtaXkxQWEdVa3sldUxvWFBqb0gmUzI5JiYwZVY7cDFJKFE7
VyRYfiplPnJUe0E4RHFzQW9YKmooNWp5YFJTMWE4CnphQ1pjVnNLO0N8WjdLJF9jXmV3JiQhfCVC
SmxMKkszOG1wJFpqVGRLIShPYnFvVUghYCYxYlc+R35jbUBZJjZsIwp6MERSeFBTZUxtUFU5e013
UGlJWmhsTThSPipOOSR+cF57Y31pPExaI05DJk5Fb0xtX3RZMzRaaTQ3P142a1l2dVEKejxBbWJg
bGVPQUtZWipzTFZffntEVitJbyRqckd7fD8tanQ9VClnME9qM0RYazlTLTdyYnpfeit3OSRBYVZ4
NkF6CnpDWkRoflBfWn1tUGVKRVNmbDckO0xtI0UzYkwtV2BqLU1DXmM5Qj1ZcHFhJGNpIzl1QSFu
JD9HT010aThaa3VeaQp6c2BuNFlRPm1yNDJ+ZHlKMikhPEZnPjt8KCpPPEc9OWxoJXhOeV8kR3Va
LTdXTWQ2eVNyXyt4N3t4fCtTSWBIUkoKemlkWEg1clljfnFYWUEqQFJoPE5hVitvVj5sMSpLajBh
YSg3NipNemRrQ2xEVyo0fnlAakdlPiVjS0EpVzwtYVAxCno7aHVETlZAZUxHWGlTQHElR3tmQ2hM
RyZzNG95d0FpeD1CXmhhcmVqPF9hMURXdG10ZlZybl8kUihPMCl7R0JUPgp6bXVSVm5VUWA9Y3JO
aSUlSiNqQSMjUWNDS2ZMQV9uMVQlQ3xAYkNGLVY5JXw/VH5ic3dleUVIU1g8c0UzU1h8K3oKektO
MnZyWFplVFZjYSZpIXt2T1lpK2pyJCZBcT9OeXpZUyZ7OU5eSkcpenFwcWtYaXFSbEdTQUFHPHZ6
fVBUentlCnpGYEN+cDtUNkxMTzdpKDNaNj49WVFKYjsmX0tffSZeI3otSlllTjlWIT5OOzclazg2
cjtmclpfI3I3SXtWWEBLTQp6TCRAQH1lVXR3KzhYZXdPX2gpNzhEdSlWQj14eDdia1NYZ1FIU2Zp
ZzclJlVEQTRiT012JlBmKG0taT49ck49NUQKellocyNAMV9USHtgSj43XlN2bX5AYjZVam8oWUs8
TUV5YnV8PmRwOXRqT3A/KWQzSlUkdUpLQGdRcDVMSU9YPWBjCnpWIzRpVnspRkhtd3tNM3p6cEVH
ZW5+dj8/O09hX1dWRmY9RjNSRDsweSMzN2tZPHMhMUpoJVd7WHJmNkE/RFMoMQp6KzlqfEFZVWY4
WWZHXitGUlc8ZDttc2koPGZIOXdFelc9UVE4MXY8Rj44Z0s/Y351Sj0rRD9UdEBCMTdEQUZ1czIK
ej05UCUwOSpDTTh1bj95Mkp5e0prekFhdCprMT54Zy18aWYtWkJVNTxAKVleQ0NKIXZhJnl5ezxA
azR9cjdnYmJCCnp1fl8mTjR6Nmg3THFlWkFWK2RzJHRMcz59MktnVnE2ZHJQbnAjTk00SWFlS2ZA
KSNRJV9HO0cxJTxmJDVycm8+OQp6cVR+JDtQRiRkOChxTEYxTzg8ODtwPmtHMnptX3NJeWghWj54
KDl9VXkxbVd3VWQ7VVRCaGQ4Y2B7LUk/PG5vNVUKeldoSU59PjtWQnV1RmBDc1UrOX51NyhRaE8k
MHEkfi0jbnlgczVBOTg4UHlDMW87XjkmKiY/YGcwYG5AK2tXQn5sCnpIfml6ZmRyMG4hS2dYeE0y
RjxaYiFKYzl3Mkl0KHEkREZZMURCTCRWZT9heWlqPWM3bWRlcTViek9feHxIJFo2bAp6PSNyeDBh
dERPWD5hdkwkPnZscVhZJnQ0dHtePHp9eSR0TT1oV043MWo0Mn4xdk51LXBMdWVXYWFrX1BiaiFo
YTMKenBUWnhZRXtmYzNQZlVnP2orNHFBTkQ2dWNgN1JQTHAzfjZXJEl2NUhNVkIzU3JUQntTTlJz
S314eW14azkkKnlHCnpRa0NeLVJ3Ylh5MnY/STdtJF5LK3p1e2pMRGllfUNBME9JWD4heDJfJiE/
aDlSb1dqZS1vUUZnUU1TV0hrPT09SQp6ellXXmhiZEpKVU85aV9VVnB+ODdzYjRPSGIkbSZ6TH12
IXFQcmQxNjRiNzdDQF5aeiUxR0pYJnF+VigocTQydiUKeil+QXNNUkspI1hPZ08qbCF9XkZ3MiNL
cGppO2BKbG9vd2IwcyRwY045ViomWE4jckJ3KD99OWhQVEdOS0NpJEAyCnozYjdVS1haUkA+KXdS
N3khQF8xejFVbHFPYDxKbWw8TWgwTilMMlV7PVZHYigjP2BxNGQhPCkhcmtfPGtBSjJhTQp6S3o2
cWJsSDhZRV9KOGl0YmN7Q1hZNyVCJWN2fiojeDUwZT56WWFkd1ErWlR2K3JDRU1gX2gqVXFicSNf
ST4zUFoKekpwK0hze3MxPmV3RTYyemhGVHVAaXdNNn5maDtOK3E0eHZTdW5JLWJXOUZ7diROMUdf
VlY+aC0zYWEjcVdTNFJBCnp4S0M5WmM8e0AoNj9yTS1rO0QxJD9VZWBGTkg+VW51NkxIfWhnblk/
N2pXZH57eTZkdXlfPCVAKWwzQTNoWFhHPwp6Zn4pYSpTVGxXWkBNPzhvOUteKyNASHxrej5qVyNI
IWYhS2xlX3oyS3VHendMNz9MRStqcHRKe2VVQUlvQlckTkIKeilXXitqcDk9MjZBe2o+dEk9UnNI
NGZCbVo5bU87aldHeCpXOWt4Wl9EO0RsWWZqLSNPaEl7dVFUT2ExXzg4MVoyCnpaKntCVWE3aCVm
M3ZRLWE9e35QZzBQeiVyX1R7Y1lJXjVPdiF4SGdOaWp6O308aFlDbVJfeGFZZVY7N25zZmAoTwp6
WiNEP3x2eWdjV2FoUE4rN3B+SCtgU0tAR2VMVSt5Qy1SIT9xdEghSnU4QkJRQGIyYTBIcjdURV5B
MWZHX3tDY2gKejZEWFgkPmZiZ1k8Z2hvT2EpOU9vVFF4RF5ZazElTVJ3S2BMc3BTZn1wWWIkZm1F
MkMzSkN2MGF4LSt9KXI3ZG5kCnooISUmeiVIbVJaejRBfFhWNk1QcChOYWJINHopKnZ2alV0RHpC
X2dyM3MzM1NgMXNgYTwyRyoxQmZUOHYmUztFWgp6TWd4M1IwYyFqKjV5dHlLfERIait2R3clOVZM
N0E4dzkobFEhanBqKTlFcX5hYGhkTWZhdUEodkFAOENja1k8O14KejdPclI8P3dfVyVVTVBJNTJf
fFBYYGhLSkRxaTJ7M044M0t9KkN6OGN5MDI7RyYlfm1CWSQpZnw1UGhSX3d0bDBNCno2OHg5KTwl
eWkjK0RPQE9CdG9YaTVeZzliSzMySTAxPikyTktjVlZve3AwNnYoNGswUE52ZkxjRlVpd0swbm89
Ugp6PCRKMDZSfGdRbzB5O3A5azByLW5yV2RDSUc2NGIxajRidTxAIWcxa2lhPllMcn5VVjMwUGNL
MVdTfXFXVkNWVSgKekw5RXsqeTBwTm5XKWkzVyYmdmVGJl9PUHM9Q19MT14rZiVMOHFpISVFVGRD
VDQ4NDUtdXNZPzRzcTU7bysmOU8lCnprMmdqTz5xODJKeytgc0U4eDR6e3ptRztfRzhhMztPRTh3
QVdBMi1OKjAmWjBqUHxzYkNgQjY7SWdwSmMpeDBTUQp6e0g2PjV0WGt3UTZva2h+dHloPTZNKnZa
NkRyWDJLYGZuJU41YUttZ18yMD08eUsqa2lTNj9CJDl0fm1ISlpNOWYKekcyIXx8b1JPWCVTR0ZI
VSlBTD5na09vK1U8ZXZGWXk7cyM4Wj9eWHVGVTtLRXpIQE9XZHIpbnhuNXFAdnk4NTskCnp1dWtf
QVUqLVAyNTdebDUhRDxeZlE2NzV3UVp3Sz9FMShNcW5MeGlpdFZGIz9Vd1ErRTVRY3R6VF5PV3o+
Ul5Uewp6QDRRTi1tRXR2U0t0ang+ZE90UDBtfis5MiRnLWU/YihhY0VOR3hFckxmRVkpb2gjZDtQ
dEh6PTFOPWk1SXkjKWoKemVqO19AQDJIfnhlJmEqNWJ8Y2heRHllcmFteDV4bFMmJHo3KCtFSUNH
WTUhcjVMbFN7I2M5X15BR0RhUnt3ZkpuCnp5ZGxKI018P2RSYi17c0FaKmc3RSZedmZGcTRUJWkl
T01NbTllZWl7eTxZNyVLMFdne2t+eDNOTnBBNjE3Sjk2RAp6T1lnYzJyfilVfiVtQld6eHEpSVo0
ZGY5clB8PEJ2MkpKfm5HUi1AVGJKViVoNVB5bVFVIXlraz5JLWRiel9IREgKenRzI3hWJjtgfHd5
QEQzMlBKMG17NExgI2N6YkNsODVyMFNaMns5SDdZTzZ9Jj42YDx0MTZKPVJWZElPTnB6fUk4Cnpl
a0lwNz4yQHloYEdZb0BARGtPZTV0XnFEXzRqPFFxLSh3cUV1UTlqM3t9T205JiMjKC07dytDajFv
TnI9Zzhaegp6UUlLem81JFgldnVPVUZ5JnBoVzUpPDswV3h6WEteX3FmX201akVQVllhYzk9Y2xg
MDR3UnhMbEV8P0pxWUU9emcKemMtRkRrYCg+Mz1PWCFabS12aTJtMTNIMTs/Q2JzSHhYK0RHVENh
WFB7Yj82UkY7NnR5QlkkRytSX15edWdGbEN5Cnp7I0BNPDc/e2NaNyZBY2V0b2hFeEZsQiVTUEhQ
KDY8TkFSZWo9MD9mYHc8OXNaYTJ4MCRUZkVgZkF3TmZpZ2A/WAp6Tz5lQnpBRk9xayYhQ2ZWQFp5
RnlFNFpOWEttUG9ubXIrJGN4eFg3YmlkSk04bGBJfD1CeUMqKUp4Oy1hKUBoRSsKeipTUiNuc352
Uk5qUG9rcChie3BtZmxYZVQkdHVXamlPTn0mUmR3SkA+ZWx0P2lsfHlTWGZxJGEwN0Zzc21JUS1L
CnpzIWVVYVRzbWQySElfN2g1VnYoOGJmSXIraDB9b0RQWm41JShCcW0zWlBpV285I25jOVRybjtF
V0UpdjBoPSN2Ygp6MGFAcnVqT2RTYEVxTSUmVEh3S1U5bXcwUk1YPHl+Uk80WlRwaCtUVEFzLSlB
NzZgJSowdz5PfSM0d0V1T0FfPiMKenstaTZiTSY1bGlJJGFNJGl5PjZrdzdUVE0xNlo4V0h4UFJq
MDM0Wmg0I2NhYigmSDJyYUYtI0ZuO0JkSzRkeSg4CnpkLXJVY2Z6RCNFaD5sNGhiaztgYzNnKDAh
YEBfWEgpWkI+YlY/KDJPRExxYW1tPiNUS1JfVnRaT0JSc0laSCstZAp6OTxVdFF1VW9gdExvTUhM
M31pbEY7I2NzMG9PTyleJkQ9VkpwYnoweWswKEk2b0ZNSGBpUW1XTEx0cWhjR1ZRez0KejB2UU5Q
MDlUT0k1cUtHY3FKOXs3IUBeWW1wRW9hbjdlMmBBPzB0VHV5RlNUTEA8WmM4diMrcD80V254eCh8
NFE+Cno+I0U7QnpMb35yR34hSHpxeXIkaFRtIXhRcFFQd0JHQEkwIXc1IWsqWkRTPk5NWnchWGF2
TGI8PGRiWShwISRSewp6PFAkPSh7K3okSUN8e1c3czVTKzd1O29UJHBGVFEhMW5IV2JfWlRkbSo2
c2lMeEtIfjt0PnNmaylfLXxKI1FqWGQKekRVa1c3IzIyMmozdEl8eCYyJTRBRE99PEl2Ukh7cmgp
dD9jUUNJP0VHI05nZkI1YGpsKHc5X1B8TEtXJlZkOGooCnpATzh9MD14VXF2QDRQU001O21QPjgh
aTBWI3ZFSXMjVV8tRCYkRiYhd18qRlBeZWdCQEUtK1JnT3ZEQXhiOShWMQp6YyVYdnxBSllATHpW
S3I8YnRhamYraUt0clVBVFJjeDtHamR5MT1UTS1ZZjBIclBtU3tEMDh0Ti0yUkN5JTxmJGcKelMz
azwqdypte2NrTnRtcFM0N19RKzBEIWJRT1pBfHo1RVMldUgqN1lBTFckJXBzdCZUcCQjQkw2TXw4
VzErQX5SCnpedUVrPUNEREg2b3Bwd2dkPX5aNF5sdHg5WEshYkM2XzxSNGNndGk+PypPRitvNjJX
Tml+fUxMaztGcnM9PFY8VQp6JlAydSF1TlI4SCN7XnYxPHl5IUAzcWpmZXdxe1NpYCFMPGE2V3Yo
NklMZl9weit5V045M0ByTTtHRigqSFR4TjgKejEoO0RlJmV6WFZhKmZXT2VXRSY3eWM4SU4lMS12
KTR+Q0FJPTtgcVA/Z0l+RiliTGpgMjlmZC1RSU4kQDhZaWNrCnpAOWYxc140fTFhQFk9YF43cTB+
RW1ZfVU0MG58UV4yUG5Eal5QK1JCPyYtOGU+fUhlRFQyNDN0e29BOHglfGw5Swp6ejVlVHIqKzl9
Jjk9fjVYRGBqbnFhfFVBbHBXWFImTDMpTDxeeClmTG9renUpZ0orQm9Veng5eFBhMGAyZmc2fWYK
elI9MV5KPUBVcnElaHQ/IWVvYVIkO0hTSU5BcGRlQU9+IUpPX08hUTA4MCVrJjV1WmN3Xk9BKjwj
OStHfHY0IXxHCnpvPURiUmQ3Zz0+ZS0lVDJ3JUdzQyEmISQjKXFRVll4PFFhYGx2Mjd1VDFweUpr
ZEE+dE4mKUVzOElUJHBxIURSUQp6PkZ5cjc4JH12djFDVkNHY2FQOFN7YztgdGZ7UzYhKnxZYXJf
eGp4VHt7Y0Z5XzA3Q3ImQyooSjRDJmM2bGBlZyYKemktY1VPeUhZU247TGg4eTh+RFhgJVd5PTA+
dChse0dUTjZ6KzdLKjNVd1NoJjk0fkJMSH1GM3kjKyZTYVJFISk4CnphSnhqQSZ4dkAwa0phQUgx
YVF2Vmk3KSV1MWl4UztVOXBKdjI8aXBCTkJSN0xCPi1rOV44Mz5pZ0s+QDEtSUctewp6Z3QhRlFu
PCtgSTA3aXI/XiZkY25RZUclRyF1emgjUHA4czlkfDNkNk9WRUxQJjIrbCo3V0c4cUg5OU5lTHNa
XmwKejApMWEmU2hwQU9wd0NMP1JoRHRIQFUrRThEekk2akBUV31jel5BeipJV0VrQ0l1dyNufDNr
bGc4eHImcW5sJXx8Cno5Z3xFfW9OVXA4aiVwfCFgS2ZBc1RhUGtRN0clRE5rPWBVcTJfISNGZGdk
e0Q9NzBKWHt2eEJ8JEE/IzdIMnB0Nwp6I2ZpfjEycjJUd3c5QDNsZXokMlBZWDZNYF9zI2BTTkZt
VjIlYU1AIU1vI3hfTClHTnRFYmJvemFsJTd0Xlp6KzwKeiFjdlM9Wmo2bURLUlQ+OyRmViVrIX1U
PVdgbmd0QD1UVFp9UWR2Xm9UdWp3bEhoKk0wdHgpeSVScjQ8QT1IMG1pCnpNVFpjMGloIT02RSVs
MilyPlVHO3p7REJlS3NJc34wb1lANSp2Z3Z1eUx5ams/ZWdybSVpJFlPOWVQODx1O250Owp6TDV1
fDwtPHxleFZkWW9rJVN+V0EoI0A5NysmPEx4K3EmJW5iZ2c7X2Jfdk04c2k1KkJKJkFoUDBKeCZM
aHUhWUsKeiU+V3ktVGVtbTR5Vk5hZkhFKncyIWQldkBEbjt4RTJqWHpubnYobURyPkxHQlU4Pmsh
KTtga1Vfe15zQTFKbWp0CnpSMkYlRkgtUzZAcj08em87dHxfMXctViE0S3Q9UTMxOXZiZiplNDZI
STxeSSk1VFUlKnlkNV57eXZ9dlNhZlVXegp6LUpGVDB6KCY5RmNOPmJBb2BoZWkmMEgwS19PODtR
bj9PKys4MUpqazFrdFdtKkFHfmR4RSZnMV9ecnpEcUFmRXIKemZidzNhN1E+QTJ1T3h3eXJ0d19P
Y2lhXjJBfFBgZE1xaHJDcV53cFJxPj9vP3BeMklzdn1AISowX0B9ciNJeU15CnpxYilkOEBvdnUj
MWA5KSlAIUU3NlRSb0o5TihwKnpoSFdCTmNjQFBIVztHS0Y0SjxlU15Qdy1GSDRaZEl2K0d8Uwp6
IW8lT0VvS0l7VDk1R2ghZDRmfVR6eUJiVHJ+RmVRdzs9flZlZ31WSThqcG9Ud0VxQWU7ZCFKcz02
VF9POUVmViEKentnOXtXRGFhVkw4LWd9TWZecSplTk16dGxeZlA9JjFoYEk5MHFkN01sJUJzNkl9
S15EIUFjUU17QU5neHVPJXtTCnpkd0hAP2xYel8/T2B8UWJCcE9ORyZBKiRENiFHb0V6X1kpMWtt
ZEpsR0V3KXJCPmEtN0JkYzIlXzlAMm9kRHthTgp6aklpVVJjJGlFQmJJaF9ZZm0xQGZQVH18NW5+
O2c4dD45VVlxNzRwMUgxY0NYYVM5ZWAxI3leaXN6Iz9GU3NWZW0Kekw+ZEpNQntJX0MmeX5BalM2
YD9qZXVzeFhkaH5WbSEyTHM3VHlVOChgNThiJCg8UFJEbG87QDN7WjVfbClHY14/CnpWYHJ5WEFM
NUZHN2kjXzhGPytifD4zPUB5KD91Yj1KcnJMU0V5fTghUmpSV2tpUkNTT29jNyN1NEYzP0UrVH1h
eQp6ZDhyXmFEYzZeYzVqR0NeIXshR3ImZjkpcV5xP343V1IyJkNNSGdtaGlVMUlTez5wdWNZRCVi
SipIZj9iXzElV2AKemk9SEM/PGloXm89cnd5PFVNcnRzYS1GU2p3Uk99PHNvKz9vMkxUKzJLdCs4
PVF1ZD9XSUI5SjUwK2ctZjx5I1ZkCnohRV4wWil5QTRec3NJNnRDa0JSU3MqMnZKditANEVucG49
XyNHbWRkdjZiQWB8MXVaVWMtZjtfU09ROCNgWkNQOQp6JkY3dEIhVXZfKiRmKXd+MmFKI1Atb0pF
SHJST1FEZVclKUF7JVIqNz1XdEU+U2tQYUk0PTdyKyN0T1IzYTgtJFIKekMwKE5PMXJNPjtlUS1B
MyQoXkBydzk3NkBSN3pPXmBKYWZ0NG40LXw5WjN8IVFwcSotSj1xTCUwZU13fWtzZC1QCnpaKmxH
USEjJlVSbERJeTJ5byomaGNiWUFNO0BSLTAjfkM2WWlCazVJS1o/MEVaT2haNTwjMTZ1YiZeMzw4
NjI5TQp6NVk3eUg/NDlIYHp2dFY3aHJ1OSZFal5OdGZUSXVGcXp1ZitlfjBjQlVxYG1ESj1kQ3Fp
cF9XRjFHJSpgPDN8NGcKek1LRFp+c1Q9QiVUWlhLenR2dWxmIy0qYl51PXp8T3pLM1d5JndYWSE4
KTVEUlklakt+VDwzXzAhIVlxJUltJVYhCnpfPjQqSVBLOFFVSGwqV0hpXjErMXd+PFM8NmRAPEk0
MClrb0RmNVFiRVRVYTBMa3d7MSlxYl4rKGZ1Ri0paTZMcQp6XkZWYF9ySFVMNnMrNHFETlFFSiE8
S0FoMEooYWJ6UU08U0FPKHxueHdKfGl0ZDtBJVNfSzVFWHYhMHdJOCVvdj8KempgfDF7c1gwc2Q4
PlV6TmktckZURDlHUCk1aU9VNT5ofXUjZVhIO09tYyVrY3stMnRLNU5zYlY1endtMjVlblI7Cnox
YGF3bk0xQT82YTx5Qk5kWGxNJShPWXgyPzY7M1UxdShSQU9IIUVseURUWjA7OCZOb3JHd1ZxTX5Z
cElIRkBfagp6P2R4LTxKfEFZQDxmc0BUZF5pZnptVjR9fCYjZkB+d21lSmlEYGkyOSVGN0oxTmwo
eVVJWSljZWY7RmFVOVBaUDgKelpoVUBTVnlSU2BmMGZDRlFsJns4UHNUeztKen1lYkxyU2VUazxR
a0lxPypQa18zPHdfSFB6OHdrJmA7TVptcXllCnp7ZlZsV3gxWERtbGFRQyRYbmhENSF8QF4tV3Zl
cWZ3M3RES2IkYF45dk5pZGB4OHJ0TnhiZCFvPX51JDEqPWo8fAp6KXMrViFpTWh7c0l0KlRfPGJI
fi1tTXUhWUZ5LWxaXkFoQHpwWEFQOHZKM1UhWUo1ZTc1X3hsLSF0NiVtYTRvckoKeiF5PjR0e0h+
WklZKVdxZTlqemNATXppVSV4azI1Vit5djJQXyNKKXhxZkZFeiYrb3Z0a2lvPngqczx7U1Y2YEM2
CnpHPTM5ckxJdC1OYmF4cipVfWQhMVlpeUopb3l6Zl5YZEBRRV8yPTZJeWkocn0kdUFBKmIyb18r
I0t2eD1PYmU/Twp6azlVRUl3bCRPPkhaKVhaaCRxYX5rZSZzdWF+eEA3QGgwTCEyK2orbXEyYnBv
SmdObT0xTXpKN150c1UyPE9NPUAKelhpJnU0I0JCdFVkT0QmZ20oRTx4bUZmQ2NyUms3I1NRSnIy
TUM5R3RWMEcpbG9HSUQ3RERxTTVNOHJTNGhgPU1RCnp1fjFKYlFvZUA7O1hldGllTkEtM3YrJTs4
Z2lePVJkS1RjcEBLVjtmU3tjYnVDeXstRktQQzsoSSt0WmJJbHRNSQp6d3hlMldGak5kKyMrSCVa
KGVIWGxQdShyM2FLckBENXNYJEd6a35jeE4jcDk/JjJJKWBRUmR8SGFESXA3dSFYbUYKejctJEZR
KDE1d3p5ZD1iNCEwNz1fbzVIY0hQLT17QE9ebkBDeXg0TE9wdStXaENGJE9MdHdGYChqaTlWbVkx
O3E0Cno1MmUme2oyRTZfQnApK0xOUTxBVjdSeVkmJEI1aXFUe1dZdHAzUEFHUkh7eUZDS2J0Q3Zx
JDcke21ucFQ8NlFSRwp6I0N4JXVUajU+SXQpdSV4cWAhJT8leDdmaCZpWThPNjZgV35ZUDF9REor
fTVJOylYaHkzQkxwZD1hUUNNUk5aZDEKekFYU3cpcFJsZ2o+anJjSEU5bEhaXktzUX58TGQ3Pykh
Wj1QaGUkJUtVJCtDUWBgejBaMTZVekZVSDZEamk7SVQyCnpSdylJPTE/X1JkRkQjciU3X3VFWmA/
MjA5SlNNQW01Y0ZVLWV2ZUMhPDNOTHtnVz4maXpHOCotbX5wUmFuYD9fSQp6Q3ZYeGdRMFMyPzQ3
cD0kSih9VDZ0akVaezZgVUpiZ35JTm1JTjJlSUA8KXBSTThndXBOIV97dURoYHFBcH0/VVYKelYj
eCRVK1ZyODFBKHZuNE1eeVpKVCFfRjY3YjZgVHhwRkUtLWUjZTlxMEQ0MzRNQmU3clJ+VCpeN2Ff
dGRrMCk8CnpDaU9ZSFJUYTkweExhT3wpOHM5JTJVZTcxTlk1YH13XmdZSG1BZSpuWk93fDFAbzg1
YUA0SSl3KjJZP0RSQHdpYQp6OTBOTCtaKzJsakdLTDVZUlorc2BIODZwfmBQVWprNHozSyYtYHEh
ZXp9a3d4UXswUThtbVRgaWUqNyFxJSpYOTYKejJKS1ZwTXNubTFaOW9gQHRLWkcxUFVYUzlaUkJs
ZmFsOGNjRyFJITM7YHZIUzApfH1DIzNQKWJTYXpwdCRMUmFzCnoqeD02MExyRW94WmlOK3M1en5Q
OUZra2loX2EhQVY9fXs5UWZtaVJaWGo5TiNuMFB+UmRteDxJdEI7ZGhXcnw3cwp6YigrK0EqUyhR
b21KfWApKnE4aVJeXzhBSGdnXjByUWRxb3BDeThRZUpASXwlbUkhYV9qNXYtNU0hSlpMVDRBJHkK
ejxYV0A0a2JEQkxzKTNwX0pOUWh3JEs/Q0ZNVCMwO1l2d1FkPVJmYkZFfGN6QShtYyliPWIlYSl7
MT0lQ1FaWmF7CnplanAlWXJ5JC04Vj47Mj5sQVdUUkRQKk1gSWw0VEktfD1nOWMpcjVCQmVCZDw2
QEUrK3ooQ1oyM3wtbWtiX3UjRQp6UWshP1pmTkFyaVlgT1IheylfcXk+WjduZlhCM1JZZ0F4VW9p
aVVITGV6fWhhSF84cl5IfllnaF9aYWV2V31oeGAKelBWPkBRXkd1MDRMSHFCNFUqPnQjQWxJWDcy
bEUqNzs4bTkjQnBFK1NUPWhKTEQhfUhpVjE5cCRfe05WJExWey1QCnp5Q35hVi1wenc+cG80K1g3
NzReamptTGtvJV5MUDFxcFBSb0BffDJ2NjJ6QitJdGZgVkpnV0c0eT9eWDViK2h1RQp6NWwtVCpS
fipsJENQei1uXlBORWUpUjUrKCooaGp9ODw1bWNDNEZuKiZETjk1RUJeVHp3WTFAQURhI35BcEBy
THUKelJ7UH1GKCkrZkxJIUNwTjFnVmJyXlhpUzJ3Q0VSUGs1fGJ0cnhlOFEjKj09alM7cmdYOH4w
RUQzZERZaDczM3crCnp5Kz9mODcmbFFEKHdqJkp4ZFB3dkBTSkJqR0hCVGFmST45TUwyRHFqRyRh
MWokfkk+eVcjcjZme0d7VCp0Q1Jmfgp6SC1+WD5qfFUzOCMwMGV1Rnh0bjxPI2JrQz1jOWtmen5T
Kj9edTxWOyY9IX5zSjNUKDZQaypqTipyU0QzS1haYn4KemNNTUJmKFl8XiphcHlHT2l4KkRvLSlg
TmFsMCFTYEsmJjZ8TyptJXh6fUVAZkt+ZWMwWkV5I0smYiplYD82VX1DCnpWeTFeUEdRaHpUYWtm
cl8jYGNUUz9kVX43NzVnNGQqWU1XT0poMjBENDYlNm82V2JNU3J5MGhlOX5sYCl4SGxUYwp6QFg4
KXRwKkpVZ096QHA4eVp0bGkwRytWRy0qKV4ySig5MUQhVWppV2clcylsSWZAUHwxUilQd0BHMG8w
KD5NSSkKenc+Y2tVQCtzc3Y7LUcqJGxMcSpmIUEjKCRNQE03YHB9UD99U3koTXZoIzNLQDtSXyZ+
YTBFKmdmVnMkWUNNYSZ+CnohMmUmLU51YVYmVy05UnE5c2MrQz1CJEoyPl97Z2tLR29RY3U0WGdF
R3l8WW1EYDt6dnVZU2dqb1pPeVh5WCpOdAp6SjgtdCEhSjlUeU59PzhITW9SY2A/OEI4T3RyJFRE
Zi1nWU5NfWJXNmpnKjQrNUFZTFkwRWhJZktoVXlAVVd7aUkKejQoYVYqbkgzOWFNUHIrVUM+U1ZC
cHRaMTVTNnZfKntWYU99R0U7RDZnTl5PZGRyUUd3OWhhcDk8ZmttNjE0XzApCnolXjw+NFRLVj4z
LX0wfFg1VCkjUWtVVE42Mm5TbD9SdjtHWHJeZkkqJDlWflR6Kn1iWEZHM2FBIV94dDdLRmVGeAp6
THQoZXI9KGdhODdTPi1+OWBEK3FMazdoVXI1OGQmc1pGPmtubXxJUjlsJVE+IyllTnRnKTZGfEUq
Pnp3TXlKeE0KekZtZClaN3VeUDY1JkM/QFhCc0JGeWo9fjJ6fVAxIXUrYWdmZy17b3o1NEIwfnZn
NDdgJk1NRmFSOHY3fFJtPWhQCnpRJGAjSUZvaWB8Qm5mPnomfSpwWHVNXlJkOEluflNyTXx4JCVP
cEtWTXNibnc3cjIkNGtxM1pPdH54KztKKk88WAp6MmVhSzd6Z2hXdm8mOXNBcWElNTN5T314e3Ri
I2dMUGMwT3Y9SWhXZjYzX2A9e3NlXio8UGc9b3tTPztlSVJjbEcKeis2OFR+ezFBfD1NNzNVYnpK
MCFiQ2BVc1gpVE4lWWk3KGtePlZ0bT89NHtoemBXTmAwZFBUeXJZWmd+LVA5PWFSCnpYKj47M0Mp
e0dSdSg1WEpnbEpmTFZ4flgtRDByUFJXWisqZ3o4QXdNanpzNGJgfmdBK3tvLSF+RFJLdW1paysy
fAp6VTJIOCM/Jn5vTHItUEtoayZZWXFOeVV5WUoofSRUZDRwd0FwMVZfcHEqNnMoUXZUPHo/bWdz
Y1goMEprQ0FAUTUKemlNciF5Kyp3bTJXd2F0QG5MNFlmQUUlJSVQKzBPeDFoRU8rWGR9bS0lcF9g
eTg+PE1qdXs0NT8+c2lrUUZpSV9xCnozS2wpT28jakRAMn4tZnYwKVBEKzVQbC1AQVhSayE5PXVJ
OT9SfDFxcXchMDQtUnViUHckVlVvaiQpT0FMfVg1VQp6dlBHJmxfYHFIbnIobGhQMD5IaVVCeWIp
czRQPFlveU5ea0lxcVQ7SGt+TWAoKiYzLV9qaXJ1dT0qU2J5WHh6I2QKejkhb0FublpiPHZmdHpo
MSQ0JHoxQWJ2I0UqXnU3JjRDUCVVeVJ5d28yUjVSSUpWRClySzdjQldIbkt3UyZ2WGZ2CnpYb2JW
JFNXfjFmZW5rbmlBTCNDSzEoOW1zM1g0SXo8Pj1XI0Y8SSgpVSRkcmwtMTkhOzlnWk1RRjJPMmU3
VmFIQAp6TTNvcWg7Ums/cGhHSXxkUWp0R3FiR0pQIzc3TU4qMSU+LUAqTTV9PHt5aSlHN14hO24r
PH52PE1WZldrM19GMUoKenA4dCN+ITA5fG4wPnAqRTt0ZiFsWFd6QX49Zk5gLT0wckl3QU1+NGZF
dndQJm1zYl9oNz94SU1TYT9qVGtmPF5VCnpEbzY0dVpZVyozKFlaMmJxX1dVSnlCQXphNUJvJXdB
SWs7IXBSPFhpbDxgJHxWb3NJO0tnP2gmVjd8OGlVfVozRAp6ISlyan4yNClRVENjUVM+b0koUmM1
bVUkM1JAVlozbWJnIyhmSzI3UF4hO1ZaUzxAPlYraXJJRkw9UUlNUylkU0UKenNKMmslSHhTUEAw
I3hrXiZFVW00Um1MaEVZOEt9ZT54ZF94Zil6PSZYNyM5aGtXY1JUQUxJXntIKklDfippSW5qCnpL
d2djKHU3Y1krKyhfZER4RXZjSUBOaiU1NiFHY15oPiRgbipNUnFZSUQrdDtqPnAqNGJocWFQT0Z9
TkEkUzhnUAp6SDZRSj8wXk9xYGJvTVZDJkRsOWpZQTNYcy1QS0QyaThuRHJWUFAwXlJ2UX42OUsz
VkNoZDMtKV97Kmdzc1JGemwKeiRWPERWTHkraytaRTdTUDBPRlVAKElLYSRLKX1FYV5BaU1CS3FV
OUR3ZUpGV21HYT5nKng5YyM9ckd9bXs7IXs0Cnp2IzxsTWtRcnVJUz9EWTl3ekh0TjMreGxNKnFL
cnU8a0dKMnVsRCY2XiReT2pBeXF+JXByfHw1NVpgQkModmBhPwp6eEdRX3tYPFBMaGtmYXswQk5D
I2lhTi0kc1ZkaD83RzFnVGxycE4qcFUrSXJVWHR2KWtESVRSYWhPaTMjak9ye1kKekcxPVY8d0tZ
OTI8TEI/dzF5VVRGM1FoOUBeQ316cHNoN0x9Zj5MZ0BeO1l6RTwzPW9aPUk8YT5fMi1CITBrfjc/
Cnp3VyhKUmc0XyFuOUNMbX5Re1ApMGs2c0BaRCgxQitBTzNeU0g4IzI7NEp3bUFqUWtNbFhTQ15z
bkV5I3laYjxmQQp6O3kzWjI8bmlIfCMtU1J+UT5fR3J2bXJne3p4LWIoQip3fER1aFdZRkk8WlhQ
LT5ZSUttMD1VUFZTT1J7IThyKjYKejlXJjA+bHhKeHVBUVI/b0pEJDNNbXR+LSE5cGhwSSROfX5W
JT5VOXpZZSRTeTVobzQ1XjFzS1RqViNIVjNaZF9LCnpAJmE+aDMocEpeMW1eNUQ7KUVvMHhkbkRs
T3BHQ1Vrcks+bjBQPD5wZTQjNGpZckZEXi18K3tHQSk7SCtQM2I7Vgp6WVdKKC1mXmFrd2p1Szx+
YmA4WVYyM18yNyVUfElkTyotR1RUfUBtYktJdk0wQ2steGpxKG0/Km9HPFJ3UVpoJnMKejBXb2hW
RilmfGZjQDZCbGhMcEowJl9RRHIhUUN8enkxbn05TGskKGx1Ykk3TEFYM0ImSUo0QH1Me2o7NlUt
TDY9Cnp5SHVgTnl+aHIoNHB6SVV0ZjRSSllJRFRRVTZMQC1OIUUyWWRnRUAtMSNxSk1oeTFmUVVq
TkFpPC10M14lXlVFKgp6dD1QR2NhS2tWUDk9WDdDdDA1ZzdMJEEqb0tOU3JsQXVxRXFgLSZLPT5r
NEg3VFUqPCgzKHJoN2RwKVFPcjYwJUkKei1lRj5VSFB0XkZucClSTHdWQ2l6YyZSS2hwSUc4fmh+
fEZQLUZMKXZQVUVCKzstZThiaihWX2E+U3hIb01KdG1oCnpoR0E0PyNKZmV5V1RRay1OKmpxJDda
QXB6ckEtRXhLI2w2Iz8jdjl1ZHFSQlJOZj5SZDtGak1OJHxOcFNsZC0rKAp6P0diRHwyWTJAeUk+
ISUhe1QoY3c9YDNIelJyKig9azErQ3M1TWZsfWpwX0BDcUFXc01geXA3aVF8SEpoXiFjV3QKei1e
bSl2JSNfM0BTSlZ5KGZkZmF1OU5WeD1vKlBiZHQ/a1Y/cHMzZldreShkWDskQytiLX5mIys8c0JW
aCVzVCFQCnpPNXhHPTRRUEEpOVJfUTB6bFo5OzBzVTw4T2puUzJYTlhybVhMWTZjeiFLPTsjUkdE
SDwmRTZHQSVMQ29eRCQwUwp6SHElQnBOVCM+Y2YwPXdSSUpsdFdIXjNJb3pCSns7PTl9Qmt0SiF1
cEoqVCMyNW5ZbDFQd293UEZZLWM/bCtpcH4KenV1Y2NrSFY2JHxyKFJmX1hzJldVTXo3TitQRWhR
dmVsK2BZN28yRkJWVn4/bytpZnZgLSQjR3xKQVVVNzR3aGEqCnpKUiYzN3h6K2kyPHUkYGE8a3NP
QUVQN249Rlk0U2dZYG1wRClgKXc1O0hwV0Fsdk1KVXd+Jm1xMkxveWtYV3ZPaQp6M1U7QSRyJURQ
JWhgcDRKWGBMMH5rR0JKRWNsQ3ljZFN2e09QPSRBOSV+ZippeXErMnMwaVNmUVVPVW81U0dXRDgK
eitQV2coSThJZCEtNHFDckJ9a2NZM3VqOFNDRih1ais+djNnKnN0aFY5KkElNE9UZzdIYGhrelY/
P2hXSWd+eG9aCno3fkE7QWArO1QrclcjfVY1RiQ/X2AyTFolQXo4fXEyUzVSRHkoUXVvNnkkVWdj
bihne3d4TW8rXl87SCtHb152JQp6YUV2TTsrKXw/fE5AZTFwTVgybUxPPTFDO3VeWm4kX1AxTSo0
TF84fDZlIypFcyVvKzJ5JUEmdmBkcVQ2Rj5oSVgKejsrS3YwU1NWQGd5RkIzTVk+MylFdG5Oc34q
ckYmd3k7YD8zVjE0Xl5tbTxJRnlzVVVrViMjQmdvMClkLWJ9SygjCnpWIWVSfWxsKyQ2elFGeTlw
KnRHI0ZQJGQxcEJAZ3QxPyVBU19ZV2VZZzFCeDNOVl96ZU1XbEs2LT85MUUtTmNHRwp6U0ctUVdr
Wlg4T21uSnxVRGpoVU1TO0BubFFlQEBMXmtlamdeem88U2lgbCNtKVRZMXwqbTYlM3IoX2NrNlde
I1QKenFDSm1ZUmtiKXkyJktRYWpwQjh3RzBTZnxhNCpwZW95Vkp8Z0EkI2NLe1EpYHZzcnZDOU9z
T0pUWihqTjc+bUJMCnpse0FBVjZ6XyVEa1k2KnNMJXBRNj4zWDF9fEdlRH5sbiZRVkZRNE0peFBf
NkVyNThVWW08JmlBNCNAc2khOUozWAp6b2VgKDdPR3ZCSWJFKUY1I296UyhUX2xCI1hgM1RzekBL
QFJDbl8jP3R+U0Mqd0lTUyRaTiFwUSFleSE8R209SmUKemAoYVUmRWgoMUokWnA2NkROMC16OSlK
eytgQHcrb1U/KnMqcElaVFNtYl5MZD1rWFdAMC01K1h4JVR+V0dSMjwjCnpoPkVrZVV4QVhXVCY8
YVdqb1ZnQUAhQSE2PiVkcnJ0OSQpdHwydWtxZn1kSzgrczBjQ0hkNSRkdWdCd0B7NSN5Twp6Y01L
Q1NeUHpFTSFCPHB0JEI0PSVuWHQhRTUwQlphSzhJZD92TFU1SlIja15KS3kyWGcxcztjM1RWdkte
OXk2Y3gKejdhcUlMSjQhKitjIShXVmZUY0JxSU4tPGZQcVBwKjlAeFp9KGdMazs1flc0R1IkOURX
fDBkMTk9b0V4Q0ttVVIyCnptJCp5VTZadER2b3RlR31XQ2dEXm0oY09oKzlOOU8jfHQwQ2g/RHA7
T1Z0SVFETFhzOW9uK2plSTQzQ01xV1FRfQp6SEZETnV6ZjchKWAybjd3a2pwR2NuUj9ZMikqWmg+
QU53fE1vNCRGP2tKOH5TLWspeXRWRD93Kl9nfWZfTiEkV3MKejg0KFQzQmEpdnxFJDY7IUUzfSQo
eCU1PyNTPzt0dURLWUZHXkItRzlCYlVSND9nWF5vQ1pWWHB1UnozUk5mUElvCnpSZGxTfHRyRkRO
ZDZXLT9HcXJKU3FlS19RbkJSdmhfX2RGWkRoMGlaaGJ2cj5iSSlMZkRVdjYjaVgrSDhjaTEyOwp6
WVI1KVNvOyNEKVN5VTtyVzdobWVVTiVvT294Uy0yTFhKe0VwIzhBd3E3cj5JQlBUUU9BdFV2ZDlx
c09RJDxlX2cKeiMkd3hDcEdqSDs3YmFDUCFGU0RvYmVfJkxATVFYQ2VkKHYxP31pY09JKUlQRyV4
eChkQWBKJTMjSEFmMlpzKWx+CnpNIzR6QUg4JkYhZDc5dW0pXklvT3VhVDw3cUc0Oz8hemYqQDA9
R2N4JW81IWg5NzdoI0BYcng+PCF2azVjfUshQgp6MVJtbTtVP2ZYT1JgVUhXQSNJLXl0eWRWYih2
QTxBX3Qqd18wZmYpclNnIX5ZOFAwdGZ8Qy1JRVlQNGVBMHJ7QWoKeiF3VVVTK1UzJXwpZFdYdnVx
XkQ0Sj9XJSU+QF5jNEU/OSpoQGFYVERFOWpwQmR8eDJ5KFY1VTw0OWc+Z15iZlh9Cnp3UX5UQkpy
M1Y8VmApMmRXR1hGcjZNa0xRYiQ4ZjAmaGh5P0tGenx3cGhpdjIzZXVnU0liMTYyYH56bSNpUnxl
fQp6YEUxP1VtMDFaWVN7SVdrVF9LbXZvfDRrWit5JTZtdEhNWkVZJHc+LSEzTiZWTCVtZVFrNllo
Y1ZJdkdyIXI8TSMKekZzcWZkPVFmTX04U3RlRz0tKElIdiExPHJvaX5eM0o0TT9HRj1Raj9pSj12
QyVDOzVCUXEyb3BrfXdPXzBBaF4hCnolQ0xIXmE0RnsobFQ1bGEhPTMoYDNublNRUzJ0bytxdWlA
XkJXe00/TiRXbWJQbVJ0KiZJR2NvbXstZ1R7WjlZPAp6eXEhc1EzRCFFIV5ucVpMREBjYGB5RUtx
MzRnVFpIb2ZGUEsqcSUteyo3dGNeO093fCs8QWRKUyRmcWowTG1oYlgKek4lVHFnUXFDbXRwdXRV
Z0UyfjNHTmIpZkswOWBFMnliMEVMXkcxfV9vPn5QezJSfVEqd05vN09ANXg4O0FURzFPCnpMLUdL
PTBkSk0pM08mMSgtdGxXYyFEOXtnRlArXmFZN2hlVGNUcGRpPGtjOE9sajdyUTRwT2UkYztMTFBp
QnFCUAp6IW1qP0ZqJlhrVXE+YiRNbUEzODxHYXxUQyM3WmomPjdoPW0jNW5DTktOQD42eFc/KDBG
OyRUNDZ3QzNmQT55eEcKenFGSH57Pz17KGpEVHxrMW5EMztXajsrUEpMNW59TUxzdFkjTWpNRDl6
VjxCfnVqP3xvdVpAYTwkOyF3Uzd9TWF3CnpOOClFRlBUUkFiOTgma0tHMylMfjQmSCpoaWBjPjNV
aFg1V3VDNz80eFdjY1FtQF9uVFlzQy0tUz5jJHxFIW8tRwp6YENNQWpfaiZSKXF2OGJGRD1JNFRs
YmNwblJAOVlKTU95YFdTNnZnbzVCfEtsWDsqXldIZzI/MEdLPW1fSSs8WWAKeiU9UTAxP2M/RiZ6
fWxzKm04KXJPPy02aipveD0wI3ZeTW9AcVJgZFpjdHA1STVqKDN0Zz9iWGNSPj9rMEcmSnU4Cnor
cVFUaFR+QjEoUXk2YmE8STE9fSkzRGtqPkp0bTBQa3QjeWVDc0lrJTRkeEVhS3xtV3h+TjluMzdZ
ZmFgdCk+ZQp6a2pWaVNudXkyYXc5RGAyfDlrJn0hcWJiNmF7P1BmSGhDPGBKd1YxVilAR3BGO2wx
WTNXTjlCKTVRZXJHWDlCa0UKel4jTX5mbmRPb18/dThVZSVFPC0oTG8pd0IrY1pqNUVfXlVtLWdj
KzxmR2c4RGMyQXc+TC16RHgjNCohNDNHOChTCnokNWhAWTN0ZEV3czhDejxiQWIoMDR9fD0lPnlj
NmxWVWtiPXF3JFN+Pj4oRThleE9uUy1JUV9Pazh1Oy1iYWg0VQp6dFV3a15mN2BAMyF8Wit+QzZv
ai0wVUBXPml1cmYoZChgOCVoNiFYQjxkWTl9KkBGPnEhYklaTDlWNjZSZX45ekYKem15Pn5QUz98
e0E2LUpkTSZnSj1WTGcqbmBubV9wcVdsdHAqcVcmSGxreTZCVDVUTjlIa0hlR2RRO3MkdDQqQzlJ
CnpRfWM9NF94PTNxVyhpd3NIQyY7LSNYSl9wXz5qTWRzJEphOzBSNU5tLUBqKWp2M3h+cFZuM1Um
N2gqIXoqS0NWQAp6QUxCeCNoeUk4Snk4RTtwe0B6YTtrRUx7R1h+fHJPQzReQ3NiVUhBJHRiUVE2
MmtaMyg/REQ2Png2Zi1FOH5Hb3sKelYyLUF2bjd5b1JQQ3g2T3Y+TCYrdEdJU20qIU55NXl3UWpu
ZWFCV1hXYEEmR1VnR2RIdiNXbzh7PCsrbmJENj9ZCnp3eUx9S20mP25gcSRrUSlibW1aNz5YVHA2
QnplYjReb2hpN1o4ZzhkP2dgUSFqPShjP2xXTlhjaEUmYnt3RWNkJQp6R1k+XjxjUk1fZzcqSFUz
Vj08Tj0wREhuVHZfeFRUaDR7ZXs3Sz5xQXN1bkJLSU83eTxwfVNWMUdOYFpOJG0xWl4KekNPPl4/
S0J+YT08N0o+dHhAcENCVEl2Ujs2PXBiclpPY18wQkhFVkErK2N+Sjklb3NxYG1lfENeLTRWYENg
YWVHCnpzWSEpISN2PCllRUFWUF8yVGNWVCU8eX5QSiEzbTUlU0FuJiZTYH1UODtuIWw5aDAmUmVB
dlN8TXdobnJMWWYjfQp6PmJQeHllSnd8fEY4UDl+JG9FZT4/SFlkbEFIZnB+Q28zfTlaKEJhSDMw
SVlLJX0qK3ZUQyR3JWNBTGBgKmFPPm8KemZCa0F2bVBtMk1haWV+fHJwKm5iVHJoZDVPZiZ9ZHw3
X2FvPH19QjQ1IW07Rj82P3E8SXJhU2chQHJIc0UoJXxOCnokK3xiI0ooWEo9VjNUWFgyTyU7RGEp
V0JFIyEqTiprazdGfEh8XmRCNX5QOHZeQSl6JjglKD1vLW1ENW50eG9Mbgp6PzcpaWN7b2hJcklq
PUJWPSZrQzFOYGhhaVJxVUwxWFNtKW1vWUN4akkqfn0/NlAhcnJCY3R9JUB2KHFfMEV4dDsKendn
fD1ATDJ3MVpAVTdmZ1NYZiUlWlFYelZ4WFgmVVlsQTxEekg7MCFiIy0tQDtKbjcpVEI0Kjc1eDJt
WHh7OGkrCkpgNkh7aHt8X0xFeVl2NzYKCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9wbGF0Zm9y
bS9tYWMvc3ZnL2N1c3RvbS9wZXJjZW50YWdlLXJlY3QtZXhwZWN0ZWQucG5nIGIvTGF5b3V0VGVz
dHMvcGxhdGZvcm0vbWFjL3N2Zy9jdXN0b20vcGVyY2VudGFnZS1yZWN0LWV4cGVjdGVkLnBuZwpp
bmRleCBiOGQ3MWQ0YWU2MGNmYWEzMGU3MjRhMjFhMTAwNjYyYWY1OGIzMzlkLi5mZDIwOWRiN2Jl
NDdjMDQ3ZmZmMmI0NzcwMTdlMDU1NmFkMjAyYjRjIDEwMDY0NApHSVQgYmluYXJ5IHBhdGNoCmxp
dGVyYWwgMTEzMjUKemNtZUFTQE4/KG9sSHlgdVZCcSFpYTB5fnlVeyt2WVYyYT5pMUIlUWxZYnBS
em5rQjlnQ0NNNDckPVN1RnhlVGNXCnokIVRlKCM7SXYoTW9GcDAjenFGbGlLYSVUPTFJdjBDV2RL
Zz1CNSp9cnlUe0ZAR2pIWUlsJEF8U3N8YihLUEB2Uwp6bTRUc3h1e0dwO3d5PmtmS2VOMSo3bkNA
bnZpVVl1T2k9UVNUJUY7MSNxNihPUVp+PFJgRTlOZlFqOSZYPChhKkgKenI/eiF6JENGMUZ3ZUdw
VFVDOTJ3TDlYZ1Vpb1JFQ2wmaStRKWYhMCkjZFNaUCZHWHJ8XndvaUxiKVdCPHpwdT9OCnp5VSlO
fGJqanB2MUlyV008M1dvQUdqblIzdmlAezFeZXk2YUcqSnpge2wtcykmOVMtb1haNzxOUnM0PDdW
VFlASwp6bXYxVXhKTH1UNlM/biE7OVVpI1B4fmE5e3k/N3k0cSEzZXcmSGFVJSQ0Zlp3S2Zkd2xP
fjBqSVd5UWcqe014b2gKekI5Jj8hT20peElgfGIhbnQ5c2Q/Kn40UFcqVE52WElvRz9WVCRnM2Yl
dTczVkxTVjF8Z2tgKFd5anp7TGFFeytNCnp6NnBFaGV5UWBAZTkhS1g7dnNJeXdmMWcxZGdwIVp4
b1pDP0AhXnRaTjdgJjxCdXV+ak5EJHBGd2VwQVFBKDQwaQp6VS1kO0hnKld3aEtoOVk5SHwmI0ZR
XjVwX1F6P2xKI1pleXEqTTBKUz59cUdOUmw2Pnt7IXd7WTtLUnkoO3EtZX4Kej8hSUB1I2tBZ2xQ
bkppRFhCTXdWZlBnRFk7KjFSZTRzQUE0aDk7WWU/M0d1dU5sJmdlRHBrcWFVNlNPbyhYcmE+Cnpq
X3ZscUMza0s5WCgkeT1hbyktPz41dDwtdEBTN1VwSH1gbjlrYnleKiFMLUdYVjJSOD40RWpwciEj
ai0kejh2RQp6OyZIS1dUK1AlZ1dzfTMqcj4mezErQjU1b2w+TTlWPjR3am1PIzY9JVp9fE9ESC03
NHc+NiQkdk08MGlOZSZ5WCMKejhmOXBIZXx9RUF3ZTJJbF5Ma3NhNnxlMj1IVj5PVUpeZ1ElJE0x
S21fRHBeamBxTXd8PiZITG9YT0FSNShsa15uCno+dzIhKElzS15LJDROSzVTOTNvfiRVVis2Y1dS
c0ZyUUNfWFJJVmxAJS1adStLaHszRlZ5fDAwJikye3lsNG1aMwp6YmJoWnRxP0tZYWNQQyV8dW0w
UHx8QTteTi10fk9HMjl0aXlnQSs0JTxwdmtON2coNk9HX1FDYWxsY0NOd0k4PFMKeldpUEk/X2A/
IW12cyFGemttLURkSiZaREM/TnhGd0ctcTYlSHRub3NQYGwzaiQtNz5qTih3cD9hTjlYMz0oXzZs
CnpSQnk0KEdlZVZKbWZlX25TdkY1KnB7M0xKQmc/JX5DO3dYaVFFPGNHNE05SkR0X2l3WD1PPVpv
YXImP1AxQUczdQp6OTtvUTxXTUVLV0BOe3R1c2JHQTJiN1NzZDFfMmh3bGZBZCtVZH5HVkZUe0hJ
MmZzcXcjaXNZeUA0djNCKyF5eFgKej1odz04LXlUO09HTz0oN0NeJDRRSDBwZXFFWTFleUZvSHhh
eEh1KiMmeWZWUEtgSSFUVmpVVnZqSmFWdGZEKE83CnpPaXd0ey05VH4+b2V0c3gzVXwqbSFUQWkw
aXlJZyQ1NnUqVzd5d2RxZnRBST5kXjNYWUBJWFZzcHwybmYkPzZoRAp6IyFGeylBbnFEPDNNe0Ji
THElYVV0JkhYJVhtS0BLdH5mTXxtYlR6Sj0+N0IwR1RWe3M0Kj9JUmUrPz5uJEMwV08KejlWVnVm
aTw/ISEpZmlZPGZzPHB4ayo3MHxZQVJRVTJBISZITlAxS2w4N0orSzVyJm4mMHR5PkFJM35FQnBO
NkRJCnpNWnJPNmROTlh0RDh8VVI+QlVWVWdxe2czRUZPPUZkPU9SUzBWTT9vRzIzVilKKEMoM0pZ
KUplIVBQTGh4e0Z8OAp6SWs3MCs4PT1RUk5JOz9Vdj5+alAxdjtSK2ZnJG9zNHc0PVpDTUswYU9F
cldDNjlmZW15NjVSND5HNTxKNFYyTTkKejBjTVdUbHJveHE4Yi0/JDR1UjJ2bVdnR3dfR3VXY2tf
OGstK2JLKmVxbTRJKSM/Y24tWGZxJCFIeVEyd0ZmQCpLCnoycHZYeSR0KWJCTGtFbVpxZUJNe3F2
SShZcWVCT3lCWDZLbCVGJl5OKFYrdi1BbyVGZSFKciZFc1B9YUNXbmticQp6MzBleVBvMndYWSRj
O0FTSz1Wblg0WXw+VjlCXyhyYlBpfkEzVSN6MEgjKnI0VThnWHA4KiZmaXQmWnw2QEFzUXsKUjJl
PS1YIVBDe3hXdH4kKDY5NUcyI3smUVcKCmxpdGVyYWwgMTEyNzcKemNtZUFTQE4/KG9sSHlgdVZC
cSFpYTB5fnlVeyt2WVYyYT5pMUIlUWxZYnBSem5rQjlnQ0NNNDckPVN1RnhlUyZECnpYe2x6M01y
TmpGbVgtI2xNcmxTVm1XanpgTW9BV0NDVyR9K2k+ayQhM1Z8bFAlWERAUUBOey1vMnE/LT0lZ2pr
LQp6VjVuZWg0TFA0Sj4/cmNqRU58cm5DNjFfVXpEKlNxbHNxRj5YU2lONWB6eDR+JjJ3OVJvOWwh
V1c2eGBPWDBQOT0KelpDJT4mPGszWn5kIy1PNnZqMTw4dE5NX2xANntVUnMmUXwlTSQkclktSCZK
VWU2fXJwYj5Mang9WD5Wd1l4QiRRCnpHdz5FJkdXcHVUQGBVJHomPzNSaW9Fb1JCS09HRXhpI1Eh
a1I2fXBTQGwjPVFZJWN5O3tycEIxZWA5cG07cCpTegp6bzY2VkR5MG1RO2QmXiZrMmt4X09ZSGZI
Z1VkUjxHI01FSlBmMSYyXzV7fjxpWit2PndafFBUQWFkMGNZdyhYSGYKenI1WG9RLUU7TjZKQSUp
dVVVcTJxdSRjMC1GdnhEc18za094VyFXP0godkY9Rip5fSVHKzNxdiVSd3BmLTxNKWtrCnohcnIt
Rz5pam19dnBifUNoK0FeNHoxeG83ZDAlXzMrQ05Ic3hhOFQ5SGRgNDkoPVJefk03Sys9ezkkQFhC
d29OKgp6ZU5qbF5PK0RVXkd1SGhMYHtkUEJGdX4kZk5AN0VDbCF5T3lwUyZOdCtGNUpXdF8hYiFS
Mn4taXUoRHFge29hK2sKej9fRjsodHZCRzQ8Jm9sPCNwQDl1O0w0SVhWPyUmTG5+anZBJCkrTkU8
PClHYGxkRndOUmtDKU1CKU0jS3RUd3gyCnp5RkdCcFU3TFJ6TmArSUx3e2xHUzxNPlome1luMyls
fE42JVlgNzhqZWFoT3x2dnolWVYxNHhJJSQtdGwqRHMlVgp6VDxqWkhHeGJXQDxaJDxDWWJ2WXUl
ejdoYnwwYUM4O2o8Pnd7dipYM2V0Kj1CcEwlQXhXez0zeCREeUJKZEFGMkMKejhKZ2RwcEhwdmJg
JCtHKy1xdmZ5WWRnRW0hKTh4VXxDe0NVYGB4Tk5sYj9uRF5wRUBjQGxYMk1CZ3YwNjRie3JKCnpv
LTF9dktkU2R9KGhjdmArPmE3K2s4e2tPK05PQ2FjajdPVnN8ZzlTX0klWmt3VTRnWT5zSFY2SEVA
ZExuTSl5Xgp6LXxHKSlySV5nISQoUjREfE11fWU7IW5QSkopZl9ecUBWTlAjTFFpfSFHLVN5N04j
IUVEXytNV3pXLXdGaGkhUzsKeml8WmBAdXRlQ2I3RiEhK0kkdlFBcWZBK1FtRH4lPjhKRExgSjhL
ISN0fX1ufnU5djVoZzNiaW9iYEE9PHU2ak15CnpUV3NecCg0PzFUSClkWHomNjhQWj5HYmBgYTxB
ME16dCg+Zy0wKmlwKDlmVDFmXk9GTk5uTEI0e3d4MiRwMS1hSwp6RCFNeHY3ISgqaFRedkl5N35r
STkkYX5tO2YhV2N6VFlhezYrezRKNzdHTD19bVVtc0t7a3lLJWE9b1pVe1Exd2YKemp1I3AtdjJY
fHxJNWFSYz5VPW9hK1E3Z0Y8MTtjWFplVFB6YlBeJjk3Sms5Uj0zeVFUUnQtXlJ6JEt4ZUpme2J0
CnpzWmxTWHB+UlNWKVI1Nkk4QkhnbmQxdGdKNyVkKkBSQW0mKmZCd2JDNXZsJWEpTyowYldWUish
XihEY3xHZU9ZTAp6NFdZKEMrYHdWaSVxRkRqRUFSaz08aWl3YmpSPm02TipJfCg0SCpyUyhSNERK
Y1NlaFgjP2ooJnc4e198dHd1KiUKejFxYERfTEJuV0tGal5GaGJgWEZBaG9ofjYoVn0zcUM+U2pZ
TXZEVUFKaiFUTUZqXkZoNzZxZTQhRHZ3Y25uKWZVCnpEO1NgJGZ7bXNWOFd8V2tXYGZvTmpBcThz
JXM4NEUhTHhqJFdCOC1KXzBjQiFYdVVpLXZrek1GSCpmPVlLYlZWUgpYYyRTfm5KYnd6ZnpMJncl
KXo0Kn1RJGlCfXJhKipBCgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvc3ZnL2N1c3RvbS9wb2lu
dGVyLWV2ZW50cy1vbi1yb3VuZGVkLXJlY3QtZXhwZWN0ZWQudHh0IGIvTGF5b3V0VGVzdHMvc3Zn
L2N1c3RvbS9wb2ludGVyLWV2ZW50cy1vbi1yb3VuZGVkLXJlY3QtZXhwZWN0ZWQudHh0Cm5ldyBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYxNWJhZTAKLS0tIC9kZXYvbnVsbAorKysg
Yi9MYXlvdXRUZXN0cy9zdmcvY3VzdG9tL3BvaW50ZXItZXZlbnRzLW9uLXJvdW5kZWQtcmVjdC1l
eHBlY3RlZC50eHQKQEAgLTAsMCArMSBAQAorUEFTU0VEOiBmYWxsYmFja1JlY3QgaGFkIHBvaW50
ZXIKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3N2Zy9jdXN0b20vcG9pbnRlci1ldmVudHMtb24t
cm91bmRlZC1yZWN0LnhodG1sIGIvTGF5b3V0VGVzdHMvc3ZnL2N1c3RvbS9wb2ludGVyLWV2ZW50
cy1vbi1yb3VuZGVkLXJlY3QueGh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw
MC4uYzYzZDEyMgotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL3N2Zy9jdXN0b20vcG9p
bnRlci1ldmVudHMtb24tcm91bmRlZC1yZWN0LnhodG1sCkBAIC0wLDAgKzEsNjYgQEAKKzxodG1s
IHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sJz4KKzxib2R5IHN0eWxlPSJtYXJn
aW46IDBweDsgcGFkZGluZzogMHB4Ij4KKworPHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcv
MjAwMC9zdmciIHN0eWxlPSJwb3NpdGlvbjphYnNvbHV0ZTsiPgorPGRlZnM+CisKKzxzdHlsZSB0
eXBlPSJ0ZXh0L2NzcyI+PCFbQ0RBVEFbCityZWN0I3JvdW5kZWRSZWN0IHsKKyAgICBmaWxsOiBu
b25lOworICAgIHN0cm9rZTogZ3JlZW47CisgICAgc3Ryb2tlLXdpZHRoOiAyMHB4OworICAgIHN0
cm9rZS1saW5lam9pbjogYmV2ZWw7Cit9CityZWN0OmhvdmVyIHsKKyAgICBzdHJva2U6IHJlZDsK
K30KK11dPjwvc3R5bGU+Cis8L2RlZnM+CisKKzxyZWN0IGlkPSJmYWxsYmFjayIgeD0iMzAiIHk9
IjMwIiB3aWR0aD0iNDIwIiBoZWlnaHQ9IjMyMCIgZmlsbD0ieWVsbG93IiBvbmNsaWNrPSJwYXNz
ZWQoKSIvPgorPHJlY3QgaWQ9InJvdW5kZWRSZWN0IiB4PSI0MCIgeT0iNDAiIHJ4PSIzMCIgcnk9
IjMwIiB3aWR0aD0iNDAwIiBoZWlnaHQ9IjMwMCIgcG9pbnRlci1ldmVudHM9InZpc2libGVTdHJv
a2UiIG9uY2xpY2s9ImZhaWxlZCgpIi8+Cis8dGV4dCBpZD0idGV4dCIgeD0iMzAiIHk9IjM3MCI+
PC90ZXh0PgorCis8c2NyaXB0IHR5cGU9InRleHQvZWNtYXNjcmlwdCI+CisgICAgPCFbQ0RBVEFb
CisKK3ZhciBmYWxsYmFjayA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJmYWxsYmFjayIpOwor
dmFyIHJvdW5kZWRSZWN0ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoInJvdW5kZWRSZWN0Iik7
Cit2YXIgdGV4dCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJ0ZXh0Iik7CisKKyAgICBmYWxs
YmFjay5hZGRFdmVudExpc3RlbmVyKCJtb3VzZWRvd24iLCBwYXNzZWQsIGZhbHNlKTsKKyAgICBy
b3VuZGVkUmVjdC5hZGRFdmVudExpc3RlbmVyKCJtb3VzZWRvd24iLCBmYWlsZWQsIGZhbHNlKTsK
KworZnVuY3Rpb24gc3RvcCgpIHsKKyAgICBmYWxsYmFjay5yZW1vdmVFdmVudExpc3RlbmVyKCJt
b3VzZWRvd24iLCBmYWlsZWQsIGZhbHNlKTsKKyAgICByb3VuZGVkUmVjdC5yZW1vdmVFdmVudExp
c3RlbmVyKCJtb3VzZWRvd24iLCBwYXNzZWQsIGZhbHNlKTsKKworICAgIGlmICh3aW5kb3cubGF5
b3V0VGVzdENvbnRyb2xsZXIpCisgICAgbGF5b3V0VGVzdENvbnRyb2xsZXIubm90aWZ5RG9uZSgp
OworfQorCitmdW5jdGlvbiBmYWlsZWQoKSB7CisgICAgdGV4dC50ZXh0Q29udGVudCA9ICdGQUlM
RUQ6IHN0cm9rZVJlY3QgaGFkIHBvaW50ZXInOworICAgIHN0b3AoKTsKK30KKworZnVuY3Rpb24g
cGFzc2VkKCkgeworICAgdGV4dC50ZXh0Q29udGVudCA9ICdQQVNTRUQ6IGZhbGxiYWNrUmVjdCBo
YWQgcG9pbnRlcic7CisgICBzdG9wKCk7Cit9CisKK2lmICh3aW5kb3cubGF5b3V0VGVzdENvbnRy
b2xsZXIpIHsKKyAgIGxheW91dFRlc3RDb250cm9sbGVyLndhaXRVbnRpbERvbmUoKTsKKyAgIGxh
eW91dFRlc3RDb250cm9sbGVyLmR1bXBBc1RleHQoKTsKK30KKworaWYgKHdpbmRvdy5ldmVudFNl
bmRlcikgeworICAgIGV2ZW50U2VuZGVyLm1vdXNlTW92ZVRvKDMxLCAzMSk7CisgICAgZXZlbnRT
ZW5kZXIubW91c2VEb3duKCk7Cit9CitdXT4KKzwvc2NyaXB0PgorCis8L3N2Zz4KKzwvYm9keT4K
KzwvaHRtbD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9MYXlvdXRU
ZXN0cy9zdmcvY3VzdG9tL3BvaW50ZXItZXZlbnRzLXdpdGgtbGluZWNhcHMtYW5kLW1pdGVybGlt
aXRzLWV4cGVjdGVkLnR4dCBiL0xheW91dFRlc3RzL3N2Zy9jdXN0b20vcG9pbnRlci1ldmVudHMt
d2l0aC1saW5lY2Fwcy1hbmQtbWl0ZXJsaW1pdHMtZXhwZWN0ZWQudHh0Cm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYxNWJhZTAKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRU
ZXN0cy9zdmcvY3VzdG9tL3BvaW50ZXItZXZlbnRzLXdpdGgtbGluZWNhcHMtYW5kLW1pdGVybGlt
aXRzLWV4cGVjdGVkLnR4dApAQCAtMCwwICsxIEBACitQQVNTRUQ6IGZhbGxiYWNrUmVjdCBoYWQg
cG9pbnRlcgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvc3ZnL2N1c3RvbS9wb2ludGVyLWV2ZW50
cy13aXRoLWxpbmVjYXBzLWFuZC1taXRlcmxpbWl0cy54aHRtbCBiL0xheW91dFRlc3RzL3N2Zy9j
dXN0b20vcG9pbnRlci1ldmVudHMtd2l0aC1saW5lY2Fwcy1hbmQtbWl0ZXJsaW1pdHMueGh0bWwK
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTIyNmI3MAotLS0gL2Rldi9udWxs
CisrKyBiL0xheW91dFRlc3RzL3N2Zy9jdXN0b20vcG9pbnRlci1ldmVudHMtd2l0aC1saW5lY2Fw
cy1hbmQtbWl0ZXJsaW1pdHMueGh0bWwKQEAgLTAsMCArMSw2OCBAQAorPGh0bWwgeG1sbnM9J2h0
dHA6Ly93d3cudzMub3JnLzE5OTkveGh0bWwnPgorPGJvZHkgc3R5bGU9Im1hcmdpbjogMHB4OyBw
YWRkaW5nOiAwcHgiPgorCis8c3ZnIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIg
c3R5bGU9InBvc2l0aW9uOmFic29sdXRlOyI+Cis8ZGVmcz4KKworPHN0eWxlIHR5cGU9InRleHQv
Y3NzIj48IVtDREFUQVsKK3JlY3Qjc3Ryb2tlZFJlY3QgeworICAgIGZpbGw6IG5vbmU7CisgICAg
c3Ryb2tlOiBibHVlOworICAgIHN0cm9rZS13aWR0aDogMjBweDsKKyAgICBzdHJva2UtbGluZWNh
cDogc3F1YXJlOworICAgIHN0cm9rZS1taXRlcmxpbWl0OiAxOworfQorcmVjdCNzdHJva2VkUmVj
dDpob3ZlciB7CisgICAgc3Ryb2tlOiByZWQ7Cit9CitdXT48L3N0eWxlPgorPC9kZWZzPgorCis8
cmVjdCBpZD0iZmFsbGJhY2siIHg9IjAiIHk9IjAiIHdpZHRoPSIyMTAiIGhlaWdodD0iMjEwIiBm
aWxsPSJncmVlbiIgb25jbGljaz0icGFzc2VkKCkiLz4KKzxyZWN0IGlkPSJzdHJva2VkUmVjdCIg
eD0iMTAiIHk9IjEwIiB3aWR0aD0iMTkwIiBoZWlnaHQ9IjE5MCIgcG9pbnRlci1ldmVudHM9InZp
c2libGVTdHJva2UiIG9uY2xpY2s9ImZhaWxlZCgpIi8+Cis8dGV4dCBpZD0idGV4dCIgeD0iMCIg
eT0iMjMwIj48L3RleHQ+CisKKzxzY3JpcHQgdHlwZT0idGV4dC9lY21hc2NyaXB0Ij4KKyAgICA8
IVtDREFUQVsKKwordmFyIGZhbGxiYWNrID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImZhbGxi
YWNrIik7Cit2YXIgc3Ryb2tlZFJlY3QgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgic3Ryb2tl
ZFJlY3QiKTsKK3ZhciB0ZXh0ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoInRleHQiKTsKKwor
ZmFsbGJhY2suYWRkRXZlbnRMaXN0ZW5lcigibW91c2Vkb3duIiwgcGFzc2VkLCBmYWxzZSk7Citz
dHJva2VkUmVjdC5hZGRFdmVudExpc3RlbmVyKCJtb3VzZWRvd24iLCBmYWlsZWQsIGZhbHNlKTsK
KworZnVuY3Rpb24gc3RvcCgpIHsKKyAgICBmYWxsYmFjay5yZW1vdmVFdmVudExpc3RlbmVyKCJt
b3VzZWRvd24iLCBmYWlsZWQsIGZhbHNlKTsKKyAgICBzdHJva2VkUmVjdC5yZW1vdmVFdmVudExp
c3RlbmVyKCJtb3VzZWRvd24iLCBwYXNzZWQsIGZhbHNlKTsKKworaWYgKHdpbmRvdy5sYXlvdXRU
ZXN0Q29udHJvbGxlcikKKyAgICBsYXlvdXRUZXN0Q29udHJvbGxlci5ub3RpZnlEb25lKCk7Cit9
CisKK2Z1bmN0aW9uIGZhaWxlZCgpIHsKKyAgICB0ZXh0LnRleHRDb250ZW50ID0gJ0ZBSUxFRDog
c3Ryb2tlUmVjdCBoYWQgcG9pbnRlcic7CisgICAgc3RvcCgpOworfQorCitmdW5jdGlvbiBwYXNz
ZWQoKSB7CisgICAgdGV4dC50ZXh0Q29udGVudCA9ICdQQVNTRUQ6IGZhbGxiYWNrUmVjdCBoYWQg
cG9pbnRlcic7CisgICAgc3RvcCgpOworfQorCitpZiAod2luZG93LmxheW91dFRlc3RDb250cm9s
bGVyKSB7CisgICAgbGF5b3V0VGVzdENvbnRyb2xsZXIud2FpdFVudGlsRG9uZSgpOworICAgIGxh
eW91dFRlc3RDb250cm9sbGVyLmR1bXBBc1RleHQoKTsKK30KKworaWYgKHdpbmRvdy5ldmVudFNl
bmRlcikgeworICAgIGV2ZW50U2VuZGVyLm1vdXNlTW92ZVRvKDEsIDEpOworICAgIGV2ZW50U2Vu
ZGVyLm1vdXNlRG93bigpOworfQorCitdXT4KKzwvc2NyaXB0PgorPC9zdmc+CisKKzwvYm9keT4K
KzwvaHRtbD4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NNYWtlTGlzdHMudHh0IGIvU291
cmNlL1dlYkNvcmUvQ01ha2VMaXN0cy50eHQKaW5kZXggZTg2MTYyYi4uZDNjYzBkOSAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvQ01ha2VMaXN0cy50eHQKKysrIGIvU291cmNlL1dlYkNvcmUv
Q01ha2VMaXN0cy50eHQKQEAgLTE2MTUsNiArMTYxNSw3IEBAIElGIChFTkFCTEVfU1ZHKQogICAg
ICAgICByZW5kZXJpbmcvc3ZnL1JlbmRlclNWR0lubGluZVRleHQuY3BwCiAgICAgICAgIHJlbmRl
cmluZy9zdmcvUmVuZGVyU1ZHTW9kZWxPYmplY3QuY3BwCiAgICAgICAgIHJlbmRlcmluZy9zdmcv
UmVuZGVyU1ZHUGF0aC5jcHAKKyAgICAgICAgcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZWN0LmNw
cAogICAgICAgICByZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291cmNlLmNwcAogICAgICAgICBy
ZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291cmNlQ2xpcHBlci5jcHAKICAgICAgICAgcmVuZGVy
aW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJjZUNvbnRhaW5lci5jcHAKQEAgLTE2MjksNiArMTYzMCw3
IEBAIElGIChFTkFCTEVfU1ZHKQogICAgICAgICByZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291
cmNlU29saWRDb2xvci5jcHAKICAgICAgICAgcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSb290LmNw
cAogICAgICAgICByZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1NoYWRvd1RyZWVSb290Q29udGFpbmVy
LmNwcAorICAgICAgICByZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1NoYXBlLmNwcAogICAgICAgICBy
ZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1RTcGFuLmNwcAogICAgICAgICByZW5kZXJpbmcvc3ZnL1Jl
bmRlclNWR1RleHQuY3BwCiAgICAgICAgIHJlbmRlcmluZy9zdmcvUmVuZGVyU1ZHVGV4dFBhdGgu
Y3BwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29y
ZS9DaGFuZ2VMb2cKaW5kZXggMTExYjg4NC4uZmRmMzAwYSAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsx
LDE2MSBAQAorMjAxMS0xMS0xOCAgUmVuYXRhIEhvZG92YW4gIDxyZW5pQHdlYmtpdC5vcmc+CisK
KyAgICAgICAgQWRkIG5ldyByZW5kZXJlciBmb3IgU1ZHUmVjdEVsZW1lbnQuCisgICAgICAgIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD02NTc2OQorCisgICAgICAgIFJl
dmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFRoaXMgcGF0Y2ggaW50cm9kdWNl
cyBhIG5ldyBjb21tb24gYmFzZSBjbGFzcyBjYWxsZWQgUmVuZGVyU1ZHU2hhcGUgd2hpY2gKKyAg
ICAgICAgcmVwbGFjZXMgdGhlIFJlbmRlclNWR1BhdGguIFRoaXMgbmV3IGJhc2UgY2xhc3MgaGFz
IHRoZSBzYW1lIHB1cnBvc2UKKyAgICAgICAgYXMgdGhlIHJlcGxhY2VkIGNsYXNzIGFuZCBoYXMg
c3BlY2lhbGl6ZWQgZGVzY2VuZGFudHMgZm9yIGNvbW1vbgorICAgICAgICBzaGFwZXMgKGxpa2Ug
UmVjdGFuZ2xlcyBhbmQgQ2lyY2xlcyksIHdoaWNoIGFsbG93cyBmYXN0ZXIgcGFpbnRpbmcKKyAg
ICAgICAgb2YgdGhlc2Ugc2hhcGVzIHdoZW4gY2VydGFpbiBjb25kaXRpb25zIGFyZSBmdWxmaWxs
ZWQuIE9uIHNvbWUKKyAgICAgICAgYmVuY2htYXJrIHByb2dyYW1zIHdlIGhhdmUgc2VlbiA1JSBz
cGVlZHVwLgorCisgICAgICAgIFRoZSBiaWdnZXN0IG1vdGl2YXRpb24gb2YgdGhpcyByZWZhY3Rv
ciBpcyB0YWtpbmcgYWR2YW50YWdlCisgICAgICAgIG9mIGZhc3RlciBwcmltaXRpdmUgZHJhd2lu
ZyBpbiB0aGUgbW9zdCBjb21tb24gYW5kIGZyZXF1ZW50CisgICAgICAgIGNhc2VzLiBIb3dldmVy
IGluIHNvbWUgcmFyZSBjYXNlcywgbGlrZSBwYWludGluZyByb3VuZGVkCisgICAgICAgIHJlY3Rz
LCB3ZSBuZWVkIHRvIGZhbGxiYWNrIHRvIHRoZSBvcmlnaW5hbCBjb2RlIHBhdGgsIHdoaWNoCisg
ICAgICAgIGlzIGZ1bGx5IGtlcHQgaW4gdGhlIFJlbmRlclNWR1NoYXBlIGJhc2UgY2xhc3MuIFNv
bWUgb3RoZXIKKyAgICAgICAgY2FzZXMsIGxpa2UgZGFzaGVkIHN0cm9rZXMsIGNhbiBiZSBwYWlu
dGVkIGJ1dCBtb3VzZSBwb2ludGVyCisgICAgICAgIGV2ZW50cyBjYW5ub3QgYmUgaGFuZGxlZCBi
eSB0aGUgZGVzY2VuZGFudCBjbGFzc2VzLiBBIGRpZmZlcmVudAorICAgICAgICBmYWxsYmFjayBt
ZWNoYW5pc20gaXMgdXNlZCBpbiBzdWNoIGNhc2VzIHdoaWNoIHJlZGlyZWN0cworICAgICAgICBv
bmx5IHRoZSBwb2ludGVyIGV2ZW50IGhhbmRsaW5nIHRvIHRoZSBiYXNlIGNsYXNzLgorCisgICAg
ICAgIFRlc3RzOiBzdmcvY3VzdG9tL3BvaW50ZXItZXZlbnRzLW9uLXJvdW5kZWQtcmVjdC54aHRt
bAorICAgICAgICAgICAgICAgc3ZnL2N1c3RvbS9wb2ludGVyLWV2ZW50cy13aXRoLWxpbmVjYXBz
LWFuZC1taXRlcmxpbWl0cy54aHRtbAorCisgICAgICAgICogQ01ha2VMaXN0cy50eHQ6CisgICAg
ICAgICogR05VbWFrZWZpbGUubGlzdC5hbToKKyAgICAgICAgKiBXZWJDb3JlLmd5cGk6CisgICAg
ICAgICogV2ViQ29yZS5wcm86CisgICAgICAgICogV2ViQ29yZS52Y3Byb2ovV2ViQ29yZS52Y3By
b2o6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvRmxvYXRSZWN0LmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OkZsb2F0UmVjdDo6Y29udGFpbnMpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBo
aWNzL0Zsb2F0UmVjdC5oOgorICAgICAgICAoV2ViQ29yZTo6RmxvYXRSZWN0Ojpjb250YWlucyk6
CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlck9iamVjdC5oOgorICAgICAgICAoV2ViQ29yZTo6
UmVuZGVyT2JqZWN0Ojppc1NWR1JlY3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyT2JqZWN0
Ojppc1NWR1NoYXBlKToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyVHJlZUFzVGV4dC5jcHA6
CisgICAgICAgIChXZWJDb3JlOjp3cml0ZSk6CisgICAgICAgICogcmVuZGVyaW5nL3N2Zy9SZW5k
ZXJTVkdBbGxJbk9uZS5jcHA6CisgICAgICAgICogcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdNb2Rl
bE9iamVjdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjppc0dyYXBoaWNzRWxlbWVudCk6CisgICAg
ICAgICogcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdQYXRoLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OlJlbmRlclNWR1BhdGg6OlJlbmRlclNWR1BhdGgpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVy
U1ZHUGF0aDo6aW5mbGF0ZVdpdGhNYXJrZXJCb3VuZHMpOiBVbml0ZSB0aGUgbWFya2VyQm91bmRz
IHdpdGggc3Ryb2tlQm91bmRpbmdCb3guCisgICAgICAgICogcmVuZGVyaW5nL3N2Zy9SZW5kZXJT
VkdQYXRoLmg6CisgICAgICAgICogcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZWN0LmNwcDogQWRk
ZWQuCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJTVkdSZWN0OjpSZW5kZXJTVkdSZWN0KToKKyAg
ICAgICAgKFdlYkNvcmU6OlJlbmRlclNWR1JlY3Q6On5SZW5kZXJTVkdSZWN0KToKKyAgICAgICAg
KFdlYkNvcmU6OlJlbmRlclNWR1JlY3Q6OmNyZWF0ZVNoYXBlKToKKyAgICAgICAgKFdlYkNvcmU6
OlJlbmRlclNWR1JlY3Q6Om9iamVjdEJvdW5kaW5nQm94KToKKyAgICAgICAgKFdlYkNvcmU6OlJl
bmRlclNWR1JlY3Q6OnN0cm9rZUJvdW5kaW5nQm94KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRl
clNWR1JlY3Q6OmZpbGxTaGFwZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJTVkdSZWN0Ojpz
dHJva2VTaGFwZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJTVkdSZWN0OjpzaGFwZURlcGVu
ZGVudFN0cm9rZUNvbnRhaW5zKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclNWR1JlY3Q6OnNo
YXBlRGVwZW5kZW50RmlsbENvbnRhaW5zKToKKyAgICAgICAgKiByZW5kZXJpbmcvc3ZnL1JlbmRl
clNWR1JlY3QuaDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJTVkdSZWN0Ojppc1NW
R1JlY3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU1ZHUmVjdDo6cmVuZGVyTmFtZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpSZW5kZXJTVkdSZWN0Ojppc0VtcHR5KToKKyAgICAgICAgKiByZW5k
ZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291cmNlLmg6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJT
VkdSZXNvdXJjZTo6cG9zdEFwcGx5UmVzb3VyY2UpOiBBIG5ldyBzaGFwZSBhcmd1bWVudCB3YXMg
YWRkZWQgdG8gYWxsb3cgc2hhcGUgc3BlY2lmaWMgZmFzdGVyIHBhaW50aW5nLgorICAgICAgICAq
IHJlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VDbGlwcGVyLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OlJlbmRlclNWR1Jlc291cmNlQ2xpcHBlcjo6ZHJhd0NvbnRlbnRJbnRvTWFza0ltYWdl
KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclNWR1Jlc291cmNlQ2xpcHBlcjo6Y2FsY3VsYXRl
Q2xpcENvbnRlbnRSZXBhaW50UmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJTVkdSZXNv
dXJjZUNsaXBwZXI6OmhpdFRlc3RDbGlwQ29udGVudCk6CisgICAgICAgICogcmVuZGVyaW5nL3N2
Zy9SZW5kZXJTVkdSZXNvdXJjZUNvbnRhaW5lci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5k
ZXJTVkdSZXNvdXJjZUNvbnRhaW5lcjo6dHJhbnNmb3JtT25Ob25TY2FsaW5nU3Ryb2tlKToKKyAg
ICAgICAgKiByZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291cmNlRmlsdGVyLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OlJlbmRlclNWR1Jlc291cmNlRmlsdGVyOjpwb3N0QXBwbHlSZXNvdXJjZSk6
CisgICAgICAgICogcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJjZUZpbHRlci5oOgorICAg
ICAgICAqIHJlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VHcmFkaWVudC5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpSZW5kZXJTVkdSZXNvdXJjZUdyYWRpZW50OjphcHBseVJlc291cmNlKToK
KyAgICAgICAgKiByZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291cmNlR3JhZGllbnQuaDoKKyAg
ICAgICAgKiByZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291cmNlUGF0dGVybi5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpSZW5kZXJTVkdSZXNvdXJjZVBhdHRlcm46OnBvc3RBcHBseVJlc291cmNl
KToKKyAgICAgICAgKiByZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291cmNlUGF0dGVybi5oOgor
ICAgICAgICAqIHJlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VTb2xpZENvbG9yLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclNWR1Jlc291cmNlU29saWRDb2xvcjo6cG9zdEFwcGx5
UmVzb3VyY2UpOgorICAgICAgICAqIHJlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VTb2xp
ZENvbG9yLmg6CisgICAgICAgICogcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdTaGFwZS5jcHA6IENv
cGllZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUGF0aC5jcHAu
CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJTVkdTaGFwZTo6UmVuZGVyU1ZHU2hhcGUpOgorICAg
ICAgICAoV2ViQ29yZTo6UmVuZGVyU1ZHU2hhcGU6On5SZW5kZXJTVkdTaGFwZSk6CisgICAgICAg
IChXZWJDb3JlOjpSZW5kZXJTVkdTaGFwZTo6Y3JlYXRlU2hhcGUpOgorICAgICAgICAoV2ViQ29y
ZTo6UmVuZGVyU1ZHU2hhcGU6OmlzRW1wdHkpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU1ZH
U2hhcGU6OmZpbGxTaGFwZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJTVkdTaGFwZTo6b2Jq
ZWN0Qm91bmRpbmdCb3gpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU1ZHU2hhcGU6OnN0cm9r
ZUJvdW5kaW5nQm94KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclNWR1NoYXBlOjpzdHJva2VT
aGFwZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJTVkdTaGFwZTo6c2hhcGVEZXBlbmRlbnRT
dHJva2VDb250YWlucyk6CisgICAgICAgIFRoZSBwdXJwb3NlIG9mIHRoaXMgdmlydHVhbCBmdW5j
dGlvbiBhbGxvd3MgZGVjZW5kYW50cyB0byB1c2UgdGhlaXIgb3duIGZhc3QgY2hlY2tzLgorICAg
ICAgICAoV2ViQ29yZTo6UmVuZGVyU1ZHU2hhcGU6OnNoYXBlRGVwZW5kZW50RmlsbENvbnRhaW5z
KToKKyAgICAgICAgVGhlIHB1cnBvc2Ugb2YgdGhpcyB2aXJ0dWFsIGZ1bmN0aW9uIGFsbG93cyBk
ZWNlbmRhbnRzIHRvIHVzZSB0aGVpciBvd24gZmFzdCBjaGVja3MuCisgICAgICAgIChXZWJDb3Jl
OjpSZW5kZXJTVkdTaGFwZTo6ZmlsbENvbnRhaW5zKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRl
clNWR1NoYXBlOjpzdHJva2VDb250YWlucyk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJTVkdT
aGFwZTo6bGF5b3V0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclNWR1NoYXBlOjpzaG91bGRT
dHJva2VaZXJvTGVuZ3RoU3VicGF0aCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJTVkdTaGFw
ZTo6emVyb0xlbmd0aFN1YnBhdGhSZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclNWR1No
YXBlOjpzZXR1cFNxdWFyZUNhcFBhdGgpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU1ZHU2hh
cGU6OnNldHVwTm9uU2NhbGluZ1N0cm9rZVBhdGgpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVy
U1ZHU2hhcGU6OmZpbGxBbmRTdHJva2VQYXRoKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclNW
R1NoYXBlOjpwYWludCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJTVkdTaGFwZTo6YWRkRm9j
dXNSaW5nUmVjdHMpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU1ZHU2hhcGU6Om5vZGVBdEZs
b2F0UG9pbnQpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU1ZHU2hhcGU6OmNhbGN1bGF0ZU1h
cmtlckJvdW5kc0lmTmVlZGVkKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclNWR1NoYXBlOjp1
cGRhdGVDYWNoZWRCb3VuZGFyaWVzKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclNWR1NoYXBl
OjpzdHJva2VXaWR0aCk6CisgICAgICAgICogcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdTaGFwZS5o
OiBDb3BpZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1BhdGgu
aC4KKyAgICAgICAgKFdlYkNvcmU6OkJvdW5kaW5nUmVjdFN0cm9rZVN0eWxlQXBwbGllcjo6Qm91
bmRpbmdSZWN0U3Ryb2tlU3R5bGVBcHBsaWVyKToKKyAgICAgICAgKFdlYkNvcmU6OkJvdW5kaW5n
UmVjdFN0cm9rZVN0eWxlQXBwbGllcjo6c3Ryb2tlU3R5bGUpOgorICAgICAgICAoV2ViQ29yZTo6
UmVuZGVyU1ZHU2hhcGU6OnNldE5lZWRzU2hhcGVVcGRhdGUpOgorICAgICAgICAoV2ViQ29yZTo6
UmVuZGVyU1ZHU2hhcGU6OnNldE5lZWRzQm91bmRhcmllc1VwZGF0ZSk6CisgICAgICAgIChXZWJD
b3JlOjpSZW5kZXJTVkdTaGFwZTo6c2V0TmVlZHNUcmFuc2Zvcm1VcGRhdGUpOgorICAgICAgICAo
V2ViQ29yZTo6UmVuZGVyU1ZHU2hhcGU6OmlzUGFpbnRpbmdGYWxsYmFjayk6CisgICAgICAgIChX
ZWJDb3JlOjpSZW5kZXJTVkdTaGFwZTo6cGF0aCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJT
VkdTaGFwZTo6c2V0SXNQYWludGluZ0ZhbGxiYWNrKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRl
clNWR1NoYXBlOjpzZXRTdHJva2VBbmRNYXJrZXJCb3VuZGluZ0JveCk6CisgICAgICAgIChXZWJD
b3JlOjpSZW5kZXJTVkdTaGFwZTo6aGFzUGF0aCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJT
VkdTaGFwZTo6cmVwYWludFJlY3RJbkxvY2FsQ29vcmRpbmF0ZXMpOgorICAgICAgICAoV2ViQ29y
ZTo6UmVuZGVyU1ZHU2hhcGU6OmxvY2FsVG9QYXJlbnRUcmFuc2Zvcm0pOgorICAgICAgICAoV2Vi
Q29yZTo6UmVuZGVyU1ZHU2hhcGU6OmxvY2FsVHJhbnNmb3JtKToKKyAgICAgICAgKFdlYkNvcmU6
OlJlbmRlclNWR1NoYXBlOjppc1NWR1NoYXBlKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclNW
R1NoYXBlOjpyZW5kZXJOYW1lKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclNWR1NoYXBlOjpp
c1JvdW5kZWRSZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclNWR1NoYXBlOjppbmZsYXRl
V2l0aE1hcmtlckJvdW5kcyk6CisgICAgICAgIChXZWJDb3JlOjp0b1JlbmRlclNWR1NoYXBlKToK
KyAgICAgICAgKiByZW5kZXJpbmcvc3ZnL1NWR0lubGluZVRleHRCb3guY3BwOgorICAgICAgICAo
V2ViQ29yZTo6U1ZHSW5saW5lVGV4dEJveDo6cmVsZWFzZVBhaW50aW5nUmVzb3VyY2UpOgorICAg
ICAgICAqIHJlbmRlcmluZy9zdmcvU1ZHUmVuZGVyU3VwcG9ydC5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpTVkdSZW5kZXJTdXBwb3J0OjpmaW5pc2hSZW5kZXJTVkdDb250ZW50KToKKyAgICAgICAg
KFdlYkNvcmU6OlNWR1JlbmRlclN1cHBvcnQ6OmxheW91dENoaWxkcmVuKToKKyAgICAgICAgKiBy
ZW5kZXJpbmcvc3ZnL1NWR1JlbmRlclRyZWVBc1RleHQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
d3JpdGVTdHlsZSk6CisgICAgICAgIChXZWJDb3JlOjpvcGVyYXRvcjw8KToKKyAgICAgICAgKFdl
YkNvcmU6OndyaXRlKToKKyAgICAgICAgKiByZW5kZXJpbmcvc3ZnL1NWR1JlbmRlclRyZWVBc1Rl
eHQuaDoKKyAgICAgICAgKiByZW5kZXJpbmcvc3ZnL1NWR1RleHRSdW5SZW5kZXJpbmdDb250ZXh0
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR1RleHRSdW5SZW5kZXJpbmdDb250ZXh0OjpkcmF3
U1ZHR2x5cGhzKToKKyAgICAgICAgKiBzdmcvU1ZHQ2lyY2xlRWxlbWVudC5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpTVkdDaXJjbGVFbGVtZW50OjpzdmdBdHRyaWJ1dGVDaGFuZ2VkKToKKyAgICAg
ICAgKiBzdmcvU1ZHRWxsaXBzZUVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U1ZHRWxs
aXBzZUVsZW1lbnQ6OnN2Z0F0dHJpYnV0ZUNoYW5nZWQpOgorICAgICAgICAqIHN2Zy9TVkdMaW5l
RWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTVkdMaW5lRWxlbWVudDo6c3ZnQXR0cmli
dXRlQ2hhbmdlZCk6CisgICAgICAgICogc3ZnL1NWR1BhdGhFbGVtZW50LmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OlNWR1BhdGhFbGVtZW50OjpzdmdBdHRyaWJ1dGVDaGFuZ2VkKToKKyAgICAgICAg
KFdlYkNvcmU6OlNWR1BhdGhFbGVtZW50OjpwYXRoU2VnTGlzdENoYW5nZWQpOgorICAgICAgICAo
V2ViQ29yZTo6U1ZHUGF0aEVsZW1lbnQ6OmNyZWF0ZVJlbmRlcmVyKToKKyAgICAgICAgKiBzdmcv
U1ZHUGF0aEVsZW1lbnQuaDoKKyAgICAgICAgKiBzdmcvU1ZHUG9seUVsZW1lbnQuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6U1ZHUG9seUVsZW1lbnQ6OnN2Z0F0dHJpYnV0ZUNoYW5nZWQpOgorICAg
ICAgICAqIHN2Zy9TVkdSZWN0RWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTVkdSZWN0
RWxlbWVudDo6c3ZnQXR0cmlidXRlQ2hhbmdlZCk6CisgICAgICAgIChXZWJDb3JlOjpTVkdSZWN0
RWxlbWVudDo6Y3JlYXRlUmVuZGVyZXIpOgorICAgICAgICAqIHN2Zy9TVkdSZWN0RWxlbWVudC5o
OgorCiAyMDExLTExLTE4ICBJYWluIE1lcnJpY2sgIDxodXNreUBnb29nbGUuY29tPgogCiAgICAg
ICAgIFtjaHJvbWl1bV0gUGFzcyBzY3JlZW4gcmVmcmVzaCByYXRlIGludG8gY29tcG9zaXRvci4K
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0dOVW1ha2VmaWxlLmxpc3QuYW0gYi9Tb3VyY2Uv
V2ViQ29yZS9HTlVtYWtlZmlsZS5saXN0LmFtCmluZGV4IGQxODk4NTcuLmIyZDhkYzEgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL0dOVW1ha2VmaWxlLmxpc3QuYW0KKysrIGIvU291cmNlL1dl
YkNvcmUvR05VbWFrZWZpbGUubGlzdC5hbQpAQCAtMzMyMiw2ICszMzIyLDggQEAgd2ViY29yZV9z
b3VyY2VzICs9IFwKIAlTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR01vZGVs
T2JqZWN0LmggXAogCVNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUGF0aC5j
cHAgXAogCVNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUGF0aC5oIFwKKwlT
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1JlY3QuY3BwIFwKKwlTb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1JlY3QuaCBcCiAJU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJjZUNsaXBwZXIuY3BwIFwKIAlTb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291cmNlQ2xpcHBlci5oIFwKIAlTb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291cmNlQ29udGFpbmVyLmNwcCBcCkBA
IC0zMzUwLDYgKzMzNTIsOCBAQCB3ZWJjb3JlX3NvdXJjZXMgKz0gXAogCVNvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUm9vdC5oIFwKIAlTb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvc3ZnL1JlbmRlclNWR1NoYWRvd1RyZWVSb290Q29udGFpbmVyLmNwcCBcCiAJU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdTaGFkb3dUcmVlUm9vdENvbnRhaW5lci5oIFwK
KwlTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1NoYXBlLmNwcCBcCisJU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdTaGFwZS5oIFwKIAlTb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1RTcGFuLmNwcCBcCiAJU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdUU3Bhbi5oIFwKIAlTb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvc3ZnL1JlbmRlclNWR1RleHQuY3BwIFwKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1Rh
cmdldC5wcmkgYi9Tb3VyY2UvV2ViQ29yZS9UYXJnZXQucHJpCmluZGV4IDQwNzE2MWIuLmI2Yjc1
MTUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1RhcmdldC5wcmkKKysrIGIvU291cmNlL1dl
YkNvcmUvVGFyZ2V0LnByaQpAQCAtMjQwMCw2ICsyNDAwLDcgQEAgSEVBREVSUyArPSBcCiAgICAg
cmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdJbmxpbmVUZXh0LmggXAogICAgIHJlbmRlcmluZy9zdmcv
UmVuZGVyU1ZHTW9kZWxPYmplY3QuaCBcCiAgICAgcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdQYXRo
LmggXAorICAgIHJlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVjdC5oIFwKICAgICByZW5kZXJpbmcv
c3ZnL1JlbmRlclNWR1Jlc291cmNlLmggXAogICAgIHJlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVz
b3VyY2VDbGlwcGVyLmggXAogICAgIHJlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VDb250
YWluZXIuaCBcCkBAIC0yNDE0LDYgKzI0MTUsNyBAQCBIRUFERVJTICs9IFwKICAgICByZW5kZXJp
bmcvc3ZnL1JlbmRlclNWR1Jlc291cmNlU29saWRDb2xvci5oIFwKICAgICByZW5kZXJpbmcvc3Zn
L1JlbmRlclNWR1Jvb3QuaCBcCiAgICAgcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdTaGFkb3dUcmVl
Um9vdENvbnRhaW5lci5oIFwKKyAgICByZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1NoYXBlLmggXAog
ICAgIHJlbmRlcmluZy9zdmcvUmVuZGVyU1ZHVFNwYW4uaCBcCiAgICAgcmVuZGVyaW5nL3N2Zy9S
ZW5kZXJTVkdUZXh0LmggXAogICAgIHJlbmRlcmluZy9zdmcvUmVuZGVyU1ZHVGV4dFBhdGguaCBc
CkBAIC0zMzI0LDYgKzMzMjYsOCBAQCBjb250YWlucyhERUZJTkVTLCBFTkFCTEVfU1ZHPTEpIHsK
ICAgICAgICAgcmVuZGVyaW5nL3N0eWxlL1NWR1JlbmRlclN0eWxlRGVmcy5jcHAgXAogICAgICAg
ICByZW5kZXJpbmcvUG9pbnRlckV2ZW50c0hpdFJ1bGVzLmNwcCBcCiAgICAgICAgIHJlbmRlcmlu
Zy9zdmcvUmVuZGVyU1ZHUGF0aC5jcHAgXAorICAgICAgICByZW5kZXJpbmcvc3ZnL1JlbmRlclNW
R1JlY3QuY3BwIFwKKyAgICAgICAgcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdTaGFwZS5jcHAgXAog
ICAgICAgICBzdmcvYW5pbWF0aW9uL1NNSUxUaW1lLmNwcCBcCiAgICAgICAgIHN2Zy9hbmltYXRp
b24vU01JTFRpbWVDb250YWluZXIuY3BwIFwKICAgICAgICAgc3ZnL2FuaW1hdGlvbi9TVkdTTUlM
RWxlbWVudC5jcHAgXApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBpIGIv
U291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBpCmluZGV4IDg4ZDQ1NmMuLjVjM2IyZTEgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwaQorKysgYi9Tb3VyY2UvV2ViQ29yZS9X
ZWJDb3JlLmd5cGkKQEAgLTU4MjgsNiArNTgyOCw4IEBACiAgICAgICAgICAgICAncmVuZGVyaW5n
L3N2Zy9SZW5kZXJTVkdNb2RlbE9iamVjdC5oJywKICAgICAgICAgICAgICdyZW5kZXJpbmcvc3Zn
L1JlbmRlclNWR1BhdGguY3BwJywKICAgICAgICAgICAgICdyZW5kZXJpbmcvc3ZnL1JlbmRlclNW
R1BhdGguaCcsCisgICAgICAgICAgICAncmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZWN0LmNwcCcs
CisgICAgICAgICAgICAncmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZWN0LmgnLAogICAgICAgICAg
ICAgJ3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2UuY3BwJywKICAgICAgICAgICAgICdy
ZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291cmNlLmgnLAogICAgICAgICAgICAgJ3JlbmRlcmlu
Zy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VDbGlwcGVyLmNwcCcsCkBAIC01ODU2LDYgKzU4NTgsOCBA
QAogICAgICAgICAgICAgJ3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUm9vdC5oJywKICAgICAgICAg
ICAgICdyZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1NoYWRvd1RyZWVSb290Q29udGFpbmVyLmNwcCcs
CiAgICAgICAgICAgICAncmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdTaGFkb3dUcmVlUm9vdENvbnRh
aW5lci5oJywKKyAgICAgICAgICAgICdyZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1NoYXBlLmNwcCcs
CisgICAgICAgICAgICAncmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdTaGFwZS5oJywKICAgICAgICAg
ICAgICdyZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1RTcGFuLmNwcCcsCiAgICAgICAgICAgICAncmVu
ZGVyaW5nL3N2Zy9SZW5kZXJTVkdUU3Bhbi5oJywKICAgICAgICAgICAgICdyZW5kZXJpbmcvc3Zn
L1JlbmRlclNWR1RleHQuY3BwJywKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUu
dmNwcm9qL1dlYkNvcmUudmNwcm9qIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS52Y3Byb2ovV2Vi
Q29yZS52Y3Byb2oKaW5kZXggYzRjODE4ZS4uNzU5NWY3OSAxMDA3NTUKLS0tIGEvU291cmNlL1dl
YkNvcmUvV2ViQ29yZS52Y3Byb2ovV2ViQ29yZS52Y3Byb2oKKysrIGIvU291cmNlL1dlYkNvcmUv
V2ViQ29yZS52Y3Byb2ovV2ViQ29yZS52Y3Byb2oKQEAgLTQxNDYzLDYgKzQxNDYzLDExOCBAQAog
CQkJCQk+CiAJCQkJPC9GaWxlPgogCQkJCTxGaWxlCisJCQkJCVJlbGF0aXZlUGF0aD0iLi5ccmVu
ZGVyaW5nXHN2Z1xSZW5kZXJTVkdSZWN0LmNwcCIKKwkJCQkJPgorCQkJCQk8RmlsZUNvbmZpZ3Vy
YXRpb24KKwkJCQkJCU5hbWU9IkRlYnVnfFdpbjMyIgorCQkJCQkJRXhjbHVkZWRGcm9tQnVpbGQ9
InRydWUiCisJCQkJCQk+CisJCQkJCQk8VG9vbAorCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRv
b2wiCisJCQkJCQkvPgorCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPgorCQkJCQk8RmlsZUNvbmZp
Z3VyYXRpb24KKwkJCQkJCU5hbWU9IlJlbGVhc2V8V2luMzIiCisJCQkJCQlFeGNsdWRlZEZyb21C
dWlsZD0idHJ1ZSIKKwkJCQkJCT4KKwkJCQkJCTxUb29sCisJCQkJCQkJTmFtZT0iVkNDTENvbXBp
bGVyVG9vbCIKKwkJCQkJCS8+CisJCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+CisJCQkJCTxGaWxl
Q29uZmlndXJhdGlvbgorCQkJCQkJTmFtZT0iRGVidWdfQ2Fpcm9fQ0ZMaXRlfFdpbjMyIgorCQkJ
CQkJRXhjbHVkZWRGcm9tQnVpbGQ9InRydWUiCisJCQkJCQk+CisJCQkJCQk8VG9vbAorCQkJCQkJ
CU5hbWU9IlZDQ0xDb21waWxlclRvb2wiCisJCQkJCQkvPgorCQkJCQk8L0ZpbGVDb25maWd1cmF0
aW9uPgorCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24KKwkJCQkJCU5hbWU9IlJlbGVhc2VfQ2Fpcm9f
Q0ZMaXRlfFdpbjMyIgorCQkJCQkJRXhjbHVkZWRGcm9tQnVpbGQ9InRydWUiCisJCQkJCQk+CisJ
CQkJCQk8VG9vbAorCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiCisJCQkJCQkvPgorCQkJ
CQk8L0ZpbGVDb25maWd1cmF0aW9uPgorCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24KKwkJCQkJCU5h
bWU9IkRlYnVnX0FsbHxXaW4zMiIKKwkJCQkJCUV4Y2x1ZGVkRnJvbUJ1aWxkPSJ0cnVlIgorCQkJ
CQkJPgorCQkJCQkJPFRvb2wKKwkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIgorCQkJCQkJ
Lz4KKwkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4KKwkJCQkJPEZpbGVDb25maWd1cmF0aW9uCisJ
CQkJCQlOYW1lPSJQcm9kdWN0aW9ufFdpbjMyIgorCQkJCQkJRXhjbHVkZWRGcm9tQnVpbGQ9InRy
dWUiCisJCQkJCQk+CisJCQkJCQk8VG9vbAorCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wi
CisJCQkJCQkvPgorCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPgorCQkJCTwvRmlsZT4KKwkJCQk8
RmlsZQorCQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXHJlbmRlcmluZ1xzdmdcUmVuZGVyU1ZHUmVjdC5o
IgorCQkJCQk+CisJCQkJPC9GaWxlPgorCQkJCTxGaWxlCisJCQkJCVJlbGF0aXZlUGF0aD0iLi5c
cmVuZGVyaW5nXHN2Z1xSZW5kZXJTVkdTaGFwZS5jcHAiCisJCQkJCT4KKwkJCQkJPEZpbGVDb25m
aWd1cmF0aW9uCisJCQkJCQlOYW1lPSJEZWJ1Z3xXaW4zMiIKKwkJCQkJCUV4Y2x1ZGVkRnJvbUJ1
aWxkPSJ0cnVlIgorCQkJCQkJPgorCQkJCQkJPFRvb2wKKwkJCQkJCQlOYW1lPSJWQ0NMQ29tcGls
ZXJUb29sIgorCQkJCQkJLz4KKwkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4KKwkJCQkJPEZpbGVD
b25maWd1cmF0aW9uCisJCQkJCQlOYW1lPSJSZWxlYXNlfFdpbjMyIgorCQkJCQkJRXhjbHVkZWRG
cm9tQnVpbGQ9InRydWUiCisJCQkJCQk+CisJCQkJCQk8VG9vbAorCQkJCQkJCU5hbWU9IlZDQ0xD
b21waWxlclRvb2wiCisJCQkJCQkvPgorCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPgorCQkJCQk8
RmlsZUNvbmZpZ3VyYXRpb24KKwkJCQkJCU5hbWU9IkRlYnVnX0NhaXJvX0NGTGl0ZXxXaW4zMiIK
KwkJCQkJCUV4Y2x1ZGVkRnJvbUJ1aWxkPSJ0cnVlIgorCQkJCQkJPgorCQkJCQkJPFRvb2wKKwkJ
CQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIgorCQkJCQkJLz4KKwkJCQkJPC9GaWxlQ29uZmln
dXJhdGlvbj4KKwkJCQkJPEZpbGVDb25maWd1cmF0aW9uCisJCQkJCQlOYW1lPSJSZWxlYXNlX0Nh
aXJvX0NGTGl0ZXxXaW4zMiIKKwkJCQkJCUV4Y2x1ZGVkRnJvbUJ1aWxkPSJ0cnVlIgorCQkJCQkJ
PgorCQkJCQkJPFRvb2wKKwkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIgorCQkJCQkJLz4K
KwkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4KKwkJCQkJPEZpbGVDb25maWd1cmF0aW9uCisJCQkJ
CQlOYW1lPSJEZWJ1Z19BbGx8V2luMzIiCisJCQkJCQlFeGNsdWRlZEZyb21CdWlsZD0idHJ1ZSIK
KwkJCQkJCT4KKwkJCQkJCTxUb29sCisJCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIKKwkJ
CQkJCS8+CisJCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+CisJCQkJCTxGaWxlQ29uZmlndXJhdGlv
bgorCQkJCQkJTmFtZT0iUHJvZHVjdGlvbnxXaW4zMiIKKwkJCQkJCUV4Y2x1ZGVkRnJvbUJ1aWxk
PSJ0cnVlIgorCQkJCQkJPgorCQkJCQkJPFRvb2wKKwkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJU
b29sIgorCQkJCQkJLz4KKwkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4KKwkJCQk8L0ZpbGU+CisJ
CQkJPEZpbGUKKwkJCQkJUmVsYXRpdmVQYXRoPSIuLlxyZW5kZXJpbmdcc3ZnXFJlbmRlclNWR1No
YXBlLmgiCisJCQkJCT4KKwkJCQk8L0ZpbGU+CisJCQkJPEZpbGUKIAkJCQkJUmVsYXRpdmVQYXRo
PSIuLlxyZW5kZXJpbmdcc3ZnXFJlbmRlclNWR1RleHQuY3BwIgogCQkJCQk+CiAJCQkJCTxGaWxl
Q29uZmlndXJhdGlvbgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXBy
b2ovcHJvamVjdC5wYnhwcm9qIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJv
amVjdC5wYnhwcm9qCmluZGV4IGVkYWQ1MWYuLjQ2ZjMzMWQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKQEAgLTEwNTkwLDYgKzEwNTkw
LDEwIEBACiAJCUEwRUUwREYyMTQ0RjgyNTUwMEY4MEIwRCAvKiBXZWJHTERlYnVnUmVuZGVyZXJJ
bmZvLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IFdlYkdMRGVidWdSZW5kZXJl
ckluZm8uaDsgcGF0aCA9IGNhbnZhcy9XZWJHTERlYnVnUmVuZGVyZXJJbmZvLmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCUEwRUUwREYzMTQ0RjgyNTUwMEY4MEIwRCAvKiBXZWJHTERl
YnVnU2hhZGVycy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBXZWJH
TERlYnVnU2hhZGVycy5jcHA7IHBhdGggPSBjYW52YXMvV2ViR0xEZWJ1Z1NoYWRlcnMuY3BwOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlBMEVFMERGNDE0NEY4MjU1MDBGODBCMEQgLyog
V2ViR0xEZWJ1Z1NoYWRlcnMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gV2Vi
R0xEZWJ1Z1NoYWRlcnMuaDsgcGF0aCA9IGNhbnZhcy9XZWJHTERlYnVnU2hhZGVycy5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OworCQlBMTA1MDY1RTE0Njk2ODY5MDBGNjM4MTUgLyogUmVu
ZGVyU1ZHU2hhcGUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gUmVu
ZGVyU1ZHU2hhcGUuY3BwOyBwYXRoID0gcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdTaGFwZS5jcHA7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUExMDUwNjYwMTQ2OTZDMDUwMEY2MzgxNSAv
KiBSZW5kZXJTVkdSZWN0LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9
IFJlbmRlclNWR1JlY3QuY3BwOyBwYXRoID0gcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZWN0LmNw
cDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQTEwNTA2NjIxNDY5NkM0QjAwRjYzODE1
IC8qIFJlbmRlclNWR1NoYXBlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IFJl
bmRlclNWR1NoYXBlLmg7IHBhdGggPSByZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1NoYXBlLmg7IHNv
dXJjZVRyZWUgPSBTT1VSQ0VfUk9PVDsgfTsKKwkJQTEwNTA2NjMxNDY5NkM3MTAwRjYzODE1IC8q
IFJlbmRlclNWR1JlY3QuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gUmVuZGVy
U1ZHUmVjdC5oOyBwYXRoID0gcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZWN0Lmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCUExMjBBQ0EwMTNGOTk4MzcwMEZFNEFDNyAvKiBMYXlvdXRS
ZXBhaW50ZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gTGF5b3V0UmVwYWlu
dGVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUExMjBBQ0ExMTNGOTk4NDYwMEZF
NEFDNyAvKiBMYXlvdXRSZXBhaW50ZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3Bw
OyBwYXRoID0gTGF5b3V0UmVwYWludGVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJQTEzNkEwMEExMTM0REJEMjAwQ0M4RDUwIC8qIFhNTEh0dHBSZXF1ZXN0UHJvZ3Jlc3NFdmVu
dFRocm90dGxlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFhNTEh0
dHBSZXF1ZXN0UHJvZ3Jlc3NFdmVudFRocm90dGxlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKQEAgLTEzODg0LDYgKzEzODg4LDkgQEAKIAkJMDg2N0Q2OTFGRTg0MDI4RkMwMkFBQzA3
IC8qIFdlYktpdCAqLyA9IHsKIAkJCWlzYSA9IFBCWEdyb3VwOwogCQkJY2hpbGRyZW4gPSAoCisJ
CQkJQTEwNTA2NjAxNDY5NkMwNTAwRjYzODE1IC8qIFJlbmRlclNWR1JlY3QuY3BwICovLAorCQkJ
CUExMDUwNjYzMTQ2OTZDNzEwMEY2MzgxNSAvKiBSZW5kZXJTVkdSZWN0LmggKi8sCisJCQkJQTEw
NTA2NUUxNDY5Njg2OTAwRjYzODE1IC8qIFJlbmRlclNWR1NoYXBlLmNwcCAqLywKIAkJCQk2NUM5
N0FGMjA4RUE5MDg4MDBBQ0QyNzMgLyogY29uZmlnLmggKi8sCiAJCQkJRURFQzk4MDIwQUVEN0Ux
NzAwNTkxMzdGIC8qIFdlYkNvcmVQcmVmaXguaCAqLywKIAkJCQk5MzA3MDYxMzA5RTBDQTgyMDBC
MTdGRTQgLyogRGVyaXZlZFNvdXJjZXMubWFrZSAqLywKQEAgLTIxNDkzLDYgKzIxNTAwLDcgQEAK
IAkJCQlGREEzRTk1NzEzNEE0OUVGMDA4RDRCNUEgLyogT2ZmbGluZUF1ZGlvRGVzdGluYXRpb25O
b2RlLmNwcCAqLywKIAkJCQlGREEzRTk1ODEzNEE0OUVGMDA4RDRCNUEgLyogT2ZmbGluZUF1ZGlv
RGVzdGluYXRpb25Ob2RlLmggKi8sCiAJCQkJRkQzMTVGRjExMkIwMjY3NjAwQzFBMzU5IC8qIFJl
YWx0aW1lQW5hbHlzZXIuY3BwICovLAorCQkJCUExMDUwNjYyMTQ2OTZDNEIwMEY2MzgxNSAvKiBS
ZW5kZXJTVkdTaGFwZS5oICovLAogCQkJCUZEMzE1RkYyMTJCMDI2NzYwMEMxQTM1OSAvKiBSZWFs
dGltZUFuYWx5c2VyLmggKi8sCiAJCQkJRkQzMTVGRjMxMkIwMjY3NjAwQzFBMzU5IC8qIFJlYWx0
aW1lQW5hbHlzZXJOb2RlLmNwcCAqLywKIAkJCQlGRDMxNUZGNDEyQjAyNjc2MDBDMUEzNTkgLyog
UmVhbHRpbWVBbmFseXNlck5vZGUuaCAqLywKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL0Zsb2F0UmVjdC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9GbG9hdFJlY3QuY3BwCmluZGV4IGI4NGE4OTIuLjZkNGEyMjAgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0Zsb2F0UmVjdC5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRmxvYXRSZWN0LmNwcApAQCAtNjgsNiArNjgs
MTMgQEAgYm9vbCBGbG9hdFJlY3Q6OmNvbnRhaW5zKGNvbnN0IEZsb2F0UmVjdCYgb3RoZXIpIGNv
bnN0CiAgICAgICAgICYmIHkoKSA8PSBvdGhlci55KCkgJiYgbWF4WSgpID49IG90aGVyLm1heFko
KTsKIH0KIAorYm9vbCBGbG9hdFJlY3Q6OmNvbnRhaW5zKGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50
LCBDb250YWluc01vZGUgY29udGFpbnNNb2RlKSBjb25zdAoreworICAgIGlmIChjb250YWluc01v
ZGUgPT0gSW5zaWRlT3JPblN0cm9rZSkKKyAgICAgICAgcmV0dXJuIGNvbnRhaW5zKHBvaW50Lngo
KSwgcG9pbnQueSgpKTsKKyAgICByZXR1cm4geCgpIDwgcG9pbnQueCgpICYmIG1heFgoKSA+IHBv
aW50LngoKSAmJiB5KCkgPCBwb2ludC55KCkgJiYgbWF4WSgpID4geSgpOworfQorCiB2b2lkIEZs
b2F0UmVjdDo6aW50ZXJzZWN0KGNvbnN0IEZsb2F0UmVjdCYgb3RoZXIpCiB7CiAgICAgZmxvYXQg
bCA9IG1heCh4KCksIG90aGVyLngoKSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9GbG9hdFJlY3QuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL0Zsb2F0UmVjdC5oCmluZGV4IDQyNDE3MTYuLjdkZTM0NmYgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0Zsb2F0UmVjdC5oCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL0Zsb2F0UmVjdC5oCkBAIC03MCw2ICs3MCwxMSBAQCBjbGFz
cyBJbnRQb2ludDsKIAogY2xhc3MgRmxvYXRSZWN0IHsKIHB1YmxpYzoKKyAgICBlbnVtIENvbnRh
aW5zTW9kZSB7CisgICAgICAgIEluc2lkZU9yT25TdHJva2UsCisgICAgICAgIEluc2lkZUJ1dE5v
dE9uU3Ryb2tlCisgICAgfTsKKwogICAgIEZsb2F0UmVjdCgpIHsgfQogICAgIEZsb2F0UmVjdChj
b25zdCBGbG9hdFBvaW50JiBsb2NhdGlvbiwgY29uc3QgRmxvYXRTaXplJiBzaXplKQogICAgICAg
ICA6IG1fbG9jYXRpb24obG9jYXRpb24pLCBtX3NpemUoc2l6ZSkgeyB9CkBAIC0xNDIsNiArMTQ3
LDcgQEAgcHVibGljOgogCiAgICAgYm9vbCBpbnRlcnNlY3RzKGNvbnN0IEZsb2F0UmVjdCYpIGNv
bnN0OwogICAgIGJvb2wgY29udGFpbnMoY29uc3QgRmxvYXRSZWN0JikgY29uc3Q7CisgICAgYm9v
bCBjb250YWlucyhjb25zdCBGbG9hdFBvaW50JiwgQ29udGFpbnNNb2RlID0gSW5zaWRlT3JPblN0
cm9rZSkgY29uc3Q7CiAKICAgICB2b2lkIGludGVyc2VjdChjb25zdCBGbG9hdFJlY3QmKTsKICAg
ICB2b2lkIHVuaXRlKGNvbnN0IEZsb2F0UmVjdCYpOwpAQCAtMTUxLDcgKzE1Nyw2IEBAIHB1Ymxp
YzoKICAgICAvLyBpcyByZWFsbHkgY2hlY2tpbmcgZm9yIGNvbnRhaW5tZW50IG9mIDF4MSByZWN0
LCBidXQgdGhhdCBkb2Vzbid0IG1ha2Ugc2Vuc2Ugd2l0aCBmbG9hdHMuCiAgICAgYm9vbCBjb250
YWlucyhmbG9hdCBweCwgZmxvYXQgcHkpIGNvbnN0CiAgICAgICAgIHsgcmV0dXJuIHB4ID49IHgo
KSAmJiBweCA8PSBtYXhYKCkgJiYgcHkgPj0geSgpICYmIHB5IDw9IG1heFkoKTsgfQotICAgIGJv
b2wgY29udGFpbnMoY29uc3QgRmxvYXRQb2ludCYgcG9pbnQpIGNvbnN0IHsgcmV0dXJuIGNvbnRh
aW5zKHBvaW50LngoKSwgcG9pbnQueSgpKTsgfQogCiAgICAgdm9pZCBpbmZsYXRlWChmbG9hdCBk
eCkgewogICAgICAgICBtX2xvY2F0aW9uLnNldFgobV9sb2NhdGlvbi54KCkgLSBkeCk7CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyT2JqZWN0LmggYi9Tb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyT2JqZWN0LmgKaW5kZXggYjk0MTE2ZS4uZDQwNjAxZCAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck9iamVjdC5oCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJPYmplY3QuaApAQCAtMzg5LDYgKzM4OSw4
IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIGJvb2wgaXNTVkdHcmFkaWVudFN0b3AoKSBjb25zdCB7
IHJldHVybiBmYWxzZTsgfQogICAgIHZpcnR1YWwgYm9vbCBpc1NWR0hpZGRlbkNvbnRhaW5lcigp
IGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CiAgICAgdmlydHVhbCBib29sIGlzU1ZHUGF0aCgpIGNv
bnN0IHsgcmV0dXJuIGZhbHNlOyB9CisgICAgdmlydHVhbCBib29sIGlzU1ZHUmVjdCgpIGNvbnN0
IHsgcmV0dXJuIGZhbHNlOyB9CisgICAgdmlydHVhbCBib29sIGlzU1ZHU2hhcGUoKSBjb25zdCB7
IHJldHVybiBmYWxzZTsgfQogICAgIHZpcnR1YWwgYm9vbCBpc1NWR1RleHQoKSBjb25zdCB7IHJl
dHVybiBmYWxzZTsgfQogICAgIHZpcnR1YWwgYm9vbCBpc1NWR1RleHRQYXRoKCkgY29uc3QgeyBy
ZXR1cm4gZmFsc2U7IH0KICAgICB2aXJ0dWFsIGJvb2wgaXNTVkdJbmxpbmUoKSBjb25zdCB7IHJl
dHVybiBmYWxzZTsgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
clRyZWVBc1RleHQuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRyZWVBc1Rl
eHQuY3BwCmluZGV4IGNiODY0MDIuLjA4ZTg5MDggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJUcmVlQXNUZXh0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVyVHJlZUFzVGV4dC5jcHAKQEAgLTUyNCw4ICs1MjQsOCBAQCBzdGF0aWMgdm9p
ZCB3cml0ZVRleHRSdW4oVGV4dFN0cmVhbSYgdHMsIGNvbnN0IFJlbmRlclRleHQmIG8sIGNvbnN0
IElubGluZVRleHRCbwogdm9pZCB3cml0ZShUZXh0U3RyZWFtJiB0cywgY29uc3QgUmVuZGVyT2Jq
ZWN0JiBvLCBpbnQgaW5kZW50LCBSZW5kZXJBc1RleHRCZWhhdmlvciBiZWhhdmlvcikKIHsKICNp
ZiBFTkFCTEUoU1ZHKQotICAgIGlmIChvLmlzU1ZHUGF0aCgpKSB7Ci0gICAgICAgIHdyaXRlKHRz
LCAqdG9SZW5kZXJTVkdQYXRoKCZvKSwgaW5kZW50KTsKKyAgICBpZiAoby5pc1NWR1NoYXBlKCkp
IHsKKyAgICAgICAgd3JpdGUodHMsICp0b1JlbmRlclNWR1NoYXBlKCZvKSwgaW5kZW50KTsKICAg
ICAgICAgcmV0dXJuOwogICAgIH0KICAgICBpZiAoby5pc1NWR0dyYWRpZW50U3RvcCgpKSB7CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR0FsbEluT25l
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHQWxsSW5PbmUuY3Bw
CmluZGV4IDM0MjQyODguLjhmZDNjNTEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9zdmcvUmVuZGVyU1ZHQWxsSW5PbmUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9zdmcvUmVuZGVyU1ZHQWxsSW5PbmUuY3BwCkBAIC0zNSw2ICszNSw3IEBACiAjaW5jbHVk
ZSAiUmVuZGVyU1ZHSW5saW5lVGV4dC5jcHAiCiAjaW5jbHVkZSAiUmVuZGVyU1ZHTW9kZWxPYmpl
Y3QuY3BwIgogI2luY2x1ZGUgIlJlbmRlclNWR1BhdGguY3BwIgorI2luY2x1ZGUgIlJlbmRlclNW
R1JlY3QuY3BwIgogI2luY2x1ZGUgIlJlbmRlclNWR1Jlc291cmNlLmNwcCIKICNpbmNsdWRlICJS
ZW5kZXJTVkdSZXNvdXJjZUNsaXBwZXIuY3BwIgogI2luY2x1ZGUgIlJlbmRlclNWR1Jlc291cmNl
Q29udGFpbmVyLmNwcCIKQEAgLTQ5LDYgKzUwLDcgQEAKICNpbmNsdWRlICJSZW5kZXJTVkdSZXNv
dXJjZVNvbGlkQ29sb3IuY3BwIgogI2luY2x1ZGUgIlJlbmRlclNWR1Jvb3QuY3BwIgogI2luY2x1
ZGUgIlJlbmRlclNWR1NoYWRvd1RyZWVSb290Q29udGFpbmVyLmNwcCIKKyNpbmNsdWRlICJSZW5k
ZXJTVkdTaGFwZS5jcHAiCiAjaW5jbHVkZSAiUmVuZGVyU1ZHVFNwYW4uY3BwIgogI2luY2x1ZGUg
IlJlbmRlclNWR1RleHQuY3BwIgogI2luY2x1ZGUgIlJlbmRlclNWR1RleHRQYXRoLmNwcCIKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHTW9kZWxPYmpl
Y3QuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdNb2RlbE9iamVj
dC5jcHAKaW5kZXggN2UwOWM3Ni4uYjcwZGVkMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdNb2RlbE9iamVjdC5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdNb2RlbE9iamVjdC5jcHAKQEAgLTE1NSw3ICsxNTUs
NyBAQCBzdGF0aWMgYm9vbCBpbnRlcnNlY3RzQWxsb3dpbmdFbXB0eShjb25zdCBGbG9hdFJlY3Qm
IHIsIGNvbnN0IEZsb2F0UmVjdCYgb3RoZXIpCiAvLyBpbWFnZSwgbGluZSwgcGF0aCwgcG9seWdv
biwgcG9seWxpbmUsIHJlY3QsIHRleHQgYW5kIHVzZS4KIHN0YXRpYyBib29sIGlzR3JhcGhpY3NF
bGVtZW50KFJlbmRlck9iamVjdCogcmVuZGVyZXIpCiB7Ci0gICAgcmV0dXJuIHJlbmRlcmVyLT5p
c1NWR1BhdGgoKSB8fCByZW5kZXJlci0+aXNTVkdUZXh0KCkgfHwgcmVuZGVyZXItPmlzU1ZHSW1h
Z2UoKSB8fCByZW5kZXJlci0+aXNTVkdTaGFkb3dUcmVlUm9vdENvbnRhaW5lcigpOworICAgIHJl
dHVybiByZW5kZXJlci0+aXNTVkdTaGFwZSgpIHx8IHJlbmRlcmVyLT5pc1NWR1RleHQoKSB8fCBy
ZW5kZXJlci0+aXNTVkdJbWFnZSgpIHx8IHJlbmRlcmVyLT5pc1NWR1NoYWRvd1RyZWVSb290Q29u
dGFpbmVyKCk7CiB9CiAKIGJvb2wgUmVuZGVyU1ZHTW9kZWxPYmplY3Q6OmNoZWNrSW50ZXJzZWN0
aW9uKFJlbmRlck9iamVjdCogcmVuZGVyZXIsIGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUGF0aC5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1BhdGguY3BwCm9sZCBtb2RlIDEw
MDY0NApuZXcgbW9kZSAxMDA3NTUKaW5kZXggM2VhYWQ5Ny4uZWRhZDQzOQotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1BhdGguY3BwCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUGF0aC5jcHAKQEAgLTYsNiArNiw4IEBACiAgKiBD
b3B5cmlnaHQgKEMpIDIwMDkgRGlyayBTY2h1bHplIDxrcml0QHdlYmtpdC5vcmc+CiAgKiBDb3B5
cmlnaHQgKEMpIFJlc2VhcmNoIEluIE1vdGlvbiBMaW1pdGVkIDIwMTAuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDkgSmVmZiBTY2hpbGxlciA8Y29kZWRyZWFkQGdt
YWlsLmNvbT4KKyAqIENvcHlyaWdodCAoQykgMjAxMSBSZW5hdGEgSG9kb3ZhbiA8cmVuaUB3ZWJr
aXQub3JnPgorICogQ29weXJpZ2h0IChDKSAyMDExIFVuaXZlcnNpdHkgb2YgU3plZ2VkCiAgKgog
ICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0
IGFuZC9vcgogICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkg
R2VuZXJhbCBQdWJsaWMKQEAgLTI4LDUyICszMCwxMyBAQAogI2lmIEVOQUJMRShTVkcpCiAjaW5j
bHVkZSAiUmVuZGVyU1ZHUGF0aC5oIgogCi0jaW5jbHVkZSAiRmxvYXRQb2ludC5oIgotI2luY2x1
ZGUgIkZsb2F0UXVhZC5oIgotI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgotI2luY2x1ZGUg
IkhpdFRlc3RSZXF1ZXN0LmgiCi0jaW5jbHVkZSAiTGF5b3V0UmVwYWludGVyLmgiCi0jaW5jbHVk
ZSAiUG9pbnRlckV2ZW50c0hpdFJ1bGVzLmgiCi0jaW5jbHVkZSAiUmVuZGVyU1ZHQ29udGFpbmVy
LmgiCi0jaW5jbHVkZSAiUmVuZGVyU1ZHUmVzb3VyY2VNYXJrZXIuaCIKLSNpbmNsdWRlICJSZW5k
ZXJTVkdSZXNvdXJjZVNvbGlkQ29sb3IuaCIKLSNpbmNsdWRlICJTVkdQYXRoRGF0YS5oIgotI2lu
Y2x1ZGUgIlNWR1JlbmRlclN1cHBvcnQuaCIKLSNpbmNsdWRlICJTVkdSZXNvdXJjZXMuaCIKLSNp
bmNsdWRlICJTVkdSZXNvdXJjZXNDYWNoZS5oIgorI2luY2x1ZGUgIlNWR1BhdGhFbGVtZW50Lmgi
CiAjaW5jbHVkZSAiU1ZHU3R5bGVkVHJhbnNmb3JtYWJsZUVsZW1lbnQuaCIKLSNpbmNsdWRlICJT
VkdUcmFuc2Zvcm1MaXN0LmgiCi0jaW5jbHVkZSAiU1ZHVVJJUmVmZXJlbmNlLmgiCi0jaW5jbHVk
ZSAiU3Ryb2tlU3R5bGVBcHBsaWVyLmgiCi0jaW5jbHVkZSA8d3RmL01hdGhFeHRyYXMuaD4KIAog
bmFtZXNwYWNlIFdlYkNvcmUgewogCi1jbGFzcyBCb3VuZGluZ1JlY3RTdHJva2VTdHlsZUFwcGxp
ZXIgOiBwdWJsaWMgU3Ryb2tlU3R5bGVBcHBsaWVyIHsKLXB1YmxpYzoKLSAgICBCb3VuZGluZ1Jl
Y3RTdHJva2VTdHlsZUFwcGxpZXIoY29uc3QgUmVuZGVyT2JqZWN0KiBvYmplY3QsIFJlbmRlclN0
eWxlKiBzdHlsZSkKLSAgICAgICAgOiBtX29iamVjdChvYmplY3QpCi0gICAgICAgICwgbV9zdHls
ZShzdHlsZSkKLSAgICB7Ci0gICAgICAgIEFTU0VSVChzdHlsZSk7Ci0gICAgICAgIEFTU0VSVChv
YmplY3QpOwotICAgIH0KLQotICAgIHZvaWQgc3Ryb2tlU3R5bGUoR3JhcGhpY3NDb250ZXh0KiBn
YykKLSAgICB7Ci0gICAgICAgIFNWR1JlbmRlclN1cHBvcnQ6OmFwcGx5U3Ryb2tlU3R5bGVUb0Nv
bnRleHQoZ2MsIG1fc3R5bGUsIG1fb2JqZWN0KTsKLSAgICB9Ci0KLXByaXZhdGU6Ci0gICAgY29u
c3QgUmVuZGVyT2JqZWN0KiBtX29iamVjdDsKLSAgICBSZW5kZXJTdHlsZSogbV9zdHlsZTsKLX07
Ci0KIFJlbmRlclNWR1BhdGg6OlJlbmRlclNWR1BhdGgoU1ZHU3R5bGVkVHJhbnNmb3JtYWJsZUVs
ZW1lbnQqIG5vZGUpCi0gICAgOiBSZW5kZXJTVkdNb2RlbE9iamVjdChub2RlKQotICAgICwgbV9u
ZWVkc0JvdW5kYXJpZXNVcGRhdGUoZmFsc2UpIC8vIGRlZmF1bHQgaXMgZmFsc2UsIHRoZSBjYWNo
ZWQgcmVjdHMgYXJlIGVtcHR5IGZyb20gdGhlIGJlZ2lubmluZwotICAgICwgbV9uZWVkc1BhdGhV
cGRhdGUodHJ1ZSkgLy8gZGVmYXVsdCBpcyB0cnVlLCBzbyB3ZSBncmFiIGEgUGF0aCBvYmplY3Qg
b25jZSBmcm9tIFNWR1N0eWxlZFRyYW5zZm9ybWFibGVFbGVtZW50Ci0gICAgLCBtX25lZWRzVHJh
bnNmb3JtVXBkYXRlKHRydWUpIC8vIGRlZmF1bHQgaXMgdHJ1ZSwgc28gd2UgZ3JhYiBhIEFmZmlu
ZVRyYW5zZm9ybSBvYmplY3Qgb25jZSBmcm9tIFNWR1N0eWxlZFRyYW5zZm9ybWFibGVFbGVtZW50
CisgICAgOiBSZW5kZXJTVkdTaGFwZShub2RlKQogewogfQogCkBAIC04MSwzMTggKzQ0LDYgQEAg
UmVuZGVyU1ZHUGF0aDo6flJlbmRlclNWR1BhdGgoKQogewogfQogCi1ib29sIFJlbmRlclNWR1Bh
dGg6OmZpbGxDb250YWlucyhjb25zdCBGbG9hdFBvaW50JiBwb2ludCwgYm9vbCByZXF1aXJlc0Zp
bGwsIFdpbmRSdWxlIGZpbGxSdWxlKQotewotICAgIGlmICghbV9maWxsQm91bmRpbmdCb3guY29u
dGFpbnMocG9pbnQpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBDb2xvciBmYWxsYmFj
a0NvbG9yOwotICAgIGlmIChyZXF1aXJlc0ZpbGwgJiYgIVJlbmRlclNWR1Jlc291cmNlOjpmaWxs
UGFpbnRpbmdSZXNvdXJjZSh0aGlzLCBzdHlsZSgpLCBmYWxsYmFja0NvbG9yKSkKLSAgICAgICAg
cmV0dXJuIGZhbHNlOwotCi0gICAgcmV0dXJuIG1fcGF0aC5jb250YWlucyhwb2ludCwgZmlsbFJ1
bGUpOwotfQotCi1ib29sIFJlbmRlclNWR1BhdGg6OnN0cm9rZUNvbnRhaW5zKGNvbnN0IEZsb2F0
UG9pbnQmIHBvaW50LCBib29sIHJlcXVpcmVzU3Ryb2tlKQotewotICAgIGlmICghbV9zdHJva2VB
bmRNYXJrZXJCb3VuZGluZ0JveC5jb250YWlucyhwb2ludCkpCi0gICAgICAgIHJldHVybiBmYWxz
ZTsKLQotICAgIENvbG9yIGZhbGxiYWNrQ29sb3I7Ci0gICAgaWYgKHJlcXVpcmVzU3Ryb2tlICYm
ICFSZW5kZXJTVkdSZXNvdXJjZTo6c3Ryb2tlUGFpbnRpbmdSZXNvdXJjZSh0aGlzLCBzdHlsZSgp
LCBmYWxsYmFja0NvbG9yKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgaWYgKHNob3Vs
ZFN0cm9rZVplcm9MZW5ndGhTdWJwYXRoKCkpCi0gICAgICAgIHJldHVybiB6ZXJvTGVuZ3RoU3Vi
cGF0aFJlY3QoKS5jb250YWlucyhwb2ludCk7Ci0KLSAgICBCb3VuZGluZ1JlY3RTdHJva2VTdHls
ZUFwcGxpZXIgc3Ryb2tlU3R5bGUodGhpcywgc3R5bGUoKSk7Ci0gICAgcmV0dXJuIG1fcGF0aC5z
dHJva2VDb250YWlucygmc3Ryb2tlU3R5bGUsIHBvaW50KTsKLX0KLQotdm9pZCBSZW5kZXJTVkdQ
YXRoOjpsYXlvdXQoKQotewotICAgIExheW91dFJlcGFpbnRlciByZXBhaW50ZXIoKnRoaXMsIGNo
ZWNrRm9yUmVwYWludER1cmluZ0xheW91dCgpICYmIHNlbGZOZWVkc0xheW91dCgpKTsKLSAgICBT
VkdTdHlsZWRUcmFuc2Zvcm1hYmxlRWxlbWVudCogZWxlbWVudCA9IHN0YXRpY19jYXN0PFNWR1N0
eWxlZFRyYW5zZm9ybWFibGVFbGVtZW50Kj4obm9kZSgpKTsKLQotICAgIGJvb2wgdXBkYXRlQ2Fj
aGVkQm91bmRhcmllc0luUGFyZW50cyA9IGZhbHNlOwotCi0gICAgYm9vbCBuZWVkc1BhdGhVcGRh
dGUgPSBtX25lZWRzUGF0aFVwZGF0ZTsKLSAgICBpZiAobmVlZHNQYXRoVXBkYXRlKSB7Ci0gICAg
ICAgIG1fcGF0aC5jbGVhcigpOwotICAgICAgICB1cGRhdGVQYXRoRnJvbUdyYXBoaWNzRWxlbWVu
dChlbGVtZW50LCBtX3BhdGgpOwotICAgICAgICBtX25lZWRzUGF0aFVwZGF0ZSA9IGZhbHNlOwot
ICAgICAgICB1cGRhdGVDYWNoZWRCb3VuZGFyaWVzSW5QYXJlbnRzID0gdHJ1ZTsKLSAgICB9Ci0K
LSAgICBpZiAobV9uZWVkc1RyYW5zZm9ybVVwZGF0ZSkgewotICAgICAgICBtX2xvY2FsVHJhbnNm
b3JtID0gZWxlbWVudC0+YW5pbWF0ZWRMb2NhbFRyYW5zZm9ybSgpOwotICAgICAgICBtX25lZWRz
VHJhbnNmb3JtVXBkYXRlID0gZmFsc2U7Ci0gICAgICAgIHVwZGF0ZUNhY2hlZEJvdW5kYXJpZXNJ
blBhcmVudHMgPSB0cnVlOwotICAgIH0KLQotICAgIGlmIChtX25lZWRzQm91bmRhcmllc1VwZGF0
ZSkKLSAgICAgICAgdXBkYXRlQ2FjaGVkQm91bmRhcmllc0luUGFyZW50cyA9IHRydWU7Ci0KLSAg
ICAvLyBJbnZhbGlkYXRlIGFsbCByZXNvdXJjZXMgb2YgdGhpcyBjbGllbnQgaWYgb3VyIGxheW91
dCBjaGFuZ2VkLgotICAgIGlmIChtX2V2ZXJIYWRMYXlvdXQgJiYgc2VsZk5lZWRzTGF5b3V0KCkp
IHsKLSAgICAgICAgU1ZHUmVzb3VyY2VzQ2FjaGU6OmNsaWVudExheW91dENoYW5nZWQodGhpcyk7
Ci0gICAgICAgIG1fbWFya2VyTGF5b3V0SW5mby5jbGVhcigpOwotICAgIH0KLQotICAgIC8vIEF0
IHRoaXMgcG9pbnQgTGF5b3V0UmVwYWludGVyIGFscmVhZHkgZ3JhYmJlZCB0aGUgb2xkIGJvdW5k
cywKLSAgICAvLyByZWNhbGN1bGF0ZSB0aGVtIG5vdyBzbyByZXBhaW50QWZ0ZXJMYXlvdXQoKSB1
c2VzIHRoZSBuZXcgYm91bmRzLgotICAgIGlmIChuZWVkc1BhdGhVcGRhdGUgfHwgbV9uZWVkc0Jv
dW5kYXJpZXNVcGRhdGUpIHsKLSAgICAgICAgdXBkYXRlQ2FjaGVkQm91bmRhcmllcygpOwotICAg
ICAgICBtX25lZWRzQm91bmRhcmllc1VwZGF0ZSA9IGZhbHNlOwotICAgIH0KLQotICAgIC8vIElm
IG91ciBib3VuZHMgY2hhbmdlZCwgbm90aWZ5IHRoZSBwYXJlbnRzLgotICAgIGlmICh1cGRhdGVD
YWNoZWRCb3VuZGFyaWVzSW5QYXJlbnRzKQotICAgICAgICBSZW5kZXJTVkdNb2RlbE9iamVjdDo6
c2V0TmVlZHNCb3VuZGFyaWVzVXBkYXRlKCk7Ci0KLSAgICByZXBhaW50ZXIucmVwYWludEFmdGVy
TGF5b3V0KCk7Ci0gICAgc2V0TmVlZHNMYXlvdXQoZmFsc2UpOwotfQotCi1ib29sIFJlbmRlclNW
R1BhdGg6OnNob3VsZFN0cm9rZVplcm9MZW5ndGhTdWJwYXRoKCkgY29uc3QKLXsKLSAgICAvLyBT
cGVjKDExLjQpOiBBbnkgemVybyBsZW5ndGggc3VicGF0aCBzaGFsbCBub3QgYmUgc3Ryb2tlZCBp
ZiB0aGUg4oCYc3Ryb2tlLWxpbmVjYXDigJkgcHJvcGVydHkgaGFzIGEgdmFsdWUgb2YgYnV0dAot
ICAgIC8vIGJ1dCBzaGFsbCBiZSBzdHJva2VkIGlmIHRoZSDigJhzdHJva2UtbGluZWNhcOKAmSBw
cm9wZXJ0eSBoYXMgYSB2YWx1ZSBvZiByb3VuZCBvciBzcXVhcmUKLSAgICByZXR1cm4gc3R5bGUo
KS0+c3ZnU3R5bGUoKS0+aGFzU3Ryb2tlKCkgJiYgc3R5bGUoKS0+c3ZnU3R5bGUoKS0+Y2FwU3R5
bGUoKSAhPSBCdXR0Q2FwICYmICFtX2ZpbGxCb3VuZGluZ0JveC53aWR0aCgpICYmICFtX2ZpbGxC
b3VuZGluZ0JveC5oZWlnaHQoKTsKLX0KLQotRmxvYXRSZWN0IFJlbmRlclNWR1BhdGg6Onplcm9M
ZW5ndGhTdWJwYXRoUmVjdCgpIGNvbnN0Ci17Ci0gICAgU1ZHRWxlbWVudCogc3ZnRWxlbWVudCA9
IHN0YXRpY19jYXN0PFNWR0VsZW1lbnQqPihub2RlKCkpOwotICAgIFNWR0xlbmd0aENvbnRleHQg
bGVuZ3RoQ29udGV4dChzdmdFbGVtZW50KTsKLSAgICBmbG9hdCBzdHJva2VXaWR0aCA9IHN0eWxl
KCktPnN2Z1N0eWxlKCktPnN0cm9rZVdpZHRoKCkudmFsdWUobGVuZ3RoQ29udGV4dCk7Ci0gICAg
cmV0dXJuIEZsb2F0UmVjdChtX2ZpbGxCb3VuZGluZ0JveC54KCkgLSBzdHJva2VXaWR0aCAvIDIs
IG1fZmlsbEJvdW5kaW5nQm94LnkoKSAtIHN0cm9rZVdpZHRoIC8gMiwgc3Ryb2tlV2lkdGgsIHN0
cm9rZVdpZHRoKTsKLX0KLQotdm9pZCBSZW5kZXJTVkdQYXRoOjpzZXR1cFNxdWFyZUNhcFBhdGgo
UGF0aComIHVzZVBhdGgsIGludCYgYXBwbHlNb2RlKQotewotICAgIC8vIFNwZWMoMTEuNCk6IEFu
eSB6ZXJvIGxlbmd0aCBzdWJwYXRoIHNoYWxsIG5vdCBiZSBzdHJva2VkIGlmIHRoZSDigJhzdHJv
a2UtbGluZWNhcOKAmSBwcm9wZXJ0eSBoYXMgYSB2YWx1ZSBvZiBidXR0Ci0gICAgLy8gYnV0IHNo
YWxsIGJlIHN0cm9rZWQgaWYgdGhlIOKAmHN0cm9rZS1saW5lY2Fw4oCZIHByb3BlcnR5IGhhcyBh
IHZhbHVlIG9mIHJvdW5kIG9yIHNxdWFyZQotICAgIERFRklORV9TVEFUSUNfTE9DQUwoUGF0aCwg
dGVtcFBhdGgsICgpKTsKLQotICAgIGFwcGx5TW9kZSA9IEFwcGx5VG9GaWxsTW9kZTsKLSAgICB1
c2VQYXRoID0gJnRlbXBQYXRoOwotICAgIHVzZVBhdGgtPmNsZWFyKCk7Ci0gICAgaWYgKHN0eWxl
KCktPnN2Z1N0eWxlKCktPmNhcFN0eWxlKCkgPT0gU3F1YXJlQ2FwKQotICAgICAgICB1c2VQYXRo
LT5hZGRSZWN0KHplcm9MZW5ndGhTdWJwYXRoUmVjdCgpKTsKLSAgICBlbHNlCi0gICAgICAgIHVz
ZVBhdGgtPmFkZEVsbGlwc2UoemVyb0xlbmd0aFN1YnBhdGhSZWN0KCkpOwotfQotCi1ib29sIFJl
bmRlclNWR1BhdGg6OnNldHVwTm9uU2NhbGluZ1N0cm9rZVBhdGgoUGF0aComIHVzZVBhdGgsIEdy
YXBoaWNzQ29udGV4dFN0YXRlU2F2ZXImIHN0YXRlU2F2ZXIpCi17Ci0gICAgREVGSU5FX1NUQVRJ
Q19MT0NBTChQYXRoLCB0ZW1wUGF0aCwgKCkpOwotCi0gICAgU1ZHU3R5bGVkVHJhbnNmb3JtYWJs
ZUVsZW1lbnQqIGVsZW1lbnQgPSBzdGF0aWNfY2FzdDxTVkdTdHlsZWRUcmFuc2Zvcm1hYmxlRWxl
bWVudCo+KG5vZGUoKSk7Ci0gICAgQWZmaW5lVHJhbnNmb3JtIG5vblNjYWxpbmdTdHJva2VUcmFu
c2Zvcm0gPSBlbGVtZW50LT5nZXRTY3JlZW5DVE0oU1ZHTG9jYXRhYmxlOjpEaXNhbGxvd1N0eWxl
VXBkYXRlKTsKLSAgICBpZiAoIW5vblNjYWxpbmdTdHJva2VUcmFuc2Zvcm0uaXNJbnZlcnRpYmxl
KCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIHRlbXBQYXRoID0gbV9wYXRoOwotICAg
IHVzZVBhdGggPSAmdGVtcFBhdGg7Ci0gICAgdGVtcFBhdGgudHJhbnNmb3JtKG5vblNjYWxpbmdT
dHJva2VUcmFuc2Zvcm0pOwotCi0gICAgc3RhdGVTYXZlci5zYXZlKCk7Ci0gICAgc3RhdGVTYXZl
ci5jb250ZXh0KCktPmNvbmNhdENUTShub25TY2FsaW5nU3Ryb2tlVHJhbnNmb3JtLmludmVyc2Uo
KSk7Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLXZvaWQgUmVuZGVyU1ZHUGF0aDo6ZmlsbEFuZFN0
cm9rZVBhdGgoR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0KQotewotICAgIFJlbmRlclN0eWxlKiBz
dHlsZSA9IHRoaXMtPnN0eWxlKCk7Ci0KLSAgICBDb2xvciBmYWxsYmFja0NvbG9yOwotICAgIGlm
IChSZW5kZXJTVkdSZXNvdXJjZSogZmlsbFBhaW50aW5nUmVzb3VyY2UgPSBSZW5kZXJTVkdSZXNv
dXJjZTo6ZmlsbFBhaW50aW5nUmVzb3VyY2UodGhpcywgc3R5bGUsIGZhbGxiYWNrQ29sb3IpKSB7
Ci0gICAgICAgIGlmIChmaWxsUGFpbnRpbmdSZXNvdXJjZS0+YXBwbHlSZXNvdXJjZSh0aGlzLCBz
dHlsZSwgY29udGV4dCwgQXBwbHlUb0ZpbGxNb2RlKSkKLSAgICAgICAgICAgIGZpbGxQYWludGlu
Z1Jlc291cmNlLT5wb3N0QXBwbHlSZXNvdXJjZSh0aGlzLCBjb250ZXh0LCBBcHBseVRvRmlsbE1v
ZGUsICZtX3BhdGgpOwotICAgICAgICBlbHNlIGlmIChmYWxsYmFja0NvbG9yLmlzVmFsaWQoKSkg
ewotICAgICAgICAgICAgUmVuZGVyU1ZHUmVzb3VyY2VTb2xpZENvbG9yKiBmYWxsYmFja1Jlc291
cmNlID0gUmVuZGVyU1ZHUmVzb3VyY2U6OnNoYXJlZFNvbGlkUGFpbnRpbmdSZXNvdXJjZSgpOwot
ICAgICAgICAgICAgZmFsbGJhY2tSZXNvdXJjZS0+c2V0Q29sb3IoZmFsbGJhY2tDb2xvcik7Ci0g
ICAgICAgICAgICBpZiAoZmFsbGJhY2tSZXNvdXJjZS0+YXBwbHlSZXNvdXJjZSh0aGlzLCBzdHls
ZSwgY29udGV4dCwgQXBwbHlUb0ZpbGxNb2RlKSkKLSAgICAgICAgICAgICAgICBmYWxsYmFja1Jl
c291cmNlLT5wb3N0QXBwbHlSZXNvdXJjZSh0aGlzLCBjb250ZXh0LCBBcHBseVRvRmlsbE1vZGUs
ICZtX3BhdGgpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgZmFsbGJhY2tDb2xvciA9IENvbG9y
KCk7Ci0gICAgUmVuZGVyU1ZHUmVzb3VyY2UqIHN0cm9rZVBhaW50aW5nUmVzb3VyY2UgPSBSZW5k
ZXJTVkdSZXNvdXJjZTo6c3Ryb2tlUGFpbnRpbmdSZXNvdXJjZSh0aGlzLCBzdHlsZSwgZmFsbGJh
Y2tDb2xvcik7Ci0gICAgaWYgKCFzdHJva2VQYWludGluZ1Jlc291cmNlKQotICAgICAgICByZXR1
cm47Ci0KLSAgICBQYXRoKiB1c2VQYXRoID0gJm1fcGF0aDsKLSAgICBpbnQgYXBwbHlNb2RlID0g
QXBwbHlUb1N0cm9rZU1vZGU7Ci0KLSAgICBib29sIG5vblNjYWxpbmdTdHJva2UgPSBzdHlsZS0+
c3ZnU3R5bGUoKS0+dmVjdG9yRWZmZWN0KCkgPT0gVkVfTk9OX1NDQUxJTkdfU1RST0tFOwotCi0g
ICAgR3JhcGhpY3NDb250ZXh0U3RhdGVTYXZlciBzdGF0ZVNhdmVyKCpjb250ZXh0LCBmYWxzZSk7
Ci0KLSAgICAvLyBTcGVjKDExLjQpOiBBbnkgemVybyBsZW5ndGggc3VicGF0aCBzaGFsbCBub3Qg
YmUgc3Ryb2tlZCBpZiB0aGUg4oCYc3Ryb2tlLWxpbmVjYXDigJkgcHJvcGVydHkgaGFzIGEgdmFs
dWUgb2YgYnV0dAotICAgIC8vIGJ1dCBzaGFsbCBiZSBzdHJva2VkIGlmIHRoZSDigJhzdHJva2Ut
bGluZWNhcOKAmSBwcm9wZXJ0eSBoYXMgYSB2YWx1ZSBvZiByb3VuZCBvciBzcXVhcmUKLSAgICAv
LyBGSVhNRTogdGhpcyBkb2VzIG5vdCB3b3JrIGZvciB6ZXJvLWxlbmd0aCBzdWJwYXRocywgb25s
eSB3aGVuIHRvdGFsIHBhdGggaXMgemVyby1sZW5ndGgKLSAgICBpZiAoc2hvdWxkU3Ryb2tlWmVy
b0xlbmd0aFN1YnBhdGgoKSkKLSAgICAgICAgc2V0dXBTcXVhcmVDYXBQYXRoKHVzZVBhdGgsIGFw
cGx5TW9kZSk7Ci0gICAgZWxzZSBpZiAobm9uU2NhbGluZ1N0cm9rZSkgewotICAgICAgIGlmICgh
c2V0dXBOb25TY2FsaW5nU3Ryb2tlUGF0aCh1c2VQYXRoLCBzdGF0ZVNhdmVyKSkKLSAgICAgICAg
ICAgcmV0dXJuOwotICAgIH0KLQotICAgIGlmIChzdHJva2VQYWludGluZ1Jlc291cmNlLT5hcHBs
eVJlc291cmNlKHRoaXMsIHN0eWxlLCBjb250ZXh0LCBhcHBseU1vZGUpKQotICAgICAgICBzdHJv
a2VQYWludGluZ1Jlc291cmNlLT5wb3N0QXBwbHlSZXNvdXJjZSh0aGlzLCBjb250ZXh0LCBhcHBs
eU1vZGUsIHVzZVBhdGgpOwotICAgIGVsc2UgaWYgKGZhbGxiYWNrQ29sb3IuaXNWYWxpZCgpKSB7
Ci0gICAgICAgIFJlbmRlclNWR1Jlc291cmNlU29saWRDb2xvciogZmFsbGJhY2tSZXNvdXJjZSA9
IFJlbmRlclNWR1Jlc291cmNlOjpzaGFyZWRTb2xpZFBhaW50aW5nUmVzb3VyY2UoKTsKLSAgICAg
ICAgZmFsbGJhY2tSZXNvdXJjZS0+c2V0Q29sb3IoZmFsbGJhY2tDb2xvcik7Ci0gICAgICAgIGlm
IChmYWxsYmFja1Jlc291cmNlLT5hcHBseVJlc291cmNlKHRoaXMsIHN0eWxlLCBjb250ZXh0LCBh
cHBseU1vZGUpKQotICAgICAgICAgICAgZmFsbGJhY2tSZXNvdXJjZS0+cG9zdEFwcGx5UmVzb3Vy
Y2UodGhpcywgY29udGV4dCwgYXBwbHlNb2RlLCB1c2VQYXRoKTsKLSAgICB9Ci19Ci0KLXZvaWQg
UmVuZGVyU1ZHUGF0aDo6cGFpbnQoUGFpbnRJbmZvJiBwYWludEluZm8sIGNvbnN0IExheW91dFBv
aW50JikKLXsKLSAgICBpZiAocGFpbnRJbmZvLmNvbnRleHQtPnBhaW50aW5nRGlzYWJsZWQoKSB8
fCBzdHlsZSgpLT52aXNpYmlsaXR5KCkgPT0gSElEREVOIHx8IG1fcGF0aC5pc0VtcHR5KCkpCi0g
ICAgICAgIHJldHVybjsKLQotICAgIEZsb2F0UmVjdCBib3VuZGluZ0JveCA9IHJlcGFpbnRSZWN0
SW5Mb2NhbENvb3JkaW5hdGVzKCk7Ci0gICAgaWYgKCFTVkdSZW5kZXJTdXBwb3J0OjpwYWludElu
Zm9JbnRlcnNlY3RzUmVwYWludFJlY3QoYm91bmRpbmdCb3gsIG1fbG9jYWxUcmFuc2Zvcm0sIHBh
aW50SW5mbykpCi0gICAgICAgIHJldHVybjsKLQotICAgIFBhaW50SW5mbyBjaGlsZFBhaW50SW5m
byhwYWludEluZm8pOwotICAgIGJvb2wgZHJhd3NPdXRsaW5lID0gc3R5bGUoKS0+b3V0bGluZVdp
ZHRoKCkgJiYgKGNoaWxkUGFpbnRJbmZvLnBoYXNlID09IFBhaW50UGhhc2VPdXRsaW5lIHx8IGNo
aWxkUGFpbnRJbmZvLnBoYXNlID09IFBhaW50UGhhc2VTZWxmT3V0bGluZSk7Ci0gICAgaWYgKGRy
YXdzT3V0bGluZSB8fCBjaGlsZFBhaW50SW5mby5waGFzZSA9PSBQYWludFBoYXNlRm9yZWdyb3Vu
ZCkgewotICAgICAgICBHcmFwaGljc0NvbnRleHRTdGF0ZVNhdmVyIHN0YXRlU2F2ZXIoKmNoaWxk
UGFpbnRJbmZvLmNvbnRleHQpOwotICAgICAgICBjaGlsZFBhaW50SW5mby5hcHBseVRyYW5zZm9y
bShtX2xvY2FsVHJhbnNmb3JtKTsKLQotICAgICAgICBpZiAoY2hpbGRQYWludEluZm8ucGhhc2Ug
PT0gUGFpbnRQaGFzZUZvcmVncm91bmQpIHsKLSAgICAgICAgICAgIFBhaW50SW5mbyBzYXZlZElu
Zm8oY2hpbGRQYWludEluZm8pOwotCi0gICAgICAgICAgICBpZiAoU1ZHUmVuZGVyU3VwcG9ydDo6
cHJlcGFyZVRvUmVuZGVyU1ZHQ29udGVudCh0aGlzLCBjaGlsZFBhaW50SW5mbykpIHsKLSAgICAg
ICAgICAgICAgICBjb25zdCBTVkdSZW5kZXJTdHlsZSogc3ZnU3R5bGUgPSBzdHlsZSgpLT5zdmdT
dHlsZSgpOwotICAgICAgICAgICAgICAgIGlmIChzdmdTdHlsZS0+c2hhcGVSZW5kZXJpbmcoKSA9
PSBTUl9DUklTUEVER0VTKQotICAgICAgICAgICAgICAgICAgICBjaGlsZFBhaW50SW5mby5jb250
ZXh0LT5zZXRTaG91bGRBbnRpYWxpYXMoZmFsc2UpOwotCi0gICAgICAgICAgICAgICAgZmlsbEFu
ZFN0cm9rZVBhdGgoY2hpbGRQYWludEluZm8uY29udGV4dCk7Ci0KLSAgICAgICAgICAgICAgICBp
ZiAoc3ZnU3R5bGUtPmhhc01hcmtlcnMoKSkKLSAgICAgICAgICAgICAgICAgICAgbV9tYXJrZXJM
YXlvdXRJbmZvLmRyYXdNYXJrZXJzKGNoaWxkUGFpbnRJbmZvKTsKLSAgICAgICAgICAgIH0KLQot
ICAgICAgICAgICAgU1ZHUmVuZGVyU3VwcG9ydDo6ZmluaXNoUmVuZGVyU1ZHQ29udGVudCh0aGlz
LCBjaGlsZFBhaW50SW5mbywgc2F2ZWRJbmZvLmNvbnRleHQpOwotICAgICAgICB9Ci0KLSAgICAg
ICAgaWYgKGRyYXdzT3V0bGluZSkKLSAgICAgICAgICAgIHBhaW50T3V0bGluZShjaGlsZFBhaW50
SW5mby5jb250ZXh0LCBJbnRSZWN0KGJvdW5kaW5nQm94KSk7Ci0gICAgfQotfQotCi0vLyBUaGlz
IG1ldGhvZCBpcyBjYWxsZWQgZnJvbSBpbnNpZGUgcGFpbnRPdXRsaW5lKCkgc2luY2Ugd2UgY2Fs
bCBwYWludE91dGxpbmUoKQotLy8gd2hpbGUgdHJhbnNmb3JtZWQgdG8gb3VyIGNvb3JkIHN5c3Rl
bSwgcmV0dXJuIGxvY2FsIGNvb3Jkcwotdm9pZCBSZW5kZXJTVkdQYXRoOjphZGRGb2N1c1JpbmdS
ZWN0cyhWZWN0b3I8TGF5b3V0UmVjdD4mIHJlY3RzLCBjb25zdCBMYXlvdXRQb2ludCYpIAotewot
ICAgIExheW91dFJlY3QgcmVjdCA9IGVuY2xvc2luZ0xheW91dFJlY3QocmVwYWludFJlY3RJbkxv
Y2FsQ29vcmRpbmF0ZXMoKSk7Ci0gICAgaWYgKCFyZWN0LmlzRW1wdHkoKSkKLSAgICAgICAgcmVj
dHMuYXBwZW5kKHJlY3QpOwotfQotCi1ib29sIFJlbmRlclNWR1BhdGg6Om5vZGVBdEZsb2F0UG9p
bnQoY29uc3QgSGl0VGVzdFJlcXVlc3QmIHJlcXVlc3QsIEhpdFRlc3RSZXN1bHQmIHJlc3VsdCwg
Y29uc3QgRmxvYXRQb2ludCYgcG9pbnRJblBhcmVudCwgSGl0VGVzdEFjdGlvbiBoaXRUZXN0QWN0
aW9uKQotewotICAgIC8vIFdlIG9ubHkgZHJhdyBpbiB0aGUgZm9yZ3JvdW5kIHBoYXNlLCBzbyB3
ZSBvbmx5IGhpdC10ZXN0IHRoZW4uCi0gICAgaWYgKGhpdFRlc3RBY3Rpb24gIT0gSGl0VGVzdEZv
cmVncm91bmQpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIEZsb2F0UG9pbnQgbG9jYWxQ
b2ludCA9IG1fbG9jYWxUcmFuc2Zvcm0uaW52ZXJzZSgpLm1hcFBvaW50KHBvaW50SW5QYXJlbnQp
OwotCi0gICAgaWYgKCFTVkdSZW5kZXJTdXBwb3J0Ojpwb2ludEluQ2xpcHBpbmdBcmVhKHRoaXMs
IGxvY2FsUG9pbnQpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBQb2ludGVyRXZlbnRz
SGl0UnVsZXMgaGl0UnVsZXMoUG9pbnRlckV2ZW50c0hpdFJ1bGVzOjpTVkdfUEFUSF9ISVRURVNU
SU5HLCByZXF1ZXN0LCBzdHlsZSgpLT5wb2ludGVyRXZlbnRzKCkpOwotICAgIGJvb2wgaXNWaXNp
YmxlID0gKHN0eWxlKCktPnZpc2liaWxpdHkoKSA9PSBWSVNJQkxFKTsKLSAgICBpZiAoaXNWaXNp
YmxlIHx8ICFoaXRSdWxlcy5yZXF1aXJlVmlzaWJsZSkgewotICAgICAgICBjb25zdCBTVkdSZW5k
ZXJTdHlsZSogc3ZnU3R5bGUgPSBzdHlsZSgpLT5zdmdTdHlsZSgpOwotICAgICAgICBXaW5kUnVs
ZSBmaWxsUnVsZSA9IHN2Z1N0eWxlLT5maWxsUnVsZSgpOwotICAgICAgICBpZiAocmVxdWVzdC5z
dmdDbGlwQ29udGVudCgpKQotICAgICAgICAgICAgZmlsbFJ1bGUgPSBzdmdTdHlsZS0+Y2xpcFJ1
bGUoKTsKLSAgICAgICAgaWYgKChoaXRSdWxlcy5jYW5IaXRTdHJva2UgJiYgKHN2Z1N0eWxlLT5o
YXNTdHJva2UoKSB8fCAhaGl0UnVsZXMucmVxdWlyZVN0cm9rZSkgJiYgc3Ryb2tlQ29udGFpbnMo
bG9jYWxQb2ludCwgaGl0UnVsZXMucmVxdWlyZVN0cm9rZSkpCi0gICAgICAgICAgICB8fCAoaGl0
UnVsZXMuY2FuSGl0RmlsbCAmJiAoc3ZnU3R5bGUtPmhhc0ZpbGwoKSB8fCAhaGl0UnVsZXMucmVx
dWlyZUZpbGwpICYmIGZpbGxDb250YWlucyhsb2NhbFBvaW50LCBoaXRSdWxlcy5yZXF1aXJlRmls
bCwgZmlsbFJ1bGUpKSkgewotICAgICAgICAgICAgdXBkYXRlSGl0VGVzdFJlc3VsdChyZXN1bHQs
IHJvdW5kZWRMYXlvdXRQb2ludChsb2NhbFBvaW50KSk7Ci0gICAgICAgICAgICByZXR1cm4gdHJ1
ZTsKLSAgICAgICAgfQotICAgIH0KLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLUZsb2F0UmVjdCBS
ZW5kZXJTVkdQYXRoOjpjYWxjdWxhdGVNYXJrZXJCb3VuZHNJZk5lZWRlZCgpCi17Ci0gICAgU1ZH
RWxlbWVudCogc3ZnRWxlbWVudCA9IHN0YXRpY19jYXN0PFNWR0VsZW1lbnQqPihub2RlKCkpOwot
ICAgIEFTU0VSVChzdmdFbGVtZW50ICYmIHN2Z0VsZW1lbnQtPmRvY3VtZW50KCkpOwotICAgIGlm
ICghc3ZnRWxlbWVudC0+aXNTdHlsZWQoKSkKLSAgICAgICAgcmV0dXJuIEZsb2F0UmVjdCgpOwot
Ci0gICAgU1ZHU3R5bGVkRWxlbWVudCogc3R5bGVkRWxlbWVudCA9IHN0YXRpY19jYXN0PFNWR1N0
eWxlZEVsZW1lbnQqPihzdmdFbGVtZW50KTsKLSAgICBpZiAoIXN0eWxlZEVsZW1lbnQtPnN1cHBv
cnRzTWFya2VycygpKQotICAgICAgICByZXR1cm4gRmxvYXRSZWN0KCk7Ci0KLSAgICBjb25zdCBT
VkdSZW5kZXJTdHlsZSogc3ZnU3R5bGUgPSBzdHlsZSgpLT5zdmdTdHlsZSgpOwotICAgIEFTU0VS
VChzdmdTdHlsZS0+aGFzTWFya2VycygpKTsKLQotICAgIFNWR1Jlc291cmNlcyogcmVzb3VyY2Vz
ID0gU1ZHUmVzb3VyY2VzQ2FjaGU6OmNhY2hlZFJlc291cmNlc0ZvclJlbmRlck9iamVjdCh0aGlz
KTsKLSAgICBpZiAoIXJlc291cmNlcykKLSAgICAgICAgcmV0dXJuIEZsb2F0UmVjdCgpOwotCi0g
ICAgUmVuZGVyU1ZHUmVzb3VyY2VNYXJrZXIqIG1hcmtlclN0YXJ0ID0gcmVzb3VyY2VzLT5tYXJr
ZXJTdGFydCgpOwotICAgIFJlbmRlclNWR1Jlc291cmNlTWFya2VyKiBtYXJrZXJNaWQgPSByZXNv
dXJjZXMtPm1hcmtlck1pZCgpOwotICAgIFJlbmRlclNWR1Jlc291cmNlTWFya2VyKiBtYXJrZXJF
bmQgPSByZXNvdXJjZXMtPm1hcmtlckVuZCgpOwotICAgIGlmICghbWFya2VyU3RhcnQgJiYgIW1h
cmtlck1pZCAmJiAhbWFya2VyRW5kKQotICAgICAgICByZXR1cm4gRmxvYXRSZWN0KCk7Ci0KLSAg
ICBTVkdMZW5ndGhDb250ZXh0IGxlbmd0aENvbnRleHQoc3ZnRWxlbWVudCk7Ci0gICAgcmV0dXJu
IG1fbWFya2VyTGF5b3V0SW5mby5jYWxjdWxhdGVCb3VuZGFyaWVzKG1hcmtlclN0YXJ0LCBtYXJr
ZXJNaWQsIG1hcmtlckVuZCwgc3ZnU3R5bGUtPnN0cm9rZVdpZHRoKCkudmFsdWUobGVuZ3RoQ29u
dGV4dCksIG1fcGF0aCk7Ci19Ci0KLXZvaWQgUmVuZGVyU1ZHUGF0aDo6dXBkYXRlQ2FjaGVkQm91
bmRhcmllcygpCi17Ci0gICAgaWYgKG1fcGF0aC5pc0VtcHR5KCkpIHsKLSAgICAgICAgbV9maWxs
Qm91bmRpbmdCb3ggPSBGbG9hdFJlY3QoKTsKLSAgICAgICAgbV9zdHJva2VBbmRNYXJrZXJCb3Vu
ZGluZ0JveCA9IEZsb2F0UmVjdCgpOwotICAgICAgICBtX3JlcGFpbnRCb3VuZGluZ0JveCA9IEZs
b2F0UmVjdCgpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgLy8gQ2FjaGUgX3VuY2xp
cHBlZF8gZmlsbCBib3VuZGluZyBib3gsIHVzZWQgZm9yIGNhbGN1bGF0aW9ucyBpbiByZXNvdXJj
ZXMKLSAgICBtX2ZpbGxCb3VuZGluZ0JveCA9IG1fcGF0aC5mYXN0Qm91bmRpbmdSZWN0KCk7Ci0K
LSAgICAvLyBTcGVjKDExLjQpOiBBbnkgemVybyBsZW5ndGggc3VicGF0aCBzaGFsbCBub3QgYmUg
c3Ryb2tlZCBpZiB0aGUg4oCYc3Ryb2tlLWxpbmVjYXDigJkgcHJvcGVydHkgaGFzIGEgdmFsdWUg
b2YgYnV0dAotICAgIC8vIGJ1dCBzaGFsbCBiZSBzdHJva2VkIGlmIHRoZSDigJhzdHJva2UtbGlu
ZWNhcOKAmSBwcm9wZXJ0eSBoYXMgYSB2YWx1ZSBvZiByb3VuZCBvciBzcXVhcmUKLSAgICBpZiAo
c2hvdWxkU3Ryb2tlWmVyb0xlbmd0aFN1YnBhdGgoKSkgewotICAgICAgICBtX3N0cm9rZUFuZE1h
cmtlckJvdW5kaW5nQm94ID0gemVyb0xlbmd0aFN1YnBhdGhSZWN0KCk7Ci0gICAgICAgIC8vIENh
Y2hlIHNtYWxsZXN0IHBvc3NpYmxlIHJlcGFpbnQgcmVjdGFuZ2xlCi0gICAgICAgIG1fcmVwYWlu
dEJvdW5kaW5nQm94ID0gbV9zdHJva2VBbmRNYXJrZXJCb3VuZGluZ0JveDsKLSAgICAgICAgU1ZH
UmVuZGVyU3VwcG9ydDo6aW50ZXJzZWN0UmVwYWludFJlY3RXaXRoUmVzb3VyY2VzKHRoaXMsIG1f
cmVwYWludEJvdW5kaW5nQm94KTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIC8vIENh
Y2hlIF91bmNsaXBwZWRfIHN0cm9rZSBib3VuZGluZyBib3gsIHVzZWQgZm9yIGNhbGN1bGF0aW9u
cyBpbiByZXNvdXJjZXMgKGluY2x1ZGVzIG1hcmtlciBib3VuZGFyaWVzKQotICAgIG1fc3Ryb2tl
QW5kTWFya2VyQm91bmRpbmdCb3ggPSBtX2ZpbGxCb3VuZGluZ0JveDsKLQotICAgIGNvbnN0IFNW
R1JlbmRlclN0eWxlKiBzdmdTdHlsZSA9IHN0eWxlKCktPnN2Z1N0eWxlKCk7Ci0gICAgaWYgKHN2
Z1N0eWxlLT5oYXNTdHJva2UoKSkgewotICAgICAgICBCb3VuZGluZ1JlY3RTdHJva2VTdHlsZUFw
cGxpZXIgc3Ryb2tlU3R5bGUodGhpcywgc3R5bGUoKSk7Ci0gICAgICAgIG1fc3Ryb2tlQW5kTWFy
a2VyQm91bmRpbmdCb3gudW5pdGUobV9wYXRoLnN0cm9rZUJvdW5kaW5nUmVjdCgmc3Ryb2tlU3R5
bGUpKTsKLSAgICB9Ci0KLSAgICBpZiAoc3ZnU3R5bGUtPmhhc01hcmtlcnMoKSkgewotICAgICAg
ICBGbG9hdFJlY3QgbWFya2VyQm91bmRzID0gY2FsY3VsYXRlTWFya2VyQm91bmRzSWZOZWVkZWQo
KTsKLSAgICAgICAgaWYgKCFtYXJrZXJCb3VuZHMuaXNFbXB0eSgpKQotICAgICAgICAgICAgbV9z
dHJva2VBbmRNYXJrZXJCb3VuZGluZ0JveC51bml0ZShtYXJrZXJCb3VuZHMpOwotICAgIH0KLQot
ICAgIC8vIENhY2hlIHNtYWxsZXN0IHBvc3NpYmxlIHJlcGFpbnQgcmVjdGFuZ2xlCi0gICAgbV9y
ZXBhaW50Qm91bmRpbmdCb3ggPSBtX3N0cm9rZUFuZE1hcmtlckJvdW5kaW5nQm94OwotICAgIFNW
R1JlbmRlclN1cHBvcnQ6OmludGVyc2VjdFJlcGFpbnRSZWN0V2l0aFJlc291cmNlcyh0aGlzLCBt
X3JlcGFpbnRCb3VuZGluZ0JveCk7Ci19Ci0KIH0KIAogI2VuZGlmIC8vIEVOQUJMRShTVkcpCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1BhdGguaCBi
L1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUGF0aC5oCm9sZCBtb2RlIDEw
MDY0NApuZXcgbW9kZSAxMDA3NTUKaW5kZXggOThlNjA4ZC4uNzdlOTllNQotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1BhdGguaAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1BhdGguaApAQCAtNCw2ICs0LDggQEAKICAqIENvcHly
aWdodCAoQykgMjAwNSBFcmljIFNlaWRlbCA8ZXJpY0B3ZWJraXQub3JnPgogICogQ29weXJpZ2h0
IChDKSAyMDA2IEFwcGxlIENvbXB1dGVyLCBJbmMKICAqIENvcHlyaWdodCAoQykgMjAwOSBHb29n
bGUsIEluYy4KKyAqIENvcHlyaWdodCAoQykgMjAxMSBSZW5hdGEgSG9kb3ZhbiA8cmVuaUB3ZWJr
aXQub3JnPgorICogQ29weXJpZ2h0IChDKSAyMDExIFVuaXZlcnNpdHkgb2YgU3plZ2VkCiAgKgog
ICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0
IGFuZC9vcgogICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkg
R2VuZXJhbCBQdWJsaWMKQEAgLTI1LDg2ICsyNywyMCBAQAogI2RlZmluZSBSZW5kZXJTVkdQYXRo
X2gKIAogI2lmIEVOQUJMRShTVkcpCi0jaW5jbHVkZSAiQWZmaW5lVHJhbnNmb3JtLmgiCi0jaW5j
bHVkZSAiRmxvYXRSZWN0LmgiCi0jaW5jbHVkZSAiUmVuZGVyU1ZHTW9kZWxPYmplY3QuaCIKLSNp
bmNsdWRlICJTVkdNYXJrZXJMYXlvdXRJbmZvLmgiCisjaW5jbHVkZSAiUmVuZGVyU1ZHU2hhcGUu
aCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1jbGFzcyBGbG9hdFBvaW50OwotY2xhc3MgR3Jh
cGhpY3NDb250ZXh0U3RhdGVTYXZlcjsKLWNsYXNzIFJlbmRlclNWR0NvbnRhaW5lcjsKLWNsYXNz
IFNWR1N0eWxlZFRyYW5zZm9ybWFibGVFbGVtZW50OwotCi1jbGFzcyBSZW5kZXJTVkdQYXRoIDog
cHVibGljIFJlbmRlclNWR01vZGVsT2JqZWN0IHsKK2NsYXNzIFJlbmRlclNWR1BhdGggOiBwdWJs
aWMgUmVuZGVyU1ZHU2hhcGUgewogcHVibGljOgogICAgIGV4cGxpY2l0IFJlbmRlclNWR1BhdGgo
U1ZHU3R5bGVkVHJhbnNmb3JtYWJsZUVsZW1lbnQqKTsKICAgICB2aXJ0dWFsIH5SZW5kZXJTVkdQ
YXRoKCk7CiAKLSAgICBjb25zdCBQYXRoJiBwYXRoKCkgY29uc3QgeyByZXR1cm4gbV9wYXRoOyB9
Ci0gICAgdm9pZCBzZXROZWVkc1BhdGhVcGRhdGUoKSB7IG1fbmVlZHNQYXRoVXBkYXRlID0gdHJ1
ZTsgfQotICAgIHZpcnR1YWwgdm9pZCBzZXROZWVkc0JvdW5kYXJpZXNVcGRhdGUoKSB7IG1fbmVl
ZHNCb3VuZGFyaWVzVXBkYXRlID0gdHJ1ZTsgfQotICAgIHZpcnR1YWwgdm9pZCBzZXROZWVkc1Ry
YW5zZm9ybVVwZGF0ZSgpIHsgbV9uZWVkc1RyYW5zZm9ybVVwZGF0ZSA9IHRydWU7IH0KLQogcHJp
dmF0ZToKLSAgICAvLyBIaXQtZGV0ZWN0aW9uIHNlcGVyYXRlZCBmb3IgdGhlIGZpbGwgYW5kIHRo
ZSBzdHJva2UKLSAgICBib29sIGZpbGxDb250YWlucyhjb25zdCBGbG9hdFBvaW50JiwgYm9vbCBy
ZXF1aXJlc0ZpbGwgPSB0cnVlLCBXaW5kUnVsZSBmaWxsUnVsZSA9IFJVTEVfTk9OWkVSTyk7Ci0g
ICAgYm9vbCBzdHJva2VDb250YWlucyhjb25zdCBGbG9hdFBvaW50JiwgYm9vbCByZXF1aXJlc1N0
cm9rZSA9IHRydWUpOwotCi0gICAgdmlydHVhbCBGbG9hdFJlY3Qgb2JqZWN0Qm91bmRpbmdCb3go
KSBjb25zdCB7IHJldHVybiBtX2ZpbGxCb3VuZGluZ0JveDsgfQotICAgIHZpcnR1YWwgRmxvYXRS
ZWN0IHN0cm9rZUJvdW5kaW5nQm94KCkgY29uc3QgeyByZXR1cm4gbV9zdHJva2VBbmRNYXJrZXJC
b3VuZGluZ0JveDsgfQotICAgIHZpcnR1YWwgRmxvYXRSZWN0IHJlcGFpbnRSZWN0SW5Mb2NhbENv
b3JkaW5hdGVzKCkgY29uc3QgeyByZXR1cm4gbV9yZXBhaW50Qm91bmRpbmdCb3g7IH0KLSAgICB2
aXJ0dWFsIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgbG9jYWxUb1BhcmVudFRyYW5zZm9ybSgpIGNv
bnN0IHsgcmV0dXJuIG1fbG9jYWxUcmFuc2Zvcm07IH0KLQogICAgIHZpcnR1YWwgYm9vbCBpc1NW
R1BhdGgoKSBjb25zdCB7IHJldHVybiB0cnVlOyB9CiAgICAgdmlydHVhbCBjb25zdCBjaGFyKiBy
ZW5kZXJOYW1lKCkgY29uc3QgeyByZXR1cm4gIlJlbmRlclNWR1BhdGgiOyB9Ci0KLSAgICB2aXJ0
dWFsIHZvaWQgbGF5b3V0KCk7Ci0gICAgdmlydHVhbCB2b2lkIHBhaW50KFBhaW50SW5mbyYsIGNv
bnN0IExheW91dFBvaW50Jik7Ci0gICAgdmlydHVhbCB2b2lkIGFkZEZvY3VzUmluZ1JlY3RzKFZl
Y3RvcjxMYXlvdXRSZWN0PiYsIGNvbnN0IExheW91dFBvaW50Jik7Ci0KLSAgICB2aXJ0dWFsIGJv
b2wgbm9kZUF0RmxvYXRQb2ludChjb25zdCBIaXRUZXN0UmVxdWVzdCYsIEhpdFRlc3RSZXN1bHQm
LCBjb25zdCBGbG9hdFBvaW50JiBwb2ludEluUGFyZW50LCBIaXRUZXN0QWN0aW9uKTsKLQotICAg
IEZsb2F0UmVjdCBjYWxjdWxhdGVNYXJrZXJCb3VuZHNJZk5lZWRlZCgpOwotICAgIHZvaWQgdXBk
YXRlQ2FjaGVkQm91bmRhcmllcygpOwotCi0gICAgdm9pZCBzZXR1cFNxdWFyZUNhcFBhdGgoUGF0
aComIHVzZVBhdGgsIGludCYgYXBwbHlNb2RlKTsKLSAgICBib29sIHNldHVwTm9uU2NhbGluZ1N0
cm9rZVBhdGgoUGF0aComIHVzZVBhdGgsIEdyYXBoaWNzQ29udGV4dFN0YXRlU2F2ZXImKTsKLSAg
ICBib29sIHNob3VsZFN0cm9rZVplcm9MZW5ndGhTdWJwYXRoKCkgY29uc3Q7Ci0gICAgRmxvYXRS
ZWN0IHplcm9MZW5ndGhTdWJwYXRoUmVjdCgpIGNvbnN0OwotCi1wcml2YXRlOgotICAgIHZpcnR1
YWwgQWZmaW5lVHJhbnNmb3JtIGxvY2FsVHJhbnNmb3JtKCkgY29uc3QgeyByZXR1cm4gbV9sb2Nh
bFRyYW5zZm9ybTsgfQotICAgIHZvaWQgZmlsbEFuZFN0cm9rZVBhdGgoR3JhcGhpY3NDb250ZXh0
Kik7Ci0KLSAgICBib29sIG1fbmVlZHNCb3VuZGFyaWVzVXBkYXRlIDogMTsKLSAgICBib29sIG1f
bmVlZHNQYXRoVXBkYXRlIDogMTsKLSAgICBib29sIG1fbmVlZHNUcmFuc2Zvcm1VcGRhdGUgOiAx
OwotCi0gICAgbXV0YWJsZSBQYXRoIG1fcGF0aDsKLSAgICBGbG9hdFJlY3QgbV9maWxsQm91bmRp
bmdCb3g7Ci0gICAgRmxvYXRSZWN0IG1fc3Ryb2tlQW5kTWFya2VyQm91bmRpbmdCb3g7Ci0gICAg
RmxvYXRSZWN0IG1fcmVwYWludEJvdW5kaW5nQm94OwotICAgIFNWR01hcmtlckxheW91dEluZm8g
bV9tYXJrZXJMYXlvdXRJbmZvOwotICAgIEFmZmluZVRyYW5zZm9ybSBtX2xvY2FsVHJhbnNmb3Jt
OwogfTsKIAotaW5saW5lIFJlbmRlclNWR1BhdGgqIHRvUmVuZGVyU1ZHUGF0aChSZW5kZXJPYmpl
Y3QqIG9iamVjdCkKLXsKLSAgICBBU1NFUlQoIW9iamVjdCB8fCBvYmplY3QtPmlzU1ZHUGF0aCgp
KTsKLSAgICByZXR1cm4gc3RhdGljX2Nhc3Q8UmVuZGVyU1ZHUGF0aCo+KG9iamVjdCk7Ci19Ci0K
LWlubGluZSBjb25zdCBSZW5kZXJTVkdQYXRoKiB0b1JlbmRlclNWR1BhdGgoY29uc3QgUmVuZGVy
T2JqZWN0KiBvYmplY3QpCi17Ci0gICAgQVNTRVJUKCFvYmplY3QgfHwgb2JqZWN0LT5pc1NWR1Bh
dGgoKSk7Ci0gICAgcmV0dXJuIHN0YXRpY19jYXN0PGNvbnN0IFJlbmRlclNWR1BhdGgqPihvYmpl
Y3QpOwotfQotCi0vLyBUaGlzIHdpbGwgY2F0Y2ggYW55b25lIGRvaW5nIGFuIHVubmVjZXNzYXJ5
IGNhc3QuCi12b2lkIHRvUmVuZGVyU1ZHUGF0aChjb25zdCBSZW5kZXJTVkdQYXRoKik7Ci0KIH0K
IAogI2VuZGlmIC8vIEVOQUJMRShTVkcpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvc3ZnL1JlbmRlclNWR1JlY3QuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2
Zy9SZW5kZXJTVkdSZWN0LmNwcApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi44
ZDU4NWM1Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9S
ZW5kZXJTVkdSZWN0LmNwcApAQCAtMCwwICsxLDE0MyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAxMSBVbml2ZXJzaXR5IG9mIFN6ZWdlZAorICogQ29weXJpZ2h0IChDKSAyMDExIFJlbmF0YSBI
b2RvdmFuIDxyZW5pQHdlYmtpdC5vcmc+CisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVU5JVkVSU0lUWSBPRiBTWkVH
RUQgYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBVTklWRVJTSVRZIE9GIFNaRUdF
RCBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBS
T0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkg
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisK
KyNpbmNsdWRlICJjb25maWcuaCIKKworI2lmIEVOQUJMRShTVkcpCisjaW5jbHVkZSAiUmVuZGVy
U1ZHUmVjdC5oIgorCisjaW5jbHVkZSAiU1ZHTmFtZXMuaCIKKyNpbmNsdWRlICJTVkdSZWN0RWxl
bWVudC5oIgorI2luY2x1ZGUgPHd0Zi9QbGF0Zm9ybS5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7
CisKK1JlbmRlclNWR1JlY3Q6OlJlbmRlclNWR1JlY3QoU1ZHUmVjdEVsZW1lbnQqIG5vZGUpCisg
ICAgOiBSZW5kZXJTVkdTaGFwZShub2RlKQoreworfQorCitSZW5kZXJTVkdSZWN0Ojp+UmVuZGVy
U1ZHUmVjdCgpCit7Cit9CisKK3ZvaWQgUmVuZGVyU1ZHUmVjdDo6Y3JlYXRlU2hhcGUoKQorewor
ICAgIC8vIEJlZm9yZSBjcmVhdGluZyBhIG5ldyBvYmplY3Qgd2UgbmVlZCB0byBjbGVhciB0aGUg
Y2FjaGVkIGJvdW5kaW5nIGJveAorICAgIC8vIHRvIGF2b2lkIHVzaW5nIGdhcmJhZ2UuCisgICAg
bV9ib3VuZGluZ0JveCA9IEZsb2F0UmVjdCgpOworICAgIG1faW5uZXJTdHJva2VSZWN0ID0gRmxv
YXRSZWN0KCk7CisgICAgbV9vdXRlclN0cm9rZVJlY3QgPSBGbG9hdFJlY3QoKTsKKyAgICBTVkdS
ZWN0RWxlbWVudCogcmVjdCA9IHN0YXRpY19jYXN0PFNWR1JlY3RFbGVtZW50Kj4obm9kZSgpKTsK
KyAgICBBU1NFUlQocmVjdCk7CisKKyAgICBib29sIG5vblNjYWxpbmdTdHJva2UgPSBzdHlsZSgp
LT5zdmdTdHlsZSgpLT52ZWN0b3JFZmZlY3QoKSA9PSBWRV9OT05fU0NBTElOR19TVFJPS0U7Cisg
ICAgLy8gRmFsbGJhY2sgdG8gUmVuZGVyU1ZHU2hhcGUgaWYgcmVjdCBoYXMgcm91bmRlZCBjb3Ju
ZXJzLgorICAgIGlmIChyZWN0LT5oYXNBdHRyaWJ1dGUoU1ZHTmFtZXM6OnJ4QXR0cikgfHwgcmVj
dC0+aGFzQXR0cmlidXRlKFNWR05hbWVzOjpyeUF0dHIpIHx8IG5vblNjYWxpbmdTdHJva2UpIHsK
KyAgICAgICBSZW5kZXJTVkdTaGFwZTo6Y3JlYXRlU2hhcGUoKTsKKyAgICAgICBzZXRJc1BhaW50
aW5nRmFsbGJhY2sodHJ1ZSk7CisgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIFNWR0xlbmd0
aENvbnRleHQgbGVuZ3RoQ29udGV4dChyZWN0KTsKKyAgICBGbG9hdFNpemUgYm91bmRpbmdCb3hT
aXplKHJlY3QtPndpZHRoKCkudmFsdWUobGVuZ3RoQ29udGV4dCksIHJlY3QtPmhlaWdodCgpLnZh
bHVlKGxlbmd0aENvbnRleHQpKTsKKyAgICBpZiAoYm91bmRpbmdCb3hTaXplLmlzRW1wdHkoKSkK
KyAgICAgICAgcmV0dXJuOworCisgICAgbV9ib3VuZGluZ0JveCA9IEZsb2F0UmVjdChGbG9hdFBv
aW50KHJlY3QtPngoKS52YWx1ZShsZW5ndGhDb250ZXh0KSwgcmVjdC0+eSgpLnZhbHVlKGxlbmd0
aENvbnRleHQpKSwgYm91bmRpbmdCb3hTaXplKTsKKworICAgIC8vIFRvIGRlY2lkZSBpZiB0aGUg
c3Ryb2tlIGNvbnRhaW5zIGEgcG9pbnQgd2UgY3JlYXRlIHR3byByZWN0cyB3aGljaCByZXByZXNl
bnQgdGhlIGlubmVyIGFuZAorICAgIC8vIHRoZSBvdXRlciBzdHJva2UgYm9yZGVycy4gQSBzdHJv
a2UgY29udGFpbnMgdGhlIHBvaW50LCBpZiB0aGUgcG9pbnQgaXMgYmV0d2VlbiB0aGVtLgorICAg
IG1faW5uZXJTdHJva2VSZWN0ID0gbV9ib3VuZGluZ0JveDsKKyAgICBtX291dGVyU3Ryb2tlUmVj
dCA9IG1fYm91bmRpbmdCb3g7CisKKyAgICBpZiAoc3R5bGUoKS0+c3ZnU3R5bGUoKS0+aGFzU3Ry
b2tlKCkpIHsKKyAgICAgICAgZmxvYXQgc3Ryb2tlV2lkdGggPSB0aGlzLT5zdHJva2VXaWR0aCgp
OworICAgICAgICBtX2lubmVyU3Ryb2tlUmVjdC5pbmZsYXRlKC1zdHJva2VXaWR0aCAvIDIpOwor
ICAgICAgICBtX291dGVyU3Ryb2tlUmVjdC5pbmZsYXRlKHN0cm9rZVdpZHRoIC8gMik7CisgICAg
fQorfQorCitGbG9hdFJlY3QgUmVuZGVyU1ZHUmVjdDo6b2JqZWN0Qm91bmRpbmdCb3goKSBjb25z
dAoreworICAgIGlmIChpc1BhaW50aW5nRmFsbGJhY2soKSkKKyAgICAgICAgcmV0dXJuIFJlbmRl
clNWR1NoYXBlOjpvYmplY3RCb3VuZGluZ0JveCgpOworICAgIHJldHVybiBtX2JvdW5kaW5nQm94
OworfQorCitGbG9hdFJlY3QgUmVuZGVyU1ZHUmVjdDo6c3Ryb2tlQm91bmRpbmdCb3goKSBjb25z
dAoreworICAgIGlmIChpc1BhaW50aW5nRmFsbGJhY2soKSkKKyAgICAgICAgcmV0dXJuIFJlbmRl
clNWR1NoYXBlOjpzdHJva2VCb3VuZGluZ0JveCgpOworICAgIHJldHVybiBtX291dGVyU3Ryb2tl
UmVjdDsKK30KKwordm9pZCBSZW5kZXJTVkdSZWN0OjpmaWxsU2hhcGUoR3JhcGhpY3NDb250ZXh0
KiBjb250ZXh0KSBjb25zdAoreworICAgIGlmICghaXNQYWludGluZ0ZhbGxiYWNrKCkpIHsKKyNp
ZiBQTEFURk9STShNQUMpIHx8IChQTEFURk9STShDSFJPTUlVTSkgJiYgT1MoTUFDX09TX1gpKQor
ICAgICAgICAvLyBGSVhNRTogQ0cgaW1wbGVtZW50YXRpb24gb2YgR3JhcGhpY3NDb250ZXh0Q0c6
OmZpbGxSZWN0IGhhcyBhbiBvd24KKyAgICAgICAgLy8gc2hhZG93IGRyYXdpbmcgbWV0aG9kLCB3
aGljaCBkcmF3cyBhbiBleHRyYSBzaGFkb3cuCisgICAgICAgIC8vIFRoaXMgaXMgYSB3b3JrYXJv
dW5kIGZvciBzd2l0Y2hpbmcgb2ZmIHRoZSBleHRyYSBzaGFkb3cuCisgICAgICAgIC8vIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD02ODg5OQorICAgICAgICBpZiAoY29u
dGV4dC0+aGFzU2hhZG93KCkpIHsKKyAgICAgICAgICAgIEdyYXBoaWNzQ29udGV4dFN0YXRlU2F2
ZXIgc3RhdGVTYXZlcigqY29udGV4dCk7CisgICAgICAgICAgICBjb250ZXh0LT5jbGVhclNoYWRv
dygpOworICAgICAgICAgICAgY29udGV4dC0+ZmlsbFJlY3QobV9ib3VuZGluZ0JveCk7CisgICAg
ICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyNlbmRpZgorICAgICAgICBjb250ZXh0LT5maWxs
UmVjdChtX2JvdW5kaW5nQm94KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBSZW5kZXJT
VkdTaGFwZTo6ZmlsbFNoYXBlKGNvbnRleHQpOworfQorCit2b2lkIFJlbmRlclNWR1JlY3Q6OnN0
cm9rZVNoYXBlKEdyYXBoaWNzQ29udGV4dCogY29udGV4dCkgY29uc3QKK3sKKyAgICBpZiAoIWlz
UGFpbnRpbmdGYWxsYmFjaygpKSB7CisgICAgICAgIGNvbnRleHQtPnN0cm9rZVJlY3QobV9ib3Vu
ZGluZ0JveCwgc3Ryb2tlV2lkdGgoKSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgUmVu
ZGVyU1ZHU2hhcGU6OnN0cm9rZVNoYXBlKGNvbnRleHQpOworfQorCitib29sIFJlbmRlclNWR1Jl
Y3Q6OnNoYXBlRGVwZW5kZW50U3Ryb2tlQ29udGFpbnMoY29uc3QgRmxvYXRQb2ludCYgcG9pbnQp
IGNvbnN0Cit7CisgICAgcmV0dXJuIG1fb3V0ZXJTdHJva2VSZWN0LmNvbnRhaW5zKHBvaW50LCBG
bG9hdFJlY3Q6Okluc2lkZU9yT25TdHJva2UpICYmICFtX2lubmVyU3Ryb2tlUmVjdC5jb250YWlu
cyhwb2ludCwgRmxvYXRSZWN0OjpJbnNpZGVCdXROb3RPblN0cm9rZSk7Cit9CisKK2Jvb2wgUmVu
ZGVyU1ZHUmVjdDo6c2hhcGVEZXBlbmRlbnRGaWxsQ29udGFpbnMoY29uc3QgRmxvYXRQb2ludCYg
cG9pbnQsIGNvbnN0IFdpbmRSdWxlIGZpbGxSdWxlKSBjb25zdAoreworICAgIGlmIChpc1BhaW50
aW5nRmFsbGJhY2soKSkKKyAgICAgICAgcmV0dXJuIFJlbmRlclNWR1NoYXBlOjpzaGFwZURlcGVu
ZGVudEZpbGxDb250YWlucyhwb2ludCwgZmlsbFJ1bGUpOworICAgIHJldHVybiBtX2JvdW5kaW5n
Qm94LmNvbnRhaW5zKHBvaW50LngoKSwgcG9pbnQueSgpKTsKK30KKworfQorCisjZW5kaWYgLy8g
RU5BQkxFKFNWRykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVu
ZGVyU1ZHUmVjdC5oIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZWN0
LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDhlZjI5ZgotLS0gL2Rldi9u
dWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVjdC5oCkBA
IC0wLDAgKzEsNjQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgVW5pdmVyc2l0eSBvZiBT
emVnZWQKKyAqIENvcHlyaWdodCAoQykgMjAxMSBSZW5hdGEgSG9kb3ZhbiA8cmVuaUB3ZWJraXQu
b3JnPgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIFVOSVZFUlNJVFkgT0YgU1pFR0VEIGBgQVMgSVMnJyBBTkQgQU5Z
CisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAg
SU4gTk8gRVZFTlQgU0hBTEwgVU5JVkVSU0lUWSBPRiBTWkVHRUQgT1IKKyAqIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAq
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIFJlbmRlclNWR1Jl
Y3RfaAorI2RlZmluZSBSZW5kZXJTVkdSZWN0X2gKKworI2lmIEVOQUJMRShTVkcpCisjaW5jbHVk
ZSAiUmVuZGVyU1ZHUGF0aC5oIgorI2luY2x1ZGUgIlNWR1JlY3RFbGVtZW50LmgiCisKK25hbWVz
cGFjZSBXZWJDb3JlIHsKKworY2xhc3MgUmVuZGVyU1ZHUmVjdCA6IHB1YmxpYyBSZW5kZXJTVkdT
aGFwZSB7CitwdWJsaWM6CisgICAgZXhwbGljaXQgUmVuZGVyU1ZHUmVjdChTVkdSZWN0RWxlbWVu
dCopOworICAgIHZpcnR1YWwgflJlbmRlclNWR1JlY3QoKTsKKworcHJpdmF0ZToKKyAgICB2aXJ0
dWFsIGJvb2wgaXNTVkdSZWN0KCkgY29uc3QgeyByZXR1cm4gdHJ1ZTsgfQorICAgIHZpcnR1YWwg
Y29uc3QgY2hhciogcmVuZGVyTmFtZSgpIGNvbnN0IHsgcmV0dXJuICJSZW5kZXJTVkdQYXRoIjsg
fQorCisgICAgdmlydHVhbCB2b2lkIGNyZWF0ZVNoYXBlKCk7CisgICAgdmlydHVhbCBib29sIGlz
RW1wdHkoKSBjb25zdCB7IHJldHVybiBoYXNQYXRoKCkgPyBSZW5kZXJTVkdTaGFwZTo6aXNFbXB0
eSgpIDogbV9ib3VuZGluZ0JveC5pc0VtcHR5KCk7IH07CisgICAgdmlydHVhbCB2b2lkIGZpbGxT
aGFwZShHcmFwaGljc0NvbnRleHQqKSBjb25zdDsKKyAgICB2aXJ0dWFsIHZvaWQgc3Ryb2tlU2hh
cGUoR3JhcGhpY3NDb250ZXh0KikgY29uc3Q7CisgICAgdmlydHVhbCBGbG9hdFJlY3Qgb2JqZWN0
Qm91bmRpbmdCb3goKSBjb25zdDsKKyAgICB2aXJ0dWFsIEZsb2F0UmVjdCBzdHJva2VCb3VuZGlu
Z0JveCgpIGNvbnN0OworICAgIHZpcnR1YWwgYm9vbCBzaGFwZURlcGVuZGVudFN0cm9rZUNvbnRh
aW5zKGNvbnN0IEZsb2F0UG9pbnQmKSBjb25zdDsKKyAgICB2aXJ0dWFsIGJvb2wgc2hhcGVEZXBl
bmRlbnRGaWxsQ29udGFpbnMoY29uc3QgRmxvYXRQb2ludCYsIGNvbnN0IFdpbmRSdWxlKSBjb25z
dDsKKworcHJpdmF0ZToKKyAgICBGbG9hdFJlY3QgbV9ib3VuZGluZ0JveDsKKyAgICBGbG9hdFJl
Y3QgbV9pbm5lclN0cm9rZVJlY3Q7CisgICAgRmxvYXRSZWN0IG1fb3V0ZXJTdHJva2VSZWN0Owor
fTsKKworfQorCisjZW5kaWYgLy8gRU5BQkxFKFNWRykKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJjZS5oIGIvU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJjZS5oCmluZGV4IGE2N2JhNzMuLmUw
MjAxNTQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZH
UmVzb3VyY2UuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jl
c291cmNlLmgKQEAgLTIxLDYgKzIxLDcgQEAKICNkZWZpbmUgUmVuZGVyU1ZHUmVzb3VyY2VfaAog
CiAjaWYgRU5BQkxFKFNWRykKKyNpbmNsdWRlICJSZW5kZXJTVkdTaGFwZS5oIgogI2luY2x1ZGUg
IlJlbmRlclN0eWxlQ29uc3RhbnRzLmgiCiAjaW5jbHVkZSAiU1ZHRG9jdW1lbnRFeHRlbnNpb25z
LmgiCiAKQEAgLTYxLDcgKzYyLDcgQEAgcHVibGljOgogICAgIHZpcnR1YWwgdm9pZCByZW1vdmVD
bGllbnRGcm9tQ2FjaGUoUmVuZGVyT2JqZWN0KiwgYm9vbCBtYXJrRm9ySW52YWxpZGF0aW9uID0g
dHJ1ZSkgPSAwOwogCiAgICAgdmlydHVhbCBib29sIGFwcGx5UmVzb3VyY2UoUmVuZGVyT2JqZWN0
KiwgUmVuZGVyU3R5bGUqLCBHcmFwaGljc0NvbnRleHQqJiwgdW5zaWduZWQgc2hvcnQgcmVzb3Vy
Y2VNb2RlKSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIHBvc3RBcHBseVJlc291cmNlKFJlbmRlck9i
amVjdCosIEdyYXBoaWNzQ29udGV4dComLCB1bnNpZ25lZCBzaG9ydCwgY29uc3QgUGF0aCopIHsg
fQorICAgIHZpcnR1YWwgdm9pZCBwb3N0QXBwbHlSZXNvdXJjZShSZW5kZXJPYmplY3QqLCBHcmFw
aGljc0NvbnRleHQqJiwgdW5zaWduZWQgc2hvcnQsIGNvbnN0IFBhdGgqLCBjb25zdCBSZW5kZXJT
VkdTaGFwZSopIHsgfQogICAgIHZpcnR1YWwgRmxvYXRSZWN0IHJlc291cmNlQm91bmRpbmdCb3go
UmVuZGVyT2JqZWN0KikgPSAwOwogCiAgICAgdmlydHVhbCBSZW5kZXJTVkdSZXNvdXJjZVR5cGUg
cmVzb3VyY2VUeXBlKCkgY29uc3QgPSAwOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJjZUNsaXBwZXIuY3BwIGIvU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJjZUNsaXBwZXIuY3BwCmluZGV4IDc3YWFhZTUu
LjVkNTAwZjAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVy
U1ZHUmVzb3VyY2VDbGlwcGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3Zn
L1JlbmRlclNWR1Jlc291cmNlQ2xpcHBlci5jcHAKQEAgLTI0Niw3ICsyNDYsNyBAQCBib29sIFJl
bmRlclNWR1Jlc291cmNlQ2xpcHBlcjo6ZHJhd0NvbnRlbnRJbnRvTWFza0ltYWdlKENsaXBwZXJE
YXRhKiBjbGlwcGVyRGF0YQogICAgICAgICB9CiAKICAgICAgICAgLy8gT25seSBzaGFwZXMsIHBh
dGhzIGFuZCB0ZXh0cyBhcmUgYWxsb3dlZCBmb3IgY2xpcHBpbmcuCi0gICAgICAgIGlmICghcmVu
ZGVyZXItPmlzU1ZHUGF0aCgpICYmICFyZW5kZXJlci0+aXNTVkdUZXh0KCkpCisgICAgICAgIGlm
ICghcmVuZGVyZXItPmlzU1ZHU2hhcGUoKSAmJiAhcmVuZGVyZXItPmlzU1ZHVGV4dCgpKQogICAg
ICAgICAgICAgY29udGludWU7CiAKICAgICAgICAgLy8gU2F2ZSB0aGUgb2xkIFJlbmRlclN0eWxl
IG9mIHRoZSBjdXJyZW50IG9iamVjdCBmb3IgcmVzdG9yaW5nIGFmdGVyIGRyYXdpbmcKQEAgLTI4
OCw3ICsyODgsNyBAQCB2b2lkIFJlbmRlclNWR1Jlc291cmNlQ2xpcHBlcjo6Y2FsY3VsYXRlQ2xp
cENvbnRlbnRSZXBhaW50UmVjdCgpCiAgICAgICAgIFJlbmRlck9iamVjdCogcmVuZGVyZXIgPSBj
aGlsZE5vZGUtPnJlbmRlcmVyKCk7CiAgICAgICAgIGlmICghY2hpbGROb2RlLT5pc1NWR0VsZW1l
bnQoKSB8fCAhc3RhdGljX2Nhc3Q8U1ZHRWxlbWVudCo+KGNoaWxkTm9kZSktPmlzU3R5bGVkKCkg
fHwgIXJlbmRlcmVyKQogICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIGlmICghcmVuZGVy
ZXItPmlzU1ZHUGF0aCgpICYmICFyZW5kZXJlci0+aXNTVkdUZXh0KCkgJiYgIXJlbmRlcmVyLT5p
c1NWR1NoYWRvd1RyZWVSb290Q29udGFpbmVyKCkpCisgICAgICAgIGlmICghcmVuZGVyZXItPmlz
U1ZHU2hhcGUoKSAmJiAhcmVuZGVyZXItPmlzU1ZHVGV4dCgpICYmICFyZW5kZXJlci0+aXNTVkdT
aGFkb3dUcmVlUm9vdENvbnRhaW5lcigpKQogICAgICAgICAgICAgY29udGludWU7CiAgICAgICAg
IFJlbmRlclN0eWxlKiBzdHlsZSA9IHJlbmRlcmVyLT5zdHlsZSgpOwogICAgICAgICBpZiAoIXN0
eWxlIHx8IHN0eWxlLT5kaXNwbGF5KCkgPT0gTk9ORSB8fCBzdHlsZS0+dmlzaWJpbGl0eSgpICE9
IFZJU0lCTEUpCkBAIC0zMTgsNyArMzE4LDcgQEAgYm9vbCBSZW5kZXJTVkdSZXNvdXJjZUNsaXBw
ZXI6OmhpdFRlc3RDbGlwQ29udGVudChjb25zdCBGbG9hdFJlY3QmIG9iamVjdEJvdW5kaW4KICAg
ICAgICAgUmVuZGVyT2JqZWN0KiByZW5kZXJlciA9IGNoaWxkTm9kZS0+cmVuZGVyZXIoKTsKICAg
ICAgICAgaWYgKCFjaGlsZE5vZGUtPmlzU1ZHRWxlbWVudCgpIHx8ICFzdGF0aWNfY2FzdDxTVkdF
bGVtZW50Kj4oY2hpbGROb2RlKS0+aXNTdHlsZWQoKSB8fCAhcmVuZGVyZXIpCiAgICAgICAgICAg
ICBjb250aW51ZTsKLSAgICAgICAgaWYgKCFyZW5kZXJlci0+aXNTVkdQYXRoKCkgJiYgIXJlbmRl
cmVyLT5pc1NWR1RleHQoKSAmJiAhcmVuZGVyZXItPmlzU1ZHU2hhZG93VHJlZVJvb3RDb250YWlu
ZXIoKSkKKyAgICAgICAgaWYgKCFyZW5kZXJlci0+aXNTVkdTaGFwZSgpICYmICFyZW5kZXJlci0+
aXNTVkdUZXh0KCkgJiYgIXJlbmRlcmVyLT5pc1NWR1NoYWRvd1RyZWVSb290Q29udGFpbmVyKCkp
CiAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgSW50UG9pbnQgaGl0UG9pbnQ7CiAgICAg
ICAgIEhpdFRlc3RSZXN1bHQgcmVzdWx0KGhpdFBvaW50KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VDb250YWluZXIuY3BwIGIvU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJjZUNvbnRhaW5lci5jcHAK
aW5kZXggMjlkMzVlOS4uYWRhNjkxMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJjZUNvbnRhaW5lci5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJjZUNvbnRhaW5lci5jcHAKQEAgLTE4NCw3
ICsxODQsNyBAQCB2b2lkIFJlbmRlclNWR1Jlc291cmNlQ29udGFpbmVyOjpyZWdpc3RlclJlc291
cmNlKCkKIC8vIEZJWE1FOiBUaGlzIGRvZXMgbm90IGJlbG9uZyBoZXJlLgogQWZmaW5lVHJhbnNm
b3JtIFJlbmRlclNWR1Jlc291cmNlQ29udGFpbmVyOjp0cmFuc2Zvcm1Pbk5vblNjYWxpbmdTdHJv
a2UoUmVuZGVyT2JqZWN0KiBvYmplY3QsIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgcmVzb3VyY2VU
cmFuc2Zvcm0pCiB7Ci0gICAgaWYgKCFvYmplY3QtPmlzU1ZHUGF0aCgpKQorICAgIGlmICghb2Jq
ZWN0LT5pc1NWR1NoYXBlKCkpCiAgICAgICAgIHJldHVybiByZXNvdXJjZVRyYW5zZm9ybTsKIAog
ICAgIFNWR1N0eWxlZFRyYW5zZm9ybWFibGVFbGVtZW50KiBlbGVtZW50ID0gc3RhdGljX2Nhc3Q8
U1ZHU3R5bGVkVHJhbnNmb3JtYWJsZUVsZW1lbnQqPihvYmplY3QtPm5vZGUoKSk7CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291cmNlRmlsdGVy
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VGaWx0
ZXIuY3BwCmluZGV4IDAxYTIwNWUuLjE0ZGRmODEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VGaWx0ZXIuY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VGaWx0ZXIuY3BwCkBAIC0yNTYs
NyArMjU2LDcgQEAgYm9vbCBSZW5kZXJTVkdSZXNvdXJjZUZpbHRlcjo6YXBwbHlSZXNvdXJjZShS
ZW5kZXJPYmplY3QqIG9iamVjdCwgUmVuZGVyU3R5bGUqLAogICAgIHJldHVybiB0cnVlOwogfQog
Ci12b2lkIFJlbmRlclNWR1Jlc291cmNlRmlsdGVyOjpwb3N0QXBwbHlSZXNvdXJjZShSZW5kZXJP
YmplY3QqIG9iamVjdCwgR3JhcGhpY3NDb250ZXh0KiYgY29udGV4dCwgdW5zaWduZWQgc2hvcnQg
cmVzb3VyY2VNb2RlLCBjb25zdCBQYXRoKikKK3ZvaWQgUmVuZGVyU1ZHUmVzb3VyY2VGaWx0ZXI6
OnBvc3RBcHBseVJlc291cmNlKFJlbmRlck9iamVjdCogb2JqZWN0LCBHcmFwaGljc0NvbnRleHQq
JiBjb250ZXh0LCB1bnNpZ25lZCBzaG9ydCByZXNvdXJjZU1vZGUsIGNvbnN0IFBhdGgqLCBjb25z
dCBSZW5kZXJTVkdTaGFwZSopCiB7CiAgICAgQVNTRVJUKG9iamVjdCk7CiAgICAgQVNTRVJUKGNv
bnRleHQpOwpAQCAtMjg2LDcgKzI4Niw3IEBAIHZvaWQgUmVuZGVyU1ZHUmVzb3VyY2VGaWx0ZXI6
OnBvc3RBcHBseVJlc291cmNlKFJlbmRlck9iamVjdCogb2JqZWN0LCBHcmFwaGljc0NvCiAgICAg
fQogCiAgICAgRmlsdGVyRWZmZWN0KiBsYXN0RWZmZWN0ID0gZmlsdGVyRGF0YS0+YnVpbGRlci0+
bGFzdEVmZmVjdCgpOwotICAgIAorCiAgICAgaWYgKGxhc3RFZmZlY3QgJiYgIWZpbHRlckRhdGEt
PmJvdW5kYXJpZXMuaXNFbXB0eSgpICYmICFsYXN0RWZmZWN0LT5maWx0ZXJQcmltaXRpdmVTdWJy
ZWdpb24oKS5pc0VtcHR5KCkpIHsKICAgICAgICAgLy8gVGhpcyBpcyB0aGUgcmVhbCBmaWx0ZXJp
bmcgb2YgdGhlIG9iamVjdC4gSXQganVzdCBuZWVkcyB0byBiZSBjYWxsZWQgb24gdGhlCiAgICAg
ICAgIC8vIGluaXRpYWwgZmlsdGVyaW5nIHByb2Nlc3MuIFdlIGp1c3QgdGFrZSB0aGUgc3RvcmVk
IGZpbHRlciByZXN1bHQgb24gYQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L3N2Zy9SZW5kZXJTVkdSZXNvdXJjZUZpbHRlci5oIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L3N2Zy9SZW5kZXJTVkdSZXNvdXJjZUZpbHRlci5oCmluZGV4IDlhZDdjN2EuLjkzYmI2YjMgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VG
aWx0ZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291
cmNlRmlsdGVyLmgKQEAgLTcyLDcgKzcyLDcgQEAgcHVibGljOgogICAgIHZpcnR1YWwgdm9pZCBy
ZW1vdmVDbGllbnRGcm9tQ2FjaGUoUmVuZGVyT2JqZWN0KiwgYm9vbCBtYXJrRm9ySW52YWxpZGF0
aW9uID0gdHJ1ZSk7CiAKICAgICB2aXJ0dWFsIGJvb2wgYXBwbHlSZXNvdXJjZShSZW5kZXJPYmpl
Y3QqLCBSZW5kZXJTdHlsZSosIEdyYXBoaWNzQ29udGV4dComLCB1bnNpZ25lZCBzaG9ydCByZXNv
dXJjZU1vZGUpOwotICAgIHZpcnR1YWwgdm9pZCBwb3N0QXBwbHlSZXNvdXJjZShSZW5kZXJPYmpl
Y3QqLCBHcmFwaGljc0NvbnRleHQqJiwgdW5zaWduZWQgc2hvcnQgcmVzb3VyY2VNb2RlLCBjb25z
dCBQYXRoKik7CisgICAgdmlydHVhbCB2b2lkIHBvc3RBcHBseVJlc291cmNlKFJlbmRlck9iamVj
dCosIEdyYXBoaWNzQ29udGV4dComLCB1bnNpZ25lZCBzaG9ydCByZXNvdXJjZU1vZGUsIGNvbnN0
IFBhdGgqLCBjb25zdCBSZW5kZXJTVkdTaGFwZSopOwogCiAgICAgdmlydHVhbCBGbG9hdFJlY3Qg
cmVzb3VyY2VCb3VuZGluZ0JveChSZW5kZXJPYmplY3QqKTsKIApkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJjZUdyYWRpZW50LmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VHcmFkaWVudC5jcHAK
aW5kZXggOTA2OTkzNC4uNDM3YjE4NiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJjZUdyYWRpZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291cmNlR3JhZGllbnQuY3BwCkBAIC0yNyw2ICsy
Nyw3IEBACiAKICNpbmNsdWRlICJHcmFkaWVudEF0dHJpYnV0ZXMuaCIKICNpbmNsdWRlICJHcmFw
aGljc0NvbnRleHQuaCIKKyNpbmNsdWRlICJSZW5kZXJTVkdTaGFwZS5oIgogI2luY2x1ZGUgIlJl
bmRlclNWR1RleHQuaCIKICNpbmNsdWRlICJTVkdJbWFnZUJ1ZmZlclRvb2xzLmgiCiAjaW5jbHVk
ZSAiU1ZHUmVuZGVyU3VwcG9ydC5oIgpAQCAtMjMxLDcgKzIzMiw3IEBAIGJvb2wgUmVuZGVyU1ZH
UmVzb3VyY2VHcmFkaWVudDo6YXBwbHlSZXNvdXJjZShSZW5kZXJPYmplY3QqIG9iamVjdCwgUmVu
ZGVyU3R5bGUqCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLXZvaWQgUmVuZGVyU1ZHUmVzb3VyY2VH
cmFkaWVudDo6cG9zdEFwcGx5UmVzb3VyY2UoUmVuZGVyT2JqZWN0KiBvYmplY3QsIEdyYXBoaWNz
Q29udGV4dComIGNvbnRleHQsIHVuc2lnbmVkIHNob3J0IHJlc291cmNlTW9kZSwgY29uc3QgUGF0
aCogcGF0aCkKK3ZvaWQgUmVuZGVyU1ZHUmVzb3VyY2VHcmFkaWVudDo6cG9zdEFwcGx5UmVzb3Vy
Y2UoUmVuZGVyT2JqZWN0KiBvYmplY3QsIEdyYXBoaWNzQ29udGV4dComIGNvbnRleHQsIHVuc2ln
bmVkIHNob3J0IHJlc291cmNlTW9kZSwgY29uc3QgUGF0aCogcGF0aCwgY29uc3QgUmVuZGVyU1ZH
U2hhcGUqIHNoYXBlKQogewogICAgIEFTU0VSVChjb250ZXh0KTsKICAgICBBU1NFUlQocmVzb3Vy
Y2VNb2RlICE9IEFwcGx5VG9EZWZhdWx0TW9kZSk7CkBAIC0yNTksMTEgKzI2MCwxOSBAQCB2b2lk
IFJlbmRlclNWR1Jlc291cmNlR3JhZGllbnQ6OnBvc3RBcHBseVJlc291cmNlKFJlbmRlck9iamVj
dCogb2JqZWN0LCBHcmFwaGljcwogI2Vsc2UKICAgICAgICAgVU5VU0VEX1BBUkFNKG9iamVjdCk7
CiAjZW5kaWYKLSAgICB9IGVsc2UgaWYgKHBhdGgpIHsKLSAgICAgICAgaWYgKHJlc291cmNlTW9k
ZSAmIEFwcGx5VG9GaWxsTW9kZSkKLSAgICAgICAgICAgIGNvbnRleHQtPmZpbGxQYXRoKCpwYXRo
KTsKLSAgICAgICAgZWxzZSBpZiAocmVzb3VyY2VNb2RlICYgQXBwbHlUb1N0cm9rZU1vZGUpCi0g
ICAgICAgICAgICBjb250ZXh0LT5zdHJva2VQYXRoKCpwYXRoKTsKKyAgICB9IGVsc2UgeworICAg
ICAgICBpZiAocmVzb3VyY2VNb2RlICYgQXBwbHlUb0ZpbGxNb2RlKSB7CisgICAgICAgICAgICBp
ZiAocGF0aCkKKyAgICAgICAgICAgICAgICBjb250ZXh0LT5maWxsUGF0aCgqcGF0aCk7CisgICAg
ICAgICAgICBlbHNlIGlmIChzaGFwZSkKKyAgICAgICAgICAgICAgICBzaGFwZS0+ZmlsbFNoYXBl
KGNvbnRleHQpOworICAgICAgICB9CisgICAgICAgIGlmIChyZXNvdXJjZU1vZGUgJiBBcHBseVRv
U3Ryb2tlTW9kZSkgeworICAgICAgICAgICAgaWYgKHBhdGgpCisgICAgICAgICAgICAgICAgY29u
dGV4dC0+c3Ryb2tlUGF0aCgqcGF0aCk7CisgICAgICAgICAgICBlbHNlIGlmIChzaGFwZSkKKyAg
ICAgICAgICAgICAgICBzaGFwZS0+c3Ryb2tlU2hhcGUoY29udGV4dCk7CisgICAgICAgIH0KICAg
ICB9CiAKICAgICBjb250ZXh0LT5yZXN0b3JlKCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291cmNlR3JhZGllbnQuaCBiL1NvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VHcmFkaWVudC5oCmluZGV4IGM5ZmQ5
MzYuLmI3ZTc4MGMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVu
ZGVyU1ZHUmVzb3VyY2VHcmFkaWVudC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9z
dmcvUmVuZGVyU1ZHUmVzb3VyY2VHcmFkaWVudC5oCkBAIC01MCw3ICs1MCw3IEBAIHB1YmxpYzoK
ICAgICB2aXJ0dWFsIHZvaWQgcmVtb3ZlQ2xpZW50RnJvbUNhY2hlKFJlbmRlck9iamVjdCosIGJv
b2wgbWFya0ZvckludmFsaWRhdGlvbiA9IHRydWUpOwogCiAgICAgdmlydHVhbCBib29sIGFwcGx5
UmVzb3VyY2UoUmVuZGVyT2JqZWN0KiwgUmVuZGVyU3R5bGUqLCBHcmFwaGljc0NvbnRleHQqJiwg
dW5zaWduZWQgc2hvcnQgcmVzb3VyY2VNb2RlKTsKLSAgICB2aXJ0dWFsIHZvaWQgcG9zdEFwcGx5
UmVzb3VyY2UoUmVuZGVyT2JqZWN0KiwgR3JhcGhpY3NDb250ZXh0KiYsIHVuc2lnbmVkIHNob3J0
IHJlc291cmNlTW9kZSwgY29uc3QgUGF0aCopOworICAgIHZpcnR1YWwgdm9pZCBwb3N0QXBwbHlS
ZXNvdXJjZShSZW5kZXJPYmplY3QqLCBHcmFwaGljc0NvbnRleHQqJiwgdW5zaWduZWQgc2hvcnQg
cmVzb3VyY2VNb2RlLCBjb25zdCBQYXRoKiwgY29uc3QgUmVuZGVyU1ZHU2hhcGUqKTsKICAgICB2
aXJ0dWFsIEZsb2F0UmVjdCByZXNvdXJjZUJvdW5kaW5nQm94KFJlbmRlck9iamVjdCopIHsgcmV0
dXJuIEZsb2F0UmVjdCgpOyB9CiAKIHByb3RlY3RlZDoKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VQYXR0ZXJuLmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VQYXR0ZXJuLmNwcAppbmRleCA1
ZGMxNWI2Li40ZDA5ZTExIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3Zn
L1JlbmRlclNWR1Jlc291cmNlUGF0dGVybi5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJjZVBhdHRlcm4uY3BwCkBAIC0xODgsMTYgKzE4OCwyMiBA
QCBib29sIFJlbmRlclNWR1Jlc291cmNlUGF0dGVybjo6YXBwbHlSZXNvdXJjZShSZW5kZXJPYmpl
Y3QqIG9iamVjdCwgUmVuZGVyU3R5bGUqCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLXZvaWQgUmVu
ZGVyU1ZHUmVzb3VyY2VQYXR0ZXJuOjpwb3N0QXBwbHlSZXNvdXJjZShSZW5kZXJPYmplY3QqLCBH
cmFwaGljc0NvbnRleHQqJiBjb250ZXh0LCB1bnNpZ25lZCBzaG9ydCByZXNvdXJjZU1vZGUsIGNv
bnN0IFBhdGgqIHBhdGgpCit2b2lkIFJlbmRlclNWR1Jlc291cmNlUGF0dGVybjo6cG9zdEFwcGx5
UmVzb3VyY2UoUmVuZGVyT2JqZWN0KiwgR3JhcGhpY3NDb250ZXh0KiYgY29udGV4dCwgdW5zaWdu
ZWQgc2hvcnQgcmVzb3VyY2VNb2RlLCBjb25zdCBQYXRoKiBwYXRoLCBjb25zdCBSZW5kZXJTVkdT
aGFwZSogc2hhcGUpCiB7CiAgICAgQVNTRVJUKGNvbnRleHQpOwogICAgIEFTU0VSVChyZXNvdXJj
ZU1vZGUgIT0gQXBwbHlUb0RlZmF1bHRNb2RlKTsKIAotICAgIGlmIChwYXRoICYmICEocmVzb3Vy
Y2VNb2RlICYgQXBwbHlUb1RleHRNb2RlKSkgewotICAgICAgICBpZiAocmVzb3VyY2VNb2RlICYg
QXBwbHlUb0ZpbGxNb2RlKQorICAgIGlmIChyZXNvdXJjZU1vZGUgJiBBcHBseVRvRmlsbE1vZGUp
IHsKKyAgICAgICAgaWYgKHBhdGgpCiAgICAgICAgICAgICBjb250ZXh0LT5maWxsUGF0aCgqcGF0
aCk7Ci0gICAgICAgIGVsc2UgaWYgKHJlc291cmNlTW9kZSAmIEFwcGx5VG9TdHJva2VNb2RlKQor
ICAgICAgICBlbHNlIGlmIChzaGFwZSkKKyAgICAgICAgICAgIHNoYXBlLT5maWxsU2hhcGUoY29u
dGV4dCk7CisgICAgfQorICAgIGlmIChyZXNvdXJjZU1vZGUgJiBBcHBseVRvU3Ryb2tlTW9kZSkg
eworICAgICAgICBpZiAocGF0aCkKICAgICAgICAgICAgIGNvbnRleHQtPnN0cm9rZVBhdGgoKnBh
dGgpOworICAgICAgICBlbHNlIGlmIChzaGFwZSkKKyAgICAgICAgICAgIHNoYXBlLT5zdHJva2VT
aGFwZShjb250ZXh0KTsKICAgICB9CiAKICAgICBjb250ZXh0LT5yZXN0b3JlKCk7CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291cmNlUGF0dGVy
bi5oIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJjZVBhdHRl
cm4uaAppbmRleCA5ZTg2NDg2Li40MDQ5MjQyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291cmNlUGF0dGVybi5oCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VQYXR0ZXJuLmgKQEAgLTUyLDcgKzUy
LDcgQEAgcHVibGljOgogICAgIHZpcnR1YWwgdm9pZCByZW1vdmVDbGllbnRGcm9tQ2FjaGUoUmVu
ZGVyT2JqZWN0KiwgYm9vbCBtYXJrRm9ySW52YWxpZGF0aW9uID0gdHJ1ZSk7CiAKICAgICB2aXJ0
dWFsIGJvb2wgYXBwbHlSZXNvdXJjZShSZW5kZXJPYmplY3QqLCBSZW5kZXJTdHlsZSosIEdyYXBo
aWNzQ29udGV4dComLCB1bnNpZ25lZCBzaG9ydCByZXNvdXJjZU1vZGUpOwotICAgIHZpcnR1YWwg
dm9pZCBwb3N0QXBwbHlSZXNvdXJjZShSZW5kZXJPYmplY3QqLCBHcmFwaGljc0NvbnRleHQqJiwg
dW5zaWduZWQgc2hvcnQgcmVzb3VyY2VNb2RlLCBjb25zdCBQYXRoKik7CisgICAgdmlydHVhbCB2
b2lkIHBvc3RBcHBseVJlc291cmNlKFJlbmRlck9iamVjdCosIEdyYXBoaWNzQ29udGV4dComLCB1
bnNpZ25lZCBzaG9ydCByZXNvdXJjZU1vZGUsIGNvbnN0IFBhdGgqLCBjb25zdCBSZW5kZXJTVkdT
aGFwZSopOwogICAgIHZpcnR1YWwgRmxvYXRSZWN0IHJlc291cmNlQm91bmRpbmdCb3goUmVuZGVy
T2JqZWN0KikgeyByZXR1cm4gRmxvYXRSZWN0KCk7IH0KIAogICAgIHZpcnR1YWwgUmVuZGVyU1ZH
UmVzb3VyY2VUeXBlIHJlc291cmNlVHlwZSgpIGNvbnN0IHsgcmV0dXJuIHNfcmVzb3VyY2VUeXBl
OyB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jl
c291cmNlU29saWRDb2xvci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRl
clNWR1Jlc291cmNlU29saWRDb2xvci5jcHAKaW5kZXggNWJlMmFmNi4uNjNkZjc1MSAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJjZVNvbGlk
Q29sb3IuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVz
b3VyY2VTb2xpZENvbG9yLmNwcApAQCAtMjMsNiArMjMsNyBAQAogI2luY2x1ZGUgIlJlbmRlclNW
R1Jlc291cmNlU29saWRDb2xvci5oIgogCiAjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCisj
aW5jbHVkZSAiUmVuZGVyU1ZHU2hhcGUuaCIKICNpbmNsdWRlICJSZW5kZXJTdHlsZS5oIgogI2lu
Y2x1ZGUgIlNWR1JlbmRlclN1cHBvcnQuaCIKIApAQCAtNzQsMTYgKzc1LDIyIEBAIGJvb2wgUmVu
ZGVyU1ZHUmVzb3VyY2VTb2xpZENvbG9yOjphcHBseVJlc291cmNlKFJlbmRlck9iamVjdCogb2Jq
ZWN0LCBSZW5kZXJTdHlsCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLXZvaWQgUmVuZGVyU1ZHUmVz
b3VyY2VTb2xpZENvbG9yOjpwb3N0QXBwbHlSZXNvdXJjZShSZW5kZXJPYmplY3QqLCBHcmFwaGlj
c0NvbnRleHQqJiBjb250ZXh0LCB1bnNpZ25lZCBzaG9ydCByZXNvdXJjZU1vZGUsIGNvbnN0IFBh
dGgqIHBhdGgpCit2b2lkIFJlbmRlclNWR1Jlc291cmNlU29saWRDb2xvcjo6cG9zdEFwcGx5UmVz
b3VyY2UoUmVuZGVyT2JqZWN0KiwgR3JhcGhpY3NDb250ZXh0KiYgY29udGV4dCwgdW5zaWduZWQg
c2hvcnQgcmVzb3VyY2VNb2RlLCBjb25zdCBQYXRoKiBwYXRoLCBjb25zdCBSZW5kZXJTVkdTaGFw
ZSogc2hhcGUpCiB7CiAgICAgQVNTRVJUKGNvbnRleHQpOwogICAgIEFTU0VSVChyZXNvdXJjZU1v
ZGUgIT0gQXBwbHlUb0RlZmF1bHRNb2RlKTsKIAotICAgIGlmIChwYXRoICYmICEocmVzb3VyY2VN
b2RlICYgQXBwbHlUb1RleHRNb2RlKSkgewotICAgICAgICBpZiAocmVzb3VyY2VNb2RlICYgQXBw
bHlUb0ZpbGxNb2RlKQorICAgIGlmIChyZXNvdXJjZU1vZGUgJiBBcHBseVRvRmlsbE1vZGUpIHsK
KyAgICAgICAgaWYgKHBhdGgpCiAgICAgICAgICAgICBjb250ZXh0LT5maWxsUGF0aCgqcGF0aCk7
Ci0gICAgICAgIGVsc2UgaWYgKHJlc291cmNlTW9kZSAmIEFwcGx5VG9TdHJva2VNb2RlKQorICAg
ICAgICBlbHNlIGlmIChzaGFwZSkKKyAgICAgICAgICAgIHNoYXBlLT5maWxsU2hhcGUoY29udGV4
dCk7CisgICAgfQorICAgIGlmIChyZXNvdXJjZU1vZGUgJiBBcHBseVRvU3Ryb2tlTW9kZSkgewor
ICAgICAgICBpZiAocGF0aCkKICAgICAgICAgICAgIGNvbnRleHQtPnN0cm9rZVBhdGgoKnBhdGgp
OworICAgICAgICBlbHNlIGlmIChzaGFwZSkKKyAgICAgICAgICAgIHNoYXBlLT5zdHJva2VTaGFw
ZShjb250ZXh0KTsKICAgICB9CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VTb2xpZENvbG9yLmggYi9Tb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291cmNlU29saWRDb2xvci5oCmluZGV4IDAyY2ViMzEu
LjhiYmZkY2QgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVy
U1ZHUmVzb3VyY2VTb2xpZENvbG9yLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2
Zy9SZW5kZXJTVkdSZXNvdXJjZVNvbGlkQ29sb3IuaApAQCAtMzYsNyArMzYsNyBAQCBwdWJsaWM6
CiAgICAgdmlydHVhbCB2b2lkIHJlbW92ZUNsaWVudEZyb21DYWNoZShSZW5kZXJPYmplY3QqLCBi
b29sID0gdHJ1ZSkgeyB9CiAKICAgICB2aXJ0dWFsIGJvb2wgYXBwbHlSZXNvdXJjZShSZW5kZXJP
YmplY3QqLCBSZW5kZXJTdHlsZSosIEdyYXBoaWNzQ29udGV4dComLCB1bnNpZ25lZCBzaG9ydCBy
ZXNvdXJjZU1vZGUpOwotICAgIHZpcnR1YWwgdm9pZCBwb3N0QXBwbHlSZXNvdXJjZShSZW5kZXJP
YmplY3QqLCBHcmFwaGljc0NvbnRleHQqJiwgdW5zaWduZWQgc2hvcnQgcmVzb3VyY2VNb2RlLCBj
b25zdCBQYXRoKik7CisgICAgdmlydHVhbCB2b2lkIHBvc3RBcHBseVJlc291cmNlKFJlbmRlck9i
amVjdCosIEdyYXBoaWNzQ29udGV4dComLCB1bnNpZ25lZCBzaG9ydCByZXNvdXJjZU1vZGUsIGNv
bnN0IFBhdGgqLCBjb25zdCBSZW5kZXJTVkdTaGFwZSopOwogICAgIHZpcnR1YWwgRmxvYXRSZWN0
IHJlc291cmNlQm91bmRpbmdCb3goUmVuZGVyT2JqZWN0KikgeyByZXR1cm4gRmxvYXRSZWN0KCk7
IH0KIAogICAgIHZpcnR1YWwgUmVuZGVyU1ZHUmVzb3VyY2VUeXBlIHJlc291cmNlVHlwZSgpIGNv
bnN0IHsgcmV0dXJuIHNfcmVzb3VyY2VUeXBlOyB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1NoYXBlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9zdmcvUmVuZGVyU1ZHU2hhcGUuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAw
MDAwMDAuLmFlZTdhNmMKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvc3ZnL1JlbmRlclNWR1NoYXBlLmNwcApAQCAtMCwwICsxLDQ2MSBAQAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAwNCwgMjAwNSwgMjAwNyBOaWtvbGFzIFppbW1lcm1hbm4gPHppbW1lcm1hbm5A
a2RlLm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSwgMjAwOCBSb2IgQnVpcyA8YnVp
c0BrZGUub3JnPgorICogQ29weXJpZ2h0IChDKSAyMDA1LCAyMDA3IEVyaWMgU2VpZGVsIDxlcmlj
QHdlYmtpdC5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgR29vZ2xlLCBJbmMuCisgKiBDb3B5
cmlnaHQgKEMpIDIwMDkgRGlyayBTY2h1bHplIDxrcml0QHdlYmtpdC5vcmc+CisgKiBDb3B5cmln
aHQgKEMpIFJlc2VhcmNoIEluIE1vdGlvbiBMaW1pdGVkIDIwMTAuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgSmVmZiBTY2hpbGxlciA8Y29kZWRyZWFkQGdtYWls
LmNvbT4KKyAqIENvcHlyaWdodCAoQykgMjAxMSBSZW5hdGEgSG9kb3ZhbiA8cmVuaUB3ZWJraXQu
b3JnPgorICogQ29weXJpZ2h0IChDKSAyMDExIFVuaXZlcnNpdHkgb2YgU3plZ2VkCisgKgorICog
VGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFu
ZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2Vu
ZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJl
IEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQg
eW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBk
aXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJ
VEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YK
KyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4g
IFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUg
ZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBH
TlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGli
cmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhl
IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0
aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpbmNsdWRl
ICJjb25maWcuaCIKKworI2lmIEVOQUJMRShTVkcpCisjaW5jbHVkZSAiUmVuZGVyU1ZHU2hhcGUu
aCIKKworI2luY2x1ZGUgIkZsb2F0UG9pbnQuaCIKKyNpbmNsdWRlICJGbG9hdFF1YWQuaCIKKyNp
bmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKKyNpbmNsdWRlICJIaXRUZXN0UmVxdWVzdC5oIgor
I2luY2x1ZGUgIkxheW91dFJlcGFpbnRlci5oIgorI2luY2x1ZGUgIlBvaW50ZXJFdmVudHNIaXRS
dWxlcy5oIgorI2luY2x1ZGUgIlJlbmRlclNWR0NvbnRhaW5lci5oIgorI2luY2x1ZGUgIlJlbmRl
clNWR1Jlc291cmNlTWFya2VyLmgiCisjaW5jbHVkZSAiUmVuZGVyU1ZHUmVzb3VyY2VTb2xpZENv
bG9yLmgiCisjaW5jbHVkZSAiU1ZHUGF0aERhdGEuaCIKKyNpbmNsdWRlICJTVkdQYXRoRWxlbWVu
dC5oIgorI2luY2x1ZGUgIlNWR1JlbmRlclN1cHBvcnQuaCIKKyNpbmNsdWRlICJTVkdSZXNvdXJj
ZXMuaCIKKyNpbmNsdWRlICJTVkdSZXNvdXJjZXNDYWNoZS5oIgorI2luY2x1ZGUgIlNWR1N0eWxl
ZFRyYW5zZm9ybWFibGVFbGVtZW50LmgiCisjaW5jbHVkZSAiU1ZHVHJhbnNmb3JtTGlzdC5oIgor
I2luY2x1ZGUgIlNWR1VSSVJlZmVyZW5jZS5oIgorI2luY2x1ZGUgIlN0cm9rZVN0eWxlQXBwbGll
ci5oIgorI2luY2x1ZGUgPHd0Zi9NYXRoRXh0cmFzLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsK
KworUmVuZGVyU1ZHU2hhcGU6OlJlbmRlclNWR1NoYXBlKFNWR1N0eWxlZFRyYW5zZm9ybWFibGVF
bGVtZW50KiBub2RlKQorICAgIDogUmVuZGVyU1ZHTW9kZWxPYmplY3Qobm9kZSkKKyAgICAsIG1f
bmVlZHNCb3VuZGFyaWVzVXBkYXRlKGZhbHNlKSAvLyBEZWZhdWx0IGlzIGZhbHNlLCB0aGUgY2Fj
aGVkIHJlY3RzIGFyZSBlbXB0eSBmcm9tIHRoZSBiZWdpbm5pbmcuCisgICAgLCBtX25lZWRzU2hh
cGVVcGRhdGUodHJ1ZSkgLy8gRGVmYXVsdCBpcyB0cnVlLCBzbyB3ZSBncmFiIGEgUGF0aCBvYmpl
Y3Qgb25jZSBmcm9tIFNWR1N0eWxlZFRyYW5zZm9ybWFibGVFbGVtZW50LgorICAgICwgbV9uZWVk
c1RyYW5zZm9ybVVwZGF0ZSh0cnVlKSAvLyBEZWZhdWx0IGlzIHRydWUsIHNvIHdlIGdyYWIgYSBB
ZmZpbmVUcmFuc2Zvcm0gb2JqZWN0IG9uY2UgZnJvbSBTVkdTdHlsZWRUcmFuc2Zvcm1hYmxlRWxl
bWVudC4KKyAgICAsIG1fZmlsbEZhbGxiYWNrKGZhbHNlKQoreworfQorCitSZW5kZXJTVkdTaGFw
ZTo6UmVuZGVyU1ZHU2hhcGUoU1ZHU3R5bGVkVHJhbnNmb3JtYWJsZUVsZW1lbnQqIG5vZGUsIFBh
dGgqIHBhdGgsIGJvb2wgaXNGaWxsRmFsbGJhY2spCisgICAgOiBSZW5kZXJTVkdNb2RlbE9iamVj
dChub2RlKQorICAgICwgbV9wYXRoKGFkb3B0UHRyKHBhdGgpKQorICAgICwgbV9maWxsRmFsbGJh
Y2soaXNGaWxsRmFsbGJhY2spCit7Cit9CisKK1JlbmRlclNWR1NoYXBlOjp+UmVuZGVyU1ZHU2hh
cGUoKQoreworfQorCit2b2lkIFJlbmRlclNWR1NoYXBlOjpjcmVhdGVTaGFwZSgpCit7CisgICAg
QVNTRVJUKCFtX3BhdGgpOworICAgIG1fcGF0aCA9IGFkb3B0UHRyKG5ldyBQYXRoKTsKKyAgICBB
U1NFUlQoaXNFbXB0eSgpKTsKKworICAgIFNWR1BhdGhFbGVtZW50KiBlbGVtZW50ID0gc3RhdGlj
X2Nhc3Q8U1ZHUGF0aEVsZW1lbnQqPihub2RlKCkpOworICAgIHVwZGF0ZVBhdGhGcm9tR3JhcGhp
Y3NFbGVtZW50KGVsZW1lbnQsIHBhdGgoKSk7Cit9CisKK2Jvb2wgUmVuZGVyU1ZHU2hhcGU6Omlz
RW1wdHkoKSBjb25zdAoreworICAgIHJldHVybiBtX3BhdGgtPmlzRW1wdHkoKTsKK30KKwordm9p
ZCBSZW5kZXJTVkdTaGFwZTo6ZmlsbFNoYXBlKEdyYXBoaWNzQ29udGV4dCogY29udGV4dCkgY29u
c3QKK3sKKyAgICBjb250ZXh0LT5maWxsUGF0aChwYXRoKCkpOworfQorCitGbG9hdFJlY3QgUmVu
ZGVyU1ZHU2hhcGU6Om9iamVjdEJvdW5kaW5nQm94KCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9w
YXRoLT5mYXN0Qm91bmRpbmdSZWN0KCk7Cit9CisKK3ZvaWQgUmVuZGVyU1ZHU2hhcGU6OnN0cm9r
ZVNoYXBlKEdyYXBoaWNzQ29udGV4dCogY29udGV4dCkgY29uc3QKK3sKKyAgICBjb250ZXh0LT5z
dHJva2VQYXRoKHBhdGgoKSk7Cit9CisKK2Jvb2wgUmVuZGVyU1ZHU2hhcGU6OnNoYXBlRGVwZW5k
ZW50U3Ryb2tlQ29udGFpbnMoY29uc3QgRmxvYXRQb2ludCYgcG9pbnQpIGNvbnN0Cit7CisgICAg
Qm91bmRpbmdSZWN0U3Ryb2tlU3R5bGVBcHBsaWVyIGFwcGxpZXIodGhpcywgc3R5bGUoKSk7Cisg
ICAgcmV0dXJuIG1fcGF0aC0+c3Ryb2tlQ29udGFpbnMoJmFwcGxpZXIsIHBvaW50KTsKK30KKwor
Ym9vbCBSZW5kZXJTVkdTaGFwZTo6c2hhcGVEZXBlbmRlbnRGaWxsQ29udGFpbnMoY29uc3QgRmxv
YXRQb2ludCYgcG9pbnQsIGNvbnN0IFdpbmRSdWxlIGZpbGxSdWxlKSBjb25zdAoreworICAgIHJl
dHVybiBtX3BhdGgtPmNvbnRhaW5zKHBvaW50LCBmaWxsUnVsZSk7Cit9CisKK2Jvb2wgUmVuZGVy
U1ZHU2hhcGU6OmZpbGxDb250YWlucyhjb25zdCBGbG9hdFBvaW50JiBwb2ludCwgYm9vbCByZXF1
aXJlc0ZpbGwsIGNvbnN0IFdpbmRSdWxlIGZpbGxSdWxlKQoreworICAgIGlmICghbV9maWxsQm91
bmRpbmdCb3guY29udGFpbnMocG9pbnQpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBD
b2xvciBmYWxsYmFja0NvbG9yOworICAgIGlmIChyZXF1aXJlc0ZpbGwgJiYgIVJlbmRlclNWR1Jl
c291cmNlOjpmaWxsUGFpbnRpbmdSZXNvdXJjZSh0aGlzLCBzdHlsZSgpLCBmYWxsYmFja0NvbG9y
KSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgcmV0dXJuIHNoYXBlRGVwZW5kZW50Rmls
bENvbnRhaW5zKHBvaW50LCBmaWxsUnVsZSk7Cit9CisKK2Jvb2wgUmVuZGVyU1ZHU2hhcGU6OnN0
cm9rZUNvbnRhaW5zKGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50LCBib29sIHJlcXVpcmVzU3Ryb2tl
KQoreworICAgIGlmICghbV9zdHJva2VBbmRNYXJrZXJCb3VuZGluZ0JveC5jb250YWlucyhwb2lu
dCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIENvbG9yIGZhbGxiYWNrQ29sb3I7Cisg
ICAgaWYgKHJlcXVpcmVzU3Ryb2tlICYmICFSZW5kZXJTVkdSZXNvdXJjZTo6c3Ryb2tlUGFpbnRp
bmdSZXNvdXJjZSh0aGlzLCBzdHlsZSgpLCBmYWxsYmFja0NvbG9yKSkKKyAgICAgICAgcmV0dXJu
IGZhbHNlOworCisgICAgaWYgKHNob3VsZFN0cm9rZVplcm9MZW5ndGhTdWJwYXRoKCkpCisgICAg
ICAgIHJldHVybiB6ZXJvTGVuZ3RoU3VicGF0aFJlY3QoKS5jb250YWlucyhwb2ludCk7CisKKyAg
ICBjb25zdCBTVkdSZW5kZXJTdHlsZSogc3ZnU3R5bGUgPSBzdHlsZSgpLT5zdmdTdHlsZSgpOwor
ICAgIGlmICghc3ZnU3R5bGUtPnN0cm9rZURhc2hBcnJheSgpLmlzRW1wdHkoKSB8fCBzdmdTdHls
ZS0+c3Ryb2tlTWl0ZXJMaW1pdCgpICE9IHN2Z1N0eWxlLT5pbml0aWFsU3Ryb2tlTWl0ZXJMaW1p
dCgpCisgICAgICAgIHx8IHN2Z1N0eWxlLT5qb2luU3R5bGUoKSAhPSBzdmdTdHlsZS0+aW5pdGlh
bEpvaW5TdHlsZSgpIHx8IHN2Z1N0eWxlLT5jYXBTdHlsZSgpICE9IHN2Z1N0eWxlLT5pbml0aWFs
Q2FwU3R5bGUoKSB8fCBzdGF0aWNfY2FzdDxTVkdFbGVtZW50Kj4obm9kZSgpKS0+aXNTdHlsZWQo
KSkgeworICAgICAgICBpZiAoIW1fcGF0aCkKKyAgICAgICAgICAgIFJlbmRlclNWR1NoYXBlOjpj
cmVhdGVTaGFwZSgpOworICAgICAgICByZXR1cm4gUmVuZGVyU1ZHU2hhcGU6OnNoYXBlRGVwZW5k
ZW50U3Ryb2tlQ29udGFpbnMocG9pbnQpOworICAgIH0KKyAgICByZXR1cm4gc2hhcGVEZXBlbmRl
bnRTdHJva2VDb250YWlucyhwb2ludCk7Cit9CisKK3ZvaWQgUmVuZGVyU1ZHU2hhcGU6OmxheW91
dCgpCit7CisgICAgTGF5b3V0UmVwYWludGVyIHJlcGFpbnRlcigqdGhpcywgY2hlY2tGb3JSZXBh
aW50RHVyaW5nTGF5b3V0KCkgJiYgc2VsZk5lZWRzTGF5b3V0KCkpOworICAgIFNWR1N0eWxlZFRy
YW5zZm9ybWFibGVFbGVtZW50KiBlbGVtZW50ID0gc3RhdGljX2Nhc3Q8U1ZHU3R5bGVkVHJhbnNm
b3JtYWJsZUVsZW1lbnQqPihub2RlKCkpOworCisgICAgYm9vbCB1cGRhdGVDYWNoZWRCb3VuZGFy
aWVzSW5QYXJlbnRzID0gZmFsc2U7CisKKyAgICBib29sIG5lZWRzU2hhcGVVcGRhdGUgPSBtX25l
ZWRzU2hhcGVVcGRhdGU7CisgICAgaWYgKG5lZWRzU2hhcGVVcGRhdGUpIHsKKyAgICAgICAgc2V0
SXNQYWludGluZ0ZhbGxiYWNrKGZhbHNlKTsKKyAgICAgICAgbV9wYXRoLmNsZWFyKCk7CisgICAg
ICAgIGNyZWF0ZVNoYXBlKCk7CisgICAgICAgIG1fbmVlZHNTaGFwZVVwZGF0ZSA9IGZhbHNlOwor
ICAgICAgICB1cGRhdGVDYWNoZWRCb3VuZGFyaWVzSW5QYXJlbnRzID0gdHJ1ZTsKKyAgICB9CisK
KyAgICBpZiAobV9uZWVkc1RyYW5zZm9ybVVwZGF0ZSkgeworICAgICAgICBtX2xvY2FsVHJhbnNm
b3JtID0gZWxlbWVudC0+YW5pbWF0ZWRMb2NhbFRyYW5zZm9ybSgpOworICAgICAgICBtX25lZWRz
VHJhbnNmb3JtVXBkYXRlID0gZmFsc2U7CisgICAgICAgIHVwZGF0ZUNhY2hlZEJvdW5kYXJpZXNJ
blBhcmVudHMgPSB0cnVlOworICAgIH0KKworICAgIGlmIChtX25lZWRzQm91bmRhcmllc1VwZGF0
ZSkgeworICAgICAgICBzZXRJc1BhaW50aW5nRmFsbGJhY2soZmFsc2UpOworICAgICAgICBtX3Bh
dGguY2xlYXIoKTsKKyAgICAgICAgY3JlYXRlU2hhcGUoKTsKKyAgICAgICAgdXBkYXRlQ2FjaGVk
Qm91bmRhcmllc0luUGFyZW50cyA9IHRydWU7CisgICAgfQorCisgICAgLy8gSW52YWxpZGF0ZSBh
bGwgcmVzb3VyY2VzIG9mIHRoaXMgY2xpZW50IGlmIG91ciBsYXlvdXQgY2hhbmdlZC4KKyAgICBp
ZiAobV9ldmVySGFkTGF5b3V0ICYmIHNlbGZOZWVkc0xheW91dCgpKSB7CisgICAgICAgIFNWR1Jl
c291cmNlc0NhY2hlOjpjbGllbnRMYXlvdXRDaGFuZ2VkKHRoaXMpOworICAgICAgICBtX21hcmtl
ckxheW91dEluZm8uY2xlYXIoKTsKKyAgICB9CisKKyAgICAvLyBBdCB0aGlzIHBvaW50IExheW91
dFJlcGFpbnRlciBhbHJlYWR5IGdyYWJiZWQgdGhlIG9sZCBib3VuZHMsCisgICAgLy8gcmVjYWxj
dWxhdGUgdGhlbSBub3cgc28gcmVwYWludEFmdGVyTGF5b3V0KCkgdXNlcyB0aGUgbmV3IGJvdW5k
cy4KKyAgICBpZiAobmVlZHNTaGFwZVVwZGF0ZSB8fCBtX25lZWRzQm91bmRhcmllc1VwZGF0ZSkg
eworICAgICAgICB1cGRhdGVDYWNoZWRCb3VuZGFyaWVzKCk7CisgICAgICAgIG1fbmVlZHNCb3Vu
ZGFyaWVzVXBkYXRlID0gZmFsc2U7CisgICAgfQorCisgICAgLy8gSWYgb3VyIGJvdW5kcyBjaGFu
Z2VkLCBub3RpZnkgdGhlIHBhcmVudHMuCisgICAgaWYgKHVwZGF0ZUNhY2hlZEJvdW5kYXJpZXNJ
blBhcmVudHMpCisgICAgICAgIFJlbmRlclNWR01vZGVsT2JqZWN0OjpzZXROZWVkc0JvdW5kYXJp
ZXNVcGRhdGUoKTsKKworICAgIHJlcGFpbnRlci5yZXBhaW50QWZ0ZXJMYXlvdXQoKTsKKyAgICBz
ZXROZWVkc0xheW91dChmYWxzZSk7Cit9CisKK2Jvb2wgUmVuZGVyU1ZHU2hhcGU6OnNob3VsZFN0
cm9rZVplcm9MZW5ndGhTdWJwYXRoKCkgY29uc3QKK3sKKyAgICAvLyBTcGVjKDExLjQpOiBBbnkg
emVybyBsZW5ndGggc3VicGF0aCBzaGFsbCBub3QgYmUgc3Ryb2tlZCBpZiB0aGUg4oCYc3Ryb2tl
LWxpbmVjYXDigJkgcHJvcGVydHkgaGFzIGEgdmFsdWUgb2YgYnV0dAorICAgIC8vIGJ1dCBzaGFs
bCBiZSBzdHJva2VkIGlmIHRoZSDigJhzdHJva2UtbGluZWNhcOKAmSBwcm9wZXJ0eSBoYXMgYSB2
YWx1ZSBvZiByb3VuZCBvciBzcXVhcmUKKyAgICByZXR1cm4gc3R5bGUoKS0+c3ZnU3R5bGUoKS0+
aGFzU3Ryb2tlKCkgJiYgc3R5bGUoKS0+c3ZnU3R5bGUoKS0+Y2FwU3R5bGUoKSAhPSBCdXR0Q2Fw
ICYmICFtX2ZpbGxCb3VuZGluZ0JveC53aWR0aCgpICYmICFtX2ZpbGxCb3VuZGluZ0JveC5oZWln
aHQoKTsKK30KKworRmxvYXRSZWN0IFJlbmRlclNWR1NoYXBlOjp6ZXJvTGVuZ3RoU3VicGF0aFJl
Y3QoKSBjb25zdAoreworICAgIGZsb2F0IHN0cm9rZVdpZHRoID0gdGhpcy0+c3Ryb2tlV2lkdGgo
KTsKKyAgICByZXR1cm4gRmxvYXRSZWN0KG1fZmlsbEJvdW5kaW5nQm94LngoKSAtIHN0cm9rZVdp
ZHRoIC8gMiwgbV9maWxsQm91bmRpbmdCb3gueSgpIC0gc3Ryb2tlV2lkdGggLyAyLCBzdHJva2VX
aWR0aCwgc3Ryb2tlV2lkdGgpOworfQorCit2b2lkIFJlbmRlclNWR1NoYXBlOjpzZXR1cFNxdWFy
ZUNhcFBhdGgoUGF0aComIHVzZVBhdGgsIGludCYgYXBwbHlNb2RlKQoreworICAgIC8vIFNwZWMo
MTEuNCk6IEFueSB6ZXJvIGxlbmd0aCBzdWJwYXRoIHNoYWxsIG5vdCBiZSBzdHJva2VkIGlmIHRo
ZSDigJhzdHJva2UtbGluZWNhcOKAmSBwcm9wZXJ0eSBoYXMgYSB2YWx1ZSBvZiBidXR0CisgICAg
Ly8gYnV0IHNoYWxsIGJlIHN0cm9rZWQgaWYgdGhlIOKAmHN0cm9rZS1saW5lY2Fw4oCZIHByb3Bl
cnR5IGhhcyBhIHZhbHVlIG9mIHJvdW5kIG9yIHNxdWFyZQorICAgIERFRklORV9TVEFUSUNfTE9D
QUwoUGF0aCwgdGVtcFBhdGgsICgpKTsKKworICAgIGFwcGx5TW9kZSA9IEFwcGx5VG9GaWxsTW9k
ZTsKKyAgICB1c2VQYXRoID0gJnRlbXBQYXRoOworICAgIHVzZVBhdGgtPmNsZWFyKCk7CisgICAg
aWYgKHN0eWxlKCktPnN2Z1N0eWxlKCktPmNhcFN0eWxlKCkgPT0gU3F1YXJlQ2FwKQorICAgICAg
ICB1c2VQYXRoLT5hZGRSZWN0KHplcm9MZW5ndGhTdWJwYXRoUmVjdCgpKTsKKyAgICBlbHNlCisg
ICAgICAgIHVzZVBhdGgtPmFkZEVsbGlwc2UoemVyb0xlbmd0aFN1YnBhdGhSZWN0KCkpOworfQor
Citib29sIFJlbmRlclNWR1NoYXBlOjpzZXR1cE5vblNjYWxpbmdTdHJva2VQYXRoKFBhdGgqJiB1
c2VQYXRoLCBHcmFwaGljc0NvbnRleHRTdGF0ZVNhdmVyJiBzdGF0ZVNhdmVyKQoreworICAgIERF
RklORV9TVEFUSUNfTE9DQUwoUGF0aCwgdGVtcFBhdGgsICgpKTsKKworICAgIFNWR1N0eWxlZFRy
YW5zZm9ybWFibGVFbGVtZW50KiBlbGVtZW50ID0gc3RhdGljX2Nhc3Q8U1ZHU3R5bGVkVHJhbnNm
b3JtYWJsZUVsZW1lbnQqPihub2RlKCkpOworICAgIEFmZmluZVRyYW5zZm9ybSBub25TY2FsaW5n
U3Ryb2tlVHJhbnNmb3JtID0gZWxlbWVudC0+Z2V0U2NyZWVuQ1RNKFNWR0xvY2F0YWJsZTo6RGlz
YWxsb3dTdHlsZVVwZGF0ZSk7CisgICAgaWYgKCFub25TY2FsaW5nU3Ryb2tlVHJhbnNmb3JtLmlz
SW52ZXJ0aWJsZSgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICB0ZW1wUGF0aCA9ICpt
X3BhdGg7CisgICAgdXNlUGF0aCA9ICZ0ZW1wUGF0aDsKKyAgICB0ZW1wUGF0aC50cmFuc2Zvcm0o
bm9uU2NhbGluZ1N0cm9rZVRyYW5zZm9ybSk7CisKKyAgICBzdGF0ZVNhdmVyLnNhdmUoKTsKKyAg
ICBzdGF0ZVNhdmVyLmNvbnRleHQoKS0+Y29uY2F0Q1RNKG5vblNjYWxpbmdTdHJva2VUcmFuc2Zv
cm0uaW52ZXJzZSgpKTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKwordm9pZCBSZW5kZXJTVkdTaGFw
ZTo6ZmlsbEFuZFN0cm9rZVBhdGgoR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0KQoreworICAgIFJl
bmRlclN0eWxlKiBzdHlsZSA9IHRoaXMtPnN0eWxlKCk7CisKKyAgICBDb2xvciBmYWxsYmFja0Nv
bG9yOworICAgIGlmIChSZW5kZXJTVkdSZXNvdXJjZSogZmlsbFBhaW50aW5nUmVzb3VyY2UgPSBS
ZW5kZXJTVkdSZXNvdXJjZTo6ZmlsbFBhaW50aW5nUmVzb3VyY2UodGhpcywgc3R5bGUsIGZhbGxi
YWNrQ29sb3IpKSB7CisgICAgICAgIGlmIChmaWxsUGFpbnRpbmdSZXNvdXJjZS0+YXBwbHlSZXNv
dXJjZSh0aGlzLCBzdHlsZSwgY29udGV4dCwgQXBwbHlUb0ZpbGxNb2RlKSkKKyAgICAgICAgICAg
IGZpbGxQYWludGluZ1Jlc291cmNlLT5wb3N0QXBwbHlSZXNvdXJjZSh0aGlzLCBjb250ZXh0LCBB
cHBseVRvRmlsbE1vZGUsIDAsIHRoaXMpOworICAgICAgICBlbHNlIGlmIChmYWxsYmFja0NvbG9y
LmlzVmFsaWQoKSkgeworICAgICAgICAgICAgUmVuZGVyU1ZHUmVzb3VyY2VTb2xpZENvbG9yKiBm
YWxsYmFja1Jlc291cmNlID0gUmVuZGVyU1ZHUmVzb3VyY2U6OnNoYXJlZFNvbGlkUGFpbnRpbmdS
ZXNvdXJjZSgpOworICAgICAgICAgICAgZmFsbGJhY2tSZXNvdXJjZS0+c2V0Q29sb3IoZmFsbGJh
Y2tDb2xvcik7CisgICAgICAgICAgICBpZiAoZmFsbGJhY2tSZXNvdXJjZS0+YXBwbHlSZXNvdXJj
ZSh0aGlzLCBzdHlsZSwgY29udGV4dCwgQXBwbHlUb0ZpbGxNb2RlKSkKKyAgICAgICAgICAgICAg
ICBmYWxsYmFja1Jlc291cmNlLT5wb3N0QXBwbHlSZXNvdXJjZSh0aGlzLCBjb250ZXh0LCBBcHBs
eVRvRmlsbE1vZGUsIDAsIHRoaXMpOworICAgICAgICB9CisgICAgfQorCisgICAgZmFsbGJhY2tD
b2xvciA9IENvbG9yKCk7CisgICAgUmVuZGVyU1ZHUmVzb3VyY2UqIHN0cm9rZVBhaW50aW5nUmVz
b3VyY2UgPSBSZW5kZXJTVkdSZXNvdXJjZTo6c3Ryb2tlUGFpbnRpbmdSZXNvdXJjZSh0aGlzLCBz
dHlsZSwgZmFsbGJhY2tDb2xvcik7CisgICAgaWYgKCFzdHJva2VQYWludGluZ1Jlc291cmNlKQor
ICAgICAgICByZXR1cm47CisKKyAgICBQYXRoKiB1c2VQYXRoID0gbV9wYXRoLmdldCgpOworICAg
IGludCBhcHBseU1vZGUgPSBBcHBseVRvU3Ryb2tlTW9kZTsKKworICAgIGJvb2wgbm9uU2NhbGlu
Z1N0cm9rZSA9IHN0eWxlLT5zdmdTdHlsZSgpLT52ZWN0b3JFZmZlY3QoKSA9PSBWRV9OT05fU0NB
TElOR19TVFJPS0U7CisgICAgT3duUHRyPFBhdGg+IHNhdmVQYXRoOworCisgICAgR3JhcGhpY3ND
b250ZXh0U3RhdGVTYXZlciBzdGF0ZVNhdmVyKCpjb250ZXh0LCBmYWxzZSk7CisKKyAgICAvLyBT
cGVjKDExLjQpOiBBbnkgemVybyBsZW5ndGggc3VicGF0aCBzaGFsbCBub3QgYmUgc3Ryb2tlZCBp
ZiB0aGUg4oCYc3Ryb2tlLWxpbmVjYXDigJkgcHJvcGVydHkgaGFzIGEgdmFsdWUgb2YgYnV0dAor
ICAgIC8vIGJ1dCBzaGFsbCBiZSBzdHJva2VkIGlmIHRoZSDigJhzdHJva2UtbGluZWNhcOKAmSBw
cm9wZXJ0eSBoYXMgYSB2YWx1ZSBvZiByb3VuZCBvciBzcXVhcmUKKyAgICAvLyBGSVhNRTogdGhp
cyBkb2VzIG5vdCB3b3JrIGZvciB6ZXJvLWxlbmd0aCBzdWJwYXRocywgb25seSB3aGVuIHRvdGFs
IHBhdGggaXMgemVyby1sZW5ndGgKKyAgICBpZiAoc2hvdWxkU3Ryb2tlWmVyb0xlbmd0aFN1YnBh
dGgoKSkgeworICAgICAgICBpZiAoIW1fcGF0aCkgeworICAgICAgICAgICAgUmVuZGVyU1ZHU2hh
cGU6OmNyZWF0ZVNoYXBlKCk7CisgICAgICAgICAgICBzZXRJc1BhaW50aW5nRmFsbGJhY2sodHJ1
ZSk7CisgICAgICAgICAgICB1c2VQYXRoID0gbV9wYXRoLmdldCgpOworICAgICAgICB9CisgICAg
ICAgIHNldHVwU3F1YXJlQ2FwUGF0aCh1c2VQYXRoLCBhcHBseU1vZGUpOworICAgIH0gZWxzZSBp
ZiAobm9uU2NhbGluZ1N0cm9rZSkgeworICAgICAgICBpZiAoIXNldHVwTm9uU2NhbGluZ1N0cm9r
ZVBhdGgodXNlUGF0aCwgc3RhdGVTYXZlcikpCisgICAgICAgICAgICByZXR1cm47CisgICAgfQor
ICAgIGlmIChzdHJva2VQYWludGluZ1Jlc291cmNlLT5hcHBseVJlc291cmNlKHRoaXMsIHN0eWxl
LCBjb250ZXh0LCBhcHBseU1vZGUpKSB7CisgICAgICAgIHN0cm9rZVBhaW50aW5nUmVzb3VyY2Ut
PnBvc3RBcHBseVJlc291cmNlKHRoaXMsIGNvbnRleHQsIGFwcGx5TW9kZSwgdXNlUGF0aCwgdGhp
cyk7CisgICAgICAgIGlmIChzYXZlUGF0aCkKKyAgICAgICAgICAgIG1fcGF0aCA9IHNhdmVQYXRo
LnJlbGVhc2UoKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBpZiAoIWZhbGxiYWNrQ29s
b3IuaXNWYWxpZCgpKSB7CisgICAgICAgIGlmIChzYXZlUGF0aCkKKyAgICAgICAgICAgIG1fcGF0
aCA9IHNhdmVQYXRoLnJlbGVhc2UoKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBSZW5k
ZXJTVkdSZXNvdXJjZVNvbGlkQ29sb3IqIGZhbGxiYWNrUmVzb3VyY2UgPSBSZW5kZXJTVkdSZXNv
dXJjZTo6c2hhcmVkU29saWRQYWludGluZ1Jlc291cmNlKCk7CisgICAgZmFsbGJhY2tSZXNvdXJj
ZS0+c2V0Q29sb3IoZmFsbGJhY2tDb2xvcik7CisgICAgaWYgKGZhbGxiYWNrUmVzb3VyY2UtPmFw
cGx5UmVzb3VyY2UodGhpcywgc3R5bGUsIGNvbnRleHQsIGFwcGx5TW9kZSkpCisgICAgICAgIGZh
bGxiYWNrUmVzb3VyY2UtPnBvc3RBcHBseVJlc291cmNlKHRoaXMsIGNvbnRleHQsIGFwcGx5TW9k
ZSwgdXNlUGF0aCwgdGhpcyk7CisgICAgaWYgKHNhdmVQYXRoKQorICAgICAgICBtX3BhdGggPSBz
YXZlUGF0aC5yZWxlYXNlKCk7Cit9CisKK3ZvaWQgUmVuZGVyU1ZHU2hhcGU6OnBhaW50KFBhaW50
SW5mbyYgcGFpbnRJbmZvLCBjb25zdCBJbnRQb2ludCYpCit7CisgICAgaWYgKHBhaW50SW5mby5j
b250ZXh0LT5wYWludGluZ0Rpc2FibGVkKCkgfHwgc3R5bGUoKS0+dmlzaWJpbGl0eSgpID09IEhJ
RERFTiB8fCBpc0VtcHR5KCkpCisgICAgICAgIHJldHVybjsKKyAgICBGbG9hdFJlY3QgYm91bmRp
bmdCb3ggPSByZXBhaW50UmVjdEluTG9jYWxDb29yZGluYXRlcygpOworICAgIGlmICghU1ZHUmVu
ZGVyU3VwcG9ydDo6cGFpbnRJbmZvSW50ZXJzZWN0c1JlcGFpbnRSZWN0KGJvdW5kaW5nQm94LCBt
X2xvY2FsVHJhbnNmb3JtLCBwYWludEluZm8pKQorICAgICAgICByZXR1cm47CisKKyAgICBQYWlu
dEluZm8gY2hpbGRQYWludEluZm8ocGFpbnRJbmZvKTsKKyAgICBib29sIGRyYXdzT3V0bGluZSA9
IHN0eWxlKCktPm91dGxpbmVXaWR0aCgpICYmIChjaGlsZFBhaW50SW5mby5waGFzZSA9PSBQYWlu
dFBoYXNlT3V0bGluZSB8fCBjaGlsZFBhaW50SW5mby5waGFzZSA9PSBQYWludFBoYXNlU2VsZk91
dGxpbmUpOworICAgIGlmIChkcmF3c091dGxpbmUgfHwgY2hpbGRQYWludEluZm8ucGhhc2UgPT0g
UGFpbnRQaGFzZUZvcmVncm91bmQpIHsKKyAgICAgICAgR3JhcGhpY3NDb250ZXh0U3RhdGVTYXZl
ciBzdGF0ZVNhdmVyKCpjaGlsZFBhaW50SW5mby5jb250ZXh0KTsKKyAgICAgICAgY2hpbGRQYWlu
dEluZm8uYXBwbHlUcmFuc2Zvcm0obV9sb2NhbFRyYW5zZm9ybSk7CisKKyAgICAgICAgaWYgKGNo
aWxkUGFpbnRJbmZvLnBoYXNlID09IFBhaW50UGhhc2VGb3JlZ3JvdW5kKSB7CisgICAgICAgICAg
ICBQYWludEluZm8gc2F2ZWRJbmZvKGNoaWxkUGFpbnRJbmZvKTsKKworICAgICAgICAgICAgaWYg
KFNWR1JlbmRlclN1cHBvcnQ6OnByZXBhcmVUb1JlbmRlclNWR0NvbnRlbnQodGhpcywgY2hpbGRQ
YWludEluZm8pKSB7CisgICAgICAgICAgICAgICAgY29uc3QgU1ZHUmVuZGVyU3R5bGUqIHN2Z1N0
eWxlID0gc3R5bGUoKS0+c3ZnU3R5bGUoKTsKKyAgICAgICAgICAgICAgICBpZiAoc3ZnU3R5bGUt
PnNoYXBlUmVuZGVyaW5nKCkgPT0gU1JfQ1JJU1BFREdFUykKKyAgICAgICAgICAgICAgICAgICAg
Y2hpbGRQYWludEluZm8uY29udGV4dC0+c2V0U2hvdWxkQW50aWFsaWFzKGZhbHNlKTsKKworICAg
ICAgICAgICAgICAgIGZpbGxBbmRTdHJva2VQYXRoKGNoaWxkUGFpbnRJbmZvLmNvbnRleHQpOwor
CisgICAgICAgICAgICAgICAgaWYgKHN2Z1N0eWxlLT5oYXNNYXJrZXJzKCkpCisgICAgICAgICAg
ICAgICAgICAgIG1fbWFya2VyTGF5b3V0SW5mby5kcmF3TWFya2VycyhjaGlsZFBhaW50SW5mbyk7
CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIFNWR1JlbmRlclN1cHBvcnQ6OmZpbmlzaFJl
bmRlclNWR0NvbnRlbnQodGhpcywgY2hpbGRQYWludEluZm8sIHNhdmVkSW5mby5jb250ZXh0KTsK
KyAgICAgICAgfQorCisgICAgICAgIGlmIChkcmF3c091dGxpbmUpCisgICAgICAgICAgICBwYWlu
dE91dGxpbmUoY2hpbGRQYWludEluZm8uY29udGV4dCwgSW50UmVjdChib3VuZGluZ0JveCkpOwor
ICAgIH0KK30KKworLy8gVGhpcyBtZXRob2QgaXMgY2FsbGVkIGZyb20gaW5zaWRlIHBhaW50T3V0
bGluZSgpIHNpbmNlIHdlIGNhbGwgcGFpbnRPdXRsaW5lKCkKKy8vIHdoaWxlIHRyYW5zZm9ybWVk
IHRvIG91ciBjb29yZCBzeXN0ZW0sIHJldHVybiBsb2NhbCBjb29yZHMKK3ZvaWQgUmVuZGVyU1ZH
U2hhcGU6OmFkZEZvY3VzUmluZ1JlY3RzKFZlY3RvcjxMYXlvdXRSZWN0PiYgcmVjdHMsIGNvbnN0
IExheW91dFBvaW50JikKK3sKKyAgICBMYXlvdXRSZWN0IHJlY3QgPSBlbmNsb3NpbmdMYXlvdXRS
ZWN0KHJlcGFpbnRSZWN0SW5Mb2NhbENvb3JkaW5hdGVzKCkpOworICAgIGlmICghcmVjdC5pc0Vt
cHR5KCkpCisgICAgICAgIHJlY3RzLmFwcGVuZChyZWN0KTsKK30KKworYm9vbCBSZW5kZXJTVkdT
aGFwZTo6bm9kZUF0RmxvYXRQb2ludChjb25zdCBIaXRUZXN0UmVxdWVzdCYgcmVxdWVzdCwgSGl0
VGVzdFJlc3VsdCYgcmVzdWx0LCBjb25zdCBGbG9hdFBvaW50JiBwb2ludEluUGFyZW50LCBIaXRU
ZXN0QWN0aW9uIGhpdFRlc3RBY3Rpb24pCit7CisgICAgLy8gV2Ugb25seSBkcmF3IGluIHRoZSBm
b3Jncm91bmQgcGhhc2UsIHNvIHdlIG9ubHkgaGl0LXRlc3QgdGhlbi4KKyAgICBpZiAoaGl0VGVz
dEFjdGlvbiAhPSBIaXRUZXN0Rm9yZWdyb3VuZCkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisg
ICAgRmxvYXRQb2ludCBsb2NhbFBvaW50ID0gbV9sb2NhbFRyYW5zZm9ybS5pbnZlcnNlKCkubWFw
UG9pbnQocG9pbnRJblBhcmVudCk7CisKKyAgICBpZiAoIVNWR1JlbmRlclN1cHBvcnQ6OnBvaW50
SW5DbGlwcGluZ0FyZWEodGhpcywgbG9jYWxQb2ludCkpCisgICAgICAgIHJldHVybiBmYWxzZTsK
KworICAgIFBvaW50ZXJFdmVudHNIaXRSdWxlcyBoaXRSdWxlcyhQb2ludGVyRXZlbnRzSGl0UnVs
ZXM6OlNWR19QQVRIX0hJVFRFU1RJTkcsIHJlcXVlc3QsIHN0eWxlKCktPnBvaW50ZXJFdmVudHMo
KSk7CisgICAgYm9vbCBpc1Zpc2libGUgPSAoc3R5bGUoKS0+dmlzaWJpbGl0eSgpID09IFZJU0lC
TEUpOworICAgIGlmIChpc1Zpc2libGUgfHwgIWhpdFJ1bGVzLnJlcXVpcmVWaXNpYmxlKSB7Cisg
ICAgICAgIGNvbnN0IFNWR1JlbmRlclN0eWxlKiBzdmdTdHlsZSA9IHN0eWxlKCktPnN2Z1N0eWxl
KCk7CisgICAgICAgIFdpbmRSdWxlIGZpbGxSdWxlID0gc3ZnU3R5bGUtPmZpbGxSdWxlKCk7Cisg
ICAgICAgIGlmIChyZXF1ZXN0LnN2Z0NsaXBDb250ZW50KCkpCisgICAgICAgICAgICBmaWxsUnVs
ZSA9IHN2Z1N0eWxlLT5jbGlwUnVsZSgpOworICAgICAgICBpZiAoKGhpdFJ1bGVzLmNhbkhpdFN0
cm9rZSAmJiAoc3ZnU3R5bGUtPmhhc1N0cm9rZSgpIHx8ICFoaXRSdWxlcy5yZXF1aXJlU3Ryb2tl
KSAmJiBzdHJva2VDb250YWlucyhsb2NhbFBvaW50LCBoaXRSdWxlcy5yZXF1aXJlU3Ryb2tlKSkK
KyAgICAgICAgICAgIHx8IChoaXRSdWxlcy5jYW5IaXRGaWxsICYmIChzdmdTdHlsZS0+aGFzRmls
bCgpIHx8ICFoaXRSdWxlcy5yZXF1aXJlRmlsbCkgJiYgZmlsbENvbnRhaW5zKGxvY2FsUG9pbnQs
IGhpdFJ1bGVzLnJlcXVpcmVGaWxsLCBmaWxsUnVsZSkpKSB7CisgICAgICAgICAgICB1cGRhdGVI
aXRUZXN0UmVzdWx0KHJlc3VsdCwgcm91bmRlZExheW91dFBvaW50KGxvY2FsUG9pbnQpKTsKKyAg
ICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9CisgICAgfQorICAgIHJldHVybiBmYWxz
ZTsKK30KKworRmxvYXRSZWN0IFJlbmRlclNWR1NoYXBlOjpjYWxjdWxhdGVNYXJrZXJCb3VuZHNJ
Zk5lZWRlZCgpCit7CisgICAgU1ZHRWxlbWVudCogc3ZnRWxlbWVudCA9IHN0YXRpY19jYXN0PFNW
R0VsZW1lbnQqPihub2RlKCkpOworICAgIEFTU0VSVChzdmdFbGVtZW50ICYmIHN2Z0VsZW1lbnQt
PmRvY3VtZW50KCkpOworICAgIGlmICghc3ZnRWxlbWVudC0+aXNTdHlsZWQoKSkKKyAgICAgICAg
cmV0dXJuIEZsb2F0UmVjdCgpOworCisgICAgU1ZHU3R5bGVkRWxlbWVudCogc3R5bGVkRWxlbWVu
dCA9IHN0YXRpY19jYXN0PFNWR1N0eWxlZEVsZW1lbnQqPihzdmdFbGVtZW50KTsKKyAgICBpZiAo
IXN0eWxlZEVsZW1lbnQtPnN1cHBvcnRzTWFya2VycygpKQorICAgICAgICByZXR1cm4gRmxvYXRS
ZWN0KCk7CisKKyAgICBBU1NFUlQoc3R5bGUoKS0+c3ZnU3R5bGUoKS0+aGFzTWFya2VycygpKTsK
KworICAgIFNWR1Jlc291cmNlcyogcmVzb3VyY2VzID0gU1ZHUmVzb3VyY2VzQ2FjaGU6OmNhY2hl
ZFJlc291cmNlc0ZvclJlbmRlck9iamVjdCh0aGlzKTsKKyAgICBpZiAoIXJlc291cmNlcykKKyAg
ICAgICAgcmV0dXJuIEZsb2F0UmVjdCgpOworCisgICAgUmVuZGVyU1ZHUmVzb3VyY2VNYXJrZXIq
IG1hcmtlclN0YXJ0ID0gcmVzb3VyY2VzLT5tYXJrZXJTdGFydCgpOworICAgIFJlbmRlclNWR1Jl
c291cmNlTWFya2VyKiBtYXJrZXJNaWQgPSByZXNvdXJjZXMtPm1hcmtlck1pZCgpOworICAgIFJl
bmRlclNWR1Jlc291cmNlTWFya2VyKiBtYXJrZXJFbmQgPSByZXNvdXJjZXMtPm1hcmtlckVuZCgp
OworICAgIGlmICghbWFya2VyU3RhcnQgJiYgIW1hcmtlck1pZCAmJiAhbWFya2VyRW5kKQorICAg
ICAgICByZXR1cm4gRmxvYXRSZWN0KCk7CisKKyAgICByZXR1cm4gbV9tYXJrZXJMYXlvdXRJbmZv
LmNhbGN1bGF0ZUJvdW5kYXJpZXMobWFya2VyU3RhcnQsIG1hcmtlck1pZCwgbWFya2VyRW5kLCBz
dHJva2VXaWR0aCgpLCBwYXRoKCkpOworfQorCit2b2lkIFJlbmRlclNWR1NoYXBlOjp1cGRhdGVD
YWNoZWRCb3VuZGFyaWVzKCkKK3sKKyAgICBpZiAoaXNFbXB0eSgpKSB7CisgICAgICAgIG1fZmls
bEJvdW5kaW5nQm94ID0gRmxvYXRSZWN0KCk7CisgICAgICAgIG1fc3Ryb2tlQW5kTWFya2VyQm91
bmRpbmdCb3ggPSBGbG9hdFJlY3QoKTsKKyAgICAgICAgbV9yZXBhaW50Qm91bmRpbmdCb3ggPSBG
bG9hdFJlY3QoKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIC8vIENhY2hlIF91bmNs
aXBwZWRfIGZpbGwgYm91bmRpbmcgYm94LCB1c2VkIGZvciBjYWxjdWxhdGlvbnMgaW4gcmVzb3Vy
Y2VzCisgICAgbV9maWxsQm91bmRpbmdCb3ggPSBvYmplY3RCb3VuZGluZ0JveCgpOworCisgICAg
Ly8gU3BlYygxMS40KTogQW55IHplcm8gbGVuZ3RoIHN1YnBhdGggc2hhbGwgbm90IGJlIHN0cm9r
ZWQgaWYgdGhlIOKAmHN0cm9rZS1saW5lY2Fw4oCZIHByb3BlcnR5IGhhcyBhIHZhbHVlIG9mIGJ1
dHQKKyAgICAvLyBidXQgc2hhbGwgYmUgc3Ryb2tlZCBpZiB0aGUg4oCYc3Ryb2tlLWxpbmVjYXDi
gJkgcHJvcGVydHkgaGFzIGEgdmFsdWUgb2Ygcm91bmQgb3Igc3F1YXJlCisgICAgaWYgKHNob3Vs
ZFN0cm9rZVplcm9MZW5ndGhTdWJwYXRoKCkpIHsKKyAgICAgICAgbV9zdHJva2VBbmRNYXJrZXJC
b3VuZGluZ0JveCA9IHplcm9MZW5ndGhTdWJwYXRoUmVjdCgpOworICAgICAgICAvLyBDYWNoZSBz
bWFsbGVzdCBwb3NzaWJsZSByZXBhaW50IHJlY3RhbmdsZQorICAgICAgICBtX3JlcGFpbnRCb3Vu
ZGluZ0JveCA9IG1fc3Ryb2tlQW5kTWFya2VyQm91bmRpbmdCb3g7CisgICAgICAgIFNWR1JlbmRl
clN1cHBvcnQ6OmludGVyc2VjdFJlcGFpbnRSZWN0V2l0aFJlc291cmNlcyh0aGlzLCBtX3JlcGFp
bnRCb3VuZGluZ0JveCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICAvLyBDYWNoZSBf
dW5jbGlwcGVkXyBzdHJva2UgYm91bmRpbmcgYm94LCB1c2VkIGZvciBjYWxjdWxhdGlvbnMgaW4g
cmVzb3VyY2VzIChpbmNsdWRlcyBtYXJrZXIgYm91bmRhcmllcykKKyAgICBtX3N0cm9rZUFuZE1h
cmtlckJvdW5kaW5nQm94ID0gbV9maWxsQm91bmRpbmdCb3g7CisgICAgaWYgKGhhc1BhdGgoKSkK
KyAgICAgICAgaW5mbGF0ZVdpdGhTdHJva2VhbmRNYXJrZXJCb3VuZHMoKTsKKyAgICAvLyBDYWNo
ZSBzbWFsbGVzdCBwb3NzaWJsZSByZXBhaW50IHJlY3RhbmdsZQorICAgIG1fcmVwYWludEJvdW5k
aW5nQm94ID0gc3Ryb2tlQm91bmRpbmdCb3goKTsKKyAgICBTVkdSZW5kZXJTdXBwb3J0OjppbnRl
cnNlY3RSZXBhaW50UmVjdFdpdGhSZXNvdXJjZXModGhpcywgbV9yZXBhaW50Qm91bmRpbmdCb3gp
OworfQorCitmbG9hdCBSZW5kZXJTVkdTaGFwZTo6c3Ryb2tlV2lkdGgoKSBjb25zdAoreworICAg
IFNWR0VsZW1lbnQqIHN2Z0VsZW1lbnQgPSBzdGF0aWNfY2FzdDxTVkdFbGVtZW50Kj4obm9kZSgp
KTsKKyAgICBTVkdMZW5ndGhDb250ZXh0IGxlbmd0aENvbnRleHQoc3ZnRWxlbWVudCk7CisgICAg
cmV0dXJuIHN0eWxlKCktPnN2Z1N0eWxlKCktPnN0cm9rZVdpZHRoKCkudmFsdWUobGVuZ3RoQ29u
dGV4dCk7Cit9CisKK3ZvaWQgUmVuZGVyU1ZHU2hhcGU6OmluZmxhdGVXaXRoU3Ryb2tlYW5kTWFy
a2VyQm91bmRzKCkKK3sKKyAgICBjb25zdCBTVkdSZW5kZXJTdHlsZSogc3ZnU3R5bGUgPSBzdHls
ZSgpLT5zdmdTdHlsZSgpOworICAgIEZsb2F0UmVjdCBzdHJva2VSZWN0OworICAgIGlmIChzdmdT
dHlsZS0+aGFzU3Ryb2tlKCkpIHsKKyAgICAgICAgQm91bmRpbmdSZWN0U3Ryb2tlU3R5bGVBcHBs
aWVyIHN0cm9rZVN0eWxlKHRoaXMsIHN0eWxlKCkpOworICAgICAgICBtX3N0cm9rZUFuZE1hcmtl
ckJvdW5kaW5nQm94LnVuaXRlKHBhdGgoKS5zdHJva2VCb3VuZGluZ1JlY3QoJnN0cm9rZVN0eWxl
KSk7CisgICAgfQorICAgIGlmIChzdmdTdHlsZS0+aGFzTWFya2VycygpKSB7CisgICAgICAgIEZs
b2F0UmVjdCBtYXJrZXJCb3VuZHMgPSBjYWxjdWxhdGVNYXJrZXJCb3VuZHNJZk5lZWRlZCgpOwor
ICAgICAgICBpZiAoIW1hcmtlckJvdW5kcy5pc0VtcHR5KCkpCisgICAgICAgICAgICBtX3N0cm9r
ZUFuZE1hcmtlckJvdW5kaW5nQm94LnVuaXRlKG1hcmtlckJvdW5kcyk7CisgICAgfQorfQorCit9
CisKKyNlbmRpZiAvLyBFTkFCTEUoU1ZHKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL3N2Zy9SZW5kZXJTVkdTaGFwZS5oIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2
Zy9SZW5kZXJTVkdTaGFwZS5oCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjY0
Y2Q4OGEKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1Jl
bmRlclNWR1NoYXBlLmgKQEAgLTAsMCArMSwxNjAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MDQsIDIwMDUsIDIwMDcgTmlrb2xhcyBaaW1tZXJtYW5uIDx6aW1tZXJtYW5uQGtkZS5vcmc+Cisg
KiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUgUm9iIEJ1aXMgPGJ1aXNAa2RlLm9yZz4KKyAqIENv
cHlyaWdodCAoQykgMjAwNSBFcmljIFNlaWRlbCA8ZXJpY0B3ZWJraXQub3JnPgorICogQ29weXJp
Z2h0IChDKSAyMDA2IEFwcGxlIENvbXB1dGVyLCBJbmMKKyAqIENvcHlyaWdodCAoQykgMjAwOSBH
b29nbGUsIEluYy4KKyAqIENvcHlyaWdodCAoQykgMjAxMSBSZW5hdGEgSG9kb3ZhbiA8cmVuaUB3
ZWJraXQub3JnPgorICogQ29weXJpZ2h0IChDKSAyMDExIFVuaXZlcnNpdHkgb2YgU3plZ2VkCisg
KgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRl
IGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJh
cnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNv
ZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBv
ciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFy
eSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICog
YnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFu
dHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVS
UE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9y
IG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9m
IHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRo
aXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bwor
ICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0
LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNp
Zm5kZWYgUmVuZGVyU1ZHU2hhcGVfaAorI2RlZmluZSBSZW5kZXJTVkdTaGFwZV9oCisKKyNpZiBF
TkFCTEUoU1ZHKQorI2luY2x1ZGUgIkFmZmluZVRyYW5zZm9ybS5oIgorI2luY2x1ZGUgIkZsb2F0
UmVjdC5oIgorI2luY2x1ZGUgIlJlbmRlclNWR01vZGVsT2JqZWN0LmgiCisjaW5jbHVkZSAiU1ZH
TWFya2VyTGF5b3V0SW5mby5oIgorI2luY2x1ZGUgIlN0cm9rZVN0eWxlQXBwbGllci5oIgorI2lu
Y2x1ZGUgPHd0Zi9Pd25QdHIuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBGbG9h
dFBvaW50OworY2xhc3MgR3JhcGhpY3NDb250ZXh0U3RhdGVTYXZlcjsKK2NsYXNzIFJlbmRlclNW
R0NvbnRhaW5lcjsKK2NsYXNzIFJlbmRlclNWR1BhdGg7CitjbGFzcyBTVkdTdHlsZWRUcmFuc2Zv
cm1hYmxlRWxlbWVudDsKKworY2xhc3MgQm91bmRpbmdSZWN0U3Ryb2tlU3R5bGVBcHBsaWVyIDog
cHVibGljIFN0cm9rZVN0eWxlQXBwbGllciB7CitwdWJsaWM6CisgICAgQm91bmRpbmdSZWN0U3Ry
b2tlU3R5bGVBcHBsaWVyKGNvbnN0IFJlbmRlck9iamVjdCogb2JqZWN0LCBSZW5kZXJTdHlsZSog
c3R5bGUpCisgICAgICAgIDogbV9vYmplY3Qob2JqZWN0KQorICAgICAgICAsIG1fc3R5bGUoc3R5
bGUpCisgICAgeworICAgICAgICBBU1NFUlQoc3R5bGUpOworICAgICAgICBBU1NFUlQob2JqZWN0
KTsKKyAgICB9CisKKyAgICB2b2lkIHN0cm9rZVN0eWxlKEdyYXBoaWNzQ29udGV4dCogY29udGV4
dCkKKyAgICB7CisgICAgICAgIFNWR1JlbmRlclN1cHBvcnQ6OmFwcGx5U3Ryb2tlU3R5bGVUb0Nv
bnRleHQoY29udGV4dCwgbV9zdHlsZSwgbV9vYmplY3QpOworICAgIH0KKworcHJpdmF0ZToKKyAg
ICBjb25zdCBSZW5kZXJPYmplY3QqIG1fb2JqZWN0OworICAgIFJlbmRlclN0eWxlKiBtX3N0eWxl
OworfTsKKworY2xhc3MgUmVuZGVyU1ZHU2hhcGUgOiBwdWJsaWMgUmVuZGVyU1ZHTW9kZWxPYmpl
Y3QgeworcHVibGljOgorICAgIGV4cGxpY2l0IFJlbmRlclNWR1NoYXBlKFNWR1N0eWxlZFRyYW5z
Zm9ybWFibGVFbGVtZW50Kik7CisgICAgUmVuZGVyU1ZHU2hhcGUoU1ZHU3R5bGVkVHJhbnNmb3Jt
YWJsZUVsZW1lbnQqLCBQYXRoKiwgYm9vbCk7CisgICAgdmlydHVhbCB+UmVuZGVyU1ZHU2hhcGUo
KTsKKworICAgIHZvaWQgc2V0TmVlZHNTaGFwZVVwZGF0ZSgpIHsgbV9uZWVkc1NoYXBlVXBkYXRl
ID0gdHJ1ZTsgfQorICAgIHZpcnR1YWwgdm9pZCBzZXROZWVkc0JvdW5kYXJpZXNVcGRhdGUoKSB7
IG1fbmVlZHNCb3VuZGFyaWVzVXBkYXRlID0gdHJ1ZTsgfQorICAgIHZpcnR1YWwgdm9pZCBzZXRO
ZWVkc1RyYW5zZm9ybVVwZGF0ZSgpIHsgbV9uZWVkc1RyYW5zZm9ybVVwZGF0ZSA9IHRydWU7IH0K
KyAgICB2aXJ0dWFsIHZvaWQgZmlsbFNoYXBlKEdyYXBoaWNzQ29udGV4dCopIGNvbnN0OworICAg
IHZpcnR1YWwgdm9pZCBzdHJva2VTaGFwZShHcmFwaGljc0NvbnRleHQqKSBjb25zdDsKKyAgICBi
b29sIGlzUGFpbnRpbmdGYWxsYmFjaygpIGNvbnN0IHsgcmV0dXJuIG1fZmlsbEZhbGxiYWNrOyB9
CisKKyAgICBQYXRoJiBwYXRoKCkgY29uc3QKKyAgICB7CisgICAgICAgIEFTU0VSVChtX3BhdGgp
OworICAgICAgICByZXR1cm4gKm1fcGF0aDsKKyAgICB9CisKK3Byb3RlY3RlZDoKKyAgICB2aXJ0
dWFsIHZvaWQgY3JlYXRlU2hhcGUoKTsKKyAgICB2aXJ0dWFsIGJvb2wgaXNFbXB0eSgpIGNvbnN0
OworICAgIHZpcnR1YWwgRmxvYXRSZWN0IG9iamVjdEJvdW5kaW5nQm94KCkgY29uc3Q7CisgICAg
dmlydHVhbCBGbG9hdFJlY3Qgc3Ryb2tlQm91bmRpbmdCb3goKSBjb25zdCB7IHJldHVybiBtX3N0
cm9rZUFuZE1hcmtlckJvdW5kaW5nQm94OyB9CisgICAgdm9pZCBzZXRTdHJva2VBbmRNYXJrZXJC
b3VuZGluZ0JveChGbG9hdFJlY3QgcmVjdCkgeyBtX3N0cm9rZUFuZE1hcmtlckJvdW5kaW5nQm94
ID0gcmVjdDsgfQorICAgIHZpcnR1YWwgYm9vbCBzaGFwZURlcGVuZGVudFN0cm9rZUNvbnRhaW5z
KGNvbnN0IEZsb2F0UG9pbnQmKSBjb25zdDsKKyAgICB2aXJ0dWFsIGJvb2wgc2hhcGVEZXBlbmRl
bnRGaWxsQ29udGFpbnMoY29uc3QgRmxvYXRQb2ludCYsIGNvbnN0IFdpbmRSdWxlKSBjb25zdDsK
KyAgICBmbG9hdCBzdHJva2VXaWR0aCgpIGNvbnN0OworICAgIHZvaWQgc2V0SXNQYWludGluZ0Zh
bGxiYWNrKGJvb2wgaXNGYWxsYmFjaykgeyBtX2ZpbGxGYWxsYmFjayA9IGlzRmFsbGJhY2s7IH0K
KyAgICBGbG9hdFJlY3QgY2FsY3VsYXRlTWFya2VyQm91bmRzSWZOZWVkZWQoKTsKKworICAgIGJv
b2wgaGFzUGF0aCgpIGNvbnN0IHsgcmV0dXJuIG1fcGF0aC5nZXQoKTsgfQorCitwcml2YXRlOgor
ICAgIC8vIEhpdC1kZXRlY3Rpb24gc2VwYXJhdGVkIGZvciB0aGUgZmlsbCBhbmQgdGhlIHN0cm9r
ZQorICAgIGJvb2wgZmlsbENvbnRhaW5zKGNvbnN0IEZsb2F0UG9pbnQmLCBib29sIHJlcXVpcmVz
RmlsbCA9IHRydWUsIGNvbnN0IFdpbmRSdWxlIGZpbGxSdWxlID0gUlVMRV9OT05aRVJPKTsKKyAg
ICBib29sIHN0cm9rZUNvbnRhaW5zKGNvbnN0IEZsb2F0UG9pbnQmLCBib29sIHJlcXVpcmVzU3Ry
b2tlID0gdHJ1ZSk7CisKKyAgICB2aXJ0dWFsIEZsb2F0UmVjdCByZXBhaW50UmVjdEluTG9jYWxD
b29yZGluYXRlcygpIGNvbnN0IHsgcmV0dXJuIG1fcmVwYWludEJvdW5kaW5nQm94OyB9CisgICAg
dmlydHVhbCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIGxvY2FsVG9QYXJlbnRUcmFuc2Zvcm0oKSBj
b25zdCB7IHJldHVybiBtX2xvY2FsVHJhbnNmb3JtOyB9CisgICAgdmlydHVhbCBBZmZpbmVUcmFu
c2Zvcm0gbG9jYWxUcmFuc2Zvcm0oKSBjb25zdCB7IHJldHVybiBtX2xvY2FsVHJhbnNmb3JtOyB9
CisKKyAgICB2aXJ0dWFsIGJvb2wgaXNTVkdTaGFwZSgpIGNvbnN0IHsgcmV0dXJuIHRydWU7IH0K
KyAgICB2aXJ0dWFsIGNvbnN0IGNoYXIqIHJlbmRlck5hbWUoKSBjb25zdCB7IHJldHVybiAiUmVu
ZGVyU1ZHU2hhcGUiOyB9CisgICAgdmlydHVhbCBib29sIGlzUm91bmRlZFJlY3QoKSB7IHJldHVy
biBmYWxzZTsgfQorCisgICAgdmlydHVhbCB2b2lkIGxheW91dCgpOworICAgIHZpcnR1YWwgdm9p
ZCBwYWludChQYWludEluZm8mLCBjb25zdCBMYXlvdXRQb2ludCYpOworICAgIHZpcnR1YWwgdm9p
ZCBhZGRGb2N1c1JpbmdSZWN0cyhWZWN0b3I8TGF5b3V0UmVjdD4mLCBjb25zdCBMYXlvdXRQb2lu
dCYpOworCisgICAgdmlydHVhbCBib29sIG5vZGVBdEZsb2F0UG9pbnQoY29uc3QgSGl0VGVzdFJl
cXVlc3QmLCBIaXRUZXN0UmVzdWx0JiwgY29uc3QgRmxvYXRQb2ludCYgcG9pbnRJblBhcmVudCwg
SGl0VGVzdEFjdGlvbik7CisKKyAgICB2b2lkIHVwZGF0ZUNhY2hlZEJvdW5kYXJpZXMoKTsKKwor
ICAgIHZvaWQgc2V0dXBTcXVhcmVDYXBQYXRoKFBhdGgqJiwgaW50JiBhcHBseU1vZGUpOworICAg
IGJvb2wgc2V0dXBOb25TY2FsaW5nU3Ryb2tlUGF0aChQYXRoKiYsIEdyYXBoaWNzQ29udGV4dFN0
YXRlU2F2ZXImKTsKKyAgICBib29sIHNob3VsZFN0cm9rZVplcm9MZW5ndGhTdWJwYXRoKCkgY29u
c3Q7CisgICAgRmxvYXRSZWN0IHplcm9MZW5ndGhTdWJwYXRoUmVjdCgpIGNvbnN0OworCisgICAg
dm9pZCBmaWxsQW5kU3Ryb2tlUGF0aChHcmFwaGljc0NvbnRleHQqKTsKKyAgICB2b2lkIGluZmxh
dGVXaXRoU3Ryb2tlYW5kTWFya2VyQm91bmRzKCk7CisKK3ByaXZhdGU6CisgICAgRmxvYXRSZWN0
IG1fZmlsbEJvdW5kaW5nQm94OworICAgIEZsb2F0UmVjdCBtX3N0cm9rZUFuZE1hcmtlckJvdW5k
aW5nQm94OworICAgIEZsb2F0UmVjdCBtX3JlcGFpbnRCb3VuZGluZ0JveDsKKyAgICBTVkdNYXJr
ZXJMYXlvdXRJbmZvIG1fbWFya2VyTGF5b3V0SW5mbzsKKyAgICBBZmZpbmVUcmFuc2Zvcm0gbV9s
b2NhbFRyYW5zZm9ybTsKKyAgICBPd25QdHI8UGF0aD4gbV9wYXRoOworCisgICAgYm9vbCBtX25l
ZWRzQm91bmRhcmllc1VwZGF0ZSA6IDE7CisgICAgYm9vbCBtX25lZWRzU2hhcGVVcGRhdGUgOiAx
OworICAgIGJvb2wgbV9uZWVkc1RyYW5zZm9ybVVwZGF0ZSA6IDE7CisgICAgYm9vbCBtX2ZpbGxG
YWxsYmFjayA6IDE7CisgICAgYm9vbCBtX3N0cm9rZUNvbnRhaW5zRmFsbEJhY2sgOiAxOworfTsK
KworaW5saW5lIFJlbmRlclNWR1NoYXBlKiB0b1JlbmRlclNWR1NoYXBlKFJlbmRlck9iamVjdCog
b2JqZWN0KQoreworICAgIEFTU0VSVCghb2JqZWN0IHx8IG9iamVjdC0+aXNTVkdTaGFwZSgpKTsK
KyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8UmVuZGVyU1ZHU2hhcGUqPihvYmplY3QpOworfQorCitp
bmxpbmUgY29uc3QgUmVuZGVyU1ZHU2hhcGUqIHRvUmVuZGVyU1ZHU2hhcGUoY29uc3QgUmVuZGVy
T2JqZWN0KiBvYmplY3QpCit7CisgICAgQVNTRVJUKCFvYmplY3QgfHwgb2JqZWN0LT5pc1NWR1No
YXBlKCkpOworICAgIHJldHVybiBzdGF0aWNfY2FzdDxjb25zdCBSZW5kZXJTVkdTaGFwZSo+KG9i
amVjdCk7Cit9CisKKy8vIFRoaXMgd2lsbCBjYXRjaCBhbnlvbmUgZG9pbmcgYW4gdW5uZWNlc3Nh
cnkgY2FzdC4KK3ZvaWQgdG9SZW5kZXJTVkdTaGFwZShjb25zdCBSZW5kZXJTVkdTaGFwZSopOwor
Cit9CisKKyNlbmRpZiAvLyBFTkFCTEUoU1ZHKQorI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR0lubGluZVRleHRCb3guY3BwIGIvU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL3N2Zy9TVkdJbmxpbmVUZXh0Qm94LmNwcAppbmRleCBiMjQzZGY5Li4xODg5
MDA5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR0lubGluZVRl
eHRCb3guY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHSW5saW5lVGV4
dEJveC5jcHAKQEAgLTM3OCw3ICszNzgsNyBAQCB2b2lkIFNWR0lubGluZVRleHRCb3g6OnJlbGVh
c2VQYWludGluZ1Jlc291cmNlKEdyYXBoaWNzQ29udGV4dComIGNvbnRleHQsIGNvbnN0CiAgICAg
UmVuZGVyT2JqZWN0KiBwYXJlbnRSZW5kZXJlciA9IHBhcmVudCgpLT5yZW5kZXJlcigpOwogICAg
IEFTU0VSVChwYXJlbnRSZW5kZXJlcik7CiAKLSAgICBtX3BhaW50aW5nUmVzb3VyY2UtPnBvc3RB
cHBseVJlc291cmNlKHBhcmVudFJlbmRlcmVyLCBjb250ZXh0LCBtX3BhaW50aW5nUmVzb3VyY2VN
b2RlLCBwYXRoKTsKKyAgICBtX3BhaW50aW5nUmVzb3VyY2UtPnBvc3RBcHBseVJlc291cmNlKHBh
cmVudFJlbmRlcmVyLCBjb250ZXh0LCBtX3BhaW50aW5nUmVzb3VyY2VNb2RlLCBwYXRoLCAvKlJl
bmRlclNWR1NoYXBlKi8gMCk7CiAgICAgbV9wYWludGluZ1Jlc291cmNlID0gMDsKIH0KIApkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdSZW5kZXJTdXBwb3J0LmNw
cCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHUmVuZGVyU3VwcG9ydC5jcHAKaW5k
ZXggNTcyMDlhYS4uYWY5YWVjMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L3N2Zy9TVkdSZW5kZXJTdXBwb3J0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
c3ZnL1NWR1JlbmRlclN1cHBvcnQuY3BwCkBAIC0xNTIsNyArMTUyLDcgQEAgdm9pZCBTVkdSZW5k
ZXJTdXBwb3J0OjpmaW5pc2hSZW5kZXJTVkdDb250ZW50KFJlbmRlck9iamVjdCogb2JqZWN0LCBQ
YWludEluZm8mIHAKICAgICBTVkdSZXNvdXJjZXMqIHJlc291cmNlcyA9IFNWR1Jlc291cmNlc0Nh
Y2hlOjpjYWNoZWRSZXNvdXJjZXNGb3JSZW5kZXJPYmplY3Qob2JqZWN0KTsKICAgICBpZiAocmVz
b3VyY2VzKSB7CiAgICAgICAgIGlmIChSZW5kZXJTVkdSZXNvdXJjZUZpbHRlciogZmlsdGVyID0g
cmVzb3VyY2VzLT5maWx0ZXIoKSkgewotICAgICAgICAgICAgZmlsdGVyLT5wb3N0QXBwbHlSZXNv
dXJjZShvYmplY3QsIHBhaW50SW5mby5jb250ZXh0LCBBcHBseVRvRGVmYXVsdE1vZGUsIC8qIHBh
dGggKi8wKTsKKyAgICAgICAgICAgIGZpbHRlci0+cG9zdEFwcGx5UmVzb3VyY2Uoc3RhdGljX2Nh
c3Q8UmVuZGVyU1ZHU2hhcGUqPihvYmplY3QpLCBwYWludEluZm8uY29udGV4dCwgQXBwbHlUb0Rl
ZmF1bHRNb2RlLCAwLCAwKTsKICAgICAgICAgICAgIHBhaW50SW5mby5jb250ZXh0ID0gc2F2ZWRD
b250ZXh0OwogICAgICAgICB9CiAgICAgfQpAQCAtMjI0LDkgKzIyNCw5IEBAIHZvaWQgU1ZHUmVu
ZGVyU3VwcG9ydDo6bGF5b3V0Q2hpbGRyZW4oUmVuZGVyT2JqZWN0KiBzdGFydCwgYm9vbCBzZWxm
TmVlZHNMYXlvdXQpCiAgICAgICAgICAgICAvLyBXaGVuIHNlbGZOZWVkc0xheW91dCBpcyBmYWxz
ZSBhbmQgdGhlIGxheW91dCBzaXplIGNoYW5nZWQsIHdlIGhhdmUgdG8gY2hlY2sgd2hldGhlciB0
aGlzIGNoaWxkIHVzZXMgcmVsYXRpdmUgbGVuZ3RocwogICAgICAgICAgICAgaWYgKFNWR0VsZW1l
bnQqIGVsZW1lbnQgPSBjaGlsZC0+bm9kZSgpLT5pc1NWR0VsZW1lbnQoKSA/IHN0YXRpY19jYXN0
PFNWR0VsZW1lbnQqPihjaGlsZC0+bm9kZSgpKSA6IDApIHsKICAgICAgICAgICAgICAgICBpZiAo
ZWxlbWVudC0+aXNTdHlsZWQoKSAmJiBzdGF0aWNfY2FzdDxTVkdTdHlsZWRFbGVtZW50Kj4oZWxl
bWVudCktPmhhc1JlbGF0aXZlTGVuZ3RocygpKSB7Ci0gICAgICAgICAgICAgICAgICAgIC8vIFdo
ZW4gdGhlIGxheW91dCBzaXplIGNoYW5nZWQgYW5kIHdoZW4gdXNpbmcgcmVsYXRpdmUgdmFsdWVz
IHRlbGwgdGhlIFJlbmRlclNWR1BhdGggdG8gdXBkYXRlIGl0cyBQYXRoIG9iamVjdAotICAgICAg
ICAgICAgICAgICAgICBpZiAoY2hpbGQtPmlzU1ZHUGF0aCgpKQotICAgICAgICAgICAgICAgICAg
ICAgICAgdG9SZW5kZXJTVkdQYXRoKGNoaWxkKS0+c2V0TmVlZHNQYXRoVXBkYXRlKCk7CisgICAg
ICAgICAgICAgICAgICAgIC8vIFdoZW4gdGhlIGxheW91dCBzaXplIGNoYW5nZWQgYW5kIHdoZW4g
dXNpbmcgcmVsYXRpdmUgdmFsdWVzIHRlbGwgdGhlIFJlbmRlclNWR1NoYXBlIHRvIHVwZGF0ZSBp
dHMgc2hhcGUgb2JqZWN0CisgICAgICAgICAgICAgICAgICAgIGlmIChjaGlsZC0+aXNTVkdTaGFw
ZSgpKQorICAgICAgICAgICAgICAgICAgICAgICAgdG9SZW5kZXJTVkdTaGFwZShjaGlsZCktPnNl
dE5lZWRzU2hhcGVVcGRhdGUoKTsKIAogICAgICAgICAgICAgICAgICAgICBuZWVkc0xheW91dCA9
IHRydWU7CiAgICAgICAgICAgICAgICAgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL3N2Zy9TVkdSZW5kZXJUcmVlQXNUZXh0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9zdmcvU1ZHUmVuZGVyVHJlZUFzVGV4dC5jcHAKb2xkIG1vZGUgMTAwNjQ0Cm5ldyBtb2Rl
IDEwMDc1NQppbmRleCA2NjI0YzE3Li43OWEyYTI2Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9zdmcvU1ZHUmVuZGVyVHJlZUFzVGV4dC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL3N2Zy9TVkdSZW5kZXJUcmVlQXNUZXh0LmNwcApAQCAtNTUsNiArNTUsNyBAQAogI2lu
Y2x1ZGUgIlJlbmRlclNWR1Jlc291cmNlUmFkaWFsR3JhZGllbnQuaCIKICNpbmNsdWRlICJSZW5k
ZXJTVkdSZXNvdXJjZVNvbGlkQ29sb3IuaCIKICNpbmNsdWRlICJSZW5kZXJTVkdSb290LmgiCisj
aW5jbHVkZSAiUmVuZGVyU1ZHU2hhcGUuaCIKICNpbmNsdWRlICJSZW5kZXJTVkdUZXh0LmgiCiAj
aW5jbHVkZSAiUmVuZGVyVHJlZUFzVGV4dC5oIgogI2luY2x1ZGUgIlNWR0NpcmNsZUVsZW1lbnQu
aCIKQEAgLTI4OSwxOCArMjkwLDE4IEBAIHN0YXRpYyB2b2lkIHdyaXRlU3R5bGUoVGV4dFN0cmVh
bSYgdHMsIGNvbnN0IFJlbmRlck9iamVjdCYgb2JqZWN0KQogICAgICAgICB3cml0ZU5hbWVWYWx1
ZVBhaXIodHMsICJ0cmFuc2Zvcm0iLCBvYmplY3QubG9jYWxUcmFuc2Zvcm0oKSk7CiAgICAgd3Jp
dGVJZk5vdERlZmF1bHQodHMsICJpbWFnZSByZW5kZXJpbmciLCBzdHlsZS0+aW1hZ2VSZW5kZXJp
bmcoKSwgUmVuZGVyU3R5bGU6OmluaXRpYWxJbWFnZVJlbmRlcmluZygpKTsKICAgICB3cml0ZUlm
Tm90RGVmYXVsdCh0cywgIm9wYWNpdHkiLCBzdHlsZS0+b3BhY2l0eSgpLCBSZW5kZXJTdHlsZTo6
aW5pdGlhbE9wYWNpdHkoKSk7Ci0gICAgaWYgKG9iamVjdC5pc1NWR1BhdGgoKSkgewotICAgICAg
ICBjb25zdCBSZW5kZXJTVkdQYXRoJiBwYXRoID0gc3RhdGljX2Nhc3Q8Y29uc3QgUmVuZGVyU1ZH
UGF0aCY+KG9iamVjdCk7Ci0gICAgICAgIEFTU0VSVChwYXRoLm5vZGUoKSk7Ci0gICAgICAgIEFT
U0VSVChwYXRoLm5vZGUoKS0+aXNTVkdFbGVtZW50KCkpOworICAgIGlmIChvYmplY3QuaXNTVkdT
aGFwZSgpKSB7CisgICAgICAgIGNvbnN0IFJlbmRlclNWR1NoYXBlJiBzaGFwZSA9IHN0YXRpY19j
YXN0PGNvbnN0IFJlbmRlclNWR1NoYXBlJj4ob2JqZWN0KTsKKyAgICAgICAgQVNTRVJUKHNoYXBl
Lm5vZGUoKSk7CisgICAgICAgIEFTU0VSVChzaGFwZS5ub2RlKCktPmlzU1ZHRWxlbWVudCgpKTsK
IAogICAgICAgICBDb2xvciBmYWxsYmFja0NvbG9yOwotICAgICAgICBpZiAoUmVuZGVyU1ZHUmVz
b3VyY2UqIHN0cm9rZVBhaW50aW5nUmVzb3VyY2UgPSBSZW5kZXJTVkdSZXNvdXJjZTo6c3Ryb2tl
UGFpbnRpbmdSZXNvdXJjZShjb25zdF9jYXN0PFJlbmRlclNWR1BhdGgqPigmcGF0aCksIHBhdGgu
c3R5bGUoKSwgZmFsbGJhY2tDb2xvcikpIHsKKyAgICAgICAgaWYgKFJlbmRlclNWR1Jlc291cmNl
KiBzdHJva2VQYWludGluZ1Jlc291cmNlID0gUmVuZGVyU1ZHUmVzb3VyY2U6OnN0cm9rZVBhaW50
aW5nUmVzb3VyY2UoY29uc3RfY2FzdDxSZW5kZXJTVkdTaGFwZSo+KCZzaGFwZSksIHNoYXBlLnN0
eWxlKCksIGZhbGxiYWNrQ29sb3IpKSB7CiAgICAgICAgICAgICBUZXh0U3RyZWFtU2VwYXJhdG9y
IHMoIiAiKTsKICAgICAgICAgICAgIHRzIDw8ICIgW3N0cm9rZT17IiA8PCBzOwogICAgICAgICAg
ICAgd3JpdGVTVkdQYWludGluZ1Jlc291cmNlKHRzLCBzdHJva2VQYWludGluZ1Jlc291cmNlKTsK
IAotICAgICAgICAgICAgU1ZHTGVuZ3RoQ29udGV4dCBsZW5ndGhDb250ZXh0KHN0YXRpY19jYXN0
PFNWR0VsZW1lbnQqPihwYXRoLm5vZGUoKSkpOworICAgICAgICAgICAgU1ZHTGVuZ3RoQ29udGV4
dCBsZW5ndGhDb250ZXh0KHN0YXRpY19jYXN0PFNWR0VsZW1lbnQqPihzaGFwZS5ub2RlKCkpKTsK
ICAgICAgICAgICAgIGRvdWJsZSBkYXNoT2Zmc2V0ID0gc3ZnU3R5bGUtPnN0cm9rZURhc2hPZmZz
ZXQoKS52YWx1ZShsZW5ndGhDb250ZXh0KTsKICAgICAgICAgICAgIGRvdWJsZSBzdHJva2VXaWR0
aCA9IHN2Z1N0eWxlLT5zdHJva2VXaWR0aCgpLnZhbHVlKGxlbmd0aENvbnRleHQpOwogICAgICAg
ICAgICAgY29uc3QgVmVjdG9yPFNWR0xlbmd0aD4mIGRhc2hlcyA9IHN2Z1N0eWxlLT5zdHJva2VE
YXNoQXJyYXkoKTsKQEAgLTMyMiw3ICszMjMsNyBAQCBzdGF0aWMgdm9pZCB3cml0ZVN0eWxlKFRl
eHRTdHJlYW0mIHRzLCBjb25zdCBSZW5kZXJPYmplY3QmIG9iamVjdCkKICAgICAgICAgICAgIHRz
IDw8ICJ9XSI7CiAgICAgICAgIH0KIAotICAgICAgICBpZiAoUmVuZGVyU1ZHUmVzb3VyY2UqIGZp
bGxQYWludGluZ1Jlc291cmNlID0gUmVuZGVyU1ZHUmVzb3VyY2U6OmZpbGxQYWludGluZ1Jlc291
cmNlKGNvbnN0X2Nhc3Q8UmVuZGVyU1ZHUGF0aCo+KCZwYXRoKSwgcGF0aC5zdHlsZSgpLCBmYWxs
YmFja0NvbG9yKSkgeworICAgICAgICBpZiAoUmVuZGVyU1ZHUmVzb3VyY2UqIGZpbGxQYWludGlu
Z1Jlc291cmNlID0gUmVuZGVyU1ZHUmVzb3VyY2U6OmZpbGxQYWludGluZ1Jlc291cmNlKGNvbnN0
X2Nhc3Q8UmVuZGVyU1ZHU2hhcGUqPigmc2hhcGUpLCBzaGFwZS5zdHlsZSgpLCBmYWxsYmFja0Nv
bG9yKSkgewogICAgICAgICAgICAgVGV4dFN0cmVhbVNlcGFyYXRvciBzKCIgIik7CiAgICAgICAg
ICAgICB0cyA8PCAiIFtmaWxsPXsiIDw8IHM7CiAgICAgICAgICAgICB3cml0ZVNWR1BhaW50aW5n
UmVzb3VyY2UodHMsIGZpbGxQYWludGluZ1Jlc291cmNlKTsKQEAgLTM0NiwxMiArMzQ3LDEyIEBA
IHN0YXRpYyBUZXh0U3RyZWFtJiB3cml0ZVBvc2l0aW9uQW5kU3R5bGUoVGV4dFN0cmVhbSYgdHMs
IGNvbnN0IFJlbmRlck9iamVjdCYgb2JqCiAgICAgcmV0dXJuIHRzOwogfQogCi1zdGF0aWMgVGV4
dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiB0cywgY29uc3QgUmVuZGVyU1ZHUGF0aCYg
cGF0aCkKK3N0YXRpYyBUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJlYW0mIHRzLCBjb25z
dCBSZW5kZXJTVkdTaGFwZSYgc2hhcGUpCiB7Ci0gICAgd3JpdGVQb3NpdGlvbkFuZFN0eWxlKHRz
LCBwYXRoKTsKKyAgICB3cml0ZVBvc2l0aW9uQW5kU3R5bGUodHMsIHNoYXBlKTsKIAotICAgIEFT
U0VSVChwYXRoLm5vZGUoKS0+aXNTVkdFbGVtZW50KCkpOwotICAgIFNWR0VsZW1lbnQqIHN2Z0Vs
ZW1lbnQgPSBzdGF0aWNfY2FzdDxTVkdFbGVtZW50Kj4ocGF0aC5ub2RlKCkpOworICAgIEFTU0VS
VChzaGFwZS5ub2RlKCktPmlzU1ZHRWxlbWVudCgpKTsKKyAgICBTVkdFbGVtZW50KiBzdmdFbGVt
ZW50ID0gc3RhdGljX2Nhc3Q8U1ZHRWxlbWVudCo+KHNoYXBlLm5vZGUoKSk7CiAgICAgU1ZHTGVu
Z3RoQ29udGV4dCBsZW5ndGhDb250ZXh0KHN2Z0VsZW1lbnQpOwogCiAgICAgaWYgKHN2Z0VsZW1l
bnQtPmhhc1RhZ05hbWUoU1ZHTmFtZXM6OnJlY3RUYWcpKSB7CkBAIC02NDUsMTEgKzY0NiwxMSBA
QCB2b2lkIHdyaXRlU1ZHSW1hZ2UoVGV4dFN0cmVhbSYgdHMsIGNvbnN0IFJlbmRlclNWR0ltYWdl
JiBpbWFnZSwgaW50IGluZGVudCkKICAgICB3cml0ZVJlc291cmNlcyh0cywgaW1hZ2UsIGluZGVu
dCk7CiB9CiAKLXZvaWQgd3JpdGUoVGV4dFN0cmVhbSYgdHMsIGNvbnN0IFJlbmRlclNWR1BhdGgm
IHBhdGgsIGludCBpbmRlbnQpCit2b2lkIHdyaXRlKFRleHRTdHJlYW0mIHRzLCBjb25zdCBSZW5k
ZXJTVkdTaGFwZSYgc2hhcGUsIGludCBpbmRlbnQpCiB7Ci0gICAgd3JpdGVTdGFuZGFyZFByZWZp
eCh0cywgcGF0aCwgaW5kZW50KTsKLSAgICB0cyA8PCBwYXRoIDw8ICJcbiI7Ci0gICAgd3JpdGVS
ZXNvdXJjZXModHMsIHBhdGgsIGluZGVudCk7CisgICAgd3JpdGVTdGFuZGFyZFByZWZpeCh0cywg
c2hhcGUsIGluZGVudCk7CisgICAgdHMgPDwgc2hhcGUgPDwgIlxuIjsKKyAgICB3cml0ZVJlc291
cmNlcyh0cywgc2hhcGUsIGluZGVudCk7CiB9CiAKIHZvaWQgd3JpdGVTVkdHcmFkaWVudFN0b3Ao
VGV4dFN0cmVhbSYgdHMsIGNvbnN0IFJlbmRlclNWR0dyYWRpZW50U3RvcCYgc3RvcCwgaW50IGlu
ZGVudCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHUmVuZGVy
VHJlZUFzVGV4dC5oIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdSZW5kZXJUcmVl
QXNUZXh0LmgKaW5kZXggY2UwN2E1Yy4uMzU5OGM4MyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL3N2Zy9TVkdSZW5kZXJUcmVlQXNUZXh0LmgKKysrIGIvU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL3N2Zy9TVkdSZW5kZXJUcmVlQXNUZXh0LmgKQEAgLTQxLDE0ICs0MSwxNCBA
QCBjbGFzcyBSZW5kZXJJbWFnZTsKIGNsYXNzIFJlbmRlck9iamVjdDsKIGNsYXNzIFJlbmRlclNW
R0dyYWRpZW50U3RvcDsKIGNsYXNzIFJlbmRlclNWR0ltYWdlOwotY2xhc3MgUmVuZGVyU1ZHUGF0
aDsKK2NsYXNzIFJlbmRlclNWR1NoYXBlOwogY2xhc3MgUmVuZGVyU1ZHUm9vdDsKIGNsYXNzIFJl
bmRlclRleHQ7CiBjbGFzcyBBZmZpbmVUcmFuc2Zvcm07CiBjbGFzcyBTVkdVbml0VHlwZXM7CiAK
IC8vIGZ1bmN0aW9ucyB1c2VkIGJ5IHRoZSBtYWluIFJlbmRlclRyZWVBc1RleHQgY29kZQotdm9p
ZCB3cml0ZShUZXh0U3RyZWFtJiwgY29uc3QgUmVuZGVyU1ZHUGF0aCYsIGludCBpbmRlbnQpOwor
dm9pZCB3cml0ZShUZXh0U3RyZWFtJiwgY29uc3QgUmVuZGVyU1ZHU2hhcGUmLCBpbnQgaW5kZW50
KTsKIHZvaWQgd3JpdGUoVGV4dFN0cmVhbSYsIGNvbnN0IFJlbmRlclNWR1Jvb3QmLCBpbnQgaW5k
ZW50KTsKIHZvaWQgd3JpdGVTVkdHcmFkaWVudFN0b3AoVGV4dFN0cmVhbSYsIGNvbnN0IFJlbmRl
clNWR0dyYWRpZW50U3RvcCYsIGludCBpbmRlbnQpOwogdm9pZCB3cml0ZVNWR1Jlc291cmNlQ29u
dGFpbmVyKFRleHRTdHJlYW0mLCBjb25zdCBSZW5kZXJPYmplY3QmLCBpbnQgaW5kZW50KTsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHVGV4dFJ1blJlbmRlcmlu
Z0NvbnRleHQuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdUZXh0UnVuUmVu
ZGVyaW5nQ29udGV4dC5jcHAKaW5kZXggMzNhY2Y5Mi4uMjI0ZWI4NiAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdUZXh0UnVuUmVuZGVyaW5nQ29udGV4dC5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdUZXh0UnVuUmVuZGVyaW5nQ29u
dGV4dC5jcHAKQEAgLTE2MCw3ICsxNjAsNyBAQCB2b2lkIFNWR1RleHRSdW5SZW5kZXJpbmdDb250
ZXh0OjpkcmF3U1ZHR2x5cGhzKEdyYXBoaWNzQ29udGV4dCogY29udGV4dCwgY29uc3QgVAogICAg
ICAgICAgICAgICAgIGNvbnN0IFJlbmRlclNWR0lubGluZVRleHQqIHRleHRSZW5kZXJlciA9IHRv
UmVuZGVyU1ZHSW5saW5lVGV4dChyZW5kZXJPYmplY3QpOwogICAgICAgICAgICAgICAgIGNvbnRl
eHQtPnNldFN0cm9rZVRoaWNrbmVzcyhjb250ZXh0LT5zdHJva2VUaGlja25lc3MoKSAqIHRleHRS
ZW5kZXJlci0+c2NhbGluZ0ZhY3RvcigpKTsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGFj
dGl2ZVBhaW50aW5nUmVzb3VyY2UtPnBvc3RBcHBseVJlc291cmNlKHBhcmVudFJlbmRlck9iamVj
dCwgY29udGV4dCwgcmVzb3VyY2VNb2RlLCAmZ2x5cGhQYXRoKTsKKyAgICAgICAgICAgIGFjdGl2
ZVBhaW50aW5nUmVzb3VyY2UtPnBvc3RBcHBseVJlc291cmNlKHBhcmVudFJlbmRlck9iamVjdCwg
Y29udGV4dCwgcmVzb3VyY2VNb2RlLCAmZ2x5cGhQYXRoLCAwKTsKICAgICAgICAgIH0KICAKICAg
ICAgICAgY29udGV4dC0+cmVzdG9yZSgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvc3Zn
L1NWR0NpcmNsZUVsZW1lbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0NpcmNsZUVsZW1l
bnQuY3BwCmluZGV4IDI3YzQwNTIuLmE2YzI2YWEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3N2Zy9TVkdDaXJjbGVFbGVtZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHQ2ly
Y2xlRWxlbWVudC5jcHAKQEAgLTEyNCw3ICsxMjQsNyBAQCB2b2lkIFNWR0NpcmNsZUVsZW1lbnQ6
OnN2Z0F0dHJpYnV0ZUNoYW5nZWQoY29uc3QgUXVhbGlmaWVkTmFtZSYgYXR0ck5hbWUpCiAgICAg
ICAgIHJldHVybjsKIAogICAgIGlmIChpc0xlbmd0aEF0dHJpYnV0ZSkgewotICAgICAgICByZW5k
ZXJlci0+c2V0TmVlZHNQYXRoVXBkYXRlKCk7CisgICAgICAgIHJlbmRlcmVyLT5zZXROZWVkc1No
YXBlVXBkYXRlKCk7CiAgICAgICAgIFJlbmRlclNWR1Jlc291cmNlOjptYXJrRm9yTGF5b3V0QW5k
UGFyZW50UmVzb3VyY2VJbnZhbGlkYXRpb24ocmVuZGVyZXIpOwogICAgICAgICByZXR1cm47CiAg
ICAgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0VsbGlwc2VFbGVtZW50LmNw
cCBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdFbGxpcHNlRWxlbWVudC5jcHAKaW5kZXggZjhlY2Iz
NC4uNzZlZTlhYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0VsbGlwc2VFbGVt
ZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRWxsaXBzZUVsZW1lbnQuY3BwCkBA
IC0xMjksNyArMTI5LDcgQEAgdm9pZCBTVkdFbGxpcHNlRWxlbWVudDo6c3ZnQXR0cmlidXRlQ2hh
bmdlZChjb25zdCBRdWFsaWZpZWROYW1lJiBhdHRyTmFtZSkKICAgICAgICAgcmV0dXJuOwogCiAg
ICAgaWYgKGlzTGVuZ3RoQXR0cmlidXRlKSB7Ci0gICAgICAgIHJlbmRlcmVyLT5zZXROZWVkc1Bh
dGhVcGRhdGUoKTsKKyAgICAgICAgcmVuZGVyZXItPnNldE5lZWRzU2hhcGVVcGRhdGUoKTsKICAg
ICAgICAgUmVuZGVyU1ZHUmVzb3VyY2U6Om1hcmtGb3JMYXlvdXRBbmRQYXJlbnRSZXNvdXJjZUlu
dmFsaWRhdGlvbihyZW5kZXJlcik7CiAgICAgICAgIHJldHVybjsKICAgICB9CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHTGVuZ3RoQ29udGV4dC5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9zdmcvU1ZHTGVuZ3RoQ29udGV4dC5jcHAKb2xkIG1vZGUgMTAwNjQ0Cm5ldyBtb2RlIDEwMDc1
NQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0xpbmVFbGVtZW50LmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL3N2Zy9TVkdMaW5lRWxlbWVudC5jcHAKaW5kZXggZGE4NDIyMy4uNDQ0MjY3
NiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0xpbmVFbGVtZW50LmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHTGluZUVsZW1lbnQuY3BwCkBAIC0xMjksNyArMTI5LDcg
QEAgdm9pZCBTVkdMaW5lRWxlbWVudDo6c3ZnQXR0cmlidXRlQ2hhbmdlZChjb25zdCBRdWFsaWZp
ZWROYW1lJiBhdHRyTmFtZSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgaWYgKGlzTGVuZ3RoQXR0
cmlidXRlKSB7Ci0gICAgICAgIHJlbmRlcmVyLT5zZXROZWVkc1BhdGhVcGRhdGUoKTsKKyAgICAg
ICAgcmVuZGVyZXItPnNldE5lZWRzU2hhcGVVcGRhdGUoKTsKICAgICAgICAgUmVuZGVyU1ZHUmVz
b3VyY2U6Om1hcmtGb3JMYXlvdXRBbmRQYXJlbnRSZXNvdXJjZUludmFsaWRhdGlvbihyZW5kZXJl
cik7CiAgICAgICAgIHJldHVybjsKICAgICB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9z
dmcvU1ZHUGF0aEVsZW1lbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvc3ZnL1NWR1BhdGhFbGVtZW50
LmNwcAppbmRleCA0MTAzMDFhLi42MmI5MDRhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9z
dmcvU1ZHUGF0aEVsZW1lbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdQYXRoRWxl
bWVudC5jcHAKQEAgLTI3MSw3ICsyNzEsNyBAQCB2b2lkIFNWR1BhdGhFbGVtZW50OjpzdmdBdHRy
aWJ1dGVDaGFuZ2VkKGNvbnN0IFF1YWxpZmllZE5hbWUmIGF0dHJOYW1lKQogICAgICAgICB9CiAK
ICAgICAgICAgaWYgKHJlbmRlcmVyKQotICAgICAgICAgICAgcmVuZGVyZXItPnNldE5lZWRzUGF0
aFVwZGF0ZSgpOworICAgICAgICAgICAgcmVuZGVyZXItPnNldE5lZWRzU2hhcGVVcGRhdGUoKTsK
ICAgICB9CiAKICAgICBpZiAocmVuZGVyZXIpCkBAIC0zNTEsNyArMzUxLDcgQEAgdm9pZCBTVkdQ
YXRoRWxlbWVudDo6cGF0aFNlZ0xpc3RDaGFuZ2VkKFNWR1BhdGhTZWdSb2xlIHJvbGUpCiAgICAg
aWYgKCFyZW5kZXJlcikKICAgICAgICAgcmV0dXJuOwogCi0gICAgcmVuZGVyZXItPnNldE5lZWRz
UGF0aFVwZGF0ZSgpOworICAgIHJlbmRlcmVyLT5zZXROZWVkc1NoYXBlVXBkYXRlKCk7CiAgICAg
UmVuZGVyU1ZHUmVzb3VyY2U6Om1hcmtGb3JMYXlvdXRBbmRQYXJlbnRSZXNvdXJjZUludmFsaWRh
dGlvbihyZW5kZXJlcik7CiB9CiAKQEAgLTM3NCw2ICszNzQsMTIgQEAgRmxvYXRSZWN0IFNWR1Bh
dGhFbGVtZW50OjpnZXRCQm94KFN0eWxlVXBkYXRlU3RyYXRlZ3kgc3R5bGVVcGRhdGVTdHJhdGVn
eSkKICAgICByZXR1cm4gbV9jYWNoZWRCQm94UmVjdDsKIH0KIAorUmVuZGVyT2JqZWN0KiBTVkdQ
YXRoRWxlbWVudDo6Y3JlYXRlUmVuZGVyZXIoUmVuZGVyQXJlbmEqIGFyZW5hLCBSZW5kZXJTdHls
ZSopCit7CisgICAgLy8gQnkgZGVmYXVsdCwgYW55IHN1YmNsYXNzIGlzIGV4cGVjdGVkIHRvIGRv
IHBhdGgtYmFzZWQgZHJhd2luZworICAgIHJldHVybiBuZXcgKGFyZW5hKSBSZW5kZXJTVkdQYXRo
KHRoaXMpOworfQorCiB9CiAKICNlbmRpZiAvLyBFTkFCTEUoU1ZHKQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvc3ZnL1NWR1BhdGhFbGVtZW50LmggYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZH
UGF0aEVsZW1lbnQuaAppbmRleCAxNzMzNjUwLi5jNmJmMjIwIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9zdmcvU1ZHUGF0aEVsZW1lbnQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZH
UGF0aEVsZW1lbnQuaApAQCAtMTIzLDYgKzEyMyw4IEBAIHByaXZhdGU6CiAgICAgdmlydHVhbCB2
b2lkIHN5bmNocm9uaXplUmVxdWlyZWRFeHRlbnNpb25zKCkgeyBTVkdUZXN0czo6c3luY2hyb25p
emVSZXF1aXJlZEV4dGVuc2lvbnModGhpcyk7IH0KICAgICB2aXJ0dWFsIHZvaWQgc3luY2hyb25p
emVTeXN0ZW1MYW5ndWFnZSgpIHsgU1ZHVGVzdHM6OnN5bmNocm9uaXplU3lzdGVtTGFuZ3VhZ2Uo
dGhpcyk7IH0KIAorICAgIFJlbmRlck9iamVjdCogY3JlYXRlUmVuZGVyZXIoUmVuZGVyQXJlbmEq
LCBSZW5kZXJTdHlsZSopOworCiBwcml2YXRlOgogICAgIE93blB0cjxTVkdQYXRoQnl0ZVN0cmVh
bT4gbV9wYXRoQnl0ZVN0cmVhbTsKICAgICBtdXRhYmxlIFNWR1N5bmNocm9uaXphYmxlQW5pbWF0
ZWRQcm9wZXJ0eTxTVkdQYXRoU2VnTGlzdD4gbV9wYXRoU2VnTGlzdDsKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3N2Zy9TVkdQb2x5RWxlbWVudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9zdmcv
U1ZHUG9seUVsZW1lbnQuY3BwCmluZGV4IDY2YzUyNTguLmE4YjY3YzcgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3N2Zy9TVkdQb2x5RWxlbWVudC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
c3ZnL1NWR1BvbHlFbGVtZW50LmNwcApAQCAtMTI0LDcgKzEyNCw3IEBAIHZvaWQgU1ZHUG9seUVs
ZW1lbnQ6OnN2Z0F0dHJpYnV0ZUNoYW5nZWQoY29uc3QgUXVhbGlmaWVkTmFtZSYgYXR0ck5hbWUp
CiAgICAgICAgIHJldHVybjsKIAogICAgIGlmIChhdHRyTmFtZSA9PSBTVkdOYW1lczo6cG9pbnRz
QXR0cikgewotICAgICAgICByZW5kZXJlci0+c2V0TmVlZHNQYXRoVXBkYXRlKCk7CisgICAgICAg
IHJlbmRlcmVyLT5zZXROZWVkc1NoYXBlVXBkYXRlKCk7CiAgICAgICAgIFJlbmRlclNWR1Jlc291
cmNlOjptYXJrRm9yTGF5b3V0QW5kUGFyZW50UmVzb3VyY2VJbnZhbGlkYXRpb24ocmVuZGVyZXIp
OwogICAgICAgICByZXR1cm47CiAgICAgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvc3Zn
L1NWR1JlY3RFbGVtZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdSZWN0RWxlbWVudC5j
cHAKaW5kZXggZjQzNmUzNC4uZWNhMDNkZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvc3Zn
L1NWR1JlY3RFbGVtZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHUmVjdEVsZW1l
bnQuY3BwCkBAIC0yNSw2ICsyNSw3IEBACiAKICNpbmNsdWRlICJBdHRyaWJ1dGUuaCIKICNpbmNs
dWRlICJSZW5kZXJTVkdQYXRoLmgiCisjaW5jbHVkZSAiUmVuZGVyU1ZHUmVjdC5oIgogI2luY2x1
ZGUgIlJlbmRlclNWR1Jlc291cmNlLmgiCiAjaW5jbHVkZSAiU1ZHRWxlbWVudEluc3RhbmNlLmgi
CiAjaW5jbHVkZSAiU1ZHTGVuZ3RoLmgiCkBAIC0zMiw2ICszMyw4IEBACiAKIG5hbWVzcGFjZSBX
ZWJDb3JlIHsKIAorY2xhc3MgUmVuZGVyU1ZHUmVjdDsKKwogLy8gQW5pbWF0ZWQgcHJvcGVydHkg
ZGVmaW5pdGlvbnMKIERFRklORV9BTklNQVRFRF9MRU5HVEgoU1ZHUmVjdEVsZW1lbnQsIFNWR05h
bWVzOjp4QXR0ciwgWCwgeCkKIERFRklORV9BTklNQVRFRF9MRU5HVEgoU1ZHUmVjdEVsZW1lbnQs
IFNWR05hbWVzOjp5QXR0ciwgWSwgeSkKQEAgLTEzNywxMiArMTQwLDEyIEBAIHZvaWQgU1ZHUmVj
dEVsZW1lbnQ6OnN2Z0F0dHJpYnV0ZUNoYW5nZWQoY29uc3QgUXVhbGlmaWVkTmFtZSYgYXR0ck5h
bWUpCiAgICAgaWYgKFNWR1Rlc3RzOjpoYW5kbGVBdHRyaWJ1dGVDaGFuZ2UodGhpcywgYXR0ck5h
bWUpKQogICAgICAgICByZXR1cm47CiAKLSAgICBSZW5kZXJTVkdQYXRoKiByZW5kZXJlciA9IHN0
YXRpY19jYXN0PFJlbmRlclNWR1BhdGgqPih0aGlzLT5yZW5kZXJlcigpKTsKKyAgICBSZW5kZXJT
VkdSZWN0KiByZW5kZXJlciA9IHN0YXRpY19jYXN0PFJlbmRlclNWR1JlY3QqPih0aGlzLT5yZW5k
ZXJlcigpKTsKICAgICBpZiAoIXJlbmRlcmVyKQogICAgICAgICByZXR1cm47CiAKICAgICBpZiAo
aXNMZW5ndGhBdHRyaWJ1dGUpIHsKLSAgICAgICAgcmVuZGVyZXItPnNldE5lZWRzUGF0aFVwZGF0
ZSgpOworICAgICAgICByZW5kZXJlci0+c2V0TmVlZHNTaGFwZVVwZGF0ZSgpOwogICAgICAgICBS
ZW5kZXJTVkdSZXNvdXJjZTo6bWFya0ZvckxheW91dEFuZFBhcmVudFJlc291cmNlSW52YWxpZGF0
aW9uKHJlbmRlcmVyKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KQEAgLTE2NSw2ICsxNjgsMTEg
QEAgYm9vbCBTVkdSZWN0RWxlbWVudDo6c2VsZkhhc1JlbGF0aXZlTGVuZ3RocygpIGNvbnN0CiAg
ICAgICAgIHx8IHJ5KCkuaXNSZWxhdGl2ZSgpOwogfQogCitSZW5kZXJPYmplY3QqIFNWR1JlY3RF
bGVtZW50OjpjcmVhdGVSZW5kZXJlcihSZW5kZXJBcmVuYSogYXJlbmEsIFJlbmRlclN0eWxlKikK
K3sKKyAgICByZXR1cm4gbmV3IChhcmVuYSkgUmVuZGVyU1ZHUmVjdCh0aGlzKTsKK30KKwogfQog
CiAjZW5kaWYgLy8gRU5BQkxFKFNWRykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9T
VkdSZWN0RWxlbWVudC5oIGIvU291cmNlL1dlYkNvcmUvc3ZnL1NWR1JlY3RFbGVtZW50LmgKaW5k
ZXggYTYwOGI0ZC4uMjcwNDY4OSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvc3ZnL1NWR1Jl
Y3RFbGVtZW50LmgKKysrIGIvU291cmNlL1dlYkNvcmUvc3ZnL1NWR1JlY3RFbGVtZW50LmgKQEAg
LTUwLDYgKzUwLDggQEAgcHJpdmF0ZToKIAogICAgIHZpcnR1YWwgYm9vbCBzZWxmSGFzUmVsYXRp
dmVMZW5ndGhzKCkgY29uc3Q7CiAKKyAgICBSZW5kZXJPYmplY3QqIGNyZWF0ZVJlbmRlcmVyKFJl
bmRlckFyZW5hKiwgUmVuZGVyU3R5bGUqKTsKKwogICAgIEJFR0lOX0RFQ0xBUkVfQU5JTUFURURf
UFJPUEVSVElFUyhTVkdSZWN0RWxlbWVudCkKICAgICAgICAgREVDTEFSRV9BTklNQVRFRF9MRU5H
VEgoWCwgeCkKICAgICAgICAgREVDTEFSRV9BTklNQVRFRF9MRU5HVEgoWSwgeSkKLS0gCjEuNy41
LjQKCg==
</data>
<flag name="review"
          id="114828"
          type_id="1"
          status="+"
          setter="zimmermann"
    />
    <flag name="commit-queue"
          id="114829"
          type_id="3"
          status="-"
          setter="rhodovan.u-szeged"
    />
          </attachment>
      

    </bug>

</bugzilla>