<?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>44926</bug_id>
          
          <creation_ts>2010-08-30 20:05:37 -0700</creation_ts>
          <short_desc>Multiple accelerated 2D canvases should be able to use the same GraphicsContext3D</short_desc>
          <delta_ts>2010-09-03 13:51:28 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>New Bugs</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>PC</rep_platform>
          <op_sys>OS X 10.5</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="James Robinson">jamesr</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>abarth</cc>
    
    <cc>cmarrin</cc>
    
    <cc>eric</cc>
    
    <cc>fishd</cc>
    
    <cc>gustavo</cc>
    
    <cc>kbr</cc>
    
    <cc>scheib</cc>
    
    <cc>senorblanco</cc>
    
    <cc>simon.fraser</cc>
    
    <cc>vangelis</cc>
    
    <cc>webkit-ews</cc>
    
    <cc>webkit.review.bot</cc>
    
    <cc>xan.lopez</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>271877</commentid>
    <comment_count>0</comment_count>
    <who name="James Robinson">jamesr</who>
    <bug_when>2010-08-30 20:05:37 -0700</bug_when>
    <thetext>It&apos;s wasteful to create a new GraphicsContext3D for every 2d canvas since each GraphicsContext3D implies a potentially heavyweight backing OpenGL context.  Additionally having each canvas in its own GraphicsContext3D makes sharing resources between canvases very difficult, since there is no notion of resource sharing in the GraphicsContext3D APIs (although OpenGL has such a concept).  There are also a set of resources (shaders, etc) that we will want to use for every canvas.

Instead, we should share a single GraphicsContext3D across all 2d canvases that we wish to accelerate that exist in a single compositor context.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>271903</commentid>
    <comment_count>1</comment_count>
      <attachid>66011</attachid>
    <who name="James Robinson">jamesr</who>
    <bug_when>2010-08-30 21:10:48 -0700</bug_when>
    <thetext>Created attachment 66011
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>271904</commentid>
    <comment_count>2</comment_count>
    <who name="James Robinson">jamesr</who>
    <bug_when>2010-08-30 21:14:32 -0700</bug_when>
    <thetext>Patch for review/discussion.  This is a larger patch than I would prefer (108kb), but since it changes interfaces and ownership models it&apos;s very difficult to break up into independent pieces.

The intended use of SharedContext3D is that callers can use it as if it were a GraphicsContext3D, being careful to re-bind everything they need on every draw, and that SharedContext3D would have caching to avoid issuing redundant calls to the underlying GraphicsContext3D.  I&apos;ve left the caching out of this patch as it was already getting pretty big.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>271913</commentid>
    <comment_count>3</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2010-08-30 21:26:46 -0700</bug_when>
    <thetext>Attachment 66011 did not build on mac:
Build output: http://queues.webkit.org/results/3882178</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>271914</commentid>
    <comment_count>4</comment_count>
    <who name="James Robinson">jamesr</who>
    <bug_when>2010-08-30 21:28:35 -0700</bug_when>
    <thetext>Mac failure is due to SVG+EmptyClients nonsense.  Will fix.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>271923</commentid>
    <comment_count>5</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-08-30 21:47:16 -0700</bug_when>
    <thetext>Attachment 66011 did not build on gtk:
Build output: http://queues.webkit.org/results/3859191</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>271925</commentid>
    <comment_count>6</comment_count>
      <attachid>66013</attachid>
    <who name="James Robinson">jamesr</who>
    <bug_when>2010-08-30 21:50:55 -0700</bug_when>
    <thetext>Created attachment 66013
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>271931</commentid>
    <comment_count>7</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2010-08-30 22:12:01 -0700</bug_when>
    <thetext>Attachment 66013 did not build on mac:
Build output: http://queues.webkit.org/results/3840174</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>271943</commentid>
    <comment_count>8</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-08-30 22:57:54 -0700</bug_when>
    <thetext>Attachment 66013 did not build on gtk:
Build output: http://queues.webkit.org/results/3825140</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>271982</commentid>
    <comment_count>9</comment_count>
    <who name="Early Warning System Bot">webkit-ews</who>
    <bug_when>2010-08-31 01:48:18 -0700</bug_when>
    <thetext>Attachment 66013 did not build on qt:
Build output: http://queues.webkit.org/results/3886164</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>272035</commentid>
    <comment_count>10</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-08-31 04:42:21 -0700</bug_when>
    <thetext>Attachment 66013 did not build on win:
Build output: http://queues.webkit.org/results/3889168</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>272213</commentid>
    <comment_count>11</comment_count>
      <attachid>66074</attachid>
    <who name="James Robinson">jamesr</who>
    <bug_when>2010-08-31 10:53:10 -0700</bug_when>
    <thetext>Created attachment 66074
compile fix for gtk/win/mac</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>272231</commentid>
    <comment_count>12</comment_count>
    <who name="Stephen White">senorblanco</who>
    <bug_when>2010-08-31 11:30:31 -0700</bug_when>
    <thetext>&gt; WebCore/html/canvas/CanvasRenderingContext2D.cpp:1283
&gt;      sourceCanvas-&gt;makeRenderingResultsAvailable();
Are you sure it isn&apos;t necessary to do something here?  Obviously, reading back to the buffer isn&apos;t right in this case, but we need some way to make sure that the sourceCanvas is up-to-date (e.g., last software draw is uploaded to framebuffer) before we draw.

And actually, I think this will break the software path, since it needs to make this call.  If the GPU truly doesn&apos;t need this, it should probably be doing an !isAccelerated() check instead.

(Reading on a bit further, it seems you&apos;re doing the GPU equivalent of this call in drawImageBuffer().  Fair enough, although it would be kind of cool to unify them in the same makeRenderingResultsAvailable() function.  And you&apos;ll still need to fix the software path).

&gt; WebCore/platform/graphics/chromium/Canvas2DLayerChromium.cpp:38
&gt; +#include &quot;PlatformContextSkia.h&quot;
Is this #include really needed?

&gt; WebCore/platform/graphics/chromium/Canvas2DLayerChromium.cpp:63
&gt; +        glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
Should be glTexParameteri (someone really ought to fix the original too).

&gt; WebCore/platform/graphics/chromium/GLES2Canvas.cpp:130
&gt; +    m_context-&gt;useFillSolidProgram(color, matrix);
Please use matrix, color order -- this matches the order in the shader code.

&gt; WebCore/platform/graphics/chromium/GLES2Canvas.cpp:232
&gt; +    drawQuad(IntSize(tileBoundsWithBorder.width(), tileBoundsWithBorder.height()), srcRectClippedInTileSpace, dstRectIntersected, transform, alpha);
I think tileBoundsWithBorder.size() should work here, rather than constructing your own IntSize().

&gt; WebCore/platform/graphics/chromium/GLES2Canvas.cpp:249
&gt; +    m_context-&gt;useTextureProgram(alpha, matrix, texMatrix);
Should be matrix, texMatrix, alpha (to be consistent w/shader).

&gt; WebCore/platform/graphics/chromium/GLES2Canvas.cpp:261
&gt; +    return m_context-&gt;createTexture(ptr, format, width, height);
OT:  Now that uploaded textures are shared between all contexts, I think we could actually get rid of the hash table entirely, and put a RefPtr&lt;Texture&gt; in the NativeImageSkia itself, if we wanted to.  This should help tie its lifetime to that of the image cache.

&gt; WebCore/platform/graphics/chromium/GLES2Canvas.cpp:266
&gt; +    return m_context-&gt;getTexture(ptr);
Does this function really need to transfer ownership?  If not, it should be passing a bare ptr, as it was before (see http://webkit.org/coding/RefPtr.html).

&gt; WebCore/platform/graphics/chromium/GLES2Canvas.h:79
&gt; +    PassRefPtr&lt;Texture&gt; getTexture(NativeImagePtr);
Again, since the ownership is not transferred, these should be bare pointers.

&gt; WebCore/platform/graphics/chromium/GLES2Canvas.h:87
&gt; +    unsigned textureIdForCanvas() const;
This will all have to change once the compositor supports texture tiling, but I&apos;m sure you knew that.

&gt; WebCore/platform/graphics/chromium/WebGLLayerChromium.cpp:63
&gt; +        glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
glTexParameteri (not your fault, just hoping someone finally fixes this).

&gt; WebCore/platform/graphics/gpu/CanvasFramebuffer.cpp:67
&gt; +    m_context-&gt;copyTextureToCompositor(m_offscreenColorTexture, m_offscreenParentColorTexture);
As discussed, I would have preferred that this end up in the same code as WebGL on the GPU process side, but that can be refactored later.

&gt; WebCore/platform/graphics/gpu/SharedContext3D.cpp:61
&gt; +}
This looks like it&apos;s unused.

&gt; WebCore/platform/graphics/gpu/SharedContext3D.cpp:278
&gt; +        m_context-&gt;bindTexture(target, texture);
This looks superfluous -- same code as below.

&gt; WebCore/platform/graphics/gpu/SharedContext3D.cpp:285
&gt; +void SharedContext3D::useFillSolidProgram(const Color&amp; color, const AffineTransform&amp; transform)
Please switch these back so they match the shader.

&gt; WebCore/platform/graphics/gpu/SharedContext3D.cpp:290
&gt; +void SharedContext3D::useTextureProgram(float alpha, const AffineTransform&amp; transform, const AffineTransform&amp; texTransform)
Ibid.

&gt; WebCore/platform/graphics/gpu/SharedContext3D.h:87
&gt; +    bool supportsBGRA();
Is this needed?  It looks like Texture is unchanged, so it&apos;ll still call GraphicsContext3D::supportsBGRA() (although I could be wrong).

&gt; WebCore/platform/graphics/skia/PlatformContextSkia.cpp:791
&gt; +        m_uploadTexture = context-&gt;createTexture(0, Texture::BGRA8, bitmap.width(), bitmap.height());
Hmm.. hashing on the NULL ptr (besides making it &quot;magic&quot; and fragile, in case anyone else tries the same trick) will share a single upload texture for all canvases.  This means we might hang onto an 8K texture long after a big canvas is gone, and we only need to upload little 150x150 canvases, e.g.

&gt; WebCore/platform/graphics/skia/PlatformContextSkia.h:184
&gt; +    void setSharedContext3D(SharedContext3D*, CanvasFramebuffer*, const IntSize&amp;);
I&apos;d rather the CanvasFramebuffer be owned by the GLES2Canvas, if possible.  But we can talk about that later.

&gt; WebKit/chromium/src/WebViewImpl.cpp:2220
&gt; +        attr.stencil = true;
Nit:  probably not much point in requesting stencil, since it looks like your FBO implementation doesn&apos;t support it.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>272239</commentid>
    <comment_count>13</comment_count>
      <attachid>66013</attachid>
    <who name="Kenneth Russell">kbr</who>
    <bug_when>2010-08-31 11:43:19 -0700</bug_when>
    <thetext>Comment on attachment 66013
Patch

This looks very good overall. There are a couple of relatively minor issues where PassRefPtr is used in a return value where it shouldn&apos;t be (see &quot;Function results&quot; in http://webkit.org/coding/RefPtr.html ) for which I&apos;m marking this patch r-, but after these are cleaned up I&apos;ll be happy to r+ it.


&gt; diff --git a/WebCore/ChangeLog b/WebCore/ChangeLog
&gt; index ddcd52e9676ba66bb03c410afff59e2261f7d830..94147a54b8123231a1af74267031e26ad174b08f 100644
&gt; --- a/WebCore/ChangeLog
&gt; +++ b/WebCore/ChangeLog
&gt; @@ -1,3 +1,173 @@
&gt; +2010-08-30  James Robinson  &lt;jamesr@chromium.org&gt;
&gt; +
&gt; +        Reviewed by NOBODY (OOPS!).
&gt; +
&gt; +        Multiple accelerated 2D canvases should be able to use the same GraphicsContext3D
&gt; +        https://bugs.webkit.org/show_bug.cgi?id=44926
&gt; +
&gt; +        This allows many accelerated 2d canvases to render using a single underlying GraphicsContext3D.
&gt; +        It introduces a new class SharedContext3D that manages several callers.  This class could
&gt; +        also cache the current state to avoid issuing redundant calls, although in this first cut it doesn&apos;t.
&gt; +        The SharedContext3D is provided through the ChromeClient so that its lifetime can be tied to that
&gt; +        of the platform-specific compositor infrastructure.
&gt; +
&gt; +        Accelerated 2d canvases maintain a reference to a SharedContext3D and have ownership of a CanvasFramebuffer,
&gt; +        which represents the canvas&apos;s rendering target.  The compositing layer for an accelerated 2d canvas is
&gt; +        aware only of the canvas&apos;s CanvasFramebuffer.  This means that WebGL and 2d canvases are no longer treated
&gt; +        as the same time of layer by the compositor.

time -&gt; type

&gt; +        Covered by existing canvas tests.
&gt; +
&gt; +        I&apos;ve divided the per file/function changes into three sections:
&gt; +        - Platform-independent application logic outside WebCore/platform
&gt; +        - Platform-independent infrastructure in WebCore/platform
&gt; +        - Platform-specific changes
&gt; +
&gt; +        * html/canvas/CanvasRenderingContext.cpp:
&gt; +        * html/canvas/CanvasRenderingContext.h:
&gt; +        (WebCore::CanvasRenderingContext::paintsIntoCanvasBuffer):
&gt; +        * html/canvas/CanvasRenderingContext2D.cpp:
&gt; +        (WebCore::CanvasRenderingContext2D::CanvasRenderingContext2D):
&gt; +        (WebCore::CanvasRenderingContext2D::paintsIntoCanvasBuffer):
&gt; +        (WebCore::CanvasRenderingContext2D::reset):
&gt; +        (WebCore::CanvasRenderingContext2D::drawImage):
&gt; +        (WebCore::CanvasRenderingContext2D::didDraw):
&gt; +        * html/canvas/CanvasRenderingContext2D.h:
&gt; +        (WebCore::CanvasRenderingContext2D::framebuffer):
&gt; +        * html/canvas/WebGLRenderingContext.cpp:
&gt; +        (WebCore::WebGLRenderingContext::paintsIntoCanvasBuffer):
&gt; +        * html/canvas/WebGLRenderingContext.h:
&gt; +        (WebCore::WebGLRenderingContext::graphicsContext3D):
&gt; +        * loader/EmptyClients.h:
&gt; +        (WebCore::EmptyChromeClient::attachRootGraphicsLayer):
&gt; +        (WebCore::EmptyChromeClient::setNeedsOneShotDrawingSynchronization):
&gt; +        (WebCore::EmptyChromeClient::scheduleCompositingLayerSync):
&gt; +        (WebCore::EmptyChromeClient::getSharedContext3D):
&gt; +        * page/ChromeClient.h:
&gt; +        * rendering/RenderLayerBacking.cpp:
&gt; +        (WebCore::RenderLayerBacking::updateGraphicsLayerConfiguration):
&gt; +          Cross-platform infrastructure in WebCore/platform:

Could you put some sort of prefix on these separator lines to distinguish them from the autogenerated output?

&gt; +        * WebCore.gypi:
&gt; +        * platform/graphics/GraphicsContext.h:
&gt; +        * platform/graphics/GraphicsContext3D.h:
&gt; +        * platform/graphics/GraphicsLayer.h:
&gt; +        (WebCore::GraphicsLayer::setContentsToWebGL):
&gt; +        (WebCore::GraphicsLayer::setContentsToCanvas2D):
&gt; +        * platform/graphics/gpu/CanvasFramebuffer.cpp: Added.
&gt; +        (WebCore::CanvasFramebuffer::CanvasFramebuffer):
&gt; +        (WebCore::CanvasFramebuffer::~CanvasFramebuffer):
&gt; +        (WebCore::CanvasFramebuffer::bind):
&gt; +        (WebCore::CanvasFramebuffer::swapBuffers):
&gt; +        (WebCore::CanvasFramebuffer::setWillSwapBuffersCallback):
&gt; +        (WebCore::CanvasFramebuffer::create):
&gt; +        * platform/graphics/gpu/CanvasFramebuffer.h: Added.
&gt; +        (WebCore::CanvasFramebuffer::textureIdForCompositor):
&gt; +        (WebCore::CanvasFramebuffer::textureIdForCanvas):
&gt; +        * platform/graphics/gpu/SharedContext3D.cpp: Added.
&gt; +        (WebCore::affineTo3x3):
&gt; +        (WebCore::SharedContext3D::create):
&gt; +        (WebCore::SharedContext3D::SharedContext3D):
&gt; +        (WebCore::SharedContext3D::~SharedContext3D):
&gt; +        (WebCore::SharedContext3D::scissor):
&gt; +        (WebCore::SharedContext3D::enable):
&gt; +        (WebCore::SharedContext3D::disable):
&gt; +        (WebCore::SharedContext3D::clearColor):
&gt; +        (WebCore::SharedContext3D::clear):
&gt; +        (WebCore::SharedContext3D::drawArrays):
&gt; +        (WebCore::SharedContext3D::getError):
&gt; +        (WebCore::SharedContext3D::getIntegerv):
&gt; +        (WebCore::SharedContext3D::createFramebuffer):
&gt; +        (WebCore::SharedContext3D::createTexture):
&gt; +        (WebCore::SharedContext3D::deleteFramebuffer):
&gt; +        (WebCore::SharedContext3D::deleteTexture):
&gt; +        (WebCore::SharedContext3D::deleteCompositorTexture):
&gt; +        (WebCore::SharedContext3D::framebufferTexture2D):
&gt; +        (WebCore::SharedContext3D::texParameteri):
&gt; +        (WebCore::SharedContext3D::texImage2D):
&gt; +        (WebCore::SharedContext3D::texSubImage2D):
&gt; +        (WebCore::SharedContext3D::readPixels):
&gt; +        (WebCore::SharedContext3D::getTexture):
&gt; +        (WebCore::SharedContext3D::applyCompositeOperator):
&gt; +        (WebCore::SharedContext3D::useQuadVertices):
&gt; +        (WebCore::SharedContext3D::setActiveTexture):
&gt; +        (WebCore::SharedContext3D::bindTexture):
&gt; +        (WebCore::SharedContext3D::useFillSolidProgram):
&gt; +        (WebCore::SharedContext3D::useTextureProgram):
&gt; +        (WebCore::SharedContext3D::bindFramebuffer):
&gt; +        (WebCore::SharedContext3D::setViewport):
&gt; +        (WebCore::SharedContext3D::supportsBGRA):
&gt; +        (WebCore::SharedContext3D::createCompositorTexture):
&gt; +        (WebCore::SharedContext3D::copyTextureToCompositor):
&gt; +        (WebCore::SharedContext3D::paintsIntoCanvasBuffer):
&gt; +        * platform/graphics/gpu/SharedContext3D.h: Added.
&gt; +        * platform/graphics/gpu/Texture.cpp:
&gt; +          Mac-specific changes:
&gt; +        * platform/graphics/mac/GraphicsLayerCA.h:
&gt; +        * platform/graphics/mac/GraphicsLayerCA.mm:
&gt; +        (WebCore::GraphicsLayerCA::setContentsToWebGL):
&gt; +          Chromium-specific changes:
&gt; +        * platform/graphics/chromium/Canvas2DLayerChromium.cpp: Added.
&gt; +        (WebCore::Canvas2DLayerChromium::create):
&gt; +        (WebCore::Canvas2DLayerChromium::Canvas2DLayerChromium):
&gt; +        (WebCore::Canvas2DLayerChromium::updateContents):
&gt; +        (WebCore::Canvas2DLayerChromium::setCanvasFramebuffer):
&gt; +        (WebCore::Canvas2DLayerChromium::textureId):
&gt; +        * platform/graphics/chromium/Canvas2DLayerChromium.h: Added.
&gt; +        (WebCore::Canvas2DLayerChromium::drawsContent):
&gt; +        * platform/graphics/chromium/CanvasLayerChromium.cpp:
&gt; +          CanvasLayerChromium is now a base class for WebGLLayerChromium and Canvas2DLayerChromium.
&gt; +        (WebCore::CanvasLayerChromium::CanvasLayerChromium):
&gt; +        (WebCore::CanvasLayerChromium::~CanvasLayerChromium):
&gt; +        (WebCore::CanvasLayerChromium::draw):
&gt; +        * platform/graphics/chromium/CanvasLayerChromium.h:
&gt; +        * platform/graphics/chromium/GLES2Canvas.cpp:
&gt; +        (WebCore::GLES2Canvas::GLES2Canvas):
&gt; +        (WebCore::GLES2Canvas::~GLES2Canvas):
&gt; +        (WebCore::GLES2Canvas::swapBuffers):
&gt; +        (WebCore::GLES2Canvas::bindFramebuffer):
&gt; +        (WebCore::GLES2Canvas::textureIdForCompositor):
&gt; +        (WebCore::GLES2Canvas::textureIdForCanvas):
&gt; +        (WebCore::GLES2Canvas::clearRect):
&gt; +        (WebCore::GLES2Canvas::fillRect):
&gt; +        (WebCore::GLES2Canvas::drawTexturedRect):
&gt; +        (WebCore::GLES2Canvas::drawTexturedRectTile):
&gt; +        (WebCore::GLES2Canvas::drawQuad):
&gt; +        (WebCore::GLES2Canvas::createTexture):
&gt; +        (WebCore::GLES2Canvas::getTexture):
&gt; +        * platform/graphics/chromium/GLES2Canvas.h:
&gt; +        (WebCore::GLES2Canvas::context):
&gt; +        * platform/graphics/chromium/GraphicsLayerChromium.cpp:
&gt; +        (WebCore::GraphicsLayerChromium::setContentsToWebGL):
&gt; +        (WebCore::GraphicsLayerChromium::setContentsToCanvas2D):
&gt; +        * platform/graphics/chromium/GraphicsLayerChromium.h:
&gt; +        * platform/graphics/chromium/LayerRendererChromium.cpp:
&gt; +        * platform/graphics/chromium/WebGLLayerChromium.cpp: Added.
&gt; +        (WebCore::WebGLLayerChromium::create):
&gt; +        (WebCore::WebGLLayerChromium::WebGLLayerChromium):
&gt; +        (WebCore::WebGLLayerChromium::updateContents):
&gt; +        (WebCore::WebGLLayerChromium::setContext):
&gt; +        * platform/graphics/chromium/WebGLLayerChromium.h: Added.
&gt; +        (WebCore::WebGLLayerChromium::drawsContent):
&gt; +        (WebCore::WebGLLayerChromium::textureId):
&gt; +        * platform/graphics/skia/GraphicsContextSkia.cpp:
&gt; +        (WebCore::GraphicsContext::setSharedContext3D):
&gt; +        (WebCore::GraphicsContext::textureIdForCompositor):
&gt; +        (WebCore::GraphicsContext::textureIdForCanvas):
&gt; +        * platform/graphics/skia/ImageBufferSkia.cpp:
&gt; +        (WebCore::ImageBuffer::draw):
&gt; +        * platform/graphics/skia/ImageSkia.cpp:
&gt; +        (WebCore::drawBitmapGLES2):
&gt; +        * platform/graphics/skia/PlatformContextSkia.cpp:
&gt; +        (WebCore::PlatformContextSkia::~PlatformContextSkia):
&gt; +        (WebCore::SwapBuffersCallbackImpl::create):
&gt; +        (WebCore::SwapBuffersCallbackImpl::willSwapBuffers):
&gt; +        (WebCore::SwapBuffersCallbackImpl::SwapBuffersCallbackImpl):
&gt; +        (WebCore::PlatformContextSkia::setSharedContext3D):
&gt; +        (WebCore::PlatformContextSkia::swapBuffers):
&gt; +        (WebCore::PlatformContextSkia::uploadSoftwareToHardware):
&gt; +        (WebCore::PlatformContextSkia::readbackHardwareToSoftware):
&gt; +        * platform/graphics/skia/PlatformContextSkia.h:
&gt; +
&gt;  2010-08-30  Chris Rogers  &lt;crogers@google.com&gt;
&gt;  
&gt;          Reviewed by Kenneth Russell.
&gt; diff --git a/WebCore/loader/EmptyClients.h b/WebCore/loader/EmptyClients.h
&gt; index 270752dd7f8f01fa94f7c293d3cfe7fa95ed291f..eda55ba756bcd55507f6d4e79269d8eb0c5ae2d3 100644
&gt; --- a/WebCore/loader/EmptyClients.h
&gt; +++ b/WebCore/loader/EmptyClients.h
&gt; @@ -46,6 +46,10 @@
&gt;  #include &quot;ResourceError.h&quot;
&gt;  #include &quot;SearchPopupMenu.h&quot;
&gt;  
&gt; +#if ENABLE(ACCELERATED_2D_CANVAS)
&gt; +#include &quot;SharedContext3D.h&quot;

Is it possible to use a forward declaration instead?

&gt; +#endif
&gt; +
&gt;  /*
&gt;   This file holds empty Client stubs for use by WebCore.
&gt;   Viewless element needs to create a dummy Page-&gt;Frame-&gt;FrameView tree for use in parsing or executing JavaScript.
&gt; @@ -190,9 +194,13 @@ public:
&gt;      virtual void cancelGeolocationPermissionRequestForFrame(Frame*, Geolocation*) {}
&gt;  
&gt;  #if USE(ACCELERATED_COMPOSITING)
&gt; -    virtual void attachRootGraphicsLayer(Frame*, GraphicsLayer*) {};
&gt; -    virtual void setNeedsOneShotDrawingSynchronization() {};
&gt; -    virtual void scheduleCompositingLayerSync() {};
&gt; +    virtual void attachRootGraphicsLayer(Frame*, GraphicsLayer*) {}
&gt; +    virtual void setNeedsOneShotDrawingSynchronization() {}
&gt; +    virtual void scheduleCompositingLayerSync() {}
&gt; +#endif
&gt; +
&gt; +#if ENABLE(ACCELERATED_2D_CANVAS)
&gt; +    virtual PassRefPtr&lt;SharedContext3D&gt; getSharedContext3D() { return 0; }
&gt;  #endif
&gt;  
&gt;  #if PLATFORM(WIN)
&gt; diff --git a/WebCore/platform/graphics/GraphicsContext.h b/WebCore/platform/graphics/GraphicsContext.h
&gt; index 93ef890062eda52899e4d33dd1091a2d32f4d08c..80d1e0201461515ae9050febc4cddbb67898ad11 100644
&gt; --- a/WebCore/platform/graphics/GraphicsContext.h
&gt; +++ b/WebCore/platform/graphics/GraphicsContext.h
&gt; @@ -122,16 +122,17 @@ namespace WebCore {
&gt;      const int cMisspellingLinePatternGapWidth = 1;
&gt;  
&gt;      class AffineTransform;
&gt; +    class CanvasFramebuffer;
&gt;      class Font;
&gt;      class Generator;
&gt;      class Gradient;
&gt; -    class GraphicsContext3D;
&gt;      class GraphicsContextPlatformPrivate;
&gt;      class GraphicsContextPrivate;
&gt;      class ImageBuffer;
&gt;      class KURL;
&gt;      class Path;
&gt;      class Pattern;
&gt; +    class SharedContext3D;
&gt;      class TextRun;
&gt;  
&gt;      // These bits can be ORed together for a total of 8 possible text drawing modes.
&gt; @@ -412,8 +413,12 @@ namespace WebCore {
&gt;          pattern getHaikuStrokeStyle();
&gt;  #endif
&gt;  
&gt; -        void setGraphicsContext3D(GraphicsContext3D*, const IntSize&amp;);
&gt; +#if PLATFORM(SKIA)
&gt; +        void setSharedContext3D(SharedContext3D*, CanvasFramebuffer*, const IntSize&amp;);
&gt;          void syncSoftwareCanvas();
&gt; +        unsigned textureIdForCompositor() const;
&gt; +        unsigned textureIdForCanvas() const;
&gt; +#endif

How about a comment before this block of methods indicating that they&apos;re for accelerated 2D canvas support?

&gt;  
&gt;      private:
&gt;          void savePlatformState();
&gt; diff --git a/WebCore/platform/graphics/GraphicsContext3D.h b/WebCore/platform/graphics/GraphicsContext3D.h
&gt; index b583813886698ecb5605531be7f56b0a39d65069..009efe5d4baecba641c496abe100c70318d58f20 100644
&gt; --- a/WebCore/platform/graphics/GraphicsContext3D.h
&gt; +++ b/WebCore/platform/graphics/GraphicsContext3D.h
&gt; @@ -753,6 +753,10 @@ public:
&gt;  
&gt;      bool supportsBGRA();
&gt;  
&gt; +    unsigned createCompositorTexture(unsigned width, unsigned height);
&gt; +    void deleteCompositorTexture(unsigned compositorTexture);
&gt; +    void copyTextureToCompositor(unsigned sourceTexture, unsigned compositorTexture);

A comment above these few methods indicating they&apos;re currently for accelerated 2d canvas support would be useful. Not sure whether it&apos;s worth #ifdef&apos;ing them under that flag to avoid the need to add them to all ports currently supporting WebGL.

&gt; +
&gt;    private:
&gt;      GraphicsContext3D(Attributes attrs, HostWindow* hostWindow);
&gt;  
&gt; diff --git a/WebCore/platform/graphics/chromium/Canvas2DLayerChromium.cpp b/WebCore/platform/graphics/chromium/Canvas2DLayerChromium.cpp
&gt; new file mode 100644
&gt; index 0000000000000000000000000000000000000000..d90b6f8b13f93eeb4e03fcfc545dd961a69e1a4a
&gt; --- /dev/null
&gt; +++ b/WebCore/platform/graphics/chromium/Canvas2DLayerChromium.cpp
&gt; @@ -0,0 +1,87 @@
&gt; +/*
&gt; + * Copyright (C) 2010 Google Inc. All rights reserved.
&gt; + *
&gt; + * Redistribution and use in source and binary forms, with or without
&gt; + * modification, are permitted provided that the following conditions are
&gt; + * met:
&gt; + *
&gt; + *     * Redistributions of source code must retain the above copyright
&gt; + * notice, this list of conditions and the following disclaimer.
&gt; + *     * Redistributions in binary form must reproduce the above
&gt; + * copyright notice, this list of conditions and the following disclaimer
&gt; + * in the documentation and/or other materials provided with the
&gt; + * distribution.
&gt; + *     * Neither the name of Google Inc. nor the names of its
&gt; + * contributors may be used to endorse or promote products derived from
&gt; + * this software without specific prior written permission.
&gt; + *
&gt; + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
&gt; + * &quot;AS IS&quot; AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
&gt; + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
&gt; + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
&gt; + * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
&gt; + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
&gt; + * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
&gt; + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
&gt; + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
&gt; + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
&gt; + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
&gt; + */
&gt; +
&gt; +#include &quot;config.h&quot;
&gt; +
&gt; +#if USE(ACCELERATED_COMPOSITING)
&gt; +
&gt; +#include &quot;Canvas2DLayerChromium.h&quot;
&gt; +
&gt; +#include &quot;CanvasFramebuffer.h&quot;
&gt; +#include &quot;PlatformContextSkia.h&quot;
&gt; +
&gt; +#include &lt;GLES2/gl2.h&gt;
&gt; +
&gt; +namespace WebCore {
&gt; +
&gt; +PassRefPtr&lt;Canvas2DLayerChromium&gt; Canvas2DLayerChromium::create(CanvasFramebuffer* framebuffer, GraphicsLayerChromium* owner)
&gt; +{
&gt; +    return adoptRef(new Canvas2DLayerChromium(framebuffer, owner));
&gt; +}
&gt; +
&gt; +Canvas2DLayerChromium::Canvas2DLayerChromium(CanvasFramebuffer* framebuffer, GraphicsLayerChromium* owner)
&gt; +    : CanvasLayerChromium(owner)
&gt; +    , m_framebuffer(framebuffer)
&gt; +    , m_textureChanged(true)
&gt; +{
&gt; +}
&gt; +
&gt; +void Canvas2DLayerChromium::updateContents()
&gt; +{
&gt; +    unsigned textureId = m_framebuffer-&gt;textureIdForCompositor();
&gt; +    if (m_textureChanged) {
&gt; +        glBindTexture(GL_TEXTURE_2D, textureId);
&gt; +        // Set the min-mag filters to linear and wrap modes to GL_CLAMP_TO_EDGE
&gt; +        // to get around NPOT texture limitations of GLES.
&gt; +        glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
&gt; +        glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
&gt; +        glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE);
&gt; +        glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE);
&gt; +        m_textureChanged = false;
&gt; +    }
&gt; +    // Update the contents of the texture used by the compositor.
&gt; +    if (m_contentsDirty) {
&gt; +        m_framebuffer-&gt;swapBuffers();
&gt; +        m_contentsDirty = false;
&gt; +    }
&gt; +}
&gt; +
&gt; +void Canvas2DLayerChromium::setCanvasFramebuffer(CanvasFramebuffer* framebuffer)
&gt; +{
&gt; +    m_framebuffer = framebuffer;

Do you need m_textureChanged = true here?

&gt; +}
&gt; +
&gt; +unsigned Canvas2DLayerChromium::textureId()
&gt; +{
&gt; +    return m_framebuffer-&gt;textureIdForCompositor();
&gt; +}
&gt; +
&gt; +}
&gt; +#endif // USE(ACCELERATED_COMPOSITING)
&gt; diff --git a/WebCore/platform/graphics/chromium/GLES2Canvas.cpp b/WebCore/platform/graphics/chromium/GLES2Canvas.cpp
&gt; index 82d4c0b033a14f91e566f7b4eea08b06692ebbd3..e1d1967bf4c02871c4f8e71caa2a40de5468f653 100644
&gt; --- a/WebCore/platform/graphics/chromium/GLES2Canvas.cpp
&gt; +++ b/WebCore/platform/graphics/chromium/GLES2Canvas.cpp
&gt; @@ -32,10 +32,12 @@
&gt;  
&gt;  #include &quot;GLES2Canvas.h&quot;
&gt;  
&gt; +#include &quot;CanvasFramebuffer.h&quot;
&gt;  #include &quot;FloatRect.h&quot;
&gt;  #include &quot;GraphicsContext3D.h&quot;
&gt;  #include &quot;IntRect.h&quot;
&gt;  #include &quot;PlatformString.h&quot;
&gt; +#include &quot;SharedContext3D.h&quot;
&gt;  #include &quot;SolidFillShader.h&quot;
&gt;  #include &quot;TexShader.h&quot;
&gt;  #include &quot;Texture.h&quot;
&gt; @@ -61,37 +63,50 @@ struct GLES2Canvas::State {
&gt;      AffineTransform m_ctm;
&gt;  };
&gt;  
&gt; -GLES2Canvas::GLES2Canvas(GraphicsContext3D* context, const IntSize&amp; size)
&gt; -    : m_context(context)
&gt; +GLES2Canvas::GLES2Canvas(SharedContext3D* context, CanvasFramebuffer* framebuffer, const IntSize&amp; size)
&gt; +    : m_size(size)
&gt; +    , m_context(context)
&gt; +    , m_framebuffer(framebuffer)
&gt;      , m_state(0)
&gt; -    , m_quadVertices(0)
&gt; -    , m_solidFillShader(SolidFillShader::create(context))
&gt; -    , m_texShader(TexShader::create(context))
&gt;  {
&gt;      m_flipMatrix.translate(-1.0f, 1.0f);
&gt;      m_flipMatrix.scale(2.0f / size.width(), -2.0f / size.height());
&gt;  
&gt; -    m_context-&gt;reshape(size.width(), size.height());
&gt; -    m_context-&gt;viewport(0, 0, size.width(), size.height());
&gt; -
&gt;      m_stateStack.append(State());
&gt;      m_state = &amp;m_stateStack.last();
&gt; -
&gt; -    // Force the source over composite mode to be applied.
&gt; -    m_lastCompositeOp = CompositeClear;
&gt; -    applyCompositeOperator(CompositeSourceOver);
&gt;  }
&gt;  
&gt;  GLES2Canvas::~GLES2Canvas()
&gt;  {
&gt; -    m_context-&gt;deleteBuffer(m_quadVertices);
&gt; +}
&gt; +
&gt; +void GLES2Canvas::swapBuffers()
&gt; +{
&gt; +    m_framebuffer-&gt;swapBuffers();
&gt; +}
&gt; +
&gt; +void GLES2Canvas::bindFramebuffer()
&gt; +{
&gt; +    m_framebuffer-&gt;bind();
&gt; +}
&gt; +
&gt; +unsigned GLES2Canvas::textureIdForCompositor() const
&gt; +{
&gt; +    return m_framebuffer-&gt;textureIdForCompositor();
&gt; +}
&gt; +
&gt; +unsigned GLES2Canvas::textureIdForCanvas() const
&gt; +{
&gt; +    return m_framebuffer-&gt;textureIdForCanvas();
&gt;  }
&gt;  
&gt;  void GLES2Canvas::clearRect(const FloatRect&amp; rect)
&gt;  {
&gt; +    bindFramebuffer();
&gt;      if (m_state-&gt;m_ctm.isIdentity()) {
&gt; -        m_context-&gt;scissor(rect.x(), rect.y(), rect.width(), rect.height());
&gt; +        m_context-&gt;scissor(rect);
&gt;          m_context-&gt;enable(GraphicsContext3D::SCISSOR_TEST);
&gt; +        m_context-&gt;clearColor(Color(RGBA32(0)));
&gt;          m_context-&gt;clear(GraphicsContext3D::COLOR_BUFFER_BIT);
&gt;          m_context-&gt;disable(GraphicsContext3D::SCISSOR_TEST);
&gt;      } else {
&gt; @@ -104,16 +119,17 @@ void GLES2Canvas::clearRect(const FloatRect&amp; rect)
&gt;  
&gt;  void GLES2Canvas::fillRect(const FloatRect&amp; rect, const Color&amp; color, ColorSpace colorSpace)
&gt;  {
&gt; -    applyCompositeOperator(m_state-&gt;m_compositeOp);
&gt; -
&gt; -    m_context-&gt;bindBuffer(GraphicsContext3D::ARRAY_BUFFER, getQuadVertices());
&gt; +    m_context-&gt;applyCompositeOperator(m_state-&gt;m_compositeOp);
&gt; +    m_context-&gt;useQuadVertices();
&gt;  
&gt;      AffineTransform matrix(m_flipMatrix);
&gt;      matrix.multLeft(m_state-&gt;m_ctm);
&gt;      matrix.translate(rect.x(), rect.y());
&gt;      matrix.scale(rect.width(), rect.height());
&gt; -    m_solidFillShader-&gt;use(matrix, color);
&gt;  
&gt; +    m_context-&gt;useFillSolidProgram(color, matrix);
&gt; +
&gt; +    bindFramebuffer();
&gt;      m_context-&gt;drawArrays(GraphicsContext3D::TRIANGLE_STRIP, 0, 4);
&gt;  }
&gt;  
&gt; @@ -165,21 +181,33 @@ void GLES2Canvas::restore()
&gt;      m_state = &amp;m_stateStack.last();
&gt;  }
&gt;  
&gt; +void GLES2Canvas::drawTexturedRect(unsigned texture, const IntSize&amp; textureSize, const FloatRect&amp; srcRect, const FloatRect&amp; dstRect, ColorSpace colorSpace, CompositeOperator compositeOp)
&gt; +{
&gt; +    m_context-&gt;applyCompositeOperator(compositeOp);
&gt; +
&gt; +    m_context-&gt;useQuadVertices();
&gt; +    m_context-&gt;setActiveTexture(GraphicsContext3D::TEXTURE0);
&gt; +
&gt; +    m_context-&gt;bindTexture(GraphicsContext3D::TEXTURE_2D, texture);
&gt; +
&gt; +    drawQuad(textureSize, srcRect, dstRect, m_state-&gt;m_ctm, m_state-&gt;m_alpha);
&gt; +}
&gt; +
&gt;  void GLES2Canvas::drawTexturedRect(Texture* texture, const FloatRect&amp; srcRect, const FloatRect&amp; dstRect, ColorSpace colorSpace, CompositeOperator compositeOp)
&gt;  {
&gt;      drawTexturedRect(texture, srcRect, dstRect, m_state-&gt;m_ctm, m_state-&gt;m_alpha, colorSpace, compositeOp);
&gt;  }
&gt;  
&gt; +
&gt;  void GLES2Canvas::drawTexturedRect(Texture* texture, const FloatRect&amp; srcRect, const FloatRect&amp; dstRect, const AffineTransform&amp; transform, float alpha, ColorSpace colorSpace, CompositeOperator compositeOp)
&gt;  {
&gt; -    applyCompositeOperator(compositeOp);
&gt; -
&gt; -    m_context-&gt;bindBuffer(GraphicsContext3D::ARRAY_BUFFER, getQuadVertices());
&gt; -    checkGLError(&quot;glBindBuffer&quot;);
&gt; -
&gt; +    m_context-&gt;applyCompositeOperator(compositeOp);
&gt;      const TilingData&amp; tiles = texture-&gt;tiles();
&gt;      IntRect tileIdxRect = tiles.overlappedTileIndices(srcRect);
&gt;  
&gt; +    m_context-&gt;useQuadVertices();
&gt; +    m_context-&gt;setActiveTexture(GraphicsContext3D::TEXTURE0);
&gt; +
&gt;      for (int y = tileIdxRect.y(); y &lt;= tileIdxRect.bottom(); y++) {
&gt;          for (int x = tileIdxRect.x(); x &lt;= tileIdxRect.right(); x++)
&gt;              drawTexturedRectTile(texture, tiles.tileIndex(x, y), srcRect, dstRect, transform, alpha);
&gt; @@ -193,7 +221,6 @@ void GLES2Canvas::drawTexturedRectTile(Texture* texture, int tile, const FloatRe
&gt;  
&gt;      const TilingData&amp; tiles = texture-&gt;tiles();
&gt;  
&gt; -    m_context-&gt;activeTexture(GraphicsContext3D::TEXTURE0);
&gt;      texture-&gt;bindTile(tile);
&gt;  
&gt;      FloatRect srcRectClippedInTileSpace;
&gt; @@ -202,18 +229,24 @@ void GLES2Canvas::drawTexturedRectTile(Texture* texture, int tile, const FloatRe
&gt;  
&gt;      IntRect tileBoundsWithBorder = tiles.tileBoundsWithBorder(tile);
&gt;  
&gt; +    drawQuad(IntSize(tileBoundsWithBorder.width(), tileBoundsWithBorder.height()), srcRectClippedInTileSpace, dstRectIntersected, transform, alpha);
&gt; +}
&gt; +
&gt; +void GLES2Canvas::drawQuad(const IntSize&amp; textureSize, const FloatRect&amp; srcRect, const FloatRect&amp; dstRect, const AffineTransform&amp; transform, float alpha)
&gt; +{
&gt;      AffineTransform matrix(m_flipMatrix);
&gt;      matrix.multLeft(transform);
&gt; -    matrix.translate(dstRectIntersected.x(), dstRectIntersected.y());
&gt; -    matrix.scale(dstRectIntersected.width(), dstRectIntersected.height());
&gt; +    matrix.translate(dstRect.x(), dstRect.y());
&gt; +    matrix.scale(dstRect.width(), dstRect.height());
&gt;  
&gt;      AffineTransform texMatrix;
&gt; -    texMatrix.scale(1.0f / tileBoundsWithBorder.width(), 1.0f / tileBoundsWithBorder.height());
&gt; -    texMatrix.translate(srcRectClippedInTileSpace.x(), srcRectClippedInTileSpace.y());
&gt; -    texMatrix.scale(srcRectClippedInTileSpace.width(), srcRectClippedInTileSpace.height());
&gt; +    texMatrix.scale(1.0f / textureSize.width(), 1.0f / textureSize.height());
&gt; +    texMatrix.translate(srcRect.x(), srcRect.y());
&gt; +    texMatrix.scale(srcRect.width(), srcRect.height());

Have these changes to the math been verified?

&gt; -    m_texShader-&gt;use(matrix, texMatrix, 0, alpha);
&gt; +    bindFramebuffer();
&gt;  
&gt; +    m_context-&gt;useTextureProgram(alpha, matrix, texMatrix);
&gt;      m_context-&gt;drawArrays(GraphicsContext3D::TRIANGLE_STRIP, 0, 4);
&gt;      checkGLError(&quot;glDrawArrays&quot;);
&gt;  }
&gt; @@ -223,98 +256,14 @@ void GLES2Canvas::setCompositeOperation(CompositeOperator op)
&gt;      m_state-&gt;m_compositeOp = op;
&gt;  }
&gt;  
&gt; -void GLES2Canvas::applyCompositeOperator(CompositeOperator op)
&gt; -{
&gt; -    if (op == m_lastCompositeOp)
&gt; -        return;
&gt; -
&gt; -    switch (op) {
&gt; -    case CompositeClear:
&gt; -        m_context-&gt;enable(GraphicsContext3D::BLEND);
&gt; -        m_context-&gt;blendFunc(GraphicsContext3D::ZERO, GraphicsContext3D::ZERO);
&gt; -        break;
&gt; -    case CompositeCopy:
&gt; -        m_context-&gt;disable(GraphicsContext3D::BLEND);
&gt; -        break;
&gt; -    case CompositeSourceOver:
&gt; -        m_context-&gt;enable(GraphicsContext3D::BLEND);
&gt; -        m_context-&gt;blendFunc(GraphicsContext3D::ONE, GraphicsContext3D::ONE_MINUS_SRC_ALPHA);
&gt; -        break;
&gt; -    case CompositeSourceIn:
&gt; -        m_context-&gt;enable(GraphicsContext3D::BLEND);
&gt; -        m_context-&gt;blendFunc(GraphicsContext3D::DST_ALPHA, GraphicsContext3D::ZERO);
&gt; -        break;
&gt; -    case CompositeSourceOut:
&gt; -        m_context-&gt;enable(GraphicsContext3D::BLEND);
&gt; -        m_context-&gt;blendFunc(GraphicsContext3D::ONE_MINUS_DST_ALPHA, GraphicsContext3D::ZERO);
&gt; -        break;
&gt; -    case CompositeSourceAtop:
&gt; -        m_context-&gt;enable(GraphicsContext3D::BLEND);
&gt; -        m_context-&gt;blendFunc(GraphicsContext3D::DST_ALPHA, GraphicsContext3D::ONE_MINUS_SRC_ALPHA);
&gt; -        break;
&gt; -    case CompositeDestinationOver:
&gt; -        m_context-&gt;enable(GraphicsContext3D::BLEND);
&gt; -        m_context-&gt;blendFunc(GraphicsContext3D::ONE_MINUS_DST_ALPHA, GraphicsContext3D::ONE);
&gt; -        break;
&gt; -    case CompositeDestinationIn:
&gt; -        m_context-&gt;enable(GraphicsContext3D::BLEND);
&gt; -        m_context-&gt;blendFunc(GraphicsContext3D::ZERO, GraphicsContext3D::SRC_ALPHA);
&gt; -        break;
&gt; -    case CompositeDestinationOut:
&gt; -        m_context-&gt;enable(GraphicsContext3D::BLEND);
&gt; -        m_context-&gt;blendFunc(GraphicsContext3D::ZERO, GraphicsContext3D::ONE_MINUS_SRC_ALPHA);
&gt; -        break;
&gt; -    case CompositeDestinationAtop:
&gt; -        m_context-&gt;enable(GraphicsContext3D::BLEND);
&gt; -        m_context-&gt;blendFunc(GraphicsContext3D::ONE_MINUS_DST_ALPHA, GraphicsContext3D::SRC_ALPHA);
&gt; -        break;
&gt; -    case CompositeXOR:
&gt; -        m_context-&gt;enable(GraphicsContext3D::BLEND);
&gt; -        m_context-&gt;blendFunc(GraphicsContext3D::ONE_MINUS_DST_ALPHA, GraphicsContext3D::ONE_MINUS_SRC_ALPHA);
&gt; -        break;
&gt; -    case CompositePlusDarker:
&gt; -    case CompositeHighlight:
&gt; -        // unsupported
&gt; -        m_context-&gt;disable(GraphicsContext3D::BLEND);
&gt; -        break;
&gt; -    case CompositePlusLighter:
&gt; -        m_context-&gt;enable(GraphicsContext3D::BLEND);
&gt; -        m_context-&gt;blendFunc(GraphicsContext3D::ONE, GraphicsContext3D::ONE);
&gt; -        break;
&gt; -    }
&gt; -    m_lastCompositeOp = op;
&gt; -}
&gt; -
&gt; -unsigned GLES2Canvas::getQuadVertices()
&gt; -{
&gt; -    if (!m_quadVertices) {
&gt; -        float vertices[] = { 0.0f, 0.0f, 1.0f,
&gt; -                             1.0f, 0.0f, 1.0f,
&gt; -                             0.0f, 1.0f, 1.0f,
&gt; -                             1.0f, 1.0f, 1.0f };
&gt; -        m_quadVertices = m_context-&gt;createBuffer();
&gt; -        m_context-&gt;bindBuffer(GraphicsContext3D::ARRAY_BUFFER, m_quadVertices);
&gt; -        m_context-&gt;bufferData(GraphicsContext3D::ARRAY_BUFFER, sizeof(vertices), vertices, GraphicsContext3D::STATIC_DRAW);
&gt; -    }
&gt; -    return m_quadVertices;
&gt; -}
&gt; -
&gt; -Texture* GLES2Canvas::createTexture(NativeImagePtr ptr, Texture::Format format, int width, int height)
&gt; +PassRefPtr&lt;Texture&gt; GLES2Canvas::createTexture(NativeImagePtr ptr, Texture::Format format, int width, int height)

If the ownership of the Texture object is not being transferred -- and it doesn&apos;t look like it is, since the SharedContext3D conceptually owns the created Texture -- then this should return Texture*, not PassRefPtr&lt;Texture&gt;.

&gt;  {
&gt; -    PassRefPtr&lt;Texture&gt; texture = m_textures.get(ptr);
&gt; -    if (texture)
&gt; -        return texture.get();
&gt; -
&gt; -    texture = Texture::create(m_context, format, width, height);
&gt; -    Texture* t = texture.get();
&gt; -    m_textures.set(ptr, texture);
&gt; -    return t;
&gt; +    return m_context-&gt;createTexture(ptr, format, width, height);
&gt;  }
&gt;  
&gt; -Texture* GLES2Canvas::getTexture(NativeImagePtr ptr)
&gt; +PassRefPtr&lt;Texture&gt; GLES2Canvas::getTexture(NativeImagePtr ptr)

Similar ownership issue here -- this should return Texture*.

&gt;  {
&gt; -    PassRefPtr&lt;Texture&gt; texture = m_textures.get(ptr);
&gt; -    return texture ? texture.get() : 0;
&gt; +    return m_context-&gt;getTexture(ptr);
&gt;  }
&gt;  
&gt;  void GLES2Canvas::checkGLError(const char* header)
&gt; diff --git a/WebCore/platform/graphics/chromium/GLES2Canvas.h b/WebCore/platform/graphics/chromium/GLES2Canvas.h
&gt; index f49ac8ba18d1d34234b8d06278e7028bfe9697e1..af3c0538f05f4072e20d173fe023b03926f6a69c 100644
&gt; --- a/WebCore/platform/graphics/chromium/GLES2Canvas.h
&gt; +++ b/WebCore/platform/graphics/chromium/GLES2Canvas.h
&gt; @@ -44,17 +44,15 @@
&gt;  
&gt;  namespace WebCore {
&gt;  
&gt; +class CanvasFramebuffer;
&gt; +class SharedContext3D;
&gt;  class Color;
&gt;  class FloatRect;
&gt;  class GraphicsContext3D;
&gt; -class SolidFillShader;
&gt; -class TexShader;
&gt; -
&gt; -typedef HashMap&lt;NativeImagePtr, RefPtr&lt;Texture&gt; &gt; TextureHashMap;
&gt;  
&gt;  class GLES2Canvas : public Noncopyable {
&gt;  public:
&gt; -    GLES2Canvas(GraphicsContext3D*, const IntSize&amp;);
&gt; +    GLES2Canvas(SharedContext3D*, CanvasFramebuffer*, const IntSize&amp;);
&gt;      ~GLES2Canvas();
&gt;  
&gt;      void fillRect(const FloatRect&amp;, const Color&amp;, ColorSpace);
&gt; @@ -74,28 +72,35 @@ public:
&gt;      // non-standard functions
&gt;      // These are not standard GraphicsContext functions, and should be pushed
&gt;      // down into a PlatformContextGLES2 at some point.
&gt; +    void drawTexturedRect(unsigned texture, const IntSize&amp; textureSize, const FloatRect&amp; srcRect, const FloatRect&amp; dstRect, ColorSpace, CompositeOperator);
&gt;      void drawTexturedRect(Texture*, const FloatRect&amp; srcRect, const FloatRect&amp; dstRect, const AffineTransform&amp;, float alpha, ColorSpace, CompositeOperator);
&gt;      void drawTexturedRect(Texture*, const FloatRect&amp; srcRect, const FloatRect&amp; dstRect, ColorSpace, CompositeOperator);
&gt; -    GraphicsContext3D* context() { return m_context; }
&gt; -    Texture* createTexture(NativeImagePtr, Texture::Format, int width, int height);
&gt; -    Texture* getTexture(NativeImagePtr);
&gt; +    PassRefPtr&lt;Texture&gt; createTexture(NativeImagePtr, Texture::Format, int width, int height);
&gt; +    PassRefPtr&lt;Texture&gt; getTexture(NativeImagePtr);

These should return Texture*.

&gt; +
&gt; +    SharedContext3D* context() const { return m_context; }
&gt; +
&gt; +    void swapBuffers();
&gt; +    void bindFramebuffer();
&gt; +
&gt; +    unsigned textureIdForCompositor() const;
&gt; +    unsigned textureIdForCanvas() const;
&gt;  
&gt;  private:
&gt;      void drawTexturedRectTile(Texture* texture, int tile, const FloatRect&amp; srcRect, const FloatRect&amp; dstRect, const AffineTransform&amp;, float alpha);
&gt; +    void drawQuad(const IntSize&amp; textureSize, const FloatRect&amp; srcRect, const FloatRect&amp; dstRect, const AffineTransform&amp;, float alpha);
&gt;      void applyCompositeOperator(CompositeOperator);
&gt;      void checkGLError(const char* header);
&gt; -    unsigned getQuadVertices();
&gt;  
&gt; -    GraphicsContext3D* m_context;
&gt; +    IntSize m_size;
&gt; +
&gt; +    SharedContext3D* m_context;
&gt; +    CanvasFramebuffer* m_framebuffer;
&gt; +
&gt;      struct State;
&gt;      WTF::Vector&lt;State&gt; m_stateStack;
&gt;      State* m_state;
&gt; -    unsigned m_quadVertices;
&gt; -    OwnPtr&lt;SolidFillShader&gt; m_solidFillShader;
&gt; -    OwnPtr&lt;TexShader&gt; m_texShader;
&gt;      AffineTransform m_flipMatrix;
&gt; -    TextureHashMap m_textures;
&gt; -    CompositeOperator m_lastCompositeOp; // This is the one last set, not necessarily the one in the state stack.
&gt;  };
&gt;  
&gt;  }
&gt; diff --git a/WebCore/platform/graphics/gpu/CanvasFramebuffer.cpp b/WebCore/platform/graphics/gpu/CanvasFramebuffer.cpp
&gt; new file mode 100644
&gt; index 0000000000000000000000000000000000000000..fe4ddb471e222f853566bfc456f1e183adb7e969
&gt; --- /dev/null
&gt; +++ b/WebCore/platform/graphics/gpu/CanvasFramebuffer.cpp
&gt; @@ -0,0 +1,110 @@
&gt; +/*
&gt; + * Copyright (c) 2010, Google Inc. All rights reserved.
&gt; + *
&gt; + * Redistribution and use in source and binary forms, with or without
&gt; + * modification, are permitted provided that the following conditions are
&gt; + * met:
&gt; + *
&gt; + *     * Redistributions of source code must retain the above copyright
&gt; + * notice, this list of conditions and the following disclaimer.
&gt; + *     * Redistributions in binary form must reproduce the above
&gt; + * copyright notice, this list of conditions and the following disclaimer
&gt; + * in the documentation and/or other materials provided with the
&gt; + * distribution.
&gt; + *     * Neither the name of Google Inc. nor the names of its
&gt; + * contributors may be used to endorse or promote products derived from
&gt; + * this software without specific prior written permission.
&gt; + *
&gt; + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
&gt; + * &quot;AS IS&quot; AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
&gt; + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
&gt; + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
&gt; + * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
&gt; + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
&gt; + * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
&gt; + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
&gt; + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
&gt; + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
&gt; + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
&gt; + */
&gt; +
&gt; +#include &quot;config.h&quot;
&gt; +
&gt; +#include &quot;CanvasFramebuffer.h&quot;
&gt; +
&gt; +#include &quot;GraphicsContext3D.h&quot;
&gt; +#include &quot;SharedContext3D.h&quot;
&gt; +
&gt; +namespace WebCore {
&gt; +
&gt; +CanvasFramebuffer::CanvasFramebuffer(SharedContext3D* context, const IntSize&amp; size, unsigned framebuffer, unsigned offscreenColorTexture, unsigned offscreenParentColorTexture)
&gt; +    : m_context(context)
&gt; +    , m_size(size)
&gt; +    , m_framebuffer(framebuffer)
&gt; +    , m_offscreenColorTexture(offscreenColorTexture)
&gt; +    , m_offscreenParentColorTexture(offscreenParentColorTexture)
&gt; +{
&gt; +}
&gt; +
&gt; +CanvasFramebuffer::~CanvasFramebuffer()
&gt; +{
&gt; +    m_context-&gt;deleteTexture(m_offscreenColorTexture);
&gt; +    m_context-&gt;deleteCompositorTexture(m_offscreenParentColorTexture);
&gt; +    m_context-&gt;deleteFramebuffer(m_framebuffer);
&gt; +}
&gt; +
&gt; +void CanvasFramebuffer::bind()
&gt; +{
&gt; +    m_context-&gt;bindFramebuffer(m_framebuffer);
&gt; +    m_context-&gt;setViewport(m_size);
&gt; +}
&gt; +
&gt; +void CanvasFramebuffer::swapBuffers()
&gt; +{
&gt; +    if (m_willSwapBuffersCallback)
&gt; +        m_willSwapBuffersCallback-&gt;willSwapBuffers();
&gt; +    m_context-&gt;setViewport(m_size);
&gt; +    m_context-&gt;copyTextureToCompositor(m_offscreenColorTexture, m_offscreenParentColorTexture);
&gt; +}
&gt; +
&gt; +void CanvasFramebuffer::setWillSwapBuffersCallback(PassOwnPtr&lt;SwapBuffersCallback&gt; callback)
&gt; +{
&gt; +    m_willSwapBuffersCallback = callback;
&gt; +}
&gt; +
&gt; +PassOwnPtr&lt;CanvasFramebuffer&gt; CanvasFramebuffer::create(SharedContext3D* context, const IntSize&amp; size)
&gt; +{
&gt; +    unsigned framebuffer = context-&gt;createFramebuffer();
&gt; +    ASSERT(framebuffer);
&gt; +    if (!framebuffer)
&gt; +        return 0;
&gt; +    context-&gt;bindFramebuffer(framebuffer);
&gt; +
&gt; +    // Color texture
&gt; +    unsigned offscreenColorTexture = context-&gt;createTexture();
&gt; +    ASSERT(offscreenColorTexture);
&gt; +    if (!offscreenColorTexture) {
&gt; +        context-&gt;deleteFramebuffer(framebuffer);
&gt; +        return 0;
&gt; +    }
&gt; +    context-&gt;bindTexture(GraphicsContext3D::TEXTURE_2D, offscreenColorTexture);
&gt; +    context-&gt;texParameteri(GraphicsContext3D::TEXTURE_2D, GraphicsContext3D::TEXTURE_MAG_FILTER, GraphicsContext3D::NEAREST);
&gt; +    context-&gt;texParameteri(GraphicsContext3D::TEXTURE_2D, GraphicsContext3D::TEXTURE_MIN_FILTER, GraphicsContext3D::NEAREST);
&gt; +    context-&gt;texParameteri(GraphicsContext3D::TEXTURE_2D, GraphicsContext3D::TEXTURE_WRAP_S, GraphicsContext3D::CLAMP_TO_EDGE);
&gt; +    context-&gt;texParameteri(GraphicsContext3D::TEXTURE_2D, GraphicsContext3D::TEXTURE_WRAP_T, GraphicsContext3D::CLAMP_TO_EDGE);
&gt; +    context-&gt;texImage2D(GraphicsContext3D::TEXTURE_2D, 0, GraphicsContext3D::RGBA, size.width(), size.height(), 0, GraphicsContext3D::RGBA, GraphicsContext3D::UNSIGNED_BYTE, 0);
&gt; +
&gt; +    unsigned offscreenParentColorTexture = context-&gt;createCompositorTexture(size);
&gt; +    ASSERT(offscreenParentColorTexture);
&gt; +    if (!offscreenParentColorTexture) {
&gt; +        context-&gt;deleteTexture(offscreenColorTexture);
&gt; +        context-&gt;deleteFramebuffer(framebuffer);
&gt; +        return 0;
&gt; +    }
&gt; +
&gt; +    context-&gt;framebufferTexture2D(GraphicsContext3D::FRAMEBUFFER, GraphicsContext3D::COLOR_ATTACHMENT0, GraphicsContext3D::TEXTURE_2D, offscreenColorTexture, 0);
&gt; +
&gt; +    return new CanvasFramebuffer(context, size, framebuffer, offscreenColorTexture, offscreenParentColorTexture);

return adoptPtr(new CanvasFrameBuffer(...));

&gt; +}
&gt; +
&gt; +} // namespace WebCore
&gt; diff --git a/WebCore/platform/graphics/gpu/SharedContext3D.cpp b/WebCore/platform/graphics/gpu/SharedContext3D.cpp
&gt; new file mode 100644
&gt; index 0000000000000000000000000000000000000000..3b738f01f7281392937fed5e0df257cc9cfb92f4
&gt; --- /dev/null
&gt; +++ b/WebCore/platform/graphics/gpu/SharedContext3D.cpp
&gt; @@ -0,0 +1,325 @@
&gt; +/*
&gt; + * Copyright (c) 2010, Google Inc. All rights reserved.
&gt; + *
&gt; + * Redistribution and use in source and binary forms, with or without
&gt; + * modification, are permitted provided that the following conditions are
&gt; + * met:
&gt; + *
&gt; + *     * Redistributions of source code must retain the above copyright
&gt; + * notice, this list of conditions and the following disclaimer.
&gt; + *     * Redistributions in binary form must reproduce the above
&gt; + * copyright notice, this list of conditions and the following disclaimer
&gt; + * in the documentation and/or other materials provided with the
&gt; + * distribution.
&gt; + *     * Neither the name of Google Inc. nor the names of its
&gt; + * contributors may be used to endorse or promote products derived from
&gt; + * this software without specific prior written permission.
&gt; + *
&gt; + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
&gt; + * &quot;AS IS&quot; AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
&gt; + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
&gt; + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
&gt; + * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
&gt; + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
&gt; + * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
&gt; + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
&gt; + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
&gt; + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
&gt; + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
&gt; + */
&gt; +
&gt; +#include &quot;config.h&quot;
&gt; +
&gt; +#include &quot;SharedContext3D.h&quot;
&gt; +
&gt; +#include &quot;AffineTransform.h&quot;
&gt; +#include &quot;CanvasFramebuffer.h&quot;
&gt; +#include &quot;Color.h&quot;
&gt; +#include &quot;FloatRect.h&quot;
&gt; +#include &quot;GraphicsContext3D.h&quot;
&gt; +#include &quot;GraphicsTypes.h&quot;
&gt; +#include &quot;IntSize.h&quot;
&gt; +#include &quot;SolidFillShader.h&quot;
&gt; +#include &quot;TexShader.h&quot;
&gt; +
&gt; +#include &lt;wtf/text/CString.h&gt;
&gt; +#include &lt;wtf/text/WTFString.h&gt;
&gt; +
&gt; +namespace WebCore {
&gt; +
&gt; +static inline void affineTo3x3(const AffineTransform&amp; transform, float mat[9])
&gt; +{
&gt; +    mat[0] = transform.a();
&gt; +    mat[1] = transform.b();
&gt; +    mat[2] = 0.0f;
&gt; +    mat[3] = transform.c();
&gt; +    mat[4] = transform.d();
&gt; +    mat[5] = 0.0f;
&gt; +    mat[6] = transform.e();
&gt; +    mat[7] = transform.f();
&gt; +    mat[8] = 1.0f;
&gt; +}
&gt; +
&gt; +// static
&gt; +PassRefPtr&lt;SharedContext3D&gt; SharedContext3D::create(PassOwnPtr&lt;GraphicsContext3D&gt; context)
&gt; +{
&gt; +    return adoptRef(new SharedContext3D(context));
&gt; +}
&gt; +
&gt; +SharedContext3D::SharedContext3D(PassOwnPtr&lt;GraphicsContext3D&gt; context)
&gt; +    : m_context(context)
&gt; +    , m_quadVertices(0)
&gt; +    , m_solidFillShader(SolidFillShader::create(m_context.get()))
&gt; +    , m_texShader(TexShader::create(m_context.get()))
&gt; +
&gt; +{
&gt; +}
&gt; +
&gt; +SharedContext3D::~SharedContext3D()
&gt; +{
&gt; +    m_context-&gt;deleteBuffer(m_quadVertices);
&gt; +}
&gt; +
&gt; +void SharedContext3D::scissor(const FloatRect&amp; rect)
&gt; +{
&gt; +    m_context-&gt;scissor(rect.x(), rect.y(), rect.width(), rect.height());
&gt; +}
&gt; +
&gt; +void SharedContext3D::enable(unsigned capacity)
&gt; +{
&gt; +    m_context-&gt;enable(capacity);
&gt; +}
&gt; +
&gt; +void SharedContext3D::disable(unsigned capacity)
&gt; +{
&gt; +    m_context-&gt;disable(capacity);
&gt; +}
&gt; +
&gt; +void SharedContext3D::clearColor(const Color&amp; color)
&gt; +{
&gt; +    float rgba[4];
&gt; +    color.getRGBA(rgba[0], rgba[1], rgba[2], rgba[3]);
&gt; +    m_context-&gt;clearColor(rgba[0], rgba[1], rgba[2], rgba[3]);
&gt; +}
&gt; +
&gt; +void SharedContext3D::clear(unsigned mask)
&gt; +{
&gt; +    m_context-&gt;clear(mask);
&gt; +}
&gt; +
&gt; +void SharedContext3D::drawArrays(unsigned long mode, long first, long count)
&gt; +{
&gt; +    m_context-&gt;drawArrays(mode, first, count);
&gt; +}
&gt; +
&gt; +unsigned long SharedContext3D::getError()
&gt; +{
&gt; +    return m_context-&gt;getError();
&gt; +}
&gt; +
&gt; +void SharedContext3D::getIntegerv(unsigned long pname, int* value)
&gt; +{
&gt; +    m_context-&gt;getIntegerv(pname, value);
&gt; +}
&gt; +
&gt; +unsigned SharedContext3D::createFramebuffer()
&gt; +{
&gt; +    return m_context-&gt;createFramebuffer();
&gt; +}
&gt; +
&gt; +unsigned SharedContext3D::createTexture()
&gt; +{
&gt; +    return m_context-&gt;createTexture();
&gt; +}
&gt; +
&gt; +void SharedContext3D::deleteFramebuffer(unsigned framebuffer)
&gt; +{
&gt; +    m_context-&gt;deleteFramebuffer(framebuffer);
&gt; +}
&gt; +
&gt; +void SharedContext3D::deleteTexture(unsigned texture)
&gt; +{
&gt; +    m_context-&gt;deleteTexture(texture);
&gt; +}
&gt; +
&gt; +void SharedContext3D::deleteCompositorTexture(unsigned texture)
&gt; +{
&gt; +    m_context-&gt;deleteCompositorTexture(texture);
&gt; +}
&gt; +
&gt; +void SharedContext3D::framebufferTexture2D(unsigned long target, unsigned long attachment, unsigned long textarget, unsigned texture, long level)
&gt; +{
&gt; +    m_context-&gt;framebufferTexture2D(target, attachment, textarget, texture, level);
&gt; +}
&gt; +
&gt; +void SharedContext3D::texParameteri(unsigned target, unsigned pname, int param)
&gt; +{
&gt; +    m_context-&gt;texParameteri(target, pname, param);
&gt; +}
&gt; +
&gt; +int SharedContext3D::texImage2D(unsigned target, unsigned level, unsigned internalformat, unsigned width, unsigned height, unsigned border, unsigned format, unsigned type, void* pixels)
&gt; +{
&gt; +    m_context-&gt;texImage2D(target, level, internalformat, width, height, border, format, type, pixels);
&gt; +}
&gt; +
&gt; +int SharedContext3D::texSubImage2D(unsigned target, unsigned level, unsigned xoffset, unsigned yoffset, unsigned width, unsigned height, unsigned format, unsigned type, void* pixels)
&gt; +{
&gt; +    m_context-&gt;texSubImage2D(target, level, xoffset, yoffset, width, height, format, type, pixels);
&gt; +}
&gt; +
&gt; +void SharedContext3D::readPixels(long x, long y, unsigned long width, unsigned long height, unsigned long format, unsigned long type, void* data)
&gt; +{
&gt; +    m_context-&gt;readPixels(x, y, width, height, format, type, data);
&gt; +}
&gt; +
&gt; +PassRefPtr&lt;Texture&gt; SharedContext3D::createTexture(NativeImagePtr ptr, Texture::Format format, int width, int height)

Since this class owns the Texture objects (ownership is not being transferred), this should return Texture*, not PassRefPtr&lt;Texture&gt;.

&gt; +{
&gt; +    RefPtr&lt;Texture&gt; texture;
&gt; +    if (ptr)
&gt; +        texture = m_textures.get(ptr);
&gt; +    if (texture)
&gt; +        return texture.get();
&gt; +
&gt; +    texture = Texture::create(m_context.get(), format, width, height);
&gt; +    Texture* t = texture.get();
&gt; +    if (ptr)
&gt; +        m_textures.set(ptr, texture);
&gt; +    return t;
&gt; +}
&gt; +
&gt; +PassRefPtr&lt;Texture&gt; SharedContext3D::getTexture(NativeImagePtr ptr)

Should return Texture*.

&gt; +{
&gt; +    RefPtr&lt;Texture&gt; texture = m_textures.get(ptr);
&gt; +    return texture ? texture.get() : 0;
&gt; +}
&gt; +
&gt; +
&gt; +void SharedContext3D::applyCompositeOperator(CompositeOperator op)
&gt; +{
&gt; +    switch (op) {
&gt; +    case CompositeClear:
&gt; +        m_context-&gt;enable(GraphicsContext3D::BLEND);
&gt; +        m_context-&gt;blendFunc(GraphicsContext3D::ZERO, GraphicsContext3D::ZERO);
&gt; +        break;
&gt; +    case CompositeCopy:
&gt; +        m_context-&gt;disable(GraphicsContext3D::BLEND);
&gt; +        break;
&gt; +    case CompositeSourceOver:
&gt; +        m_context-&gt;enable(GraphicsContext3D::BLEND);
&gt; +        m_context-&gt;blendFunc(GraphicsContext3D::ONE, GraphicsContext3D::ONE_MINUS_SRC_ALPHA);
&gt; +        break;
&gt; +    case CompositeSourceIn:
&gt; +        m_context-&gt;enable(GraphicsContext3D::BLEND);
&gt; +        m_context-&gt;blendFunc(GraphicsContext3D::DST_ALPHA, GraphicsContext3D::ZERO);
&gt; +        break;
&gt; +    case CompositeSourceOut:
&gt; +        m_context-&gt;enable(GraphicsContext3D::BLEND);
&gt; +        m_context-&gt;blendFunc(GraphicsContext3D::ONE_MINUS_DST_ALPHA, GraphicsContext3D::ZERO);
&gt; +        break;
&gt; +    case CompositeSourceAtop:
&gt; +        m_context-&gt;enable(GraphicsContext3D::BLEND);
&gt; +        m_context-&gt;blendFunc(GraphicsContext3D::DST_ALPHA, GraphicsContext3D::ONE_MINUS_SRC_ALPHA);
&gt; +        break;
&gt; +    case CompositeDestinationOver:
&gt; +        m_context-&gt;enable(GraphicsContext3D::BLEND);
&gt; +        m_context-&gt;blendFunc(GraphicsContext3D::ONE_MINUS_DST_ALPHA, GraphicsContext3D::ONE);
&gt; +        break;
&gt; +    case CompositeDestinationIn:
&gt; +        m_context-&gt;enable(GraphicsContext3D::BLEND);
&gt; +        m_context-&gt;blendFunc(GraphicsContext3D::ZERO, GraphicsContext3D::SRC_ALPHA);
&gt; +        break;
&gt; +    case CompositeDestinationOut:
&gt; +        m_context-&gt;enable(GraphicsContext3D::BLEND);
&gt; +        m_context-&gt;blendFunc(GraphicsContext3D::ZERO, GraphicsContext3D::ONE_MINUS_SRC_ALPHA);
&gt; +        break;
&gt; +    case CompositeDestinationAtop:
&gt; +        m_context-&gt;enable(GraphicsContext3D::BLEND);
&gt; +        m_context-&gt;blendFunc(GraphicsContext3D::ONE_MINUS_DST_ALPHA, GraphicsContext3D::SRC_ALPHA);
&gt; +        break;
&gt; +    case CompositeXOR:
&gt; +        m_context-&gt;enable(GraphicsContext3D::BLEND);
&gt; +        m_context-&gt;blendFunc(GraphicsContext3D::ONE_MINUS_DST_ALPHA, GraphicsContext3D::ONE_MINUS_SRC_ALPHA);
&gt; +        break;
&gt; +    case CompositePlusDarker:
&gt; +    case CompositeHighlight:
&gt; +        // unsupported
&gt; +        m_context-&gt;disable(GraphicsContext3D::BLEND);
&gt; +        break;
&gt; +    case CompositePlusLighter:
&gt; +        m_context-&gt;enable(GraphicsContext3D::BLEND);
&gt; +        m_context-&gt;blendFunc(GraphicsContext3D::ONE, GraphicsContext3D::ONE);
&gt; +        break;
&gt; +    }
&gt; +}
&gt; +
&gt; +void SharedContext3D::useQuadVertices()
&gt; +{
&gt; +    if (!m_quadVertices) {
&gt; +        float vertices[] = { 0.0f, 0.0f, 1.0f,
&gt; +                             1.0f, 0.0f, 1.0f,
&gt; +                             0.0f, 1.0f, 1.0f,
&gt; +                             1.0f, 1.0f, 1.0f };
&gt; +        m_quadVertices = m_context-&gt;createBuffer();
&gt; +        m_context-&gt;bindBuffer(GraphicsContext3D::ARRAY_BUFFER, m_quadVertices);
&gt; +        m_context-&gt;bufferData(GraphicsContext3D::ARRAY_BUFFER, sizeof(vertices), vertices, GraphicsContext3D::STATIC_DRAW);
&gt; +    } else {
&gt; +        m_context-&gt;bindBuffer(GraphicsContext3D::ARRAY_BUFFER, m_quadVertices);
&gt; +    }
&gt; +}
&gt; +
&gt; +void SharedContext3D::setActiveTexture(unsigned textureUnit)
&gt; +{
&gt; +    m_context-&gt;activeTexture(textureUnit);
&gt; +}
&gt; +
&gt; +void SharedContext3D::bindTexture(unsigned target, unsigned texture)
&gt; +{
&gt; +    if (target != GraphicsContext3D::TEXTURE_2D) {
&gt; +        m_context-&gt;bindTexture(target, texture);
&gt; +        return;
&gt; +    }
&gt; +
&gt; +    m_context-&gt;bindTexture(target, texture);
&gt; +}
&gt; +
&gt; +void SharedContext3D::useFillSolidProgram(const Color&amp; color, const AffineTransform&amp; transform)
&gt; +{
&gt; +    m_solidFillShader-&gt;use(transform, color);
&gt; +}
&gt; +
&gt; +void SharedContext3D::useTextureProgram(float alpha, const AffineTransform&amp; transform, const AffineTransform&amp; texTransform)
&gt; +{
&gt; +    m_texShader-&gt;use(transform, texTransform, 0, alpha);
&gt; +}
&gt; +
&gt; +void SharedContext3D::bindFramebuffer(unsigned framebuffer)
&gt; +{
&gt; +    m_context-&gt;bindFramebuffer(GraphicsContext3D::FRAMEBUFFER, framebuffer);
&gt; +}
&gt; +
&gt; +void SharedContext3D::setViewport(const IntSize&amp; size)
&gt; +{
&gt; +    m_context-&gt;viewport(0, 0, size.width(), size.height());
&gt; +}
&gt; +
&gt; +bool SharedContext3D::supportsBGRA()
&gt; +{
&gt; +    return m_context-&gt;supportsBGRA();
&gt; +}
&gt; +
&gt; +unsigned SharedContext3D::createCompositorTexture(const IntSize&amp; size)
&gt; +{
&gt; +    return m_context-&gt;createCompositorTexture(size.width(), size.height());
&gt; +}
&gt; +
&gt; +void SharedContext3D::copyTextureToCompositor(unsigned source, unsigned destination)
&gt; +{
&gt; +    m_context-&gt;copyTextureToCompositor(source, destination);
&gt; +}
&gt; +
&gt; +bool SharedContext3D::paintsIntoCanvasBuffer() const
&gt; +{
&gt; +    return m_context-&gt;paintsIntoCanvasBuffer();
&gt; +}
&gt; +
&gt; +} // namespace WebCore
&gt; diff --git a/WebCore/platform/graphics/gpu/SharedContext3D.h b/WebCore/platform/graphics/gpu/SharedContext3D.h
&gt; new file mode 100644
&gt; index 0000000000000000000000000000000000000000..8abcb316dd27b98e7a4684adec208587adcbbf8f
&gt; --- /dev/null
&gt; +++ b/WebCore/platform/graphics/gpu/SharedContext3D.h
&gt; @@ -0,0 +1,121 @@
&gt; +/*
&gt; + * Copyright (c) 2010, Google Inc. All rights reserved.
&gt; + *
&gt; + * Redistribution and use in source and binary forms, with or without
&gt; + * modification, are permitted provided that the following conditions are
&gt; + * met:
&gt; + *
&gt; + *     * Redistributions of source code must retain the above copyright
&gt; + * notice, this list of conditions and the following disclaimer.
&gt; + *     * Redistributions in binary form must reproduce the above
&gt; + * copyright notice, this list of conditions and the following disclaimer
&gt; + * in the documentation and/or other materials provided with the
&gt; + * distribution.
&gt; + *     * Neither the name of Google Inc. nor the names of its
&gt; + * contributors may be used to endorse or promote products derived from
&gt; + * this software without specific prior written permission.
&gt; + *
&gt; + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
&gt; + * &quot;AS IS&quot; AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
&gt; + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
&gt; + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
&gt; + * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
&gt; + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
&gt; + * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
&gt; + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
&gt; + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
&gt; + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
&gt; + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
&gt; + */
&gt; +
&gt; +#ifndef SharedContext3D_h
&gt; +#define SharedContext3D_h
&gt; +
&gt; +#include &quot;GraphicsTypes.h&quot;
&gt; +#include &quot;ImageSource.h&quot;
&gt; +#include &quot;Texture.h&quot;
&gt; +
&gt; +#include &lt;wtf/HashMap.h&gt;
&gt; +#include &lt;wtf/OwnPtr.h&gt;
&gt; +#include &lt;wtf/RefCounted.h&gt;
&gt; +#include &lt;wtf/RefPtr.h&gt;
&gt; +
&gt; +namespace WebCore {
&gt; +
&gt; +class AffineTransform;
&gt; +class CanvasFramebuffer;
&gt; +class Color;
&gt; +class GraphicsContext3D;
&gt; +class FloatRect;
&gt; +class IntSize;
&gt; +class SolidFillShader;
&gt; +class TexShader;
&gt; +
&gt; +typedef HashMap&lt;NativeImagePtr, RefPtr&lt;Texture&gt; &gt; TextureHashMap;
&gt; +
&gt; +class SharedContext3D : public RefCounted&lt;SharedContext3D&gt; {
&gt; +public:
&gt; +    static PassRefPtr&lt;SharedContext3D&gt; create(PassOwnPtr&lt;GraphicsContext3D&gt;);
&gt; +    ~SharedContext3D();
&gt; +
&gt; +    // Functions that delegate directly to GraphicsContext3D, with caching
&gt; +    void bindFramebuffer(unsigned framebuffer);
&gt; +    void setViewport(const IntSize&amp;);
&gt; +    void scissor(const FloatRect&amp;);
&gt; +    void enable(unsigned capacity);
&gt; +    void disable(unsigned capacity);
&gt; +    void clearColor(const Color&amp;);
&gt; +    void clear(unsigned mask);
&gt; +    void drawArrays(unsigned long mode, long first, long count);
&gt; +    unsigned long getError();
&gt; +    void getIntegerv(unsigned long pname, int* value);
&gt; +
&gt; +    unsigned createFramebuffer();
&gt; +    unsigned createTexture();
&gt; +
&gt; +    void deleteFramebuffer(unsigned framebuffer);
&gt; +    void deleteTexture(unsigned texture);
&gt; +    void deleteCompositorTexture(unsigned texture);
&gt; +
&gt; +    void framebufferTexture2D(unsigned long target, unsigned long attachment, unsigned long textarget, unsigned, long level);
&gt; +    void texParameteri(unsigned target, unsigned pname, int param);
&gt; +    int texImage2D(unsigned target, unsigned level, unsigned internalformat, unsigned width, unsigned height, unsigned border, unsigned format, unsigned type, void* pixels);
&gt; +    int texSubImage2D(unsigned target, unsigned level, unsigned xoffset, unsigned yoffset, unsigned width, unsigned height, unsigned format, unsigned type, void* pixels);
&gt; +
&gt; +    void readPixels(long x, long y, unsigned long width, unsigned long height, unsigned long format, unsigned long type, void* data);
&gt; +
&gt; +    bool supportsBGRA();
&gt; +    unsigned createCompositorTexture(const IntSize&amp;);
&gt; +    void copyTextureToCompositor(unsigned, unsigned);
&gt; +
&gt; +    bool paintsIntoCanvasBuffer() const;
&gt; +
&gt; +    // Shared logic for canvas 2d
&gt; +    void applyCompositeOperator(CompositeOperator);
&gt; +    void useQuadVertices();
&gt; +
&gt; +    void useFillSolidProgram(const Color&amp;, const AffineTransform&amp;);
&gt; +    void useTextureProgram(float alpha, const AffineTransform&amp;, const AffineTransform&amp;);
&gt; +
&gt; +    void setActiveTexture(unsigned textureUnit);
&gt; +    void bindTexture(unsigned target, unsigned texture);
&gt; +
&gt; +    PassRefPtr&lt;Texture&gt; createTexture(NativeImagePtr, Texture::Format, int width, int height);
&gt; +    PassRefPtr&lt;Texture&gt; getTexture(NativeImagePtr);

Should return Texture*, not PassRefPtr&lt;Texture&gt;.

&gt; +
&gt; +private:
&gt; +    SharedContext3D(PassOwnPtr&lt;GraphicsContext3D&gt; context);
&gt; +
&gt; +    OwnPtr&lt;GraphicsContext3D&gt; m_context;
&gt; +
&gt; +    unsigned m_quadVertices;
&gt; +
&gt; +    OwnPtr&lt;SolidFillShader&gt; m_solidFillShader;
&gt; +    OwnPtr&lt;TexShader&gt; m_texShader;
&gt; +
&gt; +    TextureHashMap m_textures;
&gt; +};
&gt; +
&gt; +} // namespace WebCore
&gt; +
&gt; +#endif // SharedContext3D_h
&gt; diff --git a/WebCore/platform/graphics/skia/ImageSkia.cpp b/WebCore/platform/graphics/skia/ImageSkia.cpp
&gt; index aed289fe3c155aa5d3596d494b60893e4c016bb6..c517a8a808ba9f6efb0b821ef158dc4ddb99e73f 100644
&gt; --- a/WebCore/platform/graphics/skia/ImageSkia.cpp
&gt; +++ b/WebCore/platform/graphics/skia/ImageSkia.cpp
&gt; @@ -47,6 +47,7 @@
&gt;  #include &quot;SkRect.h&quot;
&gt;  #include &quot;SkShader.h&quot;
&gt;  #include &quot;SkiaUtils.h&quot;
&gt; +#include &quot;Texture.h&quot;
&gt;  
&gt;  #include &quot;skia/ext/image_operations.h&quot;
&gt;  #include &quot;skia/ext/platform_canvas.h&quot;
&gt; @@ -411,7 +412,7 @@ static void drawBitmapGLES2(GraphicsContext* ctxt, NativeImageSkia* bitmap, cons
&gt;  {
&gt;      ctxt-&gt;platformContext()-&gt;prepareForHardwareDraw();
&gt;      GLES2Canvas* gpuCanvas = ctxt-&gt;platformContext()-&gt;gpuCanvas();
&gt; -    Texture* texture = gpuCanvas-&gt;getTexture(bitmap);
&gt; +    RefPtr&lt;Texture&gt; texture = gpuCanvas-&gt;getTexture(bitmap);

Because getTexture() will no longer return PassRefPtr, this doesn&apos;t need to change.

&gt;      if (!texture) {
&gt;          ASSERT(bitmap-&gt;config() == SkBitmap::kARGB_8888_Config);
&gt;          ASSERT(bitmap-&gt;rowBytes() == bitmap-&gt;width() * 4);
&gt; @@ -420,7 +421,7 @@ static void drawBitmapGLES2(GraphicsContext* ctxt, NativeImageSkia* bitmap, cons
&gt;          ASSERT(bitmap-&gt;getPixels());
&gt;          texture-&gt;load(bitmap-&gt;getPixels());
&gt;      }
&gt; -    gpuCanvas-&gt;drawTexturedRect(texture, srcRect, dstRect, styleColorSpace, compositeOp);
&gt; +    gpuCanvas-&gt;drawTexturedRect(texture.get(), srcRect, dstRect, styleColorSpace, compositeOp);

Same here.

&gt;  }
&gt;  
&gt;  // ================================================
&gt; diff --git a/WebKit/chromium/src/ChromeClientImpl.cpp b/WebKit/chromium/src/ChromeClientImpl.cpp
&gt; index e6f14007180d8d3bf6128b130dc28abaaec1f90a..42424453c34691358b8371d2d7f0d3a49c2834bb 100644
&gt; --- a/WebKit/chromium/src/ChromeClientImpl.cpp
&gt; +++ b/WebKit/chromium/src/ChromeClientImpl.cpp
&gt; @@ -59,6 +59,7 @@
&gt;  #include &quot;SearchPopupMenuChromium.h&quot;
&gt;  #include &quot;ScriptController.h&quot;
&gt;  #include &quot;SecurityOrigin.h&quot;
&gt; +#include &quot;SharedContext3D.h&quot;
&gt;  #include &quot;WebGeolocationService.h&quot;
&gt;  #if USE(V8)
&gt;  #include &quot;V8Proxy.h&quot;
&gt; @@ -751,6 +752,11 @@ void ChromeClientImpl::scheduleCompositingLayerSync()
&gt;  }
&gt;  #endif
&gt;  
&gt; +PassRefPtr&lt;WebCore::SharedContext3D&gt; ChromeClientImpl::getSharedContext3D()

See below about lack of ownership transfer.

&gt; +{
&gt; +    return m_webView-&gt;getSharedContext3D();
&gt; +}
&gt; +
&gt;  bool ChromeClientImpl::supportsFullscreenForNode(const WebCore::Node* node)
&gt;  {
&gt;      if (m_webView-&gt;client() &amp;&amp; node-&gt;hasTagName(WebCore::HTMLNames::videoTag))
&gt; diff --git a/WebKit/chromium/src/ChromeClientImpl.h b/WebKit/chromium/src/ChromeClientImpl.h
&gt; index bff9f9047fa7c7f3abd704d94785d9c1facf7740..53db94f79af605fc0c9c09a21fb329375dc5f97e 100644
&gt; --- a/WebKit/chromium/src/ChromeClientImpl.h
&gt; +++ b/WebKit/chromium/src/ChromeClientImpl.h
&gt; @@ -152,6 +152,8 @@ public:
&gt;      virtual void scheduleCompositingLayerSync();
&gt;  #endif
&gt;  
&gt; +    virtual PassRefPtr&lt;WebCore::SharedContext3D&gt; getSharedContext3D();

Because ownership isn&apos;t being transferred, this should return WebCore::SharedContext3D* rather than PassRefPtr&lt;...&gt;.

&gt; +
&gt;      virtual bool supportsFullscreenForNode(const WebCore::Node*);
&gt;      virtual void enterFullscreenForNode(WebCore::Node*);
&gt;      virtual void exitFullscreenForNode(WebCore::Node*);
&gt; diff --git a/WebKit/chromium/src/WebViewImpl.cpp b/WebKit/chromium/src/WebViewImpl.cpp
&gt; index 5065f5eb9b64083fc3b1e174f42815c5737b4839..d2331a3f3e5ab62e3a7d554cd7dd848c2090ce6d 100644
&gt; --- a/WebKit/chromium/src/WebViewImpl.cpp
&gt; +++ b/WebKit/chromium/src/WebViewImpl.cpp
&gt; @@ -58,6 +58,7 @@
&gt;  #include &quot;GLES2Context.h&quot;
&gt;  #include &quot;GLES2ContextInternal.h&quot;
&gt;  #include &quot;GraphicsContext.h&quot;
&gt; +#include &quot;GraphicsContext3D.h&quot;
&gt;  #include &quot;HTMLInputElement.h&quot;
&gt;  #include &quot;HTMLMediaElement.h&quot;
&gt;  #include &quot;HitTestResult.h&quot;
&gt; @@ -86,6 +87,7 @@
&gt;  #include &quot;SecurityOrigin.h&quot;
&gt;  #include &quot;SelectionController.h&quot;
&gt;  #include &quot;Settings.h&quot;
&gt; +#include &quot;SharedContext3D.h&quot;
&gt;  #include &quot;Timer.h&quot;
&gt;  #include &quot;TypingCommand.h&quot;
&gt;  #include &quot;UserGestureIndicator.h&quot;
&gt; @@ -2211,14 +2213,16 @@ PassOwnPtr&lt;GLES2Context&gt; WebViewImpl::getOnscreenGLES2Context()
&gt;      return GLES2Context::create(GLES2ContextInternal::create(gles2Context(), false));
&gt;  }
&gt;  
&gt; -PassOwnPtr&lt;GLES2Context&gt; WebViewImpl::getOffscreenGLES2Context()
&gt; +PassRefPtr&lt;SharedContext3D&gt; WebViewImpl::getSharedContext3D()

Should return SharedContext3D* since ownership is not being transferred.

&gt;  {
&gt; -    WebGLES2Context* context = webKitClient()-&gt;createGLES2Context();
&gt; -    if (!context)
&gt; -        return 0;
&gt; -    if (!context-&gt;initialize(0, gles2Context()))
&gt; -        return 0;
&gt; -    return GLES2Context::create(GLES2ContextInternal::create(context, true));
&gt; +    if (!m_sharedContext3D) {
&gt; +        GraphicsContext3D::Attributes attr;
&gt; +        attr.stencil = true;
&gt; +        OwnPtr&lt;GraphicsContext3D&gt; context = GraphicsContext3D::create(attr, m_page-&gt;chrome());
&gt; +        m_sharedContext3D = SharedContext3D::create(context.release());
&gt; +    }
&gt; +
&gt; +    return m_sharedContext3D;
&gt;  }
&gt;  
&gt;  // Returns the GLES2 context associated with this View. If one doesn&apos;t exist
&gt; diff --git a/WebKit/chromium/src/WebViewImpl.h b/WebKit/chromium/src/WebViewImpl.h
&gt; index c29612123f4514c94dd7d970c73114a4beeec355..4ad74fb12da3ff55f8c82ed22a0e3a89ff1ba2fd 100644
&gt; --- a/WebKit/chromium/src/WebViewImpl.h
&gt; +++ b/WebKit/chromium/src/WebViewImpl.h
&gt; @@ -329,10 +329,10 @@ public:
&gt;      // Offscreen contexts render offscreen but can share resources with the
&gt;      // onscreen context and thus can be composited.
&gt;      PassOwnPtr&lt;WebCore::GLES2Context&gt; getOnscreenGLES2Context();
&gt; -    PassOwnPtr&lt;WebCore::GLES2Context&gt; getOffscreenGLES2Context();
&gt;  
&gt;      // Returns an onscreen context
&gt;      virtual WebGLES2Context* gles2Context();
&gt; +    virtual PassRefPtr&lt;WebCore::SharedContext3D&gt; getSharedContext3D();

SharedContext3D*.

&gt;  
&gt;      WebCore::PopupContainer* selectPopup() const { return m_selectPopup.get(); }
&gt;  
&gt; @@ -521,6 +521,8 @@ private:
&gt;  
&gt;      OwnPtr&lt;WebGLES2Context&gt; m_gles2Context;
&gt;  
&gt; +    RefPtr&lt;WebCore::SharedContext3D&gt; m_sharedContext3D;
&gt; +
&gt;      OwnPtr&lt;DeviceOrientationClientProxy&gt; m_deviceOrientationClientProxy;
&gt;  };
&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>272291</commentid>
    <comment_count>14</comment_count>
      <attachid>66074</attachid>
    <who name="Vangelis Kokkevis">vangelis</who>
    <bug_when>2010-08-31 12:54:41 -0700</bug_when>
    <thetext>Comment on attachment 66074
compile fix for gtk/win/mac

Looks good!  Just a couple of comments, inlined below:

&gt; +void Canvas2DLayerChromium::updateContents()
&gt; +{
&gt; +    unsigned textureId = m_framebuffer-&gt;textureIdForCompositor();

m_textureChanged isn&apos;t set for this layer type.  There are two options here:

1. Make sure the proper modes are set when GraphicsContext3D creates the compositor texture so you don&apos;t worry about it here
2. Move this logic up to CanvasLayerChromium::draw() and set the modes before using the texture if m_textureChanged == true

I prefer #1 if possible.

&gt; +    if (m_textureChanged) {
&gt; +        glBindTexture(GL_TEXTURE_2D, textureId);
&gt; +        // Set the min-mag filters to linear and wrap modes to GL_CLAMP_TO_EDGE
&gt; +        // to get around NPOT texture limitations of GLES.
&gt; +        glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
&gt; +        glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
&gt; +        glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE);
&gt; +        glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE);
&gt; +        m_textureChanged = false;
&gt; +    }
&gt; +    // Update the contents of the texture used by the compositor.
&gt; +    if (m_contentsDirty) {
&gt; +        m_framebuffer-&gt;swapBuffers();
&gt; +        m_contentsDirty = false;
&gt; +    }
&gt; +}
&gt; +
&gt; diff --git a/WebCore/platform/graphics/chromium/Canvas2DLayerChromium.h b/WebCore/platform/graphics/chromium/Canvas2DLayerChromium.h
&gt; +
&gt; +// A layer containing an accelerated 2d canvas
&gt; +class Canvas2DLayerChromium : public CanvasLayerChromium {
&gt; +public:
&gt; +    static PassRefPtr&lt;Canvas2DLayerChromium&gt; create(CanvasFramebuffer*, GraphicsLayerChromium* owner);
&gt; +    virtual bool drawsContent() { return true; }
&gt; +    virtual void updateContents();
&gt; +
&gt; +    void setCanvasFramebuffer(CanvasFramebuffer*);
&gt; +
&gt; +protected:
&gt; +    virtual unsigned textureId();
&gt; +
&gt; +private:
&gt; +    explicit Canvas2DLayerChromium(CanvasFramebuffer*, GraphicsLayerChromium* owner);
&gt; +    CanvasFramebuffer* m_framebuffer;
&gt; +    bool m_textureChanged;

m_textureChanged is already defined in CanvasLayerChromium so no need to re-define it here. Please see comment above.

&gt; +
&gt; +    static unsigned m_shaderProgramId;
&gt; +};
&gt; +
&gt; +}
&gt; diff --git a/WebCore/platform/graphics/chromium/CanvasLayerChromium.h b/WebCore/platform/graphics/chromium/CanvasLayerChromium.h
&gt; index 053efffa01e142838121453c1a4b8a194b6fa4c1..d6da6ac44e9107af100e54d3ecae365562de0d2f 100644
&gt; --- a/WebCore/platform/graphics/chromium/CanvasLayerChromium.h
&gt; +++ b/WebCore/platform/graphics/chromium/CanvasLayerChromium.h
&gt; @@ -38,17 +38,13 @@
&gt;  
&gt;  namespace WebCore {
&gt;  
&gt; -class GraphicsContext3D;
&gt; -
&gt; -// A Layer containing a WebGL or accelerated 2d canvas
&gt; +// Base class for WebGL and accelerated 2d canvases.

Should description be:
&quot;Base class for _layers_ containing WebGL and accelerated 2d canvases&quot;? 

&gt;  class CanvasLayerChromium : public LayerChromium {
&gt;  public:
&gt; -    static PassRefPtr&lt;CanvasLayerChromium&gt; create(GraphicsLayerChromium* owner = 0);
&gt; -    virtual bool drawsContent() { return m_context; }
&gt; -    virtual void updateContents();
&gt; -    virtual void draw();
&gt; +    explicit CanvasLayerChromium(GraphicsLayerChromium* owner);

Shouldn&apos;t the constructor be in the private or protected section?

&gt; +    virtual ~CanvasLayerChromium();
&gt;  
&gt; -    void setContext(const GraphicsContext3D* context);
&gt; +    virtual void draw();
&gt;  
&gt;      class SharedValues {
&gt;      public:
&gt; @@ -69,21 +65,16 @@ public:
&gt;          bool m_initialized;
&gt;      };
&gt;  
&gt; -    class PrepareTextureCallback : public Noncopyable {
&gt; +
&gt; +void WebGLLayerChromium::updateContents()
&gt; +{
&gt; +    ASSERT(m_context);
&gt; +    if (m_textureChanged) {

See previous comments.

&gt; +        glBindTexture(GL_TEXTURE_2D, m_textureId);
&gt; +        // Set the min-mag filters to linear and wrap modes to GL_CLAMP_TO_EDGE
&gt; +        // to get around NPOT texture limitations of GLES.
&gt; +        glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
&gt; +        glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
&gt; +        glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE);
&gt; +        glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE);
&gt; +        m_textureChanged = false;
&gt; +    }
&gt; +    // Update the contents of the texture used by the compositor.
&gt; +    if (m_contentsDirty) {
&gt; +        m_context-&gt;prepareTexture();
&gt; +        m_contentsDirty = false;
&gt; +    }
&gt; +}
&gt; +
&gt; +void WebGLLayerChromium::setContext(const GraphicsContext3D* context)
&gt; +{
&gt; +    m_context = const_cast&lt;GraphicsContext3D*&gt;(context);
&gt; +
&gt; +    unsigned int textureId = m_context-&gt;platformTexture();

You should probably check for textureId == 0 as that indicates a failure somewhere.

&gt; +    if (textureId != m_textureId)
&gt; +        m_textureChanged = true;
&gt; +    m_textureId = textureId;
&gt; +}
&gt; +
&gt; +}
&gt; diff --git a/WebCore/platform/graphics/gpu/CanvasFramebuffer.h b/WebCore/platform/graphics/gpu/CanvasFramebuffer.h
&gt; new file mode 100644
&gt; index 0000000000000000000000000000000000000000..d52aba1cb68acbced5d34eb6348c5c890333d903
&gt; + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
&gt; + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
&gt; + */
&gt; +
&gt; +#ifndef CanvasFramebuffer_h
&gt; +#define CanvasFramebuffer_h
&gt; +
&gt; +// Manages a framebuffer to use for a 2d canvas.

move the above comment down, right before the class definition?

&gt; +
&gt; +#include &quot;IntSize.h&quot;
&gt; +
&gt; +#include &lt;wtf/Noncopyable.h&gt;
&gt; +#include &lt;wtf/OwnPtr.h&gt;
&gt; +#include &lt;wtf/PassOwnPtr.h&gt;
&gt; +
&gt; +namespace WebCore {
&gt; +
&gt; +class SharedContext3D;
&gt; +
&gt; +class CanvasFramebuffer : public Noncopyable {
&gt; +public:
&gt; +    static PassOwnPtr&lt;CanvasFramebuffer&gt; create(SharedContext3D*, const IntSize&amp;);
&gt; +    ~CanvasFramebuffer();
&gt; +
&gt; +    void bind();
&gt; diff --git a/WebCore/platform/graphics/gpu/SharedContext3D.cpp b/WebCore/platform/graphics/gpu/SharedContext3D.cpp
&gt; new file mode 100644
&gt; index 0000000000000000000000000000000000000000..3b738f01f7281392937fed5e0df257cc9cfb92f4
&gt; --- /dev/null
&gt; +
&gt; +// static
&gt; +PassRefPtr&lt;SharedContext3D&gt; SharedContext3D::create(PassOwnPtr&lt;GraphicsContext3D&gt; context)
&gt; +{
&gt; +    return adoptRef(new SharedContext3D(context));
&gt; +}
&gt; +
&gt; +SharedContext3D::SharedContext3D(PassOwnPtr&lt;GraphicsContext3D&gt; context)
&gt; +    : m_context(context)
&gt; +    , m_quadVertices(0)
&gt; +    , m_solidFillShader(SolidFillShader::create(m_context.get()))
&gt; +    , m_texShader(TexShader::create(m_context.get()))
&gt; +

Please remove necessary new-line.
&gt; +{
&gt; +}
&gt; +
&gt; +SharedContext3D::~SharedContext3D()
&gt; +{</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>272378</commentid>
    <comment_count>15</comment_count>
      <attachid>66074</attachid>
    <who name="Chris Marrin">cmarrin</who>
    <bug_when>2010-08-31 14:32:27 -0700</bug_when>
    <thetext>Comment on attachment 66074
compile fix for gtk/win/mac

&gt; WebCore/platform/graphics/gpu/CanvasFramebuffer.cpp:67
&gt; +    m_context-&gt;copyTextureToCompositor(m_offscreenColorTexture, m_offscreenParentColorTexture);

This model is wrong for EAGL (iOS). There, the model is that you are handing the FBO object to the PlatformLayer. The object you&apos;re passing is actually a RenderBuffer not a Texture, but it is still represented by an OpenGL Object handle. The model should change to hide the m_offscreenParentColorTexture in the PlatformLayer and have this call pass m_offscreenColorBuffer (renamed for clarity) and PlatformLayer.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>272381</commentid>
    <comment_count>16</comment_count>
    <who name="Chris Marrin">cmarrin</who>
    <bug_when>2010-08-31 14:35:32 -0700</bug_when>
    <thetext>(In reply to comment #15)
&gt; (From update of attachment 66074 [details])
&gt; &gt; WebCore/platform/graphics/gpu/CanvasFramebuffer.cpp:67
&gt; &gt; +    m_context-&gt;copyTextureToCompositor(m_offscreenColorTexture, m_offscreenParentColorTexture);
&gt; 
&gt; This model is wrong for EAGL (iOS). There, the model is that you are handing the FBO object to the PlatformLayer. The object you&apos;re passing is actually a RenderBuffer not a Texture, but it is still represented by an OpenGL Object handle. The model should change to hide the m_offscreenParentColorTexture in the PlatformLayer and have this call pass m_offscreenColorBuffer (renamed for clarity) and PlatformLayer.

The function would also be better named copyColorBufferToPlatformLayer() or something. 

For more on the EAGL model, it is actually a copy model. Once you hand the RenderBuffer to the Layer, that same buffer can be cleared and used again immediately. Some magic happens under the covers to adopt the current RenderBuffer by the Layer and have it replaced by a new buffer.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>272439</commentid>
    <comment_count>17</comment_count>
    <who name="James Robinson">jamesr</who>
    <bug_when>2010-08-31 15:32:29 -0700</bug_when>
    <thetext>Thanks for looking through this patch.  I&apos;ll do my best to address all the line-by-line comments.

The point you make about the FBO treatment is a valid one, Chris.  We&apos;ll also want to generalize this in order to support multisampling.  Here&apos;s what I propose to make this more general:

1.) No new functions on GraphicsContext3D
2.) CanvasFramebuffer adopts a more general interface to look something like:

create(SharedContext3D*, IntSize)
bind()
publishToPlatformLayer(PlatformLayer*)
publishToTexture(unsigned)

and not expose any specifics about what the FBO binds to.  Then implementations can bind a CanvasFramebuffer to either a color texture or a RenderBuffer and deal with the details of how to expose the rendering results to either a PlatformLayer (for compositing) or a texture (to draw the rendering results in another canvas).  The specifics of allocating a compositing target (texture, CALayer, etc) and doing the copy/blit/resolve will be handled by each platform.

Follow up incoming.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>272452</commentid>
    <comment_count>18</comment_count>
    <who name="Chris Marrin">cmarrin</who>
    <bug_when>2010-08-31 15:54:26 -0700</bug_when>
    <thetext>(In reply to comment #17)
&gt; Thanks for looking through this patch.  I&apos;ll do my best to address all the line-by-line comments.
&gt; 
&gt; The point you make about the FBO treatment is a valid one, Chris.  We&apos;ll also want to generalize this in order to support multisampling.  Here&apos;s what I propose to make this more general:
&gt; 
&gt; 1.) No new functions on GraphicsContext3D
&gt; 2.) CanvasFramebuffer adopts a more general interface to look something like:
&gt; 
&gt; create(SharedContext3D*, IntSize)
&gt; bind()
&gt; publishToPlatformLayer(PlatformLayer*)
&gt; publishToTexture(unsigned)
&gt; 
&gt; and not expose any specifics about what the FBO binds to.  Then implementations can bind a CanvasFramebuffer to either a color texture or a RenderBuffer and deal with the details of how to expose the rendering results to either a PlatformLayer (for compositing) or a texture (to draw the rendering results in another canvas).  The specifics of allocating a compositing target (texture, CALayer, etc) and doing the copy/blit/resolve will be handled by each platform.

This looks pretty good. Since CanvasFrameBuffer is intimately tied to SharedContext3D, perhaps its ctor should not be public and there should be a createFramebuffer method on SharedContext? That would make the relationship more clear I think. I like the model of the context vending the buffer you&apos;ll be drawing into.

How are you creating the PlatformLayer? Doesn&apos;t the SharedContext need to vend that as well? Did I miss the call that does that?

Also, I&apos;m not sure it&apos;s appropriate to call this a Framebuffer. It&apos;s really an FBO, plus Renderbuffers, plus context info. So maybe calling it a DrawingBuffer would be more appropriate. That&apos;s the term we use in the WebGL spec and it really refers to the combination of all these things. Also, using the term &quot;Canvas&quot; here is misleading. this is more general that just Canvas.

And while I&apos;m being the pedantic naming police, SharedContext3D would be more accurately named SharedGraphicsContext3D.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>273038</commentid>
    <comment_count>19</comment_count>
    <who name="James Robinson">jamesr</who>
    <bug_when>2010-09-01 14:44:36 -0700</bug_when>
    <thetext>(In reply to comment #12)
&gt; &gt; WebCore/html/canvas/CanvasRenderingContext2D.cpp:1283
&gt; &gt;      sourceCanvas-&gt;makeRenderingResultsAvailable();
&gt; Are you sure it isn&apos;t necessary to do something here?  Obviously, reading back to the buffer isn&apos;t right in this case, but we need some way to make sure that the sourceCanvas is up-to-date (e.g., last software draw is uploaded to framebuffer) before we draw.
&gt; 
&gt; And actually, I think this will break the software path, since it needs to make this call.  If the GPU truly doesn&apos;t need this, it should probably be doing an !isAccelerated() check instead.
&gt; 
&gt; (Reading on a bit further, it seems you&apos;re doing the GPU equivalent of this call in drawImageBuffer().  Fair enough, although it would be kind of cool to unify them in the same makeRenderingResultsAvailable() function.  And you&apos;ll still need to fix the software path).

I&apos;ll make this change separately to keep things simpler.

&gt; &gt; WebCore/platform/graphics/chromium/GLES2Canvas.cpp:261
&gt; &gt; +    return m_context-&gt;createTexture(ptr, format, width, height);
&gt; OT:  Now that uploaded textures are shared between all contexts, I think we could actually get rid of the hash table entirely, and put a RefPtr&lt;Texture&gt; in the NativeImageSkia 
itself, if we wanted to.  This should help tie its lifetime to that of the image cache.

No can do - you can have an arbitrary number of compositors in a process each with its own SharedContext3D.  It&apos;s not just one per process, it&apos;s one per compositor.

&gt; &gt; WebCore/platform/graphics/skia/PlatformContextSkia.cpp:791
&gt; &gt; +        m_uploadTexture = context-&gt;createTexture(0, Texture::BGRA8, bitmap.width(), bitmap.height());
&gt; Hmm.. hashing on the NULL ptr (besides making it &quot;magic&quot; and fragile, in case anyone else tries the same trick) will share a single upload texture for all canvases.  This means we might hang onto an 8K texture long after a big canvas is gone, and we only need to upload little 150x150 canvases, e.g.

A NULL pointer means &quot;do not cache&quot; - look at the changes in createTexture().  It is slightly magic but we need a way to create and upload textures without any caching at all and this seemed as good as any.

&gt; &gt; WebCore/platform/graphics/skia/PlatformContextSkia.h:184
&gt; &gt; +    void setSharedContext3D(SharedContext3D*, CanvasFramebuffer*, const IntSize&amp;);
&gt; I&apos;d rather the CanvasFramebuffer be owned by the GLES2Canvas, if possible.  But we can talk about that later.

Maybe later :)

Everything else fixed in my soon to be posted patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>273065</commentid>
    <comment_count>20</comment_count>
    <who name="James Robinson">jamesr</who>
    <bug_when>2010-09-01 15:31:36 -0700</bug_when>
    <thetext>&gt; &gt; &gt; WebCore/platform/graphics/skia/PlatformContextSkia.cpp:791
&gt; &gt; &gt; +        m_uploadTexture = context-&gt;createTexture(0, Texture::BGRA8, bitmap.width(), bitmap.height());
&gt; &gt; Hmm.. hashing on the NULL ptr (besides making it &quot;magic&quot; and fragile, in case anyone else tries the same trick) will share a single upload texture for all canvases.  This means we might hang onto an 8K texture long after a big canvas is gone, and we only need to upload little 150x150 canvases, e.g.
&gt; 
&gt; A NULL pointer means &quot;do not cache&quot; - look at the changes in createTexture().  It is slightly magic but we need a way to create and upload textures without any caching at all and this seemed as good as any.

Actually, this idea sucked.  I&apos;ll add another API for creating a non-cached texture.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>273083</commentid>
    <comment_count>21</comment_count>
      <attachid>66296</attachid>
    <who name="James Robinson">jamesr</who>
    <bug_when>2010-09-01 16:03:29 -0700</bug_when>
    <thetext>Created attachment 66296
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>273084</commentid>
    <comment_count>22</comment_count>
    <who name="James Robinson">jamesr</who>
    <bug_when>2010-09-01 16:03:50 -0700</bug_when>
    <thetext>Significant changes since previous patch:

rename CanvasFramebuffer to DrawingBuffer
change the interface to simply:
 bind();
 publishToPlatformLayer(PlatformLayer*);

where publishToPlatformLayer() is implemented in a platform-dependent way to do the right thing.

This class is also now RefCounted so that the CanvasRenderingContext2D and the compositing layer can keep references to one.  This is needed because the DrawingBuffer on a CanvasRenderingContext2D can be reset at any time and the compositing layer tree is lazily updated via the style recalc mechanism.  I removed the ability to publish to a texture for now, that will be in a follow-up.

Fix PassRefPtr&lt;&gt; for Texture and SharedContext3D in multiple places.  Turns out I didn&apos;t quite know what PRP was for, but I think I do now :)

Switch shader order around in SharedContext3D and GLES2Canvas to match the Shader interface.

Cleaned up the CanvasLayerChromium hierarchy a bit.  m_textureChanged and m_textureId now are protected members of the base class and are treated in the same way.  I didn&apos;t change the tex parameter setting for the WebGL side, although I agree that&apos;s a good cleanup to do someday.  In Canvas2DLayerChromium the texture is actually owned by the compositing layer.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>273089</commentid>
    <comment_count>23</comment_count>
    <who name="James Robinson">jamesr</who>
    <bug_when>2010-09-01 16:08:13 -0700</bug_when>
    <thetext>(In reply to comment #18)
&gt; (In reply to comment #17)
&gt; &gt; Thanks for looking through this patch.  I&apos;ll do my best to address all the line-by-line comments.
&gt; &gt; 
&gt; &gt; The point you make about the FBO treatment is a valid one, Chris.  We&apos;ll also want to generalize this in order to support multisampling.  Here&apos;s what I propose to make this more general:
&gt; &gt; 
&gt; &gt; 1.) No new functions on GraphicsContext3D
&gt; &gt; 2.) CanvasFramebuffer adopts a more general interface to look something like:
&gt; &gt; 
&gt; &gt; create(SharedContext3D*, IntSize)
&gt; &gt; bind()
&gt; &gt; publishToPlatformLayer(PlatformLayer*)
&gt; &gt; publishToTexture(unsigned)
&gt; &gt; 
&gt; &gt; and not expose any specifics about what the FBO binds to.  Then implementations can bind a CanvasFramebuffer to either a color texture or a RenderBuffer and deal with the details of how to expose the rendering results to either a PlatformLayer (for compositing) or a texture (to draw the rendering results in another canvas).  The specifics of allocating a compositing target (texture, CALayer, etc) and doing the copy/blit/resolve will be handled by each platform.
&gt; 
&gt; This looks pretty good. Since CanvasFrameBuffer is intimately tied to SharedContext3D, perhaps its ctor should not be public and there should be a createFramebuffer method on SharedContext? That would make the relationship more clear I think. I like the model of the context vending the buffer you&apos;ll be drawing into.
&gt; 
&gt; How are you creating the PlatformLayer? Doesn&apos;t the SharedContext need to vend that as well? Did I miss the call that does that?

The PlatformLayer is created by the platform-specific implementation of GraphicsLayer::setContentsToCanvas2D().  It&apos;s made aware of the DrawingBuffer at creation time and whenever the compositing layer tree is regenerated.  PlatformLayer creation and initialization is inherently platform-specific (as the name of the type would imply).

I left the DrawingBuffer::create() as a static function on DrawingBuffer so that it&apos;s easier to find the implementation.  There will eventually be a number of platform-dependent implementations of this create and I think it&apos;d be better if the various DrawingBufferXXX.cpp files contained only DrawingBuffer:: functions instead of having a function declared on SharedContext3D.

&gt; 
&gt; Also, I&apos;m not sure it&apos;s appropriate to call this a Framebuffer. It&apos;s really an FBO, plus Renderbuffers, plus context info. So maybe calling it a DrawingBuffer would be more appropriate. That&apos;s the term we use in the WebGL spec and it really refers to the combination of all these things. Also, using the term &quot;Canvas&quot; here is misleading. this is more general that just Canvas.

I like DrawingBuffer a lot, the latest patch uses this name.
&gt; 
&gt; And while I&apos;m being the pedantic naming police, SharedContext3D would be more accurately named SharedGraphicsContext3D.

That would work, but I don&apos;t think it adds any extra information since there&apos;s only one possible sort of &quot;...Context3D&quot; in webkit.  I&apos;ve thus left it as SharedContext3D.  I can change it if you feel strongly but it&apos;s a lotta letters to type :).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>273131</commentid>
    <comment_count>24</comment_count>
    <who name="Chris Marrin">cmarrin</who>
    <bug_when>2010-09-01 17:41:34 -0700</bug_when>
    <thetext>(In reply to comment #23)
&gt;...
&gt; &gt; How are you creating the PlatformLayer? Doesn&apos;t the SharedContext need to vend that as well? Did I miss the call that does that?
&gt; 
&gt; The PlatformLayer is created by the platform-specific implementation of GraphicsLayer::setContentsToCanvas2D().  It&apos;s made aware of the DrawingBuffer at creation time and whenever the compositing layer tree is regenerated.  PlatformLayer creation and initialization is inherently platform-specific (as the name of the type would imply).

I see that. That seems less than ideal though because it is very specific to Canvas 2D. It also has different ownership that WebGL, where the GraphicsContext3D owns the PlatformLayer. Seems like it would be better if SharedContext3D just had a factory for PlatformLayers that you could then send along to GraphicsLayer::setContentsToCanvas(). I don&apos;t see any logic in setContentsToCanvas2D that make it necessary for GraphicsLayer to know it&apos;s a 2D Canvas, or have any knowledge at all about DrawingBuffer. Committing the rendered image to the PlatformLayer will still require a call to publishToPlatformLayer() and that all happens up in the Canvas logic.

I think the closer we can keep this to the WebGL model the better. We of course need to deal with the optimization of a single shared context, but that can all be done up in the SharedContext3D like you have in your latest patch (which looks good).

&gt; 
&gt; I left the DrawingBuffer::create() as a static function on DrawingBuffer so that it&apos;s easier to find the implementation.  There will eventually be a number of platform-dependent implementations of this create and I think it&apos;d be better if the various DrawingBufferXXX.cpp files contained only DrawingBuffer:: functions instead of having a function declared on SharedContext3D.
&gt; 

Fair enough...

&gt; &gt; 
&gt; &gt; Also, I&apos;m not sure it&apos;s appropriate to call this a Framebuffer. It&apos;s really an FBO, plus Renderbuffers, plus context info. So maybe calling it a DrawingBuffer would be more appropriate. That&apos;s the term we use in the WebGL spec and it really refers to the combination of all these things. Also, using the term &quot;Canvas&quot; here is misleading. this is more general that just Canvas.
&gt; 
&gt; I like DrawingBuffer a lot, the latest patch uses this name.

Cool.

&gt; &gt; 
&gt; &gt; And while I&apos;m being the pedantic naming police, SharedContext3D would be more accurately named SharedGraphicsContext3D.
&gt; 
&gt; That would work, but I don&apos;t think it adds any extra information since there&apos;s only one possible sort of &quot;...Context3D&quot; in webkit.  I&apos;ve thus left it as SharedContext3D.  I can change it if you feel strongly but it&apos;s a lotta letters to type :).

Yeah, I thought about that. But when I typed it, it didn&apos;t look that bad. I&apos;m concerned about other uses of the term &quot;context&quot;, which is pretty generic. It&apos;s only 8 extra letters and one is an &apos;i&apos; which is really narrow :-)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>273215</commentid>
    <comment_count>25</comment_count>
      <attachid>66296</attachid>
    <who name="Stephen White">senorblanco</who>
    <bug_when>2010-09-01 22:04:17 -0700</bug_when>
    <thetext>Comment on attachment 66296
Patch

Other than the mac chrome issue (GraphicsContext.h), looks OK to me.

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

&gt; WebCore/html/canvas/CanvasRenderingContext2D.cpp:172
&gt; +            m_drawingBuffer = DrawingBuffer::create(m_context3D.get(), IntSize(canvas()-&gt;width(), canvas()-&gt;height()));
This looks like it recreates the FBO etc on every reset.  Could be costly.  Perhaps we should be trying to reuse DrawingBuffer around if the context and size is the same.

&gt; WebCore/platform/graphics/GraphicsContext.h:416
&gt; +#if PLATFORM(SKIA)
I&apos;m pretty sure that using #if PLATFORM(SKIA) here and #if ENABLE(ACCELERATED_2D_CANVAS) in CanvasRenderingContext2D is going to cause problems on Mac Chromium, since it has the latter but not the former.

This should either be ENABLE(ACCELERATED_2D_CANVAS) here, or (my preference) it should have a stub implementation for other ports as it did before.

&gt; WebCore/platform/graphics/chromium/DrawingBufferChromium.cpp:95
&gt; +    glCopyTextureToParentTexture(m_internal-&gt;offscreenColorTexture, parentTexture);
Hmm.. this is weird.  I guess I should&apos;ve paid better attention to your GPU process CL.  Anyway, we should probably hide this function behind a google GLES2 extension at some point, if it isn&apos;t already.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>273224</commentid>
    <comment_count>26</comment_count>
      <attachid>66296</attachid>
    <who name="James Robinson">jamesr</who>
    <bug_when>2010-09-01 22:31:58 -0700</bug_when>
    <thetext>Comment on attachment 66296
Patch

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

&gt; WebCore/html/canvas/CanvasRenderingContext2D.cpp:172
&gt; +            m_drawingBuffer = DrawingBuffer::create(m_context3D.get(), IntSize(canvas()-&gt;width(), canvas()-&gt;height()));
It does, same as the software drawing buffer.  We can improve this, but I wanted to keep things simple at first.

&gt; WebCore/platform/graphics/GraphicsContext.h:416
&gt; +#if PLATFORM(SKIA)
Good catch - I&apos;ll add the stubs back.

&gt; WebCore/platform/graphics/chromium/DrawingBufferChromium.cpp:95
&gt; +    glCopyTextureToParentTexture(m_internal-&gt;offscreenColorTexture, parentTexture);
It is.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>273397</commentid>
    <comment_count>27</comment_count>
      <attachid>66296</attachid>
    <who name="Chris Marrin">cmarrin</who>
    <bug_when>2010-09-02 08:26:05 -0700</bug_when>
    <thetext>Comment on attachment 66296
Patch

I&apos;ve given this an r- until we resolve the issue I raised in https://bugs.webkit.org/show_bug.cgi?id=44926#c24</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>273524</commentid>
    <comment_count>28</comment_count>
    <who name="James Robinson">jamesr</who>
    <bug_when>2010-09-02 13:15:20 -0700</bug_when>
    <thetext>(In reply to comment #24)
&gt; (In reply to comment #23)
&gt; &gt;...
&gt; &gt; &gt; How are you creating the PlatformLayer? Doesn&apos;t the SharedContext need to vend that as well? Did I miss the call that does that?
&gt; &gt; 
&gt; &gt; The PlatformLayer is created by the platform-specific implementation of GraphicsLayer::setContentsToCanvas2D().  It&apos;s made aware of the DrawingBuffer at creation time and whenever the compositing layer tree is regenerated.  PlatformLayer creation and initialization is inherently platform-specific (as the name of the type would imply).
&gt; 
&gt; I see that. That seems less than ideal though because it is very specific to Canvas 2D. It also has different ownership that WebGL, where the GraphicsContext3D owns the PlatformLayer. Seems like it would be better if SharedContext3D just had a factory for PlatformLayers that you could then send along to GraphicsLayer::setContentsToCanvas(). I don&apos;t see any logic in setContentsToCanvas2D that make it necessary for GraphicsLayer to know it&apos;s a 2D Canvas, or have any knowledge at all about DrawingBuffer. Committing the rendered image to the PlatformLayer will still require a call to publishToPlatformLayer() and that all happens up in the Canvas logic.
&gt; 
&gt; I think the closer we can keep this to the WebGL model the better. We of course need to deal with the optimization of a single shared context, but that can all be done up in the SharedContext3D like you have in your latest patch (which looks good).
&gt; 

I think this could work.  I don&apos;t think it would be an improvement, however.  The WebGL model is pretty inflexible since it ties up the compositing logic for the element with the behavior of the element.  I think it&apos;s cleaner for the canvas-specific logic (i.e. the SharedContext3D, ContextRenderingContext2D, etc) to be concerned with taking commands from javascript and producing rendering results in a DrawingBuffer and not worry about compositing at all.  When the layer is composited then the compositor only needs to know where the rendering results are, it doesn&apos;t need to be aware of the rest of the canvas stack.  The DrawingBuffer has to be aware of both, of course, so that it can take the rendered results and put them in a layer.

One concrete problem with the WebGL model is that since the GraphicsContext3D owns the PlatformLayer directly, the compositor can&apos;t decide when to create or destroy the PlatformLayer itself.  If a page is loaded in a background tab then it would be really handy for the compositor to ditch all the platformlayers and their associated backing stores and just let each canvas continue rendering to a DrawingBuffer.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>273528</commentid>
    <comment_count>29</comment_count>
      <attachid>66404</attachid>
    <who name="James Robinson">jamesr</who>
    <bug_when>2010-09-02 13:32:06 -0700</bug_when>
    <thetext>Created attachment 66404
add GraphicsContext stubs instead of #if PLATFORM()ing the function declarations</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>273586</commentid>
    <comment_count>30</comment_count>
    <who name="Chris Marrin">cmarrin</who>
    <bug_when>2010-09-02 14:46:07 -0700</bug_when>
    <thetext>(In reply to comment #28)
&gt; ...
&gt; &gt; I think the closer we can keep this to the WebGL model the better. We of course need to deal with the optimization of a single shared context, but that can all be done up in the SharedContext3D like you have in your latest patch (which looks good).
&gt; &gt; 
&gt; 
&gt; I think this could work.  I don&apos;t think it would be an improvement, however.  The WebGL model is pretty inflexible since it ties up the compositing logic for the element with the behavior of the element.  I think it&apos;s cleaner for the canvas-specific logic (i.e. the SharedContext3D, ContextRenderingContext2D, etc) to be concerned with taking commands from javascript and producing rendering results in a DrawingBuffer and not worry about compositing at all.  When the layer is composited then the compositor only needs to know where the rendering results are, it doesn&apos;t need to be aware of the rest of the canvas stack.  The DrawingBuffer has to be aware of both, of course, so that it can take the rendered results and put them in a layer.
&gt; 
&gt; One concrete problem with the WebGL model is that since the GraphicsContext3D owns the PlatformLayer directly, the compositor can&apos;t decide when to create or destroy the PlatformLayer itself.  If a page is loaded in a background tab then it would be really handy for the compositor to ditch all the platformlayers and their associated backing stores and just let each canvas continue rendering to a DrawingBuffer.

But if you had such a capability then the GraphicsLayer would have to know about more classes, GraphicsContext3D in the case of WebGL, and DrawingBuffer in the case of accelerated Canvas 2D. I don&apos;t think it&apos;s valid to say that giving GraphicsLayer control of the platform layer is better because you conserve resources. The PlatformLayer might not be the expensive part. It might be somewhere in the GraphicsContext. If we wanted to conserve resources it would be best done with a &quot;you&apos;re going into the background, please conserve your resources&quot; call to the various GraphicsContext3D and SharedContexts.

Your implementation has already grown the GraphicsLayer call with the setContentsToCanvas2D method. And it would have to grow it again for each new accelerated content type, adding another context object that GraphicsLayer needs to know about, too.

The current model is the way it is because it&apos;s the renderer of the content (e.g., GraphicsContext3D, DrawingBuffer) that knows what the requirements for the PlatformLayer are, so it should be that renderer where the PlatformLayer is vended. This model comes from the implementation of accelerated video rendering. The movie player vends a PlatformLayer that it has created specifically for rendering movies into. I really think we should stick with that model.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>273682</commentid>
    <comment_count>31</comment_count>
    <who name="James Robinson">jamesr</who>
    <bug_when>2010-09-02 17:10:22 -0700</bug_when>
    <thetext>For the record, I originally wrote this patch following WebGL&apos;s method of PlatformLayers.  It quickly got disgusting, which led to this approach.

In WebGL, the WebGLRenderingContext has a 1:1 relationship with a GraphicsContext3D.  Each GraphicsContext3D holds a reference to one PlatformLayer.  On the mac PlatformLayer is a typedef for CALayer.  The GraphicsContext3D holds a RetainPtr&lt;WebGLLayer&gt; where WebGLLayer is a subclass (indirectly) of CALayer.  The layer is eagerly constructed and held for the lifetime of the GC3D.  It&apos;s nearly the same for Chromium, except that the pointer is a RefPtr&lt;LayerChromium&gt; held on GraphicsContext3DInternal and it is lazily created on the first access rather than eagerly.  When WebGL content is composited RenderLayerBacking::updateGraphicsLayerConfiguration() grabs a pointer to the PlatformLayer from the GraphicsContext3D and passes it to GraphicsLayer::setLayerContentsTo..().  Then the GraphicsLayer implementation grabs another reference to the layer (on mac by storing it in a RetainPtr&lt;CALayer&gt;, in chromium by storing it in a RefPtr&lt;LayerChromium).  The reason for the ref counting dance is that the lifetime of the WebGL canvas and the compositing layer are inherently decoupled.  The compositing layer owning the contents layer is generally created after the WebGL canvas and may be destroyed before or after the canvas.  Thus both have to keep a reference to the PlatformLayer.

For 2d canvas, we could (and I initially did) do a similar sort of dance where both the canvas logic and the compositor maintain a reference to the PlatformLayer.  The question is then who holds the reference outside of the compositor.  This can&apos;t be retained by the SharedGraphicsContext3D, because there is no 1:1 mapping between a SharedGraphicsContext3D and a canvas.  The PlatformLayer could be held by the CanvasRenderingContext2D, but that means adding a bunch of #if PLATFORM() gunk to CanvasRenderingContext2D in order to manage its lifetime.  Conceptually the CanvasRenderingContext2D should not need to know anything directly about compositing anyway.  The other possibility is to hold the PlatformLayer on the DrawingBuffer.  This ends up being strange as well since the DrawingBuffer can be reset by the page, so it doesn&apos;t live for as long as a CanvasRenderingContext2D or the compositing layer.

What I decided on here is having the DrawingBuffer be refcounted by the CanvasRenderingContext2D and the compositing layer and have the PlatformLayer management done completely on the compositor side.  This is analogous to how Image and contents layers are managed currently.  I think it&apos;s much cleaner to have a reference counted DrawingBuffer maintained on both sides since a DrawingBuffer is a completely cross-platform concept, unlike a PlatformLayer.  The other advantage is that we only have to create PlatformLayers when actually compositing a canvas.  If this followed the WebGL/mac pattern, we would have to create a PlatformLayer for canvases that aren&apos;t even in the page.  It&apos;s pretty common to create many offscreen 2d canvases to use as intermediate results (although I imagine this is less common in WebGL).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>273685</commentid>
    <comment_count>32</comment_count>
      <attachid>66436</attachid>
    <who name="James Robinson">jamesr</who>
    <bug_when>2010-09-02 17:17:14 -0700</bug_when>
    <thetext>Created attachment 66436
rename SharedContext3D to SharedGraphicsContext3D</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>273687</commentid>
    <comment_count>33</comment_count>
    <who name="James Robinson">jamesr</who>
    <bug_when>2010-09-02 17:19:11 -0700</bug_when>
    <thetext>I believe the latest patch addresses all comments raised so far.  Mind taking another look?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>273750</commentid>
    <comment_count>34</comment_count>
      <attachid>66459</attachid>
    <who name="James Robinson">jamesr</who>
    <bug_when>2010-09-02 19:33:28 -0700</bug_when>
    <thetext>Created attachment 66459
other PlatformLayer ownership model</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>273751</commentid>
    <comment_count>35</comment_count>
    <who name="James Robinson">jamesr</who>
    <bug_when>2010-09-02 19:34:41 -0700</bug_when>
    <thetext>I&apos;ve attached a patch that implements the PlatformLayer ownership model you were suggesting, Chris.  Take your pick (and if you r+ one r- the other, please).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>273756</commentid>
    <comment_count>36</comment_count>
      <attachid>66461</attachid>
    <who name="James Robinson">jamesr</who>
    <bug_when>2010-09-02 19:47:30 -0700</bug_when>
    <thetext>Created attachment 66461
other PlatformLayer ownership model</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>273899</commentid>
    <comment_count>37</comment_count>
      <attachid>66461</attachid>
    <who name="Chris Marrin">cmarrin</who>
    <bug_when>2010-09-03 05:57:38 -0700</bug_when>
    <thetext>Comment on attachment 66461
other PlatformLayer ownership model

This looks great. Thanks for making the change.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>274069</commentid>
    <comment_count>38</comment_count>
    <who name="James Robinson">jamesr</who>
    <bug_when>2010-09-03 11:39:16 -0700</bug_when>
    <thetext>Committed r66746: &lt;http://trac.webkit.org/changeset/66746&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>274115</commentid>
    <comment_count>39</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-09-03 12:19:58 -0700</bug_when>
    <thetext>http://trac.webkit.org/changeset/66746 might have broken Chromium Win Release</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>274158</commentid>
    <comment_count>40</comment_count>
      <attachid>66461</attachid>
    <who name="James Robinson">jamesr</who>
    <bug_when>2010-09-03 13:51:28 -0700</bug_when>
    <thetext>Comment on attachment 66461
other PlatformLayer ownership model

Committed r66746: &lt;http://trac.webkit.org/changeset/66746&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>66011</attachid>
            <date>2010-08-30 21:10:48 -0700</date>
            <delta_ts>2010-08-30 21:50:51 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-44926-20100830211046.patch</filename>
            <type>text/plain</type>
            <size>110420</size>
            <attacher name="James Robinson">jamesr</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ2hhbmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXgg
ZGRjZDUyZTk2NzZiYTY2YmIwM2M0MTBhZmZmNTllMjI2MWY3ZDgzMC4uOTQxNDdhNTRiODEyMzIz
MWExYWY3NDI2NzAzMWUyNmFkMTc0YjA4ZiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9DaGFuZ2VMb2cK
KysrIGIvV2ViQ29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxNzMgQEAKKzIwMTAtMDgtMzAgIEph
bWVzIFJvYmluc29uICA8amFtZXNyQGNocm9taXVtLm9yZz4KKworICAgICAgICBSZXZpZXdlZCBi
eSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBNdWx0aXBsZSBhY2NlbGVyYXRlZCAyRCBjYW52
YXNlcyBzaG91bGQgYmUgYWJsZSB0byB1c2UgdGhlIHNhbWUgR3JhcGhpY3NDb250ZXh0M0QKKyAg
ICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTQ0OTI2CisKKyAg
ICAgICAgVGhpcyBhbGxvd3MgbWFueSBhY2NlbGVyYXRlZCAyZCBjYW52YXNlcyB0byByZW5kZXIg
dXNpbmcgYSBzaW5nbGUgdW5kZXJseWluZyBHcmFwaGljc0NvbnRleHQzRC4KKyAgICAgICAgSXQg
aW50cm9kdWNlcyBhIG5ldyBjbGFzcyBTaGFyZWRDb250ZXh0M0QgdGhhdCBtYW5hZ2VzIHNldmVy
YWwgY2FsbGVycy4gIFRoaXMgY2xhc3MgY291bGQKKyAgICAgICAgYWxzbyBjYWNoZSB0aGUgY3Vy
cmVudCBzdGF0ZSB0byBhdm9pZCBpc3N1aW5nIHJlZHVuZGFudCBjYWxscywgYWx0aG91Z2ggaW4g
dGhpcyBmaXJzdCBjdXQgaXQgZG9lc24ndC4KKyAgICAgICAgVGhlIFNoYXJlZENvbnRleHQzRCBp
cyBwcm92aWRlZCB0aHJvdWdoIHRoZSBDaHJvbWVDbGllbnQgc28gdGhhdCBpdHMgbGlmZXRpbWUg
Y2FuIGJlIHRpZWQgdG8gdGhhdAorICAgICAgICBvZiB0aGUgcGxhdGZvcm0tc3BlY2lmaWMgY29t
cG9zaXRvciBpbmZyYXN0cnVjdHVyZS4KKworICAgICAgICBBY2NlbGVyYXRlZCAyZCBjYW52YXNl
cyBtYWludGFpbiBhIHJlZmVyZW5jZSB0byBhIFNoYXJlZENvbnRleHQzRCBhbmQgaGF2ZSBvd25l
cnNoaXAgb2YgYSBDYW52YXNGcmFtZWJ1ZmZlciwKKyAgICAgICAgd2hpY2ggcmVwcmVzZW50cyB0
aGUgY2FudmFzJ3MgcmVuZGVyaW5nIHRhcmdldC4gIFRoZSBjb21wb3NpdGluZyBsYXllciBmb3Ig
YW4gYWNjZWxlcmF0ZWQgMmQgY2FudmFzIGlzCisgICAgICAgIGF3YXJlIG9ubHkgb2YgdGhlIGNh
bnZhcydzIENhbnZhc0ZyYW1lYnVmZmVyLiAgVGhpcyBtZWFucyB0aGF0IFdlYkdMIGFuZCAyZCBj
YW52YXNlcyBhcmUgbm8gbG9uZ2VyIHRyZWF0ZWQKKyAgICAgICAgYXMgdGhlIHNhbWUgdGltZSBv
ZiBsYXllciBieSB0aGUgY29tcG9zaXRvci4KKworICAgICAgICBDb3ZlcmVkIGJ5IGV4aXN0aW5n
IGNhbnZhcyB0ZXN0cy4KKworICAgICAgICBJJ3ZlIGRpdmlkZWQgdGhlIHBlciBmaWxlL2Z1bmN0
aW9uIGNoYW5nZXMgaW50byB0aHJlZSBzZWN0aW9uczoKKyAgICAgICAgLSBQbGF0Zm9ybS1pbmRl
cGVuZGVudCBhcHBsaWNhdGlvbiBsb2dpYyBvdXRzaWRlIFdlYkNvcmUvcGxhdGZvcm0KKyAgICAg
ICAgLSBQbGF0Zm9ybS1pbmRlcGVuZGVudCBpbmZyYXN0cnVjdHVyZSBpbiBXZWJDb3JlL3BsYXRm
b3JtCisgICAgICAgIC0gUGxhdGZvcm0tc3BlY2lmaWMgY2hhbmdlcworCisgICAgICAgICogaHRt
bC9jYW52YXMvQ2FudmFzUmVuZGVyaW5nQ29udGV4dC5jcHA6CisgICAgICAgICogaHRtbC9jYW52
YXMvQ2FudmFzUmVuZGVyaW5nQ29udGV4dC5oOgorICAgICAgICAoV2ViQ29yZTo6Q2FudmFzUmVu
ZGVyaW5nQ29udGV4dDo6cGFpbnRzSW50b0NhbnZhc0J1ZmZlcik6CisgICAgICAgICogaHRtbC9j
YW52YXMvQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJELmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNh
bnZhc1JlbmRlcmluZ0NvbnRleHQyRDo6Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJEKToKKyAgICAg
ICAgKFdlYkNvcmU6OkNhbnZhc1JlbmRlcmluZ0NvbnRleHQyRDo6cGFpbnRzSW50b0NhbnZhc0J1
ZmZlcik6CisgICAgICAgIChXZWJDb3JlOjpDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ6OnJlc2V0
KToKKyAgICAgICAgKFdlYkNvcmU6OkNhbnZhc1JlbmRlcmluZ0NvbnRleHQyRDo6ZHJhd0ltYWdl
KToKKyAgICAgICAgKFdlYkNvcmU6OkNhbnZhc1JlbmRlcmluZ0NvbnRleHQyRDo6ZGlkRHJhdyk6
CisgICAgICAgICogaHRtbC9jYW52YXMvQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJELmg6CisgICAg
ICAgIChXZWJDb3JlOjpDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ6OmZyYW1lYnVmZmVyKToKKyAg
ICAgICAgKiBodG1sL2NhbnZhcy9XZWJHTFJlbmRlcmluZ0NvbnRleHQuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0OjpwYWludHNJbnRvQ2FudmFzQnVmZmVyKToK
KyAgICAgICAgKiBodG1sL2NhbnZhcy9XZWJHTFJlbmRlcmluZ0NvbnRleHQuaDoKKyAgICAgICAg
KFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6Z3JhcGhpY3NDb250ZXh0M0QpOgorICAg
ICAgICAqIGxvYWRlci9FbXB0eUNsaWVudHMuaDoKKyAgICAgICAgKFdlYkNvcmU6OkVtcHR5Q2hy
b21lQ2xpZW50OjphdHRhY2hSb290R3JhcGhpY3NMYXllcik6CisgICAgICAgIChXZWJDb3JlOjpF
bXB0eUNocm9tZUNsaWVudDo6c2V0TmVlZHNPbmVTaG90RHJhd2luZ1N5bmNocm9uaXphdGlvbik6
CisgICAgICAgIChXZWJDb3JlOjpFbXB0eUNocm9tZUNsaWVudDo6c2NoZWR1bGVDb21wb3NpdGlu
Z0xheWVyU3luYyk6CisgICAgICAgIChXZWJDb3JlOjpFbXB0eUNocm9tZUNsaWVudDo6Z2V0U2hh
cmVkQ29udGV4dDNEKToKKyAgICAgICAgKiBwYWdlL0Nocm9tZUNsaWVudC5oOgorICAgICAgICAq
IHJlbmRlcmluZy9SZW5kZXJMYXllckJhY2tpbmcuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVu
ZGVyTGF5ZXJCYWNraW5nOjp1cGRhdGVHcmFwaGljc0xheWVyQ29uZmlndXJhdGlvbik6CisgICAg
ICAgICAgQ3Jvc3MtcGxhdGZvcm0gaW5mcmFzdHJ1Y3R1cmUgaW4gV2ViQ29yZS9wbGF0Zm9ybToK
KyAgICAgICAgKiBXZWJDb3JlLmd5cGk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvR3Jh
cGhpY3NDb250ZXh0Lmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250
ZXh0M0QuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0xheWVyLmg6Cisg
ICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0xheWVyOjpzZXRDb250ZW50c1RvV2ViR0wpOgorICAg
ICAgICAoV2ViQ29yZTo6R3JhcGhpY3NMYXllcjo6c2V0Q29udGVudHNUb0NhbnZhczJEKToKKyAg
ICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9ncHUvQ2FudmFzRnJhbWVidWZmZXIuY3BwOiBBZGRl
ZC4KKyAgICAgICAgKFdlYkNvcmU6OkNhbnZhc0ZyYW1lYnVmZmVyOjpDYW52YXNGcmFtZWJ1ZmZl
cik6CisgICAgICAgIChXZWJDb3JlOjpDYW52YXNGcmFtZWJ1ZmZlcjo6fkNhbnZhc0ZyYW1lYnVm
ZmVyKToKKyAgICAgICAgKFdlYkNvcmU6OkNhbnZhc0ZyYW1lYnVmZmVyOjpiaW5kKToKKyAgICAg
ICAgKFdlYkNvcmU6OkNhbnZhc0ZyYW1lYnVmZmVyOjpzd2FwQnVmZmVycyk6CisgICAgICAgIChX
ZWJDb3JlOjpDYW52YXNGcmFtZWJ1ZmZlcjo6c2V0V2lsbFN3YXBCdWZmZXJzQ2FsbGJhY2spOgor
ICAgICAgICAoV2ViQ29yZTo6Q2FudmFzRnJhbWVidWZmZXI6OmNyZWF0ZSk6CisgICAgICAgICog
cGxhdGZvcm0vZ3JhcGhpY3MvZ3B1L0NhbnZhc0ZyYW1lYnVmZmVyLmg6IEFkZGVkLgorICAgICAg
ICAoV2ViQ29yZTo6Q2FudmFzRnJhbWVidWZmZXI6OnRleHR1cmVJZEZvckNvbXBvc2l0b3IpOgor
ICAgICAgICAoV2ViQ29yZTo6Q2FudmFzRnJhbWVidWZmZXI6OnRleHR1cmVJZEZvckNhbnZhcyk6
CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZ3B1L1NoYXJlZENvbnRleHQzRC5jcHA6IEFk
ZGVkLgorICAgICAgICAoV2ViQ29yZTo6YWZmaW5lVG8zeDMpOgorICAgICAgICAoV2ViQ29yZTo6
U2hhcmVkQ29udGV4dDNEOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6U2hhcmVkQ29udGV4
dDNEOjpTaGFyZWRDb250ZXh0M0QpOgorICAgICAgICAoV2ViQ29yZTo6U2hhcmVkQ29udGV4dDNE
Ojp+U2hhcmVkQ29udGV4dDNEKToKKyAgICAgICAgKFdlYkNvcmU6OlNoYXJlZENvbnRleHQzRDo6
c2Npc3Nvcik6CisgICAgICAgIChXZWJDb3JlOjpTaGFyZWRDb250ZXh0M0Q6OmVuYWJsZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpTaGFyZWRDb250ZXh0M0Q6OmRpc2FibGUpOgorICAgICAgICAoV2Vi
Q29yZTo6U2hhcmVkQ29udGV4dDNEOjpjbGVhckNvbG9yKToKKyAgICAgICAgKFdlYkNvcmU6OlNo
YXJlZENvbnRleHQzRDo6Y2xlYXIpOgorICAgICAgICAoV2ViQ29yZTo6U2hhcmVkQ29udGV4dDNE
OjpkcmF3QXJyYXlzKToKKyAgICAgICAgKFdlYkNvcmU6OlNoYXJlZENvbnRleHQzRDo6Z2V0RXJy
b3IpOgorICAgICAgICAoV2ViQ29yZTo6U2hhcmVkQ29udGV4dDNEOjpnZXRJbnRlZ2Vydik6Cisg
ICAgICAgIChXZWJDb3JlOjpTaGFyZWRDb250ZXh0M0Q6OmNyZWF0ZUZyYW1lYnVmZmVyKToKKyAg
ICAgICAgKFdlYkNvcmU6OlNoYXJlZENvbnRleHQzRDo6Y3JlYXRlVGV4dHVyZSk6CisgICAgICAg
IChXZWJDb3JlOjpTaGFyZWRDb250ZXh0M0Q6OmRlbGV0ZUZyYW1lYnVmZmVyKToKKyAgICAgICAg
KFdlYkNvcmU6OlNoYXJlZENvbnRleHQzRDo6ZGVsZXRlVGV4dHVyZSk6CisgICAgICAgIChXZWJD
b3JlOjpTaGFyZWRDb250ZXh0M0Q6OmRlbGV0ZUNvbXBvc2l0b3JUZXh0dXJlKToKKyAgICAgICAg
KFdlYkNvcmU6OlNoYXJlZENvbnRleHQzRDo6ZnJhbWVidWZmZXJUZXh0dXJlMkQpOgorICAgICAg
ICAoV2ViQ29yZTo6U2hhcmVkQ29udGV4dDNEOjp0ZXhQYXJhbWV0ZXJpKToKKyAgICAgICAgKFdl
YkNvcmU6OlNoYXJlZENvbnRleHQzRDo6dGV4SW1hZ2UyRCk6CisgICAgICAgIChXZWJDb3JlOjpT
aGFyZWRDb250ZXh0M0Q6OnRleFN1YkltYWdlMkQpOgorICAgICAgICAoV2ViQ29yZTo6U2hhcmVk
Q29udGV4dDNEOjpyZWFkUGl4ZWxzKToKKyAgICAgICAgKFdlYkNvcmU6OlNoYXJlZENvbnRleHQz
RDo6Z2V0VGV4dHVyZSk6CisgICAgICAgIChXZWJDb3JlOjpTaGFyZWRDb250ZXh0M0Q6OmFwcGx5
Q29tcG9zaXRlT3BlcmF0b3IpOgorICAgICAgICAoV2ViQ29yZTo6U2hhcmVkQ29udGV4dDNEOjp1
c2VRdWFkVmVydGljZXMpOgorICAgICAgICAoV2ViQ29yZTo6U2hhcmVkQ29udGV4dDNEOjpzZXRB
Y3RpdmVUZXh0dXJlKToKKyAgICAgICAgKFdlYkNvcmU6OlNoYXJlZENvbnRleHQzRDo6YmluZFRl
eHR1cmUpOgorICAgICAgICAoV2ViQ29yZTo6U2hhcmVkQ29udGV4dDNEOjp1c2VGaWxsU29saWRQ
cm9ncmFtKToKKyAgICAgICAgKFdlYkNvcmU6OlNoYXJlZENvbnRleHQzRDo6dXNlVGV4dHVyZVBy
b2dyYW0pOgorICAgICAgICAoV2ViQ29yZTo6U2hhcmVkQ29udGV4dDNEOjpiaW5kRnJhbWVidWZm
ZXIpOgorICAgICAgICAoV2ViQ29yZTo6U2hhcmVkQ29udGV4dDNEOjpzZXRWaWV3cG9ydCk6Cisg
ICAgICAgIChXZWJDb3JlOjpTaGFyZWRDb250ZXh0M0Q6OnN1cHBvcnRzQkdSQSk6CisgICAgICAg
IChXZWJDb3JlOjpTaGFyZWRDb250ZXh0M0Q6OmNyZWF0ZUNvbXBvc2l0b3JUZXh0dXJlKToKKyAg
ICAgICAgKFdlYkNvcmU6OlNoYXJlZENvbnRleHQzRDo6Y29weVRleHR1cmVUb0NvbXBvc2l0b3Ip
OgorICAgICAgICAoV2ViQ29yZTo6U2hhcmVkQ29udGV4dDNEOjpwYWludHNJbnRvQ2FudmFzQnVm
ZmVyKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9ncHUvU2hhcmVkQ29udGV4dDNELmg6
IEFkZGVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2dwdS9UZXh0dXJlLmNwcDoKKyAg
ICAgICAgICBNYWMtc3BlY2lmaWMgY2hhbmdlczoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGlj
cy9tYWMvR3JhcGhpY3NMYXllckNBLmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvbWFj
L0dyYXBoaWNzTGF5ZXJDQS5tbToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXJDQTo6
c2V0Q29udGVudHNUb1dlYkdMKToKKyAgICAgICAgICBDaHJvbWl1bS1zcGVjaWZpYyBjaGFuZ2Vz
OgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0NhbnZhczJETGF5ZXJDaHJv
bWl1bS5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6Q2FudmFzMkRMYXllckNocm9taXVt
OjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6Q2FudmFzMkRMYXllckNocm9taXVtOjpDYW52
YXMyRExheWVyQ2hyb21pdW0pOgorICAgICAgICAoV2ViQ29yZTo6Q2FudmFzMkRMYXllckNocm9t
aXVtOjp1cGRhdGVDb250ZW50cyk6CisgICAgICAgIChXZWJDb3JlOjpDYW52YXMyRExheWVyQ2hy
b21pdW06OnNldENhbnZhc0ZyYW1lYnVmZmVyKToKKyAgICAgICAgKFdlYkNvcmU6OkNhbnZhczJE
TGF5ZXJDaHJvbWl1bTo6dGV4dHVyZUlkKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9j
aHJvbWl1bS9DYW52YXMyRExheWVyQ2hyb21pdW0uaDogQWRkZWQuCisgICAgICAgIChXZWJDb3Jl
OjpDYW52YXMyRExheWVyQ2hyb21pdW06OmRyYXdzQ29udGVudCk6CisgICAgICAgICogcGxhdGZv
cm0vZ3JhcGhpY3MvY2hyb21pdW0vQ2FudmFzTGF5ZXJDaHJvbWl1bS5jcHA6CisgICAgICAgICAg
Q2FudmFzTGF5ZXJDaHJvbWl1bSBpcyBub3cgYSBiYXNlIGNsYXNzIGZvciBXZWJHTExheWVyQ2hy
b21pdW0gYW5kIENhbnZhczJETGF5ZXJDaHJvbWl1bS4KKyAgICAgICAgKFdlYkNvcmU6OkNhbnZh
c0xheWVyQ2hyb21pdW06OkNhbnZhc0xheWVyQ2hyb21pdW0pOgorICAgICAgICAoV2ViQ29yZTo6
Q2FudmFzTGF5ZXJDaHJvbWl1bTo6fkNhbnZhc0xheWVyQ2hyb21pdW0pOgorICAgICAgICAoV2Vi
Q29yZTo6Q2FudmFzTGF5ZXJDaHJvbWl1bTo6ZHJhdyk6CisgICAgICAgICogcGxhdGZvcm0vZ3Jh
cGhpY3MvY2hyb21pdW0vQ2FudmFzTGF5ZXJDaHJvbWl1bS5oOgorICAgICAgICAqIHBsYXRmb3Jt
L2dyYXBoaWNzL2Nocm9taXVtL0dMRVMyQ2FudmFzLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkdM
RVMyQ2FudmFzOjpHTEVTMkNhbnZhcyk6CisgICAgICAgIChXZWJDb3JlOjpHTEVTMkNhbnZhczo6
fkdMRVMyQ2FudmFzKToKKyAgICAgICAgKFdlYkNvcmU6OkdMRVMyQ2FudmFzOjpzd2FwQnVmZmVy
cyk6CisgICAgICAgIChXZWJDb3JlOjpHTEVTMkNhbnZhczo6YmluZEZyYW1lYnVmZmVyKToKKyAg
ICAgICAgKFdlYkNvcmU6OkdMRVMyQ2FudmFzOjp0ZXh0dXJlSWRGb3JDb21wb3NpdG9yKToKKyAg
ICAgICAgKFdlYkNvcmU6OkdMRVMyQ2FudmFzOjp0ZXh0dXJlSWRGb3JDYW52YXMpOgorICAgICAg
ICAoV2ViQ29yZTo6R0xFUzJDYW52YXM6OmNsZWFyUmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpH
TEVTMkNhbnZhczo6ZmlsbFJlY3QpOgorICAgICAgICAoV2ViQ29yZTo6R0xFUzJDYW52YXM6OmRy
YXdUZXh0dXJlZFJlY3QpOgorICAgICAgICAoV2ViQ29yZTo6R0xFUzJDYW52YXM6OmRyYXdUZXh0
dXJlZFJlY3RUaWxlKToKKyAgICAgICAgKFdlYkNvcmU6OkdMRVMyQ2FudmFzOjpkcmF3UXVhZCk6
CisgICAgICAgIChXZWJDb3JlOjpHTEVTMkNhbnZhczo6Y3JlYXRlVGV4dHVyZSk6CisgICAgICAg
IChXZWJDb3JlOjpHTEVTMkNhbnZhczo6Z2V0VGV4dHVyZSk6CisgICAgICAgICogcGxhdGZvcm0v
Z3JhcGhpY3MvY2hyb21pdW0vR0xFUzJDYW52YXMuaDoKKyAgICAgICAgKFdlYkNvcmU6OkdMRVMy
Q2FudmFzOjpjb250ZXh0KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9H
cmFwaGljc0xheWVyQ2hyb21pdW0uY3BwOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NMYXll
ckNocm9taXVtOjpzZXRDb250ZW50c1RvV2ViR0wpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhp
Y3NMYXllckNocm9taXVtOjpzZXRDb250ZW50c1RvQ2FudmFzMkQpOgorICAgICAgICAqIHBsYXRm
b3JtL2dyYXBoaWNzL2Nocm9taXVtL0dyYXBoaWNzTGF5ZXJDaHJvbWl1bS5oOgorICAgICAgICAq
IHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyUmVuZGVyZXJDaHJvbWl1bS5jcHA6Cisg
ICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vV2ViR0xMYXllckNocm9taXVtLmNw
cDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpXZWJHTExheWVyQ2hyb21pdW06OmNyZWF0ZSk6
CisgICAgICAgIChXZWJDb3JlOjpXZWJHTExheWVyQ2hyb21pdW06OldlYkdMTGF5ZXJDaHJvbWl1
bSk6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTExheWVyQ2hyb21pdW06OnVwZGF0ZUNvbnRlbnRz
KToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMTGF5ZXJDaHJvbWl1bTo6c2V0Q29udGV4dCk6Cisg
ICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vV2ViR0xMYXllckNocm9taXVtLmg6
IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xMYXllckNocm9taXVtOjpkcmF3c0NvbnRl
bnQpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xMYXllckNocm9taXVtOjp0ZXh0dXJlSWQpOgor
ICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3NraWEvR3JhcGhpY3NDb250ZXh0U2tpYS5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OnNldFNoYXJlZENvbnRleHQzRCk6
CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OnRleHR1cmVJZEZvckNvbXBvc2l0
b3IpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0Ojp0ZXh0dXJlSWRGb3JDYW52
YXMpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3NraWEvSW1hZ2VCdWZmZXJTa2lhLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyOjpkcmF3KToKKyAgICAgICAgKiBwbGF0
Zm9ybS9ncmFwaGljcy9za2lhL0ltYWdlU2tpYS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpkcmF3
Qml0bWFwR0xFUzIpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3NraWEvUGxhdGZvcm1D
b250ZXh0U2tpYS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpQbGF0Zm9ybUNvbnRleHRTa2lhOjp+
UGxhdGZvcm1Db250ZXh0U2tpYSk6CisgICAgICAgIChXZWJDb3JlOjpTd2FwQnVmZmVyc0NhbGxi
YWNrSW1wbDo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OlN3YXBCdWZmZXJzQ2FsbGJhY2tJ
bXBsOjp3aWxsU3dhcEJ1ZmZlcnMpOgorICAgICAgICAoV2ViQ29yZTo6U3dhcEJ1ZmZlcnNDYWxs
YmFja0ltcGw6OlN3YXBCdWZmZXJzQ2FsbGJhY2tJbXBsKToKKyAgICAgICAgKFdlYkNvcmU6OlBs
YXRmb3JtQ29udGV4dFNraWE6OnNldFNoYXJlZENvbnRleHQzRCk6CisgICAgICAgIChXZWJDb3Jl
OjpQbGF0Zm9ybUNvbnRleHRTa2lhOjpzd2FwQnVmZmVycyk6CisgICAgICAgIChXZWJDb3JlOjpQ
bGF0Zm9ybUNvbnRleHRTa2lhOjp1cGxvYWRTb2Z0d2FyZVRvSGFyZHdhcmUpOgorICAgICAgICAo
V2ViQ29yZTo6UGxhdGZvcm1Db250ZXh0U2tpYTo6cmVhZGJhY2tIYXJkd2FyZVRvU29mdHdhcmUp
OgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3NraWEvUGxhdGZvcm1Db250ZXh0U2tpYS5o
OgorCiAyMDEwLTA4LTMwICBDaHJpcyBSb2dlcnMgIDxjcm9nZXJzQGdvb2dsZS5jb20+CiAKICAg
ICAgICAgUmV2aWV3ZWQgYnkgS2VubmV0aCBSdXNzZWxsLgpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9X
ZWJDb3JlLmd5cGkgYi9XZWJDb3JlL1dlYkNvcmUuZ3lwaQppbmRleCBlNWI1N2JhMDhlM2EwMGQ4
ZDU5OGNkMmJlNDA3M2Q3MGE5YTBiZGY3Li5mY2NiZmE1NjYyNWVmMTg5ZmY5ZTNhYmUzNDg1NjAx
MGM1ZDM3YWNjIDEwMDY0NAotLS0gYS9XZWJDb3JlL1dlYkNvcmUuZ3lwaQorKysgYi9XZWJDb3Jl
L1dlYkNvcmUuZ3lwaQpAQCAtMjIzNiw2ICsyMjM2LDggQEAKICAgICAgICAgICAgICdwbGF0Zm9y
bS9ncmFwaGljcy9jZy9QYXRoQ0cuY3BwJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGlj
cy9jZy9QYXR0ZXJuQ0cuY3BwJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jZy9U
cmFuc2Zvcm1hdGlvbk1hdHJpeENHLmNwcCcsCisgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhp
Y3MvY2hyb21pdW0vQ2FudmFzMkRMYXllckNocm9taXVtLmNwcCcsCisgICAgICAgICAgICAncGxh
dGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vQ2FudmFzMkRMYXllckNocm9taXVtLmgnLAogICAgICAg
ICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0NhbnZhc0xheWVyQ2hyb21pdW0uY3Bw
JywKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9DYW52YXNMYXllckNo
cm9taXVtLmgnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0NvbnRl
bnRMYXllckNocm9taXVtLmNwcCcsCkBAIC0yMjgzLDYgKzIyODUsOCBAQAogICAgICAgICAgICAg
J3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1VuaXNjcmliZUhlbHBlclRleHRSdW4uaCcsCiAg
ICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vVmlkZW9MYXllckNocm9taXVt
LmNwcCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vVmlkZW9MYXll
ckNocm9taXVtLmgnLAorICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1dl
YkdMTGF5ZXJDaHJvbWl1bS5jcHAnLAorICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2No
cm9taXVtL1dlYkdMTGF5ZXJDaHJvbWl1bS5oJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFw
aGljcy9jb2NvYS9Gb250UGxhdGZvcm1EYXRhLmgnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dy
YXBoaWNzL2ZpbHRlcnMvRkVCbGVuZC5jcHAnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBo
aWNzL2ZpbHRlcnMvRkVCbGVuZC5oJywKQEAgLTIzMDMsNiArMjMwNywxMCBAQAogICAgICAgICAg
ICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvU291cmNlQWxwaGEuaCcsCiAgICAgICAgICAg
ICAncGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9Tb3VyY2VHcmFwaGljLmNwcCcsCiAgICAgICAg
ICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9Tb3VyY2VHcmFwaGljLmgnLAorICAgICAg
ICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2dwdS9DYW52YXNGcmFtZWJ1ZmZlci5jcHAnLAorICAg
ICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2dwdS9DYW52YXNGcmFtZWJ1ZmZlci5oJywKKyAg
ICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9ncHUvU2hhcmVkQ29udGV4dDNELmNwcCcsCisg
ICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvZ3B1L1NoYXJlZENvbnRleHQzRC5oJywKICAg
ICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9ncHUvU2hhZGVyLmNwcCcsCiAgICAgICAgICAg
ICAncGxhdGZvcm0vZ3JhcGhpY3MvZ3B1L1NoYWRlci5oJywKICAgICAgICAgICAgICdwbGF0Zm9y
bS9ncmFwaGljcy9ncHUvU29saWRGaWxsU2hhZGVyLmNwcCcsCkBAIC0yNTYxLDggKzI1NjksOCBA
QAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlQnVmZmVyLmNwcCcsCiAgICAg
ICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VCdWZmZXIuaCcsCiAgICAgICAgICAgICAn
cGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VPYnNlcnZlci5oJywKLSAgICAgICAgICAgICdwbGF0Zm9y
bS9ncmFwaGljcy9JbWFnZVNvdXJjZS5oJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGlj
cy9JbWFnZVNvdXJjZS5jcHAnLAorICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdl
U291cmNlLmgnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL0ludFBvaW50LmgnLAog
ICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL0ludFJlY3QuY3BwJywKICAgICAgICAgICAg
ICdwbGF0Zm9ybS9ncmFwaGljcy9JbnRSZWN0LmgnLApkaWZmIC0tZ2l0IGEvV2ViQ29yZS9odG1s
L2NhbnZhcy9DYW52YXNSZW5kZXJpbmdDb250ZXh0LmNwcCBiL1dlYkNvcmUvaHRtbC9jYW52YXMv
Q2FudmFzUmVuZGVyaW5nQ29udGV4dC5jcHAKaW5kZXggMWU4OTdkMzBlY2UxOTgzOTEyOGYwMDhk
ZGY4ZDQ4NjBkNzE0MDYyNy4uZTAxOTMzMmJhODFmNTNjOWViMmNjY2M1M2IyNDUzMDQ2ZWNiZDg1
ZSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9odG1sL2NhbnZhcy9DYW52YXNSZW5kZXJpbmdDb250ZXh0
LmNwcAorKysgYi9XZWJDb3JlL2h0bWwvY2FudmFzL0NhbnZhc1JlbmRlcmluZ0NvbnRleHQuY3Bw
CkBAIC0yNSw5ICsyNSw2IEBACiAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJDYW52
YXNSZW5kZXJpbmdDb250ZXh0LmgiCi0jaWYgRU5BQkxFKEFDQ0VMRVJBVEVEXzJEX0NBTlZBUykg
fHwgRU5BQkxFKDNEX0NBTlZBUykKLSNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQzRC5oIgotI2Vu
ZGlmCiAjaW5jbHVkZSAiSFRNTENhbnZhc0VsZW1lbnQuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUg
ewpAQCAtNDcsMTMgKzQ0LDQgQEAgdm9pZCBDYW52YXNSZW5kZXJpbmdDb250ZXh0OjpkZXJlZigp
CiAgICAgbV9jYW52YXMtPmRlcmVmKCk7IAogfQogCi1ib29sIENhbnZhc1JlbmRlcmluZ0NvbnRl
eHQ6OnBhaW50c0ludG9DYW52YXNCdWZmZXIoKSBjb25zdAotewotI2lmIEVOQUJMRShBQ0NFTEVS
QVRFRF8yRF9DQU5WQVMpIHx8IEVOQUJMRSgzRF9DQU5WQVMpCi0gICAgaWYgKEdyYXBoaWNzQ29u
dGV4dDNEKiBjb250ZXh0M0QgPSBncmFwaGljc0NvbnRleHQzRCgpKQotICAgICAgICByZXR1cm4g
Y29udGV4dDNELT5wYWludHNJbnRvQ2FudmFzQnVmZmVyKCk7Ci0jZW5kaWYKLSAgICByZXR1cm4g
dHJ1ZTsKLX0KLQogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9o
dG1sL2NhbnZhcy9DYW52YXNSZW5kZXJpbmdDb250ZXh0LmggYi9XZWJDb3JlL2h0bWwvY2FudmFz
L0NhbnZhc1JlbmRlcmluZ0NvbnRleHQuaAppbmRleCAyY2RiZTFkMzc2NTk0ZGJlMGRmYmQ3MDBm
MmVmYjczNGEzZGI5MmM2Li5jNzE2OGIxZDA3ZGVhOGNmYzRkNjk0MTlhNGE2NWM0ZTJmYmFkY2Ey
IDEwMDY0NAotLS0gYS9XZWJDb3JlL2h0bWwvY2FudmFzL0NhbnZhc1JlbmRlcmluZ0NvbnRleHQu
aAorKysgYi9XZWJDb3JlL2h0bWwvY2FudmFzL0NhbnZhc1JlbmRlcmluZ0NvbnRleHQuaApAQCAt
MzEsNyArMzEsNiBAQAogbmFtZXNwYWNlIFdlYkNvcmUgewogCiAgICAgY2xhc3MgV2ViR0xPYmpl
Y3Q7Ci0gICAgY2xhc3MgR3JhcGhpY3NDb250ZXh0M0Q7CiAgICAgY2xhc3MgSFRNTENhbnZhc0Vs
ZW1lbnQ7CiAKICAgICBjbGFzcyBDYW52YXNSZW5kZXJpbmdDb250ZXh0IDogcHVibGljIE5vbmNv
cHlhYmxlIHsKQEAgLTQ5LDEyICs0OCw4IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAg
dmlydHVhbCBib29sIGlzM2QoKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQogICAgICAgICB2aXJ0
dWFsIGJvb2wgaXNBY2NlbGVyYXRlZCgpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CiAgICAgICAg
IAotICAgICAgICAvLyBGb3IgYWNjZWxlcmF0ZWQgY2FudmFzZXMsIHJldHVybnMgYSBwb2ludGVy
IHRvIHRoZSB1bmRlcmx5aW5nIEdyYXBoaWNzQ29udGV4dDNELgotICAgICAgICAvLyBGb3Igbm9u
IGFjY2VsZXJhdGVkIGNhbnZhc2VzIHJldHVybnMgMC4KLSAgICAgICAgdmlydHVhbCBHcmFwaGlj
c0NvbnRleHQzRCogZ3JhcGhpY3NDb250ZXh0M0QoKSBjb25zdCB7IHJldHVybiAwOyB9Ci0KICAg
ICAgICAgdmlydHVhbCB2b2lkIHBhaW50UmVuZGVyaW5nUmVzdWx0c1RvQ2FudmFzKCkge30KLSAg
ICAgICAgYm9vbCBwYWludHNJbnRvQ2FudmFzQnVmZmVyKCkgY29uc3Q7CisgICAgICAgIHZpcnR1
YWwgYm9vbCBwYWludHNJbnRvQ2FudmFzQnVmZmVyKCkgY29uc3QgeyByZXR1cm4gdHJ1ZTsgfQog
CiAgICAgcHJpdmF0ZToKICAgICAgICAgSFRNTENhbnZhc0VsZW1lbnQqIG1fY2FudmFzOwpkaWZm
IC0tZ2l0IGEvV2ViQ29yZS9odG1sL2NhbnZhcy9DYW52YXNSZW5kZXJpbmdDb250ZXh0MkQuY3Bw
IGIvV2ViQ29yZS9odG1sL2NhbnZhcy9DYW52YXNSZW5kZXJpbmdDb250ZXh0MkQuY3BwCmluZGV4
IDZkZjZhYmY5Njc0YWQ5YTIwZjIyNzJhMTc4OTNjODU4NTBkZTU3ZDcuLmNlNGQ1YmJmYzY5YWY4
ZWVkYjBlNDJkOWNmZDM2MTRhNmEwOWU3OTggMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvaHRtbC9jYW52
YXMvQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJELmNwcAorKysgYi9XZWJDb3JlL2h0bWwvY2FudmFz
L0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRC5jcHAKQEAgLTU5LDggKzU5LDEyIEBACiAjaW5jbHVk
ZSAiVGV4dE1ldHJpY3MuaCIKIAogI2lmIEVOQUJMRShBQ0NFTEVSQVRFRF8yRF9DQU5WQVMpCisj
aW5jbHVkZSAiQ2FudmFzRnJhbWVidWZmZXIuaCIKKyNpbmNsdWRlICJDaHJvbWUuaCIKKyNpbmNs
dWRlICJDaHJvbWVDbGllbnQuaCIKICNpbmNsdWRlICJGcmFtZVZpZXcuaCIKICNpbmNsdWRlICJH
cmFwaGljc0NvbnRleHQzRC5oIgorI2luY2x1ZGUgIlNoYXJlZENvbnRleHQzRC5oIgogI2lmIFVT
RShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKICNpbmNsdWRlICJSZW5kZXJMYXllci5oIgogI2Vu
ZGlmCkBAIC0xMjQsMTcgKzEyOCwxMSBAQCBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ6OkNhbnZh
c1JlbmRlcmluZ0NvbnRleHQyRChIVE1MQ2FudmFzRWxlbWVudCogY2FudmFzLCBibwogICAgICAg
ICByZXR1cm47CiAgICAgaWYgKCFwLT5zZXR0aW5ncygpLT5hY2NlbGVyYXRlZDJkQ2FudmFzRW5h
YmxlZCgpKQogICAgICAgICByZXR1cm47Ci0gICAgaWYgKEZyYW1lVmlldyogdmlldyA9IGNhbnZh
cy0+ZG9jdW1lbnQoKS0+dmlldygpKSB7Ci0gICAgICAgIGlmIChTY3JvbGxWaWV3KiByb290Vmll
dyA9IHZpZXctPnJvb3QoKSkgewotICAgICAgICAgICAgaWYgKEhvc3RXaW5kb3cqIGhvc3RXaW5k
b3cgPSByb290Vmlldy0+aG9zdFdpbmRvdygpKSB7Ci0gICAgICAgICAgICAgICAgLy8gU2V0IHVw
IG91ciBjb250ZXh0Ci0gICAgICAgICAgICAgICAgR3JhcGhpY3NDb250ZXh0M0Q6OkF0dHJpYnV0
ZXMgYXR0cjsKLSAgICAgICAgICAgICAgICBhdHRyLnN0ZW5jaWwgPSB0cnVlOwotICAgICAgICAg
ICAgICAgIG1fY29udGV4dDNEID0gR3JhcGhpY3NDb250ZXh0M0Q6OmNyZWF0ZShhdHRyLCBob3N0
V2luZG93KTsKLSAgICAgICAgICAgICAgICBpZiAobV9jb250ZXh0M0QpCi0gICAgICAgICAgICAg
ICAgICAgIGlmIChHcmFwaGljc0NvbnRleHQqIGMgPSBkcmF3aW5nQ29udGV4dCgpKQotICAgICAg
ICAgICAgICAgICAgICAgICAgYy0+c2V0R3JhcGhpY3NDb250ZXh0M0QobV9jb250ZXh0M0QuZ2V0
KCksIEludFNpemUoY2FudmFzLT53aWR0aCgpLCBjYW52YXMtPmhlaWdodCgpKSk7Ci0gICAgICAg
ICAgICB9CisgICAgbV9jb250ZXh0M0QgPSBwLT5jaHJvbWUoKS0+Y2xpZW50KCktPmdldFNoYXJl
ZENvbnRleHQzRCgpOworICAgIGlmIChtX2NvbnRleHQzRCkgeworICAgICAgICBpZiAoR3JhcGhp
Y3NDb250ZXh0KiBjID0gZHJhd2luZ0NvbnRleHQoKSkgeworICAgICAgICAgICAgbV9mcmFtZWJ1
ZmZlciA9IENhbnZhc0ZyYW1lYnVmZmVyOjpjcmVhdGUobV9jb250ZXh0M0QuZ2V0KCksIEludFNp
emUoY2FudmFzLT53aWR0aCgpLCBjYW52YXMtPmhlaWdodCgpKSk7CisgICAgICAgICAgICBjLT5z
ZXRTaGFyZWRDb250ZXh0M0QobV9jb250ZXh0M0QuZ2V0KCksIG1fZnJhbWVidWZmZXIuZ2V0KCks
IEludFNpemUoY2FudmFzLT53aWR0aCgpLCBjYW52YXMtPmhlaWdodCgpKSk7CiAgICAgICAgIH0K
ICAgICB9CiAjZW5kaWYKQEAgLTE1Myw2ICsxNTEsMTYgQEAgYm9vbCBDYW52YXNSZW5kZXJpbmdD
b250ZXh0MkQ6OmlzQWNjZWxlcmF0ZWQoKSBjb25zdAogI2VuZGlmCiB9CiAKK2Jvb2wgQ2FudmFz
UmVuZGVyaW5nQ29udGV4dDJEOjpwYWludHNJbnRvQ2FudmFzQnVmZmVyKCkgY29uc3QKK3sKKyNp
ZiBFTkFCTEUoQUNDRUxFUkFURURfMkRfQ0FOVkFTKQorICAgIGlmIChtX2NvbnRleHQzRCkKKyAg
ICAgICAgcmV0dXJuIG1fY29udGV4dDNELT5wYWludHNJbnRvQ2FudmFzQnVmZmVyKCk7CisjZW5k
aWYKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworCiB2b2lkIENhbnZhc1JlbmRlcmluZ0NvbnRleHQy
RDo6cmVzZXQoKQogewogICAgIG1fc3RhdGVTdGFjay5yZXNpemUoMSk7CkBAIC0xNjAsOCArMTY4
LDEwIEBAIHZvaWQgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEOjpyZXNldCgpCiAgICAgbV9wYXRo
LmNsZWFyKCk7CiAjaWYgRU5BQkxFKEFDQ0VMRVJBVEVEXzJEX0NBTlZBUykKICAgICBpZiAobV9j
b250ZXh0M0QpIHsKLSAgICAgICAgaWYgKEdyYXBoaWNzQ29udGV4dCogYyA9IGRyYXdpbmdDb250
ZXh0KCkpCi0gICAgICAgICAgICBjLT5zZXRHcmFwaGljc0NvbnRleHQzRChtX2NvbnRleHQzRC5n
ZXQoKSwgSW50U2l6ZShjYW52YXMoKS0+d2lkdGgoKSwgY2FudmFzKCktPmhlaWdodCgpKSk7Cisg
ICAgICAgIGlmIChHcmFwaGljc0NvbnRleHQqIGMgPSBkcmF3aW5nQ29udGV4dCgpKSB7CisgICAg
ICAgICAgICBtX2ZyYW1lYnVmZmVyID0gQ2FudmFzRnJhbWVidWZmZXI6OmNyZWF0ZShtX2NvbnRl
eHQzRC5nZXQoKSwgSW50U2l6ZShjYW52YXMoKS0+d2lkdGgoKSwgY2FudmFzKCktPmhlaWdodCgp
KSk7CisgICAgICAgICAgICBjLT5zZXRTaGFyZWRDb250ZXh0M0QobV9jb250ZXh0M0QuZ2V0KCks
IG1fZnJhbWVidWZmZXIuZ2V0KCksIEludFNpemUoY2FudmFzKCktPndpZHRoKCksIGNhbnZhcygp
LT5oZWlnaHQoKSkpOworICAgICAgICB9CiAgICAgfQogI2VuZGlmCiB9CkBAIC0xMjY5LDcgKzEy
NzksOSBAQCB2b2lkIENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRDo6ZHJhd0ltYWdlKEhUTUxDYW52
YXNFbGVtZW50KiBzb3VyY2VDYW52YXMsIGNvbnN0CiAgICAgaWYgKCFzb3VyY2VDYW52YXMtPm9y
aWdpbkNsZWFuKCkpCiAgICAgICAgIGNhbnZhcygpLT5zZXRPcmlnaW5UYWludGVkKCk7CiAKKyNp
ZiAhRU5BQkxFKEFDQ0VMRVJBVEVEXzJEX0NBTlZBUykKICAgICBzb3VyY2VDYW52YXMtPm1ha2VS
ZW5kZXJpbmdSZXN1bHRzQXZhaWxhYmxlKCk7CisjZW5kaWYKIAogICAgIGMtPmRyYXdJbWFnZUJ1
ZmZlcihidWZmZXIsIERldmljZUNvbG9yU3BhY2UsIGRlc3RSZWN0LCBzb3VyY2VSZWN0LCBzdGF0
ZSgpLm1fZ2xvYmFsQ29tcG9zaXRlKTsKICAgICBkaWREcmF3KGRlc3RSZWN0KTsKQEAgLTE1MDQs
NyArMTUxNiw3IEBAIHZvaWQgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEOjpkaWREcmF3KGNvbnN0
IEZsb2F0UmVjdCYgciwgdW5zaWduZWQgb3B0aW9ucykKICNpZiBFTkFCTEUoQUNDRUxFUkFURURf
MkRfQ0FOVkFTKSAmJiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCiAgICAgLy8gSWYgd2Ug
YXJlIGRyYXdpbmcgdG8gaGFyZHdhcmUgYW5kIHdlIGhhdmUgYSBjb21wb3NpdGVkIGxheWVyLCBq
dXN0IGNhbGwgcmVuZGVyZXJDb250ZW50Q2hhbmdlZCgpLgogICAgIFJlbmRlckJveCogcmVuZGVy
Qm94ID0gY2FudmFzKCktPnJlbmRlckJveCgpOwotICAgIGlmIChtX2NvbnRleHQzRCAmJiByZW5k
ZXJCb3ggJiYgcmVuZGVyQm94LT5oYXNMYXllcigpICYmIHJlbmRlckJveC0+bGF5ZXIoKS0+aGFz
QWNjZWxlcmF0ZWRDb21wb3NpdGluZygpKQorICAgIGlmIChpc0FjY2VsZXJhdGVkKCkgJiYgcmVu
ZGVyQm94ICYmIHJlbmRlckJveC0+aGFzTGF5ZXIoKSAmJiByZW5kZXJCb3gtPmxheWVyKCktPmhh
c0FjY2VsZXJhdGVkQ29tcG9zaXRpbmcoKSkKICAgICAgICAgcmVuZGVyQm94LT5sYXllcigpLT5y
ZW5kZXJlckNvbnRlbnRDaGFuZ2VkKCk7CiAgICAgZWxzZQogI2VuZGlmCmRpZmYgLS1naXQgYS9X
ZWJDb3JlL2h0bWwvY2FudmFzL0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRC5oIGIvV2ViQ29yZS9o
dG1sL2NhbnZhcy9DYW52YXNSZW5kZXJpbmdDb250ZXh0MkQuaAppbmRleCA5ODU3MzQ0M2U4MWRm
OWY3ZDk2ZjY5MjMyZmVmZjkwOGUwY2U2Yjg5Li40NWE2NjViMzFmNDM5NTM3YzRmODBjNjk4OTU1
YzY2ZTA5MTkyMTkxIDEwMDY0NAotLS0gYS9XZWJDb3JlL2h0bWwvY2FudmFzL0NhbnZhc1JlbmRl
cmluZ0NvbnRleHQyRC5oCisrKyBiL1dlYkNvcmUvaHRtbC9jYW52YXMvQ2FudmFzUmVuZGVyaW5n
Q29udGV4dDJELmgKQEAgLTYxLDcgKzYxLDcgQEAgY2xhc3MgS1VSTDsKIGNsYXNzIFRleHRNZXRy
aWNzOwogCiAjaWYgRU5BQkxFKEFDQ0VMRVJBVEVEXzJEX0NBTlZBUykKLWNsYXNzIEdyYXBoaWNz
Q29udGV4dDNEOworY2xhc3MgU2hhcmVkQ29udGV4dDNEOwogI2VuZGlmCiAKIHR5cGVkZWYgaW50
IEV4Y2VwdGlvbkNvZGU7CkBAIC03NCw2ICs3NCw3IEBAIHB1YmxpYzoKIAogICAgIHZpcnR1YWwg
Ym9vbCBpczJkKCkgY29uc3QgeyByZXR1cm4gdHJ1ZTsgfQogICAgIHZpcnR1YWwgYm9vbCBpc0Fj
Y2VsZXJhdGVkKCkgY29uc3Q7CisgICAgdmlydHVhbCBib29sIHBhaW50c0ludG9DYW52YXNCdWZm
ZXIoKSBjb25zdDsKIAogICAgIENhbnZhc1N0eWxlKiBzdHJva2VTdHlsZSgpIGNvbnN0OwogICAg
IHZvaWQgc2V0U3Ryb2tlU3R5bGUoUGFzc1JlZlB0cjxDYW52YXNTdHlsZT4pOwpAQCAtMjI0LDcg
KzIyNSw3IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIHZvaWQgcGFpbnRSZW5kZXJpbmdSZXN1bHRz
VG9DYW52YXMoKTsKIAogI2lmIEVOQUJMRShBQ0NFTEVSQVRFRF8yRF9DQU5WQVMpCi0gICAgdmly
dHVhbCBHcmFwaGljc0NvbnRleHQzRCogZ3JhcGhpY3NDb250ZXh0M0QoKSBjb25zdCB7IHJldHVy
biBtX2NvbnRleHQzRC5nZXQoKTsgfQorICAgIENhbnZhc0ZyYW1lYnVmZmVyKiBmcmFtZWJ1ZmZl
cigpIHsgcmV0dXJuIG1fZnJhbWVidWZmZXIuZ2V0KCk7IH0KICNlbmRpZgogCiBwcml2YXRlOgpA
QCAtMjk4LDcgKzI5OSw4IEBAIHByaXZhdGU6CiAjZW5kaWYKIAogI2lmIEVOQUJMRShBQ0NFTEVS
QVRFRF8yRF9DQU5WQVMpCi0gICAgT3duUHRyPEdyYXBoaWNzQ29udGV4dDNEPiBtX2NvbnRleHQz
RDsKKyAgICBSZWZQdHI8U2hhcmVkQ29udGV4dDNEPiBtX2NvbnRleHQzRDsKKyAgICBPd25QdHI8
Q2FudmFzRnJhbWVidWZmZXI+IG1fZnJhbWVidWZmZXI7CiAjZW5kaWYKIH07CiAKZGlmZiAtLWdp
dCBhL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xSZW5kZXJpbmdDb250ZXh0LmNwcCBiL1dlYkNv
cmUvaHRtbC9jYW52YXMvV2ViR0xSZW5kZXJpbmdDb250ZXh0LmNwcAppbmRleCA5NTkxYTUzY2Zl
YzA1OWUyOTkzNmM1ODE5MDcwYTRlYWZlOWNkNjgzLi42NGNiNWQzZWZkY2ZlYjJlMjUzNzA0MzY4
OTRkZjBjNTkzNmEyZjNhIDEwMDY0NAotLS0gYS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMUmVu
ZGVyaW5nQ29udGV4dC5jcHAKKysrIGIvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFJlbmRlcmlu
Z0NvbnRleHQuY3BwCkBAIC0xNzAsNiArMTcwLDExIEBAIHZvaWQgV2ViR0xSZW5kZXJpbmdDb250
ZXh0OjpwYWludFJlbmRlcmluZ1Jlc3VsdHNUb0NhbnZhcygpCiAgICAgbV9jb250ZXh0LT5wYWlu
dFJlbmRlcmluZ1Jlc3VsdHNUb0NhbnZhcyh0aGlzKTsKIH0KIAorYm9vbCBXZWJHTFJlbmRlcmlu
Z0NvbnRleHQ6OnBhaW50c0ludG9DYW52YXNCdWZmZXIoKSBjb25zdAoreworICAgIHJldHVybiBt
X2NvbnRleHQtPnBhaW50c0ludG9DYW52YXNCdWZmZXIoKTsKK30KKwogdm9pZCBXZWJHTFJlbmRl
cmluZ0NvbnRleHQ6OnJlc2hhcGUoaW50IHdpZHRoLCBpbnQgaGVpZ2h0KQogewogICAgIGlmICht
X25lZWRzVXBkYXRlKSB7CmRpZmYgLS1naXQgYS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMUmVu
ZGVyaW5nQ29udGV4dC5oIGIvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFJlbmRlcmluZ0NvbnRl
eHQuaAppbmRleCA2NmVjOGQ4MmFhNzNmZGI0YjQ5ZjI3NmIzYjZkMDUyZDUzODQzYWJiLi44MTM5
MGY5ZTRmZDUxOTBiZGZkNWUyZTAwNDU3ZmU2NGM2NTExYzlkIDEwMDY0NAotLS0gYS9XZWJDb3Jl
L2h0bWwvY2FudmFzL1dlYkdMUmVuZGVyaW5nQ29udGV4dC5oCisrKyBiL1dlYkNvcmUvaHRtbC9j
YW52YXMvV2ViR0xSZW5kZXJpbmdDb250ZXh0LmgKQEAgLTYzLDYgKzYzLDcgQEAgcHVibGljOgog
CiAgICAgdmlydHVhbCBib29sIGlzM2QoKSBjb25zdCB7IHJldHVybiB0cnVlOyB9CiAgICAgdmly
dHVhbCBib29sIGlzQWNjZWxlcmF0ZWQoKSBjb25zdCB7IHJldHVybiB0cnVlOyB9CisgICAgdmly
dHVhbCBib29sIHBhaW50c0ludG9DYW52YXNCdWZmZXIoKSBjb25zdDsKIAogICAgIHZvaWQgYWN0
aXZlVGV4dHVyZSh1bnNpZ25lZCBsb25nIHRleHR1cmUsIEV4Y2VwdGlvbkNvZGUmIGVjKTsKICAg
ICB2b2lkIGF0dGFjaFNoYWRlcihXZWJHTFByb2dyYW0qLCBXZWJHTFNoYWRlciosIEV4Y2VwdGlv
bkNvZGUmIGVjKTsKQEAgLTI3Nyw3ICsyNzgsNyBAQCBwdWJsaWM6CiAKICAgICB2b2lkIHZpZXdw
b3J0KGxvbmcgeCwgbG9uZyB5LCB1bnNpZ25lZCBsb25nIHdpZHRoLCB1bnNpZ25lZCBsb25nIGhl
aWdodCk7CiAKLSAgICB2aXJ0dWFsIEdyYXBoaWNzQ29udGV4dDNEKiBncmFwaGljc0NvbnRleHQz
RCgpIGNvbnN0IHsgcmV0dXJuIG1fY29udGV4dC5nZXQoKTsgfQorICAgIEdyYXBoaWNzQ29udGV4
dDNEKiBncmFwaGljc0NvbnRleHQzRCgpIGNvbnN0IHsgcmV0dXJuIG1fY29udGV4dC5nZXQoKTsg
fQogCiAgICAgdm9pZCByZXNoYXBlKGludCB3aWR0aCwgaW50IGhlaWdodCk7CiAKZGlmZiAtLWdp
dCBhL1dlYkNvcmUvbG9hZGVyL0VtcHR5Q2xpZW50cy5oIGIvV2ViQ29yZS9sb2FkZXIvRW1wdHlD
bGllbnRzLmgKaW5kZXggMjcwNzUyZGQ3ZjhmMDFmYTk0ZjdjMjkzZDNjZmU3ZmE5NWVkMjkxZi4u
ZmI0MGVkMDRkY2UwNDQ1ZDgyNmU0ZTM3MjIxZDQ1YWVmZDRlMGVlZiAxMDA2NDQKLS0tIGEvV2Vi
Q29yZS9sb2FkZXIvRW1wdHlDbGllbnRzLmgKKysrIGIvV2ViQ29yZS9sb2FkZXIvRW1wdHlDbGll
bnRzLmgKQEAgLTQ1LDYgKzQ1LDcgQEAKICNpbmNsdWRlICJQb3B1cE1lbnUuaCIKICNpbmNsdWRl
ICJSZXNvdXJjZUVycm9yLmgiCiAjaW5jbHVkZSAiU2VhcmNoUG9wdXBNZW51LmgiCisjaW5jbHVk
ZSAiU2hhcmVkQ29udGV4dDNELmgiCiAKIC8qCiAgVGhpcyBmaWxlIGhvbGRzIGVtcHR5IENsaWVu
dCBzdHVicyBmb3IgdXNlIGJ5IFdlYkNvcmUuCkBAIC0xOTAsMTEgKzE5MSwxMyBAQCBwdWJsaWM6
CiAgICAgdmlydHVhbCB2b2lkIGNhbmNlbEdlb2xvY2F0aW9uUGVybWlzc2lvblJlcXVlc3RGb3JG
cmFtZShGcmFtZSosIEdlb2xvY2F0aW9uKikge30KIAogI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01Q
T1NJVElORykKLSAgICB2aXJ0dWFsIHZvaWQgYXR0YWNoUm9vdEdyYXBoaWNzTGF5ZXIoRnJhbWUq
LCBHcmFwaGljc0xheWVyKikge307Ci0gICAgdmlydHVhbCB2b2lkIHNldE5lZWRzT25lU2hvdERy
YXdpbmdTeW5jaHJvbml6YXRpb24oKSB7fTsKLSAgICB2aXJ0dWFsIHZvaWQgc2NoZWR1bGVDb21w
b3NpdGluZ0xheWVyU3luYygpIHt9OworICAgIHZpcnR1YWwgdm9pZCBhdHRhY2hSb290R3JhcGhp
Y3NMYXllcihGcmFtZSosIEdyYXBoaWNzTGF5ZXIqKSB7fQorICAgIHZpcnR1YWwgdm9pZCBzZXRO
ZWVkc09uZVNob3REcmF3aW5nU3luY2hyb25pemF0aW9uKCkge30KKyAgICB2aXJ0dWFsIHZvaWQg
c2NoZWR1bGVDb21wb3NpdGluZ0xheWVyU3luYygpIHt9CiAjZW5kaWYKIAorICAgIHZpcnR1YWwg
UGFzc1JlZlB0cjxTaGFyZWRDb250ZXh0M0Q+IGdldFNoYXJlZENvbnRleHQzRCgpIHsgcmV0dXJu
IDA7IH0KKwogI2lmIFBMQVRGT1JNKFdJTikKICAgICB2aXJ0dWFsIHZvaWQgc2V0TGFzdFNldEN1
cnNvclRvQ3VycmVudEN1cnNvcigpIHsgfQogI2VuZGlmCmRpZmYgLS1naXQgYS9XZWJDb3JlL3Bh
Z2UvQ2hyb21lQ2xpZW50LmggYi9XZWJDb3JlL3BhZ2UvQ2hyb21lQ2xpZW50LmgKaW5kZXggZDNl
MTY2MjI5MmEzMWE4OWU1YmFhNzQ3MDUyMGE5ODhiZTE4MjA3OS4uZGFiMDhiYmE0NGZjOTk2NTI0
NGM0YWU3MTY5N2YzNzJkMjYyYjgyNyAxMDA2NDQKLS0tIGEvV2ViQ29yZS9wYWdlL0Nocm9tZUNs
aWVudC5oCisrKyBiL1dlYkNvcmUvcGFnZS9DaHJvbWVDbGllbnQuaApAQCAtNTcsNiArNTcsNyBA
QCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgY2xhc3MgTm9kZTsKICAgICBjbGFzcyBQYWdlOwog
ICAgIGNsYXNzIFNlY3VyaXR5T3JpZ2luOworICAgIGNsYXNzIFNoYXJlZENvbnRleHQzRDsKICAg
ICBjbGFzcyBQb3B1cE1lbnVDbGllbnQ7CiAgICAgY2xhc3MgV2lkZ2V0OwogCkBAIC0yMzAsNiAr
MjMxLDggQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICB2aXJ0dWFsIGJvb2wgYWxsb3dz
QWNjZWxlcmF0ZWRDb21wb3NpdGluZygpIGNvbnN0IHsgcmV0dXJuIHRydWU7IH0KICNlbmRpZgog
CisgICAgICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxTaGFyZWRDb250ZXh0M0Q+IGdldFNoYXJlZENv
bnRleHQzRCgpID0gMDsKKwogICAgICAgICB2aXJ0dWFsIGJvb2wgc3VwcG9ydHNGdWxsc2NyZWVu
Rm9yTm9kZShjb25zdCBOb2RlKikgeyByZXR1cm4gZmFsc2U7IH0KICAgICAgICAgdmlydHVhbCB2
b2lkIGVudGVyRnVsbHNjcmVlbkZvck5vZGUoTm9kZSopIHsgfQogICAgICAgICB2aXJ0dWFsIHZv
aWQgZXhpdEZ1bGxzY3JlZW5Gb3JOb2RlKE5vZGUqKSB7IH0KZGlmZiAtLWdpdCBhL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0LmggYi9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL0dyYXBoaWNzQ29udGV4dC5oCmluZGV4IDkzZWY4OTAwNjJlZGE1Mjg5OWU0ZDMzZGQx
MDkxYTJkMzJmNGQwOGMuLjgwZDFlMDIwMTQ2MTUxNWFlOTA1MGZlYmM0Y2RkYmI2Nzg5OGFkMTEg
MTAwNjQ0Ci0tLSBhL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0LmgK
KysrIGIvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQuaApAQCAtMTIy
LDE2ICsxMjIsMTcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgIGNvbnN0IGludCBjTWlzc3Bl
bGxpbmdMaW5lUGF0dGVybkdhcFdpZHRoID0gMTsKIAogICAgIGNsYXNzIEFmZmluZVRyYW5zZm9y
bTsKKyAgICBjbGFzcyBDYW52YXNGcmFtZWJ1ZmZlcjsKICAgICBjbGFzcyBGb250OwogICAgIGNs
YXNzIEdlbmVyYXRvcjsKICAgICBjbGFzcyBHcmFkaWVudDsKLSAgICBjbGFzcyBHcmFwaGljc0Nv
bnRleHQzRDsKICAgICBjbGFzcyBHcmFwaGljc0NvbnRleHRQbGF0Zm9ybVByaXZhdGU7CiAgICAg
Y2xhc3MgR3JhcGhpY3NDb250ZXh0UHJpdmF0ZTsKICAgICBjbGFzcyBJbWFnZUJ1ZmZlcjsKICAg
ICBjbGFzcyBLVVJMOwogICAgIGNsYXNzIFBhdGg7CiAgICAgY2xhc3MgUGF0dGVybjsKKyAgICBj
bGFzcyBTaGFyZWRDb250ZXh0M0Q7CiAgICAgY2xhc3MgVGV4dFJ1bjsKIAogICAgIC8vIFRoZXNl
IGJpdHMgY2FuIGJlIE9SZWQgdG9nZXRoZXIgZm9yIGEgdG90YWwgb2YgOCBwb3NzaWJsZSB0ZXh0
IGRyYXdpbmcgbW9kZXMuCkBAIC00MTIsOCArNDEzLDEyIEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsK
ICAgICAgICAgcGF0dGVybiBnZXRIYWlrdVN0cm9rZVN0eWxlKCk7CiAjZW5kaWYKIAotICAgICAg
ICB2b2lkIHNldEdyYXBoaWNzQ29udGV4dDNEKEdyYXBoaWNzQ29udGV4dDNEKiwgY29uc3QgSW50
U2l6ZSYpOworI2lmIFBMQVRGT1JNKFNLSUEpCisgICAgICAgIHZvaWQgc2V0U2hhcmVkQ29udGV4
dDNEKFNoYXJlZENvbnRleHQzRCosIENhbnZhc0ZyYW1lYnVmZmVyKiwgY29uc3QgSW50U2l6ZSYp
OwogICAgICAgICB2b2lkIHN5bmNTb2Z0d2FyZUNhbnZhcygpOworICAgICAgICB1bnNpZ25lZCB0
ZXh0dXJlSWRGb3JDb21wb3NpdG9yKCkgY29uc3Q7CisgICAgICAgIHVuc2lnbmVkIHRleHR1cmVJ
ZEZvckNhbnZhcygpIGNvbnN0OworI2VuZGlmCiAKICAgICBwcml2YXRlOgogICAgICAgICB2b2lk
IHNhdmVQbGF0Zm9ybVN0YXRlKCk7CmRpZmYgLS1naXQgYS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL0dyYXBoaWNzQ29udGV4dDNELmggYi9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBo
aWNzQ29udGV4dDNELmgKaW5kZXggYjU4MzgxMzg4NjY5OGVjYjU2MDU1MzFiZTdmNTZiMGEzOWQ2
NTA2OS4uMDA5ZWZlNWQ0YmFlY2JhNjQxYzQ5NmFiZTEwMGM3MDMxOGQ1OGYyMCAxMDA2NDQKLS0t
IGEvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQzRC5oCisrKyBiL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0M0QuaApAQCAtNzUzLDYgKzc1
MywxMCBAQCBwdWJsaWM6CiAKICAgICBib29sIHN1cHBvcnRzQkdSQSgpOwogCisgICAgdW5zaWdu
ZWQgY3JlYXRlQ29tcG9zaXRvclRleHR1cmUodW5zaWduZWQgd2lkdGgsIHVuc2lnbmVkIGhlaWdo
dCk7CisgICAgdm9pZCBkZWxldGVDb21wb3NpdG9yVGV4dHVyZSh1bnNpZ25lZCBjb21wb3NpdG9y
VGV4dHVyZSk7CisgICAgdm9pZCBjb3B5VGV4dHVyZVRvQ29tcG9zaXRvcih1bnNpZ25lZCBzb3Vy
Y2VUZXh0dXJlLCB1bnNpZ25lZCBjb21wb3NpdG9yVGV4dHVyZSk7CisKICAgcHJpdmF0ZToKICAg
ICBHcmFwaGljc0NvbnRleHQzRChBdHRyaWJ1dGVzIGF0dHJzLCBIb3N0V2luZG93KiBob3N0V2lu
ZG93KTsKIApkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0xh
eWVyLmggYi9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzTGF5ZXIuaAppbmRleCAw
Zjc0Y2Q1Y2IzMzg1ZWU3YmI1YTY4ODAyYjdhZmMyOTc4N2ZmODBmLi41NTRhMWIwZTM0ZTRmMzg2
MmM4YmI5NDJmM2VjNGIwY2ZhMmM4Yzg5IDEwMDY0NAotLS0gYS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL0dyYXBoaWNzTGF5ZXIuaAorKysgYi9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dy
YXBoaWNzTGF5ZXIuaApAQCAtODEsNiArODEsNyBAQCB0eXBlZGVmIHVuc2lnbmVkIExheWVyVHJl
ZUFzVGV4dEJlaGF2aW9yOwogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKK2NsYXNzIENhbnZhc0Zy
YW1lYnVmZmVyOwogY2xhc3MgRmxvYXRQb2ludDNEOwogY2xhc3MgR3JhcGhpY3NDb250ZXh0Owog
Y2xhc3MgSW1hZ2U7CkBAIC0yOTgsNyArMjk5LDggQEAgcHVibGljOgogICAgIHZpcnR1YWwgdm9p
ZCBzZXRDb250ZW50c1RvSW1hZ2UoSW1hZ2UqKSB7IH0KICAgICB2aXJ0dWFsIHZvaWQgc2V0Q29u
dGVudHNUb01lZGlhKFBsYXRmb3JtTGF5ZXIqKSB7IH0gLy8gdmlkZW8gb3IgcGx1Zy1pbgogICAg
IHZpcnR1YWwgdm9pZCBzZXRDb250ZW50c0JhY2tncm91bmRDb2xvcihjb25zdCBDb2xvciYpIHsg
fQotICAgIHZpcnR1YWwgdm9pZCBzZXRDb250ZW50c1RvQ2FudmFzKFBsYXRmb3JtTGF5ZXIqKSB7
IH0KKyAgICB2aXJ0dWFsIHZvaWQgc2V0Q29udGVudHNUb1dlYkdMKFBsYXRmb3JtTGF5ZXIqKSB7
IH0KKyAgICB2aXJ0dWFsIHZvaWQgc2V0Q29udGVudHNUb0NhbnZhczJEKENhbnZhc0ZyYW1lYnVm
ZmVyKikgeyB9CiAgICAgdmlydHVhbCBib29sIGhhc0NvbnRlbnRzTGF5ZXIoKSBjb25zdCB7IHJl
dHVybiBmYWxzZTsgfQogCiAgICAgLy8gQ2FsbGJhY2sgZnJvbSB0aGUgdW5kZXJseWluZyBncmFw
aGljcyBzeXN0ZW0gdG8gZHJhdyBsYXllciBjb250ZW50cy4KZGlmZiAtLWdpdCBhL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vQ2FudmFzMkRMYXllckNocm9taXVtLmNwcCBiL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vQ2FudmFzMkRMYXllckNocm9taXVtLmNw
cApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwLi5kOTBiNmY4YjEzZjkzZWViNGUwM2ZjZmM1NDVkZDk2MWE2OWUxYTRhCi0t
LSAvZGV2L251bGwKKysrIGIvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9DYW52
YXMyRExheWVyQ2hyb21pdW0uY3BwCkBAIC0wLDAgKzEsODcgQEAKKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTAgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucyBhcmUKKyAqIG1ldDoKKyAqCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogZGlzdHJpYnV0aW9uLgor
ICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9m
IGl0cworICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBw
cm9kdWN0cyBkZXJpdmVkIGZyb20KKyAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBw
cmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBB
TkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QK
KyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
IElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIE9XTkVSIE9SIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BF
Q0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAq
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgi
CisKKyNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCisKKyNpbmNsdWRlICJDYW52YXMy
RExheWVyQ2hyb21pdW0uaCIKKworI2luY2x1ZGUgIkNhbnZhc0ZyYW1lYnVmZmVyLmgiCisjaW5j
bHVkZSAiUGxhdGZvcm1Db250ZXh0U2tpYS5oIgorCisjaW5jbHVkZSA8R0xFUzIvZ2wyLmg+CisK
K25hbWVzcGFjZSBXZWJDb3JlIHsKKworUGFzc1JlZlB0cjxDYW52YXMyRExheWVyQ2hyb21pdW0+
IENhbnZhczJETGF5ZXJDaHJvbWl1bTo6Y3JlYXRlKENhbnZhc0ZyYW1lYnVmZmVyKiBmcmFtZWJ1
ZmZlciwgR3JhcGhpY3NMYXllckNocm9taXVtKiBvd25lcikKK3sKKyAgICByZXR1cm4gYWRvcHRS
ZWYobmV3IENhbnZhczJETGF5ZXJDaHJvbWl1bShmcmFtZWJ1ZmZlciwgb3duZXIpKTsKK30KKwor
Q2FudmFzMkRMYXllckNocm9taXVtOjpDYW52YXMyRExheWVyQ2hyb21pdW0oQ2FudmFzRnJhbWVi
dWZmZXIqIGZyYW1lYnVmZmVyLCBHcmFwaGljc0xheWVyQ2hyb21pdW0qIG93bmVyKQorICAgIDog
Q2FudmFzTGF5ZXJDaHJvbWl1bShvd25lcikKKyAgICAsIG1fZnJhbWVidWZmZXIoZnJhbWVidWZm
ZXIpCisgICAgLCBtX3RleHR1cmVDaGFuZ2VkKHRydWUpCit7Cit9CisKK3ZvaWQgQ2FudmFzMkRM
YXllckNocm9taXVtOjp1cGRhdGVDb250ZW50cygpCit7CisgICAgdW5zaWduZWQgdGV4dHVyZUlk
ID0gbV9mcmFtZWJ1ZmZlci0+dGV4dHVyZUlkRm9yQ29tcG9zaXRvcigpOworICAgIGlmIChtX3Rl
eHR1cmVDaGFuZ2VkKSB7CisgICAgICAgIGdsQmluZFRleHR1cmUoR0xfVEVYVFVSRV8yRCwgdGV4
dHVyZUlkKTsKKyAgICAgICAgLy8gU2V0IHRoZSBtaW4tbWFnIGZpbHRlcnMgdG8gbGluZWFyIGFu
ZCB3cmFwIG1vZGVzIHRvIEdMX0NMQU1QX1RPX0VER0UKKyAgICAgICAgLy8gdG8gZ2V0IGFyb3Vu
ZCBOUE9UIHRleHR1cmUgbGltaXRhdGlvbnMgb2YgR0xFUy4KKyAgICAgICAgZ2xUZXhQYXJhbWV0
ZXJmKEdMX1RFWFRVUkVfMkQsIEdMX1RFWFRVUkVfTUlOX0ZJTFRFUiwgR0xfTElORUFSKTsKKyAg
ICAgICAgZ2xUZXhQYXJhbWV0ZXJmKEdMX1RFWFRVUkVfMkQsIEdMX1RFWFRVUkVfTUFHX0ZJTFRF
UiwgR0xfTElORUFSKTsKKyAgICAgICAgZ2xUZXhQYXJhbWV0ZXJmKEdMX1RFWFRVUkVfMkQsIEdM
X1RFWFRVUkVfV1JBUF9TLCBHTF9DTEFNUF9UT19FREdFKTsKKyAgICAgICAgZ2xUZXhQYXJhbWV0
ZXJmKEdMX1RFWFRVUkVfMkQsIEdMX1RFWFRVUkVfV1JBUF9ULCBHTF9DTEFNUF9UT19FREdFKTsK
KyAgICAgICAgbV90ZXh0dXJlQ2hhbmdlZCA9IGZhbHNlOworICAgIH0KKyAgICAvLyBVcGRhdGUg
dGhlIGNvbnRlbnRzIG9mIHRoZSB0ZXh0dXJlIHVzZWQgYnkgdGhlIGNvbXBvc2l0b3IuCisgICAg
aWYgKG1fY29udGVudHNEaXJ0eSkgeworICAgICAgICBtX2ZyYW1lYnVmZmVyLT5zd2FwQnVmZmVy
cygpOworICAgICAgICBtX2NvbnRlbnRzRGlydHkgPSBmYWxzZTsKKyAgICB9Cit9CisKK3ZvaWQg
Q2FudmFzMkRMYXllckNocm9taXVtOjpzZXRDYW52YXNGcmFtZWJ1ZmZlcihDYW52YXNGcmFtZWJ1
ZmZlciogZnJhbWVidWZmZXIpCit7CisgICAgbV9mcmFtZWJ1ZmZlciA9IGZyYW1lYnVmZmVyOwor
fQorCit1bnNpZ25lZCBDYW52YXMyRExheWVyQ2hyb21pdW06OnRleHR1cmVJZCgpCit7CisgICAg
cmV0dXJuIG1fZnJhbWVidWZmZXItPnRleHR1cmVJZEZvckNvbXBvc2l0b3IoKTsKK30KKworfQor
I2VuZGlmIC8vIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKZGlmZiAtLWdpdCBhL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vQ2FudmFzMkRMYXllckNocm9taXVtLmggYi9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0NhbnZhczJETGF5ZXJDaHJvbWl1bS5o
Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAuLjhmYWE1Y2FlYjcxMmVlMTgyZjA0YzVlZTEwMzM4ZWZlMDM2MDRlZWUKLS0t
IC9kZXYvbnVsbAorKysgYi9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0NhbnZh
czJETGF5ZXJDaHJvbWl1bS5oCkBAIC0wLDAgKzEsNjYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTAgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucyBhcmUKKyAqIG1ldDoKKyAqCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
ICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogZGlzdHJpYnV0aW9uLgorICog
ICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0
cworICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9k
dWN0cyBkZXJpdmVkIGZyb20KKyAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlv
ciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQg
QU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAq
IExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElO
IE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lB
TCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisKKyNpZm5kZWYgQ2FudmFzMkRMYXll
ckNocm9taXVtX2gKKyNkZWZpbmUgQ2FudmFzMkRMYXllckNocm9taXVtX2gKKworI2lmIFVTRShB
Q0NFTEVSQVRFRF9DT01QT1NJVElORykKKworI2luY2x1ZGUgIkNhbnZhc0xheWVyQ2hyb21pdW0u
aCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBDYW52YXNGcmFtZWJ1ZmZlcjsKKwor
Ly8gQSBsYXllciBjb250YWluaW5nIGFuIGFjY2VsZXJhdGVkIDJkIGNhbnZhcworY2xhc3MgQ2Fu
dmFzMkRMYXllckNocm9taXVtIDogcHVibGljIENhbnZhc0xheWVyQ2hyb21pdW0geworcHVibGlj
OgorICAgIHN0YXRpYyBQYXNzUmVmUHRyPENhbnZhczJETGF5ZXJDaHJvbWl1bT4gY3JlYXRlKENh
bnZhc0ZyYW1lYnVmZmVyKiwgR3JhcGhpY3NMYXllckNocm9taXVtKiBvd25lcik7CisgICAgdmly
dHVhbCBib29sIGRyYXdzQ29udGVudCgpIHsgcmV0dXJuIHRydWU7IH0KKyAgICB2aXJ0dWFsIHZv
aWQgdXBkYXRlQ29udGVudHMoKTsKKworICAgIHZvaWQgc2V0Q2FudmFzRnJhbWVidWZmZXIoQ2Fu
dmFzRnJhbWVidWZmZXIqKTsKKworcHJvdGVjdGVkOgorICAgIHZpcnR1YWwgdW5zaWduZWQgdGV4
dHVyZUlkKCk7CisKK3ByaXZhdGU6CisgICAgZXhwbGljaXQgQ2FudmFzMkRMYXllckNocm9taXVt
KENhbnZhc0ZyYW1lYnVmZmVyKiwgR3JhcGhpY3NMYXllckNocm9taXVtKiBvd25lcik7CisgICAg
Q2FudmFzRnJhbWVidWZmZXIqIG1fZnJhbWVidWZmZXI7CisgICAgYm9vbCBtX3RleHR1cmVDaGFu
Z2VkOworCisgICAgc3RhdGljIHVuc2lnbmVkIG1fc2hhZGVyUHJvZ3JhbUlkOworfTsKKworfQor
I2VuZGlmIC8vIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKKworI2VuZGlmCmRpZmYgLS1n
aXQgYS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0NhbnZhc0xheWVyQ2hyb21p
dW0uY3BwIGIvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9DYW52YXNMYXllckNo
cm9taXVtLmNwcAppbmRleCBiYmYwOTFjMmE2NzBkN2MzNmU5MjM4ZTFiOGNjMzUwYmEzODNlODEw
Li4yMjg2OWQ3MDZhZTQ0MDdjNWVjZDg5MmFkMTVjMGNmY2UxMmMwYTAxIDEwMDY0NAotLS0gYS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0NhbnZhc0xheWVyQ2hyb21pdW0uY3Bw
CisrKyBiL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vQ2FudmFzTGF5ZXJDaHJv
bWl1bS5jcHAKQEAgLTM0LDEyICszNCwxNCBAQAogCiAjaW5jbHVkZSAiQ2FudmFzTGF5ZXJDaHJv
bWl1bS5oIgogCi0jaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0M0QuaCIKICNpbmNsdWRlICJMYXll
clJlbmRlcmVyQ2hyb21pdW0uaCIKKwogI2luY2x1ZGUgPEdMRVMyL2dsMi5oPgogCiBuYW1lc3Bh
Y2UgV2ViQ29yZSB7CiAKK3Vuc2lnbmVkIENhbnZhc0xheWVyQ2hyb21pdW06Om1fc2hhZGVyUHJv
Z3JhbUlkID0gMDsKKwogQ2FudmFzTGF5ZXJDaHJvbWl1bTo6U2hhcmVkVmFsdWVzOjpTaGFyZWRW
YWx1ZXMoKQogICAgIDogbV9jYW52YXNTaGFkZXJQcm9ncmFtKDApCiAgICAgLCBtX3NoYWRlclNh
bXBsZXJMb2NhdGlvbigtMSkKQEAgLTkzLDQ5ICs5NSwxMyBAQCBDYW52YXNMYXllckNocm9taXVt
OjpTaGFyZWRWYWx1ZXM6On5TaGFyZWRWYWx1ZXMoKQogICAgICAgICBHTEMoZ2xEZWxldGVQcm9n
cmFtKG1fY2FudmFzU2hhZGVyUHJvZ3JhbSkpOwogfQogCi1QYXNzUmVmUHRyPENhbnZhc0xheWVy
Q2hyb21pdW0+IENhbnZhc0xheWVyQ2hyb21pdW06OmNyZWF0ZShHcmFwaGljc0xheWVyQ2hyb21p
dW0qIG93bmVyKQotewotICAgIHJldHVybiBhZG9wdFJlZihuZXcgQ2FudmFzTGF5ZXJDaHJvbWl1
bShvd25lcikpOwotfQotCiBDYW52YXNMYXllckNocm9taXVtOjpDYW52YXNMYXllckNocm9taXVt
KEdyYXBoaWNzTGF5ZXJDaHJvbWl1bSogb3duZXIpCiAgICAgOiBMYXllckNocm9taXVtKG93bmVy
KQotICAgICwgbV9jb250ZXh0KDApCi0gICAgLCBtX3RleHR1cmVJZCgwKQotICAgICwgbV90ZXh0
dXJlQ2hhbmdlZChmYWxzZSkKLXsKLX0KLQotdm9pZCBDYW52YXNMYXllckNocm9taXVtOjp1cGRh
dGVDb250ZW50cygpCiB7Ci0gICAgQVNTRVJUKG1fY29udGV4dCk7Ci0gICAgaWYgKG1fdGV4dHVy
ZUNoYW5nZWQpIHsKLSAgICAgICAgZ2xCaW5kVGV4dHVyZShHTF9URVhUVVJFXzJELCBtX3RleHR1
cmVJZCk7Ci0gICAgICAgIC8vIFNldCB0aGUgbWluLW1hZyBmaWx0ZXJzIHRvIGxpbmVhciBhbmQg
d3JhcCBtb2RlcyB0byBHTF9DTEFNUF9UT19FREdFCi0gICAgICAgIC8vIHRvIGdldCBhcm91bmQg
TlBPVCB0ZXh0dXJlIGxpbWl0YXRpb25zIG9mIEdMRVMuCi0gICAgICAgIGdsVGV4UGFyYW1ldGVy
ZihHTF9URVhUVVJFXzJELCBHTF9URVhUVVJFX01JTl9GSUxURVIsIEdMX0xJTkVBUik7Ci0gICAg
ICAgIGdsVGV4UGFyYW1ldGVyZihHTF9URVhUVVJFXzJELCBHTF9URVhUVVJFX01BR19GSUxURVIs
IEdMX0xJTkVBUik7Ci0gICAgICAgIGdsVGV4UGFyYW1ldGVyZihHTF9URVhUVVJFXzJELCBHTF9U
RVhUVVJFX1dSQVBfUywgR0xfQ0xBTVBfVE9fRURHRSk7Ci0gICAgICAgIGdsVGV4UGFyYW1ldGVy
ZihHTF9URVhUVVJFXzJELCBHTF9URVhUVVJFX1dSQVBfVCwgR0xfQ0xBTVBfVE9fRURHRSk7Ci0g
ICAgICAgIG1fdGV4dHVyZUNoYW5nZWQgPSBmYWxzZTsKLSAgICB9Ci0gICAgLy8gVXBkYXRlIHRo
ZSBjb250ZW50cyBvZiB0aGUgdGV4dHVyZSB1c2VkIGJ5IHRoZSBjb21wb3NpdG9yLgotICAgIGlm
IChtX2NvbnRlbnRzRGlydHkpIHsKLSAgICAgICAgaWYgKG1fcHJlcGFyZVRleHR1cmVDYWxsYmFj
aykKLSAgICAgICAgICAgIG1fcHJlcGFyZVRleHR1cmVDYWxsYmFjay0+d2lsbFByZXBhcmVUZXh0
dXJlKCk7Ci0gICAgICAgIG1fY29udGV4dC0+cHJlcGFyZVRleHR1cmUoKTsKLSAgICAgICAgbV9j
b250ZW50c0RpcnR5ID0gZmFsc2U7Ci0gICAgfQogfQogCi12b2lkIENhbnZhc0xheWVyQ2hyb21p
dW06OnNldENvbnRleHQoY29uc3QgR3JhcGhpY3NDb250ZXh0M0QqIGNvbnRleHQpCitDYW52YXNM
YXllckNocm9taXVtOjp+Q2FudmFzTGF5ZXJDaHJvbWl1bSgpCiB7Ci0gICAgbV9jb250ZXh0ID0g
Y29uc3RfY2FzdDxHcmFwaGljc0NvbnRleHQzRCo+KGNvbnRleHQpOwotCi0gICAgdW5zaWduZWQg
aW50IHRleHR1cmVJZCA9IG1fY29udGV4dC0+cGxhdGZvcm1UZXh0dXJlKCk7Ci0gICAgaWYgKHRl
eHR1cmVJZCAhPSBtX3RleHR1cmVJZCkKLSAgICAgICAgbV90ZXh0dXJlQ2hhbmdlZCA9IHRydWU7
Ci0gICAgbV90ZXh0dXJlSWQgPSB0ZXh0dXJlSWQ7CiB9CiAKIHZvaWQgQ2FudmFzTGF5ZXJDaHJv
bWl1bTo6ZHJhdygpCkBAIC0xNDQsMTIgKzExMCwxMyBAQCB2b2lkIENhbnZhc0xheWVyQ2hyb21p
dW06OmRyYXcoKQogICAgIGNvbnN0IENhbnZhc0xheWVyQ2hyb21pdW06OlNoYXJlZFZhbHVlcyog
c3YgPSBsYXllclJlbmRlcmVyKCktPmNhbnZhc0xheWVyU2hhcmVkVmFsdWVzKCk7CiAgICAgQVNT
RVJUKHN2ICYmIHN2LT5pbml0aWFsaXplZCgpKTsKICAgICBHTEMoZ2xBY3RpdmVUZXh0dXJlKEdM
X1RFWFRVUkUwKSk7Ci0gICAgR0xDKGdsQmluZFRleHR1cmUoR0xfVEVYVFVSRV8yRCwgbV90ZXh0
dXJlSWQpKTsKKyAgICBHTEMoZ2xCaW5kVGV4dHVyZShHTF9URVhUVVJFXzJELCB0ZXh0dXJlSWQo
KSkpOwogICAgIGxheWVyUmVuZGVyZXIoKS0+dXNlU2hhZGVyKHN2LT5jYW52YXNTaGFkZXJQcm9n
cmFtKCkpOwogICAgIEdMQyhnbFVuaWZvcm0xaShzdi0+c2hhZGVyU2FtcGxlckxvY2F0aW9uKCks
IDApKTsKICAgICBkcmF3VGV4dHVyZWRRdWFkKGxheWVyUmVuZGVyZXIoKS0+cHJvamVjdGlvbk1h
dHJpeCgpLCBkcmF3VHJhbnNmb3JtKCksCiAgICAgICAgICAgICAgICAgICAgICBib3VuZHMoKS53
aWR0aCgpLCBib3VuZHMoKS5oZWlnaHQoKSwgZHJhd09wYWNpdHkoKSwKICAgICAgICAgICAgICAg
ICAgICAgIHN2LT5zaGFkZXJNYXRyaXhMb2NhdGlvbigpLCBzdi0+c2hhZGVyQWxwaGFMb2NhdGlv
bigpKTsKKwogfQogCiB9CmRpZmYgLS1naXQgYS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2No
cm9taXVtL0NhbnZhc0xheWVyQ2hyb21pdW0uaCBiL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2hyb21pdW0vQ2FudmFzTGF5ZXJDaHJvbWl1bS5oCmluZGV4IDA1M2VmZmZhMDFlMTQyODM4MTIx
NDUzYzFhNGI4YTE5NGI2ZmE0YzEuLmQ2ZGE2YWM0NGU5MTA3YWYxMDBlNTRkM2VjYWUzNjU1NjJk
ZTBkMmYgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vQ2Fu
dmFzTGF5ZXJDaHJvbWl1bS5oCisrKyBiL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21p
dW0vQ2FudmFzTGF5ZXJDaHJvbWl1bS5oCkBAIC0zOCwxNyArMzgsMTMgQEAKIAogbmFtZXNwYWNl
IFdlYkNvcmUgewogCi1jbGFzcyBHcmFwaGljc0NvbnRleHQzRDsKLQotLy8gQSBMYXllciBjb250
YWluaW5nIGEgV2ViR0wgb3IgYWNjZWxlcmF0ZWQgMmQgY2FudmFzCisvLyBCYXNlIGNsYXNzIGZv
ciBXZWJHTCBhbmQgYWNjZWxlcmF0ZWQgMmQgY2FudmFzZXMuCiBjbGFzcyBDYW52YXNMYXllckNo
cm9taXVtIDogcHVibGljIExheWVyQ2hyb21pdW0gewogcHVibGljOgotICAgIHN0YXRpYyBQYXNz
UmVmUHRyPENhbnZhc0xheWVyQ2hyb21pdW0+IGNyZWF0ZShHcmFwaGljc0xheWVyQ2hyb21pdW0q
IG93bmVyID0gMCk7Ci0gICAgdmlydHVhbCBib29sIGRyYXdzQ29udGVudCgpIHsgcmV0dXJuIG1f
Y29udGV4dDsgfQotICAgIHZpcnR1YWwgdm9pZCB1cGRhdGVDb250ZW50cygpOwotICAgIHZpcnR1
YWwgdm9pZCBkcmF3KCk7CisgICAgZXhwbGljaXQgQ2FudmFzTGF5ZXJDaHJvbWl1bShHcmFwaGlj
c0xheWVyQ2hyb21pdW0qIG93bmVyKTsKKyAgICB2aXJ0dWFsIH5DYW52YXNMYXllckNocm9taXVt
KCk7CiAKLSAgICB2b2lkIHNldENvbnRleHQoY29uc3QgR3JhcGhpY3NDb250ZXh0M0QqIGNvbnRl
eHQpOworICAgIHZpcnR1YWwgdm9pZCBkcmF3KCk7CiAKICAgICBjbGFzcyBTaGFyZWRWYWx1ZXMg
ewogICAgIHB1YmxpYzoKQEAgLTY5LDIxICs2NSwxNiBAQCBwdWJsaWM6CiAgICAgICAgIGJvb2wg
bV9pbml0aWFsaXplZDsKICAgICB9OwogCi0gICAgY2xhc3MgUHJlcGFyZVRleHR1cmVDYWxsYmFj
ayA6IHB1YmxpYyBOb25jb3B5YWJsZSB7Ci0gICAgcHVibGljOgotICAgICAgICB2aXJ0dWFsIHZv
aWQgd2lsbFByZXBhcmVUZXh0dXJlKCkgPSAwOwotICAgIH07Ci0gICAgdm9pZCBzZXRQcmVwYXJl
VGV4dHVyZUNhbGxiYWNrKFBhc3NPd25QdHI8UHJlcGFyZVRleHR1cmVDYWxsYmFjaz4gY2FsbGJh
Y2spIHsgbV9wcmVwYXJlVGV4dHVyZUNhbGxiYWNrID0gY2FsbGJhY2s7IH0KK3Byb3RlY3RlZDoK
KyAgICB2aXJ0dWFsIHVuc2lnbmVkIHRleHR1cmVJZCgpID0gMDsKIAogcHJpdmF0ZToKLSAgICBl
eHBsaWNpdCBDYW52YXNMYXllckNocm9taXVtKEdyYXBoaWNzTGF5ZXJDaHJvbWl1bSogb3duZXIp
OwotICAgIEdyYXBoaWNzQ29udGV4dDNEKiBtX2NvbnRleHQ7Ci0gICAgdW5zaWduZWQgbV90ZXh0
dXJlSWQ7CiAgICAgYm9vbCBtX3RleHR1cmVDaGFuZ2VkOwotICAgIE93blB0cjxQcmVwYXJlVGV4
dHVyZUNhbGxiYWNrPiBtX3ByZXBhcmVUZXh0dXJlQ2FsbGJhY2s7CisKKyAgICBzdGF0aWMgdW5z
aWduZWQgbV9zaGFkZXJQcm9ncmFtSWQ7CiB9OwogCiB9CiAjZW5kaWYgLy8gVVNFKEFDQ0VMRVJB
VEVEX0NPTVBPU0lUSU5HKQogCi0jZW5kaWYKKyNlbmRpZiAvLyBDYW52YXNMYXllckNocm9taXVt
X2gKZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vR0xFUzJD
YW52YXMuY3BwIGIvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9HTEVTMkNhbnZh
cy5jcHAKaW5kZXggODJkNGMwYjAzM2ExNGY5MWU1NjZmN2I0ZWVhMDhiMDY2OTJlYmJkMy4uZTFk
MTk2N2JmNGMwMjg3MWM0ZjhlNzFjYWEyYTQwZGU1NDY4ZjY1MyAxMDA2NDQKLS0tIGEvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9HTEVTMkNhbnZhcy5jcHAKKysrIGIvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9HTEVTMkNhbnZhcy5jcHAKQEAgLTMyLDEwICsz
MiwxMiBAQAogCiAjaW5jbHVkZSAiR0xFUzJDYW52YXMuaCIKIAorI2luY2x1ZGUgIkNhbnZhc0Zy
YW1lYnVmZmVyLmgiCiAjaW5jbHVkZSAiRmxvYXRSZWN0LmgiCiAjaW5jbHVkZSAiR3JhcGhpY3ND
b250ZXh0M0QuaCIKICNpbmNsdWRlICJJbnRSZWN0LmgiCiAjaW5jbHVkZSAiUGxhdGZvcm1TdHJp
bmcuaCIKKyNpbmNsdWRlICJTaGFyZWRDb250ZXh0M0QuaCIKICNpbmNsdWRlICJTb2xpZEZpbGxT
aGFkZXIuaCIKICNpbmNsdWRlICJUZXhTaGFkZXIuaCIKICNpbmNsdWRlICJUZXh0dXJlLmgiCkBA
IC02MSwzNyArNjMsNTAgQEAgc3RydWN0IEdMRVMyQ2FudmFzOjpTdGF0ZSB7CiAgICAgQWZmaW5l
VHJhbnNmb3JtIG1fY3RtOwogfTsKIAotR0xFUzJDYW52YXM6OkdMRVMyQ2FudmFzKEdyYXBoaWNz
Q29udGV4dDNEKiBjb250ZXh0LCBjb25zdCBJbnRTaXplJiBzaXplKQotICAgIDogbV9jb250ZXh0
KGNvbnRleHQpCitHTEVTMkNhbnZhczo6R0xFUzJDYW52YXMoU2hhcmVkQ29udGV4dDNEKiBjb250
ZXh0LCBDYW52YXNGcmFtZWJ1ZmZlciogZnJhbWVidWZmZXIsIGNvbnN0IEludFNpemUmIHNpemUp
CisgICAgOiBtX3NpemUoc2l6ZSkKKyAgICAsIG1fY29udGV4dChjb250ZXh0KQorICAgICwgbV9m
cmFtZWJ1ZmZlcihmcmFtZWJ1ZmZlcikKICAgICAsIG1fc3RhdGUoMCkKLSAgICAsIG1fcXVhZFZl
cnRpY2VzKDApCi0gICAgLCBtX3NvbGlkRmlsbFNoYWRlcihTb2xpZEZpbGxTaGFkZXI6OmNyZWF0
ZShjb250ZXh0KSkKLSAgICAsIG1fdGV4U2hhZGVyKFRleFNoYWRlcjo6Y3JlYXRlKGNvbnRleHQp
KQogewogICAgIG1fZmxpcE1hdHJpeC50cmFuc2xhdGUoLTEuMGYsIDEuMGYpOwogICAgIG1fZmxp
cE1hdHJpeC5zY2FsZSgyLjBmIC8gc2l6ZS53aWR0aCgpLCAtMi4wZiAvIHNpemUuaGVpZ2h0KCkp
OwogCi0gICAgbV9jb250ZXh0LT5yZXNoYXBlKHNpemUud2lkdGgoKSwgc2l6ZS5oZWlnaHQoKSk7
Ci0gICAgbV9jb250ZXh0LT52aWV3cG9ydCgwLCAwLCBzaXplLndpZHRoKCksIHNpemUuaGVpZ2h0
KCkpOwotCiAgICAgbV9zdGF0ZVN0YWNrLmFwcGVuZChTdGF0ZSgpKTsKICAgICBtX3N0YXRlID0g
Jm1fc3RhdGVTdGFjay5sYXN0KCk7Ci0KLSAgICAvLyBGb3JjZSB0aGUgc291cmNlIG92ZXIgY29t
cG9zaXRlIG1vZGUgdG8gYmUgYXBwbGllZC4KLSAgICBtX2xhc3RDb21wb3NpdGVPcCA9IENvbXBv
c2l0ZUNsZWFyOwotICAgIGFwcGx5Q29tcG9zaXRlT3BlcmF0b3IoQ29tcG9zaXRlU291cmNlT3Zl
cik7CiB9CiAKIEdMRVMyQ2FudmFzOjp+R0xFUzJDYW52YXMoKQogewotICAgIG1fY29udGV4dC0+
ZGVsZXRlQnVmZmVyKG1fcXVhZFZlcnRpY2VzKTsKK30KKwordm9pZCBHTEVTMkNhbnZhczo6c3dh
cEJ1ZmZlcnMoKQoreworICAgIG1fZnJhbWVidWZmZXItPnN3YXBCdWZmZXJzKCk7Cit9CisKK3Zv
aWQgR0xFUzJDYW52YXM6OmJpbmRGcmFtZWJ1ZmZlcigpCit7CisgICAgbV9mcmFtZWJ1ZmZlci0+
YmluZCgpOworfQorCit1bnNpZ25lZCBHTEVTMkNhbnZhczo6dGV4dHVyZUlkRm9yQ29tcG9zaXRv
cigpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fZnJhbWVidWZmZXItPnRleHR1cmVJZEZvckNvbXBv
c2l0b3IoKTsKK30KKwordW5zaWduZWQgR0xFUzJDYW52YXM6OnRleHR1cmVJZEZvckNhbnZhcygp
IGNvbnN0Cit7CisgICAgcmV0dXJuIG1fZnJhbWVidWZmZXItPnRleHR1cmVJZEZvckNhbnZhcygp
OwogfQogCiB2b2lkIEdMRVMyQ2FudmFzOjpjbGVhclJlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0
KQogeworICAgIGJpbmRGcmFtZWJ1ZmZlcigpOwogICAgIGlmIChtX3N0YXRlLT5tX2N0bS5pc0lk
ZW50aXR5KCkpIHsKLSAgICAgICAgbV9jb250ZXh0LT5zY2lzc29yKHJlY3QueCgpLCByZWN0Lnko
KSwgcmVjdC53aWR0aCgpLCByZWN0LmhlaWdodCgpKTsKKyAgICAgICAgbV9jb250ZXh0LT5zY2lz
c29yKHJlY3QpOwogICAgICAgICBtX2NvbnRleHQtPmVuYWJsZShHcmFwaGljc0NvbnRleHQzRDo6
U0NJU1NPUl9URVNUKTsKKyAgICAgICAgbV9jb250ZXh0LT5jbGVhckNvbG9yKENvbG9yKFJHQkEz
MigwKSkpOwogICAgICAgICBtX2NvbnRleHQtPmNsZWFyKEdyYXBoaWNzQ29udGV4dDNEOjpDT0xP
Ul9CVUZGRVJfQklUKTsKICAgICAgICAgbV9jb250ZXh0LT5kaXNhYmxlKEdyYXBoaWNzQ29udGV4
dDNEOjpTQ0lTU09SX1RFU1QpOwogICAgIH0gZWxzZSB7CkBAIC0xMDQsMTYgKzExOSwxNyBAQCB2
b2lkIEdMRVMyQ2FudmFzOjpjbGVhclJlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0KQogCiB2b2lk
IEdMRVMyQ2FudmFzOjpmaWxsUmVjdChjb25zdCBGbG9hdFJlY3QmIHJlY3QsIGNvbnN0IENvbG9y
JiBjb2xvciwgQ29sb3JTcGFjZSBjb2xvclNwYWNlKQogewotICAgIGFwcGx5Q29tcG9zaXRlT3Bl
cmF0b3IobV9zdGF0ZS0+bV9jb21wb3NpdGVPcCk7Ci0KLSAgICBtX2NvbnRleHQtPmJpbmRCdWZm
ZXIoR3JhcGhpY3NDb250ZXh0M0Q6OkFSUkFZX0JVRkZFUiwgZ2V0UXVhZFZlcnRpY2VzKCkpOwor
ICAgIG1fY29udGV4dC0+YXBwbHlDb21wb3NpdGVPcGVyYXRvcihtX3N0YXRlLT5tX2NvbXBvc2l0
ZU9wKTsKKyAgICBtX2NvbnRleHQtPnVzZVF1YWRWZXJ0aWNlcygpOwogCiAgICAgQWZmaW5lVHJh
bnNmb3JtIG1hdHJpeChtX2ZsaXBNYXRyaXgpOwogICAgIG1hdHJpeC5tdWx0TGVmdChtX3N0YXRl
LT5tX2N0bSk7CiAgICAgbWF0cml4LnRyYW5zbGF0ZShyZWN0LngoKSwgcmVjdC55KCkpOwogICAg
IG1hdHJpeC5zY2FsZShyZWN0LndpZHRoKCksIHJlY3QuaGVpZ2h0KCkpOwotICAgIG1fc29saWRG
aWxsU2hhZGVyLT51c2UobWF0cml4LCBjb2xvcik7CiAKKyAgICBtX2NvbnRleHQtPnVzZUZpbGxT
b2xpZFByb2dyYW0oY29sb3IsIG1hdHJpeCk7CisKKyAgICBiaW5kRnJhbWVidWZmZXIoKTsKICAg
ICBtX2NvbnRleHQtPmRyYXdBcnJheXMoR3JhcGhpY3NDb250ZXh0M0Q6OlRSSUFOR0xFX1NUUklQ
LCAwLCA0KTsKIH0KIApAQCAtMTY1LDIxICsxODEsMzMgQEAgdm9pZCBHTEVTMkNhbnZhczo6cmVz
dG9yZSgpCiAgICAgbV9zdGF0ZSA9ICZtX3N0YXRlU3RhY2subGFzdCgpOwogfQogCit2b2lkIEdM
RVMyQ2FudmFzOjpkcmF3VGV4dHVyZWRSZWN0KHVuc2lnbmVkIHRleHR1cmUsIGNvbnN0IEludFNp
emUmIHRleHR1cmVTaXplLCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsIGNvbnN0IEZsb2F0UmVj
dCYgZHN0UmVjdCwgQ29sb3JTcGFjZSBjb2xvclNwYWNlLCBDb21wb3NpdGVPcGVyYXRvciBjb21w
b3NpdGVPcCkKK3sKKyAgICBtX2NvbnRleHQtPmFwcGx5Q29tcG9zaXRlT3BlcmF0b3IoY29tcG9z
aXRlT3ApOworCisgICAgbV9jb250ZXh0LT51c2VRdWFkVmVydGljZXMoKTsKKyAgICBtX2NvbnRl
eHQtPnNldEFjdGl2ZVRleHR1cmUoR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkUwKTsKKworICAg
IG1fY29udGV4dC0+YmluZFRleHR1cmUoR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQsIHRl
eHR1cmUpOworCisgICAgZHJhd1F1YWQodGV4dHVyZVNpemUsIHNyY1JlY3QsIGRzdFJlY3QsIG1f
c3RhdGUtPm1fY3RtLCBtX3N0YXRlLT5tX2FscGhhKTsKK30KKwogdm9pZCBHTEVTMkNhbnZhczo6
ZHJhd1RleHR1cmVkUmVjdChUZXh0dXJlKiB0ZXh0dXJlLCBjb25zdCBGbG9hdFJlY3QmIHNyY1Jl
Y3QsIGNvbnN0IEZsb2F0UmVjdCYgZHN0UmVjdCwgQ29sb3JTcGFjZSBjb2xvclNwYWNlLCBDb21w
b3NpdGVPcGVyYXRvciBjb21wb3NpdGVPcCkKIHsKICAgICBkcmF3VGV4dHVyZWRSZWN0KHRleHR1
cmUsIHNyY1JlY3QsIGRzdFJlY3QsIG1fc3RhdGUtPm1fY3RtLCBtX3N0YXRlLT5tX2FscGhhLCBj
b2xvclNwYWNlLCBjb21wb3NpdGVPcCk7CiB9CiAKKwogdm9pZCBHTEVTMkNhbnZhczo6ZHJhd1Rl
eHR1cmVkUmVjdChUZXh0dXJlKiB0ZXh0dXJlLCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsIGNv
bnN0IEZsb2F0UmVjdCYgZHN0UmVjdCwgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiB0cmFuc2Zvcm0s
IGZsb2F0IGFscGhhLCBDb2xvclNwYWNlIGNvbG9yU3BhY2UsIENvbXBvc2l0ZU9wZXJhdG9yIGNv
bXBvc2l0ZU9wKQogewotICAgIGFwcGx5Q29tcG9zaXRlT3BlcmF0b3IoY29tcG9zaXRlT3ApOwot
Ci0gICAgbV9jb250ZXh0LT5iaW5kQnVmZmVyKEdyYXBoaWNzQ29udGV4dDNEOjpBUlJBWV9CVUZG
RVIsIGdldFF1YWRWZXJ0aWNlcygpKTsKLSAgICBjaGVja0dMRXJyb3IoImdsQmluZEJ1ZmZlciIp
OwotCisgICAgbV9jb250ZXh0LT5hcHBseUNvbXBvc2l0ZU9wZXJhdG9yKGNvbXBvc2l0ZU9wKTsK
ICAgICBjb25zdCBUaWxpbmdEYXRhJiB0aWxlcyA9IHRleHR1cmUtPnRpbGVzKCk7CiAgICAgSW50
UmVjdCB0aWxlSWR4UmVjdCA9IHRpbGVzLm92ZXJsYXBwZWRUaWxlSW5kaWNlcyhzcmNSZWN0KTsK
IAorICAgIG1fY29udGV4dC0+dXNlUXVhZFZlcnRpY2VzKCk7CisgICAgbV9jb250ZXh0LT5zZXRB
Y3RpdmVUZXh0dXJlKEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFMCk7CisKICAgICBmb3IgKGlu
dCB5ID0gdGlsZUlkeFJlY3QueSgpOyB5IDw9IHRpbGVJZHhSZWN0LmJvdHRvbSgpOyB5KyspIHsK
ICAgICAgICAgZm9yIChpbnQgeCA9IHRpbGVJZHhSZWN0LngoKTsgeCA8PSB0aWxlSWR4UmVjdC5y
aWdodCgpOyB4KyspCiAgICAgICAgICAgICBkcmF3VGV4dHVyZWRSZWN0VGlsZSh0ZXh0dXJlLCB0
aWxlcy50aWxlSW5kZXgoeCwgeSksIHNyY1JlY3QsIGRzdFJlY3QsIHRyYW5zZm9ybSwgYWxwaGEp
OwpAQCAtMTkzLDcgKzIyMSw2IEBAIHZvaWQgR0xFUzJDYW52YXM6OmRyYXdUZXh0dXJlZFJlY3RU
aWxlKFRleHR1cmUqIHRleHR1cmUsIGludCB0aWxlLCBjb25zdCBGbG9hdFJlCiAKICAgICBjb25z
dCBUaWxpbmdEYXRhJiB0aWxlcyA9IHRleHR1cmUtPnRpbGVzKCk7CiAKLSAgICBtX2NvbnRleHQt
PmFjdGl2ZVRleHR1cmUoR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkUwKTsKICAgICB0ZXh0dXJl
LT5iaW5kVGlsZSh0aWxlKTsKIAogICAgIEZsb2F0UmVjdCBzcmNSZWN0Q2xpcHBlZEluVGlsZVNw
YWNlOwpAQCAtMjAyLDE4ICsyMjksMjQgQEAgdm9pZCBHTEVTMkNhbnZhczo6ZHJhd1RleHR1cmVk
UmVjdFRpbGUoVGV4dHVyZSogdGV4dHVyZSwgaW50IHRpbGUsIGNvbnN0IEZsb2F0UmUKIAogICAg
IEludFJlY3QgdGlsZUJvdW5kc1dpdGhCb3JkZXIgPSB0aWxlcy50aWxlQm91bmRzV2l0aEJvcmRl
cih0aWxlKTsKIAorICAgIGRyYXdRdWFkKEludFNpemUodGlsZUJvdW5kc1dpdGhCb3JkZXIud2lk
dGgoKSwgdGlsZUJvdW5kc1dpdGhCb3JkZXIuaGVpZ2h0KCkpLCBzcmNSZWN0Q2xpcHBlZEluVGls
ZVNwYWNlLCBkc3RSZWN0SW50ZXJzZWN0ZWQsIHRyYW5zZm9ybSwgYWxwaGEpOworfQorCit2b2lk
IEdMRVMyQ2FudmFzOjpkcmF3UXVhZChjb25zdCBJbnRTaXplJiB0ZXh0dXJlU2l6ZSwgY29uc3Qg
RmxvYXRSZWN0JiBzcmNSZWN0LCBjb25zdCBGbG9hdFJlY3QmIGRzdFJlY3QsIGNvbnN0IEFmZmlu
ZVRyYW5zZm9ybSYgdHJhbnNmb3JtLCBmbG9hdCBhbHBoYSkKK3sKICAgICBBZmZpbmVUcmFuc2Zv
cm0gbWF0cml4KG1fZmxpcE1hdHJpeCk7CiAgICAgbWF0cml4Lm11bHRMZWZ0KHRyYW5zZm9ybSk7
Ci0gICAgbWF0cml4LnRyYW5zbGF0ZShkc3RSZWN0SW50ZXJzZWN0ZWQueCgpLCBkc3RSZWN0SW50
ZXJzZWN0ZWQueSgpKTsKLSAgICBtYXRyaXguc2NhbGUoZHN0UmVjdEludGVyc2VjdGVkLndpZHRo
KCksIGRzdFJlY3RJbnRlcnNlY3RlZC5oZWlnaHQoKSk7CisgICAgbWF0cml4LnRyYW5zbGF0ZShk
c3RSZWN0LngoKSwgZHN0UmVjdC55KCkpOworICAgIG1hdHJpeC5zY2FsZShkc3RSZWN0LndpZHRo
KCksIGRzdFJlY3QuaGVpZ2h0KCkpOwogCiAgICAgQWZmaW5lVHJhbnNmb3JtIHRleE1hdHJpeDsK
LSAgICB0ZXhNYXRyaXguc2NhbGUoMS4wZiAvIHRpbGVCb3VuZHNXaXRoQm9yZGVyLndpZHRoKCks
IDEuMGYgLyB0aWxlQm91bmRzV2l0aEJvcmRlci5oZWlnaHQoKSk7Ci0gICAgdGV4TWF0cml4LnRy
YW5zbGF0ZShzcmNSZWN0Q2xpcHBlZEluVGlsZVNwYWNlLngoKSwgc3JjUmVjdENsaXBwZWRJblRp
bGVTcGFjZS55KCkpOwotICAgIHRleE1hdHJpeC5zY2FsZShzcmNSZWN0Q2xpcHBlZEluVGlsZVNw
YWNlLndpZHRoKCksIHNyY1JlY3RDbGlwcGVkSW5UaWxlU3BhY2UuaGVpZ2h0KCkpOworICAgIHRl
eE1hdHJpeC5zY2FsZSgxLjBmIC8gdGV4dHVyZVNpemUud2lkdGgoKSwgMS4wZiAvIHRleHR1cmVT
aXplLmhlaWdodCgpKTsKKyAgICB0ZXhNYXRyaXgudHJhbnNsYXRlKHNyY1JlY3QueCgpLCBzcmNS
ZWN0LnkoKSk7CisgICAgdGV4TWF0cml4LnNjYWxlKHNyY1JlY3Qud2lkdGgoKSwgc3JjUmVjdC5o
ZWlnaHQoKSk7CiAKLSAgICBtX3RleFNoYWRlci0+dXNlKG1hdHJpeCwgdGV4TWF0cml4LCAwLCBh
bHBoYSk7CisgICAgYmluZEZyYW1lYnVmZmVyKCk7CiAKKyAgICBtX2NvbnRleHQtPnVzZVRleHR1
cmVQcm9ncmFtKGFscGhhLCBtYXRyaXgsIHRleE1hdHJpeCk7CiAgICAgbV9jb250ZXh0LT5kcmF3
QXJyYXlzKEdyYXBoaWNzQ29udGV4dDNEOjpUUklBTkdMRV9TVFJJUCwgMCwgNCk7CiAgICAgY2hl
Y2tHTEVycm9yKCJnbERyYXdBcnJheXMiKTsKIH0KQEAgLTIyMyw5OCArMjU2LDE0IEBAIHZvaWQg
R0xFUzJDYW52YXM6OnNldENvbXBvc2l0ZU9wZXJhdGlvbihDb21wb3NpdGVPcGVyYXRvciBvcCkK
ICAgICBtX3N0YXRlLT5tX2NvbXBvc2l0ZU9wID0gb3A7CiB9CiAKLXZvaWQgR0xFUzJDYW52YXM6
OmFwcGx5Q29tcG9zaXRlT3BlcmF0b3IoQ29tcG9zaXRlT3BlcmF0b3Igb3ApCi17Ci0gICAgaWYg
KG9wID09IG1fbGFzdENvbXBvc2l0ZU9wKQotICAgICAgICByZXR1cm47Ci0KLSAgICBzd2l0Y2gg
KG9wKSB7Ci0gICAgY2FzZSBDb21wb3NpdGVDbGVhcjoKLSAgICAgICAgbV9jb250ZXh0LT5lbmFi
bGUoR3JhcGhpY3NDb250ZXh0M0Q6OkJMRU5EKTsKLSAgICAgICAgbV9jb250ZXh0LT5ibGVuZEZ1
bmMoR3JhcGhpY3NDb250ZXh0M0Q6OlpFUk8sIEdyYXBoaWNzQ29udGV4dDNEOjpaRVJPKTsKLSAg
ICAgICAgYnJlYWs7Ci0gICAgY2FzZSBDb21wb3NpdGVDb3B5OgotICAgICAgICBtX2NvbnRleHQt
PmRpc2FibGUoR3JhcGhpY3NDb250ZXh0M0Q6OkJMRU5EKTsKLSAgICAgICAgYnJlYWs7Ci0gICAg
Y2FzZSBDb21wb3NpdGVTb3VyY2VPdmVyOgotICAgICAgICBtX2NvbnRleHQtPmVuYWJsZShHcmFw
aGljc0NvbnRleHQzRDo6QkxFTkQpOwotICAgICAgICBtX2NvbnRleHQtPmJsZW5kRnVuYyhHcmFw
aGljc0NvbnRleHQzRDo6T05FLCBHcmFwaGljc0NvbnRleHQzRDo6T05FX01JTlVTX1NSQ19BTFBI
QSk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgQ29tcG9zaXRlU291cmNlSW46Ci0gICAgICAg
IG1fY29udGV4dC0+ZW5hYmxlKEdyYXBoaWNzQ29udGV4dDNEOjpCTEVORCk7Ci0gICAgICAgIG1f
Y29udGV4dC0+YmxlbmRGdW5jKEdyYXBoaWNzQ29udGV4dDNEOjpEU1RfQUxQSEEsIEdyYXBoaWNz
Q29udGV4dDNEOjpaRVJPKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBDb21wb3NpdGVTb3Vy
Y2VPdXQ6Ci0gICAgICAgIG1fY29udGV4dC0+ZW5hYmxlKEdyYXBoaWNzQ29udGV4dDNEOjpCTEVO
RCk7Ci0gICAgICAgIG1fY29udGV4dC0+YmxlbmRGdW5jKEdyYXBoaWNzQ29udGV4dDNEOjpPTkVf
TUlOVVNfRFNUX0FMUEhBLCBHcmFwaGljc0NvbnRleHQzRDo6WkVSTyk7Ci0gICAgICAgIGJyZWFr
OwotICAgIGNhc2UgQ29tcG9zaXRlU291cmNlQXRvcDoKLSAgICAgICAgbV9jb250ZXh0LT5lbmFi
bGUoR3JhcGhpY3NDb250ZXh0M0Q6OkJMRU5EKTsKLSAgICAgICAgbV9jb250ZXh0LT5ibGVuZEZ1
bmMoR3JhcGhpY3NDb250ZXh0M0Q6OkRTVF9BTFBIQSwgR3JhcGhpY3NDb250ZXh0M0Q6Ok9ORV9N
SU5VU19TUkNfQUxQSEEpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIENvbXBvc2l0ZURlc3Rp
bmF0aW9uT3ZlcjoKLSAgICAgICAgbV9jb250ZXh0LT5lbmFibGUoR3JhcGhpY3NDb250ZXh0M0Q6
OkJMRU5EKTsKLSAgICAgICAgbV9jb250ZXh0LT5ibGVuZEZ1bmMoR3JhcGhpY3NDb250ZXh0M0Q6
Ok9ORV9NSU5VU19EU1RfQUxQSEEsIEdyYXBoaWNzQ29udGV4dDNEOjpPTkUpOwotICAgICAgICBi
cmVhazsKLSAgICBjYXNlIENvbXBvc2l0ZURlc3RpbmF0aW9uSW46Ci0gICAgICAgIG1fY29udGV4
dC0+ZW5hYmxlKEdyYXBoaWNzQ29udGV4dDNEOjpCTEVORCk7Ci0gICAgICAgIG1fY29udGV4dC0+
YmxlbmRGdW5jKEdyYXBoaWNzQ29udGV4dDNEOjpaRVJPLCBHcmFwaGljc0NvbnRleHQzRDo6U1JD
X0FMUEhBKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBDb21wb3NpdGVEZXN0aW5hdGlvbk91
dDoKLSAgICAgICAgbV9jb250ZXh0LT5lbmFibGUoR3JhcGhpY3NDb250ZXh0M0Q6OkJMRU5EKTsK
LSAgICAgICAgbV9jb250ZXh0LT5ibGVuZEZ1bmMoR3JhcGhpY3NDb250ZXh0M0Q6OlpFUk8sIEdy
YXBoaWNzQ29udGV4dDNEOjpPTkVfTUlOVVNfU1JDX0FMUEhBKTsKLSAgICAgICAgYnJlYWs7Ci0g
ICAgY2FzZSBDb21wb3NpdGVEZXN0aW5hdGlvbkF0b3A6Ci0gICAgICAgIG1fY29udGV4dC0+ZW5h
YmxlKEdyYXBoaWNzQ29udGV4dDNEOjpCTEVORCk7Ci0gICAgICAgIG1fY29udGV4dC0+YmxlbmRG
dW5jKEdyYXBoaWNzQ29udGV4dDNEOjpPTkVfTUlOVVNfRFNUX0FMUEhBLCBHcmFwaGljc0NvbnRl
eHQzRDo6U1JDX0FMUEhBKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBDb21wb3NpdGVYT1I6
Ci0gICAgICAgIG1fY29udGV4dC0+ZW5hYmxlKEdyYXBoaWNzQ29udGV4dDNEOjpCTEVORCk7Ci0g
ICAgICAgIG1fY29udGV4dC0+YmxlbmRGdW5jKEdyYXBoaWNzQ29udGV4dDNEOjpPTkVfTUlOVVNf
RFNUX0FMUEhBLCBHcmFwaGljc0NvbnRleHQzRDo6T05FX01JTlVTX1NSQ19BTFBIQSk7Ci0gICAg
ICAgIGJyZWFrOwotICAgIGNhc2UgQ29tcG9zaXRlUGx1c0RhcmtlcjoKLSAgICBjYXNlIENvbXBv
c2l0ZUhpZ2hsaWdodDoKLSAgICAgICAgLy8gdW5zdXBwb3J0ZWQKLSAgICAgICAgbV9jb250ZXh0
LT5kaXNhYmxlKEdyYXBoaWNzQ29udGV4dDNEOjpCTEVORCk7Ci0gICAgICAgIGJyZWFrOwotICAg
IGNhc2UgQ29tcG9zaXRlUGx1c0xpZ2h0ZXI6Ci0gICAgICAgIG1fY29udGV4dC0+ZW5hYmxlKEdy
YXBoaWNzQ29udGV4dDNEOjpCTEVORCk7Ci0gICAgICAgIG1fY29udGV4dC0+YmxlbmRGdW5jKEdy
YXBoaWNzQ29udGV4dDNEOjpPTkUsIEdyYXBoaWNzQ29udGV4dDNEOjpPTkUpOwotICAgICAgICBi
cmVhazsKLSAgICB9Ci0gICAgbV9sYXN0Q29tcG9zaXRlT3AgPSBvcDsKLX0KLQotdW5zaWduZWQg
R0xFUzJDYW52YXM6OmdldFF1YWRWZXJ0aWNlcygpCi17Ci0gICAgaWYgKCFtX3F1YWRWZXJ0aWNl
cykgewotICAgICAgICBmbG9hdCB2ZXJ0aWNlc1tdID0geyAwLjBmLCAwLjBmLCAxLjBmLAotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAxLjBmLCAwLjBmLCAxLjBmLAotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAwLjBmLCAxLjBmLCAxLjBmLAotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAxLjBmLCAxLjBmLCAxLjBmIH07Ci0gICAgICAgIG1fcXVhZFZlcnRpY2VzID0gbV9j
b250ZXh0LT5jcmVhdGVCdWZmZXIoKTsKLSAgICAgICAgbV9jb250ZXh0LT5iaW5kQnVmZmVyKEdy
YXBoaWNzQ29udGV4dDNEOjpBUlJBWV9CVUZGRVIsIG1fcXVhZFZlcnRpY2VzKTsKLSAgICAgICAg
bV9jb250ZXh0LT5idWZmZXJEYXRhKEdyYXBoaWNzQ29udGV4dDNEOjpBUlJBWV9CVUZGRVIsIHNp
emVvZih2ZXJ0aWNlcyksIHZlcnRpY2VzLCBHcmFwaGljc0NvbnRleHQzRDo6U1RBVElDX0RSQVcp
OwotICAgIH0KLSAgICByZXR1cm4gbV9xdWFkVmVydGljZXM7Ci19Ci0KLVRleHR1cmUqIEdMRVMy
Q2FudmFzOjpjcmVhdGVUZXh0dXJlKE5hdGl2ZUltYWdlUHRyIHB0ciwgVGV4dHVyZTo6Rm9ybWF0
IGZvcm1hdCwgaW50IHdpZHRoLCBpbnQgaGVpZ2h0KQorUGFzc1JlZlB0cjxUZXh0dXJlPiBHTEVT
MkNhbnZhczo6Y3JlYXRlVGV4dHVyZShOYXRpdmVJbWFnZVB0ciBwdHIsIFRleHR1cmU6OkZvcm1h
dCBmb3JtYXQsIGludCB3aWR0aCwgaW50IGhlaWdodCkKIHsKLSAgICBQYXNzUmVmUHRyPFRleHR1
cmU+IHRleHR1cmUgPSBtX3RleHR1cmVzLmdldChwdHIpOwotICAgIGlmICh0ZXh0dXJlKQotICAg
ICAgICByZXR1cm4gdGV4dHVyZS5nZXQoKTsKLQotICAgIHRleHR1cmUgPSBUZXh0dXJlOjpjcmVh
dGUobV9jb250ZXh0LCBmb3JtYXQsIHdpZHRoLCBoZWlnaHQpOwotICAgIFRleHR1cmUqIHQgPSB0
ZXh0dXJlLmdldCgpOwotICAgIG1fdGV4dHVyZXMuc2V0KHB0ciwgdGV4dHVyZSk7Ci0gICAgcmV0
dXJuIHQ7CisgICAgcmV0dXJuIG1fY29udGV4dC0+Y3JlYXRlVGV4dHVyZShwdHIsIGZvcm1hdCwg
d2lkdGgsIGhlaWdodCk7CiB9CiAKLVRleHR1cmUqIEdMRVMyQ2FudmFzOjpnZXRUZXh0dXJlKE5h
dGl2ZUltYWdlUHRyIHB0cikKK1Bhc3NSZWZQdHI8VGV4dHVyZT4gR0xFUzJDYW52YXM6OmdldFRl
eHR1cmUoTmF0aXZlSW1hZ2VQdHIgcHRyKQogewotICAgIFBhc3NSZWZQdHI8VGV4dHVyZT4gdGV4
dHVyZSA9IG1fdGV4dHVyZXMuZ2V0KHB0cik7Ci0gICAgcmV0dXJuIHRleHR1cmUgPyB0ZXh0dXJl
LmdldCgpIDogMDsKKyAgICByZXR1cm4gbV9jb250ZXh0LT5nZXRUZXh0dXJlKHB0cik7CiB9CiAK
IHZvaWQgR0xFUzJDYW52YXM6OmNoZWNrR0xFcnJvcihjb25zdCBjaGFyKiBoZWFkZXIpCmRpZmYg
LS1naXQgYS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0dMRVMyQ2FudmFzLmgg
Yi9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0dMRVMyQ2FudmFzLmgKaW5kZXgg
ZjQ5YWM4YmExOGQxZDM0MjM0YjhkMDYyNzhlNzAyOGJmZTk2OTdlMS4uYWYzYzA1MzhmMDVmNDA3
MmUyMGQxNzNmZTAyM2IwMzkyNmY2YTY5YyAxMDA2NDQKLS0tIGEvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jaHJvbWl1bS9HTEVTMkNhbnZhcy5oCisrKyBiL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY2hyb21pdW0vR0xFUzJDYW52YXMuaApAQCAtNDQsMTcgKzQ0LDE1IEBACiAKIG5hbWVz
cGFjZSBXZWJDb3JlIHsKIAorY2xhc3MgQ2FudmFzRnJhbWVidWZmZXI7CitjbGFzcyBTaGFyZWRD
b250ZXh0M0Q7CiBjbGFzcyBDb2xvcjsKIGNsYXNzIEZsb2F0UmVjdDsKIGNsYXNzIEdyYXBoaWNz
Q29udGV4dDNEOwotY2xhc3MgU29saWRGaWxsU2hhZGVyOwotY2xhc3MgVGV4U2hhZGVyOwotCi10
eXBlZGVmIEhhc2hNYXA8TmF0aXZlSW1hZ2VQdHIsIFJlZlB0cjxUZXh0dXJlPiA+IFRleHR1cmVI
YXNoTWFwOwogCiBjbGFzcyBHTEVTMkNhbnZhcyA6IHB1YmxpYyBOb25jb3B5YWJsZSB7CiBwdWJs
aWM6Ci0gICAgR0xFUzJDYW52YXMoR3JhcGhpY3NDb250ZXh0M0QqLCBjb25zdCBJbnRTaXplJik7
CisgICAgR0xFUzJDYW52YXMoU2hhcmVkQ29udGV4dDNEKiwgQ2FudmFzRnJhbWVidWZmZXIqLCBj
b25zdCBJbnRTaXplJik7CiAgICAgfkdMRVMyQ2FudmFzKCk7CiAKICAgICB2b2lkIGZpbGxSZWN0
KGNvbnN0IEZsb2F0UmVjdCYsIGNvbnN0IENvbG9yJiwgQ29sb3JTcGFjZSk7CkBAIC03NCwyOCAr
NzIsMzUgQEAgcHVibGljOgogICAgIC8vIG5vbi1zdGFuZGFyZCBmdW5jdGlvbnMKICAgICAvLyBU
aGVzZSBhcmUgbm90IHN0YW5kYXJkIEdyYXBoaWNzQ29udGV4dCBmdW5jdGlvbnMsIGFuZCBzaG91
bGQgYmUgcHVzaGVkCiAgICAgLy8gZG93biBpbnRvIGEgUGxhdGZvcm1Db250ZXh0R0xFUzIgYXQg
c29tZSBwb2ludC4KKyAgICB2b2lkIGRyYXdUZXh0dXJlZFJlY3QodW5zaWduZWQgdGV4dHVyZSwg
Y29uc3QgSW50U2l6ZSYgdGV4dHVyZVNpemUsIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCwgY29u
c3QgRmxvYXRSZWN0JiBkc3RSZWN0LCBDb2xvclNwYWNlLCBDb21wb3NpdGVPcGVyYXRvcik7CiAg
ICAgdm9pZCBkcmF3VGV4dHVyZWRSZWN0KFRleHR1cmUqLCBjb25zdCBGbG9hdFJlY3QmIHNyY1Jl
Y3QsIGNvbnN0IEZsb2F0UmVjdCYgZHN0UmVjdCwgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiwgZmxv
YXQgYWxwaGEsIENvbG9yU3BhY2UsIENvbXBvc2l0ZU9wZXJhdG9yKTsKICAgICB2b2lkIGRyYXdU
ZXh0dXJlZFJlY3QoVGV4dHVyZSosIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCwgY29uc3QgRmxv
YXRSZWN0JiBkc3RSZWN0LCBDb2xvclNwYWNlLCBDb21wb3NpdGVPcGVyYXRvcik7Ci0gICAgR3Jh
cGhpY3NDb250ZXh0M0QqIGNvbnRleHQoKSB7IHJldHVybiBtX2NvbnRleHQ7IH0KLSAgICBUZXh0
dXJlKiBjcmVhdGVUZXh0dXJlKE5hdGl2ZUltYWdlUHRyLCBUZXh0dXJlOjpGb3JtYXQsIGludCB3
aWR0aCwgaW50IGhlaWdodCk7Ci0gICAgVGV4dHVyZSogZ2V0VGV4dHVyZShOYXRpdmVJbWFnZVB0
cik7CisgICAgUGFzc1JlZlB0cjxUZXh0dXJlPiBjcmVhdGVUZXh0dXJlKE5hdGl2ZUltYWdlUHRy
LCBUZXh0dXJlOjpGb3JtYXQsIGludCB3aWR0aCwgaW50IGhlaWdodCk7CisgICAgUGFzc1JlZlB0
cjxUZXh0dXJlPiBnZXRUZXh0dXJlKE5hdGl2ZUltYWdlUHRyKTsKKworICAgIFNoYXJlZENvbnRl
eHQzRCogY29udGV4dCgpIGNvbnN0IHsgcmV0dXJuIG1fY29udGV4dDsgfQorCisgICAgdm9pZCBz
d2FwQnVmZmVycygpOworICAgIHZvaWQgYmluZEZyYW1lYnVmZmVyKCk7CisKKyAgICB1bnNpZ25l
ZCB0ZXh0dXJlSWRGb3JDb21wb3NpdG9yKCkgY29uc3Q7CisgICAgdW5zaWduZWQgdGV4dHVyZUlk
Rm9yQ2FudmFzKCkgY29uc3Q7CiAKIHByaXZhdGU6CiAgICAgdm9pZCBkcmF3VGV4dHVyZWRSZWN0
VGlsZShUZXh0dXJlKiB0ZXh0dXJlLCBpbnQgdGlsZSwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0
LCBjb25zdCBGbG9hdFJlY3QmIGRzdFJlY3QsIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYsIGZsb2F0
IGFscGhhKTsKKyAgICB2b2lkIGRyYXdRdWFkKGNvbnN0IEludFNpemUmIHRleHR1cmVTaXplLCBj
b25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsIGNvbnN0IEZsb2F0UmVjdCYgZHN0UmVjdCwgY29uc3Qg
QWZmaW5lVHJhbnNmb3JtJiwgZmxvYXQgYWxwaGEpOwogICAgIHZvaWQgYXBwbHlDb21wb3NpdGVP
cGVyYXRvcihDb21wb3NpdGVPcGVyYXRvcik7CiAgICAgdm9pZCBjaGVja0dMRXJyb3IoY29uc3Qg
Y2hhciogaGVhZGVyKTsKLSAgICB1bnNpZ25lZCBnZXRRdWFkVmVydGljZXMoKTsKIAotICAgIEdy
YXBoaWNzQ29udGV4dDNEKiBtX2NvbnRleHQ7CisgICAgSW50U2l6ZSBtX3NpemU7CisKKyAgICBT
aGFyZWRDb250ZXh0M0QqIG1fY29udGV4dDsKKyAgICBDYW52YXNGcmFtZWJ1ZmZlciogbV9mcmFt
ZWJ1ZmZlcjsKKwogICAgIHN0cnVjdCBTdGF0ZTsKICAgICBXVEY6OlZlY3RvcjxTdGF0ZT4gbV9z
dGF0ZVN0YWNrOwogICAgIFN0YXRlKiBtX3N0YXRlOwotICAgIHVuc2lnbmVkIG1fcXVhZFZlcnRp
Y2VzOwotICAgIE93blB0cjxTb2xpZEZpbGxTaGFkZXI+IG1fc29saWRGaWxsU2hhZGVyOwotICAg
IE93blB0cjxUZXhTaGFkZXI+IG1fdGV4U2hhZGVyOwogICAgIEFmZmluZVRyYW5zZm9ybSBtX2Zs
aXBNYXRyaXg7Ci0gICAgVGV4dHVyZUhhc2hNYXAgbV90ZXh0dXJlczsKLSAgICBDb21wb3NpdGVP
cGVyYXRvciBtX2xhc3RDb21wb3NpdGVPcDsgLy8gVGhpcyBpcyB0aGUgb25lIGxhc3Qgc2V0LCBu
b3QgbmVjZXNzYXJpbHkgdGhlIG9uZSBpbiB0aGUgc3RhdGUgc3RhY2suCiB9OwogCiB9CmRpZmYg
LS1naXQgYS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0dyYXBoaWNzTGF5ZXJD
aHJvbWl1bS5jcHAgYi9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0dyYXBoaWNz
TGF5ZXJDaHJvbWl1bS5jcHAKaW5kZXggNjQ4ZTM1ZjFhNDY3MmZjMjY1NGU1YTVlOTZjY2UyOWU2
NzkyYzEwMS4uMThkZmQyODYyYzc3MjNiOGQzZmEzMTc3N2JhYTY1ZTgwODFlYmQxNyAxMDA2NDQK
LS0tIGEvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9HcmFwaGljc0xheWVyQ2hy
b21pdW0uY3BwCisrKyBiL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vR3JhcGhp
Y3NMYXllckNocm9taXVtLmNwcApAQCAtNDUsNiArNDUsNyBAQAogCiAjaW5jbHVkZSAiR3JhcGhp
Y3NMYXllckNocm9taXVtLmgiCiAKKyNpbmNsdWRlICJDYW52YXMyRExheWVyQ2hyb21pdW0uaCIK
ICNpbmNsdWRlICJDb250ZW50TGF5ZXJDaHJvbWl1bS5oIgogI2luY2x1ZGUgIkZsb2F0Q29udmVy
c2lvbi5oIgogI2luY2x1ZGUgIkZsb2F0UmVjdC5oIgpAQCAtMjkwLDYgKzI5MSw3IEBAIHZvaWQg
R3JhcGhpY3NMYXllckNocm9taXVtOjpzZXRDb250ZW50c05lZWRzRGlzcGxheSgpCiAgICAgaWYg
KG1fY29udGVudHNMYXllcikKICAgICAgICAgbV9jb250ZW50c0xheWVyLT5zZXROZWVkc0Rpc3Bs
YXkoKTsKIH0KKwogdm9pZCBHcmFwaGljc0xheWVyQ2hyb21pdW06OnNldE5lZWRzRGlzcGxheSgp
CiB7CiAgICAgaWYgKGRyYXdzQ29udGVudCgpKQpAQCAtMzM5LDE1ICszNDEsMTUgQEAgdm9pZCBH
cmFwaGljc0xheWVyQ2hyb21pdW06OnNldENvbnRlbnRzVG9JbWFnZShJbWFnZSogaW1hZ2UpCiAg
ICAgICAgIHVwZGF0ZVN1YmxheWVyTGlzdCgpOwogfQogCi12b2lkIEdyYXBoaWNzTGF5ZXJDaHJv
bWl1bTo6c2V0Q29udGVudHNUb0NhbnZhcyhQbGF0Zm9ybUxheWVyKiBwbGF0Zm9ybUxheWVyKQor
dm9pZCBHcmFwaGljc0xheWVyQ2hyb21pdW06OnNldENvbnRlbnRzVG9XZWJHTChQbGF0Zm9ybUxh
eWVyKiBwbGF0Zm9ybUxheWVyKQogewogICAgIGJvb2wgY2hpbGRyZW5DaGFuZ2VkID0gZmFsc2U7
CiAgICAgaWYgKHBsYXRmb3JtTGF5ZXIpIHsKICAgICAgICAgcGxhdGZvcm1MYXllci0+c2V0T3du
ZXIodGhpcyk7Ci0gICAgICAgIGlmICghbV9jb250ZW50c0xheWVyLmdldCgpIHx8IG1fY29udGVu
dHNMYXllclB1cnBvc2UgIT0gQ29udGVudHNMYXllckZvckNhbnZhcykgeworICAgICAgICBpZiAo
IW1fY29udGVudHNMYXllci5nZXQoKSB8fCBtX2NvbnRlbnRzTGF5ZXJQdXJwb3NlICE9IENvbnRl
bnRzTGF5ZXJGb3JXZWJHTCkgewogICAgICAgICAgICAgc2V0dXBDb250ZW50c0xheWVyKHBsYXRm
b3JtTGF5ZXIpOwogICAgICAgICAgICAgbV9jb250ZW50c0xheWVyID0gcGxhdGZvcm1MYXllcjsK
LSAgICAgICAgICAgIG1fY29udGVudHNMYXllclB1cnBvc2UgPSBDb250ZW50c0xheWVyRm9yQ2Fu
dmFzOworICAgICAgICAgICAgbV9jb250ZW50c0xheWVyUHVycG9zZSA9IENvbnRlbnRzTGF5ZXJG
b3JXZWJHTDsKICAgICAgICAgICAgIGNoaWxkcmVuQ2hhbmdlZCA9IHRydWU7CiAgICAgICAgIH0K
ICAgICAgICAgcGxhdGZvcm1MYXllci0+c2V0TmVlZHNEaXNwbGF5KCk7CkBAIC0zNjUsNiArMzY3
LDM0IEBAIHZvaWQgR3JhcGhpY3NMYXllckNocm9taXVtOjpzZXRDb250ZW50c1RvQ2FudmFzKFBs
YXRmb3JtTGF5ZXIqIHBsYXRmb3JtTGF5ZXIpCiAgICAgICAgIHVwZGF0ZVN1YmxheWVyTGlzdCgp
OwogfQogCit2b2lkIEdyYXBoaWNzTGF5ZXJDaHJvbWl1bTo6c2V0Q29udGVudHNUb0NhbnZhczJE
KENhbnZhc0ZyYW1lYnVmZmVyKiBmcmFtZWJ1ZmZlcikKK3sKKyAgICBib29sIGNoaWxkcmVuQ2hh
bmdlZCA9IGZhbHNlOworICAgIGlmIChmcmFtZWJ1ZmZlcikgeworICAgICAgICBpZiAoIW1fY29u
dGVudHNMYXllci5nZXQoKSB8fCBtX2NvbnRlbnRzTGF5ZXJQdXJwb3NlICE9IENvbnRlbnRzTGF5
ZXJGb3JDYW52YXMyRCkgeworICAgICAgICAgICAgUmVmUHRyPENhbnZhczJETGF5ZXJDaHJvbWl1
bT4gY2FudmFzMkRMYXllciA9IENhbnZhczJETGF5ZXJDaHJvbWl1bTo6Y3JlYXRlKGZyYW1lYnVm
ZmVyLCB0aGlzKTsKKyAgICAgICAgICAgIHNldHVwQ29udGVudHNMYXllcihjYW52YXMyRExheWVy
LmdldCgpKTsKKyAgICAgICAgICAgIG1fY29udGVudHNMYXllciA9IGNhbnZhczJETGF5ZXI7Cisg
ICAgICAgICAgICBtX2NvbnRlbnRzTGF5ZXJQdXJwb3NlID0gQ29udGVudHNMYXllckZvckNhbnZh
czJEOworICAgICAgICAgICAgY2hpbGRyZW5DaGFuZ2VkID0gdHJ1ZTsKKyAgICAgICAgfQorICAg
ICAgICBDYW52YXMyRExheWVyQ2hyb21pdW0qIGNhbnZhczJETGF5ZXIgPSBzdGF0aWNfY2FzdDxD
YW52YXMyRExheWVyQ2hyb21pdW0qPihtX2NvbnRlbnRzTGF5ZXIuZ2V0KCkpOworICAgICAgICBj
YW52YXMyRExheWVyLT5zZXRDYW52YXNGcmFtZWJ1ZmZlcihmcmFtZWJ1ZmZlcik7CisgICAgICAg
IGNhbnZhczJETGF5ZXItPnNldE5lZWRzRGlzcGxheSgpOworICAgICAgICB1cGRhdGVDb250ZW50
c1JlY3QoKTsKKyAgICB9IGVsc2UgeworICAgICAgICBpZiAobV9jb250ZW50c0xheWVyKSB7Cisg
ICAgICAgICAgICBjaGlsZHJlbkNoYW5nZWQgPSB0cnVlOworCisgICAgICAgICAgICAvLyBUaGUg
b2xkIGNvbnRlbnRzIGxheWVyIHdpbGwgYmUgcmVtb3ZlZCB2aWEgdXBkYXRlU3VibGF5ZXJMaXN0
LgorICAgICAgICAgICAgbV9jb250ZW50c0xheWVyID0gMDsKKyAgICAgICAgfQorICAgIH0KKwor
ICAgIGlmIChjaGlsZHJlbkNoYW5nZWQpCisgICAgICAgIHVwZGF0ZVN1YmxheWVyTGlzdCgpOwor
fQorCiB2b2lkIEdyYXBoaWNzTGF5ZXJDaHJvbWl1bTo6c2V0Q29udGVudHNUb01lZGlhKFBsYXRm
b3JtTGF5ZXIqIGxheWVyKQogewogICAgIGJvb2wgY2hpbGRyZW5DaGFuZ2VkID0gZmFsc2U7CmRp
ZmYgLS1naXQgYS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0dyYXBoaWNzTGF5
ZXJDaHJvbWl1bS5oIGIvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9HcmFwaGlj
c0xheWVyQ2hyb21pdW0uaAppbmRleCA5ZGZmNjZhMDc1Y2MzMGE1ODQ2YjE0NmExNjUxODQ4YjZm
ZWRhZjkxLi42NTBiMTQ3MjhjZDQ1MmQ3MDY1ODY1NWQ3MTY3NTlmMjhlNGI0ZTFkIDEwMDY0NAot
LS0gYS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0dyYXBoaWNzTGF5ZXJDaHJv
bWl1bS5oCisrKyBiL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vR3JhcGhpY3NM
YXllckNocm9taXVtLmgKQEAgLTg3LDcgKzg3LDggQEAgcHVibGljOgogCiAgICAgdmlydHVhbCB2
b2lkIHNldENvbnRlbnRzVG9JbWFnZShJbWFnZSopOwogICAgIHZpcnR1YWwgdm9pZCBzZXRDb250
ZW50c1RvTWVkaWEoUGxhdGZvcm1MYXllciopOwotICAgIHZpcnR1YWwgdm9pZCBzZXRDb250ZW50
c1RvQ2FudmFzKFBsYXRmb3JtTGF5ZXIqKTsKKyAgICB2aXJ0dWFsIHZvaWQgc2V0Q29udGVudHNU
b1dlYkdMKFBsYXRmb3JtTGF5ZXIqKTsKKyAgICB2aXJ0dWFsIHZvaWQgc2V0Q29udGVudHNUb0Nh
bnZhczJEKENhbnZhc0ZyYW1lYnVmZmVyKik7CiAKICAgICB2aXJ0dWFsIFBsYXRmb3JtTGF5ZXIq
IHBsYXRmb3JtTGF5ZXIoKSBjb25zdDsKIApAQCAtMTM4LDcgKzEzOSw4IEBAIHByaXZhdGU6CiAg
ICAgICAgIE5vQ29udGVudHNMYXllciA9IDAsCiAgICAgICAgIENvbnRlbnRzTGF5ZXJGb3JJbWFn
ZSwKICAgICAgICAgQ29udGVudHNMYXllckZvclZpZGVvLAotICAgICAgICBDb250ZW50c0xheWVy
Rm9yQ2FudmFzCisgICAgICAgIENvbnRlbnRzTGF5ZXJGb3JXZWJHTCwKKyAgICAgICAgQ29udGVu
dHNMYXllckZvckNhbnZhczJELAogICAgIH07CiAKICAgICBDb250ZW50c0xheWVyUHVycG9zZSBt
X2NvbnRlbnRzTGF5ZXJQdXJwb3NlOwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jaHJvbWl1bS9MYXllclJlbmRlcmVyQ2hyb21pdW0uY3BwIGIvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jaHJvbWl1bS9MYXllclJlbmRlcmVyQ2hyb21pdW0uY3BwCmluZGV4IDUwMzM4
ZDJkNWY3MzI0ZTVhMTE5YzUwOTE5MGRmZWY4Njk4YjE3NjkuLmY0OTA5NzA4NzEzYWJhNDg5ZGZl
OTkwZTU4NDNiYmI1Njg5NTYwYjMgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY2hyb21pdW0vTGF5ZXJSZW5kZXJlckNocm9taXVtLmNwcAorKysgYi9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyUmVuZGVyZXJDaHJvbWl1bS5jcHAKQEAgLTM0LDEx
ICszNCwxMSBAQAogI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKICNpbmNsdWRlICJM
YXllclJlbmRlcmVyQ2hyb21pdW0uaCIKIAotI2luY2x1ZGUgIkNhbnZhc0xheWVyQ2hyb21pdW0u
aCIKLSNpbmNsdWRlICJDb250ZW50TGF5ZXJDaHJvbWl1bS5oIgorI2luY2x1ZGUgIkNhbnZhczJE
TGF5ZXJDaHJvbWl1bS5oIgogI2luY2x1ZGUgIkdMRVMyQ29udGV4dC5oIgogI2luY2x1ZGUgIkxh
eWVyQ2hyb21pdW0uaCIKICNpbmNsdWRlICJOb3RJbXBsZW1lbnRlZC5oIgorI2luY2x1ZGUgIldl
YkdMTGF5ZXJDaHJvbWl1bS5oIgogI2lmIFBMQVRGT1JNKFNLSUEpCiAjaW5jbHVkZSAiTmF0aXZl
SW1hZ2VTa2lhLmgiCiAjaW5jbHVkZSAiUGxhdGZvcm1Db250ZXh0U2tpYS5oIgpkaWZmIC0tZ2l0
IGEvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9XZWJHTExheWVyQ2hyb21pdW0u
Y3BwIGIvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9XZWJHTExheWVyQ2hyb21p
dW0uY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAuLmU2NDRiYTZiNDYzZWRkOWU2NDEwZjdjZWQ5NTI2NTQ2OGUwMjdi
MzgKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVt
L1dlYkdMTGF5ZXJDaHJvbWl1bS5jcHAKQEAgLTAsMCArMSw4NyBAQAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAxMCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zIGFyZQorICogbWV0OgorICoKKyAqICAgICAqIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlCisgKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisgKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiBkaXN0cmlidXRpb24u
CisgKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMg
b2YgaXRzCisgKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3Rl
IHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmlj
IHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMi
IEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorICogT1dORVIgT1IgQ09OVFJJQlVU
T1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBT
UEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNT
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAor
ICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcu
aCIKKworI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKKworI2luY2x1ZGUgIldlYkdM
TGF5ZXJDaHJvbWl1bS5oIgorCisjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0M0QuaCIKKyNpbmNs
dWRlICJMYXllclJlbmRlcmVyQ2hyb21pdW0uaCIKKyNpbmNsdWRlIDxHTEVTMi9nbDIuaD4KKwor
bmFtZXNwYWNlIFdlYkNvcmUgeworCitQYXNzUmVmUHRyPFdlYkdMTGF5ZXJDaHJvbWl1bT4gV2Vi
R0xMYXllckNocm9taXVtOjpjcmVhdGUoR3JhcGhpY3NMYXllckNocm9taXVtKiBvd25lcikKK3sK
KyAgICByZXR1cm4gYWRvcHRSZWYobmV3IFdlYkdMTGF5ZXJDaHJvbWl1bShvd25lcikpOworfQor
CitXZWJHTExheWVyQ2hyb21pdW06OldlYkdMTGF5ZXJDaHJvbWl1bShHcmFwaGljc0xheWVyQ2hy
b21pdW0qIG93bmVyKQorICAgIDogQ2FudmFzTGF5ZXJDaHJvbWl1bShvd25lcikKKyAgICAsIG1f
Y29udGV4dCgwKQorICAgICwgbV90ZXh0dXJlSWQoMCkKKyAgICAsIG1fdGV4dHVyZUNoYW5nZWQo
ZmFsc2UpCit7Cit9CisKK3ZvaWQgV2ViR0xMYXllckNocm9taXVtOjp1cGRhdGVDb250ZW50cygp
Cit7CisgICAgQVNTRVJUKG1fY29udGV4dCk7CisgICAgaWYgKG1fdGV4dHVyZUNoYW5nZWQpIHsK
KyAgICAgICAgZ2xCaW5kVGV4dHVyZShHTF9URVhUVVJFXzJELCBtX3RleHR1cmVJZCk7CisgICAg
ICAgIC8vIFNldCB0aGUgbWluLW1hZyBmaWx0ZXJzIHRvIGxpbmVhciBhbmQgd3JhcCBtb2RlcyB0
byBHTF9DTEFNUF9UT19FREdFCisgICAgICAgIC8vIHRvIGdldCBhcm91bmQgTlBPVCB0ZXh0dXJl
IGxpbWl0YXRpb25zIG9mIEdMRVMuCisgICAgICAgIGdsVGV4UGFyYW1ldGVyZihHTF9URVhUVVJF
XzJELCBHTF9URVhUVVJFX01JTl9GSUxURVIsIEdMX0xJTkVBUik7CisgICAgICAgIGdsVGV4UGFy
YW1ldGVyZihHTF9URVhUVVJFXzJELCBHTF9URVhUVVJFX01BR19GSUxURVIsIEdMX0xJTkVBUik7
CisgICAgICAgIGdsVGV4UGFyYW1ldGVyZihHTF9URVhUVVJFXzJELCBHTF9URVhUVVJFX1dSQVBf
UywgR0xfQ0xBTVBfVE9fRURHRSk7CisgICAgICAgIGdsVGV4UGFyYW1ldGVyZihHTF9URVhUVVJF
XzJELCBHTF9URVhUVVJFX1dSQVBfVCwgR0xfQ0xBTVBfVE9fRURHRSk7CisgICAgICAgIG1fdGV4
dHVyZUNoYW5nZWQgPSBmYWxzZTsKKyAgICB9CisgICAgLy8gVXBkYXRlIHRoZSBjb250ZW50cyBv
ZiB0aGUgdGV4dHVyZSB1c2VkIGJ5IHRoZSBjb21wb3NpdG9yLgorICAgIGlmIChtX2NvbnRlbnRz
RGlydHkpIHsKKyAgICAgICAgbV9jb250ZXh0LT5wcmVwYXJlVGV4dHVyZSgpOworICAgICAgICBt
X2NvbnRlbnRzRGlydHkgPSBmYWxzZTsKKyAgICB9Cit9CisKK3ZvaWQgV2ViR0xMYXllckNocm9t
aXVtOjpzZXRDb250ZXh0KGNvbnN0IEdyYXBoaWNzQ29udGV4dDNEKiBjb250ZXh0KQoreworICAg
IG1fY29udGV4dCA9IGNvbnN0X2Nhc3Q8R3JhcGhpY3NDb250ZXh0M0QqPihjb250ZXh0KTsKKwor
ICAgIHVuc2lnbmVkIGludCB0ZXh0dXJlSWQgPSBtX2NvbnRleHQtPnBsYXRmb3JtVGV4dHVyZSgp
OworICAgIGlmICh0ZXh0dXJlSWQgIT0gbV90ZXh0dXJlSWQpCisgICAgICAgIG1fdGV4dHVyZUNo
YW5nZWQgPSB0cnVlOworICAgIG1fdGV4dHVyZUlkID0gdGV4dHVyZUlkOworfQorCit9CisjZW5k
aWYgLy8gVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9XZWJHTExheWVyQ2hyb21pdW0uaCBiL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vV2ViR0xMYXllckNocm9taXVtLmgKbmV3IGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MC4uMWU4M2I0YjZjYTliZjFhMGYyMjA4YWQ3N2IyZjNiN2M4MDc1NmMwMwotLS0gL2Rldi9udWxs
CisrKyBiL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vV2ViR0xMYXllckNocm9t
aXVtLmgKQEAgLTAsMCArMSw2NSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMCBHb29nbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
IGFyZQorICogbWV0OgorICoKKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgICAgKiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiBj
b3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyCisgKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiBkaXN0cmlidXRpb24uCisgKiAgICAgKiBOZWl0aGVy
IHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisgKiBjb250cmli
dXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQg
ZnJvbQorICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVy
bWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklH
SFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywg
VEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
CisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hB
TEwgVEhFIENPUFlSSUdIVAorICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVE
IFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisg
KiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgorICovCisKKworI2lmbmRlZiBXZWJHTExheWVyQ2hyb21pdW1faAorI2Rl
ZmluZSBXZWJHTExheWVyQ2hyb21pdW1faAorCisjaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lU
SU5HKQorCisjaW5jbHVkZSAiQ2FudmFzTGF5ZXJDaHJvbWl1bS5oIgorCituYW1lc3BhY2UgV2Vi
Q29yZSB7CisKK2NsYXNzIEdyYXBoaWNzQ29udGV4dDNEOworCisvLyBBIExheWVyIGNvbnRhaW5p
bmcgYSBXZWJHTCBjYW52YXMKK2NsYXNzIFdlYkdMTGF5ZXJDaHJvbWl1bSA6IHB1YmxpYyBDYW52
YXNMYXllckNocm9taXVtIHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxXZWJHTExh
eWVyQ2hyb21pdW0+IGNyZWF0ZShHcmFwaGljc0xheWVyQ2hyb21pdW0qIG93bmVyID0gMCk7Cisg
ICAgdmlydHVhbCBib29sIGRyYXdzQ29udGVudCgpIHsgcmV0dXJuIG1fY29udGV4dDsgfQorICAg
IHZpcnR1YWwgdm9pZCB1cGRhdGVDb250ZW50cygpOworCisgICAgdm9pZCBzZXRDb250ZXh0KGNv
bnN0IEdyYXBoaWNzQ29udGV4dDNEKiBjb250ZXh0KTsKKworcHJvdGVjdGVkOgorICAgIHZpcnR1
YWwgdW5zaWduZWQgdGV4dHVyZUlkKCkgeyByZXR1cm4gbV90ZXh0dXJlSWQ7IH0KKworcHJpdmF0
ZToKKyAgICBleHBsaWNpdCBXZWJHTExheWVyQ2hyb21pdW0oR3JhcGhpY3NMYXllckNocm9taXVt
KiBvd25lcik7CisgICAgR3JhcGhpY3NDb250ZXh0M0QqIG1fY29udGV4dDsKKyAgICB1bnNpZ25l
ZCBtX3RleHR1cmVJZDsKKyAgICBib29sIG1fdGV4dHVyZUNoYW5nZWQ7Cit9OworCit9CisjZW5k
aWYgLy8gVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQorCisjZW5kaWYKZGlmZiAtLWdpdCBh
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3B1L0NhbnZhc0ZyYW1lYnVmZmVyLmNwcCBiL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3B1L0NhbnZhc0ZyYW1lYnVmZmVyLmNwcApuZXcgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwLi5mZTRkZGI0NzFlMjIyZjg1MzU2NmJmYzQ1NmYxZTE4M2FkYjdlOTY5Ci0tLSAvZGV2L251
bGwKKysrIGIvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ncHUvQ2FudmFzRnJhbWVidWZmZXIu
Y3BwCkBAIC0wLDAgKzEsMTEwIEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDEwLCBHb29nbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
IGFyZQorICogbWV0OgorICoKKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgICAgKiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiBj
b3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyCisgKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiBkaXN0cmlidXRpb24uCisgKiAgICAgKiBOZWl0aGVy
IHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisgKiBjb250cmli
dXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQg
ZnJvbQorICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVy
bWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklH
SFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywg
VEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
CisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hB
TEwgVEhFIENPUFlSSUdIVAorICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVE
IFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisg
KiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKworI2luY2x1ZGUgIkNh
bnZhc0ZyYW1lYnVmZmVyLmgiCisKKyNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQzRC5oIgorI2lu
Y2x1ZGUgIlNoYXJlZENvbnRleHQzRC5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK0NhbnZh
c0ZyYW1lYnVmZmVyOjpDYW52YXNGcmFtZWJ1ZmZlcihTaGFyZWRDb250ZXh0M0QqIGNvbnRleHQs
IGNvbnN0IEludFNpemUmIHNpemUsIHVuc2lnbmVkIGZyYW1lYnVmZmVyLCB1bnNpZ25lZCBvZmZz
Y3JlZW5Db2xvclRleHR1cmUsIHVuc2lnbmVkIG9mZnNjcmVlblBhcmVudENvbG9yVGV4dHVyZSkK
KyAgICA6IG1fY29udGV4dChjb250ZXh0KQorICAgICwgbV9zaXplKHNpemUpCisgICAgLCBtX2Zy
YW1lYnVmZmVyKGZyYW1lYnVmZmVyKQorICAgICwgbV9vZmZzY3JlZW5Db2xvclRleHR1cmUob2Zm
c2NyZWVuQ29sb3JUZXh0dXJlKQorICAgICwgbV9vZmZzY3JlZW5QYXJlbnRDb2xvclRleHR1cmUo
b2Zmc2NyZWVuUGFyZW50Q29sb3JUZXh0dXJlKQoreworfQorCitDYW52YXNGcmFtZWJ1ZmZlcjo6
fkNhbnZhc0ZyYW1lYnVmZmVyKCkKK3sKKyAgICBtX2NvbnRleHQtPmRlbGV0ZVRleHR1cmUobV9v
ZmZzY3JlZW5Db2xvclRleHR1cmUpOworICAgIG1fY29udGV4dC0+ZGVsZXRlQ29tcG9zaXRvclRl
eHR1cmUobV9vZmZzY3JlZW5QYXJlbnRDb2xvclRleHR1cmUpOworICAgIG1fY29udGV4dC0+ZGVs
ZXRlRnJhbWVidWZmZXIobV9mcmFtZWJ1ZmZlcik7Cit9CisKK3ZvaWQgQ2FudmFzRnJhbWVidWZm
ZXI6OmJpbmQoKQoreworICAgIG1fY29udGV4dC0+YmluZEZyYW1lYnVmZmVyKG1fZnJhbWVidWZm
ZXIpOworICAgIG1fY29udGV4dC0+c2V0Vmlld3BvcnQobV9zaXplKTsKK30KKwordm9pZCBDYW52
YXNGcmFtZWJ1ZmZlcjo6c3dhcEJ1ZmZlcnMoKQoreworICAgIGlmIChtX3dpbGxTd2FwQnVmZmVy
c0NhbGxiYWNrKQorICAgICAgICBtX3dpbGxTd2FwQnVmZmVyc0NhbGxiYWNrLT53aWxsU3dhcEJ1
ZmZlcnMoKTsKKyAgICBtX2NvbnRleHQtPnNldFZpZXdwb3J0KG1fc2l6ZSk7CisgICAgbV9jb250
ZXh0LT5jb3B5VGV4dHVyZVRvQ29tcG9zaXRvcihtX29mZnNjcmVlbkNvbG9yVGV4dHVyZSwgbV9v
ZmZzY3JlZW5QYXJlbnRDb2xvclRleHR1cmUpOworfQorCit2b2lkIENhbnZhc0ZyYW1lYnVmZmVy
OjpzZXRXaWxsU3dhcEJ1ZmZlcnNDYWxsYmFjayhQYXNzT3duUHRyPFN3YXBCdWZmZXJzQ2FsbGJh
Y2s+IGNhbGxiYWNrKQoreworICAgIG1fd2lsbFN3YXBCdWZmZXJzQ2FsbGJhY2sgPSBjYWxsYmFj
azsKK30KKworUGFzc093blB0cjxDYW52YXNGcmFtZWJ1ZmZlcj4gQ2FudmFzRnJhbWVidWZmZXI6
OmNyZWF0ZShTaGFyZWRDb250ZXh0M0QqIGNvbnRleHQsIGNvbnN0IEludFNpemUmIHNpemUpCit7
CisgICAgdW5zaWduZWQgZnJhbWVidWZmZXIgPSBjb250ZXh0LT5jcmVhdGVGcmFtZWJ1ZmZlcigp
OworICAgIEFTU0VSVChmcmFtZWJ1ZmZlcik7CisgICAgaWYgKCFmcmFtZWJ1ZmZlcikKKyAgICAg
ICAgcmV0dXJuIDA7CisgICAgY29udGV4dC0+YmluZEZyYW1lYnVmZmVyKGZyYW1lYnVmZmVyKTsK
KworICAgIC8vIENvbG9yIHRleHR1cmUKKyAgICB1bnNpZ25lZCBvZmZzY3JlZW5Db2xvclRleHR1
cmUgPSBjb250ZXh0LT5jcmVhdGVUZXh0dXJlKCk7CisgICAgQVNTRVJUKG9mZnNjcmVlbkNvbG9y
VGV4dHVyZSk7CisgICAgaWYgKCFvZmZzY3JlZW5Db2xvclRleHR1cmUpIHsKKyAgICAgICAgY29u
dGV4dC0+ZGVsZXRlRnJhbWVidWZmZXIoZnJhbWVidWZmZXIpOworICAgICAgICByZXR1cm4gMDsK
KyAgICB9CisgICAgY29udGV4dC0+YmluZFRleHR1cmUoR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRV
UkVfMkQsIG9mZnNjcmVlbkNvbG9yVGV4dHVyZSk7CisgICAgY29udGV4dC0+dGV4UGFyYW1ldGVy
aShHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV8yRCwgR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRV
UkVfTUFHX0ZJTFRFUiwgR3JhcGhpY3NDb250ZXh0M0Q6Ok5FQVJFU1QpOworICAgIGNvbnRleHQt
PnRleFBhcmFtZXRlcmkoR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQsIEdyYXBoaWNzQ29u
dGV4dDNEOjpURVhUVVJFX01JTl9GSUxURVIsIEdyYXBoaWNzQ29udGV4dDNEOjpORUFSRVNUKTsK
KyAgICBjb250ZXh0LT50ZXhQYXJhbWV0ZXJpKEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFXzJE
LCBHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV9XUkFQX1MsIEdyYXBoaWNzQ29udGV4dDNEOjpD
TEFNUF9UT19FREdFKTsKKyAgICBjb250ZXh0LT50ZXhQYXJhbWV0ZXJpKEdyYXBoaWNzQ29udGV4
dDNEOjpURVhUVVJFXzJELCBHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV9XUkFQX1QsIEdyYXBo
aWNzQ29udGV4dDNEOjpDTEFNUF9UT19FREdFKTsKKyAgICBjb250ZXh0LT50ZXhJbWFnZTJEKEdy
YXBoaWNzQ29udGV4dDNEOjpURVhUVVJFXzJELCAwLCBHcmFwaGljc0NvbnRleHQzRDo6UkdCQSwg
c2l6ZS53aWR0aCgpLCBzaXplLmhlaWdodCgpLCAwLCBHcmFwaGljc0NvbnRleHQzRDo6UkdCQSwg
R3JhcGhpY3NDb250ZXh0M0Q6OlVOU0lHTkVEX0JZVEUsIDApOworCisgICAgdW5zaWduZWQgb2Zm
c2NyZWVuUGFyZW50Q29sb3JUZXh0dXJlID0gY29udGV4dC0+Y3JlYXRlQ29tcG9zaXRvclRleHR1
cmUoc2l6ZSk7CisgICAgQVNTRVJUKG9mZnNjcmVlblBhcmVudENvbG9yVGV4dHVyZSk7CisgICAg
aWYgKCFvZmZzY3JlZW5QYXJlbnRDb2xvclRleHR1cmUpIHsKKyAgICAgICAgY29udGV4dC0+ZGVs
ZXRlVGV4dHVyZShvZmZzY3JlZW5Db2xvclRleHR1cmUpOworICAgICAgICBjb250ZXh0LT5kZWxl
dGVGcmFtZWJ1ZmZlcihmcmFtZWJ1ZmZlcik7CisgICAgICAgIHJldHVybiAwOworICAgIH0KKwor
ICAgIGNvbnRleHQtPmZyYW1lYnVmZmVyVGV4dHVyZTJEKEdyYXBoaWNzQ29udGV4dDNEOjpGUkFN
RUJVRkZFUiwgR3JhcGhpY3NDb250ZXh0M0Q6OkNPTE9SX0FUVEFDSE1FTlQwLCBHcmFwaGljc0Nv
bnRleHQzRDo6VEVYVFVSRV8yRCwgb2Zmc2NyZWVuQ29sb3JUZXh0dXJlLCAwKTsKKworICAgIHJl
dHVybiBuZXcgQ2FudmFzRnJhbWVidWZmZXIoY29udGV4dCwgc2l6ZSwgZnJhbWVidWZmZXIsIG9m
ZnNjcmVlbkNvbG9yVGV4dHVyZSwgb2Zmc2NyZWVuUGFyZW50Q29sb3JUZXh0dXJlKTsKK30KKwor
fSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9ncHUvQ2FudmFzRnJhbWVidWZmZXIuaCBiL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Z3B1L0NhbnZhc0ZyYW1lYnVmZmVyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZDUyYWJhMWNiNjhhY2JjZWQ1ZDM0
ZWI2MzQ4YzVjODkwMzMzZDkwMwotLS0gL2Rldi9udWxsCisrKyBiL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvZ3B1L0NhbnZhc0ZyYW1lYnVmZmVyLmgKQEAgLTAsMCArMSw3OCBAQAorLyoKKyAq
IENvcHlyaWdodCAoYykgMjAxMCwgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyAqIG1ldDoKKyAqCisgKiAgICAgKiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorICogaW4gdGhlIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogZGlz
dHJpYnV0aW9uLgorICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3Ig
dGhlIG5hbWVzIG9mIGl0cworICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ug
b3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyAqIHRoaXMgc29mdHdhcmUgd2l0aG91
dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwor
ICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIE9XTkVSIE9S
IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBP
UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRI
RU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVm
IENhbnZhc0ZyYW1lYnVmZmVyX2gKKyNkZWZpbmUgQ2FudmFzRnJhbWVidWZmZXJfaAorCisvLyBN
YW5hZ2VzIGEgZnJhbWVidWZmZXIgdG8gdXNlIGZvciBhIDJkIGNhbnZhcy4KKworI2luY2x1ZGUg
IkludFNpemUuaCIKKworI2luY2x1ZGUgPHd0Zi9Ob25jb3B5YWJsZS5oPgorI2luY2x1ZGUgPHd0
Zi9Pd25QdHIuaD4KKyNpbmNsdWRlIDx3dGYvUGFzc093blB0ci5oPgorCituYW1lc3BhY2UgV2Vi
Q29yZSB7CisKK2NsYXNzIFNoYXJlZENvbnRleHQzRDsKKworY2xhc3MgQ2FudmFzRnJhbWVidWZm
ZXIgOiBwdWJsaWMgTm9uY29weWFibGUgeworcHVibGljOgorICAgIHN0YXRpYyBQYXNzT3duUHRy
PENhbnZhc0ZyYW1lYnVmZmVyPiBjcmVhdGUoU2hhcmVkQ29udGV4dDNEKiwgY29uc3QgSW50U2l6
ZSYpOworICAgIH5DYW52YXNGcmFtZWJ1ZmZlcigpOworCisgICAgdm9pZCBiaW5kKCk7CisgICAg
dm9pZCBzd2FwQnVmZmVycygpOworCisgICAgdW5zaWduZWQgdGV4dHVyZUlkRm9yQ29tcG9zaXRv
cigpIGNvbnN0IHsgcmV0dXJuIG1fb2Zmc2NyZWVuUGFyZW50Q29sb3JUZXh0dXJlOyB9CisgICAg
dW5zaWduZWQgdGV4dHVyZUlkRm9yQ2FudmFzKCkgY29uc3QgeyByZXR1cm4gbV9vZmZzY3JlZW5D
b2xvclRleHR1cmU7IH0KKworICAgIGNsYXNzIFN3YXBCdWZmZXJzQ2FsbGJhY2sgOiBwdWJsaWMg
Tm9uY29weWFibGUgeworICAgIHB1YmxpYzoKKyAgICAgICAgdmlydHVhbCB2b2lkIHdpbGxTd2Fw
QnVmZmVycygpID0gMDsKKyAgICB9OworCisgICAgdm9pZCBzZXRXaWxsU3dhcEJ1ZmZlcnNDYWxs
YmFjayhQYXNzT3duUHRyPFN3YXBCdWZmZXJzQ2FsbGJhY2s+KTsKKworcHJpdmF0ZToKKyAgICBD
YW52YXNGcmFtZWJ1ZmZlcihTaGFyZWRDb250ZXh0M0QqIGNvbnRleHQsIGNvbnN0IEludFNpemUm
LCB1bnNpZ25lZCBmcmFtZWJ1ZmZlciwgdW5zaWduZWQgb2Zmc2NyZWVuQ29sb3JUZXh0dXJlLCB1
bnNpZ25lZCBvZmZzY3JlZW5QYXJlbnRDb2xvclRleHR1cmUpOworCisgICAgU2hhcmVkQ29udGV4
dDNEKiBtX2NvbnRleHQ7CisgICAgSW50U2l6ZSBtX3NpemU7CisgICAgdW5zaWduZWQgbV9mcmFt
ZWJ1ZmZlcjsKKyAgICB1bnNpZ25lZCBtX29mZnNjcmVlbkNvbG9yVGV4dHVyZTsKKyAgICB1bnNp
Z25lZCBtX29mZnNjcmVlblBhcmVudENvbG9yVGV4dHVyZTsKKworICAgIE93blB0cjxTd2FwQnVm
ZmVyc0NhbGxiYWNrPiBtX3dpbGxTd2FwQnVmZmVyc0NhbGxiYWNrOworfTsKKworfSAvLyBuYW1l
c3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gQ2FudmFzRnJhbWVidWZmZXJfaApkaWZmIC0tZ2l0
IGEvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ncHUvU2hhcmVkQ29udGV4dDNELmNwcCBiL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3B1L1NoYXJlZENvbnRleHQzRC5jcHAKbmV3IGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MC4uM2I3MzhmMDFmNzI4MTM5MjkzN2ZlZDVlMGRmMjU3Y2M5Y2ZiOTJmNAotLS0gL2Rldi9udWxs
CisrKyBiL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3B1L1NoYXJlZENvbnRleHQzRC5jcHAK
QEAgLTAsMCArMSwzMjUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMTAsIEdvb2dsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJl
CisgKiBtZXQ6CisgKgorICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAgICAqIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqIGNvcHly
aWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIKKyAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUKKyAqIGRpc3RyaWJ1dGlvbi4KKyAqICAgICAqIE5laXRoZXIgdGhl
IG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqIGNvbnRyaWJ1dG9y
cyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9t
CisgKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNz
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBI
T0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUg
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAq
IEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBU
SEUgQ09QWVJJR0hUCisgKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8s
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorCisjaW5jbHVkZSAiU2hhcmVk
Q29udGV4dDNELmgiCisKKyNpbmNsdWRlICJBZmZpbmVUcmFuc2Zvcm0uaCIKKyNpbmNsdWRlICJD
YW52YXNGcmFtZWJ1ZmZlci5oIgorI2luY2x1ZGUgIkNvbG9yLmgiCisjaW5jbHVkZSAiRmxvYXRS
ZWN0LmgiCisjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0M0QuaCIKKyNpbmNsdWRlICJHcmFwaGlj
c1R5cGVzLmgiCisjaW5jbHVkZSAiSW50U2l6ZS5oIgorI2luY2x1ZGUgIlNvbGlkRmlsbFNoYWRl
ci5oIgorI2luY2x1ZGUgIlRleFNoYWRlci5oIgorCisjaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmlu
Zy5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgorCituYW1lc3BhY2UgV2ViQ29y
ZSB7CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBhZmZpbmVUbzN4Myhjb25zdCBBZmZpbmVUcmFuc2Zv
cm0mIHRyYW5zZm9ybSwgZmxvYXQgbWF0WzldKQoreworICAgIG1hdFswXSA9IHRyYW5zZm9ybS5h
KCk7CisgICAgbWF0WzFdID0gdHJhbnNmb3JtLmIoKTsKKyAgICBtYXRbMl0gPSAwLjBmOworICAg
IG1hdFszXSA9IHRyYW5zZm9ybS5jKCk7CisgICAgbWF0WzRdID0gdHJhbnNmb3JtLmQoKTsKKyAg
ICBtYXRbNV0gPSAwLjBmOworICAgIG1hdFs2XSA9IHRyYW5zZm9ybS5lKCk7CisgICAgbWF0Wzdd
ID0gdHJhbnNmb3JtLmYoKTsKKyAgICBtYXRbOF0gPSAxLjBmOworfQorCisvLyBzdGF0aWMKK1Bh
c3NSZWZQdHI8U2hhcmVkQ29udGV4dDNEPiBTaGFyZWRDb250ZXh0M0Q6OmNyZWF0ZShQYXNzT3du
UHRyPEdyYXBoaWNzQ29udGV4dDNEPiBjb250ZXh0KQoreworICAgIHJldHVybiBhZG9wdFJlZihu
ZXcgU2hhcmVkQ29udGV4dDNEKGNvbnRleHQpKTsKK30KKworU2hhcmVkQ29udGV4dDNEOjpTaGFy
ZWRDb250ZXh0M0QoUGFzc093blB0cjxHcmFwaGljc0NvbnRleHQzRD4gY29udGV4dCkKKyAgICA6
IG1fY29udGV4dChjb250ZXh0KQorICAgICwgbV9xdWFkVmVydGljZXMoMCkKKyAgICAsIG1fc29s
aWRGaWxsU2hhZGVyKFNvbGlkRmlsbFNoYWRlcjo6Y3JlYXRlKG1fY29udGV4dC5nZXQoKSkpCisg
ICAgLCBtX3RleFNoYWRlcihUZXhTaGFkZXI6OmNyZWF0ZShtX2NvbnRleHQuZ2V0KCkpKQorCit7
Cit9CisKK1NoYXJlZENvbnRleHQzRDo6flNoYXJlZENvbnRleHQzRCgpCit7CisgICAgbV9jb250
ZXh0LT5kZWxldGVCdWZmZXIobV9xdWFkVmVydGljZXMpOworfQorCit2b2lkIFNoYXJlZENvbnRl
eHQzRDo6c2Npc3Nvcihjb25zdCBGbG9hdFJlY3QmIHJlY3QpCit7CisgICAgbV9jb250ZXh0LT5z
Y2lzc29yKHJlY3QueCgpLCByZWN0LnkoKSwgcmVjdC53aWR0aCgpLCByZWN0LmhlaWdodCgpKTsK
K30KKwordm9pZCBTaGFyZWRDb250ZXh0M0Q6OmVuYWJsZSh1bnNpZ25lZCBjYXBhY2l0eSkKK3sK
KyAgICBtX2NvbnRleHQtPmVuYWJsZShjYXBhY2l0eSk7Cit9CisKK3ZvaWQgU2hhcmVkQ29udGV4
dDNEOjpkaXNhYmxlKHVuc2lnbmVkIGNhcGFjaXR5KQoreworICAgIG1fY29udGV4dC0+ZGlzYWJs
ZShjYXBhY2l0eSk7Cit9CisKK3ZvaWQgU2hhcmVkQ29udGV4dDNEOjpjbGVhckNvbG9yKGNvbnN0
IENvbG9yJiBjb2xvcikKK3sKKyAgICBmbG9hdCByZ2JhWzRdOworICAgIGNvbG9yLmdldFJHQkEo
cmdiYVswXSwgcmdiYVsxXSwgcmdiYVsyXSwgcmdiYVszXSk7CisgICAgbV9jb250ZXh0LT5jbGVh
ckNvbG9yKHJnYmFbMF0sIHJnYmFbMV0sIHJnYmFbMl0sIHJnYmFbM10pOworfQorCit2b2lkIFNo
YXJlZENvbnRleHQzRDo6Y2xlYXIodW5zaWduZWQgbWFzaykKK3sKKyAgICBtX2NvbnRleHQtPmNs
ZWFyKG1hc2spOworfQorCit2b2lkIFNoYXJlZENvbnRleHQzRDo6ZHJhd0FycmF5cyh1bnNpZ25l
ZCBsb25nIG1vZGUsIGxvbmcgZmlyc3QsIGxvbmcgY291bnQpCit7CisgICAgbV9jb250ZXh0LT5k
cmF3QXJyYXlzKG1vZGUsIGZpcnN0LCBjb3VudCk7Cit9CisKK3Vuc2lnbmVkIGxvbmcgU2hhcmVk
Q29udGV4dDNEOjpnZXRFcnJvcigpCit7CisgICAgcmV0dXJuIG1fY29udGV4dC0+Z2V0RXJyb3Io
KTsKK30KKwordm9pZCBTaGFyZWRDb250ZXh0M0Q6OmdldEludGVnZXJ2KHVuc2lnbmVkIGxvbmcg
cG5hbWUsIGludCogdmFsdWUpCit7CisgICAgbV9jb250ZXh0LT5nZXRJbnRlZ2VydihwbmFtZSwg
dmFsdWUpOworfQorCit1bnNpZ25lZCBTaGFyZWRDb250ZXh0M0Q6OmNyZWF0ZUZyYW1lYnVmZmVy
KCkKK3sKKyAgICByZXR1cm4gbV9jb250ZXh0LT5jcmVhdGVGcmFtZWJ1ZmZlcigpOworfQorCit1
bnNpZ25lZCBTaGFyZWRDb250ZXh0M0Q6OmNyZWF0ZVRleHR1cmUoKQoreworICAgIHJldHVybiBt
X2NvbnRleHQtPmNyZWF0ZVRleHR1cmUoKTsKK30KKwordm9pZCBTaGFyZWRDb250ZXh0M0Q6OmRl
bGV0ZUZyYW1lYnVmZmVyKHVuc2lnbmVkIGZyYW1lYnVmZmVyKQoreworICAgIG1fY29udGV4dC0+
ZGVsZXRlRnJhbWVidWZmZXIoZnJhbWVidWZmZXIpOworfQorCit2b2lkIFNoYXJlZENvbnRleHQz
RDo6ZGVsZXRlVGV4dHVyZSh1bnNpZ25lZCB0ZXh0dXJlKQoreworICAgIG1fY29udGV4dC0+ZGVs
ZXRlVGV4dHVyZSh0ZXh0dXJlKTsKK30KKwordm9pZCBTaGFyZWRDb250ZXh0M0Q6OmRlbGV0ZUNv
bXBvc2l0b3JUZXh0dXJlKHVuc2lnbmVkIHRleHR1cmUpCit7CisgICAgbV9jb250ZXh0LT5kZWxl
dGVDb21wb3NpdG9yVGV4dHVyZSh0ZXh0dXJlKTsKK30KKwordm9pZCBTaGFyZWRDb250ZXh0M0Q6
OmZyYW1lYnVmZmVyVGV4dHVyZTJEKHVuc2lnbmVkIGxvbmcgdGFyZ2V0LCB1bnNpZ25lZCBsb25n
IGF0dGFjaG1lbnQsIHVuc2lnbmVkIGxvbmcgdGV4dGFyZ2V0LCB1bnNpZ25lZCB0ZXh0dXJlLCBs
b25nIGxldmVsKQoreworICAgIG1fY29udGV4dC0+ZnJhbWVidWZmZXJUZXh0dXJlMkQodGFyZ2V0
LCBhdHRhY2htZW50LCB0ZXh0YXJnZXQsIHRleHR1cmUsIGxldmVsKTsKK30KKwordm9pZCBTaGFy
ZWRDb250ZXh0M0Q6OnRleFBhcmFtZXRlcmkodW5zaWduZWQgdGFyZ2V0LCB1bnNpZ25lZCBwbmFt
ZSwgaW50IHBhcmFtKQoreworICAgIG1fY29udGV4dC0+dGV4UGFyYW1ldGVyaSh0YXJnZXQsIHBu
YW1lLCBwYXJhbSk7Cit9CisKK2ludCBTaGFyZWRDb250ZXh0M0Q6OnRleEltYWdlMkQodW5zaWdu
ZWQgdGFyZ2V0LCB1bnNpZ25lZCBsZXZlbCwgdW5zaWduZWQgaW50ZXJuYWxmb3JtYXQsIHVuc2ln
bmVkIHdpZHRoLCB1bnNpZ25lZCBoZWlnaHQsIHVuc2lnbmVkIGJvcmRlciwgdW5zaWduZWQgZm9y
bWF0LCB1bnNpZ25lZCB0eXBlLCB2b2lkKiBwaXhlbHMpCit7CisgICAgbV9jb250ZXh0LT50ZXhJ
bWFnZTJEKHRhcmdldCwgbGV2ZWwsIGludGVybmFsZm9ybWF0LCB3aWR0aCwgaGVpZ2h0LCBib3Jk
ZXIsIGZvcm1hdCwgdHlwZSwgcGl4ZWxzKTsKK30KKworaW50IFNoYXJlZENvbnRleHQzRDo6dGV4
U3ViSW1hZ2UyRCh1bnNpZ25lZCB0YXJnZXQsIHVuc2lnbmVkIGxldmVsLCB1bnNpZ25lZCB4b2Zm
c2V0LCB1bnNpZ25lZCB5b2Zmc2V0LCB1bnNpZ25lZCB3aWR0aCwgdW5zaWduZWQgaGVpZ2h0LCB1
bnNpZ25lZCBmb3JtYXQsIHVuc2lnbmVkIHR5cGUsIHZvaWQqIHBpeGVscykKK3sKKyAgICBtX2Nv
bnRleHQtPnRleFN1YkltYWdlMkQodGFyZ2V0LCBsZXZlbCwgeG9mZnNldCwgeW9mZnNldCwgd2lk
dGgsIGhlaWdodCwgZm9ybWF0LCB0eXBlLCBwaXhlbHMpOworfQorCit2b2lkIFNoYXJlZENvbnRl
eHQzRDo6cmVhZFBpeGVscyhsb25nIHgsIGxvbmcgeSwgdW5zaWduZWQgbG9uZyB3aWR0aCwgdW5z
aWduZWQgbG9uZyBoZWlnaHQsIHVuc2lnbmVkIGxvbmcgZm9ybWF0LCB1bnNpZ25lZCBsb25nIHR5
cGUsIHZvaWQqIGRhdGEpCit7CisgICAgbV9jb250ZXh0LT5yZWFkUGl4ZWxzKHgsIHksIHdpZHRo
LCBoZWlnaHQsIGZvcm1hdCwgdHlwZSwgZGF0YSk7Cit9CisKK1Bhc3NSZWZQdHI8VGV4dHVyZT4g
U2hhcmVkQ29udGV4dDNEOjpjcmVhdGVUZXh0dXJlKE5hdGl2ZUltYWdlUHRyIHB0ciwgVGV4dHVy
ZTo6Rm9ybWF0IGZvcm1hdCwgaW50IHdpZHRoLCBpbnQgaGVpZ2h0KQoreworICAgIFJlZlB0cjxU
ZXh0dXJlPiB0ZXh0dXJlOworICAgIGlmIChwdHIpCisgICAgICAgIHRleHR1cmUgPSBtX3RleHR1
cmVzLmdldChwdHIpOworICAgIGlmICh0ZXh0dXJlKQorICAgICAgICByZXR1cm4gdGV4dHVyZS5n
ZXQoKTsKKworICAgIHRleHR1cmUgPSBUZXh0dXJlOjpjcmVhdGUobV9jb250ZXh0LmdldCgpLCBm
b3JtYXQsIHdpZHRoLCBoZWlnaHQpOworICAgIFRleHR1cmUqIHQgPSB0ZXh0dXJlLmdldCgpOwor
ICAgIGlmIChwdHIpCisgICAgICAgIG1fdGV4dHVyZXMuc2V0KHB0ciwgdGV4dHVyZSk7CisgICAg
cmV0dXJuIHQ7Cit9CisKK1Bhc3NSZWZQdHI8VGV4dHVyZT4gU2hhcmVkQ29udGV4dDNEOjpnZXRU
ZXh0dXJlKE5hdGl2ZUltYWdlUHRyIHB0cikKK3sKKyAgICBSZWZQdHI8VGV4dHVyZT4gdGV4dHVy
ZSA9IG1fdGV4dHVyZXMuZ2V0KHB0cik7CisgICAgcmV0dXJuIHRleHR1cmUgPyB0ZXh0dXJlLmdl
dCgpIDogMDsKK30KKworCit2b2lkIFNoYXJlZENvbnRleHQzRDo6YXBwbHlDb21wb3NpdGVPcGVy
YXRvcihDb21wb3NpdGVPcGVyYXRvciBvcCkKK3sKKyAgICBzd2l0Y2ggKG9wKSB7CisgICAgY2Fz
ZSBDb21wb3NpdGVDbGVhcjoKKyAgICAgICAgbV9jb250ZXh0LT5lbmFibGUoR3JhcGhpY3NDb250
ZXh0M0Q6OkJMRU5EKTsKKyAgICAgICAgbV9jb250ZXh0LT5ibGVuZEZ1bmMoR3JhcGhpY3NDb250
ZXh0M0Q6OlpFUk8sIEdyYXBoaWNzQ29udGV4dDNEOjpaRVJPKTsKKyAgICAgICAgYnJlYWs7Cisg
ICAgY2FzZSBDb21wb3NpdGVDb3B5OgorICAgICAgICBtX2NvbnRleHQtPmRpc2FibGUoR3JhcGhp
Y3NDb250ZXh0M0Q6OkJMRU5EKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBDb21wb3NpdGVT
b3VyY2VPdmVyOgorICAgICAgICBtX2NvbnRleHQtPmVuYWJsZShHcmFwaGljc0NvbnRleHQzRDo6
QkxFTkQpOworICAgICAgICBtX2NvbnRleHQtPmJsZW5kRnVuYyhHcmFwaGljc0NvbnRleHQzRDo6
T05FLCBHcmFwaGljc0NvbnRleHQzRDo6T05FX01JTlVTX1NSQ19BTFBIQSk7CisgICAgICAgIGJy
ZWFrOworICAgIGNhc2UgQ29tcG9zaXRlU291cmNlSW46CisgICAgICAgIG1fY29udGV4dC0+ZW5h
YmxlKEdyYXBoaWNzQ29udGV4dDNEOjpCTEVORCk7CisgICAgICAgIG1fY29udGV4dC0+YmxlbmRG
dW5jKEdyYXBoaWNzQ29udGV4dDNEOjpEU1RfQUxQSEEsIEdyYXBoaWNzQ29udGV4dDNEOjpaRVJP
KTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBDb21wb3NpdGVTb3VyY2VPdXQ6CisgICAgICAg
IG1fY29udGV4dC0+ZW5hYmxlKEdyYXBoaWNzQ29udGV4dDNEOjpCTEVORCk7CisgICAgICAgIG1f
Y29udGV4dC0+YmxlbmRGdW5jKEdyYXBoaWNzQ29udGV4dDNEOjpPTkVfTUlOVVNfRFNUX0FMUEhB
LCBHcmFwaGljc0NvbnRleHQzRDo6WkVSTyk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgQ29t
cG9zaXRlU291cmNlQXRvcDoKKyAgICAgICAgbV9jb250ZXh0LT5lbmFibGUoR3JhcGhpY3NDb250
ZXh0M0Q6OkJMRU5EKTsKKyAgICAgICAgbV9jb250ZXh0LT5ibGVuZEZ1bmMoR3JhcGhpY3NDb250
ZXh0M0Q6OkRTVF9BTFBIQSwgR3JhcGhpY3NDb250ZXh0M0Q6Ok9ORV9NSU5VU19TUkNfQUxQSEEp
OworICAgICAgICBicmVhazsKKyAgICBjYXNlIENvbXBvc2l0ZURlc3RpbmF0aW9uT3ZlcjoKKyAg
ICAgICAgbV9jb250ZXh0LT5lbmFibGUoR3JhcGhpY3NDb250ZXh0M0Q6OkJMRU5EKTsKKyAgICAg
ICAgbV9jb250ZXh0LT5ibGVuZEZ1bmMoR3JhcGhpY3NDb250ZXh0M0Q6Ok9ORV9NSU5VU19EU1Rf
QUxQSEEsIEdyYXBoaWNzQ29udGV4dDNEOjpPTkUpOworICAgICAgICBicmVhazsKKyAgICBjYXNl
IENvbXBvc2l0ZURlc3RpbmF0aW9uSW46CisgICAgICAgIG1fY29udGV4dC0+ZW5hYmxlKEdyYXBo
aWNzQ29udGV4dDNEOjpCTEVORCk7CisgICAgICAgIG1fY29udGV4dC0+YmxlbmRGdW5jKEdyYXBo
aWNzQ29udGV4dDNEOjpaRVJPLCBHcmFwaGljc0NvbnRleHQzRDo6U1JDX0FMUEhBKTsKKyAgICAg
ICAgYnJlYWs7CisgICAgY2FzZSBDb21wb3NpdGVEZXN0aW5hdGlvbk91dDoKKyAgICAgICAgbV9j
b250ZXh0LT5lbmFibGUoR3JhcGhpY3NDb250ZXh0M0Q6OkJMRU5EKTsKKyAgICAgICAgbV9jb250
ZXh0LT5ibGVuZEZ1bmMoR3JhcGhpY3NDb250ZXh0M0Q6OlpFUk8sIEdyYXBoaWNzQ29udGV4dDNE
OjpPTkVfTUlOVVNfU1JDX0FMUEhBKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBDb21wb3Np
dGVEZXN0aW5hdGlvbkF0b3A6CisgICAgICAgIG1fY29udGV4dC0+ZW5hYmxlKEdyYXBoaWNzQ29u
dGV4dDNEOjpCTEVORCk7CisgICAgICAgIG1fY29udGV4dC0+YmxlbmRGdW5jKEdyYXBoaWNzQ29u
dGV4dDNEOjpPTkVfTUlOVVNfRFNUX0FMUEhBLCBHcmFwaGljc0NvbnRleHQzRDo6U1JDX0FMUEhB
KTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBDb21wb3NpdGVYT1I6CisgICAgICAgIG1fY29u
dGV4dC0+ZW5hYmxlKEdyYXBoaWNzQ29udGV4dDNEOjpCTEVORCk7CisgICAgICAgIG1fY29udGV4
dC0+YmxlbmRGdW5jKEdyYXBoaWNzQ29udGV4dDNEOjpPTkVfTUlOVVNfRFNUX0FMUEhBLCBHcmFw
aGljc0NvbnRleHQzRDo6T05FX01JTlVTX1NSQ19BTFBIQSk7CisgICAgICAgIGJyZWFrOworICAg
IGNhc2UgQ29tcG9zaXRlUGx1c0RhcmtlcjoKKyAgICBjYXNlIENvbXBvc2l0ZUhpZ2hsaWdodDoK
KyAgICAgICAgLy8gdW5zdXBwb3J0ZWQKKyAgICAgICAgbV9jb250ZXh0LT5kaXNhYmxlKEdyYXBo
aWNzQ29udGV4dDNEOjpCTEVORCk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgQ29tcG9zaXRl
UGx1c0xpZ2h0ZXI6CisgICAgICAgIG1fY29udGV4dC0+ZW5hYmxlKEdyYXBoaWNzQ29udGV4dDNE
OjpCTEVORCk7CisgICAgICAgIG1fY29udGV4dC0+YmxlbmRGdW5jKEdyYXBoaWNzQ29udGV4dDNE
OjpPTkUsIEdyYXBoaWNzQ29udGV4dDNEOjpPTkUpOworICAgICAgICBicmVhazsKKyAgICB9Cit9
CisKK3ZvaWQgU2hhcmVkQ29udGV4dDNEOjp1c2VRdWFkVmVydGljZXMoKQoreworICAgIGlmICgh
bV9xdWFkVmVydGljZXMpIHsKKyAgICAgICAgZmxvYXQgdmVydGljZXNbXSA9IHsgMC4wZiwgMC4w
ZiwgMS4wZiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMS4wZiwgMC4wZiwgMS4wZiwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMC4wZiwgMS4wZiwgMS4wZiwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgMS4wZiwgMS4wZiwgMS4wZiB9OworICAgICAgICBtX3F1YWRW
ZXJ0aWNlcyA9IG1fY29udGV4dC0+Y3JlYXRlQnVmZmVyKCk7CisgICAgICAgIG1fY29udGV4dC0+
YmluZEJ1ZmZlcihHcmFwaGljc0NvbnRleHQzRDo6QVJSQVlfQlVGRkVSLCBtX3F1YWRWZXJ0aWNl
cyk7CisgICAgICAgIG1fY29udGV4dC0+YnVmZmVyRGF0YShHcmFwaGljc0NvbnRleHQzRDo6QVJS
QVlfQlVGRkVSLCBzaXplb2YodmVydGljZXMpLCB2ZXJ0aWNlcywgR3JhcGhpY3NDb250ZXh0M0Q6
OlNUQVRJQ19EUkFXKTsKKyAgICB9IGVsc2UgeworICAgICAgICBtX2NvbnRleHQtPmJpbmRCdWZm
ZXIoR3JhcGhpY3NDb250ZXh0M0Q6OkFSUkFZX0JVRkZFUiwgbV9xdWFkVmVydGljZXMpOworICAg
IH0KK30KKwordm9pZCBTaGFyZWRDb250ZXh0M0Q6OnNldEFjdGl2ZVRleHR1cmUodW5zaWduZWQg
dGV4dHVyZVVuaXQpCit7CisgICAgbV9jb250ZXh0LT5hY3RpdmVUZXh0dXJlKHRleHR1cmVVbml0
KTsKK30KKwordm9pZCBTaGFyZWRDb250ZXh0M0Q6OmJpbmRUZXh0dXJlKHVuc2lnbmVkIHRhcmdl
dCwgdW5zaWduZWQgdGV4dHVyZSkKK3sKKyAgICBpZiAodGFyZ2V0ICE9IEdyYXBoaWNzQ29udGV4
dDNEOjpURVhUVVJFXzJEKSB7CisgICAgICAgIG1fY29udGV4dC0+YmluZFRleHR1cmUodGFyZ2V0
LCB0ZXh0dXJlKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIG1fY29udGV4dC0+Ymlu
ZFRleHR1cmUodGFyZ2V0LCB0ZXh0dXJlKTsKK30KKwordm9pZCBTaGFyZWRDb250ZXh0M0Q6OnVz
ZUZpbGxTb2xpZFByb2dyYW0oY29uc3QgQ29sb3ImIGNvbG9yLCBjb25zdCBBZmZpbmVUcmFuc2Zv
cm0mIHRyYW5zZm9ybSkKK3sKKyAgICBtX3NvbGlkRmlsbFNoYWRlci0+dXNlKHRyYW5zZm9ybSwg
Y29sb3IpOworfQorCit2b2lkIFNoYXJlZENvbnRleHQzRDo6dXNlVGV4dHVyZVByb2dyYW0oZmxv
YXQgYWxwaGEsIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgdHJhbnNmb3JtLCBjb25zdCBBZmZpbmVU
cmFuc2Zvcm0mIHRleFRyYW5zZm9ybSkKK3sKKyAgICBtX3RleFNoYWRlci0+dXNlKHRyYW5zZm9y
bSwgdGV4VHJhbnNmb3JtLCAwLCBhbHBoYSk7Cit9CisKK3ZvaWQgU2hhcmVkQ29udGV4dDNEOjpi
aW5kRnJhbWVidWZmZXIodW5zaWduZWQgZnJhbWVidWZmZXIpCit7CisgICAgbV9jb250ZXh0LT5i
aW5kRnJhbWVidWZmZXIoR3JhcGhpY3NDb250ZXh0M0Q6OkZSQU1FQlVGRkVSLCBmcmFtZWJ1ZmZl
cik7Cit9CisKK3ZvaWQgU2hhcmVkQ29udGV4dDNEOjpzZXRWaWV3cG9ydChjb25zdCBJbnRTaXpl
JiBzaXplKQoreworICAgIG1fY29udGV4dC0+dmlld3BvcnQoMCwgMCwgc2l6ZS53aWR0aCgpLCBz
aXplLmhlaWdodCgpKTsKK30KKworYm9vbCBTaGFyZWRDb250ZXh0M0Q6OnN1cHBvcnRzQkdSQSgp
Cit7CisgICAgcmV0dXJuIG1fY29udGV4dC0+c3VwcG9ydHNCR1JBKCk7Cit9CisKK3Vuc2lnbmVk
IFNoYXJlZENvbnRleHQzRDo6Y3JlYXRlQ29tcG9zaXRvclRleHR1cmUoY29uc3QgSW50U2l6ZSYg
c2l6ZSkKK3sKKyAgICByZXR1cm4gbV9jb250ZXh0LT5jcmVhdGVDb21wb3NpdG9yVGV4dHVyZShz
aXplLndpZHRoKCksIHNpemUuaGVpZ2h0KCkpOworfQorCit2b2lkIFNoYXJlZENvbnRleHQzRDo6
Y29weVRleHR1cmVUb0NvbXBvc2l0b3IodW5zaWduZWQgc291cmNlLCB1bnNpZ25lZCBkZXN0aW5h
dGlvbikKK3sKKyAgICBtX2NvbnRleHQtPmNvcHlUZXh0dXJlVG9Db21wb3NpdG9yKHNvdXJjZSwg
ZGVzdGluYXRpb24pOworfQorCitib29sIFNoYXJlZENvbnRleHQzRDo6cGFpbnRzSW50b0NhbnZh
c0J1ZmZlcigpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fY29udGV4dC0+cGFpbnRzSW50b0NhbnZh
c0J1ZmZlcigpOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dwdS9TaGFyZWRDb250ZXh0M0QuaCBiL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvZ3B1L1NoYXJlZENvbnRleHQzRC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjhhYmNiMzE2
ZGQyN2I5OGU3YTQ2ODRhZGVjMjA4NTg3YWRjYmJmOGYKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dwdS9TaGFyZWRDb250ZXh0M0QuaApAQCAtMCwwICsxLDEy
MSBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAxMCwgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyAqIG1ldDoKKyAq
CisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorICog
aW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZQorICogZGlzdHJpYnV0aW9uLgorICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29n
bGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworICogY29udHJpYnV0b3JzIG1heSBiZSB1c2Vk
IHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyAqIHRoaXMgc29m
dHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENP
TlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFS
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQK
KyAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBP
UiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAq
LworCisjaWZuZGVmIFNoYXJlZENvbnRleHQzRF9oCisjZGVmaW5lIFNoYXJlZENvbnRleHQzRF9o
CisKKyNpbmNsdWRlICJHcmFwaGljc1R5cGVzLmgiCisjaW5jbHVkZSAiSW1hZ2VTb3VyY2UuaCIK
KyNpbmNsdWRlICJUZXh0dXJlLmgiCisKKyNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgorI2luY2x1
ZGUgPHd0Zi9Pd25QdHIuaD4KKyNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgorI2luY2x1ZGUg
PHd0Zi9SZWZQdHIuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBBZmZpbmVUcmFu
c2Zvcm07CitjbGFzcyBDYW52YXNGcmFtZWJ1ZmZlcjsKK2NsYXNzIENvbG9yOworY2xhc3MgR3Jh
cGhpY3NDb250ZXh0M0Q7CitjbGFzcyBGbG9hdFJlY3Q7CitjbGFzcyBJbnRTaXplOworY2xhc3Mg
U29saWRGaWxsU2hhZGVyOworY2xhc3MgVGV4U2hhZGVyOworCit0eXBlZGVmIEhhc2hNYXA8TmF0
aXZlSW1hZ2VQdHIsIFJlZlB0cjxUZXh0dXJlPiA+IFRleHR1cmVIYXNoTWFwOworCitjbGFzcyBT
aGFyZWRDb250ZXh0M0QgOiBwdWJsaWMgUmVmQ291bnRlZDxTaGFyZWRDb250ZXh0M0Q+IHsKK3B1
YmxpYzoKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxTaGFyZWRDb250ZXh0M0Q+IGNyZWF0ZShQYXNz
T3duUHRyPEdyYXBoaWNzQ29udGV4dDNEPik7CisgICAgflNoYXJlZENvbnRleHQzRCgpOworCisg
ICAgLy8gRnVuY3Rpb25zIHRoYXQgZGVsZWdhdGUgZGlyZWN0bHkgdG8gR3JhcGhpY3NDb250ZXh0
M0QsIHdpdGggY2FjaGluZworICAgIHZvaWQgYmluZEZyYW1lYnVmZmVyKHVuc2lnbmVkIGZyYW1l
YnVmZmVyKTsKKyAgICB2b2lkIHNldFZpZXdwb3J0KGNvbnN0IEludFNpemUmKTsKKyAgICB2b2lk
IHNjaXNzb3IoY29uc3QgRmxvYXRSZWN0Jik7CisgICAgdm9pZCBlbmFibGUodW5zaWduZWQgY2Fw
YWNpdHkpOworICAgIHZvaWQgZGlzYWJsZSh1bnNpZ25lZCBjYXBhY2l0eSk7CisgICAgdm9pZCBj
bGVhckNvbG9yKGNvbnN0IENvbG9yJik7CisgICAgdm9pZCBjbGVhcih1bnNpZ25lZCBtYXNrKTsK
KyAgICB2b2lkIGRyYXdBcnJheXModW5zaWduZWQgbG9uZyBtb2RlLCBsb25nIGZpcnN0LCBsb25n
IGNvdW50KTsKKyAgICB1bnNpZ25lZCBsb25nIGdldEVycm9yKCk7CisgICAgdm9pZCBnZXRJbnRl
Z2Vydih1bnNpZ25lZCBsb25nIHBuYW1lLCBpbnQqIHZhbHVlKTsKKworICAgIHVuc2lnbmVkIGNy
ZWF0ZUZyYW1lYnVmZmVyKCk7CisgICAgdW5zaWduZWQgY3JlYXRlVGV4dHVyZSgpOworCisgICAg
dm9pZCBkZWxldGVGcmFtZWJ1ZmZlcih1bnNpZ25lZCBmcmFtZWJ1ZmZlcik7CisgICAgdm9pZCBk
ZWxldGVUZXh0dXJlKHVuc2lnbmVkIHRleHR1cmUpOworICAgIHZvaWQgZGVsZXRlQ29tcG9zaXRv
clRleHR1cmUodW5zaWduZWQgdGV4dHVyZSk7CisKKyAgICB2b2lkIGZyYW1lYnVmZmVyVGV4dHVy
ZTJEKHVuc2lnbmVkIGxvbmcgdGFyZ2V0LCB1bnNpZ25lZCBsb25nIGF0dGFjaG1lbnQsIHVuc2ln
bmVkIGxvbmcgdGV4dGFyZ2V0LCB1bnNpZ25lZCwgbG9uZyBsZXZlbCk7CisgICAgdm9pZCB0ZXhQ
YXJhbWV0ZXJpKHVuc2lnbmVkIHRhcmdldCwgdW5zaWduZWQgcG5hbWUsIGludCBwYXJhbSk7Cisg
ICAgaW50IHRleEltYWdlMkQodW5zaWduZWQgdGFyZ2V0LCB1bnNpZ25lZCBsZXZlbCwgdW5zaWdu
ZWQgaW50ZXJuYWxmb3JtYXQsIHVuc2lnbmVkIHdpZHRoLCB1bnNpZ25lZCBoZWlnaHQsIHVuc2ln
bmVkIGJvcmRlciwgdW5zaWduZWQgZm9ybWF0LCB1bnNpZ25lZCB0eXBlLCB2b2lkKiBwaXhlbHMp
OworICAgIGludCB0ZXhTdWJJbWFnZTJEKHVuc2lnbmVkIHRhcmdldCwgdW5zaWduZWQgbGV2ZWws
IHVuc2lnbmVkIHhvZmZzZXQsIHVuc2lnbmVkIHlvZmZzZXQsIHVuc2lnbmVkIHdpZHRoLCB1bnNp
Z25lZCBoZWlnaHQsIHVuc2lnbmVkIGZvcm1hdCwgdW5zaWduZWQgdHlwZSwgdm9pZCogcGl4ZWxz
KTsKKworICAgIHZvaWQgcmVhZFBpeGVscyhsb25nIHgsIGxvbmcgeSwgdW5zaWduZWQgbG9uZyB3
aWR0aCwgdW5zaWduZWQgbG9uZyBoZWlnaHQsIHVuc2lnbmVkIGxvbmcgZm9ybWF0LCB1bnNpZ25l
ZCBsb25nIHR5cGUsIHZvaWQqIGRhdGEpOworCisgICAgYm9vbCBzdXBwb3J0c0JHUkEoKTsKKyAg
ICB1bnNpZ25lZCBjcmVhdGVDb21wb3NpdG9yVGV4dHVyZShjb25zdCBJbnRTaXplJik7CisgICAg
dm9pZCBjb3B5VGV4dHVyZVRvQ29tcG9zaXRvcih1bnNpZ25lZCwgdW5zaWduZWQpOworCisgICAg
Ym9vbCBwYWludHNJbnRvQ2FudmFzQnVmZmVyKCkgY29uc3Q7CisKKyAgICAvLyBTaGFyZWQgbG9n
aWMgZm9yIGNhbnZhcyAyZAorICAgIHZvaWQgYXBwbHlDb21wb3NpdGVPcGVyYXRvcihDb21wb3Np
dGVPcGVyYXRvcik7CisgICAgdm9pZCB1c2VRdWFkVmVydGljZXMoKTsKKworICAgIHZvaWQgdXNl
RmlsbFNvbGlkUHJvZ3JhbShjb25zdCBDb2xvciYsIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYpOwor
ICAgIHZvaWQgdXNlVGV4dHVyZVByb2dyYW0oZmxvYXQgYWxwaGEsIGNvbnN0IEFmZmluZVRyYW5z
Zm9ybSYsIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYpOworCisgICAgdm9pZCBzZXRBY3RpdmVUZXh0
dXJlKHVuc2lnbmVkIHRleHR1cmVVbml0KTsKKyAgICB2b2lkIGJpbmRUZXh0dXJlKHVuc2lnbmVk
IHRhcmdldCwgdW5zaWduZWQgdGV4dHVyZSk7CisKKyAgICBQYXNzUmVmUHRyPFRleHR1cmU+IGNy
ZWF0ZVRleHR1cmUoTmF0aXZlSW1hZ2VQdHIsIFRleHR1cmU6OkZvcm1hdCwgaW50IHdpZHRoLCBp
bnQgaGVpZ2h0KTsKKyAgICBQYXNzUmVmUHRyPFRleHR1cmU+IGdldFRleHR1cmUoTmF0aXZlSW1h
Z2VQdHIpOworCitwcml2YXRlOgorICAgIFNoYXJlZENvbnRleHQzRChQYXNzT3duUHRyPEdyYXBo
aWNzQ29udGV4dDNEPiBjb250ZXh0KTsKKworICAgIE93blB0cjxHcmFwaGljc0NvbnRleHQzRD4g
bV9jb250ZXh0OworCisgICAgdW5zaWduZWQgbV9xdWFkVmVydGljZXM7CisKKyAgICBPd25QdHI8
U29saWRGaWxsU2hhZGVyPiBtX3NvbGlkRmlsbFNoYWRlcjsKKyAgICBPd25QdHI8VGV4U2hhZGVy
PiBtX3RleFNoYWRlcjsKKworICAgIFRleHR1cmVIYXNoTWFwIG1fdGV4dHVyZXM7Cit9OworCit9
IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBTaGFyZWRDb250ZXh0M0RfaApkaWZm
IC0tZ2l0IGEvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ncHUvVGV4dHVyZS5jcHAgYi9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dwdS9UZXh0dXJlLmNwcAppbmRleCA1NTc2MDNjOTc2MzJm
ZTBmMzhmNWI3MzZlYzY1YTNjNjVjNzE0MjM2Li4zNmU0YWQ1ZWZjMjY4MmRiNWEwOTgyOTIwMjNj
MmQzYjVmYTk2ZDc4IDEwMDY0NAotLS0gYS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dwdS9U
ZXh0dXJlLmNwcAorKysgYi9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dwdS9UZXh0dXJlLmNw
cApAQCAtMzQsNiArMzQsNyBAQAogCiAjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0M0QuaCIKICNp
bmNsdWRlICJJbnRSZWN0LmgiCisKICNpbmNsdWRlIDx3dGYvT3duQXJyYXlQdHIuaD4KIAogbmFt
ZXNwYWNlIFdlYkNvcmUgewpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9t
YWMvR3JhcGhpY3NMYXllckNBLmggYi9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL21hYy9HcmFw
aGljc0xheWVyQ0EuaAppbmRleCBhOWY3NDdhZDAwNGQ4MmUzOTYzOTQ3YTk2NDJkMmMxNTI5MjQ1
YjQzLi4xY2EwMjc5NDEzNmRjODgzNzc2NGZkZjRlYmYzM2IwZTEyNTAyYjRiIDEwMDY0NAotLS0g
YS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL21hYy9HcmFwaGljc0xheWVyQ0EuaAorKysgYi9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL21hYy9HcmFwaGljc0xheWVyQ0EuaApAQCAtMTAzLDcg
KzEwMyw3IEBAIHB1YmxpYzoKICAgICAKICAgICB2aXJ0dWFsIHZvaWQgc2V0Q29udGVudHNUb0lt
YWdlKEltYWdlKik7CiAgICAgdmlydHVhbCB2b2lkIHNldENvbnRlbnRzVG9NZWRpYShQbGF0Zm9y
bUxheWVyKik7Ci0gICAgdmlydHVhbCB2b2lkIHNldENvbnRlbnRzVG9DYW52YXMoUGxhdGZvcm1M
YXllciopOworICAgIHZpcnR1YWwgdm9pZCBzZXRDb250ZW50c1RvV2ViR0woUGxhdGZvcm1MYXll
ciopOwogCiAgICAgdmlydHVhbCBib29sIGhhc0NvbnRlbnRzTGF5ZXIoKSBjb25zdCB7IHJldHVy
biBtX2NvbnRlbnRzTGF5ZXI7IH0KICAgICAKZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvbWFjL0dyYXBoaWNzTGF5ZXJDQS5tbSBiL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvbWFjL0dyYXBoaWNzTGF5ZXJDQS5tbQppbmRleCAzMTVjYzAwOTEwM2M2OThmYTAwMTQ3YjQ5
M2Y4NjU0OWM4MWYyY2FlLi4wMDE3Y2JmZTU3NDA5N2JlYjc5MGQ1ODJkMDg2Y2ExNTgxMzI3MWM3
IDEwMDY0NAotLS0gYS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL21hYy9HcmFwaGljc0xheWVy
Q0EubW0KKysrIGIvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9tYWMvR3JhcGhpY3NMYXllckNB
Lm1tCkBAIC0xNzMxLDcgKzE3MzEsNyBAQCB2b2lkIEdyYXBoaWNzTGF5ZXJDQTo6cGF1c2VBbmlt
YXRpb25PbkxheWVyKEFuaW1hdGVkUHJvcGVydHlJRCBwcm9wZXJ0eSwgY29uc3QgUwogICAgIH0K
IH0KIAotdm9pZCBHcmFwaGljc0xheWVyQ0E6OnNldENvbnRlbnRzVG9DYW52YXMoUGxhdGZvcm1M
YXllciogY2FudmFzTGF5ZXIpCit2b2lkIEdyYXBoaWNzTGF5ZXJDQTo6c2V0Q29udGVudHNUb1dl
YkdMKFBsYXRmb3JtTGF5ZXIqIGNhbnZhc0xheWVyKQogewogICAgIGlmIChjYW52YXNMYXllciA9
PSBtX2NvbnRlbnRzTGF5ZXIpCiAgICAgICAgIHJldHVybjsKZGlmZiAtLWdpdCBhL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3Mvc2tpYS9HcmFwaGljc0NvbnRleHRTa2lhLmNwcCBiL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3Mvc2tpYS9HcmFwaGljc0NvbnRleHRTa2lhLmNwcAppbmRleCBiNGZk
ZGQ1NjhkZTVlOTEyOGUxMzdlODU1ZDM4OGRjYzZhOTI4OGIzLi5hNzdmMTIyYjk0MzI3NDk5ZTAx
MjM4NWI3OWI5NDQ0MzVmMzQ1M2YzIDEwMDY0NAotLS0gYS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL3NraWEvR3JhcGhpY3NDb250ZXh0U2tpYS5jcHAKKysrIGIvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9za2lhL0dyYXBoaWNzQ29udGV4dFNraWEuY3BwCkBAIC0xMjQyLDkgKzEyNDIsOSBA
QCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6dHJhbnNsYXRlKGZsb2F0IHcsIGZsb2F0IGgpCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgV2ViQ29yZUZsb2F0VG9Ta1Nj
YWxhcihoKSk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpzZXRHcmFwaGljc0NvbnRleHQz
RChHcmFwaGljc0NvbnRleHQzRCogY29udGV4dDNELCBjb25zdCBJbnRTaXplJiBzaXplKQordm9p
ZCBHcmFwaGljc0NvbnRleHQ6OnNldFNoYXJlZENvbnRleHQzRChTaGFyZWRDb250ZXh0M0QqIGNv
bnRleHQsIENhbnZhc0ZyYW1lYnVmZmVyKiBmcmFtZWJ1ZmZlciwgY29uc3QgSW50U2l6ZSYgc2l6
ZSkKIHsKLSAgICBwbGF0Zm9ybUNvbnRleHQoKS0+c2V0R3JhcGhpY3NDb250ZXh0M0QoY29udGV4
dDNELCBzaXplKTsKKyAgICBwbGF0Zm9ybUNvbnRleHQoKS0+c2V0U2hhcmVkQ29udGV4dDNEKGNv
bnRleHQsIGZyYW1lYnVmZmVyLCBzaXplKTsKIH0KIAogdm9pZCBHcmFwaGljc0NvbnRleHQ6OnN5
bmNTb2Z0d2FyZUNhbnZhcygpCkBAIC0xMjUyLDQgKzEyNTIsMTQgQEAgdm9pZCBHcmFwaGljc0Nv
bnRleHQ6OnN5bmNTb2Z0d2FyZUNhbnZhcygpCiAgICAgcGxhdGZvcm1Db250ZXh0KCktPnN5bmNT
b2Z0d2FyZUNhbnZhcygpOwogfQogCit1bnNpZ25lZCBHcmFwaGljc0NvbnRleHQ6OnRleHR1cmVJ
ZEZvckNvbXBvc2l0b3IoKSBjb25zdAoreworICAgIHJldHVybiBwbGF0Zm9ybUNvbnRleHQoKS0+
Z3B1Q2FudmFzKCktPnRleHR1cmVJZEZvckNvbXBvc2l0b3IoKTsKK30KKwordW5zaWduZWQgR3Jh
cGhpY3NDb250ZXh0Ojp0ZXh0dXJlSWRGb3JDYW52YXMoKSBjb25zdAoreworICAgIHJldHVybiBw
bGF0Zm9ybUNvbnRleHQoKS0+Z3B1Q2FudmFzKCktPnRleHR1cmVJZEZvckNhbnZhcygpOworfQor
CiB9ICAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9za2lhL0ltYWdlQnVmZmVyU2tpYS5jcHAgYi9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL3NraWEvSW1hZ2VCdWZmZXJTa2lhLmNwcAppbmRleCA5NDAzNDA2MzAwYTdmZTc5ZmUwNGZl
MjFjZjE0OTU1ZTcyYTI1OWRiLi41MjgyNDQ0OWVlZWYzYTNjNTU4NzM3ODUxYzRjNDg3MWQ3MWFk
ZWViIDEwMDY0NAotLS0gYS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3NraWEvSW1hZ2VCdWZm
ZXJTa2lhLmNwcAorKysgYi9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3NraWEvSW1hZ2VCdWZm
ZXJTa2lhLmNwcApAQCAtMzYsNiArMzYsNyBAQAogI2luY2x1ZGUgIkJhc2U2NC5oIgogI2luY2x1
ZGUgIkJpdG1hcEltYWdlLmgiCiAjaW5jbHVkZSAiQml0bWFwSW1hZ2VTaW5nbGVGcmFtZVNraWEu
aCIKKyNpbmNsdWRlICJHTEVTMkNhbnZhcy5oIgogI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5o
IgogI2luY2x1ZGUgIkltYWdlRGF0YS5oIgogI2luY2x1ZGUgIlBsYXRmb3JtQ29udGV4dFNraWEu
aCIKQEAgLTEwOCw2ICsxMDksMTYgQEAgdm9pZCBJbWFnZUJ1ZmZlcjo6Y2xpcChHcmFwaGljc0Nv
bnRleHQqIGNvbnRleHQsIGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkgY29uc3QKIHZvaWQgSW1hZ2VC
dWZmZXI6OmRyYXcoR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0LCBDb2xvclNwYWNlIHN0eWxlQ29s
b3JTcGFjZSwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBzcmNS
ZWN0LAogICAgICAgICAgICAgICAgICAgICAgICBDb21wb3NpdGVPcGVyYXRvciBvcCwgYm9vbCB1
c2VMb3dRdWFsaXR5U2NhbGUpCiB7CisgICAgaWYgKGNvbnRleHQtPnBsYXRmb3JtQ29udGV4dCgp
LT51c2VHUFUoKSAmJiBtX2RhdGEubV9wbGF0Zm9ybUNvbnRleHQudXNlR1BVKCkpIHsKKyAgICAg
ICAgUGxhdGZvcm1Db250ZXh0U2tpYSogc291cmNlUGxhdGZvcm1Db250ZXh0ID0gJm1fZGF0YS5t
X3BsYXRmb3JtQ29udGV4dDsKKyAgICAgICAgc291cmNlUGxhdGZvcm1Db250ZXh0LT5wcmVwYXJl
Rm9ySGFyZHdhcmVEcmF3KCk7CisgICAgICAgIEZsb2F0UmVjdCBkZXN0UmVjdEZsaXBwZWQoZGVz
dFJlY3QpOworICAgICAgICBkZXN0UmVjdEZsaXBwZWQuc2V0WShkZXN0UmVjdC5ib3R0b20oKSk7
CisgICAgICAgIGRlc3RSZWN0RmxpcHBlZC5zZXRIZWlnaHQoLWRlc3RSZWN0LmhlaWdodCgpKTsK
KyAgICAgICAgY29udGV4dC0+cGxhdGZvcm1Db250ZXh0KCktPmdwdUNhbnZhcygpLT5kcmF3VGV4
dHVyZWRSZWN0KHNvdXJjZVBsYXRmb3JtQ29udGV4dC0+Z3B1Q2FudmFzKCktPnRleHR1cmVJZEZv
ckNhbnZhcygpLCBtX3NpemUsIHNyY1JlY3QsIGRlc3RSZWN0RmxpcHBlZCwgc3R5bGVDb2xvclNw
YWNlLCBvcCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKICAgICBSZWZQdHI8SW1hZ2U+IGlt
YWdlID0gQml0bWFwSW1hZ2VTaW5nbGVGcmFtZVNraWE6OmNyZWF0ZSgqbV9kYXRhLm1fcGxhdGZv
cm1Db250ZXh0LmJpdG1hcCgpLCBjb250ZXh0ID09IG1fY29udGV4dCk7CiAgICAgY29udGV4dC0+
ZHJhd0ltYWdlKGltYWdlLmdldCgpLCBzdHlsZUNvbG9yU3BhY2UsIGRlc3RSZWN0LCBzcmNSZWN0
LCBvcCwgdXNlTG93UXVhbGl0eVNjYWxlKTsKIH0KZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3Mvc2tpYS9JbWFnZVNraWEuY3BwIGIvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9za2lhL0ltYWdlU2tpYS5jcHAKaW5kZXggYWVkMjg5ZmUzYzE1NWFhNWQzNTk2ZDQ5NGI2MDg5
M2U0YzAxNmJiNi4uYzUxN2E4YTgwOGJhOWY2ZWZiMGI4MjFlZjE1OGRjNGRkYjk5ZTczZiAxMDA2
NDQKLS0tIGEvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9za2lhL0ltYWdlU2tpYS5jcHAKKysr
IGIvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9za2lhL0ltYWdlU2tpYS5jcHAKQEAgLTQ3LDYg
KzQ3LDcgQEAKICNpbmNsdWRlICJTa1JlY3QuaCIKICNpbmNsdWRlICJTa1NoYWRlci5oIgogI2lu
Y2x1ZGUgIlNraWFVdGlscy5oIgorI2luY2x1ZGUgIlRleHR1cmUuaCIKIAogI2luY2x1ZGUgInNr
aWEvZXh0L2ltYWdlX29wZXJhdGlvbnMuaCIKICNpbmNsdWRlICJza2lhL2V4dC9wbGF0Zm9ybV9j
YW52YXMuaCIKQEAgLTQxMSw3ICs0MTIsNyBAQCBzdGF0aWMgdm9pZCBkcmF3Qml0bWFwR0xFUzIo
R3JhcGhpY3NDb250ZXh0KiBjdHh0LCBOYXRpdmVJbWFnZVNraWEqIGJpdG1hcCwgY29ucwogewog
ICAgIGN0eHQtPnBsYXRmb3JtQ29udGV4dCgpLT5wcmVwYXJlRm9ySGFyZHdhcmVEcmF3KCk7CiAg
ICAgR0xFUzJDYW52YXMqIGdwdUNhbnZhcyA9IGN0eHQtPnBsYXRmb3JtQ29udGV4dCgpLT5ncHVD
YW52YXMoKTsKLSAgICBUZXh0dXJlKiB0ZXh0dXJlID0gZ3B1Q2FudmFzLT5nZXRUZXh0dXJlKGJp
dG1hcCk7CisgICAgUmVmUHRyPFRleHR1cmU+IHRleHR1cmUgPSBncHVDYW52YXMtPmdldFRleHR1
cmUoYml0bWFwKTsKICAgICBpZiAoIXRleHR1cmUpIHsKICAgICAgICAgQVNTRVJUKGJpdG1hcC0+
Y29uZmlnKCkgPT0gU2tCaXRtYXA6OmtBUkdCXzg4ODhfQ29uZmlnKTsKICAgICAgICAgQVNTRVJU
KGJpdG1hcC0+cm93Qnl0ZXMoKSA9PSBiaXRtYXAtPndpZHRoKCkgKiA0KTsKQEAgLTQyMCw3ICs0
MjEsNyBAQCBzdGF0aWMgdm9pZCBkcmF3Qml0bWFwR0xFUzIoR3JhcGhpY3NDb250ZXh0KiBjdHh0
LCBOYXRpdmVJbWFnZVNraWEqIGJpdG1hcCwgY29ucwogICAgICAgICBBU1NFUlQoYml0bWFwLT5n
ZXRQaXhlbHMoKSk7CiAgICAgICAgIHRleHR1cmUtPmxvYWQoYml0bWFwLT5nZXRQaXhlbHMoKSk7
CiAgICAgfQotICAgIGdwdUNhbnZhcy0+ZHJhd1RleHR1cmVkUmVjdCh0ZXh0dXJlLCBzcmNSZWN0
LCBkc3RSZWN0LCBzdHlsZUNvbG9yU3BhY2UsIGNvbXBvc2l0ZU9wKTsKKyAgICBncHVDYW52YXMt
PmRyYXdUZXh0dXJlZFJlY3QodGV4dHVyZS5nZXQoKSwgc3JjUmVjdCwgZHN0UmVjdCwgc3R5bGVD
b2xvclNwYWNlLCBjb21wb3NpdGVPcCk7CiB9CiAKIC8vID09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9za2lhL1BsYXRmb3JtQ29udGV4dFNraWEuY3BwIGIvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9za2lhL1BsYXRmb3JtQ29udGV4dFNraWEuY3BwCmluZGV4IDNiMWQwMTVjZjEyMjM5
NTI3NDNlN2FhNzY0OTM3MmFjNDc2YzhmNTIuLmM1NGVhOWY1YzA4NWQ3ZTgxYTJmNmYwZTllY2Qw
ZmE1ODk0YzQ1OTUgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc2tpYS9Q
bGF0Zm9ybUNvbnRleHRTa2lhLmNwcAorKysgYi9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3Nr
aWEvUGxhdGZvcm1Db250ZXh0U2tpYS5jcHAKQEAgLTMzLDEyICszMywxNCBAQAogI2luY2x1ZGUg
IlBsYXRmb3JtQ29udGV4dFNraWEuaCIKIAogI2luY2x1ZGUgIkFmZmluZVRyYW5zZm9ybS5oIgot
I2luY2x1ZGUgIkNhbnZhc0xheWVyQ2hyb21pdW0uaCIKKyNpbmNsdWRlICJDYW52YXNGcmFtZWJ1
ZmZlci5oIgorI2luY2x1ZGUgIldlYkdMTGF5ZXJDaHJvbWl1bS5oIgogI2luY2x1ZGUgIkdMRVMy
Q2FudmFzLmgiCiAjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCiAjaW5jbHVkZSAiR3JhcGhp
Y3NDb250ZXh0M0QuaCIKICNpbmNsdWRlICJJbWFnZUJ1ZmZlci5oIgogI2luY2x1ZGUgIk5hdGl2
ZUltYWdlU2tpYS5oIgorI2luY2x1ZGUgIlNoYXJlZENvbnRleHQzRC5oIgogI2luY2x1ZGUgIlNr
aWFVdGlscy5oIgogI2luY2x1ZGUgIlRleHR1cmUuaCIKICNpbmNsdWRlICJUaWxpbmdEYXRhLmgi
CkBAIC0yMTYsMTIgKzIxOCw2IEBAIFBsYXRmb3JtQ29udGV4dFNraWE6OlBsYXRmb3JtQ29udGV4
dFNraWEoc2tpYTo6UGxhdGZvcm1DYW52YXMqIGNhbnZhcykKIAogUGxhdGZvcm1Db250ZXh0U2tp
YTo6flBsYXRmb3JtQ29udGV4dFNraWEoKQogewotI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJ
VElORykKLSAgICBpZiAobV9ncHVDYW52YXMpIHsKLSAgICAgICAgQ2FudmFzTGF5ZXJDaHJvbWl1
bSogbGF5ZXIgPSBzdGF0aWNfY2FzdDxDYW52YXNMYXllckNocm9taXVtKj4obV9ncHVDYW52YXMt
PmNvbnRleHQoKS0+cGxhdGZvcm1MYXllcigpKTsKLSAgICAgICAgbGF5ZXItPnNldFByZXBhcmVU
ZXh0dXJlQ2FsbGJhY2soMCk7Ci0gICAgfQotI2VuZGlmCiB9CiAKIHZvaWQgUGxhdGZvcm1Db250
ZXh0U2tpYTo6c2V0Q2FudmFzKHNraWE6OlBsYXRmb3JtQ2FudmFzKiBjYW52YXMpCkBAIC02Nzgs
MzMgKzY3NCwzMyBAQCB2b2lkIFBsYXRmb3JtQ29udGV4dFNraWE6OmFwcGx5QW50aUFsaWFzZWRD
bGlwUGF0aHMoV1RGOjpWZWN0b3I8U2tQYXRoPiYgcGF0aHMpCiAgICAgbV9jYW52YXMtPnJlc3Rv
cmUoKTsKIH0KIAotI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKLWNsYXNzIFByZXBh
cmVUZXh0dXJlQ2FsbGJhY2tJbXBsIDogcHVibGljIENhbnZhc0xheWVyQ2hyb21pdW06OlByZXBh
cmVUZXh0dXJlQ2FsbGJhY2sgeworY2xhc3MgU3dhcEJ1ZmZlcnNDYWxsYmFja0ltcGwgOiBwdWJs
aWMgQ2FudmFzRnJhbWVidWZmZXI6OlN3YXBCdWZmZXJzQ2FsbGJhY2sgewogcHVibGljOgotICAg
IHN0YXRpYyBQYXNzT3duUHRyPFByZXBhcmVUZXh0dXJlQ2FsbGJhY2tJbXBsPiBjcmVhdGUoUGxh
dGZvcm1Db250ZXh0U2tpYSogcGNzKQorICAgIHN0YXRpYyBQYXNzT3duUHRyPFN3YXBCdWZmZXJz
Q2FsbGJhY2s+IGNyZWF0ZShQbGF0Zm9ybUNvbnRleHRTa2lhKiBwY3MpCiAgICAgewotICAgICAg
ICByZXR1cm4gbmV3IFByZXBhcmVUZXh0dXJlQ2FsbGJhY2tJbXBsKHBjcyk7CisgICAgICAgIHJl
dHVybiBhZG9wdFB0cihuZXcgU3dhcEJ1ZmZlcnNDYWxsYmFja0ltcGwocGNzKSk7CiAgICAgfQog
Ci0gICAgdmlydHVhbCB2b2lkIHdpbGxQcmVwYXJlVGV4dHVyZSgpCisgICAgdmlydHVhbCB2b2lk
IHdpbGxTd2FwQnVmZmVycygpCiAgICAgewogICAgICAgICBtX3Bjcy0+cHJlcGFyZUZvckhhcmR3
YXJlRHJhdygpOwogICAgIH0KKwogcHJpdmF0ZToKLSAgICBleHBsaWNpdCBQcmVwYXJlVGV4dHVy
ZUNhbGxiYWNrSW1wbChQbGF0Zm9ybUNvbnRleHRTa2lhKiBwY3MpIDogbV9wY3MocGNzKSB7fQor
ICAgIGV4cGxpY2l0IFN3YXBCdWZmZXJzQ2FsbGJhY2tJbXBsKFBsYXRmb3JtQ29udGV4dFNraWEq
IHBjcykKKyAgICAgICAgOiBtX3BjcyhwY3MpCisgICAgeworICAgIH0KKwogICAgIFBsYXRmb3Jt
Q29udGV4dFNraWEqIG1fcGNzOwogfTsKLSNlbmRpZgogCi12b2lkIFBsYXRmb3JtQ29udGV4dFNr
aWE6OnNldEdyYXBoaWNzQ29udGV4dDNEKEdyYXBoaWNzQ29udGV4dDNEKiBjb250ZXh0LCBjb25z
dCBXZWJDb3JlOjpJbnRTaXplJiBzaXplKQordm9pZCBQbGF0Zm9ybUNvbnRleHRTa2lhOjpzZXRT
aGFyZWRDb250ZXh0M0QoU2hhcmVkQ29udGV4dDNEKiBjb250ZXh0LCBDYW52YXNGcmFtZWJ1ZmZl
ciogZnJhbWVidWZmZXIsIGNvbnN0IFdlYkNvcmU6OkludFNpemUmIHNpemUpCiB7CiAgICAgbV91
c2VHUFUgPSB0cnVlOwotICAgIG1fZ3B1Q2FudmFzID0gbmV3IEdMRVMyQ2FudmFzKGNvbnRleHQs
IHNpemUpOworICAgIG1fZ3B1Q2FudmFzID0gbmV3IEdMRVMyQ2FudmFzKGNvbnRleHQsIGZyYW1l
YnVmZmVyLCBzaXplKTsKICAgICBtX3VwbG9hZFRleHR1cmUuY2xlYXIoKTsKLSNpZiBVU0UoQUND
RUxFUkFURURfQ09NUE9TSVRJTkcpCi0gICAgQ2FudmFzTGF5ZXJDaHJvbWl1bSogbGF5ZXIgPSBz
dGF0aWNfY2FzdDxDYW52YXNMYXllckNocm9taXVtKj4oY29udGV4dC0+cGxhdGZvcm1MYXllcigp
KTsKLSAgICBsYXllci0+c2V0UHJlcGFyZVRleHR1cmVDYWxsYmFjayhQcmVwYXJlVGV4dHVyZUNh
bGxiYWNrSW1wbDo6Y3JlYXRlKHRoaXMpKTsKLSNlbmRpZgorICAgIGZyYW1lYnVmZmVyLT5zZXRX
aWxsU3dhcEJ1ZmZlcnNDYWxsYmFjayhTd2FwQnVmZmVyc0NhbGxiYWNrSW1wbDo6Y3JlYXRlKHRo
aXMpKTsKIH0KIAogdm9pZCBQbGF0Zm9ybUNvbnRleHRTa2lhOjpwcmVwYXJlRm9yU29mdHdhcmVE
cmF3KCkgY29uc3QKQEAgLTc2Myw2ICs3NTksMTIgQEAgdm9pZCBQbGF0Zm9ybUNvbnRleHRTa2lh
OjpwcmVwYXJlRm9ySGFyZHdhcmVEcmF3KCkgY29uc3QKICAgICBtX2JhY2tpbmdTdG9yZVN0YXRl
ID0gSGFyZHdhcmU7CiB9CiAKK3ZvaWQgUGxhdGZvcm1Db250ZXh0U2tpYTo6c3dhcEJ1ZmZlcnMo
KQoreworICAgIGlmIChtX3VzZUdQVSkKKyAgICAgICAgbV9ncHVDYW52YXMtPnN3YXBCdWZmZXJz
KCk7Cit9CisKIHZvaWQgUGxhdGZvcm1Db250ZXh0U2tpYTo6c3luY1NvZnR3YXJlQ2FudmFzKCkg
Y29uc3QKIHsKICAgICBpZiAoIW1fdXNlR1BVKQpAQCAtNzg0LDkgKzc4Niw5IEBAIHZvaWQgUGxh
dGZvcm1Db250ZXh0U2tpYTo6dXBsb2FkU29mdHdhcmVUb0hhcmR3YXJlKENvbXBvc2l0ZU9wZXJh
dG9yIG9wKSBjb25zdAogewogICAgIGNvbnN0IFNrQml0bWFwJiBiaXRtYXAgPSBtX2NhbnZhcy0+
Z2V0RGV2aWNlKCktPmFjY2Vzc0JpdG1hcChmYWxzZSk7CiAgICAgU2tBdXRvTG9ja1BpeGVscyBs
b2NrKGJpdG1hcCk7Ci0gICAgR3JhcGhpY3NDb250ZXh0M0QqIGNvbnRleHQgPSBtX2dwdUNhbnZh
cy0+Y29udGV4dCgpOworICAgIFNoYXJlZENvbnRleHQzRCogY29udGV4dCA9IG1fZ3B1Q2FudmFz
LT5jb250ZXh0KCk7CiAgICAgaWYgKCFtX3VwbG9hZFRleHR1cmUgfHwgbV91cGxvYWRUZXh0dXJl
LT50aWxlcygpLnRvdGFsU2l6ZVgoKSA8IGJpdG1hcC53aWR0aCgpIHx8IG1fdXBsb2FkVGV4dHVy
ZS0+dGlsZXMoKS50b3RhbFNpemVZKCkgPCBiaXRtYXAuaGVpZ2h0KCkpCi0gICAgICAgIG1fdXBs
b2FkVGV4dHVyZSA9IFRleHR1cmU6OmNyZWF0ZShjb250ZXh0LCBUZXh0dXJlOjpCR1JBOCwgYml0
bWFwLndpZHRoKCksIGJpdG1hcC5oZWlnaHQoKSk7CisgICAgICAgIG1fdXBsb2FkVGV4dHVyZSA9
IGNvbnRleHQtPmNyZWF0ZVRleHR1cmUoMCwgVGV4dHVyZTo6QkdSQTgsIGJpdG1hcC53aWR0aCgp
LCBiaXRtYXAuaGVpZ2h0KCkpOwogICAgIG1fdXBsb2FkVGV4dHVyZS0+bG9hZChiaXRtYXAuZ2V0
UGl4ZWxzKCkpOwogICAgIEludFJlY3QgcmVjdCgwLCAwLCBiaXRtYXAud2lkdGgoKSwgYml0bWFw
LmhlaWdodCgpKTsKICAgICBBZmZpbmVUcmFuc2Zvcm0gaWRlbnRpdHk7CkBAIC03OTksNyArODAx
LDggQEAgdm9pZCBQbGF0Zm9ybUNvbnRleHRTa2lhOjpyZWFkYmFja0hhcmR3YXJlVG9Tb2Z0d2Fy
ZSgpIGNvbnN0CiAgICAgU2tBdXRvTG9ja1BpeGVscyBsb2NrKGJpdG1hcCk7CiAgICAgaW50IHdp
ZHRoID0gYml0bWFwLndpZHRoKCksIGhlaWdodCA9IGJpdG1hcC5oZWlnaHQoKTsKICAgICBPd25B
cnJheVB0cjx1aW50MzJfdD4gYnVmKG5ldyB1aW50MzJfdFt3aWR0aF0pOwotICAgIEdyYXBoaWNz
Q29udGV4dDNEKiBjb250ZXh0ID0gbV9ncHVDYW52YXMtPmNvbnRleHQoKTsKKyAgICBTaGFyZWRD
b250ZXh0M0QqIGNvbnRleHQgPSBtX2dwdUNhbnZhcy0+Y29udGV4dCgpOworICAgIG1fZ3B1Q2Fu
dmFzLT5iaW5kRnJhbWVidWZmZXIoKTsKICAgICAvLyBGbGlwcyB0aGUgaW1hZ2UgdmVydGljYWxs
eS4KICAgICBmb3IgKGludCB5ID0gMDsgeSA8IGhlaWdodDsgKyt5KSB7CiAgICAgICAgIHVpbnQz
Ml90KiBwaXhlbHMgPSBiaXRtYXAuZ2V0QWRkcjMyKDAsIHkpOwpkaWZmIC0tZ2l0IGEvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9za2lhL1BsYXRmb3JtQ29udGV4dFNraWEuaCBiL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3Mvc2tpYS9QbGF0Zm9ybUNvbnRleHRTa2lhLmgKaW5kZXggODJlZGMx
NmQxZmNjZjhhZTllMTk1MWM5MjUyY2NjOWU5NTZmNDEwMC4uZTMzMmY2NGJhZGUzMTcxZWYxMzUx
N2FiYmFkNzVmMjFiYmZjYjVjNiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9za2lhL1BsYXRmb3JtQ29udGV4dFNraWEuaAorKysgYi9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL3NraWEvUGxhdGZvcm1Db250ZXh0U2tpYS5oCkBAIC0zNSw3ICszNSw2IEBACiAjaW5jbHVk
ZSAiTm9uY29weWFibGUuaCIKIAogI2luY2x1ZGUgIlNrRGFzaFBhdGhFZmZlY3QuaCIKLSNpbmNs
dWRlICJTa0RlcXVlLmgiCiAjaW5jbHVkZSAiU2tEcmF3TG9vcGVyLmgiCiAjaW5jbHVkZSAiU2tQ
YWludC5oIgogI2luY2x1ZGUgIlNrUGF0aC5oIgpAQCAtNDYsOSArNDUsMTAgQEAKIG5hbWVzcGFj
ZSBXZWJDb3JlIHsKIAogZW51bSBDb21wb3NpdGVPcGVyYXRvcjsKK2NsYXNzIENhbnZhc0ZyYW1l
YnVmZmVyOwogY2xhc3MgR0xFUzJDYW52YXM7Ci1jbGFzcyBUZXh0dXJlOwogY2xhc3MgR3JhcGhp
Y3NDb250ZXh0M0Q7CitjbGFzcyBUZXh0dXJlOwogCiAvLyBUaGlzIGNsYXNzIGhvbGRzIHRoZSBw
bGF0Zm9ybS1zcGVjaWZpYyBzdGF0ZSBmb3IgR3JhcGhpY3NDb250ZXh0LiBXZSBwdXQKIC8vIG1v
c3Qgb2Ygb3VyIFNraWEgd3JhcHBlcnMgb24gdGhpcyBjbGFzcy4gSW4gdGhlb3J5LCBhIGxvdCBv
ZiB0aGlzIHN0dWZmIGNvdWxkCkBAIC0xODEsNyArMTgxLDcgQEAgcHVibGljOgogICAgIHZvaWQg
Y2xlYXJJbWFnZVJlc2FtcGxpbmdIaW50KCk7CiAgICAgYm9vbCBoYXNJbWFnZVJlc2FtcGxpbmdI
aW50KCkgY29uc3Q7CiAgICAgYm9vbCB1c2VHUFUoKSB7IHJldHVybiBtX3VzZUdQVTsgfQotICAg
IHZvaWQgc2V0R3JhcGhpY3NDb250ZXh0M0QoR3JhcGhpY3NDb250ZXh0M0QqLCBjb25zdCBJbnRT
aXplJik7CisgICAgdm9pZCBzZXRTaGFyZWRDb250ZXh0M0QoU2hhcmVkQ29udGV4dDNEKiwgQ2Fu
dmFzRnJhbWVidWZmZXIqLCBjb25zdCBJbnRTaXplJik7CiAgICAgR0xFUzJDYW52YXMqIGdwdUNh
bnZhcygpIGNvbnN0IHsgcmV0dXJuIG1fZ3B1Q2FudmFzLmdldCgpOyB9CiAKICAgICAvLyBDYWxs
IHRoZXNlIGJlZm9yZSBtYWtpbmcgYSBjYWxsIHRoYXQgbWFuaXB1bGF0ZXMgdGhlIHVuZGVybHlp
bmcKQEAgLTE5MCw2ICsxOTAsNyBAQCBwdWJsaWM6CiAgICAgdm9pZCBwcmVwYXJlRm9ySGFyZHdh
cmVEcmF3KCkgY29uc3Q7CiAgICAgLy8gQ2FsbCB0byBmb3JjZSB0aGUgc2tpYTo6UGxhdGZvcm1D
YW52YXMgdG8gY29udGFpbiBhbGwgcmVuZGVyaW5nIHJlc3VsdHMuCiAgICAgdm9pZCBzeW5jU29m
dHdhcmVDYW52YXMoKSBjb25zdDsKKyAgICB2b2lkIHN3YXBCdWZmZXJzKCk7CiAKIHByaXZhdGU6
CiAjaWYgT1MoTElOVVgpIHx8IE9TKFdJTkRPV1MpCmRpZmYgLS1naXQgYS9XZWJDb3JlL3JlbmRl
cmluZy9SZW5kZXJMYXllckJhY2tpbmcuY3BwIGIvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5
ZXJCYWNraW5nLmNwcAppbmRleCAwYmE5MDdiZTk0MDAxMTQ0ZGYzN2E1YWZkYjdkNTM5YWE4NzQ3
OTYzLi4xNzM1MjIwNzk5Nzg4MDdiZGU1ZTU4YjI1NTJkODVlNDc0ZGVjNWQzIDEwMDY0NAotLS0g
YS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllckJhY2tpbmcuY3BwCisrKyBiL1dlYkNvcmUv
cmVuZGVyaW5nL1JlbmRlckxheWVyQmFja2luZy5jcHAKQEAgLTI3LDggKzI3LDExIEBACiAKICNp
ZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCiAKKyNpbmNsdWRlICJSZW5kZXJMYXllckJh
Y2tpbmcuaCIKKwogI2luY2x1ZGUgIkFuaW1hdGlvbkNvbnRyb2xsZXIuaCIKICNpbmNsdWRlICJD
YW52YXNSZW5kZXJpbmdDb250ZXh0LmgiCisjaW5jbHVkZSAiQ2FudmFzUmVuZGVyaW5nQ29udGV4
dDJELmgiCiAjaW5jbHVkZSAiQ1NTUHJvcGVydHlOYW1lcy5oIgogI2luY2x1ZGUgIkNTU1N0eWxl
U2VsZWN0b3IuaCIKICNpbmNsdWRlICJGcmFtZVZpZXcuaCIKQEAgLTUxLDggKzU0LDcgQEAKICNp
bmNsdWRlICJSZW5kZXJWaWRlby5oIgogI2luY2x1ZGUgIlJlbmRlclZpZXcuaCIKICNpbmNsdWRl
ICJTZXR0aW5ncy5oIgotCi0jaW5jbHVkZSAiUmVuZGVyTGF5ZXJCYWNraW5nLmgiCisjaW5jbHVk
ZSAiV2ViR0xSZW5kZXJpbmdDb250ZXh0LmgiCiAKIHVzaW5nIG5hbWVzcGFjZSBzdGQ7CiAKQEAg
LTI1NywxMCArMjU5LDE3IEBAIGJvb2wgUmVuZGVyTGF5ZXJCYWNraW5nOjp1cGRhdGVHcmFwaGlj
c0xheWVyQ29uZmlndXJhdGlvbigpCiAjaWYgRU5BQkxFKDNEX0NBTlZBUykgfHwgRU5BQkxFKEFD
Q0VMRVJBVEVEXzJEX0NBTlZBUykKICAgICBlbHNlIGlmIChpc0FjY2VsZXJhdGVkQ2FudmFzKHJl
bmRlcmVyKCkpKSB7CiAgICAgICAgIEhUTUxDYW52YXNFbGVtZW50KiBjYW52YXMgPSBzdGF0aWNf
Y2FzdDxIVE1MQ2FudmFzRWxlbWVudCo+KHJlbmRlcmVyKCktPm5vZGUoKSk7Ci0gICAgICAgIGlm
IChDYW52YXNSZW5kZXJpbmdDb250ZXh0KiBjb250ZXh0ID0gY2FudmFzLT5yZW5kZXJpbmdDb250
ZXh0KCkpCi0gICAgICAgICAgICBpZiAoY29udGV4dC0+Z3JhcGhpY3NDb250ZXh0M0QoKSkKLSAg
ICAgICAgICAgICAgICBpZiAoUGxhdGZvcm1MYXllciogcGwgPSBjb250ZXh0LT5ncmFwaGljc0Nv
bnRleHQzRCgpLT5wbGF0Zm9ybUxheWVyKCkpCi0gICAgICAgICAgICAgICAgICAgIG1fZ3JhcGhp
Y3NMYXllci0+c2V0Q29udGVudHNUb0NhbnZhcyhwbCk7CisgICAgICAgIGlmIChDYW52YXNSZW5k
ZXJpbmdDb250ZXh0KiBjb250ZXh0ID0gY2FudmFzLT5yZW5kZXJpbmdDb250ZXh0KCkpIHsKKyNp
ZiBFTkFCTEUoQUNDRUxFUkFURURfMkRfQ0FOVkFTKQorICAgICAgICAgICAgaWYgKGNvbnRleHQt
PmlzMmQoKSkKKyAgICAgICAgICAgICAgICBtX2dyYXBoaWNzTGF5ZXItPnNldENvbnRlbnRzVG9D
YW52YXMyRChzdGF0aWNfY2FzdDxDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQqPihjb250ZXh0KS0+
ZnJhbWVidWZmZXIoKSk7CisjZW5kaWYKKyNpZiBFTkFCTEUoM0RfQ0FOVkFTKQorICAgICAgICAg
ICAgaWYgKGNvbnRleHQtPmlzM2QoKSkKKyAgICAgICAgICAgICAgICBtX2dyYXBoaWNzTGF5ZXIt
PnNldENvbnRlbnRzVG9XZWJHTChzdGF0aWNfY2FzdDxXZWJHTFJlbmRlcmluZ0NvbnRleHQqPihj
b250ZXh0KS0+Z3JhcGhpY3NDb250ZXh0M0QoKS0+cGxhdGZvcm1MYXllcigpKTsKKyNlbmRpZgor
ICAgICAgICB9CisgICAgICAgIGxheWVyQ29uZmlnQ2hhbmdlZCA9IHRydWU7CiAgICAgfQogI2Vu
ZGlmCiAKZGlmZiAtLWdpdCBhL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cgYi9XZWJLaXQvY2hy
b21pdW0vQ2hhbmdlTG9nCmluZGV4IDAxYTJiYmY3YjVhODA4ODdhODhmZTkxY2I5Mjg4ZDIyYzhl
NTc4NDEuLjI1ODI0ZDRlNTM4YTgyMzA0MTkzYmYyMjY3OWU1MWE5NWEwMzdmNDQgMTAwNjQ0Ci0t
LSBhL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKKysrIGIvV2ViS2l0L2Nocm9taXVtL0NoYW5n
ZUxvZwpAQCAtMSwzICsxLDI4IEBACisyMDEwLTA4LTMwICBKYW1lcyBSb2JpbnNvbiAgPGphbWVz
ckBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisK
KyAgICAgICAgTXVsdGlwbGUgYWNjZWxlcmF0ZWQgMkQgY2FudmFzZXMgc2hvdWxkIGJlIGFibGUg
dG8gdXNlIHRoZSBzYW1lIEdyYXBoaWNzQ29udGV4dDNECisgICAgICAgIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD00NDkyNgorCisgICAgICAgIEFkZHMgYSBTaGFyZWRD
b250ZXh0M0QgdG8gV2ViVmlld0ltcGwgYW5kIGltcGxlbWVudHMgYSBmZXcgbmV3IGZ1bmN0aW9u
cyBvbiBHcmFwaGljc0NvbnRleHQzRC4KKyAgICAgICAgVGhlIFNoYXJlZENvbnRleHQzRCBoYXMg
dG8gbGl2ZSBvbiBXZWJWaWV3SW1wbCB0byBiZSB0aWVkIHRvIHRoZSBsaWZldGltZSBvZiB0aGUg
Y29tcG9zaXRvciBjb250ZXh0LgorCisgICAgICAgICogcHVibGljL1dlYkdyYXBoaWNzQ29udGV4
dDNELmg6CisgICAgICAgIChXZWJLaXQ6OldlYkdyYXBoaWNzQ29udGV4dDNEOjpjcmVhdGVDb21w
b3NpdG9yVGV4dHVyZSk6CisgICAgICAgIChXZWJLaXQ6OldlYkdyYXBoaWNzQ29udGV4dDNEOjpk
ZWxldGVDb21wb3NpdG9yVGV4dHVyZSk6CisgICAgICAgIChXZWJLaXQ6OldlYkdyYXBoaWNzQ29u
dGV4dDNEOjpjb3B5VGV4dHVyZVRvQ29tcG9zaXRvcik6CisgICAgICAgICogc3JjL0Nocm9tZUNs
aWVudEltcGwuY3BwOgorICAgICAgICAoV2ViS2l0OjpDaHJvbWVDbGllbnRJbXBsOjpnZXRTaGFy
ZWRDb250ZXh0M0QpOgorICAgICAgICAqIHNyYy9DaHJvbWVDbGllbnRJbXBsLmg6CisgICAgICAg
ICogc3JjL0dyYXBoaWNzQ29udGV4dDNELmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNz
Q29udGV4dDNESW50ZXJuYWw6OmluaXRpYWxpemUpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhp
Y3NDb250ZXh0M0RJbnRlcm5hbDo6cGxhdGZvcm1MYXllcik6CisgICAgICAgIChXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHQzRDo6cGxhdGZvcm1MYXllcik6CisgICAgICAgICogc3JjL1dlYlZpZXdJ
bXBsLmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2ViVmlld0ltcGw6OmdldFNoYXJlZENvbnRleHQz
RCk6CisgICAgICAgICogc3JjL1dlYlZpZXdJbXBsLmg6CisKIDIwMTAtMDgtMzAgIEtpbnVrbyBZ
YXN1ZGEgIDxraW51a29AY2hyb21pdW0ub3NyYz4KIAogICAgICAgICBSZXZpZXdlZCBieSBEYXJp
biBGaXNoZXIuCmRpZmYgLS1naXQgYS9XZWJLaXQvY2hyb21pdW0vcHVibGljL1dlYkdyYXBoaWNz
Q29udGV4dDNELmggYi9XZWJLaXQvY2hyb21pdW0vcHVibGljL1dlYkdyYXBoaWNzQ29udGV4dDNE
LmgKaW5kZXggNDRhMDQ5ODlhYTI1ZWI4YTU1OWYwZWRlNDU4NTliOWU0ZmRlY2RiNy4uMTdjNjk2
Y2E3M2Q1ZDE1OWE0ZTNiYTMxYThlMjE5YzAwNGU4YmNhMyAxMDA2NDQKLS0tIGEvV2ViS2l0L2No
cm9taXVtL3B1YmxpYy9XZWJHcmFwaGljc0NvbnRleHQzRC5oCisrKyBiL1dlYktpdC9jaHJvbWl1
bS9wdWJsaWMvV2ViR3JhcGhpY3NDb250ZXh0M0QuaApAQCAtMzE4LDYgKzMxOCwxMCBAQCBwdWJs
aWM6CiAgICAgdmlydHVhbCB2b2lkIGRlbGV0ZVJlbmRlcmJ1ZmZlcih1bnNpZ25lZCkgPSAwOwog
ICAgIHZpcnR1YWwgdm9pZCBkZWxldGVTaGFkZXIodW5zaWduZWQpID0gMDsKICAgICB2aXJ0dWFs
IHZvaWQgZGVsZXRlVGV4dHVyZSh1bnNpZ25lZCkgPSAwOworCisgICAgdmlydHVhbCB1bnNpZ25l
ZCBjcmVhdGVDb21wb3NpdG9yVGV4dHVyZSh1bnNpZ25lZCB3aWR0aCwgdW5zaWduZWQgaGVpZ2h0
KSB7IHJldHVybiAwOyB9CisgICAgdmlydHVhbCB2b2lkIGRlbGV0ZUNvbXBvc2l0b3JUZXh0dXJl
KHVuc2lnbmVkIGNvbXBvc2l0b3JUZXh0dXJlKSB7fQorICAgIHZpcnR1YWwgdm9pZCBjb3B5VGV4
dHVyZVRvQ29tcG9zaXRvcih1bnNpZ25lZCB0ZXh0dXJlLCB1bnNpZ25lZCBjb21wb3NpdG9yVGV4
dHVyZSkge30KIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYktpdApkaWZmIC0tZ2l0IGEvV2ViS2l0
L2Nocm9taXVtL3NyYy9DaHJvbWVDbGllbnRJbXBsLmNwcCBiL1dlYktpdC9jaHJvbWl1bS9zcmMv
Q2hyb21lQ2xpZW50SW1wbC5jcHAKaW5kZXggZTZmMTQwMDcxODBkOGQzYmY2MTI4YjEzMGRjMjhh
YmFhZWMxZjkwYS4uNDI0MjQ0NTNjMzQ2OTEzNThiODM3MWQyZDdmMGQzYTQ5YzI4MzRiYiAxMDA2
NDQKLS0tIGEvV2ViS2l0L2Nocm9taXVtL3NyYy9DaHJvbWVDbGllbnRJbXBsLmNwcAorKysgYi9X
ZWJLaXQvY2hyb21pdW0vc3JjL0Nocm9tZUNsaWVudEltcGwuY3BwCkBAIC01OSw2ICs1OSw3IEBA
CiAjaW5jbHVkZSAiU2VhcmNoUG9wdXBNZW51Q2hyb21pdW0uaCIKICNpbmNsdWRlICJTY3JpcHRD
b250cm9sbGVyLmgiCiAjaW5jbHVkZSAiU2VjdXJpdHlPcmlnaW4uaCIKKyNpbmNsdWRlICJTaGFy
ZWRDb250ZXh0M0QuaCIKICNpbmNsdWRlICJXZWJHZW9sb2NhdGlvblNlcnZpY2UuaCIKICNpZiBV
U0UoVjgpCiAjaW5jbHVkZSAiVjhQcm94eS5oIgpAQCAtNzUxLDYgKzc1MiwxMSBAQCB2b2lkIENo
cm9tZUNsaWVudEltcGw6OnNjaGVkdWxlQ29tcG9zaXRpbmdMYXllclN5bmMoKQogfQogI2VuZGlm
CiAKK1Bhc3NSZWZQdHI8V2ViQ29yZTo6U2hhcmVkQ29udGV4dDNEPiBDaHJvbWVDbGllbnRJbXBs
OjpnZXRTaGFyZWRDb250ZXh0M0QoKQoreworICAgIHJldHVybiBtX3dlYlZpZXctPmdldFNoYXJl
ZENvbnRleHQzRCgpOworfQorCiBib29sIENocm9tZUNsaWVudEltcGw6OnN1cHBvcnRzRnVsbHNj
cmVlbkZvck5vZGUoY29uc3QgV2ViQ29yZTo6Tm9kZSogbm9kZSkKIHsKICAgICBpZiAobV93ZWJW
aWV3LT5jbGllbnQoKSAmJiBub2RlLT5oYXNUYWdOYW1lKFdlYkNvcmU6OkhUTUxOYW1lczo6dmlk
ZW9UYWcpKQpkaWZmIC0tZ2l0IGEvV2ViS2l0L2Nocm9taXVtL3NyYy9DaHJvbWVDbGllbnRJbXBs
LmggYi9XZWJLaXQvY2hyb21pdW0vc3JjL0Nocm9tZUNsaWVudEltcGwuaAppbmRleCBiZmY5Zjkw
NDdmYTdjN2YzYWJkNzA0ZDk0Nzg1ZDljMWZhY2Y3NzQwLi41M2RiOTRmNzlhZjYwNWZjMGM5YzA5
YTIxZmIzMjkzNzVkYzVmOTdlIDEwMDY0NAotLS0gYS9XZWJLaXQvY2hyb21pdW0vc3JjL0Nocm9t
ZUNsaWVudEltcGwuaAorKysgYi9XZWJLaXQvY2hyb21pdW0vc3JjL0Nocm9tZUNsaWVudEltcGwu
aApAQCAtMTUyLDYgKzE1Miw4IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIHZvaWQgc2NoZWR1bGVD
b21wb3NpdGluZ0xheWVyU3luYygpOwogI2VuZGlmCiAKKyAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8
V2ViQ29yZTo6U2hhcmVkQ29udGV4dDNEPiBnZXRTaGFyZWRDb250ZXh0M0QoKTsKKwogICAgIHZp
cnR1YWwgYm9vbCBzdXBwb3J0c0Z1bGxzY3JlZW5Gb3JOb2RlKGNvbnN0IFdlYkNvcmU6Ok5vZGUq
KTsKICAgICB2aXJ0dWFsIHZvaWQgZW50ZXJGdWxsc2NyZWVuRm9yTm9kZShXZWJDb3JlOjpOb2Rl
Kik7CiAgICAgdmlydHVhbCB2b2lkIGV4aXRGdWxsc2NyZWVuRm9yTm9kZShXZWJDb3JlOjpOb2Rl
Kik7CmRpZmYgLS1naXQgYS9XZWJLaXQvY2hyb21pdW0vc3JjL0dyYXBoaWNzQ29udGV4dDNELmNw
cCBiL1dlYktpdC9jaHJvbWl1bS9zcmMvR3JhcGhpY3NDb250ZXh0M0QuY3BwCmluZGV4IDZiYzVm
ZmU0MzFlODRlNGU3YmUyMGU5NDA0MTRlZGVhZjgzM2E5YzcuLmM3ODRmNTg0NTA3Y2ZjNGJlOWJm
NGQ4NjhhMWFlYjlhOGZlMjEyMmYgMTAwNjQ0Ci0tLSBhL1dlYktpdC9jaHJvbWl1bS9zcmMvR3Jh
cGhpY3NDb250ZXh0M0QuY3BwCisrKyBiL1dlYktpdC9jaHJvbWl1bS9zcmMvR3JhcGhpY3NDb250
ZXh0M0QuY3BwCkBAIC0zNSw3ICszNSw3IEBACiAjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0M0Qu
aCIKIAogI2luY2x1ZGUgIkNhY2hlZEltYWdlLmgiCi0jaW5jbHVkZSAiQ2FudmFzTGF5ZXJDaHJv
bWl1bS5oIgorI2luY2x1ZGUgIldlYkdMTGF5ZXJDaHJvbWl1bS5oIgogI2luY2x1ZGUgIkNhbnZh
c1JlbmRlcmluZ0NvbnRleHQuaCIKICNpbmNsdWRlICJDaHJvbWUuaCIKICNpbmNsdWRlICJDaHJv
bWVDbGllbnRJbXBsLmgiCkBAIC0xMDMsNyArMTAzLDcgQEAgcHVibGljOgogICAgIHZvaWQgcHJl
cGFyZVRleHR1cmUoKTsKIAogI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKLSAgICBD
YW52YXNMYXllckNocm9taXVtKiBwbGF0Zm9ybUxheWVyKCkgY29uc3Q7CisgICAgV2ViR0xMYXll
ckNocm9taXVtKiBwbGF0Zm9ybUxheWVyKCkgY29uc3Q7CiAjZW5kaWYKICAgICBib29sIGlzR0xF
UzJDb21wbGlhbnQoKSBjb25zdDsKICAgICBib29sIGlzR0xFUzJOUE9UU3RyaWN0KCkgY29uc3Q7
CkBAIC0yOTQsMTEgKzI5NCwxNCBAQCBwdWJsaWM6CiAgICAgdm9pZCBzeW50aGVzaXplR0xFcnJv
cih1bnNpZ25lZCBsb25nIGVycm9yKTsKICAgICBib29sIHN1cHBvcnRzQkdSQSgpOwogCisgICAg
dW5zaWduZWQgY3JlYXRlQ29tcG9zaXRvclRleHR1cmUodW5zaWduZWQgd2lkdGgsIHVuc2lnbmVk
IGhlaWdodCk7CisgICAgdm9pZCBkZWxldGVDb21wb3NpdG9yVGV4dHVyZSh1bnNpZ25lZCBjb21w
b3NpdG9yVGV4dHVyZSk7CisgICAgdm9pZCBjb3B5VGV4dHVyZVRvQ29tcG9zaXRvcih1bnNpZ25l
ZCB0ZXh0dXJlLCB1bnNpZ25lZCBjb21wb3NpdG9yVGV4dHVyZSk7CiBwcml2YXRlOgogICAgIE93
blB0cjxXZWJLaXQ6OldlYkdyYXBoaWNzQ29udGV4dDNEPiBtX2ltcGw7CiAgICAgV2ViS2l0OjpX
ZWJWaWV3SW1wbCogbV93ZWJWaWV3SW1wbDsKICNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJ
TkcpCi0gICAgUmVmUHRyPENhbnZhc0xheWVyQ2hyb21pdW0+IG1fY29tcG9zaXRpbmdMYXllcjsK
KyAgICBSZWZQdHI8V2ViR0xMYXllckNocm9taXVtPiBtX2NvbXBvc2l0aW5nTGF5ZXI7CiAjZW5k
aWYKICNpZiBQTEFURk9STShTS0lBKQogICAgIC8vIElmIHRoZSB3aWR0aCBhbmQgaGVpZ2h0IG9m
IHRoZSBDYW52YXMncyBiYWNraW5nIHN0b3JlIGRvbid0CkBAIC0zNjAsNyArMzYzLDcgQEAgYm9v
bCBHcmFwaGljc0NvbnRleHQzREludGVybmFsOjppbml0aWFsaXplKEdyYXBoaWNzQ29udGV4dDNE
OjpBdHRyaWJ1dGVzIGF0dHJzLAogICAgIG1faW1wbC5zZXQod2ViQ29udGV4dCk7CiAKICNpZiBV
U0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCi0gICAgbV9jb21wb3NpdGluZ0xheWVyID0gQ2Fu
dmFzTGF5ZXJDaHJvbWl1bTo6Y3JlYXRlKDApOworICAgIG1fY29tcG9zaXRpbmdMYXllciA9IFdl
YkdMTGF5ZXJDaHJvbWl1bTo6Y3JlYXRlKDApOwogI2VuZGlmCiAgICAgcmV0dXJuIHRydWU7CiB9
CkBAIC0zODEsNyArMzg0LDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQzREludGVybmFsOjpwcmVw
YXJlVGV4dHVyZSgpCiB9CiAKICNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCi1DYW52
YXNMYXllckNocm9taXVtKiBHcmFwaGljc0NvbnRleHQzREludGVybmFsOjpwbGF0Zm9ybUxheWVy
KCkgY29uc3QKK1dlYkdMTGF5ZXJDaHJvbWl1bSogR3JhcGhpY3NDb250ZXh0M0RJbnRlcm5hbDo6
cGxhdGZvcm1MYXllcigpIGNvbnN0CiB7CiAgICAgcmV0dXJuIG1fY29tcG9zaXRpbmdMYXllci5n
ZXQoKTsKIH0KQEAgLTg5OCw2ICs5MDEsMTAgQEAgREVMRUdBVEVfVE9fSU1QTF8xKGRlbGV0ZVRl
eHR1cmUsIHVuc2lnbmVkKQogREVMRUdBVEVfVE9fSU1QTF8xKHN5bnRoZXNpemVHTEVycm9yLCB1
bnNpZ25lZCBsb25nKQogREVMRUdBVEVfVE9fSU1QTF9SKHN1cHBvcnRzQkdSQSwgYm9vbCkKIAor
REVMRUdBVEVfVE9fSU1QTF8yUihjcmVhdGVDb21wb3NpdG9yVGV4dHVyZSwgdW5zaWduZWQsIHVu
c2lnbmVkLCB1bnNpZ25lZCkKK0RFTEVHQVRFX1RPX0lNUExfMShkZWxldGVDb21wb3NpdG9yVGV4
dHVyZSwgdW5zaWduZWQpCitERUxFR0FURV9UT19JTVBMXzIoY29weVRleHR1cmVUb0NvbXBvc2l0
b3IsIHVuc2lnbmVkLCB1bnNpZ25lZCkKKwogLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAvLyBHcmFwaGljc0Nv
bnRleHQzRAogLy8KQEAgLTEwMzksNyArMTA0Niw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6
OnByZXBhcmVUZXh0dXJlKCkKICNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCiBQbGF0
Zm9ybUxheWVyKiBHcmFwaGljc0NvbnRleHQzRDo6cGxhdGZvcm1MYXllcigpIGNvbnN0CiB7Ci0g
ICAgQ2FudmFzTGF5ZXJDaHJvbWl1bSogY2FudmFzTGF5ZXIgPSBtX2ludGVybmFsLT5wbGF0Zm9y
bUxheWVyKCk7CisgICAgV2ViR0xMYXllckNocm9taXVtKiBjYW52YXNMYXllciA9IG1faW50ZXJu
YWwtPnBsYXRmb3JtTGF5ZXIoKTsKICAgICBjYW52YXNMYXllci0+c2V0Q29udGV4dCh0aGlzKTsK
ICAgICByZXR1cm4gY2FudmFzTGF5ZXI7CiB9CkBAIC0xMjM0LDYgKzEyNDEsMTAgQEAgREVMRUdB
VEVfVE9fSU5URVJOQUxfMShkZWxldGVUZXh0dXJlLCB1bnNpZ25lZCkKIERFTEVHQVRFX1RPX0lO
VEVSTkFMXzEoc3ludGhlc2l6ZUdMRXJyb3IsIHVuc2lnbmVkIGxvbmcpCiBERUxFR0FURV9UT19J
TlRFUk5BTF9SKHN1cHBvcnRzQkdSQSwgYm9vbCkKIAorREVMRUdBVEVfVE9fSU5URVJOQUxfMlIo
Y3JlYXRlQ29tcG9zaXRvclRleHR1cmUsIHVuc2lnbmVkLCB1bnNpZ25lZCwgdW5zaWduZWQpCitE
RUxFR0FURV9UT19JTlRFUk5BTF8xKGRlbGV0ZUNvbXBvc2l0b3JUZXh0dXJlLCB1bnNpZ25lZCkK
K0RFTEVHQVRFX1RPX0lOVEVSTkFMXzIoY29weVRleHR1cmVUb0NvbXBvc2l0b3IsIHVuc2lnbmVk
LCB1bnNpZ25lZCkKKwogYm9vbCBHcmFwaGljc0NvbnRleHQzRDo6aXNHTEVTMkNvbXBsaWFudCgp
IGNvbnN0CiB7CiAgICAgcmV0dXJuIG1faW50ZXJuYWwtPmlzR0xFUzJDb21wbGlhbnQoKTsKZGlm
ZiAtLWdpdCBhL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViVmlld0ltcGwuY3BwIGIvV2ViS2l0L2No
cm9taXVtL3NyYy9XZWJWaWV3SW1wbC5jcHAKaW5kZXggNTA2NWY1ZWI5YjY0MDgzZmMzYjFlMTc0
ZjQyODE1YzU3MzdiNDgzOS4uZDIzMzFhM2YzZTVhYjYyZTNhN2Q1NTRjZDdkZDg0OGMyMDkwY2U2
ZCAxMDA2NDQKLS0tIGEvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJWaWV3SW1wbC5jcHAKKysrIGIv
V2ViS2l0L2Nocm9taXVtL3NyYy9XZWJWaWV3SW1wbC5jcHAKQEAgLTU4LDYgKzU4LDcgQEAKICNp
bmNsdWRlICJHTEVTMkNvbnRleHQuaCIKICNpbmNsdWRlICJHTEVTMkNvbnRleHRJbnRlcm5hbC5o
IgogI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgorI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4
dDNELmgiCiAjaW5jbHVkZSAiSFRNTElucHV0RWxlbWVudC5oIgogI2luY2x1ZGUgIkhUTUxNZWRp
YUVsZW1lbnQuaCIKICNpbmNsdWRlICJIaXRUZXN0UmVzdWx0LmgiCkBAIC04Niw2ICs4Nyw3IEBA
CiAjaW5jbHVkZSAiU2VjdXJpdHlPcmlnaW4uaCIKICNpbmNsdWRlICJTZWxlY3Rpb25Db250cm9s
bGVyLmgiCiAjaW5jbHVkZSAiU2V0dGluZ3MuaCIKKyNpbmNsdWRlICJTaGFyZWRDb250ZXh0M0Qu
aCIKICNpbmNsdWRlICJUaW1lci5oIgogI2luY2x1ZGUgIlR5cGluZ0NvbW1hbmQuaCIKICNpbmNs
dWRlICJVc2VyR2VzdHVyZUluZGljYXRvci5oIgpAQCAtMjIxMSwxNCArMjIxMywxNiBAQCBQYXNz
T3duUHRyPEdMRVMyQ29udGV4dD4gV2ViVmlld0ltcGw6OmdldE9uc2NyZWVuR0xFUzJDb250ZXh0
KCkKICAgICByZXR1cm4gR0xFUzJDb250ZXh0OjpjcmVhdGUoR0xFUzJDb250ZXh0SW50ZXJuYWw6
OmNyZWF0ZShnbGVzMkNvbnRleHQoKSwgZmFsc2UpKTsKIH0KIAotUGFzc093blB0cjxHTEVTMkNv
bnRleHQ+IFdlYlZpZXdJbXBsOjpnZXRPZmZzY3JlZW5HTEVTMkNvbnRleHQoKQorUGFzc1JlZlB0
cjxTaGFyZWRDb250ZXh0M0Q+IFdlYlZpZXdJbXBsOjpnZXRTaGFyZWRDb250ZXh0M0QoKQogewot
ICAgIFdlYkdMRVMyQ29udGV4dCogY29udGV4dCA9IHdlYktpdENsaWVudCgpLT5jcmVhdGVHTEVT
MkNvbnRleHQoKTsKLSAgICBpZiAoIWNvbnRleHQpCi0gICAgICAgIHJldHVybiAwOwotICAgIGlm
ICghY29udGV4dC0+aW5pdGlhbGl6ZSgwLCBnbGVzMkNvbnRleHQoKSkpCi0gICAgICAgIHJldHVy
biAwOwotICAgIHJldHVybiBHTEVTMkNvbnRleHQ6OmNyZWF0ZShHTEVTMkNvbnRleHRJbnRlcm5h
bDo6Y3JlYXRlKGNvbnRleHQsIHRydWUpKTsKKyAgICBpZiAoIW1fc2hhcmVkQ29udGV4dDNEKSB7
CisgICAgICAgIEdyYXBoaWNzQ29udGV4dDNEOjpBdHRyaWJ1dGVzIGF0dHI7CisgICAgICAgIGF0
dHIuc3RlbmNpbCA9IHRydWU7CisgICAgICAgIE93blB0cjxHcmFwaGljc0NvbnRleHQzRD4gY29u
dGV4dCA9IEdyYXBoaWNzQ29udGV4dDNEOjpjcmVhdGUoYXR0ciwgbV9wYWdlLT5jaHJvbWUoKSk7
CisgICAgICAgIG1fc2hhcmVkQ29udGV4dDNEID0gU2hhcmVkQ29udGV4dDNEOjpjcmVhdGUoY29u
dGV4dC5yZWxlYXNlKCkpOworICAgIH0KKworICAgIHJldHVybiBtX3NoYXJlZENvbnRleHQzRDsK
IH0KIAogLy8gUmV0dXJucyB0aGUgR0xFUzIgY29udGV4dCBhc3NvY2lhdGVkIHdpdGggdGhpcyBW
aWV3LiBJZiBvbmUgZG9lc24ndCBleGlzdApkaWZmIC0tZ2l0IGEvV2ViS2l0L2Nocm9taXVtL3Ny
Yy9XZWJWaWV3SW1wbC5oIGIvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJWaWV3SW1wbC5oCmluZGV4
IGMyOTYxMjEyM2Y0NTE0Yzk0ZGQ3ZDk3MGM3MzExNGE0YmVlZWMzNTUuLjRhZDc0ZmIxMmRhM2Zm
NTVmOGM4MmVkMjJhMGUzYTg5ZmYxYmEyZmQgMTAwNjQ0Ci0tLSBhL1dlYktpdC9jaHJvbWl1bS9z
cmMvV2ViVmlld0ltcGwuaAorKysgYi9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYlZpZXdJbXBsLmgK
QEAgLTMyOSwxMCArMzI5LDEwIEBAIHB1YmxpYzoKICAgICAvLyBPZmZzY3JlZW4gY29udGV4dHMg
cmVuZGVyIG9mZnNjcmVlbiBidXQgY2FuIHNoYXJlIHJlc291cmNlcyB3aXRoIHRoZQogICAgIC8v
IG9uc2NyZWVuIGNvbnRleHQgYW5kIHRodXMgY2FuIGJlIGNvbXBvc2l0ZWQuCiAgICAgUGFzc093
blB0cjxXZWJDb3JlOjpHTEVTMkNvbnRleHQ+IGdldE9uc2NyZWVuR0xFUzJDb250ZXh0KCk7Ci0g
ICAgUGFzc093blB0cjxXZWJDb3JlOjpHTEVTMkNvbnRleHQ+IGdldE9mZnNjcmVlbkdMRVMyQ29u
dGV4dCgpOwogCiAgICAgLy8gUmV0dXJucyBhbiBvbnNjcmVlbiBjb250ZXh0CiAgICAgdmlydHVh
bCBXZWJHTEVTMkNvbnRleHQqIGdsZXMyQ29udGV4dCgpOworICAgIHZpcnR1YWwgUGFzc1JlZlB0
cjxXZWJDb3JlOjpTaGFyZWRDb250ZXh0M0Q+IGdldFNoYXJlZENvbnRleHQzRCgpOwogCiAgICAg
V2ViQ29yZTo6UG9wdXBDb250YWluZXIqIHNlbGVjdFBvcHVwKCkgY29uc3QgeyByZXR1cm4gbV9z
ZWxlY3RQb3B1cC5nZXQoKTsgfQogCkBAIC01MjEsNiArNTIxLDggQEAgcHJpdmF0ZToKIAogICAg
IE93blB0cjxXZWJHTEVTMkNvbnRleHQ+IG1fZ2xlczJDb250ZXh0OwogCisgICAgUmVmUHRyPFdl
YkNvcmU6OlNoYXJlZENvbnRleHQzRD4gbV9zaGFyZWRDb250ZXh0M0Q7CisKICAgICBPd25QdHI8
RGV2aWNlT3JpZW50YXRpb25DbGllbnRQcm94eT4gbV9kZXZpY2VPcmllbnRhdGlvbkNsaWVudFBy
b3h5OwogfTsKIAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>66013</attachid>
            <date>2010-08-30 21:50:55 -0700</date>
            <delta_ts>2010-08-31 11:43:19 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-44926-20100830215053.patch</filename>
            <type>text/plain</type>
            <size>110579</size>
            <attacher name="James Robinson">jamesr</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ2hhbmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXgg
ZGRjZDUyZTk2NzZiYTY2YmIwM2M0MTBhZmZmNTllMjI2MWY3ZDgzMC4uOTQxNDdhNTRiODEyMzIz
MWExYWY3NDI2NzAzMWUyNmFkMTc0YjA4ZiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9DaGFuZ2VMb2cK
KysrIGIvV2ViQ29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxNzMgQEAKKzIwMTAtMDgtMzAgIEph
bWVzIFJvYmluc29uICA8amFtZXNyQGNocm9taXVtLm9yZz4KKworICAgICAgICBSZXZpZXdlZCBi
eSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBNdWx0aXBsZSBhY2NlbGVyYXRlZCAyRCBjYW52
YXNlcyBzaG91bGQgYmUgYWJsZSB0byB1c2UgdGhlIHNhbWUgR3JhcGhpY3NDb250ZXh0M0QKKyAg
ICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTQ0OTI2CisKKyAg
ICAgICAgVGhpcyBhbGxvd3MgbWFueSBhY2NlbGVyYXRlZCAyZCBjYW52YXNlcyB0byByZW5kZXIg
dXNpbmcgYSBzaW5nbGUgdW5kZXJseWluZyBHcmFwaGljc0NvbnRleHQzRC4KKyAgICAgICAgSXQg
aW50cm9kdWNlcyBhIG5ldyBjbGFzcyBTaGFyZWRDb250ZXh0M0QgdGhhdCBtYW5hZ2VzIHNldmVy
YWwgY2FsbGVycy4gIFRoaXMgY2xhc3MgY291bGQKKyAgICAgICAgYWxzbyBjYWNoZSB0aGUgY3Vy
cmVudCBzdGF0ZSB0byBhdm9pZCBpc3N1aW5nIHJlZHVuZGFudCBjYWxscywgYWx0aG91Z2ggaW4g
dGhpcyBmaXJzdCBjdXQgaXQgZG9lc24ndC4KKyAgICAgICAgVGhlIFNoYXJlZENvbnRleHQzRCBp
cyBwcm92aWRlZCB0aHJvdWdoIHRoZSBDaHJvbWVDbGllbnQgc28gdGhhdCBpdHMgbGlmZXRpbWUg
Y2FuIGJlIHRpZWQgdG8gdGhhdAorICAgICAgICBvZiB0aGUgcGxhdGZvcm0tc3BlY2lmaWMgY29t
cG9zaXRvciBpbmZyYXN0cnVjdHVyZS4KKworICAgICAgICBBY2NlbGVyYXRlZCAyZCBjYW52YXNl
cyBtYWludGFpbiBhIHJlZmVyZW5jZSB0byBhIFNoYXJlZENvbnRleHQzRCBhbmQgaGF2ZSBvd25l
cnNoaXAgb2YgYSBDYW52YXNGcmFtZWJ1ZmZlciwKKyAgICAgICAgd2hpY2ggcmVwcmVzZW50cyB0
aGUgY2FudmFzJ3MgcmVuZGVyaW5nIHRhcmdldC4gIFRoZSBjb21wb3NpdGluZyBsYXllciBmb3Ig
YW4gYWNjZWxlcmF0ZWQgMmQgY2FudmFzIGlzCisgICAgICAgIGF3YXJlIG9ubHkgb2YgdGhlIGNh
bnZhcydzIENhbnZhc0ZyYW1lYnVmZmVyLiAgVGhpcyBtZWFucyB0aGF0IFdlYkdMIGFuZCAyZCBj
YW52YXNlcyBhcmUgbm8gbG9uZ2VyIHRyZWF0ZWQKKyAgICAgICAgYXMgdGhlIHNhbWUgdGltZSBv
ZiBsYXllciBieSB0aGUgY29tcG9zaXRvci4KKworICAgICAgICBDb3ZlcmVkIGJ5IGV4aXN0aW5n
IGNhbnZhcyB0ZXN0cy4KKworICAgICAgICBJJ3ZlIGRpdmlkZWQgdGhlIHBlciBmaWxlL2Z1bmN0
aW9uIGNoYW5nZXMgaW50byB0aHJlZSBzZWN0aW9uczoKKyAgICAgICAgLSBQbGF0Zm9ybS1pbmRl
cGVuZGVudCBhcHBsaWNhdGlvbiBsb2dpYyBvdXRzaWRlIFdlYkNvcmUvcGxhdGZvcm0KKyAgICAg
ICAgLSBQbGF0Zm9ybS1pbmRlcGVuZGVudCBpbmZyYXN0cnVjdHVyZSBpbiBXZWJDb3JlL3BsYXRm
b3JtCisgICAgICAgIC0gUGxhdGZvcm0tc3BlY2lmaWMgY2hhbmdlcworCisgICAgICAgICogaHRt
bC9jYW52YXMvQ2FudmFzUmVuZGVyaW5nQ29udGV4dC5jcHA6CisgICAgICAgICogaHRtbC9jYW52
YXMvQ2FudmFzUmVuZGVyaW5nQ29udGV4dC5oOgorICAgICAgICAoV2ViQ29yZTo6Q2FudmFzUmVu
ZGVyaW5nQ29udGV4dDo6cGFpbnRzSW50b0NhbnZhc0J1ZmZlcik6CisgICAgICAgICogaHRtbC9j
YW52YXMvQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJELmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNh
bnZhc1JlbmRlcmluZ0NvbnRleHQyRDo6Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJEKToKKyAgICAg
ICAgKFdlYkNvcmU6OkNhbnZhc1JlbmRlcmluZ0NvbnRleHQyRDo6cGFpbnRzSW50b0NhbnZhc0J1
ZmZlcik6CisgICAgICAgIChXZWJDb3JlOjpDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ6OnJlc2V0
KToKKyAgICAgICAgKFdlYkNvcmU6OkNhbnZhc1JlbmRlcmluZ0NvbnRleHQyRDo6ZHJhd0ltYWdl
KToKKyAgICAgICAgKFdlYkNvcmU6OkNhbnZhc1JlbmRlcmluZ0NvbnRleHQyRDo6ZGlkRHJhdyk6
CisgICAgICAgICogaHRtbC9jYW52YXMvQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJELmg6CisgICAg
ICAgIChXZWJDb3JlOjpDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ6OmZyYW1lYnVmZmVyKToKKyAg
ICAgICAgKiBodG1sL2NhbnZhcy9XZWJHTFJlbmRlcmluZ0NvbnRleHQuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0OjpwYWludHNJbnRvQ2FudmFzQnVmZmVyKToK
KyAgICAgICAgKiBodG1sL2NhbnZhcy9XZWJHTFJlbmRlcmluZ0NvbnRleHQuaDoKKyAgICAgICAg
KFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6Z3JhcGhpY3NDb250ZXh0M0QpOgorICAg
ICAgICAqIGxvYWRlci9FbXB0eUNsaWVudHMuaDoKKyAgICAgICAgKFdlYkNvcmU6OkVtcHR5Q2hy
b21lQ2xpZW50OjphdHRhY2hSb290R3JhcGhpY3NMYXllcik6CisgICAgICAgIChXZWJDb3JlOjpF
bXB0eUNocm9tZUNsaWVudDo6c2V0TmVlZHNPbmVTaG90RHJhd2luZ1N5bmNocm9uaXphdGlvbik6
CisgICAgICAgIChXZWJDb3JlOjpFbXB0eUNocm9tZUNsaWVudDo6c2NoZWR1bGVDb21wb3NpdGlu
Z0xheWVyU3luYyk6CisgICAgICAgIChXZWJDb3JlOjpFbXB0eUNocm9tZUNsaWVudDo6Z2V0U2hh
cmVkQ29udGV4dDNEKToKKyAgICAgICAgKiBwYWdlL0Nocm9tZUNsaWVudC5oOgorICAgICAgICAq
IHJlbmRlcmluZy9SZW5kZXJMYXllckJhY2tpbmcuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVu
ZGVyTGF5ZXJCYWNraW5nOjp1cGRhdGVHcmFwaGljc0xheWVyQ29uZmlndXJhdGlvbik6CisgICAg
ICAgICAgQ3Jvc3MtcGxhdGZvcm0gaW5mcmFzdHJ1Y3R1cmUgaW4gV2ViQ29yZS9wbGF0Zm9ybToK
KyAgICAgICAgKiBXZWJDb3JlLmd5cGk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvR3Jh
cGhpY3NDb250ZXh0Lmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250
ZXh0M0QuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0xheWVyLmg6Cisg
ICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0xheWVyOjpzZXRDb250ZW50c1RvV2ViR0wpOgorICAg
ICAgICAoV2ViQ29yZTo6R3JhcGhpY3NMYXllcjo6c2V0Q29udGVudHNUb0NhbnZhczJEKToKKyAg
ICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9ncHUvQ2FudmFzRnJhbWVidWZmZXIuY3BwOiBBZGRl
ZC4KKyAgICAgICAgKFdlYkNvcmU6OkNhbnZhc0ZyYW1lYnVmZmVyOjpDYW52YXNGcmFtZWJ1ZmZl
cik6CisgICAgICAgIChXZWJDb3JlOjpDYW52YXNGcmFtZWJ1ZmZlcjo6fkNhbnZhc0ZyYW1lYnVm
ZmVyKToKKyAgICAgICAgKFdlYkNvcmU6OkNhbnZhc0ZyYW1lYnVmZmVyOjpiaW5kKToKKyAgICAg
ICAgKFdlYkNvcmU6OkNhbnZhc0ZyYW1lYnVmZmVyOjpzd2FwQnVmZmVycyk6CisgICAgICAgIChX
ZWJDb3JlOjpDYW52YXNGcmFtZWJ1ZmZlcjo6c2V0V2lsbFN3YXBCdWZmZXJzQ2FsbGJhY2spOgor
ICAgICAgICAoV2ViQ29yZTo6Q2FudmFzRnJhbWVidWZmZXI6OmNyZWF0ZSk6CisgICAgICAgICog
cGxhdGZvcm0vZ3JhcGhpY3MvZ3B1L0NhbnZhc0ZyYW1lYnVmZmVyLmg6IEFkZGVkLgorICAgICAg
ICAoV2ViQ29yZTo6Q2FudmFzRnJhbWVidWZmZXI6OnRleHR1cmVJZEZvckNvbXBvc2l0b3IpOgor
ICAgICAgICAoV2ViQ29yZTo6Q2FudmFzRnJhbWVidWZmZXI6OnRleHR1cmVJZEZvckNhbnZhcyk6
CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZ3B1L1NoYXJlZENvbnRleHQzRC5jcHA6IEFk
ZGVkLgorICAgICAgICAoV2ViQ29yZTo6YWZmaW5lVG8zeDMpOgorICAgICAgICAoV2ViQ29yZTo6
U2hhcmVkQ29udGV4dDNEOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6U2hhcmVkQ29udGV4
dDNEOjpTaGFyZWRDb250ZXh0M0QpOgorICAgICAgICAoV2ViQ29yZTo6U2hhcmVkQ29udGV4dDNE
Ojp+U2hhcmVkQ29udGV4dDNEKToKKyAgICAgICAgKFdlYkNvcmU6OlNoYXJlZENvbnRleHQzRDo6
c2Npc3Nvcik6CisgICAgICAgIChXZWJDb3JlOjpTaGFyZWRDb250ZXh0M0Q6OmVuYWJsZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpTaGFyZWRDb250ZXh0M0Q6OmRpc2FibGUpOgorICAgICAgICAoV2Vi
Q29yZTo6U2hhcmVkQ29udGV4dDNEOjpjbGVhckNvbG9yKToKKyAgICAgICAgKFdlYkNvcmU6OlNo
YXJlZENvbnRleHQzRDo6Y2xlYXIpOgorICAgICAgICAoV2ViQ29yZTo6U2hhcmVkQ29udGV4dDNE
OjpkcmF3QXJyYXlzKToKKyAgICAgICAgKFdlYkNvcmU6OlNoYXJlZENvbnRleHQzRDo6Z2V0RXJy
b3IpOgorICAgICAgICAoV2ViQ29yZTo6U2hhcmVkQ29udGV4dDNEOjpnZXRJbnRlZ2Vydik6Cisg
ICAgICAgIChXZWJDb3JlOjpTaGFyZWRDb250ZXh0M0Q6OmNyZWF0ZUZyYW1lYnVmZmVyKToKKyAg
ICAgICAgKFdlYkNvcmU6OlNoYXJlZENvbnRleHQzRDo6Y3JlYXRlVGV4dHVyZSk6CisgICAgICAg
IChXZWJDb3JlOjpTaGFyZWRDb250ZXh0M0Q6OmRlbGV0ZUZyYW1lYnVmZmVyKToKKyAgICAgICAg
KFdlYkNvcmU6OlNoYXJlZENvbnRleHQzRDo6ZGVsZXRlVGV4dHVyZSk6CisgICAgICAgIChXZWJD
b3JlOjpTaGFyZWRDb250ZXh0M0Q6OmRlbGV0ZUNvbXBvc2l0b3JUZXh0dXJlKToKKyAgICAgICAg
KFdlYkNvcmU6OlNoYXJlZENvbnRleHQzRDo6ZnJhbWVidWZmZXJUZXh0dXJlMkQpOgorICAgICAg
ICAoV2ViQ29yZTo6U2hhcmVkQ29udGV4dDNEOjp0ZXhQYXJhbWV0ZXJpKToKKyAgICAgICAgKFdl
YkNvcmU6OlNoYXJlZENvbnRleHQzRDo6dGV4SW1hZ2UyRCk6CisgICAgICAgIChXZWJDb3JlOjpT
aGFyZWRDb250ZXh0M0Q6OnRleFN1YkltYWdlMkQpOgorICAgICAgICAoV2ViQ29yZTo6U2hhcmVk
Q29udGV4dDNEOjpyZWFkUGl4ZWxzKToKKyAgICAgICAgKFdlYkNvcmU6OlNoYXJlZENvbnRleHQz
RDo6Z2V0VGV4dHVyZSk6CisgICAgICAgIChXZWJDb3JlOjpTaGFyZWRDb250ZXh0M0Q6OmFwcGx5
Q29tcG9zaXRlT3BlcmF0b3IpOgorICAgICAgICAoV2ViQ29yZTo6U2hhcmVkQ29udGV4dDNEOjp1
c2VRdWFkVmVydGljZXMpOgorICAgICAgICAoV2ViQ29yZTo6U2hhcmVkQ29udGV4dDNEOjpzZXRB
Y3RpdmVUZXh0dXJlKToKKyAgICAgICAgKFdlYkNvcmU6OlNoYXJlZENvbnRleHQzRDo6YmluZFRl
eHR1cmUpOgorICAgICAgICAoV2ViQ29yZTo6U2hhcmVkQ29udGV4dDNEOjp1c2VGaWxsU29saWRQ
cm9ncmFtKToKKyAgICAgICAgKFdlYkNvcmU6OlNoYXJlZENvbnRleHQzRDo6dXNlVGV4dHVyZVBy
b2dyYW0pOgorICAgICAgICAoV2ViQ29yZTo6U2hhcmVkQ29udGV4dDNEOjpiaW5kRnJhbWVidWZm
ZXIpOgorICAgICAgICAoV2ViQ29yZTo6U2hhcmVkQ29udGV4dDNEOjpzZXRWaWV3cG9ydCk6Cisg
ICAgICAgIChXZWJDb3JlOjpTaGFyZWRDb250ZXh0M0Q6OnN1cHBvcnRzQkdSQSk6CisgICAgICAg
IChXZWJDb3JlOjpTaGFyZWRDb250ZXh0M0Q6OmNyZWF0ZUNvbXBvc2l0b3JUZXh0dXJlKToKKyAg
ICAgICAgKFdlYkNvcmU6OlNoYXJlZENvbnRleHQzRDo6Y29weVRleHR1cmVUb0NvbXBvc2l0b3Ip
OgorICAgICAgICAoV2ViQ29yZTo6U2hhcmVkQ29udGV4dDNEOjpwYWludHNJbnRvQ2FudmFzQnVm
ZmVyKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9ncHUvU2hhcmVkQ29udGV4dDNELmg6
IEFkZGVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2dwdS9UZXh0dXJlLmNwcDoKKyAg
ICAgICAgICBNYWMtc3BlY2lmaWMgY2hhbmdlczoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGlj
cy9tYWMvR3JhcGhpY3NMYXllckNBLmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvbWFj
L0dyYXBoaWNzTGF5ZXJDQS5tbToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXJDQTo6
c2V0Q29udGVudHNUb1dlYkdMKToKKyAgICAgICAgICBDaHJvbWl1bS1zcGVjaWZpYyBjaGFuZ2Vz
OgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0NhbnZhczJETGF5ZXJDaHJv
bWl1bS5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6Q2FudmFzMkRMYXllckNocm9taXVt
OjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6Q2FudmFzMkRMYXllckNocm9taXVtOjpDYW52
YXMyRExheWVyQ2hyb21pdW0pOgorICAgICAgICAoV2ViQ29yZTo6Q2FudmFzMkRMYXllckNocm9t
aXVtOjp1cGRhdGVDb250ZW50cyk6CisgICAgICAgIChXZWJDb3JlOjpDYW52YXMyRExheWVyQ2hy
b21pdW06OnNldENhbnZhc0ZyYW1lYnVmZmVyKToKKyAgICAgICAgKFdlYkNvcmU6OkNhbnZhczJE
TGF5ZXJDaHJvbWl1bTo6dGV4dHVyZUlkKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9j
aHJvbWl1bS9DYW52YXMyRExheWVyQ2hyb21pdW0uaDogQWRkZWQuCisgICAgICAgIChXZWJDb3Jl
OjpDYW52YXMyRExheWVyQ2hyb21pdW06OmRyYXdzQ29udGVudCk6CisgICAgICAgICogcGxhdGZv
cm0vZ3JhcGhpY3MvY2hyb21pdW0vQ2FudmFzTGF5ZXJDaHJvbWl1bS5jcHA6CisgICAgICAgICAg
Q2FudmFzTGF5ZXJDaHJvbWl1bSBpcyBub3cgYSBiYXNlIGNsYXNzIGZvciBXZWJHTExheWVyQ2hy
b21pdW0gYW5kIENhbnZhczJETGF5ZXJDaHJvbWl1bS4KKyAgICAgICAgKFdlYkNvcmU6OkNhbnZh
c0xheWVyQ2hyb21pdW06OkNhbnZhc0xheWVyQ2hyb21pdW0pOgorICAgICAgICAoV2ViQ29yZTo6
Q2FudmFzTGF5ZXJDaHJvbWl1bTo6fkNhbnZhc0xheWVyQ2hyb21pdW0pOgorICAgICAgICAoV2Vi
Q29yZTo6Q2FudmFzTGF5ZXJDaHJvbWl1bTo6ZHJhdyk6CisgICAgICAgICogcGxhdGZvcm0vZ3Jh
cGhpY3MvY2hyb21pdW0vQ2FudmFzTGF5ZXJDaHJvbWl1bS5oOgorICAgICAgICAqIHBsYXRmb3Jt
L2dyYXBoaWNzL2Nocm9taXVtL0dMRVMyQ2FudmFzLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkdM
RVMyQ2FudmFzOjpHTEVTMkNhbnZhcyk6CisgICAgICAgIChXZWJDb3JlOjpHTEVTMkNhbnZhczo6
fkdMRVMyQ2FudmFzKToKKyAgICAgICAgKFdlYkNvcmU6OkdMRVMyQ2FudmFzOjpzd2FwQnVmZmVy
cyk6CisgICAgICAgIChXZWJDb3JlOjpHTEVTMkNhbnZhczo6YmluZEZyYW1lYnVmZmVyKToKKyAg
ICAgICAgKFdlYkNvcmU6OkdMRVMyQ2FudmFzOjp0ZXh0dXJlSWRGb3JDb21wb3NpdG9yKToKKyAg
ICAgICAgKFdlYkNvcmU6OkdMRVMyQ2FudmFzOjp0ZXh0dXJlSWRGb3JDYW52YXMpOgorICAgICAg
ICAoV2ViQ29yZTo6R0xFUzJDYW52YXM6OmNsZWFyUmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpH
TEVTMkNhbnZhczo6ZmlsbFJlY3QpOgorICAgICAgICAoV2ViQ29yZTo6R0xFUzJDYW52YXM6OmRy
YXdUZXh0dXJlZFJlY3QpOgorICAgICAgICAoV2ViQ29yZTo6R0xFUzJDYW52YXM6OmRyYXdUZXh0
dXJlZFJlY3RUaWxlKToKKyAgICAgICAgKFdlYkNvcmU6OkdMRVMyQ2FudmFzOjpkcmF3UXVhZCk6
CisgICAgICAgIChXZWJDb3JlOjpHTEVTMkNhbnZhczo6Y3JlYXRlVGV4dHVyZSk6CisgICAgICAg
IChXZWJDb3JlOjpHTEVTMkNhbnZhczo6Z2V0VGV4dHVyZSk6CisgICAgICAgICogcGxhdGZvcm0v
Z3JhcGhpY3MvY2hyb21pdW0vR0xFUzJDYW52YXMuaDoKKyAgICAgICAgKFdlYkNvcmU6OkdMRVMy
Q2FudmFzOjpjb250ZXh0KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9H
cmFwaGljc0xheWVyQ2hyb21pdW0uY3BwOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NMYXll
ckNocm9taXVtOjpzZXRDb250ZW50c1RvV2ViR0wpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhp
Y3NMYXllckNocm9taXVtOjpzZXRDb250ZW50c1RvQ2FudmFzMkQpOgorICAgICAgICAqIHBsYXRm
b3JtL2dyYXBoaWNzL2Nocm9taXVtL0dyYXBoaWNzTGF5ZXJDaHJvbWl1bS5oOgorICAgICAgICAq
IHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyUmVuZGVyZXJDaHJvbWl1bS5jcHA6Cisg
ICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vV2ViR0xMYXllckNocm9taXVtLmNw
cDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpXZWJHTExheWVyQ2hyb21pdW06OmNyZWF0ZSk6
CisgICAgICAgIChXZWJDb3JlOjpXZWJHTExheWVyQ2hyb21pdW06OldlYkdMTGF5ZXJDaHJvbWl1
bSk6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTExheWVyQ2hyb21pdW06OnVwZGF0ZUNvbnRlbnRz
KToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMTGF5ZXJDaHJvbWl1bTo6c2V0Q29udGV4dCk6Cisg
ICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vV2ViR0xMYXllckNocm9taXVtLmg6
IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xMYXllckNocm9taXVtOjpkcmF3c0NvbnRl
bnQpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xMYXllckNocm9taXVtOjp0ZXh0dXJlSWQpOgor
ICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3NraWEvR3JhcGhpY3NDb250ZXh0U2tpYS5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OnNldFNoYXJlZENvbnRleHQzRCk6
CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OnRleHR1cmVJZEZvckNvbXBvc2l0
b3IpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0Ojp0ZXh0dXJlSWRGb3JDYW52
YXMpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3NraWEvSW1hZ2VCdWZmZXJTa2lhLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyOjpkcmF3KToKKyAgICAgICAgKiBwbGF0
Zm9ybS9ncmFwaGljcy9za2lhL0ltYWdlU2tpYS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpkcmF3
Qml0bWFwR0xFUzIpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3NraWEvUGxhdGZvcm1D
b250ZXh0U2tpYS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpQbGF0Zm9ybUNvbnRleHRTa2lhOjp+
UGxhdGZvcm1Db250ZXh0U2tpYSk6CisgICAgICAgIChXZWJDb3JlOjpTd2FwQnVmZmVyc0NhbGxi
YWNrSW1wbDo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OlN3YXBCdWZmZXJzQ2FsbGJhY2tJ
bXBsOjp3aWxsU3dhcEJ1ZmZlcnMpOgorICAgICAgICAoV2ViQ29yZTo6U3dhcEJ1ZmZlcnNDYWxs
YmFja0ltcGw6OlN3YXBCdWZmZXJzQ2FsbGJhY2tJbXBsKToKKyAgICAgICAgKFdlYkNvcmU6OlBs
YXRmb3JtQ29udGV4dFNraWE6OnNldFNoYXJlZENvbnRleHQzRCk6CisgICAgICAgIChXZWJDb3Jl
OjpQbGF0Zm9ybUNvbnRleHRTa2lhOjpzd2FwQnVmZmVycyk6CisgICAgICAgIChXZWJDb3JlOjpQ
bGF0Zm9ybUNvbnRleHRTa2lhOjp1cGxvYWRTb2Z0d2FyZVRvSGFyZHdhcmUpOgorICAgICAgICAo
V2ViQ29yZTo6UGxhdGZvcm1Db250ZXh0U2tpYTo6cmVhZGJhY2tIYXJkd2FyZVRvU29mdHdhcmUp
OgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3NraWEvUGxhdGZvcm1Db250ZXh0U2tpYS5o
OgorCiAyMDEwLTA4LTMwICBDaHJpcyBSb2dlcnMgIDxjcm9nZXJzQGdvb2dsZS5jb20+CiAKICAg
ICAgICAgUmV2aWV3ZWQgYnkgS2VubmV0aCBSdXNzZWxsLgpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9X
ZWJDb3JlLmd5cGkgYi9XZWJDb3JlL1dlYkNvcmUuZ3lwaQppbmRleCBlNWI1N2JhMDhlM2EwMGQ4
ZDU5OGNkMmJlNDA3M2Q3MGE5YTBiZGY3Li5mY2NiZmE1NjYyNWVmMTg5ZmY5ZTNhYmUzNDg1NjAx
MGM1ZDM3YWNjIDEwMDY0NAotLS0gYS9XZWJDb3JlL1dlYkNvcmUuZ3lwaQorKysgYi9XZWJDb3Jl
L1dlYkNvcmUuZ3lwaQpAQCAtMjIzNiw2ICsyMjM2LDggQEAKICAgICAgICAgICAgICdwbGF0Zm9y
bS9ncmFwaGljcy9jZy9QYXRoQ0cuY3BwJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGlj
cy9jZy9QYXR0ZXJuQ0cuY3BwJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jZy9U
cmFuc2Zvcm1hdGlvbk1hdHJpeENHLmNwcCcsCisgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhp
Y3MvY2hyb21pdW0vQ2FudmFzMkRMYXllckNocm9taXVtLmNwcCcsCisgICAgICAgICAgICAncGxh
dGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vQ2FudmFzMkRMYXllckNocm9taXVtLmgnLAogICAgICAg
ICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0NhbnZhc0xheWVyQ2hyb21pdW0uY3Bw
JywKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9DYW52YXNMYXllckNo
cm9taXVtLmgnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0NvbnRl
bnRMYXllckNocm9taXVtLmNwcCcsCkBAIC0yMjgzLDYgKzIyODUsOCBAQAogICAgICAgICAgICAg
J3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1VuaXNjcmliZUhlbHBlclRleHRSdW4uaCcsCiAg
ICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vVmlkZW9MYXllckNocm9taXVt
LmNwcCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vVmlkZW9MYXll
ckNocm9taXVtLmgnLAorICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1dl
YkdMTGF5ZXJDaHJvbWl1bS5jcHAnLAorICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2No
cm9taXVtL1dlYkdMTGF5ZXJDaHJvbWl1bS5oJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFw
aGljcy9jb2NvYS9Gb250UGxhdGZvcm1EYXRhLmgnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dy
YXBoaWNzL2ZpbHRlcnMvRkVCbGVuZC5jcHAnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBo
aWNzL2ZpbHRlcnMvRkVCbGVuZC5oJywKQEAgLTIzMDMsNiArMjMwNywxMCBAQAogICAgICAgICAg
ICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvU291cmNlQWxwaGEuaCcsCiAgICAgICAgICAg
ICAncGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9Tb3VyY2VHcmFwaGljLmNwcCcsCiAgICAgICAg
ICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9Tb3VyY2VHcmFwaGljLmgnLAorICAgICAg
ICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2dwdS9DYW52YXNGcmFtZWJ1ZmZlci5jcHAnLAorICAg
ICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2dwdS9DYW52YXNGcmFtZWJ1ZmZlci5oJywKKyAg
ICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9ncHUvU2hhcmVkQ29udGV4dDNELmNwcCcsCisg
ICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvZ3B1L1NoYXJlZENvbnRleHQzRC5oJywKICAg
ICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9ncHUvU2hhZGVyLmNwcCcsCiAgICAgICAgICAg
ICAncGxhdGZvcm0vZ3JhcGhpY3MvZ3B1L1NoYWRlci5oJywKICAgICAgICAgICAgICdwbGF0Zm9y
bS9ncmFwaGljcy9ncHUvU29saWRGaWxsU2hhZGVyLmNwcCcsCkBAIC0yNTYxLDggKzI1NjksOCBA
QAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlQnVmZmVyLmNwcCcsCiAgICAg
ICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VCdWZmZXIuaCcsCiAgICAgICAgICAgICAn
cGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VPYnNlcnZlci5oJywKLSAgICAgICAgICAgICdwbGF0Zm9y
bS9ncmFwaGljcy9JbWFnZVNvdXJjZS5oJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGlj
cy9JbWFnZVNvdXJjZS5jcHAnLAorICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdl
U291cmNlLmgnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL0ludFBvaW50LmgnLAog
ICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL0ludFJlY3QuY3BwJywKICAgICAgICAgICAg
ICdwbGF0Zm9ybS9ncmFwaGljcy9JbnRSZWN0LmgnLApkaWZmIC0tZ2l0IGEvV2ViQ29yZS9odG1s
L2NhbnZhcy9DYW52YXNSZW5kZXJpbmdDb250ZXh0LmNwcCBiL1dlYkNvcmUvaHRtbC9jYW52YXMv
Q2FudmFzUmVuZGVyaW5nQ29udGV4dC5jcHAKaW5kZXggMWU4OTdkMzBlY2UxOTgzOTEyOGYwMDhk
ZGY4ZDQ4NjBkNzE0MDYyNy4uZTAxOTMzMmJhODFmNTNjOWViMmNjY2M1M2IyNDUzMDQ2ZWNiZDg1
ZSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9odG1sL2NhbnZhcy9DYW52YXNSZW5kZXJpbmdDb250ZXh0
LmNwcAorKysgYi9XZWJDb3JlL2h0bWwvY2FudmFzL0NhbnZhc1JlbmRlcmluZ0NvbnRleHQuY3Bw
CkBAIC0yNSw5ICsyNSw2IEBACiAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJDYW52
YXNSZW5kZXJpbmdDb250ZXh0LmgiCi0jaWYgRU5BQkxFKEFDQ0VMRVJBVEVEXzJEX0NBTlZBUykg
fHwgRU5BQkxFKDNEX0NBTlZBUykKLSNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQzRC5oIgotI2Vu
ZGlmCiAjaW5jbHVkZSAiSFRNTENhbnZhc0VsZW1lbnQuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUg
ewpAQCAtNDcsMTMgKzQ0LDQgQEAgdm9pZCBDYW52YXNSZW5kZXJpbmdDb250ZXh0OjpkZXJlZigp
CiAgICAgbV9jYW52YXMtPmRlcmVmKCk7IAogfQogCi1ib29sIENhbnZhc1JlbmRlcmluZ0NvbnRl
eHQ6OnBhaW50c0ludG9DYW52YXNCdWZmZXIoKSBjb25zdAotewotI2lmIEVOQUJMRShBQ0NFTEVS
QVRFRF8yRF9DQU5WQVMpIHx8IEVOQUJMRSgzRF9DQU5WQVMpCi0gICAgaWYgKEdyYXBoaWNzQ29u
dGV4dDNEKiBjb250ZXh0M0QgPSBncmFwaGljc0NvbnRleHQzRCgpKQotICAgICAgICByZXR1cm4g
Y29udGV4dDNELT5wYWludHNJbnRvQ2FudmFzQnVmZmVyKCk7Ci0jZW5kaWYKLSAgICByZXR1cm4g
dHJ1ZTsKLX0KLQogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9o
dG1sL2NhbnZhcy9DYW52YXNSZW5kZXJpbmdDb250ZXh0LmggYi9XZWJDb3JlL2h0bWwvY2FudmFz
L0NhbnZhc1JlbmRlcmluZ0NvbnRleHQuaAppbmRleCAyY2RiZTFkMzc2NTk0ZGJlMGRmYmQ3MDBm
MmVmYjczNGEzZGI5MmM2Li5jNzE2OGIxZDA3ZGVhOGNmYzRkNjk0MTlhNGE2NWM0ZTJmYmFkY2Ey
IDEwMDY0NAotLS0gYS9XZWJDb3JlL2h0bWwvY2FudmFzL0NhbnZhc1JlbmRlcmluZ0NvbnRleHQu
aAorKysgYi9XZWJDb3JlL2h0bWwvY2FudmFzL0NhbnZhc1JlbmRlcmluZ0NvbnRleHQuaApAQCAt
MzEsNyArMzEsNiBAQAogbmFtZXNwYWNlIFdlYkNvcmUgewogCiAgICAgY2xhc3MgV2ViR0xPYmpl
Y3Q7Ci0gICAgY2xhc3MgR3JhcGhpY3NDb250ZXh0M0Q7CiAgICAgY2xhc3MgSFRNTENhbnZhc0Vs
ZW1lbnQ7CiAKICAgICBjbGFzcyBDYW52YXNSZW5kZXJpbmdDb250ZXh0IDogcHVibGljIE5vbmNv
cHlhYmxlIHsKQEAgLTQ5LDEyICs0OCw4IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAg
dmlydHVhbCBib29sIGlzM2QoKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQogICAgICAgICB2aXJ0
dWFsIGJvb2wgaXNBY2NlbGVyYXRlZCgpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CiAgICAgICAg
IAotICAgICAgICAvLyBGb3IgYWNjZWxlcmF0ZWQgY2FudmFzZXMsIHJldHVybnMgYSBwb2ludGVy
IHRvIHRoZSB1bmRlcmx5aW5nIEdyYXBoaWNzQ29udGV4dDNELgotICAgICAgICAvLyBGb3Igbm9u
IGFjY2VsZXJhdGVkIGNhbnZhc2VzIHJldHVybnMgMC4KLSAgICAgICAgdmlydHVhbCBHcmFwaGlj
c0NvbnRleHQzRCogZ3JhcGhpY3NDb250ZXh0M0QoKSBjb25zdCB7IHJldHVybiAwOyB9Ci0KICAg
ICAgICAgdmlydHVhbCB2b2lkIHBhaW50UmVuZGVyaW5nUmVzdWx0c1RvQ2FudmFzKCkge30KLSAg
ICAgICAgYm9vbCBwYWludHNJbnRvQ2FudmFzQnVmZmVyKCkgY29uc3Q7CisgICAgICAgIHZpcnR1
YWwgYm9vbCBwYWludHNJbnRvQ2FudmFzQnVmZmVyKCkgY29uc3QgeyByZXR1cm4gdHJ1ZTsgfQog
CiAgICAgcHJpdmF0ZToKICAgICAgICAgSFRNTENhbnZhc0VsZW1lbnQqIG1fY2FudmFzOwpkaWZm
IC0tZ2l0IGEvV2ViQ29yZS9odG1sL2NhbnZhcy9DYW52YXNSZW5kZXJpbmdDb250ZXh0MkQuY3Bw
IGIvV2ViQ29yZS9odG1sL2NhbnZhcy9DYW52YXNSZW5kZXJpbmdDb250ZXh0MkQuY3BwCmluZGV4
IDZkZjZhYmY5Njc0YWQ5YTIwZjIyNzJhMTc4OTNjODU4NTBkZTU3ZDcuLmNlNGQ1YmJmYzY5YWY4
ZWVkYjBlNDJkOWNmZDM2MTRhNmEwOWU3OTggMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvaHRtbC9jYW52
YXMvQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJELmNwcAorKysgYi9XZWJDb3JlL2h0bWwvY2FudmFz
L0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRC5jcHAKQEAgLTU5LDggKzU5LDEyIEBACiAjaW5jbHVk
ZSAiVGV4dE1ldHJpY3MuaCIKIAogI2lmIEVOQUJMRShBQ0NFTEVSQVRFRF8yRF9DQU5WQVMpCisj
aW5jbHVkZSAiQ2FudmFzRnJhbWVidWZmZXIuaCIKKyNpbmNsdWRlICJDaHJvbWUuaCIKKyNpbmNs
dWRlICJDaHJvbWVDbGllbnQuaCIKICNpbmNsdWRlICJGcmFtZVZpZXcuaCIKICNpbmNsdWRlICJH
cmFwaGljc0NvbnRleHQzRC5oIgorI2luY2x1ZGUgIlNoYXJlZENvbnRleHQzRC5oIgogI2lmIFVT
RShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKICNpbmNsdWRlICJSZW5kZXJMYXllci5oIgogI2Vu
ZGlmCkBAIC0xMjQsMTcgKzEyOCwxMSBAQCBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ6OkNhbnZh
c1JlbmRlcmluZ0NvbnRleHQyRChIVE1MQ2FudmFzRWxlbWVudCogY2FudmFzLCBibwogICAgICAg
ICByZXR1cm47CiAgICAgaWYgKCFwLT5zZXR0aW5ncygpLT5hY2NlbGVyYXRlZDJkQ2FudmFzRW5h
YmxlZCgpKQogICAgICAgICByZXR1cm47Ci0gICAgaWYgKEZyYW1lVmlldyogdmlldyA9IGNhbnZh
cy0+ZG9jdW1lbnQoKS0+dmlldygpKSB7Ci0gICAgICAgIGlmIChTY3JvbGxWaWV3KiByb290Vmll
dyA9IHZpZXctPnJvb3QoKSkgewotICAgICAgICAgICAgaWYgKEhvc3RXaW5kb3cqIGhvc3RXaW5k
b3cgPSByb290Vmlldy0+aG9zdFdpbmRvdygpKSB7Ci0gICAgICAgICAgICAgICAgLy8gU2V0IHVw
IG91ciBjb250ZXh0Ci0gICAgICAgICAgICAgICAgR3JhcGhpY3NDb250ZXh0M0Q6OkF0dHJpYnV0
ZXMgYXR0cjsKLSAgICAgICAgICAgICAgICBhdHRyLnN0ZW5jaWwgPSB0cnVlOwotICAgICAgICAg
ICAgICAgIG1fY29udGV4dDNEID0gR3JhcGhpY3NDb250ZXh0M0Q6OmNyZWF0ZShhdHRyLCBob3N0
V2luZG93KTsKLSAgICAgICAgICAgICAgICBpZiAobV9jb250ZXh0M0QpCi0gICAgICAgICAgICAg
ICAgICAgIGlmIChHcmFwaGljc0NvbnRleHQqIGMgPSBkcmF3aW5nQ29udGV4dCgpKQotICAgICAg
ICAgICAgICAgICAgICAgICAgYy0+c2V0R3JhcGhpY3NDb250ZXh0M0QobV9jb250ZXh0M0QuZ2V0
KCksIEludFNpemUoY2FudmFzLT53aWR0aCgpLCBjYW52YXMtPmhlaWdodCgpKSk7Ci0gICAgICAg
ICAgICB9CisgICAgbV9jb250ZXh0M0QgPSBwLT5jaHJvbWUoKS0+Y2xpZW50KCktPmdldFNoYXJl
ZENvbnRleHQzRCgpOworICAgIGlmIChtX2NvbnRleHQzRCkgeworICAgICAgICBpZiAoR3JhcGhp
Y3NDb250ZXh0KiBjID0gZHJhd2luZ0NvbnRleHQoKSkgeworICAgICAgICAgICAgbV9mcmFtZWJ1
ZmZlciA9IENhbnZhc0ZyYW1lYnVmZmVyOjpjcmVhdGUobV9jb250ZXh0M0QuZ2V0KCksIEludFNp
emUoY2FudmFzLT53aWR0aCgpLCBjYW52YXMtPmhlaWdodCgpKSk7CisgICAgICAgICAgICBjLT5z
ZXRTaGFyZWRDb250ZXh0M0QobV9jb250ZXh0M0QuZ2V0KCksIG1fZnJhbWVidWZmZXIuZ2V0KCks
IEludFNpemUoY2FudmFzLT53aWR0aCgpLCBjYW52YXMtPmhlaWdodCgpKSk7CiAgICAgICAgIH0K
ICAgICB9CiAjZW5kaWYKQEAgLTE1Myw2ICsxNTEsMTYgQEAgYm9vbCBDYW52YXNSZW5kZXJpbmdD
b250ZXh0MkQ6OmlzQWNjZWxlcmF0ZWQoKSBjb25zdAogI2VuZGlmCiB9CiAKK2Jvb2wgQ2FudmFz
UmVuZGVyaW5nQ29udGV4dDJEOjpwYWludHNJbnRvQ2FudmFzQnVmZmVyKCkgY29uc3QKK3sKKyNp
ZiBFTkFCTEUoQUNDRUxFUkFURURfMkRfQ0FOVkFTKQorICAgIGlmIChtX2NvbnRleHQzRCkKKyAg
ICAgICAgcmV0dXJuIG1fY29udGV4dDNELT5wYWludHNJbnRvQ2FudmFzQnVmZmVyKCk7CisjZW5k
aWYKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworCiB2b2lkIENhbnZhc1JlbmRlcmluZ0NvbnRleHQy
RDo6cmVzZXQoKQogewogICAgIG1fc3RhdGVTdGFjay5yZXNpemUoMSk7CkBAIC0xNjAsOCArMTY4
LDEwIEBAIHZvaWQgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEOjpyZXNldCgpCiAgICAgbV9wYXRo
LmNsZWFyKCk7CiAjaWYgRU5BQkxFKEFDQ0VMRVJBVEVEXzJEX0NBTlZBUykKICAgICBpZiAobV9j
b250ZXh0M0QpIHsKLSAgICAgICAgaWYgKEdyYXBoaWNzQ29udGV4dCogYyA9IGRyYXdpbmdDb250
ZXh0KCkpCi0gICAgICAgICAgICBjLT5zZXRHcmFwaGljc0NvbnRleHQzRChtX2NvbnRleHQzRC5n
ZXQoKSwgSW50U2l6ZShjYW52YXMoKS0+d2lkdGgoKSwgY2FudmFzKCktPmhlaWdodCgpKSk7Cisg
ICAgICAgIGlmIChHcmFwaGljc0NvbnRleHQqIGMgPSBkcmF3aW5nQ29udGV4dCgpKSB7CisgICAg
ICAgICAgICBtX2ZyYW1lYnVmZmVyID0gQ2FudmFzRnJhbWVidWZmZXI6OmNyZWF0ZShtX2NvbnRl
eHQzRC5nZXQoKSwgSW50U2l6ZShjYW52YXMoKS0+d2lkdGgoKSwgY2FudmFzKCktPmhlaWdodCgp
KSk7CisgICAgICAgICAgICBjLT5zZXRTaGFyZWRDb250ZXh0M0QobV9jb250ZXh0M0QuZ2V0KCks
IG1fZnJhbWVidWZmZXIuZ2V0KCksIEludFNpemUoY2FudmFzKCktPndpZHRoKCksIGNhbnZhcygp
LT5oZWlnaHQoKSkpOworICAgICAgICB9CiAgICAgfQogI2VuZGlmCiB9CkBAIC0xMjY5LDcgKzEy
NzksOSBAQCB2b2lkIENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRDo6ZHJhd0ltYWdlKEhUTUxDYW52
YXNFbGVtZW50KiBzb3VyY2VDYW52YXMsIGNvbnN0CiAgICAgaWYgKCFzb3VyY2VDYW52YXMtPm9y
aWdpbkNsZWFuKCkpCiAgICAgICAgIGNhbnZhcygpLT5zZXRPcmlnaW5UYWludGVkKCk7CiAKKyNp
ZiAhRU5BQkxFKEFDQ0VMRVJBVEVEXzJEX0NBTlZBUykKICAgICBzb3VyY2VDYW52YXMtPm1ha2VS
ZW5kZXJpbmdSZXN1bHRzQXZhaWxhYmxlKCk7CisjZW5kaWYKIAogICAgIGMtPmRyYXdJbWFnZUJ1
ZmZlcihidWZmZXIsIERldmljZUNvbG9yU3BhY2UsIGRlc3RSZWN0LCBzb3VyY2VSZWN0LCBzdGF0
ZSgpLm1fZ2xvYmFsQ29tcG9zaXRlKTsKICAgICBkaWREcmF3KGRlc3RSZWN0KTsKQEAgLTE1MDQs
NyArMTUxNiw3IEBAIHZvaWQgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEOjpkaWREcmF3KGNvbnN0
IEZsb2F0UmVjdCYgciwgdW5zaWduZWQgb3B0aW9ucykKICNpZiBFTkFCTEUoQUNDRUxFUkFURURf
MkRfQ0FOVkFTKSAmJiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCiAgICAgLy8gSWYgd2Ug
YXJlIGRyYXdpbmcgdG8gaGFyZHdhcmUgYW5kIHdlIGhhdmUgYSBjb21wb3NpdGVkIGxheWVyLCBq
dXN0IGNhbGwgcmVuZGVyZXJDb250ZW50Q2hhbmdlZCgpLgogICAgIFJlbmRlckJveCogcmVuZGVy
Qm94ID0gY2FudmFzKCktPnJlbmRlckJveCgpOwotICAgIGlmIChtX2NvbnRleHQzRCAmJiByZW5k
ZXJCb3ggJiYgcmVuZGVyQm94LT5oYXNMYXllcigpICYmIHJlbmRlckJveC0+bGF5ZXIoKS0+aGFz
QWNjZWxlcmF0ZWRDb21wb3NpdGluZygpKQorICAgIGlmIChpc0FjY2VsZXJhdGVkKCkgJiYgcmVu
ZGVyQm94ICYmIHJlbmRlckJveC0+aGFzTGF5ZXIoKSAmJiByZW5kZXJCb3gtPmxheWVyKCktPmhh
c0FjY2VsZXJhdGVkQ29tcG9zaXRpbmcoKSkKICAgICAgICAgcmVuZGVyQm94LT5sYXllcigpLT5y
ZW5kZXJlckNvbnRlbnRDaGFuZ2VkKCk7CiAgICAgZWxzZQogI2VuZGlmCmRpZmYgLS1naXQgYS9X
ZWJDb3JlL2h0bWwvY2FudmFzL0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRC5oIGIvV2ViQ29yZS9o
dG1sL2NhbnZhcy9DYW52YXNSZW5kZXJpbmdDb250ZXh0MkQuaAppbmRleCA5ODU3MzQ0M2U4MWRm
OWY3ZDk2ZjY5MjMyZmVmZjkwOGUwY2U2Yjg5Li40NWE2NjViMzFmNDM5NTM3YzRmODBjNjk4OTU1
YzY2ZTA5MTkyMTkxIDEwMDY0NAotLS0gYS9XZWJDb3JlL2h0bWwvY2FudmFzL0NhbnZhc1JlbmRl
cmluZ0NvbnRleHQyRC5oCisrKyBiL1dlYkNvcmUvaHRtbC9jYW52YXMvQ2FudmFzUmVuZGVyaW5n
Q29udGV4dDJELmgKQEAgLTYxLDcgKzYxLDcgQEAgY2xhc3MgS1VSTDsKIGNsYXNzIFRleHRNZXRy
aWNzOwogCiAjaWYgRU5BQkxFKEFDQ0VMRVJBVEVEXzJEX0NBTlZBUykKLWNsYXNzIEdyYXBoaWNz
Q29udGV4dDNEOworY2xhc3MgU2hhcmVkQ29udGV4dDNEOwogI2VuZGlmCiAKIHR5cGVkZWYgaW50
IEV4Y2VwdGlvbkNvZGU7CkBAIC03NCw2ICs3NCw3IEBAIHB1YmxpYzoKIAogICAgIHZpcnR1YWwg
Ym9vbCBpczJkKCkgY29uc3QgeyByZXR1cm4gdHJ1ZTsgfQogICAgIHZpcnR1YWwgYm9vbCBpc0Fj
Y2VsZXJhdGVkKCkgY29uc3Q7CisgICAgdmlydHVhbCBib29sIHBhaW50c0ludG9DYW52YXNCdWZm
ZXIoKSBjb25zdDsKIAogICAgIENhbnZhc1N0eWxlKiBzdHJva2VTdHlsZSgpIGNvbnN0OwogICAg
IHZvaWQgc2V0U3Ryb2tlU3R5bGUoUGFzc1JlZlB0cjxDYW52YXNTdHlsZT4pOwpAQCAtMjI0LDcg
KzIyNSw3IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIHZvaWQgcGFpbnRSZW5kZXJpbmdSZXN1bHRz
VG9DYW52YXMoKTsKIAogI2lmIEVOQUJMRShBQ0NFTEVSQVRFRF8yRF9DQU5WQVMpCi0gICAgdmly
dHVhbCBHcmFwaGljc0NvbnRleHQzRCogZ3JhcGhpY3NDb250ZXh0M0QoKSBjb25zdCB7IHJldHVy
biBtX2NvbnRleHQzRC5nZXQoKTsgfQorICAgIENhbnZhc0ZyYW1lYnVmZmVyKiBmcmFtZWJ1ZmZl
cigpIHsgcmV0dXJuIG1fZnJhbWVidWZmZXIuZ2V0KCk7IH0KICNlbmRpZgogCiBwcml2YXRlOgpA
QCAtMjk4LDcgKzI5OSw4IEBAIHByaXZhdGU6CiAjZW5kaWYKIAogI2lmIEVOQUJMRShBQ0NFTEVS
QVRFRF8yRF9DQU5WQVMpCi0gICAgT3duUHRyPEdyYXBoaWNzQ29udGV4dDNEPiBtX2NvbnRleHQz
RDsKKyAgICBSZWZQdHI8U2hhcmVkQ29udGV4dDNEPiBtX2NvbnRleHQzRDsKKyAgICBPd25QdHI8
Q2FudmFzRnJhbWVidWZmZXI+IG1fZnJhbWVidWZmZXI7CiAjZW5kaWYKIH07CiAKZGlmZiAtLWdp
dCBhL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xSZW5kZXJpbmdDb250ZXh0LmNwcCBiL1dlYkNv
cmUvaHRtbC9jYW52YXMvV2ViR0xSZW5kZXJpbmdDb250ZXh0LmNwcAppbmRleCA5NTkxYTUzY2Zl
YzA1OWUyOTkzNmM1ODE5MDcwYTRlYWZlOWNkNjgzLi42NGNiNWQzZWZkY2ZlYjJlMjUzNzA0MzY4
OTRkZjBjNTkzNmEyZjNhIDEwMDY0NAotLS0gYS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMUmVu
ZGVyaW5nQ29udGV4dC5jcHAKKysrIGIvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFJlbmRlcmlu
Z0NvbnRleHQuY3BwCkBAIC0xNzAsNiArMTcwLDExIEBAIHZvaWQgV2ViR0xSZW5kZXJpbmdDb250
ZXh0OjpwYWludFJlbmRlcmluZ1Jlc3VsdHNUb0NhbnZhcygpCiAgICAgbV9jb250ZXh0LT5wYWlu
dFJlbmRlcmluZ1Jlc3VsdHNUb0NhbnZhcyh0aGlzKTsKIH0KIAorYm9vbCBXZWJHTFJlbmRlcmlu
Z0NvbnRleHQ6OnBhaW50c0ludG9DYW52YXNCdWZmZXIoKSBjb25zdAoreworICAgIHJldHVybiBt
X2NvbnRleHQtPnBhaW50c0ludG9DYW52YXNCdWZmZXIoKTsKK30KKwogdm9pZCBXZWJHTFJlbmRl
cmluZ0NvbnRleHQ6OnJlc2hhcGUoaW50IHdpZHRoLCBpbnQgaGVpZ2h0KQogewogICAgIGlmICht
X25lZWRzVXBkYXRlKSB7CmRpZmYgLS1naXQgYS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMUmVu
ZGVyaW5nQ29udGV4dC5oIGIvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFJlbmRlcmluZ0NvbnRl
eHQuaAppbmRleCA2NmVjOGQ4MmFhNzNmZGI0YjQ5ZjI3NmIzYjZkMDUyZDUzODQzYWJiLi44MTM5
MGY5ZTRmZDUxOTBiZGZkNWUyZTAwNDU3ZmU2NGM2NTExYzlkIDEwMDY0NAotLS0gYS9XZWJDb3Jl
L2h0bWwvY2FudmFzL1dlYkdMUmVuZGVyaW5nQ29udGV4dC5oCisrKyBiL1dlYkNvcmUvaHRtbC9j
YW52YXMvV2ViR0xSZW5kZXJpbmdDb250ZXh0LmgKQEAgLTYzLDYgKzYzLDcgQEAgcHVibGljOgog
CiAgICAgdmlydHVhbCBib29sIGlzM2QoKSBjb25zdCB7IHJldHVybiB0cnVlOyB9CiAgICAgdmly
dHVhbCBib29sIGlzQWNjZWxlcmF0ZWQoKSBjb25zdCB7IHJldHVybiB0cnVlOyB9CisgICAgdmly
dHVhbCBib29sIHBhaW50c0ludG9DYW52YXNCdWZmZXIoKSBjb25zdDsKIAogICAgIHZvaWQgYWN0
aXZlVGV4dHVyZSh1bnNpZ25lZCBsb25nIHRleHR1cmUsIEV4Y2VwdGlvbkNvZGUmIGVjKTsKICAg
ICB2b2lkIGF0dGFjaFNoYWRlcihXZWJHTFByb2dyYW0qLCBXZWJHTFNoYWRlciosIEV4Y2VwdGlv
bkNvZGUmIGVjKTsKQEAgLTI3Nyw3ICsyNzgsNyBAQCBwdWJsaWM6CiAKICAgICB2b2lkIHZpZXdw
b3J0KGxvbmcgeCwgbG9uZyB5LCB1bnNpZ25lZCBsb25nIHdpZHRoLCB1bnNpZ25lZCBsb25nIGhl
aWdodCk7CiAKLSAgICB2aXJ0dWFsIEdyYXBoaWNzQ29udGV4dDNEKiBncmFwaGljc0NvbnRleHQz
RCgpIGNvbnN0IHsgcmV0dXJuIG1fY29udGV4dC5nZXQoKTsgfQorICAgIEdyYXBoaWNzQ29udGV4
dDNEKiBncmFwaGljc0NvbnRleHQzRCgpIGNvbnN0IHsgcmV0dXJuIG1fY29udGV4dC5nZXQoKTsg
fQogCiAgICAgdm9pZCByZXNoYXBlKGludCB3aWR0aCwgaW50IGhlaWdodCk7CiAKZGlmZiAtLWdp
dCBhL1dlYkNvcmUvbG9hZGVyL0VtcHR5Q2xpZW50cy5oIGIvV2ViQ29yZS9sb2FkZXIvRW1wdHlD
bGllbnRzLmgKaW5kZXggMjcwNzUyZGQ3ZjhmMDFmYTk0ZjdjMjkzZDNjZmU3ZmE5NWVkMjkxZi4u
ZWRhNTViYTc1NmJjZDU1NTA3ZjZkNGU3OTI2OWQ4ZWIwYzVhZTJkMyAxMDA2NDQKLS0tIGEvV2Vi
Q29yZS9sb2FkZXIvRW1wdHlDbGllbnRzLmgKKysrIGIvV2ViQ29yZS9sb2FkZXIvRW1wdHlDbGll
bnRzLmgKQEAgLTQ2LDYgKzQ2LDEwIEBACiAjaW5jbHVkZSAiUmVzb3VyY2VFcnJvci5oIgogI2lu
Y2x1ZGUgIlNlYXJjaFBvcHVwTWVudS5oIgogCisjaWYgRU5BQkxFKEFDQ0VMRVJBVEVEXzJEX0NB
TlZBUykKKyNpbmNsdWRlICJTaGFyZWRDb250ZXh0M0QuaCIKKyNlbmRpZgorCiAvKgogIFRoaXMg
ZmlsZSBob2xkcyBlbXB0eSBDbGllbnQgc3R1YnMgZm9yIHVzZSBieSBXZWJDb3JlLgogIFZpZXds
ZXNzIGVsZW1lbnQgbmVlZHMgdG8gY3JlYXRlIGEgZHVtbXkgUGFnZS0+RnJhbWUtPkZyYW1lVmll
dyB0cmVlIGZvciB1c2UgaW4gcGFyc2luZyBvciBleGVjdXRpbmcgSmF2YVNjcmlwdC4KQEAgLTE5
MCw5ICsxOTQsMTMgQEAgcHVibGljOgogICAgIHZpcnR1YWwgdm9pZCBjYW5jZWxHZW9sb2NhdGlv
blBlcm1pc3Npb25SZXF1ZXN0Rm9yRnJhbWUoRnJhbWUqLCBHZW9sb2NhdGlvbiopIHt9CiAKICNp
ZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCi0gICAgdmlydHVhbCB2b2lkIGF0dGFjaFJv
b3RHcmFwaGljc0xheWVyKEZyYW1lKiwgR3JhcGhpY3NMYXllciopIHt9OwotICAgIHZpcnR1YWwg
dm9pZCBzZXROZWVkc09uZVNob3REcmF3aW5nU3luY2hyb25pemF0aW9uKCkge307Ci0gICAgdmly
dHVhbCB2b2lkIHNjaGVkdWxlQ29tcG9zaXRpbmdMYXllclN5bmMoKSB7fTsKKyAgICB2aXJ0dWFs
IHZvaWQgYXR0YWNoUm9vdEdyYXBoaWNzTGF5ZXIoRnJhbWUqLCBHcmFwaGljc0xheWVyKikge30K
KyAgICB2aXJ0dWFsIHZvaWQgc2V0TmVlZHNPbmVTaG90RHJhd2luZ1N5bmNocm9uaXphdGlvbigp
IHt9CisgICAgdmlydHVhbCB2b2lkIHNjaGVkdWxlQ29tcG9zaXRpbmdMYXllclN5bmMoKSB7fQor
I2VuZGlmCisKKyNpZiBFTkFCTEUoQUNDRUxFUkFURURfMkRfQ0FOVkFTKQorICAgIHZpcnR1YWwg
UGFzc1JlZlB0cjxTaGFyZWRDb250ZXh0M0Q+IGdldFNoYXJlZENvbnRleHQzRCgpIHsgcmV0dXJu
IDA7IH0KICNlbmRpZgogCiAjaWYgUExBVEZPUk0oV0lOKQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9w
YWdlL0Nocm9tZUNsaWVudC5oIGIvV2ViQ29yZS9wYWdlL0Nocm9tZUNsaWVudC5oCmluZGV4IGQz
ZTE2NjIyOTJhMzFhODllNWJhYTc0NzA1MjBhOTg4YmUxODIwNzkuLjVjNzZjMzlkYTZmMGU1YTAz
MDNkZTZmODA0NGE0OWFiMzQ3Yjg3N2EgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvcGFnZS9DaHJvbWVD
bGllbnQuaAorKysgYi9XZWJDb3JlL3BhZ2UvQ2hyb21lQ2xpZW50LmgKQEAgLTU3LDYgKzU3LDcg
QEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgIGNsYXNzIE5vZGU7CiAgICAgY2xhc3MgUGFnZTsK
ICAgICBjbGFzcyBTZWN1cml0eU9yaWdpbjsKKyAgICBjbGFzcyBTaGFyZWRDb250ZXh0M0Q7CiAg
ICAgY2xhc3MgUG9wdXBNZW51Q2xpZW50OwogICAgIGNsYXNzIFdpZGdldDsKIApAQCAtMjMwLDYg
KzIzMSwxMCBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIHZpcnR1YWwgYm9vbCBhbGxv
d3NBY2NlbGVyYXRlZENvbXBvc2l0aW5nKCkgY29uc3QgeyByZXR1cm4gdHJ1ZTsgfQogI2VuZGlm
CiAKKyNpZiBFTkFCTEUoQUNDRUxFUkFURURfMkRfQ0FOVkFTKQorICAgICAgICB2aXJ0dWFsIFBh
c3NSZWZQdHI8U2hhcmVkQ29udGV4dDNEPiBnZXRTaGFyZWRDb250ZXh0M0QoKSA9IDA7CisjZW5k
aWYKKwogICAgICAgICB2aXJ0dWFsIGJvb2wgc3VwcG9ydHNGdWxsc2NyZWVuRm9yTm9kZShjb25z
dCBOb2RlKikgeyByZXR1cm4gZmFsc2U7IH0KICAgICAgICAgdmlydHVhbCB2b2lkIGVudGVyRnVs
bHNjcmVlbkZvck5vZGUoTm9kZSopIHsgfQogICAgICAgICB2aXJ0dWFsIHZvaWQgZXhpdEZ1bGxz
Y3JlZW5Gb3JOb2RlKE5vZGUqKSB7IH0KZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvR3JhcGhpY3NDb250ZXh0LmggYi9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBo
aWNzQ29udGV4dC5oCmluZGV4IDkzZWY4OTAwNjJlZGE1Mjg5OWU0ZDMzZGQxMDkxYTJkMzJmNGQw
OGMuLjgwZDFlMDIwMTQ2MTUxNWFlOTA1MGZlYmM0Y2RkYmI2Nzg5OGFkMTEgMTAwNjQ0Ci0tLSBh
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0LmgKKysrIGIvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQuaApAQCAtMTIyLDE2ICsxMjIsMTcg
QEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgIGNvbnN0IGludCBjTWlzc3BlbGxpbmdMaW5lUGF0
dGVybkdhcFdpZHRoID0gMTsKIAogICAgIGNsYXNzIEFmZmluZVRyYW5zZm9ybTsKKyAgICBjbGFz
cyBDYW52YXNGcmFtZWJ1ZmZlcjsKICAgICBjbGFzcyBGb250OwogICAgIGNsYXNzIEdlbmVyYXRv
cjsKICAgICBjbGFzcyBHcmFkaWVudDsKLSAgICBjbGFzcyBHcmFwaGljc0NvbnRleHQzRDsKICAg
ICBjbGFzcyBHcmFwaGljc0NvbnRleHRQbGF0Zm9ybVByaXZhdGU7CiAgICAgY2xhc3MgR3JhcGhp
Y3NDb250ZXh0UHJpdmF0ZTsKICAgICBjbGFzcyBJbWFnZUJ1ZmZlcjsKICAgICBjbGFzcyBLVVJM
OwogICAgIGNsYXNzIFBhdGg7CiAgICAgY2xhc3MgUGF0dGVybjsKKyAgICBjbGFzcyBTaGFyZWRD
b250ZXh0M0Q7CiAgICAgY2xhc3MgVGV4dFJ1bjsKIAogICAgIC8vIFRoZXNlIGJpdHMgY2FuIGJl
IE9SZWQgdG9nZXRoZXIgZm9yIGEgdG90YWwgb2YgOCBwb3NzaWJsZSB0ZXh0IGRyYXdpbmcgbW9k
ZXMuCkBAIC00MTIsOCArNDEzLDEyIEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgcGF0
dGVybiBnZXRIYWlrdVN0cm9rZVN0eWxlKCk7CiAjZW5kaWYKIAotICAgICAgICB2b2lkIHNldEdy
YXBoaWNzQ29udGV4dDNEKEdyYXBoaWNzQ29udGV4dDNEKiwgY29uc3QgSW50U2l6ZSYpOworI2lm
IFBMQVRGT1JNKFNLSUEpCisgICAgICAgIHZvaWQgc2V0U2hhcmVkQ29udGV4dDNEKFNoYXJlZENv
bnRleHQzRCosIENhbnZhc0ZyYW1lYnVmZmVyKiwgY29uc3QgSW50U2l6ZSYpOwogICAgICAgICB2
b2lkIHN5bmNTb2Z0d2FyZUNhbnZhcygpOworICAgICAgICB1bnNpZ25lZCB0ZXh0dXJlSWRGb3JD
b21wb3NpdG9yKCkgY29uc3Q7CisgICAgICAgIHVuc2lnbmVkIHRleHR1cmVJZEZvckNhbnZhcygp
IGNvbnN0OworI2VuZGlmCiAKICAgICBwcml2YXRlOgogICAgICAgICB2b2lkIHNhdmVQbGF0Zm9y
bVN0YXRlKCk7CmRpZmYgLS1naXQgYS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNz
Q29udGV4dDNELmggYi9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dDNE
LmgKaW5kZXggYjU4MzgxMzg4NjY5OGVjYjU2MDU1MzFiZTdmNTZiMGEzOWQ2NTA2OS4uMDA5ZWZl
NWQ0YmFlY2JhNjQxYzQ5NmFiZTEwMGM3MDMxOGQ1OGYyMCAxMDA2NDQKLS0tIGEvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQzRC5oCisrKyBiL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0M0QuaApAQCAtNzUzLDYgKzc1MywxMCBAQCBwdWJs
aWM6CiAKICAgICBib29sIHN1cHBvcnRzQkdSQSgpOwogCisgICAgdW5zaWduZWQgY3JlYXRlQ29t
cG9zaXRvclRleHR1cmUodW5zaWduZWQgd2lkdGgsIHVuc2lnbmVkIGhlaWdodCk7CisgICAgdm9p
ZCBkZWxldGVDb21wb3NpdG9yVGV4dHVyZSh1bnNpZ25lZCBjb21wb3NpdG9yVGV4dHVyZSk7Cisg
ICAgdm9pZCBjb3B5VGV4dHVyZVRvQ29tcG9zaXRvcih1bnNpZ25lZCBzb3VyY2VUZXh0dXJlLCB1
bnNpZ25lZCBjb21wb3NpdG9yVGV4dHVyZSk7CisKICAgcHJpdmF0ZToKICAgICBHcmFwaGljc0Nv
bnRleHQzRChBdHRyaWJ1dGVzIGF0dHJzLCBIb3N0V2luZG93KiBob3N0V2luZG93KTsKIApkaWZm
IC0tZ2l0IGEvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0xheWVyLmggYi9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzTGF5ZXIuaAppbmRleCAwZjc0Y2Q1Y2IzMzg1
ZWU3YmI1YTY4ODAyYjdhZmMyOTc4N2ZmODBmLi41NTRhMWIwZTM0ZTRmMzg2MmM4YmI5NDJmM2Vj
NGIwY2ZhMmM4Yzg5IDEwMDY0NAotLS0gYS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBo
aWNzTGF5ZXIuaAorKysgYi9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzTGF5ZXIu
aApAQCAtODEsNiArODEsNyBAQCB0eXBlZGVmIHVuc2lnbmVkIExheWVyVHJlZUFzVGV4dEJlaGF2
aW9yOwogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKK2NsYXNzIENhbnZhc0ZyYW1lYnVmZmVyOwog
Y2xhc3MgRmxvYXRQb2ludDNEOwogY2xhc3MgR3JhcGhpY3NDb250ZXh0OwogY2xhc3MgSW1hZ2U7
CkBAIC0yOTgsNyArMjk5LDggQEAgcHVibGljOgogICAgIHZpcnR1YWwgdm9pZCBzZXRDb250ZW50
c1RvSW1hZ2UoSW1hZ2UqKSB7IH0KICAgICB2aXJ0dWFsIHZvaWQgc2V0Q29udGVudHNUb01lZGlh
KFBsYXRmb3JtTGF5ZXIqKSB7IH0gLy8gdmlkZW8gb3IgcGx1Zy1pbgogICAgIHZpcnR1YWwgdm9p
ZCBzZXRDb250ZW50c0JhY2tncm91bmRDb2xvcihjb25zdCBDb2xvciYpIHsgfQotICAgIHZpcnR1
YWwgdm9pZCBzZXRDb250ZW50c1RvQ2FudmFzKFBsYXRmb3JtTGF5ZXIqKSB7IH0KKyAgICB2aXJ0
dWFsIHZvaWQgc2V0Q29udGVudHNUb1dlYkdMKFBsYXRmb3JtTGF5ZXIqKSB7IH0KKyAgICB2aXJ0
dWFsIHZvaWQgc2V0Q29udGVudHNUb0NhbnZhczJEKENhbnZhc0ZyYW1lYnVmZmVyKikgeyB9CiAg
ICAgdmlydHVhbCBib29sIGhhc0NvbnRlbnRzTGF5ZXIoKSBjb25zdCB7IHJldHVybiBmYWxzZTsg
fQogCiAgICAgLy8gQ2FsbGJhY2sgZnJvbSB0aGUgdW5kZXJseWluZyBncmFwaGljcyBzeXN0ZW0g
dG8gZHJhdyBsYXllciBjb250ZW50cy4KZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY2hyb21pdW0vQ2FudmFzMkRMYXllckNocm9taXVtLmNwcCBiL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY2hyb21pdW0vQ2FudmFzMkRMYXllckNocm9taXVtLmNwcApuZXcgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
Li5kOTBiNmY4YjEzZjkzZWViNGUwM2ZjZmM1NDVkZDk2MWE2OWUxYTRhCi0tLSAvZGV2L251bGwK
KysrIGIvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9DYW52YXMyRExheWVyQ2hy
b21pdW0uY3BwCkBAIC0wLDAgKzEsODcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgR29v
Z2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucyBhcmUKKyAqIG1ldDoKKyAqCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICAgICog
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQor
ICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lcgorICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogZGlzdHJpYnV0aW9uLgorICogICAgICogTmVp
dGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworICogY29u
dHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJp
dmVkIGZyb20KKyAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVu
IHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09Q
WVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQg
VE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5U
IFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBM
QVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorICogTElN
SVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisKKyNpZiBVU0Uo
QUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCisKKyNpbmNsdWRlICJDYW52YXMyRExheWVyQ2hyb21p
dW0uaCIKKworI2luY2x1ZGUgIkNhbnZhc0ZyYW1lYnVmZmVyLmgiCisjaW5jbHVkZSAiUGxhdGZv
cm1Db250ZXh0U2tpYS5oIgorCisjaW5jbHVkZSA8R0xFUzIvZ2wyLmg+CisKK25hbWVzcGFjZSBX
ZWJDb3JlIHsKKworUGFzc1JlZlB0cjxDYW52YXMyRExheWVyQ2hyb21pdW0+IENhbnZhczJETGF5
ZXJDaHJvbWl1bTo6Y3JlYXRlKENhbnZhc0ZyYW1lYnVmZmVyKiBmcmFtZWJ1ZmZlciwgR3JhcGhp
Y3NMYXllckNocm9taXVtKiBvd25lcikKK3sKKyAgICByZXR1cm4gYWRvcHRSZWYobmV3IENhbnZh
czJETGF5ZXJDaHJvbWl1bShmcmFtZWJ1ZmZlciwgb3duZXIpKTsKK30KKworQ2FudmFzMkRMYXll
ckNocm9taXVtOjpDYW52YXMyRExheWVyQ2hyb21pdW0oQ2FudmFzRnJhbWVidWZmZXIqIGZyYW1l
YnVmZmVyLCBHcmFwaGljc0xheWVyQ2hyb21pdW0qIG93bmVyKQorICAgIDogQ2FudmFzTGF5ZXJD
aHJvbWl1bShvd25lcikKKyAgICAsIG1fZnJhbWVidWZmZXIoZnJhbWVidWZmZXIpCisgICAgLCBt
X3RleHR1cmVDaGFuZ2VkKHRydWUpCit7Cit9CisKK3ZvaWQgQ2FudmFzMkRMYXllckNocm9taXVt
Ojp1cGRhdGVDb250ZW50cygpCit7CisgICAgdW5zaWduZWQgdGV4dHVyZUlkID0gbV9mcmFtZWJ1
ZmZlci0+dGV4dHVyZUlkRm9yQ29tcG9zaXRvcigpOworICAgIGlmIChtX3RleHR1cmVDaGFuZ2Vk
KSB7CisgICAgICAgIGdsQmluZFRleHR1cmUoR0xfVEVYVFVSRV8yRCwgdGV4dHVyZUlkKTsKKyAg
ICAgICAgLy8gU2V0IHRoZSBtaW4tbWFnIGZpbHRlcnMgdG8gbGluZWFyIGFuZCB3cmFwIG1vZGVz
IHRvIEdMX0NMQU1QX1RPX0VER0UKKyAgICAgICAgLy8gdG8gZ2V0IGFyb3VuZCBOUE9UIHRleHR1
cmUgbGltaXRhdGlvbnMgb2YgR0xFUy4KKyAgICAgICAgZ2xUZXhQYXJhbWV0ZXJmKEdMX1RFWFRV
UkVfMkQsIEdMX1RFWFRVUkVfTUlOX0ZJTFRFUiwgR0xfTElORUFSKTsKKyAgICAgICAgZ2xUZXhQ
YXJhbWV0ZXJmKEdMX1RFWFRVUkVfMkQsIEdMX1RFWFRVUkVfTUFHX0ZJTFRFUiwgR0xfTElORUFS
KTsKKyAgICAgICAgZ2xUZXhQYXJhbWV0ZXJmKEdMX1RFWFRVUkVfMkQsIEdMX1RFWFRVUkVfV1JB
UF9TLCBHTF9DTEFNUF9UT19FREdFKTsKKyAgICAgICAgZ2xUZXhQYXJhbWV0ZXJmKEdMX1RFWFRV
UkVfMkQsIEdMX1RFWFRVUkVfV1JBUF9ULCBHTF9DTEFNUF9UT19FREdFKTsKKyAgICAgICAgbV90
ZXh0dXJlQ2hhbmdlZCA9IGZhbHNlOworICAgIH0KKyAgICAvLyBVcGRhdGUgdGhlIGNvbnRlbnRz
IG9mIHRoZSB0ZXh0dXJlIHVzZWQgYnkgdGhlIGNvbXBvc2l0b3IuCisgICAgaWYgKG1fY29udGVu
dHNEaXJ0eSkgeworICAgICAgICBtX2ZyYW1lYnVmZmVyLT5zd2FwQnVmZmVycygpOworICAgICAg
ICBtX2NvbnRlbnRzRGlydHkgPSBmYWxzZTsKKyAgICB9Cit9CisKK3ZvaWQgQ2FudmFzMkRMYXll
ckNocm9taXVtOjpzZXRDYW52YXNGcmFtZWJ1ZmZlcihDYW52YXNGcmFtZWJ1ZmZlciogZnJhbWVi
dWZmZXIpCit7CisgICAgbV9mcmFtZWJ1ZmZlciA9IGZyYW1lYnVmZmVyOworfQorCit1bnNpZ25l
ZCBDYW52YXMyRExheWVyQ2hyb21pdW06OnRleHR1cmVJZCgpCit7CisgICAgcmV0dXJuIG1fZnJh
bWVidWZmZXItPnRleHR1cmVJZEZvckNvbXBvc2l0b3IoKTsKK30KKworfQorI2VuZGlmIC8vIFVT
RShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2hyb21pdW0vQ2FudmFzMkRMYXllckNocm9taXVtLmggYi9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2Nocm9taXVtL0NhbnZhczJETGF5ZXJDaHJvbWl1bS5oCm5ldyBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAu
LjhmYWE1Y2FlYjcxMmVlMTgyZjA0YzVlZTEwMzM4ZWZlMDM2MDRlZWUKLS0tIC9kZXYvbnVsbAor
KysgYi9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0NhbnZhczJETGF5ZXJDaHJv
bWl1bS5oCkBAIC0wLDAgKzEsNjYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgR29vZ2xl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cyBhcmUKKyAqIG1ldDoKKyAqCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICAgICogUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICog
Y29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lcgorICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogZGlzdHJpYnV0aW9uLgorICogICAgICogTmVpdGhl
ciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworICogY29udHJp
YnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVk
IGZyb20KKyAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBl
cm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJ
R0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8s
IFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNI
QUxMIFRIRSBDT1BZUklHSFQKKyAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRF
RCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQor
ICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KKyAqLworCisKKyNpZm5kZWYgQ2FudmFzMkRMYXllckNocm9taXVtX2gK
KyNkZWZpbmUgQ2FudmFzMkRMYXllckNocm9taXVtX2gKKworI2lmIFVTRShBQ0NFTEVSQVRFRF9D
T01QT1NJVElORykKKworI2luY2x1ZGUgIkNhbnZhc0xheWVyQ2hyb21pdW0uaCIKKworbmFtZXNw
YWNlIFdlYkNvcmUgeworCitjbGFzcyBDYW52YXNGcmFtZWJ1ZmZlcjsKKworLy8gQSBsYXllciBj
b250YWluaW5nIGFuIGFjY2VsZXJhdGVkIDJkIGNhbnZhcworY2xhc3MgQ2FudmFzMkRMYXllckNo
cm9taXVtIDogcHVibGljIENhbnZhc0xheWVyQ2hyb21pdW0geworcHVibGljOgorICAgIHN0YXRp
YyBQYXNzUmVmUHRyPENhbnZhczJETGF5ZXJDaHJvbWl1bT4gY3JlYXRlKENhbnZhc0ZyYW1lYnVm
ZmVyKiwgR3JhcGhpY3NMYXllckNocm9taXVtKiBvd25lcik7CisgICAgdmlydHVhbCBib29sIGRy
YXdzQ29udGVudCgpIHsgcmV0dXJuIHRydWU7IH0KKyAgICB2aXJ0dWFsIHZvaWQgdXBkYXRlQ29u
dGVudHMoKTsKKworICAgIHZvaWQgc2V0Q2FudmFzRnJhbWVidWZmZXIoQ2FudmFzRnJhbWVidWZm
ZXIqKTsKKworcHJvdGVjdGVkOgorICAgIHZpcnR1YWwgdW5zaWduZWQgdGV4dHVyZUlkKCk7CisK
K3ByaXZhdGU6CisgICAgZXhwbGljaXQgQ2FudmFzMkRMYXllckNocm9taXVtKENhbnZhc0ZyYW1l
YnVmZmVyKiwgR3JhcGhpY3NMYXllckNocm9taXVtKiBvd25lcik7CisgICAgQ2FudmFzRnJhbWVi
dWZmZXIqIG1fZnJhbWVidWZmZXI7CisgICAgYm9vbCBtX3RleHR1cmVDaGFuZ2VkOworCisgICAg
c3RhdGljIHVuc2lnbmVkIG1fc2hhZGVyUHJvZ3JhbUlkOworfTsKKworfQorI2VuZGlmIC8vIFVT
RShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKKworI2VuZGlmCmRpZmYgLS1naXQgYS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0NhbnZhc0xheWVyQ2hyb21pdW0uY3BwIGIvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9DYW52YXNMYXllckNocm9taXVtLmNwcApp
bmRleCBiYmYwOTFjMmE2NzBkN2MzNmU5MjM4ZTFiOGNjMzUwYmEzODNlODEwLi4yMjg2OWQ3MDZh
ZTQ0MDdjNWVjZDg5MmFkMTVjMGNmY2UxMmMwYTAxIDEwMDY0NAotLS0gYS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2Nocm9taXVtL0NhbnZhc0xheWVyQ2hyb21pdW0uY3BwCisrKyBiL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vQ2FudmFzTGF5ZXJDaHJvbWl1bS5jcHAKQEAg
LTM0LDEyICszNCwxNCBAQAogCiAjaW5jbHVkZSAiQ2FudmFzTGF5ZXJDaHJvbWl1bS5oIgogCi0j
aW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0M0QuaCIKICNpbmNsdWRlICJMYXllclJlbmRlcmVyQ2hy
b21pdW0uaCIKKwogI2luY2x1ZGUgPEdMRVMyL2dsMi5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7
CiAKK3Vuc2lnbmVkIENhbnZhc0xheWVyQ2hyb21pdW06Om1fc2hhZGVyUHJvZ3JhbUlkID0gMDsK
KwogQ2FudmFzTGF5ZXJDaHJvbWl1bTo6U2hhcmVkVmFsdWVzOjpTaGFyZWRWYWx1ZXMoKQogICAg
IDogbV9jYW52YXNTaGFkZXJQcm9ncmFtKDApCiAgICAgLCBtX3NoYWRlclNhbXBsZXJMb2NhdGlv
bigtMSkKQEAgLTkzLDQ5ICs5NSwxMyBAQCBDYW52YXNMYXllckNocm9taXVtOjpTaGFyZWRWYWx1
ZXM6On5TaGFyZWRWYWx1ZXMoKQogICAgICAgICBHTEMoZ2xEZWxldGVQcm9ncmFtKG1fY2FudmFz
U2hhZGVyUHJvZ3JhbSkpOwogfQogCi1QYXNzUmVmUHRyPENhbnZhc0xheWVyQ2hyb21pdW0+IENh
bnZhc0xheWVyQ2hyb21pdW06OmNyZWF0ZShHcmFwaGljc0xheWVyQ2hyb21pdW0qIG93bmVyKQot
ewotICAgIHJldHVybiBhZG9wdFJlZihuZXcgQ2FudmFzTGF5ZXJDaHJvbWl1bShvd25lcikpOwot
fQotCiBDYW52YXNMYXllckNocm9taXVtOjpDYW52YXNMYXllckNocm9taXVtKEdyYXBoaWNzTGF5
ZXJDaHJvbWl1bSogb3duZXIpCiAgICAgOiBMYXllckNocm9taXVtKG93bmVyKQotICAgICwgbV9j
b250ZXh0KDApCi0gICAgLCBtX3RleHR1cmVJZCgwKQotICAgICwgbV90ZXh0dXJlQ2hhbmdlZChm
YWxzZSkKLXsKLX0KLQotdm9pZCBDYW52YXNMYXllckNocm9taXVtOjp1cGRhdGVDb250ZW50cygp
CiB7Ci0gICAgQVNTRVJUKG1fY29udGV4dCk7Ci0gICAgaWYgKG1fdGV4dHVyZUNoYW5nZWQpIHsK
LSAgICAgICAgZ2xCaW5kVGV4dHVyZShHTF9URVhUVVJFXzJELCBtX3RleHR1cmVJZCk7Ci0gICAg
ICAgIC8vIFNldCB0aGUgbWluLW1hZyBmaWx0ZXJzIHRvIGxpbmVhciBhbmQgd3JhcCBtb2RlcyB0
byBHTF9DTEFNUF9UT19FREdFCi0gICAgICAgIC8vIHRvIGdldCBhcm91bmQgTlBPVCB0ZXh0dXJl
IGxpbWl0YXRpb25zIG9mIEdMRVMuCi0gICAgICAgIGdsVGV4UGFyYW1ldGVyZihHTF9URVhUVVJF
XzJELCBHTF9URVhUVVJFX01JTl9GSUxURVIsIEdMX0xJTkVBUik7Ci0gICAgICAgIGdsVGV4UGFy
YW1ldGVyZihHTF9URVhUVVJFXzJELCBHTF9URVhUVVJFX01BR19GSUxURVIsIEdMX0xJTkVBUik7
Ci0gICAgICAgIGdsVGV4UGFyYW1ldGVyZihHTF9URVhUVVJFXzJELCBHTF9URVhUVVJFX1dSQVBf
UywgR0xfQ0xBTVBfVE9fRURHRSk7Ci0gICAgICAgIGdsVGV4UGFyYW1ldGVyZihHTF9URVhUVVJF
XzJELCBHTF9URVhUVVJFX1dSQVBfVCwgR0xfQ0xBTVBfVE9fRURHRSk7Ci0gICAgICAgIG1fdGV4
dHVyZUNoYW5nZWQgPSBmYWxzZTsKLSAgICB9Ci0gICAgLy8gVXBkYXRlIHRoZSBjb250ZW50cyBv
ZiB0aGUgdGV4dHVyZSB1c2VkIGJ5IHRoZSBjb21wb3NpdG9yLgotICAgIGlmIChtX2NvbnRlbnRz
RGlydHkpIHsKLSAgICAgICAgaWYgKG1fcHJlcGFyZVRleHR1cmVDYWxsYmFjaykKLSAgICAgICAg
ICAgIG1fcHJlcGFyZVRleHR1cmVDYWxsYmFjay0+d2lsbFByZXBhcmVUZXh0dXJlKCk7Ci0gICAg
ICAgIG1fY29udGV4dC0+cHJlcGFyZVRleHR1cmUoKTsKLSAgICAgICAgbV9jb250ZW50c0RpcnR5
ID0gZmFsc2U7Ci0gICAgfQogfQogCi12b2lkIENhbnZhc0xheWVyQ2hyb21pdW06OnNldENvbnRl
eHQoY29uc3QgR3JhcGhpY3NDb250ZXh0M0QqIGNvbnRleHQpCitDYW52YXNMYXllckNocm9taXVt
Ojp+Q2FudmFzTGF5ZXJDaHJvbWl1bSgpCiB7Ci0gICAgbV9jb250ZXh0ID0gY29uc3RfY2FzdDxH
cmFwaGljc0NvbnRleHQzRCo+KGNvbnRleHQpOwotCi0gICAgdW5zaWduZWQgaW50IHRleHR1cmVJ
ZCA9IG1fY29udGV4dC0+cGxhdGZvcm1UZXh0dXJlKCk7Ci0gICAgaWYgKHRleHR1cmVJZCAhPSBt
X3RleHR1cmVJZCkKLSAgICAgICAgbV90ZXh0dXJlQ2hhbmdlZCA9IHRydWU7Ci0gICAgbV90ZXh0
dXJlSWQgPSB0ZXh0dXJlSWQ7CiB9CiAKIHZvaWQgQ2FudmFzTGF5ZXJDaHJvbWl1bTo6ZHJhdygp
CkBAIC0xNDQsMTIgKzExMCwxMyBAQCB2b2lkIENhbnZhc0xheWVyQ2hyb21pdW06OmRyYXcoKQog
ICAgIGNvbnN0IENhbnZhc0xheWVyQ2hyb21pdW06OlNoYXJlZFZhbHVlcyogc3YgPSBsYXllclJl
bmRlcmVyKCktPmNhbnZhc0xheWVyU2hhcmVkVmFsdWVzKCk7CiAgICAgQVNTRVJUKHN2ICYmIHN2
LT5pbml0aWFsaXplZCgpKTsKICAgICBHTEMoZ2xBY3RpdmVUZXh0dXJlKEdMX1RFWFRVUkUwKSk7
Ci0gICAgR0xDKGdsQmluZFRleHR1cmUoR0xfVEVYVFVSRV8yRCwgbV90ZXh0dXJlSWQpKTsKKyAg
ICBHTEMoZ2xCaW5kVGV4dHVyZShHTF9URVhUVVJFXzJELCB0ZXh0dXJlSWQoKSkpOwogICAgIGxh
eWVyUmVuZGVyZXIoKS0+dXNlU2hhZGVyKHN2LT5jYW52YXNTaGFkZXJQcm9ncmFtKCkpOwogICAg
IEdMQyhnbFVuaWZvcm0xaShzdi0+c2hhZGVyU2FtcGxlckxvY2F0aW9uKCksIDApKTsKICAgICBk
cmF3VGV4dHVyZWRRdWFkKGxheWVyUmVuZGVyZXIoKS0+cHJvamVjdGlvbk1hdHJpeCgpLCBkcmF3
VHJhbnNmb3JtKCksCiAgICAgICAgICAgICAgICAgICAgICBib3VuZHMoKS53aWR0aCgpLCBib3Vu
ZHMoKS5oZWlnaHQoKSwgZHJhd09wYWNpdHkoKSwKICAgICAgICAgICAgICAgICAgICAgIHN2LT5z
aGFkZXJNYXRyaXhMb2NhdGlvbigpLCBzdi0+c2hhZGVyQWxwaGFMb2NhdGlvbigpKTsKKwogfQog
CiB9CmRpZmYgLS1naXQgYS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0NhbnZh
c0xheWVyQ2hyb21pdW0uaCBiL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vQ2Fu
dmFzTGF5ZXJDaHJvbWl1bS5oCmluZGV4IDA1M2VmZmZhMDFlMTQyODM4MTIxNDUzYzFhNGI4YTE5
NGI2ZmE0YzEuLmQ2ZGE2YWM0NGU5MTA3YWYxMDBlNTRkM2VjYWUzNjU1NjJkZTBkMmYgMTAwNjQ0
Ci0tLSBhL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vQ2FudmFzTGF5ZXJDaHJv
bWl1bS5oCisrKyBiL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vQ2FudmFzTGF5
ZXJDaHJvbWl1bS5oCkBAIC0zOCwxNyArMzgsMTMgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewog
Ci1jbGFzcyBHcmFwaGljc0NvbnRleHQzRDsKLQotLy8gQSBMYXllciBjb250YWluaW5nIGEgV2Vi
R0wgb3IgYWNjZWxlcmF0ZWQgMmQgY2FudmFzCisvLyBCYXNlIGNsYXNzIGZvciBXZWJHTCBhbmQg
YWNjZWxlcmF0ZWQgMmQgY2FudmFzZXMuCiBjbGFzcyBDYW52YXNMYXllckNocm9taXVtIDogcHVi
bGljIExheWVyQ2hyb21pdW0gewogcHVibGljOgotICAgIHN0YXRpYyBQYXNzUmVmUHRyPENhbnZh
c0xheWVyQ2hyb21pdW0+IGNyZWF0ZShHcmFwaGljc0xheWVyQ2hyb21pdW0qIG93bmVyID0gMCk7
Ci0gICAgdmlydHVhbCBib29sIGRyYXdzQ29udGVudCgpIHsgcmV0dXJuIG1fY29udGV4dDsgfQot
ICAgIHZpcnR1YWwgdm9pZCB1cGRhdGVDb250ZW50cygpOwotICAgIHZpcnR1YWwgdm9pZCBkcmF3
KCk7CisgICAgZXhwbGljaXQgQ2FudmFzTGF5ZXJDaHJvbWl1bShHcmFwaGljc0xheWVyQ2hyb21p
dW0qIG93bmVyKTsKKyAgICB2aXJ0dWFsIH5DYW52YXNMYXllckNocm9taXVtKCk7CiAKLSAgICB2
b2lkIHNldENvbnRleHQoY29uc3QgR3JhcGhpY3NDb250ZXh0M0QqIGNvbnRleHQpOworICAgIHZp
cnR1YWwgdm9pZCBkcmF3KCk7CiAKICAgICBjbGFzcyBTaGFyZWRWYWx1ZXMgewogICAgIHB1Ymxp
YzoKQEAgLTY5LDIxICs2NSwxNiBAQCBwdWJsaWM6CiAgICAgICAgIGJvb2wgbV9pbml0aWFsaXpl
ZDsKICAgICB9OwogCi0gICAgY2xhc3MgUHJlcGFyZVRleHR1cmVDYWxsYmFjayA6IHB1YmxpYyBO
b25jb3B5YWJsZSB7Ci0gICAgcHVibGljOgotICAgICAgICB2aXJ0dWFsIHZvaWQgd2lsbFByZXBh
cmVUZXh0dXJlKCkgPSAwOwotICAgIH07Ci0gICAgdm9pZCBzZXRQcmVwYXJlVGV4dHVyZUNhbGxi
YWNrKFBhc3NPd25QdHI8UHJlcGFyZVRleHR1cmVDYWxsYmFjaz4gY2FsbGJhY2spIHsgbV9wcmVw
YXJlVGV4dHVyZUNhbGxiYWNrID0gY2FsbGJhY2s7IH0KK3Byb3RlY3RlZDoKKyAgICB2aXJ0dWFs
IHVuc2lnbmVkIHRleHR1cmVJZCgpID0gMDsKIAogcHJpdmF0ZToKLSAgICBleHBsaWNpdCBDYW52
YXNMYXllckNocm9taXVtKEdyYXBoaWNzTGF5ZXJDaHJvbWl1bSogb3duZXIpOwotICAgIEdyYXBo
aWNzQ29udGV4dDNEKiBtX2NvbnRleHQ7Ci0gICAgdW5zaWduZWQgbV90ZXh0dXJlSWQ7CiAgICAg
Ym9vbCBtX3RleHR1cmVDaGFuZ2VkOwotICAgIE93blB0cjxQcmVwYXJlVGV4dHVyZUNhbGxiYWNr
PiBtX3ByZXBhcmVUZXh0dXJlQ2FsbGJhY2s7CisKKyAgICBzdGF0aWMgdW5zaWduZWQgbV9zaGFk
ZXJQcm9ncmFtSWQ7CiB9OwogCiB9CiAjZW5kaWYgLy8gVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lU
SU5HKQogCi0jZW5kaWYKKyNlbmRpZiAvLyBDYW52YXNMYXllckNocm9taXVtX2gKZGlmZiAtLWdp
dCBhL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vR0xFUzJDYW52YXMuY3BwIGIv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9HTEVTMkNhbnZhcy5jcHAKaW5kZXgg
ODJkNGMwYjAzM2ExNGY5MWU1NjZmN2I0ZWVhMDhiMDY2OTJlYmJkMy4uZTFkMTk2N2JmNGMwMjg3
MWM0ZjhlNzFjYWEyYTQwZGU1NDY4ZjY1MyAxMDA2NDQKLS0tIGEvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jaHJvbWl1bS9HTEVTMkNhbnZhcy5jcHAKKysrIGIvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jaHJvbWl1bS9HTEVTMkNhbnZhcy5jcHAKQEAgLTMyLDEwICszMiwxMiBAQAogCiAj
aW5jbHVkZSAiR0xFUzJDYW52YXMuaCIKIAorI2luY2x1ZGUgIkNhbnZhc0ZyYW1lYnVmZmVyLmgi
CiAjaW5jbHVkZSAiRmxvYXRSZWN0LmgiCiAjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0M0QuaCIK
ICNpbmNsdWRlICJJbnRSZWN0LmgiCiAjaW5jbHVkZSAiUGxhdGZvcm1TdHJpbmcuaCIKKyNpbmNs
dWRlICJTaGFyZWRDb250ZXh0M0QuaCIKICNpbmNsdWRlICJTb2xpZEZpbGxTaGFkZXIuaCIKICNp
bmNsdWRlICJUZXhTaGFkZXIuaCIKICNpbmNsdWRlICJUZXh0dXJlLmgiCkBAIC02MSwzNyArNjMs
NTAgQEAgc3RydWN0IEdMRVMyQ2FudmFzOjpTdGF0ZSB7CiAgICAgQWZmaW5lVHJhbnNmb3JtIG1f
Y3RtOwogfTsKIAotR0xFUzJDYW52YXM6OkdMRVMyQ2FudmFzKEdyYXBoaWNzQ29udGV4dDNEKiBj
b250ZXh0LCBjb25zdCBJbnRTaXplJiBzaXplKQotICAgIDogbV9jb250ZXh0KGNvbnRleHQpCitH
TEVTMkNhbnZhczo6R0xFUzJDYW52YXMoU2hhcmVkQ29udGV4dDNEKiBjb250ZXh0LCBDYW52YXNG
cmFtZWJ1ZmZlciogZnJhbWVidWZmZXIsIGNvbnN0IEludFNpemUmIHNpemUpCisgICAgOiBtX3Np
emUoc2l6ZSkKKyAgICAsIG1fY29udGV4dChjb250ZXh0KQorICAgICwgbV9mcmFtZWJ1ZmZlcihm
cmFtZWJ1ZmZlcikKICAgICAsIG1fc3RhdGUoMCkKLSAgICAsIG1fcXVhZFZlcnRpY2VzKDApCi0g
ICAgLCBtX3NvbGlkRmlsbFNoYWRlcihTb2xpZEZpbGxTaGFkZXI6OmNyZWF0ZShjb250ZXh0KSkK
LSAgICAsIG1fdGV4U2hhZGVyKFRleFNoYWRlcjo6Y3JlYXRlKGNvbnRleHQpKQogewogICAgIG1f
ZmxpcE1hdHJpeC50cmFuc2xhdGUoLTEuMGYsIDEuMGYpOwogICAgIG1fZmxpcE1hdHJpeC5zY2Fs
ZSgyLjBmIC8gc2l6ZS53aWR0aCgpLCAtMi4wZiAvIHNpemUuaGVpZ2h0KCkpOwogCi0gICAgbV9j
b250ZXh0LT5yZXNoYXBlKHNpemUud2lkdGgoKSwgc2l6ZS5oZWlnaHQoKSk7Ci0gICAgbV9jb250
ZXh0LT52aWV3cG9ydCgwLCAwLCBzaXplLndpZHRoKCksIHNpemUuaGVpZ2h0KCkpOwotCiAgICAg
bV9zdGF0ZVN0YWNrLmFwcGVuZChTdGF0ZSgpKTsKICAgICBtX3N0YXRlID0gJm1fc3RhdGVTdGFj
ay5sYXN0KCk7Ci0KLSAgICAvLyBGb3JjZSB0aGUgc291cmNlIG92ZXIgY29tcG9zaXRlIG1vZGUg
dG8gYmUgYXBwbGllZC4KLSAgICBtX2xhc3RDb21wb3NpdGVPcCA9IENvbXBvc2l0ZUNsZWFyOwot
ICAgIGFwcGx5Q29tcG9zaXRlT3BlcmF0b3IoQ29tcG9zaXRlU291cmNlT3Zlcik7CiB9CiAKIEdM
RVMyQ2FudmFzOjp+R0xFUzJDYW52YXMoKQogewotICAgIG1fY29udGV4dC0+ZGVsZXRlQnVmZmVy
KG1fcXVhZFZlcnRpY2VzKTsKK30KKwordm9pZCBHTEVTMkNhbnZhczo6c3dhcEJ1ZmZlcnMoKQor
eworICAgIG1fZnJhbWVidWZmZXItPnN3YXBCdWZmZXJzKCk7Cit9CisKK3ZvaWQgR0xFUzJDYW52
YXM6OmJpbmRGcmFtZWJ1ZmZlcigpCit7CisgICAgbV9mcmFtZWJ1ZmZlci0+YmluZCgpOworfQor
Cit1bnNpZ25lZCBHTEVTMkNhbnZhczo6dGV4dHVyZUlkRm9yQ29tcG9zaXRvcigpIGNvbnN0Cit7
CisgICAgcmV0dXJuIG1fZnJhbWVidWZmZXItPnRleHR1cmVJZEZvckNvbXBvc2l0b3IoKTsKK30K
KwordW5zaWduZWQgR0xFUzJDYW52YXM6OnRleHR1cmVJZEZvckNhbnZhcygpIGNvbnN0Cit7Cisg
ICAgcmV0dXJuIG1fZnJhbWVidWZmZXItPnRleHR1cmVJZEZvckNhbnZhcygpOwogfQogCiB2b2lk
IEdMRVMyQ2FudmFzOjpjbGVhclJlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0KQogeworICAgIGJp
bmRGcmFtZWJ1ZmZlcigpOwogICAgIGlmIChtX3N0YXRlLT5tX2N0bS5pc0lkZW50aXR5KCkpIHsK
LSAgICAgICAgbV9jb250ZXh0LT5zY2lzc29yKHJlY3QueCgpLCByZWN0LnkoKSwgcmVjdC53aWR0
aCgpLCByZWN0LmhlaWdodCgpKTsKKyAgICAgICAgbV9jb250ZXh0LT5zY2lzc29yKHJlY3QpOwog
ICAgICAgICBtX2NvbnRleHQtPmVuYWJsZShHcmFwaGljc0NvbnRleHQzRDo6U0NJU1NPUl9URVNU
KTsKKyAgICAgICAgbV9jb250ZXh0LT5jbGVhckNvbG9yKENvbG9yKFJHQkEzMigwKSkpOwogICAg
ICAgICBtX2NvbnRleHQtPmNsZWFyKEdyYXBoaWNzQ29udGV4dDNEOjpDT0xPUl9CVUZGRVJfQklU
KTsKICAgICAgICAgbV9jb250ZXh0LT5kaXNhYmxlKEdyYXBoaWNzQ29udGV4dDNEOjpTQ0lTU09S
X1RFU1QpOwogICAgIH0gZWxzZSB7CkBAIC0xMDQsMTYgKzExOSwxNyBAQCB2b2lkIEdMRVMyQ2Fu
dmFzOjpjbGVhclJlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0KQogCiB2b2lkIEdMRVMyQ2FudmFz
OjpmaWxsUmVjdChjb25zdCBGbG9hdFJlY3QmIHJlY3QsIGNvbnN0IENvbG9yJiBjb2xvciwgQ29s
b3JTcGFjZSBjb2xvclNwYWNlKQogewotICAgIGFwcGx5Q29tcG9zaXRlT3BlcmF0b3IobV9zdGF0
ZS0+bV9jb21wb3NpdGVPcCk7Ci0KLSAgICBtX2NvbnRleHQtPmJpbmRCdWZmZXIoR3JhcGhpY3ND
b250ZXh0M0Q6OkFSUkFZX0JVRkZFUiwgZ2V0UXVhZFZlcnRpY2VzKCkpOworICAgIG1fY29udGV4
dC0+YXBwbHlDb21wb3NpdGVPcGVyYXRvcihtX3N0YXRlLT5tX2NvbXBvc2l0ZU9wKTsKKyAgICBt
X2NvbnRleHQtPnVzZVF1YWRWZXJ0aWNlcygpOwogCiAgICAgQWZmaW5lVHJhbnNmb3JtIG1hdHJp
eChtX2ZsaXBNYXRyaXgpOwogICAgIG1hdHJpeC5tdWx0TGVmdChtX3N0YXRlLT5tX2N0bSk7CiAg
ICAgbWF0cml4LnRyYW5zbGF0ZShyZWN0LngoKSwgcmVjdC55KCkpOwogICAgIG1hdHJpeC5zY2Fs
ZShyZWN0LndpZHRoKCksIHJlY3QuaGVpZ2h0KCkpOwotICAgIG1fc29saWRGaWxsU2hhZGVyLT51
c2UobWF0cml4LCBjb2xvcik7CiAKKyAgICBtX2NvbnRleHQtPnVzZUZpbGxTb2xpZFByb2dyYW0o
Y29sb3IsIG1hdHJpeCk7CisKKyAgICBiaW5kRnJhbWVidWZmZXIoKTsKICAgICBtX2NvbnRleHQt
PmRyYXdBcnJheXMoR3JhcGhpY3NDb250ZXh0M0Q6OlRSSUFOR0xFX1NUUklQLCAwLCA0KTsKIH0K
IApAQCAtMTY1LDIxICsxODEsMzMgQEAgdm9pZCBHTEVTMkNhbnZhczo6cmVzdG9yZSgpCiAgICAg
bV9zdGF0ZSA9ICZtX3N0YXRlU3RhY2subGFzdCgpOwogfQogCit2b2lkIEdMRVMyQ2FudmFzOjpk
cmF3VGV4dHVyZWRSZWN0KHVuc2lnbmVkIHRleHR1cmUsIGNvbnN0IEludFNpemUmIHRleHR1cmVT
aXplLCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsIGNvbnN0IEZsb2F0UmVjdCYgZHN0UmVjdCwg
Q29sb3JTcGFjZSBjb2xvclNwYWNlLCBDb21wb3NpdGVPcGVyYXRvciBjb21wb3NpdGVPcCkKK3sK
KyAgICBtX2NvbnRleHQtPmFwcGx5Q29tcG9zaXRlT3BlcmF0b3IoY29tcG9zaXRlT3ApOworCisg
ICAgbV9jb250ZXh0LT51c2VRdWFkVmVydGljZXMoKTsKKyAgICBtX2NvbnRleHQtPnNldEFjdGl2
ZVRleHR1cmUoR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkUwKTsKKworICAgIG1fY29udGV4dC0+
YmluZFRleHR1cmUoR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQsIHRleHR1cmUpOworCisg
ICAgZHJhd1F1YWQodGV4dHVyZVNpemUsIHNyY1JlY3QsIGRzdFJlY3QsIG1fc3RhdGUtPm1fY3Rt
LCBtX3N0YXRlLT5tX2FscGhhKTsKK30KKwogdm9pZCBHTEVTMkNhbnZhczo6ZHJhd1RleHR1cmVk
UmVjdChUZXh0dXJlKiB0ZXh0dXJlLCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsIGNvbnN0IEZs
b2F0UmVjdCYgZHN0UmVjdCwgQ29sb3JTcGFjZSBjb2xvclNwYWNlLCBDb21wb3NpdGVPcGVyYXRv
ciBjb21wb3NpdGVPcCkKIHsKICAgICBkcmF3VGV4dHVyZWRSZWN0KHRleHR1cmUsIHNyY1JlY3Qs
IGRzdFJlY3QsIG1fc3RhdGUtPm1fY3RtLCBtX3N0YXRlLT5tX2FscGhhLCBjb2xvclNwYWNlLCBj
b21wb3NpdGVPcCk7CiB9CiAKKwogdm9pZCBHTEVTMkNhbnZhczo6ZHJhd1RleHR1cmVkUmVjdChU
ZXh0dXJlKiB0ZXh0dXJlLCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsIGNvbnN0IEZsb2F0UmVj
dCYgZHN0UmVjdCwgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiB0cmFuc2Zvcm0sIGZsb2F0IGFscGhh
LCBDb2xvclNwYWNlIGNvbG9yU3BhY2UsIENvbXBvc2l0ZU9wZXJhdG9yIGNvbXBvc2l0ZU9wKQog
ewotICAgIGFwcGx5Q29tcG9zaXRlT3BlcmF0b3IoY29tcG9zaXRlT3ApOwotCi0gICAgbV9jb250
ZXh0LT5iaW5kQnVmZmVyKEdyYXBoaWNzQ29udGV4dDNEOjpBUlJBWV9CVUZGRVIsIGdldFF1YWRW
ZXJ0aWNlcygpKTsKLSAgICBjaGVja0dMRXJyb3IoImdsQmluZEJ1ZmZlciIpOwotCisgICAgbV9j
b250ZXh0LT5hcHBseUNvbXBvc2l0ZU9wZXJhdG9yKGNvbXBvc2l0ZU9wKTsKICAgICBjb25zdCBU
aWxpbmdEYXRhJiB0aWxlcyA9IHRleHR1cmUtPnRpbGVzKCk7CiAgICAgSW50UmVjdCB0aWxlSWR4
UmVjdCA9IHRpbGVzLm92ZXJsYXBwZWRUaWxlSW5kaWNlcyhzcmNSZWN0KTsKIAorICAgIG1fY29u
dGV4dC0+dXNlUXVhZFZlcnRpY2VzKCk7CisgICAgbV9jb250ZXh0LT5zZXRBY3RpdmVUZXh0dXJl
KEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFMCk7CisKICAgICBmb3IgKGludCB5ID0gdGlsZUlk
eFJlY3QueSgpOyB5IDw9IHRpbGVJZHhSZWN0LmJvdHRvbSgpOyB5KyspIHsKICAgICAgICAgZm9y
IChpbnQgeCA9IHRpbGVJZHhSZWN0LngoKTsgeCA8PSB0aWxlSWR4UmVjdC5yaWdodCgpOyB4Kysp
CiAgICAgICAgICAgICBkcmF3VGV4dHVyZWRSZWN0VGlsZSh0ZXh0dXJlLCB0aWxlcy50aWxlSW5k
ZXgoeCwgeSksIHNyY1JlY3QsIGRzdFJlY3QsIHRyYW5zZm9ybSwgYWxwaGEpOwpAQCAtMTkzLDcg
KzIyMSw2IEBAIHZvaWQgR0xFUzJDYW52YXM6OmRyYXdUZXh0dXJlZFJlY3RUaWxlKFRleHR1cmUq
IHRleHR1cmUsIGludCB0aWxlLCBjb25zdCBGbG9hdFJlCiAKICAgICBjb25zdCBUaWxpbmdEYXRh
JiB0aWxlcyA9IHRleHR1cmUtPnRpbGVzKCk7CiAKLSAgICBtX2NvbnRleHQtPmFjdGl2ZVRleHR1
cmUoR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkUwKTsKICAgICB0ZXh0dXJlLT5iaW5kVGlsZSh0
aWxlKTsKIAogICAgIEZsb2F0UmVjdCBzcmNSZWN0Q2xpcHBlZEluVGlsZVNwYWNlOwpAQCAtMjAy
LDE4ICsyMjksMjQgQEAgdm9pZCBHTEVTMkNhbnZhczo6ZHJhd1RleHR1cmVkUmVjdFRpbGUoVGV4
dHVyZSogdGV4dHVyZSwgaW50IHRpbGUsIGNvbnN0IEZsb2F0UmUKIAogICAgIEludFJlY3QgdGls
ZUJvdW5kc1dpdGhCb3JkZXIgPSB0aWxlcy50aWxlQm91bmRzV2l0aEJvcmRlcih0aWxlKTsKIAor
ICAgIGRyYXdRdWFkKEludFNpemUodGlsZUJvdW5kc1dpdGhCb3JkZXIud2lkdGgoKSwgdGlsZUJv
dW5kc1dpdGhCb3JkZXIuaGVpZ2h0KCkpLCBzcmNSZWN0Q2xpcHBlZEluVGlsZVNwYWNlLCBkc3RS
ZWN0SW50ZXJzZWN0ZWQsIHRyYW5zZm9ybSwgYWxwaGEpOworfQorCit2b2lkIEdMRVMyQ2FudmFz
OjpkcmF3UXVhZChjb25zdCBJbnRTaXplJiB0ZXh0dXJlU2l6ZSwgY29uc3QgRmxvYXRSZWN0JiBz
cmNSZWN0LCBjb25zdCBGbG9hdFJlY3QmIGRzdFJlY3QsIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYg
dHJhbnNmb3JtLCBmbG9hdCBhbHBoYSkKK3sKICAgICBBZmZpbmVUcmFuc2Zvcm0gbWF0cml4KG1f
ZmxpcE1hdHJpeCk7CiAgICAgbWF0cml4Lm11bHRMZWZ0KHRyYW5zZm9ybSk7Ci0gICAgbWF0cml4
LnRyYW5zbGF0ZShkc3RSZWN0SW50ZXJzZWN0ZWQueCgpLCBkc3RSZWN0SW50ZXJzZWN0ZWQueSgp
KTsKLSAgICBtYXRyaXguc2NhbGUoZHN0UmVjdEludGVyc2VjdGVkLndpZHRoKCksIGRzdFJlY3RJ
bnRlcnNlY3RlZC5oZWlnaHQoKSk7CisgICAgbWF0cml4LnRyYW5zbGF0ZShkc3RSZWN0LngoKSwg
ZHN0UmVjdC55KCkpOworICAgIG1hdHJpeC5zY2FsZShkc3RSZWN0LndpZHRoKCksIGRzdFJlY3Qu
aGVpZ2h0KCkpOwogCiAgICAgQWZmaW5lVHJhbnNmb3JtIHRleE1hdHJpeDsKLSAgICB0ZXhNYXRy
aXguc2NhbGUoMS4wZiAvIHRpbGVCb3VuZHNXaXRoQm9yZGVyLndpZHRoKCksIDEuMGYgLyB0aWxl
Qm91bmRzV2l0aEJvcmRlci5oZWlnaHQoKSk7Ci0gICAgdGV4TWF0cml4LnRyYW5zbGF0ZShzcmNS
ZWN0Q2xpcHBlZEluVGlsZVNwYWNlLngoKSwgc3JjUmVjdENsaXBwZWRJblRpbGVTcGFjZS55KCkp
OwotICAgIHRleE1hdHJpeC5zY2FsZShzcmNSZWN0Q2xpcHBlZEluVGlsZVNwYWNlLndpZHRoKCks
IHNyY1JlY3RDbGlwcGVkSW5UaWxlU3BhY2UuaGVpZ2h0KCkpOworICAgIHRleE1hdHJpeC5zY2Fs
ZSgxLjBmIC8gdGV4dHVyZVNpemUud2lkdGgoKSwgMS4wZiAvIHRleHR1cmVTaXplLmhlaWdodCgp
KTsKKyAgICB0ZXhNYXRyaXgudHJhbnNsYXRlKHNyY1JlY3QueCgpLCBzcmNSZWN0LnkoKSk7Cisg
ICAgdGV4TWF0cml4LnNjYWxlKHNyY1JlY3Qud2lkdGgoKSwgc3JjUmVjdC5oZWlnaHQoKSk7CiAK
LSAgICBtX3RleFNoYWRlci0+dXNlKG1hdHJpeCwgdGV4TWF0cml4LCAwLCBhbHBoYSk7CisgICAg
YmluZEZyYW1lYnVmZmVyKCk7CiAKKyAgICBtX2NvbnRleHQtPnVzZVRleHR1cmVQcm9ncmFtKGFs
cGhhLCBtYXRyaXgsIHRleE1hdHJpeCk7CiAgICAgbV9jb250ZXh0LT5kcmF3QXJyYXlzKEdyYXBo
aWNzQ29udGV4dDNEOjpUUklBTkdMRV9TVFJJUCwgMCwgNCk7CiAgICAgY2hlY2tHTEVycm9yKCJn
bERyYXdBcnJheXMiKTsKIH0KQEAgLTIyMyw5OCArMjU2LDE0IEBAIHZvaWQgR0xFUzJDYW52YXM6
OnNldENvbXBvc2l0ZU9wZXJhdGlvbihDb21wb3NpdGVPcGVyYXRvciBvcCkKICAgICBtX3N0YXRl
LT5tX2NvbXBvc2l0ZU9wID0gb3A7CiB9CiAKLXZvaWQgR0xFUzJDYW52YXM6OmFwcGx5Q29tcG9z
aXRlT3BlcmF0b3IoQ29tcG9zaXRlT3BlcmF0b3Igb3ApCi17Ci0gICAgaWYgKG9wID09IG1fbGFz
dENvbXBvc2l0ZU9wKQotICAgICAgICByZXR1cm47Ci0KLSAgICBzd2l0Y2ggKG9wKSB7Ci0gICAg
Y2FzZSBDb21wb3NpdGVDbGVhcjoKLSAgICAgICAgbV9jb250ZXh0LT5lbmFibGUoR3JhcGhpY3ND
b250ZXh0M0Q6OkJMRU5EKTsKLSAgICAgICAgbV9jb250ZXh0LT5ibGVuZEZ1bmMoR3JhcGhpY3ND
b250ZXh0M0Q6OlpFUk8sIEdyYXBoaWNzQ29udGV4dDNEOjpaRVJPKTsKLSAgICAgICAgYnJlYWs7
Ci0gICAgY2FzZSBDb21wb3NpdGVDb3B5OgotICAgICAgICBtX2NvbnRleHQtPmRpc2FibGUoR3Jh
cGhpY3NDb250ZXh0M0Q6OkJMRU5EKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBDb21wb3Np
dGVTb3VyY2VPdmVyOgotICAgICAgICBtX2NvbnRleHQtPmVuYWJsZShHcmFwaGljc0NvbnRleHQz
RDo6QkxFTkQpOwotICAgICAgICBtX2NvbnRleHQtPmJsZW5kRnVuYyhHcmFwaGljc0NvbnRleHQz
RDo6T05FLCBHcmFwaGljc0NvbnRleHQzRDo6T05FX01JTlVTX1NSQ19BTFBIQSk7Ci0gICAgICAg
IGJyZWFrOwotICAgIGNhc2UgQ29tcG9zaXRlU291cmNlSW46Ci0gICAgICAgIG1fY29udGV4dC0+
ZW5hYmxlKEdyYXBoaWNzQ29udGV4dDNEOjpCTEVORCk7Ci0gICAgICAgIG1fY29udGV4dC0+Ymxl
bmRGdW5jKEdyYXBoaWNzQ29udGV4dDNEOjpEU1RfQUxQSEEsIEdyYXBoaWNzQ29udGV4dDNEOjpa
RVJPKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBDb21wb3NpdGVTb3VyY2VPdXQ6Ci0gICAg
ICAgIG1fY29udGV4dC0+ZW5hYmxlKEdyYXBoaWNzQ29udGV4dDNEOjpCTEVORCk7Ci0gICAgICAg
IG1fY29udGV4dC0+YmxlbmRGdW5jKEdyYXBoaWNzQ29udGV4dDNEOjpPTkVfTUlOVVNfRFNUX0FM
UEhBLCBHcmFwaGljc0NvbnRleHQzRDo6WkVSTyk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2Ug
Q29tcG9zaXRlU291cmNlQXRvcDoKLSAgICAgICAgbV9jb250ZXh0LT5lbmFibGUoR3JhcGhpY3ND
b250ZXh0M0Q6OkJMRU5EKTsKLSAgICAgICAgbV9jb250ZXh0LT5ibGVuZEZ1bmMoR3JhcGhpY3ND
b250ZXh0M0Q6OkRTVF9BTFBIQSwgR3JhcGhpY3NDb250ZXh0M0Q6Ok9ORV9NSU5VU19TUkNfQUxQ
SEEpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIENvbXBvc2l0ZURlc3RpbmF0aW9uT3ZlcjoK
LSAgICAgICAgbV9jb250ZXh0LT5lbmFibGUoR3JhcGhpY3NDb250ZXh0M0Q6OkJMRU5EKTsKLSAg
ICAgICAgbV9jb250ZXh0LT5ibGVuZEZ1bmMoR3JhcGhpY3NDb250ZXh0M0Q6Ok9ORV9NSU5VU19E
U1RfQUxQSEEsIEdyYXBoaWNzQ29udGV4dDNEOjpPTkUpOwotICAgICAgICBicmVhazsKLSAgICBj
YXNlIENvbXBvc2l0ZURlc3RpbmF0aW9uSW46Ci0gICAgICAgIG1fY29udGV4dC0+ZW5hYmxlKEdy
YXBoaWNzQ29udGV4dDNEOjpCTEVORCk7Ci0gICAgICAgIG1fY29udGV4dC0+YmxlbmRGdW5jKEdy
YXBoaWNzQ29udGV4dDNEOjpaRVJPLCBHcmFwaGljc0NvbnRleHQzRDo6U1JDX0FMUEhBKTsKLSAg
ICAgICAgYnJlYWs7Ci0gICAgY2FzZSBDb21wb3NpdGVEZXN0aW5hdGlvbk91dDoKLSAgICAgICAg
bV9jb250ZXh0LT5lbmFibGUoR3JhcGhpY3NDb250ZXh0M0Q6OkJMRU5EKTsKLSAgICAgICAgbV9j
b250ZXh0LT5ibGVuZEZ1bmMoR3JhcGhpY3NDb250ZXh0M0Q6OlpFUk8sIEdyYXBoaWNzQ29udGV4
dDNEOjpPTkVfTUlOVVNfU1JDX0FMUEhBKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBDb21w
b3NpdGVEZXN0aW5hdGlvbkF0b3A6Ci0gICAgICAgIG1fY29udGV4dC0+ZW5hYmxlKEdyYXBoaWNz
Q29udGV4dDNEOjpCTEVORCk7Ci0gICAgICAgIG1fY29udGV4dC0+YmxlbmRGdW5jKEdyYXBoaWNz
Q29udGV4dDNEOjpPTkVfTUlOVVNfRFNUX0FMUEhBLCBHcmFwaGljc0NvbnRleHQzRDo6U1JDX0FM
UEhBKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBDb21wb3NpdGVYT1I6Ci0gICAgICAgIG1f
Y29udGV4dC0+ZW5hYmxlKEdyYXBoaWNzQ29udGV4dDNEOjpCTEVORCk7Ci0gICAgICAgIG1fY29u
dGV4dC0+YmxlbmRGdW5jKEdyYXBoaWNzQ29udGV4dDNEOjpPTkVfTUlOVVNfRFNUX0FMUEhBLCBH
cmFwaGljc0NvbnRleHQzRDo6T05FX01JTlVTX1NSQ19BTFBIQSk7Ci0gICAgICAgIGJyZWFrOwot
ICAgIGNhc2UgQ29tcG9zaXRlUGx1c0RhcmtlcjoKLSAgICBjYXNlIENvbXBvc2l0ZUhpZ2hsaWdo
dDoKLSAgICAgICAgLy8gdW5zdXBwb3J0ZWQKLSAgICAgICAgbV9jb250ZXh0LT5kaXNhYmxlKEdy
YXBoaWNzQ29udGV4dDNEOjpCTEVORCk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgQ29tcG9z
aXRlUGx1c0xpZ2h0ZXI6Ci0gICAgICAgIG1fY29udGV4dC0+ZW5hYmxlKEdyYXBoaWNzQ29udGV4
dDNEOjpCTEVORCk7Ci0gICAgICAgIG1fY29udGV4dC0+YmxlbmRGdW5jKEdyYXBoaWNzQ29udGV4
dDNEOjpPTkUsIEdyYXBoaWNzQ29udGV4dDNEOjpPTkUpOwotICAgICAgICBicmVhazsKLSAgICB9
Ci0gICAgbV9sYXN0Q29tcG9zaXRlT3AgPSBvcDsKLX0KLQotdW5zaWduZWQgR0xFUzJDYW52YXM6
OmdldFF1YWRWZXJ0aWNlcygpCi17Ci0gICAgaWYgKCFtX3F1YWRWZXJ0aWNlcykgewotICAgICAg
ICBmbG9hdCB2ZXJ0aWNlc1tdID0geyAwLjBmLCAwLjBmLCAxLjBmLAotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAxLjBmLCAwLjBmLCAxLjBmLAotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAwLjBmLCAxLjBmLCAxLjBmLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxLjBm
LCAxLjBmLCAxLjBmIH07Ci0gICAgICAgIG1fcXVhZFZlcnRpY2VzID0gbV9jb250ZXh0LT5jcmVh
dGVCdWZmZXIoKTsKLSAgICAgICAgbV9jb250ZXh0LT5iaW5kQnVmZmVyKEdyYXBoaWNzQ29udGV4
dDNEOjpBUlJBWV9CVUZGRVIsIG1fcXVhZFZlcnRpY2VzKTsKLSAgICAgICAgbV9jb250ZXh0LT5i
dWZmZXJEYXRhKEdyYXBoaWNzQ29udGV4dDNEOjpBUlJBWV9CVUZGRVIsIHNpemVvZih2ZXJ0aWNl
cyksIHZlcnRpY2VzLCBHcmFwaGljc0NvbnRleHQzRDo6U1RBVElDX0RSQVcpOwotICAgIH0KLSAg
ICByZXR1cm4gbV9xdWFkVmVydGljZXM7Ci19Ci0KLVRleHR1cmUqIEdMRVMyQ2FudmFzOjpjcmVh
dGVUZXh0dXJlKE5hdGl2ZUltYWdlUHRyIHB0ciwgVGV4dHVyZTo6Rm9ybWF0IGZvcm1hdCwgaW50
IHdpZHRoLCBpbnQgaGVpZ2h0KQorUGFzc1JlZlB0cjxUZXh0dXJlPiBHTEVTMkNhbnZhczo6Y3Jl
YXRlVGV4dHVyZShOYXRpdmVJbWFnZVB0ciBwdHIsIFRleHR1cmU6OkZvcm1hdCBmb3JtYXQsIGlu
dCB3aWR0aCwgaW50IGhlaWdodCkKIHsKLSAgICBQYXNzUmVmUHRyPFRleHR1cmU+IHRleHR1cmUg
PSBtX3RleHR1cmVzLmdldChwdHIpOwotICAgIGlmICh0ZXh0dXJlKQotICAgICAgICByZXR1cm4g
dGV4dHVyZS5nZXQoKTsKLQotICAgIHRleHR1cmUgPSBUZXh0dXJlOjpjcmVhdGUobV9jb250ZXh0
LCBmb3JtYXQsIHdpZHRoLCBoZWlnaHQpOwotICAgIFRleHR1cmUqIHQgPSB0ZXh0dXJlLmdldCgp
OwotICAgIG1fdGV4dHVyZXMuc2V0KHB0ciwgdGV4dHVyZSk7Ci0gICAgcmV0dXJuIHQ7CisgICAg
cmV0dXJuIG1fY29udGV4dC0+Y3JlYXRlVGV4dHVyZShwdHIsIGZvcm1hdCwgd2lkdGgsIGhlaWdo
dCk7CiB9CiAKLVRleHR1cmUqIEdMRVMyQ2FudmFzOjpnZXRUZXh0dXJlKE5hdGl2ZUltYWdlUHRy
IHB0cikKK1Bhc3NSZWZQdHI8VGV4dHVyZT4gR0xFUzJDYW52YXM6OmdldFRleHR1cmUoTmF0aXZl
SW1hZ2VQdHIgcHRyKQogewotICAgIFBhc3NSZWZQdHI8VGV4dHVyZT4gdGV4dHVyZSA9IG1fdGV4
dHVyZXMuZ2V0KHB0cik7Ci0gICAgcmV0dXJuIHRleHR1cmUgPyB0ZXh0dXJlLmdldCgpIDogMDsK
KyAgICByZXR1cm4gbV9jb250ZXh0LT5nZXRUZXh0dXJlKHB0cik7CiB9CiAKIHZvaWQgR0xFUzJD
YW52YXM6OmNoZWNrR0xFcnJvcihjb25zdCBjaGFyKiBoZWFkZXIpCmRpZmYgLS1naXQgYS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0dMRVMyQ2FudmFzLmggYi9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0dMRVMyQ2FudmFzLmgKaW5kZXggZjQ5YWM4YmExOGQx
ZDM0MjM0YjhkMDYyNzhlNzAyOGJmZTk2OTdlMS4uYWYzYzA1MzhmMDVmNDA3MmUyMGQxNzNmZTAy
M2IwMzkyNmY2YTY5YyAxMDA2NDQKLS0tIGEvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJv
bWl1bS9HTEVTMkNhbnZhcy5oCisrKyBiL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21p
dW0vR0xFUzJDYW52YXMuaApAQCAtNDQsMTcgKzQ0LDE1IEBACiAKIG5hbWVzcGFjZSBXZWJDb3Jl
IHsKIAorY2xhc3MgQ2FudmFzRnJhbWVidWZmZXI7CitjbGFzcyBTaGFyZWRDb250ZXh0M0Q7CiBj
bGFzcyBDb2xvcjsKIGNsYXNzIEZsb2F0UmVjdDsKIGNsYXNzIEdyYXBoaWNzQ29udGV4dDNEOwot
Y2xhc3MgU29saWRGaWxsU2hhZGVyOwotY2xhc3MgVGV4U2hhZGVyOwotCi10eXBlZGVmIEhhc2hN
YXA8TmF0aXZlSW1hZ2VQdHIsIFJlZlB0cjxUZXh0dXJlPiA+IFRleHR1cmVIYXNoTWFwOwogCiBj
bGFzcyBHTEVTMkNhbnZhcyA6IHB1YmxpYyBOb25jb3B5YWJsZSB7CiBwdWJsaWM6Ci0gICAgR0xF
UzJDYW52YXMoR3JhcGhpY3NDb250ZXh0M0QqLCBjb25zdCBJbnRTaXplJik7CisgICAgR0xFUzJD
YW52YXMoU2hhcmVkQ29udGV4dDNEKiwgQ2FudmFzRnJhbWVidWZmZXIqLCBjb25zdCBJbnRTaXpl
Jik7CiAgICAgfkdMRVMyQ2FudmFzKCk7CiAKICAgICB2b2lkIGZpbGxSZWN0KGNvbnN0IEZsb2F0
UmVjdCYsIGNvbnN0IENvbG9yJiwgQ29sb3JTcGFjZSk7CkBAIC03NCwyOCArNzIsMzUgQEAgcHVi
bGljOgogICAgIC8vIG5vbi1zdGFuZGFyZCBmdW5jdGlvbnMKICAgICAvLyBUaGVzZSBhcmUgbm90
IHN0YW5kYXJkIEdyYXBoaWNzQ29udGV4dCBmdW5jdGlvbnMsIGFuZCBzaG91bGQgYmUgcHVzaGVk
CiAgICAgLy8gZG93biBpbnRvIGEgUGxhdGZvcm1Db250ZXh0R0xFUzIgYXQgc29tZSBwb2ludC4K
KyAgICB2b2lkIGRyYXdUZXh0dXJlZFJlY3QodW5zaWduZWQgdGV4dHVyZSwgY29uc3QgSW50U2l6
ZSYgdGV4dHVyZVNpemUsIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCwgY29uc3QgRmxvYXRSZWN0
JiBkc3RSZWN0LCBDb2xvclNwYWNlLCBDb21wb3NpdGVPcGVyYXRvcik7CiAgICAgdm9pZCBkcmF3
VGV4dHVyZWRSZWN0KFRleHR1cmUqLCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsIGNvbnN0IEZs
b2F0UmVjdCYgZHN0UmVjdCwgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiwgZmxvYXQgYWxwaGEsIENv
bG9yU3BhY2UsIENvbXBvc2l0ZU9wZXJhdG9yKTsKICAgICB2b2lkIGRyYXdUZXh0dXJlZFJlY3Qo
VGV4dHVyZSosIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCwgY29uc3QgRmxvYXRSZWN0JiBkc3RS
ZWN0LCBDb2xvclNwYWNlLCBDb21wb3NpdGVPcGVyYXRvcik7Ci0gICAgR3JhcGhpY3NDb250ZXh0
M0QqIGNvbnRleHQoKSB7IHJldHVybiBtX2NvbnRleHQ7IH0KLSAgICBUZXh0dXJlKiBjcmVhdGVU
ZXh0dXJlKE5hdGl2ZUltYWdlUHRyLCBUZXh0dXJlOjpGb3JtYXQsIGludCB3aWR0aCwgaW50IGhl
aWdodCk7Ci0gICAgVGV4dHVyZSogZ2V0VGV4dHVyZShOYXRpdmVJbWFnZVB0cik7CisgICAgUGFz
c1JlZlB0cjxUZXh0dXJlPiBjcmVhdGVUZXh0dXJlKE5hdGl2ZUltYWdlUHRyLCBUZXh0dXJlOjpG
b3JtYXQsIGludCB3aWR0aCwgaW50IGhlaWdodCk7CisgICAgUGFzc1JlZlB0cjxUZXh0dXJlPiBn
ZXRUZXh0dXJlKE5hdGl2ZUltYWdlUHRyKTsKKworICAgIFNoYXJlZENvbnRleHQzRCogY29udGV4
dCgpIGNvbnN0IHsgcmV0dXJuIG1fY29udGV4dDsgfQorCisgICAgdm9pZCBzd2FwQnVmZmVycygp
OworICAgIHZvaWQgYmluZEZyYW1lYnVmZmVyKCk7CisKKyAgICB1bnNpZ25lZCB0ZXh0dXJlSWRG
b3JDb21wb3NpdG9yKCkgY29uc3Q7CisgICAgdW5zaWduZWQgdGV4dHVyZUlkRm9yQ2FudmFzKCkg
Y29uc3Q7CiAKIHByaXZhdGU6CiAgICAgdm9pZCBkcmF3VGV4dHVyZWRSZWN0VGlsZShUZXh0dXJl
KiB0ZXh0dXJlLCBpbnQgdGlsZSwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBjb25zdCBGbG9h
dFJlY3QmIGRzdFJlY3QsIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYsIGZsb2F0IGFscGhhKTsKKyAg
ICB2b2lkIGRyYXdRdWFkKGNvbnN0IEludFNpemUmIHRleHR1cmVTaXplLCBjb25zdCBGbG9hdFJl
Y3QmIHNyY1JlY3QsIGNvbnN0IEZsb2F0UmVjdCYgZHN0UmVjdCwgY29uc3QgQWZmaW5lVHJhbnNm
b3JtJiwgZmxvYXQgYWxwaGEpOwogICAgIHZvaWQgYXBwbHlDb21wb3NpdGVPcGVyYXRvcihDb21w
b3NpdGVPcGVyYXRvcik7CiAgICAgdm9pZCBjaGVja0dMRXJyb3IoY29uc3QgY2hhciogaGVhZGVy
KTsKLSAgICB1bnNpZ25lZCBnZXRRdWFkVmVydGljZXMoKTsKIAotICAgIEdyYXBoaWNzQ29udGV4
dDNEKiBtX2NvbnRleHQ7CisgICAgSW50U2l6ZSBtX3NpemU7CisKKyAgICBTaGFyZWRDb250ZXh0
M0QqIG1fY29udGV4dDsKKyAgICBDYW52YXNGcmFtZWJ1ZmZlciogbV9mcmFtZWJ1ZmZlcjsKKwog
ICAgIHN0cnVjdCBTdGF0ZTsKICAgICBXVEY6OlZlY3RvcjxTdGF0ZT4gbV9zdGF0ZVN0YWNrOwog
ICAgIFN0YXRlKiBtX3N0YXRlOwotICAgIHVuc2lnbmVkIG1fcXVhZFZlcnRpY2VzOwotICAgIE93
blB0cjxTb2xpZEZpbGxTaGFkZXI+IG1fc29saWRGaWxsU2hhZGVyOwotICAgIE93blB0cjxUZXhT
aGFkZXI+IG1fdGV4U2hhZGVyOwogICAgIEFmZmluZVRyYW5zZm9ybSBtX2ZsaXBNYXRyaXg7Ci0g
ICAgVGV4dHVyZUhhc2hNYXAgbV90ZXh0dXJlczsKLSAgICBDb21wb3NpdGVPcGVyYXRvciBtX2xh
c3RDb21wb3NpdGVPcDsgLy8gVGhpcyBpcyB0aGUgb25lIGxhc3Qgc2V0LCBub3QgbmVjZXNzYXJp
bHkgdGhlIG9uZSBpbiB0aGUgc3RhdGUgc3RhY2suCiB9OwogCiB9CmRpZmYgLS1naXQgYS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0dyYXBoaWNzTGF5ZXJDaHJvbWl1bS5jcHAg
Yi9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0dyYXBoaWNzTGF5ZXJDaHJvbWl1
bS5jcHAKaW5kZXggNjQ4ZTM1ZjFhNDY3MmZjMjY1NGU1YTVlOTZjY2UyOWU2NzkyYzEwMS4uMThk
ZmQyODYyYzc3MjNiOGQzZmEzMTc3N2JhYTY1ZTgwODFlYmQxNyAxMDA2NDQKLS0tIGEvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9HcmFwaGljc0xheWVyQ2hyb21pdW0uY3BwCisr
KyBiL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vR3JhcGhpY3NMYXllckNocm9t
aXVtLmNwcApAQCAtNDUsNiArNDUsNyBAQAogCiAjaW5jbHVkZSAiR3JhcGhpY3NMYXllckNocm9t
aXVtLmgiCiAKKyNpbmNsdWRlICJDYW52YXMyRExheWVyQ2hyb21pdW0uaCIKICNpbmNsdWRlICJD
b250ZW50TGF5ZXJDaHJvbWl1bS5oIgogI2luY2x1ZGUgIkZsb2F0Q29udmVyc2lvbi5oIgogI2lu
Y2x1ZGUgIkZsb2F0UmVjdC5oIgpAQCAtMjkwLDYgKzI5MSw3IEBAIHZvaWQgR3JhcGhpY3NMYXll
ckNocm9taXVtOjpzZXRDb250ZW50c05lZWRzRGlzcGxheSgpCiAgICAgaWYgKG1fY29udGVudHNM
YXllcikKICAgICAgICAgbV9jb250ZW50c0xheWVyLT5zZXROZWVkc0Rpc3BsYXkoKTsKIH0KKwog
dm9pZCBHcmFwaGljc0xheWVyQ2hyb21pdW06OnNldE5lZWRzRGlzcGxheSgpCiB7CiAgICAgaWYg
KGRyYXdzQ29udGVudCgpKQpAQCAtMzM5LDE1ICszNDEsMTUgQEAgdm9pZCBHcmFwaGljc0xheWVy
Q2hyb21pdW06OnNldENvbnRlbnRzVG9JbWFnZShJbWFnZSogaW1hZ2UpCiAgICAgICAgIHVwZGF0
ZVN1YmxheWVyTGlzdCgpOwogfQogCi12b2lkIEdyYXBoaWNzTGF5ZXJDaHJvbWl1bTo6c2V0Q29u
dGVudHNUb0NhbnZhcyhQbGF0Zm9ybUxheWVyKiBwbGF0Zm9ybUxheWVyKQordm9pZCBHcmFwaGlj
c0xheWVyQ2hyb21pdW06OnNldENvbnRlbnRzVG9XZWJHTChQbGF0Zm9ybUxheWVyKiBwbGF0Zm9y
bUxheWVyKQogewogICAgIGJvb2wgY2hpbGRyZW5DaGFuZ2VkID0gZmFsc2U7CiAgICAgaWYgKHBs
YXRmb3JtTGF5ZXIpIHsKICAgICAgICAgcGxhdGZvcm1MYXllci0+c2V0T3duZXIodGhpcyk7Ci0g
ICAgICAgIGlmICghbV9jb250ZW50c0xheWVyLmdldCgpIHx8IG1fY29udGVudHNMYXllclB1cnBv
c2UgIT0gQ29udGVudHNMYXllckZvckNhbnZhcykgeworICAgICAgICBpZiAoIW1fY29udGVudHNM
YXllci5nZXQoKSB8fCBtX2NvbnRlbnRzTGF5ZXJQdXJwb3NlICE9IENvbnRlbnRzTGF5ZXJGb3JX
ZWJHTCkgewogICAgICAgICAgICAgc2V0dXBDb250ZW50c0xheWVyKHBsYXRmb3JtTGF5ZXIpOwog
ICAgICAgICAgICAgbV9jb250ZW50c0xheWVyID0gcGxhdGZvcm1MYXllcjsKLSAgICAgICAgICAg
IG1fY29udGVudHNMYXllclB1cnBvc2UgPSBDb250ZW50c0xheWVyRm9yQ2FudmFzOworICAgICAg
ICAgICAgbV9jb250ZW50c0xheWVyUHVycG9zZSA9IENvbnRlbnRzTGF5ZXJGb3JXZWJHTDsKICAg
ICAgICAgICAgIGNoaWxkcmVuQ2hhbmdlZCA9IHRydWU7CiAgICAgICAgIH0KICAgICAgICAgcGxh
dGZvcm1MYXllci0+c2V0TmVlZHNEaXNwbGF5KCk7CkBAIC0zNjUsNiArMzY3LDM0IEBAIHZvaWQg
R3JhcGhpY3NMYXllckNocm9taXVtOjpzZXRDb250ZW50c1RvQ2FudmFzKFBsYXRmb3JtTGF5ZXIq
IHBsYXRmb3JtTGF5ZXIpCiAgICAgICAgIHVwZGF0ZVN1YmxheWVyTGlzdCgpOwogfQogCit2b2lk
IEdyYXBoaWNzTGF5ZXJDaHJvbWl1bTo6c2V0Q29udGVudHNUb0NhbnZhczJEKENhbnZhc0ZyYW1l
YnVmZmVyKiBmcmFtZWJ1ZmZlcikKK3sKKyAgICBib29sIGNoaWxkcmVuQ2hhbmdlZCA9IGZhbHNl
OworICAgIGlmIChmcmFtZWJ1ZmZlcikgeworICAgICAgICBpZiAoIW1fY29udGVudHNMYXllci5n
ZXQoKSB8fCBtX2NvbnRlbnRzTGF5ZXJQdXJwb3NlICE9IENvbnRlbnRzTGF5ZXJGb3JDYW52YXMy
RCkgeworICAgICAgICAgICAgUmVmUHRyPENhbnZhczJETGF5ZXJDaHJvbWl1bT4gY2FudmFzMkRM
YXllciA9IENhbnZhczJETGF5ZXJDaHJvbWl1bTo6Y3JlYXRlKGZyYW1lYnVmZmVyLCB0aGlzKTsK
KyAgICAgICAgICAgIHNldHVwQ29udGVudHNMYXllcihjYW52YXMyRExheWVyLmdldCgpKTsKKyAg
ICAgICAgICAgIG1fY29udGVudHNMYXllciA9IGNhbnZhczJETGF5ZXI7CisgICAgICAgICAgICBt
X2NvbnRlbnRzTGF5ZXJQdXJwb3NlID0gQ29udGVudHNMYXllckZvckNhbnZhczJEOworICAgICAg
ICAgICAgY2hpbGRyZW5DaGFuZ2VkID0gdHJ1ZTsKKyAgICAgICAgfQorICAgICAgICBDYW52YXMy
RExheWVyQ2hyb21pdW0qIGNhbnZhczJETGF5ZXIgPSBzdGF0aWNfY2FzdDxDYW52YXMyRExheWVy
Q2hyb21pdW0qPihtX2NvbnRlbnRzTGF5ZXIuZ2V0KCkpOworICAgICAgICBjYW52YXMyRExheWVy
LT5zZXRDYW52YXNGcmFtZWJ1ZmZlcihmcmFtZWJ1ZmZlcik7CisgICAgICAgIGNhbnZhczJETGF5
ZXItPnNldE5lZWRzRGlzcGxheSgpOworICAgICAgICB1cGRhdGVDb250ZW50c1JlY3QoKTsKKyAg
ICB9IGVsc2UgeworICAgICAgICBpZiAobV9jb250ZW50c0xheWVyKSB7CisgICAgICAgICAgICBj
aGlsZHJlbkNoYW5nZWQgPSB0cnVlOworCisgICAgICAgICAgICAvLyBUaGUgb2xkIGNvbnRlbnRz
IGxheWVyIHdpbGwgYmUgcmVtb3ZlZCB2aWEgdXBkYXRlU3VibGF5ZXJMaXN0LgorICAgICAgICAg
ICAgbV9jb250ZW50c0xheWVyID0gMDsKKyAgICAgICAgfQorICAgIH0KKworICAgIGlmIChjaGls
ZHJlbkNoYW5nZWQpCisgICAgICAgIHVwZGF0ZVN1YmxheWVyTGlzdCgpOworfQorCiB2b2lkIEdy
YXBoaWNzTGF5ZXJDaHJvbWl1bTo6c2V0Q29udGVudHNUb01lZGlhKFBsYXRmb3JtTGF5ZXIqIGxh
eWVyKQogewogICAgIGJvb2wgY2hpbGRyZW5DaGFuZ2VkID0gZmFsc2U7CmRpZmYgLS1naXQgYS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0dyYXBoaWNzTGF5ZXJDaHJvbWl1bS5o
IGIvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9HcmFwaGljc0xheWVyQ2hyb21p
dW0uaAppbmRleCA5ZGZmNjZhMDc1Y2MzMGE1ODQ2YjE0NmExNjUxODQ4YjZmZWRhZjkxLi42NTBi
MTQ3MjhjZDQ1MmQ3MDY1ODY1NWQ3MTY3NTlmMjhlNGI0ZTFkIDEwMDY0NAotLS0gYS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0dyYXBoaWNzTGF5ZXJDaHJvbWl1bS5oCisrKyBi
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vR3JhcGhpY3NMYXllckNocm9taXVt
LmgKQEAgLTg3LDcgKzg3LDggQEAgcHVibGljOgogCiAgICAgdmlydHVhbCB2b2lkIHNldENvbnRl
bnRzVG9JbWFnZShJbWFnZSopOwogICAgIHZpcnR1YWwgdm9pZCBzZXRDb250ZW50c1RvTWVkaWEo
UGxhdGZvcm1MYXllciopOwotICAgIHZpcnR1YWwgdm9pZCBzZXRDb250ZW50c1RvQ2FudmFzKFBs
YXRmb3JtTGF5ZXIqKTsKKyAgICB2aXJ0dWFsIHZvaWQgc2V0Q29udGVudHNUb1dlYkdMKFBsYXRm
b3JtTGF5ZXIqKTsKKyAgICB2aXJ0dWFsIHZvaWQgc2V0Q29udGVudHNUb0NhbnZhczJEKENhbnZh
c0ZyYW1lYnVmZmVyKik7CiAKICAgICB2aXJ0dWFsIFBsYXRmb3JtTGF5ZXIqIHBsYXRmb3JtTGF5
ZXIoKSBjb25zdDsKIApAQCAtMTM4LDcgKzEzOSw4IEBAIHByaXZhdGU6CiAgICAgICAgIE5vQ29u
dGVudHNMYXllciA9IDAsCiAgICAgICAgIENvbnRlbnRzTGF5ZXJGb3JJbWFnZSwKICAgICAgICAg
Q29udGVudHNMYXllckZvclZpZGVvLAotICAgICAgICBDb250ZW50c0xheWVyRm9yQ2FudmFzCisg
ICAgICAgIENvbnRlbnRzTGF5ZXJGb3JXZWJHTCwKKyAgICAgICAgQ29udGVudHNMYXllckZvckNh
bnZhczJELAogICAgIH07CiAKICAgICBDb250ZW50c0xheWVyUHVycG9zZSBtX2NvbnRlbnRzTGF5
ZXJQdXJwb3NlOwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1
bS9MYXllclJlbmRlcmVyQ2hyb21pdW0uY3BwIGIvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
aHJvbWl1bS9MYXllclJlbmRlcmVyQ2hyb21pdW0uY3BwCmluZGV4IDUwMzM4ZDJkNWY3MzI0ZTVh
MTE5YzUwOTE5MGRmZWY4Njk4YjE3NjkuLmY0OTA5NzA4NzEzYWJhNDg5ZGZlOTkwZTU4NDNiYmI1
Njg5NTYwYjMgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0v
TGF5ZXJSZW5kZXJlckNocm9taXVtLmNwcAorKysgYi9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2Nocm9taXVtL0xheWVyUmVuZGVyZXJDaHJvbWl1bS5jcHAKQEAgLTM0LDExICszNCwxMSBAQAog
I2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKICNpbmNsdWRlICJMYXllclJlbmRlcmVy
Q2hyb21pdW0uaCIKIAotI2luY2x1ZGUgIkNhbnZhc0xheWVyQ2hyb21pdW0uaCIKLSNpbmNsdWRl
ICJDb250ZW50TGF5ZXJDaHJvbWl1bS5oIgorI2luY2x1ZGUgIkNhbnZhczJETGF5ZXJDaHJvbWl1
bS5oIgogI2luY2x1ZGUgIkdMRVMyQ29udGV4dC5oIgogI2luY2x1ZGUgIkxheWVyQ2hyb21pdW0u
aCIKICNpbmNsdWRlICJOb3RJbXBsZW1lbnRlZC5oIgorI2luY2x1ZGUgIldlYkdMTGF5ZXJDaHJv
bWl1bS5oIgogI2lmIFBMQVRGT1JNKFNLSUEpCiAjaW5jbHVkZSAiTmF0aXZlSW1hZ2VTa2lhLmgi
CiAjaW5jbHVkZSAiUGxhdGZvcm1Db250ZXh0U2tpYS5oIgpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9XZWJHTExheWVyQ2hyb21pdW0uY3BwIGIvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9XZWJHTExheWVyQ2hyb21pdW0uY3BwCm5ldyBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAuLmU2NDRiYTZiNDYzZWRkOWU2NDEwZjdjZWQ5NTI2NTQ2OGUwMjdiMzgKLS0tIC9kZXYv
bnVsbAorKysgYi9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1dlYkdMTGF5ZXJD
aHJvbWl1bS5jcHAKQEAgLTAsMCArMSw4NyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMCBH
b29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zIGFyZQorICogbWV0OgorICoKKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgICAg
KiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
CisgKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyCisgKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiBkaXN0cmlidXRpb24uCisgKiAgICAgKiBO
ZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisgKiBj
b250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRl
cml2ZWQgZnJvbQorICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0
ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBD
T1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRF
RCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZF
TlQgU0hBTEwgVEhFIENPUFlSSUdIVAorICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVN
UExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisgKiBM
SU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKworI2lmIFVT
RShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKKworI2luY2x1ZGUgIldlYkdMTGF5ZXJDaHJvbWl1
bS5oIgorCisjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0M0QuaCIKKyNpbmNsdWRlICJMYXllclJl
bmRlcmVyQ2hyb21pdW0uaCIKKyNpbmNsdWRlIDxHTEVTMi9nbDIuaD4KKworbmFtZXNwYWNlIFdl
YkNvcmUgeworCitQYXNzUmVmUHRyPFdlYkdMTGF5ZXJDaHJvbWl1bT4gV2ViR0xMYXllckNocm9t
aXVtOjpjcmVhdGUoR3JhcGhpY3NMYXllckNocm9taXVtKiBvd25lcikKK3sKKyAgICByZXR1cm4g
YWRvcHRSZWYobmV3IFdlYkdMTGF5ZXJDaHJvbWl1bShvd25lcikpOworfQorCitXZWJHTExheWVy
Q2hyb21pdW06OldlYkdMTGF5ZXJDaHJvbWl1bShHcmFwaGljc0xheWVyQ2hyb21pdW0qIG93bmVy
KQorICAgIDogQ2FudmFzTGF5ZXJDaHJvbWl1bShvd25lcikKKyAgICAsIG1fY29udGV4dCgwKQor
ICAgICwgbV90ZXh0dXJlSWQoMCkKKyAgICAsIG1fdGV4dHVyZUNoYW5nZWQoZmFsc2UpCit7Cit9
CisKK3ZvaWQgV2ViR0xMYXllckNocm9taXVtOjp1cGRhdGVDb250ZW50cygpCit7CisgICAgQVNT
RVJUKG1fY29udGV4dCk7CisgICAgaWYgKG1fdGV4dHVyZUNoYW5nZWQpIHsKKyAgICAgICAgZ2xC
aW5kVGV4dHVyZShHTF9URVhUVVJFXzJELCBtX3RleHR1cmVJZCk7CisgICAgICAgIC8vIFNldCB0
aGUgbWluLW1hZyBmaWx0ZXJzIHRvIGxpbmVhciBhbmQgd3JhcCBtb2RlcyB0byBHTF9DTEFNUF9U
T19FREdFCisgICAgICAgIC8vIHRvIGdldCBhcm91bmQgTlBPVCB0ZXh0dXJlIGxpbWl0YXRpb25z
IG9mIEdMRVMuCisgICAgICAgIGdsVGV4UGFyYW1ldGVyZihHTF9URVhUVVJFXzJELCBHTF9URVhU
VVJFX01JTl9GSUxURVIsIEdMX0xJTkVBUik7CisgICAgICAgIGdsVGV4UGFyYW1ldGVyZihHTF9U
RVhUVVJFXzJELCBHTF9URVhUVVJFX01BR19GSUxURVIsIEdMX0xJTkVBUik7CisgICAgICAgIGds
VGV4UGFyYW1ldGVyZihHTF9URVhUVVJFXzJELCBHTF9URVhUVVJFX1dSQVBfUywgR0xfQ0xBTVBf
VE9fRURHRSk7CisgICAgICAgIGdsVGV4UGFyYW1ldGVyZihHTF9URVhUVVJFXzJELCBHTF9URVhU
VVJFX1dSQVBfVCwgR0xfQ0xBTVBfVE9fRURHRSk7CisgICAgICAgIG1fdGV4dHVyZUNoYW5nZWQg
PSBmYWxzZTsKKyAgICB9CisgICAgLy8gVXBkYXRlIHRoZSBjb250ZW50cyBvZiB0aGUgdGV4dHVy
ZSB1c2VkIGJ5IHRoZSBjb21wb3NpdG9yLgorICAgIGlmIChtX2NvbnRlbnRzRGlydHkpIHsKKyAg
ICAgICAgbV9jb250ZXh0LT5wcmVwYXJlVGV4dHVyZSgpOworICAgICAgICBtX2NvbnRlbnRzRGly
dHkgPSBmYWxzZTsKKyAgICB9Cit9CisKK3ZvaWQgV2ViR0xMYXllckNocm9taXVtOjpzZXRDb250
ZXh0KGNvbnN0IEdyYXBoaWNzQ29udGV4dDNEKiBjb250ZXh0KQoreworICAgIG1fY29udGV4dCA9
IGNvbnN0X2Nhc3Q8R3JhcGhpY3NDb250ZXh0M0QqPihjb250ZXh0KTsKKworICAgIHVuc2lnbmVk
IGludCB0ZXh0dXJlSWQgPSBtX2NvbnRleHQtPnBsYXRmb3JtVGV4dHVyZSgpOworICAgIGlmICh0
ZXh0dXJlSWQgIT0gbV90ZXh0dXJlSWQpCisgICAgICAgIG1fdGV4dHVyZUNoYW5nZWQgPSB0cnVl
OworICAgIG1fdGV4dHVyZUlkID0gdGV4dHVyZUlkOworfQorCit9CisjZW5kaWYgLy8gVVNFKEFD
Q0VMRVJBVEVEX0NPTVBPU0lUSU5HKQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jaHJvbWl1bS9XZWJHTExheWVyQ2hyb21pdW0uaCBiL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY2hyb21pdW0vV2ViR0xMYXllckNocm9taXVtLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMWU4M2I0YjZj
YTliZjFhMGYyMjA4YWQ3N2IyZjNiN2M4MDc1NmMwMwotLS0gL2Rldi9udWxsCisrKyBiL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vV2ViR0xMYXllckNocm9taXVtLmgKQEAgLTAs
MCArMSw2NSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMCBHb29nbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorICogbWV0
OgorICoKKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiBjb3B5cmlnaHQgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
CisgKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlCisgKiBkaXN0cmlidXRpb24uCisgKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9m
IEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisgKiBjb250cmlidXRvcnMgbWF5IGJl
IHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorICogdGhp
cyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBB
TkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJ
Q1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlS
SUdIVAorICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERB
VEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgorICovCisKKworI2lmbmRlZiBXZWJHTExheWVyQ2hyb21pdW1faAorI2RlZmluZSBXZWJHTExh
eWVyQ2hyb21pdW1faAorCisjaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQorCisjaW5j
bHVkZSAiQ2FudmFzTGF5ZXJDaHJvbWl1bS5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2Ns
YXNzIEdyYXBoaWNzQ29udGV4dDNEOworCisvLyBBIExheWVyIGNvbnRhaW5pbmcgYSBXZWJHTCBj
YW52YXMKK2NsYXNzIFdlYkdMTGF5ZXJDaHJvbWl1bSA6IHB1YmxpYyBDYW52YXNMYXllckNocm9t
aXVtIHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxXZWJHTExheWVyQ2hyb21pdW0+
IGNyZWF0ZShHcmFwaGljc0xheWVyQ2hyb21pdW0qIG93bmVyID0gMCk7CisgICAgdmlydHVhbCBi
b29sIGRyYXdzQ29udGVudCgpIHsgcmV0dXJuIG1fY29udGV4dDsgfQorICAgIHZpcnR1YWwgdm9p
ZCB1cGRhdGVDb250ZW50cygpOworCisgICAgdm9pZCBzZXRDb250ZXh0KGNvbnN0IEdyYXBoaWNz
Q29udGV4dDNEKiBjb250ZXh0KTsKKworcHJvdGVjdGVkOgorICAgIHZpcnR1YWwgdW5zaWduZWQg
dGV4dHVyZUlkKCkgeyByZXR1cm4gbV90ZXh0dXJlSWQ7IH0KKworcHJpdmF0ZToKKyAgICBleHBs
aWNpdCBXZWJHTExheWVyQ2hyb21pdW0oR3JhcGhpY3NMYXllckNocm9taXVtKiBvd25lcik7Cisg
ICAgR3JhcGhpY3NDb250ZXh0M0QqIG1fY29udGV4dDsKKyAgICB1bnNpZ25lZCBtX3RleHR1cmVJ
ZDsKKyAgICBib29sIG1fdGV4dHVyZUNoYW5nZWQ7Cit9OworCit9CisjZW5kaWYgLy8gVVNFKEFD
Q0VMRVJBVEVEX0NPTVBPU0lUSU5HKQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvZ3B1L0NhbnZhc0ZyYW1lYnVmZmVyLmNwcCBiL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvZ3B1L0NhbnZhc0ZyYW1lYnVmZmVyLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5mZTRkZGI0
NzFlMjIyZjg1MzU2NmJmYzQ1NmYxZTE4M2FkYjdlOTY5Ci0tLSAvZGV2L251bGwKKysrIGIvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ncHUvQ2FudmFzRnJhbWVidWZmZXIuY3BwCkBAIC0wLDAg
KzEsMTEwIEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDEwLCBHb29nbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorICogbWV0
OgorICoKKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiBjb3B5cmlnaHQgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
CisgKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlCisgKiBkaXN0cmlidXRpb24uCisgKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9m
IEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisgKiBjb250cmlidXRvcnMgbWF5IGJl
IHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorICogdGhp
cyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBB
TkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJ
Q1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlS
SUdIVAorICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERB
VEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKworI2luY2x1ZGUgIkNhbnZhc0ZyYW1lYnVm
ZmVyLmgiCisKKyNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQzRC5oIgorI2luY2x1ZGUgIlNoYXJl
ZENvbnRleHQzRC5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK0NhbnZhc0ZyYW1lYnVmZmVy
OjpDYW52YXNGcmFtZWJ1ZmZlcihTaGFyZWRDb250ZXh0M0QqIGNvbnRleHQsIGNvbnN0IEludFNp
emUmIHNpemUsIHVuc2lnbmVkIGZyYW1lYnVmZmVyLCB1bnNpZ25lZCBvZmZzY3JlZW5Db2xvclRl
eHR1cmUsIHVuc2lnbmVkIG9mZnNjcmVlblBhcmVudENvbG9yVGV4dHVyZSkKKyAgICA6IG1fY29u
dGV4dChjb250ZXh0KQorICAgICwgbV9zaXplKHNpemUpCisgICAgLCBtX2ZyYW1lYnVmZmVyKGZy
YW1lYnVmZmVyKQorICAgICwgbV9vZmZzY3JlZW5Db2xvclRleHR1cmUob2Zmc2NyZWVuQ29sb3JU
ZXh0dXJlKQorICAgICwgbV9vZmZzY3JlZW5QYXJlbnRDb2xvclRleHR1cmUob2Zmc2NyZWVuUGFy
ZW50Q29sb3JUZXh0dXJlKQoreworfQorCitDYW52YXNGcmFtZWJ1ZmZlcjo6fkNhbnZhc0ZyYW1l
YnVmZmVyKCkKK3sKKyAgICBtX2NvbnRleHQtPmRlbGV0ZVRleHR1cmUobV9vZmZzY3JlZW5Db2xv
clRleHR1cmUpOworICAgIG1fY29udGV4dC0+ZGVsZXRlQ29tcG9zaXRvclRleHR1cmUobV9vZmZz
Y3JlZW5QYXJlbnRDb2xvclRleHR1cmUpOworICAgIG1fY29udGV4dC0+ZGVsZXRlRnJhbWVidWZm
ZXIobV9mcmFtZWJ1ZmZlcik7Cit9CisKK3ZvaWQgQ2FudmFzRnJhbWVidWZmZXI6OmJpbmQoKQor
eworICAgIG1fY29udGV4dC0+YmluZEZyYW1lYnVmZmVyKG1fZnJhbWVidWZmZXIpOworICAgIG1f
Y29udGV4dC0+c2V0Vmlld3BvcnQobV9zaXplKTsKK30KKwordm9pZCBDYW52YXNGcmFtZWJ1ZmZl
cjo6c3dhcEJ1ZmZlcnMoKQoreworICAgIGlmIChtX3dpbGxTd2FwQnVmZmVyc0NhbGxiYWNrKQor
ICAgICAgICBtX3dpbGxTd2FwQnVmZmVyc0NhbGxiYWNrLT53aWxsU3dhcEJ1ZmZlcnMoKTsKKyAg
ICBtX2NvbnRleHQtPnNldFZpZXdwb3J0KG1fc2l6ZSk7CisgICAgbV9jb250ZXh0LT5jb3B5VGV4
dHVyZVRvQ29tcG9zaXRvcihtX29mZnNjcmVlbkNvbG9yVGV4dHVyZSwgbV9vZmZzY3JlZW5QYXJl
bnRDb2xvclRleHR1cmUpOworfQorCit2b2lkIENhbnZhc0ZyYW1lYnVmZmVyOjpzZXRXaWxsU3dh
cEJ1ZmZlcnNDYWxsYmFjayhQYXNzT3duUHRyPFN3YXBCdWZmZXJzQ2FsbGJhY2s+IGNhbGxiYWNr
KQoreworICAgIG1fd2lsbFN3YXBCdWZmZXJzQ2FsbGJhY2sgPSBjYWxsYmFjazsKK30KKworUGFz
c093blB0cjxDYW52YXNGcmFtZWJ1ZmZlcj4gQ2FudmFzRnJhbWVidWZmZXI6OmNyZWF0ZShTaGFy
ZWRDb250ZXh0M0QqIGNvbnRleHQsIGNvbnN0IEludFNpemUmIHNpemUpCit7CisgICAgdW5zaWdu
ZWQgZnJhbWVidWZmZXIgPSBjb250ZXh0LT5jcmVhdGVGcmFtZWJ1ZmZlcigpOworICAgIEFTU0VS
VChmcmFtZWJ1ZmZlcik7CisgICAgaWYgKCFmcmFtZWJ1ZmZlcikKKyAgICAgICAgcmV0dXJuIDA7
CisgICAgY29udGV4dC0+YmluZEZyYW1lYnVmZmVyKGZyYW1lYnVmZmVyKTsKKworICAgIC8vIENv
bG9yIHRleHR1cmUKKyAgICB1bnNpZ25lZCBvZmZzY3JlZW5Db2xvclRleHR1cmUgPSBjb250ZXh0
LT5jcmVhdGVUZXh0dXJlKCk7CisgICAgQVNTRVJUKG9mZnNjcmVlbkNvbG9yVGV4dHVyZSk7Cisg
ICAgaWYgKCFvZmZzY3JlZW5Db2xvclRleHR1cmUpIHsKKyAgICAgICAgY29udGV4dC0+ZGVsZXRl
RnJhbWVidWZmZXIoZnJhbWVidWZmZXIpOworICAgICAgICByZXR1cm4gMDsKKyAgICB9CisgICAg
Y29udGV4dC0+YmluZFRleHR1cmUoR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQsIG9mZnNj
cmVlbkNvbG9yVGV4dHVyZSk7CisgICAgY29udGV4dC0+dGV4UGFyYW1ldGVyaShHcmFwaGljc0Nv
bnRleHQzRDo6VEVYVFVSRV8yRCwgR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfTUFHX0ZJTFRF
UiwgR3JhcGhpY3NDb250ZXh0M0Q6Ok5FQVJFU1QpOworICAgIGNvbnRleHQtPnRleFBhcmFtZXRl
cmkoR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQsIEdyYXBoaWNzQ29udGV4dDNEOjpURVhU
VVJFX01JTl9GSUxURVIsIEdyYXBoaWNzQ29udGV4dDNEOjpORUFSRVNUKTsKKyAgICBjb250ZXh0
LT50ZXhQYXJhbWV0ZXJpKEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFXzJELCBHcmFwaGljc0Nv
bnRleHQzRDo6VEVYVFVSRV9XUkFQX1MsIEdyYXBoaWNzQ29udGV4dDNEOjpDTEFNUF9UT19FREdF
KTsKKyAgICBjb250ZXh0LT50ZXhQYXJhbWV0ZXJpKEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJF
XzJELCBHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV9XUkFQX1QsIEdyYXBoaWNzQ29udGV4dDNE
OjpDTEFNUF9UT19FREdFKTsKKyAgICBjb250ZXh0LT50ZXhJbWFnZTJEKEdyYXBoaWNzQ29udGV4
dDNEOjpURVhUVVJFXzJELCAwLCBHcmFwaGljc0NvbnRleHQzRDo6UkdCQSwgc2l6ZS53aWR0aCgp
LCBzaXplLmhlaWdodCgpLCAwLCBHcmFwaGljc0NvbnRleHQzRDo6UkdCQSwgR3JhcGhpY3NDb250
ZXh0M0Q6OlVOU0lHTkVEX0JZVEUsIDApOworCisgICAgdW5zaWduZWQgb2Zmc2NyZWVuUGFyZW50
Q29sb3JUZXh0dXJlID0gY29udGV4dC0+Y3JlYXRlQ29tcG9zaXRvclRleHR1cmUoc2l6ZSk7Cisg
ICAgQVNTRVJUKG9mZnNjcmVlblBhcmVudENvbG9yVGV4dHVyZSk7CisgICAgaWYgKCFvZmZzY3Jl
ZW5QYXJlbnRDb2xvclRleHR1cmUpIHsKKyAgICAgICAgY29udGV4dC0+ZGVsZXRlVGV4dHVyZShv
ZmZzY3JlZW5Db2xvclRleHR1cmUpOworICAgICAgICBjb250ZXh0LT5kZWxldGVGcmFtZWJ1ZmZl
cihmcmFtZWJ1ZmZlcik7CisgICAgICAgIHJldHVybiAwOworICAgIH0KKworICAgIGNvbnRleHQt
PmZyYW1lYnVmZmVyVGV4dHVyZTJEKEdyYXBoaWNzQ29udGV4dDNEOjpGUkFNRUJVRkZFUiwgR3Jh
cGhpY3NDb250ZXh0M0Q6OkNPTE9SX0FUVEFDSE1FTlQwLCBHcmFwaGljc0NvbnRleHQzRDo6VEVY
VFVSRV8yRCwgb2Zmc2NyZWVuQ29sb3JUZXh0dXJlLCAwKTsKKworICAgIHJldHVybiBuZXcgQ2Fu
dmFzRnJhbWVidWZmZXIoY29udGV4dCwgc2l6ZSwgZnJhbWVidWZmZXIsIG9mZnNjcmVlbkNvbG9y
VGV4dHVyZSwgb2Zmc2NyZWVuUGFyZW50Q29sb3JUZXh0dXJlKTsKK30KKworfSAvLyBuYW1lc3Bh
Y2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ncHUvQ2Fu
dmFzRnJhbWVidWZmZXIuaCBiL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3B1L0NhbnZhc0Zy
YW1lYnVmZmVyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZDUyYWJhMWNiNjhhY2JjZWQ1ZDM0ZWI2MzQ4YzVjODkw
MzMzZDkwMwotLS0gL2Rldi9udWxsCisrKyBiL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3B1
L0NhbnZhc0ZyYW1lYnVmZmVyLmgKQEAgLTAsMCArMSw3OCBAQAorLyoKKyAqIENvcHlyaWdodCAo
YykgMjAxMCwgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucyBhcmUKKyAqIG1ldDoKKyAqCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogZGlzdHJpYnV0aW9uLgor
ICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9m
IGl0cworICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBw
cm9kdWN0cyBkZXJpdmVkIGZyb20KKyAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBw
cmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBB
TkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QK
KyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
IElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIE9XTkVSIE9SIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BF
Q0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAq
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIENhbnZhc0ZyYW1l
YnVmZmVyX2gKKyNkZWZpbmUgQ2FudmFzRnJhbWVidWZmZXJfaAorCisvLyBNYW5hZ2VzIGEgZnJh
bWVidWZmZXIgdG8gdXNlIGZvciBhIDJkIGNhbnZhcy4KKworI2luY2x1ZGUgIkludFNpemUuaCIK
KworI2luY2x1ZGUgPHd0Zi9Ob25jb3B5YWJsZS5oPgorI2luY2x1ZGUgPHd0Zi9Pd25QdHIuaD4K
KyNpbmNsdWRlIDx3dGYvUGFzc093blB0ci5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2Ns
YXNzIFNoYXJlZENvbnRleHQzRDsKKworY2xhc3MgQ2FudmFzRnJhbWVidWZmZXIgOiBwdWJsaWMg
Tm9uY29weWFibGUgeworcHVibGljOgorICAgIHN0YXRpYyBQYXNzT3duUHRyPENhbnZhc0ZyYW1l
YnVmZmVyPiBjcmVhdGUoU2hhcmVkQ29udGV4dDNEKiwgY29uc3QgSW50U2l6ZSYpOworICAgIH5D
YW52YXNGcmFtZWJ1ZmZlcigpOworCisgICAgdm9pZCBiaW5kKCk7CisgICAgdm9pZCBzd2FwQnVm
ZmVycygpOworCisgICAgdW5zaWduZWQgdGV4dHVyZUlkRm9yQ29tcG9zaXRvcigpIGNvbnN0IHsg
cmV0dXJuIG1fb2Zmc2NyZWVuUGFyZW50Q29sb3JUZXh0dXJlOyB9CisgICAgdW5zaWduZWQgdGV4
dHVyZUlkRm9yQ2FudmFzKCkgY29uc3QgeyByZXR1cm4gbV9vZmZzY3JlZW5Db2xvclRleHR1cmU7
IH0KKworICAgIGNsYXNzIFN3YXBCdWZmZXJzQ2FsbGJhY2sgOiBwdWJsaWMgTm9uY29weWFibGUg
eworICAgIHB1YmxpYzoKKyAgICAgICAgdmlydHVhbCB2b2lkIHdpbGxTd2FwQnVmZmVycygpID0g
MDsKKyAgICB9OworCisgICAgdm9pZCBzZXRXaWxsU3dhcEJ1ZmZlcnNDYWxsYmFjayhQYXNzT3du
UHRyPFN3YXBCdWZmZXJzQ2FsbGJhY2s+KTsKKworcHJpdmF0ZToKKyAgICBDYW52YXNGcmFtZWJ1
ZmZlcihTaGFyZWRDb250ZXh0M0QqIGNvbnRleHQsIGNvbnN0IEludFNpemUmLCB1bnNpZ25lZCBm
cmFtZWJ1ZmZlciwgdW5zaWduZWQgb2Zmc2NyZWVuQ29sb3JUZXh0dXJlLCB1bnNpZ25lZCBvZmZz
Y3JlZW5QYXJlbnRDb2xvclRleHR1cmUpOworCisgICAgU2hhcmVkQ29udGV4dDNEKiBtX2NvbnRl
eHQ7CisgICAgSW50U2l6ZSBtX3NpemU7CisgICAgdW5zaWduZWQgbV9mcmFtZWJ1ZmZlcjsKKyAg
ICB1bnNpZ25lZCBtX29mZnNjcmVlbkNvbG9yVGV4dHVyZTsKKyAgICB1bnNpZ25lZCBtX29mZnNj
cmVlblBhcmVudENvbG9yVGV4dHVyZTsKKworICAgIE93blB0cjxTd2FwQnVmZmVyc0NhbGxiYWNr
PiBtX3dpbGxTd2FwQnVmZmVyc0NhbGxiYWNrOworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29y
ZQorCisjZW5kaWYgLy8gQ2FudmFzRnJhbWVidWZmZXJfaApkaWZmIC0tZ2l0IGEvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9ncHUvU2hhcmVkQ29udGV4dDNELmNwcCBiL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvZ3B1L1NoYXJlZENvbnRleHQzRC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uM2I3MzhmMDFm
NzI4MTM5MjkzN2ZlZDVlMGRmMjU3Y2M5Y2ZiOTJmNAotLS0gL2Rldi9udWxsCisrKyBiL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3B1L1NoYXJlZENvbnRleHQzRC5jcHAKQEAgLTAsMCArMSwz
MjUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMTAsIEdvb2dsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisgKiBtZXQ6Cisg
KgorICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyAq
IGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUKKyAqIGRpc3RyaWJ1dGlvbi4KKyAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29v
Z2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNl
ZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisgKiB0aGlzIHNv
ZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBD
T05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxB
UiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hU
CisgKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorICogREFUQSwg
T1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisg
Ki8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorCisjaW5jbHVkZSAiU2hhcmVkQ29udGV4dDNELmgi
CisKKyNpbmNsdWRlICJBZmZpbmVUcmFuc2Zvcm0uaCIKKyNpbmNsdWRlICJDYW52YXNGcmFtZWJ1
ZmZlci5oIgorI2luY2x1ZGUgIkNvbG9yLmgiCisjaW5jbHVkZSAiRmxvYXRSZWN0LmgiCisjaW5j
bHVkZSAiR3JhcGhpY3NDb250ZXh0M0QuaCIKKyNpbmNsdWRlICJHcmFwaGljc1R5cGVzLmgiCisj
aW5jbHVkZSAiSW50U2l6ZS5oIgorI2luY2x1ZGUgIlNvbGlkRmlsbFNoYWRlci5oIgorI2luY2x1
ZGUgIlRleFNoYWRlci5oIgorCisjaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgorI2luY2x1
ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK3N0YXRp
YyBpbmxpbmUgdm9pZCBhZmZpbmVUbzN4Myhjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHRyYW5zZm9y
bSwgZmxvYXQgbWF0WzldKQoreworICAgIG1hdFswXSA9IHRyYW5zZm9ybS5hKCk7CisgICAgbWF0
WzFdID0gdHJhbnNmb3JtLmIoKTsKKyAgICBtYXRbMl0gPSAwLjBmOworICAgIG1hdFszXSA9IHRy
YW5zZm9ybS5jKCk7CisgICAgbWF0WzRdID0gdHJhbnNmb3JtLmQoKTsKKyAgICBtYXRbNV0gPSAw
LjBmOworICAgIG1hdFs2XSA9IHRyYW5zZm9ybS5lKCk7CisgICAgbWF0WzddID0gdHJhbnNmb3Jt
LmYoKTsKKyAgICBtYXRbOF0gPSAxLjBmOworfQorCisvLyBzdGF0aWMKK1Bhc3NSZWZQdHI8U2hh
cmVkQ29udGV4dDNEPiBTaGFyZWRDb250ZXh0M0Q6OmNyZWF0ZShQYXNzT3duUHRyPEdyYXBoaWNz
Q29udGV4dDNEPiBjb250ZXh0KQoreworICAgIHJldHVybiBhZG9wdFJlZihuZXcgU2hhcmVkQ29u
dGV4dDNEKGNvbnRleHQpKTsKK30KKworU2hhcmVkQ29udGV4dDNEOjpTaGFyZWRDb250ZXh0M0Qo
UGFzc093blB0cjxHcmFwaGljc0NvbnRleHQzRD4gY29udGV4dCkKKyAgICA6IG1fY29udGV4dChj
b250ZXh0KQorICAgICwgbV9xdWFkVmVydGljZXMoMCkKKyAgICAsIG1fc29saWRGaWxsU2hhZGVy
KFNvbGlkRmlsbFNoYWRlcjo6Y3JlYXRlKG1fY29udGV4dC5nZXQoKSkpCisgICAgLCBtX3RleFNo
YWRlcihUZXhTaGFkZXI6OmNyZWF0ZShtX2NvbnRleHQuZ2V0KCkpKQorCit7Cit9CisKK1NoYXJl
ZENvbnRleHQzRDo6flNoYXJlZENvbnRleHQzRCgpCit7CisgICAgbV9jb250ZXh0LT5kZWxldGVC
dWZmZXIobV9xdWFkVmVydGljZXMpOworfQorCit2b2lkIFNoYXJlZENvbnRleHQzRDo6c2Npc3Nv
cihjb25zdCBGbG9hdFJlY3QmIHJlY3QpCit7CisgICAgbV9jb250ZXh0LT5zY2lzc29yKHJlY3Qu
eCgpLCByZWN0LnkoKSwgcmVjdC53aWR0aCgpLCByZWN0LmhlaWdodCgpKTsKK30KKwordm9pZCBT
aGFyZWRDb250ZXh0M0Q6OmVuYWJsZSh1bnNpZ25lZCBjYXBhY2l0eSkKK3sKKyAgICBtX2NvbnRl
eHQtPmVuYWJsZShjYXBhY2l0eSk7Cit9CisKK3ZvaWQgU2hhcmVkQ29udGV4dDNEOjpkaXNhYmxl
KHVuc2lnbmVkIGNhcGFjaXR5KQoreworICAgIG1fY29udGV4dC0+ZGlzYWJsZShjYXBhY2l0eSk7
Cit9CisKK3ZvaWQgU2hhcmVkQ29udGV4dDNEOjpjbGVhckNvbG9yKGNvbnN0IENvbG9yJiBjb2xv
cikKK3sKKyAgICBmbG9hdCByZ2JhWzRdOworICAgIGNvbG9yLmdldFJHQkEocmdiYVswXSwgcmdi
YVsxXSwgcmdiYVsyXSwgcmdiYVszXSk7CisgICAgbV9jb250ZXh0LT5jbGVhckNvbG9yKHJnYmFb
MF0sIHJnYmFbMV0sIHJnYmFbMl0sIHJnYmFbM10pOworfQorCit2b2lkIFNoYXJlZENvbnRleHQz
RDo6Y2xlYXIodW5zaWduZWQgbWFzaykKK3sKKyAgICBtX2NvbnRleHQtPmNsZWFyKG1hc2spOwor
fQorCit2b2lkIFNoYXJlZENvbnRleHQzRDo6ZHJhd0FycmF5cyh1bnNpZ25lZCBsb25nIG1vZGUs
IGxvbmcgZmlyc3QsIGxvbmcgY291bnQpCit7CisgICAgbV9jb250ZXh0LT5kcmF3QXJyYXlzKG1v
ZGUsIGZpcnN0LCBjb3VudCk7Cit9CisKK3Vuc2lnbmVkIGxvbmcgU2hhcmVkQ29udGV4dDNEOjpn
ZXRFcnJvcigpCit7CisgICAgcmV0dXJuIG1fY29udGV4dC0+Z2V0RXJyb3IoKTsKK30KKwordm9p
ZCBTaGFyZWRDb250ZXh0M0Q6OmdldEludGVnZXJ2KHVuc2lnbmVkIGxvbmcgcG5hbWUsIGludCog
dmFsdWUpCit7CisgICAgbV9jb250ZXh0LT5nZXRJbnRlZ2VydihwbmFtZSwgdmFsdWUpOworfQor
Cit1bnNpZ25lZCBTaGFyZWRDb250ZXh0M0Q6OmNyZWF0ZUZyYW1lYnVmZmVyKCkKK3sKKyAgICBy
ZXR1cm4gbV9jb250ZXh0LT5jcmVhdGVGcmFtZWJ1ZmZlcigpOworfQorCit1bnNpZ25lZCBTaGFy
ZWRDb250ZXh0M0Q6OmNyZWF0ZVRleHR1cmUoKQoreworICAgIHJldHVybiBtX2NvbnRleHQtPmNy
ZWF0ZVRleHR1cmUoKTsKK30KKwordm9pZCBTaGFyZWRDb250ZXh0M0Q6OmRlbGV0ZUZyYW1lYnVm
ZmVyKHVuc2lnbmVkIGZyYW1lYnVmZmVyKQoreworICAgIG1fY29udGV4dC0+ZGVsZXRlRnJhbWVi
dWZmZXIoZnJhbWVidWZmZXIpOworfQorCit2b2lkIFNoYXJlZENvbnRleHQzRDo6ZGVsZXRlVGV4
dHVyZSh1bnNpZ25lZCB0ZXh0dXJlKQoreworICAgIG1fY29udGV4dC0+ZGVsZXRlVGV4dHVyZSh0
ZXh0dXJlKTsKK30KKwordm9pZCBTaGFyZWRDb250ZXh0M0Q6OmRlbGV0ZUNvbXBvc2l0b3JUZXh0
dXJlKHVuc2lnbmVkIHRleHR1cmUpCit7CisgICAgbV9jb250ZXh0LT5kZWxldGVDb21wb3NpdG9y
VGV4dHVyZSh0ZXh0dXJlKTsKK30KKwordm9pZCBTaGFyZWRDb250ZXh0M0Q6OmZyYW1lYnVmZmVy
VGV4dHVyZTJEKHVuc2lnbmVkIGxvbmcgdGFyZ2V0LCB1bnNpZ25lZCBsb25nIGF0dGFjaG1lbnQs
IHVuc2lnbmVkIGxvbmcgdGV4dGFyZ2V0LCB1bnNpZ25lZCB0ZXh0dXJlLCBsb25nIGxldmVsKQor
eworICAgIG1fY29udGV4dC0+ZnJhbWVidWZmZXJUZXh0dXJlMkQodGFyZ2V0LCBhdHRhY2htZW50
LCB0ZXh0YXJnZXQsIHRleHR1cmUsIGxldmVsKTsKK30KKwordm9pZCBTaGFyZWRDb250ZXh0M0Q6
OnRleFBhcmFtZXRlcmkodW5zaWduZWQgdGFyZ2V0LCB1bnNpZ25lZCBwbmFtZSwgaW50IHBhcmFt
KQoreworICAgIG1fY29udGV4dC0+dGV4UGFyYW1ldGVyaSh0YXJnZXQsIHBuYW1lLCBwYXJhbSk7
Cit9CisKK2ludCBTaGFyZWRDb250ZXh0M0Q6OnRleEltYWdlMkQodW5zaWduZWQgdGFyZ2V0LCB1
bnNpZ25lZCBsZXZlbCwgdW5zaWduZWQgaW50ZXJuYWxmb3JtYXQsIHVuc2lnbmVkIHdpZHRoLCB1
bnNpZ25lZCBoZWlnaHQsIHVuc2lnbmVkIGJvcmRlciwgdW5zaWduZWQgZm9ybWF0LCB1bnNpZ25l
ZCB0eXBlLCB2b2lkKiBwaXhlbHMpCit7CisgICAgbV9jb250ZXh0LT50ZXhJbWFnZTJEKHRhcmdl
dCwgbGV2ZWwsIGludGVybmFsZm9ybWF0LCB3aWR0aCwgaGVpZ2h0LCBib3JkZXIsIGZvcm1hdCwg
dHlwZSwgcGl4ZWxzKTsKK30KKworaW50IFNoYXJlZENvbnRleHQzRDo6dGV4U3ViSW1hZ2UyRCh1
bnNpZ25lZCB0YXJnZXQsIHVuc2lnbmVkIGxldmVsLCB1bnNpZ25lZCB4b2Zmc2V0LCB1bnNpZ25l
ZCB5b2Zmc2V0LCB1bnNpZ25lZCB3aWR0aCwgdW5zaWduZWQgaGVpZ2h0LCB1bnNpZ25lZCBmb3Jt
YXQsIHVuc2lnbmVkIHR5cGUsIHZvaWQqIHBpeGVscykKK3sKKyAgICBtX2NvbnRleHQtPnRleFN1
YkltYWdlMkQodGFyZ2V0LCBsZXZlbCwgeG9mZnNldCwgeW9mZnNldCwgd2lkdGgsIGhlaWdodCwg
Zm9ybWF0LCB0eXBlLCBwaXhlbHMpOworfQorCit2b2lkIFNoYXJlZENvbnRleHQzRDo6cmVhZFBp
eGVscyhsb25nIHgsIGxvbmcgeSwgdW5zaWduZWQgbG9uZyB3aWR0aCwgdW5zaWduZWQgbG9uZyBo
ZWlnaHQsIHVuc2lnbmVkIGxvbmcgZm9ybWF0LCB1bnNpZ25lZCBsb25nIHR5cGUsIHZvaWQqIGRh
dGEpCit7CisgICAgbV9jb250ZXh0LT5yZWFkUGl4ZWxzKHgsIHksIHdpZHRoLCBoZWlnaHQsIGZv
cm1hdCwgdHlwZSwgZGF0YSk7Cit9CisKK1Bhc3NSZWZQdHI8VGV4dHVyZT4gU2hhcmVkQ29udGV4
dDNEOjpjcmVhdGVUZXh0dXJlKE5hdGl2ZUltYWdlUHRyIHB0ciwgVGV4dHVyZTo6Rm9ybWF0IGZv
cm1hdCwgaW50IHdpZHRoLCBpbnQgaGVpZ2h0KQoreworICAgIFJlZlB0cjxUZXh0dXJlPiB0ZXh0
dXJlOworICAgIGlmIChwdHIpCisgICAgICAgIHRleHR1cmUgPSBtX3RleHR1cmVzLmdldChwdHIp
OworICAgIGlmICh0ZXh0dXJlKQorICAgICAgICByZXR1cm4gdGV4dHVyZS5nZXQoKTsKKworICAg
IHRleHR1cmUgPSBUZXh0dXJlOjpjcmVhdGUobV9jb250ZXh0LmdldCgpLCBmb3JtYXQsIHdpZHRo
LCBoZWlnaHQpOworICAgIFRleHR1cmUqIHQgPSB0ZXh0dXJlLmdldCgpOworICAgIGlmIChwdHIp
CisgICAgICAgIG1fdGV4dHVyZXMuc2V0KHB0ciwgdGV4dHVyZSk7CisgICAgcmV0dXJuIHQ7Cit9
CisKK1Bhc3NSZWZQdHI8VGV4dHVyZT4gU2hhcmVkQ29udGV4dDNEOjpnZXRUZXh0dXJlKE5hdGl2
ZUltYWdlUHRyIHB0cikKK3sKKyAgICBSZWZQdHI8VGV4dHVyZT4gdGV4dHVyZSA9IG1fdGV4dHVy
ZXMuZ2V0KHB0cik7CisgICAgcmV0dXJuIHRleHR1cmUgPyB0ZXh0dXJlLmdldCgpIDogMDsKK30K
KworCit2b2lkIFNoYXJlZENvbnRleHQzRDo6YXBwbHlDb21wb3NpdGVPcGVyYXRvcihDb21wb3Np
dGVPcGVyYXRvciBvcCkKK3sKKyAgICBzd2l0Y2ggKG9wKSB7CisgICAgY2FzZSBDb21wb3NpdGVD
bGVhcjoKKyAgICAgICAgbV9jb250ZXh0LT5lbmFibGUoR3JhcGhpY3NDb250ZXh0M0Q6OkJMRU5E
KTsKKyAgICAgICAgbV9jb250ZXh0LT5ibGVuZEZ1bmMoR3JhcGhpY3NDb250ZXh0M0Q6OlpFUk8s
IEdyYXBoaWNzQ29udGV4dDNEOjpaRVJPKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBDb21w
b3NpdGVDb3B5OgorICAgICAgICBtX2NvbnRleHQtPmRpc2FibGUoR3JhcGhpY3NDb250ZXh0M0Q6
OkJMRU5EKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBDb21wb3NpdGVTb3VyY2VPdmVyOgor
ICAgICAgICBtX2NvbnRleHQtPmVuYWJsZShHcmFwaGljc0NvbnRleHQzRDo6QkxFTkQpOworICAg
ICAgICBtX2NvbnRleHQtPmJsZW5kRnVuYyhHcmFwaGljc0NvbnRleHQzRDo6T05FLCBHcmFwaGlj
c0NvbnRleHQzRDo6T05FX01JTlVTX1NSQ19BTFBIQSk7CisgICAgICAgIGJyZWFrOworICAgIGNh
c2UgQ29tcG9zaXRlU291cmNlSW46CisgICAgICAgIG1fY29udGV4dC0+ZW5hYmxlKEdyYXBoaWNz
Q29udGV4dDNEOjpCTEVORCk7CisgICAgICAgIG1fY29udGV4dC0+YmxlbmRGdW5jKEdyYXBoaWNz
Q29udGV4dDNEOjpEU1RfQUxQSEEsIEdyYXBoaWNzQ29udGV4dDNEOjpaRVJPKTsKKyAgICAgICAg
YnJlYWs7CisgICAgY2FzZSBDb21wb3NpdGVTb3VyY2VPdXQ6CisgICAgICAgIG1fY29udGV4dC0+
ZW5hYmxlKEdyYXBoaWNzQ29udGV4dDNEOjpCTEVORCk7CisgICAgICAgIG1fY29udGV4dC0+Ymxl
bmRGdW5jKEdyYXBoaWNzQ29udGV4dDNEOjpPTkVfTUlOVVNfRFNUX0FMUEhBLCBHcmFwaGljc0Nv
bnRleHQzRDo6WkVSTyk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgQ29tcG9zaXRlU291cmNl
QXRvcDoKKyAgICAgICAgbV9jb250ZXh0LT5lbmFibGUoR3JhcGhpY3NDb250ZXh0M0Q6OkJMRU5E
KTsKKyAgICAgICAgbV9jb250ZXh0LT5ibGVuZEZ1bmMoR3JhcGhpY3NDb250ZXh0M0Q6OkRTVF9B
TFBIQSwgR3JhcGhpY3NDb250ZXh0M0Q6Ok9ORV9NSU5VU19TUkNfQUxQSEEpOworICAgICAgICBi
cmVhazsKKyAgICBjYXNlIENvbXBvc2l0ZURlc3RpbmF0aW9uT3ZlcjoKKyAgICAgICAgbV9jb250
ZXh0LT5lbmFibGUoR3JhcGhpY3NDb250ZXh0M0Q6OkJMRU5EKTsKKyAgICAgICAgbV9jb250ZXh0
LT5ibGVuZEZ1bmMoR3JhcGhpY3NDb250ZXh0M0Q6Ok9ORV9NSU5VU19EU1RfQUxQSEEsIEdyYXBo
aWNzQ29udGV4dDNEOjpPTkUpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIENvbXBvc2l0ZURl
c3RpbmF0aW9uSW46CisgICAgICAgIG1fY29udGV4dC0+ZW5hYmxlKEdyYXBoaWNzQ29udGV4dDNE
OjpCTEVORCk7CisgICAgICAgIG1fY29udGV4dC0+YmxlbmRGdW5jKEdyYXBoaWNzQ29udGV4dDNE
OjpaRVJPLCBHcmFwaGljc0NvbnRleHQzRDo6U1JDX0FMUEhBKTsKKyAgICAgICAgYnJlYWs7Cisg
ICAgY2FzZSBDb21wb3NpdGVEZXN0aW5hdGlvbk91dDoKKyAgICAgICAgbV9jb250ZXh0LT5lbmFi
bGUoR3JhcGhpY3NDb250ZXh0M0Q6OkJMRU5EKTsKKyAgICAgICAgbV9jb250ZXh0LT5ibGVuZEZ1
bmMoR3JhcGhpY3NDb250ZXh0M0Q6OlpFUk8sIEdyYXBoaWNzQ29udGV4dDNEOjpPTkVfTUlOVVNf
U1JDX0FMUEhBKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBDb21wb3NpdGVEZXN0aW5hdGlv
bkF0b3A6CisgICAgICAgIG1fY29udGV4dC0+ZW5hYmxlKEdyYXBoaWNzQ29udGV4dDNEOjpCTEVO
RCk7CisgICAgICAgIG1fY29udGV4dC0+YmxlbmRGdW5jKEdyYXBoaWNzQ29udGV4dDNEOjpPTkVf
TUlOVVNfRFNUX0FMUEhBLCBHcmFwaGljc0NvbnRleHQzRDo6U1JDX0FMUEhBKTsKKyAgICAgICAg
YnJlYWs7CisgICAgY2FzZSBDb21wb3NpdGVYT1I6CisgICAgICAgIG1fY29udGV4dC0+ZW5hYmxl
KEdyYXBoaWNzQ29udGV4dDNEOjpCTEVORCk7CisgICAgICAgIG1fY29udGV4dC0+YmxlbmRGdW5j
KEdyYXBoaWNzQ29udGV4dDNEOjpPTkVfTUlOVVNfRFNUX0FMUEhBLCBHcmFwaGljc0NvbnRleHQz
RDo6T05FX01JTlVTX1NSQ19BTFBIQSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgQ29tcG9z
aXRlUGx1c0RhcmtlcjoKKyAgICBjYXNlIENvbXBvc2l0ZUhpZ2hsaWdodDoKKyAgICAgICAgLy8g
dW5zdXBwb3J0ZWQKKyAgICAgICAgbV9jb250ZXh0LT5kaXNhYmxlKEdyYXBoaWNzQ29udGV4dDNE
OjpCTEVORCk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgQ29tcG9zaXRlUGx1c0xpZ2h0ZXI6
CisgICAgICAgIG1fY29udGV4dC0+ZW5hYmxlKEdyYXBoaWNzQ29udGV4dDNEOjpCTEVORCk7Cisg
ICAgICAgIG1fY29udGV4dC0+YmxlbmRGdW5jKEdyYXBoaWNzQ29udGV4dDNEOjpPTkUsIEdyYXBo
aWNzQ29udGV4dDNEOjpPTkUpOworICAgICAgICBicmVhazsKKyAgICB9Cit9CisKK3ZvaWQgU2hh
cmVkQ29udGV4dDNEOjp1c2VRdWFkVmVydGljZXMoKQoreworICAgIGlmICghbV9xdWFkVmVydGlj
ZXMpIHsKKyAgICAgICAgZmxvYXQgdmVydGljZXNbXSA9IHsgMC4wZiwgMC4wZiwgMS4wZiwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgMS4wZiwgMC4wZiwgMS4wZiwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgMC4wZiwgMS4wZiwgMS4wZiwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgMS4wZiwgMS4wZiwgMS4wZiB9OworICAgICAgICBtX3F1YWRWZXJ0aWNlcyA9IG1f
Y29udGV4dC0+Y3JlYXRlQnVmZmVyKCk7CisgICAgICAgIG1fY29udGV4dC0+YmluZEJ1ZmZlcihH
cmFwaGljc0NvbnRleHQzRDo6QVJSQVlfQlVGRkVSLCBtX3F1YWRWZXJ0aWNlcyk7CisgICAgICAg
IG1fY29udGV4dC0+YnVmZmVyRGF0YShHcmFwaGljc0NvbnRleHQzRDo6QVJSQVlfQlVGRkVSLCBz
aXplb2YodmVydGljZXMpLCB2ZXJ0aWNlcywgR3JhcGhpY3NDb250ZXh0M0Q6OlNUQVRJQ19EUkFX
KTsKKyAgICB9IGVsc2UgeworICAgICAgICBtX2NvbnRleHQtPmJpbmRCdWZmZXIoR3JhcGhpY3ND
b250ZXh0M0Q6OkFSUkFZX0JVRkZFUiwgbV9xdWFkVmVydGljZXMpOworICAgIH0KK30KKwordm9p
ZCBTaGFyZWRDb250ZXh0M0Q6OnNldEFjdGl2ZVRleHR1cmUodW5zaWduZWQgdGV4dHVyZVVuaXQp
Cit7CisgICAgbV9jb250ZXh0LT5hY3RpdmVUZXh0dXJlKHRleHR1cmVVbml0KTsKK30KKwordm9p
ZCBTaGFyZWRDb250ZXh0M0Q6OmJpbmRUZXh0dXJlKHVuc2lnbmVkIHRhcmdldCwgdW5zaWduZWQg
dGV4dHVyZSkKK3sKKyAgICBpZiAodGFyZ2V0ICE9IEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJF
XzJEKSB7CisgICAgICAgIG1fY29udGV4dC0+YmluZFRleHR1cmUodGFyZ2V0LCB0ZXh0dXJlKTsK
KyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIG1fY29udGV4dC0+YmluZFRleHR1cmUodGFy
Z2V0LCB0ZXh0dXJlKTsKK30KKwordm9pZCBTaGFyZWRDb250ZXh0M0Q6OnVzZUZpbGxTb2xpZFBy
b2dyYW0oY29uc3QgQ29sb3ImIGNvbG9yLCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHRyYW5zZm9y
bSkKK3sKKyAgICBtX3NvbGlkRmlsbFNoYWRlci0+dXNlKHRyYW5zZm9ybSwgY29sb3IpOworfQor
Cit2b2lkIFNoYXJlZENvbnRleHQzRDo6dXNlVGV4dHVyZVByb2dyYW0oZmxvYXQgYWxwaGEsIGNv
bnN0IEFmZmluZVRyYW5zZm9ybSYgdHJhbnNmb3JtLCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHRl
eFRyYW5zZm9ybSkKK3sKKyAgICBtX3RleFNoYWRlci0+dXNlKHRyYW5zZm9ybSwgdGV4VHJhbnNm
b3JtLCAwLCBhbHBoYSk7Cit9CisKK3ZvaWQgU2hhcmVkQ29udGV4dDNEOjpiaW5kRnJhbWVidWZm
ZXIodW5zaWduZWQgZnJhbWVidWZmZXIpCit7CisgICAgbV9jb250ZXh0LT5iaW5kRnJhbWVidWZm
ZXIoR3JhcGhpY3NDb250ZXh0M0Q6OkZSQU1FQlVGRkVSLCBmcmFtZWJ1ZmZlcik7Cit9CisKK3Zv
aWQgU2hhcmVkQ29udGV4dDNEOjpzZXRWaWV3cG9ydChjb25zdCBJbnRTaXplJiBzaXplKQorewor
ICAgIG1fY29udGV4dC0+dmlld3BvcnQoMCwgMCwgc2l6ZS53aWR0aCgpLCBzaXplLmhlaWdodCgp
KTsKK30KKworYm9vbCBTaGFyZWRDb250ZXh0M0Q6OnN1cHBvcnRzQkdSQSgpCit7CisgICAgcmV0
dXJuIG1fY29udGV4dC0+c3VwcG9ydHNCR1JBKCk7Cit9CisKK3Vuc2lnbmVkIFNoYXJlZENvbnRl
eHQzRDo6Y3JlYXRlQ29tcG9zaXRvclRleHR1cmUoY29uc3QgSW50U2l6ZSYgc2l6ZSkKK3sKKyAg
ICByZXR1cm4gbV9jb250ZXh0LT5jcmVhdGVDb21wb3NpdG9yVGV4dHVyZShzaXplLndpZHRoKCks
IHNpemUuaGVpZ2h0KCkpOworfQorCit2b2lkIFNoYXJlZENvbnRleHQzRDo6Y29weVRleHR1cmVU
b0NvbXBvc2l0b3IodW5zaWduZWQgc291cmNlLCB1bnNpZ25lZCBkZXN0aW5hdGlvbikKK3sKKyAg
ICBtX2NvbnRleHQtPmNvcHlUZXh0dXJlVG9Db21wb3NpdG9yKHNvdXJjZSwgZGVzdGluYXRpb24p
OworfQorCitib29sIFNoYXJlZENvbnRleHQzRDo6cGFpbnRzSW50b0NhbnZhc0J1ZmZlcigpIGNv
bnN0Cit7CisgICAgcmV0dXJuIG1fY29udGV4dC0+cGFpbnRzSW50b0NhbnZhc0J1ZmZlcigpOwor
fQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2dwdS9TaGFyZWRDb250ZXh0M0QuaCBiL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvZ3B1L1NoYXJlZENvbnRleHQzRC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjhhYmNiMzE2ZGQyN2I5OGU3YTQ2
ODRhZGVjMjA4NTg3YWRjYmJmOGYKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2dwdS9TaGFyZWRDb250ZXh0M0QuaApAQCAtMCwwICsxLDEyMSBAQAorLyoKKyAq
IENvcHlyaWdodCAoYykgMjAxMCwgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyAqIG1ldDoKKyAqCisgKiAgICAgKiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorICogaW4gdGhlIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogZGlz
dHJpYnV0aW9uLgorICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3Ig
dGhlIG5hbWVzIG9mIGl0cworICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ug
b3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyAqIHRoaXMgc29mdHdhcmUgd2l0aG91
dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwor
ICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIE9XTkVSIE9S
IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBP
UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRI
RU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVm
IFNoYXJlZENvbnRleHQzRF9oCisjZGVmaW5lIFNoYXJlZENvbnRleHQzRF9oCisKKyNpbmNsdWRl
ICJHcmFwaGljc1R5cGVzLmgiCisjaW5jbHVkZSAiSW1hZ2VTb3VyY2UuaCIKKyNpbmNsdWRlICJU
ZXh0dXJlLmgiCisKKyNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgorI2luY2x1ZGUgPHd0Zi9Pd25Q
dHIuaD4KKyNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgorI2luY2x1ZGUgPHd0Zi9SZWZQdHIu
aD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBBZmZpbmVUcmFuc2Zvcm07CitjbGFz
cyBDYW52YXNGcmFtZWJ1ZmZlcjsKK2NsYXNzIENvbG9yOworY2xhc3MgR3JhcGhpY3NDb250ZXh0
M0Q7CitjbGFzcyBGbG9hdFJlY3Q7CitjbGFzcyBJbnRTaXplOworY2xhc3MgU29saWRGaWxsU2hh
ZGVyOworY2xhc3MgVGV4U2hhZGVyOworCit0eXBlZGVmIEhhc2hNYXA8TmF0aXZlSW1hZ2VQdHIs
IFJlZlB0cjxUZXh0dXJlPiA+IFRleHR1cmVIYXNoTWFwOworCitjbGFzcyBTaGFyZWRDb250ZXh0
M0QgOiBwdWJsaWMgUmVmQ291bnRlZDxTaGFyZWRDb250ZXh0M0Q+IHsKK3B1YmxpYzoKKyAgICBz
dGF0aWMgUGFzc1JlZlB0cjxTaGFyZWRDb250ZXh0M0Q+IGNyZWF0ZShQYXNzT3duUHRyPEdyYXBo
aWNzQ29udGV4dDNEPik7CisgICAgflNoYXJlZENvbnRleHQzRCgpOworCisgICAgLy8gRnVuY3Rp
b25zIHRoYXQgZGVsZWdhdGUgZGlyZWN0bHkgdG8gR3JhcGhpY3NDb250ZXh0M0QsIHdpdGggY2Fj
aGluZworICAgIHZvaWQgYmluZEZyYW1lYnVmZmVyKHVuc2lnbmVkIGZyYW1lYnVmZmVyKTsKKyAg
ICB2b2lkIHNldFZpZXdwb3J0KGNvbnN0IEludFNpemUmKTsKKyAgICB2b2lkIHNjaXNzb3IoY29u
c3QgRmxvYXRSZWN0Jik7CisgICAgdm9pZCBlbmFibGUodW5zaWduZWQgY2FwYWNpdHkpOworICAg
IHZvaWQgZGlzYWJsZSh1bnNpZ25lZCBjYXBhY2l0eSk7CisgICAgdm9pZCBjbGVhckNvbG9yKGNv
bnN0IENvbG9yJik7CisgICAgdm9pZCBjbGVhcih1bnNpZ25lZCBtYXNrKTsKKyAgICB2b2lkIGRy
YXdBcnJheXModW5zaWduZWQgbG9uZyBtb2RlLCBsb25nIGZpcnN0LCBsb25nIGNvdW50KTsKKyAg
ICB1bnNpZ25lZCBsb25nIGdldEVycm9yKCk7CisgICAgdm9pZCBnZXRJbnRlZ2Vydih1bnNpZ25l
ZCBsb25nIHBuYW1lLCBpbnQqIHZhbHVlKTsKKworICAgIHVuc2lnbmVkIGNyZWF0ZUZyYW1lYnVm
ZmVyKCk7CisgICAgdW5zaWduZWQgY3JlYXRlVGV4dHVyZSgpOworCisgICAgdm9pZCBkZWxldGVG
cmFtZWJ1ZmZlcih1bnNpZ25lZCBmcmFtZWJ1ZmZlcik7CisgICAgdm9pZCBkZWxldGVUZXh0dXJl
KHVuc2lnbmVkIHRleHR1cmUpOworICAgIHZvaWQgZGVsZXRlQ29tcG9zaXRvclRleHR1cmUodW5z
aWduZWQgdGV4dHVyZSk7CisKKyAgICB2b2lkIGZyYW1lYnVmZmVyVGV4dHVyZTJEKHVuc2lnbmVk
IGxvbmcgdGFyZ2V0LCB1bnNpZ25lZCBsb25nIGF0dGFjaG1lbnQsIHVuc2lnbmVkIGxvbmcgdGV4
dGFyZ2V0LCB1bnNpZ25lZCwgbG9uZyBsZXZlbCk7CisgICAgdm9pZCB0ZXhQYXJhbWV0ZXJpKHVu
c2lnbmVkIHRhcmdldCwgdW5zaWduZWQgcG5hbWUsIGludCBwYXJhbSk7CisgICAgaW50IHRleElt
YWdlMkQodW5zaWduZWQgdGFyZ2V0LCB1bnNpZ25lZCBsZXZlbCwgdW5zaWduZWQgaW50ZXJuYWxm
b3JtYXQsIHVuc2lnbmVkIHdpZHRoLCB1bnNpZ25lZCBoZWlnaHQsIHVuc2lnbmVkIGJvcmRlciwg
dW5zaWduZWQgZm9ybWF0LCB1bnNpZ25lZCB0eXBlLCB2b2lkKiBwaXhlbHMpOworICAgIGludCB0
ZXhTdWJJbWFnZTJEKHVuc2lnbmVkIHRhcmdldCwgdW5zaWduZWQgbGV2ZWwsIHVuc2lnbmVkIHhv
ZmZzZXQsIHVuc2lnbmVkIHlvZmZzZXQsIHVuc2lnbmVkIHdpZHRoLCB1bnNpZ25lZCBoZWlnaHQs
IHVuc2lnbmVkIGZvcm1hdCwgdW5zaWduZWQgdHlwZSwgdm9pZCogcGl4ZWxzKTsKKworICAgIHZv
aWQgcmVhZFBpeGVscyhsb25nIHgsIGxvbmcgeSwgdW5zaWduZWQgbG9uZyB3aWR0aCwgdW5zaWdu
ZWQgbG9uZyBoZWlnaHQsIHVuc2lnbmVkIGxvbmcgZm9ybWF0LCB1bnNpZ25lZCBsb25nIHR5cGUs
IHZvaWQqIGRhdGEpOworCisgICAgYm9vbCBzdXBwb3J0c0JHUkEoKTsKKyAgICB1bnNpZ25lZCBj
cmVhdGVDb21wb3NpdG9yVGV4dHVyZShjb25zdCBJbnRTaXplJik7CisgICAgdm9pZCBjb3B5VGV4
dHVyZVRvQ29tcG9zaXRvcih1bnNpZ25lZCwgdW5zaWduZWQpOworCisgICAgYm9vbCBwYWludHNJ
bnRvQ2FudmFzQnVmZmVyKCkgY29uc3Q7CisKKyAgICAvLyBTaGFyZWQgbG9naWMgZm9yIGNhbnZh
cyAyZAorICAgIHZvaWQgYXBwbHlDb21wb3NpdGVPcGVyYXRvcihDb21wb3NpdGVPcGVyYXRvcik7
CisgICAgdm9pZCB1c2VRdWFkVmVydGljZXMoKTsKKworICAgIHZvaWQgdXNlRmlsbFNvbGlkUHJv
Z3JhbShjb25zdCBDb2xvciYsIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYpOworICAgIHZvaWQgdXNl
VGV4dHVyZVByb2dyYW0oZmxvYXQgYWxwaGEsIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYsIGNvbnN0
IEFmZmluZVRyYW5zZm9ybSYpOworCisgICAgdm9pZCBzZXRBY3RpdmVUZXh0dXJlKHVuc2lnbmVk
IHRleHR1cmVVbml0KTsKKyAgICB2b2lkIGJpbmRUZXh0dXJlKHVuc2lnbmVkIHRhcmdldCwgdW5z
aWduZWQgdGV4dHVyZSk7CisKKyAgICBQYXNzUmVmUHRyPFRleHR1cmU+IGNyZWF0ZVRleHR1cmUo
TmF0aXZlSW1hZ2VQdHIsIFRleHR1cmU6OkZvcm1hdCwgaW50IHdpZHRoLCBpbnQgaGVpZ2h0KTsK
KyAgICBQYXNzUmVmUHRyPFRleHR1cmU+IGdldFRleHR1cmUoTmF0aXZlSW1hZ2VQdHIpOworCitw
cml2YXRlOgorICAgIFNoYXJlZENvbnRleHQzRChQYXNzT3duUHRyPEdyYXBoaWNzQ29udGV4dDNE
PiBjb250ZXh0KTsKKworICAgIE93blB0cjxHcmFwaGljc0NvbnRleHQzRD4gbV9jb250ZXh0Owor
CisgICAgdW5zaWduZWQgbV9xdWFkVmVydGljZXM7CisKKyAgICBPd25QdHI8U29saWRGaWxsU2hh
ZGVyPiBtX3NvbGlkRmlsbFNoYWRlcjsKKyAgICBPd25QdHI8VGV4U2hhZGVyPiBtX3RleFNoYWRl
cjsKKworICAgIFRleHR1cmVIYXNoTWFwIG1fdGV4dHVyZXM7Cit9OworCit9IC8vIG5hbWVzcGFj
ZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBTaGFyZWRDb250ZXh0M0RfaApkaWZmIC0tZ2l0IGEvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ncHUvVGV4dHVyZS5jcHAgYi9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2dwdS9UZXh0dXJlLmNwcAppbmRleCA1NTc2MDNjOTc2MzJmZTBmMzhmNWI3MzZl
YzY1YTNjNjVjNzE0MjM2Li4zNmU0YWQ1ZWZjMjY4MmRiNWEwOTgyOTIwMjNjMmQzYjVmYTk2ZDc4
IDEwMDY0NAotLS0gYS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dwdS9UZXh0dXJlLmNwcAor
KysgYi9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dwdS9UZXh0dXJlLmNwcApAQCAtMzQsNiAr
MzQsNyBAQAogCiAjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0M0QuaCIKICNpbmNsdWRlICJJbnRS
ZWN0LmgiCisKICNpbmNsdWRlIDx3dGYvT3duQXJyYXlQdHIuaD4KIAogbmFtZXNwYWNlIFdlYkNv
cmUgewpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9tYWMvR3JhcGhpY3NM
YXllckNBLmggYi9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL21hYy9HcmFwaGljc0xheWVyQ0Eu
aAppbmRleCBhOWY3NDdhZDAwNGQ4MmUzOTYzOTQ3YTk2NDJkMmMxNTI5MjQ1YjQzLi4xY2EwMjc5
NDEzNmRjODgzNzc2NGZkZjRlYmYzM2IwZTEyNTAyYjRiIDEwMDY0NAotLS0gYS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL21hYy9HcmFwaGljc0xheWVyQ0EuaAorKysgYi9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL21hYy9HcmFwaGljc0xheWVyQ0EuaApAQCAtMTAzLDcgKzEwMyw3IEBAIHB1
YmxpYzoKICAgICAKICAgICB2aXJ0dWFsIHZvaWQgc2V0Q29udGVudHNUb0ltYWdlKEltYWdlKik7
CiAgICAgdmlydHVhbCB2b2lkIHNldENvbnRlbnRzVG9NZWRpYShQbGF0Zm9ybUxheWVyKik7Ci0g
ICAgdmlydHVhbCB2b2lkIHNldENvbnRlbnRzVG9DYW52YXMoUGxhdGZvcm1MYXllciopOworICAg
IHZpcnR1YWwgdm9pZCBzZXRDb250ZW50c1RvV2ViR0woUGxhdGZvcm1MYXllciopOwogCiAgICAg
dmlydHVhbCBib29sIGhhc0NvbnRlbnRzTGF5ZXIoKSBjb25zdCB7IHJldHVybiBtX2NvbnRlbnRz
TGF5ZXI7IH0KICAgICAKZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvbWFj
L0dyYXBoaWNzTGF5ZXJDQS5tbSBiL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL0dyYXBo
aWNzTGF5ZXJDQS5tbQppbmRleCAzMTVjYzAwOTEwM2M2OThmYTAwMTQ3YjQ5M2Y4NjU0OWM4MWYy
Y2FlLi4wMDE3Y2JmZTU3NDA5N2JlYjc5MGQ1ODJkMDg2Y2ExNTgxMzI3MWM3IDEwMDY0NAotLS0g
YS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL21hYy9HcmFwaGljc0xheWVyQ0EubW0KKysrIGIv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9tYWMvR3JhcGhpY3NMYXllckNBLm1tCkBAIC0xNzMx
LDcgKzE3MzEsNyBAQCB2b2lkIEdyYXBoaWNzTGF5ZXJDQTo6cGF1c2VBbmltYXRpb25PbkxheWVy
KEFuaW1hdGVkUHJvcGVydHlJRCBwcm9wZXJ0eSwgY29uc3QgUwogICAgIH0KIH0KIAotdm9pZCBH
cmFwaGljc0xheWVyQ0E6OnNldENvbnRlbnRzVG9DYW52YXMoUGxhdGZvcm1MYXllciogY2FudmFz
TGF5ZXIpCit2b2lkIEdyYXBoaWNzTGF5ZXJDQTo6c2V0Q29udGVudHNUb1dlYkdMKFBsYXRmb3Jt
TGF5ZXIqIGNhbnZhc0xheWVyKQogewogICAgIGlmIChjYW52YXNMYXllciA9PSBtX2NvbnRlbnRz
TGF5ZXIpCiAgICAgICAgIHJldHVybjsKZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3Mvc2tpYS9HcmFwaGljc0NvbnRleHRTa2lhLmNwcCBiL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3Mvc2tpYS9HcmFwaGljc0NvbnRleHRTa2lhLmNwcAppbmRleCBiNGZkZGQ1NjhkZTVlOTEy
OGUxMzdlODU1ZDM4OGRjYzZhOTI4OGIzLi5hNzdmMTIyYjk0MzI3NDk5ZTAxMjM4NWI3OWI5NDQ0
MzVmMzQ1M2YzIDEwMDY0NAotLS0gYS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3NraWEvR3Jh
cGhpY3NDb250ZXh0U2tpYS5jcHAKKysrIGIvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9za2lh
L0dyYXBoaWNzQ29udGV4dFNraWEuY3BwCkBAIC0xMjQyLDkgKzEyNDIsOSBAQCB2b2lkIEdyYXBo
aWNzQ29udGV4dDo6dHJhbnNsYXRlKGZsb2F0IHcsIGZsb2F0IGgpCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgV2ViQ29yZUZsb2F0VG9Ta1NjYWxhcihoKSk7CiB9
CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpzZXRHcmFwaGljc0NvbnRleHQzRChHcmFwaGljc0Nv
bnRleHQzRCogY29udGV4dDNELCBjb25zdCBJbnRTaXplJiBzaXplKQordm9pZCBHcmFwaGljc0Nv
bnRleHQ6OnNldFNoYXJlZENvbnRleHQzRChTaGFyZWRDb250ZXh0M0QqIGNvbnRleHQsIENhbnZh
c0ZyYW1lYnVmZmVyKiBmcmFtZWJ1ZmZlciwgY29uc3QgSW50U2l6ZSYgc2l6ZSkKIHsKLSAgICBw
bGF0Zm9ybUNvbnRleHQoKS0+c2V0R3JhcGhpY3NDb250ZXh0M0QoY29udGV4dDNELCBzaXplKTsK
KyAgICBwbGF0Zm9ybUNvbnRleHQoKS0+c2V0U2hhcmVkQ29udGV4dDNEKGNvbnRleHQsIGZyYW1l
YnVmZmVyLCBzaXplKTsKIH0KIAogdm9pZCBHcmFwaGljc0NvbnRleHQ6OnN5bmNTb2Z0d2FyZUNh
bnZhcygpCkBAIC0xMjUyLDQgKzEyNTIsMTQgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6OnN5bmNT
b2Z0d2FyZUNhbnZhcygpCiAgICAgcGxhdGZvcm1Db250ZXh0KCktPnN5bmNTb2Z0d2FyZUNhbnZh
cygpOwogfQogCit1bnNpZ25lZCBHcmFwaGljc0NvbnRleHQ6OnRleHR1cmVJZEZvckNvbXBvc2l0
b3IoKSBjb25zdAoreworICAgIHJldHVybiBwbGF0Zm9ybUNvbnRleHQoKS0+Z3B1Q2FudmFzKCkt
PnRleHR1cmVJZEZvckNvbXBvc2l0b3IoKTsKK30KKwordW5zaWduZWQgR3JhcGhpY3NDb250ZXh0
Ojp0ZXh0dXJlSWRGb3JDYW52YXMoKSBjb25zdAoreworICAgIHJldHVybiBwbGF0Zm9ybUNvbnRl
eHQoKS0+Z3B1Q2FudmFzKCktPnRleHR1cmVJZEZvckNhbnZhcygpOworfQorCiB9ICAvLyBuYW1l
c3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9za2lh
L0ltYWdlQnVmZmVyU2tpYS5jcHAgYi9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3NraWEvSW1h
Z2VCdWZmZXJTa2lhLmNwcAppbmRleCA5NDAzNDA2MzAwYTdmZTc5ZmUwNGZlMjFjZjE0OTU1ZTcy
YTI1OWRiLi41MjgyNDQ0OWVlZWYzYTNjNTU4NzM3ODUxYzRjNDg3MWQ3MWFkZWViIDEwMDY0NAot
LS0gYS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3NraWEvSW1hZ2VCdWZmZXJTa2lhLmNwcAor
KysgYi9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3NraWEvSW1hZ2VCdWZmZXJTa2lhLmNwcApA
QCAtMzYsNiArMzYsNyBAQAogI2luY2x1ZGUgIkJhc2U2NC5oIgogI2luY2x1ZGUgIkJpdG1hcElt
YWdlLmgiCiAjaW5jbHVkZSAiQml0bWFwSW1hZ2VTaW5nbGVGcmFtZVNraWEuaCIKKyNpbmNsdWRl
ICJHTEVTMkNhbnZhcy5oIgogI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgogI2luY2x1ZGUg
IkltYWdlRGF0YS5oIgogI2luY2x1ZGUgIlBsYXRmb3JtQ29udGV4dFNraWEuaCIKQEAgLTEwOCw2
ICsxMDksMTYgQEAgdm9pZCBJbWFnZUJ1ZmZlcjo6Y2xpcChHcmFwaGljc0NvbnRleHQqIGNvbnRl
eHQsIGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkgY29uc3QKIHZvaWQgSW1hZ2VCdWZmZXI6OmRyYXco
R3JhcGhpY3NDb250ZXh0KiBjb250ZXh0LCBDb2xvclNwYWNlIHN0eWxlQ29sb3JTcGFjZSwgY29u
c3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0LAogICAgICAg
ICAgICAgICAgICAgICAgICBDb21wb3NpdGVPcGVyYXRvciBvcCwgYm9vbCB1c2VMb3dRdWFsaXR5
U2NhbGUpCiB7CisgICAgaWYgKGNvbnRleHQtPnBsYXRmb3JtQ29udGV4dCgpLT51c2VHUFUoKSAm
JiBtX2RhdGEubV9wbGF0Zm9ybUNvbnRleHQudXNlR1BVKCkpIHsKKyAgICAgICAgUGxhdGZvcm1D
b250ZXh0U2tpYSogc291cmNlUGxhdGZvcm1Db250ZXh0ID0gJm1fZGF0YS5tX3BsYXRmb3JtQ29u
dGV4dDsKKyAgICAgICAgc291cmNlUGxhdGZvcm1Db250ZXh0LT5wcmVwYXJlRm9ySGFyZHdhcmVE
cmF3KCk7CisgICAgICAgIEZsb2F0UmVjdCBkZXN0UmVjdEZsaXBwZWQoZGVzdFJlY3QpOworICAg
ICAgICBkZXN0UmVjdEZsaXBwZWQuc2V0WShkZXN0UmVjdC5ib3R0b20oKSk7CisgICAgICAgIGRl
c3RSZWN0RmxpcHBlZC5zZXRIZWlnaHQoLWRlc3RSZWN0LmhlaWdodCgpKTsKKyAgICAgICAgY29u
dGV4dC0+cGxhdGZvcm1Db250ZXh0KCktPmdwdUNhbnZhcygpLT5kcmF3VGV4dHVyZWRSZWN0KHNv
dXJjZVBsYXRmb3JtQ29udGV4dC0+Z3B1Q2FudmFzKCktPnRleHR1cmVJZEZvckNhbnZhcygpLCBt
X3NpemUsIHNyY1JlY3QsIGRlc3RSZWN0RmxpcHBlZCwgc3R5bGVDb2xvclNwYWNlLCBvcCk7Cisg
ICAgICAgIHJldHVybjsKKyAgICB9CisKICAgICBSZWZQdHI8SW1hZ2U+IGltYWdlID0gQml0bWFw
SW1hZ2VTaW5nbGVGcmFtZVNraWE6OmNyZWF0ZSgqbV9kYXRhLm1fcGxhdGZvcm1Db250ZXh0LmJp
dG1hcCgpLCBjb250ZXh0ID09IG1fY29udGV4dCk7CiAgICAgY29udGV4dC0+ZHJhd0ltYWdlKGlt
YWdlLmdldCgpLCBzdHlsZUNvbG9yU3BhY2UsIGRlc3RSZWN0LCBzcmNSZWN0LCBvcCwgdXNlTG93
UXVhbGl0eVNjYWxlKTsKIH0KZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
c2tpYS9JbWFnZVNraWEuY3BwIGIvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9za2lhL0ltYWdl
U2tpYS5jcHAKaW5kZXggYWVkMjg5ZmUzYzE1NWFhNWQzNTk2ZDQ5NGI2MDg5M2U0YzAxNmJiNi4u
YzUxN2E4YTgwOGJhOWY2ZWZiMGI4MjFlZjE1OGRjNGRkYjk5ZTczZiAxMDA2NDQKLS0tIGEvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9za2lhL0ltYWdlU2tpYS5jcHAKKysrIGIvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9za2lhL0ltYWdlU2tpYS5jcHAKQEAgLTQ3LDYgKzQ3LDcgQEAKICNp
bmNsdWRlICJTa1JlY3QuaCIKICNpbmNsdWRlICJTa1NoYWRlci5oIgogI2luY2x1ZGUgIlNraWFV
dGlscy5oIgorI2luY2x1ZGUgIlRleHR1cmUuaCIKIAogI2luY2x1ZGUgInNraWEvZXh0L2ltYWdl
X29wZXJhdGlvbnMuaCIKICNpbmNsdWRlICJza2lhL2V4dC9wbGF0Zm9ybV9jYW52YXMuaCIKQEAg
LTQxMSw3ICs0MTIsNyBAQCBzdGF0aWMgdm9pZCBkcmF3Qml0bWFwR0xFUzIoR3JhcGhpY3NDb250
ZXh0KiBjdHh0LCBOYXRpdmVJbWFnZVNraWEqIGJpdG1hcCwgY29ucwogewogICAgIGN0eHQtPnBs
YXRmb3JtQ29udGV4dCgpLT5wcmVwYXJlRm9ySGFyZHdhcmVEcmF3KCk7CiAgICAgR0xFUzJDYW52
YXMqIGdwdUNhbnZhcyA9IGN0eHQtPnBsYXRmb3JtQ29udGV4dCgpLT5ncHVDYW52YXMoKTsKLSAg
ICBUZXh0dXJlKiB0ZXh0dXJlID0gZ3B1Q2FudmFzLT5nZXRUZXh0dXJlKGJpdG1hcCk7CisgICAg
UmVmUHRyPFRleHR1cmU+IHRleHR1cmUgPSBncHVDYW52YXMtPmdldFRleHR1cmUoYml0bWFwKTsK
ICAgICBpZiAoIXRleHR1cmUpIHsKICAgICAgICAgQVNTRVJUKGJpdG1hcC0+Y29uZmlnKCkgPT0g
U2tCaXRtYXA6OmtBUkdCXzg4ODhfQ29uZmlnKTsKICAgICAgICAgQVNTRVJUKGJpdG1hcC0+cm93
Qnl0ZXMoKSA9PSBiaXRtYXAtPndpZHRoKCkgKiA0KTsKQEAgLTQyMCw3ICs0MjEsNyBAQCBzdGF0
aWMgdm9pZCBkcmF3Qml0bWFwR0xFUzIoR3JhcGhpY3NDb250ZXh0KiBjdHh0LCBOYXRpdmVJbWFn
ZVNraWEqIGJpdG1hcCwgY29ucwogICAgICAgICBBU1NFUlQoYml0bWFwLT5nZXRQaXhlbHMoKSk7
CiAgICAgICAgIHRleHR1cmUtPmxvYWQoYml0bWFwLT5nZXRQaXhlbHMoKSk7CiAgICAgfQotICAg
IGdwdUNhbnZhcy0+ZHJhd1RleHR1cmVkUmVjdCh0ZXh0dXJlLCBzcmNSZWN0LCBkc3RSZWN0LCBz
dHlsZUNvbG9yU3BhY2UsIGNvbXBvc2l0ZU9wKTsKKyAgICBncHVDYW52YXMtPmRyYXdUZXh0dXJl
ZFJlY3QodGV4dHVyZS5nZXQoKSwgc3JjUmVjdCwgZHN0UmVjdCwgc3R5bGVDb2xvclNwYWNlLCBj
b21wb3NpdGVPcCk7CiB9CiAKIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9za2lh
L1BsYXRmb3JtQ29udGV4dFNraWEuY3BwIGIvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9za2lh
L1BsYXRmb3JtQ29udGV4dFNraWEuY3BwCmluZGV4IDNiMWQwMTVjZjEyMjM5NTI3NDNlN2FhNzY0
OTM3MmFjNDc2YzhmNTIuLmM1NGVhOWY1YzA4NWQ3ZTgxYTJmNmYwZTllY2QwZmE1ODk0YzQ1OTUg
MTAwNjQ0Ci0tLSBhL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc2tpYS9QbGF0Zm9ybUNvbnRl
eHRTa2lhLmNwcAorKysgYi9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3NraWEvUGxhdGZvcm1D
b250ZXh0U2tpYS5jcHAKQEAgLTMzLDEyICszMywxNCBAQAogI2luY2x1ZGUgIlBsYXRmb3JtQ29u
dGV4dFNraWEuaCIKIAogI2luY2x1ZGUgIkFmZmluZVRyYW5zZm9ybS5oIgotI2luY2x1ZGUgIkNh
bnZhc0xheWVyQ2hyb21pdW0uaCIKKyNpbmNsdWRlICJDYW52YXNGcmFtZWJ1ZmZlci5oIgorI2lu
Y2x1ZGUgIldlYkdMTGF5ZXJDaHJvbWl1bS5oIgogI2luY2x1ZGUgIkdMRVMyQ2FudmFzLmgiCiAj
aW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCiAjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0M0Qu
aCIKICNpbmNsdWRlICJJbWFnZUJ1ZmZlci5oIgogI2luY2x1ZGUgIk5hdGl2ZUltYWdlU2tpYS5o
IgorI2luY2x1ZGUgIlNoYXJlZENvbnRleHQzRC5oIgogI2luY2x1ZGUgIlNraWFVdGlscy5oIgog
I2luY2x1ZGUgIlRleHR1cmUuaCIKICNpbmNsdWRlICJUaWxpbmdEYXRhLmgiCkBAIC0yMTYsMTIg
KzIxOCw2IEBAIFBsYXRmb3JtQ29udGV4dFNraWE6OlBsYXRmb3JtQ29udGV4dFNraWEoc2tpYTo6
UGxhdGZvcm1DYW52YXMqIGNhbnZhcykKIAogUGxhdGZvcm1Db250ZXh0U2tpYTo6flBsYXRmb3Jt
Q29udGV4dFNraWEoKQogewotI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKLSAgICBp
ZiAobV9ncHVDYW52YXMpIHsKLSAgICAgICAgQ2FudmFzTGF5ZXJDaHJvbWl1bSogbGF5ZXIgPSBz
dGF0aWNfY2FzdDxDYW52YXNMYXllckNocm9taXVtKj4obV9ncHVDYW52YXMtPmNvbnRleHQoKS0+
cGxhdGZvcm1MYXllcigpKTsKLSAgICAgICAgbGF5ZXItPnNldFByZXBhcmVUZXh0dXJlQ2FsbGJh
Y2soMCk7Ci0gICAgfQotI2VuZGlmCiB9CiAKIHZvaWQgUGxhdGZvcm1Db250ZXh0U2tpYTo6c2V0
Q2FudmFzKHNraWE6OlBsYXRmb3JtQ2FudmFzKiBjYW52YXMpCkBAIC02NzgsMzMgKzY3NCwzMyBA
QCB2b2lkIFBsYXRmb3JtQ29udGV4dFNraWE6OmFwcGx5QW50aUFsaWFzZWRDbGlwUGF0aHMoV1RG
OjpWZWN0b3I8U2tQYXRoPiYgcGF0aHMpCiAgICAgbV9jYW52YXMtPnJlc3RvcmUoKTsKIH0KIAot
I2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKLWNsYXNzIFByZXBhcmVUZXh0dXJlQ2Fs
bGJhY2tJbXBsIDogcHVibGljIENhbnZhc0xheWVyQ2hyb21pdW06OlByZXBhcmVUZXh0dXJlQ2Fs
bGJhY2sgeworY2xhc3MgU3dhcEJ1ZmZlcnNDYWxsYmFja0ltcGwgOiBwdWJsaWMgQ2FudmFzRnJh
bWVidWZmZXI6OlN3YXBCdWZmZXJzQ2FsbGJhY2sgewogcHVibGljOgotICAgIHN0YXRpYyBQYXNz
T3duUHRyPFByZXBhcmVUZXh0dXJlQ2FsbGJhY2tJbXBsPiBjcmVhdGUoUGxhdGZvcm1Db250ZXh0
U2tpYSogcGNzKQorICAgIHN0YXRpYyBQYXNzT3duUHRyPFN3YXBCdWZmZXJzQ2FsbGJhY2s+IGNy
ZWF0ZShQbGF0Zm9ybUNvbnRleHRTa2lhKiBwY3MpCiAgICAgewotICAgICAgICByZXR1cm4gbmV3
IFByZXBhcmVUZXh0dXJlQ2FsbGJhY2tJbXBsKHBjcyk7CisgICAgICAgIHJldHVybiBhZG9wdFB0
cihuZXcgU3dhcEJ1ZmZlcnNDYWxsYmFja0ltcGwocGNzKSk7CiAgICAgfQogCi0gICAgdmlydHVh
bCB2b2lkIHdpbGxQcmVwYXJlVGV4dHVyZSgpCisgICAgdmlydHVhbCB2b2lkIHdpbGxTd2FwQnVm
ZmVycygpCiAgICAgewogICAgICAgICBtX3Bjcy0+cHJlcGFyZUZvckhhcmR3YXJlRHJhdygpOwog
ICAgIH0KKwogcHJpdmF0ZToKLSAgICBleHBsaWNpdCBQcmVwYXJlVGV4dHVyZUNhbGxiYWNrSW1w
bChQbGF0Zm9ybUNvbnRleHRTa2lhKiBwY3MpIDogbV9wY3MocGNzKSB7fQorICAgIGV4cGxpY2l0
IFN3YXBCdWZmZXJzQ2FsbGJhY2tJbXBsKFBsYXRmb3JtQ29udGV4dFNraWEqIHBjcykKKyAgICAg
ICAgOiBtX3BjcyhwY3MpCisgICAgeworICAgIH0KKwogICAgIFBsYXRmb3JtQ29udGV4dFNraWEq
IG1fcGNzOwogfTsKLSNlbmRpZgogCi12b2lkIFBsYXRmb3JtQ29udGV4dFNraWE6OnNldEdyYXBo
aWNzQ29udGV4dDNEKEdyYXBoaWNzQ29udGV4dDNEKiBjb250ZXh0LCBjb25zdCBXZWJDb3JlOjpJ
bnRTaXplJiBzaXplKQordm9pZCBQbGF0Zm9ybUNvbnRleHRTa2lhOjpzZXRTaGFyZWRDb250ZXh0
M0QoU2hhcmVkQ29udGV4dDNEKiBjb250ZXh0LCBDYW52YXNGcmFtZWJ1ZmZlciogZnJhbWVidWZm
ZXIsIGNvbnN0IFdlYkNvcmU6OkludFNpemUmIHNpemUpCiB7CiAgICAgbV91c2VHUFUgPSB0cnVl
OwotICAgIG1fZ3B1Q2FudmFzID0gbmV3IEdMRVMyQ2FudmFzKGNvbnRleHQsIHNpemUpOworICAg
IG1fZ3B1Q2FudmFzID0gbmV3IEdMRVMyQ2FudmFzKGNvbnRleHQsIGZyYW1lYnVmZmVyLCBzaXpl
KTsKICAgICBtX3VwbG9hZFRleHR1cmUuY2xlYXIoKTsKLSNpZiBVU0UoQUNDRUxFUkFURURfQ09N
UE9TSVRJTkcpCi0gICAgQ2FudmFzTGF5ZXJDaHJvbWl1bSogbGF5ZXIgPSBzdGF0aWNfY2FzdDxD
YW52YXNMYXllckNocm9taXVtKj4oY29udGV4dC0+cGxhdGZvcm1MYXllcigpKTsKLSAgICBsYXll
ci0+c2V0UHJlcGFyZVRleHR1cmVDYWxsYmFjayhQcmVwYXJlVGV4dHVyZUNhbGxiYWNrSW1wbDo6
Y3JlYXRlKHRoaXMpKTsKLSNlbmRpZgorICAgIGZyYW1lYnVmZmVyLT5zZXRXaWxsU3dhcEJ1ZmZl
cnNDYWxsYmFjayhTd2FwQnVmZmVyc0NhbGxiYWNrSW1wbDo6Y3JlYXRlKHRoaXMpKTsKIH0KIAog
dm9pZCBQbGF0Zm9ybUNvbnRleHRTa2lhOjpwcmVwYXJlRm9yU29mdHdhcmVEcmF3KCkgY29uc3QK
QEAgLTc2Myw2ICs3NTksMTIgQEAgdm9pZCBQbGF0Zm9ybUNvbnRleHRTa2lhOjpwcmVwYXJlRm9y
SGFyZHdhcmVEcmF3KCkgY29uc3QKICAgICBtX2JhY2tpbmdTdG9yZVN0YXRlID0gSGFyZHdhcmU7
CiB9CiAKK3ZvaWQgUGxhdGZvcm1Db250ZXh0U2tpYTo6c3dhcEJ1ZmZlcnMoKQoreworICAgIGlm
IChtX3VzZUdQVSkKKyAgICAgICAgbV9ncHVDYW52YXMtPnN3YXBCdWZmZXJzKCk7Cit9CisKIHZv
aWQgUGxhdGZvcm1Db250ZXh0U2tpYTo6c3luY1NvZnR3YXJlQ2FudmFzKCkgY29uc3QKIHsKICAg
ICBpZiAoIW1fdXNlR1BVKQpAQCAtNzg0LDkgKzc4Niw5IEBAIHZvaWQgUGxhdGZvcm1Db250ZXh0
U2tpYTo6dXBsb2FkU29mdHdhcmVUb0hhcmR3YXJlKENvbXBvc2l0ZU9wZXJhdG9yIG9wKSBjb25z
dAogewogICAgIGNvbnN0IFNrQml0bWFwJiBiaXRtYXAgPSBtX2NhbnZhcy0+Z2V0RGV2aWNlKCkt
PmFjY2Vzc0JpdG1hcChmYWxzZSk7CiAgICAgU2tBdXRvTG9ja1BpeGVscyBsb2NrKGJpdG1hcCk7
Ci0gICAgR3JhcGhpY3NDb250ZXh0M0QqIGNvbnRleHQgPSBtX2dwdUNhbnZhcy0+Y29udGV4dCgp
OworICAgIFNoYXJlZENvbnRleHQzRCogY29udGV4dCA9IG1fZ3B1Q2FudmFzLT5jb250ZXh0KCk7
CiAgICAgaWYgKCFtX3VwbG9hZFRleHR1cmUgfHwgbV91cGxvYWRUZXh0dXJlLT50aWxlcygpLnRv
dGFsU2l6ZVgoKSA8IGJpdG1hcC53aWR0aCgpIHx8IG1fdXBsb2FkVGV4dHVyZS0+dGlsZXMoKS50
b3RhbFNpemVZKCkgPCBiaXRtYXAuaGVpZ2h0KCkpCi0gICAgICAgIG1fdXBsb2FkVGV4dHVyZSA9
IFRleHR1cmU6OmNyZWF0ZShjb250ZXh0LCBUZXh0dXJlOjpCR1JBOCwgYml0bWFwLndpZHRoKCks
IGJpdG1hcC5oZWlnaHQoKSk7CisgICAgICAgIG1fdXBsb2FkVGV4dHVyZSA9IGNvbnRleHQtPmNy
ZWF0ZVRleHR1cmUoMCwgVGV4dHVyZTo6QkdSQTgsIGJpdG1hcC53aWR0aCgpLCBiaXRtYXAuaGVp
Z2h0KCkpOwogICAgIG1fdXBsb2FkVGV4dHVyZS0+bG9hZChiaXRtYXAuZ2V0UGl4ZWxzKCkpOwog
ICAgIEludFJlY3QgcmVjdCgwLCAwLCBiaXRtYXAud2lkdGgoKSwgYml0bWFwLmhlaWdodCgpKTsK
ICAgICBBZmZpbmVUcmFuc2Zvcm0gaWRlbnRpdHk7CkBAIC03OTksNyArODAxLDggQEAgdm9pZCBQ
bGF0Zm9ybUNvbnRleHRTa2lhOjpyZWFkYmFja0hhcmR3YXJlVG9Tb2Z0d2FyZSgpIGNvbnN0CiAg
ICAgU2tBdXRvTG9ja1BpeGVscyBsb2NrKGJpdG1hcCk7CiAgICAgaW50IHdpZHRoID0gYml0bWFw
LndpZHRoKCksIGhlaWdodCA9IGJpdG1hcC5oZWlnaHQoKTsKICAgICBPd25BcnJheVB0cjx1aW50
MzJfdD4gYnVmKG5ldyB1aW50MzJfdFt3aWR0aF0pOwotICAgIEdyYXBoaWNzQ29udGV4dDNEKiBj
b250ZXh0ID0gbV9ncHVDYW52YXMtPmNvbnRleHQoKTsKKyAgICBTaGFyZWRDb250ZXh0M0QqIGNv
bnRleHQgPSBtX2dwdUNhbnZhcy0+Y29udGV4dCgpOworICAgIG1fZ3B1Q2FudmFzLT5iaW5kRnJh
bWVidWZmZXIoKTsKICAgICAvLyBGbGlwcyB0aGUgaW1hZ2UgdmVydGljYWxseS4KICAgICBmb3Ig
KGludCB5ID0gMDsgeSA8IGhlaWdodDsgKyt5KSB7CiAgICAgICAgIHVpbnQzMl90KiBwaXhlbHMg
PSBiaXRtYXAuZ2V0QWRkcjMyKDAsIHkpOwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9za2lhL1BsYXRmb3JtQ29udGV4dFNraWEuaCBiL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3Mvc2tpYS9QbGF0Zm9ybUNvbnRleHRTa2lhLmgKaW5kZXggODJlZGMxNmQxZmNjZjhhZTll
MTk1MWM5MjUyY2NjOWU5NTZmNDEwMC4uZTMzMmY2NGJhZGUzMTcxZWYxMzUxN2FiYmFkNzVmMjFi
YmZjYjVjNiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9za2lhL1BsYXRm
b3JtQ29udGV4dFNraWEuaAorKysgYi9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3NraWEvUGxh
dGZvcm1Db250ZXh0U2tpYS5oCkBAIC0zNSw3ICszNSw2IEBACiAjaW5jbHVkZSAiTm9uY29weWFi
bGUuaCIKIAogI2luY2x1ZGUgIlNrRGFzaFBhdGhFZmZlY3QuaCIKLSNpbmNsdWRlICJTa0RlcXVl
LmgiCiAjaW5jbHVkZSAiU2tEcmF3TG9vcGVyLmgiCiAjaW5jbHVkZSAiU2tQYWludC5oIgogI2lu
Y2x1ZGUgIlNrUGF0aC5oIgpAQCAtNDYsOSArNDUsMTAgQEAKIG5hbWVzcGFjZSBXZWJDb3JlIHsK
IAogZW51bSBDb21wb3NpdGVPcGVyYXRvcjsKK2NsYXNzIENhbnZhc0ZyYW1lYnVmZmVyOwogY2xh
c3MgR0xFUzJDYW52YXM7Ci1jbGFzcyBUZXh0dXJlOwogY2xhc3MgR3JhcGhpY3NDb250ZXh0M0Q7
CitjbGFzcyBUZXh0dXJlOwogCiAvLyBUaGlzIGNsYXNzIGhvbGRzIHRoZSBwbGF0Zm9ybS1zcGVj
aWZpYyBzdGF0ZSBmb3IgR3JhcGhpY3NDb250ZXh0LiBXZSBwdXQKIC8vIG1vc3Qgb2Ygb3VyIFNr
aWEgd3JhcHBlcnMgb24gdGhpcyBjbGFzcy4gSW4gdGhlb3J5LCBhIGxvdCBvZiB0aGlzIHN0dWZm
IGNvdWxkCkBAIC0xODEsNyArMTgxLDcgQEAgcHVibGljOgogICAgIHZvaWQgY2xlYXJJbWFnZVJl
c2FtcGxpbmdIaW50KCk7CiAgICAgYm9vbCBoYXNJbWFnZVJlc2FtcGxpbmdIaW50KCkgY29uc3Q7
CiAgICAgYm9vbCB1c2VHUFUoKSB7IHJldHVybiBtX3VzZUdQVTsgfQotICAgIHZvaWQgc2V0R3Jh
cGhpY3NDb250ZXh0M0QoR3JhcGhpY3NDb250ZXh0M0QqLCBjb25zdCBJbnRTaXplJik7CisgICAg
dm9pZCBzZXRTaGFyZWRDb250ZXh0M0QoU2hhcmVkQ29udGV4dDNEKiwgQ2FudmFzRnJhbWVidWZm
ZXIqLCBjb25zdCBJbnRTaXplJik7CiAgICAgR0xFUzJDYW52YXMqIGdwdUNhbnZhcygpIGNvbnN0
IHsgcmV0dXJuIG1fZ3B1Q2FudmFzLmdldCgpOyB9CiAKICAgICAvLyBDYWxsIHRoZXNlIGJlZm9y
ZSBtYWtpbmcgYSBjYWxsIHRoYXQgbWFuaXB1bGF0ZXMgdGhlIHVuZGVybHlpbmcKQEAgLTE5MCw2
ICsxOTAsNyBAQCBwdWJsaWM6CiAgICAgdm9pZCBwcmVwYXJlRm9ySGFyZHdhcmVEcmF3KCkgY29u
c3Q7CiAgICAgLy8gQ2FsbCB0byBmb3JjZSB0aGUgc2tpYTo6UGxhdGZvcm1DYW52YXMgdG8gY29u
dGFpbiBhbGwgcmVuZGVyaW5nIHJlc3VsdHMuCiAgICAgdm9pZCBzeW5jU29mdHdhcmVDYW52YXMo
KSBjb25zdDsKKyAgICB2b2lkIHN3YXBCdWZmZXJzKCk7CiAKIHByaXZhdGU6CiAjaWYgT1MoTElO
VVgpIHx8IE9TKFdJTkRPV1MpCmRpZmYgLS1naXQgYS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJM
YXllckJhY2tpbmcuY3BwIGIvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJCYWNraW5nLmNw
cAppbmRleCAwYmE5MDdiZTk0MDAxMTQ0ZGYzN2E1YWZkYjdkNTM5YWE4NzQ3OTYzLi4xNzM1MjIw
Nzk5Nzg4MDdiZGU1ZTU4YjI1NTJkODVlNDc0ZGVjNWQzIDEwMDY0NAotLS0gYS9XZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJMYXllckJhY2tpbmcuY3BwCisrKyBiL1dlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlckxheWVyQmFja2luZy5jcHAKQEAgLTI3LDggKzI3LDExIEBACiAKICNpZiBVU0UoQUNDRUxF
UkFURURfQ09NUE9TSVRJTkcpCiAKKyNpbmNsdWRlICJSZW5kZXJMYXllckJhY2tpbmcuaCIKKwog
I2luY2x1ZGUgIkFuaW1hdGlvbkNvbnRyb2xsZXIuaCIKICNpbmNsdWRlICJDYW52YXNSZW5kZXJp
bmdDb250ZXh0LmgiCisjaW5jbHVkZSAiQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJELmgiCiAjaW5j
bHVkZSAiQ1NTUHJvcGVydHlOYW1lcy5oIgogI2luY2x1ZGUgIkNTU1N0eWxlU2VsZWN0b3IuaCIK
ICNpbmNsdWRlICJGcmFtZVZpZXcuaCIKQEAgLTUxLDggKzU0LDcgQEAKICNpbmNsdWRlICJSZW5k
ZXJWaWRlby5oIgogI2luY2x1ZGUgIlJlbmRlclZpZXcuaCIKICNpbmNsdWRlICJTZXR0aW5ncy5o
IgotCi0jaW5jbHVkZSAiUmVuZGVyTGF5ZXJCYWNraW5nLmgiCisjaW5jbHVkZSAiV2ViR0xSZW5k
ZXJpbmdDb250ZXh0LmgiCiAKIHVzaW5nIG5hbWVzcGFjZSBzdGQ7CiAKQEAgLTI1NywxMCArMjU5
LDE3IEBAIGJvb2wgUmVuZGVyTGF5ZXJCYWNraW5nOjp1cGRhdGVHcmFwaGljc0xheWVyQ29uZmln
dXJhdGlvbigpCiAjaWYgRU5BQkxFKDNEX0NBTlZBUykgfHwgRU5BQkxFKEFDQ0VMRVJBVEVEXzJE
X0NBTlZBUykKICAgICBlbHNlIGlmIChpc0FjY2VsZXJhdGVkQ2FudmFzKHJlbmRlcmVyKCkpKSB7
CiAgICAgICAgIEhUTUxDYW52YXNFbGVtZW50KiBjYW52YXMgPSBzdGF0aWNfY2FzdDxIVE1MQ2Fu
dmFzRWxlbWVudCo+KHJlbmRlcmVyKCktPm5vZGUoKSk7Ci0gICAgICAgIGlmIChDYW52YXNSZW5k
ZXJpbmdDb250ZXh0KiBjb250ZXh0ID0gY2FudmFzLT5yZW5kZXJpbmdDb250ZXh0KCkpCi0gICAg
ICAgICAgICBpZiAoY29udGV4dC0+Z3JhcGhpY3NDb250ZXh0M0QoKSkKLSAgICAgICAgICAgICAg
ICBpZiAoUGxhdGZvcm1MYXllciogcGwgPSBjb250ZXh0LT5ncmFwaGljc0NvbnRleHQzRCgpLT5w
bGF0Zm9ybUxheWVyKCkpCi0gICAgICAgICAgICAgICAgICAgIG1fZ3JhcGhpY3NMYXllci0+c2V0
Q29udGVudHNUb0NhbnZhcyhwbCk7CisgICAgICAgIGlmIChDYW52YXNSZW5kZXJpbmdDb250ZXh0
KiBjb250ZXh0ID0gY2FudmFzLT5yZW5kZXJpbmdDb250ZXh0KCkpIHsKKyNpZiBFTkFCTEUoQUND
RUxFUkFURURfMkRfQ0FOVkFTKQorICAgICAgICAgICAgaWYgKGNvbnRleHQtPmlzMmQoKSkKKyAg
ICAgICAgICAgICAgICBtX2dyYXBoaWNzTGF5ZXItPnNldENvbnRlbnRzVG9DYW52YXMyRChzdGF0
aWNfY2FzdDxDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQqPihjb250ZXh0KS0+ZnJhbWVidWZmZXIo
KSk7CisjZW5kaWYKKyNpZiBFTkFCTEUoM0RfQ0FOVkFTKQorICAgICAgICAgICAgaWYgKGNvbnRl
eHQtPmlzM2QoKSkKKyAgICAgICAgICAgICAgICBtX2dyYXBoaWNzTGF5ZXItPnNldENvbnRlbnRz
VG9XZWJHTChzdGF0aWNfY2FzdDxXZWJHTFJlbmRlcmluZ0NvbnRleHQqPihjb250ZXh0KS0+Z3Jh
cGhpY3NDb250ZXh0M0QoKS0+cGxhdGZvcm1MYXllcigpKTsKKyNlbmRpZgorICAgICAgICB9Cisg
ICAgICAgIGxheWVyQ29uZmlnQ2hhbmdlZCA9IHRydWU7CiAgICAgfQogI2VuZGlmCiAKZGlmZiAt
LWdpdCBhL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cgYi9XZWJLaXQvY2hyb21pdW0vQ2hhbmdl
TG9nCmluZGV4IDAxYTJiYmY3YjVhODA4ODdhODhmZTkxY2I5Mjg4ZDIyYzhlNTc4NDEuLjI1ODI0
ZDRlNTM4YTgyMzA0MTkzYmYyMjY3OWU1MWE5NWEwMzdmNDQgMTAwNjQ0Ci0tLSBhL1dlYktpdC9j
aHJvbWl1bS9DaGFuZ2VMb2cKKysrIGIvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZwpAQCAtMSwz
ICsxLDI4IEBACisyMDEwLTA4LTMwICBKYW1lcyBSb2JpbnNvbiAgPGphbWVzckBjaHJvbWl1bS5v
cmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgTXVs
dGlwbGUgYWNjZWxlcmF0ZWQgMkQgY2FudmFzZXMgc2hvdWxkIGJlIGFibGUgdG8gdXNlIHRoZSBz
YW1lIEdyYXBoaWNzQ29udGV4dDNECisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD00NDkyNgorCisgICAgICAgIEFkZHMgYSBTaGFyZWRDb250ZXh0M0QgdG8g
V2ViVmlld0ltcGwgYW5kIGltcGxlbWVudHMgYSBmZXcgbmV3IGZ1bmN0aW9ucyBvbiBHcmFwaGlj
c0NvbnRleHQzRC4KKyAgICAgICAgVGhlIFNoYXJlZENvbnRleHQzRCBoYXMgdG8gbGl2ZSBvbiBX
ZWJWaWV3SW1wbCB0byBiZSB0aWVkIHRvIHRoZSBsaWZldGltZSBvZiB0aGUgY29tcG9zaXRvciBj
b250ZXh0LgorCisgICAgICAgICogcHVibGljL1dlYkdyYXBoaWNzQ29udGV4dDNELmg6CisgICAg
ICAgIChXZWJLaXQ6OldlYkdyYXBoaWNzQ29udGV4dDNEOjpjcmVhdGVDb21wb3NpdG9yVGV4dHVy
ZSk6CisgICAgICAgIChXZWJLaXQ6OldlYkdyYXBoaWNzQ29udGV4dDNEOjpkZWxldGVDb21wb3Np
dG9yVGV4dHVyZSk6CisgICAgICAgIChXZWJLaXQ6OldlYkdyYXBoaWNzQ29udGV4dDNEOjpjb3B5
VGV4dHVyZVRvQ29tcG9zaXRvcik6CisgICAgICAgICogc3JjL0Nocm9tZUNsaWVudEltcGwuY3Bw
OgorICAgICAgICAoV2ViS2l0OjpDaHJvbWVDbGllbnRJbXBsOjpnZXRTaGFyZWRDb250ZXh0M0Qp
OgorICAgICAgICAqIHNyYy9DaHJvbWVDbGllbnRJbXBsLmg6CisgICAgICAgICogc3JjL0dyYXBo
aWNzQ29udGV4dDNELmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNESW50
ZXJuYWw6OmluaXRpYWxpemUpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0RJ
bnRlcm5hbDo6cGxhdGZvcm1MYXllcik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRl
eHQzRDo6cGxhdGZvcm1MYXllcik6CisgICAgICAgICogc3JjL1dlYlZpZXdJbXBsLmNwcDoKKyAg
ICAgICAgKFdlYktpdDo6V2ViVmlld0ltcGw6OmdldFNoYXJlZENvbnRleHQzRCk6CisgICAgICAg
ICogc3JjL1dlYlZpZXdJbXBsLmg6CisKIDIwMTAtMDgtMzAgIEtpbnVrbyBZYXN1ZGEgIDxraW51
a29AY2hyb21pdW0ub3NyYz4KIAogICAgICAgICBSZXZpZXdlZCBieSBEYXJpbiBGaXNoZXIuCmRp
ZmYgLS1naXQgYS9XZWJLaXQvY2hyb21pdW0vcHVibGljL1dlYkdyYXBoaWNzQ29udGV4dDNELmgg
Yi9XZWJLaXQvY2hyb21pdW0vcHVibGljL1dlYkdyYXBoaWNzQ29udGV4dDNELmgKaW5kZXggNDRh
MDQ5ODlhYTI1ZWI4YTU1OWYwZWRlNDU4NTliOWU0ZmRlY2RiNy4uMTdjNjk2Y2E3M2Q1ZDE1OWE0
ZTNiYTMxYThlMjE5YzAwNGU4YmNhMyAxMDA2NDQKLS0tIGEvV2ViS2l0L2Nocm9taXVtL3B1Ymxp
Yy9XZWJHcmFwaGljc0NvbnRleHQzRC5oCisrKyBiL1dlYktpdC9jaHJvbWl1bS9wdWJsaWMvV2Vi
R3JhcGhpY3NDb250ZXh0M0QuaApAQCAtMzE4LDYgKzMxOCwxMCBAQCBwdWJsaWM6CiAgICAgdmly
dHVhbCB2b2lkIGRlbGV0ZVJlbmRlcmJ1ZmZlcih1bnNpZ25lZCkgPSAwOwogICAgIHZpcnR1YWwg
dm9pZCBkZWxldGVTaGFkZXIodW5zaWduZWQpID0gMDsKICAgICB2aXJ0dWFsIHZvaWQgZGVsZXRl
VGV4dHVyZSh1bnNpZ25lZCkgPSAwOworCisgICAgdmlydHVhbCB1bnNpZ25lZCBjcmVhdGVDb21w
b3NpdG9yVGV4dHVyZSh1bnNpZ25lZCB3aWR0aCwgdW5zaWduZWQgaGVpZ2h0KSB7IHJldHVybiAw
OyB9CisgICAgdmlydHVhbCB2b2lkIGRlbGV0ZUNvbXBvc2l0b3JUZXh0dXJlKHVuc2lnbmVkIGNv
bXBvc2l0b3JUZXh0dXJlKSB7fQorICAgIHZpcnR1YWwgdm9pZCBjb3B5VGV4dHVyZVRvQ29tcG9z
aXRvcih1bnNpZ25lZCB0ZXh0dXJlLCB1bnNpZ25lZCBjb21wb3NpdG9yVGV4dHVyZSkge30KIH07
CiAKIH0gLy8gbmFtZXNwYWNlIFdlYktpdApkaWZmIC0tZ2l0IGEvV2ViS2l0L2Nocm9taXVtL3Ny
Yy9DaHJvbWVDbGllbnRJbXBsLmNwcCBiL1dlYktpdC9jaHJvbWl1bS9zcmMvQ2hyb21lQ2xpZW50
SW1wbC5jcHAKaW5kZXggZTZmMTQwMDcxODBkOGQzYmY2MTI4YjEzMGRjMjhhYmFhZWMxZjkwYS4u
NDI0MjQ0NTNjMzQ2OTEzNThiODM3MWQyZDdmMGQzYTQ5YzI4MzRiYiAxMDA2NDQKLS0tIGEvV2Vi
S2l0L2Nocm9taXVtL3NyYy9DaHJvbWVDbGllbnRJbXBsLmNwcAorKysgYi9XZWJLaXQvY2hyb21p
dW0vc3JjL0Nocm9tZUNsaWVudEltcGwuY3BwCkBAIC01OSw2ICs1OSw3IEBACiAjaW5jbHVkZSAi
U2VhcmNoUG9wdXBNZW51Q2hyb21pdW0uaCIKICNpbmNsdWRlICJTY3JpcHRDb250cm9sbGVyLmgi
CiAjaW5jbHVkZSAiU2VjdXJpdHlPcmlnaW4uaCIKKyNpbmNsdWRlICJTaGFyZWRDb250ZXh0M0Qu
aCIKICNpbmNsdWRlICJXZWJHZW9sb2NhdGlvblNlcnZpY2UuaCIKICNpZiBVU0UoVjgpCiAjaW5j
bHVkZSAiVjhQcm94eS5oIgpAQCAtNzUxLDYgKzc1MiwxMSBAQCB2b2lkIENocm9tZUNsaWVudElt
cGw6OnNjaGVkdWxlQ29tcG9zaXRpbmdMYXllclN5bmMoKQogfQogI2VuZGlmCiAKK1Bhc3NSZWZQ
dHI8V2ViQ29yZTo6U2hhcmVkQ29udGV4dDNEPiBDaHJvbWVDbGllbnRJbXBsOjpnZXRTaGFyZWRD
b250ZXh0M0QoKQoreworICAgIHJldHVybiBtX3dlYlZpZXctPmdldFNoYXJlZENvbnRleHQzRCgp
OworfQorCiBib29sIENocm9tZUNsaWVudEltcGw6OnN1cHBvcnRzRnVsbHNjcmVlbkZvck5vZGUo
Y29uc3QgV2ViQ29yZTo6Tm9kZSogbm9kZSkKIHsKICAgICBpZiAobV93ZWJWaWV3LT5jbGllbnQo
KSAmJiBub2RlLT5oYXNUYWdOYW1lKFdlYkNvcmU6OkhUTUxOYW1lczo6dmlkZW9UYWcpKQpkaWZm
IC0tZ2l0IGEvV2ViS2l0L2Nocm9taXVtL3NyYy9DaHJvbWVDbGllbnRJbXBsLmggYi9XZWJLaXQv
Y2hyb21pdW0vc3JjL0Nocm9tZUNsaWVudEltcGwuaAppbmRleCBiZmY5ZjkwNDdmYTdjN2YzYWJk
NzA0ZDk0Nzg1ZDljMWZhY2Y3NzQwLi41M2RiOTRmNzlhZjYwNWZjMGM5YzA5YTIxZmIzMjkzNzVk
YzVmOTdlIDEwMDY0NAotLS0gYS9XZWJLaXQvY2hyb21pdW0vc3JjL0Nocm9tZUNsaWVudEltcGwu
aAorKysgYi9XZWJLaXQvY2hyb21pdW0vc3JjL0Nocm9tZUNsaWVudEltcGwuaApAQCAtMTUyLDYg
KzE1Miw4IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIHZvaWQgc2NoZWR1bGVDb21wb3NpdGluZ0xh
eWVyU3luYygpOwogI2VuZGlmCiAKKyAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8V2ViQ29yZTo6U2hh
cmVkQ29udGV4dDNEPiBnZXRTaGFyZWRDb250ZXh0M0QoKTsKKwogICAgIHZpcnR1YWwgYm9vbCBz
dXBwb3J0c0Z1bGxzY3JlZW5Gb3JOb2RlKGNvbnN0IFdlYkNvcmU6Ok5vZGUqKTsKICAgICB2aXJ0
dWFsIHZvaWQgZW50ZXJGdWxsc2NyZWVuRm9yTm9kZShXZWJDb3JlOjpOb2RlKik7CiAgICAgdmly
dHVhbCB2b2lkIGV4aXRGdWxsc2NyZWVuRm9yTm9kZShXZWJDb3JlOjpOb2RlKik7CmRpZmYgLS1n
aXQgYS9XZWJLaXQvY2hyb21pdW0vc3JjL0dyYXBoaWNzQ29udGV4dDNELmNwcCBiL1dlYktpdC9j
aHJvbWl1bS9zcmMvR3JhcGhpY3NDb250ZXh0M0QuY3BwCmluZGV4IDZiYzVmZmU0MzFlODRlNGU3
YmUyMGU5NDA0MTRlZGVhZjgzM2E5YzcuLmM3ODRmNTg0NTA3Y2ZjNGJlOWJmNGQ4NjhhMWFlYjlh
OGZlMjEyMmYgMTAwNjQ0Ci0tLSBhL1dlYktpdC9jaHJvbWl1bS9zcmMvR3JhcGhpY3NDb250ZXh0
M0QuY3BwCisrKyBiL1dlYktpdC9jaHJvbWl1bS9zcmMvR3JhcGhpY3NDb250ZXh0M0QuY3BwCkBA
IC0zNSw3ICszNSw3IEBACiAjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0M0QuaCIKIAogI2luY2x1
ZGUgIkNhY2hlZEltYWdlLmgiCi0jaW5jbHVkZSAiQ2FudmFzTGF5ZXJDaHJvbWl1bS5oIgorI2lu
Y2x1ZGUgIldlYkdMTGF5ZXJDaHJvbWl1bS5oIgogI2luY2x1ZGUgIkNhbnZhc1JlbmRlcmluZ0Nv
bnRleHQuaCIKICNpbmNsdWRlICJDaHJvbWUuaCIKICNpbmNsdWRlICJDaHJvbWVDbGllbnRJbXBs
LmgiCkBAIC0xMDMsNyArMTAzLDcgQEAgcHVibGljOgogICAgIHZvaWQgcHJlcGFyZVRleHR1cmUo
KTsKIAogI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKLSAgICBDYW52YXNMYXllckNo
cm9taXVtKiBwbGF0Zm9ybUxheWVyKCkgY29uc3Q7CisgICAgV2ViR0xMYXllckNocm9taXVtKiBw
bGF0Zm9ybUxheWVyKCkgY29uc3Q7CiAjZW5kaWYKICAgICBib29sIGlzR0xFUzJDb21wbGlhbnQo
KSBjb25zdDsKICAgICBib29sIGlzR0xFUzJOUE9UU3RyaWN0KCkgY29uc3Q7CkBAIC0yOTQsMTEg
KzI5NCwxNCBAQCBwdWJsaWM6CiAgICAgdm9pZCBzeW50aGVzaXplR0xFcnJvcih1bnNpZ25lZCBs
b25nIGVycm9yKTsKICAgICBib29sIHN1cHBvcnRzQkdSQSgpOwogCisgICAgdW5zaWduZWQgY3Jl
YXRlQ29tcG9zaXRvclRleHR1cmUodW5zaWduZWQgd2lkdGgsIHVuc2lnbmVkIGhlaWdodCk7Cisg
ICAgdm9pZCBkZWxldGVDb21wb3NpdG9yVGV4dHVyZSh1bnNpZ25lZCBjb21wb3NpdG9yVGV4dHVy
ZSk7CisgICAgdm9pZCBjb3B5VGV4dHVyZVRvQ29tcG9zaXRvcih1bnNpZ25lZCB0ZXh0dXJlLCB1
bnNpZ25lZCBjb21wb3NpdG9yVGV4dHVyZSk7CiBwcml2YXRlOgogICAgIE93blB0cjxXZWJLaXQ6
OldlYkdyYXBoaWNzQ29udGV4dDNEPiBtX2ltcGw7CiAgICAgV2ViS2l0OjpXZWJWaWV3SW1wbCog
bV93ZWJWaWV3SW1wbDsKICNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCi0gICAgUmVm
UHRyPENhbnZhc0xheWVyQ2hyb21pdW0+IG1fY29tcG9zaXRpbmdMYXllcjsKKyAgICBSZWZQdHI8
V2ViR0xMYXllckNocm9taXVtPiBtX2NvbXBvc2l0aW5nTGF5ZXI7CiAjZW5kaWYKICNpZiBQTEFU
Rk9STShTS0lBKQogICAgIC8vIElmIHRoZSB3aWR0aCBhbmQgaGVpZ2h0IG9mIHRoZSBDYW52YXMn
cyBiYWNraW5nIHN0b3JlIGRvbid0CkBAIC0zNjAsNyArMzYzLDcgQEAgYm9vbCBHcmFwaGljc0Nv
bnRleHQzREludGVybmFsOjppbml0aWFsaXplKEdyYXBoaWNzQ29udGV4dDNEOjpBdHRyaWJ1dGVz
IGF0dHJzLAogICAgIG1faW1wbC5zZXQod2ViQ29udGV4dCk7CiAKICNpZiBVU0UoQUNDRUxFUkFU
RURfQ09NUE9TSVRJTkcpCi0gICAgbV9jb21wb3NpdGluZ0xheWVyID0gQ2FudmFzTGF5ZXJDaHJv
bWl1bTo6Y3JlYXRlKDApOworICAgIG1fY29tcG9zaXRpbmdMYXllciA9IFdlYkdMTGF5ZXJDaHJv
bWl1bTo6Y3JlYXRlKDApOwogI2VuZGlmCiAgICAgcmV0dXJuIHRydWU7CiB9CkBAIC0zODEsNyAr
Mzg0LDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQzREludGVybmFsOjpwcmVwYXJlVGV4dHVyZSgp
CiB9CiAKICNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCi1DYW52YXNMYXllckNocm9t
aXVtKiBHcmFwaGljc0NvbnRleHQzREludGVybmFsOjpwbGF0Zm9ybUxheWVyKCkgY29uc3QKK1dl
YkdMTGF5ZXJDaHJvbWl1bSogR3JhcGhpY3NDb250ZXh0M0RJbnRlcm5hbDo6cGxhdGZvcm1MYXll
cigpIGNvbnN0CiB7CiAgICAgcmV0dXJuIG1fY29tcG9zaXRpbmdMYXllci5nZXQoKTsKIH0KQEAg
LTg5OCw2ICs5MDEsMTAgQEAgREVMRUdBVEVfVE9fSU1QTF8xKGRlbGV0ZVRleHR1cmUsIHVuc2ln
bmVkKQogREVMRUdBVEVfVE9fSU1QTF8xKHN5bnRoZXNpemVHTEVycm9yLCB1bnNpZ25lZCBsb25n
KQogREVMRUdBVEVfVE9fSU1QTF9SKHN1cHBvcnRzQkdSQSwgYm9vbCkKIAorREVMRUdBVEVfVE9f
SU1QTF8yUihjcmVhdGVDb21wb3NpdG9yVGV4dHVyZSwgdW5zaWduZWQsIHVuc2lnbmVkLCB1bnNp
Z25lZCkKK0RFTEVHQVRFX1RPX0lNUExfMShkZWxldGVDb21wb3NpdG9yVGV4dHVyZSwgdW5zaWdu
ZWQpCitERUxFR0FURV9UT19JTVBMXzIoY29weVRleHR1cmVUb0NvbXBvc2l0b3IsIHVuc2lnbmVk
LCB1bnNpZ25lZCkKKwogLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAvLyBHcmFwaGljc0NvbnRleHQzRAogLy8K
QEAgLTEwMzksNyArMTA0Niw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OnByZXBhcmVUZXh0
dXJlKCkKICNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCiBQbGF0Zm9ybUxheWVyKiBH
cmFwaGljc0NvbnRleHQzRDo6cGxhdGZvcm1MYXllcigpIGNvbnN0CiB7Ci0gICAgQ2FudmFzTGF5
ZXJDaHJvbWl1bSogY2FudmFzTGF5ZXIgPSBtX2ludGVybmFsLT5wbGF0Zm9ybUxheWVyKCk7Cisg
ICAgV2ViR0xMYXllckNocm9taXVtKiBjYW52YXNMYXllciA9IG1faW50ZXJuYWwtPnBsYXRmb3Jt
TGF5ZXIoKTsKICAgICBjYW52YXNMYXllci0+c2V0Q29udGV4dCh0aGlzKTsKICAgICByZXR1cm4g
Y2FudmFzTGF5ZXI7CiB9CkBAIC0xMjM0LDYgKzEyNDEsMTAgQEAgREVMRUdBVEVfVE9fSU5URVJO
QUxfMShkZWxldGVUZXh0dXJlLCB1bnNpZ25lZCkKIERFTEVHQVRFX1RPX0lOVEVSTkFMXzEoc3lu
dGhlc2l6ZUdMRXJyb3IsIHVuc2lnbmVkIGxvbmcpCiBERUxFR0FURV9UT19JTlRFUk5BTF9SKHN1
cHBvcnRzQkdSQSwgYm9vbCkKIAorREVMRUdBVEVfVE9fSU5URVJOQUxfMlIoY3JlYXRlQ29tcG9z
aXRvclRleHR1cmUsIHVuc2lnbmVkLCB1bnNpZ25lZCwgdW5zaWduZWQpCitERUxFR0FURV9UT19J
TlRFUk5BTF8xKGRlbGV0ZUNvbXBvc2l0b3JUZXh0dXJlLCB1bnNpZ25lZCkKK0RFTEVHQVRFX1RP
X0lOVEVSTkFMXzIoY29weVRleHR1cmVUb0NvbXBvc2l0b3IsIHVuc2lnbmVkLCB1bnNpZ25lZCkK
KwogYm9vbCBHcmFwaGljc0NvbnRleHQzRDo6aXNHTEVTMkNvbXBsaWFudCgpIGNvbnN0CiB7CiAg
ICAgcmV0dXJuIG1faW50ZXJuYWwtPmlzR0xFUzJDb21wbGlhbnQoKTsKZGlmZiAtLWdpdCBhL1dl
YktpdC9jaHJvbWl1bS9zcmMvV2ViVmlld0ltcGwuY3BwIGIvV2ViS2l0L2Nocm9taXVtL3NyYy9X
ZWJWaWV3SW1wbC5jcHAKaW5kZXggNTA2NWY1ZWI5YjY0MDgzZmMzYjFlMTc0ZjQyODE1YzU3Mzdi
NDgzOS4uZDIzMzFhM2YzZTVhYjYyZTNhN2Q1NTRjZDdkZDg0OGMyMDkwY2U2ZCAxMDA2NDQKLS0t
IGEvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJWaWV3SW1wbC5jcHAKKysrIGIvV2ViS2l0L2Nocm9t
aXVtL3NyYy9XZWJWaWV3SW1wbC5jcHAKQEAgLTU4LDYgKzU4LDcgQEAKICNpbmNsdWRlICJHTEVT
MkNvbnRleHQuaCIKICNpbmNsdWRlICJHTEVTMkNvbnRleHRJbnRlcm5hbC5oIgogI2luY2x1ZGUg
IkdyYXBoaWNzQ29udGV4dC5oIgorI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dDNELmgiCiAjaW5j
bHVkZSAiSFRNTElucHV0RWxlbWVudC5oIgogI2luY2x1ZGUgIkhUTUxNZWRpYUVsZW1lbnQuaCIK
ICNpbmNsdWRlICJIaXRUZXN0UmVzdWx0LmgiCkBAIC04Niw2ICs4Nyw3IEBACiAjaW5jbHVkZSAi
U2VjdXJpdHlPcmlnaW4uaCIKICNpbmNsdWRlICJTZWxlY3Rpb25Db250cm9sbGVyLmgiCiAjaW5j
bHVkZSAiU2V0dGluZ3MuaCIKKyNpbmNsdWRlICJTaGFyZWRDb250ZXh0M0QuaCIKICNpbmNsdWRl
ICJUaW1lci5oIgogI2luY2x1ZGUgIlR5cGluZ0NvbW1hbmQuaCIKICNpbmNsdWRlICJVc2VyR2Vz
dHVyZUluZGljYXRvci5oIgpAQCAtMjIxMSwxNCArMjIxMywxNiBAQCBQYXNzT3duUHRyPEdMRVMy
Q29udGV4dD4gV2ViVmlld0ltcGw6OmdldE9uc2NyZWVuR0xFUzJDb250ZXh0KCkKICAgICByZXR1
cm4gR0xFUzJDb250ZXh0OjpjcmVhdGUoR0xFUzJDb250ZXh0SW50ZXJuYWw6OmNyZWF0ZShnbGVz
MkNvbnRleHQoKSwgZmFsc2UpKTsKIH0KIAotUGFzc093blB0cjxHTEVTMkNvbnRleHQ+IFdlYlZp
ZXdJbXBsOjpnZXRPZmZzY3JlZW5HTEVTMkNvbnRleHQoKQorUGFzc1JlZlB0cjxTaGFyZWRDb250
ZXh0M0Q+IFdlYlZpZXdJbXBsOjpnZXRTaGFyZWRDb250ZXh0M0QoKQogewotICAgIFdlYkdMRVMy
Q29udGV4dCogY29udGV4dCA9IHdlYktpdENsaWVudCgpLT5jcmVhdGVHTEVTMkNvbnRleHQoKTsK
LSAgICBpZiAoIWNvbnRleHQpCi0gICAgICAgIHJldHVybiAwOwotICAgIGlmICghY29udGV4dC0+
aW5pdGlhbGl6ZSgwLCBnbGVzMkNvbnRleHQoKSkpCi0gICAgICAgIHJldHVybiAwOwotICAgIHJl
dHVybiBHTEVTMkNvbnRleHQ6OmNyZWF0ZShHTEVTMkNvbnRleHRJbnRlcm5hbDo6Y3JlYXRlKGNv
bnRleHQsIHRydWUpKTsKKyAgICBpZiAoIW1fc2hhcmVkQ29udGV4dDNEKSB7CisgICAgICAgIEdy
YXBoaWNzQ29udGV4dDNEOjpBdHRyaWJ1dGVzIGF0dHI7CisgICAgICAgIGF0dHIuc3RlbmNpbCA9
IHRydWU7CisgICAgICAgIE93blB0cjxHcmFwaGljc0NvbnRleHQzRD4gY29udGV4dCA9IEdyYXBo
aWNzQ29udGV4dDNEOjpjcmVhdGUoYXR0ciwgbV9wYWdlLT5jaHJvbWUoKSk7CisgICAgICAgIG1f
c2hhcmVkQ29udGV4dDNEID0gU2hhcmVkQ29udGV4dDNEOjpjcmVhdGUoY29udGV4dC5yZWxlYXNl
KCkpOworICAgIH0KKworICAgIHJldHVybiBtX3NoYXJlZENvbnRleHQzRDsKIH0KIAogLy8gUmV0
dXJucyB0aGUgR0xFUzIgY29udGV4dCBhc3NvY2lhdGVkIHdpdGggdGhpcyBWaWV3LiBJZiBvbmUg
ZG9lc24ndCBleGlzdApkaWZmIC0tZ2l0IGEvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJWaWV3SW1w
bC5oIGIvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJWaWV3SW1wbC5oCmluZGV4IGMyOTYxMjEyM2Y0
NTE0Yzk0ZGQ3ZDk3MGM3MzExNGE0YmVlZWMzNTUuLjRhZDc0ZmIxMmRhM2ZmNTVmOGM4MmVkMjJh
MGUzYTg5ZmYxYmEyZmQgMTAwNjQ0Ci0tLSBhL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViVmlld0lt
cGwuaAorKysgYi9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYlZpZXdJbXBsLmgKQEAgLTMyOSwxMCAr
MzI5LDEwIEBAIHB1YmxpYzoKICAgICAvLyBPZmZzY3JlZW4gY29udGV4dHMgcmVuZGVyIG9mZnNj
cmVlbiBidXQgY2FuIHNoYXJlIHJlc291cmNlcyB3aXRoIHRoZQogICAgIC8vIG9uc2NyZWVuIGNv
bnRleHQgYW5kIHRodXMgY2FuIGJlIGNvbXBvc2l0ZWQuCiAgICAgUGFzc093blB0cjxXZWJDb3Jl
OjpHTEVTMkNvbnRleHQ+IGdldE9uc2NyZWVuR0xFUzJDb250ZXh0KCk7Ci0gICAgUGFzc093blB0
cjxXZWJDb3JlOjpHTEVTMkNvbnRleHQ+IGdldE9mZnNjcmVlbkdMRVMyQ29udGV4dCgpOwogCiAg
ICAgLy8gUmV0dXJucyBhbiBvbnNjcmVlbiBjb250ZXh0CiAgICAgdmlydHVhbCBXZWJHTEVTMkNv
bnRleHQqIGdsZXMyQ29udGV4dCgpOworICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxXZWJDb3JlOjpT
aGFyZWRDb250ZXh0M0Q+IGdldFNoYXJlZENvbnRleHQzRCgpOwogCiAgICAgV2ViQ29yZTo6UG9w
dXBDb250YWluZXIqIHNlbGVjdFBvcHVwKCkgY29uc3QgeyByZXR1cm4gbV9zZWxlY3RQb3B1cC5n
ZXQoKTsgfQogCkBAIC01MjEsNiArNTIxLDggQEAgcHJpdmF0ZToKIAogICAgIE93blB0cjxXZWJH
TEVTMkNvbnRleHQ+IG1fZ2xlczJDb250ZXh0OwogCisgICAgUmVmUHRyPFdlYkNvcmU6OlNoYXJl
ZENvbnRleHQzRD4gbV9zaGFyZWRDb250ZXh0M0Q7CisKICAgICBPd25QdHI8RGV2aWNlT3JpZW50
YXRpb25DbGllbnRQcm94eT4gbV9kZXZpY2VPcmllbnRhdGlvbkNsaWVudFByb3h5OwogfTsKIAo=
</data>
<flag name="review"
          id="54995"
          type_id="1"
          status="-"
          setter="kbr"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>66074</attachid>
            <date>2010-08-31 10:53:10 -0700</date>
            <delta_ts>2010-09-01 16:03:25 -0700</delta_ts>
            <desc>compile fix for gtk/win/mac</desc>
            <filename>bug-44926-20100831105309.patch</filename>
            <type>text/plain</type>
            <size>111172</size>
            <attacher name="James Robinson">jamesr</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ2hhbmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXgg
ZGRjZDUyZTk2NzZiYTY2YmIwM2M0MTBhZmZmNTllMjI2MWY3ZDgzMC4uOTQxNDdhNTRiODEyMzIz
MWExYWY3NDI2NzAzMWUyNmFkMTc0YjA4ZiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9DaGFuZ2VMb2cK
KysrIGIvV2ViQ29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxNzMgQEAKKzIwMTAtMDgtMzAgIEph
bWVzIFJvYmluc29uICA8amFtZXNyQGNocm9taXVtLm9yZz4KKworICAgICAgICBSZXZpZXdlZCBi
eSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBNdWx0aXBsZSBhY2NlbGVyYXRlZCAyRCBjYW52
YXNlcyBzaG91bGQgYmUgYWJsZSB0byB1c2UgdGhlIHNhbWUgR3JhcGhpY3NDb250ZXh0M0QKKyAg
ICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTQ0OTI2CisKKyAg
ICAgICAgVGhpcyBhbGxvd3MgbWFueSBhY2NlbGVyYXRlZCAyZCBjYW52YXNlcyB0byByZW5kZXIg
dXNpbmcgYSBzaW5nbGUgdW5kZXJseWluZyBHcmFwaGljc0NvbnRleHQzRC4KKyAgICAgICAgSXQg
aW50cm9kdWNlcyBhIG5ldyBjbGFzcyBTaGFyZWRDb250ZXh0M0QgdGhhdCBtYW5hZ2VzIHNldmVy
YWwgY2FsbGVycy4gIFRoaXMgY2xhc3MgY291bGQKKyAgICAgICAgYWxzbyBjYWNoZSB0aGUgY3Vy
cmVudCBzdGF0ZSB0byBhdm9pZCBpc3N1aW5nIHJlZHVuZGFudCBjYWxscywgYWx0aG91Z2ggaW4g
dGhpcyBmaXJzdCBjdXQgaXQgZG9lc24ndC4KKyAgICAgICAgVGhlIFNoYXJlZENvbnRleHQzRCBp
cyBwcm92aWRlZCB0aHJvdWdoIHRoZSBDaHJvbWVDbGllbnQgc28gdGhhdCBpdHMgbGlmZXRpbWUg
Y2FuIGJlIHRpZWQgdG8gdGhhdAorICAgICAgICBvZiB0aGUgcGxhdGZvcm0tc3BlY2lmaWMgY29t
cG9zaXRvciBpbmZyYXN0cnVjdHVyZS4KKworICAgICAgICBBY2NlbGVyYXRlZCAyZCBjYW52YXNl
cyBtYWludGFpbiBhIHJlZmVyZW5jZSB0byBhIFNoYXJlZENvbnRleHQzRCBhbmQgaGF2ZSBvd25l
cnNoaXAgb2YgYSBDYW52YXNGcmFtZWJ1ZmZlciwKKyAgICAgICAgd2hpY2ggcmVwcmVzZW50cyB0
aGUgY2FudmFzJ3MgcmVuZGVyaW5nIHRhcmdldC4gIFRoZSBjb21wb3NpdGluZyBsYXllciBmb3Ig
YW4gYWNjZWxlcmF0ZWQgMmQgY2FudmFzIGlzCisgICAgICAgIGF3YXJlIG9ubHkgb2YgdGhlIGNh
bnZhcydzIENhbnZhc0ZyYW1lYnVmZmVyLiAgVGhpcyBtZWFucyB0aGF0IFdlYkdMIGFuZCAyZCBj
YW52YXNlcyBhcmUgbm8gbG9uZ2VyIHRyZWF0ZWQKKyAgICAgICAgYXMgdGhlIHNhbWUgdGltZSBv
ZiBsYXllciBieSB0aGUgY29tcG9zaXRvci4KKworICAgICAgICBDb3ZlcmVkIGJ5IGV4aXN0aW5n
IGNhbnZhcyB0ZXN0cy4KKworICAgICAgICBJJ3ZlIGRpdmlkZWQgdGhlIHBlciBmaWxlL2Z1bmN0
aW9uIGNoYW5nZXMgaW50byB0aHJlZSBzZWN0aW9uczoKKyAgICAgICAgLSBQbGF0Zm9ybS1pbmRl
cGVuZGVudCBhcHBsaWNhdGlvbiBsb2dpYyBvdXRzaWRlIFdlYkNvcmUvcGxhdGZvcm0KKyAgICAg
ICAgLSBQbGF0Zm9ybS1pbmRlcGVuZGVudCBpbmZyYXN0cnVjdHVyZSBpbiBXZWJDb3JlL3BsYXRm
b3JtCisgICAgICAgIC0gUGxhdGZvcm0tc3BlY2lmaWMgY2hhbmdlcworCisgICAgICAgICogaHRt
bC9jYW52YXMvQ2FudmFzUmVuZGVyaW5nQ29udGV4dC5jcHA6CisgICAgICAgICogaHRtbC9jYW52
YXMvQ2FudmFzUmVuZGVyaW5nQ29udGV4dC5oOgorICAgICAgICAoV2ViQ29yZTo6Q2FudmFzUmVu
ZGVyaW5nQ29udGV4dDo6cGFpbnRzSW50b0NhbnZhc0J1ZmZlcik6CisgICAgICAgICogaHRtbC9j
YW52YXMvQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJELmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNh
bnZhc1JlbmRlcmluZ0NvbnRleHQyRDo6Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJEKToKKyAgICAg
ICAgKFdlYkNvcmU6OkNhbnZhc1JlbmRlcmluZ0NvbnRleHQyRDo6cGFpbnRzSW50b0NhbnZhc0J1
ZmZlcik6CisgICAgICAgIChXZWJDb3JlOjpDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ6OnJlc2V0
KToKKyAgICAgICAgKFdlYkNvcmU6OkNhbnZhc1JlbmRlcmluZ0NvbnRleHQyRDo6ZHJhd0ltYWdl
KToKKyAgICAgICAgKFdlYkNvcmU6OkNhbnZhc1JlbmRlcmluZ0NvbnRleHQyRDo6ZGlkRHJhdyk6
CisgICAgICAgICogaHRtbC9jYW52YXMvQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJELmg6CisgICAg
ICAgIChXZWJDb3JlOjpDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ6OmZyYW1lYnVmZmVyKToKKyAg
ICAgICAgKiBodG1sL2NhbnZhcy9XZWJHTFJlbmRlcmluZ0NvbnRleHQuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0OjpwYWludHNJbnRvQ2FudmFzQnVmZmVyKToK
KyAgICAgICAgKiBodG1sL2NhbnZhcy9XZWJHTFJlbmRlcmluZ0NvbnRleHQuaDoKKyAgICAgICAg
KFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6Z3JhcGhpY3NDb250ZXh0M0QpOgorICAg
ICAgICAqIGxvYWRlci9FbXB0eUNsaWVudHMuaDoKKyAgICAgICAgKFdlYkNvcmU6OkVtcHR5Q2hy
b21lQ2xpZW50OjphdHRhY2hSb290R3JhcGhpY3NMYXllcik6CisgICAgICAgIChXZWJDb3JlOjpF
bXB0eUNocm9tZUNsaWVudDo6c2V0TmVlZHNPbmVTaG90RHJhd2luZ1N5bmNocm9uaXphdGlvbik6
CisgICAgICAgIChXZWJDb3JlOjpFbXB0eUNocm9tZUNsaWVudDo6c2NoZWR1bGVDb21wb3NpdGlu
Z0xheWVyU3luYyk6CisgICAgICAgIChXZWJDb3JlOjpFbXB0eUNocm9tZUNsaWVudDo6Z2V0U2hh
cmVkQ29udGV4dDNEKToKKyAgICAgICAgKiBwYWdlL0Nocm9tZUNsaWVudC5oOgorICAgICAgICAq
IHJlbmRlcmluZy9SZW5kZXJMYXllckJhY2tpbmcuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVu
ZGVyTGF5ZXJCYWNraW5nOjp1cGRhdGVHcmFwaGljc0xheWVyQ29uZmlndXJhdGlvbik6CisgICAg
ICAgICAgQ3Jvc3MtcGxhdGZvcm0gaW5mcmFzdHJ1Y3R1cmUgaW4gV2ViQ29yZS9wbGF0Zm9ybToK
KyAgICAgICAgKiBXZWJDb3JlLmd5cGk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvR3Jh
cGhpY3NDb250ZXh0Lmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250
ZXh0M0QuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0xheWVyLmg6Cisg
ICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0xheWVyOjpzZXRDb250ZW50c1RvV2ViR0wpOgorICAg
ICAgICAoV2ViQ29yZTo6R3JhcGhpY3NMYXllcjo6c2V0Q29udGVudHNUb0NhbnZhczJEKToKKyAg
ICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9ncHUvQ2FudmFzRnJhbWVidWZmZXIuY3BwOiBBZGRl
ZC4KKyAgICAgICAgKFdlYkNvcmU6OkNhbnZhc0ZyYW1lYnVmZmVyOjpDYW52YXNGcmFtZWJ1ZmZl
cik6CisgICAgICAgIChXZWJDb3JlOjpDYW52YXNGcmFtZWJ1ZmZlcjo6fkNhbnZhc0ZyYW1lYnVm
ZmVyKToKKyAgICAgICAgKFdlYkNvcmU6OkNhbnZhc0ZyYW1lYnVmZmVyOjpiaW5kKToKKyAgICAg
ICAgKFdlYkNvcmU6OkNhbnZhc0ZyYW1lYnVmZmVyOjpzd2FwQnVmZmVycyk6CisgICAgICAgIChX
ZWJDb3JlOjpDYW52YXNGcmFtZWJ1ZmZlcjo6c2V0V2lsbFN3YXBCdWZmZXJzQ2FsbGJhY2spOgor
ICAgICAgICAoV2ViQ29yZTo6Q2FudmFzRnJhbWVidWZmZXI6OmNyZWF0ZSk6CisgICAgICAgICog
cGxhdGZvcm0vZ3JhcGhpY3MvZ3B1L0NhbnZhc0ZyYW1lYnVmZmVyLmg6IEFkZGVkLgorICAgICAg
ICAoV2ViQ29yZTo6Q2FudmFzRnJhbWVidWZmZXI6OnRleHR1cmVJZEZvckNvbXBvc2l0b3IpOgor
ICAgICAgICAoV2ViQ29yZTo6Q2FudmFzRnJhbWVidWZmZXI6OnRleHR1cmVJZEZvckNhbnZhcyk6
CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZ3B1L1NoYXJlZENvbnRleHQzRC5jcHA6IEFk
ZGVkLgorICAgICAgICAoV2ViQ29yZTo6YWZmaW5lVG8zeDMpOgorICAgICAgICAoV2ViQ29yZTo6
U2hhcmVkQ29udGV4dDNEOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6U2hhcmVkQ29udGV4
dDNEOjpTaGFyZWRDb250ZXh0M0QpOgorICAgICAgICAoV2ViQ29yZTo6U2hhcmVkQ29udGV4dDNE
Ojp+U2hhcmVkQ29udGV4dDNEKToKKyAgICAgICAgKFdlYkNvcmU6OlNoYXJlZENvbnRleHQzRDo6
c2Npc3Nvcik6CisgICAgICAgIChXZWJDb3JlOjpTaGFyZWRDb250ZXh0M0Q6OmVuYWJsZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpTaGFyZWRDb250ZXh0M0Q6OmRpc2FibGUpOgorICAgICAgICAoV2Vi
Q29yZTo6U2hhcmVkQ29udGV4dDNEOjpjbGVhckNvbG9yKToKKyAgICAgICAgKFdlYkNvcmU6OlNo
YXJlZENvbnRleHQzRDo6Y2xlYXIpOgorICAgICAgICAoV2ViQ29yZTo6U2hhcmVkQ29udGV4dDNE
OjpkcmF3QXJyYXlzKToKKyAgICAgICAgKFdlYkNvcmU6OlNoYXJlZENvbnRleHQzRDo6Z2V0RXJy
b3IpOgorICAgICAgICAoV2ViQ29yZTo6U2hhcmVkQ29udGV4dDNEOjpnZXRJbnRlZ2Vydik6Cisg
ICAgICAgIChXZWJDb3JlOjpTaGFyZWRDb250ZXh0M0Q6OmNyZWF0ZUZyYW1lYnVmZmVyKToKKyAg
ICAgICAgKFdlYkNvcmU6OlNoYXJlZENvbnRleHQzRDo6Y3JlYXRlVGV4dHVyZSk6CisgICAgICAg
IChXZWJDb3JlOjpTaGFyZWRDb250ZXh0M0Q6OmRlbGV0ZUZyYW1lYnVmZmVyKToKKyAgICAgICAg
KFdlYkNvcmU6OlNoYXJlZENvbnRleHQzRDo6ZGVsZXRlVGV4dHVyZSk6CisgICAgICAgIChXZWJD
b3JlOjpTaGFyZWRDb250ZXh0M0Q6OmRlbGV0ZUNvbXBvc2l0b3JUZXh0dXJlKToKKyAgICAgICAg
KFdlYkNvcmU6OlNoYXJlZENvbnRleHQzRDo6ZnJhbWVidWZmZXJUZXh0dXJlMkQpOgorICAgICAg
ICAoV2ViQ29yZTo6U2hhcmVkQ29udGV4dDNEOjp0ZXhQYXJhbWV0ZXJpKToKKyAgICAgICAgKFdl
YkNvcmU6OlNoYXJlZENvbnRleHQzRDo6dGV4SW1hZ2UyRCk6CisgICAgICAgIChXZWJDb3JlOjpT
aGFyZWRDb250ZXh0M0Q6OnRleFN1YkltYWdlMkQpOgorICAgICAgICAoV2ViQ29yZTo6U2hhcmVk
Q29udGV4dDNEOjpyZWFkUGl4ZWxzKToKKyAgICAgICAgKFdlYkNvcmU6OlNoYXJlZENvbnRleHQz
RDo6Z2V0VGV4dHVyZSk6CisgICAgICAgIChXZWJDb3JlOjpTaGFyZWRDb250ZXh0M0Q6OmFwcGx5
Q29tcG9zaXRlT3BlcmF0b3IpOgorICAgICAgICAoV2ViQ29yZTo6U2hhcmVkQ29udGV4dDNEOjp1
c2VRdWFkVmVydGljZXMpOgorICAgICAgICAoV2ViQ29yZTo6U2hhcmVkQ29udGV4dDNEOjpzZXRB
Y3RpdmVUZXh0dXJlKToKKyAgICAgICAgKFdlYkNvcmU6OlNoYXJlZENvbnRleHQzRDo6YmluZFRl
eHR1cmUpOgorICAgICAgICAoV2ViQ29yZTo6U2hhcmVkQ29udGV4dDNEOjp1c2VGaWxsU29saWRQ
cm9ncmFtKToKKyAgICAgICAgKFdlYkNvcmU6OlNoYXJlZENvbnRleHQzRDo6dXNlVGV4dHVyZVBy
b2dyYW0pOgorICAgICAgICAoV2ViQ29yZTo6U2hhcmVkQ29udGV4dDNEOjpiaW5kRnJhbWVidWZm
ZXIpOgorICAgICAgICAoV2ViQ29yZTo6U2hhcmVkQ29udGV4dDNEOjpzZXRWaWV3cG9ydCk6Cisg
ICAgICAgIChXZWJDb3JlOjpTaGFyZWRDb250ZXh0M0Q6OnN1cHBvcnRzQkdSQSk6CisgICAgICAg
IChXZWJDb3JlOjpTaGFyZWRDb250ZXh0M0Q6OmNyZWF0ZUNvbXBvc2l0b3JUZXh0dXJlKToKKyAg
ICAgICAgKFdlYkNvcmU6OlNoYXJlZENvbnRleHQzRDo6Y29weVRleHR1cmVUb0NvbXBvc2l0b3Ip
OgorICAgICAgICAoV2ViQ29yZTo6U2hhcmVkQ29udGV4dDNEOjpwYWludHNJbnRvQ2FudmFzQnVm
ZmVyKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9ncHUvU2hhcmVkQ29udGV4dDNELmg6
IEFkZGVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2dwdS9UZXh0dXJlLmNwcDoKKyAg
ICAgICAgICBNYWMtc3BlY2lmaWMgY2hhbmdlczoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGlj
cy9tYWMvR3JhcGhpY3NMYXllckNBLmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvbWFj
L0dyYXBoaWNzTGF5ZXJDQS5tbToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXJDQTo6
c2V0Q29udGVudHNUb1dlYkdMKToKKyAgICAgICAgICBDaHJvbWl1bS1zcGVjaWZpYyBjaGFuZ2Vz
OgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0NhbnZhczJETGF5ZXJDaHJv
bWl1bS5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6Q2FudmFzMkRMYXllckNocm9taXVt
OjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6Q2FudmFzMkRMYXllckNocm9taXVtOjpDYW52
YXMyRExheWVyQ2hyb21pdW0pOgorICAgICAgICAoV2ViQ29yZTo6Q2FudmFzMkRMYXllckNocm9t
aXVtOjp1cGRhdGVDb250ZW50cyk6CisgICAgICAgIChXZWJDb3JlOjpDYW52YXMyRExheWVyQ2hy
b21pdW06OnNldENhbnZhc0ZyYW1lYnVmZmVyKToKKyAgICAgICAgKFdlYkNvcmU6OkNhbnZhczJE
TGF5ZXJDaHJvbWl1bTo6dGV4dHVyZUlkKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9j
aHJvbWl1bS9DYW52YXMyRExheWVyQ2hyb21pdW0uaDogQWRkZWQuCisgICAgICAgIChXZWJDb3Jl
OjpDYW52YXMyRExheWVyQ2hyb21pdW06OmRyYXdzQ29udGVudCk6CisgICAgICAgICogcGxhdGZv
cm0vZ3JhcGhpY3MvY2hyb21pdW0vQ2FudmFzTGF5ZXJDaHJvbWl1bS5jcHA6CisgICAgICAgICAg
Q2FudmFzTGF5ZXJDaHJvbWl1bSBpcyBub3cgYSBiYXNlIGNsYXNzIGZvciBXZWJHTExheWVyQ2hy
b21pdW0gYW5kIENhbnZhczJETGF5ZXJDaHJvbWl1bS4KKyAgICAgICAgKFdlYkNvcmU6OkNhbnZh
c0xheWVyQ2hyb21pdW06OkNhbnZhc0xheWVyQ2hyb21pdW0pOgorICAgICAgICAoV2ViQ29yZTo6
Q2FudmFzTGF5ZXJDaHJvbWl1bTo6fkNhbnZhc0xheWVyQ2hyb21pdW0pOgorICAgICAgICAoV2Vi
Q29yZTo6Q2FudmFzTGF5ZXJDaHJvbWl1bTo6ZHJhdyk6CisgICAgICAgICogcGxhdGZvcm0vZ3Jh
cGhpY3MvY2hyb21pdW0vQ2FudmFzTGF5ZXJDaHJvbWl1bS5oOgorICAgICAgICAqIHBsYXRmb3Jt
L2dyYXBoaWNzL2Nocm9taXVtL0dMRVMyQ2FudmFzLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkdM
RVMyQ2FudmFzOjpHTEVTMkNhbnZhcyk6CisgICAgICAgIChXZWJDb3JlOjpHTEVTMkNhbnZhczo6
fkdMRVMyQ2FudmFzKToKKyAgICAgICAgKFdlYkNvcmU6OkdMRVMyQ2FudmFzOjpzd2FwQnVmZmVy
cyk6CisgICAgICAgIChXZWJDb3JlOjpHTEVTMkNhbnZhczo6YmluZEZyYW1lYnVmZmVyKToKKyAg
ICAgICAgKFdlYkNvcmU6OkdMRVMyQ2FudmFzOjp0ZXh0dXJlSWRGb3JDb21wb3NpdG9yKToKKyAg
ICAgICAgKFdlYkNvcmU6OkdMRVMyQ2FudmFzOjp0ZXh0dXJlSWRGb3JDYW52YXMpOgorICAgICAg
ICAoV2ViQ29yZTo6R0xFUzJDYW52YXM6OmNsZWFyUmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpH
TEVTMkNhbnZhczo6ZmlsbFJlY3QpOgorICAgICAgICAoV2ViQ29yZTo6R0xFUzJDYW52YXM6OmRy
YXdUZXh0dXJlZFJlY3QpOgorICAgICAgICAoV2ViQ29yZTo6R0xFUzJDYW52YXM6OmRyYXdUZXh0
dXJlZFJlY3RUaWxlKToKKyAgICAgICAgKFdlYkNvcmU6OkdMRVMyQ2FudmFzOjpkcmF3UXVhZCk6
CisgICAgICAgIChXZWJDb3JlOjpHTEVTMkNhbnZhczo6Y3JlYXRlVGV4dHVyZSk6CisgICAgICAg
IChXZWJDb3JlOjpHTEVTMkNhbnZhczo6Z2V0VGV4dHVyZSk6CisgICAgICAgICogcGxhdGZvcm0v
Z3JhcGhpY3MvY2hyb21pdW0vR0xFUzJDYW52YXMuaDoKKyAgICAgICAgKFdlYkNvcmU6OkdMRVMy
Q2FudmFzOjpjb250ZXh0KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9H
cmFwaGljc0xheWVyQ2hyb21pdW0uY3BwOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NMYXll
ckNocm9taXVtOjpzZXRDb250ZW50c1RvV2ViR0wpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhp
Y3NMYXllckNocm9taXVtOjpzZXRDb250ZW50c1RvQ2FudmFzMkQpOgorICAgICAgICAqIHBsYXRm
b3JtL2dyYXBoaWNzL2Nocm9taXVtL0dyYXBoaWNzTGF5ZXJDaHJvbWl1bS5oOgorICAgICAgICAq
IHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyUmVuZGVyZXJDaHJvbWl1bS5jcHA6Cisg
ICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vV2ViR0xMYXllckNocm9taXVtLmNw
cDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpXZWJHTExheWVyQ2hyb21pdW06OmNyZWF0ZSk6
CisgICAgICAgIChXZWJDb3JlOjpXZWJHTExheWVyQ2hyb21pdW06OldlYkdMTGF5ZXJDaHJvbWl1
bSk6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTExheWVyQ2hyb21pdW06OnVwZGF0ZUNvbnRlbnRz
KToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMTGF5ZXJDaHJvbWl1bTo6c2V0Q29udGV4dCk6Cisg
ICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vV2ViR0xMYXllckNocm9taXVtLmg6
IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xMYXllckNocm9taXVtOjpkcmF3c0NvbnRl
bnQpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xMYXllckNocm9taXVtOjp0ZXh0dXJlSWQpOgor
ICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3NraWEvR3JhcGhpY3NDb250ZXh0U2tpYS5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OnNldFNoYXJlZENvbnRleHQzRCk6
CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OnRleHR1cmVJZEZvckNvbXBvc2l0
b3IpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0Ojp0ZXh0dXJlSWRGb3JDYW52
YXMpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3NraWEvSW1hZ2VCdWZmZXJTa2lhLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyOjpkcmF3KToKKyAgICAgICAgKiBwbGF0
Zm9ybS9ncmFwaGljcy9za2lhL0ltYWdlU2tpYS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpkcmF3
Qml0bWFwR0xFUzIpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3NraWEvUGxhdGZvcm1D
b250ZXh0U2tpYS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpQbGF0Zm9ybUNvbnRleHRTa2lhOjp+
UGxhdGZvcm1Db250ZXh0U2tpYSk6CisgICAgICAgIChXZWJDb3JlOjpTd2FwQnVmZmVyc0NhbGxi
YWNrSW1wbDo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OlN3YXBCdWZmZXJzQ2FsbGJhY2tJ
bXBsOjp3aWxsU3dhcEJ1ZmZlcnMpOgorICAgICAgICAoV2ViQ29yZTo6U3dhcEJ1ZmZlcnNDYWxs
YmFja0ltcGw6OlN3YXBCdWZmZXJzQ2FsbGJhY2tJbXBsKToKKyAgICAgICAgKFdlYkNvcmU6OlBs
YXRmb3JtQ29udGV4dFNraWE6OnNldFNoYXJlZENvbnRleHQzRCk6CisgICAgICAgIChXZWJDb3Jl
OjpQbGF0Zm9ybUNvbnRleHRTa2lhOjpzd2FwQnVmZmVycyk6CisgICAgICAgIChXZWJDb3JlOjpQ
bGF0Zm9ybUNvbnRleHRTa2lhOjp1cGxvYWRTb2Z0d2FyZVRvSGFyZHdhcmUpOgorICAgICAgICAo
V2ViQ29yZTo6UGxhdGZvcm1Db250ZXh0U2tpYTo6cmVhZGJhY2tIYXJkd2FyZVRvU29mdHdhcmUp
OgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3NraWEvUGxhdGZvcm1Db250ZXh0U2tpYS5o
OgorCiAyMDEwLTA4LTMwICBDaHJpcyBSb2dlcnMgIDxjcm9nZXJzQGdvb2dsZS5jb20+CiAKICAg
ICAgICAgUmV2aWV3ZWQgYnkgS2VubmV0aCBSdXNzZWxsLgpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9X
ZWJDb3JlLmd5cGkgYi9XZWJDb3JlL1dlYkNvcmUuZ3lwaQppbmRleCBlNWI1N2JhMDhlM2EwMGQ4
ZDU5OGNkMmJlNDA3M2Q3MGE5YTBiZGY3Li5mY2NiZmE1NjYyNWVmMTg5ZmY5ZTNhYmUzNDg1NjAx
MGM1ZDM3YWNjIDEwMDY0NAotLS0gYS9XZWJDb3JlL1dlYkNvcmUuZ3lwaQorKysgYi9XZWJDb3Jl
L1dlYkNvcmUuZ3lwaQpAQCAtMjIzNiw2ICsyMjM2LDggQEAKICAgICAgICAgICAgICdwbGF0Zm9y
bS9ncmFwaGljcy9jZy9QYXRoQ0cuY3BwJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGlj
cy9jZy9QYXR0ZXJuQ0cuY3BwJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jZy9U
cmFuc2Zvcm1hdGlvbk1hdHJpeENHLmNwcCcsCisgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhp
Y3MvY2hyb21pdW0vQ2FudmFzMkRMYXllckNocm9taXVtLmNwcCcsCisgICAgICAgICAgICAncGxh
dGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vQ2FudmFzMkRMYXllckNocm9taXVtLmgnLAogICAgICAg
ICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0NhbnZhc0xheWVyQ2hyb21pdW0uY3Bw
JywKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9DYW52YXNMYXllckNo
cm9taXVtLmgnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0NvbnRl
bnRMYXllckNocm9taXVtLmNwcCcsCkBAIC0yMjgzLDYgKzIyODUsOCBAQAogICAgICAgICAgICAg
J3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1VuaXNjcmliZUhlbHBlclRleHRSdW4uaCcsCiAg
ICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vVmlkZW9MYXllckNocm9taXVt
LmNwcCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vVmlkZW9MYXll
ckNocm9taXVtLmgnLAorICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1dl
YkdMTGF5ZXJDaHJvbWl1bS5jcHAnLAorICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2No
cm9taXVtL1dlYkdMTGF5ZXJDaHJvbWl1bS5oJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFw
aGljcy9jb2NvYS9Gb250UGxhdGZvcm1EYXRhLmgnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dy
YXBoaWNzL2ZpbHRlcnMvRkVCbGVuZC5jcHAnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBo
aWNzL2ZpbHRlcnMvRkVCbGVuZC5oJywKQEAgLTIzMDMsNiArMjMwNywxMCBAQAogICAgICAgICAg
ICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvU291cmNlQWxwaGEuaCcsCiAgICAgICAgICAg
ICAncGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9Tb3VyY2VHcmFwaGljLmNwcCcsCiAgICAgICAg
ICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9Tb3VyY2VHcmFwaGljLmgnLAorICAgICAg
ICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2dwdS9DYW52YXNGcmFtZWJ1ZmZlci5jcHAnLAorICAg
ICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2dwdS9DYW52YXNGcmFtZWJ1ZmZlci5oJywKKyAg
ICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9ncHUvU2hhcmVkQ29udGV4dDNELmNwcCcsCisg
ICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvZ3B1L1NoYXJlZENvbnRleHQzRC5oJywKICAg
ICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9ncHUvU2hhZGVyLmNwcCcsCiAgICAgICAgICAg
ICAncGxhdGZvcm0vZ3JhcGhpY3MvZ3B1L1NoYWRlci5oJywKICAgICAgICAgICAgICdwbGF0Zm9y
bS9ncmFwaGljcy9ncHUvU29saWRGaWxsU2hhZGVyLmNwcCcsCkBAIC0yNTYxLDggKzI1NjksOCBA
QAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlQnVmZmVyLmNwcCcsCiAgICAg
ICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VCdWZmZXIuaCcsCiAgICAgICAgICAgICAn
cGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VPYnNlcnZlci5oJywKLSAgICAgICAgICAgICdwbGF0Zm9y
bS9ncmFwaGljcy9JbWFnZVNvdXJjZS5oJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGlj
cy9JbWFnZVNvdXJjZS5jcHAnLAorICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdl
U291cmNlLmgnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL0ludFBvaW50LmgnLAog
ICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL0ludFJlY3QuY3BwJywKICAgICAgICAgICAg
ICdwbGF0Zm9ybS9ncmFwaGljcy9JbnRSZWN0LmgnLApkaWZmIC0tZ2l0IGEvV2ViQ29yZS9odG1s
L2NhbnZhcy9DYW52YXNSZW5kZXJpbmdDb250ZXh0LmNwcCBiL1dlYkNvcmUvaHRtbC9jYW52YXMv
Q2FudmFzUmVuZGVyaW5nQ29udGV4dC5jcHAKaW5kZXggMWU4OTdkMzBlY2UxOTgzOTEyOGYwMDhk
ZGY4ZDQ4NjBkNzE0MDYyNy4uZTAxOTMzMmJhODFmNTNjOWViMmNjY2M1M2IyNDUzMDQ2ZWNiZDg1
ZSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9odG1sL2NhbnZhcy9DYW52YXNSZW5kZXJpbmdDb250ZXh0
LmNwcAorKysgYi9XZWJDb3JlL2h0bWwvY2FudmFzL0NhbnZhc1JlbmRlcmluZ0NvbnRleHQuY3Bw
CkBAIC0yNSw5ICsyNSw2IEBACiAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJDYW52
YXNSZW5kZXJpbmdDb250ZXh0LmgiCi0jaWYgRU5BQkxFKEFDQ0VMRVJBVEVEXzJEX0NBTlZBUykg
fHwgRU5BQkxFKDNEX0NBTlZBUykKLSNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQzRC5oIgotI2Vu
ZGlmCiAjaW5jbHVkZSAiSFRNTENhbnZhc0VsZW1lbnQuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUg
ewpAQCAtNDcsMTMgKzQ0LDQgQEAgdm9pZCBDYW52YXNSZW5kZXJpbmdDb250ZXh0OjpkZXJlZigp
CiAgICAgbV9jYW52YXMtPmRlcmVmKCk7IAogfQogCi1ib29sIENhbnZhc1JlbmRlcmluZ0NvbnRl
eHQ6OnBhaW50c0ludG9DYW52YXNCdWZmZXIoKSBjb25zdAotewotI2lmIEVOQUJMRShBQ0NFTEVS
QVRFRF8yRF9DQU5WQVMpIHx8IEVOQUJMRSgzRF9DQU5WQVMpCi0gICAgaWYgKEdyYXBoaWNzQ29u
dGV4dDNEKiBjb250ZXh0M0QgPSBncmFwaGljc0NvbnRleHQzRCgpKQotICAgICAgICByZXR1cm4g
Y29udGV4dDNELT5wYWludHNJbnRvQ2FudmFzQnVmZmVyKCk7Ci0jZW5kaWYKLSAgICByZXR1cm4g
dHJ1ZTsKLX0KLQogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9o
dG1sL2NhbnZhcy9DYW52YXNSZW5kZXJpbmdDb250ZXh0LmggYi9XZWJDb3JlL2h0bWwvY2FudmFz
L0NhbnZhc1JlbmRlcmluZ0NvbnRleHQuaAppbmRleCAyY2RiZTFkMzc2NTk0ZGJlMGRmYmQ3MDBm
MmVmYjczNGEzZGI5MmM2Li5jNzE2OGIxZDA3ZGVhOGNmYzRkNjk0MTlhNGE2NWM0ZTJmYmFkY2Ey
IDEwMDY0NAotLS0gYS9XZWJDb3JlL2h0bWwvY2FudmFzL0NhbnZhc1JlbmRlcmluZ0NvbnRleHQu
aAorKysgYi9XZWJDb3JlL2h0bWwvY2FudmFzL0NhbnZhc1JlbmRlcmluZ0NvbnRleHQuaApAQCAt
MzEsNyArMzEsNiBAQAogbmFtZXNwYWNlIFdlYkNvcmUgewogCiAgICAgY2xhc3MgV2ViR0xPYmpl
Y3Q7Ci0gICAgY2xhc3MgR3JhcGhpY3NDb250ZXh0M0Q7CiAgICAgY2xhc3MgSFRNTENhbnZhc0Vs
ZW1lbnQ7CiAKICAgICBjbGFzcyBDYW52YXNSZW5kZXJpbmdDb250ZXh0IDogcHVibGljIE5vbmNv
cHlhYmxlIHsKQEAgLTQ5LDEyICs0OCw4IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAg
dmlydHVhbCBib29sIGlzM2QoKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQogICAgICAgICB2aXJ0
dWFsIGJvb2wgaXNBY2NlbGVyYXRlZCgpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CiAgICAgICAg
IAotICAgICAgICAvLyBGb3IgYWNjZWxlcmF0ZWQgY2FudmFzZXMsIHJldHVybnMgYSBwb2ludGVy
IHRvIHRoZSB1bmRlcmx5aW5nIEdyYXBoaWNzQ29udGV4dDNELgotICAgICAgICAvLyBGb3Igbm9u
IGFjY2VsZXJhdGVkIGNhbnZhc2VzIHJldHVybnMgMC4KLSAgICAgICAgdmlydHVhbCBHcmFwaGlj
c0NvbnRleHQzRCogZ3JhcGhpY3NDb250ZXh0M0QoKSBjb25zdCB7IHJldHVybiAwOyB9Ci0KICAg
ICAgICAgdmlydHVhbCB2b2lkIHBhaW50UmVuZGVyaW5nUmVzdWx0c1RvQ2FudmFzKCkge30KLSAg
ICAgICAgYm9vbCBwYWludHNJbnRvQ2FudmFzQnVmZmVyKCkgY29uc3Q7CisgICAgICAgIHZpcnR1
YWwgYm9vbCBwYWludHNJbnRvQ2FudmFzQnVmZmVyKCkgY29uc3QgeyByZXR1cm4gdHJ1ZTsgfQog
CiAgICAgcHJpdmF0ZToKICAgICAgICAgSFRNTENhbnZhc0VsZW1lbnQqIG1fY2FudmFzOwpkaWZm
IC0tZ2l0IGEvV2ViQ29yZS9odG1sL2NhbnZhcy9DYW52YXNSZW5kZXJpbmdDb250ZXh0MkQuY3Bw
IGIvV2ViQ29yZS9odG1sL2NhbnZhcy9DYW52YXNSZW5kZXJpbmdDb250ZXh0MkQuY3BwCmluZGV4
IDZkZjZhYmY5Njc0YWQ5YTIwZjIyNzJhMTc4OTNjODU4NTBkZTU3ZDcuLmNlNGQ1YmJmYzY5YWY4
ZWVkYjBlNDJkOWNmZDM2MTRhNmEwOWU3OTggMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvaHRtbC9jYW52
YXMvQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJELmNwcAorKysgYi9XZWJDb3JlL2h0bWwvY2FudmFz
L0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRC5jcHAKQEAgLTU5LDggKzU5LDEyIEBACiAjaW5jbHVk
ZSAiVGV4dE1ldHJpY3MuaCIKIAogI2lmIEVOQUJMRShBQ0NFTEVSQVRFRF8yRF9DQU5WQVMpCisj
aW5jbHVkZSAiQ2FudmFzRnJhbWVidWZmZXIuaCIKKyNpbmNsdWRlICJDaHJvbWUuaCIKKyNpbmNs
dWRlICJDaHJvbWVDbGllbnQuaCIKICNpbmNsdWRlICJGcmFtZVZpZXcuaCIKICNpbmNsdWRlICJH
cmFwaGljc0NvbnRleHQzRC5oIgorI2luY2x1ZGUgIlNoYXJlZENvbnRleHQzRC5oIgogI2lmIFVT
RShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKICNpbmNsdWRlICJSZW5kZXJMYXllci5oIgogI2Vu
ZGlmCkBAIC0xMjQsMTcgKzEyOCwxMSBAQCBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ6OkNhbnZh
c1JlbmRlcmluZ0NvbnRleHQyRChIVE1MQ2FudmFzRWxlbWVudCogY2FudmFzLCBibwogICAgICAg
ICByZXR1cm47CiAgICAgaWYgKCFwLT5zZXR0aW5ncygpLT5hY2NlbGVyYXRlZDJkQ2FudmFzRW5h
YmxlZCgpKQogICAgICAgICByZXR1cm47Ci0gICAgaWYgKEZyYW1lVmlldyogdmlldyA9IGNhbnZh
cy0+ZG9jdW1lbnQoKS0+dmlldygpKSB7Ci0gICAgICAgIGlmIChTY3JvbGxWaWV3KiByb290Vmll
dyA9IHZpZXctPnJvb3QoKSkgewotICAgICAgICAgICAgaWYgKEhvc3RXaW5kb3cqIGhvc3RXaW5k
b3cgPSByb290Vmlldy0+aG9zdFdpbmRvdygpKSB7Ci0gICAgICAgICAgICAgICAgLy8gU2V0IHVw
IG91ciBjb250ZXh0Ci0gICAgICAgICAgICAgICAgR3JhcGhpY3NDb250ZXh0M0Q6OkF0dHJpYnV0
ZXMgYXR0cjsKLSAgICAgICAgICAgICAgICBhdHRyLnN0ZW5jaWwgPSB0cnVlOwotICAgICAgICAg
ICAgICAgIG1fY29udGV4dDNEID0gR3JhcGhpY3NDb250ZXh0M0Q6OmNyZWF0ZShhdHRyLCBob3N0
V2luZG93KTsKLSAgICAgICAgICAgICAgICBpZiAobV9jb250ZXh0M0QpCi0gICAgICAgICAgICAg
ICAgICAgIGlmIChHcmFwaGljc0NvbnRleHQqIGMgPSBkcmF3aW5nQ29udGV4dCgpKQotICAgICAg
ICAgICAgICAgICAgICAgICAgYy0+c2V0R3JhcGhpY3NDb250ZXh0M0QobV9jb250ZXh0M0QuZ2V0
KCksIEludFNpemUoY2FudmFzLT53aWR0aCgpLCBjYW52YXMtPmhlaWdodCgpKSk7Ci0gICAgICAg
ICAgICB9CisgICAgbV9jb250ZXh0M0QgPSBwLT5jaHJvbWUoKS0+Y2xpZW50KCktPmdldFNoYXJl
ZENvbnRleHQzRCgpOworICAgIGlmIChtX2NvbnRleHQzRCkgeworICAgICAgICBpZiAoR3JhcGhp
Y3NDb250ZXh0KiBjID0gZHJhd2luZ0NvbnRleHQoKSkgeworICAgICAgICAgICAgbV9mcmFtZWJ1
ZmZlciA9IENhbnZhc0ZyYW1lYnVmZmVyOjpjcmVhdGUobV9jb250ZXh0M0QuZ2V0KCksIEludFNp
emUoY2FudmFzLT53aWR0aCgpLCBjYW52YXMtPmhlaWdodCgpKSk7CisgICAgICAgICAgICBjLT5z
ZXRTaGFyZWRDb250ZXh0M0QobV9jb250ZXh0M0QuZ2V0KCksIG1fZnJhbWVidWZmZXIuZ2V0KCks
IEludFNpemUoY2FudmFzLT53aWR0aCgpLCBjYW52YXMtPmhlaWdodCgpKSk7CiAgICAgICAgIH0K
ICAgICB9CiAjZW5kaWYKQEAgLTE1Myw2ICsxNTEsMTYgQEAgYm9vbCBDYW52YXNSZW5kZXJpbmdD
b250ZXh0MkQ6OmlzQWNjZWxlcmF0ZWQoKSBjb25zdAogI2VuZGlmCiB9CiAKK2Jvb2wgQ2FudmFz
UmVuZGVyaW5nQ29udGV4dDJEOjpwYWludHNJbnRvQ2FudmFzQnVmZmVyKCkgY29uc3QKK3sKKyNp
ZiBFTkFCTEUoQUNDRUxFUkFURURfMkRfQ0FOVkFTKQorICAgIGlmIChtX2NvbnRleHQzRCkKKyAg
ICAgICAgcmV0dXJuIG1fY29udGV4dDNELT5wYWludHNJbnRvQ2FudmFzQnVmZmVyKCk7CisjZW5k
aWYKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworCiB2b2lkIENhbnZhc1JlbmRlcmluZ0NvbnRleHQy
RDo6cmVzZXQoKQogewogICAgIG1fc3RhdGVTdGFjay5yZXNpemUoMSk7CkBAIC0xNjAsOCArMTY4
LDEwIEBAIHZvaWQgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEOjpyZXNldCgpCiAgICAgbV9wYXRo
LmNsZWFyKCk7CiAjaWYgRU5BQkxFKEFDQ0VMRVJBVEVEXzJEX0NBTlZBUykKICAgICBpZiAobV9j
b250ZXh0M0QpIHsKLSAgICAgICAgaWYgKEdyYXBoaWNzQ29udGV4dCogYyA9IGRyYXdpbmdDb250
ZXh0KCkpCi0gICAgICAgICAgICBjLT5zZXRHcmFwaGljc0NvbnRleHQzRChtX2NvbnRleHQzRC5n
ZXQoKSwgSW50U2l6ZShjYW52YXMoKS0+d2lkdGgoKSwgY2FudmFzKCktPmhlaWdodCgpKSk7Cisg
ICAgICAgIGlmIChHcmFwaGljc0NvbnRleHQqIGMgPSBkcmF3aW5nQ29udGV4dCgpKSB7CisgICAg
ICAgICAgICBtX2ZyYW1lYnVmZmVyID0gQ2FudmFzRnJhbWVidWZmZXI6OmNyZWF0ZShtX2NvbnRl
eHQzRC5nZXQoKSwgSW50U2l6ZShjYW52YXMoKS0+d2lkdGgoKSwgY2FudmFzKCktPmhlaWdodCgp
KSk7CisgICAgICAgICAgICBjLT5zZXRTaGFyZWRDb250ZXh0M0QobV9jb250ZXh0M0QuZ2V0KCks
IG1fZnJhbWVidWZmZXIuZ2V0KCksIEludFNpemUoY2FudmFzKCktPndpZHRoKCksIGNhbnZhcygp
LT5oZWlnaHQoKSkpOworICAgICAgICB9CiAgICAgfQogI2VuZGlmCiB9CkBAIC0xMjY5LDcgKzEy
NzksOSBAQCB2b2lkIENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRDo6ZHJhd0ltYWdlKEhUTUxDYW52
YXNFbGVtZW50KiBzb3VyY2VDYW52YXMsIGNvbnN0CiAgICAgaWYgKCFzb3VyY2VDYW52YXMtPm9y
aWdpbkNsZWFuKCkpCiAgICAgICAgIGNhbnZhcygpLT5zZXRPcmlnaW5UYWludGVkKCk7CiAKKyNp
ZiAhRU5BQkxFKEFDQ0VMRVJBVEVEXzJEX0NBTlZBUykKICAgICBzb3VyY2VDYW52YXMtPm1ha2VS
ZW5kZXJpbmdSZXN1bHRzQXZhaWxhYmxlKCk7CisjZW5kaWYKIAogICAgIGMtPmRyYXdJbWFnZUJ1
ZmZlcihidWZmZXIsIERldmljZUNvbG9yU3BhY2UsIGRlc3RSZWN0LCBzb3VyY2VSZWN0LCBzdGF0
ZSgpLm1fZ2xvYmFsQ29tcG9zaXRlKTsKICAgICBkaWREcmF3KGRlc3RSZWN0KTsKQEAgLTE1MDQs
NyArMTUxNiw3IEBAIHZvaWQgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEOjpkaWREcmF3KGNvbnN0
IEZsb2F0UmVjdCYgciwgdW5zaWduZWQgb3B0aW9ucykKICNpZiBFTkFCTEUoQUNDRUxFUkFURURf
MkRfQ0FOVkFTKSAmJiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCiAgICAgLy8gSWYgd2Ug
YXJlIGRyYXdpbmcgdG8gaGFyZHdhcmUgYW5kIHdlIGhhdmUgYSBjb21wb3NpdGVkIGxheWVyLCBq
dXN0IGNhbGwgcmVuZGVyZXJDb250ZW50Q2hhbmdlZCgpLgogICAgIFJlbmRlckJveCogcmVuZGVy
Qm94ID0gY2FudmFzKCktPnJlbmRlckJveCgpOwotICAgIGlmIChtX2NvbnRleHQzRCAmJiByZW5k
ZXJCb3ggJiYgcmVuZGVyQm94LT5oYXNMYXllcigpICYmIHJlbmRlckJveC0+bGF5ZXIoKS0+aGFz
QWNjZWxlcmF0ZWRDb21wb3NpdGluZygpKQorICAgIGlmIChpc0FjY2VsZXJhdGVkKCkgJiYgcmVu
ZGVyQm94ICYmIHJlbmRlckJveC0+aGFzTGF5ZXIoKSAmJiByZW5kZXJCb3gtPmxheWVyKCktPmhh
c0FjY2VsZXJhdGVkQ29tcG9zaXRpbmcoKSkKICAgICAgICAgcmVuZGVyQm94LT5sYXllcigpLT5y
ZW5kZXJlckNvbnRlbnRDaGFuZ2VkKCk7CiAgICAgZWxzZQogI2VuZGlmCmRpZmYgLS1naXQgYS9X
ZWJDb3JlL2h0bWwvY2FudmFzL0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRC5oIGIvV2ViQ29yZS9o
dG1sL2NhbnZhcy9DYW52YXNSZW5kZXJpbmdDb250ZXh0MkQuaAppbmRleCA5ODU3MzQ0M2U4MWRm
OWY3ZDk2ZjY5MjMyZmVmZjkwOGUwY2U2Yjg5Li40NWE2NjViMzFmNDM5NTM3YzRmODBjNjk4OTU1
YzY2ZTA5MTkyMTkxIDEwMDY0NAotLS0gYS9XZWJDb3JlL2h0bWwvY2FudmFzL0NhbnZhc1JlbmRl
cmluZ0NvbnRleHQyRC5oCisrKyBiL1dlYkNvcmUvaHRtbC9jYW52YXMvQ2FudmFzUmVuZGVyaW5n
Q29udGV4dDJELmgKQEAgLTYxLDcgKzYxLDcgQEAgY2xhc3MgS1VSTDsKIGNsYXNzIFRleHRNZXRy
aWNzOwogCiAjaWYgRU5BQkxFKEFDQ0VMRVJBVEVEXzJEX0NBTlZBUykKLWNsYXNzIEdyYXBoaWNz
Q29udGV4dDNEOworY2xhc3MgU2hhcmVkQ29udGV4dDNEOwogI2VuZGlmCiAKIHR5cGVkZWYgaW50
IEV4Y2VwdGlvbkNvZGU7CkBAIC03NCw2ICs3NCw3IEBAIHB1YmxpYzoKIAogICAgIHZpcnR1YWwg
Ym9vbCBpczJkKCkgY29uc3QgeyByZXR1cm4gdHJ1ZTsgfQogICAgIHZpcnR1YWwgYm9vbCBpc0Fj
Y2VsZXJhdGVkKCkgY29uc3Q7CisgICAgdmlydHVhbCBib29sIHBhaW50c0ludG9DYW52YXNCdWZm
ZXIoKSBjb25zdDsKIAogICAgIENhbnZhc1N0eWxlKiBzdHJva2VTdHlsZSgpIGNvbnN0OwogICAg
IHZvaWQgc2V0U3Ryb2tlU3R5bGUoUGFzc1JlZlB0cjxDYW52YXNTdHlsZT4pOwpAQCAtMjI0LDcg
KzIyNSw3IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIHZvaWQgcGFpbnRSZW5kZXJpbmdSZXN1bHRz
VG9DYW52YXMoKTsKIAogI2lmIEVOQUJMRShBQ0NFTEVSQVRFRF8yRF9DQU5WQVMpCi0gICAgdmly
dHVhbCBHcmFwaGljc0NvbnRleHQzRCogZ3JhcGhpY3NDb250ZXh0M0QoKSBjb25zdCB7IHJldHVy
biBtX2NvbnRleHQzRC5nZXQoKTsgfQorICAgIENhbnZhc0ZyYW1lYnVmZmVyKiBmcmFtZWJ1ZmZl
cigpIHsgcmV0dXJuIG1fZnJhbWVidWZmZXIuZ2V0KCk7IH0KICNlbmRpZgogCiBwcml2YXRlOgpA
QCAtMjk4LDcgKzI5OSw4IEBAIHByaXZhdGU6CiAjZW5kaWYKIAogI2lmIEVOQUJMRShBQ0NFTEVS
QVRFRF8yRF9DQU5WQVMpCi0gICAgT3duUHRyPEdyYXBoaWNzQ29udGV4dDNEPiBtX2NvbnRleHQz
RDsKKyAgICBSZWZQdHI8U2hhcmVkQ29udGV4dDNEPiBtX2NvbnRleHQzRDsKKyAgICBPd25QdHI8
Q2FudmFzRnJhbWVidWZmZXI+IG1fZnJhbWVidWZmZXI7CiAjZW5kaWYKIH07CiAKZGlmZiAtLWdp
dCBhL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xSZW5kZXJpbmdDb250ZXh0LmNwcCBiL1dlYkNv
cmUvaHRtbC9jYW52YXMvV2ViR0xSZW5kZXJpbmdDb250ZXh0LmNwcAppbmRleCA5NTkxYTUzY2Zl
YzA1OWUyOTkzNmM1ODE5MDcwYTRlYWZlOWNkNjgzLi42NGNiNWQzZWZkY2ZlYjJlMjUzNzA0MzY4
OTRkZjBjNTkzNmEyZjNhIDEwMDY0NAotLS0gYS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMUmVu
ZGVyaW5nQ29udGV4dC5jcHAKKysrIGIvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFJlbmRlcmlu
Z0NvbnRleHQuY3BwCkBAIC0xNzAsNiArMTcwLDExIEBAIHZvaWQgV2ViR0xSZW5kZXJpbmdDb250
ZXh0OjpwYWludFJlbmRlcmluZ1Jlc3VsdHNUb0NhbnZhcygpCiAgICAgbV9jb250ZXh0LT5wYWlu
dFJlbmRlcmluZ1Jlc3VsdHNUb0NhbnZhcyh0aGlzKTsKIH0KIAorYm9vbCBXZWJHTFJlbmRlcmlu
Z0NvbnRleHQ6OnBhaW50c0ludG9DYW52YXNCdWZmZXIoKSBjb25zdAoreworICAgIHJldHVybiBt
X2NvbnRleHQtPnBhaW50c0ludG9DYW52YXNCdWZmZXIoKTsKK30KKwogdm9pZCBXZWJHTFJlbmRl
cmluZ0NvbnRleHQ6OnJlc2hhcGUoaW50IHdpZHRoLCBpbnQgaGVpZ2h0KQogewogICAgIGlmICht
X25lZWRzVXBkYXRlKSB7CmRpZmYgLS1naXQgYS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMUmVu
ZGVyaW5nQ29udGV4dC5oIGIvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFJlbmRlcmluZ0NvbnRl
eHQuaAppbmRleCA2NmVjOGQ4MmFhNzNmZGI0YjQ5ZjI3NmIzYjZkMDUyZDUzODQzYWJiLi44MTM5
MGY5ZTRmZDUxOTBiZGZkNWUyZTAwNDU3ZmU2NGM2NTExYzlkIDEwMDY0NAotLS0gYS9XZWJDb3Jl
L2h0bWwvY2FudmFzL1dlYkdMUmVuZGVyaW5nQ29udGV4dC5oCisrKyBiL1dlYkNvcmUvaHRtbC9j
YW52YXMvV2ViR0xSZW5kZXJpbmdDb250ZXh0LmgKQEAgLTYzLDYgKzYzLDcgQEAgcHVibGljOgog
CiAgICAgdmlydHVhbCBib29sIGlzM2QoKSBjb25zdCB7IHJldHVybiB0cnVlOyB9CiAgICAgdmly
dHVhbCBib29sIGlzQWNjZWxlcmF0ZWQoKSBjb25zdCB7IHJldHVybiB0cnVlOyB9CisgICAgdmly
dHVhbCBib29sIHBhaW50c0ludG9DYW52YXNCdWZmZXIoKSBjb25zdDsKIAogICAgIHZvaWQgYWN0
aXZlVGV4dHVyZSh1bnNpZ25lZCBsb25nIHRleHR1cmUsIEV4Y2VwdGlvbkNvZGUmIGVjKTsKICAg
ICB2b2lkIGF0dGFjaFNoYWRlcihXZWJHTFByb2dyYW0qLCBXZWJHTFNoYWRlciosIEV4Y2VwdGlv
bkNvZGUmIGVjKTsKQEAgLTI3Nyw3ICsyNzgsNyBAQCBwdWJsaWM6CiAKICAgICB2b2lkIHZpZXdw
b3J0KGxvbmcgeCwgbG9uZyB5LCB1bnNpZ25lZCBsb25nIHdpZHRoLCB1bnNpZ25lZCBsb25nIGhl
aWdodCk7CiAKLSAgICB2aXJ0dWFsIEdyYXBoaWNzQ29udGV4dDNEKiBncmFwaGljc0NvbnRleHQz
RCgpIGNvbnN0IHsgcmV0dXJuIG1fY29udGV4dC5nZXQoKTsgfQorICAgIEdyYXBoaWNzQ29udGV4
dDNEKiBncmFwaGljc0NvbnRleHQzRCgpIGNvbnN0IHsgcmV0dXJuIG1fY29udGV4dC5nZXQoKTsg
fQogCiAgICAgdm9pZCByZXNoYXBlKGludCB3aWR0aCwgaW50IGhlaWdodCk7CiAKZGlmZiAtLWdp
dCBhL1dlYkNvcmUvbG9hZGVyL0VtcHR5Q2xpZW50cy5oIGIvV2ViQ29yZS9sb2FkZXIvRW1wdHlD
bGllbnRzLmgKaW5kZXggMjcwNzUyZGQ3ZjhmMDFmYTk0ZjdjMjkzZDNjZmU3ZmE5NWVkMjkxZi4u
ZWRhNTViYTc1NmJjZDU1NTA3ZjZkNGU3OTI2OWQ4ZWIwYzVhZTJkMyAxMDA2NDQKLS0tIGEvV2Vi
Q29yZS9sb2FkZXIvRW1wdHlDbGllbnRzLmgKKysrIGIvV2ViQ29yZS9sb2FkZXIvRW1wdHlDbGll
bnRzLmgKQEAgLTQ2LDYgKzQ2LDEwIEBACiAjaW5jbHVkZSAiUmVzb3VyY2VFcnJvci5oIgogI2lu
Y2x1ZGUgIlNlYXJjaFBvcHVwTWVudS5oIgogCisjaWYgRU5BQkxFKEFDQ0VMRVJBVEVEXzJEX0NB
TlZBUykKKyNpbmNsdWRlICJTaGFyZWRDb250ZXh0M0QuaCIKKyNlbmRpZgorCiAvKgogIFRoaXMg
ZmlsZSBob2xkcyBlbXB0eSBDbGllbnQgc3R1YnMgZm9yIHVzZSBieSBXZWJDb3JlLgogIFZpZXds
ZXNzIGVsZW1lbnQgbmVlZHMgdG8gY3JlYXRlIGEgZHVtbXkgUGFnZS0+RnJhbWUtPkZyYW1lVmll
dyB0cmVlIGZvciB1c2UgaW4gcGFyc2luZyBvciBleGVjdXRpbmcgSmF2YVNjcmlwdC4KQEAgLTE5
MCw5ICsxOTQsMTMgQEAgcHVibGljOgogICAgIHZpcnR1YWwgdm9pZCBjYW5jZWxHZW9sb2NhdGlv
blBlcm1pc3Npb25SZXF1ZXN0Rm9yRnJhbWUoRnJhbWUqLCBHZW9sb2NhdGlvbiopIHt9CiAKICNp
ZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCi0gICAgdmlydHVhbCB2b2lkIGF0dGFjaFJv
b3RHcmFwaGljc0xheWVyKEZyYW1lKiwgR3JhcGhpY3NMYXllciopIHt9OwotICAgIHZpcnR1YWwg
dm9pZCBzZXROZWVkc09uZVNob3REcmF3aW5nU3luY2hyb25pemF0aW9uKCkge307Ci0gICAgdmly
dHVhbCB2b2lkIHNjaGVkdWxlQ29tcG9zaXRpbmdMYXllclN5bmMoKSB7fTsKKyAgICB2aXJ0dWFs
IHZvaWQgYXR0YWNoUm9vdEdyYXBoaWNzTGF5ZXIoRnJhbWUqLCBHcmFwaGljc0xheWVyKikge30K
KyAgICB2aXJ0dWFsIHZvaWQgc2V0TmVlZHNPbmVTaG90RHJhd2luZ1N5bmNocm9uaXphdGlvbigp
IHt9CisgICAgdmlydHVhbCB2b2lkIHNjaGVkdWxlQ29tcG9zaXRpbmdMYXllclN5bmMoKSB7fQor
I2VuZGlmCisKKyNpZiBFTkFCTEUoQUNDRUxFUkFURURfMkRfQ0FOVkFTKQorICAgIHZpcnR1YWwg
UGFzc1JlZlB0cjxTaGFyZWRDb250ZXh0M0Q+IGdldFNoYXJlZENvbnRleHQzRCgpIHsgcmV0dXJu
IDA7IH0KICNlbmRpZgogCiAjaWYgUExBVEZPUk0oV0lOKQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9w
YWdlL0Nocm9tZUNsaWVudC5oIGIvV2ViQ29yZS9wYWdlL0Nocm9tZUNsaWVudC5oCmluZGV4IGQz
ZTE2NjIyOTJhMzFhODllNWJhYTc0NzA1MjBhOTg4YmUxODIwNzkuLjVjNzZjMzlkYTZmMGU1YTAz
MDNkZTZmODA0NGE0OWFiMzQ3Yjg3N2EgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvcGFnZS9DaHJvbWVD
bGllbnQuaAorKysgYi9XZWJDb3JlL3BhZ2UvQ2hyb21lQ2xpZW50LmgKQEAgLTU3LDYgKzU3LDcg
QEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgIGNsYXNzIE5vZGU7CiAgICAgY2xhc3MgUGFnZTsK
ICAgICBjbGFzcyBTZWN1cml0eU9yaWdpbjsKKyAgICBjbGFzcyBTaGFyZWRDb250ZXh0M0Q7CiAg
ICAgY2xhc3MgUG9wdXBNZW51Q2xpZW50OwogICAgIGNsYXNzIFdpZGdldDsKIApAQCAtMjMwLDYg
KzIzMSwxMCBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIHZpcnR1YWwgYm9vbCBhbGxv
d3NBY2NlbGVyYXRlZENvbXBvc2l0aW5nKCkgY29uc3QgeyByZXR1cm4gdHJ1ZTsgfQogI2VuZGlm
CiAKKyNpZiBFTkFCTEUoQUNDRUxFUkFURURfMkRfQ0FOVkFTKQorICAgICAgICB2aXJ0dWFsIFBh
c3NSZWZQdHI8U2hhcmVkQ29udGV4dDNEPiBnZXRTaGFyZWRDb250ZXh0M0QoKSA9IDA7CisjZW5k
aWYKKwogICAgICAgICB2aXJ0dWFsIGJvb2wgc3VwcG9ydHNGdWxsc2NyZWVuRm9yTm9kZShjb25z
dCBOb2RlKikgeyByZXR1cm4gZmFsc2U7IH0KICAgICAgICAgdmlydHVhbCB2b2lkIGVudGVyRnVs
bHNjcmVlbkZvck5vZGUoTm9kZSopIHsgfQogICAgICAgICB2aXJ0dWFsIHZvaWQgZXhpdEZ1bGxz
Y3JlZW5Gb3JOb2RlKE5vZGUqKSB7IH0KZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvR3JhcGhpY3NDb250ZXh0LmNwcCBiL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3Jh
cGhpY3NDb250ZXh0LmNwcAppbmRleCA0NzM4NGI5ZWU4NGQ2ZGEwODYwZjMxNjFiM2JjMDgyMTE5
ZjQ1YmZmLi43OTdmMmI2NDYzYmE4NmY5ZTRhYzA3YTJmZDE3MWI0N2YzMjhjZjU0IDEwMDY0NAot
LS0gYS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dC5jcHAKKysrIGIv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQuY3BwCkBAIC02MDAsMTQg
KzYwMCw0IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0OjphZGp1c3RMaW5lVG9QaXhlbEJvdW5kYXJp
ZXMoRmxvYXRQb2ludCYgcDEsIEZsb2F0UG9pbnQmIHAyCiAgICAgfQogfQogCi0jaWYgIVBMQVRG
T1JNKFNLSUEpCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6c2V0R3JhcGhpY3NDb250ZXh0M0QoR3Jh
cGhpY3NDb250ZXh0M0QqLCBjb25zdCBJbnRTaXplJikKLXsKLX0KLQotdm9pZCBHcmFwaGljc0Nv
bnRleHQ6OnN5bmNTb2Z0d2FyZUNhbnZhcygpCi17Ci19Ci0jZW5kaWYKLQogfQpkaWZmIC0tZ2l0
IGEvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQuaCBiL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0LmgKaW5kZXggOTNlZjg5MDA2MmVkYTUy
ODk5ZTRkMzNkZDEwOTFhMmQzMmY0ZDA4Yy4uODBkMWUwMjAxNDYxNTE1YWU5MDUwZmViYzRjZGRi
YjY3ODk4YWQxMSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGlj
c0NvbnRleHQuaAorKysgYi9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4
dC5oCkBAIC0xMjIsMTYgKzEyMiwxNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgY29uc3Qg
aW50IGNNaXNzcGVsbGluZ0xpbmVQYXR0ZXJuR2FwV2lkdGggPSAxOwogCiAgICAgY2xhc3MgQWZm
aW5lVHJhbnNmb3JtOworICAgIGNsYXNzIENhbnZhc0ZyYW1lYnVmZmVyOwogICAgIGNsYXNzIEZv
bnQ7CiAgICAgY2xhc3MgR2VuZXJhdG9yOwogICAgIGNsYXNzIEdyYWRpZW50OwotICAgIGNsYXNz
IEdyYXBoaWNzQ29udGV4dDNEOwogICAgIGNsYXNzIEdyYXBoaWNzQ29udGV4dFBsYXRmb3JtUHJp
dmF0ZTsKICAgICBjbGFzcyBHcmFwaGljc0NvbnRleHRQcml2YXRlOwogICAgIGNsYXNzIEltYWdl
QnVmZmVyOwogICAgIGNsYXNzIEtVUkw7CiAgICAgY2xhc3MgUGF0aDsKICAgICBjbGFzcyBQYXR0
ZXJuOworICAgIGNsYXNzIFNoYXJlZENvbnRleHQzRDsKICAgICBjbGFzcyBUZXh0UnVuOwogCiAg
ICAgLy8gVGhlc2UgYml0cyBjYW4gYmUgT1JlZCB0b2dldGhlciBmb3IgYSB0b3RhbCBvZiA4IHBv
c3NpYmxlIHRleHQgZHJhd2luZyBtb2Rlcy4KQEAgLTQxMiw4ICs0MTMsMTIgQEAgbmFtZXNwYWNl
IFdlYkNvcmUgewogICAgICAgICBwYXR0ZXJuIGdldEhhaWt1U3Ryb2tlU3R5bGUoKTsKICNlbmRp
ZgogCi0gICAgICAgIHZvaWQgc2V0R3JhcGhpY3NDb250ZXh0M0QoR3JhcGhpY3NDb250ZXh0M0Qq
LCBjb25zdCBJbnRTaXplJik7CisjaWYgUExBVEZPUk0oU0tJQSkKKyAgICAgICAgdm9pZCBzZXRT
aGFyZWRDb250ZXh0M0QoU2hhcmVkQ29udGV4dDNEKiwgQ2FudmFzRnJhbWVidWZmZXIqLCBjb25z
dCBJbnRTaXplJik7CiAgICAgICAgIHZvaWQgc3luY1NvZnR3YXJlQ2FudmFzKCk7CisgICAgICAg
IHVuc2lnbmVkIHRleHR1cmVJZEZvckNvbXBvc2l0b3IoKSBjb25zdDsKKyAgICAgICAgdW5zaWdu
ZWQgdGV4dHVyZUlkRm9yQ2FudmFzKCkgY29uc3Q7CisjZW5kaWYKIAogICAgIHByaXZhdGU6CiAg
ICAgICAgIHZvaWQgc2F2ZVBsYXRmb3JtU3RhdGUoKTsKZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0M0QuaCBiL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvR3JhcGhpY3NDb250ZXh0M0QuaAppbmRleCBiNTgzODEzODg2Njk4ZWNiNTYwNTUzMWJl
N2Y1NmIwYTM5ZDY1MDY5Li4wMDllZmU1ZDRiYWVjYmE2NDFjNDk2YWJlMTAwYzcwMzE4ZDU4ZjIw
IDEwMDY0NAotLS0gYS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dDNE
LmgKKysrIGIvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQzRC5oCkBA
IC03NTMsNiArNzUzLDEwIEBAIHB1YmxpYzoKIAogICAgIGJvb2wgc3VwcG9ydHNCR1JBKCk7CiAK
KyAgICB1bnNpZ25lZCBjcmVhdGVDb21wb3NpdG9yVGV4dHVyZSh1bnNpZ25lZCB3aWR0aCwgdW5z
aWduZWQgaGVpZ2h0KTsKKyAgICB2b2lkIGRlbGV0ZUNvbXBvc2l0b3JUZXh0dXJlKHVuc2lnbmVk
IGNvbXBvc2l0b3JUZXh0dXJlKTsKKyAgICB2b2lkIGNvcHlUZXh0dXJlVG9Db21wb3NpdG9yKHVu
c2lnbmVkIHNvdXJjZVRleHR1cmUsIHVuc2lnbmVkIGNvbXBvc2l0b3JUZXh0dXJlKTsKKwogICBw
cml2YXRlOgogICAgIEdyYXBoaWNzQ29udGV4dDNEKEF0dHJpYnV0ZXMgYXR0cnMsIEhvc3RXaW5k
b3cqIGhvc3RXaW5kb3cpOwogCmRpZmYgLS1naXQgYS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L0dyYXBoaWNzTGF5ZXIuaCBiL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NMYXll
ci5oCmluZGV4IDBmNzRjZDVjYjMzODVlZTdiYjVhNjg4MDJiN2FmYzI5Nzg3ZmY4MGYuLjU1NGEx
YjBlMzRlNGYzODYyYzhiYjk0MmYzZWM0YjBjZmEyYzhjODkgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NMYXllci5oCisrKyBiL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvR3JhcGhpY3NMYXllci5oCkBAIC04MSw2ICs4MSw3IEBAIHR5cGVkZWYgdW5zaWdu
ZWQgTGF5ZXJUcmVlQXNUZXh0QmVoYXZpb3I7CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAorY2xh
c3MgQ2FudmFzRnJhbWVidWZmZXI7CiBjbGFzcyBGbG9hdFBvaW50M0Q7CiBjbGFzcyBHcmFwaGlj
c0NvbnRleHQ7CiBjbGFzcyBJbWFnZTsKQEAgLTI5OCw3ICsyOTksOCBAQCBwdWJsaWM6CiAgICAg
dmlydHVhbCB2b2lkIHNldENvbnRlbnRzVG9JbWFnZShJbWFnZSopIHsgfQogICAgIHZpcnR1YWwg
dm9pZCBzZXRDb250ZW50c1RvTWVkaWEoUGxhdGZvcm1MYXllciopIHsgfSAvLyB2aWRlbyBvciBw
bHVnLWluCiAgICAgdmlydHVhbCB2b2lkIHNldENvbnRlbnRzQmFja2dyb3VuZENvbG9yKGNvbnN0
IENvbG9yJikgeyB9Ci0gICAgdmlydHVhbCB2b2lkIHNldENvbnRlbnRzVG9DYW52YXMoUGxhdGZv
cm1MYXllciopIHsgfQorICAgIHZpcnR1YWwgdm9pZCBzZXRDb250ZW50c1RvV2ViR0woUGxhdGZv
cm1MYXllciopIHsgfQorICAgIHZpcnR1YWwgdm9pZCBzZXRDb250ZW50c1RvQ2FudmFzMkQoQ2Fu
dmFzRnJhbWVidWZmZXIqKSB7IH0KICAgICB2aXJ0dWFsIGJvb2wgaGFzQ29udGVudHNMYXllcigp
IGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CiAKICAgICAvLyBDYWxsYmFjayBmcm9tIHRoZSB1bmRl
cmx5aW5nIGdyYXBoaWNzIHN5c3RlbSB0byBkcmF3IGxheWVyIGNvbnRlbnRzLgpkaWZmIC0tZ2l0
IGEvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9DYW52YXMyRExheWVyQ2hyb21p
dW0uY3BwIGIvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9DYW52YXMyRExheWVy
Q2hyb21pdW0uY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmQ5MGI2ZjhiMTNmOTNlZWI0ZTAzZmNmYzU0NWRkOTYx
YTY5ZTFhNGEKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2No
cm9taXVtL0NhbnZhczJETGF5ZXJDaHJvbWl1bS5jcHAKQEAgLTAsMCArMSw4NyBAQAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAxMCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorICogbWV0OgorICoKKyAqICAgICAqIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisgKiBpbiB0aGUgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiBkaXN0
cmlidXRpb24uCisgKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0
aGUgbmFtZXMgb2YgaXRzCisgKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBv
ciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0
IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisg
KiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorICogT1dORVIgT1Ig
Q09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhF
T1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRl
ICJjb25maWcuaCIKKworI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKKworI2luY2x1
ZGUgIkNhbnZhczJETGF5ZXJDaHJvbWl1bS5oIgorCisjaW5jbHVkZSAiQ2FudmFzRnJhbWVidWZm
ZXIuaCIKKyNpbmNsdWRlICJQbGF0Zm9ybUNvbnRleHRTa2lhLmgiCisKKyNpbmNsdWRlIDxHTEVT
Mi9nbDIuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitQYXNzUmVmUHRyPENhbnZhczJETGF5
ZXJDaHJvbWl1bT4gQ2FudmFzMkRMYXllckNocm9taXVtOjpjcmVhdGUoQ2FudmFzRnJhbWVidWZm
ZXIqIGZyYW1lYnVmZmVyLCBHcmFwaGljc0xheWVyQ2hyb21pdW0qIG93bmVyKQoreworICAgIHJl
dHVybiBhZG9wdFJlZihuZXcgQ2FudmFzMkRMYXllckNocm9taXVtKGZyYW1lYnVmZmVyLCBvd25l
cikpOworfQorCitDYW52YXMyRExheWVyQ2hyb21pdW06OkNhbnZhczJETGF5ZXJDaHJvbWl1bShD
YW52YXNGcmFtZWJ1ZmZlciogZnJhbWVidWZmZXIsIEdyYXBoaWNzTGF5ZXJDaHJvbWl1bSogb3du
ZXIpCisgICAgOiBDYW52YXNMYXllckNocm9taXVtKG93bmVyKQorICAgICwgbV9mcmFtZWJ1ZmZl
cihmcmFtZWJ1ZmZlcikKKyAgICAsIG1fdGV4dHVyZUNoYW5nZWQodHJ1ZSkKK3sKK30KKwordm9p
ZCBDYW52YXMyRExheWVyQ2hyb21pdW06OnVwZGF0ZUNvbnRlbnRzKCkKK3sKKyAgICB1bnNpZ25l
ZCB0ZXh0dXJlSWQgPSBtX2ZyYW1lYnVmZmVyLT50ZXh0dXJlSWRGb3JDb21wb3NpdG9yKCk7Cisg
ICAgaWYgKG1fdGV4dHVyZUNoYW5nZWQpIHsKKyAgICAgICAgZ2xCaW5kVGV4dHVyZShHTF9URVhU
VVJFXzJELCB0ZXh0dXJlSWQpOworICAgICAgICAvLyBTZXQgdGhlIG1pbi1tYWcgZmlsdGVycyB0
byBsaW5lYXIgYW5kIHdyYXAgbW9kZXMgdG8gR0xfQ0xBTVBfVE9fRURHRQorICAgICAgICAvLyB0
byBnZXQgYXJvdW5kIE5QT1QgdGV4dHVyZSBsaW1pdGF0aW9ucyBvZiBHTEVTLgorICAgICAgICBn
bFRleFBhcmFtZXRlcmYoR0xfVEVYVFVSRV8yRCwgR0xfVEVYVFVSRV9NSU5fRklMVEVSLCBHTF9M
SU5FQVIpOworICAgICAgICBnbFRleFBhcmFtZXRlcmYoR0xfVEVYVFVSRV8yRCwgR0xfVEVYVFVS
RV9NQUdfRklMVEVSLCBHTF9MSU5FQVIpOworICAgICAgICBnbFRleFBhcmFtZXRlcmYoR0xfVEVY
VFVSRV8yRCwgR0xfVEVYVFVSRV9XUkFQX1MsIEdMX0NMQU1QX1RPX0VER0UpOworICAgICAgICBn
bFRleFBhcmFtZXRlcmYoR0xfVEVYVFVSRV8yRCwgR0xfVEVYVFVSRV9XUkFQX1QsIEdMX0NMQU1Q
X1RPX0VER0UpOworICAgICAgICBtX3RleHR1cmVDaGFuZ2VkID0gZmFsc2U7CisgICAgfQorICAg
IC8vIFVwZGF0ZSB0aGUgY29udGVudHMgb2YgdGhlIHRleHR1cmUgdXNlZCBieSB0aGUgY29tcG9z
aXRvci4KKyAgICBpZiAobV9jb250ZW50c0RpcnR5KSB7CisgICAgICAgIG1fZnJhbWVidWZmZXIt
PnN3YXBCdWZmZXJzKCk7CisgICAgICAgIG1fY29udGVudHNEaXJ0eSA9IGZhbHNlOworICAgIH0K
K30KKwordm9pZCBDYW52YXMyRExheWVyQ2hyb21pdW06OnNldENhbnZhc0ZyYW1lYnVmZmVyKENh
bnZhc0ZyYW1lYnVmZmVyKiBmcmFtZWJ1ZmZlcikKK3sKKyAgICBtX2ZyYW1lYnVmZmVyID0gZnJh
bWVidWZmZXI7Cit9CisKK3Vuc2lnbmVkIENhbnZhczJETGF5ZXJDaHJvbWl1bTo6dGV4dHVyZUlk
KCkKK3sKKyAgICByZXR1cm4gbV9mcmFtZWJ1ZmZlci0+dGV4dHVyZUlkRm9yQ29tcG9zaXRvcigp
OworfQorCit9CisjZW5kaWYgLy8gVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQpkaWZmIC0t
Z2l0IGEvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9DYW52YXMyRExheWVyQ2hy
b21pdW0uaCBiL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vQ2FudmFzMkRMYXll
ckNocm9taXVtLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uOGZhYTVjYWViNzEyZWUxODJmMDRjNWVlMTAzMzhlZmUw
MzYwNGVlZQotLS0gL2Rldi9udWxsCisrKyBiL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hy
b21pdW0vQ2FudmFzMkRMYXllckNocm9taXVtLmgKQEAgLTAsMCArMSw2NiBAQAorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAxMCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorICogbWV0OgorICoKKyAqICAgICAqIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlCisgKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisgKiBpbiB0aGUgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiBkaXN0cmli
dXRpb24uCisgKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUg
bmFtZXMgb2YgaXRzCisgKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBw
cm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNw
ZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAi
QVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorICogT1dORVIgT1IgQ09O
VFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
CisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJV
U0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZ
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKworI2lmbmRlZiBD
YW52YXMyRExheWVyQ2hyb21pdW1faAorI2RlZmluZSBDYW52YXMyRExheWVyQ2hyb21pdW1faAor
CisjaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQorCisjaW5jbHVkZSAiQ2FudmFzTGF5
ZXJDaHJvbWl1bS5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIENhbnZhc0ZyYW1l
YnVmZmVyOworCisvLyBBIGxheWVyIGNvbnRhaW5pbmcgYW4gYWNjZWxlcmF0ZWQgMmQgY2FudmFz
CitjbGFzcyBDYW52YXMyRExheWVyQ2hyb21pdW0gOiBwdWJsaWMgQ2FudmFzTGF5ZXJDaHJvbWl1
bSB7CitwdWJsaWM6CisgICAgc3RhdGljIFBhc3NSZWZQdHI8Q2FudmFzMkRMYXllckNocm9taXVt
PiBjcmVhdGUoQ2FudmFzRnJhbWVidWZmZXIqLCBHcmFwaGljc0xheWVyQ2hyb21pdW0qIG93bmVy
KTsKKyAgICB2aXJ0dWFsIGJvb2wgZHJhd3NDb250ZW50KCkgeyByZXR1cm4gdHJ1ZTsgfQorICAg
IHZpcnR1YWwgdm9pZCB1cGRhdGVDb250ZW50cygpOworCisgICAgdm9pZCBzZXRDYW52YXNGcmFt
ZWJ1ZmZlcihDYW52YXNGcmFtZWJ1ZmZlciopOworCitwcm90ZWN0ZWQ6CisgICAgdmlydHVhbCB1
bnNpZ25lZCB0ZXh0dXJlSWQoKTsKKworcHJpdmF0ZToKKyAgICBleHBsaWNpdCBDYW52YXMyRExh
eWVyQ2hyb21pdW0oQ2FudmFzRnJhbWVidWZmZXIqLCBHcmFwaGljc0xheWVyQ2hyb21pdW0qIG93
bmVyKTsKKyAgICBDYW52YXNGcmFtZWJ1ZmZlciogbV9mcmFtZWJ1ZmZlcjsKKyAgICBib29sIG1f
dGV4dHVyZUNoYW5nZWQ7CisKKyAgICBzdGF0aWMgdW5zaWduZWQgbV9zaGFkZXJQcm9ncmFtSWQ7
Cit9OworCit9CisjZW5kaWYgLy8gVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQorCisjZW5k
aWYKZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vQ2FudmFz
TGF5ZXJDaHJvbWl1bS5jcHAgYi9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0Nh
bnZhc0xheWVyQ2hyb21pdW0uY3BwCmluZGV4IGJiZjA5MWMyYTY3MGQ3YzM2ZTkyMzhlMWI4Y2Mz
NTBiYTM4M2U4MTAuLjIyODY5ZDcwNmFlNDQwN2M1ZWNkODkyYWQxNWMwY2ZjZTEyYzBhMDEgMTAw
NjQ0Ci0tLSBhL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vQ2FudmFzTGF5ZXJD
aHJvbWl1bS5jcHAKKysrIGIvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9DYW52
YXNMYXllckNocm9taXVtLmNwcApAQCAtMzQsMTIgKzM0LDE0IEBACiAKICNpbmNsdWRlICJDYW52
YXNMYXllckNocm9taXVtLmgiCiAKLSNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQzRC5oIgogI2lu
Y2x1ZGUgIkxheWVyUmVuZGVyZXJDaHJvbWl1bS5oIgorCiAjaW5jbHVkZSA8R0xFUzIvZ2wyLmg+
CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAordW5zaWduZWQgQ2FudmFzTGF5ZXJDaHJvbWl1bTo6
bV9zaGFkZXJQcm9ncmFtSWQgPSAwOworCiBDYW52YXNMYXllckNocm9taXVtOjpTaGFyZWRWYWx1
ZXM6OlNoYXJlZFZhbHVlcygpCiAgICAgOiBtX2NhbnZhc1NoYWRlclByb2dyYW0oMCkKICAgICAs
IG1fc2hhZGVyU2FtcGxlckxvY2F0aW9uKC0xKQpAQCAtOTMsNDkgKzk1LDEzIEBAIENhbnZhc0xh
eWVyQ2hyb21pdW06OlNoYXJlZFZhbHVlczo6flNoYXJlZFZhbHVlcygpCiAgICAgICAgIEdMQyhn
bERlbGV0ZVByb2dyYW0obV9jYW52YXNTaGFkZXJQcm9ncmFtKSk7CiB9CiAKLVBhc3NSZWZQdHI8
Q2FudmFzTGF5ZXJDaHJvbWl1bT4gQ2FudmFzTGF5ZXJDaHJvbWl1bTo6Y3JlYXRlKEdyYXBoaWNz
TGF5ZXJDaHJvbWl1bSogb3duZXIpCi17Ci0gICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBDYW52YXNM
YXllckNocm9taXVtKG93bmVyKSk7Ci19Ci0KIENhbnZhc0xheWVyQ2hyb21pdW06OkNhbnZhc0xh
eWVyQ2hyb21pdW0oR3JhcGhpY3NMYXllckNocm9taXVtKiBvd25lcikKICAgICA6IExheWVyQ2hy
b21pdW0ob3duZXIpCi0gICAgLCBtX2NvbnRleHQoMCkKLSAgICAsIG1fdGV4dHVyZUlkKDApCi0g
ICAgLCBtX3RleHR1cmVDaGFuZ2VkKGZhbHNlKQotewotfQotCi12b2lkIENhbnZhc0xheWVyQ2hy
b21pdW06OnVwZGF0ZUNvbnRlbnRzKCkKIHsKLSAgICBBU1NFUlQobV9jb250ZXh0KTsKLSAgICBp
ZiAobV90ZXh0dXJlQ2hhbmdlZCkgewotICAgICAgICBnbEJpbmRUZXh0dXJlKEdMX1RFWFRVUkVf
MkQsIG1fdGV4dHVyZUlkKTsKLSAgICAgICAgLy8gU2V0IHRoZSBtaW4tbWFnIGZpbHRlcnMgdG8g
bGluZWFyIGFuZCB3cmFwIG1vZGVzIHRvIEdMX0NMQU1QX1RPX0VER0UKLSAgICAgICAgLy8gdG8g
Z2V0IGFyb3VuZCBOUE9UIHRleHR1cmUgbGltaXRhdGlvbnMgb2YgR0xFUy4KLSAgICAgICAgZ2xU
ZXhQYXJhbWV0ZXJmKEdMX1RFWFRVUkVfMkQsIEdMX1RFWFRVUkVfTUlOX0ZJTFRFUiwgR0xfTElO
RUFSKTsKLSAgICAgICAgZ2xUZXhQYXJhbWV0ZXJmKEdMX1RFWFRVUkVfMkQsIEdMX1RFWFRVUkVf
TUFHX0ZJTFRFUiwgR0xfTElORUFSKTsKLSAgICAgICAgZ2xUZXhQYXJhbWV0ZXJmKEdMX1RFWFRV
UkVfMkQsIEdMX1RFWFRVUkVfV1JBUF9TLCBHTF9DTEFNUF9UT19FREdFKTsKLSAgICAgICAgZ2xU
ZXhQYXJhbWV0ZXJmKEdMX1RFWFRVUkVfMkQsIEdMX1RFWFRVUkVfV1JBUF9ULCBHTF9DTEFNUF9U
T19FREdFKTsKLSAgICAgICAgbV90ZXh0dXJlQ2hhbmdlZCA9IGZhbHNlOwotICAgIH0KLSAgICAv
LyBVcGRhdGUgdGhlIGNvbnRlbnRzIG9mIHRoZSB0ZXh0dXJlIHVzZWQgYnkgdGhlIGNvbXBvc2l0
b3IuCi0gICAgaWYgKG1fY29udGVudHNEaXJ0eSkgewotICAgICAgICBpZiAobV9wcmVwYXJlVGV4
dHVyZUNhbGxiYWNrKQotICAgICAgICAgICAgbV9wcmVwYXJlVGV4dHVyZUNhbGxiYWNrLT53aWxs
UHJlcGFyZVRleHR1cmUoKTsKLSAgICAgICAgbV9jb250ZXh0LT5wcmVwYXJlVGV4dHVyZSgpOwot
ICAgICAgICBtX2NvbnRlbnRzRGlydHkgPSBmYWxzZTsKLSAgICB9CiB9CiAKLXZvaWQgQ2FudmFz
TGF5ZXJDaHJvbWl1bTo6c2V0Q29udGV4dChjb25zdCBHcmFwaGljc0NvbnRleHQzRCogY29udGV4
dCkKK0NhbnZhc0xheWVyQ2hyb21pdW06On5DYW52YXNMYXllckNocm9taXVtKCkKIHsKLSAgICBt
X2NvbnRleHQgPSBjb25zdF9jYXN0PEdyYXBoaWNzQ29udGV4dDNEKj4oY29udGV4dCk7Ci0KLSAg
ICB1bnNpZ25lZCBpbnQgdGV4dHVyZUlkID0gbV9jb250ZXh0LT5wbGF0Zm9ybVRleHR1cmUoKTsK
LSAgICBpZiAodGV4dHVyZUlkICE9IG1fdGV4dHVyZUlkKQotICAgICAgICBtX3RleHR1cmVDaGFu
Z2VkID0gdHJ1ZTsKLSAgICBtX3RleHR1cmVJZCA9IHRleHR1cmVJZDsKIH0KIAogdm9pZCBDYW52
YXNMYXllckNocm9taXVtOjpkcmF3KCkKQEAgLTE0NCwxMiArMTEwLDEzIEBAIHZvaWQgQ2FudmFz
TGF5ZXJDaHJvbWl1bTo6ZHJhdygpCiAgICAgY29uc3QgQ2FudmFzTGF5ZXJDaHJvbWl1bTo6U2hh
cmVkVmFsdWVzKiBzdiA9IGxheWVyUmVuZGVyZXIoKS0+Y2FudmFzTGF5ZXJTaGFyZWRWYWx1ZXMo
KTsKICAgICBBU1NFUlQoc3YgJiYgc3YtPmluaXRpYWxpemVkKCkpOwogICAgIEdMQyhnbEFjdGl2
ZVRleHR1cmUoR0xfVEVYVFVSRTApKTsKLSAgICBHTEMoZ2xCaW5kVGV4dHVyZShHTF9URVhUVVJF
XzJELCBtX3RleHR1cmVJZCkpOworICAgIEdMQyhnbEJpbmRUZXh0dXJlKEdMX1RFWFRVUkVfMkQs
IHRleHR1cmVJZCgpKSk7CiAgICAgbGF5ZXJSZW5kZXJlcigpLT51c2VTaGFkZXIoc3YtPmNhbnZh
c1NoYWRlclByb2dyYW0oKSk7CiAgICAgR0xDKGdsVW5pZm9ybTFpKHN2LT5zaGFkZXJTYW1wbGVy
TG9jYXRpb24oKSwgMCkpOwogICAgIGRyYXdUZXh0dXJlZFF1YWQobGF5ZXJSZW5kZXJlcigpLT5w
cm9qZWN0aW9uTWF0cml4KCksIGRyYXdUcmFuc2Zvcm0oKSwKICAgICAgICAgICAgICAgICAgICAg
IGJvdW5kcygpLndpZHRoKCksIGJvdW5kcygpLmhlaWdodCgpLCBkcmF3T3BhY2l0eSgpLAogICAg
ICAgICAgICAgICAgICAgICAgc3YtPnNoYWRlck1hdHJpeExvY2F0aW9uKCksIHN2LT5zaGFkZXJB
bHBoYUxvY2F0aW9uKCkpOworCiB9CiAKIH0KZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2hyb21pdW0vQ2FudmFzTGF5ZXJDaHJvbWl1bS5oIGIvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jaHJvbWl1bS9DYW52YXNMYXllckNocm9taXVtLmgKaW5kZXggMDUzZWZmZmEw
MWUxNDI4MzgxMjE0NTNjMWE0YjhhMTk0YjZmYTRjMS4uZDZkYTZhYzQ0ZTkxMDdhZjEwMGU1NGQz
ZWNhZTM2NTU2MmRlMGQyZiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
aHJvbWl1bS9DYW52YXNMYXllckNocm9taXVtLmgKKysrIGIvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jaHJvbWl1bS9DYW52YXNMYXllckNocm9taXVtLmgKQEAgLTM4LDE3ICszOCwxMyBAQAog
CiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLWNsYXNzIEdyYXBoaWNzQ29udGV4dDNEOwotCi0vLyBB
IExheWVyIGNvbnRhaW5pbmcgYSBXZWJHTCBvciBhY2NlbGVyYXRlZCAyZCBjYW52YXMKKy8vIEJh
c2UgY2xhc3MgZm9yIFdlYkdMIGFuZCBhY2NlbGVyYXRlZCAyZCBjYW52YXNlcy4KIGNsYXNzIENh
bnZhc0xheWVyQ2hyb21pdW0gOiBwdWJsaWMgTGF5ZXJDaHJvbWl1bSB7CiBwdWJsaWM6Ci0gICAg
c3RhdGljIFBhc3NSZWZQdHI8Q2FudmFzTGF5ZXJDaHJvbWl1bT4gY3JlYXRlKEdyYXBoaWNzTGF5
ZXJDaHJvbWl1bSogb3duZXIgPSAwKTsKLSAgICB2aXJ0dWFsIGJvb2wgZHJhd3NDb250ZW50KCkg
eyByZXR1cm4gbV9jb250ZXh0OyB9Ci0gICAgdmlydHVhbCB2b2lkIHVwZGF0ZUNvbnRlbnRzKCk7
Ci0gICAgdmlydHVhbCB2b2lkIGRyYXcoKTsKKyAgICBleHBsaWNpdCBDYW52YXNMYXllckNocm9t
aXVtKEdyYXBoaWNzTGF5ZXJDaHJvbWl1bSogb3duZXIpOworICAgIHZpcnR1YWwgfkNhbnZhc0xh
eWVyQ2hyb21pdW0oKTsKIAotICAgIHZvaWQgc2V0Q29udGV4dChjb25zdCBHcmFwaGljc0NvbnRl
eHQzRCogY29udGV4dCk7CisgICAgdmlydHVhbCB2b2lkIGRyYXcoKTsKIAogICAgIGNsYXNzIFNo
YXJlZFZhbHVlcyB7CiAgICAgcHVibGljOgpAQCAtNjksMjEgKzY1LDE2IEBAIHB1YmxpYzoKICAg
ICAgICAgYm9vbCBtX2luaXRpYWxpemVkOwogICAgIH07CiAKLSAgICBjbGFzcyBQcmVwYXJlVGV4
dHVyZUNhbGxiYWNrIDogcHVibGljIE5vbmNvcHlhYmxlIHsKLSAgICBwdWJsaWM6Ci0gICAgICAg
IHZpcnR1YWwgdm9pZCB3aWxsUHJlcGFyZVRleHR1cmUoKSA9IDA7Ci0gICAgfTsKLSAgICB2b2lk
IHNldFByZXBhcmVUZXh0dXJlQ2FsbGJhY2soUGFzc093blB0cjxQcmVwYXJlVGV4dHVyZUNhbGxi
YWNrPiBjYWxsYmFjaykgeyBtX3ByZXBhcmVUZXh0dXJlQ2FsbGJhY2sgPSBjYWxsYmFjazsgfQor
cHJvdGVjdGVkOgorICAgIHZpcnR1YWwgdW5zaWduZWQgdGV4dHVyZUlkKCkgPSAwOwogCiBwcml2
YXRlOgotICAgIGV4cGxpY2l0IENhbnZhc0xheWVyQ2hyb21pdW0oR3JhcGhpY3NMYXllckNocm9t
aXVtKiBvd25lcik7Ci0gICAgR3JhcGhpY3NDb250ZXh0M0QqIG1fY29udGV4dDsKLSAgICB1bnNp
Z25lZCBtX3RleHR1cmVJZDsKICAgICBib29sIG1fdGV4dHVyZUNoYW5nZWQ7Ci0gICAgT3duUHRy
PFByZXBhcmVUZXh0dXJlQ2FsbGJhY2s+IG1fcHJlcGFyZVRleHR1cmVDYWxsYmFjazsKKworICAg
IHN0YXRpYyB1bnNpZ25lZCBtX3NoYWRlclByb2dyYW1JZDsKIH07CiAKIH0KICNlbmRpZiAvLyBV
U0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCiAKLSNlbmRpZgorI2VuZGlmIC8vIENhbnZhc0xh
eWVyQ2hyb21pdW1faApkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJv
bWl1bS9HTEVTMkNhbnZhcy5jcHAgYi9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVt
L0dMRVMyQ2FudmFzLmNwcAppbmRleCA4MmQ0YzBiMDMzYTE0ZjkxZTU2NmY3YjRlZWEwOGIwNjY5
MmViYmQzLi5lMWQxOTY3YmY0YzAyODcxYzRmOGU3MWNhYTJhNDBkZTU0NjhmNjUzIDEwMDY0NAot
LS0gYS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0dMRVMyQ2FudmFzLmNwcAor
KysgYi9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0dMRVMyQ2FudmFzLmNwcApA
QCAtMzIsMTAgKzMyLDEyIEBACiAKICNpbmNsdWRlICJHTEVTMkNhbnZhcy5oIgogCisjaW5jbHVk
ZSAiQ2FudmFzRnJhbWVidWZmZXIuaCIKICNpbmNsdWRlICJGbG9hdFJlY3QuaCIKICNpbmNsdWRl
ICJHcmFwaGljc0NvbnRleHQzRC5oIgogI2luY2x1ZGUgIkludFJlY3QuaCIKICNpbmNsdWRlICJQ
bGF0Zm9ybVN0cmluZy5oIgorI2luY2x1ZGUgIlNoYXJlZENvbnRleHQzRC5oIgogI2luY2x1ZGUg
IlNvbGlkRmlsbFNoYWRlci5oIgogI2luY2x1ZGUgIlRleFNoYWRlci5oIgogI2luY2x1ZGUgIlRl
eHR1cmUuaCIKQEAgLTYxLDM3ICs2Myw1MCBAQCBzdHJ1Y3QgR0xFUzJDYW52YXM6OlN0YXRlIHsK
ICAgICBBZmZpbmVUcmFuc2Zvcm0gbV9jdG07CiB9OwogCi1HTEVTMkNhbnZhczo6R0xFUzJDYW52
YXMoR3JhcGhpY3NDb250ZXh0M0QqIGNvbnRleHQsIGNvbnN0IEludFNpemUmIHNpemUpCi0gICAg
OiBtX2NvbnRleHQoY29udGV4dCkKK0dMRVMyQ2FudmFzOjpHTEVTMkNhbnZhcyhTaGFyZWRDb250
ZXh0M0QqIGNvbnRleHQsIENhbnZhc0ZyYW1lYnVmZmVyKiBmcmFtZWJ1ZmZlciwgY29uc3QgSW50
U2l6ZSYgc2l6ZSkKKyAgICA6IG1fc2l6ZShzaXplKQorICAgICwgbV9jb250ZXh0KGNvbnRleHQp
CisgICAgLCBtX2ZyYW1lYnVmZmVyKGZyYW1lYnVmZmVyKQogICAgICwgbV9zdGF0ZSgwKQotICAg
ICwgbV9xdWFkVmVydGljZXMoMCkKLSAgICAsIG1fc29saWRGaWxsU2hhZGVyKFNvbGlkRmlsbFNo
YWRlcjo6Y3JlYXRlKGNvbnRleHQpKQotICAgICwgbV90ZXhTaGFkZXIoVGV4U2hhZGVyOjpjcmVh
dGUoY29udGV4dCkpCiB7CiAgICAgbV9mbGlwTWF0cml4LnRyYW5zbGF0ZSgtMS4wZiwgMS4wZik7
CiAgICAgbV9mbGlwTWF0cml4LnNjYWxlKDIuMGYgLyBzaXplLndpZHRoKCksIC0yLjBmIC8gc2l6
ZS5oZWlnaHQoKSk7CiAKLSAgICBtX2NvbnRleHQtPnJlc2hhcGUoc2l6ZS53aWR0aCgpLCBzaXpl
LmhlaWdodCgpKTsKLSAgICBtX2NvbnRleHQtPnZpZXdwb3J0KDAsIDAsIHNpemUud2lkdGgoKSwg
c2l6ZS5oZWlnaHQoKSk7Ci0KICAgICBtX3N0YXRlU3RhY2suYXBwZW5kKFN0YXRlKCkpOwogICAg
IG1fc3RhdGUgPSAmbV9zdGF0ZVN0YWNrLmxhc3QoKTsKLQotICAgIC8vIEZvcmNlIHRoZSBzb3Vy
Y2Ugb3ZlciBjb21wb3NpdGUgbW9kZSB0byBiZSBhcHBsaWVkLgotICAgIG1fbGFzdENvbXBvc2l0
ZU9wID0gQ29tcG9zaXRlQ2xlYXI7Ci0gICAgYXBwbHlDb21wb3NpdGVPcGVyYXRvcihDb21wb3Np
dGVTb3VyY2VPdmVyKTsKIH0KIAogR0xFUzJDYW52YXM6On5HTEVTMkNhbnZhcygpCiB7Ci0gICAg
bV9jb250ZXh0LT5kZWxldGVCdWZmZXIobV9xdWFkVmVydGljZXMpOworfQorCit2b2lkIEdMRVMy
Q2FudmFzOjpzd2FwQnVmZmVycygpCit7CisgICAgbV9mcmFtZWJ1ZmZlci0+c3dhcEJ1ZmZlcnMo
KTsKK30KKwordm9pZCBHTEVTMkNhbnZhczo6YmluZEZyYW1lYnVmZmVyKCkKK3sKKyAgICBtX2Zy
YW1lYnVmZmVyLT5iaW5kKCk7Cit9CisKK3Vuc2lnbmVkIEdMRVMyQ2FudmFzOjp0ZXh0dXJlSWRG
b3JDb21wb3NpdG9yKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9mcmFtZWJ1ZmZlci0+dGV4dHVy
ZUlkRm9yQ29tcG9zaXRvcigpOworfQorCit1bnNpZ25lZCBHTEVTMkNhbnZhczo6dGV4dHVyZUlk
Rm9yQ2FudmFzKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9mcmFtZWJ1ZmZlci0+dGV4dHVyZUlk
Rm9yQ2FudmFzKCk7CiB9CiAKIHZvaWQgR0xFUzJDYW52YXM6OmNsZWFyUmVjdChjb25zdCBGbG9h
dFJlY3QmIHJlY3QpCiB7CisgICAgYmluZEZyYW1lYnVmZmVyKCk7CiAgICAgaWYgKG1fc3RhdGUt
Pm1fY3RtLmlzSWRlbnRpdHkoKSkgewotICAgICAgICBtX2NvbnRleHQtPnNjaXNzb3IocmVjdC54
KCksIHJlY3QueSgpLCByZWN0LndpZHRoKCksIHJlY3QuaGVpZ2h0KCkpOworICAgICAgICBtX2Nv
bnRleHQtPnNjaXNzb3IocmVjdCk7CiAgICAgICAgIG1fY29udGV4dC0+ZW5hYmxlKEdyYXBoaWNz
Q29udGV4dDNEOjpTQ0lTU09SX1RFU1QpOworICAgICAgICBtX2NvbnRleHQtPmNsZWFyQ29sb3Io
Q29sb3IoUkdCQTMyKDApKSk7CiAgICAgICAgIG1fY29udGV4dC0+Y2xlYXIoR3JhcGhpY3NDb250
ZXh0M0Q6OkNPTE9SX0JVRkZFUl9CSVQpOwogICAgICAgICBtX2NvbnRleHQtPmRpc2FibGUoR3Jh
cGhpY3NDb250ZXh0M0Q6OlNDSVNTT1JfVEVTVCk7CiAgICAgfSBlbHNlIHsKQEAgLTEwNCwxNiAr
MTE5LDE3IEBAIHZvaWQgR0xFUzJDYW52YXM6OmNsZWFyUmVjdChjb25zdCBGbG9hdFJlY3QmIHJl
Y3QpCiAKIHZvaWQgR0xFUzJDYW52YXM6OmZpbGxSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwg
Y29uc3QgQ29sb3ImIGNvbG9yLCBDb2xvclNwYWNlIGNvbG9yU3BhY2UpCiB7Ci0gICAgYXBwbHlD
b21wb3NpdGVPcGVyYXRvcihtX3N0YXRlLT5tX2NvbXBvc2l0ZU9wKTsKLQotICAgIG1fY29udGV4
dC0+YmluZEJ1ZmZlcihHcmFwaGljc0NvbnRleHQzRDo6QVJSQVlfQlVGRkVSLCBnZXRRdWFkVmVy
dGljZXMoKSk7CisgICAgbV9jb250ZXh0LT5hcHBseUNvbXBvc2l0ZU9wZXJhdG9yKG1fc3RhdGUt
Pm1fY29tcG9zaXRlT3ApOworICAgIG1fY29udGV4dC0+dXNlUXVhZFZlcnRpY2VzKCk7CiAKICAg
ICBBZmZpbmVUcmFuc2Zvcm0gbWF0cml4KG1fZmxpcE1hdHJpeCk7CiAgICAgbWF0cml4Lm11bHRM
ZWZ0KG1fc3RhdGUtPm1fY3RtKTsKICAgICBtYXRyaXgudHJhbnNsYXRlKHJlY3QueCgpLCByZWN0
LnkoKSk7CiAgICAgbWF0cml4LnNjYWxlKHJlY3Qud2lkdGgoKSwgcmVjdC5oZWlnaHQoKSk7Ci0g
ICAgbV9zb2xpZEZpbGxTaGFkZXItPnVzZShtYXRyaXgsIGNvbG9yKTsKIAorICAgIG1fY29udGV4
dC0+dXNlRmlsbFNvbGlkUHJvZ3JhbShjb2xvciwgbWF0cml4KTsKKworICAgIGJpbmRGcmFtZWJ1
ZmZlcigpOwogICAgIG1fY29udGV4dC0+ZHJhd0FycmF5cyhHcmFwaGljc0NvbnRleHQzRDo6VFJJ
QU5HTEVfU1RSSVAsIDAsIDQpOwogfQogCkBAIC0xNjUsMjEgKzE4MSwzMyBAQCB2b2lkIEdMRVMy
Q2FudmFzOjpyZXN0b3JlKCkKICAgICBtX3N0YXRlID0gJm1fc3RhdGVTdGFjay5sYXN0KCk7CiB9
CiAKK3ZvaWQgR0xFUzJDYW52YXM6OmRyYXdUZXh0dXJlZFJlY3QodW5zaWduZWQgdGV4dHVyZSwg
Y29uc3QgSW50U2l6ZSYgdGV4dHVyZVNpemUsIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCwgY29u
c3QgRmxvYXRSZWN0JiBkc3RSZWN0LCBDb2xvclNwYWNlIGNvbG9yU3BhY2UsIENvbXBvc2l0ZU9w
ZXJhdG9yIGNvbXBvc2l0ZU9wKQoreworICAgIG1fY29udGV4dC0+YXBwbHlDb21wb3NpdGVPcGVy
YXRvcihjb21wb3NpdGVPcCk7CisKKyAgICBtX2NvbnRleHQtPnVzZVF1YWRWZXJ0aWNlcygpOwor
ICAgIG1fY29udGV4dC0+c2V0QWN0aXZlVGV4dHVyZShHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVS
RTApOworCisgICAgbV9jb250ZXh0LT5iaW5kVGV4dHVyZShHcmFwaGljc0NvbnRleHQzRDo6VEVY
VFVSRV8yRCwgdGV4dHVyZSk7CisKKyAgICBkcmF3UXVhZCh0ZXh0dXJlU2l6ZSwgc3JjUmVjdCwg
ZHN0UmVjdCwgbV9zdGF0ZS0+bV9jdG0sIG1fc3RhdGUtPm1fYWxwaGEpOworfQorCiB2b2lkIEdM
RVMyQ2FudmFzOjpkcmF3VGV4dHVyZWRSZWN0KFRleHR1cmUqIHRleHR1cmUsIGNvbnN0IEZsb2F0
UmVjdCYgc3JjUmVjdCwgY29uc3QgRmxvYXRSZWN0JiBkc3RSZWN0LCBDb2xvclNwYWNlIGNvbG9y
U3BhY2UsIENvbXBvc2l0ZU9wZXJhdG9yIGNvbXBvc2l0ZU9wKQogewogICAgIGRyYXdUZXh0dXJl
ZFJlY3QodGV4dHVyZSwgc3JjUmVjdCwgZHN0UmVjdCwgbV9zdGF0ZS0+bV9jdG0sIG1fc3RhdGUt
Pm1fYWxwaGEsIGNvbG9yU3BhY2UsIGNvbXBvc2l0ZU9wKTsKIH0KIAorCiB2b2lkIEdMRVMyQ2Fu
dmFzOjpkcmF3VGV4dHVyZWRSZWN0KFRleHR1cmUqIHRleHR1cmUsIGNvbnN0IEZsb2F0UmVjdCYg
c3JjUmVjdCwgY29uc3QgRmxvYXRSZWN0JiBkc3RSZWN0LCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0m
IHRyYW5zZm9ybSwgZmxvYXQgYWxwaGEsIENvbG9yU3BhY2UgY29sb3JTcGFjZSwgQ29tcG9zaXRl
T3BlcmF0b3IgY29tcG9zaXRlT3ApCiB7Ci0gICAgYXBwbHlDb21wb3NpdGVPcGVyYXRvcihjb21w
b3NpdGVPcCk7Ci0KLSAgICBtX2NvbnRleHQtPmJpbmRCdWZmZXIoR3JhcGhpY3NDb250ZXh0M0Q6
OkFSUkFZX0JVRkZFUiwgZ2V0UXVhZFZlcnRpY2VzKCkpOwotICAgIGNoZWNrR0xFcnJvcigiZ2xC
aW5kQnVmZmVyIik7Ci0KKyAgICBtX2NvbnRleHQtPmFwcGx5Q29tcG9zaXRlT3BlcmF0b3IoY29t
cG9zaXRlT3ApOwogICAgIGNvbnN0IFRpbGluZ0RhdGEmIHRpbGVzID0gdGV4dHVyZS0+dGlsZXMo
KTsKICAgICBJbnRSZWN0IHRpbGVJZHhSZWN0ID0gdGlsZXMub3ZlcmxhcHBlZFRpbGVJbmRpY2Vz
KHNyY1JlY3QpOwogCisgICAgbV9jb250ZXh0LT51c2VRdWFkVmVydGljZXMoKTsKKyAgICBtX2Nv
bnRleHQtPnNldEFjdGl2ZVRleHR1cmUoR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkUwKTsKKwog
ICAgIGZvciAoaW50IHkgPSB0aWxlSWR4UmVjdC55KCk7IHkgPD0gdGlsZUlkeFJlY3QuYm90dG9t
KCk7IHkrKykgewogICAgICAgICBmb3IgKGludCB4ID0gdGlsZUlkeFJlY3QueCgpOyB4IDw9IHRp
bGVJZHhSZWN0LnJpZ2h0KCk7IHgrKykKICAgICAgICAgICAgIGRyYXdUZXh0dXJlZFJlY3RUaWxl
KHRleHR1cmUsIHRpbGVzLnRpbGVJbmRleCh4LCB5KSwgc3JjUmVjdCwgZHN0UmVjdCwgdHJhbnNm
b3JtLCBhbHBoYSk7CkBAIC0xOTMsNyArMjIxLDYgQEAgdm9pZCBHTEVTMkNhbnZhczo6ZHJhd1Rl
eHR1cmVkUmVjdFRpbGUoVGV4dHVyZSogdGV4dHVyZSwgaW50IHRpbGUsIGNvbnN0IEZsb2F0UmUK
IAogICAgIGNvbnN0IFRpbGluZ0RhdGEmIHRpbGVzID0gdGV4dHVyZS0+dGlsZXMoKTsKIAotICAg
IG1fY29udGV4dC0+YWN0aXZlVGV4dHVyZShHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRTApOwog
ICAgIHRleHR1cmUtPmJpbmRUaWxlKHRpbGUpOwogCiAgICAgRmxvYXRSZWN0IHNyY1JlY3RDbGlw
cGVkSW5UaWxlU3BhY2U7CkBAIC0yMDIsMTggKzIyOSwyNCBAQCB2b2lkIEdMRVMyQ2FudmFzOjpk
cmF3VGV4dHVyZWRSZWN0VGlsZShUZXh0dXJlKiB0ZXh0dXJlLCBpbnQgdGlsZSwgY29uc3QgRmxv
YXRSZQogCiAgICAgSW50UmVjdCB0aWxlQm91bmRzV2l0aEJvcmRlciA9IHRpbGVzLnRpbGVCb3Vu
ZHNXaXRoQm9yZGVyKHRpbGUpOwogCisgICAgZHJhd1F1YWQoSW50U2l6ZSh0aWxlQm91bmRzV2l0
aEJvcmRlci53aWR0aCgpLCB0aWxlQm91bmRzV2l0aEJvcmRlci5oZWlnaHQoKSksIHNyY1JlY3RD
bGlwcGVkSW5UaWxlU3BhY2UsIGRzdFJlY3RJbnRlcnNlY3RlZCwgdHJhbnNmb3JtLCBhbHBoYSk7
Cit9CisKK3ZvaWQgR0xFUzJDYW52YXM6OmRyYXdRdWFkKGNvbnN0IEludFNpemUmIHRleHR1cmVT
aXplLCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsIGNvbnN0IEZsb2F0UmVjdCYgZHN0UmVjdCwg
Y29uc3QgQWZmaW5lVHJhbnNmb3JtJiB0cmFuc2Zvcm0sIGZsb2F0IGFscGhhKQorewogICAgIEFm
ZmluZVRyYW5zZm9ybSBtYXRyaXgobV9mbGlwTWF0cml4KTsKICAgICBtYXRyaXgubXVsdExlZnQo
dHJhbnNmb3JtKTsKLSAgICBtYXRyaXgudHJhbnNsYXRlKGRzdFJlY3RJbnRlcnNlY3RlZC54KCks
IGRzdFJlY3RJbnRlcnNlY3RlZC55KCkpOwotICAgIG1hdHJpeC5zY2FsZShkc3RSZWN0SW50ZXJz
ZWN0ZWQud2lkdGgoKSwgZHN0UmVjdEludGVyc2VjdGVkLmhlaWdodCgpKTsKKyAgICBtYXRyaXgu
dHJhbnNsYXRlKGRzdFJlY3QueCgpLCBkc3RSZWN0LnkoKSk7CisgICAgbWF0cml4LnNjYWxlKGRz
dFJlY3Qud2lkdGgoKSwgZHN0UmVjdC5oZWlnaHQoKSk7CiAKICAgICBBZmZpbmVUcmFuc2Zvcm0g
dGV4TWF0cml4OwotICAgIHRleE1hdHJpeC5zY2FsZSgxLjBmIC8gdGlsZUJvdW5kc1dpdGhCb3Jk
ZXIud2lkdGgoKSwgMS4wZiAvIHRpbGVCb3VuZHNXaXRoQm9yZGVyLmhlaWdodCgpKTsKLSAgICB0
ZXhNYXRyaXgudHJhbnNsYXRlKHNyY1JlY3RDbGlwcGVkSW5UaWxlU3BhY2UueCgpLCBzcmNSZWN0
Q2xpcHBlZEluVGlsZVNwYWNlLnkoKSk7Ci0gICAgdGV4TWF0cml4LnNjYWxlKHNyY1JlY3RDbGlw
cGVkSW5UaWxlU3BhY2Uud2lkdGgoKSwgc3JjUmVjdENsaXBwZWRJblRpbGVTcGFjZS5oZWlnaHQo
KSk7CisgICAgdGV4TWF0cml4LnNjYWxlKDEuMGYgLyB0ZXh0dXJlU2l6ZS53aWR0aCgpLCAxLjBm
IC8gdGV4dHVyZVNpemUuaGVpZ2h0KCkpOworICAgIHRleE1hdHJpeC50cmFuc2xhdGUoc3JjUmVj
dC54KCksIHNyY1JlY3QueSgpKTsKKyAgICB0ZXhNYXRyaXguc2NhbGUoc3JjUmVjdC53aWR0aCgp
LCBzcmNSZWN0LmhlaWdodCgpKTsKIAotICAgIG1fdGV4U2hhZGVyLT51c2UobWF0cml4LCB0ZXhN
YXRyaXgsIDAsIGFscGhhKTsKKyAgICBiaW5kRnJhbWVidWZmZXIoKTsKIAorICAgIG1fY29udGV4
dC0+dXNlVGV4dHVyZVByb2dyYW0oYWxwaGEsIG1hdHJpeCwgdGV4TWF0cml4KTsKICAgICBtX2Nv
bnRleHQtPmRyYXdBcnJheXMoR3JhcGhpY3NDb250ZXh0M0Q6OlRSSUFOR0xFX1NUUklQLCAwLCA0
KTsKICAgICBjaGVja0dMRXJyb3IoImdsRHJhd0FycmF5cyIpOwogfQpAQCAtMjIzLDk4ICsyNTYs
MTQgQEAgdm9pZCBHTEVTMkNhbnZhczo6c2V0Q29tcG9zaXRlT3BlcmF0aW9uKENvbXBvc2l0ZU9w
ZXJhdG9yIG9wKQogICAgIG1fc3RhdGUtPm1fY29tcG9zaXRlT3AgPSBvcDsKIH0KIAotdm9pZCBH
TEVTMkNhbnZhczo6YXBwbHlDb21wb3NpdGVPcGVyYXRvcihDb21wb3NpdGVPcGVyYXRvciBvcCkK
LXsKLSAgICBpZiAob3AgPT0gbV9sYXN0Q29tcG9zaXRlT3ApCi0gICAgICAgIHJldHVybjsKLQot
ICAgIHN3aXRjaCAob3ApIHsKLSAgICBjYXNlIENvbXBvc2l0ZUNsZWFyOgotICAgICAgICBtX2Nv
bnRleHQtPmVuYWJsZShHcmFwaGljc0NvbnRleHQzRDo6QkxFTkQpOwotICAgICAgICBtX2NvbnRl
eHQtPmJsZW5kRnVuYyhHcmFwaGljc0NvbnRleHQzRDo6WkVSTywgR3JhcGhpY3NDb250ZXh0M0Q6
OlpFUk8pOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIENvbXBvc2l0ZUNvcHk6Ci0gICAgICAg
IG1fY29udGV4dC0+ZGlzYWJsZShHcmFwaGljc0NvbnRleHQzRDo6QkxFTkQpOwotICAgICAgICBi
cmVhazsKLSAgICBjYXNlIENvbXBvc2l0ZVNvdXJjZU92ZXI6Ci0gICAgICAgIG1fY29udGV4dC0+
ZW5hYmxlKEdyYXBoaWNzQ29udGV4dDNEOjpCTEVORCk7Ci0gICAgICAgIG1fY29udGV4dC0+Ymxl
bmRGdW5jKEdyYXBoaWNzQ29udGV4dDNEOjpPTkUsIEdyYXBoaWNzQ29udGV4dDNEOjpPTkVfTUlO
VVNfU1JDX0FMUEhBKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBDb21wb3NpdGVTb3VyY2VJ
bjoKLSAgICAgICAgbV9jb250ZXh0LT5lbmFibGUoR3JhcGhpY3NDb250ZXh0M0Q6OkJMRU5EKTsK
LSAgICAgICAgbV9jb250ZXh0LT5ibGVuZEZ1bmMoR3JhcGhpY3NDb250ZXh0M0Q6OkRTVF9BTFBI
QSwgR3JhcGhpY3NDb250ZXh0M0Q6OlpFUk8pOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIENv
bXBvc2l0ZVNvdXJjZU91dDoKLSAgICAgICAgbV9jb250ZXh0LT5lbmFibGUoR3JhcGhpY3NDb250
ZXh0M0Q6OkJMRU5EKTsKLSAgICAgICAgbV9jb250ZXh0LT5ibGVuZEZ1bmMoR3JhcGhpY3NDb250
ZXh0M0Q6Ok9ORV9NSU5VU19EU1RfQUxQSEEsIEdyYXBoaWNzQ29udGV4dDNEOjpaRVJPKTsKLSAg
ICAgICAgYnJlYWs7Ci0gICAgY2FzZSBDb21wb3NpdGVTb3VyY2VBdG9wOgotICAgICAgICBtX2Nv
bnRleHQtPmVuYWJsZShHcmFwaGljc0NvbnRleHQzRDo6QkxFTkQpOwotICAgICAgICBtX2NvbnRl
eHQtPmJsZW5kRnVuYyhHcmFwaGljc0NvbnRleHQzRDo6RFNUX0FMUEhBLCBHcmFwaGljc0NvbnRl
eHQzRDo6T05FX01JTlVTX1NSQ19BTFBIQSk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgQ29t
cG9zaXRlRGVzdGluYXRpb25PdmVyOgotICAgICAgICBtX2NvbnRleHQtPmVuYWJsZShHcmFwaGlj
c0NvbnRleHQzRDo6QkxFTkQpOwotICAgICAgICBtX2NvbnRleHQtPmJsZW5kRnVuYyhHcmFwaGlj
c0NvbnRleHQzRDo6T05FX01JTlVTX0RTVF9BTFBIQSwgR3JhcGhpY3NDb250ZXh0M0Q6Ok9ORSk7
Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgQ29tcG9zaXRlRGVzdGluYXRpb25JbjoKLSAgICAg
ICAgbV9jb250ZXh0LT5lbmFibGUoR3JhcGhpY3NDb250ZXh0M0Q6OkJMRU5EKTsKLSAgICAgICAg
bV9jb250ZXh0LT5ibGVuZEZ1bmMoR3JhcGhpY3NDb250ZXh0M0Q6OlpFUk8sIEdyYXBoaWNzQ29u
dGV4dDNEOjpTUkNfQUxQSEEpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIENvbXBvc2l0ZURl
c3RpbmF0aW9uT3V0OgotICAgICAgICBtX2NvbnRleHQtPmVuYWJsZShHcmFwaGljc0NvbnRleHQz
RDo6QkxFTkQpOwotICAgICAgICBtX2NvbnRleHQtPmJsZW5kRnVuYyhHcmFwaGljc0NvbnRleHQz
RDo6WkVSTywgR3JhcGhpY3NDb250ZXh0M0Q6Ok9ORV9NSU5VU19TUkNfQUxQSEEpOwotICAgICAg
ICBicmVhazsKLSAgICBjYXNlIENvbXBvc2l0ZURlc3RpbmF0aW9uQXRvcDoKLSAgICAgICAgbV9j
b250ZXh0LT5lbmFibGUoR3JhcGhpY3NDb250ZXh0M0Q6OkJMRU5EKTsKLSAgICAgICAgbV9jb250
ZXh0LT5ibGVuZEZ1bmMoR3JhcGhpY3NDb250ZXh0M0Q6Ok9ORV9NSU5VU19EU1RfQUxQSEEsIEdy
YXBoaWNzQ29udGV4dDNEOjpTUkNfQUxQSEEpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIENv
bXBvc2l0ZVhPUjoKLSAgICAgICAgbV9jb250ZXh0LT5lbmFibGUoR3JhcGhpY3NDb250ZXh0M0Q6
OkJMRU5EKTsKLSAgICAgICAgbV9jb250ZXh0LT5ibGVuZEZ1bmMoR3JhcGhpY3NDb250ZXh0M0Q6
Ok9ORV9NSU5VU19EU1RfQUxQSEEsIEdyYXBoaWNzQ29udGV4dDNEOjpPTkVfTUlOVVNfU1JDX0FM
UEhBKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBDb21wb3NpdGVQbHVzRGFya2VyOgotICAg
IGNhc2UgQ29tcG9zaXRlSGlnaGxpZ2h0OgotICAgICAgICAvLyB1bnN1cHBvcnRlZAotICAgICAg
ICBtX2NvbnRleHQtPmRpc2FibGUoR3JhcGhpY3NDb250ZXh0M0Q6OkJMRU5EKTsKLSAgICAgICAg
YnJlYWs7Ci0gICAgY2FzZSBDb21wb3NpdGVQbHVzTGlnaHRlcjoKLSAgICAgICAgbV9jb250ZXh0
LT5lbmFibGUoR3JhcGhpY3NDb250ZXh0M0Q6OkJMRU5EKTsKLSAgICAgICAgbV9jb250ZXh0LT5i
bGVuZEZ1bmMoR3JhcGhpY3NDb250ZXh0M0Q6Ok9ORSwgR3JhcGhpY3NDb250ZXh0M0Q6Ok9ORSk7
Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLSAgICBtX2xhc3RDb21wb3NpdGVPcCA9IG9wOwotfQot
Ci11bnNpZ25lZCBHTEVTMkNhbnZhczo6Z2V0UXVhZFZlcnRpY2VzKCkKLXsKLSAgICBpZiAoIW1f
cXVhZFZlcnRpY2VzKSB7Ci0gICAgICAgIGZsb2F0IHZlcnRpY2VzW10gPSB7IDAuMGYsIDAuMGYs
IDEuMGYsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEuMGYsIDAuMGYsIDEuMGYsCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAuMGYsIDEuMGYsIDEuMGYsCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIDEuMGYsIDEuMGYsIDEuMGYgfTsKLSAgICAgICAgbV9xdWFkVmVy
dGljZXMgPSBtX2NvbnRleHQtPmNyZWF0ZUJ1ZmZlcigpOwotICAgICAgICBtX2NvbnRleHQtPmJp
bmRCdWZmZXIoR3JhcGhpY3NDb250ZXh0M0Q6OkFSUkFZX0JVRkZFUiwgbV9xdWFkVmVydGljZXMp
OwotICAgICAgICBtX2NvbnRleHQtPmJ1ZmZlckRhdGEoR3JhcGhpY3NDb250ZXh0M0Q6OkFSUkFZ
X0JVRkZFUiwgc2l6ZW9mKHZlcnRpY2VzKSwgdmVydGljZXMsIEdyYXBoaWNzQ29udGV4dDNEOjpT
VEFUSUNfRFJBVyk7Ci0gICAgfQotICAgIHJldHVybiBtX3F1YWRWZXJ0aWNlczsKLX0KLQotVGV4
dHVyZSogR0xFUzJDYW52YXM6OmNyZWF0ZVRleHR1cmUoTmF0aXZlSW1hZ2VQdHIgcHRyLCBUZXh0
dXJlOjpGb3JtYXQgZm9ybWF0LCBpbnQgd2lkdGgsIGludCBoZWlnaHQpCitQYXNzUmVmUHRyPFRl
eHR1cmU+IEdMRVMyQ2FudmFzOjpjcmVhdGVUZXh0dXJlKE5hdGl2ZUltYWdlUHRyIHB0ciwgVGV4
dHVyZTo6Rm9ybWF0IGZvcm1hdCwgaW50IHdpZHRoLCBpbnQgaGVpZ2h0KQogewotICAgIFBhc3NS
ZWZQdHI8VGV4dHVyZT4gdGV4dHVyZSA9IG1fdGV4dHVyZXMuZ2V0KHB0cik7Ci0gICAgaWYgKHRl
eHR1cmUpCi0gICAgICAgIHJldHVybiB0ZXh0dXJlLmdldCgpOwotCi0gICAgdGV4dHVyZSA9IFRl
eHR1cmU6OmNyZWF0ZShtX2NvbnRleHQsIGZvcm1hdCwgd2lkdGgsIGhlaWdodCk7Ci0gICAgVGV4
dHVyZSogdCA9IHRleHR1cmUuZ2V0KCk7Ci0gICAgbV90ZXh0dXJlcy5zZXQocHRyLCB0ZXh0dXJl
KTsKLSAgICByZXR1cm4gdDsKKyAgICByZXR1cm4gbV9jb250ZXh0LT5jcmVhdGVUZXh0dXJlKHB0
ciwgZm9ybWF0LCB3aWR0aCwgaGVpZ2h0KTsKIH0KIAotVGV4dHVyZSogR0xFUzJDYW52YXM6Omdl
dFRleHR1cmUoTmF0aXZlSW1hZ2VQdHIgcHRyKQorUGFzc1JlZlB0cjxUZXh0dXJlPiBHTEVTMkNh
bnZhczo6Z2V0VGV4dHVyZShOYXRpdmVJbWFnZVB0ciBwdHIpCiB7Ci0gICAgUGFzc1JlZlB0cjxU
ZXh0dXJlPiB0ZXh0dXJlID0gbV90ZXh0dXJlcy5nZXQocHRyKTsKLSAgICByZXR1cm4gdGV4dHVy
ZSA/IHRleHR1cmUuZ2V0KCkgOiAwOworICAgIHJldHVybiBtX2NvbnRleHQtPmdldFRleHR1cmUo
cHRyKTsKIH0KIAogdm9pZCBHTEVTMkNhbnZhczo6Y2hlY2tHTEVycm9yKGNvbnN0IGNoYXIqIGhl
YWRlcikKZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vR0xF
UzJDYW52YXMuaCBiL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vR0xFUzJDYW52
YXMuaAppbmRleCBmNDlhYzhiYTE4ZDFkMzQyMzRiOGQwNjI3OGU3MDI4YmZlOTY5N2UxLi5hZjNj
MDUzOGYwNWY0MDcyZTIwZDE3M2ZlMDIzYjAzOTI2ZjZhNjljIDEwMDY0NAotLS0gYS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0dMRVMyQ2FudmFzLmgKKysrIGIvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9HTEVTMkNhbnZhcy5oCkBAIC00NCwxNyArNDQsMTUg
QEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCitjbGFzcyBDYW52YXNGcmFtZWJ1ZmZlcjsKK2Ns
YXNzIFNoYXJlZENvbnRleHQzRDsKIGNsYXNzIENvbG9yOwogY2xhc3MgRmxvYXRSZWN0OwogY2xh
c3MgR3JhcGhpY3NDb250ZXh0M0Q7Ci1jbGFzcyBTb2xpZEZpbGxTaGFkZXI7Ci1jbGFzcyBUZXhT
aGFkZXI7Ci0KLXR5cGVkZWYgSGFzaE1hcDxOYXRpdmVJbWFnZVB0ciwgUmVmUHRyPFRleHR1cmU+
ID4gVGV4dHVyZUhhc2hNYXA7CiAKIGNsYXNzIEdMRVMyQ2FudmFzIDogcHVibGljIE5vbmNvcHlh
YmxlIHsKIHB1YmxpYzoKLSAgICBHTEVTMkNhbnZhcyhHcmFwaGljc0NvbnRleHQzRCosIGNvbnN0
IEludFNpemUmKTsKKyAgICBHTEVTMkNhbnZhcyhTaGFyZWRDb250ZXh0M0QqLCBDYW52YXNGcmFt
ZWJ1ZmZlciosIGNvbnN0IEludFNpemUmKTsKICAgICB+R0xFUzJDYW52YXMoKTsKIAogICAgIHZv
aWQgZmlsbFJlY3QoY29uc3QgRmxvYXRSZWN0JiwgY29uc3QgQ29sb3ImLCBDb2xvclNwYWNlKTsK
QEAgLTc0LDI4ICs3MiwzNSBAQCBwdWJsaWM6CiAgICAgLy8gbm9uLXN0YW5kYXJkIGZ1bmN0aW9u
cwogICAgIC8vIFRoZXNlIGFyZSBub3Qgc3RhbmRhcmQgR3JhcGhpY3NDb250ZXh0IGZ1bmN0aW9u
cywgYW5kIHNob3VsZCBiZSBwdXNoZWQKICAgICAvLyBkb3duIGludG8gYSBQbGF0Zm9ybUNvbnRl
eHRHTEVTMiBhdCBzb21lIHBvaW50LgorICAgIHZvaWQgZHJhd1RleHR1cmVkUmVjdCh1bnNpZ25l
ZCB0ZXh0dXJlLCBjb25zdCBJbnRTaXplJiB0ZXh0dXJlU2l6ZSwgY29uc3QgRmxvYXRSZWN0JiBz
cmNSZWN0LCBjb25zdCBGbG9hdFJlY3QmIGRzdFJlY3QsIENvbG9yU3BhY2UsIENvbXBvc2l0ZU9w
ZXJhdG9yKTsKICAgICB2b2lkIGRyYXdUZXh0dXJlZFJlY3QoVGV4dHVyZSosIGNvbnN0IEZsb2F0
UmVjdCYgc3JjUmVjdCwgY29uc3QgRmxvYXRSZWN0JiBkc3RSZWN0LCBjb25zdCBBZmZpbmVUcmFu
c2Zvcm0mLCBmbG9hdCBhbHBoYSwgQ29sb3JTcGFjZSwgQ29tcG9zaXRlT3BlcmF0b3IpOwogICAg
IHZvaWQgZHJhd1RleHR1cmVkUmVjdChUZXh0dXJlKiwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0
LCBjb25zdCBGbG9hdFJlY3QmIGRzdFJlY3QsIENvbG9yU3BhY2UsIENvbXBvc2l0ZU9wZXJhdG9y
KTsKLSAgICBHcmFwaGljc0NvbnRleHQzRCogY29udGV4dCgpIHsgcmV0dXJuIG1fY29udGV4dDsg
fQotICAgIFRleHR1cmUqIGNyZWF0ZVRleHR1cmUoTmF0aXZlSW1hZ2VQdHIsIFRleHR1cmU6OkZv
cm1hdCwgaW50IHdpZHRoLCBpbnQgaGVpZ2h0KTsKLSAgICBUZXh0dXJlKiBnZXRUZXh0dXJlKE5h
dGl2ZUltYWdlUHRyKTsKKyAgICBQYXNzUmVmUHRyPFRleHR1cmU+IGNyZWF0ZVRleHR1cmUoTmF0
aXZlSW1hZ2VQdHIsIFRleHR1cmU6OkZvcm1hdCwgaW50IHdpZHRoLCBpbnQgaGVpZ2h0KTsKKyAg
ICBQYXNzUmVmUHRyPFRleHR1cmU+IGdldFRleHR1cmUoTmF0aXZlSW1hZ2VQdHIpOworCisgICAg
U2hhcmVkQ29udGV4dDNEKiBjb250ZXh0KCkgY29uc3QgeyByZXR1cm4gbV9jb250ZXh0OyB9CisK
KyAgICB2b2lkIHN3YXBCdWZmZXJzKCk7CisgICAgdm9pZCBiaW5kRnJhbWVidWZmZXIoKTsKKwor
ICAgIHVuc2lnbmVkIHRleHR1cmVJZEZvckNvbXBvc2l0b3IoKSBjb25zdDsKKyAgICB1bnNpZ25l
ZCB0ZXh0dXJlSWRGb3JDYW52YXMoKSBjb25zdDsKIAogcHJpdmF0ZToKICAgICB2b2lkIGRyYXdU
ZXh0dXJlZFJlY3RUaWxlKFRleHR1cmUqIHRleHR1cmUsIGludCB0aWxlLCBjb25zdCBGbG9hdFJl
Y3QmIHNyY1JlY3QsIGNvbnN0IEZsb2F0UmVjdCYgZHN0UmVjdCwgY29uc3QgQWZmaW5lVHJhbnNm
b3JtJiwgZmxvYXQgYWxwaGEpOworICAgIHZvaWQgZHJhd1F1YWQoY29uc3QgSW50U2l6ZSYgdGV4
dHVyZVNpemUsIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCwgY29uc3QgRmxvYXRSZWN0JiBkc3RS
ZWN0LCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mLCBmbG9hdCBhbHBoYSk7CiAgICAgdm9pZCBhcHBs
eUNvbXBvc2l0ZU9wZXJhdG9yKENvbXBvc2l0ZU9wZXJhdG9yKTsKICAgICB2b2lkIGNoZWNrR0xF
cnJvcihjb25zdCBjaGFyKiBoZWFkZXIpOwotICAgIHVuc2lnbmVkIGdldFF1YWRWZXJ0aWNlcygp
OwogCi0gICAgR3JhcGhpY3NDb250ZXh0M0QqIG1fY29udGV4dDsKKyAgICBJbnRTaXplIG1fc2l6
ZTsKKworICAgIFNoYXJlZENvbnRleHQzRCogbV9jb250ZXh0OworICAgIENhbnZhc0ZyYW1lYnVm
ZmVyKiBtX2ZyYW1lYnVmZmVyOworCiAgICAgc3RydWN0IFN0YXRlOwogICAgIFdURjo6VmVjdG9y
PFN0YXRlPiBtX3N0YXRlU3RhY2s7CiAgICAgU3RhdGUqIG1fc3RhdGU7Ci0gICAgdW5zaWduZWQg
bV9xdWFkVmVydGljZXM7Ci0gICAgT3duUHRyPFNvbGlkRmlsbFNoYWRlcj4gbV9zb2xpZEZpbGxT
aGFkZXI7Ci0gICAgT3duUHRyPFRleFNoYWRlcj4gbV90ZXhTaGFkZXI7CiAgICAgQWZmaW5lVHJh
bnNmb3JtIG1fZmxpcE1hdHJpeDsKLSAgICBUZXh0dXJlSGFzaE1hcCBtX3RleHR1cmVzOwotICAg
IENvbXBvc2l0ZU9wZXJhdG9yIG1fbGFzdENvbXBvc2l0ZU9wOyAvLyBUaGlzIGlzIHRoZSBvbmUg
bGFzdCBzZXQsIG5vdCBuZWNlc3NhcmlseSB0aGUgb25lIGluIHRoZSBzdGF0ZSBzdGFjay4KIH07
CiAKIH0KZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vR3Jh
cGhpY3NMYXllckNocm9taXVtLmNwcCBiL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21p
dW0vR3JhcGhpY3NMYXllckNocm9taXVtLmNwcAppbmRleCA2NDhlMzVmMWE0NjcyZmMyNjU0ZTVh
NWU5NmNjZTI5ZTY3OTJjMTAxLi4xOGRmZDI4NjJjNzcyM2I4ZDNmYTMxNzc3YmFhNjVlODA4MWVi
ZDE3IDEwMDY0NAotLS0gYS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0dyYXBo
aWNzTGF5ZXJDaHJvbWl1bS5jcHAKKysrIGIvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJv
bWl1bS9HcmFwaGljc0xheWVyQ2hyb21pdW0uY3BwCkBAIC00NSw2ICs0NSw3IEBACiAKICNpbmNs
dWRlICJHcmFwaGljc0xheWVyQ2hyb21pdW0uaCIKIAorI2luY2x1ZGUgIkNhbnZhczJETGF5ZXJD
aHJvbWl1bS5oIgogI2luY2x1ZGUgIkNvbnRlbnRMYXllckNocm9taXVtLmgiCiAjaW5jbHVkZSAi
RmxvYXRDb252ZXJzaW9uLmgiCiAjaW5jbHVkZSAiRmxvYXRSZWN0LmgiCkBAIC0yOTAsNiArMjkx
LDcgQEAgdm9pZCBHcmFwaGljc0xheWVyQ2hyb21pdW06OnNldENvbnRlbnRzTmVlZHNEaXNwbGF5
KCkKICAgICBpZiAobV9jb250ZW50c0xheWVyKQogICAgICAgICBtX2NvbnRlbnRzTGF5ZXItPnNl
dE5lZWRzRGlzcGxheSgpOwogfQorCiB2b2lkIEdyYXBoaWNzTGF5ZXJDaHJvbWl1bTo6c2V0TmVl
ZHNEaXNwbGF5KCkKIHsKICAgICBpZiAoZHJhd3NDb250ZW50KCkpCkBAIC0zMzksMTUgKzM0MSwx
NSBAQCB2b2lkIEdyYXBoaWNzTGF5ZXJDaHJvbWl1bTo6c2V0Q29udGVudHNUb0ltYWdlKEltYWdl
KiBpbWFnZSkKICAgICAgICAgdXBkYXRlU3VibGF5ZXJMaXN0KCk7CiB9CiAKLXZvaWQgR3JhcGhp
Y3NMYXllckNocm9taXVtOjpzZXRDb250ZW50c1RvQ2FudmFzKFBsYXRmb3JtTGF5ZXIqIHBsYXRm
b3JtTGF5ZXIpCit2b2lkIEdyYXBoaWNzTGF5ZXJDaHJvbWl1bTo6c2V0Q29udGVudHNUb1dlYkdM
KFBsYXRmb3JtTGF5ZXIqIHBsYXRmb3JtTGF5ZXIpCiB7CiAgICAgYm9vbCBjaGlsZHJlbkNoYW5n
ZWQgPSBmYWxzZTsKICAgICBpZiAocGxhdGZvcm1MYXllcikgewogICAgICAgICBwbGF0Zm9ybUxh
eWVyLT5zZXRPd25lcih0aGlzKTsKLSAgICAgICAgaWYgKCFtX2NvbnRlbnRzTGF5ZXIuZ2V0KCkg
fHwgbV9jb250ZW50c0xheWVyUHVycG9zZSAhPSBDb250ZW50c0xheWVyRm9yQ2FudmFzKSB7Cisg
ICAgICAgIGlmICghbV9jb250ZW50c0xheWVyLmdldCgpIHx8IG1fY29udGVudHNMYXllclB1cnBv
c2UgIT0gQ29udGVudHNMYXllckZvcldlYkdMKSB7CiAgICAgICAgICAgICBzZXR1cENvbnRlbnRz
TGF5ZXIocGxhdGZvcm1MYXllcik7CiAgICAgICAgICAgICBtX2NvbnRlbnRzTGF5ZXIgPSBwbGF0
Zm9ybUxheWVyOwotICAgICAgICAgICAgbV9jb250ZW50c0xheWVyUHVycG9zZSA9IENvbnRlbnRz
TGF5ZXJGb3JDYW52YXM7CisgICAgICAgICAgICBtX2NvbnRlbnRzTGF5ZXJQdXJwb3NlID0gQ29u
dGVudHNMYXllckZvcldlYkdMOwogICAgICAgICAgICAgY2hpbGRyZW5DaGFuZ2VkID0gdHJ1ZTsK
ICAgICAgICAgfQogICAgICAgICBwbGF0Zm9ybUxheWVyLT5zZXROZWVkc0Rpc3BsYXkoKTsKQEAg
LTM2NSw2ICszNjcsMzQgQEAgdm9pZCBHcmFwaGljc0xheWVyQ2hyb21pdW06OnNldENvbnRlbnRz
VG9DYW52YXMoUGxhdGZvcm1MYXllciogcGxhdGZvcm1MYXllcikKICAgICAgICAgdXBkYXRlU3Vi
bGF5ZXJMaXN0KCk7CiB9CiAKK3ZvaWQgR3JhcGhpY3NMYXllckNocm9taXVtOjpzZXRDb250ZW50
c1RvQ2FudmFzMkQoQ2FudmFzRnJhbWVidWZmZXIqIGZyYW1lYnVmZmVyKQoreworICAgIGJvb2wg
Y2hpbGRyZW5DaGFuZ2VkID0gZmFsc2U7CisgICAgaWYgKGZyYW1lYnVmZmVyKSB7CisgICAgICAg
IGlmICghbV9jb250ZW50c0xheWVyLmdldCgpIHx8IG1fY29udGVudHNMYXllclB1cnBvc2UgIT0g
Q29udGVudHNMYXllckZvckNhbnZhczJEKSB7CisgICAgICAgICAgICBSZWZQdHI8Q2FudmFzMkRM
YXllckNocm9taXVtPiBjYW52YXMyRExheWVyID0gQ2FudmFzMkRMYXllckNocm9taXVtOjpjcmVh
dGUoZnJhbWVidWZmZXIsIHRoaXMpOworICAgICAgICAgICAgc2V0dXBDb250ZW50c0xheWVyKGNh
bnZhczJETGF5ZXIuZ2V0KCkpOworICAgICAgICAgICAgbV9jb250ZW50c0xheWVyID0gY2FudmFz
MkRMYXllcjsKKyAgICAgICAgICAgIG1fY29udGVudHNMYXllclB1cnBvc2UgPSBDb250ZW50c0xh
eWVyRm9yQ2FudmFzMkQ7CisgICAgICAgICAgICBjaGlsZHJlbkNoYW5nZWQgPSB0cnVlOworICAg
ICAgICB9CisgICAgICAgIENhbnZhczJETGF5ZXJDaHJvbWl1bSogY2FudmFzMkRMYXllciA9IHN0
YXRpY19jYXN0PENhbnZhczJETGF5ZXJDaHJvbWl1bSo+KG1fY29udGVudHNMYXllci5nZXQoKSk7
CisgICAgICAgIGNhbnZhczJETGF5ZXItPnNldENhbnZhc0ZyYW1lYnVmZmVyKGZyYW1lYnVmZmVy
KTsKKyAgICAgICAgY2FudmFzMkRMYXllci0+c2V0TmVlZHNEaXNwbGF5KCk7CisgICAgICAgIHVw
ZGF0ZUNvbnRlbnRzUmVjdCgpOworICAgIH0gZWxzZSB7CisgICAgICAgIGlmIChtX2NvbnRlbnRz
TGF5ZXIpIHsKKyAgICAgICAgICAgIGNoaWxkcmVuQ2hhbmdlZCA9IHRydWU7CisKKyAgICAgICAg
ICAgIC8vIFRoZSBvbGQgY29udGVudHMgbGF5ZXIgd2lsbCBiZSByZW1vdmVkIHZpYSB1cGRhdGVT
dWJsYXllckxpc3QuCisgICAgICAgICAgICBtX2NvbnRlbnRzTGF5ZXIgPSAwOworICAgICAgICB9
CisgICAgfQorCisgICAgaWYgKGNoaWxkcmVuQ2hhbmdlZCkKKyAgICAgICAgdXBkYXRlU3VibGF5
ZXJMaXN0KCk7Cit9CisKIHZvaWQgR3JhcGhpY3NMYXllckNocm9taXVtOjpzZXRDb250ZW50c1Rv
TWVkaWEoUGxhdGZvcm1MYXllciogbGF5ZXIpCiB7CiAgICAgYm9vbCBjaGlsZHJlbkNoYW5nZWQg
PSBmYWxzZTsKZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0v
R3JhcGhpY3NMYXllckNocm9taXVtLmggYi9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9t
aXVtL0dyYXBoaWNzTGF5ZXJDaHJvbWl1bS5oCmluZGV4IDlkZmY2NmEwNzVjYzMwYTU4NDZiMTQ2
YTE2NTE4NDhiNmZlZGFmOTEuLjY1MGIxNDcyOGNkNDUyZDcwNjU4NjU1ZDcxNjc1OWYyOGU0YjRl
MWQgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vR3JhcGhp
Y3NMYXllckNocm9taXVtLmgKKysrIGIvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1
bS9HcmFwaGljc0xheWVyQ2hyb21pdW0uaApAQCAtODcsNyArODcsOCBAQCBwdWJsaWM6CiAKICAg
ICB2aXJ0dWFsIHZvaWQgc2V0Q29udGVudHNUb0ltYWdlKEltYWdlKik7CiAgICAgdmlydHVhbCB2
b2lkIHNldENvbnRlbnRzVG9NZWRpYShQbGF0Zm9ybUxheWVyKik7Ci0gICAgdmlydHVhbCB2b2lk
IHNldENvbnRlbnRzVG9DYW52YXMoUGxhdGZvcm1MYXllciopOworICAgIHZpcnR1YWwgdm9pZCBz
ZXRDb250ZW50c1RvV2ViR0woUGxhdGZvcm1MYXllciopOworICAgIHZpcnR1YWwgdm9pZCBzZXRD
b250ZW50c1RvQ2FudmFzMkQoQ2FudmFzRnJhbWVidWZmZXIqKTsKIAogICAgIHZpcnR1YWwgUGxh
dGZvcm1MYXllciogcGxhdGZvcm1MYXllcigpIGNvbnN0OwogCkBAIC0xMzgsNyArMTM5LDggQEAg
cHJpdmF0ZToKICAgICAgICAgTm9Db250ZW50c0xheWVyID0gMCwKICAgICAgICAgQ29udGVudHNM
YXllckZvckltYWdlLAogICAgICAgICBDb250ZW50c0xheWVyRm9yVmlkZW8sCi0gICAgICAgIENv
bnRlbnRzTGF5ZXJGb3JDYW52YXMKKyAgICAgICAgQ29udGVudHNMYXllckZvcldlYkdMLAorICAg
ICAgICBDb250ZW50c0xheWVyRm9yQ2FudmFzMkQsCiAgICAgfTsKIAogICAgIENvbnRlbnRzTGF5
ZXJQdXJwb3NlIG1fY29udGVudHNMYXllclB1cnBvc2U7CmRpZmYgLS1naXQgYS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyUmVuZGVyZXJDaHJvbWl1bS5jcHAgYi9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyUmVuZGVyZXJDaHJvbWl1bS5jcHAK
aW5kZXggNTAzMzhkMmQ1ZjczMjRlNWExMTljNTA5MTkwZGZlZjg2OThiMTc2OS4uZjQ5MDk3MDg3
MTNhYmE0ODlkZmU5OTBlNTg0M2JiYjU2ODk1NjBiMyAxMDA2NDQKLS0tIGEvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllclJlbmRlcmVyQ2hyb21pdW0uY3BwCisrKyBiL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJSZW5kZXJlckNocm9taXVtLmNw
cApAQCAtMzQsMTEgKzM0LDExIEBACiAjaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQog
I2luY2x1ZGUgIkxheWVyUmVuZGVyZXJDaHJvbWl1bS5oIgogCi0jaW5jbHVkZSAiQ2FudmFzTGF5
ZXJDaHJvbWl1bS5oIgotI2luY2x1ZGUgIkNvbnRlbnRMYXllckNocm9taXVtLmgiCisjaW5jbHVk
ZSAiQ2FudmFzMkRMYXllckNocm9taXVtLmgiCiAjaW5jbHVkZSAiR0xFUzJDb250ZXh0LmgiCiAj
aW5jbHVkZSAiTGF5ZXJDaHJvbWl1bS5oIgogI2luY2x1ZGUgIk5vdEltcGxlbWVudGVkLmgiCisj
aW5jbHVkZSAiV2ViR0xMYXllckNocm9taXVtLmgiCiAjaWYgUExBVEZPUk0oU0tJQSkKICNpbmNs
dWRlICJOYXRpdmVJbWFnZVNraWEuaCIKICNpbmNsdWRlICJQbGF0Zm9ybUNvbnRleHRTa2lhLmgi
CmRpZmYgLS1naXQgYS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1dlYkdMTGF5
ZXJDaHJvbWl1bS5jcHAgYi9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1dlYkdM
TGF5ZXJDaHJvbWl1bS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZTY0NGJhNmI0NjNlZGQ5ZTY0MTBmN2NlZDk1
MjY1NDY4ZTAyN2IzOAotLS0gL2Rldi9udWxsCisrKyBiL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY2hyb21pdW0vV2ViR0xMYXllckNocm9taXVtLmNwcApAQCAtMCwwICsxLDg3IEBACisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDEwIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisgKiBtZXQ6CisgKgorICogICAgICog
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyAqIGluIHRoZSBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqIGRp
c3RyaWJ1dGlvbi4KKyAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9y
IHRoZSBuYW1lcyBvZiBpdHMKKyAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNl
IG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisgKiB0aGlzIHNvZnR3YXJlIHdpdGhv
dXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMK
KyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBPV05FUiBP
UiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBU
SEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1
ZGUgImNvbmZpZy5oIgorCisjaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQorCisjaW5j
bHVkZSAiV2ViR0xMYXllckNocm9taXVtLmgiCisKKyNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQz
RC5oIgorI2luY2x1ZGUgIkxheWVyUmVuZGVyZXJDaHJvbWl1bS5oIgorI2luY2x1ZGUgPEdMRVMy
L2dsMi5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK1Bhc3NSZWZQdHI8V2ViR0xMYXllckNo
cm9taXVtPiBXZWJHTExheWVyQ2hyb21pdW06OmNyZWF0ZShHcmFwaGljc0xheWVyQ2hyb21pdW0q
IG93bmVyKQoreworICAgIHJldHVybiBhZG9wdFJlZihuZXcgV2ViR0xMYXllckNocm9taXVtKG93
bmVyKSk7Cit9CisKK1dlYkdMTGF5ZXJDaHJvbWl1bTo6V2ViR0xMYXllckNocm9taXVtKEdyYXBo
aWNzTGF5ZXJDaHJvbWl1bSogb3duZXIpCisgICAgOiBDYW52YXNMYXllckNocm9taXVtKG93bmVy
KQorICAgICwgbV9jb250ZXh0KDApCisgICAgLCBtX3RleHR1cmVJZCgwKQorICAgICwgbV90ZXh0
dXJlQ2hhbmdlZChmYWxzZSkKK3sKK30KKwordm9pZCBXZWJHTExheWVyQ2hyb21pdW06OnVwZGF0
ZUNvbnRlbnRzKCkKK3sKKyAgICBBU1NFUlQobV9jb250ZXh0KTsKKyAgICBpZiAobV90ZXh0dXJl
Q2hhbmdlZCkgeworICAgICAgICBnbEJpbmRUZXh0dXJlKEdMX1RFWFRVUkVfMkQsIG1fdGV4dHVy
ZUlkKTsKKyAgICAgICAgLy8gU2V0IHRoZSBtaW4tbWFnIGZpbHRlcnMgdG8gbGluZWFyIGFuZCB3
cmFwIG1vZGVzIHRvIEdMX0NMQU1QX1RPX0VER0UKKyAgICAgICAgLy8gdG8gZ2V0IGFyb3VuZCBO
UE9UIHRleHR1cmUgbGltaXRhdGlvbnMgb2YgR0xFUy4KKyAgICAgICAgZ2xUZXhQYXJhbWV0ZXJm
KEdMX1RFWFRVUkVfMkQsIEdMX1RFWFRVUkVfTUlOX0ZJTFRFUiwgR0xfTElORUFSKTsKKyAgICAg
ICAgZ2xUZXhQYXJhbWV0ZXJmKEdMX1RFWFRVUkVfMkQsIEdMX1RFWFRVUkVfTUFHX0ZJTFRFUiwg
R0xfTElORUFSKTsKKyAgICAgICAgZ2xUZXhQYXJhbWV0ZXJmKEdMX1RFWFRVUkVfMkQsIEdMX1RF
WFRVUkVfV1JBUF9TLCBHTF9DTEFNUF9UT19FREdFKTsKKyAgICAgICAgZ2xUZXhQYXJhbWV0ZXJm
KEdMX1RFWFRVUkVfMkQsIEdMX1RFWFRVUkVfV1JBUF9ULCBHTF9DTEFNUF9UT19FREdFKTsKKyAg
ICAgICAgbV90ZXh0dXJlQ2hhbmdlZCA9IGZhbHNlOworICAgIH0KKyAgICAvLyBVcGRhdGUgdGhl
IGNvbnRlbnRzIG9mIHRoZSB0ZXh0dXJlIHVzZWQgYnkgdGhlIGNvbXBvc2l0b3IuCisgICAgaWYg
KG1fY29udGVudHNEaXJ0eSkgeworICAgICAgICBtX2NvbnRleHQtPnByZXBhcmVUZXh0dXJlKCk7
CisgICAgICAgIG1fY29udGVudHNEaXJ0eSA9IGZhbHNlOworICAgIH0KK30KKwordm9pZCBXZWJH
TExheWVyQ2hyb21pdW06OnNldENvbnRleHQoY29uc3QgR3JhcGhpY3NDb250ZXh0M0QqIGNvbnRl
eHQpCit7CisgICAgbV9jb250ZXh0ID0gY29uc3RfY2FzdDxHcmFwaGljc0NvbnRleHQzRCo+KGNv
bnRleHQpOworCisgICAgdW5zaWduZWQgaW50IHRleHR1cmVJZCA9IG1fY29udGV4dC0+cGxhdGZv
cm1UZXh0dXJlKCk7CisgICAgaWYgKHRleHR1cmVJZCAhPSBtX3RleHR1cmVJZCkKKyAgICAgICAg
bV90ZXh0dXJlQ2hhbmdlZCA9IHRydWU7CisgICAgbV90ZXh0dXJlSWQgPSB0ZXh0dXJlSWQ7Cit9
CisKK30KKyNlbmRpZiAvLyBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCmRpZmYgLS1naXQg
YS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1dlYkdMTGF5ZXJDaHJvbWl1bS5o
IGIvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9XZWJHTExheWVyQ2hyb21pdW0u
aApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwLi4xZTgzYjRiNmNhOWJmMWEwZjIyMDhhZDc3YjJmM2I3YzgwNzU2YzAzCi0t
LSAvZGV2L251bGwKKysrIGIvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9XZWJH
TExheWVyQ2hyb21pdW0uaApAQCAtMCwwICsxLDY1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDEwIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMgYXJlCisgKiBtZXQ6CisgKgorICogICAgICogUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAq
ICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqIGRpc3RyaWJ1dGlvbi4KKyAqICAg
ICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMK
KyAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVj
dHMgZGVyaXZlZCBmcm9tCisgKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Ig
d3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
VEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFO
WSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBM
SU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBO
TyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUws
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QK
KyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworCisjaWZuZGVmIFdlYkdMTGF5ZXJDaHJv
bWl1bV9oCisjZGVmaW5lIFdlYkdMTGF5ZXJDaHJvbWl1bV9oCisKKyNpZiBVU0UoQUNDRUxFUkFU
RURfQ09NUE9TSVRJTkcpCisKKyNpbmNsdWRlICJDYW52YXNMYXllckNocm9taXVtLmgiCisKK25h
bWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgR3JhcGhpY3NDb250ZXh0M0Q7CisKKy8vIEEgTGF5
ZXIgY29udGFpbmluZyBhIFdlYkdMIGNhbnZhcworY2xhc3MgV2ViR0xMYXllckNocm9taXVtIDog
cHVibGljIENhbnZhc0xheWVyQ2hyb21pdW0geworcHVibGljOgorICAgIHN0YXRpYyBQYXNzUmVm
UHRyPFdlYkdMTGF5ZXJDaHJvbWl1bT4gY3JlYXRlKEdyYXBoaWNzTGF5ZXJDaHJvbWl1bSogb3du
ZXIgPSAwKTsKKyAgICB2aXJ0dWFsIGJvb2wgZHJhd3NDb250ZW50KCkgeyByZXR1cm4gbV9jb250
ZXh0OyB9CisgICAgdmlydHVhbCB2b2lkIHVwZGF0ZUNvbnRlbnRzKCk7CisKKyAgICB2b2lkIHNl
dENvbnRleHQoY29uc3QgR3JhcGhpY3NDb250ZXh0M0QqIGNvbnRleHQpOworCitwcm90ZWN0ZWQ6
CisgICAgdmlydHVhbCB1bnNpZ25lZCB0ZXh0dXJlSWQoKSB7IHJldHVybiBtX3RleHR1cmVJZDsg
fQorCitwcml2YXRlOgorICAgIGV4cGxpY2l0IFdlYkdMTGF5ZXJDaHJvbWl1bShHcmFwaGljc0xh
eWVyQ2hyb21pdW0qIG93bmVyKTsKKyAgICBHcmFwaGljc0NvbnRleHQzRCogbV9jb250ZXh0Owor
ICAgIHVuc2lnbmVkIG1fdGV4dHVyZUlkOworICAgIGJvb2wgbV90ZXh0dXJlQ2hhbmdlZDsKK307
CisKK30KKyNlbmRpZiAvLyBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCisKKyNlbmRpZgpk
aWZmIC0tZ2l0IGEvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ncHUvQ2FudmFzRnJhbWVidWZm
ZXIuY3BwIGIvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ncHUvQ2FudmFzRnJhbWVidWZmZXIu
Y3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAuLmZlNGRkYjQ3MWUyMjJmODUzNTY2YmZjNDU2ZjFlMTgzYWRiN2U5NjkK
LS0tIC9kZXYvbnVsbAorKysgYi9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dwdS9DYW52YXNG
cmFtZWJ1ZmZlci5jcHAKQEAgLTAsMCArMSwxMTAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIw
MTAsIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMgYXJlCisgKiBtZXQ6CisgKgorICogICAgICogUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAq
ICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqIGRpc3RyaWJ1dGlvbi4KKyAqICAg
ICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMK
KyAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVj
dHMgZGVyaXZlZCBmcm9tCisgKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Ig
d3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
VEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFO
WSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBM
SU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBO
TyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUws
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QK
KyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorCisj
aW5jbHVkZSAiQ2FudmFzRnJhbWVidWZmZXIuaCIKKworI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4
dDNELmgiCisjaW5jbHVkZSAiU2hhcmVkQ29udGV4dDNELmgiCisKK25hbWVzcGFjZSBXZWJDb3Jl
IHsKKworQ2FudmFzRnJhbWVidWZmZXI6OkNhbnZhc0ZyYW1lYnVmZmVyKFNoYXJlZENvbnRleHQz
RCogY29udGV4dCwgY29uc3QgSW50U2l6ZSYgc2l6ZSwgdW5zaWduZWQgZnJhbWVidWZmZXIsIHVu
c2lnbmVkIG9mZnNjcmVlbkNvbG9yVGV4dHVyZSwgdW5zaWduZWQgb2Zmc2NyZWVuUGFyZW50Q29s
b3JUZXh0dXJlKQorICAgIDogbV9jb250ZXh0KGNvbnRleHQpCisgICAgLCBtX3NpemUoc2l6ZSkK
KyAgICAsIG1fZnJhbWVidWZmZXIoZnJhbWVidWZmZXIpCisgICAgLCBtX29mZnNjcmVlbkNvbG9y
VGV4dHVyZShvZmZzY3JlZW5Db2xvclRleHR1cmUpCisgICAgLCBtX29mZnNjcmVlblBhcmVudENv
bG9yVGV4dHVyZShvZmZzY3JlZW5QYXJlbnRDb2xvclRleHR1cmUpCit7Cit9CisKK0NhbnZhc0Zy
YW1lYnVmZmVyOjp+Q2FudmFzRnJhbWVidWZmZXIoKQoreworICAgIG1fY29udGV4dC0+ZGVsZXRl
VGV4dHVyZShtX29mZnNjcmVlbkNvbG9yVGV4dHVyZSk7CisgICAgbV9jb250ZXh0LT5kZWxldGVD
b21wb3NpdG9yVGV4dHVyZShtX29mZnNjcmVlblBhcmVudENvbG9yVGV4dHVyZSk7CisgICAgbV9j
b250ZXh0LT5kZWxldGVGcmFtZWJ1ZmZlcihtX2ZyYW1lYnVmZmVyKTsKK30KKwordm9pZCBDYW52
YXNGcmFtZWJ1ZmZlcjo6YmluZCgpCit7CisgICAgbV9jb250ZXh0LT5iaW5kRnJhbWVidWZmZXIo
bV9mcmFtZWJ1ZmZlcik7CisgICAgbV9jb250ZXh0LT5zZXRWaWV3cG9ydChtX3NpemUpOworfQor
Cit2b2lkIENhbnZhc0ZyYW1lYnVmZmVyOjpzd2FwQnVmZmVycygpCit7CisgICAgaWYgKG1fd2ls
bFN3YXBCdWZmZXJzQ2FsbGJhY2spCisgICAgICAgIG1fd2lsbFN3YXBCdWZmZXJzQ2FsbGJhY2st
PndpbGxTd2FwQnVmZmVycygpOworICAgIG1fY29udGV4dC0+c2V0Vmlld3BvcnQobV9zaXplKTsK
KyAgICBtX2NvbnRleHQtPmNvcHlUZXh0dXJlVG9Db21wb3NpdG9yKG1fb2Zmc2NyZWVuQ29sb3JU
ZXh0dXJlLCBtX29mZnNjcmVlblBhcmVudENvbG9yVGV4dHVyZSk7Cit9CisKK3ZvaWQgQ2FudmFz
RnJhbWVidWZmZXI6OnNldFdpbGxTd2FwQnVmZmVyc0NhbGxiYWNrKFBhc3NPd25QdHI8U3dhcEJ1
ZmZlcnNDYWxsYmFjaz4gY2FsbGJhY2spCit7CisgICAgbV93aWxsU3dhcEJ1ZmZlcnNDYWxsYmFj
ayA9IGNhbGxiYWNrOworfQorCitQYXNzT3duUHRyPENhbnZhc0ZyYW1lYnVmZmVyPiBDYW52YXNG
cmFtZWJ1ZmZlcjo6Y3JlYXRlKFNoYXJlZENvbnRleHQzRCogY29udGV4dCwgY29uc3QgSW50U2l6
ZSYgc2l6ZSkKK3sKKyAgICB1bnNpZ25lZCBmcmFtZWJ1ZmZlciA9IGNvbnRleHQtPmNyZWF0ZUZy
YW1lYnVmZmVyKCk7CisgICAgQVNTRVJUKGZyYW1lYnVmZmVyKTsKKyAgICBpZiAoIWZyYW1lYnVm
ZmVyKQorICAgICAgICByZXR1cm4gMDsKKyAgICBjb250ZXh0LT5iaW5kRnJhbWVidWZmZXIoZnJh
bWVidWZmZXIpOworCisgICAgLy8gQ29sb3IgdGV4dHVyZQorICAgIHVuc2lnbmVkIG9mZnNjcmVl
bkNvbG9yVGV4dHVyZSA9IGNvbnRleHQtPmNyZWF0ZVRleHR1cmUoKTsKKyAgICBBU1NFUlQob2Zm
c2NyZWVuQ29sb3JUZXh0dXJlKTsKKyAgICBpZiAoIW9mZnNjcmVlbkNvbG9yVGV4dHVyZSkgewor
ICAgICAgICBjb250ZXh0LT5kZWxldGVGcmFtZWJ1ZmZlcihmcmFtZWJ1ZmZlcik7CisgICAgICAg
IHJldHVybiAwOworICAgIH0KKyAgICBjb250ZXh0LT5iaW5kVGV4dHVyZShHcmFwaGljc0NvbnRl
eHQzRDo6VEVYVFVSRV8yRCwgb2Zmc2NyZWVuQ29sb3JUZXh0dXJlKTsKKyAgICBjb250ZXh0LT50
ZXhQYXJhbWV0ZXJpKEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFXzJELCBHcmFwaGljc0NvbnRl
eHQzRDo6VEVYVFVSRV9NQUdfRklMVEVSLCBHcmFwaGljc0NvbnRleHQzRDo6TkVBUkVTVCk7Cisg
ICAgY29udGV4dC0+dGV4UGFyYW1ldGVyaShHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV8yRCwg
R3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfTUlOX0ZJTFRFUiwgR3JhcGhpY3NDb250ZXh0M0Q6
Ok5FQVJFU1QpOworICAgIGNvbnRleHQtPnRleFBhcmFtZXRlcmkoR3JhcGhpY3NDb250ZXh0M0Q6
OlRFWFRVUkVfMkQsIEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFX1dSQVBfUywgR3JhcGhpY3ND
b250ZXh0M0Q6OkNMQU1QX1RPX0VER0UpOworICAgIGNvbnRleHQtPnRleFBhcmFtZXRlcmkoR3Jh
cGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQsIEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFX1dS
QVBfVCwgR3JhcGhpY3NDb250ZXh0M0Q6OkNMQU1QX1RPX0VER0UpOworICAgIGNvbnRleHQtPnRl
eEltYWdlMkQoR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQsIDAsIEdyYXBoaWNzQ29udGV4
dDNEOjpSR0JBLCBzaXplLndpZHRoKCksIHNpemUuaGVpZ2h0KCksIDAsIEdyYXBoaWNzQ29udGV4
dDNEOjpSR0JBLCBHcmFwaGljc0NvbnRleHQzRDo6VU5TSUdORURfQllURSwgMCk7CisKKyAgICB1
bnNpZ25lZCBvZmZzY3JlZW5QYXJlbnRDb2xvclRleHR1cmUgPSBjb250ZXh0LT5jcmVhdGVDb21w
b3NpdG9yVGV4dHVyZShzaXplKTsKKyAgICBBU1NFUlQob2Zmc2NyZWVuUGFyZW50Q29sb3JUZXh0
dXJlKTsKKyAgICBpZiAoIW9mZnNjcmVlblBhcmVudENvbG9yVGV4dHVyZSkgeworICAgICAgICBj
b250ZXh0LT5kZWxldGVUZXh0dXJlKG9mZnNjcmVlbkNvbG9yVGV4dHVyZSk7CisgICAgICAgIGNv
bnRleHQtPmRlbGV0ZUZyYW1lYnVmZmVyKGZyYW1lYnVmZmVyKTsKKyAgICAgICAgcmV0dXJuIDA7
CisgICAgfQorCisgICAgY29udGV4dC0+ZnJhbWVidWZmZXJUZXh0dXJlMkQoR3JhcGhpY3NDb250
ZXh0M0Q6OkZSQU1FQlVGRkVSLCBHcmFwaGljc0NvbnRleHQzRDo6Q09MT1JfQVRUQUNITUVOVDAs
IEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFXzJELCBvZmZzY3JlZW5Db2xvclRleHR1cmUsIDAp
OworCisgICAgcmV0dXJuIG5ldyBDYW52YXNGcmFtZWJ1ZmZlcihjb250ZXh0LCBzaXplLCBmcmFt
ZWJ1ZmZlciwgb2Zmc2NyZWVuQ29sb3JUZXh0dXJlLCBvZmZzY3JlZW5QYXJlbnRDb2xvclRleHR1
cmUpOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2dwdS9DYW52YXNGcmFtZWJ1ZmZlci5oIGIvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9ncHUvQ2FudmFzRnJhbWVidWZmZXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5kNTJhYmExY2I2
OGFjYmNlZDVkMzRlYjYzNDhjNWM4OTAzMzNkOTAzCi0tLSAvZGV2L251bGwKKysrIGIvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9ncHUvQ2FudmFzRnJhbWVidWZmZXIuaApAQCAtMCwwICsxLDc4
IEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDEwLCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorICogbWV0OgorICoK
KyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiBjb3B5cmlnaHQgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisgKiBp
biB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlCisgKiBkaXN0cmlidXRpb24uCisgKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2ds
ZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisgKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQg
dG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorICogdGhpcyBzb2Z0
d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09O
VFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIg
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAor
ICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBP
RiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9S
IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWQorICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICov
CisKKyNpZm5kZWYgQ2FudmFzRnJhbWVidWZmZXJfaAorI2RlZmluZSBDYW52YXNGcmFtZWJ1ZmZl
cl9oCisKKy8vIE1hbmFnZXMgYSBmcmFtZWJ1ZmZlciB0byB1c2UgZm9yIGEgMmQgY2FudmFzLgor
CisjaW5jbHVkZSAiSW50U2l6ZS5oIgorCisjaW5jbHVkZSA8d3RmL05vbmNvcHlhYmxlLmg+Cisj
aW5jbHVkZSA8d3RmL093blB0ci5oPgorI2luY2x1ZGUgPHd0Zi9QYXNzT3duUHRyLmg+CisKK25h
bWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgU2hhcmVkQ29udGV4dDNEOworCitjbGFzcyBDYW52
YXNGcmFtZWJ1ZmZlciA6IHB1YmxpYyBOb25jb3B5YWJsZSB7CitwdWJsaWM6CisgICAgc3RhdGlj
IFBhc3NPd25QdHI8Q2FudmFzRnJhbWVidWZmZXI+IGNyZWF0ZShTaGFyZWRDb250ZXh0M0QqLCBj
b25zdCBJbnRTaXplJik7CisgICAgfkNhbnZhc0ZyYW1lYnVmZmVyKCk7CisKKyAgICB2b2lkIGJp
bmQoKTsKKyAgICB2b2lkIHN3YXBCdWZmZXJzKCk7CisKKyAgICB1bnNpZ25lZCB0ZXh0dXJlSWRG
b3JDb21wb3NpdG9yKCkgY29uc3QgeyByZXR1cm4gbV9vZmZzY3JlZW5QYXJlbnRDb2xvclRleHR1
cmU7IH0KKyAgICB1bnNpZ25lZCB0ZXh0dXJlSWRGb3JDYW52YXMoKSBjb25zdCB7IHJldHVybiBt
X29mZnNjcmVlbkNvbG9yVGV4dHVyZTsgfQorCisgICAgY2xhc3MgU3dhcEJ1ZmZlcnNDYWxsYmFj
ayA6IHB1YmxpYyBOb25jb3B5YWJsZSB7CisgICAgcHVibGljOgorICAgICAgICB2aXJ0dWFsIHZv
aWQgd2lsbFN3YXBCdWZmZXJzKCkgPSAwOworICAgIH07CisKKyAgICB2b2lkIHNldFdpbGxTd2Fw
QnVmZmVyc0NhbGxiYWNrKFBhc3NPd25QdHI8U3dhcEJ1ZmZlcnNDYWxsYmFjaz4pOworCitwcml2
YXRlOgorICAgIENhbnZhc0ZyYW1lYnVmZmVyKFNoYXJlZENvbnRleHQzRCogY29udGV4dCwgY29u
c3QgSW50U2l6ZSYsIHVuc2lnbmVkIGZyYW1lYnVmZmVyLCB1bnNpZ25lZCBvZmZzY3JlZW5Db2xv
clRleHR1cmUsIHVuc2lnbmVkIG9mZnNjcmVlblBhcmVudENvbG9yVGV4dHVyZSk7CisKKyAgICBT
aGFyZWRDb250ZXh0M0QqIG1fY29udGV4dDsKKyAgICBJbnRTaXplIG1fc2l6ZTsKKyAgICB1bnNp
Z25lZCBtX2ZyYW1lYnVmZmVyOworICAgIHVuc2lnbmVkIG1fb2Zmc2NyZWVuQ29sb3JUZXh0dXJl
OworICAgIHVuc2lnbmVkIG1fb2Zmc2NyZWVuUGFyZW50Q29sb3JUZXh0dXJlOworCisgICAgT3du
UHRyPFN3YXBCdWZmZXJzQ2FsbGJhY2s+IG1fd2lsbFN3YXBCdWZmZXJzQ2FsbGJhY2s7Cit9Owor
Cit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBDYW52YXNGcmFtZWJ1ZmZlcl9o
CmRpZmYgLS1naXQgYS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dwdS9TaGFyZWRDb250ZXh0
M0QuY3BwIGIvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ncHUvU2hhcmVkQ29udGV4dDNELmNw
cApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwLi4zYjczOGYwMWY3MjgxMzkyOTM3ZmVkNWUwZGYyNTdjYzljZmI5MmY0Ci0t
LSAvZGV2L251bGwKKysrIGIvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ncHUvU2hhcmVkQ29u
dGV4dDNELmNwcApAQCAtMCwwICsxLDMyNSBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAxMCwg
R29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucyBhcmUKKyAqIG1ldDoKKyAqCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICAg
ICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZQorICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lcgorICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogZGlzdHJpYnV0aW9uLgorICogICAgICog
TmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworICog
Y29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBk
ZXJpdmVkIGZyb20KKyAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0
dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUg
Q09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlU
RUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVW
RU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhF
TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorICog
TElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisKKyNpbmNs
dWRlICJTaGFyZWRDb250ZXh0M0QuaCIKKworI2luY2x1ZGUgIkFmZmluZVRyYW5zZm9ybS5oIgor
I2luY2x1ZGUgIkNhbnZhc0ZyYW1lYnVmZmVyLmgiCisjaW5jbHVkZSAiQ29sb3IuaCIKKyNpbmNs
dWRlICJGbG9hdFJlY3QuaCIKKyNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQzRC5oIgorI2luY2x1
ZGUgIkdyYXBoaWNzVHlwZXMuaCIKKyNpbmNsdWRlICJJbnRTaXplLmgiCisjaW5jbHVkZSAiU29s
aWRGaWxsU2hhZGVyLmgiCisjaW5jbHVkZSAiVGV4U2hhZGVyLmgiCisKKyNpbmNsdWRlIDx3dGYv
dGV4dC9DU3RyaW5nLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CisKK25hbWVz
cGFjZSBXZWJDb3JlIHsKKworc3RhdGljIGlubGluZSB2b2lkIGFmZmluZVRvM3gzKGNvbnN0IEFm
ZmluZVRyYW5zZm9ybSYgdHJhbnNmb3JtLCBmbG9hdCBtYXRbOV0pCit7CisgICAgbWF0WzBdID0g
dHJhbnNmb3JtLmEoKTsKKyAgICBtYXRbMV0gPSB0cmFuc2Zvcm0uYigpOworICAgIG1hdFsyXSA9
IDAuMGY7CisgICAgbWF0WzNdID0gdHJhbnNmb3JtLmMoKTsKKyAgICBtYXRbNF0gPSB0cmFuc2Zv
cm0uZCgpOworICAgIG1hdFs1XSA9IDAuMGY7CisgICAgbWF0WzZdID0gdHJhbnNmb3JtLmUoKTsK
KyAgICBtYXRbN10gPSB0cmFuc2Zvcm0uZigpOworICAgIG1hdFs4XSA9IDEuMGY7Cit9CisKKy8v
IHN0YXRpYworUGFzc1JlZlB0cjxTaGFyZWRDb250ZXh0M0Q+IFNoYXJlZENvbnRleHQzRDo6Y3Jl
YXRlKFBhc3NPd25QdHI8R3JhcGhpY3NDb250ZXh0M0Q+IGNvbnRleHQpCit7CisgICAgcmV0dXJu
IGFkb3B0UmVmKG5ldyBTaGFyZWRDb250ZXh0M0QoY29udGV4dCkpOworfQorCitTaGFyZWRDb250
ZXh0M0Q6OlNoYXJlZENvbnRleHQzRChQYXNzT3duUHRyPEdyYXBoaWNzQ29udGV4dDNEPiBjb250
ZXh0KQorICAgIDogbV9jb250ZXh0KGNvbnRleHQpCisgICAgLCBtX3F1YWRWZXJ0aWNlcygwKQor
ICAgICwgbV9zb2xpZEZpbGxTaGFkZXIoU29saWRGaWxsU2hhZGVyOjpjcmVhdGUobV9jb250ZXh0
LmdldCgpKSkKKyAgICAsIG1fdGV4U2hhZGVyKFRleFNoYWRlcjo6Y3JlYXRlKG1fY29udGV4dC5n
ZXQoKSkpCisKK3sKK30KKworU2hhcmVkQ29udGV4dDNEOjp+U2hhcmVkQ29udGV4dDNEKCkKK3sK
KyAgICBtX2NvbnRleHQtPmRlbGV0ZUJ1ZmZlcihtX3F1YWRWZXJ0aWNlcyk7Cit9CisKK3ZvaWQg
U2hhcmVkQ29udGV4dDNEOjpzY2lzc29yKGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKK3sKKyAgICBt
X2NvbnRleHQtPnNjaXNzb3IocmVjdC54KCksIHJlY3QueSgpLCByZWN0LndpZHRoKCksIHJlY3Qu
aGVpZ2h0KCkpOworfQorCit2b2lkIFNoYXJlZENvbnRleHQzRDo6ZW5hYmxlKHVuc2lnbmVkIGNh
cGFjaXR5KQoreworICAgIG1fY29udGV4dC0+ZW5hYmxlKGNhcGFjaXR5KTsKK30KKwordm9pZCBT
aGFyZWRDb250ZXh0M0Q6OmRpc2FibGUodW5zaWduZWQgY2FwYWNpdHkpCit7CisgICAgbV9jb250
ZXh0LT5kaXNhYmxlKGNhcGFjaXR5KTsKK30KKwordm9pZCBTaGFyZWRDb250ZXh0M0Q6OmNsZWFy
Q29sb3IoY29uc3QgQ29sb3ImIGNvbG9yKQoreworICAgIGZsb2F0IHJnYmFbNF07CisgICAgY29s
b3IuZ2V0UkdCQShyZ2JhWzBdLCByZ2JhWzFdLCByZ2JhWzJdLCByZ2JhWzNdKTsKKyAgICBtX2Nv
bnRleHQtPmNsZWFyQ29sb3IocmdiYVswXSwgcmdiYVsxXSwgcmdiYVsyXSwgcmdiYVszXSk7Cit9
CisKK3ZvaWQgU2hhcmVkQ29udGV4dDNEOjpjbGVhcih1bnNpZ25lZCBtYXNrKQoreworICAgIG1f
Y29udGV4dC0+Y2xlYXIobWFzayk7Cit9CisKK3ZvaWQgU2hhcmVkQ29udGV4dDNEOjpkcmF3QXJy
YXlzKHVuc2lnbmVkIGxvbmcgbW9kZSwgbG9uZyBmaXJzdCwgbG9uZyBjb3VudCkKK3sKKyAgICBt
X2NvbnRleHQtPmRyYXdBcnJheXMobW9kZSwgZmlyc3QsIGNvdW50KTsKK30KKwordW5zaWduZWQg
bG9uZyBTaGFyZWRDb250ZXh0M0Q6OmdldEVycm9yKCkKK3sKKyAgICByZXR1cm4gbV9jb250ZXh0
LT5nZXRFcnJvcigpOworfQorCit2b2lkIFNoYXJlZENvbnRleHQzRDo6Z2V0SW50ZWdlcnYodW5z
aWduZWQgbG9uZyBwbmFtZSwgaW50KiB2YWx1ZSkKK3sKKyAgICBtX2NvbnRleHQtPmdldEludGVn
ZXJ2KHBuYW1lLCB2YWx1ZSk7Cit9CisKK3Vuc2lnbmVkIFNoYXJlZENvbnRleHQzRDo6Y3JlYXRl
RnJhbWVidWZmZXIoKQoreworICAgIHJldHVybiBtX2NvbnRleHQtPmNyZWF0ZUZyYW1lYnVmZmVy
KCk7Cit9CisKK3Vuc2lnbmVkIFNoYXJlZENvbnRleHQzRDo6Y3JlYXRlVGV4dHVyZSgpCit7Cisg
ICAgcmV0dXJuIG1fY29udGV4dC0+Y3JlYXRlVGV4dHVyZSgpOworfQorCit2b2lkIFNoYXJlZENv
bnRleHQzRDo6ZGVsZXRlRnJhbWVidWZmZXIodW5zaWduZWQgZnJhbWVidWZmZXIpCit7CisgICAg
bV9jb250ZXh0LT5kZWxldGVGcmFtZWJ1ZmZlcihmcmFtZWJ1ZmZlcik7Cit9CisKK3ZvaWQgU2hh
cmVkQ29udGV4dDNEOjpkZWxldGVUZXh0dXJlKHVuc2lnbmVkIHRleHR1cmUpCit7CisgICAgbV9j
b250ZXh0LT5kZWxldGVUZXh0dXJlKHRleHR1cmUpOworfQorCit2b2lkIFNoYXJlZENvbnRleHQz
RDo6ZGVsZXRlQ29tcG9zaXRvclRleHR1cmUodW5zaWduZWQgdGV4dHVyZSkKK3sKKyAgICBtX2Nv
bnRleHQtPmRlbGV0ZUNvbXBvc2l0b3JUZXh0dXJlKHRleHR1cmUpOworfQorCit2b2lkIFNoYXJl
ZENvbnRleHQzRDo6ZnJhbWVidWZmZXJUZXh0dXJlMkQodW5zaWduZWQgbG9uZyB0YXJnZXQsIHVu
c2lnbmVkIGxvbmcgYXR0YWNobWVudCwgdW5zaWduZWQgbG9uZyB0ZXh0YXJnZXQsIHVuc2lnbmVk
IHRleHR1cmUsIGxvbmcgbGV2ZWwpCit7CisgICAgbV9jb250ZXh0LT5mcmFtZWJ1ZmZlclRleHR1
cmUyRCh0YXJnZXQsIGF0dGFjaG1lbnQsIHRleHRhcmdldCwgdGV4dHVyZSwgbGV2ZWwpOworfQor
Cit2b2lkIFNoYXJlZENvbnRleHQzRDo6dGV4UGFyYW1ldGVyaSh1bnNpZ25lZCB0YXJnZXQsIHVu
c2lnbmVkIHBuYW1lLCBpbnQgcGFyYW0pCit7CisgICAgbV9jb250ZXh0LT50ZXhQYXJhbWV0ZXJp
KHRhcmdldCwgcG5hbWUsIHBhcmFtKTsKK30KKworaW50IFNoYXJlZENvbnRleHQzRDo6dGV4SW1h
Z2UyRCh1bnNpZ25lZCB0YXJnZXQsIHVuc2lnbmVkIGxldmVsLCB1bnNpZ25lZCBpbnRlcm5hbGZv
cm1hdCwgdW5zaWduZWQgd2lkdGgsIHVuc2lnbmVkIGhlaWdodCwgdW5zaWduZWQgYm9yZGVyLCB1
bnNpZ25lZCBmb3JtYXQsIHVuc2lnbmVkIHR5cGUsIHZvaWQqIHBpeGVscykKK3sKKyAgICBtX2Nv
bnRleHQtPnRleEltYWdlMkQodGFyZ2V0LCBsZXZlbCwgaW50ZXJuYWxmb3JtYXQsIHdpZHRoLCBo
ZWlnaHQsIGJvcmRlciwgZm9ybWF0LCB0eXBlLCBwaXhlbHMpOworfQorCitpbnQgU2hhcmVkQ29u
dGV4dDNEOjp0ZXhTdWJJbWFnZTJEKHVuc2lnbmVkIHRhcmdldCwgdW5zaWduZWQgbGV2ZWwsIHVu
c2lnbmVkIHhvZmZzZXQsIHVuc2lnbmVkIHlvZmZzZXQsIHVuc2lnbmVkIHdpZHRoLCB1bnNpZ25l
ZCBoZWlnaHQsIHVuc2lnbmVkIGZvcm1hdCwgdW5zaWduZWQgdHlwZSwgdm9pZCogcGl4ZWxzKQor
eworICAgIG1fY29udGV4dC0+dGV4U3ViSW1hZ2UyRCh0YXJnZXQsIGxldmVsLCB4b2Zmc2V0LCB5
b2Zmc2V0LCB3aWR0aCwgaGVpZ2h0LCBmb3JtYXQsIHR5cGUsIHBpeGVscyk7Cit9CisKK3ZvaWQg
U2hhcmVkQ29udGV4dDNEOjpyZWFkUGl4ZWxzKGxvbmcgeCwgbG9uZyB5LCB1bnNpZ25lZCBsb25n
IHdpZHRoLCB1bnNpZ25lZCBsb25nIGhlaWdodCwgdW5zaWduZWQgbG9uZyBmb3JtYXQsIHVuc2ln
bmVkIGxvbmcgdHlwZSwgdm9pZCogZGF0YSkKK3sKKyAgICBtX2NvbnRleHQtPnJlYWRQaXhlbHMo
eCwgeSwgd2lkdGgsIGhlaWdodCwgZm9ybWF0LCB0eXBlLCBkYXRhKTsKK30KKworUGFzc1JlZlB0
cjxUZXh0dXJlPiBTaGFyZWRDb250ZXh0M0Q6OmNyZWF0ZVRleHR1cmUoTmF0aXZlSW1hZ2VQdHIg
cHRyLCBUZXh0dXJlOjpGb3JtYXQgZm9ybWF0LCBpbnQgd2lkdGgsIGludCBoZWlnaHQpCit7Cisg
ICAgUmVmUHRyPFRleHR1cmU+IHRleHR1cmU7CisgICAgaWYgKHB0cikKKyAgICAgICAgdGV4dHVy
ZSA9IG1fdGV4dHVyZXMuZ2V0KHB0cik7CisgICAgaWYgKHRleHR1cmUpCisgICAgICAgIHJldHVy
biB0ZXh0dXJlLmdldCgpOworCisgICAgdGV4dHVyZSA9IFRleHR1cmU6OmNyZWF0ZShtX2NvbnRl
eHQuZ2V0KCksIGZvcm1hdCwgd2lkdGgsIGhlaWdodCk7CisgICAgVGV4dHVyZSogdCA9IHRleHR1
cmUuZ2V0KCk7CisgICAgaWYgKHB0cikKKyAgICAgICAgbV90ZXh0dXJlcy5zZXQocHRyLCB0ZXh0
dXJlKTsKKyAgICByZXR1cm4gdDsKK30KKworUGFzc1JlZlB0cjxUZXh0dXJlPiBTaGFyZWRDb250
ZXh0M0Q6OmdldFRleHR1cmUoTmF0aXZlSW1hZ2VQdHIgcHRyKQoreworICAgIFJlZlB0cjxUZXh0
dXJlPiB0ZXh0dXJlID0gbV90ZXh0dXJlcy5nZXQocHRyKTsKKyAgICByZXR1cm4gdGV4dHVyZSA/
IHRleHR1cmUuZ2V0KCkgOiAwOworfQorCisKK3ZvaWQgU2hhcmVkQ29udGV4dDNEOjphcHBseUNv
bXBvc2l0ZU9wZXJhdG9yKENvbXBvc2l0ZU9wZXJhdG9yIG9wKQoreworICAgIHN3aXRjaCAob3Ap
IHsKKyAgICBjYXNlIENvbXBvc2l0ZUNsZWFyOgorICAgICAgICBtX2NvbnRleHQtPmVuYWJsZShH
cmFwaGljc0NvbnRleHQzRDo6QkxFTkQpOworICAgICAgICBtX2NvbnRleHQtPmJsZW5kRnVuYyhH
cmFwaGljc0NvbnRleHQzRDo6WkVSTywgR3JhcGhpY3NDb250ZXh0M0Q6OlpFUk8pOworICAgICAg
ICBicmVhazsKKyAgICBjYXNlIENvbXBvc2l0ZUNvcHk6CisgICAgICAgIG1fY29udGV4dC0+ZGlz
YWJsZShHcmFwaGljc0NvbnRleHQzRDo6QkxFTkQpOworICAgICAgICBicmVhazsKKyAgICBjYXNl
IENvbXBvc2l0ZVNvdXJjZU92ZXI6CisgICAgICAgIG1fY29udGV4dC0+ZW5hYmxlKEdyYXBoaWNz
Q29udGV4dDNEOjpCTEVORCk7CisgICAgICAgIG1fY29udGV4dC0+YmxlbmRGdW5jKEdyYXBoaWNz
Q29udGV4dDNEOjpPTkUsIEdyYXBoaWNzQ29udGV4dDNEOjpPTkVfTUlOVVNfU1JDX0FMUEhBKTsK
KyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBDb21wb3NpdGVTb3VyY2VJbjoKKyAgICAgICAgbV9j
b250ZXh0LT5lbmFibGUoR3JhcGhpY3NDb250ZXh0M0Q6OkJMRU5EKTsKKyAgICAgICAgbV9jb250
ZXh0LT5ibGVuZEZ1bmMoR3JhcGhpY3NDb250ZXh0M0Q6OkRTVF9BTFBIQSwgR3JhcGhpY3NDb250
ZXh0M0Q6OlpFUk8pOworICAgICAgICBicmVhazsKKyAgICBjYXNlIENvbXBvc2l0ZVNvdXJjZU91
dDoKKyAgICAgICAgbV9jb250ZXh0LT5lbmFibGUoR3JhcGhpY3NDb250ZXh0M0Q6OkJMRU5EKTsK
KyAgICAgICAgbV9jb250ZXh0LT5ibGVuZEZ1bmMoR3JhcGhpY3NDb250ZXh0M0Q6Ok9ORV9NSU5V
U19EU1RfQUxQSEEsIEdyYXBoaWNzQ29udGV4dDNEOjpaRVJPKTsKKyAgICAgICAgYnJlYWs7Cisg
ICAgY2FzZSBDb21wb3NpdGVTb3VyY2VBdG9wOgorICAgICAgICBtX2NvbnRleHQtPmVuYWJsZShH
cmFwaGljc0NvbnRleHQzRDo6QkxFTkQpOworICAgICAgICBtX2NvbnRleHQtPmJsZW5kRnVuYyhH
cmFwaGljc0NvbnRleHQzRDo6RFNUX0FMUEhBLCBHcmFwaGljc0NvbnRleHQzRDo6T05FX01JTlVT
X1NSQ19BTFBIQSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgQ29tcG9zaXRlRGVzdGluYXRp
b25PdmVyOgorICAgICAgICBtX2NvbnRleHQtPmVuYWJsZShHcmFwaGljc0NvbnRleHQzRDo6QkxF
TkQpOworICAgICAgICBtX2NvbnRleHQtPmJsZW5kRnVuYyhHcmFwaGljc0NvbnRleHQzRDo6T05F
X01JTlVTX0RTVF9BTFBIQSwgR3JhcGhpY3NDb250ZXh0M0Q6Ok9ORSk7CisgICAgICAgIGJyZWFr
OworICAgIGNhc2UgQ29tcG9zaXRlRGVzdGluYXRpb25JbjoKKyAgICAgICAgbV9jb250ZXh0LT5l
bmFibGUoR3JhcGhpY3NDb250ZXh0M0Q6OkJMRU5EKTsKKyAgICAgICAgbV9jb250ZXh0LT5ibGVu
ZEZ1bmMoR3JhcGhpY3NDb250ZXh0M0Q6OlpFUk8sIEdyYXBoaWNzQ29udGV4dDNEOjpTUkNfQUxQ
SEEpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIENvbXBvc2l0ZURlc3RpbmF0aW9uT3V0Ogor
ICAgICAgICBtX2NvbnRleHQtPmVuYWJsZShHcmFwaGljc0NvbnRleHQzRDo6QkxFTkQpOworICAg
ICAgICBtX2NvbnRleHQtPmJsZW5kRnVuYyhHcmFwaGljc0NvbnRleHQzRDo6WkVSTywgR3JhcGhp
Y3NDb250ZXh0M0Q6Ok9ORV9NSU5VU19TUkNfQUxQSEEpOworICAgICAgICBicmVhazsKKyAgICBj
YXNlIENvbXBvc2l0ZURlc3RpbmF0aW9uQXRvcDoKKyAgICAgICAgbV9jb250ZXh0LT5lbmFibGUo
R3JhcGhpY3NDb250ZXh0M0Q6OkJMRU5EKTsKKyAgICAgICAgbV9jb250ZXh0LT5ibGVuZEZ1bmMo
R3JhcGhpY3NDb250ZXh0M0Q6Ok9ORV9NSU5VU19EU1RfQUxQSEEsIEdyYXBoaWNzQ29udGV4dDNE
OjpTUkNfQUxQSEEpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIENvbXBvc2l0ZVhPUjoKKyAg
ICAgICAgbV9jb250ZXh0LT5lbmFibGUoR3JhcGhpY3NDb250ZXh0M0Q6OkJMRU5EKTsKKyAgICAg
ICAgbV9jb250ZXh0LT5ibGVuZEZ1bmMoR3JhcGhpY3NDb250ZXh0M0Q6Ok9ORV9NSU5VU19EU1Rf
QUxQSEEsIEdyYXBoaWNzQ29udGV4dDNEOjpPTkVfTUlOVVNfU1JDX0FMUEhBKTsKKyAgICAgICAg
YnJlYWs7CisgICAgY2FzZSBDb21wb3NpdGVQbHVzRGFya2VyOgorICAgIGNhc2UgQ29tcG9zaXRl
SGlnaGxpZ2h0OgorICAgICAgICAvLyB1bnN1cHBvcnRlZAorICAgICAgICBtX2NvbnRleHQtPmRp
c2FibGUoR3JhcGhpY3NDb250ZXh0M0Q6OkJMRU5EKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2Fz
ZSBDb21wb3NpdGVQbHVzTGlnaHRlcjoKKyAgICAgICAgbV9jb250ZXh0LT5lbmFibGUoR3JhcGhp
Y3NDb250ZXh0M0Q6OkJMRU5EKTsKKyAgICAgICAgbV9jb250ZXh0LT5ibGVuZEZ1bmMoR3JhcGhp
Y3NDb250ZXh0M0Q6Ok9ORSwgR3JhcGhpY3NDb250ZXh0M0Q6Ok9ORSk7CisgICAgICAgIGJyZWFr
OworICAgIH0KK30KKwordm9pZCBTaGFyZWRDb250ZXh0M0Q6OnVzZVF1YWRWZXJ0aWNlcygpCit7
CisgICAgaWYgKCFtX3F1YWRWZXJ0aWNlcykgeworICAgICAgICBmbG9hdCB2ZXJ0aWNlc1tdID0g
eyAwLjBmLCAwLjBmLCAxLjBmLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxLjBmLCAw
LjBmLCAxLjBmLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwLjBmLCAxLjBmLCAxLjBm
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxLjBmLCAxLjBmLCAxLjBmIH07CisgICAg
ICAgIG1fcXVhZFZlcnRpY2VzID0gbV9jb250ZXh0LT5jcmVhdGVCdWZmZXIoKTsKKyAgICAgICAg
bV9jb250ZXh0LT5iaW5kQnVmZmVyKEdyYXBoaWNzQ29udGV4dDNEOjpBUlJBWV9CVUZGRVIsIG1f
cXVhZFZlcnRpY2VzKTsKKyAgICAgICAgbV9jb250ZXh0LT5idWZmZXJEYXRhKEdyYXBoaWNzQ29u
dGV4dDNEOjpBUlJBWV9CVUZGRVIsIHNpemVvZih2ZXJ0aWNlcyksIHZlcnRpY2VzLCBHcmFwaGlj
c0NvbnRleHQzRDo6U1RBVElDX0RSQVcpOworICAgIH0gZWxzZSB7CisgICAgICAgIG1fY29udGV4
dC0+YmluZEJ1ZmZlcihHcmFwaGljc0NvbnRleHQzRDo6QVJSQVlfQlVGRkVSLCBtX3F1YWRWZXJ0
aWNlcyk7CisgICAgfQorfQorCit2b2lkIFNoYXJlZENvbnRleHQzRDo6c2V0QWN0aXZlVGV4dHVy
ZSh1bnNpZ25lZCB0ZXh0dXJlVW5pdCkKK3sKKyAgICBtX2NvbnRleHQtPmFjdGl2ZVRleHR1cmUo
dGV4dHVyZVVuaXQpOworfQorCit2b2lkIFNoYXJlZENvbnRleHQzRDo6YmluZFRleHR1cmUodW5z
aWduZWQgdGFyZ2V0LCB1bnNpZ25lZCB0ZXh0dXJlKQoreworICAgIGlmICh0YXJnZXQgIT0gR3Jh
cGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQpIHsKKyAgICAgICAgbV9jb250ZXh0LT5iaW5kVGV4
dHVyZSh0YXJnZXQsIHRleHR1cmUpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgbV9j
b250ZXh0LT5iaW5kVGV4dHVyZSh0YXJnZXQsIHRleHR1cmUpOworfQorCit2b2lkIFNoYXJlZENv
bnRleHQzRDo6dXNlRmlsbFNvbGlkUHJvZ3JhbShjb25zdCBDb2xvciYgY29sb3IsIGNvbnN0IEFm
ZmluZVRyYW5zZm9ybSYgdHJhbnNmb3JtKQoreworICAgIG1fc29saWRGaWxsU2hhZGVyLT51c2Uo
dHJhbnNmb3JtLCBjb2xvcik7Cit9CisKK3ZvaWQgU2hhcmVkQ29udGV4dDNEOjp1c2VUZXh0dXJl
UHJvZ3JhbShmbG9hdCBhbHBoYSwgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiB0cmFuc2Zvcm0sIGNv
bnN0IEFmZmluZVRyYW5zZm9ybSYgdGV4VHJhbnNmb3JtKQoreworICAgIG1fdGV4U2hhZGVyLT51
c2UodHJhbnNmb3JtLCB0ZXhUcmFuc2Zvcm0sIDAsIGFscGhhKTsKK30KKwordm9pZCBTaGFyZWRD
b250ZXh0M0Q6OmJpbmRGcmFtZWJ1ZmZlcih1bnNpZ25lZCBmcmFtZWJ1ZmZlcikKK3sKKyAgICBt
X2NvbnRleHQtPmJpbmRGcmFtZWJ1ZmZlcihHcmFwaGljc0NvbnRleHQzRDo6RlJBTUVCVUZGRVIs
IGZyYW1lYnVmZmVyKTsKK30KKwordm9pZCBTaGFyZWRDb250ZXh0M0Q6OnNldFZpZXdwb3J0KGNv
bnN0IEludFNpemUmIHNpemUpCit7CisgICAgbV9jb250ZXh0LT52aWV3cG9ydCgwLCAwLCBzaXpl
LndpZHRoKCksIHNpemUuaGVpZ2h0KCkpOworfQorCitib29sIFNoYXJlZENvbnRleHQzRDo6c3Vw
cG9ydHNCR1JBKCkKK3sKKyAgICByZXR1cm4gbV9jb250ZXh0LT5zdXBwb3J0c0JHUkEoKTsKK30K
KwordW5zaWduZWQgU2hhcmVkQ29udGV4dDNEOjpjcmVhdGVDb21wb3NpdG9yVGV4dHVyZShjb25z
dCBJbnRTaXplJiBzaXplKQoreworICAgIHJldHVybiBtX2NvbnRleHQtPmNyZWF0ZUNvbXBvc2l0
b3JUZXh0dXJlKHNpemUud2lkdGgoKSwgc2l6ZS5oZWlnaHQoKSk7Cit9CisKK3ZvaWQgU2hhcmVk
Q29udGV4dDNEOjpjb3B5VGV4dHVyZVRvQ29tcG9zaXRvcih1bnNpZ25lZCBzb3VyY2UsIHVuc2ln
bmVkIGRlc3RpbmF0aW9uKQoreworICAgIG1fY29udGV4dC0+Y29weVRleHR1cmVUb0NvbXBvc2l0
b3Ioc291cmNlLCBkZXN0aW5hdGlvbik7Cit9CisKK2Jvb2wgU2hhcmVkQ29udGV4dDNEOjpwYWlu
dHNJbnRvQ2FudmFzQnVmZmVyKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9jb250ZXh0LT5wYWlu
dHNJbnRvQ2FudmFzQnVmZmVyKCk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAt
LWdpdCBhL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3B1L1NoYXJlZENvbnRleHQzRC5oIGIv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ncHUvU2hhcmVkQ29udGV4dDNELmgKbmV3IGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MC4uOGFiY2IzMTZkZDI3Yjk4ZTdhNDY4NGFkZWMyMDg1ODdhZGNiYmY4ZgotLS0gL2Rldi9udWxs
CisrKyBiL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3B1L1NoYXJlZENvbnRleHQzRC5oCkBA
IC0wLDAgKzEsMTIxIEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDEwLCBHb29nbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQor
ICogbWV0OgorICoKKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgICAgKiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiBjb3B5cmln
aHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyCisgKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlCisgKiBkaXN0cmlidXRpb24uCisgKiAgICAgKiBOZWl0aGVyIHRoZSBu
YW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisgKiBjb250cmlidXRvcnMg
bWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQor
ICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lv
bi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9M
REVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgKiBB
IFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhF
IENPUFlSSUdIVAorICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQ
Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwK
KyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgorICovCisKKyNpZm5kZWYgU2hhcmVkQ29udGV4dDNEX2gKKyNkZWZpbmUgU2hhcmVk
Q29udGV4dDNEX2gKKworI2luY2x1ZGUgIkdyYXBoaWNzVHlwZXMuaCIKKyNpbmNsdWRlICJJbWFn
ZVNvdXJjZS5oIgorI2luY2x1ZGUgIlRleHR1cmUuaCIKKworI2luY2x1ZGUgPHd0Zi9IYXNoTWFw
Lmg+CisjaW5jbHVkZSA8d3RmL093blB0ci5oPgorI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+
CisjaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNz
IEFmZmluZVRyYW5zZm9ybTsKK2NsYXNzIENhbnZhc0ZyYW1lYnVmZmVyOworY2xhc3MgQ29sb3I7
CitjbGFzcyBHcmFwaGljc0NvbnRleHQzRDsKK2NsYXNzIEZsb2F0UmVjdDsKK2NsYXNzIEludFNp
emU7CitjbGFzcyBTb2xpZEZpbGxTaGFkZXI7CitjbGFzcyBUZXhTaGFkZXI7CisKK3R5cGVkZWYg
SGFzaE1hcDxOYXRpdmVJbWFnZVB0ciwgUmVmUHRyPFRleHR1cmU+ID4gVGV4dHVyZUhhc2hNYXA7
CisKK2NsYXNzIFNoYXJlZENvbnRleHQzRCA6IHB1YmxpYyBSZWZDb3VudGVkPFNoYXJlZENvbnRl
eHQzRD4geworcHVibGljOgorICAgIHN0YXRpYyBQYXNzUmVmUHRyPFNoYXJlZENvbnRleHQzRD4g
Y3JlYXRlKFBhc3NPd25QdHI8R3JhcGhpY3NDb250ZXh0M0Q+KTsKKyAgICB+U2hhcmVkQ29udGV4
dDNEKCk7CisKKyAgICAvLyBGdW5jdGlvbnMgdGhhdCBkZWxlZ2F0ZSBkaXJlY3RseSB0byBHcmFw
aGljc0NvbnRleHQzRCwgd2l0aCBjYWNoaW5nCisgICAgdm9pZCBiaW5kRnJhbWVidWZmZXIodW5z
aWduZWQgZnJhbWVidWZmZXIpOworICAgIHZvaWQgc2V0Vmlld3BvcnQoY29uc3QgSW50U2l6ZSYp
OworICAgIHZvaWQgc2Npc3Nvcihjb25zdCBGbG9hdFJlY3QmKTsKKyAgICB2b2lkIGVuYWJsZSh1
bnNpZ25lZCBjYXBhY2l0eSk7CisgICAgdm9pZCBkaXNhYmxlKHVuc2lnbmVkIGNhcGFjaXR5KTsK
KyAgICB2b2lkIGNsZWFyQ29sb3IoY29uc3QgQ29sb3ImKTsKKyAgICB2b2lkIGNsZWFyKHVuc2ln
bmVkIG1hc2spOworICAgIHZvaWQgZHJhd0FycmF5cyh1bnNpZ25lZCBsb25nIG1vZGUsIGxvbmcg
Zmlyc3QsIGxvbmcgY291bnQpOworICAgIHVuc2lnbmVkIGxvbmcgZ2V0RXJyb3IoKTsKKyAgICB2
b2lkIGdldEludGVnZXJ2KHVuc2lnbmVkIGxvbmcgcG5hbWUsIGludCogdmFsdWUpOworCisgICAg
dW5zaWduZWQgY3JlYXRlRnJhbWVidWZmZXIoKTsKKyAgICB1bnNpZ25lZCBjcmVhdGVUZXh0dXJl
KCk7CisKKyAgICB2b2lkIGRlbGV0ZUZyYW1lYnVmZmVyKHVuc2lnbmVkIGZyYW1lYnVmZmVyKTsK
KyAgICB2b2lkIGRlbGV0ZVRleHR1cmUodW5zaWduZWQgdGV4dHVyZSk7CisgICAgdm9pZCBkZWxl
dGVDb21wb3NpdG9yVGV4dHVyZSh1bnNpZ25lZCB0ZXh0dXJlKTsKKworICAgIHZvaWQgZnJhbWVi
dWZmZXJUZXh0dXJlMkQodW5zaWduZWQgbG9uZyB0YXJnZXQsIHVuc2lnbmVkIGxvbmcgYXR0YWNo
bWVudCwgdW5zaWduZWQgbG9uZyB0ZXh0YXJnZXQsIHVuc2lnbmVkLCBsb25nIGxldmVsKTsKKyAg
ICB2b2lkIHRleFBhcmFtZXRlcmkodW5zaWduZWQgdGFyZ2V0LCB1bnNpZ25lZCBwbmFtZSwgaW50
IHBhcmFtKTsKKyAgICBpbnQgdGV4SW1hZ2UyRCh1bnNpZ25lZCB0YXJnZXQsIHVuc2lnbmVkIGxl
dmVsLCB1bnNpZ25lZCBpbnRlcm5hbGZvcm1hdCwgdW5zaWduZWQgd2lkdGgsIHVuc2lnbmVkIGhl
aWdodCwgdW5zaWduZWQgYm9yZGVyLCB1bnNpZ25lZCBmb3JtYXQsIHVuc2lnbmVkIHR5cGUsIHZv
aWQqIHBpeGVscyk7CisgICAgaW50IHRleFN1YkltYWdlMkQodW5zaWduZWQgdGFyZ2V0LCB1bnNp
Z25lZCBsZXZlbCwgdW5zaWduZWQgeG9mZnNldCwgdW5zaWduZWQgeW9mZnNldCwgdW5zaWduZWQg
d2lkdGgsIHVuc2lnbmVkIGhlaWdodCwgdW5zaWduZWQgZm9ybWF0LCB1bnNpZ25lZCB0eXBlLCB2
b2lkKiBwaXhlbHMpOworCisgICAgdm9pZCByZWFkUGl4ZWxzKGxvbmcgeCwgbG9uZyB5LCB1bnNp
Z25lZCBsb25nIHdpZHRoLCB1bnNpZ25lZCBsb25nIGhlaWdodCwgdW5zaWduZWQgbG9uZyBmb3Jt
YXQsIHVuc2lnbmVkIGxvbmcgdHlwZSwgdm9pZCogZGF0YSk7CisKKyAgICBib29sIHN1cHBvcnRz
QkdSQSgpOworICAgIHVuc2lnbmVkIGNyZWF0ZUNvbXBvc2l0b3JUZXh0dXJlKGNvbnN0IEludFNp
emUmKTsKKyAgICB2b2lkIGNvcHlUZXh0dXJlVG9Db21wb3NpdG9yKHVuc2lnbmVkLCB1bnNpZ25l
ZCk7CisKKyAgICBib29sIHBhaW50c0ludG9DYW52YXNCdWZmZXIoKSBjb25zdDsKKworICAgIC8v
IFNoYXJlZCBsb2dpYyBmb3IgY2FudmFzIDJkCisgICAgdm9pZCBhcHBseUNvbXBvc2l0ZU9wZXJh
dG9yKENvbXBvc2l0ZU9wZXJhdG9yKTsKKyAgICB2b2lkIHVzZVF1YWRWZXJ0aWNlcygpOworCisg
ICAgdm9pZCB1c2VGaWxsU29saWRQcm9ncmFtKGNvbnN0IENvbG9yJiwgY29uc3QgQWZmaW5lVHJh
bnNmb3JtJik7CisgICAgdm9pZCB1c2VUZXh0dXJlUHJvZ3JhbShmbG9hdCBhbHBoYSwgY29uc3Qg
QWZmaW5lVHJhbnNmb3JtJiwgY29uc3QgQWZmaW5lVHJhbnNmb3JtJik7CisKKyAgICB2b2lkIHNl
dEFjdGl2ZVRleHR1cmUodW5zaWduZWQgdGV4dHVyZVVuaXQpOworICAgIHZvaWQgYmluZFRleHR1
cmUodW5zaWduZWQgdGFyZ2V0LCB1bnNpZ25lZCB0ZXh0dXJlKTsKKworICAgIFBhc3NSZWZQdHI8
VGV4dHVyZT4gY3JlYXRlVGV4dHVyZShOYXRpdmVJbWFnZVB0ciwgVGV4dHVyZTo6Rm9ybWF0LCBp
bnQgd2lkdGgsIGludCBoZWlnaHQpOworICAgIFBhc3NSZWZQdHI8VGV4dHVyZT4gZ2V0VGV4dHVy
ZShOYXRpdmVJbWFnZVB0cik7CisKK3ByaXZhdGU6CisgICAgU2hhcmVkQ29udGV4dDNEKFBhc3NP
d25QdHI8R3JhcGhpY3NDb250ZXh0M0Q+IGNvbnRleHQpOworCisgICAgT3duUHRyPEdyYXBoaWNz
Q29udGV4dDNEPiBtX2NvbnRleHQ7CisKKyAgICB1bnNpZ25lZCBtX3F1YWRWZXJ0aWNlczsKKwor
ICAgIE93blB0cjxTb2xpZEZpbGxTaGFkZXI+IG1fc29saWRGaWxsU2hhZGVyOworICAgIE93blB0
cjxUZXhTaGFkZXI+IG1fdGV4U2hhZGVyOworCisgICAgVGV4dHVyZUhhc2hNYXAgbV90ZXh0dXJl
czsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIFNoYXJlZENvbnRl
eHQzRF9oCmRpZmYgLS1naXQgYS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dwdS9UZXh0dXJl
LmNwcCBiL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3B1L1RleHR1cmUuY3BwCmluZGV4IDU1
NzYwM2M5NzYzMmZlMGYzOGY1YjczNmVjNjVhM2M2NWM3MTQyMzYuLjM2ZTRhZDVlZmMyNjgyZGI1
YTA5ODI5MjAyM2MyZDNiNWZhOTZkNzggMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvZ3B1L1RleHR1cmUuY3BwCisrKyBiL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3B1
L1RleHR1cmUuY3BwCkBAIC0zNCw2ICszNCw3IEBACiAKICNpbmNsdWRlICJHcmFwaGljc0NvbnRl
eHQzRC5oIgogI2luY2x1ZGUgIkludFJlY3QuaCIKKwogI2luY2x1ZGUgPHd0Zi9Pd25BcnJheVB0
ci5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CmRpZmYgLS1naXQgYS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL21hYy9HcmFwaGljc0xheWVyQ0EuaCBiL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvbWFjL0dyYXBoaWNzTGF5ZXJDQS5oCmluZGV4IGE5Zjc0N2FkMDA0ZDgyZTM5NjM5NDdhOTY0
MmQyYzE1MjkyNDViNDMuLjFjYTAyNzk0MTM2ZGM4ODM3NzY0ZmRmNGViZjMzYjBlMTI1MDJiNGIg
MTAwNjQ0Ci0tLSBhL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL0dyYXBoaWNzTGF5ZXJD
QS5oCisrKyBiL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL0dyYXBoaWNzTGF5ZXJDQS5o
CkBAIC0xMDMsNyArMTAzLDcgQEAgcHVibGljOgogICAgIAogICAgIHZpcnR1YWwgdm9pZCBzZXRD
b250ZW50c1RvSW1hZ2UoSW1hZ2UqKTsKICAgICB2aXJ0dWFsIHZvaWQgc2V0Q29udGVudHNUb01l
ZGlhKFBsYXRmb3JtTGF5ZXIqKTsKLSAgICB2aXJ0dWFsIHZvaWQgc2V0Q29udGVudHNUb0NhbnZh
cyhQbGF0Zm9ybUxheWVyKik7CisgICAgdmlydHVhbCB2b2lkIHNldENvbnRlbnRzVG9XZWJHTChQ
bGF0Zm9ybUxheWVyKik7CiAKICAgICB2aXJ0dWFsIGJvb2wgaGFzQ29udGVudHNMYXllcigpIGNv
bnN0IHsgcmV0dXJuIG1fY29udGVudHNMYXllcjsgfQogICAgIApkaWZmIC0tZ2l0IGEvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9tYWMvR3JhcGhpY3NMYXllckNBLm1tIGIvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9tYWMvR3JhcGhpY3NMYXllckNBLm1tCmluZGV4IDMxNWNjMDA5MTAzYzY5
OGZhMDAxNDdiNDkzZjg2NTQ5YzgxZjJjYWUuLjAwMTdjYmZlNTc0MDk3YmViNzkwZDU4MmQwODZj
YTE1ODEzMjcxYzcgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL0dy
YXBoaWNzTGF5ZXJDQS5tbQorKysgYi9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL21hYy9HcmFw
aGljc0xheWVyQ0EubW0KQEAgLTE3MzEsNyArMTczMSw3IEBAIHZvaWQgR3JhcGhpY3NMYXllckNB
OjpwYXVzZUFuaW1hdGlvbk9uTGF5ZXIoQW5pbWF0ZWRQcm9wZXJ0eUlEIHByb3BlcnR5LCBjb25z
dCBTCiAgICAgfQogfQogCi12b2lkIEdyYXBoaWNzTGF5ZXJDQTo6c2V0Q29udGVudHNUb0NhbnZh
cyhQbGF0Zm9ybUxheWVyKiBjYW52YXNMYXllcikKK3ZvaWQgR3JhcGhpY3NMYXllckNBOjpzZXRD
b250ZW50c1RvV2ViR0woUGxhdGZvcm1MYXllciogY2FudmFzTGF5ZXIpCiB7CiAgICAgaWYgKGNh
bnZhc0xheWVyID09IG1fY29udGVudHNMYXllcikKICAgICAgICAgcmV0dXJuOwpkaWZmIC0tZ2l0
IGEvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9za2lhL0dyYXBoaWNzQ29udGV4dFNraWEuY3Bw
IGIvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9za2lhL0dyYXBoaWNzQ29udGV4dFNraWEuY3Bw
CmluZGV4IGI0ZmRkZDU2OGRlNWU5MTI4ZTEzN2U4NTVkMzg4ZGNjNmE5Mjg4YjMuLmE3N2YxMjJi
OTQzMjc0OTllMDEyMzg1Yjc5Yjk0NDQzNWYzNDUzZjMgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3Mvc2tpYS9HcmFwaGljc0NvbnRleHRTa2lhLmNwcAorKysgYi9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL3NraWEvR3JhcGhpY3NDb250ZXh0U2tpYS5jcHAKQEAgLTEyNDIs
OSArMTI0Miw5IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0Ojp0cmFuc2xhdGUoZmxvYXQgdywgZmxv
YXQgaCkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXZWJDb3Jl
RmxvYXRUb1NrU2NhbGFyKGgpKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHQ6OnNldEdyYXBo
aWNzQ29udGV4dDNEKEdyYXBoaWNzQ29udGV4dDNEKiBjb250ZXh0M0QsIGNvbnN0IEludFNpemUm
IHNpemUpCit2b2lkIEdyYXBoaWNzQ29udGV4dDo6c2V0U2hhcmVkQ29udGV4dDNEKFNoYXJlZENv
bnRleHQzRCogY29udGV4dCwgQ2FudmFzRnJhbWVidWZmZXIqIGZyYW1lYnVmZmVyLCBjb25zdCBJ
bnRTaXplJiBzaXplKQogewotICAgIHBsYXRmb3JtQ29udGV4dCgpLT5zZXRHcmFwaGljc0NvbnRl
eHQzRChjb250ZXh0M0QsIHNpemUpOworICAgIHBsYXRmb3JtQ29udGV4dCgpLT5zZXRTaGFyZWRD
b250ZXh0M0QoY29udGV4dCwgZnJhbWVidWZmZXIsIHNpemUpOwogfQogCiB2b2lkIEdyYXBoaWNz
Q29udGV4dDo6c3luY1NvZnR3YXJlQ2FudmFzKCkKQEAgLTEyNTIsNCArMTI1MiwxNCBAQCB2b2lk
IEdyYXBoaWNzQ29udGV4dDo6c3luY1NvZnR3YXJlQ2FudmFzKCkKICAgICBwbGF0Zm9ybUNvbnRl
eHQoKS0+c3luY1NvZnR3YXJlQ2FudmFzKCk7CiB9CiAKK3Vuc2lnbmVkIEdyYXBoaWNzQ29udGV4
dDo6dGV4dHVyZUlkRm9yQ29tcG9zaXRvcigpIGNvbnN0Cit7CisgICAgcmV0dXJuIHBsYXRmb3Jt
Q29udGV4dCgpLT5ncHVDYW52YXMoKS0+dGV4dHVyZUlkRm9yQ29tcG9zaXRvcigpOworfQorCit1
bnNpZ25lZCBHcmFwaGljc0NvbnRleHQ6OnRleHR1cmVJZEZvckNhbnZhcygpIGNvbnN0Cit7Cisg
ICAgcmV0dXJuIHBsYXRmb3JtQ29udGV4dCgpLT5ncHVDYW52YXMoKS0+dGV4dHVyZUlkRm9yQ2Fu
dmFzKCk7Cit9CisKIH0gIC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL3NraWEvSW1hZ2VCdWZmZXJTa2lhLmNwcCBiL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3Mvc2tpYS9JbWFnZUJ1ZmZlclNraWEuY3BwCmluZGV4IDk0MDM0MDYzMDBh
N2ZlNzlmZTA0ZmUyMWNmMTQ5NTVlNzJhMjU5ZGIuLjUyODI0NDQ5ZWVlZjNhM2M1NTg3Mzc4NTFj
NGM0ODcxZDcxYWRlZWIgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc2tp
YS9JbWFnZUJ1ZmZlclNraWEuY3BwCisrKyBiL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc2tp
YS9JbWFnZUJ1ZmZlclNraWEuY3BwCkBAIC0zNiw2ICszNiw3IEBACiAjaW5jbHVkZSAiQmFzZTY0
LmgiCiAjaW5jbHVkZSAiQml0bWFwSW1hZ2UuaCIKICNpbmNsdWRlICJCaXRtYXBJbWFnZVNpbmds
ZUZyYW1lU2tpYS5oIgorI2luY2x1ZGUgIkdMRVMyQ2FudmFzLmgiCiAjaW5jbHVkZSAiR3JhcGhp
Y3NDb250ZXh0LmgiCiAjaW5jbHVkZSAiSW1hZ2VEYXRhLmgiCiAjaW5jbHVkZSAiUGxhdGZvcm1D
b250ZXh0U2tpYS5oIgpAQCAtMTA4LDYgKzEwOSwxNiBAQCB2b2lkIEltYWdlQnVmZmVyOjpjbGlw
KEdyYXBoaWNzQ29udGV4dCogY29udGV4dCwgY29uc3QgRmxvYXRSZWN0JiByZWN0KSBjb25zdAog
dm9pZCBJbWFnZUJ1ZmZlcjo6ZHJhdyhHcmFwaGljc0NvbnRleHQqIGNvbnRleHQsIENvbG9yU3Bh
Y2Ugc3R5bGVDb2xvclNwYWNlLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9h
dFJlY3QmIHNyY1JlY3QsCiAgICAgICAgICAgICAgICAgICAgICAgIENvbXBvc2l0ZU9wZXJhdG9y
IG9wLCBib29sIHVzZUxvd1F1YWxpdHlTY2FsZSkKIHsKKyAgICBpZiAoY29udGV4dC0+cGxhdGZv
cm1Db250ZXh0KCktPnVzZUdQVSgpICYmIG1fZGF0YS5tX3BsYXRmb3JtQ29udGV4dC51c2VHUFUo
KSkgeworICAgICAgICBQbGF0Zm9ybUNvbnRleHRTa2lhKiBzb3VyY2VQbGF0Zm9ybUNvbnRleHQg
PSAmbV9kYXRhLm1fcGxhdGZvcm1Db250ZXh0OworICAgICAgICBzb3VyY2VQbGF0Zm9ybUNvbnRl
eHQtPnByZXBhcmVGb3JIYXJkd2FyZURyYXcoKTsKKyAgICAgICAgRmxvYXRSZWN0IGRlc3RSZWN0
RmxpcHBlZChkZXN0UmVjdCk7CisgICAgICAgIGRlc3RSZWN0RmxpcHBlZC5zZXRZKGRlc3RSZWN0
LmJvdHRvbSgpKTsKKyAgICAgICAgZGVzdFJlY3RGbGlwcGVkLnNldEhlaWdodCgtZGVzdFJlY3Qu
aGVpZ2h0KCkpOworICAgICAgICBjb250ZXh0LT5wbGF0Zm9ybUNvbnRleHQoKS0+Z3B1Q2FudmFz
KCktPmRyYXdUZXh0dXJlZFJlY3Qoc291cmNlUGxhdGZvcm1Db250ZXh0LT5ncHVDYW52YXMoKS0+
dGV4dHVyZUlkRm9yQ2FudmFzKCksIG1fc2l6ZSwgc3JjUmVjdCwgZGVzdFJlY3RGbGlwcGVkLCBz
dHlsZUNvbG9yU3BhY2UsIG9wKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKwogICAgIFJlZlB0
cjxJbWFnZT4gaW1hZ2UgPSBCaXRtYXBJbWFnZVNpbmdsZUZyYW1lU2tpYTo6Y3JlYXRlKCptX2Rh
dGEubV9wbGF0Zm9ybUNvbnRleHQuYml0bWFwKCksIGNvbnRleHQgPT0gbV9jb250ZXh0KTsKICAg
ICBjb250ZXh0LT5kcmF3SW1hZ2UoaW1hZ2UuZ2V0KCksIHN0eWxlQ29sb3JTcGFjZSwgZGVzdFJl
Y3QsIHNyY1JlY3QsIG9wLCB1c2VMb3dRdWFsaXR5U2NhbGUpOwogfQpkaWZmIC0tZ2l0IGEvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9za2lhL0ltYWdlU2tpYS5jcHAgYi9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL3NraWEvSW1hZ2VTa2lhLmNwcAppbmRleCBhZWQyODlmZTNjMTU1YWE1ZDM1
OTZkNDk0YjYwODkzZTRjMDE2YmI2Li5jNTE3YThhODA4YmE5ZjZlZmIwYjgyMWVmMTU4ZGM0ZGRi
OTllNzNmIDEwMDY0NAotLS0gYS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3NraWEvSW1hZ2VT
a2lhLmNwcAorKysgYi9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3NraWEvSW1hZ2VTa2lhLmNw
cApAQCAtNDcsNiArNDcsNyBAQAogI2luY2x1ZGUgIlNrUmVjdC5oIgogI2luY2x1ZGUgIlNrU2hh
ZGVyLmgiCiAjaW5jbHVkZSAiU2tpYVV0aWxzLmgiCisjaW5jbHVkZSAiVGV4dHVyZS5oIgogCiAj
aW5jbHVkZSAic2tpYS9leHQvaW1hZ2Vfb3BlcmF0aW9ucy5oIgogI2luY2x1ZGUgInNraWEvZXh0
L3BsYXRmb3JtX2NhbnZhcy5oIgpAQCAtNDExLDcgKzQxMiw3IEBAIHN0YXRpYyB2b2lkIGRyYXdC
aXRtYXBHTEVTMihHcmFwaGljc0NvbnRleHQqIGN0eHQsIE5hdGl2ZUltYWdlU2tpYSogYml0bWFw
LCBjb25zCiB7CiAgICAgY3R4dC0+cGxhdGZvcm1Db250ZXh0KCktPnByZXBhcmVGb3JIYXJkd2Fy
ZURyYXcoKTsKICAgICBHTEVTMkNhbnZhcyogZ3B1Q2FudmFzID0gY3R4dC0+cGxhdGZvcm1Db250
ZXh0KCktPmdwdUNhbnZhcygpOwotICAgIFRleHR1cmUqIHRleHR1cmUgPSBncHVDYW52YXMtPmdl
dFRleHR1cmUoYml0bWFwKTsKKyAgICBSZWZQdHI8VGV4dHVyZT4gdGV4dHVyZSA9IGdwdUNhbnZh
cy0+Z2V0VGV4dHVyZShiaXRtYXApOwogICAgIGlmICghdGV4dHVyZSkgewogICAgICAgICBBU1NF
UlQoYml0bWFwLT5jb25maWcoKSA9PSBTa0JpdG1hcDo6a0FSR0JfODg4OF9Db25maWcpOwogICAg
ICAgICBBU1NFUlQoYml0bWFwLT5yb3dCeXRlcygpID09IGJpdG1hcC0+d2lkdGgoKSAqIDQpOwpA
QCAtNDIwLDcgKzQyMSw3IEBAIHN0YXRpYyB2b2lkIGRyYXdCaXRtYXBHTEVTMihHcmFwaGljc0Nv
bnRleHQqIGN0eHQsIE5hdGl2ZUltYWdlU2tpYSogYml0bWFwLCBjb25zCiAgICAgICAgIEFTU0VS
VChiaXRtYXAtPmdldFBpeGVscygpKTsKICAgICAgICAgdGV4dHVyZS0+bG9hZChiaXRtYXAtPmdl
dFBpeGVscygpKTsKICAgICB9Ci0gICAgZ3B1Q2FudmFzLT5kcmF3VGV4dHVyZWRSZWN0KHRleHR1
cmUsIHNyY1JlY3QsIGRzdFJlY3QsIHN0eWxlQ29sb3JTcGFjZSwgY29tcG9zaXRlT3ApOworICAg
IGdwdUNhbnZhcy0+ZHJhd1RleHR1cmVkUmVjdCh0ZXh0dXJlLmdldCgpLCBzcmNSZWN0LCBkc3RS
ZWN0LCBzdHlsZUNvbG9yU3BhY2UsIGNvbXBvc2l0ZU9wKTsKIH0KIAogLy8gPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CmRpZmYgLS1naXQgYS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL3NraWEvUGxhdGZvcm1Db250ZXh0U2tpYS5jcHAgYi9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL3NraWEvUGxhdGZvcm1Db250ZXh0U2tpYS5jcHAKaW5kZXggM2Ix
ZDAxNWNmMTIyMzk1Mjc0M2U3YWE3NjQ5MzcyYWM0NzZjOGY1Mi4uYzU0ZWE5ZjVjMDg1ZDdlODFh
MmY2ZjBlOWVjZDBmYTU4OTRjNDU5NSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9za2lhL1BsYXRmb3JtQ29udGV4dFNraWEuY3BwCisrKyBiL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3Mvc2tpYS9QbGF0Zm9ybUNvbnRleHRTa2lhLmNwcApAQCAtMzMsMTIgKzMzLDE0IEBA
CiAjaW5jbHVkZSAiUGxhdGZvcm1Db250ZXh0U2tpYS5oIgogCiAjaW5jbHVkZSAiQWZmaW5lVHJh
bnNmb3JtLmgiCi0jaW5jbHVkZSAiQ2FudmFzTGF5ZXJDaHJvbWl1bS5oIgorI2luY2x1ZGUgIkNh
bnZhc0ZyYW1lYnVmZmVyLmgiCisjaW5jbHVkZSAiV2ViR0xMYXllckNocm9taXVtLmgiCiAjaW5j
bHVkZSAiR0xFUzJDYW52YXMuaCIKICNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKICNpbmNs
dWRlICJHcmFwaGljc0NvbnRleHQzRC5oIgogI2luY2x1ZGUgIkltYWdlQnVmZmVyLmgiCiAjaW5j
bHVkZSAiTmF0aXZlSW1hZ2VTa2lhLmgiCisjaW5jbHVkZSAiU2hhcmVkQ29udGV4dDNELmgiCiAj
aW5jbHVkZSAiU2tpYVV0aWxzLmgiCiAjaW5jbHVkZSAiVGV4dHVyZS5oIgogI2luY2x1ZGUgIlRp
bGluZ0RhdGEuaCIKQEAgLTIxNiwxMiArMjE4LDYgQEAgUGxhdGZvcm1Db250ZXh0U2tpYTo6UGxh
dGZvcm1Db250ZXh0U2tpYShza2lhOjpQbGF0Zm9ybUNhbnZhcyogY2FudmFzKQogCiBQbGF0Zm9y
bUNvbnRleHRTa2lhOjp+UGxhdGZvcm1Db250ZXh0U2tpYSgpCiB7Ci0jaWYgVVNFKEFDQ0VMRVJB
VEVEX0NPTVBPU0lUSU5HKQotICAgIGlmIChtX2dwdUNhbnZhcykgewotICAgICAgICBDYW52YXNM
YXllckNocm9taXVtKiBsYXllciA9IHN0YXRpY19jYXN0PENhbnZhc0xheWVyQ2hyb21pdW0qPiht
X2dwdUNhbnZhcy0+Y29udGV4dCgpLT5wbGF0Zm9ybUxheWVyKCkpOwotICAgICAgICBsYXllci0+
c2V0UHJlcGFyZVRleHR1cmVDYWxsYmFjaygwKTsKLSAgICB9Ci0jZW5kaWYKIH0KIAogdm9pZCBQ
bGF0Zm9ybUNvbnRleHRTa2lhOjpzZXRDYW52YXMoc2tpYTo6UGxhdGZvcm1DYW52YXMqIGNhbnZh
cykKQEAgLTY3OCwzMyArNjc0LDMzIEBAIHZvaWQgUGxhdGZvcm1Db250ZXh0U2tpYTo6YXBwbHlB
bnRpQWxpYXNlZENsaXBQYXRocyhXVEY6OlZlY3RvcjxTa1BhdGg+JiBwYXRocykKICAgICBtX2Nh
bnZhcy0+cmVzdG9yZSgpOwogfQogCi0jaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQot
Y2xhc3MgUHJlcGFyZVRleHR1cmVDYWxsYmFja0ltcGwgOiBwdWJsaWMgQ2FudmFzTGF5ZXJDaHJv
bWl1bTo6UHJlcGFyZVRleHR1cmVDYWxsYmFjayB7CitjbGFzcyBTd2FwQnVmZmVyc0NhbGxiYWNr
SW1wbCA6IHB1YmxpYyBDYW52YXNGcmFtZWJ1ZmZlcjo6U3dhcEJ1ZmZlcnNDYWxsYmFjayB7CiBw
dWJsaWM6Ci0gICAgc3RhdGljIFBhc3NPd25QdHI8UHJlcGFyZVRleHR1cmVDYWxsYmFja0ltcGw+
IGNyZWF0ZShQbGF0Zm9ybUNvbnRleHRTa2lhKiBwY3MpCisgICAgc3RhdGljIFBhc3NPd25QdHI8
U3dhcEJ1ZmZlcnNDYWxsYmFjaz4gY3JlYXRlKFBsYXRmb3JtQ29udGV4dFNraWEqIHBjcykKICAg
ICB7Ci0gICAgICAgIHJldHVybiBuZXcgUHJlcGFyZVRleHR1cmVDYWxsYmFja0ltcGwocGNzKTsK
KyAgICAgICAgcmV0dXJuIGFkb3B0UHRyKG5ldyBTd2FwQnVmZmVyc0NhbGxiYWNrSW1wbChwY3Mp
KTsKICAgICB9CiAKLSAgICB2aXJ0dWFsIHZvaWQgd2lsbFByZXBhcmVUZXh0dXJlKCkKKyAgICB2
aXJ0dWFsIHZvaWQgd2lsbFN3YXBCdWZmZXJzKCkKICAgICB7CiAgICAgICAgIG1fcGNzLT5wcmVw
YXJlRm9ySGFyZHdhcmVEcmF3KCk7CiAgICAgfQorCiBwcml2YXRlOgotICAgIGV4cGxpY2l0IFBy
ZXBhcmVUZXh0dXJlQ2FsbGJhY2tJbXBsKFBsYXRmb3JtQ29udGV4dFNraWEqIHBjcykgOiBtX3Bj
cyhwY3MpIHt9CisgICAgZXhwbGljaXQgU3dhcEJ1ZmZlcnNDYWxsYmFja0ltcGwoUGxhdGZvcm1D
b250ZXh0U2tpYSogcGNzKQorICAgICAgICA6IG1fcGNzKHBjcykKKyAgICB7CisgICAgfQorCiAg
ICAgUGxhdGZvcm1Db250ZXh0U2tpYSogbV9wY3M7CiB9OwotI2VuZGlmCiAKLXZvaWQgUGxhdGZv
cm1Db250ZXh0U2tpYTo6c2V0R3JhcGhpY3NDb250ZXh0M0QoR3JhcGhpY3NDb250ZXh0M0QqIGNv
bnRleHQsIGNvbnN0IFdlYkNvcmU6OkludFNpemUmIHNpemUpCit2b2lkIFBsYXRmb3JtQ29udGV4
dFNraWE6OnNldFNoYXJlZENvbnRleHQzRChTaGFyZWRDb250ZXh0M0QqIGNvbnRleHQsIENhbnZh
c0ZyYW1lYnVmZmVyKiBmcmFtZWJ1ZmZlciwgY29uc3QgV2ViQ29yZTo6SW50U2l6ZSYgc2l6ZSkK
IHsKICAgICBtX3VzZUdQVSA9IHRydWU7Ci0gICAgbV9ncHVDYW52YXMgPSBuZXcgR0xFUzJDYW52
YXMoY29udGV4dCwgc2l6ZSk7CisgICAgbV9ncHVDYW52YXMgPSBuZXcgR0xFUzJDYW52YXMoY29u
dGV4dCwgZnJhbWVidWZmZXIsIHNpemUpOwogICAgIG1fdXBsb2FkVGV4dHVyZS5jbGVhcigpOwot
I2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKLSAgICBDYW52YXNMYXllckNocm9taXVt
KiBsYXllciA9IHN0YXRpY19jYXN0PENhbnZhc0xheWVyQ2hyb21pdW0qPihjb250ZXh0LT5wbGF0
Zm9ybUxheWVyKCkpOwotICAgIGxheWVyLT5zZXRQcmVwYXJlVGV4dHVyZUNhbGxiYWNrKFByZXBh
cmVUZXh0dXJlQ2FsbGJhY2tJbXBsOjpjcmVhdGUodGhpcykpOwotI2VuZGlmCisgICAgZnJhbWVi
dWZmZXItPnNldFdpbGxTd2FwQnVmZmVyc0NhbGxiYWNrKFN3YXBCdWZmZXJzQ2FsbGJhY2tJbXBs
OjpjcmVhdGUodGhpcykpOwogfQogCiB2b2lkIFBsYXRmb3JtQ29udGV4dFNraWE6OnByZXBhcmVG
b3JTb2Z0d2FyZURyYXcoKSBjb25zdApAQCAtNzYzLDYgKzc1OSwxMiBAQCB2b2lkIFBsYXRmb3Jt
Q29udGV4dFNraWE6OnByZXBhcmVGb3JIYXJkd2FyZURyYXcoKSBjb25zdAogICAgIG1fYmFja2lu
Z1N0b3JlU3RhdGUgPSBIYXJkd2FyZTsKIH0KIAordm9pZCBQbGF0Zm9ybUNvbnRleHRTa2lhOjpz
d2FwQnVmZmVycygpCit7CisgICAgaWYgKG1fdXNlR1BVKQorICAgICAgICBtX2dwdUNhbnZhcy0+
c3dhcEJ1ZmZlcnMoKTsKK30KKwogdm9pZCBQbGF0Zm9ybUNvbnRleHRTa2lhOjpzeW5jU29mdHdh
cmVDYW52YXMoKSBjb25zdAogewogICAgIGlmICghbV91c2VHUFUpCkBAIC03ODQsOSArNzg2LDkg
QEAgdm9pZCBQbGF0Zm9ybUNvbnRleHRTa2lhOjp1cGxvYWRTb2Z0d2FyZVRvSGFyZHdhcmUoQ29t
cG9zaXRlT3BlcmF0b3Igb3ApIGNvbnN0CiB7CiAgICAgY29uc3QgU2tCaXRtYXAmIGJpdG1hcCA9
IG1fY2FudmFzLT5nZXREZXZpY2UoKS0+YWNjZXNzQml0bWFwKGZhbHNlKTsKICAgICBTa0F1dG9M
b2NrUGl4ZWxzIGxvY2soYml0bWFwKTsKLSAgICBHcmFwaGljc0NvbnRleHQzRCogY29udGV4dCA9
IG1fZ3B1Q2FudmFzLT5jb250ZXh0KCk7CisgICAgU2hhcmVkQ29udGV4dDNEKiBjb250ZXh0ID0g
bV9ncHVDYW52YXMtPmNvbnRleHQoKTsKICAgICBpZiAoIW1fdXBsb2FkVGV4dHVyZSB8fCBtX3Vw
bG9hZFRleHR1cmUtPnRpbGVzKCkudG90YWxTaXplWCgpIDwgYml0bWFwLndpZHRoKCkgfHwgbV91
cGxvYWRUZXh0dXJlLT50aWxlcygpLnRvdGFsU2l6ZVkoKSA8IGJpdG1hcC5oZWlnaHQoKSkKLSAg
ICAgICAgbV91cGxvYWRUZXh0dXJlID0gVGV4dHVyZTo6Y3JlYXRlKGNvbnRleHQsIFRleHR1cmU6
OkJHUkE4LCBiaXRtYXAud2lkdGgoKSwgYml0bWFwLmhlaWdodCgpKTsKKyAgICAgICAgbV91cGxv
YWRUZXh0dXJlID0gY29udGV4dC0+Y3JlYXRlVGV4dHVyZSgwLCBUZXh0dXJlOjpCR1JBOCwgYml0
bWFwLndpZHRoKCksIGJpdG1hcC5oZWlnaHQoKSk7CiAgICAgbV91cGxvYWRUZXh0dXJlLT5sb2Fk
KGJpdG1hcC5nZXRQaXhlbHMoKSk7CiAgICAgSW50UmVjdCByZWN0KDAsIDAsIGJpdG1hcC53aWR0
aCgpLCBiaXRtYXAuaGVpZ2h0KCkpOwogICAgIEFmZmluZVRyYW5zZm9ybSBpZGVudGl0eTsKQEAg
LTc5OSw3ICs4MDEsOCBAQCB2b2lkIFBsYXRmb3JtQ29udGV4dFNraWE6OnJlYWRiYWNrSGFyZHdh
cmVUb1NvZnR3YXJlKCkgY29uc3QKICAgICBTa0F1dG9Mb2NrUGl4ZWxzIGxvY2soYml0bWFwKTsK
ICAgICBpbnQgd2lkdGggPSBiaXRtYXAud2lkdGgoKSwgaGVpZ2h0ID0gYml0bWFwLmhlaWdodCgp
OwogICAgIE93bkFycmF5UHRyPHVpbnQzMl90PiBidWYobmV3IHVpbnQzMl90W3dpZHRoXSk7Ci0g
ICAgR3JhcGhpY3NDb250ZXh0M0QqIGNvbnRleHQgPSBtX2dwdUNhbnZhcy0+Y29udGV4dCgpOwor
ICAgIFNoYXJlZENvbnRleHQzRCogY29udGV4dCA9IG1fZ3B1Q2FudmFzLT5jb250ZXh0KCk7Cisg
ICAgbV9ncHVDYW52YXMtPmJpbmRGcmFtZWJ1ZmZlcigpOwogICAgIC8vIEZsaXBzIHRoZSBpbWFn
ZSB2ZXJ0aWNhbGx5LgogICAgIGZvciAoaW50IHkgPSAwOyB5IDwgaGVpZ2h0OyArK3kpIHsKICAg
ICAgICAgdWludDMyX3QqIHBpeGVscyA9IGJpdG1hcC5nZXRBZGRyMzIoMCwgeSk7CmRpZmYgLS1n
aXQgYS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3NraWEvUGxhdGZvcm1Db250ZXh0U2tpYS5o
IGIvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9za2lhL1BsYXRmb3JtQ29udGV4dFNraWEuaApp
bmRleCA4MmVkYzE2ZDFmY2NmOGFlOWUxOTUxYzkyNTJjY2M5ZTk1NmY0MTAwLi5lMzMyZjY0YmFk
ZTMxNzFlZjEzNTE3YWJiYWQ3NWYyMWJiZmNiNWM2IDEwMDY0NAotLS0gYS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL3NraWEvUGxhdGZvcm1Db250ZXh0U2tpYS5oCisrKyBiL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3Mvc2tpYS9QbGF0Zm9ybUNvbnRleHRTa2lhLmgKQEAgLTM1LDcgKzM1LDYg
QEAKICNpbmNsdWRlICJOb25jb3B5YWJsZS5oIgogCiAjaW5jbHVkZSAiU2tEYXNoUGF0aEVmZmVj
dC5oIgotI2luY2x1ZGUgIlNrRGVxdWUuaCIKICNpbmNsdWRlICJTa0RyYXdMb29wZXIuaCIKICNp
bmNsdWRlICJTa1BhaW50LmgiCiAjaW5jbHVkZSAiU2tQYXRoLmgiCkBAIC00Niw5ICs0NSwxMCBA
QAogbmFtZXNwYWNlIFdlYkNvcmUgewogCiBlbnVtIENvbXBvc2l0ZU9wZXJhdG9yOworY2xhc3Mg
Q2FudmFzRnJhbWVidWZmZXI7CiBjbGFzcyBHTEVTMkNhbnZhczsKLWNsYXNzIFRleHR1cmU7CiBj
bGFzcyBHcmFwaGljc0NvbnRleHQzRDsKK2NsYXNzIFRleHR1cmU7CiAKIC8vIFRoaXMgY2xhc3Mg
aG9sZHMgdGhlIHBsYXRmb3JtLXNwZWNpZmljIHN0YXRlIGZvciBHcmFwaGljc0NvbnRleHQuIFdl
IHB1dAogLy8gbW9zdCBvZiBvdXIgU2tpYSB3cmFwcGVycyBvbiB0aGlzIGNsYXNzLiBJbiB0aGVv
cnksIGEgbG90IG9mIHRoaXMgc3R1ZmYgY291bGQKQEAgLTE4MSw3ICsxODEsNyBAQCBwdWJsaWM6
CiAgICAgdm9pZCBjbGVhckltYWdlUmVzYW1wbGluZ0hpbnQoKTsKICAgICBib29sIGhhc0ltYWdl
UmVzYW1wbGluZ0hpbnQoKSBjb25zdDsKICAgICBib29sIHVzZUdQVSgpIHsgcmV0dXJuIG1fdXNl
R1BVOyB9Ci0gICAgdm9pZCBzZXRHcmFwaGljc0NvbnRleHQzRChHcmFwaGljc0NvbnRleHQzRCos
IGNvbnN0IEludFNpemUmKTsKKyAgICB2b2lkIHNldFNoYXJlZENvbnRleHQzRChTaGFyZWRDb250
ZXh0M0QqLCBDYW52YXNGcmFtZWJ1ZmZlciosIGNvbnN0IEludFNpemUmKTsKICAgICBHTEVTMkNh
bnZhcyogZ3B1Q2FudmFzKCkgY29uc3QgeyByZXR1cm4gbV9ncHVDYW52YXMuZ2V0KCk7IH0KIAog
ICAgIC8vIENhbGwgdGhlc2UgYmVmb3JlIG1ha2luZyBhIGNhbGwgdGhhdCBtYW5pcHVsYXRlcyB0
aGUgdW5kZXJseWluZwpAQCAtMTkwLDYgKzE5MCw3IEBAIHB1YmxpYzoKICAgICB2b2lkIHByZXBh
cmVGb3JIYXJkd2FyZURyYXcoKSBjb25zdDsKICAgICAvLyBDYWxsIHRvIGZvcmNlIHRoZSBza2lh
OjpQbGF0Zm9ybUNhbnZhcyB0byBjb250YWluIGFsbCByZW5kZXJpbmcgcmVzdWx0cy4KICAgICB2
b2lkIHN5bmNTb2Z0d2FyZUNhbnZhcygpIGNvbnN0OworICAgIHZvaWQgc3dhcEJ1ZmZlcnMoKTsK
IAogcHJpdmF0ZToKICNpZiBPUyhMSU5VWCkgfHwgT1MoV0lORE9XUykKZGlmZiAtLWdpdCBhL1dl
YkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyQmFja2luZy5jcHAgYi9XZWJDb3JlL3JlbmRlcmlu
Zy9SZW5kZXJMYXllckJhY2tpbmcuY3BwCmluZGV4IDBiYTkwN2JlOTQwMDExNDRkZjM3YTVhZmRi
N2Q1MzlhYTg3NDc5NjMuLjE3MzUyMjA3OTk3ODgwN2JkZTVlNThiMjU1MmQ4NWU0NzRkZWM1ZDMg
MTAwNjQ0Ci0tLSBhL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyQmFja2luZy5jcHAKKysr
IGIvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJCYWNraW5nLmNwcApAQCAtMjcsOCArMjcs
MTEgQEAKIAogI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKIAorI2luY2x1ZGUgIlJl
bmRlckxheWVyQmFja2luZy5oIgorCiAjaW5jbHVkZSAiQW5pbWF0aW9uQ29udHJvbGxlci5oIgog
I2luY2x1ZGUgIkNhbnZhc1JlbmRlcmluZ0NvbnRleHQuaCIKKyNpbmNsdWRlICJDYW52YXNSZW5k
ZXJpbmdDb250ZXh0MkQuaCIKICNpbmNsdWRlICJDU1NQcm9wZXJ0eU5hbWVzLmgiCiAjaW5jbHVk
ZSAiQ1NTU3R5bGVTZWxlY3Rvci5oIgogI2luY2x1ZGUgIkZyYW1lVmlldy5oIgpAQCAtNTEsOCAr
NTQsNyBAQAogI2luY2x1ZGUgIlJlbmRlclZpZGVvLmgiCiAjaW5jbHVkZSAiUmVuZGVyVmlldy5o
IgogI2luY2x1ZGUgIlNldHRpbmdzLmgiCi0KLSNpbmNsdWRlICJSZW5kZXJMYXllckJhY2tpbmcu
aCIKKyNpbmNsdWRlICJXZWJHTFJlbmRlcmluZ0NvbnRleHQuaCIKIAogdXNpbmcgbmFtZXNwYWNl
IHN0ZDsKIApAQCAtMjU3LDEwICsyNTksMTcgQEAgYm9vbCBSZW5kZXJMYXllckJhY2tpbmc6OnVw
ZGF0ZUdyYXBoaWNzTGF5ZXJDb25maWd1cmF0aW9uKCkKICNpZiBFTkFCTEUoM0RfQ0FOVkFTKSB8
fCBFTkFCTEUoQUNDRUxFUkFURURfMkRfQ0FOVkFTKQogICAgIGVsc2UgaWYgKGlzQWNjZWxlcmF0
ZWRDYW52YXMocmVuZGVyZXIoKSkpIHsKICAgICAgICAgSFRNTENhbnZhc0VsZW1lbnQqIGNhbnZh
cyA9IHN0YXRpY19jYXN0PEhUTUxDYW52YXNFbGVtZW50Kj4ocmVuZGVyZXIoKS0+bm9kZSgpKTsK
LSAgICAgICAgaWYgKENhbnZhc1JlbmRlcmluZ0NvbnRleHQqIGNvbnRleHQgPSBjYW52YXMtPnJl
bmRlcmluZ0NvbnRleHQoKSkKLSAgICAgICAgICAgIGlmIChjb250ZXh0LT5ncmFwaGljc0NvbnRl
eHQzRCgpKQotICAgICAgICAgICAgICAgIGlmIChQbGF0Zm9ybUxheWVyKiBwbCA9IGNvbnRleHQt
PmdyYXBoaWNzQ29udGV4dDNEKCktPnBsYXRmb3JtTGF5ZXIoKSkKLSAgICAgICAgICAgICAgICAg
ICAgbV9ncmFwaGljc0xheWVyLT5zZXRDb250ZW50c1RvQ2FudmFzKHBsKTsKKyAgICAgICAgaWYg
KENhbnZhc1JlbmRlcmluZ0NvbnRleHQqIGNvbnRleHQgPSBjYW52YXMtPnJlbmRlcmluZ0NvbnRl
eHQoKSkgeworI2lmIEVOQUJMRShBQ0NFTEVSQVRFRF8yRF9DQU5WQVMpCisgICAgICAgICAgICBp
ZiAoY29udGV4dC0+aXMyZCgpKQorICAgICAgICAgICAgICAgIG1fZ3JhcGhpY3NMYXllci0+c2V0
Q29udGVudHNUb0NhbnZhczJEKHN0YXRpY19jYXN0PENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRCo+
KGNvbnRleHQpLT5mcmFtZWJ1ZmZlcigpKTsKKyNlbmRpZgorI2lmIEVOQUJMRSgzRF9DQU5WQVMp
CisgICAgICAgICAgICBpZiAoY29udGV4dC0+aXMzZCgpKQorICAgICAgICAgICAgICAgIG1fZ3Jh
cGhpY3NMYXllci0+c2V0Q29udGVudHNUb1dlYkdMKHN0YXRpY19jYXN0PFdlYkdMUmVuZGVyaW5n
Q29udGV4dCo+KGNvbnRleHQpLT5ncmFwaGljc0NvbnRleHQzRCgpLT5wbGF0Zm9ybUxheWVyKCkp
OworI2VuZGlmCisgICAgICAgIH0KKyAgICAgICAgbGF5ZXJDb25maWdDaGFuZ2VkID0gdHJ1ZTsK
ICAgICB9CiAjZW5kaWYKIApkaWZmIC0tZ2l0IGEvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZyBi
L1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKaW5kZXggMDFhMmJiZjdiNWE4MDg4N2E4OGZlOTFj
YjkyODhkMjJjOGU1Nzg0MS4uMjU4MjRkNGU1MzhhODIzMDQxOTNiZjIyNjc5ZTUxYTk1YTAzN2Y0
NCAxMDA2NDQKLS0tIGEvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZworKysgYi9XZWJLaXQvY2hy
b21pdW0vQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjggQEAKKzIwMTAtMDgtMzAgIEphbWVzIFJvYmlu
c29uICA8amFtZXNyQGNocm9taXVtLm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkg
KE9PUFMhKS4KKworICAgICAgICBNdWx0aXBsZSBhY2NlbGVyYXRlZCAyRCBjYW52YXNlcyBzaG91
bGQgYmUgYWJsZSB0byB1c2UgdGhlIHNhbWUgR3JhcGhpY3NDb250ZXh0M0QKKyAgICAgICAgaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTQ0OTI2CisKKyAgICAgICAgQWRk
cyBhIFNoYXJlZENvbnRleHQzRCB0byBXZWJWaWV3SW1wbCBhbmQgaW1wbGVtZW50cyBhIGZldyBu
ZXcgZnVuY3Rpb25zIG9uIEdyYXBoaWNzQ29udGV4dDNELgorICAgICAgICBUaGUgU2hhcmVkQ29u
dGV4dDNEIGhhcyB0byBsaXZlIG9uIFdlYlZpZXdJbXBsIHRvIGJlIHRpZWQgdG8gdGhlIGxpZmV0
aW1lIG9mIHRoZSBjb21wb3NpdG9yIGNvbnRleHQuCisKKyAgICAgICAgKiBwdWJsaWMvV2ViR3Jh
cGhpY3NDb250ZXh0M0QuaDoKKyAgICAgICAgKFdlYktpdDo6V2ViR3JhcGhpY3NDb250ZXh0M0Q6
OmNyZWF0ZUNvbXBvc2l0b3JUZXh0dXJlKToKKyAgICAgICAgKFdlYktpdDo6V2ViR3JhcGhpY3ND
b250ZXh0M0Q6OmRlbGV0ZUNvbXBvc2l0b3JUZXh0dXJlKToKKyAgICAgICAgKFdlYktpdDo6V2Vi
R3JhcGhpY3NDb250ZXh0M0Q6OmNvcHlUZXh0dXJlVG9Db21wb3NpdG9yKToKKyAgICAgICAgKiBz
cmMvQ2hyb21lQ2xpZW50SW1wbC5jcHA6CisgICAgICAgIChXZWJLaXQ6OkNocm9tZUNsaWVudElt
cGw6OmdldFNoYXJlZENvbnRleHQzRCk6CisgICAgICAgICogc3JjL0Nocm9tZUNsaWVudEltcGwu
aDoKKyAgICAgICAgKiBzcmMvR3JhcGhpY3NDb250ZXh0M0QuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6R3JhcGhpY3NDb250ZXh0M0RJbnRlcm5hbDo6aW5pdGlhbGl6ZSk6CisgICAgICAgIChXZWJD
b3JlOjpHcmFwaGljc0NvbnRleHQzREludGVybmFsOjpwbGF0Zm9ybUxheWVyKToKKyAgICAgICAg
KFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpwbGF0Zm9ybUxheWVyKToKKyAgICAgICAgKiBz
cmMvV2ViVmlld0ltcGwuY3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJWaWV3SW1wbDo6Z2V0U2hh
cmVkQ29udGV4dDNEKToKKyAgICAgICAgKiBzcmMvV2ViVmlld0ltcGwuaDoKKwogMjAxMC0wOC0z
MCAgS2ludWtvIFlhc3VkYSAgPGtpbnVrb0BjaHJvbWl1bS5vc3JjPgogCiAgICAgICAgIFJldmll
d2VkIGJ5IERhcmluIEZpc2hlci4KZGlmZiAtLWdpdCBhL1dlYktpdC9jaHJvbWl1bS9wdWJsaWMv
V2ViR3JhcGhpY3NDb250ZXh0M0QuaCBiL1dlYktpdC9jaHJvbWl1bS9wdWJsaWMvV2ViR3JhcGhp
Y3NDb250ZXh0M0QuaAppbmRleCA0NGEwNDk4OWFhMjVlYjhhNTU5ZjBlZGU0NTg1OWI5ZTRmZGVj
ZGI3Li4xN2M2OTZjYTczZDVkMTU5YTRlM2JhMzFhOGUyMTljMDA0ZThiY2EzIDEwMDY0NAotLS0g
YS9XZWJLaXQvY2hyb21pdW0vcHVibGljL1dlYkdyYXBoaWNzQ29udGV4dDNELmgKKysrIGIvV2Vi
S2l0L2Nocm9taXVtL3B1YmxpYy9XZWJHcmFwaGljc0NvbnRleHQzRC5oCkBAIC0zMTgsNiArMzE4
LDEwIEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIHZvaWQgZGVsZXRlUmVuZGVyYnVmZmVyKHVuc2ln
bmVkKSA9IDA7CiAgICAgdmlydHVhbCB2b2lkIGRlbGV0ZVNoYWRlcih1bnNpZ25lZCkgPSAwOwog
ICAgIHZpcnR1YWwgdm9pZCBkZWxldGVUZXh0dXJlKHVuc2lnbmVkKSA9IDA7CisKKyAgICB2aXJ0
dWFsIHVuc2lnbmVkIGNyZWF0ZUNvbXBvc2l0b3JUZXh0dXJlKHVuc2lnbmVkIHdpZHRoLCB1bnNp
Z25lZCBoZWlnaHQpIHsgcmV0dXJuIDA7IH0KKyAgICB2aXJ0dWFsIHZvaWQgZGVsZXRlQ29tcG9z
aXRvclRleHR1cmUodW5zaWduZWQgY29tcG9zaXRvclRleHR1cmUpIHt9CisgICAgdmlydHVhbCB2
b2lkIGNvcHlUZXh0dXJlVG9Db21wb3NpdG9yKHVuc2lnbmVkIHRleHR1cmUsIHVuc2lnbmVkIGNv
bXBvc2l0b3JUZXh0dXJlKSB7fQogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViS2l0CmRpZmYgLS1n
aXQgYS9XZWJLaXQvY2hyb21pdW0vc3JjL0Nocm9tZUNsaWVudEltcGwuY3BwIGIvV2ViS2l0L2No
cm9taXVtL3NyYy9DaHJvbWVDbGllbnRJbXBsLmNwcAppbmRleCBlNmYxNDAwNzE4MGQ4ZDNiZjYx
MjhiMTMwZGMyOGFiYWFlYzFmOTBhLi40MjQyNDQ1M2MzNDY5MTM1OGI4MzcxZDJkN2YwZDNhNDlj
MjgzNGJiIDEwMDY0NAotLS0gYS9XZWJLaXQvY2hyb21pdW0vc3JjL0Nocm9tZUNsaWVudEltcGwu
Y3BwCisrKyBiL1dlYktpdC9jaHJvbWl1bS9zcmMvQ2hyb21lQ2xpZW50SW1wbC5jcHAKQEAgLTU5
LDYgKzU5LDcgQEAKICNpbmNsdWRlICJTZWFyY2hQb3B1cE1lbnVDaHJvbWl1bS5oIgogI2luY2x1
ZGUgIlNjcmlwdENvbnRyb2xsZXIuaCIKICNpbmNsdWRlICJTZWN1cml0eU9yaWdpbi5oIgorI2lu
Y2x1ZGUgIlNoYXJlZENvbnRleHQzRC5oIgogI2luY2x1ZGUgIldlYkdlb2xvY2F0aW9uU2Vydmlj
ZS5oIgogI2lmIFVTRShWOCkKICNpbmNsdWRlICJWOFByb3h5LmgiCkBAIC03NTEsNiArNzUyLDEx
IEBAIHZvaWQgQ2hyb21lQ2xpZW50SW1wbDo6c2NoZWR1bGVDb21wb3NpdGluZ0xheWVyU3luYygp
CiB9CiAjZW5kaWYKIAorUGFzc1JlZlB0cjxXZWJDb3JlOjpTaGFyZWRDb250ZXh0M0Q+IENocm9t
ZUNsaWVudEltcGw6OmdldFNoYXJlZENvbnRleHQzRCgpCit7CisgICAgcmV0dXJuIG1fd2ViVmll
dy0+Z2V0U2hhcmVkQ29udGV4dDNEKCk7Cit9CisKIGJvb2wgQ2hyb21lQ2xpZW50SW1wbDo6c3Vw
cG9ydHNGdWxsc2NyZWVuRm9yTm9kZShjb25zdCBXZWJDb3JlOjpOb2RlKiBub2RlKQogewogICAg
IGlmIChtX3dlYlZpZXctPmNsaWVudCgpICYmIG5vZGUtPmhhc1RhZ05hbWUoV2ViQ29yZTo6SFRN
TE5hbWVzOjp2aWRlb1RhZykpCmRpZmYgLS1naXQgYS9XZWJLaXQvY2hyb21pdW0vc3JjL0Nocm9t
ZUNsaWVudEltcGwuaCBiL1dlYktpdC9jaHJvbWl1bS9zcmMvQ2hyb21lQ2xpZW50SW1wbC5oCmlu
ZGV4IGJmZjlmOTA0N2ZhN2M3ZjNhYmQ3MDRkOTQ3ODVkOWMxZmFjZjc3NDAuLjUzZGI5NGY3OWFm
NjA1ZmMwYzljMDlhMjFmYjMyOTM3NWRjNWY5N2UgMTAwNjQ0Ci0tLSBhL1dlYktpdC9jaHJvbWl1
bS9zcmMvQ2hyb21lQ2xpZW50SW1wbC5oCisrKyBiL1dlYktpdC9jaHJvbWl1bS9zcmMvQ2hyb21l
Q2xpZW50SW1wbC5oCkBAIC0xNTIsNiArMTUyLDggQEAgcHVibGljOgogICAgIHZpcnR1YWwgdm9p
ZCBzY2hlZHVsZUNvbXBvc2l0aW5nTGF5ZXJTeW5jKCk7CiAjZW5kaWYKIAorICAgIHZpcnR1YWwg
UGFzc1JlZlB0cjxXZWJDb3JlOjpTaGFyZWRDb250ZXh0M0Q+IGdldFNoYXJlZENvbnRleHQzRCgp
OworCiAgICAgdmlydHVhbCBib29sIHN1cHBvcnRzRnVsbHNjcmVlbkZvck5vZGUoY29uc3QgV2Vi
Q29yZTo6Tm9kZSopOwogICAgIHZpcnR1YWwgdm9pZCBlbnRlckZ1bGxzY3JlZW5Gb3JOb2RlKFdl
YkNvcmU6Ok5vZGUqKTsKICAgICB2aXJ0dWFsIHZvaWQgZXhpdEZ1bGxzY3JlZW5Gb3JOb2RlKFdl
YkNvcmU6Ok5vZGUqKTsKZGlmZiAtLWdpdCBhL1dlYktpdC9jaHJvbWl1bS9zcmMvR3JhcGhpY3ND
b250ZXh0M0QuY3BwIGIvV2ViS2l0L2Nocm9taXVtL3NyYy9HcmFwaGljc0NvbnRleHQzRC5jcHAK
aW5kZXggNmJjNWZmZTQzMWU4NGU0ZTdiZTIwZTk0MDQxNGVkZWFmODMzYTljNy4uYzc4NGY1ODQ1
MDdjZmM0YmU5YmY0ZDg2OGExYWViOWE4ZmUyMTIyZiAxMDA2NDQKLS0tIGEvV2ViS2l0L2Nocm9t
aXVtL3NyYy9HcmFwaGljc0NvbnRleHQzRC5jcHAKKysrIGIvV2ViS2l0L2Nocm9taXVtL3NyYy9H
cmFwaGljc0NvbnRleHQzRC5jcHAKQEAgLTM1LDcgKzM1LDcgQEAKICNpbmNsdWRlICJHcmFwaGlj
c0NvbnRleHQzRC5oIgogCiAjaW5jbHVkZSAiQ2FjaGVkSW1hZ2UuaCIKLSNpbmNsdWRlICJDYW52
YXNMYXllckNocm9taXVtLmgiCisjaW5jbHVkZSAiV2ViR0xMYXllckNocm9taXVtLmgiCiAjaW5j
bHVkZSAiQ2FudmFzUmVuZGVyaW5nQ29udGV4dC5oIgogI2luY2x1ZGUgIkNocm9tZS5oIgogI2lu
Y2x1ZGUgIkNocm9tZUNsaWVudEltcGwuaCIKQEAgLTEwMyw3ICsxMDMsNyBAQCBwdWJsaWM6CiAg
ICAgdm9pZCBwcmVwYXJlVGV4dHVyZSgpOwogCiAjaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lU
SU5HKQotICAgIENhbnZhc0xheWVyQ2hyb21pdW0qIHBsYXRmb3JtTGF5ZXIoKSBjb25zdDsKKyAg
ICBXZWJHTExheWVyQ2hyb21pdW0qIHBsYXRmb3JtTGF5ZXIoKSBjb25zdDsKICNlbmRpZgogICAg
IGJvb2wgaXNHTEVTMkNvbXBsaWFudCgpIGNvbnN0OwogICAgIGJvb2wgaXNHTEVTMk5QT1RTdHJp
Y3QoKSBjb25zdDsKQEAgLTI5NCwxMSArMjk0LDE0IEBAIHB1YmxpYzoKICAgICB2b2lkIHN5bnRo
ZXNpemVHTEVycm9yKHVuc2lnbmVkIGxvbmcgZXJyb3IpOwogICAgIGJvb2wgc3VwcG9ydHNCR1JB
KCk7CiAKKyAgICB1bnNpZ25lZCBjcmVhdGVDb21wb3NpdG9yVGV4dHVyZSh1bnNpZ25lZCB3aWR0
aCwgdW5zaWduZWQgaGVpZ2h0KTsKKyAgICB2b2lkIGRlbGV0ZUNvbXBvc2l0b3JUZXh0dXJlKHVu
c2lnbmVkIGNvbXBvc2l0b3JUZXh0dXJlKTsKKyAgICB2b2lkIGNvcHlUZXh0dXJlVG9Db21wb3Np
dG9yKHVuc2lnbmVkIHRleHR1cmUsIHVuc2lnbmVkIGNvbXBvc2l0b3JUZXh0dXJlKTsKIHByaXZh
dGU6CiAgICAgT3duUHRyPFdlYktpdDo6V2ViR3JhcGhpY3NDb250ZXh0M0Q+IG1faW1wbDsKICAg
ICBXZWJLaXQ6OldlYlZpZXdJbXBsKiBtX3dlYlZpZXdJbXBsOwogI2lmIFVTRShBQ0NFTEVSQVRF
RF9DT01QT1NJVElORykKLSAgICBSZWZQdHI8Q2FudmFzTGF5ZXJDaHJvbWl1bT4gbV9jb21wb3Np
dGluZ0xheWVyOworICAgIFJlZlB0cjxXZWJHTExheWVyQ2hyb21pdW0+IG1fY29tcG9zaXRpbmdM
YXllcjsKICNlbmRpZgogI2lmIFBMQVRGT1JNKFNLSUEpCiAgICAgLy8gSWYgdGhlIHdpZHRoIGFu
ZCBoZWlnaHQgb2YgdGhlIENhbnZhcydzIGJhY2tpbmcgc3RvcmUgZG9uJ3QKQEAgLTM2MCw3ICsz
NjMsNyBAQCBib29sIEdyYXBoaWNzQ29udGV4dDNESW50ZXJuYWw6OmluaXRpYWxpemUoR3JhcGhp
Y3NDb250ZXh0M0Q6OkF0dHJpYnV0ZXMgYXR0cnMsCiAgICAgbV9pbXBsLnNldCh3ZWJDb250ZXh0
KTsKIAogI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKLSAgICBtX2NvbXBvc2l0aW5n
TGF5ZXIgPSBDYW52YXNMYXllckNocm9taXVtOjpjcmVhdGUoMCk7CisgICAgbV9jb21wb3NpdGlu
Z0xheWVyID0gV2ViR0xMYXllckNocm9taXVtOjpjcmVhdGUoMCk7CiAjZW5kaWYKICAgICByZXR1
cm4gdHJ1ZTsKIH0KQEAgLTM4MSw3ICszODQsNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDNESW50
ZXJuYWw6OnByZXBhcmVUZXh0dXJlKCkKIH0KIAogI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJ
VElORykKLUNhbnZhc0xheWVyQ2hyb21pdW0qIEdyYXBoaWNzQ29udGV4dDNESW50ZXJuYWw6OnBs
YXRmb3JtTGF5ZXIoKSBjb25zdAorV2ViR0xMYXllckNocm9taXVtKiBHcmFwaGljc0NvbnRleHQz
REludGVybmFsOjpwbGF0Zm9ybUxheWVyKCkgY29uc3QKIHsKICAgICByZXR1cm4gbV9jb21wb3Np
dGluZ0xheWVyLmdldCgpOwogfQpAQCAtODk4LDYgKzkwMSwxMCBAQCBERUxFR0FURV9UT19JTVBM
XzEoZGVsZXRlVGV4dHVyZSwgdW5zaWduZWQpCiBERUxFR0FURV9UT19JTVBMXzEoc3ludGhlc2l6
ZUdMRXJyb3IsIHVuc2lnbmVkIGxvbmcpCiBERUxFR0FURV9UT19JTVBMX1Ioc3VwcG9ydHNCR1JB
LCBib29sKQogCitERUxFR0FURV9UT19JTVBMXzJSKGNyZWF0ZUNvbXBvc2l0b3JUZXh0dXJlLCB1
bnNpZ25lZCwgdW5zaWduZWQsIHVuc2lnbmVkKQorREVMRUdBVEVfVE9fSU1QTF8xKGRlbGV0ZUNv
bXBvc2l0b3JUZXh0dXJlLCB1bnNpZ25lZCkKK0RFTEVHQVRFX1RPX0lNUExfMihjb3B5VGV4dHVy
ZVRvQ29tcG9zaXRvciwgdW5zaWduZWQsIHVuc2lnbmVkKQorCiAvLy0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIC8v
IEdyYXBoaWNzQ29udGV4dDNECiAvLwpAQCAtMTAzOSw3ICsxMDQ2LDcgQEAgdm9pZCBHcmFwaGlj
c0NvbnRleHQzRDo6cHJlcGFyZVRleHR1cmUoKQogI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJ
VElORykKIFBsYXRmb3JtTGF5ZXIqIEdyYXBoaWNzQ29udGV4dDNEOjpwbGF0Zm9ybUxheWVyKCkg
Y29uc3QKIHsKLSAgICBDYW52YXNMYXllckNocm9taXVtKiBjYW52YXNMYXllciA9IG1faW50ZXJu
YWwtPnBsYXRmb3JtTGF5ZXIoKTsKKyAgICBXZWJHTExheWVyQ2hyb21pdW0qIGNhbnZhc0xheWVy
ID0gbV9pbnRlcm5hbC0+cGxhdGZvcm1MYXllcigpOwogICAgIGNhbnZhc0xheWVyLT5zZXRDb250
ZXh0KHRoaXMpOwogICAgIHJldHVybiBjYW52YXNMYXllcjsKIH0KQEAgLTEyMzQsNiArMTI0MSwx
MCBAQCBERUxFR0FURV9UT19JTlRFUk5BTF8xKGRlbGV0ZVRleHR1cmUsIHVuc2lnbmVkKQogREVM
RUdBVEVfVE9fSU5URVJOQUxfMShzeW50aGVzaXplR0xFcnJvciwgdW5zaWduZWQgbG9uZykKIERF
TEVHQVRFX1RPX0lOVEVSTkFMX1Ioc3VwcG9ydHNCR1JBLCBib29sKQogCitERUxFR0FURV9UT19J
TlRFUk5BTF8yUihjcmVhdGVDb21wb3NpdG9yVGV4dHVyZSwgdW5zaWduZWQsIHVuc2lnbmVkLCB1
bnNpZ25lZCkKK0RFTEVHQVRFX1RPX0lOVEVSTkFMXzEoZGVsZXRlQ29tcG9zaXRvclRleHR1cmUs
IHVuc2lnbmVkKQorREVMRUdBVEVfVE9fSU5URVJOQUxfMihjb3B5VGV4dHVyZVRvQ29tcG9zaXRv
ciwgdW5zaWduZWQsIHVuc2lnbmVkKQorCiBib29sIEdyYXBoaWNzQ29udGV4dDNEOjppc0dMRVMy
Q29tcGxpYW50KCkgY29uc3QKIHsKICAgICByZXR1cm4gbV9pbnRlcm5hbC0+aXNHTEVTMkNvbXBs
aWFudCgpOwpkaWZmIC0tZ2l0IGEvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJWaWV3SW1wbC5jcHAg
Yi9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYlZpZXdJbXBsLmNwcAppbmRleCA1MDY1ZjVlYjliNjQw
ODNmYzNiMWUxNzRmNDI4MTVjNTczN2I0ODM5Li5kMjMzMWEzZjNlNWFiNjJlM2E3ZDU1NGNkN2Rk
ODQ4YzIwOTBjZTZkIDEwMDY0NAotLS0gYS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYlZpZXdJbXBs
LmNwcAorKysgYi9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYlZpZXdJbXBsLmNwcApAQCAtNTgsNiAr
NTgsNyBAQAogI2luY2x1ZGUgIkdMRVMyQ29udGV4dC5oIgogI2luY2x1ZGUgIkdMRVMyQ29udGV4
dEludGVybmFsLmgiCiAjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCisjaW5jbHVkZSAiR3Jh
cGhpY3NDb250ZXh0M0QuaCIKICNpbmNsdWRlICJIVE1MSW5wdXRFbGVtZW50LmgiCiAjaW5jbHVk
ZSAiSFRNTE1lZGlhRWxlbWVudC5oIgogI2luY2x1ZGUgIkhpdFRlc3RSZXN1bHQuaCIKQEAgLTg2
LDYgKzg3LDcgQEAKICNpbmNsdWRlICJTZWN1cml0eU9yaWdpbi5oIgogI2luY2x1ZGUgIlNlbGVj
dGlvbkNvbnRyb2xsZXIuaCIKICNpbmNsdWRlICJTZXR0aW5ncy5oIgorI2luY2x1ZGUgIlNoYXJl
ZENvbnRleHQzRC5oIgogI2luY2x1ZGUgIlRpbWVyLmgiCiAjaW5jbHVkZSAiVHlwaW5nQ29tbWFu
ZC5oIgogI2luY2x1ZGUgIlVzZXJHZXN0dXJlSW5kaWNhdG9yLmgiCkBAIC0yMjExLDE0ICsyMjEz
LDE2IEBAIFBhc3NPd25QdHI8R0xFUzJDb250ZXh0PiBXZWJWaWV3SW1wbDo6Z2V0T25zY3JlZW5H
TEVTMkNvbnRleHQoKQogICAgIHJldHVybiBHTEVTMkNvbnRleHQ6OmNyZWF0ZShHTEVTMkNvbnRl
eHRJbnRlcm5hbDo6Y3JlYXRlKGdsZXMyQ29udGV4dCgpLCBmYWxzZSkpOwogfQogCi1QYXNzT3du
UHRyPEdMRVMyQ29udGV4dD4gV2ViVmlld0ltcGw6OmdldE9mZnNjcmVlbkdMRVMyQ29udGV4dCgp
CitQYXNzUmVmUHRyPFNoYXJlZENvbnRleHQzRD4gV2ViVmlld0ltcGw6OmdldFNoYXJlZENvbnRl
eHQzRCgpCiB7Ci0gICAgV2ViR0xFUzJDb250ZXh0KiBjb250ZXh0ID0gd2ViS2l0Q2xpZW50KCkt
PmNyZWF0ZUdMRVMyQ29udGV4dCgpOwotICAgIGlmICghY29udGV4dCkKLSAgICAgICAgcmV0dXJu
IDA7Ci0gICAgaWYgKCFjb250ZXh0LT5pbml0aWFsaXplKDAsIGdsZXMyQ29udGV4dCgpKSkKLSAg
ICAgICAgcmV0dXJuIDA7Ci0gICAgcmV0dXJuIEdMRVMyQ29udGV4dDo6Y3JlYXRlKEdMRVMyQ29u
dGV4dEludGVybmFsOjpjcmVhdGUoY29udGV4dCwgdHJ1ZSkpOworICAgIGlmICghbV9zaGFyZWRD
b250ZXh0M0QpIHsKKyAgICAgICAgR3JhcGhpY3NDb250ZXh0M0Q6OkF0dHJpYnV0ZXMgYXR0cjsK
KyAgICAgICAgYXR0ci5zdGVuY2lsID0gdHJ1ZTsKKyAgICAgICAgT3duUHRyPEdyYXBoaWNzQ29u
dGV4dDNEPiBjb250ZXh0ID0gR3JhcGhpY3NDb250ZXh0M0Q6OmNyZWF0ZShhdHRyLCBtX3BhZ2Ut
PmNocm9tZSgpKTsKKyAgICAgICAgbV9zaGFyZWRDb250ZXh0M0QgPSBTaGFyZWRDb250ZXh0M0Q6
OmNyZWF0ZShjb250ZXh0LnJlbGVhc2UoKSk7CisgICAgfQorCisgICAgcmV0dXJuIG1fc2hhcmVk
Q29udGV4dDNEOwogfQogCiAvLyBSZXR1cm5zIHRoZSBHTEVTMiBjb250ZXh0IGFzc29jaWF0ZWQg
d2l0aCB0aGlzIFZpZXcuIElmIG9uZSBkb2Vzbid0IGV4aXN0CmRpZmYgLS1naXQgYS9XZWJLaXQv
Y2hyb21pdW0vc3JjL1dlYlZpZXdJbXBsLmggYi9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYlZpZXdJ
bXBsLmgKaW5kZXggYzI5NjEyMTIzZjQ1MTRjOTRkZDdkOTcwYzczMTE0YTRiZWVlYzM1NS4uNGFk
NzRmYjEyZGEzZmY1NWY4YzgyZWQyMmEwZTNhODlmZjFiYTJmZCAxMDA2NDQKLS0tIGEvV2ViS2l0
L2Nocm9taXVtL3NyYy9XZWJWaWV3SW1wbC5oCisrKyBiL1dlYktpdC9jaHJvbWl1bS9zcmMvV2Vi
Vmlld0ltcGwuaApAQCAtMzI5LDEwICszMjksMTAgQEAgcHVibGljOgogICAgIC8vIE9mZnNjcmVl
biBjb250ZXh0cyByZW5kZXIgb2Zmc2NyZWVuIGJ1dCBjYW4gc2hhcmUgcmVzb3VyY2VzIHdpdGgg
dGhlCiAgICAgLy8gb25zY3JlZW4gY29udGV4dCBhbmQgdGh1cyBjYW4gYmUgY29tcG9zaXRlZC4K
ICAgICBQYXNzT3duUHRyPFdlYkNvcmU6OkdMRVMyQ29udGV4dD4gZ2V0T25zY3JlZW5HTEVTMkNv
bnRleHQoKTsKLSAgICBQYXNzT3duUHRyPFdlYkNvcmU6OkdMRVMyQ29udGV4dD4gZ2V0T2Zmc2Ny
ZWVuR0xFUzJDb250ZXh0KCk7CiAKICAgICAvLyBSZXR1cm5zIGFuIG9uc2NyZWVuIGNvbnRleHQK
ICAgICB2aXJ0dWFsIFdlYkdMRVMyQ29udGV4dCogZ2xlczJDb250ZXh0KCk7CisgICAgdmlydHVh
bCBQYXNzUmVmUHRyPFdlYkNvcmU6OlNoYXJlZENvbnRleHQzRD4gZ2V0U2hhcmVkQ29udGV4dDNE
KCk7CiAKICAgICBXZWJDb3JlOjpQb3B1cENvbnRhaW5lciogc2VsZWN0UG9wdXAoKSBjb25zdCB7
IHJldHVybiBtX3NlbGVjdFBvcHVwLmdldCgpOyB9CiAKQEAgLTUyMSw2ICs1MjEsOCBAQCBwcml2
YXRlOgogCiAgICAgT3duUHRyPFdlYkdMRVMyQ29udGV4dD4gbV9nbGVzMkNvbnRleHQ7CiAKKyAg
ICBSZWZQdHI8V2ViQ29yZTo6U2hhcmVkQ29udGV4dDNEPiBtX3NoYXJlZENvbnRleHQzRDsKKwog
ICAgIE93blB0cjxEZXZpY2VPcmllbnRhdGlvbkNsaWVudFByb3h5PiBtX2RldmljZU9yaWVudGF0
aW9uQ2xpZW50UHJveHk7CiB9OwogCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>66296</attachid>
            <date>2010-09-01 16:03:29 -0700</date>
            <delta_ts>2010-09-02 13:32:02 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-44926-20100901160328.patch</filename>
            <type>text/plain</type>
            <size>105393</size>
            <attacher name="James Robinson">jamesr</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ2hhbmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXgg
ZGRjZDUyZTk2NzZiYTY2YmIwM2M0MTBhZmZmNTllMjI2MWY3ZDgzMC4uNzNhMmM2MDMxYWJiZTJi
MzM4MzExNDJkNTVlZTk0MGQwMDc4ZGI4MiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9DaGFuZ2VMb2cK
KysrIGIvV2ViQ29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxNjQgQEAKKzIwMTAtMDktMDEgIEph
bWVzIFJvYmluc29uICA8amFtZXNyQGNocm9taXVtLm9yZz4KKworICAgICAgICBSZXZpZXdlZCBi
eSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBNdWx0aXBsZSBhY2NlbGVyYXRlZCAyRCBjYW52
YXNlcyBzaG91bGQgYmUgYWJsZSB0byB1c2UgdGhlIHNhbWUgR3JhcGhpY3NDb250ZXh0M0QKKyAg
ICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTQ0OTI2CisKKyAg
ICAgICAgVGhpcyBhbGxvd3MgbWFueSBhY2NlbGVyYXRlZCAyZCBjYW52YXNlcyB0byByZW5kZXIg
dXNpbmcgYSBzaW5nbGUgdW5kZXJseWluZyBHcmFwaGljc0NvbnRleHQzRC4KKyAgICAgICAgSXQg
aW50cm9kdWNlcyBhIG5ldyBjbGFzcyBTaGFyZWRDb250ZXh0M0QgdGhhdCBtYW5hZ2VzIHNldmVy
YWwgY2FsbGVycy4gIFRoaXMgY2xhc3MgY291bGQKKyAgICAgICAgYWxzbyBjYWNoZSB0aGUgY3Vy
cmVudCBzdGF0ZSB0byBhdm9pZCBpc3N1aW5nIHJlZHVuZGFudCBjYWxscywgYWx0aG91Z2ggaW4g
dGhpcyBmaXJzdCBjdXQgaXQgZG9lc24ndC4KKyAgICAgICAgVGhlIFNoYXJlZENvbnRleHQzRCBp
cyBwcm92aWRlZCB0aHJvdWdoIHRoZSBDaHJvbWVDbGllbnQgc28gdGhhdCBpdHMgbGlmZXRpbWUg
Y2FuIGJlIHRpZWQgdG8gdGhhdAorICAgICAgICBvZiB0aGUgcGxhdGZvcm0tc3BlY2lmaWMgY29t
cG9zaXRvciBpbmZyYXN0cnVjdHVyZS4KKworICAgICAgICBBY2NlbGVyYXRlZCAyZCBjYW52YXNl
cyBtYWludGFpbiBhIHJlZmVyZW5jZSB0byBhIFNoYXJlZENvbnRleHQzRCBhbmQgaGF2ZSBvd25l
cnNoaXAgb2YgYSBDYW52YXNGcmFtZWJ1ZmZlciwKKyAgICAgICAgd2hpY2ggcmVwcmVzZW50cyB0
aGUgY2FudmFzJ3MgcmVuZGVyaW5nIHRhcmdldC4gIFRoZSBjb21wb3NpdGluZyBsYXllciBmb3Ig
YW4gYWNjZWxlcmF0ZWQgMmQgY2FudmFzIGlzCisgICAgICAgIGF3YXJlIG9ubHkgb2YgdGhlIGNh
bnZhcydzIENhbnZhc0ZyYW1lYnVmZmVyLiAgVGhpcyBtZWFucyB0aGF0IFdlYkdMIGFuZCAyZCBj
YW52YXNlcyBhcmUgbm8gbG9uZ2VyIHRyZWF0ZWQKKyAgICAgICAgYXMgdGhlIHNhbWUgdGltZSBv
ZiBsYXllciBieSB0aGUgY29tcG9zaXRvci4KKworICAgICAgICBDb3ZlcmVkIGJ5IGV4aXN0aW5n
IGNhbnZhcyB0ZXN0cy4KKworICAgICAgICBJJ3ZlIGRpdmlkZWQgdGhlIHBlciBmaWxlL2Z1bmN0
aW9uIGNoYW5nZXMgaW50byB0aHJlZSBzZWN0aW9uczoKKyAgICAgICAgLSBQbGF0Zm9ybS1pbmRl
cGVuZGVudCBhcHBsaWNhdGlvbiBsb2dpYyBvdXRzaWRlIFdlYkNvcmUvcGxhdGZvcm0KKyAgICAg
ICAgLSBQbGF0Zm9ybS1pbmRlcGVuZGVudCBpbmZyYXN0cnVjdHVyZSBpbiBXZWJDb3JlL3BsYXRm
b3JtCisgICAgICAgIC0gUGxhdGZvcm0tc3BlY2lmaWMgY2hhbmdlcworCisgICAgICAgIC0gUGxh
dGZvcm0taW5kZXBlbmRlbnQgbG9naWMgY2hhbmdlcyBvdXRzaWRlIFdlYkNvcmUvcGxhdGZvcm06
CisgICAgICAgICogV2ViQ29yZS5neXBpOgorICAgICAgICAqIGh0bWwvY2FudmFzL0NhbnZhc1Jl
bmRlcmluZ0NvbnRleHQuY3BwOgorICAgICAgICAqIGh0bWwvY2FudmFzL0NhbnZhc1JlbmRlcmlu
Z0NvbnRleHQuaDoKKyAgICAgICAgKFdlYkNvcmU6OkNhbnZhc1JlbmRlcmluZ0NvbnRleHQ6OnBh
aW50c0ludG9DYW52YXNCdWZmZXIpOgorICAgICAgICAqIGh0bWwvY2FudmFzL0NhbnZhc1JlbmRl
cmluZ0NvbnRleHQyRC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDYW52YXNSZW5kZXJpbmdDb250
ZXh0MkQ6OkNhbnZhc1JlbmRlcmluZ0NvbnRleHQyRCk6CisgICAgICAgIChXZWJDb3JlOjpDYW52
YXNSZW5kZXJpbmdDb250ZXh0MkQ6OnBhaW50c0ludG9DYW52YXNCdWZmZXIpOgorICAgICAgICAo
V2ViQ29yZTo6Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJEOjpyZXNldCk6CisgICAgICAgIChXZWJD
b3JlOjpDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ6OmRpZERyYXcpOgorICAgICAgICAqIGh0bWwv
Y2FudmFzL0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRC5oOgorICAgICAgICAoV2ViQ29yZTo6Q2Fu
dmFzUmVuZGVyaW5nQ29udGV4dDJEOjpkcmF3aW5nQnVmZmVyKToKKyAgICAgICAgKiBodG1sL2Nh
bnZhcy9XZWJHTFJlbmRlcmluZ0NvbnRleHQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xS
ZW5kZXJpbmdDb250ZXh0OjpwYWludHNJbnRvQ2FudmFzQnVmZmVyKToKKyAgICAgICAgKiBodG1s
L2NhbnZhcy9XZWJHTFJlbmRlcmluZ0NvbnRleHQuaDoKKyAgICAgICAgKFdlYkNvcmU6OldlYkdM
UmVuZGVyaW5nQ29udGV4dDo6Z3JhcGhpY3NDb250ZXh0M0QpOgorICAgICAgICAqIGxvYWRlci9F
bXB0eUNsaWVudHMuaDoKKyAgICAgICAgKFdlYkNvcmU6OkVtcHR5Q2hyb21lQ2xpZW50OjphdHRh
Y2hSb290R3JhcGhpY3NMYXllcik6CisgICAgICAgIChXZWJDb3JlOjpFbXB0eUNocm9tZUNsaWVu
dDo6c2V0TmVlZHNPbmVTaG90RHJhd2luZ1N5bmNocm9uaXphdGlvbik6CisgICAgICAgIChXZWJD
b3JlOjpFbXB0eUNocm9tZUNsaWVudDo6c2NoZWR1bGVDb21wb3NpdGluZ0xheWVyU3luYyk6Cisg
ICAgICAgICogcGFnZS9DaHJvbWVDbGllbnQuaDoKKyAgICAgICAgKFdlYkNvcmU6OkNocm9tZUNs
aWVudDo6Z2V0U2hhcmVkQ29udGV4dDNEKToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyTGF5
ZXJCYWNraW5nLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyQmFja2luZzo6dXBk
YXRlR3JhcGhpY3NMYXllckNvbmZpZ3VyYXRpb24pOgorICAgICAgICAtIFBsYXRmb3JtLWluZGVw
ZW5kZW50IGluZnJhc3RydWN0dXJlIGNoYW5nZXMgaW4gV2ViQ29yZS9wbGF0Zm9ybToKKyAgICAg
ICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQuY3BwOgorICAgICAgICAqIHBs
YXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dC5oOgorICAgICAgICAqIHBsYXRmb3JtL2dy
YXBoaWNzL0dyYXBoaWNzTGF5ZXIuaDoKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXI6
OnNldENvbnRlbnRzVG9XZWJHTCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0xheWVyOjpz
ZXRDb250ZW50c1RvQ2FudmFzMkQpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2dwdS9E
cmF3aW5nQnVmZmVyLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpEcmF3aW5nQnVmZmVy
OjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6RHJhd2luZ0J1ZmZlcjo6YmluZCk6CisgICAg
ICAgIChXZWJDb3JlOjpEcmF3aW5nQnVmZmVyOjpzZXRXaWxsUHVibGlzaENhbGxiYWNrKToKKyAg
ICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9ncHUvRHJhd2luZ0J1ZmZlci5oOiBBZGRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OkRyYXdpbmdCdWZmZXI6OnNpemUpOgorICAgICAgICAqIHBsYXRmb3Jt
L2dyYXBoaWNzL2dwdS9TaGFyZWRDb250ZXh0M0QuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNv
cmU6OlNoYXJlZENvbnRleHQzRDo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OlNoYXJlZENv
bnRleHQzRDo6U2hhcmVkQ29udGV4dDNEKToKKyAgICAgICAgKFdlYkNvcmU6OlNoYXJlZENvbnRl
eHQzRDo6flNoYXJlZENvbnRleHQzRCk6CisgICAgICAgIChXZWJDb3JlOjpTaGFyZWRDb250ZXh0
M0Q6Om1ha2VDb250ZXh0Q3VycmVudCk6CisgICAgICAgIChXZWJDb3JlOjpTaGFyZWRDb250ZXh0
M0Q6OnNjaXNzb3IpOgorICAgICAgICAoV2ViQ29yZTo6U2hhcmVkQ29udGV4dDNEOjplbmFibGUp
OgorICAgICAgICAoV2ViQ29yZTo6U2hhcmVkQ29udGV4dDNEOjpkaXNhYmxlKToKKyAgICAgICAg
KFdlYkNvcmU6OlNoYXJlZENvbnRleHQzRDo6Y2xlYXJDb2xvcik6CisgICAgICAgIChXZWJDb3Jl
OjpTaGFyZWRDb250ZXh0M0Q6OmNsZWFyKToKKyAgICAgICAgKFdlYkNvcmU6OlNoYXJlZENvbnRl
eHQzRDo6ZHJhd0FycmF5cyk6CisgICAgICAgIChXZWJDb3JlOjpTaGFyZWRDb250ZXh0M0Q6Omdl
dEVycm9yKToKKyAgICAgICAgKFdlYkNvcmU6OlNoYXJlZENvbnRleHQzRDo6Z2V0SW50ZWdlcnYp
OgorICAgICAgICAoV2ViQ29yZTo6U2hhcmVkQ29udGV4dDNEOjpjcmVhdGVGcmFtZWJ1ZmZlcik6
CisgICAgICAgIChXZWJDb3JlOjpTaGFyZWRDb250ZXh0M0Q6OmNyZWF0ZVRleHR1cmUpOgorICAg
ICAgICAoV2ViQ29yZTo6U2hhcmVkQ29udGV4dDNEOjpkZWxldGVGcmFtZWJ1ZmZlcik6CisgICAg
ICAgIChXZWJDb3JlOjpTaGFyZWRDb250ZXh0M0Q6OmRlbGV0ZVRleHR1cmUpOgorICAgICAgICAo
V2ViQ29yZTo6U2hhcmVkQ29udGV4dDNEOjpmcmFtZWJ1ZmZlclRleHR1cmUyRCk6CisgICAgICAg
IChXZWJDb3JlOjpTaGFyZWRDb250ZXh0M0Q6OnRleFBhcmFtZXRlcmkpOgorICAgICAgICAoV2Vi
Q29yZTo6U2hhcmVkQ29udGV4dDNEOjp0ZXhJbWFnZTJEKToKKyAgICAgICAgKFdlYkNvcmU6OlNo
YXJlZENvbnRleHQzRDo6dGV4U3ViSW1hZ2UyRCk6CisgICAgICAgIChXZWJDb3JlOjpTaGFyZWRD
b250ZXh0M0Q6OnJlYWRQaXhlbHMpOgorICAgICAgICAoV2ViQ29yZTo6U2hhcmVkQ29udGV4dDNE
OjpzdXBwb3J0c0JHUkEpOgorICAgICAgICAoV2ViQ29yZTo6U2hhcmVkQ29udGV4dDNEOjpnZXRU
ZXh0dXJlKToKKyAgICAgICAgKFdlYkNvcmU6OlNoYXJlZENvbnRleHQzRDo6YXBwbHlDb21wb3Np
dGVPcGVyYXRvcik6CisgICAgICAgIChXZWJDb3JlOjpTaGFyZWRDb250ZXh0M0Q6OnVzZVF1YWRW
ZXJ0aWNlcyk6CisgICAgICAgIChXZWJDb3JlOjpTaGFyZWRDb250ZXh0M0Q6OnNldEFjdGl2ZVRl
eHR1cmUpOgorICAgICAgICAoV2ViQ29yZTo6U2hhcmVkQ29udGV4dDNEOjpiaW5kVGV4dHVyZSk6
CisgICAgICAgIChXZWJDb3JlOjpTaGFyZWRDb250ZXh0M0Q6OnVzZUZpbGxTb2xpZFByb2dyYW0p
OgorICAgICAgICAoV2ViQ29yZTo6U2hhcmVkQ29udGV4dDNEOjp1c2VUZXh0dXJlUHJvZ3JhbSk6
CisgICAgICAgIChXZWJDb3JlOjpTaGFyZWRDb250ZXh0M0Q6OmJpbmRGcmFtZWJ1ZmZlcik6Cisg
ICAgICAgIChXZWJDb3JlOjpTaGFyZWRDb250ZXh0M0Q6OnNldFZpZXdwb3J0KToKKyAgICAgICAg
KFdlYkNvcmU6OlNoYXJlZENvbnRleHQzRDo6cGFpbnRzSW50b0NhbnZhc0J1ZmZlcik6CisgICAg
ICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZ3B1L1NoYXJlZENvbnRleHQzRC5oOiBBZGRlZC4KKyAg
ICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9ncHUvVGV4dHVyZS5jcHA6CisgICAgICAgIC0gUGxh
dGZvcm0tc3BlY2lmaWMgY2hhbmdlcyAoY2hyb21pdW0pOgorICAgICAgICAqIHBsYXRmb3JtL2dy
YXBoaWNzL2Nocm9taXVtL0NhbnZhczJETGF5ZXJDaHJvbWl1bS5jcHA6IEFkZGVkLgorICAgICAg
ICAoV2ViQ29yZTo6Q2FudmFzMkRMYXllckNocm9taXVtOjpjcmVhdGUpOgorICAgICAgICAoV2Vi
Q29yZTo6Q2FudmFzMkRMYXllckNocm9taXVtOjpDYW52YXMyRExheWVyQ2hyb21pdW0pOgorICAg
ICAgICAoV2ViQ29yZTo6Q2FudmFzMkRMYXllckNocm9taXVtOjp+Q2FudmFzMkRMYXllckNocm9t
aXVtKToKKyAgICAgICAgKFdlYkNvcmU6OkNhbnZhczJETGF5ZXJDaHJvbWl1bTo6dXBkYXRlQ29u
dGVudHMpOgorICAgICAgICAoV2ViQ29yZTo6Q2FudmFzMkRMYXllckNocm9taXVtOjpzZXREcmF3
aW5nQnVmZmVyKToKKyAgICAgICAgKFdlYkNvcmU6OkNhbnZhczJETGF5ZXJDaHJvbWl1bTo6dGV4
dHVyZUlkKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9DYW52YXMyRExh
eWVyQ2hyb21pdW0uaDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpDYW52YXMyRExheWVyQ2hy
b21pdW06OmRyYXdzQ29udGVudCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21p
dW0vQ2FudmFzTGF5ZXJDaHJvbWl1bS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDYW52YXNMYXll
ckNocm9taXVtOjpDYW52YXNMYXllckNocm9taXVtKToKKyAgICAgICAgKFdlYkNvcmU6OkNhbnZh
c0xheWVyQ2hyb21pdW06On5DYW52YXNMYXllckNocm9taXVtKToKKyAgICAgICAgKFdlYkNvcmU6
OkNhbnZhc0xheWVyQ2hyb21pdW06OmRyYXcpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNz
L2Nocm9taXVtL0NhbnZhc0xheWVyQ2hyb21pdW0uaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFw
aGljcy9jaHJvbWl1bS9EcmF3aW5nQnVmZmVyQ2hyb21pdW0uY3BwOiBBZGRlZC4KKyAgICAgICAg
KFdlYkNvcmU6OkRyYXdpbmdCdWZmZXI6OkRyYXdpbmdCdWZmZXIpOgorICAgICAgICAoV2ViQ29y
ZTo6RHJhd2luZ0J1ZmZlcjo6fkRyYXdpbmdCdWZmZXIpOgorICAgICAgICAoV2ViQ29yZTo6RHJh
d2luZ0J1ZmZlcjo6cHVibGlzaFRvUGxhdGZvcm1MYXllcik6CisgICAgICAgICogcGxhdGZvcm0v
Z3JhcGhpY3MvY2hyb21pdW0vR0xFUzJDYW52YXMuY3BwOgorICAgICAgICAoV2ViQ29yZTo6R0xF
UzJDYW52YXM6OkdMRVMyQ2FudmFzKToKKyAgICAgICAgKFdlYkNvcmU6OkdMRVMyQ2FudmFzOjp+
R0xFUzJDYW52YXMpOgorICAgICAgICAoV2ViQ29yZTo6R0xFUzJDYW52YXM6OmJpbmRGcmFtZWJ1
ZmZlcik6CisgICAgICAgIChXZWJDb3JlOjpHTEVTMkNhbnZhczo6Y2xlYXJSZWN0KToKKyAgICAg
ICAgKFdlYkNvcmU6OkdMRVMyQ2FudmFzOjpmaWxsUmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpH
TEVTMkNhbnZhczo6ZHJhd1RleHR1cmVkUmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpHTEVTMkNh
bnZhczo6ZHJhd1RleHR1cmVkUmVjdFRpbGUpOgorICAgICAgICAoV2ViQ29yZTo6R0xFUzJDYW52
YXM6OmRyYXdRdWFkKToKKyAgICAgICAgKFdlYkNvcmU6OkdMRVMyQ2FudmFzOjpjcmVhdGVUZXh0
dXJlKToKKyAgICAgICAgKFdlYkNvcmU6OkdMRVMyQ2FudmFzOjpnZXRUZXh0dXJlKToKKyAgICAg
ICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9HTEVTMkNhbnZhcy5oOgorICAgICAgICAo
V2ViQ29yZTo6R0xFUzJDYW52YXM6OmNvbnRleHQpOgorICAgICAgICAoV2ViQ29yZTo6R0xFUzJD
YW52YXM6OmRyYXdpbmdCdWZmZXIpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9t
aXVtL0dyYXBoaWNzTGF5ZXJDaHJvbWl1bS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGlj
c0xheWVyQ2hyb21pdW06OnNldENvbnRlbnRzVG9XZWJHTCk6CisgICAgICAgIChXZWJDb3JlOjpH
cmFwaGljc0xheWVyQ2hyb21pdW06OnNldENvbnRlbnRzVG9DYW52YXMyRCk6CisgICAgICAgICog
cGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vR3JhcGhpY3NMYXllckNocm9taXVtLmg6CisgICAg
ICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJSZW5kZXJlckNocm9taXVtLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyUmVuZGVyZXJDaHJvbWl1bTo6ZHJhd0xheWVyKToK
KyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9XZWJHTExheWVyQ2hyb21pdW0u
Y3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OldlYkdMTGF5ZXJDaHJvbWl1bTo6Y3JlYXRl
KToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMTGF5ZXJDaHJvbWl1bTo6V2ViR0xMYXllckNocm9t
aXVtKToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMTGF5ZXJDaHJvbWl1bTo6dXBkYXRlQ29udGVu
dHMpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xMYXllckNocm9taXVtOjpzZXRDb250ZXh0KToK
KyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9XZWJHTExheWVyQ2hyb21pdW0u
aDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpXZWJHTExheWVyQ2hyb21pdW06OmRyYXdzQ29u
dGVudCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvc2tpYS9HcmFwaGljc0NvbnRleHRT
a2lhLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6c3luY1NvZnR3YXJl
Q2FudmFzKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6c2V0U2hhcmVkQ29u
dGV4dDNEKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9za2lhL0ltYWdlU2tpYS5jcHA6
CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvc2tpYS9QbGF0Zm9ybUNvbnRleHRTa2lhLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OlBsYXRmb3JtQ29udGV4dFNraWE6On5QbGF0Zm9ybUNvbnRl
eHRTa2lhKToKKyAgICAgICAgKFdlYkNvcmU6OldpbGxQdWJsaXNoQ2FsbGJhY2tJbXBsOjpjcmVh
dGUpOgorICAgICAgICAoV2ViQ29yZTo6V2lsbFB1Ymxpc2hDYWxsYmFja0ltcGw6OndpbGxQdWJs
aXNoKToKKyAgICAgICAgKFdlYkNvcmU6OldpbGxQdWJsaXNoQ2FsbGJhY2tJbXBsOjpXaWxsUHVi
bGlzaENhbGxiYWNrSW1wbCk6CisgICAgICAgIChXZWJDb3JlOjpQbGF0Zm9ybUNvbnRleHRTa2lh
OjpzZXRTaGFyZWRDb250ZXh0M0QpOgorICAgICAgICAoV2ViQ29yZTo6UGxhdGZvcm1Db250ZXh0
U2tpYTo6dXBsb2FkU29mdHdhcmVUb0hhcmR3YXJlKToKKyAgICAgICAgKFdlYkNvcmU6OlBsYXRm
b3JtQ29udGV4dFNraWE6OnJlYWRiYWNrSGFyZHdhcmVUb1NvZnR3YXJlKToKKyAgICAgICAgKiBw
bGF0Zm9ybS9ncmFwaGljcy9za2lhL1BsYXRmb3JtQ29udGV4dFNraWEuaDoKKyAgICAgICAgLSBQ
bGF0Zm9ybS1zcGVjaWZpYyBjaGFuZ2VzIChtYWMpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBo
aWNzL21hYy9HcmFwaGljc0xheWVyQ0EuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9t
YWMvR3JhcGhpY3NMYXllckNBLm1tOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NMYXllckNB
OjpzZXRDb250ZW50c1RvV2ViR0wpOgorCisKIDIwMTAtMDgtMzAgIENocmlzIFJvZ2VycyAgPGNy
b2dlcnNAZ29vZ2xlLmNvbT4KIAogICAgICAgICBSZXZpZXdlZCBieSBLZW5uZXRoIFJ1c3NlbGwu
CmRpZmYgLS1naXQgYS9XZWJDb3JlL1dlYkNvcmUuZ3lwaSBiL1dlYkNvcmUvV2ViQ29yZS5neXBp
CmluZGV4IGU1YjU3YmEwOGUzYTAwZDhkNTk4Y2QyYmU0MDczZDcwYTlhMGJkZjcuLjYxYTI3OGFi
YTU1ODg2NzY2OTljZTg0MmVmN2I2MWQzY2M0OGIyNmUgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvV2Vi
Q29yZS5neXBpCisrKyBiL1dlYkNvcmUvV2ViQ29yZS5neXBpCkBAIC0yMjM2LDggKzIyMzYsMTEg
QEAKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jZy9QYXRoQ0cuY3BwJywKICAgICAg
ICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jZy9QYXR0ZXJuQ0cuY3BwJywKICAgICAgICAgICAg
ICdwbGF0Zm9ybS9ncmFwaGljcy9jZy9UcmFuc2Zvcm1hdGlvbk1hdHJpeENHLmNwcCcsCisgICAg
ICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vQ2FudmFzMkRMYXllckNocm9taXVt
LmNwcCcsCisgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vQ2FudmFzMkRM
YXllckNocm9taXVtLmgnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVt
L0NhbnZhc0xheWVyQ2hyb21pdW0uY3BwJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGlj
cy9jaHJvbWl1bS9DYW52YXNMYXllckNocm9taXVtLmgnLAorICAgICAgICAgICAgJ3BsYXRmb3Jt
L2dyYXBoaWNzL2Nocm9taXVtL0RyYXdpbmdCdWZmZXJDaHJvbWl1bS5jcHAnLAogICAgICAgICAg
ICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0NvbnRlbnRMYXllckNocm9taXVtLmNwcCcs
CiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vQ29udGVudExheWVyQ2hy
b21pdW0uaCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vRm9udENh
Y2hlQ2hyb21pdW1XaW4uY3BwJywKQEAgLTIyODMsNiArMjI4Niw4IEBACiAgICAgICAgICAgICAn
cGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vVW5pc2NyaWJlSGVscGVyVGV4dFJ1bi5oJywKICAg
ICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9WaWRlb0xheWVyQ2hyb21pdW0u
Y3BwJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9WaWRlb0xheWVy
Q2hyb21pdW0uaCcsCisgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vV2Vi
R0xMYXllckNocm9taXVtLmNwcCcsCisgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hy
b21pdW0vV2ViR0xMYXllckNocm9taXVtLmgnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBo
aWNzL2NvY29hL0ZvbnRQbGF0Zm9ybURhdGEuaCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vZ3Jh
cGhpY3MvZmlsdGVycy9GRUJsZW5kLmNwcCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhp
Y3MvZmlsdGVycy9GRUJsZW5kLmgnLApAQCAtMjMwMyw2ICsyMzA4LDEwIEBACiAgICAgICAgICAg
ICAncGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9Tb3VyY2VBbHBoYS5oJywKICAgICAgICAgICAg
ICdwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL1NvdXJjZUdyYXBoaWMuY3BwJywKICAgICAgICAg
ICAgICdwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL1NvdXJjZUdyYXBoaWMuaCcsCisgICAgICAg
ICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvZ3B1L0RyYXdpbmdCdWZmZXIuY3BwJywKKyAgICAgICAg
ICAgICdwbGF0Zm9ybS9ncmFwaGljcy9ncHUvRHJhd2luZ0J1ZmZlci5oJywKKyAgICAgICAgICAg
ICdwbGF0Zm9ybS9ncmFwaGljcy9ncHUvU2hhcmVkQ29udGV4dDNELmNwcCcsCisgICAgICAgICAg
ICAncGxhdGZvcm0vZ3JhcGhpY3MvZ3B1L1NoYXJlZENvbnRleHQzRC5oJywKICAgICAgICAgICAg
ICdwbGF0Zm9ybS9ncmFwaGljcy9ncHUvU2hhZGVyLmNwcCcsCiAgICAgICAgICAgICAncGxhdGZv
cm0vZ3JhcGhpY3MvZ3B1L1NoYWRlci5oJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGlj
cy9ncHUvU29saWRGaWxsU2hhZGVyLmNwcCcsCkBAIC0yNTYxLDggKzI1NzAsOCBAQAogICAgICAg
ICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlQnVmZmVyLmNwcCcsCiAgICAgICAgICAgICAn
cGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VCdWZmZXIuaCcsCiAgICAgICAgICAgICAncGxhdGZvcm0v
Z3JhcGhpY3MvSW1hZ2VPYnNlcnZlci5oJywKLSAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGlj
cy9JbWFnZVNvdXJjZS5oJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9JbWFnZVNv
dXJjZS5jcHAnLAorICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlU291cmNlLmgn
LAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL0ludFBvaW50LmgnLAogICAgICAgICAg
ICAgJ3BsYXRmb3JtL2dyYXBoaWNzL0ludFJlY3QuY3BwJywKICAgICAgICAgICAgICdwbGF0Zm9y
bS9ncmFwaGljcy9JbnRSZWN0LmgnLApkaWZmIC0tZ2l0IGEvV2ViQ29yZS9odG1sL2NhbnZhcy9D
YW52YXNSZW5kZXJpbmdDb250ZXh0LmNwcCBiL1dlYkNvcmUvaHRtbC9jYW52YXMvQ2FudmFzUmVu
ZGVyaW5nQ29udGV4dC5jcHAKaW5kZXggMWU4OTdkMzBlY2UxOTgzOTEyOGYwMDhkZGY4ZDQ4NjBk
NzE0MDYyNy4uZTAxOTMzMmJhODFmNTNjOWViMmNjY2M1M2IyNDUzMDQ2ZWNiZDg1ZSAxMDA2NDQK
LS0tIGEvV2ViQ29yZS9odG1sL2NhbnZhcy9DYW52YXNSZW5kZXJpbmdDb250ZXh0LmNwcAorKysg
Yi9XZWJDb3JlL2h0bWwvY2FudmFzL0NhbnZhc1JlbmRlcmluZ0NvbnRleHQuY3BwCkBAIC0yNSw5
ICsyNSw2IEBACiAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJDYW52YXNSZW5kZXJp
bmdDb250ZXh0LmgiCi0jaWYgRU5BQkxFKEFDQ0VMRVJBVEVEXzJEX0NBTlZBUykgfHwgRU5BQkxF
KDNEX0NBTlZBUykKLSNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQzRC5oIgotI2VuZGlmCiAjaW5j
bHVkZSAiSFRNTENhbnZhc0VsZW1lbnQuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewpAQCAtNDcs
MTMgKzQ0LDQgQEAgdm9pZCBDYW52YXNSZW5kZXJpbmdDb250ZXh0OjpkZXJlZigpCiAgICAgbV9j
YW52YXMtPmRlcmVmKCk7IAogfQogCi1ib29sIENhbnZhc1JlbmRlcmluZ0NvbnRleHQ6OnBhaW50
c0ludG9DYW52YXNCdWZmZXIoKSBjb25zdAotewotI2lmIEVOQUJMRShBQ0NFTEVSQVRFRF8yRF9D
QU5WQVMpIHx8IEVOQUJMRSgzRF9DQU5WQVMpCi0gICAgaWYgKEdyYXBoaWNzQ29udGV4dDNEKiBj
b250ZXh0M0QgPSBncmFwaGljc0NvbnRleHQzRCgpKQotICAgICAgICByZXR1cm4gY29udGV4dDNE
LT5wYWludHNJbnRvQ2FudmFzQnVmZmVyKCk7Ci0jZW5kaWYKLSAgICByZXR1cm4gdHJ1ZTsKLX0K
LQogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9odG1sL2NhbnZh
cy9DYW52YXNSZW5kZXJpbmdDb250ZXh0LmggYi9XZWJDb3JlL2h0bWwvY2FudmFzL0NhbnZhc1Jl
bmRlcmluZ0NvbnRleHQuaAppbmRleCAyY2RiZTFkMzc2NTk0ZGJlMGRmYmQ3MDBmMmVmYjczNGEz
ZGI5MmM2Li5jNzE2OGIxZDA3ZGVhOGNmYzRkNjk0MTlhNGE2NWM0ZTJmYmFkY2EyIDEwMDY0NAot
LS0gYS9XZWJDb3JlL2h0bWwvY2FudmFzL0NhbnZhc1JlbmRlcmluZ0NvbnRleHQuaAorKysgYi9X
ZWJDb3JlL2h0bWwvY2FudmFzL0NhbnZhc1JlbmRlcmluZ0NvbnRleHQuaApAQCAtMzEsNyArMzEs
NiBAQAogbmFtZXNwYWNlIFdlYkNvcmUgewogCiAgICAgY2xhc3MgV2ViR0xPYmplY3Q7Ci0gICAg
Y2xhc3MgR3JhcGhpY3NDb250ZXh0M0Q7CiAgICAgY2xhc3MgSFRNTENhbnZhc0VsZW1lbnQ7CiAK
ICAgICBjbGFzcyBDYW52YXNSZW5kZXJpbmdDb250ZXh0IDogcHVibGljIE5vbmNvcHlhYmxlIHsK
QEAgLTQ5LDEyICs0OCw4IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgdmlydHVhbCBi
b29sIGlzM2QoKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQogICAgICAgICB2aXJ0dWFsIGJvb2wg
aXNBY2NlbGVyYXRlZCgpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CiAgICAgICAgIAotICAgICAg
ICAvLyBGb3IgYWNjZWxlcmF0ZWQgY2FudmFzZXMsIHJldHVybnMgYSBwb2ludGVyIHRvIHRoZSB1
bmRlcmx5aW5nIEdyYXBoaWNzQ29udGV4dDNELgotICAgICAgICAvLyBGb3Igbm9uIGFjY2VsZXJh
dGVkIGNhbnZhc2VzIHJldHVybnMgMC4KLSAgICAgICAgdmlydHVhbCBHcmFwaGljc0NvbnRleHQz
RCogZ3JhcGhpY3NDb250ZXh0M0QoKSBjb25zdCB7IHJldHVybiAwOyB9Ci0KICAgICAgICAgdmly
dHVhbCB2b2lkIHBhaW50UmVuZGVyaW5nUmVzdWx0c1RvQ2FudmFzKCkge30KLSAgICAgICAgYm9v
bCBwYWludHNJbnRvQ2FudmFzQnVmZmVyKCkgY29uc3Q7CisgICAgICAgIHZpcnR1YWwgYm9vbCBw
YWludHNJbnRvQ2FudmFzQnVmZmVyKCkgY29uc3QgeyByZXR1cm4gdHJ1ZTsgfQogCiAgICAgcHJp
dmF0ZToKICAgICAgICAgSFRNTENhbnZhc0VsZW1lbnQqIG1fY2FudmFzOwpkaWZmIC0tZ2l0IGEv
V2ViQ29yZS9odG1sL2NhbnZhcy9DYW52YXNSZW5kZXJpbmdDb250ZXh0MkQuY3BwIGIvV2ViQ29y
ZS9odG1sL2NhbnZhcy9DYW52YXNSZW5kZXJpbmdDb250ZXh0MkQuY3BwCmluZGV4IDZkZjZhYmY5
Njc0YWQ5YTIwZjIyNzJhMTc4OTNjODU4NTBkZTU3ZDcuLmFmYTM1NmU4OTQwYTBmM2ZmNDY2NjYy
MDkzNzk4ZjY3NWI4MmZiMDkgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvaHRtbC9jYW52YXMvQ2FudmFz
UmVuZGVyaW5nQ29udGV4dDJELmNwcAorKysgYi9XZWJDb3JlL2h0bWwvY2FudmFzL0NhbnZhc1Jl
bmRlcmluZ0NvbnRleHQyRC5jcHAKQEAgLTU5LDggKzU5LDEyIEBACiAjaW5jbHVkZSAiVGV4dE1l
dHJpY3MuaCIKIAogI2lmIEVOQUJMRShBQ0NFTEVSQVRFRF8yRF9DQU5WQVMpCisjaW5jbHVkZSAi
Q2hyb21lLmgiCisjaW5jbHVkZSAiQ2hyb21lQ2xpZW50LmgiCisjaW5jbHVkZSAiRHJhd2luZ0J1
ZmZlci5oIgogI2luY2x1ZGUgIkZyYW1lVmlldy5oIgogI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4
dDNELmgiCisjaW5jbHVkZSAiU2hhcmVkQ29udGV4dDNELmgiCiAjaWYgVVNFKEFDQ0VMRVJBVEVE
X0NPTVBPU0lUSU5HKQogI2luY2x1ZGUgIlJlbmRlckxheWVyLmgiCiAjZW5kaWYKQEAgLTEyNCwx
NyArMTI4LDExIEBAIENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRDo6Q2FudmFzUmVuZGVyaW5nQ29u
dGV4dDJEKEhUTUxDYW52YXNFbGVtZW50KiBjYW52YXMsIGJvCiAgICAgICAgIHJldHVybjsKICAg
ICBpZiAoIXAtPnNldHRpbmdzKCktPmFjY2VsZXJhdGVkMmRDYW52YXNFbmFibGVkKCkpCiAgICAg
ICAgIHJldHVybjsKLSAgICBpZiAoRnJhbWVWaWV3KiB2aWV3ID0gY2FudmFzLT5kb2N1bWVudCgp
LT52aWV3KCkpIHsKLSAgICAgICAgaWYgKFNjcm9sbFZpZXcqIHJvb3RWaWV3ID0gdmlldy0+cm9v
dCgpKSB7Ci0gICAgICAgICAgICBpZiAoSG9zdFdpbmRvdyogaG9zdFdpbmRvdyA9IHJvb3RWaWV3
LT5ob3N0V2luZG93KCkpIHsKLSAgICAgICAgICAgICAgICAvLyBTZXQgdXAgb3VyIGNvbnRleHQK
LSAgICAgICAgICAgICAgICBHcmFwaGljc0NvbnRleHQzRDo6QXR0cmlidXRlcyBhdHRyOwotICAg
ICAgICAgICAgICAgIGF0dHIuc3RlbmNpbCA9IHRydWU7Ci0gICAgICAgICAgICAgICAgbV9jb250
ZXh0M0QgPSBHcmFwaGljc0NvbnRleHQzRDo6Y3JlYXRlKGF0dHIsIGhvc3RXaW5kb3cpOwotICAg
ICAgICAgICAgICAgIGlmIChtX2NvbnRleHQzRCkKLSAgICAgICAgICAgICAgICAgICAgaWYgKEdy
YXBoaWNzQ29udGV4dCogYyA9IGRyYXdpbmdDb250ZXh0KCkpCi0gICAgICAgICAgICAgICAgICAg
ICAgICBjLT5zZXRHcmFwaGljc0NvbnRleHQzRChtX2NvbnRleHQzRC5nZXQoKSwgSW50U2l6ZShj
YW52YXMtPndpZHRoKCksIGNhbnZhcy0+aGVpZ2h0KCkpKTsKLSAgICAgICAgICAgIH0KKyAgICBt
X2NvbnRleHQzRCA9IHAtPmNocm9tZSgpLT5jbGllbnQoKS0+Z2V0U2hhcmVkQ29udGV4dDNEKCk7
CisgICAgaWYgKG1fY29udGV4dDNEKSB7CisgICAgICAgIGlmIChHcmFwaGljc0NvbnRleHQqIGMg
PSBkcmF3aW5nQ29udGV4dCgpKSB7CisgICAgICAgICAgICBtX2RyYXdpbmdCdWZmZXIgPSBEcmF3
aW5nQnVmZmVyOjpjcmVhdGUobV9jb250ZXh0M0QuZ2V0KCksIEludFNpemUoY2FudmFzLT53aWR0
aCgpLCBjYW52YXMtPmhlaWdodCgpKSk7CisgICAgICAgICAgICBjLT5zZXRTaGFyZWRDb250ZXh0
M0QobV9jb250ZXh0M0QuZ2V0KCksIG1fZHJhd2luZ0J1ZmZlci5nZXQoKSwgSW50U2l6ZShjYW52
YXMtPndpZHRoKCksIGNhbnZhcy0+aGVpZ2h0KCkpKTsKICAgICAgICAgfQogICAgIH0KICNlbmRp
ZgpAQCAtMTUzLDYgKzE1MSwxNiBAQCBib29sIENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRDo6aXNB
Y2NlbGVyYXRlZCgpIGNvbnN0CiAjZW5kaWYKIH0KIAorYm9vbCBDYW52YXNSZW5kZXJpbmdDb250
ZXh0MkQ6OnBhaW50c0ludG9DYW52YXNCdWZmZXIoKSBjb25zdAoreworI2lmIEVOQUJMRShBQ0NF
TEVSQVRFRF8yRF9DQU5WQVMpCisgICAgaWYgKG1fY29udGV4dDNEKQorICAgICAgICByZXR1cm4g
bV9jb250ZXh0M0QtPnBhaW50c0ludG9DYW52YXNCdWZmZXIoKTsKKyNlbmRpZgorICAgIHJldHVy
biB0cnVlOworfQorCisKIHZvaWQgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEOjpyZXNldCgpCiB7
CiAgICAgbV9zdGF0ZVN0YWNrLnJlc2l6ZSgxKTsKQEAgLTE2MCw4ICsxNjgsMTAgQEAgdm9pZCBD
YW52YXNSZW5kZXJpbmdDb250ZXh0MkQ6OnJlc2V0KCkKICAgICBtX3BhdGguY2xlYXIoKTsKICNp
ZiBFTkFCTEUoQUNDRUxFUkFURURfMkRfQ0FOVkFTKQogICAgIGlmIChtX2NvbnRleHQzRCkgewot
ICAgICAgICBpZiAoR3JhcGhpY3NDb250ZXh0KiBjID0gZHJhd2luZ0NvbnRleHQoKSkKLSAgICAg
ICAgICAgIGMtPnNldEdyYXBoaWNzQ29udGV4dDNEKG1fY29udGV4dDNELmdldCgpLCBJbnRTaXpl
KGNhbnZhcygpLT53aWR0aCgpLCBjYW52YXMoKS0+aGVpZ2h0KCkpKTsKKyAgICAgICAgaWYgKEdy
YXBoaWNzQ29udGV4dCogYyA9IGRyYXdpbmdDb250ZXh0KCkpIHsKKyAgICAgICAgICAgIG1fZHJh
d2luZ0J1ZmZlciA9IERyYXdpbmdCdWZmZXI6OmNyZWF0ZShtX2NvbnRleHQzRC5nZXQoKSwgSW50
U2l6ZShjYW52YXMoKS0+d2lkdGgoKSwgY2FudmFzKCktPmhlaWdodCgpKSk7CisgICAgICAgICAg
ICBjLT5zZXRTaGFyZWRDb250ZXh0M0QobV9jb250ZXh0M0QuZ2V0KCksIG1fZHJhd2luZ0J1ZmZl
ci5nZXQoKSwgSW50U2l6ZShjYW52YXMoKS0+d2lkdGgoKSwgY2FudmFzKCktPmhlaWdodCgpKSk7
CisgICAgICAgIH0KICAgICB9CiAjZW5kaWYKIH0KQEAgLTE1MDQsNyArMTUxNCw3IEBAIHZvaWQg
Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJEOjpkaWREcmF3KGNvbnN0IEZsb2F0UmVjdCYgciwgdW5z
aWduZWQgb3B0aW9ucykKICNpZiBFTkFCTEUoQUNDRUxFUkFURURfMkRfQ0FOVkFTKSAmJiBVU0Uo
QUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCiAgICAgLy8gSWYgd2UgYXJlIGRyYXdpbmcgdG8gaGFy
ZHdhcmUgYW5kIHdlIGhhdmUgYSBjb21wb3NpdGVkIGxheWVyLCBqdXN0IGNhbGwgcmVuZGVyZXJD
b250ZW50Q2hhbmdlZCgpLgogICAgIFJlbmRlckJveCogcmVuZGVyQm94ID0gY2FudmFzKCktPnJl
bmRlckJveCgpOwotICAgIGlmIChtX2NvbnRleHQzRCAmJiByZW5kZXJCb3ggJiYgcmVuZGVyQm94
LT5oYXNMYXllcigpICYmIHJlbmRlckJveC0+bGF5ZXIoKS0+aGFzQWNjZWxlcmF0ZWRDb21wb3Np
dGluZygpKQorICAgIGlmIChpc0FjY2VsZXJhdGVkKCkgJiYgcmVuZGVyQm94ICYmIHJlbmRlckJv
eC0+aGFzTGF5ZXIoKSAmJiByZW5kZXJCb3gtPmxheWVyKCktPmhhc0FjY2VsZXJhdGVkQ29tcG9z
aXRpbmcoKSkKICAgICAgICAgcmVuZGVyQm94LT5sYXllcigpLT5yZW5kZXJlckNvbnRlbnRDaGFu
Z2VkKCk7CiAgICAgZWxzZQogI2VuZGlmCmRpZmYgLS1naXQgYS9XZWJDb3JlL2h0bWwvY2FudmFz
L0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRC5oIGIvV2ViQ29yZS9odG1sL2NhbnZhcy9DYW52YXNS
ZW5kZXJpbmdDb250ZXh0MkQuaAppbmRleCA5ODU3MzQ0M2U4MWRmOWY3ZDk2ZjY5MjMyZmVmZjkw
OGUwY2U2Yjg5Li4yNTkxMGE3OWI0ZGYzZjRhMzJkYzBlZDQwNjljYTAyMmJhYjE1ODA0IDEwMDY0
NAotLS0gYS9XZWJDb3JlL2h0bWwvY2FudmFzL0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRC5oCisr
KyBiL1dlYkNvcmUvaHRtbC9jYW52YXMvQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJELmgKQEAgLTYx
LDcgKzYxLDcgQEAgY2xhc3MgS1VSTDsKIGNsYXNzIFRleHRNZXRyaWNzOwogCiAjaWYgRU5BQkxF
KEFDQ0VMRVJBVEVEXzJEX0NBTlZBUykKLWNsYXNzIEdyYXBoaWNzQ29udGV4dDNEOworY2xhc3Mg
U2hhcmVkQ29udGV4dDNEOwogI2VuZGlmCiAKIHR5cGVkZWYgaW50IEV4Y2VwdGlvbkNvZGU7CkBA
IC03NCw2ICs3NCw3IEBAIHB1YmxpYzoKIAogICAgIHZpcnR1YWwgYm9vbCBpczJkKCkgY29uc3Qg
eyByZXR1cm4gdHJ1ZTsgfQogICAgIHZpcnR1YWwgYm9vbCBpc0FjY2VsZXJhdGVkKCkgY29uc3Q7
CisgICAgdmlydHVhbCBib29sIHBhaW50c0ludG9DYW52YXNCdWZmZXIoKSBjb25zdDsKIAogICAg
IENhbnZhc1N0eWxlKiBzdHJva2VTdHlsZSgpIGNvbnN0OwogICAgIHZvaWQgc2V0U3Ryb2tlU3R5
bGUoUGFzc1JlZlB0cjxDYW52YXNTdHlsZT4pOwpAQCAtMjI0LDcgKzIyNSw3IEBAIHB1YmxpYzoK
ICAgICB2aXJ0dWFsIHZvaWQgcGFpbnRSZW5kZXJpbmdSZXN1bHRzVG9DYW52YXMoKTsKIAogI2lm
IEVOQUJMRShBQ0NFTEVSQVRFRF8yRF9DQU5WQVMpCi0gICAgdmlydHVhbCBHcmFwaGljc0NvbnRl
eHQzRCogZ3JhcGhpY3NDb250ZXh0M0QoKSBjb25zdCB7IHJldHVybiBtX2NvbnRleHQzRC5nZXQo
KTsgfQorICAgIERyYXdpbmdCdWZmZXIqIGRyYXdpbmdCdWZmZXIoKSB7IHJldHVybiBtX2RyYXdp
bmdCdWZmZXIuZ2V0KCk7IH0KICNlbmRpZgogCiBwcml2YXRlOgpAQCAtMjk4LDcgKzI5OSw4IEBA
IHByaXZhdGU6CiAjZW5kaWYKIAogI2lmIEVOQUJMRShBQ0NFTEVSQVRFRF8yRF9DQU5WQVMpCi0g
ICAgT3duUHRyPEdyYXBoaWNzQ29udGV4dDNEPiBtX2NvbnRleHQzRDsKKyAgICBSZWZQdHI8U2hh
cmVkQ29udGV4dDNEPiBtX2NvbnRleHQzRDsKKyAgICBSZWZQdHI8RHJhd2luZ0J1ZmZlcj4gbV9k
cmF3aW5nQnVmZmVyOwogI2VuZGlmCiB9OwogCmRpZmYgLS1naXQgYS9XZWJDb3JlL2h0bWwvY2Fu
dmFzL1dlYkdMUmVuZGVyaW5nQ29udGV4dC5jcHAgYi9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdM
UmVuZGVyaW5nQ29udGV4dC5jcHAKaW5kZXggOTU5MWE1M2NmZWMwNTllMjk5MzZjNTgxOTA3MGE0
ZWFmZTljZDY4My4uNjRjYjVkM2VmZGNmZWIyZTI1MzcwNDM2ODk0ZGYwYzU5MzZhMmYzYSAxMDA2
NDQKLS0tIGEvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFJlbmRlcmluZ0NvbnRleHQuY3BwCisr
KyBiL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xSZW5kZXJpbmdDb250ZXh0LmNwcApAQCAtMTcw
LDYgKzE3MCwxMSBAQCB2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6cGFpbnRSZW5kZXJpbmdS
ZXN1bHRzVG9DYW52YXMoKQogICAgIG1fY29udGV4dC0+cGFpbnRSZW5kZXJpbmdSZXN1bHRzVG9D
YW52YXModGhpcyk7CiB9CiAKK2Jvb2wgV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpwYWludHNJbnRv
Q2FudmFzQnVmZmVyKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9jb250ZXh0LT5wYWludHNJbnRv
Q2FudmFzQnVmZmVyKCk7Cit9CisKIHZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpyZXNoYXBl
KGludCB3aWR0aCwgaW50IGhlaWdodCkKIHsKICAgICBpZiAobV9uZWVkc1VwZGF0ZSkgewpkaWZm
IC0tZ2l0IGEvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFJlbmRlcmluZ0NvbnRleHQuaCBiL1dl
YkNvcmUvaHRtbC9jYW52YXMvV2ViR0xSZW5kZXJpbmdDb250ZXh0LmgKaW5kZXggNjZlYzhkODJh
YTczZmRiNGI0OWYyNzZiM2I2ZDA1MmQ1Mzg0M2FiYi4uODEzOTBmOWU0ZmQ1MTkwYmRmZDVlMmUw
MDQ1N2ZlNjRjNjUxMWM5ZCAxMDA2NDQKLS0tIGEvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFJl
bmRlcmluZ0NvbnRleHQuaAorKysgYi9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMUmVuZGVyaW5n
Q29udGV4dC5oCkBAIC02Myw2ICs2Myw3IEBAIHB1YmxpYzoKIAogICAgIHZpcnR1YWwgYm9vbCBp
czNkKCkgY29uc3QgeyByZXR1cm4gdHJ1ZTsgfQogICAgIHZpcnR1YWwgYm9vbCBpc0FjY2VsZXJh
dGVkKCkgY29uc3QgeyByZXR1cm4gdHJ1ZTsgfQorICAgIHZpcnR1YWwgYm9vbCBwYWludHNJbnRv
Q2FudmFzQnVmZmVyKCkgY29uc3Q7CiAKICAgICB2b2lkIGFjdGl2ZVRleHR1cmUodW5zaWduZWQg
bG9uZyB0ZXh0dXJlLCBFeGNlcHRpb25Db2RlJiBlYyk7CiAgICAgdm9pZCBhdHRhY2hTaGFkZXIo
V2ViR0xQcm9ncmFtKiwgV2ViR0xTaGFkZXIqLCBFeGNlcHRpb25Db2RlJiBlYyk7CkBAIC0yNzcs
NyArMjc4LDcgQEAgcHVibGljOgogCiAgICAgdm9pZCB2aWV3cG9ydChsb25nIHgsIGxvbmcgeSwg
dW5zaWduZWQgbG9uZyB3aWR0aCwgdW5zaWduZWQgbG9uZyBoZWlnaHQpOwogCi0gICAgdmlydHVh
bCBHcmFwaGljc0NvbnRleHQzRCogZ3JhcGhpY3NDb250ZXh0M0QoKSBjb25zdCB7IHJldHVybiBt
X2NvbnRleHQuZ2V0KCk7IH0KKyAgICBHcmFwaGljc0NvbnRleHQzRCogZ3JhcGhpY3NDb250ZXh0
M0QoKSBjb25zdCB7IHJldHVybiBtX2NvbnRleHQuZ2V0KCk7IH0KIAogICAgIHZvaWQgcmVzaGFw
ZShpbnQgd2lkdGgsIGludCBoZWlnaHQpOwogCmRpZmYgLS1naXQgYS9XZWJDb3JlL2xvYWRlci9F
bXB0eUNsaWVudHMuaCBiL1dlYkNvcmUvbG9hZGVyL0VtcHR5Q2xpZW50cy5oCmluZGV4IDI3MDc1
MmRkN2Y4ZjAxZmE5NGY3YzI5M2QzY2ZlN2ZhOTVlZDI5MWYuLmJmZmM1M2NiODBiMTY2MDBkODI0
ZDZhYTA5ZWI2OTdiYzQ1ZmMzOGEgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvbG9hZGVyL0VtcHR5Q2xp
ZW50cy5oCisrKyBiL1dlYkNvcmUvbG9hZGVyL0VtcHR5Q2xpZW50cy5oCkBAIC02MSw2ICs2MSw4
IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAorY2xhc3MgU2hhcmVkQ29udGV4dDNEOworCiBj
bGFzcyBFbXB0eVBvcHVwTWVudSA6IHB1YmxpYyBQb3B1cE1lbnUgewogcHVibGljOgogICAgIHZp
cnR1YWwgdm9pZCBzaG93KGNvbnN0IEludFJlY3QmLCBGcmFtZVZpZXcqLCBpbnQpIHt9CkBAIC0x
OTAsOSArMTkyLDkgQEAgcHVibGljOgogICAgIHZpcnR1YWwgdm9pZCBjYW5jZWxHZW9sb2NhdGlv
blBlcm1pc3Npb25SZXF1ZXN0Rm9yRnJhbWUoRnJhbWUqLCBHZW9sb2NhdGlvbiopIHt9CiAKICNp
ZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCi0gICAgdmlydHVhbCB2b2lkIGF0dGFjaFJv
b3RHcmFwaGljc0xheWVyKEZyYW1lKiwgR3JhcGhpY3NMYXllciopIHt9OwotICAgIHZpcnR1YWwg
dm9pZCBzZXROZWVkc09uZVNob3REcmF3aW5nU3luY2hyb25pemF0aW9uKCkge307Ci0gICAgdmly
dHVhbCB2b2lkIHNjaGVkdWxlQ29tcG9zaXRpbmdMYXllclN5bmMoKSB7fTsKKyAgICB2aXJ0dWFs
IHZvaWQgYXR0YWNoUm9vdEdyYXBoaWNzTGF5ZXIoRnJhbWUqLCBHcmFwaGljc0xheWVyKikge30K
KyAgICB2aXJ0dWFsIHZvaWQgc2V0TmVlZHNPbmVTaG90RHJhd2luZ1N5bmNocm9uaXphdGlvbigp
IHt9CisgICAgdmlydHVhbCB2b2lkIHNjaGVkdWxlQ29tcG9zaXRpbmdMYXllclN5bmMoKSB7fQog
I2VuZGlmCiAKICNpZiBQTEFURk9STShXSU4pCmRpZmYgLS1naXQgYS9XZWJDb3JlL3BhZ2UvQ2hy
b21lQ2xpZW50LmggYi9XZWJDb3JlL3BhZ2UvQ2hyb21lQ2xpZW50LmgKaW5kZXggZDNlMTY2MjI5
MmEzMWE4OWU1YmFhNzQ3MDUyMGE5ODhiZTE4MjA3OS4uZDQ2MmUxZTA5OTk0YTM5ZTU1NmQ5YmU3
ZDU5NDRiNzY3MDM0ZDE5YyAxMDA2NDQKLS0tIGEvV2ViQ29yZS9wYWdlL0Nocm9tZUNsaWVudC5o
CisrKyBiL1dlYkNvcmUvcGFnZS9DaHJvbWVDbGllbnQuaApAQCAtNTcsNiArNTcsNyBAQCBuYW1l
c3BhY2UgV2ViQ29yZSB7CiAgICAgY2xhc3MgTm9kZTsKICAgICBjbGFzcyBQYWdlOwogICAgIGNs
YXNzIFNlY3VyaXR5T3JpZ2luOworICAgIGNsYXNzIFNoYXJlZENvbnRleHQzRDsKICAgICBjbGFz
cyBQb3B1cE1lbnVDbGllbnQ7CiAgICAgY2xhc3MgV2lkZ2V0OwogCkBAIC0yMzAsNiArMjMxLDgg
QEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICB2aXJ0dWFsIGJvb2wgYWxsb3dzQWNjZWxl
cmF0ZWRDb21wb3NpdGluZygpIGNvbnN0IHsgcmV0dXJuIHRydWU7IH0KICNlbmRpZgogCisgICAg
ICAgIHZpcnR1YWwgU2hhcmVkQ29udGV4dDNEKiBnZXRTaGFyZWRDb250ZXh0M0QoKSB7IHJldHVy
biAwOyB9CisKICAgICAgICAgdmlydHVhbCBib29sIHN1cHBvcnRzRnVsbHNjcmVlbkZvck5vZGUo
Y29uc3QgTm9kZSopIHsgcmV0dXJuIGZhbHNlOyB9CiAgICAgICAgIHZpcnR1YWwgdm9pZCBlbnRl
ckZ1bGxzY3JlZW5Gb3JOb2RlKE5vZGUqKSB7IH0KICAgICAgICAgdmlydHVhbCB2b2lkIGV4aXRG
dWxsc2NyZWVuRm9yTm9kZShOb2RlKikgeyB9CmRpZmYgLS1naXQgYS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dC5jcHAgYi9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L0dyYXBoaWNzQ29udGV4dC5jcHAKaW5kZXggNDczODRiOWVlODRkNmRhMDg2MGYzMTYxYjNiYzA4
MjExOWY0NWJmZi4uNzk3ZjJiNjQ2M2JhODZmOWU0YWMwN2EyZmQxNzFiNDdmMzI4Y2Y1NCAxMDA2
NDQKLS0tIGEvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQuY3BwCisr
KyBiL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0LmNwcApAQCAtNjAw
LDE0ICs2MDAsNCBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6YWRqdXN0TGluZVRvUGl4ZWxCb3Vu
ZGFyaWVzKEZsb2F0UG9pbnQmIHAxLCBGbG9hdFBvaW50JiBwMgogICAgIH0KIH0KIAotI2lmICFQ
TEFURk9STShTS0lBKQotdm9pZCBHcmFwaGljc0NvbnRleHQ6OnNldEdyYXBoaWNzQ29udGV4dDNE
KEdyYXBoaWNzQ29udGV4dDNEKiwgY29uc3QgSW50U2l6ZSYpCi17Ci19Ci0KLXZvaWQgR3JhcGhp
Y3NDb250ZXh0OjpzeW5jU29mdHdhcmVDYW52YXMoKQotewotfQotI2VuZGlmCi0KIH0KZGlmZiAt
LWdpdCBhL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0LmggYi9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dC5oCmluZGV4IDkzZWY4OTAwNjJl
ZGE1Mjg5OWU0ZDMzZGQxMDkxYTJkMzJmNGQwOGMuLmMxNGNhN2FhODQwMTdkMWE0ZWM2NmFhYWFk
MDE5NWMyNzJiYjVhNzIgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3Jh
cGhpY3NDb250ZXh0LmgKKysrIGIvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0Nv
bnRleHQuaApAQCAtMTIyLDE2ICsxMjIsMTcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgIGNv
bnN0IGludCBjTWlzc3BlbGxpbmdMaW5lUGF0dGVybkdhcFdpZHRoID0gMTsKIAogICAgIGNsYXNz
IEFmZmluZVRyYW5zZm9ybTsKKyAgICBjbGFzcyBEcmF3aW5nQnVmZmVyOwogICAgIGNsYXNzIEZv
bnQ7CiAgICAgY2xhc3MgR2VuZXJhdG9yOwogICAgIGNsYXNzIEdyYWRpZW50OwotICAgIGNsYXNz
IEdyYXBoaWNzQ29udGV4dDNEOwogICAgIGNsYXNzIEdyYXBoaWNzQ29udGV4dFBsYXRmb3JtUHJp
dmF0ZTsKICAgICBjbGFzcyBHcmFwaGljc0NvbnRleHRQcml2YXRlOwogICAgIGNsYXNzIEltYWdl
QnVmZmVyOwogICAgIGNsYXNzIEtVUkw7CiAgICAgY2xhc3MgUGF0aDsKICAgICBjbGFzcyBQYXR0
ZXJuOworICAgIGNsYXNzIFNoYXJlZENvbnRleHQzRDsKICAgICBjbGFzcyBUZXh0UnVuOwogCiAg
ICAgLy8gVGhlc2UgYml0cyBjYW4gYmUgT1JlZCB0b2dldGhlciBmb3IgYSB0b3RhbCBvZiA4IHBv
c3NpYmxlIHRleHQgZHJhd2luZyBtb2Rlcy4KQEAgLTQxMiw4ICs0MTMsMTAgQEAgbmFtZXNwYWNl
IFdlYkNvcmUgewogICAgICAgICBwYXR0ZXJuIGdldEhhaWt1U3Ryb2tlU3R5bGUoKTsKICNlbmRp
ZgogCi0gICAgICAgIHZvaWQgc2V0R3JhcGhpY3NDb250ZXh0M0QoR3JhcGhpY3NDb250ZXh0M0Qq
LCBjb25zdCBJbnRTaXplJik7CisjaWYgUExBVEZPUk0oU0tJQSkKKyAgICAgICAgdm9pZCBzZXRT
aGFyZWRDb250ZXh0M0QoU2hhcmVkQ29udGV4dDNEKiwgRHJhd2luZ0J1ZmZlciosIGNvbnN0IElu
dFNpemUmKTsKICAgICAgICAgdm9pZCBzeW5jU29mdHdhcmVDYW52YXMoKTsKKyNlbmRpZgogCiAg
ICAgcHJpdmF0ZToKICAgICAgICAgdm9pZCBzYXZlUGxhdGZvcm1TdGF0ZSgpOwpkaWZmIC0tZ2l0
IGEvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0xheWVyLmggYi9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzTGF5ZXIuaAppbmRleCAwZjc0Y2Q1Y2IzMzg1ZWU3YmI1
YTY4ODAyYjdhZmMyOTc4N2ZmODBmLi5jYzBkNjYyNWZjMTk5MmQwMmYzMDQ0Njc3NzNhZmNkYjZi
NzhmY2EwIDEwMDY0NAotLS0gYS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzTGF5
ZXIuaAorKysgYi9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzTGF5ZXIuaApAQCAt
ODEsNiArODEsNyBAQCB0eXBlZGVmIHVuc2lnbmVkIExheWVyVHJlZUFzVGV4dEJlaGF2aW9yOwog
CiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKK2NsYXNzIERyYXdpbmdCdWZmZXI7CiBjbGFzcyBGbG9h
dFBvaW50M0Q7CiBjbGFzcyBHcmFwaGljc0NvbnRleHQ7CiBjbGFzcyBJbWFnZTsKQEAgLTI5OCw3
ICsyOTksOCBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCB2b2lkIHNldENvbnRlbnRzVG9JbWFnZShJ
bWFnZSopIHsgfQogICAgIHZpcnR1YWwgdm9pZCBzZXRDb250ZW50c1RvTWVkaWEoUGxhdGZvcm1M
YXllciopIHsgfSAvLyB2aWRlbyBvciBwbHVnLWluCiAgICAgdmlydHVhbCB2b2lkIHNldENvbnRl
bnRzQmFja2dyb3VuZENvbG9yKGNvbnN0IENvbG9yJikgeyB9Ci0gICAgdmlydHVhbCB2b2lkIHNl
dENvbnRlbnRzVG9DYW52YXMoUGxhdGZvcm1MYXllciopIHsgfQorICAgIHZpcnR1YWwgdm9pZCBz
ZXRDb250ZW50c1RvV2ViR0woUGxhdGZvcm1MYXllciopIHsgfQorICAgIHZpcnR1YWwgdm9pZCBz
ZXRDb250ZW50c1RvQ2FudmFzMkQoRHJhd2luZ0J1ZmZlciopIHsgfQogICAgIHZpcnR1YWwgYm9v
bCBoYXNDb250ZW50c0xheWVyKCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KIAogICAgIC8vIENh
bGxiYWNrIGZyb20gdGhlIHVuZGVybHlpbmcgZ3JhcGhpY3Mgc3lzdGVtIHRvIGRyYXcgbGF5ZXIg
Y29udGVudHMuCmRpZmYgLS1naXQgYS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVt
L0NhbnZhczJETGF5ZXJDaHJvbWl1bS5jcHAgYi9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2No
cm9taXVtL0NhbnZhczJETGF5ZXJDaHJvbWl1bS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMGMzYTk2Yjg0ZGQw
ZWJiNjg1MDM1ZWU3NTUxOWEyYzVhZDc5MjJlNAotLS0gL2Rldi9udWxsCisrKyBiL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vQ2FudmFzMkRMYXllckNocm9taXVtLmNwcApAQCAt
MCwwICsxLDEwNyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMCBHb29nbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorICog
bWV0OgorICoKKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiBjb3B5cmlnaHQg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyCisgKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlCisgKiBkaXN0cmlidXRpb24uCisgKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1l
IG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisgKiBjb250cmlidXRvcnMgbWF5
IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorICog
dGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVS
UyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgKiBBIFBB
UlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENP
UFlSSUdIVAorICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAq
IERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKworI2lmIFVTRShBQ0NFTEVSQVRFRF9D
T01QT1NJVElORykKKworI2luY2x1ZGUgIkNhbnZhczJETGF5ZXJDaHJvbWl1bS5oIgorCisjaW5j
bHVkZSAiRHJhd2luZ0J1ZmZlci5oIgorCisjaW5jbHVkZSA8R0xFUzIvZ2wyLmg+CisKK25hbWVz
cGFjZSBXZWJDb3JlIHsKKworUGFzc1JlZlB0cjxDYW52YXMyRExheWVyQ2hyb21pdW0+IENhbnZh
czJETGF5ZXJDaHJvbWl1bTo6Y3JlYXRlKERyYXdpbmdCdWZmZXIqIGRyYXdpbmdCdWZmZXIsIEdy
YXBoaWNzTGF5ZXJDaHJvbWl1bSogb3duZXIpCit7CisgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBD
YW52YXMyRExheWVyQ2hyb21pdW0oZHJhd2luZ0J1ZmZlciwgb3duZXIpKTsKK30KKworQ2FudmFz
MkRMYXllckNocm9taXVtOjpDYW52YXMyRExheWVyQ2hyb21pdW0oRHJhd2luZ0J1ZmZlciogZHJh
d2luZ0J1ZmZlciwgR3JhcGhpY3NMYXllckNocm9taXVtKiBvd25lcikKKyAgICA6IENhbnZhc0xh
eWVyQ2hyb21pdW0ob3duZXIpCisgICAgLCBtX2RyYXdpbmdCdWZmZXIoZHJhd2luZ0J1ZmZlcikK
K3sKK30KKworQ2FudmFzMkRMYXllckNocm9taXVtOjp+Q2FudmFzMkRMYXllckNocm9taXVtKCkK
K3sKKyAgICBpZiAobV90ZXh0dXJlSWQpCisgICAgICAgIGdsRGVsZXRlVGV4dHVyZXMoMSwgJm1f
dGV4dHVyZUlkKTsKK30KKwordm9pZCBDYW52YXMyRExheWVyQ2hyb21pdW06OnVwZGF0ZUNvbnRl
bnRzKCkKK3sKKyAgICBpZiAoIW1fZHJhd2luZ0J1ZmZlcikKKyAgICAgICAgcmV0dXJuOworICAg
IGlmIChtX3RleHR1cmVDaGFuZ2VkKSB7IC8vIFdlIGhhdmUgdG8gZ2VuZXJhdGUgYSBuZXcgYmFj
a2luZyB0ZXh0dXJlLgorICAgICAgICBpZiAobV90ZXh0dXJlSWQpCisgICAgICAgICAgICBnbERl
bGV0ZVRleHR1cmVzKDEsICZtX3RleHR1cmVJZCk7CisgICAgICAgIGdsR2VuVGV4dHVyZXMoMSwg
Jm1fdGV4dHVyZUlkKTsKKyAgICAgICAgZ2xBY3RpdmVUZXh0dXJlKEdMX1RFWFRVUkUwKTsKKyAg
ICAgICAgZ2xCaW5kVGV4dHVyZShHTF9URVhUVVJFXzJELCBtX3RleHR1cmVJZCk7CisgICAgICAg
IEludFNpemUgc2l6ZSA9IG1fZHJhd2luZ0J1ZmZlci0+c2l6ZSgpOworICAgICAgICBnbFRleElt
YWdlMkQoR0xfVEVYVFVSRV8yRCwgMCwgR0xfUkdCQSwgc2l6ZS53aWR0aCgpLCBzaXplLmhlaWdo
dCgpLCAwLCBHTF9SR0JBLCBHTF9VTlNJR05FRF9CWVRFLCAwKTsKKyAgICAgICAgLy8gU2V0IHRo
ZSBtaW4tbWFnIGZpbHRlcnMgdG8gbGluZWFyIGFuZCB3cmFwIG1vZGVzIHRvIEdMX0NMQU1QX1RP
X0VER0UKKyAgICAgICAgLy8gdG8gZ2V0IGFyb3VuZCBOUE9UIHRleHR1cmUgbGltaXRhdGlvbnMg
b2YgR0xFUy4KKyAgICAgICAgZ2xUZXhQYXJhbWV0ZXJpKEdMX1RFWFRVUkVfMkQsIEdMX1RFWFRV
UkVfTUlOX0ZJTFRFUiwgR0xfTElORUFSKTsKKyAgICAgICAgZ2xUZXhQYXJhbWV0ZXJpKEdMX1RF
WFRVUkVfMkQsIEdMX1RFWFRVUkVfTUFHX0ZJTFRFUiwgR0xfTElORUFSKTsKKyAgICAgICAgZ2xU
ZXhQYXJhbWV0ZXJpKEdMX1RFWFRVUkVfMkQsIEdMX1RFWFRVUkVfV1JBUF9TLCBHTF9DTEFNUF9U
T19FREdFKTsKKyAgICAgICAgZ2xUZXhQYXJhbWV0ZXJpKEdMX1RFWFRVUkVfMkQsIEdMX1RFWFRV
UkVfV1JBUF9ULCBHTF9DTEFNUF9UT19FREdFKTsKKyAgICAgICAgbV90ZXh0dXJlQ2hhbmdlZCA9
IGZhbHNlOworICAgICAgICAvLyBGSVhNRTogVGhlIGdsRmluaXNoKCkgaGVyZSBpcyByZXF1aXJl
ZCBiZWNhdXNlIHdlIGhhdmUgdG8gbWFrZSBzdXJlIHRoYXQgdGhlIHRleHR1cmUgY3JlYXRlZCBp
biB0aGlzCisgICAgICAgIC8vIGNvbnRleHQgKHRoZSBjb21wb3NpdG9yIGNvbnRleHQpIGlzIGFj
dHVhbGx5IGNyZWF0ZWQgYnkgdGhlIHNlcnZpY2Ugc2lkZSBiZWZvcmUgdGhlIGNoaWxkIGNvbnRl
eHQKKyAgICAgICAgLy8gYXR0ZW1wdHMgdG8gdXNlIGl0IChpbiBwdWJsaXNoVG9QbGF0Zm9ybUxh
eWVyKS4gIGdsRmluaXNoKCkgaXMgY3VycmVudGx5IHRoZSBvbmx5IGNhbGwgd2l0aCBzdHJvbmcK
KyAgICAgICAgLy8gZW5vdWdoIHNlbWFudGljcyB0byBwcm9taXNlIHRoaXMsIGJ1dCBpcyBhY3R1
YWxseSBtdWNoIHN0cm9uZ2VyLiAgSWRlYWxseSB3ZSdkIGRvIHNvbWV0aGluZyBsaWtlCisgICAg
ICAgIC8vIGluc2VydGluZyBhIGZlbmNlIGhlcmUgYW5kIHdhaXRpbmcgZm9yIGl0IGJlZm9yZSB0
cnlpbmcgdG8gcHVibGlzaC4KKyAgICAgICAgZ2xGaW5pc2goKTsKKyAgICB9CisgICAgLy8gVXBk
YXRlIHRoZSBjb250ZW50cyBvZiB0aGUgdGV4dHVyZSB1c2VkIGJ5IHRoZSBjb21wb3NpdG9yLgor
ICAgIGlmIChtX2NvbnRlbnRzRGlydHkpIHsKKyAgICAgICAgbV9kcmF3aW5nQnVmZmVyLT5wdWJs
aXNoVG9QbGF0Zm9ybUxheWVyKHRoaXMpOworICAgICAgICBtX2NvbnRlbnRzRGlydHkgPSBmYWxz
ZTsKKyAgICB9Cit9CisKK3ZvaWQgQ2FudmFzMkRMYXllckNocm9taXVtOjpzZXREcmF3aW5nQnVm
ZmVyKERyYXdpbmdCdWZmZXIqIGRyYXdpbmdCdWZmZXIpCit7CisgICAgaWYgKGRyYXdpbmdCdWZm
ZXIgIT0gbV9kcmF3aW5nQnVmZmVyLmdldCgpKSB7CisgICAgICAgIG1fZHJhd2luZ0J1ZmZlciA9
IGRyYXdpbmdCdWZmZXI7CisgICAgICAgIG1fdGV4dHVyZUNoYW5nZWQgPSB0cnVlOworICAgIH0K
K30KKwordW5zaWduZWQgQ2FudmFzMkRMYXllckNocm9taXVtOjp0ZXh0dXJlSWQoKSBjb25zdAor
eworICAgIHJldHVybiBtX3RleHR1cmVJZDsKK30KKworfQorI2VuZGlmIC8vIFVTRShBQ0NFTEVS
QVRFRF9DT01QT1NJVElORykKZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2hyb21pdW0vQ2FudmFzMkRMYXllckNocm9taXVtLmggYi9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2Nocm9taXVtL0NhbnZhczJETGF5ZXJDaHJvbWl1bS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjAzMTEzZDY1
MmE1YTIyZjA5M2M4YTllOWY1ZjI1N2VmZWMyNjJmYzUKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0NhbnZhczJETGF5ZXJDaHJvbWl1bS5oCkBA
IC0wLDAgKzEsNjQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgR29vZ2xlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyAq
IG1ldDoKKyAqCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICAgICogUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogY29weXJpZ2h0
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lcgorICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZQorICogZGlzdHJpYnV0aW9uLgorICogICAgICogTmVpdGhlciB0aGUgbmFt
ZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworICogY29udHJpYnV0b3JzIG1h
eSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyAq
IHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24u
CisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERF
UlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorICogQSBQ
QVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBD
T1BZUklHSFQKKyAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgUFJP
Q1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisg
KiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KKyAqLworCisKKyNpZm5kZWYgQ2FudmFzMkRMYXllckNocm9taXVtX2gKKyNkZWZpbmUg
Q2FudmFzMkRMYXllckNocm9taXVtX2gKKworI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElO
RykKKworI2luY2x1ZGUgIkNhbnZhc0xheWVyQ2hyb21pdW0uaCIKKworbmFtZXNwYWNlIFdlYkNv
cmUgeworCitjbGFzcyBEcmF3aW5nQnVmZmVyOworCisvLyBBIGxheWVyIGNvbnRhaW5pbmcgYW4g
YWNjZWxlcmF0ZWQgMmQgY2FudmFzCitjbGFzcyBDYW52YXMyRExheWVyQ2hyb21pdW0gOiBwdWJs
aWMgQ2FudmFzTGF5ZXJDaHJvbWl1bSB7CitwdWJsaWM6CisgICAgc3RhdGljIFBhc3NSZWZQdHI8
Q2FudmFzMkRMYXllckNocm9taXVtPiBjcmVhdGUoRHJhd2luZ0J1ZmZlciosIEdyYXBoaWNzTGF5
ZXJDaHJvbWl1bSogb3duZXIpOworICAgIHZpcnR1YWwgfkNhbnZhczJETGF5ZXJDaHJvbWl1bSgp
OworICAgIHZpcnR1YWwgYm9vbCBkcmF3c0NvbnRlbnQoKSB7IHJldHVybiB0cnVlOyB9CisgICAg
dmlydHVhbCB2b2lkIHVwZGF0ZUNvbnRlbnRzKCk7CisKKyAgICB2b2lkIHNldERyYXdpbmdCdWZm
ZXIoRHJhd2luZ0J1ZmZlciopOworICAgIHVuc2lnbmVkIHRleHR1cmVJZCgpIGNvbnN0OworCitw
cml2YXRlOgorICAgIGV4cGxpY2l0IENhbnZhczJETGF5ZXJDaHJvbWl1bShEcmF3aW5nQnVmZmVy
KiwgR3JhcGhpY3NMYXllckNocm9taXVtKiBvd25lcik7CisgICAgUmVmUHRyPERyYXdpbmdCdWZm
ZXI+IG1fZHJhd2luZ0J1ZmZlcjsKKworICAgIHN0YXRpYyB1bnNpZ25lZCBtX3NoYWRlclByb2dy
YW1JZDsKK307CisKK30KKyNlbmRpZiAvLyBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCisK
KyNlbmRpZgpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9D
YW52YXNMYXllckNocm9taXVtLmNwcCBiL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21p
dW0vQ2FudmFzTGF5ZXJDaHJvbWl1bS5jcHAKaW5kZXggYmJmMDkxYzJhNjcwZDdjMzZlOTIzOGUx
YjhjYzM1MGJhMzgzZTgxMC4uNTZhNzI2MjIxZTViMDZlOTU2ZTc2NWUwYTM1ZDFjN2FmOTUzZjI0
MSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9DYW52YXNM
YXllckNocm9taXVtLmNwcAorKysgYi9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVt
L0NhbnZhc0xheWVyQ2hyb21pdW0uY3BwCkBAIC0zNCwxMiArMzQsMTQgQEAKIAogI2luY2x1ZGUg
IkNhbnZhc0xheWVyQ2hyb21pdW0uaCIKIAotI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dDNELmgi
CiAjaW5jbHVkZSAiTGF5ZXJSZW5kZXJlckNocm9taXVtLmgiCisKICNpbmNsdWRlIDxHTEVTMi9n
bDIuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCit1bnNpZ25lZCBDYW52YXNMYXllckNocm9t
aXVtOjptX3NoYWRlclByb2dyYW1JZCA9IDA7CisKIENhbnZhc0xheWVyQ2hyb21pdW06OlNoYXJl
ZFZhbHVlczo6U2hhcmVkVmFsdWVzKCkKICAgICA6IG1fY2FudmFzU2hhZGVyUHJvZ3JhbSgwKQog
ICAgICwgbV9zaGFkZXJTYW1wbGVyTG9jYXRpb24oLTEpCkBAIC05Myw0OSArOTUsMTUgQEAgQ2Fu
dmFzTGF5ZXJDaHJvbWl1bTo6U2hhcmVkVmFsdWVzOjp+U2hhcmVkVmFsdWVzKCkKICAgICAgICAg
R0xDKGdsRGVsZXRlUHJvZ3JhbShtX2NhbnZhc1NoYWRlclByb2dyYW0pKTsKIH0KIAotUGFzc1Jl
ZlB0cjxDYW52YXNMYXllckNocm9taXVtPiBDYW52YXNMYXllckNocm9taXVtOjpjcmVhdGUoR3Jh
cGhpY3NMYXllckNocm9taXVtKiBvd25lcikKLXsKLSAgICByZXR1cm4gYWRvcHRSZWYobmV3IENh
bnZhc0xheWVyQ2hyb21pdW0ob3duZXIpKTsKLX0KLQogQ2FudmFzTGF5ZXJDaHJvbWl1bTo6Q2Fu
dmFzTGF5ZXJDaHJvbWl1bShHcmFwaGljc0xheWVyQ2hyb21pdW0qIG93bmVyKQogICAgIDogTGF5
ZXJDaHJvbWl1bShvd25lcikKLSAgICAsIG1fY29udGV4dCgwKQorICAgICwgbV90ZXh0dXJlQ2hh
bmdlZCh0cnVlKQogICAgICwgbV90ZXh0dXJlSWQoMCkKLSAgICAsIG1fdGV4dHVyZUNoYW5nZWQo
ZmFsc2UpCi17Ci19Ci0KLXZvaWQgQ2FudmFzTGF5ZXJDaHJvbWl1bTo6dXBkYXRlQ29udGVudHMo
KQogewotICAgIEFTU0VSVChtX2NvbnRleHQpOwotICAgIGlmIChtX3RleHR1cmVDaGFuZ2VkKSB7
Ci0gICAgICAgIGdsQmluZFRleHR1cmUoR0xfVEVYVFVSRV8yRCwgbV90ZXh0dXJlSWQpOwotICAg
ICAgICAvLyBTZXQgdGhlIG1pbi1tYWcgZmlsdGVycyB0byBsaW5lYXIgYW5kIHdyYXAgbW9kZXMg
dG8gR0xfQ0xBTVBfVE9fRURHRQotICAgICAgICAvLyB0byBnZXQgYXJvdW5kIE5QT1QgdGV4dHVy
ZSBsaW1pdGF0aW9ucyBvZiBHTEVTLgotICAgICAgICBnbFRleFBhcmFtZXRlcmYoR0xfVEVYVFVS
RV8yRCwgR0xfVEVYVFVSRV9NSU5fRklMVEVSLCBHTF9MSU5FQVIpOwotICAgICAgICBnbFRleFBh
cmFtZXRlcmYoR0xfVEVYVFVSRV8yRCwgR0xfVEVYVFVSRV9NQUdfRklMVEVSLCBHTF9MSU5FQVIp
OwotICAgICAgICBnbFRleFBhcmFtZXRlcmYoR0xfVEVYVFVSRV8yRCwgR0xfVEVYVFVSRV9XUkFQ
X1MsIEdMX0NMQU1QX1RPX0VER0UpOwotICAgICAgICBnbFRleFBhcmFtZXRlcmYoR0xfVEVYVFVS
RV8yRCwgR0xfVEVYVFVSRV9XUkFQX1QsIEdMX0NMQU1QX1RPX0VER0UpOwotICAgICAgICBtX3Rl
eHR1cmVDaGFuZ2VkID0gZmFsc2U7Ci0gICAgfQotICAgIC8vIFVwZGF0ZSB0aGUgY29udGVudHMg
b2YgdGhlIHRleHR1cmUgdXNlZCBieSB0aGUgY29tcG9zaXRvci4KLSAgICBpZiAobV9jb250ZW50
c0RpcnR5KSB7Ci0gICAgICAgIGlmIChtX3ByZXBhcmVUZXh0dXJlQ2FsbGJhY2spCi0gICAgICAg
ICAgICBtX3ByZXBhcmVUZXh0dXJlQ2FsbGJhY2stPndpbGxQcmVwYXJlVGV4dHVyZSgpOwotICAg
ICAgICBtX2NvbnRleHQtPnByZXBhcmVUZXh0dXJlKCk7Ci0gICAgICAgIG1fY29udGVudHNEaXJ0
eSA9IGZhbHNlOwotICAgIH0KIH0KIAotdm9pZCBDYW52YXNMYXllckNocm9taXVtOjpzZXRDb250
ZXh0KGNvbnN0IEdyYXBoaWNzQ29udGV4dDNEKiBjb250ZXh0KQorQ2FudmFzTGF5ZXJDaHJvbWl1
bTo6fkNhbnZhc0xheWVyQ2hyb21pdW0oKQogewotICAgIG1fY29udGV4dCA9IGNvbnN0X2Nhc3Q8
R3JhcGhpY3NDb250ZXh0M0QqPihjb250ZXh0KTsKLQotICAgIHVuc2lnbmVkIGludCB0ZXh0dXJl
SWQgPSBtX2NvbnRleHQtPnBsYXRmb3JtVGV4dHVyZSgpOwotICAgIGlmICh0ZXh0dXJlSWQgIT0g
bV90ZXh0dXJlSWQpCi0gICAgICAgIG1fdGV4dHVyZUNoYW5nZWQgPSB0cnVlOwotICAgIG1fdGV4
dHVyZUlkID0gdGV4dHVyZUlkOwogfQogCiB2b2lkIENhbnZhc0xheWVyQ2hyb21pdW06OmRyYXco
KQpAQCAtMTUwLDYgKzExOCw3IEBAIHZvaWQgQ2FudmFzTGF5ZXJDaHJvbWl1bTo6ZHJhdygpCiAg
ICAgZHJhd1RleHR1cmVkUXVhZChsYXllclJlbmRlcmVyKCktPnByb2plY3Rpb25NYXRyaXgoKSwg
ZHJhd1RyYW5zZm9ybSgpLAogICAgICAgICAgICAgICAgICAgICAgYm91bmRzKCkud2lkdGgoKSwg
Ym91bmRzKCkuaGVpZ2h0KCksIGRyYXdPcGFjaXR5KCksCiAgICAgICAgICAgICAgICAgICAgICBz
di0+c2hhZGVyTWF0cml4TG9jYXRpb24oKSwgc3YtPnNoYWRlckFscGhhTG9jYXRpb24oKSk7CisK
IH0KIAogfQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9D
YW52YXNMYXllckNocm9taXVtLmggYi9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVt
L0NhbnZhc0xheWVyQ2hyb21pdW0uaAppbmRleCAwNTNlZmZmYTAxZTE0MjgzODEyMTQ1M2MxYTRi
OGExOTRiNmZhNGMxLi5kNTkxYzczNzU5OTA0ZjhkMjkxZDcxNzBjY2MzYWEwZTZlMzMxZjFiIDEw
MDY0NAotLS0gYS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0NhbnZhc0xheWVy
Q2hyb21pdW0uaAorKysgYi9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0NhbnZh
c0xheWVyQ2hyb21pdW0uaApAQCAtMzgsMTcgKzM4LDEyIEBACiAKIG5hbWVzcGFjZSBXZWJDb3Jl
IHsKIAotY2xhc3MgR3JhcGhpY3NDb250ZXh0M0Q7Ci0KLS8vIEEgTGF5ZXIgY29udGFpbmluZyBh
IFdlYkdMIG9yIGFjY2VsZXJhdGVkIDJkIGNhbnZhcworLy8gQmFzZSBjbGFzcyBmb3IgV2ViR0wg
YW5kIGFjY2VsZXJhdGVkIDJkIGNhbnZhc2VzLgogY2xhc3MgQ2FudmFzTGF5ZXJDaHJvbWl1bSA6
IHB1YmxpYyBMYXllckNocm9taXVtIHsKIHB1YmxpYzoKLSAgICBzdGF0aWMgUGFzc1JlZlB0cjxD
YW52YXNMYXllckNocm9taXVtPiBjcmVhdGUoR3JhcGhpY3NMYXllckNocm9taXVtKiBvd25lciA9
IDApOwotICAgIHZpcnR1YWwgYm9vbCBkcmF3c0NvbnRlbnQoKSB7IHJldHVybiBtX2NvbnRleHQ7
IH0KLSAgICB2aXJ0dWFsIHZvaWQgdXBkYXRlQ29udGVudHMoKTsKLSAgICB2aXJ0dWFsIHZvaWQg
ZHJhdygpOworICAgIHZpcnR1YWwgfkNhbnZhc0xheWVyQ2hyb21pdW0oKTsKIAotICAgIHZvaWQg
c2V0Q29udGV4dChjb25zdCBHcmFwaGljc0NvbnRleHQzRCogY29udGV4dCk7CisgICAgdmlydHVh
bCB2b2lkIGRyYXcoKTsKIAogICAgIGNsYXNzIFNoYXJlZFZhbHVlcyB7CiAgICAgcHVibGljOgpA
QCAtNjksMjEgKzY0LDE2IEBAIHB1YmxpYzoKICAgICAgICAgYm9vbCBtX2luaXRpYWxpemVkOwog
ICAgIH07CiAKLSAgICBjbGFzcyBQcmVwYXJlVGV4dHVyZUNhbGxiYWNrIDogcHVibGljIE5vbmNv
cHlhYmxlIHsKLSAgICBwdWJsaWM6Ci0gICAgICAgIHZpcnR1YWwgdm9pZCB3aWxsUHJlcGFyZVRl
eHR1cmUoKSA9IDA7Ci0gICAgfTsKLSAgICB2b2lkIHNldFByZXBhcmVUZXh0dXJlQ2FsbGJhY2so
UGFzc093blB0cjxQcmVwYXJlVGV4dHVyZUNhbGxiYWNrPiBjYWxsYmFjaykgeyBtX3ByZXBhcmVU
ZXh0dXJlQ2FsbGJhY2sgPSBjYWxsYmFjazsgfQotCi1wcml2YXRlOgorcHJvdGVjdGVkOgogICAg
IGV4cGxpY2l0IENhbnZhc0xheWVyQ2hyb21pdW0oR3JhcGhpY3NMYXllckNocm9taXVtKiBvd25l
cik7Ci0gICAgR3JhcGhpY3NDb250ZXh0M0QqIG1fY29udGV4dDsKLSAgICB1bnNpZ25lZCBtX3Rl
eHR1cmVJZDsKICAgICBib29sIG1fdGV4dHVyZUNoYW5nZWQ7Ci0gICAgT3duUHRyPFByZXBhcmVU
ZXh0dXJlQ2FsbGJhY2s+IG1fcHJlcGFyZVRleHR1cmVDYWxsYmFjazsKKyAgICB1bnNpZ25lZCBt
X3RleHR1cmVJZDsKKworcHJpdmF0ZToKKyAgICBzdGF0aWMgdW5zaWduZWQgbV9zaGFkZXJQcm9n
cmFtSWQ7CiB9OwogCiB9CiAjZW5kaWYgLy8gVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQog
Ci0jZW5kaWYKKyNlbmRpZiAvLyBDYW52YXNMYXllckNocm9taXVtX2gKZGlmZiAtLWdpdCBhL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vRHJhd2luZ0J1ZmZlckNocm9taXVtLmNw
cCBiL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vRHJhd2luZ0J1ZmZlckNocm9t
aXVtLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwLi41ZjAyMGI1YjIxM2U0ZDNkNjc4OTk4YjYzYmU2ZDY4YWVjNWZk
YzE5Ci0tLSAvZGV2L251bGwKKysrIGIvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1
bS9EcmF3aW5nQnVmZmVyQ2hyb21pdW0uY3BwCkBAIC0wLDAgKzEsOTkgQEAKKy8qCisgKiBDb3B5
cmlnaHQgKGMpIDIwMTAsIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisgKiBtZXQ6CisgKgorICogICAgICogUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyAqIGluIHRoZSBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqIGRpc3RyaWJ1
dGlvbi4KKyAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBu
YW1lcyBvZiBpdHMKKyAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHBy
b21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisgKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3Bl
Y2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJB
UyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBPV05FUiBPUiBDT05U
UklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwK
KyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT
SU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkg
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNv
bmZpZy5oIgorCisjaW5jbHVkZSAiRHJhd2luZ0J1ZmZlci5oIgorCisjaW5jbHVkZSAiQ2FudmFz
MkRMYXllckNocm9taXVtLmgiCisjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0M0QuaCIKKyNpbmNs
dWRlICJTaGFyZWRDb250ZXh0M0QuaCIKKworI2luY2x1ZGUgPEdMRVMyL2dsMi5oPgorI2lmbmRl
ZiBHTF9HTEVYVF9QUk9UT1RZUEVTCisjZGVmaW5lIEdMX0dMRVhUX1BST1RPVFlQRVMgMQorI2Vu
ZGlmCisjaW5jbHVkZSA8R0xFUzIvZ2wyZXh0Lmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKwor
c3RydWN0IERyYXdpbmdCdWZmZXJJbnRlcm5hbCB7CisgICAgdW5zaWduZWQgb2Zmc2NyZWVuQ29s
b3JUZXh0dXJlOworfTsKKworRHJhd2luZ0J1ZmZlcjo6RHJhd2luZ0J1ZmZlcihTaGFyZWRDb250
ZXh0M0QqIGNvbnRleHQsIGNvbnN0IEludFNpemUmIHNpemUsIHVuc2lnbmVkIGZyYW1lYnVmZmVy
KQorICAgIDogbV9jb250ZXh0KGNvbnRleHQpCisgICAgLCBtX3NpemUoc2l6ZSkKKyAgICAsIG1f
ZnJhbWVidWZmZXIoZnJhbWVidWZmZXIpCisgICAgLCBtX2ludGVybmFsKG5ldyBEcmF3aW5nQnVm
ZmVySW50ZXJuYWwpCit7CisgICAgY29udGV4dC0+YmluZEZyYW1lYnVmZmVyKGZyYW1lYnVmZmVy
KTsKKworICAgIC8vIENvbG9yIHRleHR1cmUKKyAgICB1bnNpZ25lZCBvZmZzY3JlZW5Db2xvclRl
eHR1cmUgPSBjb250ZXh0LT5jcmVhdGVUZXh0dXJlKCk7CisgICAgQVNTRVJUKG9mZnNjcmVlbkNv
bG9yVGV4dHVyZSk7CisgICAgaWYgKCFvZmZzY3JlZW5Db2xvclRleHR1cmUpIHsKKyAgICAgICAg
Y29udGV4dC0+ZGVsZXRlRnJhbWVidWZmZXIoZnJhbWVidWZmZXIpOworICAgICAgICByZXR1cm47
CisgICAgfQorICAgIGNvbnRleHQtPmJpbmRUZXh0dXJlKEdyYXBoaWNzQ29udGV4dDNEOjpURVhU
VVJFXzJELCBvZmZzY3JlZW5Db2xvclRleHR1cmUpOworICAgIGNvbnRleHQtPnRleFBhcmFtZXRl
cmkoR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQsIEdyYXBoaWNzQ29udGV4dDNEOjpURVhU
VVJFX01BR19GSUxURVIsIEdyYXBoaWNzQ29udGV4dDNEOjpORUFSRVNUKTsKKyAgICBjb250ZXh0
LT50ZXhQYXJhbWV0ZXJpKEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFXzJELCBHcmFwaGljc0Nv
bnRleHQzRDo6VEVYVFVSRV9NSU5fRklMVEVSLCBHcmFwaGljc0NvbnRleHQzRDo6TkVBUkVTVCk7
CisgICAgY29udGV4dC0+dGV4UGFyYW1ldGVyaShHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV8y
RCwgR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfV1JBUF9TLCBHcmFwaGljc0NvbnRleHQzRDo6
Q0xBTVBfVE9fRURHRSk7CisgICAgY29udGV4dC0+dGV4UGFyYW1ldGVyaShHcmFwaGljc0NvbnRl
eHQzRDo6VEVYVFVSRV8yRCwgR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfV1JBUF9ULCBHcmFw
aGljc0NvbnRleHQzRDo6Q0xBTVBfVE9fRURHRSk7CisgICAgY29udGV4dC0+dGV4SW1hZ2UyRChH
cmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV8yRCwgMCwgR3JhcGhpY3NDb250ZXh0M0Q6OlJHQkEs
IHNpemUud2lkdGgoKSwgc2l6ZS5oZWlnaHQoKSwgMCwgR3JhcGhpY3NDb250ZXh0M0Q6OlJHQkEs
IEdyYXBoaWNzQ29udGV4dDNEOjpVTlNJR05FRF9CWVRFLCAwKTsKKworICAgIGNvbnRleHQtPmZy
YW1lYnVmZmVyVGV4dHVyZTJEKEdyYXBoaWNzQ29udGV4dDNEOjpGUkFNRUJVRkZFUiwgR3JhcGhp
Y3NDb250ZXh0M0Q6OkNPTE9SX0FUVEFDSE1FTlQwLCBHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVS
RV8yRCwgb2Zmc2NyZWVuQ29sb3JUZXh0dXJlLCAwKTsKKworICAgIG1faW50ZXJuYWwtPm9mZnNj
cmVlbkNvbG9yVGV4dHVyZSA9IG9mZnNjcmVlbkNvbG9yVGV4dHVyZTsKK30KKworRHJhd2luZ0J1
ZmZlcjo6fkRyYXdpbmdCdWZmZXIoKQoreworICAgIG1fY29udGV4dC0+ZGVsZXRlRnJhbWVidWZm
ZXIobV9mcmFtZWJ1ZmZlcik7Cit9CisKK3ZvaWQgRHJhd2luZ0J1ZmZlcjo6cHVibGlzaFRvUGxh
dGZvcm1MYXllcihQbGF0Zm9ybUxheWVyKiBwbCkKK3sKKyAgICBpZiAobV9jYWxsYmFjaykKKyAg
ICAgICAgbV9jYWxsYmFjay0+d2lsbFB1Ymxpc2goKTsKKyAgICBDYW52YXMyRExheWVyQ2hyb21p
dW0qIGNhbnZhczJETGF5ZXIgPSBzdGF0aWNfY2FzdDxDYW52YXMyRExheWVyQ2hyb21pdW0qPihw
bCk7CisgICAgdW5zaWduZWQgcGFyZW50VGV4dHVyZSA9IGNhbnZhczJETGF5ZXItPnRleHR1cmVJ
ZCgpOworICAgIC8vIEZJWE1FOiBXZSBkbyB0aGUgY29weSBpbiB0aGUgY2FudmFzJyAoY2hpbGQp
IGNvbnRleHQgc28gdGhhdCBpdCBleGVjdXRlcyBpbiB0aGUgY29ycmVjdCBvcmRlciByZWxhdGl2
ZSB0bworICAgIC8vIG90aGVyIGNvbW1hbmRzIGluIHRoZSBjaGlsZCBjb250ZXh0LiAgVGhpcyBl
bnN1cmVzIHRoYXQgdGhlIHBhcmVudCB0ZXh0dXJlIGFsd2F5cyBjb250YWlucyBhIGNvbXBsZXRl
CisgICAgLy8gZnJhbWUgYW5kIG5vdCBzb21lIGludGVybWVkaWF0ZSByZXN1bHQuICBIb3dldmVy
LCB0aGVyZSBpcyBubyBzeW5jaHJvbml6YXRpb24gdG8gZW5zdXJlIHRoYXQgdGhpcyBjb3B5Cisg
ICAgLy8gaGFwcGVucyBiZWZvcmUgdGhlIGNvbXBvc2l0b3IgZHJhd3MuICBUaGlzIG1lYW5zIHdl
IG1pZ2h0IGRyYXcgc3RhbGUgZnJhbWVzIHNvbWV0aW1lcy4gIElkZWFsbHkgdGhpcworICAgIC8v
IHdvdWxkIGluc2VydCBhIGZlbmNlIGludG8gdGhlIGNoaWxkIGNvbW1hbmQgc3RyZWFtIHRoYXQg
dGhlIGNvbXBvc2l0b3IgY291bGQgd2FpdCBmb3IuCisgICAgbV9jb250ZXh0LT5tYWtlQ29udGV4
dEN1cnJlbnQoKTsKKyAgICBnbENvcHlUZXh0dXJlVG9QYXJlbnRUZXh0dXJlKG1faW50ZXJuYWwt
Pm9mZnNjcmVlbkNvbG9yVGV4dHVyZSwgcGFyZW50VGV4dHVyZSk7CisgICAgZ2xGbHVzaCgpOwor
fQorCit9CmRpZmYgLS1naXQgYS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0dM
RVMyQ2FudmFzLmNwcCBiL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vR0xFUzJD
YW52YXMuY3BwCmluZGV4IDgyZDRjMGIwMzNhMTRmOTFlNTY2ZjdiNGVlYTA4YjA2NjkyZWJiZDMu
LjI4Njk1MjAxMDc2YjhjNDE0MzE5NmQ1ZWI4NTRmYWVkNTNjNTAxMjcgMTAwNjQ0Ci0tLSBhL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vR0xFUzJDYW52YXMuY3BwCisrKyBiL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vR0xFUzJDYW52YXMuY3BwCkBAIC0zMiwx
MCArMzIsMTIgQEAKIAogI2luY2x1ZGUgIkdMRVMyQ2FudmFzLmgiCiAKKyNpbmNsdWRlICJEcmF3
aW5nQnVmZmVyLmgiCiAjaW5jbHVkZSAiRmxvYXRSZWN0LmgiCiAjaW5jbHVkZSAiR3JhcGhpY3ND
b250ZXh0M0QuaCIKICNpbmNsdWRlICJJbnRSZWN0LmgiCiAjaW5jbHVkZSAiUGxhdGZvcm1TdHJp
bmcuaCIKKyNpbmNsdWRlICJTaGFyZWRDb250ZXh0M0QuaCIKICNpbmNsdWRlICJTb2xpZEZpbGxT
aGFkZXIuaCIKICNpbmNsdWRlICJUZXhTaGFkZXIuaCIKICNpbmNsdWRlICJUZXh0dXJlLmgiCkBA
IC02MSwzNyArNjMsMzUgQEAgc3RydWN0IEdMRVMyQ2FudmFzOjpTdGF0ZSB7CiAgICAgQWZmaW5l
VHJhbnNmb3JtIG1fY3RtOwogfTsKIAotR0xFUzJDYW52YXM6OkdMRVMyQ2FudmFzKEdyYXBoaWNz
Q29udGV4dDNEKiBjb250ZXh0LCBjb25zdCBJbnRTaXplJiBzaXplKQotICAgIDogbV9jb250ZXh0
KGNvbnRleHQpCitHTEVTMkNhbnZhczo6R0xFUzJDYW52YXMoU2hhcmVkQ29udGV4dDNEKiBjb250
ZXh0LCBEcmF3aW5nQnVmZmVyKiBkcmF3aW5nQnVmZmVyLCBjb25zdCBJbnRTaXplJiBzaXplKQor
ICAgIDogbV9zaXplKHNpemUpCisgICAgLCBtX2NvbnRleHQoY29udGV4dCkKKyAgICAsIG1fZHJh
d2luZ0J1ZmZlcihkcmF3aW5nQnVmZmVyKQogICAgICwgbV9zdGF0ZSgwKQotICAgICwgbV9xdWFk
VmVydGljZXMoMCkKLSAgICAsIG1fc29saWRGaWxsU2hhZGVyKFNvbGlkRmlsbFNoYWRlcjo6Y3Jl
YXRlKGNvbnRleHQpKQotICAgICwgbV90ZXhTaGFkZXIoVGV4U2hhZGVyOjpjcmVhdGUoY29udGV4
dCkpCiB7CiAgICAgbV9mbGlwTWF0cml4LnRyYW5zbGF0ZSgtMS4wZiwgMS4wZik7CiAgICAgbV9m
bGlwTWF0cml4LnNjYWxlKDIuMGYgLyBzaXplLndpZHRoKCksIC0yLjBmIC8gc2l6ZS5oZWlnaHQo
KSk7CiAKLSAgICBtX2NvbnRleHQtPnJlc2hhcGUoc2l6ZS53aWR0aCgpLCBzaXplLmhlaWdodCgp
KTsKLSAgICBtX2NvbnRleHQtPnZpZXdwb3J0KDAsIDAsIHNpemUud2lkdGgoKSwgc2l6ZS5oZWln
aHQoKSk7Ci0KICAgICBtX3N0YXRlU3RhY2suYXBwZW5kKFN0YXRlKCkpOwogICAgIG1fc3RhdGUg
PSAmbV9zdGF0ZVN0YWNrLmxhc3QoKTsKLQotICAgIC8vIEZvcmNlIHRoZSBzb3VyY2Ugb3ZlciBj
b21wb3NpdGUgbW9kZSB0byBiZSBhcHBsaWVkLgotICAgIG1fbGFzdENvbXBvc2l0ZU9wID0gQ29t
cG9zaXRlQ2xlYXI7Ci0gICAgYXBwbHlDb21wb3NpdGVPcGVyYXRvcihDb21wb3NpdGVTb3VyY2VP
dmVyKTsKIH0KIAogR0xFUzJDYW52YXM6On5HTEVTMkNhbnZhcygpCiB7Ci0gICAgbV9jb250ZXh0
LT5kZWxldGVCdWZmZXIobV9xdWFkVmVydGljZXMpOworfQorCit2b2lkIEdMRVMyQ2FudmFzOjpi
aW5kRnJhbWVidWZmZXIoKQoreworICAgIG1fZHJhd2luZ0J1ZmZlci0+YmluZCgpOwogfQogCiB2
b2lkIEdMRVMyQ2FudmFzOjpjbGVhclJlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0KQogeworICAg
IGJpbmRGcmFtZWJ1ZmZlcigpOwogICAgIGlmIChtX3N0YXRlLT5tX2N0bS5pc0lkZW50aXR5KCkp
IHsKLSAgICAgICAgbV9jb250ZXh0LT5zY2lzc29yKHJlY3QueCgpLCByZWN0LnkoKSwgcmVjdC53
aWR0aCgpLCByZWN0LmhlaWdodCgpKTsKKyAgICAgICAgbV9jb250ZXh0LT5zY2lzc29yKHJlY3Qp
OwogICAgICAgICBtX2NvbnRleHQtPmVuYWJsZShHcmFwaGljc0NvbnRleHQzRDo6U0NJU1NPUl9U
RVNUKTsKKyAgICAgICAgbV9jb250ZXh0LT5jbGVhckNvbG9yKENvbG9yKFJHQkEzMigwKSkpOwog
ICAgICAgICBtX2NvbnRleHQtPmNsZWFyKEdyYXBoaWNzQ29udGV4dDNEOjpDT0xPUl9CVUZGRVJf
QklUKTsKICAgICAgICAgbV9jb250ZXh0LT5kaXNhYmxlKEdyYXBoaWNzQ29udGV4dDNEOjpTQ0lT
U09SX1RFU1QpOwogICAgIH0gZWxzZSB7CkBAIC0xMDQsMTYgKzEwNCwxNyBAQCB2b2lkIEdMRVMy
Q2FudmFzOjpjbGVhclJlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0KQogCiB2b2lkIEdMRVMyQ2Fu
dmFzOjpmaWxsUmVjdChjb25zdCBGbG9hdFJlY3QmIHJlY3QsIGNvbnN0IENvbG9yJiBjb2xvciwg
Q29sb3JTcGFjZSBjb2xvclNwYWNlKQogewotICAgIGFwcGx5Q29tcG9zaXRlT3BlcmF0b3IobV9z
dGF0ZS0+bV9jb21wb3NpdGVPcCk7Ci0KLSAgICBtX2NvbnRleHQtPmJpbmRCdWZmZXIoR3JhcGhp
Y3NDb250ZXh0M0Q6OkFSUkFZX0JVRkZFUiwgZ2V0UXVhZFZlcnRpY2VzKCkpOworICAgIG1fY29u
dGV4dC0+YXBwbHlDb21wb3NpdGVPcGVyYXRvcihtX3N0YXRlLT5tX2NvbXBvc2l0ZU9wKTsKKyAg
ICBtX2NvbnRleHQtPnVzZVF1YWRWZXJ0aWNlcygpOwogCiAgICAgQWZmaW5lVHJhbnNmb3JtIG1h
dHJpeChtX2ZsaXBNYXRyaXgpOwogICAgIG1hdHJpeC5tdWx0TGVmdChtX3N0YXRlLT5tX2N0bSk7
CiAgICAgbWF0cml4LnRyYW5zbGF0ZShyZWN0LngoKSwgcmVjdC55KCkpOwogICAgIG1hdHJpeC5z
Y2FsZShyZWN0LndpZHRoKCksIHJlY3QuaGVpZ2h0KCkpOwotICAgIG1fc29saWRGaWxsU2hhZGVy
LT51c2UobWF0cml4LCBjb2xvcik7CiAKKyAgICBtX2NvbnRleHQtPnVzZUZpbGxTb2xpZFByb2dy
YW0obWF0cml4LCBjb2xvcik7CisKKyAgICBiaW5kRnJhbWVidWZmZXIoKTsKICAgICBtX2NvbnRl
eHQtPmRyYXdBcnJheXMoR3JhcGhpY3NDb250ZXh0M0Q6OlRSSUFOR0xFX1NUUklQLCAwLCA0KTsK
IH0KIApAQCAtMTY1LDIxICsxNjYsMzMgQEAgdm9pZCBHTEVTMkNhbnZhczo6cmVzdG9yZSgpCiAg
ICAgbV9zdGF0ZSA9ICZtX3N0YXRlU3RhY2subGFzdCgpOwogfQogCit2b2lkIEdMRVMyQ2FudmFz
OjpkcmF3VGV4dHVyZWRSZWN0KHVuc2lnbmVkIHRleHR1cmUsIGNvbnN0IEludFNpemUmIHRleHR1
cmVTaXplLCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsIGNvbnN0IEZsb2F0UmVjdCYgZHN0UmVj
dCwgQ29sb3JTcGFjZSBjb2xvclNwYWNlLCBDb21wb3NpdGVPcGVyYXRvciBjb21wb3NpdGVPcCkK
K3sKKyAgICBtX2NvbnRleHQtPmFwcGx5Q29tcG9zaXRlT3BlcmF0b3IoY29tcG9zaXRlT3ApOwor
CisgICAgbV9jb250ZXh0LT51c2VRdWFkVmVydGljZXMoKTsKKyAgICBtX2NvbnRleHQtPnNldEFj
dGl2ZVRleHR1cmUoR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkUwKTsKKworICAgIG1fY29udGV4
dC0+YmluZFRleHR1cmUoR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQsIHRleHR1cmUpOwor
CisgICAgZHJhd1F1YWQodGV4dHVyZVNpemUsIHNyY1JlY3QsIGRzdFJlY3QsIG1fc3RhdGUtPm1f
Y3RtLCBtX3N0YXRlLT5tX2FscGhhKTsKK30KKwogdm9pZCBHTEVTMkNhbnZhczo6ZHJhd1RleHR1
cmVkUmVjdChUZXh0dXJlKiB0ZXh0dXJlLCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsIGNvbnN0
IEZsb2F0UmVjdCYgZHN0UmVjdCwgQ29sb3JTcGFjZSBjb2xvclNwYWNlLCBDb21wb3NpdGVPcGVy
YXRvciBjb21wb3NpdGVPcCkKIHsKICAgICBkcmF3VGV4dHVyZWRSZWN0KHRleHR1cmUsIHNyY1Jl
Y3QsIGRzdFJlY3QsIG1fc3RhdGUtPm1fY3RtLCBtX3N0YXRlLT5tX2FscGhhLCBjb2xvclNwYWNl
LCBjb21wb3NpdGVPcCk7CiB9CiAKKwogdm9pZCBHTEVTMkNhbnZhczo6ZHJhd1RleHR1cmVkUmVj
dChUZXh0dXJlKiB0ZXh0dXJlLCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsIGNvbnN0IEZsb2F0
UmVjdCYgZHN0UmVjdCwgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiB0cmFuc2Zvcm0sIGZsb2F0IGFs
cGhhLCBDb2xvclNwYWNlIGNvbG9yU3BhY2UsIENvbXBvc2l0ZU9wZXJhdG9yIGNvbXBvc2l0ZU9w
KQogewotICAgIGFwcGx5Q29tcG9zaXRlT3BlcmF0b3IoY29tcG9zaXRlT3ApOwotCi0gICAgbV9j
b250ZXh0LT5iaW5kQnVmZmVyKEdyYXBoaWNzQ29udGV4dDNEOjpBUlJBWV9CVUZGRVIsIGdldFF1
YWRWZXJ0aWNlcygpKTsKLSAgICBjaGVja0dMRXJyb3IoImdsQmluZEJ1ZmZlciIpOwotCisgICAg
bV9jb250ZXh0LT5hcHBseUNvbXBvc2l0ZU9wZXJhdG9yKGNvbXBvc2l0ZU9wKTsKICAgICBjb25z
dCBUaWxpbmdEYXRhJiB0aWxlcyA9IHRleHR1cmUtPnRpbGVzKCk7CiAgICAgSW50UmVjdCB0aWxl
SWR4UmVjdCA9IHRpbGVzLm92ZXJsYXBwZWRUaWxlSW5kaWNlcyhzcmNSZWN0KTsKIAorICAgIG1f
Y29udGV4dC0+dXNlUXVhZFZlcnRpY2VzKCk7CisgICAgbV9jb250ZXh0LT5zZXRBY3RpdmVUZXh0
dXJlKEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFMCk7CisKICAgICBmb3IgKGludCB5ID0gdGls
ZUlkeFJlY3QueSgpOyB5IDw9IHRpbGVJZHhSZWN0LmJvdHRvbSgpOyB5KyspIHsKICAgICAgICAg
Zm9yIChpbnQgeCA9IHRpbGVJZHhSZWN0LngoKTsgeCA8PSB0aWxlSWR4UmVjdC5yaWdodCgpOyB4
KyspCiAgICAgICAgICAgICBkcmF3VGV4dHVyZWRSZWN0VGlsZSh0ZXh0dXJlLCB0aWxlcy50aWxl
SW5kZXgoeCwgeSksIHNyY1JlY3QsIGRzdFJlY3QsIHRyYW5zZm9ybSwgYWxwaGEpOwpAQCAtMTkz
LDcgKzIwNiw2IEBAIHZvaWQgR0xFUzJDYW52YXM6OmRyYXdUZXh0dXJlZFJlY3RUaWxlKFRleHR1
cmUqIHRleHR1cmUsIGludCB0aWxlLCBjb25zdCBGbG9hdFJlCiAKICAgICBjb25zdCBUaWxpbmdE
YXRhJiB0aWxlcyA9IHRleHR1cmUtPnRpbGVzKCk7CiAKLSAgICBtX2NvbnRleHQtPmFjdGl2ZVRl
eHR1cmUoR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkUwKTsKICAgICB0ZXh0dXJlLT5iaW5kVGls
ZSh0aWxlKTsKIAogICAgIEZsb2F0UmVjdCBzcmNSZWN0Q2xpcHBlZEluVGlsZVNwYWNlOwpAQCAt
MjAyLDE4ICsyMTQsMjQgQEAgdm9pZCBHTEVTMkNhbnZhczo6ZHJhd1RleHR1cmVkUmVjdFRpbGUo
VGV4dHVyZSogdGV4dHVyZSwgaW50IHRpbGUsIGNvbnN0IEZsb2F0UmUKIAogICAgIEludFJlY3Qg
dGlsZUJvdW5kc1dpdGhCb3JkZXIgPSB0aWxlcy50aWxlQm91bmRzV2l0aEJvcmRlcih0aWxlKTsK
IAorICAgIGRyYXdRdWFkKHRpbGVCb3VuZHNXaXRoQm9yZGVyLnNpemUoKSwgc3JjUmVjdENsaXBw
ZWRJblRpbGVTcGFjZSwgZHN0UmVjdEludGVyc2VjdGVkLCB0cmFuc2Zvcm0sIGFscGhhKTsKK30K
Kwordm9pZCBHTEVTMkNhbnZhczo6ZHJhd1F1YWQoY29uc3QgSW50U2l6ZSYgdGV4dHVyZVNpemUs
IGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCwgY29uc3QgRmxvYXRSZWN0JiBkc3RSZWN0LCBjb25z
dCBBZmZpbmVUcmFuc2Zvcm0mIHRyYW5zZm9ybSwgZmxvYXQgYWxwaGEpCit7CiAgICAgQWZmaW5l
VHJhbnNmb3JtIG1hdHJpeChtX2ZsaXBNYXRyaXgpOwogICAgIG1hdHJpeC5tdWx0TGVmdCh0cmFu
c2Zvcm0pOwotICAgIG1hdHJpeC50cmFuc2xhdGUoZHN0UmVjdEludGVyc2VjdGVkLngoKSwgZHN0
UmVjdEludGVyc2VjdGVkLnkoKSk7Ci0gICAgbWF0cml4LnNjYWxlKGRzdFJlY3RJbnRlcnNlY3Rl
ZC53aWR0aCgpLCBkc3RSZWN0SW50ZXJzZWN0ZWQuaGVpZ2h0KCkpOworICAgIG1hdHJpeC50cmFu
c2xhdGUoZHN0UmVjdC54KCksIGRzdFJlY3QueSgpKTsKKyAgICBtYXRyaXguc2NhbGUoZHN0UmVj
dC53aWR0aCgpLCBkc3RSZWN0LmhlaWdodCgpKTsKIAogICAgIEFmZmluZVRyYW5zZm9ybSB0ZXhN
YXRyaXg7Ci0gICAgdGV4TWF0cml4LnNjYWxlKDEuMGYgLyB0aWxlQm91bmRzV2l0aEJvcmRlci53
aWR0aCgpLCAxLjBmIC8gdGlsZUJvdW5kc1dpdGhCb3JkZXIuaGVpZ2h0KCkpOwotICAgIHRleE1h
dHJpeC50cmFuc2xhdGUoc3JjUmVjdENsaXBwZWRJblRpbGVTcGFjZS54KCksIHNyY1JlY3RDbGlw
cGVkSW5UaWxlU3BhY2UueSgpKTsKLSAgICB0ZXhNYXRyaXguc2NhbGUoc3JjUmVjdENsaXBwZWRJ
blRpbGVTcGFjZS53aWR0aCgpLCBzcmNSZWN0Q2xpcHBlZEluVGlsZVNwYWNlLmhlaWdodCgpKTsK
KyAgICB0ZXhNYXRyaXguc2NhbGUoMS4wZiAvIHRleHR1cmVTaXplLndpZHRoKCksIDEuMGYgLyB0
ZXh0dXJlU2l6ZS5oZWlnaHQoKSk7CisgICAgdGV4TWF0cml4LnRyYW5zbGF0ZShzcmNSZWN0Lngo
KSwgc3JjUmVjdC55KCkpOworICAgIHRleE1hdHJpeC5zY2FsZShzcmNSZWN0LndpZHRoKCksIHNy
Y1JlY3QuaGVpZ2h0KCkpOwogCi0gICAgbV90ZXhTaGFkZXItPnVzZShtYXRyaXgsIHRleE1hdHJp
eCwgMCwgYWxwaGEpOworICAgIGJpbmRGcmFtZWJ1ZmZlcigpOwogCisgICAgbV9jb250ZXh0LT51
c2VUZXh0dXJlUHJvZ3JhbShtYXRyaXgsIHRleE1hdHJpeCwgYWxwaGEpOwogICAgIG1fY29udGV4
dC0+ZHJhd0FycmF5cyhHcmFwaGljc0NvbnRleHQzRDo6VFJJQU5HTEVfU1RSSVAsIDAsIDQpOwog
ICAgIGNoZWNrR0xFcnJvcigiZ2xEcmF3QXJyYXlzIik7CiB9CkBAIC0yMjMsOTggKzI0MSwxNCBA
QCB2b2lkIEdMRVMyQ2FudmFzOjpzZXRDb21wb3NpdGVPcGVyYXRpb24oQ29tcG9zaXRlT3BlcmF0
b3Igb3ApCiAgICAgbV9zdGF0ZS0+bV9jb21wb3NpdGVPcCA9IG9wOwogfQogCi12b2lkIEdMRVMy
Q2FudmFzOjphcHBseUNvbXBvc2l0ZU9wZXJhdG9yKENvbXBvc2l0ZU9wZXJhdG9yIG9wKQotewot
ICAgIGlmIChvcCA9PSBtX2xhc3RDb21wb3NpdGVPcCkKLSAgICAgICAgcmV0dXJuOwotCi0gICAg
c3dpdGNoIChvcCkgewotICAgIGNhc2UgQ29tcG9zaXRlQ2xlYXI6Ci0gICAgICAgIG1fY29udGV4
dC0+ZW5hYmxlKEdyYXBoaWNzQ29udGV4dDNEOjpCTEVORCk7Ci0gICAgICAgIG1fY29udGV4dC0+
YmxlbmRGdW5jKEdyYXBoaWNzQ29udGV4dDNEOjpaRVJPLCBHcmFwaGljc0NvbnRleHQzRDo6WkVS
Tyk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgQ29tcG9zaXRlQ29weToKLSAgICAgICAgbV9j
b250ZXh0LT5kaXNhYmxlKEdyYXBoaWNzQ29udGV4dDNEOjpCTEVORCk7Ci0gICAgICAgIGJyZWFr
OwotICAgIGNhc2UgQ29tcG9zaXRlU291cmNlT3ZlcjoKLSAgICAgICAgbV9jb250ZXh0LT5lbmFi
bGUoR3JhcGhpY3NDb250ZXh0M0Q6OkJMRU5EKTsKLSAgICAgICAgbV9jb250ZXh0LT5ibGVuZEZ1
bmMoR3JhcGhpY3NDb250ZXh0M0Q6Ok9ORSwgR3JhcGhpY3NDb250ZXh0M0Q6Ok9ORV9NSU5VU19T
UkNfQUxQSEEpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIENvbXBvc2l0ZVNvdXJjZUluOgot
ICAgICAgICBtX2NvbnRleHQtPmVuYWJsZShHcmFwaGljc0NvbnRleHQzRDo6QkxFTkQpOwotICAg
ICAgICBtX2NvbnRleHQtPmJsZW5kRnVuYyhHcmFwaGljc0NvbnRleHQzRDo6RFNUX0FMUEhBLCBH
cmFwaGljc0NvbnRleHQzRDo6WkVSTyk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgQ29tcG9z
aXRlU291cmNlT3V0OgotICAgICAgICBtX2NvbnRleHQtPmVuYWJsZShHcmFwaGljc0NvbnRleHQz
RDo6QkxFTkQpOwotICAgICAgICBtX2NvbnRleHQtPmJsZW5kRnVuYyhHcmFwaGljc0NvbnRleHQz
RDo6T05FX01JTlVTX0RTVF9BTFBIQSwgR3JhcGhpY3NDb250ZXh0M0Q6OlpFUk8pOwotICAgICAg
ICBicmVhazsKLSAgICBjYXNlIENvbXBvc2l0ZVNvdXJjZUF0b3A6Ci0gICAgICAgIG1fY29udGV4
dC0+ZW5hYmxlKEdyYXBoaWNzQ29udGV4dDNEOjpCTEVORCk7Ci0gICAgICAgIG1fY29udGV4dC0+
YmxlbmRGdW5jKEdyYXBoaWNzQ29udGV4dDNEOjpEU1RfQUxQSEEsIEdyYXBoaWNzQ29udGV4dDNE
OjpPTkVfTUlOVVNfU1JDX0FMUEhBKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBDb21wb3Np
dGVEZXN0aW5hdGlvbk92ZXI6Ci0gICAgICAgIG1fY29udGV4dC0+ZW5hYmxlKEdyYXBoaWNzQ29u
dGV4dDNEOjpCTEVORCk7Ci0gICAgICAgIG1fY29udGV4dC0+YmxlbmRGdW5jKEdyYXBoaWNzQ29u
dGV4dDNEOjpPTkVfTUlOVVNfRFNUX0FMUEhBLCBHcmFwaGljc0NvbnRleHQzRDo6T05FKTsKLSAg
ICAgICAgYnJlYWs7Ci0gICAgY2FzZSBDb21wb3NpdGVEZXN0aW5hdGlvbkluOgotICAgICAgICBt
X2NvbnRleHQtPmVuYWJsZShHcmFwaGljc0NvbnRleHQzRDo6QkxFTkQpOwotICAgICAgICBtX2Nv
bnRleHQtPmJsZW5kRnVuYyhHcmFwaGljc0NvbnRleHQzRDo6WkVSTywgR3JhcGhpY3NDb250ZXh0
M0Q6OlNSQ19BTFBIQSk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgQ29tcG9zaXRlRGVzdGlu
YXRpb25PdXQ6Ci0gICAgICAgIG1fY29udGV4dC0+ZW5hYmxlKEdyYXBoaWNzQ29udGV4dDNEOjpC
TEVORCk7Ci0gICAgICAgIG1fY29udGV4dC0+YmxlbmRGdW5jKEdyYXBoaWNzQ29udGV4dDNEOjpa
RVJPLCBHcmFwaGljc0NvbnRleHQzRDo6T05FX01JTlVTX1NSQ19BTFBIQSk7Ci0gICAgICAgIGJy
ZWFrOwotICAgIGNhc2UgQ29tcG9zaXRlRGVzdGluYXRpb25BdG9wOgotICAgICAgICBtX2NvbnRl
eHQtPmVuYWJsZShHcmFwaGljc0NvbnRleHQzRDo6QkxFTkQpOwotICAgICAgICBtX2NvbnRleHQt
PmJsZW5kRnVuYyhHcmFwaGljc0NvbnRleHQzRDo6T05FX01JTlVTX0RTVF9BTFBIQSwgR3JhcGhp
Y3NDb250ZXh0M0Q6OlNSQ19BTFBIQSk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgQ29tcG9z
aXRlWE9SOgotICAgICAgICBtX2NvbnRleHQtPmVuYWJsZShHcmFwaGljc0NvbnRleHQzRDo6QkxF
TkQpOwotICAgICAgICBtX2NvbnRleHQtPmJsZW5kRnVuYyhHcmFwaGljc0NvbnRleHQzRDo6T05F
X01JTlVTX0RTVF9BTFBIQSwgR3JhcGhpY3NDb250ZXh0M0Q6Ok9ORV9NSU5VU19TUkNfQUxQSEEp
OwotICAgICAgICBicmVhazsKLSAgICBjYXNlIENvbXBvc2l0ZVBsdXNEYXJrZXI6Ci0gICAgY2Fz
ZSBDb21wb3NpdGVIaWdobGlnaHQ6Ci0gICAgICAgIC8vIHVuc3VwcG9ydGVkCi0gICAgICAgIG1f
Y29udGV4dC0+ZGlzYWJsZShHcmFwaGljc0NvbnRleHQzRDo6QkxFTkQpOwotICAgICAgICBicmVh
azsKLSAgICBjYXNlIENvbXBvc2l0ZVBsdXNMaWdodGVyOgotICAgICAgICBtX2NvbnRleHQtPmVu
YWJsZShHcmFwaGljc0NvbnRleHQzRDo6QkxFTkQpOwotICAgICAgICBtX2NvbnRleHQtPmJsZW5k
RnVuYyhHcmFwaGljc0NvbnRleHQzRDo6T05FLCBHcmFwaGljc0NvbnRleHQzRDo6T05FKTsKLSAg
ICAgICAgYnJlYWs7Ci0gICAgfQotICAgIG1fbGFzdENvbXBvc2l0ZU9wID0gb3A7Ci19Ci0KLXVu
c2lnbmVkIEdMRVMyQ2FudmFzOjpnZXRRdWFkVmVydGljZXMoKQotewotICAgIGlmICghbV9xdWFk
VmVydGljZXMpIHsKLSAgICAgICAgZmxvYXQgdmVydGljZXNbXSA9IHsgMC4wZiwgMC4wZiwgMS4w
ZiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMS4wZiwgMC4wZiwgMS4wZiwKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgMC4wZiwgMS4wZiwgMS4wZiwKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgMS4wZiwgMS4wZiwgMS4wZiB9OwotICAgICAgICBtX3F1YWRWZXJ0aWNl
cyA9IG1fY29udGV4dC0+Y3JlYXRlQnVmZmVyKCk7Ci0gICAgICAgIG1fY29udGV4dC0+YmluZEJ1
ZmZlcihHcmFwaGljc0NvbnRleHQzRDo6QVJSQVlfQlVGRkVSLCBtX3F1YWRWZXJ0aWNlcyk7Ci0g
ICAgICAgIG1fY29udGV4dC0+YnVmZmVyRGF0YShHcmFwaGljc0NvbnRleHQzRDo6QVJSQVlfQlVG
RkVSLCBzaXplb2YodmVydGljZXMpLCB2ZXJ0aWNlcywgR3JhcGhpY3NDb250ZXh0M0Q6OlNUQVRJ
Q19EUkFXKTsKLSAgICB9Ci0gICAgcmV0dXJuIG1fcXVhZFZlcnRpY2VzOwotfQotCiBUZXh0dXJl
KiBHTEVTMkNhbnZhczo6Y3JlYXRlVGV4dHVyZShOYXRpdmVJbWFnZVB0ciBwdHIsIFRleHR1cmU6
OkZvcm1hdCBmb3JtYXQsIGludCB3aWR0aCwgaW50IGhlaWdodCkKIHsKLSAgICBQYXNzUmVmUHRy
PFRleHR1cmU+IHRleHR1cmUgPSBtX3RleHR1cmVzLmdldChwdHIpOwotICAgIGlmICh0ZXh0dXJl
KQotICAgICAgICByZXR1cm4gdGV4dHVyZS5nZXQoKTsKLQotICAgIHRleHR1cmUgPSBUZXh0dXJl
OjpjcmVhdGUobV9jb250ZXh0LCBmb3JtYXQsIHdpZHRoLCBoZWlnaHQpOwotICAgIFRleHR1cmUq
IHQgPSB0ZXh0dXJlLmdldCgpOwotICAgIG1fdGV4dHVyZXMuc2V0KHB0ciwgdGV4dHVyZSk7Ci0g
ICAgcmV0dXJuIHQ7CisgICAgcmV0dXJuIG1fY29udGV4dC0+Y3JlYXRlVGV4dHVyZShwdHIsIGZv
cm1hdCwgd2lkdGgsIGhlaWdodCk7CiB9CiAKIFRleHR1cmUqIEdMRVMyQ2FudmFzOjpnZXRUZXh0
dXJlKE5hdGl2ZUltYWdlUHRyIHB0cikKIHsKLSAgICBQYXNzUmVmUHRyPFRleHR1cmU+IHRleHR1
cmUgPSBtX3RleHR1cmVzLmdldChwdHIpOwotICAgIHJldHVybiB0ZXh0dXJlID8gdGV4dHVyZS5n
ZXQoKSA6IDA7CisgICAgcmV0dXJuIG1fY29udGV4dC0+Z2V0VGV4dHVyZShwdHIpOwogfQogCiB2
b2lkIEdMRVMyQ2FudmFzOjpjaGVja0dMRXJyb3IoY29uc3QgY2hhciogaGVhZGVyKQpkaWZmIC0t
Z2l0IGEvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9HTEVTMkNhbnZhcy5oIGIv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9HTEVTMkNhbnZhcy5oCmluZGV4IGY0
OWFjOGJhMThkMWQzNDIzNGI4ZDA2Mjc4ZTcwMjhiZmU5Njk3ZTEuLjhhZmVjNDQwMzFkMmQ1OGZk
ZDJkZDFkMTFlZTZkM2VkZDRlZmNjMTEgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY2hyb21pdW0vR0xFUzJDYW52YXMuaAorKysgYi9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2Nocm9taXVtL0dMRVMyQ2FudmFzLmgKQEAgLTQ1LDE2ICs0NSwxNCBAQAogbmFtZXNwYWNl
IFdlYkNvcmUgewogCiBjbGFzcyBDb2xvcjsKK2NsYXNzIERyYXdpbmdCdWZmZXI7CiBjbGFzcyBG
bG9hdFJlY3Q7CiBjbGFzcyBHcmFwaGljc0NvbnRleHQzRDsKLWNsYXNzIFNvbGlkRmlsbFNoYWRl
cjsKLWNsYXNzIFRleFNoYWRlcjsKLQotdHlwZWRlZiBIYXNoTWFwPE5hdGl2ZUltYWdlUHRyLCBS
ZWZQdHI8VGV4dHVyZT4gPiBUZXh0dXJlSGFzaE1hcDsKK2NsYXNzIFNoYXJlZENvbnRleHQzRDsK
IAogY2xhc3MgR0xFUzJDYW52YXMgOiBwdWJsaWMgTm9uY29weWFibGUgewogcHVibGljOgotICAg
IEdMRVMyQ2FudmFzKEdyYXBoaWNzQ29udGV4dDNEKiwgY29uc3QgSW50U2l6ZSYpOworICAgIEdM
RVMyQ2FudmFzKFNoYXJlZENvbnRleHQzRCosIERyYXdpbmdCdWZmZXIqLCBjb25zdCBJbnRTaXpl
Jik7CiAgICAgfkdMRVMyQ2FudmFzKCk7CiAKICAgICB2b2lkIGZpbGxSZWN0KGNvbnN0IEZsb2F0
UmVjdCYsIGNvbnN0IENvbG9yJiwgQ29sb3JTcGFjZSk7CkBAIC03NCwyOCArNzIsMzMgQEAgcHVi
bGljOgogICAgIC8vIG5vbi1zdGFuZGFyZCBmdW5jdGlvbnMKICAgICAvLyBUaGVzZSBhcmUgbm90
IHN0YW5kYXJkIEdyYXBoaWNzQ29udGV4dCBmdW5jdGlvbnMsIGFuZCBzaG91bGQgYmUgcHVzaGVk
CiAgICAgLy8gZG93biBpbnRvIGEgUGxhdGZvcm1Db250ZXh0R0xFUzIgYXQgc29tZSBwb2ludC4K
KyAgICB2b2lkIGRyYXdUZXh0dXJlZFJlY3QodW5zaWduZWQgdGV4dHVyZSwgY29uc3QgSW50U2l6
ZSYgdGV4dHVyZVNpemUsIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCwgY29uc3QgRmxvYXRSZWN0
JiBkc3RSZWN0LCBDb2xvclNwYWNlLCBDb21wb3NpdGVPcGVyYXRvcik7CiAgICAgdm9pZCBkcmF3
VGV4dHVyZWRSZWN0KFRleHR1cmUqLCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsIGNvbnN0IEZs
b2F0UmVjdCYgZHN0UmVjdCwgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiwgZmxvYXQgYWxwaGEsIENv
bG9yU3BhY2UsIENvbXBvc2l0ZU9wZXJhdG9yKTsKICAgICB2b2lkIGRyYXdUZXh0dXJlZFJlY3Qo
VGV4dHVyZSosIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCwgY29uc3QgRmxvYXRSZWN0JiBkc3RS
ZWN0LCBDb2xvclNwYWNlLCBDb21wb3NpdGVPcGVyYXRvcik7Ci0gICAgR3JhcGhpY3NDb250ZXh0
M0QqIGNvbnRleHQoKSB7IHJldHVybiBtX2NvbnRleHQ7IH0KICAgICBUZXh0dXJlKiBjcmVhdGVU
ZXh0dXJlKE5hdGl2ZUltYWdlUHRyLCBUZXh0dXJlOjpGb3JtYXQsIGludCB3aWR0aCwgaW50IGhl
aWdodCk7CiAgICAgVGV4dHVyZSogZ2V0VGV4dHVyZShOYXRpdmVJbWFnZVB0cik7CiAKKyAgICBT
aGFyZWRDb250ZXh0M0QqIGNvbnRleHQoKSBjb25zdCB7IHJldHVybiBtX2NvbnRleHQ7IH0KKwor
ICAgIHZvaWQgYmluZEZyYW1lYnVmZmVyKCk7CisKKyAgICBEcmF3aW5nQnVmZmVyKiBkcmF3aW5n
QnVmZmVyKCkgY29uc3QgeyByZXR1cm4gbV9kcmF3aW5nQnVmZmVyOyB9CisKIHByaXZhdGU6CiAg
ICAgdm9pZCBkcmF3VGV4dHVyZWRSZWN0VGlsZShUZXh0dXJlKiB0ZXh0dXJlLCBpbnQgdGlsZSwg
Y29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBjb25zdCBGbG9hdFJlY3QmIGRzdFJlY3QsIGNvbnN0
IEFmZmluZVRyYW5zZm9ybSYsIGZsb2F0IGFscGhhKTsKKyAgICB2b2lkIGRyYXdRdWFkKGNvbnN0
IEludFNpemUmIHRleHR1cmVTaXplLCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsIGNvbnN0IEZs
b2F0UmVjdCYgZHN0UmVjdCwgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiwgZmxvYXQgYWxwaGEpOwog
ICAgIHZvaWQgYXBwbHlDb21wb3NpdGVPcGVyYXRvcihDb21wb3NpdGVPcGVyYXRvcik7CiAgICAg
dm9pZCBjaGVja0dMRXJyb3IoY29uc3QgY2hhciogaGVhZGVyKTsKLSAgICB1bnNpZ25lZCBnZXRR
dWFkVmVydGljZXMoKTsKIAotICAgIEdyYXBoaWNzQ29udGV4dDNEKiBtX2NvbnRleHQ7CisgICAg
SW50U2l6ZSBtX3NpemU7CisKKyAgICBTaGFyZWRDb250ZXh0M0QqIG1fY29udGV4dDsKKyAgICBE
cmF3aW5nQnVmZmVyKiBtX2RyYXdpbmdCdWZmZXI7CisKICAgICBzdHJ1Y3QgU3RhdGU7CiAgICAg
V1RGOjpWZWN0b3I8U3RhdGU+IG1fc3RhdGVTdGFjazsKICAgICBTdGF0ZSogbV9zdGF0ZTsKLSAg
ICB1bnNpZ25lZCBtX3F1YWRWZXJ0aWNlczsKLSAgICBPd25QdHI8U29saWRGaWxsU2hhZGVyPiBt
X3NvbGlkRmlsbFNoYWRlcjsKLSAgICBPd25QdHI8VGV4U2hhZGVyPiBtX3RleFNoYWRlcjsKICAg
ICBBZmZpbmVUcmFuc2Zvcm0gbV9mbGlwTWF0cml4OwotICAgIFRleHR1cmVIYXNoTWFwIG1fdGV4
dHVyZXM7Ci0gICAgQ29tcG9zaXRlT3BlcmF0b3IgbV9sYXN0Q29tcG9zaXRlT3A7IC8vIFRoaXMg
aXMgdGhlIG9uZSBsYXN0IHNldCwgbm90IG5lY2Vzc2FyaWx5IHRoZSBvbmUgaW4gdGhlIHN0YXRl
IHN0YWNrLgogfTsKIAogfQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
aHJvbWl1bS9HcmFwaGljc0xheWVyQ2hyb21pdW0uY3BwIGIvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jaHJvbWl1bS9HcmFwaGljc0xheWVyQ2hyb21pdW0uY3BwCmluZGV4IDY0OGUzNWYxYTQ2
NzJmYzI2NTRlNWE1ZTk2Y2NlMjllNjc5MmMxMDEuLmY2NzIwMmM1ZTlkYWFiNTNmNTA2ZDJiMzg1
YmQxNGVjNDk4MTRmYjIgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hy
b21pdW0vR3JhcGhpY3NMYXllckNocm9taXVtLmNwcAorKysgYi9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2Nocm9taXVtL0dyYXBoaWNzTGF5ZXJDaHJvbWl1bS5jcHAKQEAgLTQ1LDcgKzQ1LDkg
QEAKIAogI2luY2x1ZGUgIkdyYXBoaWNzTGF5ZXJDaHJvbWl1bS5oIgogCisjaW5jbHVkZSAiQ2Fu
dmFzMkRMYXllckNocm9taXVtLmgiCiAjaW5jbHVkZSAiQ29udGVudExheWVyQ2hyb21pdW0uaCIK
KyNpbmNsdWRlICJEcmF3aW5nQnVmZmVyLmgiCiAjaW5jbHVkZSAiRmxvYXRDb252ZXJzaW9uLmgi
CiAjaW5jbHVkZSAiRmxvYXRSZWN0LmgiCiAjaW5jbHVkZSAiSW1hZ2UuaCIKQEAgLTI5MCw2ICsy
OTIsNyBAQCB2b2lkIEdyYXBoaWNzTGF5ZXJDaHJvbWl1bTo6c2V0Q29udGVudHNOZWVkc0Rpc3Bs
YXkoKQogICAgIGlmIChtX2NvbnRlbnRzTGF5ZXIpCiAgICAgICAgIG1fY29udGVudHNMYXllci0+
c2V0TmVlZHNEaXNwbGF5KCk7CiB9CisKIHZvaWQgR3JhcGhpY3NMYXllckNocm9taXVtOjpzZXRO
ZWVkc0Rpc3BsYXkoKQogewogICAgIGlmIChkcmF3c0NvbnRlbnQoKSkKQEAgLTMzOSwxNSArMzQy
LDE1IEBAIHZvaWQgR3JhcGhpY3NMYXllckNocm9taXVtOjpzZXRDb250ZW50c1RvSW1hZ2UoSW1h
Z2UqIGltYWdlKQogICAgICAgICB1cGRhdGVTdWJsYXllckxpc3QoKTsKIH0KIAotdm9pZCBHcmFw
aGljc0xheWVyQ2hyb21pdW06OnNldENvbnRlbnRzVG9DYW52YXMoUGxhdGZvcm1MYXllciogcGxh
dGZvcm1MYXllcikKK3ZvaWQgR3JhcGhpY3NMYXllckNocm9taXVtOjpzZXRDb250ZW50c1RvV2Vi
R0woUGxhdGZvcm1MYXllciogcGxhdGZvcm1MYXllcikKIHsKICAgICBib29sIGNoaWxkcmVuQ2hh
bmdlZCA9IGZhbHNlOwogICAgIGlmIChwbGF0Zm9ybUxheWVyKSB7CiAgICAgICAgIHBsYXRmb3Jt
TGF5ZXItPnNldE93bmVyKHRoaXMpOwotICAgICAgICBpZiAoIW1fY29udGVudHNMYXllci5nZXQo
KSB8fCBtX2NvbnRlbnRzTGF5ZXJQdXJwb3NlICE9IENvbnRlbnRzTGF5ZXJGb3JDYW52YXMpIHsK
KyAgICAgICAgaWYgKCFtX2NvbnRlbnRzTGF5ZXIuZ2V0KCkgfHwgbV9jb250ZW50c0xheWVyUHVy
cG9zZSAhPSBDb250ZW50c0xheWVyRm9yV2ViR0wpIHsKICAgICAgICAgICAgIHNldHVwQ29udGVu
dHNMYXllcihwbGF0Zm9ybUxheWVyKTsKICAgICAgICAgICAgIG1fY29udGVudHNMYXllciA9IHBs
YXRmb3JtTGF5ZXI7Ci0gICAgICAgICAgICBtX2NvbnRlbnRzTGF5ZXJQdXJwb3NlID0gQ29udGVu
dHNMYXllckZvckNhbnZhczsKKyAgICAgICAgICAgIG1fY29udGVudHNMYXllclB1cnBvc2UgPSBD
b250ZW50c0xheWVyRm9yV2ViR0w7CiAgICAgICAgICAgICBjaGlsZHJlbkNoYW5nZWQgPSB0cnVl
OwogICAgICAgICB9CiAgICAgICAgIHBsYXRmb3JtTGF5ZXItPnNldE5lZWRzRGlzcGxheSgpOwpA
QCAtMzY1LDYgKzM2OCwzNSBAQCB2b2lkIEdyYXBoaWNzTGF5ZXJDaHJvbWl1bTo6c2V0Q29udGVu
dHNUb0NhbnZhcyhQbGF0Zm9ybUxheWVyKiBwbGF0Zm9ybUxheWVyKQogICAgICAgICB1cGRhdGVT
dWJsYXllckxpc3QoKTsKIH0KIAordm9pZCBHcmFwaGljc0xheWVyQ2hyb21pdW06OnNldENvbnRl
bnRzVG9DYW52YXMyRChEcmF3aW5nQnVmZmVyKiBkcmF3aW5nQnVmZmVyKQoreworICAgIGJvb2wg
Y2hpbGRyZW5DaGFuZ2VkID0gZmFsc2U7CisgICAgaWYgKGRyYXdpbmdCdWZmZXIpIHsKKyAgICAg
ICAgaWYgKCFtX2NvbnRlbnRzTGF5ZXIuZ2V0KCkgfHwgbV9jb250ZW50c0xheWVyUHVycG9zZSAh
PSBDb250ZW50c0xheWVyRm9yQ2FudmFzMkQpIHsKKyAgICAgICAgICAgIFJlZlB0cjxDYW52YXMy
RExheWVyQ2hyb21pdW0+IGNhbnZhczJETGF5ZXIgPSBDYW52YXMyRExheWVyQ2hyb21pdW06OmNy
ZWF0ZShkcmF3aW5nQnVmZmVyLCB0aGlzKTsKKyAgICAgICAgICAgIHNldHVwQ29udGVudHNMYXll
cihjYW52YXMyRExheWVyLmdldCgpKTsKKyAgICAgICAgICAgIG1fY29udGVudHNMYXllciA9IGNh
bnZhczJETGF5ZXI7CisgICAgICAgICAgICBtX2NvbnRlbnRzTGF5ZXJQdXJwb3NlID0gQ29udGVu
dHNMYXllckZvckNhbnZhczJEOworICAgICAgICAgICAgY2hpbGRyZW5DaGFuZ2VkID0gdHJ1ZTsK
KyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIENhbnZhczJETGF5ZXJDaHJvbWl1bSogY2Fu
dmFzMkRMYXllciA9IHN0YXRpY19jYXN0PENhbnZhczJETGF5ZXJDaHJvbWl1bSo+KG1fY29udGVu
dHNMYXllci5nZXQoKSk7CisgICAgICAgICAgICBjYW52YXMyRExheWVyLT5zZXREcmF3aW5nQnVm
ZmVyKGRyYXdpbmdCdWZmZXIpOworICAgICAgICB9CisgICAgICAgIG1fY29udGVudHNMYXllci0+
c2V0TmVlZHNEaXNwbGF5KCk7CisgICAgICAgIHVwZGF0ZUNvbnRlbnRzUmVjdCgpOworICAgIH0g
ZWxzZSB7CisgICAgICAgIGlmIChtX2NvbnRlbnRzTGF5ZXIpIHsKKyAgICAgICAgICAgIGNoaWxk
cmVuQ2hhbmdlZCA9IHRydWU7CisKKyAgICAgICAgICAgIC8vIFRoZSBvbGQgY29udGVudHMgbGF5
ZXIgd2lsbCBiZSByZW1vdmVkIHZpYSB1cGRhdGVTdWJsYXllckxpc3QuCisgICAgICAgICAgICBt
X2NvbnRlbnRzTGF5ZXIgPSAwOworICAgICAgICB9CisgICAgfQorCisgICAgaWYgKGNoaWxkcmVu
Q2hhbmdlZCkKKyAgICAgICAgdXBkYXRlU3VibGF5ZXJMaXN0KCk7Cit9CisKIHZvaWQgR3JhcGhp
Y3NMYXllckNocm9taXVtOjpzZXRDb250ZW50c1RvTWVkaWEoUGxhdGZvcm1MYXllciogbGF5ZXIp
CiB7CiAgICAgYm9vbCBjaGlsZHJlbkNoYW5nZWQgPSBmYWxzZTsKZGlmZiAtLWdpdCBhL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vR3JhcGhpY3NMYXllckNocm9taXVtLmggYi9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0dyYXBoaWNzTGF5ZXJDaHJvbWl1bS5o
CmluZGV4IDlkZmY2NmEwNzVjYzMwYTU4NDZiMTQ2YTE2NTE4NDhiNmZlZGFmOTEuLmExZTU0ODIx
YjI3ZmMyNmNmZDFlZjE3MDQwMDlkYjhlMjNhZDhkOWMgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vR3JhcGhpY3NMYXllckNocm9taXVtLmgKKysrIGIvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9HcmFwaGljc0xheWVyQ2hyb21pdW0uaApA
QCAtODcsNyArODcsOCBAQCBwdWJsaWM6CiAKICAgICB2aXJ0dWFsIHZvaWQgc2V0Q29udGVudHNU
b0ltYWdlKEltYWdlKik7CiAgICAgdmlydHVhbCB2b2lkIHNldENvbnRlbnRzVG9NZWRpYShQbGF0
Zm9ybUxheWVyKik7Ci0gICAgdmlydHVhbCB2b2lkIHNldENvbnRlbnRzVG9DYW52YXMoUGxhdGZv
cm1MYXllciopOworICAgIHZpcnR1YWwgdm9pZCBzZXRDb250ZW50c1RvV2ViR0woUGxhdGZvcm1M
YXllciopOworICAgIHZpcnR1YWwgdm9pZCBzZXRDb250ZW50c1RvQ2FudmFzMkQoRHJhd2luZ0J1
ZmZlciopOwogCiAgICAgdmlydHVhbCBQbGF0Zm9ybUxheWVyKiBwbGF0Zm9ybUxheWVyKCkgY29u
c3Q7CiAKQEAgLTEzOCw3ICsxMzksOCBAQCBwcml2YXRlOgogICAgICAgICBOb0NvbnRlbnRzTGF5
ZXIgPSAwLAogICAgICAgICBDb250ZW50c0xheWVyRm9ySW1hZ2UsCiAgICAgICAgIENvbnRlbnRz
TGF5ZXJGb3JWaWRlbywKLSAgICAgICAgQ29udGVudHNMYXllckZvckNhbnZhcworICAgICAgICBD
b250ZW50c0xheWVyRm9yV2ViR0wsCisgICAgICAgIENvbnRlbnRzTGF5ZXJGb3JDYW52YXMyRCwK
ICAgICB9OwogCiAgICAgQ29udGVudHNMYXllclB1cnBvc2UgbV9jb250ZW50c0xheWVyUHVycG9z
ZTsKZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJS
ZW5kZXJlckNocm9taXVtLmNwcCBiL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0v
TGF5ZXJSZW5kZXJlckNocm9taXVtLmNwcAppbmRleCA1MDMzOGQyZDVmNzMyNGU1YTExOWM1MDkx
OTBkZmVmODY5OGIxNzY5Li44ZTEzMzgyNmJmMjNiZWU3NTM1MDllNTZjOTI4YmQwYzQ5MzRjMTU5
IDEwMDY0NAotLS0gYS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyUmVu
ZGVyZXJDaHJvbWl1bS5jcHAKKysrIGIvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1
bS9MYXllclJlbmRlcmVyQ2hyb21pdW0uY3BwCkBAIC0zNCwxMSArMzQsMTEgQEAKICNpZiBVU0Uo
QUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCiAjaW5jbHVkZSAiTGF5ZXJSZW5kZXJlckNocm9taXVt
LmgiCiAKLSNpbmNsdWRlICJDYW52YXNMYXllckNocm9taXVtLmgiCi0jaW5jbHVkZSAiQ29udGVu
dExheWVyQ2hyb21pdW0uaCIKKyNpbmNsdWRlICJDYW52YXMyRExheWVyQ2hyb21pdW0uaCIKICNp
bmNsdWRlICJHTEVTMkNvbnRleHQuaCIKICNpbmNsdWRlICJMYXllckNocm9taXVtLmgiCiAjaW5j
bHVkZSAiTm90SW1wbGVtZW50ZWQuaCIKKyNpbmNsdWRlICJXZWJHTExheWVyQ2hyb21pdW0uaCIK
ICNpZiBQTEFURk9STShTS0lBKQogI2luY2x1ZGUgIk5hdGl2ZUltYWdlU2tpYS5oIgogI2luY2x1
ZGUgIlBsYXRmb3JtQ29udGV4dFNraWEuaCIKQEAgLTU2OCw2ICs1NjgsNyBAQCB2b2lkIExheWVy
UmVuZGVyZXJDaHJvbWl1bTo6ZHJhd0xheWVyKExheWVyQ2hyb21pdW0qIGxheWVyKQogICAgICAg
ICAvLyBVcGRhdGUgdGhlIGNvbnRlbnRzIG9mIHRoZSBsYXllciBpZiBuZWNlc3NhcnkuCiAgICAg
ICAgIGlmIChsYXllci0+Y29udGVudHNEaXJ0eSgpKSB7CiAgICAgICAgICAgICAvLyBVcGRhdGUg
dGhlIGJhY2tpbmcgdGV4dHVyZSBjb250ZW50cyBmb3IgYW55IGRpcnR5IHBvcnRpb24gb2YgdGhl
IGxheWVyLgorICAgICAgICAgICAgbV9nbGVzMkNvbnRleHQtPm1ha2VDdXJyZW50KCk7CiAgICAg
ICAgICAgICBsYXllci0+dXBkYXRlQ29udGVudHMoKTsKICAgICAgICAgICAgIG1fZ2xlczJDb250
ZXh0LT5tYWtlQ3VycmVudCgpOwogICAgICAgICB9CmRpZmYgLS1naXQgYS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2Nocm9taXVtL1dlYkdMTGF5ZXJDaHJvbWl1bS5jcHAgYi9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1dlYkdMTGF5ZXJDaHJvbWl1bS5jcHAKbmV3IGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MC4uNDExZjQxNjJiOTE0OTQ5Nzk0NzFiOTBkZWM2NjAxYzljNjk0OGRiNgotLS0gL2Rldi9udWxs
CisrKyBiL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vV2ViR0xMYXllckNocm9t
aXVtLmNwcApAQCAtMCwwICsxLDg1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEwIEdvb2ds
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMgYXJlCisgKiBtZXQ6CisgKgorICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAgICAqIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAq
IGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIKKyAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqIGRpc3RyaWJ1dGlvbi4KKyAqICAgICAqIE5laXRo
ZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqIGNvbnRy
aWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZl
ZCBmcm9tCisgKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBw
ZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlS
SUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRP
LCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBT
SEFMTCBUSEUgQ09QWVJJR0hUCisgKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFS
WSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlU
RUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UK
KyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorCisjaWYgVVNFKEFD
Q0VMRVJBVEVEX0NPTVBPU0lUSU5HKQorCisjaW5jbHVkZSAiV2ViR0xMYXllckNocm9taXVtLmgi
CisKKyNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQzRC5oIgorI2luY2x1ZGUgIkxheWVyUmVuZGVy
ZXJDaHJvbWl1bS5oIgorI2luY2x1ZGUgPEdMRVMyL2dsMi5oPgorCituYW1lc3BhY2UgV2ViQ29y
ZSB7CisKK1Bhc3NSZWZQdHI8V2ViR0xMYXllckNocm9taXVtPiBXZWJHTExheWVyQ2hyb21pdW06
OmNyZWF0ZShHcmFwaGljc0xheWVyQ2hyb21pdW0qIG93bmVyKQoreworICAgIHJldHVybiBhZG9w
dFJlZihuZXcgV2ViR0xMYXllckNocm9taXVtKG93bmVyKSk7Cit9CisKK1dlYkdMTGF5ZXJDaHJv
bWl1bTo6V2ViR0xMYXllckNocm9taXVtKEdyYXBoaWNzTGF5ZXJDaHJvbWl1bSogb3duZXIpCisg
ICAgOiBDYW52YXNMYXllckNocm9taXVtKG93bmVyKQorICAgICwgbV9jb250ZXh0KDApCit7Cit9
CisKK3ZvaWQgV2ViR0xMYXllckNocm9taXVtOjp1cGRhdGVDb250ZW50cygpCit7CisgICAgQVNT
RVJUKG1fY29udGV4dCk7CisgICAgaWYgKG1fdGV4dHVyZUNoYW5nZWQpIHsKKyAgICAgICAgZ2xC
aW5kVGV4dHVyZShHTF9URVhUVVJFXzJELCBtX3RleHR1cmVJZCk7CisgICAgICAgIC8vIFNldCB0
aGUgbWluLW1hZyBmaWx0ZXJzIHRvIGxpbmVhciBhbmQgd3JhcCBtb2RlcyB0byBHTF9DTEFNUF9U
T19FREdFCisgICAgICAgIC8vIHRvIGdldCBhcm91bmQgTlBPVCB0ZXh0dXJlIGxpbWl0YXRpb25z
IG9mIEdMRVMuCisgICAgICAgIGdsVGV4UGFyYW1ldGVyZihHTF9URVhUVVJFXzJELCBHTF9URVhU
VVJFX01JTl9GSUxURVIsIEdMX0xJTkVBUik7CisgICAgICAgIGdsVGV4UGFyYW1ldGVyZihHTF9U
RVhUVVJFXzJELCBHTF9URVhUVVJFX01BR19GSUxURVIsIEdMX0xJTkVBUik7CisgICAgICAgIGds
VGV4UGFyYW1ldGVyZihHTF9URVhUVVJFXzJELCBHTF9URVhUVVJFX1dSQVBfUywgR0xfQ0xBTVBf
VE9fRURHRSk7CisgICAgICAgIGdsVGV4UGFyYW1ldGVyZihHTF9URVhUVVJFXzJELCBHTF9URVhU
VVJFX1dSQVBfVCwgR0xfQ0xBTVBfVE9fRURHRSk7CisgICAgICAgIG1fdGV4dHVyZUNoYW5nZWQg
PSBmYWxzZTsKKyAgICB9CisgICAgLy8gVXBkYXRlIHRoZSBjb250ZW50cyBvZiB0aGUgdGV4dHVy
ZSB1c2VkIGJ5IHRoZSBjb21wb3NpdG9yLgorICAgIGlmIChtX2NvbnRlbnRzRGlydHkpIHsKKyAg
ICAgICAgbV9jb250ZXh0LT5wcmVwYXJlVGV4dHVyZSgpOworICAgICAgICBtX2NvbnRlbnRzRGly
dHkgPSBmYWxzZTsKKyAgICB9Cit9CisKK3ZvaWQgV2ViR0xMYXllckNocm9taXVtOjpzZXRDb250
ZXh0KGNvbnN0IEdyYXBoaWNzQ29udGV4dDNEKiBjb250ZXh0KQoreworICAgIG1fY29udGV4dCA9
IGNvbnN0X2Nhc3Q8R3JhcGhpY3NDb250ZXh0M0QqPihjb250ZXh0KTsKKworICAgIHVuc2lnbmVk
IGludCB0ZXh0dXJlSWQgPSBtX2NvbnRleHQtPnBsYXRmb3JtVGV4dHVyZSgpOworICAgIGlmICh0
ZXh0dXJlSWQgIT0gbV90ZXh0dXJlSWQpCisgICAgICAgIG1fdGV4dHVyZUNoYW5nZWQgPSB0cnVl
OworICAgIG1fdGV4dHVyZUlkID0gdGV4dHVyZUlkOworfQorCit9CisjZW5kaWYgLy8gVVNFKEFD
Q0VMRVJBVEVEX0NPTVBPU0lUSU5HKQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jaHJvbWl1bS9XZWJHTExheWVyQ2hyb21pdW0uaCBiL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY2hyb21pdW0vV2ViR0xMYXllckNocm9taXVtLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMTFiOGRiN2U2
MTE3MzBkMGNkNzdkM2ViNjgxNDg1MzdlMWFmNGQxYgotLS0gL2Rldi9udWxsCisrKyBiL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vV2ViR0xMYXllckNocm9taXVtLmgKQEAgLTAs
MCArMSw2MCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMCBHb29nbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorICogbWV0
OgorICoKKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiBjb3B5cmlnaHQgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
CisgKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlCisgKiBkaXN0cmlidXRpb24uCisgKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9m
IEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisgKiBjb250cmlidXRvcnMgbWF5IGJl
IHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorICogdGhp
cyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBB
TkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJ
Q1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlS
SUdIVAorICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERB
VEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgorICovCisKKworI2lmbmRlZiBXZWJHTExheWVyQ2hyb21pdW1faAorI2RlZmluZSBXZWJHTExh
eWVyQ2hyb21pdW1faAorCisjaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQorCisjaW5j
bHVkZSAiQ2FudmFzTGF5ZXJDaHJvbWl1bS5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2Ns
YXNzIEdyYXBoaWNzQ29udGV4dDNEOworCisvLyBBIExheWVyIGNvbnRhaW5pbmcgYSBXZWJHTCBj
YW52YXMKK2NsYXNzIFdlYkdMTGF5ZXJDaHJvbWl1bSA6IHB1YmxpYyBDYW52YXNMYXllckNocm9t
aXVtIHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxXZWJHTExheWVyQ2hyb21pdW0+
IGNyZWF0ZShHcmFwaGljc0xheWVyQ2hyb21pdW0qIG93bmVyID0gMCk7CisgICAgdmlydHVhbCBi
b29sIGRyYXdzQ29udGVudCgpIHsgcmV0dXJuIG1fY29udGV4dDsgfQorICAgIHZpcnR1YWwgdm9p
ZCB1cGRhdGVDb250ZW50cygpOworCisgICAgdm9pZCBzZXRDb250ZXh0KGNvbnN0IEdyYXBoaWNz
Q29udGV4dDNEKiBjb250ZXh0KTsKKworcHJpdmF0ZToKKyAgICBleHBsaWNpdCBXZWJHTExheWVy
Q2hyb21pdW0oR3JhcGhpY3NMYXllckNocm9taXVtKiBvd25lcik7CisgICAgR3JhcGhpY3NDb250
ZXh0M0QqIG1fY29udGV4dDsKK307CisKK30KKyNlbmRpZiAvLyBVU0UoQUNDRUxFUkFURURfQ09N
UE9TSVRJTkcpCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9ncHUvRHJhd2luZ0J1ZmZlci5jcHAgYi9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dwdS9E
cmF3aW5nQnVmZmVyLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi43OTgxZDM4NGRjOGE0MTUwZTE4YTJmN2E0MWYw
NDQ0YTM2Mjg0ZDgxCi0tLSAvZGV2L251bGwKKysrIGIvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9ncHUvRHJhd2luZ0J1ZmZlci5jcHAKQEAgLTAsMCArMSw2MCBAQAorLyoKKyAqIENvcHlyaWdo
dCAoYykgMjAxMCwgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyAqIG1ldDoKKyAqCisgKiAgICAgKiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorICogaW4gdGhlIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogZGlzdHJpYnV0aW9u
LgorICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVz
IG9mIGl0cworICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90
ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZp
YyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElT
IiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIE9XTkVSIE9SIENPTlRSSUJV
VE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICog
U1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVT
UyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQK
KyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmln
LmgiCisKKyNpbmNsdWRlICJEcmF3aW5nQnVmZmVyLmgiCisKKyNpbmNsdWRlICJHcmFwaGljc0Nv
bnRleHQzRC5oIgorI2luY2x1ZGUgIlNoYXJlZENvbnRleHQzRC5oIgorCituYW1lc3BhY2UgV2Vi
Q29yZSB7CisKK1Bhc3NSZWZQdHI8RHJhd2luZ0J1ZmZlcj4gRHJhd2luZ0J1ZmZlcjo6Y3JlYXRl
KFNoYXJlZENvbnRleHQzRCogY29udGV4dCwgY29uc3QgSW50U2l6ZSYgc2l6ZSkKK3sKKyAgICB1
bnNpZ25lZCBmcmFtZWJ1ZmZlciA9IGNvbnRleHQtPmNyZWF0ZUZyYW1lYnVmZmVyKCk7CisgICAg
QVNTRVJUKGZyYW1lYnVmZmVyKTsKKyAgICBpZiAoIWZyYW1lYnVmZmVyKQorICAgICAgICByZXR1
cm4gMDsKKyAgICByZXR1cm4gYWRvcHRSZWYobmV3IERyYXdpbmdCdWZmZXIoY29udGV4dCwgc2l6
ZSwgZnJhbWVidWZmZXIpKTsKK30KKwordm9pZCBEcmF3aW5nQnVmZmVyOjpiaW5kKCkKK3sKKyAg
ICBtX2NvbnRleHQtPmJpbmRGcmFtZWJ1ZmZlcihtX2ZyYW1lYnVmZmVyKTsKKyAgICBtX2NvbnRl
eHQtPnNldFZpZXdwb3J0KG1fc2l6ZSk7Cit9CisKK3ZvaWQgRHJhd2luZ0J1ZmZlcjo6c2V0V2ls
bFB1Ymxpc2hDYWxsYmFjayhQYXNzT3duUHRyPFdpbGxQdWJsaXNoQ2FsbGJhY2s+IGNhbGxiYWNr
KQoreworICAgIG1fY2FsbGJhY2sgPSBjYWxsYmFjazsKK30KKworfSAvLyBuYW1lc3BhY2UgV2Vi
Q29yZQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ncHUvRHJhd2luZ0J1
ZmZlci5oIGIvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ncHUvRHJhd2luZ0J1ZmZlci5oCm5l
dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAuLjEzMjMwZDBkMWQ2MWI5Y2YxYWFlZTk0YjEzZWVmODFiNjFlNDA4ZDMKLS0tIC9k
ZXYvbnVsbAorKysgYi9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dwdS9EcmF3aW5nQnVmZmVy
LmgKQEAgLTAsMCArMSw3NyBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAxMCwgR29vZ2xlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBh
cmUKKyAqIG1ldDoKKyAqCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICAgICogUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogY29w
eXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lcgorICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZQorICogZGlzdHJpYnV0aW9uLgorICogICAgICogTmVpdGhlciB0
aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworICogY29udHJpYnV0
b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZy
b20KKyAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1p
c3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hU
IEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRI
RSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgor
ICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxM
IFRIRSBDT1BZUklHSFQKKyAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBU
TywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICog
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIERyYXdpbmdCdWZmZXJfaAorI2RlZmluZSBEcmF3
aW5nQnVmZmVyX2gKKworI2luY2x1ZGUgIkdyYXBoaWNzTGF5ZXIuaCIKKyNpbmNsdWRlICJJbnRT
aXplLmgiCisKKyNpbmNsdWRlIDx3dGYvT3duUHRyLmg+CisjaW5jbHVkZSA8d3RmL1Bhc3NPd25Q
dHIuaD4KKyNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7
CisKK2NsYXNzIFNoYXJlZENvbnRleHQzRDsKKworc3RydWN0IERyYXdpbmdCdWZmZXJJbnRlcm5h
bDsKKworLy8gTWFuYWdlcyBhIHJlbmRlcmluZyB0YXJnZXQgKGZyYW1lYnVmZmVyICsgYXR0YWNo
bWVudCkgZm9yIGEgY2FudmFzLiAgQ2FuIHB1Ymxpc2ggaXRzIHJlbmRlcmluZworLy8gcmVzdWx0
cyB0byBhIFBsYXRmb3JtTGF5ZXIgZm9yIGNvbXBvc2l0aW5nLgorY2xhc3MgRHJhd2luZ0J1ZmZl
ciA6IHB1YmxpYyBSZWZDb3VudGVkPERyYXdpbmdCdWZmZXI+IHsKK3B1YmxpYzoKKyAgICBzdGF0
aWMgUGFzc1JlZlB0cjxEcmF3aW5nQnVmZmVyPiBjcmVhdGUoU2hhcmVkQ29udGV4dDNEKiwgY29u
c3QgSW50U2l6ZSYpOworICAgIH5EcmF3aW5nQnVmZmVyKCk7CisKKyAgICB2b2lkIGJpbmQoKTsK
KyAgICB2b2lkIHB1Ymxpc2hUb1BsYXRmb3JtTGF5ZXIoUGxhdGZvcm1MYXllciopOworICAgIElu
dFNpemUgc2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1fc2l6ZTsgfQorCisgICAgY2xhc3MgV2lsbFB1
Ymxpc2hDYWxsYmFjayA6IHB1YmxpYyBOb25jb3B5YWJsZSB7CisgICAgcHVibGljOgorICAgICAg
ICB2aXJ0dWFsIHZvaWQgd2lsbFB1Ymxpc2goKSA9IDA7CisgICAgfTsKKworICAgIHZvaWQgc2V0
V2lsbFB1Ymxpc2hDYWxsYmFjayhQYXNzT3duUHRyPFdpbGxQdWJsaXNoQ2FsbGJhY2s+KTsKK3By
aXZhdGU6CisgICAgRHJhd2luZ0J1ZmZlcihTaGFyZWRDb250ZXh0M0QqLCBjb25zdCBJbnRTaXpl
JiwgdW5zaWduZWQgZnJhbWVidWZmZXIpOworCisgICAgU2hhcmVkQ29udGV4dDNEKiBtX2NvbnRl
eHQ7CisgICAgSW50U2l6ZSBtX3NpemU7CisgICAgdW5zaWduZWQgbV9mcmFtZWJ1ZmZlcjsKKwor
ICAgIE93blB0cjxXaWxsUHVibGlzaENhbGxiYWNrPiBtX2NhbGxiYWNrOworICAgIE93blB0cjxE
cmF3aW5nQnVmZmVySW50ZXJuYWw+IG1faW50ZXJuYWw7Cit9OworCit9IC8vIG5hbWVzcGFjZSBX
ZWJDb3JlCisKKyNlbmRpZiAvLyBEcmF3aW5nQnVmZmVyX2gKZGlmZiAtLWdpdCBhL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvZ3B1L1NoYXJlZENvbnRleHQzRC5jcHAgYi9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2dwdS9TaGFyZWRDb250ZXh0M0QuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjJkNmY0NDAy
YWE1ZTM3OGNjOWE3OGYzNDRmNzY5ODQzY2FhNTJlYTYKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dwdS9TaGFyZWRDb250ZXh0M0QuY3BwCkBAIC0wLDAgKzEs
Mjk2IEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDEwLCBHb29nbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorICogbWV0Ogor
ICoKKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiBjb3B5cmlnaHQgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisg
KiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlCisgKiBkaXN0cmlidXRpb24uCisgKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdv
b2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisgKiBjb250cmlidXRvcnMgbWF5IGJlIHVz
ZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorICogdGhpcyBz
b2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQg
Q09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VM
QVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdI
VAorICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVO
VCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEs
IE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgor
ICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKworI2luY2x1ZGUgIlNoYXJlZENvbnRleHQzRC5o
IgorCisjaW5jbHVkZSAiQWZmaW5lVHJhbnNmb3JtLmgiCisjaW5jbHVkZSAiQ29sb3IuaCIKKyNp
bmNsdWRlICJGbG9hdFJlY3QuaCIKKyNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQzRC5oIgorI2lu
Y2x1ZGUgIkdyYXBoaWNzVHlwZXMuaCIKKyNpbmNsdWRlICJJbnRTaXplLmgiCisjaW5jbHVkZSAi
U29saWRGaWxsU2hhZGVyLmgiCisjaW5jbHVkZSAiVGV4U2hhZGVyLmgiCisKKyNpbmNsdWRlIDx3
dGYvdGV4dC9DU3RyaW5nLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CisKK25h
bWVzcGFjZSBXZWJDb3JlIHsKKworLy8gc3RhdGljCitQYXNzUmVmUHRyPFNoYXJlZENvbnRleHQz
RD4gU2hhcmVkQ29udGV4dDNEOjpjcmVhdGUoUGFzc093blB0cjxHcmFwaGljc0NvbnRleHQzRD4g
Y29udGV4dCkKK3sKKyAgICByZXR1cm4gYWRvcHRSZWYobmV3IFNoYXJlZENvbnRleHQzRChjb250
ZXh0KSk7Cit9CisKK1NoYXJlZENvbnRleHQzRDo6U2hhcmVkQ29udGV4dDNEKFBhc3NPd25QdHI8
R3JhcGhpY3NDb250ZXh0M0Q+IGNvbnRleHQpCisgICAgOiBtX2NvbnRleHQoY29udGV4dCkKKyAg
ICAsIG1fcXVhZFZlcnRpY2VzKDApCisgICAgLCBtX3NvbGlkRmlsbFNoYWRlcihTb2xpZEZpbGxT
aGFkZXI6OmNyZWF0ZShtX2NvbnRleHQuZ2V0KCkpKQorICAgICwgbV90ZXhTaGFkZXIoVGV4U2hh
ZGVyOjpjcmVhdGUobV9jb250ZXh0LmdldCgpKSkKK3sKK30KKworU2hhcmVkQ29udGV4dDNEOjp+
U2hhcmVkQ29udGV4dDNEKCkKK3sKKyAgICBtX2NvbnRleHQtPmRlbGV0ZUJ1ZmZlcihtX3F1YWRW
ZXJ0aWNlcyk7Cit9CisKK3ZvaWQgU2hhcmVkQ29udGV4dDNEOjptYWtlQ29udGV4dEN1cnJlbnQo
KQoreworICAgIG1fY29udGV4dC0+bWFrZUNvbnRleHRDdXJyZW50KCk7Cit9CisKK3ZvaWQgU2hh
cmVkQ29udGV4dDNEOjpzY2lzc29yKGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKK3sKKyAgICBtX2Nv
bnRleHQtPnNjaXNzb3IocmVjdC54KCksIHJlY3QueSgpLCByZWN0LndpZHRoKCksIHJlY3QuaGVp
Z2h0KCkpOworfQorCit2b2lkIFNoYXJlZENvbnRleHQzRDo6ZW5hYmxlKHVuc2lnbmVkIGNhcGFj
aXR5KQoreworICAgIG1fY29udGV4dC0+ZW5hYmxlKGNhcGFjaXR5KTsKK30KKwordm9pZCBTaGFy
ZWRDb250ZXh0M0Q6OmRpc2FibGUodW5zaWduZWQgY2FwYWNpdHkpCit7CisgICAgbV9jb250ZXh0
LT5kaXNhYmxlKGNhcGFjaXR5KTsKK30KKwordm9pZCBTaGFyZWRDb250ZXh0M0Q6OmNsZWFyQ29s
b3IoY29uc3QgQ29sb3ImIGNvbG9yKQoreworICAgIGZsb2F0IHJnYmFbNF07CisgICAgY29sb3Iu
Z2V0UkdCQShyZ2JhWzBdLCByZ2JhWzFdLCByZ2JhWzJdLCByZ2JhWzNdKTsKKyAgICBtX2NvbnRl
eHQtPmNsZWFyQ29sb3IocmdiYVswXSwgcmdiYVsxXSwgcmdiYVsyXSwgcmdiYVszXSk7Cit9CisK
K3ZvaWQgU2hhcmVkQ29udGV4dDNEOjpjbGVhcih1bnNpZ25lZCBtYXNrKQoreworICAgIG1fY29u
dGV4dC0+Y2xlYXIobWFzayk7Cit9CisKK3ZvaWQgU2hhcmVkQ29udGV4dDNEOjpkcmF3QXJyYXlz
KHVuc2lnbmVkIGxvbmcgbW9kZSwgbG9uZyBmaXJzdCwgbG9uZyBjb3VudCkKK3sKKyAgICBtX2Nv
bnRleHQtPmRyYXdBcnJheXMobW9kZSwgZmlyc3QsIGNvdW50KTsKK30KKwordW5zaWduZWQgbG9u
ZyBTaGFyZWRDb250ZXh0M0Q6OmdldEVycm9yKCkKK3sKKyAgICByZXR1cm4gbV9jb250ZXh0LT5n
ZXRFcnJvcigpOworfQorCit2b2lkIFNoYXJlZENvbnRleHQzRDo6Z2V0SW50ZWdlcnYodW5zaWdu
ZWQgbG9uZyBwbmFtZSwgaW50KiB2YWx1ZSkKK3sKKyAgICBtX2NvbnRleHQtPmdldEludGVnZXJ2
KHBuYW1lLCB2YWx1ZSk7Cit9CisKK3Vuc2lnbmVkIFNoYXJlZENvbnRleHQzRDo6Y3JlYXRlRnJh
bWVidWZmZXIoKQoreworICAgIHJldHVybiBtX2NvbnRleHQtPmNyZWF0ZUZyYW1lYnVmZmVyKCk7
Cit9CisKK3Vuc2lnbmVkIFNoYXJlZENvbnRleHQzRDo6Y3JlYXRlVGV4dHVyZSgpCit7CisgICAg
cmV0dXJuIG1fY29udGV4dC0+Y3JlYXRlVGV4dHVyZSgpOworfQorCit2b2lkIFNoYXJlZENvbnRl
eHQzRDo6ZGVsZXRlRnJhbWVidWZmZXIodW5zaWduZWQgZnJhbWVidWZmZXIpCit7CisgICAgbV9j
b250ZXh0LT5kZWxldGVGcmFtZWJ1ZmZlcihmcmFtZWJ1ZmZlcik7Cit9CisKK3ZvaWQgU2hhcmVk
Q29udGV4dDNEOjpkZWxldGVUZXh0dXJlKHVuc2lnbmVkIHRleHR1cmUpCit7CisgICAgbV9jb250
ZXh0LT5kZWxldGVUZXh0dXJlKHRleHR1cmUpOworfQorCit2b2lkIFNoYXJlZENvbnRleHQzRDo6
ZnJhbWVidWZmZXJUZXh0dXJlMkQodW5zaWduZWQgbG9uZyB0YXJnZXQsIHVuc2lnbmVkIGxvbmcg
YXR0YWNobWVudCwgdW5zaWduZWQgbG9uZyB0ZXh0YXJnZXQsIHVuc2lnbmVkIHRleHR1cmUsIGxv
bmcgbGV2ZWwpCit7CisgICAgbV9jb250ZXh0LT5mcmFtZWJ1ZmZlclRleHR1cmUyRCh0YXJnZXQs
IGF0dGFjaG1lbnQsIHRleHRhcmdldCwgdGV4dHVyZSwgbGV2ZWwpOworfQorCit2b2lkIFNoYXJl
ZENvbnRleHQzRDo6dGV4UGFyYW1ldGVyaSh1bnNpZ25lZCB0YXJnZXQsIHVuc2lnbmVkIHBuYW1l
LCBpbnQgcGFyYW0pCit7CisgICAgbV9jb250ZXh0LT50ZXhQYXJhbWV0ZXJpKHRhcmdldCwgcG5h
bWUsIHBhcmFtKTsKK30KKworaW50IFNoYXJlZENvbnRleHQzRDo6dGV4SW1hZ2UyRCh1bnNpZ25l
ZCB0YXJnZXQsIHVuc2lnbmVkIGxldmVsLCB1bnNpZ25lZCBpbnRlcm5hbGZvcm1hdCwgdW5zaWdu
ZWQgd2lkdGgsIHVuc2lnbmVkIGhlaWdodCwgdW5zaWduZWQgYm9yZGVyLCB1bnNpZ25lZCBmb3Jt
YXQsIHVuc2lnbmVkIHR5cGUsIHZvaWQqIHBpeGVscykKK3sKKyAgICBtX2NvbnRleHQtPnRleElt
YWdlMkQodGFyZ2V0LCBsZXZlbCwgaW50ZXJuYWxmb3JtYXQsIHdpZHRoLCBoZWlnaHQsIGJvcmRl
ciwgZm9ybWF0LCB0eXBlLCBwaXhlbHMpOworfQorCitpbnQgU2hhcmVkQ29udGV4dDNEOjp0ZXhT
dWJJbWFnZTJEKHVuc2lnbmVkIHRhcmdldCwgdW5zaWduZWQgbGV2ZWwsIHVuc2lnbmVkIHhvZmZz
ZXQsIHVuc2lnbmVkIHlvZmZzZXQsIHVuc2lnbmVkIHdpZHRoLCB1bnNpZ25lZCBoZWlnaHQsIHVu
c2lnbmVkIGZvcm1hdCwgdW5zaWduZWQgdHlwZSwgdm9pZCogcGl4ZWxzKQoreworICAgIG1fY29u
dGV4dC0+dGV4U3ViSW1hZ2UyRCh0YXJnZXQsIGxldmVsLCB4b2Zmc2V0LCB5b2Zmc2V0LCB3aWR0
aCwgaGVpZ2h0LCBmb3JtYXQsIHR5cGUsIHBpeGVscyk7Cit9CisKK3ZvaWQgU2hhcmVkQ29udGV4
dDNEOjpyZWFkUGl4ZWxzKGxvbmcgeCwgbG9uZyB5LCB1bnNpZ25lZCBsb25nIHdpZHRoLCB1bnNp
Z25lZCBsb25nIGhlaWdodCwgdW5zaWduZWQgbG9uZyBmb3JtYXQsIHVuc2lnbmVkIGxvbmcgdHlw
ZSwgdm9pZCogZGF0YSkKK3sKKyAgICBtX2NvbnRleHQtPnJlYWRQaXhlbHMoeCwgeSwgd2lkdGgs
IGhlaWdodCwgZm9ybWF0LCB0eXBlLCBkYXRhKTsKK30KKworYm9vbCBTaGFyZWRDb250ZXh0M0Q6
OnN1cHBvcnRzQkdSQSgpCit7CisgICAgcmV0dXJuIG1fY29udGV4dC0+c3VwcG9ydHNCR1JBKCk7
Cit9CisKK1RleHR1cmUqIFNoYXJlZENvbnRleHQzRDo6Y3JlYXRlVGV4dHVyZShOYXRpdmVJbWFn
ZVB0ciBwdHIsIFRleHR1cmU6OkZvcm1hdCBmb3JtYXQsIGludCB3aWR0aCwgaW50IGhlaWdodCkK
K3sKKyAgICBSZWZQdHI8VGV4dHVyZT4gdGV4dHVyZSA9IG1fdGV4dHVyZXMuZ2V0KHB0cik7Cisg
ICAgaWYgKHRleHR1cmUpCisgICAgICAgIHJldHVybiB0ZXh0dXJlLmdldCgpOworCisgICAgdGV4
dHVyZSA9IFRleHR1cmU6OmNyZWF0ZShtX2NvbnRleHQuZ2V0KCksIGZvcm1hdCwgd2lkdGgsIGhl
aWdodCk7CisgICAgVGV4dHVyZSogdCA9IHRleHR1cmUuZ2V0KCk7CisgICAgbV90ZXh0dXJlcy5z
ZXQocHRyLCB0ZXh0dXJlKTsKKyAgICByZXR1cm4gdDsKK30KKworVGV4dHVyZSogU2hhcmVkQ29u
dGV4dDNEOjpnZXRUZXh0dXJlKE5hdGl2ZUltYWdlUHRyIHB0cikKK3sKKyAgICBSZWZQdHI8VGV4
dHVyZT4gdGV4dHVyZSA9IG1fdGV4dHVyZXMuZ2V0KHB0cik7CisgICAgcmV0dXJuIHRleHR1cmUg
PyB0ZXh0dXJlLmdldCgpIDogMDsKK30KKworUGFzc1JlZlB0cjxUZXh0dXJlPiBTaGFyZWRDb250
ZXh0M0Q6OmNyZWF0ZVRleHR1cmUoVGV4dHVyZTo6Rm9ybWF0IGZvcm1hdCwgaW50IHdpZHRoLCBp
bnQgaGVpZ2h0KQoreworICAgIHJldHVybiBUZXh0dXJlOjpjcmVhdGUobV9jb250ZXh0LmdldCgp
LCBmb3JtYXQsIHdpZHRoLCBoZWlnaHQpOworfQorCit2b2lkIFNoYXJlZENvbnRleHQzRDo6YXBw
bHlDb21wb3NpdGVPcGVyYXRvcihDb21wb3NpdGVPcGVyYXRvciBvcCkKK3sKKyAgICBzd2l0Y2gg
KG9wKSB7CisgICAgY2FzZSBDb21wb3NpdGVDbGVhcjoKKyAgICAgICAgbV9jb250ZXh0LT5lbmFi
bGUoR3JhcGhpY3NDb250ZXh0M0Q6OkJMRU5EKTsKKyAgICAgICAgbV9jb250ZXh0LT5ibGVuZEZ1
bmMoR3JhcGhpY3NDb250ZXh0M0Q6OlpFUk8sIEdyYXBoaWNzQ29udGV4dDNEOjpaRVJPKTsKKyAg
ICAgICAgYnJlYWs7CisgICAgY2FzZSBDb21wb3NpdGVDb3B5OgorICAgICAgICBtX2NvbnRleHQt
PmRpc2FibGUoR3JhcGhpY3NDb250ZXh0M0Q6OkJMRU5EKTsKKyAgICAgICAgYnJlYWs7CisgICAg
Y2FzZSBDb21wb3NpdGVTb3VyY2VPdmVyOgorICAgICAgICBtX2NvbnRleHQtPmVuYWJsZShHcmFw
aGljc0NvbnRleHQzRDo6QkxFTkQpOworICAgICAgICBtX2NvbnRleHQtPmJsZW5kRnVuYyhHcmFw
aGljc0NvbnRleHQzRDo6T05FLCBHcmFwaGljc0NvbnRleHQzRDo6T05FX01JTlVTX1NSQ19BTFBI
QSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgQ29tcG9zaXRlU291cmNlSW46CisgICAgICAg
IG1fY29udGV4dC0+ZW5hYmxlKEdyYXBoaWNzQ29udGV4dDNEOjpCTEVORCk7CisgICAgICAgIG1f
Y29udGV4dC0+YmxlbmRGdW5jKEdyYXBoaWNzQ29udGV4dDNEOjpEU1RfQUxQSEEsIEdyYXBoaWNz
Q29udGV4dDNEOjpaRVJPKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBDb21wb3NpdGVTb3Vy
Y2VPdXQ6CisgICAgICAgIG1fY29udGV4dC0+ZW5hYmxlKEdyYXBoaWNzQ29udGV4dDNEOjpCTEVO
RCk7CisgICAgICAgIG1fY29udGV4dC0+YmxlbmRGdW5jKEdyYXBoaWNzQ29udGV4dDNEOjpPTkVf
TUlOVVNfRFNUX0FMUEhBLCBHcmFwaGljc0NvbnRleHQzRDo6WkVSTyk7CisgICAgICAgIGJyZWFr
OworICAgIGNhc2UgQ29tcG9zaXRlU291cmNlQXRvcDoKKyAgICAgICAgbV9jb250ZXh0LT5lbmFi
bGUoR3JhcGhpY3NDb250ZXh0M0Q6OkJMRU5EKTsKKyAgICAgICAgbV9jb250ZXh0LT5ibGVuZEZ1
bmMoR3JhcGhpY3NDb250ZXh0M0Q6OkRTVF9BTFBIQSwgR3JhcGhpY3NDb250ZXh0M0Q6Ok9ORV9N
SU5VU19TUkNfQUxQSEEpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIENvbXBvc2l0ZURlc3Rp
bmF0aW9uT3ZlcjoKKyAgICAgICAgbV9jb250ZXh0LT5lbmFibGUoR3JhcGhpY3NDb250ZXh0M0Q6
OkJMRU5EKTsKKyAgICAgICAgbV9jb250ZXh0LT5ibGVuZEZ1bmMoR3JhcGhpY3NDb250ZXh0M0Q6
Ok9ORV9NSU5VU19EU1RfQUxQSEEsIEdyYXBoaWNzQ29udGV4dDNEOjpPTkUpOworICAgICAgICBi
cmVhazsKKyAgICBjYXNlIENvbXBvc2l0ZURlc3RpbmF0aW9uSW46CisgICAgICAgIG1fY29udGV4
dC0+ZW5hYmxlKEdyYXBoaWNzQ29udGV4dDNEOjpCTEVORCk7CisgICAgICAgIG1fY29udGV4dC0+
YmxlbmRGdW5jKEdyYXBoaWNzQ29udGV4dDNEOjpaRVJPLCBHcmFwaGljc0NvbnRleHQzRDo6U1JD
X0FMUEhBKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBDb21wb3NpdGVEZXN0aW5hdGlvbk91
dDoKKyAgICAgICAgbV9jb250ZXh0LT5lbmFibGUoR3JhcGhpY3NDb250ZXh0M0Q6OkJMRU5EKTsK
KyAgICAgICAgbV9jb250ZXh0LT5ibGVuZEZ1bmMoR3JhcGhpY3NDb250ZXh0M0Q6OlpFUk8sIEdy
YXBoaWNzQ29udGV4dDNEOjpPTkVfTUlOVVNfU1JDX0FMUEhBKTsKKyAgICAgICAgYnJlYWs7Cisg
ICAgY2FzZSBDb21wb3NpdGVEZXN0aW5hdGlvbkF0b3A6CisgICAgICAgIG1fY29udGV4dC0+ZW5h
YmxlKEdyYXBoaWNzQ29udGV4dDNEOjpCTEVORCk7CisgICAgICAgIG1fY29udGV4dC0+YmxlbmRG
dW5jKEdyYXBoaWNzQ29udGV4dDNEOjpPTkVfTUlOVVNfRFNUX0FMUEhBLCBHcmFwaGljc0NvbnRl
eHQzRDo6U1JDX0FMUEhBKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBDb21wb3NpdGVYT1I6
CisgICAgICAgIG1fY29udGV4dC0+ZW5hYmxlKEdyYXBoaWNzQ29udGV4dDNEOjpCTEVORCk7Cisg
ICAgICAgIG1fY29udGV4dC0+YmxlbmRGdW5jKEdyYXBoaWNzQ29udGV4dDNEOjpPTkVfTUlOVVNf
RFNUX0FMUEhBLCBHcmFwaGljc0NvbnRleHQzRDo6T05FX01JTlVTX1NSQ19BTFBIQSk7CisgICAg
ICAgIGJyZWFrOworICAgIGNhc2UgQ29tcG9zaXRlUGx1c0RhcmtlcjoKKyAgICBjYXNlIENvbXBv
c2l0ZUhpZ2hsaWdodDoKKyAgICAgICAgLy8gdW5zdXBwb3J0ZWQKKyAgICAgICAgbV9jb250ZXh0
LT5kaXNhYmxlKEdyYXBoaWNzQ29udGV4dDNEOjpCTEVORCk7CisgICAgICAgIGJyZWFrOworICAg
IGNhc2UgQ29tcG9zaXRlUGx1c0xpZ2h0ZXI6CisgICAgICAgIG1fY29udGV4dC0+ZW5hYmxlKEdy
YXBoaWNzQ29udGV4dDNEOjpCTEVORCk7CisgICAgICAgIG1fY29udGV4dC0+YmxlbmRGdW5jKEdy
YXBoaWNzQ29udGV4dDNEOjpPTkUsIEdyYXBoaWNzQ29udGV4dDNEOjpPTkUpOworICAgICAgICBi
cmVhazsKKyAgICB9Cit9CisKK3ZvaWQgU2hhcmVkQ29udGV4dDNEOjp1c2VRdWFkVmVydGljZXMo
KQoreworICAgIGlmICghbV9xdWFkVmVydGljZXMpIHsKKyAgICAgICAgZmxvYXQgdmVydGljZXNb
XSA9IHsgMC4wZiwgMC4wZiwgMS4wZiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMS4w
ZiwgMC4wZiwgMS4wZiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMC4wZiwgMS4wZiwg
MS4wZiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMS4wZiwgMS4wZiwgMS4wZiB9Owor
ICAgICAgICBtX3F1YWRWZXJ0aWNlcyA9IG1fY29udGV4dC0+Y3JlYXRlQnVmZmVyKCk7CisgICAg
ICAgIG1fY29udGV4dC0+YmluZEJ1ZmZlcihHcmFwaGljc0NvbnRleHQzRDo6QVJSQVlfQlVGRkVS
LCBtX3F1YWRWZXJ0aWNlcyk7CisgICAgICAgIG1fY29udGV4dC0+YnVmZmVyRGF0YShHcmFwaGlj
c0NvbnRleHQzRDo6QVJSQVlfQlVGRkVSLCBzaXplb2YodmVydGljZXMpLCB2ZXJ0aWNlcywgR3Jh
cGhpY3NDb250ZXh0M0Q6OlNUQVRJQ19EUkFXKTsKKyAgICB9IGVsc2UgeworICAgICAgICBtX2Nv
bnRleHQtPmJpbmRCdWZmZXIoR3JhcGhpY3NDb250ZXh0M0Q6OkFSUkFZX0JVRkZFUiwgbV9xdWFk
VmVydGljZXMpOworICAgIH0KK30KKwordm9pZCBTaGFyZWRDb250ZXh0M0Q6OnNldEFjdGl2ZVRl
eHR1cmUodW5zaWduZWQgdGV4dHVyZVVuaXQpCit7CisgICAgbV9jb250ZXh0LT5hY3RpdmVUZXh0
dXJlKHRleHR1cmVVbml0KTsKK30KKwordm9pZCBTaGFyZWRDb250ZXh0M0Q6OmJpbmRUZXh0dXJl
KHVuc2lnbmVkIHRhcmdldCwgdW5zaWduZWQgdGV4dHVyZSkKK3sKKyAgICBtX2NvbnRleHQtPmJp
bmRUZXh0dXJlKHRhcmdldCwgdGV4dHVyZSk7Cit9CisKK3ZvaWQgU2hhcmVkQ29udGV4dDNEOjp1
c2VGaWxsU29saWRQcm9ncmFtKGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgdHJhbnNmb3JtLCBjb25z
dCBDb2xvciYgY29sb3IpCit7CisgICAgbV9zb2xpZEZpbGxTaGFkZXItPnVzZSh0cmFuc2Zvcm0s
IGNvbG9yKTsKK30KKwordm9pZCBTaGFyZWRDb250ZXh0M0Q6OnVzZVRleHR1cmVQcm9ncmFtKGNv
bnN0IEFmZmluZVRyYW5zZm9ybSYgdHJhbnNmb3JtLCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHRl
eFRyYW5zZm9ybSwgZmxvYXQgYWxwaGEpCit7CisgICAgbV90ZXhTaGFkZXItPnVzZSh0cmFuc2Zv
cm0sIHRleFRyYW5zZm9ybSwgMCwgYWxwaGEpOworfQorCit2b2lkIFNoYXJlZENvbnRleHQzRDo6
YmluZEZyYW1lYnVmZmVyKHVuc2lnbmVkIGZyYW1lYnVmZmVyKQoreworICAgIG1fY29udGV4dC0+
YmluZEZyYW1lYnVmZmVyKEdyYXBoaWNzQ29udGV4dDNEOjpGUkFNRUJVRkZFUiwgZnJhbWVidWZm
ZXIpOworfQorCit2b2lkIFNoYXJlZENvbnRleHQzRDo6c2V0Vmlld3BvcnQoY29uc3QgSW50U2l6
ZSYgc2l6ZSkKK3sKKyAgICBtX2NvbnRleHQtPnZpZXdwb3J0KDAsIDAsIHNpemUud2lkdGgoKSwg
c2l6ZS5oZWlnaHQoKSk7Cit9CisKK2Jvb2wgU2hhcmVkQ29udGV4dDNEOjpwYWludHNJbnRvQ2Fu
dmFzQnVmZmVyKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9jb250ZXh0LT5wYWludHNJbnRvQ2Fu
dmFzQnVmZmVyKCk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3B1L1NoYXJlZENvbnRleHQzRC5oIGIvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9ncHUvU2hhcmVkQ29udGV4dDNELmgKbmV3IGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZTM5OTNj
MjE5YjJhOTliMDA4MTE4NTdjNmQ4YzlmNzYwODJkMjU5MgotLS0gL2Rldi9udWxsCisrKyBiL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3B1L1NoYXJlZENvbnRleHQzRC5oCkBAIC0wLDAgKzEs
MTI0IEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDEwLCBHb29nbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorICogbWV0Ogor
ICoKKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiBjb3B5cmlnaHQgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisg
KiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlCisgKiBkaXN0cmlidXRpb24uCisgKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdv
b2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisgKiBjb250cmlidXRvcnMgbWF5IGJlIHVz
ZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorICogdGhpcyBz
b2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQg
Q09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VM
QVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdI
VAorICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVO
VCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEs
IE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgor
ICovCisKKyNpZm5kZWYgU2hhcmVkQ29udGV4dDNEX2gKKyNkZWZpbmUgU2hhcmVkQ29udGV4dDNE
X2gKKworI2luY2x1ZGUgIkdyYXBoaWNzVHlwZXMuaCIKKyNpbmNsdWRlICJJbWFnZVNvdXJjZS5o
IgorI2luY2x1ZGUgIlRleHR1cmUuaCIKKworI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+CisjaW5j
bHVkZSA8d3RmL093blB0ci5oPgorI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+CisjaW5jbHVk
ZSA8d3RmL1JlZlB0ci5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIEFmZmluZVRy
YW5zZm9ybTsKK2NsYXNzIENvbG9yOworY2xhc3MgR3JhcGhpY3NDb250ZXh0M0Q7CitjbGFzcyBG
bG9hdFJlY3Q7CitjbGFzcyBJbnRTaXplOworY2xhc3MgU29saWRGaWxsU2hhZGVyOworY2xhc3Mg
VGV4U2hhZGVyOworCit0eXBlZGVmIEhhc2hNYXA8TmF0aXZlSW1hZ2VQdHIsIFJlZlB0cjxUZXh0
dXJlPiA+IFRleHR1cmVIYXNoTWFwOworCitjbGFzcyBTaGFyZWRDb250ZXh0M0QgOiBwdWJsaWMg
UmVmQ291bnRlZDxTaGFyZWRDb250ZXh0M0Q+IHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgUGFzc1Jl
ZlB0cjxTaGFyZWRDb250ZXh0M0Q+IGNyZWF0ZShQYXNzT3duUHRyPEdyYXBoaWNzQ29udGV4dDNE
Pik7CisgICAgflNoYXJlZENvbnRleHQzRCgpOworCisgICAgLy8gRnVuY3Rpb25zIHRoYXQgZGVs
ZWdhdGUgZGlyZWN0bHkgdG8gR3JhcGhpY3NDb250ZXh0M0QsIHdpdGggY2FjaGluZworICAgIHZv
aWQgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgdm9pZCBiaW5kRnJhbWVidWZmZXIodW5zaWdu
ZWQgZnJhbWVidWZmZXIpOworICAgIHZvaWQgc2V0Vmlld3BvcnQoY29uc3QgSW50U2l6ZSYpOwor
ICAgIHZvaWQgc2Npc3Nvcihjb25zdCBGbG9hdFJlY3QmKTsKKyAgICB2b2lkIGVuYWJsZSh1bnNp
Z25lZCBjYXBhY2l0eSk7CisgICAgdm9pZCBkaXNhYmxlKHVuc2lnbmVkIGNhcGFjaXR5KTsKKyAg
ICB2b2lkIGNsZWFyQ29sb3IoY29uc3QgQ29sb3ImKTsKKyAgICB2b2lkIGNsZWFyKHVuc2lnbmVk
IG1hc2spOworICAgIHZvaWQgZHJhd0FycmF5cyh1bnNpZ25lZCBsb25nIG1vZGUsIGxvbmcgZmly
c3QsIGxvbmcgY291bnQpOworICAgIHVuc2lnbmVkIGxvbmcgZ2V0RXJyb3IoKTsKKyAgICB2b2lk
IGdldEludGVnZXJ2KHVuc2lnbmVkIGxvbmcgcG5hbWUsIGludCogdmFsdWUpOworCisgICAgdW5z
aWduZWQgY3JlYXRlRnJhbWVidWZmZXIoKTsKKyAgICB1bnNpZ25lZCBjcmVhdGVUZXh0dXJlKCk7
CisKKyAgICB2b2lkIGRlbGV0ZUZyYW1lYnVmZmVyKHVuc2lnbmVkIGZyYW1lYnVmZmVyKTsKKyAg
ICB2b2lkIGRlbGV0ZVRleHR1cmUodW5zaWduZWQgdGV4dHVyZSk7CisKKyAgICB2b2lkIGZyYW1l
YnVmZmVyVGV4dHVyZTJEKHVuc2lnbmVkIGxvbmcgdGFyZ2V0LCB1bnNpZ25lZCBsb25nIGF0dGFj
aG1lbnQsIHVuc2lnbmVkIGxvbmcgdGV4dGFyZ2V0LCB1bnNpZ25lZCwgbG9uZyBsZXZlbCk7Cisg
ICAgdm9pZCB0ZXhQYXJhbWV0ZXJpKHVuc2lnbmVkIHRhcmdldCwgdW5zaWduZWQgcG5hbWUsIGlu
dCBwYXJhbSk7CisgICAgaW50IHRleEltYWdlMkQodW5zaWduZWQgdGFyZ2V0LCB1bnNpZ25lZCBs
ZXZlbCwgdW5zaWduZWQgaW50ZXJuYWxmb3JtYXQsIHVuc2lnbmVkIHdpZHRoLCB1bnNpZ25lZCBo
ZWlnaHQsIHVuc2lnbmVkIGJvcmRlciwgdW5zaWduZWQgZm9ybWF0LCB1bnNpZ25lZCB0eXBlLCB2
b2lkKiBwaXhlbHMpOworICAgIGludCB0ZXhTdWJJbWFnZTJEKHVuc2lnbmVkIHRhcmdldCwgdW5z
aWduZWQgbGV2ZWwsIHVuc2lnbmVkIHhvZmZzZXQsIHVuc2lnbmVkIHlvZmZzZXQsIHVuc2lnbmVk
IHdpZHRoLCB1bnNpZ25lZCBoZWlnaHQsIHVuc2lnbmVkIGZvcm1hdCwgdW5zaWduZWQgdHlwZSwg
dm9pZCogcGl4ZWxzKTsKKworICAgIHZvaWQgcmVhZFBpeGVscyhsb25nIHgsIGxvbmcgeSwgdW5z
aWduZWQgbG9uZyB3aWR0aCwgdW5zaWduZWQgbG9uZyBoZWlnaHQsIHVuc2lnbmVkIGxvbmcgZm9y
bWF0LCB1bnNpZ25lZCBsb25nIHR5cGUsIHZvaWQqIGRhdGEpOworCisgICAgYm9vbCBwYWludHNJ
bnRvQ2FudmFzQnVmZmVyKCkgY29uc3Q7CisKKyAgICAvLyBTaGFyZWQgbG9naWMgZm9yIGNhbnZh
cyAyZAorICAgIHZvaWQgYXBwbHlDb21wb3NpdGVPcGVyYXRvcihDb21wb3NpdGVPcGVyYXRvcik7
CisgICAgdm9pZCB1c2VRdWFkVmVydGljZXMoKTsKKworICAgIHZvaWQgdXNlRmlsbFNvbGlkUHJv
Z3JhbShjb25zdCBBZmZpbmVUcmFuc2Zvcm0mLCBjb25zdCBDb2xvciYpOworICAgIHZvaWQgdXNl
VGV4dHVyZVByb2dyYW0oY29uc3QgQWZmaW5lVHJhbnNmb3JtJiwgY29uc3QgQWZmaW5lVHJhbnNm
b3JtJiwgZmxvYXQgYWxwaGEpOworCisgICAgdm9pZCBzZXRBY3RpdmVUZXh0dXJlKHVuc2lnbmVk
IHRleHR1cmVVbml0KTsKKyAgICB2b2lkIGJpbmRUZXh0dXJlKHVuc2lnbmVkIHRhcmdldCwgdW5z
aWduZWQgdGV4dHVyZSk7CisKKyAgICBib29sIHN1cHBvcnRzQkdSQSgpOworCisgICAgLy8gQ3Jl
YXRlcyBhIHRleHR1cmUgYXNzb2NpYXRlZCB3aXRoIHRoZSBnaXZlbiBpbWFnZS4gIElzIG93bmVk
IGJ5IHRoaXMgY29udGV4dCdzCisgICAgLy8gVGV4dHVyZUhhc2hNYXAuCisgICAgVGV4dHVyZSog
Y3JlYXRlVGV4dHVyZShOYXRpdmVJbWFnZVB0ciwgVGV4dHVyZTo6Rm9ybWF0LCBpbnQgd2lkdGgs
IGludCBoZWlnaHQpOworICAgIFRleHR1cmUqIGdldFRleHR1cmUoTmF0aXZlSW1hZ2VQdHIpOwor
CisgICAgLy8gQ3JlYXRlcyBhIHRleHR1cmUgdGhhdCBpcyBub3QgYXNzb2NpYXRlZCB3aXRoIGFu
eSBpbWFnZS4gIFRoZSBjYWxsZXIgdGFrZXMgb3duZXJzaGlwIG9mCisgICAgLy8gdGhlIHRleHR1
cmUuCisgICAgUGFzc1JlZlB0cjxUZXh0dXJlPiBjcmVhdGVUZXh0dXJlKFRleHR1cmU6OkZvcm1h
dCwgaW50IHdpZHRoLCBpbnQgaGVpZ2h0KTsKKworcHJpdmF0ZToKKyAgICBTaGFyZWRDb250ZXh0
M0QoUGFzc093blB0cjxHcmFwaGljc0NvbnRleHQzRD4gY29udGV4dCk7CisKKyAgICBPd25QdHI8
R3JhcGhpY3NDb250ZXh0M0Q+IG1fY29udGV4dDsKKworICAgIHVuc2lnbmVkIG1fcXVhZFZlcnRp
Y2VzOworCisgICAgT3duUHRyPFNvbGlkRmlsbFNoYWRlcj4gbV9zb2xpZEZpbGxTaGFkZXI7Cisg
ICAgT3duUHRyPFRleFNoYWRlcj4gbV90ZXhTaGFkZXI7CisKKyAgICBUZXh0dXJlSGFzaE1hcCBt
X3RleHR1cmVzOworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gU2hh
cmVkQ29udGV4dDNEX2gKZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3B1
L1RleHR1cmUuY3BwIGIvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ncHUvVGV4dHVyZS5jcHAK
aW5kZXggNTU3NjAzYzk3NjMyZmUwZjM4ZjViNzM2ZWM2NWEzYzY1YzcxNDIzNi4uMzZlNGFkNWVm
YzI2ODJkYjVhMDk4MjkyMDIzYzJkM2I1ZmE5NmQ3OCAxMDA2NDQKLS0tIGEvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9ncHUvVGV4dHVyZS5jcHAKKysrIGIvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9ncHUvVGV4dHVyZS5jcHAKQEAgLTM0LDYgKzM0LDcgQEAKIAogI2luY2x1ZGUgIkdyYXBo
aWNzQ29udGV4dDNELmgiCiAjaW5jbHVkZSAiSW50UmVjdC5oIgorCiAjaW5jbHVkZSA8d3RmL093
bkFycmF5UHRyLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKZGlmZiAtLWdpdCBhL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvbWFjL0dyYXBoaWNzTGF5ZXJDQS5oIGIvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9tYWMvR3JhcGhpY3NMYXllckNBLmgKaW5kZXggYTlmNzQ3YWQwMDRkODJlMzk2
Mzk0N2E5NjQyZDJjMTUyOTI0NWI0My4uMWNhMDI3OTQxMzZkYzg4Mzc3NjRmZGY0ZWJmMzNiMGUx
MjUwMmI0YiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9tYWMvR3JhcGhp
Y3NMYXllckNBLmgKKysrIGIvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9tYWMvR3JhcGhpY3NM
YXllckNBLmgKQEAgLTEwMyw3ICsxMDMsNyBAQCBwdWJsaWM6CiAgICAgCiAgICAgdmlydHVhbCB2
b2lkIHNldENvbnRlbnRzVG9JbWFnZShJbWFnZSopOwogICAgIHZpcnR1YWwgdm9pZCBzZXRDb250
ZW50c1RvTWVkaWEoUGxhdGZvcm1MYXllciopOwotICAgIHZpcnR1YWwgdm9pZCBzZXRDb250ZW50
c1RvQ2FudmFzKFBsYXRmb3JtTGF5ZXIqKTsKKyAgICB2aXJ0dWFsIHZvaWQgc2V0Q29udGVudHNU
b1dlYkdMKFBsYXRmb3JtTGF5ZXIqKTsKIAogICAgIHZpcnR1YWwgYm9vbCBoYXNDb250ZW50c0xh
eWVyKCkgY29uc3QgeyByZXR1cm4gbV9jb250ZW50c0xheWVyOyB9CiAgICAgCmRpZmYgLS1naXQg
YS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL21hYy9HcmFwaGljc0xheWVyQ0EubW0gYi9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL21hYy9HcmFwaGljc0xheWVyQ0EubW0KaW5kZXggMzE1Y2Mw
MDkxMDNjNjk4ZmEwMDE0N2I0OTNmODY1NDljODFmMmNhZS4uMDAxN2NiZmU1NzQwOTdiZWI3OTBk
NTgyZDA4NmNhMTU4MTMyNzFjNyAxMDA2NDQKLS0tIGEvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9tYWMvR3JhcGhpY3NMYXllckNBLm1tCisrKyBiL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
bWFjL0dyYXBoaWNzTGF5ZXJDQS5tbQpAQCAtMTczMSw3ICsxNzMxLDcgQEAgdm9pZCBHcmFwaGlj
c0xheWVyQ0E6OnBhdXNlQW5pbWF0aW9uT25MYXllcihBbmltYXRlZFByb3BlcnR5SUQgcHJvcGVy
dHksIGNvbnN0IFMKICAgICB9CiB9CiAKLXZvaWQgR3JhcGhpY3NMYXllckNBOjpzZXRDb250ZW50
c1RvQ2FudmFzKFBsYXRmb3JtTGF5ZXIqIGNhbnZhc0xheWVyKQordm9pZCBHcmFwaGljc0xheWVy
Q0E6OnNldENvbnRlbnRzVG9XZWJHTChQbGF0Zm9ybUxheWVyKiBjYW52YXNMYXllcikKIHsKICAg
ICBpZiAoY2FudmFzTGF5ZXIgPT0gbV9jb250ZW50c0xheWVyKQogICAgICAgICByZXR1cm47CmRp
ZmYgLS1naXQgYS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3NraWEvR3JhcGhpY3NDb250ZXh0
U2tpYS5jcHAgYi9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3NraWEvR3JhcGhpY3NDb250ZXh0
U2tpYS5jcHAKaW5kZXggYjRmZGRkNTY4ZGU1ZTkxMjhlMTM3ZTg1NWQzODhkY2M2YTkyODhiMy4u
MmE0NWJhNThkZGZjNDZiZTliOGUzODk5NDRlNjMzYmE0MzRiMDQxOSAxMDA2NDQKLS0tIGEvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9za2lhL0dyYXBoaWNzQ29udGV4dFNraWEuY3BwCisrKyBi
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc2tpYS9HcmFwaGljc0NvbnRleHRTa2lhLmNwcApA
QCAtMTI0MiwxNCArMTI0MiwxNCBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6dHJhbnNsYXRlKGZs
b2F0IHcsIGZsb2F0IGgpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgV2ViQ29yZUZsb2F0VG9Ta1NjYWxhcihoKSk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0
OjpzZXRHcmFwaGljc0NvbnRleHQzRChHcmFwaGljc0NvbnRleHQzRCogY29udGV4dDNELCBjb25z
dCBJbnRTaXplJiBzaXplKQordm9pZCBHcmFwaGljc0NvbnRleHQ6OnN5bmNTb2Z0d2FyZUNhbnZh
cygpCiB7Ci0gICAgcGxhdGZvcm1Db250ZXh0KCktPnNldEdyYXBoaWNzQ29udGV4dDNEKGNvbnRl
eHQzRCwgc2l6ZSk7CisgICAgcGxhdGZvcm1Db250ZXh0KCktPnN5bmNTb2Z0d2FyZUNhbnZhcygp
OwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6c3luY1NvZnR3YXJlQ2FudmFzKCkKK3ZvaWQg
R3JhcGhpY3NDb250ZXh0OjpzZXRTaGFyZWRDb250ZXh0M0QoU2hhcmVkQ29udGV4dDNEKiBjb250
ZXh0LCBEcmF3aW5nQnVmZmVyKiBmcmFtZWJ1ZmZlciwgY29uc3QgSW50U2l6ZSYgc2l6ZSkKIHsK
LSAgICBwbGF0Zm9ybUNvbnRleHQoKS0+c3luY1NvZnR3YXJlQ2FudmFzKCk7CisgICAgcGxhdGZv
cm1Db250ZXh0KCktPnNldFNoYXJlZENvbnRleHQzRChjb250ZXh0LCBmcmFtZWJ1ZmZlciwgc2l6
ZSk7CiB9CiAKIH0gIC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL3NraWEvSW1hZ2VTa2lhLmNwcCBiL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3Mvc2tpYS9JbWFnZVNraWEuY3BwCmluZGV4IGFlZDI4OWZlM2MxNTVhYTVkMzU5NmQ0OTRi
NjA4OTNlNGMwMTZiYjYuLjViNTk2MmEyNWEwMmE1MDgwZTYwNTMyMzQ3ODBiODJmNGJhYzRkNDQg
MTAwNjQ0Ci0tLSBhL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc2tpYS9JbWFnZVNraWEuY3Bw
CisrKyBiL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc2tpYS9JbWFnZVNraWEuY3BwCkBAIC00
Nyw2ICs0Nyw3IEBACiAjaW5jbHVkZSAiU2tSZWN0LmgiCiAjaW5jbHVkZSAiU2tTaGFkZXIuaCIK
ICNpbmNsdWRlICJTa2lhVXRpbHMuaCIKKyNpbmNsdWRlICJUZXh0dXJlLmgiCiAKICNpbmNsdWRl
ICJza2lhL2V4dC9pbWFnZV9vcGVyYXRpb25zLmgiCiAjaW5jbHVkZSAic2tpYS9leHQvcGxhdGZv
cm1fY2FudmFzLmgiCmRpZmYgLS1naXQgYS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3NraWEv
UGxhdGZvcm1Db250ZXh0U2tpYS5jcHAgYi9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3NraWEv
UGxhdGZvcm1Db250ZXh0U2tpYS5jcHAKaW5kZXggM2IxZDAxNWNmMTIyMzk1Mjc0M2U3YWE3NjQ5
MzcyYWM0NzZjOGY1Mi4uOTFiMWY1MWQwMzNiZTY5MTdkODU4NWM2ZTY0MzMxYTBiMTExN2VjNSAx
MDA2NDQKLS0tIGEvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9za2lhL1BsYXRmb3JtQ29udGV4
dFNraWEuY3BwCisrKyBiL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc2tpYS9QbGF0Zm9ybUNv
bnRleHRTa2lhLmNwcApAQCAtMzMsMTIgKzMzLDEzIEBACiAjaW5jbHVkZSAiUGxhdGZvcm1Db250
ZXh0U2tpYS5oIgogCiAjaW5jbHVkZSAiQWZmaW5lVHJhbnNmb3JtLmgiCi0jaW5jbHVkZSAiQ2Fu
dmFzTGF5ZXJDaHJvbWl1bS5oIgorI2luY2x1ZGUgIkRyYXdpbmdCdWZmZXIuaCIKICNpbmNsdWRl
ICJHTEVTMkNhbnZhcy5oIgogI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgogI2luY2x1ZGUg
IkdyYXBoaWNzQ29udGV4dDNELmgiCiAjaW5jbHVkZSAiSW1hZ2VCdWZmZXIuaCIKICNpbmNsdWRl
ICJOYXRpdmVJbWFnZVNraWEuaCIKKyNpbmNsdWRlICJTaGFyZWRDb250ZXh0M0QuaCIKICNpbmNs
dWRlICJTa2lhVXRpbHMuaCIKICNpbmNsdWRlICJUZXh0dXJlLmgiCiAjaW5jbHVkZSAiVGlsaW5n
RGF0YS5oIgpAQCAtMjE2LDEyICsyMTcsOCBAQCBQbGF0Zm9ybUNvbnRleHRTa2lhOjpQbGF0Zm9y
bUNvbnRleHRTa2lhKHNraWE6OlBsYXRmb3JtQ2FudmFzKiBjYW52YXMpCiAKIFBsYXRmb3JtQ29u
dGV4dFNraWE6On5QbGF0Zm9ybUNvbnRleHRTa2lhKCkKIHsKLSNpZiBVU0UoQUNDRUxFUkFURURf
Q09NUE9TSVRJTkcpCi0gICAgaWYgKG1fZ3B1Q2FudmFzKSB7Ci0gICAgICAgIENhbnZhc0xheWVy
Q2hyb21pdW0qIGxheWVyID0gc3RhdGljX2Nhc3Q8Q2FudmFzTGF5ZXJDaHJvbWl1bSo+KG1fZ3B1
Q2FudmFzLT5jb250ZXh0KCktPnBsYXRmb3JtTGF5ZXIoKSk7Ci0gICAgICAgIGxheWVyLT5zZXRQ
cmVwYXJlVGV4dHVyZUNhbGxiYWNrKDApOwotICAgIH0KLSNlbmRpZgorICAgIGlmIChtX2dwdUNh
bnZhcykKKyAgICAgICAgbV9ncHVDYW52YXMtPmRyYXdpbmdCdWZmZXIoKS0+c2V0V2lsbFB1Ymxp
c2hDYWxsYmFjaygwKTsKIH0KIAogdm9pZCBQbGF0Zm9ybUNvbnRleHRTa2lhOjpzZXRDYW52YXMo
c2tpYTo6UGxhdGZvcm1DYW52YXMqIGNhbnZhcykKQEAgLTY3OCwzMyArNjc1LDMzIEBAIHZvaWQg
UGxhdGZvcm1Db250ZXh0U2tpYTo6YXBwbHlBbnRpQWxpYXNlZENsaXBQYXRocyhXVEY6OlZlY3Rv
cjxTa1BhdGg+JiBwYXRocykKICAgICBtX2NhbnZhcy0+cmVzdG9yZSgpOwogfQogCi0jaWYgVVNF
KEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQotY2xhc3MgUHJlcGFyZVRleHR1cmVDYWxsYmFja0lt
cGwgOiBwdWJsaWMgQ2FudmFzTGF5ZXJDaHJvbWl1bTo6UHJlcGFyZVRleHR1cmVDYWxsYmFjayB7
CitjbGFzcyBXaWxsUHVibGlzaENhbGxiYWNrSW1wbCA6IHB1YmxpYyBEcmF3aW5nQnVmZmVyOjpX
aWxsUHVibGlzaENhbGxiYWNrIHsKIHB1YmxpYzoKLSAgICBzdGF0aWMgUGFzc093blB0cjxQcmVw
YXJlVGV4dHVyZUNhbGxiYWNrSW1wbD4gY3JlYXRlKFBsYXRmb3JtQ29udGV4dFNraWEqIHBjcykK
KyAgICBzdGF0aWMgUGFzc093blB0cjxXaWxsUHVibGlzaENhbGxiYWNrPiBjcmVhdGUoUGxhdGZv
cm1Db250ZXh0U2tpYSogcGNzKQogICAgIHsKLSAgICAgICAgcmV0dXJuIG5ldyBQcmVwYXJlVGV4
dHVyZUNhbGxiYWNrSW1wbChwY3MpOworICAgICAgICByZXR1cm4gYWRvcHRQdHIobmV3IFdpbGxQ
dWJsaXNoQ2FsbGJhY2tJbXBsKHBjcykpOwogICAgIH0KIAotICAgIHZpcnR1YWwgdm9pZCB3aWxs
UHJlcGFyZVRleHR1cmUoKQorICAgIHZpcnR1YWwgdm9pZCB3aWxsUHVibGlzaCgpCiAgICAgewog
ICAgICAgICBtX3Bjcy0+cHJlcGFyZUZvckhhcmR3YXJlRHJhdygpOwogICAgIH0KKwogcHJpdmF0
ZToKLSAgICBleHBsaWNpdCBQcmVwYXJlVGV4dHVyZUNhbGxiYWNrSW1wbChQbGF0Zm9ybUNvbnRl
eHRTa2lhKiBwY3MpIDogbV9wY3MocGNzKSB7fQorICAgIGV4cGxpY2l0IFdpbGxQdWJsaXNoQ2Fs
bGJhY2tJbXBsKFBsYXRmb3JtQ29udGV4dFNraWEqIHBjcykKKyAgICAgICAgOiBtX3BjcyhwY3Mp
CisgICAgeworICAgIH0KKwogICAgIFBsYXRmb3JtQ29udGV4dFNraWEqIG1fcGNzOwogfTsKLSNl
bmRpZgogCi12b2lkIFBsYXRmb3JtQ29udGV4dFNraWE6OnNldEdyYXBoaWNzQ29udGV4dDNEKEdy
YXBoaWNzQ29udGV4dDNEKiBjb250ZXh0LCBjb25zdCBXZWJDb3JlOjpJbnRTaXplJiBzaXplKQor
dm9pZCBQbGF0Zm9ybUNvbnRleHRTa2lhOjpzZXRTaGFyZWRDb250ZXh0M0QoU2hhcmVkQ29udGV4
dDNEKiBjb250ZXh0LCBEcmF3aW5nQnVmZmVyKiBkcmF3aW5nQnVmZmVyLCBjb25zdCBXZWJDb3Jl
OjpJbnRTaXplJiBzaXplKQogewogICAgIG1fdXNlR1BVID0gdHJ1ZTsKLSAgICBtX2dwdUNhbnZh
cyA9IG5ldyBHTEVTMkNhbnZhcyhjb250ZXh0LCBzaXplKTsKKyAgICBtX2dwdUNhbnZhcyA9IG5l
dyBHTEVTMkNhbnZhcyhjb250ZXh0LCBkcmF3aW5nQnVmZmVyLCBzaXplKTsKICAgICBtX3VwbG9h
ZFRleHR1cmUuY2xlYXIoKTsKLSNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCi0gICAg
Q2FudmFzTGF5ZXJDaHJvbWl1bSogbGF5ZXIgPSBzdGF0aWNfY2FzdDxDYW52YXNMYXllckNocm9t
aXVtKj4oY29udGV4dC0+cGxhdGZvcm1MYXllcigpKTsKLSAgICBsYXllci0+c2V0UHJlcGFyZVRl
eHR1cmVDYWxsYmFjayhQcmVwYXJlVGV4dHVyZUNhbGxiYWNrSW1wbDo6Y3JlYXRlKHRoaXMpKTsK
LSNlbmRpZgorICAgIGRyYXdpbmdCdWZmZXItPnNldFdpbGxQdWJsaXNoQ2FsbGJhY2soV2lsbFB1
Ymxpc2hDYWxsYmFja0ltcGw6OmNyZWF0ZSh0aGlzKSk7CiB9CiAKIHZvaWQgUGxhdGZvcm1Db250
ZXh0U2tpYTo6cHJlcGFyZUZvclNvZnR3YXJlRHJhdygpIGNvbnN0CkBAIC03ODQsOSArNzgxLDkg
QEAgdm9pZCBQbGF0Zm9ybUNvbnRleHRTa2lhOjp1cGxvYWRTb2Z0d2FyZVRvSGFyZHdhcmUoQ29t
cG9zaXRlT3BlcmF0b3Igb3ApIGNvbnN0CiB7CiAgICAgY29uc3QgU2tCaXRtYXAmIGJpdG1hcCA9
IG1fY2FudmFzLT5nZXREZXZpY2UoKS0+YWNjZXNzQml0bWFwKGZhbHNlKTsKICAgICBTa0F1dG9M
b2NrUGl4ZWxzIGxvY2soYml0bWFwKTsKLSAgICBHcmFwaGljc0NvbnRleHQzRCogY29udGV4dCA9
IG1fZ3B1Q2FudmFzLT5jb250ZXh0KCk7CisgICAgU2hhcmVkQ29udGV4dDNEKiBjb250ZXh0ID0g
bV9ncHVDYW52YXMtPmNvbnRleHQoKTsKICAgICBpZiAoIW1fdXBsb2FkVGV4dHVyZSB8fCBtX3Vw
bG9hZFRleHR1cmUtPnRpbGVzKCkudG90YWxTaXplWCgpIDwgYml0bWFwLndpZHRoKCkgfHwgbV91
cGxvYWRUZXh0dXJlLT50aWxlcygpLnRvdGFsU2l6ZVkoKSA8IGJpdG1hcC5oZWlnaHQoKSkKLSAg
ICAgICAgbV91cGxvYWRUZXh0dXJlID0gVGV4dHVyZTo6Y3JlYXRlKGNvbnRleHQsIFRleHR1cmU6
OkJHUkE4LCBiaXRtYXAud2lkdGgoKSwgYml0bWFwLmhlaWdodCgpKTsKKyAgICAgICAgbV91cGxv
YWRUZXh0dXJlID0gY29udGV4dC0+Y3JlYXRlVGV4dHVyZShUZXh0dXJlOjpCR1JBOCwgYml0bWFw
LndpZHRoKCksIGJpdG1hcC5oZWlnaHQoKSk7CiAgICAgbV91cGxvYWRUZXh0dXJlLT5sb2FkKGJp
dG1hcC5nZXRQaXhlbHMoKSk7CiAgICAgSW50UmVjdCByZWN0KDAsIDAsIGJpdG1hcC53aWR0aCgp
LCBiaXRtYXAuaGVpZ2h0KCkpOwogICAgIEFmZmluZVRyYW5zZm9ybSBpZGVudGl0eTsKQEAgLTc5
OSw3ICs3OTYsOCBAQCB2b2lkIFBsYXRmb3JtQ29udGV4dFNraWE6OnJlYWRiYWNrSGFyZHdhcmVU
b1NvZnR3YXJlKCkgY29uc3QKICAgICBTa0F1dG9Mb2NrUGl4ZWxzIGxvY2soYml0bWFwKTsKICAg
ICBpbnQgd2lkdGggPSBiaXRtYXAud2lkdGgoKSwgaGVpZ2h0ID0gYml0bWFwLmhlaWdodCgpOwog
ICAgIE93bkFycmF5UHRyPHVpbnQzMl90PiBidWYobmV3IHVpbnQzMl90W3dpZHRoXSk7Ci0gICAg
R3JhcGhpY3NDb250ZXh0M0QqIGNvbnRleHQgPSBtX2dwdUNhbnZhcy0+Y29udGV4dCgpOworICAg
IFNoYXJlZENvbnRleHQzRCogY29udGV4dCA9IG1fZ3B1Q2FudmFzLT5jb250ZXh0KCk7CisgICAg
bV9ncHVDYW52YXMtPmJpbmRGcmFtZWJ1ZmZlcigpOwogICAgIC8vIEZsaXBzIHRoZSBpbWFnZSB2
ZXJ0aWNhbGx5LgogICAgIGZvciAoaW50IHkgPSAwOyB5IDwgaGVpZ2h0OyArK3kpIHsKICAgICAg
ICAgdWludDMyX3QqIHBpeGVscyA9IGJpdG1hcC5nZXRBZGRyMzIoMCwgeSk7CmRpZmYgLS1naXQg
YS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3NraWEvUGxhdGZvcm1Db250ZXh0U2tpYS5oIGIv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9za2lhL1BsYXRmb3JtQ29udGV4dFNraWEuaAppbmRl
eCA4MmVkYzE2ZDFmY2NmOGFlOWUxOTUxYzkyNTJjY2M5ZTk1NmY0MTAwLi5lY2I0ZDMzMWY2YThk
MWY0OWRhNjNhMWM0NDY1OTZjZjE2ODczODIxIDEwMDY0NAotLS0gYS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL3NraWEvUGxhdGZvcm1Db250ZXh0U2tpYS5oCisrKyBiL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3Mvc2tpYS9QbGF0Zm9ybUNvbnRleHRTa2lhLmgKQEAgLTM1LDcgKzM1LDYgQEAK
ICNpbmNsdWRlICJOb25jb3B5YWJsZS5oIgogCiAjaW5jbHVkZSAiU2tEYXNoUGF0aEVmZmVjdC5o
IgotI2luY2x1ZGUgIlNrRGVxdWUuaCIKICNpbmNsdWRlICJTa0RyYXdMb29wZXIuaCIKICNpbmNs
dWRlICJTa1BhaW50LmgiCiAjaW5jbHVkZSAiU2tQYXRoLmgiCkBAIC00Niw5ICs0NSwxMCBAQAog
bmFtZXNwYWNlIFdlYkNvcmUgewogCiBlbnVtIENvbXBvc2l0ZU9wZXJhdG9yOworY2xhc3MgRHJh
d2luZ0J1ZmZlcjsKIGNsYXNzIEdMRVMyQ2FudmFzOwotY2xhc3MgVGV4dHVyZTsKIGNsYXNzIEdy
YXBoaWNzQ29udGV4dDNEOworY2xhc3MgVGV4dHVyZTsKIAogLy8gVGhpcyBjbGFzcyBob2xkcyB0
aGUgcGxhdGZvcm0tc3BlY2lmaWMgc3RhdGUgZm9yIEdyYXBoaWNzQ29udGV4dC4gV2UgcHV0CiAv
LyBtb3N0IG9mIG91ciBTa2lhIHdyYXBwZXJzIG9uIHRoaXMgY2xhc3MuIEluIHRoZW9yeSwgYSBs
b3Qgb2YgdGhpcyBzdHVmZiBjb3VsZApAQCAtMTgxLDcgKzE4MSw3IEBAIHB1YmxpYzoKICAgICB2
b2lkIGNsZWFySW1hZ2VSZXNhbXBsaW5nSGludCgpOwogICAgIGJvb2wgaGFzSW1hZ2VSZXNhbXBs
aW5nSGludCgpIGNvbnN0OwogICAgIGJvb2wgdXNlR1BVKCkgeyByZXR1cm4gbV91c2VHUFU7IH0K
LSAgICB2b2lkIHNldEdyYXBoaWNzQ29udGV4dDNEKEdyYXBoaWNzQ29udGV4dDNEKiwgY29uc3Qg
SW50U2l6ZSYpOworICAgIHZvaWQgc2V0U2hhcmVkQ29udGV4dDNEKFNoYXJlZENvbnRleHQzRCos
IERyYXdpbmdCdWZmZXIqLCBjb25zdCBJbnRTaXplJik7CiAgICAgR0xFUzJDYW52YXMqIGdwdUNh
bnZhcygpIGNvbnN0IHsgcmV0dXJuIG1fZ3B1Q2FudmFzLmdldCgpOyB9CiAKICAgICAvLyBDYWxs
IHRoZXNlIGJlZm9yZSBtYWtpbmcgYSBjYWxsIHRoYXQgbWFuaXB1bGF0ZXMgdGhlIHVuZGVybHlp
bmcKZGlmZiAtLWdpdCBhL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyQmFja2luZy5jcHAg
Yi9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllckJhY2tpbmcuY3BwCmluZGV4IDBiYTkwN2Jl
OTQwMDExNDRkZjM3YTVhZmRiN2Q1MzlhYTg3NDc5NjMuLjdmMDY0NzkxMDkzNzMwODkwOTYyNWRi
MWZjMjc5N2Y4OTIxOTI3OTAgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxh
eWVyQmFja2luZy5jcHAKKysrIGIvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJCYWNraW5n
LmNwcApAQCAtMjcsOCArMjcsMTEgQEAKIAogI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElO
RykKIAorI2luY2x1ZGUgIlJlbmRlckxheWVyQmFja2luZy5oIgorCiAjaW5jbHVkZSAiQW5pbWF0
aW9uQ29udHJvbGxlci5oIgogI2luY2x1ZGUgIkNhbnZhc1JlbmRlcmluZ0NvbnRleHQuaCIKKyNp
bmNsdWRlICJDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQuaCIKICNpbmNsdWRlICJDU1NQcm9wZXJ0
eU5hbWVzLmgiCiAjaW5jbHVkZSAiQ1NTU3R5bGVTZWxlY3Rvci5oIgogI2luY2x1ZGUgIkZyYW1l
Vmlldy5oIgpAQCAtNTEsOCArNTQsNyBAQAogI2luY2x1ZGUgIlJlbmRlclZpZGVvLmgiCiAjaW5j
bHVkZSAiUmVuZGVyVmlldy5oIgogI2luY2x1ZGUgIlNldHRpbmdzLmgiCi0KLSNpbmNsdWRlICJS
ZW5kZXJMYXllckJhY2tpbmcuaCIKKyNpbmNsdWRlICJXZWJHTFJlbmRlcmluZ0NvbnRleHQuaCIK
IAogdXNpbmcgbmFtZXNwYWNlIHN0ZDsKIApAQCAtMjU3LDEwICsyNTksMTcgQEAgYm9vbCBSZW5k
ZXJMYXllckJhY2tpbmc6OnVwZGF0ZUdyYXBoaWNzTGF5ZXJDb25maWd1cmF0aW9uKCkKICNpZiBF
TkFCTEUoM0RfQ0FOVkFTKSB8fCBFTkFCTEUoQUNDRUxFUkFURURfMkRfQ0FOVkFTKQogICAgIGVs
c2UgaWYgKGlzQWNjZWxlcmF0ZWRDYW52YXMocmVuZGVyZXIoKSkpIHsKICAgICAgICAgSFRNTENh
bnZhc0VsZW1lbnQqIGNhbnZhcyA9IHN0YXRpY19jYXN0PEhUTUxDYW52YXNFbGVtZW50Kj4ocmVu
ZGVyZXIoKS0+bm9kZSgpKTsKLSAgICAgICAgaWYgKENhbnZhc1JlbmRlcmluZ0NvbnRleHQqIGNv
bnRleHQgPSBjYW52YXMtPnJlbmRlcmluZ0NvbnRleHQoKSkKLSAgICAgICAgICAgIGlmIChjb250
ZXh0LT5ncmFwaGljc0NvbnRleHQzRCgpKQotICAgICAgICAgICAgICAgIGlmIChQbGF0Zm9ybUxh
eWVyKiBwbCA9IGNvbnRleHQtPmdyYXBoaWNzQ29udGV4dDNEKCktPnBsYXRmb3JtTGF5ZXIoKSkK
LSAgICAgICAgICAgICAgICAgICAgbV9ncmFwaGljc0xheWVyLT5zZXRDb250ZW50c1RvQ2FudmFz
KHBsKTsKKyAgICAgICAgaWYgKENhbnZhc1JlbmRlcmluZ0NvbnRleHQqIGNvbnRleHQgPSBjYW52
YXMtPnJlbmRlcmluZ0NvbnRleHQoKSkgeworI2lmIEVOQUJMRShBQ0NFTEVSQVRFRF8yRF9DQU5W
QVMpCisgICAgICAgICAgICBpZiAoY29udGV4dC0+aXMyZCgpKQorICAgICAgICAgICAgICAgIG1f
Z3JhcGhpY3NMYXllci0+c2V0Q29udGVudHNUb0NhbnZhczJEKHN0YXRpY19jYXN0PENhbnZhc1Jl
bmRlcmluZ0NvbnRleHQyRCo+KGNvbnRleHQpLT5kcmF3aW5nQnVmZmVyKCkpOworI2VuZGlmCisj
aWYgRU5BQkxFKDNEX0NBTlZBUykKKyAgICAgICAgICAgIGlmIChjb250ZXh0LT5pczNkKCkpCisg
ICAgICAgICAgICAgICAgbV9ncmFwaGljc0xheWVyLT5zZXRDb250ZW50c1RvV2ViR0woc3RhdGlj
X2Nhc3Q8V2ViR0xSZW5kZXJpbmdDb250ZXh0Kj4oY29udGV4dCktPmdyYXBoaWNzQ29udGV4dDNE
KCktPnBsYXRmb3JtTGF5ZXIoKSk7CisjZW5kaWYKKyAgICAgICAgfQorICAgICAgICBsYXllckNv
bmZpZ0NoYW5nZWQgPSB0cnVlOwogICAgIH0KICNlbmRpZgogCmRpZmYgLS1naXQgYS9XZWJLaXQv
Y2hyb21pdW0vQ2hhbmdlTG9nIGIvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZwppbmRleCAwMWEy
YmJmN2I1YTgwODg3YTg4ZmU5MWNiOTI4OGQyMmM4ZTU3ODQxLi45M2U4ZGExOTJmMGEyZDNhYWI3
OGY4YjVmODEyMGIyYWE3ODY0MmFmIDEwMDY0NAotLS0gYS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdl
TG9nCisrKyBiL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwyNCBAQAorMjAx
MC0wOS0wMSAgSmFtZXMgUm9iaW5zb24gIDxqYW1lc3JAY2hyb21pdW0ub3JnPgorCisgICAgICAg
IFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIE11bHRpcGxlIGFjY2VsZXJh
dGVkIDJEIGNhbnZhc2VzIHNob3VsZCBiZSBhYmxlIHRvIHVzZSB0aGUgc2FtZSBHcmFwaGljc0Nv
bnRleHQzRAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
NDQ5MjYKKworICAgICAgICBBZGRzIGEgU2hhcmVkQ29udGV4dDNEIHRvIFdlYlZpZXdJbXBsLiBU
aGUgU2hhcmVkQ29udGV4dDNEIGhhcyB0byBsaXZlIG9uIFdlYlZpZXdJbXBsIHRvIGJlCisgICAg
ICAgIHRpZWQgdG8gdGhlIGxpZmV0aW1lIG9mIHRoZSBjb21wb3NpdG9yIGNvbnRleHQuCisKKyAg
ICAgICAgKiBzcmMvQ2hyb21lQ2xpZW50SW1wbC5jcHA6CisgICAgICAgIChXZWJLaXQ6OkNocm9t
ZUNsaWVudEltcGw6OmdldFNoYXJlZENvbnRleHQzRCk6CisgICAgICAgICogc3JjL0Nocm9tZUNs
aWVudEltcGwuaDoKKyAgICAgICAgKiBzcmMvR3JhcGhpY3NDb250ZXh0M0QuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0RJbnRlcm5hbDo6aW5pdGlhbGl6ZSk6CisgICAg
ICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzREludGVybmFsOjpwbGF0Zm9ybUxheWVyKToK
KyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpwbGF0Zm9ybUxheWVyKToKKyAg
ICAgICAgKiBzcmMvV2ViVmlld0ltcGwuY3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJWaWV3SW1w
bDo6Z2V0U2hhcmVkQ29udGV4dDNEKToKKyAgICAgICAgKiBzcmMvV2ViVmlld0ltcGwuaDoKKwog
MjAxMC0wOC0zMCAgS2ludWtvIFlhc3VkYSAgPGtpbnVrb0BjaHJvbWl1bS5vc3JjPgogCiAgICAg
ICAgIFJldmlld2VkIGJ5IERhcmluIEZpc2hlci4KZGlmZiAtLWdpdCBhL1dlYktpdC9jaHJvbWl1
bS9zcmMvQ2hyb21lQ2xpZW50SW1wbC5jcHAgYi9XZWJLaXQvY2hyb21pdW0vc3JjL0Nocm9tZUNs
aWVudEltcGwuY3BwCmluZGV4IGU2ZjE0MDA3MTgwZDhkM2JmNjEyOGIxMzBkYzI4YWJhYWVjMWY5
MGEuLjAyYWFmZjQ4ZGI4NTQxMjg5Yzk3NjhiY2I3OTZjNDI2YWM3Y2E0ZmMgMTAwNjQ0Ci0tLSBh
L1dlYktpdC9jaHJvbWl1bS9zcmMvQ2hyb21lQ2xpZW50SW1wbC5jcHAKKysrIGIvV2ViS2l0L2No
cm9taXVtL3NyYy9DaHJvbWVDbGllbnRJbXBsLmNwcApAQCAtNTksNiArNTksNyBAQAogI2luY2x1
ZGUgIlNlYXJjaFBvcHVwTWVudUNocm9taXVtLmgiCiAjaW5jbHVkZSAiU2NyaXB0Q29udHJvbGxl
ci5oIgogI2luY2x1ZGUgIlNlY3VyaXR5T3JpZ2luLmgiCisjaW5jbHVkZSAiU2hhcmVkQ29udGV4
dDNELmgiCiAjaW5jbHVkZSAiV2ViR2VvbG9jYXRpb25TZXJ2aWNlLmgiCiAjaWYgVVNFKFY4KQog
I2luY2x1ZGUgIlY4UHJveHkuaCIKQEAgLTc1MSw2ICs3NTIsMTEgQEAgdm9pZCBDaHJvbWVDbGll
bnRJbXBsOjpzY2hlZHVsZUNvbXBvc2l0aW5nTGF5ZXJTeW5jKCkKIH0KICNlbmRpZgogCitXZWJD
b3JlOjpTaGFyZWRDb250ZXh0M0QqIENocm9tZUNsaWVudEltcGw6OmdldFNoYXJlZENvbnRleHQz
RCgpCit7CisgICAgcmV0dXJuIG1fd2ViVmlldy0+Z2V0U2hhcmVkQ29udGV4dDNEKCk7Cit9CisK
IGJvb2wgQ2hyb21lQ2xpZW50SW1wbDo6c3VwcG9ydHNGdWxsc2NyZWVuRm9yTm9kZShjb25zdCBX
ZWJDb3JlOjpOb2RlKiBub2RlKQogewogICAgIGlmIChtX3dlYlZpZXctPmNsaWVudCgpICYmIG5v
ZGUtPmhhc1RhZ05hbWUoV2ViQ29yZTo6SFRNTE5hbWVzOjp2aWRlb1RhZykpCmRpZmYgLS1naXQg
YS9XZWJLaXQvY2hyb21pdW0vc3JjL0Nocm9tZUNsaWVudEltcGwuaCBiL1dlYktpdC9jaHJvbWl1
bS9zcmMvQ2hyb21lQ2xpZW50SW1wbC5oCmluZGV4IGJmZjlmOTA0N2ZhN2M3ZjNhYmQ3MDRkOTQ3
ODVkOWMxZmFjZjc3NDAuLjZjYjZmODNkZWRjOTdmM2ZkYzgyZTc5ZDQzZDEzOTQxODQ4Y2FkNzEg
MTAwNjQ0Ci0tLSBhL1dlYktpdC9jaHJvbWl1bS9zcmMvQ2hyb21lQ2xpZW50SW1wbC5oCisrKyBi
L1dlYktpdC9jaHJvbWl1bS9zcmMvQ2hyb21lQ2xpZW50SW1wbC5oCkBAIC0xNTIsNiArMTUyLDgg
QEAgcHVibGljOgogICAgIHZpcnR1YWwgdm9pZCBzY2hlZHVsZUNvbXBvc2l0aW5nTGF5ZXJTeW5j
KCk7CiAjZW5kaWYKIAorICAgIHZpcnR1YWwgV2ViQ29yZTo6U2hhcmVkQ29udGV4dDNEKiBnZXRT
aGFyZWRDb250ZXh0M0QoKTsKKwogICAgIHZpcnR1YWwgYm9vbCBzdXBwb3J0c0Z1bGxzY3JlZW5G
b3JOb2RlKGNvbnN0IFdlYkNvcmU6Ok5vZGUqKTsKICAgICB2aXJ0dWFsIHZvaWQgZW50ZXJGdWxs
c2NyZWVuRm9yTm9kZShXZWJDb3JlOjpOb2RlKik7CiAgICAgdmlydHVhbCB2b2lkIGV4aXRGdWxs
c2NyZWVuRm9yTm9kZShXZWJDb3JlOjpOb2RlKik7CmRpZmYgLS1naXQgYS9XZWJLaXQvY2hyb21p
dW0vc3JjL0dyYXBoaWNzQ29udGV4dDNELmNwcCBiL1dlYktpdC9jaHJvbWl1bS9zcmMvR3JhcGhp
Y3NDb250ZXh0M0QuY3BwCmluZGV4IDZiYzVmZmU0MzFlODRlNGU3YmUyMGU5NDA0MTRlZGVhZjgz
M2E5YzcuLjZhOWIzZTRkZTc0ZDIzMmMzMTk4MTEwOGQwYTU3YmIzNzY3YmZmMDggMTAwNjQ0Ci0t
LSBhL1dlYktpdC9jaHJvbWl1bS9zcmMvR3JhcGhpY3NDb250ZXh0M0QuY3BwCisrKyBiL1dlYktp
dC9jaHJvbWl1bS9zcmMvR3JhcGhpY3NDb250ZXh0M0QuY3BwCkBAIC0zNSw3ICszNSw3IEBACiAj
aW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0M0QuaCIKIAogI2luY2x1ZGUgIkNhY2hlZEltYWdlLmgi
Ci0jaW5jbHVkZSAiQ2FudmFzTGF5ZXJDaHJvbWl1bS5oIgorI2luY2x1ZGUgIldlYkdMTGF5ZXJD
aHJvbWl1bS5oIgogI2luY2x1ZGUgIkNhbnZhc1JlbmRlcmluZ0NvbnRleHQuaCIKICNpbmNsdWRl
ICJDaHJvbWUuaCIKICNpbmNsdWRlICJDaHJvbWVDbGllbnRJbXBsLmgiCkBAIC0xMDMsNyArMTAz
LDcgQEAgcHVibGljOgogICAgIHZvaWQgcHJlcGFyZVRleHR1cmUoKTsKIAogI2lmIFVTRShBQ0NF
TEVSQVRFRF9DT01QT1NJVElORykKLSAgICBDYW52YXNMYXllckNocm9taXVtKiBwbGF0Zm9ybUxh
eWVyKCkgY29uc3Q7CisgICAgV2ViR0xMYXllckNocm9taXVtKiBwbGF0Zm9ybUxheWVyKCkgY29u
c3Q7CiAjZW5kaWYKICAgICBib29sIGlzR0xFUzJDb21wbGlhbnQoKSBjb25zdDsKICAgICBib29s
IGlzR0xFUzJOUE9UU3RyaWN0KCkgY29uc3Q7CkBAIC0yOTgsNyArMjk4LDcgQEAgcHJpdmF0ZToK
ICAgICBPd25QdHI8V2ViS2l0OjpXZWJHcmFwaGljc0NvbnRleHQzRD4gbV9pbXBsOwogICAgIFdl
YktpdDo6V2ViVmlld0ltcGwqIG1fd2ViVmlld0ltcGw7CiAjaWYgVVNFKEFDQ0VMRVJBVEVEX0NP
TVBPU0lUSU5HKQotICAgIFJlZlB0cjxDYW52YXNMYXllckNocm9taXVtPiBtX2NvbXBvc2l0aW5n
TGF5ZXI7CisgICAgUmVmUHRyPFdlYkdMTGF5ZXJDaHJvbWl1bT4gbV9jb21wb3NpdGluZ0xheWVy
OwogI2VuZGlmCiAjaWYgUExBVEZPUk0oU0tJQSkKICAgICAvLyBJZiB0aGUgd2lkdGggYW5kIGhl
aWdodCBvZiB0aGUgQ2FudmFzJ3MgYmFja2luZyBzdG9yZSBkb24ndApAQCAtMzYwLDcgKzM2MCw3
IEBAIGJvb2wgR3JhcGhpY3NDb250ZXh0M0RJbnRlcm5hbDo6aW5pdGlhbGl6ZShHcmFwaGljc0Nv
bnRleHQzRDo6QXR0cmlidXRlcyBhdHRycywKICAgICBtX2ltcGwuc2V0KHdlYkNvbnRleHQpOwog
CiAjaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQotICAgIG1fY29tcG9zaXRpbmdMYXll
ciA9IENhbnZhc0xheWVyQ2hyb21pdW06OmNyZWF0ZSgwKTsKKyAgICBtX2NvbXBvc2l0aW5nTGF5
ZXIgPSBXZWJHTExheWVyQ2hyb21pdW06OmNyZWF0ZSgwKTsKICNlbmRpZgogICAgIHJldHVybiB0
cnVlOwogfQpAQCAtMzgxLDcgKzM4MSw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0M0RJbnRlcm5h
bDo6cHJlcGFyZVRleHR1cmUoKQogfQogCiAjaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5H
KQotQ2FudmFzTGF5ZXJDaHJvbWl1bSogR3JhcGhpY3NDb250ZXh0M0RJbnRlcm5hbDo6cGxhdGZv
cm1MYXllcigpIGNvbnN0CitXZWJHTExheWVyQ2hyb21pdW0qIEdyYXBoaWNzQ29udGV4dDNESW50
ZXJuYWw6OnBsYXRmb3JtTGF5ZXIoKSBjb25zdAogewogICAgIHJldHVybiBtX2NvbXBvc2l0aW5n
TGF5ZXIuZ2V0KCk7CiB9CkBAIC0xMDM5LDcgKzEwMzksNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4
dDNEOjpwcmVwYXJlVGV4dHVyZSgpCiAjaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQog
UGxhdGZvcm1MYXllciogR3JhcGhpY3NDb250ZXh0M0Q6OnBsYXRmb3JtTGF5ZXIoKSBjb25zdAog
ewotICAgIENhbnZhc0xheWVyQ2hyb21pdW0qIGNhbnZhc0xheWVyID0gbV9pbnRlcm5hbC0+cGxh
dGZvcm1MYXllcigpOworICAgIFdlYkdMTGF5ZXJDaHJvbWl1bSogY2FudmFzTGF5ZXIgPSBtX2lu
dGVybmFsLT5wbGF0Zm9ybUxheWVyKCk7CiAgICAgY2FudmFzTGF5ZXItPnNldENvbnRleHQodGhp
cyk7CiAgICAgcmV0dXJuIGNhbnZhc0xheWVyOwogfQpkaWZmIC0tZ2l0IGEvV2ViS2l0L2Nocm9t
aXVtL3NyYy9XZWJWaWV3SW1wbC5jcHAgYi9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYlZpZXdJbXBs
LmNwcAppbmRleCA1MDY1ZjVlYjliNjQwODNmYzNiMWUxNzRmNDI4MTVjNTczN2I0ODM5Li43MWQ4
NDkzMWYyMzZkY2ZjNzEwZGE4ZDEzOTVlYzA0MDI3NjY1ZTU2IDEwMDY0NAotLS0gYS9XZWJLaXQv
Y2hyb21pdW0vc3JjL1dlYlZpZXdJbXBsLmNwcAorKysgYi9XZWJLaXQvY2hyb21pdW0vc3JjL1dl
YlZpZXdJbXBsLmNwcApAQCAtNTgsNiArNTgsNyBAQAogI2luY2x1ZGUgIkdMRVMyQ29udGV4dC5o
IgogI2luY2x1ZGUgIkdMRVMyQ29udGV4dEludGVybmFsLmgiCiAjaW5jbHVkZSAiR3JhcGhpY3ND
b250ZXh0LmgiCisjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0M0QuaCIKICNpbmNsdWRlICJIVE1M
SW5wdXRFbGVtZW50LmgiCiAjaW5jbHVkZSAiSFRNTE1lZGlhRWxlbWVudC5oIgogI2luY2x1ZGUg
IkhpdFRlc3RSZXN1bHQuaCIKQEAgLTg2LDYgKzg3LDcgQEAKICNpbmNsdWRlICJTZWN1cml0eU9y
aWdpbi5oIgogI2luY2x1ZGUgIlNlbGVjdGlvbkNvbnRyb2xsZXIuaCIKICNpbmNsdWRlICJTZXR0
aW5ncy5oIgorI2luY2x1ZGUgIlNoYXJlZENvbnRleHQzRC5oIgogI2luY2x1ZGUgIlRpbWVyLmgi
CiAjaW5jbHVkZSAiVHlwaW5nQ29tbWFuZC5oIgogI2luY2x1ZGUgIlVzZXJHZXN0dXJlSW5kaWNh
dG9yLmgiCkBAIC0yMjExLDE0ICsyMjEzLDE1IEBAIFBhc3NPd25QdHI8R0xFUzJDb250ZXh0PiBX
ZWJWaWV3SW1wbDo6Z2V0T25zY3JlZW5HTEVTMkNvbnRleHQoKQogICAgIHJldHVybiBHTEVTMkNv
bnRleHQ6OmNyZWF0ZShHTEVTMkNvbnRleHRJbnRlcm5hbDo6Y3JlYXRlKGdsZXMyQ29udGV4dCgp
LCBmYWxzZSkpOwogfQogCi1QYXNzT3duUHRyPEdMRVMyQ29udGV4dD4gV2ViVmlld0ltcGw6Omdl
dE9mZnNjcmVlbkdMRVMyQ29udGV4dCgpCitTaGFyZWRDb250ZXh0M0QqIFdlYlZpZXdJbXBsOjpn
ZXRTaGFyZWRDb250ZXh0M0QoKQogewotICAgIFdlYkdMRVMyQ29udGV4dCogY29udGV4dCA9IHdl
YktpdENsaWVudCgpLT5jcmVhdGVHTEVTMkNvbnRleHQoKTsKLSAgICBpZiAoIWNvbnRleHQpCi0g
ICAgICAgIHJldHVybiAwOwotICAgIGlmICghY29udGV4dC0+aW5pdGlhbGl6ZSgwLCBnbGVzMkNv
bnRleHQoKSkpCi0gICAgICAgIHJldHVybiAwOwotICAgIHJldHVybiBHTEVTMkNvbnRleHQ6OmNy
ZWF0ZShHTEVTMkNvbnRleHRJbnRlcm5hbDo6Y3JlYXRlKGNvbnRleHQsIHRydWUpKTsKKyAgICBp
ZiAoIW1fc2hhcmVkQ29udGV4dDNEKSB7CisgICAgICAgIEdyYXBoaWNzQ29udGV4dDNEOjpBdHRy
aWJ1dGVzIGF0dHI7CisgICAgICAgIE93blB0cjxHcmFwaGljc0NvbnRleHQzRD4gY29udGV4dCA9
IEdyYXBoaWNzQ29udGV4dDNEOjpjcmVhdGUoYXR0ciwgbV9wYWdlLT5jaHJvbWUoKSk7CisgICAg
ICAgIG1fc2hhcmVkQ29udGV4dDNEID0gU2hhcmVkQ29udGV4dDNEOjpjcmVhdGUoY29udGV4dC5y
ZWxlYXNlKCkpOworICAgIH0KKworICAgIHJldHVybiBtX3NoYXJlZENvbnRleHQzRC5nZXQoKTsK
IH0KIAogLy8gUmV0dXJucyB0aGUgR0xFUzIgY29udGV4dCBhc3NvY2lhdGVkIHdpdGggdGhpcyBW
aWV3LiBJZiBvbmUgZG9lc24ndCBleGlzdApkaWZmIC0tZ2l0IGEvV2ViS2l0L2Nocm9taXVtL3Ny
Yy9XZWJWaWV3SW1wbC5oIGIvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJWaWV3SW1wbC5oCmluZGV4
IGMyOTYxMjEyM2Y0NTE0Yzk0ZGQ3ZDk3MGM3MzExNGE0YmVlZWMzNTUuLjE2MTVkYTJiMjJjMWU4
MDIyZGE1N2YwMjlmYTM0YzYzMWUyN2U3OGMgMTAwNjQ0Ci0tLSBhL1dlYktpdC9jaHJvbWl1bS9z
cmMvV2ViVmlld0ltcGwuaAorKysgYi9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYlZpZXdJbXBsLmgK
QEAgLTMyOSwxMCArMzI5LDEwIEBAIHB1YmxpYzoKICAgICAvLyBPZmZzY3JlZW4gY29udGV4dHMg
cmVuZGVyIG9mZnNjcmVlbiBidXQgY2FuIHNoYXJlIHJlc291cmNlcyB3aXRoIHRoZQogICAgIC8v
IG9uc2NyZWVuIGNvbnRleHQgYW5kIHRodXMgY2FuIGJlIGNvbXBvc2l0ZWQuCiAgICAgUGFzc093
blB0cjxXZWJDb3JlOjpHTEVTMkNvbnRleHQ+IGdldE9uc2NyZWVuR0xFUzJDb250ZXh0KCk7Ci0g
ICAgUGFzc093blB0cjxXZWJDb3JlOjpHTEVTMkNvbnRleHQ+IGdldE9mZnNjcmVlbkdMRVMyQ29u
dGV4dCgpOwogCiAgICAgLy8gUmV0dXJucyBhbiBvbnNjcmVlbiBjb250ZXh0CiAgICAgdmlydHVh
bCBXZWJHTEVTMkNvbnRleHQqIGdsZXMyQ29udGV4dCgpOworICAgIHZpcnR1YWwgV2ViQ29yZTo6
U2hhcmVkQ29udGV4dDNEKiBnZXRTaGFyZWRDb250ZXh0M0QoKTsKIAogICAgIFdlYkNvcmU6OlBv
cHVwQ29udGFpbmVyKiBzZWxlY3RQb3B1cCgpIGNvbnN0IHsgcmV0dXJuIG1fc2VsZWN0UG9wdXAu
Z2V0KCk7IH0KIApAQCAtNTIxLDYgKzUyMSw4IEBAIHByaXZhdGU6CiAKICAgICBPd25QdHI8V2Vi
R0xFUzJDb250ZXh0PiBtX2dsZXMyQ29udGV4dDsKIAorICAgIFJlZlB0cjxXZWJDb3JlOjpTaGFy
ZWRDb250ZXh0M0Q+IG1fc2hhcmVkQ29udGV4dDNEOworCiAgICAgT3duUHRyPERldmljZU9yaWVu
dGF0aW9uQ2xpZW50UHJveHk+IG1fZGV2aWNlT3JpZW50YXRpb25DbGllbnRQcm94eTsKIH07CiAK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>66404</attachid>
            <date>2010-09-02 13:32:06 -0700</date>
            <delta_ts>2010-09-02 17:17:10 -0700</delta_ts>
            <desc>add GraphicsContext stubs instead of #if PLATFORM()ing the function declarations</desc>
            <filename>bug-44926-20100902133205.patch</filename>
            <type>text/plain</type>
            <size>105835</size>
            <attacher name="James Robinson">jamesr</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ2hhbmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXgg
ZGRjZDUyZTk2NzZiYTY2YmIwM2M0MTBhZmZmNTllMjI2MWY3ZDgzMC4uNzNhMmM2MDMxYWJiZTJi
MzM4MzExNDJkNTVlZTk0MGQwMDc4ZGI4MiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9DaGFuZ2VMb2cK
KysrIGIvV2ViQ29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxNjQgQEAKKzIwMTAtMDktMDEgIEph
bWVzIFJvYmluc29uICA8amFtZXNyQGNocm9taXVtLm9yZz4KKworICAgICAgICBSZXZpZXdlZCBi
eSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBNdWx0aXBsZSBhY2NlbGVyYXRlZCAyRCBjYW52
YXNlcyBzaG91bGQgYmUgYWJsZSB0byB1c2UgdGhlIHNhbWUgR3JhcGhpY3NDb250ZXh0M0QKKyAg
ICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTQ0OTI2CisKKyAg
ICAgICAgVGhpcyBhbGxvd3MgbWFueSBhY2NlbGVyYXRlZCAyZCBjYW52YXNlcyB0byByZW5kZXIg
dXNpbmcgYSBzaW5nbGUgdW5kZXJseWluZyBHcmFwaGljc0NvbnRleHQzRC4KKyAgICAgICAgSXQg
aW50cm9kdWNlcyBhIG5ldyBjbGFzcyBTaGFyZWRDb250ZXh0M0QgdGhhdCBtYW5hZ2VzIHNldmVy
YWwgY2FsbGVycy4gIFRoaXMgY2xhc3MgY291bGQKKyAgICAgICAgYWxzbyBjYWNoZSB0aGUgY3Vy
cmVudCBzdGF0ZSB0byBhdm9pZCBpc3N1aW5nIHJlZHVuZGFudCBjYWxscywgYWx0aG91Z2ggaW4g
dGhpcyBmaXJzdCBjdXQgaXQgZG9lc24ndC4KKyAgICAgICAgVGhlIFNoYXJlZENvbnRleHQzRCBp
cyBwcm92aWRlZCB0aHJvdWdoIHRoZSBDaHJvbWVDbGllbnQgc28gdGhhdCBpdHMgbGlmZXRpbWUg
Y2FuIGJlIHRpZWQgdG8gdGhhdAorICAgICAgICBvZiB0aGUgcGxhdGZvcm0tc3BlY2lmaWMgY29t
cG9zaXRvciBpbmZyYXN0cnVjdHVyZS4KKworICAgICAgICBBY2NlbGVyYXRlZCAyZCBjYW52YXNl
cyBtYWludGFpbiBhIHJlZmVyZW5jZSB0byBhIFNoYXJlZENvbnRleHQzRCBhbmQgaGF2ZSBvd25l
cnNoaXAgb2YgYSBDYW52YXNGcmFtZWJ1ZmZlciwKKyAgICAgICAgd2hpY2ggcmVwcmVzZW50cyB0
aGUgY2FudmFzJ3MgcmVuZGVyaW5nIHRhcmdldC4gIFRoZSBjb21wb3NpdGluZyBsYXllciBmb3Ig
YW4gYWNjZWxlcmF0ZWQgMmQgY2FudmFzIGlzCisgICAgICAgIGF3YXJlIG9ubHkgb2YgdGhlIGNh
bnZhcydzIENhbnZhc0ZyYW1lYnVmZmVyLiAgVGhpcyBtZWFucyB0aGF0IFdlYkdMIGFuZCAyZCBj
YW52YXNlcyBhcmUgbm8gbG9uZ2VyIHRyZWF0ZWQKKyAgICAgICAgYXMgdGhlIHNhbWUgdGltZSBv
ZiBsYXllciBieSB0aGUgY29tcG9zaXRvci4KKworICAgICAgICBDb3ZlcmVkIGJ5IGV4aXN0aW5n
IGNhbnZhcyB0ZXN0cy4KKworICAgICAgICBJJ3ZlIGRpdmlkZWQgdGhlIHBlciBmaWxlL2Z1bmN0
aW9uIGNoYW5nZXMgaW50byB0aHJlZSBzZWN0aW9uczoKKyAgICAgICAgLSBQbGF0Zm9ybS1pbmRl
cGVuZGVudCBhcHBsaWNhdGlvbiBsb2dpYyBvdXRzaWRlIFdlYkNvcmUvcGxhdGZvcm0KKyAgICAg
ICAgLSBQbGF0Zm9ybS1pbmRlcGVuZGVudCBpbmZyYXN0cnVjdHVyZSBpbiBXZWJDb3JlL3BsYXRm
b3JtCisgICAgICAgIC0gUGxhdGZvcm0tc3BlY2lmaWMgY2hhbmdlcworCisgICAgICAgIC0gUGxh
dGZvcm0taW5kZXBlbmRlbnQgbG9naWMgY2hhbmdlcyBvdXRzaWRlIFdlYkNvcmUvcGxhdGZvcm06
CisgICAgICAgICogV2ViQ29yZS5neXBpOgorICAgICAgICAqIGh0bWwvY2FudmFzL0NhbnZhc1Jl
bmRlcmluZ0NvbnRleHQuY3BwOgorICAgICAgICAqIGh0bWwvY2FudmFzL0NhbnZhc1JlbmRlcmlu
Z0NvbnRleHQuaDoKKyAgICAgICAgKFdlYkNvcmU6OkNhbnZhc1JlbmRlcmluZ0NvbnRleHQ6OnBh
aW50c0ludG9DYW52YXNCdWZmZXIpOgorICAgICAgICAqIGh0bWwvY2FudmFzL0NhbnZhc1JlbmRl
cmluZ0NvbnRleHQyRC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDYW52YXNSZW5kZXJpbmdDb250
ZXh0MkQ6OkNhbnZhc1JlbmRlcmluZ0NvbnRleHQyRCk6CisgICAgICAgIChXZWJDb3JlOjpDYW52
YXNSZW5kZXJpbmdDb250ZXh0MkQ6OnBhaW50c0ludG9DYW52YXNCdWZmZXIpOgorICAgICAgICAo
V2ViQ29yZTo6Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJEOjpyZXNldCk6CisgICAgICAgIChXZWJD
b3JlOjpDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ6OmRpZERyYXcpOgorICAgICAgICAqIGh0bWwv
Y2FudmFzL0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRC5oOgorICAgICAgICAoV2ViQ29yZTo6Q2Fu
dmFzUmVuZGVyaW5nQ29udGV4dDJEOjpkcmF3aW5nQnVmZmVyKToKKyAgICAgICAgKiBodG1sL2Nh
bnZhcy9XZWJHTFJlbmRlcmluZ0NvbnRleHQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xS
ZW5kZXJpbmdDb250ZXh0OjpwYWludHNJbnRvQ2FudmFzQnVmZmVyKToKKyAgICAgICAgKiBodG1s
L2NhbnZhcy9XZWJHTFJlbmRlcmluZ0NvbnRleHQuaDoKKyAgICAgICAgKFdlYkNvcmU6OldlYkdM
UmVuZGVyaW5nQ29udGV4dDo6Z3JhcGhpY3NDb250ZXh0M0QpOgorICAgICAgICAqIGxvYWRlci9F
bXB0eUNsaWVudHMuaDoKKyAgICAgICAgKFdlYkNvcmU6OkVtcHR5Q2hyb21lQ2xpZW50OjphdHRh
Y2hSb290R3JhcGhpY3NMYXllcik6CisgICAgICAgIChXZWJDb3JlOjpFbXB0eUNocm9tZUNsaWVu
dDo6c2V0TmVlZHNPbmVTaG90RHJhd2luZ1N5bmNocm9uaXphdGlvbik6CisgICAgICAgIChXZWJD
b3JlOjpFbXB0eUNocm9tZUNsaWVudDo6c2NoZWR1bGVDb21wb3NpdGluZ0xheWVyU3luYyk6Cisg
ICAgICAgICogcGFnZS9DaHJvbWVDbGllbnQuaDoKKyAgICAgICAgKFdlYkNvcmU6OkNocm9tZUNs
aWVudDo6Z2V0U2hhcmVkQ29udGV4dDNEKToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyTGF5
ZXJCYWNraW5nLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyQmFja2luZzo6dXBk
YXRlR3JhcGhpY3NMYXllckNvbmZpZ3VyYXRpb24pOgorICAgICAgICAtIFBsYXRmb3JtLWluZGVw
ZW5kZW50IGluZnJhc3RydWN0dXJlIGNoYW5nZXMgaW4gV2ViQ29yZS9wbGF0Zm9ybToKKyAgICAg
ICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQuY3BwOgorICAgICAgICAqIHBs
YXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dC5oOgorICAgICAgICAqIHBsYXRmb3JtL2dy
YXBoaWNzL0dyYXBoaWNzTGF5ZXIuaDoKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXI6
OnNldENvbnRlbnRzVG9XZWJHTCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0xheWVyOjpz
ZXRDb250ZW50c1RvQ2FudmFzMkQpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2dwdS9E
cmF3aW5nQnVmZmVyLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpEcmF3aW5nQnVmZmVy
OjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6RHJhd2luZ0J1ZmZlcjo6YmluZCk6CisgICAg
ICAgIChXZWJDb3JlOjpEcmF3aW5nQnVmZmVyOjpzZXRXaWxsUHVibGlzaENhbGxiYWNrKToKKyAg
ICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9ncHUvRHJhd2luZ0J1ZmZlci5oOiBBZGRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OkRyYXdpbmdCdWZmZXI6OnNpemUpOgorICAgICAgICAqIHBsYXRmb3Jt
L2dyYXBoaWNzL2dwdS9TaGFyZWRDb250ZXh0M0QuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNv
cmU6OlNoYXJlZENvbnRleHQzRDo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OlNoYXJlZENv
bnRleHQzRDo6U2hhcmVkQ29udGV4dDNEKToKKyAgICAgICAgKFdlYkNvcmU6OlNoYXJlZENvbnRl
eHQzRDo6flNoYXJlZENvbnRleHQzRCk6CisgICAgICAgIChXZWJDb3JlOjpTaGFyZWRDb250ZXh0
M0Q6Om1ha2VDb250ZXh0Q3VycmVudCk6CisgICAgICAgIChXZWJDb3JlOjpTaGFyZWRDb250ZXh0
M0Q6OnNjaXNzb3IpOgorICAgICAgICAoV2ViQ29yZTo6U2hhcmVkQ29udGV4dDNEOjplbmFibGUp
OgorICAgICAgICAoV2ViQ29yZTo6U2hhcmVkQ29udGV4dDNEOjpkaXNhYmxlKToKKyAgICAgICAg
KFdlYkNvcmU6OlNoYXJlZENvbnRleHQzRDo6Y2xlYXJDb2xvcik6CisgICAgICAgIChXZWJDb3Jl
OjpTaGFyZWRDb250ZXh0M0Q6OmNsZWFyKToKKyAgICAgICAgKFdlYkNvcmU6OlNoYXJlZENvbnRl
eHQzRDo6ZHJhd0FycmF5cyk6CisgICAgICAgIChXZWJDb3JlOjpTaGFyZWRDb250ZXh0M0Q6Omdl
dEVycm9yKToKKyAgICAgICAgKFdlYkNvcmU6OlNoYXJlZENvbnRleHQzRDo6Z2V0SW50ZWdlcnYp
OgorICAgICAgICAoV2ViQ29yZTo6U2hhcmVkQ29udGV4dDNEOjpjcmVhdGVGcmFtZWJ1ZmZlcik6
CisgICAgICAgIChXZWJDb3JlOjpTaGFyZWRDb250ZXh0M0Q6OmNyZWF0ZVRleHR1cmUpOgorICAg
ICAgICAoV2ViQ29yZTo6U2hhcmVkQ29udGV4dDNEOjpkZWxldGVGcmFtZWJ1ZmZlcik6CisgICAg
ICAgIChXZWJDb3JlOjpTaGFyZWRDb250ZXh0M0Q6OmRlbGV0ZVRleHR1cmUpOgorICAgICAgICAo
V2ViQ29yZTo6U2hhcmVkQ29udGV4dDNEOjpmcmFtZWJ1ZmZlclRleHR1cmUyRCk6CisgICAgICAg
IChXZWJDb3JlOjpTaGFyZWRDb250ZXh0M0Q6OnRleFBhcmFtZXRlcmkpOgorICAgICAgICAoV2Vi
Q29yZTo6U2hhcmVkQ29udGV4dDNEOjp0ZXhJbWFnZTJEKToKKyAgICAgICAgKFdlYkNvcmU6OlNo
YXJlZENvbnRleHQzRDo6dGV4U3ViSW1hZ2UyRCk6CisgICAgICAgIChXZWJDb3JlOjpTaGFyZWRD
b250ZXh0M0Q6OnJlYWRQaXhlbHMpOgorICAgICAgICAoV2ViQ29yZTo6U2hhcmVkQ29udGV4dDNE
OjpzdXBwb3J0c0JHUkEpOgorICAgICAgICAoV2ViQ29yZTo6U2hhcmVkQ29udGV4dDNEOjpnZXRU
ZXh0dXJlKToKKyAgICAgICAgKFdlYkNvcmU6OlNoYXJlZENvbnRleHQzRDo6YXBwbHlDb21wb3Np
dGVPcGVyYXRvcik6CisgICAgICAgIChXZWJDb3JlOjpTaGFyZWRDb250ZXh0M0Q6OnVzZVF1YWRW
ZXJ0aWNlcyk6CisgICAgICAgIChXZWJDb3JlOjpTaGFyZWRDb250ZXh0M0Q6OnNldEFjdGl2ZVRl
eHR1cmUpOgorICAgICAgICAoV2ViQ29yZTo6U2hhcmVkQ29udGV4dDNEOjpiaW5kVGV4dHVyZSk6
CisgICAgICAgIChXZWJDb3JlOjpTaGFyZWRDb250ZXh0M0Q6OnVzZUZpbGxTb2xpZFByb2dyYW0p
OgorICAgICAgICAoV2ViQ29yZTo6U2hhcmVkQ29udGV4dDNEOjp1c2VUZXh0dXJlUHJvZ3JhbSk6
CisgICAgICAgIChXZWJDb3JlOjpTaGFyZWRDb250ZXh0M0Q6OmJpbmRGcmFtZWJ1ZmZlcik6Cisg
ICAgICAgIChXZWJDb3JlOjpTaGFyZWRDb250ZXh0M0Q6OnNldFZpZXdwb3J0KToKKyAgICAgICAg
KFdlYkNvcmU6OlNoYXJlZENvbnRleHQzRDo6cGFpbnRzSW50b0NhbnZhc0J1ZmZlcik6CisgICAg
ICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZ3B1L1NoYXJlZENvbnRleHQzRC5oOiBBZGRlZC4KKyAg
ICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9ncHUvVGV4dHVyZS5jcHA6CisgICAgICAgIC0gUGxh
dGZvcm0tc3BlY2lmaWMgY2hhbmdlcyAoY2hyb21pdW0pOgorICAgICAgICAqIHBsYXRmb3JtL2dy
YXBoaWNzL2Nocm9taXVtL0NhbnZhczJETGF5ZXJDaHJvbWl1bS5jcHA6IEFkZGVkLgorICAgICAg
ICAoV2ViQ29yZTo6Q2FudmFzMkRMYXllckNocm9taXVtOjpjcmVhdGUpOgorICAgICAgICAoV2Vi
Q29yZTo6Q2FudmFzMkRMYXllckNocm9taXVtOjpDYW52YXMyRExheWVyQ2hyb21pdW0pOgorICAg
ICAgICAoV2ViQ29yZTo6Q2FudmFzMkRMYXllckNocm9taXVtOjp+Q2FudmFzMkRMYXllckNocm9t
aXVtKToKKyAgICAgICAgKFdlYkNvcmU6OkNhbnZhczJETGF5ZXJDaHJvbWl1bTo6dXBkYXRlQ29u
dGVudHMpOgorICAgICAgICAoV2ViQ29yZTo6Q2FudmFzMkRMYXllckNocm9taXVtOjpzZXREcmF3
aW5nQnVmZmVyKToKKyAgICAgICAgKFdlYkNvcmU6OkNhbnZhczJETGF5ZXJDaHJvbWl1bTo6dGV4
dHVyZUlkKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9DYW52YXMyRExh
eWVyQ2hyb21pdW0uaDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpDYW52YXMyRExheWVyQ2hy
b21pdW06OmRyYXdzQ29udGVudCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21p
dW0vQ2FudmFzTGF5ZXJDaHJvbWl1bS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDYW52YXNMYXll
ckNocm9taXVtOjpDYW52YXNMYXllckNocm9taXVtKToKKyAgICAgICAgKFdlYkNvcmU6OkNhbnZh
c0xheWVyQ2hyb21pdW06On5DYW52YXNMYXllckNocm9taXVtKToKKyAgICAgICAgKFdlYkNvcmU6
OkNhbnZhc0xheWVyQ2hyb21pdW06OmRyYXcpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNz
L2Nocm9taXVtL0NhbnZhc0xheWVyQ2hyb21pdW0uaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFw
aGljcy9jaHJvbWl1bS9EcmF3aW5nQnVmZmVyQ2hyb21pdW0uY3BwOiBBZGRlZC4KKyAgICAgICAg
KFdlYkNvcmU6OkRyYXdpbmdCdWZmZXI6OkRyYXdpbmdCdWZmZXIpOgorICAgICAgICAoV2ViQ29y
ZTo6RHJhd2luZ0J1ZmZlcjo6fkRyYXdpbmdCdWZmZXIpOgorICAgICAgICAoV2ViQ29yZTo6RHJh
d2luZ0J1ZmZlcjo6cHVibGlzaFRvUGxhdGZvcm1MYXllcik6CisgICAgICAgICogcGxhdGZvcm0v
Z3JhcGhpY3MvY2hyb21pdW0vR0xFUzJDYW52YXMuY3BwOgorICAgICAgICAoV2ViQ29yZTo6R0xF
UzJDYW52YXM6OkdMRVMyQ2FudmFzKToKKyAgICAgICAgKFdlYkNvcmU6OkdMRVMyQ2FudmFzOjp+
R0xFUzJDYW52YXMpOgorICAgICAgICAoV2ViQ29yZTo6R0xFUzJDYW52YXM6OmJpbmRGcmFtZWJ1
ZmZlcik6CisgICAgICAgIChXZWJDb3JlOjpHTEVTMkNhbnZhczo6Y2xlYXJSZWN0KToKKyAgICAg
ICAgKFdlYkNvcmU6OkdMRVMyQ2FudmFzOjpmaWxsUmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpH
TEVTMkNhbnZhczo6ZHJhd1RleHR1cmVkUmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpHTEVTMkNh
bnZhczo6ZHJhd1RleHR1cmVkUmVjdFRpbGUpOgorICAgICAgICAoV2ViQ29yZTo6R0xFUzJDYW52
YXM6OmRyYXdRdWFkKToKKyAgICAgICAgKFdlYkNvcmU6OkdMRVMyQ2FudmFzOjpjcmVhdGVUZXh0
dXJlKToKKyAgICAgICAgKFdlYkNvcmU6OkdMRVMyQ2FudmFzOjpnZXRUZXh0dXJlKToKKyAgICAg
ICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9HTEVTMkNhbnZhcy5oOgorICAgICAgICAo
V2ViQ29yZTo6R0xFUzJDYW52YXM6OmNvbnRleHQpOgorICAgICAgICAoV2ViQ29yZTo6R0xFUzJD
YW52YXM6OmRyYXdpbmdCdWZmZXIpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9t
aXVtL0dyYXBoaWNzTGF5ZXJDaHJvbWl1bS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGlj
c0xheWVyQ2hyb21pdW06OnNldENvbnRlbnRzVG9XZWJHTCk6CisgICAgICAgIChXZWJDb3JlOjpH
cmFwaGljc0xheWVyQ2hyb21pdW06OnNldENvbnRlbnRzVG9DYW52YXMyRCk6CisgICAgICAgICog
cGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vR3JhcGhpY3NMYXllckNocm9taXVtLmg6CisgICAg
ICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJSZW5kZXJlckNocm9taXVtLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyUmVuZGVyZXJDaHJvbWl1bTo6ZHJhd0xheWVyKToK
KyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9XZWJHTExheWVyQ2hyb21pdW0u
Y3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OldlYkdMTGF5ZXJDaHJvbWl1bTo6Y3JlYXRl
KToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMTGF5ZXJDaHJvbWl1bTo6V2ViR0xMYXllckNocm9t
aXVtKToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMTGF5ZXJDaHJvbWl1bTo6dXBkYXRlQ29udGVu
dHMpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xMYXllckNocm9taXVtOjpzZXRDb250ZXh0KToK
KyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9XZWJHTExheWVyQ2hyb21pdW0u
aDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpXZWJHTExheWVyQ2hyb21pdW06OmRyYXdzQ29u
dGVudCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvc2tpYS9HcmFwaGljc0NvbnRleHRT
a2lhLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6c3luY1NvZnR3YXJl
Q2FudmFzKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6c2V0U2hhcmVkQ29u
dGV4dDNEKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9za2lhL0ltYWdlU2tpYS5jcHA6
CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvc2tpYS9QbGF0Zm9ybUNvbnRleHRTa2lhLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OlBsYXRmb3JtQ29udGV4dFNraWE6On5QbGF0Zm9ybUNvbnRl
eHRTa2lhKToKKyAgICAgICAgKFdlYkNvcmU6OldpbGxQdWJsaXNoQ2FsbGJhY2tJbXBsOjpjcmVh
dGUpOgorICAgICAgICAoV2ViQ29yZTo6V2lsbFB1Ymxpc2hDYWxsYmFja0ltcGw6OndpbGxQdWJs
aXNoKToKKyAgICAgICAgKFdlYkNvcmU6OldpbGxQdWJsaXNoQ2FsbGJhY2tJbXBsOjpXaWxsUHVi
bGlzaENhbGxiYWNrSW1wbCk6CisgICAgICAgIChXZWJDb3JlOjpQbGF0Zm9ybUNvbnRleHRTa2lh
OjpzZXRTaGFyZWRDb250ZXh0M0QpOgorICAgICAgICAoV2ViQ29yZTo6UGxhdGZvcm1Db250ZXh0
U2tpYTo6dXBsb2FkU29mdHdhcmVUb0hhcmR3YXJlKToKKyAgICAgICAgKFdlYkNvcmU6OlBsYXRm
b3JtQ29udGV4dFNraWE6OnJlYWRiYWNrSGFyZHdhcmVUb1NvZnR3YXJlKToKKyAgICAgICAgKiBw
bGF0Zm9ybS9ncmFwaGljcy9za2lhL1BsYXRmb3JtQ29udGV4dFNraWEuaDoKKyAgICAgICAgLSBQ
bGF0Zm9ybS1zcGVjaWZpYyBjaGFuZ2VzIChtYWMpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBo
aWNzL21hYy9HcmFwaGljc0xheWVyQ0EuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9t
YWMvR3JhcGhpY3NMYXllckNBLm1tOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NMYXllckNB
OjpzZXRDb250ZW50c1RvV2ViR0wpOgorCisKIDIwMTAtMDgtMzAgIENocmlzIFJvZ2VycyAgPGNy
b2dlcnNAZ29vZ2xlLmNvbT4KIAogICAgICAgICBSZXZpZXdlZCBieSBLZW5uZXRoIFJ1c3NlbGwu
CmRpZmYgLS1naXQgYS9XZWJDb3JlL1dlYkNvcmUuZ3lwaSBiL1dlYkNvcmUvV2ViQ29yZS5neXBp
CmluZGV4IGU1YjU3YmEwOGUzYTAwZDhkNTk4Y2QyYmU0MDczZDcwYTlhMGJkZjcuLjYxYTI3OGFi
YTU1ODg2NzY2OTljZTg0MmVmN2I2MWQzY2M0OGIyNmUgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvV2Vi
Q29yZS5neXBpCisrKyBiL1dlYkNvcmUvV2ViQ29yZS5neXBpCkBAIC0yMjM2LDggKzIyMzYsMTEg
QEAKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jZy9QYXRoQ0cuY3BwJywKICAgICAg
ICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jZy9QYXR0ZXJuQ0cuY3BwJywKICAgICAgICAgICAg
ICdwbGF0Zm9ybS9ncmFwaGljcy9jZy9UcmFuc2Zvcm1hdGlvbk1hdHJpeENHLmNwcCcsCisgICAg
ICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vQ2FudmFzMkRMYXllckNocm9taXVt
LmNwcCcsCisgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vQ2FudmFzMkRM
YXllckNocm9taXVtLmgnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVt
L0NhbnZhc0xheWVyQ2hyb21pdW0uY3BwJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGlj
cy9jaHJvbWl1bS9DYW52YXNMYXllckNocm9taXVtLmgnLAorICAgICAgICAgICAgJ3BsYXRmb3Jt
L2dyYXBoaWNzL2Nocm9taXVtL0RyYXdpbmdCdWZmZXJDaHJvbWl1bS5jcHAnLAogICAgICAgICAg
ICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0NvbnRlbnRMYXllckNocm9taXVtLmNwcCcs
CiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vQ29udGVudExheWVyQ2hy
b21pdW0uaCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vRm9udENh
Y2hlQ2hyb21pdW1XaW4uY3BwJywKQEAgLTIyODMsNiArMjI4Niw4IEBACiAgICAgICAgICAgICAn
cGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vVW5pc2NyaWJlSGVscGVyVGV4dFJ1bi5oJywKICAg
ICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9WaWRlb0xheWVyQ2hyb21pdW0u
Y3BwJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9WaWRlb0xheWVy
Q2hyb21pdW0uaCcsCisgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vV2Vi
R0xMYXllckNocm9taXVtLmNwcCcsCisgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hy
b21pdW0vV2ViR0xMYXllckNocm9taXVtLmgnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBo
aWNzL2NvY29hL0ZvbnRQbGF0Zm9ybURhdGEuaCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vZ3Jh
cGhpY3MvZmlsdGVycy9GRUJsZW5kLmNwcCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhp
Y3MvZmlsdGVycy9GRUJsZW5kLmgnLApAQCAtMjMwMyw2ICsyMzA4LDEwIEBACiAgICAgICAgICAg
ICAncGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9Tb3VyY2VBbHBoYS5oJywKICAgICAgICAgICAg
ICdwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL1NvdXJjZUdyYXBoaWMuY3BwJywKICAgICAgICAg
ICAgICdwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL1NvdXJjZUdyYXBoaWMuaCcsCisgICAgICAg
ICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvZ3B1L0RyYXdpbmdCdWZmZXIuY3BwJywKKyAgICAgICAg
ICAgICdwbGF0Zm9ybS9ncmFwaGljcy9ncHUvRHJhd2luZ0J1ZmZlci5oJywKKyAgICAgICAgICAg
ICdwbGF0Zm9ybS9ncmFwaGljcy9ncHUvU2hhcmVkQ29udGV4dDNELmNwcCcsCisgICAgICAgICAg
ICAncGxhdGZvcm0vZ3JhcGhpY3MvZ3B1L1NoYXJlZENvbnRleHQzRC5oJywKICAgICAgICAgICAg
ICdwbGF0Zm9ybS9ncmFwaGljcy9ncHUvU2hhZGVyLmNwcCcsCiAgICAgICAgICAgICAncGxhdGZv
cm0vZ3JhcGhpY3MvZ3B1L1NoYWRlci5oJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGlj
cy9ncHUvU29saWRGaWxsU2hhZGVyLmNwcCcsCkBAIC0yNTYxLDggKzI1NzAsOCBAQAogICAgICAg
ICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlQnVmZmVyLmNwcCcsCiAgICAgICAgICAgICAn
cGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VCdWZmZXIuaCcsCiAgICAgICAgICAgICAncGxhdGZvcm0v
Z3JhcGhpY3MvSW1hZ2VPYnNlcnZlci5oJywKLSAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGlj
cy9JbWFnZVNvdXJjZS5oJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9JbWFnZVNv
dXJjZS5jcHAnLAorICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlU291cmNlLmgn
LAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL0ludFBvaW50LmgnLAogICAgICAgICAg
ICAgJ3BsYXRmb3JtL2dyYXBoaWNzL0ludFJlY3QuY3BwJywKICAgICAgICAgICAgICdwbGF0Zm9y
bS9ncmFwaGljcy9JbnRSZWN0LmgnLApkaWZmIC0tZ2l0IGEvV2ViQ29yZS9odG1sL2NhbnZhcy9D
YW52YXNSZW5kZXJpbmdDb250ZXh0LmNwcCBiL1dlYkNvcmUvaHRtbC9jYW52YXMvQ2FudmFzUmVu
ZGVyaW5nQ29udGV4dC5jcHAKaW5kZXggMWU4OTdkMzBlY2UxOTgzOTEyOGYwMDhkZGY4ZDQ4NjBk
NzE0MDYyNy4uZTAxOTMzMmJhODFmNTNjOWViMmNjY2M1M2IyNDUzMDQ2ZWNiZDg1ZSAxMDA2NDQK
LS0tIGEvV2ViQ29yZS9odG1sL2NhbnZhcy9DYW52YXNSZW5kZXJpbmdDb250ZXh0LmNwcAorKysg
Yi9XZWJDb3JlL2h0bWwvY2FudmFzL0NhbnZhc1JlbmRlcmluZ0NvbnRleHQuY3BwCkBAIC0yNSw5
ICsyNSw2IEBACiAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJDYW52YXNSZW5kZXJp
bmdDb250ZXh0LmgiCi0jaWYgRU5BQkxFKEFDQ0VMRVJBVEVEXzJEX0NBTlZBUykgfHwgRU5BQkxF
KDNEX0NBTlZBUykKLSNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQzRC5oIgotI2VuZGlmCiAjaW5j
bHVkZSAiSFRNTENhbnZhc0VsZW1lbnQuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewpAQCAtNDcs
MTMgKzQ0LDQgQEAgdm9pZCBDYW52YXNSZW5kZXJpbmdDb250ZXh0OjpkZXJlZigpCiAgICAgbV9j
YW52YXMtPmRlcmVmKCk7IAogfQogCi1ib29sIENhbnZhc1JlbmRlcmluZ0NvbnRleHQ6OnBhaW50
c0ludG9DYW52YXNCdWZmZXIoKSBjb25zdAotewotI2lmIEVOQUJMRShBQ0NFTEVSQVRFRF8yRF9D
QU5WQVMpIHx8IEVOQUJMRSgzRF9DQU5WQVMpCi0gICAgaWYgKEdyYXBoaWNzQ29udGV4dDNEKiBj
b250ZXh0M0QgPSBncmFwaGljc0NvbnRleHQzRCgpKQotICAgICAgICByZXR1cm4gY29udGV4dDNE
LT5wYWludHNJbnRvQ2FudmFzQnVmZmVyKCk7Ci0jZW5kaWYKLSAgICByZXR1cm4gdHJ1ZTsKLX0K
LQogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9odG1sL2NhbnZh
cy9DYW52YXNSZW5kZXJpbmdDb250ZXh0LmggYi9XZWJDb3JlL2h0bWwvY2FudmFzL0NhbnZhc1Jl
bmRlcmluZ0NvbnRleHQuaAppbmRleCAyY2RiZTFkMzc2NTk0ZGJlMGRmYmQ3MDBmMmVmYjczNGEz
ZGI5MmM2Li5jNzE2OGIxZDA3ZGVhOGNmYzRkNjk0MTlhNGE2NWM0ZTJmYmFkY2EyIDEwMDY0NAot
LS0gYS9XZWJDb3JlL2h0bWwvY2FudmFzL0NhbnZhc1JlbmRlcmluZ0NvbnRleHQuaAorKysgYi9X
ZWJDb3JlL2h0bWwvY2FudmFzL0NhbnZhc1JlbmRlcmluZ0NvbnRleHQuaApAQCAtMzEsNyArMzEs
NiBAQAogbmFtZXNwYWNlIFdlYkNvcmUgewogCiAgICAgY2xhc3MgV2ViR0xPYmplY3Q7Ci0gICAg
Y2xhc3MgR3JhcGhpY3NDb250ZXh0M0Q7CiAgICAgY2xhc3MgSFRNTENhbnZhc0VsZW1lbnQ7CiAK
ICAgICBjbGFzcyBDYW52YXNSZW5kZXJpbmdDb250ZXh0IDogcHVibGljIE5vbmNvcHlhYmxlIHsK
QEAgLTQ5LDEyICs0OCw4IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgdmlydHVhbCBi
b29sIGlzM2QoKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQogICAgICAgICB2aXJ0dWFsIGJvb2wg
aXNBY2NlbGVyYXRlZCgpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CiAgICAgICAgIAotICAgICAg
ICAvLyBGb3IgYWNjZWxlcmF0ZWQgY2FudmFzZXMsIHJldHVybnMgYSBwb2ludGVyIHRvIHRoZSB1
bmRlcmx5aW5nIEdyYXBoaWNzQ29udGV4dDNELgotICAgICAgICAvLyBGb3Igbm9uIGFjY2VsZXJh
dGVkIGNhbnZhc2VzIHJldHVybnMgMC4KLSAgICAgICAgdmlydHVhbCBHcmFwaGljc0NvbnRleHQz
RCogZ3JhcGhpY3NDb250ZXh0M0QoKSBjb25zdCB7IHJldHVybiAwOyB9Ci0KICAgICAgICAgdmly
dHVhbCB2b2lkIHBhaW50UmVuZGVyaW5nUmVzdWx0c1RvQ2FudmFzKCkge30KLSAgICAgICAgYm9v
bCBwYWludHNJbnRvQ2FudmFzQnVmZmVyKCkgY29uc3Q7CisgICAgICAgIHZpcnR1YWwgYm9vbCBw
YWludHNJbnRvQ2FudmFzQnVmZmVyKCkgY29uc3QgeyByZXR1cm4gdHJ1ZTsgfQogCiAgICAgcHJp
dmF0ZToKICAgICAgICAgSFRNTENhbnZhc0VsZW1lbnQqIG1fY2FudmFzOwpkaWZmIC0tZ2l0IGEv
V2ViQ29yZS9odG1sL2NhbnZhcy9DYW52YXNSZW5kZXJpbmdDb250ZXh0MkQuY3BwIGIvV2ViQ29y
ZS9odG1sL2NhbnZhcy9DYW52YXNSZW5kZXJpbmdDb250ZXh0MkQuY3BwCmluZGV4IDZkZjZhYmY5
Njc0YWQ5YTIwZjIyNzJhMTc4OTNjODU4NTBkZTU3ZDcuLmFmYTM1NmU4OTQwYTBmM2ZmNDY2NjYy
MDkzNzk4ZjY3NWI4MmZiMDkgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvaHRtbC9jYW52YXMvQ2FudmFz
UmVuZGVyaW5nQ29udGV4dDJELmNwcAorKysgYi9XZWJDb3JlL2h0bWwvY2FudmFzL0NhbnZhc1Jl
bmRlcmluZ0NvbnRleHQyRC5jcHAKQEAgLTU5LDggKzU5LDEyIEBACiAjaW5jbHVkZSAiVGV4dE1l
dHJpY3MuaCIKIAogI2lmIEVOQUJMRShBQ0NFTEVSQVRFRF8yRF9DQU5WQVMpCisjaW5jbHVkZSAi
Q2hyb21lLmgiCisjaW5jbHVkZSAiQ2hyb21lQ2xpZW50LmgiCisjaW5jbHVkZSAiRHJhd2luZ0J1
ZmZlci5oIgogI2luY2x1ZGUgIkZyYW1lVmlldy5oIgogI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4
dDNELmgiCisjaW5jbHVkZSAiU2hhcmVkQ29udGV4dDNELmgiCiAjaWYgVVNFKEFDQ0VMRVJBVEVE
X0NPTVBPU0lUSU5HKQogI2luY2x1ZGUgIlJlbmRlckxheWVyLmgiCiAjZW5kaWYKQEAgLTEyNCwx
NyArMTI4LDExIEBAIENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRDo6Q2FudmFzUmVuZGVyaW5nQ29u
dGV4dDJEKEhUTUxDYW52YXNFbGVtZW50KiBjYW52YXMsIGJvCiAgICAgICAgIHJldHVybjsKICAg
ICBpZiAoIXAtPnNldHRpbmdzKCktPmFjY2VsZXJhdGVkMmRDYW52YXNFbmFibGVkKCkpCiAgICAg
ICAgIHJldHVybjsKLSAgICBpZiAoRnJhbWVWaWV3KiB2aWV3ID0gY2FudmFzLT5kb2N1bWVudCgp
LT52aWV3KCkpIHsKLSAgICAgICAgaWYgKFNjcm9sbFZpZXcqIHJvb3RWaWV3ID0gdmlldy0+cm9v
dCgpKSB7Ci0gICAgICAgICAgICBpZiAoSG9zdFdpbmRvdyogaG9zdFdpbmRvdyA9IHJvb3RWaWV3
LT5ob3N0V2luZG93KCkpIHsKLSAgICAgICAgICAgICAgICAvLyBTZXQgdXAgb3VyIGNvbnRleHQK
LSAgICAgICAgICAgICAgICBHcmFwaGljc0NvbnRleHQzRDo6QXR0cmlidXRlcyBhdHRyOwotICAg
ICAgICAgICAgICAgIGF0dHIuc3RlbmNpbCA9IHRydWU7Ci0gICAgICAgICAgICAgICAgbV9jb250
ZXh0M0QgPSBHcmFwaGljc0NvbnRleHQzRDo6Y3JlYXRlKGF0dHIsIGhvc3RXaW5kb3cpOwotICAg
ICAgICAgICAgICAgIGlmIChtX2NvbnRleHQzRCkKLSAgICAgICAgICAgICAgICAgICAgaWYgKEdy
YXBoaWNzQ29udGV4dCogYyA9IGRyYXdpbmdDb250ZXh0KCkpCi0gICAgICAgICAgICAgICAgICAg
ICAgICBjLT5zZXRHcmFwaGljc0NvbnRleHQzRChtX2NvbnRleHQzRC5nZXQoKSwgSW50U2l6ZShj
YW52YXMtPndpZHRoKCksIGNhbnZhcy0+aGVpZ2h0KCkpKTsKLSAgICAgICAgICAgIH0KKyAgICBt
X2NvbnRleHQzRCA9IHAtPmNocm9tZSgpLT5jbGllbnQoKS0+Z2V0U2hhcmVkQ29udGV4dDNEKCk7
CisgICAgaWYgKG1fY29udGV4dDNEKSB7CisgICAgICAgIGlmIChHcmFwaGljc0NvbnRleHQqIGMg
PSBkcmF3aW5nQ29udGV4dCgpKSB7CisgICAgICAgICAgICBtX2RyYXdpbmdCdWZmZXIgPSBEcmF3
aW5nQnVmZmVyOjpjcmVhdGUobV9jb250ZXh0M0QuZ2V0KCksIEludFNpemUoY2FudmFzLT53aWR0
aCgpLCBjYW52YXMtPmhlaWdodCgpKSk7CisgICAgICAgICAgICBjLT5zZXRTaGFyZWRDb250ZXh0
M0QobV9jb250ZXh0M0QuZ2V0KCksIG1fZHJhd2luZ0J1ZmZlci5nZXQoKSwgSW50U2l6ZShjYW52
YXMtPndpZHRoKCksIGNhbnZhcy0+aGVpZ2h0KCkpKTsKICAgICAgICAgfQogICAgIH0KICNlbmRp
ZgpAQCAtMTUzLDYgKzE1MSwxNiBAQCBib29sIENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRDo6aXNB
Y2NlbGVyYXRlZCgpIGNvbnN0CiAjZW5kaWYKIH0KIAorYm9vbCBDYW52YXNSZW5kZXJpbmdDb250
ZXh0MkQ6OnBhaW50c0ludG9DYW52YXNCdWZmZXIoKSBjb25zdAoreworI2lmIEVOQUJMRShBQ0NF
TEVSQVRFRF8yRF9DQU5WQVMpCisgICAgaWYgKG1fY29udGV4dDNEKQorICAgICAgICByZXR1cm4g
bV9jb250ZXh0M0QtPnBhaW50c0ludG9DYW52YXNCdWZmZXIoKTsKKyNlbmRpZgorICAgIHJldHVy
biB0cnVlOworfQorCisKIHZvaWQgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEOjpyZXNldCgpCiB7
CiAgICAgbV9zdGF0ZVN0YWNrLnJlc2l6ZSgxKTsKQEAgLTE2MCw4ICsxNjgsMTAgQEAgdm9pZCBD
YW52YXNSZW5kZXJpbmdDb250ZXh0MkQ6OnJlc2V0KCkKICAgICBtX3BhdGguY2xlYXIoKTsKICNp
ZiBFTkFCTEUoQUNDRUxFUkFURURfMkRfQ0FOVkFTKQogICAgIGlmIChtX2NvbnRleHQzRCkgewot
ICAgICAgICBpZiAoR3JhcGhpY3NDb250ZXh0KiBjID0gZHJhd2luZ0NvbnRleHQoKSkKLSAgICAg
ICAgICAgIGMtPnNldEdyYXBoaWNzQ29udGV4dDNEKG1fY29udGV4dDNELmdldCgpLCBJbnRTaXpl
KGNhbnZhcygpLT53aWR0aCgpLCBjYW52YXMoKS0+aGVpZ2h0KCkpKTsKKyAgICAgICAgaWYgKEdy
YXBoaWNzQ29udGV4dCogYyA9IGRyYXdpbmdDb250ZXh0KCkpIHsKKyAgICAgICAgICAgIG1fZHJh
d2luZ0J1ZmZlciA9IERyYXdpbmdCdWZmZXI6OmNyZWF0ZShtX2NvbnRleHQzRC5nZXQoKSwgSW50
U2l6ZShjYW52YXMoKS0+d2lkdGgoKSwgY2FudmFzKCktPmhlaWdodCgpKSk7CisgICAgICAgICAg
ICBjLT5zZXRTaGFyZWRDb250ZXh0M0QobV9jb250ZXh0M0QuZ2V0KCksIG1fZHJhd2luZ0J1ZmZl
ci5nZXQoKSwgSW50U2l6ZShjYW52YXMoKS0+d2lkdGgoKSwgY2FudmFzKCktPmhlaWdodCgpKSk7
CisgICAgICAgIH0KICAgICB9CiAjZW5kaWYKIH0KQEAgLTE1MDQsNyArMTUxNCw3IEBAIHZvaWQg
Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJEOjpkaWREcmF3KGNvbnN0IEZsb2F0UmVjdCYgciwgdW5z
aWduZWQgb3B0aW9ucykKICNpZiBFTkFCTEUoQUNDRUxFUkFURURfMkRfQ0FOVkFTKSAmJiBVU0Uo
QUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCiAgICAgLy8gSWYgd2UgYXJlIGRyYXdpbmcgdG8gaGFy
ZHdhcmUgYW5kIHdlIGhhdmUgYSBjb21wb3NpdGVkIGxheWVyLCBqdXN0IGNhbGwgcmVuZGVyZXJD
b250ZW50Q2hhbmdlZCgpLgogICAgIFJlbmRlckJveCogcmVuZGVyQm94ID0gY2FudmFzKCktPnJl
bmRlckJveCgpOwotICAgIGlmIChtX2NvbnRleHQzRCAmJiByZW5kZXJCb3ggJiYgcmVuZGVyQm94
LT5oYXNMYXllcigpICYmIHJlbmRlckJveC0+bGF5ZXIoKS0+aGFzQWNjZWxlcmF0ZWRDb21wb3Np
dGluZygpKQorICAgIGlmIChpc0FjY2VsZXJhdGVkKCkgJiYgcmVuZGVyQm94ICYmIHJlbmRlckJv
eC0+aGFzTGF5ZXIoKSAmJiByZW5kZXJCb3gtPmxheWVyKCktPmhhc0FjY2VsZXJhdGVkQ29tcG9z
aXRpbmcoKSkKICAgICAgICAgcmVuZGVyQm94LT5sYXllcigpLT5yZW5kZXJlckNvbnRlbnRDaGFu
Z2VkKCk7CiAgICAgZWxzZQogI2VuZGlmCmRpZmYgLS1naXQgYS9XZWJDb3JlL2h0bWwvY2FudmFz
L0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRC5oIGIvV2ViQ29yZS9odG1sL2NhbnZhcy9DYW52YXNS
ZW5kZXJpbmdDb250ZXh0MkQuaAppbmRleCA5ODU3MzQ0M2U4MWRmOWY3ZDk2ZjY5MjMyZmVmZjkw
OGUwY2U2Yjg5Li4yNTkxMGE3OWI0ZGYzZjRhMzJkYzBlZDQwNjljYTAyMmJhYjE1ODA0IDEwMDY0
NAotLS0gYS9XZWJDb3JlL2h0bWwvY2FudmFzL0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRC5oCisr
KyBiL1dlYkNvcmUvaHRtbC9jYW52YXMvQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJELmgKQEAgLTYx
LDcgKzYxLDcgQEAgY2xhc3MgS1VSTDsKIGNsYXNzIFRleHRNZXRyaWNzOwogCiAjaWYgRU5BQkxF
KEFDQ0VMRVJBVEVEXzJEX0NBTlZBUykKLWNsYXNzIEdyYXBoaWNzQ29udGV4dDNEOworY2xhc3Mg
U2hhcmVkQ29udGV4dDNEOwogI2VuZGlmCiAKIHR5cGVkZWYgaW50IEV4Y2VwdGlvbkNvZGU7CkBA
IC03NCw2ICs3NCw3IEBAIHB1YmxpYzoKIAogICAgIHZpcnR1YWwgYm9vbCBpczJkKCkgY29uc3Qg
eyByZXR1cm4gdHJ1ZTsgfQogICAgIHZpcnR1YWwgYm9vbCBpc0FjY2VsZXJhdGVkKCkgY29uc3Q7
CisgICAgdmlydHVhbCBib29sIHBhaW50c0ludG9DYW52YXNCdWZmZXIoKSBjb25zdDsKIAogICAg
IENhbnZhc1N0eWxlKiBzdHJva2VTdHlsZSgpIGNvbnN0OwogICAgIHZvaWQgc2V0U3Ryb2tlU3R5
bGUoUGFzc1JlZlB0cjxDYW52YXNTdHlsZT4pOwpAQCAtMjI0LDcgKzIyNSw3IEBAIHB1YmxpYzoK
ICAgICB2aXJ0dWFsIHZvaWQgcGFpbnRSZW5kZXJpbmdSZXN1bHRzVG9DYW52YXMoKTsKIAogI2lm
IEVOQUJMRShBQ0NFTEVSQVRFRF8yRF9DQU5WQVMpCi0gICAgdmlydHVhbCBHcmFwaGljc0NvbnRl
eHQzRCogZ3JhcGhpY3NDb250ZXh0M0QoKSBjb25zdCB7IHJldHVybiBtX2NvbnRleHQzRC5nZXQo
KTsgfQorICAgIERyYXdpbmdCdWZmZXIqIGRyYXdpbmdCdWZmZXIoKSB7IHJldHVybiBtX2RyYXdp
bmdCdWZmZXIuZ2V0KCk7IH0KICNlbmRpZgogCiBwcml2YXRlOgpAQCAtMjk4LDcgKzI5OSw4IEBA
IHByaXZhdGU6CiAjZW5kaWYKIAogI2lmIEVOQUJMRShBQ0NFTEVSQVRFRF8yRF9DQU5WQVMpCi0g
ICAgT3duUHRyPEdyYXBoaWNzQ29udGV4dDNEPiBtX2NvbnRleHQzRDsKKyAgICBSZWZQdHI8U2hh
cmVkQ29udGV4dDNEPiBtX2NvbnRleHQzRDsKKyAgICBSZWZQdHI8RHJhd2luZ0J1ZmZlcj4gbV9k
cmF3aW5nQnVmZmVyOwogI2VuZGlmCiB9OwogCmRpZmYgLS1naXQgYS9XZWJDb3JlL2h0bWwvY2Fu
dmFzL1dlYkdMUmVuZGVyaW5nQ29udGV4dC5jcHAgYi9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdM
UmVuZGVyaW5nQ29udGV4dC5jcHAKaW5kZXggOTU5MWE1M2NmZWMwNTllMjk5MzZjNTgxOTA3MGE0
ZWFmZTljZDY4My4uNjRjYjVkM2VmZGNmZWIyZTI1MzcwNDM2ODk0ZGYwYzU5MzZhMmYzYSAxMDA2
NDQKLS0tIGEvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFJlbmRlcmluZ0NvbnRleHQuY3BwCisr
KyBiL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xSZW5kZXJpbmdDb250ZXh0LmNwcApAQCAtMTcw
LDYgKzE3MCwxMSBAQCB2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6cGFpbnRSZW5kZXJpbmdS
ZXN1bHRzVG9DYW52YXMoKQogICAgIG1fY29udGV4dC0+cGFpbnRSZW5kZXJpbmdSZXN1bHRzVG9D
YW52YXModGhpcyk7CiB9CiAKK2Jvb2wgV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpwYWludHNJbnRv
Q2FudmFzQnVmZmVyKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9jb250ZXh0LT5wYWludHNJbnRv
Q2FudmFzQnVmZmVyKCk7Cit9CisKIHZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpyZXNoYXBl
KGludCB3aWR0aCwgaW50IGhlaWdodCkKIHsKICAgICBpZiAobV9uZWVkc1VwZGF0ZSkgewpkaWZm
IC0tZ2l0IGEvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFJlbmRlcmluZ0NvbnRleHQuaCBiL1dl
YkNvcmUvaHRtbC9jYW52YXMvV2ViR0xSZW5kZXJpbmdDb250ZXh0LmgKaW5kZXggNjZlYzhkODJh
YTczZmRiNGI0OWYyNzZiM2I2ZDA1MmQ1Mzg0M2FiYi4uODEzOTBmOWU0ZmQ1MTkwYmRmZDVlMmUw
MDQ1N2ZlNjRjNjUxMWM5ZCAxMDA2NDQKLS0tIGEvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFJl
bmRlcmluZ0NvbnRleHQuaAorKysgYi9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMUmVuZGVyaW5n
Q29udGV4dC5oCkBAIC02Myw2ICs2Myw3IEBAIHB1YmxpYzoKIAogICAgIHZpcnR1YWwgYm9vbCBp
czNkKCkgY29uc3QgeyByZXR1cm4gdHJ1ZTsgfQogICAgIHZpcnR1YWwgYm9vbCBpc0FjY2VsZXJh
dGVkKCkgY29uc3QgeyByZXR1cm4gdHJ1ZTsgfQorICAgIHZpcnR1YWwgYm9vbCBwYWludHNJbnRv
Q2FudmFzQnVmZmVyKCkgY29uc3Q7CiAKICAgICB2b2lkIGFjdGl2ZVRleHR1cmUodW5zaWduZWQg
bG9uZyB0ZXh0dXJlLCBFeGNlcHRpb25Db2RlJiBlYyk7CiAgICAgdm9pZCBhdHRhY2hTaGFkZXIo
V2ViR0xQcm9ncmFtKiwgV2ViR0xTaGFkZXIqLCBFeGNlcHRpb25Db2RlJiBlYyk7CkBAIC0yNzcs
NyArMjc4LDcgQEAgcHVibGljOgogCiAgICAgdm9pZCB2aWV3cG9ydChsb25nIHgsIGxvbmcgeSwg
dW5zaWduZWQgbG9uZyB3aWR0aCwgdW5zaWduZWQgbG9uZyBoZWlnaHQpOwogCi0gICAgdmlydHVh
bCBHcmFwaGljc0NvbnRleHQzRCogZ3JhcGhpY3NDb250ZXh0M0QoKSBjb25zdCB7IHJldHVybiBt
X2NvbnRleHQuZ2V0KCk7IH0KKyAgICBHcmFwaGljc0NvbnRleHQzRCogZ3JhcGhpY3NDb250ZXh0
M0QoKSBjb25zdCB7IHJldHVybiBtX2NvbnRleHQuZ2V0KCk7IH0KIAogICAgIHZvaWQgcmVzaGFw
ZShpbnQgd2lkdGgsIGludCBoZWlnaHQpOwogCmRpZmYgLS1naXQgYS9XZWJDb3JlL2xvYWRlci9F
bXB0eUNsaWVudHMuaCBiL1dlYkNvcmUvbG9hZGVyL0VtcHR5Q2xpZW50cy5oCmluZGV4IDI3MDc1
MmRkN2Y4ZjAxZmE5NGY3YzI5M2QzY2ZlN2ZhOTVlZDI5MWYuLmJmZmM1M2NiODBiMTY2MDBkODI0
ZDZhYTA5ZWI2OTdiYzQ1ZmMzOGEgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvbG9hZGVyL0VtcHR5Q2xp
ZW50cy5oCisrKyBiL1dlYkNvcmUvbG9hZGVyL0VtcHR5Q2xpZW50cy5oCkBAIC02MSw2ICs2MSw4
IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAorY2xhc3MgU2hhcmVkQ29udGV4dDNEOworCiBj
bGFzcyBFbXB0eVBvcHVwTWVudSA6IHB1YmxpYyBQb3B1cE1lbnUgewogcHVibGljOgogICAgIHZp
cnR1YWwgdm9pZCBzaG93KGNvbnN0IEludFJlY3QmLCBGcmFtZVZpZXcqLCBpbnQpIHt9CkBAIC0x
OTAsOSArMTkyLDkgQEAgcHVibGljOgogICAgIHZpcnR1YWwgdm9pZCBjYW5jZWxHZW9sb2NhdGlv
blBlcm1pc3Npb25SZXF1ZXN0Rm9yRnJhbWUoRnJhbWUqLCBHZW9sb2NhdGlvbiopIHt9CiAKICNp
ZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCi0gICAgdmlydHVhbCB2b2lkIGF0dGFjaFJv
b3RHcmFwaGljc0xheWVyKEZyYW1lKiwgR3JhcGhpY3NMYXllciopIHt9OwotICAgIHZpcnR1YWwg
dm9pZCBzZXROZWVkc09uZVNob3REcmF3aW5nU3luY2hyb25pemF0aW9uKCkge307Ci0gICAgdmly
dHVhbCB2b2lkIHNjaGVkdWxlQ29tcG9zaXRpbmdMYXllclN5bmMoKSB7fTsKKyAgICB2aXJ0dWFs
IHZvaWQgYXR0YWNoUm9vdEdyYXBoaWNzTGF5ZXIoRnJhbWUqLCBHcmFwaGljc0xheWVyKikge30K
KyAgICB2aXJ0dWFsIHZvaWQgc2V0TmVlZHNPbmVTaG90RHJhd2luZ1N5bmNocm9uaXphdGlvbigp
IHt9CisgICAgdmlydHVhbCB2b2lkIHNjaGVkdWxlQ29tcG9zaXRpbmdMYXllclN5bmMoKSB7fQog
I2VuZGlmCiAKICNpZiBQTEFURk9STShXSU4pCmRpZmYgLS1naXQgYS9XZWJDb3JlL3BhZ2UvQ2hy
b21lQ2xpZW50LmggYi9XZWJDb3JlL3BhZ2UvQ2hyb21lQ2xpZW50LmgKaW5kZXggZDNlMTY2MjI5
MmEzMWE4OWU1YmFhNzQ3MDUyMGE5ODhiZTE4MjA3OS4uZDQ2MmUxZTA5OTk0YTM5ZTU1NmQ5YmU3
ZDU5NDRiNzY3MDM0ZDE5YyAxMDA2NDQKLS0tIGEvV2ViQ29yZS9wYWdlL0Nocm9tZUNsaWVudC5o
CisrKyBiL1dlYkNvcmUvcGFnZS9DaHJvbWVDbGllbnQuaApAQCAtNTcsNiArNTcsNyBAQCBuYW1l
c3BhY2UgV2ViQ29yZSB7CiAgICAgY2xhc3MgTm9kZTsKICAgICBjbGFzcyBQYWdlOwogICAgIGNs
YXNzIFNlY3VyaXR5T3JpZ2luOworICAgIGNsYXNzIFNoYXJlZENvbnRleHQzRDsKICAgICBjbGFz
cyBQb3B1cE1lbnVDbGllbnQ7CiAgICAgY2xhc3MgV2lkZ2V0OwogCkBAIC0yMzAsNiArMjMxLDgg
QEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICB2aXJ0dWFsIGJvb2wgYWxsb3dzQWNjZWxl
cmF0ZWRDb21wb3NpdGluZygpIGNvbnN0IHsgcmV0dXJuIHRydWU7IH0KICNlbmRpZgogCisgICAg
ICAgIHZpcnR1YWwgU2hhcmVkQ29udGV4dDNEKiBnZXRTaGFyZWRDb250ZXh0M0QoKSB7IHJldHVy
biAwOyB9CisKICAgICAgICAgdmlydHVhbCBib29sIHN1cHBvcnRzRnVsbHNjcmVlbkZvck5vZGUo
Y29uc3QgTm9kZSopIHsgcmV0dXJuIGZhbHNlOyB9CiAgICAgICAgIHZpcnR1YWwgdm9pZCBlbnRl
ckZ1bGxzY3JlZW5Gb3JOb2RlKE5vZGUqKSB7IH0KICAgICAgICAgdmlydHVhbCB2b2lkIGV4aXRG
dWxsc2NyZWVuRm9yTm9kZShOb2RlKikgeyB9CmRpZmYgLS1naXQgYS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dC5jcHAgYi9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L0dyYXBoaWNzQ29udGV4dC5jcHAKaW5kZXggNDczODRiOWVlODRkNmRhMDg2MGYzMTYxYjNiYzA4
MjExOWY0NWJmZi4uYzhlMzI2MTUzODc2YTAxMmYzNWM0N2U5ODJkYTY5NDRmY2YxYjFhYSAxMDA2
NDQKLS0tIGEvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQuY3BwCisr
KyBiL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0LmNwcApAQCAtNTcx
LDYgKzU3MSwxNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6c2V0UGxhdGZvcm1TdHJva2VTdHls
ZShjb25zdCBTdHJva2VTdHlsZSYpCiB9CiAjZW5kaWYKIAorI2lmICFQTEFURk9STShTS0lBKQor
dm9pZCBHcmFwaGljc0NvbnRleHQ6OnNldFNoYXJlZENvbnRleHQzRChTaGFyZWRDb250ZXh0M0Qq
LCBEcmF3aW5nQnVmZmVyKiwgY29uc3QgSW50U2l6ZSYpCit7Cit9CisKK3ZvaWQgR3JhcGhpY3ND
b250ZXh0OjpzeW5jU29mdHdhcmVDYW52YXMoKQoreworfQorI2VuZGlmCisKKwogdm9pZCBHcmFw
aGljc0NvbnRleHQ6OmFkanVzdExpbmVUb1BpeGVsQm91bmRhcmllcyhGbG9hdFBvaW50JiBwMSwg
RmxvYXRQb2ludCYgcDIsIGZsb2F0IHN0cm9rZVdpZHRoLCBjb25zdCBTdHJva2VTdHlsZSYgcGVu
U3R5bGUpCiB7CiAgICAgLy8gRm9yIG9kZCB3aWR0aHMsIHdlIGFkZCBpbiAwLjUgdG8gdGhlIGFw
cHJvcHJpYXRlIHgveSBzbyB0aGF0IHRoZSBmbG9hdCBhcml0aG1ldGljCkBAIC02MDAsMTQgKzYx
MSw0IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0OjphZGp1c3RMaW5lVG9QaXhlbEJvdW5kYXJpZXMo
RmxvYXRQb2ludCYgcDEsIEZsb2F0UG9pbnQmIHAyCiAgICAgfQogfQogCi0jaWYgIVBMQVRGT1JN
KFNLSUEpCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6c2V0R3JhcGhpY3NDb250ZXh0M0QoR3JhcGhp
Y3NDb250ZXh0M0QqLCBjb25zdCBJbnRTaXplJikKLXsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRl
eHQ6OnN5bmNTb2Z0d2FyZUNhbnZhcygpCi17Ci19Ci0jZW5kaWYKLQogfQpkaWZmIC0tZ2l0IGEv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQuaCBiL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0LmgKaW5kZXggOTNlZjg5MDA2MmVkYTUyODk5
ZTRkMzNkZDEwOTFhMmQzMmY0ZDA4Yy4uOTNhZDlkNWUzODBiMGVlZjUxOWYzZjNlNGNjNTZlNTdj
MTc2MWU4MyAxMDA2NDQKLS0tIGEvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0Nv
bnRleHQuaAorKysgYi9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dC5o
CkBAIC0xMjIsMTYgKzEyMiwxNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgY29uc3QgaW50
IGNNaXNzcGVsbGluZ0xpbmVQYXR0ZXJuR2FwV2lkdGggPSAxOwogCiAgICAgY2xhc3MgQWZmaW5l
VHJhbnNmb3JtOworICAgIGNsYXNzIERyYXdpbmdCdWZmZXI7CiAgICAgY2xhc3MgRm9udDsKICAg
ICBjbGFzcyBHZW5lcmF0b3I7CiAgICAgY2xhc3MgR3JhZGllbnQ7Ci0gICAgY2xhc3MgR3JhcGhp
Y3NDb250ZXh0M0Q7CiAgICAgY2xhc3MgR3JhcGhpY3NDb250ZXh0UGxhdGZvcm1Qcml2YXRlOwog
ICAgIGNsYXNzIEdyYXBoaWNzQ29udGV4dFByaXZhdGU7CiAgICAgY2xhc3MgSW1hZ2VCdWZmZXI7
CiAgICAgY2xhc3MgS1VSTDsKICAgICBjbGFzcyBQYXRoOwogICAgIGNsYXNzIFBhdHRlcm47Cisg
ICAgY2xhc3MgU2hhcmVkQ29udGV4dDNEOwogICAgIGNsYXNzIFRleHRSdW47CiAKICAgICAvLyBU
aGVzZSBiaXRzIGNhbiBiZSBPUmVkIHRvZ2V0aGVyIGZvciBhIHRvdGFsIG9mIDggcG9zc2libGUg
dGV4dCBkcmF3aW5nIG1vZGVzLgpAQCAtNDEyLDcgKzQxMyw3IEBAIG5hbWVzcGFjZSBXZWJDb3Jl
IHsKICAgICAgICAgcGF0dGVybiBnZXRIYWlrdVN0cm9rZVN0eWxlKCk7CiAjZW5kaWYKIAotICAg
ICAgICB2b2lkIHNldEdyYXBoaWNzQ29udGV4dDNEKEdyYXBoaWNzQ29udGV4dDNEKiwgY29uc3Qg
SW50U2l6ZSYpOworICAgICAgICB2b2lkIHNldFNoYXJlZENvbnRleHQzRChTaGFyZWRDb250ZXh0
M0QqLCBEcmF3aW5nQnVmZmVyKiwgY29uc3QgSW50U2l6ZSYpOwogICAgICAgICB2b2lkIHN5bmNT
b2Z0d2FyZUNhbnZhcygpOwogCiAgICAgcHJpdmF0ZToKZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NMYXllci5oIGIvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9HcmFwaGljc0xheWVyLmgKaW5kZXggMGY3NGNkNWNiMzM4NWVlN2JiNWE2ODgwMmI3YWZjMjk3
ODdmZjgwZi4uY2MwZDY2MjVmYzE5OTJkMDJmMzA0NDY3NzczYWZjZGI2Yjc4ZmNhMCAxMDA2NDQK
LS0tIGEvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0xheWVyLmgKKysrIGIvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0xheWVyLmgKQEAgLTgxLDYgKzgxLDcgQEAg
dHlwZWRlZiB1bnNpZ25lZCBMYXllclRyZWVBc1RleHRCZWhhdmlvcjsKIAogbmFtZXNwYWNlIFdl
YkNvcmUgewogCitjbGFzcyBEcmF3aW5nQnVmZmVyOwogY2xhc3MgRmxvYXRQb2ludDNEOwogY2xh
c3MgR3JhcGhpY3NDb250ZXh0OwogY2xhc3MgSW1hZ2U7CkBAIC0yOTgsNyArMjk5LDggQEAgcHVi
bGljOgogICAgIHZpcnR1YWwgdm9pZCBzZXRDb250ZW50c1RvSW1hZ2UoSW1hZ2UqKSB7IH0KICAg
ICB2aXJ0dWFsIHZvaWQgc2V0Q29udGVudHNUb01lZGlhKFBsYXRmb3JtTGF5ZXIqKSB7IH0gLy8g
dmlkZW8gb3IgcGx1Zy1pbgogICAgIHZpcnR1YWwgdm9pZCBzZXRDb250ZW50c0JhY2tncm91bmRD
b2xvcihjb25zdCBDb2xvciYpIHsgfQotICAgIHZpcnR1YWwgdm9pZCBzZXRDb250ZW50c1RvQ2Fu
dmFzKFBsYXRmb3JtTGF5ZXIqKSB7IH0KKyAgICB2aXJ0dWFsIHZvaWQgc2V0Q29udGVudHNUb1dl
YkdMKFBsYXRmb3JtTGF5ZXIqKSB7IH0KKyAgICB2aXJ0dWFsIHZvaWQgc2V0Q29udGVudHNUb0Nh
bnZhczJEKERyYXdpbmdCdWZmZXIqKSB7IH0KICAgICB2aXJ0dWFsIGJvb2wgaGFzQ29udGVudHNM
YXllcigpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CiAKICAgICAvLyBDYWxsYmFjayBmcm9tIHRo
ZSB1bmRlcmx5aW5nIGdyYXBoaWNzIHN5c3RlbSB0byBkcmF3IGxheWVyIGNvbnRlbnRzLgpkaWZm
IC0tZ2l0IGEvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9DYW52YXMyRExheWVy
Q2hyb21pdW0uY3BwIGIvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9DYW52YXMy
RExheWVyQ2hyb21pdW0uY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjBjM2E5NmI4NGRkMGViYjY4NTAzNWVlNzU1
MTlhMmM1YWQ3OTIyZTQKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2Nocm9taXVtL0NhbnZhczJETGF5ZXJDaHJvbWl1bS5jcHAKQEAgLTAsMCArMSwxMDcgQEAK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyAqIG1ldDoKKyAqCisgKiAg
ICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorICogaW4gdGhl
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQor
ICogZGlzdHJpYnV0aW9uLgorICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5j
LiBub3IgdGhlIG5hbWVzIG9mIGl0cworICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVu
ZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyAqIHRoaXMgc29mdHdhcmUg
d2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJV
VE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIE9X
TkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkK
KyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisj
aW5jbHVkZSAiY29uZmlnLmgiCisKKyNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCisK
KyNpbmNsdWRlICJDYW52YXMyRExheWVyQ2hyb21pdW0uaCIKKworI2luY2x1ZGUgIkRyYXdpbmdC
dWZmZXIuaCIKKworI2luY2x1ZGUgPEdMRVMyL2dsMi5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7
CisKK1Bhc3NSZWZQdHI8Q2FudmFzMkRMYXllckNocm9taXVtPiBDYW52YXMyRExheWVyQ2hyb21p
dW06OmNyZWF0ZShEcmF3aW5nQnVmZmVyKiBkcmF3aW5nQnVmZmVyLCBHcmFwaGljc0xheWVyQ2hy
b21pdW0qIG93bmVyKQoreworICAgIHJldHVybiBhZG9wdFJlZihuZXcgQ2FudmFzMkRMYXllckNo
cm9taXVtKGRyYXdpbmdCdWZmZXIsIG93bmVyKSk7Cit9CisKK0NhbnZhczJETGF5ZXJDaHJvbWl1
bTo6Q2FudmFzMkRMYXllckNocm9taXVtKERyYXdpbmdCdWZmZXIqIGRyYXdpbmdCdWZmZXIsIEdy
YXBoaWNzTGF5ZXJDaHJvbWl1bSogb3duZXIpCisgICAgOiBDYW52YXNMYXllckNocm9taXVtKG93
bmVyKQorICAgICwgbV9kcmF3aW5nQnVmZmVyKGRyYXdpbmdCdWZmZXIpCit7Cit9CisKK0NhbnZh
czJETGF5ZXJDaHJvbWl1bTo6fkNhbnZhczJETGF5ZXJDaHJvbWl1bSgpCit7CisgICAgaWYgKG1f
dGV4dHVyZUlkKQorICAgICAgICBnbERlbGV0ZVRleHR1cmVzKDEsICZtX3RleHR1cmVJZCk7Cit9
CisKK3ZvaWQgQ2FudmFzMkRMYXllckNocm9taXVtOjp1cGRhdGVDb250ZW50cygpCit7CisgICAg
aWYgKCFtX2RyYXdpbmdCdWZmZXIpCisgICAgICAgIHJldHVybjsKKyAgICBpZiAobV90ZXh0dXJl
Q2hhbmdlZCkgeyAvLyBXZSBoYXZlIHRvIGdlbmVyYXRlIGEgbmV3IGJhY2tpbmcgdGV4dHVyZS4K
KyAgICAgICAgaWYgKG1fdGV4dHVyZUlkKQorICAgICAgICAgICAgZ2xEZWxldGVUZXh0dXJlcygx
LCAmbV90ZXh0dXJlSWQpOworICAgICAgICBnbEdlblRleHR1cmVzKDEsICZtX3RleHR1cmVJZCk7
CisgICAgICAgIGdsQWN0aXZlVGV4dHVyZShHTF9URVhUVVJFMCk7CisgICAgICAgIGdsQmluZFRl
eHR1cmUoR0xfVEVYVFVSRV8yRCwgbV90ZXh0dXJlSWQpOworICAgICAgICBJbnRTaXplIHNpemUg
PSBtX2RyYXdpbmdCdWZmZXItPnNpemUoKTsKKyAgICAgICAgZ2xUZXhJbWFnZTJEKEdMX1RFWFRV
UkVfMkQsIDAsIEdMX1JHQkEsIHNpemUud2lkdGgoKSwgc2l6ZS5oZWlnaHQoKSwgMCwgR0xfUkdC
QSwgR0xfVU5TSUdORURfQllURSwgMCk7CisgICAgICAgIC8vIFNldCB0aGUgbWluLW1hZyBmaWx0
ZXJzIHRvIGxpbmVhciBhbmQgd3JhcCBtb2RlcyB0byBHTF9DTEFNUF9UT19FREdFCisgICAgICAg
IC8vIHRvIGdldCBhcm91bmQgTlBPVCB0ZXh0dXJlIGxpbWl0YXRpb25zIG9mIEdMRVMuCisgICAg
ICAgIGdsVGV4UGFyYW1ldGVyaShHTF9URVhUVVJFXzJELCBHTF9URVhUVVJFX01JTl9GSUxURVIs
IEdMX0xJTkVBUik7CisgICAgICAgIGdsVGV4UGFyYW1ldGVyaShHTF9URVhUVVJFXzJELCBHTF9U
RVhUVVJFX01BR19GSUxURVIsIEdMX0xJTkVBUik7CisgICAgICAgIGdsVGV4UGFyYW1ldGVyaShH
TF9URVhUVVJFXzJELCBHTF9URVhUVVJFX1dSQVBfUywgR0xfQ0xBTVBfVE9fRURHRSk7CisgICAg
ICAgIGdsVGV4UGFyYW1ldGVyaShHTF9URVhUVVJFXzJELCBHTF9URVhUVVJFX1dSQVBfVCwgR0xf
Q0xBTVBfVE9fRURHRSk7CisgICAgICAgIG1fdGV4dHVyZUNoYW5nZWQgPSBmYWxzZTsKKyAgICAg
ICAgLy8gRklYTUU6IFRoZSBnbEZpbmlzaCgpIGhlcmUgaXMgcmVxdWlyZWQgYmVjYXVzZSB3ZSBo
YXZlIHRvIG1ha2Ugc3VyZSB0aGF0IHRoZSB0ZXh0dXJlIGNyZWF0ZWQgaW4gdGhpcworICAgICAg
ICAvLyBjb250ZXh0ICh0aGUgY29tcG9zaXRvciBjb250ZXh0KSBpcyBhY3R1YWxseSBjcmVhdGVk
IGJ5IHRoZSBzZXJ2aWNlIHNpZGUgYmVmb3JlIHRoZSBjaGlsZCBjb250ZXh0CisgICAgICAgIC8v
IGF0dGVtcHRzIHRvIHVzZSBpdCAoaW4gcHVibGlzaFRvUGxhdGZvcm1MYXllcikuICBnbEZpbmlz
aCgpIGlzIGN1cnJlbnRseSB0aGUgb25seSBjYWxsIHdpdGggc3Ryb25nCisgICAgICAgIC8vIGVu
b3VnaCBzZW1hbnRpY3MgdG8gcHJvbWlzZSB0aGlzLCBidXQgaXMgYWN0dWFsbHkgbXVjaCBzdHJv
bmdlci4gIElkZWFsbHkgd2UnZCBkbyBzb21ldGhpbmcgbGlrZQorICAgICAgICAvLyBpbnNlcnRp
bmcgYSBmZW5jZSBoZXJlIGFuZCB3YWl0aW5nIGZvciBpdCBiZWZvcmUgdHJ5aW5nIHRvIHB1Ymxp
c2guCisgICAgICAgIGdsRmluaXNoKCk7CisgICAgfQorICAgIC8vIFVwZGF0ZSB0aGUgY29udGVu
dHMgb2YgdGhlIHRleHR1cmUgdXNlZCBieSB0aGUgY29tcG9zaXRvci4KKyAgICBpZiAobV9jb250
ZW50c0RpcnR5KSB7CisgICAgICAgIG1fZHJhd2luZ0J1ZmZlci0+cHVibGlzaFRvUGxhdGZvcm1M
YXllcih0aGlzKTsKKyAgICAgICAgbV9jb250ZW50c0RpcnR5ID0gZmFsc2U7CisgICAgfQorfQor
Cit2b2lkIENhbnZhczJETGF5ZXJDaHJvbWl1bTo6c2V0RHJhd2luZ0J1ZmZlcihEcmF3aW5nQnVm
ZmVyKiBkcmF3aW5nQnVmZmVyKQoreworICAgIGlmIChkcmF3aW5nQnVmZmVyICE9IG1fZHJhd2lu
Z0J1ZmZlci5nZXQoKSkgeworICAgICAgICBtX2RyYXdpbmdCdWZmZXIgPSBkcmF3aW5nQnVmZmVy
OworICAgICAgICBtX3RleHR1cmVDaGFuZ2VkID0gdHJ1ZTsKKyAgICB9Cit9CisKK3Vuc2lnbmVk
IENhbnZhczJETGF5ZXJDaHJvbWl1bTo6dGV4dHVyZUlkKCkgY29uc3QKK3sKKyAgICByZXR1cm4g
bV90ZXh0dXJlSWQ7Cit9CisKK30KKyNlbmRpZiAvLyBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJ
TkcpCmRpZmYgLS1naXQgYS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0NhbnZh
czJETGF5ZXJDaHJvbWl1bS5oIGIvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9D
YW52YXMyRExheWVyQ2hyb21pdW0uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4wMzExM2Q2NTJhNWEyMmYwOTNjOGE5
ZTlmNWYyNTdlZmVjMjYyZmM1Ci0tLSAvZGV2L251bGwKKysrIGIvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jaHJvbWl1bS9DYW52YXMyRExheWVyQ2hyb21pdW0uaApAQCAtMCwwICsxLDY0IEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDEwIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisgKiBtZXQ6CisgKgorICog
ICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyAqIGluIHRo
ZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUK
KyAqIGRpc3RyaWJ1dGlvbi4KKyAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIElu
Yy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBl
bmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisgKiB0aGlzIHNvZnR3YXJl
IHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklC
VVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBP
V05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
CisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKwor
CisjaWZuZGVmIENhbnZhczJETGF5ZXJDaHJvbWl1bV9oCisjZGVmaW5lIENhbnZhczJETGF5ZXJD
aHJvbWl1bV9oCisKKyNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCisKKyNpbmNsdWRl
ICJDYW52YXNMYXllckNocm9taXVtLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3Mg
RHJhd2luZ0J1ZmZlcjsKKworLy8gQSBsYXllciBjb250YWluaW5nIGFuIGFjY2VsZXJhdGVkIDJk
IGNhbnZhcworY2xhc3MgQ2FudmFzMkRMYXllckNocm9taXVtIDogcHVibGljIENhbnZhc0xheWVy
Q2hyb21pdW0geworcHVibGljOgorICAgIHN0YXRpYyBQYXNzUmVmUHRyPENhbnZhczJETGF5ZXJD
aHJvbWl1bT4gY3JlYXRlKERyYXdpbmdCdWZmZXIqLCBHcmFwaGljc0xheWVyQ2hyb21pdW0qIG93
bmVyKTsKKyAgICB2aXJ0dWFsIH5DYW52YXMyRExheWVyQ2hyb21pdW0oKTsKKyAgICB2aXJ0dWFs
IGJvb2wgZHJhd3NDb250ZW50KCkgeyByZXR1cm4gdHJ1ZTsgfQorICAgIHZpcnR1YWwgdm9pZCB1
cGRhdGVDb250ZW50cygpOworCisgICAgdm9pZCBzZXREcmF3aW5nQnVmZmVyKERyYXdpbmdCdWZm
ZXIqKTsKKyAgICB1bnNpZ25lZCB0ZXh0dXJlSWQoKSBjb25zdDsKKworcHJpdmF0ZToKKyAgICBl
eHBsaWNpdCBDYW52YXMyRExheWVyQ2hyb21pdW0oRHJhd2luZ0J1ZmZlciosIEdyYXBoaWNzTGF5
ZXJDaHJvbWl1bSogb3duZXIpOworICAgIFJlZlB0cjxEcmF3aW5nQnVmZmVyPiBtX2RyYXdpbmdC
dWZmZXI7CisKKyAgICBzdGF0aWMgdW5zaWduZWQgbV9zaGFkZXJQcm9ncmFtSWQ7Cit9OworCit9
CisjZW5kaWYgLy8gVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQorCisjZW5kaWYKZGlmZiAt
LWdpdCBhL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vQ2FudmFzTGF5ZXJDaHJv
bWl1bS5jcHAgYi9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0NhbnZhc0xheWVy
Q2hyb21pdW0uY3BwCmluZGV4IGJiZjA5MWMyYTY3MGQ3YzM2ZTkyMzhlMWI4Y2MzNTBiYTM4M2U4
MTAuLjU2YTcyNjIyMWU1YjA2ZTk1NmU3NjVlMGEzNWQxYzdhZjk1M2YyNDEgMTAwNjQ0Ci0tLSBh
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vQ2FudmFzTGF5ZXJDaHJvbWl1bS5j
cHAKKysrIGIvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9DYW52YXNMYXllckNo
cm9taXVtLmNwcApAQCAtMzQsMTIgKzM0LDE0IEBACiAKICNpbmNsdWRlICJDYW52YXNMYXllckNo
cm9taXVtLmgiCiAKLSNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQzRC5oIgogI2luY2x1ZGUgIkxh
eWVyUmVuZGVyZXJDaHJvbWl1bS5oIgorCiAjaW5jbHVkZSA8R0xFUzIvZ2wyLmg+CiAKIG5hbWVz
cGFjZSBXZWJDb3JlIHsKIAordW5zaWduZWQgQ2FudmFzTGF5ZXJDaHJvbWl1bTo6bV9zaGFkZXJQ
cm9ncmFtSWQgPSAwOworCiBDYW52YXNMYXllckNocm9taXVtOjpTaGFyZWRWYWx1ZXM6OlNoYXJl
ZFZhbHVlcygpCiAgICAgOiBtX2NhbnZhc1NoYWRlclByb2dyYW0oMCkKICAgICAsIG1fc2hhZGVy
U2FtcGxlckxvY2F0aW9uKC0xKQpAQCAtOTMsNDkgKzk1LDE1IEBAIENhbnZhc0xheWVyQ2hyb21p
dW06OlNoYXJlZFZhbHVlczo6flNoYXJlZFZhbHVlcygpCiAgICAgICAgIEdMQyhnbERlbGV0ZVBy
b2dyYW0obV9jYW52YXNTaGFkZXJQcm9ncmFtKSk7CiB9CiAKLVBhc3NSZWZQdHI8Q2FudmFzTGF5
ZXJDaHJvbWl1bT4gQ2FudmFzTGF5ZXJDaHJvbWl1bTo6Y3JlYXRlKEdyYXBoaWNzTGF5ZXJDaHJv
bWl1bSogb3duZXIpCi17Ci0gICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBDYW52YXNMYXllckNocm9t
aXVtKG93bmVyKSk7Ci19Ci0KIENhbnZhc0xheWVyQ2hyb21pdW06OkNhbnZhc0xheWVyQ2hyb21p
dW0oR3JhcGhpY3NMYXllckNocm9taXVtKiBvd25lcikKICAgICA6IExheWVyQ2hyb21pdW0ob3du
ZXIpCi0gICAgLCBtX2NvbnRleHQoMCkKKyAgICAsIG1fdGV4dHVyZUNoYW5nZWQodHJ1ZSkKICAg
ICAsIG1fdGV4dHVyZUlkKDApCi0gICAgLCBtX3RleHR1cmVDaGFuZ2VkKGZhbHNlKQotewotfQot
Ci12b2lkIENhbnZhc0xheWVyQ2hyb21pdW06OnVwZGF0ZUNvbnRlbnRzKCkKIHsKLSAgICBBU1NF
UlQobV9jb250ZXh0KTsKLSAgICBpZiAobV90ZXh0dXJlQ2hhbmdlZCkgewotICAgICAgICBnbEJp
bmRUZXh0dXJlKEdMX1RFWFRVUkVfMkQsIG1fdGV4dHVyZUlkKTsKLSAgICAgICAgLy8gU2V0IHRo
ZSBtaW4tbWFnIGZpbHRlcnMgdG8gbGluZWFyIGFuZCB3cmFwIG1vZGVzIHRvIEdMX0NMQU1QX1RP
X0VER0UKLSAgICAgICAgLy8gdG8gZ2V0IGFyb3VuZCBOUE9UIHRleHR1cmUgbGltaXRhdGlvbnMg
b2YgR0xFUy4KLSAgICAgICAgZ2xUZXhQYXJhbWV0ZXJmKEdMX1RFWFRVUkVfMkQsIEdMX1RFWFRV
UkVfTUlOX0ZJTFRFUiwgR0xfTElORUFSKTsKLSAgICAgICAgZ2xUZXhQYXJhbWV0ZXJmKEdMX1RF
WFRVUkVfMkQsIEdMX1RFWFRVUkVfTUFHX0ZJTFRFUiwgR0xfTElORUFSKTsKLSAgICAgICAgZ2xU
ZXhQYXJhbWV0ZXJmKEdMX1RFWFRVUkVfMkQsIEdMX1RFWFRVUkVfV1JBUF9TLCBHTF9DTEFNUF9U
T19FREdFKTsKLSAgICAgICAgZ2xUZXhQYXJhbWV0ZXJmKEdMX1RFWFRVUkVfMkQsIEdMX1RFWFRV
UkVfV1JBUF9ULCBHTF9DTEFNUF9UT19FREdFKTsKLSAgICAgICAgbV90ZXh0dXJlQ2hhbmdlZCA9
IGZhbHNlOwotICAgIH0KLSAgICAvLyBVcGRhdGUgdGhlIGNvbnRlbnRzIG9mIHRoZSB0ZXh0dXJl
IHVzZWQgYnkgdGhlIGNvbXBvc2l0b3IuCi0gICAgaWYgKG1fY29udGVudHNEaXJ0eSkgewotICAg
ICAgICBpZiAobV9wcmVwYXJlVGV4dHVyZUNhbGxiYWNrKQotICAgICAgICAgICAgbV9wcmVwYXJl
VGV4dHVyZUNhbGxiYWNrLT53aWxsUHJlcGFyZVRleHR1cmUoKTsKLSAgICAgICAgbV9jb250ZXh0
LT5wcmVwYXJlVGV4dHVyZSgpOwotICAgICAgICBtX2NvbnRlbnRzRGlydHkgPSBmYWxzZTsKLSAg
ICB9CiB9CiAKLXZvaWQgQ2FudmFzTGF5ZXJDaHJvbWl1bTo6c2V0Q29udGV4dChjb25zdCBHcmFw
aGljc0NvbnRleHQzRCogY29udGV4dCkKK0NhbnZhc0xheWVyQ2hyb21pdW06On5DYW52YXNMYXll
ckNocm9taXVtKCkKIHsKLSAgICBtX2NvbnRleHQgPSBjb25zdF9jYXN0PEdyYXBoaWNzQ29udGV4
dDNEKj4oY29udGV4dCk7Ci0KLSAgICB1bnNpZ25lZCBpbnQgdGV4dHVyZUlkID0gbV9jb250ZXh0
LT5wbGF0Zm9ybVRleHR1cmUoKTsKLSAgICBpZiAodGV4dHVyZUlkICE9IG1fdGV4dHVyZUlkKQot
ICAgICAgICBtX3RleHR1cmVDaGFuZ2VkID0gdHJ1ZTsKLSAgICBtX3RleHR1cmVJZCA9IHRleHR1
cmVJZDsKIH0KIAogdm9pZCBDYW52YXNMYXllckNocm9taXVtOjpkcmF3KCkKQEAgLTE1MCw2ICsx
MTgsNyBAQCB2b2lkIENhbnZhc0xheWVyQ2hyb21pdW06OmRyYXcoKQogICAgIGRyYXdUZXh0dXJl
ZFF1YWQobGF5ZXJSZW5kZXJlcigpLT5wcm9qZWN0aW9uTWF0cml4KCksIGRyYXdUcmFuc2Zvcm0o
KSwKICAgICAgICAgICAgICAgICAgICAgIGJvdW5kcygpLndpZHRoKCksIGJvdW5kcygpLmhlaWdo
dCgpLCBkcmF3T3BhY2l0eSgpLAogICAgICAgICAgICAgICAgICAgICAgc3YtPnNoYWRlck1hdHJp
eExvY2F0aW9uKCksIHN2LT5zaGFkZXJBbHBoYUxvY2F0aW9uKCkpOworCiB9CiAKIH0KZGlmZiAt
LWdpdCBhL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vQ2FudmFzTGF5ZXJDaHJv
bWl1bS5oIGIvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9DYW52YXNMYXllckNo
cm9taXVtLmgKaW5kZXggMDUzZWZmZmEwMWUxNDI4MzgxMjE0NTNjMWE0YjhhMTk0YjZmYTRjMS4u
ZDU5MWM3Mzc1OTkwNGY4ZDI5MWQ3MTcwY2NjM2FhMGU2ZTMzMWYxYiAxMDA2NDQKLS0tIGEvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9DYW52YXNMYXllckNocm9taXVtLmgKKysr
IGIvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9DYW52YXNMYXllckNocm9taXVt
LmgKQEAgLTM4LDE3ICszOCwxMiBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLWNsYXNzIEdy
YXBoaWNzQ29udGV4dDNEOwotCi0vLyBBIExheWVyIGNvbnRhaW5pbmcgYSBXZWJHTCBvciBhY2Nl
bGVyYXRlZCAyZCBjYW52YXMKKy8vIEJhc2UgY2xhc3MgZm9yIFdlYkdMIGFuZCBhY2NlbGVyYXRl
ZCAyZCBjYW52YXNlcy4KIGNsYXNzIENhbnZhc0xheWVyQ2hyb21pdW0gOiBwdWJsaWMgTGF5ZXJD
aHJvbWl1bSB7CiBwdWJsaWM6Ci0gICAgc3RhdGljIFBhc3NSZWZQdHI8Q2FudmFzTGF5ZXJDaHJv
bWl1bT4gY3JlYXRlKEdyYXBoaWNzTGF5ZXJDaHJvbWl1bSogb3duZXIgPSAwKTsKLSAgICB2aXJ0
dWFsIGJvb2wgZHJhd3NDb250ZW50KCkgeyByZXR1cm4gbV9jb250ZXh0OyB9Ci0gICAgdmlydHVh
bCB2b2lkIHVwZGF0ZUNvbnRlbnRzKCk7Ci0gICAgdmlydHVhbCB2b2lkIGRyYXcoKTsKKyAgICB2
aXJ0dWFsIH5DYW52YXNMYXllckNocm9taXVtKCk7CiAKLSAgICB2b2lkIHNldENvbnRleHQoY29u
c3QgR3JhcGhpY3NDb250ZXh0M0QqIGNvbnRleHQpOworICAgIHZpcnR1YWwgdm9pZCBkcmF3KCk7
CiAKICAgICBjbGFzcyBTaGFyZWRWYWx1ZXMgewogICAgIHB1YmxpYzoKQEAgLTY5LDIxICs2NCwx
NiBAQCBwdWJsaWM6CiAgICAgICAgIGJvb2wgbV9pbml0aWFsaXplZDsKICAgICB9OwogCi0gICAg
Y2xhc3MgUHJlcGFyZVRleHR1cmVDYWxsYmFjayA6IHB1YmxpYyBOb25jb3B5YWJsZSB7Ci0gICAg
cHVibGljOgotICAgICAgICB2aXJ0dWFsIHZvaWQgd2lsbFByZXBhcmVUZXh0dXJlKCkgPSAwOwot
ICAgIH07Ci0gICAgdm9pZCBzZXRQcmVwYXJlVGV4dHVyZUNhbGxiYWNrKFBhc3NPd25QdHI8UHJl
cGFyZVRleHR1cmVDYWxsYmFjaz4gY2FsbGJhY2spIHsgbV9wcmVwYXJlVGV4dHVyZUNhbGxiYWNr
ID0gY2FsbGJhY2s7IH0KLQotcHJpdmF0ZToKK3Byb3RlY3RlZDoKICAgICBleHBsaWNpdCBDYW52
YXNMYXllckNocm9taXVtKEdyYXBoaWNzTGF5ZXJDaHJvbWl1bSogb3duZXIpOwotICAgIEdyYXBo
aWNzQ29udGV4dDNEKiBtX2NvbnRleHQ7Ci0gICAgdW5zaWduZWQgbV90ZXh0dXJlSWQ7CiAgICAg
Ym9vbCBtX3RleHR1cmVDaGFuZ2VkOwotICAgIE93blB0cjxQcmVwYXJlVGV4dHVyZUNhbGxiYWNr
PiBtX3ByZXBhcmVUZXh0dXJlQ2FsbGJhY2s7CisgICAgdW5zaWduZWQgbV90ZXh0dXJlSWQ7CisK
K3ByaXZhdGU6CisgICAgc3RhdGljIHVuc2lnbmVkIG1fc2hhZGVyUHJvZ3JhbUlkOwogfTsKIAog
fQogI2VuZGlmIC8vIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKIAotI2VuZGlmCisjZW5k
aWYgLy8gQ2FudmFzTGF5ZXJDaHJvbWl1bV9oCmRpZmYgLS1naXQgYS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2Nocm9taXVtL0RyYXdpbmdCdWZmZXJDaHJvbWl1bS5jcHAgYi9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0RyYXdpbmdCdWZmZXJDaHJvbWl1bS5jcHAKbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMC4uNWYwMjBiNWIyMTNlNGQzZDY3ODk5OGI2M2JlNmQ2OGFlYzVmZGMxOQotLS0gL2Rldi9u
dWxsCisrKyBiL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vRHJhd2luZ0J1ZmZl
ckNocm9taXVtLmNwcApAQCAtMCwwICsxLDk5IEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDEw
LCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zIGFyZQorICogbWV0OgorICoKKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAg
ICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlCisgKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyCisgKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiBkaXN0cmlidXRpb24uCisgKiAgICAg
KiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisg
KiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3Rz
IGRlcml2ZWQgZnJvbQorICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdy
aXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRI
RSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkg
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElN
SVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8g
RVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBF
WEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisg
KiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKworI2lu
Y2x1ZGUgIkRyYXdpbmdCdWZmZXIuaCIKKworI2luY2x1ZGUgIkNhbnZhczJETGF5ZXJDaHJvbWl1
bS5oIgorI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dDNELmgiCisjaW5jbHVkZSAiU2hhcmVkQ29u
dGV4dDNELmgiCisKKyNpbmNsdWRlIDxHTEVTMi9nbDIuaD4KKyNpZm5kZWYgR0xfR0xFWFRfUFJP
VE9UWVBFUworI2RlZmluZSBHTF9HTEVYVF9QUk9UT1RZUEVTIDEKKyNlbmRpZgorI2luY2x1ZGUg
PEdMRVMyL2dsMmV4dC5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK3N0cnVjdCBEcmF3aW5n
QnVmZmVySW50ZXJuYWwgeworICAgIHVuc2lnbmVkIG9mZnNjcmVlbkNvbG9yVGV4dHVyZTsKK307
CisKK0RyYXdpbmdCdWZmZXI6OkRyYXdpbmdCdWZmZXIoU2hhcmVkQ29udGV4dDNEKiBjb250ZXh0
LCBjb25zdCBJbnRTaXplJiBzaXplLCB1bnNpZ25lZCBmcmFtZWJ1ZmZlcikKKyAgICA6IG1fY29u
dGV4dChjb250ZXh0KQorICAgICwgbV9zaXplKHNpemUpCisgICAgLCBtX2ZyYW1lYnVmZmVyKGZy
YW1lYnVmZmVyKQorICAgICwgbV9pbnRlcm5hbChuZXcgRHJhd2luZ0J1ZmZlckludGVybmFsKQor
eworICAgIGNvbnRleHQtPmJpbmRGcmFtZWJ1ZmZlcihmcmFtZWJ1ZmZlcik7CisKKyAgICAvLyBD
b2xvciB0ZXh0dXJlCisgICAgdW5zaWduZWQgb2Zmc2NyZWVuQ29sb3JUZXh0dXJlID0gY29udGV4
dC0+Y3JlYXRlVGV4dHVyZSgpOworICAgIEFTU0VSVChvZmZzY3JlZW5Db2xvclRleHR1cmUpOwor
ICAgIGlmICghb2Zmc2NyZWVuQ29sb3JUZXh0dXJlKSB7CisgICAgICAgIGNvbnRleHQtPmRlbGV0
ZUZyYW1lYnVmZmVyKGZyYW1lYnVmZmVyKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBj
b250ZXh0LT5iaW5kVGV4dHVyZShHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV8yRCwgb2Zmc2Ny
ZWVuQ29sb3JUZXh0dXJlKTsKKyAgICBjb250ZXh0LT50ZXhQYXJhbWV0ZXJpKEdyYXBoaWNzQ29u
dGV4dDNEOjpURVhUVVJFXzJELCBHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV9NQUdfRklMVEVS
LCBHcmFwaGljc0NvbnRleHQzRDo6TkVBUkVTVCk7CisgICAgY29udGV4dC0+dGV4UGFyYW1ldGVy
aShHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV8yRCwgR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRV
UkVfTUlOX0ZJTFRFUiwgR3JhcGhpY3NDb250ZXh0M0Q6Ok5FQVJFU1QpOworICAgIGNvbnRleHQt
PnRleFBhcmFtZXRlcmkoR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQsIEdyYXBoaWNzQ29u
dGV4dDNEOjpURVhUVVJFX1dSQVBfUywgR3JhcGhpY3NDb250ZXh0M0Q6OkNMQU1QX1RPX0VER0Up
OworICAgIGNvbnRleHQtPnRleFBhcmFtZXRlcmkoR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVf
MkQsIEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFX1dSQVBfVCwgR3JhcGhpY3NDb250ZXh0M0Q6
OkNMQU1QX1RPX0VER0UpOworICAgIGNvbnRleHQtPnRleEltYWdlMkQoR3JhcGhpY3NDb250ZXh0
M0Q6OlRFWFRVUkVfMkQsIDAsIEdyYXBoaWNzQ29udGV4dDNEOjpSR0JBLCBzaXplLndpZHRoKCks
IHNpemUuaGVpZ2h0KCksIDAsIEdyYXBoaWNzQ29udGV4dDNEOjpSR0JBLCBHcmFwaGljc0NvbnRl
eHQzRDo6VU5TSUdORURfQllURSwgMCk7CisKKyAgICBjb250ZXh0LT5mcmFtZWJ1ZmZlclRleHR1
cmUyRChHcmFwaGljc0NvbnRleHQzRDo6RlJBTUVCVUZGRVIsIEdyYXBoaWNzQ29udGV4dDNEOjpD
T0xPUl9BVFRBQ0hNRU5UMCwgR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQsIG9mZnNjcmVl
bkNvbG9yVGV4dHVyZSwgMCk7CisKKyAgICBtX2ludGVybmFsLT5vZmZzY3JlZW5Db2xvclRleHR1
cmUgPSBvZmZzY3JlZW5Db2xvclRleHR1cmU7Cit9CisKK0RyYXdpbmdCdWZmZXI6On5EcmF3aW5n
QnVmZmVyKCkKK3sKKyAgICBtX2NvbnRleHQtPmRlbGV0ZUZyYW1lYnVmZmVyKG1fZnJhbWVidWZm
ZXIpOworfQorCit2b2lkIERyYXdpbmdCdWZmZXI6OnB1Ymxpc2hUb1BsYXRmb3JtTGF5ZXIoUGxh
dGZvcm1MYXllciogcGwpCit7CisgICAgaWYgKG1fY2FsbGJhY2spCisgICAgICAgIG1fY2FsbGJh
Y2stPndpbGxQdWJsaXNoKCk7CisgICAgQ2FudmFzMkRMYXllckNocm9taXVtKiBjYW52YXMyRExh
eWVyID0gc3RhdGljX2Nhc3Q8Q2FudmFzMkRMYXllckNocm9taXVtKj4ocGwpOworICAgIHVuc2ln
bmVkIHBhcmVudFRleHR1cmUgPSBjYW52YXMyRExheWVyLT50ZXh0dXJlSWQoKTsKKyAgICAvLyBG
SVhNRTogV2UgZG8gdGhlIGNvcHkgaW4gdGhlIGNhbnZhcycgKGNoaWxkKSBjb250ZXh0IHNvIHRo
YXQgaXQgZXhlY3V0ZXMgaW4gdGhlIGNvcnJlY3Qgb3JkZXIgcmVsYXRpdmUgdG8KKyAgICAvLyBv
dGhlciBjb21tYW5kcyBpbiB0aGUgY2hpbGQgY29udGV4dC4gIFRoaXMgZW5zdXJlcyB0aGF0IHRo
ZSBwYXJlbnQgdGV4dHVyZSBhbHdheXMgY29udGFpbnMgYSBjb21wbGV0ZQorICAgIC8vIGZyYW1l
IGFuZCBub3Qgc29tZSBpbnRlcm1lZGlhdGUgcmVzdWx0LiAgSG93ZXZlciwgdGhlcmUgaXMgbm8g
c3luY2hyb25pemF0aW9uIHRvIGVuc3VyZSB0aGF0IHRoaXMgY29weQorICAgIC8vIGhhcHBlbnMg
YmVmb3JlIHRoZSBjb21wb3NpdG9yIGRyYXdzLiAgVGhpcyBtZWFucyB3ZSBtaWdodCBkcmF3IHN0
YWxlIGZyYW1lcyBzb21ldGltZXMuICBJZGVhbGx5IHRoaXMKKyAgICAvLyB3b3VsZCBpbnNlcnQg
YSBmZW5jZSBpbnRvIHRoZSBjaGlsZCBjb21tYW5kIHN0cmVhbSB0aGF0IHRoZSBjb21wb3NpdG9y
IGNvdWxkIHdhaXQgZm9yLgorICAgIG1fY29udGV4dC0+bWFrZUNvbnRleHRDdXJyZW50KCk7Cisg
ICAgZ2xDb3B5VGV4dHVyZVRvUGFyZW50VGV4dHVyZShtX2ludGVybmFsLT5vZmZzY3JlZW5Db2xv
clRleHR1cmUsIHBhcmVudFRleHR1cmUpOworICAgIGdsRmx1c2goKTsKK30KKworfQpkaWZmIC0t
Z2l0IGEvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9HTEVTMkNhbnZhcy5jcHAg
Yi9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0dMRVMyQ2FudmFzLmNwcAppbmRl
eCA4MmQ0YzBiMDMzYTE0ZjkxZTU2NmY3YjRlZWEwOGIwNjY5MmViYmQzLi4yODY5NTIwMTA3NmI4
YzQxNDMxOTZkNWViODU0ZmFlZDUzYzUwMTI3IDEwMDY0NAotLS0gYS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2Nocm9taXVtL0dMRVMyQ2FudmFzLmNwcAorKysgYi9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2Nocm9taXVtL0dMRVMyQ2FudmFzLmNwcApAQCAtMzIsMTAgKzMyLDEyIEBACiAK
ICNpbmNsdWRlICJHTEVTMkNhbnZhcy5oIgogCisjaW5jbHVkZSAiRHJhd2luZ0J1ZmZlci5oIgog
I2luY2x1ZGUgIkZsb2F0UmVjdC5oIgogI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dDNELmgiCiAj
aW5jbHVkZSAiSW50UmVjdC5oIgogI2luY2x1ZGUgIlBsYXRmb3JtU3RyaW5nLmgiCisjaW5jbHVk
ZSAiU2hhcmVkQ29udGV4dDNELmgiCiAjaW5jbHVkZSAiU29saWRGaWxsU2hhZGVyLmgiCiAjaW5j
bHVkZSAiVGV4U2hhZGVyLmgiCiAjaW5jbHVkZSAiVGV4dHVyZS5oIgpAQCAtNjEsMzcgKzYzLDM1
IEBAIHN0cnVjdCBHTEVTMkNhbnZhczo6U3RhdGUgewogICAgIEFmZmluZVRyYW5zZm9ybSBtX2N0
bTsKIH07CiAKLUdMRVMyQ2FudmFzOjpHTEVTMkNhbnZhcyhHcmFwaGljc0NvbnRleHQzRCogY29u
dGV4dCwgY29uc3QgSW50U2l6ZSYgc2l6ZSkKLSAgICA6IG1fY29udGV4dChjb250ZXh0KQorR0xF
UzJDYW52YXM6OkdMRVMyQ2FudmFzKFNoYXJlZENvbnRleHQzRCogY29udGV4dCwgRHJhd2luZ0J1
ZmZlciogZHJhd2luZ0J1ZmZlciwgY29uc3QgSW50U2l6ZSYgc2l6ZSkKKyAgICA6IG1fc2l6ZShz
aXplKQorICAgICwgbV9jb250ZXh0KGNvbnRleHQpCisgICAgLCBtX2RyYXdpbmdCdWZmZXIoZHJh
d2luZ0J1ZmZlcikKICAgICAsIG1fc3RhdGUoMCkKLSAgICAsIG1fcXVhZFZlcnRpY2VzKDApCi0g
ICAgLCBtX3NvbGlkRmlsbFNoYWRlcihTb2xpZEZpbGxTaGFkZXI6OmNyZWF0ZShjb250ZXh0KSkK
LSAgICAsIG1fdGV4U2hhZGVyKFRleFNoYWRlcjo6Y3JlYXRlKGNvbnRleHQpKQogewogICAgIG1f
ZmxpcE1hdHJpeC50cmFuc2xhdGUoLTEuMGYsIDEuMGYpOwogICAgIG1fZmxpcE1hdHJpeC5zY2Fs
ZSgyLjBmIC8gc2l6ZS53aWR0aCgpLCAtMi4wZiAvIHNpemUuaGVpZ2h0KCkpOwogCi0gICAgbV9j
b250ZXh0LT5yZXNoYXBlKHNpemUud2lkdGgoKSwgc2l6ZS5oZWlnaHQoKSk7Ci0gICAgbV9jb250
ZXh0LT52aWV3cG9ydCgwLCAwLCBzaXplLndpZHRoKCksIHNpemUuaGVpZ2h0KCkpOwotCiAgICAg
bV9zdGF0ZVN0YWNrLmFwcGVuZChTdGF0ZSgpKTsKICAgICBtX3N0YXRlID0gJm1fc3RhdGVTdGFj
ay5sYXN0KCk7Ci0KLSAgICAvLyBGb3JjZSB0aGUgc291cmNlIG92ZXIgY29tcG9zaXRlIG1vZGUg
dG8gYmUgYXBwbGllZC4KLSAgICBtX2xhc3RDb21wb3NpdGVPcCA9IENvbXBvc2l0ZUNsZWFyOwot
ICAgIGFwcGx5Q29tcG9zaXRlT3BlcmF0b3IoQ29tcG9zaXRlU291cmNlT3Zlcik7CiB9CiAKIEdM
RVMyQ2FudmFzOjp+R0xFUzJDYW52YXMoKQogewotICAgIG1fY29udGV4dC0+ZGVsZXRlQnVmZmVy
KG1fcXVhZFZlcnRpY2VzKTsKK30KKwordm9pZCBHTEVTMkNhbnZhczo6YmluZEZyYW1lYnVmZmVy
KCkKK3sKKyAgICBtX2RyYXdpbmdCdWZmZXItPmJpbmQoKTsKIH0KIAogdm9pZCBHTEVTMkNhbnZh
czo6Y2xlYXJSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKIHsKKyAgICBiaW5kRnJhbWVidWZm
ZXIoKTsKICAgICBpZiAobV9zdGF0ZS0+bV9jdG0uaXNJZGVudGl0eSgpKSB7Ci0gICAgICAgIG1f
Y29udGV4dC0+c2Npc3NvcihyZWN0LngoKSwgcmVjdC55KCksIHJlY3Qud2lkdGgoKSwgcmVjdC5o
ZWlnaHQoKSk7CisgICAgICAgIG1fY29udGV4dC0+c2Npc3NvcihyZWN0KTsKICAgICAgICAgbV9j
b250ZXh0LT5lbmFibGUoR3JhcGhpY3NDb250ZXh0M0Q6OlNDSVNTT1JfVEVTVCk7CisgICAgICAg
IG1fY29udGV4dC0+Y2xlYXJDb2xvcihDb2xvcihSR0JBMzIoMCkpKTsKICAgICAgICAgbV9jb250
ZXh0LT5jbGVhcihHcmFwaGljc0NvbnRleHQzRDo6Q09MT1JfQlVGRkVSX0JJVCk7CiAgICAgICAg
IG1fY29udGV4dC0+ZGlzYWJsZShHcmFwaGljc0NvbnRleHQzRDo6U0NJU1NPUl9URVNUKTsKICAg
ICB9IGVsc2UgewpAQCAtMTA0LDE2ICsxMDQsMTcgQEAgdm9pZCBHTEVTMkNhbnZhczo6Y2xlYXJS
ZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKIAogdm9pZCBHTEVTMkNhbnZhczo6ZmlsbFJlY3Qo
Y29uc3QgRmxvYXRSZWN0JiByZWN0LCBjb25zdCBDb2xvciYgY29sb3IsIENvbG9yU3BhY2UgY29s
b3JTcGFjZSkKIHsKLSAgICBhcHBseUNvbXBvc2l0ZU9wZXJhdG9yKG1fc3RhdGUtPm1fY29tcG9z
aXRlT3ApOwotCi0gICAgbV9jb250ZXh0LT5iaW5kQnVmZmVyKEdyYXBoaWNzQ29udGV4dDNEOjpB
UlJBWV9CVUZGRVIsIGdldFF1YWRWZXJ0aWNlcygpKTsKKyAgICBtX2NvbnRleHQtPmFwcGx5Q29t
cG9zaXRlT3BlcmF0b3IobV9zdGF0ZS0+bV9jb21wb3NpdGVPcCk7CisgICAgbV9jb250ZXh0LT51
c2VRdWFkVmVydGljZXMoKTsKIAogICAgIEFmZmluZVRyYW5zZm9ybSBtYXRyaXgobV9mbGlwTWF0
cml4KTsKICAgICBtYXRyaXgubXVsdExlZnQobV9zdGF0ZS0+bV9jdG0pOwogICAgIG1hdHJpeC50
cmFuc2xhdGUocmVjdC54KCksIHJlY3QueSgpKTsKICAgICBtYXRyaXguc2NhbGUocmVjdC53aWR0
aCgpLCByZWN0LmhlaWdodCgpKTsKLSAgICBtX3NvbGlkRmlsbFNoYWRlci0+dXNlKG1hdHJpeCwg
Y29sb3IpOwogCisgICAgbV9jb250ZXh0LT51c2VGaWxsU29saWRQcm9ncmFtKG1hdHJpeCwgY29s
b3IpOworCisgICAgYmluZEZyYW1lYnVmZmVyKCk7CiAgICAgbV9jb250ZXh0LT5kcmF3QXJyYXlz
KEdyYXBoaWNzQ29udGV4dDNEOjpUUklBTkdMRV9TVFJJUCwgMCwgNCk7CiB9CiAKQEAgLTE2NSwy
MSArMTY2LDMzIEBAIHZvaWQgR0xFUzJDYW52YXM6OnJlc3RvcmUoKQogICAgIG1fc3RhdGUgPSAm
bV9zdGF0ZVN0YWNrLmxhc3QoKTsKIH0KIAordm9pZCBHTEVTMkNhbnZhczo6ZHJhd1RleHR1cmVk
UmVjdCh1bnNpZ25lZCB0ZXh0dXJlLCBjb25zdCBJbnRTaXplJiB0ZXh0dXJlU2l6ZSwgY29uc3Qg
RmxvYXRSZWN0JiBzcmNSZWN0LCBjb25zdCBGbG9hdFJlY3QmIGRzdFJlY3QsIENvbG9yU3BhY2Ug
Y29sb3JTcGFjZSwgQ29tcG9zaXRlT3BlcmF0b3IgY29tcG9zaXRlT3ApCit7CisgICAgbV9jb250
ZXh0LT5hcHBseUNvbXBvc2l0ZU9wZXJhdG9yKGNvbXBvc2l0ZU9wKTsKKworICAgIG1fY29udGV4
dC0+dXNlUXVhZFZlcnRpY2VzKCk7CisgICAgbV9jb250ZXh0LT5zZXRBY3RpdmVUZXh0dXJlKEdy
YXBoaWNzQ29udGV4dDNEOjpURVhUVVJFMCk7CisKKyAgICBtX2NvbnRleHQtPmJpbmRUZXh0dXJl
KEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFXzJELCB0ZXh0dXJlKTsKKworICAgIGRyYXdRdWFk
KHRleHR1cmVTaXplLCBzcmNSZWN0LCBkc3RSZWN0LCBtX3N0YXRlLT5tX2N0bSwgbV9zdGF0ZS0+
bV9hbHBoYSk7Cit9CisKIHZvaWQgR0xFUzJDYW52YXM6OmRyYXdUZXh0dXJlZFJlY3QoVGV4dHVy
ZSogdGV4dHVyZSwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBjb25zdCBGbG9hdFJlY3QmIGRz
dFJlY3QsIENvbG9yU3BhY2UgY29sb3JTcGFjZSwgQ29tcG9zaXRlT3BlcmF0b3IgY29tcG9zaXRl
T3ApCiB7CiAgICAgZHJhd1RleHR1cmVkUmVjdCh0ZXh0dXJlLCBzcmNSZWN0LCBkc3RSZWN0LCBt
X3N0YXRlLT5tX2N0bSwgbV9zdGF0ZS0+bV9hbHBoYSwgY29sb3JTcGFjZSwgY29tcG9zaXRlT3Ap
OwogfQogCisKIHZvaWQgR0xFUzJDYW52YXM6OmRyYXdUZXh0dXJlZFJlY3QoVGV4dHVyZSogdGV4
dHVyZSwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBjb25zdCBGbG9hdFJlY3QmIGRzdFJlY3Qs
IGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgdHJhbnNmb3JtLCBmbG9hdCBhbHBoYSwgQ29sb3JTcGFj
ZSBjb2xvclNwYWNlLCBDb21wb3NpdGVPcGVyYXRvciBjb21wb3NpdGVPcCkKIHsKLSAgICBhcHBs
eUNvbXBvc2l0ZU9wZXJhdG9yKGNvbXBvc2l0ZU9wKTsKLQotICAgIG1fY29udGV4dC0+YmluZEJ1
ZmZlcihHcmFwaGljc0NvbnRleHQzRDo6QVJSQVlfQlVGRkVSLCBnZXRRdWFkVmVydGljZXMoKSk7
Ci0gICAgY2hlY2tHTEVycm9yKCJnbEJpbmRCdWZmZXIiKTsKLQorICAgIG1fY29udGV4dC0+YXBw
bHlDb21wb3NpdGVPcGVyYXRvcihjb21wb3NpdGVPcCk7CiAgICAgY29uc3QgVGlsaW5nRGF0YSYg
dGlsZXMgPSB0ZXh0dXJlLT50aWxlcygpOwogICAgIEludFJlY3QgdGlsZUlkeFJlY3QgPSB0aWxl
cy5vdmVybGFwcGVkVGlsZUluZGljZXMoc3JjUmVjdCk7CiAKKyAgICBtX2NvbnRleHQtPnVzZVF1
YWRWZXJ0aWNlcygpOworICAgIG1fY29udGV4dC0+c2V0QWN0aXZlVGV4dHVyZShHcmFwaGljc0Nv
bnRleHQzRDo6VEVYVFVSRTApOworCiAgICAgZm9yIChpbnQgeSA9IHRpbGVJZHhSZWN0LnkoKTsg
eSA8PSB0aWxlSWR4UmVjdC5ib3R0b20oKTsgeSsrKSB7CiAgICAgICAgIGZvciAoaW50IHggPSB0
aWxlSWR4UmVjdC54KCk7IHggPD0gdGlsZUlkeFJlY3QucmlnaHQoKTsgeCsrKQogICAgICAgICAg
ICAgZHJhd1RleHR1cmVkUmVjdFRpbGUodGV4dHVyZSwgdGlsZXMudGlsZUluZGV4KHgsIHkpLCBz
cmNSZWN0LCBkc3RSZWN0LCB0cmFuc2Zvcm0sIGFscGhhKTsKQEAgLTE5Myw3ICsyMDYsNiBAQCB2
b2lkIEdMRVMyQ2FudmFzOjpkcmF3VGV4dHVyZWRSZWN0VGlsZShUZXh0dXJlKiB0ZXh0dXJlLCBp
bnQgdGlsZSwgY29uc3QgRmxvYXRSZQogCiAgICAgY29uc3QgVGlsaW5nRGF0YSYgdGlsZXMgPSB0
ZXh0dXJlLT50aWxlcygpOwogCi0gICAgbV9jb250ZXh0LT5hY3RpdmVUZXh0dXJlKEdyYXBoaWNz
Q29udGV4dDNEOjpURVhUVVJFMCk7CiAgICAgdGV4dHVyZS0+YmluZFRpbGUodGlsZSk7CiAKICAg
ICBGbG9hdFJlY3Qgc3JjUmVjdENsaXBwZWRJblRpbGVTcGFjZTsKQEAgLTIwMiwxOCArMjE0LDI0
IEBAIHZvaWQgR0xFUzJDYW52YXM6OmRyYXdUZXh0dXJlZFJlY3RUaWxlKFRleHR1cmUqIHRleHR1
cmUsIGludCB0aWxlLCBjb25zdCBGbG9hdFJlCiAKICAgICBJbnRSZWN0IHRpbGVCb3VuZHNXaXRo
Qm9yZGVyID0gdGlsZXMudGlsZUJvdW5kc1dpdGhCb3JkZXIodGlsZSk7CiAKKyAgICBkcmF3UXVh
ZCh0aWxlQm91bmRzV2l0aEJvcmRlci5zaXplKCksIHNyY1JlY3RDbGlwcGVkSW5UaWxlU3BhY2Us
IGRzdFJlY3RJbnRlcnNlY3RlZCwgdHJhbnNmb3JtLCBhbHBoYSk7Cit9CisKK3ZvaWQgR0xFUzJD
YW52YXM6OmRyYXdRdWFkKGNvbnN0IEludFNpemUmIHRleHR1cmVTaXplLCBjb25zdCBGbG9hdFJl
Y3QmIHNyY1JlY3QsIGNvbnN0IEZsb2F0UmVjdCYgZHN0UmVjdCwgY29uc3QgQWZmaW5lVHJhbnNm
b3JtJiB0cmFuc2Zvcm0sIGZsb2F0IGFscGhhKQorewogICAgIEFmZmluZVRyYW5zZm9ybSBtYXRy
aXgobV9mbGlwTWF0cml4KTsKICAgICBtYXRyaXgubXVsdExlZnQodHJhbnNmb3JtKTsKLSAgICBt
YXRyaXgudHJhbnNsYXRlKGRzdFJlY3RJbnRlcnNlY3RlZC54KCksIGRzdFJlY3RJbnRlcnNlY3Rl
ZC55KCkpOwotICAgIG1hdHJpeC5zY2FsZShkc3RSZWN0SW50ZXJzZWN0ZWQud2lkdGgoKSwgZHN0
UmVjdEludGVyc2VjdGVkLmhlaWdodCgpKTsKKyAgICBtYXRyaXgudHJhbnNsYXRlKGRzdFJlY3Qu
eCgpLCBkc3RSZWN0LnkoKSk7CisgICAgbWF0cml4LnNjYWxlKGRzdFJlY3Qud2lkdGgoKSwgZHN0
UmVjdC5oZWlnaHQoKSk7CiAKICAgICBBZmZpbmVUcmFuc2Zvcm0gdGV4TWF0cml4OwotICAgIHRl
eE1hdHJpeC5zY2FsZSgxLjBmIC8gdGlsZUJvdW5kc1dpdGhCb3JkZXIud2lkdGgoKSwgMS4wZiAv
IHRpbGVCb3VuZHNXaXRoQm9yZGVyLmhlaWdodCgpKTsKLSAgICB0ZXhNYXRyaXgudHJhbnNsYXRl
KHNyY1JlY3RDbGlwcGVkSW5UaWxlU3BhY2UueCgpLCBzcmNSZWN0Q2xpcHBlZEluVGlsZVNwYWNl
LnkoKSk7Ci0gICAgdGV4TWF0cml4LnNjYWxlKHNyY1JlY3RDbGlwcGVkSW5UaWxlU3BhY2Uud2lk
dGgoKSwgc3JjUmVjdENsaXBwZWRJblRpbGVTcGFjZS5oZWlnaHQoKSk7CisgICAgdGV4TWF0cml4
LnNjYWxlKDEuMGYgLyB0ZXh0dXJlU2l6ZS53aWR0aCgpLCAxLjBmIC8gdGV4dHVyZVNpemUuaGVp
Z2h0KCkpOworICAgIHRleE1hdHJpeC50cmFuc2xhdGUoc3JjUmVjdC54KCksIHNyY1JlY3QueSgp
KTsKKyAgICB0ZXhNYXRyaXguc2NhbGUoc3JjUmVjdC53aWR0aCgpLCBzcmNSZWN0LmhlaWdodCgp
KTsKIAotICAgIG1fdGV4U2hhZGVyLT51c2UobWF0cml4LCB0ZXhNYXRyaXgsIDAsIGFscGhhKTsK
KyAgICBiaW5kRnJhbWVidWZmZXIoKTsKIAorICAgIG1fY29udGV4dC0+dXNlVGV4dHVyZVByb2dy
YW0obWF0cml4LCB0ZXhNYXRyaXgsIGFscGhhKTsKICAgICBtX2NvbnRleHQtPmRyYXdBcnJheXMo
R3JhcGhpY3NDb250ZXh0M0Q6OlRSSUFOR0xFX1NUUklQLCAwLCA0KTsKICAgICBjaGVja0dMRXJy
b3IoImdsRHJhd0FycmF5cyIpOwogfQpAQCAtMjIzLDk4ICsyNDEsMTQgQEAgdm9pZCBHTEVTMkNh
bnZhczo6c2V0Q29tcG9zaXRlT3BlcmF0aW9uKENvbXBvc2l0ZU9wZXJhdG9yIG9wKQogICAgIG1f
c3RhdGUtPm1fY29tcG9zaXRlT3AgPSBvcDsKIH0KIAotdm9pZCBHTEVTMkNhbnZhczo6YXBwbHlD
b21wb3NpdGVPcGVyYXRvcihDb21wb3NpdGVPcGVyYXRvciBvcCkKLXsKLSAgICBpZiAob3AgPT0g
bV9sYXN0Q29tcG9zaXRlT3ApCi0gICAgICAgIHJldHVybjsKLQotICAgIHN3aXRjaCAob3ApIHsK
LSAgICBjYXNlIENvbXBvc2l0ZUNsZWFyOgotICAgICAgICBtX2NvbnRleHQtPmVuYWJsZShHcmFw
aGljc0NvbnRleHQzRDo6QkxFTkQpOwotICAgICAgICBtX2NvbnRleHQtPmJsZW5kRnVuYyhHcmFw
aGljc0NvbnRleHQzRDo6WkVSTywgR3JhcGhpY3NDb250ZXh0M0Q6OlpFUk8pOwotICAgICAgICBi
cmVhazsKLSAgICBjYXNlIENvbXBvc2l0ZUNvcHk6Ci0gICAgICAgIG1fY29udGV4dC0+ZGlzYWJs
ZShHcmFwaGljc0NvbnRleHQzRDo6QkxFTkQpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIENv
bXBvc2l0ZVNvdXJjZU92ZXI6Ci0gICAgICAgIG1fY29udGV4dC0+ZW5hYmxlKEdyYXBoaWNzQ29u
dGV4dDNEOjpCTEVORCk7Ci0gICAgICAgIG1fY29udGV4dC0+YmxlbmRGdW5jKEdyYXBoaWNzQ29u
dGV4dDNEOjpPTkUsIEdyYXBoaWNzQ29udGV4dDNEOjpPTkVfTUlOVVNfU1JDX0FMUEhBKTsKLSAg
ICAgICAgYnJlYWs7Ci0gICAgY2FzZSBDb21wb3NpdGVTb3VyY2VJbjoKLSAgICAgICAgbV9jb250
ZXh0LT5lbmFibGUoR3JhcGhpY3NDb250ZXh0M0Q6OkJMRU5EKTsKLSAgICAgICAgbV9jb250ZXh0
LT5ibGVuZEZ1bmMoR3JhcGhpY3NDb250ZXh0M0Q6OkRTVF9BTFBIQSwgR3JhcGhpY3NDb250ZXh0
M0Q6OlpFUk8pOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIENvbXBvc2l0ZVNvdXJjZU91dDoK
LSAgICAgICAgbV9jb250ZXh0LT5lbmFibGUoR3JhcGhpY3NDb250ZXh0M0Q6OkJMRU5EKTsKLSAg
ICAgICAgbV9jb250ZXh0LT5ibGVuZEZ1bmMoR3JhcGhpY3NDb250ZXh0M0Q6Ok9ORV9NSU5VU19E
U1RfQUxQSEEsIEdyYXBoaWNzQ29udGV4dDNEOjpaRVJPKTsKLSAgICAgICAgYnJlYWs7Ci0gICAg
Y2FzZSBDb21wb3NpdGVTb3VyY2VBdG9wOgotICAgICAgICBtX2NvbnRleHQtPmVuYWJsZShHcmFw
aGljc0NvbnRleHQzRDo6QkxFTkQpOwotICAgICAgICBtX2NvbnRleHQtPmJsZW5kRnVuYyhHcmFw
aGljc0NvbnRleHQzRDo6RFNUX0FMUEhBLCBHcmFwaGljc0NvbnRleHQzRDo6T05FX01JTlVTX1NS
Q19BTFBIQSk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgQ29tcG9zaXRlRGVzdGluYXRpb25P
dmVyOgotICAgICAgICBtX2NvbnRleHQtPmVuYWJsZShHcmFwaGljc0NvbnRleHQzRDo6QkxFTkQp
OwotICAgICAgICBtX2NvbnRleHQtPmJsZW5kRnVuYyhHcmFwaGljc0NvbnRleHQzRDo6T05FX01J
TlVTX0RTVF9BTFBIQSwgR3JhcGhpY3NDb250ZXh0M0Q6Ok9ORSk7Ci0gICAgICAgIGJyZWFrOwot
ICAgIGNhc2UgQ29tcG9zaXRlRGVzdGluYXRpb25JbjoKLSAgICAgICAgbV9jb250ZXh0LT5lbmFi
bGUoR3JhcGhpY3NDb250ZXh0M0Q6OkJMRU5EKTsKLSAgICAgICAgbV9jb250ZXh0LT5ibGVuZEZ1
bmMoR3JhcGhpY3NDb250ZXh0M0Q6OlpFUk8sIEdyYXBoaWNzQ29udGV4dDNEOjpTUkNfQUxQSEEp
OwotICAgICAgICBicmVhazsKLSAgICBjYXNlIENvbXBvc2l0ZURlc3RpbmF0aW9uT3V0OgotICAg
ICAgICBtX2NvbnRleHQtPmVuYWJsZShHcmFwaGljc0NvbnRleHQzRDo6QkxFTkQpOwotICAgICAg
ICBtX2NvbnRleHQtPmJsZW5kRnVuYyhHcmFwaGljc0NvbnRleHQzRDo6WkVSTywgR3JhcGhpY3ND
b250ZXh0M0Q6Ok9ORV9NSU5VU19TUkNfQUxQSEEpOwotICAgICAgICBicmVhazsKLSAgICBjYXNl
IENvbXBvc2l0ZURlc3RpbmF0aW9uQXRvcDoKLSAgICAgICAgbV9jb250ZXh0LT5lbmFibGUoR3Jh
cGhpY3NDb250ZXh0M0Q6OkJMRU5EKTsKLSAgICAgICAgbV9jb250ZXh0LT5ibGVuZEZ1bmMoR3Jh
cGhpY3NDb250ZXh0M0Q6Ok9ORV9NSU5VU19EU1RfQUxQSEEsIEdyYXBoaWNzQ29udGV4dDNEOjpT
UkNfQUxQSEEpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIENvbXBvc2l0ZVhPUjoKLSAgICAg
ICAgbV9jb250ZXh0LT5lbmFibGUoR3JhcGhpY3NDb250ZXh0M0Q6OkJMRU5EKTsKLSAgICAgICAg
bV9jb250ZXh0LT5ibGVuZEZ1bmMoR3JhcGhpY3NDb250ZXh0M0Q6Ok9ORV9NSU5VU19EU1RfQUxQ
SEEsIEdyYXBoaWNzQ29udGV4dDNEOjpPTkVfTUlOVVNfU1JDX0FMUEhBKTsKLSAgICAgICAgYnJl
YWs7Ci0gICAgY2FzZSBDb21wb3NpdGVQbHVzRGFya2VyOgotICAgIGNhc2UgQ29tcG9zaXRlSGln
aGxpZ2h0OgotICAgICAgICAvLyB1bnN1cHBvcnRlZAotICAgICAgICBtX2NvbnRleHQtPmRpc2Fi
bGUoR3JhcGhpY3NDb250ZXh0M0Q6OkJMRU5EKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBD
b21wb3NpdGVQbHVzTGlnaHRlcjoKLSAgICAgICAgbV9jb250ZXh0LT5lbmFibGUoR3JhcGhpY3ND
b250ZXh0M0Q6OkJMRU5EKTsKLSAgICAgICAgbV9jb250ZXh0LT5ibGVuZEZ1bmMoR3JhcGhpY3ND
b250ZXh0M0Q6Ok9ORSwgR3JhcGhpY3NDb250ZXh0M0Q6Ok9ORSk7Ci0gICAgICAgIGJyZWFrOwot
ICAgIH0KLSAgICBtX2xhc3RDb21wb3NpdGVPcCA9IG9wOwotfQotCi11bnNpZ25lZCBHTEVTMkNh
bnZhczo6Z2V0UXVhZFZlcnRpY2VzKCkKLXsKLSAgICBpZiAoIW1fcXVhZFZlcnRpY2VzKSB7Ci0g
ICAgICAgIGZsb2F0IHZlcnRpY2VzW10gPSB7IDAuMGYsIDAuMGYsIDEuMGYsCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIDEuMGYsIDAuMGYsIDEuMGYsCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIDAuMGYsIDEuMGYsIDEuMGYsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
IDEuMGYsIDEuMGYsIDEuMGYgfTsKLSAgICAgICAgbV9xdWFkVmVydGljZXMgPSBtX2NvbnRleHQt
PmNyZWF0ZUJ1ZmZlcigpOwotICAgICAgICBtX2NvbnRleHQtPmJpbmRCdWZmZXIoR3JhcGhpY3ND
b250ZXh0M0Q6OkFSUkFZX0JVRkZFUiwgbV9xdWFkVmVydGljZXMpOwotICAgICAgICBtX2NvbnRl
eHQtPmJ1ZmZlckRhdGEoR3JhcGhpY3NDb250ZXh0M0Q6OkFSUkFZX0JVRkZFUiwgc2l6ZW9mKHZl
cnRpY2VzKSwgdmVydGljZXMsIEdyYXBoaWNzQ29udGV4dDNEOjpTVEFUSUNfRFJBVyk7Ci0gICAg
fQotICAgIHJldHVybiBtX3F1YWRWZXJ0aWNlczsKLX0KLQogVGV4dHVyZSogR0xFUzJDYW52YXM6
OmNyZWF0ZVRleHR1cmUoTmF0aXZlSW1hZ2VQdHIgcHRyLCBUZXh0dXJlOjpGb3JtYXQgZm9ybWF0
LCBpbnQgd2lkdGgsIGludCBoZWlnaHQpCiB7Ci0gICAgUGFzc1JlZlB0cjxUZXh0dXJlPiB0ZXh0
dXJlID0gbV90ZXh0dXJlcy5nZXQocHRyKTsKLSAgICBpZiAodGV4dHVyZSkKLSAgICAgICAgcmV0
dXJuIHRleHR1cmUuZ2V0KCk7Ci0KLSAgICB0ZXh0dXJlID0gVGV4dHVyZTo6Y3JlYXRlKG1fY29u
dGV4dCwgZm9ybWF0LCB3aWR0aCwgaGVpZ2h0KTsKLSAgICBUZXh0dXJlKiB0ID0gdGV4dHVyZS5n
ZXQoKTsKLSAgICBtX3RleHR1cmVzLnNldChwdHIsIHRleHR1cmUpOwotICAgIHJldHVybiB0Owor
ICAgIHJldHVybiBtX2NvbnRleHQtPmNyZWF0ZVRleHR1cmUocHRyLCBmb3JtYXQsIHdpZHRoLCBo
ZWlnaHQpOwogfQogCiBUZXh0dXJlKiBHTEVTMkNhbnZhczo6Z2V0VGV4dHVyZShOYXRpdmVJbWFn
ZVB0ciBwdHIpCiB7Ci0gICAgUGFzc1JlZlB0cjxUZXh0dXJlPiB0ZXh0dXJlID0gbV90ZXh0dXJl
cy5nZXQocHRyKTsKLSAgICByZXR1cm4gdGV4dHVyZSA/IHRleHR1cmUuZ2V0KCkgOiAwOworICAg
IHJldHVybiBtX2NvbnRleHQtPmdldFRleHR1cmUocHRyKTsKIH0KIAogdm9pZCBHTEVTMkNhbnZh
czo6Y2hlY2tHTEVycm9yKGNvbnN0IGNoYXIqIGhlYWRlcikKZGlmZiAtLWdpdCBhL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vR0xFUzJDYW52YXMuaCBiL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY2hyb21pdW0vR0xFUzJDYW52YXMuaAppbmRleCBmNDlhYzhiYTE4ZDFkMzQy
MzRiOGQwNjI3OGU3MDI4YmZlOTY5N2UxLi44YWZlYzQ0MDMxZDJkNThmZGQyZGQxZDExZWU2ZDNl
ZGQ0ZWZjYzExIDEwMDY0NAotLS0gYS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVt
L0dMRVMyQ2FudmFzLmgKKysrIGIvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9H
TEVTMkNhbnZhcy5oCkBAIC00NSwxNiArNDUsMTQgQEAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAog
Y2xhc3MgQ29sb3I7CitjbGFzcyBEcmF3aW5nQnVmZmVyOwogY2xhc3MgRmxvYXRSZWN0OwogY2xh
c3MgR3JhcGhpY3NDb250ZXh0M0Q7Ci1jbGFzcyBTb2xpZEZpbGxTaGFkZXI7Ci1jbGFzcyBUZXhT
aGFkZXI7Ci0KLXR5cGVkZWYgSGFzaE1hcDxOYXRpdmVJbWFnZVB0ciwgUmVmUHRyPFRleHR1cmU+
ID4gVGV4dHVyZUhhc2hNYXA7CitjbGFzcyBTaGFyZWRDb250ZXh0M0Q7CiAKIGNsYXNzIEdMRVMy
Q2FudmFzIDogcHVibGljIE5vbmNvcHlhYmxlIHsKIHB1YmxpYzoKLSAgICBHTEVTMkNhbnZhcyhH
cmFwaGljc0NvbnRleHQzRCosIGNvbnN0IEludFNpemUmKTsKKyAgICBHTEVTMkNhbnZhcyhTaGFy
ZWRDb250ZXh0M0QqLCBEcmF3aW5nQnVmZmVyKiwgY29uc3QgSW50U2l6ZSYpOwogICAgIH5HTEVT
MkNhbnZhcygpOwogCiAgICAgdm9pZCBmaWxsUmVjdChjb25zdCBGbG9hdFJlY3QmLCBjb25zdCBD
b2xvciYsIENvbG9yU3BhY2UpOwpAQCAtNzQsMjggKzcyLDMzIEBAIHB1YmxpYzoKICAgICAvLyBu
b24tc3RhbmRhcmQgZnVuY3Rpb25zCiAgICAgLy8gVGhlc2UgYXJlIG5vdCBzdGFuZGFyZCBHcmFw
aGljc0NvbnRleHQgZnVuY3Rpb25zLCBhbmQgc2hvdWxkIGJlIHB1c2hlZAogICAgIC8vIGRvd24g
aW50byBhIFBsYXRmb3JtQ29udGV4dEdMRVMyIGF0IHNvbWUgcG9pbnQuCisgICAgdm9pZCBkcmF3
VGV4dHVyZWRSZWN0KHVuc2lnbmVkIHRleHR1cmUsIGNvbnN0IEludFNpemUmIHRleHR1cmVTaXpl
LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsIGNvbnN0IEZsb2F0UmVjdCYgZHN0UmVjdCwgQ29s
b3JTcGFjZSwgQ29tcG9zaXRlT3BlcmF0b3IpOwogICAgIHZvaWQgZHJhd1RleHR1cmVkUmVjdChU
ZXh0dXJlKiwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBjb25zdCBGbG9hdFJlY3QmIGRzdFJl
Y3QsIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYsIGZsb2F0IGFscGhhLCBDb2xvclNwYWNlLCBDb21w
b3NpdGVPcGVyYXRvcik7CiAgICAgdm9pZCBkcmF3VGV4dHVyZWRSZWN0KFRleHR1cmUqLCBjb25z
dCBGbG9hdFJlY3QmIHNyY1JlY3QsIGNvbnN0IEZsb2F0UmVjdCYgZHN0UmVjdCwgQ29sb3JTcGFj
ZSwgQ29tcG9zaXRlT3BlcmF0b3IpOwotICAgIEdyYXBoaWNzQ29udGV4dDNEKiBjb250ZXh0KCkg
eyByZXR1cm4gbV9jb250ZXh0OyB9CiAgICAgVGV4dHVyZSogY3JlYXRlVGV4dHVyZShOYXRpdmVJ
bWFnZVB0ciwgVGV4dHVyZTo6Rm9ybWF0LCBpbnQgd2lkdGgsIGludCBoZWlnaHQpOwogICAgIFRl
eHR1cmUqIGdldFRleHR1cmUoTmF0aXZlSW1hZ2VQdHIpOwogCisgICAgU2hhcmVkQ29udGV4dDNE
KiBjb250ZXh0KCkgY29uc3QgeyByZXR1cm4gbV9jb250ZXh0OyB9CisKKyAgICB2b2lkIGJpbmRG
cmFtZWJ1ZmZlcigpOworCisgICAgRHJhd2luZ0J1ZmZlciogZHJhd2luZ0J1ZmZlcigpIGNvbnN0
IHsgcmV0dXJuIG1fZHJhd2luZ0J1ZmZlcjsgfQorCiBwcml2YXRlOgogICAgIHZvaWQgZHJhd1Rl
eHR1cmVkUmVjdFRpbGUoVGV4dHVyZSogdGV4dHVyZSwgaW50IHRpbGUsIGNvbnN0IEZsb2F0UmVj
dCYgc3JjUmVjdCwgY29uc3QgRmxvYXRSZWN0JiBkc3RSZWN0LCBjb25zdCBBZmZpbmVUcmFuc2Zv
cm0mLCBmbG9hdCBhbHBoYSk7CisgICAgdm9pZCBkcmF3UXVhZChjb25zdCBJbnRTaXplJiB0ZXh0
dXJlU2l6ZSwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBjb25zdCBGbG9hdFJlY3QmIGRzdFJl
Y3QsIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYsIGZsb2F0IGFscGhhKTsKICAgICB2b2lkIGFwcGx5
Q29tcG9zaXRlT3BlcmF0b3IoQ29tcG9zaXRlT3BlcmF0b3IpOwogICAgIHZvaWQgY2hlY2tHTEVy
cm9yKGNvbnN0IGNoYXIqIGhlYWRlcik7Ci0gICAgdW5zaWduZWQgZ2V0UXVhZFZlcnRpY2VzKCk7
CiAKLSAgICBHcmFwaGljc0NvbnRleHQzRCogbV9jb250ZXh0OworICAgIEludFNpemUgbV9zaXpl
OworCisgICAgU2hhcmVkQ29udGV4dDNEKiBtX2NvbnRleHQ7CisgICAgRHJhd2luZ0J1ZmZlciog
bV9kcmF3aW5nQnVmZmVyOworCiAgICAgc3RydWN0IFN0YXRlOwogICAgIFdURjo6VmVjdG9yPFN0
YXRlPiBtX3N0YXRlU3RhY2s7CiAgICAgU3RhdGUqIG1fc3RhdGU7Ci0gICAgdW5zaWduZWQgbV9x
dWFkVmVydGljZXM7Ci0gICAgT3duUHRyPFNvbGlkRmlsbFNoYWRlcj4gbV9zb2xpZEZpbGxTaGFk
ZXI7Ci0gICAgT3duUHRyPFRleFNoYWRlcj4gbV90ZXhTaGFkZXI7CiAgICAgQWZmaW5lVHJhbnNm
b3JtIG1fZmxpcE1hdHJpeDsKLSAgICBUZXh0dXJlSGFzaE1hcCBtX3RleHR1cmVzOwotICAgIENv
bXBvc2l0ZU9wZXJhdG9yIG1fbGFzdENvbXBvc2l0ZU9wOyAvLyBUaGlzIGlzIHRoZSBvbmUgbGFz
dCBzZXQsIG5vdCBuZWNlc3NhcmlseSB0aGUgb25lIGluIHRoZSBzdGF0ZSBzdGFjay4KIH07CiAK
IH0KZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vR3JhcGhp
Y3NMYXllckNocm9taXVtLmNwcCBiL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0v
R3JhcGhpY3NMYXllckNocm9taXVtLmNwcAppbmRleCA2NDhlMzVmMWE0NjcyZmMyNjU0ZTVhNWU5
NmNjZTI5ZTY3OTJjMTAxLi5mNjcyMDJjNWU5ZGFhYjUzZjUwNmQyYjM4NWJkMTRlYzQ5ODE0ZmIy
IDEwMDY0NAotLS0gYS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0dyYXBoaWNz
TGF5ZXJDaHJvbWl1bS5jcHAKKysrIGIvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1
bS9HcmFwaGljc0xheWVyQ2hyb21pdW0uY3BwCkBAIC00NSw3ICs0NSw5IEBACiAKICNpbmNsdWRl
ICJHcmFwaGljc0xheWVyQ2hyb21pdW0uaCIKIAorI2luY2x1ZGUgIkNhbnZhczJETGF5ZXJDaHJv
bWl1bS5oIgogI2luY2x1ZGUgIkNvbnRlbnRMYXllckNocm9taXVtLmgiCisjaW5jbHVkZSAiRHJh
d2luZ0J1ZmZlci5oIgogI2luY2x1ZGUgIkZsb2F0Q29udmVyc2lvbi5oIgogI2luY2x1ZGUgIkZs
b2F0UmVjdC5oIgogI2luY2x1ZGUgIkltYWdlLmgiCkBAIC0yOTAsNiArMjkyLDcgQEAgdm9pZCBH
cmFwaGljc0xheWVyQ2hyb21pdW06OnNldENvbnRlbnRzTmVlZHNEaXNwbGF5KCkKICAgICBpZiAo
bV9jb250ZW50c0xheWVyKQogICAgICAgICBtX2NvbnRlbnRzTGF5ZXItPnNldE5lZWRzRGlzcGxh
eSgpOwogfQorCiB2b2lkIEdyYXBoaWNzTGF5ZXJDaHJvbWl1bTo6c2V0TmVlZHNEaXNwbGF5KCkK
IHsKICAgICBpZiAoZHJhd3NDb250ZW50KCkpCkBAIC0zMzksMTUgKzM0MiwxNSBAQCB2b2lkIEdy
YXBoaWNzTGF5ZXJDaHJvbWl1bTo6c2V0Q29udGVudHNUb0ltYWdlKEltYWdlKiBpbWFnZSkKICAg
ICAgICAgdXBkYXRlU3VibGF5ZXJMaXN0KCk7CiB9CiAKLXZvaWQgR3JhcGhpY3NMYXllckNocm9t
aXVtOjpzZXRDb250ZW50c1RvQ2FudmFzKFBsYXRmb3JtTGF5ZXIqIHBsYXRmb3JtTGF5ZXIpCit2
b2lkIEdyYXBoaWNzTGF5ZXJDaHJvbWl1bTo6c2V0Q29udGVudHNUb1dlYkdMKFBsYXRmb3JtTGF5
ZXIqIHBsYXRmb3JtTGF5ZXIpCiB7CiAgICAgYm9vbCBjaGlsZHJlbkNoYW5nZWQgPSBmYWxzZTsK
ICAgICBpZiAocGxhdGZvcm1MYXllcikgewogICAgICAgICBwbGF0Zm9ybUxheWVyLT5zZXRPd25l
cih0aGlzKTsKLSAgICAgICAgaWYgKCFtX2NvbnRlbnRzTGF5ZXIuZ2V0KCkgfHwgbV9jb250ZW50
c0xheWVyUHVycG9zZSAhPSBDb250ZW50c0xheWVyRm9yQ2FudmFzKSB7CisgICAgICAgIGlmICgh
bV9jb250ZW50c0xheWVyLmdldCgpIHx8IG1fY29udGVudHNMYXllclB1cnBvc2UgIT0gQ29udGVu
dHNMYXllckZvcldlYkdMKSB7CiAgICAgICAgICAgICBzZXR1cENvbnRlbnRzTGF5ZXIocGxhdGZv
cm1MYXllcik7CiAgICAgICAgICAgICBtX2NvbnRlbnRzTGF5ZXIgPSBwbGF0Zm9ybUxheWVyOwot
ICAgICAgICAgICAgbV9jb250ZW50c0xheWVyUHVycG9zZSA9IENvbnRlbnRzTGF5ZXJGb3JDYW52
YXM7CisgICAgICAgICAgICBtX2NvbnRlbnRzTGF5ZXJQdXJwb3NlID0gQ29udGVudHNMYXllckZv
cldlYkdMOwogICAgICAgICAgICAgY2hpbGRyZW5DaGFuZ2VkID0gdHJ1ZTsKICAgICAgICAgfQog
ICAgICAgICBwbGF0Zm9ybUxheWVyLT5zZXROZWVkc0Rpc3BsYXkoKTsKQEAgLTM2NSw2ICszNjgs
MzUgQEAgdm9pZCBHcmFwaGljc0xheWVyQ2hyb21pdW06OnNldENvbnRlbnRzVG9DYW52YXMoUGxh
dGZvcm1MYXllciogcGxhdGZvcm1MYXllcikKICAgICAgICAgdXBkYXRlU3VibGF5ZXJMaXN0KCk7
CiB9CiAKK3ZvaWQgR3JhcGhpY3NMYXllckNocm9taXVtOjpzZXRDb250ZW50c1RvQ2FudmFzMkQo
RHJhd2luZ0J1ZmZlciogZHJhd2luZ0J1ZmZlcikKK3sKKyAgICBib29sIGNoaWxkcmVuQ2hhbmdl
ZCA9IGZhbHNlOworICAgIGlmIChkcmF3aW5nQnVmZmVyKSB7CisgICAgICAgIGlmICghbV9jb250
ZW50c0xheWVyLmdldCgpIHx8IG1fY29udGVudHNMYXllclB1cnBvc2UgIT0gQ29udGVudHNMYXll
ckZvckNhbnZhczJEKSB7CisgICAgICAgICAgICBSZWZQdHI8Q2FudmFzMkRMYXllckNocm9taXVt
PiBjYW52YXMyRExheWVyID0gQ2FudmFzMkRMYXllckNocm9taXVtOjpjcmVhdGUoZHJhd2luZ0J1
ZmZlciwgdGhpcyk7CisgICAgICAgICAgICBzZXR1cENvbnRlbnRzTGF5ZXIoY2FudmFzMkRMYXll
ci5nZXQoKSk7CisgICAgICAgICAgICBtX2NvbnRlbnRzTGF5ZXIgPSBjYW52YXMyRExheWVyOwor
ICAgICAgICAgICAgbV9jb250ZW50c0xheWVyUHVycG9zZSA9IENvbnRlbnRzTGF5ZXJGb3JDYW52
YXMyRDsKKyAgICAgICAgICAgIGNoaWxkcmVuQ2hhbmdlZCA9IHRydWU7CisgICAgICAgIH0gZWxz
ZSB7CisgICAgICAgICAgICBDYW52YXMyRExheWVyQ2hyb21pdW0qIGNhbnZhczJETGF5ZXIgPSBz
dGF0aWNfY2FzdDxDYW52YXMyRExheWVyQ2hyb21pdW0qPihtX2NvbnRlbnRzTGF5ZXIuZ2V0KCkp
OworICAgICAgICAgICAgY2FudmFzMkRMYXllci0+c2V0RHJhd2luZ0J1ZmZlcihkcmF3aW5nQnVm
ZmVyKTsKKyAgICAgICAgfQorICAgICAgICBtX2NvbnRlbnRzTGF5ZXItPnNldE5lZWRzRGlzcGxh
eSgpOworICAgICAgICB1cGRhdGVDb250ZW50c1JlY3QoKTsKKyAgICB9IGVsc2UgeworICAgICAg
ICBpZiAobV9jb250ZW50c0xheWVyKSB7CisgICAgICAgICAgICBjaGlsZHJlbkNoYW5nZWQgPSB0
cnVlOworCisgICAgICAgICAgICAvLyBUaGUgb2xkIGNvbnRlbnRzIGxheWVyIHdpbGwgYmUgcmVt
b3ZlZCB2aWEgdXBkYXRlU3VibGF5ZXJMaXN0LgorICAgICAgICAgICAgbV9jb250ZW50c0xheWVy
ID0gMDsKKyAgICAgICAgfQorICAgIH0KKworICAgIGlmIChjaGlsZHJlbkNoYW5nZWQpCisgICAg
ICAgIHVwZGF0ZVN1YmxheWVyTGlzdCgpOworfQorCiB2b2lkIEdyYXBoaWNzTGF5ZXJDaHJvbWl1
bTo6c2V0Q29udGVudHNUb01lZGlhKFBsYXRmb3JtTGF5ZXIqIGxheWVyKQogewogICAgIGJvb2wg
Y2hpbGRyZW5DaGFuZ2VkID0gZmFsc2U7CmRpZmYgLS1naXQgYS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2Nocm9taXVtL0dyYXBoaWNzTGF5ZXJDaHJvbWl1bS5oIGIvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jaHJvbWl1bS9HcmFwaGljc0xheWVyQ2hyb21pdW0uaAppbmRleCA5ZGZmNjZh
MDc1Y2MzMGE1ODQ2YjE0NmExNjUxODQ4YjZmZWRhZjkxLi5hMWU1NDgyMWIyN2ZjMjZjZmQxZWYx
NzA0MDA5ZGI4ZTIzYWQ4ZDljIDEwMDY0NAotLS0gYS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2Nocm9taXVtL0dyYXBoaWNzTGF5ZXJDaHJvbWl1bS5oCisrKyBiL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2hyb21pdW0vR3JhcGhpY3NMYXllckNocm9taXVtLmgKQEAgLTg3LDcgKzg3LDgg
QEAgcHVibGljOgogCiAgICAgdmlydHVhbCB2b2lkIHNldENvbnRlbnRzVG9JbWFnZShJbWFnZSop
OwogICAgIHZpcnR1YWwgdm9pZCBzZXRDb250ZW50c1RvTWVkaWEoUGxhdGZvcm1MYXllciopOwot
ICAgIHZpcnR1YWwgdm9pZCBzZXRDb250ZW50c1RvQ2FudmFzKFBsYXRmb3JtTGF5ZXIqKTsKKyAg
ICB2aXJ0dWFsIHZvaWQgc2V0Q29udGVudHNUb1dlYkdMKFBsYXRmb3JtTGF5ZXIqKTsKKyAgICB2
aXJ0dWFsIHZvaWQgc2V0Q29udGVudHNUb0NhbnZhczJEKERyYXdpbmdCdWZmZXIqKTsKIAogICAg
IHZpcnR1YWwgUGxhdGZvcm1MYXllciogcGxhdGZvcm1MYXllcigpIGNvbnN0OwogCkBAIC0xMzgs
NyArMTM5LDggQEAgcHJpdmF0ZToKICAgICAgICAgTm9Db250ZW50c0xheWVyID0gMCwKICAgICAg
ICAgQ29udGVudHNMYXllckZvckltYWdlLAogICAgICAgICBDb250ZW50c0xheWVyRm9yVmlkZW8s
Ci0gICAgICAgIENvbnRlbnRzTGF5ZXJGb3JDYW52YXMKKyAgICAgICAgQ29udGVudHNMYXllckZv
cldlYkdMLAorICAgICAgICBDb250ZW50c0xheWVyRm9yQ2FudmFzMkQsCiAgICAgfTsKIAogICAg
IENvbnRlbnRzTGF5ZXJQdXJwb3NlIG1fY29udGVudHNMYXllclB1cnBvc2U7CmRpZmYgLS1naXQg
YS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyUmVuZGVyZXJDaHJvbWl1
bS5jcHAgYi9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyUmVuZGVyZXJD
aHJvbWl1bS5jcHAKaW5kZXggNTAzMzhkMmQ1ZjczMjRlNWExMTljNTA5MTkwZGZlZjg2OThiMTc2
OS4uOGUxMzM4MjZiZjIzYmVlNzUzNTA5ZTU2YzkyOGJkMGM0OTM0YzE1OSAxMDA2NDQKLS0tIGEv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllclJlbmRlcmVyQ2hyb21pdW0u
Y3BwCisrKyBiL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJSZW5kZXJl
ckNocm9taXVtLmNwcApAQCAtMzQsMTEgKzM0LDExIEBACiAjaWYgVVNFKEFDQ0VMRVJBVEVEX0NP
TVBPU0lUSU5HKQogI2luY2x1ZGUgIkxheWVyUmVuZGVyZXJDaHJvbWl1bS5oIgogCi0jaW5jbHVk
ZSAiQ2FudmFzTGF5ZXJDaHJvbWl1bS5oIgotI2luY2x1ZGUgIkNvbnRlbnRMYXllckNocm9taXVt
LmgiCisjaW5jbHVkZSAiQ2FudmFzMkRMYXllckNocm9taXVtLmgiCiAjaW5jbHVkZSAiR0xFUzJD
b250ZXh0LmgiCiAjaW5jbHVkZSAiTGF5ZXJDaHJvbWl1bS5oIgogI2luY2x1ZGUgIk5vdEltcGxl
bWVudGVkLmgiCisjaW5jbHVkZSAiV2ViR0xMYXllckNocm9taXVtLmgiCiAjaWYgUExBVEZPUk0o
U0tJQSkKICNpbmNsdWRlICJOYXRpdmVJbWFnZVNraWEuaCIKICNpbmNsdWRlICJQbGF0Zm9ybUNv
bnRleHRTa2lhLmgiCkBAIC01NjgsNiArNTY4LDcgQEAgdm9pZCBMYXllclJlbmRlcmVyQ2hyb21p
dW06OmRyYXdMYXllcihMYXllckNocm9taXVtKiBsYXllcikKICAgICAgICAgLy8gVXBkYXRlIHRo
ZSBjb250ZW50cyBvZiB0aGUgbGF5ZXIgaWYgbmVjZXNzYXJ5LgogICAgICAgICBpZiAobGF5ZXIt
PmNvbnRlbnRzRGlydHkoKSkgewogICAgICAgICAgICAgLy8gVXBkYXRlIHRoZSBiYWNraW5nIHRl
eHR1cmUgY29udGVudHMgZm9yIGFueSBkaXJ0eSBwb3J0aW9uIG9mIHRoZSBsYXllci4KKyAgICAg
ICAgICAgIG1fZ2xlczJDb250ZXh0LT5tYWtlQ3VycmVudCgpOwogICAgICAgICAgICAgbGF5ZXIt
PnVwZGF0ZUNvbnRlbnRzKCk7CiAgICAgICAgICAgICBtX2dsZXMyQ29udGV4dC0+bWFrZUN1cnJl
bnQoKTsKICAgICAgICAgfQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
aHJvbWl1bS9XZWJHTExheWVyQ2hyb21pdW0uY3BwIGIvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jaHJvbWl1bS9XZWJHTExheWVyQ2hyb21pdW0uY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjQxMWY0MTYyYjkx
NDk0OTc5NDcxYjkwZGVjNjYwMWM5YzY5NDhkYjYKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1dlYkdMTGF5ZXJDaHJvbWl1bS5jcHAKQEAgLTAs
MCArMSw4NSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMCBHb29nbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorICogbWV0
OgorICoKKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiBjb3B5cmlnaHQgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
CisgKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlCisgKiBkaXN0cmlidXRpb24uCisgKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9m
IEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisgKiBjb250cmlidXRvcnMgbWF5IGJl
IHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorICogdGhp
cyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBB
TkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJ
Q1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlS
SUdIVAorICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERB
VEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKworI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01Q
T1NJVElORykKKworI2luY2x1ZGUgIldlYkdMTGF5ZXJDaHJvbWl1bS5oIgorCisjaW5jbHVkZSAi
R3JhcGhpY3NDb250ZXh0M0QuaCIKKyNpbmNsdWRlICJMYXllclJlbmRlcmVyQ2hyb21pdW0uaCIK
KyNpbmNsdWRlIDxHTEVTMi9nbDIuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitQYXNzUmVm
UHRyPFdlYkdMTGF5ZXJDaHJvbWl1bT4gV2ViR0xMYXllckNocm9taXVtOjpjcmVhdGUoR3JhcGhp
Y3NMYXllckNocm9taXVtKiBvd25lcikKK3sKKyAgICByZXR1cm4gYWRvcHRSZWYobmV3IFdlYkdM
TGF5ZXJDaHJvbWl1bShvd25lcikpOworfQorCitXZWJHTExheWVyQ2hyb21pdW06OldlYkdMTGF5
ZXJDaHJvbWl1bShHcmFwaGljc0xheWVyQ2hyb21pdW0qIG93bmVyKQorICAgIDogQ2FudmFzTGF5
ZXJDaHJvbWl1bShvd25lcikKKyAgICAsIG1fY29udGV4dCgwKQoreworfQorCit2b2lkIFdlYkdM
TGF5ZXJDaHJvbWl1bTo6dXBkYXRlQ29udGVudHMoKQoreworICAgIEFTU0VSVChtX2NvbnRleHQp
OworICAgIGlmIChtX3RleHR1cmVDaGFuZ2VkKSB7CisgICAgICAgIGdsQmluZFRleHR1cmUoR0xf
VEVYVFVSRV8yRCwgbV90ZXh0dXJlSWQpOworICAgICAgICAvLyBTZXQgdGhlIG1pbi1tYWcgZmls
dGVycyB0byBsaW5lYXIgYW5kIHdyYXAgbW9kZXMgdG8gR0xfQ0xBTVBfVE9fRURHRQorICAgICAg
ICAvLyB0byBnZXQgYXJvdW5kIE5QT1QgdGV4dHVyZSBsaW1pdGF0aW9ucyBvZiBHTEVTLgorICAg
ICAgICBnbFRleFBhcmFtZXRlcmYoR0xfVEVYVFVSRV8yRCwgR0xfVEVYVFVSRV9NSU5fRklMVEVS
LCBHTF9MSU5FQVIpOworICAgICAgICBnbFRleFBhcmFtZXRlcmYoR0xfVEVYVFVSRV8yRCwgR0xf
VEVYVFVSRV9NQUdfRklMVEVSLCBHTF9MSU5FQVIpOworICAgICAgICBnbFRleFBhcmFtZXRlcmYo
R0xfVEVYVFVSRV8yRCwgR0xfVEVYVFVSRV9XUkFQX1MsIEdMX0NMQU1QX1RPX0VER0UpOworICAg
ICAgICBnbFRleFBhcmFtZXRlcmYoR0xfVEVYVFVSRV8yRCwgR0xfVEVYVFVSRV9XUkFQX1QsIEdM
X0NMQU1QX1RPX0VER0UpOworICAgICAgICBtX3RleHR1cmVDaGFuZ2VkID0gZmFsc2U7CisgICAg
fQorICAgIC8vIFVwZGF0ZSB0aGUgY29udGVudHMgb2YgdGhlIHRleHR1cmUgdXNlZCBieSB0aGUg
Y29tcG9zaXRvci4KKyAgICBpZiAobV9jb250ZW50c0RpcnR5KSB7CisgICAgICAgIG1fY29udGV4
dC0+cHJlcGFyZVRleHR1cmUoKTsKKyAgICAgICAgbV9jb250ZW50c0RpcnR5ID0gZmFsc2U7Cisg
ICAgfQorfQorCit2b2lkIFdlYkdMTGF5ZXJDaHJvbWl1bTo6c2V0Q29udGV4dChjb25zdCBHcmFw
aGljc0NvbnRleHQzRCogY29udGV4dCkKK3sKKyAgICBtX2NvbnRleHQgPSBjb25zdF9jYXN0PEdy
YXBoaWNzQ29udGV4dDNEKj4oY29udGV4dCk7CisKKyAgICB1bnNpZ25lZCBpbnQgdGV4dHVyZUlk
ID0gbV9jb250ZXh0LT5wbGF0Zm9ybVRleHR1cmUoKTsKKyAgICBpZiAodGV4dHVyZUlkICE9IG1f
dGV4dHVyZUlkKQorICAgICAgICBtX3RleHR1cmVDaGFuZ2VkID0gdHJ1ZTsKKyAgICBtX3RleHR1
cmVJZCA9IHRleHR1cmVJZDsKK30KKworfQorI2VuZGlmIC8vIFVTRShBQ0NFTEVSQVRFRF9DT01Q
T1NJVElORykKZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0v
V2ViR0xMYXllckNocm9taXVtLmggYi9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVt
L1dlYkdMTGF5ZXJDaHJvbWl1bS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjExYjhkYjdlNjExNzMwZDBjZDc3ZDNl
YjY4MTQ4NTM3ZTFhZjRkMWIKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2Nocm9taXVtL1dlYkdMTGF5ZXJDaHJvbWl1bS5oCkBAIC0wLDAgKzEsNjAgQEAKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyAqIG1ldDoKKyAqCisgKiAgICAg
KiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorICogaW4gdGhlIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICog
ZGlzdHJpYnV0aW9uLgorICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBu
b3IgdGhlIG5hbWVzIG9mIGl0cworICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9y
c2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyAqIHRoaXMgc29mdHdhcmUgd2l0
aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9S
UworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIE9XTkVS
IE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRT
OyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAq
IFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisKKyNp
Zm5kZWYgV2ViR0xMYXllckNocm9taXVtX2gKKyNkZWZpbmUgV2ViR0xMYXllckNocm9taXVtX2gK
KworI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKKworI2luY2x1ZGUgIkNhbnZhc0xh
eWVyQ2hyb21pdW0uaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBHcmFwaGljc0Nv
bnRleHQzRDsKKworLy8gQSBMYXllciBjb250YWluaW5nIGEgV2ViR0wgY2FudmFzCitjbGFzcyBX
ZWJHTExheWVyQ2hyb21pdW0gOiBwdWJsaWMgQ2FudmFzTGF5ZXJDaHJvbWl1bSB7CitwdWJsaWM6
CisgICAgc3RhdGljIFBhc3NSZWZQdHI8V2ViR0xMYXllckNocm9taXVtPiBjcmVhdGUoR3JhcGhp
Y3NMYXllckNocm9taXVtKiBvd25lciA9IDApOworICAgIHZpcnR1YWwgYm9vbCBkcmF3c0NvbnRl
bnQoKSB7IHJldHVybiBtX2NvbnRleHQ7IH0KKyAgICB2aXJ0dWFsIHZvaWQgdXBkYXRlQ29udGVu
dHMoKTsKKworICAgIHZvaWQgc2V0Q29udGV4dChjb25zdCBHcmFwaGljc0NvbnRleHQzRCogY29u
dGV4dCk7CisKK3ByaXZhdGU6CisgICAgZXhwbGljaXQgV2ViR0xMYXllckNocm9taXVtKEdyYXBo
aWNzTGF5ZXJDaHJvbWl1bSogb3duZXIpOworICAgIEdyYXBoaWNzQ29udGV4dDNEKiBtX2NvbnRl
eHQ7Cit9OworCit9CisjZW5kaWYgLy8gVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQorCisj
ZW5kaWYKZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3B1L0RyYXdpbmdC
dWZmZXIuY3BwIGIvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ncHUvRHJhd2luZ0J1ZmZlci5j
cHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMC4uNzk4MWQzODRkYzhhNDE1MGUxOGEyZjdhNDFmMDQ0NGEzNjI4NGQ4MQot
LS0gL2Rldi9udWxsCisrKyBiL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3B1L0RyYXdpbmdC
dWZmZXIuY3BwCkBAIC0wLDAgKzEsNjAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMTAsIEdv
b2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMgYXJlCisgKiBtZXQ6CisgKgorICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAgICAq
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUK
KyAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIKKyAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqIGRpc3RyaWJ1dGlvbi4KKyAqICAgICAqIE5l
aXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqIGNv
bnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVy
aXZlZCBmcm9tCisgKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRl
biBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENP
UFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVE
IFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVO
VCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1Q
TEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJ
TUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorCisjaW5jbHVk
ZSAiRHJhd2luZ0J1ZmZlci5oIgorCisjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0M0QuaCIKKyNp
bmNsdWRlICJTaGFyZWRDb250ZXh0M0QuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitQYXNz
UmVmUHRyPERyYXdpbmdCdWZmZXI+IERyYXdpbmdCdWZmZXI6OmNyZWF0ZShTaGFyZWRDb250ZXh0
M0QqIGNvbnRleHQsIGNvbnN0IEludFNpemUmIHNpemUpCit7CisgICAgdW5zaWduZWQgZnJhbWVi
dWZmZXIgPSBjb250ZXh0LT5jcmVhdGVGcmFtZWJ1ZmZlcigpOworICAgIEFTU0VSVChmcmFtZWJ1
ZmZlcik7CisgICAgaWYgKCFmcmFtZWJ1ZmZlcikKKyAgICAgICAgcmV0dXJuIDA7CisgICAgcmV0
dXJuIGFkb3B0UmVmKG5ldyBEcmF3aW5nQnVmZmVyKGNvbnRleHQsIHNpemUsIGZyYW1lYnVmZmVy
KSk7Cit9CisKK3ZvaWQgRHJhd2luZ0J1ZmZlcjo6YmluZCgpCit7CisgICAgbV9jb250ZXh0LT5i
aW5kRnJhbWVidWZmZXIobV9mcmFtZWJ1ZmZlcik7CisgICAgbV9jb250ZXh0LT5zZXRWaWV3cG9y
dChtX3NpemUpOworfQorCit2b2lkIERyYXdpbmdCdWZmZXI6OnNldFdpbGxQdWJsaXNoQ2FsbGJh
Y2soUGFzc093blB0cjxXaWxsUHVibGlzaENhbGxiYWNrPiBjYWxsYmFjaykKK3sKKyAgICBtX2Nh
bGxiYWNrID0gY2FsbGJhY2s7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdp
dCBhL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3B1L0RyYXdpbmdCdWZmZXIuaCBiL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3B1L0RyYXdpbmdCdWZmZXIuaApuZXcgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4xMzIz
MGQwZDFkNjFiOWNmMWFhZWU5NGIxM2VlZjgxYjYxZTQwOGQzCi0tLSAvZGV2L251bGwKKysrIGIv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ncHUvRHJhd2luZ0J1ZmZlci5oCkBAIC0wLDAgKzEs
NzcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMTAsIEdvb2dsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisgKiBtZXQ6Cisg
KgorICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyAq
IGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUKKyAqIGRpc3RyaWJ1dGlvbi4KKyAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29v
Z2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNl
ZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisgKiB0aGlzIHNv
ZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBD
T05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxB
UiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hU
CisgKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorICogREFUQSwg
T1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisg
Ki8KKworI2lmbmRlZiBEcmF3aW5nQnVmZmVyX2gKKyNkZWZpbmUgRHJhd2luZ0J1ZmZlcl9oCisK
KyNpbmNsdWRlICJHcmFwaGljc0xheWVyLmgiCisjaW5jbHVkZSAiSW50U2l6ZS5oIgorCisjaW5j
bHVkZSA8d3RmL093blB0ci5oPgorI2luY2x1ZGUgPHd0Zi9QYXNzT3duUHRyLmg+CisjaW5jbHVk
ZSA8d3RmL1JlZkNvdW50ZWQuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBTaGFy
ZWRDb250ZXh0M0Q7CisKK3N0cnVjdCBEcmF3aW5nQnVmZmVySW50ZXJuYWw7CisKKy8vIE1hbmFn
ZXMgYSByZW5kZXJpbmcgdGFyZ2V0IChmcmFtZWJ1ZmZlciArIGF0dGFjaG1lbnQpIGZvciBhIGNh
bnZhcy4gIENhbiBwdWJsaXNoIGl0cyByZW5kZXJpbmcKKy8vIHJlc3VsdHMgdG8gYSBQbGF0Zm9y
bUxheWVyIGZvciBjb21wb3NpdGluZy4KK2NsYXNzIERyYXdpbmdCdWZmZXIgOiBwdWJsaWMgUmVm
Q291bnRlZDxEcmF3aW5nQnVmZmVyPiB7CitwdWJsaWM6CisgICAgc3RhdGljIFBhc3NSZWZQdHI8
RHJhd2luZ0J1ZmZlcj4gY3JlYXRlKFNoYXJlZENvbnRleHQzRCosIGNvbnN0IEludFNpemUmKTsK
KyAgICB+RHJhd2luZ0J1ZmZlcigpOworCisgICAgdm9pZCBiaW5kKCk7CisgICAgdm9pZCBwdWJs
aXNoVG9QbGF0Zm9ybUxheWVyKFBsYXRmb3JtTGF5ZXIqKTsKKyAgICBJbnRTaXplIHNpemUoKSBj
b25zdCB7IHJldHVybiBtX3NpemU7IH0KKworICAgIGNsYXNzIFdpbGxQdWJsaXNoQ2FsbGJhY2sg
OiBwdWJsaWMgTm9uY29weWFibGUgeworICAgIHB1YmxpYzoKKyAgICAgICAgdmlydHVhbCB2b2lk
IHdpbGxQdWJsaXNoKCkgPSAwOworICAgIH07CisKKyAgICB2b2lkIHNldFdpbGxQdWJsaXNoQ2Fs
bGJhY2soUGFzc093blB0cjxXaWxsUHVibGlzaENhbGxiYWNrPik7Citwcml2YXRlOgorICAgIERy
YXdpbmdCdWZmZXIoU2hhcmVkQ29udGV4dDNEKiwgY29uc3QgSW50U2l6ZSYsIHVuc2lnbmVkIGZy
YW1lYnVmZmVyKTsKKworICAgIFNoYXJlZENvbnRleHQzRCogbV9jb250ZXh0OworICAgIEludFNp
emUgbV9zaXplOworICAgIHVuc2lnbmVkIG1fZnJhbWVidWZmZXI7CisKKyAgICBPd25QdHI8V2ls
bFB1Ymxpc2hDYWxsYmFjaz4gbV9jYWxsYmFjazsKKyAgICBPd25QdHI8RHJhd2luZ0J1ZmZlcklu
dGVybmFsPiBtX2ludGVybmFsOworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5k
aWYgLy8gRHJhd2luZ0J1ZmZlcl9oCmRpZmYgLS1naXQgYS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2dwdS9TaGFyZWRDb250ZXh0M0QuY3BwIGIvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9n
cHUvU2hhcmVkQ29udGV4dDNELmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4yZDZmNDQwMmFhNWUzNzhjYzlhNzhm
MzQ0Zjc2OTg0M2NhYTUyZWE2Ci0tLSAvZGV2L251bGwKKysrIGIvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9ncHUvU2hhcmVkQ29udGV4dDNELmNwcApAQCAtMCwwICsxLDI5NiBAQAorLyoKKyAq
IENvcHlyaWdodCAoYykgMjAxMCwgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyAqIG1ldDoKKyAqCisgKiAgICAgKiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorICogaW4gdGhlIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogZGlz
dHJpYnV0aW9uLgorICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3Ig
dGhlIG5hbWVzIG9mIGl0cworICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ug
b3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyAqIHRoaXMgc29mdHdhcmUgd2l0aG91
dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwor
ICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIE9XTkVSIE9S
IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBP
UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRI
RU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVk
ZSAiY29uZmlnLmgiCisKKyNpbmNsdWRlICJTaGFyZWRDb250ZXh0M0QuaCIKKworI2luY2x1ZGUg
IkFmZmluZVRyYW5zZm9ybS5oIgorI2luY2x1ZGUgIkNvbG9yLmgiCisjaW5jbHVkZSAiRmxvYXRS
ZWN0LmgiCisjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0M0QuaCIKKyNpbmNsdWRlICJHcmFwaGlj
c1R5cGVzLmgiCisjaW5jbHVkZSAiSW50U2l6ZS5oIgorI2luY2x1ZGUgIlNvbGlkRmlsbFNoYWRl
ci5oIgorI2luY2x1ZGUgIlRleFNoYWRlci5oIgorCisjaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmlu
Zy5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgorCituYW1lc3BhY2UgV2ViQ29y
ZSB7CisKKy8vIHN0YXRpYworUGFzc1JlZlB0cjxTaGFyZWRDb250ZXh0M0Q+IFNoYXJlZENvbnRl
eHQzRDo6Y3JlYXRlKFBhc3NPd25QdHI8R3JhcGhpY3NDb250ZXh0M0Q+IGNvbnRleHQpCit7Cisg
ICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBTaGFyZWRDb250ZXh0M0QoY29udGV4dCkpOworfQorCitT
aGFyZWRDb250ZXh0M0Q6OlNoYXJlZENvbnRleHQzRChQYXNzT3duUHRyPEdyYXBoaWNzQ29udGV4
dDNEPiBjb250ZXh0KQorICAgIDogbV9jb250ZXh0KGNvbnRleHQpCisgICAgLCBtX3F1YWRWZXJ0
aWNlcygwKQorICAgICwgbV9zb2xpZEZpbGxTaGFkZXIoU29saWRGaWxsU2hhZGVyOjpjcmVhdGUo
bV9jb250ZXh0LmdldCgpKSkKKyAgICAsIG1fdGV4U2hhZGVyKFRleFNoYWRlcjo6Y3JlYXRlKG1f
Y29udGV4dC5nZXQoKSkpCit7Cit9CisKK1NoYXJlZENvbnRleHQzRDo6flNoYXJlZENvbnRleHQz
RCgpCit7CisgICAgbV9jb250ZXh0LT5kZWxldGVCdWZmZXIobV9xdWFkVmVydGljZXMpOworfQor
Cit2b2lkIFNoYXJlZENvbnRleHQzRDo6bWFrZUNvbnRleHRDdXJyZW50KCkKK3sKKyAgICBtX2Nv
bnRleHQtPm1ha2VDb250ZXh0Q3VycmVudCgpOworfQorCit2b2lkIFNoYXJlZENvbnRleHQzRDo6
c2Npc3Nvcihjb25zdCBGbG9hdFJlY3QmIHJlY3QpCit7CisgICAgbV9jb250ZXh0LT5zY2lzc29y
KHJlY3QueCgpLCByZWN0LnkoKSwgcmVjdC53aWR0aCgpLCByZWN0LmhlaWdodCgpKTsKK30KKwor
dm9pZCBTaGFyZWRDb250ZXh0M0Q6OmVuYWJsZSh1bnNpZ25lZCBjYXBhY2l0eSkKK3sKKyAgICBt
X2NvbnRleHQtPmVuYWJsZShjYXBhY2l0eSk7Cit9CisKK3ZvaWQgU2hhcmVkQ29udGV4dDNEOjpk
aXNhYmxlKHVuc2lnbmVkIGNhcGFjaXR5KQoreworICAgIG1fY29udGV4dC0+ZGlzYWJsZShjYXBh
Y2l0eSk7Cit9CisKK3ZvaWQgU2hhcmVkQ29udGV4dDNEOjpjbGVhckNvbG9yKGNvbnN0IENvbG9y
JiBjb2xvcikKK3sKKyAgICBmbG9hdCByZ2JhWzRdOworICAgIGNvbG9yLmdldFJHQkEocmdiYVsw
XSwgcmdiYVsxXSwgcmdiYVsyXSwgcmdiYVszXSk7CisgICAgbV9jb250ZXh0LT5jbGVhckNvbG9y
KHJnYmFbMF0sIHJnYmFbMV0sIHJnYmFbMl0sIHJnYmFbM10pOworfQorCit2b2lkIFNoYXJlZENv
bnRleHQzRDo6Y2xlYXIodW5zaWduZWQgbWFzaykKK3sKKyAgICBtX2NvbnRleHQtPmNsZWFyKG1h
c2spOworfQorCit2b2lkIFNoYXJlZENvbnRleHQzRDo6ZHJhd0FycmF5cyh1bnNpZ25lZCBsb25n
IG1vZGUsIGxvbmcgZmlyc3QsIGxvbmcgY291bnQpCit7CisgICAgbV9jb250ZXh0LT5kcmF3QXJy
YXlzKG1vZGUsIGZpcnN0LCBjb3VudCk7Cit9CisKK3Vuc2lnbmVkIGxvbmcgU2hhcmVkQ29udGV4
dDNEOjpnZXRFcnJvcigpCit7CisgICAgcmV0dXJuIG1fY29udGV4dC0+Z2V0RXJyb3IoKTsKK30K
Kwordm9pZCBTaGFyZWRDb250ZXh0M0Q6OmdldEludGVnZXJ2KHVuc2lnbmVkIGxvbmcgcG5hbWUs
IGludCogdmFsdWUpCit7CisgICAgbV9jb250ZXh0LT5nZXRJbnRlZ2VydihwbmFtZSwgdmFsdWUp
OworfQorCit1bnNpZ25lZCBTaGFyZWRDb250ZXh0M0Q6OmNyZWF0ZUZyYW1lYnVmZmVyKCkKK3sK
KyAgICByZXR1cm4gbV9jb250ZXh0LT5jcmVhdGVGcmFtZWJ1ZmZlcigpOworfQorCit1bnNpZ25l
ZCBTaGFyZWRDb250ZXh0M0Q6OmNyZWF0ZVRleHR1cmUoKQoreworICAgIHJldHVybiBtX2NvbnRl
eHQtPmNyZWF0ZVRleHR1cmUoKTsKK30KKwordm9pZCBTaGFyZWRDb250ZXh0M0Q6OmRlbGV0ZUZy
YW1lYnVmZmVyKHVuc2lnbmVkIGZyYW1lYnVmZmVyKQoreworICAgIG1fY29udGV4dC0+ZGVsZXRl
RnJhbWVidWZmZXIoZnJhbWVidWZmZXIpOworfQorCit2b2lkIFNoYXJlZENvbnRleHQzRDo6ZGVs
ZXRlVGV4dHVyZSh1bnNpZ25lZCB0ZXh0dXJlKQoreworICAgIG1fY29udGV4dC0+ZGVsZXRlVGV4
dHVyZSh0ZXh0dXJlKTsKK30KKwordm9pZCBTaGFyZWRDb250ZXh0M0Q6OmZyYW1lYnVmZmVyVGV4
dHVyZTJEKHVuc2lnbmVkIGxvbmcgdGFyZ2V0LCB1bnNpZ25lZCBsb25nIGF0dGFjaG1lbnQsIHVu
c2lnbmVkIGxvbmcgdGV4dGFyZ2V0LCB1bnNpZ25lZCB0ZXh0dXJlLCBsb25nIGxldmVsKQorewor
ICAgIG1fY29udGV4dC0+ZnJhbWVidWZmZXJUZXh0dXJlMkQodGFyZ2V0LCBhdHRhY2htZW50LCB0
ZXh0YXJnZXQsIHRleHR1cmUsIGxldmVsKTsKK30KKwordm9pZCBTaGFyZWRDb250ZXh0M0Q6OnRl
eFBhcmFtZXRlcmkodW5zaWduZWQgdGFyZ2V0LCB1bnNpZ25lZCBwbmFtZSwgaW50IHBhcmFtKQor
eworICAgIG1fY29udGV4dC0+dGV4UGFyYW1ldGVyaSh0YXJnZXQsIHBuYW1lLCBwYXJhbSk7Cit9
CisKK2ludCBTaGFyZWRDb250ZXh0M0Q6OnRleEltYWdlMkQodW5zaWduZWQgdGFyZ2V0LCB1bnNp
Z25lZCBsZXZlbCwgdW5zaWduZWQgaW50ZXJuYWxmb3JtYXQsIHVuc2lnbmVkIHdpZHRoLCB1bnNp
Z25lZCBoZWlnaHQsIHVuc2lnbmVkIGJvcmRlciwgdW5zaWduZWQgZm9ybWF0LCB1bnNpZ25lZCB0
eXBlLCB2b2lkKiBwaXhlbHMpCit7CisgICAgbV9jb250ZXh0LT50ZXhJbWFnZTJEKHRhcmdldCwg
bGV2ZWwsIGludGVybmFsZm9ybWF0LCB3aWR0aCwgaGVpZ2h0LCBib3JkZXIsIGZvcm1hdCwgdHlw
ZSwgcGl4ZWxzKTsKK30KKworaW50IFNoYXJlZENvbnRleHQzRDo6dGV4U3ViSW1hZ2UyRCh1bnNp
Z25lZCB0YXJnZXQsIHVuc2lnbmVkIGxldmVsLCB1bnNpZ25lZCB4b2Zmc2V0LCB1bnNpZ25lZCB5
b2Zmc2V0LCB1bnNpZ25lZCB3aWR0aCwgdW5zaWduZWQgaGVpZ2h0LCB1bnNpZ25lZCBmb3JtYXQs
IHVuc2lnbmVkIHR5cGUsIHZvaWQqIHBpeGVscykKK3sKKyAgICBtX2NvbnRleHQtPnRleFN1Yklt
YWdlMkQodGFyZ2V0LCBsZXZlbCwgeG9mZnNldCwgeW9mZnNldCwgd2lkdGgsIGhlaWdodCwgZm9y
bWF0LCB0eXBlLCBwaXhlbHMpOworfQorCit2b2lkIFNoYXJlZENvbnRleHQzRDo6cmVhZFBpeGVs
cyhsb25nIHgsIGxvbmcgeSwgdW5zaWduZWQgbG9uZyB3aWR0aCwgdW5zaWduZWQgbG9uZyBoZWln
aHQsIHVuc2lnbmVkIGxvbmcgZm9ybWF0LCB1bnNpZ25lZCBsb25nIHR5cGUsIHZvaWQqIGRhdGEp
Cit7CisgICAgbV9jb250ZXh0LT5yZWFkUGl4ZWxzKHgsIHksIHdpZHRoLCBoZWlnaHQsIGZvcm1h
dCwgdHlwZSwgZGF0YSk7Cit9CisKK2Jvb2wgU2hhcmVkQ29udGV4dDNEOjpzdXBwb3J0c0JHUkEo
KQoreworICAgIHJldHVybiBtX2NvbnRleHQtPnN1cHBvcnRzQkdSQSgpOworfQorCitUZXh0dXJl
KiBTaGFyZWRDb250ZXh0M0Q6OmNyZWF0ZVRleHR1cmUoTmF0aXZlSW1hZ2VQdHIgcHRyLCBUZXh0
dXJlOjpGb3JtYXQgZm9ybWF0LCBpbnQgd2lkdGgsIGludCBoZWlnaHQpCit7CisgICAgUmVmUHRy
PFRleHR1cmU+IHRleHR1cmUgPSBtX3RleHR1cmVzLmdldChwdHIpOworICAgIGlmICh0ZXh0dXJl
KQorICAgICAgICByZXR1cm4gdGV4dHVyZS5nZXQoKTsKKworICAgIHRleHR1cmUgPSBUZXh0dXJl
OjpjcmVhdGUobV9jb250ZXh0LmdldCgpLCBmb3JtYXQsIHdpZHRoLCBoZWlnaHQpOworICAgIFRl
eHR1cmUqIHQgPSB0ZXh0dXJlLmdldCgpOworICAgIG1fdGV4dHVyZXMuc2V0KHB0ciwgdGV4dHVy
ZSk7CisgICAgcmV0dXJuIHQ7Cit9CisKK1RleHR1cmUqIFNoYXJlZENvbnRleHQzRDo6Z2V0VGV4
dHVyZShOYXRpdmVJbWFnZVB0ciBwdHIpCit7CisgICAgUmVmUHRyPFRleHR1cmU+IHRleHR1cmUg
PSBtX3RleHR1cmVzLmdldChwdHIpOworICAgIHJldHVybiB0ZXh0dXJlID8gdGV4dHVyZS5nZXQo
KSA6IDA7Cit9CisKK1Bhc3NSZWZQdHI8VGV4dHVyZT4gU2hhcmVkQ29udGV4dDNEOjpjcmVhdGVU
ZXh0dXJlKFRleHR1cmU6OkZvcm1hdCBmb3JtYXQsIGludCB3aWR0aCwgaW50IGhlaWdodCkKK3sK
KyAgICByZXR1cm4gVGV4dHVyZTo6Y3JlYXRlKG1fY29udGV4dC5nZXQoKSwgZm9ybWF0LCB3aWR0
aCwgaGVpZ2h0KTsKK30KKwordm9pZCBTaGFyZWRDb250ZXh0M0Q6OmFwcGx5Q29tcG9zaXRlT3Bl
cmF0b3IoQ29tcG9zaXRlT3BlcmF0b3Igb3ApCit7CisgICAgc3dpdGNoIChvcCkgeworICAgIGNh
c2UgQ29tcG9zaXRlQ2xlYXI6CisgICAgICAgIG1fY29udGV4dC0+ZW5hYmxlKEdyYXBoaWNzQ29u
dGV4dDNEOjpCTEVORCk7CisgICAgICAgIG1fY29udGV4dC0+YmxlbmRGdW5jKEdyYXBoaWNzQ29u
dGV4dDNEOjpaRVJPLCBHcmFwaGljc0NvbnRleHQzRDo6WkVSTyk7CisgICAgICAgIGJyZWFrOwor
ICAgIGNhc2UgQ29tcG9zaXRlQ29weToKKyAgICAgICAgbV9jb250ZXh0LT5kaXNhYmxlKEdyYXBo
aWNzQ29udGV4dDNEOjpCTEVORCk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgQ29tcG9zaXRl
U291cmNlT3ZlcjoKKyAgICAgICAgbV9jb250ZXh0LT5lbmFibGUoR3JhcGhpY3NDb250ZXh0M0Q6
OkJMRU5EKTsKKyAgICAgICAgbV9jb250ZXh0LT5ibGVuZEZ1bmMoR3JhcGhpY3NDb250ZXh0M0Q6
Ok9ORSwgR3JhcGhpY3NDb250ZXh0M0Q6Ok9ORV9NSU5VU19TUkNfQUxQSEEpOworICAgICAgICBi
cmVhazsKKyAgICBjYXNlIENvbXBvc2l0ZVNvdXJjZUluOgorICAgICAgICBtX2NvbnRleHQtPmVu
YWJsZShHcmFwaGljc0NvbnRleHQzRDo6QkxFTkQpOworICAgICAgICBtX2NvbnRleHQtPmJsZW5k
RnVuYyhHcmFwaGljc0NvbnRleHQzRDo6RFNUX0FMUEhBLCBHcmFwaGljc0NvbnRleHQzRDo6WkVS
Tyk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgQ29tcG9zaXRlU291cmNlT3V0OgorICAgICAg
ICBtX2NvbnRleHQtPmVuYWJsZShHcmFwaGljc0NvbnRleHQzRDo6QkxFTkQpOworICAgICAgICBt
X2NvbnRleHQtPmJsZW5kRnVuYyhHcmFwaGljc0NvbnRleHQzRDo6T05FX01JTlVTX0RTVF9BTFBI
QSwgR3JhcGhpY3NDb250ZXh0M0Q6OlpFUk8pOworICAgICAgICBicmVhazsKKyAgICBjYXNlIENv
bXBvc2l0ZVNvdXJjZUF0b3A6CisgICAgICAgIG1fY29udGV4dC0+ZW5hYmxlKEdyYXBoaWNzQ29u
dGV4dDNEOjpCTEVORCk7CisgICAgICAgIG1fY29udGV4dC0+YmxlbmRGdW5jKEdyYXBoaWNzQ29u
dGV4dDNEOjpEU1RfQUxQSEEsIEdyYXBoaWNzQ29udGV4dDNEOjpPTkVfTUlOVVNfU1JDX0FMUEhB
KTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBDb21wb3NpdGVEZXN0aW5hdGlvbk92ZXI6Cisg
ICAgICAgIG1fY29udGV4dC0+ZW5hYmxlKEdyYXBoaWNzQ29udGV4dDNEOjpCTEVORCk7CisgICAg
ICAgIG1fY29udGV4dC0+YmxlbmRGdW5jKEdyYXBoaWNzQ29udGV4dDNEOjpPTkVfTUlOVVNfRFNU
X0FMUEhBLCBHcmFwaGljc0NvbnRleHQzRDo6T05FKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2Fz
ZSBDb21wb3NpdGVEZXN0aW5hdGlvbkluOgorICAgICAgICBtX2NvbnRleHQtPmVuYWJsZShHcmFw
aGljc0NvbnRleHQzRDo6QkxFTkQpOworICAgICAgICBtX2NvbnRleHQtPmJsZW5kRnVuYyhHcmFw
aGljc0NvbnRleHQzRDo6WkVSTywgR3JhcGhpY3NDb250ZXh0M0Q6OlNSQ19BTFBIQSk7CisgICAg
ICAgIGJyZWFrOworICAgIGNhc2UgQ29tcG9zaXRlRGVzdGluYXRpb25PdXQ6CisgICAgICAgIG1f
Y29udGV4dC0+ZW5hYmxlKEdyYXBoaWNzQ29udGV4dDNEOjpCTEVORCk7CisgICAgICAgIG1fY29u
dGV4dC0+YmxlbmRGdW5jKEdyYXBoaWNzQ29udGV4dDNEOjpaRVJPLCBHcmFwaGljc0NvbnRleHQz
RDo6T05FX01JTlVTX1NSQ19BTFBIQSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgQ29tcG9z
aXRlRGVzdGluYXRpb25BdG9wOgorICAgICAgICBtX2NvbnRleHQtPmVuYWJsZShHcmFwaGljc0Nv
bnRleHQzRDo6QkxFTkQpOworICAgICAgICBtX2NvbnRleHQtPmJsZW5kRnVuYyhHcmFwaGljc0Nv
bnRleHQzRDo6T05FX01JTlVTX0RTVF9BTFBIQSwgR3JhcGhpY3NDb250ZXh0M0Q6OlNSQ19BTFBI
QSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgQ29tcG9zaXRlWE9SOgorICAgICAgICBtX2Nv
bnRleHQtPmVuYWJsZShHcmFwaGljc0NvbnRleHQzRDo6QkxFTkQpOworICAgICAgICBtX2NvbnRl
eHQtPmJsZW5kRnVuYyhHcmFwaGljc0NvbnRleHQzRDo6T05FX01JTlVTX0RTVF9BTFBIQSwgR3Jh
cGhpY3NDb250ZXh0M0Q6Ok9ORV9NSU5VU19TUkNfQUxQSEEpOworICAgICAgICBicmVhazsKKyAg
ICBjYXNlIENvbXBvc2l0ZVBsdXNEYXJrZXI6CisgICAgY2FzZSBDb21wb3NpdGVIaWdobGlnaHQ6
CisgICAgICAgIC8vIHVuc3VwcG9ydGVkCisgICAgICAgIG1fY29udGV4dC0+ZGlzYWJsZShHcmFw
aGljc0NvbnRleHQzRDo6QkxFTkQpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIENvbXBvc2l0
ZVBsdXNMaWdodGVyOgorICAgICAgICBtX2NvbnRleHQtPmVuYWJsZShHcmFwaGljc0NvbnRleHQz
RDo6QkxFTkQpOworICAgICAgICBtX2NvbnRleHQtPmJsZW5kRnVuYyhHcmFwaGljc0NvbnRleHQz
RDo6T05FLCBHcmFwaGljc0NvbnRleHQzRDo6T05FKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQor
fQorCit2b2lkIFNoYXJlZENvbnRleHQzRDo6dXNlUXVhZFZlcnRpY2VzKCkKK3sKKyAgICBpZiAo
IW1fcXVhZFZlcnRpY2VzKSB7CisgICAgICAgIGZsb2F0IHZlcnRpY2VzW10gPSB7IDAuMGYsIDAu
MGYsIDEuMGYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEuMGYsIDAuMGYsIDEuMGYs
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAuMGYsIDEuMGYsIDEuMGYsCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIDEuMGYsIDEuMGYsIDEuMGYgfTsKKyAgICAgICAgbV9xdWFk
VmVydGljZXMgPSBtX2NvbnRleHQtPmNyZWF0ZUJ1ZmZlcigpOworICAgICAgICBtX2NvbnRleHQt
PmJpbmRCdWZmZXIoR3JhcGhpY3NDb250ZXh0M0Q6OkFSUkFZX0JVRkZFUiwgbV9xdWFkVmVydGlj
ZXMpOworICAgICAgICBtX2NvbnRleHQtPmJ1ZmZlckRhdGEoR3JhcGhpY3NDb250ZXh0M0Q6OkFS
UkFZX0JVRkZFUiwgc2l6ZW9mKHZlcnRpY2VzKSwgdmVydGljZXMsIEdyYXBoaWNzQ29udGV4dDNE
OjpTVEFUSUNfRFJBVyk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgbV9jb250ZXh0LT5iaW5kQnVm
ZmVyKEdyYXBoaWNzQ29udGV4dDNEOjpBUlJBWV9CVUZGRVIsIG1fcXVhZFZlcnRpY2VzKTsKKyAg
ICB9Cit9CisKK3ZvaWQgU2hhcmVkQ29udGV4dDNEOjpzZXRBY3RpdmVUZXh0dXJlKHVuc2lnbmVk
IHRleHR1cmVVbml0KQoreworICAgIG1fY29udGV4dC0+YWN0aXZlVGV4dHVyZSh0ZXh0dXJlVW5p
dCk7Cit9CisKK3ZvaWQgU2hhcmVkQ29udGV4dDNEOjpiaW5kVGV4dHVyZSh1bnNpZ25lZCB0YXJn
ZXQsIHVuc2lnbmVkIHRleHR1cmUpCit7CisgICAgbV9jb250ZXh0LT5iaW5kVGV4dHVyZSh0YXJn
ZXQsIHRleHR1cmUpOworfQorCit2b2lkIFNoYXJlZENvbnRleHQzRDo6dXNlRmlsbFNvbGlkUHJv
Z3JhbShjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHRyYW5zZm9ybSwgY29uc3QgQ29sb3ImIGNvbG9y
KQoreworICAgIG1fc29saWRGaWxsU2hhZGVyLT51c2UodHJhbnNmb3JtLCBjb2xvcik7Cit9CisK
K3ZvaWQgU2hhcmVkQ29udGV4dDNEOjp1c2VUZXh0dXJlUHJvZ3JhbShjb25zdCBBZmZpbmVUcmFu
c2Zvcm0mIHRyYW5zZm9ybSwgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiB0ZXhUcmFuc2Zvcm0sIGZs
b2F0IGFscGhhKQoreworICAgIG1fdGV4U2hhZGVyLT51c2UodHJhbnNmb3JtLCB0ZXhUcmFuc2Zv
cm0sIDAsIGFscGhhKTsKK30KKwordm9pZCBTaGFyZWRDb250ZXh0M0Q6OmJpbmRGcmFtZWJ1ZmZl
cih1bnNpZ25lZCBmcmFtZWJ1ZmZlcikKK3sKKyAgICBtX2NvbnRleHQtPmJpbmRGcmFtZWJ1ZmZl
cihHcmFwaGljc0NvbnRleHQzRDo6RlJBTUVCVUZGRVIsIGZyYW1lYnVmZmVyKTsKK30KKwordm9p
ZCBTaGFyZWRDb250ZXh0M0Q6OnNldFZpZXdwb3J0KGNvbnN0IEludFNpemUmIHNpemUpCit7Cisg
ICAgbV9jb250ZXh0LT52aWV3cG9ydCgwLCAwLCBzaXplLndpZHRoKCksIHNpemUuaGVpZ2h0KCkp
OworfQorCitib29sIFNoYXJlZENvbnRleHQzRDo6cGFpbnRzSW50b0NhbnZhc0J1ZmZlcigpIGNv
bnN0Cit7CisgICAgcmV0dXJuIG1fY29udGV4dC0+cGFpbnRzSW50b0NhbnZhc0J1ZmZlcigpOwor
fQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2dwdS9TaGFyZWRDb250ZXh0M0QuaCBiL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvZ3B1L1NoYXJlZENvbnRleHQzRC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmUzOTkzYzIxOWIyYTk5YjAwODEx
ODU3YzZkOGM5Zjc2MDgyZDI1OTIKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2dwdS9TaGFyZWRDb250ZXh0M0QuaApAQCAtMCwwICsxLDEyNCBAQAorLyoKKyAq
IENvcHlyaWdodCAoYykgMjAxMCwgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyAqIG1ldDoKKyAqCisgKiAgICAgKiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorICogaW4gdGhlIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogZGlz
dHJpYnV0aW9uLgorICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3Ig
dGhlIG5hbWVzIG9mIGl0cworICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ug
b3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyAqIHRoaXMgc29mdHdhcmUgd2l0aG91
dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwor
ICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIE9XTkVSIE9S
IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBP
UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRI
RU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVm
IFNoYXJlZENvbnRleHQzRF9oCisjZGVmaW5lIFNoYXJlZENvbnRleHQzRF9oCisKKyNpbmNsdWRl
ICJHcmFwaGljc1R5cGVzLmgiCisjaW5jbHVkZSAiSW1hZ2VTb3VyY2UuaCIKKyNpbmNsdWRlICJU
ZXh0dXJlLmgiCisKKyNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgorI2luY2x1ZGUgPHd0Zi9Pd25Q
dHIuaD4KKyNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgorI2luY2x1ZGUgPHd0Zi9SZWZQdHIu
aD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBBZmZpbmVUcmFuc2Zvcm07CitjbGFz
cyBDb2xvcjsKK2NsYXNzIEdyYXBoaWNzQ29udGV4dDNEOworY2xhc3MgRmxvYXRSZWN0OworY2xh
c3MgSW50U2l6ZTsKK2NsYXNzIFNvbGlkRmlsbFNoYWRlcjsKK2NsYXNzIFRleFNoYWRlcjsKKwor
dHlwZWRlZiBIYXNoTWFwPE5hdGl2ZUltYWdlUHRyLCBSZWZQdHI8VGV4dHVyZT4gPiBUZXh0dXJl
SGFzaE1hcDsKKworY2xhc3MgU2hhcmVkQ29udGV4dDNEIDogcHVibGljIFJlZkNvdW50ZWQ8U2hh
cmVkQ29udGV4dDNEPiB7CitwdWJsaWM6CisgICAgc3RhdGljIFBhc3NSZWZQdHI8U2hhcmVkQ29u
dGV4dDNEPiBjcmVhdGUoUGFzc093blB0cjxHcmFwaGljc0NvbnRleHQzRD4pOworICAgIH5TaGFy
ZWRDb250ZXh0M0QoKTsKKworICAgIC8vIEZ1bmN0aW9ucyB0aGF0IGRlbGVnYXRlIGRpcmVjdGx5
IHRvIEdyYXBoaWNzQ29udGV4dDNELCB3aXRoIGNhY2hpbmcKKyAgICB2b2lkIG1ha2VDb250ZXh0
Q3VycmVudCgpOworICAgIHZvaWQgYmluZEZyYW1lYnVmZmVyKHVuc2lnbmVkIGZyYW1lYnVmZmVy
KTsKKyAgICB2b2lkIHNldFZpZXdwb3J0KGNvbnN0IEludFNpemUmKTsKKyAgICB2b2lkIHNjaXNz
b3IoY29uc3QgRmxvYXRSZWN0Jik7CisgICAgdm9pZCBlbmFibGUodW5zaWduZWQgY2FwYWNpdHkp
OworICAgIHZvaWQgZGlzYWJsZSh1bnNpZ25lZCBjYXBhY2l0eSk7CisgICAgdm9pZCBjbGVhckNv
bG9yKGNvbnN0IENvbG9yJik7CisgICAgdm9pZCBjbGVhcih1bnNpZ25lZCBtYXNrKTsKKyAgICB2
b2lkIGRyYXdBcnJheXModW5zaWduZWQgbG9uZyBtb2RlLCBsb25nIGZpcnN0LCBsb25nIGNvdW50
KTsKKyAgICB1bnNpZ25lZCBsb25nIGdldEVycm9yKCk7CisgICAgdm9pZCBnZXRJbnRlZ2Vydih1
bnNpZ25lZCBsb25nIHBuYW1lLCBpbnQqIHZhbHVlKTsKKworICAgIHVuc2lnbmVkIGNyZWF0ZUZy
YW1lYnVmZmVyKCk7CisgICAgdW5zaWduZWQgY3JlYXRlVGV4dHVyZSgpOworCisgICAgdm9pZCBk
ZWxldGVGcmFtZWJ1ZmZlcih1bnNpZ25lZCBmcmFtZWJ1ZmZlcik7CisgICAgdm9pZCBkZWxldGVU
ZXh0dXJlKHVuc2lnbmVkIHRleHR1cmUpOworCisgICAgdm9pZCBmcmFtZWJ1ZmZlclRleHR1cmUy
RCh1bnNpZ25lZCBsb25nIHRhcmdldCwgdW5zaWduZWQgbG9uZyBhdHRhY2htZW50LCB1bnNpZ25l
ZCBsb25nIHRleHRhcmdldCwgdW5zaWduZWQsIGxvbmcgbGV2ZWwpOworICAgIHZvaWQgdGV4UGFy
YW1ldGVyaSh1bnNpZ25lZCB0YXJnZXQsIHVuc2lnbmVkIHBuYW1lLCBpbnQgcGFyYW0pOworICAg
IGludCB0ZXhJbWFnZTJEKHVuc2lnbmVkIHRhcmdldCwgdW5zaWduZWQgbGV2ZWwsIHVuc2lnbmVk
IGludGVybmFsZm9ybWF0LCB1bnNpZ25lZCB3aWR0aCwgdW5zaWduZWQgaGVpZ2h0LCB1bnNpZ25l
ZCBib3JkZXIsIHVuc2lnbmVkIGZvcm1hdCwgdW5zaWduZWQgdHlwZSwgdm9pZCogcGl4ZWxzKTsK
KyAgICBpbnQgdGV4U3ViSW1hZ2UyRCh1bnNpZ25lZCB0YXJnZXQsIHVuc2lnbmVkIGxldmVsLCB1
bnNpZ25lZCB4b2Zmc2V0LCB1bnNpZ25lZCB5b2Zmc2V0LCB1bnNpZ25lZCB3aWR0aCwgdW5zaWdu
ZWQgaGVpZ2h0LCB1bnNpZ25lZCBmb3JtYXQsIHVuc2lnbmVkIHR5cGUsIHZvaWQqIHBpeGVscyk7
CisKKyAgICB2b2lkIHJlYWRQaXhlbHMobG9uZyB4LCBsb25nIHksIHVuc2lnbmVkIGxvbmcgd2lk
dGgsIHVuc2lnbmVkIGxvbmcgaGVpZ2h0LCB1bnNpZ25lZCBsb25nIGZvcm1hdCwgdW5zaWduZWQg
bG9uZyB0eXBlLCB2b2lkKiBkYXRhKTsKKworICAgIGJvb2wgcGFpbnRzSW50b0NhbnZhc0J1ZmZl
cigpIGNvbnN0OworCisgICAgLy8gU2hhcmVkIGxvZ2ljIGZvciBjYW52YXMgMmQKKyAgICB2b2lk
IGFwcGx5Q29tcG9zaXRlT3BlcmF0b3IoQ29tcG9zaXRlT3BlcmF0b3IpOworICAgIHZvaWQgdXNl
UXVhZFZlcnRpY2VzKCk7CisKKyAgICB2b2lkIHVzZUZpbGxTb2xpZFByb2dyYW0oY29uc3QgQWZm
aW5lVHJhbnNmb3JtJiwgY29uc3QgQ29sb3ImKTsKKyAgICB2b2lkIHVzZVRleHR1cmVQcm9ncmFt
KGNvbnN0IEFmZmluZVRyYW5zZm9ybSYsIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYsIGZsb2F0IGFs
cGhhKTsKKworICAgIHZvaWQgc2V0QWN0aXZlVGV4dHVyZSh1bnNpZ25lZCB0ZXh0dXJlVW5pdCk7
CisgICAgdm9pZCBiaW5kVGV4dHVyZSh1bnNpZ25lZCB0YXJnZXQsIHVuc2lnbmVkIHRleHR1cmUp
OworCisgICAgYm9vbCBzdXBwb3J0c0JHUkEoKTsKKworICAgIC8vIENyZWF0ZXMgYSB0ZXh0dXJl
IGFzc29jaWF0ZWQgd2l0aCB0aGUgZ2l2ZW4gaW1hZ2UuICBJcyBvd25lZCBieSB0aGlzIGNvbnRl
eHQncworICAgIC8vIFRleHR1cmVIYXNoTWFwLgorICAgIFRleHR1cmUqIGNyZWF0ZVRleHR1cmUo
TmF0aXZlSW1hZ2VQdHIsIFRleHR1cmU6OkZvcm1hdCwgaW50IHdpZHRoLCBpbnQgaGVpZ2h0KTsK
KyAgICBUZXh0dXJlKiBnZXRUZXh0dXJlKE5hdGl2ZUltYWdlUHRyKTsKKworICAgIC8vIENyZWF0
ZXMgYSB0ZXh0dXJlIHRoYXQgaXMgbm90IGFzc29jaWF0ZWQgd2l0aCBhbnkgaW1hZ2UuICBUaGUg
Y2FsbGVyIHRha2VzIG93bmVyc2hpcCBvZgorICAgIC8vIHRoZSB0ZXh0dXJlLgorICAgIFBhc3NS
ZWZQdHI8VGV4dHVyZT4gY3JlYXRlVGV4dHVyZShUZXh0dXJlOjpGb3JtYXQsIGludCB3aWR0aCwg
aW50IGhlaWdodCk7CisKK3ByaXZhdGU6CisgICAgU2hhcmVkQ29udGV4dDNEKFBhc3NPd25QdHI8
R3JhcGhpY3NDb250ZXh0M0Q+IGNvbnRleHQpOworCisgICAgT3duUHRyPEdyYXBoaWNzQ29udGV4
dDNEPiBtX2NvbnRleHQ7CisKKyAgICB1bnNpZ25lZCBtX3F1YWRWZXJ0aWNlczsKKworICAgIE93
blB0cjxTb2xpZEZpbGxTaGFkZXI+IG1fc29saWRGaWxsU2hhZGVyOworICAgIE93blB0cjxUZXhT
aGFkZXI+IG1fdGV4U2hhZGVyOworCisgICAgVGV4dHVyZUhhc2hNYXAgbV90ZXh0dXJlczsKK307
CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIFNoYXJlZENvbnRleHQzRF9o
CmRpZmYgLS1naXQgYS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dwdS9UZXh0dXJlLmNwcCBi
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3B1L1RleHR1cmUuY3BwCmluZGV4IDU1NzYwM2M5
NzYzMmZlMGYzOGY1YjczNmVjNjVhM2M2NWM3MTQyMzYuLjM2ZTRhZDVlZmMyNjgyZGI1YTA5ODI5
MjAyM2MyZDNiNWZhOTZkNzggMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Z3B1L1RleHR1cmUuY3BwCisrKyBiL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3B1L1RleHR1
cmUuY3BwCkBAIC0zNCw2ICszNCw3IEBACiAKICNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQzRC5o
IgogI2luY2x1ZGUgIkludFJlY3QuaCIKKwogI2luY2x1ZGUgPHd0Zi9Pd25BcnJheVB0ci5oPgog
CiBuYW1lc3BhY2UgV2ViQ29yZSB7CmRpZmYgLS1naXQgYS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL21hYy9HcmFwaGljc0xheWVyQ0EuaCBiL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvbWFj
L0dyYXBoaWNzTGF5ZXJDQS5oCmluZGV4IGE5Zjc0N2FkMDA0ZDgyZTM5NjM5NDdhOTY0MmQyYzE1
MjkyNDViNDMuLjFjYTAyNzk0MTM2ZGM4ODM3NzY0ZmRmNGViZjMzYjBlMTI1MDJiNGIgMTAwNjQ0
Ci0tLSBhL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL0dyYXBoaWNzTGF5ZXJDQS5oCisr
KyBiL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL0dyYXBoaWNzTGF5ZXJDQS5oCkBAIC0x
MDMsNyArMTAzLDcgQEAgcHVibGljOgogICAgIAogICAgIHZpcnR1YWwgdm9pZCBzZXRDb250ZW50
c1RvSW1hZ2UoSW1hZ2UqKTsKICAgICB2aXJ0dWFsIHZvaWQgc2V0Q29udGVudHNUb01lZGlhKFBs
YXRmb3JtTGF5ZXIqKTsKLSAgICB2aXJ0dWFsIHZvaWQgc2V0Q29udGVudHNUb0NhbnZhcyhQbGF0
Zm9ybUxheWVyKik7CisgICAgdmlydHVhbCB2b2lkIHNldENvbnRlbnRzVG9XZWJHTChQbGF0Zm9y
bUxheWVyKik7CiAKICAgICB2aXJ0dWFsIGJvb2wgaGFzQ29udGVudHNMYXllcigpIGNvbnN0IHsg
cmV0dXJuIG1fY29udGVudHNMYXllcjsgfQogICAgIApkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9tYWMvR3JhcGhpY3NMYXllckNBLm1tIGIvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9tYWMvR3JhcGhpY3NMYXllckNBLm1tCmluZGV4IDMxNWNjMDA5MTAzYzY5OGZhMDAx
NDdiNDkzZjg2NTQ5YzgxZjJjYWUuLjAwMTdjYmZlNTc0MDk3YmViNzkwZDU4MmQwODZjYTE1ODEz
MjcxYzcgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL0dyYXBoaWNz
TGF5ZXJDQS5tbQorKysgYi9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL21hYy9HcmFwaGljc0xh
eWVyQ0EubW0KQEAgLTE3MzEsNyArMTczMSw3IEBAIHZvaWQgR3JhcGhpY3NMYXllckNBOjpwYXVz
ZUFuaW1hdGlvbk9uTGF5ZXIoQW5pbWF0ZWRQcm9wZXJ0eUlEIHByb3BlcnR5LCBjb25zdCBTCiAg
ICAgfQogfQogCi12b2lkIEdyYXBoaWNzTGF5ZXJDQTo6c2V0Q29udGVudHNUb0NhbnZhcyhQbGF0
Zm9ybUxheWVyKiBjYW52YXNMYXllcikKK3ZvaWQgR3JhcGhpY3NMYXllckNBOjpzZXRDb250ZW50
c1RvV2ViR0woUGxhdGZvcm1MYXllciogY2FudmFzTGF5ZXIpCiB7CiAgICAgaWYgKGNhbnZhc0xh
eWVyID09IG1fY29udGVudHNMYXllcikKICAgICAgICAgcmV0dXJuOwpkaWZmIC0tZ2l0IGEvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9za2lhL0dyYXBoaWNzQ29udGV4dFNraWEuY3BwIGIvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9za2lhL0dyYXBoaWNzQ29udGV4dFNraWEuY3BwCmluZGV4
IGI0ZmRkZDU2OGRlNWU5MTI4ZTEzN2U4NTVkMzg4ZGNjNmE5Mjg4YjMuLjJhNDViYTU4ZGRmYzQ2
YmU5YjhlMzg5OTQ0ZTYzM2JhNDM0YjA0MTkgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3Mvc2tpYS9HcmFwaGljc0NvbnRleHRTa2lhLmNwcAorKysgYi9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL3NraWEvR3JhcGhpY3NDb250ZXh0U2tpYS5jcHAKQEAgLTEyNDIsMTQgKzEy
NDIsMTQgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6OnRyYW5zbGF0ZShmbG9hdCB3LCBmbG9hdCBo
KQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdlYkNvcmVGbG9h
dFRvU2tTY2FsYXIoaCkpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6c2V0R3JhcGhpY3ND
b250ZXh0M0QoR3JhcGhpY3NDb250ZXh0M0QqIGNvbnRleHQzRCwgY29uc3QgSW50U2l6ZSYgc2l6
ZSkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0OjpzeW5jU29mdHdhcmVDYW52YXMoKQogewotICAgIHBs
YXRmb3JtQ29udGV4dCgpLT5zZXRHcmFwaGljc0NvbnRleHQzRChjb250ZXh0M0QsIHNpemUpOwor
ICAgIHBsYXRmb3JtQ29udGV4dCgpLT5zeW5jU29mdHdhcmVDYW52YXMoKTsKIH0KIAotdm9pZCBH
cmFwaGljc0NvbnRleHQ6OnN5bmNTb2Z0d2FyZUNhbnZhcygpCit2b2lkIEdyYXBoaWNzQ29udGV4
dDo6c2V0U2hhcmVkQ29udGV4dDNEKFNoYXJlZENvbnRleHQzRCogY29udGV4dCwgRHJhd2luZ0J1
ZmZlciogZnJhbWVidWZmZXIsIGNvbnN0IEludFNpemUmIHNpemUpCiB7Ci0gICAgcGxhdGZvcm1D
b250ZXh0KCktPnN5bmNTb2Z0d2FyZUNhbnZhcygpOworICAgIHBsYXRmb3JtQ29udGV4dCgpLT5z
ZXRTaGFyZWRDb250ZXh0M0QoY29udGV4dCwgZnJhbWVidWZmZXIsIHNpemUpOwogfQogCiB9ICAv
LyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9za2lhL0ltYWdlU2tpYS5jcHAgYi9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3NraWEvSW1h
Z2VTa2lhLmNwcAppbmRleCBhZWQyODlmZTNjMTU1YWE1ZDM1OTZkNDk0YjYwODkzZTRjMDE2YmI2
Li41YjU5NjJhMjVhMDJhNTA4MGU2MDUzMjM0NzgwYjgyZjRiYWM0ZDQ0IDEwMDY0NAotLS0gYS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3NraWEvSW1hZ2VTa2lhLmNwcAorKysgYi9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL3NraWEvSW1hZ2VTa2lhLmNwcApAQCAtNDcsNiArNDcsNyBAQAog
I2luY2x1ZGUgIlNrUmVjdC5oIgogI2luY2x1ZGUgIlNrU2hhZGVyLmgiCiAjaW5jbHVkZSAiU2tp
YVV0aWxzLmgiCisjaW5jbHVkZSAiVGV4dHVyZS5oIgogCiAjaW5jbHVkZSAic2tpYS9leHQvaW1h
Z2Vfb3BlcmF0aW9ucy5oIgogI2luY2x1ZGUgInNraWEvZXh0L3BsYXRmb3JtX2NhbnZhcy5oIgpk
aWZmIC0tZ2l0IGEvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9za2lhL1BsYXRmb3JtQ29udGV4
dFNraWEuY3BwIGIvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9za2lhL1BsYXRmb3JtQ29udGV4
dFNraWEuY3BwCmluZGV4IDNiMWQwMTVjZjEyMjM5NTI3NDNlN2FhNzY0OTM3MmFjNDc2YzhmNTIu
LjkxYjFmNTFkMDMzYmU2OTE3ZDg1ODVjNmU2NDMzMWEwYjExMTdlYzUgMTAwNjQ0Ci0tLSBhL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc2tpYS9QbGF0Zm9ybUNvbnRleHRTa2lhLmNwcAorKysg
Yi9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3NraWEvUGxhdGZvcm1Db250ZXh0U2tpYS5jcHAK
QEAgLTMzLDEyICszMywxMyBAQAogI2luY2x1ZGUgIlBsYXRmb3JtQ29udGV4dFNraWEuaCIKIAog
I2luY2x1ZGUgIkFmZmluZVRyYW5zZm9ybS5oIgotI2luY2x1ZGUgIkNhbnZhc0xheWVyQ2hyb21p
dW0uaCIKKyNpbmNsdWRlICJEcmF3aW5nQnVmZmVyLmgiCiAjaW5jbHVkZSAiR0xFUzJDYW52YXMu
aCIKICNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKICNpbmNsdWRlICJHcmFwaGljc0NvbnRl
eHQzRC5oIgogI2luY2x1ZGUgIkltYWdlQnVmZmVyLmgiCiAjaW5jbHVkZSAiTmF0aXZlSW1hZ2VT
a2lhLmgiCisjaW5jbHVkZSAiU2hhcmVkQ29udGV4dDNELmgiCiAjaW5jbHVkZSAiU2tpYVV0aWxz
LmgiCiAjaW5jbHVkZSAiVGV4dHVyZS5oIgogI2luY2x1ZGUgIlRpbGluZ0RhdGEuaCIKQEAgLTIx
NiwxMiArMjE3LDggQEAgUGxhdGZvcm1Db250ZXh0U2tpYTo6UGxhdGZvcm1Db250ZXh0U2tpYShz
a2lhOjpQbGF0Zm9ybUNhbnZhcyogY2FudmFzKQogCiBQbGF0Zm9ybUNvbnRleHRTa2lhOjp+UGxh
dGZvcm1Db250ZXh0U2tpYSgpCiB7Ci0jaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQot
ICAgIGlmIChtX2dwdUNhbnZhcykgewotICAgICAgICBDYW52YXNMYXllckNocm9taXVtKiBsYXll
ciA9IHN0YXRpY19jYXN0PENhbnZhc0xheWVyQ2hyb21pdW0qPihtX2dwdUNhbnZhcy0+Y29udGV4
dCgpLT5wbGF0Zm9ybUxheWVyKCkpOwotICAgICAgICBsYXllci0+c2V0UHJlcGFyZVRleHR1cmVD
YWxsYmFjaygwKTsKLSAgICB9Ci0jZW5kaWYKKyAgICBpZiAobV9ncHVDYW52YXMpCisgICAgICAg
IG1fZ3B1Q2FudmFzLT5kcmF3aW5nQnVmZmVyKCktPnNldFdpbGxQdWJsaXNoQ2FsbGJhY2soMCk7
CiB9CiAKIHZvaWQgUGxhdGZvcm1Db250ZXh0U2tpYTo6c2V0Q2FudmFzKHNraWE6OlBsYXRmb3Jt
Q2FudmFzKiBjYW52YXMpCkBAIC02NzgsMzMgKzY3NSwzMyBAQCB2b2lkIFBsYXRmb3JtQ29udGV4
dFNraWE6OmFwcGx5QW50aUFsaWFzZWRDbGlwUGF0aHMoV1RGOjpWZWN0b3I8U2tQYXRoPiYgcGF0
aHMpCiAgICAgbV9jYW52YXMtPnJlc3RvcmUoKTsKIH0KIAotI2lmIFVTRShBQ0NFTEVSQVRFRF9D
T01QT1NJVElORykKLWNsYXNzIFByZXBhcmVUZXh0dXJlQ2FsbGJhY2tJbXBsIDogcHVibGljIENh
bnZhc0xheWVyQ2hyb21pdW06OlByZXBhcmVUZXh0dXJlQ2FsbGJhY2sgeworY2xhc3MgV2lsbFB1
Ymxpc2hDYWxsYmFja0ltcGwgOiBwdWJsaWMgRHJhd2luZ0J1ZmZlcjo6V2lsbFB1Ymxpc2hDYWxs
YmFjayB7CiBwdWJsaWM6Ci0gICAgc3RhdGljIFBhc3NPd25QdHI8UHJlcGFyZVRleHR1cmVDYWxs
YmFja0ltcGw+IGNyZWF0ZShQbGF0Zm9ybUNvbnRleHRTa2lhKiBwY3MpCisgICAgc3RhdGljIFBh
c3NPd25QdHI8V2lsbFB1Ymxpc2hDYWxsYmFjaz4gY3JlYXRlKFBsYXRmb3JtQ29udGV4dFNraWEq
IHBjcykKICAgICB7Ci0gICAgICAgIHJldHVybiBuZXcgUHJlcGFyZVRleHR1cmVDYWxsYmFja0lt
cGwocGNzKTsKKyAgICAgICAgcmV0dXJuIGFkb3B0UHRyKG5ldyBXaWxsUHVibGlzaENhbGxiYWNr
SW1wbChwY3MpKTsKICAgICB9CiAKLSAgICB2aXJ0dWFsIHZvaWQgd2lsbFByZXBhcmVUZXh0dXJl
KCkKKyAgICB2aXJ0dWFsIHZvaWQgd2lsbFB1Ymxpc2goKQogICAgIHsKICAgICAgICAgbV9wY3Mt
PnByZXBhcmVGb3JIYXJkd2FyZURyYXcoKTsKICAgICB9CisKIHByaXZhdGU6Ci0gICAgZXhwbGlj
aXQgUHJlcGFyZVRleHR1cmVDYWxsYmFja0ltcGwoUGxhdGZvcm1Db250ZXh0U2tpYSogcGNzKSA6
IG1fcGNzKHBjcykge30KKyAgICBleHBsaWNpdCBXaWxsUHVibGlzaENhbGxiYWNrSW1wbChQbGF0
Zm9ybUNvbnRleHRTa2lhKiBwY3MpCisgICAgICAgIDogbV9wY3MocGNzKQorICAgIHsKKyAgICB9
CisKICAgICBQbGF0Zm9ybUNvbnRleHRTa2lhKiBtX3BjczsKIH07Ci0jZW5kaWYKIAotdm9pZCBQ
bGF0Zm9ybUNvbnRleHRTa2lhOjpzZXRHcmFwaGljc0NvbnRleHQzRChHcmFwaGljc0NvbnRleHQz
RCogY29udGV4dCwgY29uc3QgV2ViQ29yZTo6SW50U2l6ZSYgc2l6ZSkKK3ZvaWQgUGxhdGZvcm1D
b250ZXh0U2tpYTo6c2V0U2hhcmVkQ29udGV4dDNEKFNoYXJlZENvbnRleHQzRCogY29udGV4dCwg
RHJhd2luZ0J1ZmZlciogZHJhd2luZ0J1ZmZlciwgY29uc3QgV2ViQ29yZTo6SW50U2l6ZSYgc2l6
ZSkKIHsKICAgICBtX3VzZUdQVSA9IHRydWU7Ci0gICAgbV9ncHVDYW52YXMgPSBuZXcgR0xFUzJD
YW52YXMoY29udGV4dCwgc2l6ZSk7CisgICAgbV9ncHVDYW52YXMgPSBuZXcgR0xFUzJDYW52YXMo
Y29udGV4dCwgZHJhd2luZ0J1ZmZlciwgc2l6ZSk7CiAgICAgbV91cGxvYWRUZXh0dXJlLmNsZWFy
KCk7Ci0jaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQotICAgIENhbnZhc0xheWVyQ2hy
b21pdW0qIGxheWVyID0gc3RhdGljX2Nhc3Q8Q2FudmFzTGF5ZXJDaHJvbWl1bSo+KGNvbnRleHQt
PnBsYXRmb3JtTGF5ZXIoKSk7Ci0gICAgbGF5ZXItPnNldFByZXBhcmVUZXh0dXJlQ2FsbGJhY2so
UHJlcGFyZVRleHR1cmVDYWxsYmFja0ltcGw6OmNyZWF0ZSh0aGlzKSk7Ci0jZW5kaWYKKyAgICBk
cmF3aW5nQnVmZmVyLT5zZXRXaWxsUHVibGlzaENhbGxiYWNrKFdpbGxQdWJsaXNoQ2FsbGJhY2tJ
bXBsOjpjcmVhdGUodGhpcykpOwogfQogCiB2b2lkIFBsYXRmb3JtQ29udGV4dFNraWE6OnByZXBh
cmVGb3JTb2Z0d2FyZURyYXcoKSBjb25zdApAQCAtNzg0LDkgKzc4MSw5IEBAIHZvaWQgUGxhdGZv
cm1Db250ZXh0U2tpYTo6dXBsb2FkU29mdHdhcmVUb0hhcmR3YXJlKENvbXBvc2l0ZU9wZXJhdG9y
IG9wKSBjb25zdAogewogICAgIGNvbnN0IFNrQml0bWFwJiBiaXRtYXAgPSBtX2NhbnZhcy0+Z2V0
RGV2aWNlKCktPmFjY2Vzc0JpdG1hcChmYWxzZSk7CiAgICAgU2tBdXRvTG9ja1BpeGVscyBsb2Nr
KGJpdG1hcCk7Ci0gICAgR3JhcGhpY3NDb250ZXh0M0QqIGNvbnRleHQgPSBtX2dwdUNhbnZhcy0+
Y29udGV4dCgpOworICAgIFNoYXJlZENvbnRleHQzRCogY29udGV4dCA9IG1fZ3B1Q2FudmFzLT5j
b250ZXh0KCk7CiAgICAgaWYgKCFtX3VwbG9hZFRleHR1cmUgfHwgbV91cGxvYWRUZXh0dXJlLT50
aWxlcygpLnRvdGFsU2l6ZVgoKSA8IGJpdG1hcC53aWR0aCgpIHx8IG1fdXBsb2FkVGV4dHVyZS0+
dGlsZXMoKS50b3RhbFNpemVZKCkgPCBiaXRtYXAuaGVpZ2h0KCkpCi0gICAgICAgIG1fdXBsb2Fk
VGV4dHVyZSA9IFRleHR1cmU6OmNyZWF0ZShjb250ZXh0LCBUZXh0dXJlOjpCR1JBOCwgYml0bWFw
LndpZHRoKCksIGJpdG1hcC5oZWlnaHQoKSk7CisgICAgICAgIG1fdXBsb2FkVGV4dHVyZSA9IGNv
bnRleHQtPmNyZWF0ZVRleHR1cmUoVGV4dHVyZTo6QkdSQTgsIGJpdG1hcC53aWR0aCgpLCBiaXRt
YXAuaGVpZ2h0KCkpOwogICAgIG1fdXBsb2FkVGV4dHVyZS0+bG9hZChiaXRtYXAuZ2V0UGl4ZWxz
KCkpOwogICAgIEludFJlY3QgcmVjdCgwLCAwLCBiaXRtYXAud2lkdGgoKSwgYml0bWFwLmhlaWdo
dCgpKTsKICAgICBBZmZpbmVUcmFuc2Zvcm0gaWRlbnRpdHk7CkBAIC03OTksNyArNzk2LDggQEAg
dm9pZCBQbGF0Zm9ybUNvbnRleHRTa2lhOjpyZWFkYmFja0hhcmR3YXJlVG9Tb2Z0d2FyZSgpIGNv
bnN0CiAgICAgU2tBdXRvTG9ja1BpeGVscyBsb2NrKGJpdG1hcCk7CiAgICAgaW50IHdpZHRoID0g
Yml0bWFwLndpZHRoKCksIGhlaWdodCA9IGJpdG1hcC5oZWlnaHQoKTsKICAgICBPd25BcnJheVB0
cjx1aW50MzJfdD4gYnVmKG5ldyB1aW50MzJfdFt3aWR0aF0pOwotICAgIEdyYXBoaWNzQ29udGV4
dDNEKiBjb250ZXh0ID0gbV9ncHVDYW52YXMtPmNvbnRleHQoKTsKKyAgICBTaGFyZWRDb250ZXh0
M0QqIGNvbnRleHQgPSBtX2dwdUNhbnZhcy0+Y29udGV4dCgpOworICAgIG1fZ3B1Q2FudmFzLT5i
aW5kRnJhbWVidWZmZXIoKTsKICAgICAvLyBGbGlwcyB0aGUgaW1hZ2UgdmVydGljYWxseS4KICAg
ICBmb3IgKGludCB5ID0gMDsgeSA8IGhlaWdodDsgKyt5KSB7CiAgICAgICAgIHVpbnQzMl90KiBw
aXhlbHMgPSBiaXRtYXAuZ2V0QWRkcjMyKDAsIHkpOwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9za2lhL1BsYXRmb3JtQ29udGV4dFNraWEuaCBiL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3Mvc2tpYS9QbGF0Zm9ybUNvbnRleHRTa2lhLmgKaW5kZXggODJlZGMxNmQxZmNj
ZjhhZTllMTk1MWM5MjUyY2NjOWU5NTZmNDEwMC4uZWNiNGQzMzFmNmE4ZDFmNDlkYTYzYTFjNDQ2
NTk2Y2YxNjg3MzgyMSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9za2lh
L1BsYXRmb3JtQ29udGV4dFNraWEuaAorKysgYi9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3Nr
aWEvUGxhdGZvcm1Db250ZXh0U2tpYS5oCkBAIC0zNSw3ICszNSw2IEBACiAjaW5jbHVkZSAiTm9u
Y29weWFibGUuaCIKIAogI2luY2x1ZGUgIlNrRGFzaFBhdGhFZmZlY3QuaCIKLSNpbmNsdWRlICJT
a0RlcXVlLmgiCiAjaW5jbHVkZSAiU2tEcmF3TG9vcGVyLmgiCiAjaW5jbHVkZSAiU2tQYWludC5o
IgogI2luY2x1ZGUgIlNrUGF0aC5oIgpAQCAtNDYsOSArNDUsMTAgQEAKIG5hbWVzcGFjZSBXZWJD
b3JlIHsKIAogZW51bSBDb21wb3NpdGVPcGVyYXRvcjsKK2NsYXNzIERyYXdpbmdCdWZmZXI7CiBj
bGFzcyBHTEVTMkNhbnZhczsKLWNsYXNzIFRleHR1cmU7CiBjbGFzcyBHcmFwaGljc0NvbnRleHQz
RDsKK2NsYXNzIFRleHR1cmU7CiAKIC8vIFRoaXMgY2xhc3MgaG9sZHMgdGhlIHBsYXRmb3JtLXNw
ZWNpZmljIHN0YXRlIGZvciBHcmFwaGljc0NvbnRleHQuIFdlIHB1dAogLy8gbW9zdCBvZiBvdXIg
U2tpYSB3cmFwcGVycyBvbiB0aGlzIGNsYXNzLiBJbiB0aGVvcnksIGEgbG90IG9mIHRoaXMgc3R1
ZmYgY291bGQKQEAgLTE4MSw3ICsxODEsNyBAQCBwdWJsaWM6CiAgICAgdm9pZCBjbGVhckltYWdl
UmVzYW1wbGluZ0hpbnQoKTsKICAgICBib29sIGhhc0ltYWdlUmVzYW1wbGluZ0hpbnQoKSBjb25z
dDsKICAgICBib29sIHVzZUdQVSgpIHsgcmV0dXJuIG1fdXNlR1BVOyB9Ci0gICAgdm9pZCBzZXRH
cmFwaGljc0NvbnRleHQzRChHcmFwaGljc0NvbnRleHQzRCosIGNvbnN0IEludFNpemUmKTsKKyAg
ICB2b2lkIHNldFNoYXJlZENvbnRleHQzRChTaGFyZWRDb250ZXh0M0QqLCBEcmF3aW5nQnVmZmVy
KiwgY29uc3QgSW50U2l6ZSYpOwogICAgIEdMRVMyQ2FudmFzKiBncHVDYW52YXMoKSBjb25zdCB7
IHJldHVybiBtX2dwdUNhbnZhcy5nZXQoKTsgfQogCiAgICAgLy8gQ2FsbCB0aGVzZSBiZWZvcmUg
bWFraW5nIGEgY2FsbCB0aGF0IG1hbmlwdWxhdGVzIHRoZSB1bmRlcmx5aW5nCmRpZmYgLS1naXQg
YS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllckJhY2tpbmcuY3BwIGIvV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVyTGF5ZXJCYWNraW5nLmNwcAppbmRleCAwYmE5MDdiZTk0MDAxMTQ0ZGYzN2E1
YWZkYjdkNTM5YWE4NzQ3OTYzLi43ZjA2NDc5MTA5MzczMDg5MDk2MjVkYjFmYzI3OTdmODkyMTky
NzkwIDEwMDY0NAotLS0gYS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllckJhY2tpbmcuY3Bw
CisrKyBiL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyQmFja2luZy5jcHAKQEAgLTI3LDgg
KzI3LDExIEBACiAKICNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCiAKKyNpbmNsdWRl
ICJSZW5kZXJMYXllckJhY2tpbmcuaCIKKwogI2luY2x1ZGUgIkFuaW1hdGlvbkNvbnRyb2xsZXIu
aCIKICNpbmNsdWRlICJDYW52YXNSZW5kZXJpbmdDb250ZXh0LmgiCisjaW5jbHVkZSAiQ2FudmFz
UmVuZGVyaW5nQ29udGV4dDJELmgiCiAjaW5jbHVkZSAiQ1NTUHJvcGVydHlOYW1lcy5oIgogI2lu
Y2x1ZGUgIkNTU1N0eWxlU2VsZWN0b3IuaCIKICNpbmNsdWRlICJGcmFtZVZpZXcuaCIKQEAgLTUx
LDggKzU0LDcgQEAKICNpbmNsdWRlICJSZW5kZXJWaWRlby5oIgogI2luY2x1ZGUgIlJlbmRlclZp
ZXcuaCIKICNpbmNsdWRlICJTZXR0aW5ncy5oIgotCi0jaW5jbHVkZSAiUmVuZGVyTGF5ZXJCYWNr
aW5nLmgiCisjaW5jbHVkZSAiV2ViR0xSZW5kZXJpbmdDb250ZXh0LmgiCiAKIHVzaW5nIG5hbWVz
cGFjZSBzdGQ7CiAKQEAgLTI1NywxMCArMjU5LDE3IEBAIGJvb2wgUmVuZGVyTGF5ZXJCYWNraW5n
Ojp1cGRhdGVHcmFwaGljc0xheWVyQ29uZmlndXJhdGlvbigpCiAjaWYgRU5BQkxFKDNEX0NBTlZB
UykgfHwgRU5BQkxFKEFDQ0VMRVJBVEVEXzJEX0NBTlZBUykKICAgICBlbHNlIGlmIChpc0FjY2Vs
ZXJhdGVkQ2FudmFzKHJlbmRlcmVyKCkpKSB7CiAgICAgICAgIEhUTUxDYW52YXNFbGVtZW50KiBj
YW52YXMgPSBzdGF0aWNfY2FzdDxIVE1MQ2FudmFzRWxlbWVudCo+KHJlbmRlcmVyKCktPm5vZGUo
KSk7Ci0gICAgICAgIGlmIChDYW52YXNSZW5kZXJpbmdDb250ZXh0KiBjb250ZXh0ID0gY2FudmFz
LT5yZW5kZXJpbmdDb250ZXh0KCkpCi0gICAgICAgICAgICBpZiAoY29udGV4dC0+Z3JhcGhpY3ND
b250ZXh0M0QoKSkKLSAgICAgICAgICAgICAgICBpZiAoUGxhdGZvcm1MYXllciogcGwgPSBjb250
ZXh0LT5ncmFwaGljc0NvbnRleHQzRCgpLT5wbGF0Zm9ybUxheWVyKCkpCi0gICAgICAgICAgICAg
ICAgICAgIG1fZ3JhcGhpY3NMYXllci0+c2V0Q29udGVudHNUb0NhbnZhcyhwbCk7CisgICAgICAg
IGlmIChDYW52YXNSZW5kZXJpbmdDb250ZXh0KiBjb250ZXh0ID0gY2FudmFzLT5yZW5kZXJpbmdD
b250ZXh0KCkpIHsKKyNpZiBFTkFCTEUoQUNDRUxFUkFURURfMkRfQ0FOVkFTKQorICAgICAgICAg
ICAgaWYgKGNvbnRleHQtPmlzMmQoKSkKKyAgICAgICAgICAgICAgICBtX2dyYXBoaWNzTGF5ZXIt
PnNldENvbnRlbnRzVG9DYW52YXMyRChzdGF0aWNfY2FzdDxDYW52YXNSZW5kZXJpbmdDb250ZXh0
MkQqPihjb250ZXh0KS0+ZHJhd2luZ0J1ZmZlcigpKTsKKyNlbmRpZgorI2lmIEVOQUJMRSgzRF9D
QU5WQVMpCisgICAgICAgICAgICBpZiAoY29udGV4dC0+aXMzZCgpKQorICAgICAgICAgICAgICAg
IG1fZ3JhcGhpY3NMYXllci0+c2V0Q29udGVudHNUb1dlYkdMKHN0YXRpY19jYXN0PFdlYkdMUmVu
ZGVyaW5nQ29udGV4dCo+KGNvbnRleHQpLT5ncmFwaGljc0NvbnRleHQzRCgpLT5wbGF0Zm9ybUxh
eWVyKCkpOworI2VuZGlmCisgICAgICAgIH0KKyAgICAgICAgbGF5ZXJDb25maWdDaGFuZ2VkID0g
dHJ1ZTsKICAgICB9CiAjZW5kaWYKIApkaWZmIC0tZ2l0IGEvV2ViS2l0L2Nocm9taXVtL0NoYW5n
ZUxvZyBiL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKaW5kZXggMDFhMmJiZjdiNWE4MDg4N2E4
OGZlOTFjYjkyODhkMjJjOGU1Nzg0MS4uOTNlOGRhMTkyZjBhMmQzYWFiNzhmOGI1ZjgxMjBiMmFh
Nzg2NDJhZiAxMDA2NDQKLS0tIGEvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZworKysgYi9XZWJL
aXQvY2hyb21pdW0vQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjQgQEAKKzIwMTAtMDktMDEgIEphbWVz
IFJvYmluc29uICA8amFtZXNyQGNocm9taXVtLm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBO
T0JPRFkgKE9PUFMhKS4KKworICAgICAgICBNdWx0aXBsZSBhY2NlbGVyYXRlZCAyRCBjYW52YXNl
cyBzaG91bGQgYmUgYWJsZSB0byB1c2UgdGhlIHNhbWUgR3JhcGhpY3NDb250ZXh0M0QKKyAgICAg
ICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTQ0OTI2CisKKyAgICAg
ICAgQWRkcyBhIFNoYXJlZENvbnRleHQzRCB0byBXZWJWaWV3SW1wbC4gVGhlIFNoYXJlZENvbnRl
eHQzRCBoYXMgdG8gbGl2ZSBvbiBXZWJWaWV3SW1wbCB0byBiZQorICAgICAgICB0aWVkIHRvIHRo
ZSBsaWZldGltZSBvZiB0aGUgY29tcG9zaXRvciBjb250ZXh0LgorCisgICAgICAgICogc3JjL0No
cm9tZUNsaWVudEltcGwuY3BwOgorICAgICAgICAoV2ViS2l0OjpDaHJvbWVDbGllbnRJbXBsOjpn
ZXRTaGFyZWRDb250ZXh0M0QpOgorICAgICAgICAqIHNyYy9DaHJvbWVDbGllbnRJbXBsLmg6Cisg
ICAgICAgICogc3JjL0dyYXBoaWNzQ29udGV4dDNELmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Okdy
YXBoaWNzQ29udGV4dDNESW50ZXJuYWw6OmluaXRpYWxpemUpOgorICAgICAgICAoV2ViQ29yZTo6
R3JhcGhpY3NDb250ZXh0M0RJbnRlcm5hbDo6cGxhdGZvcm1MYXllcik6CisgICAgICAgIChXZWJD
b3JlOjpHcmFwaGljc0NvbnRleHQzRDo6cGxhdGZvcm1MYXllcik6CisgICAgICAgICogc3JjL1dl
YlZpZXdJbXBsLmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2ViVmlld0ltcGw6OmdldFNoYXJlZENv
bnRleHQzRCk6CisgICAgICAgICogc3JjL1dlYlZpZXdJbXBsLmg6CisKIDIwMTAtMDgtMzAgIEtp
bnVrbyBZYXN1ZGEgIDxraW51a29AY2hyb21pdW0ub3NyYz4KIAogICAgICAgICBSZXZpZXdlZCBi
eSBEYXJpbiBGaXNoZXIuCmRpZmYgLS1naXQgYS9XZWJLaXQvY2hyb21pdW0vc3JjL0Nocm9tZUNs
aWVudEltcGwuY3BwIGIvV2ViS2l0L2Nocm9taXVtL3NyYy9DaHJvbWVDbGllbnRJbXBsLmNwcApp
bmRleCBlNmYxNDAwNzE4MGQ4ZDNiZjYxMjhiMTMwZGMyOGFiYWFlYzFmOTBhLi4wMmFhZmY0OGRi
ODU0MTI4OWM5NzY4YmNiNzk2YzQyNmFjN2NhNGZjIDEwMDY0NAotLS0gYS9XZWJLaXQvY2hyb21p
dW0vc3JjL0Nocm9tZUNsaWVudEltcGwuY3BwCisrKyBiL1dlYktpdC9jaHJvbWl1bS9zcmMvQ2hy
b21lQ2xpZW50SW1wbC5jcHAKQEAgLTU5LDYgKzU5LDcgQEAKICNpbmNsdWRlICJTZWFyY2hQb3B1
cE1lbnVDaHJvbWl1bS5oIgogI2luY2x1ZGUgIlNjcmlwdENvbnRyb2xsZXIuaCIKICNpbmNsdWRl
ICJTZWN1cml0eU9yaWdpbi5oIgorI2luY2x1ZGUgIlNoYXJlZENvbnRleHQzRC5oIgogI2luY2x1
ZGUgIldlYkdlb2xvY2F0aW9uU2VydmljZS5oIgogI2lmIFVTRShWOCkKICNpbmNsdWRlICJWOFBy
b3h5LmgiCkBAIC03NTEsNiArNzUyLDExIEBAIHZvaWQgQ2hyb21lQ2xpZW50SW1wbDo6c2NoZWR1
bGVDb21wb3NpdGluZ0xheWVyU3luYygpCiB9CiAjZW5kaWYKIAorV2ViQ29yZTo6U2hhcmVkQ29u
dGV4dDNEKiBDaHJvbWVDbGllbnRJbXBsOjpnZXRTaGFyZWRDb250ZXh0M0QoKQoreworICAgIHJl
dHVybiBtX3dlYlZpZXctPmdldFNoYXJlZENvbnRleHQzRCgpOworfQorCiBib29sIENocm9tZUNs
aWVudEltcGw6OnN1cHBvcnRzRnVsbHNjcmVlbkZvck5vZGUoY29uc3QgV2ViQ29yZTo6Tm9kZSog
bm9kZSkKIHsKICAgICBpZiAobV93ZWJWaWV3LT5jbGllbnQoKSAmJiBub2RlLT5oYXNUYWdOYW1l
KFdlYkNvcmU6OkhUTUxOYW1lczo6dmlkZW9UYWcpKQpkaWZmIC0tZ2l0IGEvV2ViS2l0L2Nocm9t
aXVtL3NyYy9DaHJvbWVDbGllbnRJbXBsLmggYi9XZWJLaXQvY2hyb21pdW0vc3JjL0Nocm9tZUNs
aWVudEltcGwuaAppbmRleCBiZmY5ZjkwNDdmYTdjN2YzYWJkNzA0ZDk0Nzg1ZDljMWZhY2Y3NzQw
Li42Y2I2ZjgzZGVkYzk3ZjNmZGM4MmU3OWQ0M2QxMzk0MTg0OGNhZDcxIDEwMDY0NAotLS0gYS9X
ZWJLaXQvY2hyb21pdW0vc3JjL0Nocm9tZUNsaWVudEltcGwuaAorKysgYi9XZWJLaXQvY2hyb21p
dW0vc3JjL0Nocm9tZUNsaWVudEltcGwuaApAQCAtMTUyLDYgKzE1Miw4IEBAIHB1YmxpYzoKICAg
ICB2aXJ0dWFsIHZvaWQgc2NoZWR1bGVDb21wb3NpdGluZ0xheWVyU3luYygpOwogI2VuZGlmCiAK
KyAgICB2aXJ0dWFsIFdlYkNvcmU6OlNoYXJlZENvbnRleHQzRCogZ2V0U2hhcmVkQ29udGV4dDNE
KCk7CisKICAgICB2aXJ0dWFsIGJvb2wgc3VwcG9ydHNGdWxsc2NyZWVuRm9yTm9kZShjb25zdCBX
ZWJDb3JlOjpOb2RlKik7CiAgICAgdmlydHVhbCB2b2lkIGVudGVyRnVsbHNjcmVlbkZvck5vZGUo
V2ViQ29yZTo6Tm9kZSopOwogICAgIHZpcnR1YWwgdm9pZCBleGl0RnVsbHNjcmVlbkZvck5vZGUo
V2ViQ29yZTo6Tm9kZSopOwpkaWZmIC0tZ2l0IGEvV2ViS2l0L2Nocm9taXVtL3NyYy9HcmFwaGlj
c0NvbnRleHQzRC5jcHAgYi9XZWJLaXQvY2hyb21pdW0vc3JjL0dyYXBoaWNzQ29udGV4dDNELmNw
cAppbmRleCA2YmM1ZmZlNDMxZTg0ZTRlN2JlMjBlOTQwNDE0ZWRlYWY4MzNhOWM3Li42YTliM2U0
ZGU3NGQyMzJjMzE5ODExMDhkMGE1N2JiMzc2N2JmZjA4IDEwMDY0NAotLS0gYS9XZWJLaXQvY2hy
b21pdW0vc3JjL0dyYXBoaWNzQ29udGV4dDNELmNwcAorKysgYi9XZWJLaXQvY2hyb21pdW0vc3Jj
L0dyYXBoaWNzQ29udGV4dDNELmNwcApAQCAtMzUsNyArMzUsNyBAQAogI2luY2x1ZGUgIkdyYXBo
aWNzQ29udGV4dDNELmgiCiAKICNpbmNsdWRlICJDYWNoZWRJbWFnZS5oIgotI2luY2x1ZGUgIkNh
bnZhc0xheWVyQ2hyb21pdW0uaCIKKyNpbmNsdWRlICJXZWJHTExheWVyQ2hyb21pdW0uaCIKICNp
bmNsdWRlICJDYW52YXNSZW5kZXJpbmdDb250ZXh0LmgiCiAjaW5jbHVkZSAiQ2hyb21lLmgiCiAj
aW5jbHVkZSAiQ2hyb21lQ2xpZW50SW1wbC5oIgpAQCAtMTAzLDcgKzEwMyw3IEBAIHB1YmxpYzoK
ICAgICB2b2lkIHByZXBhcmVUZXh0dXJlKCk7CiAKICNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9T
SVRJTkcpCi0gICAgQ2FudmFzTGF5ZXJDaHJvbWl1bSogcGxhdGZvcm1MYXllcigpIGNvbnN0Owor
ICAgIFdlYkdMTGF5ZXJDaHJvbWl1bSogcGxhdGZvcm1MYXllcigpIGNvbnN0OwogI2VuZGlmCiAg
ICAgYm9vbCBpc0dMRVMyQ29tcGxpYW50KCkgY29uc3Q7CiAgICAgYm9vbCBpc0dMRVMyTlBPVFN0
cmljdCgpIGNvbnN0OwpAQCAtMjk4LDcgKzI5OCw3IEBAIHByaXZhdGU6CiAgICAgT3duUHRyPFdl
YktpdDo6V2ViR3JhcGhpY3NDb250ZXh0M0Q+IG1faW1wbDsKICAgICBXZWJLaXQ6OldlYlZpZXdJ
bXBsKiBtX3dlYlZpZXdJbXBsOwogI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKLSAg
ICBSZWZQdHI8Q2FudmFzTGF5ZXJDaHJvbWl1bT4gbV9jb21wb3NpdGluZ0xheWVyOworICAgIFJl
ZlB0cjxXZWJHTExheWVyQ2hyb21pdW0+IG1fY29tcG9zaXRpbmdMYXllcjsKICNlbmRpZgogI2lm
IFBMQVRGT1JNKFNLSUEpCiAgICAgLy8gSWYgdGhlIHdpZHRoIGFuZCBoZWlnaHQgb2YgdGhlIENh
bnZhcydzIGJhY2tpbmcgc3RvcmUgZG9uJ3QKQEAgLTM2MCw3ICszNjAsNyBAQCBib29sIEdyYXBo
aWNzQ29udGV4dDNESW50ZXJuYWw6OmluaXRpYWxpemUoR3JhcGhpY3NDb250ZXh0M0Q6OkF0dHJp
YnV0ZXMgYXR0cnMsCiAgICAgbV9pbXBsLnNldCh3ZWJDb250ZXh0KTsKIAogI2lmIFVTRShBQ0NF
TEVSQVRFRF9DT01QT1NJVElORykKLSAgICBtX2NvbXBvc2l0aW5nTGF5ZXIgPSBDYW52YXNMYXll
ckNocm9taXVtOjpjcmVhdGUoMCk7CisgICAgbV9jb21wb3NpdGluZ0xheWVyID0gV2ViR0xMYXll
ckNocm9taXVtOjpjcmVhdGUoMCk7CiAjZW5kaWYKICAgICByZXR1cm4gdHJ1ZTsKIH0KQEAgLTM4
MSw3ICszODEsNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDNESW50ZXJuYWw6OnByZXBhcmVUZXh0
dXJlKCkKIH0KIAogI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKLUNhbnZhc0xheWVy
Q2hyb21pdW0qIEdyYXBoaWNzQ29udGV4dDNESW50ZXJuYWw6OnBsYXRmb3JtTGF5ZXIoKSBjb25z
dAorV2ViR0xMYXllckNocm9taXVtKiBHcmFwaGljc0NvbnRleHQzREludGVybmFsOjpwbGF0Zm9y
bUxheWVyKCkgY29uc3QKIHsKICAgICByZXR1cm4gbV9jb21wb3NpdGluZ0xheWVyLmdldCgpOwog
fQpAQCAtMTAzOSw3ICsxMDM5LDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6cHJlcGFyZVRl
eHR1cmUoKQogI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKIFBsYXRmb3JtTGF5ZXIq
IEdyYXBoaWNzQ29udGV4dDNEOjpwbGF0Zm9ybUxheWVyKCkgY29uc3QKIHsKLSAgICBDYW52YXNM
YXllckNocm9taXVtKiBjYW52YXNMYXllciA9IG1faW50ZXJuYWwtPnBsYXRmb3JtTGF5ZXIoKTsK
KyAgICBXZWJHTExheWVyQ2hyb21pdW0qIGNhbnZhc0xheWVyID0gbV9pbnRlcm5hbC0+cGxhdGZv
cm1MYXllcigpOwogICAgIGNhbnZhc0xheWVyLT5zZXRDb250ZXh0KHRoaXMpOwogICAgIHJldHVy
biBjYW52YXNMYXllcjsKIH0KZGlmZiAtLWdpdCBhL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViVmll
d0ltcGwuY3BwIGIvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJWaWV3SW1wbC5jcHAKaW5kZXggNTA2
NWY1ZWI5YjY0MDgzZmMzYjFlMTc0ZjQyODE1YzU3MzdiNDgzOS4uNzFkODQ5MzFmMjM2ZGNmYzcx
MGRhOGQxMzk1ZWMwNDAyNzY2NWU1NiAxMDA2NDQKLS0tIGEvV2ViS2l0L2Nocm9taXVtL3NyYy9X
ZWJWaWV3SW1wbC5jcHAKKysrIGIvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJWaWV3SW1wbC5jcHAK
QEAgLTU4LDYgKzU4LDcgQEAKICNpbmNsdWRlICJHTEVTMkNvbnRleHQuaCIKICNpbmNsdWRlICJH
TEVTMkNvbnRleHRJbnRlcm5hbC5oIgogI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgorI2lu
Y2x1ZGUgIkdyYXBoaWNzQ29udGV4dDNELmgiCiAjaW5jbHVkZSAiSFRNTElucHV0RWxlbWVudC5o
IgogI2luY2x1ZGUgIkhUTUxNZWRpYUVsZW1lbnQuaCIKICNpbmNsdWRlICJIaXRUZXN0UmVzdWx0
LmgiCkBAIC04Niw2ICs4Nyw3IEBACiAjaW5jbHVkZSAiU2VjdXJpdHlPcmlnaW4uaCIKICNpbmNs
dWRlICJTZWxlY3Rpb25Db250cm9sbGVyLmgiCiAjaW5jbHVkZSAiU2V0dGluZ3MuaCIKKyNpbmNs
dWRlICJTaGFyZWRDb250ZXh0M0QuaCIKICNpbmNsdWRlICJUaW1lci5oIgogI2luY2x1ZGUgIlR5
cGluZ0NvbW1hbmQuaCIKICNpbmNsdWRlICJVc2VyR2VzdHVyZUluZGljYXRvci5oIgpAQCAtMjIx
MSwxNCArMjIxMywxNSBAQCBQYXNzT3duUHRyPEdMRVMyQ29udGV4dD4gV2ViVmlld0ltcGw6Omdl
dE9uc2NyZWVuR0xFUzJDb250ZXh0KCkKICAgICByZXR1cm4gR0xFUzJDb250ZXh0OjpjcmVhdGUo
R0xFUzJDb250ZXh0SW50ZXJuYWw6OmNyZWF0ZShnbGVzMkNvbnRleHQoKSwgZmFsc2UpKTsKIH0K
IAotUGFzc093blB0cjxHTEVTMkNvbnRleHQ+IFdlYlZpZXdJbXBsOjpnZXRPZmZzY3JlZW5HTEVT
MkNvbnRleHQoKQorU2hhcmVkQ29udGV4dDNEKiBXZWJWaWV3SW1wbDo6Z2V0U2hhcmVkQ29udGV4
dDNEKCkKIHsKLSAgICBXZWJHTEVTMkNvbnRleHQqIGNvbnRleHQgPSB3ZWJLaXRDbGllbnQoKS0+
Y3JlYXRlR0xFUzJDb250ZXh0KCk7Ci0gICAgaWYgKCFjb250ZXh0KQotICAgICAgICByZXR1cm4g
MDsKLSAgICBpZiAoIWNvbnRleHQtPmluaXRpYWxpemUoMCwgZ2xlczJDb250ZXh0KCkpKQotICAg
ICAgICByZXR1cm4gMDsKLSAgICByZXR1cm4gR0xFUzJDb250ZXh0OjpjcmVhdGUoR0xFUzJDb250
ZXh0SW50ZXJuYWw6OmNyZWF0ZShjb250ZXh0LCB0cnVlKSk7CisgICAgaWYgKCFtX3NoYXJlZENv
bnRleHQzRCkgeworICAgICAgICBHcmFwaGljc0NvbnRleHQzRDo6QXR0cmlidXRlcyBhdHRyOwor
ICAgICAgICBPd25QdHI8R3JhcGhpY3NDb250ZXh0M0Q+IGNvbnRleHQgPSBHcmFwaGljc0NvbnRl
eHQzRDo6Y3JlYXRlKGF0dHIsIG1fcGFnZS0+Y2hyb21lKCkpOworICAgICAgICBtX3NoYXJlZENv
bnRleHQzRCA9IFNoYXJlZENvbnRleHQzRDo6Y3JlYXRlKGNvbnRleHQucmVsZWFzZSgpKTsKKyAg
ICB9CisKKyAgICByZXR1cm4gbV9zaGFyZWRDb250ZXh0M0QuZ2V0KCk7CiB9CiAKIC8vIFJldHVy
bnMgdGhlIEdMRVMyIGNvbnRleHQgYXNzb2NpYXRlZCB3aXRoIHRoaXMgVmlldy4gSWYgb25lIGRv
ZXNuJ3QgZXhpc3QKZGlmZiAtLWdpdCBhL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViVmlld0ltcGwu
aCBiL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViVmlld0ltcGwuaAppbmRleCBjMjk2MTIxMjNmNDUx
NGM5NGRkN2Q5NzBjNzMxMTRhNGJlZWVjMzU1Li4xNjE1ZGEyYjIyYzFlODAyMmRhNTdmMDI5ZmEz
NGM2MzFlMjdlNzhjIDEwMDY0NAotLS0gYS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYlZpZXdJbXBs
LmgKKysrIGIvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJWaWV3SW1wbC5oCkBAIC0zMjksMTAgKzMy
OSwxMCBAQCBwdWJsaWM6CiAgICAgLy8gT2Zmc2NyZWVuIGNvbnRleHRzIHJlbmRlciBvZmZzY3Jl
ZW4gYnV0IGNhbiBzaGFyZSByZXNvdXJjZXMgd2l0aCB0aGUKICAgICAvLyBvbnNjcmVlbiBjb250
ZXh0IGFuZCB0aHVzIGNhbiBiZSBjb21wb3NpdGVkLgogICAgIFBhc3NPd25QdHI8V2ViQ29yZTo6
R0xFUzJDb250ZXh0PiBnZXRPbnNjcmVlbkdMRVMyQ29udGV4dCgpOwotICAgIFBhc3NPd25QdHI8
V2ViQ29yZTo6R0xFUzJDb250ZXh0PiBnZXRPZmZzY3JlZW5HTEVTMkNvbnRleHQoKTsKIAogICAg
IC8vIFJldHVybnMgYW4gb25zY3JlZW4gY29udGV4dAogICAgIHZpcnR1YWwgV2ViR0xFUzJDb250
ZXh0KiBnbGVzMkNvbnRleHQoKTsKKyAgICB2aXJ0dWFsIFdlYkNvcmU6OlNoYXJlZENvbnRleHQz
RCogZ2V0U2hhcmVkQ29udGV4dDNEKCk7CiAKICAgICBXZWJDb3JlOjpQb3B1cENvbnRhaW5lciog
c2VsZWN0UG9wdXAoKSBjb25zdCB7IHJldHVybiBtX3NlbGVjdFBvcHVwLmdldCgpOyB9CiAKQEAg
LTUyMSw2ICs1MjEsOCBAQCBwcml2YXRlOgogCiAgICAgT3duUHRyPFdlYkdMRVMyQ29udGV4dD4g
bV9nbGVzMkNvbnRleHQ7CiAKKyAgICBSZWZQdHI8V2ViQ29yZTo6U2hhcmVkQ29udGV4dDNEPiBt
X3NoYXJlZENvbnRleHQzRDsKKwogICAgIE93blB0cjxEZXZpY2VPcmllbnRhdGlvbkNsaWVudFBy
b3h5PiBtX2RldmljZU9yaWVudGF0aW9uQ2xpZW50UHJveHk7CiB9OwogCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>66436</attachid>
            <date>2010-09-02 17:17:14 -0700</date>
            <delta_ts>2010-09-03 11:38:21 -0700</delta_ts>
            <desc>rename SharedContext3D to SharedGraphicsContext3D</desc>
            <filename>bug-44926-20100902171713.patch</filename>
            <type>text/plain</type>
            <size>107633</size>
            <attacher name="James Robinson">jamesr</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ2hhbmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXgg
ZGRjZDUyZTk2NzZiYTY2YmIwM2M0MTBhZmZmNTllMjI2MWY3ZDgzMC4uMmUzNGI0YjZjYzZhOGFl
NDI1YTE2Y2MxMWI5ZjdmNWFiNjNkNWU0YyAxMDA2NDQKLS0tIGEvV2ViQ29yZS9DaGFuZ2VMb2cK
KysrIGIvV2ViQ29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxNjQgQEAKKzIwMTAtMDktMDEgIEph
bWVzIFJvYmluc29uICA8amFtZXNyQGNocm9taXVtLm9yZz4KKworICAgICAgICBSZXZpZXdlZCBi
eSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBNdWx0aXBsZSBhY2NlbGVyYXRlZCAyRCBjYW52
YXNlcyBzaG91bGQgYmUgYWJsZSB0byB1c2UgdGhlIHNhbWUgR3JhcGhpY3NDb250ZXh0M0QKKyAg
ICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTQ0OTI2CisKKyAg
ICAgICAgVGhpcyBhbGxvd3MgbWFueSBhY2NlbGVyYXRlZCAyZCBjYW52YXNlcyB0byByZW5kZXIg
dXNpbmcgYSBzaW5nbGUgdW5kZXJseWluZyBHcmFwaGljc0NvbnRleHQzRC4KKyAgICAgICAgSXQg
aW50cm9kdWNlcyBhIG5ldyBjbGFzcyBTaGFyZWRHcmFwaGljc0NvbnRleHQzRCB0aGF0IG1hbmFn
ZXMgc2V2ZXJhbCBjYWxsZXJzLiAgVGhpcyBjbGFzcyBjb3VsZAorICAgICAgICBhbHNvIGNhY2hl
IHRoZSBjdXJyZW50IHN0YXRlIHRvIGF2b2lkIGlzc3VpbmcgcmVkdW5kYW50IGNhbGxzLCBhbHRo
b3VnaCBpbiB0aGlzIGZpcnN0IGN1dCBpdCBkb2Vzbid0LgorICAgICAgICBUaGUgU2hhcmVkR3Jh
cGhpY3NDb250ZXh0M0QgaXMgcHJvdmlkZWQgdGhyb3VnaCB0aGUgQ2hyb21lQ2xpZW50IHNvIHRo
YXQgaXRzIGxpZmV0aW1lIGNhbiBiZSB0aWVkIHRvIHRoYXQKKyAgICAgICAgb2YgdGhlIHBsYXRm
b3JtLXNwZWNpZmljIGNvbXBvc2l0b3IgaW5mcmFzdHJ1Y3R1cmUuCisKKyAgICAgICAgQWNjZWxl
cmF0ZWQgMmQgY2FudmFzZXMgbWFpbnRhaW4gYSByZWZlcmVuY2UgdG8gYSBTaGFyZWRHcmFwaGlj
c0NvbnRleHQzRCBhbmQgaGF2ZSBvd25lcnNoaXAgb2YgYSBDYW52YXNGcmFtZWJ1ZmZlciwKKyAg
ICAgICAgd2hpY2ggcmVwcmVzZW50cyB0aGUgY2FudmFzJ3MgcmVuZGVyaW5nIHRhcmdldC4gIFRo
ZSBjb21wb3NpdGluZyBsYXllciBmb3IgYW4gYWNjZWxlcmF0ZWQgMmQgY2FudmFzIGlzCisgICAg
ICAgIGF3YXJlIG9ubHkgb2YgdGhlIGNhbnZhcydzIENhbnZhc0ZyYW1lYnVmZmVyLiAgVGhpcyBt
ZWFucyB0aGF0IFdlYkdMIGFuZCAyZCBjYW52YXNlcyBhcmUgbm8gbG9uZ2VyIHRyZWF0ZWQKKyAg
ICAgICAgYXMgdGhlIHNhbWUgdGltZSBvZiBsYXllciBieSB0aGUgY29tcG9zaXRvci4KKworICAg
ICAgICBDb3ZlcmVkIGJ5IGV4aXN0aW5nIGNhbnZhcyB0ZXN0cy4KKworICAgICAgICBJJ3ZlIGRp
dmlkZWQgdGhlIHBlciBmaWxlL2Z1bmN0aW9uIGNoYW5nZXMgaW50byB0aHJlZSBzZWN0aW9uczoK
KyAgICAgICAgLSBQbGF0Zm9ybS1pbmRlcGVuZGVudCBhcHBsaWNhdGlvbiBsb2dpYyBvdXRzaWRl
IFdlYkNvcmUvcGxhdGZvcm0KKyAgICAgICAgLSBQbGF0Zm9ybS1pbmRlcGVuZGVudCBpbmZyYXN0
cnVjdHVyZSBpbiBXZWJDb3JlL3BsYXRmb3JtCisgICAgICAgIC0gUGxhdGZvcm0tc3BlY2lmaWMg
Y2hhbmdlcworCisgICAgICAgIC0gUGxhdGZvcm0taW5kZXBlbmRlbnQgbG9naWMgY2hhbmdlcyBv
dXRzaWRlIFdlYkNvcmUvcGxhdGZvcm06CisgICAgICAgICogV2ViQ29yZS5neXBpOgorICAgICAg
ICAqIGh0bWwvY2FudmFzL0NhbnZhc1JlbmRlcmluZ0NvbnRleHQuY3BwOgorICAgICAgICAqIGh0
bWwvY2FudmFzL0NhbnZhc1JlbmRlcmluZ0NvbnRleHQuaDoKKyAgICAgICAgKFdlYkNvcmU6OkNh
bnZhc1JlbmRlcmluZ0NvbnRleHQ6OnBhaW50c0ludG9DYW52YXNCdWZmZXIpOgorICAgICAgICAq
IGh0bWwvY2FudmFzL0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRC5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ6OkNhbnZhc1JlbmRlcmluZ0NvbnRleHQyRCk6
CisgICAgICAgIChXZWJDb3JlOjpDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ6OnBhaW50c0ludG9D
YW52YXNCdWZmZXIpOgorICAgICAgICAoV2ViQ29yZTo6Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJE
OjpyZXNldCk6CisgICAgICAgIChXZWJDb3JlOjpDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ6OmRp
ZERyYXcpOgorICAgICAgICAqIGh0bWwvY2FudmFzL0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRC5o
OgorICAgICAgICAoV2ViQ29yZTo6Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJEOjpkcmF3aW5nQnVm
ZmVyKToKKyAgICAgICAgKiBodG1sL2NhbnZhcy9XZWJHTFJlbmRlcmluZ0NvbnRleHQuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0OjpwYWludHNJbnRvQ2FudmFz
QnVmZmVyKToKKyAgICAgICAgKiBodG1sL2NhbnZhcy9XZWJHTFJlbmRlcmluZ0NvbnRleHQuaDoK
KyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6Z3JhcGhpY3NDb250ZXh0
M0QpOgorICAgICAgICAqIGxvYWRlci9FbXB0eUNsaWVudHMuaDoKKyAgICAgICAgKFdlYkNvcmU6
OkVtcHR5Q2hyb21lQ2xpZW50OjphdHRhY2hSb290R3JhcGhpY3NMYXllcik6CisgICAgICAgIChX
ZWJDb3JlOjpFbXB0eUNocm9tZUNsaWVudDo6c2V0TmVlZHNPbmVTaG90RHJhd2luZ1N5bmNocm9u
aXphdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpFbXB0eUNocm9tZUNsaWVudDo6c2NoZWR1bGVD
b21wb3NpdGluZ0xheWVyU3luYyk6CisgICAgICAgICogcGFnZS9DaHJvbWVDbGllbnQuaDoKKyAg
ICAgICAgKFdlYkNvcmU6OkNocm9tZUNsaWVudDo6Z2V0U2hhcmVkR3JhcGhpY3NDb250ZXh0M0Qp
OgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJMYXllckJhY2tpbmcuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6UmVuZGVyTGF5ZXJCYWNraW5nOjp1cGRhdGVHcmFwaGljc0xheWVyQ29uZmlndXJh
dGlvbik6CisgICAgICAgIC0gUGxhdGZvcm0taW5kZXBlbmRlbnQgaW5mcmFzdHJ1Y3R1cmUgY2hh
bmdlcyBpbiBXZWJDb3JlL3BsYXRmb3JtOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0dy
YXBoaWNzQ29udGV4dC5jcHA6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3ND
b250ZXh0Lmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NMYXllci5oOgor
ICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NMYXllcjo6c2V0Q29udGVudHNUb1dlYkdMKToKKyAg
ICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXI6OnNldENvbnRlbnRzVG9DYW52YXMyRCk6Cisg
ICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZ3B1L0RyYXdpbmdCdWZmZXIuY3BwOiBBZGRlZC4K
KyAgICAgICAgKFdlYkNvcmU6OkRyYXdpbmdCdWZmZXI6OmNyZWF0ZSk6CisgICAgICAgIChXZWJD
b3JlOjpEcmF3aW5nQnVmZmVyOjpiaW5kKToKKyAgICAgICAgKFdlYkNvcmU6OkRyYXdpbmdCdWZm
ZXI6OnNldFdpbGxQdWJsaXNoQ2FsbGJhY2spOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNz
L2dwdS9EcmF3aW5nQnVmZmVyLmg6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6RHJhd2luZ0J1
ZmZlcjo6c2l6ZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZ3B1L1NoYXJlZEdyYXBo
aWNzQ29udGV4dDNELmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpTaGFyZWRHcmFwaGlj
c0NvbnRleHQzRDo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OlNoYXJlZEdyYXBoaWNzQ29u
dGV4dDNEOjpTaGFyZWRHcmFwaGljc0NvbnRleHQzRCk6CisgICAgICAgIChXZWJDb3JlOjpTaGFy
ZWRHcmFwaGljc0NvbnRleHQzRDo6flNoYXJlZEdyYXBoaWNzQ29udGV4dDNEKToKKyAgICAgICAg
KFdlYkNvcmU6OlNoYXJlZEdyYXBoaWNzQ29udGV4dDNEOjptYWtlQ29udGV4dEN1cnJlbnQpOgor
ICAgICAgICAoV2ViQ29yZTo6U2hhcmVkR3JhcGhpY3NDb250ZXh0M0Q6OnNjaXNzb3IpOgorICAg
ICAgICAoV2ViQ29yZTo6U2hhcmVkR3JhcGhpY3NDb250ZXh0M0Q6OmVuYWJsZSk6CisgICAgICAg
IChXZWJDb3JlOjpTaGFyZWRHcmFwaGljc0NvbnRleHQzRDo6ZGlzYWJsZSk6CisgICAgICAgIChX
ZWJDb3JlOjpTaGFyZWRHcmFwaGljc0NvbnRleHQzRDo6Y2xlYXJDb2xvcik6CisgICAgICAgIChX
ZWJDb3JlOjpTaGFyZWRHcmFwaGljc0NvbnRleHQzRDo6Y2xlYXIpOgorICAgICAgICAoV2ViQ29y
ZTo6U2hhcmVkR3JhcGhpY3NDb250ZXh0M0Q6OmRyYXdBcnJheXMpOgorICAgICAgICAoV2ViQ29y
ZTo6U2hhcmVkR3JhcGhpY3NDb250ZXh0M0Q6OmdldEVycm9yKToKKyAgICAgICAgKFdlYkNvcmU6
OlNoYXJlZEdyYXBoaWNzQ29udGV4dDNEOjpnZXRJbnRlZ2Vydik6CisgICAgICAgIChXZWJDb3Jl
OjpTaGFyZWRHcmFwaGljc0NvbnRleHQzRDo6Y3JlYXRlRnJhbWVidWZmZXIpOgorICAgICAgICAo
V2ViQ29yZTo6U2hhcmVkR3JhcGhpY3NDb250ZXh0M0Q6OmNyZWF0ZVRleHR1cmUpOgorICAgICAg
ICAoV2ViQ29yZTo6U2hhcmVkR3JhcGhpY3NDb250ZXh0M0Q6OmRlbGV0ZUZyYW1lYnVmZmVyKToK
KyAgICAgICAgKFdlYkNvcmU6OlNoYXJlZEdyYXBoaWNzQ29udGV4dDNEOjpkZWxldGVUZXh0dXJl
KToKKyAgICAgICAgKFdlYkNvcmU6OlNoYXJlZEdyYXBoaWNzQ29udGV4dDNEOjpmcmFtZWJ1ZmZl
clRleHR1cmUyRCk6CisgICAgICAgIChXZWJDb3JlOjpTaGFyZWRHcmFwaGljc0NvbnRleHQzRDo6
dGV4UGFyYW1ldGVyaSk6CisgICAgICAgIChXZWJDb3JlOjpTaGFyZWRHcmFwaGljc0NvbnRleHQz
RDo6dGV4SW1hZ2UyRCk6CisgICAgICAgIChXZWJDb3JlOjpTaGFyZWRHcmFwaGljc0NvbnRleHQz
RDo6dGV4U3ViSW1hZ2UyRCk6CisgICAgICAgIChXZWJDb3JlOjpTaGFyZWRHcmFwaGljc0NvbnRl
eHQzRDo6cmVhZFBpeGVscyk6CisgICAgICAgIChXZWJDb3JlOjpTaGFyZWRHcmFwaGljc0NvbnRl
eHQzRDo6c3VwcG9ydHNCR1JBKToKKyAgICAgICAgKFdlYkNvcmU6OlNoYXJlZEdyYXBoaWNzQ29u
dGV4dDNEOjpnZXRUZXh0dXJlKToKKyAgICAgICAgKFdlYkNvcmU6OlNoYXJlZEdyYXBoaWNzQ29u
dGV4dDNEOjphcHBseUNvbXBvc2l0ZU9wZXJhdG9yKToKKyAgICAgICAgKFdlYkNvcmU6OlNoYXJl
ZEdyYXBoaWNzQ29udGV4dDNEOjp1c2VRdWFkVmVydGljZXMpOgorICAgICAgICAoV2ViQ29yZTo6
U2hhcmVkR3JhcGhpY3NDb250ZXh0M0Q6OnNldEFjdGl2ZVRleHR1cmUpOgorICAgICAgICAoV2Vi
Q29yZTo6U2hhcmVkR3JhcGhpY3NDb250ZXh0M0Q6OmJpbmRUZXh0dXJlKToKKyAgICAgICAgKFdl
YkNvcmU6OlNoYXJlZEdyYXBoaWNzQ29udGV4dDNEOjp1c2VGaWxsU29saWRQcm9ncmFtKToKKyAg
ICAgICAgKFdlYkNvcmU6OlNoYXJlZEdyYXBoaWNzQ29udGV4dDNEOjp1c2VUZXh0dXJlUHJvZ3Jh
bSk6CisgICAgICAgIChXZWJDb3JlOjpTaGFyZWRHcmFwaGljc0NvbnRleHQzRDo6YmluZEZyYW1l
YnVmZmVyKToKKyAgICAgICAgKFdlYkNvcmU6OlNoYXJlZEdyYXBoaWNzQ29udGV4dDNEOjpzZXRW
aWV3cG9ydCk6CisgICAgICAgIChXZWJDb3JlOjpTaGFyZWRHcmFwaGljc0NvbnRleHQzRDo6cGFp
bnRzSW50b0NhbnZhc0J1ZmZlcik6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZ3B1L1No
YXJlZEdyYXBoaWNzQ29udGV4dDNELmg6IEFkZGVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBo
aWNzL2dwdS9UZXh0dXJlLmNwcDoKKyAgICAgICAgLSBQbGF0Zm9ybS1zcGVjaWZpYyBjaGFuZ2Vz
IChjaHJvbWl1bSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vQ2FudmFz
MkRMYXllckNocm9taXVtLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpDYW52YXMyRExh
eWVyQ2hyb21pdW06OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpDYW52YXMyRExheWVyQ2hy
b21pdW06OkNhbnZhczJETGF5ZXJDaHJvbWl1bSk6CisgICAgICAgIChXZWJDb3JlOjpDYW52YXMy
RExheWVyQ2hyb21pdW06On5DYW52YXMyRExheWVyQ2hyb21pdW0pOgorICAgICAgICAoV2ViQ29y
ZTo6Q2FudmFzMkRMYXllckNocm9taXVtOjp1cGRhdGVDb250ZW50cyk6CisgICAgICAgIChXZWJD
b3JlOjpDYW52YXMyRExheWVyQ2hyb21pdW06OnNldERyYXdpbmdCdWZmZXIpOgorICAgICAgICAo
V2ViQ29yZTo6Q2FudmFzMkRMYXllckNocm9taXVtOjp0ZXh0dXJlSWQpOgorICAgICAgICAqIHBs
YXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0NhbnZhczJETGF5ZXJDaHJvbWl1bS5oOiBBZGRlZC4K
KyAgICAgICAgKFdlYkNvcmU6OkNhbnZhczJETGF5ZXJDaHJvbWl1bTo6ZHJhd3NDb250ZW50KToK
KyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9DYW52YXNMYXllckNocm9taXVt
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNhbnZhc0xheWVyQ2hyb21pdW06OkNhbnZhc0xheWVy
Q2hyb21pdW0pOgorICAgICAgICAoV2ViQ29yZTo6Q2FudmFzTGF5ZXJDaHJvbWl1bTo6fkNhbnZh
c0xheWVyQ2hyb21pdW0pOgorICAgICAgICAoV2ViQ29yZTo6Q2FudmFzTGF5ZXJDaHJvbWl1bTo6
ZHJhdyk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vQ2FudmFzTGF5ZXJD
aHJvbWl1bS5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0RyYXdpbmdC
dWZmZXJDaHJvbWl1bS5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6RHJhd2luZ0J1ZmZl
cjo6RHJhd2luZ0J1ZmZlcik6CisgICAgICAgIChXZWJDb3JlOjpEcmF3aW5nQnVmZmVyOjp+RHJh
d2luZ0J1ZmZlcik6CisgICAgICAgIChXZWJDb3JlOjpEcmF3aW5nQnVmZmVyOjpwdWJsaXNoVG9Q
bGF0Zm9ybUxheWVyKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9HTEVT
MkNhbnZhcy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpHTEVTMkNhbnZhczo6R0xFUzJDYW52YXMp
OgorICAgICAgICAoV2ViQ29yZTo6R0xFUzJDYW52YXM6On5HTEVTMkNhbnZhcyk6CisgICAgICAg
IChXZWJDb3JlOjpHTEVTMkNhbnZhczo6YmluZEZyYW1lYnVmZmVyKToKKyAgICAgICAgKFdlYkNv
cmU6OkdMRVMyQ2FudmFzOjpjbGVhclJlY3QpOgorICAgICAgICAoV2ViQ29yZTo6R0xFUzJDYW52
YXM6OmZpbGxSZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OkdMRVMyQ2FudmFzOjpkcmF3VGV4dHVy
ZWRSZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OkdMRVMyQ2FudmFzOjpkcmF3VGV4dHVyZWRSZWN0
VGlsZSk6CisgICAgICAgIChXZWJDb3JlOjpHTEVTMkNhbnZhczo6ZHJhd1F1YWQpOgorICAgICAg
ICAoV2ViQ29yZTo6R0xFUzJDYW52YXM6OmNyZWF0ZVRleHR1cmUpOgorICAgICAgICAoV2ViQ29y
ZTo6R0xFUzJDYW52YXM6OmdldFRleHR1cmUpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNz
L2Nocm9taXVtL0dMRVMyQ2FudmFzLmg6CisgICAgICAgIChXZWJDb3JlOjpHTEVTMkNhbnZhczo6
Y29udGV4dCk6CisgICAgICAgIChXZWJDb3JlOjpHTEVTMkNhbnZhczo6ZHJhd2luZ0J1ZmZlcik6
CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vR3JhcGhpY3NMYXllckNocm9t
aXVtLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXJDaHJvbWl1bTo6c2V0Q29u
dGVudHNUb1dlYkdMKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXJDaHJvbWl1bTo6
c2V0Q29udGVudHNUb0NhbnZhczJEKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJv
bWl1bS9HcmFwaGljc0xheWVyQ2hyb21pdW0uaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGlj
cy9jaHJvbWl1bS9MYXllclJlbmRlcmVyQ2hyb21pdW0uY3BwOgorICAgICAgICAoV2ViQ29yZTo6
TGF5ZXJSZW5kZXJlckNocm9taXVtOjpkcmF3TGF5ZXIpOgorICAgICAgICAqIHBsYXRmb3JtL2dy
YXBoaWNzL2Nocm9taXVtL1dlYkdMTGF5ZXJDaHJvbWl1bS5jcHA6IEFkZGVkLgorICAgICAgICAo
V2ViQ29yZTo6V2ViR0xMYXllckNocm9taXVtOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6
V2ViR0xMYXllckNocm9taXVtOjpXZWJHTExheWVyQ2hyb21pdW0pOgorICAgICAgICAoV2ViQ29y
ZTo6V2ViR0xMYXllckNocm9taXVtOjp1cGRhdGVDb250ZW50cyk6CisgICAgICAgIChXZWJDb3Jl
OjpXZWJHTExheWVyQ2hyb21pdW06OnNldENvbnRleHQpOgorICAgICAgICAqIHBsYXRmb3JtL2dy
YXBoaWNzL2Nocm9taXVtL1dlYkdMTGF5ZXJDaHJvbWl1bS5oOiBBZGRlZC4KKyAgICAgICAgKFdl
YkNvcmU6OldlYkdMTGF5ZXJDaHJvbWl1bTo6ZHJhd3NDb250ZW50KToKKyAgICAgICAgKiBwbGF0
Zm9ybS9ncmFwaGljcy9za2lhL0dyYXBoaWNzQ29udGV4dFNraWEuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6R3JhcGhpY3NDb250ZXh0OjpzeW5jU29mdHdhcmVDYW52YXMpOgorICAgICAgICAoV2Vi
Q29yZTo6R3JhcGhpY3NDb250ZXh0OjpzZXRTaGFyZWRHcmFwaGljc0NvbnRleHQzRCk6CisgICAg
ICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvc2tpYS9JbWFnZVNraWEuY3BwOgorICAgICAgICAqIHBs
YXRmb3JtL2dyYXBoaWNzL3NraWEvUGxhdGZvcm1Db250ZXh0U2tpYS5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpQbGF0Zm9ybUNvbnRleHRTa2lhOjp+UGxhdGZvcm1Db250ZXh0U2tpYSk6CisgICAg
ICAgIChXZWJDb3JlOjpXaWxsUHVibGlzaENhbGxiYWNrSW1wbDo6Y3JlYXRlKToKKyAgICAgICAg
KFdlYkNvcmU6OldpbGxQdWJsaXNoQ2FsbGJhY2tJbXBsOjp3aWxsUHVibGlzaCk6CisgICAgICAg
IChXZWJDb3JlOjpXaWxsUHVibGlzaENhbGxiYWNrSW1wbDo6V2lsbFB1Ymxpc2hDYWxsYmFja0lt
cGwpOgorICAgICAgICAoV2ViQ29yZTo6UGxhdGZvcm1Db250ZXh0U2tpYTo6c2V0U2hhcmVkR3Jh
cGhpY3NDb250ZXh0M0QpOgorICAgICAgICAoV2ViQ29yZTo6UGxhdGZvcm1Db250ZXh0U2tpYTo6
dXBsb2FkU29mdHdhcmVUb0hhcmR3YXJlKToKKyAgICAgICAgKFdlYkNvcmU6OlBsYXRmb3JtQ29u
dGV4dFNraWE6OnJlYWRiYWNrSGFyZHdhcmVUb1NvZnR3YXJlKToKKyAgICAgICAgKiBwbGF0Zm9y
bS9ncmFwaGljcy9za2lhL1BsYXRmb3JtQ29udGV4dFNraWEuaDoKKyAgICAgICAgLSBQbGF0Zm9y
bS1zcGVjaWZpYyBjaGFuZ2VzIChtYWMpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL21h
Yy9HcmFwaGljc0xheWVyQ0EuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9tYWMvR3Jh
cGhpY3NMYXllckNBLm1tOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NMYXllckNBOjpzZXRD
b250ZW50c1RvV2ViR0wpOgorCisKIDIwMTAtMDgtMzAgIENocmlzIFJvZ2VycyAgPGNyb2dlcnNA
Z29vZ2xlLmNvbT4KIAogICAgICAgICBSZXZpZXdlZCBieSBLZW5uZXRoIFJ1c3NlbGwuCmRpZmYg
LS1naXQgYS9XZWJDb3JlL1dlYkNvcmUuZ3lwaSBiL1dlYkNvcmUvV2ViQ29yZS5neXBpCmluZGV4
IGU1YjU3YmEwOGUzYTAwZDhkNTk4Y2QyYmU0MDczZDcwYTlhMGJkZjcuLmExNGM5OWE5Y2QxNTc1
N2U0ZjEzMDU5N2RjZDQwNjkzMTQzYmJkYmIgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvV2ViQ29yZS5n
eXBpCisrKyBiL1dlYkNvcmUvV2ViQ29yZS5neXBpCkBAIC0yMjM2LDggKzIyMzYsMTEgQEAKICAg
ICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jZy9QYXRoQ0cuY3BwJywKICAgICAgICAgICAg
ICdwbGF0Zm9ybS9ncmFwaGljcy9jZy9QYXR0ZXJuQ0cuY3BwJywKICAgICAgICAgICAgICdwbGF0
Zm9ybS9ncmFwaGljcy9jZy9UcmFuc2Zvcm1hdGlvbk1hdHJpeENHLmNwcCcsCisgICAgICAgICAg
ICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vQ2FudmFzMkRMYXllckNocm9taXVtLmNwcCcs
CisgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vQ2FudmFzMkRMYXllckNo
cm9taXVtLmgnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0NhbnZh
c0xheWVyQ2hyb21pdW0uY3BwJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJv
bWl1bS9DYW52YXNMYXllckNocm9taXVtLmgnLAorICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBo
aWNzL2Nocm9taXVtL0RyYXdpbmdCdWZmZXJDaHJvbWl1bS5jcHAnLAogICAgICAgICAgICAgJ3Bs
YXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0NvbnRlbnRMYXllckNocm9taXVtLmNwcCcsCiAgICAg
ICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vQ29udGVudExheWVyQ2hyb21pdW0u
aCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vRm9udENhY2hlQ2hy
b21pdW1XaW4uY3BwJywKQEAgLTIyODMsNiArMjI4Niw4IEBACiAgICAgICAgICAgICAncGxhdGZv
cm0vZ3JhcGhpY3MvY2hyb21pdW0vVW5pc2NyaWJlSGVscGVyVGV4dFJ1bi5oJywKICAgICAgICAg
ICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9WaWRlb0xheWVyQ2hyb21pdW0uY3BwJywK
ICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9WaWRlb0xheWVyQ2hyb21p
dW0uaCcsCisgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vV2ViR0xMYXll
ckNocm9taXVtLmNwcCcsCisgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0v
V2ViR0xMYXllckNocm9taXVtLmgnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nv
Y29hL0ZvbnRQbGF0Zm9ybURhdGEuaCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3Mv
ZmlsdGVycy9GRUJsZW5kLmNwcCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvZmls
dGVycy9GRUJsZW5kLmgnLApAQCAtMjMwMyw2ICsyMzA4LDEwIEBACiAgICAgICAgICAgICAncGxh
dGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9Tb3VyY2VBbHBoYS5oJywKICAgICAgICAgICAgICdwbGF0
Zm9ybS9ncmFwaGljcy9maWx0ZXJzL1NvdXJjZUdyYXBoaWMuY3BwJywKICAgICAgICAgICAgICdw
bGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL1NvdXJjZUdyYXBoaWMuaCcsCisgICAgICAgICAgICAn
cGxhdGZvcm0vZ3JhcGhpY3MvZ3B1L0RyYXdpbmdCdWZmZXIuY3BwJywKKyAgICAgICAgICAgICdw
bGF0Zm9ybS9ncmFwaGljcy9ncHUvRHJhd2luZ0J1ZmZlci5oJywKKyAgICAgICAgICAgICdwbGF0
Zm9ybS9ncmFwaGljcy9ncHUvU2hhcmVkR3JhcGhpY3NDb250ZXh0M0QuY3BwJywKKyAgICAgICAg
ICAgICdwbGF0Zm9ybS9ncmFwaGljcy9ncHUvU2hhcmVkR3JhcGhpY3NDb250ZXh0M0QuaCcsCiAg
ICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvZ3B1L1NoYWRlci5jcHAnLAogICAgICAgICAg
ICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2dwdS9TaGFkZXIuaCcsCiAgICAgICAgICAgICAncGxhdGZv
cm0vZ3JhcGhpY3MvZ3B1L1NvbGlkRmlsbFNoYWRlci5jcHAnLApAQCAtMjU2MSw4ICsyNTcwLDgg
QEAKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9JbWFnZUJ1ZmZlci5jcHAnLAogICAg
ICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlQnVmZmVyLmgnLAogICAgICAgICAgICAg
J3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlT2JzZXJ2ZXIuaCcsCi0gICAgICAgICAgICAncGxhdGZv
cm0vZ3JhcGhpY3MvSW1hZ2VTb3VyY2UuaCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhp
Y3MvSW1hZ2VTb3VyY2UuY3BwJywKKyAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9JbWFn
ZVNvdXJjZS5oJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9JbnRQb2ludC5oJywK
ICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9JbnRSZWN0LmNwcCcsCiAgICAgICAgICAg
ICAncGxhdGZvcm0vZ3JhcGhpY3MvSW50UmVjdC5oJywKZGlmZiAtLWdpdCBhL1dlYkNvcmUvaHRt
bC9jYW52YXMvQ2FudmFzUmVuZGVyaW5nQ29udGV4dC5jcHAgYi9XZWJDb3JlL2h0bWwvY2FudmFz
L0NhbnZhc1JlbmRlcmluZ0NvbnRleHQuY3BwCmluZGV4IDFlODk3ZDMwZWNlMTk4MzkxMjhmMDA4
ZGRmOGQ0ODYwZDcxNDA2MjcuLmUwMTkzMzJiYTgxZjUzYzllYjJjY2NjNTNiMjQ1MzA0NmVjYmQ4
NWUgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvaHRtbC9jYW52YXMvQ2FudmFzUmVuZGVyaW5nQ29udGV4
dC5jcHAKKysrIGIvV2ViQ29yZS9odG1sL2NhbnZhcy9DYW52YXNSZW5kZXJpbmdDb250ZXh0LmNw
cApAQCAtMjUsOSArMjUsNiBAQAogCiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiQ2Fu
dmFzUmVuZGVyaW5nQ29udGV4dC5oIgotI2lmIEVOQUJMRShBQ0NFTEVSQVRFRF8yRF9DQU5WQVMp
IHx8IEVOQUJMRSgzRF9DQU5WQVMpCi0jaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0M0QuaCIKLSNl
bmRpZgogI2luY2x1ZGUgIkhUTUxDYW52YXNFbGVtZW50LmgiCiAKIG5hbWVzcGFjZSBXZWJDb3Jl
IHsKQEAgLTQ3LDEzICs0NCw0IEBAIHZvaWQgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDo6ZGVyZWYo
KQogICAgIG1fY2FudmFzLT5kZXJlZigpOyAKIH0KIAotYm9vbCBDYW52YXNSZW5kZXJpbmdDb250
ZXh0OjpwYWludHNJbnRvQ2FudmFzQnVmZmVyKCkgY29uc3QKLXsKLSNpZiBFTkFCTEUoQUNDRUxF
UkFURURfMkRfQ0FOVkFTKSB8fCBFTkFCTEUoM0RfQ0FOVkFTKQotICAgIGlmIChHcmFwaGljc0Nv
bnRleHQzRCogY29udGV4dDNEID0gZ3JhcGhpY3NDb250ZXh0M0QoKSkKLSAgICAgICAgcmV0dXJu
IGNvbnRleHQzRC0+cGFpbnRzSW50b0NhbnZhc0J1ZmZlcigpOwotI2VuZGlmCi0gICAgcmV0dXJu
IHRydWU7Ci19Ci0KIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1dlYkNvcmUv
aHRtbC9jYW52YXMvQ2FudmFzUmVuZGVyaW5nQ29udGV4dC5oIGIvV2ViQ29yZS9odG1sL2NhbnZh
cy9DYW52YXNSZW5kZXJpbmdDb250ZXh0LmgKaW5kZXggMmNkYmUxZDM3NjU5NGRiZTBkZmJkNzAw
ZjJlZmI3MzRhM2RiOTJjNi4uYzcxNjhiMWQwN2RlYThjZmM0ZDY5NDE5YTRhNjVjNGUyZmJhZGNh
MiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9odG1sL2NhbnZhcy9DYW52YXNSZW5kZXJpbmdDb250ZXh0
LmgKKysrIGIvV2ViQ29yZS9odG1sL2NhbnZhcy9DYW52YXNSZW5kZXJpbmdDb250ZXh0LmgKQEAg
LTMxLDcgKzMxLDYgQEAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogICAgIGNsYXNzIFdlYkdMT2Jq
ZWN0OwotICAgIGNsYXNzIEdyYXBoaWNzQ29udGV4dDNEOwogICAgIGNsYXNzIEhUTUxDYW52YXNF
bGVtZW50OwogCiAgICAgY2xhc3MgQ2FudmFzUmVuZGVyaW5nQ29udGV4dCA6IHB1YmxpYyBOb25j
b3B5YWJsZSB7CkBAIC00OSwxMiArNDgsOCBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAg
IHZpcnR1YWwgYm9vbCBpczNkKCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KICAgICAgICAgdmly
dHVhbCBib29sIGlzQWNjZWxlcmF0ZWQoKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQogICAgICAg
ICAKLSAgICAgICAgLy8gRm9yIGFjY2VsZXJhdGVkIGNhbnZhc2VzLCByZXR1cm5zIGEgcG9pbnRl
ciB0byB0aGUgdW5kZXJseWluZyBHcmFwaGljc0NvbnRleHQzRC4KLSAgICAgICAgLy8gRm9yIG5v
biBhY2NlbGVyYXRlZCBjYW52YXNlcyByZXR1cm5zIDAuCi0gICAgICAgIHZpcnR1YWwgR3JhcGhp
Y3NDb250ZXh0M0QqIGdyYXBoaWNzQ29udGV4dDNEKCkgY29uc3QgeyByZXR1cm4gMDsgfQotCiAg
ICAgICAgIHZpcnR1YWwgdm9pZCBwYWludFJlbmRlcmluZ1Jlc3VsdHNUb0NhbnZhcygpIHt9Ci0g
ICAgICAgIGJvb2wgcGFpbnRzSW50b0NhbnZhc0J1ZmZlcigpIGNvbnN0OworICAgICAgICB2aXJ0
dWFsIGJvb2wgcGFpbnRzSW50b0NhbnZhc0J1ZmZlcigpIGNvbnN0IHsgcmV0dXJuIHRydWU7IH0K
IAogICAgIHByaXZhdGU6CiAgICAgICAgIEhUTUxDYW52YXNFbGVtZW50KiBtX2NhbnZhczsKZGlm
ZiAtLWdpdCBhL1dlYkNvcmUvaHRtbC9jYW52YXMvQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJELmNw
cCBiL1dlYkNvcmUvaHRtbC9jYW52YXMvQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJELmNwcAppbmRl
eCA2ZGY2YWJmOTY3NGFkOWEyMGYyMjcyYTE3ODkzYzg1ODUwZGU1N2Q3Li4zMzI3YWJiYTk1ZTI3
MDU4NzIwZmNkMjcyZTUwYzY5Y2E0MDU5NDRkIDEwMDY0NAotLS0gYS9XZWJDb3JlL2h0bWwvY2Fu
dmFzL0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRC5jcHAKKysrIGIvV2ViQ29yZS9odG1sL2NhbnZh
cy9DYW52YXNSZW5kZXJpbmdDb250ZXh0MkQuY3BwCkBAIC01OSw4ICs1OSwxMiBAQAogI2luY2x1
ZGUgIlRleHRNZXRyaWNzLmgiCiAKICNpZiBFTkFCTEUoQUNDRUxFUkFURURfMkRfQ0FOVkFTKQor
I2luY2x1ZGUgIkNocm9tZS5oIgorI2luY2x1ZGUgIkNocm9tZUNsaWVudC5oIgorI2luY2x1ZGUg
IkRyYXdpbmdCdWZmZXIuaCIKICNpbmNsdWRlICJGcmFtZVZpZXcuaCIKICNpbmNsdWRlICJHcmFw
aGljc0NvbnRleHQzRC5oIgorI2luY2x1ZGUgIlNoYXJlZEdyYXBoaWNzQ29udGV4dDNELmgiCiAj
aWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQogI2luY2x1ZGUgIlJlbmRlckxheWVyLmgi
CiAjZW5kaWYKQEAgLTEyNCwxNyArMTI4LDExIEBAIENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRDo6
Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJEKEhUTUxDYW52YXNFbGVtZW50KiBjYW52YXMsIGJvCiAg
ICAgICAgIHJldHVybjsKICAgICBpZiAoIXAtPnNldHRpbmdzKCktPmFjY2VsZXJhdGVkMmRDYW52
YXNFbmFibGVkKCkpCiAgICAgICAgIHJldHVybjsKLSAgICBpZiAoRnJhbWVWaWV3KiB2aWV3ID0g
Y2FudmFzLT5kb2N1bWVudCgpLT52aWV3KCkpIHsKLSAgICAgICAgaWYgKFNjcm9sbFZpZXcqIHJv
b3RWaWV3ID0gdmlldy0+cm9vdCgpKSB7Ci0gICAgICAgICAgICBpZiAoSG9zdFdpbmRvdyogaG9z
dFdpbmRvdyA9IHJvb3RWaWV3LT5ob3N0V2luZG93KCkpIHsKLSAgICAgICAgICAgICAgICAvLyBT
ZXQgdXAgb3VyIGNvbnRleHQKLSAgICAgICAgICAgICAgICBHcmFwaGljc0NvbnRleHQzRDo6QXR0
cmlidXRlcyBhdHRyOwotICAgICAgICAgICAgICAgIGF0dHIuc3RlbmNpbCA9IHRydWU7Ci0gICAg
ICAgICAgICAgICAgbV9jb250ZXh0M0QgPSBHcmFwaGljc0NvbnRleHQzRDo6Y3JlYXRlKGF0dHIs
IGhvc3RXaW5kb3cpOwotICAgICAgICAgICAgICAgIGlmIChtX2NvbnRleHQzRCkKLSAgICAgICAg
ICAgICAgICAgICAgaWYgKEdyYXBoaWNzQ29udGV4dCogYyA9IGRyYXdpbmdDb250ZXh0KCkpCi0g
ICAgICAgICAgICAgICAgICAgICAgICBjLT5zZXRHcmFwaGljc0NvbnRleHQzRChtX2NvbnRleHQz
RC5nZXQoKSwgSW50U2l6ZShjYW52YXMtPndpZHRoKCksIGNhbnZhcy0+aGVpZ2h0KCkpKTsKLSAg
ICAgICAgICAgIH0KKyAgICBtX2NvbnRleHQzRCA9IHAtPmNocm9tZSgpLT5jbGllbnQoKS0+Z2V0
U2hhcmVkR3JhcGhpY3NDb250ZXh0M0QoKTsKKyAgICBpZiAobV9jb250ZXh0M0QpIHsKKyAgICAg
ICAgaWYgKEdyYXBoaWNzQ29udGV4dCogYyA9IGRyYXdpbmdDb250ZXh0KCkpIHsKKyAgICAgICAg
ICAgIG1fZHJhd2luZ0J1ZmZlciA9IERyYXdpbmdCdWZmZXI6OmNyZWF0ZShtX2NvbnRleHQzRC5n
ZXQoKSwgSW50U2l6ZShjYW52YXMtPndpZHRoKCksIGNhbnZhcy0+aGVpZ2h0KCkpKTsKKyAgICAg
ICAgICAgIGMtPnNldFNoYXJlZEdyYXBoaWNzQ29udGV4dDNEKG1fY29udGV4dDNELmdldCgpLCBt
X2RyYXdpbmdCdWZmZXIuZ2V0KCksIEludFNpemUoY2FudmFzLT53aWR0aCgpLCBjYW52YXMtPmhl
aWdodCgpKSk7CiAgICAgICAgIH0KICAgICB9CiAjZW5kaWYKQEAgLTE1Myw2ICsxNTEsMTYgQEAg
Ym9vbCBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ6OmlzQWNjZWxlcmF0ZWQoKSBjb25zdAogI2Vu
ZGlmCiB9CiAKK2Jvb2wgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEOjpwYWludHNJbnRvQ2FudmFz
QnVmZmVyKCkgY29uc3QKK3sKKyNpZiBFTkFCTEUoQUNDRUxFUkFURURfMkRfQ0FOVkFTKQorICAg
IGlmIChtX2NvbnRleHQzRCkKKyAgICAgICAgcmV0dXJuIG1fY29udGV4dDNELT5wYWludHNJbnRv
Q2FudmFzQnVmZmVyKCk7CisjZW5kaWYKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworCiB2b2lkIENh
bnZhc1JlbmRlcmluZ0NvbnRleHQyRDo6cmVzZXQoKQogewogICAgIG1fc3RhdGVTdGFjay5yZXNp
emUoMSk7CkBAIC0xNjAsOCArMTY4LDEwIEBAIHZvaWQgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJE
OjpyZXNldCgpCiAgICAgbV9wYXRoLmNsZWFyKCk7CiAjaWYgRU5BQkxFKEFDQ0VMRVJBVEVEXzJE
X0NBTlZBUykKICAgICBpZiAobV9jb250ZXh0M0QpIHsKLSAgICAgICAgaWYgKEdyYXBoaWNzQ29u
dGV4dCogYyA9IGRyYXdpbmdDb250ZXh0KCkpCi0gICAgICAgICAgICBjLT5zZXRHcmFwaGljc0Nv
bnRleHQzRChtX2NvbnRleHQzRC5nZXQoKSwgSW50U2l6ZShjYW52YXMoKS0+d2lkdGgoKSwgY2Fu
dmFzKCktPmhlaWdodCgpKSk7CisgICAgICAgIGlmIChHcmFwaGljc0NvbnRleHQqIGMgPSBkcmF3
aW5nQ29udGV4dCgpKSB7CisgICAgICAgICAgICBtX2RyYXdpbmdCdWZmZXIgPSBEcmF3aW5nQnVm
ZmVyOjpjcmVhdGUobV9jb250ZXh0M0QuZ2V0KCksIEludFNpemUoY2FudmFzKCktPndpZHRoKCks
IGNhbnZhcygpLT5oZWlnaHQoKSkpOworICAgICAgICAgICAgYy0+c2V0U2hhcmVkR3JhcGhpY3ND
b250ZXh0M0QobV9jb250ZXh0M0QuZ2V0KCksIG1fZHJhd2luZ0J1ZmZlci5nZXQoKSwgSW50U2l6
ZShjYW52YXMoKS0+d2lkdGgoKSwgY2FudmFzKCktPmhlaWdodCgpKSk7CisgICAgICAgIH0KICAg
ICB9CiAjZW5kaWYKIH0KQEAgLTE1MDQsNyArMTUxNCw3IEBAIHZvaWQgQ2FudmFzUmVuZGVyaW5n
Q29udGV4dDJEOjpkaWREcmF3KGNvbnN0IEZsb2F0UmVjdCYgciwgdW5zaWduZWQgb3B0aW9ucykK
ICNpZiBFTkFCTEUoQUNDRUxFUkFURURfMkRfQ0FOVkFTKSAmJiBVU0UoQUNDRUxFUkFURURfQ09N
UE9TSVRJTkcpCiAgICAgLy8gSWYgd2UgYXJlIGRyYXdpbmcgdG8gaGFyZHdhcmUgYW5kIHdlIGhh
dmUgYSBjb21wb3NpdGVkIGxheWVyLCBqdXN0IGNhbGwgcmVuZGVyZXJDb250ZW50Q2hhbmdlZCgp
LgogICAgIFJlbmRlckJveCogcmVuZGVyQm94ID0gY2FudmFzKCktPnJlbmRlckJveCgpOwotICAg
IGlmIChtX2NvbnRleHQzRCAmJiByZW5kZXJCb3ggJiYgcmVuZGVyQm94LT5oYXNMYXllcigpICYm
IHJlbmRlckJveC0+bGF5ZXIoKS0+aGFzQWNjZWxlcmF0ZWRDb21wb3NpdGluZygpKQorICAgIGlm
IChpc0FjY2VsZXJhdGVkKCkgJiYgcmVuZGVyQm94ICYmIHJlbmRlckJveC0+aGFzTGF5ZXIoKSAm
JiByZW5kZXJCb3gtPmxheWVyKCktPmhhc0FjY2VsZXJhdGVkQ29tcG9zaXRpbmcoKSkKICAgICAg
ICAgcmVuZGVyQm94LT5sYXllcigpLT5yZW5kZXJlckNvbnRlbnRDaGFuZ2VkKCk7CiAgICAgZWxz
ZQogI2VuZGlmCmRpZmYgLS1naXQgYS9XZWJDb3JlL2h0bWwvY2FudmFzL0NhbnZhc1JlbmRlcmlu
Z0NvbnRleHQyRC5oIGIvV2ViQ29yZS9odG1sL2NhbnZhcy9DYW52YXNSZW5kZXJpbmdDb250ZXh0
MkQuaAppbmRleCA5ODU3MzQ0M2U4MWRmOWY3ZDk2ZjY5MjMyZmVmZjkwOGUwY2U2Yjg5Li4zN2Y5
MDVkODFkZDBiMGY2Zjk4NmM1NmM2ZjlkOGNjNzAzMTM1YTM3IDEwMDY0NAotLS0gYS9XZWJDb3Jl
L2h0bWwvY2FudmFzL0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRC5oCisrKyBiL1dlYkNvcmUvaHRt
bC9jYW52YXMvQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJELmgKQEAgLTYxLDcgKzYxLDcgQEAgY2xh
c3MgS1VSTDsKIGNsYXNzIFRleHRNZXRyaWNzOwogCiAjaWYgRU5BQkxFKEFDQ0VMRVJBVEVEXzJE
X0NBTlZBUykKLWNsYXNzIEdyYXBoaWNzQ29udGV4dDNEOworY2xhc3MgU2hhcmVkR3JhcGhpY3ND
b250ZXh0M0Q7CiAjZW5kaWYKIAogdHlwZWRlZiBpbnQgRXhjZXB0aW9uQ29kZTsKQEAgLTc0LDYg
Kzc0LDcgQEAgcHVibGljOgogCiAgICAgdmlydHVhbCBib29sIGlzMmQoKSBjb25zdCB7IHJldHVy
biB0cnVlOyB9CiAgICAgdmlydHVhbCBib29sIGlzQWNjZWxlcmF0ZWQoKSBjb25zdDsKKyAgICB2
aXJ0dWFsIGJvb2wgcGFpbnRzSW50b0NhbnZhc0J1ZmZlcigpIGNvbnN0OwogCiAgICAgQ2FudmFz
U3R5bGUqIHN0cm9rZVN0eWxlKCkgY29uc3Q7CiAgICAgdm9pZCBzZXRTdHJva2VTdHlsZShQYXNz
UmVmUHRyPENhbnZhc1N0eWxlPik7CkBAIC0yMjQsNyArMjI1LDcgQEAgcHVibGljOgogICAgIHZp
cnR1YWwgdm9pZCBwYWludFJlbmRlcmluZ1Jlc3VsdHNUb0NhbnZhcygpOwogCiAjaWYgRU5BQkxF
KEFDQ0VMRVJBVEVEXzJEX0NBTlZBUykKLSAgICB2aXJ0dWFsIEdyYXBoaWNzQ29udGV4dDNEKiBn
cmFwaGljc0NvbnRleHQzRCgpIGNvbnN0IHsgcmV0dXJuIG1fY29udGV4dDNELmdldCgpOyB9Cisg
ICAgRHJhd2luZ0J1ZmZlciogZHJhd2luZ0J1ZmZlcigpIHsgcmV0dXJuIG1fZHJhd2luZ0J1ZmZl
ci5nZXQoKTsgfQogI2VuZGlmCiAKIHByaXZhdGU6CkBAIC0yOTgsNyArMjk5LDggQEAgcHJpdmF0
ZToKICNlbmRpZgogCiAjaWYgRU5BQkxFKEFDQ0VMRVJBVEVEXzJEX0NBTlZBUykKLSAgICBPd25Q
dHI8R3JhcGhpY3NDb250ZXh0M0Q+IG1fY29udGV4dDNEOworICAgIFJlZlB0cjxTaGFyZWRHcmFw
aGljc0NvbnRleHQzRD4gbV9jb250ZXh0M0Q7CisgICAgUmVmUHRyPERyYXdpbmdCdWZmZXI+IG1f
ZHJhd2luZ0J1ZmZlcjsKICNlbmRpZgogfTsKIApkaWZmIC0tZ2l0IGEvV2ViQ29yZS9odG1sL2Nh
bnZhcy9XZWJHTFJlbmRlcmluZ0NvbnRleHQuY3BwIGIvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJH
TFJlbmRlcmluZ0NvbnRleHQuY3BwCmluZGV4IDk1OTFhNTNjZmVjMDU5ZTI5OTM2YzU4MTkwNzBh
NGVhZmU5Y2Q2ODMuLjY0Y2I1ZDNlZmRjZmViMmUyNTM3MDQzNjg5NGRmMGM1OTM2YTJmM2EgMTAw
NjQ0Ci0tLSBhL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xSZW5kZXJpbmdDb250ZXh0LmNwcAor
KysgYi9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMUmVuZGVyaW5nQ29udGV4dC5jcHAKQEAgLTE3
MCw2ICsxNzAsMTEgQEAgdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnBhaW50UmVuZGVyaW5n
UmVzdWx0c1RvQ2FudmFzKCkKICAgICBtX2NvbnRleHQtPnBhaW50UmVuZGVyaW5nUmVzdWx0c1Rv
Q2FudmFzKHRoaXMpOwogfQogCitib29sIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6cGFpbnRzSW50
b0NhbnZhc0J1ZmZlcigpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fY29udGV4dC0+cGFpbnRzSW50
b0NhbnZhc0J1ZmZlcigpOworfQorCiB2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6cmVzaGFw
ZShpbnQgd2lkdGgsIGludCBoZWlnaHQpCiB7CiAgICAgaWYgKG1fbmVlZHNVcGRhdGUpIHsKZGlm
ZiAtLWdpdCBhL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xSZW5kZXJpbmdDb250ZXh0LmggYi9X
ZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMUmVuZGVyaW5nQ29udGV4dC5oCmluZGV4IDY2ZWM4ZDgy
YWE3M2ZkYjRiNDlmMjc2YjNiNmQwNTJkNTM4NDNhYmIuLjgxMzkwZjllNGZkNTE5MGJkZmQ1ZTJl
MDA0NTdmZTY0YzY1MTFjOWQgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xS
ZW5kZXJpbmdDb250ZXh0LmgKKysrIGIvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFJlbmRlcmlu
Z0NvbnRleHQuaApAQCAtNjMsNiArNjMsNyBAQCBwdWJsaWM6CiAKICAgICB2aXJ0dWFsIGJvb2wg
aXMzZCgpIGNvbnN0IHsgcmV0dXJuIHRydWU7IH0KICAgICB2aXJ0dWFsIGJvb2wgaXNBY2NlbGVy
YXRlZCgpIGNvbnN0IHsgcmV0dXJuIHRydWU7IH0KKyAgICB2aXJ0dWFsIGJvb2wgcGFpbnRzSW50
b0NhbnZhc0J1ZmZlcigpIGNvbnN0OwogCiAgICAgdm9pZCBhY3RpdmVUZXh0dXJlKHVuc2lnbmVk
IGxvbmcgdGV4dHVyZSwgRXhjZXB0aW9uQ29kZSYgZWMpOwogICAgIHZvaWQgYXR0YWNoU2hhZGVy
KFdlYkdMUHJvZ3JhbSosIFdlYkdMU2hhZGVyKiwgRXhjZXB0aW9uQ29kZSYgZWMpOwpAQCAtMjc3
LDcgKzI3OCw3IEBAIHB1YmxpYzoKIAogICAgIHZvaWQgdmlld3BvcnQobG9uZyB4LCBsb25nIHks
IHVuc2lnbmVkIGxvbmcgd2lkdGgsIHVuc2lnbmVkIGxvbmcgaGVpZ2h0KTsKIAotICAgIHZpcnR1
YWwgR3JhcGhpY3NDb250ZXh0M0QqIGdyYXBoaWNzQ29udGV4dDNEKCkgY29uc3QgeyByZXR1cm4g
bV9jb250ZXh0LmdldCgpOyB9CisgICAgR3JhcGhpY3NDb250ZXh0M0QqIGdyYXBoaWNzQ29udGV4
dDNEKCkgY29uc3QgeyByZXR1cm4gbV9jb250ZXh0LmdldCgpOyB9CiAKICAgICB2b2lkIHJlc2hh
cGUoaW50IHdpZHRoLCBpbnQgaGVpZ2h0KTsKIApkaWZmIC0tZ2l0IGEvV2ViQ29yZS9sb2FkZXIv
RW1wdHlDbGllbnRzLmggYi9XZWJDb3JlL2xvYWRlci9FbXB0eUNsaWVudHMuaAppbmRleCAyNzA3
NTJkZDdmOGYwMWZhOTRmN2MyOTNkM2NmZTdmYTk1ZWQyOTFmLi44YWIxYTk4OTk0ODg0ODU0NTQ3
OTE0YmNjM2QxZGVkOWMzNGUyYzYzIDEwMDY0NAotLS0gYS9XZWJDb3JlL2xvYWRlci9FbXB0eUNs
aWVudHMuaAorKysgYi9XZWJDb3JlL2xvYWRlci9FbXB0eUNsaWVudHMuaApAQCAtNjEsNiArNjEs
OCBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKK2NsYXNzIFNoYXJlZEdyYXBoaWNzQ29udGV4
dDNEOworCiBjbGFzcyBFbXB0eVBvcHVwTWVudSA6IHB1YmxpYyBQb3B1cE1lbnUgewogcHVibGlj
OgogICAgIHZpcnR1YWwgdm9pZCBzaG93KGNvbnN0IEludFJlY3QmLCBGcmFtZVZpZXcqLCBpbnQp
IHt9CkBAIC0xOTAsOSArMTkyLDkgQEAgcHVibGljOgogICAgIHZpcnR1YWwgdm9pZCBjYW5jZWxH
ZW9sb2NhdGlvblBlcm1pc3Npb25SZXF1ZXN0Rm9yRnJhbWUoRnJhbWUqLCBHZW9sb2NhdGlvbiop
IHt9CiAKICNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCi0gICAgdmlydHVhbCB2b2lk
IGF0dGFjaFJvb3RHcmFwaGljc0xheWVyKEZyYW1lKiwgR3JhcGhpY3NMYXllciopIHt9OwotICAg
IHZpcnR1YWwgdm9pZCBzZXROZWVkc09uZVNob3REcmF3aW5nU3luY2hyb25pemF0aW9uKCkge307
Ci0gICAgdmlydHVhbCB2b2lkIHNjaGVkdWxlQ29tcG9zaXRpbmdMYXllclN5bmMoKSB7fTsKKyAg
ICB2aXJ0dWFsIHZvaWQgYXR0YWNoUm9vdEdyYXBoaWNzTGF5ZXIoRnJhbWUqLCBHcmFwaGljc0xh
eWVyKikge30KKyAgICB2aXJ0dWFsIHZvaWQgc2V0TmVlZHNPbmVTaG90RHJhd2luZ1N5bmNocm9u
aXphdGlvbigpIHt9CisgICAgdmlydHVhbCB2b2lkIHNjaGVkdWxlQ29tcG9zaXRpbmdMYXllclN5
bmMoKSB7fQogI2VuZGlmCiAKICNpZiBQTEFURk9STShXSU4pCmRpZmYgLS1naXQgYS9XZWJDb3Jl
L3BhZ2UvQ2hyb21lQ2xpZW50LmggYi9XZWJDb3JlL3BhZ2UvQ2hyb21lQ2xpZW50LmgKaW5kZXgg
ZDNlMTY2MjI5MmEzMWE4OWU1YmFhNzQ3MDUyMGE5ODhiZTE4MjA3OS4uYmQ5ZGU2YmYyY2Q5ZjZm
YzY4NWM1MDEwZTQ3YzIxNDdiN2QxY2Q3NSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9wYWdlL0Nocm9t
ZUNsaWVudC5oCisrKyBiL1dlYkNvcmUvcGFnZS9DaHJvbWVDbGllbnQuaApAQCAtNTcsNiArNTcs
NyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgY2xhc3MgTm9kZTsKICAgICBjbGFzcyBQYWdl
OwogICAgIGNsYXNzIFNlY3VyaXR5T3JpZ2luOworICAgIGNsYXNzIFNoYXJlZEdyYXBoaWNzQ29u
dGV4dDNEOwogICAgIGNsYXNzIFBvcHVwTWVudUNsaWVudDsKICAgICBjbGFzcyBXaWRnZXQ7CiAK
QEAgLTIzMCw2ICsyMzEsOCBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIHZpcnR1YWwg
Ym9vbCBhbGxvd3NBY2NlbGVyYXRlZENvbXBvc2l0aW5nKCkgY29uc3QgeyByZXR1cm4gdHJ1ZTsg
fQogI2VuZGlmCiAKKyAgICAgICAgdmlydHVhbCBTaGFyZWRHcmFwaGljc0NvbnRleHQzRCogZ2V0
U2hhcmVkR3JhcGhpY3NDb250ZXh0M0QoKSB7IHJldHVybiAwOyB9CisKICAgICAgICAgdmlydHVh
bCBib29sIHN1cHBvcnRzRnVsbHNjcmVlbkZvck5vZGUoY29uc3QgTm9kZSopIHsgcmV0dXJuIGZh
bHNlOyB9CiAgICAgICAgIHZpcnR1YWwgdm9pZCBlbnRlckZ1bGxzY3JlZW5Gb3JOb2RlKE5vZGUq
KSB7IH0KICAgICAgICAgdmlydHVhbCB2b2lkIGV4aXRGdWxsc2NyZWVuRm9yTm9kZShOb2RlKikg
eyB9CmRpZmYgLS1naXQgYS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4
dC5jcHAgYi9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dC5jcHAKaW5k
ZXggNDczODRiOWVlODRkNmRhMDg2MGYzMTYxYjNiYzA4MjExOWY0NWJmZi4uZWE2YzQ0ODc0M2Ix
MTgxNWI4YWM3MWY0N2I3OWQzOGQzOTVhY2ZiMyAxMDA2NDQKLS0tIGEvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQuY3BwCisrKyBiL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvR3JhcGhpY3NDb250ZXh0LmNwcApAQCAtNTcxLDYgKzU3MSwxNyBAQCB2b2lkIEdyYXBo
aWNzQ29udGV4dDo6c2V0UGxhdGZvcm1TdHJva2VTdHlsZShjb25zdCBTdHJva2VTdHlsZSYpCiB9
CiAjZW5kaWYKIAorI2lmICFQTEFURk9STShTS0lBKQordm9pZCBHcmFwaGljc0NvbnRleHQ6OnNl
dFNoYXJlZEdyYXBoaWNzQ29udGV4dDNEKFNoYXJlZEdyYXBoaWNzQ29udGV4dDNEKiwgRHJhd2lu
Z0J1ZmZlciosIGNvbnN0IEludFNpemUmKQoreworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDo6
c3luY1NvZnR3YXJlQ2FudmFzKCkKK3sKK30KKyNlbmRpZgorCisKIHZvaWQgR3JhcGhpY3NDb250
ZXh0OjphZGp1c3RMaW5lVG9QaXhlbEJvdW5kYXJpZXMoRmxvYXRQb2ludCYgcDEsIEZsb2F0UG9p
bnQmIHAyLCBmbG9hdCBzdHJva2VXaWR0aCwgY29uc3QgU3Ryb2tlU3R5bGUmIHBlblN0eWxlKQog
ewogICAgIC8vIEZvciBvZGQgd2lkdGhzLCB3ZSBhZGQgaW4gMC41IHRvIHRoZSBhcHByb3ByaWF0
ZSB4L3kgc28gdGhhdCB0aGUgZmxvYXQgYXJpdGhtZXRpYwpAQCAtNjAwLDE0ICs2MTEsNCBAQCB2
b2lkIEdyYXBoaWNzQ29udGV4dDo6YWRqdXN0TGluZVRvUGl4ZWxCb3VuZGFyaWVzKEZsb2F0UG9p
bnQmIHAxLCBGbG9hdFBvaW50JiBwMgogICAgIH0KIH0KIAotI2lmICFQTEFURk9STShTS0lBKQot
dm9pZCBHcmFwaGljc0NvbnRleHQ6OnNldEdyYXBoaWNzQ29udGV4dDNEKEdyYXBoaWNzQ29udGV4
dDNEKiwgY29uc3QgSW50U2l6ZSYpCi17Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpzeW5j
U29mdHdhcmVDYW52YXMoKQotewotfQotI2VuZGlmCi0KIH0KZGlmZiAtLWdpdCBhL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0LmggYi9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL0dyYXBoaWNzQ29udGV4dC5oCmluZGV4IDkzZWY4OTAwNjJlZGE1Mjg5OWU0ZDMzZGQx
MDkxYTJkMzJmNGQwOGMuLjc4NjIyNzlmOGUyNTM4NjIzOGFlZWI4Mzg0MGFkNWE0MTYwNDQxODEg
MTAwNjQ0Ci0tLSBhL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0LmgK
KysrIGIvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQuaApAQCAtMTIy
LDE2ICsxMjIsMTcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgIGNvbnN0IGludCBjTWlzc3Bl
bGxpbmdMaW5lUGF0dGVybkdhcFdpZHRoID0gMTsKIAogICAgIGNsYXNzIEFmZmluZVRyYW5zZm9y
bTsKKyAgICBjbGFzcyBEcmF3aW5nQnVmZmVyOwogICAgIGNsYXNzIEZvbnQ7CiAgICAgY2xhc3Mg
R2VuZXJhdG9yOwogICAgIGNsYXNzIEdyYWRpZW50OwotICAgIGNsYXNzIEdyYXBoaWNzQ29udGV4
dDNEOwogICAgIGNsYXNzIEdyYXBoaWNzQ29udGV4dFBsYXRmb3JtUHJpdmF0ZTsKICAgICBjbGFz
cyBHcmFwaGljc0NvbnRleHRQcml2YXRlOwogICAgIGNsYXNzIEltYWdlQnVmZmVyOwogICAgIGNs
YXNzIEtVUkw7CiAgICAgY2xhc3MgUGF0aDsKICAgICBjbGFzcyBQYXR0ZXJuOworICAgIGNsYXNz
IFNoYXJlZEdyYXBoaWNzQ29udGV4dDNEOwogICAgIGNsYXNzIFRleHRSdW47CiAKICAgICAvLyBU
aGVzZSBiaXRzIGNhbiBiZSBPUmVkIHRvZ2V0aGVyIGZvciBhIHRvdGFsIG9mIDggcG9zc2libGUg
dGV4dCBkcmF3aW5nIG1vZGVzLgpAQCAtNDEyLDcgKzQxMyw3IEBAIG5hbWVzcGFjZSBXZWJDb3Jl
IHsKICAgICAgICAgcGF0dGVybiBnZXRIYWlrdVN0cm9rZVN0eWxlKCk7CiAjZW5kaWYKIAotICAg
ICAgICB2b2lkIHNldEdyYXBoaWNzQ29udGV4dDNEKEdyYXBoaWNzQ29udGV4dDNEKiwgY29uc3Qg
SW50U2l6ZSYpOworICAgICAgICB2b2lkIHNldFNoYXJlZEdyYXBoaWNzQ29udGV4dDNEKFNoYXJl
ZEdyYXBoaWNzQ29udGV4dDNEKiwgRHJhd2luZ0J1ZmZlciosIGNvbnN0IEludFNpemUmKTsKICAg
ICAgICAgdm9pZCBzeW5jU29mdHdhcmVDYW52YXMoKTsKIAogICAgIHByaXZhdGU6CmRpZmYgLS1n
aXQgYS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzTGF5ZXIuaCBiL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NMYXllci5oCmluZGV4IDBmNzRjZDVjYjMzODVlZTdi
YjVhNjg4MDJiN2FmYzI5Nzg3ZmY4MGYuLmNjMGQ2NjI1ZmMxOTkyZDAyZjMwNDQ2Nzc3M2FmY2Ri
NmI3OGZjYTAgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NM
YXllci5oCisrKyBiL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NMYXllci5oCkBA
IC04MSw2ICs4MSw3IEBAIHR5cGVkZWYgdW5zaWduZWQgTGF5ZXJUcmVlQXNUZXh0QmVoYXZpb3I7
CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAorY2xhc3MgRHJhd2luZ0J1ZmZlcjsKIGNsYXNzIEZs
b2F0UG9pbnQzRDsKIGNsYXNzIEdyYXBoaWNzQ29udGV4dDsKIGNsYXNzIEltYWdlOwpAQCAtMjk4
LDcgKzI5OSw4IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIHZvaWQgc2V0Q29udGVudHNUb0ltYWdl
KEltYWdlKikgeyB9CiAgICAgdmlydHVhbCB2b2lkIHNldENvbnRlbnRzVG9NZWRpYShQbGF0Zm9y
bUxheWVyKikgeyB9IC8vIHZpZGVvIG9yIHBsdWctaW4KICAgICB2aXJ0dWFsIHZvaWQgc2V0Q29u
dGVudHNCYWNrZ3JvdW5kQ29sb3IoY29uc3QgQ29sb3ImKSB7IH0KLSAgICB2aXJ0dWFsIHZvaWQg
c2V0Q29udGVudHNUb0NhbnZhcyhQbGF0Zm9ybUxheWVyKikgeyB9CisgICAgdmlydHVhbCB2b2lk
IHNldENvbnRlbnRzVG9XZWJHTChQbGF0Zm9ybUxheWVyKikgeyB9CisgICAgdmlydHVhbCB2b2lk
IHNldENvbnRlbnRzVG9DYW52YXMyRChEcmF3aW5nQnVmZmVyKikgeyB9CiAgICAgdmlydHVhbCBi
b29sIGhhc0NvbnRlbnRzTGF5ZXIoKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQogCiAgICAgLy8g
Q2FsbGJhY2sgZnJvbSB0aGUgdW5kZXJseWluZyBncmFwaGljcyBzeXN0ZW0gdG8gZHJhdyBsYXll
ciBjb250ZW50cy4KZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21p
dW0vQ2FudmFzMkRMYXllckNocm9taXVtLmNwcCBiL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2hyb21pdW0vQ2FudmFzMkRMYXllckNocm9taXVtLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4wYzNhOTZiODRk
ZDBlYmI2ODUwMzVlZTc1NTE5YTJjNWFkNzkyMmU0Ci0tLSAvZGV2L251bGwKKysrIGIvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9DYW52YXMyRExheWVyQ2hyb21pdW0uY3BwCkBA
IC0wLDAgKzEsMTA3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEwIEdvb2dsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisg
KiBtZXQ6CisgKgorICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAgICAqIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqIGNvcHlyaWdo
dCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIKKyAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUKKyAqIGRpc3RyaWJ1dGlvbi4KKyAqICAgICAqIE5laXRoZXIgdGhlIG5h
bWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqIGNvbnRyaWJ1dG9ycyBt
YXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisg
KiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xE
RVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAqIEEg
UEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUg
Q09QWVJJR0hUCisgKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBS
T0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAor
ICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorCisjaWYgVVNFKEFDQ0VMRVJBVEVE
X0NPTVBPU0lUSU5HKQorCisjaW5jbHVkZSAiQ2FudmFzMkRMYXllckNocm9taXVtLmgiCisKKyNp
bmNsdWRlICJEcmF3aW5nQnVmZmVyLmgiCisKKyNpbmNsdWRlIDxHTEVTMi9nbDIuaD4KKworbmFt
ZXNwYWNlIFdlYkNvcmUgeworCitQYXNzUmVmUHRyPENhbnZhczJETGF5ZXJDaHJvbWl1bT4gQ2Fu
dmFzMkRMYXllckNocm9taXVtOjpjcmVhdGUoRHJhd2luZ0J1ZmZlciogZHJhd2luZ0J1ZmZlciwg
R3JhcGhpY3NMYXllckNocm9taXVtKiBvd25lcikKK3sKKyAgICByZXR1cm4gYWRvcHRSZWYobmV3
IENhbnZhczJETGF5ZXJDaHJvbWl1bShkcmF3aW5nQnVmZmVyLCBvd25lcikpOworfQorCitDYW52
YXMyRExheWVyQ2hyb21pdW06OkNhbnZhczJETGF5ZXJDaHJvbWl1bShEcmF3aW5nQnVmZmVyKiBk
cmF3aW5nQnVmZmVyLCBHcmFwaGljc0xheWVyQ2hyb21pdW0qIG93bmVyKQorICAgIDogQ2FudmFz
TGF5ZXJDaHJvbWl1bShvd25lcikKKyAgICAsIG1fZHJhd2luZ0J1ZmZlcihkcmF3aW5nQnVmZmVy
KQoreworfQorCitDYW52YXMyRExheWVyQ2hyb21pdW06On5DYW52YXMyRExheWVyQ2hyb21pdW0o
KQoreworICAgIGlmIChtX3RleHR1cmVJZCkKKyAgICAgICAgZ2xEZWxldGVUZXh0dXJlcygxLCAm
bV90ZXh0dXJlSWQpOworfQorCit2b2lkIENhbnZhczJETGF5ZXJDaHJvbWl1bTo6dXBkYXRlQ29u
dGVudHMoKQoreworICAgIGlmICghbV9kcmF3aW5nQnVmZmVyKQorICAgICAgICByZXR1cm47Cisg
ICAgaWYgKG1fdGV4dHVyZUNoYW5nZWQpIHsgLy8gV2UgaGF2ZSB0byBnZW5lcmF0ZSBhIG5ldyBi
YWNraW5nIHRleHR1cmUuCisgICAgICAgIGlmIChtX3RleHR1cmVJZCkKKyAgICAgICAgICAgIGds
RGVsZXRlVGV4dHVyZXMoMSwgJm1fdGV4dHVyZUlkKTsKKyAgICAgICAgZ2xHZW5UZXh0dXJlcygx
LCAmbV90ZXh0dXJlSWQpOworICAgICAgICBnbEFjdGl2ZVRleHR1cmUoR0xfVEVYVFVSRTApOwor
ICAgICAgICBnbEJpbmRUZXh0dXJlKEdMX1RFWFRVUkVfMkQsIG1fdGV4dHVyZUlkKTsKKyAgICAg
ICAgSW50U2l6ZSBzaXplID0gbV9kcmF3aW5nQnVmZmVyLT5zaXplKCk7CisgICAgICAgIGdsVGV4
SW1hZ2UyRChHTF9URVhUVVJFXzJELCAwLCBHTF9SR0JBLCBzaXplLndpZHRoKCksIHNpemUuaGVp
Z2h0KCksIDAsIEdMX1JHQkEsIEdMX1VOU0lHTkVEX0JZVEUsIDApOworICAgICAgICAvLyBTZXQg
dGhlIG1pbi1tYWcgZmlsdGVycyB0byBsaW5lYXIgYW5kIHdyYXAgbW9kZXMgdG8gR0xfQ0xBTVBf
VE9fRURHRQorICAgICAgICAvLyB0byBnZXQgYXJvdW5kIE5QT1QgdGV4dHVyZSBsaW1pdGF0aW9u
cyBvZiBHTEVTLgorICAgICAgICBnbFRleFBhcmFtZXRlcmkoR0xfVEVYVFVSRV8yRCwgR0xfVEVY
VFVSRV9NSU5fRklMVEVSLCBHTF9MSU5FQVIpOworICAgICAgICBnbFRleFBhcmFtZXRlcmkoR0xf
VEVYVFVSRV8yRCwgR0xfVEVYVFVSRV9NQUdfRklMVEVSLCBHTF9MSU5FQVIpOworICAgICAgICBn
bFRleFBhcmFtZXRlcmkoR0xfVEVYVFVSRV8yRCwgR0xfVEVYVFVSRV9XUkFQX1MsIEdMX0NMQU1Q
X1RPX0VER0UpOworICAgICAgICBnbFRleFBhcmFtZXRlcmkoR0xfVEVYVFVSRV8yRCwgR0xfVEVY
VFVSRV9XUkFQX1QsIEdMX0NMQU1QX1RPX0VER0UpOworICAgICAgICBtX3RleHR1cmVDaGFuZ2Vk
ID0gZmFsc2U7CisgICAgICAgIC8vIEZJWE1FOiBUaGUgZ2xGaW5pc2goKSBoZXJlIGlzIHJlcXVp
cmVkIGJlY2F1c2Ugd2UgaGF2ZSB0byBtYWtlIHN1cmUgdGhhdCB0aGUgdGV4dHVyZSBjcmVhdGVk
IGluIHRoaXMKKyAgICAgICAgLy8gY29udGV4dCAodGhlIGNvbXBvc2l0b3IgY29udGV4dCkgaXMg
YWN0dWFsbHkgY3JlYXRlZCBieSB0aGUgc2VydmljZSBzaWRlIGJlZm9yZSB0aGUgY2hpbGQgY29u
dGV4dAorICAgICAgICAvLyBhdHRlbXB0cyB0byB1c2UgaXQgKGluIHB1Ymxpc2hUb1BsYXRmb3Jt
TGF5ZXIpLiAgZ2xGaW5pc2goKSBpcyBjdXJyZW50bHkgdGhlIG9ubHkgY2FsbCB3aXRoIHN0cm9u
ZworICAgICAgICAvLyBlbm91Z2ggc2VtYW50aWNzIHRvIHByb21pc2UgdGhpcywgYnV0IGlzIGFj
dHVhbGx5IG11Y2ggc3Ryb25nZXIuICBJZGVhbGx5IHdlJ2QgZG8gc29tZXRoaW5nIGxpa2UKKyAg
ICAgICAgLy8gaW5zZXJ0aW5nIGEgZmVuY2UgaGVyZSBhbmQgd2FpdGluZyBmb3IgaXQgYmVmb3Jl
IHRyeWluZyB0byBwdWJsaXNoLgorICAgICAgICBnbEZpbmlzaCgpOworICAgIH0KKyAgICAvLyBV
cGRhdGUgdGhlIGNvbnRlbnRzIG9mIHRoZSB0ZXh0dXJlIHVzZWQgYnkgdGhlIGNvbXBvc2l0b3Iu
CisgICAgaWYgKG1fY29udGVudHNEaXJ0eSkgeworICAgICAgICBtX2RyYXdpbmdCdWZmZXItPnB1
Ymxpc2hUb1BsYXRmb3JtTGF5ZXIodGhpcyk7CisgICAgICAgIG1fY29udGVudHNEaXJ0eSA9IGZh
bHNlOworICAgIH0KK30KKwordm9pZCBDYW52YXMyRExheWVyQ2hyb21pdW06OnNldERyYXdpbmdC
dWZmZXIoRHJhd2luZ0J1ZmZlciogZHJhd2luZ0J1ZmZlcikKK3sKKyAgICBpZiAoZHJhd2luZ0J1
ZmZlciAhPSBtX2RyYXdpbmdCdWZmZXIuZ2V0KCkpIHsKKyAgICAgICAgbV9kcmF3aW5nQnVmZmVy
ID0gZHJhd2luZ0J1ZmZlcjsKKyAgICAgICAgbV90ZXh0dXJlQ2hhbmdlZCA9IHRydWU7CisgICAg
fQorfQorCit1bnNpZ25lZCBDYW52YXMyRExheWVyQ2hyb21pdW06OnRleHR1cmVJZCgpIGNvbnN0
Cit7CisgICAgcmV0dXJuIG1fdGV4dHVyZUlkOworfQorCit9CisjZW5kaWYgLy8gVVNFKEFDQ0VM
RVJBVEVEX0NPTVBPU0lUSU5HKQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jaHJvbWl1bS9DYW52YXMyRExheWVyQ2hyb21pdW0uaCBiL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY2hyb21pdW0vQ2FudmFzMkRMYXllckNocm9taXVtLmgKbmV3IGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMDMxMTNk
NjUyYTVhMjJmMDkzYzhhOWU5ZjVmMjU3ZWZlYzI2MmZjNQotLS0gL2Rldi9udWxsCisrKyBiL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vQ2FudmFzMkRMYXllckNocm9taXVtLmgK
QEAgLTAsMCArMSw2NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMCBHb29nbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQor
ICogbWV0OgorICoKKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgICAgKiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiBjb3B5cmln
aHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyCisgKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlCisgKiBkaXN0cmlidXRpb24uCisgKiAgICAgKiBOZWl0aGVyIHRoZSBu
YW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisgKiBjb250cmlidXRvcnMg
bWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQor
ICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lv
bi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9M
REVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgKiBB
IFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhF
IENPUFlSSUdIVAorICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQ
Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwK
KyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgorICovCisKKworI2lmbmRlZiBDYW52YXMyRExheWVyQ2hyb21pdW1faAorI2RlZmlu
ZSBDYW52YXMyRExheWVyQ2hyb21pdW1faAorCisjaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lU
SU5HKQorCisjaW5jbHVkZSAiQ2FudmFzTGF5ZXJDaHJvbWl1bS5oIgorCituYW1lc3BhY2UgV2Vi
Q29yZSB7CisKK2NsYXNzIERyYXdpbmdCdWZmZXI7CisKKy8vIEEgbGF5ZXIgY29udGFpbmluZyBh
biBhY2NlbGVyYXRlZCAyZCBjYW52YXMKK2NsYXNzIENhbnZhczJETGF5ZXJDaHJvbWl1bSA6IHB1
YmxpYyBDYW52YXNMYXllckNocm9taXVtIHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgUGFzc1JlZlB0
cjxDYW52YXMyRExheWVyQ2hyb21pdW0+IGNyZWF0ZShEcmF3aW5nQnVmZmVyKiwgR3JhcGhpY3NM
YXllckNocm9taXVtKiBvd25lcik7CisgICAgdmlydHVhbCB+Q2FudmFzMkRMYXllckNocm9taXVt
KCk7CisgICAgdmlydHVhbCBib29sIGRyYXdzQ29udGVudCgpIHsgcmV0dXJuIHRydWU7IH0KKyAg
ICB2aXJ0dWFsIHZvaWQgdXBkYXRlQ29udGVudHMoKTsKKworICAgIHZvaWQgc2V0RHJhd2luZ0J1
ZmZlcihEcmF3aW5nQnVmZmVyKik7CisgICAgdW5zaWduZWQgdGV4dHVyZUlkKCkgY29uc3Q7CisK
K3ByaXZhdGU6CisgICAgZXhwbGljaXQgQ2FudmFzMkRMYXllckNocm9taXVtKERyYXdpbmdCdWZm
ZXIqLCBHcmFwaGljc0xheWVyQ2hyb21pdW0qIG93bmVyKTsKKyAgICBSZWZQdHI8RHJhd2luZ0J1
ZmZlcj4gbV9kcmF3aW5nQnVmZmVyOworCisgICAgc3RhdGljIHVuc2lnbmVkIG1fc2hhZGVyUHJv
Z3JhbUlkOworfTsKKworfQorI2VuZGlmIC8vIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykK
KworI2VuZGlmCmRpZmYgLS1naXQgYS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVt
L0NhbnZhc0xheWVyQ2hyb21pdW0uY3BwIGIvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJv
bWl1bS9DYW52YXNMYXllckNocm9taXVtLmNwcAppbmRleCBiYmYwOTFjMmE2NzBkN2MzNmU5MjM4
ZTFiOGNjMzUwYmEzODNlODEwLi41NmE3MjYyMjFlNWIwNmU5NTZlNzY1ZTBhMzVkMWM3YWY5NTNm
MjQxIDEwMDY0NAotLS0gYS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0NhbnZh
c0xheWVyQ2hyb21pdW0uY3BwCisrKyBiL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21p
dW0vQ2FudmFzTGF5ZXJDaHJvbWl1bS5jcHAKQEAgLTM0LDEyICszNCwxNCBAQAogCiAjaW5jbHVk
ZSAiQ2FudmFzTGF5ZXJDaHJvbWl1bS5oIgogCi0jaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0M0Qu
aCIKICNpbmNsdWRlICJMYXllclJlbmRlcmVyQ2hyb21pdW0uaCIKKwogI2luY2x1ZGUgPEdMRVMy
L2dsMi5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKK3Vuc2lnbmVkIENhbnZhc0xheWVyQ2hy
b21pdW06Om1fc2hhZGVyUHJvZ3JhbUlkID0gMDsKKwogQ2FudmFzTGF5ZXJDaHJvbWl1bTo6U2hh
cmVkVmFsdWVzOjpTaGFyZWRWYWx1ZXMoKQogICAgIDogbV9jYW52YXNTaGFkZXJQcm9ncmFtKDAp
CiAgICAgLCBtX3NoYWRlclNhbXBsZXJMb2NhdGlvbigtMSkKQEAgLTkzLDQ5ICs5NSwxNSBAQCBD
YW52YXNMYXllckNocm9taXVtOjpTaGFyZWRWYWx1ZXM6On5TaGFyZWRWYWx1ZXMoKQogICAgICAg
ICBHTEMoZ2xEZWxldGVQcm9ncmFtKG1fY2FudmFzU2hhZGVyUHJvZ3JhbSkpOwogfQogCi1QYXNz
UmVmUHRyPENhbnZhc0xheWVyQ2hyb21pdW0+IENhbnZhc0xheWVyQ2hyb21pdW06OmNyZWF0ZShH
cmFwaGljc0xheWVyQ2hyb21pdW0qIG93bmVyKQotewotICAgIHJldHVybiBhZG9wdFJlZihuZXcg
Q2FudmFzTGF5ZXJDaHJvbWl1bShvd25lcikpOwotfQotCiBDYW52YXNMYXllckNocm9taXVtOjpD
YW52YXNMYXllckNocm9taXVtKEdyYXBoaWNzTGF5ZXJDaHJvbWl1bSogb3duZXIpCiAgICAgOiBM
YXllckNocm9taXVtKG93bmVyKQotICAgICwgbV9jb250ZXh0KDApCisgICAgLCBtX3RleHR1cmVD
aGFuZ2VkKHRydWUpCiAgICAgLCBtX3RleHR1cmVJZCgwKQotICAgICwgbV90ZXh0dXJlQ2hhbmdl
ZChmYWxzZSkKLXsKLX0KLQotdm9pZCBDYW52YXNMYXllckNocm9taXVtOjp1cGRhdGVDb250ZW50
cygpCiB7Ci0gICAgQVNTRVJUKG1fY29udGV4dCk7Ci0gICAgaWYgKG1fdGV4dHVyZUNoYW5nZWQp
IHsKLSAgICAgICAgZ2xCaW5kVGV4dHVyZShHTF9URVhUVVJFXzJELCBtX3RleHR1cmVJZCk7Ci0g
ICAgICAgIC8vIFNldCB0aGUgbWluLW1hZyBmaWx0ZXJzIHRvIGxpbmVhciBhbmQgd3JhcCBtb2Rl
cyB0byBHTF9DTEFNUF9UT19FREdFCi0gICAgICAgIC8vIHRvIGdldCBhcm91bmQgTlBPVCB0ZXh0
dXJlIGxpbWl0YXRpb25zIG9mIEdMRVMuCi0gICAgICAgIGdsVGV4UGFyYW1ldGVyZihHTF9URVhU
VVJFXzJELCBHTF9URVhUVVJFX01JTl9GSUxURVIsIEdMX0xJTkVBUik7Ci0gICAgICAgIGdsVGV4
UGFyYW1ldGVyZihHTF9URVhUVVJFXzJELCBHTF9URVhUVVJFX01BR19GSUxURVIsIEdMX0xJTkVB
Uik7Ci0gICAgICAgIGdsVGV4UGFyYW1ldGVyZihHTF9URVhUVVJFXzJELCBHTF9URVhUVVJFX1dS
QVBfUywgR0xfQ0xBTVBfVE9fRURHRSk7Ci0gICAgICAgIGdsVGV4UGFyYW1ldGVyZihHTF9URVhU
VVJFXzJELCBHTF9URVhUVVJFX1dSQVBfVCwgR0xfQ0xBTVBfVE9fRURHRSk7Ci0gICAgICAgIG1f
dGV4dHVyZUNoYW5nZWQgPSBmYWxzZTsKLSAgICB9Ci0gICAgLy8gVXBkYXRlIHRoZSBjb250ZW50
cyBvZiB0aGUgdGV4dHVyZSB1c2VkIGJ5IHRoZSBjb21wb3NpdG9yLgotICAgIGlmIChtX2NvbnRl
bnRzRGlydHkpIHsKLSAgICAgICAgaWYgKG1fcHJlcGFyZVRleHR1cmVDYWxsYmFjaykKLSAgICAg
ICAgICAgIG1fcHJlcGFyZVRleHR1cmVDYWxsYmFjay0+d2lsbFByZXBhcmVUZXh0dXJlKCk7Ci0g
ICAgICAgIG1fY29udGV4dC0+cHJlcGFyZVRleHR1cmUoKTsKLSAgICAgICAgbV9jb250ZW50c0Rp
cnR5ID0gZmFsc2U7Ci0gICAgfQogfQogCi12b2lkIENhbnZhc0xheWVyQ2hyb21pdW06OnNldENv
bnRleHQoY29uc3QgR3JhcGhpY3NDb250ZXh0M0QqIGNvbnRleHQpCitDYW52YXNMYXllckNocm9t
aXVtOjp+Q2FudmFzTGF5ZXJDaHJvbWl1bSgpCiB7Ci0gICAgbV9jb250ZXh0ID0gY29uc3RfY2Fz
dDxHcmFwaGljc0NvbnRleHQzRCo+KGNvbnRleHQpOwotCi0gICAgdW5zaWduZWQgaW50IHRleHR1
cmVJZCA9IG1fY29udGV4dC0+cGxhdGZvcm1UZXh0dXJlKCk7Ci0gICAgaWYgKHRleHR1cmVJZCAh
PSBtX3RleHR1cmVJZCkKLSAgICAgICAgbV90ZXh0dXJlQ2hhbmdlZCA9IHRydWU7Ci0gICAgbV90
ZXh0dXJlSWQgPSB0ZXh0dXJlSWQ7CiB9CiAKIHZvaWQgQ2FudmFzTGF5ZXJDaHJvbWl1bTo6ZHJh
dygpCkBAIC0xNTAsNiArMTE4LDcgQEAgdm9pZCBDYW52YXNMYXllckNocm9taXVtOjpkcmF3KCkK
ICAgICBkcmF3VGV4dHVyZWRRdWFkKGxheWVyUmVuZGVyZXIoKS0+cHJvamVjdGlvbk1hdHJpeCgp
LCBkcmF3VHJhbnNmb3JtKCksCiAgICAgICAgICAgICAgICAgICAgICBib3VuZHMoKS53aWR0aCgp
LCBib3VuZHMoKS5oZWlnaHQoKSwgZHJhd09wYWNpdHkoKSwKICAgICAgICAgICAgICAgICAgICAg
IHN2LT5zaGFkZXJNYXRyaXhMb2NhdGlvbigpLCBzdi0+c2hhZGVyQWxwaGFMb2NhdGlvbigpKTsK
KwogfQogCiB9CmRpZmYgLS1naXQgYS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVt
L0NhbnZhc0xheWVyQ2hyb21pdW0uaCBiL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21p
dW0vQ2FudmFzTGF5ZXJDaHJvbWl1bS5oCmluZGV4IDA1M2VmZmZhMDFlMTQyODM4MTIxNDUzYzFh
NGI4YTE5NGI2ZmE0YzEuLmQ1OTFjNzM3NTk5MDRmOGQyOTFkNzE3MGNjYzNhYTBlNmUzMzFmMWIg
MTAwNjQ0Ci0tLSBhL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vQ2FudmFzTGF5
ZXJDaHJvbWl1bS5oCisrKyBiL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vQ2Fu
dmFzTGF5ZXJDaHJvbWl1bS5oCkBAIC0zOCwxNyArMzgsMTIgQEAKIAogbmFtZXNwYWNlIFdlYkNv
cmUgewogCi1jbGFzcyBHcmFwaGljc0NvbnRleHQzRDsKLQotLy8gQSBMYXllciBjb250YWluaW5n
IGEgV2ViR0wgb3IgYWNjZWxlcmF0ZWQgMmQgY2FudmFzCisvLyBCYXNlIGNsYXNzIGZvciBXZWJH
TCBhbmQgYWNjZWxlcmF0ZWQgMmQgY2FudmFzZXMuCiBjbGFzcyBDYW52YXNMYXllckNocm9taXVt
IDogcHVibGljIExheWVyQ2hyb21pdW0gewogcHVibGljOgotICAgIHN0YXRpYyBQYXNzUmVmUHRy
PENhbnZhc0xheWVyQ2hyb21pdW0+IGNyZWF0ZShHcmFwaGljc0xheWVyQ2hyb21pdW0qIG93bmVy
ID0gMCk7Ci0gICAgdmlydHVhbCBib29sIGRyYXdzQ29udGVudCgpIHsgcmV0dXJuIG1fY29udGV4
dDsgfQotICAgIHZpcnR1YWwgdm9pZCB1cGRhdGVDb250ZW50cygpOwotICAgIHZpcnR1YWwgdm9p
ZCBkcmF3KCk7CisgICAgdmlydHVhbCB+Q2FudmFzTGF5ZXJDaHJvbWl1bSgpOwogCi0gICAgdm9p
ZCBzZXRDb250ZXh0KGNvbnN0IEdyYXBoaWNzQ29udGV4dDNEKiBjb250ZXh0KTsKKyAgICB2aXJ0
dWFsIHZvaWQgZHJhdygpOwogCiAgICAgY2xhc3MgU2hhcmVkVmFsdWVzIHsKICAgICBwdWJsaWM6
CkBAIC02OSwyMSArNjQsMTYgQEAgcHVibGljOgogICAgICAgICBib29sIG1faW5pdGlhbGl6ZWQ7
CiAgICAgfTsKIAotICAgIGNsYXNzIFByZXBhcmVUZXh0dXJlQ2FsbGJhY2sgOiBwdWJsaWMgTm9u
Y29weWFibGUgewotICAgIHB1YmxpYzoKLSAgICAgICAgdmlydHVhbCB2b2lkIHdpbGxQcmVwYXJl
VGV4dHVyZSgpID0gMDsKLSAgICB9OwotICAgIHZvaWQgc2V0UHJlcGFyZVRleHR1cmVDYWxsYmFj
ayhQYXNzT3duUHRyPFByZXBhcmVUZXh0dXJlQ2FsbGJhY2s+IGNhbGxiYWNrKSB7IG1fcHJlcGFy
ZVRleHR1cmVDYWxsYmFjayA9IGNhbGxiYWNrOyB9Ci0KLXByaXZhdGU6Citwcm90ZWN0ZWQ6CiAg
ICAgZXhwbGljaXQgQ2FudmFzTGF5ZXJDaHJvbWl1bShHcmFwaGljc0xheWVyQ2hyb21pdW0qIG93
bmVyKTsKLSAgICBHcmFwaGljc0NvbnRleHQzRCogbV9jb250ZXh0OwotICAgIHVuc2lnbmVkIG1f
dGV4dHVyZUlkOwogICAgIGJvb2wgbV90ZXh0dXJlQ2hhbmdlZDsKLSAgICBPd25QdHI8UHJlcGFy
ZVRleHR1cmVDYWxsYmFjaz4gbV9wcmVwYXJlVGV4dHVyZUNhbGxiYWNrOworICAgIHVuc2lnbmVk
IG1fdGV4dHVyZUlkOworCitwcml2YXRlOgorICAgIHN0YXRpYyB1bnNpZ25lZCBtX3NoYWRlclBy
b2dyYW1JZDsKIH07CiAKIH0KICNlbmRpZiAvLyBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcp
CiAKLSNlbmRpZgorI2VuZGlmIC8vIENhbnZhc0xheWVyQ2hyb21pdW1faApkaWZmIC0tZ2l0IGEv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9EcmF3aW5nQnVmZmVyQ2hyb21pdW0u
Y3BwIGIvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9EcmF3aW5nQnVmZmVyQ2hy
b21pdW0uY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAuLjljMGViYTBjODRiMWUzZmJiZjJlNzhjMGE3NmJiM2Q4ZjAw
MDJhNzYKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9t
aXVtL0RyYXdpbmdCdWZmZXJDaHJvbWl1bS5jcHAKQEAgLTAsMCArMSw5OSBAQAorLyoKKyAqIENv
cHlyaWdodCAoYykgMjAxMCwgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyAqIG1ldDoKKyAqCisgKiAgICAgKiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorICogaW4gdGhlIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogZGlzdHJp
YnV0aW9uLgorICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhl
IG5hbWVzIG9mIGl0cworICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3Ig
cHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBz
cGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICog
IkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIE9XTkVSIE9SIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9S
WSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAi
Y29uZmlnLmgiCisKKyNpbmNsdWRlICJEcmF3aW5nQnVmZmVyLmgiCisKKyNpbmNsdWRlICJDYW52
YXMyRExheWVyQ2hyb21pdW0uaCIKKyNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQzRC5oIgorI2lu
Y2x1ZGUgIlNoYXJlZEdyYXBoaWNzQ29udGV4dDNELmgiCisKKyNpbmNsdWRlIDxHTEVTMi9nbDIu
aD4KKyNpZm5kZWYgR0xfR0xFWFRfUFJPVE9UWVBFUworI2RlZmluZSBHTF9HTEVYVF9QUk9UT1RZ
UEVTIDEKKyNlbmRpZgorI2luY2x1ZGUgPEdMRVMyL2dsMmV4dC5oPgorCituYW1lc3BhY2UgV2Vi
Q29yZSB7CisKK3N0cnVjdCBEcmF3aW5nQnVmZmVySW50ZXJuYWwgeworICAgIHVuc2lnbmVkIG9m
ZnNjcmVlbkNvbG9yVGV4dHVyZTsKK307CisKK0RyYXdpbmdCdWZmZXI6OkRyYXdpbmdCdWZmZXIo
U2hhcmVkR3JhcGhpY3NDb250ZXh0M0QqIGNvbnRleHQsIGNvbnN0IEludFNpemUmIHNpemUsIHVu
c2lnbmVkIGZyYW1lYnVmZmVyKQorICAgIDogbV9jb250ZXh0KGNvbnRleHQpCisgICAgLCBtX3Np
emUoc2l6ZSkKKyAgICAsIG1fZnJhbWVidWZmZXIoZnJhbWVidWZmZXIpCisgICAgLCBtX2ludGVy
bmFsKG5ldyBEcmF3aW5nQnVmZmVySW50ZXJuYWwpCit7CisgICAgY29udGV4dC0+YmluZEZyYW1l
YnVmZmVyKGZyYW1lYnVmZmVyKTsKKworICAgIC8vIENvbG9yIHRleHR1cmUKKyAgICB1bnNpZ25l
ZCBvZmZzY3JlZW5Db2xvclRleHR1cmUgPSBjb250ZXh0LT5jcmVhdGVUZXh0dXJlKCk7CisgICAg
QVNTRVJUKG9mZnNjcmVlbkNvbG9yVGV4dHVyZSk7CisgICAgaWYgKCFvZmZzY3JlZW5Db2xvclRl
eHR1cmUpIHsKKyAgICAgICAgY29udGV4dC0+ZGVsZXRlRnJhbWVidWZmZXIoZnJhbWVidWZmZXIp
OworICAgICAgICByZXR1cm47CisgICAgfQorICAgIGNvbnRleHQtPmJpbmRUZXh0dXJlKEdyYXBo
aWNzQ29udGV4dDNEOjpURVhUVVJFXzJELCBvZmZzY3JlZW5Db2xvclRleHR1cmUpOworICAgIGNv
bnRleHQtPnRleFBhcmFtZXRlcmkoR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQsIEdyYXBo
aWNzQ29udGV4dDNEOjpURVhUVVJFX01BR19GSUxURVIsIEdyYXBoaWNzQ29udGV4dDNEOjpORUFS
RVNUKTsKKyAgICBjb250ZXh0LT50ZXhQYXJhbWV0ZXJpKEdyYXBoaWNzQ29udGV4dDNEOjpURVhU
VVJFXzJELCBHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV9NSU5fRklMVEVSLCBHcmFwaGljc0Nv
bnRleHQzRDo6TkVBUkVTVCk7CisgICAgY29udGV4dC0+dGV4UGFyYW1ldGVyaShHcmFwaGljc0Nv
bnRleHQzRDo6VEVYVFVSRV8yRCwgR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfV1JBUF9TLCBH
cmFwaGljc0NvbnRleHQzRDo6Q0xBTVBfVE9fRURHRSk7CisgICAgY29udGV4dC0+dGV4UGFyYW1l
dGVyaShHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV8yRCwgR3JhcGhpY3NDb250ZXh0M0Q6OlRF
WFRVUkVfV1JBUF9ULCBHcmFwaGljc0NvbnRleHQzRDo6Q0xBTVBfVE9fRURHRSk7CisgICAgY29u
dGV4dC0+dGV4SW1hZ2UyRChHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV8yRCwgMCwgR3JhcGhp
Y3NDb250ZXh0M0Q6OlJHQkEsIHNpemUud2lkdGgoKSwgc2l6ZS5oZWlnaHQoKSwgMCwgR3JhcGhp
Y3NDb250ZXh0M0Q6OlJHQkEsIEdyYXBoaWNzQ29udGV4dDNEOjpVTlNJR05FRF9CWVRFLCAwKTsK
KworICAgIGNvbnRleHQtPmZyYW1lYnVmZmVyVGV4dHVyZTJEKEdyYXBoaWNzQ29udGV4dDNEOjpG
UkFNRUJVRkZFUiwgR3JhcGhpY3NDb250ZXh0M0Q6OkNPTE9SX0FUVEFDSE1FTlQwLCBHcmFwaGlj
c0NvbnRleHQzRDo6VEVYVFVSRV8yRCwgb2Zmc2NyZWVuQ29sb3JUZXh0dXJlLCAwKTsKKworICAg
IG1faW50ZXJuYWwtPm9mZnNjcmVlbkNvbG9yVGV4dHVyZSA9IG9mZnNjcmVlbkNvbG9yVGV4dHVy
ZTsKK30KKworRHJhd2luZ0J1ZmZlcjo6fkRyYXdpbmdCdWZmZXIoKQoreworICAgIG1fY29udGV4
dC0+ZGVsZXRlRnJhbWVidWZmZXIobV9mcmFtZWJ1ZmZlcik7Cit9CisKK3ZvaWQgRHJhd2luZ0J1
ZmZlcjo6cHVibGlzaFRvUGxhdGZvcm1MYXllcihQbGF0Zm9ybUxheWVyKiBwbCkKK3sKKyAgICBp
ZiAobV9jYWxsYmFjaykKKyAgICAgICAgbV9jYWxsYmFjay0+d2lsbFB1Ymxpc2goKTsKKyAgICBD
YW52YXMyRExheWVyQ2hyb21pdW0qIGNhbnZhczJETGF5ZXIgPSBzdGF0aWNfY2FzdDxDYW52YXMy
RExheWVyQ2hyb21pdW0qPihwbCk7CisgICAgdW5zaWduZWQgcGFyZW50VGV4dHVyZSA9IGNhbnZh
czJETGF5ZXItPnRleHR1cmVJZCgpOworICAgIC8vIEZJWE1FOiBXZSBkbyB0aGUgY29weSBpbiB0
aGUgY2FudmFzJyAoY2hpbGQpIGNvbnRleHQgc28gdGhhdCBpdCBleGVjdXRlcyBpbiB0aGUgY29y
cmVjdCBvcmRlciByZWxhdGl2ZSB0bworICAgIC8vIG90aGVyIGNvbW1hbmRzIGluIHRoZSBjaGls
ZCBjb250ZXh0LiAgVGhpcyBlbnN1cmVzIHRoYXQgdGhlIHBhcmVudCB0ZXh0dXJlIGFsd2F5cyBj
b250YWlucyBhIGNvbXBsZXRlCisgICAgLy8gZnJhbWUgYW5kIG5vdCBzb21lIGludGVybWVkaWF0
ZSByZXN1bHQuICBIb3dldmVyLCB0aGVyZSBpcyBubyBzeW5jaHJvbml6YXRpb24gdG8gZW5zdXJl
IHRoYXQgdGhpcyBjb3B5CisgICAgLy8gaGFwcGVucyBiZWZvcmUgdGhlIGNvbXBvc2l0b3IgZHJh
d3MuICBUaGlzIG1lYW5zIHdlIG1pZ2h0IGRyYXcgc3RhbGUgZnJhbWVzIHNvbWV0aW1lcy4gIElk
ZWFsbHkgdGhpcworICAgIC8vIHdvdWxkIGluc2VydCBhIGZlbmNlIGludG8gdGhlIGNoaWxkIGNv
bW1hbmQgc3RyZWFtIHRoYXQgdGhlIGNvbXBvc2l0b3IgY291bGQgd2FpdCBmb3IuCisgICAgbV9j
b250ZXh0LT5tYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBnbENvcHlUZXh0dXJlVG9QYXJlbnRU
ZXh0dXJlKG1faW50ZXJuYWwtPm9mZnNjcmVlbkNvbG9yVGV4dHVyZSwgcGFyZW50VGV4dHVyZSk7
CisgICAgZ2xGbHVzaCgpOworfQorCit9CmRpZmYgLS1naXQgYS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2Nocm9taXVtL0dMRVMyQ2FudmFzLmNwcCBiL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY2hyb21pdW0vR0xFUzJDYW52YXMuY3BwCmluZGV4IDgyZDRjMGIwMzNhMTRmOTFlNTY2Zjdi
NGVlYTA4YjA2NjkyZWJiZDMuLjQ2YWVjZjQ3MjAzNTZjMjQ5YzJlYzAzMzQ2MWIwNmFlMDUzOWM4
YmYgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vR0xFUzJD
YW52YXMuY3BwCisrKyBiL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vR0xFUzJD
YW52YXMuY3BwCkBAIC0zMiwxMCArMzIsMTIgQEAKIAogI2luY2x1ZGUgIkdMRVMyQ2FudmFzLmgi
CiAKKyNpbmNsdWRlICJEcmF3aW5nQnVmZmVyLmgiCiAjaW5jbHVkZSAiRmxvYXRSZWN0LmgiCiAj
aW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0M0QuaCIKICNpbmNsdWRlICJJbnRSZWN0LmgiCiAjaW5j
bHVkZSAiUGxhdGZvcm1TdHJpbmcuaCIKKyNpbmNsdWRlICJTaGFyZWRHcmFwaGljc0NvbnRleHQz
RC5oIgogI2luY2x1ZGUgIlNvbGlkRmlsbFNoYWRlci5oIgogI2luY2x1ZGUgIlRleFNoYWRlci5o
IgogI2luY2x1ZGUgIlRleHR1cmUuaCIKQEAgLTYxLDM3ICs2MywzNSBAQCBzdHJ1Y3QgR0xFUzJD
YW52YXM6OlN0YXRlIHsKICAgICBBZmZpbmVUcmFuc2Zvcm0gbV9jdG07CiB9OwogCi1HTEVTMkNh
bnZhczo6R0xFUzJDYW52YXMoR3JhcGhpY3NDb250ZXh0M0QqIGNvbnRleHQsIGNvbnN0IEludFNp
emUmIHNpemUpCi0gICAgOiBtX2NvbnRleHQoY29udGV4dCkKK0dMRVMyQ2FudmFzOjpHTEVTMkNh
bnZhcyhTaGFyZWRHcmFwaGljc0NvbnRleHQzRCogY29udGV4dCwgRHJhd2luZ0J1ZmZlciogZHJh
d2luZ0J1ZmZlciwgY29uc3QgSW50U2l6ZSYgc2l6ZSkKKyAgICA6IG1fc2l6ZShzaXplKQorICAg
ICwgbV9jb250ZXh0KGNvbnRleHQpCisgICAgLCBtX2RyYXdpbmdCdWZmZXIoZHJhd2luZ0J1ZmZl
cikKICAgICAsIG1fc3RhdGUoMCkKLSAgICAsIG1fcXVhZFZlcnRpY2VzKDApCi0gICAgLCBtX3Nv
bGlkRmlsbFNoYWRlcihTb2xpZEZpbGxTaGFkZXI6OmNyZWF0ZShjb250ZXh0KSkKLSAgICAsIG1f
dGV4U2hhZGVyKFRleFNoYWRlcjo6Y3JlYXRlKGNvbnRleHQpKQogewogICAgIG1fZmxpcE1hdHJp
eC50cmFuc2xhdGUoLTEuMGYsIDEuMGYpOwogICAgIG1fZmxpcE1hdHJpeC5zY2FsZSgyLjBmIC8g
c2l6ZS53aWR0aCgpLCAtMi4wZiAvIHNpemUuaGVpZ2h0KCkpOwogCi0gICAgbV9jb250ZXh0LT5y
ZXNoYXBlKHNpemUud2lkdGgoKSwgc2l6ZS5oZWlnaHQoKSk7Ci0gICAgbV9jb250ZXh0LT52aWV3
cG9ydCgwLCAwLCBzaXplLndpZHRoKCksIHNpemUuaGVpZ2h0KCkpOwotCiAgICAgbV9zdGF0ZVN0
YWNrLmFwcGVuZChTdGF0ZSgpKTsKICAgICBtX3N0YXRlID0gJm1fc3RhdGVTdGFjay5sYXN0KCk7
Ci0KLSAgICAvLyBGb3JjZSB0aGUgc291cmNlIG92ZXIgY29tcG9zaXRlIG1vZGUgdG8gYmUgYXBw
bGllZC4KLSAgICBtX2xhc3RDb21wb3NpdGVPcCA9IENvbXBvc2l0ZUNsZWFyOwotICAgIGFwcGx5
Q29tcG9zaXRlT3BlcmF0b3IoQ29tcG9zaXRlU291cmNlT3Zlcik7CiB9CiAKIEdMRVMyQ2FudmFz
Ojp+R0xFUzJDYW52YXMoKQogewotICAgIG1fY29udGV4dC0+ZGVsZXRlQnVmZmVyKG1fcXVhZFZl
cnRpY2VzKTsKK30KKwordm9pZCBHTEVTMkNhbnZhczo6YmluZEZyYW1lYnVmZmVyKCkKK3sKKyAg
ICBtX2RyYXdpbmdCdWZmZXItPmJpbmQoKTsKIH0KIAogdm9pZCBHTEVTMkNhbnZhczo6Y2xlYXJS
ZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKIHsKKyAgICBiaW5kRnJhbWVidWZmZXIoKTsKICAg
ICBpZiAobV9zdGF0ZS0+bV9jdG0uaXNJZGVudGl0eSgpKSB7Ci0gICAgICAgIG1fY29udGV4dC0+
c2Npc3NvcihyZWN0LngoKSwgcmVjdC55KCksIHJlY3Qud2lkdGgoKSwgcmVjdC5oZWlnaHQoKSk7
CisgICAgICAgIG1fY29udGV4dC0+c2Npc3NvcihyZWN0KTsKICAgICAgICAgbV9jb250ZXh0LT5l
bmFibGUoR3JhcGhpY3NDb250ZXh0M0Q6OlNDSVNTT1JfVEVTVCk7CisgICAgICAgIG1fY29udGV4
dC0+Y2xlYXJDb2xvcihDb2xvcihSR0JBMzIoMCkpKTsKICAgICAgICAgbV9jb250ZXh0LT5jbGVh
cihHcmFwaGljc0NvbnRleHQzRDo6Q09MT1JfQlVGRkVSX0JJVCk7CiAgICAgICAgIG1fY29udGV4
dC0+ZGlzYWJsZShHcmFwaGljc0NvbnRleHQzRDo6U0NJU1NPUl9URVNUKTsKICAgICB9IGVsc2Ug
ewpAQCAtMTA0LDE2ICsxMDQsMTcgQEAgdm9pZCBHTEVTMkNhbnZhczo6Y2xlYXJSZWN0KGNvbnN0
IEZsb2F0UmVjdCYgcmVjdCkKIAogdm9pZCBHTEVTMkNhbnZhczo6ZmlsbFJlY3QoY29uc3QgRmxv
YXRSZWN0JiByZWN0LCBjb25zdCBDb2xvciYgY29sb3IsIENvbG9yU3BhY2UgY29sb3JTcGFjZSkK
IHsKLSAgICBhcHBseUNvbXBvc2l0ZU9wZXJhdG9yKG1fc3RhdGUtPm1fY29tcG9zaXRlT3ApOwot
Ci0gICAgbV9jb250ZXh0LT5iaW5kQnVmZmVyKEdyYXBoaWNzQ29udGV4dDNEOjpBUlJBWV9CVUZG
RVIsIGdldFF1YWRWZXJ0aWNlcygpKTsKKyAgICBtX2NvbnRleHQtPmFwcGx5Q29tcG9zaXRlT3Bl
cmF0b3IobV9zdGF0ZS0+bV9jb21wb3NpdGVPcCk7CisgICAgbV9jb250ZXh0LT51c2VRdWFkVmVy
dGljZXMoKTsKIAogICAgIEFmZmluZVRyYW5zZm9ybSBtYXRyaXgobV9mbGlwTWF0cml4KTsKICAg
ICBtYXRyaXgubXVsdExlZnQobV9zdGF0ZS0+bV9jdG0pOwogICAgIG1hdHJpeC50cmFuc2xhdGUo
cmVjdC54KCksIHJlY3QueSgpKTsKICAgICBtYXRyaXguc2NhbGUocmVjdC53aWR0aCgpLCByZWN0
LmhlaWdodCgpKTsKLSAgICBtX3NvbGlkRmlsbFNoYWRlci0+dXNlKG1hdHJpeCwgY29sb3IpOwog
CisgICAgbV9jb250ZXh0LT51c2VGaWxsU29saWRQcm9ncmFtKG1hdHJpeCwgY29sb3IpOworCisg
ICAgYmluZEZyYW1lYnVmZmVyKCk7CiAgICAgbV9jb250ZXh0LT5kcmF3QXJyYXlzKEdyYXBoaWNz
Q29udGV4dDNEOjpUUklBTkdMRV9TVFJJUCwgMCwgNCk7CiB9CiAKQEAgLTE2NSwyMSArMTY2LDMz
IEBAIHZvaWQgR0xFUzJDYW52YXM6OnJlc3RvcmUoKQogICAgIG1fc3RhdGUgPSAmbV9zdGF0ZVN0
YWNrLmxhc3QoKTsKIH0KIAordm9pZCBHTEVTMkNhbnZhczo6ZHJhd1RleHR1cmVkUmVjdCh1bnNp
Z25lZCB0ZXh0dXJlLCBjb25zdCBJbnRTaXplJiB0ZXh0dXJlU2l6ZSwgY29uc3QgRmxvYXRSZWN0
JiBzcmNSZWN0LCBjb25zdCBGbG9hdFJlY3QmIGRzdFJlY3QsIENvbG9yU3BhY2UgY29sb3JTcGFj
ZSwgQ29tcG9zaXRlT3BlcmF0b3IgY29tcG9zaXRlT3ApCit7CisgICAgbV9jb250ZXh0LT5hcHBs
eUNvbXBvc2l0ZU9wZXJhdG9yKGNvbXBvc2l0ZU9wKTsKKworICAgIG1fY29udGV4dC0+dXNlUXVh
ZFZlcnRpY2VzKCk7CisgICAgbV9jb250ZXh0LT5zZXRBY3RpdmVUZXh0dXJlKEdyYXBoaWNzQ29u
dGV4dDNEOjpURVhUVVJFMCk7CisKKyAgICBtX2NvbnRleHQtPmJpbmRUZXh0dXJlKEdyYXBoaWNz
Q29udGV4dDNEOjpURVhUVVJFXzJELCB0ZXh0dXJlKTsKKworICAgIGRyYXdRdWFkKHRleHR1cmVT
aXplLCBzcmNSZWN0LCBkc3RSZWN0LCBtX3N0YXRlLT5tX2N0bSwgbV9zdGF0ZS0+bV9hbHBoYSk7
Cit9CisKIHZvaWQgR0xFUzJDYW52YXM6OmRyYXdUZXh0dXJlZFJlY3QoVGV4dHVyZSogdGV4dHVy
ZSwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBjb25zdCBGbG9hdFJlY3QmIGRzdFJlY3QsIENv
bG9yU3BhY2UgY29sb3JTcGFjZSwgQ29tcG9zaXRlT3BlcmF0b3IgY29tcG9zaXRlT3ApCiB7CiAg
ICAgZHJhd1RleHR1cmVkUmVjdCh0ZXh0dXJlLCBzcmNSZWN0LCBkc3RSZWN0LCBtX3N0YXRlLT5t
X2N0bSwgbV9zdGF0ZS0+bV9hbHBoYSwgY29sb3JTcGFjZSwgY29tcG9zaXRlT3ApOwogfQogCisK
IHZvaWQgR0xFUzJDYW52YXM6OmRyYXdUZXh0dXJlZFJlY3QoVGV4dHVyZSogdGV4dHVyZSwgY29u
c3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBjb25zdCBGbG9hdFJlY3QmIGRzdFJlY3QsIGNvbnN0IEFm
ZmluZVRyYW5zZm9ybSYgdHJhbnNmb3JtLCBmbG9hdCBhbHBoYSwgQ29sb3JTcGFjZSBjb2xvclNw
YWNlLCBDb21wb3NpdGVPcGVyYXRvciBjb21wb3NpdGVPcCkKIHsKLSAgICBhcHBseUNvbXBvc2l0
ZU9wZXJhdG9yKGNvbXBvc2l0ZU9wKTsKLQotICAgIG1fY29udGV4dC0+YmluZEJ1ZmZlcihHcmFw
aGljc0NvbnRleHQzRDo6QVJSQVlfQlVGRkVSLCBnZXRRdWFkVmVydGljZXMoKSk7Ci0gICAgY2hl
Y2tHTEVycm9yKCJnbEJpbmRCdWZmZXIiKTsKLQorICAgIG1fY29udGV4dC0+YXBwbHlDb21wb3Np
dGVPcGVyYXRvcihjb21wb3NpdGVPcCk7CiAgICAgY29uc3QgVGlsaW5nRGF0YSYgdGlsZXMgPSB0
ZXh0dXJlLT50aWxlcygpOwogICAgIEludFJlY3QgdGlsZUlkeFJlY3QgPSB0aWxlcy5vdmVybGFw
cGVkVGlsZUluZGljZXMoc3JjUmVjdCk7CiAKKyAgICBtX2NvbnRleHQtPnVzZVF1YWRWZXJ0aWNl
cygpOworICAgIG1fY29udGV4dC0+c2V0QWN0aXZlVGV4dHVyZShHcmFwaGljc0NvbnRleHQzRDo6
VEVYVFVSRTApOworCiAgICAgZm9yIChpbnQgeSA9IHRpbGVJZHhSZWN0LnkoKTsgeSA8PSB0aWxl
SWR4UmVjdC5ib3R0b20oKTsgeSsrKSB7CiAgICAgICAgIGZvciAoaW50IHggPSB0aWxlSWR4UmVj
dC54KCk7IHggPD0gdGlsZUlkeFJlY3QucmlnaHQoKTsgeCsrKQogICAgICAgICAgICAgZHJhd1Rl
eHR1cmVkUmVjdFRpbGUodGV4dHVyZSwgdGlsZXMudGlsZUluZGV4KHgsIHkpLCBzcmNSZWN0LCBk
c3RSZWN0LCB0cmFuc2Zvcm0sIGFscGhhKTsKQEAgLTE5Myw3ICsyMDYsNiBAQCB2b2lkIEdMRVMy
Q2FudmFzOjpkcmF3VGV4dHVyZWRSZWN0VGlsZShUZXh0dXJlKiB0ZXh0dXJlLCBpbnQgdGlsZSwg
Y29uc3QgRmxvYXRSZQogCiAgICAgY29uc3QgVGlsaW5nRGF0YSYgdGlsZXMgPSB0ZXh0dXJlLT50
aWxlcygpOwogCi0gICAgbV9jb250ZXh0LT5hY3RpdmVUZXh0dXJlKEdyYXBoaWNzQ29udGV4dDNE
OjpURVhUVVJFMCk7CiAgICAgdGV4dHVyZS0+YmluZFRpbGUodGlsZSk7CiAKICAgICBGbG9hdFJl
Y3Qgc3JjUmVjdENsaXBwZWRJblRpbGVTcGFjZTsKQEAgLTIwMiwxOCArMjE0LDI0IEBAIHZvaWQg
R0xFUzJDYW52YXM6OmRyYXdUZXh0dXJlZFJlY3RUaWxlKFRleHR1cmUqIHRleHR1cmUsIGludCB0
aWxlLCBjb25zdCBGbG9hdFJlCiAKICAgICBJbnRSZWN0IHRpbGVCb3VuZHNXaXRoQm9yZGVyID0g
dGlsZXMudGlsZUJvdW5kc1dpdGhCb3JkZXIodGlsZSk7CiAKKyAgICBkcmF3UXVhZCh0aWxlQm91
bmRzV2l0aEJvcmRlci5zaXplKCksIHNyY1JlY3RDbGlwcGVkSW5UaWxlU3BhY2UsIGRzdFJlY3RJ
bnRlcnNlY3RlZCwgdHJhbnNmb3JtLCBhbHBoYSk7Cit9CisKK3ZvaWQgR0xFUzJDYW52YXM6OmRy
YXdRdWFkKGNvbnN0IEludFNpemUmIHRleHR1cmVTaXplLCBjb25zdCBGbG9hdFJlY3QmIHNyY1Jl
Y3QsIGNvbnN0IEZsb2F0UmVjdCYgZHN0UmVjdCwgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiB0cmFu
c2Zvcm0sIGZsb2F0IGFscGhhKQorewogICAgIEFmZmluZVRyYW5zZm9ybSBtYXRyaXgobV9mbGlw
TWF0cml4KTsKICAgICBtYXRyaXgubXVsdExlZnQodHJhbnNmb3JtKTsKLSAgICBtYXRyaXgudHJh
bnNsYXRlKGRzdFJlY3RJbnRlcnNlY3RlZC54KCksIGRzdFJlY3RJbnRlcnNlY3RlZC55KCkpOwot
ICAgIG1hdHJpeC5zY2FsZShkc3RSZWN0SW50ZXJzZWN0ZWQud2lkdGgoKSwgZHN0UmVjdEludGVy
c2VjdGVkLmhlaWdodCgpKTsKKyAgICBtYXRyaXgudHJhbnNsYXRlKGRzdFJlY3QueCgpLCBkc3RS
ZWN0LnkoKSk7CisgICAgbWF0cml4LnNjYWxlKGRzdFJlY3Qud2lkdGgoKSwgZHN0UmVjdC5oZWln
aHQoKSk7CiAKICAgICBBZmZpbmVUcmFuc2Zvcm0gdGV4TWF0cml4OwotICAgIHRleE1hdHJpeC5z
Y2FsZSgxLjBmIC8gdGlsZUJvdW5kc1dpdGhCb3JkZXIud2lkdGgoKSwgMS4wZiAvIHRpbGVCb3Vu
ZHNXaXRoQm9yZGVyLmhlaWdodCgpKTsKLSAgICB0ZXhNYXRyaXgudHJhbnNsYXRlKHNyY1JlY3RD
bGlwcGVkSW5UaWxlU3BhY2UueCgpLCBzcmNSZWN0Q2xpcHBlZEluVGlsZVNwYWNlLnkoKSk7Ci0g
ICAgdGV4TWF0cml4LnNjYWxlKHNyY1JlY3RDbGlwcGVkSW5UaWxlU3BhY2Uud2lkdGgoKSwgc3Jj
UmVjdENsaXBwZWRJblRpbGVTcGFjZS5oZWlnaHQoKSk7CisgICAgdGV4TWF0cml4LnNjYWxlKDEu
MGYgLyB0ZXh0dXJlU2l6ZS53aWR0aCgpLCAxLjBmIC8gdGV4dHVyZVNpemUuaGVpZ2h0KCkpOwor
ICAgIHRleE1hdHJpeC50cmFuc2xhdGUoc3JjUmVjdC54KCksIHNyY1JlY3QueSgpKTsKKyAgICB0
ZXhNYXRyaXguc2NhbGUoc3JjUmVjdC53aWR0aCgpLCBzcmNSZWN0LmhlaWdodCgpKTsKIAotICAg
IG1fdGV4U2hhZGVyLT51c2UobWF0cml4LCB0ZXhNYXRyaXgsIDAsIGFscGhhKTsKKyAgICBiaW5k
RnJhbWVidWZmZXIoKTsKIAorICAgIG1fY29udGV4dC0+dXNlVGV4dHVyZVByb2dyYW0obWF0cml4
LCB0ZXhNYXRyaXgsIGFscGhhKTsKICAgICBtX2NvbnRleHQtPmRyYXdBcnJheXMoR3JhcGhpY3ND
b250ZXh0M0Q6OlRSSUFOR0xFX1NUUklQLCAwLCA0KTsKICAgICBjaGVja0dMRXJyb3IoImdsRHJh
d0FycmF5cyIpOwogfQpAQCAtMjIzLDk4ICsyNDEsMTQgQEAgdm9pZCBHTEVTMkNhbnZhczo6c2V0
Q29tcG9zaXRlT3BlcmF0aW9uKENvbXBvc2l0ZU9wZXJhdG9yIG9wKQogICAgIG1fc3RhdGUtPm1f
Y29tcG9zaXRlT3AgPSBvcDsKIH0KIAotdm9pZCBHTEVTMkNhbnZhczo6YXBwbHlDb21wb3NpdGVP
cGVyYXRvcihDb21wb3NpdGVPcGVyYXRvciBvcCkKLXsKLSAgICBpZiAob3AgPT0gbV9sYXN0Q29t
cG9zaXRlT3ApCi0gICAgICAgIHJldHVybjsKLQotICAgIHN3aXRjaCAob3ApIHsKLSAgICBjYXNl
IENvbXBvc2l0ZUNsZWFyOgotICAgICAgICBtX2NvbnRleHQtPmVuYWJsZShHcmFwaGljc0NvbnRl
eHQzRDo6QkxFTkQpOwotICAgICAgICBtX2NvbnRleHQtPmJsZW5kRnVuYyhHcmFwaGljc0NvbnRl
eHQzRDo6WkVSTywgR3JhcGhpY3NDb250ZXh0M0Q6OlpFUk8pOwotICAgICAgICBicmVhazsKLSAg
ICBjYXNlIENvbXBvc2l0ZUNvcHk6Ci0gICAgICAgIG1fY29udGV4dC0+ZGlzYWJsZShHcmFwaGlj
c0NvbnRleHQzRDo6QkxFTkQpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIENvbXBvc2l0ZVNv
dXJjZU92ZXI6Ci0gICAgICAgIG1fY29udGV4dC0+ZW5hYmxlKEdyYXBoaWNzQ29udGV4dDNEOjpC
TEVORCk7Ci0gICAgICAgIG1fY29udGV4dC0+YmxlbmRGdW5jKEdyYXBoaWNzQ29udGV4dDNEOjpP
TkUsIEdyYXBoaWNzQ29udGV4dDNEOjpPTkVfTUlOVVNfU1JDX0FMUEhBKTsKLSAgICAgICAgYnJl
YWs7Ci0gICAgY2FzZSBDb21wb3NpdGVTb3VyY2VJbjoKLSAgICAgICAgbV9jb250ZXh0LT5lbmFi
bGUoR3JhcGhpY3NDb250ZXh0M0Q6OkJMRU5EKTsKLSAgICAgICAgbV9jb250ZXh0LT5ibGVuZEZ1
bmMoR3JhcGhpY3NDb250ZXh0M0Q6OkRTVF9BTFBIQSwgR3JhcGhpY3NDb250ZXh0M0Q6OlpFUk8p
OwotICAgICAgICBicmVhazsKLSAgICBjYXNlIENvbXBvc2l0ZVNvdXJjZU91dDoKLSAgICAgICAg
bV9jb250ZXh0LT5lbmFibGUoR3JhcGhpY3NDb250ZXh0M0Q6OkJMRU5EKTsKLSAgICAgICAgbV9j
b250ZXh0LT5ibGVuZEZ1bmMoR3JhcGhpY3NDb250ZXh0M0Q6Ok9ORV9NSU5VU19EU1RfQUxQSEEs
IEdyYXBoaWNzQ29udGV4dDNEOjpaRVJPKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBDb21w
b3NpdGVTb3VyY2VBdG9wOgotICAgICAgICBtX2NvbnRleHQtPmVuYWJsZShHcmFwaGljc0NvbnRl
eHQzRDo6QkxFTkQpOwotICAgICAgICBtX2NvbnRleHQtPmJsZW5kRnVuYyhHcmFwaGljc0NvbnRl
eHQzRDo6RFNUX0FMUEhBLCBHcmFwaGljc0NvbnRleHQzRDo6T05FX01JTlVTX1NSQ19BTFBIQSk7
Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgQ29tcG9zaXRlRGVzdGluYXRpb25PdmVyOgotICAg
ICAgICBtX2NvbnRleHQtPmVuYWJsZShHcmFwaGljc0NvbnRleHQzRDo6QkxFTkQpOwotICAgICAg
ICBtX2NvbnRleHQtPmJsZW5kRnVuYyhHcmFwaGljc0NvbnRleHQzRDo6T05FX01JTlVTX0RTVF9B
TFBIQSwgR3JhcGhpY3NDb250ZXh0M0Q6Ok9ORSk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2Ug
Q29tcG9zaXRlRGVzdGluYXRpb25JbjoKLSAgICAgICAgbV9jb250ZXh0LT5lbmFibGUoR3JhcGhp
Y3NDb250ZXh0M0Q6OkJMRU5EKTsKLSAgICAgICAgbV9jb250ZXh0LT5ibGVuZEZ1bmMoR3JhcGhp
Y3NDb250ZXh0M0Q6OlpFUk8sIEdyYXBoaWNzQ29udGV4dDNEOjpTUkNfQUxQSEEpOwotICAgICAg
ICBicmVhazsKLSAgICBjYXNlIENvbXBvc2l0ZURlc3RpbmF0aW9uT3V0OgotICAgICAgICBtX2Nv
bnRleHQtPmVuYWJsZShHcmFwaGljc0NvbnRleHQzRDo6QkxFTkQpOwotICAgICAgICBtX2NvbnRl
eHQtPmJsZW5kRnVuYyhHcmFwaGljc0NvbnRleHQzRDo6WkVSTywgR3JhcGhpY3NDb250ZXh0M0Q6
Ok9ORV9NSU5VU19TUkNfQUxQSEEpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIENvbXBvc2l0
ZURlc3RpbmF0aW9uQXRvcDoKLSAgICAgICAgbV9jb250ZXh0LT5lbmFibGUoR3JhcGhpY3NDb250
ZXh0M0Q6OkJMRU5EKTsKLSAgICAgICAgbV9jb250ZXh0LT5ibGVuZEZ1bmMoR3JhcGhpY3NDb250
ZXh0M0Q6Ok9ORV9NSU5VU19EU1RfQUxQSEEsIEdyYXBoaWNzQ29udGV4dDNEOjpTUkNfQUxQSEEp
OwotICAgICAgICBicmVhazsKLSAgICBjYXNlIENvbXBvc2l0ZVhPUjoKLSAgICAgICAgbV9jb250
ZXh0LT5lbmFibGUoR3JhcGhpY3NDb250ZXh0M0Q6OkJMRU5EKTsKLSAgICAgICAgbV9jb250ZXh0
LT5ibGVuZEZ1bmMoR3JhcGhpY3NDb250ZXh0M0Q6Ok9ORV9NSU5VU19EU1RfQUxQSEEsIEdyYXBo
aWNzQ29udGV4dDNEOjpPTkVfTUlOVVNfU1JDX0FMUEhBKTsKLSAgICAgICAgYnJlYWs7Ci0gICAg
Y2FzZSBDb21wb3NpdGVQbHVzRGFya2VyOgotICAgIGNhc2UgQ29tcG9zaXRlSGlnaGxpZ2h0Ogot
ICAgICAgICAvLyB1bnN1cHBvcnRlZAotICAgICAgICBtX2NvbnRleHQtPmRpc2FibGUoR3JhcGhp
Y3NDb250ZXh0M0Q6OkJMRU5EKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBDb21wb3NpdGVQ
bHVzTGlnaHRlcjoKLSAgICAgICAgbV9jb250ZXh0LT5lbmFibGUoR3JhcGhpY3NDb250ZXh0M0Q6
OkJMRU5EKTsKLSAgICAgICAgbV9jb250ZXh0LT5ibGVuZEZ1bmMoR3JhcGhpY3NDb250ZXh0M0Q6
Ok9ORSwgR3JhcGhpY3NDb250ZXh0M0Q6Ok9ORSk7Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLSAg
ICBtX2xhc3RDb21wb3NpdGVPcCA9IG9wOwotfQotCi11bnNpZ25lZCBHTEVTMkNhbnZhczo6Z2V0
UXVhZFZlcnRpY2VzKCkKLXsKLSAgICBpZiAoIW1fcXVhZFZlcnRpY2VzKSB7Ci0gICAgICAgIGZs
b2F0IHZlcnRpY2VzW10gPSB7IDAuMGYsIDAuMGYsIDEuMGYsCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIDEuMGYsIDAuMGYsIDEuMGYsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
IDAuMGYsIDEuMGYsIDEuMGYsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEuMGYsIDEu
MGYsIDEuMGYgfTsKLSAgICAgICAgbV9xdWFkVmVydGljZXMgPSBtX2NvbnRleHQtPmNyZWF0ZUJ1
ZmZlcigpOwotICAgICAgICBtX2NvbnRleHQtPmJpbmRCdWZmZXIoR3JhcGhpY3NDb250ZXh0M0Q6
OkFSUkFZX0JVRkZFUiwgbV9xdWFkVmVydGljZXMpOwotICAgICAgICBtX2NvbnRleHQtPmJ1ZmZl
ckRhdGEoR3JhcGhpY3NDb250ZXh0M0Q6OkFSUkFZX0JVRkZFUiwgc2l6ZW9mKHZlcnRpY2VzKSwg
dmVydGljZXMsIEdyYXBoaWNzQ29udGV4dDNEOjpTVEFUSUNfRFJBVyk7Ci0gICAgfQotICAgIHJl
dHVybiBtX3F1YWRWZXJ0aWNlczsKLX0KLQogVGV4dHVyZSogR0xFUzJDYW52YXM6OmNyZWF0ZVRl
eHR1cmUoTmF0aXZlSW1hZ2VQdHIgcHRyLCBUZXh0dXJlOjpGb3JtYXQgZm9ybWF0LCBpbnQgd2lk
dGgsIGludCBoZWlnaHQpCiB7Ci0gICAgUGFzc1JlZlB0cjxUZXh0dXJlPiB0ZXh0dXJlID0gbV90
ZXh0dXJlcy5nZXQocHRyKTsKLSAgICBpZiAodGV4dHVyZSkKLSAgICAgICAgcmV0dXJuIHRleHR1
cmUuZ2V0KCk7Ci0KLSAgICB0ZXh0dXJlID0gVGV4dHVyZTo6Y3JlYXRlKG1fY29udGV4dCwgZm9y
bWF0LCB3aWR0aCwgaGVpZ2h0KTsKLSAgICBUZXh0dXJlKiB0ID0gdGV4dHVyZS5nZXQoKTsKLSAg
ICBtX3RleHR1cmVzLnNldChwdHIsIHRleHR1cmUpOwotICAgIHJldHVybiB0OworICAgIHJldHVy
biBtX2NvbnRleHQtPmNyZWF0ZVRleHR1cmUocHRyLCBmb3JtYXQsIHdpZHRoLCBoZWlnaHQpOwog
fQogCiBUZXh0dXJlKiBHTEVTMkNhbnZhczo6Z2V0VGV4dHVyZShOYXRpdmVJbWFnZVB0ciBwdHIp
CiB7Ci0gICAgUGFzc1JlZlB0cjxUZXh0dXJlPiB0ZXh0dXJlID0gbV90ZXh0dXJlcy5nZXQocHRy
KTsKLSAgICByZXR1cm4gdGV4dHVyZSA/IHRleHR1cmUuZ2V0KCkgOiAwOworICAgIHJldHVybiBt
X2NvbnRleHQtPmdldFRleHR1cmUocHRyKTsKIH0KIAogdm9pZCBHTEVTMkNhbnZhczo6Y2hlY2tH
TEVycm9yKGNvbnN0IGNoYXIqIGhlYWRlcikKZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2hyb21pdW0vR0xFUzJDYW52YXMuaCBiL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY2hyb21pdW0vR0xFUzJDYW52YXMuaAppbmRleCBmNDlhYzhiYTE4ZDFkMzQyMzRiOGQwNjI3
OGU3MDI4YmZlOTY5N2UxLi42ZmMxYTBlNjlkY2YyYzk4N2Y5NTAzMTYxNDcxZGVjZTQ2Mzk5NjEz
IDEwMDY0NAotLS0gYS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0dMRVMyQ2Fu
dmFzLmgKKysrIGIvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9HTEVTMkNhbnZh
cy5oCkBAIC00NSwxNiArNDUsMTQgQEAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogY2xhc3MgQ29s
b3I7CitjbGFzcyBEcmF3aW5nQnVmZmVyOwogY2xhc3MgRmxvYXRSZWN0OwogY2xhc3MgR3JhcGhp
Y3NDb250ZXh0M0Q7Ci1jbGFzcyBTb2xpZEZpbGxTaGFkZXI7Ci1jbGFzcyBUZXhTaGFkZXI7Ci0K
LXR5cGVkZWYgSGFzaE1hcDxOYXRpdmVJbWFnZVB0ciwgUmVmUHRyPFRleHR1cmU+ID4gVGV4dHVy
ZUhhc2hNYXA7CitjbGFzcyBTaGFyZWRHcmFwaGljc0NvbnRleHQzRDsKIAogY2xhc3MgR0xFUzJD
YW52YXMgOiBwdWJsaWMgTm9uY29weWFibGUgewogcHVibGljOgotICAgIEdMRVMyQ2FudmFzKEdy
YXBoaWNzQ29udGV4dDNEKiwgY29uc3QgSW50U2l6ZSYpOworICAgIEdMRVMyQ2FudmFzKFNoYXJl
ZEdyYXBoaWNzQ29udGV4dDNEKiwgRHJhd2luZ0J1ZmZlciosIGNvbnN0IEludFNpemUmKTsKICAg
ICB+R0xFUzJDYW52YXMoKTsKIAogICAgIHZvaWQgZmlsbFJlY3QoY29uc3QgRmxvYXRSZWN0Jiwg
Y29uc3QgQ29sb3ImLCBDb2xvclNwYWNlKTsKQEAgLTc0LDI4ICs3MiwzMyBAQCBwdWJsaWM6CiAg
ICAgLy8gbm9uLXN0YW5kYXJkIGZ1bmN0aW9ucwogICAgIC8vIFRoZXNlIGFyZSBub3Qgc3RhbmRh
cmQgR3JhcGhpY3NDb250ZXh0IGZ1bmN0aW9ucywgYW5kIHNob3VsZCBiZSBwdXNoZWQKICAgICAv
LyBkb3duIGludG8gYSBQbGF0Zm9ybUNvbnRleHRHTEVTMiBhdCBzb21lIHBvaW50LgorICAgIHZv
aWQgZHJhd1RleHR1cmVkUmVjdCh1bnNpZ25lZCB0ZXh0dXJlLCBjb25zdCBJbnRTaXplJiB0ZXh0
dXJlU2l6ZSwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBjb25zdCBGbG9hdFJlY3QmIGRzdFJl
Y3QsIENvbG9yU3BhY2UsIENvbXBvc2l0ZU9wZXJhdG9yKTsKICAgICB2b2lkIGRyYXdUZXh0dXJl
ZFJlY3QoVGV4dHVyZSosIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCwgY29uc3QgRmxvYXRSZWN0
JiBkc3RSZWN0LCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mLCBmbG9hdCBhbHBoYSwgQ29sb3JTcGFj
ZSwgQ29tcG9zaXRlT3BlcmF0b3IpOwogICAgIHZvaWQgZHJhd1RleHR1cmVkUmVjdChUZXh0dXJl
KiwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBjb25zdCBGbG9hdFJlY3QmIGRzdFJlY3QsIENv
bG9yU3BhY2UsIENvbXBvc2l0ZU9wZXJhdG9yKTsKLSAgICBHcmFwaGljc0NvbnRleHQzRCogY29u
dGV4dCgpIHsgcmV0dXJuIG1fY29udGV4dDsgfQogICAgIFRleHR1cmUqIGNyZWF0ZVRleHR1cmUo
TmF0aXZlSW1hZ2VQdHIsIFRleHR1cmU6OkZvcm1hdCwgaW50IHdpZHRoLCBpbnQgaGVpZ2h0KTsK
ICAgICBUZXh0dXJlKiBnZXRUZXh0dXJlKE5hdGl2ZUltYWdlUHRyKTsKIAorICAgIFNoYXJlZEdy
YXBoaWNzQ29udGV4dDNEKiBjb250ZXh0KCkgY29uc3QgeyByZXR1cm4gbV9jb250ZXh0OyB9CisK
KyAgICB2b2lkIGJpbmRGcmFtZWJ1ZmZlcigpOworCisgICAgRHJhd2luZ0J1ZmZlciogZHJhd2lu
Z0J1ZmZlcigpIGNvbnN0IHsgcmV0dXJuIG1fZHJhd2luZ0J1ZmZlcjsgfQorCiBwcml2YXRlOgog
ICAgIHZvaWQgZHJhd1RleHR1cmVkUmVjdFRpbGUoVGV4dHVyZSogdGV4dHVyZSwgaW50IHRpbGUs
IGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCwgY29uc3QgRmxvYXRSZWN0JiBkc3RSZWN0LCBjb25z
dCBBZmZpbmVUcmFuc2Zvcm0mLCBmbG9hdCBhbHBoYSk7CisgICAgdm9pZCBkcmF3UXVhZChjb25z
dCBJbnRTaXplJiB0ZXh0dXJlU2l6ZSwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBjb25zdCBG
bG9hdFJlY3QmIGRzdFJlY3QsIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYsIGZsb2F0IGFscGhhKTsK
ICAgICB2b2lkIGFwcGx5Q29tcG9zaXRlT3BlcmF0b3IoQ29tcG9zaXRlT3BlcmF0b3IpOwogICAg
IHZvaWQgY2hlY2tHTEVycm9yKGNvbnN0IGNoYXIqIGhlYWRlcik7Ci0gICAgdW5zaWduZWQgZ2V0
UXVhZFZlcnRpY2VzKCk7CiAKLSAgICBHcmFwaGljc0NvbnRleHQzRCogbV9jb250ZXh0OworICAg
IEludFNpemUgbV9zaXplOworCisgICAgU2hhcmVkR3JhcGhpY3NDb250ZXh0M0QqIG1fY29udGV4
dDsKKyAgICBEcmF3aW5nQnVmZmVyKiBtX2RyYXdpbmdCdWZmZXI7CisKICAgICBzdHJ1Y3QgU3Rh
dGU7CiAgICAgV1RGOjpWZWN0b3I8U3RhdGU+IG1fc3RhdGVTdGFjazsKICAgICBTdGF0ZSogbV9z
dGF0ZTsKLSAgICB1bnNpZ25lZCBtX3F1YWRWZXJ0aWNlczsKLSAgICBPd25QdHI8U29saWRGaWxs
U2hhZGVyPiBtX3NvbGlkRmlsbFNoYWRlcjsKLSAgICBPd25QdHI8VGV4U2hhZGVyPiBtX3RleFNo
YWRlcjsKICAgICBBZmZpbmVUcmFuc2Zvcm0gbV9mbGlwTWF0cml4OwotICAgIFRleHR1cmVIYXNo
TWFwIG1fdGV4dHVyZXM7Ci0gICAgQ29tcG9zaXRlT3BlcmF0b3IgbV9sYXN0Q29tcG9zaXRlT3A7
IC8vIFRoaXMgaXMgdGhlIG9uZSBsYXN0IHNldCwgbm90IG5lY2Vzc2FyaWx5IHRoZSBvbmUgaW4g
dGhlIHN0YXRlIHN0YWNrLgogfTsKIAogfQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jaHJvbWl1bS9HcmFwaGljc0xheWVyQ2hyb21pdW0uY3BwIGIvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9HcmFwaGljc0xheWVyQ2hyb21pdW0uY3BwCmluZGV4IDY0
OGUzNWYxYTQ2NzJmYzI2NTRlNWE1ZTk2Y2NlMjllNjc5MmMxMDEuLmY2NzIwMmM1ZTlkYWFiNTNm
NTA2ZDJiMzg1YmQxNGVjNDk4MTRmYjIgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY2hyb21pdW0vR3JhcGhpY3NMYXllckNocm9taXVtLmNwcAorKysgYi9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0dyYXBoaWNzTGF5ZXJDaHJvbWl1bS5jcHAKQEAgLTQ1
LDcgKzQ1LDkgQEAKIAogI2luY2x1ZGUgIkdyYXBoaWNzTGF5ZXJDaHJvbWl1bS5oIgogCisjaW5j
bHVkZSAiQ2FudmFzMkRMYXllckNocm9taXVtLmgiCiAjaW5jbHVkZSAiQ29udGVudExheWVyQ2hy
b21pdW0uaCIKKyNpbmNsdWRlICJEcmF3aW5nQnVmZmVyLmgiCiAjaW5jbHVkZSAiRmxvYXRDb252
ZXJzaW9uLmgiCiAjaW5jbHVkZSAiRmxvYXRSZWN0LmgiCiAjaW5jbHVkZSAiSW1hZ2UuaCIKQEAg
LTI5MCw2ICsyOTIsNyBAQCB2b2lkIEdyYXBoaWNzTGF5ZXJDaHJvbWl1bTo6c2V0Q29udGVudHNO
ZWVkc0Rpc3BsYXkoKQogICAgIGlmIChtX2NvbnRlbnRzTGF5ZXIpCiAgICAgICAgIG1fY29udGVu
dHNMYXllci0+c2V0TmVlZHNEaXNwbGF5KCk7CiB9CisKIHZvaWQgR3JhcGhpY3NMYXllckNocm9t
aXVtOjpzZXROZWVkc0Rpc3BsYXkoKQogewogICAgIGlmIChkcmF3c0NvbnRlbnQoKSkKQEAgLTMz
OSwxNSArMzQyLDE1IEBAIHZvaWQgR3JhcGhpY3NMYXllckNocm9taXVtOjpzZXRDb250ZW50c1Rv
SW1hZ2UoSW1hZ2UqIGltYWdlKQogICAgICAgICB1cGRhdGVTdWJsYXllckxpc3QoKTsKIH0KIAot
dm9pZCBHcmFwaGljc0xheWVyQ2hyb21pdW06OnNldENvbnRlbnRzVG9DYW52YXMoUGxhdGZvcm1M
YXllciogcGxhdGZvcm1MYXllcikKK3ZvaWQgR3JhcGhpY3NMYXllckNocm9taXVtOjpzZXRDb250
ZW50c1RvV2ViR0woUGxhdGZvcm1MYXllciogcGxhdGZvcm1MYXllcikKIHsKICAgICBib29sIGNo
aWxkcmVuQ2hhbmdlZCA9IGZhbHNlOwogICAgIGlmIChwbGF0Zm9ybUxheWVyKSB7CiAgICAgICAg
IHBsYXRmb3JtTGF5ZXItPnNldE93bmVyKHRoaXMpOwotICAgICAgICBpZiAoIW1fY29udGVudHNM
YXllci5nZXQoKSB8fCBtX2NvbnRlbnRzTGF5ZXJQdXJwb3NlICE9IENvbnRlbnRzTGF5ZXJGb3JD
YW52YXMpIHsKKyAgICAgICAgaWYgKCFtX2NvbnRlbnRzTGF5ZXIuZ2V0KCkgfHwgbV9jb250ZW50
c0xheWVyUHVycG9zZSAhPSBDb250ZW50c0xheWVyRm9yV2ViR0wpIHsKICAgICAgICAgICAgIHNl
dHVwQ29udGVudHNMYXllcihwbGF0Zm9ybUxheWVyKTsKICAgICAgICAgICAgIG1fY29udGVudHNM
YXllciA9IHBsYXRmb3JtTGF5ZXI7Ci0gICAgICAgICAgICBtX2NvbnRlbnRzTGF5ZXJQdXJwb3Nl
ID0gQ29udGVudHNMYXllckZvckNhbnZhczsKKyAgICAgICAgICAgIG1fY29udGVudHNMYXllclB1
cnBvc2UgPSBDb250ZW50c0xheWVyRm9yV2ViR0w7CiAgICAgICAgICAgICBjaGlsZHJlbkNoYW5n
ZWQgPSB0cnVlOwogICAgICAgICB9CiAgICAgICAgIHBsYXRmb3JtTGF5ZXItPnNldE5lZWRzRGlz
cGxheSgpOwpAQCAtMzY1LDYgKzM2OCwzNSBAQCB2b2lkIEdyYXBoaWNzTGF5ZXJDaHJvbWl1bTo6
c2V0Q29udGVudHNUb0NhbnZhcyhQbGF0Zm9ybUxheWVyKiBwbGF0Zm9ybUxheWVyKQogICAgICAg
ICB1cGRhdGVTdWJsYXllckxpc3QoKTsKIH0KIAordm9pZCBHcmFwaGljc0xheWVyQ2hyb21pdW06
OnNldENvbnRlbnRzVG9DYW52YXMyRChEcmF3aW5nQnVmZmVyKiBkcmF3aW5nQnVmZmVyKQorewor
ICAgIGJvb2wgY2hpbGRyZW5DaGFuZ2VkID0gZmFsc2U7CisgICAgaWYgKGRyYXdpbmdCdWZmZXIp
IHsKKyAgICAgICAgaWYgKCFtX2NvbnRlbnRzTGF5ZXIuZ2V0KCkgfHwgbV9jb250ZW50c0xheWVy
UHVycG9zZSAhPSBDb250ZW50c0xheWVyRm9yQ2FudmFzMkQpIHsKKyAgICAgICAgICAgIFJlZlB0
cjxDYW52YXMyRExheWVyQ2hyb21pdW0+IGNhbnZhczJETGF5ZXIgPSBDYW52YXMyRExheWVyQ2hy
b21pdW06OmNyZWF0ZShkcmF3aW5nQnVmZmVyLCB0aGlzKTsKKyAgICAgICAgICAgIHNldHVwQ29u
dGVudHNMYXllcihjYW52YXMyRExheWVyLmdldCgpKTsKKyAgICAgICAgICAgIG1fY29udGVudHNM
YXllciA9IGNhbnZhczJETGF5ZXI7CisgICAgICAgICAgICBtX2NvbnRlbnRzTGF5ZXJQdXJwb3Nl
ID0gQ29udGVudHNMYXllckZvckNhbnZhczJEOworICAgICAgICAgICAgY2hpbGRyZW5DaGFuZ2Vk
ID0gdHJ1ZTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIENhbnZhczJETGF5ZXJDaHJv
bWl1bSogY2FudmFzMkRMYXllciA9IHN0YXRpY19jYXN0PENhbnZhczJETGF5ZXJDaHJvbWl1bSo+
KG1fY29udGVudHNMYXllci5nZXQoKSk7CisgICAgICAgICAgICBjYW52YXMyRExheWVyLT5zZXRE
cmF3aW5nQnVmZmVyKGRyYXdpbmdCdWZmZXIpOworICAgICAgICB9CisgICAgICAgIG1fY29udGVu
dHNMYXllci0+c2V0TmVlZHNEaXNwbGF5KCk7CisgICAgICAgIHVwZGF0ZUNvbnRlbnRzUmVjdCgp
OworICAgIH0gZWxzZSB7CisgICAgICAgIGlmIChtX2NvbnRlbnRzTGF5ZXIpIHsKKyAgICAgICAg
ICAgIGNoaWxkcmVuQ2hhbmdlZCA9IHRydWU7CisKKyAgICAgICAgICAgIC8vIFRoZSBvbGQgY29u
dGVudHMgbGF5ZXIgd2lsbCBiZSByZW1vdmVkIHZpYSB1cGRhdGVTdWJsYXllckxpc3QuCisgICAg
ICAgICAgICBtX2NvbnRlbnRzTGF5ZXIgPSAwOworICAgICAgICB9CisgICAgfQorCisgICAgaWYg
KGNoaWxkcmVuQ2hhbmdlZCkKKyAgICAgICAgdXBkYXRlU3VibGF5ZXJMaXN0KCk7Cit9CisKIHZv
aWQgR3JhcGhpY3NMYXllckNocm9taXVtOjpzZXRDb250ZW50c1RvTWVkaWEoUGxhdGZvcm1MYXll
ciogbGF5ZXIpCiB7CiAgICAgYm9vbCBjaGlsZHJlbkNoYW5nZWQgPSBmYWxzZTsKZGlmZiAtLWdp
dCBhL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vR3JhcGhpY3NMYXllckNocm9t
aXVtLmggYi9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0dyYXBoaWNzTGF5ZXJD
aHJvbWl1bS5oCmluZGV4IDlkZmY2NmEwNzVjYzMwYTU4NDZiMTQ2YTE2NTE4NDhiNmZlZGFmOTEu
LmExZTU0ODIxYjI3ZmMyNmNmZDFlZjE3MDQwMDlkYjhlMjNhZDhkOWMgMTAwNjQ0Ci0tLSBhL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vR3JhcGhpY3NMYXllckNocm9taXVtLmgK
KysrIGIvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9HcmFwaGljc0xheWVyQ2hy
b21pdW0uaApAQCAtODcsNyArODcsOCBAQCBwdWJsaWM6CiAKICAgICB2aXJ0dWFsIHZvaWQgc2V0
Q29udGVudHNUb0ltYWdlKEltYWdlKik7CiAgICAgdmlydHVhbCB2b2lkIHNldENvbnRlbnRzVG9N
ZWRpYShQbGF0Zm9ybUxheWVyKik7Ci0gICAgdmlydHVhbCB2b2lkIHNldENvbnRlbnRzVG9DYW52
YXMoUGxhdGZvcm1MYXllciopOworICAgIHZpcnR1YWwgdm9pZCBzZXRDb250ZW50c1RvV2ViR0wo
UGxhdGZvcm1MYXllciopOworICAgIHZpcnR1YWwgdm9pZCBzZXRDb250ZW50c1RvQ2FudmFzMkQo
RHJhd2luZ0J1ZmZlciopOwogCiAgICAgdmlydHVhbCBQbGF0Zm9ybUxheWVyKiBwbGF0Zm9ybUxh
eWVyKCkgY29uc3Q7CiAKQEAgLTEzOCw3ICsxMzksOCBAQCBwcml2YXRlOgogICAgICAgICBOb0Nv
bnRlbnRzTGF5ZXIgPSAwLAogICAgICAgICBDb250ZW50c0xheWVyRm9ySW1hZ2UsCiAgICAgICAg
IENvbnRlbnRzTGF5ZXJGb3JWaWRlbywKLSAgICAgICAgQ29udGVudHNMYXllckZvckNhbnZhcwor
ICAgICAgICBDb250ZW50c0xheWVyRm9yV2ViR0wsCisgICAgICAgIENvbnRlbnRzTGF5ZXJGb3JD
YW52YXMyRCwKICAgICB9OwogCiAgICAgQ29udGVudHNMYXllclB1cnBvc2UgbV9jb250ZW50c0xh
eWVyUHVycG9zZTsKZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21p
dW0vTGF5ZXJSZW5kZXJlckNocm9taXVtLmNwcCBiL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2hyb21pdW0vTGF5ZXJSZW5kZXJlckNocm9taXVtLmNwcAppbmRleCA1MDMzOGQyZDVmNzMyNGU1
YTExOWM1MDkxOTBkZmVmODY5OGIxNzY5Li44ZTEzMzgyNmJmMjNiZWU3NTM1MDllNTZjOTI4YmQw
YzQ5MzRjMTU5IDEwMDY0NAotLS0gYS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVt
L0xheWVyUmVuZGVyZXJDaHJvbWl1bS5jcHAKKysrIGIvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jaHJvbWl1bS9MYXllclJlbmRlcmVyQ2hyb21pdW0uY3BwCkBAIC0zNCwxMSArMzQsMTEgQEAK
ICNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCiAjaW5jbHVkZSAiTGF5ZXJSZW5kZXJl
ckNocm9taXVtLmgiCiAKLSNpbmNsdWRlICJDYW52YXNMYXllckNocm9taXVtLmgiCi0jaW5jbHVk
ZSAiQ29udGVudExheWVyQ2hyb21pdW0uaCIKKyNpbmNsdWRlICJDYW52YXMyRExheWVyQ2hyb21p
dW0uaCIKICNpbmNsdWRlICJHTEVTMkNvbnRleHQuaCIKICNpbmNsdWRlICJMYXllckNocm9taXVt
LmgiCiAjaW5jbHVkZSAiTm90SW1wbGVtZW50ZWQuaCIKKyNpbmNsdWRlICJXZWJHTExheWVyQ2hy
b21pdW0uaCIKICNpZiBQTEFURk9STShTS0lBKQogI2luY2x1ZGUgIk5hdGl2ZUltYWdlU2tpYS5o
IgogI2luY2x1ZGUgIlBsYXRmb3JtQ29udGV4dFNraWEuaCIKQEAgLTU2OCw2ICs1NjgsNyBAQCB2
b2lkIExheWVyUmVuZGVyZXJDaHJvbWl1bTo6ZHJhd0xheWVyKExheWVyQ2hyb21pdW0qIGxheWVy
KQogICAgICAgICAvLyBVcGRhdGUgdGhlIGNvbnRlbnRzIG9mIHRoZSBsYXllciBpZiBuZWNlc3Nh
cnkuCiAgICAgICAgIGlmIChsYXllci0+Y29udGVudHNEaXJ0eSgpKSB7CiAgICAgICAgICAgICAv
LyBVcGRhdGUgdGhlIGJhY2tpbmcgdGV4dHVyZSBjb250ZW50cyBmb3IgYW55IGRpcnR5IHBvcnRp
b24gb2YgdGhlIGxheWVyLgorICAgICAgICAgICAgbV9nbGVzMkNvbnRleHQtPm1ha2VDdXJyZW50
KCk7CiAgICAgICAgICAgICBsYXllci0+dXBkYXRlQ29udGVudHMoKTsKICAgICAgICAgICAgIG1f
Z2xlczJDb250ZXh0LT5tYWtlQ3VycmVudCgpOwogICAgICAgICB9CmRpZmYgLS1naXQgYS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1dlYkdMTGF5ZXJDaHJvbWl1bS5jcHAgYi9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1dlYkdMTGF5ZXJDaHJvbWl1bS5jcHAK
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMC4uNDExZjQxNjJiOTE0OTQ5Nzk0NzFiOTBkZWM2NjAxYzljNjk0OGRiNgotLS0g
L2Rldi9udWxsCisrKyBiL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vV2ViR0xM
YXllckNocm9taXVtLmNwcApAQCAtMCwwICsxLDg1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDEwIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMgYXJlCisgKiBtZXQ6CisgKgorICogICAgICogUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAq
ICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqIGRpc3RyaWJ1dGlvbi4KKyAqICAg
ICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMK
KyAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVj
dHMgZGVyaXZlZCBmcm9tCisgKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Ig
d3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
VEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFO
WSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBM
SU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBO
TyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUws
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QK
KyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorCisj
aWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQorCisjaW5jbHVkZSAiV2ViR0xMYXllckNo
cm9taXVtLmgiCisKKyNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQzRC5oIgorI2luY2x1ZGUgIkxh
eWVyUmVuZGVyZXJDaHJvbWl1bS5oIgorI2luY2x1ZGUgPEdMRVMyL2dsMi5oPgorCituYW1lc3Bh
Y2UgV2ViQ29yZSB7CisKK1Bhc3NSZWZQdHI8V2ViR0xMYXllckNocm9taXVtPiBXZWJHTExheWVy
Q2hyb21pdW06OmNyZWF0ZShHcmFwaGljc0xheWVyQ2hyb21pdW0qIG93bmVyKQoreworICAgIHJl
dHVybiBhZG9wdFJlZihuZXcgV2ViR0xMYXllckNocm9taXVtKG93bmVyKSk7Cit9CisKK1dlYkdM
TGF5ZXJDaHJvbWl1bTo6V2ViR0xMYXllckNocm9taXVtKEdyYXBoaWNzTGF5ZXJDaHJvbWl1bSog
b3duZXIpCisgICAgOiBDYW52YXNMYXllckNocm9taXVtKG93bmVyKQorICAgICwgbV9jb250ZXh0
KDApCit7Cit9CisKK3ZvaWQgV2ViR0xMYXllckNocm9taXVtOjp1cGRhdGVDb250ZW50cygpCit7
CisgICAgQVNTRVJUKG1fY29udGV4dCk7CisgICAgaWYgKG1fdGV4dHVyZUNoYW5nZWQpIHsKKyAg
ICAgICAgZ2xCaW5kVGV4dHVyZShHTF9URVhUVVJFXzJELCBtX3RleHR1cmVJZCk7CisgICAgICAg
IC8vIFNldCB0aGUgbWluLW1hZyBmaWx0ZXJzIHRvIGxpbmVhciBhbmQgd3JhcCBtb2RlcyB0byBH
TF9DTEFNUF9UT19FREdFCisgICAgICAgIC8vIHRvIGdldCBhcm91bmQgTlBPVCB0ZXh0dXJlIGxp
bWl0YXRpb25zIG9mIEdMRVMuCisgICAgICAgIGdsVGV4UGFyYW1ldGVyZihHTF9URVhUVVJFXzJE
LCBHTF9URVhUVVJFX01JTl9GSUxURVIsIEdMX0xJTkVBUik7CisgICAgICAgIGdsVGV4UGFyYW1l
dGVyZihHTF9URVhUVVJFXzJELCBHTF9URVhUVVJFX01BR19GSUxURVIsIEdMX0xJTkVBUik7Cisg
ICAgICAgIGdsVGV4UGFyYW1ldGVyZihHTF9URVhUVVJFXzJELCBHTF9URVhUVVJFX1dSQVBfUywg
R0xfQ0xBTVBfVE9fRURHRSk7CisgICAgICAgIGdsVGV4UGFyYW1ldGVyZihHTF9URVhUVVJFXzJE
LCBHTF9URVhUVVJFX1dSQVBfVCwgR0xfQ0xBTVBfVE9fRURHRSk7CisgICAgICAgIG1fdGV4dHVy
ZUNoYW5nZWQgPSBmYWxzZTsKKyAgICB9CisgICAgLy8gVXBkYXRlIHRoZSBjb250ZW50cyBvZiB0
aGUgdGV4dHVyZSB1c2VkIGJ5IHRoZSBjb21wb3NpdG9yLgorICAgIGlmIChtX2NvbnRlbnRzRGly
dHkpIHsKKyAgICAgICAgbV9jb250ZXh0LT5wcmVwYXJlVGV4dHVyZSgpOworICAgICAgICBtX2Nv
bnRlbnRzRGlydHkgPSBmYWxzZTsKKyAgICB9Cit9CisKK3ZvaWQgV2ViR0xMYXllckNocm9taXVt
OjpzZXRDb250ZXh0KGNvbnN0IEdyYXBoaWNzQ29udGV4dDNEKiBjb250ZXh0KQoreworICAgIG1f
Y29udGV4dCA9IGNvbnN0X2Nhc3Q8R3JhcGhpY3NDb250ZXh0M0QqPihjb250ZXh0KTsKKworICAg
IHVuc2lnbmVkIGludCB0ZXh0dXJlSWQgPSBtX2NvbnRleHQtPnBsYXRmb3JtVGV4dHVyZSgpOwor
ICAgIGlmICh0ZXh0dXJlSWQgIT0gbV90ZXh0dXJlSWQpCisgICAgICAgIG1fdGV4dHVyZUNoYW5n
ZWQgPSB0cnVlOworICAgIG1fdGV4dHVyZUlkID0gdGV4dHVyZUlkOworfQorCit9CisjZW5kaWYg
Ly8gVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9XZWJHTExheWVyQ2hyb21pdW0uaCBiL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vV2ViR0xMYXllckNocm9taXVtLmgKbmV3IGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4u
MTFiOGRiN2U2MTE3MzBkMGNkNzdkM2ViNjgxNDg1MzdlMWFmNGQxYgotLS0gL2Rldi9udWxsCisr
KyBiL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vV2ViR0xMYXllckNocm9taXVt
LmgKQEAgLTAsMCArMSw2MCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMCBHb29nbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFy
ZQorICogbWV0OgorICoKKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgICAgKiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiBjb3B5
cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyCisgKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlCisgKiBkaXN0cmlidXRpb24uCisgKiAgICAgKiBOZWl0aGVyIHRo
ZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisgKiBjb250cmlidXRv
cnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJv
bQorICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlz
c2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQg
SE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhF
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisg
KiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwg
VEhFIENPUFlSSUdIVAorICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9S
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRP
LCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgorICovCisKKworI2lmbmRlZiBXZWJHTExheWVyQ2hyb21pdW1faAorI2RlZmlu
ZSBXZWJHTExheWVyQ2hyb21pdW1faAorCisjaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5H
KQorCisjaW5jbHVkZSAiQ2FudmFzTGF5ZXJDaHJvbWl1bS5oIgorCituYW1lc3BhY2UgV2ViQ29y
ZSB7CisKK2NsYXNzIEdyYXBoaWNzQ29udGV4dDNEOworCisvLyBBIExheWVyIGNvbnRhaW5pbmcg
YSBXZWJHTCBjYW52YXMKK2NsYXNzIFdlYkdMTGF5ZXJDaHJvbWl1bSA6IHB1YmxpYyBDYW52YXNM
YXllckNocm9taXVtIHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxXZWJHTExheWVy
Q2hyb21pdW0+IGNyZWF0ZShHcmFwaGljc0xheWVyQ2hyb21pdW0qIG93bmVyID0gMCk7CisgICAg
dmlydHVhbCBib29sIGRyYXdzQ29udGVudCgpIHsgcmV0dXJuIG1fY29udGV4dDsgfQorICAgIHZp
cnR1YWwgdm9pZCB1cGRhdGVDb250ZW50cygpOworCisgICAgdm9pZCBzZXRDb250ZXh0KGNvbnN0
IEdyYXBoaWNzQ29udGV4dDNEKiBjb250ZXh0KTsKKworcHJpdmF0ZToKKyAgICBleHBsaWNpdCBX
ZWJHTExheWVyQ2hyb21pdW0oR3JhcGhpY3NMYXllckNocm9taXVtKiBvd25lcik7CisgICAgR3Jh
cGhpY3NDb250ZXh0M0QqIG1fY29udGV4dDsKK307CisKK30KKyNlbmRpZiAvLyBVU0UoQUNDRUxF
UkFURURfQ09NUE9TSVRJTkcpCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9ncHUvRHJhd2luZ0J1ZmZlci5jcHAgYi9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2dwdS9EcmF3aW5nQnVmZmVyLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4zZjk5ZjYyNzk2YThlZDM3YjVm
NDliYmIwMTU0ZmVlZTNlOTk0YzJlCi0tLSAvZGV2L251bGwKKysrIGIvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9ncHUvRHJhd2luZ0J1ZmZlci5jcHAKQEAgLTAsMCArMSw2MCBAQAorLyoKKyAq
IENvcHlyaWdodCAoYykgMjAxMCwgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyAqIG1ldDoKKyAqCisgKiAgICAgKiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorICogaW4gdGhlIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogZGlz
dHJpYnV0aW9uLgorICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3Ig
dGhlIG5hbWVzIG9mIGl0cworICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ug
b3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyAqIHRoaXMgc29mdHdhcmUgd2l0aG91
dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwor
ICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIE9XTkVSIE9S
IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBP
UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRI
RU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVk
ZSAiY29uZmlnLmgiCisKKyNpbmNsdWRlICJEcmF3aW5nQnVmZmVyLmgiCisKKyNpbmNsdWRlICJH
cmFwaGljc0NvbnRleHQzRC5oIgorI2luY2x1ZGUgIlNoYXJlZEdyYXBoaWNzQ29udGV4dDNELmgi
CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworUGFzc1JlZlB0cjxEcmF3aW5nQnVmZmVyPiBEcmF3
aW5nQnVmZmVyOjpjcmVhdGUoU2hhcmVkR3JhcGhpY3NDb250ZXh0M0QqIGNvbnRleHQsIGNvbnN0
IEludFNpemUmIHNpemUpCit7CisgICAgdW5zaWduZWQgZnJhbWVidWZmZXIgPSBjb250ZXh0LT5j
cmVhdGVGcmFtZWJ1ZmZlcigpOworICAgIEFTU0VSVChmcmFtZWJ1ZmZlcik7CisgICAgaWYgKCFm
cmFtZWJ1ZmZlcikKKyAgICAgICAgcmV0dXJuIDA7CisgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBE
cmF3aW5nQnVmZmVyKGNvbnRleHQsIHNpemUsIGZyYW1lYnVmZmVyKSk7Cit9CisKK3ZvaWQgRHJh
d2luZ0J1ZmZlcjo6YmluZCgpCit7CisgICAgbV9jb250ZXh0LT5iaW5kRnJhbWVidWZmZXIobV9m
cmFtZWJ1ZmZlcik7CisgICAgbV9jb250ZXh0LT5zZXRWaWV3cG9ydChtX3NpemUpOworfQorCit2
b2lkIERyYXdpbmdCdWZmZXI6OnNldFdpbGxQdWJsaXNoQ2FsbGJhY2soUGFzc093blB0cjxXaWxs
UHVibGlzaENhbGxiYWNrPiBjYWxsYmFjaykKK3sKKyAgICBtX2NhbGxiYWNrID0gY2FsbGJhY2s7
Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvZ3B1L0RyYXdpbmdCdWZmZXIuaCBiL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvZ3B1L0RyYXdpbmdCdWZmZXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4xOWY3MWIyYjM5Njk2MTBiNDA2ODMw
ODgzYWZkNGZkMmVhNWVhNmNiCi0tLSAvZGV2L251bGwKKysrIGIvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9ncHUvRHJhd2luZ0J1ZmZlci5oCkBAIC0wLDAgKzEsNzcgQEAKKy8qCisgKiBDb3B5
cmlnaHQgKGMpIDIwMTAsIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisgKiBtZXQ6CisgKgorICogICAgICogUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyAqIGluIHRoZSBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqIGRpc3RyaWJ1
dGlvbi4KKyAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBu
YW1lcyBvZiBpdHMKKyAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHBy
b21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisgKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3Bl
Y2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJB
UyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBPV05FUiBPUiBDT05U
UklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwK
KyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT
SU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkg
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBEcmF3
aW5nQnVmZmVyX2gKKyNkZWZpbmUgRHJhd2luZ0J1ZmZlcl9oCisKKyNpbmNsdWRlICJHcmFwaGlj
c0xheWVyLmgiCisjaW5jbHVkZSAiSW50U2l6ZS5oIgorCisjaW5jbHVkZSA8d3RmL093blB0ci5o
PgorI2luY2x1ZGUgPHd0Zi9QYXNzT3duUHRyLmg+CisjaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQu
aD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBTaGFyZWRHcmFwaGljc0NvbnRleHQz
RDsKKworc3RydWN0IERyYXdpbmdCdWZmZXJJbnRlcm5hbDsKKworLy8gTWFuYWdlcyBhIHJlbmRl
cmluZyB0YXJnZXQgKGZyYW1lYnVmZmVyICsgYXR0YWNobWVudCkgZm9yIGEgY2FudmFzLiAgQ2Fu
IHB1Ymxpc2ggaXRzIHJlbmRlcmluZworLy8gcmVzdWx0cyB0byBhIFBsYXRmb3JtTGF5ZXIgZm9y
IGNvbXBvc2l0aW5nLgorY2xhc3MgRHJhd2luZ0J1ZmZlciA6IHB1YmxpYyBSZWZDb3VudGVkPERy
YXdpbmdCdWZmZXI+IHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxEcmF3aW5nQnVm
ZmVyPiBjcmVhdGUoU2hhcmVkR3JhcGhpY3NDb250ZXh0M0QqLCBjb25zdCBJbnRTaXplJik7Cisg
ICAgfkRyYXdpbmdCdWZmZXIoKTsKKworICAgIHZvaWQgYmluZCgpOworICAgIHZvaWQgcHVibGlz
aFRvUGxhdGZvcm1MYXllcihQbGF0Zm9ybUxheWVyKik7CisgICAgSW50U2l6ZSBzaXplKCkgY29u
c3QgeyByZXR1cm4gbV9zaXplOyB9CisKKyAgICBjbGFzcyBXaWxsUHVibGlzaENhbGxiYWNrIDog
cHVibGljIE5vbmNvcHlhYmxlIHsKKyAgICBwdWJsaWM6CisgICAgICAgIHZpcnR1YWwgdm9pZCB3
aWxsUHVibGlzaCgpID0gMDsKKyAgICB9OworCisgICAgdm9pZCBzZXRXaWxsUHVibGlzaENhbGxi
YWNrKFBhc3NPd25QdHI8V2lsbFB1Ymxpc2hDYWxsYmFjaz4pOworcHJpdmF0ZToKKyAgICBEcmF3
aW5nQnVmZmVyKFNoYXJlZEdyYXBoaWNzQ29udGV4dDNEKiwgY29uc3QgSW50U2l6ZSYsIHVuc2ln
bmVkIGZyYW1lYnVmZmVyKTsKKworICAgIFNoYXJlZEdyYXBoaWNzQ29udGV4dDNEKiBtX2NvbnRl
eHQ7CisgICAgSW50U2l6ZSBtX3NpemU7CisgICAgdW5zaWduZWQgbV9mcmFtZWJ1ZmZlcjsKKwor
ICAgIE93blB0cjxXaWxsUHVibGlzaENhbGxiYWNrPiBtX2NhbGxiYWNrOworICAgIE93blB0cjxE
cmF3aW5nQnVmZmVySW50ZXJuYWw+IG1faW50ZXJuYWw7Cit9OworCit9IC8vIG5hbWVzcGFjZSBX
ZWJDb3JlCisKKyNlbmRpZiAvLyBEcmF3aW5nQnVmZmVyX2gKZGlmZiAtLWdpdCBhL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvZ3B1L1NoYXJlZEdyYXBoaWNzQ29udGV4dDNELmNwcCBiL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3B1L1NoYXJlZEdyYXBoaWNzQ29udGV4dDNELmNwcApuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwLi5mYTc1Yjk1MDlmYzI4MzM0MjRmY2Q2MjMxMTQ2ZTJhMDg5MmJjMmExCi0tLSAvZGV2
L251bGwKKysrIGIvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ncHUvU2hhcmVkR3JhcGhpY3ND
b250ZXh0M0QuY3BwCkBAIC0wLDAgKzEsMjk2IEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDEw
LCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zIGFyZQorICogbWV0OgorICoKKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAg
ICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlCisgKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyCisgKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiBkaXN0cmlidXRpb24uCisgKiAgICAg
KiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisg
KiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3Rz
IGRlcml2ZWQgZnJvbQorICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdy
aXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRI
RSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkg
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElN
SVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8g
RVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBF
WEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisg
KiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKworI2lu
Y2x1ZGUgIlNoYXJlZEdyYXBoaWNzQ29udGV4dDNELmgiCisKKyNpbmNsdWRlICJBZmZpbmVUcmFu
c2Zvcm0uaCIKKyNpbmNsdWRlICJDb2xvci5oIgorI2luY2x1ZGUgIkZsb2F0UmVjdC5oIgorI2lu
Y2x1ZGUgIkdyYXBoaWNzQ29udGV4dDNELmgiCisjaW5jbHVkZSAiR3JhcGhpY3NUeXBlcy5oIgor
I2luY2x1ZGUgIkludFNpemUuaCIKKyNpbmNsdWRlICJTb2xpZEZpbGxTaGFkZXIuaCIKKyNpbmNs
dWRlICJUZXhTaGFkZXIuaCIKKworI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KKyNpbmNs
dWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCisvLyBz
dGF0aWMKK1Bhc3NSZWZQdHI8U2hhcmVkR3JhcGhpY3NDb250ZXh0M0Q+IFNoYXJlZEdyYXBoaWNz
Q29udGV4dDNEOjpjcmVhdGUoUGFzc093blB0cjxHcmFwaGljc0NvbnRleHQzRD4gY29udGV4dCkK
K3sKKyAgICByZXR1cm4gYWRvcHRSZWYobmV3IFNoYXJlZEdyYXBoaWNzQ29udGV4dDNEKGNvbnRl
eHQpKTsKK30KKworU2hhcmVkR3JhcGhpY3NDb250ZXh0M0Q6OlNoYXJlZEdyYXBoaWNzQ29udGV4
dDNEKFBhc3NPd25QdHI8R3JhcGhpY3NDb250ZXh0M0Q+IGNvbnRleHQpCisgICAgOiBtX2NvbnRl
eHQoY29udGV4dCkKKyAgICAsIG1fcXVhZFZlcnRpY2VzKDApCisgICAgLCBtX3NvbGlkRmlsbFNo
YWRlcihTb2xpZEZpbGxTaGFkZXI6OmNyZWF0ZShtX2NvbnRleHQuZ2V0KCkpKQorICAgICwgbV90
ZXhTaGFkZXIoVGV4U2hhZGVyOjpjcmVhdGUobV9jb250ZXh0LmdldCgpKSkKK3sKK30KKworU2hh
cmVkR3JhcGhpY3NDb250ZXh0M0Q6On5TaGFyZWRHcmFwaGljc0NvbnRleHQzRCgpCit7CisgICAg
bV9jb250ZXh0LT5kZWxldGVCdWZmZXIobV9xdWFkVmVydGljZXMpOworfQorCit2b2lkIFNoYXJl
ZEdyYXBoaWNzQ29udGV4dDNEOjptYWtlQ29udGV4dEN1cnJlbnQoKQoreworICAgIG1fY29udGV4
dC0+bWFrZUNvbnRleHRDdXJyZW50KCk7Cit9CisKK3ZvaWQgU2hhcmVkR3JhcGhpY3NDb250ZXh0
M0Q6OnNjaXNzb3IoY29uc3QgRmxvYXRSZWN0JiByZWN0KQoreworICAgIG1fY29udGV4dC0+c2Np
c3NvcihyZWN0LngoKSwgcmVjdC55KCksIHJlY3Qud2lkdGgoKSwgcmVjdC5oZWlnaHQoKSk7Cit9
CisKK3ZvaWQgU2hhcmVkR3JhcGhpY3NDb250ZXh0M0Q6OmVuYWJsZSh1bnNpZ25lZCBjYXBhY2l0
eSkKK3sKKyAgICBtX2NvbnRleHQtPmVuYWJsZShjYXBhY2l0eSk7Cit9CisKK3ZvaWQgU2hhcmVk
R3JhcGhpY3NDb250ZXh0M0Q6OmRpc2FibGUodW5zaWduZWQgY2FwYWNpdHkpCit7CisgICAgbV9j
b250ZXh0LT5kaXNhYmxlKGNhcGFjaXR5KTsKK30KKwordm9pZCBTaGFyZWRHcmFwaGljc0NvbnRl
eHQzRDo6Y2xlYXJDb2xvcihjb25zdCBDb2xvciYgY29sb3IpCit7CisgICAgZmxvYXQgcmdiYVs0
XTsKKyAgICBjb2xvci5nZXRSR0JBKHJnYmFbMF0sIHJnYmFbMV0sIHJnYmFbMl0sIHJnYmFbM10p
OworICAgIG1fY29udGV4dC0+Y2xlYXJDb2xvcihyZ2JhWzBdLCByZ2JhWzFdLCByZ2JhWzJdLCBy
Z2JhWzNdKTsKK30KKwordm9pZCBTaGFyZWRHcmFwaGljc0NvbnRleHQzRDo6Y2xlYXIodW5zaWdu
ZWQgbWFzaykKK3sKKyAgICBtX2NvbnRleHQtPmNsZWFyKG1hc2spOworfQorCit2b2lkIFNoYXJl
ZEdyYXBoaWNzQ29udGV4dDNEOjpkcmF3QXJyYXlzKHVuc2lnbmVkIGxvbmcgbW9kZSwgbG9uZyBm
aXJzdCwgbG9uZyBjb3VudCkKK3sKKyAgICBtX2NvbnRleHQtPmRyYXdBcnJheXMobW9kZSwgZmly
c3QsIGNvdW50KTsKK30KKwordW5zaWduZWQgbG9uZyBTaGFyZWRHcmFwaGljc0NvbnRleHQzRDo6
Z2V0RXJyb3IoKQoreworICAgIHJldHVybiBtX2NvbnRleHQtPmdldEVycm9yKCk7Cit9CisKK3Zv
aWQgU2hhcmVkR3JhcGhpY3NDb250ZXh0M0Q6OmdldEludGVnZXJ2KHVuc2lnbmVkIGxvbmcgcG5h
bWUsIGludCogdmFsdWUpCit7CisgICAgbV9jb250ZXh0LT5nZXRJbnRlZ2VydihwbmFtZSwgdmFs
dWUpOworfQorCit1bnNpZ25lZCBTaGFyZWRHcmFwaGljc0NvbnRleHQzRDo6Y3JlYXRlRnJhbWVi
dWZmZXIoKQoreworICAgIHJldHVybiBtX2NvbnRleHQtPmNyZWF0ZUZyYW1lYnVmZmVyKCk7Cit9
CisKK3Vuc2lnbmVkIFNoYXJlZEdyYXBoaWNzQ29udGV4dDNEOjpjcmVhdGVUZXh0dXJlKCkKK3sK
KyAgICByZXR1cm4gbV9jb250ZXh0LT5jcmVhdGVUZXh0dXJlKCk7Cit9CisKK3ZvaWQgU2hhcmVk
R3JhcGhpY3NDb250ZXh0M0Q6OmRlbGV0ZUZyYW1lYnVmZmVyKHVuc2lnbmVkIGZyYW1lYnVmZmVy
KQoreworICAgIG1fY29udGV4dC0+ZGVsZXRlRnJhbWVidWZmZXIoZnJhbWVidWZmZXIpOworfQor
Cit2b2lkIFNoYXJlZEdyYXBoaWNzQ29udGV4dDNEOjpkZWxldGVUZXh0dXJlKHVuc2lnbmVkIHRl
eHR1cmUpCit7CisgICAgbV9jb250ZXh0LT5kZWxldGVUZXh0dXJlKHRleHR1cmUpOworfQorCit2
b2lkIFNoYXJlZEdyYXBoaWNzQ29udGV4dDNEOjpmcmFtZWJ1ZmZlclRleHR1cmUyRCh1bnNpZ25l
ZCBsb25nIHRhcmdldCwgdW5zaWduZWQgbG9uZyBhdHRhY2htZW50LCB1bnNpZ25lZCBsb25nIHRl
eHRhcmdldCwgdW5zaWduZWQgdGV4dHVyZSwgbG9uZyBsZXZlbCkKK3sKKyAgICBtX2NvbnRleHQt
PmZyYW1lYnVmZmVyVGV4dHVyZTJEKHRhcmdldCwgYXR0YWNobWVudCwgdGV4dGFyZ2V0LCB0ZXh0
dXJlLCBsZXZlbCk7Cit9CisKK3ZvaWQgU2hhcmVkR3JhcGhpY3NDb250ZXh0M0Q6OnRleFBhcmFt
ZXRlcmkodW5zaWduZWQgdGFyZ2V0LCB1bnNpZ25lZCBwbmFtZSwgaW50IHBhcmFtKQoreworICAg
IG1fY29udGV4dC0+dGV4UGFyYW1ldGVyaSh0YXJnZXQsIHBuYW1lLCBwYXJhbSk7Cit9CisKK2lu
dCBTaGFyZWRHcmFwaGljc0NvbnRleHQzRDo6dGV4SW1hZ2UyRCh1bnNpZ25lZCB0YXJnZXQsIHVu
c2lnbmVkIGxldmVsLCB1bnNpZ25lZCBpbnRlcm5hbGZvcm1hdCwgdW5zaWduZWQgd2lkdGgsIHVu
c2lnbmVkIGhlaWdodCwgdW5zaWduZWQgYm9yZGVyLCB1bnNpZ25lZCBmb3JtYXQsIHVuc2lnbmVk
IHR5cGUsIHZvaWQqIHBpeGVscykKK3sKKyAgICBtX2NvbnRleHQtPnRleEltYWdlMkQodGFyZ2V0
LCBsZXZlbCwgaW50ZXJuYWxmb3JtYXQsIHdpZHRoLCBoZWlnaHQsIGJvcmRlciwgZm9ybWF0LCB0
eXBlLCBwaXhlbHMpOworfQorCitpbnQgU2hhcmVkR3JhcGhpY3NDb250ZXh0M0Q6OnRleFN1Yklt
YWdlMkQodW5zaWduZWQgdGFyZ2V0LCB1bnNpZ25lZCBsZXZlbCwgdW5zaWduZWQgeG9mZnNldCwg
dW5zaWduZWQgeW9mZnNldCwgdW5zaWduZWQgd2lkdGgsIHVuc2lnbmVkIGhlaWdodCwgdW5zaWdu
ZWQgZm9ybWF0LCB1bnNpZ25lZCB0eXBlLCB2b2lkKiBwaXhlbHMpCit7CisgICAgbV9jb250ZXh0
LT50ZXhTdWJJbWFnZTJEKHRhcmdldCwgbGV2ZWwsIHhvZmZzZXQsIHlvZmZzZXQsIHdpZHRoLCBo
ZWlnaHQsIGZvcm1hdCwgdHlwZSwgcGl4ZWxzKTsKK30KKwordm9pZCBTaGFyZWRHcmFwaGljc0Nv
bnRleHQzRDo6cmVhZFBpeGVscyhsb25nIHgsIGxvbmcgeSwgdW5zaWduZWQgbG9uZyB3aWR0aCwg
dW5zaWduZWQgbG9uZyBoZWlnaHQsIHVuc2lnbmVkIGxvbmcgZm9ybWF0LCB1bnNpZ25lZCBsb25n
IHR5cGUsIHZvaWQqIGRhdGEpCit7CisgICAgbV9jb250ZXh0LT5yZWFkUGl4ZWxzKHgsIHksIHdp
ZHRoLCBoZWlnaHQsIGZvcm1hdCwgdHlwZSwgZGF0YSk7Cit9CisKK2Jvb2wgU2hhcmVkR3JhcGhp
Y3NDb250ZXh0M0Q6OnN1cHBvcnRzQkdSQSgpCit7CisgICAgcmV0dXJuIG1fY29udGV4dC0+c3Vw
cG9ydHNCR1JBKCk7Cit9CisKK1RleHR1cmUqIFNoYXJlZEdyYXBoaWNzQ29udGV4dDNEOjpjcmVh
dGVUZXh0dXJlKE5hdGl2ZUltYWdlUHRyIHB0ciwgVGV4dHVyZTo6Rm9ybWF0IGZvcm1hdCwgaW50
IHdpZHRoLCBpbnQgaGVpZ2h0KQoreworICAgIFJlZlB0cjxUZXh0dXJlPiB0ZXh0dXJlID0gbV90
ZXh0dXJlcy5nZXQocHRyKTsKKyAgICBpZiAodGV4dHVyZSkKKyAgICAgICAgcmV0dXJuIHRleHR1
cmUuZ2V0KCk7CisKKyAgICB0ZXh0dXJlID0gVGV4dHVyZTo6Y3JlYXRlKG1fY29udGV4dC5nZXQo
KSwgZm9ybWF0LCB3aWR0aCwgaGVpZ2h0KTsKKyAgICBUZXh0dXJlKiB0ID0gdGV4dHVyZS5nZXQo
KTsKKyAgICBtX3RleHR1cmVzLnNldChwdHIsIHRleHR1cmUpOworICAgIHJldHVybiB0OworfQor
CitUZXh0dXJlKiBTaGFyZWRHcmFwaGljc0NvbnRleHQzRDo6Z2V0VGV4dHVyZShOYXRpdmVJbWFn
ZVB0ciBwdHIpCit7CisgICAgUmVmUHRyPFRleHR1cmU+IHRleHR1cmUgPSBtX3RleHR1cmVzLmdl
dChwdHIpOworICAgIHJldHVybiB0ZXh0dXJlID8gdGV4dHVyZS5nZXQoKSA6IDA7Cit9CisKK1Bh
c3NSZWZQdHI8VGV4dHVyZT4gU2hhcmVkR3JhcGhpY3NDb250ZXh0M0Q6OmNyZWF0ZVRleHR1cmUo
VGV4dHVyZTo6Rm9ybWF0IGZvcm1hdCwgaW50IHdpZHRoLCBpbnQgaGVpZ2h0KQoreworICAgIHJl
dHVybiBUZXh0dXJlOjpjcmVhdGUobV9jb250ZXh0LmdldCgpLCBmb3JtYXQsIHdpZHRoLCBoZWln
aHQpOworfQorCit2b2lkIFNoYXJlZEdyYXBoaWNzQ29udGV4dDNEOjphcHBseUNvbXBvc2l0ZU9w
ZXJhdG9yKENvbXBvc2l0ZU9wZXJhdG9yIG9wKQoreworICAgIHN3aXRjaCAob3ApIHsKKyAgICBj
YXNlIENvbXBvc2l0ZUNsZWFyOgorICAgICAgICBtX2NvbnRleHQtPmVuYWJsZShHcmFwaGljc0Nv
bnRleHQzRDo6QkxFTkQpOworICAgICAgICBtX2NvbnRleHQtPmJsZW5kRnVuYyhHcmFwaGljc0Nv
bnRleHQzRDo6WkVSTywgR3JhcGhpY3NDb250ZXh0M0Q6OlpFUk8pOworICAgICAgICBicmVhazsK
KyAgICBjYXNlIENvbXBvc2l0ZUNvcHk6CisgICAgICAgIG1fY29udGV4dC0+ZGlzYWJsZShHcmFw
aGljc0NvbnRleHQzRDo6QkxFTkQpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIENvbXBvc2l0
ZVNvdXJjZU92ZXI6CisgICAgICAgIG1fY29udGV4dC0+ZW5hYmxlKEdyYXBoaWNzQ29udGV4dDNE
OjpCTEVORCk7CisgICAgICAgIG1fY29udGV4dC0+YmxlbmRGdW5jKEdyYXBoaWNzQ29udGV4dDNE
OjpPTkUsIEdyYXBoaWNzQ29udGV4dDNEOjpPTkVfTUlOVVNfU1JDX0FMUEhBKTsKKyAgICAgICAg
YnJlYWs7CisgICAgY2FzZSBDb21wb3NpdGVTb3VyY2VJbjoKKyAgICAgICAgbV9jb250ZXh0LT5l
bmFibGUoR3JhcGhpY3NDb250ZXh0M0Q6OkJMRU5EKTsKKyAgICAgICAgbV9jb250ZXh0LT5ibGVu
ZEZ1bmMoR3JhcGhpY3NDb250ZXh0M0Q6OkRTVF9BTFBIQSwgR3JhcGhpY3NDb250ZXh0M0Q6OlpF
Uk8pOworICAgICAgICBicmVhazsKKyAgICBjYXNlIENvbXBvc2l0ZVNvdXJjZU91dDoKKyAgICAg
ICAgbV9jb250ZXh0LT5lbmFibGUoR3JhcGhpY3NDb250ZXh0M0Q6OkJMRU5EKTsKKyAgICAgICAg
bV9jb250ZXh0LT5ibGVuZEZ1bmMoR3JhcGhpY3NDb250ZXh0M0Q6Ok9ORV9NSU5VU19EU1RfQUxQ
SEEsIEdyYXBoaWNzQ29udGV4dDNEOjpaRVJPKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBD
b21wb3NpdGVTb3VyY2VBdG9wOgorICAgICAgICBtX2NvbnRleHQtPmVuYWJsZShHcmFwaGljc0Nv
bnRleHQzRDo6QkxFTkQpOworICAgICAgICBtX2NvbnRleHQtPmJsZW5kRnVuYyhHcmFwaGljc0Nv
bnRleHQzRDo6RFNUX0FMUEhBLCBHcmFwaGljc0NvbnRleHQzRDo6T05FX01JTlVTX1NSQ19BTFBI
QSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgQ29tcG9zaXRlRGVzdGluYXRpb25PdmVyOgor
ICAgICAgICBtX2NvbnRleHQtPmVuYWJsZShHcmFwaGljc0NvbnRleHQzRDo6QkxFTkQpOworICAg
ICAgICBtX2NvbnRleHQtPmJsZW5kRnVuYyhHcmFwaGljc0NvbnRleHQzRDo6T05FX01JTlVTX0RT
VF9BTFBIQSwgR3JhcGhpY3NDb250ZXh0M0Q6Ok9ORSk7CisgICAgICAgIGJyZWFrOworICAgIGNh
c2UgQ29tcG9zaXRlRGVzdGluYXRpb25JbjoKKyAgICAgICAgbV9jb250ZXh0LT5lbmFibGUoR3Jh
cGhpY3NDb250ZXh0M0Q6OkJMRU5EKTsKKyAgICAgICAgbV9jb250ZXh0LT5ibGVuZEZ1bmMoR3Jh
cGhpY3NDb250ZXh0M0Q6OlpFUk8sIEdyYXBoaWNzQ29udGV4dDNEOjpTUkNfQUxQSEEpOworICAg
ICAgICBicmVhazsKKyAgICBjYXNlIENvbXBvc2l0ZURlc3RpbmF0aW9uT3V0OgorICAgICAgICBt
X2NvbnRleHQtPmVuYWJsZShHcmFwaGljc0NvbnRleHQzRDo6QkxFTkQpOworICAgICAgICBtX2Nv
bnRleHQtPmJsZW5kRnVuYyhHcmFwaGljc0NvbnRleHQzRDo6WkVSTywgR3JhcGhpY3NDb250ZXh0
M0Q6Ok9ORV9NSU5VU19TUkNfQUxQSEEpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIENvbXBv
c2l0ZURlc3RpbmF0aW9uQXRvcDoKKyAgICAgICAgbV9jb250ZXh0LT5lbmFibGUoR3JhcGhpY3ND
b250ZXh0M0Q6OkJMRU5EKTsKKyAgICAgICAgbV9jb250ZXh0LT5ibGVuZEZ1bmMoR3JhcGhpY3ND
b250ZXh0M0Q6Ok9ORV9NSU5VU19EU1RfQUxQSEEsIEdyYXBoaWNzQ29udGV4dDNEOjpTUkNfQUxQ
SEEpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIENvbXBvc2l0ZVhPUjoKKyAgICAgICAgbV9j
b250ZXh0LT5lbmFibGUoR3JhcGhpY3NDb250ZXh0M0Q6OkJMRU5EKTsKKyAgICAgICAgbV9jb250
ZXh0LT5ibGVuZEZ1bmMoR3JhcGhpY3NDb250ZXh0M0Q6Ok9ORV9NSU5VU19EU1RfQUxQSEEsIEdy
YXBoaWNzQ29udGV4dDNEOjpPTkVfTUlOVVNfU1JDX0FMUEhBKTsKKyAgICAgICAgYnJlYWs7Cisg
ICAgY2FzZSBDb21wb3NpdGVQbHVzRGFya2VyOgorICAgIGNhc2UgQ29tcG9zaXRlSGlnaGxpZ2h0
OgorICAgICAgICAvLyB1bnN1cHBvcnRlZAorICAgICAgICBtX2NvbnRleHQtPmRpc2FibGUoR3Jh
cGhpY3NDb250ZXh0M0Q6OkJMRU5EKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBDb21wb3Np
dGVQbHVzTGlnaHRlcjoKKyAgICAgICAgbV9jb250ZXh0LT5lbmFibGUoR3JhcGhpY3NDb250ZXh0
M0Q6OkJMRU5EKTsKKyAgICAgICAgbV9jb250ZXh0LT5ibGVuZEZ1bmMoR3JhcGhpY3NDb250ZXh0
M0Q6Ok9ORSwgR3JhcGhpY3NDb250ZXh0M0Q6Ok9ORSk7CisgICAgICAgIGJyZWFrOworICAgIH0K
K30KKwordm9pZCBTaGFyZWRHcmFwaGljc0NvbnRleHQzRDo6dXNlUXVhZFZlcnRpY2VzKCkKK3sK
KyAgICBpZiAoIW1fcXVhZFZlcnRpY2VzKSB7CisgICAgICAgIGZsb2F0IHZlcnRpY2VzW10gPSB7
IDAuMGYsIDAuMGYsIDEuMGYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEuMGYsIDAu
MGYsIDEuMGYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAuMGYsIDEuMGYsIDEuMGYs
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEuMGYsIDEuMGYsIDEuMGYgfTsKKyAgICAg
ICAgbV9xdWFkVmVydGljZXMgPSBtX2NvbnRleHQtPmNyZWF0ZUJ1ZmZlcigpOworICAgICAgICBt
X2NvbnRleHQtPmJpbmRCdWZmZXIoR3JhcGhpY3NDb250ZXh0M0Q6OkFSUkFZX0JVRkZFUiwgbV9x
dWFkVmVydGljZXMpOworICAgICAgICBtX2NvbnRleHQtPmJ1ZmZlckRhdGEoR3JhcGhpY3NDb250
ZXh0M0Q6OkFSUkFZX0JVRkZFUiwgc2l6ZW9mKHZlcnRpY2VzKSwgdmVydGljZXMsIEdyYXBoaWNz
Q29udGV4dDNEOjpTVEFUSUNfRFJBVyk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgbV9jb250ZXh0
LT5iaW5kQnVmZmVyKEdyYXBoaWNzQ29udGV4dDNEOjpBUlJBWV9CVUZGRVIsIG1fcXVhZFZlcnRp
Y2VzKTsKKyAgICB9Cit9CisKK3ZvaWQgU2hhcmVkR3JhcGhpY3NDb250ZXh0M0Q6OnNldEFjdGl2
ZVRleHR1cmUodW5zaWduZWQgdGV4dHVyZVVuaXQpCit7CisgICAgbV9jb250ZXh0LT5hY3RpdmVU
ZXh0dXJlKHRleHR1cmVVbml0KTsKK30KKwordm9pZCBTaGFyZWRHcmFwaGljc0NvbnRleHQzRDo6
YmluZFRleHR1cmUodW5zaWduZWQgdGFyZ2V0LCB1bnNpZ25lZCB0ZXh0dXJlKQoreworICAgIG1f
Y29udGV4dC0+YmluZFRleHR1cmUodGFyZ2V0LCB0ZXh0dXJlKTsKK30KKwordm9pZCBTaGFyZWRH
cmFwaGljc0NvbnRleHQzRDo6dXNlRmlsbFNvbGlkUHJvZ3JhbShjb25zdCBBZmZpbmVUcmFuc2Zv
cm0mIHRyYW5zZm9ybSwgY29uc3QgQ29sb3ImIGNvbG9yKQoreworICAgIG1fc29saWRGaWxsU2hh
ZGVyLT51c2UodHJhbnNmb3JtLCBjb2xvcik7Cit9CisKK3ZvaWQgU2hhcmVkR3JhcGhpY3NDb250
ZXh0M0Q6OnVzZVRleHR1cmVQcm9ncmFtKGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgdHJhbnNmb3Jt
LCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHRleFRyYW5zZm9ybSwgZmxvYXQgYWxwaGEpCit7Cisg
ICAgbV90ZXhTaGFkZXItPnVzZSh0cmFuc2Zvcm0sIHRleFRyYW5zZm9ybSwgMCwgYWxwaGEpOwor
fQorCit2b2lkIFNoYXJlZEdyYXBoaWNzQ29udGV4dDNEOjpiaW5kRnJhbWVidWZmZXIodW5zaWdu
ZWQgZnJhbWVidWZmZXIpCit7CisgICAgbV9jb250ZXh0LT5iaW5kRnJhbWVidWZmZXIoR3JhcGhp
Y3NDb250ZXh0M0Q6OkZSQU1FQlVGRkVSLCBmcmFtZWJ1ZmZlcik7Cit9CisKK3ZvaWQgU2hhcmVk
R3JhcGhpY3NDb250ZXh0M0Q6OnNldFZpZXdwb3J0KGNvbnN0IEludFNpemUmIHNpemUpCit7Cisg
ICAgbV9jb250ZXh0LT52aWV3cG9ydCgwLCAwLCBzaXplLndpZHRoKCksIHNpemUuaGVpZ2h0KCkp
OworfQorCitib29sIFNoYXJlZEdyYXBoaWNzQ29udGV4dDNEOjpwYWludHNJbnRvQ2FudmFzQnVm
ZmVyKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9jb250ZXh0LT5wYWludHNJbnRvQ2FudmFzQnVm
ZmVyKCk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvZ3B1L1NoYXJlZEdyYXBoaWNzQ29udGV4dDNELmggYi9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2dwdS9TaGFyZWRHcmFwaGljc0NvbnRleHQzRC5oCm5ldyBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAuLjFiYWEwZjZmNDc4MDYxOWE3MjUwZWE1NjgyZTI2MWM0ZjkxYmNhYTAKLS0tIC9kZXYvbnVs
bAorKysgYi9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dwdS9TaGFyZWRHcmFwaGljc0NvbnRl
eHQzRC5oCkBAIC0wLDAgKzEsMTI0IEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDEwLCBHb29n
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zIGFyZQorICogbWV0OgorICoKKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgICAgKiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisg
KiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyCisgKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiBkaXN0cmlidXRpb24uCisgKiAgICAgKiBOZWl0
aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisgKiBjb250
cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2
ZWQgZnJvbQorICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4g
cGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZ
UklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBU
TywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQg
U0hBTEwgVEhFIENPUFlSSUdIVAorICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1J
VEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
CisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgU2hhcmVkR3JhcGhpY3NDb250ZXh0M0Rf
aAorI2RlZmluZSBTaGFyZWRHcmFwaGljc0NvbnRleHQzRF9oCisKKyNpbmNsdWRlICJHcmFwaGlj
c1R5cGVzLmgiCisjaW5jbHVkZSAiSW1hZ2VTb3VyY2UuaCIKKyNpbmNsdWRlICJUZXh0dXJlLmgi
CisKKyNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgorI2luY2x1ZGUgPHd0Zi9Pd25QdHIuaD4KKyNp
bmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgorI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KKworbmFt
ZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBBZmZpbmVUcmFuc2Zvcm07CitjbGFzcyBDb2xvcjsK
K2NsYXNzIEdyYXBoaWNzQ29udGV4dDNEOworY2xhc3MgRmxvYXRSZWN0OworY2xhc3MgSW50U2l6
ZTsKK2NsYXNzIFNvbGlkRmlsbFNoYWRlcjsKK2NsYXNzIFRleFNoYWRlcjsKKwordHlwZWRlZiBI
YXNoTWFwPE5hdGl2ZUltYWdlUHRyLCBSZWZQdHI8VGV4dHVyZT4gPiBUZXh0dXJlSGFzaE1hcDsK
KworY2xhc3MgU2hhcmVkR3JhcGhpY3NDb250ZXh0M0QgOiBwdWJsaWMgUmVmQ291bnRlZDxTaGFy
ZWRHcmFwaGljc0NvbnRleHQzRD4geworcHVibGljOgorICAgIHN0YXRpYyBQYXNzUmVmUHRyPFNo
YXJlZEdyYXBoaWNzQ29udGV4dDNEPiBjcmVhdGUoUGFzc093blB0cjxHcmFwaGljc0NvbnRleHQz
RD4pOworICAgIH5TaGFyZWRHcmFwaGljc0NvbnRleHQzRCgpOworCisgICAgLy8gRnVuY3Rpb25z
IHRoYXQgZGVsZWdhdGUgZGlyZWN0bHkgdG8gR3JhcGhpY3NDb250ZXh0M0QsIHdpdGggY2FjaGlu
ZworICAgIHZvaWQgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgdm9pZCBiaW5kRnJhbWVidWZm
ZXIodW5zaWduZWQgZnJhbWVidWZmZXIpOworICAgIHZvaWQgc2V0Vmlld3BvcnQoY29uc3QgSW50
U2l6ZSYpOworICAgIHZvaWQgc2Npc3Nvcihjb25zdCBGbG9hdFJlY3QmKTsKKyAgICB2b2lkIGVu
YWJsZSh1bnNpZ25lZCBjYXBhY2l0eSk7CisgICAgdm9pZCBkaXNhYmxlKHVuc2lnbmVkIGNhcGFj
aXR5KTsKKyAgICB2b2lkIGNsZWFyQ29sb3IoY29uc3QgQ29sb3ImKTsKKyAgICB2b2lkIGNsZWFy
KHVuc2lnbmVkIG1hc2spOworICAgIHZvaWQgZHJhd0FycmF5cyh1bnNpZ25lZCBsb25nIG1vZGUs
IGxvbmcgZmlyc3QsIGxvbmcgY291bnQpOworICAgIHVuc2lnbmVkIGxvbmcgZ2V0RXJyb3IoKTsK
KyAgICB2b2lkIGdldEludGVnZXJ2KHVuc2lnbmVkIGxvbmcgcG5hbWUsIGludCogdmFsdWUpOwor
CisgICAgdW5zaWduZWQgY3JlYXRlRnJhbWVidWZmZXIoKTsKKyAgICB1bnNpZ25lZCBjcmVhdGVU
ZXh0dXJlKCk7CisKKyAgICB2b2lkIGRlbGV0ZUZyYW1lYnVmZmVyKHVuc2lnbmVkIGZyYW1lYnVm
ZmVyKTsKKyAgICB2b2lkIGRlbGV0ZVRleHR1cmUodW5zaWduZWQgdGV4dHVyZSk7CisKKyAgICB2
b2lkIGZyYW1lYnVmZmVyVGV4dHVyZTJEKHVuc2lnbmVkIGxvbmcgdGFyZ2V0LCB1bnNpZ25lZCBs
b25nIGF0dGFjaG1lbnQsIHVuc2lnbmVkIGxvbmcgdGV4dGFyZ2V0LCB1bnNpZ25lZCwgbG9uZyBs
ZXZlbCk7CisgICAgdm9pZCB0ZXhQYXJhbWV0ZXJpKHVuc2lnbmVkIHRhcmdldCwgdW5zaWduZWQg
cG5hbWUsIGludCBwYXJhbSk7CisgICAgaW50IHRleEltYWdlMkQodW5zaWduZWQgdGFyZ2V0LCB1
bnNpZ25lZCBsZXZlbCwgdW5zaWduZWQgaW50ZXJuYWxmb3JtYXQsIHVuc2lnbmVkIHdpZHRoLCB1
bnNpZ25lZCBoZWlnaHQsIHVuc2lnbmVkIGJvcmRlciwgdW5zaWduZWQgZm9ybWF0LCB1bnNpZ25l
ZCB0eXBlLCB2b2lkKiBwaXhlbHMpOworICAgIGludCB0ZXhTdWJJbWFnZTJEKHVuc2lnbmVkIHRh
cmdldCwgdW5zaWduZWQgbGV2ZWwsIHVuc2lnbmVkIHhvZmZzZXQsIHVuc2lnbmVkIHlvZmZzZXQs
IHVuc2lnbmVkIHdpZHRoLCB1bnNpZ25lZCBoZWlnaHQsIHVuc2lnbmVkIGZvcm1hdCwgdW5zaWdu
ZWQgdHlwZSwgdm9pZCogcGl4ZWxzKTsKKworICAgIHZvaWQgcmVhZFBpeGVscyhsb25nIHgsIGxv
bmcgeSwgdW5zaWduZWQgbG9uZyB3aWR0aCwgdW5zaWduZWQgbG9uZyBoZWlnaHQsIHVuc2lnbmVk
IGxvbmcgZm9ybWF0LCB1bnNpZ25lZCBsb25nIHR5cGUsIHZvaWQqIGRhdGEpOworCisgICAgYm9v
bCBwYWludHNJbnRvQ2FudmFzQnVmZmVyKCkgY29uc3Q7CisKKyAgICAvLyBTaGFyZWQgbG9naWMg
Zm9yIGNhbnZhcyAyZAorICAgIHZvaWQgYXBwbHlDb21wb3NpdGVPcGVyYXRvcihDb21wb3NpdGVP
cGVyYXRvcik7CisgICAgdm9pZCB1c2VRdWFkVmVydGljZXMoKTsKKworICAgIHZvaWQgdXNlRmls
bFNvbGlkUHJvZ3JhbShjb25zdCBBZmZpbmVUcmFuc2Zvcm0mLCBjb25zdCBDb2xvciYpOworICAg
IHZvaWQgdXNlVGV4dHVyZVByb2dyYW0oY29uc3QgQWZmaW5lVHJhbnNmb3JtJiwgY29uc3QgQWZm
aW5lVHJhbnNmb3JtJiwgZmxvYXQgYWxwaGEpOworCisgICAgdm9pZCBzZXRBY3RpdmVUZXh0dXJl
KHVuc2lnbmVkIHRleHR1cmVVbml0KTsKKyAgICB2b2lkIGJpbmRUZXh0dXJlKHVuc2lnbmVkIHRh
cmdldCwgdW5zaWduZWQgdGV4dHVyZSk7CisKKyAgICBib29sIHN1cHBvcnRzQkdSQSgpOworCisg
ICAgLy8gQ3JlYXRlcyBhIHRleHR1cmUgYXNzb2NpYXRlZCB3aXRoIHRoZSBnaXZlbiBpbWFnZS4g
IElzIG93bmVkIGJ5IHRoaXMgY29udGV4dCdzCisgICAgLy8gVGV4dHVyZUhhc2hNYXAuCisgICAg
VGV4dHVyZSogY3JlYXRlVGV4dHVyZShOYXRpdmVJbWFnZVB0ciwgVGV4dHVyZTo6Rm9ybWF0LCBp
bnQgd2lkdGgsIGludCBoZWlnaHQpOworICAgIFRleHR1cmUqIGdldFRleHR1cmUoTmF0aXZlSW1h
Z2VQdHIpOworCisgICAgLy8gQ3JlYXRlcyBhIHRleHR1cmUgdGhhdCBpcyBub3QgYXNzb2NpYXRl
ZCB3aXRoIGFueSBpbWFnZS4gIFRoZSBjYWxsZXIgdGFrZXMgb3duZXJzaGlwIG9mCisgICAgLy8g
dGhlIHRleHR1cmUuCisgICAgUGFzc1JlZlB0cjxUZXh0dXJlPiBjcmVhdGVUZXh0dXJlKFRleHR1
cmU6OkZvcm1hdCwgaW50IHdpZHRoLCBpbnQgaGVpZ2h0KTsKKworcHJpdmF0ZToKKyAgICBTaGFy
ZWRHcmFwaGljc0NvbnRleHQzRChQYXNzT3duUHRyPEdyYXBoaWNzQ29udGV4dDNEPiBjb250ZXh0
KTsKKworICAgIE93blB0cjxHcmFwaGljc0NvbnRleHQzRD4gbV9jb250ZXh0OworCisgICAgdW5z
aWduZWQgbV9xdWFkVmVydGljZXM7CisKKyAgICBPd25QdHI8U29saWRGaWxsU2hhZGVyPiBtX3Nv
bGlkRmlsbFNoYWRlcjsKKyAgICBPd25QdHI8VGV4U2hhZGVyPiBtX3RleFNoYWRlcjsKKworICAg
IFRleHR1cmVIYXNoTWFwIG1fdGV4dHVyZXM7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3Jl
CisKKyNlbmRpZiAvLyBTaGFyZWRHcmFwaGljc0NvbnRleHQzRF9oCmRpZmYgLS1naXQgYS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dwdS9UZXh0dXJlLmNwcCBiL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvZ3B1L1RleHR1cmUuY3BwCmluZGV4IDU1NzYwM2M5NzYzMmZlMGYzOGY1YjczNmVj
NjVhM2M2NWM3MTQyMzYuLjM2ZTRhZDVlZmMyNjgyZGI1YTA5ODI5MjAyM2MyZDNiNWZhOTZkNzgg
MTAwNjQ0Ci0tLSBhL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3B1L1RleHR1cmUuY3BwCisr
KyBiL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3B1L1RleHR1cmUuY3BwCkBAIC0zNCw2ICsz
NCw3IEBACiAKICNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQzRC5oIgogI2luY2x1ZGUgIkludFJl
Y3QuaCIKKwogI2luY2x1ZGUgPHd0Zi9Pd25BcnJheVB0ci5oPgogCiBuYW1lc3BhY2UgV2ViQ29y
ZSB7CmRpZmYgLS1naXQgYS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL21hYy9HcmFwaGljc0xh
eWVyQ0EuaCBiL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL0dyYXBoaWNzTGF5ZXJDQS5o
CmluZGV4IGE5Zjc0N2FkMDA0ZDgyZTM5NjM5NDdhOTY0MmQyYzE1MjkyNDViNDMuLjFjYTAyNzk0
MTM2ZGM4ODM3NzY0ZmRmNGViZjMzYjBlMTI1MDJiNGIgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvbWFjL0dyYXBoaWNzTGF5ZXJDQS5oCisrKyBiL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvbWFjL0dyYXBoaWNzTGF5ZXJDQS5oCkBAIC0xMDMsNyArMTAzLDcgQEAgcHVi
bGljOgogICAgIAogICAgIHZpcnR1YWwgdm9pZCBzZXRDb250ZW50c1RvSW1hZ2UoSW1hZ2UqKTsK
ICAgICB2aXJ0dWFsIHZvaWQgc2V0Q29udGVudHNUb01lZGlhKFBsYXRmb3JtTGF5ZXIqKTsKLSAg
ICB2aXJ0dWFsIHZvaWQgc2V0Q29udGVudHNUb0NhbnZhcyhQbGF0Zm9ybUxheWVyKik7CisgICAg
dmlydHVhbCB2b2lkIHNldENvbnRlbnRzVG9XZWJHTChQbGF0Zm9ybUxheWVyKik7CiAKICAgICB2
aXJ0dWFsIGJvb2wgaGFzQ29udGVudHNMYXllcigpIGNvbnN0IHsgcmV0dXJuIG1fY29udGVudHNM
YXllcjsgfQogICAgIApkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9tYWMv
R3JhcGhpY3NMYXllckNBLm1tIGIvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9tYWMvR3JhcGhp
Y3NMYXllckNBLm1tCmluZGV4IDMxNWNjMDA5MTAzYzY5OGZhMDAxNDdiNDkzZjg2NTQ5YzgxZjJj
YWUuLjAwMTdjYmZlNTc0MDk3YmViNzkwZDU4MmQwODZjYTE1ODEzMjcxYzcgMTAwNjQ0Ci0tLSBh
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL0dyYXBoaWNzTGF5ZXJDQS5tbQorKysgYi9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL21hYy9HcmFwaGljc0xheWVyQ0EubW0KQEAgLTE3MzEs
NyArMTczMSw3IEBAIHZvaWQgR3JhcGhpY3NMYXllckNBOjpwYXVzZUFuaW1hdGlvbk9uTGF5ZXIo
QW5pbWF0ZWRQcm9wZXJ0eUlEIHByb3BlcnR5LCBjb25zdCBTCiAgICAgfQogfQogCi12b2lkIEdy
YXBoaWNzTGF5ZXJDQTo6c2V0Q29udGVudHNUb0NhbnZhcyhQbGF0Zm9ybUxheWVyKiBjYW52YXNM
YXllcikKK3ZvaWQgR3JhcGhpY3NMYXllckNBOjpzZXRDb250ZW50c1RvV2ViR0woUGxhdGZvcm1M
YXllciogY2FudmFzTGF5ZXIpCiB7CiAgICAgaWYgKGNhbnZhc0xheWVyID09IG1fY29udGVudHNM
YXllcikKICAgICAgICAgcmV0dXJuOwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9za2lhL0dyYXBoaWNzQ29udGV4dFNraWEuY3BwIGIvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9za2lhL0dyYXBoaWNzQ29udGV4dFNraWEuY3BwCmluZGV4IGI0ZmRkZDU2OGRlNWU5MTI4
ZTEzN2U4NTVkMzg4ZGNjNmE5Mjg4YjMuLjFmMzlhMWEyNDgyYTU3MDhlYjE3ODBiYmIxMTNkYjNj
MTg3ZTNjZjAgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc2tpYS9HcmFw
aGljc0NvbnRleHRTa2lhLmNwcAorKysgYi9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3NraWEv
R3JhcGhpY3NDb250ZXh0U2tpYS5jcHAKQEAgLTEyNDIsMTQgKzEyNDIsMTQgQEAgdm9pZCBHcmFw
aGljc0NvbnRleHQ6OnRyYW5zbGF0ZShmbG9hdCB3LCBmbG9hdCBoKQogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdlYkNvcmVGbG9hdFRvU2tTY2FsYXIoaCkpOwog
fQogCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6c2V0R3JhcGhpY3NDb250ZXh0M0QoR3JhcGhpY3ND
b250ZXh0M0QqIGNvbnRleHQzRCwgY29uc3QgSW50U2l6ZSYgc2l6ZSkKK3ZvaWQgR3JhcGhpY3ND
b250ZXh0OjpzeW5jU29mdHdhcmVDYW52YXMoKQogewotICAgIHBsYXRmb3JtQ29udGV4dCgpLT5z
ZXRHcmFwaGljc0NvbnRleHQzRChjb250ZXh0M0QsIHNpemUpOworICAgIHBsYXRmb3JtQ29udGV4
dCgpLT5zeW5jU29mdHdhcmVDYW52YXMoKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHQ6OnN5
bmNTb2Z0d2FyZUNhbnZhcygpCit2b2lkIEdyYXBoaWNzQ29udGV4dDo6c2V0U2hhcmVkR3JhcGhp
Y3NDb250ZXh0M0QoU2hhcmVkR3JhcGhpY3NDb250ZXh0M0QqIGNvbnRleHQsIERyYXdpbmdCdWZm
ZXIqIGZyYW1lYnVmZmVyLCBjb25zdCBJbnRTaXplJiBzaXplKQogewotICAgIHBsYXRmb3JtQ29u
dGV4dCgpLT5zeW5jU29mdHdhcmVDYW52YXMoKTsKKyAgICBwbGF0Zm9ybUNvbnRleHQoKS0+c2V0
U2hhcmVkR3JhcGhpY3NDb250ZXh0M0QoY29udGV4dCwgZnJhbWVidWZmZXIsIHNpemUpOwogfQog
CiB9ICAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9za2lhL0ltYWdlU2tpYS5jcHAgYi9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3Nr
aWEvSW1hZ2VTa2lhLmNwcAppbmRleCBhZWQyODlmZTNjMTU1YWE1ZDM1OTZkNDk0YjYwODkzZTRj
MDE2YmI2Li41YjU5NjJhMjVhMDJhNTA4MGU2MDUzMjM0NzgwYjgyZjRiYWM0ZDQ0IDEwMDY0NAot
LS0gYS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3NraWEvSW1hZ2VTa2lhLmNwcAorKysgYi9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3NraWEvSW1hZ2VTa2lhLmNwcApAQCAtNDcsNiArNDcs
NyBAQAogI2luY2x1ZGUgIlNrUmVjdC5oIgogI2luY2x1ZGUgIlNrU2hhZGVyLmgiCiAjaW5jbHVk
ZSAiU2tpYVV0aWxzLmgiCisjaW5jbHVkZSAiVGV4dHVyZS5oIgogCiAjaW5jbHVkZSAic2tpYS9l
eHQvaW1hZ2Vfb3BlcmF0aW9ucy5oIgogI2luY2x1ZGUgInNraWEvZXh0L3BsYXRmb3JtX2NhbnZh
cy5oIgpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9za2lhL1BsYXRmb3Jt
Q29udGV4dFNraWEuY3BwIGIvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9za2lhL1BsYXRmb3Jt
Q29udGV4dFNraWEuY3BwCmluZGV4IDNiMWQwMTVjZjEyMjM5NTI3NDNlN2FhNzY0OTM3MmFjNDc2
YzhmNTIuLjUyZmUzMjc3YmFmMTRjYmZkYzgwYzI2MWM0YjRhMDg3ZTBkMmZmMWEgMTAwNjQ0Ci0t
LSBhL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc2tpYS9QbGF0Zm9ybUNvbnRleHRTa2lhLmNw
cAorKysgYi9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3NraWEvUGxhdGZvcm1Db250ZXh0U2tp
YS5jcHAKQEAgLTMzLDEyICszMywxMyBAQAogI2luY2x1ZGUgIlBsYXRmb3JtQ29udGV4dFNraWEu
aCIKIAogI2luY2x1ZGUgIkFmZmluZVRyYW5zZm9ybS5oIgotI2luY2x1ZGUgIkNhbnZhc0xheWVy
Q2hyb21pdW0uaCIKKyNpbmNsdWRlICJEcmF3aW5nQnVmZmVyLmgiCiAjaW5jbHVkZSAiR0xFUzJD
YW52YXMuaCIKICNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKICNpbmNsdWRlICJHcmFwaGlj
c0NvbnRleHQzRC5oIgogI2luY2x1ZGUgIkltYWdlQnVmZmVyLmgiCiAjaW5jbHVkZSAiTmF0aXZl
SW1hZ2VTa2lhLmgiCisjaW5jbHVkZSAiU2hhcmVkR3JhcGhpY3NDb250ZXh0M0QuaCIKICNpbmNs
dWRlICJTa2lhVXRpbHMuaCIKICNpbmNsdWRlICJUZXh0dXJlLmgiCiAjaW5jbHVkZSAiVGlsaW5n
RGF0YS5oIgpAQCAtMjE2LDEyICsyMTcsOCBAQCBQbGF0Zm9ybUNvbnRleHRTa2lhOjpQbGF0Zm9y
bUNvbnRleHRTa2lhKHNraWE6OlBsYXRmb3JtQ2FudmFzKiBjYW52YXMpCiAKIFBsYXRmb3JtQ29u
dGV4dFNraWE6On5QbGF0Zm9ybUNvbnRleHRTa2lhKCkKIHsKLSNpZiBVU0UoQUNDRUxFUkFURURf
Q09NUE9TSVRJTkcpCi0gICAgaWYgKG1fZ3B1Q2FudmFzKSB7Ci0gICAgICAgIENhbnZhc0xheWVy
Q2hyb21pdW0qIGxheWVyID0gc3RhdGljX2Nhc3Q8Q2FudmFzTGF5ZXJDaHJvbWl1bSo+KG1fZ3B1
Q2FudmFzLT5jb250ZXh0KCktPnBsYXRmb3JtTGF5ZXIoKSk7Ci0gICAgICAgIGxheWVyLT5zZXRQ
cmVwYXJlVGV4dHVyZUNhbGxiYWNrKDApOwotICAgIH0KLSNlbmRpZgorICAgIGlmIChtX2dwdUNh
bnZhcykKKyAgICAgICAgbV9ncHVDYW52YXMtPmRyYXdpbmdCdWZmZXIoKS0+c2V0V2lsbFB1Ymxp
c2hDYWxsYmFjaygwKTsKIH0KIAogdm9pZCBQbGF0Zm9ybUNvbnRleHRTa2lhOjpzZXRDYW52YXMo
c2tpYTo6UGxhdGZvcm1DYW52YXMqIGNhbnZhcykKQEAgLTY3OCwzMyArNjc1LDMzIEBAIHZvaWQg
UGxhdGZvcm1Db250ZXh0U2tpYTo6YXBwbHlBbnRpQWxpYXNlZENsaXBQYXRocyhXVEY6OlZlY3Rv
cjxTa1BhdGg+JiBwYXRocykKICAgICBtX2NhbnZhcy0+cmVzdG9yZSgpOwogfQogCi0jaWYgVVNF
KEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQotY2xhc3MgUHJlcGFyZVRleHR1cmVDYWxsYmFja0lt
cGwgOiBwdWJsaWMgQ2FudmFzTGF5ZXJDaHJvbWl1bTo6UHJlcGFyZVRleHR1cmVDYWxsYmFjayB7
CitjbGFzcyBXaWxsUHVibGlzaENhbGxiYWNrSW1wbCA6IHB1YmxpYyBEcmF3aW5nQnVmZmVyOjpX
aWxsUHVibGlzaENhbGxiYWNrIHsKIHB1YmxpYzoKLSAgICBzdGF0aWMgUGFzc093blB0cjxQcmVw
YXJlVGV4dHVyZUNhbGxiYWNrSW1wbD4gY3JlYXRlKFBsYXRmb3JtQ29udGV4dFNraWEqIHBjcykK
KyAgICBzdGF0aWMgUGFzc093blB0cjxXaWxsUHVibGlzaENhbGxiYWNrPiBjcmVhdGUoUGxhdGZv
cm1Db250ZXh0U2tpYSogcGNzKQogICAgIHsKLSAgICAgICAgcmV0dXJuIG5ldyBQcmVwYXJlVGV4
dHVyZUNhbGxiYWNrSW1wbChwY3MpOworICAgICAgICByZXR1cm4gYWRvcHRQdHIobmV3IFdpbGxQ
dWJsaXNoQ2FsbGJhY2tJbXBsKHBjcykpOwogICAgIH0KIAotICAgIHZpcnR1YWwgdm9pZCB3aWxs
UHJlcGFyZVRleHR1cmUoKQorICAgIHZpcnR1YWwgdm9pZCB3aWxsUHVibGlzaCgpCiAgICAgewog
ICAgICAgICBtX3Bjcy0+cHJlcGFyZUZvckhhcmR3YXJlRHJhdygpOwogICAgIH0KKwogcHJpdmF0
ZToKLSAgICBleHBsaWNpdCBQcmVwYXJlVGV4dHVyZUNhbGxiYWNrSW1wbChQbGF0Zm9ybUNvbnRl
eHRTa2lhKiBwY3MpIDogbV9wY3MocGNzKSB7fQorICAgIGV4cGxpY2l0IFdpbGxQdWJsaXNoQ2Fs
bGJhY2tJbXBsKFBsYXRmb3JtQ29udGV4dFNraWEqIHBjcykKKyAgICAgICAgOiBtX3BjcyhwY3Mp
CisgICAgeworICAgIH0KKwogICAgIFBsYXRmb3JtQ29udGV4dFNraWEqIG1fcGNzOwogfTsKLSNl
bmRpZgogCi12b2lkIFBsYXRmb3JtQ29udGV4dFNraWE6OnNldEdyYXBoaWNzQ29udGV4dDNEKEdy
YXBoaWNzQ29udGV4dDNEKiBjb250ZXh0LCBjb25zdCBXZWJDb3JlOjpJbnRTaXplJiBzaXplKQor
dm9pZCBQbGF0Zm9ybUNvbnRleHRTa2lhOjpzZXRTaGFyZWRHcmFwaGljc0NvbnRleHQzRChTaGFy
ZWRHcmFwaGljc0NvbnRleHQzRCogY29udGV4dCwgRHJhd2luZ0J1ZmZlciogZHJhd2luZ0J1ZmZl
ciwgY29uc3QgV2ViQ29yZTo6SW50U2l6ZSYgc2l6ZSkKIHsKICAgICBtX3VzZUdQVSA9IHRydWU7
Ci0gICAgbV9ncHVDYW52YXMgPSBuZXcgR0xFUzJDYW52YXMoY29udGV4dCwgc2l6ZSk7CisgICAg
bV9ncHVDYW52YXMgPSBuZXcgR0xFUzJDYW52YXMoY29udGV4dCwgZHJhd2luZ0J1ZmZlciwgc2l6
ZSk7CiAgICAgbV91cGxvYWRUZXh0dXJlLmNsZWFyKCk7Ci0jaWYgVVNFKEFDQ0VMRVJBVEVEX0NP
TVBPU0lUSU5HKQotICAgIENhbnZhc0xheWVyQ2hyb21pdW0qIGxheWVyID0gc3RhdGljX2Nhc3Q8
Q2FudmFzTGF5ZXJDaHJvbWl1bSo+KGNvbnRleHQtPnBsYXRmb3JtTGF5ZXIoKSk7Ci0gICAgbGF5
ZXItPnNldFByZXBhcmVUZXh0dXJlQ2FsbGJhY2soUHJlcGFyZVRleHR1cmVDYWxsYmFja0ltcGw6
OmNyZWF0ZSh0aGlzKSk7Ci0jZW5kaWYKKyAgICBkcmF3aW5nQnVmZmVyLT5zZXRXaWxsUHVibGlz
aENhbGxiYWNrKFdpbGxQdWJsaXNoQ2FsbGJhY2tJbXBsOjpjcmVhdGUodGhpcykpOwogfQogCiB2
b2lkIFBsYXRmb3JtQ29udGV4dFNraWE6OnByZXBhcmVGb3JTb2Z0d2FyZURyYXcoKSBjb25zdApA
QCAtNzg0LDkgKzc4MSw5IEBAIHZvaWQgUGxhdGZvcm1Db250ZXh0U2tpYTo6dXBsb2FkU29mdHdh
cmVUb0hhcmR3YXJlKENvbXBvc2l0ZU9wZXJhdG9yIG9wKSBjb25zdAogewogICAgIGNvbnN0IFNr
Qml0bWFwJiBiaXRtYXAgPSBtX2NhbnZhcy0+Z2V0RGV2aWNlKCktPmFjY2Vzc0JpdG1hcChmYWxz
ZSk7CiAgICAgU2tBdXRvTG9ja1BpeGVscyBsb2NrKGJpdG1hcCk7Ci0gICAgR3JhcGhpY3NDb250
ZXh0M0QqIGNvbnRleHQgPSBtX2dwdUNhbnZhcy0+Y29udGV4dCgpOworICAgIFNoYXJlZEdyYXBo
aWNzQ29udGV4dDNEKiBjb250ZXh0ID0gbV9ncHVDYW52YXMtPmNvbnRleHQoKTsKICAgICBpZiAo
IW1fdXBsb2FkVGV4dHVyZSB8fCBtX3VwbG9hZFRleHR1cmUtPnRpbGVzKCkudG90YWxTaXplWCgp
IDwgYml0bWFwLndpZHRoKCkgfHwgbV91cGxvYWRUZXh0dXJlLT50aWxlcygpLnRvdGFsU2l6ZVko
KSA8IGJpdG1hcC5oZWlnaHQoKSkKLSAgICAgICAgbV91cGxvYWRUZXh0dXJlID0gVGV4dHVyZTo6
Y3JlYXRlKGNvbnRleHQsIFRleHR1cmU6OkJHUkE4LCBiaXRtYXAud2lkdGgoKSwgYml0bWFwLmhl
aWdodCgpKTsKKyAgICAgICAgbV91cGxvYWRUZXh0dXJlID0gY29udGV4dC0+Y3JlYXRlVGV4dHVy
ZShUZXh0dXJlOjpCR1JBOCwgYml0bWFwLndpZHRoKCksIGJpdG1hcC5oZWlnaHQoKSk7CiAgICAg
bV91cGxvYWRUZXh0dXJlLT5sb2FkKGJpdG1hcC5nZXRQaXhlbHMoKSk7CiAgICAgSW50UmVjdCBy
ZWN0KDAsIDAsIGJpdG1hcC53aWR0aCgpLCBiaXRtYXAuaGVpZ2h0KCkpOwogICAgIEFmZmluZVRy
YW5zZm9ybSBpZGVudGl0eTsKQEAgLTc5OSw3ICs3OTYsOCBAQCB2b2lkIFBsYXRmb3JtQ29udGV4
dFNraWE6OnJlYWRiYWNrSGFyZHdhcmVUb1NvZnR3YXJlKCkgY29uc3QKICAgICBTa0F1dG9Mb2Nr
UGl4ZWxzIGxvY2soYml0bWFwKTsKICAgICBpbnQgd2lkdGggPSBiaXRtYXAud2lkdGgoKSwgaGVp
Z2h0ID0gYml0bWFwLmhlaWdodCgpOwogICAgIE93bkFycmF5UHRyPHVpbnQzMl90PiBidWYobmV3
IHVpbnQzMl90W3dpZHRoXSk7Ci0gICAgR3JhcGhpY3NDb250ZXh0M0QqIGNvbnRleHQgPSBtX2dw
dUNhbnZhcy0+Y29udGV4dCgpOworICAgIFNoYXJlZEdyYXBoaWNzQ29udGV4dDNEKiBjb250ZXh0
ID0gbV9ncHVDYW52YXMtPmNvbnRleHQoKTsKKyAgICBtX2dwdUNhbnZhcy0+YmluZEZyYW1lYnVm
ZmVyKCk7CiAgICAgLy8gRmxpcHMgdGhlIGltYWdlIHZlcnRpY2FsbHkuCiAgICAgZm9yIChpbnQg
eSA9IDA7IHkgPCBoZWlnaHQ7ICsreSkgewogICAgICAgICB1aW50MzJfdCogcGl4ZWxzID0gYml0
bWFwLmdldEFkZHIzMigwLCB5KTsKZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3Mvc2tpYS9QbGF0Zm9ybUNvbnRleHRTa2lhLmggYi9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L3NraWEvUGxhdGZvcm1Db250ZXh0U2tpYS5oCmluZGV4IDgyZWRjMTZkMWZjY2Y4YWU5ZTE5NTFj
OTI1MmNjYzllOTU2ZjQxMDAuLjI2MDYyNDAyNGIxMzRmMGQ3ZDIwYzE4NmRmYzgzNjE1MmM1NTVl
NDcgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc2tpYS9QbGF0Zm9ybUNv
bnRleHRTa2lhLmgKKysrIGIvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9za2lhL1BsYXRmb3Jt
Q29udGV4dFNraWEuaApAQCAtMzUsNyArMzUsNiBAQAogI2luY2x1ZGUgIk5vbmNvcHlhYmxlLmgi
CiAKICNpbmNsdWRlICJTa0Rhc2hQYXRoRWZmZWN0LmgiCi0jaW5jbHVkZSAiU2tEZXF1ZS5oIgog
I2luY2x1ZGUgIlNrRHJhd0xvb3Blci5oIgogI2luY2x1ZGUgIlNrUGFpbnQuaCIKICNpbmNsdWRl
ICJTa1BhdGguaCIKQEAgLTQ2LDkgKzQ1LDEwIEBACiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGVu
dW0gQ29tcG9zaXRlT3BlcmF0b3I7CitjbGFzcyBEcmF3aW5nQnVmZmVyOwogY2xhc3MgR0xFUzJD
YW52YXM7Ci1jbGFzcyBUZXh0dXJlOwogY2xhc3MgR3JhcGhpY3NDb250ZXh0M0Q7CitjbGFzcyBU
ZXh0dXJlOwogCiAvLyBUaGlzIGNsYXNzIGhvbGRzIHRoZSBwbGF0Zm9ybS1zcGVjaWZpYyBzdGF0
ZSBmb3IgR3JhcGhpY3NDb250ZXh0LiBXZSBwdXQKIC8vIG1vc3Qgb2Ygb3VyIFNraWEgd3JhcHBl
cnMgb24gdGhpcyBjbGFzcy4gSW4gdGhlb3J5LCBhIGxvdCBvZiB0aGlzIHN0dWZmIGNvdWxkCkBA
IC0xODEsNyArMTgxLDcgQEAgcHVibGljOgogICAgIHZvaWQgY2xlYXJJbWFnZVJlc2FtcGxpbmdI
aW50KCk7CiAgICAgYm9vbCBoYXNJbWFnZVJlc2FtcGxpbmdIaW50KCkgY29uc3Q7CiAgICAgYm9v
bCB1c2VHUFUoKSB7IHJldHVybiBtX3VzZUdQVTsgfQotICAgIHZvaWQgc2V0R3JhcGhpY3NDb250
ZXh0M0QoR3JhcGhpY3NDb250ZXh0M0QqLCBjb25zdCBJbnRTaXplJik7CisgICAgdm9pZCBzZXRT
aGFyZWRHcmFwaGljc0NvbnRleHQzRChTaGFyZWRHcmFwaGljc0NvbnRleHQzRCosIERyYXdpbmdC
dWZmZXIqLCBjb25zdCBJbnRTaXplJik7CiAgICAgR0xFUzJDYW52YXMqIGdwdUNhbnZhcygpIGNv
bnN0IHsgcmV0dXJuIG1fZ3B1Q2FudmFzLmdldCgpOyB9CiAKICAgICAvLyBDYWxsIHRoZXNlIGJl
Zm9yZSBtYWtpbmcgYSBjYWxsIHRoYXQgbWFuaXB1bGF0ZXMgdGhlIHVuZGVybHlpbmcKZGlmZiAt
LWdpdCBhL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyQmFja2luZy5jcHAgYi9XZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJMYXllckJhY2tpbmcuY3BwCmluZGV4IDBiYTkwN2JlOTQwMDExNDRk
ZjM3YTVhZmRiN2Q1MzlhYTg3NDc5NjMuLjdmMDY0NzkxMDkzNzMwODkwOTYyNWRiMWZjMjc5N2Y4
OTIxOTI3OTAgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyQmFja2lu
Zy5jcHAKKysrIGIvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJCYWNraW5nLmNwcApAQCAt
MjcsOCArMjcsMTEgQEAKIAogI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKIAorI2lu
Y2x1ZGUgIlJlbmRlckxheWVyQmFja2luZy5oIgorCiAjaW5jbHVkZSAiQW5pbWF0aW9uQ29udHJv
bGxlci5oIgogI2luY2x1ZGUgIkNhbnZhc1JlbmRlcmluZ0NvbnRleHQuaCIKKyNpbmNsdWRlICJD
YW52YXNSZW5kZXJpbmdDb250ZXh0MkQuaCIKICNpbmNsdWRlICJDU1NQcm9wZXJ0eU5hbWVzLmgi
CiAjaW5jbHVkZSAiQ1NTU3R5bGVTZWxlY3Rvci5oIgogI2luY2x1ZGUgIkZyYW1lVmlldy5oIgpA
QCAtNTEsOCArNTQsNyBAQAogI2luY2x1ZGUgIlJlbmRlclZpZGVvLmgiCiAjaW5jbHVkZSAiUmVu
ZGVyVmlldy5oIgogI2luY2x1ZGUgIlNldHRpbmdzLmgiCi0KLSNpbmNsdWRlICJSZW5kZXJMYXll
ckJhY2tpbmcuaCIKKyNpbmNsdWRlICJXZWJHTFJlbmRlcmluZ0NvbnRleHQuaCIKIAogdXNpbmcg
bmFtZXNwYWNlIHN0ZDsKIApAQCAtMjU3LDEwICsyNTksMTcgQEAgYm9vbCBSZW5kZXJMYXllckJh
Y2tpbmc6OnVwZGF0ZUdyYXBoaWNzTGF5ZXJDb25maWd1cmF0aW9uKCkKICNpZiBFTkFCTEUoM0Rf
Q0FOVkFTKSB8fCBFTkFCTEUoQUNDRUxFUkFURURfMkRfQ0FOVkFTKQogICAgIGVsc2UgaWYgKGlz
QWNjZWxlcmF0ZWRDYW52YXMocmVuZGVyZXIoKSkpIHsKICAgICAgICAgSFRNTENhbnZhc0VsZW1l
bnQqIGNhbnZhcyA9IHN0YXRpY19jYXN0PEhUTUxDYW52YXNFbGVtZW50Kj4ocmVuZGVyZXIoKS0+
bm9kZSgpKTsKLSAgICAgICAgaWYgKENhbnZhc1JlbmRlcmluZ0NvbnRleHQqIGNvbnRleHQgPSBj
YW52YXMtPnJlbmRlcmluZ0NvbnRleHQoKSkKLSAgICAgICAgICAgIGlmIChjb250ZXh0LT5ncmFw
aGljc0NvbnRleHQzRCgpKQotICAgICAgICAgICAgICAgIGlmIChQbGF0Zm9ybUxheWVyKiBwbCA9
IGNvbnRleHQtPmdyYXBoaWNzQ29udGV4dDNEKCktPnBsYXRmb3JtTGF5ZXIoKSkKLSAgICAgICAg
ICAgICAgICAgICAgbV9ncmFwaGljc0xheWVyLT5zZXRDb250ZW50c1RvQ2FudmFzKHBsKTsKKyAg
ICAgICAgaWYgKENhbnZhc1JlbmRlcmluZ0NvbnRleHQqIGNvbnRleHQgPSBjYW52YXMtPnJlbmRl
cmluZ0NvbnRleHQoKSkgeworI2lmIEVOQUJMRShBQ0NFTEVSQVRFRF8yRF9DQU5WQVMpCisgICAg
ICAgICAgICBpZiAoY29udGV4dC0+aXMyZCgpKQorICAgICAgICAgICAgICAgIG1fZ3JhcGhpY3NM
YXllci0+c2V0Q29udGVudHNUb0NhbnZhczJEKHN0YXRpY19jYXN0PENhbnZhc1JlbmRlcmluZ0Nv
bnRleHQyRCo+KGNvbnRleHQpLT5kcmF3aW5nQnVmZmVyKCkpOworI2VuZGlmCisjaWYgRU5BQkxF
KDNEX0NBTlZBUykKKyAgICAgICAgICAgIGlmIChjb250ZXh0LT5pczNkKCkpCisgICAgICAgICAg
ICAgICAgbV9ncmFwaGljc0xheWVyLT5zZXRDb250ZW50c1RvV2ViR0woc3RhdGljX2Nhc3Q8V2Vi
R0xSZW5kZXJpbmdDb250ZXh0Kj4oY29udGV4dCktPmdyYXBoaWNzQ29udGV4dDNEKCktPnBsYXRm
b3JtTGF5ZXIoKSk7CisjZW5kaWYKKyAgICAgICAgfQorICAgICAgICBsYXllckNvbmZpZ0NoYW5n
ZWQgPSB0cnVlOwogICAgIH0KICNlbmRpZgogCmRpZmYgLS1naXQgYS9XZWJLaXQvY2hyb21pdW0v
Q2hhbmdlTG9nIGIvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZwppbmRleCAwMWEyYmJmN2I1YTgw
ODg3YTg4ZmU5MWNiOTI4OGQyMmM4ZTU3ODQxLi4wYmRmMDBmMTQ5NGY1NzViN2JlNGNhNDU1OGFk
ODEyOWUxMmVmYzBhIDEwMDY0NAotLS0gYS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCisrKyBi
L1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKQEAgLTEsMyArMSw0MSBAQAorMjAxMC0wOS0wMiAg
SmFtZXMgUm9iaW5zb24gIDxqYW1lc3JAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFJldmlld2Vk
IGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIE5lZWQgYSBzaG9ydCBkZXNjcmlwdGlvbiBh
bmQgYnVnIFVSTCAoT09QUyEpCisKKyAgICAgICAgKiBzcmMvQ2hyb21lQ2xpZW50SW1wbC5jcHA6
CisgICAgICAgIChXZWJLaXQ6OkNocm9tZUNsaWVudEltcGw6OmdldFNoYXJlZENvbnRleHQzRCk6
CisgICAgICAgICogc3JjL0Nocm9tZUNsaWVudEltcGwuaDoKKyAgICAgICAgKiBzcmMvR3JhcGhp
Y3NDb250ZXh0M0QuY3BwOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0RJbnRl
cm5hbDo6aW5pdGlhbGl6ZSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRElu
dGVybmFsOjpwbGF0Zm9ybUxheWVyKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4
dDNEOjpwbGF0Zm9ybUxheWVyKToKKyAgICAgICAgKiBzcmMvV2ViVmlld0ltcGwuY3BwOgorICAg
ICAgICAoV2ViS2l0OjpXZWJWaWV3SW1wbDo6Z2V0U2hhcmVkQ29udGV4dDNEKToKKyAgICAgICAg
KiBzcmMvV2ViVmlld0ltcGwuaDoKKworMjAxMC0wOS0wMSAgSmFtZXMgUm9iaW5zb24gIDxqYW1l
c3JAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgor
CisgICAgICAgIE11bHRpcGxlIGFjY2VsZXJhdGVkIDJEIGNhbnZhc2VzIHNob3VsZCBiZSBhYmxl
IHRvIHVzZSB0aGUgc2FtZSBHcmFwaGljc0NvbnRleHQzRAorICAgICAgICBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NDQ5MjYKKworICAgICAgICBBZGRzIGEgU2hhcmVk
Q29udGV4dDNEIHRvIFdlYlZpZXdJbXBsLiBUaGUgU2hhcmVkQ29udGV4dDNEIGhhcyB0byBsaXZl
IG9uIFdlYlZpZXdJbXBsIHRvIGJlCisgICAgICAgIHRpZWQgdG8gdGhlIGxpZmV0aW1lIG9mIHRo
ZSBjb21wb3NpdG9yIGNvbnRleHQuCisKKyAgICAgICAgKiBzcmMvQ2hyb21lQ2xpZW50SW1wbC5j
cHA6CisgICAgICAgIChXZWJLaXQ6OkNocm9tZUNsaWVudEltcGw6OmdldFNoYXJlZENvbnRleHQz
RCk6CisgICAgICAgICogc3JjL0Nocm9tZUNsaWVudEltcGwuaDoKKyAgICAgICAgKiBzcmMvR3Jh
cGhpY3NDb250ZXh0M0QuY3BwOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0RJ
bnRlcm5hbDo6aW5pdGlhbGl6ZSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQz
REludGVybmFsOjpwbGF0Zm9ybUxheWVyKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29u
dGV4dDNEOjpwbGF0Zm9ybUxheWVyKToKKyAgICAgICAgKiBzcmMvV2ViVmlld0ltcGwuY3BwOgor
ICAgICAgICAoV2ViS2l0OjpXZWJWaWV3SW1wbDo6Z2V0U2hhcmVkQ29udGV4dDNEKToKKyAgICAg
ICAgKiBzcmMvV2ViVmlld0ltcGwuaDoKKwogMjAxMC0wOC0zMCAgS2ludWtvIFlhc3VkYSAgPGtp
bnVrb0BjaHJvbWl1bS5vc3JjPgogCiAgICAgICAgIFJldmlld2VkIGJ5IERhcmluIEZpc2hlci4K
ZGlmZiAtLWdpdCBhL1dlYktpdC9jaHJvbWl1bS9zcmMvQ2hyb21lQ2xpZW50SW1wbC5jcHAgYi9X
ZWJLaXQvY2hyb21pdW0vc3JjL0Nocm9tZUNsaWVudEltcGwuY3BwCmluZGV4IGU2ZjE0MDA3MTgw
ZDhkM2JmNjEyOGIxMzBkYzI4YWJhYWVjMWY5MGEuLjllZGVlMDI4ZjhhMDcwMzUzM2I1MWFiNWUz
MDk0ZWFlYjE4ZDBiNWYgMTAwNjQ0Ci0tLSBhL1dlYktpdC9jaHJvbWl1bS9zcmMvQ2hyb21lQ2xp
ZW50SW1wbC5jcHAKKysrIGIvV2ViS2l0L2Nocm9taXVtL3NyYy9DaHJvbWVDbGllbnRJbXBsLmNw
cApAQCAtNTksNiArNTksNyBAQAogI2luY2x1ZGUgIlNlYXJjaFBvcHVwTWVudUNocm9taXVtLmgi
CiAjaW5jbHVkZSAiU2NyaXB0Q29udHJvbGxlci5oIgogI2luY2x1ZGUgIlNlY3VyaXR5T3JpZ2lu
LmgiCisjaW5jbHVkZSAiU2hhcmVkR3JhcGhpY3NDb250ZXh0M0QuaCIKICNpbmNsdWRlICJXZWJH
ZW9sb2NhdGlvblNlcnZpY2UuaCIKICNpZiBVU0UoVjgpCiAjaW5jbHVkZSAiVjhQcm94eS5oIgpA
QCAtNzUxLDYgKzc1MiwxMSBAQCB2b2lkIENocm9tZUNsaWVudEltcGw6OnNjaGVkdWxlQ29tcG9z
aXRpbmdMYXllclN5bmMoKQogfQogI2VuZGlmCiAKK1dlYkNvcmU6OlNoYXJlZEdyYXBoaWNzQ29u
dGV4dDNEKiBDaHJvbWVDbGllbnRJbXBsOjpnZXRTaGFyZWRHcmFwaGljc0NvbnRleHQzRCgpCit7
CisgICAgcmV0dXJuIG1fd2ViVmlldy0+Z2V0U2hhcmVkR3JhcGhpY3NDb250ZXh0M0QoKTsKK30K
KwogYm9vbCBDaHJvbWVDbGllbnRJbXBsOjpzdXBwb3J0c0Z1bGxzY3JlZW5Gb3JOb2RlKGNvbnN0
IFdlYkNvcmU6Ok5vZGUqIG5vZGUpCiB7CiAgICAgaWYgKG1fd2ViVmlldy0+Y2xpZW50KCkgJiYg
bm9kZS0+aGFzVGFnTmFtZShXZWJDb3JlOjpIVE1MTmFtZXM6OnZpZGVvVGFnKSkKZGlmZiAtLWdp
dCBhL1dlYktpdC9jaHJvbWl1bS9zcmMvQ2hyb21lQ2xpZW50SW1wbC5oIGIvV2ViS2l0L2Nocm9t
aXVtL3NyYy9DaHJvbWVDbGllbnRJbXBsLmgKaW5kZXggYmZmOWY5MDQ3ZmE3YzdmM2FiZDcwNGQ5
NDc4NWQ5YzFmYWNmNzc0MC4uZDdiNWM4NmM5ZmUzZmVjNDVmNzkzYWUxMmI5ZDUyNDFiYzlkOWMz
ZiAxMDA2NDQKLS0tIGEvV2ViS2l0L2Nocm9taXVtL3NyYy9DaHJvbWVDbGllbnRJbXBsLmgKKysr
IGIvV2ViS2l0L2Nocm9taXVtL3NyYy9DaHJvbWVDbGllbnRJbXBsLmgKQEAgLTE1Miw2ICsxNTIs
OCBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCB2b2lkIHNjaGVkdWxlQ29tcG9zaXRpbmdMYXllclN5
bmMoKTsKICNlbmRpZgogCisgICAgdmlydHVhbCBXZWJDb3JlOjpTaGFyZWRHcmFwaGljc0NvbnRl
eHQzRCogZ2V0U2hhcmVkR3JhcGhpY3NDb250ZXh0M0QoKTsKKwogICAgIHZpcnR1YWwgYm9vbCBz
dXBwb3J0c0Z1bGxzY3JlZW5Gb3JOb2RlKGNvbnN0IFdlYkNvcmU6Ok5vZGUqKTsKICAgICB2aXJ0
dWFsIHZvaWQgZW50ZXJGdWxsc2NyZWVuRm9yTm9kZShXZWJDb3JlOjpOb2RlKik7CiAgICAgdmly
dHVhbCB2b2lkIGV4aXRGdWxsc2NyZWVuRm9yTm9kZShXZWJDb3JlOjpOb2RlKik7CmRpZmYgLS1n
aXQgYS9XZWJLaXQvY2hyb21pdW0vc3JjL0dyYXBoaWNzQ29udGV4dDNELmNwcCBiL1dlYktpdC9j
aHJvbWl1bS9zcmMvR3JhcGhpY3NDb250ZXh0M0QuY3BwCmluZGV4IDZiYzVmZmU0MzFlODRlNGU3
YmUyMGU5NDA0MTRlZGVhZjgzM2E5YzcuLjZhOWIzZTRkZTc0ZDIzMmMzMTk4MTEwOGQwYTU3YmIz
NzY3YmZmMDggMTAwNjQ0Ci0tLSBhL1dlYktpdC9jaHJvbWl1bS9zcmMvR3JhcGhpY3NDb250ZXh0
M0QuY3BwCisrKyBiL1dlYktpdC9jaHJvbWl1bS9zcmMvR3JhcGhpY3NDb250ZXh0M0QuY3BwCkBA
IC0zNSw3ICszNSw3IEBACiAjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0M0QuaCIKIAogI2luY2x1
ZGUgIkNhY2hlZEltYWdlLmgiCi0jaW5jbHVkZSAiQ2FudmFzTGF5ZXJDaHJvbWl1bS5oIgorI2lu
Y2x1ZGUgIldlYkdMTGF5ZXJDaHJvbWl1bS5oIgogI2luY2x1ZGUgIkNhbnZhc1JlbmRlcmluZ0Nv
bnRleHQuaCIKICNpbmNsdWRlICJDaHJvbWUuaCIKICNpbmNsdWRlICJDaHJvbWVDbGllbnRJbXBs
LmgiCkBAIC0xMDMsNyArMTAzLDcgQEAgcHVibGljOgogICAgIHZvaWQgcHJlcGFyZVRleHR1cmUo
KTsKIAogI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKLSAgICBDYW52YXNMYXllckNo
cm9taXVtKiBwbGF0Zm9ybUxheWVyKCkgY29uc3Q7CisgICAgV2ViR0xMYXllckNocm9taXVtKiBw
bGF0Zm9ybUxheWVyKCkgY29uc3Q7CiAjZW5kaWYKICAgICBib29sIGlzR0xFUzJDb21wbGlhbnQo
KSBjb25zdDsKICAgICBib29sIGlzR0xFUzJOUE9UU3RyaWN0KCkgY29uc3Q7CkBAIC0yOTgsNyAr
Mjk4LDcgQEAgcHJpdmF0ZToKICAgICBPd25QdHI8V2ViS2l0OjpXZWJHcmFwaGljc0NvbnRleHQz
RD4gbV9pbXBsOwogICAgIFdlYktpdDo6V2ViVmlld0ltcGwqIG1fd2ViVmlld0ltcGw7CiAjaWYg
VVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQotICAgIFJlZlB0cjxDYW52YXNMYXllckNocm9t
aXVtPiBtX2NvbXBvc2l0aW5nTGF5ZXI7CisgICAgUmVmUHRyPFdlYkdMTGF5ZXJDaHJvbWl1bT4g
bV9jb21wb3NpdGluZ0xheWVyOwogI2VuZGlmCiAjaWYgUExBVEZPUk0oU0tJQSkKICAgICAvLyBJ
ZiB0aGUgd2lkdGggYW5kIGhlaWdodCBvZiB0aGUgQ2FudmFzJ3MgYmFja2luZyBzdG9yZSBkb24n
dApAQCAtMzYwLDcgKzM2MCw3IEBAIGJvb2wgR3JhcGhpY3NDb250ZXh0M0RJbnRlcm5hbDo6aW5p
dGlhbGl6ZShHcmFwaGljc0NvbnRleHQzRDo6QXR0cmlidXRlcyBhdHRycywKICAgICBtX2ltcGwu
c2V0KHdlYkNvbnRleHQpOwogCiAjaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQotICAg
IG1fY29tcG9zaXRpbmdMYXllciA9IENhbnZhc0xheWVyQ2hyb21pdW06OmNyZWF0ZSgwKTsKKyAg
ICBtX2NvbXBvc2l0aW5nTGF5ZXIgPSBXZWJHTExheWVyQ2hyb21pdW06OmNyZWF0ZSgwKTsKICNl
bmRpZgogICAgIHJldHVybiB0cnVlOwogfQpAQCAtMzgxLDcgKzM4MSw3IEBAIHZvaWQgR3JhcGhp
Y3NDb250ZXh0M0RJbnRlcm5hbDo6cHJlcGFyZVRleHR1cmUoKQogfQogCiAjaWYgVVNFKEFDQ0VM
RVJBVEVEX0NPTVBPU0lUSU5HKQotQ2FudmFzTGF5ZXJDaHJvbWl1bSogR3JhcGhpY3NDb250ZXh0
M0RJbnRlcm5hbDo6cGxhdGZvcm1MYXllcigpIGNvbnN0CitXZWJHTExheWVyQ2hyb21pdW0qIEdy
YXBoaWNzQ29udGV4dDNESW50ZXJuYWw6OnBsYXRmb3JtTGF5ZXIoKSBjb25zdAogewogICAgIHJl
dHVybiBtX2NvbXBvc2l0aW5nTGF5ZXIuZ2V0KCk7CiB9CkBAIC0xMDM5LDcgKzEwMzksNyBAQCB2
b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpwcmVwYXJlVGV4dHVyZSgpCiAjaWYgVVNFKEFDQ0VMRVJB
VEVEX0NPTVBPU0lUSU5HKQogUGxhdGZvcm1MYXllciogR3JhcGhpY3NDb250ZXh0M0Q6OnBsYXRm
b3JtTGF5ZXIoKSBjb25zdAogewotICAgIENhbnZhc0xheWVyQ2hyb21pdW0qIGNhbnZhc0xheWVy
ID0gbV9pbnRlcm5hbC0+cGxhdGZvcm1MYXllcigpOworICAgIFdlYkdMTGF5ZXJDaHJvbWl1bSog
Y2FudmFzTGF5ZXIgPSBtX2ludGVybmFsLT5wbGF0Zm9ybUxheWVyKCk7CiAgICAgY2FudmFzTGF5
ZXItPnNldENvbnRleHQodGhpcyk7CiAgICAgcmV0dXJuIGNhbnZhc0xheWVyOwogfQpkaWZmIC0t
Z2l0IGEvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJWaWV3SW1wbC5jcHAgYi9XZWJLaXQvY2hyb21p
dW0vc3JjL1dlYlZpZXdJbXBsLmNwcAppbmRleCA1MDY1ZjVlYjliNjQwODNmYzNiMWUxNzRmNDI4
MTVjNTczN2I0ODM5Li41NTMzNWNjYWYzYjIzY2Y1ODQ3YjdkNzgwYzAxODI4ZGE2MWEyNjA2IDEw
MDY0NAotLS0gYS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYlZpZXdJbXBsLmNwcAorKysgYi9XZWJL
aXQvY2hyb21pdW0vc3JjL1dlYlZpZXdJbXBsLmNwcApAQCAtNTgsNiArNTgsNyBAQAogI2luY2x1
ZGUgIkdMRVMyQ29udGV4dC5oIgogI2luY2x1ZGUgIkdMRVMyQ29udGV4dEludGVybmFsLmgiCiAj
aW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCisjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0M0Qu
aCIKICNpbmNsdWRlICJIVE1MSW5wdXRFbGVtZW50LmgiCiAjaW5jbHVkZSAiSFRNTE1lZGlhRWxl
bWVudC5oIgogI2luY2x1ZGUgIkhpdFRlc3RSZXN1bHQuaCIKQEAgLTg2LDYgKzg3LDcgQEAKICNp
bmNsdWRlICJTZWN1cml0eU9yaWdpbi5oIgogI2luY2x1ZGUgIlNlbGVjdGlvbkNvbnRyb2xsZXIu
aCIKICNpbmNsdWRlICJTZXR0aW5ncy5oIgorI2luY2x1ZGUgIlNoYXJlZEdyYXBoaWNzQ29udGV4
dDNELmgiCiAjaW5jbHVkZSAiVGltZXIuaCIKICNpbmNsdWRlICJUeXBpbmdDb21tYW5kLmgiCiAj
aW5jbHVkZSAiVXNlckdlc3R1cmVJbmRpY2F0b3IuaCIKQEAgLTIyMTEsMTQgKzIyMTMsMTUgQEAg
UGFzc093blB0cjxHTEVTMkNvbnRleHQ+IFdlYlZpZXdJbXBsOjpnZXRPbnNjcmVlbkdMRVMyQ29u
dGV4dCgpCiAgICAgcmV0dXJuIEdMRVMyQ29udGV4dDo6Y3JlYXRlKEdMRVMyQ29udGV4dEludGVy
bmFsOjpjcmVhdGUoZ2xlczJDb250ZXh0KCksIGZhbHNlKSk7CiB9CiAKLVBhc3NPd25QdHI8R0xF
UzJDb250ZXh0PiBXZWJWaWV3SW1wbDo6Z2V0T2Zmc2NyZWVuR0xFUzJDb250ZXh0KCkKK1NoYXJl
ZEdyYXBoaWNzQ29udGV4dDNEKiBXZWJWaWV3SW1wbDo6Z2V0U2hhcmVkR3JhcGhpY3NDb250ZXh0
M0QoKQogewotICAgIFdlYkdMRVMyQ29udGV4dCogY29udGV4dCA9IHdlYktpdENsaWVudCgpLT5j
cmVhdGVHTEVTMkNvbnRleHQoKTsKLSAgICBpZiAoIWNvbnRleHQpCi0gICAgICAgIHJldHVybiAw
OwotICAgIGlmICghY29udGV4dC0+aW5pdGlhbGl6ZSgwLCBnbGVzMkNvbnRleHQoKSkpCi0gICAg
ICAgIHJldHVybiAwOwotICAgIHJldHVybiBHTEVTMkNvbnRleHQ6OmNyZWF0ZShHTEVTMkNvbnRl
eHRJbnRlcm5hbDo6Y3JlYXRlKGNvbnRleHQsIHRydWUpKTsKKyAgICBpZiAoIW1fc2hhcmVkQ29u
dGV4dDNEKSB7CisgICAgICAgIEdyYXBoaWNzQ29udGV4dDNEOjpBdHRyaWJ1dGVzIGF0dHI7Cisg
ICAgICAgIE93blB0cjxHcmFwaGljc0NvbnRleHQzRD4gY29udGV4dCA9IEdyYXBoaWNzQ29udGV4
dDNEOjpjcmVhdGUoYXR0ciwgbV9wYWdlLT5jaHJvbWUoKSk7CisgICAgICAgIG1fc2hhcmVkQ29u
dGV4dDNEID0gU2hhcmVkR3JhcGhpY3NDb250ZXh0M0Q6OmNyZWF0ZShjb250ZXh0LnJlbGVhc2Uo
KSk7CisgICAgfQorCisgICAgcmV0dXJuIG1fc2hhcmVkQ29udGV4dDNELmdldCgpOwogfQogCiAv
LyBSZXR1cm5zIHRoZSBHTEVTMiBjb250ZXh0IGFzc29jaWF0ZWQgd2l0aCB0aGlzIFZpZXcuIElm
IG9uZSBkb2Vzbid0IGV4aXN0CmRpZmYgLS1naXQgYS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYlZp
ZXdJbXBsLmggYi9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYlZpZXdJbXBsLmgKaW5kZXggYzI5NjEy
MTIzZjQ1MTRjOTRkZDdkOTcwYzczMTE0YTRiZWVlYzM1NS4uNmNlMjc1N2E4MmU5YmQ0YzA4YTQ0
YmVlMjIzNTRkMjM2M2NiODMxOCAxMDA2NDQKLS0tIGEvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJW
aWV3SW1wbC5oCisrKyBiL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViVmlld0ltcGwuaApAQCAtMzI5
LDEwICszMjksMTAgQEAgcHVibGljOgogICAgIC8vIE9mZnNjcmVlbiBjb250ZXh0cyByZW5kZXIg
b2Zmc2NyZWVuIGJ1dCBjYW4gc2hhcmUgcmVzb3VyY2VzIHdpdGggdGhlCiAgICAgLy8gb25zY3Jl
ZW4gY29udGV4dCBhbmQgdGh1cyBjYW4gYmUgY29tcG9zaXRlZC4KICAgICBQYXNzT3duUHRyPFdl
YkNvcmU6OkdMRVMyQ29udGV4dD4gZ2V0T25zY3JlZW5HTEVTMkNvbnRleHQoKTsKLSAgICBQYXNz
T3duUHRyPFdlYkNvcmU6OkdMRVMyQ29udGV4dD4gZ2V0T2Zmc2NyZWVuR0xFUzJDb250ZXh0KCk7
CiAKICAgICAvLyBSZXR1cm5zIGFuIG9uc2NyZWVuIGNvbnRleHQKICAgICB2aXJ0dWFsIFdlYkdM
RVMyQ29udGV4dCogZ2xlczJDb250ZXh0KCk7CisgICAgdmlydHVhbCBXZWJDb3JlOjpTaGFyZWRH
cmFwaGljc0NvbnRleHQzRCogZ2V0U2hhcmVkR3JhcGhpY3NDb250ZXh0M0QoKTsKIAogICAgIFdl
YkNvcmU6OlBvcHVwQ29udGFpbmVyKiBzZWxlY3RQb3B1cCgpIGNvbnN0IHsgcmV0dXJuIG1fc2Vs
ZWN0UG9wdXAuZ2V0KCk7IH0KIApAQCAtNTIxLDYgKzUyMSw4IEBAIHByaXZhdGU6CiAKICAgICBP
d25QdHI8V2ViR0xFUzJDb250ZXh0PiBtX2dsZXMyQ29udGV4dDsKIAorICAgIFJlZlB0cjxXZWJD
b3JlOjpTaGFyZWRHcmFwaGljc0NvbnRleHQzRD4gbV9zaGFyZWRDb250ZXh0M0Q7CisKICAgICBP
d25QdHI8RGV2aWNlT3JpZW50YXRpb25DbGllbnRQcm94eT4gbV9kZXZpY2VPcmllbnRhdGlvbkNs
aWVudFByb3h5OwogfTsKIAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>66459</attachid>
            <date>2010-09-02 19:33:28 -0700</date>
            <delta_ts>2010-09-02 19:46:53 -0700</delta_ts>
            <desc>other PlatformLayer ownership model</desc>
            <filename>bug-44926-20100902193327.patch</filename>
            <type>text/plain</type>
            <size>102618</size>
            <attacher name="James Robinson">jamesr</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ2hhbmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXgg
ZGRjZDUyZTk2NzZiYTY2YmIwM2M0MTBhZmZmNTllMjI2MWY3ZDgzMC4uZTRhNTE0M2UxYWE1MmUz
NjU1ZmU0ZjEzMjBhMjZjNDNiY2Q4ODdiOSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9DaGFuZ2VMb2cK
KysrIGIvV2ViQ29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxNTIgQEAKKzIwMTAtMDktMDIgIEph
bWVzIFJvYmluc29uICA8amFtZXNyQGNocm9taXVtLm9yZz4KKworICAgICAgICBSZXZpZXdlZCBi
eSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBNdWx0aXBsZSBhY2NlbGVyYXRlZCAyRCBjYW52
YXNlcyBzaG91bGQgYmUgYWJsZSB0byB1c2UgdGhlIHNhbWUgR3JhcGhpY3NDb250ZXh0M0QKKyAg
ICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTQ0OTI2CisKKyAg
ICAgICAgVGhpcyBhbGxvd3MgbWFueSBhY2NlbGVyYXRlZCAyZCBjYW52YXNlcyB0byByZW5kZXIg
dXNpbmcgYSBzaW5nbGUgdW5kZXJseWluZyBHcmFwaGljc0NvbnRleHQzRC4KKyAgICAgICAgSXQg
aW50cm9kdWNlcyBhIG5ldyBjbGFzcyBTaGFyZWRHcmFwaGljc0NvbnRleHQzRCB0aGF0IG1hbmFn
ZXMgc2V2ZXJhbCBjYWxsZXJzLiAgVGhpcyBjbGFzcyBjb3VsZAorICAgICAgICBhbHNvIGNhY2hl
IHRoZSBjdXJyZW50IHN0YXRlIHRvIGF2b2lkIGlzc3VpbmcgcmVkdW5kYW50IGNhbGxzLCBhbHRo
b3VnaCBpbiB0aGlzIGZpcnN0IGN1dCBpdCBkb2Vzbid0LgorICAgICAgICBUaGUgU2hhcmVkR3Jh
cGhpY3NDb250ZXh0M0QgaXMgcHJvdmlkZWQgdGhyb3VnaCB0aGUgQ2hyb21lQ2xpZW50IHNvIHRo
YXQgaXRzIGxpZmV0aW1lIGNhbiBiZSB0aWVkIHRvIHRoYXQKKyAgICAgICAgb2YgdGhlIHBsYXRm
b3JtLXNwZWNpZmljIGNvbXBvc2l0b3IgaW5mcmFzdHJ1Y3R1cmUuCisKKyAgICAgICAgQWNjZWxl
cmF0ZWQgMmQgY2FudmFzZXMgbWFpbnRhaW4gYSByZWZlcmVuY2UgdG8gYSBTaGFyZWRHcmFwaGlj
c0NvbnRleHQzRCBhbmQgaGF2ZSBvd25lcnNoaXAgb2YgYSBDYW52YXNGcmFtZWJ1ZmZlciwKKyAg
ICAgICAgd2hpY2ggcmVwcmVzZW50cyB0aGUgY2FudmFzJ3MgcmVuZGVyaW5nIHRhcmdldC4gIFRo
ZSBjb21wb3NpdGluZyBsYXllciBmb3IgYW4gYWNjZWxlcmF0ZWQgMmQgY2FudmFzIGlzCisgICAg
ICAgIGF3YXJlIG9ubHkgb2YgdGhlIGNhbnZhcydzIENhbnZhc0ZyYW1lYnVmZmVyLiAgVGhpcyBt
ZWFucyB0aGF0IFdlYkdMIGFuZCAyZCBjYW52YXNlcyBhcmUgbm8gbG9uZ2VyIHRyZWF0ZWQKKyAg
ICAgICAgYXMgdGhlIHNhbWUgdGltZSBvZiBsYXllciBieSB0aGUgY29tcG9zaXRvci4KKworICAg
ICAgICBDb3ZlcmVkIGJ5IGV4aXN0aW5nIGNhbnZhcyB0ZXN0cy4KKworICAgICAgICAqIFdlYkNv
cmUuZ3lwaToKKyAgICAgICAgKiBodG1sL2NhbnZhcy9DYW52YXNSZW5kZXJpbmdDb250ZXh0LmNw
cDoKKyAgICAgICAgKiBodG1sL2NhbnZhcy9DYW52YXNSZW5kZXJpbmdDb250ZXh0Lmg6CisgICAg
ICAgIChXZWJDb3JlOjpDYW52YXNSZW5kZXJpbmdDb250ZXh0OjpwYWludHNJbnRvQ2FudmFzQnVm
ZmVyKToKKyAgICAgICAgKFdlYkNvcmU6OkNhbnZhc1JlbmRlcmluZ0NvbnRleHQ6OnBsYXRmb3Jt
TGF5ZXIpOgorICAgICAgICAqIGh0bWwvY2FudmFzL0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRC5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ6OkNhbnZhc1Jl
bmRlcmluZ0NvbnRleHQyRCk6CisgICAgICAgIChXZWJDb3JlOjpDYW52YXNSZW5kZXJpbmdDb250
ZXh0MkQ6OnBhaW50c0ludG9DYW52YXNCdWZmZXIpOgorICAgICAgICAoV2ViQ29yZTo6Q2FudmFz
UmVuZGVyaW5nQ29udGV4dDJEOjpyZXNldCk6CisgICAgICAgIChXZWJDb3JlOjpDYW52YXNSZW5k
ZXJpbmdDb250ZXh0MkQ6OmRpZERyYXcpOgorICAgICAgICAoV2ViQ29yZTo6Q2FudmFzUmVuZGVy
aW5nQ29udGV4dDJEOjpwbGF0Zm9ybUxheWVyKToKKyAgICAgICAgKiBodG1sL2NhbnZhcy9DYW52
YXNSZW5kZXJpbmdDb250ZXh0MkQuaDoKKyAgICAgICAgKiBodG1sL2NhbnZhcy9XZWJHTFJlbmRl
cmluZ0NvbnRleHQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0
OjpwYWludHNJbnRvQ2FudmFzQnVmZmVyKToKKyAgICAgICAgKiBodG1sL2NhbnZhcy9XZWJHTFJl
bmRlcmluZ0NvbnRleHQuaDoKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4
dDo6Z3JhcGhpY3NDb250ZXh0M0QpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdD
b250ZXh0OjpwbGF0Zm9ybUxheWVyKToKKyAgICAgICAgKiBsb2FkZXIvRW1wdHlDbGllbnRzLmg6
CisgICAgICAgIChXZWJDb3JlOjpFbXB0eUNocm9tZUNsaWVudDo6YXR0YWNoUm9vdEdyYXBoaWNz
TGF5ZXIpOgorICAgICAgICAoV2ViQ29yZTo6RW1wdHlDaHJvbWVDbGllbnQ6OnNldE5lZWRzT25l
U2hvdERyYXdpbmdTeW5jaHJvbml6YXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6RW1wdHlDaHJv
bWVDbGllbnQ6OnNjaGVkdWxlQ29tcG9zaXRpbmdMYXllclN5bmMpOgorICAgICAgICAqIHBhZ2Uv
Q2hyb21lQ2xpZW50Lmg6CisgICAgICAgIChXZWJDb3JlOjpDaHJvbWVDbGllbnQ6OmdldFNoYXJl
ZEdyYXBoaWNzQ29udGV4dDNEKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGlj
c0NvbnRleHQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpzZXRTaGFy
ZWRHcmFwaGljc0NvbnRleHQzRCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6
OnN5bmNTb2Z0d2FyZUNhbnZhcyk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhp
Y3NDb250ZXh0Lmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vQ2FudmFz
MkRMYXllckNocm9taXVtLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpDYW52YXMyRExh
eWVyQ2hyb21pdW06OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpDYW52YXMyRExheWVyQ2hy
b21pdW06OkNhbnZhczJETGF5ZXJDaHJvbWl1bSk6CisgICAgICAgIChXZWJDb3JlOjpDYW52YXMy
RExheWVyQ2hyb21pdW06On5DYW52YXMyRExheWVyQ2hyb21pdW0pOgorICAgICAgICAoV2ViQ29y
ZTo6Q2FudmFzMkRMYXllckNocm9taXVtOjp1cGRhdGVDb250ZW50cyk6CisgICAgICAgIChXZWJD
b3JlOjpDYW52YXMyRExheWVyQ2hyb21pdW06OnNldFRleHR1cmVDaGFuZ2VkKToKKyAgICAgICAg
KFdlYkNvcmU6OkNhbnZhczJETGF5ZXJDaHJvbWl1bTo6dGV4dHVyZUlkKToKKyAgICAgICAgKiBw
bGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9DYW52YXMyRExheWVyQ2hyb21pdW0uaDogQWRkZWQu
CisgICAgICAgIChXZWJDb3JlOjpDYW52YXMyRExheWVyQ2hyb21pdW06OmRyYXdzQ29udGVudCk6
CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vQ2FudmFzTGF5ZXJDaHJvbWl1
bS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDYW52YXNMYXllckNocm9taXVtOjpDYW52YXNMYXll
ckNocm9taXVtKToKKyAgICAgICAgKFdlYkNvcmU6OkNhbnZhc0xheWVyQ2hyb21pdW06On5DYW52
YXNMYXllckNocm9taXVtKToKKyAgICAgICAgKFdlYkNvcmU6OkNhbnZhc0xheWVyQ2hyb21pdW06
OmRyYXcpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0NhbnZhc0xheWVy
Q2hyb21pdW0uaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9EcmF3aW5n
QnVmZmVyQ2hyb21pdW0uY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OmdlbmVyYXRlQ29s
b3JUZXh0dXJlKToKKyAgICAgICAgKFdlYkNvcmU6OkRyYXdpbmdCdWZmZXI6OkRyYXdpbmdCdWZm
ZXIpOgorICAgICAgICAoV2ViQ29yZTo6RHJhd2luZ0J1ZmZlcjo6fkRyYXdpbmdCdWZmZXIpOgor
ICAgICAgICAoV2ViQ29yZTo6RHJhd2luZ0J1ZmZlcjo6cHVibGlzaFRvUGxhdGZvcm1MYXllcik6
CisgICAgICAgIChXZWJDb3JlOjpEcmF3aW5nQnVmZmVyOjpyZXNldCk6CisgICAgICAgIChXZWJD
b3JlOjpEcmF3aW5nQnVmZmVyOjpwbGF0Zm9ybUxheWVyKToKKyAgICAgICAgKiBwbGF0Zm9ybS9n
cmFwaGljcy9jaHJvbWl1bS9HTEVTMkNhbnZhcy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpHTEVT
MkNhbnZhczo6R0xFUzJDYW52YXMpOgorICAgICAgICAoV2ViQ29yZTo6R0xFUzJDYW52YXM6On5H
TEVTMkNhbnZhcyk6CisgICAgICAgIChXZWJDb3JlOjpHTEVTMkNhbnZhczo6YmluZEZyYW1lYnVm
ZmVyKToKKyAgICAgICAgKFdlYkNvcmU6OkdMRVMyQ2FudmFzOjpjbGVhclJlY3QpOgorICAgICAg
ICAoV2ViQ29yZTo6R0xFUzJDYW52YXM6OmZpbGxSZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OkdM
RVMyQ2FudmFzOjpkcmF3VGV4dHVyZWRSZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OkdMRVMyQ2Fu
dmFzOjpkcmF3VGV4dHVyZWRSZWN0VGlsZSk6CisgICAgICAgIChXZWJDb3JlOjpHTEVTMkNhbnZh
czo6ZHJhd1F1YWQpOgorICAgICAgICAoV2ViQ29yZTo6R0xFUzJDYW52YXM6OmNyZWF0ZVRleHR1
cmUpOgorICAgICAgICAoV2ViQ29yZTo6R0xFUzJDYW52YXM6OmdldFRleHR1cmUpOgorICAgICAg
ICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0dMRVMyQ2FudmFzLmg6CisgICAgICAgIChX
ZWJDb3JlOjpHTEVTMkNhbnZhczo6Y29udGV4dCk6CisgICAgICAgIChXZWJDb3JlOjpHTEVTMkNh
bnZhczo6ZHJhd2luZ0J1ZmZlcik6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21p
dW0vR3JhcGhpY3NMYXllckNocm9taXVtLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNz
TGF5ZXJDaHJvbWl1bTo6c2V0Q29udGVudHNUb0NhbnZhcyk6CisgICAgICAgICogcGxhdGZvcm0v
Z3JhcGhpY3MvY2hyb21pdW0vR3JhcGhpY3NMYXllckNocm9taXVtLmg6CisgICAgICAgICogcGxh
dGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vV2ViR0xMYXllckNocm9taXVtLmNwcDogQWRkZWQuCisg
ICAgICAgIChXZWJDb3JlOjpXZWJHTExheWVyQ2hyb21pdW06OmNyZWF0ZSk6CisgICAgICAgIChX
ZWJDb3JlOjpXZWJHTExheWVyQ2hyb21pdW06OldlYkdMTGF5ZXJDaHJvbWl1bSk6CisgICAgICAg
IChXZWJDb3JlOjpXZWJHTExheWVyQ2hyb21pdW06OnVwZGF0ZUNvbnRlbnRzKToKKyAgICAgICAg
KFdlYkNvcmU6OldlYkdMTGF5ZXJDaHJvbWl1bTo6c2V0Q29udGV4dCk6CisgICAgICAgICogcGxh
dGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vV2ViR0xMYXllckNocm9taXVtLmg6IEFkZGVkLgorICAg
ICAgICAoV2ViQ29yZTo6V2ViR0xMYXllckNocm9taXVtOjpkcmF3c0NvbnRlbnQpOgorICAgICAg
ICAqIHBsYXRmb3JtL2dyYXBoaWNzL2dwdS9EcmF3aW5nQnVmZmVyLmNwcDogQWRkZWQuCisgICAg
ICAgIChXZWJDb3JlOjpEcmF3aW5nQnVmZmVyOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6
RHJhd2luZ0J1ZmZlcjo6YmluZCk6CisgICAgICAgIChXZWJDb3JlOjpEcmF3aW5nQnVmZmVyOjpz
ZXRXaWxsUHVibGlzaENhbGxiYWNrKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9ncHUv
RHJhd2luZ0J1ZmZlci5oOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRyYXdpbmdCdWZmZXI6
OnNpemUpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2dwdS9TaGFyZWRHcmFwaGljc0Nv
bnRleHQzRC5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6U2hhcmVkR3JhcGhpY3NDb250
ZXh0M0Q6OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpTaGFyZWRHcmFwaGljc0NvbnRleHQz
RDo6U2hhcmVkR3JhcGhpY3NDb250ZXh0M0QpOgorICAgICAgICAoV2ViQ29yZTo6U2hhcmVkR3Jh
cGhpY3NDb250ZXh0M0Q6On5TaGFyZWRHcmFwaGljc0NvbnRleHQzRCk6CisgICAgICAgIChXZWJD
b3JlOjpTaGFyZWRHcmFwaGljc0NvbnRleHQzRDo6bWFrZUNvbnRleHRDdXJyZW50KToKKyAgICAg
ICAgKFdlYkNvcmU6OlNoYXJlZEdyYXBoaWNzQ29udGV4dDNEOjpzY2lzc29yKToKKyAgICAgICAg
KFdlYkNvcmU6OlNoYXJlZEdyYXBoaWNzQ29udGV4dDNEOjplbmFibGUpOgorICAgICAgICAoV2Vi
Q29yZTo6U2hhcmVkR3JhcGhpY3NDb250ZXh0M0Q6OmRpc2FibGUpOgorICAgICAgICAoV2ViQ29y
ZTo6U2hhcmVkR3JhcGhpY3NDb250ZXh0M0Q6OmNsZWFyQ29sb3IpOgorICAgICAgICAoV2ViQ29y
ZTo6U2hhcmVkR3JhcGhpY3NDb250ZXh0M0Q6OmNsZWFyKToKKyAgICAgICAgKFdlYkNvcmU6OlNo
YXJlZEdyYXBoaWNzQ29udGV4dDNEOjpkcmF3QXJyYXlzKToKKyAgICAgICAgKFdlYkNvcmU6OlNo
YXJlZEdyYXBoaWNzQ29udGV4dDNEOjpnZXRFcnJvcik6CisgICAgICAgIChXZWJDb3JlOjpTaGFy
ZWRHcmFwaGljc0NvbnRleHQzRDo6Z2V0SW50ZWdlcnYpOgorICAgICAgICAoV2ViQ29yZTo6U2hh
cmVkR3JhcGhpY3NDb250ZXh0M0Q6OmNyZWF0ZUZyYW1lYnVmZmVyKToKKyAgICAgICAgKFdlYkNv
cmU6OlNoYXJlZEdyYXBoaWNzQ29udGV4dDNEOjpjcmVhdGVUZXh0dXJlKToKKyAgICAgICAgKFdl
YkNvcmU6OlNoYXJlZEdyYXBoaWNzQ29udGV4dDNEOjpkZWxldGVGcmFtZWJ1ZmZlcik6CisgICAg
ICAgIChXZWJDb3JlOjpTaGFyZWRHcmFwaGljc0NvbnRleHQzRDo6ZGVsZXRlVGV4dHVyZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpTaGFyZWRHcmFwaGljc0NvbnRleHQzRDo6ZnJhbWVidWZmZXJUZXh0
dXJlMkQpOgorICAgICAgICAoV2ViQ29yZTo6U2hhcmVkR3JhcGhpY3NDb250ZXh0M0Q6OnRleFBh
cmFtZXRlcmkpOgorICAgICAgICAoV2ViQ29yZTo6U2hhcmVkR3JhcGhpY3NDb250ZXh0M0Q6OnRl
eEltYWdlMkQpOgorICAgICAgICAoV2ViQ29yZTo6U2hhcmVkR3JhcGhpY3NDb250ZXh0M0Q6OnRl
eFN1YkltYWdlMkQpOgorICAgICAgICAoV2ViQ29yZTo6U2hhcmVkR3JhcGhpY3NDb250ZXh0M0Q6
OnJlYWRQaXhlbHMpOgorICAgICAgICAoV2ViQ29yZTo6U2hhcmVkR3JhcGhpY3NDb250ZXh0M0Q6
OnN1cHBvcnRzQkdSQSk6CisgICAgICAgIChXZWJDb3JlOjpTaGFyZWRHcmFwaGljc0NvbnRleHQz
RDo6Z2V0VGV4dHVyZSk6CisgICAgICAgIChXZWJDb3JlOjpTaGFyZWRHcmFwaGljc0NvbnRleHQz
RDo6YXBwbHlDb21wb3NpdGVPcGVyYXRvcik6CisgICAgICAgIChXZWJDb3JlOjpTaGFyZWRHcmFw
aGljc0NvbnRleHQzRDo6dXNlUXVhZFZlcnRpY2VzKToKKyAgICAgICAgKFdlYkNvcmU6OlNoYXJl
ZEdyYXBoaWNzQ29udGV4dDNEOjpzZXRBY3RpdmVUZXh0dXJlKToKKyAgICAgICAgKFdlYkNvcmU6
OlNoYXJlZEdyYXBoaWNzQ29udGV4dDNEOjpiaW5kVGV4dHVyZSk6CisgICAgICAgIChXZWJDb3Jl
OjpTaGFyZWRHcmFwaGljc0NvbnRleHQzRDo6dXNlRmlsbFNvbGlkUHJvZ3JhbSk6CisgICAgICAg
IChXZWJDb3JlOjpTaGFyZWRHcmFwaGljc0NvbnRleHQzRDo6dXNlVGV4dHVyZVByb2dyYW0pOgor
ICAgICAgICAoV2ViQ29yZTo6U2hhcmVkR3JhcGhpY3NDb250ZXh0M0Q6OmJpbmRGcmFtZWJ1ZmZl
cik6CisgICAgICAgIChXZWJDb3JlOjpTaGFyZWRHcmFwaGljc0NvbnRleHQzRDo6c2V0Vmlld3Bv
cnQpOgorICAgICAgICAoV2ViQ29yZTo6U2hhcmVkR3JhcGhpY3NDb250ZXh0M0Q6OnBhaW50c0lu
dG9DYW52YXNCdWZmZXIpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2dwdS9TaGFyZWRH
cmFwaGljc0NvbnRleHQzRC5oOiBBZGRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9n
cHUvVGV4dHVyZS5jcHA6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvc2tpYS9HcmFwaGlj
c0NvbnRleHRTa2lhLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6c3lu
Y1NvZnR3YXJlQ2FudmFzKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6c2V0
U2hhcmVkR3JhcGhpY3NDb250ZXh0M0QpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3Nr
aWEvSW1hZ2VTa2lhLmNwcDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9za2lhL1BsYXRm
b3JtQ29udGV4dFNraWEuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UGxhdGZvcm1Db250ZXh0U2tp
YTo6flBsYXRmb3JtQ29udGV4dFNraWEpOgorICAgICAgICAoV2ViQ29yZTo6V2lsbFB1Ymxpc2hD
YWxsYmFja0ltcGw6OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpXaWxsUHVibGlzaENhbGxi
YWNrSW1wbDo6d2lsbFB1Ymxpc2gpOgorICAgICAgICAoV2ViQ29yZTo6V2lsbFB1Ymxpc2hDYWxs
YmFja0ltcGw6OldpbGxQdWJsaXNoQ2FsbGJhY2tJbXBsKToKKyAgICAgICAgKFdlYkNvcmU6OlBs
YXRmb3JtQ29udGV4dFNraWE6OnNldFNoYXJlZEdyYXBoaWNzQ29udGV4dDNEKToKKyAgICAgICAg
KFdlYkNvcmU6OlBsYXRmb3JtQ29udGV4dFNraWE6OnVwbG9hZFNvZnR3YXJlVG9IYXJkd2FyZSk6
CisgICAgICAgIChXZWJDb3JlOjpQbGF0Zm9ybUNvbnRleHRTa2lhOjpyZWFkYmFja0hhcmR3YXJl
VG9Tb2Z0d2FyZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvc2tpYS9QbGF0Zm9ybUNv
bnRleHRTa2lhLmg6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckxheWVyQmFja2luZy5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllckJhY2tpbmc6OnVwZGF0ZUdyYXBoaWNzTGF5
ZXJDb25maWd1cmF0aW9uKToKKwogMjAxMC0wOC0zMCAgQ2hyaXMgUm9nZXJzICA8Y3JvZ2Vyc0Bn
b29nbGUuY29tPgogCiAgICAgICAgIFJldmlld2VkIGJ5IEtlbm5ldGggUnVzc2VsbC4KZGlmZiAt
LWdpdCBhL1dlYkNvcmUvV2ViQ29yZS5neXBpIGIvV2ViQ29yZS9XZWJDb3JlLmd5cGkKaW5kZXgg
ZTViNTdiYTA4ZTNhMDBkOGQ1OThjZDJiZTQwNzNkNzBhOWEwYmRmNy4uYTE0Yzk5YTljZDE1NzU3
ZTRmMTMwNTk3ZGNkNDA2OTMxNDNiYmRiYiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9XZWJDb3JlLmd5
cGkKKysrIGIvV2ViQ29yZS9XZWJDb3JlLmd5cGkKQEAgLTIyMzYsOCArMjIzNiwxMSBAQAogICAg
ICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2NnL1BhdGhDRy5jcHAnLAogICAgICAgICAgICAg
J3BsYXRmb3JtL2dyYXBoaWNzL2NnL1BhdHRlcm5DRy5jcHAnLAogICAgICAgICAgICAgJ3BsYXRm
b3JtL2dyYXBoaWNzL2NnL1RyYW5zZm9ybWF0aW9uTWF0cml4Q0cuY3BwJywKKyAgICAgICAgICAg
ICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9DYW52YXMyRExheWVyQ2hyb21pdW0uY3BwJywK
KyAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9DYW52YXMyRExheWVyQ2hy
b21pdW0uaCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vQ2FudmFz
TGF5ZXJDaHJvbWl1bS5jcHAnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9t
aXVtL0NhbnZhc0xheWVyQ2hyb21pdW0uaCcsCisgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhp
Y3MvY2hyb21pdW0vRHJhd2luZ0J1ZmZlckNocm9taXVtLmNwcCcsCiAgICAgICAgICAgICAncGxh
dGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vQ29udGVudExheWVyQ2hyb21pdW0uY3BwJywKICAgICAg
ICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9Db250ZW50TGF5ZXJDaHJvbWl1bS5o
JywKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9Gb250Q2FjaGVDaHJv
bWl1bVdpbi5jcHAnLApAQCAtMjI4Myw2ICsyMjg2LDggQEAKICAgICAgICAgICAgICdwbGF0Zm9y
bS9ncmFwaGljcy9jaHJvbWl1bS9VbmlzY3JpYmVIZWxwZXJUZXh0UnVuLmgnLAogICAgICAgICAg
ICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1ZpZGVvTGF5ZXJDaHJvbWl1bS5jcHAnLAog
ICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1ZpZGVvTGF5ZXJDaHJvbWl1
bS5oJywKKyAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9XZWJHTExheWVy
Q2hyb21pdW0uY3BwJywKKyAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9X
ZWJHTExheWVyQ2hyb21pdW0uaCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY29j
b2EvRm9udFBsYXRmb3JtRGF0YS5oJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9m
aWx0ZXJzL0ZFQmxlbmQuY3BwJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9maWx0
ZXJzL0ZFQmxlbmQuaCcsCkBAIC0yMzAzLDYgKzIzMDgsMTAgQEAKICAgICAgICAgICAgICdwbGF0
Zm9ybS9ncmFwaGljcy9maWx0ZXJzL1NvdXJjZUFscGhhLmgnLAogICAgICAgICAgICAgJ3BsYXRm
b3JtL2dyYXBoaWNzL2ZpbHRlcnMvU291cmNlR3JhcGhpYy5jcHAnLAogICAgICAgICAgICAgJ3Bs
YXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvU291cmNlR3JhcGhpYy5oJywKKyAgICAgICAgICAgICdw
bGF0Zm9ybS9ncmFwaGljcy9ncHUvRHJhd2luZ0J1ZmZlci5jcHAnLAorICAgICAgICAgICAgJ3Bs
YXRmb3JtL2dyYXBoaWNzL2dwdS9EcmF3aW5nQnVmZmVyLmgnLAorICAgICAgICAgICAgJ3BsYXRm
b3JtL2dyYXBoaWNzL2dwdS9TaGFyZWRHcmFwaGljc0NvbnRleHQzRC5jcHAnLAorICAgICAgICAg
ICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2dwdS9TaGFyZWRHcmFwaGljc0NvbnRleHQzRC5oJywKICAg
ICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9ncHUvU2hhZGVyLmNwcCcsCiAgICAgICAgICAg
ICAncGxhdGZvcm0vZ3JhcGhpY3MvZ3B1L1NoYWRlci5oJywKICAgICAgICAgICAgICdwbGF0Zm9y
bS9ncmFwaGljcy9ncHUvU29saWRGaWxsU2hhZGVyLmNwcCcsCkBAIC0yNTYxLDggKzI1NzAsOCBA
QAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlQnVmZmVyLmNwcCcsCiAgICAg
ICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VCdWZmZXIuaCcsCiAgICAgICAgICAgICAn
cGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VPYnNlcnZlci5oJywKLSAgICAgICAgICAgICdwbGF0Zm9y
bS9ncmFwaGljcy9JbWFnZVNvdXJjZS5oJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGlj
cy9JbWFnZVNvdXJjZS5jcHAnLAorICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdl
U291cmNlLmgnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL0ludFBvaW50LmgnLAog
ICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL0ludFJlY3QuY3BwJywKICAgICAgICAgICAg
ICdwbGF0Zm9ybS9ncmFwaGljcy9JbnRSZWN0LmgnLApkaWZmIC0tZ2l0IGEvV2ViQ29yZS9odG1s
L2NhbnZhcy9DYW52YXNSZW5kZXJpbmdDb250ZXh0LmNwcCBiL1dlYkNvcmUvaHRtbC9jYW52YXMv
Q2FudmFzUmVuZGVyaW5nQ29udGV4dC5jcHAKaW5kZXggMWU4OTdkMzBlY2UxOTgzOTEyOGYwMDhk
ZGY4ZDQ4NjBkNzE0MDYyNy4uZTAxOTMzMmJhODFmNTNjOWViMmNjY2M1M2IyNDUzMDQ2ZWNiZDg1
ZSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9odG1sL2NhbnZhcy9DYW52YXNSZW5kZXJpbmdDb250ZXh0
LmNwcAorKysgYi9XZWJDb3JlL2h0bWwvY2FudmFzL0NhbnZhc1JlbmRlcmluZ0NvbnRleHQuY3Bw
CkBAIC0yNSw5ICsyNSw2IEBACiAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJDYW52
YXNSZW5kZXJpbmdDb250ZXh0LmgiCi0jaWYgRU5BQkxFKEFDQ0VMRVJBVEVEXzJEX0NBTlZBUykg
fHwgRU5BQkxFKDNEX0NBTlZBUykKLSNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQzRC5oIgotI2Vu
ZGlmCiAjaW5jbHVkZSAiSFRNTENhbnZhc0VsZW1lbnQuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUg
ewpAQCAtNDcsMTMgKzQ0LDQgQEAgdm9pZCBDYW52YXNSZW5kZXJpbmdDb250ZXh0OjpkZXJlZigp
CiAgICAgbV9jYW52YXMtPmRlcmVmKCk7IAogfQogCi1ib29sIENhbnZhc1JlbmRlcmluZ0NvbnRl
eHQ6OnBhaW50c0ludG9DYW52YXNCdWZmZXIoKSBjb25zdAotewotI2lmIEVOQUJMRShBQ0NFTEVS
QVRFRF8yRF9DQU5WQVMpIHx8IEVOQUJMRSgzRF9DQU5WQVMpCi0gICAgaWYgKEdyYXBoaWNzQ29u
dGV4dDNEKiBjb250ZXh0M0QgPSBncmFwaGljc0NvbnRleHQzRCgpKQotICAgICAgICByZXR1cm4g
Y29udGV4dDNELT5wYWludHNJbnRvQ2FudmFzQnVmZmVyKCk7Ci0jZW5kaWYKLSAgICByZXR1cm4g
dHJ1ZTsKLX0KLQogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9o
dG1sL2NhbnZhcy9DYW52YXNSZW5kZXJpbmdDb250ZXh0LmggYi9XZWJDb3JlL2h0bWwvY2FudmFz
L0NhbnZhc1JlbmRlcmluZ0NvbnRleHQuaAppbmRleCAyY2RiZTFkMzc2NTk0ZGJlMGRmYmQ3MDBm
MmVmYjczNGEzZGI5MmM2Li44NDk5YjQ3NzBlZTFkNDkzODkxOWIyMTE2NGZmZDEzYjYwZTg3ZDIy
IDEwMDY0NAotLS0gYS9XZWJDb3JlL2h0bWwvY2FudmFzL0NhbnZhc1JlbmRlcmluZ0NvbnRleHQu
aAorKysgYi9XZWJDb3JlL2h0bWwvY2FudmFzL0NhbnZhc1JlbmRlcmluZ0NvbnRleHQuaApAQCAt
MjYsMTIgKzI2LDEzIEBACiAjaWZuZGVmIENhbnZhc1JlbmRlcmluZ0NvbnRleHRfaAogI2RlZmlu
ZSBDYW52YXNSZW5kZXJpbmdDb250ZXh0X2gKIAorI2luY2x1ZGUgIkdyYXBoaWNzTGF5ZXIuaCIK
KwogI2luY2x1ZGUgPHd0Zi9Ob25jb3B5YWJsZS5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAK
ICAgICBjbGFzcyBXZWJHTE9iamVjdDsKLSAgICBjbGFzcyBHcmFwaGljc0NvbnRleHQzRDsKICAg
ICBjbGFzcyBIVE1MQ2FudmFzRWxlbWVudDsKIAogICAgIGNsYXNzIENhbnZhc1JlbmRlcmluZ0Nv
bnRleHQgOiBwdWJsaWMgTm9uY29weWFibGUgewpAQCAtNDksMTIgKzUwLDEyIEBAIG5hbWVzcGFj
ZSBXZWJDb3JlIHsKICAgICAgICAgdmlydHVhbCBib29sIGlzM2QoKSBjb25zdCB7IHJldHVybiBm
YWxzZTsgfQogICAgICAgICB2aXJ0dWFsIGJvb2wgaXNBY2NlbGVyYXRlZCgpIGNvbnN0IHsgcmV0
dXJuIGZhbHNlOyB9CiAgICAgICAgIAotICAgICAgICAvLyBGb3IgYWNjZWxlcmF0ZWQgY2FudmFz
ZXMsIHJldHVybnMgYSBwb2ludGVyIHRvIHRoZSB1bmRlcmx5aW5nIEdyYXBoaWNzQ29udGV4dDNE
LgotICAgICAgICAvLyBGb3Igbm9uIGFjY2VsZXJhdGVkIGNhbnZhc2VzIHJldHVybnMgMC4KLSAg
ICAgICAgdmlydHVhbCBHcmFwaGljc0NvbnRleHQzRCogZ3JhcGhpY3NDb250ZXh0M0QoKSBjb25z
dCB7IHJldHVybiAwOyB9Ci0KICAgICAgICAgdmlydHVhbCB2b2lkIHBhaW50UmVuZGVyaW5nUmVz
dWx0c1RvQ2FudmFzKCkge30KLSAgICAgICAgYm9vbCBwYWludHNJbnRvQ2FudmFzQnVmZmVyKCkg
Y29uc3Q7CisgICAgICAgIHZpcnR1YWwgYm9vbCBwYWludHNJbnRvQ2FudmFzQnVmZmVyKCkgY29u
c3QgeyByZXR1cm4gdHJ1ZTsgfQorCisjaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQor
ICAgICAgICB2aXJ0dWFsIFBsYXRmb3JtTGF5ZXIqIHBsYXRmb3JtTGF5ZXIoKSBjb25zdCB7IHJl
dHVybiAwOyB9CisjZW5kaWYKIAogICAgIHByaXZhdGU6CiAgICAgICAgIEhUTUxDYW52YXNFbGVt
ZW50KiBtX2NhbnZhczsKZGlmZiAtLWdpdCBhL1dlYkNvcmUvaHRtbC9jYW52YXMvQ2FudmFzUmVu
ZGVyaW5nQ29udGV4dDJELmNwcCBiL1dlYkNvcmUvaHRtbC9jYW52YXMvQ2FudmFzUmVuZGVyaW5n
Q29udGV4dDJELmNwcAppbmRleCA2ZGY2YWJmOTY3NGFkOWEyMGYyMjcyYTE3ODkzYzg1ODUwZGU1
N2Q3Li4yMmQzZTJkOTQ1NmEzN2ExMjlmNmIzZTIyMzJjYTNkYzMzNzdjM2ZmIDEwMDY0NAotLS0g
YS9XZWJDb3JlL2h0bWwvY2FudmFzL0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRC5jcHAKKysrIGIv
V2ViQ29yZS9odG1sL2NhbnZhcy9DYW52YXNSZW5kZXJpbmdDb250ZXh0MkQuY3BwCkBAIC01OSw4
ICs1OSwxMiBAQAogI2luY2x1ZGUgIlRleHRNZXRyaWNzLmgiCiAKICNpZiBFTkFCTEUoQUNDRUxF
UkFURURfMkRfQ0FOVkFTKQorI2luY2x1ZGUgIkNocm9tZS5oIgorI2luY2x1ZGUgIkNocm9tZUNs
aWVudC5oIgorI2luY2x1ZGUgIkRyYXdpbmdCdWZmZXIuaCIKICNpbmNsdWRlICJGcmFtZVZpZXcu
aCIKICNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQzRC5oIgorI2luY2x1ZGUgIlNoYXJlZEdyYXBo
aWNzQ29udGV4dDNELmgiCiAjaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQogI2luY2x1
ZGUgIlJlbmRlckxheWVyLmgiCiAjZW5kaWYKQEAgLTEyNCwxNyArMTI4LDExIEBAIENhbnZhc1Jl
bmRlcmluZ0NvbnRleHQyRDo6Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJEKEhUTUxDYW52YXNFbGVt
ZW50KiBjYW52YXMsIGJvCiAgICAgICAgIHJldHVybjsKICAgICBpZiAoIXAtPnNldHRpbmdzKCkt
PmFjY2VsZXJhdGVkMmRDYW52YXNFbmFibGVkKCkpCiAgICAgICAgIHJldHVybjsKLSAgICBpZiAo
RnJhbWVWaWV3KiB2aWV3ID0gY2FudmFzLT5kb2N1bWVudCgpLT52aWV3KCkpIHsKLSAgICAgICAg
aWYgKFNjcm9sbFZpZXcqIHJvb3RWaWV3ID0gdmlldy0+cm9vdCgpKSB7Ci0gICAgICAgICAgICBp
ZiAoSG9zdFdpbmRvdyogaG9zdFdpbmRvdyA9IHJvb3RWaWV3LT5ob3N0V2luZG93KCkpIHsKLSAg
ICAgICAgICAgICAgICAvLyBTZXQgdXAgb3VyIGNvbnRleHQKLSAgICAgICAgICAgICAgICBHcmFw
aGljc0NvbnRleHQzRDo6QXR0cmlidXRlcyBhdHRyOwotICAgICAgICAgICAgICAgIGF0dHIuc3Rl
bmNpbCA9IHRydWU7Ci0gICAgICAgICAgICAgICAgbV9jb250ZXh0M0QgPSBHcmFwaGljc0NvbnRl
eHQzRDo6Y3JlYXRlKGF0dHIsIGhvc3RXaW5kb3cpOwotICAgICAgICAgICAgICAgIGlmIChtX2Nv
bnRleHQzRCkKLSAgICAgICAgICAgICAgICAgICAgaWYgKEdyYXBoaWNzQ29udGV4dCogYyA9IGRy
YXdpbmdDb250ZXh0KCkpCi0gICAgICAgICAgICAgICAgICAgICAgICBjLT5zZXRHcmFwaGljc0Nv
bnRleHQzRChtX2NvbnRleHQzRC5nZXQoKSwgSW50U2l6ZShjYW52YXMtPndpZHRoKCksIGNhbnZh
cy0+aGVpZ2h0KCkpKTsKLSAgICAgICAgICAgIH0KKyAgICBtX2NvbnRleHQzRCA9IHAtPmNocm9t
ZSgpLT5jbGllbnQoKS0+Z2V0U2hhcmVkR3JhcGhpY3NDb250ZXh0M0QoKTsKKyAgICBpZiAobV9j
b250ZXh0M0QpIHsKKyAgICAgICAgaWYgKEdyYXBoaWNzQ29udGV4dCogYyA9IGRyYXdpbmdDb250
ZXh0KCkpIHsKKyAgICAgICAgICAgIG1fZHJhd2luZ0J1ZmZlciA9IERyYXdpbmdCdWZmZXI6OmNy
ZWF0ZShtX2NvbnRleHQzRC5nZXQoKSwgSW50U2l6ZShjYW52YXMtPndpZHRoKCksIGNhbnZhcy0+
aGVpZ2h0KCkpKTsKKyAgICAgICAgICAgIGMtPnNldFNoYXJlZEdyYXBoaWNzQ29udGV4dDNEKG1f
Y29udGV4dDNELmdldCgpLCBtX2RyYXdpbmdCdWZmZXIuZ2V0KCksIEludFNpemUoY2FudmFzLT53
aWR0aCgpLCBjYW52YXMtPmhlaWdodCgpKSk7CiAgICAgICAgIH0KICAgICB9CiAjZW5kaWYKQEAg
LTE1Myw2ICsxNTEsMTYgQEAgYm9vbCBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ6OmlzQWNjZWxl
cmF0ZWQoKSBjb25zdAogI2VuZGlmCiB9CiAKK2Jvb2wgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJE
OjpwYWludHNJbnRvQ2FudmFzQnVmZmVyKCkgY29uc3QKK3sKKyNpZiBFTkFCTEUoQUNDRUxFUkFU
RURfMkRfQ0FOVkFTKQorICAgIGlmIChtX2NvbnRleHQzRCkKKyAgICAgICAgcmV0dXJuIG1fY29u
dGV4dDNELT5wYWludHNJbnRvQ2FudmFzQnVmZmVyKCk7CisjZW5kaWYKKyAgICByZXR1cm4gdHJ1
ZTsKK30KKworCiB2b2lkIENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRDo6cmVzZXQoKQogewogICAg
IG1fc3RhdGVTdGFjay5yZXNpemUoMSk7CkBAIC0xNjAsOCArMTY4LDEwIEBAIHZvaWQgQ2FudmFz
UmVuZGVyaW5nQ29udGV4dDJEOjpyZXNldCgpCiAgICAgbV9wYXRoLmNsZWFyKCk7CiAjaWYgRU5B
QkxFKEFDQ0VMRVJBVEVEXzJEX0NBTlZBUykKICAgICBpZiAobV9jb250ZXh0M0QpIHsKLSAgICAg
ICAgaWYgKEdyYXBoaWNzQ29udGV4dCogYyA9IGRyYXdpbmdDb250ZXh0KCkpCi0gICAgICAgICAg
ICBjLT5zZXRHcmFwaGljc0NvbnRleHQzRChtX2NvbnRleHQzRC5nZXQoKSwgSW50U2l6ZShjYW52
YXMoKS0+d2lkdGgoKSwgY2FudmFzKCktPmhlaWdodCgpKSk7CisgICAgICAgIGlmIChHcmFwaGlj
c0NvbnRleHQqIGMgPSBkcmF3aW5nQ29udGV4dCgpKSB7CisgICAgICAgICAgICBtX2RyYXdpbmdC
dWZmZXItPnJlc2V0KEludFNpemUoY2FudmFzKCktPndpZHRoKCksIGNhbnZhcygpLT5oZWlnaHQo
KSkpOworICAgICAgICAgICAgYy0+c2V0U2hhcmVkR3JhcGhpY3NDb250ZXh0M0QobV9jb250ZXh0
M0QuZ2V0KCksIG1fZHJhd2luZ0J1ZmZlci5nZXQoKSwgSW50U2l6ZShjYW52YXMoKS0+d2lkdGgo
KSwgY2FudmFzKCktPmhlaWdodCgpKSk7CisgICAgICAgIH0KICAgICB9CiAjZW5kaWYKIH0KQEAg
LTE1MDQsNyArMTUxNCw3IEBAIHZvaWQgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEOjpkaWREcmF3
KGNvbnN0IEZsb2F0UmVjdCYgciwgdW5zaWduZWQgb3B0aW9ucykKICNpZiBFTkFCTEUoQUNDRUxF
UkFURURfMkRfQ0FOVkFTKSAmJiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCiAgICAgLy8g
SWYgd2UgYXJlIGRyYXdpbmcgdG8gaGFyZHdhcmUgYW5kIHdlIGhhdmUgYSBjb21wb3NpdGVkIGxh
eWVyLCBqdXN0IGNhbGwgcmVuZGVyZXJDb250ZW50Q2hhbmdlZCgpLgogICAgIFJlbmRlckJveCog
cmVuZGVyQm94ID0gY2FudmFzKCktPnJlbmRlckJveCgpOwotICAgIGlmIChtX2NvbnRleHQzRCAm
JiByZW5kZXJCb3ggJiYgcmVuZGVyQm94LT5oYXNMYXllcigpICYmIHJlbmRlckJveC0+bGF5ZXIo
KS0+aGFzQWNjZWxlcmF0ZWRDb21wb3NpdGluZygpKQorICAgIGlmIChpc0FjY2VsZXJhdGVkKCkg
JiYgcmVuZGVyQm94ICYmIHJlbmRlckJveC0+aGFzTGF5ZXIoKSAmJiByZW5kZXJCb3gtPmxheWVy
KCktPmhhc0FjY2VsZXJhdGVkQ29tcG9zaXRpbmcoKSkKICAgICAgICAgcmVuZGVyQm94LT5sYXll
cigpLT5yZW5kZXJlckNvbnRlbnRDaGFuZ2VkKCk7CiAgICAgZWxzZQogI2VuZGlmCkBAIC0xODc3
LDQgKzE4ODcsMTEgQEAgdm9pZCBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ6OnBhaW50UmVuZGVy
aW5nUmVzdWx0c1RvQ2FudmFzKCkKICNlbmRpZgogfQogCisjaWYgRU5BQkxFKEFDQ0VMRVJBVEVE
XzJEX0NBTlZBUykgJiYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQorUGxhdGZvcm1MYXll
ciogQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEOjpwbGF0Zm9ybUxheWVyKCkgY29uc3QKK3sKKyAg
ICByZXR1cm4gbV9kcmF3aW5nQnVmZmVyLT5wbGF0Zm9ybUxheWVyKCk7Cit9CisjZW5kaWYKKwog
fSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9odG1sL2NhbnZhcy9D
YW52YXNSZW5kZXJpbmdDb250ZXh0MkQuaCBiL1dlYkNvcmUvaHRtbC9jYW52YXMvQ2FudmFzUmVu
ZGVyaW5nQ29udGV4dDJELmgKaW5kZXggOTg1NzM0NDNlODFkZjlmN2Q5NmY2OTIzMmZlZmY5MDhl
MGNlNmI4OS4uOTAxMTJjMjBiYjU1NjUzMDYyN2Y5ZDkzYTQwMzhiOTQ1MDRiODk3NCAxMDA2NDQK
LS0tIGEvV2ViQ29yZS9odG1sL2NhbnZhcy9DYW52YXNSZW5kZXJpbmdDb250ZXh0MkQuaAorKysg
Yi9XZWJDb3JlL2h0bWwvY2FudmFzL0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRC5oCkBAIC02MSw3
ICs2MSw3IEBAIGNsYXNzIEtVUkw7CiBjbGFzcyBUZXh0TWV0cmljczsKIAogI2lmIEVOQUJMRShB
Q0NFTEVSQVRFRF8yRF9DQU5WQVMpCi1jbGFzcyBHcmFwaGljc0NvbnRleHQzRDsKK2NsYXNzIFNo
YXJlZEdyYXBoaWNzQ29udGV4dDNEOwogI2VuZGlmCiAKIHR5cGVkZWYgaW50IEV4Y2VwdGlvbkNv
ZGU7CkBAIC03NCw2ICs3NCw3IEBAIHB1YmxpYzoKIAogICAgIHZpcnR1YWwgYm9vbCBpczJkKCkg
Y29uc3QgeyByZXR1cm4gdHJ1ZTsgfQogICAgIHZpcnR1YWwgYm9vbCBpc0FjY2VsZXJhdGVkKCkg
Y29uc3Q7CisgICAgdmlydHVhbCBib29sIHBhaW50c0ludG9DYW52YXNCdWZmZXIoKSBjb25zdDsK
IAogICAgIENhbnZhc1N0eWxlKiBzdHJva2VTdHlsZSgpIGNvbnN0OwogICAgIHZvaWQgc2V0U3Ry
b2tlU3R5bGUoUGFzc1JlZlB0cjxDYW52YXNTdHlsZT4pOwpAQCAtMjIzLDggKzIyNCw4IEBAIHB1
YmxpYzoKIAogICAgIHZpcnR1YWwgdm9pZCBwYWludFJlbmRlcmluZ1Jlc3VsdHNUb0NhbnZhcygp
OwogCi0jaWYgRU5BQkxFKEFDQ0VMRVJBVEVEXzJEX0NBTlZBUykKLSAgICB2aXJ0dWFsIEdyYXBo
aWNzQ29udGV4dDNEKiBncmFwaGljc0NvbnRleHQzRCgpIGNvbnN0IHsgcmV0dXJuIG1fY29udGV4
dDNELmdldCgpOyB9CisjaWYgRU5BQkxFKEFDQ0VMRVJBVEVEXzJEX0NBTlZBUykgJiYgVVNFKEFD
Q0VMRVJBVEVEX0NPTVBPU0lUSU5HKQorICAgIHZpcnR1YWwgUGxhdGZvcm1MYXllciogcGxhdGZv
cm1MYXllcigpIGNvbnN0OwogI2VuZGlmCiAKIHByaXZhdGU6CkBAIC0yOTgsNyArMjk5LDggQEAg
cHJpdmF0ZToKICNlbmRpZgogCiAjaWYgRU5BQkxFKEFDQ0VMRVJBVEVEXzJEX0NBTlZBUykKLSAg
ICBPd25QdHI8R3JhcGhpY3NDb250ZXh0M0Q+IG1fY29udGV4dDNEOworICAgIFJlZlB0cjxTaGFy
ZWRHcmFwaGljc0NvbnRleHQzRD4gbV9jb250ZXh0M0Q7CisgICAgT3duUHRyPERyYXdpbmdCdWZm
ZXI+IG1fZHJhd2luZ0J1ZmZlcjsKICNlbmRpZgogfTsKIApkaWZmIC0tZ2l0IGEvV2ViQ29yZS9o
dG1sL2NhbnZhcy9XZWJHTFJlbmRlcmluZ0NvbnRleHQuY3BwIGIvV2ViQ29yZS9odG1sL2NhbnZh
cy9XZWJHTFJlbmRlcmluZ0NvbnRleHQuY3BwCmluZGV4IDk1OTFhNTNjZmVjMDU5ZTI5OTM2YzU4
MTkwNzBhNGVhZmU5Y2Q2ODMuLjY0Y2I1ZDNlZmRjZmViMmUyNTM3MDQzNjg5NGRmMGM1OTM2YTJm
M2EgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xSZW5kZXJpbmdDb250ZXh0
LmNwcAorKysgYi9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMUmVuZGVyaW5nQ29udGV4dC5jcHAK
QEAgLTE3MCw2ICsxNzAsMTEgQEAgdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnBhaW50UmVu
ZGVyaW5nUmVzdWx0c1RvQ2FudmFzKCkKICAgICBtX2NvbnRleHQtPnBhaW50UmVuZGVyaW5nUmVz
dWx0c1RvQ2FudmFzKHRoaXMpOwogfQogCitib29sIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6cGFp
bnRzSW50b0NhbnZhc0J1ZmZlcigpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fY29udGV4dC0+cGFp
bnRzSW50b0NhbnZhc0J1ZmZlcigpOworfQorCiB2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6
cmVzaGFwZShpbnQgd2lkdGgsIGludCBoZWlnaHQpCiB7CiAgICAgaWYgKG1fbmVlZHNVcGRhdGUp
IHsKZGlmZiAtLWdpdCBhL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xSZW5kZXJpbmdDb250ZXh0
LmggYi9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMUmVuZGVyaW5nQ29udGV4dC5oCmluZGV4IDY2
ZWM4ZDgyYWE3M2ZkYjRiNDlmMjc2YjNiNmQwNTJkNTM4NDNhYmIuLmQ4MTJjNjkxY2JiYzc1ODBm
NWVmOTcwM2RkYjI2MTEyZmU3MmY2MjggMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvaHRtbC9jYW52YXMv
V2ViR0xSZW5kZXJpbmdDb250ZXh0LmgKKysrIGIvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFJl
bmRlcmluZ0NvbnRleHQuaApAQCAtNjMsNiArNjMsNyBAQCBwdWJsaWM6CiAKICAgICB2aXJ0dWFs
IGJvb2wgaXMzZCgpIGNvbnN0IHsgcmV0dXJuIHRydWU7IH0KICAgICB2aXJ0dWFsIGJvb2wgaXNB
Y2NlbGVyYXRlZCgpIGNvbnN0IHsgcmV0dXJuIHRydWU7IH0KKyAgICB2aXJ0dWFsIGJvb2wgcGFp
bnRzSW50b0NhbnZhc0J1ZmZlcigpIGNvbnN0OwogCiAgICAgdm9pZCBhY3RpdmVUZXh0dXJlKHVu
c2lnbmVkIGxvbmcgdGV4dHVyZSwgRXhjZXB0aW9uQ29kZSYgZWMpOwogICAgIHZvaWQgYXR0YWNo
U2hhZGVyKFdlYkdMUHJvZ3JhbSosIFdlYkdMU2hhZGVyKiwgRXhjZXB0aW9uQ29kZSYgZWMpOwpA
QCAtMjc3LDcgKzI3OCwxMCBAQCBwdWJsaWM6CiAKICAgICB2b2lkIHZpZXdwb3J0KGxvbmcgeCwg
bG9uZyB5LCB1bnNpZ25lZCBsb25nIHdpZHRoLCB1bnNpZ25lZCBsb25nIGhlaWdodCk7CiAKLSAg
ICB2aXJ0dWFsIEdyYXBoaWNzQ29udGV4dDNEKiBncmFwaGljc0NvbnRleHQzRCgpIGNvbnN0IHsg
cmV0dXJuIG1fY29udGV4dC5nZXQoKTsgfQorICAgIEdyYXBoaWNzQ29udGV4dDNEKiBncmFwaGlj
c0NvbnRleHQzRCgpIGNvbnN0IHsgcmV0dXJuIG1fY29udGV4dC5nZXQoKTsgfQorI2lmIFVTRShB
Q0NFTEVSQVRFRF9DT01QT1NJVElORykKKyAgICB2aXJ0dWFsIFBsYXRmb3JtTGF5ZXIqIHBsYXRm
b3JtTGF5ZXIoKSBjb25zdCB7IHJldHVybiBtX2NvbnRleHQtPnBsYXRmb3JtTGF5ZXIoKTsgfQor
I2VuZGlmCiAKICAgICB2b2lkIHJlc2hhcGUoaW50IHdpZHRoLCBpbnQgaGVpZ2h0KTsKIApkaWZm
IC0tZ2l0IGEvV2ViQ29yZS9sb2FkZXIvRW1wdHlDbGllbnRzLmggYi9XZWJDb3JlL2xvYWRlci9F
bXB0eUNsaWVudHMuaAppbmRleCAyNzA3NTJkZDdmOGYwMWZhOTRmN2MyOTNkM2NmZTdmYTk1ZWQy
OTFmLi44YWIxYTk4OTk0ODg0ODU0NTQ3OTE0YmNjM2QxZGVkOWMzNGUyYzYzIDEwMDY0NAotLS0g
YS9XZWJDb3JlL2xvYWRlci9FbXB0eUNsaWVudHMuaAorKysgYi9XZWJDb3JlL2xvYWRlci9FbXB0
eUNsaWVudHMuaApAQCAtNjEsNiArNjEsOCBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKK2Ns
YXNzIFNoYXJlZEdyYXBoaWNzQ29udGV4dDNEOworCiBjbGFzcyBFbXB0eVBvcHVwTWVudSA6IHB1
YmxpYyBQb3B1cE1lbnUgewogcHVibGljOgogICAgIHZpcnR1YWwgdm9pZCBzaG93KGNvbnN0IElu
dFJlY3QmLCBGcmFtZVZpZXcqLCBpbnQpIHt9CkBAIC0xOTAsOSArMTkyLDkgQEAgcHVibGljOgog
ICAgIHZpcnR1YWwgdm9pZCBjYW5jZWxHZW9sb2NhdGlvblBlcm1pc3Npb25SZXF1ZXN0Rm9yRnJh
bWUoRnJhbWUqLCBHZW9sb2NhdGlvbiopIHt9CiAKICNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9T
SVRJTkcpCi0gICAgdmlydHVhbCB2b2lkIGF0dGFjaFJvb3RHcmFwaGljc0xheWVyKEZyYW1lKiwg
R3JhcGhpY3NMYXllciopIHt9OwotICAgIHZpcnR1YWwgdm9pZCBzZXROZWVkc09uZVNob3REcmF3
aW5nU3luY2hyb25pemF0aW9uKCkge307Ci0gICAgdmlydHVhbCB2b2lkIHNjaGVkdWxlQ29tcG9z
aXRpbmdMYXllclN5bmMoKSB7fTsKKyAgICB2aXJ0dWFsIHZvaWQgYXR0YWNoUm9vdEdyYXBoaWNz
TGF5ZXIoRnJhbWUqLCBHcmFwaGljc0xheWVyKikge30KKyAgICB2aXJ0dWFsIHZvaWQgc2V0TmVl
ZHNPbmVTaG90RHJhd2luZ1N5bmNocm9uaXphdGlvbigpIHt9CisgICAgdmlydHVhbCB2b2lkIHNj
aGVkdWxlQ29tcG9zaXRpbmdMYXllclN5bmMoKSB7fQogI2VuZGlmCiAKICNpZiBQTEFURk9STShX
SU4pCmRpZmYgLS1naXQgYS9XZWJDb3JlL3BhZ2UvQ2hyb21lQ2xpZW50LmggYi9XZWJDb3JlL3Bh
Z2UvQ2hyb21lQ2xpZW50LmgKaW5kZXggZDNlMTY2MjI5MmEzMWE4OWU1YmFhNzQ3MDUyMGE5ODhi
ZTE4MjA3OS4uYmQ5ZGU2YmYyY2Q5ZjZmYzY4NWM1MDEwZTQ3YzIxNDdiN2QxY2Q3NSAxMDA2NDQK
LS0tIGEvV2ViQ29yZS9wYWdlL0Nocm9tZUNsaWVudC5oCisrKyBiL1dlYkNvcmUvcGFnZS9DaHJv
bWVDbGllbnQuaApAQCAtNTcsNiArNTcsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgY2xh
c3MgTm9kZTsKICAgICBjbGFzcyBQYWdlOwogICAgIGNsYXNzIFNlY3VyaXR5T3JpZ2luOworICAg
IGNsYXNzIFNoYXJlZEdyYXBoaWNzQ29udGV4dDNEOwogICAgIGNsYXNzIFBvcHVwTWVudUNsaWVu
dDsKICAgICBjbGFzcyBXaWRnZXQ7CiAKQEAgLTIzMCw2ICsyMzEsOCBAQCBuYW1lc3BhY2UgV2Vi
Q29yZSB7CiAgICAgICAgIHZpcnR1YWwgYm9vbCBhbGxvd3NBY2NlbGVyYXRlZENvbXBvc2l0aW5n
KCkgY29uc3QgeyByZXR1cm4gdHJ1ZTsgfQogI2VuZGlmCiAKKyAgICAgICAgdmlydHVhbCBTaGFy
ZWRHcmFwaGljc0NvbnRleHQzRCogZ2V0U2hhcmVkR3JhcGhpY3NDb250ZXh0M0QoKSB7IHJldHVy
biAwOyB9CisKICAgICAgICAgdmlydHVhbCBib29sIHN1cHBvcnRzRnVsbHNjcmVlbkZvck5vZGUo
Y29uc3QgTm9kZSopIHsgcmV0dXJuIGZhbHNlOyB9CiAgICAgICAgIHZpcnR1YWwgdm9pZCBlbnRl
ckZ1bGxzY3JlZW5Gb3JOb2RlKE5vZGUqKSB7IH0KICAgICAgICAgdmlydHVhbCB2b2lkIGV4aXRG
dWxsc2NyZWVuRm9yTm9kZShOb2RlKikgeyB9CmRpZmYgLS1naXQgYS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dC5jcHAgYi9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L0dyYXBoaWNzQ29udGV4dC5jcHAKaW5kZXggNDczODRiOWVlODRkNmRhMDg2MGYzMTYxYjNiYzA4
MjExOWY0NWJmZi4uZWE2YzQ0ODc0M2IxMTgxNWI4YWM3MWY0N2I3OWQzOGQzOTVhY2ZiMyAxMDA2
NDQKLS0tIGEvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQuY3BwCisr
KyBiL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0LmNwcApAQCAtNTcx
LDYgKzU3MSwxNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6c2V0UGxhdGZvcm1TdHJva2VTdHls
ZShjb25zdCBTdHJva2VTdHlsZSYpCiB9CiAjZW5kaWYKIAorI2lmICFQTEFURk9STShTS0lBKQor
dm9pZCBHcmFwaGljc0NvbnRleHQ6OnNldFNoYXJlZEdyYXBoaWNzQ29udGV4dDNEKFNoYXJlZEdy
YXBoaWNzQ29udGV4dDNEKiwgRHJhd2luZ0J1ZmZlciosIGNvbnN0IEludFNpemUmKQoreworfQor
Cit2b2lkIEdyYXBoaWNzQ29udGV4dDo6c3luY1NvZnR3YXJlQ2FudmFzKCkKK3sKK30KKyNlbmRp
ZgorCisKIHZvaWQgR3JhcGhpY3NDb250ZXh0OjphZGp1c3RMaW5lVG9QaXhlbEJvdW5kYXJpZXMo
RmxvYXRQb2ludCYgcDEsIEZsb2F0UG9pbnQmIHAyLCBmbG9hdCBzdHJva2VXaWR0aCwgY29uc3Qg
U3Ryb2tlU3R5bGUmIHBlblN0eWxlKQogewogICAgIC8vIEZvciBvZGQgd2lkdGhzLCB3ZSBhZGQg
aW4gMC41IHRvIHRoZSBhcHByb3ByaWF0ZSB4L3kgc28gdGhhdCB0aGUgZmxvYXQgYXJpdGhtZXRp
YwpAQCAtNjAwLDE0ICs2MTEsNCBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6YWRqdXN0TGluZVRv
UGl4ZWxCb3VuZGFyaWVzKEZsb2F0UG9pbnQmIHAxLCBGbG9hdFBvaW50JiBwMgogICAgIH0KIH0K
IAotI2lmICFQTEFURk9STShTS0lBKQotdm9pZCBHcmFwaGljc0NvbnRleHQ6OnNldEdyYXBoaWNz
Q29udGV4dDNEKEdyYXBoaWNzQ29udGV4dDNEKiwgY29uc3QgSW50U2l6ZSYpCi17Ci19Ci0KLXZv
aWQgR3JhcGhpY3NDb250ZXh0OjpzeW5jU29mdHdhcmVDYW52YXMoKQotewotfQotI2VuZGlmCi0K
IH0KZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0
LmggYi9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dC5oCmluZGV4IDkz
ZWY4OTAwNjJlZGE1Mjg5OWU0ZDMzZGQxMDkxYTJkMzJmNGQwOGMuLjc4NjIyNzlmOGUyNTM4NjIz
OGFlZWI4Mzg0MGFkNWE0MTYwNDQxODEgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvR3JhcGhpY3NDb250ZXh0LmgKKysrIGIvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9H
cmFwaGljc0NvbnRleHQuaApAQCAtMTIyLDE2ICsxMjIsMTcgQEAgbmFtZXNwYWNlIFdlYkNvcmUg
ewogICAgIGNvbnN0IGludCBjTWlzc3BlbGxpbmdMaW5lUGF0dGVybkdhcFdpZHRoID0gMTsKIAog
ICAgIGNsYXNzIEFmZmluZVRyYW5zZm9ybTsKKyAgICBjbGFzcyBEcmF3aW5nQnVmZmVyOwogICAg
IGNsYXNzIEZvbnQ7CiAgICAgY2xhc3MgR2VuZXJhdG9yOwogICAgIGNsYXNzIEdyYWRpZW50Owot
ICAgIGNsYXNzIEdyYXBoaWNzQ29udGV4dDNEOwogICAgIGNsYXNzIEdyYXBoaWNzQ29udGV4dFBs
YXRmb3JtUHJpdmF0ZTsKICAgICBjbGFzcyBHcmFwaGljc0NvbnRleHRQcml2YXRlOwogICAgIGNs
YXNzIEltYWdlQnVmZmVyOwogICAgIGNsYXNzIEtVUkw7CiAgICAgY2xhc3MgUGF0aDsKICAgICBj
bGFzcyBQYXR0ZXJuOworICAgIGNsYXNzIFNoYXJlZEdyYXBoaWNzQ29udGV4dDNEOwogICAgIGNs
YXNzIFRleHRSdW47CiAKICAgICAvLyBUaGVzZSBiaXRzIGNhbiBiZSBPUmVkIHRvZ2V0aGVyIGZv
ciBhIHRvdGFsIG9mIDggcG9zc2libGUgdGV4dCBkcmF3aW5nIG1vZGVzLgpAQCAtNDEyLDcgKzQx
Myw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgcGF0dGVybiBnZXRIYWlrdVN0cm9r
ZVN0eWxlKCk7CiAjZW5kaWYKIAotICAgICAgICB2b2lkIHNldEdyYXBoaWNzQ29udGV4dDNEKEdy
YXBoaWNzQ29udGV4dDNEKiwgY29uc3QgSW50U2l6ZSYpOworICAgICAgICB2b2lkIHNldFNoYXJl
ZEdyYXBoaWNzQ29udGV4dDNEKFNoYXJlZEdyYXBoaWNzQ29udGV4dDNEKiwgRHJhd2luZ0J1ZmZl
ciosIGNvbnN0IEludFNpemUmKTsKICAgICAgICAgdm9pZCBzeW5jU29mdHdhcmVDYW52YXMoKTsK
IAogICAgIHByaXZhdGU6CmRpZmYgLS1naXQgYS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2No
cm9taXVtL0NhbnZhczJETGF5ZXJDaHJvbWl1bS5jcHAgYi9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2Nocm9taXVtL0NhbnZhczJETGF5ZXJDaHJvbWl1bS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMzQ1YzQy
MDJiNDkyOTQ5MjhhYTU2ZmVmNjNjZTg0MDI3NGIwN2E4NAotLS0gL2Rldi9udWxsCisrKyBiL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vQ2FudmFzMkRMYXllckNocm9taXVtLmNw
cApAQCAtMCwwICsxLDEwNCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMCBHb29nbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFy
ZQorICogbWV0OgorICoKKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgICAgKiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiBjb3B5
cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyCisgKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlCisgKiBkaXN0cmlidXRpb24uCisgKiAgICAgKiBOZWl0aGVyIHRo
ZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisgKiBjb250cmlidXRv
cnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJv
bQorICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlz
c2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQg
SE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhF
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisg
KiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwg
VEhFIENPUFlSSUdIVAorICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9S
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRP
LCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKworI2lmIFVTRShBQ0NFTEVS
QVRFRF9DT01QT1NJVElORykKKworI2luY2x1ZGUgIkNhbnZhczJETGF5ZXJDaHJvbWl1bS5oIgor
CisjaW5jbHVkZSAiRHJhd2luZ0J1ZmZlci5oIgorCisjaW5jbHVkZSA8R0xFUzIvZ2wyLmg+CisK
K25hbWVzcGFjZSBXZWJDb3JlIHsKKworUGFzc1JlZlB0cjxDYW52YXMyRExheWVyQ2hyb21pdW0+
IENhbnZhczJETGF5ZXJDaHJvbWl1bTo6Y3JlYXRlKERyYXdpbmdCdWZmZXIqIGRyYXdpbmdCdWZm
ZXIsIEdyYXBoaWNzTGF5ZXJDaHJvbWl1bSogb3duZXIpCit7CisgICAgcmV0dXJuIGFkb3B0UmVm
KG5ldyBDYW52YXMyRExheWVyQ2hyb21pdW0oZHJhd2luZ0J1ZmZlciwgb3duZXIpKTsKK30KKwor
Q2FudmFzMkRMYXllckNocm9taXVtOjpDYW52YXMyRExheWVyQ2hyb21pdW0oRHJhd2luZ0J1ZmZl
ciogZHJhd2luZ0J1ZmZlciwgR3JhcGhpY3NMYXllckNocm9taXVtKiBvd25lcikKKyAgICA6IENh
bnZhc0xheWVyQ2hyb21pdW0ob3duZXIpCisgICAgLCBtX2RyYXdpbmdCdWZmZXIoZHJhd2luZ0J1
ZmZlcikKK3sKK30KKworQ2FudmFzMkRMYXllckNocm9taXVtOjp+Q2FudmFzMkRMYXllckNocm9t
aXVtKCkKK3sKKyAgICBpZiAobV90ZXh0dXJlSWQpCisgICAgICAgIGdsRGVsZXRlVGV4dHVyZXMo
MSwgJm1fdGV4dHVyZUlkKTsKK30KKwordm9pZCBDYW52YXMyRExheWVyQ2hyb21pdW06OnVwZGF0
ZUNvbnRlbnRzKCkKK3sKKyAgICBpZiAoIW1fZHJhd2luZ0J1ZmZlcikKKyAgICAgICAgcmV0dXJu
OworICAgIGlmIChtX3RleHR1cmVDaGFuZ2VkKSB7IC8vIFdlIGhhdmUgdG8gZ2VuZXJhdGUgYSBu
ZXcgYmFja2luZyB0ZXh0dXJlLgorICAgICAgICBpZiAobV90ZXh0dXJlSWQpCisgICAgICAgICAg
ICBnbERlbGV0ZVRleHR1cmVzKDEsICZtX3RleHR1cmVJZCk7CisgICAgICAgIGdsR2VuVGV4dHVy
ZXMoMSwgJm1fdGV4dHVyZUlkKTsKKyAgICAgICAgZ2xBY3RpdmVUZXh0dXJlKEdMX1RFWFRVUkUw
KTsKKyAgICAgICAgZ2xCaW5kVGV4dHVyZShHTF9URVhUVVJFXzJELCBtX3RleHR1cmVJZCk7Cisg
ICAgICAgIEludFNpemUgc2l6ZSA9IG1fZHJhd2luZ0J1ZmZlci0+c2l6ZSgpOworICAgICAgICBn
bFRleEltYWdlMkQoR0xfVEVYVFVSRV8yRCwgMCwgR0xfUkdCQSwgc2l6ZS53aWR0aCgpLCBzaXpl
LmhlaWdodCgpLCAwLCBHTF9SR0JBLCBHTF9VTlNJR05FRF9CWVRFLCAwKTsKKyAgICAgICAgLy8g
U2V0IHRoZSBtaW4tbWFnIGZpbHRlcnMgdG8gbGluZWFyIGFuZCB3cmFwIG1vZGVzIHRvIEdMX0NM
QU1QX1RPX0VER0UKKyAgICAgICAgLy8gdG8gZ2V0IGFyb3VuZCBOUE9UIHRleHR1cmUgbGltaXRh
dGlvbnMgb2YgR0xFUy4KKyAgICAgICAgZ2xUZXhQYXJhbWV0ZXJpKEdMX1RFWFRVUkVfMkQsIEdM
X1RFWFRVUkVfTUlOX0ZJTFRFUiwgR0xfTElORUFSKTsKKyAgICAgICAgZ2xUZXhQYXJhbWV0ZXJp
KEdMX1RFWFRVUkVfMkQsIEdMX1RFWFRVUkVfTUFHX0ZJTFRFUiwgR0xfTElORUFSKTsKKyAgICAg
ICAgZ2xUZXhQYXJhbWV0ZXJpKEdMX1RFWFRVUkVfMkQsIEdMX1RFWFRVUkVfV1JBUF9TLCBHTF9D
TEFNUF9UT19FREdFKTsKKyAgICAgICAgZ2xUZXhQYXJhbWV0ZXJpKEdMX1RFWFRVUkVfMkQsIEdM
X1RFWFRVUkVfV1JBUF9ULCBHTF9DTEFNUF9UT19FREdFKTsKKyAgICAgICAgbV90ZXh0dXJlQ2hh
bmdlZCA9IGZhbHNlOworICAgICAgICAvLyBGSVhNRTogVGhlIGdsRmluaXNoKCkgaGVyZSBpcyBy
ZXF1aXJlZCBiZWNhdXNlIHdlIGhhdmUgdG8gbWFrZSBzdXJlIHRoYXQgdGhlIHRleHR1cmUgY3Jl
YXRlZCBpbiB0aGlzCisgICAgICAgIC8vIGNvbnRleHQgKHRoZSBjb21wb3NpdG9yIGNvbnRleHQp
IGlzIGFjdHVhbGx5IGNyZWF0ZWQgYnkgdGhlIHNlcnZpY2Ugc2lkZSBiZWZvcmUgdGhlIGNoaWxk
IGNvbnRleHQKKyAgICAgICAgLy8gYXR0ZW1wdHMgdG8gdXNlIGl0IChpbiBwdWJsaXNoVG9QbGF0
Zm9ybUxheWVyKS4gIGdsRmluaXNoKCkgaXMgY3VycmVudGx5IHRoZSBvbmx5IGNhbGwgd2l0aCBz
dHJvbmcKKyAgICAgICAgLy8gZW5vdWdoIHNlbWFudGljcyB0byBwcm9taXNlIHRoaXMsIGJ1dCBp
cyBhY3R1YWxseSBtdWNoIHN0cm9uZ2VyLiAgSWRlYWxseSB3ZSdkIGRvIHNvbWV0aGluZyBsaWtl
CisgICAgICAgIC8vIGluc2VydGluZyBhIGZlbmNlIGhlcmUgYW5kIHdhaXRpbmcgZm9yIGl0IGJl
Zm9yZSB0cnlpbmcgdG8gcHVibGlzaC4KKyAgICAgICAgZ2xGaW5pc2goKTsKKyAgICB9CisgICAg
Ly8gVXBkYXRlIHRoZSBjb250ZW50cyBvZiB0aGUgdGV4dHVyZSB1c2VkIGJ5IHRoZSBjb21wb3Np
dG9yLgorICAgIGlmIChtX2NvbnRlbnRzRGlydHkpIHsKKyAgICAgICAgbV9kcmF3aW5nQnVmZmVy
LT5wdWJsaXNoVG9QbGF0Zm9ybUxheWVyKCk7CisgICAgICAgIG1fY29udGVudHNEaXJ0eSA9IGZh
bHNlOworICAgIH0KK30KKwordm9pZCBDYW52YXMyRExheWVyQ2hyb21pdW06OnNldFRleHR1cmVD
aGFuZ2VkKCkKK3sKKyAgICBtX3RleHR1cmVDaGFuZ2VkID0gdHJ1ZTsKK30KKwordW5zaWduZWQg
Q2FudmFzMkRMYXllckNocm9taXVtOjp0ZXh0dXJlSWQoKSBjb25zdAoreworICAgIHJldHVybiBt
X3RleHR1cmVJZDsKK30KKworfQorI2VuZGlmIC8vIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElO
RykKZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vQ2FudmFz
MkRMYXllckNocm9taXVtLmggYi9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0Nh
bnZhczJETGF5ZXJDaHJvbWl1bS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjQ2OTNjMGI5NDEzMGVlNWZmNzFlZWZl
NzFkYjNhMzNmZDQ3YTI2ODAKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2Nocm9taXVtL0NhbnZhczJETGF5ZXJDaHJvbWl1bS5oCkBAIC0wLDAgKzEsNjQgQEAK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyAqIG1ldDoKKyAqCisgKiAg
ICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorICogaW4gdGhl
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQor
ICogZGlzdHJpYnV0aW9uLgorICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5j
LiBub3IgdGhlIG5hbWVzIG9mIGl0cworICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVu
ZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyAqIHRoaXMgc29mdHdhcmUg
d2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJV
VE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIE9X
TkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkK
KyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisK
KyNpZm5kZWYgQ2FudmFzMkRMYXllckNocm9taXVtX2gKKyNkZWZpbmUgQ2FudmFzMkRMYXllckNo
cm9taXVtX2gKKworI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKKworI2luY2x1ZGUg
IkNhbnZhc0xheWVyQ2hyb21pdW0uaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBE
cmF3aW5nQnVmZmVyOworCisvLyBBIGxheWVyIGNvbnRhaW5pbmcgYW4gYWNjZWxlcmF0ZWQgMmQg
Y2FudmFzCitjbGFzcyBDYW52YXMyRExheWVyQ2hyb21pdW0gOiBwdWJsaWMgQ2FudmFzTGF5ZXJD
aHJvbWl1bSB7CitwdWJsaWM6CisgICAgc3RhdGljIFBhc3NSZWZQdHI8Q2FudmFzMkRMYXllckNo
cm9taXVtPiBjcmVhdGUoRHJhd2luZ0J1ZmZlciosIEdyYXBoaWNzTGF5ZXJDaHJvbWl1bSogb3du
ZXIpOworICAgIHZpcnR1YWwgfkNhbnZhczJETGF5ZXJDaHJvbWl1bSgpOworICAgIHZpcnR1YWwg
Ym9vbCBkcmF3c0NvbnRlbnQoKSB7IHJldHVybiB0cnVlOyB9CisgICAgdmlydHVhbCB2b2lkIHVw
ZGF0ZUNvbnRlbnRzKCk7CisKKyAgICB2b2lkIHNldFRleHR1cmVDaGFuZ2VkKCk7CisgICAgdW5z
aWduZWQgdGV4dHVyZUlkKCkgY29uc3Q7CisKK3ByaXZhdGU6CisgICAgZXhwbGljaXQgQ2FudmFz
MkRMYXllckNocm9taXVtKERyYXdpbmdCdWZmZXIqLCBHcmFwaGljc0xheWVyQ2hyb21pdW0qIG93
bmVyKTsKKyAgICBEcmF3aW5nQnVmZmVyKiBtX2RyYXdpbmdCdWZmZXI7CisKKyAgICBzdGF0aWMg
dW5zaWduZWQgbV9zaGFkZXJQcm9ncmFtSWQ7Cit9OworCit9CisjZW5kaWYgLy8gVVNFKEFDQ0VM
RVJBVEVEX0NPTVBPU0lUSU5HKQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY2hyb21pdW0vQ2FudmFzTGF5ZXJDaHJvbWl1bS5jcHAgYi9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0NhbnZhc0xheWVyQ2hyb21pdW0uY3BwCmluZGV4IGJi
ZjA5MWMyYTY3MGQ3YzM2ZTkyMzhlMWI4Y2MzNTBiYTM4M2U4MTAuLjU2YTcyNjIyMWU1YjA2ZTk1
NmU3NjVlMGEzNWQxYzdhZjk1M2YyNDEgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY2hyb21pdW0vQ2FudmFzTGF5ZXJDaHJvbWl1bS5jcHAKKysrIGIvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9DYW52YXNMYXllckNocm9taXVtLmNwcApAQCAtMzQsMTIg
KzM0LDE0IEBACiAKICNpbmNsdWRlICJDYW52YXNMYXllckNocm9taXVtLmgiCiAKLSNpbmNsdWRl
ICJHcmFwaGljc0NvbnRleHQzRC5oIgogI2luY2x1ZGUgIkxheWVyUmVuZGVyZXJDaHJvbWl1bS5o
IgorCiAjaW5jbHVkZSA8R0xFUzIvZ2wyLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAordW5z
aWduZWQgQ2FudmFzTGF5ZXJDaHJvbWl1bTo6bV9zaGFkZXJQcm9ncmFtSWQgPSAwOworCiBDYW52
YXNMYXllckNocm9taXVtOjpTaGFyZWRWYWx1ZXM6OlNoYXJlZFZhbHVlcygpCiAgICAgOiBtX2Nh
bnZhc1NoYWRlclByb2dyYW0oMCkKICAgICAsIG1fc2hhZGVyU2FtcGxlckxvY2F0aW9uKC0xKQpA
QCAtOTMsNDkgKzk1LDE1IEBAIENhbnZhc0xheWVyQ2hyb21pdW06OlNoYXJlZFZhbHVlczo6flNo
YXJlZFZhbHVlcygpCiAgICAgICAgIEdMQyhnbERlbGV0ZVByb2dyYW0obV9jYW52YXNTaGFkZXJQ
cm9ncmFtKSk7CiB9CiAKLVBhc3NSZWZQdHI8Q2FudmFzTGF5ZXJDaHJvbWl1bT4gQ2FudmFzTGF5
ZXJDaHJvbWl1bTo6Y3JlYXRlKEdyYXBoaWNzTGF5ZXJDaHJvbWl1bSogb3duZXIpCi17Ci0gICAg
cmV0dXJuIGFkb3B0UmVmKG5ldyBDYW52YXNMYXllckNocm9taXVtKG93bmVyKSk7Ci19Ci0KIENh
bnZhc0xheWVyQ2hyb21pdW06OkNhbnZhc0xheWVyQ2hyb21pdW0oR3JhcGhpY3NMYXllckNocm9t
aXVtKiBvd25lcikKICAgICA6IExheWVyQ2hyb21pdW0ob3duZXIpCi0gICAgLCBtX2NvbnRleHQo
MCkKKyAgICAsIG1fdGV4dHVyZUNoYW5nZWQodHJ1ZSkKICAgICAsIG1fdGV4dHVyZUlkKDApCi0g
ICAgLCBtX3RleHR1cmVDaGFuZ2VkKGZhbHNlKQotewotfQotCi12b2lkIENhbnZhc0xheWVyQ2hy
b21pdW06OnVwZGF0ZUNvbnRlbnRzKCkKIHsKLSAgICBBU1NFUlQobV9jb250ZXh0KTsKLSAgICBp
ZiAobV90ZXh0dXJlQ2hhbmdlZCkgewotICAgICAgICBnbEJpbmRUZXh0dXJlKEdMX1RFWFRVUkVf
MkQsIG1fdGV4dHVyZUlkKTsKLSAgICAgICAgLy8gU2V0IHRoZSBtaW4tbWFnIGZpbHRlcnMgdG8g
bGluZWFyIGFuZCB3cmFwIG1vZGVzIHRvIEdMX0NMQU1QX1RPX0VER0UKLSAgICAgICAgLy8gdG8g
Z2V0IGFyb3VuZCBOUE9UIHRleHR1cmUgbGltaXRhdGlvbnMgb2YgR0xFUy4KLSAgICAgICAgZ2xU
ZXhQYXJhbWV0ZXJmKEdMX1RFWFRVUkVfMkQsIEdMX1RFWFRVUkVfTUlOX0ZJTFRFUiwgR0xfTElO
RUFSKTsKLSAgICAgICAgZ2xUZXhQYXJhbWV0ZXJmKEdMX1RFWFRVUkVfMkQsIEdMX1RFWFRVUkVf
TUFHX0ZJTFRFUiwgR0xfTElORUFSKTsKLSAgICAgICAgZ2xUZXhQYXJhbWV0ZXJmKEdMX1RFWFRV
UkVfMkQsIEdMX1RFWFRVUkVfV1JBUF9TLCBHTF9DTEFNUF9UT19FREdFKTsKLSAgICAgICAgZ2xU
ZXhQYXJhbWV0ZXJmKEdMX1RFWFRVUkVfMkQsIEdMX1RFWFRVUkVfV1JBUF9ULCBHTF9DTEFNUF9U
T19FREdFKTsKLSAgICAgICAgbV90ZXh0dXJlQ2hhbmdlZCA9IGZhbHNlOwotICAgIH0KLSAgICAv
LyBVcGRhdGUgdGhlIGNvbnRlbnRzIG9mIHRoZSB0ZXh0dXJlIHVzZWQgYnkgdGhlIGNvbXBvc2l0
b3IuCi0gICAgaWYgKG1fY29udGVudHNEaXJ0eSkgewotICAgICAgICBpZiAobV9wcmVwYXJlVGV4
dHVyZUNhbGxiYWNrKQotICAgICAgICAgICAgbV9wcmVwYXJlVGV4dHVyZUNhbGxiYWNrLT53aWxs
UHJlcGFyZVRleHR1cmUoKTsKLSAgICAgICAgbV9jb250ZXh0LT5wcmVwYXJlVGV4dHVyZSgpOwot
ICAgICAgICBtX2NvbnRlbnRzRGlydHkgPSBmYWxzZTsKLSAgICB9CiB9CiAKLXZvaWQgQ2FudmFz
TGF5ZXJDaHJvbWl1bTo6c2V0Q29udGV4dChjb25zdCBHcmFwaGljc0NvbnRleHQzRCogY29udGV4
dCkKK0NhbnZhc0xheWVyQ2hyb21pdW06On5DYW52YXNMYXllckNocm9taXVtKCkKIHsKLSAgICBt
X2NvbnRleHQgPSBjb25zdF9jYXN0PEdyYXBoaWNzQ29udGV4dDNEKj4oY29udGV4dCk7Ci0KLSAg
ICB1bnNpZ25lZCBpbnQgdGV4dHVyZUlkID0gbV9jb250ZXh0LT5wbGF0Zm9ybVRleHR1cmUoKTsK
LSAgICBpZiAodGV4dHVyZUlkICE9IG1fdGV4dHVyZUlkKQotICAgICAgICBtX3RleHR1cmVDaGFu
Z2VkID0gdHJ1ZTsKLSAgICBtX3RleHR1cmVJZCA9IHRleHR1cmVJZDsKIH0KIAogdm9pZCBDYW52
YXNMYXllckNocm9taXVtOjpkcmF3KCkKQEAgLTE1MCw2ICsxMTgsNyBAQCB2b2lkIENhbnZhc0xh
eWVyQ2hyb21pdW06OmRyYXcoKQogICAgIGRyYXdUZXh0dXJlZFF1YWQobGF5ZXJSZW5kZXJlcigp
LT5wcm9qZWN0aW9uTWF0cml4KCksIGRyYXdUcmFuc2Zvcm0oKSwKICAgICAgICAgICAgICAgICAg
ICAgIGJvdW5kcygpLndpZHRoKCksIGJvdW5kcygpLmhlaWdodCgpLCBkcmF3T3BhY2l0eSgpLAog
ICAgICAgICAgICAgICAgICAgICAgc3YtPnNoYWRlck1hdHJpeExvY2F0aW9uKCksIHN2LT5zaGFk
ZXJBbHBoYUxvY2F0aW9uKCkpOworCiB9CiAKIH0KZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY2hyb21pdW0vQ2FudmFzTGF5ZXJDaHJvbWl1bS5oIGIvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9DYW52YXNMYXllckNocm9taXVtLmgKaW5kZXggMDUzZWZm
ZmEwMWUxNDI4MzgxMjE0NTNjMWE0YjhhMTk0YjZmYTRjMS4uZDU5MWM3Mzc1OTkwNGY4ZDI5MWQ3
MTcwY2NjM2FhMGU2ZTMzMWYxYiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jaHJvbWl1bS9DYW52YXNMYXllckNocm9taXVtLmgKKysrIGIvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jaHJvbWl1bS9DYW52YXNMYXllckNocm9taXVtLmgKQEAgLTM4LDE3ICszOCwxMiBA
QAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLWNsYXNzIEdyYXBoaWNzQ29udGV4dDNEOwotCi0v
LyBBIExheWVyIGNvbnRhaW5pbmcgYSBXZWJHTCBvciBhY2NlbGVyYXRlZCAyZCBjYW52YXMKKy8v
IEJhc2UgY2xhc3MgZm9yIFdlYkdMIGFuZCBhY2NlbGVyYXRlZCAyZCBjYW52YXNlcy4KIGNsYXNz
IENhbnZhc0xheWVyQ2hyb21pdW0gOiBwdWJsaWMgTGF5ZXJDaHJvbWl1bSB7CiBwdWJsaWM6Ci0g
ICAgc3RhdGljIFBhc3NSZWZQdHI8Q2FudmFzTGF5ZXJDaHJvbWl1bT4gY3JlYXRlKEdyYXBoaWNz
TGF5ZXJDaHJvbWl1bSogb3duZXIgPSAwKTsKLSAgICB2aXJ0dWFsIGJvb2wgZHJhd3NDb250ZW50
KCkgeyByZXR1cm4gbV9jb250ZXh0OyB9Ci0gICAgdmlydHVhbCB2b2lkIHVwZGF0ZUNvbnRlbnRz
KCk7Ci0gICAgdmlydHVhbCB2b2lkIGRyYXcoKTsKKyAgICB2aXJ0dWFsIH5DYW52YXNMYXllckNo
cm9taXVtKCk7CiAKLSAgICB2b2lkIHNldENvbnRleHQoY29uc3QgR3JhcGhpY3NDb250ZXh0M0Qq
IGNvbnRleHQpOworICAgIHZpcnR1YWwgdm9pZCBkcmF3KCk7CiAKICAgICBjbGFzcyBTaGFyZWRW
YWx1ZXMgewogICAgIHB1YmxpYzoKQEAgLTY5LDIxICs2NCwxNiBAQCBwdWJsaWM6CiAgICAgICAg
IGJvb2wgbV9pbml0aWFsaXplZDsKICAgICB9OwogCi0gICAgY2xhc3MgUHJlcGFyZVRleHR1cmVD
YWxsYmFjayA6IHB1YmxpYyBOb25jb3B5YWJsZSB7Ci0gICAgcHVibGljOgotICAgICAgICB2aXJ0
dWFsIHZvaWQgd2lsbFByZXBhcmVUZXh0dXJlKCkgPSAwOwotICAgIH07Ci0gICAgdm9pZCBzZXRQ
cmVwYXJlVGV4dHVyZUNhbGxiYWNrKFBhc3NPd25QdHI8UHJlcGFyZVRleHR1cmVDYWxsYmFjaz4g
Y2FsbGJhY2spIHsgbV9wcmVwYXJlVGV4dHVyZUNhbGxiYWNrID0gY2FsbGJhY2s7IH0KLQotcHJp
dmF0ZToKK3Byb3RlY3RlZDoKICAgICBleHBsaWNpdCBDYW52YXNMYXllckNocm9taXVtKEdyYXBo
aWNzTGF5ZXJDaHJvbWl1bSogb3duZXIpOwotICAgIEdyYXBoaWNzQ29udGV4dDNEKiBtX2NvbnRl
eHQ7Ci0gICAgdW5zaWduZWQgbV90ZXh0dXJlSWQ7CiAgICAgYm9vbCBtX3RleHR1cmVDaGFuZ2Vk
OwotICAgIE93blB0cjxQcmVwYXJlVGV4dHVyZUNhbGxiYWNrPiBtX3ByZXBhcmVUZXh0dXJlQ2Fs
bGJhY2s7CisgICAgdW5zaWduZWQgbV90ZXh0dXJlSWQ7CisKK3ByaXZhdGU6CisgICAgc3RhdGlj
IHVuc2lnbmVkIG1fc2hhZGVyUHJvZ3JhbUlkOwogfTsKIAogfQogI2VuZGlmIC8vIFVTRShBQ0NF
TEVSQVRFRF9DT01QT1NJVElORykKIAotI2VuZGlmCisjZW5kaWYgLy8gQ2FudmFzTGF5ZXJDaHJv
bWl1bV9oCmRpZmYgLS1naXQgYS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0Ry
YXdpbmdCdWZmZXJDaHJvbWl1bS5jcHAgYi9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9t
aXVtL0RyYXdpbmdCdWZmZXJDaHJvbWl1bS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uOGU2ZjEwMzAyNjI4NDQ3
MWQ2MWMxM2UzMWEyYTcxYzU5ZmE2ZjJlOAotLS0gL2Rldi9udWxsCisrKyBiL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vRHJhd2luZ0J1ZmZlckNocm9taXVtLmNwcApAQCAtMCww
ICsxLDEyMCBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAxMCwgR29vZ2xlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyAqIG1l
dDoKKyAqCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICAgICogUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
cgorICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZQorICogZGlzdHJpYnV0aW9uLgorICogICAgICogTmVpdGhlciB0aGUgbmFtZSBv
ZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworICogY29udHJpYnV0b3JzIG1heSBi
ZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyAqIHRo
aXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisg
KgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMg
QU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorICogQSBQQVJU
SUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZ
UklHSFQKKyAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VS
RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBE
QVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisKKyNpbmNsdWRlICJEcmF3aW5nQnVmZmVy
LmgiCisKKyNpbmNsdWRlICJDYW52YXMyRExheWVyQ2hyb21pdW0uaCIKKyNpbmNsdWRlICJHcmFw
aGljc0NvbnRleHQzRC5oIgorI2luY2x1ZGUgIlNoYXJlZEdyYXBoaWNzQ29udGV4dDNELmgiCisK
KyNpbmNsdWRlIDxHTEVTMi9nbDIuaD4KKyNpZm5kZWYgR0xfR0xFWFRfUFJPVE9UWVBFUworI2Rl
ZmluZSBHTF9HTEVYVF9QUk9UT1RZUEVTIDEKKyNlbmRpZgorI2luY2x1ZGUgPEdMRVMyL2dsMmV4
dC5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK3N0cnVjdCBEcmF3aW5nQnVmZmVySW50ZXJu
YWwgeworICAgIHVuc2lnbmVkIG9mZnNjcmVlbkNvbG9yVGV4dHVyZTsKKyAgICBSZWZQdHI8Q2Fu
dmFzMkRMYXllckNocm9taXVtPiBwbGF0Zm9ybUxheWVyOworfTsKKworc3RhdGljIHVuc2lnbmVk
IGdlbmVyYXRlQ29sb3JUZXh0dXJlKFNoYXJlZEdyYXBoaWNzQ29udGV4dDNEKiBjb250ZXh0LCBj
b25zdCBJbnRTaXplJiBzaXplKQoreworICAgIHVuc2lnbmVkIG9mZnNjcmVlbkNvbG9yVGV4dHVy
ZSA9IGNvbnRleHQtPmNyZWF0ZVRleHR1cmUoKTsKKyAgICBpZiAoIW9mZnNjcmVlbkNvbG9yVGV4
dHVyZSkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICBjb250ZXh0LT5iaW5kVGV4dHVyZShHcmFw
aGljc0NvbnRleHQzRDo6VEVYVFVSRV8yRCwgb2Zmc2NyZWVuQ29sb3JUZXh0dXJlKTsKKyAgICBj
b250ZXh0LT50ZXhQYXJhbWV0ZXJpKEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFXzJELCBHcmFw
aGljc0NvbnRleHQzRDo6VEVYVFVSRV9NQUdfRklMVEVSLCBHcmFwaGljc0NvbnRleHQzRDo6TkVB
UkVTVCk7CisgICAgY29udGV4dC0+dGV4UGFyYW1ldGVyaShHcmFwaGljc0NvbnRleHQzRDo6VEVY
VFVSRV8yRCwgR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfTUlOX0ZJTFRFUiwgR3JhcGhpY3ND
b250ZXh0M0Q6Ok5FQVJFU1QpOworICAgIGNvbnRleHQtPnRleFBhcmFtZXRlcmkoR3JhcGhpY3ND
b250ZXh0M0Q6OlRFWFRVUkVfMkQsIEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFX1dSQVBfUywg
R3JhcGhpY3NDb250ZXh0M0Q6OkNMQU1QX1RPX0VER0UpOworICAgIGNvbnRleHQtPnRleFBhcmFt
ZXRlcmkoR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQsIEdyYXBoaWNzQ29udGV4dDNEOjpU
RVhUVVJFX1dSQVBfVCwgR3JhcGhpY3NDb250ZXh0M0Q6OkNMQU1QX1RPX0VER0UpOworICAgIGNv
bnRleHQtPnRleEltYWdlMkQoR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQsIDAsIEdyYXBo
aWNzQ29udGV4dDNEOjpSR0JBLCBzaXplLndpZHRoKCksIHNpemUuaGVpZ2h0KCksIDAsIEdyYXBo
aWNzQ29udGV4dDNEOjpSR0JBLCBHcmFwaGljc0NvbnRleHQzRDo6VU5TSUdORURfQllURSwgMCk7
CisgICAgY29udGV4dC0+ZnJhbWVidWZmZXJUZXh0dXJlMkQoR3JhcGhpY3NDb250ZXh0M0Q6OkZS
QU1FQlVGRkVSLCBHcmFwaGljc0NvbnRleHQzRDo6Q09MT1JfQVRUQUNITUVOVDAsIEdyYXBoaWNz
Q29udGV4dDNEOjpURVhUVVJFXzJELCBvZmZzY3JlZW5Db2xvclRleHR1cmUsIDApOworCisgICAg
cmV0dXJuIG9mZnNjcmVlbkNvbG9yVGV4dHVyZTsKK30KKworCitEcmF3aW5nQnVmZmVyOjpEcmF3
aW5nQnVmZmVyKFNoYXJlZEdyYXBoaWNzQ29udGV4dDNEKiBjb250ZXh0LCBjb25zdCBJbnRTaXpl
JiBzaXplLCB1bnNpZ25lZCBmcmFtZWJ1ZmZlcikKKyAgICA6IG1fY29udGV4dChjb250ZXh0KQor
ICAgICwgbV9zaXplKHNpemUpCisgICAgLCBtX2ZyYW1lYnVmZmVyKGZyYW1lYnVmZmVyKQorICAg
ICwgbV9pbnRlcm5hbChuZXcgRHJhd2luZ0J1ZmZlckludGVybmFsKQoreworICAgIGNvbnRleHQt
PmJpbmRGcmFtZWJ1ZmZlcihmcmFtZWJ1ZmZlcik7CisgICAgbV9pbnRlcm5hbC0+b2Zmc2NyZWVu
Q29sb3JUZXh0dXJlID0gZ2VuZXJhdGVDb2xvclRleHR1cmUoY29udGV4dCwgc2l6ZSk7Cit9CisK
K0RyYXdpbmdCdWZmZXI6On5EcmF3aW5nQnVmZmVyKCkKK3sKKyAgICBtX2NvbnRleHQtPmRlbGV0
ZUZyYW1lYnVmZmVyKG1fZnJhbWVidWZmZXIpOworfQorCit2b2lkIERyYXdpbmdCdWZmZXI6OnB1
Ymxpc2hUb1BsYXRmb3JtTGF5ZXIoKQoreworICAgIGlmIChtX2NhbGxiYWNrKQorICAgICAgICBt
X2NhbGxiYWNrLT53aWxsUHVibGlzaCgpOworICAgIHVuc2lnbmVkIHBhcmVudFRleHR1cmUgPSBt
X2ludGVybmFsLT5wbGF0Zm9ybUxheWVyLT50ZXh0dXJlSWQoKTsKKyAgICAvLyBGSVhNRTogV2Ug
ZG8gdGhlIGNvcHkgaW4gdGhlIGNhbnZhcycgKGNoaWxkKSBjb250ZXh0IHNvIHRoYXQgaXQgZXhl
Y3V0ZXMgaW4gdGhlIGNvcnJlY3Qgb3JkZXIgcmVsYXRpdmUgdG8KKyAgICAvLyBvdGhlciBjb21t
YW5kcyBpbiB0aGUgY2hpbGQgY29udGV4dC4gIFRoaXMgZW5zdXJlcyB0aGF0IHRoZSBwYXJlbnQg
dGV4dHVyZSBhbHdheXMgY29udGFpbnMgYSBjb21wbGV0ZQorICAgIC8vIGZyYW1lIGFuZCBub3Qg
c29tZSBpbnRlcm1lZGlhdGUgcmVzdWx0LiAgSG93ZXZlciwgdGhlcmUgaXMgbm8gc3luY2hyb25p
emF0aW9uIHRvIGVuc3VyZSB0aGF0IHRoaXMgY29weQorICAgIC8vIGhhcHBlbnMgYmVmb3JlIHRo
ZSBjb21wb3NpdG9yIGRyYXdzLiAgVGhpcyBtZWFucyB3ZSBtaWdodCBkcmF3IHN0YWxlIGZyYW1l
cyBzb21ldGltZXMuICBJZGVhbGx5IHRoaXMKKyAgICAvLyB3b3VsZCBpbnNlcnQgYSBmZW5jZSBp
bnRvIHRoZSBjaGlsZCBjb21tYW5kIHN0cmVhbSB0aGF0IHRoZSBjb21wb3NpdG9yIGNvdWxkIHdh
aXQgZm9yLgorICAgIG1fY29udGV4dC0+bWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgZ2xDb3B5
VGV4dHVyZVRvUGFyZW50VGV4dHVyZShtX2ludGVybmFsLT5vZmZzY3JlZW5Db2xvclRleHR1cmUs
IHBhcmVudFRleHR1cmUpOworICAgIGdsRmx1c2goKTsKK30KKwordm9pZCBEcmF3aW5nQnVmZmVy
OjpyZXNldChjb25zdCBJbnRTaXplJiBuZXdTaXplKQoreworICAgIGlmIChtX3NpemUgPT0gbmV3
U2l6ZSkKKyAgICAgICAgcmV0dXJuOworICAgIG1fc2l6ZSA9IG5ld1NpemU7CisgICAgbV9jb250
ZXh0LT5kZWxldGVUZXh0dXJlKG1faW50ZXJuYWwtPm9mZnNjcmVlbkNvbG9yVGV4dHVyZSk7Cisg
ICAgbV9jb250ZXh0LT5iaW5kRnJhbWVidWZmZXIobV9mcmFtZWJ1ZmZlcik7CisgICAgbV9pbnRl
cm5hbC0+b2Zmc2NyZWVuQ29sb3JUZXh0dXJlID0gZ2VuZXJhdGVDb2xvclRleHR1cmUobV9jb250
ZXh0LCBtX3NpemUpOworCisgICAgaWYgKG1faW50ZXJuYWwtPnBsYXRmb3JtTGF5ZXIpCisgICAg
ICAgIG1faW50ZXJuYWwtPnBsYXRmb3JtTGF5ZXItPnNldFRleHR1cmVDaGFuZ2VkKCk7Cit9CisK
K1BsYXRmb3JtTGF5ZXIqIERyYXdpbmdCdWZmZXI6OnBsYXRmb3JtTGF5ZXIoKQoreworICAgIGlm
ICghbV9pbnRlcm5hbC0+cGxhdGZvcm1MYXllcikKKyAgICAgICAgbV9pbnRlcm5hbC0+cGxhdGZv
cm1MYXllciA9IENhbnZhczJETGF5ZXJDaHJvbWl1bTo6Y3JlYXRlKHRoaXMsIDApOworICAgIHJl
dHVybiBtX2ludGVybmFsLT5wbGF0Zm9ybUxheWVyLmdldCgpOworfQorCit9CmRpZmYgLS1naXQg
YS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0dMRVMyQ2FudmFzLmNwcCBiL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vR0xFUzJDYW52YXMuY3BwCmluZGV4IDgy
ZDRjMGIwMzNhMTRmOTFlNTY2ZjdiNGVlYTA4YjA2NjkyZWJiZDMuLjQ2YWVjZjQ3MjAzNTZjMjQ5
YzJlYzAzMzQ2MWIwNmFlMDUzOWM4YmYgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY2hyb21pdW0vR0xFUzJDYW52YXMuY3BwCisrKyBiL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY2hyb21pdW0vR0xFUzJDYW52YXMuY3BwCkBAIC0zMiwxMCArMzIsMTIgQEAKIAogI2lu
Y2x1ZGUgIkdMRVMyQ2FudmFzLmgiCiAKKyNpbmNsdWRlICJEcmF3aW5nQnVmZmVyLmgiCiAjaW5j
bHVkZSAiRmxvYXRSZWN0LmgiCiAjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0M0QuaCIKICNpbmNs
dWRlICJJbnRSZWN0LmgiCiAjaW5jbHVkZSAiUGxhdGZvcm1TdHJpbmcuaCIKKyNpbmNsdWRlICJT
aGFyZWRHcmFwaGljc0NvbnRleHQzRC5oIgogI2luY2x1ZGUgIlNvbGlkRmlsbFNoYWRlci5oIgog
I2luY2x1ZGUgIlRleFNoYWRlci5oIgogI2luY2x1ZGUgIlRleHR1cmUuaCIKQEAgLTYxLDM3ICs2
MywzNSBAQCBzdHJ1Y3QgR0xFUzJDYW52YXM6OlN0YXRlIHsKICAgICBBZmZpbmVUcmFuc2Zvcm0g
bV9jdG07CiB9OwogCi1HTEVTMkNhbnZhczo6R0xFUzJDYW52YXMoR3JhcGhpY3NDb250ZXh0M0Qq
IGNvbnRleHQsIGNvbnN0IEludFNpemUmIHNpemUpCi0gICAgOiBtX2NvbnRleHQoY29udGV4dCkK
K0dMRVMyQ2FudmFzOjpHTEVTMkNhbnZhcyhTaGFyZWRHcmFwaGljc0NvbnRleHQzRCogY29udGV4
dCwgRHJhd2luZ0J1ZmZlciogZHJhd2luZ0J1ZmZlciwgY29uc3QgSW50U2l6ZSYgc2l6ZSkKKyAg
ICA6IG1fc2l6ZShzaXplKQorICAgICwgbV9jb250ZXh0KGNvbnRleHQpCisgICAgLCBtX2RyYXdp
bmdCdWZmZXIoZHJhd2luZ0J1ZmZlcikKICAgICAsIG1fc3RhdGUoMCkKLSAgICAsIG1fcXVhZFZl
cnRpY2VzKDApCi0gICAgLCBtX3NvbGlkRmlsbFNoYWRlcihTb2xpZEZpbGxTaGFkZXI6OmNyZWF0
ZShjb250ZXh0KSkKLSAgICAsIG1fdGV4U2hhZGVyKFRleFNoYWRlcjo6Y3JlYXRlKGNvbnRleHQp
KQogewogICAgIG1fZmxpcE1hdHJpeC50cmFuc2xhdGUoLTEuMGYsIDEuMGYpOwogICAgIG1fZmxp
cE1hdHJpeC5zY2FsZSgyLjBmIC8gc2l6ZS53aWR0aCgpLCAtMi4wZiAvIHNpemUuaGVpZ2h0KCkp
OwogCi0gICAgbV9jb250ZXh0LT5yZXNoYXBlKHNpemUud2lkdGgoKSwgc2l6ZS5oZWlnaHQoKSk7
Ci0gICAgbV9jb250ZXh0LT52aWV3cG9ydCgwLCAwLCBzaXplLndpZHRoKCksIHNpemUuaGVpZ2h0
KCkpOwotCiAgICAgbV9zdGF0ZVN0YWNrLmFwcGVuZChTdGF0ZSgpKTsKICAgICBtX3N0YXRlID0g
Jm1fc3RhdGVTdGFjay5sYXN0KCk7Ci0KLSAgICAvLyBGb3JjZSB0aGUgc291cmNlIG92ZXIgY29t
cG9zaXRlIG1vZGUgdG8gYmUgYXBwbGllZC4KLSAgICBtX2xhc3RDb21wb3NpdGVPcCA9IENvbXBv
c2l0ZUNsZWFyOwotICAgIGFwcGx5Q29tcG9zaXRlT3BlcmF0b3IoQ29tcG9zaXRlU291cmNlT3Zl
cik7CiB9CiAKIEdMRVMyQ2FudmFzOjp+R0xFUzJDYW52YXMoKQogewotICAgIG1fY29udGV4dC0+
ZGVsZXRlQnVmZmVyKG1fcXVhZFZlcnRpY2VzKTsKK30KKwordm9pZCBHTEVTMkNhbnZhczo6Ymlu
ZEZyYW1lYnVmZmVyKCkKK3sKKyAgICBtX2RyYXdpbmdCdWZmZXItPmJpbmQoKTsKIH0KIAogdm9p
ZCBHTEVTMkNhbnZhczo6Y2xlYXJSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKIHsKKyAgICBi
aW5kRnJhbWVidWZmZXIoKTsKICAgICBpZiAobV9zdGF0ZS0+bV9jdG0uaXNJZGVudGl0eSgpKSB7
Ci0gICAgICAgIG1fY29udGV4dC0+c2Npc3NvcihyZWN0LngoKSwgcmVjdC55KCksIHJlY3Qud2lk
dGgoKSwgcmVjdC5oZWlnaHQoKSk7CisgICAgICAgIG1fY29udGV4dC0+c2Npc3NvcihyZWN0KTsK
ICAgICAgICAgbV9jb250ZXh0LT5lbmFibGUoR3JhcGhpY3NDb250ZXh0M0Q6OlNDSVNTT1JfVEVT
VCk7CisgICAgICAgIG1fY29udGV4dC0+Y2xlYXJDb2xvcihDb2xvcihSR0JBMzIoMCkpKTsKICAg
ICAgICAgbV9jb250ZXh0LT5jbGVhcihHcmFwaGljc0NvbnRleHQzRDo6Q09MT1JfQlVGRkVSX0JJ
VCk7CiAgICAgICAgIG1fY29udGV4dC0+ZGlzYWJsZShHcmFwaGljc0NvbnRleHQzRDo6U0NJU1NP
Ul9URVNUKTsKICAgICB9IGVsc2UgewpAQCAtMTA0LDE2ICsxMDQsMTcgQEAgdm9pZCBHTEVTMkNh
bnZhczo6Y2xlYXJSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKIAogdm9pZCBHTEVTMkNhbnZh
czo6ZmlsbFJlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBjb25zdCBDb2xvciYgY29sb3IsIENv
bG9yU3BhY2UgY29sb3JTcGFjZSkKIHsKLSAgICBhcHBseUNvbXBvc2l0ZU9wZXJhdG9yKG1fc3Rh
dGUtPm1fY29tcG9zaXRlT3ApOwotCi0gICAgbV9jb250ZXh0LT5iaW5kQnVmZmVyKEdyYXBoaWNz
Q29udGV4dDNEOjpBUlJBWV9CVUZGRVIsIGdldFF1YWRWZXJ0aWNlcygpKTsKKyAgICBtX2NvbnRl
eHQtPmFwcGx5Q29tcG9zaXRlT3BlcmF0b3IobV9zdGF0ZS0+bV9jb21wb3NpdGVPcCk7CisgICAg
bV9jb250ZXh0LT51c2VRdWFkVmVydGljZXMoKTsKIAogICAgIEFmZmluZVRyYW5zZm9ybSBtYXRy
aXgobV9mbGlwTWF0cml4KTsKICAgICBtYXRyaXgubXVsdExlZnQobV9zdGF0ZS0+bV9jdG0pOwog
ICAgIG1hdHJpeC50cmFuc2xhdGUocmVjdC54KCksIHJlY3QueSgpKTsKICAgICBtYXRyaXguc2Nh
bGUocmVjdC53aWR0aCgpLCByZWN0LmhlaWdodCgpKTsKLSAgICBtX3NvbGlkRmlsbFNoYWRlci0+
dXNlKG1hdHJpeCwgY29sb3IpOwogCisgICAgbV9jb250ZXh0LT51c2VGaWxsU29saWRQcm9ncmFt
KG1hdHJpeCwgY29sb3IpOworCisgICAgYmluZEZyYW1lYnVmZmVyKCk7CiAgICAgbV9jb250ZXh0
LT5kcmF3QXJyYXlzKEdyYXBoaWNzQ29udGV4dDNEOjpUUklBTkdMRV9TVFJJUCwgMCwgNCk7CiB9
CiAKQEAgLTE2NSwyMSArMTY2LDMzIEBAIHZvaWQgR0xFUzJDYW52YXM6OnJlc3RvcmUoKQogICAg
IG1fc3RhdGUgPSAmbV9zdGF0ZVN0YWNrLmxhc3QoKTsKIH0KIAordm9pZCBHTEVTMkNhbnZhczo6
ZHJhd1RleHR1cmVkUmVjdCh1bnNpZ25lZCB0ZXh0dXJlLCBjb25zdCBJbnRTaXplJiB0ZXh0dXJl
U2l6ZSwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBjb25zdCBGbG9hdFJlY3QmIGRzdFJlY3Qs
IENvbG9yU3BhY2UgY29sb3JTcGFjZSwgQ29tcG9zaXRlT3BlcmF0b3IgY29tcG9zaXRlT3ApCit7
CisgICAgbV9jb250ZXh0LT5hcHBseUNvbXBvc2l0ZU9wZXJhdG9yKGNvbXBvc2l0ZU9wKTsKKwor
ICAgIG1fY29udGV4dC0+dXNlUXVhZFZlcnRpY2VzKCk7CisgICAgbV9jb250ZXh0LT5zZXRBY3Rp
dmVUZXh0dXJlKEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFMCk7CisKKyAgICBtX2NvbnRleHQt
PmJpbmRUZXh0dXJlKEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFXzJELCB0ZXh0dXJlKTsKKwor
ICAgIGRyYXdRdWFkKHRleHR1cmVTaXplLCBzcmNSZWN0LCBkc3RSZWN0LCBtX3N0YXRlLT5tX2N0
bSwgbV9zdGF0ZS0+bV9hbHBoYSk7Cit9CisKIHZvaWQgR0xFUzJDYW52YXM6OmRyYXdUZXh0dXJl
ZFJlY3QoVGV4dHVyZSogdGV4dHVyZSwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBjb25zdCBG
bG9hdFJlY3QmIGRzdFJlY3QsIENvbG9yU3BhY2UgY29sb3JTcGFjZSwgQ29tcG9zaXRlT3BlcmF0
b3IgY29tcG9zaXRlT3ApCiB7CiAgICAgZHJhd1RleHR1cmVkUmVjdCh0ZXh0dXJlLCBzcmNSZWN0
LCBkc3RSZWN0LCBtX3N0YXRlLT5tX2N0bSwgbV9zdGF0ZS0+bV9hbHBoYSwgY29sb3JTcGFjZSwg
Y29tcG9zaXRlT3ApOwogfQogCisKIHZvaWQgR0xFUzJDYW52YXM6OmRyYXdUZXh0dXJlZFJlY3Qo
VGV4dHVyZSogdGV4dHVyZSwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBjb25zdCBGbG9hdFJl
Y3QmIGRzdFJlY3QsIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgdHJhbnNmb3JtLCBmbG9hdCBhbHBo
YSwgQ29sb3JTcGFjZSBjb2xvclNwYWNlLCBDb21wb3NpdGVPcGVyYXRvciBjb21wb3NpdGVPcCkK
IHsKLSAgICBhcHBseUNvbXBvc2l0ZU9wZXJhdG9yKGNvbXBvc2l0ZU9wKTsKLQotICAgIG1fY29u
dGV4dC0+YmluZEJ1ZmZlcihHcmFwaGljc0NvbnRleHQzRDo6QVJSQVlfQlVGRkVSLCBnZXRRdWFk
VmVydGljZXMoKSk7Ci0gICAgY2hlY2tHTEVycm9yKCJnbEJpbmRCdWZmZXIiKTsKLQorICAgIG1f
Y29udGV4dC0+YXBwbHlDb21wb3NpdGVPcGVyYXRvcihjb21wb3NpdGVPcCk7CiAgICAgY29uc3Qg
VGlsaW5nRGF0YSYgdGlsZXMgPSB0ZXh0dXJlLT50aWxlcygpOwogICAgIEludFJlY3QgdGlsZUlk
eFJlY3QgPSB0aWxlcy5vdmVybGFwcGVkVGlsZUluZGljZXMoc3JjUmVjdCk7CiAKKyAgICBtX2Nv
bnRleHQtPnVzZVF1YWRWZXJ0aWNlcygpOworICAgIG1fY29udGV4dC0+c2V0QWN0aXZlVGV4dHVy
ZShHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRTApOworCiAgICAgZm9yIChpbnQgeSA9IHRpbGVJ
ZHhSZWN0LnkoKTsgeSA8PSB0aWxlSWR4UmVjdC5ib3R0b20oKTsgeSsrKSB7CiAgICAgICAgIGZv
ciAoaW50IHggPSB0aWxlSWR4UmVjdC54KCk7IHggPD0gdGlsZUlkeFJlY3QucmlnaHQoKTsgeCsr
KQogICAgICAgICAgICAgZHJhd1RleHR1cmVkUmVjdFRpbGUodGV4dHVyZSwgdGlsZXMudGlsZUlu
ZGV4KHgsIHkpLCBzcmNSZWN0LCBkc3RSZWN0LCB0cmFuc2Zvcm0sIGFscGhhKTsKQEAgLTE5Myw3
ICsyMDYsNiBAQCB2b2lkIEdMRVMyQ2FudmFzOjpkcmF3VGV4dHVyZWRSZWN0VGlsZShUZXh0dXJl
KiB0ZXh0dXJlLCBpbnQgdGlsZSwgY29uc3QgRmxvYXRSZQogCiAgICAgY29uc3QgVGlsaW5nRGF0
YSYgdGlsZXMgPSB0ZXh0dXJlLT50aWxlcygpOwogCi0gICAgbV9jb250ZXh0LT5hY3RpdmVUZXh0
dXJlKEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFMCk7CiAgICAgdGV4dHVyZS0+YmluZFRpbGUo
dGlsZSk7CiAKICAgICBGbG9hdFJlY3Qgc3JjUmVjdENsaXBwZWRJblRpbGVTcGFjZTsKQEAgLTIw
MiwxOCArMjE0LDI0IEBAIHZvaWQgR0xFUzJDYW52YXM6OmRyYXdUZXh0dXJlZFJlY3RUaWxlKFRl
eHR1cmUqIHRleHR1cmUsIGludCB0aWxlLCBjb25zdCBGbG9hdFJlCiAKICAgICBJbnRSZWN0IHRp
bGVCb3VuZHNXaXRoQm9yZGVyID0gdGlsZXMudGlsZUJvdW5kc1dpdGhCb3JkZXIodGlsZSk7CiAK
KyAgICBkcmF3UXVhZCh0aWxlQm91bmRzV2l0aEJvcmRlci5zaXplKCksIHNyY1JlY3RDbGlwcGVk
SW5UaWxlU3BhY2UsIGRzdFJlY3RJbnRlcnNlY3RlZCwgdHJhbnNmb3JtLCBhbHBoYSk7Cit9CisK
K3ZvaWQgR0xFUzJDYW52YXM6OmRyYXdRdWFkKGNvbnN0IEludFNpemUmIHRleHR1cmVTaXplLCBj
b25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsIGNvbnN0IEZsb2F0UmVjdCYgZHN0UmVjdCwgY29uc3Qg
QWZmaW5lVHJhbnNmb3JtJiB0cmFuc2Zvcm0sIGZsb2F0IGFscGhhKQorewogICAgIEFmZmluZVRy
YW5zZm9ybSBtYXRyaXgobV9mbGlwTWF0cml4KTsKICAgICBtYXRyaXgubXVsdExlZnQodHJhbnNm
b3JtKTsKLSAgICBtYXRyaXgudHJhbnNsYXRlKGRzdFJlY3RJbnRlcnNlY3RlZC54KCksIGRzdFJl
Y3RJbnRlcnNlY3RlZC55KCkpOwotICAgIG1hdHJpeC5zY2FsZShkc3RSZWN0SW50ZXJzZWN0ZWQu
d2lkdGgoKSwgZHN0UmVjdEludGVyc2VjdGVkLmhlaWdodCgpKTsKKyAgICBtYXRyaXgudHJhbnNs
YXRlKGRzdFJlY3QueCgpLCBkc3RSZWN0LnkoKSk7CisgICAgbWF0cml4LnNjYWxlKGRzdFJlY3Qu
d2lkdGgoKSwgZHN0UmVjdC5oZWlnaHQoKSk7CiAKICAgICBBZmZpbmVUcmFuc2Zvcm0gdGV4TWF0
cml4OwotICAgIHRleE1hdHJpeC5zY2FsZSgxLjBmIC8gdGlsZUJvdW5kc1dpdGhCb3JkZXIud2lk
dGgoKSwgMS4wZiAvIHRpbGVCb3VuZHNXaXRoQm9yZGVyLmhlaWdodCgpKTsKLSAgICB0ZXhNYXRy
aXgudHJhbnNsYXRlKHNyY1JlY3RDbGlwcGVkSW5UaWxlU3BhY2UueCgpLCBzcmNSZWN0Q2xpcHBl
ZEluVGlsZVNwYWNlLnkoKSk7Ci0gICAgdGV4TWF0cml4LnNjYWxlKHNyY1JlY3RDbGlwcGVkSW5U
aWxlU3BhY2Uud2lkdGgoKSwgc3JjUmVjdENsaXBwZWRJblRpbGVTcGFjZS5oZWlnaHQoKSk7Cisg
ICAgdGV4TWF0cml4LnNjYWxlKDEuMGYgLyB0ZXh0dXJlU2l6ZS53aWR0aCgpLCAxLjBmIC8gdGV4
dHVyZVNpemUuaGVpZ2h0KCkpOworICAgIHRleE1hdHJpeC50cmFuc2xhdGUoc3JjUmVjdC54KCks
IHNyY1JlY3QueSgpKTsKKyAgICB0ZXhNYXRyaXguc2NhbGUoc3JjUmVjdC53aWR0aCgpLCBzcmNS
ZWN0LmhlaWdodCgpKTsKIAotICAgIG1fdGV4U2hhZGVyLT51c2UobWF0cml4LCB0ZXhNYXRyaXgs
IDAsIGFscGhhKTsKKyAgICBiaW5kRnJhbWVidWZmZXIoKTsKIAorICAgIG1fY29udGV4dC0+dXNl
VGV4dHVyZVByb2dyYW0obWF0cml4LCB0ZXhNYXRyaXgsIGFscGhhKTsKICAgICBtX2NvbnRleHQt
PmRyYXdBcnJheXMoR3JhcGhpY3NDb250ZXh0M0Q6OlRSSUFOR0xFX1NUUklQLCAwLCA0KTsKICAg
ICBjaGVja0dMRXJyb3IoImdsRHJhd0FycmF5cyIpOwogfQpAQCAtMjIzLDk4ICsyNDEsMTQgQEAg
dm9pZCBHTEVTMkNhbnZhczo6c2V0Q29tcG9zaXRlT3BlcmF0aW9uKENvbXBvc2l0ZU9wZXJhdG9y
IG9wKQogICAgIG1fc3RhdGUtPm1fY29tcG9zaXRlT3AgPSBvcDsKIH0KIAotdm9pZCBHTEVTMkNh
bnZhczo6YXBwbHlDb21wb3NpdGVPcGVyYXRvcihDb21wb3NpdGVPcGVyYXRvciBvcCkKLXsKLSAg
ICBpZiAob3AgPT0gbV9sYXN0Q29tcG9zaXRlT3ApCi0gICAgICAgIHJldHVybjsKLQotICAgIHN3
aXRjaCAob3ApIHsKLSAgICBjYXNlIENvbXBvc2l0ZUNsZWFyOgotICAgICAgICBtX2NvbnRleHQt
PmVuYWJsZShHcmFwaGljc0NvbnRleHQzRDo6QkxFTkQpOwotICAgICAgICBtX2NvbnRleHQtPmJs
ZW5kRnVuYyhHcmFwaGljc0NvbnRleHQzRDo6WkVSTywgR3JhcGhpY3NDb250ZXh0M0Q6OlpFUk8p
OwotICAgICAgICBicmVhazsKLSAgICBjYXNlIENvbXBvc2l0ZUNvcHk6Ci0gICAgICAgIG1fY29u
dGV4dC0+ZGlzYWJsZShHcmFwaGljc0NvbnRleHQzRDo6QkxFTkQpOwotICAgICAgICBicmVhazsK
LSAgICBjYXNlIENvbXBvc2l0ZVNvdXJjZU92ZXI6Ci0gICAgICAgIG1fY29udGV4dC0+ZW5hYmxl
KEdyYXBoaWNzQ29udGV4dDNEOjpCTEVORCk7Ci0gICAgICAgIG1fY29udGV4dC0+YmxlbmRGdW5j
KEdyYXBoaWNzQ29udGV4dDNEOjpPTkUsIEdyYXBoaWNzQ29udGV4dDNEOjpPTkVfTUlOVVNfU1JD
X0FMUEhBKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBDb21wb3NpdGVTb3VyY2VJbjoKLSAg
ICAgICAgbV9jb250ZXh0LT5lbmFibGUoR3JhcGhpY3NDb250ZXh0M0Q6OkJMRU5EKTsKLSAgICAg
ICAgbV9jb250ZXh0LT5ibGVuZEZ1bmMoR3JhcGhpY3NDb250ZXh0M0Q6OkRTVF9BTFBIQSwgR3Jh
cGhpY3NDb250ZXh0M0Q6OlpFUk8pOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIENvbXBvc2l0
ZVNvdXJjZU91dDoKLSAgICAgICAgbV9jb250ZXh0LT5lbmFibGUoR3JhcGhpY3NDb250ZXh0M0Q6
OkJMRU5EKTsKLSAgICAgICAgbV9jb250ZXh0LT5ibGVuZEZ1bmMoR3JhcGhpY3NDb250ZXh0M0Q6
Ok9ORV9NSU5VU19EU1RfQUxQSEEsIEdyYXBoaWNzQ29udGV4dDNEOjpaRVJPKTsKLSAgICAgICAg
YnJlYWs7Ci0gICAgY2FzZSBDb21wb3NpdGVTb3VyY2VBdG9wOgotICAgICAgICBtX2NvbnRleHQt
PmVuYWJsZShHcmFwaGljc0NvbnRleHQzRDo6QkxFTkQpOwotICAgICAgICBtX2NvbnRleHQtPmJs
ZW5kRnVuYyhHcmFwaGljc0NvbnRleHQzRDo6RFNUX0FMUEhBLCBHcmFwaGljc0NvbnRleHQzRDo6
T05FX01JTlVTX1NSQ19BTFBIQSk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgQ29tcG9zaXRl
RGVzdGluYXRpb25PdmVyOgotICAgICAgICBtX2NvbnRleHQtPmVuYWJsZShHcmFwaGljc0NvbnRl
eHQzRDo6QkxFTkQpOwotICAgICAgICBtX2NvbnRleHQtPmJsZW5kRnVuYyhHcmFwaGljc0NvbnRl
eHQzRDo6T05FX01JTlVTX0RTVF9BTFBIQSwgR3JhcGhpY3NDb250ZXh0M0Q6Ok9ORSk7Ci0gICAg
ICAgIGJyZWFrOwotICAgIGNhc2UgQ29tcG9zaXRlRGVzdGluYXRpb25JbjoKLSAgICAgICAgbV9j
b250ZXh0LT5lbmFibGUoR3JhcGhpY3NDb250ZXh0M0Q6OkJMRU5EKTsKLSAgICAgICAgbV9jb250
ZXh0LT5ibGVuZEZ1bmMoR3JhcGhpY3NDb250ZXh0M0Q6OlpFUk8sIEdyYXBoaWNzQ29udGV4dDNE
OjpTUkNfQUxQSEEpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIENvbXBvc2l0ZURlc3RpbmF0
aW9uT3V0OgotICAgICAgICBtX2NvbnRleHQtPmVuYWJsZShHcmFwaGljc0NvbnRleHQzRDo6QkxF
TkQpOwotICAgICAgICBtX2NvbnRleHQtPmJsZW5kRnVuYyhHcmFwaGljc0NvbnRleHQzRDo6WkVS
TywgR3JhcGhpY3NDb250ZXh0M0Q6Ok9ORV9NSU5VU19TUkNfQUxQSEEpOwotICAgICAgICBicmVh
azsKLSAgICBjYXNlIENvbXBvc2l0ZURlc3RpbmF0aW9uQXRvcDoKLSAgICAgICAgbV9jb250ZXh0
LT5lbmFibGUoR3JhcGhpY3NDb250ZXh0M0Q6OkJMRU5EKTsKLSAgICAgICAgbV9jb250ZXh0LT5i
bGVuZEZ1bmMoR3JhcGhpY3NDb250ZXh0M0Q6Ok9ORV9NSU5VU19EU1RfQUxQSEEsIEdyYXBoaWNz
Q29udGV4dDNEOjpTUkNfQUxQSEEpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIENvbXBvc2l0
ZVhPUjoKLSAgICAgICAgbV9jb250ZXh0LT5lbmFibGUoR3JhcGhpY3NDb250ZXh0M0Q6OkJMRU5E
KTsKLSAgICAgICAgbV9jb250ZXh0LT5ibGVuZEZ1bmMoR3JhcGhpY3NDb250ZXh0M0Q6Ok9ORV9N
SU5VU19EU1RfQUxQSEEsIEdyYXBoaWNzQ29udGV4dDNEOjpPTkVfTUlOVVNfU1JDX0FMUEhBKTsK
LSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBDb21wb3NpdGVQbHVzRGFya2VyOgotICAgIGNhc2Ug
Q29tcG9zaXRlSGlnaGxpZ2h0OgotICAgICAgICAvLyB1bnN1cHBvcnRlZAotICAgICAgICBtX2Nv
bnRleHQtPmRpc2FibGUoR3JhcGhpY3NDb250ZXh0M0Q6OkJMRU5EKTsKLSAgICAgICAgYnJlYWs7
Ci0gICAgY2FzZSBDb21wb3NpdGVQbHVzTGlnaHRlcjoKLSAgICAgICAgbV9jb250ZXh0LT5lbmFi
bGUoR3JhcGhpY3NDb250ZXh0M0Q6OkJMRU5EKTsKLSAgICAgICAgbV9jb250ZXh0LT5ibGVuZEZ1
bmMoR3JhcGhpY3NDb250ZXh0M0Q6Ok9ORSwgR3JhcGhpY3NDb250ZXh0M0Q6Ok9ORSk7Ci0gICAg
ICAgIGJyZWFrOwotICAgIH0KLSAgICBtX2xhc3RDb21wb3NpdGVPcCA9IG9wOwotfQotCi11bnNp
Z25lZCBHTEVTMkNhbnZhczo6Z2V0UXVhZFZlcnRpY2VzKCkKLXsKLSAgICBpZiAoIW1fcXVhZFZl
cnRpY2VzKSB7Ci0gICAgICAgIGZsb2F0IHZlcnRpY2VzW10gPSB7IDAuMGYsIDAuMGYsIDEuMGYs
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEuMGYsIDAuMGYsIDEuMGYsCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIDAuMGYsIDEuMGYsIDEuMGYsCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIDEuMGYsIDEuMGYsIDEuMGYgfTsKLSAgICAgICAgbV9xdWFkVmVydGljZXMg
PSBtX2NvbnRleHQtPmNyZWF0ZUJ1ZmZlcigpOwotICAgICAgICBtX2NvbnRleHQtPmJpbmRCdWZm
ZXIoR3JhcGhpY3NDb250ZXh0M0Q6OkFSUkFZX0JVRkZFUiwgbV9xdWFkVmVydGljZXMpOwotICAg
ICAgICBtX2NvbnRleHQtPmJ1ZmZlckRhdGEoR3JhcGhpY3NDb250ZXh0M0Q6OkFSUkFZX0JVRkZF
Uiwgc2l6ZW9mKHZlcnRpY2VzKSwgdmVydGljZXMsIEdyYXBoaWNzQ29udGV4dDNEOjpTVEFUSUNf
RFJBVyk7Ci0gICAgfQotICAgIHJldHVybiBtX3F1YWRWZXJ0aWNlczsKLX0KLQogVGV4dHVyZSog
R0xFUzJDYW52YXM6OmNyZWF0ZVRleHR1cmUoTmF0aXZlSW1hZ2VQdHIgcHRyLCBUZXh0dXJlOjpG
b3JtYXQgZm9ybWF0LCBpbnQgd2lkdGgsIGludCBoZWlnaHQpCiB7Ci0gICAgUGFzc1JlZlB0cjxU
ZXh0dXJlPiB0ZXh0dXJlID0gbV90ZXh0dXJlcy5nZXQocHRyKTsKLSAgICBpZiAodGV4dHVyZSkK
LSAgICAgICAgcmV0dXJuIHRleHR1cmUuZ2V0KCk7Ci0KLSAgICB0ZXh0dXJlID0gVGV4dHVyZTo6
Y3JlYXRlKG1fY29udGV4dCwgZm9ybWF0LCB3aWR0aCwgaGVpZ2h0KTsKLSAgICBUZXh0dXJlKiB0
ID0gdGV4dHVyZS5nZXQoKTsKLSAgICBtX3RleHR1cmVzLnNldChwdHIsIHRleHR1cmUpOwotICAg
IHJldHVybiB0OworICAgIHJldHVybiBtX2NvbnRleHQtPmNyZWF0ZVRleHR1cmUocHRyLCBmb3Jt
YXQsIHdpZHRoLCBoZWlnaHQpOwogfQogCiBUZXh0dXJlKiBHTEVTMkNhbnZhczo6Z2V0VGV4dHVy
ZShOYXRpdmVJbWFnZVB0ciBwdHIpCiB7Ci0gICAgUGFzc1JlZlB0cjxUZXh0dXJlPiB0ZXh0dXJl
ID0gbV90ZXh0dXJlcy5nZXQocHRyKTsKLSAgICByZXR1cm4gdGV4dHVyZSA/IHRleHR1cmUuZ2V0
KCkgOiAwOworICAgIHJldHVybiBtX2NvbnRleHQtPmdldFRleHR1cmUocHRyKTsKIH0KIAogdm9p
ZCBHTEVTMkNhbnZhczo6Y2hlY2tHTEVycm9yKGNvbnN0IGNoYXIqIGhlYWRlcikKZGlmZiAtLWdp
dCBhL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vR0xFUzJDYW52YXMuaCBiL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vR0xFUzJDYW52YXMuaAppbmRleCBmNDlh
YzhiYTE4ZDFkMzQyMzRiOGQwNjI3OGU3MDI4YmZlOTY5N2UxLi42ZmMxYTBlNjlkY2YyYzk4N2Y5
NTAzMTYxNDcxZGVjZTQ2Mzk5NjEzIDEwMDY0NAotLS0gYS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2Nocm9taXVtL0dMRVMyQ2FudmFzLmgKKysrIGIvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jaHJvbWl1bS9HTEVTMkNhbnZhcy5oCkBAIC00NSwxNiArNDUsMTQgQEAKIG5hbWVzcGFjZSBX
ZWJDb3JlIHsKIAogY2xhc3MgQ29sb3I7CitjbGFzcyBEcmF3aW5nQnVmZmVyOwogY2xhc3MgRmxv
YXRSZWN0OwogY2xhc3MgR3JhcGhpY3NDb250ZXh0M0Q7Ci1jbGFzcyBTb2xpZEZpbGxTaGFkZXI7
Ci1jbGFzcyBUZXhTaGFkZXI7Ci0KLXR5cGVkZWYgSGFzaE1hcDxOYXRpdmVJbWFnZVB0ciwgUmVm
UHRyPFRleHR1cmU+ID4gVGV4dHVyZUhhc2hNYXA7CitjbGFzcyBTaGFyZWRHcmFwaGljc0NvbnRl
eHQzRDsKIAogY2xhc3MgR0xFUzJDYW52YXMgOiBwdWJsaWMgTm9uY29weWFibGUgewogcHVibGlj
OgotICAgIEdMRVMyQ2FudmFzKEdyYXBoaWNzQ29udGV4dDNEKiwgY29uc3QgSW50U2l6ZSYpOwor
ICAgIEdMRVMyQ2FudmFzKFNoYXJlZEdyYXBoaWNzQ29udGV4dDNEKiwgRHJhd2luZ0J1ZmZlcios
IGNvbnN0IEludFNpemUmKTsKICAgICB+R0xFUzJDYW52YXMoKTsKIAogICAgIHZvaWQgZmlsbFJl
Y3QoY29uc3QgRmxvYXRSZWN0JiwgY29uc3QgQ29sb3ImLCBDb2xvclNwYWNlKTsKQEAgLTc0LDI4
ICs3MiwzMyBAQCBwdWJsaWM6CiAgICAgLy8gbm9uLXN0YW5kYXJkIGZ1bmN0aW9ucwogICAgIC8v
IFRoZXNlIGFyZSBub3Qgc3RhbmRhcmQgR3JhcGhpY3NDb250ZXh0IGZ1bmN0aW9ucywgYW5kIHNo
b3VsZCBiZSBwdXNoZWQKICAgICAvLyBkb3duIGludG8gYSBQbGF0Zm9ybUNvbnRleHRHTEVTMiBh
dCBzb21lIHBvaW50LgorICAgIHZvaWQgZHJhd1RleHR1cmVkUmVjdCh1bnNpZ25lZCB0ZXh0dXJl
LCBjb25zdCBJbnRTaXplJiB0ZXh0dXJlU2l6ZSwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBj
b25zdCBGbG9hdFJlY3QmIGRzdFJlY3QsIENvbG9yU3BhY2UsIENvbXBvc2l0ZU9wZXJhdG9yKTsK
ICAgICB2b2lkIGRyYXdUZXh0dXJlZFJlY3QoVGV4dHVyZSosIGNvbnN0IEZsb2F0UmVjdCYgc3Jj
UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBkc3RSZWN0LCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mLCBm
bG9hdCBhbHBoYSwgQ29sb3JTcGFjZSwgQ29tcG9zaXRlT3BlcmF0b3IpOwogICAgIHZvaWQgZHJh
d1RleHR1cmVkUmVjdChUZXh0dXJlKiwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBjb25zdCBG
bG9hdFJlY3QmIGRzdFJlY3QsIENvbG9yU3BhY2UsIENvbXBvc2l0ZU9wZXJhdG9yKTsKLSAgICBH
cmFwaGljc0NvbnRleHQzRCogY29udGV4dCgpIHsgcmV0dXJuIG1fY29udGV4dDsgfQogICAgIFRl
eHR1cmUqIGNyZWF0ZVRleHR1cmUoTmF0aXZlSW1hZ2VQdHIsIFRleHR1cmU6OkZvcm1hdCwgaW50
IHdpZHRoLCBpbnQgaGVpZ2h0KTsKICAgICBUZXh0dXJlKiBnZXRUZXh0dXJlKE5hdGl2ZUltYWdl
UHRyKTsKIAorICAgIFNoYXJlZEdyYXBoaWNzQ29udGV4dDNEKiBjb250ZXh0KCkgY29uc3QgeyBy
ZXR1cm4gbV9jb250ZXh0OyB9CisKKyAgICB2b2lkIGJpbmRGcmFtZWJ1ZmZlcigpOworCisgICAg
RHJhd2luZ0J1ZmZlciogZHJhd2luZ0J1ZmZlcigpIGNvbnN0IHsgcmV0dXJuIG1fZHJhd2luZ0J1
ZmZlcjsgfQorCiBwcml2YXRlOgogICAgIHZvaWQgZHJhd1RleHR1cmVkUmVjdFRpbGUoVGV4dHVy
ZSogdGV4dHVyZSwgaW50IHRpbGUsIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCwgY29uc3QgRmxv
YXRSZWN0JiBkc3RSZWN0LCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mLCBmbG9hdCBhbHBoYSk7Cisg
ICAgdm9pZCBkcmF3UXVhZChjb25zdCBJbnRTaXplJiB0ZXh0dXJlU2l6ZSwgY29uc3QgRmxvYXRS
ZWN0JiBzcmNSZWN0LCBjb25zdCBGbG9hdFJlY3QmIGRzdFJlY3QsIGNvbnN0IEFmZmluZVRyYW5z
Zm9ybSYsIGZsb2F0IGFscGhhKTsKICAgICB2b2lkIGFwcGx5Q29tcG9zaXRlT3BlcmF0b3IoQ29t
cG9zaXRlT3BlcmF0b3IpOwogICAgIHZvaWQgY2hlY2tHTEVycm9yKGNvbnN0IGNoYXIqIGhlYWRl
cik7Ci0gICAgdW5zaWduZWQgZ2V0UXVhZFZlcnRpY2VzKCk7CiAKLSAgICBHcmFwaGljc0NvbnRl
eHQzRCogbV9jb250ZXh0OworICAgIEludFNpemUgbV9zaXplOworCisgICAgU2hhcmVkR3JhcGhp
Y3NDb250ZXh0M0QqIG1fY29udGV4dDsKKyAgICBEcmF3aW5nQnVmZmVyKiBtX2RyYXdpbmdCdWZm
ZXI7CisKICAgICBzdHJ1Y3QgU3RhdGU7CiAgICAgV1RGOjpWZWN0b3I8U3RhdGU+IG1fc3RhdGVT
dGFjazsKICAgICBTdGF0ZSogbV9zdGF0ZTsKLSAgICB1bnNpZ25lZCBtX3F1YWRWZXJ0aWNlczsK
LSAgICBPd25QdHI8U29saWRGaWxsU2hhZGVyPiBtX3NvbGlkRmlsbFNoYWRlcjsKLSAgICBPd25Q
dHI8VGV4U2hhZGVyPiBtX3RleFNoYWRlcjsKICAgICBBZmZpbmVUcmFuc2Zvcm0gbV9mbGlwTWF0
cml4OwotICAgIFRleHR1cmVIYXNoTWFwIG1fdGV4dHVyZXM7Ci0gICAgQ29tcG9zaXRlT3BlcmF0
b3IgbV9sYXN0Q29tcG9zaXRlT3A7IC8vIFRoaXMgaXMgdGhlIG9uZSBsYXN0IHNldCwgbm90IG5l
Y2Vzc2FyaWx5IHRoZSBvbmUgaW4gdGhlIHN0YXRlIHN0YWNrLgogfTsKIAogfQpkaWZmIC0tZ2l0
IGEvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9HcmFwaGljc0xheWVyQ2hyb21p
dW0uY3BwIGIvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9HcmFwaGljc0xheWVy
Q2hyb21pdW0uY3BwCmluZGV4IDY0OGUzNWYxYTQ2NzJmYzI2NTRlNWE1ZTk2Y2NlMjllNjc5MmMx
MDEuLjkyY2M4OTExNzJmNDdmYTM1ODNjZDJhZjhjZDAxOWZjNmFmZTI3MDcgMTAwNjQ0Ci0tLSBh
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vR3JhcGhpY3NMYXllckNocm9taXVt
LmNwcAorKysgYi9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0dyYXBoaWNzTGF5
ZXJDaHJvbWl1bS5jcHAKQEAgLTQ1LDcgKzQ1LDkgQEAKIAogI2luY2x1ZGUgIkdyYXBoaWNzTGF5
ZXJDaHJvbWl1bS5oIgogCisjaW5jbHVkZSAiQ2FudmFzMkRMYXllckNocm9taXVtLmgiCiAjaW5j
bHVkZSAiQ29udGVudExheWVyQ2hyb21pdW0uaCIKKyNpbmNsdWRlICJEcmF3aW5nQnVmZmVyLmgi
CiAjaW5jbHVkZSAiRmxvYXRDb252ZXJzaW9uLmgiCiAjaW5jbHVkZSAiRmxvYXRSZWN0LmgiCiAj
aW5jbHVkZSAiSW1hZ2UuaCIKQEAgLTI5MCw2ICsyOTIsNyBAQCB2b2lkIEdyYXBoaWNzTGF5ZXJD
aHJvbWl1bTo6c2V0Q29udGVudHNOZWVkc0Rpc3BsYXkoKQogICAgIGlmIChtX2NvbnRlbnRzTGF5
ZXIpCiAgICAgICAgIG1fY29udGVudHNMYXllci0+c2V0TmVlZHNEaXNwbGF5KCk7CiB9CisKIHZv
aWQgR3JhcGhpY3NMYXllckNocm9taXVtOjpzZXROZWVkc0Rpc3BsYXkoKQogewogICAgIGlmIChk
cmF3c0NvbnRlbnQoKSkKQEAgLTM0NCwxMyArMzQ3LDEzIEBAIHZvaWQgR3JhcGhpY3NMYXllckNo
cm9taXVtOjpzZXRDb250ZW50c1RvQ2FudmFzKFBsYXRmb3JtTGF5ZXIqIHBsYXRmb3JtTGF5ZXIp
CiAgICAgYm9vbCBjaGlsZHJlbkNoYW5nZWQgPSBmYWxzZTsKICAgICBpZiAocGxhdGZvcm1MYXll
cikgewogICAgICAgICBwbGF0Zm9ybUxheWVyLT5zZXRPd25lcih0aGlzKTsKLSAgICAgICAgaWYg
KCFtX2NvbnRlbnRzTGF5ZXIuZ2V0KCkgfHwgbV9jb250ZW50c0xheWVyUHVycG9zZSAhPSBDb250
ZW50c0xheWVyRm9yQ2FudmFzKSB7CisgICAgICAgIGlmIChtX2NvbnRlbnRzTGF5ZXIuZ2V0KCkg
IT0gcGxhdGZvcm1MYXllcikgewogICAgICAgICAgICAgc2V0dXBDb250ZW50c0xheWVyKHBsYXRm
b3JtTGF5ZXIpOwogICAgICAgICAgICAgbV9jb250ZW50c0xheWVyID0gcGxhdGZvcm1MYXllcjsK
ICAgICAgICAgICAgIG1fY29udGVudHNMYXllclB1cnBvc2UgPSBDb250ZW50c0xheWVyRm9yQ2Fu
dmFzOwogICAgICAgICAgICAgY2hpbGRyZW5DaGFuZ2VkID0gdHJ1ZTsKICAgICAgICAgfQotICAg
ICAgICBwbGF0Zm9ybUxheWVyLT5zZXROZWVkc0Rpc3BsYXkoKTsKKyAgICAgICAgbV9jb250ZW50
c0xheWVyLT5zZXROZWVkc0Rpc3BsYXkoKTsKICAgICAgICAgdXBkYXRlQ29udGVudHNSZWN0KCk7
CiAgICAgfSBlbHNlIHsKICAgICAgICAgaWYgKG1fY29udGVudHNMYXllcikgewpkaWZmIC0tZ2l0
IGEvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9HcmFwaGljc0xheWVyQ2hyb21p
dW0uaCBiL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vR3JhcGhpY3NMYXllckNo
cm9taXVtLmgKaW5kZXggOWRmZjY2YTA3NWNjMzBhNTg0NmIxNDZhMTY1MTg0OGI2ZmVkYWY5MS4u
ZGRlNDQzZGQzNDNiZmY4ZTFkYzAwNDI1ODIzNzE1ZTY5MDIxZWU4MiAxMDA2NDQKLS0tIGEvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9HcmFwaGljc0xheWVyQ2hyb21pdW0uaAor
KysgYi9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0dyYXBoaWNzTGF5ZXJDaHJv
bWl1bS5oCkBAIC0xMzgsNyArMTM4LDcgQEAgcHJpdmF0ZToKICAgICAgICAgTm9Db250ZW50c0xh
eWVyID0gMCwKICAgICAgICAgQ29udGVudHNMYXllckZvckltYWdlLAogICAgICAgICBDb250ZW50
c0xheWVyRm9yVmlkZW8sCi0gICAgICAgIENvbnRlbnRzTGF5ZXJGb3JDYW52YXMKKyAgICAgICAg
Q29udGVudHNMYXllckZvckNhbnZhcywKICAgICB9OwogCiAgICAgQ29udGVudHNMYXllclB1cnBv
c2UgbV9jb250ZW50c0xheWVyUHVycG9zZTsKZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJSZW5kZXJlckNocm9taXVtLmNwcCBiL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJSZW5kZXJlckNocm9taXVtLmNwcAppbmRleCA1
MDMzOGQyZDVmNzMyNGU1YTExOWM1MDkxOTBkZmVmODY5OGIxNzY5Li5mNDkwOTcwODcxM2FiYTQ4
OWRmZTk5MGU1ODQzYmJiNTY4OTU2MGIzIDEwMDY0NAotLS0gYS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2Nocm9taXVtL0xheWVyUmVuZGVyZXJDaHJvbWl1bS5jcHAKKysrIGIvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllclJlbmRlcmVyQ2hyb21pdW0uY3BwCkBAIC0z
NCwxMSArMzQsMTEgQEAKICNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCiAjaW5jbHVk
ZSAiTGF5ZXJSZW5kZXJlckNocm9taXVtLmgiCiAKLSNpbmNsdWRlICJDYW52YXNMYXllckNocm9t
aXVtLmgiCi0jaW5jbHVkZSAiQ29udGVudExheWVyQ2hyb21pdW0uaCIKKyNpbmNsdWRlICJDYW52
YXMyRExheWVyQ2hyb21pdW0uaCIKICNpbmNsdWRlICJHTEVTMkNvbnRleHQuaCIKICNpbmNsdWRl
ICJMYXllckNocm9taXVtLmgiCiAjaW5jbHVkZSAiTm90SW1wbGVtZW50ZWQuaCIKKyNpbmNsdWRl
ICJXZWJHTExheWVyQ2hyb21pdW0uaCIKICNpZiBQTEFURk9STShTS0lBKQogI2luY2x1ZGUgIk5h
dGl2ZUltYWdlU2tpYS5oIgogI2luY2x1ZGUgIlBsYXRmb3JtQ29udGV4dFNraWEuaCIKZGlmZiAt
LWdpdCBhL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vV2ViR0xMYXllckNocm9t
aXVtLmNwcCBiL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vV2ViR0xMYXllckNo
cm9taXVtLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwLi40MTFmNDE2MmI5MTQ5NDk3OTQ3MWI5MGRlYzY2MDFjOWM2
OTQ4ZGI2Ci0tLSAvZGV2L251bGwKKysrIGIvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJv
bWl1bS9XZWJHTExheWVyQ2hyb21pdW0uY3BwCkBAIC0wLDAgKzEsODUgQEAKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTAgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyAqIG1ldDoKKyAqCisgKiAgICAgKiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorICogaW4gdGhlIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogZGlzdHJpYnV0
aW9uLgorICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5h
bWVzIG9mIGl0cworICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJv
bW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVj
aWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFT
IElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIE9XTkVSIE9SIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAor
ICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29u
ZmlnLmgiCisKKyNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCisKKyNpbmNsdWRlICJX
ZWJHTExheWVyQ2hyb21pdW0uaCIKKworI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dDNELmgiCisj
aW5jbHVkZSAiTGF5ZXJSZW5kZXJlckNocm9taXVtLmgiCisjaW5jbHVkZSA8R0xFUzIvZ2wyLmg+
CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworUGFzc1JlZlB0cjxXZWJHTExheWVyQ2hyb21pdW0+
IFdlYkdMTGF5ZXJDaHJvbWl1bTo6Y3JlYXRlKEdyYXBoaWNzTGF5ZXJDaHJvbWl1bSogb3duZXIp
Cit7CisgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBXZWJHTExheWVyQ2hyb21pdW0ob3duZXIpKTsK
K30KKworV2ViR0xMYXllckNocm9taXVtOjpXZWJHTExheWVyQ2hyb21pdW0oR3JhcGhpY3NMYXll
ckNocm9taXVtKiBvd25lcikKKyAgICA6IENhbnZhc0xheWVyQ2hyb21pdW0ob3duZXIpCisgICAg
LCBtX2NvbnRleHQoMCkKK3sKK30KKwordm9pZCBXZWJHTExheWVyQ2hyb21pdW06OnVwZGF0ZUNv
bnRlbnRzKCkKK3sKKyAgICBBU1NFUlQobV9jb250ZXh0KTsKKyAgICBpZiAobV90ZXh0dXJlQ2hh
bmdlZCkgeworICAgICAgICBnbEJpbmRUZXh0dXJlKEdMX1RFWFRVUkVfMkQsIG1fdGV4dHVyZUlk
KTsKKyAgICAgICAgLy8gU2V0IHRoZSBtaW4tbWFnIGZpbHRlcnMgdG8gbGluZWFyIGFuZCB3cmFw
IG1vZGVzIHRvIEdMX0NMQU1QX1RPX0VER0UKKyAgICAgICAgLy8gdG8gZ2V0IGFyb3VuZCBOUE9U
IHRleHR1cmUgbGltaXRhdGlvbnMgb2YgR0xFUy4KKyAgICAgICAgZ2xUZXhQYXJhbWV0ZXJmKEdM
X1RFWFRVUkVfMkQsIEdMX1RFWFRVUkVfTUlOX0ZJTFRFUiwgR0xfTElORUFSKTsKKyAgICAgICAg
Z2xUZXhQYXJhbWV0ZXJmKEdMX1RFWFRVUkVfMkQsIEdMX1RFWFRVUkVfTUFHX0ZJTFRFUiwgR0xf
TElORUFSKTsKKyAgICAgICAgZ2xUZXhQYXJhbWV0ZXJmKEdMX1RFWFRVUkVfMkQsIEdMX1RFWFRV
UkVfV1JBUF9TLCBHTF9DTEFNUF9UT19FREdFKTsKKyAgICAgICAgZ2xUZXhQYXJhbWV0ZXJmKEdM
X1RFWFRVUkVfMkQsIEdMX1RFWFRVUkVfV1JBUF9ULCBHTF9DTEFNUF9UT19FREdFKTsKKyAgICAg
ICAgbV90ZXh0dXJlQ2hhbmdlZCA9IGZhbHNlOworICAgIH0KKyAgICAvLyBVcGRhdGUgdGhlIGNv
bnRlbnRzIG9mIHRoZSB0ZXh0dXJlIHVzZWQgYnkgdGhlIGNvbXBvc2l0b3IuCisgICAgaWYgKG1f
Y29udGVudHNEaXJ0eSkgeworICAgICAgICBtX2NvbnRleHQtPnByZXBhcmVUZXh0dXJlKCk7Cisg
ICAgICAgIG1fY29udGVudHNEaXJ0eSA9IGZhbHNlOworICAgIH0KK30KKwordm9pZCBXZWJHTExh
eWVyQ2hyb21pdW06OnNldENvbnRleHQoY29uc3QgR3JhcGhpY3NDb250ZXh0M0QqIGNvbnRleHQp
Cit7CisgICAgbV9jb250ZXh0ID0gY29uc3RfY2FzdDxHcmFwaGljc0NvbnRleHQzRCo+KGNvbnRl
eHQpOworCisgICAgdW5zaWduZWQgaW50IHRleHR1cmVJZCA9IG1fY29udGV4dC0+cGxhdGZvcm1U
ZXh0dXJlKCk7CisgICAgaWYgKHRleHR1cmVJZCAhPSBtX3RleHR1cmVJZCkKKyAgICAgICAgbV90
ZXh0dXJlQ2hhbmdlZCA9IHRydWU7CisgICAgbV90ZXh0dXJlSWQgPSB0ZXh0dXJlSWQ7Cit9CisK
K30KKyNlbmRpZiAvLyBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCmRpZmYgLS1naXQgYS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1dlYkdMTGF5ZXJDaHJvbWl1bS5oIGIv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9XZWJHTExheWVyQ2hyb21pdW0uaApu
ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwLi4xMWI4ZGI3ZTYxMTczMGQwY2Q3N2QzZWI2ODE0ODUzN2UxYWY0ZDFiCi0tLSAv
ZGV2L251bGwKKysrIGIvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9XZWJHTExh
eWVyQ2hyb21pdW0uaApAQCAtMCwwICsxLDYwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEw
IEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMgYXJlCisgKiBtZXQ6CisgKgorICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAg
ICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUKKyAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIKKyAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqIGRpc3RyaWJ1dGlvbi4KKyAqICAgICAq
IE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAq
IGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMg
ZGVyaXZlZCBmcm9tCisgKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3Jp
dHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhF
IENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1J
VEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBF
VkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVY
RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAq
IExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworCisjaWZuZGVmIFdlYkdMTGF5ZXJDaHJvbWl1
bV9oCisjZGVmaW5lIFdlYkdMTGF5ZXJDaHJvbWl1bV9oCisKKyNpZiBVU0UoQUNDRUxFUkFURURf
Q09NUE9TSVRJTkcpCisKKyNpbmNsdWRlICJDYW52YXNMYXllckNocm9taXVtLmgiCisKK25hbWVz
cGFjZSBXZWJDb3JlIHsKKworY2xhc3MgR3JhcGhpY3NDb250ZXh0M0Q7CisKKy8vIEEgTGF5ZXIg
Y29udGFpbmluZyBhIFdlYkdMIGNhbnZhcworY2xhc3MgV2ViR0xMYXllckNocm9taXVtIDogcHVi
bGljIENhbnZhc0xheWVyQ2hyb21pdW0geworcHVibGljOgorICAgIHN0YXRpYyBQYXNzUmVmUHRy
PFdlYkdMTGF5ZXJDaHJvbWl1bT4gY3JlYXRlKEdyYXBoaWNzTGF5ZXJDaHJvbWl1bSogb3duZXIg
PSAwKTsKKyAgICB2aXJ0dWFsIGJvb2wgZHJhd3NDb250ZW50KCkgeyByZXR1cm4gbV9jb250ZXh0
OyB9CisgICAgdmlydHVhbCB2b2lkIHVwZGF0ZUNvbnRlbnRzKCk7CisKKyAgICB2b2lkIHNldENv
bnRleHQoY29uc3QgR3JhcGhpY3NDb250ZXh0M0QqIGNvbnRleHQpOworCitwcml2YXRlOgorICAg
IGV4cGxpY2l0IFdlYkdMTGF5ZXJDaHJvbWl1bShHcmFwaGljc0xheWVyQ2hyb21pdW0qIG93bmVy
KTsKKyAgICBHcmFwaGljc0NvbnRleHQzRCogbV9jb250ZXh0OworfTsKKworfQorI2VuZGlmIC8v
IFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKKworI2VuZGlmCmRpZmYgLS1naXQgYS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dwdS9EcmF3aW5nQnVmZmVyLmNwcCBiL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvZ3B1L0RyYXdpbmdCdWZmZXIuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmRjODA5NTQ2
ZTA5M2U4YjA5OGU0NjYyMjY0ZjBlOGQ1YTRhZWQ1ODMKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dwdS9EcmF3aW5nQnVmZmVyLmNwcApAQCAtMCwwICsxLDYw
IEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDEwLCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorICogbWV0OgorICoK
KyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiBjb3B5cmlnaHQgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisgKiBp
biB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlCisgKiBkaXN0cmlidXRpb24uCisgKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2ds
ZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisgKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQg
dG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorICogdGhpcyBzb2Z0
d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09O
VFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIg
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAor
ICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBP
RiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9S
IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWQorICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICov
CisKKyNpbmNsdWRlICJjb25maWcuaCIKKworI2luY2x1ZGUgIkRyYXdpbmdCdWZmZXIuaCIKKwor
I2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dDNELmgiCisjaW5jbHVkZSAiU2hhcmVkR3JhcGhpY3ND
b250ZXh0M0QuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitQYXNzT3duUHRyPERyYXdpbmdC
dWZmZXI+IERyYXdpbmdCdWZmZXI6OmNyZWF0ZShTaGFyZWRHcmFwaGljc0NvbnRleHQzRCogY29u
dGV4dCwgY29uc3QgSW50U2l6ZSYgc2l6ZSkKK3sKKyAgICB1bnNpZ25lZCBmcmFtZWJ1ZmZlciA9
IGNvbnRleHQtPmNyZWF0ZUZyYW1lYnVmZmVyKCk7CisgICAgQVNTRVJUKGZyYW1lYnVmZmVyKTsK
KyAgICBpZiAoIWZyYW1lYnVmZmVyKQorICAgICAgICByZXR1cm4gMDsKKyAgICByZXR1cm4gYWRv
cHRQdHIobmV3IERyYXdpbmdCdWZmZXIoY29udGV4dCwgc2l6ZSwgZnJhbWVidWZmZXIpKTsKK30K
Kwordm9pZCBEcmF3aW5nQnVmZmVyOjpiaW5kKCkKK3sKKyAgICBtX2NvbnRleHQtPmJpbmRGcmFt
ZWJ1ZmZlcihtX2ZyYW1lYnVmZmVyKTsKKyAgICBtX2NvbnRleHQtPnNldFZpZXdwb3J0KG1fc2l6
ZSk7Cit9CisKK3ZvaWQgRHJhd2luZ0J1ZmZlcjo6c2V0V2lsbFB1Ymxpc2hDYWxsYmFjayhQYXNz
T3duUHRyPFdpbGxQdWJsaXNoQ2FsbGJhY2s+IGNhbGxiYWNrKQoreworICAgIG1fY2FsbGJhY2sg
PSBjYWxsYmFjazsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ncHUvRHJhd2luZ0J1ZmZlci5oIGIvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9ncHUvRHJhd2luZ0J1ZmZlci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjFiNDRmNGQyMDE1
NThkNjdjNjhlNmRmZTZmZjNhNDY1ZGQxOGMyMjgKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2dwdS9EcmF3aW5nQnVmZmVyLmgKQEAgLTAsMCArMSw4MCBAQAor
LyoKKyAqIENvcHlyaWdodCAoYykgMjAxMCwgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyAqIG1ldDoKKyAqCisgKiAg
ICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorICogaW4gdGhl
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQor
ICogZGlzdHJpYnV0aW9uLgorICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5j
LiBub3IgdGhlIG5hbWVzIG9mIGl0cworICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVu
ZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyAqIHRoaXMgc29mdHdhcmUg
d2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJV
VE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIE9X
TkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkK
KyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisj
aWZuZGVmIERyYXdpbmdCdWZmZXJfaAorI2RlZmluZSBEcmF3aW5nQnVmZmVyX2gKKworI2luY2x1
ZGUgIkdyYXBoaWNzTGF5ZXIuaCIKKyNpbmNsdWRlICJJbnRTaXplLmgiCisKKyNpbmNsdWRlIDx3
dGYvTm9uY29weWFibGUuaD4KKyNpbmNsdWRlIDx3dGYvT3duUHRyLmg+CisjaW5jbHVkZSA8d3Rm
L1Bhc3NPd25QdHIuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBTaGFyZWRHcmFw
aGljc0NvbnRleHQzRDsKKworc3RydWN0IERyYXdpbmdCdWZmZXJJbnRlcm5hbDsKKworLy8gTWFu
YWdlcyBhIHJlbmRlcmluZyB0YXJnZXQgKGZyYW1lYnVmZmVyICsgYXR0YWNobWVudCkgZm9yIGEg
Y2FudmFzLiAgQ2FuIHB1Ymxpc2ggaXRzIHJlbmRlcmluZworLy8gcmVzdWx0cyB0byBhIFBsYXRm
b3JtTGF5ZXIgZm9yIGNvbXBvc2l0aW5nLgorY2xhc3MgRHJhd2luZ0J1ZmZlciA6IHB1YmxpYyBO
b25jb3B5YWJsZSB7CitwdWJsaWM6CisgICAgc3RhdGljIFBhc3NPd25QdHI8RHJhd2luZ0J1ZmZl
cj4gY3JlYXRlKFNoYXJlZEdyYXBoaWNzQ29udGV4dDNEKiwgY29uc3QgSW50U2l6ZSYpOworICAg
IH5EcmF3aW5nQnVmZmVyKCk7CisKKyAgICB2b2lkIHJlc2V0KGNvbnN0IEludFNpemUmKTsKKyAg
ICBQbGF0Zm9ybUxheWVyKiBwbGF0Zm9ybUxheWVyKCk7CisKKyAgICB2b2lkIGJpbmQoKTsKKyAg
ICB2b2lkIHB1Ymxpc2hUb1BsYXRmb3JtTGF5ZXIoKTsKKyAgICBJbnRTaXplIHNpemUoKSBjb25z
dCB7IHJldHVybiBtX3NpemU7IH0KKworICAgIGNsYXNzIFdpbGxQdWJsaXNoQ2FsbGJhY2sgOiBw
dWJsaWMgTm9uY29weWFibGUgeworICAgIHB1YmxpYzoKKyAgICAgICAgdmlydHVhbCB2b2lkIHdp
bGxQdWJsaXNoKCkgPSAwOworICAgIH07CisKKyAgICB2b2lkIHNldFdpbGxQdWJsaXNoQ2FsbGJh
Y2soUGFzc093blB0cjxXaWxsUHVibGlzaENhbGxiYWNrPik7Citwcml2YXRlOgorICAgIERyYXdp
bmdCdWZmZXIoU2hhcmVkR3JhcGhpY3NDb250ZXh0M0QqLCBjb25zdCBJbnRTaXplJiwgdW5zaWdu
ZWQgZnJhbWVidWZmZXIpOworCisgICAgU2hhcmVkR3JhcGhpY3NDb250ZXh0M0QqIG1fY29udGV4
dDsKKyAgICBJbnRTaXplIG1fc2l6ZTsKKyAgICB1bnNpZ25lZCBtX2ZyYW1lYnVmZmVyOworCisg
ICAgT3duUHRyPFdpbGxQdWJsaXNoQ2FsbGJhY2s+IG1fY2FsbGJhY2s7CisgICAgT3duUHRyPERy
YXdpbmdCdWZmZXJJbnRlcm5hbD4gbV9pbnRlcm5hbDsKK307CisKK30gLy8gbmFtZXNwYWNlIFdl
YkNvcmUKKworI2VuZGlmIC8vIERyYXdpbmdCdWZmZXJfaApkaWZmIC0tZ2l0IGEvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9ncHUvU2hhcmVkR3JhcGhpY3NDb250ZXh0M0QuY3BwIGIvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9ncHUvU2hhcmVkR3JhcGhpY3NDb250ZXh0M0QuY3BwCm5ldyBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAuLmZhNzViOTUwOWZjMjgzMzQyNGZjZDYyMzExNDZlMmEwODkyYmMyYTEKLS0tIC9kZXYv
bnVsbAorKysgYi9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dwdS9TaGFyZWRHcmFwaGljc0Nv
bnRleHQzRC5jcHAKQEAgLTAsMCArMSwyOTYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMTAs
IEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMgYXJlCisgKiBtZXQ6CisgKgorICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAg
ICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUKKyAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIKKyAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqIGRpc3RyaWJ1dGlvbi4KKyAqICAgICAq
IE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAq
IGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMg
ZGVyaXZlZCBmcm9tCisgKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3Jp
dHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhF
IENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1J
VEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBF
VkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVY
RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAq
IExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorCisjaW5j
bHVkZSAiU2hhcmVkR3JhcGhpY3NDb250ZXh0M0QuaCIKKworI2luY2x1ZGUgIkFmZmluZVRyYW5z
Zm9ybS5oIgorI2luY2x1ZGUgIkNvbG9yLmgiCisjaW5jbHVkZSAiRmxvYXRSZWN0LmgiCisjaW5j
bHVkZSAiR3JhcGhpY3NDb250ZXh0M0QuaCIKKyNpbmNsdWRlICJHcmFwaGljc1R5cGVzLmgiCisj
aW5jbHVkZSAiSW50U2l6ZS5oIgorI2luY2x1ZGUgIlNvbGlkRmlsbFNoYWRlci5oIgorI2luY2x1
ZGUgIlRleFNoYWRlci5oIgorCisjaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgorI2luY2x1
ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKKy8vIHN0
YXRpYworUGFzc1JlZlB0cjxTaGFyZWRHcmFwaGljc0NvbnRleHQzRD4gU2hhcmVkR3JhcGhpY3ND
b250ZXh0M0Q6OmNyZWF0ZShQYXNzT3duUHRyPEdyYXBoaWNzQ29udGV4dDNEPiBjb250ZXh0KQor
eworICAgIHJldHVybiBhZG9wdFJlZihuZXcgU2hhcmVkR3JhcGhpY3NDb250ZXh0M0QoY29udGV4
dCkpOworfQorCitTaGFyZWRHcmFwaGljc0NvbnRleHQzRDo6U2hhcmVkR3JhcGhpY3NDb250ZXh0
M0QoUGFzc093blB0cjxHcmFwaGljc0NvbnRleHQzRD4gY29udGV4dCkKKyAgICA6IG1fY29udGV4
dChjb250ZXh0KQorICAgICwgbV9xdWFkVmVydGljZXMoMCkKKyAgICAsIG1fc29saWRGaWxsU2hh
ZGVyKFNvbGlkRmlsbFNoYWRlcjo6Y3JlYXRlKG1fY29udGV4dC5nZXQoKSkpCisgICAgLCBtX3Rl
eFNoYWRlcihUZXhTaGFkZXI6OmNyZWF0ZShtX2NvbnRleHQuZ2V0KCkpKQoreworfQorCitTaGFy
ZWRHcmFwaGljc0NvbnRleHQzRDo6flNoYXJlZEdyYXBoaWNzQ29udGV4dDNEKCkKK3sKKyAgICBt
X2NvbnRleHQtPmRlbGV0ZUJ1ZmZlcihtX3F1YWRWZXJ0aWNlcyk7Cit9CisKK3ZvaWQgU2hhcmVk
R3JhcGhpY3NDb250ZXh0M0Q6Om1ha2VDb250ZXh0Q3VycmVudCgpCit7CisgICAgbV9jb250ZXh0
LT5tYWtlQ29udGV4dEN1cnJlbnQoKTsKK30KKwordm9pZCBTaGFyZWRHcmFwaGljc0NvbnRleHQz
RDo6c2Npc3Nvcihjb25zdCBGbG9hdFJlY3QmIHJlY3QpCit7CisgICAgbV9jb250ZXh0LT5zY2lz
c29yKHJlY3QueCgpLCByZWN0LnkoKSwgcmVjdC53aWR0aCgpLCByZWN0LmhlaWdodCgpKTsKK30K
Kwordm9pZCBTaGFyZWRHcmFwaGljc0NvbnRleHQzRDo6ZW5hYmxlKHVuc2lnbmVkIGNhcGFjaXR5
KQoreworICAgIG1fY29udGV4dC0+ZW5hYmxlKGNhcGFjaXR5KTsKK30KKwordm9pZCBTaGFyZWRH
cmFwaGljc0NvbnRleHQzRDo6ZGlzYWJsZSh1bnNpZ25lZCBjYXBhY2l0eSkKK3sKKyAgICBtX2Nv
bnRleHQtPmRpc2FibGUoY2FwYWNpdHkpOworfQorCit2b2lkIFNoYXJlZEdyYXBoaWNzQ29udGV4
dDNEOjpjbGVhckNvbG9yKGNvbnN0IENvbG9yJiBjb2xvcikKK3sKKyAgICBmbG9hdCByZ2JhWzRd
OworICAgIGNvbG9yLmdldFJHQkEocmdiYVswXSwgcmdiYVsxXSwgcmdiYVsyXSwgcmdiYVszXSk7
CisgICAgbV9jb250ZXh0LT5jbGVhckNvbG9yKHJnYmFbMF0sIHJnYmFbMV0sIHJnYmFbMl0sIHJn
YmFbM10pOworfQorCit2b2lkIFNoYXJlZEdyYXBoaWNzQ29udGV4dDNEOjpjbGVhcih1bnNpZ25l
ZCBtYXNrKQoreworICAgIG1fY29udGV4dC0+Y2xlYXIobWFzayk7Cit9CisKK3ZvaWQgU2hhcmVk
R3JhcGhpY3NDb250ZXh0M0Q6OmRyYXdBcnJheXModW5zaWduZWQgbG9uZyBtb2RlLCBsb25nIGZp
cnN0LCBsb25nIGNvdW50KQoreworICAgIG1fY29udGV4dC0+ZHJhd0FycmF5cyhtb2RlLCBmaXJz
dCwgY291bnQpOworfQorCit1bnNpZ25lZCBsb25nIFNoYXJlZEdyYXBoaWNzQ29udGV4dDNEOjpn
ZXRFcnJvcigpCit7CisgICAgcmV0dXJuIG1fY29udGV4dC0+Z2V0RXJyb3IoKTsKK30KKwordm9p
ZCBTaGFyZWRHcmFwaGljc0NvbnRleHQzRDo6Z2V0SW50ZWdlcnYodW5zaWduZWQgbG9uZyBwbmFt
ZSwgaW50KiB2YWx1ZSkKK3sKKyAgICBtX2NvbnRleHQtPmdldEludGVnZXJ2KHBuYW1lLCB2YWx1
ZSk7Cit9CisKK3Vuc2lnbmVkIFNoYXJlZEdyYXBoaWNzQ29udGV4dDNEOjpjcmVhdGVGcmFtZWJ1
ZmZlcigpCit7CisgICAgcmV0dXJuIG1fY29udGV4dC0+Y3JlYXRlRnJhbWVidWZmZXIoKTsKK30K
KwordW5zaWduZWQgU2hhcmVkR3JhcGhpY3NDb250ZXh0M0Q6OmNyZWF0ZVRleHR1cmUoKQorewor
ICAgIHJldHVybiBtX2NvbnRleHQtPmNyZWF0ZVRleHR1cmUoKTsKK30KKwordm9pZCBTaGFyZWRH
cmFwaGljc0NvbnRleHQzRDo6ZGVsZXRlRnJhbWVidWZmZXIodW5zaWduZWQgZnJhbWVidWZmZXIp
Cit7CisgICAgbV9jb250ZXh0LT5kZWxldGVGcmFtZWJ1ZmZlcihmcmFtZWJ1ZmZlcik7Cit9CisK
K3ZvaWQgU2hhcmVkR3JhcGhpY3NDb250ZXh0M0Q6OmRlbGV0ZVRleHR1cmUodW5zaWduZWQgdGV4
dHVyZSkKK3sKKyAgICBtX2NvbnRleHQtPmRlbGV0ZVRleHR1cmUodGV4dHVyZSk7Cit9CisKK3Zv
aWQgU2hhcmVkR3JhcGhpY3NDb250ZXh0M0Q6OmZyYW1lYnVmZmVyVGV4dHVyZTJEKHVuc2lnbmVk
IGxvbmcgdGFyZ2V0LCB1bnNpZ25lZCBsb25nIGF0dGFjaG1lbnQsIHVuc2lnbmVkIGxvbmcgdGV4
dGFyZ2V0LCB1bnNpZ25lZCB0ZXh0dXJlLCBsb25nIGxldmVsKQoreworICAgIG1fY29udGV4dC0+
ZnJhbWVidWZmZXJUZXh0dXJlMkQodGFyZ2V0LCBhdHRhY2htZW50LCB0ZXh0YXJnZXQsIHRleHR1
cmUsIGxldmVsKTsKK30KKwordm9pZCBTaGFyZWRHcmFwaGljc0NvbnRleHQzRDo6dGV4UGFyYW1l
dGVyaSh1bnNpZ25lZCB0YXJnZXQsIHVuc2lnbmVkIHBuYW1lLCBpbnQgcGFyYW0pCit7CisgICAg
bV9jb250ZXh0LT50ZXhQYXJhbWV0ZXJpKHRhcmdldCwgcG5hbWUsIHBhcmFtKTsKK30KKworaW50
IFNoYXJlZEdyYXBoaWNzQ29udGV4dDNEOjp0ZXhJbWFnZTJEKHVuc2lnbmVkIHRhcmdldCwgdW5z
aWduZWQgbGV2ZWwsIHVuc2lnbmVkIGludGVybmFsZm9ybWF0LCB1bnNpZ25lZCB3aWR0aCwgdW5z
aWduZWQgaGVpZ2h0LCB1bnNpZ25lZCBib3JkZXIsIHVuc2lnbmVkIGZvcm1hdCwgdW5zaWduZWQg
dHlwZSwgdm9pZCogcGl4ZWxzKQoreworICAgIG1fY29udGV4dC0+dGV4SW1hZ2UyRCh0YXJnZXQs
IGxldmVsLCBpbnRlcm5hbGZvcm1hdCwgd2lkdGgsIGhlaWdodCwgYm9yZGVyLCBmb3JtYXQsIHR5
cGUsIHBpeGVscyk7Cit9CisKK2ludCBTaGFyZWRHcmFwaGljc0NvbnRleHQzRDo6dGV4U3ViSW1h
Z2UyRCh1bnNpZ25lZCB0YXJnZXQsIHVuc2lnbmVkIGxldmVsLCB1bnNpZ25lZCB4b2Zmc2V0LCB1
bnNpZ25lZCB5b2Zmc2V0LCB1bnNpZ25lZCB3aWR0aCwgdW5zaWduZWQgaGVpZ2h0LCB1bnNpZ25l
ZCBmb3JtYXQsIHVuc2lnbmVkIHR5cGUsIHZvaWQqIHBpeGVscykKK3sKKyAgICBtX2NvbnRleHQt
PnRleFN1YkltYWdlMkQodGFyZ2V0LCBsZXZlbCwgeG9mZnNldCwgeW9mZnNldCwgd2lkdGgsIGhl
aWdodCwgZm9ybWF0LCB0eXBlLCBwaXhlbHMpOworfQorCit2b2lkIFNoYXJlZEdyYXBoaWNzQ29u
dGV4dDNEOjpyZWFkUGl4ZWxzKGxvbmcgeCwgbG9uZyB5LCB1bnNpZ25lZCBsb25nIHdpZHRoLCB1
bnNpZ25lZCBsb25nIGhlaWdodCwgdW5zaWduZWQgbG9uZyBmb3JtYXQsIHVuc2lnbmVkIGxvbmcg
dHlwZSwgdm9pZCogZGF0YSkKK3sKKyAgICBtX2NvbnRleHQtPnJlYWRQaXhlbHMoeCwgeSwgd2lk
dGgsIGhlaWdodCwgZm9ybWF0LCB0eXBlLCBkYXRhKTsKK30KKworYm9vbCBTaGFyZWRHcmFwaGlj
c0NvbnRleHQzRDo6c3VwcG9ydHNCR1JBKCkKK3sKKyAgICByZXR1cm4gbV9jb250ZXh0LT5zdXBw
b3J0c0JHUkEoKTsKK30KKworVGV4dHVyZSogU2hhcmVkR3JhcGhpY3NDb250ZXh0M0Q6OmNyZWF0
ZVRleHR1cmUoTmF0aXZlSW1hZ2VQdHIgcHRyLCBUZXh0dXJlOjpGb3JtYXQgZm9ybWF0LCBpbnQg
d2lkdGgsIGludCBoZWlnaHQpCit7CisgICAgUmVmUHRyPFRleHR1cmU+IHRleHR1cmUgPSBtX3Rl
eHR1cmVzLmdldChwdHIpOworICAgIGlmICh0ZXh0dXJlKQorICAgICAgICByZXR1cm4gdGV4dHVy
ZS5nZXQoKTsKKworICAgIHRleHR1cmUgPSBUZXh0dXJlOjpjcmVhdGUobV9jb250ZXh0LmdldCgp
LCBmb3JtYXQsIHdpZHRoLCBoZWlnaHQpOworICAgIFRleHR1cmUqIHQgPSB0ZXh0dXJlLmdldCgp
OworICAgIG1fdGV4dHVyZXMuc2V0KHB0ciwgdGV4dHVyZSk7CisgICAgcmV0dXJuIHQ7Cit9CisK
K1RleHR1cmUqIFNoYXJlZEdyYXBoaWNzQ29udGV4dDNEOjpnZXRUZXh0dXJlKE5hdGl2ZUltYWdl
UHRyIHB0cikKK3sKKyAgICBSZWZQdHI8VGV4dHVyZT4gdGV4dHVyZSA9IG1fdGV4dHVyZXMuZ2V0
KHB0cik7CisgICAgcmV0dXJuIHRleHR1cmUgPyB0ZXh0dXJlLmdldCgpIDogMDsKK30KKworUGFz
c1JlZlB0cjxUZXh0dXJlPiBTaGFyZWRHcmFwaGljc0NvbnRleHQzRDo6Y3JlYXRlVGV4dHVyZShU
ZXh0dXJlOjpGb3JtYXQgZm9ybWF0LCBpbnQgd2lkdGgsIGludCBoZWlnaHQpCit7CisgICAgcmV0
dXJuIFRleHR1cmU6OmNyZWF0ZShtX2NvbnRleHQuZ2V0KCksIGZvcm1hdCwgd2lkdGgsIGhlaWdo
dCk7Cit9CisKK3ZvaWQgU2hhcmVkR3JhcGhpY3NDb250ZXh0M0Q6OmFwcGx5Q29tcG9zaXRlT3Bl
cmF0b3IoQ29tcG9zaXRlT3BlcmF0b3Igb3ApCit7CisgICAgc3dpdGNoIChvcCkgeworICAgIGNh
c2UgQ29tcG9zaXRlQ2xlYXI6CisgICAgICAgIG1fY29udGV4dC0+ZW5hYmxlKEdyYXBoaWNzQ29u
dGV4dDNEOjpCTEVORCk7CisgICAgICAgIG1fY29udGV4dC0+YmxlbmRGdW5jKEdyYXBoaWNzQ29u
dGV4dDNEOjpaRVJPLCBHcmFwaGljc0NvbnRleHQzRDo6WkVSTyk7CisgICAgICAgIGJyZWFrOwor
ICAgIGNhc2UgQ29tcG9zaXRlQ29weToKKyAgICAgICAgbV9jb250ZXh0LT5kaXNhYmxlKEdyYXBo
aWNzQ29udGV4dDNEOjpCTEVORCk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgQ29tcG9zaXRl
U291cmNlT3ZlcjoKKyAgICAgICAgbV9jb250ZXh0LT5lbmFibGUoR3JhcGhpY3NDb250ZXh0M0Q6
OkJMRU5EKTsKKyAgICAgICAgbV9jb250ZXh0LT5ibGVuZEZ1bmMoR3JhcGhpY3NDb250ZXh0M0Q6
Ok9ORSwgR3JhcGhpY3NDb250ZXh0M0Q6Ok9ORV9NSU5VU19TUkNfQUxQSEEpOworICAgICAgICBi
cmVhazsKKyAgICBjYXNlIENvbXBvc2l0ZVNvdXJjZUluOgorICAgICAgICBtX2NvbnRleHQtPmVu
YWJsZShHcmFwaGljc0NvbnRleHQzRDo6QkxFTkQpOworICAgICAgICBtX2NvbnRleHQtPmJsZW5k
RnVuYyhHcmFwaGljc0NvbnRleHQzRDo6RFNUX0FMUEhBLCBHcmFwaGljc0NvbnRleHQzRDo6WkVS
Tyk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgQ29tcG9zaXRlU291cmNlT3V0OgorICAgICAg
ICBtX2NvbnRleHQtPmVuYWJsZShHcmFwaGljc0NvbnRleHQzRDo6QkxFTkQpOworICAgICAgICBt
X2NvbnRleHQtPmJsZW5kRnVuYyhHcmFwaGljc0NvbnRleHQzRDo6T05FX01JTlVTX0RTVF9BTFBI
QSwgR3JhcGhpY3NDb250ZXh0M0Q6OlpFUk8pOworICAgICAgICBicmVhazsKKyAgICBjYXNlIENv
bXBvc2l0ZVNvdXJjZUF0b3A6CisgICAgICAgIG1fY29udGV4dC0+ZW5hYmxlKEdyYXBoaWNzQ29u
dGV4dDNEOjpCTEVORCk7CisgICAgICAgIG1fY29udGV4dC0+YmxlbmRGdW5jKEdyYXBoaWNzQ29u
dGV4dDNEOjpEU1RfQUxQSEEsIEdyYXBoaWNzQ29udGV4dDNEOjpPTkVfTUlOVVNfU1JDX0FMUEhB
KTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBDb21wb3NpdGVEZXN0aW5hdGlvbk92ZXI6Cisg
ICAgICAgIG1fY29udGV4dC0+ZW5hYmxlKEdyYXBoaWNzQ29udGV4dDNEOjpCTEVORCk7CisgICAg
ICAgIG1fY29udGV4dC0+YmxlbmRGdW5jKEdyYXBoaWNzQ29udGV4dDNEOjpPTkVfTUlOVVNfRFNU
X0FMUEhBLCBHcmFwaGljc0NvbnRleHQzRDo6T05FKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2Fz
ZSBDb21wb3NpdGVEZXN0aW5hdGlvbkluOgorICAgICAgICBtX2NvbnRleHQtPmVuYWJsZShHcmFw
aGljc0NvbnRleHQzRDo6QkxFTkQpOworICAgICAgICBtX2NvbnRleHQtPmJsZW5kRnVuYyhHcmFw
aGljc0NvbnRleHQzRDo6WkVSTywgR3JhcGhpY3NDb250ZXh0M0Q6OlNSQ19BTFBIQSk7CisgICAg
ICAgIGJyZWFrOworICAgIGNhc2UgQ29tcG9zaXRlRGVzdGluYXRpb25PdXQ6CisgICAgICAgIG1f
Y29udGV4dC0+ZW5hYmxlKEdyYXBoaWNzQ29udGV4dDNEOjpCTEVORCk7CisgICAgICAgIG1fY29u
dGV4dC0+YmxlbmRGdW5jKEdyYXBoaWNzQ29udGV4dDNEOjpaRVJPLCBHcmFwaGljc0NvbnRleHQz
RDo6T05FX01JTlVTX1NSQ19BTFBIQSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgQ29tcG9z
aXRlRGVzdGluYXRpb25BdG9wOgorICAgICAgICBtX2NvbnRleHQtPmVuYWJsZShHcmFwaGljc0Nv
bnRleHQzRDo6QkxFTkQpOworICAgICAgICBtX2NvbnRleHQtPmJsZW5kRnVuYyhHcmFwaGljc0Nv
bnRleHQzRDo6T05FX01JTlVTX0RTVF9BTFBIQSwgR3JhcGhpY3NDb250ZXh0M0Q6OlNSQ19BTFBI
QSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgQ29tcG9zaXRlWE9SOgorICAgICAgICBtX2Nv
bnRleHQtPmVuYWJsZShHcmFwaGljc0NvbnRleHQzRDo6QkxFTkQpOworICAgICAgICBtX2NvbnRl
eHQtPmJsZW5kRnVuYyhHcmFwaGljc0NvbnRleHQzRDo6T05FX01JTlVTX0RTVF9BTFBIQSwgR3Jh
cGhpY3NDb250ZXh0M0Q6Ok9ORV9NSU5VU19TUkNfQUxQSEEpOworICAgICAgICBicmVhazsKKyAg
ICBjYXNlIENvbXBvc2l0ZVBsdXNEYXJrZXI6CisgICAgY2FzZSBDb21wb3NpdGVIaWdobGlnaHQ6
CisgICAgICAgIC8vIHVuc3VwcG9ydGVkCisgICAgICAgIG1fY29udGV4dC0+ZGlzYWJsZShHcmFw
aGljc0NvbnRleHQzRDo6QkxFTkQpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIENvbXBvc2l0
ZVBsdXNMaWdodGVyOgorICAgICAgICBtX2NvbnRleHQtPmVuYWJsZShHcmFwaGljc0NvbnRleHQz
RDo6QkxFTkQpOworICAgICAgICBtX2NvbnRleHQtPmJsZW5kRnVuYyhHcmFwaGljc0NvbnRleHQz
RDo6T05FLCBHcmFwaGljc0NvbnRleHQzRDo6T05FKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQor
fQorCit2b2lkIFNoYXJlZEdyYXBoaWNzQ29udGV4dDNEOjp1c2VRdWFkVmVydGljZXMoKQorewor
ICAgIGlmICghbV9xdWFkVmVydGljZXMpIHsKKyAgICAgICAgZmxvYXQgdmVydGljZXNbXSA9IHsg
MC4wZiwgMC4wZiwgMS4wZiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMS4wZiwgMC4w
ZiwgMS4wZiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMC4wZiwgMS4wZiwgMS4wZiwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMS4wZiwgMS4wZiwgMS4wZiB9OworICAgICAg
ICBtX3F1YWRWZXJ0aWNlcyA9IG1fY29udGV4dC0+Y3JlYXRlQnVmZmVyKCk7CisgICAgICAgIG1f
Y29udGV4dC0+YmluZEJ1ZmZlcihHcmFwaGljc0NvbnRleHQzRDo6QVJSQVlfQlVGRkVSLCBtX3F1
YWRWZXJ0aWNlcyk7CisgICAgICAgIG1fY29udGV4dC0+YnVmZmVyRGF0YShHcmFwaGljc0NvbnRl
eHQzRDo6QVJSQVlfQlVGRkVSLCBzaXplb2YodmVydGljZXMpLCB2ZXJ0aWNlcywgR3JhcGhpY3ND
b250ZXh0M0Q6OlNUQVRJQ19EUkFXKTsKKyAgICB9IGVsc2UgeworICAgICAgICBtX2NvbnRleHQt
PmJpbmRCdWZmZXIoR3JhcGhpY3NDb250ZXh0M0Q6OkFSUkFZX0JVRkZFUiwgbV9xdWFkVmVydGlj
ZXMpOworICAgIH0KK30KKwordm9pZCBTaGFyZWRHcmFwaGljc0NvbnRleHQzRDo6c2V0QWN0aXZl
VGV4dHVyZSh1bnNpZ25lZCB0ZXh0dXJlVW5pdCkKK3sKKyAgICBtX2NvbnRleHQtPmFjdGl2ZVRl
eHR1cmUodGV4dHVyZVVuaXQpOworfQorCit2b2lkIFNoYXJlZEdyYXBoaWNzQ29udGV4dDNEOjpi
aW5kVGV4dHVyZSh1bnNpZ25lZCB0YXJnZXQsIHVuc2lnbmVkIHRleHR1cmUpCit7CisgICAgbV9j
b250ZXh0LT5iaW5kVGV4dHVyZSh0YXJnZXQsIHRleHR1cmUpOworfQorCit2b2lkIFNoYXJlZEdy
YXBoaWNzQ29udGV4dDNEOjp1c2VGaWxsU29saWRQcm9ncmFtKGNvbnN0IEFmZmluZVRyYW5zZm9y
bSYgdHJhbnNmb3JtLCBjb25zdCBDb2xvciYgY29sb3IpCit7CisgICAgbV9zb2xpZEZpbGxTaGFk
ZXItPnVzZSh0cmFuc2Zvcm0sIGNvbG9yKTsKK30KKwordm9pZCBTaGFyZWRHcmFwaGljc0NvbnRl
eHQzRDo6dXNlVGV4dHVyZVByb2dyYW0oY29uc3QgQWZmaW5lVHJhbnNmb3JtJiB0cmFuc2Zvcm0s
IGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgdGV4VHJhbnNmb3JtLCBmbG9hdCBhbHBoYSkKK3sKKyAg
ICBtX3RleFNoYWRlci0+dXNlKHRyYW5zZm9ybSwgdGV4VHJhbnNmb3JtLCAwLCBhbHBoYSk7Cit9
CisKK3ZvaWQgU2hhcmVkR3JhcGhpY3NDb250ZXh0M0Q6OmJpbmRGcmFtZWJ1ZmZlcih1bnNpZ25l
ZCBmcmFtZWJ1ZmZlcikKK3sKKyAgICBtX2NvbnRleHQtPmJpbmRGcmFtZWJ1ZmZlcihHcmFwaGlj
c0NvbnRleHQzRDo6RlJBTUVCVUZGRVIsIGZyYW1lYnVmZmVyKTsKK30KKwordm9pZCBTaGFyZWRH
cmFwaGljc0NvbnRleHQzRDo6c2V0Vmlld3BvcnQoY29uc3QgSW50U2l6ZSYgc2l6ZSkKK3sKKyAg
ICBtX2NvbnRleHQtPnZpZXdwb3J0KDAsIDAsIHNpemUud2lkdGgoKSwgc2l6ZS5oZWlnaHQoKSk7
Cit9CisKK2Jvb2wgU2hhcmVkR3JhcGhpY3NDb250ZXh0M0Q6OnBhaW50c0ludG9DYW52YXNCdWZm
ZXIoKSBjb25zdAoreworICAgIHJldHVybiBtX2NvbnRleHQtPnBhaW50c0ludG9DYW52YXNCdWZm
ZXIoKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9ncHUvU2hhcmVkR3JhcGhpY3NDb250ZXh0M0QuaCBiL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvZ3B1L1NoYXJlZEdyYXBoaWNzQ29udGV4dDNELmgKbmV3IGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MC4uMWJhYTBmNmY0NzgwNjE5YTcyNTBlYTU2ODJlMjYxYzRmOTFiY2FhMAotLS0gL2Rldi9udWxs
CisrKyBiL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3B1L1NoYXJlZEdyYXBoaWNzQ29udGV4
dDNELmgKQEAgLTAsMCArMSwxMjQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMTAsIEdvb2ds
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMgYXJlCisgKiBtZXQ6CisgKgorICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAgICAqIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAq
IGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIKKyAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqIGRpc3RyaWJ1dGlvbi4KKyAqICAgICAqIE5laXRo
ZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqIGNvbnRy
aWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZl
ZCBmcm9tCisgKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBw
ZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlS
SUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRP
LCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBT
SEFMTCBUSEUgQ09QWVJJR0hUCisgKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFS
WSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlU
RUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UK
KyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBTaGFyZWRHcmFwaGljc0NvbnRleHQzRF9o
CisjZGVmaW5lIFNoYXJlZEdyYXBoaWNzQ29udGV4dDNEX2gKKworI2luY2x1ZGUgIkdyYXBoaWNz
VHlwZXMuaCIKKyNpbmNsdWRlICJJbWFnZVNvdXJjZS5oIgorI2luY2x1ZGUgIlRleHR1cmUuaCIK
KworI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+CisjaW5jbHVkZSA8d3RmL093blB0ci5oPgorI2lu
Y2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+CisjaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgorCituYW1l
c3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIEFmZmluZVRyYW5zZm9ybTsKK2NsYXNzIENvbG9yOwor
Y2xhc3MgR3JhcGhpY3NDb250ZXh0M0Q7CitjbGFzcyBGbG9hdFJlY3Q7CitjbGFzcyBJbnRTaXpl
OworY2xhc3MgU29saWRGaWxsU2hhZGVyOworY2xhc3MgVGV4U2hhZGVyOworCit0eXBlZGVmIEhh
c2hNYXA8TmF0aXZlSW1hZ2VQdHIsIFJlZlB0cjxUZXh0dXJlPiA+IFRleHR1cmVIYXNoTWFwOwor
CitjbGFzcyBTaGFyZWRHcmFwaGljc0NvbnRleHQzRCA6IHB1YmxpYyBSZWZDb3VudGVkPFNoYXJl
ZEdyYXBoaWNzQ29udGV4dDNEPiB7CitwdWJsaWM6CisgICAgc3RhdGljIFBhc3NSZWZQdHI8U2hh
cmVkR3JhcGhpY3NDb250ZXh0M0Q+IGNyZWF0ZShQYXNzT3duUHRyPEdyYXBoaWNzQ29udGV4dDNE
Pik7CisgICAgflNoYXJlZEdyYXBoaWNzQ29udGV4dDNEKCk7CisKKyAgICAvLyBGdW5jdGlvbnMg
dGhhdCBkZWxlZ2F0ZSBkaXJlY3RseSB0byBHcmFwaGljc0NvbnRleHQzRCwgd2l0aCBjYWNoaW5n
CisgICAgdm9pZCBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICB2b2lkIGJpbmRGcmFtZWJ1ZmZl
cih1bnNpZ25lZCBmcmFtZWJ1ZmZlcik7CisgICAgdm9pZCBzZXRWaWV3cG9ydChjb25zdCBJbnRT
aXplJik7CisgICAgdm9pZCBzY2lzc29yKGNvbnN0IEZsb2F0UmVjdCYpOworICAgIHZvaWQgZW5h
YmxlKHVuc2lnbmVkIGNhcGFjaXR5KTsKKyAgICB2b2lkIGRpc2FibGUodW5zaWduZWQgY2FwYWNp
dHkpOworICAgIHZvaWQgY2xlYXJDb2xvcihjb25zdCBDb2xvciYpOworICAgIHZvaWQgY2xlYXIo
dW5zaWduZWQgbWFzayk7CisgICAgdm9pZCBkcmF3QXJyYXlzKHVuc2lnbmVkIGxvbmcgbW9kZSwg
bG9uZyBmaXJzdCwgbG9uZyBjb3VudCk7CisgICAgdW5zaWduZWQgbG9uZyBnZXRFcnJvcigpOwor
ICAgIHZvaWQgZ2V0SW50ZWdlcnYodW5zaWduZWQgbG9uZyBwbmFtZSwgaW50KiB2YWx1ZSk7CisK
KyAgICB1bnNpZ25lZCBjcmVhdGVGcmFtZWJ1ZmZlcigpOworICAgIHVuc2lnbmVkIGNyZWF0ZVRl
eHR1cmUoKTsKKworICAgIHZvaWQgZGVsZXRlRnJhbWVidWZmZXIodW5zaWduZWQgZnJhbWVidWZm
ZXIpOworICAgIHZvaWQgZGVsZXRlVGV4dHVyZSh1bnNpZ25lZCB0ZXh0dXJlKTsKKworICAgIHZv
aWQgZnJhbWVidWZmZXJUZXh0dXJlMkQodW5zaWduZWQgbG9uZyB0YXJnZXQsIHVuc2lnbmVkIGxv
bmcgYXR0YWNobWVudCwgdW5zaWduZWQgbG9uZyB0ZXh0YXJnZXQsIHVuc2lnbmVkLCBsb25nIGxl
dmVsKTsKKyAgICB2b2lkIHRleFBhcmFtZXRlcmkodW5zaWduZWQgdGFyZ2V0LCB1bnNpZ25lZCBw
bmFtZSwgaW50IHBhcmFtKTsKKyAgICBpbnQgdGV4SW1hZ2UyRCh1bnNpZ25lZCB0YXJnZXQsIHVu
c2lnbmVkIGxldmVsLCB1bnNpZ25lZCBpbnRlcm5hbGZvcm1hdCwgdW5zaWduZWQgd2lkdGgsIHVu
c2lnbmVkIGhlaWdodCwgdW5zaWduZWQgYm9yZGVyLCB1bnNpZ25lZCBmb3JtYXQsIHVuc2lnbmVk
IHR5cGUsIHZvaWQqIHBpeGVscyk7CisgICAgaW50IHRleFN1YkltYWdlMkQodW5zaWduZWQgdGFy
Z2V0LCB1bnNpZ25lZCBsZXZlbCwgdW5zaWduZWQgeG9mZnNldCwgdW5zaWduZWQgeW9mZnNldCwg
dW5zaWduZWQgd2lkdGgsIHVuc2lnbmVkIGhlaWdodCwgdW5zaWduZWQgZm9ybWF0LCB1bnNpZ25l
ZCB0eXBlLCB2b2lkKiBwaXhlbHMpOworCisgICAgdm9pZCByZWFkUGl4ZWxzKGxvbmcgeCwgbG9u
ZyB5LCB1bnNpZ25lZCBsb25nIHdpZHRoLCB1bnNpZ25lZCBsb25nIGhlaWdodCwgdW5zaWduZWQg
bG9uZyBmb3JtYXQsIHVuc2lnbmVkIGxvbmcgdHlwZSwgdm9pZCogZGF0YSk7CisKKyAgICBib29s
IHBhaW50c0ludG9DYW52YXNCdWZmZXIoKSBjb25zdDsKKworICAgIC8vIFNoYXJlZCBsb2dpYyBm
b3IgY2FudmFzIDJkCisgICAgdm9pZCBhcHBseUNvbXBvc2l0ZU9wZXJhdG9yKENvbXBvc2l0ZU9w
ZXJhdG9yKTsKKyAgICB2b2lkIHVzZVF1YWRWZXJ0aWNlcygpOworCisgICAgdm9pZCB1c2VGaWxs
U29saWRQcm9ncmFtKGNvbnN0IEFmZmluZVRyYW5zZm9ybSYsIGNvbnN0IENvbG9yJik7CisgICAg
dm9pZCB1c2VUZXh0dXJlUHJvZ3JhbShjb25zdCBBZmZpbmVUcmFuc2Zvcm0mLCBjb25zdCBBZmZp
bmVUcmFuc2Zvcm0mLCBmbG9hdCBhbHBoYSk7CisKKyAgICB2b2lkIHNldEFjdGl2ZVRleHR1cmUo
dW5zaWduZWQgdGV4dHVyZVVuaXQpOworICAgIHZvaWQgYmluZFRleHR1cmUodW5zaWduZWQgdGFy
Z2V0LCB1bnNpZ25lZCB0ZXh0dXJlKTsKKworICAgIGJvb2wgc3VwcG9ydHNCR1JBKCk7CisKKyAg
ICAvLyBDcmVhdGVzIGEgdGV4dHVyZSBhc3NvY2lhdGVkIHdpdGggdGhlIGdpdmVuIGltYWdlLiAg
SXMgb3duZWQgYnkgdGhpcyBjb250ZXh0J3MKKyAgICAvLyBUZXh0dXJlSGFzaE1hcC4KKyAgICBU
ZXh0dXJlKiBjcmVhdGVUZXh0dXJlKE5hdGl2ZUltYWdlUHRyLCBUZXh0dXJlOjpGb3JtYXQsIGlu
dCB3aWR0aCwgaW50IGhlaWdodCk7CisgICAgVGV4dHVyZSogZ2V0VGV4dHVyZShOYXRpdmVJbWFn
ZVB0cik7CisKKyAgICAvLyBDcmVhdGVzIGEgdGV4dHVyZSB0aGF0IGlzIG5vdCBhc3NvY2lhdGVk
IHdpdGggYW55IGltYWdlLiAgVGhlIGNhbGxlciB0YWtlcyBvd25lcnNoaXAgb2YKKyAgICAvLyB0
aGUgdGV4dHVyZS4KKyAgICBQYXNzUmVmUHRyPFRleHR1cmU+IGNyZWF0ZVRleHR1cmUoVGV4dHVy
ZTo6Rm9ybWF0LCBpbnQgd2lkdGgsIGludCBoZWlnaHQpOworCitwcml2YXRlOgorICAgIFNoYXJl
ZEdyYXBoaWNzQ29udGV4dDNEKFBhc3NPd25QdHI8R3JhcGhpY3NDb250ZXh0M0Q+IGNvbnRleHQp
OworCisgICAgT3duUHRyPEdyYXBoaWNzQ29udGV4dDNEPiBtX2NvbnRleHQ7CisKKyAgICB1bnNp
Z25lZCBtX3F1YWRWZXJ0aWNlczsKKworICAgIE93blB0cjxTb2xpZEZpbGxTaGFkZXI+IG1fc29s
aWRGaWxsU2hhZGVyOworICAgIE93blB0cjxUZXhTaGFkZXI+IG1fdGV4U2hhZGVyOworCisgICAg
VGV4dHVyZUhhc2hNYXAgbV90ZXh0dXJlczsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUK
KworI2VuZGlmIC8vIFNoYXJlZEdyYXBoaWNzQ29udGV4dDNEX2gKZGlmZiAtLWdpdCBhL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3B1L1RleHR1cmUuY3BwIGIvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9ncHUvVGV4dHVyZS5jcHAKaW5kZXggNTU3NjAzYzk3NjMyZmUwZjM4ZjViNzM2ZWM2
NWEzYzY1YzcxNDIzNi4uMzZlNGFkNWVmYzI2ODJkYjVhMDk4MjkyMDIzYzJkM2I1ZmE5NmQ3OCAx
MDA2NDQKLS0tIGEvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ncHUvVGV4dHVyZS5jcHAKKysr
IGIvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ncHUvVGV4dHVyZS5jcHAKQEAgLTM0LDYgKzM0
LDcgQEAKIAogI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dDNELmgiCiAjaW5jbHVkZSAiSW50UmVj
dC5oIgorCiAjaW5jbHVkZSA8d3RmL093bkFycmF5UHRyLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3Jl
IHsKZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc2tpYS9HcmFwaGljc0Nv
bnRleHRTa2lhLmNwcCBiL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc2tpYS9HcmFwaGljc0Nv
bnRleHRTa2lhLmNwcAppbmRleCBiNGZkZGQ1NjhkZTVlOTEyOGUxMzdlODU1ZDM4OGRjYzZhOTI4
OGIzLi4xZjM5YTFhMjQ4MmE1NzA4ZWIxNzgwYmJiMTEzZGIzYzE4N2UzY2YwIDEwMDY0NAotLS0g
YS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3NraWEvR3JhcGhpY3NDb250ZXh0U2tpYS5jcHAK
KysrIGIvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9za2lhL0dyYXBoaWNzQ29udGV4dFNraWEu
Y3BwCkBAIC0xMjQyLDE0ICsxMjQyLDE0IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0Ojp0cmFuc2xh
dGUoZmxvYXQgdywgZmxvYXQgaCkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBXZWJDb3JlRmxvYXRUb1NrU2NhbGFyKGgpKTsKIH0KIAotdm9pZCBHcmFwaGljc0Nv
bnRleHQ6OnNldEdyYXBoaWNzQ29udGV4dDNEKEdyYXBoaWNzQ29udGV4dDNEKiBjb250ZXh0M0Qs
IGNvbnN0IEludFNpemUmIHNpemUpCit2b2lkIEdyYXBoaWNzQ29udGV4dDo6c3luY1NvZnR3YXJl
Q2FudmFzKCkKIHsKLSAgICBwbGF0Zm9ybUNvbnRleHQoKS0+c2V0R3JhcGhpY3NDb250ZXh0M0Qo
Y29udGV4dDNELCBzaXplKTsKKyAgICBwbGF0Zm9ybUNvbnRleHQoKS0+c3luY1NvZnR3YXJlQ2Fu
dmFzKCk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpzeW5jU29mdHdhcmVDYW52YXMoKQor
dm9pZCBHcmFwaGljc0NvbnRleHQ6OnNldFNoYXJlZEdyYXBoaWNzQ29udGV4dDNEKFNoYXJlZEdy
YXBoaWNzQ29udGV4dDNEKiBjb250ZXh0LCBEcmF3aW5nQnVmZmVyKiBmcmFtZWJ1ZmZlciwgY29u
c3QgSW50U2l6ZSYgc2l6ZSkKIHsKLSAgICBwbGF0Zm9ybUNvbnRleHQoKS0+c3luY1NvZnR3YXJl
Q2FudmFzKCk7CisgICAgcGxhdGZvcm1Db250ZXh0KCktPnNldFNoYXJlZEdyYXBoaWNzQ29udGV4
dDNEKGNvbnRleHQsIGZyYW1lYnVmZmVyLCBzaXplKTsKIH0KIAogfSAgLy8gbmFtZXNwYWNlIFdl
YkNvcmUKZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc2tpYS9JbWFnZVNr
aWEuY3BwIGIvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9za2lhL0ltYWdlU2tpYS5jcHAKaW5k
ZXggYWVkMjg5ZmUzYzE1NWFhNWQzNTk2ZDQ5NGI2MDg5M2U0YzAxNmJiNi4uNWI1OTYyYTI1YTAy
YTUwODBlNjA1MzIzNDc4MGI4MmY0YmFjNGQ0NCAxMDA2NDQKLS0tIGEvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9za2lhL0ltYWdlU2tpYS5jcHAKKysrIGIvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9za2lhL0ltYWdlU2tpYS5jcHAKQEAgLTQ3LDYgKzQ3LDcgQEAKICNpbmNsdWRlICJTa1Jl
Y3QuaCIKICNpbmNsdWRlICJTa1NoYWRlci5oIgogI2luY2x1ZGUgIlNraWFVdGlscy5oIgorI2lu
Y2x1ZGUgIlRleHR1cmUuaCIKIAogI2luY2x1ZGUgInNraWEvZXh0L2ltYWdlX29wZXJhdGlvbnMu
aCIKICNpbmNsdWRlICJza2lhL2V4dC9wbGF0Zm9ybV9jYW52YXMuaCIKZGlmZiAtLWdpdCBhL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc2tpYS9QbGF0Zm9ybUNvbnRleHRTa2lhLmNwcCBiL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc2tpYS9QbGF0Zm9ybUNvbnRleHRTa2lhLmNwcAppbmRl
eCAzYjFkMDE1Y2YxMjIzOTUyNzQzZTdhYTc2NDkzNzJhYzQ3NmM4ZjUyLi41MmZlMzI3N2JhZjE0
Y2JmZGM4MGMyNjFjNGI0YTA4N2UwZDJmZjFhIDEwMDY0NAotLS0gYS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL3NraWEvUGxhdGZvcm1Db250ZXh0U2tpYS5jcHAKKysrIGIvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9za2lhL1BsYXRmb3JtQ29udGV4dFNraWEuY3BwCkBAIC0zMywxMiArMzMs
MTMgQEAKICNpbmNsdWRlICJQbGF0Zm9ybUNvbnRleHRTa2lhLmgiCiAKICNpbmNsdWRlICJBZmZp
bmVUcmFuc2Zvcm0uaCIKLSNpbmNsdWRlICJDYW52YXNMYXllckNocm9taXVtLmgiCisjaW5jbHVk
ZSAiRHJhd2luZ0J1ZmZlci5oIgogI2luY2x1ZGUgIkdMRVMyQ2FudmFzLmgiCiAjaW5jbHVkZSAi
R3JhcGhpY3NDb250ZXh0LmgiCiAjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0M0QuaCIKICNpbmNs
dWRlICJJbWFnZUJ1ZmZlci5oIgogI2luY2x1ZGUgIk5hdGl2ZUltYWdlU2tpYS5oIgorI2luY2x1
ZGUgIlNoYXJlZEdyYXBoaWNzQ29udGV4dDNELmgiCiAjaW5jbHVkZSAiU2tpYVV0aWxzLmgiCiAj
aW5jbHVkZSAiVGV4dHVyZS5oIgogI2luY2x1ZGUgIlRpbGluZ0RhdGEuaCIKQEAgLTIxNiwxMiAr
MjE3LDggQEAgUGxhdGZvcm1Db250ZXh0U2tpYTo6UGxhdGZvcm1Db250ZXh0U2tpYShza2lhOjpQ
bGF0Zm9ybUNhbnZhcyogY2FudmFzKQogCiBQbGF0Zm9ybUNvbnRleHRTa2lhOjp+UGxhdGZvcm1D
b250ZXh0U2tpYSgpCiB7Ci0jaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQotICAgIGlm
IChtX2dwdUNhbnZhcykgewotICAgICAgICBDYW52YXNMYXllckNocm9taXVtKiBsYXllciA9IHN0
YXRpY19jYXN0PENhbnZhc0xheWVyQ2hyb21pdW0qPihtX2dwdUNhbnZhcy0+Y29udGV4dCgpLT5w
bGF0Zm9ybUxheWVyKCkpOwotICAgICAgICBsYXllci0+c2V0UHJlcGFyZVRleHR1cmVDYWxsYmFj
aygwKTsKLSAgICB9Ci0jZW5kaWYKKyAgICBpZiAobV9ncHVDYW52YXMpCisgICAgICAgIG1fZ3B1
Q2FudmFzLT5kcmF3aW5nQnVmZmVyKCktPnNldFdpbGxQdWJsaXNoQ2FsbGJhY2soMCk7CiB9CiAK
IHZvaWQgUGxhdGZvcm1Db250ZXh0U2tpYTo6c2V0Q2FudmFzKHNraWE6OlBsYXRmb3JtQ2FudmFz
KiBjYW52YXMpCkBAIC02NzgsMzMgKzY3NSwzMyBAQCB2b2lkIFBsYXRmb3JtQ29udGV4dFNraWE6
OmFwcGx5QW50aUFsaWFzZWRDbGlwUGF0aHMoV1RGOjpWZWN0b3I8U2tQYXRoPiYgcGF0aHMpCiAg
ICAgbV9jYW52YXMtPnJlc3RvcmUoKTsKIH0KIAotI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJ
VElORykKLWNsYXNzIFByZXBhcmVUZXh0dXJlQ2FsbGJhY2tJbXBsIDogcHVibGljIENhbnZhc0xh
eWVyQ2hyb21pdW06OlByZXBhcmVUZXh0dXJlQ2FsbGJhY2sgeworY2xhc3MgV2lsbFB1Ymxpc2hD
YWxsYmFja0ltcGwgOiBwdWJsaWMgRHJhd2luZ0J1ZmZlcjo6V2lsbFB1Ymxpc2hDYWxsYmFjayB7
CiBwdWJsaWM6Ci0gICAgc3RhdGljIFBhc3NPd25QdHI8UHJlcGFyZVRleHR1cmVDYWxsYmFja0lt
cGw+IGNyZWF0ZShQbGF0Zm9ybUNvbnRleHRTa2lhKiBwY3MpCisgICAgc3RhdGljIFBhc3NPd25Q
dHI8V2lsbFB1Ymxpc2hDYWxsYmFjaz4gY3JlYXRlKFBsYXRmb3JtQ29udGV4dFNraWEqIHBjcykK
ICAgICB7Ci0gICAgICAgIHJldHVybiBuZXcgUHJlcGFyZVRleHR1cmVDYWxsYmFja0ltcGwocGNz
KTsKKyAgICAgICAgcmV0dXJuIGFkb3B0UHRyKG5ldyBXaWxsUHVibGlzaENhbGxiYWNrSW1wbChw
Y3MpKTsKICAgICB9CiAKLSAgICB2aXJ0dWFsIHZvaWQgd2lsbFByZXBhcmVUZXh0dXJlKCkKKyAg
ICB2aXJ0dWFsIHZvaWQgd2lsbFB1Ymxpc2goKQogICAgIHsKICAgICAgICAgbV9wY3MtPnByZXBh
cmVGb3JIYXJkd2FyZURyYXcoKTsKICAgICB9CisKIHByaXZhdGU6Ci0gICAgZXhwbGljaXQgUHJl
cGFyZVRleHR1cmVDYWxsYmFja0ltcGwoUGxhdGZvcm1Db250ZXh0U2tpYSogcGNzKSA6IG1fcGNz
KHBjcykge30KKyAgICBleHBsaWNpdCBXaWxsUHVibGlzaENhbGxiYWNrSW1wbChQbGF0Zm9ybUNv
bnRleHRTa2lhKiBwY3MpCisgICAgICAgIDogbV9wY3MocGNzKQorICAgIHsKKyAgICB9CisKICAg
ICBQbGF0Zm9ybUNvbnRleHRTa2lhKiBtX3BjczsKIH07Ci0jZW5kaWYKIAotdm9pZCBQbGF0Zm9y
bUNvbnRleHRTa2lhOjpzZXRHcmFwaGljc0NvbnRleHQzRChHcmFwaGljc0NvbnRleHQzRCogY29u
dGV4dCwgY29uc3QgV2ViQ29yZTo6SW50U2l6ZSYgc2l6ZSkKK3ZvaWQgUGxhdGZvcm1Db250ZXh0
U2tpYTo6c2V0U2hhcmVkR3JhcGhpY3NDb250ZXh0M0QoU2hhcmVkR3JhcGhpY3NDb250ZXh0M0Qq
IGNvbnRleHQsIERyYXdpbmdCdWZmZXIqIGRyYXdpbmdCdWZmZXIsIGNvbnN0IFdlYkNvcmU6Oklu
dFNpemUmIHNpemUpCiB7CiAgICAgbV91c2VHUFUgPSB0cnVlOwotICAgIG1fZ3B1Q2FudmFzID0g
bmV3IEdMRVMyQ2FudmFzKGNvbnRleHQsIHNpemUpOworICAgIG1fZ3B1Q2FudmFzID0gbmV3IEdM
RVMyQ2FudmFzKGNvbnRleHQsIGRyYXdpbmdCdWZmZXIsIHNpemUpOwogICAgIG1fdXBsb2FkVGV4
dHVyZS5jbGVhcigpOwotI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKLSAgICBDYW52
YXNMYXllckNocm9taXVtKiBsYXllciA9IHN0YXRpY19jYXN0PENhbnZhc0xheWVyQ2hyb21pdW0q
Pihjb250ZXh0LT5wbGF0Zm9ybUxheWVyKCkpOwotICAgIGxheWVyLT5zZXRQcmVwYXJlVGV4dHVy
ZUNhbGxiYWNrKFByZXBhcmVUZXh0dXJlQ2FsbGJhY2tJbXBsOjpjcmVhdGUodGhpcykpOwotI2Vu
ZGlmCisgICAgZHJhd2luZ0J1ZmZlci0+c2V0V2lsbFB1Ymxpc2hDYWxsYmFjayhXaWxsUHVibGlz
aENhbGxiYWNrSW1wbDo6Y3JlYXRlKHRoaXMpKTsKIH0KIAogdm9pZCBQbGF0Zm9ybUNvbnRleHRT
a2lhOjpwcmVwYXJlRm9yU29mdHdhcmVEcmF3KCkgY29uc3QKQEAgLTc4NCw5ICs3ODEsOSBAQCB2
b2lkIFBsYXRmb3JtQ29udGV4dFNraWE6OnVwbG9hZFNvZnR3YXJlVG9IYXJkd2FyZShDb21wb3Np
dGVPcGVyYXRvciBvcCkgY29uc3QKIHsKICAgICBjb25zdCBTa0JpdG1hcCYgYml0bWFwID0gbV9j
YW52YXMtPmdldERldmljZSgpLT5hY2Nlc3NCaXRtYXAoZmFsc2UpOwogICAgIFNrQXV0b0xvY2tQ
aXhlbHMgbG9jayhiaXRtYXApOwotICAgIEdyYXBoaWNzQ29udGV4dDNEKiBjb250ZXh0ID0gbV9n
cHVDYW52YXMtPmNvbnRleHQoKTsKKyAgICBTaGFyZWRHcmFwaGljc0NvbnRleHQzRCogY29udGV4
dCA9IG1fZ3B1Q2FudmFzLT5jb250ZXh0KCk7CiAgICAgaWYgKCFtX3VwbG9hZFRleHR1cmUgfHwg
bV91cGxvYWRUZXh0dXJlLT50aWxlcygpLnRvdGFsU2l6ZVgoKSA8IGJpdG1hcC53aWR0aCgpIHx8
IG1fdXBsb2FkVGV4dHVyZS0+dGlsZXMoKS50b3RhbFNpemVZKCkgPCBiaXRtYXAuaGVpZ2h0KCkp
Ci0gICAgICAgIG1fdXBsb2FkVGV4dHVyZSA9IFRleHR1cmU6OmNyZWF0ZShjb250ZXh0LCBUZXh0
dXJlOjpCR1JBOCwgYml0bWFwLndpZHRoKCksIGJpdG1hcC5oZWlnaHQoKSk7CisgICAgICAgIG1f
dXBsb2FkVGV4dHVyZSA9IGNvbnRleHQtPmNyZWF0ZVRleHR1cmUoVGV4dHVyZTo6QkdSQTgsIGJp
dG1hcC53aWR0aCgpLCBiaXRtYXAuaGVpZ2h0KCkpOwogICAgIG1fdXBsb2FkVGV4dHVyZS0+bG9h
ZChiaXRtYXAuZ2V0UGl4ZWxzKCkpOwogICAgIEludFJlY3QgcmVjdCgwLCAwLCBiaXRtYXAud2lk
dGgoKSwgYml0bWFwLmhlaWdodCgpKTsKICAgICBBZmZpbmVUcmFuc2Zvcm0gaWRlbnRpdHk7CkBA
IC03OTksNyArNzk2LDggQEAgdm9pZCBQbGF0Zm9ybUNvbnRleHRTa2lhOjpyZWFkYmFja0hhcmR3
YXJlVG9Tb2Z0d2FyZSgpIGNvbnN0CiAgICAgU2tBdXRvTG9ja1BpeGVscyBsb2NrKGJpdG1hcCk7
CiAgICAgaW50IHdpZHRoID0gYml0bWFwLndpZHRoKCksIGhlaWdodCA9IGJpdG1hcC5oZWlnaHQo
KTsKICAgICBPd25BcnJheVB0cjx1aW50MzJfdD4gYnVmKG5ldyB1aW50MzJfdFt3aWR0aF0pOwot
ICAgIEdyYXBoaWNzQ29udGV4dDNEKiBjb250ZXh0ID0gbV9ncHVDYW52YXMtPmNvbnRleHQoKTsK
KyAgICBTaGFyZWRHcmFwaGljc0NvbnRleHQzRCogY29udGV4dCA9IG1fZ3B1Q2FudmFzLT5jb250
ZXh0KCk7CisgICAgbV9ncHVDYW52YXMtPmJpbmRGcmFtZWJ1ZmZlcigpOwogICAgIC8vIEZsaXBz
IHRoZSBpbWFnZSB2ZXJ0aWNhbGx5LgogICAgIGZvciAoaW50IHkgPSAwOyB5IDwgaGVpZ2h0OyAr
K3kpIHsKICAgICAgICAgdWludDMyX3QqIHBpeGVscyA9IGJpdG1hcC5nZXRBZGRyMzIoMCwgeSk7
CmRpZmYgLS1naXQgYS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3NraWEvUGxhdGZvcm1Db250
ZXh0U2tpYS5oIGIvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9za2lhL1BsYXRmb3JtQ29udGV4
dFNraWEuaAppbmRleCA4MmVkYzE2ZDFmY2NmOGFlOWUxOTUxYzkyNTJjY2M5ZTk1NmY0MTAwLi4y
NjA2MjQwMjRiMTM0ZjBkN2QyMGMxODZkZmM4MzYxNTJjNTU1ZTQ3IDEwMDY0NAotLS0gYS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL3NraWEvUGxhdGZvcm1Db250ZXh0U2tpYS5oCisrKyBiL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc2tpYS9QbGF0Zm9ybUNvbnRleHRTa2lhLmgKQEAgLTM1
LDcgKzM1LDYgQEAKICNpbmNsdWRlICJOb25jb3B5YWJsZS5oIgogCiAjaW5jbHVkZSAiU2tEYXNo
UGF0aEVmZmVjdC5oIgotI2luY2x1ZGUgIlNrRGVxdWUuaCIKICNpbmNsdWRlICJTa0RyYXdMb29w
ZXIuaCIKICNpbmNsdWRlICJTa1BhaW50LmgiCiAjaW5jbHVkZSAiU2tQYXRoLmgiCkBAIC00Niw5
ICs0NSwxMCBAQAogbmFtZXNwYWNlIFdlYkNvcmUgewogCiBlbnVtIENvbXBvc2l0ZU9wZXJhdG9y
OworY2xhc3MgRHJhd2luZ0J1ZmZlcjsKIGNsYXNzIEdMRVMyQ2FudmFzOwotY2xhc3MgVGV4dHVy
ZTsKIGNsYXNzIEdyYXBoaWNzQ29udGV4dDNEOworY2xhc3MgVGV4dHVyZTsKIAogLy8gVGhpcyBj
bGFzcyBob2xkcyB0aGUgcGxhdGZvcm0tc3BlY2lmaWMgc3RhdGUgZm9yIEdyYXBoaWNzQ29udGV4
dC4gV2UgcHV0CiAvLyBtb3N0IG9mIG91ciBTa2lhIHdyYXBwZXJzIG9uIHRoaXMgY2xhc3MuIElu
IHRoZW9yeSwgYSBsb3Qgb2YgdGhpcyBzdHVmZiBjb3VsZApAQCAtMTgxLDcgKzE4MSw3IEBAIHB1
YmxpYzoKICAgICB2b2lkIGNsZWFySW1hZ2VSZXNhbXBsaW5nSGludCgpOwogICAgIGJvb2wgaGFz
SW1hZ2VSZXNhbXBsaW5nSGludCgpIGNvbnN0OwogICAgIGJvb2wgdXNlR1BVKCkgeyByZXR1cm4g
bV91c2VHUFU7IH0KLSAgICB2b2lkIHNldEdyYXBoaWNzQ29udGV4dDNEKEdyYXBoaWNzQ29udGV4
dDNEKiwgY29uc3QgSW50U2l6ZSYpOworICAgIHZvaWQgc2V0U2hhcmVkR3JhcGhpY3NDb250ZXh0
M0QoU2hhcmVkR3JhcGhpY3NDb250ZXh0M0QqLCBEcmF3aW5nQnVmZmVyKiwgY29uc3QgSW50U2l6
ZSYpOwogICAgIEdMRVMyQ2FudmFzKiBncHVDYW52YXMoKSBjb25zdCB7IHJldHVybiBtX2dwdUNh
bnZhcy5nZXQoKTsgfQogCiAgICAgLy8gQ2FsbCB0aGVzZSBiZWZvcmUgbWFraW5nIGEgY2FsbCB0
aGF0IG1hbmlwdWxhdGVzIHRoZSB1bmRlcmx5aW5nCmRpZmYgLS1naXQgYS9XZWJDb3JlL3JlbmRl
cmluZy9SZW5kZXJMYXllckJhY2tpbmcuY3BwIGIvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5
ZXJCYWNraW5nLmNwcAppbmRleCAwYmE5MDdiZTk0MDAxMTQ0ZGYzN2E1YWZkYjdkNTM5YWE4NzQ3
OTYzLi5mOTA5MGJhNzA4NGZkOGE5YTZlODliN2RjNWFhOGYzYzg4MDI0NDM5IDEwMDY0NAotLS0g
YS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllckJhY2tpbmcuY3BwCisrKyBiL1dlYkNvcmUv
cmVuZGVyaW5nL1JlbmRlckxheWVyQmFja2luZy5jcHAKQEAgLTI3LDggKzI3LDExIEBACiAKICNp
ZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCiAKKyNpbmNsdWRlICJSZW5kZXJMYXllckJh
Y2tpbmcuaCIKKwogI2luY2x1ZGUgIkFuaW1hdGlvbkNvbnRyb2xsZXIuaCIKICNpbmNsdWRlICJD
YW52YXNSZW5kZXJpbmdDb250ZXh0LmgiCisjaW5jbHVkZSAiQ2FudmFzUmVuZGVyaW5nQ29udGV4
dDJELmgiCiAjaW5jbHVkZSAiQ1NTUHJvcGVydHlOYW1lcy5oIgogI2luY2x1ZGUgIkNTU1N0eWxl
U2VsZWN0b3IuaCIKICNpbmNsdWRlICJGcmFtZVZpZXcuaCIKQEAgLTUxLDggKzU0LDcgQEAKICNp
bmNsdWRlICJSZW5kZXJWaWRlby5oIgogI2luY2x1ZGUgIlJlbmRlclZpZXcuaCIKICNpbmNsdWRl
ICJTZXR0aW5ncy5oIgotCi0jaW5jbHVkZSAiUmVuZGVyTGF5ZXJCYWNraW5nLmgiCisjaW5jbHVk
ZSAiV2ViR0xSZW5kZXJpbmdDb250ZXh0LmgiCiAKIHVzaW5nIG5hbWVzcGFjZSBzdGQ7CiAKQEAg
LTI1OCw5ICsyNjAsOCBAQCBib29sIFJlbmRlckxheWVyQmFja2luZzo6dXBkYXRlR3JhcGhpY3NM
YXllckNvbmZpZ3VyYXRpb24oKQogICAgIGVsc2UgaWYgKGlzQWNjZWxlcmF0ZWRDYW52YXMocmVu
ZGVyZXIoKSkpIHsKICAgICAgICAgSFRNTENhbnZhc0VsZW1lbnQqIGNhbnZhcyA9IHN0YXRpY19j
YXN0PEhUTUxDYW52YXNFbGVtZW50Kj4ocmVuZGVyZXIoKS0+bm9kZSgpKTsKICAgICAgICAgaWYg
KENhbnZhc1JlbmRlcmluZ0NvbnRleHQqIGNvbnRleHQgPSBjYW52YXMtPnJlbmRlcmluZ0NvbnRl
eHQoKSkKLSAgICAgICAgICAgIGlmIChjb250ZXh0LT5ncmFwaGljc0NvbnRleHQzRCgpKQotICAg
ICAgICAgICAgICAgIGlmIChQbGF0Zm9ybUxheWVyKiBwbCA9IGNvbnRleHQtPmdyYXBoaWNzQ29u
dGV4dDNEKCktPnBsYXRmb3JtTGF5ZXIoKSkKLSAgICAgICAgICAgICAgICAgICAgbV9ncmFwaGlj
c0xheWVyLT5zZXRDb250ZW50c1RvQ2FudmFzKHBsKTsKKyAgICAgICAgICAgIG1fZ3JhcGhpY3NM
YXllci0+c2V0Q29udGVudHNUb0NhbnZhcyhjb250ZXh0LT5wbGF0Zm9ybUxheWVyKCkpOworICAg
ICAgICBsYXllckNvbmZpZ0NoYW5nZWQgPSB0cnVlOwogICAgIH0KICNlbmRpZgogCmRpZmYgLS1n
aXQgYS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nIGIvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxv
ZwppbmRleCAwMWEyYmJmN2I1YTgwODg3YTg4ZmU5MWNiOTI4OGQyMmM4ZTU3ODQxLi4wZWYzMjRi
ZjM2N2E3MjA0ZTk4OGYzZGE2YmZlNzY0ODcxZTQ1YThjIDEwMDY0NAotLS0gYS9XZWJLaXQvY2hy
b21pdW0vQ2hhbmdlTG9nCisrKyBiL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKQEAgLTEsMyAr
MSwyNCBAQAorMjAxMC0wOS0wMiAgSmFtZXMgUm9iaW5zb24gIDxqYW1lc3JAY2hyb21pdW0ub3Jn
PgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIE11bHRp
cGxlIGFjY2VsZXJhdGVkIDJEIGNhbnZhc2VzIHNob3VsZCBiZSBhYmxlIHRvIHVzZSB0aGUgc2Ft
ZSBHcmFwaGljc0NvbnRleHQzRAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9NDQ5MjYKKworICAgICAgICBBZGRzIGEgU2hhcmVkQ29udGV4dDNEIHRvIFdl
YlZpZXdJbXBsLiBUaGUgU2hhcmVkQ29udGV4dDNEIGhhcyB0byBsaXZlIG9uIFdlYlZpZXdJbXBs
IHRvIGJlCisgICAgICAgIHRpZWQgdG8gdGhlIGxpZmV0aW1lIG9mIHRoZSBjb21wb3NpdG9yIGNv
bnRleHQuCisKKyAgICAgICAgKiBzcmMvQ2hyb21lQ2xpZW50SW1wbC5jcHA6CisgICAgICAgIChX
ZWJLaXQ6OkNocm9tZUNsaWVudEltcGw6OmdldFNoYXJlZEdyYXBoaWNzQ29udGV4dDNEKToKKyAg
ICAgICAgKiBzcmMvQ2hyb21lQ2xpZW50SW1wbC5oOgorICAgICAgICAqIHNyYy9HcmFwaGljc0Nv
bnRleHQzRC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzREludGVybmFs
Ojppbml0aWFsaXplKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNESW50ZXJu
YWw6OnBsYXRmb3JtTGF5ZXIpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6
OnBsYXRmb3JtTGF5ZXIpOgorICAgICAgICAqIHNyYy9XZWJWaWV3SW1wbC5jcHA6CisgICAgICAg
IChXZWJLaXQ6OldlYlZpZXdJbXBsOjpnZXRTaGFyZWRHcmFwaGljc0NvbnRleHQzRCk6CisgICAg
ICAgICogc3JjL1dlYlZpZXdJbXBsLmg6CisKIDIwMTAtMDgtMzAgIEtpbnVrbyBZYXN1ZGEgIDxr
aW51a29AY2hyb21pdW0ub3NyYz4KIAogICAgICAgICBSZXZpZXdlZCBieSBEYXJpbiBGaXNoZXIu
CmRpZmYgLS1naXQgYS9XZWJLaXQvY2hyb21pdW0vc3JjL0Nocm9tZUNsaWVudEltcGwuY3BwIGIv
V2ViS2l0L2Nocm9taXVtL3NyYy9DaHJvbWVDbGllbnRJbXBsLmNwcAppbmRleCBlNmYxNDAwNzE4
MGQ4ZDNiZjYxMjhiMTMwZGMyOGFiYWFlYzFmOTBhLi45ZWRlZTAyOGY4YTA3MDM1MzNiNTFhYjVl
MzA5NGVhZWIxOGQwYjVmIDEwMDY0NAotLS0gYS9XZWJLaXQvY2hyb21pdW0vc3JjL0Nocm9tZUNs
aWVudEltcGwuY3BwCisrKyBiL1dlYktpdC9jaHJvbWl1bS9zcmMvQ2hyb21lQ2xpZW50SW1wbC5j
cHAKQEAgLTU5LDYgKzU5LDcgQEAKICNpbmNsdWRlICJTZWFyY2hQb3B1cE1lbnVDaHJvbWl1bS5o
IgogI2luY2x1ZGUgIlNjcmlwdENvbnRyb2xsZXIuaCIKICNpbmNsdWRlICJTZWN1cml0eU9yaWdp
bi5oIgorI2luY2x1ZGUgIlNoYXJlZEdyYXBoaWNzQ29udGV4dDNELmgiCiAjaW5jbHVkZSAiV2Vi
R2VvbG9jYXRpb25TZXJ2aWNlLmgiCiAjaWYgVVNFKFY4KQogI2luY2x1ZGUgIlY4UHJveHkuaCIK
QEAgLTc1MSw2ICs3NTIsMTEgQEAgdm9pZCBDaHJvbWVDbGllbnRJbXBsOjpzY2hlZHVsZUNvbXBv
c2l0aW5nTGF5ZXJTeW5jKCkKIH0KICNlbmRpZgogCitXZWJDb3JlOjpTaGFyZWRHcmFwaGljc0Nv
bnRleHQzRCogQ2hyb21lQ2xpZW50SW1wbDo6Z2V0U2hhcmVkR3JhcGhpY3NDb250ZXh0M0QoKQor
eworICAgIHJldHVybiBtX3dlYlZpZXctPmdldFNoYXJlZEdyYXBoaWNzQ29udGV4dDNEKCk7Cit9
CisKIGJvb2wgQ2hyb21lQ2xpZW50SW1wbDo6c3VwcG9ydHNGdWxsc2NyZWVuRm9yTm9kZShjb25z
dCBXZWJDb3JlOjpOb2RlKiBub2RlKQogewogICAgIGlmIChtX3dlYlZpZXctPmNsaWVudCgpICYm
IG5vZGUtPmhhc1RhZ05hbWUoV2ViQ29yZTo6SFRNTE5hbWVzOjp2aWRlb1RhZykpCmRpZmYgLS1n
aXQgYS9XZWJLaXQvY2hyb21pdW0vc3JjL0Nocm9tZUNsaWVudEltcGwuaCBiL1dlYktpdC9jaHJv
bWl1bS9zcmMvQ2hyb21lQ2xpZW50SW1wbC5oCmluZGV4IGJmZjlmOTA0N2ZhN2M3ZjNhYmQ3MDRk
OTQ3ODVkOWMxZmFjZjc3NDAuLmQ3YjVjODZjOWZlM2ZlYzQ1Zjc5M2FlMTJiOWQ1MjQxYmM5ZDlj
M2YgMTAwNjQ0Ci0tLSBhL1dlYktpdC9jaHJvbWl1bS9zcmMvQ2hyb21lQ2xpZW50SW1wbC5oCisr
KyBiL1dlYktpdC9jaHJvbWl1bS9zcmMvQ2hyb21lQ2xpZW50SW1wbC5oCkBAIC0xNTIsNiArMTUy
LDggQEAgcHVibGljOgogICAgIHZpcnR1YWwgdm9pZCBzY2hlZHVsZUNvbXBvc2l0aW5nTGF5ZXJT
eW5jKCk7CiAjZW5kaWYKIAorICAgIHZpcnR1YWwgV2ViQ29yZTo6U2hhcmVkR3JhcGhpY3NDb250
ZXh0M0QqIGdldFNoYXJlZEdyYXBoaWNzQ29udGV4dDNEKCk7CisKICAgICB2aXJ0dWFsIGJvb2wg
c3VwcG9ydHNGdWxsc2NyZWVuRm9yTm9kZShjb25zdCBXZWJDb3JlOjpOb2RlKik7CiAgICAgdmly
dHVhbCB2b2lkIGVudGVyRnVsbHNjcmVlbkZvck5vZGUoV2ViQ29yZTo6Tm9kZSopOwogICAgIHZp
cnR1YWwgdm9pZCBleGl0RnVsbHNjcmVlbkZvck5vZGUoV2ViQ29yZTo6Tm9kZSopOwpkaWZmIC0t
Z2l0IGEvV2ViS2l0L2Nocm9taXVtL3NyYy9HcmFwaGljc0NvbnRleHQzRC5jcHAgYi9XZWJLaXQv
Y2hyb21pdW0vc3JjL0dyYXBoaWNzQ29udGV4dDNELmNwcAppbmRleCA2YmM1ZmZlNDMxZTg0ZTRl
N2JlMjBlOTQwNDE0ZWRlYWY4MzNhOWM3Li42YTliM2U0ZGU3NGQyMzJjMzE5ODExMDhkMGE1N2Ji
Mzc2N2JmZjA4IDEwMDY0NAotLS0gYS9XZWJLaXQvY2hyb21pdW0vc3JjL0dyYXBoaWNzQ29udGV4
dDNELmNwcAorKysgYi9XZWJLaXQvY2hyb21pdW0vc3JjL0dyYXBoaWNzQ29udGV4dDNELmNwcApA
QCAtMzUsNyArMzUsNyBAQAogI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dDNELmgiCiAKICNpbmNs
dWRlICJDYWNoZWRJbWFnZS5oIgotI2luY2x1ZGUgIkNhbnZhc0xheWVyQ2hyb21pdW0uaCIKKyNp
bmNsdWRlICJXZWJHTExheWVyQ2hyb21pdW0uaCIKICNpbmNsdWRlICJDYW52YXNSZW5kZXJpbmdD
b250ZXh0LmgiCiAjaW5jbHVkZSAiQ2hyb21lLmgiCiAjaW5jbHVkZSAiQ2hyb21lQ2xpZW50SW1w
bC5oIgpAQCAtMTAzLDcgKzEwMyw3IEBAIHB1YmxpYzoKICAgICB2b2lkIHByZXBhcmVUZXh0dXJl
KCk7CiAKICNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCi0gICAgQ2FudmFzTGF5ZXJD
aHJvbWl1bSogcGxhdGZvcm1MYXllcigpIGNvbnN0OworICAgIFdlYkdMTGF5ZXJDaHJvbWl1bSog
cGxhdGZvcm1MYXllcigpIGNvbnN0OwogI2VuZGlmCiAgICAgYm9vbCBpc0dMRVMyQ29tcGxpYW50
KCkgY29uc3Q7CiAgICAgYm9vbCBpc0dMRVMyTlBPVFN0cmljdCgpIGNvbnN0OwpAQCAtMjk4LDcg
KzI5OCw3IEBAIHByaXZhdGU6CiAgICAgT3duUHRyPFdlYktpdDo6V2ViR3JhcGhpY3NDb250ZXh0
M0Q+IG1faW1wbDsKICAgICBXZWJLaXQ6OldlYlZpZXdJbXBsKiBtX3dlYlZpZXdJbXBsOwogI2lm
IFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKLSAgICBSZWZQdHI8Q2FudmFzTGF5ZXJDaHJv
bWl1bT4gbV9jb21wb3NpdGluZ0xheWVyOworICAgIFJlZlB0cjxXZWJHTExheWVyQ2hyb21pdW0+
IG1fY29tcG9zaXRpbmdMYXllcjsKICNlbmRpZgogI2lmIFBMQVRGT1JNKFNLSUEpCiAgICAgLy8g
SWYgdGhlIHdpZHRoIGFuZCBoZWlnaHQgb2YgdGhlIENhbnZhcydzIGJhY2tpbmcgc3RvcmUgZG9u
J3QKQEAgLTM2MCw3ICszNjAsNyBAQCBib29sIEdyYXBoaWNzQ29udGV4dDNESW50ZXJuYWw6Omlu
aXRpYWxpemUoR3JhcGhpY3NDb250ZXh0M0Q6OkF0dHJpYnV0ZXMgYXR0cnMsCiAgICAgbV9pbXBs
LnNldCh3ZWJDb250ZXh0KTsKIAogI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKLSAg
ICBtX2NvbXBvc2l0aW5nTGF5ZXIgPSBDYW52YXNMYXllckNocm9taXVtOjpjcmVhdGUoMCk7Cisg
ICAgbV9jb21wb3NpdGluZ0xheWVyID0gV2ViR0xMYXllckNocm9taXVtOjpjcmVhdGUoMCk7CiAj
ZW5kaWYKICAgICByZXR1cm4gdHJ1ZTsKIH0KQEAgLTM4MSw3ICszODEsNyBAQCB2b2lkIEdyYXBo
aWNzQ29udGV4dDNESW50ZXJuYWw6OnByZXBhcmVUZXh0dXJlKCkKIH0KIAogI2lmIFVTRShBQ0NF
TEVSQVRFRF9DT01QT1NJVElORykKLUNhbnZhc0xheWVyQ2hyb21pdW0qIEdyYXBoaWNzQ29udGV4
dDNESW50ZXJuYWw6OnBsYXRmb3JtTGF5ZXIoKSBjb25zdAorV2ViR0xMYXllckNocm9taXVtKiBH
cmFwaGljc0NvbnRleHQzREludGVybmFsOjpwbGF0Zm9ybUxheWVyKCkgY29uc3QKIHsKICAgICBy
ZXR1cm4gbV9jb21wb3NpdGluZ0xheWVyLmdldCgpOwogfQpAQCAtMTAzOSw3ICsxMDM5LDcgQEAg
dm9pZCBHcmFwaGljc0NvbnRleHQzRDo6cHJlcGFyZVRleHR1cmUoKQogI2lmIFVTRShBQ0NFTEVS
QVRFRF9DT01QT1NJVElORykKIFBsYXRmb3JtTGF5ZXIqIEdyYXBoaWNzQ29udGV4dDNEOjpwbGF0
Zm9ybUxheWVyKCkgY29uc3QKIHsKLSAgICBDYW52YXNMYXllckNocm9taXVtKiBjYW52YXNMYXll
ciA9IG1faW50ZXJuYWwtPnBsYXRmb3JtTGF5ZXIoKTsKKyAgICBXZWJHTExheWVyQ2hyb21pdW0q
IGNhbnZhc0xheWVyID0gbV9pbnRlcm5hbC0+cGxhdGZvcm1MYXllcigpOwogICAgIGNhbnZhc0xh
eWVyLT5zZXRDb250ZXh0KHRoaXMpOwogICAgIHJldHVybiBjYW52YXNMYXllcjsKIH0KZGlmZiAt
LWdpdCBhL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViVmlld0ltcGwuY3BwIGIvV2ViS2l0L2Nocm9t
aXVtL3NyYy9XZWJWaWV3SW1wbC5jcHAKaW5kZXggNTA2NWY1ZWI5YjY0MDgzZmMzYjFlMTc0ZjQy
ODE1YzU3MzdiNDgzOS4uNTUzMzVjY2FmM2IyM2NmNTg0N2I3ZDc4MGMwMTgyOGRhNjFhMjYwNiAx
MDA2NDQKLS0tIGEvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJWaWV3SW1wbC5jcHAKKysrIGIvV2Vi
S2l0L2Nocm9taXVtL3NyYy9XZWJWaWV3SW1wbC5jcHAKQEAgLTU4LDYgKzU4LDcgQEAKICNpbmNs
dWRlICJHTEVTMkNvbnRleHQuaCIKICNpbmNsdWRlICJHTEVTMkNvbnRleHRJbnRlcm5hbC5oIgog
I2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgorI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dDNE
LmgiCiAjaW5jbHVkZSAiSFRNTElucHV0RWxlbWVudC5oIgogI2luY2x1ZGUgIkhUTUxNZWRpYUVs
ZW1lbnQuaCIKICNpbmNsdWRlICJIaXRUZXN0UmVzdWx0LmgiCkBAIC04Niw2ICs4Nyw3IEBACiAj
aW5jbHVkZSAiU2VjdXJpdHlPcmlnaW4uaCIKICNpbmNsdWRlICJTZWxlY3Rpb25Db250cm9sbGVy
LmgiCiAjaW5jbHVkZSAiU2V0dGluZ3MuaCIKKyNpbmNsdWRlICJTaGFyZWRHcmFwaGljc0NvbnRl
eHQzRC5oIgogI2luY2x1ZGUgIlRpbWVyLmgiCiAjaW5jbHVkZSAiVHlwaW5nQ29tbWFuZC5oIgog
I2luY2x1ZGUgIlVzZXJHZXN0dXJlSW5kaWNhdG9yLmgiCkBAIC0yMjExLDE0ICsyMjEzLDE1IEBA
IFBhc3NPd25QdHI8R0xFUzJDb250ZXh0PiBXZWJWaWV3SW1wbDo6Z2V0T25zY3JlZW5HTEVTMkNv
bnRleHQoKQogICAgIHJldHVybiBHTEVTMkNvbnRleHQ6OmNyZWF0ZShHTEVTMkNvbnRleHRJbnRl
cm5hbDo6Y3JlYXRlKGdsZXMyQ29udGV4dCgpLCBmYWxzZSkpOwogfQogCi1QYXNzT3duUHRyPEdM
RVMyQ29udGV4dD4gV2ViVmlld0ltcGw6OmdldE9mZnNjcmVlbkdMRVMyQ29udGV4dCgpCitTaGFy
ZWRHcmFwaGljc0NvbnRleHQzRCogV2ViVmlld0ltcGw6OmdldFNoYXJlZEdyYXBoaWNzQ29udGV4
dDNEKCkKIHsKLSAgICBXZWJHTEVTMkNvbnRleHQqIGNvbnRleHQgPSB3ZWJLaXRDbGllbnQoKS0+
Y3JlYXRlR0xFUzJDb250ZXh0KCk7Ci0gICAgaWYgKCFjb250ZXh0KQotICAgICAgICByZXR1cm4g
MDsKLSAgICBpZiAoIWNvbnRleHQtPmluaXRpYWxpemUoMCwgZ2xlczJDb250ZXh0KCkpKQotICAg
ICAgICByZXR1cm4gMDsKLSAgICByZXR1cm4gR0xFUzJDb250ZXh0OjpjcmVhdGUoR0xFUzJDb250
ZXh0SW50ZXJuYWw6OmNyZWF0ZShjb250ZXh0LCB0cnVlKSk7CisgICAgaWYgKCFtX3NoYXJlZENv
bnRleHQzRCkgeworICAgICAgICBHcmFwaGljc0NvbnRleHQzRDo6QXR0cmlidXRlcyBhdHRyOwor
ICAgICAgICBPd25QdHI8R3JhcGhpY3NDb250ZXh0M0Q+IGNvbnRleHQgPSBHcmFwaGljc0NvbnRl
eHQzRDo6Y3JlYXRlKGF0dHIsIG1fcGFnZS0+Y2hyb21lKCkpOworICAgICAgICBtX3NoYXJlZENv
bnRleHQzRCA9IFNoYXJlZEdyYXBoaWNzQ29udGV4dDNEOjpjcmVhdGUoY29udGV4dC5yZWxlYXNl
KCkpOworICAgIH0KKworICAgIHJldHVybiBtX3NoYXJlZENvbnRleHQzRC5nZXQoKTsKIH0KIAog
Ly8gUmV0dXJucyB0aGUgR0xFUzIgY29udGV4dCBhc3NvY2lhdGVkIHdpdGggdGhpcyBWaWV3LiBJ
ZiBvbmUgZG9lc24ndCBleGlzdApkaWZmIC0tZ2l0IGEvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJW
aWV3SW1wbC5oIGIvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJWaWV3SW1wbC5oCmluZGV4IGMyOTYx
MjEyM2Y0NTE0Yzk0ZGQ3ZDk3MGM3MzExNGE0YmVlZWMzNTUuLjZjZTI3NTdhODJlOWJkNGMwOGE0
NGJlZTIyMzU0ZDIzNjNjYjgzMTggMTAwNjQ0Ci0tLSBhL1dlYktpdC9jaHJvbWl1bS9zcmMvV2Vi
Vmlld0ltcGwuaAorKysgYi9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYlZpZXdJbXBsLmgKQEAgLTMy
OSwxMCArMzI5LDEwIEBAIHB1YmxpYzoKICAgICAvLyBPZmZzY3JlZW4gY29udGV4dHMgcmVuZGVy
IG9mZnNjcmVlbiBidXQgY2FuIHNoYXJlIHJlc291cmNlcyB3aXRoIHRoZQogICAgIC8vIG9uc2Ny
ZWVuIGNvbnRleHQgYW5kIHRodXMgY2FuIGJlIGNvbXBvc2l0ZWQuCiAgICAgUGFzc093blB0cjxX
ZWJDb3JlOjpHTEVTMkNvbnRleHQ+IGdldE9uc2NyZWVuR0xFUzJDb250ZXh0KCk7Ci0gICAgUGFz
c093blB0cjxXZWJDb3JlOjpHTEVTMkNvbnRleHQ+IGdldE9mZnNjcmVlbkdMRVMyQ29udGV4dCgp
OwogCiAgICAgLy8gUmV0dXJucyBhbiBvbnNjcmVlbiBjb250ZXh0CiAgICAgdmlydHVhbCBXZWJH
TEVTMkNvbnRleHQqIGdsZXMyQ29udGV4dCgpOworICAgIHZpcnR1YWwgV2ViQ29yZTo6U2hhcmVk
R3JhcGhpY3NDb250ZXh0M0QqIGdldFNoYXJlZEdyYXBoaWNzQ29udGV4dDNEKCk7CiAKICAgICBX
ZWJDb3JlOjpQb3B1cENvbnRhaW5lciogc2VsZWN0UG9wdXAoKSBjb25zdCB7IHJldHVybiBtX3Nl
bGVjdFBvcHVwLmdldCgpOyB9CiAKQEAgLTUyMSw2ICs1MjEsOCBAQCBwcml2YXRlOgogCiAgICAg
T3duUHRyPFdlYkdMRVMyQ29udGV4dD4gbV9nbGVzMkNvbnRleHQ7CiAKKyAgICBSZWZQdHI8V2Vi
Q29yZTo6U2hhcmVkR3JhcGhpY3NDb250ZXh0M0Q+IG1fc2hhcmVkQ29udGV4dDNEOworCiAgICAg
T3duUHRyPERldmljZU9yaWVudGF0aW9uQ2xpZW50UHJveHk+IG1fZGV2aWNlT3JpZW50YXRpb25D
bGllbnRQcm94eTsKIH07CiAK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>66461</attachid>
            <date>2010-09-02 19:47:30 -0700</date>
            <delta_ts>2010-09-03 13:51:28 -0700</delta_ts>
            <desc>other PlatformLayer ownership model</desc>
            <filename>bug-44926-20100902194729.patch</filename>
            <type>text/plain</type>
            <size>102640</size>
            <attacher name="James Robinson">jamesr</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ2hhbmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXgg
ZGRjZDUyZTk2NzZiYTY2YmIwM2M0MTBhZmZmNTllMjI2MWY3ZDgzMC4uZTRhNTE0M2UxYWE1MmUz
NjU1ZmU0ZjEzMjBhMjZjNDNiY2Q4ODdiOSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9DaGFuZ2VMb2cK
KysrIGIvV2ViQ29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxNTIgQEAKKzIwMTAtMDktMDIgIEph
bWVzIFJvYmluc29uICA8amFtZXNyQGNocm9taXVtLm9yZz4KKworICAgICAgICBSZXZpZXdlZCBi
eSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBNdWx0aXBsZSBhY2NlbGVyYXRlZCAyRCBjYW52
YXNlcyBzaG91bGQgYmUgYWJsZSB0byB1c2UgdGhlIHNhbWUgR3JhcGhpY3NDb250ZXh0M0QKKyAg
ICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTQ0OTI2CisKKyAg
ICAgICAgVGhpcyBhbGxvd3MgbWFueSBhY2NlbGVyYXRlZCAyZCBjYW52YXNlcyB0byByZW5kZXIg
dXNpbmcgYSBzaW5nbGUgdW5kZXJseWluZyBHcmFwaGljc0NvbnRleHQzRC4KKyAgICAgICAgSXQg
aW50cm9kdWNlcyBhIG5ldyBjbGFzcyBTaGFyZWRHcmFwaGljc0NvbnRleHQzRCB0aGF0IG1hbmFn
ZXMgc2V2ZXJhbCBjYWxsZXJzLiAgVGhpcyBjbGFzcyBjb3VsZAorICAgICAgICBhbHNvIGNhY2hl
IHRoZSBjdXJyZW50IHN0YXRlIHRvIGF2b2lkIGlzc3VpbmcgcmVkdW5kYW50IGNhbGxzLCBhbHRo
b3VnaCBpbiB0aGlzIGZpcnN0IGN1dCBpdCBkb2Vzbid0LgorICAgICAgICBUaGUgU2hhcmVkR3Jh
cGhpY3NDb250ZXh0M0QgaXMgcHJvdmlkZWQgdGhyb3VnaCB0aGUgQ2hyb21lQ2xpZW50IHNvIHRo
YXQgaXRzIGxpZmV0aW1lIGNhbiBiZSB0aWVkIHRvIHRoYXQKKyAgICAgICAgb2YgdGhlIHBsYXRm
b3JtLXNwZWNpZmljIGNvbXBvc2l0b3IgaW5mcmFzdHJ1Y3R1cmUuCisKKyAgICAgICAgQWNjZWxl
cmF0ZWQgMmQgY2FudmFzZXMgbWFpbnRhaW4gYSByZWZlcmVuY2UgdG8gYSBTaGFyZWRHcmFwaGlj
c0NvbnRleHQzRCBhbmQgaGF2ZSBvd25lcnNoaXAgb2YgYSBDYW52YXNGcmFtZWJ1ZmZlciwKKyAg
ICAgICAgd2hpY2ggcmVwcmVzZW50cyB0aGUgY2FudmFzJ3MgcmVuZGVyaW5nIHRhcmdldC4gIFRo
ZSBjb21wb3NpdGluZyBsYXllciBmb3IgYW4gYWNjZWxlcmF0ZWQgMmQgY2FudmFzIGlzCisgICAg
ICAgIGF3YXJlIG9ubHkgb2YgdGhlIGNhbnZhcydzIENhbnZhc0ZyYW1lYnVmZmVyLiAgVGhpcyBt
ZWFucyB0aGF0IFdlYkdMIGFuZCAyZCBjYW52YXNlcyBhcmUgbm8gbG9uZ2VyIHRyZWF0ZWQKKyAg
ICAgICAgYXMgdGhlIHNhbWUgdGltZSBvZiBsYXllciBieSB0aGUgY29tcG9zaXRvci4KKworICAg
ICAgICBDb3ZlcmVkIGJ5IGV4aXN0aW5nIGNhbnZhcyB0ZXN0cy4KKworICAgICAgICAqIFdlYkNv
cmUuZ3lwaToKKyAgICAgICAgKiBodG1sL2NhbnZhcy9DYW52YXNSZW5kZXJpbmdDb250ZXh0LmNw
cDoKKyAgICAgICAgKiBodG1sL2NhbnZhcy9DYW52YXNSZW5kZXJpbmdDb250ZXh0Lmg6CisgICAg
ICAgIChXZWJDb3JlOjpDYW52YXNSZW5kZXJpbmdDb250ZXh0OjpwYWludHNJbnRvQ2FudmFzQnVm
ZmVyKToKKyAgICAgICAgKFdlYkNvcmU6OkNhbnZhc1JlbmRlcmluZ0NvbnRleHQ6OnBsYXRmb3Jt
TGF5ZXIpOgorICAgICAgICAqIGh0bWwvY2FudmFzL0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRC5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ6OkNhbnZhc1Jl
bmRlcmluZ0NvbnRleHQyRCk6CisgICAgICAgIChXZWJDb3JlOjpDYW52YXNSZW5kZXJpbmdDb250
ZXh0MkQ6OnBhaW50c0ludG9DYW52YXNCdWZmZXIpOgorICAgICAgICAoV2ViQ29yZTo6Q2FudmFz
UmVuZGVyaW5nQ29udGV4dDJEOjpyZXNldCk6CisgICAgICAgIChXZWJDb3JlOjpDYW52YXNSZW5k
ZXJpbmdDb250ZXh0MkQ6OmRpZERyYXcpOgorICAgICAgICAoV2ViQ29yZTo6Q2FudmFzUmVuZGVy
aW5nQ29udGV4dDJEOjpwbGF0Zm9ybUxheWVyKToKKyAgICAgICAgKiBodG1sL2NhbnZhcy9DYW52
YXNSZW5kZXJpbmdDb250ZXh0MkQuaDoKKyAgICAgICAgKiBodG1sL2NhbnZhcy9XZWJHTFJlbmRl
cmluZ0NvbnRleHQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0
OjpwYWludHNJbnRvQ2FudmFzQnVmZmVyKToKKyAgICAgICAgKiBodG1sL2NhbnZhcy9XZWJHTFJl
bmRlcmluZ0NvbnRleHQuaDoKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4
dDo6Z3JhcGhpY3NDb250ZXh0M0QpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdD
b250ZXh0OjpwbGF0Zm9ybUxheWVyKToKKyAgICAgICAgKiBsb2FkZXIvRW1wdHlDbGllbnRzLmg6
CisgICAgICAgIChXZWJDb3JlOjpFbXB0eUNocm9tZUNsaWVudDo6YXR0YWNoUm9vdEdyYXBoaWNz
TGF5ZXIpOgorICAgICAgICAoV2ViQ29yZTo6RW1wdHlDaHJvbWVDbGllbnQ6OnNldE5lZWRzT25l
U2hvdERyYXdpbmdTeW5jaHJvbml6YXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6RW1wdHlDaHJv
bWVDbGllbnQ6OnNjaGVkdWxlQ29tcG9zaXRpbmdMYXllclN5bmMpOgorICAgICAgICAqIHBhZ2Uv
Q2hyb21lQ2xpZW50Lmg6CisgICAgICAgIChXZWJDb3JlOjpDaHJvbWVDbGllbnQ6OmdldFNoYXJl
ZEdyYXBoaWNzQ29udGV4dDNEKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGlj
c0NvbnRleHQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpzZXRTaGFy
ZWRHcmFwaGljc0NvbnRleHQzRCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6
OnN5bmNTb2Z0d2FyZUNhbnZhcyk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhp
Y3NDb250ZXh0Lmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vQ2FudmFz
MkRMYXllckNocm9taXVtLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpDYW52YXMyRExh
eWVyQ2hyb21pdW06OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpDYW52YXMyRExheWVyQ2hy
b21pdW06OkNhbnZhczJETGF5ZXJDaHJvbWl1bSk6CisgICAgICAgIChXZWJDb3JlOjpDYW52YXMy
RExheWVyQ2hyb21pdW06On5DYW52YXMyRExheWVyQ2hyb21pdW0pOgorICAgICAgICAoV2ViQ29y
ZTo6Q2FudmFzMkRMYXllckNocm9taXVtOjp1cGRhdGVDb250ZW50cyk6CisgICAgICAgIChXZWJD
b3JlOjpDYW52YXMyRExheWVyQ2hyb21pdW06OnNldFRleHR1cmVDaGFuZ2VkKToKKyAgICAgICAg
KFdlYkNvcmU6OkNhbnZhczJETGF5ZXJDaHJvbWl1bTo6dGV4dHVyZUlkKToKKyAgICAgICAgKiBw
bGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9DYW52YXMyRExheWVyQ2hyb21pdW0uaDogQWRkZWQu
CisgICAgICAgIChXZWJDb3JlOjpDYW52YXMyRExheWVyQ2hyb21pdW06OmRyYXdzQ29udGVudCk6
CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vQ2FudmFzTGF5ZXJDaHJvbWl1
bS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDYW52YXNMYXllckNocm9taXVtOjpDYW52YXNMYXll
ckNocm9taXVtKToKKyAgICAgICAgKFdlYkNvcmU6OkNhbnZhc0xheWVyQ2hyb21pdW06On5DYW52
YXNMYXllckNocm9taXVtKToKKyAgICAgICAgKFdlYkNvcmU6OkNhbnZhc0xheWVyQ2hyb21pdW06
OmRyYXcpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0NhbnZhc0xheWVy
Q2hyb21pdW0uaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9EcmF3aW5n
QnVmZmVyQ2hyb21pdW0uY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OmdlbmVyYXRlQ29s
b3JUZXh0dXJlKToKKyAgICAgICAgKFdlYkNvcmU6OkRyYXdpbmdCdWZmZXI6OkRyYXdpbmdCdWZm
ZXIpOgorICAgICAgICAoV2ViQ29yZTo6RHJhd2luZ0J1ZmZlcjo6fkRyYXdpbmdCdWZmZXIpOgor
ICAgICAgICAoV2ViQ29yZTo6RHJhd2luZ0J1ZmZlcjo6cHVibGlzaFRvUGxhdGZvcm1MYXllcik6
CisgICAgICAgIChXZWJDb3JlOjpEcmF3aW5nQnVmZmVyOjpyZXNldCk6CisgICAgICAgIChXZWJD
b3JlOjpEcmF3aW5nQnVmZmVyOjpwbGF0Zm9ybUxheWVyKToKKyAgICAgICAgKiBwbGF0Zm9ybS9n
cmFwaGljcy9jaHJvbWl1bS9HTEVTMkNhbnZhcy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpHTEVT
MkNhbnZhczo6R0xFUzJDYW52YXMpOgorICAgICAgICAoV2ViQ29yZTo6R0xFUzJDYW52YXM6On5H
TEVTMkNhbnZhcyk6CisgICAgICAgIChXZWJDb3JlOjpHTEVTMkNhbnZhczo6YmluZEZyYW1lYnVm
ZmVyKToKKyAgICAgICAgKFdlYkNvcmU6OkdMRVMyQ2FudmFzOjpjbGVhclJlY3QpOgorICAgICAg
ICAoV2ViQ29yZTo6R0xFUzJDYW52YXM6OmZpbGxSZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OkdM
RVMyQ2FudmFzOjpkcmF3VGV4dHVyZWRSZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OkdMRVMyQ2Fu
dmFzOjpkcmF3VGV4dHVyZWRSZWN0VGlsZSk6CisgICAgICAgIChXZWJDb3JlOjpHTEVTMkNhbnZh
czo6ZHJhd1F1YWQpOgorICAgICAgICAoV2ViQ29yZTo6R0xFUzJDYW52YXM6OmNyZWF0ZVRleHR1
cmUpOgorICAgICAgICAoV2ViQ29yZTo6R0xFUzJDYW52YXM6OmdldFRleHR1cmUpOgorICAgICAg
ICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0dMRVMyQ2FudmFzLmg6CisgICAgICAgIChX
ZWJDb3JlOjpHTEVTMkNhbnZhczo6Y29udGV4dCk6CisgICAgICAgIChXZWJDb3JlOjpHTEVTMkNh
bnZhczo6ZHJhd2luZ0J1ZmZlcik6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21p
dW0vR3JhcGhpY3NMYXllckNocm9taXVtLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNz
TGF5ZXJDaHJvbWl1bTo6c2V0Q29udGVudHNUb0NhbnZhcyk6CisgICAgICAgICogcGxhdGZvcm0v
Z3JhcGhpY3MvY2hyb21pdW0vR3JhcGhpY3NMYXllckNocm9taXVtLmg6CisgICAgICAgICogcGxh
dGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vV2ViR0xMYXllckNocm9taXVtLmNwcDogQWRkZWQuCisg
ICAgICAgIChXZWJDb3JlOjpXZWJHTExheWVyQ2hyb21pdW06OmNyZWF0ZSk6CisgICAgICAgIChX
ZWJDb3JlOjpXZWJHTExheWVyQ2hyb21pdW06OldlYkdMTGF5ZXJDaHJvbWl1bSk6CisgICAgICAg
IChXZWJDb3JlOjpXZWJHTExheWVyQ2hyb21pdW06OnVwZGF0ZUNvbnRlbnRzKToKKyAgICAgICAg
KFdlYkNvcmU6OldlYkdMTGF5ZXJDaHJvbWl1bTo6c2V0Q29udGV4dCk6CisgICAgICAgICogcGxh
dGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vV2ViR0xMYXllckNocm9taXVtLmg6IEFkZGVkLgorICAg
ICAgICAoV2ViQ29yZTo6V2ViR0xMYXllckNocm9taXVtOjpkcmF3c0NvbnRlbnQpOgorICAgICAg
ICAqIHBsYXRmb3JtL2dyYXBoaWNzL2dwdS9EcmF3aW5nQnVmZmVyLmNwcDogQWRkZWQuCisgICAg
ICAgIChXZWJDb3JlOjpEcmF3aW5nQnVmZmVyOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6
RHJhd2luZ0J1ZmZlcjo6YmluZCk6CisgICAgICAgIChXZWJDb3JlOjpEcmF3aW5nQnVmZmVyOjpz
ZXRXaWxsUHVibGlzaENhbGxiYWNrKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9ncHUv
RHJhd2luZ0J1ZmZlci5oOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRyYXdpbmdCdWZmZXI6
OnNpemUpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2dwdS9TaGFyZWRHcmFwaGljc0Nv
bnRleHQzRC5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6U2hhcmVkR3JhcGhpY3NDb250
ZXh0M0Q6OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpTaGFyZWRHcmFwaGljc0NvbnRleHQz
RDo6U2hhcmVkR3JhcGhpY3NDb250ZXh0M0QpOgorICAgICAgICAoV2ViQ29yZTo6U2hhcmVkR3Jh
cGhpY3NDb250ZXh0M0Q6On5TaGFyZWRHcmFwaGljc0NvbnRleHQzRCk6CisgICAgICAgIChXZWJD
b3JlOjpTaGFyZWRHcmFwaGljc0NvbnRleHQzRDo6bWFrZUNvbnRleHRDdXJyZW50KToKKyAgICAg
ICAgKFdlYkNvcmU6OlNoYXJlZEdyYXBoaWNzQ29udGV4dDNEOjpzY2lzc29yKToKKyAgICAgICAg
KFdlYkNvcmU6OlNoYXJlZEdyYXBoaWNzQ29udGV4dDNEOjplbmFibGUpOgorICAgICAgICAoV2Vi
Q29yZTo6U2hhcmVkR3JhcGhpY3NDb250ZXh0M0Q6OmRpc2FibGUpOgorICAgICAgICAoV2ViQ29y
ZTo6U2hhcmVkR3JhcGhpY3NDb250ZXh0M0Q6OmNsZWFyQ29sb3IpOgorICAgICAgICAoV2ViQ29y
ZTo6U2hhcmVkR3JhcGhpY3NDb250ZXh0M0Q6OmNsZWFyKToKKyAgICAgICAgKFdlYkNvcmU6OlNo
YXJlZEdyYXBoaWNzQ29udGV4dDNEOjpkcmF3QXJyYXlzKToKKyAgICAgICAgKFdlYkNvcmU6OlNo
YXJlZEdyYXBoaWNzQ29udGV4dDNEOjpnZXRFcnJvcik6CisgICAgICAgIChXZWJDb3JlOjpTaGFy
ZWRHcmFwaGljc0NvbnRleHQzRDo6Z2V0SW50ZWdlcnYpOgorICAgICAgICAoV2ViQ29yZTo6U2hh
cmVkR3JhcGhpY3NDb250ZXh0M0Q6OmNyZWF0ZUZyYW1lYnVmZmVyKToKKyAgICAgICAgKFdlYkNv
cmU6OlNoYXJlZEdyYXBoaWNzQ29udGV4dDNEOjpjcmVhdGVUZXh0dXJlKToKKyAgICAgICAgKFdl
YkNvcmU6OlNoYXJlZEdyYXBoaWNzQ29udGV4dDNEOjpkZWxldGVGcmFtZWJ1ZmZlcik6CisgICAg
ICAgIChXZWJDb3JlOjpTaGFyZWRHcmFwaGljc0NvbnRleHQzRDo6ZGVsZXRlVGV4dHVyZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpTaGFyZWRHcmFwaGljc0NvbnRleHQzRDo6ZnJhbWVidWZmZXJUZXh0
dXJlMkQpOgorICAgICAgICAoV2ViQ29yZTo6U2hhcmVkR3JhcGhpY3NDb250ZXh0M0Q6OnRleFBh
cmFtZXRlcmkpOgorICAgICAgICAoV2ViQ29yZTo6U2hhcmVkR3JhcGhpY3NDb250ZXh0M0Q6OnRl
eEltYWdlMkQpOgorICAgICAgICAoV2ViQ29yZTo6U2hhcmVkR3JhcGhpY3NDb250ZXh0M0Q6OnRl
eFN1YkltYWdlMkQpOgorICAgICAgICAoV2ViQ29yZTo6U2hhcmVkR3JhcGhpY3NDb250ZXh0M0Q6
OnJlYWRQaXhlbHMpOgorICAgICAgICAoV2ViQ29yZTo6U2hhcmVkR3JhcGhpY3NDb250ZXh0M0Q6
OnN1cHBvcnRzQkdSQSk6CisgICAgICAgIChXZWJDb3JlOjpTaGFyZWRHcmFwaGljc0NvbnRleHQz
RDo6Z2V0VGV4dHVyZSk6CisgICAgICAgIChXZWJDb3JlOjpTaGFyZWRHcmFwaGljc0NvbnRleHQz
RDo6YXBwbHlDb21wb3NpdGVPcGVyYXRvcik6CisgICAgICAgIChXZWJDb3JlOjpTaGFyZWRHcmFw
aGljc0NvbnRleHQzRDo6dXNlUXVhZFZlcnRpY2VzKToKKyAgICAgICAgKFdlYkNvcmU6OlNoYXJl
ZEdyYXBoaWNzQ29udGV4dDNEOjpzZXRBY3RpdmVUZXh0dXJlKToKKyAgICAgICAgKFdlYkNvcmU6
OlNoYXJlZEdyYXBoaWNzQ29udGV4dDNEOjpiaW5kVGV4dHVyZSk6CisgICAgICAgIChXZWJDb3Jl
OjpTaGFyZWRHcmFwaGljc0NvbnRleHQzRDo6dXNlRmlsbFNvbGlkUHJvZ3JhbSk6CisgICAgICAg
IChXZWJDb3JlOjpTaGFyZWRHcmFwaGljc0NvbnRleHQzRDo6dXNlVGV4dHVyZVByb2dyYW0pOgor
ICAgICAgICAoV2ViQ29yZTo6U2hhcmVkR3JhcGhpY3NDb250ZXh0M0Q6OmJpbmRGcmFtZWJ1ZmZl
cik6CisgICAgICAgIChXZWJDb3JlOjpTaGFyZWRHcmFwaGljc0NvbnRleHQzRDo6c2V0Vmlld3Bv
cnQpOgorICAgICAgICAoV2ViQ29yZTo6U2hhcmVkR3JhcGhpY3NDb250ZXh0M0Q6OnBhaW50c0lu
dG9DYW52YXNCdWZmZXIpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2dwdS9TaGFyZWRH
cmFwaGljc0NvbnRleHQzRC5oOiBBZGRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9n
cHUvVGV4dHVyZS5jcHA6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvc2tpYS9HcmFwaGlj
c0NvbnRleHRTa2lhLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6c3lu
Y1NvZnR3YXJlQ2FudmFzKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6c2V0
U2hhcmVkR3JhcGhpY3NDb250ZXh0M0QpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3Nr
aWEvSW1hZ2VTa2lhLmNwcDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9za2lhL1BsYXRm
b3JtQ29udGV4dFNraWEuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UGxhdGZvcm1Db250ZXh0U2tp
YTo6flBsYXRmb3JtQ29udGV4dFNraWEpOgorICAgICAgICAoV2ViQ29yZTo6V2lsbFB1Ymxpc2hD
YWxsYmFja0ltcGw6OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpXaWxsUHVibGlzaENhbGxi
YWNrSW1wbDo6d2lsbFB1Ymxpc2gpOgorICAgICAgICAoV2ViQ29yZTo6V2lsbFB1Ymxpc2hDYWxs
YmFja0ltcGw6OldpbGxQdWJsaXNoQ2FsbGJhY2tJbXBsKToKKyAgICAgICAgKFdlYkNvcmU6OlBs
YXRmb3JtQ29udGV4dFNraWE6OnNldFNoYXJlZEdyYXBoaWNzQ29udGV4dDNEKToKKyAgICAgICAg
KFdlYkNvcmU6OlBsYXRmb3JtQ29udGV4dFNraWE6OnVwbG9hZFNvZnR3YXJlVG9IYXJkd2FyZSk6
CisgICAgICAgIChXZWJDb3JlOjpQbGF0Zm9ybUNvbnRleHRTa2lhOjpyZWFkYmFja0hhcmR3YXJl
VG9Tb2Z0d2FyZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvc2tpYS9QbGF0Zm9ybUNv
bnRleHRTa2lhLmg6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckxheWVyQmFja2luZy5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllckJhY2tpbmc6OnVwZGF0ZUdyYXBoaWNzTGF5
ZXJDb25maWd1cmF0aW9uKToKKwogMjAxMC0wOC0zMCAgQ2hyaXMgUm9nZXJzICA8Y3JvZ2Vyc0Bn
b29nbGUuY29tPgogCiAgICAgICAgIFJldmlld2VkIGJ5IEtlbm5ldGggUnVzc2VsbC4KZGlmZiAt
LWdpdCBhL1dlYkNvcmUvV2ViQ29yZS5neXBpIGIvV2ViQ29yZS9XZWJDb3JlLmd5cGkKaW5kZXgg
ZTViNTdiYTA4ZTNhMDBkOGQ1OThjZDJiZTQwNzNkNzBhOWEwYmRmNy4uYTE0Yzk5YTljZDE1NzU3
ZTRmMTMwNTk3ZGNkNDA2OTMxNDNiYmRiYiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9XZWJDb3JlLmd5
cGkKKysrIGIvV2ViQ29yZS9XZWJDb3JlLmd5cGkKQEAgLTIyMzYsOCArMjIzNiwxMSBAQAogICAg
ICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2NnL1BhdGhDRy5jcHAnLAogICAgICAgICAgICAg
J3BsYXRmb3JtL2dyYXBoaWNzL2NnL1BhdHRlcm5DRy5jcHAnLAogICAgICAgICAgICAgJ3BsYXRm
b3JtL2dyYXBoaWNzL2NnL1RyYW5zZm9ybWF0aW9uTWF0cml4Q0cuY3BwJywKKyAgICAgICAgICAg
ICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9DYW52YXMyRExheWVyQ2hyb21pdW0uY3BwJywK
KyAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9DYW52YXMyRExheWVyQ2hy
b21pdW0uaCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vQ2FudmFz
TGF5ZXJDaHJvbWl1bS5jcHAnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9t
aXVtL0NhbnZhc0xheWVyQ2hyb21pdW0uaCcsCisgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhp
Y3MvY2hyb21pdW0vRHJhd2luZ0J1ZmZlckNocm9taXVtLmNwcCcsCiAgICAgICAgICAgICAncGxh
dGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vQ29udGVudExheWVyQ2hyb21pdW0uY3BwJywKICAgICAg
ICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9Db250ZW50TGF5ZXJDaHJvbWl1bS5o
JywKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9Gb250Q2FjaGVDaHJv
bWl1bVdpbi5jcHAnLApAQCAtMjI4Myw2ICsyMjg2LDggQEAKICAgICAgICAgICAgICdwbGF0Zm9y
bS9ncmFwaGljcy9jaHJvbWl1bS9VbmlzY3JpYmVIZWxwZXJUZXh0UnVuLmgnLAogICAgICAgICAg
ICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1ZpZGVvTGF5ZXJDaHJvbWl1bS5jcHAnLAog
ICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1ZpZGVvTGF5ZXJDaHJvbWl1
bS5oJywKKyAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9XZWJHTExheWVy
Q2hyb21pdW0uY3BwJywKKyAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9X
ZWJHTExheWVyQ2hyb21pdW0uaCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY29j
b2EvRm9udFBsYXRmb3JtRGF0YS5oJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9m
aWx0ZXJzL0ZFQmxlbmQuY3BwJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9maWx0
ZXJzL0ZFQmxlbmQuaCcsCkBAIC0yMzAzLDYgKzIzMDgsMTAgQEAKICAgICAgICAgICAgICdwbGF0
Zm9ybS9ncmFwaGljcy9maWx0ZXJzL1NvdXJjZUFscGhhLmgnLAogICAgICAgICAgICAgJ3BsYXRm
b3JtL2dyYXBoaWNzL2ZpbHRlcnMvU291cmNlR3JhcGhpYy5jcHAnLAogICAgICAgICAgICAgJ3Bs
YXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvU291cmNlR3JhcGhpYy5oJywKKyAgICAgICAgICAgICdw
bGF0Zm9ybS9ncmFwaGljcy9ncHUvRHJhd2luZ0J1ZmZlci5jcHAnLAorICAgICAgICAgICAgJ3Bs
YXRmb3JtL2dyYXBoaWNzL2dwdS9EcmF3aW5nQnVmZmVyLmgnLAorICAgICAgICAgICAgJ3BsYXRm
b3JtL2dyYXBoaWNzL2dwdS9TaGFyZWRHcmFwaGljc0NvbnRleHQzRC5jcHAnLAorICAgICAgICAg
ICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2dwdS9TaGFyZWRHcmFwaGljc0NvbnRleHQzRC5oJywKICAg
ICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9ncHUvU2hhZGVyLmNwcCcsCiAgICAgICAgICAg
ICAncGxhdGZvcm0vZ3JhcGhpY3MvZ3B1L1NoYWRlci5oJywKICAgICAgICAgICAgICdwbGF0Zm9y
bS9ncmFwaGljcy9ncHUvU29saWRGaWxsU2hhZGVyLmNwcCcsCkBAIC0yNTYxLDggKzI1NzAsOCBA
QAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlQnVmZmVyLmNwcCcsCiAgICAg
ICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VCdWZmZXIuaCcsCiAgICAgICAgICAgICAn
cGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VPYnNlcnZlci5oJywKLSAgICAgICAgICAgICdwbGF0Zm9y
bS9ncmFwaGljcy9JbWFnZVNvdXJjZS5oJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGlj
cy9JbWFnZVNvdXJjZS5jcHAnLAorICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdl
U291cmNlLmgnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL0ludFBvaW50LmgnLAog
ICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL0ludFJlY3QuY3BwJywKICAgICAgICAgICAg
ICdwbGF0Zm9ybS9ncmFwaGljcy9JbnRSZWN0LmgnLApkaWZmIC0tZ2l0IGEvV2ViQ29yZS9odG1s
L2NhbnZhcy9DYW52YXNSZW5kZXJpbmdDb250ZXh0LmNwcCBiL1dlYkNvcmUvaHRtbC9jYW52YXMv
Q2FudmFzUmVuZGVyaW5nQ29udGV4dC5jcHAKaW5kZXggMWU4OTdkMzBlY2UxOTgzOTEyOGYwMDhk
ZGY4ZDQ4NjBkNzE0MDYyNy4uZTAxOTMzMmJhODFmNTNjOWViMmNjY2M1M2IyNDUzMDQ2ZWNiZDg1
ZSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9odG1sL2NhbnZhcy9DYW52YXNSZW5kZXJpbmdDb250ZXh0
LmNwcAorKysgYi9XZWJDb3JlL2h0bWwvY2FudmFzL0NhbnZhc1JlbmRlcmluZ0NvbnRleHQuY3Bw
CkBAIC0yNSw5ICsyNSw2IEBACiAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJDYW52
YXNSZW5kZXJpbmdDb250ZXh0LmgiCi0jaWYgRU5BQkxFKEFDQ0VMRVJBVEVEXzJEX0NBTlZBUykg
fHwgRU5BQkxFKDNEX0NBTlZBUykKLSNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQzRC5oIgotI2Vu
ZGlmCiAjaW5jbHVkZSAiSFRNTENhbnZhc0VsZW1lbnQuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUg
ewpAQCAtNDcsMTMgKzQ0LDQgQEAgdm9pZCBDYW52YXNSZW5kZXJpbmdDb250ZXh0OjpkZXJlZigp
CiAgICAgbV9jYW52YXMtPmRlcmVmKCk7IAogfQogCi1ib29sIENhbnZhc1JlbmRlcmluZ0NvbnRl
eHQ6OnBhaW50c0ludG9DYW52YXNCdWZmZXIoKSBjb25zdAotewotI2lmIEVOQUJMRShBQ0NFTEVS
QVRFRF8yRF9DQU5WQVMpIHx8IEVOQUJMRSgzRF9DQU5WQVMpCi0gICAgaWYgKEdyYXBoaWNzQ29u
dGV4dDNEKiBjb250ZXh0M0QgPSBncmFwaGljc0NvbnRleHQzRCgpKQotICAgICAgICByZXR1cm4g
Y29udGV4dDNELT5wYWludHNJbnRvQ2FudmFzQnVmZmVyKCk7Ci0jZW5kaWYKLSAgICByZXR1cm4g
dHJ1ZTsKLX0KLQogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9o
dG1sL2NhbnZhcy9DYW52YXNSZW5kZXJpbmdDb250ZXh0LmggYi9XZWJDb3JlL2h0bWwvY2FudmFz
L0NhbnZhc1JlbmRlcmluZ0NvbnRleHQuaAppbmRleCAyY2RiZTFkMzc2NTk0ZGJlMGRmYmQ3MDBm
MmVmYjczNGEzZGI5MmM2Li44NDk5YjQ3NzBlZTFkNDkzODkxOWIyMTE2NGZmZDEzYjYwZTg3ZDIy
IDEwMDY0NAotLS0gYS9XZWJDb3JlL2h0bWwvY2FudmFzL0NhbnZhc1JlbmRlcmluZ0NvbnRleHQu
aAorKysgYi9XZWJDb3JlL2h0bWwvY2FudmFzL0NhbnZhc1JlbmRlcmluZ0NvbnRleHQuaApAQCAt
MjYsMTIgKzI2LDEzIEBACiAjaWZuZGVmIENhbnZhc1JlbmRlcmluZ0NvbnRleHRfaAogI2RlZmlu
ZSBDYW52YXNSZW5kZXJpbmdDb250ZXh0X2gKIAorI2luY2x1ZGUgIkdyYXBoaWNzTGF5ZXIuaCIK
KwogI2luY2x1ZGUgPHd0Zi9Ob25jb3B5YWJsZS5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAK
ICAgICBjbGFzcyBXZWJHTE9iamVjdDsKLSAgICBjbGFzcyBHcmFwaGljc0NvbnRleHQzRDsKICAg
ICBjbGFzcyBIVE1MQ2FudmFzRWxlbWVudDsKIAogICAgIGNsYXNzIENhbnZhc1JlbmRlcmluZ0Nv
bnRleHQgOiBwdWJsaWMgTm9uY29weWFibGUgewpAQCAtNDksMTIgKzUwLDEyIEBAIG5hbWVzcGFj
ZSBXZWJDb3JlIHsKICAgICAgICAgdmlydHVhbCBib29sIGlzM2QoKSBjb25zdCB7IHJldHVybiBm
YWxzZTsgfQogICAgICAgICB2aXJ0dWFsIGJvb2wgaXNBY2NlbGVyYXRlZCgpIGNvbnN0IHsgcmV0
dXJuIGZhbHNlOyB9CiAgICAgICAgIAotICAgICAgICAvLyBGb3IgYWNjZWxlcmF0ZWQgY2FudmFz
ZXMsIHJldHVybnMgYSBwb2ludGVyIHRvIHRoZSB1bmRlcmx5aW5nIEdyYXBoaWNzQ29udGV4dDNE
LgotICAgICAgICAvLyBGb3Igbm9uIGFjY2VsZXJhdGVkIGNhbnZhc2VzIHJldHVybnMgMC4KLSAg
ICAgICAgdmlydHVhbCBHcmFwaGljc0NvbnRleHQzRCogZ3JhcGhpY3NDb250ZXh0M0QoKSBjb25z
dCB7IHJldHVybiAwOyB9Ci0KICAgICAgICAgdmlydHVhbCB2b2lkIHBhaW50UmVuZGVyaW5nUmVz
dWx0c1RvQ2FudmFzKCkge30KLSAgICAgICAgYm9vbCBwYWludHNJbnRvQ2FudmFzQnVmZmVyKCkg
Y29uc3Q7CisgICAgICAgIHZpcnR1YWwgYm9vbCBwYWludHNJbnRvQ2FudmFzQnVmZmVyKCkgY29u
c3QgeyByZXR1cm4gdHJ1ZTsgfQorCisjaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQor
ICAgICAgICB2aXJ0dWFsIFBsYXRmb3JtTGF5ZXIqIHBsYXRmb3JtTGF5ZXIoKSBjb25zdCB7IHJl
dHVybiAwOyB9CisjZW5kaWYKIAogICAgIHByaXZhdGU6CiAgICAgICAgIEhUTUxDYW52YXNFbGVt
ZW50KiBtX2NhbnZhczsKZGlmZiAtLWdpdCBhL1dlYkNvcmUvaHRtbC9jYW52YXMvQ2FudmFzUmVu
ZGVyaW5nQ29udGV4dDJELmNwcCBiL1dlYkNvcmUvaHRtbC9jYW52YXMvQ2FudmFzUmVuZGVyaW5n
Q29udGV4dDJELmNwcAppbmRleCA2ZGY2YWJmOTY3NGFkOWEyMGYyMjcyYTE3ODkzYzg1ODUwZGU1
N2Q3Li4yMmQzZTJkOTQ1NmEzN2ExMjlmNmIzZTIyMzJjYTNkYzMzNzdjM2ZmIDEwMDY0NAotLS0g
YS9XZWJDb3JlL2h0bWwvY2FudmFzL0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRC5jcHAKKysrIGIv
V2ViQ29yZS9odG1sL2NhbnZhcy9DYW52YXNSZW5kZXJpbmdDb250ZXh0MkQuY3BwCkBAIC01OSw4
ICs1OSwxMiBAQAogI2luY2x1ZGUgIlRleHRNZXRyaWNzLmgiCiAKICNpZiBFTkFCTEUoQUNDRUxF
UkFURURfMkRfQ0FOVkFTKQorI2luY2x1ZGUgIkNocm9tZS5oIgorI2luY2x1ZGUgIkNocm9tZUNs
aWVudC5oIgorI2luY2x1ZGUgIkRyYXdpbmdCdWZmZXIuaCIKICNpbmNsdWRlICJGcmFtZVZpZXcu
aCIKICNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQzRC5oIgorI2luY2x1ZGUgIlNoYXJlZEdyYXBo
aWNzQ29udGV4dDNELmgiCiAjaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQogI2luY2x1
ZGUgIlJlbmRlckxheWVyLmgiCiAjZW5kaWYKQEAgLTEyNCwxNyArMTI4LDExIEBAIENhbnZhc1Jl
bmRlcmluZ0NvbnRleHQyRDo6Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJEKEhUTUxDYW52YXNFbGVt
ZW50KiBjYW52YXMsIGJvCiAgICAgICAgIHJldHVybjsKICAgICBpZiAoIXAtPnNldHRpbmdzKCkt
PmFjY2VsZXJhdGVkMmRDYW52YXNFbmFibGVkKCkpCiAgICAgICAgIHJldHVybjsKLSAgICBpZiAo
RnJhbWVWaWV3KiB2aWV3ID0gY2FudmFzLT5kb2N1bWVudCgpLT52aWV3KCkpIHsKLSAgICAgICAg
aWYgKFNjcm9sbFZpZXcqIHJvb3RWaWV3ID0gdmlldy0+cm9vdCgpKSB7Ci0gICAgICAgICAgICBp
ZiAoSG9zdFdpbmRvdyogaG9zdFdpbmRvdyA9IHJvb3RWaWV3LT5ob3N0V2luZG93KCkpIHsKLSAg
ICAgICAgICAgICAgICAvLyBTZXQgdXAgb3VyIGNvbnRleHQKLSAgICAgICAgICAgICAgICBHcmFw
aGljc0NvbnRleHQzRDo6QXR0cmlidXRlcyBhdHRyOwotICAgICAgICAgICAgICAgIGF0dHIuc3Rl
bmNpbCA9IHRydWU7Ci0gICAgICAgICAgICAgICAgbV9jb250ZXh0M0QgPSBHcmFwaGljc0NvbnRl
eHQzRDo6Y3JlYXRlKGF0dHIsIGhvc3RXaW5kb3cpOwotICAgICAgICAgICAgICAgIGlmIChtX2Nv
bnRleHQzRCkKLSAgICAgICAgICAgICAgICAgICAgaWYgKEdyYXBoaWNzQ29udGV4dCogYyA9IGRy
YXdpbmdDb250ZXh0KCkpCi0gICAgICAgICAgICAgICAgICAgICAgICBjLT5zZXRHcmFwaGljc0Nv
bnRleHQzRChtX2NvbnRleHQzRC5nZXQoKSwgSW50U2l6ZShjYW52YXMtPndpZHRoKCksIGNhbnZh
cy0+aGVpZ2h0KCkpKTsKLSAgICAgICAgICAgIH0KKyAgICBtX2NvbnRleHQzRCA9IHAtPmNocm9t
ZSgpLT5jbGllbnQoKS0+Z2V0U2hhcmVkR3JhcGhpY3NDb250ZXh0M0QoKTsKKyAgICBpZiAobV9j
b250ZXh0M0QpIHsKKyAgICAgICAgaWYgKEdyYXBoaWNzQ29udGV4dCogYyA9IGRyYXdpbmdDb250
ZXh0KCkpIHsKKyAgICAgICAgICAgIG1fZHJhd2luZ0J1ZmZlciA9IERyYXdpbmdCdWZmZXI6OmNy
ZWF0ZShtX2NvbnRleHQzRC5nZXQoKSwgSW50U2l6ZShjYW52YXMtPndpZHRoKCksIGNhbnZhcy0+
aGVpZ2h0KCkpKTsKKyAgICAgICAgICAgIGMtPnNldFNoYXJlZEdyYXBoaWNzQ29udGV4dDNEKG1f
Y29udGV4dDNELmdldCgpLCBtX2RyYXdpbmdCdWZmZXIuZ2V0KCksIEludFNpemUoY2FudmFzLT53
aWR0aCgpLCBjYW52YXMtPmhlaWdodCgpKSk7CiAgICAgICAgIH0KICAgICB9CiAjZW5kaWYKQEAg
LTE1Myw2ICsxNTEsMTYgQEAgYm9vbCBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ6OmlzQWNjZWxl
cmF0ZWQoKSBjb25zdAogI2VuZGlmCiB9CiAKK2Jvb2wgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJE
OjpwYWludHNJbnRvQ2FudmFzQnVmZmVyKCkgY29uc3QKK3sKKyNpZiBFTkFCTEUoQUNDRUxFUkFU
RURfMkRfQ0FOVkFTKQorICAgIGlmIChtX2NvbnRleHQzRCkKKyAgICAgICAgcmV0dXJuIG1fY29u
dGV4dDNELT5wYWludHNJbnRvQ2FudmFzQnVmZmVyKCk7CisjZW5kaWYKKyAgICByZXR1cm4gdHJ1
ZTsKK30KKworCiB2b2lkIENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRDo6cmVzZXQoKQogewogICAg
IG1fc3RhdGVTdGFjay5yZXNpemUoMSk7CkBAIC0xNjAsOCArMTY4LDEwIEBAIHZvaWQgQ2FudmFz
UmVuZGVyaW5nQ29udGV4dDJEOjpyZXNldCgpCiAgICAgbV9wYXRoLmNsZWFyKCk7CiAjaWYgRU5B
QkxFKEFDQ0VMRVJBVEVEXzJEX0NBTlZBUykKICAgICBpZiAobV9jb250ZXh0M0QpIHsKLSAgICAg
ICAgaWYgKEdyYXBoaWNzQ29udGV4dCogYyA9IGRyYXdpbmdDb250ZXh0KCkpCi0gICAgICAgICAg
ICBjLT5zZXRHcmFwaGljc0NvbnRleHQzRChtX2NvbnRleHQzRC5nZXQoKSwgSW50U2l6ZShjYW52
YXMoKS0+d2lkdGgoKSwgY2FudmFzKCktPmhlaWdodCgpKSk7CisgICAgICAgIGlmIChHcmFwaGlj
c0NvbnRleHQqIGMgPSBkcmF3aW5nQ29udGV4dCgpKSB7CisgICAgICAgICAgICBtX2RyYXdpbmdC
dWZmZXItPnJlc2V0KEludFNpemUoY2FudmFzKCktPndpZHRoKCksIGNhbnZhcygpLT5oZWlnaHQo
KSkpOworICAgICAgICAgICAgYy0+c2V0U2hhcmVkR3JhcGhpY3NDb250ZXh0M0QobV9jb250ZXh0
M0QuZ2V0KCksIG1fZHJhd2luZ0J1ZmZlci5nZXQoKSwgSW50U2l6ZShjYW52YXMoKS0+d2lkdGgo
KSwgY2FudmFzKCktPmhlaWdodCgpKSk7CisgICAgICAgIH0KICAgICB9CiAjZW5kaWYKIH0KQEAg
LTE1MDQsNyArMTUxNCw3IEBAIHZvaWQgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEOjpkaWREcmF3
KGNvbnN0IEZsb2F0UmVjdCYgciwgdW5zaWduZWQgb3B0aW9ucykKICNpZiBFTkFCTEUoQUNDRUxF
UkFURURfMkRfQ0FOVkFTKSAmJiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCiAgICAgLy8g
SWYgd2UgYXJlIGRyYXdpbmcgdG8gaGFyZHdhcmUgYW5kIHdlIGhhdmUgYSBjb21wb3NpdGVkIGxh
eWVyLCBqdXN0IGNhbGwgcmVuZGVyZXJDb250ZW50Q2hhbmdlZCgpLgogICAgIFJlbmRlckJveCog
cmVuZGVyQm94ID0gY2FudmFzKCktPnJlbmRlckJveCgpOwotICAgIGlmIChtX2NvbnRleHQzRCAm
JiByZW5kZXJCb3ggJiYgcmVuZGVyQm94LT5oYXNMYXllcigpICYmIHJlbmRlckJveC0+bGF5ZXIo
KS0+aGFzQWNjZWxlcmF0ZWRDb21wb3NpdGluZygpKQorICAgIGlmIChpc0FjY2VsZXJhdGVkKCkg
JiYgcmVuZGVyQm94ICYmIHJlbmRlckJveC0+aGFzTGF5ZXIoKSAmJiByZW5kZXJCb3gtPmxheWVy
KCktPmhhc0FjY2VsZXJhdGVkQ29tcG9zaXRpbmcoKSkKICAgICAgICAgcmVuZGVyQm94LT5sYXll
cigpLT5yZW5kZXJlckNvbnRlbnRDaGFuZ2VkKCk7CiAgICAgZWxzZQogI2VuZGlmCkBAIC0xODc3
LDQgKzE4ODcsMTEgQEAgdm9pZCBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ6OnBhaW50UmVuZGVy
aW5nUmVzdWx0c1RvQ2FudmFzKCkKICNlbmRpZgogfQogCisjaWYgRU5BQkxFKEFDQ0VMRVJBVEVE
XzJEX0NBTlZBUykgJiYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQorUGxhdGZvcm1MYXll
ciogQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEOjpwbGF0Zm9ybUxheWVyKCkgY29uc3QKK3sKKyAg
ICByZXR1cm4gbV9kcmF3aW5nQnVmZmVyLT5wbGF0Zm9ybUxheWVyKCk7Cit9CisjZW5kaWYKKwog
fSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9odG1sL2NhbnZhcy9D
YW52YXNSZW5kZXJpbmdDb250ZXh0MkQuaCBiL1dlYkNvcmUvaHRtbC9jYW52YXMvQ2FudmFzUmVu
ZGVyaW5nQ29udGV4dDJELmgKaW5kZXggOTg1NzM0NDNlODFkZjlmN2Q5NmY2OTIzMmZlZmY5MDhl
MGNlNmI4OS4uZDlkODU5NzNkZjdhNzFjZDhmZjZlMTc2ZjdjZTg4ZWIwYzg3MGY5NiAxMDA2NDQK
LS0tIGEvV2ViQ29yZS9odG1sL2NhbnZhcy9DYW52YXNSZW5kZXJpbmdDb250ZXh0MkQuaAorKysg
Yi9XZWJDb3JlL2h0bWwvY2FudmFzL0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRC5oCkBAIC02MSw3
ICs2MSw4IEBAIGNsYXNzIEtVUkw7CiBjbGFzcyBUZXh0TWV0cmljczsKIAogI2lmIEVOQUJMRShB
Q0NFTEVSQVRFRF8yRF9DQU5WQVMpCi1jbGFzcyBHcmFwaGljc0NvbnRleHQzRDsKK2NsYXNzIERy
YXdpbmdCdWZmZXI7CitjbGFzcyBTaGFyZWRHcmFwaGljc0NvbnRleHQzRDsKICNlbmRpZgogCiB0
eXBlZGVmIGludCBFeGNlcHRpb25Db2RlOwpAQCAtNzQsNiArNzUsNyBAQCBwdWJsaWM6CiAKICAg
ICB2aXJ0dWFsIGJvb2wgaXMyZCgpIGNvbnN0IHsgcmV0dXJuIHRydWU7IH0KICAgICB2aXJ0dWFs
IGJvb2wgaXNBY2NlbGVyYXRlZCgpIGNvbnN0OworICAgIHZpcnR1YWwgYm9vbCBwYWludHNJbnRv
Q2FudmFzQnVmZmVyKCkgY29uc3Q7CiAKICAgICBDYW52YXNTdHlsZSogc3Ryb2tlU3R5bGUoKSBj
b25zdDsKICAgICB2b2lkIHNldFN0cm9rZVN0eWxlKFBhc3NSZWZQdHI8Q2FudmFzU3R5bGU+KTsK
QEAgLTIyMyw4ICsyMjUsOCBAQCBwdWJsaWM6CiAKICAgICB2aXJ0dWFsIHZvaWQgcGFpbnRSZW5k
ZXJpbmdSZXN1bHRzVG9DYW52YXMoKTsKIAotI2lmIEVOQUJMRShBQ0NFTEVSQVRFRF8yRF9DQU5W
QVMpCi0gICAgdmlydHVhbCBHcmFwaGljc0NvbnRleHQzRCogZ3JhcGhpY3NDb250ZXh0M0QoKSBj
b25zdCB7IHJldHVybiBtX2NvbnRleHQzRC5nZXQoKTsgfQorI2lmIEVOQUJMRShBQ0NFTEVSQVRF
RF8yRF9DQU5WQVMpICYmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKKyAgICB2aXJ0dWFs
IFBsYXRmb3JtTGF5ZXIqIHBsYXRmb3JtTGF5ZXIoKSBjb25zdDsKICNlbmRpZgogCiBwcml2YXRl
OgpAQCAtMjk4LDcgKzMwMCw4IEBAIHByaXZhdGU6CiAjZW5kaWYKIAogI2lmIEVOQUJMRShBQ0NF
TEVSQVRFRF8yRF9DQU5WQVMpCi0gICAgT3duUHRyPEdyYXBoaWNzQ29udGV4dDNEPiBtX2NvbnRl
eHQzRDsKKyAgICBPd25QdHI8RHJhd2luZ0J1ZmZlcj4gbV9kcmF3aW5nQnVmZmVyOworICAgIFJl
ZlB0cjxTaGFyZWRHcmFwaGljc0NvbnRleHQzRD4gbV9jb250ZXh0M0Q7CiAjZW5kaWYKIH07CiAK
ZGlmZiAtLWdpdCBhL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xSZW5kZXJpbmdDb250ZXh0LmNw
cCBiL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xSZW5kZXJpbmdDb250ZXh0LmNwcAppbmRleCA5
NTkxYTUzY2ZlYzA1OWUyOTkzNmM1ODE5MDcwYTRlYWZlOWNkNjgzLi42NGNiNWQzZWZkY2ZlYjJl
MjUzNzA0MzY4OTRkZjBjNTkzNmEyZjNhIDEwMDY0NAotLS0gYS9XZWJDb3JlL2h0bWwvY2FudmFz
L1dlYkdMUmVuZGVyaW5nQ29udGV4dC5jcHAKKysrIGIvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJH
TFJlbmRlcmluZ0NvbnRleHQuY3BwCkBAIC0xNzAsNiArMTcwLDExIEBAIHZvaWQgV2ViR0xSZW5k
ZXJpbmdDb250ZXh0OjpwYWludFJlbmRlcmluZ1Jlc3VsdHNUb0NhbnZhcygpCiAgICAgbV9jb250
ZXh0LT5wYWludFJlbmRlcmluZ1Jlc3VsdHNUb0NhbnZhcyh0aGlzKTsKIH0KIAorYm9vbCBXZWJH
TFJlbmRlcmluZ0NvbnRleHQ6OnBhaW50c0ludG9DYW52YXNCdWZmZXIoKSBjb25zdAoreworICAg
IHJldHVybiBtX2NvbnRleHQtPnBhaW50c0ludG9DYW52YXNCdWZmZXIoKTsKK30KKwogdm9pZCBX
ZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnJlc2hhcGUoaW50IHdpZHRoLCBpbnQgaGVpZ2h0KQogewog
ICAgIGlmIChtX25lZWRzVXBkYXRlKSB7CmRpZmYgLS1naXQgYS9XZWJDb3JlL2h0bWwvY2FudmFz
L1dlYkdMUmVuZGVyaW5nQ29udGV4dC5oIGIvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFJlbmRl
cmluZ0NvbnRleHQuaAppbmRleCA2NmVjOGQ4MmFhNzNmZGI0YjQ5ZjI3NmIzYjZkMDUyZDUzODQz
YWJiLi5kODEyYzY5MWNiYmM3NTgwZjVlZjk3MDNkZGIyNjExMmZlNzJmNjI4IDEwMDY0NAotLS0g
YS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMUmVuZGVyaW5nQ29udGV4dC5oCisrKyBiL1dlYkNv
cmUvaHRtbC9jYW52YXMvV2ViR0xSZW5kZXJpbmdDb250ZXh0LmgKQEAgLTYzLDYgKzYzLDcgQEAg
cHVibGljOgogCiAgICAgdmlydHVhbCBib29sIGlzM2QoKSBjb25zdCB7IHJldHVybiB0cnVlOyB9
CiAgICAgdmlydHVhbCBib29sIGlzQWNjZWxlcmF0ZWQoKSBjb25zdCB7IHJldHVybiB0cnVlOyB9
CisgICAgdmlydHVhbCBib29sIHBhaW50c0ludG9DYW52YXNCdWZmZXIoKSBjb25zdDsKIAogICAg
IHZvaWQgYWN0aXZlVGV4dHVyZSh1bnNpZ25lZCBsb25nIHRleHR1cmUsIEV4Y2VwdGlvbkNvZGUm
IGVjKTsKICAgICB2b2lkIGF0dGFjaFNoYWRlcihXZWJHTFByb2dyYW0qLCBXZWJHTFNoYWRlcios
IEV4Y2VwdGlvbkNvZGUmIGVjKTsKQEAgLTI3Nyw3ICsyNzgsMTAgQEAgcHVibGljOgogCiAgICAg
dm9pZCB2aWV3cG9ydChsb25nIHgsIGxvbmcgeSwgdW5zaWduZWQgbG9uZyB3aWR0aCwgdW5zaWdu
ZWQgbG9uZyBoZWlnaHQpOwogCi0gICAgdmlydHVhbCBHcmFwaGljc0NvbnRleHQzRCogZ3JhcGhp
Y3NDb250ZXh0M0QoKSBjb25zdCB7IHJldHVybiBtX2NvbnRleHQuZ2V0KCk7IH0KKyAgICBHcmFw
aGljc0NvbnRleHQzRCogZ3JhcGhpY3NDb250ZXh0M0QoKSBjb25zdCB7IHJldHVybiBtX2NvbnRl
eHQuZ2V0KCk7IH0KKyNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCisgICAgdmlydHVh
bCBQbGF0Zm9ybUxheWVyKiBwbGF0Zm9ybUxheWVyKCkgY29uc3QgeyByZXR1cm4gbV9jb250ZXh0
LT5wbGF0Zm9ybUxheWVyKCk7IH0KKyNlbmRpZgogCiAgICAgdm9pZCByZXNoYXBlKGludCB3aWR0
aCwgaW50IGhlaWdodCk7CiAKZGlmZiAtLWdpdCBhL1dlYkNvcmUvbG9hZGVyL0VtcHR5Q2xpZW50
cy5oIGIvV2ViQ29yZS9sb2FkZXIvRW1wdHlDbGllbnRzLmgKaW5kZXggMjcwNzUyZGQ3ZjhmMDFm
YTk0ZjdjMjkzZDNjZmU3ZmE5NWVkMjkxZi4uOGFiMWE5ODk5NDg4NDg1NDU0NzkxNGJjYzNkMWRl
ZDljMzRlMmM2MyAxMDA2NDQKLS0tIGEvV2ViQ29yZS9sb2FkZXIvRW1wdHlDbGllbnRzLmgKKysr
IGIvV2ViQ29yZS9sb2FkZXIvRW1wdHlDbGllbnRzLmgKQEAgLTYxLDYgKzYxLDggQEAKIAogbmFt
ZXNwYWNlIFdlYkNvcmUgewogCitjbGFzcyBTaGFyZWRHcmFwaGljc0NvbnRleHQzRDsKKwogY2xh
c3MgRW1wdHlQb3B1cE1lbnUgOiBwdWJsaWMgUG9wdXBNZW51IHsKIHB1YmxpYzoKICAgICB2aXJ0
dWFsIHZvaWQgc2hvdyhjb25zdCBJbnRSZWN0JiwgRnJhbWVWaWV3KiwgaW50KSB7fQpAQCAtMTkw
LDkgKzE5Miw5IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIHZvaWQgY2FuY2VsR2VvbG9jYXRpb25Q
ZXJtaXNzaW9uUmVxdWVzdEZvckZyYW1lKEZyYW1lKiwgR2VvbG9jYXRpb24qKSB7fQogCiAjaWYg
VVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQotICAgIHZpcnR1YWwgdm9pZCBhdHRhY2hSb290
R3JhcGhpY3NMYXllcihGcmFtZSosIEdyYXBoaWNzTGF5ZXIqKSB7fTsKLSAgICB2aXJ0dWFsIHZv
aWQgc2V0TmVlZHNPbmVTaG90RHJhd2luZ1N5bmNocm9uaXphdGlvbigpIHt9OwotICAgIHZpcnR1
YWwgdm9pZCBzY2hlZHVsZUNvbXBvc2l0aW5nTGF5ZXJTeW5jKCkge307CisgICAgdmlydHVhbCB2
b2lkIGF0dGFjaFJvb3RHcmFwaGljc0xheWVyKEZyYW1lKiwgR3JhcGhpY3NMYXllciopIHt9Cisg
ICAgdmlydHVhbCB2b2lkIHNldE5lZWRzT25lU2hvdERyYXdpbmdTeW5jaHJvbml6YXRpb24oKSB7
fQorICAgIHZpcnR1YWwgdm9pZCBzY2hlZHVsZUNvbXBvc2l0aW5nTGF5ZXJTeW5jKCkge30KICNl
bmRpZgogCiAjaWYgUExBVEZPUk0oV0lOKQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wYWdlL0Nocm9t
ZUNsaWVudC5oIGIvV2ViQ29yZS9wYWdlL0Nocm9tZUNsaWVudC5oCmluZGV4IGQzZTE2NjIyOTJh
MzFhODllNWJhYTc0NzA1MjBhOTg4YmUxODIwNzkuLmJkOWRlNmJmMmNkOWY2ZmM2ODVjNTAxMGU0
N2MyMTQ3YjdkMWNkNzUgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvcGFnZS9DaHJvbWVDbGllbnQuaAor
KysgYi9XZWJDb3JlL3BhZ2UvQ2hyb21lQ2xpZW50LmgKQEAgLTU3LDYgKzU3LDcgQEAgbmFtZXNw
YWNlIFdlYkNvcmUgewogICAgIGNsYXNzIE5vZGU7CiAgICAgY2xhc3MgUGFnZTsKICAgICBjbGFz
cyBTZWN1cml0eU9yaWdpbjsKKyAgICBjbGFzcyBTaGFyZWRHcmFwaGljc0NvbnRleHQzRDsKICAg
ICBjbGFzcyBQb3B1cE1lbnVDbGllbnQ7CiAgICAgY2xhc3MgV2lkZ2V0OwogCkBAIC0yMzAsNiAr
MjMxLDggQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICB2aXJ0dWFsIGJvb2wgYWxsb3dz
QWNjZWxlcmF0ZWRDb21wb3NpdGluZygpIGNvbnN0IHsgcmV0dXJuIHRydWU7IH0KICNlbmRpZgog
CisgICAgICAgIHZpcnR1YWwgU2hhcmVkR3JhcGhpY3NDb250ZXh0M0QqIGdldFNoYXJlZEdyYXBo
aWNzQ29udGV4dDNEKCkgeyByZXR1cm4gMDsgfQorCiAgICAgICAgIHZpcnR1YWwgYm9vbCBzdXBw
b3J0c0Z1bGxzY3JlZW5Gb3JOb2RlKGNvbnN0IE5vZGUqKSB7IHJldHVybiBmYWxzZTsgfQogICAg
ICAgICB2aXJ0dWFsIHZvaWQgZW50ZXJGdWxsc2NyZWVuRm9yTm9kZShOb2RlKikgeyB9CiAgICAg
ICAgIHZpcnR1YWwgdm9pZCBleGl0RnVsbHNjcmVlbkZvck5vZGUoTm9kZSopIHsgfQpkaWZmIC0t
Z2l0IGEvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQuY3BwIGIvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQuY3BwCmluZGV4IDQ3Mzg0Yjll
ZTg0ZDZkYTA4NjBmMzE2MWIzYmMwODIxMTlmNDViZmYuLmVhNmM0NDg3NDNiMTE4MTViOGFjNzFm
NDdiNzlkMzhkMzk1YWNmYjMgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
R3JhcGhpY3NDb250ZXh0LmNwcAorKysgYi9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBo
aWNzQ29udGV4dC5jcHAKQEAgLTU3MSw2ICs1NzEsMTcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6
OnNldFBsYXRmb3JtU3Ryb2tlU3R5bGUoY29uc3QgU3Ryb2tlU3R5bGUmKQogfQogI2VuZGlmCiAK
KyNpZiAhUExBVEZPUk0oU0tJQSkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0OjpzZXRTaGFyZWRHcmFw
aGljc0NvbnRleHQzRChTaGFyZWRHcmFwaGljc0NvbnRleHQzRCosIERyYXdpbmdCdWZmZXIqLCBj
b25zdCBJbnRTaXplJikKK3sKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHQ6OnN5bmNTb2Z0d2Fy
ZUNhbnZhcygpCit7Cit9CisjZW5kaWYKKworCiB2b2lkIEdyYXBoaWNzQ29udGV4dDo6YWRqdXN0
TGluZVRvUGl4ZWxCb3VuZGFyaWVzKEZsb2F0UG9pbnQmIHAxLCBGbG9hdFBvaW50JiBwMiwgZmxv
YXQgc3Ryb2tlV2lkdGgsIGNvbnN0IFN0cm9rZVN0eWxlJiBwZW5TdHlsZSkKIHsKICAgICAvLyBG
b3Igb2RkIHdpZHRocywgd2UgYWRkIGluIDAuNSB0byB0aGUgYXBwcm9wcmlhdGUgeC95IHNvIHRo
YXQgdGhlIGZsb2F0IGFyaXRobWV0aWMKQEAgLTYwMCwxNCArNjExLDQgQEAgdm9pZCBHcmFwaGlj
c0NvbnRleHQ6OmFkanVzdExpbmVUb1BpeGVsQm91bmRhcmllcyhGbG9hdFBvaW50JiBwMSwgRmxv
YXRQb2ludCYgcDIKICAgICB9CiB9CiAKLSNpZiAhUExBVEZPUk0oU0tJQSkKLXZvaWQgR3JhcGhp
Y3NDb250ZXh0OjpzZXRHcmFwaGljc0NvbnRleHQzRChHcmFwaGljc0NvbnRleHQzRCosIGNvbnN0
IEludFNpemUmKQotewotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6c3luY1NvZnR3YXJlQ2Fu
dmFzKCkKLXsKLX0KLSNlbmRpZgotCiB9CmRpZmYgLS1naXQgYS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL0dyYXBoaWNzQ29udGV4dC5oIGIvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFw
aGljc0NvbnRleHQuaAppbmRleCA5M2VmODkwMDYyZWRhNTI4OTllNGQzM2RkMTA5MWEyZDMyZjRk
MDhjLi43ODYyMjc5ZjhlMjUzODYyMzhhZWViODM4NDBhZDVhNDE2MDQ0MTgxIDEwMDY0NAotLS0g
YS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dC5oCisrKyBiL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0LmgKQEAgLTEyMiwxNiArMTIyLDE3
IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICBjb25zdCBpbnQgY01pc3NwZWxsaW5nTGluZVBh
dHRlcm5HYXBXaWR0aCA9IDE7CiAKICAgICBjbGFzcyBBZmZpbmVUcmFuc2Zvcm07CisgICAgY2xh
c3MgRHJhd2luZ0J1ZmZlcjsKICAgICBjbGFzcyBGb250OwogICAgIGNsYXNzIEdlbmVyYXRvcjsK
ICAgICBjbGFzcyBHcmFkaWVudDsKLSAgICBjbGFzcyBHcmFwaGljc0NvbnRleHQzRDsKICAgICBj
bGFzcyBHcmFwaGljc0NvbnRleHRQbGF0Zm9ybVByaXZhdGU7CiAgICAgY2xhc3MgR3JhcGhpY3ND
b250ZXh0UHJpdmF0ZTsKICAgICBjbGFzcyBJbWFnZUJ1ZmZlcjsKICAgICBjbGFzcyBLVVJMOwog
ICAgIGNsYXNzIFBhdGg7CiAgICAgY2xhc3MgUGF0dGVybjsKKyAgICBjbGFzcyBTaGFyZWRHcmFw
aGljc0NvbnRleHQzRDsKICAgICBjbGFzcyBUZXh0UnVuOwogCiAgICAgLy8gVGhlc2UgYml0cyBj
YW4gYmUgT1JlZCB0b2dldGhlciBmb3IgYSB0b3RhbCBvZiA4IHBvc3NpYmxlIHRleHQgZHJhd2lu
ZyBtb2Rlcy4KQEAgLTQxMiw3ICs0MTMsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAg
IHBhdHRlcm4gZ2V0SGFpa3VTdHJva2VTdHlsZSgpOwogI2VuZGlmCiAKLSAgICAgICAgdm9pZCBz
ZXRHcmFwaGljc0NvbnRleHQzRChHcmFwaGljc0NvbnRleHQzRCosIGNvbnN0IEludFNpemUmKTsK
KyAgICAgICAgdm9pZCBzZXRTaGFyZWRHcmFwaGljc0NvbnRleHQzRChTaGFyZWRHcmFwaGljc0Nv
bnRleHQzRCosIERyYXdpbmdCdWZmZXIqLCBjb25zdCBJbnRTaXplJik7CiAgICAgICAgIHZvaWQg
c3luY1NvZnR3YXJlQ2FudmFzKCk7CiAKICAgICBwcml2YXRlOgpkaWZmIC0tZ2l0IGEvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9DYW52YXMyRExheWVyQ2hyb21pdW0uY3BwIGIv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9DYW52YXMyRExheWVyQ2hyb21pdW0u
Y3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAuLjM0NWM0MjAyYjQ5Mjk0OTI4YWE1NmZlZjYzY2U4NDAyNzRiMDdhODQK
LS0tIC9kZXYvbnVsbAorKysgYi9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0Nh
bnZhczJETGF5ZXJDaHJvbWl1bS5jcHAKQEAgLTAsMCArMSwxMDQgQEAKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMTAgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyAqIG1ldDoKKyAqCisgKiAgICAgKiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorICogaW4gdGhlIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogZGlzdHJpYnV0aW9u
LgorICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVz
IG9mIGl0cworICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90
ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZp
YyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElT
IiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIE9XTkVSIE9SIENPTlRSSUJV
VE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICog
U1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVT
UyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQK
KyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmln
LmgiCisKKyNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCisKKyNpbmNsdWRlICJDYW52
YXMyRExheWVyQ2hyb21pdW0uaCIKKworI2luY2x1ZGUgIkRyYXdpbmdCdWZmZXIuaCIKKworI2lu
Y2x1ZGUgPEdMRVMyL2dsMi5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK1Bhc3NSZWZQdHI8
Q2FudmFzMkRMYXllckNocm9taXVtPiBDYW52YXMyRExheWVyQ2hyb21pdW06OmNyZWF0ZShEcmF3
aW5nQnVmZmVyKiBkcmF3aW5nQnVmZmVyLCBHcmFwaGljc0xheWVyQ2hyb21pdW0qIG93bmVyKQor
eworICAgIHJldHVybiBhZG9wdFJlZihuZXcgQ2FudmFzMkRMYXllckNocm9taXVtKGRyYXdpbmdC
dWZmZXIsIG93bmVyKSk7Cit9CisKK0NhbnZhczJETGF5ZXJDaHJvbWl1bTo6Q2FudmFzMkRMYXll
ckNocm9taXVtKERyYXdpbmdCdWZmZXIqIGRyYXdpbmdCdWZmZXIsIEdyYXBoaWNzTGF5ZXJDaHJv
bWl1bSogb3duZXIpCisgICAgOiBDYW52YXNMYXllckNocm9taXVtKG93bmVyKQorICAgICwgbV9k
cmF3aW5nQnVmZmVyKGRyYXdpbmdCdWZmZXIpCit7Cit9CisKK0NhbnZhczJETGF5ZXJDaHJvbWl1
bTo6fkNhbnZhczJETGF5ZXJDaHJvbWl1bSgpCit7CisgICAgaWYgKG1fdGV4dHVyZUlkKQorICAg
ICAgICBnbERlbGV0ZVRleHR1cmVzKDEsICZtX3RleHR1cmVJZCk7Cit9CisKK3ZvaWQgQ2FudmFz
MkRMYXllckNocm9taXVtOjp1cGRhdGVDb250ZW50cygpCit7CisgICAgaWYgKCFtX2RyYXdpbmdC
dWZmZXIpCisgICAgICAgIHJldHVybjsKKyAgICBpZiAobV90ZXh0dXJlQ2hhbmdlZCkgeyAvLyBX
ZSBoYXZlIHRvIGdlbmVyYXRlIGEgbmV3IGJhY2tpbmcgdGV4dHVyZS4KKyAgICAgICAgaWYgKG1f
dGV4dHVyZUlkKQorICAgICAgICAgICAgZ2xEZWxldGVUZXh0dXJlcygxLCAmbV90ZXh0dXJlSWQp
OworICAgICAgICBnbEdlblRleHR1cmVzKDEsICZtX3RleHR1cmVJZCk7CisgICAgICAgIGdsQWN0
aXZlVGV4dHVyZShHTF9URVhUVVJFMCk7CisgICAgICAgIGdsQmluZFRleHR1cmUoR0xfVEVYVFVS
RV8yRCwgbV90ZXh0dXJlSWQpOworICAgICAgICBJbnRTaXplIHNpemUgPSBtX2RyYXdpbmdCdWZm
ZXItPnNpemUoKTsKKyAgICAgICAgZ2xUZXhJbWFnZTJEKEdMX1RFWFRVUkVfMkQsIDAsIEdMX1JH
QkEsIHNpemUud2lkdGgoKSwgc2l6ZS5oZWlnaHQoKSwgMCwgR0xfUkdCQSwgR0xfVU5TSUdORURf
QllURSwgMCk7CisgICAgICAgIC8vIFNldCB0aGUgbWluLW1hZyBmaWx0ZXJzIHRvIGxpbmVhciBh
bmQgd3JhcCBtb2RlcyB0byBHTF9DTEFNUF9UT19FREdFCisgICAgICAgIC8vIHRvIGdldCBhcm91
bmQgTlBPVCB0ZXh0dXJlIGxpbWl0YXRpb25zIG9mIEdMRVMuCisgICAgICAgIGdsVGV4UGFyYW1l
dGVyaShHTF9URVhUVVJFXzJELCBHTF9URVhUVVJFX01JTl9GSUxURVIsIEdMX0xJTkVBUik7Cisg
ICAgICAgIGdsVGV4UGFyYW1ldGVyaShHTF9URVhUVVJFXzJELCBHTF9URVhUVVJFX01BR19GSUxU
RVIsIEdMX0xJTkVBUik7CisgICAgICAgIGdsVGV4UGFyYW1ldGVyaShHTF9URVhUVVJFXzJELCBH
TF9URVhUVVJFX1dSQVBfUywgR0xfQ0xBTVBfVE9fRURHRSk7CisgICAgICAgIGdsVGV4UGFyYW1l
dGVyaShHTF9URVhUVVJFXzJELCBHTF9URVhUVVJFX1dSQVBfVCwgR0xfQ0xBTVBfVE9fRURHRSk7
CisgICAgICAgIG1fdGV4dHVyZUNoYW5nZWQgPSBmYWxzZTsKKyAgICAgICAgLy8gRklYTUU6IFRo
ZSBnbEZpbmlzaCgpIGhlcmUgaXMgcmVxdWlyZWQgYmVjYXVzZSB3ZSBoYXZlIHRvIG1ha2Ugc3Vy
ZSB0aGF0IHRoZSB0ZXh0dXJlIGNyZWF0ZWQgaW4gdGhpcworICAgICAgICAvLyBjb250ZXh0ICh0
aGUgY29tcG9zaXRvciBjb250ZXh0KSBpcyBhY3R1YWxseSBjcmVhdGVkIGJ5IHRoZSBzZXJ2aWNl
IHNpZGUgYmVmb3JlIHRoZSBjaGlsZCBjb250ZXh0CisgICAgICAgIC8vIGF0dGVtcHRzIHRvIHVz
ZSBpdCAoaW4gcHVibGlzaFRvUGxhdGZvcm1MYXllcikuICBnbEZpbmlzaCgpIGlzIGN1cnJlbnRs
eSB0aGUgb25seSBjYWxsIHdpdGggc3Ryb25nCisgICAgICAgIC8vIGVub3VnaCBzZW1hbnRpY3Mg
dG8gcHJvbWlzZSB0aGlzLCBidXQgaXMgYWN0dWFsbHkgbXVjaCBzdHJvbmdlci4gIElkZWFsbHkg
d2UnZCBkbyBzb21ldGhpbmcgbGlrZQorICAgICAgICAvLyBpbnNlcnRpbmcgYSBmZW5jZSBoZXJl
IGFuZCB3YWl0aW5nIGZvciBpdCBiZWZvcmUgdHJ5aW5nIHRvIHB1Ymxpc2guCisgICAgICAgIGds
RmluaXNoKCk7CisgICAgfQorICAgIC8vIFVwZGF0ZSB0aGUgY29udGVudHMgb2YgdGhlIHRleHR1
cmUgdXNlZCBieSB0aGUgY29tcG9zaXRvci4KKyAgICBpZiAobV9jb250ZW50c0RpcnR5KSB7Cisg
ICAgICAgIG1fZHJhd2luZ0J1ZmZlci0+cHVibGlzaFRvUGxhdGZvcm1MYXllcigpOworICAgICAg
ICBtX2NvbnRlbnRzRGlydHkgPSBmYWxzZTsKKyAgICB9Cit9CisKK3ZvaWQgQ2FudmFzMkRMYXll
ckNocm9taXVtOjpzZXRUZXh0dXJlQ2hhbmdlZCgpCit7CisgICAgbV90ZXh0dXJlQ2hhbmdlZCA9
IHRydWU7Cit9CisKK3Vuc2lnbmVkIENhbnZhczJETGF5ZXJDaHJvbWl1bTo6dGV4dHVyZUlkKCkg
Y29uc3QKK3sKKyAgICByZXR1cm4gbV90ZXh0dXJlSWQ7Cit9CisKK30KKyNlbmRpZiAvLyBVU0Uo
QUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCmRpZmYgLS1naXQgYS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2Nocm9taXVtL0NhbnZhczJETGF5ZXJDaHJvbWl1bS5oIGIvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jaHJvbWl1bS9DYW52YXMyRExheWVyQ2hyb21pdW0uaApuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi40
NjkzYzBiOTQxMzBlZTVmZjcxZWVmZTcxZGIzYTMzZmQ0N2EyNjgwCi0tLSAvZGV2L251bGwKKysr
IGIvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9DYW52YXMyRExheWVyQ2hyb21p
dW0uaApAQCAtMCwwICsxLDY0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEwIEdvb2dsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMg
YXJlCisgKiBtZXQ6CisgKgorICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAgICAqIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqIGNv
cHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIKKyAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqIGRpc3RyaWJ1dGlvbi4KKyAqICAgICAqIE5laXRoZXIg
dGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqIGNvbnRyaWJ1
dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBm
cm9tCisgKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJt
aXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdI
VCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBU
SEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IK
KyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFM
TCBUSEUgQ09QWVJJR0hUCisgKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwg
T1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQg
VE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAq
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCisgKi8KKworCisjaWZuZGVmIENhbnZhczJETGF5ZXJDaHJvbWl1bV9oCisj
ZGVmaW5lIENhbnZhczJETGF5ZXJDaHJvbWl1bV9oCisKKyNpZiBVU0UoQUNDRUxFUkFURURfQ09N
UE9TSVRJTkcpCisKKyNpbmNsdWRlICJDYW52YXNMYXllckNocm9taXVtLmgiCisKK25hbWVzcGFj
ZSBXZWJDb3JlIHsKKworY2xhc3MgRHJhd2luZ0J1ZmZlcjsKKworLy8gQSBsYXllciBjb250YWlu
aW5nIGFuIGFjY2VsZXJhdGVkIDJkIGNhbnZhcworY2xhc3MgQ2FudmFzMkRMYXllckNocm9taXVt
IDogcHVibGljIENhbnZhc0xheWVyQ2hyb21pdW0geworcHVibGljOgorICAgIHN0YXRpYyBQYXNz
UmVmUHRyPENhbnZhczJETGF5ZXJDaHJvbWl1bT4gY3JlYXRlKERyYXdpbmdCdWZmZXIqLCBHcmFw
aGljc0xheWVyQ2hyb21pdW0qIG93bmVyKTsKKyAgICB2aXJ0dWFsIH5DYW52YXMyRExheWVyQ2hy
b21pdW0oKTsKKyAgICB2aXJ0dWFsIGJvb2wgZHJhd3NDb250ZW50KCkgeyByZXR1cm4gdHJ1ZTsg
fQorICAgIHZpcnR1YWwgdm9pZCB1cGRhdGVDb250ZW50cygpOworCisgICAgdm9pZCBzZXRUZXh0
dXJlQ2hhbmdlZCgpOworICAgIHVuc2lnbmVkIHRleHR1cmVJZCgpIGNvbnN0OworCitwcml2YXRl
OgorICAgIGV4cGxpY2l0IENhbnZhczJETGF5ZXJDaHJvbWl1bShEcmF3aW5nQnVmZmVyKiwgR3Jh
cGhpY3NMYXllckNocm9taXVtKiBvd25lcik7CisgICAgRHJhd2luZ0J1ZmZlciogbV9kcmF3aW5n
QnVmZmVyOworCisgICAgc3RhdGljIHVuc2lnbmVkIG1fc2hhZGVyUHJvZ3JhbUlkOworfTsKKwor
fQorI2VuZGlmIC8vIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKKworI2VuZGlmCmRpZmYg
LS1naXQgYS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0NhbnZhc0xheWVyQ2hy
b21pdW0uY3BwIGIvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9DYW52YXNMYXll
ckNocm9taXVtLmNwcAppbmRleCBiYmYwOTFjMmE2NzBkN2MzNmU5MjM4ZTFiOGNjMzUwYmEzODNl
ODEwLi41NmE3MjYyMjFlNWIwNmU5NTZlNzY1ZTBhMzVkMWM3YWY5NTNmMjQxIDEwMDY0NAotLS0g
YS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0NhbnZhc0xheWVyQ2hyb21pdW0u
Y3BwCisrKyBiL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vQ2FudmFzTGF5ZXJD
aHJvbWl1bS5jcHAKQEAgLTM0LDEyICszNCwxNCBAQAogCiAjaW5jbHVkZSAiQ2FudmFzTGF5ZXJD
aHJvbWl1bS5oIgogCi0jaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0M0QuaCIKICNpbmNsdWRlICJM
YXllclJlbmRlcmVyQ2hyb21pdW0uaCIKKwogI2luY2x1ZGUgPEdMRVMyL2dsMi5oPgogCiBuYW1l
c3BhY2UgV2ViQ29yZSB7CiAKK3Vuc2lnbmVkIENhbnZhc0xheWVyQ2hyb21pdW06Om1fc2hhZGVy
UHJvZ3JhbUlkID0gMDsKKwogQ2FudmFzTGF5ZXJDaHJvbWl1bTo6U2hhcmVkVmFsdWVzOjpTaGFy
ZWRWYWx1ZXMoKQogICAgIDogbV9jYW52YXNTaGFkZXJQcm9ncmFtKDApCiAgICAgLCBtX3NoYWRl
clNhbXBsZXJMb2NhdGlvbigtMSkKQEAgLTkzLDQ5ICs5NSwxNSBAQCBDYW52YXNMYXllckNocm9t
aXVtOjpTaGFyZWRWYWx1ZXM6On5TaGFyZWRWYWx1ZXMoKQogICAgICAgICBHTEMoZ2xEZWxldGVQ
cm9ncmFtKG1fY2FudmFzU2hhZGVyUHJvZ3JhbSkpOwogfQogCi1QYXNzUmVmUHRyPENhbnZhc0xh
eWVyQ2hyb21pdW0+IENhbnZhc0xheWVyQ2hyb21pdW06OmNyZWF0ZShHcmFwaGljc0xheWVyQ2hy
b21pdW0qIG93bmVyKQotewotICAgIHJldHVybiBhZG9wdFJlZihuZXcgQ2FudmFzTGF5ZXJDaHJv
bWl1bShvd25lcikpOwotfQotCiBDYW52YXNMYXllckNocm9taXVtOjpDYW52YXNMYXllckNocm9t
aXVtKEdyYXBoaWNzTGF5ZXJDaHJvbWl1bSogb3duZXIpCiAgICAgOiBMYXllckNocm9taXVtKG93
bmVyKQotICAgICwgbV9jb250ZXh0KDApCisgICAgLCBtX3RleHR1cmVDaGFuZ2VkKHRydWUpCiAg
ICAgLCBtX3RleHR1cmVJZCgwKQotICAgICwgbV90ZXh0dXJlQ2hhbmdlZChmYWxzZSkKLXsKLX0K
LQotdm9pZCBDYW52YXNMYXllckNocm9taXVtOjp1cGRhdGVDb250ZW50cygpCiB7Ci0gICAgQVNT
RVJUKG1fY29udGV4dCk7Ci0gICAgaWYgKG1fdGV4dHVyZUNoYW5nZWQpIHsKLSAgICAgICAgZ2xC
aW5kVGV4dHVyZShHTF9URVhUVVJFXzJELCBtX3RleHR1cmVJZCk7Ci0gICAgICAgIC8vIFNldCB0
aGUgbWluLW1hZyBmaWx0ZXJzIHRvIGxpbmVhciBhbmQgd3JhcCBtb2RlcyB0byBHTF9DTEFNUF9U
T19FREdFCi0gICAgICAgIC8vIHRvIGdldCBhcm91bmQgTlBPVCB0ZXh0dXJlIGxpbWl0YXRpb25z
IG9mIEdMRVMuCi0gICAgICAgIGdsVGV4UGFyYW1ldGVyZihHTF9URVhUVVJFXzJELCBHTF9URVhU
VVJFX01JTl9GSUxURVIsIEdMX0xJTkVBUik7Ci0gICAgICAgIGdsVGV4UGFyYW1ldGVyZihHTF9U
RVhUVVJFXzJELCBHTF9URVhUVVJFX01BR19GSUxURVIsIEdMX0xJTkVBUik7Ci0gICAgICAgIGds
VGV4UGFyYW1ldGVyZihHTF9URVhUVVJFXzJELCBHTF9URVhUVVJFX1dSQVBfUywgR0xfQ0xBTVBf
VE9fRURHRSk7Ci0gICAgICAgIGdsVGV4UGFyYW1ldGVyZihHTF9URVhUVVJFXzJELCBHTF9URVhU
VVJFX1dSQVBfVCwgR0xfQ0xBTVBfVE9fRURHRSk7Ci0gICAgICAgIG1fdGV4dHVyZUNoYW5nZWQg
PSBmYWxzZTsKLSAgICB9Ci0gICAgLy8gVXBkYXRlIHRoZSBjb250ZW50cyBvZiB0aGUgdGV4dHVy
ZSB1c2VkIGJ5IHRoZSBjb21wb3NpdG9yLgotICAgIGlmIChtX2NvbnRlbnRzRGlydHkpIHsKLSAg
ICAgICAgaWYgKG1fcHJlcGFyZVRleHR1cmVDYWxsYmFjaykKLSAgICAgICAgICAgIG1fcHJlcGFy
ZVRleHR1cmVDYWxsYmFjay0+d2lsbFByZXBhcmVUZXh0dXJlKCk7Ci0gICAgICAgIG1fY29udGV4
dC0+cHJlcGFyZVRleHR1cmUoKTsKLSAgICAgICAgbV9jb250ZW50c0RpcnR5ID0gZmFsc2U7Ci0g
ICAgfQogfQogCi12b2lkIENhbnZhc0xheWVyQ2hyb21pdW06OnNldENvbnRleHQoY29uc3QgR3Jh
cGhpY3NDb250ZXh0M0QqIGNvbnRleHQpCitDYW52YXNMYXllckNocm9taXVtOjp+Q2FudmFzTGF5
ZXJDaHJvbWl1bSgpCiB7Ci0gICAgbV9jb250ZXh0ID0gY29uc3RfY2FzdDxHcmFwaGljc0NvbnRl
eHQzRCo+KGNvbnRleHQpOwotCi0gICAgdW5zaWduZWQgaW50IHRleHR1cmVJZCA9IG1fY29udGV4
dC0+cGxhdGZvcm1UZXh0dXJlKCk7Ci0gICAgaWYgKHRleHR1cmVJZCAhPSBtX3RleHR1cmVJZCkK
LSAgICAgICAgbV90ZXh0dXJlQ2hhbmdlZCA9IHRydWU7Ci0gICAgbV90ZXh0dXJlSWQgPSB0ZXh0
dXJlSWQ7CiB9CiAKIHZvaWQgQ2FudmFzTGF5ZXJDaHJvbWl1bTo6ZHJhdygpCkBAIC0xNTAsNiAr
MTE4LDcgQEAgdm9pZCBDYW52YXNMYXllckNocm9taXVtOjpkcmF3KCkKICAgICBkcmF3VGV4dHVy
ZWRRdWFkKGxheWVyUmVuZGVyZXIoKS0+cHJvamVjdGlvbk1hdHJpeCgpLCBkcmF3VHJhbnNmb3Jt
KCksCiAgICAgICAgICAgICAgICAgICAgICBib3VuZHMoKS53aWR0aCgpLCBib3VuZHMoKS5oZWln
aHQoKSwgZHJhd09wYWNpdHkoKSwKICAgICAgICAgICAgICAgICAgICAgIHN2LT5zaGFkZXJNYXRy
aXhMb2NhdGlvbigpLCBzdi0+c2hhZGVyQWxwaGFMb2NhdGlvbigpKTsKKwogfQogCiB9CmRpZmYg
LS1naXQgYS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0NhbnZhc0xheWVyQ2hy
b21pdW0uaCBiL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vQ2FudmFzTGF5ZXJD
aHJvbWl1bS5oCmluZGV4IDA1M2VmZmZhMDFlMTQyODM4MTIxNDUzYzFhNGI4YTE5NGI2ZmE0YzEu
LmQ1OTFjNzM3NTk5MDRmOGQyOTFkNzE3MGNjYzNhYTBlNmUzMzFmMWIgMTAwNjQ0Ci0tLSBhL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vQ2FudmFzTGF5ZXJDaHJvbWl1bS5oCisr
KyBiL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vQ2FudmFzTGF5ZXJDaHJvbWl1
bS5oCkBAIC0zOCwxNyArMzgsMTIgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1jbGFzcyBH
cmFwaGljc0NvbnRleHQzRDsKLQotLy8gQSBMYXllciBjb250YWluaW5nIGEgV2ViR0wgb3IgYWNj
ZWxlcmF0ZWQgMmQgY2FudmFzCisvLyBCYXNlIGNsYXNzIGZvciBXZWJHTCBhbmQgYWNjZWxlcmF0
ZWQgMmQgY2FudmFzZXMuCiBjbGFzcyBDYW52YXNMYXllckNocm9taXVtIDogcHVibGljIExheWVy
Q2hyb21pdW0gewogcHVibGljOgotICAgIHN0YXRpYyBQYXNzUmVmUHRyPENhbnZhc0xheWVyQ2hy
b21pdW0+IGNyZWF0ZShHcmFwaGljc0xheWVyQ2hyb21pdW0qIG93bmVyID0gMCk7Ci0gICAgdmly
dHVhbCBib29sIGRyYXdzQ29udGVudCgpIHsgcmV0dXJuIG1fY29udGV4dDsgfQotICAgIHZpcnR1
YWwgdm9pZCB1cGRhdGVDb250ZW50cygpOwotICAgIHZpcnR1YWwgdm9pZCBkcmF3KCk7CisgICAg
dmlydHVhbCB+Q2FudmFzTGF5ZXJDaHJvbWl1bSgpOwogCi0gICAgdm9pZCBzZXRDb250ZXh0KGNv
bnN0IEdyYXBoaWNzQ29udGV4dDNEKiBjb250ZXh0KTsKKyAgICB2aXJ0dWFsIHZvaWQgZHJhdygp
OwogCiAgICAgY2xhc3MgU2hhcmVkVmFsdWVzIHsKICAgICBwdWJsaWM6CkBAIC02OSwyMSArNjQs
MTYgQEAgcHVibGljOgogICAgICAgICBib29sIG1faW5pdGlhbGl6ZWQ7CiAgICAgfTsKIAotICAg
IGNsYXNzIFByZXBhcmVUZXh0dXJlQ2FsbGJhY2sgOiBwdWJsaWMgTm9uY29weWFibGUgewotICAg
IHB1YmxpYzoKLSAgICAgICAgdmlydHVhbCB2b2lkIHdpbGxQcmVwYXJlVGV4dHVyZSgpID0gMDsK
LSAgICB9OwotICAgIHZvaWQgc2V0UHJlcGFyZVRleHR1cmVDYWxsYmFjayhQYXNzT3duUHRyPFBy
ZXBhcmVUZXh0dXJlQ2FsbGJhY2s+IGNhbGxiYWNrKSB7IG1fcHJlcGFyZVRleHR1cmVDYWxsYmFj
ayA9IGNhbGxiYWNrOyB9Ci0KLXByaXZhdGU6Citwcm90ZWN0ZWQ6CiAgICAgZXhwbGljaXQgQ2Fu
dmFzTGF5ZXJDaHJvbWl1bShHcmFwaGljc0xheWVyQ2hyb21pdW0qIG93bmVyKTsKLSAgICBHcmFw
aGljc0NvbnRleHQzRCogbV9jb250ZXh0OwotICAgIHVuc2lnbmVkIG1fdGV4dHVyZUlkOwogICAg
IGJvb2wgbV90ZXh0dXJlQ2hhbmdlZDsKLSAgICBPd25QdHI8UHJlcGFyZVRleHR1cmVDYWxsYmFj
az4gbV9wcmVwYXJlVGV4dHVyZUNhbGxiYWNrOworICAgIHVuc2lnbmVkIG1fdGV4dHVyZUlkOwor
Citwcml2YXRlOgorICAgIHN0YXRpYyB1bnNpZ25lZCBtX3NoYWRlclByb2dyYW1JZDsKIH07CiAK
IH0KICNlbmRpZiAvLyBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCiAKLSNlbmRpZgorI2Vu
ZGlmIC8vIENhbnZhc0xheWVyQ2hyb21pdW1faApkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jaHJvbWl1bS9EcmF3aW5nQnVmZmVyQ2hyb21pdW0uY3BwIGIvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9EcmF3aW5nQnVmZmVyQ2hyb21pdW0uY3BwCm5ldyBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAuLjhlNmYxMDMwMjYyODQ0NzFkNjFjMTNlMzFhMmE3MWM1OWZhNmYyZTgKLS0tIC9kZXYv
bnVsbAorKysgYi9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0RyYXdpbmdCdWZm
ZXJDaHJvbWl1bS5jcHAKQEAgLTAsMCArMSwxMjAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIw
MTAsIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMgYXJlCisgKiBtZXQ6CisgKgorICogICAgICogUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAq
ICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqIGRpc3RyaWJ1dGlvbi4KKyAqICAg
ICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMK
KyAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVj
dHMgZGVyaXZlZCBmcm9tCisgKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Ig
d3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
VEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFO
WSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBM
SU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBO
TyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUws
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QK
KyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorCisj
aW5jbHVkZSAiRHJhd2luZ0J1ZmZlci5oIgorCisjaW5jbHVkZSAiQ2FudmFzMkRMYXllckNocm9t
aXVtLmgiCisjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0M0QuaCIKKyNpbmNsdWRlICJTaGFyZWRH
cmFwaGljc0NvbnRleHQzRC5oIgorCisjaW5jbHVkZSA8R0xFUzIvZ2wyLmg+CisjaWZuZGVmIEdM
X0dMRVhUX1BST1RPVFlQRVMKKyNkZWZpbmUgR0xfR0xFWFRfUFJPVE9UWVBFUyAxCisjZW5kaWYK
KyNpbmNsdWRlIDxHTEVTMi9nbDJleHQuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitzdHJ1
Y3QgRHJhd2luZ0J1ZmZlckludGVybmFsIHsKKyAgICB1bnNpZ25lZCBvZmZzY3JlZW5Db2xvclRl
eHR1cmU7CisgICAgUmVmUHRyPENhbnZhczJETGF5ZXJDaHJvbWl1bT4gcGxhdGZvcm1MYXllcjsK
K307CisKK3N0YXRpYyB1bnNpZ25lZCBnZW5lcmF0ZUNvbG9yVGV4dHVyZShTaGFyZWRHcmFwaGlj
c0NvbnRleHQzRCogY29udGV4dCwgY29uc3QgSW50U2l6ZSYgc2l6ZSkKK3sKKyAgICB1bnNpZ25l
ZCBvZmZzY3JlZW5Db2xvclRleHR1cmUgPSBjb250ZXh0LT5jcmVhdGVUZXh0dXJlKCk7CisgICAg
aWYgKCFvZmZzY3JlZW5Db2xvclRleHR1cmUpCisgICAgICAgIHJldHVybiAwOworCisgICAgY29u
dGV4dC0+YmluZFRleHR1cmUoR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQsIG9mZnNjcmVl
bkNvbG9yVGV4dHVyZSk7CisgICAgY29udGV4dC0+dGV4UGFyYW1ldGVyaShHcmFwaGljc0NvbnRl
eHQzRDo6VEVYVFVSRV8yRCwgR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfTUFHX0ZJTFRFUiwg
R3JhcGhpY3NDb250ZXh0M0Q6Ok5FQVJFU1QpOworICAgIGNvbnRleHQtPnRleFBhcmFtZXRlcmko
R3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQsIEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJF
X01JTl9GSUxURVIsIEdyYXBoaWNzQ29udGV4dDNEOjpORUFSRVNUKTsKKyAgICBjb250ZXh0LT50
ZXhQYXJhbWV0ZXJpKEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFXzJELCBHcmFwaGljc0NvbnRl
eHQzRDo6VEVYVFVSRV9XUkFQX1MsIEdyYXBoaWNzQ29udGV4dDNEOjpDTEFNUF9UT19FREdFKTsK
KyAgICBjb250ZXh0LT50ZXhQYXJhbWV0ZXJpKEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFXzJE
LCBHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV9XUkFQX1QsIEdyYXBoaWNzQ29udGV4dDNEOjpD
TEFNUF9UT19FREdFKTsKKyAgICBjb250ZXh0LT50ZXhJbWFnZTJEKEdyYXBoaWNzQ29udGV4dDNE
OjpURVhUVVJFXzJELCAwLCBHcmFwaGljc0NvbnRleHQzRDo6UkdCQSwgc2l6ZS53aWR0aCgpLCBz
aXplLmhlaWdodCgpLCAwLCBHcmFwaGljc0NvbnRleHQzRDo6UkdCQSwgR3JhcGhpY3NDb250ZXh0
M0Q6OlVOU0lHTkVEX0JZVEUsIDApOworICAgIGNvbnRleHQtPmZyYW1lYnVmZmVyVGV4dHVyZTJE
KEdyYXBoaWNzQ29udGV4dDNEOjpGUkFNRUJVRkZFUiwgR3JhcGhpY3NDb250ZXh0M0Q6OkNPTE9S
X0FUVEFDSE1FTlQwLCBHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV8yRCwgb2Zmc2NyZWVuQ29s
b3JUZXh0dXJlLCAwKTsKKworICAgIHJldHVybiBvZmZzY3JlZW5Db2xvclRleHR1cmU7Cit9CisK
KworRHJhd2luZ0J1ZmZlcjo6RHJhd2luZ0J1ZmZlcihTaGFyZWRHcmFwaGljc0NvbnRleHQzRCog
Y29udGV4dCwgY29uc3QgSW50U2l6ZSYgc2l6ZSwgdW5zaWduZWQgZnJhbWVidWZmZXIpCisgICAg
OiBtX2NvbnRleHQoY29udGV4dCkKKyAgICAsIG1fc2l6ZShzaXplKQorICAgICwgbV9mcmFtZWJ1
ZmZlcihmcmFtZWJ1ZmZlcikKKyAgICAsIG1faW50ZXJuYWwobmV3IERyYXdpbmdCdWZmZXJJbnRl
cm5hbCkKK3sKKyAgICBjb250ZXh0LT5iaW5kRnJhbWVidWZmZXIoZnJhbWVidWZmZXIpOworICAg
IG1faW50ZXJuYWwtPm9mZnNjcmVlbkNvbG9yVGV4dHVyZSA9IGdlbmVyYXRlQ29sb3JUZXh0dXJl
KGNvbnRleHQsIHNpemUpOworfQorCitEcmF3aW5nQnVmZmVyOjp+RHJhd2luZ0J1ZmZlcigpCit7
CisgICAgbV9jb250ZXh0LT5kZWxldGVGcmFtZWJ1ZmZlcihtX2ZyYW1lYnVmZmVyKTsKK30KKwor
dm9pZCBEcmF3aW5nQnVmZmVyOjpwdWJsaXNoVG9QbGF0Zm9ybUxheWVyKCkKK3sKKyAgICBpZiAo
bV9jYWxsYmFjaykKKyAgICAgICAgbV9jYWxsYmFjay0+d2lsbFB1Ymxpc2goKTsKKyAgICB1bnNp
Z25lZCBwYXJlbnRUZXh0dXJlID0gbV9pbnRlcm5hbC0+cGxhdGZvcm1MYXllci0+dGV4dHVyZUlk
KCk7CisgICAgLy8gRklYTUU6IFdlIGRvIHRoZSBjb3B5IGluIHRoZSBjYW52YXMnIChjaGlsZCkg
Y29udGV4dCBzbyB0aGF0IGl0IGV4ZWN1dGVzIGluIHRoZSBjb3JyZWN0IG9yZGVyIHJlbGF0aXZl
IHRvCisgICAgLy8gb3RoZXIgY29tbWFuZHMgaW4gdGhlIGNoaWxkIGNvbnRleHQuICBUaGlzIGVu
c3VyZXMgdGhhdCB0aGUgcGFyZW50IHRleHR1cmUgYWx3YXlzIGNvbnRhaW5zIGEgY29tcGxldGUK
KyAgICAvLyBmcmFtZSBhbmQgbm90IHNvbWUgaW50ZXJtZWRpYXRlIHJlc3VsdC4gIEhvd2V2ZXIs
IHRoZXJlIGlzIG5vIHN5bmNocm9uaXphdGlvbiB0byBlbnN1cmUgdGhhdCB0aGlzIGNvcHkKKyAg
ICAvLyBoYXBwZW5zIGJlZm9yZSB0aGUgY29tcG9zaXRvciBkcmF3cy4gIFRoaXMgbWVhbnMgd2Ug
bWlnaHQgZHJhdyBzdGFsZSBmcmFtZXMgc29tZXRpbWVzLiAgSWRlYWxseSB0aGlzCisgICAgLy8g
d291bGQgaW5zZXJ0IGEgZmVuY2UgaW50byB0aGUgY2hpbGQgY29tbWFuZCBzdHJlYW0gdGhhdCB0
aGUgY29tcG9zaXRvciBjb3VsZCB3YWl0IGZvci4KKyAgICBtX2NvbnRleHQtPm1ha2VDb250ZXh0
Q3VycmVudCgpOworICAgIGdsQ29weVRleHR1cmVUb1BhcmVudFRleHR1cmUobV9pbnRlcm5hbC0+
b2Zmc2NyZWVuQ29sb3JUZXh0dXJlLCBwYXJlbnRUZXh0dXJlKTsKKyAgICBnbEZsdXNoKCk7Cit9
CisKK3ZvaWQgRHJhd2luZ0J1ZmZlcjo6cmVzZXQoY29uc3QgSW50U2l6ZSYgbmV3U2l6ZSkKK3sK
KyAgICBpZiAobV9zaXplID09IG5ld1NpemUpCisgICAgICAgIHJldHVybjsKKyAgICBtX3NpemUg
PSBuZXdTaXplOworICAgIG1fY29udGV4dC0+ZGVsZXRlVGV4dHVyZShtX2ludGVybmFsLT5vZmZz
Y3JlZW5Db2xvclRleHR1cmUpOworICAgIG1fY29udGV4dC0+YmluZEZyYW1lYnVmZmVyKG1fZnJh
bWVidWZmZXIpOworICAgIG1faW50ZXJuYWwtPm9mZnNjcmVlbkNvbG9yVGV4dHVyZSA9IGdlbmVy
YXRlQ29sb3JUZXh0dXJlKG1fY29udGV4dCwgbV9zaXplKTsKKworICAgIGlmIChtX2ludGVybmFs
LT5wbGF0Zm9ybUxheWVyKQorICAgICAgICBtX2ludGVybmFsLT5wbGF0Zm9ybUxheWVyLT5zZXRU
ZXh0dXJlQ2hhbmdlZCgpOworfQorCitQbGF0Zm9ybUxheWVyKiBEcmF3aW5nQnVmZmVyOjpwbGF0
Zm9ybUxheWVyKCkKK3sKKyAgICBpZiAoIW1faW50ZXJuYWwtPnBsYXRmb3JtTGF5ZXIpCisgICAg
ICAgIG1faW50ZXJuYWwtPnBsYXRmb3JtTGF5ZXIgPSBDYW52YXMyRExheWVyQ2hyb21pdW06OmNy
ZWF0ZSh0aGlzLCAwKTsKKyAgICByZXR1cm4gbV9pbnRlcm5hbC0+cGxhdGZvcm1MYXllci5nZXQo
KTsKK30KKworfQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1
bS9HTEVTMkNhbnZhcy5jcHAgYi9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0dM
RVMyQ2FudmFzLmNwcAppbmRleCA4MmQ0YzBiMDMzYTE0ZjkxZTU2NmY3YjRlZWEwOGIwNjY5MmVi
YmQzLi40NmFlY2Y0NzIwMzU2YzI0OWMyZWMwMzM0NjFiMDZhZTA1MzljOGJmIDEwMDY0NAotLS0g
YS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0dMRVMyQ2FudmFzLmNwcAorKysg
Yi9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0dMRVMyQ2FudmFzLmNwcApAQCAt
MzIsMTAgKzMyLDEyIEBACiAKICNpbmNsdWRlICJHTEVTMkNhbnZhcy5oIgogCisjaW5jbHVkZSAi
RHJhd2luZ0J1ZmZlci5oIgogI2luY2x1ZGUgIkZsb2F0UmVjdC5oIgogI2luY2x1ZGUgIkdyYXBo
aWNzQ29udGV4dDNELmgiCiAjaW5jbHVkZSAiSW50UmVjdC5oIgogI2luY2x1ZGUgIlBsYXRmb3Jt
U3RyaW5nLmgiCisjaW5jbHVkZSAiU2hhcmVkR3JhcGhpY3NDb250ZXh0M0QuaCIKICNpbmNsdWRl
ICJTb2xpZEZpbGxTaGFkZXIuaCIKICNpbmNsdWRlICJUZXhTaGFkZXIuaCIKICNpbmNsdWRlICJU
ZXh0dXJlLmgiCkBAIC02MSwzNyArNjMsMzUgQEAgc3RydWN0IEdMRVMyQ2FudmFzOjpTdGF0ZSB7
CiAgICAgQWZmaW5lVHJhbnNmb3JtIG1fY3RtOwogfTsKIAotR0xFUzJDYW52YXM6OkdMRVMyQ2Fu
dmFzKEdyYXBoaWNzQ29udGV4dDNEKiBjb250ZXh0LCBjb25zdCBJbnRTaXplJiBzaXplKQotICAg
IDogbV9jb250ZXh0KGNvbnRleHQpCitHTEVTMkNhbnZhczo6R0xFUzJDYW52YXMoU2hhcmVkR3Jh
cGhpY3NDb250ZXh0M0QqIGNvbnRleHQsIERyYXdpbmdCdWZmZXIqIGRyYXdpbmdCdWZmZXIsIGNv
bnN0IEludFNpemUmIHNpemUpCisgICAgOiBtX3NpemUoc2l6ZSkKKyAgICAsIG1fY29udGV4dChj
b250ZXh0KQorICAgICwgbV9kcmF3aW5nQnVmZmVyKGRyYXdpbmdCdWZmZXIpCiAgICAgLCBtX3N0
YXRlKDApCi0gICAgLCBtX3F1YWRWZXJ0aWNlcygwKQotICAgICwgbV9zb2xpZEZpbGxTaGFkZXIo
U29saWRGaWxsU2hhZGVyOjpjcmVhdGUoY29udGV4dCkpCi0gICAgLCBtX3RleFNoYWRlcihUZXhT
aGFkZXI6OmNyZWF0ZShjb250ZXh0KSkKIHsKICAgICBtX2ZsaXBNYXRyaXgudHJhbnNsYXRlKC0x
LjBmLCAxLjBmKTsKICAgICBtX2ZsaXBNYXRyaXguc2NhbGUoMi4wZiAvIHNpemUud2lkdGgoKSwg
LTIuMGYgLyBzaXplLmhlaWdodCgpKTsKIAotICAgIG1fY29udGV4dC0+cmVzaGFwZShzaXplLndp
ZHRoKCksIHNpemUuaGVpZ2h0KCkpOwotICAgIG1fY29udGV4dC0+dmlld3BvcnQoMCwgMCwgc2l6
ZS53aWR0aCgpLCBzaXplLmhlaWdodCgpKTsKLQogICAgIG1fc3RhdGVTdGFjay5hcHBlbmQoU3Rh
dGUoKSk7CiAgICAgbV9zdGF0ZSA9ICZtX3N0YXRlU3RhY2subGFzdCgpOwotCi0gICAgLy8gRm9y
Y2UgdGhlIHNvdXJjZSBvdmVyIGNvbXBvc2l0ZSBtb2RlIHRvIGJlIGFwcGxpZWQuCi0gICAgbV9s
YXN0Q29tcG9zaXRlT3AgPSBDb21wb3NpdGVDbGVhcjsKLSAgICBhcHBseUNvbXBvc2l0ZU9wZXJh
dG9yKENvbXBvc2l0ZVNvdXJjZU92ZXIpOwogfQogCiBHTEVTMkNhbnZhczo6fkdMRVMyQ2FudmFz
KCkKIHsKLSAgICBtX2NvbnRleHQtPmRlbGV0ZUJ1ZmZlcihtX3F1YWRWZXJ0aWNlcyk7Cit9CisK
K3ZvaWQgR0xFUzJDYW52YXM6OmJpbmRGcmFtZWJ1ZmZlcigpCit7CisgICAgbV9kcmF3aW5nQnVm
ZmVyLT5iaW5kKCk7CiB9CiAKIHZvaWQgR0xFUzJDYW52YXM6OmNsZWFyUmVjdChjb25zdCBGbG9h
dFJlY3QmIHJlY3QpCiB7CisgICAgYmluZEZyYW1lYnVmZmVyKCk7CiAgICAgaWYgKG1fc3RhdGUt
Pm1fY3RtLmlzSWRlbnRpdHkoKSkgewotICAgICAgICBtX2NvbnRleHQtPnNjaXNzb3IocmVjdC54
KCksIHJlY3QueSgpLCByZWN0LndpZHRoKCksIHJlY3QuaGVpZ2h0KCkpOworICAgICAgICBtX2Nv
bnRleHQtPnNjaXNzb3IocmVjdCk7CiAgICAgICAgIG1fY29udGV4dC0+ZW5hYmxlKEdyYXBoaWNz
Q29udGV4dDNEOjpTQ0lTU09SX1RFU1QpOworICAgICAgICBtX2NvbnRleHQtPmNsZWFyQ29sb3Io
Q29sb3IoUkdCQTMyKDApKSk7CiAgICAgICAgIG1fY29udGV4dC0+Y2xlYXIoR3JhcGhpY3NDb250
ZXh0M0Q6OkNPTE9SX0JVRkZFUl9CSVQpOwogICAgICAgICBtX2NvbnRleHQtPmRpc2FibGUoR3Jh
cGhpY3NDb250ZXh0M0Q6OlNDSVNTT1JfVEVTVCk7CiAgICAgfSBlbHNlIHsKQEAgLTEwNCwxNiAr
MTA0LDE3IEBAIHZvaWQgR0xFUzJDYW52YXM6OmNsZWFyUmVjdChjb25zdCBGbG9hdFJlY3QmIHJl
Y3QpCiAKIHZvaWQgR0xFUzJDYW52YXM6OmZpbGxSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwg
Y29uc3QgQ29sb3ImIGNvbG9yLCBDb2xvclNwYWNlIGNvbG9yU3BhY2UpCiB7Ci0gICAgYXBwbHlD
b21wb3NpdGVPcGVyYXRvcihtX3N0YXRlLT5tX2NvbXBvc2l0ZU9wKTsKLQotICAgIG1fY29udGV4
dC0+YmluZEJ1ZmZlcihHcmFwaGljc0NvbnRleHQzRDo6QVJSQVlfQlVGRkVSLCBnZXRRdWFkVmVy
dGljZXMoKSk7CisgICAgbV9jb250ZXh0LT5hcHBseUNvbXBvc2l0ZU9wZXJhdG9yKG1fc3RhdGUt
Pm1fY29tcG9zaXRlT3ApOworICAgIG1fY29udGV4dC0+dXNlUXVhZFZlcnRpY2VzKCk7CiAKICAg
ICBBZmZpbmVUcmFuc2Zvcm0gbWF0cml4KG1fZmxpcE1hdHJpeCk7CiAgICAgbWF0cml4Lm11bHRM
ZWZ0KG1fc3RhdGUtPm1fY3RtKTsKICAgICBtYXRyaXgudHJhbnNsYXRlKHJlY3QueCgpLCByZWN0
LnkoKSk7CiAgICAgbWF0cml4LnNjYWxlKHJlY3Qud2lkdGgoKSwgcmVjdC5oZWlnaHQoKSk7Ci0g
ICAgbV9zb2xpZEZpbGxTaGFkZXItPnVzZShtYXRyaXgsIGNvbG9yKTsKIAorICAgIG1fY29udGV4
dC0+dXNlRmlsbFNvbGlkUHJvZ3JhbShtYXRyaXgsIGNvbG9yKTsKKworICAgIGJpbmRGcmFtZWJ1
ZmZlcigpOwogICAgIG1fY29udGV4dC0+ZHJhd0FycmF5cyhHcmFwaGljc0NvbnRleHQzRDo6VFJJ
QU5HTEVfU1RSSVAsIDAsIDQpOwogfQogCkBAIC0xNjUsMjEgKzE2NiwzMyBAQCB2b2lkIEdMRVMy
Q2FudmFzOjpyZXN0b3JlKCkKICAgICBtX3N0YXRlID0gJm1fc3RhdGVTdGFjay5sYXN0KCk7CiB9
CiAKK3ZvaWQgR0xFUzJDYW52YXM6OmRyYXdUZXh0dXJlZFJlY3QodW5zaWduZWQgdGV4dHVyZSwg
Y29uc3QgSW50U2l6ZSYgdGV4dHVyZVNpemUsIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCwgY29u
c3QgRmxvYXRSZWN0JiBkc3RSZWN0LCBDb2xvclNwYWNlIGNvbG9yU3BhY2UsIENvbXBvc2l0ZU9w
ZXJhdG9yIGNvbXBvc2l0ZU9wKQoreworICAgIG1fY29udGV4dC0+YXBwbHlDb21wb3NpdGVPcGVy
YXRvcihjb21wb3NpdGVPcCk7CisKKyAgICBtX2NvbnRleHQtPnVzZVF1YWRWZXJ0aWNlcygpOwor
ICAgIG1fY29udGV4dC0+c2V0QWN0aXZlVGV4dHVyZShHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVS
RTApOworCisgICAgbV9jb250ZXh0LT5iaW5kVGV4dHVyZShHcmFwaGljc0NvbnRleHQzRDo6VEVY
VFVSRV8yRCwgdGV4dHVyZSk7CisKKyAgICBkcmF3UXVhZCh0ZXh0dXJlU2l6ZSwgc3JjUmVjdCwg
ZHN0UmVjdCwgbV9zdGF0ZS0+bV9jdG0sIG1fc3RhdGUtPm1fYWxwaGEpOworfQorCiB2b2lkIEdM
RVMyQ2FudmFzOjpkcmF3VGV4dHVyZWRSZWN0KFRleHR1cmUqIHRleHR1cmUsIGNvbnN0IEZsb2F0
UmVjdCYgc3JjUmVjdCwgY29uc3QgRmxvYXRSZWN0JiBkc3RSZWN0LCBDb2xvclNwYWNlIGNvbG9y
U3BhY2UsIENvbXBvc2l0ZU9wZXJhdG9yIGNvbXBvc2l0ZU9wKQogewogICAgIGRyYXdUZXh0dXJl
ZFJlY3QodGV4dHVyZSwgc3JjUmVjdCwgZHN0UmVjdCwgbV9zdGF0ZS0+bV9jdG0sIG1fc3RhdGUt
Pm1fYWxwaGEsIGNvbG9yU3BhY2UsIGNvbXBvc2l0ZU9wKTsKIH0KIAorCiB2b2lkIEdMRVMyQ2Fu
dmFzOjpkcmF3VGV4dHVyZWRSZWN0KFRleHR1cmUqIHRleHR1cmUsIGNvbnN0IEZsb2F0UmVjdCYg
c3JjUmVjdCwgY29uc3QgRmxvYXRSZWN0JiBkc3RSZWN0LCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0m
IHRyYW5zZm9ybSwgZmxvYXQgYWxwaGEsIENvbG9yU3BhY2UgY29sb3JTcGFjZSwgQ29tcG9zaXRl
T3BlcmF0b3IgY29tcG9zaXRlT3ApCiB7Ci0gICAgYXBwbHlDb21wb3NpdGVPcGVyYXRvcihjb21w
b3NpdGVPcCk7Ci0KLSAgICBtX2NvbnRleHQtPmJpbmRCdWZmZXIoR3JhcGhpY3NDb250ZXh0M0Q6
OkFSUkFZX0JVRkZFUiwgZ2V0UXVhZFZlcnRpY2VzKCkpOwotICAgIGNoZWNrR0xFcnJvcigiZ2xC
aW5kQnVmZmVyIik7Ci0KKyAgICBtX2NvbnRleHQtPmFwcGx5Q29tcG9zaXRlT3BlcmF0b3IoY29t
cG9zaXRlT3ApOwogICAgIGNvbnN0IFRpbGluZ0RhdGEmIHRpbGVzID0gdGV4dHVyZS0+dGlsZXMo
KTsKICAgICBJbnRSZWN0IHRpbGVJZHhSZWN0ID0gdGlsZXMub3ZlcmxhcHBlZFRpbGVJbmRpY2Vz
KHNyY1JlY3QpOwogCisgICAgbV9jb250ZXh0LT51c2VRdWFkVmVydGljZXMoKTsKKyAgICBtX2Nv
bnRleHQtPnNldEFjdGl2ZVRleHR1cmUoR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkUwKTsKKwog
ICAgIGZvciAoaW50IHkgPSB0aWxlSWR4UmVjdC55KCk7IHkgPD0gdGlsZUlkeFJlY3QuYm90dG9t
KCk7IHkrKykgewogICAgICAgICBmb3IgKGludCB4ID0gdGlsZUlkeFJlY3QueCgpOyB4IDw9IHRp
bGVJZHhSZWN0LnJpZ2h0KCk7IHgrKykKICAgICAgICAgICAgIGRyYXdUZXh0dXJlZFJlY3RUaWxl
KHRleHR1cmUsIHRpbGVzLnRpbGVJbmRleCh4LCB5KSwgc3JjUmVjdCwgZHN0UmVjdCwgdHJhbnNm
b3JtLCBhbHBoYSk7CkBAIC0xOTMsNyArMjA2LDYgQEAgdm9pZCBHTEVTMkNhbnZhczo6ZHJhd1Rl
eHR1cmVkUmVjdFRpbGUoVGV4dHVyZSogdGV4dHVyZSwgaW50IHRpbGUsIGNvbnN0IEZsb2F0UmUK
IAogICAgIGNvbnN0IFRpbGluZ0RhdGEmIHRpbGVzID0gdGV4dHVyZS0+dGlsZXMoKTsKIAotICAg
IG1fY29udGV4dC0+YWN0aXZlVGV4dHVyZShHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRTApOwog
ICAgIHRleHR1cmUtPmJpbmRUaWxlKHRpbGUpOwogCiAgICAgRmxvYXRSZWN0IHNyY1JlY3RDbGlw
cGVkSW5UaWxlU3BhY2U7CkBAIC0yMDIsMTggKzIxNCwyNCBAQCB2b2lkIEdMRVMyQ2FudmFzOjpk
cmF3VGV4dHVyZWRSZWN0VGlsZShUZXh0dXJlKiB0ZXh0dXJlLCBpbnQgdGlsZSwgY29uc3QgRmxv
YXRSZQogCiAgICAgSW50UmVjdCB0aWxlQm91bmRzV2l0aEJvcmRlciA9IHRpbGVzLnRpbGVCb3Vu
ZHNXaXRoQm9yZGVyKHRpbGUpOwogCisgICAgZHJhd1F1YWQodGlsZUJvdW5kc1dpdGhCb3JkZXIu
c2l6ZSgpLCBzcmNSZWN0Q2xpcHBlZEluVGlsZVNwYWNlLCBkc3RSZWN0SW50ZXJzZWN0ZWQsIHRy
YW5zZm9ybSwgYWxwaGEpOworfQorCit2b2lkIEdMRVMyQ2FudmFzOjpkcmF3UXVhZChjb25zdCBJ
bnRTaXplJiB0ZXh0dXJlU2l6ZSwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBjb25zdCBGbG9h
dFJlY3QmIGRzdFJlY3QsIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgdHJhbnNmb3JtLCBmbG9hdCBh
bHBoYSkKK3sKICAgICBBZmZpbmVUcmFuc2Zvcm0gbWF0cml4KG1fZmxpcE1hdHJpeCk7CiAgICAg
bWF0cml4Lm11bHRMZWZ0KHRyYW5zZm9ybSk7Ci0gICAgbWF0cml4LnRyYW5zbGF0ZShkc3RSZWN0
SW50ZXJzZWN0ZWQueCgpLCBkc3RSZWN0SW50ZXJzZWN0ZWQueSgpKTsKLSAgICBtYXRyaXguc2Nh
bGUoZHN0UmVjdEludGVyc2VjdGVkLndpZHRoKCksIGRzdFJlY3RJbnRlcnNlY3RlZC5oZWlnaHQo
KSk7CisgICAgbWF0cml4LnRyYW5zbGF0ZShkc3RSZWN0LngoKSwgZHN0UmVjdC55KCkpOworICAg
IG1hdHJpeC5zY2FsZShkc3RSZWN0LndpZHRoKCksIGRzdFJlY3QuaGVpZ2h0KCkpOwogCiAgICAg
QWZmaW5lVHJhbnNmb3JtIHRleE1hdHJpeDsKLSAgICB0ZXhNYXRyaXguc2NhbGUoMS4wZiAvIHRp
bGVCb3VuZHNXaXRoQm9yZGVyLndpZHRoKCksIDEuMGYgLyB0aWxlQm91bmRzV2l0aEJvcmRlci5o
ZWlnaHQoKSk7Ci0gICAgdGV4TWF0cml4LnRyYW5zbGF0ZShzcmNSZWN0Q2xpcHBlZEluVGlsZVNw
YWNlLngoKSwgc3JjUmVjdENsaXBwZWRJblRpbGVTcGFjZS55KCkpOwotICAgIHRleE1hdHJpeC5z
Y2FsZShzcmNSZWN0Q2xpcHBlZEluVGlsZVNwYWNlLndpZHRoKCksIHNyY1JlY3RDbGlwcGVkSW5U
aWxlU3BhY2UuaGVpZ2h0KCkpOworICAgIHRleE1hdHJpeC5zY2FsZSgxLjBmIC8gdGV4dHVyZVNp
emUud2lkdGgoKSwgMS4wZiAvIHRleHR1cmVTaXplLmhlaWdodCgpKTsKKyAgICB0ZXhNYXRyaXgu
dHJhbnNsYXRlKHNyY1JlY3QueCgpLCBzcmNSZWN0LnkoKSk7CisgICAgdGV4TWF0cml4LnNjYWxl
KHNyY1JlY3Qud2lkdGgoKSwgc3JjUmVjdC5oZWlnaHQoKSk7CiAKLSAgICBtX3RleFNoYWRlci0+
dXNlKG1hdHJpeCwgdGV4TWF0cml4LCAwLCBhbHBoYSk7CisgICAgYmluZEZyYW1lYnVmZmVyKCk7
CiAKKyAgICBtX2NvbnRleHQtPnVzZVRleHR1cmVQcm9ncmFtKG1hdHJpeCwgdGV4TWF0cml4LCBh
bHBoYSk7CiAgICAgbV9jb250ZXh0LT5kcmF3QXJyYXlzKEdyYXBoaWNzQ29udGV4dDNEOjpUUklB
TkdMRV9TVFJJUCwgMCwgNCk7CiAgICAgY2hlY2tHTEVycm9yKCJnbERyYXdBcnJheXMiKTsKIH0K
QEAgLTIyMyw5OCArMjQxLDE0IEBAIHZvaWQgR0xFUzJDYW52YXM6OnNldENvbXBvc2l0ZU9wZXJh
dGlvbihDb21wb3NpdGVPcGVyYXRvciBvcCkKICAgICBtX3N0YXRlLT5tX2NvbXBvc2l0ZU9wID0g
b3A7CiB9CiAKLXZvaWQgR0xFUzJDYW52YXM6OmFwcGx5Q29tcG9zaXRlT3BlcmF0b3IoQ29tcG9z
aXRlT3BlcmF0b3Igb3ApCi17Ci0gICAgaWYgKG9wID09IG1fbGFzdENvbXBvc2l0ZU9wKQotICAg
ICAgICByZXR1cm47Ci0KLSAgICBzd2l0Y2ggKG9wKSB7Ci0gICAgY2FzZSBDb21wb3NpdGVDbGVh
cjoKLSAgICAgICAgbV9jb250ZXh0LT5lbmFibGUoR3JhcGhpY3NDb250ZXh0M0Q6OkJMRU5EKTsK
LSAgICAgICAgbV9jb250ZXh0LT5ibGVuZEZ1bmMoR3JhcGhpY3NDb250ZXh0M0Q6OlpFUk8sIEdy
YXBoaWNzQ29udGV4dDNEOjpaRVJPKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBDb21wb3Np
dGVDb3B5OgotICAgICAgICBtX2NvbnRleHQtPmRpc2FibGUoR3JhcGhpY3NDb250ZXh0M0Q6OkJM
RU5EKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBDb21wb3NpdGVTb3VyY2VPdmVyOgotICAg
ICAgICBtX2NvbnRleHQtPmVuYWJsZShHcmFwaGljc0NvbnRleHQzRDo6QkxFTkQpOwotICAgICAg
ICBtX2NvbnRleHQtPmJsZW5kRnVuYyhHcmFwaGljc0NvbnRleHQzRDo6T05FLCBHcmFwaGljc0Nv
bnRleHQzRDo6T05FX01JTlVTX1NSQ19BTFBIQSk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2Ug
Q29tcG9zaXRlU291cmNlSW46Ci0gICAgICAgIG1fY29udGV4dC0+ZW5hYmxlKEdyYXBoaWNzQ29u
dGV4dDNEOjpCTEVORCk7Ci0gICAgICAgIG1fY29udGV4dC0+YmxlbmRGdW5jKEdyYXBoaWNzQ29u
dGV4dDNEOjpEU1RfQUxQSEEsIEdyYXBoaWNzQ29udGV4dDNEOjpaRVJPKTsKLSAgICAgICAgYnJl
YWs7Ci0gICAgY2FzZSBDb21wb3NpdGVTb3VyY2VPdXQ6Ci0gICAgICAgIG1fY29udGV4dC0+ZW5h
YmxlKEdyYXBoaWNzQ29udGV4dDNEOjpCTEVORCk7Ci0gICAgICAgIG1fY29udGV4dC0+YmxlbmRG
dW5jKEdyYXBoaWNzQ29udGV4dDNEOjpPTkVfTUlOVVNfRFNUX0FMUEhBLCBHcmFwaGljc0NvbnRl
eHQzRDo6WkVSTyk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgQ29tcG9zaXRlU291cmNlQXRv
cDoKLSAgICAgICAgbV9jb250ZXh0LT5lbmFibGUoR3JhcGhpY3NDb250ZXh0M0Q6OkJMRU5EKTsK
LSAgICAgICAgbV9jb250ZXh0LT5ibGVuZEZ1bmMoR3JhcGhpY3NDb250ZXh0M0Q6OkRTVF9BTFBI
QSwgR3JhcGhpY3NDb250ZXh0M0Q6Ok9ORV9NSU5VU19TUkNfQUxQSEEpOwotICAgICAgICBicmVh
azsKLSAgICBjYXNlIENvbXBvc2l0ZURlc3RpbmF0aW9uT3ZlcjoKLSAgICAgICAgbV9jb250ZXh0
LT5lbmFibGUoR3JhcGhpY3NDb250ZXh0M0Q6OkJMRU5EKTsKLSAgICAgICAgbV9jb250ZXh0LT5i
bGVuZEZ1bmMoR3JhcGhpY3NDb250ZXh0M0Q6Ok9ORV9NSU5VU19EU1RfQUxQSEEsIEdyYXBoaWNz
Q29udGV4dDNEOjpPTkUpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIENvbXBvc2l0ZURlc3Rp
bmF0aW9uSW46Ci0gICAgICAgIG1fY29udGV4dC0+ZW5hYmxlKEdyYXBoaWNzQ29udGV4dDNEOjpC
TEVORCk7Ci0gICAgICAgIG1fY29udGV4dC0+YmxlbmRGdW5jKEdyYXBoaWNzQ29udGV4dDNEOjpa
RVJPLCBHcmFwaGljc0NvbnRleHQzRDo6U1JDX0FMUEhBKTsKLSAgICAgICAgYnJlYWs7Ci0gICAg
Y2FzZSBDb21wb3NpdGVEZXN0aW5hdGlvbk91dDoKLSAgICAgICAgbV9jb250ZXh0LT5lbmFibGUo
R3JhcGhpY3NDb250ZXh0M0Q6OkJMRU5EKTsKLSAgICAgICAgbV9jb250ZXh0LT5ibGVuZEZ1bmMo
R3JhcGhpY3NDb250ZXh0M0Q6OlpFUk8sIEdyYXBoaWNzQ29udGV4dDNEOjpPTkVfTUlOVVNfU1JD
X0FMUEhBKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBDb21wb3NpdGVEZXN0aW5hdGlvbkF0
b3A6Ci0gICAgICAgIG1fY29udGV4dC0+ZW5hYmxlKEdyYXBoaWNzQ29udGV4dDNEOjpCTEVORCk7
Ci0gICAgICAgIG1fY29udGV4dC0+YmxlbmRGdW5jKEdyYXBoaWNzQ29udGV4dDNEOjpPTkVfTUlO
VVNfRFNUX0FMUEhBLCBHcmFwaGljc0NvbnRleHQzRDo6U1JDX0FMUEhBKTsKLSAgICAgICAgYnJl
YWs7Ci0gICAgY2FzZSBDb21wb3NpdGVYT1I6Ci0gICAgICAgIG1fY29udGV4dC0+ZW5hYmxlKEdy
YXBoaWNzQ29udGV4dDNEOjpCTEVORCk7Ci0gICAgICAgIG1fY29udGV4dC0+YmxlbmRGdW5jKEdy
YXBoaWNzQ29udGV4dDNEOjpPTkVfTUlOVVNfRFNUX0FMUEhBLCBHcmFwaGljc0NvbnRleHQzRDo6
T05FX01JTlVTX1NSQ19BTFBIQSk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgQ29tcG9zaXRl
UGx1c0RhcmtlcjoKLSAgICBjYXNlIENvbXBvc2l0ZUhpZ2hsaWdodDoKLSAgICAgICAgLy8gdW5z
dXBwb3J0ZWQKLSAgICAgICAgbV9jb250ZXh0LT5kaXNhYmxlKEdyYXBoaWNzQ29udGV4dDNEOjpC
TEVORCk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgQ29tcG9zaXRlUGx1c0xpZ2h0ZXI6Ci0g
ICAgICAgIG1fY29udGV4dC0+ZW5hYmxlKEdyYXBoaWNzQ29udGV4dDNEOjpCTEVORCk7Ci0gICAg
ICAgIG1fY29udGV4dC0+YmxlbmRGdW5jKEdyYXBoaWNzQ29udGV4dDNEOjpPTkUsIEdyYXBoaWNz
Q29udGV4dDNEOjpPTkUpOwotICAgICAgICBicmVhazsKLSAgICB9Ci0gICAgbV9sYXN0Q29tcG9z
aXRlT3AgPSBvcDsKLX0KLQotdW5zaWduZWQgR0xFUzJDYW52YXM6OmdldFF1YWRWZXJ0aWNlcygp
Ci17Ci0gICAgaWYgKCFtX3F1YWRWZXJ0aWNlcykgewotICAgICAgICBmbG9hdCB2ZXJ0aWNlc1td
ID0geyAwLjBmLCAwLjBmLCAxLjBmLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxLjBm
LCAwLjBmLCAxLjBmLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwLjBmLCAxLjBmLCAx
LjBmLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxLjBmLCAxLjBmLCAxLjBmIH07Ci0g
ICAgICAgIG1fcXVhZFZlcnRpY2VzID0gbV9jb250ZXh0LT5jcmVhdGVCdWZmZXIoKTsKLSAgICAg
ICAgbV9jb250ZXh0LT5iaW5kQnVmZmVyKEdyYXBoaWNzQ29udGV4dDNEOjpBUlJBWV9CVUZGRVIs
IG1fcXVhZFZlcnRpY2VzKTsKLSAgICAgICAgbV9jb250ZXh0LT5idWZmZXJEYXRhKEdyYXBoaWNz
Q29udGV4dDNEOjpBUlJBWV9CVUZGRVIsIHNpemVvZih2ZXJ0aWNlcyksIHZlcnRpY2VzLCBHcmFw
aGljc0NvbnRleHQzRDo6U1RBVElDX0RSQVcpOwotICAgIH0KLSAgICByZXR1cm4gbV9xdWFkVmVy
dGljZXM7Ci19Ci0KIFRleHR1cmUqIEdMRVMyQ2FudmFzOjpjcmVhdGVUZXh0dXJlKE5hdGl2ZUlt
YWdlUHRyIHB0ciwgVGV4dHVyZTo6Rm9ybWF0IGZvcm1hdCwgaW50IHdpZHRoLCBpbnQgaGVpZ2h0
KQogewotICAgIFBhc3NSZWZQdHI8VGV4dHVyZT4gdGV4dHVyZSA9IG1fdGV4dHVyZXMuZ2V0KHB0
cik7Ci0gICAgaWYgKHRleHR1cmUpCi0gICAgICAgIHJldHVybiB0ZXh0dXJlLmdldCgpOwotCi0g
ICAgdGV4dHVyZSA9IFRleHR1cmU6OmNyZWF0ZShtX2NvbnRleHQsIGZvcm1hdCwgd2lkdGgsIGhl
aWdodCk7Ci0gICAgVGV4dHVyZSogdCA9IHRleHR1cmUuZ2V0KCk7Ci0gICAgbV90ZXh0dXJlcy5z
ZXQocHRyLCB0ZXh0dXJlKTsKLSAgICByZXR1cm4gdDsKKyAgICByZXR1cm4gbV9jb250ZXh0LT5j
cmVhdGVUZXh0dXJlKHB0ciwgZm9ybWF0LCB3aWR0aCwgaGVpZ2h0KTsKIH0KIAogVGV4dHVyZSog
R0xFUzJDYW52YXM6OmdldFRleHR1cmUoTmF0aXZlSW1hZ2VQdHIgcHRyKQogewotICAgIFBhc3NS
ZWZQdHI8VGV4dHVyZT4gdGV4dHVyZSA9IG1fdGV4dHVyZXMuZ2V0KHB0cik7Ci0gICAgcmV0dXJu
IHRleHR1cmUgPyB0ZXh0dXJlLmdldCgpIDogMDsKKyAgICByZXR1cm4gbV9jb250ZXh0LT5nZXRU
ZXh0dXJlKHB0cik7CiB9CiAKIHZvaWQgR0xFUzJDYW52YXM6OmNoZWNrR0xFcnJvcihjb25zdCBj
aGFyKiBoZWFkZXIpCmRpZmYgLS1naXQgYS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9t
aXVtL0dMRVMyQ2FudmFzLmggYi9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0dM
RVMyQ2FudmFzLmgKaW5kZXggZjQ5YWM4YmExOGQxZDM0MjM0YjhkMDYyNzhlNzAyOGJmZTk2OTdl
MS4uNmZjMWEwZTY5ZGNmMmM5ODdmOTUwMzE2MTQ3MWRlY2U0NjM5OTYxMyAxMDA2NDQKLS0tIGEv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9HTEVTMkNhbnZhcy5oCisrKyBiL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vR0xFUzJDYW52YXMuaApAQCAtNDUsMTYg
KzQ1LDE0IEBACiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNzIENvbG9yOworY2xhc3MgRHJh
d2luZ0J1ZmZlcjsKIGNsYXNzIEZsb2F0UmVjdDsKIGNsYXNzIEdyYXBoaWNzQ29udGV4dDNEOwot
Y2xhc3MgU29saWRGaWxsU2hhZGVyOwotY2xhc3MgVGV4U2hhZGVyOwotCi10eXBlZGVmIEhhc2hN
YXA8TmF0aXZlSW1hZ2VQdHIsIFJlZlB0cjxUZXh0dXJlPiA+IFRleHR1cmVIYXNoTWFwOworY2xh
c3MgU2hhcmVkR3JhcGhpY3NDb250ZXh0M0Q7CiAKIGNsYXNzIEdMRVMyQ2FudmFzIDogcHVibGlj
IE5vbmNvcHlhYmxlIHsKIHB1YmxpYzoKLSAgICBHTEVTMkNhbnZhcyhHcmFwaGljc0NvbnRleHQz
RCosIGNvbnN0IEludFNpemUmKTsKKyAgICBHTEVTMkNhbnZhcyhTaGFyZWRHcmFwaGljc0NvbnRl
eHQzRCosIERyYXdpbmdCdWZmZXIqLCBjb25zdCBJbnRTaXplJik7CiAgICAgfkdMRVMyQ2FudmFz
KCk7CiAKICAgICB2b2lkIGZpbGxSZWN0KGNvbnN0IEZsb2F0UmVjdCYsIGNvbnN0IENvbG9yJiwg
Q29sb3JTcGFjZSk7CkBAIC03NCwyOCArNzIsMzMgQEAgcHVibGljOgogICAgIC8vIG5vbi1zdGFu
ZGFyZCBmdW5jdGlvbnMKICAgICAvLyBUaGVzZSBhcmUgbm90IHN0YW5kYXJkIEdyYXBoaWNzQ29u
dGV4dCBmdW5jdGlvbnMsIGFuZCBzaG91bGQgYmUgcHVzaGVkCiAgICAgLy8gZG93biBpbnRvIGEg
UGxhdGZvcm1Db250ZXh0R0xFUzIgYXQgc29tZSBwb2ludC4KKyAgICB2b2lkIGRyYXdUZXh0dXJl
ZFJlY3QodW5zaWduZWQgdGV4dHVyZSwgY29uc3QgSW50U2l6ZSYgdGV4dHVyZVNpemUsIGNvbnN0
IEZsb2F0UmVjdCYgc3JjUmVjdCwgY29uc3QgRmxvYXRSZWN0JiBkc3RSZWN0LCBDb2xvclNwYWNl
LCBDb21wb3NpdGVPcGVyYXRvcik7CiAgICAgdm9pZCBkcmF3VGV4dHVyZWRSZWN0KFRleHR1cmUq
LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsIGNvbnN0IEZsb2F0UmVjdCYgZHN0UmVjdCwgY29u
c3QgQWZmaW5lVHJhbnNmb3JtJiwgZmxvYXQgYWxwaGEsIENvbG9yU3BhY2UsIENvbXBvc2l0ZU9w
ZXJhdG9yKTsKICAgICB2b2lkIGRyYXdUZXh0dXJlZFJlY3QoVGV4dHVyZSosIGNvbnN0IEZsb2F0
UmVjdCYgc3JjUmVjdCwgY29uc3QgRmxvYXRSZWN0JiBkc3RSZWN0LCBDb2xvclNwYWNlLCBDb21w
b3NpdGVPcGVyYXRvcik7Ci0gICAgR3JhcGhpY3NDb250ZXh0M0QqIGNvbnRleHQoKSB7IHJldHVy
biBtX2NvbnRleHQ7IH0KICAgICBUZXh0dXJlKiBjcmVhdGVUZXh0dXJlKE5hdGl2ZUltYWdlUHRy
LCBUZXh0dXJlOjpGb3JtYXQsIGludCB3aWR0aCwgaW50IGhlaWdodCk7CiAgICAgVGV4dHVyZSog
Z2V0VGV4dHVyZShOYXRpdmVJbWFnZVB0cik7CiAKKyAgICBTaGFyZWRHcmFwaGljc0NvbnRleHQz
RCogY29udGV4dCgpIGNvbnN0IHsgcmV0dXJuIG1fY29udGV4dDsgfQorCisgICAgdm9pZCBiaW5k
RnJhbWVidWZmZXIoKTsKKworICAgIERyYXdpbmdCdWZmZXIqIGRyYXdpbmdCdWZmZXIoKSBjb25z
dCB7IHJldHVybiBtX2RyYXdpbmdCdWZmZXI7IH0KKwogcHJpdmF0ZToKICAgICB2b2lkIGRyYXdU
ZXh0dXJlZFJlY3RUaWxlKFRleHR1cmUqIHRleHR1cmUsIGludCB0aWxlLCBjb25zdCBGbG9hdFJl
Y3QmIHNyY1JlY3QsIGNvbnN0IEZsb2F0UmVjdCYgZHN0UmVjdCwgY29uc3QgQWZmaW5lVHJhbnNm
b3JtJiwgZmxvYXQgYWxwaGEpOworICAgIHZvaWQgZHJhd1F1YWQoY29uc3QgSW50U2l6ZSYgdGV4
dHVyZVNpemUsIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCwgY29uc3QgRmxvYXRSZWN0JiBkc3RS
ZWN0LCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mLCBmbG9hdCBhbHBoYSk7CiAgICAgdm9pZCBhcHBs
eUNvbXBvc2l0ZU9wZXJhdG9yKENvbXBvc2l0ZU9wZXJhdG9yKTsKICAgICB2b2lkIGNoZWNrR0xF
cnJvcihjb25zdCBjaGFyKiBoZWFkZXIpOwotICAgIHVuc2lnbmVkIGdldFF1YWRWZXJ0aWNlcygp
OwogCi0gICAgR3JhcGhpY3NDb250ZXh0M0QqIG1fY29udGV4dDsKKyAgICBJbnRTaXplIG1fc2l6
ZTsKKworICAgIFNoYXJlZEdyYXBoaWNzQ29udGV4dDNEKiBtX2NvbnRleHQ7CisgICAgRHJhd2lu
Z0J1ZmZlciogbV9kcmF3aW5nQnVmZmVyOworCiAgICAgc3RydWN0IFN0YXRlOwogICAgIFdURjo6
VmVjdG9yPFN0YXRlPiBtX3N0YXRlU3RhY2s7CiAgICAgU3RhdGUqIG1fc3RhdGU7Ci0gICAgdW5z
aWduZWQgbV9xdWFkVmVydGljZXM7Ci0gICAgT3duUHRyPFNvbGlkRmlsbFNoYWRlcj4gbV9zb2xp
ZEZpbGxTaGFkZXI7Ci0gICAgT3duUHRyPFRleFNoYWRlcj4gbV90ZXhTaGFkZXI7CiAgICAgQWZm
aW5lVHJhbnNmb3JtIG1fZmxpcE1hdHJpeDsKLSAgICBUZXh0dXJlSGFzaE1hcCBtX3RleHR1cmVz
OwotICAgIENvbXBvc2l0ZU9wZXJhdG9yIG1fbGFzdENvbXBvc2l0ZU9wOyAvLyBUaGlzIGlzIHRo
ZSBvbmUgbGFzdCBzZXQsIG5vdCBuZWNlc3NhcmlseSB0aGUgb25lIGluIHRoZSBzdGF0ZSBzdGFj
ay4KIH07CiAKIH0KZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21p
dW0vR3JhcGhpY3NMYXllckNocm9taXVtLmNwcCBiL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2hyb21pdW0vR3JhcGhpY3NMYXllckNocm9taXVtLmNwcAppbmRleCA2NDhlMzVmMWE0NjcyZmMy
NjU0ZTVhNWU5NmNjZTI5ZTY3OTJjMTAxLi45MmNjODkxMTcyZjQ3ZmEzNTgzY2QyYWY4Y2QwMTlm
YzZhZmUyNzA3IDEwMDY0NAotLS0gYS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVt
L0dyYXBoaWNzTGF5ZXJDaHJvbWl1bS5jcHAKKysrIGIvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jaHJvbWl1bS9HcmFwaGljc0xheWVyQ2hyb21pdW0uY3BwCkBAIC00NSw3ICs0NSw5IEBACiAK
ICNpbmNsdWRlICJHcmFwaGljc0xheWVyQ2hyb21pdW0uaCIKIAorI2luY2x1ZGUgIkNhbnZhczJE
TGF5ZXJDaHJvbWl1bS5oIgogI2luY2x1ZGUgIkNvbnRlbnRMYXllckNocm9taXVtLmgiCisjaW5j
bHVkZSAiRHJhd2luZ0J1ZmZlci5oIgogI2luY2x1ZGUgIkZsb2F0Q29udmVyc2lvbi5oIgogI2lu
Y2x1ZGUgIkZsb2F0UmVjdC5oIgogI2luY2x1ZGUgIkltYWdlLmgiCkBAIC0yOTAsNiArMjkyLDcg
QEAgdm9pZCBHcmFwaGljc0xheWVyQ2hyb21pdW06OnNldENvbnRlbnRzTmVlZHNEaXNwbGF5KCkK
ICAgICBpZiAobV9jb250ZW50c0xheWVyKQogICAgICAgICBtX2NvbnRlbnRzTGF5ZXItPnNldE5l
ZWRzRGlzcGxheSgpOwogfQorCiB2b2lkIEdyYXBoaWNzTGF5ZXJDaHJvbWl1bTo6c2V0TmVlZHNE
aXNwbGF5KCkKIHsKICAgICBpZiAoZHJhd3NDb250ZW50KCkpCkBAIC0zNDQsMTMgKzM0NywxMyBA
QCB2b2lkIEdyYXBoaWNzTGF5ZXJDaHJvbWl1bTo6c2V0Q29udGVudHNUb0NhbnZhcyhQbGF0Zm9y
bUxheWVyKiBwbGF0Zm9ybUxheWVyKQogICAgIGJvb2wgY2hpbGRyZW5DaGFuZ2VkID0gZmFsc2U7
CiAgICAgaWYgKHBsYXRmb3JtTGF5ZXIpIHsKICAgICAgICAgcGxhdGZvcm1MYXllci0+c2V0T3du
ZXIodGhpcyk7Ci0gICAgICAgIGlmICghbV9jb250ZW50c0xheWVyLmdldCgpIHx8IG1fY29udGVu
dHNMYXllclB1cnBvc2UgIT0gQ29udGVudHNMYXllckZvckNhbnZhcykgeworICAgICAgICBpZiAo
bV9jb250ZW50c0xheWVyLmdldCgpICE9IHBsYXRmb3JtTGF5ZXIpIHsKICAgICAgICAgICAgIHNl
dHVwQ29udGVudHNMYXllcihwbGF0Zm9ybUxheWVyKTsKICAgICAgICAgICAgIG1fY29udGVudHNM
YXllciA9IHBsYXRmb3JtTGF5ZXI7CiAgICAgICAgICAgICBtX2NvbnRlbnRzTGF5ZXJQdXJwb3Nl
ID0gQ29udGVudHNMYXllckZvckNhbnZhczsKICAgICAgICAgICAgIGNoaWxkcmVuQ2hhbmdlZCA9
IHRydWU7CiAgICAgICAgIH0KLSAgICAgICAgcGxhdGZvcm1MYXllci0+c2V0TmVlZHNEaXNwbGF5
KCk7CisgICAgICAgIG1fY29udGVudHNMYXllci0+c2V0TmVlZHNEaXNwbGF5KCk7CiAgICAgICAg
IHVwZGF0ZUNvbnRlbnRzUmVjdCgpOwogICAgIH0gZWxzZSB7CiAgICAgICAgIGlmIChtX2NvbnRl
bnRzTGF5ZXIpIHsKZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21p
dW0vR3JhcGhpY3NMYXllckNocm9taXVtLmggYi9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2No
cm9taXVtL0dyYXBoaWNzTGF5ZXJDaHJvbWl1bS5oCmluZGV4IDlkZmY2NmEwNzVjYzMwYTU4NDZi
MTQ2YTE2NTE4NDhiNmZlZGFmOTEuLmRkZTQ0M2RkMzQzYmZmOGUxZGMwMDQyNTgyMzcxNWU2OTAy
MWVlODIgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vR3Jh
cGhpY3NMYXllckNocm9taXVtLmgKKysrIGIvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJv
bWl1bS9HcmFwaGljc0xheWVyQ2hyb21pdW0uaApAQCAtMTM4LDcgKzEzOCw3IEBAIHByaXZhdGU6
CiAgICAgICAgIE5vQ29udGVudHNMYXllciA9IDAsCiAgICAgICAgIENvbnRlbnRzTGF5ZXJGb3JJ
bWFnZSwKICAgICAgICAgQ29udGVudHNMYXllckZvclZpZGVvLAotICAgICAgICBDb250ZW50c0xh
eWVyRm9yQ2FudmFzCisgICAgICAgIENvbnRlbnRzTGF5ZXJGb3JDYW52YXMsCiAgICAgfTsKIAog
ICAgIENvbnRlbnRzTGF5ZXJQdXJwb3NlIG1fY29udGVudHNMYXllclB1cnBvc2U7CmRpZmYgLS1n
aXQgYS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyUmVuZGVyZXJDaHJv
bWl1bS5jcHAgYi9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyUmVuZGVy
ZXJDaHJvbWl1bS5jcHAKaW5kZXggNTAzMzhkMmQ1ZjczMjRlNWExMTljNTA5MTkwZGZlZjg2OThi
MTc2OS4uZjQ5MDk3MDg3MTNhYmE0ODlkZmU5OTBlNTg0M2JiYjU2ODk1NjBiMyAxMDA2NDQKLS0t
IGEvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllclJlbmRlcmVyQ2hyb21p
dW0uY3BwCisrKyBiL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJSZW5k
ZXJlckNocm9taXVtLmNwcApAQCAtMzQsMTEgKzM0LDExIEBACiAjaWYgVVNFKEFDQ0VMRVJBVEVE
X0NPTVBPU0lUSU5HKQogI2luY2x1ZGUgIkxheWVyUmVuZGVyZXJDaHJvbWl1bS5oIgogCi0jaW5j
bHVkZSAiQ2FudmFzTGF5ZXJDaHJvbWl1bS5oIgotI2luY2x1ZGUgIkNvbnRlbnRMYXllckNocm9t
aXVtLmgiCisjaW5jbHVkZSAiQ2FudmFzMkRMYXllckNocm9taXVtLmgiCiAjaW5jbHVkZSAiR0xF
UzJDb250ZXh0LmgiCiAjaW5jbHVkZSAiTGF5ZXJDaHJvbWl1bS5oIgogI2luY2x1ZGUgIk5vdElt
cGxlbWVudGVkLmgiCisjaW5jbHVkZSAiV2ViR0xMYXllckNocm9taXVtLmgiCiAjaWYgUExBVEZP
Uk0oU0tJQSkKICNpbmNsdWRlICJOYXRpdmVJbWFnZVNraWEuaCIKICNpbmNsdWRlICJQbGF0Zm9y
bUNvbnRleHRTa2lhLmgiCmRpZmYgLS1naXQgYS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2No
cm9taXVtL1dlYkdMTGF5ZXJDaHJvbWl1bS5jcHAgYi9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2Nocm9taXVtL1dlYkdMTGF5ZXJDaHJvbWl1bS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNDExZjQxNjJiOTE0
OTQ5Nzk0NzFiOTBkZWM2NjAxYzljNjk0OGRiNgotLS0gL2Rldi9udWxsCisrKyBiL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vV2ViR0xMYXllckNocm9taXVtLmNwcApAQCAtMCww
ICsxLDg1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEwIEdvb2dsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisgKiBtZXQ6
CisgKgorICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIK
KyAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUKKyAqIGRpc3RyaWJ1dGlvbi4KKyAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2Yg
R29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUg
dXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisgKiB0aGlz
IHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoK
KyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFO
RCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElD
VUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJ
R0hUCisgKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NVUkVN
RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorICogREFU
QSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
CisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorCisjaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBP
U0lUSU5HKQorCisjaW5jbHVkZSAiV2ViR0xMYXllckNocm9taXVtLmgiCisKKyNpbmNsdWRlICJH
cmFwaGljc0NvbnRleHQzRC5oIgorI2luY2x1ZGUgIkxheWVyUmVuZGVyZXJDaHJvbWl1bS5oIgor
I2luY2x1ZGUgPEdMRVMyL2dsMi5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK1Bhc3NSZWZQ
dHI8V2ViR0xMYXllckNocm9taXVtPiBXZWJHTExheWVyQ2hyb21pdW06OmNyZWF0ZShHcmFwaGlj
c0xheWVyQ2hyb21pdW0qIG93bmVyKQoreworICAgIHJldHVybiBhZG9wdFJlZihuZXcgV2ViR0xM
YXllckNocm9taXVtKG93bmVyKSk7Cit9CisKK1dlYkdMTGF5ZXJDaHJvbWl1bTo6V2ViR0xMYXll
ckNocm9taXVtKEdyYXBoaWNzTGF5ZXJDaHJvbWl1bSogb3duZXIpCisgICAgOiBDYW52YXNMYXll
ckNocm9taXVtKG93bmVyKQorICAgICwgbV9jb250ZXh0KDApCit7Cit9CisKK3ZvaWQgV2ViR0xM
YXllckNocm9taXVtOjp1cGRhdGVDb250ZW50cygpCit7CisgICAgQVNTRVJUKG1fY29udGV4dCk7
CisgICAgaWYgKG1fdGV4dHVyZUNoYW5nZWQpIHsKKyAgICAgICAgZ2xCaW5kVGV4dHVyZShHTF9U
RVhUVVJFXzJELCBtX3RleHR1cmVJZCk7CisgICAgICAgIC8vIFNldCB0aGUgbWluLW1hZyBmaWx0
ZXJzIHRvIGxpbmVhciBhbmQgd3JhcCBtb2RlcyB0byBHTF9DTEFNUF9UT19FREdFCisgICAgICAg
IC8vIHRvIGdldCBhcm91bmQgTlBPVCB0ZXh0dXJlIGxpbWl0YXRpb25zIG9mIEdMRVMuCisgICAg
ICAgIGdsVGV4UGFyYW1ldGVyZihHTF9URVhUVVJFXzJELCBHTF9URVhUVVJFX01JTl9GSUxURVIs
IEdMX0xJTkVBUik7CisgICAgICAgIGdsVGV4UGFyYW1ldGVyZihHTF9URVhUVVJFXzJELCBHTF9U
RVhUVVJFX01BR19GSUxURVIsIEdMX0xJTkVBUik7CisgICAgICAgIGdsVGV4UGFyYW1ldGVyZihH
TF9URVhUVVJFXzJELCBHTF9URVhUVVJFX1dSQVBfUywgR0xfQ0xBTVBfVE9fRURHRSk7CisgICAg
ICAgIGdsVGV4UGFyYW1ldGVyZihHTF9URVhUVVJFXzJELCBHTF9URVhUVVJFX1dSQVBfVCwgR0xf
Q0xBTVBfVE9fRURHRSk7CisgICAgICAgIG1fdGV4dHVyZUNoYW5nZWQgPSBmYWxzZTsKKyAgICB9
CisgICAgLy8gVXBkYXRlIHRoZSBjb250ZW50cyBvZiB0aGUgdGV4dHVyZSB1c2VkIGJ5IHRoZSBj
b21wb3NpdG9yLgorICAgIGlmIChtX2NvbnRlbnRzRGlydHkpIHsKKyAgICAgICAgbV9jb250ZXh0
LT5wcmVwYXJlVGV4dHVyZSgpOworICAgICAgICBtX2NvbnRlbnRzRGlydHkgPSBmYWxzZTsKKyAg
ICB9Cit9CisKK3ZvaWQgV2ViR0xMYXllckNocm9taXVtOjpzZXRDb250ZXh0KGNvbnN0IEdyYXBo
aWNzQ29udGV4dDNEKiBjb250ZXh0KQoreworICAgIG1fY29udGV4dCA9IGNvbnN0X2Nhc3Q8R3Jh
cGhpY3NDb250ZXh0M0QqPihjb250ZXh0KTsKKworICAgIHVuc2lnbmVkIGludCB0ZXh0dXJlSWQg
PSBtX2NvbnRleHQtPnBsYXRmb3JtVGV4dHVyZSgpOworICAgIGlmICh0ZXh0dXJlSWQgIT0gbV90
ZXh0dXJlSWQpCisgICAgICAgIG1fdGV4dHVyZUNoYW5nZWQgPSB0cnVlOworICAgIG1fdGV4dHVy
ZUlkID0gdGV4dHVyZUlkOworfQorCit9CisjZW5kaWYgLy8gVVNFKEFDQ0VMRVJBVEVEX0NPTVBP
U0lUSU5HKQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9X
ZWJHTExheWVyQ2hyb21pdW0uaCBiL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0v
V2ViR0xMYXllckNocm9taXVtLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMTFiOGRiN2U2MTE3MzBkMGNkNzdkM2Vi
NjgxNDg1MzdlMWFmNGQxYgotLS0gL2Rldi9udWxsCisrKyBiL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY2hyb21pdW0vV2ViR0xMYXllckNocm9taXVtLmgKQEAgLTAsMCArMSw2MCBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAxMCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorICogbWV0OgorICoKKyAqICAgICAq
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisgKiBpbiB0aGUgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiBk
aXN0cmlidXRpb24uCisgKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5v
ciB0aGUgbmFtZXMgb2YgaXRzCisgKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3Jz
ZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorICogdGhpcyBzb2Z0d2FyZSB3aXRo
b3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JT
CisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorICogT1dORVIg
T1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7
IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICog
VEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKworI2lm
bmRlZiBXZWJHTExheWVyQ2hyb21pdW1faAorI2RlZmluZSBXZWJHTExheWVyQ2hyb21pdW1faAor
CisjaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQorCisjaW5jbHVkZSAiQ2FudmFzTGF5
ZXJDaHJvbWl1bS5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIEdyYXBoaWNzQ29u
dGV4dDNEOworCisvLyBBIExheWVyIGNvbnRhaW5pbmcgYSBXZWJHTCBjYW52YXMKK2NsYXNzIFdl
YkdMTGF5ZXJDaHJvbWl1bSA6IHB1YmxpYyBDYW52YXNMYXllckNocm9taXVtIHsKK3B1YmxpYzoK
KyAgICBzdGF0aWMgUGFzc1JlZlB0cjxXZWJHTExheWVyQ2hyb21pdW0+IGNyZWF0ZShHcmFwaGlj
c0xheWVyQ2hyb21pdW0qIG93bmVyID0gMCk7CisgICAgdmlydHVhbCBib29sIGRyYXdzQ29udGVu
dCgpIHsgcmV0dXJuIG1fY29udGV4dDsgfQorICAgIHZpcnR1YWwgdm9pZCB1cGRhdGVDb250ZW50
cygpOworCisgICAgdm9pZCBzZXRDb250ZXh0KGNvbnN0IEdyYXBoaWNzQ29udGV4dDNEKiBjb250
ZXh0KTsKKworcHJpdmF0ZToKKyAgICBleHBsaWNpdCBXZWJHTExheWVyQ2hyb21pdW0oR3JhcGhp
Y3NMYXllckNocm9taXVtKiBvd25lcik7CisgICAgR3JhcGhpY3NDb250ZXh0M0QqIG1fY29udGV4
dDsKK307CisKK30KKyNlbmRpZiAvLyBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCisKKyNl
bmRpZgpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ncHUvRHJhd2luZ0J1
ZmZlci5jcHAgYi9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dwdS9EcmF3aW5nQnVmZmVyLmNw
cApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwLi5kYzgwOTU0NmUwOTNlOGIwOThlNDY2MjI2NGYwZThkNWE0YWVkNTgzCi0t
LSAvZGV2L251bGwKKysrIGIvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ncHUvRHJhd2luZ0J1
ZmZlci5jcHAKQEAgLTAsMCArMSw2MCBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAxMCwgR29v
Z2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucyBhcmUKKyAqIG1ldDoKKyAqCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICAgICog
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQor
ICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lcgorICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogZGlzdHJpYnV0aW9uLgorICogICAgICogTmVp
dGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworICogY29u
dHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJp
dmVkIGZyb20KKyAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVu
IHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09Q
WVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQg
VE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5U
IFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBM
QVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorICogTElN
SVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisKKyNpbmNsdWRl
ICJEcmF3aW5nQnVmZmVyLmgiCisKKyNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQzRC5oIgorI2lu
Y2x1ZGUgIlNoYXJlZEdyYXBoaWNzQ29udGV4dDNELmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsK
KworUGFzc093blB0cjxEcmF3aW5nQnVmZmVyPiBEcmF3aW5nQnVmZmVyOjpjcmVhdGUoU2hhcmVk
R3JhcGhpY3NDb250ZXh0M0QqIGNvbnRleHQsIGNvbnN0IEludFNpemUmIHNpemUpCit7CisgICAg
dW5zaWduZWQgZnJhbWVidWZmZXIgPSBjb250ZXh0LT5jcmVhdGVGcmFtZWJ1ZmZlcigpOworICAg
IEFTU0VSVChmcmFtZWJ1ZmZlcik7CisgICAgaWYgKCFmcmFtZWJ1ZmZlcikKKyAgICAgICAgcmV0
dXJuIDA7CisgICAgcmV0dXJuIGFkb3B0UHRyKG5ldyBEcmF3aW5nQnVmZmVyKGNvbnRleHQsIHNp
emUsIGZyYW1lYnVmZmVyKSk7Cit9CisKK3ZvaWQgRHJhd2luZ0J1ZmZlcjo6YmluZCgpCit7Cisg
ICAgbV9jb250ZXh0LT5iaW5kRnJhbWVidWZmZXIobV9mcmFtZWJ1ZmZlcik7CisgICAgbV9jb250
ZXh0LT5zZXRWaWV3cG9ydChtX3NpemUpOworfQorCit2b2lkIERyYXdpbmdCdWZmZXI6OnNldFdp
bGxQdWJsaXNoQ2FsbGJhY2soUGFzc093blB0cjxXaWxsUHVibGlzaENhbGxiYWNrPiBjYWxsYmFj
aykKK3sKKyAgICBtX2NhbGxiYWNrID0gY2FsbGJhY2s7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdl
YkNvcmUKZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3B1L0RyYXdpbmdC
dWZmZXIuaCBiL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3B1L0RyYXdpbmdCdWZmZXIuaApu
ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwLi4xYjQ0ZjRkMjAxNTU4ZDY3YzY4ZTZkZmU2ZmYzYTQ2NWRkMThjMjI4Ci0tLSAv
ZGV2L251bGwKKysrIGIvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ncHUvRHJhd2luZ0J1ZmZl
ci5oCkBAIC0wLDAgKzEsODAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMTAsIEdvb2dsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMg
YXJlCisgKiBtZXQ6CisgKgorICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAgICAqIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqIGNv
cHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIKKyAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqIGRpc3RyaWJ1dGlvbi4KKyAqICAgICAqIE5laXRoZXIg
dGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqIGNvbnRyaWJ1
dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBm
cm9tCisgKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJt
aXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdI
VCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBU
SEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IK
KyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFM
TCBUSEUgQ09QWVJJR0hUCisgKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwg
T1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQg
VE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAq
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBEcmF3aW5nQnVmZmVyX2gKKyNkZWZpbmUgRHJh
d2luZ0J1ZmZlcl9oCisKKyNpbmNsdWRlICJHcmFwaGljc0xheWVyLmgiCisjaW5jbHVkZSAiSW50
U2l6ZS5oIgorCisjaW5jbHVkZSA8d3RmL05vbmNvcHlhYmxlLmg+CisjaW5jbHVkZSA8d3RmL093
blB0ci5oPgorI2luY2x1ZGUgPHd0Zi9QYXNzT3duUHRyLmg+CisKK25hbWVzcGFjZSBXZWJDb3Jl
IHsKKworY2xhc3MgU2hhcmVkR3JhcGhpY3NDb250ZXh0M0Q7CisKK3N0cnVjdCBEcmF3aW5nQnVm
ZmVySW50ZXJuYWw7CisKKy8vIE1hbmFnZXMgYSByZW5kZXJpbmcgdGFyZ2V0IChmcmFtZWJ1ZmZl
ciArIGF0dGFjaG1lbnQpIGZvciBhIGNhbnZhcy4gIENhbiBwdWJsaXNoIGl0cyByZW5kZXJpbmcK
Ky8vIHJlc3VsdHMgdG8gYSBQbGF0Zm9ybUxheWVyIGZvciBjb21wb3NpdGluZy4KK2NsYXNzIERy
YXdpbmdCdWZmZXIgOiBwdWJsaWMgTm9uY29weWFibGUgeworcHVibGljOgorICAgIHN0YXRpYyBQ
YXNzT3duUHRyPERyYXdpbmdCdWZmZXI+IGNyZWF0ZShTaGFyZWRHcmFwaGljc0NvbnRleHQzRCos
IGNvbnN0IEludFNpemUmKTsKKyAgICB+RHJhd2luZ0J1ZmZlcigpOworCisgICAgdm9pZCByZXNl
dChjb25zdCBJbnRTaXplJik7CisgICAgUGxhdGZvcm1MYXllciogcGxhdGZvcm1MYXllcigpOwor
CisgICAgdm9pZCBiaW5kKCk7CisgICAgdm9pZCBwdWJsaXNoVG9QbGF0Zm9ybUxheWVyKCk7Cisg
ICAgSW50U2l6ZSBzaXplKCkgY29uc3QgeyByZXR1cm4gbV9zaXplOyB9CisKKyAgICBjbGFzcyBX
aWxsUHVibGlzaENhbGxiYWNrIDogcHVibGljIE5vbmNvcHlhYmxlIHsKKyAgICBwdWJsaWM6Cisg
ICAgICAgIHZpcnR1YWwgdm9pZCB3aWxsUHVibGlzaCgpID0gMDsKKyAgICB9OworCisgICAgdm9p
ZCBzZXRXaWxsUHVibGlzaENhbGxiYWNrKFBhc3NPd25QdHI8V2lsbFB1Ymxpc2hDYWxsYmFjaz4p
OworcHJpdmF0ZToKKyAgICBEcmF3aW5nQnVmZmVyKFNoYXJlZEdyYXBoaWNzQ29udGV4dDNEKiwg
Y29uc3QgSW50U2l6ZSYsIHVuc2lnbmVkIGZyYW1lYnVmZmVyKTsKKworICAgIFNoYXJlZEdyYXBo
aWNzQ29udGV4dDNEKiBtX2NvbnRleHQ7CisgICAgSW50U2l6ZSBtX3NpemU7CisgICAgdW5zaWdu
ZWQgbV9mcmFtZWJ1ZmZlcjsKKworICAgIE93blB0cjxXaWxsUHVibGlzaENhbGxiYWNrPiBtX2Nh
bGxiYWNrOworICAgIE93blB0cjxEcmF3aW5nQnVmZmVySW50ZXJuYWw+IG1faW50ZXJuYWw7Cit9
OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBEcmF3aW5nQnVmZmVyX2gK
ZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3B1L1NoYXJlZEdyYXBoaWNz
Q29udGV4dDNELmNwcCBiL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3B1L1NoYXJlZEdyYXBo
aWNzQ29udGV4dDNELmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5mYTc1Yjk1MDlmYzI4MzM0MjRmY2Q2MjMxMTQ2
ZTJhMDg5MmJjMmExCi0tLSAvZGV2L251bGwKKysrIGIvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9ncHUvU2hhcmVkR3JhcGhpY3NDb250ZXh0M0QuY3BwCkBAIC0wLDAgKzEsMjk2IEBACisvKgor
ICogQ29weXJpZ2h0IChjKSAyMDEwLCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorICogbWV0OgorICoKKyAqICAgICAq
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisgKiBpbiB0aGUgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiBk
aXN0cmlidXRpb24uCisgKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5v
ciB0aGUgbmFtZXMgb2YgaXRzCisgKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3Jz
ZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorICogdGhpcyBzb2Z0d2FyZSB3aXRo
b3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JT
CisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorICogT1dORVIg
T1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7
IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICog
VEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNs
dWRlICJjb25maWcuaCIKKworI2luY2x1ZGUgIlNoYXJlZEdyYXBoaWNzQ29udGV4dDNELmgiCisK
KyNpbmNsdWRlICJBZmZpbmVUcmFuc2Zvcm0uaCIKKyNpbmNsdWRlICJDb2xvci5oIgorI2luY2x1
ZGUgIkZsb2F0UmVjdC5oIgorI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dDNELmgiCisjaW5jbHVk
ZSAiR3JhcGhpY3NUeXBlcy5oIgorI2luY2x1ZGUgIkludFNpemUuaCIKKyNpbmNsdWRlICJTb2xp
ZEZpbGxTaGFkZXIuaCIKKyNpbmNsdWRlICJUZXhTaGFkZXIuaCIKKworI2luY2x1ZGUgPHd0Zi90
ZXh0L0NTdHJpbmcuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KKworbmFtZXNw
YWNlIFdlYkNvcmUgeworCisvLyBzdGF0aWMKK1Bhc3NSZWZQdHI8U2hhcmVkR3JhcGhpY3NDb250
ZXh0M0Q+IFNoYXJlZEdyYXBoaWNzQ29udGV4dDNEOjpjcmVhdGUoUGFzc093blB0cjxHcmFwaGlj
c0NvbnRleHQzRD4gY29udGV4dCkKK3sKKyAgICByZXR1cm4gYWRvcHRSZWYobmV3IFNoYXJlZEdy
YXBoaWNzQ29udGV4dDNEKGNvbnRleHQpKTsKK30KKworU2hhcmVkR3JhcGhpY3NDb250ZXh0M0Q6
OlNoYXJlZEdyYXBoaWNzQ29udGV4dDNEKFBhc3NPd25QdHI8R3JhcGhpY3NDb250ZXh0M0Q+IGNv
bnRleHQpCisgICAgOiBtX2NvbnRleHQoY29udGV4dCkKKyAgICAsIG1fcXVhZFZlcnRpY2VzKDAp
CisgICAgLCBtX3NvbGlkRmlsbFNoYWRlcihTb2xpZEZpbGxTaGFkZXI6OmNyZWF0ZShtX2NvbnRl
eHQuZ2V0KCkpKQorICAgICwgbV90ZXhTaGFkZXIoVGV4U2hhZGVyOjpjcmVhdGUobV9jb250ZXh0
LmdldCgpKSkKK3sKK30KKworU2hhcmVkR3JhcGhpY3NDb250ZXh0M0Q6On5TaGFyZWRHcmFwaGlj
c0NvbnRleHQzRCgpCit7CisgICAgbV9jb250ZXh0LT5kZWxldGVCdWZmZXIobV9xdWFkVmVydGlj
ZXMpOworfQorCit2b2lkIFNoYXJlZEdyYXBoaWNzQ29udGV4dDNEOjptYWtlQ29udGV4dEN1cnJl
bnQoKQoreworICAgIG1fY29udGV4dC0+bWFrZUNvbnRleHRDdXJyZW50KCk7Cit9CisKK3ZvaWQg
U2hhcmVkR3JhcGhpY3NDb250ZXh0M0Q6OnNjaXNzb3IoY29uc3QgRmxvYXRSZWN0JiByZWN0KQor
eworICAgIG1fY29udGV4dC0+c2Npc3NvcihyZWN0LngoKSwgcmVjdC55KCksIHJlY3Qud2lkdGgo
KSwgcmVjdC5oZWlnaHQoKSk7Cit9CisKK3ZvaWQgU2hhcmVkR3JhcGhpY3NDb250ZXh0M0Q6OmVu
YWJsZSh1bnNpZ25lZCBjYXBhY2l0eSkKK3sKKyAgICBtX2NvbnRleHQtPmVuYWJsZShjYXBhY2l0
eSk7Cit9CisKK3ZvaWQgU2hhcmVkR3JhcGhpY3NDb250ZXh0M0Q6OmRpc2FibGUodW5zaWduZWQg
Y2FwYWNpdHkpCit7CisgICAgbV9jb250ZXh0LT5kaXNhYmxlKGNhcGFjaXR5KTsKK30KKwordm9p
ZCBTaGFyZWRHcmFwaGljc0NvbnRleHQzRDo6Y2xlYXJDb2xvcihjb25zdCBDb2xvciYgY29sb3Ip
Cit7CisgICAgZmxvYXQgcmdiYVs0XTsKKyAgICBjb2xvci5nZXRSR0JBKHJnYmFbMF0sIHJnYmFb
MV0sIHJnYmFbMl0sIHJnYmFbM10pOworICAgIG1fY29udGV4dC0+Y2xlYXJDb2xvcihyZ2JhWzBd
LCByZ2JhWzFdLCByZ2JhWzJdLCByZ2JhWzNdKTsKK30KKwordm9pZCBTaGFyZWRHcmFwaGljc0Nv
bnRleHQzRDo6Y2xlYXIodW5zaWduZWQgbWFzaykKK3sKKyAgICBtX2NvbnRleHQtPmNsZWFyKG1h
c2spOworfQorCit2b2lkIFNoYXJlZEdyYXBoaWNzQ29udGV4dDNEOjpkcmF3QXJyYXlzKHVuc2ln
bmVkIGxvbmcgbW9kZSwgbG9uZyBmaXJzdCwgbG9uZyBjb3VudCkKK3sKKyAgICBtX2NvbnRleHQt
PmRyYXdBcnJheXMobW9kZSwgZmlyc3QsIGNvdW50KTsKK30KKwordW5zaWduZWQgbG9uZyBTaGFy
ZWRHcmFwaGljc0NvbnRleHQzRDo6Z2V0RXJyb3IoKQoreworICAgIHJldHVybiBtX2NvbnRleHQt
PmdldEVycm9yKCk7Cit9CisKK3ZvaWQgU2hhcmVkR3JhcGhpY3NDb250ZXh0M0Q6OmdldEludGVn
ZXJ2KHVuc2lnbmVkIGxvbmcgcG5hbWUsIGludCogdmFsdWUpCit7CisgICAgbV9jb250ZXh0LT5n
ZXRJbnRlZ2VydihwbmFtZSwgdmFsdWUpOworfQorCit1bnNpZ25lZCBTaGFyZWRHcmFwaGljc0Nv
bnRleHQzRDo6Y3JlYXRlRnJhbWVidWZmZXIoKQoreworICAgIHJldHVybiBtX2NvbnRleHQtPmNy
ZWF0ZUZyYW1lYnVmZmVyKCk7Cit9CisKK3Vuc2lnbmVkIFNoYXJlZEdyYXBoaWNzQ29udGV4dDNE
OjpjcmVhdGVUZXh0dXJlKCkKK3sKKyAgICByZXR1cm4gbV9jb250ZXh0LT5jcmVhdGVUZXh0dXJl
KCk7Cit9CisKK3ZvaWQgU2hhcmVkR3JhcGhpY3NDb250ZXh0M0Q6OmRlbGV0ZUZyYW1lYnVmZmVy
KHVuc2lnbmVkIGZyYW1lYnVmZmVyKQoreworICAgIG1fY29udGV4dC0+ZGVsZXRlRnJhbWVidWZm
ZXIoZnJhbWVidWZmZXIpOworfQorCit2b2lkIFNoYXJlZEdyYXBoaWNzQ29udGV4dDNEOjpkZWxl
dGVUZXh0dXJlKHVuc2lnbmVkIHRleHR1cmUpCit7CisgICAgbV9jb250ZXh0LT5kZWxldGVUZXh0
dXJlKHRleHR1cmUpOworfQorCit2b2lkIFNoYXJlZEdyYXBoaWNzQ29udGV4dDNEOjpmcmFtZWJ1
ZmZlclRleHR1cmUyRCh1bnNpZ25lZCBsb25nIHRhcmdldCwgdW5zaWduZWQgbG9uZyBhdHRhY2ht
ZW50LCB1bnNpZ25lZCBsb25nIHRleHRhcmdldCwgdW5zaWduZWQgdGV4dHVyZSwgbG9uZyBsZXZl
bCkKK3sKKyAgICBtX2NvbnRleHQtPmZyYW1lYnVmZmVyVGV4dHVyZTJEKHRhcmdldCwgYXR0YWNo
bWVudCwgdGV4dGFyZ2V0LCB0ZXh0dXJlLCBsZXZlbCk7Cit9CisKK3ZvaWQgU2hhcmVkR3JhcGhp
Y3NDb250ZXh0M0Q6OnRleFBhcmFtZXRlcmkodW5zaWduZWQgdGFyZ2V0LCB1bnNpZ25lZCBwbmFt
ZSwgaW50IHBhcmFtKQoreworICAgIG1fY29udGV4dC0+dGV4UGFyYW1ldGVyaSh0YXJnZXQsIHBu
YW1lLCBwYXJhbSk7Cit9CisKK2ludCBTaGFyZWRHcmFwaGljc0NvbnRleHQzRDo6dGV4SW1hZ2Uy
RCh1bnNpZ25lZCB0YXJnZXQsIHVuc2lnbmVkIGxldmVsLCB1bnNpZ25lZCBpbnRlcm5hbGZvcm1h
dCwgdW5zaWduZWQgd2lkdGgsIHVuc2lnbmVkIGhlaWdodCwgdW5zaWduZWQgYm9yZGVyLCB1bnNp
Z25lZCBmb3JtYXQsIHVuc2lnbmVkIHR5cGUsIHZvaWQqIHBpeGVscykKK3sKKyAgICBtX2NvbnRl
eHQtPnRleEltYWdlMkQodGFyZ2V0LCBsZXZlbCwgaW50ZXJuYWxmb3JtYXQsIHdpZHRoLCBoZWln
aHQsIGJvcmRlciwgZm9ybWF0LCB0eXBlLCBwaXhlbHMpOworfQorCitpbnQgU2hhcmVkR3JhcGhp
Y3NDb250ZXh0M0Q6OnRleFN1YkltYWdlMkQodW5zaWduZWQgdGFyZ2V0LCB1bnNpZ25lZCBsZXZl
bCwgdW5zaWduZWQgeG9mZnNldCwgdW5zaWduZWQgeW9mZnNldCwgdW5zaWduZWQgd2lkdGgsIHVu
c2lnbmVkIGhlaWdodCwgdW5zaWduZWQgZm9ybWF0LCB1bnNpZ25lZCB0eXBlLCB2b2lkKiBwaXhl
bHMpCit7CisgICAgbV9jb250ZXh0LT50ZXhTdWJJbWFnZTJEKHRhcmdldCwgbGV2ZWwsIHhvZmZz
ZXQsIHlvZmZzZXQsIHdpZHRoLCBoZWlnaHQsIGZvcm1hdCwgdHlwZSwgcGl4ZWxzKTsKK30KKwor
dm9pZCBTaGFyZWRHcmFwaGljc0NvbnRleHQzRDo6cmVhZFBpeGVscyhsb25nIHgsIGxvbmcgeSwg
dW5zaWduZWQgbG9uZyB3aWR0aCwgdW5zaWduZWQgbG9uZyBoZWlnaHQsIHVuc2lnbmVkIGxvbmcg
Zm9ybWF0LCB1bnNpZ25lZCBsb25nIHR5cGUsIHZvaWQqIGRhdGEpCit7CisgICAgbV9jb250ZXh0
LT5yZWFkUGl4ZWxzKHgsIHksIHdpZHRoLCBoZWlnaHQsIGZvcm1hdCwgdHlwZSwgZGF0YSk7Cit9
CisKK2Jvb2wgU2hhcmVkR3JhcGhpY3NDb250ZXh0M0Q6OnN1cHBvcnRzQkdSQSgpCit7CisgICAg
cmV0dXJuIG1fY29udGV4dC0+c3VwcG9ydHNCR1JBKCk7Cit9CisKK1RleHR1cmUqIFNoYXJlZEdy
YXBoaWNzQ29udGV4dDNEOjpjcmVhdGVUZXh0dXJlKE5hdGl2ZUltYWdlUHRyIHB0ciwgVGV4dHVy
ZTo6Rm9ybWF0IGZvcm1hdCwgaW50IHdpZHRoLCBpbnQgaGVpZ2h0KQoreworICAgIFJlZlB0cjxU
ZXh0dXJlPiB0ZXh0dXJlID0gbV90ZXh0dXJlcy5nZXQocHRyKTsKKyAgICBpZiAodGV4dHVyZSkK
KyAgICAgICAgcmV0dXJuIHRleHR1cmUuZ2V0KCk7CisKKyAgICB0ZXh0dXJlID0gVGV4dHVyZTo6
Y3JlYXRlKG1fY29udGV4dC5nZXQoKSwgZm9ybWF0LCB3aWR0aCwgaGVpZ2h0KTsKKyAgICBUZXh0
dXJlKiB0ID0gdGV4dHVyZS5nZXQoKTsKKyAgICBtX3RleHR1cmVzLnNldChwdHIsIHRleHR1cmUp
OworICAgIHJldHVybiB0OworfQorCitUZXh0dXJlKiBTaGFyZWRHcmFwaGljc0NvbnRleHQzRDo6
Z2V0VGV4dHVyZShOYXRpdmVJbWFnZVB0ciBwdHIpCit7CisgICAgUmVmUHRyPFRleHR1cmU+IHRl
eHR1cmUgPSBtX3RleHR1cmVzLmdldChwdHIpOworICAgIHJldHVybiB0ZXh0dXJlID8gdGV4dHVy
ZS5nZXQoKSA6IDA7Cit9CisKK1Bhc3NSZWZQdHI8VGV4dHVyZT4gU2hhcmVkR3JhcGhpY3NDb250
ZXh0M0Q6OmNyZWF0ZVRleHR1cmUoVGV4dHVyZTo6Rm9ybWF0IGZvcm1hdCwgaW50IHdpZHRoLCBp
bnQgaGVpZ2h0KQoreworICAgIHJldHVybiBUZXh0dXJlOjpjcmVhdGUobV9jb250ZXh0LmdldCgp
LCBmb3JtYXQsIHdpZHRoLCBoZWlnaHQpOworfQorCit2b2lkIFNoYXJlZEdyYXBoaWNzQ29udGV4
dDNEOjphcHBseUNvbXBvc2l0ZU9wZXJhdG9yKENvbXBvc2l0ZU9wZXJhdG9yIG9wKQoreworICAg
IHN3aXRjaCAob3ApIHsKKyAgICBjYXNlIENvbXBvc2l0ZUNsZWFyOgorICAgICAgICBtX2NvbnRl
eHQtPmVuYWJsZShHcmFwaGljc0NvbnRleHQzRDo6QkxFTkQpOworICAgICAgICBtX2NvbnRleHQt
PmJsZW5kRnVuYyhHcmFwaGljc0NvbnRleHQzRDo6WkVSTywgR3JhcGhpY3NDb250ZXh0M0Q6OlpF
Uk8pOworICAgICAgICBicmVhazsKKyAgICBjYXNlIENvbXBvc2l0ZUNvcHk6CisgICAgICAgIG1f
Y29udGV4dC0+ZGlzYWJsZShHcmFwaGljc0NvbnRleHQzRDo6QkxFTkQpOworICAgICAgICBicmVh
azsKKyAgICBjYXNlIENvbXBvc2l0ZVNvdXJjZU92ZXI6CisgICAgICAgIG1fY29udGV4dC0+ZW5h
YmxlKEdyYXBoaWNzQ29udGV4dDNEOjpCTEVORCk7CisgICAgICAgIG1fY29udGV4dC0+YmxlbmRG
dW5jKEdyYXBoaWNzQ29udGV4dDNEOjpPTkUsIEdyYXBoaWNzQ29udGV4dDNEOjpPTkVfTUlOVVNf
U1JDX0FMUEhBKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBDb21wb3NpdGVTb3VyY2VJbjoK
KyAgICAgICAgbV9jb250ZXh0LT5lbmFibGUoR3JhcGhpY3NDb250ZXh0M0Q6OkJMRU5EKTsKKyAg
ICAgICAgbV9jb250ZXh0LT5ibGVuZEZ1bmMoR3JhcGhpY3NDb250ZXh0M0Q6OkRTVF9BTFBIQSwg
R3JhcGhpY3NDb250ZXh0M0Q6OlpFUk8pOworICAgICAgICBicmVhazsKKyAgICBjYXNlIENvbXBv
c2l0ZVNvdXJjZU91dDoKKyAgICAgICAgbV9jb250ZXh0LT5lbmFibGUoR3JhcGhpY3NDb250ZXh0
M0Q6OkJMRU5EKTsKKyAgICAgICAgbV9jb250ZXh0LT5ibGVuZEZ1bmMoR3JhcGhpY3NDb250ZXh0
M0Q6Ok9ORV9NSU5VU19EU1RfQUxQSEEsIEdyYXBoaWNzQ29udGV4dDNEOjpaRVJPKTsKKyAgICAg
ICAgYnJlYWs7CisgICAgY2FzZSBDb21wb3NpdGVTb3VyY2VBdG9wOgorICAgICAgICBtX2NvbnRl
eHQtPmVuYWJsZShHcmFwaGljc0NvbnRleHQzRDo6QkxFTkQpOworICAgICAgICBtX2NvbnRleHQt
PmJsZW5kRnVuYyhHcmFwaGljc0NvbnRleHQzRDo6RFNUX0FMUEhBLCBHcmFwaGljc0NvbnRleHQz
RDo6T05FX01JTlVTX1NSQ19BTFBIQSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgQ29tcG9z
aXRlRGVzdGluYXRpb25PdmVyOgorICAgICAgICBtX2NvbnRleHQtPmVuYWJsZShHcmFwaGljc0Nv
bnRleHQzRDo6QkxFTkQpOworICAgICAgICBtX2NvbnRleHQtPmJsZW5kRnVuYyhHcmFwaGljc0Nv
bnRleHQzRDo6T05FX01JTlVTX0RTVF9BTFBIQSwgR3JhcGhpY3NDb250ZXh0M0Q6Ok9ORSk7Cisg
ICAgICAgIGJyZWFrOworICAgIGNhc2UgQ29tcG9zaXRlRGVzdGluYXRpb25JbjoKKyAgICAgICAg
bV9jb250ZXh0LT5lbmFibGUoR3JhcGhpY3NDb250ZXh0M0Q6OkJMRU5EKTsKKyAgICAgICAgbV9j
b250ZXh0LT5ibGVuZEZ1bmMoR3JhcGhpY3NDb250ZXh0M0Q6OlpFUk8sIEdyYXBoaWNzQ29udGV4
dDNEOjpTUkNfQUxQSEEpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIENvbXBvc2l0ZURlc3Rp
bmF0aW9uT3V0OgorICAgICAgICBtX2NvbnRleHQtPmVuYWJsZShHcmFwaGljc0NvbnRleHQzRDo6
QkxFTkQpOworICAgICAgICBtX2NvbnRleHQtPmJsZW5kRnVuYyhHcmFwaGljc0NvbnRleHQzRDo6
WkVSTywgR3JhcGhpY3NDb250ZXh0M0Q6Ok9ORV9NSU5VU19TUkNfQUxQSEEpOworICAgICAgICBi
cmVhazsKKyAgICBjYXNlIENvbXBvc2l0ZURlc3RpbmF0aW9uQXRvcDoKKyAgICAgICAgbV9jb250
ZXh0LT5lbmFibGUoR3JhcGhpY3NDb250ZXh0M0Q6OkJMRU5EKTsKKyAgICAgICAgbV9jb250ZXh0
LT5ibGVuZEZ1bmMoR3JhcGhpY3NDb250ZXh0M0Q6Ok9ORV9NSU5VU19EU1RfQUxQSEEsIEdyYXBo
aWNzQ29udGV4dDNEOjpTUkNfQUxQSEEpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIENvbXBv
c2l0ZVhPUjoKKyAgICAgICAgbV9jb250ZXh0LT5lbmFibGUoR3JhcGhpY3NDb250ZXh0M0Q6OkJM
RU5EKTsKKyAgICAgICAgbV9jb250ZXh0LT5ibGVuZEZ1bmMoR3JhcGhpY3NDb250ZXh0M0Q6Ok9O
RV9NSU5VU19EU1RfQUxQSEEsIEdyYXBoaWNzQ29udGV4dDNEOjpPTkVfTUlOVVNfU1JDX0FMUEhB
KTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBDb21wb3NpdGVQbHVzRGFya2VyOgorICAgIGNh
c2UgQ29tcG9zaXRlSGlnaGxpZ2h0OgorICAgICAgICAvLyB1bnN1cHBvcnRlZAorICAgICAgICBt
X2NvbnRleHQtPmRpc2FibGUoR3JhcGhpY3NDb250ZXh0M0Q6OkJMRU5EKTsKKyAgICAgICAgYnJl
YWs7CisgICAgY2FzZSBDb21wb3NpdGVQbHVzTGlnaHRlcjoKKyAgICAgICAgbV9jb250ZXh0LT5l
bmFibGUoR3JhcGhpY3NDb250ZXh0M0Q6OkJMRU5EKTsKKyAgICAgICAgbV9jb250ZXh0LT5ibGVu
ZEZ1bmMoR3JhcGhpY3NDb250ZXh0M0Q6Ok9ORSwgR3JhcGhpY3NDb250ZXh0M0Q6Ok9ORSk7Cisg
ICAgICAgIGJyZWFrOworICAgIH0KK30KKwordm9pZCBTaGFyZWRHcmFwaGljc0NvbnRleHQzRDo6
dXNlUXVhZFZlcnRpY2VzKCkKK3sKKyAgICBpZiAoIW1fcXVhZFZlcnRpY2VzKSB7CisgICAgICAg
IGZsb2F0IHZlcnRpY2VzW10gPSB7IDAuMGYsIDAuMGYsIDEuMGYsCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIDEuMGYsIDAuMGYsIDEuMGYsCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIDAuMGYsIDEuMGYsIDEuMGYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEuMGYs
IDEuMGYsIDEuMGYgfTsKKyAgICAgICAgbV9xdWFkVmVydGljZXMgPSBtX2NvbnRleHQtPmNyZWF0
ZUJ1ZmZlcigpOworICAgICAgICBtX2NvbnRleHQtPmJpbmRCdWZmZXIoR3JhcGhpY3NDb250ZXh0
M0Q6OkFSUkFZX0JVRkZFUiwgbV9xdWFkVmVydGljZXMpOworICAgICAgICBtX2NvbnRleHQtPmJ1
ZmZlckRhdGEoR3JhcGhpY3NDb250ZXh0M0Q6OkFSUkFZX0JVRkZFUiwgc2l6ZW9mKHZlcnRpY2Vz
KSwgdmVydGljZXMsIEdyYXBoaWNzQ29udGV4dDNEOjpTVEFUSUNfRFJBVyk7CisgICAgfSBlbHNl
IHsKKyAgICAgICAgbV9jb250ZXh0LT5iaW5kQnVmZmVyKEdyYXBoaWNzQ29udGV4dDNEOjpBUlJB
WV9CVUZGRVIsIG1fcXVhZFZlcnRpY2VzKTsKKyAgICB9Cit9CisKK3ZvaWQgU2hhcmVkR3JhcGhp
Y3NDb250ZXh0M0Q6OnNldEFjdGl2ZVRleHR1cmUodW5zaWduZWQgdGV4dHVyZVVuaXQpCit7Cisg
ICAgbV9jb250ZXh0LT5hY3RpdmVUZXh0dXJlKHRleHR1cmVVbml0KTsKK30KKwordm9pZCBTaGFy
ZWRHcmFwaGljc0NvbnRleHQzRDo6YmluZFRleHR1cmUodW5zaWduZWQgdGFyZ2V0LCB1bnNpZ25l
ZCB0ZXh0dXJlKQoreworICAgIG1fY29udGV4dC0+YmluZFRleHR1cmUodGFyZ2V0LCB0ZXh0dXJl
KTsKK30KKwordm9pZCBTaGFyZWRHcmFwaGljc0NvbnRleHQzRDo6dXNlRmlsbFNvbGlkUHJvZ3Jh
bShjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHRyYW5zZm9ybSwgY29uc3QgQ29sb3ImIGNvbG9yKQor
eworICAgIG1fc29saWRGaWxsU2hhZGVyLT51c2UodHJhbnNmb3JtLCBjb2xvcik7Cit9CisKK3Zv
aWQgU2hhcmVkR3JhcGhpY3NDb250ZXh0M0Q6OnVzZVRleHR1cmVQcm9ncmFtKGNvbnN0IEFmZmlu
ZVRyYW5zZm9ybSYgdHJhbnNmb3JtLCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHRleFRyYW5zZm9y
bSwgZmxvYXQgYWxwaGEpCit7CisgICAgbV90ZXhTaGFkZXItPnVzZSh0cmFuc2Zvcm0sIHRleFRy
YW5zZm9ybSwgMCwgYWxwaGEpOworfQorCit2b2lkIFNoYXJlZEdyYXBoaWNzQ29udGV4dDNEOjpi
aW5kRnJhbWVidWZmZXIodW5zaWduZWQgZnJhbWVidWZmZXIpCit7CisgICAgbV9jb250ZXh0LT5i
aW5kRnJhbWVidWZmZXIoR3JhcGhpY3NDb250ZXh0M0Q6OkZSQU1FQlVGRkVSLCBmcmFtZWJ1ZmZl
cik7Cit9CisKK3ZvaWQgU2hhcmVkR3JhcGhpY3NDb250ZXh0M0Q6OnNldFZpZXdwb3J0KGNvbnN0
IEludFNpemUmIHNpemUpCit7CisgICAgbV9jb250ZXh0LT52aWV3cG9ydCgwLCAwLCBzaXplLndp
ZHRoKCksIHNpemUuaGVpZ2h0KCkpOworfQorCitib29sIFNoYXJlZEdyYXBoaWNzQ29udGV4dDNE
OjpwYWludHNJbnRvQ2FudmFzQnVmZmVyKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9jb250ZXh0
LT5wYWludHNJbnRvQ2FudmFzQnVmZmVyKCk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUK
ZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3B1L1NoYXJlZEdyYXBoaWNz
Q29udGV4dDNELmggYi9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dwdS9TaGFyZWRHcmFwaGlj
c0NvbnRleHQzRC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjFiYWEwZjZmNDc4MDYxOWE3MjUwZWE1NjgyZTI2MWM0
ZjkxYmNhYTAKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dw
dS9TaGFyZWRHcmFwaGljc0NvbnRleHQzRC5oCkBAIC0wLDAgKzEsMTI0IEBACisvKgorICogQ29w
eXJpZ2h0IChjKSAyMDEwLCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorICogbWV0OgorICoKKyAqICAgICAqIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlCisgKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisgKiBpbiB0aGUgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiBkaXN0cmli
dXRpb24uCisgKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUg
bmFtZXMgb2YgaXRzCisgKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBw
cm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNw
ZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAi
QVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorICogT1dORVIgT1IgQ09O
VFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
CisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJV
U0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZ
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgU2hh
cmVkR3JhcGhpY3NDb250ZXh0M0RfaAorI2RlZmluZSBTaGFyZWRHcmFwaGljc0NvbnRleHQzRF9o
CisKKyNpbmNsdWRlICJHcmFwaGljc1R5cGVzLmgiCisjaW5jbHVkZSAiSW1hZ2VTb3VyY2UuaCIK
KyNpbmNsdWRlICJUZXh0dXJlLmgiCisKKyNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgorI2luY2x1
ZGUgPHd0Zi9Pd25QdHIuaD4KKyNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgorI2luY2x1ZGUg
PHd0Zi9SZWZQdHIuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBBZmZpbmVUcmFu
c2Zvcm07CitjbGFzcyBDb2xvcjsKK2NsYXNzIEdyYXBoaWNzQ29udGV4dDNEOworY2xhc3MgRmxv
YXRSZWN0OworY2xhc3MgSW50U2l6ZTsKK2NsYXNzIFNvbGlkRmlsbFNoYWRlcjsKK2NsYXNzIFRl
eFNoYWRlcjsKKwordHlwZWRlZiBIYXNoTWFwPE5hdGl2ZUltYWdlUHRyLCBSZWZQdHI8VGV4dHVy
ZT4gPiBUZXh0dXJlSGFzaE1hcDsKKworY2xhc3MgU2hhcmVkR3JhcGhpY3NDb250ZXh0M0QgOiBw
dWJsaWMgUmVmQ291bnRlZDxTaGFyZWRHcmFwaGljc0NvbnRleHQzRD4geworcHVibGljOgorICAg
IHN0YXRpYyBQYXNzUmVmUHRyPFNoYXJlZEdyYXBoaWNzQ29udGV4dDNEPiBjcmVhdGUoUGFzc093
blB0cjxHcmFwaGljc0NvbnRleHQzRD4pOworICAgIH5TaGFyZWRHcmFwaGljc0NvbnRleHQzRCgp
OworCisgICAgLy8gRnVuY3Rpb25zIHRoYXQgZGVsZWdhdGUgZGlyZWN0bHkgdG8gR3JhcGhpY3ND
b250ZXh0M0QsIHdpdGggY2FjaGluZworICAgIHZvaWQgbWFrZUNvbnRleHRDdXJyZW50KCk7Cisg
ICAgdm9pZCBiaW5kRnJhbWVidWZmZXIodW5zaWduZWQgZnJhbWVidWZmZXIpOworICAgIHZvaWQg
c2V0Vmlld3BvcnQoY29uc3QgSW50U2l6ZSYpOworICAgIHZvaWQgc2Npc3Nvcihjb25zdCBGbG9h
dFJlY3QmKTsKKyAgICB2b2lkIGVuYWJsZSh1bnNpZ25lZCBjYXBhY2l0eSk7CisgICAgdm9pZCBk
aXNhYmxlKHVuc2lnbmVkIGNhcGFjaXR5KTsKKyAgICB2b2lkIGNsZWFyQ29sb3IoY29uc3QgQ29s
b3ImKTsKKyAgICB2b2lkIGNsZWFyKHVuc2lnbmVkIG1hc2spOworICAgIHZvaWQgZHJhd0FycmF5
cyh1bnNpZ25lZCBsb25nIG1vZGUsIGxvbmcgZmlyc3QsIGxvbmcgY291bnQpOworICAgIHVuc2ln
bmVkIGxvbmcgZ2V0RXJyb3IoKTsKKyAgICB2b2lkIGdldEludGVnZXJ2KHVuc2lnbmVkIGxvbmcg
cG5hbWUsIGludCogdmFsdWUpOworCisgICAgdW5zaWduZWQgY3JlYXRlRnJhbWVidWZmZXIoKTsK
KyAgICB1bnNpZ25lZCBjcmVhdGVUZXh0dXJlKCk7CisKKyAgICB2b2lkIGRlbGV0ZUZyYW1lYnVm
ZmVyKHVuc2lnbmVkIGZyYW1lYnVmZmVyKTsKKyAgICB2b2lkIGRlbGV0ZVRleHR1cmUodW5zaWdu
ZWQgdGV4dHVyZSk7CisKKyAgICB2b2lkIGZyYW1lYnVmZmVyVGV4dHVyZTJEKHVuc2lnbmVkIGxv
bmcgdGFyZ2V0LCB1bnNpZ25lZCBsb25nIGF0dGFjaG1lbnQsIHVuc2lnbmVkIGxvbmcgdGV4dGFy
Z2V0LCB1bnNpZ25lZCwgbG9uZyBsZXZlbCk7CisgICAgdm9pZCB0ZXhQYXJhbWV0ZXJpKHVuc2ln
bmVkIHRhcmdldCwgdW5zaWduZWQgcG5hbWUsIGludCBwYXJhbSk7CisgICAgaW50IHRleEltYWdl
MkQodW5zaWduZWQgdGFyZ2V0LCB1bnNpZ25lZCBsZXZlbCwgdW5zaWduZWQgaW50ZXJuYWxmb3Jt
YXQsIHVuc2lnbmVkIHdpZHRoLCB1bnNpZ25lZCBoZWlnaHQsIHVuc2lnbmVkIGJvcmRlciwgdW5z
aWduZWQgZm9ybWF0LCB1bnNpZ25lZCB0eXBlLCB2b2lkKiBwaXhlbHMpOworICAgIGludCB0ZXhT
dWJJbWFnZTJEKHVuc2lnbmVkIHRhcmdldCwgdW5zaWduZWQgbGV2ZWwsIHVuc2lnbmVkIHhvZmZz
ZXQsIHVuc2lnbmVkIHlvZmZzZXQsIHVuc2lnbmVkIHdpZHRoLCB1bnNpZ25lZCBoZWlnaHQsIHVu
c2lnbmVkIGZvcm1hdCwgdW5zaWduZWQgdHlwZSwgdm9pZCogcGl4ZWxzKTsKKworICAgIHZvaWQg
cmVhZFBpeGVscyhsb25nIHgsIGxvbmcgeSwgdW5zaWduZWQgbG9uZyB3aWR0aCwgdW5zaWduZWQg
bG9uZyBoZWlnaHQsIHVuc2lnbmVkIGxvbmcgZm9ybWF0LCB1bnNpZ25lZCBsb25nIHR5cGUsIHZv
aWQqIGRhdGEpOworCisgICAgYm9vbCBwYWludHNJbnRvQ2FudmFzQnVmZmVyKCkgY29uc3Q7CisK
KyAgICAvLyBTaGFyZWQgbG9naWMgZm9yIGNhbnZhcyAyZAorICAgIHZvaWQgYXBwbHlDb21wb3Np
dGVPcGVyYXRvcihDb21wb3NpdGVPcGVyYXRvcik7CisgICAgdm9pZCB1c2VRdWFkVmVydGljZXMo
KTsKKworICAgIHZvaWQgdXNlRmlsbFNvbGlkUHJvZ3JhbShjb25zdCBBZmZpbmVUcmFuc2Zvcm0m
LCBjb25zdCBDb2xvciYpOworICAgIHZvaWQgdXNlVGV4dHVyZVByb2dyYW0oY29uc3QgQWZmaW5l
VHJhbnNmb3JtJiwgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiwgZmxvYXQgYWxwaGEpOworCisgICAg
dm9pZCBzZXRBY3RpdmVUZXh0dXJlKHVuc2lnbmVkIHRleHR1cmVVbml0KTsKKyAgICB2b2lkIGJp
bmRUZXh0dXJlKHVuc2lnbmVkIHRhcmdldCwgdW5zaWduZWQgdGV4dHVyZSk7CisKKyAgICBib29s
IHN1cHBvcnRzQkdSQSgpOworCisgICAgLy8gQ3JlYXRlcyBhIHRleHR1cmUgYXNzb2NpYXRlZCB3
aXRoIHRoZSBnaXZlbiBpbWFnZS4gIElzIG93bmVkIGJ5IHRoaXMgY29udGV4dCdzCisgICAgLy8g
VGV4dHVyZUhhc2hNYXAuCisgICAgVGV4dHVyZSogY3JlYXRlVGV4dHVyZShOYXRpdmVJbWFnZVB0
ciwgVGV4dHVyZTo6Rm9ybWF0LCBpbnQgd2lkdGgsIGludCBoZWlnaHQpOworICAgIFRleHR1cmUq
IGdldFRleHR1cmUoTmF0aXZlSW1hZ2VQdHIpOworCisgICAgLy8gQ3JlYXRlcyBhIHRleHR1cmUg
dGhhdCBpcyBub3QgYXNzb2NpYXRlZCB3aXRoIGFueSBpbWFnZS4gIFRoZSBjYWxsZXIgdGFrZXMg
b3duZXJzaGlwIG9mCisgICAgLy8gdGhlIHRleHR1cmUuCisgICAgUGFzc1JlZlB0cjxUZXh0dXJl
PiBjcmVhdGVUZXh0dXJlKFRleHR1cmU6OkZvcm1hdCwgaW50IHdpZHRoLCBpbnQgaGVpZ2h0KTsK
KworcHJpdmF0ZToKKyAgICBTaGFyZWRHcmFwaGljc0NvbnRleHQzRChQYXNzT3duUHRyPEdyYXBo
aWNzQ29udGV4dDNEPiBjb250ZXh0KTsKKworICAgIE93blB0cjxHcmFwaGljc0NvbnRleHQzRD4g
bV9jb250ZXh0OworCisgICAgdW5zaWduZWQgbV9xdWFkVmVydGljZXM7CisKKyAgICBPd25QdHI8
U29saWRGaWxsU2hhZGVyPiBtX3NvbGlkRmlsbFNoYWRlcjsKKyAgICBPd25QdHI8VGV4U2hhZGVy
PiBtX3RleFNoYWRlcjsKKworICAgIFRleHR1cmVIYXNoTWFwIG1fdGV4dHVyZXM7Cit9OworCit9
IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBTaGFyZWRHcmFwaGljc0NvbnRleHQz
RF9oCmRpZmYgLS1naXQgYS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dwdS9UZXh0dXJlLmNw
cCBiL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3B1L1RleHR1cmUuY3BwCmluZGV4IDU1NzYw
M2M5NzYzMmZlMGYzOGY1YjczNmVjNjVhM2M2NWM3MTQyMzYuLjM2ZTRhZDVlZmMyNjgyZGI1YTA5
ODI5MjAyM2MyZDNiNWZhOTZkNzggMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvZ3B1L1RleHR1cmUuY3BwCisrKyBiL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3B1L1Rl
eHR1cmUuY3BwCkBAIC0zNCw2ICszNCw3IEBACiAKICNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQz
RC5oIgogI2luY2x1ZGUgIkludFJlY3QuaCIKKwogI2luY2x1ZGUgPHd0Zi9Pd25BcnJheVB0ci5o
PgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CmRpZmYgLS1naXQgYS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL3NraWEvR3JhcGhpY3NDb250ZXh0U2tpYS5jcHAgYi9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL3NraWEvR3JhcGhpY3NDb250ZXh0U2tpYS5jcHAKaW5kZXggYjRmZGRkNTY4ZGU1ZTkx
MjhlMTM3ZTg1NWQzODhkY2M2YTkyODhiMy4uMWYzOWExYTI0ODJhNTcwOGViMTc4MGJiYjExM2Ri
M2MxODdlM2NmMCAxMDA2NDQKLS0tIGEvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9za2lhL0dy
YXBoaWNzQ29udGV4dFNraWEuY3BwCisrKyBiL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc2tp
YS9HcmFwaGljc0NvbnRleHRTa2lhLmNwcApAQCAtMTI0MiwxNCArMTI0MiwxNCBAQCB2b2lkIEdy
YXBoaWNzQ29udGV4dDo6dHJhbnNsYXRlKGZsb2F0IHcsIGZsb2F0IGgpCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgV2ViQ29yZUZsb2F0VG9Ta1NjYWxhcihoKSk7
CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpzZXRHcmFwaGljc0NvbnRleHQzRChHcmFwaGlj
c0NvbnRleHQzRCogY29udGV4dDNELCBjb25zdCBJbnRTaXplJiBzaXplKQordm9pZCBHcmFwaGlj
c0NvbnRleHQ6OnN5bmNTb2Z0d2FyZUNhbnZhcygpCiB7Ci0gICAgcGxhdGZvcm1Db250ZXh0KCkt
PnNldEdyYXBoaWNzQ29udGV4dDNEKGNvbnRleHQzRCwgc2l6ZSk7CisgICAgcGxhdGZvcm1Db250
ZXh0KCktPnN5bmNTb2Z0d2FyZUNhbnZhcygpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6
c3luY1NvZnR3YXJlQ2FudmFzKCkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0OjpzZXRTaGFyZWRHcmFw
aGljc0NvbnRleHQzRChTaGFyZWRHcmFwaGljc0NvbnRleHQzRCogY29udGV4dCwgRHJhd2luZ0J1
ZmZlciogZnJhbWVidWZmZXIsIGNvbnN0IEludFNpemUmIHNpemUpCiB7Ci0gICAgcGxhdGZvcm1D
b250ZXh0KCktPnN5bmNTb2Z0d2FyZUNhbnZhcygpOworICAgIHBsYXRmb3JtQ29udGV4dCgpLT5z
ZXRTaGFyZWRHcmFwaGljc0NvbnRleHQzRChjb250ZXh0LCBmcmFtZWJ1ZmZlciwgc2l6ZSk7CiB9
CiAKIH0gIC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL3NraWEvSW1hZ2VTa2lhLmNwcCBiL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
c2tpYS9JbWFnZVNraWEuY3BwCmluZGV4IGFlZDI4OWZlM2MxNTVhYTVkMzU5NmQ0OTRiNjA4OTNl
NGMwMTZiYjYuLjViNTk2MmEyNWEwMmE1MDgwZTYwNTMyMzQ3ODBiODJmNGJhYzRkNDQgMTAwNjQ0
Ci0tLSBhL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc2tpYS9JbWFnZVNraWEuY3BwCisrKyBi
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc2tpYS9JbWFnZVNraWEuY3BwCkBAIC00Nyw2ICs0
Nyw3IEBACiAjaW5jbHVkZSAiU2tSZWN0LmgiCiAjaW5jbHVkZSAiU2tTaGFkZXIuaCIKICNpbmNs
dWRlICJTa2lhVXRpbHMuaCIKKyNpbmNsdWRlICJUZXh0dXJlLmgiCiAKICNpbmNsdWRlICJza2lh
L2V4dC9pbWFnZV9vcGVyYXRpb25zLmgiCiAjaW5jbHVkZSAic2tpYS9leHQvcGxhdGZvcm1fY2Fu
dmFzLmgiCmRpZmYgLS1naXQgYS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3NraWEvUGxhdGZv
cm1Db250ZXh0U2tpYS5jcHAgYi9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3NraWEvUGxhdGZv
cm1Db250ZXh0U2tpYS5jcHAKaW5kZXggM2IxZDAxNWNmMTIyMzk1Mjc0M2U3YWE3NjQ5MzcyYWM0
NzZjOGY1Mi4uNTJmZTMyNzdiYWYxNGNiZmRjODBjMjYxYzRiNGEwODdlMGQyZmYxYSAxMDA2NDQK
LS0tIGEvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9za2lhL1BsYXRmb3JtQ29udGV4dFNraWEu
Y3BwCisrKyBiL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc2tpYS9QbGF0Zm9ybUNvbnRleHRT
a2lhLmNwcApAQCAtMzMsMTIgKzMzLDEzIEBACiAjaW5jbHVkZSAiUGxhdGZvcm1Db250ZXh0U2tp
YS5oIgogCiAjaW5jbHVkZSAiQWZmaW5lVHJhbnNmb3JtLmgiCi0jaW5jbHVkZSAiQ2FudmFzTGF5
ZXJDaHJvbWl1bS5oIgorI2luY2x1ZGUgIkRyYXdpbmdCdWZmZXIuaCIKICNpbmNsdWRlICJHTEVT
MkNhbnZhcy5oIgogI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgogI2luY2x1ZGUgIkdyYXBo
aWNzQ29udGV4dDNELmgiCiAjaW5jbHVkZSAiSW1hZ2VCdWZmZXIuaCIKICNpbmNsdWRlICJOYXRp
dmVJbWFnZVNraWEuaCIKKyNpbmNsdWRlICJTaGFyZWRHcmFwaGljc0NvbnRleHQzRC5oIgogI2lu
Y2x1ZGUgIlNraWFVdGlscy5oIgogI2luY2x1ZGUgIlRleHR1cmUuaCIKICNpbmNsdWRlICJUaWxp
bmdEYXRhLmgiCkBAIC0yMTYsMTIgKzIxNyw4IEBAIFBsYXRmb3JtQ29udGV4dFNraWE6OlBsYXRm
b3JtQ29udGV4dFNraWEoc2tpYTo6UGxhdGZvcm1DYW52YXMqIGNhbnZhcykKIAogUGxhdGZvcm1D
b250ZXh0U2tpYTo6flBsYXRmb3JtQ29udGV4dFNraWEoKQogewotI2lmIFVTRShBQ0NFTEVSQVRF
RF9DT01QT1NJVElORykKLSAgICBpZiAobV9ncHVDYW52YXMpIHsKLSAgICAgICAgQ2FudmFzTGF5
ZXJDaHJvbWl1bSogbGF5ZXIgPSBzdGF0aWNfY2FzdDxDYW52YXNMYXllckNocm9taXVtKj4obV9n
cHVDYW52YXMtPmNvbnRleHQoKS0+cGxhdGZvcm1MYXllcigpKTsKLSAgICAgICAgbGF5ZXItPnNl
dFByZXBhcmVUZXh0dXJlQ2FsbGJhY2soMCk7Ci0gICAgfQotI2VuZGlmCisgICAgaWYgKG1fZ3B1
Q2FudmFzKQorICAgICAgICBtX2dwdUNhbnZhcy0+ZHJhd2luZ0J1ZmZlcigpLT5zZXRXaWxsUHVi
bGlzaENhbGxiYWNrKDApOwogfQogCiB2b2lkIFBsYXRmb3JtQ29udGV4dFNraWE6OnNldENhbnZh
cyhza2lhOjpQbGF0Zm9ybUNhbnZhcyogY2FudmFzKQpAQCAtNjc4LDMzICs2NzUsMzMgQEAgdm9p
ZCBQbGF0Zm9ybUNvbnRleHRTa2lhOjphcHBseUFudGlBbGlhc2VkQ2xpcFBhdGhzKFdURjo6VmVj
dG9yPFNrUGF0aD4mIHBhdGhzKQogICAgIG1fY2FudmFzLT5yZXN0b3JlKCk7CiB9CiAKLSNpZiBV
U0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCi1jbGFzcyBQcmVwYXJlVGV4dHVyZUNhbGxiYWNr
SW1wbCA6IHB1YmxpYyBDYW52YXNMYXllckNocm9taXVtOjpQcmVwYXJlVGV4dHVyZUNhbGxiYWNr
IHsKK2NsYXNzIFdpbGxQdWJsaXNoQ2FsbGJhY2tJbXBsIDogcHVibGljIERyYXdpbmdCdWZmZXI6
OldpbGxQdWJsaXNoQ2FsbGJhY2sgewogcHVibGljOgotICAgIHN0YXRpYyBQYXNzT3duUHRyPFBy
ZXBhcmVUZXh0dXJlQ2FsbGJhY2tJbXBsPiBjcmVhdGUoUGxhdGZvcm1Db250ZXh0U2tpYSogcGNz
KQorICAgIHN0YXRpYyBQYXNzT3duUHRyPFdpbGxQdWJsaXNoQ2FsbGJhY2s+IGNyZWF0ZShQbGF0
Zm9ybUNvbnRleHRTa2lhKiBwY3MpCiAgICAgewotICAgICAgICByZXR1cm4gbmV3IFByZXBhcmVU
ZXh0dXJlQ2FsbGJhY2tJbXBsKHBjcyk7CisgICAgICAgIHJldHVybiBhZG9wdFB0cihuZXcgV2ls
bFB1Ymxpc2hDYWxsYmFja0ltcGwocGNzKSk7CiAgICAgfQogCi0gICAgdmlydHVhbCB2b2lkIHdp
bGxQcmVwYXJlVGV4dHVyZSgpCisgICAgdmlydHVhbCB2b2lkIHdpbGxQdWJsaXNoKCkKICAgICB7
CiAgICAgICAgIG1fcGNzLT5wcmVwYXJlRm9ySGFyZHdhcmVEcmF3KCk7CiAgICAgfQorCiBwcml2
YXRlOgotICAgIGV4cGxpY2l0IFByZXBhcmVUZXh0dXJlQ2FsbGJhY2tJbXBsKFBsYXRmb3JtQ29u
dGV4dFNraWEqIHBjcykgOiBtX3BjcyhwY3MpIHt9CisgICAgZXhwbGljaXQgV2lsbFB1Ymxpc2hD
YWxsYmFja0ltcGwoUGxhdGZvcm1Db250ZXh0U2tpYSogcGNzKQorICAgICAgICA6IG1fcGNzKHBj
cykKKyAgICB7CisgICAgfQorCiAgICAgUGxhdGZvcm1Db250ZXh0U2tpYSogbV9wY3M7CiB9Owot
I2VuZGlmCiAKLXZvaWQgUGxhdGZvcm1Db250ZXh0U2tpYTo6c2V0R3JhcGhpY3NDb250ZXh0M0Qo
R3JhcGhpY3NDb250ZXh0M0QqIGNvbnRleHQsIGNvbnN0IFdlYkNvcmU6OkludFNpemUmIHNpemUp
Cit2b2lkIFBsYXRmb3JtQ29udGV4dFNraWE6OnNldFNoYXJlZEdyYXBoaWNzQ29udGV4dDNEKFNo
YXJlZEdyYXBoaWNzQ29udGV4dDNEKiBjb250ZXh0LCBEcmF3aW5nQnVmZmVyKiBkcmF3aW5nQnVm
ZmVyLCBjb25zdCBXZWJDb3JlOjpJbnRTaXplJiBzaXplKQogewogICAgIG1fdXNlR1BVID0gdHJ1
ZTsKLSAgICBtX2dwdUNhbnZhcyA9IG5ldyBHTEVTMkNhbnZhcyhjb250ZXh0LCBzaXplKTsKKyAg
ICBtX2dwdUNhbnZhcyA9IG5ldyBHTEVTMkNhbnZhcyhjb250ZXh0LCBkcmF3aW5nQnVmZmVyLCBz
aXplKTsKICAgICBtX3VwbG9hZFRleHR1cmUuY2xlYXIoKTsKLSNpZiBVU0UoQUNDRUxFUkFURURf
Q09NUE9TSVRJTkcpCi0gICAgQ2FudmFzTGF5ZXJDaHJvbWl1bSogbGF5ZXIgPSBzdGF0aWNfY2Fz
dDxDYW52YXNMYXllckNocm9taXVtKj4oY29udGV4dC0+cGxhdGZvcm1MYXllcigpKTsKLSAgICBs
YXllci0+c2V0UHJlcGFyZVRleHR1cmVDYWxsYmFjayhQcmVwYXJlVGV4dHVyZUNhbGxiYWNrSW1w
bDo6Y3JlYXRlKHRoaXMpKTsKLSNlbmRpZgorICAgIGRyYXdpbmdCdWZmZXItPnNldFdpbGxQdWJs
aXNoQ2FsbGJhY2soV2lsbFB1Ymxpc2hDYWxsYmFja0ltcGw6OmNyZWF0ZSh0aGlzKSk7CiB9CiAK
IHZvaWQgUGxhdGZvcm1Db250ZXh0U2tpYTo6cHJlcGFyZUZvclNvZnR3YXJlRHJhdygpIGNvbnN0
CkBAIC03ODQsOSArNzgxLDkgQEAgdm9pZCBQbGF0Zm9ybUNvbnRleHRTa2lhOjp1cGxvYWRTb2Z0
d2FyZVRvSGFyZHdhcmUoQ29tcG9zaXRlT3BlcmF0b3Igb3ApIGNvbnN0CiB7CiAgICAgY29uc3Qg
U2tCaXRtYXAmIGJpdG1hcCA9IG1fY2FudmFzLT5nZXREZXZpY2UoKS0+YWNjZXNzQml0bWFwKGZh
bHNlKTsKICAgICBTa0F1dG9Mb2NrUGl4ZWxzIGxvY2soYml0bWFwKTsKLSAgICBHcmFwaGljc0Nv
bnRleHQzRCogY29udGV4dCA9IG1fZ3B1Q2FudmFzLT5jb250ZXh0KCk7CisgICAgU2hhcmVkR3Jh
cGhpY3NDb250ZXh0M0QqIGNvbnRleHQgPSBtX2dwdUNhbnZhcy0+Y29udGV4dCgpOwogICAgIGlm
ICghbV91cGxvYWRUZXh0dXJlIHx8IG1fdXBsb2FkVGV4dHVyZS0+dGlsZXMoKS50b3RhbFNpemVY
KCkgPCBiaXRtYXAud2lkdGgoKSB8fCBtX3VwbG9hZFRleHR1cmUtPnRpbGVzKCkudG90YWxTaXpl
WSgpIDwgYml0bWFwLmhlaWdodCgpKQotICAgICAgICBtX3VwbG9hZFRleHR1cmUgPSBUZXh0dXJl
OjpjcmVhdGUoY29udGV4dCwgVGV4dHVyZTo6QkdSQTgsIGJpdG1hcC53aWR0aCgpLCBiaXRtYXAu
aGVpZ2h0KCkpOworICAgICAgICBtX3VwbG9hZFRleHR1cmUgPSBjb250ZXh0LT5jcmVhdGVUZXh0
dXJlKFRleHR1cmU6OkJHUkE4LCBiaXRtYXAud2lkdGgoKSwgYml0bWFwLmhlaWdodCgpKTsKICAg
ICBtX3VwbG9hZFRleHR1cmUtPmxvYWQoYml0bWFwLmdldFBpeGVscygpKTsKICAgICBJbnRSZWN0
IHJlY3QoMCwgMCwgYml0bWFwLndpZHRoKCksIGJpdG1hcC5oZWlnaHQoKSk7CiAgICAgQWZmaW5l
VHJhbnNmb3JtIGlkZW50aXR5OwpAQCAtNzk5LDcgKzc5Niw4IEBAIHZvaWQgUGxhdGZvcm1Db250
ZXh0U2tpYTo6cmVhZGJhY2tIYXJkd2FyZVRvU29mdHdhcmUoKSBjb25zdAogICAgIFNrQXV0b0xv
Y2tQaXhlbHMgbG9jayhiaXRtYXApOwogICAgIGludCB3aWR0aCA9IGJpdG1hcC53aWR0aCgpLCBo
ZWlnaHQgPSBiaXRtYXAuaGVpZ2h0KCk7CiAgICAgT3duQXJyYXlQdHI8dWludDMyX3Q+IGJ1Zihu
ZXcgdWludDMyX3Rbd2lkdGhdKTsKLSAgICBHcmFwaGljc0NvbnRleHQzRCogY29udGV4dCA9IG1f
Z3B1Q2FudmFzLT5jb250ZXh0KCk7CisgICAgU2hhcmVkR3JhcGhpY3NDb250ZXh0M0QqIGNvbnRl
eHQgPSBtX2dwdUNhbnZhcy0+Y29udGV4dCgpOworICAgIG1fZ3B1Q2FudmFzLT5iaW5kRnJhbWVi
dWZmZXIoKTsKICAgICAvLyBGbGlwcyB0aGUgaW1hZ2UgdmVydGljYWxseS4KICAgICBmb3IgKGlu
dCB5ID0gMDsgeSA8IGhlaWdodDsgKyt5KSB7CiAgICAgICAgIHVpbnQzMl90KiBwaXhlbHMgPSBi
aXRtYXAuZ2V0QWRkcjMyKDAsIHkpOwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9za2lhL1BsYXRmb3JtQ29udGV4dFNraWEuaCBiL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3Mvc2tpYS9QbGF0Zm9ybUNvbnRleHRTa2lhLmgKaW5kZXggODJlZGMxNmQxZmNjZjhhZTllMTk1
MWM5MjUyY2NjOWU5NTZmNDEwMC4uMjYwNjI0MDI0YjEzNGYwZDdkMjBjMTg2ZGZjODM2MTUyYzU1
NWU0NyAxMDA2NDQKLS0tIGEvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9za2lhL1BsYXRmb3Jt
Q29udGV4dFNraWEuaAorKysgYi9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3NraWEvUGxhdGZv
cm1Db250ZXh0U2tpYS5oCkBAIC0zNSw3ICszNSw2IEBACiAjaW5jbHVkZSAiTm9uY29weWFibGUu
aCIKIAogI2luY2x1ZGUgIlNrRGFzaFBhdGhFZmZlY3QuaCIKLSNpbmNsdWRlICJTa0RlcXVlLmgi
CiAjaW5jbHVkZSAiU2tEcmF3TG9vcGVyLmgiCiAjaW5jbHVkZSAiU2tQYWludC5oIgogI2luY2x1
ZGUgIlNrUGF0aC5oIgpAQCAtNDYsOSArNDUsMTAgQEAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAog
ZW51bSBDb21wb3NpdGVPcGVyYXRvcjsKK2NsYXNzIERyYXdpbmdCdWZmZXI7CiBjbGFzcyBHTEVT
MkNhbnZhczsKLWNsYXNzIFRleHR1cmU7CiBjbGFzcyBHcmFwaGljc0NvbnRleHQzRDsKK2NsYXNz
IFRleHR1cmU7CiAKIC8vIFRoaXMgY2xhc3MgaG9sZHMgdGhlIHBsYXRmb3JtLXNwZWNpZmljIHN0
YXRlIGZvciBHcmFwaGljc0NvbnRleHQuIFdlIHB1dAogLy8gbW9zdCBvZiBvdXIgU2tpYSB3cmFw
cGVycyBvbiB0aGlzIGNsYXNzLiBJbiB0aGVvcnksIGEgbG90IG9mIHRoaXMgc3R1ZmYgY291bGQK
QEAgLTE4MSw3ICsxODEsNyBAQCBwdWJsaWM6CiAgICAgdm9pZCBjbGVhckltYWdlUmVzYW1wbGlu
Z0hpbnQoKTsKICAgICBib29sIGhhc0ltYWdlUmVzYW1wbGluZ0hpbnQoKSBjb25zdDsKICAgICBi
b29sIHVzZUdQVSgpIHsgcmV0dXJuIG1fdXNlR1BVOyB9Ci0gICAgdm9pZCBzZXRHcmFwaGljc0Nv
bnRleHQzRChHcmFwaGljc0NvbnRleHQzRCosIGNvbnN0IEludFNpemUmKTsKKyAgICB2b2lkIHNl
dFNoYXJlZEdyYXBoaWNzQ29udGV4dDNEKFNoYXJlZEdyYXBoaWNzQ29udGV4dDNEKiwgRHJhd2lu
Z0J1ZmZlciosIGNvbnN0IEludFNpemUmKTsKICAgICBHTEVTMkNhbnZhcyogZ3B1Q2FudmFzKCkg
Y29uc3QgeyByZXR1cm4gbV9ncHVDYW52YXMuZ2V0KCk7IH0KIAogICAgIC8vIENhbGwgdGhlc2Ug
YmVmb3JlIG1ha2luZyBhIGNhbGwgdGhhdCBtYW5pcHVsYXRlcyB0aGUgdW5kZXJseWluZwpkaWZm
IC0tZ2l0IGEvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJCYWNraW5nLmNwcCBiL1dlYkNv
cmUvcmVuZGVyaW5nL1JlbmRlckxheWVyQmFja2luZy5jcHAKaW5kZXggMGJhOTA3YmU5NDAwMTE0
NGRmMzdhNWFmZGI3ZDUzOWFhODc0Nzk2My4uZjkwOTBiYTcwODRmZDhhOWE2ZTg5YjdkYzVhYThm
M2M4ODAyNDQzOSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJCYWNr
aW5nLmNwcAorKysgYi9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllckJhY2tpbmcuY3BwCkBA
IC0yNyw4ICsyNywxMSBAQAogCiAjaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQogCisj
aW5jbHVkZSAiUmVuZGVyTGF5ZXJCYWNraW5nLmgiCisKICNpbmNsdWRlICJBbmltYXRpb25Db250
cm9sbGVyLmgiCiAjaW5jbHVkZSAiQ2FudmFzUmVuZGVyaW5nQ29udGV4dC5oIgorI2luY2x1ZGUg
IkNhbnZhc1JlbmRlcmluZ0NvbnRleHQyRC5oIgogI2luY2x1ZGUgIkNTU1Byb3BlcnR5TmFtZXMu
aCIKICNpbmNsdWRlICJDU1NTdHlsZVNlbGVjdG9yLmgiCiAjaW5jbHVkZSAiRnJhbWVWaWV3Lmgi
CkBAIC01MSw4ICs1NCw3IEBACiAjaW5jbHVkZSAiUmVuZGVyVmlkZW8uaCIKICNpbmNsdWRlICJS
ZW5kZXJWaWV3LmgiCiAjaW5jbHVkZSAiU2V0dGluZ3MuaCIKLQotI2luY2x1ZGUgIlJlbmRlckxh
eWVyQmFja2luZy5oIgorI2luY2x1ZGUgIldlYkdMUmVuZGVyaW5nQ29udGV4dC5oIgogCiB1c2lu
ZyBuYW1lc3BhY2Ugc3RkOwogCkBAIC0yNTgsOSArMjYwLDggQEAgYm9vbCBSZW5kZXJMYXllckJh
Y2tpbmc6OnVwZGF0ZUdyYXBoaWNzTGF5ZXJDb25maWd1cmF0aW9uKCkKICAgICBlbHNlIGlmIChp
c0FjY2VsZXJhdGVkQ2FudmFzKHJlbmRlcmVyKCkpKSB7CiAgICAgICAgIEhUTUxDYW52YXNFbGVt
ZW50KiBjYW52YXMgPSBzdGF0aWNfY2FzdDxIVE1MQ2FudmFzRWxlbWVudCo+KHJlbmRlcmVyKCkt
Pm5vZGUoKSk7CiAgICAgICAgIGlmIChDYW52YXNSZW5kZXJpbmdDb250ZXh0KiBjb250ZXh0ID0g
Y2FudmFzLT5yZW5kZXJpbmdDb250ZXh0KCkpCi0gICAgICAgICAgICBpZiAoY29udGV4dC0+Z3Jh
cGhpY3NDb250ZXh0M0QoKSkKLSAgICAgICAgICAgICAgICBpZiAoUGxhdGZvcm1MYXllciogcGwg
PSBjb250ZXh0LT5ncmFwaGljc0NvbnRleHQzRCgpLT5wbGF0Zm9ybUxheWVyKCkpCi0gICAgICAg
ICAgICAgICAgICAgIG1fZ3JhcGhpY3NMYXllci0+c2V0Q29udGVudHNUb0NhbnZhcyhwbCk7Cisg
ICAgICAgICAgICBtX2dyYXBoaWNzTGF5ZXItPnNldENvbnRlbnRzVG9DYW52YXMoY29udGV4dC0+
cGxhdGZvcm1MYXllcigpKTsKKyAgICAgICAgbGF5ZXJDb25maWdDaGFuZ2VkID0gdHJ1ZTsKICAg
ICB9CiAjZW5kaWYKIApkaWZmIC0tZ2l0IGEvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZyBiL1dl
YktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKaW5kZXggMDFhMmJiZjdiNWE4MDg4N2E4OGZlOTFjYjky
ODhkMjJjOGU1Nzg0MS4uMGVmMzI0YmYzNjdhNzIwNGU5ODhmM2RhNmJmZTc2NDg3MWU0NWE4YyAx
MDA2NDQKLS0tIGEvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZworKysgYi9XZWJLaXQvY2hyb21p
dW0vQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjQgQEAKKzIwMTAtMDktMDIgIEphbWVzIFJvYmluc29u
ICA8amFtZXNyQGNocm9taXVtLm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9P
UFMhKS4KKworICAgICAgICBNdWx0aXBsZSBhY2NlbGVyYXRlZCAyRCBjYW52YXNlcyBzaG91bGQg
YmUgYWJsZSB0byB1c2UgdGhlIHNhbWUgR3JhcGhpY3NDb250ZXh0M0QKKyAgICAgICAgaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTQ0OTI2CisKKyAgICAgICAgQWRkcyBh
IFNoYXJlZENvbnRleHQzRCB0byBXZWJWaWV3SW1wbC4gVGhlIFNoYXJlZENvbnRleHQzRCBoYXMg
dG8gbGl2ZSBvbiBXZWJWaWV3SW1wbCB0byBiZQorICAgICAgICB0aWVkIHRvIHRoZSBsaWZldGlt
ZSBvZiB0aGUgY29tcG9zaXRvciBjb250ZXh0LgorCisgICAgICAgICogc3JjL0Nocm9tZUNsaWVu
dEltcGwuY3BwOgorICAgICAgICAoV2ViS2l0OjpDaHJvbWVDbGllbnRJbXBsOjpnZXRTaGFyZWRH
cmFwaGljc0NvbnRleHQzRCk6CisgICAgICAgICogc3JjL0Nocm9tZUNsaWVudEltcGwuaDoKKyAg
ICAgICAgKiBzcmMvR3JhcGhpY3NDb250ZXh0M0QuY3BwOgorICAgICAgICAoV2ViQ29yZTo6R3Jh
cGhpY3NDb250ZXh0M0RJbnRlcm5hbDo6aW5pdGlhbGl6ZSk6CisgICAgICAgIChXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHQzREludGVybmFsOjpwbGF0Zm9ybUxheWVyKToKKyAgICAgICAgKFdlYkNv
cmU6OkdyYXBoaWNzQ29udGV4dDNEOjpwbGF0Zm9ybUxheWVyKToKKyAgICAgICAgKiBzcmMvV2Vi
Vmlld0ltcGwuY3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJWaWV3SW1wbDo6Z2V0U2hhcmVkR3Jh
cGhpY3NDb250ZXh0M0QpOgorICAgICAgICAqIHNyYy9XZWJWaWV3SW1wbC5oOgorCiAyMDEwLTA4
LTMwICBLaW51a28gWWFzdWRhICA8a2ludWtvQGNocm9taXVtLm9zcmM+CiAKICAgICAgICAgUmV2
aWV3ZWQgYnkgRGFyaW4gRmlzaGVyLgpkaWZmIC0tZ2l0IGEvV2ViS2l0L2Nocm9taXVtL3NyYy9D
aHJvbWVDbGllbnRJbXBsLmNwcCBiL1dlYktpdC9jaHJvbWl1bS9zcmMvQ2hyb21lQ2xpZW50SW1w
bC5jcHAKaW5kZXggZTZmMTQwMDcxODBkOGQzYmY2MTI4YjEzMGRjMjhhYmFhZWMxZjkwYS4uOWVk
ZWUwMjhmOGEwNzAzNTMzYjUxYWI1ZTMwOTRlYWViMThkMGI1ZiAxMDA2NDQKLS0tIGEvV2ViS2l0
L2Nocm9taXVtL3NyYy9DaHJvbWVDbGllbnRJbXBsLmNwcAorKysgYi9XZWJLaXQvY2hyb21pdW0v
c3JjL0Nocm9tZUNsaWVudEltcGwuY3BwCkBAIC01OSw2ICs1OSw3IEBACiAjaW5jbHVkZSAiU2Vh
cmNoUG9wdXBNZW51Q2hyb21pdW0uaCIKICNpbmNsdWRlICJTY3JpcHRDb250cm9sbGVyLmgiCiAj
aW5jbHVkZSAiU2VjdXJpdHlPcmlnaW4uaCIKKyNpbmNsdWRlICJTaGFyZWRHcmFwaGljc0NvbnRl
eHQzRC5oIgogI2luY2x1ZGUgIldlYkdlb2xvY2F0aW9uU2VydmljZS5oIgogI2lmIFVTRShWOCkK
ICNpbmNsdWRlICJWOFByb3h5LmgiCkBAIC03NTEsNiArNzUyLDExIEBAIHZvaWQgQ2hyb21lQ2xp
ZW50SW1wbDo6c2NoZWR1bGVDb21wb3NpdGluZ0xheWVyU3luYygpCiB9CiAjZW5kaWYKIAorV2Vi
Q29yZTo6U2hhcmVkR3JhcGhpY3NDb250ZXh0M0QqIENocm9tZUNsaWVudEltcGw6OmdldFNoYXJl
ZEdyYXBoaWNzQ29udGV4dDNEKCkKK3sKKyAgICByZXR1cm4gbV93ZWJWaWV3LT5nZXRTaGFyZWRH
cmFwaGljc0NvbnRleHQzRCgpOworfQorCiBib29sIENocm9tZUNsaWVudEltcGw6OnN1cHBvcnRz
RnVsbHNjcmVlbkZvck5vZGUoY29uc3QgV2ViQ29yZTo6Tm9kZSogbm9kZSkKIHsKICAgICBpZiAo
bV93ZWJWaWV3LT5jbGllbnQoKSAmJiBub2RlLT5oYXNUYWdOYW1lKFdlYkNvcmU6OkhUTUxOYW1l
czo6dmlkZW9UYWcpKQpkaWZmIC0tZ2l0IGEvV2ViS2l0L2Nocm9taXVtL3NyYy9DaHJvbWVDbGll
bnRJbXBsLmggYi9XZWJLaXQvY2hyb21pdW0vc3JjL0Nocm9tZUNsaWVudEltcGwuaAppbmRleCBi
ZmY5ZjkwNDdmYTdjN2YzYWJkNzA0ZDk0Nzg1ZDljMWZhY2Y3NzQwLi5kN2I1Yzg2YzlmZTNmZWM0
NWY3OTNhZTEyYjlkNTI0MWJjOWQ5YzNmIDEwMDY0NAotLS0gYS9XZWJLaXQvY2hyb21pdW0vc3Jj
L0Nocm9tZUNsaWVudEltcGwuaAorKysgYi9XZWJLaXQvY2hyb21pdW0vc3JjL0Nocm9tZUNsaWVu
dEltcGwuaApAQCAtMTUyLDYgKzE1Miw4IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIHZvaWQgc2No
ZWR1bGVDb21wb3NpdGluZ0xheWVyU3luYygpOwogI2VuZGlmCiAKKyAgICB2aXJ0dWFsIFdlYkNv
cmU6OlNoYXJlZEdyYXBoaWNzQ29udGV4dDNEKiBnZXRTaGFyZWRHcmFwaGljc0NvbnRleHQzRCgp
OworCiAgICAgdmlydHVhbCBib29sIHN1cHBvcnRzRnVsbHNjcmVlbkZvck5vZGUoY29uc3QgV2Vi
Q29yZTo6Tm9kZSopOwogICAgIHZpcnR1YWwgdm9pZCBlbnRlckZ1bGxzY3JlZW5Gb3JOb2RlKFdl
YkNvcmU6Ok5vZGUqKTsKICAgICB2aXJ0dWFsIHZvaWQgZXhpdEZ1bGxzY3JlZW5Gb3JOb2RlKFdl
YkNvcmU6Ok5vZGUqKTsKZGlmZiAtLWdpdCBhL1dlYktpdC9jaHJvbWl1bS9zcmMvR3JhcGhpY3ND
b250ZXh0M0QuY3BwIGIvV2ViS2l0L2Nocm9taXVtL3NyYy9HcmFwaGljc0NvbnRleHQzRC5jcHAK
aW5kZXggNmJjNWZmZTQzMWU4NGU0ZTdiZTIwZTk0MDQxNGVkZWFmODMzYTljNy4uNmE5YjNlNGRl
NzRkMjMyYzMxOTgxMTA4ZDBhNTdiYjM3NjdiZmYwOCAxMDA2NDQKLS0tIGEvV2ViS2l0L2Nocm9t
aXVtL3NyYy9HcmFwaGljc0NvbnRleHQzRC5jcHAKKysrIGIvV2ViS2l0L2Nocm9taXVtL3NyYy9H
cmFwaGljc0NvbnRleHQzRC5jcHAKQEAgLTM1LDcgKzM1LDcgQEAKICNpbmNsdWRlICJHcmFwaGlj
c0NvbnRleHQzRC5oIgogCiAjaW5jbHVkZSAiQ2FjaGVkSW1hZ2UuaCIKLSNpbmNsdWRlICJDYW52
YXNMYXllckNocm9taXVtLmgiCisjaW5jbHVkZSAiV2ViR0xMYXllckNocm9taXVtLmgiCiAjaW5j
bHVkZSAiQ2FudmFzUmVuZGVyaW5nQ29udGV4dC5oIgogI2luY2x1ZGUgIkNocm9tZS5oIgogI2lu
Y2x1ZGUgIkNocm9tZUNsaWVudEltcGwuaCIKQEAgLTEwMyw3ICsxMDMsNyBAQCBwdWJsaWM6CiAg
ICAgdm9pZCBwcmVwYXJlVGV4dHVyZSgpOwogCiAjaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lU
SU5HKQotICAgIENhbnZhc0xheWVyQ2hyb21pdW0qIHBsYXRmb3JtTGF5ZXIoKSBjb25zdDsKKyAg
ICBXZWJHTExheWVyQ2hyb21pdW0qIHBsYXRmb3JtTGF5ZXIoKSBjb25zdDsKICNlbmRpZgogICAg
IGJvb2wgaXNHTEVTMkNvbXBsaWFudCgpIGNvbnN0OwogICAgIGJvb2wgaXNHTEVTMk5QT1RTdHJp
Y3QoKSBjb25zdDsKQEAgLTI5OCw3ICsyOTgsNyBAQCBwcml2YXRlOgogICAgIE93blB0cjxXZWJL
aXQ6OldlYkdyYXBoaWNzQ29udGV4dDNEPiBtX2ltcGw7CiAgICAgV2ViS2l0OjpXZWJWaWV3SW1w
bCogbV93ZWJWaWV3SW1wbDsKICNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCi0gICAg
UmVmUHRyPENhbnZhc0xheWVyQ2hyb21pdW0+IG1fY29tcG9zaXRpbmdMYXllcjsKKyAgICBSZWZQ
dHI8V2ViR0xMYXllckNocm9taXVtPiBtX2NvbXBvc2l0aW5nTGF5ZXI7CiAjZW5kaWYKICNpZiBQ
TEFURk9STShTS0lBKQogICAgIC8vIElmIHRoZSB3aWR0aCBhbmQgaGVpZ2h0IG9mIHRoZSBDYW52
YXMncyBiYWNraW5nIHN0b3JlIGRvbid0CkBAIC0zNjAsNyArMzYwLDcgQEAgYm9vbCBHcmFwaGlj
c0NvbnRleHQzREludGVybmFsOjppbml0aWFsaXplKEdyYXBoaWNzQ29udGV4dDNEOjpBdHRyaWJ1
dGVzIGF0dHJzLAogICAgIG1faW1wbC5zZXQod2ViQ29udGV4dCk7CiAKICNpZiBVU0UoQUNDRUxF
UkFURURfQ09NUE9TSVRJTkcpCi0gICAgbV9jb21wb3NpdGluZ0xheWVyID0gQ2FudmFzTGF5ZXJD
aHJvbWl1bTo6Y3JlYXRlKDApOworICAgIG1fY29tcG9zaXRpbmdMYXllciA9IFdlYkdMTGF5ZXJD
aHJvbWl1bTo6Y3JlYXRlKDApOwogI2VuZGlmCiAgICAgcmV0dXJuIHRydWU7CiB9CkBAIC0zODEs
NyArMzgxLDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQzREludGVybmFsOjpwcmVwYXJlVGV4dHVy
ZSgpCiB9CiAKICNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCi1DYW52YXNMYXllckNo
cm9taXVtKiBHcmFwaGljc0NvbnRleHQzREludGVybmFsOjpwbGF0Zm9ybUxheWVyKCkgY29uc3QK
K1dlYkdMTGF5ZXJDaHJvbWl1bSogR3JhcGhpY3NDb250ZXh0M0RJbnRlcm5hbDo6cGxhdGZvcm1M
YXllcigpIGNvbnN0CiB7CiAgICAgcmV0dXJuIG1fY29tcG9zaXRpbmdMYXllci5nZXQoKTsKIH0K
QEAgLTEwMzksNyArMTAzOSw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OnByZXBhcmVUZXh0
dXJlKCkKICNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCiBQbGF0Zm9ybUxheWVyKiBH
cmFwaGljc0NvbnRleHQzRDo6cGxhdGZvcm1MYXllcigpIGNvbnN0CiB7Ci0gICAgQ2FudmFzTGF5
ZXJDaHJvbWl1bSogY2FudmFzTGF5ZXIgPSBtX2ludGVybmFsLT5wbGF0Zm9ybUxheWVyKCk7Cisg
ICAgV2ViR0xMYXllckNocm9taXVtKiBjYW52YXNMYXllciA9IG1faW50ZXJuYWwtPnBsYXRmb3Jt
TGF5ZXIoKTsKICAgICBjYW52YXNMYXllci0+c2V0Q29udGV4dCh0aGlzKTsKICAgICByZXR1cm4g
Y2FudmFzTGF5ZXI7CiB9CmRpZmYgLS1naXQgYS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYlZpZXdJ
bXBsLmNwcCBiL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViVmlld0ltcGwuY3BwCmluZGV4IDUwNjVm
NWViOWI2NDA4M2ZjM2IxZTE3NGY0MjgxNWM1NzM3YjQ4MzkuLjU1MzM1Y2NhZjNiMjNjZjU4NDdi
N2Q3ODBjMDE4MjhkYTYxYTI2MDYgMTAwNjQ0Ci0tLSBhL1dlYktpdC9jaHJvbWl1bS9zcmMvV2Vi
Vmlld0ltcGwuY3BwCisrKyBiL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViVmlld0ltcGwuY3BwCkBA
IC01OCw2ICs1OCw3IEBACiAjaW5jbHVkZSAiR0xFUzJDb250ZXh0LmgiCiAjaW5jbHVkZSAiR0xF
UzJDb250ZXh0SW50ZXJuYWwuaCIKICNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKKyNpbmNs
dWRlICJHcmFwaGljc0NvbnRleHQzRC5oIgogI2luY2x1ZGUgIkhUTUxJbnB1dEVsZW1lbnQuaCIK
ICNpbmNsdWRlICJIVE1MTWVkaWFFbGVtZW50LmgiCiAjaW5jbHVkZSAiSGl0VGVzdFJlc3VsdC5o
IgpAQCAtODYsNiArODcsNyBAQAogI2luY2x1ZGUgIlNlY3VyaXR5T3JpZ2luLmgiCiAjaW5jbHVk
ZSAiU2VsZWN0aW9uQ29udHJvbGxlci5oIgogI2luY2x1ZGUgIlNldHRpbmdzLmgiCisjaW5jbHVk
ZSAiU2hhcmVkR3JhcGhpY3NDb250ZXh0M0QuaCIKICNpbmNsdWRlICJUaW1lci5oIgogI2luY2x1
ZGUgIlR5cGluZ0NvbW1hbmQuaCIKICNpbmNsdWRlICJVc2VyR2VzdHVyZUluZGljYXRvci5oIgpA
QCAtMjIxMSwxNCArMjIxMywxNSBAQCBQYXNzT3duUHRyPEdMRVMyQ29udGV4dD4gV2ViVmlld0lt
cGw6OmdldE9uc2NyZWVuR0xFUzJDb250ZXh0KCkKICAgICByZXR1cm4gR0xFUzJDb250ZXh0Ojpj
cmVhdGUoR0xFUzJDb250ZXh0SW50ZXJuYWw6OmNyZWF0ZShnbGVzMkNvbnRleHQoKSwgZmFsc2Up
KTsKIH0KIAotUGFzc093blB0cjxHTEVTMkNvbnRleHQ+IFdlYlZpZXdJbXBsOjpnZXRPZmZzY3Jl
ZW5HTEVTMkNvbnRleHQoKQorU2hhcmVkR3JhcGhpY3NDb250ZXh0M0QqIFdlYlZpZXdJbXBsOjpn
ZXRTaGFyZWRHcmFwaGljc0NvbnRleHQzRCgpCiB7Ci0gICAgV2ViR0xFUzJDb250ZXh0KiBjb250
ZXh0ID0gd2ViS2l0Q2xpZW50KCktPmNyZWF0ZUdMRVMyQ29udGV4dCgpOwotICAgIGlmICghY29u
dGV4dCkKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgaWYgKCFjb250ZXh0LT5pbml0aWFsaXplKDAs
IGdsZXMyQ29udGV4dCgpKSkKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgcmV0dXJuIEdMRVMyQ29u
dGV4dDo6Y3JlYXRlKEdMRVMyQ29udGV4dEludGVybmFsOjpjcmVhdGUoY29udGV4dCwgdHJ1ZSkp
OworICAgIGlmICghbV9zaGFyZWRDb250ZXh0M0QpIHsKKyAgICAgICAgR3JhcGhpY3NDb250ZXh0
M0Q6OkF0dHJpYnV0ZXMgYXR0cjsKKyAgICAgICAgT3duUHRyPEdyYXBoaWNzQ29udGV4dDNEPiBj
b250ZXh0ID0gR3JhcGhpY3NDb250ZXh0M0Q6OmNyZWF0ZShhdHRyLCBtX3BhZ2UtPmNocm9tZSgp
KTsKKyAgICAgICAgbV9zaGFyZWRDb250ZXh0M0QgPSBTaGFyZWRHcmFwaGljc0NvbnRleHQzRDo6
Y3JlYXRlKGNvbnRleHQucmVsZWFzZSgpKTsKKyAgICB9CisKKyAgICByZXR1cm4gbV9zaGFyZWRD
b250ZXh0M0QuZ2V0KCk7CiB9CiAKIC8vIFJldHVybnMgdGhlIEdMRVMyIGNvbnRleHQgYXNzb2Np
YXRlZCB3aXRoIHRoaXMgVmlldy4gSWYgb25lIGRvZXNuJ3QgZXhpc3QKZGlmZiAtLWdpdCBhL1dl
YktpdC9jaHJvbWl1bS9zcmMvV2ViVmlld0ltcGwuaCBiL1dlYktpdC9jaHJvbWl1bS9zcmMvV2Vi
Vmlld0ltcGwuaAppbmRleCBjMjk2MTIxMjNmNDUxNGM5NGRkN2Q5NzBjNzMxMTRhNGJlZWVjMzU1
Li42Y2UyNzU3YTgyZTliZDRjMDhhNDRiZWUyMjM1NGQyMzYzY2I4MzE4IDEwMDY0NAotLS0gYS9X
ZWJLaXQvY2hyb21pdW0vc3JjL1dlYlZpZXdJbXBsLmgKKysrIGIvV2ViS2l0L2Nocm9taXVtL3Ny
Yy9XZWJWaWV3SW1wbC5oCkBAIC0zMjksMTAgKzMyOSwxMCBAQCBwdWJsaWM6CiAgICAgLy8gT2Zm
c2NyZWVuIGNvbnRleHRzIHJlbmRlciBvZmZzY3JlZW4gYnV0IGNhbiBzaGFyZSByZXNvdXJjZXMg
d2l0aCB0aGUKICAgICAvLyBvbnNjcmVlbiBjb250ZXh0IGFuZCB0aHVzIGNhbiBiZSBjb21wb3Np
dGVkLgogICAgIFBhc3NPd25QdHI8V2ViQ29yZTo6R0xFUzJDb250ZXh0PiBnZXRPbnNjcmVlbkdM
RVMyQ29udGV4dCgpOwotICAgIFBhc3NPd25QdHI8V2ViQ29yZTo6R0xFUzJDb250ZXh0PiBnZXRP
ZmZzY3JlZW5HTEVTMkNvbnRleHQoKTsKIAogICAgIC8vIFJldHVybnMgYW4gb25zY3JlZW4gY29u
dGV4dAogICAgIHZpcnR1YWwgV2ViR0xFUzJDb250ZXh0KiBnbGVzMkNvbnRleHQoKTsKKyAgICB2
aXJ0dWFsIFdlYkNvcmU6OlNoYXJlZEdyYXBoaWNzQ29udGV4dDNEKiBnZXRTaGFyZWRHcmFwaGlj
c0NvbnRleHQzRCgpOwogCiAgICAgV2ViQ29yZTo6UG9wdXBDb250YWluZXIqIHNlbGVjdFBvcHVw
KCkgY29uc3QgeyByZXR1cm4gbV9zZWxlY3RQb3B1cC5nZXQoKTsgfQogCkBAIC01MjEsNiArNTIx
LDggQEAgcHJpdmF0ZToKIAogICAgIE93blB0cjxXZWJHTEVTMkNvbnRleHQ+IG1fZ2xlczJDb250
ZXh0OwogCisgICAgUmVmUHRyPFdlYkNvcmU6OlNoYXJlZEdyYXBoaWNzQ29udGV4dDNEPiBtX3No
YXJlZENvbnRleHQzRDsKKwogICAgIE93blB0cjxEZXZpY2VPcmllbnRhdGlvbkNsaWVudFByb3h5
PiBtX2RldmljZU9yaWVudGF0aW9uQ2xpZW50UHJveHk7CiB9OwogCg==
</data>

          </attachment>
      

    </bug>

</bugzilla>